diff --git a/dist_plainjs/manually_maintained_types.d.ts b/dist_plainjs/manually_maintained_types.d.ts index 6c9dcffc..2dc51d1b 100644 --- a/dist_plainjs/manually_maintained_types.d.ts +++ b/dist_plainjs/manually_maintained_types.d.ts @@ -21,6 +21,7 @@ declare global { singleSelection?: boolean; ts4nfdiGateway: boolean; singleSuggestionRow?: boolean; + showApiSource?: boolean; } )=>void, createDataContent:(props:{ diff --git a/dist_plainjs/terminology-service-suite.js b/dist_plainjs/terminology-service-suite.js index 270de1f3..518a26b4 100644 --- a/dist_plainjs/terminology-service-suite.js +++ b/dist_plainjs/terminology-service-suite.js @@ -30773,6 +30773,26 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var isAsyncFn = kindOfTest("AsyncFunction"); var isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); + var _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + return postMessageSupported ? ((token2, callbacks) => { + _global.addEventListener("message", ({ source, data }) => { + if (source === _global && data === token2) { + callbacks.length && callbacks.shift()(); + } + }, false); + return (cb) => { + callbacks.push(cb); + _global.postMessage(token2, "*"); + }; + })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); + })( + typeof setImmediate === "function", + isFunction(_global.postMessage) + ); + var asap = typeof queueMicrotask !== "undefined" ? queueMicrotask.bind(_global) : typeof process !== "undefined" && process.nextTick || _setImmediate; var utils_default = { isArray, isArrayBuffer, @@ -30829,7 +30849,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); isSpecCompliantForm, toJSONObject, isAsyncFn, - isThenable + isThenable, + setImmediate: _setImmediate, + asap }; // node_modules/axios/lib/core/AxiosError.js @@ -30845,7 +30867,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); code && (this.code = code); config && (this.config = config); request && (this.request = request); - response && (this.response = response); + if (response) { + this.response = response; + this.status = response.status ? response.status : null; + } } utils_default.inherits(AxiosError, Error, { toJSON: function toJSON() { @@ -30864,7 +30889,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); // Axios config: utils_default.toJSONObject(this.config), code: this.code, - status: this.response && this.response.status ? this.response.status : null + status: this.status }; } }); @@ -31178,12 +31203,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); hasBrowserEnv: () => hasBrowserEnv, hasStandardBrowserEnv: () => hasStandardBrowserEnv, hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv, + navigator: () => _navigator, origin: () => origin }); var hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined"; - var hasStandardBrowserEnv = ((product) => { - return hasBrowserEnv && ["ReactNative", "NativeScript", "NS"].indexOf(product) < 0; - })(typeof navigator !== "undefined" && navigator.product); + var _navigator = typeof navigator === "object" && navigator || void 0; + var hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ["ReactNative", "NativeScript", "NS"].indexOf(_navigator.product) < 0); var hasStandardBrowserWebWorkerEnv = (() => { return typeof WorkerGlobalScope !== "undefined" && // eslint-disable-next-line no-undef self instanceof WorkerGlobalScope && typeof self.importScripts === "function"; @@ -31728,32 +31753,40 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); // node_modules/axios/lib/helpers/throttle.js function throttle(fn, freq) { let timestamp = 0; - const threshold = 1e3 / freq; - let timer = null; - return function throttled() { - const force = this === true; + let threshold = 1e3 / freq; + let lastArgs; + let timer; + const invoke = (args, now2 = Date.now()) => { + timestamp = now2; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + }; + const throttled = (...args) => { const now2 = Date.now(); - if (force || now2 - timestamp > threshold) { - if (timer) { - clearTimeout(timer); - timer = null; + const passed = now2 - timestamp; + if (passed >= threshold) { + invoke(args, now2); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); } - timestamp = now2; - return fn.apply(null, arguments); - } - if (!timer) { - timer = setTimeout(() => { - timer = null; - timestamp = Date.now(); - return fn.apply(null, arguments); - }, threshold - (now2 - timestamp)); } }; + const flush = () => lastArgs && invoke(lastArgs); + return [throttled, flush]; } var throttle_default = throttle; // node_modules/axios/lib/helpers/progressEventReducer.js - var progressEventReducer_default = (listener, isDownloadStream, freq = 3) => { + var progressEventReducer = (listener, isDownloadStream, freq = 3) => { let bytesNotified = 0; const _speedometer = speedometer_default(50, 250); return throttle_default((e) => { @@ -31771,19 +31804,28 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); rate: rate ? rate : void 0, estimated: rate && total && inRange ? (total - loaded) / rate : void 0, event: e, - lengthComputable: total != null + lengthComputable: total != null, + [isDownloadStream ? "download" : "upload"]: true }; - data[isDownloadStream ? "download" : "upload"] = true; listener(data); }, freq); }; + var progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; + }; + var asyncDecorator = (fn) => (...args) => utils_default.asap(() => fn(...args)); // node_modules/axios/lib/helpers/isURLSameOrigin.js var isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? ( // Standard browser envs have full support of the APIs needed to test // whether the request URL is of the same origin as current location. function standardBrowserEnv() { - const msie = /(msie|trident)/i.test(navigator.userAgent); + const msie = platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent); const urlParsingNode = document.createElement("a"); let originURL; function resolveURL(url) { @@ -31990,15 +32032,15 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); const _config = resolveConfig_default(config); let requestData = _config.data; const requestHeaders = AxiosHeaders_default.from(_config.headers).normalize(); - let { responseType } = _config; + let { responseType, onUploadProgress, onDownloadProgress } = _config; let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; function done() { - if (_config.cancelToken) { - _config.cancelToken.unsubscribe(onCanceled); - } - if (_config.signal) { - _config.signal.removeEventListener("abort", onCanceled); - } + flushUpload && flushUpload(); + flushDownload && flushDownload(); + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + _config.signal && _config.signal.removeEventListener("abort", onCanceled); } let request = new XMLHttpRequest(); request.open(_config.method.toUpperCase(), _config.url, true); @@ -32045,11 +32087,11 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); if (!request) { return; } - reject(new AxiosError_default("Request aborted", AxiosError_default.ECONNABORTED, _config, request)); + reject(new AxiosError_default("Request aborted", AxiosError_default.ECONNABORTED, config, request)); request = null; }; request.onerror = function handleError() { - reject(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, _config, request)); + reject(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, config, request)); request = null; }; request.ontimeout = function handleTimeout() { @@ -32061,7 +32103,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); reject(new AxiosError_default( timeoutErrorMessage, transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED, - _config, + config, request )); request = null; @@ -32078,11 +32120,14 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); if (responseType && responseType !== "json") { request.responseType = _config.responseType; } - if (typeof _config.onDownloadProgress === "function") { - request.addEventListener("progress", progressEventReducer_default(_config.onDownloadProgress, true)); + if (onDownloadProgress) { + [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true); + request.addEventListener("progress", downloadThrottled); } - if (typeof _config.onUploadProgress === "function" && request.upload) { - request.upload.addEventListener("progress", progressEventReducer_default(_config.onUploadProgress)); + if (onUploadProgress && request.upload) { + [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress); + request.upload.addEventListener("progress", uploadThrottled); + request.upload.addEventListener("loadend", flushUpload); } if (_config.cancelToken || _config.signal) { onCanceled = (cancel) => { @@ -32165,21 +32210,35 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); var trackStream = (stream, chunkSize, onProgress, onFinish, encode3) => { const iterator = readBytes(stream, chunkSize, encode3); let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; return new ReadableStream({ - type: "bytes", async pull(controller) { - const { done, value } = await iterator.next(); - if (done) { - controller.close(); - onFinish(); - return; + try { + const { done: done2, value } = await iterator.next(); + if (done2) { + _onFinish(); + controller.close(); + return; + } + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; } - let len = value.byteLength; - onProgress && onProgress(bytes += len); - controller.enqueue(new Uint8Array(value)); }, cancel(reason) { - onFinish(reason); + _onFinish(reason); return iterator.return(); } }, { @@ -32188,18 +32247,17 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; // node_modules/axios/lib/adapters/fetch.js - var fetchProgressDecorator = (total, fn) => { - const lengthComputable = total != null; - return (loaded) => setTimeout(() => fn({ - lengthComputable, - total, - loaded - })); - }; var isFetchSupported = typeof fetch === "function" && typeof Request === "function" && typeof Response === "function"; var isReadableStreamSupported = isFetchSupported && typeof ReadableStream === "function"; var encodeText = isFetchSupported && (typeof TextEncoder === "function" ? ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : async (str) => new Uint8Array(await new Response(str).arrayBuffer())); - var supportsRequestStream = isReadableStreamSupported && (() => { + var test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false; + } + }; + var supportsRequestStream = isReadableStreamSupported && test(() => { let duplexAccessed = false; const hasContentType = new Request(platform_default.origin, { body: new ReadableStream(), @@ -32210,14 +32268,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }).headers.has("Content-Type"); return duplexAccessed && !hasContentType; - })(); + }); var DEFAULT_CHUNK_SIZE = 64 * 1024; - var supportsResponseStream = isReadableStreamSupported && !!(() => { - try { - return utils_default.isReadableStream(new Response("").body); - } catch (err) { - } - })(); + var supportsResponseStream = isReadableStreamSupported && test(() => utils_default.isReadableStream(new Response("").body)); var resolvers = { stream: supportsResponseStream && ((res) => res.body) }; @@ -32238,7 +32291,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); if (utils_default.isSpecCompliantForm(body)) { return (await new Request(body).arrayBuffer()).byteLength; } - if (utils_default.isArrayBufferView(body)) { + if (utils_default.isArrayBufferView(body) || utils_default.isArrayBuffer(body)) { return body.byteLength; } if (utils_default.isURLSearchParams(body)) { @@ -32289,15 +32342,17 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); headers.setContentType(contentTypeHeader); } if (_request.body) { - data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator( + const [onProgress, flush] = progressEventDecorator( requestContentLength, - progressEventReducer_default(onUploadProgress) - ), null, encodeText); + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush, encodeText); } } if (!utils_default.isString(withCredentials)) { - withCredentials = withCredentials ? "cors" : "omit"; + withCredentials = withCredentials ? "include" : "omit"; } + const isCredentialsSupported = "credentials" in Request.prototype; request = new Request(url, { ...fetchOptions, signal: composedSignal, @@ -32305,7 +32360,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); headers: headers.normalize().toJSON(), body: data, duplex: "half", - withCredentials + credentials: isCredentialsSupported ? withCredentials : void 0 }); let response = await fetch(request); const isStreamResponse = supportsResponseStream && (responseType === "stream" || responseType === "response"); @@ -32315,11 +32370,15 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); options[prop] = response[prop]; }); const responseContentLength = utils_default.toFiniteNumber(response.headers.get("content-length")); + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; response = new Response( - trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator( - responseContentLength, - progressEventReducer_default(onDownloadProgress, true) - ), isStreamResponse && onFinish, encodeText), + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + isStreamResponse && onFinish(); + }, encodeText), options ); } @@ -32451,7 +32510,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } // node_modules/axios/lib/env/data.js - var VERSION = "1.7.2"; + var VERSION = "1.7.5"; // node_modules/axios/lib/helpers/validator.js var validators = {}; @@ -34253,6 +34312,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); getShortForm() { return this.properties["short_form"]; } + getApiSourceName() { + return ""; + } + getApiSourceEndpoint() { + return ""; + } }; // src/model/ts4nfdi-model/Ts4nfdiSearchResult.ts @@ -34301,6 +34366,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); getShortForm() { return this.properties["short_form"]; } + getApiSourceName() { + return this.properties["source_name"]; + } + getApiSourceEndpoint() { + return this.properties["source"]; + } }; // src/api/OlsApi.ts @@ -35895,6 +35966,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); opacity: 1, order: 1, orphans: 1, + scale: 1, tabSize: 1, widows: 1, zIndex: 1, @@ -37335,12 +37407,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex); } - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/limit.js + // node_modules/chroma-js/src/utils/limit.js var limit_default = (x2, low = 0, high = 1) => { return min(max(low, x2), high); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/clip_rgb.js + // node_modules/chroma-js/src/utils/clip_rgb.js var clip_rgb_default = (rgb2) => { rgb2._clipped = false; rgb2._unclipped = rgb2.slice(0); @@ -37356,7 +37428,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return rgb2; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/type.js + // node_modules/chroma-js/src/utils/type.js var classToType = {}; for (let name of [ "Boolean", @@ -37375,7 +37447,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return classToType[Object.prototype.toString.call(obj)] || "object"; } - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/unpack.js + // node_modules/chroma-js/src/utils/unpack.js var unpack_default = (args, keyOrder = null) => { if (args.length >= 3) return Array.prototype.slice.call(args); @@ -37385,7 +37457,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return args[0]; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/last.js + // node_modules/chroma-js/src/utils/last.js var last_default = (args) => { if (args.length < 2) return null; @@ -37395,20 +37467,20 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return null; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/index.js + // node_modules/chroma-js/src/utils/index.js var { PI, min, max } = Math; var TWOPI = PI * 2; var PITHIRD = PI / 3; var DEG2RAD = PI / 180; var RAD2DEG = 180 / PI; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/input.js + // node_modules/chroma-js/src/io/input.js var input_default = { format: {}, autodetect: [] }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/Color.js + // node_modules/chroma-js/src/Color.js var Color = class { constructor(...args) { const me = this; @@ -37449,10 +37521,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var Color_default = Color; - // node_modules/@elastic/eui/node_modules/chroma-js/src/version.js + // node_modules/chroma-js/src/version.js var version = "2.6.0"; - // node_modules/@elastic/eui/node_modules/chroma-js/src/chroma.js + // node_modules/chroma-js/src/chroma.js var chroma = (...args) => { return new chroma.Color(...args); }; @@ -37460,7 +37532,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); chroma.version = version; var chroma_default = chroma; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js + // node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js var cmyk2rgb = (...args) => { args = unpack_default(args, "cmyk"); const [c, m, y, k] = args; @@ -37479,7 +37551,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var cmyk2rgb_default = cmyk2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js + // node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js var { max: max2 } = Math; var rgb2cmyk = (...args) => { let [r, g, b2] = unpack_default(args, "rgb"); @@ -37495,7 +37567,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2cmyk_default = rgb2cmyk; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/cmyk/index.js + // node_modules/chroma-js/src/io/cmyk/index.js Color_default.prototype.cmyk = function() { return rgb2cmyk_default(this._rgb); }; @@ -37511,7 +37583,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/css/hsl2css.js + // node_modules/chroma-js/src/io/css/hsl2css.js var rnd = (a) => Math.round(a * 100) / 100; var hsl2css = (...args) => { const hsla = unpack_default(args, "hsla"); @@ -37529,7 +37601,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var hsl2css_default = hsl2css; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsl/rgb2hsl.js + // node_modules/chroma-js/src/io/hsl/rgb2hsl.js var rgb2hsl = (...args) => { args = unpack_default(args, "rgba"); let [r, g, b2] = args; @@ -37561,7 +37633,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2hsl_default = rgb2hsl; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/css/rgb2css.js + // node_modules/chroma-js/src/io/css/rgb2css.js var { round } = Math; var rgb2css = (...args) => { const rgba = unpack_default(args, "rgba"); @@ -37580,7 +37652,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2css_default = rgb2css; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsl/hsl2rgb.js + // node_modules/chroma-js/src/io/hsl/hsl2rgb.js var { round: round2 } = Math; var hsl2rgb = (...args) => { args = unpack_default(args, "hsl"); @@ -37620,7 +37692,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var hsl2rgb_default = hsl2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/css/css2rgb.js + // node_modules/chroma-js/src/io/css/css2rgb.js var RE_RGB = /^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/; var RE_RGBA = /^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/; var RE_RGB_PCT = /^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/; @@ -37690,7 +37762,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var css2rgb_default = css2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/css/index.js + // node_modules/chroma-js/src/io/css/index.js Color_default.prototype.css = function(mode) { return rgb2css_default(this._rgb, mode); }; @@ -37705,7 +37777,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/gl/index.js + // node_modules/chroma-js/src/io/gl/index.js input_default.format.gl = (...args) => { const rgb2 = unpack_default(args, "rgba"); rgb2[0] *= 255; @@ -37719,7 +37791,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return [rgb2[0] / 255, rgb2[1] / 255, rgb2[2] / 255, rgb2[3]]; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hcg/hcg2rgb.js + // node_modules/chroma-js/src/io/hcg/hcg2rgb.js var { floor } = Math; var hcg2rgb = (...args) => { args = unpack_default(args, "hcg"); @@ -37768,7 +37840,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var hcg2rgb_default = hcg2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hcg/rgb2hcg.js + // node_modules/chroma-js/src/io/hcg/rgb2hcg.js var rgb2hcg = (...args) => { const [r, g, b2] = unpack_default(args, "rgb"); const minRgb = min(r, g, b2); @@ -37794,7 +37866,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2hcg_default = rgb2hcg; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hcg/index.js + // node_modules/chroma-js/src/io/hcg/index.js Color_default.prototype.hcg = function() { return rgb2hcg_default(this._rgb); }; @@ -37810,7 +37882,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hex/hex2rgb.js + // node_modules/chroma-js/src/io/hex/hex2rgb.js var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/; var hex2rgb = (hex) => { @@ -37847,7 +37919,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var hex2rgb_default = hex2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hex/rgb2hex.js + // node_modules/chroma-js/src/io/hex/rgb2hex.js var { round: round4 } = Math; var rgb2hex = (...args) => { let [r, g, b2, a] = unpack_default(args, "rgba"); @@ -37876,7 +37948,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2hex_default = rgb2hex; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hex/index.js + // node_modules/chroma-js/src/io/hex/index.js Color_default.prototype.hex = function(mode) { return rgb2hex_default(this._rgb, mode); }; @@ -37891,7 +37963,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsi/hsi2rgb.js + // node_modules/chroma-js/src/io/hsi/hsi2rgb.js var { cos } = Math; var hsi2rgb = (...args) => { args = unpack_default(args, "hsi"); @@ -37928,7 +38000,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var hsi2rgb_default = hsi2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsi/rgb2hsi.js + // node_modules/chroma-js/src/io/hsi/rgb2hsi.js var { min: min2, sqrt, acos } = Math; var rgb2hsi = (...args) => { let [r, g, b2] = unpack_default(args, "rgb"); @@ -37954,7 +38026,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2hsi_default = rgb2hsi; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsi/index.js + // node_modules/chroma-js/src/io/hsi/index.js Color_default.prototype.hsi = function() { return rgb2hsi_default(this._rgb); }; @@ -37970,7 +38042,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsl/index.js + // node_modules/chroma-js/src/io/hsl/index.js Color_default.prototype.hsl = function() { return rgb2hsl_default(this._rgb); }; @@ -37986,7 +38058,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsv/hsv2rgb.js + // node_modules/chroma-js/src/io/hsv/hsv2rgb.js var { floor: floor2 } = Math; var hsv2rgb = (...args) => { args = unpack_default(args, "hsv"); @@ -38033,7 +38105,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var hsv2rgb_default = hsv2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsv/rgb2hsv.js + // node_modules/chroma-js/src/io/hsv/rgb2hsv.js var { min: min3, max: max3 } = Math; var rgb2hsl2 = (...args) => { args = unpack_default(args, "rgb"); @@ -38062,7 +38134,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2hsv_default = rgb2hsl2; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/hsv/index.js + // node_modules/chroma-js/src/io/hsv/index.js Color_default.prototype.hsv = function() { return rgb2hsv_default(this._rgb); }; @@ -38078,7 +38150,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lab/lab-constants.js + // node_modules/chroma-js/src/io/lab/lab-constants.js var lab_constants_default = { // Corresponds roughly to RGB brighter/darker Kn: 18, @@ -38096,7 +38168,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); // t1 * t1 * t1 }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lab/lab2rgb.js + // node_modules/chroma-js/src/io/lab/lab2rgb.js var { pow } = Math; var lab2rgb = (...args) => { args = unpack_default(args, "lab"); @@ -38121,7 +38193,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var lab2rgb_default = lab2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lab/rgb2lab.js + // node_modules/chroma-js/src/io/lab/rgb2lab.js var { pow: pow2 } = Math; var rgb2lab = (...args) => { const [r, g, b2] = unpack_default(args, "rgb"); @@ -38156,7 +38228,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2lab_default = rgb2lab; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lab/index.js + // node_modules/chroma-js/src/io/lab/index.js Color_default.prototype.lab = function() { return rgb2lab_default(this._rgb); }; @@ -38172,7 +38244,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lch/lch2lab.js + // node_modules/chroma-js/src/io/lch/lch2lab.js var { sin, cos: cos2 } = Math; var lch2lab = (...args) => { let [l, c, h] = unpack_default(args, "lch"); @@ -38183,7 +38255,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var lch2lab_default = lch2lab; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lch/lch2rgb.js + // node_modules/chroma-js/src/io/lch/lch2rgb.js var lch2rgb = (...args) => { args = unpack_default(args, "lch"); const [l, c, h] = args; @@ -38193,14 +38265,14 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var lch2rgb_default = lch2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lch/hcl2rgb.js + // node_modules/chroma-js/src/io/lch/hcl2rgb.js var hcl2rgb = (...args) => { const hcl = unpack_default(args, "hcl").reverse(); return lch2rgb_default(...hcl); }; var hcl2rgb_default = hcl2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lch/lab2lch.js + // node_modules/chroma-js/src/io/lch/lab2lch.js var { sqrt: sqrt2, atan2, round: round5 } = Math; var lab2lch = (...args) => { const [l, a, b2] = unpack_default(args, "lab"); @@ -38212,7 +38284,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var lab2lch_default = lab2lch; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lch/rgb2lch.js + // node_modules/chroma-js/src/io/lch/rgb2lch.js var rgb2lch = (...args) => { const [r, g, b2] = unpack_default(args, "rgb"); const [l, a, b_] = rgb2lab_default(r, g, b2); @@ -38220,7 +38292,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2lch_default = rgb2lch; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/lch/index.js + // node_modules/chroma-js/src/io/lch/index.js Color_default.prototype.lch = function() { return rgb2lch_default(this._rgb); }; @@ -38243,7 +38315,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }) ); - // node_modules/@elastic/eui/node_modules/chroma-js/src/colors/w3cx11.js + // node_modules/chroma-js/src/colors/w3cx11.js var w3cx11 = { aliceblue: "#f0f8ff", antiquewhite: "#faebd7", @@ -38402,7 +38474,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var w3cx11_default = w3cx11; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/named/index.js + // node_modules/chroma-js/src/io/named/index.js Color_default.prototype.name = function() { const hex = rgb2hex_default(this._rgb, "rgb"); for (let n of Object.keys(w3cx11_default)) { @@ -38426,7 +38498,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/num/num2rgb.js + // node_modules/chroma-js/src/io/num/num2rgb.js var num2rgb = (num2) => { if (type_default(num2) == "number" && num2 >= 0 && num2 <= 16777215) { const r = num2 >> 16; @@ -38438,14 +38510,14 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var num2rgb_default = num2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/num/rgb2num.js + // node_modules/chroma-js/src/io/num/rgb2num.js var rgb2num = (...args) => { const [r, g, b2] = unpack_default(args, "rgb"); return (r << 16) + (g << 8) + b2; }; var rgb2num_default = rgb2num; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/num/index.js + // node_modules/chroma-js/src/io/num/index.js Color_default.prototype.num = function() { return rgb2num_default(this._rgb); }; @@ -38460,7 +38532,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/rgb/index.js + // node_modules/chroma-js/src/io/rgb/index.js var { round: round6 } = Math; Color_default.prototype.rgb = function(rnd2 = true) { if (rnd2 === false) @@ -38489,7 +38561,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/temp/temperature2rgb.js + // node_modules/chroma-js/src/io/temp/temperature2rgb.js var { log } = Math; var temperature2rgb = (kelvin) => { const temp = kelvin / 100; @@ -38507,7 +38579,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var temperature2rgb_default = temperature2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/temp/rgb2temperature.js + // node_modules/chroma-js/src/io/temp/rgb2temperature.js var { round: round7 } = Math; var rgb2temperature = (...args) => { const rgb2 = unpack_default(args, "rgb"); @@ -38529,14 +38601,14 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2temperature_default = rgb2temperature; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/temp/index.js + // node_modules/chroma-js/src/io/temp/index.js Color_default.prototype.temp = Color_default.prototype.kelvin = Color_default.prototype.temperature = function() { return rgb2temperature_default(this._rgb); }; chroma_default.temp = chroma_default.kelvin = chroma_default.temperature = (...args) => new Color_default(...args, "temp"); input_default.format.temp = input_default.format.kelvin = input_default.format.temperature = temperature2rgb_default; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/oklab/oklab2rgb.js + // node_modules/chroma-js/src/io/oklab/oklab2rgb.js var { pow: pow3, sign } = Math; var oklab2rgb = (...args) => { args = unpack_default(args, "lab"); @@ -38560,7 +38632,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return c * 12.92; } - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/oklab/rgb2oklab.js + // node_modules/chroma-js/src/io/oklab/rgb2oklab.js var { cbrt, pow: pow4, sign: sign2 } = Math; var rgb2oklab = (...args) => { const [r, g, b2] = unpack_default(args, "rgb"); @@ -38587,7 +38659,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return (sign2(c) || 1) * pow4((abs4 + 0.055) / 1.055, 2.4); } - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/oklab/index.js + // node_modules/chroma-js/src/io/oklab/index.js Color_default.prototype.oklab = function() { return rgb2oklab_default(this._rgb); }; @@ -38603,7 +38675,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/oklch/oklch2rgb.js + // node_modules/chroma-js/src/io/oklch/oklch2rgb.js var oklch2rgb = (...args) => { args = unpack_default(args, "lch"); const [l, c, h] = args; @@ -38613,7 +38685,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var oklch2rgb_default = oklch2rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/oklch/rgb2oklch.js + // node_modules/chroma-js/src/io/oklch/rgb2oklch.js var rgb2oklch = (...args) => { const [r, g, b2] = unpack_default(args, "rgb"); const [l, a, b_] = rgb2oklab_default(r, g, b2); @@ -38621,7 +38693,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var rgb2oklch_default = rgb2oklch; - // node_modules/@elastic/eui/node_modules/chroma-js/src/io/oklch/index.js + // node_modules/chroma-js/src/io/oklch/index.js Color_default.prototype.oklch = function() { return rgb2oklch_default(this._rgb); }; @@ -38637,7 +38709,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }); - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/alpha.js + // node_modules/chroma-js/src/ops/alpha.js Color_default.prototype.alpha = function(a, mutate = false) { if (a !== void 0 && type_default(a) === "number") { if (mutate) { @@ -38649,12 +38721,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return this._rgb[3]; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/clipped.js + // node_modules/chroma-js/src/ops/clipped.js Color_default.prototype.clipped = function() { return this._rgb._clipped || false; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/darken.js + // node_modules/chroma-js/src/ops/darken.js Color_default.prototype.darken = function(amount = 1) { const me = this; const lab2 = me.lab(); @@ -38667,7 +38739,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); Color_default.prototype.darker = Color_default.prototype.darken; Color_default.prototype.brighter = Color_default.prototype.brighten; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/get.js + // node_modules/chroma-js/src/ops/get.js Color_default.prototype.get = function(mc) { const [mode, channel] = mc.split("."); const src = this[mode](); @@ -38681,7 +38753,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/luminance.js + // node_modules/chroma-js/src/ops/luminance.js var { pow: pow5 } = Math; var EPS = 1e-7; var MAX_ITER = 20; @@ -38695,15 +38767,15 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } let cur_lum = this.luminance(); let max_iter = MAX_ITER; - const test = (low, high) => { + const test2 = (low, high) => { const mid = low.interpolate(high, 0.5, mode); const lm = mid.luminance(); if (Math.abs(lum - lm) < EPS || !max_iter--) { return mid; } - return lm > lum ? test(low, mid) : test(mid, high); + return lm > lum ? test2(low, mid) : test2(mid, high); }; - const rgb2 = (cur_lum > lum ? test(new Color_default([0, 0, 0]), this) : test(this, new Color_default([255, 255, 255]))).rgb(); + const rgb2 = (cur_lum > lum ? test2(new Color_default([0, 0, 0]), this) : test2(this, new Color_default([255, 255, 255]))).rgb(); return new Color_default([...rgb2, this._rgb[3]]); } return rgb2luminance(...this._rgb.slice(0, 3)); @@ -38719,10 +38791,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return x2 <= 0.03928 ? x2 / 12.92 : pow5((x2 + 0.055) / 1.055, 2.4); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/index.js + // node_modules/chroma-js/src/interpolator/index.js var interpolator_default = {}; - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/mix.js + // node_modules/chroma-js/src/generator/mix.js var mix_default = (col1, col2, f = 0.5, ...rest) => { let mode = rest[0] || "lrgb"; if (!interpolator_default[mode] && !rest.length) { @@ -38740,12 +38812,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/mix.js + // node_modules/chroma-js/src/ops/mix.js Color_default.prototype.mix = Color_default.prototype.interpolate = function(col2, f = 0.5, ...rest) { return mix_default(this, col2, f, ...rest); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/premultiply.js + // node_modules/chroma-js/src/ops/premultiply.js Color_default.prototype.premultiply = function(mutate = false) { const rgb2 = this._rgb; const a = rgb2[3]; @@ -38757,7 +38829,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/saturate.js + // node_modules/chroma-js/src/ops/saturate.js Color_default.prototype.saturate = function(amount = 1) { const me = this; const lch2 = me.lch(); @@ -38770,7 +38842,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return this.saturate(-amount); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/set.js + // node_modules/chroma-js/src/ops/set.js Color_default.prototype.set = function(mc, value, mutate = false) { const [mode, channel] = mc.split("."); const src = this[mode](); @@ -38812,7 +38884,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/ops/shade.js + // node_modules/chroma-js/src/ops/shade.js Color_default.prototype.tint = function(f = 0.5, ...rest) { return mix_default(this, "white", f, ...rest); }; @@ -38820,7 +38892,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return mix_default(this, "black", f, ...rest); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/rgb.js + // node_modules/chroma-js/src/interpolator/rgb.js var rgb = (col1, col2, f) => { const xyz0 = col1._rgb; const xyz1 = col2._rgb; @@ -38833,7 +38905,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; interpolator_default.rgb = rgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/lrgb.js + // node_modules/chroma-js/src/interpolator/lrgb.js var { sqrt: sqrt3, pow: pow6 } = Math; var lrgb = (col1, col2, f) => { const [x1, y1, z1] = col1._rgb; @@ -38847,7 +38919,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; interpolator_default.lrgb = lrgb; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/lab.js + // node_modules/chroma-js/src/interpolator/lab.js var lab = (col1, col2, f) => { const xyz0 = col1.lab(); const xyz1 = col2.lab(); @@ -38860,7 +38932,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; interpolator_default.lab = lab; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/_hsx.js + // node_modules/chroma-js/src/interpolator/_hsx.js var hsx_default = (col1, col2, f, m) => { let xyz0, xyz1; if (m === "hsl") { @@ -38915,14 +38987,14 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return m === "oklch" ? new Color_default([lbv, sat, hue], m) : new Color_default([hue, sat, lbv], m); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/lch.js + // node_modules/chroma-js/src/interpolator/lch.js var lch = (col1, col2, f) => { return hsx_default(col1, col2, f, "lch"); }; interpolator_default.lch = lch; interpolator_default.hcl = lch; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/num.js + // node_modules/chroma-js/src/interpolator/num.js var num = (col1, col2, f) => { const c1 = col1.num(); const c2 = col2.num(); @@ -38930,31 +39002,31 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; interpolator_default.num = num; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/hcg.js + // node_modules/chroma-js/src/interpolator/hcg.js var hcg = (col1, col2, f) => { return hsx_default(col1, col2, f, "hcg"); }; interpolator_default.hcg = hcg; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/hsi.js + // node_modules/chroma-js/src/interpolator/hsi.js var hsi = (col1, col2, f) => { return hsx_default(col1, col2, f, "hsi"); }; interpolator_default.hsi = hsi; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/hsl.js + // node_modules/chroma-js/src/interpolator/hsl.js var hsl = (col1, col2, f) => { return hsx_default(col1, col2, f, "hsl"); }; interpolator_default.hsl = hsl; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/hsv.js + // node_modules/chroma-js/src/interpolator/hsv.js var hsv = (col1, col2, f) => { return hsx_default(col1, col2, f, "hsv"); }; interpolator_default.hsv = hsv; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/oklab.js + // node_modules/chroma-js/src/interpolator/oklab.js var oklab = (col1, col2, f) => { const xyz0 = col1.oklab(); const xyz1 = col2.oklab(); @@ -38967,13 +39039,13 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; interpolator_default.oklab = oklab; - // node_modules/@elastic/eui/node_modules/chroma-js/src/interpolator/oklch.js + // node_modules/chroma-js/src/interpolator/oklch.js var oklch = (col1, col2, f) => { return hsx_default(col1, col2, f, "oklch"); }; interpolator_default.oklch = oklch; - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/average.js + // node_modules/chroma-js/src/generator/average.js var { pow: pow7, sqrt: sqrt4, PI: PI2, cos: cos3, sin: sin2, atan2: atan22 } = Math; var average_default = (colors2, mode = "lrgb", weights = null) => { const l = colors2.length; @@ -39055,7 +39127,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return new Color_default(clip_rgb_default(xyz)); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/scale.js + // node_modules/chroma-js/src/generator/scale.js var { pow: pow8 } = Math; function scale_default(colors2) { let _mode = "rgb"; @@ -39376,7 +39448,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return range; } - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/bezier.js + // node_modules/chroma-js/src/generator/bezier.js var binom_row = function(n) { let row = [1, 1]; for (let i = 1; i < n; i++) { @@ -39440,7 +39512,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return f; }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/blend.js + // node_modules/chroma-js/src/generator/blend.js var blend = (bottom, top, mode) => { if (!blend[mode]) { throw new Error("unknown blend mode " + mode); @@ -39482,7 +39554,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); blend.burn = blend_f(each(burn)); var blend_default = blend; - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/cubehelix.js + // node_modules/chroma-js/src/generator/cubehelix.js var { pow: pow9, sin: sin3, cos: cos4 } = Math; function cubehelix_default(start = 300, rotations = -1.5, hue = 1, gamma = 1, lightness3 = [0, 1]) { let dh = 0, dl; @@ -39558,7 +39630,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return f; } - // node_modules/@elastic/eui/node_modules/chroma-js/src/generator/random.js + // node_modules/chroma-js/src/generator/random.js var digits = "0123456789abcdef"; var { floor: floor3, random } = Math; var random_default = () => { @@ -39569,7 +39641,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return new Color_default(code, "hex"); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/analyze.js + // node_modules/chroma-js/src/utils/analyze.js var { log: log2, pow: pow10, floor: floor4, abs: abs2 } = Math; function analyze(data, key = null) { const r = { @@ -39730,7 +39802,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return limits2; } - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/contrast.js + // node_modules/chroma-js/src/utils/contrast.js var contrast_default = (a, b2) => { a = new Color_default(a); b2 = new Color_default(b2); @@ -39739,7 +39811,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05); }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/delta-e.js + // node_modules/chroma-js/src/utils/delta-e.js var { sqrt: sqrt5, pow: pow11, min: min4, max: max4, atan2: atan23, abs: abs3, cos: cos5, sin: sin4, exp, PI: PI3 } = Math; function delta_e_default(a, b2, Kl = 1, Kc = 1, Kh = 1) { var rad2deg = function(rad) { @@ -39785,7 +39857,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return max4(0, min4(100, result)); } - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/distance.js + // node_modules/chroma-js/src/utils/distance.js function distance_default(a, b2, mode = "lab") { a = new Color_default(a); b2 = new Color_default(b2); @@ -39799,7 +39871,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return Math.sqrt(sum_sq); } - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/valid.js + // node_modules/chroma-js/src/utils/valid.js var valid_default = (...args) => { try { new Color_default(...args); @@ -39809,7 +39881,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/utils/scales.js + // node_modules/chroma-js/src/utils/scales.js var scales_default = { cool() { return scale_default([chroma_default.hsl(180, 1, 0.9), chroma_default.hsl(250, 0.7, 0.4)]); @@ -39821,7 +39893,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } }; - // node_modules/@elastic/eui/node_modules/chroma-js/src/colors/colorbrewer.js + // node_modules/chroma-js/src/colors/colorbrewer.js var colorbrewer = { // sequential OrRd: ["#fff7ec", "#fee8c8", "#fdd49e", "#fdbb84", "#fc8d59", "#ef6548", "#d7301f", "#b30000", "#7f0000"], @@ -39868,7 +39940,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } var colorbrewer_default = colorbrewer; - // node_modules/@elastic/eui/node_modules/chroma-js/index.js + // node_modules/chroma-js/index.js Object.assign(chroma_default, { average: average_default, bezier: bezier_default, @@ -80766,7 +80838,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); onActivation, onDeactivation, returnFocus, - focusOptions + focusOptions, + noFocusGuards }), /* @__PURE__ */ React483.createElement(Container, _extends({ ref: mergedRef }, lockProps, { @@ -81759,8 +81832,12 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }; var lastActiveTrap = null; var lastActiveFocus = null; + var tryRestoreFocus = function tryRestoreFocus2() { + return null; + }; var lastPortaledElement = null; var focusWasOutsideWindow = false; + var windowFocused = false; var defaultWhitelist = function defaultWhitelist2() { return true; }; @@ -81812,16 +81889,44 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return checkInHost(activeElement, area, area); }); }; + var getNodeFocusables = function getNodeFocusables2(nodes) { + return getFocusableNodes(nodes, /* @__PURE__ */ new Map()); + }; + var isNotFocusable = function isNotFocusable2(node3) { + return !getNodeFocusables([node3.parentNode]).some(function(el) { + return el.node === node3; + }); + }; var activateTrap = function activateTrap2() { var result = false; if (lastActiveTrap) { - var _lastActiveTrap = lastActiveTrap, observed = _lastActiveTrap.observed, persistentFocus = _lastActiveTrap.persistentFocus, autoFocus = _lastActiveTrap.autoFocus, shards = _lastActiveTrap.shards, crossFrame = _lastActiveTrap.crossFrame, focusOptions = _lastActiveTrap.focusOptions; + var _lastActiveTrap = lastActiveTrap, observed = _lastActiveTrap.observed, persistentFocus = _lastActiveTrap.persistentFocus, autoFocus = _lastActiveTrap.autoFocus, shards = _lastActiveTrap.shards, crossFrame = _lastActiveTrap.crossFrame, focusOptions = _lastActiveTrap.focusOptions, noFocusGuards = _lastActiveTrap.noFocusGuards; var workingNode = observed || lastPortaledElement && lastPortaledElement.portaledElement; + if (focusOnBody() && lastActiveFocus) { + if (!document.body.contains(lastActiveFocus) || isNotFocusable(lastActiveFocus)) { + lastActiveFocus = null; + var newTarget = tryRestoreFocus(); + if (newTarget) { + newTarget.focus(); + } + } + } var activeElement = document && document.activeElement; if (workingNode) { var workingArea = [workingNode].concat(shards.map(extractRef).filter(Boolean)); + var shouldForceRestoreFocus = function shouldForceRestoreFocus2() { + if (!focusWasOutside(crossFrame) || !noFocusGuards || !lastActiveFocus || windowFocused) { + return false; + } + var nodes = getNodeFocusables(workingArea); + var lastIndex = nodes.findIndex(function(_ref11) { + var node3 = _ref11.node; + return node3 === lastActiveFocus; + }); + return lastIndex === 0 || lastIndex === nodes.length - 1; + }; if (!activeElement || focusWhitelisted(activeElement)) { - if (persistentFocus || focusWasOutside(crossFrame) || !isFreeFocus() || !lastActiveFocus && autoFocus) { + if (persistentFocus || shouldForceRestoreFocus() || !isFreeFocus() || !lastActiveFocus && autoFocus) { if (workingNode && !(focusInside(workingArea) || activeElement && withinHost(activeElement, workingArea) || focusIsPortaledPair(activeElement, workingNode))) { if (document && !lastActiveFocus && activeElement && !autoFocus) { if (activeElement.blur) { @@ -81837,21 +81942,22 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); } focusWasOutsideWindow = false; lastActiveFocus = document && document.activeElement; + tryRestoreFocus = captureFocusRestore(lastActiveFocus); } } if (document && activeElement !== document.activeElement && document.querySelector("[data-focus-auto-guard]")) { var newActiveElement = document && document.activeElement; var allNodes = expandFocusableNodes(workingArea); - var focusedIndex = allNodes.map(function(_ref11) { - var node3 = _ref11.node; + var focusedIndex = allNodes.map(function(_ref24) { + var node3 = _ref24.node; return node3; }).indexOf(newActiveElement); if (focusedIndex > -1) { - allNodes.filter(function(_ref24) { - var guard = _ref24.guard, node3 = _ref24.node; + allNodes.filter(function(_ref32) { + var guard = _ref32.guard, node3 = _ref32.node; return guard && node3.dataset.focusAutoGuard; - }).forEach(function(_ref32) { - var node3 = _ref32.node; + }).forEach(function(_ref42) { + var node3 = _ref42.node; return node3.removeAttribute("tabIndex"); }); autoGuard(focusedIndex, allNodes.length, 1, allNodes); @@ -81881,8 +81987,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); var FocusWatcher = function FocusWatcher2() { return null; }; - var FocusTrap = function FocusTrap2(_ref42) { - var children = _ref42.children; + var FocusTrap = function FocusTrap2(_ref52) { + var children = _ref52.children; return /* @__PURE__ */ React486.createElement("div", { onBlur, onFocus @@ -81891,7 +81997,11 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); FocusTrap.propTypes = true ? { children: import_prop_types24.default.node.isRequired } : {}; + var onWindowFocus = function onWindowFocus2() { + windowFocused = true; + }; var onWindowBlur = function onWindowBlur2() { + windowFocused = false; focusWasOutsideWindow = "just"; deferAction(function() { focusWasOutsideWindow = "meanwhile"; @@ -81900,16 +82010,18 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); var attachHandler = function attachHandler2() { document.addEventListener("focusin", onTrap); document.addEventListener("focusout", onBlur); + window.addEventListener("focus", onWindowFocus); window.addEventListener("blur", onWindowBlur); }; var detachHandler = function detachHandler2() { document.removeEventListener("focusin", onTrap); document.removeEventListener("focusout", onBlur); + window.removeEventListener("focus", onWindowFocus); window.removeEventListener("blur", onWindowBlur); }; function reducePropsToState(propsList) { - return propsList.filter(function(_ref52) { - var disabled = _ref52.disabled; + return propsList.filter(function(_ref62) { + var disabled = _ref62.disabled; return !disabled; }); } @@ -81932,8 +82044,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); lastActiveTrap = trap; if (lastTrap && !sameTrap) { lastTrap.onDeactivation(); - if (!traps.filter(function(_ref62) { - var id = _ref62.id; + if (!traps.filter(function(_ref72) { + var id = _ref72.id; return id === lastTrap.id; }).length) { lastTrap.returnFocus(!trap); @@ -102903,6 +103015,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); singleSelection, singleSuggestionRow, ts4nfdiGateway = false, + showApiSource = true, ...rest } = props; const olsApi = new OlsApi(api); @@ -102918,25 +103031,25 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); if (allowCustomTerms && value.iri == "") { return label; } - let hoverText = ""; + let prefix2 = value.type === "ontology" ? "Prefix: " + value.ontology_name : "Prefix > Short form: " + value.ontology_name + " > " + value.short_form; + let hoverText = `Type: ${value.type} + +Label: ${value.label} + +${prefix2}`; if (value.description != void 0) { - if (value.type === "ontology") { - hoverText = "Type: " + value.type + "\n\nLabel: " + value.label + "\n\nPrefix: " + value.ontology_name + "\n\nDescription: " + value.description; - } else { - hoverText = "Type: " + value.type + "\n\nLabel: " + value.label + "\n\nPrefix > Short form: " + value.ontology_name + " > " + value.short_form + "\n\nDescription: " + value.description; - } - } else { - if (value.type === "ontology") { - hoverText = "Type: " + value.type + "\n\nLabel: " + value.label + "\n\nPrefix: " + value.ontology_name; - } else { - hoverText = "type: " + value.type + "\n\nLabel: " + value.label + "\n\nPrefix > Short form: " + value.ontology_name + " > " + value.short_form; - } + hoverText += ` + +Description: ${value.description}`; + } + if (showApiSource && value.source_url && value.source_url !== "") { + hoverText += "\n\nSource: " + value.source; + hoverText += "\n\nSource URL: " + value.source_url; } const renderOntology = () => { return /* @__PURE__ */ import_react700.default.createElement( EuiHealth, { - title: hoverText, color: dotColor }, /* @__PURE__ */ import_react700.default.createElement("span", null, /* @__PURE__ */ import_react700.default.createElement(EuiHighlight, { search: searchValue2 }, value.label), /* @__PURE__ */ import_react700.default.createElement("br", null), value.description) @@ -102946,7 +103059,6 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return /* @__PURE__ */ import_react700.default.createElement("span", { style: { height: "200px" } }, /* @__PURE__ */ import_react700.default.createElement( EuiHealth, { - title: hoverText, color: dotColor }, /* @__PURE__ */ import_react700.default.createElement("span", null, /* @__PURE__ */ import_react700.default.createElement(EuiHighlight, { search: searchValue2 }, value.label), "\xA0\xA0\xA0\xA0\xA0", /* @__PURE__ */ import_react700.default.createElement( @@ -102957,7 +103069,14 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); colorFirst: "primary", colorSecond: "success" } - ), !singleSuggestionRow && value.description ? /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, /* @__PURE__ */ import_react700.default.createElement("br", null), value.description.substring(0, 40) + "...") : "") + ), /* @__PURE__ */ import_react700.default.createElement( + EuiIcon, + { + type: "iInCircle", + style: { marginLeft: 5 }, + title: hoverText + } + ), !singleSuggestionRow && value.description && /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, /* @__PURE__ */ import_react700.default.createElement("br", null), value.description.substring(0, 40) + "...")) )); }; return value.type === "ontology" ? renderOntology() : renderEntityWithDescription(); @@ -103001,7 +103120,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: selection.getOntologyId(), type: selection.getType(), short_form: selection.getShortForm(), - description: selection.getDescription() + description: selection.getDescription(), + source: selection.getApiSourceName(), + source_url: selection.getApiSourceEndpoint() } }); } @@ -103020,7 +103141,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: "", type: "", short_form: "", - description: "" + description: "", + source: "", + source_url: "" } }); } @@ -103061,7 +103184,9 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: selection.getOntologyId(), type: selection.getType(), short_form: selection.getShortForm(), - description: selection.getDescription() + description: selection.getDescription(), + source: selection.getApiSourceName(), + source_url: selection.getApiSourceEndpoint() } }) )); @@ -103080,7 +103205,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: "", type: "", short_form: x2.value.short_form, - description: x2.value.description + description: x2.value.description, + source: x2.value.source }; } else if (x2.value.iri == "") { return { @@ -103089,7 +103215,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: "", type: "", short_form: "", - description: "" + description: "", + source: "" }; } else { return { @@ -103098,7 +103225,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: x2.value.ontology_name, type: x2.value.type, short_form: x2.value.short_form, - description: x2.value.description + description: x2.value.description, + source: x2.value.source }; } }) @@ -103119,7 +103247,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); ontology_name: "", type: "", short_form: "", - description: "" + description: "", + source: "" } }; setOptions([...options, newOption]); @@ -103163,7 +103292,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); hasShortSelectedLabel: props.hasShortSelectedLabel, allowCustomTerms: props.allowCustomTerms, ts4nfdiGateway: props.ts4nfdiGateway, - singleSuggestionRow: props.singleSuggestionRow + singleSuggestionRow: props.singleSuggestionRow, + showApiSource: props.showApiSource } ))); } @@ -118468,4 +118598,4 @@ tabbable/dist/index.esm.js: *) *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaW5wdXQtYXV0b3NpemUvbGliL0F1dG9zaXplSW5wdXQuanMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9BdXRvY29tcGxldGVXaWRnZXQvQXV0b2NvbXBsZXRlV2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvQmxvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvZmV0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsICIuLi9zcmMvbW9kZWwvTW9kZWxUeXBlQ2hlY2sudHMiLCAiLi4vc3JjL2FwcC91dGlsLnRzIiwgIi4uL3NyYy9tb2RlbC9SZWlmaWVkLnRzIiwgIi4uL3NyYy9tb2RlbC9MaW5rZWRFbnRpdGllcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzVGhpbmcudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0VudGl0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzQ2xhc3MudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM1Byb3BlcnR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNJbmRpdmlkdWFsLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNPbnRvbG9neS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzT250b2xvZ2llcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0VGhpbmcudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNEVudGl0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0Q2xhc3MudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNFByb3BlcnR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRJbmRpdmlkdWFsLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRPbnRvbG9neS50cyIsICIuLi9zcmMvbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yLnRzIiwgIi4uL3NyYy9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeS50cyIsICIuLi9zcmMvbW9kZWwvb2xzLW1vZGVsL09MU1NlbGVjdC50cyIsICIuLi9zcmMvbW9kZWwvb2xzLW1vZGVsL09MU1NlbGVjdFJlc3VsdC50cyIsICIuLi9zcmMvbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0LnRzIiwgIi4uL3NyYy9hcGkvT2xzQXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfbGl2ZS9zY3JlZW5fcmVhZGVyX2xpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtNTQ4NmM1MWMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzL2Rpc3QvZW1vdGlvbi11c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFiYmFibGUvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvY2FzY2FkaW5nX21lbnVfa2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JlZ2V4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92MS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvaHRtbF9pZF9nZW5lcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hbGlnbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX2NvbG9yX2RhcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc192YWxpZF9oZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9saW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NsaXBfcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3VucGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvQ29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY2hyb21hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9jbXlrMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvcmdiMmNteWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY3NzL2hzbDJjc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2wvcmdiMmhzbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9yZ2IyY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2hzbDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jc3MvY3NzMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2dsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGNnL2hjZzJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvcmdiMmhjZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hjZy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hleC9oZXgycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L3JnYjJoZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oZXgvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2kvaHNpMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9yZ2IyaHNpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L2hzdjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc3YvcmdiMmhzdi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzdi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9sYWItY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGFiL2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sYWIvcmdiMmxhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sY2gybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL2xjaDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvaGNsMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xjaC9sYWIybGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL3JnYjJsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jb2xvcnMvdzNjeDExLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbmFtZWQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vbnVtMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL251bS9yZ2IybnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbnVtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vcmdiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vdGVtcC90ZW1wZXJhdHVyZTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby90ZW1wL3JnYjJ0ZW1wZXJhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9va2xhYjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9yZ2Iyb2tsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL29rbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL3JnYjJva2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2FscGhhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2NsaXBwZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvZGFya2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9sdW1pbmFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL21peC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9wcmVtdWx0aXBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zYXR1cmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2hhZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvcmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL19oc3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oY2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYXZlcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9zY2FsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9iZXppZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYmxlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvY3ViZWhlbGl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL3JhbmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2FuYWx5emUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9jb250cmFzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2RlbHRhLWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9kaXN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3ZhbGlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvc2NhbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2NvbG9yX3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9ldWlfcGFsZXR0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9tYW5pcHVsYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9jb250cmFzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYW5pbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL2xvZ2ljYWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JvcmRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fbGV2ZWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc3RhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS90aGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL2hvb2tzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvY3VycmVudF9icmVha3BvaW50X2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L3VzZUlzV2l0aGluQnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9maW5kRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3ByZWRpY2F0ZS9jb21tb25fcHJlZGljYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3ByZWRpY2F0ZS9sb2Rhc2hfcHJlZGljYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Zvcm1hdC9mb3JtYXRfYm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Zvcm1hdC9mb3JtYXRfZGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Zvcm1hdC9mb3JtYXRfbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9hdXRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdXJsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc2VjdXJpdHkvZ2V0X3NlY3VyZV9yZWxfZm9yX3RhcmdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3NvcnQvc29ydF9kaXJlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9vYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9jb21wYXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3BvcG92ZXIvcG9wb3Zlcl9wb3NpdGlvbmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2hvb2tzL3VzZUNvbWJpbmVkUmVmcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL19idXR0b25fY29udGVudF9kZXByZWNhdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hZ2dyZWdhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FsZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hbmFseXplRXZlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwbV90cmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2RldnRvb2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9lbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZsZWV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncm9rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sZW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbG9ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX25vdGVib29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93RW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FzdGVyaXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWFrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlbGxTbGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYm9sdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJhbmNoVXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJvb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JydXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2J1bGxzZXllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jYWxlbmRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvdWREcml6emxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvdWRTdW5ueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2x1c3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbXB1dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnNvbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRhaW5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGludWl0eUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NoYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3VycmVuY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGF0YWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rlc2t0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvdWJsZUFycm93UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rvd25sb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduVG9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX2xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2JvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jaGVja2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2hlYWRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3Jfb3JkZXJlZF9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3Vub3JkZXJlZF9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbWFpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VxbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXJhc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cGFuZE1pbmkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leWVfY2xvc2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX2hhcHB5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX25ldXRyYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2Vfc2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZsYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVOZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbF9zY3JlZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9nZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9nbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9nbG9iZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaGVhdG1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaG9tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaUluQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW1wb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfZWRpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfZmx1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X21hcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X3NldHRpbmdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW52ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva2V5Ym9hcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9maWVsZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX3NlbGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfdmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rdWJlcm5ldGVzUG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sYXllcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xldHRlcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluZURhc2hlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluZURvdHRlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluZVNvbGlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saXN0X2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9ja09wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2JlYXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jZXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kb2NrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19ldGNkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19naXRodWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ21haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29sYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2thZmthLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWFwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tb25nb2RiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX215c3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX25naW54LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19waHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yZWRpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19za2V0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2xhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd2luZG93cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2lmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hcF9tYXJrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbW9yeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudURvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVVcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVyZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbmltaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL29mZmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL29ubGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFnZVNlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFnZXNTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXBlcl9jbGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXJ0aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF5bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVuY2lsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wZXJjZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpbl9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsYXlGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXNfaW5fY2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BvcG91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdW90ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmVwb3J0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3JldHVybl9rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NhdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZXNzaW9uVmlld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2hhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nub3dmbGFrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF9kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0X3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhclBsdXNFbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZW1wdHlfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9taW51c19lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9zbGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdWJtb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3dhdGNoX2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zeW1saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZU9mQ29udGVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9ub3JtYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGVtcGVyYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVSZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZXNsaWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5BbGlhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkNsYXNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuR2VvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JUC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSm9pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Nb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmVwby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYWluaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdW5mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmxpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VzZXJBdmF0YXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VzZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZpZGVvUGxheWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfZ2F1Z2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nb2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX21hcF9jb29yZGluYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX21ldHJpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3BpZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmVnYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3Zpc3VhbF9idWlsZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvd3JlbmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbl9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9yZWFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9uYW1lZF9jb2xvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9yZXNldC9nbG9iYWxfc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9faGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fcGFkZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fc3RhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL190eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9yZXNldC9yZXNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0L2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bl91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL19sb2FkaW5nX3N0cmluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb2JzZXJ2ZXIvb2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9lbXB0eS9idXR0b25fZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25faWNvbi9idXR0b25faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW5uZXJfdGV4dC9pbm5lcl90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2Rpc3QvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2F1dG9fc2l6ZXIvYXV0b19zaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbG9yX3BpY2tlci91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmV0YV9iYWRnZS9iZXRhX2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXBfcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvaWNvbl90aXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy9zaGFkb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMvc2hhZG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9leHBvcnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2NvcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtY2xpZW50c2lkZS1lZmZlY3QvbGliL2luZGV4LmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9nZXRBY3RpdmVFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSXNIaWRkZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2F1dG8tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvcGFyZW50aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29tbWFuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvbW92ZUZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3JldHVybi1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWJsaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1NpZGVFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2hhbmRsZVNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyL211dGF0aW9uX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdXRzaWRlX2NsaWNrX2RldGVjdG9yL291dHNpZGVfY2xpY2tfZGV0ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuc3R5bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9wYW5lbC9fcG9wb3Zlcl9wYW5lbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RpdGxlL3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYXJkL2NhcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZF9zZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9ncm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2xhYmVsL2Zvcm1fbGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vdmFsaWRhdGFibGVfY29udHJvbC92YWxpZGF0YWJsZV9jb250cm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9maWVsZF9zZWFyY2gvZmllbGRfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJvd3Nlci9icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fZXJyb3JfdGV4dC9mb3JtX2Vycm9yX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9oZWxwX3RleHQvZm9ybV9oZWxwX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHRfbWVudS9jb250ZXh0X21lbnVfcGFuZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHRfbWVudS9jb250ZXh0X21lbnVfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaG9yaXpvbnRhbF9ydWxlL2hvcml6b250YWxfcnVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaG9yaXpvbnRhbF9ydWxlL2hvcml6b250YWxfcnVsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vc3dpdGNoL3N3aXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy90aW1lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9kb21IZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUdyaWRDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9jcmVhdGVMaXN0Q29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL1ZhcmlhYmxlU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvRml4ZWRTaXplR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3NoYWxsb3dEaWZmZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2FyZUVxdWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3Nob3VsZENvbXBvbmVudFVwZGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3ZlcmxheV9tYXNrL292ZXJsYXlfbWFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF9vcHRpb25zX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hpZ2hsaWdodC9oaWdobGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL21hcmsvbWFyay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X3BpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24vdGFibGVfcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb25fYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb25fYnV0dG9uX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYmJlZF9jb250ZW50L3RhYmJlZF9jb250ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZWxheV9yZW5kZXIvZGVsYXlfcmVuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oZWFsdGgvaGVhbHRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oZWFsdGgvaGVhbHRoLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX3dyYXBwZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX3dyYXBwZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2J1dHRvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2NhcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2NhcHRpb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9jYWNoZS9jYWNoZV9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfc2VhcmNoL3NlbGVjdGFibGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL21hdGNoaW5nX29wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9tZXNzYWdlL3NlbGVjdGFibGVfbWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3RfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2JvZHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX2hlYWRlcl9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9zb3J0X21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvd19jZWxsX2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvY29sbGFwc2VkX2l0ZW1fYWN0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZXhwYW5kZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9kZWZhdWx0X2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jdXN0b21faXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2FjdGlvbl90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvcGFnaW5hdGlvbl9iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvc3Vic2NyaWJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2ZvY3VzTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9vbmxpbmVNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3JldHJ5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbm90aWZ5TWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbkNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2luZmluaXRlUXVlcnlCZWhhdmlvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeU9ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlQmFzZVF1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VRdWVyeS5qcyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9EYXRhQ29udGVudFdpZGdldC9EYXRhQ29udGVudFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmcudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvbldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9JcmlXaWRnZXQvSXJpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0L0hpZXJhcmNoeVdpZGdldE9MUy50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL211bHRpbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUHJlZml4ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3dlYWstbWVtb2l6ZS9kaXN0L2Vtb3Rpb24td2Vhay1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vbWVtb2l6ZS9kaXN0L2Vtb3Rpb24tbWVtb2l6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2NhY2hlL2Rpc3QvZW1vdGlvbi1jYWNoZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2lzLXByb3AtdmFsaWQvZGlzdC9lbW90aW9uLWlzLXByb3AtdmFsaWQuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zdHlsZWQvYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9kaXN0L2Vtb3Rpb24tc3R5bGVkLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL1N0eWxlZEVuZ2luZVByb3ZpZGVyL1N0eWxlZEVuZ2luZVByb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9TdHlsZWRFbmdpbmVQcm92aWRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvR2xvYmFsU3R5bGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZGVlcG1lcmdlL2RlZXBtZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2RlZXBtZXJnZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NhcGl0YWxpemUvY2FwaXRhbGl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NhcGl0YWxpemUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9nZXREaXNwbGF5TmFtZS9nZXREaXNwbGF5TmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2dldERpc3BsYXlOYW1lL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2xhbXAvY2xhbXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9jbGFtcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vbWVyZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3Jlc3BvbnNpdmVQcm9wVHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vYnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3N0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9tZW1vaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9ib3JkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jc3NHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zaXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeC9kZWZhdWx0U3hDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2V4dGVuZFN4UHJvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvc2hhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZVNwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2FwcGx5U3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvd2lkZ2V0cy9FbnRpdHlUcmVlV2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL2JhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaG9va3MvdXNlUmVkdXhDb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvU3Vic2NyaXB0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL1Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTdG9yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaG9va3MvdXNlRGlzcGF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL2FwcC9ob29rcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2Vycm9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2NvbW1vbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL3BsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL3Njb3BlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9maW5hbGl6ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvcHJveHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2ltbWVyQ2xhc3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2N1cnJlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2VzNS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvcGF0Y2hlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvbWFwc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9hbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9pbW1lci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2Vudi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlZHV4L2VzL3JlZHV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWR1eC10aHVuay9lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jb25maWd1cmVTdG9yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZGV2dG9vbHNFeHRlbnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2lzUGxhaW5PYmplY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy90c0hlbHBlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZUFjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlUmVkdWNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbWFwQnVpbGRlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZVNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9lbnRpdHlfc3RhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc3RhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL3Vuc29ydGVkX3N0YXRlX2FkYXB0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9jcmVhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbmFub2lkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jcmVhdGVBc3luY1RodW5rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9tYXRjaGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvZXhjZXB0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvYXV0b0JhdGNoRW5oYW5jZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvZGlzdC9yZWR1eC10b29sa2l0LmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL2FwaS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9ob21lL2hvbWVTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL3V0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL1JlaWZpZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL0xpbmtlZEVudGl0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9UaGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvRW50aXR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9DbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvSW5kaXZpZHVhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvUHJvcGVydHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL09udG9sb2d5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL2VudGl0aWVzL2V4dHJhY3RFbnRpdHlIaWVyYXJjaHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvY3JlYXRlVHJlZUZyb21FbnRpdGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL3NlYXJjaC9zZWFyY2hTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL3N0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL2VudGl0aWVzL0VudGl0eVRyZWUudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3JlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcHVycGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ibHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9saWdodEJsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9vcmFuZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2lkZW50aWZpZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2JyZWFrcG9pbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVyZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Nzc0dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc2l6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2FwcGx5U3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWVXaXRob3V0RGVmYXVsdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2V4dGVuZFN4UHJvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9DbGFzc05hbWVHZW5lcmF0b3IvQ2xhc3NOYW1lR2VuZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9jbHN4L2Rpc3QvY2xzeC5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlU3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3Jlc29sdmVQcm9wcy9yZXNvbHZlUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL2dldFRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL3VzZVRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QvdXNlRW5oYW5jZWRFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9pc011aUVsZW1lbnQvaXNNdWlFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3NldFJlZi9zZXRSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlSWQvdXNlSWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlQ29udHJvbGxlZC91c2VDb250cm9sbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2svdXNlRXZlbnRDYWxsYmFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VGb3JrUmVmL3VzZUZvcmtSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlTGF6eVJlZi91c2VMYXp5UmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZU9uTW91bnQvdXNlT25Nb3VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VUaW1lb3V0L3VzZVRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUvdXNlSXNGb2N1c1Zpc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMvY29tcG9zZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9TdGFjay9jcmVhdGVTdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc2hhZG93cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3pJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy91c2VUaGVtZVByb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY2FwaXRhbGl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL1N2Z0ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9pc011aUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlQ29udHJvbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VFdmVudENhbGxiYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUZvcmtSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvQnV0dG9uQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvdG91Y2hSaXBwbGVDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvdHlwb2dyYXBoeUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NoZWNrYm94L0NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL1N3aXRjaEJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3dpdGNoQmFzZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94T3V0bGluZUJsYW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9DaGVja0JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvSW5kZXRlcm1pbmF0ZUNoZWNrQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NoZWNrYm94L2NoZWNrYm94Q2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL0NpcmN1bGFyUHJvZ3Jlc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2lyY3VsYXJQcm9ncmVzcy9jaXJjdWxhclByb2dyZXNzQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbENsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbC9Gb3JtQ29udHJvbExhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N0YWNrL1N0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sTGFiZWwvZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUdyb3VwL0Zvcm1Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtR3JvdXAvZm9ybUdyb3VwQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9SYWRpby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9SYWRpb0J1dHRvbkljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uVW5jaGVja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvbkNoZWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC91c2VSYWRpb0dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvR3JvdXAvUmFkaW9Hcm91cENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW8vcmFkaW9DbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvR3JvdXAvUmFkaW9Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL211aS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvY29tcG9uZW50cy9Ob2RlLnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9zdWJzY3JpYmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvZm9jdXNNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL29ubGluZU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcmV0cnllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9ub3RpZnlNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3dpZGdldHMvaW5kZXgudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC50c3giLCAiLi4vc3JjL2FwaS9oaWVyYXJjaHlfd2lkZ2V0X2RlcHJlY2F0ZWQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldFNlbUxvb2tQL0hpZXJhcmNoeVdpZGdldC50c3giLCAiLi4vc3JjL2FwaS9Ta29zQXBpLnRzIiwgIi4uL3NyYy9hcGkvT250b1BvcnRhbEFwaS50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvTWV0YWRhdGFDb21wYWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvVGVybURlcGljdGlvbldpZGdldC9UZXJtRGVwaWN0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG5cbnZhciByZXF1ZXN0SG9zdENhbGxiYWNrO1xudmFyIHJlcXVlc3RIb3N0VGltZW91dDtcbnZhciBjYW5jZWxIb3N0VGltZW91dDtcbnZhciByZXF1ZXN0UGFpbnQ7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG5cbmlmICggLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAvLyBDaGVjayBpZiBNZXNzYWdlQ2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRvby5cbnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAvLyBJZiB0aGlzIGFjY2lkZW50YWxseSBnZXRzIGltcG9ydGVkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIGUuZy4gSmF2YVNjcmlwdENvcmUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgbmFpdmUgaW1wbGVtZW50YXRpb24uXG4gIHZhciBfY2FsbGJhY2sgPSBudWxsO1xuICB2YXIgX3RpbWVvdXRJRCA9IG51bGw7XG5cbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHZhciBoYXNSZW1haW5pbmdUaW1lID0gdHJ1ZTtcblxuICAgICAgICBfY2FsbGJhY2soaGFzUmVtYWluaW5nVGltZSwgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIF9jYWxsYmFjayA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXF1ZXN0UGFpbnQgPSBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKCkge307XG59IGVsc2Uge1xuICAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cbiAgdmFyIF9zZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG4gIHZhciBfY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dDtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gVE9ETzogU2NoZWR1bGVyIG5vIGxvbmdlciByZXF1aXJlcyB0aGVzZSBtZXRob2RzIHRvIGJlIHBvbHlmaWxsZWQuIEJ1dFxuICAgIC8vIG1heWJlIHdlIHdhbnQgdG8gY29udGludWUgd2FybmluZyBpZiB0aGV5IGRvbid0IGV4aXN0LCB0byBwcmVzZXJ2ZSB0aGVcbiAgICAvLyBvcHRpb24gdG8gcmVseSBvbiBpdCBpbiB0aGUgZnV0dXJlP1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcblxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuXG4gIHtcbiAgICAvLyBgaXNJbnB1dFBlbmRpbmdgIGlzIG5vdCBhdmFpbGFibGUuIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWZcbiAgICAvLyB0aGVyZSdzIHBlbmRpbmcgaW5wdXQsIGFsd2F5cyB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfTsgLy8gU2luY2Ugd2UgeWllbGQgZXZlcnkgZnJhbWUgcmVnYXJkbGVzcywgYHJlcXVlc3RQYWludGAgaGFzIG5vIGVmZmVjdC5cblxuXG4gICAgcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmcHMgPiAwKSB7XG4gICAgICB5aWVsZEludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzZXQgdGhlIGZyYW1lcmF0ZVxuICAgICAgeWllbGRJbnRlcnZhbCA9IDU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTsgLy8gWWllbGQgYWZ0ZXIgYHlpZWxkSW50ZXJ2YWxgIG1zLCByZWdhcmRsZXNzIG9mIHdoZXJlIHdlIGFyZSBpbiB0aGUgdnN5bmNcbiAgICAgIC8vIGN5Y2xlLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYWx3YXlzIHRpbWUgcmVtYWluaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2ZcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGV2ZW50LlxuXG4gICAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1lICsgeWllbGRJbnRlcnZhbDtcbiAgICAgIHZhciBoYXNUaW1lUmVtYWluaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrKGhhc1RpbWVSZW1haW5pbmcsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoIWhhc01vcmVXb3JrKSB7XG4gICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxuICB9O1xuXG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBtcykge1xuICAgIHRhc2tUaW1lb3V0SUQgPSBfc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICB9LCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NsZWFyVGltZW91dCh0YXNrVGltZW91dElEKTtcblxuICAgIHRhc2tUaW1lb3V0SUQgPSAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcbiAgcmV0dXJuIGZpcnN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlyc3Q7XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuXG4gIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGxhc3QgPSBoZWFwLnBvcCgpO1xuXG4gICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgIHNpZnREb3duKGhlYXAsIGxhc3QsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJzdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0VXAoaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGxlZnRJbmRleCA9IChpbmRleCArIDEpICogMiAtIDE7XG4gICAgdmFyIGxlZnQgPSBoZWFwW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxO1xuICAgIHZhciByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07IC8vIElmIHRoZSBsZWZ0IG9yIHJpZ2h0IG5vZGUgaXMgc21hbGxlciwgc3dhcCB3aXRoIHRoZSBzbWFsbGVyIG9mIHRob3NlLlxuXG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKGxlZnQsIG5vZGUpIDwgMCkge1xuICAgICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbGVmdCkgPCAwKSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFwW2luZGV4XSA9IGxlZnQ7XG4gICAgICAgIGhlYXBbbGVmdEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gbGVmdEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBub2RlKSA8IDApIHtcbiAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBjaGlsZCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgLy8gQ29tcGFyZSBzb3J0IGluZGV4IGZpcnN0LCB0aGVuIHRhc2sgaWQuXG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIGRpZmYgIT09IDAgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5cbi8vIFRPRE86IFVzZSBzeW1ib2xzP1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSAzO1xudmFyIExvd1ByaW9yaXR5ID0gNDtcbnZhciBJZGxlUHJpb3JpdHkgPSA1O1xuXG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY3kuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgbWFya1Rhc2tFcnJvcmVkKGN1cnJlbnRUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgY3VycmVudFRhc2suaXNRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjYXRjaCBpbiBwcm9kIGNvZGUgcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gaW5pdGlhbFRpbWU7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcblxuICB3aGlsZSAoY3VycmVudFRhc2sgIT09IG51bGwgJiYgIShlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgKSkge1xuICAgIGlmIChjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmICghaGFzVGltZVJlbWFpbmluZyB8fCBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIHVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbnZhciB1bnN0YWJsZV9Qcm9maWxpbmcgPSAgbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHVuc3RhYmxlX3JlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfVEhSRUFEX0lEID0gMDsgLy8gQ291bnRlcnMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLlxuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7IC8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCJcdTIwMTNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cblxuZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IG51bGw7IC8vIExpc3RlbmVyKHMpIHRvIG5vdGlmeSB3aGVuIGludGVyYWN0aW9ucyBiZWdpbiBhbmQgZW5kLlxuXG5leHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IG51bGw7XG5cbntcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gdW5zdGFibGVfY2xlYXIoY2FsbGJhY2spIHtcblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gbmV3IFNldCgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudCgpIHtcbiAge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDsgLy8gVHJhY2VkIGludGVyYWN0aW9ucyBzaG91bGQgc3RhY2svYWNjdW11bGF0ZS5cbiAgLy8gVG8gZG8gdGhhdCwgY2xvbmUgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBUaGUgcHJldmlvdXMgc2V0IHdpbGwgYmUgcmVzdG9yZWQgdXBvbiBjb21wbGV0aW9uLlxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KHByZXZJbnRlcmFjdGlvbnMpO1xuICBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gaW50ZXJhY3Rpb25zO1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIHZhciByZXR1cm5WYWx1ZTtcblxuICB0cnkge1xuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tOyAvLyBJZiBubyBhc3luYyB3b3JrIHdhcyBzY2hlZHVsZWQgZm9yIHRoaXMgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgLy8gTm90aWZ5IHN1YnNjcmliZXJzIHRoYXQgaXQncyBjb21wbGV0ZWQuXG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwKGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIHdyYXBwZWRJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgfSAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBVcGRhdGUgYWZ0ZXIgY2FsbGluZyBzdWJzY3JpYmVycyBpbiBjYXNlIG9mIGVycm9yLlxuXG5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG4gIHZhciBoYXNSdW4gPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3cmFwcGVkKCkge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHdyYXBwZWRJbnRlcmFjdGlvbnM7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghaGFzUnVuKSB7XG4gICAgICAgIC8vIFdlIG9ubHkgZXhwZWN0IGEgd3JhcHBlZCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlLFxuICAgICAgICAvLyBCdXQgaW4gdGhlIGV2ZW50IHRoYXQgaXQncyBleGVjdXRlZCBtb3JlIHRoYW4gb25jZVx1MjAxM1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgaW50ZXJhY3Rpb24gY291bnRzIG9uY2UuXG4gICAgICAgIGhhc1J1biA9IHRydWU7IC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG5cbiAgICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlZC5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cbiAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgIGlmIChzdWJzY3JpYmVyICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG52YXIgc3Vic2NyaWJlcnMgPSBudWxsO1xuXG57XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkOiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZCxcbiAgICAgICAgb25JbnRlcmFjdGlvblRyYWNlZDogb25JbnRlcmFjdGlvblRyYWNlZCxcbiAgICAgICAgb25Xb3JrQ2FuY2VsZWQ6IG9uV29ya0NhbmNlbGVkLFxuICAgICAgICBvbldvcmtTY2hlZHVsZWQ6IG9uV29ya1NjaGVkdWxlZCxcbiAgICAgICAgb25Xb3JrU3RhcnRlZDogb25Xb3JrU3RhcnRlZCxcbiAgICAgICAgb25Xb3JrU3RvcHBlZDogb25Xb3JrU3RvcHBlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAwKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0cy51bnN0YWJsZV9jbGVhciA9IHVuc3RhYmxlX2NsZWFyO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50ID0gdW5zdGFibGVfZ2V0Q3VycmVudDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0VGhyZWFkSUQgPSB1bnN0YWJsZV9nZXRUaHJlYWRJRDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NIHdhcyBsb2FkZWQgYmVmb3JlIFJlYWN0LiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIFJlYWN0IHBhY2thZ2UgYmVmb3JlIGxvYWRpbmcgUmVhY3RET00uXCIgKTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgRnVuZGFtZW50YWxDb21wb25lbnQgPSAyMDtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIEJsb2NrID0gMjI7XG52YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjM7XG52YXIgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gMjQ7XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7IC8vIFJlY29yZCBkdXJhdGlvbnMgZm9yIGNvbW1pdCBhbmQgcGFzc2l2ZSBlZmZlY3RzIHBoYXNlcy5cblxudmFyIGVuYWJsZUZ1bmRhbWVudGFsQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBTY29wZSBzdXBwb3J0LlxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biB3aGlsZSB1bm1vdW50aW5nIChvciBhZnRlciBpbiB0aGUgY2FzZSBvZiBwYXNzaXZlIGVmZmVjdHMpXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlO1xuXG52YXIgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG5cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gIHt9IDsgLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIHRydWVcblxuZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArICdDYXB0dXJlJywgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHtcbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgZXJyb3IoJ0V2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgKyAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tpXSk7XG4gIH1cbn1cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSBmaWx0ZXIgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBST09UX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtcmVhY3Ryb290JztcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cbiAge1xuICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgKG5hbWVbMF0gPT09ICdvJyB8fCBuYW1lWzBdID09PSAnTycpICYmIChuYW1lWzFdID09PSAnbicgfHwgbmFtZVsxXSA9PT0gJ04nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogLy8gJEZsb3dJc3N1ZSBzeW1ib2wgaXMgcGVyZmVjdGx5IHZhbGlkIGhlcmVcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICFwcm9wZXJ0eUluZm8uYWNjZXB0c0Jvb2xlYW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgYXR0cmlidXRlTmFtZSA9IF9yZWZbMV07XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIFNWRyBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuLy8gU2luY2UgdGhlc2UgYXJlIFNWRyBhdHRyaWJ1dGVzLCB0aGVpciBhdHRyaWJ1dGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuXG5bJ2FsbG93RnVsbFNjcmVlbicsICdhc3luYycsIC8vIE5vdGU6IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgcHJldmVudHMgaXQgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBET01cbi8vIG9uIHRoZSBjbGllbnQgc2lkZSBiZWNhdXNlIHRoZSBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50LiBJbnN0ZWFkIHdlIGNhbGwgZm9jdXMoKS5cbidhdXRvRm9jdXMnLCAnYXV0b1BsYXknLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIHRoZSBmZXcgUmVhY3QgcHJvcHMgdGhhdCB3ZSBzZXQgYXMgRE9NIHByb3BlcnRpZXNcbi8vIHJhdGhlciB0aGFuIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbnMuXG5cblsnY2hlY2tlZCcsIC8vIE5vdGU6IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlzXG4vLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLiBXZSBoYXZlIHNwZWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoaXMuXG4nbXVsdGlwbGUnLCAnbXV0ZWQnLCAnc2VsZWN0ZWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIHRydWUsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhcmUgXCJvdmVybG9hZGVkIGJvb2xlYW5zXCI6IHRoZXkgYmVoYXZlIGxpa2Vcbi8vIGJvb2xlYW5zLCBidXQgY2FuIGFsc28gYWNjZXB0IGEgc3RyaW5nIHZhbHVlLlxuXG5bJ2NhcHR1cmUnLCAnZG93bmxvYWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE9WRVJMT0FERURfQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbicgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5cblsncm93U3BhbicsICdzdGFydCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTtcbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAge1xuICAgIGlmICghZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkodXJsKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIFwiZXhwZWN0ZWRcIiBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy5cbiAqIFNvbWUgcHJvcGVydGllcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8pIHtcbiAge1xuICAgIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcbiAgICAgIHJldHVybiBub2RlW3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggcHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZnVsbHkgZGlzYWJsZWQgamF2YXNjcmlwdDogVVJMcywgYW5kIGlmXG4gICAgICAgIC8vIHRoZSBoeWRyYXRpb24gaXMgc3VjY2Vzc2Z1bCBvZiBhIGphdmFzY3JpcHQ6IFVSTCwgd2VcbiAgICAgICAgLy8gc3RpbGwgd2FudCB0byB3YXJuIG9uIHRoZSBjbGllbnQuXG4gICAgICAgIHNhbml0aXplVVJMKCcnICsgZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgdmFyIHN0cmluZ1ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBib29sZWFuLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBpc1xuICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICB9IC8vIEV2ZW4gaWYgdGhpcyBwcm9wZXJ0eSB1c2VzIGEgbmFtZXNwYWNlIHdlIHVzZSBnZXRBdHRyaWJ1dGVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhc3N1bWUgaXRzIG5hbWVzcGFjZWQgbmFtZSBpcyB0aGUgc2FtZSBhcyBvdXIgY29uZmlnLlxuICAgICAgICAvLyBUbyB1c2UgZ2V0QXR0cmlidXRlTlMgd2UgbmVlZCB0aGUgbG9jYWwgbmFtZSB3aGljaCB3ZSBkb24ndCBoYXZlXG4gICAgICAgIC8vIGluIG91ciBjb25maWcgYXRtLlxuXG5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIG9iamVjdCBpcyBhbiBvcGFxdWUgcmVmZXJlbmNlIElELCBpdCdzIGV4cGVjdGVkIHRoYXRcbiAgICAvLyB0aGUgbmV4dCBwcm9wIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzZXJ2ZXIgdmFsdWUsIHNvIGp1c3QgcmV0dXJuXG4gICAgLy8gZXhwZWN0ZWRcblxuXG4gICAgaWYgKGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG5cbiAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9IC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cblxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCBwcm9wZXJ0eUluZm8gPT09IG51bGwpIHtcbiAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgdmFyIF9hdHRyaWJ1dGVOYW1lID0gbmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG11c3RVc2VQcm9wZXJ0eSA9IHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHk7XG5cbiAgaWYgKG11c3RVc2VQcm9wZXJ0eSkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YXIgdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBUaGUgcmVzdCBhcmUgdHJlYXRlZCBhcyBhdHRyaWJ1dGVzIHdpdGggc3BlY2lhbCBjYXNlcy5cblxuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgIHZhciBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBhdHRyaWJ1dGUgdHlwZSBpcyBib29sZWFuLCB3ZSBrbm93IGZvciBzdXJlIGl0IHdvbid0IGJlIGFuIGV4ZWN1dGlvbiBzaW5rXG4gICAgICAvLyBhbmQgd2Ugd29uJ3QgcmVxdWlyZSBUcnVzdGVkIFR5cGUgaGVyZS5cbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgdmFyIG93bmVyID0gIGZpYmVyLl9kZWJ1Z093bmVyID8gZmliZXIuX2RlYnVnT3duZXIudHlwZSA6IG51bGwgO1xuICB2YXIgc291cmNlID0gIGZpYmVyLl9kZWJ1Z1NvdXJjZSA7XG5cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ0xhenknKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlcik7XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLl9yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIHR5cGVvZiBvd25lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzUmVuZGVyaW5nKHJlbmRlcmluZykge1xuICB7XG4gICAgaXNSZW5kZXJpbmcgPSByZW5kZXJpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElzUmVuZGVyaW5nKCkge1xuICB7XG4gICAgcmV0dXJuIGlzUmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBmdW5jdGlvbiwgc3ltYm9sIGFyZSBhc3NpZ25lZCBhcyBlbXB0eSBzdHJpbmdzXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIShwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5jaGVja2VkID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuXG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuXG4gICAgICBpZiAob3RoZXJOb2RlID09PSByb290Tm9kZSB8fCBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG5cblxuICAgICAgdmFyIG90aGVyUHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG90aGVyTm9kZSk7XG5cbiAgICAgIGlmICghb3RoZXJQcm9wcykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBjb250ZW50ID0gJyc7IC8vIEZsYXR0ZW4gY2hpbGRyZW4uIFdlJ2xsIHdhcm4gaWYgdGhleSBhcmUgaW52YWxpZFxuICAvLyBkdXJpbmcgdmFsaWRhdGVQcm9wcygpIHdoaWNoIHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHRocm93IG9uIG5vbi1lbGVtZW50IG9iamVjdHMuXG4gIC8vIEVsZW1lbnRzIGFyZSBzdHJpbmdpZmllZCAod2hpY2ggaXMgbm9ybWFsbHkgaXJyZWxldmFudFxuICAvLyBidXQgbWF0dGVycyBmb3IgPGZidD4pLlxuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGVudCArPSBjaGlsZDsgLy8gTm90ZTogd2UgZG9uJ3Qgd2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gSW5zdGVhZCwgdGhpcyBpcyBkb25lIHNlcGFyYXRlbHkgYmVsb3cgc28gdGhhdFxuICAgIC8vIGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBoeWRyYXRpb24gY29kZSBwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZSBwYXRoIGFib3ZlLCBidXQgcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgICAvLyBXYXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZSBzbyB0aGF0IGNsaWVudCBhbmQgaHlkcmF0aW9uIGFyZSBjb25zaXN0ZW50LlxuICAgIC8vIFRPRE86IHRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBjYXVzZSBhIERFVi1vbmx5IHRocm93IGZvciBoeWRyYXRpb25cbiAgICAvLyBpZiBjaGlsZHJlbiBjb250YWlucyBhIG5vbi1lbGVtZW50IG9iamVjdC4gV2Ugc2hvdWxkIHRyeSB0byBhdm9pZCB0aGF0LlxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGFzIDxvcHRpb24+IGNoaWxkcmVuLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHtcbiAgICBjaGlsZHJlbjogdW5kZWZpbmVkXG4gIH0sIHByb3BzKTtcblxuICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBob3N0UHJvcHMuY2hpbGRyZW4gPSBjb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxO1xuXG57XG4gIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgdmFsdWVQcm9wTmFtZXMgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddO1xuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG5cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByZWZpeCB0byBhdm9pZCBjaGFvcyB3aXRoIHNwZWNpYWwga2V5cy5cbiAgICAgIHNlbGVjdGVkVmFsdWVbJyQnICsgc2VsZWN0ZWRWYWx1ZXNbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3B0aW9ucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWUuaGFzT3duUHJvcGVydHkoJyQnICsgb3B0aW9uc1tfaV0udmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKSk7XG5cbiAgICB2YXIgZGVmYXVsdFNlbGVjdGVkID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgICAgb3B0aW9uc1tfaTJdLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFNlbGVjdGVkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICB3YXNNdWx0aXBsZTogISFwcm9wcy5tdWx0aXBsZVxuICB9O1xuXG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdFVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgd2FzTXVsdGlwbGUgPSBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSAhIXByb3BzLm11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLm11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAgaWYgKCEocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIiApO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcblxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsVmFsdWUgPSBwcm9wcy52YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICghKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIklmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmICghKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpOyAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgLy8gYXZhaWxhYmxlIHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG5cbiAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsgLy8gT25seSBzZXQgbm9kZS52YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEgYnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG5cbiAgaWYgKHRleHRDb250ZW50ID09PSBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59OyAvLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5cbmZ1bmN0aW9uIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N2Zyc6XG4gICAgICByZXR1cm4gU1ZHX05BTUVTUEFDRTtcblxuICAgIGNhc2UgJ21hdGgnOlxuICAgICAgcmV0dXJuIE1BVEhfTkFNRVNQQUNFO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT0gbnVsbCB8fCBwYXJlbnROYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH0gLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG5cblxuICByZXR1cm4gcGFyZW50TmFtZXNwYWNlO1xufVxuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlcy5zdmcpIHtcblxuICAgIGlmICghKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0ZWFkIHdlIGluamVjdCB0aGVcbiAgICAgIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgICAgIC8vIHRoZSB0YXJnZXQgbm9kZVxuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sLnZhbHVlT2YoKS50b1N0cmluZygpICsgJzwvc3ZnPic7XG4gICAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn0pO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuLy8gTGlzdCBkZXJpdmVkIGZyb20gR2Vja28gc291cmNlIGNvZGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi80ZTYzOGVmYzcxL2xheW91dC9zdHlsZS90ZXN0L3Byb3BlcnR5X2RhdGFiYXNlLmpzXG52YXIgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgYW5pbWF0aW9uOiBbJ2FuaW1hdGlvbkRlbGF5JywgJ2FuaW1hdGlvbkRpcmVjdGlvbicsICdhbmltYXRpb25EdXJhdGlvbicsICdhbmltYXRpb25GaWxsTW9kZScsICdhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhbmltYXRpb25OYW1lJywgJ2FuaW1hdGlvblBsYXlTdGF0ZScsICdhbmltYXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICBiYWNrZ3JvdW5kOiBbJ2JhY2tncm91bmRBdHRhY2htZW50JywgJ2JhY2tncm91bmRDbGlwJywgJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZE9yaWdpbicsICdiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknLCAnYmFja2dyb3VuZFJlcGVhdCcsICdiYWNrZ3JvdW5kU2l6ZSddLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IFsnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJ10sXG4gIGJvcmRlcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tFbmQ6IFsnYm9yZGVyQmxvY2tFbmRDb2xvcicsICdib3JkZXJCbG9ja0VuZFN0eWxlJywgJ2JvcmRlckJsb2NrRW5kV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tTdGFydDogWydib3JkZXJCbG9ja1N0YXJ0Q29sb3InLCAnYm9yZGVyQmxvY2tTdGFydFN0eWxlJywgJ2JvcmRlckJsb2NrU3RhcnRXaWR0aCddLFxuICBib3JkZXJCb3R0b206IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcbiAgYm9yZGVyQ29sb3I6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InXSxcbiAgYm9yZGVySW1hZ2U6IFsnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJ10sXG4gIGJvcmRlcklubGluZUVuZDogWydib3JkZXJJbmxpbmVFbmRDb2xvcicsICdib3JkZXJJbmxpbmVFbmRTdHlsZScsICdib3JkZXJJbmxpbmVFbmRXaWR0aCddLFxuICBib3JkZXJJbmxpbmVTdGFydDogWydib3JkZXJJbmxpbmVTdGFydENvbG9yJywgJ2JvcmRlcklubGluZVN0YXJ0U3R5bGUnLCAnYm9yZGVySW5saW5lU3RhcnRXaWR0aCddLFxuICBib3JkZXJMZWZ0OiBbJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJ10sXG4gIGJvcmRlclJhZGl1czogWydib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnXSxcbiAgYm9yZGVyUmlnaHQ6IFsnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnXSxcbiAgYm9yZGVyU3R5bGU6IFsnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyVG9wU3R5bGUnXSxcbiAgYm9yZGVyVG9wOiBbJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlcldpZHRoOiBbJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGNvbHVtblJ1bGU6IFsnY29sdW1uUnVsZUNvbG9yJywgJ2NvbHVtblJ1bGVTdHlsZScsICdjb2x1bW5SdWxlV2lkdGgnXSxcbiAgY29sdW1uczogWydjb2x1bW5Db3VudCcsICdjb2x1bW5XaWR0aCddLFxuICBmbGV4OiBbJ2ZsZXhCYXNpcycsICdmbGV4R3JvdycsICdmbGV4U2hyaW5rJ10sXG4gIGZsZXhGbG93OiBbJ2ZsZXhEaXJlY3Rpb24nLCAnZmxleFdyYXAnXSxcbiAgZm9udDogWydmb250RmFtaWx5JywgJ2ZvbnRGZWF0dXJlU2V0dGluZ3MnLCAnZm9udEtlcm5pbmcnLCAnZm9udExhbmd1YWdlT3ZlcnJpZGUnLCAnZm9udFNpemUnLCAnZm9udFNpemVBZGp1c3QnLCAnZm9udFN0cmV0Y2gnLCAnZm9udFN0eWxlJywgJ2ZvbnRWYXJpYW50JywgJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nLCAnZm9udFdlaWdodCcsICdsaW5lSGVpZ2h0J10sXG4gIGZvbnRWYXJpYW50OiBbJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nXSxcbiAgZ2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZDogWydncmlkQXV0b0NvbHVtbnMnLCAnZ3JpZEF1dG9GbG93JywgJ2dyaWRBdXRvUm93cycsICdncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgZ3JpZEFyZWE6IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZENvbHVtbjogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCddLFxuICBncmlkQ29sdW1uR2FwOiBbJ2NvbHVtbkdhcCddLFxuICBncmlkR2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZFJvdzogWydncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkUm93R2FwOiBbJ3Jvd0dhcCddLFxuICBncmlkVGVtcGxhdGU6IFsnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGxpc3RTdHlsZTogWydsaXN0U3R5bGVJbWFnZScsICdsaXN0U3R5bGVQb3NpdGlvbicsICdsaXN0U3R5bGVUeXBlJ10sXG4gIG1hcmdpbjogWydtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Ub3AnXSxcbiAgbWFya2VyOiBbJ21hcmtlckVuZCcsICdtYXJrZXJNaWQnLCAnbWFya2VyU3RhcnQnXSxcbiAgbWFzazogWydtYXNrQ2xpcCcsICdtYXNrQ29tcG9zaXRlJywgJ21hc2tJbWFnZScsICdtYXNrTW9kZScsICdtYXNrT3JpZ2luJywgJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWScsICdtYXNrUmVwZWF0JywgJ21hc2tTaXplJ10sXG4gIG1hc2tQb3NpdGlvbjogWydtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknXSxcbiAgb3V0bGluZTogWydvdXRsaW5lQ29sb3InLCAnb3V0bGluZVN0eWxlJywgJ291dGxpbmVXaWR0aCddLFxuICBvdmVyZmxvdzogWydvdmVyZmxvd1gnLCAnb3ZlcmZsb3dZJ10sXG4gIHBhZGRpbmc6IFsncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCddLFxuICBwbGFjZUNvbnRlbnQ6IFsnYWxpZ25Db250ZW50JywgJ2p1c3RpZnlDb250ZW50J10sXG4gIHBsYWNlSXRlbXM6IFsnYWxpZ25JdGVtcycsICdqdXN0aWZ5SXRlbXMnXSxcbiAgcGxhY2VTZWxmOiBbJ2FsaWduU2VsZicsICdqdXN0aWZ5U2VsZiddLFxuICB0ZXh0RGVjb3JhdGlvbjogWyd0ZXh0RGVjb3JhdGlvbkNvbG9yJywgJ3RleHREZWNvcmF0aW9uTGluZScsICd0ZXh0RGVjb3JhdGlvblN0eWxlJ10sXG4gIHRleHRFbXBoYXNpczogWyd0ZXh0RW1waGFzaXNDb2xvcicsICd0ZXh0RW1waGFzaXNTdHlsZSddLFxuICB0cmFuc2l0aW9uOiBbJ3RyYW5zaXRpb25EZWxheScsICd0cmFuc2l0aW9uRHVyYXRpb24nLCAndHJhbnNpdGlvblByb3BlcnR5JywgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICB3b3JkV3JhcDogWydvdmVyZmxvd1dyYXAnXVxufTtcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgY29sdW1uczogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRBcmVhOiB0cnVlLFxuICBncmlkUm93OiB0cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJvd1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddOyAvLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cblxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cblxuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuXG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKi9cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7IC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuICB2YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgLy8gQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICAgIC8vIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAgICAvLyBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gICAgY2FtZWxpemUobmFtZS5yZXBsYWNlKG1zUGF0dGVybiQxLCAnbXMtJykpKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG5cbiAgICBlcnJvcihcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gXCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JJbmZpbml0eVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eShuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUkMSA9IHdhcm5WYWxpZFN0eWxlO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHN0eWxlXG4gKiBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGJ5IHNlcnZlci1zaWRlIHJlbmRlcmluZy4gSXQgYnktcGFzc2VzIHdhcm5pbmdzIGFuZFxuICogc2VjdXJpdHkgY2hlY2tzIHNvIGl0J3Mgbm90IHNhZmUgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW5cbiAqIGNvbXBhcmlzb24uIEl0IGlzIG9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhzdHlsZXMpIHtcbiAge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICcnO1xuXG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIChpc0N1c3RvbVByb3BlcnR5ID8gc3R5bGVOYW1lIDogaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KTtcbiAgICAgICAgZGVsaW1pdGVyID0gJzsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzKSB7XG4gIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG5cbiAgICB7XG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUkMShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG5cbiAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICBzdHlsZU5hbWUgPSAnY3NzRmxvYXQnO1xuICAgIH1cblxuICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbn1cbi8qKlxuICogR2l2ZW4ge2NvbG9yOiAncmVkJywgb3ZlcmZsb3c6ICdoaWRkZW4nfSByZXR1cm5zIHtcbiAqICAgY29sb3I6ICdjb2xvcicsXG4gKiAgIG92ZXJmbG93WDogJ292ZXJmbG93JyxcbiAqICAgb3ZlcmZsb3dZOiAnb3ZlcmZsb3cnLFxuICogfS4gVGhpcyBjYW4gYmUgcmVhZCBhcyBcInRoZSBvdmVyZmxvd1kgcHJvcGVydHkgd2FzIHNldCBieSB0aGUgb3ZlcmZsb3dcbiAqIHNob3J0aGFuZFwiLiBUaGF0IGlzLCB0aGUgdmFsdWVzIGFyZSB0aGUgcHJvcGVydHkgdGhhdCBlYWNoIHdhcyBkZXJpdmVkIGZyb20uXG4gKi9cblxuXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGFuZGVkW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuLyoqXG4gKiBXaGVuIG1peGluZyBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLCB3ZSB3YXJuIGR1cmluZyB1cGRhdGVzIGlmXG4gKiB3ZSBleHBlY3QgYW4gaW5jb3JyZWN0IHJlc3VsdCB0byBvY2N1ci4gSW4gcGFydGljdWxhciwgd2Ugd2FybiBmb3I6XG4gKlxuICogVXBkYXRpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgb3ZlcndyaXR0ZW4pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdiYXonLCBmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnYmF6J1xuICogUmVtb3ZpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgbG9zdCB0b28pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICcnXG4gKiBSZW1vdmluZyBhIGxvbmdoYW5kIHByb3BlcnR5IChzaG91bGQgcmV2ZXJ0IHRvIHNob3J0aGFuZDsgZG9lc24ndCk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2Zvbyd9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnRWYXJpYW50ID0gJydcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRTdHlsZXMpIHtcbiAge1xuICAgIGlmICghbmV4dFN0eWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVVcGRhdGVzKTtcbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXhwYW5kZWRVcGRhdGVzKSB7XG4gICAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShzdHlsZVVwZGF0ZXNbb3JpZ2luYWxLZXldKSA/ICdSZW1vdmluZycgOiAnVXBkYXRpbmcnLCBvcmlnaW5hbEtleSwgY29ycmVjdE9yaWdpbmFsS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSBsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmICghcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhlIEhUTUwgb3IgU1ZHIGFsbG93ZWQgYXR0cmlidXRlIGxpc3QsIGJlIHN1cmUgdG9cbi8vIGFsc28gYWRkIHRoZW0gdG8gdGhpcyBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0IG5hbWVcbi8vIHdhcm5pbmdzLlxudmFyIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgLy8gSFRNTFxuICBhY2NlcHQ6ICdhY2NlcHQnLFxuICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0Q2hhcnNldCcsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNza2V5OiAnYWNjZXNzS2V5JyxcbiAgYWN0aW9uOiAnYWN0aW9uJyxcbiAgYWxsb3dmdWxsc2NyZWVuOiAnYWxsb3dGdWxsU2NyZWVuJyxcbiAgYWx0OiAnYWx0JyxcbiAgYXM6ICdhcycsXG4gIGFzeW5jOiAnYXN5bmMnLFxuICBhdXRvY2FwaXRhbGl6ZTogJ2F1dG9DYXBpdGFsaXplJyxcbiAgYXV0b2NvbXBsZXRlOiAnYXV0b0NvbXBsZXRlJyxcbiAgYXV0b2NvcnJlY3Q6ICdhdXRvQ29ycmVjdCcsXG4gIGF1dG9mb2N1czogJ2F1dG9Gb2N1cycsXG4gIGF1dG9wbGF5OiAnYXV0b1BsYXknLFxuICBhdXRvc2F2ZTogJ2F1dG9TYXZlJyxcbiAgY2FwdHVyZTogJ2NhcHR1cmUnLFxuICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNoYWxsZW5nZTogJ2NoYWxsZW5nZScsXG4gIGNoYXJzZXQ6ICdjaGFyU2V0JyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzaWQ6ICdjbGFzc0lEJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3NOYW1lJyxcbiAgY29sczogJ2NvbHMnLFxuICBjb2xzcGFuOiAnY29sU3BhbicsXG4gIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJyxcbiAgY29udGV4dG1lbnU6ICdjb250ZXh0TWVudScsXG4gIGNvbnRyb2xzOiAnY29udHJvbHMnLFxuICBjb250cm9sc2xpc3Q6ICdjb250cm9sc0xpc3QnLFxuICBjb29yZHM6ICdjb29yZHMnLFxuICBjcm9zc29yaWdpbjogJ2Nyb3NzT3JpZ2luJyxcbiAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0ZXRpbWU6ICdkYXRlVGltZScsXG4gIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgZGVmYXVsdGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gIGRlZmF1bHR2YWx1ZTogJ2RlZmF1bHRWYWx1ZScsXG4gIGRlZmVyOiAnZGVmZXInLFxuICBkaXI6ICdkaXInLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6ICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsXG4gIGRpc2FibGVyZW1vdGVwbGF5YmFjazogJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGVudGVya2V5aGludDogJ2VudGVyS2V5SGludCcsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcbiAgLy8gU1ZHXG4gIGFib3V0OiAnYWJvdXQnLFxuICBhY2NlbnRoZWlnaHQ6ICdhY2NlbnRIZWlnaHQnLFxuICAnYWNjZW50LWhlaWdodCc6ICdhY2NlbnRIZWlnaHQnLFxuICBhY2N1bXVsYXRlOiAnYWNjdW11bGF0ZScsXG4gIGFkZGl0aXZlOiAnYWRkaXRpdmUnLFxuICBhbGlnbm1lbnRiYXNlbGluZTogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZSc6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gIGFsbG93cmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6ICdhbHBoYWJldGljJyxcbiAgYW1wbGl0dWRlOiAnYW1wbGl0dWRlJyxcbiAgYXJhYmljZm9ybTogJ2FyYWJpY0Zvcm0nLFxuICAnYXJhYmljLWZvcm0nOiAnYXJhYmljRm9ybScsXG4gIGFzY2VudDogJ2FzY2VudCcsXG4gIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRldHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvcmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogJ2F6aW11dGgnLFxuICBiYXNlZnJlcXVlbmN5OiAnYmFzZUZyZXF1ZW5jeScsXG4gIGJhc2VsaW5lc2hpZnQ6ICdiYXNlbGluZVNoaWZ0JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlcHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmJveDogJ2Jib3gnLFxuICBiZWdpbjogJ2JlZ2luJyxcbiAgYmlhczogJ2JpYXMnLFxuICBieTogJ2J5JyxcbiAgY2FsY21vZGU6ICdjYWxjTW9kZScsXG4gIGNhcGhlaWdodDogJ2NhcEhlaWdodCcsXG4gICdjYXAtaGVpZ2h0JzogJ2NhcEhlaWdodCcsXG4gIGNsaXA6ICdjbGlwJyxcbiAgY2xpcHBhdGg6ICdjbGlwUGF0aCcsXG4gICdjbGlwLXBhdGgnOiAnY2xpcFBhdGgnLFxuICBjbGlwcGF0aHVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNsaXBydWxlOiAnY2xpcFJ1bGUnLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbjogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3Jwcm9maWxlOiAnY29sb3JQcm9maWxlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAnY29sb3JQcm9maWxlJyxcbiAgY29sb3JyZW5kZXJpbmc6ICdjb2xvclJlbmRlcmluZycsXG4gICdjb2xvci1yZW5kZXJpbmcnOiAnY29sb3JSZW5kZXJpbmcnLFxuICBjb250ZW50c2NyaXB0dHlwZTogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcbiAgY29udGVudHN0eWxldHlwZTogJ2NvbnRlbnRTdHlsZVR5cGUnLFxuICBjdXJzb3I6ICdjdXJzb3InLFxuICBjeDogJ2N4JyxcbiAgY3k6ICdjeScsXG4gIGQ6ICdkJyxcbiAgZGF0YXR5cGU6ICdkYXRhdHlwZScsXG4gIGRlY2VsZXJhdGU6ICdkZWNlbGVyYXRlJyxcbiAgZGVzY2VudDogJ2Rlc2NlbnQnLFxuICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICBkaXJlY3Rpb246ICdkaXJlY3Rpb24nLFxuICBkaXNwbGF5OiAnZGlzcGxheScsXG4gIGRpdmlzb3I6ICdkaXZpc29yJyxcbiAgZG9taW5hbnRiYXNlbGluZTogJ2RvbWluYW50QmFzZWxpbmUnLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogJ2R1cicsXG4gIGR4OiAnZHgnLFxuICBkeTogJ2R5JyxcbiAgZWRnZW1vZGU6ICdlZGdlTW9kZScsXG4gIGVsZXZhdGlvbjogJ2VsZXZhdGlvbicsXG4gIGVuYWJsZWJhY2tncm91bmQ6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogJ2VuYWJsZUJhY2tncm91bmQnLFxuICBlbmQ6ICdlbmQnLFxuICBleHBvbmVudDogJ2V4cG9uZW50JyxcbiAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxuICBmaWxsOiAnZmlsbCcsXG4gIGZpbGxvcGFjaXR5OiAnZmlsbE9wYWNpdHknLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbHJ1bGU6ICdmaWxsUnVsZScsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJyZXM6ICdmaWx0ZXJSZXMnLFxuICBmaWx0ZXJ1bml0czogJ2ZpbHRlclVuaXRzJyxcbiAgZmxvb2RvcGFjaXR5OiAnZmxvb2RPcGFjaXR5JyxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2Rjb2xvcjogJ2Zsb29kQ29sb3InLFxuICAnZmxvb2QtY29sb3InOiAnZmxvb2RDb2xvcicsXG4gIGZvY3VzYWJsZTogJ2ZvY3VzYWJsZScsXG4gIGZvbnRmYW1pbHk6ICdmb250RmFtaWx5JyxcbiAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICBmb250c2l6ZTogJ2ZvbnRTaXplJyxcbiAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gIGZvbnRzaXplYWRqdXN0OiAnZm9udFNpemVBZGp1c3QnLFxuICAnZm9udC1zaXplLWFkanVzdCc6ICdmb250U2l6ZUFkanVzdCcsXG4gIGZvbnRzdHJldGNoOiAnZm9udFN0cmV0Y2gnLFxuICAnZm9udC1zdHJldGNoJzogJ2ZvbnRTdHJldGNoJyxcbiAgZm9udHN0eWxlOiAnZm9udFN0eWxlJyxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udHZhcmlhbnQ6ICdmb250VmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250d2VpZ2h0OiAnZm9udFdlaWdodCcsXG4gICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgZm9ybWF0OiAnZm9ybWF0JyxcbiAgZnJvbTogJ2Zyb20nLFxuICBmeDogJ2Z4JyxcbiAgZnk6ICdmeScsXG4gIGcxOiAnZzEnLFxuICBnMjogJ2cyJyxcbiAgZ2x5cGhuYW1lOiAnZ2x5cGhOYW1lJyxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICBncmFkaWVudHRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgZ3JhZGllbnR1bml0czogJ2dyYWRpZW50VW5pdHMnLFxuICBoYW5naW5nOiAnaGFuZ2luZycsXG4gIGhvcml6YWR2eDogJ2hvcml6QWR2WCcsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpem9yaWdpbng6ICdob3Jpek9yaWdpblgnLFxuICAnaG9yaXotb3JpZ2luLXgnOiAnaG9yaXpPcmlnaW5YJyxcbiAgaWRlb2dyYXBoaWM6ICdpZGVvZ3JhcGhpYycsXG4gIGltYWdlcmVuZGVyaW5nOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgaW4yOiAnaW4yJyxcbiAgaW46ICdpbicsXG4gIGlubGlzdDogJ2lubGlzdCcsXG4gIGludGVyY2VwdDogJ2ludGVyY2VwdCcsXG4gIGsxOiAnazEnLFxuICBrMjogJ2syJyxcbiAgazM6ICdrMycsXG4gIGs0OiAnazQnLFxuICBrOiAnaycsXG4gIGtlcm5lbG1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4gIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogJ2tlcm5pbmcnLFxuICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlzcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleXRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJzcGFjaW5nOiAnbGV0dGVyU3BhY2luZycsXG4gICdsZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgbGlnaHRpbmdjb2xvcjogJ2xpZ2h0aW5nQ29sb3InLFxuICAnbGlnaHRpbmctY29sb3InOiAnbGlnaHRpbmdDb2xvcicsXG4gIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbWFya2VyZW5kOiAnbWFya2VyRW5kJyxcbiAgJ21hcmtlci1lbmQnOiAnbWFya2VyRW5kJyxcbiAgbWFya2VyaGVpZ2h0OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VybWlkOiAnbWFya2VyTWlkJyxcbiAgJ21hcmtlci1taWQnOiAnbWFya2VyTWlkJyxcbiAgbWFya2Vyc3RhcnQ6ICdtYXJrZXJTdGFydCcsXG4gICdtYXJrZXItc3RhcnQnOiAnbWFya2VyU3RhcnQnLFxuICBtYXJrZXJ1bml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICBtYXNrdW5pdHM6ICdtYXNrVW5pdHMnLFxuICBtYXRoZW1hdGljYWw6ICdtYXRoZW1hdGljYWwnLFxuICBtb2RlOiAnbW9kZScsXG4gIG51bW9jdGF2ZXM6ICdudW1PY3RhdmVzJyxcbiAgb2Zmc2V0OiAnb2Zmc2V0JyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBvcGVyYXRvcjogJ29wZXJhdG9yJyxcbiAgb3JkZXI6ICdvcmRlcicsXG4gIG9yaWVudDogJ29yaWVudCcsXG4gIG9yaWVudGF0aW9uOiAnb3JpZW50YXRpb24nLFxuICBvcmlnaW46ICdvcmlnaW4nLFxuICBvdmVyZmxvdzogJ292ZXJmbG93JyxcbiAgb3ZlcmxpbmVwb3NpdGlvbjogJ292ZXJsaW5lUG9zaXRpb24nLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5ldGhpY2tuZXNzOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRvcmRlcjogJ3BhaW50T3JkZXInLFxuICAncGFpbnQtb3JkZXInOiAncGFpbnRPcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UxJyxcbiAgJ3Bhbm9zZS0xJzogJ3Bhbm9zZTEnLFxuICBwYXRobGVuZ3RoOiAncGF0aExlbmd0aCcsXG4gIHBhdHRlcm5jb250ZW50dW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJudW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICBwb2ludGVyZXZlbnRzOiAncG9pbnRlckV2ZW50cycsXG4gICdwb2ludGVyLWV2ZW50cyc6ICdwb2ludGVyRXZlbnRzJyxcbiAgcG9pbnRzOiAncG9pbnRzJyxcbiAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzYXR5OiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzYXR6OiAncG9pbnRzQXRaJyxcbiAgcHJlZml4OiAncHJlZml4JyxcbiAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZXVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICBwcm9wZXJ0eTogJ3Byb3BlcnR5JyxcbiAgcjogJ3InLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuICByZWZ4OiAncmVmWCcsXG4gIHJlZnk6ICdyZWZZJyxcbiAgcmVuZGVyaW5naW50ZW50OiAncmVuZGVyaW5nSW50ZW50JyxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Y291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkZXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkZmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzb3VyY2U6ICdyZXNvdXJjZScsXG4gIHJlc3RhcnQ6ICdyZXN0YXJ0JyxcbiAgcmVzdWx0OiAncmVzdWx0JyxcbiAgcmVzdWx0czogJ3Jlc3VsdHMnLFxuICByb3RhdGU6ICdyb3RhdGUnLFxuICByeDogJ3J4JyxcbiAgcnk6ICdyeScsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgc2VlZDogJ3NlZWQnLFxuICBzaGFwZXJlbmRlcmluZzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAnc2xvcGUnLFxuICBzcGFjaW5nOiAnc3BhY2luZycsXG4gIHNwZWN1bGFyY29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJleHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogJ3NwZWVkJyxcbiAgc3ByZWFkbWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRvZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAnc3RlbWgnLFxuICBzdGVtdjogJ3N0ZW12JyxcbiAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3Bjb2xvcjogJ3N0b3BDb2xvcicsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BvcGFjaXR5OiAnc3RvcE9wYWNpdHknLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN0cm9rZTogJ3N0cm9rZScsXG4gIHN0cm9rZWRhc2hhcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZWRhc2hvZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICBzdHJva2VsaW5lY2FwOiAnc3Ryb2tlTGluZWNhcCcsXG4gICdzdHJva2UtbGluZWNhcCc6ICdzdHJva2VMaW5lY2FwJyxcbiAgc3Ryb2tlbGluZWpvaW46ICdzdHJva2VMaW5lam9pbicsXG4gICdzdHJva2UtbGluZWpvaW4nOiAnc3Ryb2tlTGluZWpvaW4nLFxuICBzdHJva2VtaXRlcmxpbWl0OiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tld2lkdGg6ICdzdHJva2VXaWR0aCcsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VvcGFjaXR5OiAnc3Ryb2tlT3BhY2l0eScsXG4gICdzdHJva2Utb3BhY2l0eSc6ICdzdHJva2VPcGFjaXR5JyxcbiAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJyxcbiAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJyxcbiAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtbGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFnZScsXG4gIHRhYmxldmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gIHRhcmdldHk6ICd0YXJnZXRZJyxcbiAgdGV4dGFuY2hvcjogJ3RleHRBbmNob3InLFxuICAndGV4dC1hbmNob3InOiAndGV4dEFuY2hvcicsXG4gIHRleHRkZWNvcmF0aW9uOiAndGV4dERlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uJzogJ3RleHREZWNvcmF0aW9uJyxcbiAgdGV4dGxlbmd0aDogJ3RleHRMZW5ndGgnLFxuICB0ZXh0cmVuZGVyaW5nOiAndGV4dFJlbmRlcmluZycsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86ICd0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zZm9ybScsXG4gIHR5cGVvZjogJ3R5cGVvZicsXG4gIHUxOiAndTEnLFxuICB1MjogJ3UyJyxcbiAgdW5kZXJsaW5lcG9zaXRpb246ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gICd1bmRlcmxpbmUtcG9zaXRpb24nOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICB1bmRlcmxpbmV0aGlja25lc3M6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAndW5pY29kZScsXG4gIHVuaWNvZGViaWRpOiAndW5pY29kZUJpZGknLFxuICAndW5pY29kZS1iaWRpJzogJ3VuaWNvZGVCaWRpJyxcbiAgdW5pY29kZXJhbmdlOiAndW5pY29kZVJhbmdlJyxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNwZXJlbTogJ3VuaXRzUGVyRW0nLFxuICAndW5pdHMtcGVyLWVtJzogJ3VuaXRzUGVyRW0nLFxuICB1bnNlbGVjdGFibGU6ICd1bnNlbGVjdGFibGUnLFxuICB2YWxwaGFiZXRpYzogJ3ZBbHBoYWJldGljJyxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogJ3ZhbHVlcycsXG4gIHZlY3RvcmVmZmVjdDogJ3ZlY3RvckVmZmVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JzogJ3ZlY3RvckVmZmVjdCcsXG4gIHZlcnNpb246ICd2ZXJzaW9uJyxcbiAgdmVydGFkdnk6ICd2ZXJ0QWR2WScsXG4gICd2ZXJ0LWFkdi15JzogJ3ZlcnRBZHZZJyxcbiAgdmVydG9yaWdpbng6ICd2ZXJ0T3JpZ2luWCcsXG4gICd2ZXJ0LW9yaWdpbi14JzogJ3ZlcnRPcmlnaW5YJyxcbiAgdmVydG9yaWdpbnk6ICd2ZXJ0T3JpZ2luWScsXG4gICd2ZXJ0LW9yaWdpbi15JzogJ3ZlcnRPcmlnaW5ZJyxcbiAgdmhhbmdpbmc6ICd2SGFuZ2luZycsXG4gICd2LWhhbmdpbmcnOiAndkhhbmdpbmcnLFxuICB2aWRlb2dyYXBoaWM6ICd2SWRlb2dyYXBoaWMnLFxuICAndi1pZGVvZ3JhcGhpYyc6ICd2SWRlb2dyYXBoaWMnLFxuICB2aWV3Ym94OiAndmlld0JveCcsXG4gIHZpZXd0YXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogJ3Zpc2liaWxpdHknLFxuICB2bWF0aGVtYXRpY2FsOiAndk1hdGhlbWF0aWNhbCcsXG4gICd2LW1hdGhlbWF0aWNhbCc6ICd2TWF0aGVtYXRpY2FsJyxcbiAgdm9jYWI6ICd2b2NhYicsXG4gIHdpZHRoczogJ3dpZHRocycsXG4gIHdvcmRzcGFjaW5nOiAnd29yZFNwYWNpbmcnLFxuICAnd29yZC1zcGFjaW5nJzogJ3dvcmRTcGFjaW5nJyxcbiAgd3JpdGluZ21vZGU6ICd3cml0aW5nTW9kZScsXG4gICd3cml0aW5nLW1vZGUnOiAnd3JpdGluZ01vZGUnLFxuICB4MTogJ3gxJyxcbiAgeDI6ICd4MicsXG4gIHg6ICd4JyxcbiAgeGNoYW5uZWxzZWxlY3RvcjogJ3hDaGFubmVsU2VsZWN0b3InLFxuICB4aGVpZ2h0OiAneEhlaWdodCcsXG4gICd4LWhlaWdodCc6ICd4SGVpZ2h0JyxcbiAgeGxpbmthY3R1YXRlOiAneGxpbmtBY3R1YXRlJyxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmthcmNyb2xlOiAneGxpbmtBcmNyb2xlJyxcbiAgJ3hsaW5rOmFyY3JvbGUnOiAneGxpbmtBcmNyb2xlJyxcbiAgeGxpbmtocmVmOiAneGxpbmtIcmVmJyxcbiAgJ3hsaW5rOmhyZWYnOiAneGxpbmtIcmVmJyxcbiAgeGxpbmtyb2xlOiAneGxpbmtSb2xlJyxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtzaG93OiAneGxpbmtTaG93JyxcbiAgJ3hsaW5rOnNob3cnOiAneGxpbmtTaG93JyxcbiAgeGxpbmt0aXRsZTogJ3hsaW5rVGl0bGUnLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rdHlwZTogJ3hsaW5rVHlwZScsXG4gICd4bGluazp0eXBlJzogJ3hsaW5rVHlwZScsXG4gIHhtbGJhc2U6ICd4bWxCYXNlJyxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxsYW5nOiAneG1sTGFuZycsXG4gICd4bWw6bGFuZyc6ICd4bWxMYW5nJyxcbiAgeG1sbnM6ICd4bWxucycsXG4gICd4bWw6c3BhY2UnOiAneG1sU3BhY2UnLFxuICB4bWxuc3hsaW5rOiAneG1sbnNYbGluaycsXG4gICd4bWxuczp4bGluayc6ICd4bWxuc1hsaW5rJyxcbiAgeG1sc3BhY2U6ICd4bWxTcGFjZScsXG4gIHkxOiAneTEnLFxuICB5MjogJ3kyJyxcbiAgeTogJ3knLFxuICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gIHo6ICd6JyxcbiAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG52YXIgYXJpYVByb3BlcnRpZXMgPSB7XG4gICdhcmlhLWN1cnJlbnQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBzdGFuZGFyZE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YXIgaW52YWxpZFByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh0eXBlICE9PSAnaW5wdXQnICYmIHR5cGUgIT09ICd0ZXh0YXJlYScgJiYgdHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNpbicgfHwgbG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3Vzb3V0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuXG5cbiAgICBpZiAoZXZlbnRSZWdpc3RyeSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBJZiBubyBldmVudCBwbHVnaW5zIGhhdmUgYmVlbiBpbmplY3RlZCwgd2UgYXJlIGluIGEgc2VydmVyIGVudmlyb25tZW50LlxuICAgICAgLy8gU28gd2UgY2FuJ3QgdGVsbCBpZiB0aGUgZXZlbnQgbmFtZSBpcyBjb3JyZWN0IGZvciBzdXJlLCBidXQgd2UgY2FuIGZpbHRlclxuICAgICAgLy8gb3V0IGtub3duIGJhZCBvbmVzIGxpa2UgYG9uY2xpY2tgLiBXZSBjYW4ndCBzdWdnZXN0IGEgc3BlY2lmaWMgcmVwbGFjZW1lbnQgdGhvdWdoLlxuICAgICAgaWYgKElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gJyArICdSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuXG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpbm5lcmh0bWwnKSB7XG4gICAgICBlcnJvcignRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnYXJpYScpIHtcbiAgICAgIGVycm9yKCdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICAgIHZhciBpc1Jlc2VydmVkID0gcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDsgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkICYmIG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTm93IHRoYXQgd2UndmUgdmFsaWRhdGVkIGNhc2luZywgZG8gbm90IHZhbGlkYXRlXG4gICAgLy8gZGF0YSB0eXBlcyBmb3IgcmVzZXJ2ZWQgcHJvcHNcblxuXG4gICAgaWYgKGlzUmVzZXJ2ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2FybiB3aGVuIGEga25vd24gYXR0cmlidXRlIGlzIGEgYmFkIHR5cGVcblxuXG4gICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBwYXNzaW5nIHRoZSBzdHJpbmdzICdmYWxzZScgb3IgJ3RydWUnIGludG8gYSBib29sZWFuIHByb3BcblxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSAmJiBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNDtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRmFsbGJhY2sgdG8gbmF0aXZlRXZlbnQuc3JjRWxlbWVudCBmb3IgSUU5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDZcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdzsgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuXG4gIGlmICh0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XG4gIH0gLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblxuXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG52YXIgcmVzdG9yZUltcGwgPSBudWxsO1xudmFyIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xudmFyIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAvLyBXZSBwZXJmb3JtIHRoaXMgdHJhbnNsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlXG4gIC8vIGFsd2F5cyByZWNlaXZlIHRoZSBjb3JyZWN0IGZpYmVyIGhlcmVcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgLy8gVW5tb3VudGVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIHJlc3RvcmVJbXBsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlTm9kZSA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZC5cblxuICBpZiAoc3RhdGVOb2RlKSB7XG4gICAgdmFyIF9wcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICAgIHJlc3RvcmVJbXBsKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIF9wcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKGltcGwpIHtcbiAgcmVzdG9yZUltcGwgPSBpbXBsO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZHNTdGF0ZVJlc3RvcmUoKSB7XG4gIHJldHVybiByZXN0b3JlVGFyZ2V0ICE9PSBudWxsIHx8IHJlc3RvcmVRdWV1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCkge1xuICBpZiAoIXJlc3RvcmVUYXJnZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gcmVzdG9yZVRhcmdldDtcbiAgdmFyIHF1ZXVlZFRhcmdldHMgPSByZXN0b3JlUXVldWU7XG4gIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xuICByZXN0b3JlUXVldWUgPSBudWxsO1xuICByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChxdWV1ZWRUYXJnZXRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChxdWV1ZWRUYXJnZXRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4vLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuLy8gZXZlcnl0aGluZyBpcyBiYXRjaGVkIGJ5IGRlZmF1bHQuIFdlJ2xsIHRoZW4gaGF2ZSBhIHNpbWlsYXIgQVBJIHRvIG9wdC1vdXQgb2Zcbi8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4vLyBEZWZhdWx0c1xuXG52YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcblxudmFyIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGZuKGEsIGIsIGMsIGQpO1xufTtcblxudmFyIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBiYXRjaGVkVXBkYXRlc0ltcGw7XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbnZhciBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgcmVzdG9yZVN0YXRlSWZOZWVkZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYm9va2tlZXBpbmcpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0JhdGNoaW5nRXZlbnRVcGRhdGVzKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMsIGQpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICB7XG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKF9iYXRjaGVkVXBkYXRlc0ltcGwsIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZGlzY3JldGVVcGRhdGVzSW1wbCA9IF9kaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbDtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZUVudGVyJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gIGlmIChzdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGBcIiArIHJlZ2lzdHJhdGlvbk5hbWUgKyBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgKyB0eXBlb2YgbGlzdGVuZXIgKyBcImAgdHlwZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxudmFyIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7IC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydCBldmVudHMgd2l0aCBwYXNzaXZlIGxpc3RlbmVyc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTsgLy8gJEZsb3dGaXhNZTogSWdub3JlIEZsb3cgY29tcGxhaW5pbmcgYWJvdXQgbmVlZGluZyBhIHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZDtcblxue1xuICAvLyBJbiBERVYgbW9kZSwgd2Ugc3dhcCBvdXQgaW52b2tlR3VhcmRlZENhbGxiYWNrIGZvciBhIHNwZWNpYWwgdmVyc2lvblxuICAvLyB0aGF0IHBsYXlzIG1vcmUgbmljZWx5IHdpdGggdGhlIGJyb3dzZXIncyBEZXZUb29scy4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmVcbiAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgLy8gZnVuY3Rpb25zIGluIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYW5kIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24gb2ZcbiAgLy8gaW52b2tlR3VhcmRlZENhbGxiYWNrIHVzZXMgYSB0cnktY2F0Y2gsIGFsbCB1c2VyIGV4Y2VwdGlvbnMgYXJlIHRyZWF0ZWRcbiAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAvLyB0YWtlcyB0aGUgZXh0cmEgc3RlcCBvZiBlbmFibGluZyBwYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9ucy4gVGhpcyBpc1xuICAvLyB1bmludHVpdGl2ZSwgdGhvdWdoLCBiZWNhdXNlIGV2ZW4gdGhvdWdoIFJlYWN0IGhhcyBjYXVnaHQgdGhlIGVycm9yLCBmcm9tXG4gIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAvL1xuICAvLyBUbyBwcmVzZXJ2ZSB0aGUgZXhwZWN0ZWQgXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IsIHdlIGRvbid0IHVzZSBhXG4gIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAvLyBET00gbm9kZSwgYW5kIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnJvbSBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlclxuICAvLyBmb3IgdGhhdCBmYWtlIGV2ZW50LiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzLCB0aGUgZXJyb3IgaXMgXCJjYXB0dXJlZFwiIHVzaW5nXG4gIC8vIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIuIEJ1dCBiZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5zIGluIGEgZGlmZmVyZW50XG4gIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAvLyBFZmZlY3RpdmVseSwgdGhpcyBnaXZlcyB1cyB0cnktY2F0Y2ggYmVoYXZpb3Igd2l0aG91dCBhY3R1YWxseSB1c2luZ1xuICAvLyB0cnktY2F0Y2guIE5lYXQhXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0RldihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIHZhciBkaWRDYWxsID0gZmFsc2U7IC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuIFdlXG4gICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAvLyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGVycm9ycywgYGRpZEVycm9yYCB3aWxsIG5ldmVyIGJlXG4gICAgICAvLyBzZXQgdG8gZmFsc2UuIFRoaXMgc3RyYXRlZ3kgd29ya3MgZXZlbiBpZiB0aGUgYnJvd3NlciBpcyBmbGFreSBhbmRcbiAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgLy8gdGhlIGVycm9yIGV2ZW50IGF0IGFsbC5cblxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG5cbiAgICAgIHZhciB3aW5kb3dFdmVudCA9IHdpbmRvdy5ldmVudDsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIGRlc2NyaXB0b3Igb2Ygd2luZG93LmV2ZW50IHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZXZlbnRcbiAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgIHZhciB3aW5kb3dFdmVudERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2V2ZW50Jyk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlc3RvcmVBZnRlckRpc3BhdGNoKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuXG5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjaygpIHtcbiAgICAgICAgZGlkQ2FsbCA9IHRydWU7XG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZENhbGwgJiYgZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbi8vIERvbid0IGNoYW5nZSB0aGVzZSB0d28gdmFsdWVzLiBUaGV5J3JlIHVzZWQgYnkgUmVhY3QgRGV2IFRvb2xzLlxudmFyIE5vRmxhZ3MgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG52YXIgUGxhY2VtZW50QW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG44O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyOyAvLyBUT0RPIChlZmZlY3RzKSBSZW1vdmUgdGhpcyBiaXQgb25jZSB0aGUgbmV3IHJlY29uY2lsZXIgaXMgc3luY2VkIHRvIHRoZSBvbGQuXG5cbnZhciBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYgPVxuLyogICAgICovXG44MTkyO1xudmFyIEh5ZHJhdGluZyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgSHlkcmF0aW5nQW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgKi9cbjkzMjsgLy8gVW5pb24gb2YgYWxsIGhvc3QgZWZmZWN0c1xuXG52YXIgSG9zdEVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgICAgICAqL1xuMjA0NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbi8qICovXG4xNjM4NDsgLy8gU3RhdGljIHRhZ3MgZGVzY3JpYmUgYXNwZWN0cyBvZiBhIGZpYmVyIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlcixcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHROb2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChub2RlLnJldHVybikge1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgIC8vIHJlbmRlckNvbnRhaW5lckludG9TdWJ0cmVlLlxuICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgLy8gdGhhdCBoYXMgYmVlbiB1bm1vdW50ZWQuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJGcm9tRmliZXIoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgPyBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoIShnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoIShuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoYS5hbHRlcm5hdGUgPT09IGIpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAmJiBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICB2YXIgcGFyZW50RmliZXJBbHRlcm5hdGUgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChldmVudFR5cGUpIHtcbiAgcmV0dXJuIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGV2ZW50VHlwZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgcXVldWVkRGlzY3JldGVFdmVudHMucHVzaChxdWV1ZWRFdmVudCk7XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKF9wb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KGV4aXN0aW5nUXVldWVkRXZlbnQsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBfZmliZXIyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncywgYW5kIHRoZSB0YXJnZXRDb250YWluZXJzLCBhbmRcbiAgLy8gc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgaWYgKHRhcmdldENvbnRhaW5lciAhPT0gbnVsbCAmJiB0YXJnZXRDb250YWluZXJzLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSA9PT0gLTEpIHtcbiAgICB0YXJnZXRDb250YWluZXJzLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBmb2N1c0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgZHJhZ0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZERyYWcsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGRyYWdFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZE1vdXNlLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgX3BvaW50ZXJJZDIgPSBfcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChfcG9pbnRlcklkMiwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KF9wb2ludGVySWQyKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHF1ZXVlZFRhcmdldC5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIEZpcnN0IHJlcGxheSBkaXNjcmV0ZSBldmVudHMuXG5cbiAgd2hpbGUgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dERpc2NyZXRlRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXTtcblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyBib3VuZGFyeSB0byB1bmJsb2NrXG4gICAgICAvLyB0aGUgbmV4dCBkaXNjcmV0ZSBldmVudC5cbiAgICAgIHZhciBfZmliZXI0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKF9maWJlcjQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IG5leHREaXNjcmV0ZUV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChuZXh0RGlzY3JldGVFdmVudC5kb21FdmVudE5hbWUsIG5leHREaXNjcmV0ZUV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBEaXNjcmV0ZUV2ZW50ID0gMDtcbnZhciBVc2VyQmxvY2tpbmdFdmVudCA9IDE7XG52YXIgQ29udGludW91c0V2ZW50ID0gMjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgdmVuZG9yUHJlZml4ZXMgPSB7XG4gIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLFxuICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSxcbiAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25TdGFydCcpLFxuICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxufTtcbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICovXG5cbnZhciBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fTtcbi8qKlxuICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cblxudmFyIHN0eWxlID0ge307XG4vKipcbiAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cblxuaWYgKGNhblVzZURPTSkge1xuICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOyAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG5cbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjtcbiAgfSAvLyBTYW1lIGFzIGFib3ZlXG5cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuLyoqXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xuICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudE5hbWU7XG59XG5cbnZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9uJyk7XG52YXIgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0Jyk7XG52YXIgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCk7XG52YXIgZXZlbnRQcmlvcml0aWVzID0gbmV3IE1hcCgpOyAvLyBXZSBzdG9yZSBtb3N0IG9mIHRoZSBldmVudHMgaW4gdGhpcyBtb2R1bGUgaW4gcGFpcnMgb2YgdHdvIHN0cmluZ3Mgc28gd2UgY2FuIHJlLXVzZVxuLy8gdGhlIGNvZGUgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHNhbWUgbG9naWMgZm9yIGV2ZW50IHByaW9yaXRpemF0aW9uIGFuZCB0aGF0IG9mIHRoZVxuLy8gU2ltcGxlRXZlbnRQbHVnaW4uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgdGhlIGFpbSBpcyB0byByZWR1Y2UgY29kZVxuLy8gZHVwbGljYXRpb24gKGZvciB3aGljaCB0aGVyZSB3b3VsZCBiZSBxdWl0ZSBhIGJpdCkuIEZvciB0aGUgZXZlbnRzIHRoYXQgYXJlIG5vdCBuZWVkZWRcbi8vIGZvciB0aGUgU2ltcGxlRXZlbnRQbHVnaW4gKG90aGVyRGlzY3JldGVFdmVudHMpIHdlIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5IGFzIGFuXG4vLyBhcnJheSBvZiB0b3AgbGV2ZWwgZXZlbnRzLlxuLy8gTGFzdGx5LCB3ZSBpZ25vcmUgcHJldHRpZXIgc28gd2UgY2FuIGtlZXAgdGhlIGZvcm1hdHRpbmcgc2FuZS5cbi8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2NhbmNlbCcsICdjYW5jZWwnLCAnY2xpY2snLCAnY2xpY2snLCAnY2xvc2UnLCAnY2xvc2UnLCAnY29udGV4dG1lbnUnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjb3B5JywgJ2N1dCcsICdjdXQnLCAnYXV4Y2xpY2snLCAnYXV4Q2xpY2snLCAnZGJsY2xpY2snLCAnZG91YmxlQ2xpY2snLCAvLyBDYXJlZnVsIVxuJ2RyYWdlbmQnLCAnZHJhZ0VuZCcsICdkcmFnc3RhcnQnLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHJvcCcsICdmb2N1c2luJywgJ2ZvY3VzJywgLy8gQ2FyZWZ1bCFcbidmb2N1c291dCcsICdibHVyJywgLy8gQ2FyZWZ1bCFcbidpbnB1dCcsICdpbnB1dCcsICdpbnZhbGlkJywgJ2ludmFsaWQnLCAna2V5ZG93bicsICdrZXlEb3duJywgJ2tleXByZXNzJywgJ2tleVByZXNzJywgJ2tleXVwJywgJ2tleVVwJywgJ21vdXNlZG93bicsICdtb3VzZURvd24nLCAnbW91c2V1cCcsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxheScsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlckRvd24nLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJVcCcsICdyYXRlY2hhbmdlJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAncmVzZXQnLCAnc2Vla2VkJywgJ3NlZWtlZCcsICdzdWJtaXQnLCAnc3VibWl0JywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoRW5kJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVjaGFuZ2UnLCAndm9sdW1lQ2hhbmdlJ107XG52YXIgb3RoZXJEaXNjcmV0ZUV2ZW50cyA9IFsnY2hhbmdlJywgJ3NlbGVjdGlvbmNoYW5nZScsICd0ZXh0SW5wdXQnLCAnY29tcG9zaXRpb25zdGFydCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnVwZGF0ZSddO1xuXG5cbnZhciB1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydkcmFnJywgJ2RyYWcnLCAnZHJhZ2VudGVyJywgJ2RyYWdFbnRlcicsICdkcmFnZXhpdCcsICdkcmFnRXhpdCcsICdkcmFnbGVhdmUnLCAnZHJhZ0xlYXZlJywgJ2RyYWdvdmVyJywgJ2RyYWdPdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZU1vdmUnLCAnbW91c2VvdXQnLCAnbW91c2VPdXQnLCAnbW91c2VvdmVyJywgJ21vdXNlT3ZlcicsICdwb2ludGVybW92ZScsICdwb2ludGVyTW92ZScsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJPdXQnLCAncG9pbnRlcm92ZXInLCAncG9pbnRlck92ZXInLCAnc2Nyb2xsJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG9nZ2xlJywgJ3RvdWNobW92ZScsICd0b3VjaE1vdmUnLCAnd2hlZWwnLCAnd2hlZWwnXTsgLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnYWJvcnQnLCAnYWJvcnQnLCBBTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQU5JTUFUSU9OX0lURVJBVElPTiwgJ2FuaW1hdGlvbkl0ZXJhdGlvbicsIEFOSU1BVElPTl9TVEFSVCwgJ2FuaW1hdGlvblN0YXJ0JywgJ2NhbnBsYXknLCAnY2FuUGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdjYW5QbGF5VGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlbmRlZCcsICdlcnJvcicsICdlcnJvcicsICdnb3Rwb2ludGVyY2FwdHVyZScsICdnb3RQb2ludGVyQ2FwdHVyZScsICdsb2FkJywgJ2xvYWQnLCAnbG9hZGVkZGF0YScsICdsb2FkZWREYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdsb2FkU3RhcnQnLCAnbG9zdHBvaW50ZXJjYXB0dXJlJywgJ2xvc3RQb2ludGVyQ2FwdHVyZScsICdwbGF5aW5nJywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncHJvZ3Jlc3MnLCAnc2Vla2luZycsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd0aW1lVXBkYXRlJywgVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgJ3dhaXRpbmcnLCAnd2FpdGluZyddO1xuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqXG4gKiBpbnRvXG4gKlxuICogdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKFtcbiAqICAgWydhYm9ydCcsICdvbkFib3J0J10sXG4gKiBdKTtcbiAqXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0uXG4gKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgLy8gQXMgdGhlIGV2ZW50IHR5cGVzIGFyZSBpbiBwYWlycyBvZiB0d28sIHdlIG5lZWQgdG8gaXRlcmF0ZVxuICAvLyB0aHJvdWdoIGluIHR3b3MuIFRoZSBldmVudHMgYXJlIGluIHBhaXJzIG9mIHR3byB0byBzYXZlIGNvZGVcbiAgLy8gYW5kIGltcHJvdmUgaW5pdCBwZXJmIG9mIHByb2Nlc3NpbmcgdGhpcyBhcnJheSwgYXMgaXQgd2lsbFxuICAvLyByZXN1bHQgaW4gZmFyIGZld2VyIG9iamVjdCBhbGxvY2F0aW9ucyBhbmQgcHJvcGVydHkgYWNjZXNzZXNcbiAgLy8gaWYgd2Ugb25seSB1c2UgdGhyZWUgYXJyYXlzIHRvIHByb2Nlc3MgYWxsIHRoZSBjYXRlZ29yaWVzIG9mXG4gIC8vIGluc3RlYWQgb2YgdHVwbGVzLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdG9wRXZlbnQgPSBldmVudFR5cGVzW2ldO1xuICAgIHZhciBldmVudCA9IGV2ZW50VHlwZXNbaSArIDFdO1xuICAgIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICAgIHZhciByZWFjdE5hbWUgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KHRvcEV2ZW50LCBwcmlvcml0eSk7XG4gICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KHRvcEV2ZW50LCByZWFjdE5hbWUpO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFt0b3BFdmVudF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEV2ZW50UHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KGV2ZW50VHlwZXNbaV0sIHByaW9yaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSkge1xuICB2YXIgcHJpb3JpdHkgPSBldmVudFByaW9yaXRpZXMuZ2V0KGRvbUV2ZW50TmFtZSk7IC8vIERlZmF1bHQgdG8gYSBDb250aW51b3VzRXZlbnQuIE5vdGU6IHdlIG1pZ2h0XG4gIC8vIHdhbnQgdG8gd2FybiBpZiB3ZSBjYW4ndCBkZXRlY3QgdGhlIHByaW9yaXR5XG4gIC8vIGZvciB0aGUgZXZlbnQuXG5cbiAgcmV0dXJuIHByaW9yaXR5ID09PSB1bmRlZmluZWQgPyBDb250aW51b3VzRXZlbnQgOiBwcmlvcml0eTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgRGlzY3JldGVFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIFVzZXJCbG9ja2luZ0V2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIENvbnRpbnVvdXNFdmVudCk7XG4gIHNldEV2ZW50UHJpb3JpdGllcyhvdGhlckRpc2NyZXRlRXZlbnRzLCBEaXNjcmV0ZUV2ZW50KTtcbn1cblxudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG5cbnZhciBTeW5jTGFuZVByaW9yaXR5ID0gMTU7XG52YXIgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkgPSAxNDtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTM7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSA9IDEyO1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDExO1xudmFyIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSA9IDEwO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA5O1xudmFyIERlZmF1bHRMYW5lUHJpb3JpdHkgPSA4O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eSA9IDc7XG52YXIgVHJhbnNpdGlvblByaW9yaXR5ID0gNjtcbnZhciBSZXRyeUxhbmVQcmlvcml0eSA9IDU7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gNDtcbnZhciBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMztcbnZhciBJZGxlTGFuZVByaW9yaXR5ID0gMjtcbnZhciBPZmZzY3JlZW5MYW5lUHJpb3JpdHkgPSAxO1xudmFyIE5vTGFuZVByaW9yaXR5ID0gMDtcbnZhciBUb3RhbExhbmVzID0gMzE7XG52YXIgTm9MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIE5vTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBTeW5jQmF0Y2hlZExhbmUgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgKi9cbjQ7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjQ7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgKi9cbjMyO1xudmFyIElucHV0Q29udGludW91c0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjE5MjtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgRGVmYXVsdExhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4zNTg0O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxODYxMTI7XG52YXIgUmV0cnlMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNjI5MTQ1NjA7XG52YXIgU29tZVJldHJ5TGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4zMzU1NDQzMjtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBOb25JZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44MDUzMDYzNjg7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDtcbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShuZXdMYW5lUHJpb3JpdHkpIHtcbn0gLy8gXCJSZWdpc3RlcnNcIiB1c2VkIHRvIFwicmV0dXJuXCIgbXVsdGlwbGUgdmFsdWVzXG4vLyBVc2VkIGJ5IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIGFuZCBnZXROZXh0TGFuZXM6XG5cbnZhciByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIGlmICgoU3luY0xhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9XG5cbiAgaWYgKChTeW5jQmF0Y2hlZExhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG4gIH1cblxuICBpZiAoKElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dERpc2NyZXRlTGFuZXMgPSBJbnB1dERpc2NyZXRlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXREaXNjcmV0ZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dERpc2NyZXRlTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dENvbnRpbnVvdXNMYW5lcyA9IElucHV0Q29udGludW91c0xhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0Q29udGludW91c0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0Q29udGludW91c0xhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgZGVmYXVsdExhbmVzID0gRGVmYXVsdExhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGRlZmF1bHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gZGVmYXVsdExhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5O1xuICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uTGFuZXMgPSBUcmFuc2l0aW9uTGFuZXMgJiBsYW5lcztcblxuICBpZiAodHJhbnNpdGlvbkxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25MYW5lcztcbiAgfVxuXG4gIHZhciByZXRyeUxhbmVzID0gUmV0cnlMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChyZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBSZXRyeUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gcmV0cnlMYW5lcztcbiAgfVxuXG4gIGlmIChsYW5lcyAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJZGxlSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlkbGVMYW5lcyA9IElkbGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpZGxlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlkbGVMYW5lcztcbiAgfVxuXG4gIGlmICgoT2Zmc2NyZWVuTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gT2Zmc2NyZWVuTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG5cbiAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICByZXR1cm4gbGFuZXM7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVMYW5lUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vTGFuZVByaW9yaXR5O1xuICB9XG59XG5mdW5jdGlvbiBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KGxhbmVQcmlvcml0eSkge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb1ByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgaWYgKHBlbmRpbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIG5leHRMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdmFyIGV4cGlyZWRMYW5lcyA9IHJvb3QuZXhwaXJlZExhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBDaGVjayBpZiBhbnkgd29yayBoYXMgZXhwaXJlZC5cblxuICBpZiAoZXhwaXJlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbmV4dExhbmVzID0gZXhwaXJlZExhbmVzO1xuICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGFibGUgaWYgd2UncmUgc3VzcGVuZGVkXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBoaWdoZXIgcHJpb3JpdHkgbGFuZXMsIHdlJ2xsIGluY2x1ZGUgdGhlbSBldmVuIGlmIHRoZXlcbiAgLy8gYXJlIHN1c3BlbmRlZC5cblxuXG4gIG5leHRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKG5leHRMYW5lcyk7IC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciwgc3dpdGNoaW5nIGxhbmVzIHdpbGwgaW50ZXJydXB0XG4gIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2lwTGFuZXMpO1xuICAgIHZhciB3aXBMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICAgIGlmIChuZXh0TGFuZVByaW9yaXR5IDw9IHdpcExhbmVQcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IG5leHRMYW5lUHJpb3JpdHk7XG4gICAgfVxuICB9IC8vIENoZWNrIGZvciBlbnRhbmdsZWQgbGFuZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYXRjaC5cbiAgLy9cbiAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gIC8vIGluIGEgYmF0Y2ggdGhhdCBkb2VzIG5vdCBhbHNvIGluY2x1ZGUgdGhlIG90aGVyIGxhbmUuIFR5cGljYWxseSB3ZSBkbyB0aGlzXG4gIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAvLyBpdCdzIGFscmVhZHkgcmVuZGVyaW5nLCB3ZSB3b24ndCBpbnRlcnJ1cHQgaXQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNpbmNlXG4gIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gIC8vIGNvbXBsZXRlZCB3b3JrIGluIG9yZGVyIHRvIGRvIGl0LlxuICAvL1xuICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCwgbGlrZVxuICAvLyB1c2VNdXRhYmxlU291cmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGFydGlhbCB3b3JrIGF0IHRoZVxuICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cblxuICB2YXIgZW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuXG4gIGlmIChlbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgIHZhciBsYW5lcyA9IG5leHRMYW5lcyAmIGVudGFuZ2xlZExhbmVzO1xuXG4gICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICBuZXh0TGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcykge1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBldmVudFRpbWUgPSBldmVudFRpbWVzW2luZGV4XTtcblxuICAgIGlmIChldmVudFRpbWUgPiBtb3N0UmVjZW50RXZlbnRUaW1lKSB7XG4gICAgICBtb3N0UmVjZW50RXZlbnRUaW1lID0gZXZlbnRUaW1lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgcmV0dXJuIG1vc3RSZWNlbnRFdmVudFRpbWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBFeHBpcmF0aW9uIGhldXJpc3RpYyBpcyBjb25zdGFudCBwZXIgbGFuZSwgc28gY291bGQgdXNlIGEgbWFwLlxuICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lKTtcbiAgdmFyIHByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgaWYgKHByaW9yaXR5ID49IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLiBXaGVuXG4gICAgLy8gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZyB0aGVyZSdzXG4gICAgLy8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mIHN5bmNocm9ub3VzXG4gICAgLy8gdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlXG4gICAgLy8gc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IGV4cGlyYXRpb25cbiAgICAvLyB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb24gZG9lcyBoYXBwZW4uXG4gICAgLy9cbiAgICAvLyBBbHNvIG5vdGUgdGhhdCwgaW4gdGhlIGNhc2Ugb2YgdXNlciBpbnB1dCBzcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBzb29uIG5vXG4gICAgLy8gbG9uZ2VyIGJlIGFuIGlzc3VlIGJlY2F1c2Ugd2UgcGxhbiB0byBtYWtlIHVzZXIgaW5wdXQgc3luY2hyb25vdXMgYnlcbiAgICAvLyBkZWZhdWx0ICh1bnRpbCB5b3UgZW50ZXIgYHN0YXJ0VHJhbnNpdGlvbmAsIG9mIGNvdXJzZS4pXG4gICAgLy9cbiAgICAvLyBJZiB3ZXJlbid0IHBsYW5uaW5nIHRvIG1ha2UgdGhlc2UgdXBkYXRlcyBzeW5jaHJvbm91cyBzb29uIGFueXdheSwgSVxuICAgIC8vIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBudW1iZXIgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyLlxuICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgfSBlbHNlIGlmIChwcmlvcml0eSA+PSBUcmFuc2l0aW9uUHJpb3JpdHkpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1MDAwO1xuICB9IGVsc2Uge1xuICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG5cbiAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpIHtcbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKSB7XG4gIHJldHVybiByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIGEgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRVcGRhdGVMYW5lKGxhbmVQcmlvcml0eSwgd2lwTGFuZXMpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTIgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dENvbnRpbnVvdXNMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMiA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoRGVmYXVsdExhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIHRoZSBkZWZhdWx0IGxhbmVzIGFyZSBhbHJlYWR5IGJlaW5nIHdvcmtlZCBvbiwgbG9vayBmb3IgYVxuICAgICAgICAgIC8vIGxhbmUgaW4gdGhlIHRyYW5zaXRpb24gcmFuZ2UuXG4gICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgICAgLy8gQWxsIHRoZSB0cmFuc2l0aW9uIGxhbmVzIGFyZSB0YWtlbiwgdG9vLiBUaGlzIHNob3VsZCBiZSB2ZXJ5XG4gICAgICAgICAgICAvLyByYXJlLCBidXQgYXMgYSBsYXN0IHJlc29ydCwgcGljayBhIGRlZmF1bHQgbGFuZS4gVGhpcyB3aWxsIGhhdmVcbiAgICAgICAgICAgIC8vIHRoZSBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUzO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6IC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRUcmFuc2l0aW9uTGFuZSBpbnN0ZWFkXG5cbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFJldHJ5TGFuZSBpbnN0ZWFkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICB9XG4gIH1cbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRUcmFuc2l0aW9uTGFuZSh3aXBMYW5lcywgcGVuZGluZ0xhbmVzKSB7XG4gIC8vIEZpcnN0IGxvb2sgZm9yIGxhbmVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5jbGFpbWVkLCBpLmUuIGhhdmUgbm9cbiAgLy8gcGVuZGluZyB3b3JrLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH5wZW5kaW5nTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiBhbGwgbGFuZXMgaGF2ZSBwZW5kaW5nIHdvcmssIGxvb2sgZm9yIGEgbGFuZSB0aGF0IGlzbid0IGN1cnJlbnRseVxuICAgIC8vIGJlaW5nIHdvcmtlZCBvbi5cbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgd29ya2VkIG9uLCBwaWNrIGFueSBsYW5lLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFJldHJ5TGFuZSh3aXBMYW5lcykge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgZmluZFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgZmluZHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbm9uLXplcm8gYml0LlxuICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IE5vTGFuZXMgOiAxIDw8IGluZGV4O1xufVxuXG5mdW5jdGlvbiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykgPDwgMSkgLSAxO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gIC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGJpdCBpcyBzZWxlY3RlZDsgeW91IGNhbiBwaWNrIGFueSBiaXQgd2l0aG91dFxuICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICByZXR1cm4gMzEgLSBjbHozMihsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgcmV0dXJuIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICByZXR1cm4gKGEgJiBiKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gKHNldCAmIHN1YnNldCkgPT09IHN1YnNldDtcbn1cbmZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICByZXR1cm4gYSB8IGI7XG59XG5mdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gc2V0ICYgfnN1YnNldDtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gVE9ETzogVGhlb3JldGljYWxseSwgYW55IHVwZGF0ZSB0byBhbnkgbGFuZSBjYW4gdW5ibG9jayBhbnkgb3RoZXIgbGFuZS4gQnV0XG4gIC8vIGl0J3Mgbm90IHByYWN0aWNhbCB0byB0cnkgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIGNvbWJpbmF0aW9uLiBXZSBuZWVkIGFcbiAgLy8gaGV1cmlzdGljIHRvIGRlY2lkZSB3aGljaCBsYW5lcyB0byBhdHRlbXB0IHRvIHJlbmRlciwgYW5kIGluIHdoaWNoIGJhdGNoZXMuXG4gIC8vIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSBoZXVyaXN0aWMgYXMgaW4gdGhlIG9sZCBFeHBpcmF0aW9uVGltZXMgbW9kZWw6XG4gIC8vIHJldHJ5IGFueSBsYW5lIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LCBidXQgZG9uJ3QgdHJ5IHVwZGF0ZXMgYXQgaGlnaGVyXG4gIC8vIHByaW9yaXR5IHdpdGhvdXQgYWxzbyBpbmNsdWRpbmcgdGhlIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMuIFRoaXMgd29ya3Mgd2VsbFxuICAvLyB3aGVuIGNvbnNpZGVyaW5nIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbHMsIGJ1dCBpc24ndFxuICAvLyBzdWZmaWNpZW50IGZvciB1cGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSwgc2luY2Ugd2Ugd2FudCB0byB0cmVhdFxuICAvLyB0aG9zZSB1cGRhdGVzIGFzIHBhcmFsbGVsLlxuICAvLyBVbnN1c3BlbmQgYW55IHVwZGF0ZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eS5cblxuICB2YXIgaGlnaGVyUHJpb3JpdHlMYW5lcyA9IHVwZGF0ZUxhbmUgLSAxOyAvLyBUdXJucyAwYjEwMDAgaW50byAwYjAxMTFcblxuICByb290LnN1c3BlbmRlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KHVwZGF0ZUxhbmUpOyAvLyBXZSBjYW4gYWx3YXlzIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0aW1lc3RhbXAgYmVjYXVzZSB3ZSBwcmVmZXIgdGhlIG1vc3RcbiAgLy8gcmVjZW50IGV2ZW50LCBhbmQgd2UgYXNzdW1lIHRpbWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuXG4gIGV2ZW50VGltZXNbaW5kZXhdID0gZXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7IC8vIFRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBDUFUtYm91bmQuIENsZWFyIHRoZWlyIGV4cGlyYXRpb24gdGltZXMuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMsIGV2ZW50VGltZSkge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpIHtcbiAgcm9vdC5leHBpcmVkTGFuZXMgfD0gSW5wdXREaXNjcmV0ZUxhbmVzICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBoYXNEaXNjcmV0ZUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBJbnB1dERpc2NyZXRlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyB8PSB1cGRhdGVMYW5lICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxudmFyIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrOyAvLyBDb3VudCBsZWFkaW5nIHplcm9zLiBPbmx5IHVzZWQgb24gbGFuZXMsIHNvIGFzc3VtZSBpbnB1dCBpcyBhbiBpbnRlZ2VyLlxuLy8gQmFzZWQgb246XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxuZnVuY3Rpb24gY2x6MzJGYWxsYmFjayhsYW5lcykge1xuICBpZiAobGFuZXMgPT09IDApIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICByZXR1cm4gMzEgLSAobG9nKGxhbmVzKSAvIExOMiB8IDApIHwgMDtcbn1cblxuLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZCB1c2UgZHluYW1pYyBkaXNwYXRjaCBmb3JcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7IC8vIFRPRE86IGNhbiB3ZSBzdG9wIGV4cG9ydGluZyB0aGVzZT9cblxudmFyIF9lbmFibGVkID0gdHJ1ZTsgLy8gVGhpcyBpcyBleHBvcnRlZCBpbiBGQiBidWlsZHMgZm9yIHVzZSBieSBsZWdhY3kgRkIgbGF5ZXIgaW5mcmEuXG4vLyBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYnV0IGl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2FmZS5cblxuZnVuY3Rpb24gc2V0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9lbmFibGVkID0gISFlbmFibGVkO1xufVxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICByZXR1cm4gX2VuYWJsZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKTtcbiAgdmFyIGxpc3RlbmVyV3JhcHBlcjtcblxuICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICBjYXNlIERpc2NyZXRlRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcldyYXBwZXIuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcik7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgfVxuXG4gIGRpc2NyZXRlVXBkYXRlcyhkaXNwYXRjaEV2ZW50LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eShVc2VyQmxvY2tpbmdQcmlvcml0eSQxLCBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhbGxvd1JlcGxheSA9IHRydWU7XG5cbiAge1xuICAgIC8vIFRPRE86IHJlcGxheWluZyBjYXB0dXJlIHBoYXNlIGV2ZW50cyBpcyBjdXJyZW50bHkgYnJva2VuXG4gICAgLy8gYmVjYXVzZSB3ZSB1c2VkIHRvIGRvIGl0IGR1cmluZyB0b3AtbGV2ZWwgbmF0aXZlIGJ1YmJsZSBoYW5kbGVyc1xuICAgIC8vIGJ1dCBub3cgd2UgdXNlIGRpZmZlcmVudCBidWJibGUgYW5kIGNhcHR1cmUgaGFuZGxlcnMuXG4gICAgLy8gSW4gZWFnZXIgbW9kZSwgd2UgYXR0YWNoIGNhcHR1cmUgbGlzdGVuZXJzIGVhcmx5LCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gZmlsdGVyIHRoZW0gb3V0IHVudGlsIHdlIGZpeCB0aGUgbG9naWMgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LlxuICAgIC8vIFRoaXMgY291bGQndmUgYmVlbiBvdXRzaWRlIHRoZSBmbGFnIGJ1dCBJIHB1dCBpdCBpbnNpZGUgdG8gcmVkdWNlIHJpc2suXG4gICAgYWxsb3dSZXBsYXkgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpID09PSAwO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5ICYmIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkgJiYgaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzLCBhbmQgdGhpcyBpcyBhbm90aGVyIGRpc2NyZXRlXG4gICAgLy8gZXZlbnQsIHRoZW4gd2UgY2FuJ3QgZGlzcGF0Y2ggaXQgcmVnYXJkbGVzcyBvZiBpdHMgdGFyZ2V0LCBzaW5jZSB0aGV5XG4gICAgLy8gbmVlZCB0byBkaXNwYXRjaCBpbiBvcmRlci5cbiAgICBxdWV1ZURpc2NyZXRlRXZlbnQobnVsbCwgLy8gRmxhZ3MgdGhhdCB3ZSdyZSBub3QgYWN0dWFsbHkgYmxvY2tlZCBvbiBhbnl0aGluZyBhcyBmYXIgYXMgd2Uga25vdy5cbiAgICBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSkge1xuICAgIGlmIChpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgdGhpcyB0byBiZSByZXBsYXllZCBsYXRlciBvbmNlIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLlxuICAgICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAgIC8vIHF1ZXVlaW5nIGlzIGFjY3VtbXVsYXRpdmUuXG5cblxuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufSAvLyBBdHRlbXB0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LiBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xudmFyIHJvb3QgPSBudWxsO1xudmFyIHN0YXJ0VGV4dCA9IG51bGw7XG52YXIgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICBzdGFydFRleHQgPSBnZXRUZXh0KCk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgaWYgKGZhbGxiYWNrVGV4dCkge1xuICAgIHJldHVybiBmYWxsYmFja1RleHQ7XG4gIH1cblxuICB2YXIgc3RhcnQ7XG4gIHZhciBzdGFydFZhbHVlID0gc3RhcnRUZXh0O1xuICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgdmFyIGVuZDtcbiAgdmFyIGVuZFZhbHVlID0gZ2V0VGV4dCgpO1xuICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuXG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0KCkge1xuICBpZiAoJ3ZhbHVlJyBpbiByb290KSB7XG4gICAgcmV0dXJuIHJvb3QudmFsdWU7XG4gIH1cblxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGEgZmFjdG9yeSBzbyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHJldHVybmVkIGNvbnN0cnVjdG9ycy5cbi8vIElmIHdlIGhhZCBhIHNpbmdsZSBjb25zdHJ1Y3RvciwgaXQgd291bGQgYmUgbWVnYW1vcnBoaWMgYW5kIGVuZ2luZXMgd291bGQgZGVvcHQuXG5cblxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIC8qKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtfcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtfcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2Fzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG5cbiAgcmV0dXJuIFN5bnRoZXRpY0Jhc2VFdmVudDtcbn1cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGV2ZW50UGhhc2U6IDAsXG4gIGJ1YmJsZXM6IDAsXG4gIGNhbmNlbGFibGU6IDAsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICBpc1RydXN0ZWQ6IDBcbn07XG52YXIgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSk7XG5cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGFUcmFuc2ZlcjogMFxufSk7XG5cbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cblxudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgY29kZTogMCxcbiAgbG9jYXRpb246IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIHJlcGVhdDogMCxcbiAgbG9jYWxlOiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cblxudmFyIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgcG9pbnRlcklkOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICB0aWx0WDogMCxcbiAgdGlsdFk6IDAsXG4gIHR3aXN0OiAwLFxuICBwb2ludGVyVHlwZTogMCxcbiAgaXNQcmltYXJ5OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgcHJvcGVydHlOYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IDAsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcblxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93O1xudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5cbmlmIChjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufSAvLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxuXG5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZTsgLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cblxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gY2FuVXNlRE9NICYmICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpO1xudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG5cbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAnY29tcG9zaXRpb25lbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gZ2V0RGF0YSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsICdvbkJlZm9yZUlucHV0Jyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoJ29uQmVmb3JlSW5wdXQnLCAnYmVmb3JlaW5wdXQnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGRvY3VtZW50KTtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQxKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ2hhbmdlJywgWydjaGFuZ2UnLCAnY2xpY2snLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgLy8gRmxhZyB0aGlzIGV2ZW50IGxvb3AgYXMgbmVlZGluZyBzdGF0ZSByZXN0b3JlLlxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgJ29uQ2hhbmdlJyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvbkNoYW5nZScsICdjaGFuZ2UnLCBudWxsLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xuXG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTsgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xuXG5cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcblxuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnaW5wdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgJ251bWJlcicsIG5vZGUudmFsdWUpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9XG5cbiAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpO1xuXG4gICAgaWYgKGluc3QpIHtcbiAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgfSAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMigpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUVudGVyJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VMZWF2ZScsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJFbnRlcicsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyTGVhdmUnLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG59XG4vKipcbiAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgaXNPdmVyRXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW92ZXInIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJztcbiAgdmFyIGlzT3V0RXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCc7XG5cbiAgaWYgKGlzT3ZlckV2ZW50ICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfUkVQTEFZRUQpID09PSAwKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhbiBvdmVyIGV2ZW50IHdpdGggYSB0YXJnZXQsIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkaXNwYXRjaGVkXG4gICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAvLyB0aGVuIGl0J3MgYmVjYXVzZSB3ZSBjb3VsZG4ndCBkaXNwYXRjaCBhZ2FpbnN0IHRoaXMgdGFyZ2V0IHByZXZpb3VzbHlcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG5vdyBpbnN0ZWFkLlxuICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudDtcblxuICAgIGlmIChyZWxhdGVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRlZCBub2RlIGlzIG1hbmFnZWQgYnkgUmVhY3QsIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlXG4gICAgICAvLyBhbHJlYWR5IGRpc3BhdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnRzIGR1cmluZyBpdHMgbW91c2VvdXQuXG4gICAgICBpZiAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVsYXRlZCkgfHwgaXNDb250YWluZXJNYXJrZWRBc1Jvb3QocmVsYXRlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHdpbjsgLy8gVE9ETzogd2h5IGlzIHRoaXMgbnVsbGFibGUgaW4gdGhlIHR5cGVzIGJ1dCB3ZSByZWFkIGZyb20gaXQ/XG5cbiAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jKSB7XG4gICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgfVxuXG4gIHZhciBmcm9tO1xuICB2YXIgdG87XG5cbiAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICB2YXIgX3JlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcblxuICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgIHRvID0gX3JlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShfcmVsYXRlZCkgOiBudWxsO1xuXG4gICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRvKTtcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0by50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdG8udGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgZnJvbSA9IG51bGw7XG4gICAgdG8gPSB0YXJnZXRJbnN0O1xuICB9XG5cbiAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICB2YXIgbGVhdmVFdmVudFR5cGUgPSAnb25Nb3VzZUxlYXZlJztcbiAgdmFyIGVudGVyRXZlbnRUeXBlID0gJ29uTW91c2VFbnRlcic7XG4gIHZhciBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3ZlcicpIHtcbiAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgbGVhdmVFdmVudFR5cGUgPSAnb25Qb2ludGVyTGVhdmUnO1xuICAgIGVudGVyRXZlbnRUeXBlID0gJ29uUG9pbnRlckVudGVyJztcbiAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gIH1cblxuICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICB2YXIgdG9Ob2RlID0gdG8gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UodG8pO1xuICB2YXIgbGVhdmUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGxlYXZlRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnbGVhdmUnLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcbiAgdmFyIGVudGVyID0gbnVsbDsgLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyB0aGlzIG5hdGl2ZUV2ZW50IGlmIHdlIGFyZSBwcm9jZXNzaW5nXG4gIC8vIHRoZSBmaXJzdCBhbmNlc3Rvci4gTmV4dCB0aW1lLCB3ZSB3aWxsIGlnbm9yZSB0aGUgZXZlbnQuXG5cbiAgdmFyIG5hdGl2ZVRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG5hdGl2ZVRhcmdldEluc3QgPT09IHRhcmdldEluc3QpIHtcbiAgICB2YXIgZW50ZXJFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdlbnRlcicsIHRvLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGVudGVyRXZlbnQudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyRXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuICAgIGVudGVyID0gZW50ZXJFdmVudDtcbiAgfVxuXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIW9iamVjdElzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG91dGVyTm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuICB2YXIgd2luID0gb3duZXJEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24gJiYgd2luLmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDsgLy8gSW4gRmlyZWZveCwgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGNhbiBiZSBcImFub255bW91cyBkaXZzXCIsIGUuZy4gdGhlXG4gIC8vIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQgdHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzIGRpdnMgZG8gbm90IHNlZW0gdG9cbiAgLy8gZXhwb3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkIGVycm9yXCIgaWYgYW55IG9mIGl0c1xuICAvLyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2VlbWluZ2x5IHBvc3NpYmxlIHdheSB0byBhdm9pZCBlcnJvcmluZ1xuICAvLyBpcyB0byBhY2Nlc3MgYSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3Igbm9uLWFub255bW91cyBkaXZzIGFuZFxuICAvLyBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICBhbmNob3JOb2RlLm5vZGVUeXBlO1xuICAgIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICB9O1xufVxuLyoqXG4gKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gKi9cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuXG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9IC8vIEZvY3VzaW5nIGEgbm9kZSBjYW4gY2hhbmdlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdoaWNoIGlzIHVuZGVzaXJhYmxlXG5cblxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGFuY2VzdG9yLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnQ6IGFuY2VzdG9yLFxuICAgICAgICAgIGxlZnQ6IGFuY2VzdG9yLnNjcm9sbExlZnQsXG4gICAgICAgICAgdG9wOiBhbmNlc3Rvci5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gYW5jZXN0b3JzW2ldO1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbExlZnQgPSBpbmZvLmxlZnQ7XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb247XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwge1xuICAgIHN0YXJ0OiAwLFxuICAgIGVuZDogMFxuICB9O1xufVxuLyoqXG4gKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAqIHRoZSBpbnB1dC5cbiAqIC1AaW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgfVxufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvblNlbGVjdCcsIFsnZm9jdXNvdXQnLCAnY29udGV4dG1lbnUnLCAnZHJhZ2VuZCcsICdmb2N1c2luJywgJ2tleWRvd24nLCAna2V5dXAnLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChldmVudFRhcmdldCkge1xuICByZXR1cm4gZXZlbnRUYXJnZXQud2luZG93ID09PSBldmVudFRhcmdldCA/IGV2ZW50VGFyZ2V0LmRvY3VtZW50IDogZXZlbnRUYXJnZXQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyBldmVudFRhcmdldCA6IGV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG59XG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5cblxuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobW91c2VEb3duIHx8IGFjdGl2ZUVsZW1lbnQkMSA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQkMSAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cblxuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uJDEoYWN0aXZlRWxlbWVudCQxKTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QkMSwgJ29uU2VsZWN0Jyk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25TZWxlY3QnLCAnc2VsZWN0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgICAgZXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcblxuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAgICAvL1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG5cbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuXG4gIGlmIChyZWFjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgdmFyIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd3aGVlbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICBjYXNlICdwb2ludGVyZG93bic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIHtcbiAgICAvLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gSW4gdGhlIHBhc3QsIFJlYWN0IGhhcyBhbHdheXMgYnViYmxlZCB0aGVtLCBidXQgdGhpcyBjYW4gYmUgc3VycHJpc2luZy5cbiAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgYWxpZ25pbmcgY2xvc2VyIHRvIHRoZSBicm93c2VyIGJlaGF2aW9yIGJ5IG5vdCBidWJibGluZ1xuICAgIC8vIHRoZW0gaW4gUmVhY3QgZWl0aGVyLiBXZSdsbCBzdGFydCBieSBub3QgYnViYmxpbmcgb25TY3JvbGwsIGFuZCB0aGVuIGV4cGFuZC5cbiAgICB2YXIgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSAhaW5DYXB0dXJlUGhhc2UgJiYgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFkZCBhbGwgZXZlbnRzIGZyb21cbiAgICAvLyBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdCBpbiBET01QbHVnaW5FdmVudFN5c3RlbS5cbiAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGxpc3QuXG4gICAgLy8gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGNhbiB3YWl0IHVudGlsIFJlYWN0IDE4LlxuICAgIGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbCc7XG5cbiAgICB2YXIgX2xpc3RlbmVycyA9IGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50LnR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSk7XG5cbiAgICBpZiAoX2xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBldmVudCBsYXppbHkuXG4gICAgICB2YXIgX2V2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogX2V2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiByZW1vdmUgdG9wLWxldmVsIHNpZGUgZWZmZWN0LlxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDMoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvbmNlcHQgb2YgYSBcIlNpbXBsZUV2ZW50UGx1Z2luXCIuXG4gIC8vIFRoaXMgaXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV2ZW50IHN5c3RlbS4gQWxsXG4gIC8vIHRoZSBvdGhlciBwbHVnaW5zIGFyZSBlc3NlbnRpYWxseSBwb2x5ZmlsbHMuIFNvIHRoZSBwbHVnaW5cbiAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIGlubGluZWQgc29tZXdoZXJlIGFuZCBoYXZlIGl0cyBsb2dpY1xuICAvLyBiZSBjb3JlIHRoZSB0byBldmVudCBzeXN0ZW0uIFRoaXMgd291bGQgcG90ZW50aWFsbHkgYWxsb3dcbiAgLy8gdXMgdG8gc2hpcCBidWlsZHMgb2YgUmVhY3Qgd2l0aG91dCB0aGUgcG9seWZpbGxlZCBwbHVnaW5zIGJlbG93LlxuICBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICB2YXIgc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucyA9IChldmVudFN5c3RlbUZsYWdzICYgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMpID09PSAwOyAvLyBXZSBkb24ndCBwcm9jZXNzIHRoZXNlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIHRoZVxuICAvLyBldmVudCdzIG5hdGl2ZSBcImJ1YmJsZVwiIHBoYXNlLCB3aGljaCBtZWFucyB0aGF0IHdlJ3JlXG4gIC8vIG5vdCBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVGhhdCdzIGJlY2F1c2Ugd2UgZW11bGF0ZVxuICAvLyB0aGUgY2FwdHVyZSBwaGFzZSBoZXJlIHN0aWxsLiBUaGlzIGlzIGEgdHJhZGUtb2ZmLFxuICAvLyBiZWNhdXNlIGluIGFuIGlkZWFsIHdvcmxkIHdlIHdvdWxkIG5vdCBlbXVsYXRlIGFuZCB1c2VcbiAgLy8gdGhlIHBoYXNlcyBwcm9wZXJseSwgbGlrZSB3ZSBkbyB3aXRoIHRoZSBTaW1wbGVFdmVudFxuICAvLyBwbHVnaW4uIEhvd2V2ZXIsIHRoZSBwbHVnaW5zIGJlbG93IGVpdGhlciBleHBlY3RcbiAgLy8gZW11bGF0aW9uIChFbnRlckxlYXZlKSBvciB1c2Ugc3RhdGUgbG9jYWxpemVkIHRvIHRoYXRcbiAgLy8gcGx1Z2luIChCZWZvcmVJbnB1dCwgQ2hhbmdlLCBTZWxlY3QpLiBUaGUgc3RhdGUgaW5cbiAgLy8gdGhlc2UgbW9kdWxlcyBjb21wbGljYXRlcyB0aGluZ3MsIGFzIHlvdSdsbCBlc3NlbnRpYWxseVxuICAvLyBnZXQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhcHR1cmUgcGhhc2UgZXZlbnQgbWlnaHQgY2hhbmdlXG4gIC8vIHN0YXRlLCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGJ1YmJsZSBldmVudCB0byBjb21lIGluXG4gIC8vIGxhdGVyIGFuZCBub3QgdHJpZ2dlciBhbnl0aGluZyBhcyB0aGUgc3RhdGUgbm93XG4gIC8vIGludmFsaWRhdGVzIHRoZSBoZXVyaXN0aWNzIG9mIHRoZSBldmVudCBwbHVnaW4uIFdlXG4gIC8vIGNvdWxkIGFsdGVyIGFsbCB0aGVzZSBwbHVnaW5zIHRvIHdvcmsgaW4gc3VjaCB3YXlzLCBidXRcbiAgLy8gdGhhdCBtaWdodCBjYXVzZSBvdGhlciB1bmtub3duIHNpZGUtZWZmZWN0cyB0aGF0IHdlXG4gIC8vIGNhbid0IGZvcnNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndm9sdW1lY2hhbmdlJywgJ3dhaXRpbmcnXTsgLy8gV2Ugc2hvdWxkIG5vdCBkZWxlZ2F0ZSB0aGVzZSBldmVudHMgdG8gdGhlIGNvbnRhaW5lciwgYnV0IHJhdGhlclxuLy8gc2V0IHRoZW0gb24gdGhlIGFjdHVhbCB0YXJnZXQgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgcHJpbWFyaWx5XG4vLyBiZWNhdXNlIHRoZXNlIGV2ZW50cyBkbyBub3QgY29uc2lzdGVudGx5IGJ1YmJsZSBpbiB0aGUgRE9NLlxuXG52YXIgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChbJ2NhbmNlbCcsICdjbG9zZScsICdpbnZhbGlkJywgJ2xvYWQnLCAnc2Nyb2xsJywgJ3RvZ2dsZSddLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpKTtcblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHByZXZpb3VzSW5zdGFuY2U7XG5cbiAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgZm9yICh2YXIgaSA9IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBkaXNwYXRjaExpc3RlbmVyc1tpXSxcbiAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlLFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIGxpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kgPSBkaXNwYXRjaExpc3RlbmVyc1tfaV0sXG4gICAgICAgICAgX2luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmluc3RhbmNlLFxuICAgICAgICAgIF9jdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgX2xpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9saXN0ZW5lciwgX2N1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXSxcbiAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnMgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgbGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSk7IC8vICBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuXG4gIHJldGhyb3dDYXVnaHRFcnJvcigpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkb24ndCBpdGVyYXRlIHRocm91Z2ggZXZlbnRzXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcG9ydGFsIGNvbnRhaW5lciBvciByb290IG5vZGUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICAvLyBUT0RPOiBvbmNlIHdlIHJlbW92ZSB0aGUgZmxhZywgd2UgbWF5IGJlIGFibGUgdG8gYWxzb1xuICAgICAgLy8gcmVtb3ZlIHNvbWUgb2YgdGhlIGJvb2trZWVwaW5nIG1hcHMgdXNlZCBmb3IgbGF6aW5lc3MuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCByb290Q29udGFpbmVyRWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMDtcbiAgdmFyIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50OyAvLyBzZWxlY3Rpb25jaGFuZ2UgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50XG4gIC8vIG90aGVyd2lzZSBpdCB3b24ndCBjYXB0dXJlIGluY29taW5nIGV2ZW50cyB0aGF0IGFyZSBvbmx5XG4gIC8vIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgZGlyZWN0bHkuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgJiYgcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgIT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9IC8vIElmIHRoZSBldmVudCBjYW4gYmUgZGVsZWdhdGVkIChvciBpcyBjYXB0dXJlIHBoYXNlKSwgd2UgY2FuXG4gIC8vIHJlZ2lzdGVyIGl0IHRvIHRoZSByb290IGNvbnRhaW5lci4gT3RoZXJ3aXNlLCB3ZSBzaG91bGRcbiAgLy8gcmVnaXN0ZXIgdGhlIGV2ZW50IHRvIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgbWFyayBpdCBhc1xuICAvLyBhIG5vbi1kZWxlZ2F0ZWQgZXZlbnQuXG5cblxuICBpZiAodGFyZ2V0RWxlbWVudCAhPT0gbnVsbCAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJiBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBGb3IgYWxsIG5vbi1kZWxlZ2F0ZWQgZXZlbnRzLCBhcGFydCBmcm9tIHNjcm9sbCwgd2UgYXR0YWNoXG4gICAgLy8gdGhlaXIgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSByZXNwZWN0aXZlIGVsZW1lbnRzIHRoYXQgdGhlaXJcbiAgICAvLyBldmVudHMgZmlyZSBvbi4gVGhhdCBtZWFucyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGFzIGV2ZW50XG4gICAgLy8gbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCBwcmV2aW91c2x5LiBIb3dldmVyLCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSB0aGUgc2Nyb2xsIGV2ZW50IGJlY2F1c2UgdGhlIHJlYWxpdHkgaXMgdGhhdCBhbnlcbiAgICAvLyBlbGVtZW50IGNhbiBzY3JvbGwuXG4gICAgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbFxuICAgIC8vIGV2ZW50cyBmcm9tIHRoZSBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlXG4gICAgLy8gdGhpcyBzcGVjaWFsIGNhc2UgYW5kIHVzZSB0aGUgc2FtZSBsb2dpYyBmb3IgYWxsIGV2ZW50cy5cbiAgICBpZiAoZG9tRXZlbnROYW1lICE9PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfTk9OX0RFTEVHQVRFRDtcbiAgICB0YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZW50cnkgaXMgZW1wdHkgb3Igd2Ugc2hvdWxkIHVwZ3JhZGUsIHRoZW5cbiAgLy8gd2UgbmVlZCB0byB0cmFwIGFuIGV2ZW50IGxpc3RlbmVyIG9udG8gdGhlIHRhcmdldC5cblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICAgIH1cblxuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSAhPT0gbnVsbCA/IHJlYWN0TmFtZSArICdDYXB0dXJlJyA6IG51bGw7XG4gIHZhciByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlID8gY2FwdHVyZU5hbWUgOiByZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7XG4gIHZhciBsYXN0SG9zdENvbXBvbmVudCA9IG51bGw7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMi50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBzdGF0ZU5vZGU7IC8vIGNyZWF0ZUV2ZW50SGFuZGxlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChyZWFjdEV2ZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGxhc3RIb3N0Q29tcG9uZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGFyZSBvbmx5IGFjY3VtdWxhdGluZyBldmVudHMgZm9yIHRoZSB0YXJnZXQsIHRoZW4gd2UgZG9uJ3RcbiAgICAvLyBjb250aW51ZSB0byBwcm9wYWdhdGUgdGhyb3VnaCB0aGUgUmVhY3QgZmliZXIgdHJlZSB0byBmaW5kIG90aGVyXG4gICAgLy8gbGlzdGVuZXJzLlxuXG5cbiAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4vLyAtIENoYW5nZUV2ZW50UGx1Z2luXG4vLyAtIFNlbGVjdEV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoZXNlIHBsdWdpbnNcbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycyAodmlhIGVtdWxhdGlvbikuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArICdDYXB0dXJlJztcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UzID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UzLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggIT09IDApIHtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEVudGVyTGVhdmVFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGlzIHBsdWdpblxuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzLlxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZW50ZXJFdmVudCwgZnJvbSwgdG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dlc3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuXG4gIGlmIChmcm9tICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBmcm9tLCBjb21tb24sIGZhbHNlKTtcbiAgfVxuXG4gIGlmICh0byAhPT0gbnVsbCAmJiBlbnRlckV2ZW50ICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBlbnRlckV2ZW50LCB0bywgY29tbW9uLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBjYXB0dXJlKSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgKyBcIl9fXCIgKyAoY2FwdHVyZSA/ICdjYXB0dXJlJyA6ICdidWJibGUnKTtcbn1cblxudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xudmFyIFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyA9ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnO1xudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBIVE1MJDEgPSAnX19odG1sJztcbnZhciBIVE1MX05BTUVTUEFDRSQxID0gTmFtZXNwYWNlcy5odG1sO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZztcbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50O1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2U7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcztcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXI7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZztcbnZhciBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGU7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlOyAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cblxuICB2YXIgTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYID0gL1xcclxcbj8vZztcbiAgdmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobWFya3VwKSB7XG4gICAgdmFyIG1hcmt1cFN0cmluZyA9IHR5cGVvZiBtYXJrdXAgPT09ICdzdHJpbmcnID8gbWFya3VwIDogJycgKyBtYXJrdXA7XG4gICAgcmV0dXJuIG1hcmt1cFN0cmluZy5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgJ1xcbicpLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCAnJyk7XG4gIH07XG5cbiAgd2FybkZvclRleHREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCInLCBub3JtYWxpemVkU2VydmVyVGV4dCwgbm9ybWFsaXplZENsaWVudFRleHQpO1xuICB9O1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAgLy8gSnVzdCBzZXQgaXQgdXNpbmcgdGhlIG9uY2xpY2sgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1hbmFnZSBhbnlcbiAgLy8gYm9va2tlZXBpbmcgZm9yIGl0LiBOb3Qgc3VyZSBpZiB3ZSBuZWVkIHRvIGNsZWFyIGl0IHdoZW4gdGhlIGxpc3RlbmVyIGlzXG4gIC8vIHJlbW92ZWQuXG4gIC8vIFRPRE86IE9ubHkgZG8gdGhpcyBmb3IgdGhlIHJlbGV2YW50IFNhZmFyaXMgbWF5YmU/XG4gIG5vZGUub25jbGljayA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG5leHRQcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cblxuXG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEF2b2lkIHNldHRpbmcgaW5pdGlhbCB0ZXh0Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAvLyBzaG93IHdpdGhpbiB0aGUgPHRleHRhcmVhPiB1bnRpbCBpdCBoYXMgYmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xuICAgICAgICB2YXIgY2FuU2V0VGV4dENvbnRlbnQgPSB0YWcgIT09ICd0ZXh0YXJlYScgfHwgbmV4dFByb3AgIT09ICcnO1xuXG4gICAgICAgIGlmIChjYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wVmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQsIHBhcmVudE5hbWVzcGFjZSkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7IC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgdmFyIGRvbUVsZW1lbnQ7XG4gIHZhciBuYW1lc3BhY2VVUkkgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICB7XG4gICAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKTsgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuXG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBlcnJvcignPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAkRmxvd0lzc3VlIGBjcmVhdGVFbGVtZW50YCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgV2ViIENvbXBvbmVudHNcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSwge1xuICAgICAgICBpczogcHJvcHMuaXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXBhcmF0ZSBlbHNlIGJyYW5jaCBpbnN0ZWFkIG9mIHVzaW5nIGBwcm9wcy5pcyB8fCB1bmRlZmluZWRgIGFib3ZlIGJlY2F1c2Ugb2YgYSBGaXJlZm94IGJ1Zy5cbiAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vIE5vcm1hbGx5IGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIGluIGBzZXRJbml0aWFsRE9NUHJvcGVydGllc2AsIGhvd2V2ZXIgdGhlIGBtdWx0aXBsZWAgYW5kIGBzaXplYFxuICAgICAgLy8gYXR0cmlidXRlcyBvbiBgc2VsZWN0YHMgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGBvcHRpb25gcyBhcmUgaW5zZXJ0ZWQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzOlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgZG9lcyBub3Qgc2Nyb2xsIHRvIHRoZSBjb3JyZWN0IG9wdGlvbiBiZWNhdXNlIHNpbmd1bGFyXG4gICAgICAvLyAgYHNlbGVjdGAgZWxlbWVudHMgYXV0b21hdGljYWxseSBwaWNrIHRoZSBmaXJzdCBpdGVtICMxMzIyMlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHNlbGVjdGVkIGRlc3BpdGUgdGhlIGBzaXplYCBhdHRyaWJ1dGUgIzE0MjM5XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzIyMlxuICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQyMzlcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcblxuICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgICBub2RlLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDEgY2F1c2VzIGEgc2VsZWN0IHRvIGJlaGF2ZSBsaWtlIGBtdWx0aXBsZT10cnVlYCwgd2hlcmVcbiAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBhIHNlbGVjdCBpbiBcInNpbmdsZSBzZWxlY3Rpb24gbW9kZVwiLlxuICAgICAgICAgIG5vZGUuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdHlwZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG4gIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCBmYWxzZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxufSAvLyBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgdmFyIGxhc3RQcm9wcztcbiAgdmFyIG5leHRQcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnb2JqZWN0JyAmJiBuZXh0UHJvcCAhPT0gbnVsbCAmJiBuZXh0UHJvcC4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEUpIHtcbiAgICAgIC8vIElmIHdlIGVuY291bnRlciB1c2VPcGFxdWVSZWZlcmVuY2UncyBvcGFxdWUgb2JqZWN0LCB0aGlzIG1lYW5zIHdlIGFyZSBoeWRyYXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGNhbGwgdGhlIG9wYXF1ZSBvYmplY3QncyB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgYSBuZXcgY2xpZW50XG4gICAgICAvLyBJRCBzbyBjbGllbnQgYW5kIHNlcnZlciBJRHMgbWF0Y2ggYW5kIHRocm93cyB0byByZXJlbmRlci5cbiAgICAgIG5leHRQcm9wLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRV0pO1xuICAgIH1cblxuICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChTVFlMRSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufSAvLyBBcHBseSB0aGUgZGlmZi5cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzKSB7XG4gIC8vIFVwZGF0ZSBjaGVja2VkICpiZWZvcmUqIG5hbWUuXG4gIC8vIEluIHRoZSBtaWRkbGUgb2YgYW4gdXBkYXRlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNoZWNrZWQuXG4gIC8vIFdoZW4gYSBjaGVja2VkIHJhZGlvIHRyaWVzIHRvIGNoYW5nZSBuYW1lLCBicm93c2VyIG1ha2VzIGFub3RoZXIgcmFkaW8ncyBjaGVja2VkIGZhbHNlLlxuICBpZiAodGFnID09PSAnaW5wdXQnICYmIG5leHRSYXdQcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5leHRSYXdQcm9wcy5uYW1lICE9IG51bGwpIHtcbiAgICB1cGRhdGVDaGVja2VkKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgd2FzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBsYXN0UmF3UHJvcHMpO1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIG5leHRSYXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7IC8vIFRPRE86IEVuc3VyZSB0aGF0IGFuIHVwZGF0ZSBnZXRzIHNjaGVkdWxlZCBpZiBhbnkgb2YgdGhlIHNwZWNpYWwgcHJvcHNcbiAgLy8gY2hhbmdlZC5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdXBkYXRlV3JhcHBlciQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAvLyA8c2VsZWN0PiB2YWx1ZSB1cGRhdGUgbmVlZHMgdG8gb2NjdXIgYWZ0ZXIgPG9wdGlvbj4gY2hpbGRyZW5cbiAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICBwb3N0VXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCBwYXJlbnROYW1lc3BhY2UsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZztcbiAgdmFyIGV4dHJhQXR0cmlidXRlTmFtZXM7XG5cbiAge1xuICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIGFsbG93ZWRcbiAgICAgICAgY2FzZSAnZGF0YS1yZWFjdHJvb3QnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuYWRkKGF0dHJpYnV0ZXNbX2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gcmF3UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgY2hpbGRyZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRleHRDb250ZW50LiBUaGlzXG4gICAgICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gICAgICAvLyB0ZXh0Q29udGVudC4gRS5nLiBcImZvb1wiIHdpbGwgbWF0Y2ggXCJmPHNwYW4+b288L3NwYW4+XCIgYnV0IHRoYXQgc3RpbGxcbiAgICAgIC8vIHNhdGlzZmllcyBvdXIgcmVxdWlyZW1lbnQuIE91ciByZXF1aXJlbWVudCBpcyBub3QgdG8gcHJvZHVjZSBwZXJmZWN0XG4gICAgICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgICAgIC8vIG9rIG5vdCB0byBpZiB0aGUgdmlzaWJsZSBjb250ZW50IGlzIHN0aWxsIGVub3VnaCB0byBpbmRpY2F0ZSB3aGF0XG4gICAgICAvLyBldmVuIGxpc3RlbmVycyB0aGVzZSBub2RlcyBtaWdodCBiZSB3aXJlZCB1cCB0by5cbiAgICAgIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdXNlIGRvbUVsZW1lbnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgdG8gY29tcGFyZT9cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuXG4gICAgICBpZiAoc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyB8fCAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRIVE1MICE9PSBzZXJ2ZXJIVE1MKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcblxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbnVsbCAmJiBzdGFuZGFyZE5hbWUgIT09IHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYW4gU1ZHIHByb3AgaXMgc3VwcGxpZWQgd2l0aCBiYWQgY2FzaW5nLCBpdCB3aWxsXG4gICAgICAgICAgICAgIC8vIGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJvbSBIVE1MLCBidXQgd2lsbCBwcm9kdWNlIGEgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgLy8gKGFuZCB3b3VsZCBiZSBpbmNvcnJlY3RseSByZW5kZXJlZCBvbiB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSB3YXJuIGFib3V0IGJhZCBjYXNpbmcgZWxzZXdoZXJlLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBza2lwIHRoZSBtaXNsZWFkaW5nIGV4dHJhIG1pc21hdGNoIHdhcm5pbmcgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSB0cnVlOyAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3NwZWNpYWxcbiAgdmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG4gIHZhciBpblNjb3BlVGFncyA9IFsnYXBwbGV0JywgJ2NhcHRpb24nLCAnaHRtbCcsICd0YWJsZScsICd0ZCcsICd0aCcsICdtYXJxdWVlJywgJ29iamVjdCcsICd0ZW1wbGF0ZScsIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwtaW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhlcmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcblxuICB2YXIgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcbiAgICBmb3JtVGFnOiBudWxsLFxuICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxuICB9O1xuXG4gIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAob2xkSW5mbywgdGFnKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMTtcblxue1xuICBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xudmFyIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcblxuZnVuY3Rpb24gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwYXJlbnRIb3N0Q29udGV4dERldiA9IHBhcmVudEhvc3RDb250ZXh0O1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBpZiAoc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBuZXdQcm9wcykpIHtcbiAgICBkb21FbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gVXBkYXRlIHRoZSBwcm9wcyBoYW5kbGUgc28gdGhhdCB3ZSBrbm93IHdoaWNoIHByb3BzIGFyZSB0aGUgb25lcyB3aXRoXG4gIC8vIHdpdGggY3VycmVudCBldmVudCBoYW5kbGVycy5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBET00gbm9kZS5cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTtcblxuICBpZiAodHlwZW9mIHN0eWxlLnNldFByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5mdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlUHJvcCA9IHByb3BzW1NUWUxFJDFdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59XG5mdW5jdGlvbiBjbGVhckNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdmFyIGJvZHkgPSBjb250YWluZXIuYm9keTtcblxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgIT09IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGFuIGVsZW1lbnQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gIC8vIFNraXAgbm9uLWh5ZHJhdGFibGUgbm9kZXMuXG4gIGZvciAoOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcblxuICAgIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBwYXJlbnROYW1lc3BhY2UpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTtcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gIH0gLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuXG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIFJldHVybnMgdGhlIFN1c3BlbnNlSW5zdGFuY2UgaWYgdGhpcyBub2RlIGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFcbi8vIFN1c3BlbnNlSW5zdGFuY2UuIEkuZS4gaWYgaXRzIHByZXZpb3VzIHNpYmxpbmcgaXMgYSBDb21tZW50IHdpdGhcbi8vIFNVU1BFTlNFX3hfU1RBUlRfREFUQS4gT3RoZXJ3aXNlLCBudWxsLlxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkgO1xufVxudmFyIGNsaWVudElkID0gMDtcbmZ1bmN0aW9uIG1ha2VDbGllbnRJZEluREVWKHdhcm5PbkFjY2Vzc0luREVWKSB7XG4gIHZhciBpZCA9ICdyOicgKyAoY2xpZW50SWQrKykudG9TdHJpbmcoMzYpO1xuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0sXG4gICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBpc09wYXF1ZUh5ZHJhdGluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEU7XG59XG5mdW5jdGlvbiBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGF0dGVtcHRUb1JlYWRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9PUEFRVUVfSURfVFlQRSxcbiAgICB0b1N0cmluZzogYXR0ZW1wdFRvUmVhZFZhbHVlLFxuICAgIHZhbHVlT2Y6IGF0dGVtcHRUb1JlYWRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIHtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG4gIH1cbn1cblxudmFyIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEZpYmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxQcm9wc0tleSA9ICdfX3JlYWN0UHJvcHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gJ19fcmVhY3RDb250YWluZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSAnX19yZWFjdEV2ZW50cyQnICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZpYmVyUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgbm9kZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRMaXN0ZW5lclNldChub2RlKSB7XG4gIHZhciBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG5cbiAgaWYgKGVsZW1lbnRMaXN0ZW5lclNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID0gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRMaXN0ZW5lclNldDtcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgaWYgKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4XSkge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gbnVsbDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBudWxsO1xuICB9XG5cbiAgaW5kZXgtLTtcbn1cblxuZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICBpbmRleCsrO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IGN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIEJsb2NraW5nUm9vdCA9IDE7XG52YXIgQ29uY3VycmVudFJvb3QgPSAyO1xuXG52YXIgcmVuZGVyZXJJRCA9IG51bGw7XG52YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xudmFyIGlzRGV2VG9vbHNQcmVzZW50ID0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gIGlmICh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIERldlRvb2xzXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgIHtcbiAgICAgIGVycm9yKCdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnKTtcbiAgICB9IC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSAocm9vdC5jdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IERpZENhcHR1cmU7XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgdW5kZWZpbmVkLCBkaWRFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgIFNjaGVkdWxlcl9ub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Mb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTtcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5JDEgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IDk3O1xudmFyIExvd1ByaW9yaXR5JDEgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkkMSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5JDEgPSA5MDtcbnZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlcl9zaG91bGRZaWVsZDtcbnZhciByZXF1ZXN0UGFpbnQgPSAvLyBGYWxsIGJhY2sgZ3JhY2VmdWxseSBpZiB3ZSdyZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgU2NoZWR1bGVyLlxuU2NoZWR1bGVyX3JlcXVlc3RQYWludCAhPT0gdW5kZWZpbmVkID8gU2NoZWR1bGVyX3JlcXVlc3RQYWludCA6IGZ1bmN0aW9uICgpIHt9O1xudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xudmFyIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbnZhciBpbml0aWFsVGltZU1zJDEgPSBTY2hlZHVsZXJfbm93JDEoKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cbi8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgbW9kZXJuIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgcGVyZm9ybWFuY2Uubm93YC4gSW5cbi8vIG9sZGVyIGJyb3dzZXJzLCBTY2hlZHVsZXIgZmFsbHMgYmFjayB0byBgRGF0ZS5ub3dgLCB3aGljaCByZXR1cm5zIGEgVW5peFxuLy8gdGltZXN0YW1wLiBJbiB0aGF0IGNhc2UsIHN1YnRyYWN0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB0byBzaW11bGF0ZVxuLy8gdGhlIGJlaGF2aW9yIG9mIHBlcmZvcm1hbmNlLm5vdyBhbmQga2VlcCBvdXIgdGltZXMgc21hbGwgZW5vdWdoIHRvIGZpdFxuLy8gd2l0aGluIDMyIGJpdHMuXG4vLyBUT0RPOiBDb25zaWRlciBsaWZ0aW5nIHRoaXMgaW50byBTY2hlZHVsZXIuXG5cbnZhciBub3cgPSBpbml0aWFsVGltZU1zJDEgPCAxMDAwMCA/IFNjaGVkdWxlcl9ub3ckMSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3ckMSgpIC0gaW5pdGlhbFRpbWVNcyQxO1xufTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICBzd2l0Y2ggKFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgY2FzZSBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gTG93UHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0lkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHkkMTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTG93UHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMShyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfaXNTeW5jMiA9IHRydWU7XG4gICAgICAgIHZhciBfcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICAgIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gX3F1ZXVlW2ldO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soX2lzU3luYzIpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN5bmNRdWV1ZSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIGlmIChzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBzeW5jUXVldWUgPSBzeW5jUXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWUpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG52YXIgRGVidWdUcmFjaW5nTW9kZSA9IDE2O1xuXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSAwO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmlyc3RGaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dCcsIHNvcnRlZE5hbWVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgbmV4dFZhbHVlKSB7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgIGlmICgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpICE9PSBjaGFuZ2VkQml0cykge1xuICAgICAgICBlcnJvcignY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBhbHRlcm5hdGUgd2FzIHVwZGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gYW5jZXN0b3IgcGF0aCBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dEZpYmVyID0gdm9pZCAwOyAvLyBWaXNpdCB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuXG4gICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtYXRjaGVzLlxuICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0ICYmIChkZXBlbmRlbmN5Lm9ic2VydmVkQml0cyAmIGNoYW5nZWRCaXRzKSAhPT0gMCkge1xuICAgICAgICAgIC8vIE1hdGNoISBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhpcyBmaWJlci5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcykpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgIGlmIChpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKSB7XG4gICAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgOyBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgOyBlbHNlIHtcbiAgICB2YXIgcmVzb2x2ZWRPYnNlcnZlZEJpdHM7IC8vIEF2b2lkIGRlb3B0aW5nIG9uIG9ic2VydmFibGUgYXJndW1lbnRzIG9yIGhldGVyb2dlbmVvdXMgdHlwZXMuXG5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpIHtcbiAgICAgIC8vIE9ic2VydmUgYWxsIHVwZGF0ZXMuXG4gICAgICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBjb250ZXh0O1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBvYnNlcnZlZEJpdHM6IHJlc29sdmVkT2JzZXJ2ZWRCaXRzLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbSxcbiAgICAgICAgcmVzcG9uZGVyczogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xufVxuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBzaGFyZWQ6IHtcbiAgICAgIHBlbmRpbmc6IG51bGxcbiAgICB9LFxuICAgIGVmZmVjdHM6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgfTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXZlbnRUaW1lOiBldmVudFRpbWUsXG4gICAgbGFuZTogbGFuZSxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAvLyBDYXB0dXJlZCB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgYXJlIHRocm93biBieSBhIGNoaWxkIGR1cmluZyB0aGUgcmVuZGVyXG4gIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gIC8vIHdlIHNob3VsZCBvbmx5IHB1dCB0aGVtIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBub3QgdGhlIGN1cnJlbnQgb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTsgLy8gQ2hlY2sgaWYgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgYSBjbG9uZS5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgIC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuXG4gICAgICAvLyB3ZSBiYWlsIG91dCBvbiBhIHBhcmVudCBmaWJlciB0aGF0IHRoZW4gY2FwdHVyZXMgYW4gZXJyb3IgdGhyb3duIGJ5XG4gICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgIC8vIC1wcm9ncmVzcyBxdWV1ZSwgd2UgbmVlZCB0byBjbG9uZSB0aGUgdXBkYXRlcy4gV2UgdXN1YWxseSBjbG9uZSBkdXJpbmdcbiAgICAgIC8vIHByb2Nlc3NVcGRhdGVRdWV1ZSwgYnV0IHRoYXQgZGlkbid0IGhhcHBlbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZVxuICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbDtcbiAgICAgIHZhciBuZXdMYXN0ID0gbnVsbDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB1cGRhdGVzIGFuZCBjbG9uZSB0aGVtLlxuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZS5ldmVudFRpbWUsXG4gICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMsIGluc3RhbmNlKSB7XG4gIHN3aXRjaCAodXBkYXRlLnRhZykge1xuICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgfVxuICAgIC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZTtcblxuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBwcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgfVxuXG4gIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlOyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyB1cGRhdGVzLiBJZiBzbywgdHJhbnNmZXIgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDsgLy8gVGhlIHBlbmRpbmcgcXVldWUgaXMgY2lyY3VsYXIuIERpc2Nvbm5lY3QgdGhlIHBvaW50ZXIgYmV0d2VlbiBmaXJzdFxuICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfVxuXG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgLy8gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgdXBkYXRlcyB0byB0aGF0IHF1ZXVlLCB0b28uIEJlY2F1c2UgdGhlIGJhc2VcbiAgICAvLyBxdWV1ZSBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB3aXRoIG5vIGN5Y2xlcywgd2UgY2FuIGFwcGVuZCB0byBib3RoXG4gICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudFxuXG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlICE9PSBsYXN0QmFzZVVwZGF0ZSkge1xuICAgICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZSByZW5kZXJMYW5lc1xuICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgdmFyIG5ld0xhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgbmV3TGFzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuICAgICAgdmFyIHVwZGF0ZUV2ZW50VGltZSA9IHVwZGF0ZS5ldmVudFRpbWU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2sgKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UpIHtcbiAgLy8gQ29tbWl0IHRoZSBlZmZlY3RzXG4gIHZhciBlZmZlY3RzID0gZmluaXNoZWRRdWV1ZS5lZmZlY3RzO1xuICBmaW5pc2hlZFF1ZXVlLmVmZmVjdHMgPSBudWxsO1xuXG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWZmZWN0ID0gZWZmZWN0c1tpXTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGVmZmVjdC5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsgLy8gUmVhY3QuQ29tcG9uZW50IHVzZXMgYSBzaGFyZWQgZnJvemVuIG9iamVjdCBieSBkZWZhdWx0LlxuLy8gV2UnbGwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBsZWdhY3kgcmVmcy5cblxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xudmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xudmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2s7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG5cbiAgICBpZiAoIWRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSkge1xuICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gZnVuY3Rpb24gKHR5cGUsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiAnICsgJ1lvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QgKGFuZCBpZGVhbGx5LCBzd2l0Y2ggdG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gICAgaWYgKF9zdGF0ZSAmJiAodHlwZW9mIF9zdGF0ZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShfc3RhdGUpKSkge1xuICAgICAgZXJyb3IoJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICBzZXQoaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKTtcblxuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGZhbHNlO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICB7XG4gICAgaWYgKCdjb250ZXh0VHlwZScgaW4gY3Rvcikge1xuICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcbiAgICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSAvLyBJbnN0YW50aWF0ZSB0d2ljZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG5cblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGVycm9yKCdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcycsIF9jb21wb25lbnROYW1lLCBuZXdBcGlOYW1lLCBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxNb3VudE5hbWUgOiAnJywgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuXG5cbiAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0gZW1wdHlSZWZzT2JqZWN0O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPT09IG5ld1Byb3BzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufSAvLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPyB1bnJlc29sdmVkT2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciB1bnJlc29sdmVkTmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gdW5yZXNvbHZlZE5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgPT09IHVucmVzb2x2ZWROZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSQxID0gQXJyYXkuaXNBcnJheTtcblxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHZhciBtaXhlZFJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIGlmIChtaXhlZFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgb25jZSB3ZSB0dXJuIG9uIHRoZSBzdHJpbmcgcmVmIHdhcm5pbmcgZm9yXG4gICAgICAvLyBldmVyeW9uZSwgYmVjYXVzZSB0aGUgc3RyaWN0IG1vZGUgY2FzZSB3aWxsIG5vIGxvbmdlciBiZSByZWxldmFudFxuICAgICAgaWYgKChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSAmJiAvLyBXZSB3YXJuIGluIFJlYWN0RWxlbWVudC5qcyBpZiBvd25lciBhbmQgc2VsZiBhcmUgZXF1YWwgZm9yIHN0cmluZyByZWZzXG4gICAgICAvLyBiZWNhdXNlIHRoZXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvblxuICAgICAgLy8gdXNpbmcgYSBjb2RlbW9kLiBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd2FybiBhYm91dCBzdHJpbmcgcmVmcyBhZ2Fpbi5cbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fc2VsZiAmJiBlbGVtZW50Ll9vd25lci5zdGF0ZU5vZGUgIT09IGVsZW1lbnQuX3NlbGYpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmICghKG93bmVyRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IGluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgcmVmc1tzdHJpbmdSZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiByZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHR5cGVvZiBtaXhlZFJlZiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5fb3duZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICsgbWl4ZWRSZWYgKyBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4ZWRSZWY7XG59XG5cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgaWYgKHJldHVybkZpYmVyLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogbmV3Q2hpbGQpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbiAgfVxufSAvLyBXZSBhdm9pZCBpbmxpbmluZyB0aGlzIHRvIGF2b2lkIHBvdGVudGlhbCBkZW9wdHMgZnJvbSB1c2luZyB0cnkvY2F0Y2guXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVsZXRpb25zIGFyZSBhZGRlZCBpbiByZXZlcnNlZCBvcmRlciBzbyB3ZSBhZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByZXR1cm4gZmliZXIncyBlZmZlY3QgbGlzdCBpcyBlbXB0eSBleGNlcHQgZm9yXG4gICAgLy8gZGVsZXRpb25zLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdGhlIGRlbGV0aW9uIHRvIHRoZSBsaXN0LiBUaGUgcmVtYWluaW5nXG4gICAgLy8gZWZmZWN0cyBhcmVuJ3QgYWRkZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBPbmNlIHdlIGltcGxlbWVudFxuICAgIC8vIHJlc3VtaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9XG5cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSApKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGZpYmVyIGlmIHRoZSBrZXlzIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIGtleSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKG5ld0NoaWxkcmVuICE9IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZykge1xuICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGZhbGx0aHJvdWdoIGhlcmUgaWYgZW5hYmxlQmxvY2tzQVBJIGlzIG5vdCBvbi5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGNoaWxkLCBlbGVtZW50KSApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leGlzdGluZzMgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nMztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIERpZG4ndCBtYXRjaC5cblxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGVsZW1lbnQua2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiYgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfSAvLyBUaGlzIEFQSSB3aWxsIHRhZyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIHJlY29uY2lsaWF0aW9uXG4gIC8vIGl0c2VsZi4gVGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCBsaXN0IGFzIHdlIHBhc3MgdGhyb3VnaCB0aGVcbiAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsO1xuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBsYW5lcykpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIEludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UsIHdoaWNoIGhhbmRsZXMgYm90aFxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIGNsYXNzZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgQmxvY2s6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuZnVuY3Rpb24gY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoIShjdXJyZW50ID09PSBudWxsIHx8IHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBjdXJyZW50LmNoaWxkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmICghKGMgIT09IE5PX0NPTlRFWFQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGFpbmVyKCkge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICByZXR1cm4gcm9vdEluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAvLyBQdXNoIGN1cnJlbnQgcm9vdCBpbnN0YW5jZSBvbnRvIHRoZSBzdGFjaztcbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgcm9vdCB3aGVuIHBvcnRhbHMgYXJlIHBvcHBlZC5cbiAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpOyAvLyBGaW5hbGx5LCB3ZSBuZWVkIHRvIHB1c2ggdGhlIGhvc3QgY29udGV4dCB0byB0aGUgc3RhY2suXG4gIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gIC8vIHdlJ2QgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyBvbiB0aGUgc3RhY2sgZGVwZW5kaW5nIG9uXG4gIC8vIHdoZXRoZXIgZ2V0Um9vdEhvc3RDb250ZXh0KCkgdGhyb3dzIHNvbWV3aGVyZSBpbiByZW5kZXJlciBjb2RlIG9yIG5vdC5cbiAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTsgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dChjb250ZXh0LCBmaWJlci50eXBlKTsgLy8gRG9uJ3QgcHVzaCB0aGlzIEZpYmVyJ3MgY29udGV4dCB1bmxlc3MgaXQncyB1bmlxdWUuXG5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgaWYgKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGZpYmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG52YXIgRGVmYXVsdFN1c3BlbnNlQ29udGV4dCA9IDA7IC8vIFRoZSBTdXNwZW5zZSBDb250ZXh0IGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLiBUaGUgbG93ZXIgYml0cyBpc1xuLy8gaW5oZXJpdGVkIGRlZXBseSBkb3duIHRoZSBzdWJ0cmVlLiBUaGUgdXBwZXIgYml0cyBvbmx5IGFmZmVjdFxuLy8gdGhpcyBpbW1lZGlhdGUgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGdldHMgcmVzZXQgZWFjaCBuZXdcbi8vIGJvdW5kYXJ5IG9yIHN1c3BlbnNlIGxpc3QuXG5cbnZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIFN1YnRyZWUgRmxhZ3M6XG4vLyBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIG91ciBwYXJlbnQgU3VzcGVuc2Vcbi8vIGJvdW5kYXJpZXMgaXMgbm90IGN1cnJlbnRseSBzaG93aW5nIHZpc2libGUgbWFpbiBjb250ZW50LlxuLy8gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgb3IgaXMgbm90IG1vdW50ZWQgYXQgYWxsLlxuLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBkZXNpcmFibGUgdG8gdHJpZ2dlciBhIGZhbGxiYWNrIGF0XG4vLyB0aGUgcGFyZW50LiBJZiBub3QsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0cmlnZ2VyIHVuZGVzaXJhYmxlIGJvdW5kYXJpZXNcbi8vIGFuZC9vciBzdXNwZW5kIHRoZSBjb21taXQgdG8gYXZvaWQgaGlkaW5nIHRoZSBwYXJlbnQgY29udGVudC5cblxudmFyIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCA9IDE7IC8vIFNoYWxsb3cgRmxhZ3M6XG4vLyBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgY2FuIGJlIHVzZWQgYnkgU3VzcGVuc2VMaXN0IHRvIGZvcmNlIG5ld2x5IGFkZGVkXG4vLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbnZhciBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyO1xudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoRGVmYXVsdFN1c3BlbnNlQ29udGV4dCk7XG5mdW5jdGlvbiBoYXNTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgZmxhZykge1xuICByZXR1cm4gKHBhcmVudENvbnRleHQgJiBmbGFnKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayB8IHNoYWxsb3dDb250ZXh0O1xufVxuZnVuY3Rpb24gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzdWJ0cmVlQ29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCB8IHN1YnRyZWVDb250ZXh0O1xufVxuZnVuY3Rpb24gcHVzaFN1c3BlbnNlQ29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld0NvbnRleHQsIGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlQ29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uod29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAvLyBJZiBpdCB3YXMgdGhlIHByaW1hcnkgY2hpbGRyZW4gdGhhdCBqdXN0IHN1c3BlbmRlZCwgY2FwdHVyZSBhbmQgcmVuZGVyIHRoZVxuICAvLyBmYWxsYmFjay4gT3RoZXJ3aXNlLCBkb24ndCBjYXB0dXJlIGFuZCBidWJibGUgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbHdheXMgY2FwdHVyZXMuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzOyAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG5cbiAgaWYgKHByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG5cbiAgaWYgKHByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaXQncyBhIGJvdW5kYXJ5IHdlIHNob3VsZCBhdm9pZCwgdGhlbiB3ZSBwcmVmZXIgdG8gYnViYmxlIHVwIHRvIHRoZVxuICAvLyBwYXJlbnQgYm91bmRhcnkgaWYgaXQgaXMgY3VycmVudGx5IGludmlzaWJsZS5cblxuXG4gIGlmIChoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIHBhcmVudCBpcyBub3QgYWJsZSB0byBoYW5kbGUgaXQsIHdlIG11c3QgaGFuZGxlIGl0LlxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgKi9cbjA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbnZhciBIYXNFZmZlY3QgPVxuLyogKi9cbjE7IC8vIFJlcHJlc2VudHMgdGhlIHBoYXNlIGluIHdoaWNoIHRoZSBlZmZlY3QgKG5vdCB0aGUgY2xlYW4tdXApIGZpcmVzLlxuXG52YXIgTGF5b3V0ID1cbi8qICAgICovXG4yO1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG40O1xuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVudGVySHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uOyAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG5cbiAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAgZmliZXIuZmxhZ3MgPSBmaWJlci5mbGFncyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcblxuICAgICAgICBpZiAodGV4dEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gdGV4dEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICBpZiAoIW5leHRJbnN0YW5jZSkge1xuICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcblxuICBpZiAoIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAvLyBJZiB3ZSBjYW4ndCBoeWRyYXRlIHRoaXMgaW5zdGFuY2UgbGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYy4gSXQncyBiYXNlZCBvbiBpbnR1aXRpb24gYW5kIG5vdCBkYXRhIHNvIGl0XG4gICAgLy8gbWlnaHQgYmUgZmxhd2VkIG9yIHVubmVjZXNzYXJ5LlxuICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKG5leHRJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcblxuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlcik7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLlxuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHRleHRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHRleHRDb250ZW50ID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7IC8vIElmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBoeWRyYXRhYmxlIG5vZGVzLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGVtIG5vdy5cbiAgLy8gV2Ugb25seSBkbyB0aGlzIGRlZXBlciB0aGFuIGhlYWQgYW5kIGJvZHkgc2luY2UgdGhleSB0ZW5kIHRvIGhhdmUgcmFuZG9tXG4gIC8vIG90aGVyIG5vZGVzIGluIHRoZW0uIFdlIGFsc28gaWdub3JlIGNvbXBvbmVudHMgd2l0aCBwdXJlIHRleHQgY29udGVudCBpblxuICAvLyBzaWRlIG9mIHRoZW0uXG4gIC8vIFRPRE86IEJldHRlciBoZXVyaXN0aWMuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpO1xuICAgICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5leHRJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID8gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpYmVyLnN0YXRlTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuLy8gYW5kIHNob3VsZCBiZSByZXNldCBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgcmVuZGVyLlxuLy8gVGhpcyB0cmFja3Mgd2hpY2ggbXV0YWJsZSBzb3VyY2VzIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMgPSBbXTtcbnZhciByZW5kZXJlclNpZ2lsJDE7XG5cbntcbiAgLy8gVXNlZCB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIG11dGFibGUgc291cmNlLlxuICByZW5kZXJlclNpZ2lsJDEgPSB7fTtcbn1cblxuZnVuY3Rpb24gbWFya1NvdXJjZUFzRGlydHkobXV0YWJsZVNvdXJjZSkge1xuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IHdvcmtJblByb2dyZXNzU291cmNlc1tpXTtcblxuICAgIHtcbiAgICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGggPSAwO1xufVxuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHJldHVybiBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O1xuICB9XG59XG5mdW5jdGlvbiBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbikge1xuICB7XG4gICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IHZlcnNpb247XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHtcbiAgICAgIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgbXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWwkMTtcbiAgICAgIH0gZWxzZSBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCQxKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIG11dGFibGUgc291cmNlLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRWFnZXIgcmVhZHMgdGhlIHZlcnNpb24gb2YgYSBtdXRhYmxlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IG9uIHRoZSByb290LlxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXI7XG5cbntcbiAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllciA9IHt9O1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG52YXIgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsOyAvLyBJbiBERVYsIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgaG9va3MgYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlciBiZXR3ZWVuIHJlbmRlcnMuXG4vLyBUaGUgbGlzdCBzdG9yZXMgdGhlIG9yZGVyIG9mIGhvb2tzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlciAobW91bnQpLlxuLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG52YXIgaG9va1R5cGVzRGV2ID0gbnVsbDtcbnZhciBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBJbiBERVYsIHRoaXMgdHJhY2tzIHdoZXRoZXIgY3VycmVudGx5IHJlbmRlcmluZyBjb21wb25lbnQgbmVlZHMgdG8gaWdub3JlXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4vLyBXaGVuIHRydWUsIHN1Y2ggSG9va3Mgd2lsbCBhbHdheXMgYmUgXCJyZW1vdW50ZWRcIi4gT25seSB1c2VkIGR1cmluZyBob3QgcmVsb2FkLlxuXG52YXIgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldisrO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgd2Fybk9uSG9va01pc21hdGNoSW5EZXYoaG9va05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gIHtcbiAgICBpZiAoZGVwcyAhPT0gdW5kZWZpbmVkICYmIGRlcHMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoZWlyIHR5cGUgd291bGQgY2hhbmdlIGFzIHVzdWFsbHkgeW91IGRlZmluZSB0aGVtIGlubGluZS5cbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuICcgKyAnVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG1lbW9pemVkU3RhdGUgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG1lbW9pemVkU3RhdGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgIH0gZWxzZSBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgaGFuZGxlcyBhbiBlZGdlIGNhc2Ugd2hlcmUgYSBjb21wb25lbnQgaXMgdXBkYXRpbmcsXG4gICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBwcm9kdWN0aW9uIGNvZGUgYmVoYXZpb3IgKHdoaWNoIHdpbGwgdXNlIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpLFxuICAgICAgLy8gYnV0IHdpdGggdGhlIGV4dHJhIERFViB2YWxpZGF0aW9uIHRvIGVuc3VyZSBob29rcyBvcmRlcmluZyBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTsgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZVxuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICAgZG8ge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG5cbiAgICAgIGlmICghKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIDtcbiAgICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9IC8vIFRoaXMgY2hlY2sgdXNlcyBjdXJyZW50SG9vayBzbyB0aGF0IGl0IHdvcmtzIHRoZSBzYW1lIGluIERFViBhbmQgcHJvZCBidW5kbGVzLlxuICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcblxuICBpZiAoISFkaWRSZW5kZXJUb29GZXdIb29rcykge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcbiAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NBZnRlclRocm93KCkge1xuICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaG9vayA9IGhvb2submV4dDtcbiAgICB9XG5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gIH1cblxuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIH1cblxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICBpZiAoIShuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50ID0gY3VycmVudEhvb2s7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVF1ZXVlID0gY3VycmVudC5iYXNlUXVldWU7IC8vIFRoZSBsYXN0IHBlbmRpbmcgdXBkYXRlIHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBuZXcgdXBkYXRlcyB0aGF0IGhhdmVuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuICAgIC8vIFdlJ2xsIGFkZCB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgIC8vIE1lcmdlIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgYmFzZSBxdWV1ZS5cbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ0ZpcnN0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUgaWYgd2UgaW1wbGVtZW50IHJlc3VtaW5nLCBvciBzb21lIGZvcm0gb2YgdGhhdC5cbiAgICAgICAgZXJyb3IoJ0ludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgcXVldWUgdG8gcHJvY2Vzcy5cbiAgICB2YXIgZmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3U3RhdGUgPSBjdXJyZW50LmJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZS5lYWdlclJlZHVjZXIgPT09IHJlZHVjZXIpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksIGFuZCBpdHMgcmVkdWNlciBtYXRjaGVzIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgcmVkdWNlciwgd2UgY2FuIHVzZSB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZS5cbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gIC8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobGFzdFJlbmRlclBoYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIFByb2Nlc3MgdGhpcyByZW5kZXIgcGhhc2UgdXBkYXRlLiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSk7IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLCBidXQgaXQncyB3aGF0IHdlXG4gICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KSB7XG4gIHtcbiAgICB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7IC8vIElzIGl0IHNhZmUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyP1xuXG4gIHZhciBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gZmFsc2U7IC8vIENoZWNrIHRoZSB2ZXJzaW9uIGZpcnN0LlxuICAvLyBJZiB0aGlzIHJlbmRlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgd2l0aCBhIHNwZWNpZmljIHZlcnNpb24sXG4gIC8vIHdlIGNhbiB1c2UgaXQgYWxvbmUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBzb3VyY2UuXG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJWZXJzaW9uID0gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSk7XG5cbiAgaWYgKGN1cnJlbnRSZW5kZXJWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgLy8gSXQncyBzYWZlIHRvIHJlYWQgaWYgdGhlIHN0b3JlIGhhc24ndCBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgIC8vIHdlIHJlYWQgc29tZXRoaW5nLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBjdXJyZW50UmVuZGVyVmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHZlcnNpb24sIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSByZWFkIGZyb20gdGhlXG4gICAgLy8gc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcywgc28gd2UgbmVlZCB0byBkbyBhIGJpdCBtb3JlIHdvcmsuXG4gICAgLy8gV2hhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpcyBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIHRoYXQgYWxyZWFkeVxuICAgIC8vIHN1YnNjcmliZWQgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcGVuZGluZ1xuICAgIC8vIG11dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgeWV0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgbXV0YXRpb25zLCB0aGVuIGByb290Lm11dGFibGVSZWFkTGFuZXNgIHdpbGwgYmVcbiAgICAvLyBlbXB0eSwgYW5kIHdlIGtub3cgd2UgY2FuIHNhZmVseSByZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgKmFyZSogcGVuZGluZyBtdXRhdGlvbnMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHNhZmVseSByZWFkXG4gICAgLy8gaWYgdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgbGFuZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGUgcGVuZGluZyBtdXRhdGlvblxuICAgIC8vIGxhbmVzLCBzaW5jZSB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgdmFsdWUgd2UncmUgYWJvdXQgdG8gcmVhZCBmcm9tXG4gICAgLy8gdGhlIHNvdXJjZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZHVyaW5nIHRoZSBtb3N0XG4gICAgLy8gcmVjZW50IG11dGF0aW9uLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG5cbiAgICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgICAgLy8gSWYgaXQncyBzYWZlIHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgLy8gc3RvcmUgdGhlIHZlcnNpb24gaW4gY2FzZSBvdGhlciBjb21wb25lbnRzIHJlYWQgZnJvbSBpdC5cbiAgICAgIC8vIEEgY2hhbmdlZCB2ZXJzaW9uIG51bWJlciB3aWxsIGxldCB0aG9zZSBjb21wb25lbnRzIGtub3cgdG8gdGhyb3cgYW5kIHJlc3RhcnQgdGhlIHJlbmRlci5cbiAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UsIHZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgdmFyIHNuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBzbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG11dGFibGUgc291cmNlIGJlaW5nIHNoYXJlZCBiZXR3ZWVuIHJlbmRlcmVycy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIGlmIHRoZSBzb3VyY2UgaXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJlbmRlcmVyLFxuICAgIC8vIFRoZSBzZWNvbmQgcmVuZGVyZXIgZG9uJ3Qga25vdyB0aGF0IGl0IG5lZWRzIHRvIHJlc2V0IHRoZSBXSVAgdmVyc2lvbiBkdXJpbmcgdW53aW5kLFxuICAgIC8vIChiZWNhdXNlIHRoZSBob29rIG9ubHkgbWFya3Mgc291cmNlcyBhcyBkaXJ0eSBpZiBpdCdzIHdyaXR0ZW4gdG8gdGhlaXIgV0lQIHZlcnNpb24pLlxuICAgIC8vIFRoYXQgd291bGQgY2F1c2UgdGhpcyB0ZWFyIGNoZWNrIHRvIHRocm93IGFnYWluIGFuZCBldmVudHVhbGx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2UgY2FuIGF2b2lkIHRoaXMgaW5maW5pdGUgbG9vcCBieSBleHBsaWNpdGx5IG1hcmtpbmcgdGhlIHNvdXJjZSBhcyBkaXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gdGVhcmluZyBpbiB0aGUgZmlyc3QgcmVuZGVyZXIgd2hlbiBpdCByZXN1bWVzLFxuICAgIC8vIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoYXQgKHNob3J0IG9mIHRocm93aW5nIGhlcmUgYW5kIHJlZnVzaW5nIHRvIGNvbnRpbnVlIHRoZSByZW5kZXIpLlxuICAgIG1hcmtTb3VyY2VBc0RpcnR5KHNvdXJjZSk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCByZWFkIGZyb20gbXV0YWJsZSBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHRlYXJpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgaWYgKCEocm9vdCAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG4gIHZhciBfZGlzcGF0Y2hlciR1c2VTdGF0ZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgfSksXG4gICAgICBjdXJyZW50U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVswXSxcbiAgICAgIHNldFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90OyAvLyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBzdGF0ZSBob29rIGFzIHdlbGwuXG4gIC8vIFdlIHVzZSBpdCB0byBjbGVhciB0aGUgcGVuZGluZyB1cGRhdGUgcXVldWUgaWYgd2UgaGF2ZSBhIG5ldyBzb3VyY2UuXG5cbiAgdmFyIHN0YXRlSG9vayA9IHdvcmtJblByb2dyZXNzSG9vaztcbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciByZWZzID0gbWVtb2l6ZWRTdGF0ZS5yZWZzO1xuICB2YXIgcHJldkdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZTb3VyY2UgPSBtZW1vaXplZFN0YXRlLnNvdXJjZTtcbiAgdmFyIHByZXZTdWJzY3JpYmUgPSBtZW1vaXplZFN0YXRlLnN1YnNjcmliZTtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHJlZnMsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTsgLy8gU3luYyB0aGUgdmFsdWVzIG5lZWRlZCBieSBvdXIgc3Vic2NyaXB0aW9uIGhhbmRsZXIgYWZ0ZXIgZWFjaCBjb21taXQuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnMuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gTm9ybWFsbHkgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBhIHN0YXRlIGhvb2sgbmV2ZXIgY2hhbmdlcyxcbiAgICAvLyBidXQgdGhpcyBob29rIHJlY3JlYXRlcyB0aGUgcXVldWUgaW4gY2VydGFpbiBjYXNlcyAgdG8gYXZvaWQgdXBkYXRlcyBmcm9tIHN0YWxlIHNvdXJjZXMuXG4gICAgLy8gaGFuZGxlQ2hhbmdlKCkgYmVsb3cgbmVlZHMgdG8gcmVmZXJlbmNlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiB3aXRob3V0IHJlLXN1YnNjcmliaW5nLFxuICAgIC8vIHNvIHdlIHVzZSBhIHJlZiB0byBlbnN1cmUgdGhhdCBpdCBhbHdheXMgaGFzIHRoZSBsYXRlc3QgdmVyc2lvbi5cblxuICAgIHJlZnMuc2V0U25hcHNob3QgPSBzZXRTbmFwc2hvdDsgLy8gQ2hlY2sgZm9yIGEgcG9zc2libGUgY2hhbmdlIGJldHdlZW4gd2hlbiB3ZSBsYXN0IHJlbmRlcmVkIG5vdy5cblxuICAgIHZhciBtYXliZU5ld1ZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcblxuICAgIGlmICghb2JqZWN0SXModmVyc2lvbiwgbWF5YmVOZXdWZXJzaW9uKSkge1xuICAgICAgdmFyIG1heWJlTmV3U25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5ld1NuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdElzKHNuYXBzaG90LCBtYXliZU5ld1NuYXBzaG90KSkge1xuICAgICAgICBzZXRTbmFwc2hvdChtYXliZU5ld1NuYXBzaG90KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IC8vIElmIHRoZSBzb3VyY2UgbXV0YXRlZCBiZXR3ZWVuIHJlbmRlciBhbmQgbm93LFxuICAgICAgLy8gdGhlcmUgbWF5IGJlIHN0YXRlIHVwZGF0ZXMgYWxyZWFkeSBzY2hlZHVsZWQgZnJvbSB0aGUgb2xkIHNvdXJjZS5cbiAgICAgIC8vIEVudGFuZ2xlIHRoZSB1cGRhdGVzIHNvIHRoYXQgdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guXG5cblxuICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcbiAgICB9XG4gIH0sIFtnZXRTbmFwc2hvdCwgc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgd2UgZ290IGEgbmV3IHNvdXJjZSBvciBzdWJzY3JpYmUgZnVuY3Rpb24sIHJlLXN1YnNjcmliZSBpbiBhIHBhc3NpdmUgZWZmZWN0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBsYXRlc3RTZXRTbmFwc2hvdCA9IHJlZnMuc2V0U25hcHNob3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGxhdGVzdEdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKSk7IC8vIFJlY29yZCBhIHBlbmRpbmcgbXV0YWJsZSBzb3VyY2UgdXBkYXRlIHdpdGggdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLlxuXG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQSBzZWxlY3RvciBtaWdodCB0aHJvdyBhZnRlciBhIHNvdXJjZSBtdXRhdGlvbi5cbiAgICAgICAgLy8gZS5nLiBpdCBtaWdodCB0cnkgdG8gcmVhZCBmcm9tIGEgcGFydCBvZiB0aGUgc3RvcmUgdGhhdCBubyBsb25nZXIgZXhpc3RzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHN0aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB3aXRoIFJlYWN0LlxuICAgICAgICAvLyBXb3JzdCBjYXNlIHRoZSBzZWxlY3RvciB3aWxsIHRocm93IGFnYWluIGFuZCB0aGVuIGFuIGVycm9yIGJvdW5kYXJ5IHdpbGwgaGFuZGxlIGl0LlxuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoc291cmNlLl9zb3VyY2UsIGhhbmRsZUNoYW5nZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzdWJzY3JpYmUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgYW55IG9mIHRoZSBpbnB1dHMgdG8gdXNlTXV0YWJsZVNvdXJjZSBjaGFuZ2UsIHJlYWRpbmcgaXMgcG90ZW50aWFsbHkgdW5zYWZlLlxuICAvL1xuICAvLyBJZiBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgc3Vic2NyaXB0aW9uIGhhdmUgY2hhbmdlZCB3ZSBjYW4ndCBjYW4ndCB0cnVzdCB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBNYXliZSB0aGUgc291cmNlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGUgb2xkIHN1YnNjcmlwdGlvbiBpZ25vcmVkIGJ1dCB0aGUgbmV3IG9uZSBkZXBlbmRzIG9uLlxuICAvL1xuICAvLyBJZiB0aGUgZ2V0U25hcHNob3QgZnVuY3Rpb24gY2hhbmdlZCwgd2UgYWxzbyBzaG91bGRuJ3QgcmVseSBvbiB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgc291cmNlIHdhcyBtdXRhdGVkIGJldHdlZW4gdGhlIHdoZW4gdGhlIGxhc3QgXCJjaGFuZ2VcIiBldmVudCBmaXJlZCxcbiAgLy8gYW5kIHdoZW4gdGhlIGN1cnJlbnQgcmVuZGVyICh3aXRoIHRoZSBuZXcgZ2V0U25hcHNob3QgZnVuY3Rpb24pIGlzIHByb2Nlc3NlZC5cbiAgLy9cbiAgLy8gSW4gYm90aCBjYXNlcywgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHBlbmRpbmcgdXBkYXRlcyAoc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50KVxuICAvLyBhbmQgdHJlYXQgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYXMgd2UgZG8gaW4gdGhlIG1vdW50IGNhc2UuXG5cbiAgaWYgKCFvYmplY3RJcyhwcmV2R2V0U25hcHNob3QsIGdldFNuYXBzaG90KSB8fCAhb2JqZWN0SXMocHJldlNvdXJjZSwgc291cmNlKSB8fCAhb2JqZWN0SXMocHJldlN1YnNjcmliZSwgc3Vic2NyaWJlKSkge1xuICAgIC8vIENyZWF0ZSBhIG5ldyBxdWV1ZSBhbmQgc2V0U3RhdGUgbWV0aG9kLFxuICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBpbnRlcmxlYXZlZCB1cGRhdGVzLCB0aGV5IGdldCBwdXNoZWQgdG8gdGhlIG9sZGVyIHF1ZXVlLlxuICAgIC8vIFdoZW4gdGhpcyBiZWNvbWVzIGN1cnJlbnQsIHRoZSBwcmV2aW91cyBxdWV1ZSBhbmQgZGlzcGF0Y2ggbWV0aG9kIHdpbGwgYmUgZGlzY2FyZGVkLFxuICAgIC8vIGluY2x1ZGluZyBhbnkgaW50ZXJsZWF2aW5nIHVwZGF0ZXMgdGhhdCBvY2N1ci5cbiAgICB2YXIgbmV3UXVldWUgPSB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBzbmFwc2hvdFxuICAgIH07XG4gICAgbmV3UXVldWUuZGlzcGF0Y2ggPSBzZXRTbmFwc2hvdCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgbmV3UXVldWUpO1xuICAgIHN0YXRlSG9vay5xdWV1ZSA9IG5ld1F1ZXVlO1xuICAgIHN0YXRlSG9vay5iYXNlUXVldWUgPSBudWxsO1xuICAgIHNuYXBzaG90ID0gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gICAgc3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2suYmFzZVN0YXRlID0gc25hcHNob3Q7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczoge1xuICAgICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LFxuICAgICAgc2V0U25hcHNob3Q6IG51bGxcbiAgICB9LFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcblxuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBsYXN0RWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgICBlZmZlY3QubmV4dCA9IGZpcnN0RWZmZWN0O1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWZmZWN0O1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmID0ge1xuICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWYpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcmVmO1xuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiBob29rLm1lbW9pemVkU3RhdGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldkVmZmVjdCA9IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgZGVzdHJveSA9IHByZXZFZmZlY3QuZGVzdHJveTtcblxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuXG4gICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICByZWZDYWxsYmFjayhfaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QyID0gY3JlYXRlKCk7XG5cbiAgICByZWZPYmplY3QuY3VycmVudCA9IF9pbnN0MjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHsvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfdXBkYXRlU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF91cGRhdGVTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNldFBlbmRpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA8IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPyBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0UGVuZGluZyh0cnVlKTtcbiAgICB9KTtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlMiA9IG1vdW50U3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX21vdW50U3RhdGUyWzBdLFxuICAgICAgc2V0UGVuZGluZyA9IF9tb3VudFN0YXRlMlsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIGNhbiBiZSBzdG9yZWQgb24gYSByZWYsIHNpbmNlIGBzZXRQZW5kaW5nYFxuICAvLyBuZXZlciBjaGFuZ2VzLlxuXG5cbiAgdmFyIHN0YXJ0ID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQobnVsbCwgc2V0UGVuZGluZyk7XG4gIG1vdW50UmVmKHN0YXJ0KTtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZTIgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUyID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3JlcmVuZGVyU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG52YXIgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkge1xuICB7XG4gICAgcmV0dXJuIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2FybiBpbiBlZmZlY3RzIGFuZCBjYWxsYmFja3MsIHRvb1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoZ2V0SXNSZW5kZXJpbmcoKSAmJiAhZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSkge1xuICAgICAgZXJyb3IoJ1RoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlICcgKyAncGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgJyArICd2YWx1ZSBkaXJlY3RseS4nKTtcblxuICAgICAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50T3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIG1ha2VJZCA9ICBtYWtlQ2xpZW50SWRJbkRFVi5iaW5kKG51bGwsIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpKSA7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgZGlkVXBncmFkZSA9IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG5cbiAgICB2YXIgcmVhZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFkaWRVcGdyYWRlKSB7XG4gICAgICAgIC8vIE9ubHkgdXBncmFkZSBvbmNlLiBUaGlzIHdvcmtzIGV2ZW4gaW5zaWRlIHRoZSByZW5kZXIgcGhhc2UgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgdXBkYXRlIGlzIGFkZGVkIHRvIGEgc2hhcmVkIHF1ZXVlLCB3aGljaCBvdXRsYXN0cyB0aGVcbiAgICAgICAgLy8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICBkaWRVcGdyYWRlID0gdHJ1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IHRydWU7XG4gICAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgICAgICAgICB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlIHZhbHVlIGRpcmVjdGx5LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlkID0gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChyZWFkVmFsdWUpO1xuICAgIHZhciBzZXRJZCA9IG1vdW50U3RhdGUoaWQpWzFdO1xuXG4gICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gVXBkYXRlIHwgUGFzc2l2ZTtcbiAgICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHZhciBfaWQgPSBtYWtlSWQoKTtcblxuICAgIG1vdW50U3RhdGUoX2lkKTtcbiAgICByZXR1cm4gX2lkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHVwZGF0ZVN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSByZXJlbmRlclN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcihcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIFwiICsgJ3NlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyICcgKyAncmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9OyAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFN0YXNoIGl0IGluIGEgbGF6aWx5LWNyZWF0ZWQgbWFwIG9mXG4gICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuZWFnZXJSZWR1Y2VyID0gbGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG5cbiAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU11dGFibGVTb3VyY2U6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlT3BhcXVlSWRlbnRpZmllcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcblxue1xuICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG5cbiAgY29tbWl0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3ckMSgpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG5cbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cblxuICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gIC8vIGFmdGVyIHdlIHJlcmVuZGVyLiBUaGlzIGlzIHVzZWQgYXMgYSBoZWxwZXIgaW4gc3BlY2lhbCBjYXNlc1xuICAvLyB3aGVyZSB3ZSBzaG91bGQgY291bnQgdGhlIHdvcmsgb2YgbXVsdGlwbGUgcGFzc2VzLlxuICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0QmFkQ2xhc3M7XG52YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG52YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcztcbnZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcjtcbnZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgLy8gSWYgd2UgaGFkIGFueSBwcm9ncmVzc2VkIHdvcmsgYWxyZWFkeSwgdGhhdCBpcyBpbnZhbGlkIGF0IHRoaXMgcG9pbnQgc29cbiAgICAvLyBsZXQncyB0aHJvdyBpdCBvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvcmsgb2YgcmVjb25jaWxlQ2hpbGRyZW4uIEl0J3MgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZVxuICAvLyB3YW50IHRvIHJlY29uY2lsZSB3aXRob3V0IG1hdGNoaW5nIGFnYWluc3QgdGhlIGV4aXN0aW5nIHNldC4gVGhpcyBoYXMgdGhlXG4gIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAvLyBhcmUgdGhlIHNhbWUsIHRoZSBvbGQgY2hpbGQgaXMgdW5tb3VudGVkIGFuZCBhIG5ldyBjaGlsZCBpcyBjcmVhdGVkLlxuICAvL1xuICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAvLyB0aGUgZmlyc3QgcGFzcywgd2Ugc2NoZWR1bGUgYSBkZWxldGlvbiBmb3IgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuIGJ5XG4gIC8vIHBhc3NpbmcgbnVsbC5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgLy8gcGFzcyBudWxsIGluIHBsYWNlIG9mIHdoZXJlIHdlIHVzdWFsbHkgcGFzcyB0aGUgY3VycmVudCBjaGlsZCBzZXQuIFRoaXMgaGFzXG4gIC8vIHRoZSBlZmZlY3Qgb2YgcmVtb3VudGluZyBhbGwgY2hpbGRyZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZWlyXG4gIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKG91dGVyTWVtb1R5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKCAvLyBQcmV2ZW50IGJhaWxvdXQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQuXG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtbGF0ZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgLy8gd2UncmUgYmFpbGluZyBvdXQgZWFybHkgKndpdGhvdXQqIGV2YWx1YXRpbmcgdGhlIGNvbXBvbmVudCwgd2UgbmVlZFxuICAgICAgICAvLyB0byBhY2NvdW50IGZvciBpdCBoZXJlLCB0b28uIFJlc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBmaWJlci5cbiAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgIC8vIGJlY2F1c2UgYSBNZW1vQ29tcG9uZW50IGZpYmVyIGRvZXMgbm90IGhhdmUgaG9va3Mgb3IgYW4gdXBkYXRlIHF1ZXVlO1xuICAgICAgICAvLyByYXRoZXIsIGl0IHdyYXBzIGFyb3VuZCBhbiBpbm5lciBjb21wb25lbnQsIHdoaWNoIG1heSBvciBtYXkgbm90XG4gICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSByZXNldCBhdCBpbiBiZWdpbldvcmsgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBzbyB0aGF0XG4gICAgICAgIC8vIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICBpZiAobmV4dFByb3BzLm1vZGUgPT09ICdoaWRkZW4nIHx8IG5leHRQcm9wcy5tb2RlID09PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IHdlIHNob3VsZCBkbyBpbiBCbG9ja2luZyBtb2RlLlxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgbmV4dEJhc2VMYW5lcztcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkJhc2VMYW5lcyA9IHByZXZTdGF0ZS5iYXNlTGFuZXM7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZCYXNlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlOyAvLyBXZSdyZSBhYm91dCB0byBiYWlsIG91dCwgYnV0IHdlIG5lZWQgdG8gcHVzaCB0aGlzIHRvIHRoZSBzdGFjayBhbnl3YXlcbiAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIG5leHRCYXNlTGFuZXMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlcmluZyBhdCBvZmZzY3JlZW4sIHNvIHdlIGNhbiBjbGVhciB0aGUgYmFzZSBsYW5lcy5cbiAgICAgIHZhciBfbmV4dFN0YXRlMiA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGUyOyAvLyBQdXNoIHRoZSBsYW5lcyB0aGF0IHdlcmUgc2tpcHBlZCB3aGVuIHdlIGJhaWxlZCBvdXQuXG5cbiAgICAgIHZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIDogcmVuZGVyTGFuZXM7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfc3VidHJlZVJlbmRlckxhbmVzO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSdyZSBub3QgaGlkZGVuIGFueW1vcmUsIHJlc2V0IHRoZSBzdGF0ZVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcbi8vIG91cnNlbHZlcyB0byB0aGlzIGNvbnN0cmFpbnQsIHRob3VnaC4gSWYgdGhlIGJlaGF2aW9yIGRpdmVyZ2VzLCB3ZSBzaG91bGRcbi8vIGZvcmsgdGhlIGZ1bmN0aW9uLlxuXG5cbnZhciB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQgPSB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlOyAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgcmVmICE9PSBudWxsIHx8IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZikge1xuICAgIC8vIFNjaGVkdWxlIGEgUmVmIGVmZmVjdFxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLWNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKCEoY3VycmVudCAhPT0gbnVsbCAmJiB1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJZiB0aGUgcm9vdCBkb2VzIG5vdCBoYXZlIGFuIHVwZGF0ZVF1ZXVlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJhaWxlZCBvdXQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG5cbiAgaWYgKG5leHRDaGlsZHJlbiA9PT0gcHJldkNoaWxkcmVuKSB7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO1xuXG4gICAgICBpZiAobXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpXTtcbiAgICAgICAgICB2YXIgdmVyc2lvbiA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaSArIDFdO1xuICAgICAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZmxhZ3MgPSBub2RlLmZsYWdzICYgflBsYWNlbWVudCB8IEh5ZHJhdGluZztcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSByZXNldCBoeWRyYXRpb24gc3RhdGUgaW4gY2FzZSB3ZSBhYm9ydGVkIGFuZCByZXN1bWVkIGFub3RoZXJcbiAgICAvLyByb290LlxuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGlzRGlyZWN0VGV4dENoaWxkID0gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgbmV4dFByb3BzKTtcblxuICBpZiAoaXNEaXJlY3RUZXh0Q2hpbGQpIHtcbiAgICAvLyBXZSBzcGVjaWFsIGNhc2UgYSBkaXJlY3QgdGV4dCBjaGlsZCBvZiBhIGhvc3Qgbm9kZS4gVGhpcyBpcyBhIGNvbW1vblxuICAgIC8vIGNhc2UuIFdlIHdvbid0IGhhbmRsZSBpdCBhcyBhIHJlaWZpZWQgY2hpbGQuIFdlIHdpbGwgaW5zdGVhZCBoYW5kbGVcbiAgICAvLyB0aGlzIGluIHRoZSBob3N0IGVudmlyb25tZW50IHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEEgbGF6eSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbGF6eUNvbXBvbmVudCA9IGVsZW1lbnRUeXBlO1xuICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcbiAgdmFyIENvbXBvbmVudCA9IGluaXQocGF5bG9hZCk7IC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuXG4gIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gIHZhciByZXNvbHZlZFRhZyA9IHdvcmtJblByb2dyZXNzLnRhZyA9IHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gIH1cblxuICB2YXIgaGludCA9ICcnO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgfVxuICB9IC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgKyBDb21wb25lbnQgKyBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50ICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfSAvLyBQcm9tb3RlIHRoZSBmaWJlciB0byBhIGNsYXNzIGFuZCB0cnkgcmVuZGVyaW5nIGFnYWluLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3JrIG9mIGB1cGRhdGVDbGFzc0NvbXBvbmVudGBcbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICggLy8gUnVuIHRoZXNlIGNoZWNrcyBpbiBwcm9kdWN0aW9uIG9ubHkgaWYgdGhlIGZsYWcgaXMgb2ZmLlxuICAvLyBFdmVudHVhbGx5IHdlJ2xsIGRlbGV0ZSB0aGlzIGJyYW5jaCBhbHRvZ2V0aGVyLlxuICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAge1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4obnVsbCwgd29ya0luUHJvZ3Jlc3MsIHZhbHVlLCByZW5kZXJMYW5lcyk7XG5cbiAgICB7XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIHtcbiAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICBpZiAoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICB9XG5cbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgICAgdmFyIGRlYnVnU291cmNlID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlO1xuXG4gICAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKVxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gIC8vIHJlbWFpbiBvbiB0aGF0IGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY29udGVudCBoYXMgcmVzb2x2ZWQuXG4gIC8vIEZvciBleGFtcGxlLCBTdXNwZW5zZUxpc3QgY29vcmRpbmF0ZXMgd2hlbiBuZXN0ZWQgY29udGVudCBhcHBlYXJzLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgcmV0dXJuIGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IFNob3VsZCBub3QgcmVtb3ZlIHJlbmRlciBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIGR1cmluZyB0aGlzIHJlbmRlclxuICByZXR1cm4gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3dGYWxsYmFjayA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50KSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxhdGlvbiBsb2dpYy4gVHdvXG4gIC8vIG1haW4gcmVhc29ucyB0aGlzIGlzIHNvIGNvbXBsaWNhdGVkLlxuICAvL1xuICAvLyBGaXJzdCwgTGVnYWN5IE1vZGUgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVcbiAgLy8gcHJpbWFyeSB0cmVlIHdpbGwgY29tbWl0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gd2hlbiB3ZSBkbyB0aGVcbiAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAvLyBoYWNrcyB0byBtYWtlIHRoYXQgbm90IHRvdGFsbHkgYnJlYWsuIExpa2UgdHJhbnNmZXJyaW5nIGVmZmVjdHMgYW5kXG4gIC8vIGRlbGV0aW9ucyBmcm9tIGhpZGRlbiB0cmVlLiBJbiBDb25jdXJyZW50IE1vZGUsIGl0J3MgbXVjaCBzaW1wbGVyLFxuICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gIC8vIHN0YXRlLCBubyBlZmZlY3RzLiBTYW1lIGFzIHdoYXQgd2UgZG8gZm9yIE9mZnNjcmVlbiAoZXhjZXB0IHRoYXRcbiAgLy8gT2Zmc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0aGUgZmlyc3QgcmVuZGVyIHBhc3MpLlxuICAvL1xuICAvLyBTZWNvbmQgaXMgaHlkcmF0aW9uLiBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgU3VzcGVuc2UgZmliZXIgaGFzIGEgc2xpZ2h0bHlcbiAgLy8gZGlmZmVyZW50IGxheW91dCwgd2hlcmUgdGhlIGNoaWxkIHBvaW50cyB0byBhIGRlaHlkcmF0ZWQgZnJhZ21lbnQsIHdoaWNoXG4gIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgLy9cbiAgLy8gVGhpcmQsIGV2ZW4gaWYgeW91IHNldCBhbGwgdGhhdCBhc2lkZSwgU3VzcGVuc2UgaXMgbGlrZSBlcnJvciBib3VuZGFyaWVzIGluXG4gIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAvLyBhbmQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRyZWUuIExpa2UgYSB0cnkvY2F0Y2ggYmxvY2suIFNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcuIElkZWFsbHkgd2Ugd291bGQgbW9kZWwgdGhpcyB1c2luZ1xuICAvLyBhIHN0YWNrLlxuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgLy8gQnV0IG9ubHkgaWYgdGhpcyBoYXMgYSBmYWxsYmFjay5cbiAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQuXG4gICAgfVxuXG4gICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgdmFyIGZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wcy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGhpcyBpcyBhIENQVS1ib3VuZCB0cmVlLiBTa2lwIHRoaXMgdHJlZSBhbmQgc2hvdyBhIHBsYWNlaG9sZGVyIHRvXG4gICAgICAvLyB1bmJsb2NrIHRoZSBzdXJyb3VuZGluZyBjb250ZW50LiBUaGVuIGltbWVkaWF0ZWx5IHJldHJ5IGFmdGVyIHRoZVxuICAgICAgLy8gaW5pdGlhbCBjb21taXQuXG4gICAgICB2YXIgX2ZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzIHRvXG4gICAgICAvLyBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlciwgaXQnc1xuICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhcyBjb21taXR0ZWQuIElmXG4gICAgICAvLyBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmUgcGFpbnRlZC5cbiAgICAgIC8vIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy4gV2UgY2FuIHVzZSBhbnlcbiAgICAgIC8vIFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nIHNpbmNlIHdlJ3JlIGxlYXZpbmdcbiAgICAgIC8vIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZmliZXIgaGFzIGEgU3VzcGVuc2VTdGF0ZSwgdGhhdCBtZWFucyBpdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgIC8vIGEgZmFsbGJhY2suXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcblxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4yLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NCA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyZWUgaXMgbm90IGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICAvLyBUaW1lZCBvdXQuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW40ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW40LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIF9wcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUubWVtb2l6ZWRTdGF0ZSA9IF9wcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShfcHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTsgLy8gU2tpcCB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgYW5kIGNvbnRpbnVlIHdvcmtpbmcgb24gdGhlXG4gICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NiA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjUsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIE5vTGFuZXMsIG51bGwpO1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpIHtcbiAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gRGVsZXRlIHRoZSBmYWxsYmFjayBjaGlsZCBmcmFnbWVudFxuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gIChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZWZmZWN0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBIb3dldmVyLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZW1haW4gb24gdGhlIGZhbGxiYWNrLCB3ZSBubyBsb25nZXIgd2FudFxuICAgIC8vIHRvIGRlbGV0ZSBpdC4gU28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gRGVsZXRpb25zIGFyZSBzdG9yZWRcbiAgICAvLyBvbiB0aGUgc2FtZSBsaXN0IGFzIGVmZmVjdHMuIFdlIHdhbnQgdG8ga2VlcCB0aGUgZWZmZWN0cyBmcm9tIHRoZSBwcmltYXJ5XG4gICAgLy8gdHJlZS4gU28gd2UgY29weSB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCdzIGVmZmVjdCBsaXN0LCB3aGljaCBkb2VzIG5vdFxuICAgIC8vIGluY2x1ZGUgdGhlIGZhbGxiYWNrIGRlbGV0aW9uIGVmZmVjdC5cblxuXG4gICAgdmFyIHByb2dyZXNzZWRMYXN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFzdEVmZmVjdDtcblxuICAgIGlmIChwcm9ncmVzc2VkTGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5maXJzdEVmZmVjdDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBwcm9ncmVzc2VkTGFzdEVmZmVjdDtcbiAgICAgIHByb2dyZXNzZWRMYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBSZXNldCB0aGlzIHNvbWV3aGVyZSBlbHNlPyBMb2wgbGVnYWN5IG1vZGUgaXMgc28gd2VpcmQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCBwcmltYXJ5Q2hpbGRQcm9wcyk7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzKSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgaWYgKHRhaWxNb2RlICE9PSAnY29sbGFwc2VkJyAmJiB0YWlsTW9kZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzICcgKyAnXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsIHRhaWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZFNsb3QsIGluZGV4KSB7XG4gIHtcbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRTbG90KTtcbiAgICB2YXIgaXNJdGVyYWJsZSA9ICFpc0FycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICB2YXIgdHlwZSA9IGlzQXJyYXkgPyAnYXJyYXknIDogJ2l0ZXJhYmxlJztcblxuICAgICAgZXJyb3IoJ0EgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluICcgKyAnYW4gYWRkaXRpb25hbCBTdXNwZW5zZUxpc3QgdG8gY29uZmlndXJlIGl0cyByZXZlYWxPcmRlcjogJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gJyArICc8L1N1c3BlbnNlTGlzdD4nLCB0eXBlLCBpbmRleCwgdHlwZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgKyAnVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgaXNCYWNrd2FyZHMsIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZykge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWw6IHRhaWwsXG4gICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICBsYXN0RWZmZWN0OiBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCBTdXNwZW5zZUxpc3QgZG9lc24ndCB3b3JrIHNvIHdlIGp1c3RcbiAgICAvLyB1c2UgbWFrZSBpdCBhIG5vb3AgYnkgdHJlYXRpbmcgaXQgYXMgdGhlIGRlZmF1bHQgcmV2ZWFsT3JkZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gZmluZExhc3RDb250ZW50Um93KHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgIGlmIChsYXN0Q29udGVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgaXMgcGFydCBvZiB0aGUgdGFpbC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICB0YWlsID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHRhaWwgcm93cyBhZnRlciB0aGUgY29udGVudCByb3cuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byByZW5kZXIgdGhlbSBzZXBhcmF0ZWx5IGxhdGVyLlxuICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICBsYXN0Q29udGVudFJvdy5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IGhhcyBleGlzdGluZyBjb250ZW50LlxuICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgLy8gd2UgcGFzcyBpbiB0aGUgbWVhbnRpbWUuIFRoYXQncyBnb2luZyB0byBiZSBvdXIgdGFpbCBpbiByZXZlcnNlXG4gICAgICAgICAgLy8gb3JkZXIuXG4gICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByb3c7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV4dFJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgcm93LnNpYmxpbmcgPSBfdGFpbDtcbiAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgcm93ID0gbmV4dFJvdztcbiAgICAgICAgICB9IC8vIFRPRE86IElmIHdvcmtJblByb2dyZXNzLmNoaWxkIGlzIG51bGwsIHdlIGNhbiBjb250aW51ZSBvbiB0aGUgdGFpbCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCB0cnVlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIF90YWlsLCBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgbnVsbCwgLy8gdGFpbFxuICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB1bmRlZmluZWQsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgZGVmYXVsdCByZXZlYWwgb3JkZXIgaXMgdGhlIHNhbWUgYXMgbm90IGhhdmluZ1xuICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIGlmICghKCd2YWx1ZScgaW4gbmV3UHJvcHMpKSB7XG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0PycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0LCBuZXdQcm9wcy51bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xuICB2YXIgbmV3Q2hpbGRyZW47XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKSB7XG4gIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgLy8gZmliZXJzIGFuZCBjb250aW51ZS5cbiAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLicpO1xuICAgIH0gLy8gRGlzY29ubmVjdCBmcm9tIHRoZSBvbGQgY3VycmVudC5cbiAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG5cbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5pbmRleCA9IG9sZFdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBvbGRXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZWYgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFJlcGxhY2UgdGhlIGNoaWxkL3NpYmxpbmcgcG9pbnRlcnMgYWJvdmUgaXQuXG5cbiAgICBpZiAob2xkV29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKSB7XG4gICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcblxuICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC4nKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IG9sZFdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZztcblxuICAgICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY3VycmVudDtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciB1cGRhdGVMYW5lcyA9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfSAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG5cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgICAvLyBnbyBzdHJhaWdodCB0byB0aGUgZmFsbGJhY2suIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgcHJpbWFyeVxuICAgICAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkTGFuZXMgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IGRvZXMgbm90IGhhdmUgcGVuZGluZyB3b3JrIG1hcmtlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGRvIG5vdCBoYXZlIHBlbmRpbmcgd29yayB3aXRoIHN1ZmZpY2llbnRcbiAgICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cblxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIHRyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZGVmZXJyZWQuIFRoaXMgaXNcbiAgICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAgICAgLy8gYXQgdGhlIG5leHQgbGV2ZWwgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2hpbGQgcHJvcHNcbiAgICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgICAgIC8vIHBhdGggZnJvbSB0aGUgbm9ybWFsIHBhdGguIEknbSB0ZW1wdGVkIHRvIGRvIGEgbGFiZWxlZCBicmVhayBoZXJlXG4gICAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQyID8gX3VucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDMsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG59XG5cbnZhciBhcHBlbmRBbGxDaGlsZHJlbjtcbnZhciB1cGRhdGVIb3N0Q29udGFpbmVyO1xudmFyIHVwZGF0ZUhvc3RDb21wb25lbnQkMTtcbnZhciB1cGRhdGVIb3N0VGV4dCQxO1xuXG57XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWQgdG9cbiAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBnZXQgdXBkYXRlZCBiZWNhdXNlIG9uZSBvZiBvdXIgY2hpbGRyZW4gdXBkYXRlZCwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIG5ld1Byb3BzIHNvIHdlJ2xsIGhhdmUgdG8gcmV1c2UgdGhlbS5cbiAgICAvLyBUT0RPOiBTcGxpdCB0aGUgdXBkYXRlIEFQSSBhcyBzZXBhcmF0ZSBmb3IgdGhlIHByb3BzIHZzLiBjaGlsZHJlbi5cbiAgICAvLyBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiBjaGlsZHJlbiB3ZXJlbid0IHNwZWNpYWwgY2FzZWQgYXQgYWxsIHRoby5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBFeHBlcmllbmNpbmcgYW4gZXJyb3Igd2hlcmUgb2xkUHJvcHMgaXMgbnVsbC4gU3VnZ2VzdHMgYSBob3N0XG4gICAgLy8gY29tcG9uZW50IGlzIGhpdHRpbmcgdGhlIHJlc3VtZSBwYXRoLiBGaWd1cmUgb3V0IHdoeS4gUG9zc2libHlcbiAgICAvLyByZWxhdGVkIHRvIGBoaWRkZW5gLlxuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAgIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiBjb21taXRXb3JrLlxuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgLy8gSWYgdGhlIHRleHQgZGlmZmVycywgbWFyayBpdCBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpbiBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghZmliZXJSb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0LlxuICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIFJlYWN0IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gc2FmZSB0byBkbyBmb3IgdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSB0aGUgY29udGFpbmVyIHdvdWxkIGFscmVhZHkgYmUgZW1wdHkpLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIb3N0Q29tcG9uZW50JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHByZXZEaWRUaW1lb3V0ID0gcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBPbmx5IHNjaGVkdWxlIHVwZGF0ZXMgaWYgdGhlc2UgdmFsdWVzIGFyZSBub24gZXF1YWwsIGkuZS4gaXQgY2hhbmdlZC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgfHwgcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uIEluIG11dGF0aW9uIG1vZGUsIHdlIGFsc28gbmVlZCB0aGUgZmxhZyB0b1xuICAgICAgICAgICAgLy8gKnVuaGlkZSogY2hpbGRyZW4gdGhhdCB3ZXJlIHByZXZpb3VzbHkgaGlkZGVuLCBzbyBjaGVjayBpZiB0aGlzXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBwcmVwYXJlUG9ydGFsTW91bnQod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbm5hYmxlcy4gSW5zdGVhZCwgd2UnbGwgdHJhbnNmZXIgaXRzIHRoZW5uYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgbmV3VGhlbm5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBuZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3coKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgLy8gdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJiByZW5kZXJTdGF0ZS50YWlsTW9kZSA9PT0gJ2hpZGRlbicgJiYgIXJlbmRlcmVkVGFpbC5hbHRlcm5hdGUgJiYgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcm93IHdlIGp1c3QgcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIHJlbmRlcmVkIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVtb3ZlIGFueSBlZmZlY3RzIHRoYXQgd2VyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50LlxuXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSdyZSBkb25lLlxuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93KCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZC4gVGhpcyBicmVha3MgdGhlIGd1YXJhbnRlZSB0aGF0IGxpZmUtY3ljbGVzIGZpcmUgaW5cbiAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcuc2libGluZyA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgIC8vIFBvcCBhIHJvdy5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbmV4dC5zaWJsaW5nO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuICYmIG5ld1Byb3BzLm1vZGUgIT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmICghKChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgcm9vdCBmYWlsZWQgdG8gdW5tb3VudCBhZnRlciBhbiBlcnJvci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpOyAvLyBTdXNwZW5zZUxpc3QgZG9lc24ndCBhY3R1YWxseSBjYXRjaCBhbnl0aGluZy4gSXQgc2hvdWxkJ3ZlIGJlZW5cbiAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG4vLyBUaGlzIG1vZHVsZSBpcyBmb3JrZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cbi8vIEJ5IGRlZmF1bHQsIHJldHVybiBgdHJ1ZWAgdG8gbG9nIGVycm9ycyB0byB0aGUgY29uc29sZS5cbi8vIEZvcmtzIGNhbiByZXR1cm4gYGZhbHNlYCBpZiB0aGlzIGlzbid0IGRlc2lyYWJsZS5cbmZ1bmN0aW9uIHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2dDYXB0dXJlZEVycm9yKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gICAgaWYgKGxvZ0Vycm9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIGlmICh0cnVlKSB7XG4gICAgICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJzsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gYXMgYW4gZXhwYW5kbyBvbiB0aGUgZXJyb3IuXG5cbiAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIHdhcyBzaWxlbmNlZC5cbiAgICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgd291bGQgaGF2ZSBzaWxlbmNlZCB0aGUgb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzMzg0XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gc291cmNlID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcblxuICAgICAgaWYgKGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gY29tcG9uZW50TmFtZU1lc3NhZ2UgKyBcIlxcblwiICsgY29tcG9uZW50U3RhY2sgKyBcIlxcblxcblwiICsgKFwiXCIgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7IC8vIEluIGRldmVsb3BtZW50LCB3ZSBwcm92aWRlIG91ciBvd24gbWVzc2FnZSB3aXRoIGp1c3QgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAgIC8vIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciB0aGFua3MgdG8gdGhlIERFVi1vbmx5IGZha2UgZXZlbnQgdHJpY2sgaW4gUmVhY3RFcnJvclV0aWxzLlxuXG4gICAgICBjb25zb2xlWydlcnJvciddKGNvbWJpbmVkTWVzc2FnZSk7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCB3ZSBwcmludCB0aGUgZXJyb3IgZGlyZWN0bHkuXG4gICAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgbWVzc2FnZSwgdGhlIEpTIHN0YWNrLCBhbmQgYW55dGhpbmcgdGhlIGJyb3dzZXIgd2FudHMgdG8gc2hvdy5cbiAgICAgIC8vIFdlIHBhc3MgdGhlIGVycm9yIG9iamVjdCBpbnN0ZWFkIG9mIGN1c3RvbSBtZXNzYWdlIHNvIHRoYXQgdGhlIGJyb3dzZXIgZGlzcGxheXMgdGhlIGVycm9yIG5hdGl2ZWx5LlxuICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qgbm90IHRocm93LCBvciBSZWFjdCBpbnRlcm5hbCBzdGF0ZSB3aWxsIGdldCBtZXNzZWQgdXAuXG4gICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgLy8gd2Ugd2FudCB0byByZXBvcnQgdGhpcyBlcnJvciBvdXRzaWRlIG9mIHRoZSBub3JtYWwgc3RhY2sgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMTg4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IG51bGxcbiAgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIC8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlIHRvIFwicGluZ1wiIHRoZSByb290IGFuZCByZXRyeS4gQnV0IG9ubHkgaWZcbiAgLy8gb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lcyB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nICh3aGljaFxuICAvLyBhY3RzIGxpa2UgYSBcInRocmVhZCBJRFwiIGhlcmUpLlxuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gIHZhciB0aHJlYWRJRHM7XG5cbiAgaWYgKHBpbmdDYWNoZSA9PT0gbnVsbCkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCQxKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlOyAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHNvdXJjZUZpYmVyLmZpcnN0RWZmZWN0ID0gc291cmNlRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGEgd2FrZWFibGUuXG4gICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoKHNvdXJjZUZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBtZW1vaXplZFN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSBhdHRlbXB0ZWRcbiAgICAgIC8vIHRvIHJlbmRlciBpdC5cbiAgICAgIHZhciBjdXJyZW50U291cmNlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50U291cmNlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5ID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTsgLy8gU2NoZWR1bGUgdGhlIG5lYXJlc3QgU3VzcGVuc2UgdG8gcmUtcmVuZGVyIHRoZSB0aW1lZCBvdXQgdmlldy5cblxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIGlmIChfd29ya0luUHJvZ3Jlc3MudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2UoX3dvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSkpIHtcbiAgICAgICAgLy8gRm91bmQgdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgLy8gYXR0YWNoIGFub3RoZXIgbGlzdGVuZXIgdG8gZmxpcCB0aGUgYm91bmRhcnkgYmFjayB0byBpdHMgbm9ybWFsIHN0YXRlLlxuICAgICAgICB2YXIgd2FrZWFibGVzID0gX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YWtlYWJsZXMuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgfSAvLyBJZiB0aGUgYm91bmRhcnkgaXMgb3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYmxvY2tpbmcgbW9kZSB0cmVlLiBJZiB0aGUgU3VzcGVuc2UgaXMgb3V0c2lkZSBvZiBpdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkICpub3QqIHN1c3BlbmQgdGhlIGNvbW1pdC5cblxuXG4gICAgICAgIGlmICgoX3dvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyAmPSB+KExpZmVjeWNsZUVmZmVjdE1hc2sgfCBJbmNvbXBsZXRlKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNvdXJjZUZpYmVyID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNvdXJjZUZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBjbGFzcyBjb21wb25lbnQuIEZvciBleGFtcGxlLCB3ZSBzaG91bGQgbm90IGNhbGxcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgaWYgaXQgaXMgZGVsZXRlZC5cbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSB0cnkgcmVuZGVyaW5nIGFnYWluLCB3ZSBzaG91bGQgbm90IHJldXNlIHRoZSBjdXJyZW50IGZpYmVyLFxuICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgICAgIC8vIHByZXZlbnQgYSBiYWlsIG91dC5cbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgICAgIGVucXVldWVVcGRhdGUoc291cmNlRmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAgIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgICAgICAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgICAgICAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgICAgICAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGJvdW5kYXJ5IGFscmVhZHkgY2FwdHVyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBDb250aW51ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gYm91bmRhcnkuXG5cblxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIEZhbGx0aHJvdWdoIHRvIGVycm9yIG1vZGUuXG4gICAgLy8gVE9ETzogVXNlIGludmFyaWFudCBzbyB0aGUgbWVzc2FnZSBpcyBzdHJpcHBlZCBpbiBwcm9kP1xuXG5cbiAgICB2YWx1ZSA9IG5ldyBFcnJvcigoZ2V0Q29tcG9uZW50TmFtZShzb3VyY2VGaWJlci50eXBlKSB8fCAnQSBSZWFjdCBjb21wb25lbnQnKSArICcgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuJyArICdcXG4nICsgJ0FkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gJyArICdwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS4nKTtcbiAgfSAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyAmJiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIF9sYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZTIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtTZXQgOiBTZXQ7XG5cbnZhciBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIgPSBmdW5jdGlvbiAoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciwgbnVsbCwgY3VycmVudCwgaW5zdGFuY2UpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciB1bm1vdW50RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCB1bm1vdW50RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgdmFyIHJlZkVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHJlZkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBkaWRXYXJuU2V0ID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgIGVycm9yKCclcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSAnICsgJ211c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2VmZmVjdCA9IGVmZmVjdCxcbiAgICAgICAgICBuZXh0ID0gX2VmZmVjdC5uZXh0LFxuICAgICAgICAgIHRhZyA9IF9lZmZlY3QudGFnO1xuXG4gICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSAmJiAodGFnICYgSGFzRWZmZWN0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gbmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMaWZlQ3ljbGVzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgZWZmZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgKGR1cmluZyBtdXRhdGlvbiBwaGFzZSkuXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG5cblxuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgY29tbWl0VGltZSwgZmluaXNoZWRSb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gJyArICdVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgY3VycmVudFJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChjdXJyZW50UmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50UmVmKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufSAvLyBVc2VyLW9yaWdpbmF0aW5nIGVycm9ycyAobGlmZWN5Y2xlcyBhbmQgcmVmcykgc2hvdWxkIG5vdCBpbnRlcnJ1cHRcbi8vIGRlbGV0aW9uLCBzbyBkb24ndCBsZXQgdGhlbSB0aHJvdy4gSG9zdC1vcmlnaW5hdGluZyBlcnJvcnMgc2hvdWxkXG4vLyBpbnRlcnJ1cHQgZGVsZXRpb24sIHNvIGl0J3Mgb2theVxuXG5cbmZ1bmN0aW9uIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIG9uQ29tbWl0VW5tb3VudChjdXJyZW50KTtcblxuICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIF9lZmZlY3QyID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZGVzdHJveSA9IF9lZmZlY3QyLmRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0Mi50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChjdXJyZW50LCBlZmZlY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgLy8gd2UgZG8gYW4gaW5uZXIgbG9vcCB3aGlsZSB3ZSdyZSBzdGlsbCBpbnNpZGUgdGhlIGhvc3Qgbm9kZS5cbiAgdmFyIG5vZGUgPSByb290O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gbW9yZSBjb21wb3NpdGUgb3IgaG9zdCBub2Rlcy5cbiAgICAvLyBTa2lwIHBvcnRhbHMgYmVjYXVzZSBjb21taXRVbm1vdW50KCkgY3VycmVudGx5IHZpc2l0cyB0aGVtIHJlY3Vyc2l2ZWx5LlxuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwgJiYgKCAvLyBJZiB3ZSB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgdXNpbmcgY29tbWl0VW5tb3VudCBhYm92ZS5cbiAgICAvLyBJZiB3ZSBkb24ndCB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgaGVyZSBpbnN0ZWFkLlxuICAgICBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJNdXRhdGlvbihmaWJlcikge1xuICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlcnMgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLiBJZGVhbGx5LCB3ZVxuICAvLyBzaG91bGQgY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC4gVGhpcyBjaGlsZFxuICAvLyBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgbnVsbCBvdXQgc2libGluZyBoZXJlLCBvdGhlcndpc2UgaXQgY2FuIGNhdXNlIGlzc3Vlc1xuICAvLyB3aXRoIGZpbmRET01Ob2RlIGFuZCBob3cgaXQgcmVxdWlyZXMgdGhlIHNpYmxpbmcgZmllbGQgdG8gY2Fycnkgb3V0XG4gIC8vIHRyYXZlcnNhbCBpbiBhIGxhdGVyIGVmZmVjdC4gU2VlIFBSICMxNjgyMC4gV2Ugbm93IGNsZWFyIHRoZSBzaWJsaW5nXG4gIC8vIGZpZWxkIGFmdGVyIGVmZmVjdHMsIHNlZTogZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vXG4gIC8vIERvbid0IGRpc2Nvbm5lY3Qgc3RhdGVOb2RlIG5vdzsgaXQgd2lsbCBiZSBkZXRhY2hlZCBpbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy8gSXQgbWF5IGJlIHJlcXVpcmVkIGlmIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgLy8gYW5kIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgdGhyb3dzIHdoaWxlIHVubW91bnRpbmcgYSBwYXNzaXZlIGVmZmVjdC5cbiAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5maXJzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCBmaWJlci50YWcgPT09IEhvc3RQb3J0YWw7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAvLyBub2RlLiBVbmZvcnR1bmF0ZWx5LCBpZiBtdWx0aXBsZSBpbnNlcnRpb25zIGFyZSBkb25lIGluIGEgcm93IHdlIGhhdmUgdG9cbiAgLy8gc2VhcmNoIHBhc3QgdGhlbS4gVGhpcyBsZWFkcyB0byBleHBvbmVudGlhbCBzZWFyY2ggZm9yIHRoZSBuZXh0IHNpYmxpbmcuXG4gIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICBzaWJsaW5nczogd2hpbGUgKHRydWUpIHtcbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IGlzSG9zdFBhcmVudChub2RlLnJldHVybikpIHtcbiAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAvLyBsYXN0IHNpYmxpbmcuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGl0IGlzIG5vdCBob3N0IG5vZGUgYW5kLCB3ZSBtaWdodCBoYXZlIGEgaG9zdCBub2RlIGluc2lkZSBpdC5cbiAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgIGlmIChub2RlLmZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkID09PSBudWxsIHx8IG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoaXMgaG9zdCBub2RlIGlzIHN0YWJsZSBvciBhYm91dCB0byBiZSBwbGFjZWQuXG5cblxuICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBwYXJlbnQ7XG4gIHZhciBpc0NvbnRhaW5lcjtcbiAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gY3VycmVudDsgLy8gRWFjaCBpdGVyYXRpb24sIGN1cnJlbnRQYXJlbnQgaXMgcG9wdWxhdGVkIHdpdGggbm9kZSdzIGhvc3QgcGFyZW50IGlmIG5vdFxuICAvLyBjdXJyZW50UGFyZW50SXNWYWxpZC5cblxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICghKHBhcmVudCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gLy8gRG9uJ3QgdmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS5cblxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBvdXQgb2YgdGhlIHBvcnRhbCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGtlZXAgYSBzdGFjayBvZiB0aGVtLCB3ZSB3aWxsIHNlYXJjaCBmb3IgaXQuXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIGRldGFjaEZpYmVyTXV0YXRpb24oY3VycmVudCk7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGRldGFjaEZpYmVyTXV0YXRpb24oYWx0ZXJuYXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRXb3JrKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgIC8vIGRlc3Ryb3kgZnVuY3Rpb25zIGZvciBhbGwgZmliZXJzIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBjcmVhdGUgZnVuY3Rpb25zLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgIHZhciBuZXdQcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0VXBkYXRlKGluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIGlmICghKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcbiAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChfcm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IGh5ZHJhdGVkLiBObyBuZWVkIHRvIGh5ZHJhdGUgYWdhaW4uXG4gICAgICAgICAgICBfcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihfcm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspO1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSAhPT0gbnVsbCkge1xuICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuXG4gICAge1xuICAgICAgLy8gSGlkZSB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBwcmltYXJ5IGNoaWxkcmVuLiBUT0RPOlxuICAgICAgLy8gSWRlYWxseSwgdGhpcyBlZmZlY3Qgd291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgT2Zmc2NyZWVuIGZpYmVyXG4gICAgICAvLyBpdHNlbGYuIFRoYXQncyBob3cgdW5oaWRpbmcgd29ya3M6IHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHNjaGVkdWxlcyBhblxuICAgICAgLy8gZWZmZWN0IG9uIGl0c2VsZi4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgY29tcG9uZW50IGRpZG4ndCBjb21wbGV0ZSxcbiAgICAgIC8vIHNvIHRoZSBmaWJlciB3YXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBub3JtYWwgcGF0aC4gV2VcbiAgICAgIC8vIGNvdWxkIGhhdmUgYXBwZW5kZWQgaXQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBTdXNwZW5zZSBjb21wb25lbnQnc1xuICAgICAgLy8gc2Vjb25kIHBhc3MsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBpcyBsZXNzIGNvbXBsaWNhdGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAvLyBzaW1wbGVyIGlmIHdlIGdvdCByaWQgb2YgdGhlIGVmZmVjdCBsaXN0IGFuZCB0cmF2ZXJzZWQgdGhlIHRyZWUsIGxpa2VcbiAgICAgIC8vIHdlJ3JlIHBsYW5uaW5nIHRvIGRvLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IGZpbmlzaGVkV29yay5jaGlsZDtcbiAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKHByaW1hcnlDaGlsZFBhcmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaykge1xuICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gIC8vIEZvciBlYWNoIHdha2VhYmxlLCBhdHRhY2ggYSBsaXN0ZW5lciBzbyB0aGF0IHdoZW4gaXQgcmVzb2x2ZXMsIFJlYWN0XG4gIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgdmFyIHdha2VhYmxlcyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdha2VhYmxlLl9fcmVhY3REb05vdFRyYWNlSW50ZXJhY3Rpb25zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXRyeSA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChyZXRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4vLyBJdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBib3VuZGFyeSBpcyBhbHJlYWR5IGhpZGRlbi5cbi8vIFRPRE86IFVzZSBhbiBlZmZlY3QgdGFnLlxuXG5cbmZ1bmN0aW9uIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCBvbGRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZSAhPT0gbnVsbCAmJiBuZXdTdGF0ZS5kZWh5ZHJhdGVkID09PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50KSB7XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50LnN0YXRlTm9kZSk7XG59XG5cbnZhciBDT01QT05FTlRfVFlQRSA9IDA7XG52YXIgSEFTX1BTRVVET19DTEFTU19UWVBFID0gMTtcbnZhciBST0xFX1RZUEUgPSAyO1xudmFyIFRFU1RfTkFNRV9UWVBFID0gMztcbnZhciBURVhUX1RZUEUgPSA0O1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IkMSA9IFN5bWJvbC5mb3I7XG4gIENPTVBPTkVOVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzcycpO1xuICBST0xFX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3Iucm9sZScpO1xuICBURVNUX05BTUVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCQxKCkge1xuICB7XG4gICAgY29tbWl0SG9va3MuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0SG9vaykge1xuICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAqL1xuMDtcbnZhciBCYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICovXG4xO1xudmFyIEV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgRGlzY3JldGVFdmVudENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBMZWdhY3lVbmJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICovXG44O1xudmFyIFJlbmRlckNvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFJldHJ5QWZ0ZXJFcnJvciA9XG4vKiAgICAgICAqL1xuNjQ7XG52YXIgUm9vdEluY29tcGxldGUgPSAwO1xudmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xudmFyIFJvb3RFcnJvcmVkID0gMjtcbnZhciBSb290U3VzcGVuZGVkID0gMztcbnZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbnZhciBSb290Q29tcGxldGVkID0gNTsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbnZhciBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IG51bGw7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgUkVOREVSX1RJTUVPVVRfTVM7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lO1xufVxudmFyIG5leHRFZmZlY3QgPSBudWxsO1xudmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbnZhciBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xudmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcbnZhciByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDsgLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xuXG52YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7IC8vIE1hcmtzIHRoZSBuZWVkIHRvIHJlc2NoZWR1bGUgcGVuZGluZyBpbnRlcmFjdGlvbnMgYXQgdGhlc2UgbGFuZXNcbi8vIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSB0cmFjZWQgYWNyb3NzIGNvbXBvbmVudHNcbi8vIHRoYXQgc3Bhd24gbmV3IHdvcmsgZHVyaW5nIHJlbmRlci4gRS5nLiBoaWRkZW4gYm91bmRhcmllcywgc3VzcGVuZGVkIFNTUlxuLy8gaHlkcmF0aW9uIG9yIFN1c3BlbnNlTGlzdC5cbi8vIFRPRE86IENhbiB1c2UgYSBiaXRtYXNrIGluc3RlYWQgb2YgYW4gYXJyYXlcblxudmFyIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDsgLy8gSWYgdHdvIHVwZGF0ZXMgYXJlIHNjaGVkdWxlZCB3aXRoaW4gdGhlIHNhbWUgZXZlbnQsIHdlIHNob3VsZCB0cmVhdCB0aGVpclxuLy8gZXZlbnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2sgdGltZSBoYXMgYWR2YW5jZWRcbi8vIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbC5cblxudmFyIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbnZhciBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG52YXIgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lczsgLy8gRGV2IG9ubHkgZmxhZyB0aGF0IHRyYWNrcyBpZiBwYXNzaXZlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBiZWluZyBmbHVzaGVkLlxuLy8gV2Ugd2FybiBhYm91dCBzdGF0ZSB1cGRhdGVzIGZvciB1bm1vdW50ZWQgY29tcG9uZW50cyBkaWZmZXJlbnRseSBpbiB0aGlzIGNhc2UuXG5cbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGUgaW5wdXRzXG4gIC8vIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIHdlIHVzZSB0aGUgYHJlbmRlckxhbmVzYFxuICAvLyB0byBhdm9pZCBjaG9vc2luZyBhIGxhbmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLlxuICAvL1xuICAvLyBIb3dldmVyLCB0aGUgXCJpbmNsdWRlZFwiIGxhbmVzIGNvdWxkIGJlIG11dGF0ZWQgaW4gYmV0d2VlbiB1cGRhdGVzIGluIHRoZVxuICAvLyBzYW1lIGV2ZW50LCBsaWtlIGlmIHlvdSBwZXJmb3JtIGFuIHVwZGF0ZSBpbnNpZGUgYGZsdXNoU3luY2AuIE9yIGFueSBvdGhlclxuICAvLyBjb2RlIHBhdGggdGhhdCBtaWdodCBjYWxsIGBwcmVwYXJlRnJlc2hTdGFja2AuXG4gIC8vXG4gIC8vIFRoZSB0cmljayB3ZSB1c2UgaXMgdG8gY2FjaGUgdGhlIGZpcnN0IG9mIGVhY2ggb2YgdGhlc2UgaW5wdXRzIHdpdGhpbiBhblxuICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpcyBvdmVyLlxuICAvLyBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gIC8vXG4gIC8vIFdlJ2xsIGRvIHRoZSBzYW1lIGZvciBgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzYCBiZWxvdy5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHZhciBpc1RyYW5zaXRpb24gPSByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSAhPT0gTm9UcmFuc2l0aW9uO1xuXG4gIGlmIChpc1RyYW5zaXRpb24pIHtcbiAgICBpZiAoY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCAhPT0gbnVsbCA/IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290LnBlbmRpbmdMYW5lcyA6IE5vTGFuZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmRUcmFuc2l0aW9uTGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcywgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzKTtcbiAgfSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBTY2hlZHVsZXIgcHJpb3JpdHkuXG4gIC8vIFRvIGRvIHRoYXQsIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGFuIHVwZGF0ZSBsYW5lIHByaW9yaXR5LlxuXG5cbiAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTsgLy8gVGhlIG9sZCBiZWhhdmlvciB3YXMgdXNpbmcgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBTY2hlZHVsZXIuXG4gIC8vIFRoaXMgY291cGxlcyBSZWFjdCB0byB0aGUgU2NoZWR1bGVyIGludGVybmFscywgc28gd2UncmUgcmVwbGFjaW5nIGl0XG4gIC8vIHdpdGggdGhlIGN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkgYWJvdmUuIEFzIGFuIGV4YW1wbGUgb2YgaG93IHRoaXNcbiAgLy8gY291bGQgYmUgcHJvYmxlbWF0aWMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYFNjaGVkdWxlci5ydW5XaXRoUHJpb3JpdHlgLFxuICAvLyB0aGVuIHdlJ2xsIGdldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnVubmluZyBTY2hlZHVsZXIgdGFzayxcbiAgLy8gd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgd2Ugd2FudC5cblxuICB2YXIgbGFuZTtcblxuICBpZiAoIC8vIFRPRE86IFRlbXBvcmFyeS4gV2UncmUgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgZGlzY3JldGUgdXBkYXRlcy5cbiAgKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiBzY2hlZHVsZXJQcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMikge1xuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlckxhbmVQcmlvcml0eSA9IHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHkpO1xuXG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKHNjaGVkdWxlckxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gU2VlIGByZXF1ZXN0VXBkYXRlTGFuZWAgZm9yIGV4cGxhbmF0aW9uIG9mIGBjdXJyZW50RXZlbnRXaXBMYW5lc2BcblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmaW5kUmV0cnlMYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG4gIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgIC8vIGBkZWZlclJlbmRlclBoYXNlVXBkYXRlVG9OZXh0QmF0Y2hgIGZsYWcgaXMgb2ZmIGFuZCB0aGlzIGlzIGEgcmVuZGVyXG4gICAgLy8gcGhhc2UgdXBkYXRlLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHRyZWF0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGFzIGlmXG4gICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcmVxdWVzdFVwZGF0ZUxhbmVQcmlvcml0eSBhbHNvIHJlYWRzIHRoZSBwcmlvcml0eS4gUGFzcyB0aGVcbiAgLy8gcHJpb3JpdHkgYXMgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhpcyBvbmUuXG5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGxhbmUgPT09IFN5bmNMYW5lKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTsgLy8gVGhpcyBpcyBhIGxlZ2FjeSBlZGdlIGNhc2UuIFRoZSBpbml0aWFsIG1vdW50IG9mIGEgUmVhY3RET00ucmVuZGVyLWVkXG4gICAgICAvLyByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcyBzaG91bGQgYmUgc3luY2hyb25vdXMsIGJ1dCBsYXlvdXQgdXBkYXRlc1xuICAgICAgLy8gc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoLlxuXG4gICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTY2hlZHVsZSBhIGRpc2NyZXRlIHVwZGF0ZSBidXQgb25seSBpZiBpdCdzIG5vdCBTeW5jLlxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICggLy8gT25seSB1cGRhdGVzIGF0IHVzZXItYmxvY2tpbmcgcHJpb3JpdHkgb3IgZ3JlYXRlciBhcmUgY29uc2lkZXJlZFxuICAgIC8vIGRpc2NyZXRlLCBldmVuIGluc2lkZSBhIGRpc2NyZXRlIGV2ZW50LlxuICAgIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIGV2ZW50LiBUcmFjayB0aGUgbG93ZXN0IHByaW9yaXR5XG4gICAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICAgIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID09PSBudWxsKSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBuZXcgU2V0KFtyb290XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmFkZChyb290KTtcbiAgICAgIH1cbiAgICB9IC8vIFNjaGVkdWxlIG90aGVyIHVwZGF0ZXMgYWZ0ZXIgaW4gY2FzZSB0aGUgY2FsbGJhY2sgaXMgc3luYy5cblxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuICB9IC8vIFdlIHVzZSB0aGlzIHdoZW4gYXNzaWduaW5nIGEgbGFuZSBmb3IgYSB0cmFuc2l0aW9uIGluc2lkZVxuICAvLyBgcmVxdWVzdFVwZGF0ZUxhbmVgLiBXZSBhc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBiZWluZyB1cGRhdGVkLFxuICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgcm9vdCBhcHAgaXQgcHJvYmFibHkgaXMuIElmIGl0J3Mgbm90XG4gIC8vIHRoZSBzYW1lIHJvb3QsIHRoZW4gaXQncyBub3QgYSBodWdlIGRlYWwsIHdlIGp1c3QgbWlnaHQgYmF0Y2ggbW9yZSBzdHVmZlxuICAvLyB0b2dldGhlciBtb3JlIHRoYW4gbmVjZXNzYXJ5LlxuXG5cbiAgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSByb290O1xufSAvLyBUaGlzIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB3ZSBjYW4gbWFyayBhIGZpYmVyIHdpdGggcGVuZGluZ1xuLy8gd29yayB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgdHlwaWNhbCB1cGRhdGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gYW4gZXZlbnQ7XG4vLyBlLmcuIHJldHJ5aW5nIGEgU3VzcGVuc2UgYm91bmRhcnkgaXNuJ3QgYW4gdXBkYXRlLCBidXQgaXQgZG9lcyBzY2hlZHVsZSB3b3JrXG4vLyBvbiBhIGZpYmVyLlxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIHBhcmVudC5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnQuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlOyAvLyBDaGVjayBpZiBhbnkgbGFuZXMgYXJlIGJlaW5nIHN0YXJ2ZWQgYnkgb3RoZXIgd29yay4gSWYgc28sIG1hcmsgdGhlbSBhc1xuICAvLyBleHBpcmVkIHNvIHdlIGtub3cgdG8gd29yayBvbiB0aG9zZSBuZXh0LlxuXG4gIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpOyAvLyBEZXRlcm1pbmUgdGhlIG5leHQgbGFuZXMgdG8gd29yayBvbiwgYW5kIHRoZWlyIHByaW9yaXR5LlxuXG4gIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTsgLy8gVGhpcyByZXR1cm5zIHRoZSBwcmlvcml0eSBsZXZlbCBjb21wdXRlZCBkdXJpbmcgdGhlIGBnZXROZXh0TGFuZXNgIGNhbGwuXG5cbiAgdmFyIG5ld0NhbGxiYWNrUHJpb3JpdHkgPSByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpO1xuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdGFzay4gV2UgbWF5IGJlIGFibGUgdG8gcmV1c2UgaXQuXG5cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSkge1xuICAgICAgLy8gVGhlIHByaW9yaXR5IGhhc24ndCBjaGFuZ2VkLiBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHRhc2suIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgcHJpb3JpdHkgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBjYWxsYmFjay4gV2UnbGwgc2NoZWR1bGUgYSBuZXdcbiAgICAvLyBvbmUgYmVsb3cuXG5cblxuICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFN5bmMgUmVhY3QgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgb24gYSBzcGVjaWFsXG4gICAgLy8gaW50ZXJuYWwgcXVldWVcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkpIHtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobmV3Q2FsbGJhY2tQcmlvcml0eSk7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH1cblxuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5IGNvbmN1cnJlbnQgdGFzaywgaS5lLiBhbnl0aGluZyB0aGF0XG4vLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290KSB7XG4gIC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cbiAgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgdG8gd29yayBvbiwgdXNpbmcgdGhlIGZpZWxkcyBzdG9yZWRcbiAgLy8gb24gdGhlIHJvb3QuXG5cblxuICB2YXIgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTtcblxuICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgLy9cbiAgICAvLyBTbyB3ZSdsbCB0aHJvdyBvdXQgdGhlIGN1cnJlbnQgd29yayBhbmQgcmVzdGFydC5cbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgfSBlbHNlIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5jb21wbGV0ZSkge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhlIHRhc2sgbm9kZSBzY2hlZHVsZWQgZm9yIHRoaXMgcm9vdCBpcyB0aGUgc2FtZSBvbmUgdGhhdCdzXG4gICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJbmNvbXBsZXRlOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJldHJ5IHRoaXMgdHJlZS4gSWYgd2UgcmVhY2hlZFxuICAgICAgICAvLyB0aGlzIHBvaW50LCBpdCBlcnJvcmVkIGFnYWluLiBDb21taXQgaXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgLy8gcGxhY2Vob2xkZXIgYW5kIHdpdGhvdXQgc2NoZWR1bGluZyBhIHRpbWVvdXQuIERlbGF5IGluZGVmaW5pdGVseVxuICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdHJhbnNpdGlvbiwgYnV0IHdlIGRpZCB0cmlnZ2VyIGFuIGF2b2lkZWQgc3RhdGUuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBwbGFjZWhvbGRlciB0byBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXksIHVzaW5nIHRoZSBKdXN0XG4gICAgICAgICAgLy8gTm90aWNlYWJsZSBEaWZmZXJlbmNlLlxuICAgICAgICAgIC8vIFRPRE86IElzIHRoZSBKTkQgb3B0aW1pemF0aW9uIHdvcnRoIHRoZSBhZGRlZCBjb21wbGV4aXR5PyBJZiB0aGlzIGlzXG4gICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIHRyYWNrIHRoZSBldmVudCB0aW1lLCB0aGVuIHByb2JhYmx5IG5vdC5cbiAgICAgICAgICAvLyBDb25zaWRlciByZW1vdmluZy5cbiAgICAgICAgICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIHZhciBldmVudFRpbWVNcyA9IG1vc3RSZWNlbnRFdmVudFRpbWU7XG4gICAgICAgICAgdmFyIHRpbWVFbGFwc2VkTXMgPSBub3coKSAtIGV2ZW50VGltZU1zO1xuXG4gICAgICAgICAgdmFyIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZE1zKSAtIHRpbWVFbGFwc2VkTXM7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2sgaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYXJyaXZlLlxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZSB3b3JrIGNvbXBsZXRlZC4gUmVhZHkgdG8gY29tbWl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgLy8gcmFyZWx5LCBzaW5jZSB3ZSB0cnkgdG8gYXZvaWQgaXQpIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMpO1xuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgdmFyIGxhbmVzO1xuICB2YXIgZXhpdFN0YXR1cztcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGluY2x1ZGVzU29tZUxhbmUocm9vdC5leHBpcmVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoZXJlJ3MgYSBwYXJ0aWFsIHRyZWUsIGFuZCBhdCBsZWFzdCBvbmUgb2YgaXRzIGxhbmVzIGhhcyBleHBpcmVkLiBGaW5pc2hcbiAgICAvLyByZW5kZXJpbmcgaXQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcmVzdCBvZiB0aGUgZXhwaXJlZCB3b3JrLlxuICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBwYXJ0IG9mIHRoZSB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBjb25jdXJyZW50bHkuIElmIHRoZSB3aG9sZSB0cmVlIGlzIHJlbmRlcmVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBubyBpbnRlcmxlYXZlZCBldmVudHMuXG4gICAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB0aHJvdyBmYXRhbEVycm9yO1xuICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgLy8gd2lsbCBjb21taXQgaXQgZXZlbiBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLlxuXG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgY29tbWl0Um9vdChyb290KTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ3Vuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzICcgKyAnYWxyZWFkeSByZW5kZXJpbmcuJyk7XG4gICAgICB9XG4gICAgfSAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZywgc28gd2UgY2FuJ3Qgc3luY2hyb25vdXNseSBmbHVzaCBwZW5kaW5nIHdvcmsuXG4gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBhIG5lc3RlZCBldmVudCBkaXNwYXRjaCB0cmlnZ2VyZWQgYnkgYSBsaWZlY3ljbGUvZWZmZWN0LFxuICAgIC8vIGxpa2UgYGVsLmZvY3VzKClgLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKTsgLy8gSWYgdGhlIGRpc2NyZXRlIHVwZGF0ZXMgc2NoZWR1bGVkIHBhc3NpdmUgZWZmZWN0cywgZmx1c2ggdGhlbSBub3cgc28gdGhhdFxuICAvLyB0aGV5IGZpcmUgYmVmb3JlIHRoZSBuZXh0IHNlcmlhbCBldmVudC5cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpIHtcbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICAvLyBGb3IgZWFjaCByb290IHdpdGggcGVuZGluZyBkaXNjcmV0ZSB1cGRhdGVzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvXG4gICAgLy8gaW1tZWRpYXRlbHkgZmx1c2ggdGhlbS5cbiAgICB2YXIgcm9vdHMgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzO1xuICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsO1xuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB9KTtcbiAgfSAvLyBOb3cgZmx1c2ggdGhlIGltbWVkaWF0ZSBxdWV1ZS5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMkMShmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IERpc2NyZXRlRXZlbnRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYywgZCkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcblxuICBpZiAoKHByZXZFeGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGEpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZm4uYmluZChudWxsLCBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGRvIHtcbiAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogSSBmb3VuZCBhbmQgYWRkZWQgdGhpcyBtaXNzaW5nIGxpbmUgd2hpbGUgaW52ZXN0aWdhdGluZyBhXG4gICAgICAvLyBzZXBhcmF0ZSBpc3N1ZS4gV3JpdGUgYSByZWdyZXNzaW9uIHRlc3QgdXNpbmcgc3RyaW5nIHJlZnMuXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCB8fCBlcnJvcmVkV29yay5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgdG8gYmUgd29ya2luZyBvbiBhIG5vbi1yb290IGZpYmVyLiBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGFuY2VzdG9yIHRoYXQgY2FuIGhhbmRsZSBpdDsgdGhlIHJvb3QgaXNcbiAgICAgICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAgICAgLy8gYm91bmRhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIGVycm9yZWRXb3JrLnJldHVybiwgZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBjb21wbGV0ZVVuaXRPZldvcmsoZXJyb3JlZFdvcmspO1xuICAgIH0gY2F0Y2ggKHlldEFub3RoZXJUaHJvd25WYWx1ZSkge1xuICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSByZXR1cm4gcGF0aCBhbHNvIHRocmV3LlxuICAgICAgdGhyb3duVmFsdWUgPSB5ZXRBbm90aGVyVGhyb3duVmFsdWU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gZXJyb3JlZFdvcmsgJiYgZXJyb3JlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBoYXMgYWxyZWFkeSBlcnJvcmVkLCB0aGVuIHdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gdGhlIGVycm9yLiBCdWJibGUgaXQgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gICAgICAgIGVycm9yZWRXb3JrID0gZXJyb3JlZFdvcmsucmV0dXJuO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGVycm9yZWRXb3JrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICAgIHJldHVybjtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgIC8vIEluc3RlYWQgdGhlIGZpcnN0IHJlbmRlcmVyIHdpbGwgbGF6aWx5IGF0dGFjaCBvbmUsIGluIG9yZGVyIHRvIGdpdmVcbiAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHB1c2hJbnRlcmFjdGlvbnMocm9vdCkge1xuICB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAvLyBwaGFzZSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIG1pc3Rha2Ugd2hlcmUgd2Ugc3VzcGVuZCBsYW5lcyB0aGF0IHdlcmVcbiAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRFcnJvcigpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RDb21wbGV0ZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gQWxyZWFkeSB0aW1lZCBvdXQsIHNvIHBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcblxuICAgIHJldHVybiBSb290SW5jb21wbGV0ZTtcbiAgfSBlbHNlIHtcblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgZWZmZWN0cyBvZiB0aGUgc3VidHJlZSBhbmQgdGhpcyBmaWJlciBvbnRvIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdCBvZiB0aGUgcGFyZW50LiBUaGUgY29tcGxldGlvbiBvcmRlciBvZiB0aGUgY2hpbGRyZW4gYWZmZWN0cyB0aGVcbiAgICAgICAgLy8gc2lkZS1lZmZlY3Qgb3JkZXIuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yay5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZmxhZ3MgPSBjb21wbGV0ZWRXb3JrLmZsYWdzOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChfbmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiBjb21wbGV0aW5nIHRoaXMgd29yayBzcGF3bmVkIG5ldyB3b3JrLCBkbyB0aGF0IG5leHQuIFdlJ2xsIGNvbWVcbiAgICAgICAgLy8gYmFjayBoZXJlIGFnYWluLlxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICBfbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBfbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7IC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG5cbiAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIGVmZmVjdCBsaXN0LlxuICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKSB7XG4gIGlmICggLy8gVE9ETzogTW92ZSB0aGlzIGNoZWNrIG91dCBvZiB0aGUgaG90IHBhdGggYnkgbW92aW5nIGByZXNldENoaWxkTGFuZXNgXG4gIC8vIHRvIHN3aXRjaCBzdGF0ZW1lbnQgaW4gYGNvbXBsZXRlV29ya2AuXG4gIChjb21wbGV0ZWRXb3JrLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50IHx8IGNvbXBsZXRlZFdvcmsudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiAhaW5jbHVkZXNTb21lTGFuZShzdWJ0cmVlUmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICB2YXIgdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjsgLy8gV2hlbiBhIGZpYmVyIGlzIGNsb25lZCwgaXRzIGFjdHVhbER1cmF0aW9uIGlzIHJlc2V0IHRvIDAuIFRoaXMgdmFsdWUgd2lsbFxuICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgLy8gV2hlbiB3b3JrIGlzIGRvbmUsIGl0IHNob3VsZCBidWJibGUgdG8gdGhlIHBhcmVudCdzIGFjdHVhbER1cmF0aW9uLiBJZlxuICAgIC8vIHRoZSBmaWJlciBoYXMgbm90IGJlZW4gY2xvbmVkIHRob3VnaCwgKG1lYW5pbmcgbm8gd29yayB3YXMgZG9uZSksIHRoZW5cbiAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBidWJibGUuIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhc1xuICAgIC8vIGNsb25lZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkIHBvaW50ZXIuXG5cbiAgICB2YXIgc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgfHwgY29tcGxldGVkV29yay5jaGlsZCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQ7XG4gICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhjaGlsZC5sYW5lcywgY2hpbGQuY2hpbGRMYW5lcykpO1xuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGNvbXBsZXRlZFdvcmsudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uIC09IHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCkge1xuICB2YXIgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGNvbW1pdFJvb3RJbXBsLmJpbmQobnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKGZpbmlzaGVkV29yay5sYW5lcywgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXMpO1xuICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTsgLy8gQ2xlYXIgYWxyZWFkeSBmaW5pc2hlZCBkaXNjcmV0ZSB1cGRhdGVzIGluIGNhc2UgdGhhdCBhIGxhdGVyIGNhbGwgb2ZcbiAgLy8gYGZsdXNoRGlzY3JldGVVcGRhdGVzYCBzdGFydHMgYSB1c2VsZXNzIHJlbmRlciBwYXNzIHdoaWNoIG1heSBjYW5jZWxzXG4gIC8vIGEgc2NoZWR1bGVkIHRpbWVvdXQuXG5cbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoIWhhc0Rpc2NyZXRlTGFuZXMocmVtYWluaW5nTGFuZXMpICYmIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuaGFzKHJvb3QpKSB7XG4gICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmRlbGV0ZShyb290KTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgfSAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgIC8vIEEgZmliZXIncyBlZmZlY3QgbGlzdCBjb25zaXN0cyBvbmx5IG9mIGl0cyBjaGlsZHJlbiwgbm90IGl0c2VsZi4gU28gaWZcbiAgICAvLyB0aGUgcm9vdCBoYXMgYW4gZWZmZWN0LCB3ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGVcbiAgICAvLyByZXN1bHRpbmcgbGlzdCBpcyB0aGUgc2V0IHRoYXQgd291bGQgYmVsb25nIHRvIHRoZSByb290J3MgcGFyZW50LCBpZiBpdFxuICAgIC8vIGhhZCBvbmU7IHRoYXQgaXMsIGFsbCB0aGUgZWZmZWN0cyBpbiB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHJvb3QuXG4gICAgaWYgKGZpbmlzaGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFdvcmsubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb24gdGhlIHJvb3QuXG4gICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gIH1cblxuICBpZiAoZmlyc3RFZmZlY3QgIT09IG51bGwpIHtcblxuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7IC8vIFRoZSBjb21taXQgcGhhc2UgaXMgYnJva2VuIGludG8gc2V2ZXJhbCBzdWItcGhhc2VzLiBXZSBkbyBhIHNlcGFyYXRlIHBhc3NcbiAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgLy8gVGhlIGZpcnN0IHBoYXNlIGEgXCJiZWZvcmUgbXV0YXRpb25cIiBwaGFzZS4gV2UgdXNlIHRoaXMgcGhhc2UgdG8gcmVhZCB0aGVcbiAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpOyAvLyBXZSBubyBsb25nZXIgbmVlZCB0byB0cmFjayB0aGUgYWN0aXZlIGluc3RhbmNlIGZpYmVyXG5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH0gLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIG11dGF0aW9uIHBoYXNlLCB3aGVyZSB3ZSBtdXRhdGUgdGhlIGhvc3QgdHJlZS5cblxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TXV0YXRpb25FZmZlY3RzLCBudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgdHJlZSBpcyBub3cgdGhlIGN1cnJlbnQgdHJlZS4gVGhpcyBtdXN0IGNvbWUgYWZ0ZXJcbiAgICAvLyB0aGUgbXV0YXRpb24gcGhhc2UsIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRyZWUgaXMgc3RpbGwgY3VycmVudCBkdXJpbmdcbiAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbGF5b3V0IHBoYXNlLCB3aGVyZSB3ZSBjYWxsIGVmZmVjdHMgdGhhdCByZWFkXG4gICAgLy8gdGhlIGhvc3QgdHJlZSBhZnRlciBpdCdzIGJlZW4gbXV0YXRlZC4gVGhlIGlkaW9tYXRpYyB1c2UgY2FzZSBmb3IgdGhpcyBpc1xuICAgIC8vIGxheW91dCwgYnV0IGNsYXNzIGNvbXBvbmVudCBsaWZlY3ljbGVzIGFsc28gZmlyZSBoZXJlIGZvciBsZWdhY3kgcmVhc29ucy5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdExheW91dEVmZmVjdHMsIG51bGwsIHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAge1xuICAgICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIH1cblxuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBlZmZlY3RzLlxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gTWVhc3VyZSB0aGVzZSBhbnl3YXkgc28gdGhlIGZsYW1lZ3JhcGggZXhwbGljaXRseSBzaG93cyB0aGF0IHRoZXJlIHdlcmVcbiAgICAvLyBubyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAge1xuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gVGhpcyBjb21taXQgaGFzIHBhc3NpdmUgZWZmZWN0cy4gU3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlbS4gQnV0IGRvbid0XG4gICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdDtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBlZmZlY3QgY2hhaW4gYXQgdGhpcyBwb2ludCBzbyBsZXQncyBjbGVhciB0aGVcbiAgICAvLyBuZXh0RWZmZWN0IHBvaW50ZXJzIHRvIGFzc2lzdCB3aXRoIEdDLiBJZiB3ZSBoYXZlIHBhc3NpdmUgZWZmZWN0cywgd2UnbGxcbiAgICAvLyBjbGVhciB0aGlzIGluIGZsdXNoUGFzc2l2ZUVmZmVjdHMuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIG5leHRFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICAgIGlmIChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMobmV4dEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRFZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHRoZW4gd2UgY2FuIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgd2FpdCB1bnRpbCBhZnRlciB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSBmbHVzaGVkLlxuICAgICAgLy8gV2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIHJlbWFpbmluZyB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCxcbiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcHJlbWF0dXJlbHkgc2lnbmFsIGNvbXBsZXRlIGZvciBpbnRlcmFjdGlvbnMgd2hlbiB0aGVyZSdzIGUuZy4gaGlkZGVuIHdvcmsuXG4gICAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVtYWluaW5nTGFuZXMgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IzID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgX2Vycm9yMztcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBhIFJlYWN0RE9NLnJlbmRlci1lZCByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcy4gVGhlIGNvbW1pdCBmaXJlZFxuICAgIC8vIHN5bmNocm9ub3VzbHksIGJ1dCBsYXlvdXQgdXBkYXRlcyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBiYXRjaC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgIGlmICghc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyICYmIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIGlmIChkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSBob3QgcGF0aCB1c2luZyBhIGRlZGljYXRlZCBlZmZlY3QgdGFnLlxuICAgICAgICBpZiAobmV4dEVmZmVjdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIG5leHRFZmZlY3QpICYmIGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICBjb21taXRSZXNldFRleHRDb250ZW50KG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIGZvbGxvd2luZyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHBsYWNlbWVudCxcbiAgICAvLyB1cGRhdGVzLCBhbmQgZGVsZXRpb25zLiBUbyBhdm9pZCBuZWVkaW5nIHRvIGFkZCBhIGNhc2UgZm9yIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gYml0bWFwIHZhbHVlLCB3ZSByZW1vdmUgdGhlIHNlY29uZGFyeSBlZmZlY3RzIGZyb20gdGhlIGVmZmVjdCB0YWcgYW5kXG4gICAgLy8gc3dpdGNoIG9uIHRoYXQgdmFsdWUuXG5cblxuICAgIHZhciBwcmltYXJ5RmxhZ3MgPSBmbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUgfCBEZWxldGlvbiB8IEh5ZHJhdGluZyk7XG5cbiAgICBzd2l0Y2ggKHByaW1hcnlGbGFncykge1xuICAgICAgY2FzZSBQbGFjZW1lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50OyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nQW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cblxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMocm9vdCwgY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihuZXh0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgLy8gUmV0dXJucyB3aGV0aGVyIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQuXG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSQxKSB7XG4gICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG5cbiAgICB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCwgZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUoZWZmZWN0KSB7XG4gIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBBTEwgcGVuZGluZyBwYXNzaXZlIGVmZmVjdCBkZXN0cm95IGZ1bmN0aW9ucyBhcmUgY2FsbGVkXG4gIC8vIGJlZm9yZSBBTlkgcGFzc2l2ZSBlZmZlY3QgY3JlYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAvLyBPdGhlcndpc2UgZWZmZWN0cyBpbiBzaWJsaW5nIGNvbXBvbmVudHMgbWlnaHQgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci5cbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBtYXkgdW5pbnRlbnRpb25hbGx5IG92ZXJyaWRlIGEgcmVmXG4gIC8vIHZhbHVlIHNldCBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudC5cbiAgLy8gTGF5b3V0IGVmZmVjdHMgaGF2ZSB0aGUgc2FtZSBjb25zdHJhaW50LlxuICAvLyBGaXJzdCBwYXNzOiBEZXN0cm95IHN0YWxlIHBhc3NpdmUgZWZmZWN0cy5cblxuICB2YXIgdW5tb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRFZmZlY3RzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QgPSB1bm1vdW50RWZmZWN0c1tpXTtcbiAgICB2YXIgZmliZXIgPSB1bm1vdW50RWZmZWN0c1tpICsgMV07XG4gICAgdmFyIGRlc3Ryb3kgPSBfZWZmZWN0LmRlc3Ryb3k7XG4gICAgX2VmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAge1xuICAgICAgZmliZXIuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAge1xuICAgICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEoZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU2Vjb25kIHBhc3M6IENyZWF0ZSBuZXcgcGFzc2l2ZSBlZmZlY3RzLlxuXG5cbiAgdmFyIG1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vdW50RWZmZWN0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdDIgPSBtb3VudEVmZmVjdHNbX2ldO1xuICAgIHZhciBfZmliZXIgPSBtb3VudEVmZmVjdHNbX2kgKyAxXTtcblxuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihfZmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlLCBudWxsLCBfZWZmZWN0Mik7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKF9maWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2Vycm9yNCA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihfZmliZXIsIF9lcnJvcjQpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cbiAgfSAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3QgZmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgcm9vdCBpcyBub3QgcGFydCBvZiBpdHMgb3duIGVmZmVjdCBsaXN0LlxuICAvLyBUaGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5cbiAgdmFyIGVmZmVjdCA9IHJvb3QuY3VycmVudC5maXJzdEVmZmVjdDtcblxuICB3aGlsZSAoZWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHROZXh0RWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7IC8vIFJlbW92ZSBuZXh0RWZmZWN0IHBvaW50ZXIgdG8gYXNzaXN0IEdDXG5cbiAgICBlZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgZWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSk7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qocm9vdEZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLlxuICAgICAgICAgIC8vIFdlIGNhbid0IHNjaGVkdWxlIGFueSBmb2xsb3cgdXAgd29yayBmb3IgdGhlIHJvb3QgYmVjYXVzZSB0aGUgZmliZXIgaXMgYWxyZWFkeSB1bm1vdW50ZWQsXG4gICAgICAgICAgLy8gYnV0IHdlIGNhbiBzdGlsbCBjYWxsIHRoZSBsb2ctb25seSBib3VuZGFyeSBzbyB0aGUgZXJyb3IgaXNuJ3Qgc3dhbGxvd2VkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYmFuZGFpZCBmb3IgdGhlIG9sZCByZWNvbmNpbGVyIGZvcmsuXG4gICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNwZWNpYWwgY2FzZSBvbmNlIHRoZSBuZXcgZm9yayBpcyBtZXJnZWQuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3JUb0lnbm9yZSkgey8vIFRPRE8gSWdub3JlIHRoaXMgZXJyb3I/IFJldGhyb3cgaXQ/XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBhbiBlZGdlIGNhc2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBwaW5nZWRMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiAoQmxvY2tpbmdNb2RlIHwgQ29uY3VycmVudE1vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyB1bm1vdW50cyBmb3IgdGhpcyBGaWJlcixcbiAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhleSB3b3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzIHVwZGF0ZS5cblxuXG4gICAgaWYgKChmaWJlci5mbGFncyAmIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIDsgZWxzZSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgXCIgKyAnaXMgYSBuby1vcCwgYnV0IGl0IGluZGljYXRlcyBhIG1lbW9yeSBsZWFrIGluIHlvdXIgYXBwbGljYXRpb24uIFRvICcgKyAnZml4LCBjYW5jZWwgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIGFzeW5jaHJvbm91cyB0YXNrcyBpbiAlcy4nLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBiZWdpbldvcmskMTtcblxue1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJDEgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCB0aHJvd3MgYW4gZXJyb3IsIHdlIHJlcGxheSBpdCBhZ2FpbiBpbiBhIHN5bmNocm9ub3VzbHlcbiAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjb3B5IHRoZSB3b3JrLWluLXByb2dyZXNzIG9udG8gYSBkdW1teVxuICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZHVtbXlGaWJlciwgdW5pdE9mV29yayk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTsgLy8gRG9uJ3QgcmVzZXQgY3VycmVudCBkZWJ1ZyBmaWJlciwgc2luY2Ugd2UncmUgYWJvdXQgdG8gd29yayBvbiB0aGVcbiAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsodW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgIGlmICggdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yaywgbnVsbCwgY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7IC8vIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIHNvbWV0aW1lcyBzZXRzIGFuIGV4cGFuZG8gYF9zdXBwcmVzc0xvZ2dpbmdgLlxuICAgICAgICAvLyBSZXRocm93IHRoaXMgZXJyb3IgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLlxuXG4gICAgICAgIHRocm93IHJlcGxheUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hhYmxlIGlmIHRoZSByZW5kZXIgcGhhc2UgaXMgaW1wdXJlLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG57XG4gIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ1Vua25vd24nOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgdmFyIGRlZHVwZUtleSA9IHJlbmRlcmluZ0NvbXBvbmVudE5hbWU7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSAnICsgJ2RpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsICcgKyAnZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlcicsIHNldFN0YXRlQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlICcgKyAnZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBhICdzaGFyZWQnIHZhcmlhYmxlIHRoYXQgY2hhbmdlcyB3aGVuIGFjdCgpIG9wZW5zL2Nsb3NlcyBpbiB0ZXN0cy5cblxuXG52YXIgSXNUaGlzUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IHRydWUgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQge2FjdH0gZnInICsgXCJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xcblwiICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtdGVzdC1yZW5kZXJlcjpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCBUZXN0UmVuZGVyZXIgZnInICsgXCJvbSByZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7Jyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkgIT09IE5vTW9kZSAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldiA9IHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVjsgLy8gSW4gdGVzdHMsIHdlIHdhbnQgdG8gZW5mb3JjZSBhIG1vY2tlZCBzY2hlZHVsZXIuXG5cbnZhciBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IGZhbHNlOyAvLyBUT0RPIEJlZm9yZSB3ZSByZWxlYXNlIGNvbmN1cnJlbnQgbW9kZSwgcmV2aXNpdCB0aGlzIGFuZCBkZWNpZGUgd2hldGhlciBhIG1vY2tlZFxuLy8gc2NoZWR1bGVyIGlzIHRoZSBhY3R1YWwgcmVjb21tZW5kYXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBjb3VsZCBiZSBhIHRlc3RpbmcgYnVpbGQsXG4vLyBhIG5ldyBsaWIsIG9yIHdoYXRldmVyOyB3ZSBkdW5ubyBqdXN0IHlldC4gVGhpcyBtZXNzYWdlIGlzIGZvciBlYXJseSBhZG9wdGVyc1xuLy8gdG8gZ2V0IHRoZWlyIHRlc3RzIHJpZ2h0LlxuXG5mdW5jdGlvbiB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihmaWJlcikge1xuICB7XG4gICAgaWYgKGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSBmYWxzZSAmJiBTY2hlZHVsZXIudW5zdGFibGVfZmx1c2hBbGxXaXRob3V0QXNzZXJ0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlIHx8IGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0luIENvbmN1cnJlbnQgb3IgU3luYyBtb2RlcywgdGhlIFwic2NoZWR1bGVyXCIgbW9kdWxlIG5lZWRzIHRvIGJlIG1vY2tlZCAnICsgJ3RvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgdGVzdHMgYW5kIGJyb3dzZXJzLiAnICsgJ0ZvciBleGFtcGxlLCB3aXRoIGplc3Q6IFxcbicgKyAvLyBCcmVhayB1cCByZXF1aXJlcyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgXCJqZXN0Lm1vY2soJ3NjaGVkdWxlcicsICgpID0+IHJlcXVpcmVcIiArIFwiKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbW9jay1zY2hlZHVsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIC8vIE5PVEU6IEludGVudGlvbmFsbHkgdW5zb3VuZCBjYXN0LiBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgaXQncyBhIG51bWJlclxuICAvLyBhbmQgaXQgcmVwcmVzZW50cyBhIGJhdGNoIG9mIHdvcmsuIENvdWxkIG1ha2UgYSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZCxcbiAgLy8gYnV0IG1laCB0aGlzIGlzIGZpbmUgZm9yIG5vdy5cbiAgcmV0dXJuIGxhbmUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsobGFuZSkge1xuXG4gIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9PT0gbnVsbCkge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gW2xhbmVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2gobGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgaW50ZXJhY3Rpb25zKSB7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQobGFuZSk7XG5cbiAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nSW50ZXJhY3Rpb25zLmhhcyhpbnRlcmFjdGlvbikpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChsYW5lLCBuZXcgU2V0KGludGVyYWN0aW9ucykpOyAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuXG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSkge1xuXG4gIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcykge1xuICAvLyB3ZSBjYW4gYWNjdXJhdGVseSBhdHRyaWJ1dGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGl0LCBBbmQgc28gdGhhdCBjYXNjYWRpbmdcbiAgLy8gd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZExhbmUpIHtcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShsYW5lcywgc2NoZWR1bGVkTGFuZSkpIHtcbiAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pOyAvLyBTdG9yZSB0aGUgY3VycmVudCBzZXQgb2YgaW50ZXJhY3Rpb25zIG9uIHRoZSBGaWJlclJvb3QgZm9yIGEgZmV3IHJlYXNvbnM6XG4gIC8vIFdlIGNhbiByZS11c2UgaXQgaW4gaG90IGZ1bmN0aW9ucyBsaWtlIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCgpXG4gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LiBXZSB3aWxsIGFsc28gdXNlIGl0IGluIGNvbW1pdFdvcmsoKSB0b1xuICAvLyBwYXNzIHRvIGFueSBQcm9maWxlciBvblJlbmRlcigpIGhvb2tzLiBUaGlzIGFsc28gcHJvdmlkZXMgRGV2VG9vbHMgd2l0aCBhXG4gIC8vIHdheSB0byBhY2Nlc3MgaXQgd2hlbiB0aGUgb25Db21taXRSb290KCkgaG9vayBpcyBjYWxsZWQuXG5cbiAgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyA9IGludGVyYWN0aW9ucztcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIEZJWE1FOiBNb3JlIHRoYW4gb25lIGxhbmUgY2FuIGZpbmlzaCBpbiBhIHNpbmdsZSBjb21taXQuXG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZVx1MjAxMyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIGxhbmUpIHtcbiAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGludGVyYWN0aW9uIGNvdW50IGlmIHdlJ3JlIGRvbmUuXG4gICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAvLyBUaGF0IGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBzdXNwZW5zZSBkYXRhLlxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQsIGxhbmUpKSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUobGFuZSk7XG4gICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBgYWN0YCB0ZXN0aW5nIEFQSVxuXG5mdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gIHJldHVybiAgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPiAwO1xufVxuLy8gc28gd2UgY2FuIHRlbGwgaWYgYW55IGFzeW5jIGFjdCgpIGNhbGxzIHRyeSB0byBydW4gaW4gcGFyYWxsZWwuXG5cblxudmFyIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID0gMDtcblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG59XG5cbnZhciByZXNvbHZlRmFtaWx5ID0gbnVsbDsgLy8gJEZsb3dGaXhNZSBGbG93IGdldHMgY29uZnVzZWQgYnkgYSBXZWFrU2V0IGZlYXR1cmUgY2hlY2sgYmVsb3cuXG5cbnZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbnZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIHtcbiAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcmVhbCBmb3J3YXJkUmVmLiBEb24ndCB3YW50IHRvIGNyYXNoIGVhcmx5LlxuICAgICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAvLyBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIG9ubHkgaGF2ZSBpdHMgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGluIHRoZSBtYXAuXG4gICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgaWYgKHR5cGUucmVuZGVyICE9PSBjdXJyZW50UmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgIHJlbmRlcjogY3VycmVudFJlbmRlclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW50aGV0aWNUeXBlLmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgdmFyIG5leHRUeXBlID0gZWxlbWVudC50eXBlOyAvLyBJZiB3ZSBnb3QgaGVyZSwgd2Uga25vdyB0eXBlcyBhcmVuJ3QgPT09IGVxdWFsLlxuXG4gICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPSB0eXBlb2YgbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIG5leHRUeXBlICE9PSBudWxsID8gbmV4dFR5cGUuJCR0eXBlb2YgOiBudWxsO1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaW5uZXIgdHlwZSB5ZXQuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gdW53cmFwIG9yIGFjdHVhbGx5IHVzZSB0aGUgbmV3IGxhenkgdHlwZS5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cblxuICAgIGlmIChuZWVkc0NvbXBhcmVGYW1pbGllcykge1xuICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgLy8gSWYgd2UgdW53cmFwcGVkIGFuZCBjb21wYXJlZCB0aGUgaW5uZXIgdHlwZXMgZm9yIHdyYXBwZXJzIGluc3RlYWQsXG4gICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgdmFyIHByZXZGYW1pbHkgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKTtcblxuICAgICAgaWYgKHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJiBwcmV2RmFtaWx5ID09PSByZXNvbHZlRmFtaWx5KG5leHRUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyA9PT0gbnVsbCkge1xuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpO1xuICB9XG59XG52YXIgc2NoZWR1bGVSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIHVwZGF0ZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcyxcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpO1xuXG4gICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50KSB7XG4gICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQgfHwgbmVlZHNSZW5kZXIpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxudmFyIGRlYnVnQ291bnRlciA9IDE7XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLm5leHRFZmZlY3QgPSBudWxsO1xuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCQxKHR5cGUpICYmIHR5cGUuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHtcbiAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgLy8gbm9kZSB0aGF0IHdlJ3JlIGZyZWUgdG8gcmV1c2UuIFRoaXMgaXMgbGF6aWx5IGNyZWF0ZWQgdG8gYXZvaWQgYWxsb2NhdGluZ1xuICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKGN1cnJlbnQudGFnLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnQua2V5LCBjdXJyZW50Lm1vZGUpO1xuICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgLy8gREVWLW9ubHkgZmllbGRzXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCA9IGN1cnJlbnQuX2RlYnVnSUQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2UgPSBjdXJyZW50Ll9kZWJ1Z1NvdXJjZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzOyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGNsb25lZCB2YWx1ZXMgdGhhdCBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZCd2ZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICAgIH07XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gQmxvY2tpbmdSb290KSB7XG4gICAgbW9kZSA9IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmICggaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnRcdTIwMTNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCQxKHR5cGUpKSB7XG4gICAgICBmaWJlclRhZyA9IENsYXNzQ29tcG9uZW50O1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBEZWJ1Z1RyYWNpbmdNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0Q29uc3VtZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBCbG9jaztcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArICh0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUpICsgXCIuXCIgKyBpbmZvICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIGFzIGEgcHJvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBPZmZzY3JlZW5Db21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoTGVnYWN5SGlkZGVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBMZWdhY3lIaWRkZW4gZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpOyAvLyBUT0RPOiBUaGVzZSBzaG91bGQgbm90IG5lZWQgYSB0eXBlLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gJ0RFTEVURUQnO1xuICBmaWJlci50eXBlID0gJ0RFTEVURUQnO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5uZXh0RWZmZWN0ID0gc291cmNlLm5leHRFZmZlY3Q7XG4gIHRhcmdldC5maXJzdEVmZmVjdCA9IHNvdXJjZS5maXJzdEVmZmVjdDtcbiAgdGFyZ2V0Lmxhc3RFZmZlY3QgPSBzb3VyY2UubGFzdEVmZmVjdDtcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdJRCA9IHNvdXJjZS5fZGVidWdJRDtcbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdGhpcy5ldmVudFRpbWVzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vVGltZXN0YW1wKTtcbiAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5tdXRhYmxlUmVhZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG5cbiAge1xuICAgIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgdGhpcy5pbnRlcmFjdGlvblRocmVhZElEID0gdHJhY2luZy51bnN0YWJsZV9nZXRUaHJlYWRJRCgpO1xuICAgIHRoaXMubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQmxvY2tpbmdSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUJsb2NraW5nUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29uY3VycmVudFJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVMZWdhY3lSb290KCknO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcnNpb24gdXNlZCBmb3Igc2VydmVyIHJlbmRlcmluZyBtYXRjaGVzIHRoZSBvbmVcbi8vIHRoYXQgaXMgZXZlbnR1YWxseSByZWFkIGR1cmluZyBoeWRyYXRpb24uXG4vLyBJZiB0aGV5IGRvbid0IG1hdGNoIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdGVhciBhbmQgYSBmdWxsIGRlb3B0IHJlbmRlciBpcyByZXF1aXJlZC5cblxuZnVuY3Rpb24gcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpIHtcbiAgdmFyIGdldFZlcnNpb24gPSBtdXRhYmxlU291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24obXV0YWJsZVNvdXJjZS5fc291cmNlKTsgLy8gVE9ETyBDbGVhciB0aGlzIGRhdGEgb25jZSBhbGwgcGVuZGluZyBoeWRyYXRpb24gd29yayBpcyBmaW5pc2hlZC5cbiAgLy8gUmV0YWluaW5nIGl0IGZvcmV2ZXIgbWF5IGludGVyZmVyZSB3aXRoIEdDLlxuXG4gIGlmIChyb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPT0gbnVsbCkge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFttdXRhYmxlU291cmNlLCB2ZXJzaW9uXTtcbiAgfSBlbHNlIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIC8vIFRPRE86IGZpZ3VyZSBvdXQgdGhlIEFQSSBmb3IgY3Jvc3MtcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uXG5pbXBsZW1lbnRhdGlvbikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKGZpYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBPYmplY3Qua2V5cyhjb21wb25lbnQpICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChob3N0RmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXIoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB7XG4gICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGN1cnJlbnQkMSk7XG4gICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoY3VycmVudCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5jb250ZXh0ID0gY29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ1JlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyAnICsgJ3RyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiAnICsgJ0lmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuJyArICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBnZXRDb21wb25lbnROYW1lKGN1cnJlbnQudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeUxhbmVJbXBsKGFsdGVybmF0ZSwgcmV0cnlMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eSwgZm4pIHtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICB9XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaG9zdEZpYmVyLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6ICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUmVmcmVzaDogIHNjaGVkdWxlUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSb290OiAgc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogIHNldFJlZnJlc2hIYW5kbGVyICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGFwcGVuZCBvd25lciBzdGFja3MgdG8gZXJyb3IgbWVzc2FnZXMgaW4gREVWIG1vZGUuXG4gICAgZ2V0Q3VycmVudEZpYmVyOiAgZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMgXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgQ29uY3VycmVudFJvb3QsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucyk7XG59XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cblxuICAgIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhyb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoZSAnICsgJ3Jvb3QgY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgXCJyb290LnVubW91bnQoKSB0byBlbXB0eSBhIHJvb3QncyBjb250YWluZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICAvLyBUYWcgaXMgZWl0aGVyIExlZ2FjeVJvb3Qgb3IgQ29uY3VycmVudCBSb290XG4gIHZhciBoeWRyYXRlID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZSA9PT0gdHJ1ZTtcbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgfHwgbnVsbDtcbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlcyB8fCBudWxsO1xuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIHRhZywgaHlkcmF0ZSk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgY29udGFpbmVyTm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAge1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKG11dGFibGVTb3VyY2VzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlc1tpXTtcbiAgICAgIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBMZWdhY3lSb290LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICByZXR1cm4gISEobm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgJykpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIHRvcExldmVsVXBkYXRlV2FybmluZ3M7XG52YXIgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gZmFsc2U7XG5cbntcbiAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lci5faW50ZXJuYWxSb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gISEocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290RWxlbWVudC5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSkge1xuICB2YXIgc2hvdWxkSHlkcmF0ZSA9IGZvcmNlSHlkcmF0ZSB8fCBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKTsgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG5cbiAgaWYgKCFzaG91bGRIeWRyYXRlKSB7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdFNpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkSHlkcmF0ZSAmJiAhZm9yY2VIeWRyYXRlICYmICF3YXJuZWRBYm91dEh5ZHJhdGVBUEkpIHtcbiAgICAgIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ3JlbmRlcigpOiBDYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIHRvIGh5ZHJhdGUgc2VydmVyLXJlbmRlcmVkIG1hcmt1cCAnICsgJ3dpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IHYxOC4gUmVwbGFjZSB0aGUgUmVhY3RET00ucmVuZGVyKCkgY2FsbCAnICsgJ3dpdGggUmVhY3RET00uaHlkcmF0ZSgpIGlmIHlvdSB3YW50IFJlYWN0IHRvIGF0dGFjaCB0byB0aGUgc2VydmVyIEhUTUwuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBzaG91bGRIeWRyYXRlID8ge1xuICAgIGh5ZHJhdGU6IHRydWVcbiAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogdGhyb3cgb3Igd2FybiBpZiB3ZSBjb3VsZG4ndCBoeWRyYXRlP1xuXG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gcmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lck5vZGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYmIGhhcyhwYXJlbnRDb21wb25lbnQpKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInBhcmVudENvbXBvbmVudCBtdXN0IGJlIGEgdmFsaWQgUmVhY3QgQ29tcG9uZW50XCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbnVsbCwgY29udGFpbmVyLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIucGFyZW50Tm9kZSkgJiYgISFjb250YWluZXIucGFyZW50Tm9kZS5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gICAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocnVuV2l0aFByaW9yaXR5JDIpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvcignUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyk7XG5zZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKGJhdGNoZWRVcGRhdGVzJDEsIGRpc2NyZXRlVXBkYXRlcyQxLCBmbHVzaERpc2NyZXRlVXBkYXRlcywgYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKTtcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcblxuICByZXR1cm4gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwpIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gdHJ1ZTtcblxuICAgICAgd2FybignVGhlIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RET00uY3JlYXRlUG9ydGFsKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSSwgJyArICdidXQgd2l0aG91dCB0aGUgXCJ1bnN0YWJsZV9cIiBwcmVmaXguJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIGtleSk7XG59XG5cbnZhciBJbnRlcm5hbHMgPSB7XG4gIC8vIEtlZXAgaW4gc3luYyB3aXRoIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuXG4gIC8vIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUsIGdldE5vZGVGcm9tSW5zdGFuY2UsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBmbHVzaFBhc3NpdmVFZmZlY3RzLCAvLyBUT0RPOiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGFjdGAsIG5vdCBldmVudHMuIE1vdmUgdG8gc2VwYXJhdGUga2V5P1xuICBJc1RoaXNSZW5kZXJlckFjdGluZ11cbn07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYztcbmV4cG9ydHMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsID0gdW5zdGFibGVfY3JlYXRlUG9ydGFsO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7IC8qKi8gfVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArXG4gICAgICAgICAgICAgICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCAiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsICJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCAidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCAiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJBcnJheTtcbiIsICJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsICJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwgInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsICJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwgInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsICJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwgIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBib29sZWFuLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCb29sZWFuKGZhbHNlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQm9vbGVhbihudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCb29sZWFuO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogVG8gZXhjbHVkZSBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gLCB3aGljaCBhcmVcbiAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOdW1iZXIoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc051bWJlcjtcbiIsICJ2YXIgaXNOdW1iZXIgPSByZXF1aXJlKCcuL2lzTnVtYmVyJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICogZ2xvYmFsIFtgaXNOYU5gXShodHRwczovL21kbi5pby9pc05hTikgd2hpY2ggcmV0dXJucyBgdHJ1ZWAgZm9yXG4gKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hTihOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIC8vIEFuIGBOYU5gIHByaW1pdGl2ZSBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuXG4gIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmFOO1xuIiwgIi8qISBAcHJlc2VydmVcbiAqIG51bWVyYWwuanNcbiAqIHZlcnNpb24gOiAyLjAuNlxuICogYXV0aG9yIDogQWRhbSBEcmFwZXJcbiAqIGxpY2Vuc2UgOiBNSVRcbiAqIGh0dHA6Ly9hZGFtd2RyYXBlci5naXRodWIuY29tL051bWVyYWwtanMvXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsb2JhbC5udW1lcmFsID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgVmFyaWFibGVzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdmFyIG51bWVyYWwsXG4gICAgICAgIF8sXG4gICAgICAgIFZFUlNJT04gPSAnMi4wLjYnLFxuICAgICAgICBmb3JtYXRzID0ge30sXG4gICAgICAgIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiAnZW4nLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiAnMCwwJyxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiBkZWZhdWx0cy5jdXJyZW50TG9jYWxlLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogZGVmYXVsdHMuemVyb0Zvcm1hdCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IGRlZmF1bHRzLm51bGxGb3JtYXQsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiBkZWZhdWx0cy5kZWZhdWx0Rm9ybWF0LFxuICAgICAgICAgICAgc2NhbGVQZXJjZW50QnkxMDA6IGRlZmF1bHRzLnNjYWxlUGVyY2VudEJ5MTAwXG4gICAgICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgQ29uc3RydWN0b3JzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLy8gTnVtZXJhbCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTnVtZXJhbChpbnB1dCwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudW1iZXI7XG4gICAgfVxuXG4gICAgbnVtZXJhbCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uLFxuICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgIGlmIChudW1lcmFsLmlzTnVtZXJhbChpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaW5wdXQudmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gMCB8fCB0eXBlb2YgaW5wdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IG51bGwgfHwgXy5pc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIGlucHV0ID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy5udWxsRm9ybWF0IHx8ICFpbnB1dC5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHR5cGVvZiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQgPT09ICdmdW5jdGlvbicgPyBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQoKSA6IGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXhwICYmIGlucHV0Lm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLnVuZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSB1bmZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcjtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdW5mb3JtYXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihpbnB1dCl8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1lcmFsKGlucHV0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIC8vIHZlcnNpb24gbnVtYmVyXG4gICAgbnVtZXJhbC52ZXJzaW9uID0gVkVSU0lPTjtcblxuICAgIC8vIGNvbXBhcmUgbnVtZXJhbCBvYmplY3RcbiAgICBudW1lcmFsLmlzTnVtZXJhbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTnVtZXJhbDtcbiAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICAgIG51bWVyYWwuXyA9IF8gPSB7XG4gICAgICAgIC8vIGZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIG51bWJlclRvRm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgbmVnUCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdERlYyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IDAsXG4gICAgICAgICAgICAgICAgYWJiciA9ICcnLFxuICAgICAgICAgICAgICAgIHRyaWxsaW9uID0gMTAwMDAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBiaWxsaW9uID0gMTAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBtaWxsaW9uID0gMTAwMDAwMCxcbiAgICAgICAgICAgICAgICB0aG91c2FuZCA9IDEwMDAsXG4gICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnLFxuICAgICAgICAgICAgICAgIG5lZyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSwgLy8gZm9yY2UgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgYWJzLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgaW50LFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBzaWduZWQsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmRzLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIG5ldmVyIGZvcm1hdCBhIG51bGwgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgMDtcblxuICAgICAgICAgICAgYWJzID0gTWF0aC5hYnModmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBzZWUgaWYgd2Ugc2hvdWxkIHVzZSBwYXJlbnRoZXNlcyBmb3IgbmVnYXRpdmUgbnVtYmVyIG9yIGlmIHdlIHNob3VsZCBwcmVmaXggd2l0aCBhIHNpZ25cbiAgICAgICAgICAgIC8vIGlmIGJvdGggYXJlIHByZXNlbnQgd2UgZGVmYXVsdCB0byBwYXJlbnRoZXNlc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcoJykpIHtcbiAgICAgICAgICAgICAgICBuZWdQID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvW1xcKHxcXCldL2csICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSA/IGZvcm1hdC5pbmRleE9mKCcrJykgOiB2YWx1ZSA8IDAgPyBmb3JtYXQuaW5kZXhPZignLScpIDogLTE7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCt8XFwtXS9nLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNlZSBpZiBhYmJyZXZpYXRpb24gaXMgd2FudGVkXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2EnKSkge1xuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGZvcm1hdC5tYXRjaCgvYShrfG18Ynx0KT8vKTtcblxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGFiYnJGb3JjZSA/IGFiYnJGb3JjZVsxXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSBhYmJyZXZpYXRpb25cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJiciA9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuZXcgUmVnRXhwKGFiYnIgKyAnYVtrbWJ0XT8nKSwgJycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFicyA+PSB0cmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0cmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IHRyaWxsaW9uICYmIGFicyA+PSBiaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnYicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBiaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgYmlsbGlvbiAmJiBhYnMgPj0gbWlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1pbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IG1pbGxpb24gJiYgYWJzID49IHRob3VzYW5kICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnaycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhvdXNhbmRcbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIHRob3VzYW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9wdGlvbmFsIGRlY2ltYWxzXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ1suXScpKSB7XG4gICAgICAgICAgICAgICAgb3B0RGVjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnWy5dJywgJy4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYnJlYWsgbnVtYmVyIGFuZCBmb3JtYXRcbiAgICAgICAgICAgIGludCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IGZvcm1hdC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgdGhvdXNhbmRzID0gZm9ybWF0LmluZGV4T2YoJywnKTtcbiAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IChmb3JtYXQuc3BsaXQoJy4nKVswXS5zcGxpdCgnLCcpWzBdLm1hdGNoKC8wL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChwcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHByZWNpc2lvbiwgJ1snKSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24ucmVwbGFjZSgnXScsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnNwbGl0KCdbJyk7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgKHByZWNpc2lvblswXS5sZW5ndGggKyBwcmVjaXNpb25bMV0ubGVuZ3RoKSwgcm91bmRpbmdGdW5jdGlvbiwgcHJlY2lzaW9uWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24ubGVuZ3RoLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpbnQgPSBkZWNpbWFsLnNwbGl0KCcuJylbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGRlY2ltYWwsICcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgKyBkZWNpbWFsLnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcHREZWMgJiYgTnVtYmVyKGRlY2ltYWwuc2xpY2UoMSkpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCAwLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgYWJicmV2aWF0aW9uIGFnYWluIGFmdGVyIHJvdW5kaW5nXG4gICAgICAgICAgICBpZiAoYWJiciAmJiAhYWJickZvcmNlICYmIE51bWJlcihpbnQpID49IDEwMDAgJiYgYWJiciAhPT0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBTdHJpbmcoTnVtYmVyKGludCkgLyAxMDAwKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWJicikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLnRob3VzYW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCBudW1iZXJcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoaW50LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIG5lZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnQubGVuZ3RoIDwgbGVhZGluZ0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlYWRpbmdDb3VudCAtIGludC5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ID0gJzAnICsgaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRob3VzYW5kcyA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnJDEnICsgbG9jYWxlLmRlbGltaXRlcnMudGhvdXNhbmRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCcuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbnQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0ID0gaW50ICsgZGVjaW1hbCArIChhYmJyID8gYWJiciA6ICcnKTtcblxuICAgICAgICAgICAgaWYgKG5lZ1ApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAobmVnUCAmJiBuZWcgPyAnKCcgOiAnJykgKyBvdXRwdXQgKyAobmVnUCAmJiBuZWcgPyAnKScgOiAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaWduZWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzaWduZWQgPT09IDAgPyAobmVnID8gJy0nIDogJysnKSArIG91dHB1dCA6IG91dHB1dCArIChuZWcgPyAnLScgOiAnKycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVnKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICctJyArIG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHVuZm9ybWF0cyBudW1iZXJzIHNlcGFyYXRvcnMsIGRlY2ltYWxzIHBsYWNlcywgc2lnbnMsIGFiYnJldmlhdGlvbnNcbiAgICAgICAgc3RyaW5nVG9OdW1iZXI6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdPcmlnaW5hbCA9IHN0cmluZyxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB0aG91c2FuZDogMyxcbiAgICAgICAgICAgICAgICAgICAgbWlsbGlvbjogNixcbiAgICAgICAgICAgICAgICAgICAgYmlsbGlvbjogOSxcbiAgICAgICAgICAgICAgICAgICAgdHJpbGxpb246IDEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb24sXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICByZWdleHA7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnplcm9Gb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBzdHJpbmcgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhc3RyaW5nLnJlcGxhY2UoL1teMC05XSsvZywgJycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgIT09ICcuJykge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwsICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChhYmJyZXZpYXRpb24gaW4gYWJicmV2aWF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKCdbXmEtekEtWl0nICsgbG9jYWxlLmFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSArICcoPzpcXFxcKXwoXFxcXCcgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sICsgJyk/KD86XFxcXCkpPyk/JCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdPcmlnaW5hbC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAqPSBNYXRoLnBvdygxMCwgYWJicmV2aWF0aW9uc1thYmJyZXZpYXRpb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIG51bWJlclxuICAgICAgICAgICAgICAgIHZhbHVlICo9IChzdHJpbmcuc3BsaXQoJy0nKS5sZW5ndGggKyBNYXRoLm1pbihzdHJpbmcuc3BsaXQoJygnKS5sZW5ndGggLSAxLCBzdHJpbmcuc3BsaXQoJyknKS5sZW5ndGggLSAxKSkgJSAyID8gMSA6IC0xO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG5vbiBudW1iZXJzXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1teMC05XFwuXSsvZywgJycpO1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYU46IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzOiBmdW5jdGlvbihzdHJpbmcsIHNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5pbmRleE9mKHNlYXJjaCkgIT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uKHN0cmluZywgc3ViU3RyaW5nLCBzdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyBzdWJTdHJpbmcgKyBzdHJpbmcuc2xpY2Uoc3RhcnQpO1xuICAgICAgICB9LFxuICAgICAgICByZWR1Y2U6IGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjayAvKiwgaW5pdGlhbFZhbHVlKi8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KGFycmF5KSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW4gJiYgIShrIGluIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoayA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdFtrKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChrIGluIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgdFtrXSwgaywgdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZXMgdGhlIG11bHRpcGxpZXIgbmVjZXNzYXJ5IHRvIG1ha2UgeCA+PSAxLFxuICAgICAgICAgKiBlZmZlY3RpdmVseSBlbGltaW5hdGluZyBtaXNjYWxjdWxhdGlvbnMgY2F1c2VkIGJ5XG4gICAgICAgICAqIGZpbml0ZSBwcmVjaXNpb24uXG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBsaWVyOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0geC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPCAyID8gMSA6IE1hdGgucG93KDEwLCBwYXJ0c1sxXS5sZW5ndGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCByZXR1cm5zIHRoZSBtYXhpbXVtXG4gICAgICAgICAqIG11bHRpcGxpZXIgdGhhdCBtdXN0IGJlIHVzZWQgdG8gbm9ybWFsaXplIGFuIG9wZXJhdGlvbiBpbnZvbHZpbmdcbiAgICAgICAgICogYWxsIG9mIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICBjb3JyZWN0aW9uRmFjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbihhY2N1bSwgbmV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBtbiA9IF8ubXVsdGlwbGllcihuZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gPiBtbiA/IGFjY3VtIDogbW47XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRvRml4ZWQoKSB0aGF0IHRyZWF0cyBmbG9hdHMgbW9yZSBsaWtlIGRlY2ltYWxzXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpeGVzIGJpbmFyeSByb3VuZGluZyBpc3N1ZXMgKGVnLiAoMC42MTUpLnRvRml4ZWQoMikgPT09ICcwLjYxJykgdGhhdCBwcmVzZW50XG4gICAgICAgICAqIHByb2JsZW1zIGZvciBhY2NvdW50aW5nLSBhbmQgZmluYW5jZS1yZWxhdGVkIHNvZnR3YXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdG9GaXhlZDogZnVuY3Rpb24odmFsdWUsIG1heERlY2ltYWxzLCByb3VuZGluZ0Z1bmN0aW9uLCBvcHRpb25hbHMpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpLFxuICAgICAgICAgICAgICAgIG1pbkRlY2ltYWxzID0gbWF4RGVjaW1hbHMgLSAob3B0aW9uYWxzIHx8IDApLFxuICAgICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBzbWFsbGVzdCBwcmVjaXNpb24gdmFsdWUgcG9zc2libGUgdG8gYXZvaWQgZXJyb3JzIGZyb20gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25cbiAgICAgICAgICAgIGlmIChzcGxpdFZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uID0gTWF0aC5taW4oTWF0aC5tYXgoc3BsaXRWYWx1ZVsxXS5sZW5ndGgsIG1pbkRlY2ltYWxzKSwgbWF4RGVjaW1hbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IG1pbkRlY2ltYWxzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3dlciA9IE1hdGgucG93KDEwLCBib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgLy8gTXVsdGlwbHkgdXAgYnkgcHJlY2lzaW9uLCByb3VuZCBhY2N1cmF0ZWx5LCB0aGVuIGRpdmlkZSBhbmQgdXNlIG5hdGl2ZSB0b0ZpeGVkKCk6XG4gICAgICAgICAgICBvdXRwdXQgPSAocm91bmRpbmdGdW5jdGlvbih2YWx1ZSArICdlKycgKyBib3VuZGVkUHJlY2lzaW9uKSAvIHBvd2VyKS50b0ZpeGVkKGJvdW5kZWRQcmVjaXNpb24pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzID4gbWF4RGVjaW1hbHMgLSBib3VuZGVkUHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwID0gbmV3IFJlZ0V4cCgnXFxcXC4/MHsxLCcgKyAob3B0aW9uYWxzIC0gKG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikpICsgJ30kJyk7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2Uob3B0aW9uYWxzUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXZhbGlhYmxlIG9wdGlvbnNcbiAgICBudW1lcmFsLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmZvcm1hdHMgPSBmb3JtYXRzO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmxvY2FsZXMgPSBsb2NhbGVzO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIG51bWVyYWwubG9jYWxlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY3VycmVudExvY2FsZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY3VycmVudExvY2FsZTtcbiAgICB9O1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGxvYWRlZCBsb2NhbGUgZGF0YS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudFxuICAgIC8vIGdsb2JhbCBsb2NhbGUgb2JqZWN0LlxuICAgIG51bWVyYWwubG9jYWxlRGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICghbG9jYWxlc1trZXldKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbG9jYWxlIDogJyArIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlc1trZXldO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBvcHRpb25zW3Byb3BlcnR5XSA9IGRlZmF1bHRzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBudW1lcmFsLnplcm9Gb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy56ZXJvRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5udWxsRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLm51bGxGb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiBudWxsO1xuICAgIH07XG5cbiAgICBudW1lcmFsLmRlZmF1bHRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0Rm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogJzAuMCc7XG4gICAgfTtcblxuICAgIG51bWVyYWwucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodGhpc1t0eXBlICsgJ3MnXVtuYW1lXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihuYW1lICsgJyAnICsgdHlwZSArICcgYWxyZWFkeSByZWdpc3RlcmVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1t0eXBlICsgJ3MnXVtuYW1lXSA9IGZvcm1hdDtcblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH07XG5cblxuICAgIG51bWVyYWwudmFsaWRhdGUgPSBmdW5jdGlvbih2YWwsIGN1bHR1cmUpIHtcbiAgICAgICAgdmFyIF9kZWNpbWFsU2VwLFxuICAgICAgICAgICAgX3Rob3VzYW5kU2VwLFxuICAgICAgICAgICAgX2N1cnJTeW1ib2wsXG4gICAgICAgICAgICBfdmFsQXJyYXksXG4gICAgICAgICAgICBfYWJick9iaixcbiAgICAgICAgICAgIF90aG91c2FuZFJlZ0V4LFxuICAgICAgICAgICAgbG9jYWxlRGF0YSxcbiAgICAgICAgICAgIHRlbXA7XG5cbiAgICAgICAgLy9jb2VyY2UgdmFsIHRvIHN0cmluZ1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbCArPSAnJztcblxuICAgICAgICAgICAgaWYgKGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTnVtZXJhbC5qczogVmFsdWUgaXMgbm90IHN0cmluZy4gSXQgaGFzIGJlZW4gY28tZXJjZWQgdG86ICcsIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3RyaW0gd2hpdGVzcGFjZXMgZnJvbSBlaXRoZXIgc2lkZXNcbiAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcblxuICAgICAgICAvL2lmIHZhbCBpcyBqdXN0IGRpZ2l0cyByZXR1cm4gdHJ1ZVxuICAgICAgICBpZiAoISF2YWwubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdmFsIGlzIGVtcHR5IHJldHVybiBmYWxzZVxuICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9nZXQgdGhlIGRlY2ltYWwgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3IgZnJvbSBudW1lcmFsLmxvY2FsZURhdGFcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vY2hlY2sgaWYgdGhlIGN1bHR1cmUgaXMgdW5kZXJzdG9vZCBieSBudW1lcmFsLiBpZiBub3QsIGRlZmF1bHQgaXQgdG8gY3VycmVudCBsb2NhbGVcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEoY3VsdHVyZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEobnVtZXJhbC5sb2NhbGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NldHVwIHRoZSBkZWxpbWl0ZXJzIGFuZCBjdXJyZW5jeSBzeW1ib2wgYmFzZWQgb24gY3VsdHVyZS9sb2NhbGVcbiAgICAgICAgX2N1cnJTeW1ib2wgPSBsb2NhbGVEYXRhLmN1cnJlbmN5LnN5bWJvbDtcbiAgICAgICAgX2FiYnJPYmogPSBsb2NhbGVEYXRhLmFiYnJldmlhdGlvbnM7XG4gICAgICAgIF9kZWNpbWFsU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLmRlY2ltYWw7XG4gICAgICAgIGlmIChsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzID09PSAnLicpIHtcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCA9ICdcXFxcLic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSBsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGluZyBjdXJyZW5jeSBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvXlteXFxkXSsvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2N1cnJTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3ZhbGlkYXRpbmcgYWJicmV2aWF0aW9uIHN5bWJvbFxuICAgICAgICB0ZW1wID0gdmFsLm1hdGNoKC9bXlxcZF0rJC8pO1xuICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzBdICE9PSBfYWJick9iai50aG91c2FuZCAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5taWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLmJpbGxpb24gJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhvdXNhbmRSZWdFeCA9IG5ldyBSZWdFeHAoX3Rob3VzYW5kU2VwICsgJ3syfScpO1xuXG4gICAgICAgIGlmICghdmFsLm1hdGNoKC9bXlxcZC4sXS9nKSkge1xuICAgICAgICAgICAgX3ZhbEFycmF5ID0gdmFsLnNwbGl0KF9kZWNpbWFsU2VwKTtcbiAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCsuKlxcZCQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheVswXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCskLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBOdW1lcmFsIFByb3RvdHlwZVxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIG51bWVyYWwuZm4gPSBOdW1lcmFsLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24oaW5wdXRTdHJpbmcsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGlucHV0U3RyaW5nIHx8IG9wdGlvbnMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbjtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSByb3VuZGluZ0Z1bmN0aW9uXG4gICAgICAgICAgICByb3VuZGluZ0Z1bmN0aW9uID0gcm91bmRpbmdGdW5jdGlvbiB8fCBNYXRoLnJvdW5kO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvcHRpb25zLnplcm9Gb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLnplcm9Gb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsICYmIG9wdGlvbnMubnVsbEZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMubnVsbEZvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChraW5kIGluIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5tYXRjaChmb3JtYXRzW2tpbmRdLnJlZ2V4cHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbiA9IGZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdDtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IGZvcm1hdEZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gKyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDApIC8gY29yckZhY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHN1YnRyYWN0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gLSBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdmFsdWVdLCBjYmFjaywgTWF0aC5yb3VuZCh0aGlzLl92YWx1ZSAqIGNvcnJGYWN0b3IpKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpICogTWF0aC5yb3VuZChjdXJyICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGl2aWRlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFjY3VtICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGN1cnIgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGlmZmVyZW5jZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhudW1lcmFsKHRoaXMuX3ZhbHVlKS5zdWJ0cmFjdCh2YWx1ZSkudmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBEZWZhdWx0IExvY2FsZSAmJiBGb3JtYXRcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdsb2NhbGUnLCAnZW4nLCB7XG4gICAgICAgIGRlbGltaXRlcnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kczogJywnLFxuICAgICAgICAgICAgZGVjaW1hbDogJy4nXG4gICAgICAgIH0sXG4gICAgICAgIGFiYnJldmlhdGlvbnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kOiAnaycsXG4gICAgICAgICAgICBtaWxsaW9uOiAnbScsXG4gICAgICAgICAgICBiaWxsaW9uOiAnYicsXG4gICAgICAgICAgICB0cmlsbGlvbjogJ3QnXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMDtcbiAgICAgICAgICAgIHJldHVybiAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICB9LFxuICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2JwcycsIHtcbiAgICAgICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IC8oQlBTKS8sXG4gICAgICAgICAgICAgICAgdW5mb3JtYXQ6IC8oQlBTKS9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIEJQUycpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDAwMDtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgQlBTXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9CUFMvLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpY2UoLTEsIDAsIHNwYWNlICsgJ0JQUycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICdCUFMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiArKG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpICogMC4wMDAxKS50b0ZpeGVkKDE1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRlY2ltYWwgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDAwLFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddXG4gICAgICAgIH0sXG4gICAgICAgIGJpbmFyeSA9IHtcbiAgICAgICAgICAgIGJhc2U6IDEwMjQsXG4gICAgICAgICAgICBzdWZmaXhlczogWydCJywgJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicsICdQaUInLCAnRWlCJywgJ1ppQicsICdZaUInXVxuICAgICAgICB9O1xuXG4gICAgdmFyIGFsbFN1ZmZpeGVzID0gIGRlY2ltYWwuc3VmZml4ZXMuY29uY2F0KGJpbmFyeS5zdWZmaXhlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsLnN1ZmZpeGVzLmluZGV4T2YoaXRlbSkgPCAwO1xuICAgICAgICB9KSk7XG4gICAgICAgIHZhciB1bmZvcm1hdFJlZ2V4ID0gYWxsU3VmZml4ZXMuam9pbignfCcpO1xuICAgICAgICAvLyBBbGxvdyBzdXBwb3J0IGZvciBCUFMgKGh0dHA6Ly93d3cuaW52ZXN0b3BlZGlhLmNvbS90ZXJtcy9iL2Jhc2lzcG9pbnQuYXNwKVxuICAgICAgICB1bmZvcm1hdFJlZ2V4ID0gJygnICsgdW5mb3JtYXRSZWdleC5yZXBsYWNlKCdCJywgJ0IoPyFQUyknKSArICcpJztcblxuICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdieXRlcycsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKFswXFxzXWk/YikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IG5ldyBSZWdFeHAodW5mb3JtYXRSZWdleClcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGJ5dGVzID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2liJykgPyBiaW5hcnkgOiBkZWNpbWFsLFxuICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYicpIHx8IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgaWInKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXg7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/aT9iLywgJycpO1xuXG4gICAgICAgICAgICBmb3IgKHBvd2VyID0gMDsgcG93ZXIgPD0gYnl0ZXMuc3VmZml4ZXMubGVuZ3RoOyBwb3dlcisrKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5wb3coYnl0ZXMuYmFzZSwgcG93ZXIpO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyICsgMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IDAgfHwgdmFsdWUgPj0gbWluICYmIHZhbHVlIDwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZmZpeCArPSBieXRlcy5zdWZmaXhlc1twb3dlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBtaW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIHN1ZmZpeDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyksXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHBvd2VyID0gZGVjaW1hbC5zdWZmaXhlcy5sZW5ndGggLSAxOyBwb3dlciA+PSAwOyBwb3dlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBkZWNpbWFsLnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGRlY2ltYWwuYmFzZSwgcG93ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBiaW5hcnkuc3VmZml4ZXNbcG93ZXJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyID0gTWF0aC5wb3coYmluYXJ5LmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoYnl0ZXNNdWx0aXBsaWVyIHx8IDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnY3VycmVuY3knLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhcXCQpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBudW1lcmFsLmxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIHN5bWJvbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZTogZm9ybWF0Lm1hdGNoKC9eKFtcXCt8XFwtfFxcKHxcXHN8XFwkXSopLylbMF0sXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyOiBmb3JtYXQubWF0Y2goLyhbXFwrfFxcLXxcXCl8XFxzfFxcJF0qKSQvKVswXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAvLyBzdHJpcCBmb3JtYXQgb2Ygc3BhY2VzIGFuZCAkXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJFxccz8vLCAnJyk7XG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgbnVtYmVyXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYmVmb3JlIGFuZCBhZnRlciBiYXNlZCBvbiB2YWx1ZVxuICAgICAgICAgICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9IHN5bWJvbHMuYmVmb3JlLnJlcGxhY2UoL1tcXC1cXChdLywgJycpO1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYWZ0ZXIgPSBzeW1ib2xzLmFmdGVyLnJlcGxhY2UoL1tcXC1cXCldLywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAgJiYgKCFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICctJykgJiYgIW51bWVyYWwuXy5pbmNsdWRlcyhzeW1ib2xzLmJlZm9yZSwgJygnKSkpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9ICctJyArIHN5bWJvbHMuYmVmb3JlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBiZWZvcmUgc3ltYm9sXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ltYm9scy5iZWZvcmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmJlZm9yZVtpXTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsICcgJywgaSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIGFmdGVyIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHN5bWJvbHMuYWZ0ZXJbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCwgLShzeW1ib2xzLmFmdGVyLmxlbmd0aCAtICgxICsgaSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArICcgJyA6IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbC5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdleHBvbmVudGlhbCcsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKGVcXCt8ZS0pLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKGVcXCt8ZS0pL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFudW1lcmFsLl8uaXNOYU4odmFsdWUpID8gdmFsdWUudG9FeHBvbmVudGlhbCgpIDogJzBlKzAnLFxuICAgICAgICAgICAgICAgIHBhcnRzID0gZXhwb25lbnRpYWwuc3BsaXQoJ2UnKTtcblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL2VbXFwrfFxcLV17MX0wLywgJycpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQoTnVtYmVyKHBhcnRzWzBdKSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArICdlJyArIHBhcnRzWzFdO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZSsnKSA/IHN0cmluZy5zcGxpdCgnZSsnKSA6IHN0cmluZy5zcGxpdCgnZS0nKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihwYXJ0c1swXSksXG4gICAgICAgICAgICAgICAgcG93ZXIgPSBOdW1iZXIocGFydHNbMV0pO1xuXG4gICAgICAgICAgICBwb3dlciA9IG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsICdlLScpID8gcG93ZXIgKj0gLTEgOiBwb3dlcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBudW1lcmFsLl8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3VyciksXG4gICAgICAgICAgICAgICAgICAgIG51bSA9IChhY2N1bSAqIGNvcnJGYWN0b3IpICogKGN1cnIgKiBjb3JyRmFjdG9yKSAvIChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwuXy5yZWR1Y2UoW3ZhbHVlLCBNYXRoLnBvdygxMCwgcG93ZXIpXSwgY2JhY2ssIDEpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ29yZGluYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhvKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgb3JkaW5hbCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgbycpID8gJyAnIDogJyc7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/by8sICcnKTtcblxuICAgICAgICAgICAgb3JkaW5hbCArPSBsb2NhbGUub3JkaW5hbCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIG9yZGluYWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAncGVyY2VudGFnZScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKCUpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKCUpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGFjZSA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgJScpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSAlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJS8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICclJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIHNwYWNlICsgJyUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAqIDAuMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3RpbWUnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyg6KS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyg6KS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIC8gNjAgLyA2MCksXG4gICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkpIC8gNjApLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLnJvdW5kKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkgLSAobWludXRlcyAqIDYwKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBob3VycyArICc6JyArIChtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcykgKyAnOicgKyAoc2Vjb25kcyA8IDEwID8gJzAnICsgc2Vjb25kcyA6IHNlY29uZHMpO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgdGltZUFycmF5ID0gc3RyaW5nLnNwbGl0KCc6JyksXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHR1cm4gaG91cnMgYW5kIG1pbnV0ZXMgaW50byBzZWNvbmRzIGFuZCBhZGQgdGhlbSBhbGwgdXBcbiAgICAgICAgICAgIGlmICh0aW1lQXJyYXkubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwICogNjApO1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzFdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzJdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cbnJldHVybiBudW1lcmFsO1xufSkpO1xuIiwgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCAidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCAidmFyIG1lbW9pemVDYXBwZWQgPSByZXF1aXJlKCcuL19tZW1vaXplQ2FwcGVkJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG52YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb1BhdGg7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCAidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCAidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUVhY2g7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsICJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsICJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCAidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuIiwgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCAiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9sc0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsICJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCAidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCAiLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVJlZ0V4cDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVN5bWJvbDtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsICJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCAidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsICJ2YXIgYmFzZUlzTWFwID0gcmVxdWlyZSgnLi9fYmFzZUlzTWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc01hcChuZXcgTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCAidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsICJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsICJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0ZsYXR0ZW5hYmxlID0gcmVxdWlyZSgnLi9faXNGbGF0dGVuYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsICJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsICJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwgInZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi9mbGF0dGVuJyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXRSZXN0O1xuIiwgInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCB1bmRlZjtcblxuLyoqXG4gKiBEZWNvZGUgYSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNpbXBsZSBxdWVyeSBzdHJpbmcgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHF1ZXJ5KSB7XG4gIHZhciBwYXJzZXIgPSAvKFtePT8jJl0rKT0/KFteJl0qKS9nXG4gICAgLCByZXN1bHQgPSB7fVxuICAgICwgcGFydDtcblxuICB3aGlsZSAocGFydCA9IHBhcnNlci5leGVjKHF1ZXJ5KSkge1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydFsxXSlcbiAgICAgICwgdmFsdWUgPSBkZWNvZGUocGFydFsyXSk7XG5cbiAgICAvL1xuICAgIC8vIFByZXZlbnQgb3ZlcnJpZGluZyBvZiBleGlzdGluZyBwcm9wZXJ0aWVzLiBUaGlzIGVuc3VyZXMgdGhhdCBidWlsZC1pblxuICAgIC8vIG1ldGhvZHMgbGlrZSBgdG9TdHJpbmdgIG9yIF9fcHJvdG9fXyBhcmUgbm90IG92ZXJyaWRlbiBieSBtYWxpY2lvdXNcbiAgICAvLyBxdWVyeXN0cmluZ3MuXG4gICAgLy9cbiAgICAvLyBJbiB0aGUgY2FzZSBpZiBmYWlsZWQgZGVjb2RpbmcsIHdlIHdhbnQgdG8gb21pdCB0aGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgLy8gZnJvbSB0aGUgcmVzdWx0LlxuICAgIC8vXG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBrZXkgaW4gcmVzdWx0KSBjb250aW51ZTtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBxdWVyeSBzdHJpbmcgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXguXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmdpZnkob2JqLCBwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4IHx8ICcnO1xuXG4gIHZhciBwYWlycyA9IFtdXG4gICAgLCB2YWx1ZVxuICAgICwga2V5O1xuXG4gIC8vXG4gIC8vIE9wdGlvbmFsbHkgcHJlZml4IHdpdGggYSAnPycgaWYgbmVlZGVkXG4gIC8vXG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHByZWZpeCkgcHJlZml4ID0gJz8nO1xuXG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIC8vXG4gICAgICAvLyBFZGdlIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG8gZW5jb2RlIHRoZSB2YWx1ZSB0byBhbiBlbXB0eVxuICAgICAgLy8gc3RyaW5nIGluc3RlYWQgb2YgdGhlIHN0cmluZ2lmaWVkIHZhbHVlLlxuICAgICAgLy9cbiAgICAgIGlmICghdmFsdWUgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZiB8fCBpc05hTih2YWx1ZSkpKSB7XG4gICAgICAgIHZhbHVlID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGtleSA9IGVuY29kZShrZXkpO1xuICAgICAgdmFsdWUgPSBlbmNvZGUodmFsdWUpO1xuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGVuY29kZSB0aGUgc3RyaW5ncywgd2Ugc2hvdWxkIGJhaWwgb3V0IGFzIHdlIGRvbid0XG4gICAgICAvLyB3YW50IHRvIGFkZCBpbnZhbGlkIHN0cmluZ3MgdG8gdGhlIHF1ZXJ5LlxuICAgICAgLy9cbiAgICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgcGFpcnMucHVzaChrZXkgKyc9JysgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWlycy5sZW5ndGggPyBwcmVmaXggKyBwYWlycy5qb2luKCcmJykgOiAnJztcbn1cblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmV4cG9ydHMuc3RyaW5naWZ5ID0gcXVlcnlzdHJpbmdpZnk7XG5leHBvcnRzLnBhcnNlID0gcXVlcnlzdHJpbmc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5naWZ5JylcbiAgLCBjb250cm9sT3JXaGl0ZXNwYWNlID0gL15bXFx4MDAtXFx4MjBcXHUwMGEwXFx1MTY4MFxcdTIwMDAtXFx1MjAwYVxcdTIwMjhcXHUyMDI5XFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZl0rL1xuICAsIENSSFRMRiA9IC9bXFxuXFxyXFx0XS9nXG4gICwgc2xhc2hlcyA9IC9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XFwvXFwvL1xuICAsIHBvcnQgPSAvOlxcZCskL1xuICAsIHByb3RvY29scmUgPSAvXihbYS16XVthLXowLTkuKy1dKjopPyhcXC9cXC8pPyhbXFxcXC9dKyk/KFtcXFNcXHNdKikvaVxuICAsIHdpbmRvd3NEcml2ZUxldHRlciA9IC9eW2EtekEtWl06LztcblxuLyoqXG4gKiBSZW1vdmUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHN0ciBTdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgbmV3IHN0cmluZyByZXByZXNlbnRpbmcgYHN0cmAgc3RyaXBwZWQgb2YgY29udHJvbFxuICogICAgIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgZnJvbSBpdHMgYmVnaW5uaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0cmltTGVmdChzdHIpIHtcbiAgcmV0dXJuIChzdHIgPyBzdHIgOiAnJykudG9TdHJpbmcoKS5yZXBsYWNlKGNvbnRyb2xPcldoaXRlc3BhY2UsICcnKTtcbn1cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIHBhcnNlIHJ1bGVzIGZvciB0aGUgVVJMIHBhcnNlciwgaXQgaW5mb3JtcyB0aGUgcGFyc2VyXG4gKiBhYm91dDpcbiAqXG4gKiAwLiBUaGUgY2hhciBpdCBOZWVkcyB0byBwYXJzZSwgaWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgYmUgZG9uZSB1c2luZ1xuICogICAgaW5kZXhPZiwgUmVnRXhwIHVzaW5nIGV4ZWMgYW5kIE5hTiBtZWFucyBzZXQgYXMgY3VycmVudCB2YWx1ZS5cbiAqIDEuIFRoZSBwcm9wZXJ0eSB3ZSBzaG91bGQgc2V0IHdoZW4gcGFyc2luZyB0aGlzIHZhbHVlLlxuICogMi4gSW5kaWNhdGlvbiBpZiBpdCdzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHBhcnNpbmcsIHdoZW4gc2V0IGFzIG51bWJlciBpdCdzXG4gKiAgICB0aGUgdmFsdWUgb2YgZXh0cmEgY2hhcnMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb2ZmLlxuICogMy4gSW5oZXJpdCBmcm9tIGxvY2F0aW9uIGlmIG5vbiBleGlzdGluZyBpbiB0aGUgcGFyc2VyLlxuICogNC4gYHRvTG93ZXJDYXNlYCB0aGUgcmVzdWx0aW5nIHZhbHVlLlxuICovXG52YXIgcnVsZXMgPSBbXG4gIFsnIycsICdoYXNoJ10sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJz8nLCAncXVlcnknXSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgZnVuY3Rpb24gc2FuaXRpemUoYWRkcmVzcywgdXJsKSB7ICAgICAvLyBTYW5pdGl6ZSB3aGF0IGlzIGxlZnQgb2YgdGhlIGFkZHJlc3NcbiAgICByZXR1cm4gaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyBhZGRyZXNzLnJlcGxhY2UoL1xcXFwvZywgJy8nKSA6IGFkZHJlc3M7XG4gIH0sXG4gIFsnLycsICdwYXRobmFtZSddLCAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJ0AnLCAnYXV0aCcsIDFdLCAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgZnJvbnQuXG4gIFtOYU4sICdob3N0JywgdW5kZWZpbmVkLCAxLCAxXSwgICAgICAgLy8gU2V0IGxlZnQgb3ZlciB2YWx1ZS5cbiAgWy86KFxcZCopJC8sICdwb3J0JywgdW5kZWZpbmVkLCAxXSwgICAgLy8gUmVnRXhwIHRoZSBiYWNrLlxuICBbTmFOLCAnaG9zdG5hbWUnLCB1bmRlZmluZWQsIDEsIDFdICAgIC8vIFNldCBsZWZ0IG92ZXIuXG5dO1xuXG4vKipcbiAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQgb3IgaW5oZXJpdGVkIGZyb20uIFRoaXMgaXMgb25seSBuZWVkZWRcbiAqIGZvciBhbGwgbm9uIGJsb2IgVVJMJ3MgYXMgYSBibG9iIFVSTCBkb2VzIG5vdCBpbmNsdWRlIGEgaGFzaCwgb25seSB0aGVcbiAqIG9yaWdpbi5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xudmFyIGlnbm9yZSA9IHsgaGFzaDogMSwgcXVlcnk6IDEgfTtcblxuLyoqXG4gKiBUaGUgbG9jYXRpb24gb2JqZWN0IGRpZmZlcnMgd2hlbiB5b3VyIGNvZGUgaXMgbG9hZGVkIHRocm91Z2ggYSBub3JtYWwgcGFnZSxcbiAqIFdvcmtlciBvciB0aHJvdWdoIGEgd29ya2VyIHVzaW5nIGEgYmxvYi4gQW5kIHdpdGggdGhlIGJsb2JibGUgYmVnaW5zIHRoZVxuICogdHJvdWJsZSBhcyB0aGUgbG9jYXRpb24gb2JqZWN0IHdpbGwgY29udGFpbiB0aGUgVVJMIG9mIHRoZSBibG9iLCBub3QgdGhlXG4gKiBsb2NhdGlvbiBvZiB0aGUgcGFnZSB3aGVyZSBvdXIgY29kZSBpcyBsb2FkZWQgaW4uIFRoZSBhY3R1YWwgb3JpZ2luIGlzXG4gKiBlbmNvZGVkIGluIHRoZSBgcGF0aG5hbWVgIHNvIHdlIGNhbiB0aGFua2Z1bGx5IGdlbmVyYXRlIGEgZ29vZCBcImRlZmF1bHRcIlxuICogbG9jYXRpb24gZnJvbSBpdCBzbyB3ZSBjYW4gZ2VuZXJhdGUgcHJvcGVyIHJlbGF0aXZlIFVSTCdzIGFnYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jIE9wdGlvbmFsIGRlZmF1bHQgbG9jYXRpb24gb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gbG9sY2F0aW9uIG9iamVjdC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gbG9sY2F0aW9uKGxvYykge1xuICB2YXIgZ2xvYmFsVmFyO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gd2luZG93O1xuICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gZ2xvYmFsO1xuICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHNlbGY7XG4gIGVsc2UgZ2xvYmFsVmFyID0ge307XG5cbiAgdmFyIGxvY2F0aW9uID0gZ2xvYmFsVmFyLmxvY2F0aW9uIHx8IHt9O1xuICBsb2MgPSBsb2MgfHwgbG9jYXRpb247XG5cbiAgdmFyIGZpbmFsZGVzdGluYXRpb24gPSB7fVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NcbiAgICAsIGtleTtcblxuICBpZiAoJ2Jsb2I6JyA9PT0gbG9jLnByb3RvY29sKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwodW5lc2NhcGUobG9jLnBhdGhuYW1lKSwge30pO1xuICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwobG9jLCB7fSk7XG4gICAgZm9yIChrZXkgaW4gaWdub3JlKSBkZWxldGUgZmluYWxkZXN0aW5hdGlvbltrZXldO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlKSB7XG4gICAgZm9yIChrZXkgaW4gbG9jKSB7XG4gICAgICBpZiAoa2V5IGluIGlnbm9yZSkgY29udGludWU7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uW2tleV0gPSBsb2Nba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9IHNsYXNoZXMudGVzdChsb2MuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsZGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBUaGUgcHJvdG9jb2wgc2NoZW1lIG9mIHRoZSBVUkxcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvdG9jb2wgc2NoZW1lIGlzIHNwZWNpYWwsIGVsc2UgYGZhbHNlYFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTcGVjaWFsKHNjaGVtZSkge1xuICByZXR1cm4gKFxuICAgIHNjaGVtZSA9PT0gJ2ZpbGU6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2Z0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cHM6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ3dzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3c3M6J1xuICApO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFByb3RvY29sRXh0cmFjdFxuICogQHR5cGUgT2JqZWN0XG4gKiBAcHJvcGVydHkge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgbWF0Y2hlZCBpbiB0aGUgVVJMLCBpbiBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHNsYXNoZXMgYHRydWVgIGlmIHByb3RvY29sIGlzIGZvbGxvd2VkIGJ5IFwiLy9cIiwgZWxzZSBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHJlc3QgUmVzdCBvZiB0aGUgVVJMIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBmcm9tIGEgVVJMIHdpdGgvd2l0aG91dCBkb3VibGUgc2xhc2ggKFwiLy9cIikuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IGxvY2F0aW9uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQcm90b2NvbChhZGRyZXNzLCBsb2NhdGlvbikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG4gIGxvY2F0aW9uID0gbG9jYXRpb24gfHwge307XG5cbiAgdmFyIG1hdGNoID0gcHJvdG9jb2xyZS5leGVjKGFkZHJlc3MpO1xuICB2YXIgcHJvdG9jb2wgPSBtYXRjaFsxXSA/IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgdmFyIGZvcndhcmRTbGFzaGVzID0gISFtYXRjaFsyXTtcbiAgdmFyIG90aGVyU2xhc2hlcyA9ICEhbWF0Y2hbM107XG4gIHZhciBzbGFzaGVzQ291bnQgPSAwO1xuICB2YXIgcmVzdDtcblxuICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICBpZiAob3RoZXJTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbMl0ubGVuZ3RoICsgbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzNdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFszXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3QgPSBtYXRjaFs0XVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm90b2NvbCA9PT0gJ2ZpbGU6Jykge1xuICAgIGlmIChzbGFzaGVzQ291bnQgPj0gMikge1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3BlY2lhbChwcm90b2NvbCkpIHtcbiAgICByZXN0ID0gbWF0Y2hbNF07XG4gIH0gZWxzZSBpZiAocHJvdG9jb2wpIHtcbiAgICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzbGFzaGVzQ291bnQgPj0gMiAmJiBpc1NwZWNpYWwobG9jYXRpb24ucHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgc2xhc2hlczogZm9yd2FyZFNsYXNoZXMgfHwgaXNTcGVjaWFsKHByb3RvY29sKSxcbiAgICBzbGFzaGVzQ291bnQ6IHNsYXNoZXNDb3VudCxcbiAgICByZXN0OiByZXN0XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHJlbGF0aXZlIFVSTCBwYXRobmFtZSBhZ2FpbnN0IGEgYmFzZSBVUkwgcGF0aG5hbWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlbGF0aXZlIFBhdGhuYW1lIG9mIHRoZSByZWxhdGl2ZSBVUkwuXG4gKiBAcGFyYW0ge1N0cmluZ30gYmFzZSBQYXRobmFtZSBvZiB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlc29sdmVkIHBhdGhuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShyZWxhdGl2ZSwgYmFzZSkge1xuICBpZiAocmVsYXRpdmUgPT09ICcnKSByZXR1cm4gYmFzZTtcblxuICB2YXIgcGF0aCA9IChiYXNlIHx8ICcvJykuc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuY29uY2F0KHJlbGF0aXZlLnNwbGl0KCcvJykpXG4gICAgLCBpID0gcGF0aC5sZW5ndGhcbiAgICAsIGxhc3QgPSBwYXRoW2kgLSAxXVxuICAgICwgdW5zaGlmdCA9IGZhbHNlXG4gICAgLCB1cCA9IDA7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChwYXRoW2ldID09PSAnLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGF0aFtpXSA9PT0gJy4uJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIGlmIChpID09PSAwKSB1bnNoaWZ0ID0gdHJ1ZTtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICBpZiAodW5zaGlmdCkgcGF0aC51bnNoaWZ0KCcnKTtcbiAgaWYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSBwYXRoLnB1c2goJycpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4oJy8nKTtcbn1cblxuLyoqXG4gKiBUaGUgYWN0dWFsIFVSTCBpbnN0YW5jZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gb2JqZWN0IHdlJ3ZlIG9wdGVkLWluIHRvXG4gKiBjcmVhdGUgYW4gYWN0dWFsIGNvbnN0cnVjdG9yIGFzIGl0J3MgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQgYW5kXG4gKiBmYXN0ZXIgYW5kIGl0IHBsZWFzZXMgbXkgT0NELlxuICpcbiAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHdlIHNob3VsZCBub3QgdXNlIGBVUkxgIGFzIGNsYXNzIG5hbWUgdG8gcHJldmVudFxuICogY2xhc2hlcyB3aXRoIHRoZSBnbG9iYWwgVVJMIGluc3RhbmNlIHRoYXQgZ290IGludHJvZHVjZWQgaW4gYnJvd3NlcnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gW2xvY2F0aW9uXSBMb2NhdGlvbiBkZWZhdWx0cyBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IFtwYXJzZXJdIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcbiAgYWRkcmVzcyA9IGFkZHJlc3MucmVwbGFjZShDUkhUTEYsICcnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVXJsKSkge1xuICAgIHJldHVybiBuZXcgVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpO1xuICB9XG5cbiAgdmFyIHJlbGF0aXZlLCBleHRyYWN0ZWQsIHBhcnNlLCBpbnN0cnVjdGlvbiwgaW5kZXgsIGtleVxuICAgICwgaW5zdHJ1Y3Rpb25zID0gcnVsZXMuc2xpY2UoKVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NhdGlvblxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaSA9IDA7XG5cbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnRzIGFsbG93cyB0aGlzIG1vZHVsZSB0d28gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gMiBkaWZmZXJlbnQgQVBJOlxuICAvL1xuICAvLyAxLiBOb2RlLmpzJ3MgYHVybC5wYXJzZWAgYXBpIHdoaWNoIGFjY2VwdHMgYSBVUkwsIGJvb2xlYW4gYXMgYXJndW1lbnRzXG4gIC8vICAgIHdoZXJlIHRoZSBib29sZWFuIGluZGljYXRlcyB0aGF0IHRoZSBxdWVyeSBzdHJpbmcgc2hvdWxkIGFsc28gYmUgcGFyc2VkLlxuICAvL1xuICAvLyAyLiBUaGUgYFVSTGAgaW50ZXJmYWNlIG9mIHRoZSBicm93c2VyIHdoaWNoIGFjY2VwdHMgYSBVUkwsIG9iamVjdCBhc1xuICAvLyAgICBhcmd1bWVudHMuIFRoZSBzdXBwbGllZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgdmFsdWVzIC8gZmFsbC1iYWNrXG4gIC8vICAgIGZvciByZWxhdGl2ZSBwYXRocy5cbiAgLy9cbiAgaWYgKCdvYmplY3QnICE9PSB0eXBlICYmICdzdHJpbmcnICE9PSB0eXBlKSB7XG4gICAgcGFyc2VyID0gbG9jYXRpb247XG4gICAgbG9jYXRpb24gPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlciAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgcGFyc2VyKSBwYXJzZXIgPSBxcy5wYXJzZTtcblxuICBsb2NhdGlvbiA9IGxvbGNhdGlvbihsb2NhdGlvbik7XG5cbiAgLy9cbiAgLy8gRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuICAvL1xuICBleHRyYWN0ZWQgPSBleHRyYWN0UHJvdG9jb2woYWRkcmVzcyB8fCAnJywgbG9jYXRpb24pO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKFxuICAgIGV4dHJhY3RlZC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyAmJiAoXG4gICAgICBleHRyYWN0ZWQuc2xhc2hlc0NvdW50ICE9PSAyIHx8IHdpbmRvd3NEcml2ZUxldHRlci50ZXN0KGFkZHJlc3MpKSB8fFxuICAgICghZXh0cmFjdGVkLnNsYXNoZXMgJiZcbiAgICAgIChleHRyYWN0ZWQucHJvdG9jb2wgfHxcbiAgICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCA8IDIgfHxcbiAgICAgICAgIWlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSlcbiAgKSB7XG4gICAgaW5zdHJ1Y3Rpb25zWzNdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG4gIH1cblxuICBmb3IgKDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYWRkcmVzcyA9IGluc3RydWN0aW9uKGFkZHJlc3MsIHVybCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaW5kZXggPSBwYXJzZSA9PT0gJ0AnXG4gICAgICAgID8gYWRkcmVzcy5sYXN0SW5kZXhPZihwYXJzZSlcbiAgICAgICAgOiBhZGRyZXNzLmluZGV4T2YocGFyc2UpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGluc3RydWN0aW9uWzJdKSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZShpbmRleCArIGluc3RydWN0aW9uWzJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGluZGV4ID0gcGFyc2UuZXhlYyhhZGRyZXNzKSkpIHtcbiAgICAgIHVybFtrZXldID0gaW5kZXhbMV07XG4gICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleC5pbmRleCk7XG4gICAgfVxuXG4gICAgdXJsW2tleV0gPSB1cmxba2V5XSB8fCAoXG4gICAgICByZWxhdGl2ZSAmJiBpbnN0cnVjdGlvblszXSA/IGxvY2F0aW9uW2tleV0gfHwgJycgOiAnJ1xuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIEhvc3RuYW1lLCBob3N0IGFuZCBwcm90b2NvbCBzaG91bGQgYmUgbG93ZXJjYXNlZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvXG4gICAgLy8gY3JlYXRlIGEgcHJvcGVyIGBvcmlnaW5gLlxuICAgIC8vXG4gICAgaWYgKGluc3RydWN0aW9uWzRdKSB1cmxba2V5XSA9IHVybFtrZXldLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvL1xuICAvLyBBbHNvIHBhcnNlIHRoZSBzdXBwbGllZCBxdWVyeSBzdHJpbmcgaW4gdG8gYW4gb2JqZWN0LiBJZiB3ZSdyZSBzdXBwbGllZFxuICAvLyB3aXRoIGEgY3VzdG9tIHBhcnNlciBhcyBmdW5jdGlvbiB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJ1aWxkLWluXG4gIC8vIHBhcnNlci5cbiAgLy9cbiAgaWYgKHBhcnNlcikgdXJsLnF1ZXJ5ID0gcGFyc2VyKHVybC5xdWVyeSk7XG5cbiAgLy9cbiAgLy8gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSB0aGUgcGF0aG5hbWUgYWdhaW5zdCB0aGUgYmFzZSBVUkwuXG4gIC8vXG4gIGlmIChcbiAgICAgIHJlbGF0aXZlXG4gICAgJiYgbG9jYXRpb24uc2xhc2hlc1xuICAgICYmIHVybC5wYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJ1xuICAgICYmICh1cmwucGF0aG5hbWUgIT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lICE9PSAnJylcbiAgKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gcmVzb2x2ZSh1cmwucGF0aG5hbWUsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfVxuXG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYSAvIGZvciBwYXRobmFtZSBpZiBub25lIGV4aXN0cy4gVGhpcyBub3JtYWxpemVzIHRoZSBVUkxcbiAgLy8gdG8gYWx3YXlzIGhhdmUgYSAvXG4gIC8vXG4gIGlmICh1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwucGF0aG5hbWUgPSAnLycgKyB1cmwucGF0aG5hbWU7XG4gIH1cblxuICAvL1xuICAvLyBXZSBzaG91bGQgbm90IGFkZCBwb3J0IG51bWJlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlclxuICAvLyBmb3IgYSBnaXZlbiBwcm90b2NvbC4gQXMgdGhlIGhvc3QgYWxzbyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgd2UncmUgZ29pbmdcbiAgLy8gb3ZlcnJpZGUgaXQgd2l0aCB0aGUgaG9zdG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcG9ydCBudW1iZXIuXG4gIC8vXG4gIGlmICghcmVxdWlyZWQodXJsLnBvcnQsIHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB1cmwucG9ydCA9ICcnO1xuICB9XG5cbiAgLy9cbiAgLy8gUGFyc2UgZG93biB0aGUgYGF1dGhgIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAvL1xuICB1cmwudXNlcm5hbWUgPSB1cmwucGFzc3dvcmQgPSAnJztcblxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBpbmRleCA9IHVybC5hdXRoLmluZGV4T2YoJzonKTtcblxuICAgIGlmICh+aW5kZXgpIHtcbiAgICAgIHVybC51c2VybmFtZSA9IHVybC5hdXRoLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSk7XG5cbiAgICAgIHVybC5wYXNzd29yZCA9IHVybC5hdXRoLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLmF1dGgpKTtcbiAgICB9XG5cbiAgICB1cmwuYXV0aCA9IHVybC5wYXNzd29yZCA/IHVybC51c2VybmFtZSArJzonKyB1cmwucGFzc3dvcmQgOiB1cmwudXNlcm5hbWU7XG4gIH1cblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9IFVSTCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmIChwb3J0LnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgdXJsLnBvcnQgPSB2YWx1ZS5wb3AoKTtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWUuam9pbignOicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWU7XG4gICAgICAgIHVybC5wb3J0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncHJvdG9jb2wnOlxuICAgICAgdXJsLnByb3RvY29sID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVybC5zbGFzaGVzID0gIWZuO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwYXRobmFtZSc6XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGNoYXIgPSBwYXJ0ID09PSAncGF0aG5hbWUnID8gJy8nIDogJyMnO1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZS5jaGFyQXQoMCkgIT09IGNoYXIgPyBjaGFyICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd1c2VybmFtZSc6XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdXJsW3BhcnRdID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0aCc6XG4gICAgICB2YXIgaW5kZXggPSB2YWx1ZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gdmFsdWUuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICAgIHVybC5wYXNzd29yZCA9IHZhbHVlLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHVybC5wYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlucyA9IHJ1bGVzW2ldO1xuXG4gICAgaWYgKGluc1s0XSkgdXJsW2luc1sxXV0gPSB1cmxbaW5zWzFdXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiYgdXJsLmhvc3RcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGJhY2sgaW4gdG8gYSB2YWxpZCBhbmQgZnVsbCBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZ2lmeSBPcHRpb25hbCBxdWVyeSBzdHJpbmdpZnkgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBDb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBVUkwuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHN0cmluZ2lmeSkge1xuICBpZiAoIXN0cmluZ2lmeSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygc3RyaW5naWZ5KSBzdHJpbmdpZnkgPSBxcy5zdHJpbmdpZnk7XG5cbiAgdmFyIHF1ZXJ5XG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBob3N0ID0gdXJsLmhvc3RcbiAgICAsIHByb3RvY29sID0gdXJsLnByb3RvY29sO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5jaGFyQXQocHJvdG9jb2wubGVuZ3RoIC0gMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIHZhciByZXN1bHQgPVxuICAgIHByb3RvY29sICtcbiAgICAoKHVybC5wcm90b2NvbCAmJiB1cmwuc2xhc2hlcykgfHwgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyAnLy8nIDogJycpO1xuXG4gIGlmICh1cmwudXNlcm5hbWUpIHtcbiAgICByZXN1bHQgKz0gdXJsLnVzZXJuYW1lO1xuICAgIGlmICh1cmwucGFzc3dvcmQpIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKHVybC5wYXNzd29yZCkge1xuICAgIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKFxuICAgIHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmXG4gICAgIWhvc3QgJiZcbiAgICB1cmwucGF0aG5hbWUgIT09ICcvJ1xuICApIHtcbiAgICAvL1xuICAgIC8vIEFkZCBiYWNrIHRoZSBlbXB0eSB1c2VyaW5mbywgb3RoZXJ3aXNlIHRoZSBvcmlnaW5hbCBpbnZhbGlkIFVSTFxuICAgIC8vIG1pZ2h0IGJlIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUgd2l0aCBgdXJsLnBhdGhuYW1lYCBhcyBob3N0LlxuICAgIC8vXG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIC8vXG4gIC8vIFRyYWlsaW5nIGNvbG9uIGlzIHJlbW92ZWQgZnJvbSBgdXJsLmhvc3RgIHdoZW4gaXQgaXMgcGFyc2VkLiBJZiBpdCBzdGlsbFxuICAvLyBlbmRzIHdpdGggYSBjb2xvbiwgdGhlbiBhZGQgYmFjayB0aGUgdHJhaWxpbmcgY29sb24gdGhhdCB3YXMgcmVtb3ZlZC4gVGhpc1xuICAvLyBwcmV2ZW50cyBhbiBpbnZhbGlkIFVSTCBmcm9tIGJlaW5nIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUuXG4gIC8vXG4gIGlmIChob3N0W2hvc3QubGVuZ3RoIC0gMV0gPT09ICc6JyB8fCAocG9ydC50ZXN0KHVybC5ob3N0bmFtZSkgJiYgIXVybC5wb3J0KSkge1xuICAgIGhvc3QgKz0gJzonO1xuICB9XG5cbiAgcmVzdWx0ICs9IGhvc3QgKyB1cmwucGF0aG5hbWU7XG5cbiAgcXVlcnkgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHVybC5xdWVyeSA/IHN0cmluZ2lmeSh1cmwucXVlcnkpIDogdXJsLnF1ZXJ5O1xuICBpZiAocXVlcnkpIHJlc3VsdCArPSAnPycgIT09IHF1ZXJ5LmNoYXJBdCgwKSA/ICc/JysgcXVlcnkgOiBxdWVyeTtcblxuICBpZiAodXJsLmhhc2gpIHJlc3VsdCArPSB1cmwuaGFzaDtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5VcmwucHJvdG90eXBlID0geyBzZXQ6IHNldCwgdG9TdHJpbmc6IHRvU3RyaW5nIH07XG5cbi8vXG4vLyBFeHBvc2UgdGhlIFVSTCBwYXJzZXIgYW5kIHNvbWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgdXNlZnVsIGZvclxuLy8gb3RoZXJzIG9yIHRlc3RpbmcuXG4vL1xuVXJsLmV4dHJhY3RQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbDtcblVybC5sb2NhdGlvbiA9IGxvbGNhdGlvbjtcblVybC50cmltTGVmdCA9IHRyaW1MZWZ0O1xuVXJsLnFzID0gcXM7XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG5cdHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBzaXplclN0eWxlID0ge1xuXHRwb3NpdGlvbjogJ2Fic29sdXRlJyxcblx0dG9wOiAwLFxuXHRsZWZ0OiAwLFxuXHR2aXNpYmlsaXR5OiAnaGlkZGVuJyxcblx0aGVpZ2h0OiAwLFxuXHRvdmVyZmxvdzogJ3Njcm9sbCcsXG5cdHdoaXRlU3BhY2U6ICdwcmUnXG59O1xuXG52YXIgSU5QVVRfUFJPUFNfQkxBQ0tMSVNUID0gWydleHRyYVdpZHRoJywgJ2luamVjdFN0eWxlcycsICdpbnB1dENsYXNzTmFtZScsICdpbnB1dFJlZicsICdpbnB1dFN0eWxlJywgJ21pbldpZHRoJywgJ29uQXV0b3NpemUnLCAncGxhY2Vob2xkZXJJc01pbldpZHRoJ107XG5cbnZhciBjbGVhbklucHV0UHJvcHMgPSBmdW5jdGlvbiBjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcykge1xuXHRJTlBVVF9QUk9QU19CTEFDS0xJU1QuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcblx0XHRyZXR1cm4gZGVsZXRlIGlucHV0UHJvcHNbZmllbGRdO1xuXHR9KTtcblx0cmV0dXJuIGlucHV0UHJvcHM7XG59O1xuXG52YXIgY29weVN0eWxlcyA9IGZ1bmN0aW9uIGNvcHlTdHlsZXMoc3R5bGVzLCBub2RlKSB7XG5cdG5vZGUuc3R5bGUuZm9udFNpemUgPSBzdHlsZXMuZm9udFNpemU7XG5cdG5vZGUuc3R5bGUuZm9udEZhbWlseSA9IHN0eWxlcy5mb250RmFtaWx5O1xuXHRub2RlLnN0eWxlLmZvbnRXZWlnaHQgPSBzdHlsZXMuZm9udFdlaWdodDtcblx0bm9kZS5zdHlsZS5mb250U3R5bGUgPSBzdHlsZXMuZm9udFN0eWxlO1xuXHRub2RlLnN0eWxlLmxldHRlclNwYWNpbmcgPSBzdHlsZXMubGV0dGVyU3BhY2luZztcblx0bm9kZS5zdHlsZS50ZXh0VHJhbnNmb3JtID0gc3R5bGVzLnRleHRUcmFuc2Zvcm07XG59O1xuXG52YXIgaXNJRSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyAvTVNJRSB8VHJpZGVudFxcL3xFZGdlXFwvLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSA6IGZhbHNlO1xuXG52YXIgZ2VuZXJhdGVJZCA9IGZ1bmN0aW9uIGdlbmVyYXRlSWQoKSB7XG5cdC8vIHdlIG9ubHkgbmVlZCBhbiBhdXRvLWdlbmVyYXRlZCBJRCBmb3Igc3R5bGVzaGVldCBpbmplY3Rpb24sIHdoaWNoIGlzIG9ubHlcblx0Ly8gdXNlZCBmb3IgSUUuIHNvIGlmIHRoZSBicm93c2VyIGlzIG5vdCBJRSwgdGhpcyBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZC5cblx0cmV0dXJuIGlzSUUgPyAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTIpIDogdW5kZWZpbmVkO1xufTtcblxudmFyIEF1dG9zaXplSW5wdXQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfaW5oZXJpdHMoQXV0b3NpemVJbnB1dCwgX0NvbXBvbmVudCk7XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIG51bGwsIFt7XG5cdFx0a2V5OiAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuXHRcdFx0dmFyIGlkID0gcHJvcHMuaWQ7XG5cblx0XHRcdHJldHVybiBpZCAhPT0gc3RhdGUucHJldklkID8geyBpbnB1dElkOiBpZCB8fCBnZW5lcmF0ZUlkKCksIHByZXZJZDogaWQgfSA6IG51bGw7XG5cdFx0fVxuXHR9XSk7XG5cblx0ZnVuY3Rpb24gQXV0b3NpemVJbnB1dChwcm9wcykge1xuXHRcdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBdXRvc2l6ZUlucHV0KTtcblxuXHRcdHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChBdXRvc2l6ZUlucHV0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQXV0b3NpemVJbnB1dCkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuXHRcdF90aGlzLmlucHV0UmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5pbnB1dCA9IGVsO1xuXHRcdFx0aWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5pbnB1dFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRfdGhpcy5wcm9wcy5pbnB1dFJlZihlbCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdF90aGlzLnBsYWNlSG9sZGVyU2l6ZXJSZWYgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdF90aGlzLnBsYWNlSG9sZGVyU2l6ZXIgPSBlbDtcblx0XHR9O1xuXG5cdFx0X3RoaXMuc2l6ZXJSZWYgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdF90aGlzLnNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnN0YXRlID0ge1xuXHRcdFx0aW5wdXRXaWR0aDogcHJvcHMubWluV2lkdGgsXG5cdFx0XHRpbnB1dElkOiBwcm9wcy5pZCB8fCBnZW5lcmF0ZUlkKCksXG5cdFx0XHRwcmV2SWQ6IHByb3BzLmlkXG5cdFx0fTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRfY3JlYXRlQ2xhc3MoQXV0b3NpemVJbnB1dCwgW3tcblx0XHRrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuY29weUlucHV0U3R5bGVzKCk7XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnREaWRVcGRhdGUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcblx0XHRcdGlmIChwcmV2U3RhdGUuaW5wdXRXaWR0aCAhPT0gdGhpcy5zdGF0ZS5pbnB1dFdpZHRoKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkF1dG9zaXplID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9wcy5vbkF1dG9zaXplKHRoaXMuc3RhdGUuaW5wdXRXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMudXBkYXRlSW5wdXRXaWR0aCgpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG5cdFx0XHR0aGlzLm1vdW50ZWQgPSBmYWxzZTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb3B5SW5wdXRTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb3B5SW5wdXRTdHlsZXMoKSB7XG5cdFx0XHRpZiAoIXRoaXMubW91bnRlZCB8fCAhd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGlucHV0U3R5bGVzID0gdGhpcy5pbnB1dCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmlucHV0KTtcblx0XHRcdGlmICghaW5wdXRTdHlsZXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29weVN0eWxlcyhpbnB1dFN0eWxlcywgdGhpcy5zaXplcik7XG5cdFx0XHRpZiAodGhpcy5wbGFjZUhvbGRlclNpemVyKSB7XG5cdFx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMucGxhY2VIb2xkZXJTaXplcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAndXBkYXRlSW5wdXRXaWR0aCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUlucHV0V2lkdGgoKSB7XG5cdFx0XHRpZiAoIXRoaXMubW91bnRlZCB8fCAhdGhpcy5zaXplciB8fCB0eXBlb2YgdGhpcy5zaXplci5zY3JvbGxXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIG5ld0lucHV0V2lkdGggPSB2b2lkIDA7XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5wbGFjZWhvbGRlciAmJiAoIXRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy52YWx1ZSAmJiB0aGlzLnByb3BzLnBsYWNlaG9sZGVySXNNaW5XaWR0aCkpIHtcblx0XHRcdFx0bmV3SW5wdXRXaWR0aCA9IE1hdGgubWF4KHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGgsIHRoaXMucGxhY2VIb2xkZXJTaXplci5zY3JvbGxXaWR0aCkgKyAyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3SW5wdXRXaWR0aCA9IHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggKyAyO1xuXHRcdFx0fVxuXHRcdFx0Ly8gYWRkIGV4dHJhV2lkdGggdG8gdGhlIGRldGVjdGVkIHdpZHRoLiBmb3IgbnVtYmVyIHR5cGVzLCB0aGlzIGRlZmF1bHRzIHRvIDE2IHRvIGFsbG93IGZvciB0aGUgc3RlcHBlciBVSVxuXHRcdFx0dmFyIGV4dHJhV2lkdGggPSB0aGlzLnByb3BzLnR5cGUgPT09ICdudW1iZXInICYmIHRoaXMucHJvcHMuZXh0cmFXaWR0aCA9PT0gdW5kZWZpbmVkID8gMTYgOiBwYXJzZUludCh0aGlzLnByb3BzLmV4dHJhV2lkdGgpIHx8IDA7XG5cdFx0XHRuZXdJbnB1dFdpZHRoICs9IGV4dHJhV2lkdGg7XG5cdFx0XHRpZiAobmV3SW5wdXRXaWR0aCA8IHRoaXMucHJvcHMubWluV2lkdGgpIHtcblx0XHRcdFx0bmV3SW5wdXRXaWR0aCA9IHRoaXMucHJvcHMubWluV2lkdGg7XG5cdFx0XHR9XG5cdFx0XHRpZiAobmV3SW5wdXRXaWR0aCAhPT0gdGhpcy5zdGF0ZS5pbnB1dFdpZHRoKSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdGlucHV0V2lkdGg6IG5ld0lucHV0V2lkdGhcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZ2V0SW5wdXQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRJbnB1dCgpIHtcblx0XHRcdHJldHVybiB0aGlzLmlucHV0O1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2ZvY3VzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZm9jdXMoKSB7XG5cdFx0XHR0aGlzLmlucHV0LmZvY3VzKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnYmx1cicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJsdXIoKSB7XG5cdFx0XHR0aGlzLmlucHV0LmJsdXIoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdzZWxlY3QnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzZWxlY3QoKSB7XG5cdFx0XHR0aGlzLmlucHV0LnNlbGVjdCgpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlclN0eWxlcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcblx0XHRcdC8vIHRoaXMgbWV0aG9kIGluamVjdHMgc3R5bGVzIHRvIGhpZGUgSUUncyBjbGVhciBpbmRpY2F0b3IsIHdoaWNoIG1lc3Nlc1xuXHRcdFx0Ly8gd2l0aCBpbnB1dCBzaXplIGRldGVjdGlvbi4gdGhlIHN0eWxlc2hlZXQgaXMgb25seSBpbmplY3RlZCB3aGVuIHRoZVxuXHRcdFx0Ly8gYnJvd3NlciBpcyBJRSwgYW5kIGNhbiBhbHNvIGJlIGRpc2FibGVkIGJ5IHRoZSBgaW5qZWN0U3R5bGVzYCBwcm9wLlxuXHRcdFx0dmFyIGluamVjdFN0eWxlcyA9IHRoaXMucHJvcHMuaW5qZWN0U3R5bGVzO1xuXG5cdFx0XHRyZXR1cm4gaXNJRSAmJiBpbmplY3RTdHlsZXMgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnc3R5bGUnLCB7IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7XG5cdFx0XHRcdFx0X19odG1sOiAnaW5wdXQjJyArIHRoaXMuc3RhdGUuaW5wdXRJZCArICc6Oi1tcy1jbGVhciB7ZGlzcGxheTogbm9uZTt9J1xuXHRcdFx0XHR9IH0pIDogbnVsbDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgc2l6ZXJWYWx1ZSA9IFt0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSwgdGhpcy5wcm9wcy52YWx1ZSwgJyddLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdGlmIChwcmV2aW91c1ZhbHVlICE9PSBudWxsICYmIHByZXZpb3VzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjdXJyZW50VmFsdWU7XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIHdyYXBwZXJTdHlsZSA9IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLnN0eWxlKTtcblx0XHRcdGlmICghd3JhcHBlclN0eWxlLmRpc3BsYXkpIHdyYXBwZXJTdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cblx0XHRcdHZhciBpbnB1dFN0eWxlID0gX2V4dGVuZHMoe1xuXHRcdFx0XHRib3hTaXppbmc6ICdjb250ZW50LWJveCcsXG5cdFx0XHRcdHdpZHRoOiB0aGlzLnN0YXRlLmlucHV0V2lkdGggKyAncHgnXG5cdFx0XHR9LCB0aGlzLnByb3BzLmlucHV0U3R5bGUpO1xuXG5cdFx0XHR2YXIgaW5wdXRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyh0aGlzLnByb3BzLCBbXSk7XG5cblx0XHRcdGNsZWFuSW5wdXRQcm9wcyhpbnB1dFByb3BzKTtcblx0XHRcdGlucHV0UHJvcHMuY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZTtcblx0XHRcdGlucHV0UHJvcHMuaWQgPSB0aGlzLnN0YXRlLmlucHV0SWQ7XG5cdFx0XHRpbnB1dFByb3BzLnN0eWxlID0gaW5wdXRTdHlsZTtcblxuXHRcdFx0cmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6IHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZTogd3JhcHBlclN0eWxlIH0sXG5cdFx0XHRcdHRoaXMucmVuZGVyU3R5bGVzKCksXG5cdFx0XHRcdF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCB7IHJlZjogdGhpcy5pbnB1dFJlZiB9KSksXG5cdFx0XHRcdF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgcmVmOiB0aGlzLnNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHNpemVyVmFsdWVcblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5wcm9wcy5wbGFjZWhvbGRlciA/IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgcmVmOiB0aGlzLnBsYWNlSG9sZGVyU2l6ZXJSZWYsIHN0eWxlOiBzaXplclN0eWxlIH0sXG5cdFx0XHRcdFx0dGhpcy5wcm9wcy5wbGFjZWhvbGRlclxuXHRcdFx0XHQpIDogbnVsbFxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gQXV0b3NpemVJbnB1dDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbkF1dG9zaXplSW5wdXQucHJvcFR5cGVzID0ge1xuXHRjbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBjbGFzc05hbWUgZm9yIHRoZSBvdXRlciBlbGVtZW50XG5cdGRlZmF1bHRWYWx1ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5hbnksIC8vIGRlZmF1bHQgZmllbGQgdmFsdWVcblx0ZXh0cmFXaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIGFkZGl0aW9uYWwgd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdGlkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gaWQgdG8gdXNlIGZvciB0aGUgaW5wdXQsIGNhbiBiZSBzZXQgZm9yIGNvbnNpc3RlbnQgc25hcHNob3RzXG5cdGluamVjdFN0eWxlczogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLCAvLyBpbmplY3QgdGhlIGN1c3RvbSBzdHlsZXNoZWV0IHRvIGhpZGUgY2xlYXIgVUksIGRlZmF1bHRzIHRvIHRydWVcblx0aW5wdXRDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBjbGFzc05hbWUgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0UmVmOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsIC8vIHJlZiBjYWxsYmFjayBmb3IgdGhlIGlucHV0IGVsZW1lbnRcblx0aW5wdXRTdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIC8vIGNzcyBzdHlsZXMgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdG1pbldpZHRoOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbLy8gbWluaW11bSB3aWR0aCBmb3IgaW5wdXQgZWxlbWVudFxuXHRfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmddKSxcblx0b25BdXRvc2l6ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBvbkF1dG9zaXplIGhhbmRsZXI6IGZ1bmN0aW9uKG5ld1dpZHRoKSB7fVxuXHRvbkNoYW5nZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBvbkNoYW5nZSBoYW5kbGVyOiBmdW5jdGlvbihldmVudCkge31cblx0cGxhY2Vob2xkZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBwbGFjZWhvbGRlciB0ZXh0XG5cdHBsYWNlaG9sZGVySXNNaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLCAvLyBkb24ndCBjb2xsYXBzZSBzaXplIHRvIGxlc3MgdGhhbiB0aGUgcGxhY2Vob2xkZXJcblx0c3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHR2YWx1ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5hbnkgLy8gZmllbGQgdmFsdWVcbn07XG5BdXRvc2l6ZUlucHV0LmRlZmF1bHRQcm9wcyA9IHtcblx0bWluV2lkdGg6IDEsXG5cdGluamVjdFN0eWxlczogdHJ1ZVxufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gQXV0b3NpemVJbnB1dDsiLCAiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5pbXBvcnQge1xuICBFdWlDb21ib0JveCxcbiAgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LFxuICBldWlQYWxldHRlQ29sb3JCbGluZCxcbiAgRXVpSGlnaGxpZ2h0LFxuICBFdWlIZWFsdGgsXG4gIEV1aVByb3ZpZGVyXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsLFxuICAgIGFsbG93Q3VzdG9tVGVybXMsXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNpbmdsZVNlbGVjdGlvbixcbiAgICBzaW5nbGVTdWdnZXN0aW9uUm93LFxuICAgIHRzNG5mZGlHYXRld2F5ID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHZpc0NvbG9ycyA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKCk7XG4gIGNvbnN0IHZpc0NvbG9yc0JlaGluZFRleHQgPSBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc2VhcmNoIHZhbHVlXG4gICAqL1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIG9wdGlvbnMuc1xuICAgKi9cbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvKipcbiAgICogU3RvcmUgY3VycmVudCBzZXQgb2Ygc2VsZWN0IE9wdGlvbnMuIEEgc3Vic2V0IG9mIG9wdGlvbnMuXG4gICAqL1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVuZGVyT3B0aW9uID0gKG9wdGlvbiwgc2VhcmNoVmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCB2YWx1ZSB9ID0gb3B0aW9uO1xuICAgIGNvbnN0IGRvdENvbG9ySW5kZXggPSB2aXNDb2xvcnNCZWhpbmRUZXh0LmluZGV4T2YodmFsdWUudHlwZSA9PT0gXCJjbGFzc1wiID8gdmlzQ29sb3JzQmVoaW5kVGV4dFs1XSA6XG4gICAgICB2YWx1ZS50eXBlID09PSBcImluZGl2aWR1YWxcIiA/IHZpc0NvbG9yc0JlaGluZFRleHRbM10gOlxuICAgICAgICB2YWx1ZS50eXBlID09PSBcInByb3BlcnR5XCIgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzFdIDogXCJcIik7XG4gICAgY29uc3QgZG90Q29sb3IgPSB2aXNDb2xvcnNbZG90Q29sb3JJbmRleF07XG5cbiAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB2YWx1ZS5pcmkgPT0gXCJcIikgey8vIGlmIHdlIGhhdmUgYSBjdXN0b20gdGVybSwganVzdCBzaG93IHRoZSBsYWJlbFxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cblxuICAgIGxldCBob3ZlclRleHQgPSBcIlwiO1xuICAgIGlmICh2YWx1ZS5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIpIHtcbiAgICAgICAgaG92ZXJUZXh0ID0gXCJUeXBlOiBcIiArIHZhbHVlLnR5cGUgK1xuICAgICAgICAgIFwiXFxuXFxuTGFiZWw6IFwiICsgdmFsdWUubGFiZWwgK1xuICAgICAgICAgIFwiXFxuXFxuUHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgK1xuICAgICAgICAgIFwiXFxuXFxuRGVzY3JpcHRpb246IFwiICsgdmFsdWUuZGVzY3JpcHRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBob3ZlclRleHQgPSBcIlR5cGU6IFwiICsgdmFsdWUudHlwZSArXG4gICAgICAgICAgXCJcXG5cXG5MYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArXG4gICAgICAgICAgXCJcXG5cXG5QcmVmaXggPiBTaG9ydCBmb3JtOiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIiA+IFwiICsgdmFsdWUuc2hvcnRfZm9ybSArXG4gICAgICAgICAgXCJcXG5cXG5EZXNjcmlwdGlvbjogXCIgKyB2YWx1ZS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IFwib250b2xvZ3lcIikge1xuICAgICAgICBob3ZlclRleHQgPSBcIlR5cGU6IFwiICsgdmFsdWUudHlwZSArXG4gICAgICAgICAgXCJcXG5cXG5MYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArXG4gICAgICAgICAgXCJcXG5cXG5QcmVmaXg6IFwiICsgdmFsdWUub250b2xvZ3lfbmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhvdmVyVGV4dCA9IFwidHlwZTogXCIgKyB2YWx1ZS50eXBlICtcbiAgICAgICAgICBcIlxcblxcbkxhYmVsOiBcIiArIHZhbHVlLmxhYmVsICtcbiAgICAgICAgICBcIlxcblxcblByZWZpeCA+IFNob3J0IGZvcm06IFwiICsgdmFsdWUub250b2xvZ3lfbmFtZSArIFwiID4gXCIgKyB2YWx1ZS5zaG9ydF9mb3JtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlck9udG9sb2d5ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUhlYWx0aFxuICAgICAgICAgIHRpdGxlPXtob3ZlclRleHR9XG4gICAgICAgICAgY29sb3I9e2RvdENvbG9yfT5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L0V1aUhlYWx0aD5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckVudGl0eVdpdGhEZXNjcmlwdGlvbiA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGhlaWdodDogMjAwICsgXCJweFwiIH19PlxuICAgICAgICAgICAgPEV1aUhlYWx0aFxuICAgICAgICAgICAgICB0aXRsZT17aG92ZXJUZXh0fVxuICAgICAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXt2YWx1ZS5vbnRvbG9neV9uYW1lfVxuICAgICAgICAgICAgICAgICAgICBzaG9ydEZvcm09e3ZhbHVlLnNob3J0X2Zvcm19XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e1wicHJpbWFyeVwifVxuICAgICAgICAgICAgICAgICAgICBjb2xvclNlY29uZD17XCJzdWNjZXNzXCJ9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgeyFzaW5nbGVTdWdnZXN0aW9uUm93ICYmIHZhbHVlLmRlc2NyaXB0aW9uID9cbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDQwKSArIFwiLi4uXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvPiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIgPyByZW5kZXJPbnRvbG9neSgpIDogcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uKCk7XG4gIH07XG5cbiAgICAvKipcbiAgICAgKiBvbiBtb3VudDogZmV0Y2hlcyB0ZXJtIGZvciBwcmVzZWxlY3RlZFxuICAgICAqIHNldHMgaXRzIGxhYmVsIG9yIHNldHMgYSBnaXZlbiBsYWJlbCBpZiBubyBpcmkgaXMgcHJvdmlkZWQvdGhlIGdpdmVuIGlyaSBjYW5ub3QgYmUgcmVzb2x2ZWRcbiAgICAgKiBvbmx5IGlmIGFsbG93Q3VzdG9tVGVybXMgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50XG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcIm9uTW91bnRcIixcbiAgICAgICAgICAgIHByZXNlbGVjdGVkXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcmVzZWxlY3RlZFZhbHVlczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdID0gW107XG5cbiAgICAgIGxldCB1bmlxdWVWYWx1ZXMgPSBbLi4ubmV3IFNldChwcmVzZWxlY3RlZCldXG4gICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiAoYWxsb3dDdXN0b21UZXJtcyAmJiBvcHRpb24ubGFiZWwpIHx8IG9wdGlvbi5pcmk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikgdW5pcXVlVmFsdWVzID0gW3VuaXF1ZVZhbHVlc1swXV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uaXJpICYmIG9wdGlvbi5pcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cXVlcnk6IG9wdGlvbi5pcml9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb3BlcnRpZXMubWFwKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pcmkgPT09IHNlbGVjdGlvbi5nZXRJcmkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbGVjdGVkVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5nZXREZXNjcmlwdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHByZXNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHByZXNlbGVjdGVkVmFsdWVzID0gW3ByZXNlbGVjdGVkVmFsdWVzWzBdXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24gJiYgb3B0aW9uLmxhYmVsICYmIGFsbG93Q3VzdG9tVGVybXMpIHtcbiAgICAgICAgICAgIHByZXNlbGVjdGVkVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICBrZXk6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0T3B0aW9ucyhwcmVzZWxlY3RlZFZhbHVlcyk7XG4gICAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhwcmVzZWxlY3RlZFZhbHVlcyk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBmZXRjaGVzIG5ldyBvcHRpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3Qge1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nVGVybXNcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcbiAgICAgIFwib25TZWFyY2hDaGFuZ2VcIixcbiAgICAgIHNlYXJjaFZhbHVlXG4gICAgXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xzQXBpLmdldFNlbGVjdERhdGEoXG4gICAgICAgICAgeyBxdWVyeTogc2VhcmNoVmFsdWUgfSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICB0czRuZmRpR2F0ZXdheVxuICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBzZXRPcHRpb25zKHJlc3BvbnNlLnByb3BlcnRpZXMubWFwKChzZWxlY3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGFiZWwgdG8gZGlzcGxheSB3aXRoaW4gdGhlIGNvbWJvYm94IGVpdGhlciByYXcgdmFsdWUgb3IgZ2VuZXJhdGVkIG9uZVxuICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsID8gc2VsZWN0aW9uLmdldExhYmVsKCkgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChzZWxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIC8vIGtleSB0byBkaXN0aW5ndWlzaCB0aGUgb3B0aW9ucyAoZXNwZWNpYWxseSB0aG9zZSB3aXRoIHNhbWUgbGFiZWwpXG4gICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgLy8gdmFsdWVzIHRvIHBhc3MgdG8gY2xpZW50c1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5nZXREZXNjcmlwdGlvbigpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNldCBvZiBzZWxlY3RlZCBvcHRpb25zIGNoYW5nZXMsIHBhc3MgdGhlIGV2ZW50IGJ5IGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5tYXAoKHgpID0+IHtcbiAgICAgICAgLy8gcmV0dXJuIHRoZSB2YWx1ZSBvYmplY3Qgd2l0aCB0aGUgcmF3IHZhbHVlcyBmcm9tIE9MUyB0byBhIGNsaWVudFxuICAgICAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgIGxhYmVsOiB4LmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiB4LnZhbHVlLmlyaSxcbiAgICAgICAgICAgIGxhYmVsOiB4LnZhbHVlLmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogeC52YWx1ZS5vbnRvbG9neV9uYW1lLFxuICAgICAgICAgICAgdHlwZTogeC52YWx1ZS50eXBlLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICBmdW5jdGlvbiBnZW5lcmF0ZURpc3BsYXlMYWJlbChpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbS5sYWJlbCArXG4gICAgICBcIiAoXCIgK1xuICAgICAgaXRlbS5vbnRvbG9neV9uYW1lLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgXCIgXCIgK1xuICAgICAgaXRlbS5zaG9ydF9mb3JtICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSGFuZGxlcihvcHRpb25zOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DcmVhdGVPcHRpb25IYW5kbGVyKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRPcHRpb25zKFsuLi5vcHRpb25zLCBuZXdPcHRpb25dKTtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMoc2luZ2xlU2VsZWN0aW9uID8gW25ld09wdGlvbl0gOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBuZXdPcHRpb25dKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aUNvbWJvQm94XG4gICAgICBpc0NsZWFyYWJsZVxuICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaEJhclwiXG4gICAgICBmdWxsV2lkdGg9e3RydWV9XG4gICAgICB7Li4ucmVzdH0gLy8gaXRlbXMgYWJvdmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBjbGllbnRcbiAgICAgIGFzeW5jPXt0cnVlfVxuICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmdUZXJtcyB8fCBpc0xvYWRpbmdPbk1vdW50fVxuICAgICAgc2luZ2xlU2VsZWN0aW9uPXtzaW5nbGVTZWxlY3Rpb24gPyB7IGFzUGxhaW5UZXh0OiB0cnVlIH0gOiBmYWxzZX1cbiAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgcGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IFwiU2VhcmNoIGZvciBhIENvbmNlcHRcIlxuICAgICAgfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHNlbGVjdGVkT3B0aW9ucz17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgb25TZWFyY2hDaGFuZ2U9e3NldFNlYXJjaFZhbHVlfVxuICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlSGFuZGxlcn1cbiAgICAgIHJlbmRlck9wdGlvbj17cmVuZGVyT3B0aW9ufVxuICAgICAgb25DcmVhdGVPcHRpb249e2FsbG93Q3VzdG9tVGVybXMgPyBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIgOiB1bmRlZmluZWR9XG4gICAgICByb3dIZWlnaHQ9e3NpbmdsZVN1Z2dlc3Rpb25Sb3cgPyAzMCA6IDUwfVxuICAgIC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dG9jb21wbGV0ZShwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRBdXRvY29tcGxldGVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8QXV0b2NvbXBsZXRlV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXtwcm9wcy5zZWxlY3Rpb25DaGFuZ2VkRXZlbnR9XG4gICAgICAgICAgcHJlc2VsZWN0ZWQ9e3Byb3BzLnByZXNlbGVjdGVkfVxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbj17cHJvcHMuc2luZ2xlU2VsZWN0aW9ufVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBoYXNTaG9ydFNlbGVjdGVkTGFiZWw9e3Byb3BzLmhhc1Nob3J0U2VsZWN0ZWRMYWJlbH1cbiAgICAgICAgICBhbGxvd0N1c3RvbVRlcm1zPXtwcm9wcy5hbGxvd0N1c3RvbVRlcm1zfVxuICAgICAgICAgIHRzNG5mZGlHYXRld2F5PXtwcm9wcy50czRuZmRpR2F0ZXdheX1cbiAgICAgICAgICBzaW5nbGVTdWdnZXN0aW9uUm93PXtwcm9wcy5zaW5nbGVTdWdnZXN0aW9uUm93fVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IEF1dG9jb21wbGV0ZVdpZGdldCwgY3JlYXRlQXV0b2NvbXBsZXRlIH07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsICJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCAiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgb3JpZ2luXG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBjb25zdCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IHRpbWVyID0gbnVsbDtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRocm90dGxlZCgpIHtcbiAgICBjb25zdCBmb3JjZSA9IHRoaXMgPT09IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChmb3JjZSB8fCBub3cgLSB0aW1lc3RhbXAgPiB0aHJlc2hvbGQpIHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKCF0aW1lcikge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH0sIHRocmVzaG9sZCAtIChub3cgLSB0aW1lc3RhbXApKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwgImltcG9ydCBzcGVlZG9tZXRlciBmcm9tIFwiLi9zcGVlZG9tZXRlci5qc1wiO1xuaW1wb3J0IHRocm90dGxlIGZyb20gXCIuL3Rocm90dGxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGxcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSBcIi4vaXNVUkxTYW1lT3JpZ2luLmpzXCI7XG5pbXBvcnQgY29va2llcyBmcm9tIFwiLi9jb29raWVzLmpzXCI7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tIFwiLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzXCI7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSBcIi4uL2NvcmUvbWVyZ2VDb25maWcuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSBcIi4vYnVpbGRVUkwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59XG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBwcm9ncmVzc0V2ZW50UmVkdWNlciBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGV9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBfY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgX2NvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgX2NvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgX2NvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihfY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBfY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoX2NvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gXCIuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCBhYm9ydGVkO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAoY2FuY2VsKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSBjYW5jZWwgaW5zdGFuY2VvZiBFcnJvciA/IGNhbmNlbCA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgIH1cbiAgfVxuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICB9LCB0aW1lb3V0KVxuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGlmIChzaWduYWxzKSB7XG4gICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgIHNpZ25hbCAmJlxuICAgICAgICAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSA6IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSk7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCAiXG5cbmV4cG9ydCBjb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSwgZW5jb2RlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSA/IGNodW5rIDogKGF3YWl0IGVuY29kZShTdHJpbmcoY2h1bmspKSksIGNodW5rU2l6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCwgZW5jb2RlKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplLCBlbmNvZGUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgdHlwZTogJ2J5dGVzJyxcblxuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICBvbkZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgb25Qcm9ncmVzcyAmJiBvblByb2dyZXNzKGJ5dGVzICs9IGxlbik7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIG9uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tIFwiLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qc1wiO1xuaW1wb3J0IHt0cmFja1N0cmVhbX0gZnJvbSBcIi4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgZnJvbSBcIi4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanNcIjtcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcbmltcG9ydCBzZXR0bGUgZnJvbSBcIi4uL2NvcmUvc2V0dGxlLmpzXCI7XG5cbmNvbnN0IGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IgPSAodG90YWwsIGZuKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuICByZXR1cm4gKGxvYWRlZCkgPT4gc2V0VGltZW91dCgoKSA9PiBmbih7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSkpO1xufVxuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmICgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmICEhKCgpPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSk7XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgLy8gcmV0dXJuIHVuZGVmaW5lZFxuICB9XG59KSgpO1xuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pXG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgbmV3IFJlcXVlc3QoYm9keSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW5dLCB0aW1lb3V0KSA6IFtdO1xuXG4gIGxldCBmaW5pc2hlZCwgcmVxdWVzdDtcblxuICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAhZmluaXNoZWQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKVxuICAgICAgICApLCBudWxsLCBlbmNvZGVUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdjb3JzJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIHdpdGhDcmVkZW50aWFsc1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBpc1N0cmVhbVJlc3BvbnNlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihcbiAgICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKVxuICAgICAgICApLCBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoLCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcblxuICAgIHN0b3BUaW1lb3V0ICYmIHN0b3BUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cblxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNy4yXCI7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwgImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCAiaW1wb3J0IGF4aW9zIGZyb20gJy4vbGliL2F4aW9zLmpzJztcblxuLy8gVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gdW53cmFwIEF4aW9zIGRlZmF1bHQgZXhwb3J0IGFzIG5hbWVkLlxuLy8gS2VlcCB0b3AtbGV2ZWwgZXhwb3J0IHNhbWUgd2l0aCBzdGF0aWMgcHJvcGVydGllc1xuLy8gc28gdGhhdCBpdCBjYW4ga2VlcCBzYW1lIHdpdGggZXMgbW9kdWxlIG9yIGNqc1xuY29uc3Qge1xuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59ID0gYXhpb3M7XG5cbmV4cG9ydCB7XG4gIGF4aW9zIGFzIGRlZmF1bHQsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn1cbiIsICJpbXBvcnQgeyBUaGluZywgRW50aXR5LCBDbGFzcywgUHJvcGVydHksIEluZGl2aWR1YWwsIE9udG9sb2d5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5leHBvcnQgY29uc3QgY2xhc3NUeXBlTmFtZXMgPSBbXCJjbGFzc1wiICwgXCJ0ZXJtXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1wicHJvcGVydHlcIiwgXCJhbm5vdGF0aW9uUHJvcGVydHlcIiwgXCJkYXRhUHJvcGVydHlcIiwgXCJvYmplY3RQcm9wZXJ0eVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFsuLi5jbGFzc1R5cGVOYW1lcywgLi4uaW5kaXZpZHVhbFR5cGVOYW1lcywgLi4ucHJvcGVydHlUeXBlTmFtZXNdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHRoaW5nVHlwZU5hbWVzID0gWy4uLmVudGl0eVR5cGVOYW1lcywgLi4ub250b2xvZ3lUeXBlTmFtZXNdIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIE9udG9sb2d5VHlwZU5hbWUge1xuICAgIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgRW50aXR5VHlwZU5hbWUge1xuICAgIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIENsYXNzIHtcbiAgICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgUHJvcGVydHkge1xuICAgIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEluZGl2aWR1YWwge1xuICAgIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBFbnRpdHkge1xuICAgIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgT250b2xvZ3kge1xuICAgIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn0iLCAiaW1wb3J0IHtFdWlMaW5rQ29sb3J9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5pbXBvcnQge1xuICAgIGlzQ2xhc3NUeXBlTmFtZSxcbiAgICBpc0luZGl2aWR1YWxUeXBlTmFtZSxcbiAgICBpc09udG9sb2d5VHlwZU5hbWUsXG4gICAgaXNQcm9wZXJ0eVR5cGVOYW1lLFxuICAgIGlzVGhpbmdUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZVxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7U3RvcnlDb250ZXh0fSBmcm9tIFwiQHN0b3J5Ym9vay9yZWFjdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gW29ial07XG4gICAgfVxuICAgIHJldHVybiBbXSBhcyBUW107XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX0xFR0FDWSA9IHRydWU7XG4vKipcbiAqIFJldHVybnMgYHVzZUxlZ2FjeWAgaWYgdW5kZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0IHZhbHVlIGZvciB1c2VMZWdhY3lcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3k/OiBib29sZWFuKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodXNlTGVnYWN5ICE9PSB1bmRlZmluZWQpID8gdXNlTGVnYWN5IDogREVGQVVMVF9VU0VfTEVHQUNZO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIHR5cGV9LiBJZiB7QGxpbmsgdHlwZX0gZXF1YWxzICd0ZXJtJywgJ2NsYXNzJyBnZXRzIHJldHVybmVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJ0ZXJtXCIgPyBcImNsYXNzXCIgOiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZUNhbWVsQ2FzZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikuc3BsaXQoLyg/PVtBLVpdW2Etel0pLykuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZVVuZGVyc2NvcmUoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnJlcGxhY2UoXCJfXCIsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyaW1tZWQgYXBpIChvbWl0cyAvYXBpL3YyIGF0IHRoZSBlbmQpXG4gKiBAcGFyYW0gYXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9udEVuZEFwaShhcGk6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBhcGkucmVwbGFjZSgvXFwvYXBpXFwvPyQvLCBcIi9cIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIm9udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfS97aXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gaXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCBpcmk/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYG9udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke3BsdXJhbGl6ZVR5cGUoYXNBcnJheShlbnRpdHlUeXBlQXJyYXkpLCB1c2VMZWdhY3kpfWAgKyAoaXJpICE9IHVuZGVmaW5lZCA/IGAvJHtlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkpfWAgOiBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBcInRlcm1zXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHwgXCJvbnRvbG9naWVzXCIge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBpZihpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgICAgICAgIGlmKGlzQ2xhc3NUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgICAgICAgICBpZihpc1Byb3BlcnR5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gcGx1cmFsaXplIGluIHByb3ZpZGVkIHR5cGVBcnJheS5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5ndWxhcml6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFRoaW5nVHlwZU5hbWUge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXJtc1wiOiBjYXNlIFwiY2xhc3Nlc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybVwiIDogXCJjbGFzc1wiO1xuICAgICAgICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjogY2FzZSBcImRhdGFQcm9wZXJ0aWVzXCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0aWVzXCI6IGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydGllc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbHNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gICAgICAgICAgICBjYXNlIFwib250b2xvZ2llc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9udG9sb2d5XCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gc2luZ3VsYXJpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gICAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpTGlua0NvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJwcmltYXJ5XCIsIFwic3ViZHVlZFwiLCBcInN1Y2Nlc3NcIiwgXCJhY2NlbnRcIiwgXCJkYW5nZXJcIiwgXCJ3YXJuaW5nXCIsIFwidGV4dFwiLCBcImdob3N0XCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3I6IGFueSwgbWVzc2FnZVBsYWNlaG9sZGVyID0gXCJpbmZvcm1hdGlvblwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcl9tc2cgOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmKGVycm9yX21zZyA9PT0gKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICAgIH1cbiAgICBlbHNlIHJldHVybiBgTm8gJHttZXNzYWdlUGxhY2Vob2xkZXJ9IGF2YWlsYWJsZWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHR5cGVzOiBzdHJpbmdbXSkge1xuICAgIGxldCByZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW0gOiBzdHJpbmcpID0+IGlzVGhpbmdUeXBlTmFtZShlbGVtKSk7IC8vIGZpbHRlciBub3QgbWF0Y2hpbmcgc3RyaW5nc1xuICAgIHJlcyA9IHJlcy5tYXAoaXRlbSA9PiBpdGVtID09PSBcImFubm90YXRpb25Qcm9wZXJ0eVwiIHx8IGl0ZW0gPT09IFwib2JqZWN0UHJvcGVydHlcIiB8fCBpdGVtID09PSBcImRhdGFQcm9wZXJ0eVwiID8gXCJwcm9wZXJ0eVwiIDogaXRlbSk7XG4gICAgcmVzID0gWy4uLm5ldyBTZXQ8c3RyaW5nPihyZXMpXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICAgIGlmKHJlcy5sZW5ndGggPT09IDEpIHJldHVybiByZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgICBlbHNlIGlmKHJlcy5sZW5ndGggPT09IDApIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTm8gc3VpdGFibGUgdHlwZSBmb3VuZCBpbiBhcnJheS5cIik7XG4gICAgZWxzZSB0aHJvdyBFcnJvcihgRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTXVsdGlwbGUgdHlwZXMgZm91bmQgaW4gYXJyYXksIG5vIGRlZmluaXRlIGNob2ljZSBwb3NzaWJsZSAtICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcbn1cblxuLyogVE9ETzogcGx1cmFsaXplVHlwZSBub3QgYXZhaWxhYmxlIGluIGh0bWwgdmVyc2lvbiwgcmVwbGFjZSB3aXRoIGxvY2FsIGZ1bmN0aW9uYWxpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW51YWxseUVtYmVkT25OYXZpZ2F0ZShjb2RlOiBzdHJpbmcsIHN0b3J5Q29udGV4dDogU3RvcnlDb250ZXh0KSB7XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0VudGl0eVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXsoKSA9PiB7fX1cIixcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0VudGl0eSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9FbnRpdHk9eygpID0+IHt9fVwiLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkICsgJy8nICsgbmV3IE1hcChbW1xcXCJ0ZXJtXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiY2xhc3NcXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJpbmRpdmlkdWFsXFxcIixcXFwiaW5kaXZpZHVhbHNcXFwiXSxbXFxcInByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiZGF0YVByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwib2JqZWN0UHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJhbm5vdGF0aW9uUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb09udG9sb2d5XCJdKSB7XG4gICAgICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17KCkgPT4ge319XCIsXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb09udG9sb2d5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgYCBmb3Igb250b2xvZ3lJZCBcXFwiJHtvbnRvbG9neUlkfVxcXCIuYCk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17KCkgPT4ge319XCIsXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBpZihlbnRpdHkgJiYgZW50aXR5LmlyaSAmJiBlbnRpdHlUeXBlKSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCArICcvJyArIG5ldyBNYXAoW1tcXFwidGVybVxcXCIsXFxcImNsYXNzZXNcXFwiXSxbXFxcImNsYXNzXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiaW5kaXZpZHVhbFxcXCIsXFxcImluZGl2aWR1YWxzXFxcIl0sW1xcXCJwcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcImRhdGFQcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcIm9iamVjdFByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiYW5ub3RhdGlvblByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdXSkuZ2V0KGVudGl0eVR5cGUpICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHkuaXJpKSksIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvJyArIG9udG9sb2d5SWQsIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHN3aXRjaCAoc3RvcnlDb250ZXh0LmFyZ3NbXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGVcIl0pIHtcbiAgICAgICAgY2FzZSBcIkNvbnNvbGUgbWVzc2FnZVwiOlxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17KCkgPT4ge319XCIsXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e1xcbiAgICAoZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9eygpID0+IHt9fVwiLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L3NlYXJjaD9xPScgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gZW50aXR5LmxhYmVsIDogXFxcIlxcXCIpICsgJyZleGFjdE1hdGNoPXRydWUmbGFuZz1lbicsIFxcXCJfdG9wXFxcIik7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjb2RlO1xufSIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBjb25zdCB2ID0gYXhpb21ba107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5pbXBvcnQge1RoaW5nVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50PyBcImlkXCIgb25seSBleGlzdHMgaW4gc3RhbmRhcmQ/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZTtcblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInRlcm1zXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZVR5cGUodGhpcy5nZXRUeXBlKCkpO1xuICB9XG5cbiAgLy8gbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCByZXNwb25zZXNcbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIC8vIGhhcyBhZGRpdGlvbmFsIGtleSBcInNob3J0aGFuZFwiPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXBwbGljYWJsZSAvIG5lY2Vzc2FyeSBpbiBzdGFuZGFyZCBhcyB0aGVyZSBhcmUgbm8gbGlua2VkIGVudGl0aWVzXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdO1xuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdICYmIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiZGVwaWN0aW9uXCJdWzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzVGhpbmd9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQge2FzQXJyYXksIGRlVW5kZXJzY29yZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNFbnRpdHkgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXVxuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0pKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlVW5kZXJzY29yZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpXG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldFR5cGUoKTogRW50aXR5VHlwZU5hbWU7XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0NsYXNzVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcblxuICBnZXRUeXBlKCk6IENsYXNzVHlwZU5hbWUge1xuICAgIHJldHVybiBcImNsYXNzXCJcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJwYXJlbnRzXCJcbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImluX3N1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UHJvcGVydHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzUHJvcGVydHkgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG5cbiAgZ2V0VHlwZSgpOiBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0luZGl2aWR1YWxUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzSW5kaXZpZHVhbCBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuXG4gIGdldFR5cGUoKTogSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVDYW1lbENhc2V9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ3lcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaWRcIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZih0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pIHtcbiAgICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSlcbiAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiXG4gICAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2d5fSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSwgMCk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBpc1RoaW5nVHlwZU5hbWUsIFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBpc1RoaW5nVHlwZU5hbWUodHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjogY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOiBjYXNlIFwiZGF0YVByb3BlcnR5XCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0RW50aXR5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgRW50aXR5e1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdXG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaGFzRGJYcmVmXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIikgY29udGludWU7XG5cbiAgICAgIC8vIE9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkYXRhIHByb3BlcnRpZXMgYXJlIG5vdCBhbm5vdGF0aW9uIHByb3BlcnRpZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBpbmZvcm1hbCB2b2NhYnVsYXJpZXMuXG4gICAgICBpZiAoIXRoaXMuaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZSkpIHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpXG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiIHx8XG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpZFwiXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQVBzXCIpO1xuICAgIC8vIGNvbnNvbGUuZGlyKEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7Q2xhc3N9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNENsYXNzIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pO1xuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0UHJvcGVydHkgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHtJbmRpdmlkdWFsfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRJbmRpdmlkdWFsIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWx7XG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG5cbn1cbiIsICJpbXBvcnQge09udG9sb2d5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ3kgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cblxuICBnZXRDcmVhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jcmVhdG9yXCJdKTtcbiAgfVxuXG4gIGdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlRmlsZVRpbWVzdGFtcFwiXTtcbiAgfVxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkVudGl0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mQ2xhc3Nlc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiZGVwaWN0ZWRfYnlcIl0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ3VhZ2VcIl0pO1xuICB9XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbXBvcnRzRnJvbVwiXSk7XG4gIH1cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtPTFMzT250b2xvZ3ksIE9MUzNDbGFzcywgT0xTM1Byb3BlcnR5LCBPTFMzSW5kaXZpZHVhbH0gZnJvbSBcIi4vb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtPTFM0T250b2xvZ3ksIE9MUzRDbGFzcywgT0xTNFByb3BlcnR5LCBPTFM0SW5kaXZpZHVhbH0gZnJvbSBcIi4vb2xzNC1tb2RlbFwiO1xuaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtUaGluZ1R5cGVOYW1lfSBmcm9tIFwiLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHthc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5fSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlOiBhbnkpIHtcbiAgICBsZXQgdXNlTGVnYWN5IDogYm9vbGVhbjtcbiAgICBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSB0cnVlO1xuICAgIGVsc2UgaWYocmVzcG9uc2VbXCJlbGVtZW50c1wiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZDbGFzc2VzXCJdICE9PSB1bmRlZmluZWQpIHVzZUxlZ2FjeSA9IGZhbHNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoYFJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG5cbiAgICBsZXQgZW50aXR5VHlwZSA6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInRlcm1zXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInRlcm1cIjtcbiAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBlbHNlIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihyZXNwb25zZVtcImVsZW1lbnRzXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xuXG4gICAgICAgICAgICBlbnRpdHlUeXBlID0gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdW1widHlwZVwiXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZihlbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZC5cIik7XG5cbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2UsIGVudGl0eVR5cGUsIHVzZUxlZ2FjeSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KHJlc3BvbnNlOiBhbnksIGVudGl0eVR5cGU6IHN0cmluZywgdXNlTGVnYWN5OiBib29sZWFuKTogVGhpbmcge1xuICAgIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKSA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgICAgIGNhc2UgXCJ0ZXJtXCIgOlxuICAgICAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgICAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0NsYXNzKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0Q2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzUHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNFByb3BlcnR5KGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpKTtcblxuICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzSW5kaXZpZHVhbChnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcImluZGl2aWR1YWxzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNEluZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgJ1wiLiBNdXN0IGJlIG9uZSBvZiB7XCJ0ZXJtXCIsIFwiY2xhc3NcIiwgXCJvbnRvbG9neVwiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBKU09OIG9mIHRoZSBlbnRpdHkgaW4gaXRzIGRlZmluaW5nIG9udG9sb2d5LCBvciwgaWYgbm90IGF2YWlsYWJsZSwganVzdCB0aGUgZmlyc3QgSlNPTiBpbiB0aGUgYXJyYXkuXG4gKiBJZiBvbnRvbG9neUlkIHdhcyBwcm92aWRlZCBpbiB0aGUgcmVzcG9uc2UgcmVxdWVzdCwgdGhlIGFycmF5IHNob3VsZCBvbmx5IGNvbnRhaW4gb25lIGVsZW1lbnQsIHRodXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgYXMgZXhwZWN0ZWQgYXMgd2VsbFxuICogQHBhcmFtIGVudGl0eUFycmF5UmVzcG9uc2UgdGhlIHN1Yi1yZXNwb25zZSBvZiB0aGUgaW5pdGlhbCBxdWVyeSByZXNwb25zZSBjb250YWluaW5nIGp1c3QgdGhlIGVudGl0eSBhcnJheVxuICogQHBhcmFtIHVzZUxlZ2FjeSBhcGkgdmVyc2lvbiAobmVlZGVkIGJlY2F1c2Uga2V5IGdpdmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBvbnRvbG9neSBoYXMgZGlmZmVyZW50IG5hbWVzIGluIGJvdGggdmVyc2lvbnMpXG4gKiBAcGFyYW0gb250b2xvZ3lJZCBpZiBzcGVjaWZpZWQsIHJldHVybnMgdGhlIGVudGl0eSBpbiB0aGlzIG9udG9sb2d5IGlmIGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGVudGl0eUFycmF5UmVzcG9uc2U6IGFueVtdLCB1c2VMZWdhY3k6IGJvb2xlYW4sIG9udG9sb2d5SWQ/OiBzdHJpbmcpIHtcbiAgICBpZihvbnRvbG9neUlkKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUluT250b2xvZ3kgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiAodXNlTGVnYWN5ID8gZW50aXR5W1wib250b2xvZ3lfbmFtZVwiXSA6IGVudGl0eVtcIm9udG9sb2d5SWRcIl0pID09IG9udG9sb2d5SWQpO1xuICAgICAgICBpZihlbnRpdHlJbk9udG9sb2d5Lmxlbmd0aCA+IDApIHJldHVybiBlbnRpdHlJbk9udG9sb2d5WzBdO1xuICAgICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgb250b2xvZ3lJZCAke29udG9sb2d5SWR9IGZvciBnaXZlbiBlbnRpdHlBcnJheVJlc3BvbnNlLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaW5nT250b2xvZ3lBcnIgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiB1c2VMZWdhY3kgPyBlbnRpdHlbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA6IGVudGl0eVtcImlzRGVmaW5pbmdPbnRvbG9neVwiXSk7XG4gICAgaWYoZGVmaW5pbmdPbnRvbG9neUFyci5sZW5ndGggPiAwKSByZXR1cm4gZGVmaW5pbmdPbnRvbG9neUFyclswXTtcbiAgICBlbHNlIGlmKGVudGl0eUFycmF5UmVzcG9uc2UubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUFycmF5UmVzcG9uc2VbMF07XG4gICAgZWxzZSB0aHJvdyBFcnJvcihcIkVtcHR5IHJlc3BvbnNlLlwiKTtcbn0iLCAiaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge0hpZXJhcmNoeUJ1aWxkZXJ9IGZyb20gXCIuLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhRm9ySGllcmFyY2h5fSBmcm9tIFwiLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFBhcmVudENoaWxkUmVsYXRpb24gPSB7XG4gICAgY2hpbGRJcmk6IHN0cmluZyxcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlIHtcbiAgICBlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5O1xuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZztcbiAgICBsb2FkZWRDaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICBleHBhbmRlZDogYm9vbGVhbjtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGVudGl0eURhdGFcbiAgICAgKiBAcGFyYW0gY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZW50aXR5RGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeSwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW50aXR5RGF0YSA9IGVudGl0eURhdGE7XG4gICAgICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4ucHVzaChjaGlsZClcbiAgICB9XG59XG5cbmNvbnN0IERFRkFVTFRfSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUzogYm9vbGVhbiA9IGZhbHNlIGFzIGNvbnN0O1xuY29uc3QgREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTogYm9vbGVhbiA9IHRydWUgYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBIaWVyYXJjaHkge1xuICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+O1xuICAgIGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT47XG4gICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPjtcbiAgICByb290czogVHJlZU5vZGVbXTsgLy8gc3RvcmVzIHRoZSB0cmVlIGhpZXJhcmNoeVxuICAgIHByb3RlY3RlZCBhcGk6IEhpZXJhcmNoeUJ1aWxkZXI7XG4gICAgb250b2xvZ3lJZDogc3RyaW5nO1xuXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGJvb2xlYW4gPSBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM7XG4gICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lO1xuICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGJvb2xlYW4gPSBERUZBVUxUX0tFRVBfRVhQQU5TSU9OX1NUQVRFO1xuICAgIHByb3RlY3RlZCB1c2VMZWdhY3k/OiBib29sZWFuO1xuXG4gICAgbWFpbkVudGl0eUlyaT86IHN0cmluZzsgLy8gdG8gaGlnaGxpZ2h0IGl0IGluIHRoZSBoaWVyYXJjaHlcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiB7XG4gICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+LFxuICAgICAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+LFxuICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+LFxuICAgICAgICByb290czogVHJlZU5vZGVbXSxcbiAgICAgICAgYXBpOiBIaWVyYXJjaHlCdWlsZGVyLFxuICAgICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPzogYm9vbGVhbixcbiAgICAgICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lLFxuICAgICAgICBtYWluRW50aXR5SXJpPzogc3RyaW5nLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPzogYm9vbGVhbixcbiAgICAgICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgICAgICAgZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgICAgICAgcm9vdHMsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICB1c2VMZWdhY3ksXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zID0gcGFyZW50Q2hpbGRSZWxhdGlvbnM7XG4gICAgICAgIHRoaXMuZW50aXRpZXNEYXRhID0gZW50aXRpZXNEYXRhO1xuICAgICAgICB0aGlzLmFsbENoaWxkcmVuUHJlc2VudCA9IGFsbENoaWxkcmVuUHJlc2VudDtcbiAgICAgICAgdGhpcy5yb290cyA9IHJvb3RzO1xuICAgICAgICBpZihpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyAhPSB1bmRlZmluZWQpIHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcztcbiAgICAgICAgaWYoa2VlcEV4cGFuc2lvblN0YXRlcyAhPSB1bmRlZmluZWQpIHRoaXMua2VlcEV4cGFuc2lvblN0YXRlcyA9IGtlZXBFeHBhbnNpb25TdGF0ZXM7XG4gICAgICAgIHRoaXMuYXBpID0gYXBpO1xuICAgICAgICB0aGlzLm1haW5FbnRpdHlJcmkgPSBtYWluRW50aXR5SXJpO1xuICAgICAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xuICAgICAgICB0aGlzLm9udG9sb2d5SWQgPSBvbnRvbG9neUlkO1xuICAgICAgICBpZih1c2VMZWdhY3kgIT0gdW5kZWZpbmVkKSB0aGlzLnVzZUxlZ2FjeSA9IHVzZUxlZ2FjeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdGhlIGVudHJpZXMgb2YgYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKWAgaW50byBgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuYC4gSGVyZSxcbiAgICAgKiBvbmx5IG5vdCBhbHJlYWR5IHByZXNlbnQgY2hpbGRyZW4gYXJlIGFkZGVkIHRvIGtlZXAgdGhlIGV4cGFuc2lvbiBzdGF0ZSBvZiB0aGUgYWxyZWFkeSBsb2FkZWQgY2hpbGRyZW4uXG4gICAgICogYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAgaXMgc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IGRpc3BsYXllZCBsYWJlbHMgYWZ0ZXJ3YXJkLlxuICAgICAqXG4gICAgICogQVNTVU1QVElPTlM6XG4gICAgICogMS4gYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZClgIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVRvRXhwYW5kIHRoZSBub2RlIGluc2lkZSB0aGUgaGllcmFyY2h5IChgdGhpcy5yb290c2ApIHRvIG1lcmdlIHRoZSBjaGlsZHJlbiBpbnRvXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZUNoaWxkcmVuSW50b0xvYWRlZENoaWxkcmVuKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICBpZihjaGlsZHJlbiA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKGBwYXJlbnRDaGlsZFJlbGF0aW9ucyBoYXMgbm8gZW50cnkgZm9yIGtleSBcIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGFsdGhvdWdoIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5gKTtcblxuICAgICAgICBsZXQgaUxvYWRlZENoaWxkcmVuID0gMDtcbiAgICAgICAgY29uc3QgbnVtTG9hZGVkQ2hpbGRyZW4gPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoOyAvLyBpbml0aWFsIGxlbmd0aFxuICAgICAgICBsZXQgaUNoaWxkcmVuID0gMDtcblxuICAgICAgICB3aGlsZShpQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGggJiYgaUxvYWRlZENoaWxkcmVuIDwgbnVtTG9hZGVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmKG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltpTG9hZGVkQ2hpbGRyZW5dLmVudGl0eURhdGEuaXJpID09IGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpIHtcbiAgICAgICAgICAgICAgICBpTG9hZGVkQ2hpbGRyZW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmFkZENoaWxkKG5ldyBUcmVlTm9kZSh0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLCBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaUNoaWxkcmVuKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmFkZENoaWxkKG5ldyBUcmVlTm9kZSh0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLCBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgICAgICAgaUNoaWxkcmVuKys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb3J0IGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuIGluIGNvcnJlY3RseVxuICAgICAgICBmb3IobGV0IGlMb2FkZWRDaGlsZHJlbiA9IG51bUxvYWRlZENoaWxkcmVuIC0gMTsgaUxvYWRlZENoaWxkcmVuID49IDA7IGlMb2FkZWRDaGlsZHJlbi0tKSB7XG4gICAgICAgICAgICBmb3IobGV0IGN1cnJJZHggPSBpTG9hZGVkQ2hpbGRyZW4gKyAxOyBjdXJySWR4IDwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDsgY3VycklkeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgaWYoKGN1cnJOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgY3Vyck5vZGUuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUocHJldk5vZGUuZW50aXR5RGF0YS5sYWJlbCB8fCBwcmV2Tm9kZS5lbnRpdHlEYXRhLmlyaSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltjdXJySWR4XSA9IHByZXZOb2RlO1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdID0gY3Vyck5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU5vZGUobm9kZVRvQ2xvc2U6IFRyZWVOb2RlKSB7XG4gICAgICAgIGlmKCF0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMpIHtcbiAgICAgICAgICAgIG5vZGVUb0Nsb3NlLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGV4cGFuc2lvbiBvZiBgbm9kZVRvRXhwYW5kYCBpcyBhdmFpbGFibGUgKGkuZS4gdGhlcmUgYXJlIGFscmVhZHkgY2hpbGRyZW4gbG9hZGVkKSBhbmQgZmV0Y2hlcyBpdCBpZiBub3QuXG4gICAgICogQHJldHVybiBib29sZWFuIGB0cnVlYCBpZiBpbmZvcm1hdGlvbiBoYWQgdG8gYmUgZmV0Y2hlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBhc3luYyBmZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICAgICAgaWYoIW5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmhhc0NoaWxkcmVuKSB0aHJvdyBFcnJvcihgTm9kZSBjb250YWluaW5nIGlyaT1cIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGNvdWxkIG5vdCBiZSBleHBhbmRlZDogRW50aXR5IGlzIG5vdCBleHBhbmRhYmxlLmApXG5cbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50ID0gdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuaGFzKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgIGNvbnN0IG5vZGVQYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSkgfHwgW107XG4gICAgICAgIGlmKCFhbGxDaGlsZHJlblByZXNlbnQgfHwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA8PSBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZighYWxsQ2hpbGRyZW5QcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gZHluYW1pY2FsbHkgbG9hZCBjaGlsZHJlbiBmcm9tIGFwaVxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10gPSAoYXdhaXQgdGhpcy5hcGkubG9hZEhpZXJhcmNoeUNoaWxkcmVuKHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kOiBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogdGhpcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogdGhpcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5OiB0aGlzLnVzZUxlZ2FjeSxcbiAgICAgICAgICAgICAgICB9KSkuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IChhLmxhYmVsIHx8IGEuaXJpKS5sb2NhbGVDb21wYXJlKGIubGFiZWwgfHwgYi5pcmkpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBjaGlsZHJlbiB0byBwYXJlbnRDaGlsZFJlbGF0aW9ucyBmb3IgaXJpIG9mIG5vZGVUb0V4cGFuZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhclJlbGF0aW9uID0gY2hpbGQucGFyZW50cy5maWx0ZXIoKHBhcikgPT4gcGFyLnZhbHVlID09IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7Y2hpbGRJcmk6IGNoaWxkLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJSZWxhdGlvbi5sZW5ndGggPiAwICYmIHBhclJlbGF0aW9uWzBdLmdldE1ldGFkYXRhKCkgPyBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpW1wiY2hpbGRSZWxhdGlvblRvUGFyZW50XCJdIDogdW5kZWZpbmVkfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1lcmdlQ2hpbGRyZW5JbnRvTG9hZGVkQ2hpbGRyZW4obm9kZVRvRXhwYW5kKTtcblxuICAgICAgICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICB9XG59IiwgImltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3QgaW1wbGVtZW50cyBTZWxlY3Qge1xuICBwcm9wZXJ0aWVzOiBTZWxlY3RSZXN1bHRbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBTZWxlY3RSZXN1bHRbXSkge1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgZ2V0VG90YWxTZWFyY2hSZXN1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5sZW5ndGg7XG4gIH1cblxuXG4gIH0iLCAiaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3RSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cblxufSIsICJpbXBvcnQgeyBTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIFRzNG5mZGlTZWFyY2hSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG5cbn0iLCAiaW1wb3J0IGF4aW9zLCB7QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7YXNBcnJheSwgZ2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeCwgZ2V0VXNlTGVnYWN5LCBwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Y3JlYXRlTW9kZWxPYmplY3R9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7T250b2xvZ3ksIE9udG9sb2dpZXMsIEVudGl0eSwgVGhpbmcsIEluZGl2aWR1YWx9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNPbnRvbG9naWVzLCBPTFMzT250b2xvZ3l9IGZyb20gXCIuLi9tb2RlbC9vbHMzLW1vZGVsXCI7XG5pbXBvcnQge1xuICBjbGFzc1R5cGVOYW1lcywgZW50aXR5VHlwZU5hbWVzLCBvbnRvbG9neVR5cGVOYW1lcywgdGhpbmdUeXBlTmFtZXMsXG4gIEVudGl0eVR5cGVOYW1lLCBUaGluZ1R5cGVOYW1lLFxuICBpc0NsYXNzVHlwZU5hbWUsIGlzRW50aXR5VHlwZU5hbWUsIGlzSW5kaXZpZHVhbFR5cGVOYW1lLCBpc09udG9sb2d5VHlwZU5hbWVcbn0gZnJvbSBcIi4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge0VudGl0eURhdGFGb3JIaWVyYXJjaHksIEhpZXJhcmNoeSwgUGFyZW50Q2hpbGRSZWxhdGlvbiwgVHJlZU5vZGV9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7QnVpbGRIaWVyYXJjaHlQcm9wcywgSGllcmFyY2h5QnVpbGRlciwgSGllcmFyY2h5SXJpUHJvcCwgTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHN9IGZyb20gXCIuL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7IE9MU1NlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0XCI7XG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9TZWxlY3RcIjtcbmltcG9ydCB7IE9MU1NlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUczRuZmRpU2VhcmNoUmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL3RzNG5mZGktbW9kZWwvVHM0bmZkaVNlYXJjaFJlc3VsdFwiO1xuXG4vLyB1c2VkIHRvIGZpbHRlciBlbnRpdGllcyBub3QgYmUgc2hvd24gaW4gaGllcmFyY2h5XG5mdW5jdGlvbiBpc1RvcChpcmk6IHN0cmluZykgOiBib29sZWFuIHtcbiAgcmV0dXJuIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUaGluZ1wiIHx8IGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUb3BPYmplY3RQcm9wZXJ0eVwiO1xufVxuXG5pbnRlcmZhY2UgUGFnaW5hdGlvblBhcmFtcyB7XG4gIHNpemU/OiBzdHJpbmc7XG4gIHBhZ2U/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTb3J0aW5nUGFyYW1zIHtcbiAgc29ydEZpZWxkOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNvcnREaXI/OiBcImFzY1wiIHwgXCJkZXNjXCI7XG59XG5cbmludGVyZmFjZSBDb250ZW50UGFyYW1zIHtcbiAgb250b2xvZ3lJZD86IHN0cmluZztcbiAgdGVybUlyaT86IHN0cmluZztcbiAgcHJvcGVydHlJcmk/OiBzdHJpbmc7XG4gIGluZGl2aWR1YWxJcmk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuXG59XG5cbmV4cG9ydCB0eXBlIGFwaUNhbGxGbiA9IChwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8YW55PjtcblxuaW50ZXJmYWNlIFNlYXJjaFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgZXhhY3RNYXRjaD86IGJvb2xlYW47XG4gIHNob3dPYnNvbGV0ZVRlcm1zPzogYm9vbGVhbjtcbiAgdHlwZXM/OiBzdHJpbmc7XG4gIG9udG9sb2d5Pzogc3RyaW5nO1xuICBncm91cEJ5SXJpPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFNlbGVjdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN1Z2dlc3RRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBKc1RyZWVQYXJhbXMge1xuICB2aWV3TW9kZT86IHN0cmluZztcbiAgc2libGluZ3M/OiBib29sZWFuO1xuICBjaGlsZD86IHN0cmluZztcbn1cblxudHlwZSBKU1RyZWVOb2RlID0ge1xuICBpZDogc3RyaW5nXG4gIHBhcmVudDogc3RyaW5nXG4gIGlyaTogc3RyaW5nXG4gIHRleHQ6IHN0cmluZ1xuICBzdGF0ZToge1xuICAgIG9wZW5lZDogYm9vbGVhblxuICB9XG4gIGNoaWxkcmVuOiBib29sZWFuXG4gIGFfYXR0cjoge1xuICAgIGlyaTogc3RyaW5nXG4gICAgb250b2xvZ3lfbmFtZTogc3RyaW5nXG4gICAgdGl0bGU6IHN0cmluZ1xuICAgIGNsYXNzOiBzdHJpbmdcbiAgfVxuICBvbnRvbG9neV9uYW1lOiBzdHJpbmdcbn1cblxuY29uc3QgREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRSA9IDEwO1xuXG5leHBvcnQgY2xhc3MgT2xzQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlcntcbiAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZykge1xuICAgIGlmIChzb3J0aW5nUGFyYW1zKSB7XG4gICAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCBzb3J0OiBgJHtzb3J0aW5nUGFyYW1zLnNvcnRGaWVsZH0sJHtzb3J0aW5nUGFyYW1zLnNvcnREaXJ9YCwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcil9O1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHJvd3M6IHBhZ2luYXRpb25QYXJhbXM/LnNpemUsXG4gICAgfTtcblxuICAgIGlmIChwYWdpbmF0aW9uUGFyYW1zPy5wYWdlKSB7XG4gICAgICBpZiAocGFnaW5hdGlvblBhcmFtcy5zaXplKSB7XG4gICAgICAgIHBhcmFtcy5zdGFydCA9ICgrcGFnaW5hdGlvblBhcmFtcy5wYWdlICogK3BhZ2luYXRpb25QYXJhbXMuc2l6ZSkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5zdGFydCA9ICgrcGFnaW5hdGlvblBhcmFtcy5wYWdlICogREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRSkudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlYXJjaChxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCB0czRuZmRpR2F0ZXdheT86IGJvb2xlYW4pIHtcblxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgZXhhY3Q6IHF1ZXJ5UGFyYW1zLmV4YWN0TWF0Y2gsXG4gICAgICBvYnNvbGV0ZXM6IHF1ZXJ5UGFyYW1zLnNob3dPYnNvbGV0ZVRlcm1zLFxuICAgIH07XG5cbiAgICBpZiAodHM0bmZkaUdhdGV3YXkpe1xuICAgICAgcGFyYW1zLnF1ZXJ5ID0gcXVlcnlQYXJhbXMucXVlcnlcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnEgPSBxdWVyeVBhcmFtcy5xdWVyeVxuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy5ncm91cEJ5SXJpKSB7XG4gICAgICBwYXJhbXMuZ3JvdXBGaWVsZCA9IHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmk7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnR5cGVzKSB7XG4gICAgICBwYXJhbXMudHlwZSA9IHF1ZXJ5UGFyYW1zLnR5cGVzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy5vbnRvbG9neSkge1xuICAgICAgcGFyYW1zLm9udG9sb2d5ID0gcXVlcnlQYXJhbXMub250b2xvZ3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgY3JlYXRpbmcgYW4gb2JqZWN0IGZyb20gc3RyaW5nIG9mIHBhcmFtZXRlcnMgZm9yIGF4aW9zIGlucHV0IHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyPzogc3RyaW5nKXtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKVxuXG4gICAgICBwYXJhbXNTcGxpdHRlZC5mb3JFYWNoKChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVswXVxuICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZX0pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWxlY3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXJzKSB9O1xuICB9XG5cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yU3VnZ2VzdChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcnM/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50IChlc3BlY2lhbGx5IHRocm93aW5nIGVycm9yIGZvciBlbXB0eSByZXNwb25zZSk/XG4gIHByaXZhdGUgY2hlY2tfZm9yX2Vycm9ycyhyZXNwb25zZTogYW55KTogYW55IHtcbiAgICAvLyByZXNvdXJjZSBub3QgZm91bmQvaWxsZWdhbCBhcmd1bWVudCBleGNlcHRpb24gaW4gc2VtYW50aWNsb29rdXBcbiAgICBpZihyZXNwb25zZVtcImVycm9yXCJdKSB7XG4gICAgICB0aHJvdyBFcnJvcihyZXNwb25zZVtcInN0YXR1c1wiXSArIFwiIFwiICsgcmVzcG9uc2VbXCJlcnJvclwiXSArIFwiIC0gXCIgKyByZXNwb25zZVtcIm1lc3NhZ2VcIl0gKyBcIiAtIFwiICsgcmVzcG9uc2VbXCJleGNlcHRpb25cIl0gKyBcIiBhdCBcIiArIHJlc3BvbnNlW1wicGF0aFwiXSk7XG4gICAgfVxuICAgIC8vIGVtcHR5IHJlc3BvbnNlIC0gY2FuIGJlIGNhdWdodCBpZiB0aGlzIGlzIGV4cGVjdGVkLCBlLmcuIGZvciBmZXRjaGluZyBpbnN0YW5jZXNcbiAgICBpZihyZXNwb25zZVtcInBhZ2VcIl0gIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZVtcInBhZ2VcIl1bXCJ0b3RhbEVsZW1lbnRzXCJdID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIlJlc3BvbnNlIGNvbnRhaW5zIDAgZWxlbWVudHNcIik7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gfCB1bmRlZmluZWQsIHVzZUxlZ2FjeTogYm9vbGVhbikge1xuICAgIGNvbnN0IGFwaVZlcnNpb25QcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwiXCIgOiBcInYyL1wiO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYXBpVmVyc2lvblByZWZpeCArIHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy5jaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9naWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJvbnRvbG9naWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcikgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYWxsIG9udG9sb2dpZXMuIEN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgdXNlTGVnYWN5IHNpbmNlIHBhcmFtZXRlcnMgYXJlbid0IGFsbG93ZWQgaW4gdGhlIE9MUyB2MiBBUEkgb250b2xvZ2llcyBlbmRwb2ludFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ2llc0RhdGEocGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxPbnRvbG9naWVzPiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBvbnRvbG9naWVzRGF0YTogT0xTM09udG9sb2d5W10gPSBbXTtcblxuICAgIGxldCBwYWdlTnVtID0gMDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IDUwMDtcblxuICAgIGRvIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRPbnRvbG9naWVzKHsgc2l6ZTogcGFnZVNpemUudG9TdHJpbmcoKSwgcGFnZTogcGFnZU51bS50b1N0cmluZygpIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIpOyAvLyBhc3N1bWluZyB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDUwMCBvbnRvbG9naWVzXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSB8fCAhcmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9udG9sb2dpZXMgZGF0YSBub3QgZm91bmRcIik7IC8vVE9ETyBjb25zaXN0ZW50IGVycm9yIGhhbmRsaW5nXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIG9udG9sb2dpZXNEYXRhID0gb250b2xvZ2llc0RhdGEuY29uY2F0KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wib250b2xvZ2llc1wiXS5tYXAoKG9udG9sb2d5RGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KG9udG9sb2d5RGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcGFnZU51bSArPSAxO1xuICAgIH0gd2hpbGUocGFnZU51bSA8IHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsUGFnZXNcIl0pO1xuXG4gICAgcmV0dXJuIG5ldyBPTFMzT250b2xvZ2llcyhvbnRvbG9naWVzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbGwgdGVybXMgZnJvbSB0aGUgYXBpXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBzb3J0aW5nUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHR5cGVQcmVmaXgsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJwcm9wZXJ0aWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2d5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkLCBwYXJhbXMsIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGVudGl0eSBmcm9tIHRoZSAvZW50aXRpZXMgZW5kcG9pbnQgaW4gdGhlIGFwaSBpbiBvbHM0LlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRFbnRpdHk6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXgrXCJlbnRpdGllc1wiLCB7IHBhcmFtczogcGFyYW1zIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgdGVybSBmcm9tIHRoZSBhcGlcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIHNvcnRpbmdQYXJhbXNcbiAgICogQHBhcmFtIGBjb250ZW50UGFyYW1zYCBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBgY29udGVudFBhcmFtc2AgdG8gYmUgc2V0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5LlxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbFxuICAgKi9cbiAgcHVibGljIGdldFRlcm06IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICBjb25zdCBvbnRvbG9neVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwob250b2xvZ3lQcmVmaXggKyB0eXBlUHJlZml4LCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQrXCIvXCIgOiBcIlwiXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy5wcm9wZXJ0eUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCtcInByb3BlcnRpZXNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbiBpbmRpdmlkdWFsIGZyb20gdGhlIGFwaSBpbiBvbHMzLlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQrXCIvXCIgOiBcIlwiXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy5pbmRpdmlkdWFsSXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHF1ZXJ5UHJlZml4K1wiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciksIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ID0gYXN5bmMocXVlcnlQYXJhbXM6IFNlbGVjdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWxlY3RcIiwge3BhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlbGVjdChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hUczRuZmRpR2F0ZXdheSA9IGFzeW5jKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwge3BhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlYXJjaChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB0czRuZmRpR2F0ZXdheSkgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggc2VsZWN0IGRhdGEuXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gY29udGVudFBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2VsZWN0RGF0YShxdWVyeVBhcmFtczogU2VsZWN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCB0czRuZmRpR2F0ZXdheT86IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdD4ge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBsZXQgc2VsZWN0RGF0YTogT0xTU2VsZWN0UmVzdWx0W10gPSBbXTtcbiAgICBsZXQgcmVzdWx0TnVtID0gMDtcblxuICAgIGlmICh0czRuZmRpR2F0ZXdheSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlYXJjaFRzNG5mZGlHYXRld2F5KFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICB0czRuZmRpR2F0ZXdheVxuICAgICAgKTtcbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGRhdGEgbm90IGZvdW5kXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0RGF0YSA9IHNlbGVjdERhdGEuY29uY2F0KHJlc3BvbnNlLm1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBUczRuZmRpU2VhcmNoUmVzdWx0KGRhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbGVjdChcbiAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgICAgIHBhcmFtZXRlclxuICAgICAgKTtcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBkYXRhIG5vdCBmb3VuZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdERhdGEgPSBzZWxlY3REYXRhLmNvbmNhdChyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wiZG9jc1wiXS5tYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgT0xTU2VsZWN0UmVzdWx0KGRhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPTFNTZWxlY3Qoc2VsZWN0RGF0YSk7XG4gIH1cblxuXG5cbiAgcHVibGljIHN1Z2dlc3QgPSBhc3luYyhxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzdWdnZXN0XCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU3VnZ2VzdChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRUZXJtVHJlZTpcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJlcXVpcmVzIGFuIG9udG9sb2d5SWQgaW4gY29udGVudFBhcmFtc1xuICAgKiAxKSBJZiBubyB0ZXJtSXJpIGlzIGRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9udG9sb2d5IHJvb3RzIHdpbGwgYmUgcXVlcmllZFxuICAgKiAyKSBJZiBhIHRlcm1JcmkgaXMgZGVmaW5lZCBidXQgbm8gY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgdGhhdCB0ZXJtIHdpbGwgYmUgcXVlcmllZFxuICAgKiAzKSBJZiBhIHRlcm1JcmkgaXMgZGVmaW5lZCBhbmQgYWxzbyBhIGNoaWxkIGluIGpzVHJlZVBhcmFtcywgdGhlIHN1YmhpZXJhcmNoeSBvZiB0aGF0IGNoaWxkIHdpbGwgYmUgcXVlcmllZFxuICAgKi9cbiAgcHVibGljIGdldFRlcm1UcmVlID0gYXN5bmMgKGNvbnRlbnRQYXJhbXM6IENvbnRlbnRQYXJhbXMsIHRyZWVQYXJhbXM6IEpzVHJlZVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zICkgPT4ge1xuICAgIGxldCBiYXNlUmVxdWVzdCA9IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0K1wiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgYmFzZVJlcXVlc3QgPSBiYXNlUmVxdWVzdCtcIi9cIitlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKStcIi9qc3RyZWVcIlxuICAgIGlmICh0cmVlUGFyYW1zLmNoaWxkKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QrXCIvY2hpbGRyZW4vXCIrdHJlZVBhcmFtcy5jaGlsZCkpLmRhdGE7IC8vMylcbiAgICBlbHNlIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCwgeyBwYXJhbXM6IHRyZWVQYXJhbXMgfSkpLmRhdGE7IC8vMilcbiAgfVxuXG4gIHB1YmxpYyBnZXRUZXJtUmVsYXRpb25zID0gYXN5bmMgKGNvbnRlbnRQYXJhbXM6IENvbnRlbnRQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcyApID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi90ZXJtc1wiXG4gICAgaWYgKCFjb250ZW50UGFyYW1zLnRlcm1JcmkpIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCtcIi9yb290c1wiKSkuZGF0YTsgLy8xKVxuICAgIGJhc2VSZXF1ZXN0ID0gYmFzZVJlcXVlc3QrXCIvXCIrZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50UGFyYW1zPy50ZXJtSXJpKSkrXCIvZ3JhcGhcIlxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdob2xlIGVudGl0eSByZXNwb25zZSBqc29uIHdpdGggYSBjb21mb3J0YWJsZSB3cmFwcGVyIGhhbmRsaW5nIGVudGl0eVR5cGUsIG9udG9sb2d5SWQgYW5kIHVzZUxlZ2FjeVxuICAgKiBAcGFyYW0gaXJpXG4gICAqIEBwYXJhbSBlbnRpdHlUeXBlIHF1ZXJpZXMgc3BlY2lmaWMgcm91dGVzIGlmIHByb3ZpZGVkIGFuZCBpbmZlcnMgdHlwZSBpZiBub3RcbiAgICogQHBhcmFtIG9udG9sb2d5SWQgcXVlcmllcyBvbnRvbG9neSByb3V0ZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBub3RcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5IGFmZmVjdHMgaG93IGVudGl0eVR5cGUgaXMgaW5mZXJyZWQgaWYgbm90IHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RW50aXR5UmVzcG9uc2UoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGlmKCFpcmkpIHRocm93IEVycm9yKCdObyBJUkkgcHJvdmlkZWQnKTtcblxuICAgIGlmKGVudGl0eVR5cGUpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHlXaXRoRW50aXR5VHlwZVByb3ZpZGVkKGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIEVudGl0eSBvYmplY3QgKGltcGxlbWVudGluZyAnQ2xhc3MnLCAnUHJvcGVydHknIG9yICdJbmRpdmlkdWFsJykuXG4gICAqIEluZGlyZWN0bHkgZmV0Y2hlcyB0aGUgcmVzcG9uc2UgSlNPTiBmb3IgdGhlIHNwZWNpZmllZCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHBhcmFtZXRlciBhbmQgQVBJIHZlcnNpb24gKHVzZUxlZ2FjeSkuXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gICAqIEBwYXJhbSBpcmlcbiAgICogQHBhcmFtIG9udG9sb2d5SWRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RW50aXR5T2JqZWN0KGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBQcm9taXNlPEVudGl0eT4ge1xuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChhd2FpdCB0aGlzLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpKSBhcyBFbnRpdHk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBPbnRvbG9neSBvYmplY3QuXG4gICAqIEluZGlyZWN0bHkgZmV0Y2hlcyB0aGUgcmVzcG9uc2UgSlNPTiBmb3IgdGhlIHNwZWNpZmllZCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIgYW5kIEFQSSB2ZXJzaW9uICh1c2VMZWdhY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkOiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZSkgYXMgT250b2xvZ3k7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VGhpbmdPYmplY3QoaXJpPzogc3RyaW5nLCB0aGluZ1R5cGU/OiBUaGluZ1R5cGVOYW1lLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogUHJvbWlzZTxUaGluZz4ge1xuICAgIGlmKHRoaW5nVHlwZSkge1xuICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYoIW9udG9sb2d5SWQpIHRocm93IG5ldyBFcnJvcihgb250b2xvZ3lJZCBoYXMgdG8gYmUgcHJvdmlkZWQgaWYgdGhpbmdUeXBlIGluIHtcIiR7b250b2xvZ3lUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXNFbnRpdHlUeXBlTmFtZSh0aGluZ1R5cGUpKSB7XG4gICAgICAgIGlmKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKCFpcmkgJiYgb250b2xvZ3lJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKGlyaSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBpcmkgb3Igb250b2xvZ3lJZCBoYXMgdG8gYmUgcHJvdmlkZWQgaWYgdGhpbmdUeXBlIGlzIG5vdCBwcm92aWRlZC5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogUHJvbWlzZTxhbnk+IHtcbiAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Rlcm0nOiBjYXNlICdjbGFzcyc6IC8vIGFsc28gYWxsb3cgXCJjbGFzc1wiIGV2ZW4gaWYgaXQgc2hvdWxkIGFjdHVhbGx5IGJlIFwidGVybVwiXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzogY2FzZSAnYW5ub3RhdGlvblByb3BlcnR5JzogY2FzZSAnZGF0YVByb3BlcnR5JzogY2FzZSAnb2JqZWN0UHJvcGVydHknOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwge29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHByb3BlcnR5SXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGNhc2UgJ2luZGl2aWR1YWwnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRJbmRpdmlkdWFsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgYFwiLiBNdXN0IGJlIG9uZSBvZiB7JHtlbnRpdHlUeXBlTmFtZXMubWFwKChlbGVtKSA9PiBgXCIke2VsZW19XCJgKS5qb2luKFwiLCBcIil9fS5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEVudGl0eVdpdGhJbmZlcnJlZEVudGl0eVR5cGUoaXJpOiBzdHJpbmcsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZykgOiBQcm9taXNlPGFueT4ge1xuICAgIC8qXG4gICAgICAgICAgICBUZXN0IGFsbCB0eXBlcyBvZiBlbnRpdGllcyAodGVybSwgcHJvcGVydHksIGluZGl2aWR1YWwpIG1hbnVhbGx5IHdpdGggc2VwYXJhdGUgcXVlcmllcyAoYXMgL2VudGl0aWVzIGRvZXMgbm90IGV4aXN0IGZvciBsZWdhY3kgQVBJKVxuICAgICAgICAgICAgLT4gcmV0dXJuIHRoZSByZXNwb25zZSBvYmplY3Qgd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIGNvbnRhaW5lZCBlbnRpdHlcbiAgICAgICAgICAgIC0+IHRocm93IGVycm9yIGlmIG5vbmUgb2YgdGhlIHR5cGVzIGNvbnRhaW5zIGFuIGVudGl0eVxuICAgICAgICAgICovXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDtcblxuICAgIGxldCByZXNwb25zZTsgLy8gc3RvcmVzIHRoZSBlbnRpdHkgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIGVuZFxuXG4gICAgZnVuY3Rpb24gc2V0QW5kU3RvcChyZXM6IGFueSkge1xuICAgICAgaWYgKHJlc1tcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3BvbnNlID0gcmVzO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7IC8vIGFib3J0IHF1ZXJpZXMgZm9yIG90aGVyIGVudGl0eVR5cGVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICBbXG4gICAgICAgICAgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpfSwgcGFyYW1ldGVyLCB0cnVlLCBzaWduYWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge3NldEFuZFN0b3AocmVzKX0pLFxuICAgICAgICAgIHRoaXMuZ2V0UHJvcGVydHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpfSwgcGFyYW1ldGVyLCB0cnVlLCBzaWduYWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge3NldEFuZFN0b3AocmVzKX0pLFxuICAgICAgICAgIHRoaXMuZ2V0SW5kaXZpZHVhbCh1bmRlZmluZWQsIHVuZGVmaW5lZCwge29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIGluZGl2aWR1YWxJcmk6IGlyaX0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHtzZXRBbmRTdG9wKHJlcyl9KVxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGlmKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHJldHVybiByZXNwb25zZTtcbiAgICBlbHNlIHRocm93IEVycm9yKFwiSXJpIFwiICsgaXJpICsgXCIgY291bGQgbm90IGJlIHJlc29sdmVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbmNlc3RvcnMoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UpIDogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGxldCBhbmNlc3RvcnM6IGFueTtcbiAgICBpZihpc0NsYXNzVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIGZhbHNlKX0vaGllcmFyY2hpY2FsQW5jZXN0b3JzYCwge3BhcmFtczoge3NpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXN9fSwgZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIGZhbHNlKX0vYW5jZXN0b3JzYCwge3BhcmFtczoge3NpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXN9fSwgZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvcnNbXCJlbGVtZW50c1wiXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgY3JlYXRlTW9kZWxPYmplY3Qoe2VsZW1lbnRzOiBbb2JqXX0pIGFzIEVudGl0eVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SlNUcmVlKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZDogc3RyaW5nKSA6IFByb21pc2U8SlNUcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIHRydWUpfS9qc3RyZWVgLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCJ9fSwgdHJ1ZSk7XG4gIH1cblxuICAvLyBUT0RPOiBEbyB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW9yIGFzIEVNQkwgRUJJIChlLmcuIG5vdCBnZXR0aW5nIGluc3RhbmNlcyBmb3IgY2xhc3NlcyBpZiBlbnRpdHlUeXBlICE9IFwiaW5kaXZpZHVhbFwiKT9cbiAgcHVibGljIGFzeW5jIGdldENoaWxkcmVuKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZDogc3RyaW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLCB1c2VMZWdhY3kgPSBmYWxzZSkgOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGNoaWxkcmVuOiBhbnk7XG4gICAgaWYoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCB1c2VMZWdhY3kpfS9oaWVyYXJjaGljYWxDaGlsZHJlbmAsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfX0sIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2UgaWYoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIC8vIGVudGl0eVR5cGUgZG9lcyBOT1QgaW5kaWNhdGUgd2hpY2ggdHlwZSB0aGUgZW50aXR5IG9mIHRoZSBwcm92aWRlZCBpcmkgaGFzLCBidXQgd2hpY2ggdHlwZSBvZiBoaWVyYXJjaHkgaXMgZGVzaXJlZFxuICAgICAgLy8gLT4gXCJjbGFzc1wiIGhhcyB0byBiZSBwcm92aWRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaHkgYXMgd2VsbCwgYXMgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBjaGlsZHJlbiBvZiBjbGFzc2VzXG4gICAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgICAgLy8gVE9ETzogRG9lcyBkZXNjZW5kYW50cyBhbHdheXMgd29yayBmb3IgdGhpcyAob3IgYXJlIHRoZXJlIGNsYXNzZXMgd2l0aCBib3RoIGluZGl2aWR1YWxzIGFuZCBjbGFzc2VzIGFzIGRlc2NlbmRhbnRzKT9cbiAgICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vZGVzY2VuZGFudHNgLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCJ9fSwgdXNlTGVnYWN5KVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIHVzZUxlZ2FjeSl9L2luc3RhbmNlc2AsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfX0sIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9jaGlsZHJlbmAsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfX0sIHVzZUxlZ2FjeSk7XG4gICAgfVxuXG4gICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5bXCJfZW1iZWRkZWRcIl1baXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkgPyBwbHVyYWxpemVUeXBlKGNsYXNzVHlwZU5hbWVzWzBdLCB1c2VMZWdhY3kpIDogcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCB1c2VMZWdhY3kpXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHtbXCJfZW1iZWRkZWRcIl06IHtbaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkgPyBwbHVyYWxpemVUeXBlKGNsYXNzVHlwZU5hbWVzWzBdLCB1c2VMZWdhY3kpIDogcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlKV06IFtvYmpdfX0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gY2hpbGRyZW5bXCJlbGVtZW50c1wiXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHtlbGVtZW50czogW29ial19KSBhcyBFbnRpdHlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJvb3RFbnRpdGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZDogc3RyaW5nLCBwcmVmZXJyZWRSb290cyA9IGZhbHNlLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlLCB1c2VMZWdhY3kgPSBmYWxzZSkgOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICBpZihpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSl7XG4gICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWxzXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiAvcHJlZmVycmVkUm9vdHMgcm91dGUgc2hvdWxkIGV4aXN0IGluIGxlZ2FjeSBhcGksIGJ1dCBkb2VzIG5vdCB3b3JrXG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KX0vcm9vdHNgLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllc319LCB1c2VMZWdhY3kpO1xuXG4gICAgICAgIHJldHVybiByb290c1tcIl9lbWJlZGRlZFwiXVtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgICBjcmVhdGVNb2RlbE9iamVjdCh7W1wiX2VtYmVkZGVkXCJdOiB7W3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KV06IFtvYmpdfX0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpKXtcbiAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbHNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KX1gLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgaGFzRGlyZWN0UGFyZW50OiBwcmVmZXJyZWRSb290cyA/IHVuZGVmaW5lZCA6IFwiZmFsc2VcIiwgaXNQcmVmZXJyZWRSb290OiBwcmVmZXJyZWRSb290cyA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfX0sIHVzZUxlZ2FjeSk7XG5cbiAgICAgICAgcmV0dXJuIHJvb3RzW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHtlbGVtZW50czogW29ial19KSBhcyBFbnRpdHlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2xhc3NJbnN0YW5jZXMoaXJpOiBzdHJpbmcsIG9udG9sb2d5SWQ6IHN0cmluZykgOiBQcm9taXNlPEluZGl2aWR1YWxbXT4ge1xuICAgIGNvbnN0IGluc3RhbmNlcyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCBmYWxzZSl9L2luZGl2aWR1YWxzYCwge3BhcmFtczoge3NpemU6IFwiMTAwMFwifX0sIGZhbHNlKTtcblxuICAgIHJldHVybiBpbnN0YW5jZXNbXCJlbGVtZW50c1wiXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgY3JlYXRlTW9kZWxPYmplY3Qoe2VsZW1lbnRzOiBbb2JqXX0pIGFzIEluZGl2aWR1YWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGlyaSxcbiAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM9IGZhbHNlLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcz0gZmFsc2UsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMgPSB0cnVlLFxuICAgICAgICBzaG93U2libGluZ3NPbkluaXQgPSBmYWxzZSxcbiAgICAgICAgdXNlTGVnYWN5ID0gZmFsc2UsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYoaXJpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBcIlwiLCB1c2VMZWdhY3kpLnRoZW4oKGVudGl0eSkgPT4gdGhpcy5idWlsZEhpZXJhcmNoeVdpdGhFbnRpdHkoe1xuICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlIHx8IGVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWUsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQgfHwgZW50aXR5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIG1haW5FbnRpdHk6IGVudGl0eSxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczoga2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgICAgfSkpO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgaWYoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQgfHwgb250b2xvZ3lJZCA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRWl0aGVyIGlyaSBvciBvbnRvbG9neUlkIGFuZCBlbnRpdHlUeXBlIGhhdmUgdG8gYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRSb290SGllcmFyY2h5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBqc1RyZWVOb2RlVG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGpzVHJlZU5vZGU6IEpTVHJlZU5vZGUpOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBqc1RyZWVOb2RlLmlyaSxcbiAgICAgIGxhYmVsOiBqc1RyZWVOb2RlLnRleHQsXG4gICAgICBoYXNDaGlsZHJlbjoganNUcmVlTm9kZS5jaGlsZHJlbiB8fCBqc1RyZWVOb2RlLnN0YXRlLm9wZW5lZCxcbiAgICAgIHBhcmVudHM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBlbnRpdHkuZ2V0SXJpKCksXG4gICAgICBsYWJlbDogYXNBcnJheShlbnRpdHkuZ2V0TGFiZWwoKSlbMF0sXG4gICAgICBkZWZpbmVkQnk6IGVudGl0eS5nZXREZWZpbmVkQnkoKSxcbiAgICAgIGhhc0NoaWxkcmVuOiBlbnRpdHkuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIG51bURlc2NlbmRhbnRzOiBlbnRpdHkuZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCBlbnRpdHkuZ2V0TnVtRGVzY2VuZGFudHMoKSxcbiAgICAgIHBhcmVudHM6IGVudGl0eS5nZXRQYXJlbnRzKClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkUm9vdEhpZXJhcmNoeShcbiAgICBwcm9wczoge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgfSAmIEJ1aWxkSGllcmFyY2h5UHJvcHNcbiAgKSA6IFByb21pc2U8SGllcmFyY2h5PiB7XG5cbiAgICBjb25zdCB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICB1c2VMZWdhY3lcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvKiBRVUVSWSByb290IGVudGl0aWVzICovXG4gICAgY29uc3Qgcm9vdEVudGl0aWVzRGF0YSA9IChhd2FpdCB0aGlzLmdldFJvb3RFbnRpdGllcyhlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwcmVmZXJyZWRSb290cywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHVzZUxlZ2FjeSkpXG4gICAgICAgIC5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5KSlcbiAgICAgICAgLmZpbHRlcigocm9vdCkgPT4gIWlzVG9wKHJvb3QuaXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBJTklUSUFMSVpFIGVudGl0aWVzRGF0YSwgcGFyZW50Q2hpbGRSZWxhdGlvbnMgKi9cbiAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpO1xuICAgIGZvcihjb25zdCBlbnRpdHlEYXRhIG9mIHJvb3RFbnRpdGllc0RhdGEpIHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgW10pOyAvLyBpbml0aWFsaXplIHdpdGggZW1wdHkgYXJyYXlcbiAgICAgIGVudGl0aWVzRGF0YS5zZXQoZW50aXR5RGF0YS5pcmksIGVudGl0eURhdGEpO1xuICAgIH1cbiAgICAvKiAtLS0gKi9cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBuZXcgU2V0KCksXG4gICAgICByb290czogcm9vdEVudGl0aWVzRGF0YS5tYXAoKHJvb3QpID0+IG5ldyBUcmVlTm9kZShyb290KSkuc29ydCgoYSxiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKSxcbiAgICAgIGFwaTogbmV3IE9sc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KFxuICAgIHByb3BzOiB7XG4gICAgICBtYWluRW50aXR5OiBFbnRpdHksXG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICB9ICYgQnVpbGRIaWVyYXJjaHlQcm9wc1xuICApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIG1haW5FbnRpdHksXG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICB1c2VMZWdhY3lcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvKiBMT0FEIGFuY2VzdG9ycyAqL1xuICAgIGxldCBlbnRpdGllczogRW50aXR5RGF0YUZvckhpZXJhcmNoeVtdID0gW107XG5cbiAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgIC8vIFRPRE86IEpTVHJlZSBzb21ldGltZXMgcmV0dXJucyBzbWFsbGVyIHRyZWVzIHRoYW4gd291bGQgYmUgcG9zc2libGUgdmlhIHF1ZXJ5aW5nIGhpZXJhcmNoaWNhbCBhbmNlc3RvcnMgYW5kIGFsbCBjaGlsZHJlbiBvZiB0aG9zZSAoZS5nLiBodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vVUJFUk9OXzIwMDE3NDcgLT4gc3RyYW5nZSBhbmQgbm90IHJlYWxseSB1c2VmdWwgaGllcmFyY2h5IGJlY2F1c2UgbWFueSBlbnRpdGllcyBhcmUgYm90aCBzaWJsaW5nIGFuZCBjaGlsZHJlbiBvZiBvdGhlciBlbnRpdGllcyAoaXMgaXQgd3JvbmcgdG8gdGFrZSBoaWVyYXJjaGljYWxQYXJlbnQgaW5zdGVhZCBvZiBkaXJlY3RQYXJlbnQgaW4gZW50aXR5VG9FbnRpdHlEYXRhVG9IaWVyYXJjaHk/IEVNQkwtRUJJIGRvZXMgaXQgbGlrZSB0aGF0IGFzIHdlbGwpKVxuICAgICAgLy8gICAgICAgUXVlc3Rpb246IFNob3VsZCB3ZSBwcmVmZXIgY29tcGxldGUgaGllcmFyY2hpZXMgKHF1ZXJ5IC9oaWVyYXJjaGljYWxBbmNlc3RvcnMgKyAvY2hpbGRyZW4gZm9yIGVhY2gpIG9yIHNsaW0gcXVlcmllcyAocXVlcnkgL2pzdHJlZSk/XG4gICAgICBjb25zdCBqc1RyZWUgPSBhd2FpdCB0aGlzLmdldEpTVHJlZShtYWluRW50aXR5LmdldElyaSgpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkKTtcbiAgICAgIGNvbnN0IGlkVG9JcmkgOiBNYXA8c3RyaW5nLHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZyxzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwYXJlbnRzIDogTWFwPHN0cmluZyxTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgICAgIGZvcihjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZFRvSXJpLnNldChqc1RyZWVOb2RlLmlkLCBqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIHBhcmVudHMuc2V0KGpzVHJlZU5vZGUuaXJpLCBuZXcgU2V0PHN0cmluZz4oKSk7XG4gICAgICB9XG5cbiAgICAgIGZvcihjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBjb25zdCBwYXJBcnIgPSBwYXJlbnRzLmdldChqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIGNvbnN0IHBhcklyaSA9IGlkVG9JcmkuZ2V0KGpzVHJlZU5vZGUucGFyZW50KTtcbiAgICAgICAgaWYocGFyQXJyICE9IHVuZGVmaW5lZCAmJiBwYXJJcmkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGFyQXJyLmFkZChwYXJJcmkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVudGl0aWVzID0gW107XG4gICAgICBjb25zdCBpbkFyciA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICBmb3IoY29uc3QganNUcmVlTm9kZSBvZiBqc1RyZWUpIHtcbiAgICAgICAgaWYoIWluQXJyLmhhcyhqc1RyZWVOb2RlLmlyaSkpIHtcbiAgICAgICAgICBpbkFyci5hZGQoanNUcmVlTm9kZS5pcmkpO1xuXG4gICAgICAgICAgZW50aXRpZXMucHVzaCh0aGlzLmpzVHJlZU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoanNUcmVlTm9kZSkpO1xuICAgICAgICAgIGNvbnN0IHBhciA9IHBhcmVudHMuZ2V0KGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgICBpZihwYXIgIT0gdW5kZWZpbmVkKSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXS5wYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbihBcnJheS5mcm9tKHBhci52YWx1ZXMoKSkpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgYW5jZXN0b3JzID0gYXdhaXQgdGhpcy5nZXRBbmNlc3RvcnMobWFpbkVudGl0eS5nZXRJcmkoKSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCB8fCBtYWluRW50aXR5LmdldE9udG9sb2d5SWQoKSwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMpO1xuICAgICAgZW50aXRpZXMgPSBbdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkobWFpbkVudGl0eSksIC4uLmFuY2VzdG9ycy5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5KSldXG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIHRvcCBlbnRpdGllc1xuICAgIGVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKChlKSA9PiAhaXNUb3AoZS5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIEJVSUxEIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+KCk7XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmVudENoaWxkUmVsYXRpb25zICYgZW50aXRpZXNEYXRhXG4gICAgZm9yKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgW10pOyAvLyBpbml0aWFsaXplIHdpdGggZW1wdHkgYXJyYXlcbiAgICAgIGVudGl0aWVzRGF0YS5zZXQoZW50aXR5RGF0YS5pcmksIGVudGl0eURhdGEpO1xuICAgIH1cblxuICAgIGlmKHNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgLy8gYWRkaXRpb25hbGx5IGxvYWQgc2libGluZ3MgZnJvbSBhcGlcbiAgICAgIGNvbnN0IHJlYWxFbnRpdHlUeXBlID0gKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpO1xuICAgICAgY29uc3QgZW50aXR5VHlwZUZvclF1ZXJ5ID0gcmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgPyBcImNsYXNzXCIgOiByZWFsRW50aXR5VHlwZTsgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgZm9yKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgaWYoZW50aXR5RGF0YS5pcmkgIT0gbWFpbkVudGl0eS5nZXRJcmkoKSkge1xuICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oZW50aXR5RGF0YS5pcmksIGVudGl0eVR5cGVGb3JRdWVyeSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHVzZUxlZ2FjeSkudGhlbigoY2hpbGRyZW4pID0+IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGNoaWxkKSkpLnRoZW4oKGNoaWxkcmVuKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyQ2hpbGRSZWw6IFBhcmVudENoaWxkUmVsYXRpb25bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KGNoaWxkLmlyaSwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcigocGFyKSA9PiBwYXIudmFsdWUgPT0gZW50aXR5RGF0YS5pcmkpOyAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHtjaGlsZElyaTogY2hpbGQuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IHBhclJlbGF0aW9uLmxlbmd0aCA+IDAgJiYgcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKSA/IHBhclJlbGF0aW9uWzBdLmdldE1ldGFkYXRhKClbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl0gOiB1bmRlZmluZWR9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoZW50aXR5RGF0YS5pcmksIHBhckNoaWxkUmVsKTtcbiAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlKVxuICAgICAgICAgICkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcblxuICAgICAgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcbiAgICAgIGlmKHJlYWxFbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiKSB7XG4gICAgICAgIGZvcihjb25zdCBwYXJlbnRSZWlmaWVkIG9mIG1haW5FbnRpdHkuZ2V0UGFyZW50cygpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihwYXJlbnRSZWlmaWVkLnZhbHVlLCByZWFsRW50aXR5VHlwZSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMpKVxuICAgICAgICAgICAgICAubWFwKChjaGlsZCkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoY2hpbGQpKVxuXG4gICAgICAgICAgY29uc3QgcGFyQ2hpbGRSZWw6IFBhcmVudENoaWxkUmVsYXRpb25bXSA9IFtdO1xuICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbil7XG4gICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHtjaGlsZElyaTogY2hpbGQuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIn0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQocGFyZW50UmVpZmllZC52YWx1ZSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYoZW50aXR5RGF0YS5pcmkgPT0gbWFpbkVudGl0eT8uZ2V0SXJpKCkgJiYgaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSB8fCBtYWluRW50aXR5LmdldFR5cGUoKSkpIHtcbiAgICAgICAgICBmb3IoY29uc3QgcGFyZW50UmVpZmllZCBvZiBwYXJlbnRzKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Q2hpbGRSZWxhdGlvbnMuaGFzKHBhcmVudFJlaWZpZWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLmdldChwYXJlbnRSZWlmaWVkLnZhbHVlKT8ucHVzaCh7Y2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIn0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBhcmVudFJlaWZpZWQgb2YgcGFyZW50cykge1xuICAgICAgICAgICAgaWYgKHBhcmVudENoaWxkUmVsYXRpb25zLmhhcyhwYXJlbnRSZWlmaWVkLnZhbHVlKSkge1xuICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQocGFyZW50UmVpZmllZC52YWx1ZSk/LnB1c2goe2NoaWxkSXJpOiBlbnRpdHlEYXRhLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKCkgPyBwYXJlbnRSZWlmaWVkLmdldE1ldGFkYXRhKClbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl0gOiB1bmRlZmluZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yKGNvbnN0IHJlbCBvZiBwYXJlbnRDaGlsZFJlbGF0aW9ucy52YWx1ZXMoKSkgcmVsLnNvcnQoKGEsIGIpID0+IChlbnRpdGllc0RhdGEuZ2V0KGEuY2hpbGRJcmkpPy5sYWJlbCB8fCBhLmNoaWxkSXJpKS5sb2NhbGVDb21wYXJlKGVudGl0aWVzRGF0YS5nZXQoYi5jaGlsZElyaSk/LmxhYmVsIHx8IGIuY2hpbGRJcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIEJVSUxEIHJvb3RFbnRpdGllcyAqL1xuICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICBpZihwcmVmZXJyZWRSb290cykge1xuICAgICAgY29uc3QgcHJlZmVycmVkUm9vdEVudGl0aWVzID0gKGF3YWl0IHRoaXMuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpKS5nZXRQcmVmZXJyZWRSb290cygpO1xuICAgICAgZm9yKGNvbnN0IGUgb2YgcHJlZmVycmVkUm9vdEVudGl0aWVzKSB7XG4gICAgICAgIGlmKGVudGl0aWVzRGF0YS5oYXMoZSkpIHJvb3RFbnRpdGllcy5wdXNoKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcihjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBlbnRpdHlEYXRhLnBhcmVudHMuZmlsdGVyKChwYXJlbnRSZWlmaWVkOiBSZWlmaWVkPHN0cmluZz4pID0+ICFpc1RvcChwYXJlbnRSZWlmaWVkLnZhbHVlKSk7XG4gICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA9PSAwKSByb290RW50aXRpZXMucHVzaChlbnRpdHlEYXRhLmlyaSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIC0tLSAqL1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoZW50aXR5RGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeSwgY3ljbGVDaGVjazogU2V0PHN0cmluZz4sIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZyk6IFRyZWVOb2RlIHtcbiAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgbm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZERhdGEgPSBlbnRpdGllc0RhdGEuZ2V0KGNoaWxkLmNoaWxkSXJpKTtcbiAgICAgICAgaWYoY2hpbGREYXRhICE9IHVuZGVmaW5lZCkgbm9kZS5hZGRDaGlsZChjcmVhdGVUcmVlTm9kZShjaGlsZERhdGEsIGN5Y2xlQ2hlY2ssIGNoaWxkLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgfVxuXG4gICAgICBpZihub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgcm9vdHM6IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+IGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQocm9vdEVudGl0eSkhLCBjeWNsZUNoZWNrKSkuc29ydCgoYSxiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKSxcbiAgICAgIGFwaTogbmV3IE9sc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICBtYWluRW50aXR5SXJpOiBtYWluRW50aXR5Py5nZXRJcmkoKSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRIaWVyYXJjaHlDaGlsZHJlbihwcm9wczogTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMpOiBQcm9taXNlPEVudGl0eURhdGFGb3JIaWVyYXJjaHlbXT4ge1xuICAgIGlmKHByb3BzLmVudGl0eVR5cGUgPT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihcIkVudGl0eVR5cGUgaGFzIHRvIGJlIHByb3ZpZGVkIHRvIGxvYWQgY2hpbGRyZW4gaW4gT0xTLlwiKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihwcm9wcy5ub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLCBwcm9wcy51c2VMZWdhY3kpKVxuICAgICAgICAubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGVudGl0eSkpXG4gIH1cbn0iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9zY3JlZW5fcmVhZGVyX29ubHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2NyZWVuUmVhZGVyTGl2ZSA9IGZ1bmN0aW9uIEV1aVNjcmVlblJlYWRlckxpdmUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgICBpc0FjdGl2ZSA9IF9yZWYkaXNBY3RpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGlzQWN0aXZlLFxuICAgICAgX3JlZiRyb2xlID0gX3JlZi5yb2xlLFxuICAgICAgcm9sZSA9IF9yZWYkcm9sZSA9PT0gdm9pZCAwID8gJ3N0YXR1cycgOiBfcmVmJHJvbGUsXG4gICAgICBfcmVmJGFyaWFMaXZlID0gX3JlZlsnYXJpYS1saXZlJ10sXG4gICAgICBhcmlhTGl2ZSA9IF9yZWYkYXJpYUxpdmUgPT09IHZvaWQgMCA/ICdwb2xpdGUnIDogX3JlZiRhcmlhTGl2ZSxcbiAgICAgIF9yZWYkZm9jdXNSZWdpb25PblRleCA9IF9yZWYuZm9jdXNSZWdpb25PblRleHRDaGFuZ2UsXG4gICAgICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA9IF9yZWYkZm9jdXNSZWdpb25PblRleCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvY3VzUmVnaW9uT25UZXg7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgdG9nZ2xlID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFRvZ2dsZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKG51bGwpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldFRvZ2dsZShmdW5jdGlvbiAodG9nZ2xlKSB7XG4gICAgICByZXR1cm4gIXRvZ2dsZTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvY3VzUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UpIHtcbiAgICAgIGZvY3VzUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFt0b2dnbGUsIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlXSk7XG4gIHJldHVybiAoXG4gICAgLyoqXG4gICAgICogSW50ZW50aW9uYWxseSB1c2VzIHR3byBwZXJzaXN0ZW50IGxpdmUgcmVnaW9ucyB3aXRoIG9zY2lsbGF0aW5nIGNvbnRlbnQgdXBkYXRlcy5cbiAgICAgKiBUaGlzIHJlc29sdmVzIHRoZSBwcm9ibGVtIG9mIGR1cGxpY2F0ZSBzY3JlZW4gcmVhZGVyIGFubm91bmNlbWVudHMgaW4gcmFwaWQgc3VjY2Vzc2lvblxuICAgICAqIGNhdXNlZCBieSBSZWFjdCdzIHZpcnR1YWwgRE9NIGJlaGF2aW91ciAoaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc5OTYjaXNzdWVjb21tZW50LTQxMzY0MTcwOSlcbiAgICAgKlxuICAgICAqIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWxwaGFnb3YvYWNjZXNzaWJsZS1hdXRvY29tcGxldGUvYmxvYi9hNzEwNmYwMzE1MDk0MWZjMTVlNmMxY2ViMGE5MGU4ODcyZmE4NmVmL3NyYy9zdGF0dXMuanNcbiAgICAgKiBEZWJvdW5jaW5nIHdhcyBub3QgbmVlZGVkIGZvciB0aGlzIGNhc2UsIGJ1dCBjb3VsZCBwcm92ZSB0byBiZSB1c2VmdWwgZm9yIGZ1dHVyZSB1c2UgY2FzZXMuXG4gICAgICogU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL0FsbWVyb1N0ZXluL3JlYWN0LWFyaWEtbGl2ZSBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2RlcXVlbGFicy9uZ0ExMXlcbiAgICAgKiBmb3IgbW9yZSBleGFtcGxlcyBvZiB0aGUgZG91YmxlIHJlZ2lvbiBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgcmVmOiBmb2N1c1JlZixcbiAgICAgIHRhYkluZGV4OiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/IC0xIDogdW5kZWZpbmVkXG4gICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIiAvLyBTZXR0aW5nIGBhcmlhLWhpZGRlbmAgYW5kIHNldHRpbmcgYGFyaWEtbGl2ZWAgdG8gXCJvZmZcIiBwcmV2ZW50c1xuICAgICAgLy8gZG91YmxlIGFubm91bmNlbWVudHMgZnJvbSBWTyB3aGVuIGBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZWAgaXMgdHJ1ZVxuICAgICAgLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0b2dnbGUgPyB1bmRlZmluZWQgOiAndHJ1ZScsXG4gICAgICBcImFyaWEtbGl2ZVwiOiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiB0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogIXRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmICF0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSkpXG4gICk7XG59O1xuRXVpU2NyZWVuUmVhZGVyTGl2ZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbWFrZSBzY3JlZW4gcmVhZGVycyBhd2FyZSBvZiB0aGUgY29udGVudFxuICAgICAqL1xuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ29udGVudCBmb3Igc2NyZWVuIHJlYWRlcnMgdG8gYW5ub3VuY2VcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIGByb2xlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zLlxuICAgICAqXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0FSSUFfTGl2ZV9SZWdpb25zI3JvbGVzX3dpdGhfaW1wbGljaXRfbGl2ZV9yZWdpb25fYXR0cmlidXRlc1xuICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIGBhcmlhLWxpdmVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnNcbiAgICAgKi9cbiAgXCJhcmlhLWxpdmVcIjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPbiBgY2hpbGRyZW5gL3RleHQgY2hhbmdlLCB0aGUgcmVnaW9uIHdpbGwgYXV0by1mb2N1cyBpdHNlbGYsIGNhdXNpbmcgc2NyZWVuIHJlYWRlcnNcbiAgICAgKiB0byBhdXRvbWF0aWNhbGx5IHJlYWQgb3V0IHRoZSB0ZXh0IGNvbnRlbnQuIFRoaXMgcHJvcCBzaG91bGQgcHJpbWFyaWx5IGJlIHVzZWQgZm9yXG4gICAgICogbmF2aWdhdGlvbiBvciBwYWdlIGNoYW5nZXMsIHdoZXJlIHByb2dyYW1tYXRpY2FsbHkgcmVzZXR0aW5nIGZvY3VzIGxvY2F0aW9uIGJhY2sgdG9cbiAgICAgKiBhIGNlcnRhaW4gcGFydCBvZiB0aGUgcGFnZSBpcyBkZXNpcmVkLlxuICAgICAqL1xuICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZTogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50JztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMgfSBmcm9tICcuL3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMnO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyT25seShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHNob3dPbkZvY3VzID0gX3JlZi5zaG93T25Gb2N1cztcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTY3JlZW5SZWFkZXJPbmx5XTtcbiAgdmFyIHByb3BzID0ge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5sZW5ndGggPyBjbGFzc2VzIDogdW5kZWZpbmVkLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH07XG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpU2NyZWVuUmVhZGVyT25seS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCBmb3JjZSBjb250ZW50IHRvIGRpc3BsYXkgdmlzdWFsbHkgdXBvbiBmb2N1cy5cbiAgICAgKi9cbiAgc2hvd09uRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxuLyogaW1wb3J0IHsgdHlwZSBFbW90aW9uQ2FjaGUgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0XG4vKjogUmVhY3QuQ29udGV4dDxFbW90aW9uQ2FjaGUgfCBudWxsPiAqL1xuPSAvKiAjX19QVVJFX18gKi9SZWFjdC5jcmVhdGVDb250ZXh0KCAvLyB3ZSdyZSBkb2luZyB0aGlzIHRvIGF2b2lkIHByZWNvbnN0cnVjdCdzIGRlYWQgY29kZSBlbGltaW5hdGlvbiBpbiB0aGlzIG9uZSBjYXNlXG4vLyBiZWNhdXNlIHRoaXMgbW9kdWxlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGhlIGJyb3dzZXIgYW5kIG5vZGVcbi8vIGJ1dCBpdCdzIGFsc28gcmVxdWlyZWQgaW4gcmVhY3QgbmF0aXZlIGFuZCBzaW1pbGFyIGVudmlyb25tZW50cyBzb21ldGltZXNcbi8vIGFuZCB3ZSBjb3VsZCBoYXZlIGEgc3BlY2lhbCBidWlsZCBqdXN0IGZvciB0aGF0XG4vLyBidXQgdGhpcyBpcyBtdWNoIGVhc2llciBhbmQgdGhlIG5hdGl2ZSBwYWNrYWdlc1xuLy8gbWlnaHQgdXNlIGEgZGlmZmVyZW50IHRoZW1lIGNvbnRleHQgaW4gdGhlIGZ1dHVyZSBhbnl3YXlcbnR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyAvKiAjX19QVVJFX18gKi9jcmVhdGVDYWNoZSh7XG4gIGtleTogJ2Nzcydcbn0pIDogbnVsbCk7XG5cbnZhciBDYWNoZVByb3ZpZGVyID0gRW1vdGlvbkNhY2hlQ29udGV4dC5Qcm92aWRlcjtcbnZhciBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB1c2VFbW90aW9uQ2FjaGUoKVxuLyo6IEVtb3Rpb25DYWNoZSB8IG51bGwqL1xue1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZVxuLyogPFByb3BzLCBSZWY6IFJlYWN0LlJlZjwqPj4gKi9cbihmdW5jXG4vKjogKHByb3BzOiBQcm9wcywgY2FjaGU6IEVtb3Rpb25DYWNoZSwgcmVmOiBSZWYpID0+IFJlYWN0Lk5vZGUgKi9cbilcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDxQcm9wcz4gKi9cbntcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wc1xuICAvKjogUHJvcHMgKi9cbiAgLCByZWZcbiAgLyo6IFJlZiAqL1xuICApIHtcbiAgICAvLyB0aGUgY2FjaGUgd2lsbCBuZXZlciBiZSBudWxsIGluIHRoZSBicm93c2VyXG4gICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbiAgICByZXR1cm4gZnVuYyhwcm9wcywgY2FjaGUsIHJlZik7XG4gIH0pO1xufTtcblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG52YXIgdXNlVGhlbWUgPSBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbn07XG5cbnZhciBnZXRUaGVtZSA9IGZ1bmN0aW9uIGdldFRoZW1lKG91dGVyVGhlbWVcbi8qOiBPYmplY3QgKi9cbiwgdGhlbWVcbi8qOiBPYmplY3QgfCAoT2JqZWN0ID0+IE9iamVjdCkgKi9cbikge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIHRoZW1lKTtcbn07XG5cbnZhciBjcmVhdGVDYWNoZVdpdGhUaGVtZSA9IC8qICNfX1BVUkVfXyAqL3dlYWtNZW1vaXplKGZ1bmN0aW9uIChvdXRlclRoZW1lKSB7XG4gIHJldHVybiB3ZWFrTWVtb2l6ZShmdW5jdGlvbiAodGhlbWUpIHtcbiAgICByZXR1cm4gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpO1xuICB9KTtcbn0pO1xuLypcbnR5cGUgVGhlbWVQcm92aWRlclByb3BzID0ge1xuICB0aGVtZTogT2JqZWN0IHwgKE9iamVjdCA9PiBPYmplY3QpLFxuICBjaGlsZHJlbjogUmVhY3QuTm9kZVxufVxuKi9cblxudmFyIFRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzXG4vKjogVGhlbWVQcm92aWRlclByb3BzICovXG4pIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWVcbi8qIDxDb25maWc6IHt9PiAqL1xuKENvbXBvbmVudFxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PENvbmZpZz4gKi9cbilcbi8qOiBSZWFjdC5BYnN0cmFjdENvbXBvbmVudDwkRGlmZjxDb25maWcsIHsgdGhlbWU6IE9iamVjdCB9Pj4gKi9cbntcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cbiAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTtcblxuICB2YXIgV2l0aFRoZW1lID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYocmVuZGVyKTtcbiAgV2l0aFRoZW1lLmRpc3BsYXlOYW1lID0gXCJXaXRoVGhlbWUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCI7XG4gIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoVGhlbWUsIENvbXBvbmVudCk7XG59XG5cbnZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBjcmVhdGVFbW90aW9uUHJvcHMgPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uUHJvcHModHlwZVxuLyo6IFJlYWN0LkVsZW1lbnRUeXBlICovXG4sIHByb3BzXG4vKjogT2JqZWN0ICovXG4pIHtcblxuICB2YXIgbmV3UHJvcHNcbiAgLyo6IGFueSAqL1xuICA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIFJ1bnRpbWUgbGFiZWxpbmcgaXMgYW4gb3B0LWluIGZlYXR1cmUgYmVjYXVzZTpcblxuICByZXR1cm4gbmV3UHJvcHM7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgRW1vdGlvbiA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoXG4vKiA8YW55LCBhbnk+ICovXG5mdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSAmJiBrZXkgIT09ICdjc3MnICYmIGtleSAhPT0gdHlwZVByb3BOYW1lICYmICghaXNEZXZlbG9wbWVudCApKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgaWYgKHJlZikge1xuICAgIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgaXNTdHJpbmdUYWc6IHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09PSAnc3RyaW5nJ1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgbmV3UHJvcHMpKTtcbn0pO1xuXG52YXIgRW1vdGlvbiQxID0gRW1vdGlvbjtcblxuZXhwb3J0IHsgQ2FjaGVQcm92aWRlciBhcyBDLCBFbW90aW9uJDEgYXMgRSwgVGhlbWVDb250ZXh0IGFzIFQsIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSBhcyBfLCBUaGVtZVByb3ZpZGVyIGFzIGEsIHdpdGhUaGVtZSBhcyBiLCBjcmVhdGVFbW90aW9uUHJvcHMgYXMgYywgaGFzT3duIGFzIGgsIGlzRGV2ZWxvcG1lbnQgYXMgaSwgdXNlVGhlbWUgYXMgdSwgd2l0aEVtb3Rpb25DYWNoZSBhcyB3IH07XG4iLCAidmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxuLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCBcdTI3NjRcdUZFMEZcblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cblxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfSAvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggYSB2YWx1ZVxuICAvLyBUUyBjYW4ndCB1bmRlcnN0YW5kIGl0IHRob3VnaCBzbyB3ZSBtYWtlIGl0IHN0b3AgY29tcGxhaW5pbmcgaGVyZVxuXG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gIWlzRGV2ZWxvcG1lbnQgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5wcmVwZW5kID0gb3B0aW9ucy5wcmVwZW5kO1xuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBvcHRpb25zLmluc2VydGlvblBvaW50O1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaHlkcmF0ZSA9IGZ1bmN0aW9uIGh5ZHJhdGUobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKHRoaXMuX2luc2VydFRhZyk7XG4gIH07XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5faW5zZXJ0VGFnKGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgX3RhZyRwYXJlbnROb2RlO1xuXG4gICAgICByZXR1cm4gKF90YWckcGFyZW50Tm9kZSA9IHRhZy5wYXJlbnROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX3RhZyRwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCAiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCAiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwgImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsICJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgeyBtZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIFJVTEVTRVQsIGNvbWJpbmUsIG1hdGNoLCBzZXJpYWxpemUsIGNvcHksIHJlcGxhY2UsIFdFQktJVCwgTU9aLCBNUywgS0VZRlJBTUVTLCBERUNMQVJBVElPTiwgaGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHN0cmluZ2lmeSwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlLFxuICAgICAgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi9cblxuZnVuY3Rpb24gcHJlZml4KHZhbHVlLCBsZW5ndGgpIHtcbiAgc3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgLy8gY29sb3ItYWRqdXN0XG4gICAgY2FzZSA1MTAzOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblxuICAgIGNhc2UgNTczNzpcbiAgICBjYXNlIDQyMDE6XG4gICAgY2FzZSAzMTc3OlxuICAgIGNhc2UgMzQzMzpcbiAgICBjYXNlIDE2NDE6XG4gICAgY2FzZSA0NDU3OlxuICAgIGNhc2UgMjkyMTogLy8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXG4gICAgY2FzZSA1NTcyOlxuICAgIGNhc2UgNjM1NjpcbiAgICBjYXNlIDU4NDQ6XG4gICAgY2FzZSAzMTkxOlxuICAgIGNhc2UgNjY0NTpcbiAgICBjYXNlIDMwMDU6IC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXG4gICAgY2FzZSA2MzkxOlxuICAgIGNhc2UgNTg3OTpcbiAgICBjYXNlIDU2MjM6XG4gICAgY2FzZSA2MTM1OlxuICAgIGNhc2UgNDU5OTpcbiAgICBjYXNlIDQ4NTU6IC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cbiAgICBjYXNlIDQyMTU6XG4gICAgY2FzZSA2Mzg5OlxuICAgIGNhc2UgNTEwOTpcbiAgICBjYXNlIDUzNjU6XG4gICAgY2FzZSA1NjIxOlxuICAgIGNhc2UgMzgyOTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3RcblxuICAgIGNhc2UgNTM0OTpcbiAgICBjYXNlIDQyNDY6XG4gICAgY2FzZSA0ODEwOlxuICAgIGNhc2UgNjk2ODpcbiAgICBjYXNlIDI3NTY6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LCBmbGV4LWRpcmVjdGlvblxuXG4gICAgY2FzZSA2ODI4OlxuICAgIGNhc2UgNDI2ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBvcmRlclxuXG4gICAgY2FzZSA2MTY1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1pdGVtc1xuXG4gICAgY2FzZSA1MTg3OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLXNlbGZcblxuICAgIGNhc2UgNTQ0MzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tY29udGVudFxuXG4gICAgY2FzZSA0Njc1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LXNocmlua1xuXG4gICAgY2FzZSA1NTQ4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWJhc2lzXG5cbiAgICBjYXNlIDUyOTI6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1ncm93XG5cbiAgICBjYXNlIDYwNjA6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyB0cmFuc2l0aW9uXG5cbiAgICBjYXNlIDQ1NTQ6XG4gICAgICByZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlO1xuICAgIC8vIGN1cnNvclxuXG4gICAgY2FzZSA2MTg3OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWU7XG4gICAgLy8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXG4gICAgY2FzZSA1NDk1OlxuICAgIGNhc2UgMzk1OTpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJyk7XG4gICAgLy8ganVzdGlmeS1jb250ZW50XG5cbiAgICBjYXNlIDQ5Njg6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblxuICAgIGNhc2UgNDA5NTpcbiAgICBjYXNlIDM1ODM6XG4gICAgY2FzZSA0MDY4OlxuICAgIGNhc2UgMjUzMjpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlO1xuICAgIC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cbiAgICBjYXNlIDgxMTY6XG4gICAgY2FzZSA3MDU5OlxuICAgIGNhc2UgNTc1MzpcbiAgICBjYXNlIDU1MzU6XG4gICAgY2FzZSA1NDQ1OlxuICAgIGNhc2UgNTcwMTpcbiAgICBjYXNlIDQ5MzM6XG4gICAgY2FzZSA0Njc3OlxuICAgIGNhc2UgNTUzMzpcbiAgICBjYXNlIDU3ODk6XG4gICAgY2FzZSA1MDIxOlxuICAgIGNhc2UgNDc2NTpcbiAgICAgIC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcbiAgICAgIGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuICAgICAgICAvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgIC8vIC1cbiAgICAgICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpIGJyZWFrO1xuICAgICAgICAvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlO1xuICAgICAgICAvLyAocyl0cmV0Y2hcblxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICByZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICAvLyBwb3NpdGlvbjogc3RpY2t5XG5cbiAgICBjYXNlIDQ5NDk6XG4gICAgICAvLyAocyl0aWNreT9cbiAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpICE9PSAxMTUpIGJyZWFrO1xuICAgIC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4KVxuXG4gICAgY2FzZSA2NDQ0OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIHN0cmxlbih2YWx1ZSkgLSAzIC0gKH5pbmRleG9mKHZhbHVlLCAnIWltcG9ydGFudCcpICYmIDEwKSkpIHtcbiAgICAgICAgLy8gc3RpYyhrKXlcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlO1xuICAgICAgICAvLyAoaW5saW5lLSk/ZmwoZSl4XG5cbiAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjshXSspKDt8IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICAvLyB3cml0aW5nLW1vZGVcblxuICAgIGNhc2UgNTkzNjpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcbiAgICAgICAgLy8gdmVydGljYWwtbChyKVxuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gdmVydGljYWwtcihsKVxuXG4gICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlO1xuICAgICAgICAvLyBob3Jpem9udGFsKC0pdGJcblxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBwcmVmaXhlciA9IGZ1bmN0aW9uIHByZWZpeGVyKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcbiAgaWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpIGlmICghZWxlbWVudFtcInJldHVyblwiXSkgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIERFQ0xBUkFUSU9OOlxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgS0VZRlJBTUVTOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgIHZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKVxuICAgICAgfSldLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlIFJVTEVTRVQ6XG4gICAgICBpZiAoZWxlbWVudC5sZW5ndGgpIHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuICAgICAgICAgIC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuICAgICAgICAgIGNhc2UgJzpyZWFkLW9ubHknOlxuICAgICAgICAgIGNhc2UgJzpyZWFkLXdyaXRlJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICAgIC8vIDpwbGFjZWhvbGRlclxuXG4gICAgICAgICAgY2FzZSAnOjpwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb25cbiAgLyo6IEVtb3Rpb25DYWNoZSAqL1xuY3JlYXRlQ2FjaGUob3B0aW9uc1xuLyo6IE9wdGlvbnMgKi9cbikge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgKi9cbiAgICApIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICAvKiA6IE5vZGUgKi9cblxuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZVxuICAgIC8qOiBIVE1MU3R5bGVFbGVtZW50ICovXG4gICAgKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5zZXJ0ZWRbYXR0cmliW2ldXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzVG9IeWRyYXRlLnB1c2gobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgX2luc2VydDtcbiAgLyo6IChcbiAgc2VsZWN0b3I6IHN0cmluZyxcbiAgc2VyaWFsaXplZDogU2VyaWFsaXplZFN0eWxlcyxcbiAgc2hlZXQ6IFN0eWxlU2hlZXQsXG4gIHNob3VsZENhY2hlOiBib29sZWFuXG4gICkgPT4gc3RyaW5nIHwgdm9pZCAqL1xuXG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb25cbiAgICAgIC8qOiB2b2lkICovXG4gICAgaW5zZXJ0KHNlbGVjdG9yXG4gICAgLyo6IHN0cmluZyAqL1xuICAgICwgc2VyaWFsaXplZFxuICAgIC8qOiBTZXJpYWxpemVkU3R5bGVzICovXG4gICAgLCBzaGVldFxuICAgIC8qOiBTdHlsZVNoZWV0ICovXG4gICAgLCBzaG91bGRDYWNoZVxuICAgIC8qOiBib29sZWFuICovXG4gICAgKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgc3R5bGlzKHNlbGVjdG9yID8gc2VsZWN0b3IgKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCIgOiBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlXG4gIC8qOiBFbW90aW9uQ2FjaGUgKi9cbiAgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHtcbiAgICBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIHQgPSBhcmd1bWVudHNbZV07XG4gICAgICBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbmV4cG9ydCB7IF9leHRlbmRzIGFzIGRlZmF1bHQgfTsiLCAidmFyIGlzQnJvd3NlciA9IHRydWU7XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9XG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTU0ODZjNTFjLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuPSBmdW5jdGlvbiBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG5HbG9iYWxQcm9wc1xuPiAqL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wc1xuLyo6IEdsb2JhbFByb3BzICovXG4sIGNhY2hlKSB7XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIHZhciBub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsKi9cbiAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vKiBpbXBvcnQgdHlwZSB7IEludGVycG9sYXRpb24sIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cblxuZnVuY3Rpb24gY3NzKClcbi8qOiBTZXJpYWxpemVkU3R5bGVzICovXG57XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG4vKlxudHlwZSBLZXlmcmFtZXMgPSB7fFxuICBuYW1lOiBzdHJpbmcsXG4gIHN0eWxlczogc3RyaW5nLFxuICBhbmltOiAxLFxuICB0b1N0cmluZzogKCkgPT4gc3RyaW5nXG58fSAmIHN0cmluZ1xuKi9cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBLZXlmcmFtZXMgKi9cbmtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxuLypcbnR5cGUgQ2xhc3NOYW1lQXJnID1cbiAgfCBzdHJpbmdcbiAgfCBib29sZWFuXG4gIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cbiAgfCBBcnJheTxDbGFzc05hbWVBcmc+XG4gIHwgbnVsbFxuICB8IHZvaWRcbiovXG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb25cbiAgLyo6IHN0cmluZyAqL1xuY2xhc3NuYW1lcyhhcmdzXG4vKjogQXJyYXk8Q2xhc3NOYW1lQXJnPiAqL1xuKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkXG4vKjogT2JqZWN0ICovXG4sIGNzc1xuLyo6ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBzdHJpbmcgKi9cbiwgY2xhc3NOYW1lXG4vKjogc3RyaW5nICovXG4pIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLypcbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAoe1xuICAgIGNzczogKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nLFxuICAgIGN4OiAoLi4uYXJnczogQXJyYXk8Q2xhc3NOYW1lQXJnPikgPT4gc3RyaW5nLFxuICAgIHRoZW1lOiBPYmplY3RcbiAgfSkgPT4gUmVhY3QuTm9kZVxufSAqL1xuXG5cbnZhciBDbGFzc05hbWVzXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+Ki9cbj0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLyoqXG4gKiBSZWFjdC5jbG9uZUVsZW1lbnQgZG9lcyBub3Qgd29yayBpZiB0aGUgY2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHRoZVxuICogYGNzc2AgcHJvcCAtIGFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIHVzZSBganN4KClgIHRvIG1hbnVhbGx5IGNsb25lIHRoZSBlbGVtZW50XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMTQwNFxuICpcbiAqIE5PVEU6IFdlJ3JlIHN0aWxsIHVzaW5nL3Rlc3RpbmcgdGhpcyB1dGlsaXR5IGludGVybmFsbHksIHNvIHRoaXMgaXMgbm90IHlldCBhIHB1YmxpYyBBUElcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lRWxlbWVudFdpdGhDc3MgPSBmdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5wcm9wcy5fX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fIHx8IGVsZW1lbnQudHlwZTsgLy8gRU1PVElPTl9UWVBFIGhhbmRsZXMgbm9uLVJlYWN0IGVsZW1lbnRzIChuYXRpdmUgSlNYL0hUTUwgbm9kZXMpXG5cbiAgdmFyIGNsb25lZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgIHJlZjogZWxlbWVudC5yZWZcbiAgfSwgZWxlbWVudC5wcm9wcyksIHByb3BzKTtcblxuICBpZiAocHJvcHMuY3NzIHx8IGVsZW1lbnQucHJvcHMuY3NzKSB7XG4gICAgY2xvbmVkUHJvcHMuY3NzID0gW2VsZW1lbnQucHJvcHMuY3NzLCBwcm9wcy5jc3NdO1xuICB9XG5cbiAgcmV0dXJuIGpzeChjbG9uZWRFbGVtZW50LCBjbG9uZWRQcm9wcyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLypcbiAqIE1peGluIHRoYXQgaGlkZXMgZWxlbWVudHMgb2Zmc2NyZWVuIHRvIG9ubHkgYmUgcmVhZCBieSBzY3JlZW4gcmVhZGVyXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTEzMCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTE1MiBmb3IgbW9yZSBpbmZvXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seSgpIHtcbiAgcmV0dXJuIFwiXFxuICAvLyBUYWtlIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgbGF5b3V0XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvLyBLZWVwIGl0IHZlcnRpY2FsbHkgaW5saW5lXFxuICB0b3A6IGF1dG87XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgYSBsZWZ0IHZhbHVlLCBhbmQgU2VsZW5pdW0gKHVzZWQgYnkgS2liYW5hJ3MgRlRSKSByZXF1aXJlcyBhbiBvZmYtc2NyZWVuIHBvc2l0aW9uIGZvciBpdHMgLmdldFZpc2libGVUZXh0KCkgdG8gbm90IHJlZ2lzdGVyIFNSLW9ubHkgdGV4dFxcbiAgbGVmdDogLTEwMDAwcHg7XFxuICAvLyBUaGUgZWxlbWVudCBtdXN0IGhhdmUgYSBzaXplIChmb3Igc29tZSBzY3JlZW4gcmVhZGVycylcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIC8vIEJ1dCByZWR1Y2UgdGhlIHZpc2libGUgc2l6ZSB0byBub3RoaW5nXFxuICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgY2xpcC1wYXRoOiBpbnNldCg1MCUpO1xcbiAgLy8gQW5kIGVuc3VyZSBubyBvdmVyZmxvd3Mgb2NjdXJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgdGhlIG5lZ2F0aXZlIG1hcmdpbiB0byBub3QgY2F1c2Ugb3ZlcmZsb3dzIG9mIHBhcmVudCBjb250YWluZXJzXFxuICBtYXJnaW46IC0xcHg7XFxuXCI7XG59O1xuLypcbiAqIFN0eWxlc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlTY3JlZW5SZWFkZXJPbmx5OiBzaG93T25Gb2N1cyA/IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6Zm9jdXMpOm5vdCg6YWN0aXZlKXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpIDogLyojX19QVVJFX18qL2NzcyhldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpXG4gIH07XG59OyIsICJjb25zdCBjYW5kaWRhdGVTZWxlY3RvcnMgPSBbXG4gICdpbnB1dCcsXG4gICdzZWxlY3QnLFxuICAndGV4dGFyZWEnLFxuICAnYVtocmVmXScsXG4gICdidXR0b24nLFxuICAnW3RhYmluZGV4XTpub3Qoc2xvdCknLFxuICAnYXVkaW9bY29udHJvbHNdJyxcbiAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKScsXG4gICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScsXG4gICdkZXRhaWxzJyxcbl07XG5jb25zdCBjYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnMuam9pbignLCcpO1xuXG5jb25zdCBOb0VsZW1lbnQgPSB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IG1hdGNoZXMgPSBOb0VsZW1lbnRcbiAgPyBmdW5jdGlvbiAoKSB7fVxuICA6IEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcblxuY29uc3QgZ2V0Um9vdE5vZGUgPVxuICAhTm9FbGVtZW50ICYmIEVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlXG4gICAgPyAoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgOiAoZWxlbWVudCkgPT4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgY29udGFpbmVyIHRvIGNoZWNrIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciB0byBjaGVja1xuICogQHBhcmFtIHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzID0gZnVuY3Rpb24gKGVsLCBpbmNsdWRlQ29udGFpbmVyLCBmaWx0ZXIpIHtcbiAgbGV0IGNhbmRpZGF0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoXG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVTZWxlY3RvcilcbiAgKTtcbiAgaWYgKGluY2x1ZGVDb250YWluZXIgJiYgbWF0Y2hlcy5jYWxsKGVsLCBjYW5kaWRhdGVTZWxlY3RvcikpIHtcbiAgICBjYW5kaWRhdGVzLnVuc2hpZnQoZWwpO1xuICB9XG4gIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcihmaWx0ZXIpO1xuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIEdldFNoYWRvd1Jvb3RcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0byBjaGVjayBmb3Igc2hhZG93IHJvb3RcbiAqIEByZXR1cm5zIHtTaGFkb3dSb290fGJvb2xlYW59IFNoYWRvd1Jvb3QgaWYgYXZhaWxhYmxlIG9yIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhIHNoYWRvd1Jvb3QgaXMgYXR0YWNoZWQgYnV0IG5vdCBhdmFpbGFibGUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2hhZG93Um9vdEZpbHRlclxuICogQHBhcmFtIHtFbGVtZW50fSBzaGFkb3dIb3N0Tm9kZSB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBzaGFkb3cgY29udGVudFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYSBzaGFkb3cgcm9vdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW5kaWRhdGVzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gc2NvcGUgY29udGFpbnMgaW5uZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtFbGVtZW50W119IGNhbmRpZGF0ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEl0ZXJhdGl2ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7R2V0U2hhZG93Um9vdHxib29sZWFufSBnZXRTaGFkb3dSb290IHRydWUgaWYgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZDsgZmFsc3kgaWYgbm90O1xuICogIGlmIGEgZnVuY3Rpb24sIGltcGxpZXMgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZCBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHNoYWRvdyByb290IG9mIGFuIGVsZW1lbnRcbiAqICBvciBhIGJvb2xlYW4gc3RhdGluZyBpZiBpdCBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHJvb3RcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IEVsZW1lbnQpID0+IGJvb2xlYW59IGZpbHRlciBmaWx0ZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmbGF0dGVuIGlmIHRydWUgdGhlbiByZXN1bHQgd2lsbCBmbGF0dGVuIGFueSBDYW5kaWRhdGVzU2NvcGUgaW50byB0aGUgcmV0dXJuZWQgbGlzdFxuICogQHByb3BlcnR5IHtTaGFkb3dSb290RmlsdGVyfSBzaGFkb3dSb290RmlsdGVyIGZpbHRlciBzaGFkb3cgcm9vdHM7XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHMgbGlzdCBvZiBlbGVtZW50IGNvbnRhaW5lcnMgdG8gbWF0Y2ggY2FuZGlkYXRlcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciBsaXN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge0l0ZXJhdGl2ZU9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtBcnJheS48RWxlbWVudHxDYW5kaWRhdGVzU2NvcGU+fVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkgPSBmdW5jdGlvbiAoXG4gIGVsZW1lbnRzLFxuICBpbmNsdWRlQ29udGFpbmVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICBjb25zdCBlbGVtZW50c1RvQ2hlY2sgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgd2hpbGUgKGVsZW1lbnRzVG9DaGVjay5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NMT1QnKSB7XG4gICAgICAvLyBhZGQgc2hhZG93IGRvbSBzbG90IHNjb3BlIChzbG90IGl0c2VsZiBjYW5ub3QgYmUgZm9jdXNhYmxlKVxuICAgICAgY29uc3QgYXNzaWduZWQgPSBlbGVtZW50LmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhc3NpZ25lZC5sZW5ndGggPyBhc3NpZ25lZCA6IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KGNvbnRlbnQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMuZmxhdHRlbikge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaGVjayBjYW5kaWRhdGUgZWxlbWVudFxuICAgICAgY29uc3QgdmFsaWRDYW5kaWRhdGUgPSBtYXRjaGVzLmNhbGwoZWxlbWVudCwgY2FuZGlkYXRlU2VsZWN0b3IpO1xuICAgICAgaWYgKFxuICAgICAgICB2YWxpZENhbmRpZGF0ZSAmJlxuICAgICAgICBvcHRpb25zLmZpbHRlcihlbGVtZW50KSAmJlxuICAgICAgICAoaW5jbHVkZUNvbnRhaW5lciB8fCAhZWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpXG4gICAgICApIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgc2hhZG93IGNvbnRlbnQgaWYgcG9zc2libGVcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPVxuICAgICAgICBlbGVtZW50LnNoYWRvd1Jvb3QgfHxcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICAodHlwZW9mIG9wdGlvbnMuZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIG9wdGlvbnMuZ2V0U2hhZG93Um9vdChlbGVtZW50KSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkU2hhZG93Um9vdCA9XG4gICAgICAgICFvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIgfHwgb3B0aW9ucy5zaGFkb3dSb290RmlsdGVyKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2hhZG93Um9vdCAmJiB2YWxpZFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gYWRkIHNoYWRvdyBkb20gc2NvcGUgSUlGIGEgc2hhZG93IHJvb3Qgbm9kZSB3YXMgZ2l2ZW47IG90aGVyd2lzZSwgYW4gdW5kaXNjbG9zZWRcbiAgICAgICAgLy8gIHNoYWRvdyBleGlzdHMsIHNvIGxvb2sgYXQgbGlnaHQgZG9tIGNoaWxkcmVuIGFzIGZhbGxiYWNrIEJVVCBjcmVhdGUgYSBzY29wZSBmb3IgYW55XG4gICAgICAgIC8vICBjaGlsZCBjYW5kaWRhdGVzIGZvdW5kIGJlY2F1c2UgdGhleSdyZSBsaWtlbHkgc2xvdHRlZCBlbGVtZW50cyAoZWxlbWVudHMgdGhhdCBhcmVcbiAgICAgICAgLy8gIGNoaWxkcmVuIG9mIHRoZSB3ZWIgY29tcG9uZW50IGVsZW1lbnQgKHdoaWNoIGhhcyB0aGUgc2hhZG93KSwgaW4gdGhlIGxpZ2h0IGRvbSwgYnV0XG4gICAgICAgIC8vICBzbG90dGVkIHNvbWV3aGVyZSBfaW5zaWRlXyB0aGUgdW5kaXNjbG9zZWQgc2hhZG93KSAtLSB0aGUgc2NvcGUgaXMgY3JlYXRlZCBiZWxvdyxcbiAgICAgICAgLy8gIF9hZnRlcl8gd2UgcmV0dXJuIGZyb20gdGhpcyByZWN1cnNpdmUgY2FsbFxuICAgICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFxuICAgICAgICAgIHNoYWRvd1Jvb3QgPT09IHRydWUgPyBlbGVtZW50LmNoaWxkcmVuIDogc2hhZG93Um9vdC5jaGlsZHJlbixcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKC4uLm5lc3RlZENhbmRpZGF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBzY29wZTogZWxlbWVudCxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm90IHNoYWRvdyBzbyBqdXN0IGRpZyBpbnRvIHRoZSBlbGVtZW50J3MgKGxpZ2h0IGRvbSkgY2hpbGRyZW5cbiAgICAgICAgLy8gIF9fd2l0aG91dF9fIGdpdmluZyB0aGUgZWxlbWVudCBzcGVjaWFsIHNjb3BlIHRyZWF0bWVudFxuICAgICAgICBlbGVtZW50c1RvQ2hlY2sudW5zaGlmdCguLi5lbGVtZW50LmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUYWJpbmRleCA9IGZ1bmN0aW9uIChub2RlLCBpc1Njb3BlKSB7XG4gIGlmIChub2RlLnRhYkluZGV4IDwgMCkge1xuICAgIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgICAvLyBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAgIC8vIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gICAgLy8gb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICAgIC8vIEFsc28gYnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAgIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAgIC8vXG4gICAgLy8gaXNTY29wZSBpcyBwb3NpdGl2ZSBmb3IgY3VzdG9tIGVsZW1lbnQgd2l0aCBzaGFkb3cgcm9vdCBvciBzbG90IHRoYXQgYnkgZGVmYXVsdFxuICAgIC8vIGhhdmUgdGFiSW5kZXggLTEsIGJ1dCBuZWVkIHRvIGJlIHNvcnRlZCBieSBkb2N1bWVudCBvcmRlciBpbiBvcmRlciBmb3IgdGhlaXJcbiAgICAvLyBjb250ZW50IHRvIGJlIGluc2VydGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKFxuICAgICAgKGlzU2NvcGUgfHxcbiAgICAgICAgL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KG5vZGUudGFnTmFtZSkgfHxcbiAgICAgICAgbm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkgJiZcbiAgICAgIGlzTmFOKHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5cbmNvbnN0IHNvcnRPcmRlcmVkVGFiYmFibGVzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIGEudGFiSW5kZXggPT09IGIudGFiSW5kZXhcbiAgICA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlclxuICAgIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXg7XG59O1xuXG5jb25zdCBpc0lucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJztcbn07XG5cbmNvbnN0IGlzSGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nO1xufTtcblxuY29uc3QgaXNEZXRhaWxzV2l0aFN1bW1hcnkgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCByID1cbiAgICBub2RlLnRhZ05hbWUgPT09ICdERVRBSUxTJyAmJlxuICAgIEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgLmFwcGx5KG5vZGUuY2hpbGRyZW4pXG4gICAgICAuc29tZSgoY2hpbGQpID0+IGNoaWxkLnRhZ05hbWUgPT09ICdTVU1NQVJZJyk7XG4gIHJldHVybiByO1xufTtcblxuY29uc3QgZ2V0Q2hlY2tlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGVzLCBmb3JtKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobm9kZXNbaV0uY2hlY2tlZCAmJiBub2Rlc1tpXS5mb3JtID09PSBmb3JtKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc1RhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoIW5vZGUubmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHJhZGlvU2NvcGUgPSBub2RlLmZvcm0gfHwgZ2V0Um9vdE5vZGUobm9kZSk7XG4gIGNvbnN0IHF1ZXJ5UmFkaW9zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gcmFkaW9TY29wZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIG5hbWUgKyAnXCJdJ1xuICAgICk7XG4gIH07XG5cbiAgbGV0IHJhZGlvU2V0O1xuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyh3aW5kb3cuQ1NTLmVzY2FwZShub2RlLm5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyhub2RlLm5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzJyxcbiAgICAgICAgZXJyLm1lc3NhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tlZCA9IGdldENoZWNrZWRSYWRpbyhyYWRpb1NldCwgbm9kZS5mb3JtKTtcbiAgcmV0dXJuICFjaGVja2VkIHx8IGNoZWNrZWQgPT09IG5vZGU7XG59O1xuXG5jb25zdCBpc1JhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzSW5wdXQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcblxuY29uc3QgaXNOb25UYWJiYWJsZVJhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzUmFkaW8obm9kZSkgJiYgIWlzVGFiYmFibGVSYWRpbyhub2RlKTtcbn07XG5cbmNvbnN0IGlzWmVyb0FyZWEgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDA7XG59O1xuY29uc3QgaXNIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSwgeyBkaXNwbGF5Q2hlY2ssIGdldFNoYWRvd1Jvb3QgfSkge1xuICAvLyBOT1RFOiB2aXNpYmlsaXR5IHdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgbm9kZSBpcyBkZXRhY2hlZCBmcm9tIHRoZSBkb2N1bWVudFxuICAvLyAgKHNlZSBub3RlcyBhYm91dCB0aGlzIGZ1cnRoZXIgZG93biksIHdoaWNoIG1lYW5zIHdlIHdpbGwgY29uc2lkZXIgaXQgdmlzaWJsZVxuICAvLyAgKHRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIGZyb20gYSB2ZXJ5IGxvbmcgd2F5IGJhY2spXG4gIC8vIE5PVEU6IHdlIGNoZWNrIHRoaXMgcmVnYXJkbGVzcyBvZiBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBiZWNhdXNlIHRoaXMgaXMgYVxuICAvLyAgX3Zpc2liaWxpdHlfIGNoZWNrLCBub3QgYSBfZGlzcGxheV8gY2hlY2tcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUobm9kZSkudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlyZWN0U3VtbWFyeSA9IG1hdGNoZXMuY2FsbChub2RlLCAnZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGUnKTtcbiAgY29uc3Qgbm9kZVVuZGVyRGV0YWlscyA9IGlzRGlyZWN0U3VtbWFyeSA/IG5vZGUucGFyZW50RWxlbWVudCA6IG5vZGU7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZVVuZGVyRGV0YWlscywgJ2RldGFpbHM6bm90KFtvcGVuXSkgKicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUaGUgcm9vdCBub2RlIGlzIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGUgbm9kZSBpcyBpbiBhIHNoYWRvdyBET007IHNvbWUgZG9jdW1lbnQgb3RoZXJ3aXNlXG4gIC8vICAoYnV0IE5PVCBfdGhlXyBkb2N1bWVudDsgc2VlIHNlY29uZCAnSWYnIGNvbW1lbnQgYmVsb3cgZm9yIG1vcmUpLlxuICAvLyBJZiByb290Tm9kZSBpcyBzaGFkb3cgcm9vdCwgaXQnbGwgaGF2ZSBhIGhvc3QsIHdoaWNoIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dcbiAgLy8gIGlzIGF0dGFjaGVkLCBhbmQgdGhlIG9uZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50IG9yIG5vdCAoYmVjYXVzZSB0aGVcbiAgLy8gIHNoYWRvdywgYW5kIGFsbCBub2RlcyBpdCBjb250YWlucywgaXMgbmV2ZXIgY29uc2lkZXJlZCBpbiB0aGUgZG9jdW1lbnQgc2luY2Ugc2hhZG93c1xuICAvLyAgYmVoYXZlIGxpa2Ugc2VsZi1jb250YWluZWQgRE9NczsgYnV0IGlmIHRoZSBzaGFkb3cncyBIT1NULCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudCxcbiAgLy8gIGlzIGhpZGRlbiwgb3IgaXMgbm90IGluIHRoZSBkb2N1bWVudCBpdHNlbGYgYnV0IGlzIGRldGFjaGVkLCBpdCB3aWxsIGFmZmVjdCB0aGUgc2hhZG93J3NcbiAgLy8gIHZpc2liaWxpdHksIGluY2x1ZGluZyBhbGwgdGhlIG5vZGVzIGl0IGNvbnRhaW5zKS4gVGhlIGhvc3QgY291bGQgYmUgYW55IG5vcm1hbCBub2RlLFxuICAvLyAgb3IgYSBjdXN0b20gZWxlbWVudCAoaS5lLiB3ZWIgY29tcG9uZW50KS4gRWl0aGVyIHdheSwgdGhhdCdzIHRoZSBvbmUgdGhhdCBpcyBjb25zaWRlcmVkXG4gIC8vICBwYXJ0IG9mIHRoZSBkb2N1bWVudCwgbm90IHRoZSBzaGFkb3cgcm9vdCwgbm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gKGkuZS4gdGhlIG5vZGUgYmVpbmdcbiAgLy8gIHRlc3RlZCkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIG5vdCBhIHNoYWRvdyByb290LCBpdCB3b24ndCBoYXZlIGEgaG9zdCwgYW5kIHNvIHJvb3ROb2RlIHNob3VsZCBiZSB0aGVcbiAgLy8gIGRvY3VtZW50IChwZXIgdGhlIGRvY3MpIGFuZCB3aGlsZSBpdCdzIGEgRG9jdW1lbnQtdHlwZSBvYmplY3QsIHRoYXQgZG9jdW1lbnQgZG9lcyBub3RcbiAgLy8gIGFwcGVhciB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbm9kZSdzIGBvd25lckRvY3VtZW50YCBmb3Igc29tZSByZWFzb24sIHNvIGl0J3Mgc2FmZXJcbiAgLy8gIHRvIGlnbm9yZSB0aGUgcm9vdE5vZGUgYXQgdGhpcyBwb2ludCwgYW5kIHVzZSBgbm9kZS5vd25lckRvY3VtZW50YC4gT3RoZXJ3aXNlLFxuICAvLyAgdXNpbmcgYHJvb3ROb2RlLmNvbnRhaW5zKG5vZGUpYCB3aWxsIF9hbHdheXNfIGJlIHRydWUgd2UnbGwgZ2V0IGZhbHNlLXBvc2l0aXZlcyB3aGVuXG4gIC8vICBub2RlIGlzIGFjdHVhbGx5IGRldGFjaGVkLlxuICBjb25zdCBub2RlUm9vdEhvc3QgPSBnZXRSb290Tm9kZShub2RlKS5ob3N0O1xuICBjb25zdCBub2RlSXNBdHRhY2hlZCA9XG4gICAgbm9kZVJvb3RIb3N0Py5vd25lckRvY3VtZW50LmNvbnRhaW5zKG5vZGVSb290SG9zdCkgfHxcbiAgICBub2RlLm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZSk7XG5cbiAgaWYgKCFkaXNwbGF5Q2hlY2sgfHwgZGlzcGxheUNoZWNrID09PSAnZnVsbCcpIHtcbiAgICBpZiAodHlwZW9mIGdldFNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBub2RlIHRvIGJlIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyBhbmQgdXNlIHRoZVxuICAgICAgLy8gICdub24temVyby1hcmVhJyBmYWxsYmFja1xuICAgICAgY29uc3Qgb3JpZ2luYWxOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZ2V0Um9vdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRFbGVtZW50ICYmXG4gICAgICAgICAgIXBhcmVudEVsZW1lbnQuc2hhZG93Um9vdCAmJlxuICAgICAgICAgIGdldFNoYWRvd1Jvb3QocGFyZW50RWxlbWVudCkgPT09IHRydWUgLy8gY2hlY2sgaWYgdGhlcmUncyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbm9kZSBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHdoaWNoIG1lYW5zIHdlIGNhbiBvbmx5IHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94LCBzbyB3ZVxuICAgICAgICAgIC8vICBmYWxsIGJhY2sgdG8gYSBub24temVyby1hcmVhIHRlc3RcbiAgICAgICAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmFzc2lnbmVkU2xvdCkge1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdXAgc2xvdFxuICAgICAgICAgIG5vZGUgPSBub2RlLmFzc2lnbmVkU2xvdDtcbiAgICAgICAgfSBlbHNlIGlmICghcGFyZW50RWxlbWVudCAmJiByb290Tm9kZSAhPT0gbm9kZS5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgLy8gY3Jvc3Mgc2hhZG93IGJvdW5kYXJ5XG4gICAgICAgICAgbm9kZSA9IHJvb3ROb2RlLmhvc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBub3JtYWwgZG9tXG4gICAgICAgICAgbm9kZSA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG9yaWdpbmFsTm9kZTtcbiAgICB9XG4gICAgLy8gZWxzZSwgYGdldFNoYWRvd1Jvb3RgIG1pZ2h0IGJlIHRydWUsIGJ1dCBhbGwgdGhhdCBkb2VzIGlzIGVuYWJsZSBzaGFkb3cgRE9NIHN1cHBvcnRcbiAgICAvLyAgKGkuZS4gaXQgZG9lcyBub3QgYWxzbyBwcmVzdW1lIHRoYXQgYWxsIG5vZGVzIG1pZ2h0IGhhdmUgdW5kaXNjbG9zZWQgc2hhZG93cyk7IG9yXG4gICAgLy8gIGl0IG1pZ2h0IGJlIGEgZmFsc3kgdmFsdWUsIHdoaWNoIG1lYW5zIHNoYWRvdyBET00gc3VwcG9ydCBpcyBkaXNhYmxlZFxuXG4gICAgLy8gU2luY2Ugd2UgZGlkbid0IGZpbmQgaXQgc2l0dGluZyBpbiBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgKG9yIHNoYWRvd3MgYXJlIGRpc2FibGVkKVxuICAgIC8vICBub3cgd2UgY2FuIGp1c3QgdGVzdCB0byBzZWUgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgdmlzaWJsZSBvciBub3QsIHByb3ZpZGVkIGl0J3NcbiAgICAvLyAgYXR0YWNoZWQgdG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAgLy8gTk9URTogV2UgbXVzdCBjb25zaWRlciBjYXNlIHdoZXJlIG5vZGUgaXMgaW5zaWRlIGEgc2hhZG93IERPTSBhbmQgZ2l2ZW4gZGlyZWN0bHkgdG9cbiAgICAvLyAgYGlzVGFiYmFibGUoKWAgb3IgYGlzRm9jdXNhYmxlKClgIC0tIHJlZ2FyZGxlc3Mgb2YgYGdldFNoYWRvd1Jvb3RgIG9wdGlvbiBzZXR0aW5nLlxuXG4gICAgaWYgKG5vZGVJc0F0dGFjaGVkKSB7XG4gICAgICAvLyB0aGlzIHdvcmtzIHdoZXJldmVyIHRoZSBub2RlIGlzOiBpZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjbGllbnQgcmVjdCwgaXQnc1xuICAgICAgLy8gIHNvbWVob3cgZGlzcGxheWVkOyBpdCBhbHNvIGNvdmVycyB0aGUgQ1NTICdkaXNwbGF5OiBjb250ZW50cycgY2FzZSB3aGVyZSB0aGVcbiAgICAgIC8vICBub2RlIGl0c2VsZiBpcyBoaWRkZW4gaW4gcGxhY2Ugb2YgaXRzIGNvbnRlbnRzOyBhbmQgdGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaFxuICAgICAgLy8gIHVwIHRoZSBoaWVyYXJjaHkgZWl0aGVyXG4gICAgICByZXR1cm4gIW5vZGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdGhlIG5vZGUgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50LCB3aGljaCBtZWFucyB0aGUgYGdldENsaWVudFJlY3RzKClgXG4gICAgLy8gIEFQSSB3aWxsIF9fYWx3YXlzX18gcmV0dXJuIHplcm8gcmVjdHMgKHRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIFJlYWN0XG4gICAgLy8gIGlzIHVzZWQgdG8gcmVuZGVyIG5vZGVzIG9udG8gYSBkZXRhY2hlZCB0cmVlLCBhcyBjb25maXJtZWQgaW4gdGhpcyB0aHJlYWQ6XG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTExNyNpc3N1ZWNvbW1lbnQtMjg0MjI4ODcwKVxuICAgIC8vXG4gICAgLy8gSXQgYWxzbyBtZWFucyB0aGF0IGV2ZW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZGlzcGxheSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYFxuICAgIC8vICBiZWNhdXNlIHN0eWxlcyBhcmUgb25seSBjb21wdXRlZCBmb3Igbm9kZXMgdGhhdCBhcmUgaW4gdGhlIGRvY3VtZW50LlxuICAgIC8vXG4gICAgLy8gTk9URTogVEhJUyBIQVMgQkVFTiBUSEUgQ0FTRSBGT1IgWUVBUlMuIEl0IGlzIG5vdCBuZXcsIG5vciBpcyBpdCBjYXVzZWQgYnkgdGFiYmFibGVcbiAgICAvLyAgc29tZWhvdy4gVGhvdWdoIGl0IHdhcyBuZXZlciBzdGF0ZWQgb2ZmaWNpYWxseSwgYW55b25lIHdobyBoYXMgZXZlciB1c2VkIHRhYmJhYmxlXG4gICAgLy8gIEFQSXMgb24gbm9kZXMgaW4gZGV0YWNoZWQgY29udGFpbmVycyBoYXMgYWN0dWFsbHkgaW1wbGljaXRseSB1c2VkIHRhYmJhYmxlIGluIHdoYXRcbiAgICAvLyAgd2FzIGxhdGVyIChhcyBvZiB2NS4yLjAgb24gQXByIDksIDIwMjEpIGNhbGxlZCBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBtb2RlIC0tIGVzc2VudGlhbGx5XG4gICAgLy8gIGNvbnNpZGVyaW5nIF9fZXZlcnl0aGluZ19fIHRvIGJlIHZpc2libGUgYmVjYXVzZSBvZiB0aGUgaW5uYWJpbGl0eSB0byBkZXRlcm1pbmUgc3R5bGVzLlxuICB9IGVsc2UgaWYgKGRpc3BsYXlDaGVjayA9PT0gJ25vbi16ZXJvLWFyZWEnKSB7XG4gICAgLy8gTk9URTogRXZlbiB0aG91Z2ggdGhpcyB0ZXN0cyB0aGF0IHRoZSBub2RlJ3MgY2xpZW50IHJlY3QgaXMgbm9uLXplcm8gdG8gZGV0ZXJtaW5lXG4gICAgLy8gIHdoZXRoZXIgaXQncyBkaXNwbGF5ZWQsIGFuZCB0aGF0IGEgZGV0YWNoZWQgbm9kZSB3aWxsIF9fYWx3YXlzX18gaGF2ZSBhIHplcm8tYXJlYVxuICAgIC8vICBjbGllbnQgcmVjdCwgd2UgZG9uJ3Qgc3BlY2lhbC1jYXNlIGZvciB3aGV0aGVyIHRoZSBub2RlIGlzIGF0dGFjaGVkIG9yIG5vdC4gSW5cbiAgICAvLyAgdGhpcyBtb2RlLCB3ZSBkbyB3YW50IHRvIGNvbnNpZGVyIG5vZGVzIHRoYXQgaGF2ZSBhIHplcm8gYXJlYSB0byBiZSBoaWRkZW4gYXQgYWxsXG4gICAgLy8gIHRpbWVzLCBhbmQgdGhhdCBpbmNsdWRlcyBhdHRhY2hlZCBvciBub3QuXG4gICAgcmV0dXJuIGlzWmVyb0FyZWEobm9kZSk7XG4gIH1cblxuICAvLyB2aXNpYmxlLCBhcyBmYXIgYXMgd2UgY2FuIHRlbGwsIG9yIHBlciBjdXJyZW50IGBkaXNwbGF5Q2hlY2tgIG1vZGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gZm9ybSBmaWVsZHMgKG5lc3RlZCkgaW5zaWRlIGEgZGlzYWJsZWQgZmllbGRzZXQgYXJlIG5vdCBmb2N1c2FibGUvdGFiYmFibGVcbi8vICB1bmxlc3MgdGhleSBhcmUgaW4gdGhlIF9maXJzdF8gPGxlZ2VuZD4gZWxlbWVudCBvZiB0aGUgdG9wLW1vc3QgZGlzYWJsZWRcbi8vICBmaWVsZHNldFxuY29uc3QgaXNEaXNhYmxlZEZyb21GaWVsZHNldCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICgvXihJTlBVVHxCVVRUT058U0VMRUNUfFRFWFRBUkVBKSQvLnRlc3Qobm9kZS50YWdOYW1lKSkge1xuICAgIGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIC8vIGNoZWNrIGlmIGBub2RlYCBpcyBjb250YWluZWQgaW4gYSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlLnRhZ05hbWUgPT09ICdGSUVMRFNFVCcgJiYgcGFyZW50Tm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAvLyBsb29rIGZvciB0aGUgZmlyc3QgPGxlZ2VuZD4gYW1vbmcgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IDxsZWdlbmQ+IChpbiBkb2N1bWVudCBvcmRlcikgaXMgZm91bmRcbiAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gJ0xFR0VORCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0cyBwYXJlbnQgPGZpZWxkc2V0PiBpcyBub3QgbmVzdGVkIGluIGFub3RoZXIgZGlzYWJsZWQgPGZpZWxkc2V0PixcbiAgICAgICAgICAgIC8vIHJldHVybiB3aGV0aGVyIGBub2RlYCBpcyBhIGRlc2NlbmRhbnQgb2YgaXRzIGZpcnN0IDxsZWdlbmQ+XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5jYWxsKHBhcmVudE5vZGUsICdmaWVsZHNldFtkaXNhYmxlZF0gKicpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6ICFjaGlsZC5jb250YWlucyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhlIGRpc2FibGVkIDxmaWVsZHNldD4gY29udGFpbmluZyBgbm9kZWAgaGFzIG5vIDxsZWdlbmQ+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICAvLyBlbHNlLCBub2RlJ3MgdGFiYmFibGUvZm9jdXNhYmxlIHN0YXRlIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgYSBmaWVsZHNldCdzXG4gIC8vICBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgbm9kZS5kaXNhYmxlZCB8fFxuICAgIGlzSGlkZGVuSW5wdXQobm9kZSkgfHxcbiAgICBpc0hpZGRlbihub2RlLCBvcHRpb25zKSB8fFxuICAgIC8vIEZvciBhIGRldGFpbHMgZWxlbWVudCB3aXRoIGEgc3VtbWFyeSwgdGhlIHN1bW1hcnkgZWxlbWVudCBnZXRzIHRoZSBmb2N1c1xuICAgIGlzRGV0YWlsc1dpdGhTdW1tYXJ5KG5vZGUpIHx8XG4gICAgaXNEaXNhYmxlZEZyb21GaWVsZHNldChub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHx8XG4gICAgZ2V0VGFiaW5kZXgobm9kZSkgPCAwIHx8XG4gICAgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSA9IGZ1bmN0aW9uIChzaGFkb3dIb3N0Tm9kZSkge1xuICBjb25zdCB0YWJJbmRleCA9IHBhcnNlSW50KHNoYWRvd0hvc3ROb2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuICBpZiAoaXNOYU4odGFiSW5kZXgpIHx8IHRhYkluZGV4ID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJZiBhIGN1c3RvbSBlbGVtZW50IGhhcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSB0YWJpbmRleCxcbiAgLy8gYnJvd3NlcnMgd2lsbCBub3QgYWxsb3cgdGFiIHRhcmdldGluZyBzYWlkIGVsZW1lbnQncyBjaGlsZHJlbi5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIEVsZW1lbnRbXVxuICovXG5jb25zdCBzb3J0QnlPcmRlciA9IGZ1bmN0aW9uIChjYW5kaWRhdGVzKSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJiYWJsZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYmJhYmxlcyA9IFtdO1xuICBjYW5kaWRhdGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICBjb25zdCBpc1Njb3BlID0gISFpdGVtLnNjb3BlO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBpc1Njb3BlID8gaXRlbS5zY29wZSA6IGl0ZW07XG4gICAgY29uc3QgY2FuZGlkYXRlVGFiaW5kZXggPSBnZXRUYWJpbmRleChlbGVtZW50LCBpc1Njb3BlKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGlzU2NvcGUgPyBzb3J0QnlPcmRlcihpdGVtLmNhbmRpZGF0ZXMpIDogZWxlbWVudDtcbiAgICBpZiAoY2FuZGlkYXRlVGFiaW5kZXggPT09IDApIHtcbiAgICAgIGlzU2NvcGVcbiAgICAgICAgPyByZWd1bGFyVGFiYmFibGVzLnB1c2goLi4uZWxlbWVudHMpXG4gICAgICAgIDogcmVndWxhclRhYmJhYmxlcy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiYmFibGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogY2FuZGlkYXRlVGFiaW5kZXgsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGlzU2NvcGU6IGlzU2NvcGUsXG4gICAgICAgIGNvbnRlbnQ6IGVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3JkZXJlZFRhYmJhYmxlc1xuICAgIC5zb3J0KHNvcnRPcmRlcmVkVGFiYmFibGVzKVxuICAgIC5yZWR1Y2UoKGFjYywgc29ydGFibGUpID0+IHtcbiAgICAgIHNvcnRhYmxlLmlzU2NvcGVcbiAgICAgICAgPyBhY2MucHVzaCguLi5zb3J0YWJsZS5jb250ZW50KVxuICAgICAgICA6IGFjYy5wdXNoKHNvcnRhYmxlLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAuY29uY2F0KHJlZ3VsYXJUYWJiYWJsZXMpO1xufTtcblxuY29uc3QgdGFiYmFibGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGNhbmRpZGF0ZXM7XG4gIGlmIChvcHRpb25zLmdldFNoYWRvd1Jvb3QpIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFtlbF0sIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lciwge1xuICAgICAgZmlsdGVyOiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgICAgZ2V0U2hhZG93Um9vdDogb3B0aW9ucy5nZXRTaGFkb3dSb290LFxuICAgICAgc2hhZG93Um9vdEZpbHRlcjogaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlLmJpbmQobnVsbCwgb3B0aW9ucylcbiAgICApO1xuICB9XG4gIHJldHVybiBzb3J0QnlPcmRlcihjYW5kaWRhdGVzKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IHRydWUsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXMoXG4gICAgICBlbCxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcixcbiAgICAgIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGlzVGFiYmFibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBjYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5jb25zdCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnNcbiAgLmNvbmNhdCgnaWZyYW1lJylcbiAgLmpvaW4oJywnKTtcblxuY29uc3QgaXNGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG9wdGlvbnMsIG5vZGUpO1xufTtcblxuZXhwb3J0IHsgdGFiYmFibGUsIGZvY3VzYWJsZSwgaXNUYWJiYWJsZSwgaXNGb2N1c2FibGUgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBFTlRFUiA9ICdFbnRlcic7XG5leHBvcnQgdmFyIFNQQUNFID0gJyAnO1xuZXhwb3J0IHZhciBFU0NBUEUgPSAnRXNjYXBlJztcbmV4cG9ydCB2YXIgVEFCID0gJ1RhYic7XG5leHBvcnQgdmFyIEJBQ0tTUEFDRSA9ICdCYWNrc3BhY2UnO1xuZXhwb3J0IHZhciBGMiA9ICdGMic7XG5leHBvcnQgdmFyIEFMVCA9ICdBbHQnO1xuZXhwb3J0IHZhciBTSElGVCA9ICdTaGlmdCc7XG5leHBvcnQgdmFyIENUUkwgPSAnQ29udHJvbCc7XG5leHBvcnQgdmFyIE1FVEEgPSAnTWV0YSc7IC8vIFdpbmRvd3MsIENvbW1hbmQsIE9wdGlvblxuXG5leHBvcnQgdmFyIEFSUk9XX0RPV04gPSAnQXJyb3dEb3duJztcbmV4cG9ydCB2YXIgQVJST1dfVVAgPSAnQXJyb3dVcCc7XG5leHBvcnQgdmFyIEFSUk9XX0xFRlQgPSAnQXJyb3dMZWZ0JztcbmV4cG9ydCB2YXIgQVJST1dfUklHSFQgPSAnQXJyb3dSaWdodCc7XG5leHBvcnQgdmFyIFBBR0VfVVAgPSAnUGFnZVVwJztcbmV4cG9ydCB2YXIgUEFHRV9ET1dOID0gJ1BhZ2VEb3duJztcbmV4cG9ydCB2YXIgRU5EID0gJ0VuZCc7XG5leHBvcnQgdmFyIEhPTUUgPSAnSG9tZSc7XG5leHBvcnQgdmFyIGtleXM7XG5cbihmdW5jdGlvbiAoa2V5cykge1xuICBrZXlzW1wiRU5URVJcIl0gPSBcIkVudGVyXCI7XG4gIGtleXNbXCJTUEFDRVwiXSA9IFwiIFwiO1xuICBrZXlzW1wiRVNDQVBFXCJdID0gXCJFc2NhcGVcIjtcbiAga2V5c1tcIlRBQlwiXSA9IFwiVGFiXCI7XG4gIGtleXNbXCJCQUNLU1BBQ0VcIl0gPSBcIkJhY2tzcGFjZVwiO1xuICBrZXlzW1wiRjJcIl0gPSBcIkYyXCI7XG4gIGtleXNbXCJBTFRcIl0gPSBcIkFsdFwiO1xuICBrZXlzW1wiU0hJRlRcIl0gPSBcIlNoaWZ0XCI7XG4gIGtleXNbXCJDVFJMXCJdID0gXCJDb250cm9sXCI7XG4gIGtleXNbXCJNRVRBXCJdID0gXCJNZXRhXCI7XG4gIGtleXNbXCJBUlJPV19ET1dOXCJdID0gXCJBcnJvd0Rvd25cIjtcbiAga2V5c1tcIkFSUk9XX1VQXCJdID0gXCJBcnJvd1VwXCI7XG4gIGtleXNbXCJBUlJPV19MRUZUXCJdID0gXCJBcnJvd0xlZnRcIjtcbiAga2V5c1tcIkFSUk9XX1JJR0hUXCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIGtleXNbXCJQQUdFX1VQXCJdID0gXCJQYWdlVXBcIjtcbiAga2V5c1tcIlBBR0VfRE9XTlwiXSA9IFwiUGFnZURvd25cIjtcbiAga2V5c1tcIkVORFwiXSA9IFwiRW5kXCI7XG4gIGtleXNbXCJIT01FXCJdID0gXCJIb21lXCI7XG59KShrZXlzIHx8IChrZXlzID0ge30pKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBrZXlzIGFyZSB1c2VkIGZvciBuYXZpZ2F0aW5nIGNhc2NhZGluZyBtZW51IFVJIGNvbXBvbmVudHMuXG4gKlxuICogQVJST1dfRE9XTjogU2VsZWN0IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gKiBBUlJPV19MRUZUOiBTaG93IHRoZSBwcmV2aW91cyBtZW51LlxuICogQVJST1dfUklHSFQ6IFNob3cgdGhlIG5leHQgbWVudSBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gKiBBUlJPV19VUDogU2VsZWN0IHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBsaXN0LlxuICogRVNDOiBEZXNlbGVjdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gYW5kIGhpZGUgdGhlIGxpc3QuXG4gKiBUQUI6IE5vcm1hbCB0YWJiaW5nIG5hdmlnYXRpb24gaXMgc3RpbGwgc3VwcG9ydGVkLlxuICovXG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEVTQ0FQRSwgVEFCIH0gZnJvbSAnLi4va2V5cyc7XG5leHBvcnQgdmFyIGNhc2NhZGluZ01lbnVLZXlzID0ge1xuICBBUlJPV19ET1dOOiBBUlJPV19ET1dOLFxuICBBUlJPV19MRUZUOiBBUlJPV19MRUZULFxuICBBUlJPV19SSUdIVDogQVJST1dfUklHSFQsXG4gIEFSUk9XX1VQOiBBUlJPV19VUCxcbiAgRVNDQVBFOiBFU0NBUEUsXG4gIFRBQjogVEFCXG59OyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLCAiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJpbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnLi9zdHJpbmdpZnkuanMnOyAvLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbnZhciBfbm9kZUlkO1xuXG52YXIgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG52YXIgX2xhc3RNU2VjcyA9IDA7XG52YXIgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgdmFyIHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIHZhciBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICB2YXIgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBzdHJpbmdpZnkoYik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHYxOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdjEgYXMgdXVpZHYxIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBpZHMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSwgYnV0IHByZWRpY3RhYmxlIGlkcyB0byBwYWlyIGxhYmVsc1xuICogd2l0aCB0aGVpciBpbnB1dHMuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHByZWZpeCBhcyBhIHBhcmFtZXRlci4gSWYgeW91IGRvbid0XG4gKiBzcGVjaWZ5IGl0LCBpdCBnZW5lcmF0ZXMgYSByYW5kb20gaWQgcHJlZml4LiBJZiB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBwcmVmaXhcbiAqIGl0IHNob3VsZCBiZWdpbiB3aXRoIGFuIGxldHRlciB0byBiZSBIVE1MNCBjb21wbGlhbnQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxJZEdlbmVyYXRvcigpIHtcbiAgdmFyIGlkUHJlZml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIHN0YXRpY1V1aWQgPSB1dWlkdjEoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWRTdWZmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICAgIHZhciBwcmVmaXggPSBcIlwiLmNvbmNhdChpZFByZWZpeCkuY29uY2F0KGlkUHJlZml4ICE9PSAnJyA/ICdfJyA6ICdpJyk7XG4gICAgdmFyIHN1ZmZpeCA9IGlkU3VmZml4ID8gXCJfXCIuY29uY2F0KGlkU3VmZml4KSA6ICcnO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChzdWZmaXggPyBzdGF0aWNVdWlkIDogdXVpZHYxKCkpLmNvbmNhdChzdWZmaXgpO1xuICB9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBtZW1vaXplZCBJRCB0aGF0IHJlbWFpbnMgc3RhdGljIHVudGlsIGNvbXBvbmVudCB1bm1vdW50LlxuICogVGhpcyBwcmV2ZW50cyBJRHMgZnJvbSBiZWluZyByZS1yYW5kb21pemVkIG9uIGV2ZXJ5IGNvbXBvbmVudCB1cGRhdGUuXG4gKi9cblxuZXhwb3J0IHZhciB1c2VHZW5lcmF0ZWRIdG1sSWQgPSBmdW5jdGlvbiB1c2VHZW5lcmF0ZWRIdG1sSWQoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIHByZWZpeCA9IF9yZWYucHJlZml4LFxuICAgICAgc3VmZml4ID0gX3JlZi5zdWZmaXgsXG4gICAgICBjb25kaXRpb25hbElkID0gX3JlZi5jb25kaXRpb25hbElkO1xuXG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBodG1sSWRHZW5lcmF0b3IocHJlZml4KShzdWZmaXgpO1xuICB9LCBbY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIExFRlRfQUxJR05NRU5UID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBSSUdIVF9BTElHTk1FTlQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBDRU5URVJfQUxJR05NRU5UID0gJ2NlbnRlcic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFzc2VydE5ldmVyID0gZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIFwiLmNvbmNhdCh4KSk7XG59OyAvLyB1dGlsaXR5IHR5cGVzOlxuXG4vKipcbiAqIFhPUiBmb3Igc29tZSBwcm9wZXJ0aWVzIGFwcGxpZWQgdG8gYSB0eXBlXG4gKiAoWE9SIGlzIG9uZSBvZiB0aGVzZSBidXQgbm90IGJvdGggb3IgbmVpdGhlcilcbiAqXG4gKiBVc2FnZTogT25lT2Y8dHlwZVRvRXh0ZW5kLCBvbmUgfCBidXQgfCBub3QgfCBtdWx0aXBsZSB8IG9mIHwgdGhlc2UgfCBhcmUgfCByZXF1aXJlZD5cbiAqXG4gKiBUbyByZXF1aXJlIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGJ1dCBub3QgYm90aFxuICogRXhhbXBsZTogT25lT2Y8VHlwZSwgJ2FyaWEtbGFiZWwnIHwgJ2FyaWEtbGFiZWxsZWRieSc+XG4gKi9cblxuLyoqXG4gKiBXcmFwcyBPYmplY3Qua2V5cyB3aXRoIHByb3BlciB0eXBlc2NyaXB0IGRlZmluaXRpb24gb2YgdGhlIHJlc3VsdGluZyBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c09mKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cbi8qKlxuICogTGlrZSBga2V5b2YgdHlwZW9mYCwgYnV0IGZvciBnZXR0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIGtleXNcbiAqIFZhbHVlT2Y8dHlwZW9mIHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9PlxuICogUmVzdWx0cyBpbiBgJ3ZhbHVlMScgfCAndmFsdWUyJ2BcbiAqLyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBicmVha3BvaW50ID0ge1xuICB4bDogMTIwMCxcbiAgbDogOTkyLFxuICBtOiA3NjgsXG4gIHM6IDU3NSxcbiAgeHM6IDBcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuZXhwb3J0IHZhciBCUkVBS1BPSU5UUyA9IGJyZWFrcG9pbnQ7XG5leHBvcnQgdmFyIEJSRUFLUE9JTlRfS0VZUyA9IGtleXNPZihCUkVBS1BPSU5UUyk7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIG9iamVjdCBvZiBgRXVpQnJlYWtwb2ludHNgLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBrZXlcbiAqIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aWR0aFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBOYW1lIG9mIHRoZSBicmVha3BvaW50IGtleSBvciBgdW5kZWZpbmVkYCBpZiBhIGtleSBkb2Vzbid0IGV4aXN0XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFrcG9pbnQod2lkdGgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBCUkVBS1BPSU5UUztcbiAgLy8gRmluZCB0aGUgYnJlYWtwb2ludCAoa2V5KSB3aG9zZSB2YWx1ZSBpcyA8PSB3aW5kb3dXaWR0aCBzdGFydGluZyB3aXRoIGxhcmdlc3QgZmlyc3RcbiAgcmV0dXJuIEJSRUFLUE9JTlRfS0VZUy5maW5kKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludHNba2V5XSA8PSB3aWR0aDtcbiAgfSk7XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWF4IGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtYXhcbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGJlbG93XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWF4IFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtYXhgIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NYXhCcmVha3BvaW50KHdpZHRoLCBtYXgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1heCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPD0gbWF4O1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPD0gYnJlYWtwb2ludHNbbWF4XSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWluIGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtaW5cbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGFib3ZlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWluIFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtaW5gIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NaW5CcmVha3BvaW50KHdpZHRoLCBtaW4pIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPj0gbWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPj0gYnJlYWtwb2ludHNbbWluXSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cyxcbiAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlIGlmIHRoZSBgd2lkdGhgIGZhbGxzIHdpdGhpblxuICogYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludFNpemVbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbkJyZWFrcG9pbnRzKHdpZHRoLCBzaXplcykge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSBnZXRCcmVha3BvaW50KHdpZHRoLCBicmVha3BvaW50cyk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vdGhlbWUnO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tICcuLi90aHJvdHRsZSc7XG5pbXBvcnQgeyBnZXRCcmVha3BvaW50IH0gZnJvbSAnLi9icmVha3BvaW50JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG4vKipcbiAqIFRvcCBsZXZlbCBwcm92aWRlciAobmVzdGVkIHdpdGhpbiBFdWlQcm92aWRlcikgd2hpY2ggcHJvdmlkZXMgYSBzaW5nbGVcbiAqIHJlc2l6ZSBsaXN0ZW5lciB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBiYXNlZCBvbiB3aW5kb3cgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgPSBmdW5jdGlvbiBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICAgIGJyZWFrcG9pbnRzID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpIDogdW5kZWZpbmVkKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgY3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uV2luZG93UmVzaXplID0gdGhyb3R0bGUoZnVuY3Rpb24gKCkge1xuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQoZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpKTtcbiAgICB9LCA1MCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2JyZWFrcG9pbnRzXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjdXJyZW50QnJlYWtwb2ludFxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS90aGVtZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX01PREUsIGdldENvbXB1dGVkIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChFdWlUaGVtZUFtc3RlcmRhbSk7XG5leHBvcnQgdmFyIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IHZhciBFdWlDb2xvck1vZGVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZ2V0Q29tcHV0ZWQoRXVpVGhlbWVBbXN0ZXJkYW0sIHt9LCBERUZBVUxUX0NPTE9SX01PREUpKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfU1RBTkRBUkQgPSB7XG4gIGxpZ2h0OiAnTElHSFQnLFxuICBkYXJrOiAnREFSSydcbn07XG5leHBvcnQgdmFyIENPTE9SX01PREVTX0lOVkVSU0UgPSAnSU5WRVJTRSc7IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJELCBDT0xPUl9NT0RFU19JTlZFUlNFIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdmFyIERFRkFVTFRfQ09MT1JfTU9ERSA9IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBhbiBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBvYmogLSBBbnl0aGluZ1xuICovXG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqICYmIF90eXBlb2Yob2JqKSA9PT0gJ29iamVjdCc7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNvbG9yIG1vZGUgaXMgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCwgYGRhcmtgLCBvciBgaW52ZXJzZWBcbiAqL1xuXG5cbmV4cG9ydCB2YXIgaXNJbnZlcnNlQ29sb3JNb2RlID0gZnVuY3Rpb24gaXNJbnZlcnNlQ29sb3JNb2RlKGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19JTlZFUlNFO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29sb3IgbW9kZSBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IEV1aVRoZW1lUHJvdmlkZXIuXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnQgY29sb3IgbW9kZSBpZiBub25lIGlzIGV4cGxpY2l0eSBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb01vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudENvbG9yTW9kZSAtIGBMSUdIVGAgb3IgYERBUktgOyB1c2VkIGFzIHRoZSBmYWxsYmFja1xuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29sb3JNb2RlID0gZnVuY3Rpb24gZ2V0Q29sb3JNb2RlKGNvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSB7XG4gIGlmIChjb2xvck1vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJlbnRDb2xvck1vZGUgfHwgREVGQVVMVF9DT0xPUl9NT0RFO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBjb2xvck1vZGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAoaXNJbnZlcnNlQ29sb3JNb2RlKG1vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayB8fCBwYXJlbnRDb2xvck1vZGUgPT09IHVuZGVmaW5lZCA/IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0IDogQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyaztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvbiBhbiBvYmplY3QuXG4gKiBJZiBgY29sb3JNb2RlYCBpcyBwcm92aWRlZCwgd2lsbCBzY29wZSB0aGUgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbG9yIG1vZGUga2V5IChMSUdIVFxcREFSSylcbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCBvciBgZGFya2BcbiAqL1xuXG5leHBvcnQgdmFyIGdldE9uID0gZnVuY3Rpb24gZ2V0T24obW9kZWwsIF9wYXRoLCBjb2xvck1vZGUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuXG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2xvck1vZGUgJiYgbm9kZS5oYXNPd25Qcm9wZXJ0eShjb2xvck1vZGUpID09PSB0cnVlICYmIG5vZGVbY29sb3JNb2RlXS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdIGluc3RhbmNlb2YgQ29tcHV0ZWQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbY29sb3JNb2RlXVtzZWdtZW50XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVbc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XS5nZXRWYWx1ZShudWxsLCBudWxsLCBub2RlLCBjb2xvck1vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gc3RyaW5nIC0gIFRoZSB2YWx1ZSB0byBzZXRcbiAqL1xuXG5leHBvcnQgdmFyIHNldE9uID0gZnVuY3Rpb24gc2V0T24obW9kZWwsIF9wYXRoLCB2YWx1ZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG5cbiAgdmFyIHByb3BlcnR5TmFtZSA9IHBhdGgucG9wKCk7XG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIG5vZGVbc2VnbWVudF0gPSB7fTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgfVxuXG4gIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBjbGFzcyB0byBzdG9yZSB0aGUgYGNvbXB1dGVyYCBtZXRob2QgYW5kIGl0cyBldmVudHVhbCBwYXJhbWV0ZXJzLlxuICogQWxsb3dzIGZvciBvbi1kZW1hbmQgY29tcHV0YXRpb24gd2l0aCB1cC10by1kYXRlIHBhcmFtZXRlcnMgdmlhIGBnZXRWYWx1ZWAgbWV0aG9kLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wdXRlciAtIEZ1bmN0aW9uIHRvIGJlIGNvbXB1dGVkXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBEZXBlbmRlbmNpZXMgcGFzc2VkIHRvIHRoZSBgY29tcHV0ZXJgIGFzIHBhcmFtZXRlcnNcbiAqL1xuXG5leHBvcnQgdmFyIENvbXB1dGVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcHV0ZWQoY29tcHV0ZXIpIHtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wdXRlZCk7XG5cbiAgICB0aGlzLmNvbXB1dGVyID0gY29tcHV0ZXI7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0aGVtZVxuICAgKiBieSB0YWtpbmcgaW50byBhY2NvdW50IHByZXZpb3VzbHkgY29tcHV0ZWQgdmFsdWVzIGFuZCBtb2RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBiYXNlIC0gQ29tcHV0ZWQgb3IgdW5jb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBtb2RpZmljYXRpb25zIC0gVGhlbWUgdmFsdWUgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB3b3JraW5nIC0gUGFydGlhbGx5IGNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhDb21wdXRlZCwgW3tcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoYmFzZSkge1xuICAgICAgdmFyIG1vZGlmaWNhdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHdvcmtpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBjb2xvck1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmRlcGVuZGVuY2llcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIod29ya2luZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRlcGVuZGVuY2llcykpIHtcbiAgICAgICAgdmFyIF9yZWYsIF9nZXRPbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcigoX3JlZiA9IChfZ2V0T24gPSBnZXRPbih3b3JraW5nLCB0aGlzLmRlcGVuZGVuY2llcykpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogZ2V0T24obW9kaWZpY2F0aW9ucywgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBnZXRPbihiYXNlLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKHRoaXMuZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgICB2YXIgX3JlZjIsIF9nZXRPbjI7XG5cbiAgICAgICAgcmV0dXJuIChfcmVmMiA9IChfZ2V0T24yID0gZ2V0T24od29ya2luZywgZGVwZW5kZW5jeSkpICE9PSBudWxsICYmIF9nZXRPbjIgIT09IHZvaWQgMCA/IF9nZXRPbjIgOiBnZXRPbihtb2RpZmljYXRpb25zLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBnZXRPbihiYXNlLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb21wdXRlZDtcbn0oKTtcbi8qKlxuICogUmV0dXJucyBhIENsYXNzIChgQ29tcHV0ZWRgKSB0aGF0IHN0b3JlcyB0aGUgYXJiaXRyYXJ5IGNvbXB1dGVyIG1ldGhvZFxuICogYW5kIHJlZmVyZW5jZXMgdG8gaXRzIG9wdGlvbmFsIGRlcGVuZGVjaWVzLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcHV0ZXIgLSBBcmJpdHJhcnkgbWV0aG9kIHRvIGJlIGNhbGxlZCBhdCBjb21wdXRlIHRpbWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBWYWx1ZXMgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGBjb21wdXRlcmAgYXQgY29tcHV0ZSB0aW1lLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChjb21wLCBkZXApIHtcbiAgcmV0dXJuIG5ldyBDb21wdXRlZChjb21wLCBkZXApO1xufVxuLyoqXG4gKiBUYWtlcyBhbiB1bmNvbXB1dGVkIHRoZW1lLCBhbmQgY29tcHV0ZXMgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB0YWtpbmdcbiAqIGludG8gY29uc2lkZXJhdGlvbiB2YWx1ZSBvdmVycmlkZXMgYW5kIGNvbmZpZ3VyZWQgY29sb3IgbW9kZS5cbiAqIE92ZXJyaWRlcyB0YWtlIHByZWNlZGVuY2UsIGFuZCBvbmx5IHZhbHVlcyBpbiB0aGUgY3VycmVudCBjb2xvciBtb2RlXG4gKiBhcmUgY29tcHV0ZWQgYW5kIHJldHVybmVkLlxuICogQHBhcmFtIHtQcm94eX0gYmFzZSAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gb3ZlciAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29tcHV0ZWQgPSBmdW5jdGlvbiBnZXRDb21wdXRlZChiYXNlLCBvdmVyLCBjb2xvck1vZGUpIHtcbiAgdmFyIG91dHB1dCA9IHtcbiAgICB0aGVtZU5hbWU6IGJhc2Uua2V5XG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcChiYXNlLCBvdmVyKSB7XG4gICAgdmFyIGNoZWNrRXhpc3RpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIHZhciBwYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgT2JqZWN0LmtleXMoYmFzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbmV3UGF0aCA9IHBhdGggPyBcIlwiLmNvbmNhdChwYXRoLCBcIi5cIikuY29uY2F0KGtleSkgOiBcIlwiLmNvbmNhdChrZXkpOyAvLyBAdHMtZXhwZWN0LWVycm9yIGBrZXlgIGlzIG5vdCBuZWNlc3NhcmlseSBhIGNvbG9yTW9kZSBrZXlcblxuICAgICAgaWYgKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LnZhbHVlcyhDT0xPUl9NT0RFU19TVEFOREFSRCkpLCBbY29sb3JNb2RlXSkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBjb2xvck1vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbG9yTW9kZVNlZ21lbnQgPSBuZXcgUmVnRXhwKFwiKFxcXFwuXCIuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcYil8KFxcXFxiXCIpLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXC4pXCIpKTtcbiAgICAgICAgICBuZXdQYXRoID0gbmV3UGF0aC5yZXBsYWNlKGNvbG9yTW9kZVNlZ21lbnQsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXhpc3RpbmcgPSBjaGVja0V4aXN0aW5nICYmIGdldE9uKG91dHB1dCwgbmV3UGF0aCk7XG5cbiAgICAgIGlmICghZXhpc3RpbmcgfHwgaXNPYmplY3QoZXhpc3RpbmcpKSB7XG4gICAgICAgIHZhciBiYXNlVmFsdWUgPSBiYXNlW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IGJhc2Vba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogYmFzZVtrZXldO1xuICAgICAgICB2YXIgb3ZlclZhbHVlID0gb3ZlcltrZXldIGluc3RhbmNlb2YgQ29tcHV0ZWQgPyBvdmVyW2tleV0uZ2V0VmFsdWUoYmFzZS5yb290LCBvdmVyLnJvb3QsIG91dHB1dCwgY29sb3JNb2RlKSA6IG92ZXJba2V5XTtcblxuICAgICAgICBpZiAoaXNPYmplY3QoYmFzZVZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheShiYXNlVmFsdWUpKSB7XG4gICAgICAgICAgbG9vcChiYXNlVmFsdWUsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IHt9LCBjaGVja0V4aXN0aW5nLCBuZXdQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRPbihvdXRwdXQsIG5ld1BhdGgsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IGJhc2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSAvLyBDb21wdXRlIHN0YW5kYXJkIHRoZW1lIHZhbHVlcyBhbmQgYXBwbHkgb3ZlcnJpZGVzXG5cblxuICBsb29wKGJhc2UsIG92ZXIpOyAvLyBDb21wdXRlIGFuZCBhcHBseSBleHRlbnNpb24gdmFsdWVzIG9ubHlcblxuICBsb29wKG92ZXIsIHt9LCB0cnVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIFByb3h5IHdpdGggYSBjdXN0b20gYGhhbmRsZXJgIGRlc2lnbmVkIHRvIHNlbGYtcmVmZXJlbmNlIHZhbHVlc1xuICogYW5kIHByZXZlbnQgYXJiaXRyYXJ5IHZhbHVlIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqL1xuXG5leHBvcnQgdmFyIGJ1aWxkVGhlbWUgPSBmdW5jdGlvbiBidWlsZFRoZW1lKG1vZGVsLCBrZXkpIHtcbiAgdmFyIGhhbmRsZXIgPSB7XG4gICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsLCBwcm90b3R5cGUpO1xuICAgIH0sXG4gICAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5tb2RlbCwga2V5KTtcbiAgICB9LFxuICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQubW9kZWwsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQubW9kZWwsIHByb3BlcnR5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KF90YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdrZXknKSB7XG4gICAgICAgIHJldHVybiBfdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH0gLy8gcHJldmVudCBTYWZhcmkgZnJvbSBsb2NraW5nIHVwIHdoZW4gdGhlIHByb3h5IGlzIHVzZWQgaW4gZGV2IHRvb2xzXG4gICAgICAvLyBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgZ2V0UHJvdG90eXBlT2ZcblxuXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4ge307XG4gICAgICB2YXIgdGFyZ2V0ID0gcHJvcGVydHkgPT09ICdyb290JyA/IF90YXJnZXQgOiBfdGFyZ2V0Lm1vZGVsIHx8IF90YXJnZXQ7IC8vIEB0cy1pZ25vcmUgYHN0cmluZ2AgaW5kZXggc2lnbmF0dXJlXG5cbiAgICAgIHZhciB2YWx1ZSA9IHRhcmdldFtwcm9wZXJ0eV07XG5cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoe1xuICAgICAgICAgIG1vZGVsOiB2YWx1ZSxcbiAgICAgICAgICByb290OiBfdGFyZ2V0LnJvb3QsXG4gICAgICAgICAga2V5OiBcIl9cIi5jb25jYXQoX3RhcmdldC5rZXkpXG4gICAgICAgIH0sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIG93bktleXM6IGZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfTtcbiAgdmFyIHRoZW1lUHJveHkgPSBuZXcgUHJveHkoe1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICByb290OiBtb2RlbCxcbiAgICBrZXk6IGtleVxuICB9LCBoYW5kbGVyKTtcbiAgcmV0dXJuIHRoZW1lUHJveHk7XG59O1xuLyoqXG4gKiBEZWVwbHkgbWVyZ2VzIHR3byBvYmplY3RzLCB1c2luZyBgc291cmNlYCB2YWx1ZXMgd2hlbmV2ZXIgcG9zc2libGUuXG4gKiBAcGFyYW0ge29iamVjdH0gX3RhcmdldCAtIE9iamVjdCB3aXRoIGZhbGxiYWNrIHZhbHVlc1xuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIE9iamVjdCB3aXRoIGRlc2lyZWQgdmFsdWVzXG4gKi9cblxuZXhwb3J0IHZhciBtZXJnZURlZXAgPSBmdW5jdGlvbiBtZXJnZURlZXAoX3RhcmdldCkge1xuICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgdGFyZ2V0ID0gX29iamVjdFNwcmVhZCh7fSwgX3RhcmdldCk7XG5cbiAgaWYgKCFpc09iamVjdCh0YXJnZXQpIHx8ICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICBpZiAoaXNPYmplY3QodGFyZ2V0VmFsdWUpICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0VmFsdWUpLCBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2VWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGlmIHRoZSBzcGVjaWZpZWQgY29sb3IgaXMgXCJkYXJrXCIsIHdoaWNoIHVzdWFsbHkgbWVhbnNcbiAqIHlvdSBuZWVkIGxpZ2h0IHRleHQgaWYgeW91IHVzZSBpdCBhcyBhIGJhY2tncm91bmQgY29sb3IgdG8gZnVsZmlsbCBXQ0FHIGNvbnRyYXN0XG4gKiByZXF1aXJlbWVudC5cbiAqIFRoZSBjb2xvciBtdXN0IGJlIHNwZWNpZmllZCB2aWEgaXRzIHJlZCwgZ3JlZW4gYW5kIGJsdWUgdmFsdWUgaW4gdGhlIHJhbmdlIG9mXG4gKiAwIHRvIDI1NS5cbiAqIFRoZSBmb3JtdWxhIGlzIGJhc2VkIG9uIHRoaXMgU3RhY2tvdmVyZmxvdyBhbnN3ZXI6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTQzMDIzXG4gKiB3aGljaCBpdHNlbGYgaXMgYmFzZWQgdXBvbiB0aGUgV0NBRyByZWNvbW1lbmRhdGlvbiBmb3IgY29sb3IgY29udHJhc3QuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJlZCBUaGUgcmVkIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiBUaGUgZ3JlZW4gY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgVGhlIGJsdWUgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbG9yIGlzIGRhcmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JEYXJrKHJlZCwgZ3JlZW4sIGJsdWUpIHtcbiAgdmFyIF9tYXAkbWFwID0gW3JlZCwgZ3JlZW4sIGJsdWVdLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIC8gMjU1LjA7XG4gIH0pLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIDw9IDAuMDM5MjggPyBjIC8gMTIuOTIgOiBNYXRoLnBvdygoYyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICB9KSxcbiAgICAgIF9tYXAkbWFwMiA9IF9zbGljZWRUb0FycmF5KF9tYXAkbWFwLCAzKSxcbiAgICAgIHIgPSBfbWFwJG1hcDJbMF0sXG4gICAgICBnID0gX21hcCRtYXAyWzFdLFxuICAgICAgYiA9IF9tYXAkbWFwMlsyXTtcblxuICB2YXIgbHVtaW5hbmNlID0gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICByZXR1cm4gbHVtaW5hbmNlIDw9IDAuMTc5O1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4KSB7XG4gIHJldHVybiAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xufSIsICJpbXBvcnQgeyBtaW4sIG1heCB9IGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoeCwgbG93ID0gMCwgaGlnaCA9IDEpID0+IHtcbiAgICByZXR1cm4gbWluKG1heChsb3csIHgpLCBoaWdoKTtcbn07XG4iLCAiaW1wb3J0IGxpbWl0IGZyb20gJy4vbGltaXQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAocmdiKSA9PiB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgMykge1xuICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJnYjtcbn07XG4iLCAiLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5jb25zdCBjbGFzc1RvVHlwZSA9IHt9O1xuZm9yIChsZXQgbmFtZSBvZiBbXG4gICAgJ0Jvb2xlYW4nLFxuICAgICdOdW1iZXInLFxuICAgICdTdHJpbmcnLFxuICAgICdGdW5jdGlvbicsXG4gICAgJ0FycmF5JyxcbiAgICAnRGF0ZScsXG4gICAgJ1JlZ0V4cCcsXG4gICAgJ1VuZGVmaW5lZCcsXG4gICAgJ051bGwnXG5dKSB7XG4gICAgY2xhc3NUb1R5cGVbYFtvYmplY3QgJHtuYW1lfV1gXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8ICdvYmplY3QnO1xufVxuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzLCBrZXlPcmRlciA9IG51bGwpID0+IHtcbiAgICAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcbiAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgIC8vIGFuZCB1c2UgdGhlIGtleU9yZGVyIHN0cmluZyB0byBleHRyYWN0IGFuZCBzb3J0IHByb3BlcnRpZXNcbiAgICBpZiAodHlwZShhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgICAgICByZXR1cm4ga2V5T3JkZXJcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGspID0+IGFyZ3NbMF1ba10gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5tYXAoKGspID0+IGFyZ3NbMF1ba10pO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICByZXR1cm4gYXJnc1swXTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgZnJvbSAnLi90eXBlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGFyZ3MpID0+IHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsID0gYXJncy5sZW5ndGggLSAxO1xuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBudWxsO1xufTtcbiIsICJjb25zdCB7IFBJLCBtaW4sIG1heCB9ID0gTWF0aDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGlwX3JnYiB9IGZyb20gJy4vY2xpcF9yZ2IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsaW1pdCB9IGZyb20gJy4vbGltaXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlIH0gZnJvbSAnLi90eXBlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5wYWNrIH0gZnJvbSAnLi91bnBhY2suanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsYXN0IH0gZnJvbSAnLi9sYXN0LmpzJztcblxuY29uc3QgVFdPUEkgPSBQSSAqIDI7XG5jb25zdCBQSVRISVJEID0gUEkgLyAzO1xuY29uc3QgREVHMlJBRCA9IFBJIC8gMTgwO1xuY29uc3QgUkFEMkRFRyA9IDE4MCAvIFBJO1xuXG5leHBvcnQgeyBQSSwgVFdPUEksIFBJVEhJUkQsIERFRzJSQUQsIFJBRDJERUcsIG1pbiwgbWF4IH07XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbn07XG4iLCAiaW1wb3J0IHsgbGFzdCwgY2xpcF9yZ2IsIHR5cGUgfSBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBfaW5wdXQgZnJvbSAnLi9pby9pbnB1dC5qcyc7XG5cbmNsYXNzIENvbG9yIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIGxldCBtb2RlID0gbGFzdChhcmdzKTtcbiAgICAgICAgbGV0IGF1dG9kZXRlY3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydCgoYSwgYikgPT4gYi5wIC0gYS5wKTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yIChsZXQgY2hrIG9mIF9pbnB1dC5hdXRvZGV0ZWN0KSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgY29uc3QgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGF1dG9kZXRlY3QgPyBhcmdzIDogYXJncy5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtZS5fcmdiID0gY2xpcF9yZ2IocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIG1lLl9yZ2IucHVzaCgxKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0eXBlKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLl9yZ2Iuam9pbignLCcpfV1gO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwgIi8vIHRoaXMgZ2V0cyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNi4wJztcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuY29uc3QgY2hyb21hID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gbmV3IGNocm9tYS5Db2xvciguLi5hcmdzKTtcbn07XG5cbmNocm9tYS5Db2xvciA9IENvbG9yO1xuY2hyb21hLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBjbXlrMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgIGNvbnN0IFtjLCBtLCB5LCBrXSA9IGFyZ3M7XG4gICAgY29uc3QgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICBpZiAoayA9PT0gMSkgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgcmV0dXJuIFtcbiAgICAgICAgYyA+PSAxID8gMCA6IDI1NSAqICgxIC0gYykgKiAoMSAtIGspLCAvLyByXG4gICAgICAgIG0gPj0gMSA/IDAgOiAyNTUgKiAoMSAtIG0pICogKDEgLSBrKSwgLy8gZ1xuICAgICAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICAgICAgYWxwaGFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY215azJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtYXggfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJjbXlrID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByID0gciAvIDI1NTtcbiAgICBnID0gZyAvIDI1NTtcbiAgICBiID0gYiAvIDI1NTtcbiAgICBjb25zdCBrID0gMSAtIG1heChyLCBtYXgoZywgYikpO1xuICAgIGNvbnN0IGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICBjb25zdCBjID0gKDEgLSByIC0gaykgKiBmO1xuICAgIGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAqIGY7XG4gICAgY29uc3QgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNteWs7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY215azJyZ2IgZnJvbSAnLi9jbXlrMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmNteWsgZnJvbSAnLi9yZ2IyY215ay5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmNteWsgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjbXlrJyk7XG5cbmlucHV0LmZvcm1hdC5jbXlrID0gY215azJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3Qgcm5kID0gKGEpID0+IE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSBoc2wyY3NzKGgscyxsKVxuICogLSBoc2wyY3NzKGgscyxsLGEpXG4gKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICovXG5jb25zdCBoc2wyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoc2xhID0gdW5wYWNrKGFyZ3MsICdoc2xhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdsc2EnO1xuICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICBoc2xhWzFdID0gcm5kKGhzbGFbMV0gKiAxMDApICsgJyUnO1xuICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSAqIDEwMCkgKyAnJSc7XG4gICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSkge1xuICAgICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHNsYS5sZW5ndGggPSAzO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtoc2xhLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBtaW4sIG1heCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc2wocixnLGIpXG4gKiAtIHJnYjJoc2wocixnLGIsYSlcbiAqIC0gcmdiMmhzbChbcixnLGJdKVxuICogLSByZ2IyaHNsKFtyLGcsYixhXSlcbiAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcblxuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuXG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcblxuICAgIGNvbnN0IGwgPSAobWF4UmdiICsgbWluUmdiKSAvIDI7XG4gICAgbGV0IHMsIGg7XG5cbiAgICBpZiAobWF4UmdiID09PSBtaW5SZ2IpIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPVxuICAgICAgICAgICAgbCA8IDAuNVxuICAgICAgICAgICAgICAgID8gKG1heFJnYiAtIG1pblJnYikgLyAobWF4UmdiICsgbWluUmdiKVxuICAgICAgICAgICAgICAgIDogKG1heFJnYiAtIG1pblJnYikgLyAoMiAtIG1heFJnYiAtIG1pblJnYik7XG4gICAgfVxuXG4gICAgaWYgKHIgPT0gbWF4UmdiKSBoID0gKGcgLSBiKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIGVsc2UgaWYgKGcgPT0gbWF4UmdiKSBoID0gMiArIChiIC0gcikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChiID09IG1heFJnYikgaCA9IDQgKyAociAtIGcpIC8gKG1heFJnYiAtIG1pblJnYik7XG5cbiAgICBoICo9IDYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGhzbDJjc3MgZnJvbSAnLi9oc2wyY3NzLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4uL2hzbC9yZ2IyaHNsLmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyY3NzKHIsZyxiKVxuICogLSByZ2IyY3NzKHIsZyxiLGEpXG4gKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gKiAtIHJnYjJjc3Moe3IsZyxiLGF9LCBtb2RlKVxuICovXG5jb25zdCByZ2IyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdyZ2InO1xuICAgIGlmIChtb2RlLnN1YnN0cigwLCAzKSA9PSAnaHNsJykge1xuICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsKHJnYmEpLCBtb2RlKTtcbiAgICB9XG4gICAgcmdiYVswXSA9IHJvdW5kKHJnYmFbMF0pO1xuICAgIHJnYmFbMV0gPSByb3VuZChyZ2JhWzFdKTtcbiAgICByZ2JhWzJdID0gcm91bmQocmdiYVsyXSk7XG4gICAgaWYgKG1vZGUgPT09ICdyZ2JhJyB8fCAocmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSkge1xuICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAncmdiYSc7XG4gICAgfVxuICAgIHJldHVybiBgJHttb2RlfSgke3JnYmEuc2xpY2UoMCwgbW9kZSA9PT0gJ3JnYicgPyAzIDogNCkuam9pbignLCcpfSlgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNzcztcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCBoc2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICBjb25zdCBbaCwgcywgbF0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdDMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgY29uc3QgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICBjb25zdCBoXyA9IGggLyAzNjA7XG4gICAgICAgIHQzWzBdID0gaF8gKyAxIC8gMztcbiAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgdDNbMl0gPSBoXyAtIDEgLyAzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgdDNbaV0gKz0gMTtcbiAgICAgICAgICAgIGlmICh0M1tpXSA+IDEpIHQzW2ldIC09IDE7XG4gICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQyO1xuICAgICAgICAgICAgZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDNbaV0pICogNjtcbiAgICAgICAgICAgIGVsc2UgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyb3VuZChjWzBdICogMjU1KSwgcm91bmQoY1sxXSAqIDI1NSksIHJvdW5kKGNbMl0gKiAyNTUpXTtcbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzWzNdXTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJyZ2I7XG4iLCAiaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi4vaHNsL2hzbDJyZ2IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcblxuY29uc3QgUkVfUkdCID0gL15yZ2JcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9SR0JfUENUID1cbiAgICAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbmNvbnN0IFJFX1JHQkFfUENUID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9IU0wgPVxuICAgIC9eaHNsXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9IU0xBID1cbiAgICAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcblxuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgY3NzMnJnYiA9IChjc3MpID0+IHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gcm91bmQocmdiW2ldICogMi41NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmdiWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYmEoMTAwJSwwJSwwJSwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA1KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9ICtyZ2JbM107XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTCkpKSB7XG4gICAgICAgIGNvbnN0IGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICBoc2xbMl0gKj0gMC4wMTtcbiAgICAgICAgY29uc3QgcmdiID0gaHNsMnJnYihoc2wpO1xuICAgICAgICByZ2JbM10gPSAxO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbGEoMCwxMDAlLDUwJSwwLjUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxufTtcblxuY3NzMnJnYi50ZXN0ID0gKHMpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICBSRV9SR0IudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQkFfUENULnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMQS50ZXN0KHMpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNzczJyZ2I7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgcmdiMmNzcyBmcm9tICcuL3JnYjJjc3MuanMnO1xuaW1wb3J0IGNzczJyZ2IgZnJvbSAnLi9jc3MycmdiLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5jc3MgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjc3MnKTtcblxuaW5wdXQuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoaCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmlucHV0LmZvcm1hdC5nbCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbn07XG5cbmNocm9tYS5nbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2dsJyk7XG5cbkNvbG9yLnByb3RvdHlwZS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xufTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG4vKlxuICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICpcbiAqIGh1ZS4uIFswLi4zNjBdXG4gKiBjaHJvbWEgLi4gWzAuLjFdXG4gKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAqL1xuXG5jb25zdCBoY2cycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICBsZXQgW2gsIGMsIF9nXSA9IGFyZ3M7XG4gICAgbGV0IHIsIGcsIGI7XG4gICAgX2cgPSBfZyAqIDI1NTtcbiAgICBjb25zdCBfYyA9IGMgKiAyNTU7XG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSBfZyAqICgxIC0gYyk7XG4gICAgICAgIGNvbnN0IHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICBjb25zdCB0ID0gcCArIF9jICogZjtcbiAgICAgICAgY29uc3QgdiA9IHAgKyBfYztcbiAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHQsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtxLCB2LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgdiwgdF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHEsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt0LCBwLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgcCwgcV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoY2cycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWF4LCBtaW4gfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJoY2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heFJnYiAtIG1pblJnYjtcbiAgICBjb25zdCBjID0gKGRlbHRhICogMTAwKSAvIDI1NTtcbiAgICBjb25zdCBfZyA9IChtaW5SZ2IgLyAoMjU1IC0gZGVsdGEpKSAqIDEwMDtcbiAgICBsZXQgaDtcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHIgPT09IG1heFJnYikgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIH1cbiAgICByZXR1cm4gW2gsIGMsIF9nXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoY2c7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGNnMnJnYiBmcm9tICcuL2hjZzJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoY2cgZnJvbSAnLi9yZ2IyaGNnLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhjZyA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjZycpO1xuXG5pbnB1dC5mb3JtYXQuaGNnID0gaGNnMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAxLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hjZycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiY29uc3QgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbmNvbnN0IFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG5jb25zdCBoZXgycmdiID0gKGhleCkgPT4ge1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYKSkge1xuICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9IHUgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSB1ICYgMHhmZjtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYQSkpIHtcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9XG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMF0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzFdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFsyXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdICtcbiAgICAgICAgICAgICAgICBoZXhbM107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICBjb25zdCByID0gKHUgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgY29uc3QgZyA9ICh1ID4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLnJvdW5kKCgodSAmIDB4ZmYpIC8gMHhmZikgKiAxMDApIC8gMTAwO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFdO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gaGV4IGNvbG9yOiAke2hleH1gKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhleDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhleCA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiLCBhXSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnYXV0byc7XG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgYSA9IDE7XG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICB9XG4gICAgciA9IHJvdW5kKHIpO1xuICAgIGcgPSByb3VuZChnKTtcbiAgICBiID0gcm91bmQoYik7XG4gICAgY29uc3QgdSA9IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjtcbiAgICBsZXQgc3RyID0gJzAwMDAwMCcgKyB1LnRvU3RyaW5nKDE2KTsgLy8jLnRvVXBwZXJDYXNlKCk7XG4gICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgbGV0IGh4YSA9ICcwJyArIHJvdW5kKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICBzd2l0Y2ggKG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfSR7aHhhfWA7XG4gICAgICAgIGNhc2UgJ2FyZ2InOlxuICAgICAgICAgICAgcmV0dXJuIGAjJHtoeGF9JHtzdHJ9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfWA7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhleDtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuL2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi9yZ2IyaGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXgodGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5oZXggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoZXgnKTtcblxuaW5wdXQuZm9ybWF0LmhleCA9IGhleDJyZ2I7XG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXJlc3QubGVuZ3RoICYmXG4gICAgICAgICAgICB0eXBlKGgpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgWzMsIDQsIDUsIDYsIDcsIDgsIDldLmluZGV4T2YoaC5sZW5ndGgpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIGxpbWl0LCBUV09QSSwgUElUSElSRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgY29zIH0gPSBNYXRoO1xuXG4vKlxuICogaHVlIFswLi4zNjBdXG4gKiBzYXR1cmF0aW9uIFswLi4xXVxuICogaW50ZW5zaXR5IFswLi4xXVxuICovXG5jb25zdCBoc2kycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvaHNpMnJnYi5jcHBcbiAgICAqL1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzaScpO1xuICAgIGxldCBbaCwgcywgaV0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuXG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBpZiAoaXNOYU4ocykpIHMgPSAwO1xuICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICBoIC89IDM2MDtcbiAgICBpZiAoaCA8IDEgLyAzKSB7XG4gICAgICAgIGIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgciA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICAgIGggLT0gMSAvIDM7XG4gICAgICAgIHIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgZyA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggLT0gMiAvIDM7XG4gICAgICAgIGcgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgYiA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cbiAgICByID0gbGltaXQoaSAqIHIgKiAzKTtcbiAgICBnID0gbGltaXQoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQoaSAqIGIgKiAzKTtcbiAgICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBUV09QSSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWluLCBzcXJ0LCBhY29zIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyaHNpID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAqL1xuICAgIGxldCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIGxldCBoO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgaSA9IChyICsgZyArIGIpIC8gMztcbiAgICBjb25zdCBzID0gaSA+IDAgPyAxIC0gbWluXyAvIGkgOiAwO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGggPSBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgICAgaCAvPSBzcXJ0KChyIC0gZykgKiAociAtIGcpICsgKHIgLSBiKSAqIChnIC0gYikpO1xuICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgaWYgKGIgPiBnKSB7XG4gICAgICAgICAgICBoID0gVFdPUEkgLSBoO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gVFdPUEk7XG4gICAgfVxuICAgIHJldHVybiBbaCAqIDM2MCwgcywgaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNpO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzaTJyZ2IgZnJvbSAnLi9oc2kycmdiLmpzJztcbmltcG9ydCByZ2IyaHNpIGZyb20gJy4vcmdiMmhzaS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2kgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2knKTtcblxuaW5wdXQuZm9ybWF0LmhzaSA9IGhzaTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi9oc2wycmdiLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4vcmdiMmhzbC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2wodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2wnKTtcblxuaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgZmxvb3IgfSA9IE1hdGg7XG5cbmNvbnN0IGhzdjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgIGxldCBbaCwgcywgdl0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICBjb25zdCBpID0gZmxvb3IoaCk7XG4gICAgICAgIGNvbnN0IGYgPSBoIC0gaTtcbiAgICAgICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICBjb25zdCBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgICBjb25zdCB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaHN2MnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgbWF4IH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmhzdihyLGcsYilcbiAqIC0gcmdiMmhzdihbcixnLGJdKVxuICogLSByZ2IyaHN2KHtyLGcsYn0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGxldCBbciwgZywgYl0gPSBhcmdzO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgbWF4XyA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIGxldCBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgaWYgKG1heF8gPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgIGlmIChyID09PSBtYXhfKSBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgICBpZiAoZyA9PT0gbWF4XykgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhfKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaHN2MnJnYiBmcm9tICcuL2hzdjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoc3YgZnJvbSAnLi9yZ2IyaHN2LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhzdiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hzdicpO1xuXG5pbnB1dC5mb3JtYXQuaHN2ID0gaHN2MnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgIEtuOiAxOCxcblxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3LFxuICAgIFluOiAxLFxuICAgIFpuOiAxLjA4ODgzLFxuXG4gICAgdDA6IDAuMTM3OTMxMDM0LCAvLyA0IC8gMjlcbiAgICB0MTogMC4yMDY4OTY1NTIsIC8vIDYgLyAyOVxuICAgIHQyOiAwLjEyODQxODU1LCAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcbn07XG4iLCAiaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi9sYWItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3QgbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gYXJncztcbiAgICBsZXQgeCwgeSwgeiwgciwgZywgYl87XG5cbiAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgeCA9IGlzTmFOKGEpID8geSA6IHkgKyBhIC8gNTAwO1xuICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgIHkgPSBMQUJfQ09OU1RBTlRTLlluICogbGFiX3h5eih5KTtcbiAgICB4ID0gTEFCX0NPTlNUQU5UUy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IExBQl9DT05TVEFOVFMuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcbiAgICBnID0geHl6X3JnYigtMC45NjkyNjYgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2ICogeik7XG4gICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICByZXR1cm4gW3IsIGcsIGJfLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5jb25zdCB4eXpfcmdiID0gKHIpID0+IHtcbiAgICByZXR1cm4gMjU1ICogKHIgPD0gMC4wMDMwNCA/IDEyLjkyICogciA6IDEuMDU1ICogcG93KHIsIDEgLyAyLjQpIC0gMC4wNTUpO1xufTtcblxuY29uc3QgbGFiX3h5eiA9ICh0KSA9PiB7XG4gICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTLnQxXG4gICAgICAgID8gdCAqIHQgKiB0XG4gICAgICAgIDogTEFCX0NPTlNUQU5UUy50MiAqICh0IC0gTEFCX0NPTlNUQU5UUy50MCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsYWIycmdiO1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmxhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbeCwgeSwgel0gPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIGNvbnN0IGwgPSAxMTYgKiB5IC0gMTY7XG4gICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbn07XG5cbmNvbnN0IHJnYl94eXogPSAocikgPT4ge1xuICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHJldHVybiByIC8gMTIuOTI7XG4gICAgcmV0dXJuIHBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufTtcblxuY29uc3QgeHl6X2xhYiA9ICh0KSA9PiB7XG4gICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTLnQzKSByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMudDIgKyBMQUJfQ09OU1RBTlRTLnQwO1xufTtcblxuY29uc3QgcmdiMnh5eiA9IChyLCBnLCBiKSA9PiB7XG4gICAgciA9IHJnYl94eXoocik7XG4gICAgZyA9IHJnYl94eXooZyk7XG4gICAgYiA9IHJnYl94eXooYik7XG4gICAgY29uc3QgeCA9IHh5el9sYWIoXG4gICAgICAgICgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5YblxuICAgICk7XG4gICAgY29uc3QgeSA9IHh5el9sYWIoXG4gICAgICAgICgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1ICogYikgLyBMQUJfQ09OU1RBTlRTLlluXG4gICAgKTtcbiAgICBjb25zdCB6ID0geHl6X2xhYihcbiAgICAgICAgKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MiAqIGcgKyAwLjk1MDMwNDEgKiBiKSAvIExBQl9DT05TVEFOVFMuWm5cbiAgICApO1xuICAgIHJldHVybiBbeCwgeSwgel07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGFiO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi9sYWIycmdiLmpzJztcbmltcG9ydCByZ2IybGFiIGZyb20gJy4vcmdiMmxhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsYWIodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5sYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsYWInKTtcblxuaW5wdXQuZm9ybWF0LmxhYiA9IGxhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGFiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgREVHMlJBRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmNvbnN0IGxjaDJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgKi9cbiAgICBsZXQgW2wsIGMsIGhdID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBpZiAoaXNOYU4oaCkpIGggPSAwO1xuICAgIGggPSBoICogREVHMlJBRDtcbiAgICByZXR1cm4gW2wsIGNvcyhoKSAqIGMsIHNpbihoKSAqIGNdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuL2xjaDJsYWIuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi4vbGFiL2xhYjJyZ2IuanMnO1xuXG5jb25zdCBsY2gycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBjb25zdCBbbCwgYywgaF0gPSBhcmdzO1xuICAgIGNvbnN0IFtMLCBhLCBiX10gPSBsY2gybGFiKGwsIGMsIGgpO1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IGxhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuXG5jb25zdCBoY2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoY2wgPSB1bnBhY2soYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYiguLi5oY2wpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNsMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIFJBRDJERUcgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNxcnQsIGF0YW4yLCByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgbGFiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBjID0gc3FydChhICogYSArIGIgKiBiKTtcbiAgICBsZXQgaCA9IChhdGFuMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgIGlmIChyb3VuZChjICogMTAwMDApID09PSAwKSBoID0gTnVtYmVyLk5hTjtcbiAgICByZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMmxjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuLi9sYWIvcmdiMmxhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuL2xhYjJsY2guanMnO1xuXG5jb25zdCByZ2IybGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2IybGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuaW1wb3J0IGhjbDJyZ2IgZnJvbSAnLi9oY2wycmdiLmpzJztcbmltcG9ydCByZ2IybGNoIGZyb20gJy4vcmdiMmxjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTtcbn07XG5Db2xvci5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xufTtcblxuY2hyb21hLmxjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2xjaCcpO1xuY2hyb21hLmhjbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjbCcpO1xuXG5pbnB1dC5mb3JtYXQubGNoID0gbGNoMnJnYjtcbmlucHV0LmZvcm1hdC5oY2wgPSBoY2wycmdiO1xuWydsY2gnLCAnaGNsJ10uZm9yRWFjaCgobSkgPT5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuKTtcbiIsICIvKipcblx0WDExIGNvbG9yIG5hbWVzXG5cblx0aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4qL1xuXG5jb25zdCB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgY3JpbXNvbjogJyNkYzE0M2MnLFxuICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgbGltZTogJyMwMGZmMDAnLFxuICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgcGVydTogJyNjZDg1M2YnLFxuICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICBwdXJwbGUzOiAnI2EwMjBmMCcsXG4gICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgIHJlZDogJyNmZjAwMDAnLFxuICAgIHJvc3licm93bjogJyNiYzhmOGYnLFxuICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgc2FsbW9uOiAnI2ZhODA3MicsXG4gICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgc2Vhc2hlbGw6ICcjZmZmNWVlJyxcbiAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICBza3libHVlOiAnIzg3Y2VlYicsXG4gICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gICAgc25vdzogJyNmZmZhZmEnLFxuICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgc3RlZWxibHVlOiAnIzQ2ODJiNCcsXG4gICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgdGVhbDogJyMwMDgwODAnLFxuICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICB2aW9sZXQ6ICcjZWU4MmVlJyxcbiAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgd2hpdGVzbW9rZTogJyNmNWY1ZjUnLFxuICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHczY3gxMTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB3M2N4MTEgZnJvbSAnLi4vLi4vY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuLi9oZXgvaGV4MnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhleCBmcm9tICcuLi9oZXgvcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgZm9yIChsZXQgbiBvZiBPYmplY3Qua2V5cyh3M2N4MTEpKSB7XG4gICAgICAgIGlmICh3M2N4MTFbbl0gPT09IGhleCkgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5cbmlucHV0LmZvcm1hdC5uYW1lZCA9IChuYW1lKSA9PiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodzNjeDExW25hbWVdKSByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pO1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBudW0ycmdiID0gKG51bSkgPT4ge1xuICAgIGlmICh0eXBlKG51bSkgPT0gJ251bWJlcicgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4ZmZmZmZmKSB7XG4gICAgICAgIGNvbnN0IHIgPSBudW0gPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAobnVtID4+IDgpICYgMHhmZjtcbiAgICAgICAgY29uc3QgYiA9IG51bSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBudW0gY29sb3I6ICcgKyBudW0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJudW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJudW07XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IG51bTJyZ2IgZnJvbSAnLi9udW0ycmdiLmpzJztcbmltcG9ydCByZ2IybnVtIGZyb20gJy4vcmdiMm51bS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5udW0gPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdudW0nKTtcblxuaW5wdXQuZm9ybWF0Lm51bSA9IG51bTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPj0gMCAmJlxuICAgICAgICAgICAgYXJnc1swXSA8PSAweGZmZmZmZlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuQ29sb3IucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQgPSB0cnVlKSB7XG4gICAgaWYgKHJuZCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMyk7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKS5tYXAocm91bmQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgNCkubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpIDwgMyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kKHYpKSA6IHY7XG4gICAgfSk7XG59O1xuXG5jaHJvbWEucmdiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAncmdiJyk7XG5cbmlucHV0LmZvcm1hdC5yZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYmEgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSByZ2JhWzNdID0gMTtcbiAgICByZXR1cm4gcmdiYTtcbn07XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJncykgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlKGFyZ3NbM10pID09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbM10gPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdIDw9IDEpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgIi8qXG4gKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gKi9cblxuY29uc3QgeyBsb2cgfSA9IE1hdGg7XG5cbmNvbnN0IHRlbXBlcmF0dXJlMnJnYiA9IChrZWx2aW4pID0+IHtcbiAgICBjb25zdCB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgciA9IDI1NTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICB0ZW1wIDwgNlxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtXG4gICAgICAgICAgICAgICAgICAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgK1xuICAgICAgICAgICAgICAgICAgMTA0LjQ5MjE2MTk5MzkzODg4ICogbG9nKGcpO1xuICAgICAgICBiID1cbiAgICAgICAgICAgIHRlbXAgPCAyMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTI1NC43NjkzNTE4NDEyMDkwMiArXG4gICAgICAgICAgICAgICAgICAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgK1xuICAgICAgICAgICAgICAgICAgMTE1LjY3OTk0NDAxMDY2MTQ3ICogbG9nKGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHIgPVxuICAgICAgICAgICAgMzUxLjk3NjkwNTY2ODA1NjkzICtcbiAgICAgICAgICAgIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wIC0gNTUpIC1cbiAgICAgICAgICAgIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgICBnID1cbiAgICAgICAgICAgIDMyNS40NDk0MTI1NzExOTc0ICtcbiAgICAgICAgICAgIDAuMDc5NDM0NTY1MzY2NjIzNDIgKiAoZyA9IHRlbXAgLSA1MCkgLVxuICAgICAgICAgICAgMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyhnKTtcbiAgICAgICAgYiA9IDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBlcmF0dXJlMnJnYjtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICoqL1xuXG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJ0ZW1wZXJhdHVyZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCByID0gcmdiWzBdLFxuICAgICAgICBiID0gcmdiWzJdO1xuICAgIGxldCBtaW5UZW1wID0gMTAwMDtcbiAgICBsZXQgbWF4VGVtcCA9IDQwMDAwO1xuICAgIGNvbnN0IGVwcyA9IDAuNDtcbiAgICBsZXQgdGVtcDtcbiAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgdGVtcCA9IChtYXhUZW1wICsgbWluVGVtcCkgKiAwLjU7XG4gICAgICAgIGNvbnN0IHJnYiA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgaWYgKHJnYlsyXSAvIHJnYlswXSA+PSBiIC8gcikge1xuICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm91bmQodGVtcCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IydGVtcGVyYXR1cmU7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCByZ2IydGVtcGVyYXR1cmUgZnJvbSAnLi9yZ2IydGVtcGVyYXR1cmUuanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IucHJvdG90eXBlLnRlbXBlcmF0dXJlID1cbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgICAgICB9O1xuXG5jaHJvbWEudGVtcCA9XG4gICAgY2hyb21hLmtlbHZpbiA9XG4gICAgY2hyb21hLnRlbXBlcmF0dXJlID1cbiAgICAgICAgKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAndGVtcCcpO1xuXG5pbnB1dC5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQuZm9ybWF0LmtlbHZpbiA9XG4gICAgaW5wdXQuZm9ybWF0LnRlbXBlcmF0dXJlID1cbiAgICAgICAgdGVtcGVyYXR1cmUycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93LCBzaWduIH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3Qgb2tsYWIycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBbTCwgYSwgYl0gPSBhcmdzO1xuXG4gICAgY29uc3QgbCA9IHBvdyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgIGNvbnN0IG0gPSBwb3coTCAtIDAuMTA1NTYxMzQ1OCAqIGEgLSAwLjA2Mzg1NDE3MjggKiBiLCAzKTtcbiAgICBjb25zdCBzID0gcG93KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKCs0LjA3Njc0MTY2MjEgKiBsIC0gMy4zMDc3MTE1OTEzICogbSArIDAuMjMwOTY5OTI5MiAqIHMpLFxuICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsYWIycmdiO1xuXG5mdW5jdGlvbiBscmdiMnJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA+IDAuMDAzMTMwOCkge1xuICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3coYWJzLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgICB9XG4gICAgcmV0dXJuIGMgKiAxMi45Mjtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNicnQsIHBvdywgc2lnbiB9ID0gTWF0aDtcblxuY29uc3QgcmdiMm9rbGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgLy8gaHR0cHM6Ly9ib3R0b3Nzb24uZ2l0aHViLmlvL3Bvc3RzL29rbGFiL1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW2xyLCBsZywgbGJdID0gW1xuICAgICAgICByZ2IybHJnYihyIC8gMjU1KSxcbiAgICAgICAgcmdiMmxyZ2IoZyAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGIgLyAyNTUpXG4gICAgXTtcbiAgICBjb25zdCBsID0gY2JydCgwLjQxMjIyMTQ3MDggKiBsciArIDAuNTM2MzMyNTM2MyAqIGxnICsgMC4wNTE0NDU5OTI5ICogbGIpO1xuICAgIGNvbnN0IG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgY29uc3QgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDAuMjEwNDU0MjU1MyAqIGwgKyAwLjc5MzYxNzc4NSAqIG0gLSAwLjAwNDA3MjA0NjggKiBzLFxuICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGFiO1xuXG5mdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICB9XG4gICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogcG93KChhYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xhYjJyZ2IgZnJvbSAnLi9va2xhYjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xhYiBmcm9tICcuL3JnYjJva2xhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xhYicpO1xuXG5pbnB1dC5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xhYicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuLi9sY2gvbGNoMmxhYi5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4uL29rbGFiL29rbGFiMnJnYi5qcyc7XG5cbmNvbnN0IG9rbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsY2gycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi4vb2tsYWIvcmdiMm9rbGFiLmpzJztcbmltcG9ydCBsYWIybGNoIGZyb20gJy4uL2xjaC9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMm9rbGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgcmV0dXJuIGxhYjJsY2gobCwgYSwgYl8pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IG9rbGNoMnJnYiBmcm9tICcuL29rbGNoMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm9rbGNoIGZyb20gJy4vcmdiMm9rbGNoLmpzJztcblxuQ29sb3IucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5va2xjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ29rbGNoJyk7XG5cbmlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAzLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JnYlszXSA9IGE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24gKGFtb3VudCA9IDEpIHtcbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3QgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuZGFya2VuKC1hbW91bnQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlciA9IENvbG9yLnByb3RvdHlwZS5kYXJrZW47XG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZXIgPSBDb2xvci5wcm90b3R5cGUuYnJpZ2h0ZW47XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChtYykge1xuICAgIGNvbnN0IFttb2RlLCBjaGFubmVsXSA9IG1jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgIGNvbnN0IGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgIGlmIChpID4gLTEpIHJldHVybiBzcmNbaV07XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IEVQUyA9IDFlLTc7XG5jb25zdCBNQVhfSVRFUiA9IDIwO1xuXG5Db2xvci5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24gKGx1bSwgbW9kZSA9ICdyZ2InKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHVtID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NSwgdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXB1dGUgbmV3IGNvbG9yIHVzaW5nLi4uXG4gICAgICAgIGxldCBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgbGV0IG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgICAgY29uc3QgdGVzdCA9IChsb3csIGhpZ2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgY29uc3QgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJnYiA9IChcbiAgICAgICAgICAgIGN1cl9sdW0gPiBsdW1cbiAgICAgICAgICAgICAgICA/IHRlc3QobmV3IENvbG9yKFswLCAwLCAwXSksIHRoaXMpXG4gICAgICAgICAgICAgICAgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NV0pKVxuICAgICAgICApLnJnYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsuLi5yZ2IsIHRoaXMuX3JnYlszXV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmdiMmx1bWluYW5jZSguLi50aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xufTtcblxuY29uc3QgcmdiMmx1bWluYW5jZSA9IChyLCBnLCBiKSA9PiB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xufTtcblxuY29uc3QgbHVtaW5hbmNlX3ggPSAoeCkgPT4ge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4IC8gMTIuOTIgOiBwb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQge307XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdG9yIGZyb20gJy4uL2ludGVycG9sYXRvci9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmID0gMC41LCAuLi5yZXN0KSA9PiB7XG4gICAgbGV0IG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSAmJiAhcmVzdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICB9XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnRlcnBvbGF0aW9uIG1vZGUgJHttb2RlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAodHlwZShjb2wxKSAhPT0gJ29iamVjdCcpIGNvbDEgPSBuZXcgQ29sb3IoY29sMSk7XG4gICAgaWYgKHR5cGUoY29sMikgIT09ICdvYmplY3QnKSBjb2wyID0gbmV3IENvbG9yKGNvbDIpO1xuICAgIHJldHVybiBpbnRlcnBvbGF0b3JbbW9kZV0oY29sMSwgY29sMiwgZikuYWxwaGEoXG4gICAgICAgIGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKVxuICAgICk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubWl4ID0gQ29sb3IucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKFxuICAgIGNvbDIsXG4gICAgZiA9IDAuNSxcbiAgICAuLi5yZXN0XG4pIHtcbiAgICByZXR1cm4gbWl4KHRoaXMsIGNvbDIsIGYsIC4uLnJlc3QpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUucHJlbXVsdGlwbHkgPSBmdW5jdGlvbiAobXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgY29uc3QgYSA9IHJnYlszXTtcbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JnYiA9IFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV0sICdyZ2InKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuLi9pby9sYWIvbGFiLWNvbnN0YW50cy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxjaCA9IG1lLmxjaCgpO1xuICAgIGxjaFsxXSArPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIGlmIChsY2hbMV0gPCAwKSBsY2hbMV0gPSAwO1xuICAgIHJldHVybiBuZXcgQ29sb3IobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0ID0gbmV3IENvbG9yKHNyYywgbW9kZSk7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiID0gb3V0Ll9yZ2I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGludCA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnd2hpdGUnLCBmLCAuLi5yZXN0KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5zaGFkZSA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnYmxhY2snLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgcmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5fcmdiO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5yZ2IgPSByZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3cgfSA9IE1hdGg7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxyZ2IgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IFt4MSwgeTEsIHoxXSA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCBbeDIsIHkyLCB6Ml0gPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgc3FydChwb3coeDEsIDIpICogKDEgLSBmKSArIHBvdyh4MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coeTEsIDIpICogKDEgLSBmKSArIHBvdyh5MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coejEsIDIpICogKDEgLSBmKSArIHBvdyh6MiwgMikgKiBmKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5scmdiID0gbHJnYjtcblxuZXhwb3J0IGRlZmF1bHQgbHJnYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBsYWIgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IHh5ejAgPSBjb2wxLmxhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdsYWInXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGFiID0gbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBsYWI7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGNvbDEsIGNvbDIsIGYsIG0pID0+IHtcbiAgICBsZXQgeHl6MCwgeHl6MTtcbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzdigpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzaSgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICB4eXowID0gY29sMS5oY2woKTtcbiAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBsZXQgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcbiAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIFtodWUwLCBzYXQwLCBsYnYwXSA9IHh5ejA7XG4gICAgICAgIFtodWUxLCBzYXQxLCBsYnYxXSA9IHh5ejE7XG4gICAgfVxuXG4gICAgbGV0IHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgaWYgKCFpc05hTihodWUwKSAmJiAhaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSAoaHVlMCArIDM2MCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICB9XG4gICAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgaWYgKChsYnYxID09IDEgfHwgbGJ2MSA9PSAwKSAmJiBtICE9ICdoc3YnKSBzYXQgPSBzYXQwO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTE7XG4gICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIGlmIChzYXQgPT09IHVuZGVmaW5lZCkgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApO1xuICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICByZXR1cm4gbSA9PT0gJ29rbGNoJ1xuICAgICAgICA/IG5ldyBDb2xvcihbbGJ2LCBzYXQsIGh1ZV0sIG0pXG4gICAgICAgIDogbmV3IENvbG9yKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGNoID0gbGNoO1xuaW5kZXguaGNsID0gbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBsY2g7XG4iLCAiaW1wb3J0ICcuLi9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBudW0gPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IGMxID0gY29sMS5udW0oKTtcbiAgICBjb25zdCBjMiA9IGNvbDIubnVtKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubnVtID0gbnVtO1xuXG5leHBvcnQgZGVmYXVsdCBudW07XG4iLCAiaW1wb3J0ICcuLi9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoY2cgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hjZycpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oY2cgPSBoY2c7XG5cbmV4cG9ydCBkZWZhdWx0IGhjZztcbiIsICJpbXBvcnQgJy4uL2lvL2hzaS9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzaSA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzaSA9IGhzaTtcblxuZXhwb3J0IGRlZmF1bHQgaHNpO1xuIiwgImltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHNsID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHNsID0gaHNsO1xuXG5leHBvcnQgZGVmYXVsdCBoc2w7XG4iLCAiaW1wb3J0ICcuLi9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc3YgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzdicpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc3YgPSBoc3Y7XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjtcbiIsICJpbXBvcnQgJy4uL2lvL29rbGFiL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmNvbnN0IG9rbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5va2xhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ29rbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGFiID0gb2tsYWI7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiO1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3Qgb2tsY2ggPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ29rbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGNoID0gb2tsY2g7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyBjbGlwX3JnYiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3csIHNxcnQsIFBJLCBjb3MsIHNpbiwgYXRhbjIgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMsIG1vZGUgPSAnbHJnYicsIHdlaWdodHMgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgaWYgKCF3ZWlnaHRzKSB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcCgoKSA9PiAxKTtcbiAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgIGNvbnN0IGsgPVxuICAgICAgICBsIC9cbiAgICAgICAgd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgfSk7XG4gICAgd2VpZ2h0cy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gICAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTtcbiAgICAvLyBjb252ZXJ0IGNvbG9ycyB0byBDb2xvciBvYmplY3RzXG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cyk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgY29uc3QgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIGNvbnN0IGNudCA9IFtdO1xuICAgIGxldCBkeCA9IDA7XG4gICAgbGV0IGR5ID0gMDtcbiAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeHl6W2ldID0gKHh5eltpXSB8fCAwKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gKHh5eltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgIGR4ICs9IGNvcyhBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goKGMsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IHh5ejIgPSBjLmdldChtb2RlKTtcbiAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc05hTih4eXoyW2ldKSkge1xuICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9ICh4eXoyW2ldIC8gMTgwKSAqIFBJO1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbihBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4eXpbaV0gKz0geHl6MltpXSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICBsZXQgQSA9IChhdGFuMihkeSAvIGNudFtpXSwgZHggLyBjbnRbaV0pIC8gUEkpICogMTgwO1xuICAgICAgICAgICAgd2hpbGUgKEEgPCAwKSBBICs9IDM2MDtcbiAgICAgICAgICAgIHdoaWxlIChBID49IDM2MCkgQSAtPSAzNjA7XG4gICAgICAgICAgICB4eXpbaV0gPSBBO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldID0geHl6W2ldIC8gY250W2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFscGhhIC89IGw7XG4gICAgcmV0dXJuIG5ldyBDb2xvcih4eXosIG1vZGUpLmFscGhhKGFscGhhID4gMC45OTk5OSA/IDEgOiBhbHBoYSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBfYXZlcmFnZV9scmdiID0gKGNvbG9ycywgd2VpZ2h0cykgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGNvbnN0IHh5eiA9IFswLCAwLCAwLCAwXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgICAgY29uc3QgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgIHh5elswXSArPSBwb3cocmdiWzBdLCAyKSAqIGY7XG4gICAgICAgIHh5elsxXSArPSBwb3cocmdiWzFdLCAyKSAqIGY7XG4gICAgICAgIHh5elsyXSArPSBwb3cocmdiWzJdLCAyKSAqIGY7XG4gICAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cbiAgICB4eXpbMF0gPSBzcXJ0KHh5elswXSk7XG4gICAgeHl6WzFdID0gc3FydCh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQoeHl6WzJdKTtcbiAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB4eXpbM10gPSAxO1xuICAgIHJldHVybiBuZXcgQ29sb3IoY2xpcF9yZ2IoeHl6KSk7XG59O1xuIiwgIi8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuLy8gQHJlcXVpcmVzIHV0aWxzIGNvbG9yIGFuYWx5emVcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCB7IGxpbWl0LCB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgbGV0IF9tb2RlID0gJ3JnYic7XG4gICAgbGV0IF9uYWNvbCA9IGNocm9tYSgnI2NjYycpO1xuICAgIGxldCBfc3ByZWFkID0gMDtcbiAgICAvLyBjb25zdCBfZml4ZWQgPSBmYWxzZTtcbiAgICBsZXQgX2RvbWFpbiA9IFswLCAxXTtcbiAgICBsZXQgX3BvcyA9IFtdO1xuICAgIGxldCBfcGFkZGluZyA9IFswLCAwXTtcbiAgICBsZXQgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9ycyA9IFtdO1xuICAgIGxldCBfb3V0ID0gZmFsc2U7XG4gICAgbGV0IF9taW4gPSAwO1xuICAgIGxldCBfbWF4ID0gMTtcbiAgICBsZXQgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICBsZXQgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICBsZXQgX2dhbW1hID0gMTtcblxuICAgIC8vIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgY29uc3Qgc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sb3JzICYmXG4gICAgICAgICAgICB0eXBlKGNvbG9ycykgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNocm9tYS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlKGNvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hKGNvbG9yc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWZpbGwgY29sb3IgcG9zaXRpb25cbiAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoY29sb3JzLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIHJldHVybiAoX2NvbG9ycyA9IGNvbG9ycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuXG4gICAgbGV0IHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICBsZXQgdE1hcERvbWFpbiA9ICh0KSA9PiB0O1xuXG4gICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGkgPSBnZXRDbGFzcyh2YWx1ZSk7XG4gICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIHZhbCA9IF9taW4gKyAoKCgoX2NsYXNzZXNbaV0gKyAoKF9jbGFzc2VzW2krMV0gLSBfY2xhc3Nlc1tpXSkgKiAwLjUpKSAtIG1pbmMpIC8gKG1heGMtbWluYykpICogKF9tYXggLSBfbWluKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAvLyB9O1xuXG4gICAgY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgbGV0IGNvbCwgdDtcbiAgICAgICAgaWYgKGJ5cGFzc01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgICBieXBhc3NNYXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICB0ID0gYyAvIChfY2xhc3Nlcy5sZW5ndGggLSAyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGUgYmV0d2VlbiBtaW4vbWF4XG4gICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkge1xuICAgICAgICAgICAgdCA9IHBvdyh0LCBfZ2FtbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgdCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSk7XG5cbiAgICAgICAgdCA9IGxpbWl0KHQsIDAsIDEpO1xuXG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgY29sID0gX2NvbG9yQ2FjaGVba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj0gcCAmJiBpID09PSBfcG9zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gY2hyb21hLmludGVycG9sYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9ICgpID0+IChfY29sb3JDYWNoZSA9IHt9KTtcblxuICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgY29uc3QgZiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjaHJvbWEoZ2V0Q29sb3IodikpO1xuICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jbGFzc2VzID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gY2hyb21hLmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBbZC5taW4sIGQubWF4XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYS5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdO1xuICAgICAgICBfcG9zID0gW107XG4gICAgICAgIGNvbnN0IGsgPSBfY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPT09IGsgJiYgX21pbiAhPT0gX21heCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgZCBvZiBBcnJheS5mcm9tKGRvbWFpbikpIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCB0T3V0ID0gZG9tYWluLm1hcCgoZCwgaSkgPT4gaSAvIChkb21haW4ubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRCcmVha3MgPSBkb21haW4ubWFwKChkKSA9PiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0QnJlYWtzLmV2ZXJ5KCh2YWwsIGkpID0+IHRPdXRbaV0gPT09IHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2kgKyAxXSkgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2kgKyAxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpICsgMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm1vZGUgPSBmdW5jdGlvbiAoX20pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgIH1cbiAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5yYW5nZSA9IGZ1bmN0aW9uIChjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm91dCA9IGZ1bmN0aW9uIChfbykge1xuICAgICAgICBfb3V0ID0gX287XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgICAgfVxuICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgdiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTDAgPSBnZXRDb2xvcigwLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgbGV0IExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTF9pZGVhbCA9IEwwICsgKEwxIC0gTDApICogdDtcbiAgICAgICAgICAgICAgICBsZXQgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgIGxldCB0MCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gMTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoTWF0aC5hYnMoTF9kaWZmKSA+IDFlLTIgJiYgbWF4X2l0ZXItLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2RpZmYgKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUocCkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcCA9IFtwLCBwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY29sb3JzID0gZnVuY3Rpb24gKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmKDAuNSldO1xuICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgIGNvbnN0IGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBmKGRtICsgKGkgLyAobnVtQ29sb3JzIC0gMSkpICogZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgbGV0IHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSsrIDogaS0tXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucHVzaCgoX2NsYXNzZXNbaSAtIDFdICsgX2NsYXNzZXNbaV0pICogMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoKHYpID0+IGYodikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNocm9tYVtvdXRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKChjKSA9PiBjW291dF0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdXNlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICAgIGlmIChnICE9IG51bGwpIHtcbiAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEoZCk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgbGV0IHJhbmdlID0gW107XG4gICAgbGV0IGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICBsZXQgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgIGZvciAobGV0IGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICAgIHJhbmdlLnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbiIsICIvL1xuLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuLy9cblxuLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NjYWxlLmpzJztcblxuLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG5jb25zdCBiaW5vbV9yb3cgPSBmdW5jdGlvbiAobikge1xuICAgIGxldCByb3cgPSBbMSwgMV07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgbGV0IG5ld3JvdyA9IFsxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG59O1xuXG5jb25zdCBiZXppZXIgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gICAgbGV0IEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMV0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PiBsYWIwW2ldICsgdCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIGxhYjJbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBsZXQgbGFiMztcbiAgICAgICAgW2xhYjAsIGxhYjEsIGxhYjIsIGxhYjNdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcChcbiAgICAgICAgICAgICAgICAoaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgMyAqICgxIC0gdCkgKiB0ICogdCAqIGxhYjJbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIHQgKiBsYWIzW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAvLyBnZW5lcmFsIGNhc2UgKGRlZ3JlZSBuIGJlemllcilcbiAgICAgICAgbGV0IGxhYnMsIHJvdywgbjtcbiAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBuID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gMSAtIHQ7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgIGxhYnMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoc3VtLCBlbCwgaikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArIHJvd1tqXSAqIHUgKiogKG4gLSBqKSAqIHQgKiogaiAqIGVsW2ldLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuJyk7XG4gICAgfVxuICAgIHJldHVybiBJO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbG9ycykgPT4ge1xuICAgIGNvbnN0IGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICBmLnNjYWxlID0gKCkgPT4gc2NhbGUoZik7XG4gICAgcmV0dXJuIGY7XG59O1xuIiwgIi8qXG4gKiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTgwMTEwMDE0OTQ2L2h0dHA6Ly93d3cudmVudHVyZS13YXJlLmNvbS9rZXZpbi9jb2RpbmcvbGV0cy1sZWFybi1tYXRoLXBob3Rvc2hvcC1ibGVuZC1tb2Rlcy9cbiAqL1xuXG5pbXBvcnQgJy4uL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5cbmNvbnN0IGJsZW5kID0gKGJvdHRvbSwgdG9wLCBtb2RlKSA9PiB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG59O1xuXG5jb25zdCBibGVuZF9mID0gKGYpID0+IChib3R0b20sIHRvcCkgPT4ge1xuICAgIGNvbnN0IGMwID0gY2hyb21hKHRvcCkucmdiKCk7XG4gICAgY29uc3QgYzEgPSBjaHJvbWEoYm90dG9tKS5yZ2IoKTtcbiAgICByZXR1cm4gY2hyb21hLnJnYihmKGMwLCBjMSkpO1xufTtcblxuY29uc3QgZWFjaCA9IChmKSA9PiAoYzAsIGMxKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICBvdXRbMl0gPSBmKGMwWzJdLCBjMVsyXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmNvbnN0IG5vcm1hbCA9IChhKSA9PiBhO1xuY29uc3QgbXVsdGlwbHkgPSAoYSwgYikgPT4gKGEgKiBiKSAvIDI1NTtcbmNvbnN0IGRhcmtlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBiIDogYSk7XG5jb25zdCBsaWdodGVuID0gKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKTtcbmNvbnN0IHNjcmVlbiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbmNvbnN0IG92ZXJsYXkgPSAoYSwgYikgPT5cbiAgICBiIDwgMTI4ID8gKDIgKiBhICogYikgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBidXJuID0gKGEsIGIpID0+IDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG5jb25zdCBkb2RnZSA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGEgPT09IDI1NSkgcmV0dXJuIDI1NTtcbiAgICBhID0gKDI1NSAqIChiIC8gMjU1KSkgLyAoMSAtIGEgLyAyNTUpO1xuICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYTtcbn07XG5cbi8vICMgYWRkID0gKGEsYikgLT5cbi8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5ibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG5ibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuYmxlbmQuc2NyZWVuID0gYmxlbmRfZihlYWNoKHNjcmVlbikpO1xuYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG5ibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG5ibGVuZC5saWdodGVuID0gYmxlbmRfZihlYWNoKGxpZ2h0ZW4pKTtcbmJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG5ibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbi8vIGJsZW5kLmFkZCA9IGJsZW5kX2YoZWFjaChhZGQpKTtcblxuZXhwb3J0IGRlZmF1bHQgYmxlbmQ7XG4iLCAiLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbi8vIGJhc2VkIG9uIEQuQS4gR3JlZW4gXCJBIGNvbG91ciBzY2hlbWUgZm9yIHRoZSBkaXNwbGF5IG9mIGFzdHJvbm9taWNhbCBpbnRlbnNpdHkgaW1hZ2VzXCJcbi8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5pbXBvcnQgeyB0eXBlLCBjbGlwX3JnYiwgVFdPUEkgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5jb25zdCB7IHBvdywgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChcbiAgICBzdGFydCA9IDMwMCxcbiAgICByb3RhdGlvbnMgPSAtMS41LFxuICAgIGh1ZSA9IDEsXG4gICAgZ2FtbWEgPSAxLFxuICAgIGxpZ2h0bmVzcyA9IFswLCAxXVxuKSB7XG4gICAgbGV0IGRoID0gMCxcbiAgICAgICAgZGw7XG4gICAgaWYgKHR5cGUobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkbCA9IDA7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAoZnJhY3QpIHtcbiAgICAgICAgY29uc3QgYSA9IFRXT1BJICogKChzdGFydCArIDEyMCkgLyAzNjAgKyByb3RhdGlvbnMgKiBmcmFjdCk7XG4gICAgICAgIGNvbnN0IGwgPSBwb3cobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgICBjb25zdCBoID0gZGggIT09IDAgPyBodWVbMF0gKyBmcmFjdCAqIGRoIDogaHVlO1xuICAgICAgICBjb25zdCBhbXAgPSAoaCAqIGwgKiAoMSAtIGwpKSAvIDI7XG4gICAgICAgIGNvbnN0IGNvc19hID0gY29zKGEpO1xuICAgICAgICBjb25zdCBzaW5fYSA9IHNpbihhKTtcbiAgICAgICAgY29uc3QgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICAgIGNvbnN0IGcgPSBsICsgYW1wICogKC0wLjI5MjI3ICogY29zX2EgLSAwLjkwNjQ5ICogc2luX2EpO1xuICAgICAgICBjb25zdCBiID0gbCArIGFtcCAqICgrMS45NzI5NCAqIGNvc19hKTtcbiAgICAgICAgcmV0dXJuIGNocm9tYShjbGlwX3JnYihbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuICAgIGYuc3RhcnQgPSBmdW5jdGlvbiAocykge1xuICAgICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2FtbWE7XG4gICAgICAgIH1cbiAgICAgICAgZ2FtbWEgPSBnO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuaHVlID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh1ZTtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBoO1xuICAgICAgICBpZiAodHlwZShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgIGlmIChkaCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGh1ZSA9IGh1ZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0bmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShoKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaWdodG5lc3MgPSBbaCwgaF07XG4gICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnNjYWxlID0gKCkgPT4gY2hyb21hLnNjYWxlKGYpO1xuICAgIGYuaHVlKGh1ZSk7XG4gICAgcmV0dXJuIGY7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuY29uc3QgeyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICAgbGV0IGNvZGUgPSAnIyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yKHJhbmRvbSgpICogMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjb2RlLCAnaGV4Jyk7XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmNvbnN0IHsgbG9nLCBwb3csIGZsb29yLCBhYnMgfSA9IE1hdGg7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplKGRhdGEsIGtleSA9IG51bGwpIHtcbiAgICBjb25zdCByID0ge1xuICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIG1heDogTnVtYmVyLk1BWF9WQUxVRSAqIC0xLFxuICAgICAgICBzdW06IDAsXG4gICAgICAgIHZhbHVlczogW10sXG4gICAgICAgIGNvdW50OiAwXG4gICAgfTtcbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgdmFsID0gdmFsW2tleV07XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgIGlmICh2YWwgPCByLm1pbikgci5taW4gPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHIubWF4ID0gdmFsO1xuICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSAobW9kZSwgbnVtKSA9PiBsaW1pdHMociwgbW9kZSwgbnVtKTtcblxuICAgIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGltaXRzKGRhdGEsIG1vZGUgPSAnZXF1YWwnLCBudW0gPSA3KSB7XG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gZGF0YTtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLnZhbHVlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgIHJldHVybiBbbWluLCBtYXhdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgICAgLy8gY29udGludW91c1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAgIC8vIGVxdWFsIGludGVydmFsXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgICAvLyBsb2cgc2NhbGVcbiAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluX2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1pbik7XG4gICAgICAgIGNvbnN0IG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChwb3coMTAsIG1pbl9sb2cgKyAoaSAvIG51bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAncScpIHtcbiAgICAgICAgLy8gcXVhbnRpbGUgc2NhbGVcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcCA9ICgodmFsdWVzLmxlbmd0aCAtIDEpICogaSkgLyBudW07XG4gICAgICAgICAgICBjb25zdCBwYiA9IGZsb29yKHApO1xuICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgIGNvbnN0IHByID0gcCAtIHBiO1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAgIC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvKlxuICAgICAgICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvblxuICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAqL1xuICAgICAgICBsZXQgY2x1c3RlcjtcbiAgICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBjb25zdCBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgbGV0IHJlcGVhdCA9IHRydWU7XG4gICAgICAgIGxldCBuYl9pdGVycyA9IDA7XG4gICAgICAgIGxldCBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICBjZW50cm9pZHMgPSBbXTtcbiAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKGkgLyBudW0pICogKG1heCAtIG1pbikpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgLy8gYXNzaWdubWVudCBzdGVwXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IGFicyhjZW50cm9pZHNbal0gLSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbYmVzdF0rKztcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaV0gPSBiZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIGNlbnRyb2lkcyBzdGVwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbal0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdICs9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdICo9IDEgLyBjbHVzdGVyU2l6ZXNbal07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGNvbnZlcmdlbmNlXG4gICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2pdICE9PSBjZW50cm9pZHNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICBuYl9pdGVycysrO1xuXG4gICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvLyB0aGUgbmV4dCBwYXJ0IGlzIGJvcnJvd2VkIGZyb20gZ2FicmllbGZsb3IuaXRcbiAgICAgICAgY29uc3Qga0NsdXN0ZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIGtDbHVzdGVyc1tqXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2pdWzBdKTtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVtrQ2x1c3RlcnNbal0ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdG1wS01lYW5zQnJlYWtzW2ldO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiBsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGltaXRzO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL29wcy9sdW1pbmFuY2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYSwgYikgPT4ge1xuICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgY29uc3QgbDIgPSBiLmx1bWluYW5jZSgpO1xuICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCB7IHNxcnQsIHBvdywgbWluLCBtYXgsIGF0YW4yLCBhYnMsIGNvcywgc2luLCBleHAsIFBJIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgS2wgPSAxLCBLYyA9IDEsIEtoID0gMSkge1xuICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9EZWx0YUVfQ0lFMjAwMC5odG1sXG4gICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHJldHVybiAoMzYwICogcmFkKSAvICgyICogUEkpO1xuICAgIH07XG4gICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbiAoZGVnKSB7XG4gICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICB9O1xuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBbTDEsIGExLCBiMV0gPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgIGNvbnN0IFtMMiwgYTIsIGIyXSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgY29uc3QgYXZnTCA9IChMMSArIEwyKSAvIDI7XG4gICAgY29uc3QgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICBjb25zdCBDMiA9IHNxcnQocG93KGEyLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0MgPSAoQzEgKyBDMikgLyAyO1xuICAgIGNvbnN0IEcgPSAwLjUgKiAoMSAtIHNxcnQocG93KGF2Z0MsIDcpIC8gKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgY29uc3QgYTFwID0gYTEgKiAoMSArIEcpO1xuICAgIGNvbnN0IGEycCA9IGEyICogKDEgKyBHKTtcbiAgICBjb25zdCBDMXAgPSBzcXJ0KHBvdyhhMXAsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0NwID0gKEMxcCArIEMycCkgLyAyO1xuICAgIGNvbnN0IGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICBjb25zdCBhcmN0YW4yID0gcmFkMmRlZyhhdGFuMihiMiwgYTJwKSk7XG4gICAgY29uc3QgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgY29uc3QgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgY29uc3QgYXZnSHAgPVxuICAgICAgICBhYnMoaDFwIC0gaDJwKSA+IDE4MCA/IChoMXAgKyBoMnAgKyAzNjApIC8gMiA6IChoMXAgKyBoMnApIC8gMjtcbiAgICBjb25zdCBUID1cbiAgICAgICAgMSAtXG4gICAgICAgIDAuMTcgKiBjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgK1xuICAgICAgICAwLjI0ICogY29zKGRlZzJyYWQoMiAqIGF2Z0hwKSkgK1xuICAgICAgICAwLjMyICogY29zKGRlZzJyYWQoMyAqIGF2Z0hwICsgNikpIC1cbiAgICAgICAgMC4yICogY29zKGRlZzJyYWQoNCAqIGF2Z0hwIC0gNjMpKTtcbiAgICBsZXQgZGVsdGFIcCA9IGgycCAtIGgxcDtcbiAgICBkZWx0YUhwID1cbiAgICAgICAgYWJzKGRlbHRhSHApIDw9IDE4MFxuICAgICAgICAgICAgPyBkZWx0YUhwXG4gICAgICAgICAgICA6IGgycCA8PSBoMXBcbiAgICAgICAgICAgICAgPyBkZWx0YUhwICsgMzYwXG4gICAgICAgICAgICAgIDogZGVsdGFIcCAtIDM2MDtcbiAgICBkZWx0YUhwID0gMiAqIHNxcnQoQzFwICogQzJwKSAqIHNpbihkZWcycmFkKGRlbHRhSHApIC8gMik7XG4gICAgY29uc3QgZGVsdGFMID0gTDIgLSBMMTtcbiAgICBjb25zdCBkZWx0YUNwID0gQzJwIC0gQzFwO1xuICAgIGNvbnN0IHNsID0gMSArICgwLjAxNSAqIHBvdyhhdmdMIC0gNTAsIDIpKSAvIHNxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgY29uc3Qgc2MgPSAxICsgMC4wNDUgKiBhdmdDcDtcbiAgICBjb25zdCBzaCA9IDEgKyAwLjAxNSAqIGF2Z0NwICogVDtcbiAgICBjb25zdCBkZWx0YVRoZXRhID0gMzAgKiBleHAoLXBvdygoYXZnSHAgLSAyNzUpIC8gMjUsIDIpKTtcbiAgICBjb25zdCBSYyA9IDIgKiBzcXJ0KHBvdyhhdmdDcCwgNykgLyAocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICBjb25zdCBSdCA9IC1SYyAqIHNpbigyICogZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gc3FydChcbiAgICAgICAgcG93KGRlbHRhTCAvIChLbCAqIHNsKSwgMikgK1xuICAgICAgICAgICAgcG93KGRlbHRhQ3AgLyAoS2MgKiBzYyksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUhwIC8gKEtoICogc2gpLCAyKSArXG4gICAgICAgICAgICBSdCAqIChkZWx0YUNwIC8gKEtjICogc2MpKSAqIChkZWx0YUhwIC8gKEtoICogc2gpKVxuICAgICk7XG4gICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG4vLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgbW9kZSA9ICdsYWInKSB7XG4gICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXF1YXRpb25zLmh0bWxcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmdldChtb2RlKTtcbiAgICBjb25zdCBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIGxldCBzdW1fc3EgPSAwO1xuICAgIGZvciAobGV0IGkgaW4gbDEpIHtcbiAgICAgICAgY29uc3QgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgc3VtX3NxICs9IGQgKiBkO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bV9zcSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgQ29sb3IoLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuIiwgIi8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuaW1wb3J0ICcuLi9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4uL2dlbmVyYXRvci9zY2FsZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb29sKCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYS5oc2woMTgwLCAxLCAwLjkpLCBjaHJvbWEuaHNsKDI1MCwgMC43LCAwLjQpXSk7XG4gICAgfSxcbiAgICBob3QoKSB7XG4gICAgICAgIHJldHVybiBzY2FsZShbJyMwMDAnLCAnI2YwMCcsICcjZmYwJywgJyNmZmYnXSwgWzAsIDAuMjUsIDAuNzUsIDFdKS5tb2RlKFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwgIi8qKlxuICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SXG4gICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuY29uc3QgY29sb3JicmV3ZXIgPSB7XG4gICAgLy8gc2VxdWVudGlhbFxuICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgQnVQdTogWycjZjdmY2ZkJywgJyNlMGVjZjQnLCAnI2JmZDNlNicsICcjOWViY2RhJywgJyM4Yzk2YzYnLCAnIzhjNmJiMScsICcjODg0MTlkJywgJyM4MTBmN2MnLCAnIzRkMDA0YiddLFxuICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxPckJyOiBbJyNmZmZmZTUnLCAnI2ZmZjdiYycsICcjZmVlMzkxJywgJyNmZWM0NGYnLCAnI2ZlOTkyOScsICcjZWM3MDE0JywgJyNjYzRjMDInLCAnIzk5MzQwNCcsICcjNjYyNTA2J10sXG4gICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICBSZFB1OiBbJyNmZmY3ZjMnLCAnI2ZkZTBkZCcsICcjZmNjNWMwJywgJyNmYTlmYjUnLCAnI2Y3NjhhMScsICcjZGQzNDk3JywgJyNhZTAxN2UnLCAnIzdhMDE3NycsICcjNDkwMDZhJ10sXG4gICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgUHVycGxlczogWycjZmNmYmZkJywgJyNlZmVkZjUnLCAnI2RhZGFlYicsICcjYmNiZGRjJywgJyM5ZTlhYzgnLCAnIzgwN2RiYScsICcjNmE1MWEzJywgJyM1NDI3OGYnLCAnIzNmMDA3ZCddLFxuICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgIFlsT3JSZDogWycjZmZmZmNjJywgJyNmZmVkYTAnLCAnI2ZlZDk3NicsICcjZmViMjRjJywgJyNmZDhkM2MnLCAnI2ZjNGUyYScsICcjZTMxYTFjJywgJyNiZDAwMjYnLCAnIzgwMDAyNiddLFxuICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgIFB1QnVHbjogWycjZmZmN2ZiJywgJyNlY2UyZjAnLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM2N2E5Y2YnLCAnIzM2OTBjMCcsICcjMDI4MThhJywgJyMwMTZjNTknLCAnIzAxNDYzNiddLFxuICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAvLyBxdWFsaXRhdGl2ZVxuICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgQWNjZW50OiBbJyM3ZmM5N2YnLCAnI2JlYWVkNCcsICcjZmRjMDg2JywgJyNmZmZmOTknLCAnIzM4NmNiMCcsICcjZjAwMjdmJywgJyNiZjViMTcnLCAnIzY2NjY2NiddLFxuICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgRGFyazI6IFsnIzFiOWU3NycsICcjZDk1ZjAyJywgJyM3NTcwYjMnLCAnI2U3Mjk4YScsICcjNjZhNjFlJywgJyNlNmFiMDInLCAnI2E2NzYxZCcsICcjNjY2NjY2J10sXG4gICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICBQYXN0ZWwxOiBbJyNmYmI0YWUnLCAnI2IzY2RlMycsICcjY2NlYmM1JywgJyNkZWNiZTQnLCAnI2ZlZDlhNicsICcjZmZmZmNjJywgJyNlNWQ4YmQnLCAnI2ZkZGFlYycsICcjZjJmMmYyJ11cbn07XG5cbi8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5mb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpKSB7XG4gICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JicmV3ZXI7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuL3NyYy9jaHJvbWEuanMnO1xuXG4vLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4vLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG5cbi8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuaW1wb3J0ICcuL3NyYy9pby9jbXlrL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vY3NzL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vZ2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oZXgvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sY2gvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9uYW1lZC9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL251bS9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3RlbXAvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL29rbGNoL2luZGV4LmpzJztcblxuLy8gb3BlcmF0b3JzIC0tPiBtb2RpZnkgZXhpc3RpbmcgQ29sb3JzXG5pbXBvcnQgJy4vc3JjL29wcy9hbHBoYS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9jbGlwcGVkLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2Rhcmtlbi5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9nZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvbHVtaW5hbmNlLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL21peC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9wcmVtdWx0aXBseS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zYXR1cmF0ZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2hhZGUuanMnO1xuXG4vLyBpbnRlcnBvbGF0b3JzXG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9yZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9sYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oY2cuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc3YuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMnO1xuXG4vLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbmltcG9ydCBhdmVyYWdlIGZyb20gJy4vc3JjL2dlbmVyYXRvci9hdmVyYWdlLmpzJztcbmltcG9ydCBiZXppZXIgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyc7XG5pbXBvcnQgYmxlbmQgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzJztcbmltcG9ydCBjdWJlaGVsaXggZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9taXguanMnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG4vLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbmltcG9ydCB7IGFuYWx5emUgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL3NyYy91dGlscy9jb250cmFzdC5qcyc7XG5pbXBvcnQgZGVsdGFFIGZyb20gJy4vc3JjL3V0aWxzL2RlbHRhLWUuanMnO1xuaW1wb3J0IGRpc3RhbmNlIGZyb20gJy4vc3JjL3V0aWxzL2Rpc3RhbmNlLmpzJztcbmltcG9ydCB7IGxpbWl0cyB9IGZyb20gJy4vc3JjL3V0aWxzL2FuYWx5emUuanMnO1xuaW1wb3J0IHZhbGlkIGZyb20gJy4vc3JjL3V0aWxzL3ZhbGlkLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuL3NyYy9pby9pbnB1dC5qcyc7XG5cbi8vIHNjYWxlXG5pbXBvcnQgc2NhbGVzIGZyb20gJy4vc3JjL3V0aWxzL3NjYWxlcy5qcyc7XG5cbi8vIGNvbG9yc1xuaW1wb3J0IGNvbG9ycyBmcm9tICcuL3NyYy9jb2xvcnMvdzNjeDExLmpzJztcbmltcG9ydCBicmV3ZXIgZnJvbSAnLi9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzJztcblxuT2JqZWN0LmFzc2lnbihjaHJvbWEsIHtcbiAgICBhdmVyYWdlLFxuICAgIGJlemllcixcbiAgICBibGVuZCxcbiAgICBjdWJlaGVsaXgsXG4gICAgbWl4LFxuICAgIGludGVycG9sYXRlOiBtaXgsXG4gICAgcmFuZG9tLFxuICAgIHNjYWxlLFxuICAgIGFuYWx5emUsXG4gICAgY29udHJhc3QsXG4gICAgZGVsdGFFLFxuICAgIGRpc3RhbmNlLFxuICAgIGxpbWl0cyxcbiAgICB2YWxpZCxcbiAgICBzY2FsZXMsXG4gICAgaW5wdXQsXG4gICAgY29sb3JzLFxuICAgIGJyZXdlclxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNocm9tYTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBNSURfQ09MT1JfU1RPUCA9ICcjRUJFRkY1Jztcbi8qKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBjb2xvcnMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaW50ZXJwb2xhdGVkXG4gKiBjb2xvcnMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBzdGVwcy9sZW4gbmVlZGVkIGZvciB1c2UgaW4gVUkgZWxlbWVudHMgc3VjaCBhcyBjaGFydHMuXG4gKiBEZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2drYS9wYWxldHRlcyAoVW5saWNlbnNlZClcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JQYWxldHRlKFxuLyoqXG4gKiBUaGUgbWFpbiBjb2xvciBjb2RlIG9yIGFycmF5IG9mIGNvZGVzXG4gKi9cbmNvbG9ycykge1xuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxMDtcbiAgdmFyIGRpdmVyZ2luZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gIHZhciBoZXhTdGFydCA9IGNvbG9ycy5zbGljZSgpO1xuICB2YXIgaGV4RW5kID0gW107XG4gIHZhciBldmVuID0gbGVuICUgMiA9PT0gMDtcbiAgdmFyIG51bUNvbG9yc0xlZnQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IGxlbjtcbiAgdmFyIG51bUNvbG9yc1JpZ2h0ID0gZGl2ZXJnaW5nID8gTWF0aC5jZWlsKGxlbiAvIDIpICsgKGV2ZW4gPyAxIDogMCkgOiAwOyAvLyBJZiBvbmx5IGEgc2luZ2xlIGNvbG9yIGlzIHByb3ZpZGVkIHByZXBlbmQgdGhlIG1pZC1wb2ludCBjb2xvclxuXG4gIGlmIChoZXhTdGFydC5sZW5ndGggPT09IDEpIHtcbiAgICBoZXhTdGFydC51bnNoaWZ0KE1JRF9DT0xPUl9TVE9QKTtcbiAgfSAvLyBJZiBkaXZlcmdpbmcsIHNwbGl0IHRoZSBzdGFydCBhcnJheSBhbmQgZHVwbGljYXRlIHRoZSBtaWQgY29sb3JcblxuXG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1pZHBvaW50LCBjcmVhdGUgb25lXG4gICAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIGhleFN0YXJ0WzJdID0gaGV4U3RhcnRbMV07XG4gICAgICBoZXhTdGFydFsxXSA9IE1JRF9DT0xPUl9TVE9QO1xuICAgIH1cblxuICAgIHZhciBudW1Db2xvcnNIYWxmID0gTWF0aC5jZWlsKGhleFN0YXJ0Lmxlbmd0aCAvIDIpO1xuICAgIHZhciBjb2xvcnNMZWZ0ID0gaGV4U3RhcnQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBjb2xvcnNSaWdodCA9IGhleFN0YXJ0LnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSkucmV2ZXJzZSgpO1xuICAgIGhleFN0YXJ0ID0gY29sb3JzTGVmdDtcbiAgICBoZXhFbmQgPSBjb2xvcnNSaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBzKGNvbG9ycywgc3RlcHMpIHtcbiAgICBpZiAoIWNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFjYXRlZ29yaWNhbCkge1xuICAgICAgcmV0dXJuIGNocm9tYS5iZXppZXIoY29sb3JzKS5zY2FsZSgpLmNvcnJlY3RMaWdodG5lc3MoKS5jb2xvcnMoc3RlcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hyb21hLnNjYWxlKGNvbG9ycykuY29sb3JzKHN0ZXBzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RlcHNMZWZ0ID0gY3JlYXRlU3RlcHMoaGV4U3RhcnQsIG51bUNvbG9yc0xlZnQpO1xuICB2YXIgc3RlcHNSaWdodCA9IGNyZWF0ZVN0ZXBzKGhleEVuZCwgbnVtQ29sb3JzUmlnaHQpO1xuICByZXR1cm4gKGV2ZW4gJiYgZGl2ZXJnaW5nID8gc3RlcHNMZWZ0LnNsaWNlKDAsIHN0ZXBzTGVmdC5sZW5ndGggLSAxKSA6IHN0ZXBzTGVmdCkuY29uY2F0KHN0ZXBzUmlnaHQuc2xpY2UoMSkpO1xufSIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBjb2xvclBhbGV0dGUgfSBmcm9tICcuL2NvbG9yX3BhbGV0dGUnO1xuXG52YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHZhciBfcmVmO1xuXG4gIHJldHVybiAoX3JlZiA9IFtdKS5jb25jYXQuYXBwbHkoX3JlZiwgX3RvQ29uc3VtYWJsZUFycmF5KGFycikpO1xufTtcblxudmFyIGV1aVBhbGV0dGUgPSBmdW5jdGlvbiBldWlQYWxldHRlKGNvbG9ycywgc3RlcHMpIHtcbiAgdmFyIGRpdmVyZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgY2F0ZWdvcmljYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHRydWU7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIHRyaW1zIHRoZSBmaXJzdCBjb2xvciBzbyB3aGl0ZS9ibGFjayBpcyBuZXZlciBhIGNvbG9yXG4gIGlmICghZGl2ZXJnZSAmJiBzdGVwcyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzICsgMSk7XG4gICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgIHJldHVybiBwYWxldHRlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzLCBkaXZlcmdlLCBjYXRlZ29yaWNhbCk7XG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb2xvckJsaW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICBfcmVmMiRyb3RhdGlvbnMgPSBfcmVmMi5yb3RhdGlvbnMsXG4gICAgICByb3RhdGlvbnMgPSBfcmVmMiRyb3RhdGlvbnMgPT09IHZvaWQgMCA/IDEgOiBfcmVmMiRyb3RhdGlvbnMsXG4gICAgICBfcmVmMiRvcmRlciA9IF9yZWYyLm9yZGVyLFxuICAgICAgb3JkZXIgPSBfcmVmMiRvcmRlciA9PT0gdm9pZCAwID8gJ2FwcGVuZCcgOiBfcmVmMiRvcmRlcixcbiAgICAgIF9yZWYyJGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ2xpZ2h0ZXInIDogX3JlZjIkZGlyZWN0aW9uLFxuICAgICAgX3JlZjIkc29ydEJ5ID0gX3JlZjIuc29ydEJ5LFxuICAgICAgc29ydEJ5ID0gX3JlZjIkc29ydEJ5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmMiRzb3J0QnksXG4gICAgICBfcmVmMiRzb3J0U2hpZnQgPSBfcmVmMi5zb3J0U2hpZnQsXG4gICAgICBzb3J0U2hpZnQgPSBfcmVmMiRzb3J0U2hpZnQgPT09IHZvaWQgMCA/ICctMTAwJyA6IF9yZWYyJHNvcnRTaGlmdDtcblxuICB2YXIgY29sb3JzID0gW107XG4gIHZhciBiYXNlID0gWycjNTRCMzk5JywgLy8gMCBncmVlblxuICAnIzYwOTJDMCcsIC8vIDEgYmx1ZVxuICAnI0QzNjA4NicsIC8vIDIgZGFyayBwaW5rXG4gICcjOTE3MEI4JywgLy8gMyBwdXJwbGVcbiAgJyNDQThFQUUnLCAvLyA0IGxpZ2h0IHBpbmtcbiAgJyNENkJGNTcnLCAvLyA1IHllbGxvd1xuICAnI0I5QTg4OCcsIC8vIDYgdGFuXG4gICcjREE4QjQ1JywgLy8gNyBvcmFuZ2VcbiAgJyNBQTY1NTYnLCAvLyA4IGJyb3duXG4gICcjRTc2NjRDJyAvLyA5IHJlZFxuICBdO1xuXG4gIGlmIChzb3J0QnkgPT09ICduYXR1cmFsJykge1xuICAgIC8vIFNvcnQgdGhlIGNvbG9ycyBiYXNlZCBvbiB0aGUgY29sb3Igd2hlZWwsIGJ1dCBzaGlmdGluZyB0aGUgdmFsdWVzIGJhc2VkIG9uIHNvcnRTaGlmdFxuICAgIGJhc2UgPSBfdG9Db25zdW1hYmxlQXJyYXkoYmFzZSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGNocm9tYShhKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXSAtIGNocm9tYShiKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyb3RhdGlvbnMgPiAxKSB7XG4gICAgdmFyIHBhbGV0dGVzID0gYmFzZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGRhcmtlc3QgYW5kIGxpZ2h0ZXN0IHZlcnNpb25zIG9mIGVhY2ggY29sb3IgdXNpbmcgYmxhY2sgYW5kIHdoaXRlXG4gICAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShbJ2JsYWNrJywgY29sb3IsICd3aGl0ZSddLCA1LCBmYWxzZSwgdHJ1ZSk7IC8vIFRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJlbWVzXG5cbiAgICAgIHBhbGV0dGUucG9wKCk7XG4gICAgICBwYWxldHRlLnNoaWZ0KCk7XG5cbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMl1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdkYXJrZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMF1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4gY29sb3JQYWxldHRlKHBhbGV0dGUsIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG9yZGVyID09PSAnZ3JvdXAnKSB7XG4gICAgICBjb2xvcnMgPSBmbGF0dGVuKHBhbGV0dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgX2NvbG9ycztcblxuICAgICAgICB2YXIgcm90YXRpb24gPSBwYWxldHRlcy5tYXAoZnVuY3Rpb24gKHBhbGV0dGUpIHtcbiAgICAgICAgICByZXR1cm4gcGFsZXR0ZVtpXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKF9jb2xvcnMgPSBjb2xvcnMpLnB1c2guYXBwbHkoX2NvbG9ycywgX3RvQ29uc3VtYWJsZUFycmF5KHJvdGF0aW9uKSk7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdGF0aW9uczsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb2xvcnMgPSBiYXNlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9ycztcbn07XG4vKipcbiAqIENvbG9yIGJsaW5kIHBhbGV0dGUgd2l0aCB0ZXh0IGlzIG1lYW50IGZvciB1c2Ugd2hlbiB0ZXh0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIEl0IGluY3JlYXNlcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgdG8gZ2l2ZSB0aGUgdGV4dCBtb3JlIGNvbnRyYXN0LlxuICovXG5cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCkge1xuICB2YXIgcGFsZXR0ZVByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIG9yaWdpbmFsUGFsZXR0ZSA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKHBhbGV0dGVQcm9wcyk7XG4gIHZhciBuZXdQYWxldHRlID0gb3JpZ2luYWxQYWxldHRlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbigwLjUpLmhleCgpO1xuICB9KTtcbiAgcmV0dXJuIG5ld1BhbGV0dGU7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzAwNkJCNCcsICcjMDE3RDczJywgJyNGNUE3MDAnLCAnI0JEMjcxRScsICcjREQwQTczJ107XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMxQkE5RjUnLCAnIzdERTJEMScsICcjRjk5MEMwJywgJyNGNjYnLCAnI0ZGQ0U3QSddO1xufTtcbnZhciBwb3NpdGl2ZUNvbG9yID0gJyMyMDkyODAnO1xudmFyIG5lZ2F0aXZlQ29sb3IgPSAnI0NDNTY0Mic7XG52YXIgbGlnaHROZWdhdGl2ZUNvbG9yID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XTtcbnZhciBjb29sQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgJyM2MDkyQzAnXTtcbnZhciB3YXJtQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XV07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JTdGF0dXMgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yU3RhdHVzKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbcG9zaXRpdmVDb2xvcl07XG4gIH1cblxuICBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtwb3NpdGl2ZUNvbG9yLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzVdLCBuZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW3Bvc2l0aXZlQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbMF0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIGxpZ2h0TmVnYXRpdmVDb2xvciwgbmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZShzdGVwcykge1xuICB2YXIgY29vbHMgPSBjb2xvclBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29sQXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkpLCBbJyNFQkVGRjUnXSksIDMpO1xuICB2YXIgd2FybXMgPSBjb2xvclBhbGV0dGUoWycjRjRGM0RCJ10uY29uY2F0KHdhcm1BcnJheSksIDMpO1xuXG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbHNbMF1dO1xuICB9IGVsc2UgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbY29vbHNbMF0sIGxpZ2h0TmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY29vbHMpLCBfdG9Db25zdW1hYmxlQXJyYXkod2FybXMpKSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbXBsaW1lbnRhcnkgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29tcGxpbWVudGFyeShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV1dO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbN11dLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlTmVnYXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlTmVnYXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIG5lZ2F0aXZlQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlUG9zaXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlUG9zaXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzBdXTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCBwb3NpdGl2ZUNvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvb2wgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29vbChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2Nvb2xBcnJheVsxXV07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJ10uY29uY2F0KGNvb2xBcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVXYXJtID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVdhcm0oc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWycjRkJGQkRDJ10uY29uY2F0KHdhcm1BcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmF5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyYXkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFsnIzk4YTJiMyddO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsICcjZDNkYWU2JywgJyM5OGEyYjMnLCAnIzY5NzA3ZCcsICcjMzQzNzQxJ10sIHN0ZXBzLCBmYWxzZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNWYWxpZEhleCB9IGZyb20gJy4vaXNfdmFsaWRfaGV4JztcblxudmFyIGluT3JpZ2luYWxGb3JtYXQgPSBmdW5jdGlvbiBpbk9yaWdpbmFsRm9ybWF0KG9yaWdpbmFsQ29sb3IsIG5ld0NvbG9yKSB7XG4gIHJldHVybiBpc1ZhbGlkSGV4KG9yaWdpbmFsQ29sb3IpID8gbmV3Q29sb3IuaGV4KCkgOiBuZXdDb2xvci5jc3MoKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgY29sb3IgbW9yZSB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbHBoYSAtIGFscGhhIGNoYW5uZWwgdmFsdWUuIEZyb20gMC0xLlxuICovXG5cblxuZXhwb3J0IHZhciB0cmFuc3BhcmVudGl6ZSA9IGZ1bmN0aW9uIHRyYW5zcGFyZW50aXplKGNvbG9yLCBhbHBoYSkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5hbHBoYShhbHBoYSkuY3NzKCk7XG59O1xuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggd2hpdGUuXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqL1xuXG5leHBvcnQgdmFyIHRpbnQgPSBmdW5jdGlvbiB0aW50KGNvbG9yLCByYXRpbykge1xuICB2YXIgdGludCA9IGNocm9tYS5taXgoY29sb3IsICcjZmZmJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHRpbnQpO1xufTtcbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIGJsYWNrLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggYmxhY2tcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgYmxhY2suXG4gKi9cblxuZXhwb3J0IHZhciBzaGFkZSA9IGZ1bmN0aW9uIHNoYWRlKGNvbG9yLCByYXRpbykge1xuICB2YXIgc2hhZGUgPSBjaHJvbWEubWl4KGNvbG9yLCAnIzAwMCcsIHJhdGlvLCAncmdiJyk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzaGFkZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB0aW50ZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHNoYWRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuXG5leHBvcnQgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IsIHJhdGlvLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIHJhdGlvKSA6IHRpbnQoY29sb3IsIHJhdGlvKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIHNoYWRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgdGludGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5cbmV4cG9ydCB2YXIgc2hhZGVPclRpbnQgPSBmdW5jdGlvbiBzaGFkZU9yVGludChjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGNvbG9yLCByYXRpbykgOiBzaGFkZShjb2xvciwgcmF0aW8pO1xufTtcbi8qKlxuICogSW5jcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBzYXR1cmF0ZSA9IGZ1bmN0aW9uIHNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIHNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCIrXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgc2F0dXJhdGUpO1xufTtcbi8qKlxuICogRGVjcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBkZXNhdHVyYXRlID0gZnVuY3Rpb24gZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gIHZhciBkZXNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCItXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgZGVzYXR1cmF0ZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWdodG5lc3MgdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvclxuICovXG5cbmV4cG9ydCB2YXIgbGlnaHRuZXNzID0gZnVuY3Rpb24gbGlnaHRuZXNzKGNvbG9yKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmdldCgnaHNsLmwnKSAqIDEwMDtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCBsaWdodG5lc3MgYXMgZ2V0TGlnaHRuZXNzIH0gZnJvbSAnLi9tYW5pcHVsYXRpb24nO1xuaW1wb3J0IHsgZ2V0T24gfSBmcm9tICcuLi90aGVtZS91dGlscyc7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgY29sb3IgdGhhdCBtZWV0cyBvciBleGNlZWRzIFdDQUcgbGV2ZWwgQUFcbiAqIEBwYXJhbSBmb3JlZ3JvdW5kIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIHJhdGlvIC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xMC5cbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFja2dyb3VuZCAtIENvbG9yIHRvIHVzZSBhcyB0aGUgY29udHJhc3QgYmFzaXMgb3IganVzdCBwYXNzIEV1aVRoZW1lXG4gKi9cblxuZXhwb3J0IHZhciBtYWtlSGlnaENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoX2ZvcmVncm91bmQpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0Ljg1O1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgdmFyIF9nZXRPbjtcblxuICAgIHZhciBmb3JlZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gKF9nZXRPbiA9IGdldE9uKHRoZW1lT3JCYWNrZ3JvdW5kLCBfZm9yZWdyb3VuZCkpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogX2ZvcmVncm91bmQgOiBfZm9yZWdyb3VuZDtcbiAgICB2YXIgYmFja2dyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYWNrZ3JvdW5kLmNvbG9ycy5ib2R5IDogdGhlbWVPckJhY2tncm91bmQ7XG5cbiAgICBpZiAoY2hyb21hKGZvcmVncm91bmQpLmFscGhhKCkgPCAxIHx8IGNocm9tYShiYWNrZ3JvdW5kKS5hbHBoYSgpIDwgMSkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ29udHJhc3QgY2Fubm90IGJlIGFjY3VyYXRlbHkgY2FsY3VsYXRlZCB3aGVuIGNvbG9ycyBoYXZlIGFscGhhIGNoYW5uZWwgb3BhY2l0eS4gTWFrZSBzdXJlIHRoZSBwcm92aWRlZCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBoYXZlIG5vIHRyYW5zcGFyZW5jeTpcXG5cXG5Gb3JlZ3JvdW5kOiBcIi5jb25jYXQoZm9yZWdyb3VuZCwgXCJcXG5CYWNrZ3JvdW5kOiBcIikuY29uY2F0KGJhY2tncm91bmQpKTtcbiAgICB9XG5cbiAgICB2YXIgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7IC8vIERldGVybWluZSB0aGUgbGlnaHRuZXNzIGZhY3RvciBvZiB0aGUgYmFja2dyb3VuZCBjb2xvciBmaXJzdCB0b1xuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRvIHNoYWRlIG9yIHRpbnQgdGhlIGZvcmVncm91bmQuXG5cbiAgICB2YXIgYnJpZ2h0bmVzcyA9IGdldExpZ2h0bmVzcyhiYWNrZ3JvdW5kKTtcbiAgICB2YXIgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gZm9yZWdyb3VuZDtcblxuICAgIHdoaWxlIChjb250cmFzdCA8IHJhdGlvKSB7XG4gICAgICBpZiAoYnJpZ2h0bmVzcyA+IDUwKSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHNoYWRlKGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSB0aW50KGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyYXN0ID0gY2hyb21hLmNvbnRyYXN0KGhpZ2hDb250cmFzdFRleHRDb2xvciwgYmFja2dyb3VuZCk7XG4gICAgICB2YXIgbGlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGhpZ2hDb250cmFzdFRleHRDb2xvcik7XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPCA1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGxpZ2h0IG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPiA5NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBkYXJrIG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNocm9tYShoaWdoQ29udHJhc3RUZXh0Q29sb3IpLmhleCgpO1xuICB9O1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB3aXRoIGluY3JlYXNlZCBjb250cmFzdFxuICogRGlzYWJsZWQgY29udGVudCBvbmx5IG5lZWRzIGEgY29udHJhc3Qgb2YgYXQgbGVhc3QgMiBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIGF2YWlsYWJsZVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpc1xuICovXG5cbmV4cG9ydCB2YXIgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoY29sb3IpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIG1ha2VIaWdoQ29udHJhc3RDb2xvcihjb2xvciwgcmF0aW8pKHRoZW1lT3JCYWNrZ3JvdW5kKTtcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0JztcblxuLypcbiAqIExJR0hUIFRIRU1FXG4gKiBPbmx5IHNwbGl0IHVwIGluIHRoZSBsaWdodCB0aGVtZSB0byBhY2Nlc3MgdGhlIGtleXMgYnkgc2VjdGlvbiBpbiB0aGUgZG9jc1xuICovXG5leHBvcnQgdmFyIGJyYW5kX2NvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMwN0MnLFxuICBhY2NlbnQ6ICcjRjA0RTk4JyxcbiAgc3VjY2VzczogJyMwMEJGQjMnLFxuICB3YXJuaW5nOiAnI0ZFQzUxNCcsXG4gIGRhbmdlcjogJyNCRDI3MUUnXG59O1xuZXhwb3J0IHZhciBicmFuZF90ZXh0X2NvbG9ycyA9IHtcbiAgcHJpbWFyeVRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnByaW1hcnknKSksXG4gIGFjY2VudFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmFjY2VudCcpKSxcbiAgc3VjY2Vzc1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnN1Y2Nlc3MnKSksXG4gIHdhcm5pbmdUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy53YXJuaW5nJykpLFxuICBkYW5nZXJUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYW5nZXInKSlcbn07XG5leHBvcnQgdmFyIHNoYWRlX2NvbG9ycyA9IHtcbiAgZW1wdHlTaGFkZTogJyNGRkYnLFxuICBsaWdodGVzdFNoYWRlOiAnI0YxRjRGQScsXG4gIGxpZ2h0U2hhZGU6ICcjRDNEQUU2JyxcbiAgbWVkaXVtU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya1NoYWRlOiAnIzY5NzA3RCcsXG4gIGRhcmtlc3RTaGFkZTogJyMzNDM3NDEnLFxuICBmdWxsU2hhZGU6ICcjMDAwJ1xufTtcbmV4cG9ydCB2YXIgc3BlY2lhbF9jb2xvcnMgPSB7XG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiB0aW50KGxpZ2h0ZXN0U2hhZGUsIDAuNCk7XG4gIH0sIFsnY29sb3JzLmxpZ2h0ZXN0U2hhZGUnXSksXG4gIGhpZ2hsaWdodDogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICB3YXJuaW5nID0gX3JlZjRbMF07XG5cbiAgICByZXR1cm4gdGludCh3YXJuaW5nLCAwLjkpO1xuICB9LCBbJ2NvbG9ycy53YXJuaW5nJ10pLFxuICBkaXNhYmxlZDogJyNBQkI0QzQnLFxuICBkaXNhYmxlZFRleHQ6IGNvbXB1dGVkKG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kaXNhYmxlZCcpKSxcbiAgc2hhZG93OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufTtcbmV4cG9ydCB2YXIgdGV4dF9jb2xvcnMgPSB7XG4gIHRleHQ6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBfcmVmNyA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAxKSxcbiAgICAgICAgZGFya2VzdFNoYWRlID0gX3JlZjdbMF07XG5cbiAgICByZXR1cm4gZGFya2VzdFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5kYXJrZXN0U2hhZGUnXSksXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmOCwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmOVswXTtcblxuICAgIHJldHVybiBzaGFkZSh0ZXh0LCAwLjUpO1xuICB9LCBbJ2NvbG9ycy50ZXh0J10pLFxuICBzdWJkdWVkVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuZGFya1NoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgdmFyIF9yZWYxMSA9IF9zbGljZWRUb0FycmF5KF9yZWYxMCwgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjExWzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufTtcbmV4cG9ydCB2YXIgbGlnaHRfY29sb3JzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBicmFuZF9jb2xvcnMpLCBzaGFkZV9jb2xvcnMpLCBzcGVjaWFsX2NvbG9ycyksIGJyYW5kX3RleHRfY29sb3JzKSwgdGV4dF9jb2xvcnMpO1xuLypcbiAqIERBUksgVEhFTUVcbiAqL1xuXG5leHBvcnQgdmFyIGRhcmtfc2hhZGVzID0ge1xuICBlbXB0eVNoYWRlOiAnIzFEMUUyNCcsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjMjUyNjJFJyxcbiAgbGlnaHRTaGFkZTogJyMzNDM3NDEnLFxuICBtZWRpdW1TaGFkZTogJyM1MzU5NjYnLFxuICBkYXJrU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya2VzdFNoYWRlOiAnI0Q0REFFNScsXG4gIGZ1bGxTaGFkZTogJyNGRkYnXG59O1xuZXhwb3J0IHZhciBkYXJrX2NvbG9yc19hbXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gIC8vIEJyYW5kXG4gIHByaW1hcnk6ICcjMzZBMkVGJyxcbiAgYWNjZW50OiAnI0Y2OEZCRScsXG4gIHN1Y2Nlc3M6ICcjN0RERUQ4JyxcbiAgd2FybmluZzogJyNGM0QzNzEnLFxuICBkYW5nZXI6ICcjRjg2QjYzJ1xufSwgZGFya19zaGFkZXMpLCB7fSwge1xuICAvLyBTcGVjaWFsXG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgX3JlZjEzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEyLCAxKSxcbiAgICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYxM1swXTtcblxuICAgIHJldHVybiBzaGFkZShsaWdodGVzdFNoYWRlLCAwLjQ1KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiAnIzJFMkQyNScsXG4gIGRpc2FibGVkOiAnIzUxNTc2MScsXG4gIGRpc2FibGVkVGV4dDogY29tcHV0ZWQobWFrZURpc2FibGVkQ29udHJhc3RDb2xvcignY29sb3JzLmRpc2FibGVkJykpLFxuICBzaGFkb3c6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTQpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjE0LmNvbG9ycztcbiAgICByZXR1cm4gY29sb3JzLmluaztcbiAgfSlcbn0sIGJyYW5kX3RleHRfY29sb3JzKSwge30sIHtcbiAgLy8gVGV4dFxuICB0ZXh0OiAnI0RGRTVFRicsXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE1KSB7XG4gICAgdmFyIF9yZWYxNiA9IF9zbGljZWRUb0FycmF5KF9yZWYxNSwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmMTZbMF07XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfSwgWydjb2xvcnMudGV4dCddKSxcbiAgc3ViZHVlZFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLm1lZGl1bVNoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE3KSB7XG4gICAgdmFyIF9yZWYxOCA9IF9zbGljZWRUb0FycmF5KF9yZWYxNywgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjE4WzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufSk7XG4vKlxuICogRlVMTFxuICovXG5cbmV4cG9ydCB2YXIgY29sb3JzID0ge1xuICBnaG9zdDogJyNGRkYnLFxuICBpbms6ICcjMDAwJyxcbiAgTElHSFQ6IGxpZ2h0X2NvbG9ycyxcbiAgREFSSzogZGFya19jb2xvcnNfYW1zXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFuaW1hdGlvbl9zcGVlZCA9IHtcbiAgZXh0cmFGYXN0OiAnOTBtcycsXG4gIGZhc3Q6ICcxNTBtcycsXG4gIG5vcm1hbDogJzI1MG1zJyxcbiAgc2xvdzogJzM1MG1zJyxcbiAgZXh0cmFTbG93OiAnNTAwbXMnXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb25fZWFzZSA9IHtcbiAgYm91bmNlOiAnY3ViaWMtYmV6aWVyKC4zNCwgMS42MSwgLjcsIDEpJyxcbiAgcmVzaXN0YW5jZTogJ2N1YmljLWJlemllciguNjk0LCAuMDQ4MiwgLjMzNSwgMSknXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvbl9zcGVlZCksIGFuaW1hdGlvbl9lYXNlKTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24nO1xuLyoqXG4gKiBFVUkgdXRpbGl6ZXMgbG9naWNhbCBDU1MgcHJvcGVydGllcyB0byBlbmFibGUgZGlyZWN0aW9uYWwgd3JpdGluZy1tb2Rlcy5cbiAqIFRvIGVuY291cmFnZSB1c2Ugb2YgbG9naWNhbCBwcm9wZXJ0aWVzLCB3ZSBwcm92aWRlIGEgZmV3IGhlbHBlciB1dGlsaXRpZXMgdG9cbiAqIGNvbnZlcnQgY2VydGFpbiBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIHRvIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfTG9naWNhbF9Qcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU2lkZSA9IHtcbiAgbGVmdDogJ2lubGluZS1zdGFydCcsXG4gIHJpZ2h0OiAnaW5saW5lLWVuZCcsXG4gIHRvcDogJ2Jsb2NrLXN0YXJ0JyxcbiAgYm90dG9tOiAnYmxvY2stZW5kJyxcbiAgaG9yaXpvbnRhbDogJ2lubGluZScsXG4gIHZlcnRpY2FsOiAnYmxvY2snXG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1NJREVTID0ga2V5c09mKGxvZ2ljYWxTaWRlKTtcbnZhciBsb2dpY2FsTWFyZ2lucyA9IHtcbiAgJ21hcmdpbi1sZWZ0JzogJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLXJpZ2h0JzogJ21hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ21hcmdpbi10b3AnOiAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nOiAnbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdtYXJnaW4taG9yaXpvbnRhbCc6ICdtYXJnaW4taW5saW5lJyxcbiAgJ21hcmdpbi12ZXJ0aWNhbCc6ICdtYXJnaW4tYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQYWRkaW5ncyA9IHtcbiAgJ3BhZGRpbmctbGVmdCc6ICdwYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctaW5saW5lLWVuZCcsXG4gICdwYWRkaW5nLXRvcCc6ICdwYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3BhZGRpbmctYm90dG9tJzogJ3BhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3BhZGRpbmctaG9yaXpvbnRhbCc6ICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLXZlcnRpY2FsJzogJ3BhZGRpbmctYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQb3NpdGlvbiA9IHtcbiAgdG9wOiAnaW5zZXQtYmxvY2stc3RhcnQnLFxuICByaWdodDogJ2luc2V0LWlubGluZS1lbmQnLFxuICBib3R0b206ICdpbnNldC1ibG9jay1lbmQnLFxuICBsZWZ0OiAnaW5zZXQtaW5saW5lLXN0YXJ0JyxcbiAgaG9yaXpvbnRhbDogJ2luc2V0LWJsb2NrJyxcbiAgdmVydGljYWw6ICdpbnNldC1pbmxpbmUnLFxuICBpbnNldDogJ2luc2V0J1xufTtcbnZhciBsb2dpY2FsU2l6ZSA9IHtcbiAgaGVpZ2h0OiAnYmxvY2stc2l6ZScsXG4gIHdpZHRoOiAnaW5saW5lLXNpemUnLFxuICAnbWF4LWhlaWdodCc6ICdtYXgtYmxvY2stc2l6ZScsXG4gICdtYXgtd2lkdGgnOiAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21pbi1oZWlnaHQnOiAnbWluLWJsb2NrLXNpemUnLFxuICAnbWluLXdpZHRoJzogJ21pbi1pbmxpbmUtc2l6ZSdcbn07XG52YXIgbG9naWNhbE92ZXJmbG93ID0ge1xuICAnb3ZlcmZsb3cteCc6ICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy15JzogJ292ZXJmbG93LWlubGluZSdcbn07XG52YXIgbG9naWNhbEJvcmRlcnMgPSB7XG4gICdib3JkZXItaG9yaXpvbnRhbCc6ICdib3JkZXItaW5saW5lJyxcbiAgJ2JvcmRlci1ob3Jpem9udGFsLWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtY29sb3InLFxuICAnYm9yZGVyLWhvcml6b250YWwtd2lkdGgnOiAnYm9yZGVyLWlubGluZS13aWR0aCcsXG4gICdib3JkZXItaG9yaXpvbnRhbC1zdHlsZSc6ICdib3JkZXItaW5saW5lLXN0eWxlJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbCc6ICdib3JkZXItYmxvY2snLFxuICAnYm9yZGVyLXZlcnRpY2FsLWNvbG9yJzogJ2JvcmRlci1ibG9jay1jb2xvcicsXG4gICdib3JkZXItdmVydGljYWwtd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXdpZHRoJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbC1zdHlsZSc6ICdib3JkZXItYmxvY2stc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbSc6ICdib3JkZXItYmxvY2stZW5kJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InOiAnYm9yZGVyLWJsb2NrLWVuZC1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJzogJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCc6ICdib3JkZXItYmxvY2stZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci10b3AnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0JyxcbiAgJ2JvcmRlci10b3AtY29sb3InOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yaWdodCc6ICdib3JkZXItaW5saW5lLWVuZCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InOiAnYm9yZGVyLWlubGluZS1lbmQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJzogJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCc6ICdib3JkZXItaW5saW5lLWVuZC13aWR0aCcsXG4gICdib3JkZXItbGVmdCc6ICdib3JkZXItaW5saW5lLXN0YXJ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnOiAnYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCc6ICdib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnOiAnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6ICdib3JkZXItc3RhcnQtZW5kLXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJzogJ2JvcmRlci1lbmQtc3RhcnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJzogJ2JvcmRlci1lbmQtZW5kLXJhZGl1cydcbn07XG5leHBvcnQgdmFyIGxvZ2ljYWxzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxNYXJnaW5zKSwgbG9naWNhbFBhZGRpbmdzKSwgbG9naWNhbFBvc2l0aW9uKSwgbG9naWNhbFNpemUpLCBsb2dpY2FsT3ZlcmZsb3cpLCBsb2dpY2FsQm9yZGVycyk7XG5leHBvcnQgdmFyIExPR0lDQUxfUFJPUEVSVElFUyA9IGtleXNPZihsb2dpY2Fscyk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTID0gZnVuY3Rpb24gbG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGxvZ2ljYWxzW3Byb3BlcnR5XSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGUocHJvcGVydHksIHZhbHVlKSB7XG4gIC8vIFN0cmlwIGh5cGhlbnMgYW5kIGNhbWVsQ2FzZSB0aGUgQ1NTIGxvZ2ljYWwgcHJvcGVydHkgc28gUmVhY3QgZG9lc24ndCB0aHJvdyBlcnJvcnNcbiAgdmFyIGNhbWVsQ2FzZWRQcm9wZXJ0eSA9IGxvZ2ljYWxzW3Byb3BlcnR5XS5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbiAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY2FtZWxDYXNlZFByb3BlcnR5LCBcIlwiLmNvbmNhdCh2YWx1ZSkpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNpemVDU1Mod2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxzLndpZHRoLCBcIjogXCIpLmNvbmNhdCh3aWR0aCwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbHMuaGVpZ2h0LCBcIjogXCIpLmNvbmNhdChoZWlnaHQsIFwiO1xcbiAgXCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZVN0eWxlKHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIHJldHVybiBfcmVmMiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3JlZjIsIGxvZ2ljYWxzLndpZHRoLCB3aWR0aCksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMiwgbG9naWNhbHMuaGVpZ2h0LCBoZWlnaHQpLCBfcmVmMjtcbn07IC8vIFRleHQgYWxpZ25tZW50IGlzIHNlcGFyYXRlIGJlY2F1c2UgaXRzIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZXMgbm90IHRoZSBwcm9wZXJ0eVxuXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0ID0ge1xuICAndGV4dC1hbGlnbic6IHtcbiAgICBsZWZ0OiAnc3RhcnQnLFxuICAgIGNlbnRlcjogJ2NlbnRlcicsXG4gICAgcmlnaHQ6ICdlbmQnXG4gIH1cbn07XG5leHBvcnQgdmFyIExPR0lDQUxfVEVYVF9BTElHTk1FTlQgPSBrZXlzT2YobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXSk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduQ1NTID0gZnVuY3Rpb24gbG9naWNhbFRleHRBbGlnbkNTUyh2YWx1ZSkge1xuICByZXR1cm4gXCJ0ZXh0LWFsaWduOiBcIi5jb25jYXQobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV0sIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduU3R5bGUodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0QWxpZ246IGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ11bdmFsdWVdXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYHB4YCB2YWx1ZSBiYXNlZCBvbiBhIHNjYWxlIG11bHRpcGxpZXJcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIG11bHRpcGxpZXJcbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFzZSAtIFRoZW1lIGJhc2UgdmFsdWVcbiAqICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIFJlbSB1bml0IGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuZXhwb3J0IHZhciBzaXplVG9QaXhlbCA9IGZ1bmN0aW9uIHNpemVUb1BpeGVsKCkge1xuICB2YXIgc2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDE7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhc2UpIHtcbiAgICB2YXIgYmFzZSA9IF90eXBlb2YodGhlbWVPckJhc2UpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYXNlLmJhc2UgOiB0aGVtZU9yQmFzZTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoYmFzZSAqIHNjYWxlLCBcInB4XCIpO1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBmb250LXNpemUgdmFsdWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxlIGtleVxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBmb250LXNpemUgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBfcmVmKSB7XG4gIHZhciBiYXNlID0gX3JlZi5iYXNlLFxuICAgICAgZm9udCA9IF9yZWYuZm9udDtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgX3JlZjIkbWVhc3VyZW1lbnQgPSBfcmVmMi5tZWFzdXJlbWVudCxcbiAgICAgIG1lYXN1cmVtZW50ID0gX3JlZjIkbWVhc3VyZW1lbnQgPT09IHZvaWQgMCA/ICdyZW0nIDogX3JlZjIkbWVhc3VyZW1lbnQsXG4gICAgICBjdXN0b21TY2FsZSA9IF9yZWYyLmN1c3RvbVNjYWxlO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChmb250LnNjYWxlW3NjYWxlXSwgXCJlbVwiKTtcbiAgfVxuXG4gIHZhciBudW1lcmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtzY2FsZV07XG4gIGlmIChjdXN0b21TY2FsZSkgbnVtZXJhdG9yICo9IGZvbnQuc2NhbGVbY3VzdG9tU2NhbGVdO1xuICB2YXIgZGVub21pbmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdO1xuICByZXR1cm4gbWVhc3VyZW1lbnQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChudW1lcmF0b3IsIFwicHhcIikgOiBcIlwiLmNvbmNhdCgobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lLWhlaWdodCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiB0aGUgYmFzZWxpbmVcbiAqIEVYOiBBIHByb3BlciBsaW5lLWhlaWdodCBmb3IgdGV4dCBpcyAxLjUgdGltZXMgdGhlIGZvbnQtc2l6ZS5cbiAqICAgICBJZiBvdXIgYmFzZSBmb250IHNpemUgKGV1aUZvbnRTaXplKSBpcyAxNiwgYW5kIG91ciBiYXNlbGluZSBpcyA0LiBUbyBlbnN1cmUgdGhlXG4gKiAgICAgdGV4dCBzdGF5cyBvbiB0aGUgYmFzZWxpbmUsIHdlIHBhc3MgYSBtdWx0aXBsaWVyIHRvIGNhbGN1bGF0ZSBhIGxpbmUtaGVpZ2h0LlxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBsaW5lLWhlaWdodCB2YWx1ZSBhbGlnbmVkIHRvIGJhc2VsaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIF9yZWYzKSB7XG4gIHZhciBiYXNlID0gX3JlZjMuYmFzZSxcbiAgICAgIGZvbnQgPSBfcmVmMy5mb250O1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBfcmVmNCRtZWFzdXJlbWVudCA9IF9yZWY0Lm1lYXN1cmVtZW50LFxuICAgICAgbWVhc3VyZW1lbnQgPSBfcmVmNCRtZWFzdXJlbWVudCA9PT0gdm9pZCAwID8gJ3JlbScgOiBfcmVmNCRtZWFzdXJlbWVudCxcbiAgICAgIGN1c3RvbVNjYWxlID0gX3JlZjQuY3VzdG9tU2NhbGU7XG5cbiAgdmFyIGJhc2VsaW5lID0gZm9udC5iYXNlbGluZSxcbiAgICAgIGxpbmVIZWlnaHRNdWx0aXBsaWVyID0gZm9udC5saW5lSGVpZ2h0TXVsdGlwbGllcjtcbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG5cbiAgdmFyIF9saW5lSGVpZ2h0TXVsdGlwbGllciA9IG51bWVyYXRvciA8PSBiYXNlID8gbGluZUhlaWdodE11bHRpcGxpZXIgOiBsaW5lSGVpZ2h0TXVsdGlwbGllciAqIDAuODMzO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBsaW5lLWhlaWdodCB2aWEgYGVtYCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhZ2FpbnN0IHRoZSBwaXhlbCBiYXNlbGluZSBncmlkO1xuICAgIC8vIHdlIHdpbGwgYXNzdW1lIHRoYXQgdHlwaWNhbGx5IGxhcmdlciBzY2FsZSBmb250LXNpemVzIHNob3VsZCBoYXZlIGEgc2hvcnRlciBsaW5lLWhlaWdodDtcbiAgICByZXR1cm4gX2xpbmVIZWlnaHRNdWx0aXBsaWVyLnRvRml4ZWQoNCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwaXhlbFZhbHVlID0gTWF0aC5mbG9vcihNYXRoLnJvdW5kKG51bWVyYXRvciAqIF9saW5lSGVpZ2h0TXVsdGlwbGllcikgLyBiYXNlbGluZSkgKiBiYXNlbGluZTtcbiAgcmV0dXJuIG1lYXN1cmVtZW50ID09PSAncHgnID8gXCJcIi5jb25jYXQocGl4ZWxWYWx1ZSwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChwaXhlbFZhbHVlIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBUZXh0IHdlaWdodCBzaGlmdGluZ1xuICpcbiAqIFdoZW4gY2hhbmdpbmcgdGhlIGZvbnQtd2VpZ2h0IGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LFxuICogdGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzaXppbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBib2xkZXN0XG4gKiB3ZWlnaHQgc28gaXQgZG9lc24ndCBzaGlmdCBzaWJsaW5nIGNvbnRlbnQuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0U2hpZnQgPSBmdW5jdGlvbiBldWlUZXh0U2hpZnQoKSB7XG4gIHZhciBmb250V2VpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYm9sZCc7XG4gIHZhciBhdHRyaWJ1dGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRhLXRleHQnO1xuICB2YXIgZXVpVGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFwiXFxuICAmOjphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBhdHRyKFwiLmNvbmNhdChhdHRyaWJ1dGUsIFwiKTtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHRbZm9udFdlaWdodF0sIFwiO1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJhc2UgPSAxNjtcbmV4cG9ydCB2YXIgc2l6ZSA9IHtcbiAgeHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICB4czogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpLFxuICBzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjUpKSxcbiAgbTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC43NSkpLFxuICBiYXNlOiBjb21wdXRlZChzaXplVG9QaXhlbCgpKSxcbiAgbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMS41KSksXG4gIHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyKSksXG4gIHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMi41KSksXG4gIHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDMpKSxcbiAgeHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDQpKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJvcmRlciA9IHtcbiAgY29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiBsaWdodFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5saWdodFNoYWRlJ10pLFxuICB3aWR0aDoge1xuICAgIHRoaW46ICcxcHgnLFxuICAgIHRoaWNrOiAnMnB4J1xuICB9LFxuICByYWRpdXM6IHtcbiAgICBtZWRpdW06IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMzc1KSksXG4gICAgc21hbGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMjUpKVxuICB9LFxuICB0aGluOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICAgIHdpZHRoID0gX3JlZjRbMF0sXG4gICAgICAgIGNvbG9yID0gX3JlZjRbMV07XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgdGhpY2s6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmNlswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmNlsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgZWRpdGFibGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmOFswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmOFsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgZG90dGVkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGxldmVscyA9IHtcbiAgdG9hc3Q6IDkwMDAsXG4gIG1vZGFsOiA4MDAwLFxuICBtYXNrOiA2MDAwLFxuICBuYXZpZ2F0aW9uOiA2MDAwLFxuICBtZW51OiAyMDAwLFxuICBoZWFkZXI6IDEwMDAsXG4gIGZseW91dDogMTAwMCxcbiAgbWFza0JlbG93SGVhZGVyOiAxMDAwLFxuICBjb250ZW50OiAwXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuLy8gVHlwb2dyYXBoaWMgc2NhbGUgLS0gbG9vc2VseSBiYXNlZCBvbiBNYWpvciBUaGlyZCAoMS4yNTApXG5leHBvcnQgdmFyIGZvbnRTY2FsZSA9IHtcbiAgeHh4czogMC41NjI1LFxuICB4eHM6IDAuNjg3NSxcbiAgeHM6IDAuNzUsXG4gIHM6IDAuODc1LFxuICBtOiAxLFxuICBsOiAxLjM3NSxcbiAgeGw6IDEuNjg3NSxcbiAgeHhsOiAyLjEyNVxufTsgLy8gRmFtaWxpZXMgJiBiYXNlIGZvbnQgc2V0dGluZ3NcblxuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgYmFzZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIGJhc2UgLyA0O1xuICB9LCBbJ2Jhc2UnXSksXG4gIGxpbmVIZWlnaHRNdWx0aXBsaWVyOiAxLjVcbn07XG5leHBvcnQgdmFyIGZvbnRXZWlnaHQgPSB7XG4gIGxpZ2h0OiAzMDAsXG4gIHJlZ3VsYXI6IDQwMCxcbiAgbWVkaXVtOiA1MDAsXG4gIHNlbWlCb2xkOiA2MDAsXG4gIGJvbGQ6IDcwMFxufTtcbmV4cG9ydCB2YXIgZm9udCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9udEJhc2UpLCB7fSwge1xuICBzY2FsZTogZm9udFNjYWxlLFxuICB3ZWlnaHQ6IGZvbnRXZWlnaHQsXG4gIGJvZHk6IHtcbiAgICBzY2FsZTogJ3MnLFxuICAgIHdlaWdodDogJ3JlZ3VsYXInXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgd2VpZ2h0OiAnYm9sZCdcbiAgfVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogTk9URTogVGhlc2Ugd2VyZSBxdWljayBjb252ZXJzaW9ucyBvZiB0aGVpciBTYXNzIGNvdW50ZXJwYXJ0cy5cbiAqICAgICAgIFRoZSBjb21tZW50ZWQgb3V0IGtleXMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZCBhcyBuZWNlc3NhcnkgeWV0LlxuICovXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IHNpemVUb1BpeGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUnO1xuZXhwb3J0IHZhciBmb2N1cyA9IHtcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSAvLyB0cmFuc3BhcmVuY3k6IHsgTElHSFQ6IDAuOSwgREFSSzogMC43IH0sXG4gIC8vIGJhY2tncm91bmRDb2xvcjogY29tcHV0ZWQoKHsgY29sb3JzLCBmb2N1cyB9KSA9PlxuICAvLyAgIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBmb2N1cyEudHJhbnNwYXJlbmN5KVxuICAvLyApLFxuICAvLyBPdXRsaW5lXG4gIC8vIG91dGxpbmU6IHtcbiAgLy8gICBvdXRsaW5lOiBjb21wdXRlZCgoeyBmb2N1cyB9KSA9PiBgJHtmb2N1cyEud2lkdGh9IHNvbGlkICR7Zm9jdXMhLmNvbG9yfWApLFxuICAvLyB9LFxuXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgYnVpbGRUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgYmFzZSwgc2l6ZSB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplJztcbmltcG9ydCB7IGJvcmRlciB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19ib3JkZXJzJztcbmltcG9ydCB7IGxldmVscyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMnO1xuaW1wb3J0IHsgZm9udCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL190eXBvZ3JhcGh5JztcbmltcG9ydCB7IGZvY3VzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3N0YXRlcyc7XG5leHBvcnQgdmFyIEFNU1RFUkRBTV9OQU1FX0tFWSA9ICdFVUlfVEhFTUVfQU1TVEVSREFNJztcbmV4cG9ydCB2YXIgZXVpVGhlbWVBbXN0ZXJkYW0gPSB7XG4gIGNvbG9yczogY29sb3JzLFxuICBiYXNlOiBiYXNlLFxuICBzaXplOiBzaXplLFxuICBib3JkZXI6IGJvcmRlcixcbiAgZm9udDogZm9udCxcbiAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gIGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsXG4gIGxldmVsczogbGV2ZWxzLFxuICBmb2N1czogZm9jdXNcbn07XG5leHBvcnQgdmFyIEV1aVRoZW1lQW1zdGVyZGFtID0gYnVpbGRUaGVtZShldWlUaGVtZUFtc3RlcmRhbSwgQU1TVEVSREFNX05BTUVfS0VZKTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciB1c2VFdWlUaGVtZSA9IGZ1bmN0aW9uIHVzZUV1aVRoZW1lKCkge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgbW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVRoZW1lOiB0aGVtZSxcbiAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSxcbiAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gIH07XG59O1xuLy8gUHJvdmlkZSB0aGUgY29tcG9uZW50IHByb3BzIGludGVyZmFjZSBhcyB0aGUgZ2VuZXJpYyB0byBhbGxvdyB0aGUgZG9jcyBwcm9wcyB0YWJsZSB0byBwb3B1bGF0ZS5cbi8vIGUuZy4sIGBjb25zdCBFdWlDb21wb25lbnQgPSB3aXRoRXVpVGhlbWU8RXVpQ29tcG9uZW50UHJvcHM+KF9FdWlDb21wb25lbnQpYFxuZXhwb3J0IHZhciB3aXRoRXVpVGhlbWUgPSBmdW5jdGlvbiB3aXRoRXVpVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoVGhlbWUnO1xuXG4gIHZhciBSZW5kZXIgPSBmdW5jdGlvbiBSZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZSxcbiAgICAgICAgY29sb3JNb2RlID0gX3VzZUV1aVRoZW1lLmNvbG9yTW9kZSxcbiAgICAgICAgbW9kaWZpY2F0aW9ucyA9IF91c2VFdWlUaGVtZS5tb2RpZmljYXRpb25zO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZToge1xuICAgICAgICBldWlUaGVtZTogZXVpVGhlbWUsXG4gICAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgICAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gICAgICB9LFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoRXVpVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihSZW5kZXIpO1xuICBXaXRoRXVpVGhlbWUuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuICByZXR1cm4gV2l0aEV1aVRoZW1lO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbnRleHQsIEV1aVRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgYnVpbGRUaGVtZSwgZ2V0Q29sb3JNb2RlLCBnZXRDb21wdXRlZCwgbWVyZ2VEZWVwIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfc3lzdGVtID0gX3JlZi50aGVtZSxcbiAgICAgIF9jb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICAgIF9tb2RpZmljYXRpb25zID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBwYXJlbnRTeXN0ZW0gPSB1c2VDb250ZXh0KEV1aVN5c3RlbUNvbnRleHQpO1xuICB2YXIgcGFyZW50TW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgcGFyZW50Q29sb3JNb2RlID0gdXNlQ29udGV4dChFdWlDb2xvck1vZGVDb250ZXh0KTtcbiAgdmFyIHBhcmVudFRoZW1lID0gdXNlQ29udGV4dChFdWlUaGVtZUNvbnRleHQpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShfc3lzdGVtIHx8IHBhcmVudFN5c3RlbSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHN5c3RlbSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRTeXN0ZW0gPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBwcmV2U3lzdGVtS2V5ID0gdXNlUmVmKHN5c3RlbS5rZXkpO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBtb2RpZmljYXRpb25zID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBwcmV2TW9kaWZpY2F0aW9ucyA9IHVzZVJlZihtb2RpZmljYXRpb25zKTtcblxuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpKSxcbiAgICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICAgIGNvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgICBzZXRDb2xvck1vZGUgPSBfdXNlU3RhdGU2WzFdO1xuXG4gIHZhciBwcmV2Q29sb3JNb2RlID0gdXNlUmVmKGNvbG9yTW9kZSk7XG4gIHZhciBpc1BhcmVudFRoZW1lID0gdXNlUmVmKHByZXZTeXN0ZW1LZXkuY3VycmVudCA9PT0gcGFyZW50U3lzdGVtLmtleSAmJiBjb2xvck1vZGUgPT09IHBhcmVudENvbG9yTW9kZSAmJiBpc0VxdWFsKHBhcmVudE1vZGlmaWNhdGlvbnMsIG1vZGlmaWNhdGlvbnMpKTtcblxuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKGlzUGFyZW50VGhlbWUuY3VycmVudCAmJiBPYmplY3Qua2V5cyhwYXJlbnRUaGVtZSkubGVuZ3RoID8gcGFyZW50VGhlbWUgOiBnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSksXG4gICAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgICB0aGVtZSA9IF91c2VTdGF0ZThbMF0sXG4gICAgICBzZXRUaGVtZSA9IF91c2VTdGF0ZThbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3U3lzdGVtID0gX3N5c3RlbSB8fCBwYXJlbnRTeXN0ZW07XG5cbiAgICBpZiAocHJldlN5c3RlbUtleS5jdXJyZW50ICE9PSBuZXdTeXN0ZW0ua2V5KSB7XG4gICAgICBzZXRTeXN0ZW0obmV3U3lzdGVtKTtcbiAgICAgIHByZXZTeXN0ZW1LZXkuY3VycmVudCA9IG5ld1N5c3RlbS5rZXk7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfc3lzdGVtLCBwYXJlbnRTeXN0ZW1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3TW9kaWZpY2F0aW9ucyA9IG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucyk7XG5cbiAgICBpZiAoIWlzRXF1YWwocHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCwgbmV3TW9kaWZpY2F0aW9ucykpIHtcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMobmV3TW9kaWZpY2F0aW9ucyk7XG4gICAgICBwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50ID0gbmV3TW9kaWZpY2F0aW9ucztcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19tb2RpZmljYXRpb25zLCBwYXJlbnRNb2RpZmljYXRpb25zXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld0NvbG9yTW9kZSA9IGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpO1xuXG4gICAgaWYgKCFpc0VxdWFsKG5ld0NvbG9yTW9kZSwgcHJldkNvbG9yTW9kZS5jdXJyZW50KSkge1xuICAgICAgc2V0Q29sb3JNb2RlKG5ld0NvbG9yTW9kZSk7XG4gICAgICBwcmV2Q29sb3JNb2RlLmN1cnJlbnQgPSBuZXdDb2xvck1vZGU7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzUGFyZW50VGhlbWUuY3VycmVudCkge1xuICAgICAgc2V0VGhlbWUoZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpO1xuICAgIH1cbiAgfSwgW2NvbG9yTW9kZSwgc3lzdGVtLCBtb2RpZmljYXRpb25zXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbG9yTW9kZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sb3JNb2RlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzeXN0ZW1cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlNb2RpZmljYXRpb25zQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBtb2RpZmljYXRpb25zXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIGNoaWxkcmVuKSkpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIHRocm90dGxlID0gZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcbiAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDUwO1xuICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRpbWUgKyB3YWl0IC0gRGF0ZS5ub3coKSA8IDApIHtcbiAgICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnQnO1xuLyoqXG4gKiBIb29rIHV0aWwgLyBzeW50YWN0aWNhbCBzdWdhciBmb3IgdXNlQ29udGV4dCgpXG4gKlxuICogVGhpcyBob29rIGlzIGluIGl0cyBvd24gc2VwYXJhdGUgZmlsZSB0byBtYWtlIG1vY2tpbmcgaXRcbiAqIGFzIGEgdGVzdGVudiBlYXN5IGZvciBKZXN0IHVuaXQgdGVzdHNcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUN1cnJlbnRFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKSB7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUNvbnRleHQoQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0KTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnRfaG9vayc7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IHdpbmRvdy5pbm5lcldpZHRoIGFuZCBhbiBhcnJheSBvZiBicmVha3BvaW50IGtleXMsXG4gKiB0aGlzIGhvb2sgc3RvcmVzIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIHdpbmRvdy5pbm5lcldpZHRoXG4gKiBmYWxscyB3aXRoaW4gYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50cy5cbiAqXG4gKiBAcGFyYW0ge19FdWlUaGVtZUJyZWFrcG9pbnRbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgRVVJIGJyZWFrcG9pbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVzcG9uc2l2ZSBTb21lIGNvbXBvbmVudHMgaGF2ZSB0aGUgb3B0aW9uIHRvIHR1cm4gb2ZmIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gKiAgIFNpbmNlIGhvb2tzIGNhbid0IGJlIGNhbGxlZCBjb25kaXRpb25hbGx5LCBpdCdzIGVhc2llciB0byBwYXNzIHRoZSBjb25kaXRpb24gaW50byB0aGUgaG9va1xuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lIGlzIGluY2x1ZGVkIGluIGBzaXplc2BcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgPSBmdW5jdGlvbiB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHNpemVzKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCAmJiBpc1Jlc3BvbnNpdmUgPyBzaXplcy5pbmNsdWRlcyhjdXJyZW50QnJlYWtwb2ludCkgOiBmYWxzZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBET00gbm9kZSwgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gKiBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpYCB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIERPTSBub2RlLlxuICovXG5leHBvcnQgdmFyIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmID0gZnVuY3Rpb24gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoZWxlbWVudFRhcmdldCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsZW1lbnRUYXJnZXQgOiBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50VGFyZ2V0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUgPSBlbGVtZW50VGFyZ2V0KCk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5leHBvcnQgdmFyIGFsd2F5cyA9IGZ1bmN0aW9uIGFsd2F5cyhfdmFsdWUpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IHZhciBuZXZlciA9IGZ1bmN0aW9uIG5ldmVyKF92YWx1ZSkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB2YXIgaXNOdWxsID0gZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn07XG5leHBvcnQgdmFyIGlzTmlsID0gZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNNb21lbnQgPSBmdW5jdGlvbiBpc01vbWVudCh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzTW9tZW50KHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzRGF0ZSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGVMaWtlID0gZnVuY3Rpb24gaXNEYXRlTGlrZSh2YWx1ZSkge1xuICByZXR1cm4gaXNNb21lbnQodmFsdWUpIHx8IGlzRGF0ZSh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IF9pc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC9pc0Z1bmN0aW9uJztcbmltcG9ydCBfaXNBcnJheSBmcm9tICdsb2Rhc2gvaXNBcnJheSc7XG5pbXBvcnQgX2lzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tICdsb2Rhc2gvaXNCb29sZWFuJztcbmltcG9ydCBfaXNOdW1iZXIgZnJvbSAnbG9kYXNoL2lzTnVtYmVyJztcbmltcG9ydCBfaXNOYU4gZnJvbSAnbG9kYXNoL2lzTmFOJztcbmltcG9ydCBfaXNPYmplY3QgZnJvbSAnbG9kYXNoL2lzT2JqZWN0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gX2lzQXJyYXkodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQm9vbGVhbiA9IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gX2lzQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOdW1iZXIodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOYU4gPSBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICByZXR1cm4gX2lzTmFOKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIF9pc09iamVjdCh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRCb29sZWFuID0gZnVuY3Rpb24gZm9ybWF0Qm9vbGVhbih2YWx1ZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfcmVmJHllcyA9IF9yZWYueWVzLFxuICAgICAgeWVzID0gX3JlZiR5ZXMgPT09IHZvaWQgMCA/ICdZZXMnIDogX3JlZiR5ZXMsXG4gICAgICBfcmVmJG5vID0gX3JlZi5ubyxcbiAgICAgIG5vID0gX3JlZiRubyA9PT0gdm9pZCAwID8gJ05vJyA6IF9yZWYkbm8sXG4gICAgICBfcmVmJG5pbCA9IF9yZWYubmlsLFxuICAgICAgbmlsID0gX3JlZiRuaWwgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRuaWw7XG5cbiAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgIHJldHVybiBuaWw7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPyB5ZXMgOiBubztcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwsIGlzRnVuY3Rpb24sIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxudmFyIGNhbGVuZGFyID0gZnVuY3Rpb24gY2FsZW5kYXIodmFsdWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgcmVmVGltZSA9IG9wdGlvbnMucmVmVGltZTtcbiAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuY2FsZW5kYXIocmVmVGltZSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgdmFyIGRhdGVGb3JtYXRBbGlhc2VzID0ge1xuICBkYXRlOiAnRCBNTU0gWVlZWScsXG4gIGxvbmdEYXRlOiAnREQgTU1NTSBZWVlZJyxcbiAgc2hvcnREYXRlOiAnRCBNTU0gWVknLFxuICBkYXRlVGltZTogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICBsb25nRGF0ZVRpbWU6ICdERCBNTU1NIFlZWVkgSEg6bW06c3MnLFxuICBzaG9ydERhdGVUaW1lOiAnRCBNTU0gWVkgSEg6bW0nLFxuICBkb2JTaG9ydDogJ0RvIE1NTSBZWScsXG4gIGRvYkxvbmc6ICdEbyBNTU1NIFlZWVknLFxuICBpc284NjAxOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyxcbiAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICBjYWxlbmRhckRhdGVUaW1lOiBmdW5jdGlvbiBjYWxlbmRhckRhdGVUaW1lKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIEg6bW1BJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIEg6bW1BJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBIOm1tQScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gSDptbUEnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSBbYXRdIEg6bW1BJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfSxcbiAgY2FsZW5kYXJEYXRlOiBmdW5jdGlvbiBjYWxlbmRhckRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheV0nLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvd10nLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5XScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVknXG4gICAgfSwgb3B0aW9ucykpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZ0FEYXRlRm9ybWF0KHgpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXRBbGlhc2VzLmhhc093blByb3BlcnR5KHgpO1xufVxuXG5mdW5jdGlvbiBpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyh4KSB7XG4gIHJldHVybiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiAoeC5oYXNPd25Qcm9wZXJ0eSgnZm9ybWF0JykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnbmlsJykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKTtcbn1cblxuZXhwb3J0IHZhciBmb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSkge1xuICB2YXIgZGF0ZUZvcm1hdEtleU9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnZGF0ZVRpbWUnO1xuXG4gIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBkYXRlRm9ybWF0U3RyT3JGdW5jID0gaXNTdHJpbmdBRGF0ZUZvcm1hdChkYXRlRm9ybWF0S2V5T3JDb25maWcpID8gZGF0ZUZvcm1hdEFsaWFzZXNbZGF0ZUZvcm1hdEtleU9yQ29uZmlnXSA6IGRhdGVGb3JtYXRLZXlPckNvbmZpZztcblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdFN0ck9yRnVuYyh2YWx1ZSwge30pO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0U3RyT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXRTdHJPckZ1bmMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgdmFyIF9kYXRlRm9ybWF0S2V5T3JDb25maSA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5mb3JtYXQsXG4gICAgICAgIGZvcm1hdCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maSA9PT0gdm9pZCAwID8gJ2RhdGVUaW1lJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maSxcbiAgICAgICAgX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5uaWwsXG4gICAgICAgIG5pbCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPT09IHZvaWQgMCA/ICcnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpMixcbiAgICAgICAgb3B0aW9ucyA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5vcHRpb25zO1xuICAgIHZhciBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG5cbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmlsO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZvcm1hdCB2YWx1ZSB1c2luZyBkYXRlRm9ybWF0S2V5T3JDb25maWc6IFwiLmNvbmNhdChkYXRlRm9ybWF0S2V5T3JDb25maWcpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbnVtZXJhbCBmcm9tICdudW1lcmFsJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG52YXIgbnVtYmVyRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGVjaW1hbDE6ICcwLDAuMCcsXG4gIGRlY2ltYWwyOiAnMCwwLjAwJyxcbiAgZGVjaW1hbDM6ICcwLDAuMDAwJyxcbiAgb3JkaW5hbDogJzBvJyxcbiAgaW50ZWdlcjogJzAsMCdcbn07XG5leHBvcnQgdmFyIGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICB2YXIgbnVtYmVyRm9ybWF0T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZm9ybWF0O1xuICB2YXIgbmlsID0gJyc7XG4gIHZhciByb3VuZDtcblxuICBpZiAoaXNTdHJpbmcobnVtYmVyRm9ybWF0T3JDb25maWcpKSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWc7XG4gIH0gZWxzZSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWcuZm9ybWF0O1xuICAgIG5pbCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLm5pbCB8fCAnJztcbiAgICByb3VuZCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLnJvdW5kO1xuICB9XG5cbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciByb3VuZGluZ0Z1bmMgPSByb3VuZCA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IG51bWVyYWwodmFsdWUpLmZvcm1hdChudW1iZXJGb3JtYXQsIHJvdW5kaW5nRnVuYyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRUZXh0ID0gZnVuY3Rpb24gZm9ybWF0VGV4dCh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIG5pbDogJydcbiAgfTtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG9wdGlvbnMubmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCwgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzTmFOLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZm9ybWF0Qm9vbGVhbiB9IGZyb20gJy4vZm9ybWF0X2Jvb2xlYW4nO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4vZm9ybWF0X2RhdGUnO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi9mb3JtYXRfbnVtYmVyJztcbmltcG9ydCB7IGZvcm1hdFRleHQgfSBmcm9tICcuL2Zvcm1hdF90ZXh0JztcbmV4cG9ydCB2YXIgZm9ybWF0QXV0byA9IGZ1bmN0aW9uIGZvcm1hdEF1dG8odmFsdWUpIHtcbiAgaWYgKGlzTmlsKHZhbHVlKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNCb29sZWFuKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8oaXRlbSk7XG4gICAgfSkuam9pbignLCAnKSA6IGZvcm1hdEF1dG8odmFsdWUpO1xuICB9IC8vIFRPRE8gbm90IHN1cmUgaWYgd2Ugd2FudCB0aGF0Li4gdGhlICgrKSBpcyB0aGF0IHdlIHNob3cgc29tZXRoaW5nLCB0aGUgKC0pIGlzIHRoYXQgaXQncyB2ZXJ5IHRlY2huaWNhbFxuXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG52YXIgaXNFbGFzdGljSG9zdCA9IC9eKFthLXpBLVowLTldK1xcLikqZWxhc3RpY1xcLmNvJC87IC8vIEluIG9yZGVyIGZvciB0aGUgZG9tYWluIHRvIGJlIHNlY3VyZSBpdCBuZWVkcyB0byBiZSBpbiBhIHBhcnNhYmxlIGZvcm1hdCxcbi8vIHdpdGggdGhlIHByb3RvY29sIG9mIGh0dHA6IG9yIGh0dHBzOiBhbmQgdGhlIGhvc3QgbWF0Y2hpbmcgZWxhc3RpYy5jbyBvclxuLy8gb2Ygb25lIGl0cyBzdWJkb21haW5zXG5cbmV4cG9ydCB2YXIgaXNEb21haW5TZWN1cmUgPSBmdW5jdGlvbiBpc0RvbWFpblNlY3VyZSgpIHtcbiAgdmFyIHVybCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG5cbiAgdHJ5IHtcbiAgICB2YXIgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHZhciBwcm90b2NvbE1hdGNoZXMgPSBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwOicgfHwgcGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICB2YXIgZG9tYWluTWF0Y2hlcyA9ICEhcGFyc2VkLmhvc3QubWF0Y2goaXNFbGFzdGljSG9zdCk7XG4gICAgcmV0dXJuIHByb3RvY29sTWF0Y2hlcyAmJiBkb21haW5NYXRjaGVzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFNlY3VyZXMgb3V0Ym91bmQgbGlua3MuIEZvciBtb3JlIGluZm86XG4gKiBodHRwczovL3d3dy5qaXRiaXQuY29tL2FsZXhibG9nLzI1Ni10YXJnZXRibGFuay0tLXRoZS1tb3N0LXVuZGVyZXN0aW1hdGVkLXZ1bG5lcmFiaWxpdHktZXZlci9cbiAqL1xuaW1wb3J0IHsgaXNEb21haW5TZWN1cmUgfSBmcm9tICcuLi91cmwnO1xuZXhwb3J0IHZhciBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgPSBmdW5jdGlvbiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoX3JlZikge1xuICB2YXIgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIF9yZWYkdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsO1xuICB2YXIgaXNFbGFzdGljSHJlZiA9ICEhaHJlZiAmJiBpc0RvbWFpblNlY3VyZShocmVmKTtcbiAgdmFyIHJlbFBhcnRzID0gISFyZWwgPyByZWwuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gISFwYXJ0Lmxlbmd0aCAmJiBwYXJ0ICE9PSAnbm9yZWZlcnJlcic7XG4gIH0pIDogW107XG5cbiAgaWYgKCFpc0VsYXN0aWNIcmVmKSB7XG4gICAgcmVsUGFydHMucHVzaCgnbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgaWYgKHRhcmdldC5pbmNsdWRlcygnX2JsYW5rJykgJiYgcmVsUGFydHMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub29wZW5lcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlbFBhcnRzLnNvcnQoKS5qb2luKCcgJykudHJpbSgpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQVNDID0gJ2FzYyc7XG52YXIgREVTQyA9ICdkZXNjJztcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBBU0M6IEFTQyxcbiAgREVTQzogREVTQyxcbiAgaXNBc2M6IGZ1bmN0aW9uIGlzQXNjKGRpcmVjdGlvbikge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IEFTQztcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0FzYyhkaXJlY3Rpb24pID8gREVTQyA6IEFTQztcbiAgfVxufSk7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb25UeXBlID0gUHJvcFR5cGVzLm9uZU9mKFtBU0MsIERFU0NdKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBfZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IF9vbWl0IGZyb20gJ2xvZGFzaC9vbWl0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gX2dldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG59O1xuZXhwb3J0IHZhciBvbWl0ID0gZnVuY3Rpb24gb21pdChvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBfb21pdChvYmplY3QsIHBhdGhzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi9zb3J0X2RpcmVjdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi9vYmplY3RzJztcbmV4cG9ydCB2YXIgQ29tcGFyYXRvcnMgPSBPYmplY3QuZnJlZXplKHtcbiAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogU29ydERpcmVjdGlvbi5BU0M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIC8vIEphdmFTY3JpcHQncyBjb21wYXJpc29uIG9mIG51bGwvdW5kZWZpbmVkIChhbmQgc29tZSBvdGhlcnMgbm90IGhhbmRsZWQgaGVyZSkgdmFsdWVzIGFsd2F5cyByZXR1cm5zIGBmYWxzZWBcbiAgICAgIC8vIChodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLyNzZWMtYWJzdHJhY3QtcmVsYXRpb25hbC1jb21wYXJpc29uKVxuICAgICAgLy8gcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHYxIDwgdjIgYW5kIHYxID4gdjIgYXJlIGJvdGggZmFsc2UuXG4gICAgICAvLyBUaGlzIGxlYWRzIHRvIHVucHJlZGljdGFibGUgc29ydGluZyByZXN1bHRzIGluIG11bHRpcGxlIEpTIGVuZ2luZSBzb3J0aW5nIGFsZ29yaXRobXNcbiAgICAgIC8vIHdoaWNoIGNhdXNlcyB1bnByZWRpY3RhYmxlIHVzZXIgZXhwZXJpZW5jZXMuXG4gICAgICAvLyBJbnN0ZWFkOlxuICAgICAgLy8gKiAxLiBwdXNoIHVuZGVmaW5lZC9udWxsIHZhbHVlcyB0byB0aGUgZW5kIG9mIHRoZSBzb3J0ZWQgbGlzdCwgX3JlZ2FyZGxlc3Mgb2Ygc29ydCBkaXJlY3Rpb25fXG4gICAgICAvLyAgICAobm9uLXNvcnRhYmxlIHZhbHVlcyBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQsIGFuZCBzb3J0YWJsZSB2YWx1ZXMgYXJlIHNvcnRlZCBhdCB0aGUgdG9wKVxuICAgICAgLy8gKiAyLiByZXBvcnQgdW5kZWZpbmVkL251bGwgdmFsdWVzIGFzIGVxdWFsXG4gICAgICAvLyAqIDMuIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGNvbXBhcmFibGUgdGhleSBhcmUgc29ydGVkIG5vcm1hbGx5XG4gICAgICB2YXIgdjFJc0NvbXBhcmFibGUgPSB2MSAhPSBudWxsO1xuICAgICAgdmFyIHYySXNDb21wYXJhYmxlID0gdjIgIT0gbnVsbDsgLy8gKiAxLlxuXG4gICAgICBpZiAodjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiB2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gLy8gKiAyLlxuXG5cbiAgICAgIGlmICghdjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyAqIDMuXG5cblxuICAgICAgaWYgKHYxID09PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHYxID4gdjIgPyAxIDogLTE7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5pc0FzYyhkaXJlY3Rpb24pID8gcmVzdWx0IDogLTEgKiByZXN1bHQ7XG4gICAgfTtcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHYyLCB2MSk7XG4gICAgfTtcbiAgfSxcbiAgdmFsdWU6IGZ1bmN0aW9uIChfdmFsdWUpIHtcbiAgICBmdW5jdGlvbiB2YWx1ZShfeCwgX3gyKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgdmFsdWUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfShmdW5jdGlvbiAodmFsdWVDYWxsYmFjaywgY29tcGFyYXRvcikge1xuICAgIGlmICghY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHRoaXMuZGVmYXVsdChTb3J0RGlyZWN0aW9uLkFTQyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHZhbHVlQ2FsbGJhY2sobzEpLCB2YWx1ZUNhbGxiYWNrKG8yKSk7XG4gICAgfTtcbiAgfSksXG4gIHByb3BlcnR5OiBmdW5jdGlvbiBwcm9wZXJ0eShwcm9wLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0KHZhbHVlLCBwcm9wKTtcbiAgICB9LCBjb21wYXJhdG9yKTtcbiAgfVxufSk7IiwgImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciByZWxhdGVkRGltZW5zaW9uID0ge1xuICB0b3A6ICdoZWlnaHQnLFxuICByaWdodDogJ3dpZHRoJyxcbiAgYm90dG9tOiAnaGVpZ2h0JyxcbiAgbGVmdDogJ3dpZHRoJ1xufTtcbnZhciBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZSA9IHtcbiAgaGVpZ2h0OiAndG9wJyxcbiAgd2lkdGg6ICdsZWZ0J1xufTtcbnZhciBwb3NpdGlvbkNvbXBsZW1lbnRzID0ge1xuICB0b3A6ICdib3R0b20nLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICBsZWZ0OiAncmlnaHQnXG59OyAvLyBhbHdheXMgcmVzb2x2aW5nIHRvIHRvcC9sZWZ0IGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSBrbm93aW5nIHRoZXkgYXJlIHRoZVxuLy8gbWluaW11bSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgYm94XG5cbnZhciBwb3NpdGlvblN1YnN0aXR1dGVzID0ge1xuICB0b3A6ICdsZWZ0JyxcbiAgcmlnaHQ6ICd0b3AnLFxuICBib3R0b206ICdsZWZ0JyxcbiAgbGVmdDogJ3RvcCdcbn07XG5cbnZhciBnZXRCdWZmZXJWYWx1ZXMgPSBmdW5jdGlvbiBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpIHtcbiAgICB2YXIgX2J1ZmZlciA9IF9zbGljZWRUb0FycmF5KGJ1ZmZlciwgNCksXG4gICAgICAgIHRvcEJ1ZmZlciA9IF9idWZmZXJbMF0sXG4gICAgICAgIHJpZ2h0QnVmZmVyID0gX2J1ZmZlclsxXSxcbiAgICAgICAgYm90dG9tQnVmZmVyID0gX2J1ZmZlclsyXSxcbiAgICAgICAgbGVmdEJ1ZmZlciA9IF9idWZmZXJbM107XG5cbiAgICByZXR1cm4gW3RvcEJ1ZmZlciwgcmlnaHRCdWZmZXIsIGJvdHRvbUJ1ZmZlciwgbGVmdEJ1ZmZlcl07XG4gIH1cblxuICByZXR1cm4gW2J1ZmZlciwgYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcl07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyAocmVsYXRpdmUgdG8gZG9jdW1lbnQuYm9keSkgdG8gcGxhY2UgYSBwb3BvdmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gYW5jaG9yIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0byBhbmNob3IgdGhlIHBvcG92ZXIgdG9cbiAqIEBwYXJhbSBwb3BvdmVyIHtIVE1MRWxlbWVudH0gRWxlbWVudCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSBQb3NpdGlvbiB0aGUgdXNlciB3YW50cy4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtmb3JjZVBvc2l0aW9uXSB7Ym9vbGVhbn0gSWYgdHJ1ZSwgdXNlIG9ubHkgdGhlIHByb3ZpZGVkIGBwb3NpdGlvbmAgdmFsdWUgYW5kIGRvbid0IHRyeSBhbnkgb3RoZXIgcG9zaXRpb25cbiAqIEBwYXJhbSBbYWxpZ25dIHtzdHJpbmd9IENyb3NzLWF4aXMgYWxpZ25tZW50LiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2J1ZmZlcj0xNl0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2FsbG93Q3Jvc3NBeGlzPXRydWVdIHtib29sZWFufSBXaGV0aGVyIHRvIGFsbG93IHRoZSBwb3BvdmVyIHRvIGJlIHBvc2l0aW9uZWQgb24gdGhlIGNyb3NzLWF4aXNcbiAqIEBwYXJhbSBbY29udGFpbmVyXSB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdGhlIHBvcG92ZXIgbXVzdCBiZSBjb25zdHJhaW5lZCB0byBmaXQgd2l0aGluXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmXG4gKiAgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICYgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGVcbiAqICBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW0gd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKlxuICogQHJldHVybnMge0ZpbmRQb3BvdmVyUG9zaXRpb25SZXN1bHR9IGFic29sdXRlIHBhZ2UgY29vcmRpbmF0ZXMgZm9yIHRoZVxuICogcG9wb3ZlciwgYW5kIHRoZSBwbGFjZW1lbnQncyByZWxhdGlvbiB0byB0aGUgYW5jaG9yIG9yIHVuZGVmaW5lZFxuICogdGhlcmUncyBubyByb29tLlxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3BvdmVyUG9zaXRpb24oX3JlZikge1xuICB2YXIgYW5jaG9yID0gX3JlZi5hbmNob3IsXG4gICAgICBwb3BvdmVyID0gX3JlZi5wb3BvdmVyLFxuICAgICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgZm9yY2VQb3NpdGlvbiA9IF9yZWYuZm9yY2VQb3NpdGlvbixcbiAgICAgIF9yZWYkYnVmZmVyID0gX3JlZi5idWZmZXIsXG4gICAgICBidWZmZXIgPSBfcmVmJGJ1ZmZlciA9PT0gdm9pZCAwID8gMTYgOiBfcmVmJGJ1ZmZlcixcbiAgICAgIF9yZWYkb2Zmc2V0ID0gX3JlZi5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfcmVmJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkb2Zmc2V0LFxuICAgICAgX3JlZiRhbGxvd0Nyb3NzQXhpcyA9IF9yZWYuYWxsb3dDcm9zc0F4aXMsXG4gICAgICBhbGxvd0Nyb3NzQXhpcyA9IF9yZWYkYWxsb3dDcm9zc0F4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGFsbG93Q3Jvc3NBeGlzLFxuICAgICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXIsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWYuYXJyb3dDb25maWcsXG4gICAgICByZXR1cm5Cb3VuZGluZ0JveCA9IF9yZWYucmV0dXJuQm91bmRpbmdCb3g7XG4gIC8vIGZpbmQgdGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZGluZyBib3hlcyBvZiB0aGUgYW5jaG9yLCBwb3BvdmVyLCBhbmQgY29udGFpbmVyXG4gIHZhciBhbmNob3JCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChhbmNob3IpO1xuICB2YXIgcG9wb3ZlckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KHBvcG92ZXIpOyAvLyBjYWxjdWxhdGUgdGhlIHdpbmRvdydzIGJvdW5kc1xuICAvLyB3aW5kb3cuKGlubmVyV2lkdGh8aW5uZXJIZWlnaHQpIGRvIG5vdCBhY2NvdW50IGZvciBzY3JvbGxiYXJzXG4gIC8vIHNvIHByZWZlciB0aGUgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IG9mIHRoZSBET00gaWYgYXZhaWxhYmxlXG5cbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gIHZhciBkb2N1bWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgd2luZG93Qm91bmRpbmdCb3ggPSB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiBkb2N1bWVudFdpZHRoLFxuICAgIGJvdHRvbTogZG9jdW1lbnRIZWlnaHQsXG4gICAgbGVmdDogMCxcbiAgICBoZWlnaHQ6IGRvY3VtZW50SGVpZ2h0LFxuICAgIHdpZHRoOiBkb2N1bWVudFdpZHRoXG4gIH07IC8vIGlmIG5vIGNvbnRhaW5lciBlbGVtZW50IGlzIGdpdmVuIGZhbGwgYmFjayB0byB1c2luZyB0aGUgd2luZG93IHZpZXdwb3J0XG5cbiAgdmFyIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gY29udGFpbmVyID8gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGNvbnRhaW5lcikgOiB3aW5kb3dCb3VuZGluZ0JveDtcbiAgLyoqXG4gICAqIGBwb3NpdGlvbmAgd2FzIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gY2FsbGVyIGFuZCBpcyBhIHN0cm9uZyBoaW50XG4gICAqIGFzIHRvIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvci5cbiAgICogSG93ZXZlciwgd2Ugc3Ryb25nbHkgcHJlZmVyIHNob3dpbmcgYWxsIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnQgd2l0aGluXG4gICAqIHRoZSB3aW5kb3crY29udGFpbmVyIGJvdW5kYXJ5IGFuZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgZm91clxuICAgKiBwb3NzaWJsZSBzaWRlcyB1bnRpbCBhIHBlcmZlY3QgZml0IGlzIGxvY2F0ZWQuIElmIG5vbmUgb2YgdGhlIGxvY2F0aW9uc1xuICAgKiBmdWxseSBjb250YWluIHBvcG92ZXIsIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBiZXN0IGZpdCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCBmaXJzdCBjaGVja3MgdGhlIHByZWZlcnJlZCBgcG9zaXRpb25gLCB0aGVuIGl0cyBvcHBvc2l0ZVxuICAgKiBhbG9uZyB0aGUgc2FtZSBheGlzLCBuZXh0IGEgbG9jYXRpb24gb24gdGhlIGNyb3NzLWF4aXMsIGFuZCBmaW5hbGx5IGl0XG4gICAqIHRlc3RzIHRoZSByZW1haW5pbmcgcG9zaXRpb24uXG4gICAqXG4gICAqIGUuZy5cbiAgICogaWYgcG9zaXRpb24gPSBcInRvcFwiIHRoZSBvcmRlciBpcyB0b3AsIGJvdHRvbSwgbGVmdCByaWdodFxuICAgKiBpZiBwb3NpdGlvbiA9IFwicmlnaHRcIiB0aGUgb3JkZXIgaXMgcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tXG4gICAqL1xuICAvLyBUcnkgdGhlIHVzZXItZGVzaXJlZCBwb3NpdGlvbiBmaXJzdC5cblxuICB2YXIgaXRlcmF0aW9uUG9zaXRpb25zID0gW3Bvc2l0aW9uXTsgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cbiAgdmFyIGl0ZXJhdGlvbkFsaWdubWVudHMgPSBbYWxpZ25dO1xuXG4gIGlmIChmb3JjZVBvc2l0aW9uICE9PSB0cnVlKSB7XG4gICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvbl0pOyAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2goYWxpZ24pOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpZiAoYWxsb3dDcm9zc0F4aXMpIHtcbiAgICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dLCAvLyBTd2l0Y2ggdG8gdGhlIGNyb3NzIGF4aXMuXG4gICAgICBwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dXSAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24gb24gdGhlIGNyb3NzIGF4aXMuXG4gICAgICApO1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50cy5wdXNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gZGlzY2FyZCBkZXNpcmVkIGFsaWdubWVudCBvbiBjcm9zcy1heGlzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBvc2l0aW9uIGlzIGZvcmNlZCwgaWYgaXQgY29uZmxpY3RzIHdpdGggdGhlIGFsaWdubWVudCB0aGVuIHJlc2V0IGFsaWduIHRvIGBudWxsYFxuICAgIC8vIGUuZy4gb3JpZ2luYWwgcGxhY2VtZW50IHJlcXVlc3QgZm9yIGBkb3duTGVmdGAgaXMgbW92ZWQgdG8gdGhlIGBsZWZ0YCBzaWRlLCBmdXR1cmUgY2FsbHNcbiAgICAvLyB3aWxsIHBvc2l0aW9uIGFuZCBhbGlnbiBgbGVmdGAsIGFuZCBgbGVmdExlZnRgIGlzIG5vdCBhIHZhbGlkIHBsYWNlbWVudFxuICAgIGlmIChwb3NpdGlvbiA9PT0gYWxpZ24gfHwgYWxpZ24gIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbiA9PT0gcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl0pIHtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHNbMF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJlc3RGaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBiZXN0UG9zaXRpb24gPSBudWxsO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGl0ZXJhdGlvblBvc2l0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGl0ZXJhdGlvblBvc2l0aW9uID0gaXRlcmF0aW9uUG9zaXRpb25zW2lkeF07IC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHBvc2l0aW9uIHdpdGggYSBiZXR0ZXIgZml0IHRoYW4gd2UndmUgZm91bmQgc28gZmFyLlxuXG4gICAgdmFyIHNjcmVlbkNvb3JkaW5hdGVzID0gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKHtcbiAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgIGFsaWduOiBpdGVyYXRpb25BbGlnbm1lbnRzW2lkeF0sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KTtcblxuICAgIGlmIChiZXN0Rml0ID09PSB1bmRlZmluZWQgfHwgc2NyZWVuQ29vcmRpbmF0ZXMuZml0ID4gYmVzdEZpdCkge1xuICAgICAgYmVzdEZpdCA9IHNjcmVlbkNvb3JkaW5hdGVzLmZpdDtcbiAgICAgIGJlc3RQb3NpdGlvbiA9IHtcbiAgICAgICAgZml0OiBzY3JlZW5Db29yZGluYXRlcy5maXQsXG4gICAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgICAgdG9wOiBzY3JlZW5Db29yZGluYXRlcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICAgIGxlZnQ6IHNjcmVlbkNvb3JkaW5hdGVzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGFycm93OiBzY3JlZW5Db29yZGluYXRlcy5hcnJvd1xuICAgICAgfTsgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgaWRlYWwgZml0LCB1c2UgdGhhdCBwb3NpdGlvbi5cblxuICAgICAgaWYgKGJlc3RGaXQgPT09IDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBoYXZlbid0IGltcHJvdmVkIHRoZSBmaXQsIHRoZW4gY29udGludWUgb24gYW5kIHRyeSBhIG5ldyBwb3NpdGlvbi5cblxuICB9XG5cbiAgaWYgKGJlc3RQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FsY3VsYXRlIGJlc3RQb3NpdGlvbicpO1xuICB9XG5cbiAgaWYgKHJldHVybkJvdW5kaW5nQm94KSB7XG4gICAgYmVzdFBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94ID0gYW5jaG9yQm91bmRpbmdCb3g7XG4gIH1cblxuICByZXR1cm4gYmVzdFBvc2l0aW9uO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgdGFyZ2V0IHBvc2l0aW9uIGFuZCB0aGUgcG9wb3ZlcidzIHN1cnJvdW5kaW5nIGNvbnRleHQsIHJldHVybnMgZWl0aGVyIGFuXG4gKiBvYmplY3Qgd2l0aCB7dG9wLCBsZWZ0fSBzY3JlZW4gY29vcmRpbmF0ZXMgb3IgYG51bGxgIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNob3dcbiAqIGNvbnRlbnQgaW4gdGhlIHRhcmdldCBwb3NpdGlvblxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IHRoZSB0YXJnZXQgcG9zaXRpb24sIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbGlnbiB7c3RyaW5nfSB0YXJnZXQgYWxpZ25tZW50IG9uIHRoZSBjcm9zcy1heGlzLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYW5jaG9yQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICogQHBhcmFtIHBvcG92ZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHBvcG92ZXIgZWxlbWVudFxuICogQHBhcmFtIHdpbmRvd0JvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgd2luZG93XG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWYgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICZcbiAqICBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW1cbiAqICB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYnVmZmVyPTBdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlcidzXG4gKiAgcGxhY2VtZW50IGFuZCB0aGUgY29udGFpbmVyIGVkZ2VcbiAqXG4gKiBAcmV0dXJucyB7R2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzUmVzdWx0fVxuICogIG9iamVjdCB3aXRoIHRvcC9sZWZ0IGNvb3JkaW5hdGVzLCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uIHRvIHRoZSBhbmNob3IsIGFuZCBob3cgd2VsbCB0aGVcbiAqICBwb3BvdmVyIGZpdHMgaW4gdGhlIGxvY2F0aW9uICgwLjAgLT4gMS4wKSBjb29yZGluYXRlcyBhbmQgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiwgaWZcbiAqICB0aGVyZSBpcyBubyByb29tIGluIHRoaXMgcGxhY2VtZW50IHRoZW4gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKF9yZWYyKSB7XG4gIHZhciBfcG9wb3ZlclBsYWNlbWVudCwgX3JlZjM7XG5cbiAgdmFyIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmMi5hbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWYyLnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjIud2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWYyLmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmMi5hcnJvd0NvbmZpZyxcbiAgICAgIF9yZWYyJG9mZnNldCA9IF9yZWYyLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYyJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJG9mZnNldCxcbiAgICAgIF9yZWYyJGJ1ZmZlciA9IF9yZWYyLmJ1ZmZlcixcbiAgICAgIGJ1ZmZlciA9IF9yZWYyJGJ1ZmZlciA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJGJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGdvYWwgaXMgdG8gZmluZCB0aGUgYmVzdCB3YXkgdG8gYWxpZ24gdGhlIHBvcG92ZXIgY29udGVudFxuICAgKiBvbiB0aGUgZ2l2ZW4gc2lkZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnQuIFRoZSBwb3BvdmVyIHByZWZlcnNcbiAgICogY2VudGVyaW5nIG9uIHRoZSBhbmNob3IgYnV0IGNhbiBzaGlmdCBhbG9uZyB0aGUgY3Jvc3MtYXhpcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdlIHJldHVybiB0aGUgdG9wL2xlZnQgY29vcmRpbmF0ZXMgdGhhdCBiZXN0IGZpdCB0aGUgcG9wb3ZlciBpbnNpZGVcbiAgICogdGhlIGdpdmVuIGJvdW5kYXJpZXMsIGFuZCBhbHNvIHJldHVybiB0aGUgYGZpdGAgdmFsdWUgd2hpY2ggaW5kaWNhdGVzXG4gICAqIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciBpcyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICpcbiAgICogZS5nLiBmaW5kaW5nIGEgbG9jYXRpb24gd2hlbiBwb3NpdGlvbj10b3BcbiAgICogdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBkaXJlY3RseSBvdmVyIHRoZSBhbmNob3JcbiAgICpcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKiBidXQgaWYgYW5jaG9yIGRvZXNuJ3QgaGF2ZSBtdWNoIChvciBhbnkpIHJvb20gb24gaXRzIHJpZGUgc2lkZVxuICAgKiB0aGUgcG9wb3ZlciB3aWxsIHNoaWZ0IHRvIHRoZSBsZWZ0XG4gICAqXG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICovXG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImxlZnRcIlxuXG4gIHZhciBjcm9zc0F4aXNTZWNvbmRTaWRlID0gcG9zaXRpb25Db21wbGVtZW50c1tjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcInJpZ2h0XCJcblxuICB2YXIgY3Jvc3NBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcIndpZHRoXCJcblxuICB2YXIgX2dldEJ1ZmZlclZhbHVlcyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzNdO1xuXG4gIHZhciBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24gPSBnZXRDcm9zc0F4aXNQb3NpdGlvbih7XG4gICAgY3Jvc3NBeGlzRmlyc3RTaWRlOiBjcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgY3Jvc3NBeGlzU2Vjb25kU2lkZTogY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICBjcm9zc0F4aXNEaW1lbnNpb246IGNyb3NzQXhpc0RpbWVuc2lvbixcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICBjb250YWluZXJCb3VuZGluZ0JveDogY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkgPSBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIHByaW1hcnlBeGlzUG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgdmFyIHBvcG92ZXJQbGFjZW1lbnQgPSAoX3BvcG92ZXJQbGFjZW1lbnQgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc1Bvc2l0aW9uKSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNQb3NpdGlvbiksIF9wb3BvdmVyUGxhY2VtZW50KTsgLy8gY2FsY3VsYXRlIHRoZSBmaXQgb2YgdGhlIHBvcG92ZXIgaW4gdGhpcyBsb2NhdGlvblxuICAvLyBmaXQgaXMgaW4gcmFuZ2UgMC4wIC0+IDEuMCBhbmQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGlzIGxvY2F0aW9uXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7IC8vIHNocmluayB0aGUgdmlzaWJsZSBib3VuZGluZyBib3ggYnkgYGJ1ZmZlcmBcbiAgLy8gdG8gY29tcHV0ZSBhIGZpdCB2YWx1ZVxuXG4gIGNvbWJpbmVkQm91bmRpbmdCb3gudG9wICs9IHRvcEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5yaWdodCAtPSByaWdodEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5ib3R0b20gLT0gYm90dG9tQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmxlZnQgKz0gbGVmdEJ1ZmZlcjtcbiAgdmFyIGZpdCA9IGdldFZpc2libGVGaXQoe1xuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgcmlnaHQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCArIHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBib3R0b206IHBvcG92ZXJQbGFjZW1lbnQudG9wICsgcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgd2lkdGg6IHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHRcbiAgfSwgY29tYmluZWRCb3VuZGluZ0JveCk7XG4gIHZhciBhcnJvdyA9IGFycm93Q29uZmlnID8gKF9yZWYzID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgY3Jvc3NBeGlzRmlyc3RTaWRlLCBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gcG9wb3ZlclBsYWNlbWVudFtjcm9zc0F4aXNGaXJzdFNpZGVdKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uKSwgX3JlZjMpIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGZpdDogZml0LFxuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIGFycm93OiBhcnJvdyA/IHtcbiAgICAgIGxlZnQ6IGFycm93LmxlZnQsXG4gICAgICB0b3A6IGFycm93LnRvcFxuICAgIH0gOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3Jvc3NBeGlzUG9zaXRpb24oX3JlZjQpIHtcbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IF9yZWY0LmNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICAgIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgICAgY3Jvc3NBeGlzRGltZW5zaW9uID0gX3JlZjQuY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmNC5wb3NpdGlvbixcbiAgICAgIGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICBidWZmZXIgPSBfcmVmNC5idWZmZXIsXG4gICAgICBvZmZzZXQgPSBfcmVmNC5vZmZzZXQsXG4gICAgICB3aW5kb3dCb3VuZGluZ0JveCA9IF9yZWY0LndpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmNC5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY0LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjQuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWY0LmFycm93Q29uZmlnO1xuICAvLyBob3cgbXVjaCBvZiB0aGUgcG9wb3ZlciBvdmVyZmxvd3MgcGFzdCBlaXRoZXIgc2lkZSBvZiB0aGUgYW5jaG9yIGlmIGl0cyBjZW50ZXJlZFxuICB2YXIgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvckhhbGZTaXplID0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzIC8gMjsgLy8gdGhlIHBvcG92ZXIncyBvcmlnaW5hbCBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcyBpcyBkZXRlcm1pbmVkIGJ5OlxuXG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIC8vIHdoZXJlIHRoZSBhbmNob3IgaXMgbG9jYXRlZFxuICBhbmNob3JIYWxmU2l6ZSAtIC8vIHBsdXMgaGFsZiBhbmNob3IgZGltZW5zaW9uXG4gIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyBsZXNzIGhhbGYgdGhlIHBvcG92ZXIgZGltZW5zaW9uXG4gIC8vIFRvIGZpdCB0aGUgY29udGVudCB3aXRoaW4gYm90aCB0aGUgd2luZG93IGFuZCBjb250YWluZXIsXG4gIC8vIGNvbXB1dGUgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBzcGFjZXMgYWxvbmcgZWFjaCBlZGdlXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIHZhciBhdmFpbGFibGVTcGFjZSA9IGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb21iaW5lZEJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgcG9zaXRpb24pO1xuICB2YXIgbWluaW11bVNwYWNlID0gYXJyb3dDb25maWcgPyBhcnJvd0NvbmZpZy5hcnJvd0J1ZmZlciA6IDA7XG4gIHZhciBjb250ZW50T3ZlcmZsb3dTaXplID0gKHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLSBhbmNob3JTaXplT25Dcm9zc0F4aXMpIC8gMjtcbiAgdmFyIGFsaWduQW1vdW50ID0gMDtcbiAgdmFyIGFsaWduRGlyZWN0aW9uID0gMTtcbiAgdmFyIGFtb3VudE9mU2hpZnROZWVkZWQgPSAwO1xuICB2YXIgc2hpZnREaXJlY3Rpb24gPSAxO1xuXG4gIGlmIChhbGlnbiAhPSBudWxsKSB7XG4gICAgLy8gbm8gYWxpZ25tZW50LCBmaW5kIGhvdyBtdWNoIHRoZSBjb250YWluZXIgYm91bmRhcnkgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdG8gc2hpZnRcbiAgICBhbGlnbkRpcmVjdGlvbiA9IGFsaWduID09PSAndG9wJyB8fCBhbGlnbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGFsaWduQW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZTtcbiAgICB2YXIgYWxpZ25lZE92ZXJmbG93QW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZSArIGFsaWduQW1vdW50O1xuICAgIHZhciBuZWVkc1NoaWZ0ID0gYWxpZ25lZE92ZXJmbG93QW1vdW50ID4gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dO1xuICAgIGFtb3VudE9mU2hpZnROZWVkZWQgPSBuZWVkc1NoaWZ0ID8gYWxpZ25lZE92ZXJmbG93QW1vdW50IC0gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dIDogMDtcbiAgICBzaGlmdERpcmVjdGlvbiA9IC0xICogYWxpZ25EaXJlY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gc2hpZnRpbmcgdGhlIHBvcG92ZXIgdG8gb25lIHNpZGUgbWF5IHlpZWxkIGEgYmV0dGVyIGZpdFxuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzRmlyc3RTaWRlXTtcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNTZWNvbmRTaWRlXTtcbiAgICB2YXIgaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA9IHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPiBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZTtcbiAgICBzaGlmdERpcmVjdGlvbiA9IGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPyAtMSA6IDE7IC8vIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gaGFzIG1vcmUgcm9vbSBhbmQgdGhlIHBvcG92ZXIgc2hvdWxkIHNoaWZ0IHRvXG5cbiAgICB2YXIgbGVhc3RBdmFpbGFibGVTcGFjZSA9IE1hdGgubWluKHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUsIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlKTtcblxuICAgIHZhciBfbmVlZHNTaGlmdCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgPiBsZWFzdEF2YWlsYWJsZVNwYWNlO1xuXG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IF9uZWVkc1NoaWZ0ID8gY29udGVudE92ZXJmbG93U2l6ZSAtIGxlYXN0QXZhaWxhYmxlU3BhY2UgOiAwO1xuICB9IC8vIHNoaWZ0IG92ZXIgdGhlIHBvcG92ZXIgaWYgbmVjZXNzYXJ5XG5cblxuICB2YXIgc2hpZnRBbW91bnQgPSBhbW91bnRPZlNoaWZ0TmVlZGVkICogc2hpZnREaXJlY3Rpb247XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbiA9IGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgKyBzaGlmdEFtb3VudCArIGFsaWduQW1vdW50ICogYWxpZ25EaXJlY3Rpb247IC8vIGlmIGFuIGBhcnJvd0NvbmZpZ2AgaXMgc3BlY2lmaWVkLCBmaW5kIHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBhcnJvd1xuXG4gIHZhciBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIGlmIChhcnJvd0NvbmZpZykge1xuICAgIHZhciBhcnJvd1dpZHRoID0gYXJyb3dDb25maWcuYXJyb3dXaWR0aDtcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIGFuY2hvckhhbGZTaXplIC0gYXJyb3dXaWR0aCAvIDI7IC8vIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBidWZmZXIgYXJvdW5kIHRoZSBhcnJvd1xuICAgIC8vIGJ5IGNhbGN1bGF0aW5nIGhvdyBob3cgbXVjaCB0aGUgYXJyb3cgd291bGQgbmVlZCB0byBtb3ZlXG4gICAgLy8gYnV0IGluc3RlYWQgb2YgbW92aW5nIHRoZSBhcnJvdywgc2hpZnQgdGhlIHBvcG92ZXIgY29udGVudFxuXG4gICAgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPCBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSkge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtaW5pbXVtIHNpZGVcbiAgICAgIHZhciBkaWZmZXJlbmNlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgLSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gLT0gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgKyBhcnJvd1dpZHRoID4gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gc2lkZVxuICAgICAgdmFyIGVkZ2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXM7XG5cbiAgICAgIHZhciBfZGlmZmVyZW5jZSA9IGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSAoZWRnZSAtIG1pbmltdW1TcGFjZSAtIGFycm93V2lkdGgpO1xuXG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiArPSBfZGlmZmVyZW5jZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyb3NzQXhpc1Bvc2l0aW9uOiBjcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uOiBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByaW1hcnlBeGlzUG9zaXRpb24oX3JlZjUpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZjUucG9zaXRpb24sXG4gICAgICBvZmZzZXQgPSBfcmVmNS5vZmZzZXQsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNS5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWY1LmFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmNS5hcnJvd0NvbmZpZztcbiAgLy8gaWYgcG9zaXRpb25pbmcgdG8gdGhlIHRvcCBvciBsZWZ0LCB0aGUgdGFyZ2V0IHBvc2l0aW9uIGRlY3JlYXNlc1xuICAvLyBmcm9tIHRoZSBhbmNob3IncyB0b3Agb3IgbGVmdCwgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbiBhZGRzIHRvIHRoZSBhbmNob3Inc1xuICB2YXIgaXNPZmZzZXREZWNyZWFzaW5nID0gcG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnbGVmdCc7XG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcG9wb3ZlclNpemVPblByaW1hcnlBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gc3RhcnQgYXQgdGhlIHRvcCBvciBsZWZ0IGVkZ2Ugb2YgdGhlIGFuY2hvciBlbGVtZW50XG5cbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcblxuICB2YXIgYW5jaG9yRWRnZU9yaWdpbiA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzUG9zaXRpb25OYW1lXTsgLy8gZmluZCB0aGUgcG9wb3ZlciBwb3NpdGlvbiBvbiB0aGUgcHJpbWFyeSBheGlzXG5cbiAgdmFyIGFuY2hvclNpemVPblByaW1hcnlBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dO1xuICB2YXIgcHJpbWFyeUF4aXNPZmZzZXQgPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiBhbmNob3JTaXplT25QcmltYXJ5QXhpcztcbiAgdmFyIGNvbnRlbnRPZmZzZXQgPSAob2Zmc2V0ICsgcHJpbWFyeUF4aXNPZmZzZXQpICogKGlzT2Zmc2V0RGVjcmVhc2luZyA/IC0xIDogMSk7XG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uID0gYW5jaG9yRWRnZU9yaWdpbiArIGNvbnRlbnRPZmZzZXQ7XG4gIHZhciBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbjogcHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb246IHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuLyoqXG4gKiBGaW5kcyB0aGUgY2xpZW50IHBpeGVsIGNvb3JkaW5hdGUgb2YgZWFjaCBlZGdlIGZvciB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGJveCxcbiAqIGFuZCB0aGUgYm91bmRpbmcgYm94J3Mgd2lkdGggJiBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcn19XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdC50b3AsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgY29udGVudCBzcGFjZSBiZXR3ZWVuIGFuY2hvciBhbmQgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuY2hvckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXIgTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZzZXRTaWRlIFNpZGUgdGhlIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvLCBvbmVcbiAqICBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShhbmNob3JCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXRTaWRlKSB7XG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzMyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczQgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzMywgNCksXG4gICAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFswXSxcbiAgICAgIHJpZ2h0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMV0sXG4gICAgICBib3R0b21CdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsyXSxcbiAgICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFszXTtcblxuICByZXR1cm4ge1xuICAgIHRvcDogYW5jaG9yQm91bmRpbmdCb3gudG9wIC0gY29udGFpbmVyQm91bmRpbmdCb3gudG9wIC0gdG9wQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICd0b3AnID8gb2Zmc2V0IDogMCksXG4gICAgcmlnaHQ6IGNvbnRhaW5lckJvdW5kaW5nQm94LnJpZ2h0IC0gYW5jaG9yQm91bmRpbmdCb3gucmlnaHQgLSByaWdodEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAncmlnaHQnID8gb2Zmc2V0IDogMCksXG4gICAgYm90dG9tOiBjb250YWluZXJCb3VuZGluZ0JveC5ib3R0b20gLSBhbmNob3JCb3VuZGluZ0JveC5ib3R0b20gLSBib3R0b21CdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2JvdHRvbScgPyBvZmZzZXQgOiAwKSxcbiAgICBsZWZ0OiBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IC0gY29udGFpbmVyQm91bmRpbmdCb3gubGVmdCAtIGxlZnRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2xlZnQnID8gb2Zmc2V0IDogMClcbiAgfTtcbn1cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGZpdCAob3ZlcmxhcCkgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBjb250YWluZXIsIGZpdCBpcyBpbiByYW5nZSAwLjAgPT4gMS4wXG4gKiBAcGFyYW0gY29udGVudEJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250ZW50IHRvIGNhbGN1bGF0ZSBmaXQgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRhaW5lclxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZUZpdChjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KSB7XG4gIHZhciBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24ubGVmdCA+IGludGVyc2VjdGlvbi5yaWdodCB8fCBpbnRlcnNlY3Rpb24udG9wID4gaW50ZXJzZWN0aW9uLnRvcCkge1xuICAgIC8vIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiwgdGhlIGJveGVzIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBvbiBhdCBsZWFzdCBvbmUgYXhpc1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSAoaW50ZXJzZWN0aW9uLnJpZ2h0IC0gaW50ZXJzZWN0aW9uLmxlZnQpICogKGludGVyc2VjdGlvbi5ib3R0b20gLSBpbnRlcnNlY3Rpb24udG9wKTtcbiAgdmFyIGNvbnRlbnRBcmVhID0gKGNvbnRlbnRCb3VuZGluZ0JveC5yaWdodCAtIGNvbnRlbnRCb3VuZGluZ0JveC5sZWZ0KSAqIChjb250ZW50Qm91bmRpbmdCb3guYm90dG9tIC0gY29udGVudEJvdW5kaW5nQm94LnRvcCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gY29udGVudEFyZWE7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBzcGFjZSBiZXR3ZWVuIHR3byBib3VuZGluZyBib3hlc1xuICpcbiAqIEBwYXJhbSBmaXJzdEJveFxuICogQHBhcmFtIHNlY29uZEJveFxuICogQHJldHVybnMge0V1aUNsaWVudFJlY3R9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEJvdW5kaW5nQm94ZXMoZmlyc3RCb3gsIHNlY29uZEJveCkge1xuICB2YXIgdG9wID0gTWF0aC5tYXgoZmlyc3RCb3gudG9wLCBzZWNvbmRCb3gudG9wKTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4oZmlyc3RCb3gucmlnaHQsIHNlY29uZEJveC5yaWdodCk7XG4gIHZhciBib3R0b20gPSBNYXRoLm1pbihmaXJzdEJveC5ib3R0b20sIHNlY29uZEJveC5ib3R0b20pO1xuICB2YXIgbGVmdCA9IE1hdGgubWF4KGZpcnN0Qm94LmxlZnQsIHNlY29uZEJveC5sZWZ0KTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHJpZ2h0IC0gbGVmdCwgMCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgd2lkdGg6IHdpZHRoXG4gIH07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHRvcC1tb3N0IGRlZmluZWQgei1pbmRleCBpbiB0aGUgZWxlbWVudCdzIGFuY2VzdG9yIGhpZXJhcmNoeVxuICogcmVsYXRpdmUgdG8gdGhlIGB0YXJnZXRgIGVsZW1lbnQ7IGlmIG5vIHotaW5kZXggaXMgZGVmaW5lZCwgcmV0dXJucyAwXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcGFyYW0gY291c2luIHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudCwgY291c2luKSB7XG4gIC8qKlxuICAgKiBmaW5kaW5nIHRoZSB6LWluZGV4IG9mIGBlbGVtZW50YCBpcyBub3QgdGhlIGZ1bGwgc3RvcnlcbiAgICogaXRzIHRoZSBDU1Mgc3RhY2tpbmcgY29udGV4dCB0aGF0IGlzIGltcG9ydGFudFxuICAgKiB0YWtlIHRoaXMgRE9NIGZvciBleGFtcGxlOlxuICAgKiBib2R5XG4gICAqICAgc2VjdGlvblt6LWluZGV4OiAxMDAwXVxuICAgKiAgICAgcFt6LWluZGV4OiA1MDBdXG4gICAqICAgICAgIGJ1dHRvblxuICAgKiAgIGRpdlxuICAgKlxuICAgKiB3aGF0IHotaW5kZXggZG9lcyB0aGUgYGRpdmAgbmVlZCB0byBkaXNwbGF5IG5leHQgdG8gYGJ1dHRvbmA/XG4gICAqIHRoZSBgZGl2YCBhbmQgYHNlY3Rpb25gIGFyZSB3aGVyZSB0aGUgc3RhY2tpbmcgY29udGV4dCBzcGxpdHNcbiAgICogc28gYGRpdmAgbmVlZHMgdG8gY29weSBgc2VjdGlvbmAncyB6LWluZGV4IGluIG9yZGVyIHRvXG4gICAqIGFwcGVhciBuZXh0IHRvIC8gb3ZlciBgYnV0dG9uYFxuICAgKlxuICAgKiBjYWxjdWxhdGUgdGhpcyBieSBzdGFydGluZyBhdCBgYnV0dG9uYCBhbmQgZmluZGluZyBpdHMgb2Zmc2V0UGFyZW50c1xuICAgKiB0aGVuIHdhbGsgdGhlIHBhcmVudHMgZnJvbSB0b3AgLT4gZG93biB1bnRpbCB0aGUgc3RhY2tpbmcgY29udGV4dFxuICAgKiBzcGxpdCBpcyBmb3VuZCwgb3IgaWYgdGhlcmUgaXMgbm8gc3BsaXQgdGhlbiBhIHNwZWNpZmljIHotaW5kZXggaXMgdW5pbXBvcnRhbnRcbiAgICovXG4gIC8vIGJ1aWxkIHRoZSBhcnJheSBvZiB0aGUgZWxlbWVudCArIGl0cyBvZmZzZXQgcGFyZW50c1xuICB2YXIgbm9kZXNUb0luc3BlY3QgPSBbXTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG5vZGVzVG9JbnNwZWN0LnB1c2goZWxlbWVudCk7IC8vIEFGQUlDVCB0aGlzIGlzIGEgdmFsaWQgY2FzdCAtIHRoZSBsaWJkZWZzIGFwcGVhciB3cm9uZ1xuXG4gICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OyAvLyBzdG9wIGlmIHRoZXJlIGlzIG5vIHBhcmVudFxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBzdG9wIGlmIHRoZSBwYXJlbnQgY29udGFpbnMgdGhlIHJlbGF0ZWQgZWxlbWVudFxuICAgIC8vIGFzIHRoaXMgaXMgdGhlIHotaW5kZXggYW5jZXN0b3JcblxuXG4gICAgaWYgKGVsZW1lbnQuY29udGFpbnMoY291c2luKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IC8vIHJldmVyc2UgdGhlIG5vZGVzIHRvIHdhbGsgZnJvbSB0b3AgLT4gZWxlbWVudFxuXG5cbiAgbm9kZXNUb0luc3BlY3QucmV2ZXJzZSgpO1xuXG4gIGZvciAodmFyIF9pMiA9IDAsIF9ub2Rlc1RvSW5zcGVjdCA9IG5vZGVzVG9JbnNwZWN0OyBfaTIgPCBfbm9kZXNUb0luc3BlY3QubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBub2RlID0gX25vZGVzVG9JbnNwZWN0W19pMl07XG4gICAgLy8gZ2V0IHRoaXMgbm9kZSdzIHotaW5kZXggY3NzIHZhbHVlXG4gICAgdmFyIHpJbmRleCA9IHdpbmRvdy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmdldFByb3BlcnR5VmFsdWUoJ3otaW5kZXgnKTsgLy8gaWYgdGhlIHotaW5kZXggaXMgbm90IGEgbnVtYmVyIChlLmcuIFwiYXV0b1wiKSByZXR1cm4gbnVsbCwgZWxzZSB0aGUgdmFsdWVcblxuICAgIHZhciBwYXJzZWRaSW5kZXggPSBwYXJzZUludCh6SW5kZXgsIDEwKTtcblxuICAgIGlmICghaXNOYU4ocGFyc2VkWkluZGV4KSkge1xuICAgICAgcmV0dXJuIHBhcnNlZFpJbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBHUk9VUF9OVU1FUklDID0gL14oW1xcZC5dKykoc3xtcykvO1xuXG5mdW5jdGlvbiBnZXRNaWxsaXNlY29uZHModmFsdWUsIHVuaXQpIHtcbiAgLy8gR2l2ZW4gdGhlIHJlZ2V4IG1hdGNoIGFuZCBjYXB0dXJlIGdyb3Vwcywgd2UgY2FuIGFzc3VtZSBgdW5pdGAgdG8gYmUgZWl0aGVyICdzJyBvciAnbXMnXG4gIHZhciBtdWx0aXBsaWVyID0gdW5pdCA9PT0gJ3MnID8gMTAwMCA6IDE7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIG11bHRpcGxpZXI7XG59IC8vIEZpbmQgQ1NTIGB0cmFuc2l0aW9uLWR1cmF0aW9uYCBhbmQgYHRyYW5zaXRpb24tZGVsYXlgIGludGVydmFsc1xuLy8gYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBpbiAnbXMnXG5cblxuZXhwb3J0IHZhciBnZXRUcmFuc2l0aW9uVGltaW5ncyA9IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpIHtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2hBcnJheSA9IGNvbXB1dGVkRHVyYXRpb24ubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoID0gZHVyYXRpb25NYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGR1cmF0aW9uTWF0Y2hBcnJheVsxXSwgZHVyYXRpb25NYXRjaEFycmF5WzJdKSA6IDA7XG4gIHZhciBjb21wdXRlZERlbGF5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gIHZhciBkZWxheU1hdGNoQXJyYXkgPSBjb21wdXRlZERlbGF5Lm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZGVsYXlNYXRjaCA9IGRlbGF5TWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkZWxheU1hdGNoQXJyYXlbMV0sIGRlbGF5TWF0Y2hBcnJheVsyXSkgOiAwO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uTWF0Y2g6IGR1cmF0aW9uTWF0Y2gsXG4gICAgZGVsYXlNYXRjaDogZGVsYXlNYXRjaFxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09PSBkb2N1bWVudC5FTEVNRU5UX05PREU7XG59IC8vIFVzZXMgYGdldFRyYW5zaXRpb25UaW1pbmdzYCB0byBmaW5kIHRoZSB0b3RhbCB0cmFuc2l0aW9uIHRpbWUgZm9yXG4vLyBhbGwgZWxlbWVudHMgdGFyZ2V0ZWQgYnkgYSBNdXRhdGlvbk9ic2VydmVyIGNhbGxiYWNrXG5cblxuZXhwb3J0IHZhciBnZXRXYWl0RHVyYXRpb24gPSBmdW5jdGlvbiBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcykge1xuICByZXR1cm4gcmVjb3Jkcy5yZWR1Y2UoZnVuY3Rpb24gKHdhaXREdXJhdGlvbiwgcmVjb3JkKSB7XG4gICAgLy8gb25seSBjaGVjayBmb3IgQ1NTIHRyYW5zaXRpb24gdmFsdWVzIGZvciBFTEVNRU5UIG5vZGVzXG4gICAgaWYgKGlzRWxlbWVudE5vZGUocmVjb3JkLnRhcmdldCkpIHtcbiAgICAgIHZhciBfZ2V0VHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhyZWNvcmQudGFyZ2V0KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoO1xuXG4gICAgICB3YWl0RHVyYXRpb24gPSBNYXRoLm1heCh3YWl0RHVyYXRpb24sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FpdER1cmF0aW9uO1xuICB9LCAwKTtcbn07IC8vIFVzZXMgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdG8gcGVyZm9ybSBhIGdpdmVuIGNhbGxiYWNrIGFmdGVyIGEgc3BlY2lmaWVkIHdhaXRpbmcgcGVyaW9kXG5cbmV4cG9ydCB2YXIgcGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIHRvUGVyZm9ybSkge1xuICBpZiAod2FpdER1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBlbmRUaW1lID0gc3RhcnRUaW1lICsgd2FpdER1cmF0aW9uO1xuXG4gICAgdmFyIG9uRnJhbWUgPSBmdW5jdGlvbiBvbkZyYW1lKCkge1xuICAgICAgdG9QZXJmb3JtKCk7XG5cbiAgICAgIGlmIChlbmRUaW1lID4gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgfVxufTsgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21iaW5pbmcgdGhlIHJlc3VsdCBvZiAnZ2V0V2FpdER1cmF0aW9uJyBkaXJlY3RseSB3aXRoICdwZXJmb3JtT25GcmFtZSdcblxuZXhwb3J0IHZhciBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lID0gZnVuY3Rpb24gZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZShyZWNvcmRzLCB0b1BlcmZvcm0pIHtcbiAgcGVyZm9ybU9uRnJhbWUoZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpLCB0b1BlcmZvcm0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuLypcbiAqIEZvciB1c2Ugd2hlbiBhIGNvbXBvbmVudCBuZWVkcyB0byBzZXQgYHJlZmAgb2JqZWN0cyBmcm9tIG11bHRpcGxlIHNvdXJjZXMuXG4gKiBGb3IgaW5zdGFuY2UsIGlmIGEgY29tcG9uZW50IGFjY2VwdHMgYSBgcmVmYCBwcm9wIGJ1dCBhbHNvIG5lZWRzIGl0cyBvd25cbiAqIGxvY2FsIHJlZmVyZW5jZSBmb3IgY2FsY3VsYXRpb25zLCBldGMuXG4gKiBUaGlzIGhvb2sgaGFuZGxlcyBzZXR0aW5nIG11bHRpcGxlIGByZWZgcyBvZiBhbnkgYXZhaWxhYmxlIGByZWZgIHR5cGVcbiAqIGluIGEgc2luZ2xlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCB2YXIgdXNlQ29tYmluZWRSZWZzID0gZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKHJlZnMpIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoIXJlZikgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtyZWZzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImVsZW1lbnRcIiwgXCJiYXNlQ2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmlsbFwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc1NlbGVjdGVkXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwibWluV2lkdGhcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCBhcyBFdWlCdXR0b25Db250ZW50IH0gZnJvbSAnLi9fYnV0dG9uX2NvbnRlbnRfZGVwcmVjYXRlZCc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBjb2xvclRvQ2xhc3NOYW1lTWFwID0ge1xuICBwcmltYXJ5OiAnLS1wcmltYXJ5JyxcbiAgYWNjZW50OiAnLS1hY2NlbnQnLFxuICBzdWNjZXNzOiAnLS1zdWNjZXNzJyxcbiAgd2FybmluZzogJy0td2FybmluZycsXG4gIGRhbmdlcjogJy0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICctLWdob3N0JyxcbiAgdGV4dDogJy0tdGV4dCdcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uQ29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG4vKipcbiAqIEV1aUJ1dHRvbiBpcyBsYXJnZWx5IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgcmVsZXZhbnQgcHJvcHNcbiAqIGFuZCB0aGUgbG9naWMgZm9yIGVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuICovXG5leHBvcnQgdmFyIEV1aUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbihfcmVmKSB7XG4gIHZhciBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGJ1dHRvbklzRGlzYWJsZWQgPSByZXN0LmlzTG9hZGluZyB8fCBpc0Rpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgZWxlbWVudCA9IGhyZWYgJiYgIWlzRGlzYWJsZWQgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIGVsZW1lbnRQcm9wcyA9IHt9OyAvLyBQcm9wcyBmb3IgYWxsIGVsZW1lbnRzXG5cbiAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgIGlzRGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWRcbiAgfSk7IC8vIEVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuXG4gIGlmIChlbGVtZW50ID09PSAnYnV0dG9uJykge1xuICAgIGVsZW1lbnRQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudFByb3BzKSwge30sIHtcbiAgICAgIGRpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkXG4gICAgfSk7XG4gIH1cblxuICB2YXIgcmVsT2JqID0ge307XG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmVsT2JqLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcmV0dXJuICgvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXBhc2NhbC1jYXNlXG4gICAgX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZCwgX2V4dGVuZHMoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwiZXVpQnV0dG9uXCIsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIGVsZW1lbnRQcm9wcywgcmVsT2JqLCByZXN0KSlcbiAgKTtcbn07XG5FdWlCdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSksXG5cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpQnV0dG9uLmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbic7XG5cbi8qKlxuICogKkRFUFJFQ0FURUQqXG4gKiBFdWlCdXR0b25EaXNwbGF5IGlzIGFuIGludGVybmFsLW9ubHkgY29tcG9uZW50IHVzZWQgZm9yIGRpc3BsYXlpbmdcbiAqIGFueSBlbGVtZW50IGFzIGEgYnV0dG9uLlxuICogTk9URTogVGhpcyBjb21wb25lbnQgKm11c3QqIGJlIGJlbG93IEV1aUJ1dHRvbiBpbiB0aGUgZmlsZSBhbmRcbiAqIEV1aUJ1dHRvbiBtdXN0IGFsc28gc2V0IGEgZGlzcGxheU5hbWUgZm9yIHJlYWN0LWRvY2dlbi10eXBlc2NyaXB0XG4gKiB0byBjb3JyZWN0bHkgc2V0IEV1aUJ1dHRvbidzIGRvY2dlbkluZm8gYW5kIGRpc3BsYXkgYSBwcm9wcyB0YWJsZS5cbiAqIFRoaXMgY29tcG9uZW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBFdWlCdXR0b25EaXNwbGF5XG4gKiB0aGF0IGNhbiBiZSBmb3VuZCBpbiBgc3JjL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS50c3hgXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheURlcHJlY2F0ZWQgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjIsIHJlZikge1xuICB2YXIgX3JlZjIkZWxlbWVudCA9IF9yZWYyLmVsZW1lbnQsXG4gICAgICBlbGVtZW50ID0gX3JlZjIkZWxlbWVudCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiRlbGVtZW50LFxuICAgICAgYmFzZUNsYXNzTmFtZSA9IF9yZWYyLmJhc2VDbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmMi5pY29uVHlwZSxcbiAgICAgIF9yZWYyJGljb25TaWRlID0gX3JlZjIuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYyJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmMiRpY29uU2lkZSxcbiAgICAgIF9yZWYyJGNvbG9yID0gX3JlZjIuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYyJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmMiRjb2xvcixcbiAgICAgIF9yZWYyJHNpemUgPSBfcmVmMi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYyJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYyJHNpemUsXG4gICAgICBfcmVmMiRmaWxsID0gX3JlZjIuZmlsbCxcbiAgICAgIGZpbGwgPSBfcmVmMiRmaWxsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGZpbGwsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYyLmlzTG9hZGluZyxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgICAgY29udGVudFByb3BzID0gX3JlZjIuY29udGVudFByb3BzLFxuICAgICAgdGV4dFByb3BzID0gX3JlZjIudGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gX3JlZjIuZnVsbFdpZHRoLFxuICAgICAgbWluV2lkdGggPSBfcmVmMi5taW5XaWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcblxuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzTG9hZGluZyB8fCBpc0Rpc2FibGVkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoYmFzZUNsYXNzTmFtZSwgY29sb3IgJiYgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0gPyBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0pIDogXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KGNvbG9yVG9DbGFzc05hbWVNYXAucHJpbWFyeSksIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdID8gXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSkgOiBudWxsLCBmaWxsICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLS1maWxsXCIpLCBmdWxsV2lkdGggJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWZ1bGxXaWR0aFwiKSwgYnV0dG9uSXNEaXNhYmxlZCAmJiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIi1pc0Rpc2FibGVkXCIpLCBjbGFzc05hbWUpO1xuICAvKipcbiAgICogTm90IGNoYW5naW5nIHRoZSBjb250ZW50IG9yIHRleHQgY2xhc3MgbmFtZXMgdG8gbWF0Y2ggYmFzZUNsYXNzTmFtZSB5ZXQsXG4gICAqIGFzIGl0IGlzIGEgbWFqb3IgYnJlYWtpbmcgY2hhbmdlLlxuICAgKi9cblxuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25fX2NvbnRlbnQnLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbl9fdGV4dCcsIHRleHRQcm9wcyAmJiB0ZXh0UHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25Db250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xuXG4gIHZhciBjYWxjdWxhdGVkU3R5bGUgPSBzdHlsZTtcblxuICBpZiAobWluV2lkdGggIT09IHVuZGVmaW5lZCB8fCBtaW5XaWR0aCAhPT0gbnVsbCkge1xuICAgIGNhbGN1bGF0ZWRTdHlsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2FsY3VsYXRlZFN0eWxlKSwge30sIHtcbiAgICAgIG1pbldpZHRoOiBtaW5XaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogY2FsY3VsYXRlZFN0eWxlLFxuICAgIGRpc2FibGVkOiBlbGVtZW50ID09PSAnYnV0dG9uJyAmJiBidXR0b25Jc0Rpc2FibGVkLFxuICAgICdhcmlhLXByZXNzZWQnOiBlbGVtZW50ID09PSAnYnV0dG9uJyA/IGlzU2VsZWN0ZWQgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG59KTtcbkV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcblxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZSBhIHZhbGlkIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBlbGVtZW50IGFzXG4gICAgICAgKi9cbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCIsIFwibGFiZWxcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQcm92aWRlIHRoZSBjb21wb25lbnQncyBiYXNlIGNsYXNzIG5hbWUgdG8gYnVpbGQgdGhlIGNsYXNzIGxpc3Qgb25cbiAgICAgICAqL1xuICBiYXNlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5FdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZC5kaXNwbGF5TmFtZSA9ICdFdWlCdXR0b25EaXNwbGF5JzsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dFByb3BzXCIsIFwiaXNMb2FkaW5nXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImljb25TaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGljb25TaWRlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6IG51bGwsXG4gIHJpZ2h0OiAnZXVpQnV0dG9uQ29udGVudC0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgPSBmdW5jdGlvbiBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICAgIF9yZWYkaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmJGlzTG9hZGluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTG9hZGluZyxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBjb250ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkNvbnRlbnRfX3NwaW5uZXJcIixcbiAgICAgIHNpemU6IGljb25TaXplXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaWNvblR5cGUpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uQ29udGVudF9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkNvbnRlbnQnLCBpY29uU2lkZSA/IGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdIDogbnVsbCwgY29udGVudFByb3BzICYmIGNvbnRlbnRQcm9wcy5jbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGNvbnRlbnRQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSksIGJ1dHRvbkljb24sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHRleHRQcm9wcywgY2hpbGRyZW4pKTtcbn07XG5FdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BY2Nlc3NpYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFjY2Vzc2liaWxpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDBhOCA4IDAgMTEwIDE2QTggOCAwIDAxOCAwem0wIDFhNyA3IDAgMTAwIDE0QTcgNyAwIDAwOCAxem0zLjk3NCA0LjM0MmEuNS41IDAgMDEtLjIzMy41OTZsLS4wODMuMDM2TDkgNi44NnYyLjU1OWwuOTc0IDIuOTIzYS41LjUgMCAwMS0uMjMzLjU5NmwtLjA4My4wMzZhLjUuNSAwIDAxLS41OTYtLjIzM2wtLjAzNi0uMDgzLTEtM0w4IDkuNWwtLjAyNi4xNTgtMSAzYS41LjUgMCAwMS0uOTctLjIyOGwuMDIyLS4wODhMNyA5LjQxNlY2Ljg2bC0yLjY1OC0uODg2YS41LjUgMCAwMS4yMjgtLjk3bC4wODguMDIyTDcuNTgzIDZoLjgzM2wyLjkyNi0uOTc0YS41LjUgMCAwMS42MzIuMzE2ek04IDNhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFjY2Vzc2liaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIEV1aUljb25BZ2dyZWdhdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi41IDJhLjUuNSAwIDEwMCAxIC41LjUgMCAwMDAtMXptMC0xYTEuNSAxLjUgMCAwMTEuNDE1IDFoMS45MDhhMS41IDEuNSAwIDAxMS4zOTMuOTQzTDguODM5IDdIMTIuNWEuNS41IDAgMDEwIDFIOC44MzlsLTEuNjIzIDQuMDU3QTEuNSAxLjUgMCAwMTUuODIzIDEzSDMuOTE1YTEuNSAxLjUgMCAxMTAtMWgxLjkwOGEuNS41IDAgMDAuNDY0LS4zMTRMNy43NjEgOEgzLjkxNWExLjUgMS41IDAgMTEwLTFINy43Nkw2LjI4NyAzLjMxNEEuNS41IDAgMDA1LjgyMyAzSDMuOTE1QTEuNSAxLjUgMCAxMTIuNSAxem0wIDExYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTMgNy41YS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwem05LjM1NC0zLjM1NGEuNS41IDAgMDAtLjcwOC43MDhMMTMuNzkzIDdhLjcwNy43MDcgMCAwMTAgMWwtMi4xNDcgMi4xNDZhLjUuNSAwIDAwLjcwOC43MDhMMTQuNSA4LjcwN2ExLjcwNyAxLjcwNyAwIDAwMC0yLjQxNGwtMi4xNDYtMi4xNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFnZ3JlZ2F0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQWxlcnQgPSBmdW5jdGlvbiBFdWlJY29uQWxlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41OSAxMC4wNTlMNy4zNSA1LjE4aDEuM0w4LjQgMTAuMDZoLS44MXptLjM5NCAxLjkwMWEuNjEuNjEgMCAwMS0uNDQ4LS4xODYuNjA2LjYwNiAwIDAxLS4xODYtLjQ0NGMwLS4xNzQuMDYyLS4zMjMuMTg2LS40NDZhLjYxNC42MTQgMCAwMS40NDgtLjE4NGMuMTY5IDAgLjMxNS4wNi40NC4xODIuMTI0LjEyMi4xODYuMjcuMTg2LjQ0OGEuNi42IDAgMDEtLjE4OS40NDYuNjA3LjYwNyAwIDAxLS40MzcuMTg0ek0yIDE0YTEgMSAwIDAxLS44NzgtMS40NzlsNi0xMWExIDEgMCAwMTEuNzU2IDBsNiAxMUExIDEgMCAwMTE0IDE0SDJ6bTAtMWgxMkw4IDIgMiAxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWxlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggOS4xNjlMMiA1LjI1djYuMTdsNiAzLjQyOCA2LTMuNDI4VjUuMjVMOCA5LjE3ek0xNSA0djhsLTcgNC03LTRWNGw3LTQgNyA0em0tMS40MjguMzM2TDggMS4xNTIgMi40MjggNC4zMzYgOCA3Ljk3NGw1LjU3Mi0zLjYzOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BbmFseXplRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uQW5hbHl6ZUV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNCxcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjkyNCA0LjAxM2EuNjA1LjYwNSAwIDAwLS4yMjgtLjIzNkw3LjMwNC4wODJhLjYwNy42MDcgMCAwMC0uNjA4IDBMLjMwNCAzLjc3N0EuNjIuNjIgMCAwMDAgNC4zMDR2Ny4zOTJjMCAuMjE3LjExNi40MTguMzA0LjUyN2w2LjM5MiAzLjY5NWMuMTg4LjExLjQyLjExLjYwOCAwbDYuMzkyLTMuNjk1YS42MDkuNjA5IDAgMDAuMzA0LS41MjdWNC4zMDRhLjYwNy42MDcgMCAwMC0uMDc2LS4yOTF6TTEgNS4wNzl2Ni4zOTFsNiAzLjQ3IDYtMy40N1Y1LjA4TDcuMjUyIDguNDMyIDcgOC41NzlsLS4yNTItLjE0N0wxIDUuMDc5em0xMS40NzYtLjg1Mkw3IDEuMDYgMS41MjQgNC4yMjcgNyA3LjQybDUuNDc2LTMuMTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFubm90YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi41YTQuNSA0LjUgMCAxMTUgNC40NzNWMTZIN3YtNS4wMjdBNC41IDQuNSAwIDAxMyA2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwbVRyYWNlID0gZnVuY3Rpb24gRXVpSWNvbkFwbVRyYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bS41IDJoMTBhLjUuNSAwIDExMCAxaC0xMGEuNS41IDAgMDEwLTF6bTEgM2g2YS41LjUgMCAwMTAgMWgtNmEuNS41IDAgMDEwLTF6bTIgM2g0YS41LjUgMCAwMTAgMWgtNGEuNS41IDAgMDEwLTF6bTMgM2g1YS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwbVRyYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBBZGREYXRhID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkZERhdGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMEgwVjNoMTIuNTdsMyA1SDMydjIyek0yIDI4aDI4VjEwSDE0LjQzbC0zLTVIMnYyM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMThoLTR2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkZERhdGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMi45MDkgMjYuMTgyaDEuOTM5djQuODQ4SDIuOTA5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NDggMTYuNjJWMEgyLjkxdjE2LjYyYTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg3OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTQuNTQ1IDE2LjQ4NWgxLjkzOVYzMS4wM2gtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi40ODUgNi45MjRWMGgtMS45NHY2LjkyNGEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgyYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjYuMTgyIDI2LjE4MmgxLjkzOXY0Ljg0OGgtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC4xMjEgMTYuNjJWMGgtMS45NHYxNi42MmEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgzYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44Nzl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFnZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFnZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAyLjgyTDE2IC4wMzggMTEgMi44MnYyLjI4OWw1LTIuNzgyIDUgMi43ODJ2LTIuMjl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIxIDcuMjgyTDE2IDQuNWwtNSAyLjc4MlY5LjU3bDUtMi43ODEgNSAyLjc4MVY3LjI4MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNS4wNDVMMiA3LjgyN3YxNS41NzdsMTQgNy43ODggMTQtNy43ODhWNy44MjdsLTUtMi43ODJ2Mi4yODlsMyAxLjY2OXYxMy4yMjVsLTEyIDYuNjc2LTEyLTYuNjc2VjkuMDAzbDMtMS42NjlWNS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIgMTIuNUwxNiA5bC02IDMuNXY3bDYgMy41IDYtMy41di03em0tOS45NzQgMS4yMDVMMTYgMTEuMzg3bDMuOTc0IDIuMzE4djQuNTlMMTYgMjAuNjEzbC0zLjk3NC0yLjMxOHYtNC41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWdlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFwbSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcG0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2MkgxVjFoMzB2NmgtMlYzSDN2N3ptMjYgMTl2LTZoMnY4SDE4di04aDJ2Nmg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zMSAxMEg5djExaDEyYzUuNTIzIDAgMTAtNC40NzcgMTAtMTB2LTF6bS0xMCA5SDExdi03aDE3LjkzOEE4LjAwMSA4LjAwMSAwIDAxMjEgMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNS41IDExLjkxNUwyNyA1LjI3OSAxOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAwLTcgMGwtOCA0LjYyQTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2MWw3LjUgNC4zM1YxNy45OGE3IDcgMCAwMTMuNS02LjA2M3pNMTAgMjcuNzg1di05LjgwOGE5IDkgMCAwMTQuNS03Ljc5M2w4LjUwMy00LjkxTDE4LjUgMi42NzJhNS4wMDMgNS4wMDMgMCAwMC01IDBsLTggNC42MTlBNSA1IDAgMDAzIDExLjYydjkuMjM4YTUgNSAwIDAwMi41IDQuMzNsNC41IDIuNTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTguNDA5IDEzLjU1YTcuMDg5IDcuMDg5IDAgMDExLjAzNSAxLjcxMUE2LjkzIDYuOTMgMCAwMTIwIDE3Ljk4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAwMy41LTYuMDYxdi05LjIzOWE2Ljk5MiA2Ljk5MiAwIDAwLTEuNTg3LTQuNDIxTDE4LjQwOSAxMy41NXptMi43NzcuNzA1QTguOTMzIDguOTMzIDAgMDEyMiAxNy45Nzl2OS44MDdsNC41LTIuNTk4YTUgNSAwIDAwMi41LTQuMzNWMTEuNjJjMC0uNTg4LS4xMDYtMS4xNjEtLjMwMy0xLjdsLTcuNTExIDQuMzM1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEF1ZGl0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBdWRpdGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE1IDBoMnYzMmgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMzJoMTN2LTJIMlYyaDExVjBIMHpNMTkgMHYyaDExdjI4SDE5djJoMTNWMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXVkaXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDYW52YXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FudmFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk03IDE3aDJ2N0g3ek0xMiAxNGgydjEwaC0yek0xNyAxNmgydjhoLTJ6TTIyIDE0aDN2MmgtM3pNMjIgMThoM3YyaC0zek0yMiAyMmgzdjJoLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC43MyAyNGE2LjQ3IDYuNDcgMCAwMS40NS0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTguNTUgOC41NSAwIDAwLS41NC0yLjgxIDYuNDcgNi40NyAwIDAxLS40NS0yLjE5IDkuMiA5LjIgMCAwMS42Mi0yLjQ5Yy41My0xLjU3IDEuMDgtMy4xOS4wOC00LjItMS0xLjAxLTIuNDEtLjQ0LTMuNTIuMDVhNS41OSA1LjU5IDAgMDEtMi4wOS42NCA1LjMgNS4zIDAgMDEtLjU5IDBMMTYgLjI4IDYuNzcgOGE1LjMgNS4zIDAgMDEtLjU5IDAgNS41OSA1LjU5IDAgMDEtMi4wOS0uNjVDMyA2Ljg3IDEuNiA2LjI1LjU3IDcuMzFjLTEuMDMgMS4wNi0uNDUgMi42My4wOCA0LjJBOS4yIDkuMiAwIDAxMS4yNyAxNGE2LjQ3IDYuNDcgMCAwMS0uNDUgMi4xOUE4LjU1IDguNTUgMCAwMC4yOCAxOWMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MUE2LjQ3IDYuNDcgMCAwMTEuMjcgMjRhOS4yIDkuMiAwIDAxLS42MiAyLjQ5Yy0uNTMgMS41Ny0xLjA4IDMuMTktLjA4IDQuMi4zNTMuMzguODUyLjU5IDEuMzcuNThhNS42NyA1LjY3IDAgMDAyLjE1LS42M0E1LjU5IDUuNTkgMCAwMTYuMTggMzBhNy4xMyA3LjEzIDAgMDEyLjI5LjQ3IDggOCAwIDAwMi42Mi41MyA3LjM3IDcuMzcgMCAwMDIuNDctLjUxQTcuMTQgNy4xNCAwIDAxMTYgMzBhNi4yNCA2LjI0IDAgMDEyLjE0LjQ1IDggOCAwIDAwMi43Ny41NSA4LjA4IDguMDggMCAwMDIuNzctLjU1IDYuMjQgNi4yNCAwIDAxMi4xNC0uNDUgNS41OSA1LjU5IDAgMDEyLjA5LjY1YzEuMTEuNDkgMi40OSAxLjExIDMuNTIuMDUgMS4wMy0xLjA2LjQ1LTIuNjMtLjA4LTQuMmE5LjIgOS4yIDAgMDEtLjYyLTIuNXpNMjEuMTcgN2gtLjI2YTggOCAwIDAwLTIuNzcuNTVBNi4yNCA2LjI0IDAgMDExNiA4YTYuMjQgNi4yNCAwIDAxLTIuMTQtLjQ1QTggOCAwIDAwMTEuMDkgN2gtLjI2TDE2IDIuNzIgMjEuMTcgN3ptOC44OSAyMi4yN2E0LjQyIDQuNDIgMCAwMS0xLjM0LS40NiA3LjA4IDcuMDggMCAwMC0yLjktLjgyIDguMTQgOC4xNCAwIDAwLTIuNzguNTUgNi4xMyA2LjEzIDAgMDEtMi4xMy40NSA2LjI0IDYuMjQgMCAwMS0yLjE0LS40NUE4IDggMCAwMDE2IDI4YTkgOSAwIDAwLTMuMDguNiA1Ljc0IDUuNzQgMCAwMS0xLjgzLjQgNi4zNiA2LjM2IDAgMDEtMi0uNDNBOC43MiA4LjcyIDAgMDA2LjE4IDI4YTcuMDggNy4wOCAwIDAwLTIuOS44MiA5LjY1IDkuNjUgMCAwMS0xLjI4LjUyIDYuMDggNi4wOCAwIDAxLjUyLTIuMjFjLjQwMy0xIC42NS0yLjA1NS43My0zLjEzYTguNTUgOC41NSAwIDAwLS41NC0yLjgxQTYuNDcgNi40NyAwIDAxMi4yNyAxOWE2LjQ3IDYuNDcgMCAwMS40NC0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTEwLjQ4IDEwLjQ4IDAgMDAtLjcyLTMuMTMgOSA5IDAgMDEtLjU5LTIuMTZIMmMuNDQ3LjEuODguMjU1IDEuMjkuNDZhNy4wOCA3LjA4IDAgMDAyLjkuODJBOC4xNCA4LjE0IDAgMDA5IDkuNDQgNi4xMyA2LjEzIDAgMDExMS4wOSA5YTYuMTMgNi4xMyAwIDAxMi4xMy40NUE4LjE0IDguMTQgMCAwMDE2IDEwYTguMTQgOC4xNCAwIDAwMi43OC0uNTVBNi4xMyA2LjEzIDAgMDEyMC45MSA5YTYuMTMgNi4xMyAwIDAxMi4wOS40NCA4LjE0IDguMTQgMCAwMDIuNzguNTUgNy4wOCA3LjA4IDAgMDAyLjktLjgyQTkuNjUgOS42NSAwIDAxMzAgOC42NmE2LjA4IDYuMDggMCAwMS0uNTIgMi4yMWMtLjQwMyAxLS42NSAyLjA1NS0uNzMgMy4xMy4wMi45Ni4yMDMgMS45MS41NCAyLjgxYTYuNDcgNi40NyAwIDAxLjQ0IDIuMTkgNi40NyA2LjQ3IDAgMDEtLjQ0IDIuMTkgOC41NSA4LjU1IDAgMDAtLjU0IDIuODFjLjA3OCAxLjA3NC4zMiAyLjEzLjcyIDMuMTNhOSA5IDAgMDEuNTkgMi4xNnYtLjAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYW52YXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENhc2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjUgMjRhNS41IDUuNSAwIDEwMC0xMSA1LjUgNS41IDAgMDAwIDExem0wIDJhNy41IDcuNSAwIDEwMC0xNSA3LjUgNy41IDAgMDAwIDE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMjkzIDI3LjcwN2wtNC00IDEuNDE0LTEuNDE0IDQgNC0xLjQxNCAxLjQxNHpNNiA0SDJ2MjdoMjV2LTNoLTJ2MUg0VjZoMlY0em0xOSA2aDJWNGgtNHYyaDJ2NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNi4zODEgMy4wMjRsLjUzOCAxLjE1OGgyLjI3NGwuNjM2IDIuNTQ1SDkuNjhsLjYzNy0yLjU0NWgyLjU1OGwuNTM4LTEuMTU4Yy4yOTItLjYzLjk1NS0xLjAyNCAxLjQ4NC0xLjAyNC41MyAwIDEuMTkzLjM5NCAxLjQ4NSAxLjAyNHptNi4wMSA1LjcwM2wtMS42MzYtNi41NDVoLTIuNTZDMTcuNi44OTggMTYuMjYyIDAgMTQuODk3IDBjLTEuMzY0IDAtMi43MDMuODk4LTMuMjk5IDIuMTgySDguNzU1TDcuMTE4IDguNzI3aDE1LjI3M3pNNyAxNWg2di0ySDd2MnptNiA1SDd2LTJoNnYyem0tNiA1aDZ2LTJIN3YyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYXNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjc2IDI5bC41OTQgMkgwbDcuNjIxLTE0LjI5LjgxMSAyLjczTDMuMzMzIDI5aDcuOTQzek0yOC45MiAzMWwtNC45ODctMTYuNTk4QTE2IDE2IDAgMDA4LjY4OCAzbDEuOCA2SDguNEw2IDFoMi42MDdhMTggMTggMCAwMTE3LjI0MSAxMi44MjhMMzEgMzFoLTIuMDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEyLjAzNyAxNC4wMkwxNi40OTIgMjloNi44MjdsLTIuMzMzLTcuODQ5YTEwIDEwIDAgMDAtOC45NDktNy4xM3pNOS4zNSAxMmgyLjA1YTEyIDEyIDAgMDExMS41MDMgOC41ODFMMjYgMzFIMTVMOS4zNSAxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MTVhMyAzIDAgMDEtMyAzek0zIDEzYTEgMSAwIDAwLTEgMXYxNWExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYxNGExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkgMTcuNzFsMy4zIDMuMjktMy4zIDMuMjkgMS40MiAxLjQyIDQuNy00LjcxLTQuNy00Ljcxek0xNSAyNGg5djJoLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwdjE2aDguN2w1LjMtNlYwSDB6bTIgMmgxMHY3SDd2NUgyVjJ6bTguNDUgOUw5IDEyLjY0VjExaDEuNDV6TTE4IDE2djE2aDguN2w1LjMtNlYxNkgxOHptMiAyaDEwdjdoLTV2NWgtNVYxOHptOC40NSA5TDI3IDI4LjY0VjI3aDEuNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTUgMThIM2MwIDYuMDc1IDQuOTI1IDExIDExIDExaDJ2LTJoLTJhOSA5IDAgMDEtOS05ek0xOCAzaC0ydjJoMmE5IDkgMCAwMTkgOWgyYzAtNi4wNzUtNC45MjUtMTEtMTEtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEYXNoYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGFzaGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTIgMjBIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMzFIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOSAzMWgtOWEzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YxNGEzIDMgMCAwMS0zIDN6bS05LTE4YTEgMSAwIDAwLTEgMXYxNGExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xVjE0YTEgMSAwIDAwLTEtMWgtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGFzaGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEZXZ0b29scyA9IGZ1bmN0aW9uIEV1aUljb25BcHBEZXZ0b29scyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDI4aC0ydi04LjQ5bC42LS4yNkE5IDkgMCAwMDIxIDMuNTJWMTFIMTFWMy41MmE5IDkgMCAwMDEuNCAxNS43M2wuNi4yNlYyOGgtMnYtNy4yMUExMSAxMSAwIDAxMTEuNi45MkwxMyAuMzFWOWg2Vi4zMWwxLjQuNjFhMTEgMTEgMCAwMS42IDE5Ljg3VjI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMSAzMGgxMHYySDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEZXZ0b29sczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRGlzY292ZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGlzY292ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTguMzMgMjMuNjdsNC43OS0xMC41NSAxMC41NS00Ljc5LTQuNzkgMTAuNTUtMTAuNTUgNC43OXptNi4zLTlsLTIuMjggNSA1LTIuMjggMi4yOC01LTUgMi4yOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjMgMCAwIDcuMTYzIDAgMTZzNy4xNjMgMTYgMTYgMTYgMTYtNy4xNjMgMTYtMTZBMTYgMTYgMCAwMDE2IDB6bTEgMjkuOTVWMjhoLTJ2MS45NUExNCAxNCAwIDAxMi4wNSAxN0g0di0ySDIuMDVBMTQgMTQgMCAwMTE1IDIuMDVWNGgyVjIuMDVBMTQgMTQgMCAwMTI5Ljk1IDE1SDI4djJoMS45NUExNCAxNCAwIDAxMTcgMjkuOTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERpc2NvdmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBFbXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwRW1zKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zIDIyaDN2MkgxVjFoMjN2NWgtMlYzSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4yMjggMjljMS40OTItMS42NzggMS4zNTMtMi44NTkuMDA5LTUuNjU0LS4wNDktLjEtLjA0OS0uMS0uMDk3LS4yMDMtMS4zNjktMi44NTUtMS42MjYtNC40OTEtLjMyNS02LjU4MiAyLjc5Ni00LjQ5OCA5LjUxNC0yLjY0MiAxNC4xODUgMi4zMTdWMTBIMTB2MTloNS4yMjh6bTIuNDcgMEgyOXYtNi45ODNjLTMuODgtNS40MDYtMTAuMzc2LTcuNzk1LTEyLjQ4Ny00LjQtLjgzIDEuMzM2LS42NjkgMi4zNy40MyA0LjY2MmwuMDk3LjJjMS4zNTIgMi44MTQgMS43MzEgNC42My42NTkgNi41MjF6TTMxIDh2MjNIOFY4aDIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBFbXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZpbGViZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZpbGViZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04IDE4aDE2djJIOHpNOCAxM2g5djJIOHpNOCAyM2gxNnYySDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40MSAwSDVhMyAzIDAgMDAtMyAzdjI2YTMgMyAwIDAwMyAzaDIyYTMgMyAwIDAwMy0zVjguNTlMMjEuNDEgMHpNMjIgMy40MUwyNi41OSA4SDIyVjMuNDF6TTI3IDMwSDVhMSAxIDAgMDEtMS0xVjNhMSAxIDAgMDExLTFoMTV2OGg4djE5YTEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmlsZWJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZsZWV0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZsZWV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45OTYgMTguNjM2TDAgMjAuNDM0djYuMTMybDYgMy42IDUtMyA1IDMgNS0zIDUgMyA2LTMuNnYtNi4xMzJsLTUtM3YtNWwtNS0zdi01bC02LTMuNi02IDMuNnYyLjgzMmwyIC4wMzNWNS41NjZsNC0yLjQgNCAyLjR2My44NjhsLTEuOTk2IDEuMTk3IDEgMS43MzNMMjEgMTEuMTY2bDQgMi40djMuODY4bC00IDIuNC0yLjI1Ny0xLjM1NC0uOTcxIDEuNzVMMjAgMjEuNTY1djMuODY4bC00IDIuNC00LTIuNHYtMS43bC0yLS4wMzN2MS43MzNsLTQgMi40LTQtMi40di0zLjg2OGwxLjk5Ni0xLjE5Ny0xLTEuNzMzek0yMiAyNS40MzR2LTMuODY4bDQtMi40IDQgMi40djMuODY4bC00IDIuNC00LTIuNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTEgMjIuMTY2bC02LTMuNnYtNi4xMzJsNi0zLjYgNiAzLjZ2Ni4xMzJsLTYgMy42em00LTQuNzMydi0zLjg2OGwtNC0yLjQtNCAyLjR2My44NjhsNCAyLjQgNC0yLjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEZsZWV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHaXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwR2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOS4wMTQgMjMuODlsMi4yOTYgMS4xNDVMMTYgMzIuMTAxLjUzIDI0Ljk2MWwyLjQ5LTEuMDU2IDIuNDUzIDEuMTMyLS4wMDMuMDAyTDE2IDI5Ljg5OWwxMC42OS00LjkzNC0uMDAzLS4wMDEgMi4zMjctMS4wNzR6bS00Ljk3Mi03LjQ4Mmw3LjI2OCAzLjYyN0wxNiAyNy4xMDEuNTMgMTkuOTYxbDcuNjY4LTMuMjUyYy4zOTIuNDg2LjgzOCAxLjAyIDEuMzQgMS42MDRMNS40NyAyMC4wMzkgMTYgMjQuODk5bDEwLjY5LTQuOTM0LTMuOTU0LTEuOTczYy40OTMtLjU4LjkyOC0xLjEwNyAxLjMwNi0xLjU4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDlhMiAyIDAgMTAtNCAwIDIgMiAwIDAwNCAwem0yIDBhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMy4yNjggMTIuNjgxbC0uNzMyLjc4Ny0uNzMyLS43ODdjLTMuNTU3LTMuODI0LTUuODE3LTYuNDYyLTYuODEtNy45NkE4Ljc0NiA4Ljc0NiAwIDAxNyA4Ljg3NUM3IDMuOTcgMTEuMDMzIDAgMTYgMHM5IDMuOTcgOSA4Ljg3NWE4Ljc0NiA4Ljc0NiAwIDAxLTEuNDU5IDQuODQ2Yy0uOTkyIDEuNDk4LTMuMjUyIDQuMTM2LTYuODA5IDcuOTZ6bTUuMTQyLTkuMDY0QTYuNzQ3IDYuNzQ3IDAgMDAyMyA4Ljg3NUMyMyA1LjA4MSAxOS44NyAyIDE2IDJTOSA1LjA4MSA5IDguODc1YzAgMS4zNDkuMzk0IDIuNjM2IDEuMTI2IDMuNzQyLjg0NiAxLjI3NyAyLjgxMiAzLjU5MyA1Ljg3NCA2LjkxMiAzLjA2Mi0zLjMyIDUuMDI4LTUuNjM1IDUuODc0LTYuOTEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdyYXBoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyYXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNCAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0tOC4yLTUuNjJBNCA0IDAgMTExOCAxLjA2YTQgNCAwIDAxLTIuMiA3LjMyem0wLTZhMiAyIDAgMTAuMDEgMGgtLjAxem0uMDEgMjkuMjRhNCA0IDAgMTEtLjA4My04IDQgNCAwIDAxLjA4MyA4em0wLTZhMiAyIDAgMTAuMzkgMCAyIDIgMCAwMC0uNCAwaC4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDE3di0yaC02LjE0YTQgNCAwIDAwLS44Ni0xLjY0bDIuMzEtMy40NC0xLjY4LTEuMTItMi4zMSAzLjQ0QTQgNCAwIDAwOCAxMmE0IDQgMCAxMDAgOCA0IDQgMCAwMDEuMzItLjI0bDIuMzEgMy40NCAxLjY2LTEuMTJMMTEgMTguNjRhNCA0IDAgMDAuODYtMS42NEgxOHpNNiAxNmEyIDIgMCAxMTQgMCAyIDIgMCAwMS00IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyYXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHcm9rID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjcyNyAyLjkxVi45N2MtMS4zNTcgMC00LjE4IDAtNS44MTggMS45NC0uOTcgMS4xODItMS4zMjggMi45MDgtLjk3IDQuOTgzLjU2MyAzLjMwNy45NyA2LjMzMi4zMDEgNy4xNTctLjMuMzEtLjk3LjQ2NS0yLjI0LjQ2NXYxLjk0YzEuMjcgMCAxLjk0LjE1NSAyLjI1LjQ5NC42OTguODI0LjI2MiAzLjg3OS0uMyA3LjE1Ni0uMzUgMi4xMjQtLjAxIDMuODAyLjk2IDQuOTU2QzUuNTI3IDMyIDguMzUgMzIgOS43MjYgMzJ2LTEuOTRjLTEuMTQ0IDAtMy4yODcgMC00LjMxNS0xLjIyMWE0LjExMiA0LjExMiAwIDAxLS41MzMtMy40MTRjLjg0My01LjA0Mi45Ny03LjM3LS4xMzYtOC43MjctLjA2OC0uMDc3LS4xNDUtLjEzNi0uMjEzLS4yMDMtLjA2OC0uMDY4LjE0NS0uMTI3LjIxMy0uMjA0IDEuMTQ0LTEuMzY3Ljk3LTMuNjk1LjEzNi04LjcyN2E0LjExMiA0LjExMiAwIDAxLjU0My0zLjQxNEM2LjQ0IDIuOTEgOC41ODMgMi45MSA5LjcyNyAyLjkxek0zMi4wMyAxNy40NTR2LTEuOTRjLTEuMjcgMC0xLjk0LS4xNTUtMi4yNS0uNDk0LS42OTgtLjgyNS0uMjYxLTMuODguMzAxLTcuMTU3LjM1LTIuMTIzIDAtMy44MDEtLjk3LTQuOTg0QzI3LjQ5My45NCAyNC42NzIuOTQgMjMuMjk0Ljk0djEuOTdjMS4xNDUgMCAzLjI4OCAwIDQuMzE1IDEuMjJhNC4xMTIgNC4xMTIgMCAwMS41NDQgMy40MTRjLS44NDQgNS4wNDMtLjk3IDcuMzcuMTM1IDguNzI4LjA2OC4wNzcuMTQ2LjEzNS4yMTQuMjAzLjA2Ny4wNjgtLjE0Ni4xMjYtLjIxNC4yMDQtMS4xNDQgMS4zNjctLjk3IDMuNjk0LS4xMzUgOC43MjcuMzI5IDEuMTYyLjEzIDIuNDEtLjU0NCAzLjQxMy0xLjAxOCAxLjI0Mi0zLjE2IDEuMjQyLTQuMzA1IDEuMjQyVjMyYzEuMzU4IDAgNC4xOCAwIDUuODE4LTEuOTQuOTctMS4xODIgMS4zMjktMi45MDguOTctNC45ODQtLjU2My0zLjMwNi0uOTctNi4zMzItLjMtNy4xNTYuMy0uMzEuOTY5LS40NjUgMi4yNC0uNDY1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi4yMTIgMTUuNTE1aC0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzItNi43MlY2Ljc4OGgtMS45NHYyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzIgNi43Mkg2LjgxOHYxLjk0aDIuMDA3YTcuNzU4IDcuNzU4IDAgMDA2LjcyIDYuNzJ2Mi4wMDdoMS45NHYtMi4wMDdhNy43NTggNy43NTggMCAwMDYuNzItNi43MmgyLjAwN3YtMS45NHptLTguNzI3IDYuN3YtMS44NTFoLTEuOTR2MS44NTJhNS44MTggNS44MTggMCAwMS00Ljc2LTQuNzYxaDEuODUxdi0xLjk0aC0xLjg1MmE1LjgxOCA1LjgxOCAwIDAxNC43NjEtNC43NjF2MS44NTJoMS45NHYtMS44NTJhNS44MTggNS44MTggMCAwMTQuNzYxIDQuNzYxaC0xLjg1MnYxLjk0aDEuODUyYTUuODE4IDUuODE4IDAgMDEtNC43NjEgNC43NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JvazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSGVhcnRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEhlYXJ0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNC4xNCAxNS4zOWE4LjA1OCA4LjA1OCAwIDAxLTIuMi00LjA0M0E2Ljc4OCA2Ljc4OCAwIDAxNC4xOTggNS40N2E2LjczIDYuNzMgMCAwMTguNzI3LS4yMTNsMS4yNi0xLjQ2NGE4LjY1IDguNjUgMCAwMC0xMS4yNzcuMjMyQTguNzI3IDguNzI3IDAgMDAuMDY4IDExLjZhMTAuMTcyIDEwLjE3MiAwIDAwMi43OTMgNS4yNzVsMS4yOC0xLjQ4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUxNSAzMS4yNzRMNC41NDggMTguNDU0IDE1Ljg1NSA0Ljc2M2E4LjY3IDguNjcgMCAwMTEyLjI2Ni0uNzQ2IDguNzI3IDguNzI3IDAgMDEyLjkxIDcuMjA1Yy0uMjQzIDIuNjk1LTIuMDM3IDQuNzMyLTMuNDgyIDYuMzdMMTUuNTE1IDMxLjI3NXptLTguNDI3LTEyLjgybDguNDI3IDkuODYyIDEwLjU1LTExLjk5NWMxLjMyLTEuNTAzIDIuODIyLTMuMjEgMy4wMDctNS4yNjVhNi43ODggNi43ODggMCAwMC0yLjI0LTUuNTg2IDYuNzMgNi43MyAwIDAwLTkuNTA0LjU2M0w3LjA4OCAxOC40NTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEhlYXJ0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAzMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNMjMgOFY2aC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDItMS40Mi0xLjQ5IDEuNDlBNSA1IDAgMDAxNyAyLjFWMGgtMnYyLjFhNSA1IDAgMDAtMS43NS43M2wtMS40OS0xLjQ5LTEuNDIgMS40MiAxLjQ5IDEuNDlBNSA1IDAgMDAxMS4xIDZIOXYyaDIuMWE1IDUgMCAwMC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwMDEuNzYuNzRWMTRoMnYtMi4xYTUgNSAwIDAwMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ4LTEuNUE1IDUgMCAwMDIwLjkgOEgyM3ptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhMSAxIDAgMDEtMS0xIDEuMzkgMS4zOSAwIDAxMC0uMi42NS42NSAwIDAxLjA2LS4xOC43NC43NCAwIDAxLjA5LS4xOCAxLjYxIDEuNjEgMCAwMS4xMi0uMTUuOTMuOTMgMCAwMS4zMy0uMjEgMSAxIDAgMDExLjA5LjIxbC4xMi4xNWEuNzguNzggMCAwMS4wOS4xOC42Mi42MiAwIDAxLjEuMTggMS4yNyAxLjI3IDAgMDEwIC4yIDEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFBhdHRlcm4gPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTRoLThhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoOGEzIDMgMCAwMTMgM3Y4YTMgMyAwIDAxLTMgM3pNMTIgMmExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xaC04ek0xNyAxOHYtMmgtMnYySDN2Nmgydi00aDEwdjRoMnYtNGgxMHY0aDJ2LTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQgMzJhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMTIgNGEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6TTEzIDRoNnYyaC02ek0xMyA4aDZ2MmgtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFJvbGx1cCA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFJvbGx1cChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDI2di0yaC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDEtMS40MS0xLjQ5IDEuNDlBNSA1IDAgMDAyNiAyMC4xVjE4aC0ydjIuMWE1IDUgMCAwMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MSAxLjQxIDEuNDkgMS40OUE1IDUgMCAwMDIwLjEgMjRIMTh2MmgyLjFhNSA1IDAgMDAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMDAxLjc2Ljc0VjMyaDJ2LTIuMWE1IDUgMCAwMDEuNzUtLjczbDEuNDkgMS40OSAxLjQxLTEuNDEtMS40OS0xLjQ5QTUgNSAwIDAwMjkuOSAyNkgzMnptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1LjcxIDI0LjI5YTEgMSAwIDAwLTEuMDktLjIxIDEuMTUgMS4xNSAwIDAwLS4zMy4yMS45My45MyAwIDAwLS4yMS4zMyAxIDEgMCAwMDEuMyAxLjMgMS4xNSAxLjE1IDAgMDAuMzMtLjIxIDEgMSAwIDAwLjIxLTEuMDkuOTQuOTQgMCAwMC0uMjEtLjMzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk01IDZoMTZ2Mkg1ek01IDEyaDE2djJINXpNNSAxOGgxMHYySDV6TTUgMjRoOHYySDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDIwYTMgMyAwIDAxMyAzdjEzaC0yVjNhMSAxIDAgMDAtMS0xSDNhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDEzdjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4Um9sbHVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBMZW5zID0gZnVuY3Rpb24gRXVpSWNvbkFwcExlbnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzLjc5MyAxNC4yOTNsMS40MTQgMS40MTQtNi40MDggNi40MDktMy43NS0zLjI1LTQuMzQyIDQuMzQxLTEuNDE0LTEuNDE0IDUuNjU4LTUuNjU5IDMuNzUgMy4yNSA1LjA5Mi01LjA5MXpNMTIgMTF2NWwtMiAydi03aDJ6bTEwLTZ2OGwtMiAyVjVoMnptLTUgM3Y3bC0yLTJWOGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMGM4LjI4NCAwIDE1IDYuNzE2IDE1IDE1IDAgOC4yODQtNi43MTYgMTUtMTUgMTUtMy43ODIgMC03LjIzOC0xLjQtOS44NzYtMy43MWwtNS40MTcgNS40MTctMS40MTQtMS40MTQgNS40MTctNS40MTdBMTQuOTQzIDE0Ljk0MyAwIDAxMiAxNWMwLTEuMDUuMTA4LTIuMDc0LjMxMy0zLjA2MmwxLjkwNi42NzJDNC4wNzUgMTMuMzg1IDQgMTQuMTg0IDQgMTVjMCA3LjE4IDUuODIgMTMgMTMgMTNzMTMtNS44MiAxMy0xM1MyNC4xOCAyIDE3IDJjLTEuMDAyIDAtMS45NzguMTEzLTIuOTE1LjMyOGwtLjc1LTEuODc3QTE1LjAzMSAxNS4wMzEgMCAwMTE3IDB6TTkuNjIxIDEuOTM3bC43NSAxLjg3N2ExMy4wNjIgMTMuMDYyIDAgMDAtNC44MiA1LjAyNGwtMS45MDctLjY3M2ExNS4wNjggMTUuMDY4IDAgMDE1Ljk3Ny02LjIyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTGVuczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTG9ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMb2dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA4YzMuOTgzIDAgNy43MzIgMS4wMTMgMTEuMDAxIDIuNzk3djIuMzEyQTIwLjg4NyAyMC44ODcgMCAwMDIgMTAuMDIzdjExLjAyNWM0Ljg1LjQ2MiA5LjI3IDQuMTgzIDkuOTU1IDguNjkxbC4wMzUuMjYxSDEydjJoLTEuOTM4bC0uMDE4LTEuMjM2Yy0uMTE2LTQuMDE1LTQuMzM2LTcuNjMxLTguNzkzLTcuNzZMMCAyMi45ODZWOGgxem0xMy04aDFjOS4yOCAwIDE2LjgyNSA3LjQzNyAxNi45OTcgMTYuNjc3TDMyIDE3djE1aC0yVjE3YzAtNy44NC02LjAxNC0xNC4yNzQtMTMuNjgtMTQuOTQzTDE2IDIuMDMzdjcuNjgxbC0yLTEuMTQzVjBoMS0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi45OTcgMzAuNjM2TDI3LjAwOSAzMkgxNFYxMS4zMDVsMS40ODMuODJjNi45OTQgMy44NjEgMTEuMzgyIDEwLjczNSAxMS41MTQgMTguNTF6bS0yLjA0OC0xLjA0QzI0LjUwNSAyMy41NTYgMjEuMjA1IDE4LjIgMTYgMTQuNzcxVjMwaDguOTc0bC0uMDI1LS40MDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExvZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMzJoLTh2LTQuMDZhMSAxIDAgMDAtMS42MS0uNjdsLTIuODggMi44Ny01LjY1LTUuNjUgMi44Ny0yLjg3YS45Mi45MiAwIDAwLjItMSAuOTMuOTMgMCAwMC0uODYtLjZIMFYxMmg0LjA2YS45Mi45MiAwIDAwLjg1LS41OC45NC45NCAwIDAwLS4xOS0xTDEuODYgNy41MWw1LjY1LTUuNjUgMi44NyAyLjg3QTEgMSAwIDAwMTIgNC4wNlYwaDh2NC4wNmExIDEgMCAwMDEuNjEuNjdsMi44Ny0yLjg3IDUuNjYgNS42Ni0yLjg3IDIuODdhLjkyLjkyIDAgMDAtLjIgMSAuOTMuOTMgMCAwMC44Ni42SDMydjhoLTQuMDZhLjkyLjkyIDAgMDAtLjg1LjU4Ljk0Ljk0IDAgMDAuMTkgMWwyLjg3IDIuODctNS42NiA1LjY2LTIuODctMi44N2ExIDEgMCAwMC0xLjYxLjY3TDIwIDMyem0tNi0yaDR2LTIuMDZhMyAzIDAgMDE1LTIuMDhsMS40NiAxLjQ2IDIuODMtMi44M0wyNS44NiAyM2EzIDMgMCAwMTIuMDgtNUgzMHYtNGgtMi4wNmEzIDMgMCAwMS0yLjA4LTVsMS40Ni0xLjQ2LTIuODMtMi44NUwyMyA2LjE0YTMgMyAwIDAxLTUtMi4wOFYyaC00djIuMDZhMyAzIDAgMDEtNSAyLjA4TDcuNTEgNC42OSA0LjY5IDcuNTEgNi4xNCA5YTMgMyAwIDAxLTIuMDggNUgydjRoMi4wNmEzIDMgMCAwMTIuMDggNWwtMS40NSAxLjQ5IDIuODMgMi44M0w5IDI1Ljg2YTMgMyAwIDAxNSAyLjA4VjMwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY2JlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOCAxNmgtMmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZINEM0IDkuMzczIDkuMzczIDQgMTYgNHMxMiA1LjM3MyAxMiAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjcxIDExLjcxTDIwLjMgMTAuMyAxOCAxMi41N2E0IDQgMCAwMC0yLS41NyA0IDQgMCAxMDQgNCA0IDQgMCAwMC0uNTctMmwyLjI4LTIuMjl6TTE2IDE4YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMCAxOS4wOTJ2MTIuODhIMnYtNS4zODZsNi43NDctNi43NDcuNzA4LjcwOGMuMjM2LjIzNi40OC40NjMuNzMzLjY4TDQgMjcuNDE0djIuNTU4aDI0di04LjkxYy4xODYtLjE2Ni4zNjktLjMzOS41NDYtLjUxNkwzMCAxOS4wOTJ6bS0yMC44NS0zLjE5QTEwLjk1NSAxMC45NTUgMCAwMTggMTFDOCA0LjkyNSAxMi45MjUgMCAxOSAwczExIDQuOTI1IDExIDExYzAgMS43Ni0uNDE0IDMuNDI1LTEuMTUgNC45bC0xLjUxLTEuNTFBOC45NzMgOC45NzMgMCAwMDI4IDExYTkgOSAwIDEwLTE3LjM0IDMuMzkxbC0xLjUxIDEuNTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE5IDIwYTguOTYgOC45NiAwIDAwNS42MTgtMS45NjhsLTQuMjAyLTQuMjA0YTIgMiAwIDAwLTIuODI4IDBsLTQuMjA1IDQuMjA1QTguOTYgOC45NiAwIDAwMTkgMjB6bS0yLjgyNi03LjU4NmE0IDQgMCAwMTUuNjU2IDBsNS42NTYgNS42NTctLjcwNy43MDdBMTAuOTY3IDEwLjk2NyAwIDAxMTkgMjJhMTAuOTY3IDEwLjk2NyAwIDAxLTcuNzc4LTMuMjIxbC0uNzA3LS43MDcgNS42NTktNS42NTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1sID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMCAxOHYuNTZhMSAxIDAgMDEtLjY4Ljk1TDMgMjEuNjFWMTBhMSAxIDAgMDEuNC0uOGwzLjItMi40LTEuMi0xLjYtMy4yIDIuNEEzIDMgMCAwMDEgMTB2MTJhMyAzIDAgMDAxLjIgMi40bDMuMiAyLjQgMS4yLTEuNi0yLjQ3LTEuODUgNS44Mi0xLjk1QTMgMyAwIDAwMTIgMTguNTZWMThoLTJ6TTI5LjggNy42bC0zLjItMi40LTEuMiAxLjYgMy4yIDIuNGExIDEgMCAwMS40Ljh2MTEuNjFsLTYuMzItMi4xMWExIDEgMCAwMS0uNjgtLjk1VjE4aC0ydi41NmEzIDMgMCAwMDIuMDUgMi44NWw1LjgyIDEuOTQtMi40NyAxLjg1IDEuMiAxLjYgMy4yLTIuNEEzIDMgMCAwMDMxIDIyVjEwYTMgMyAwIDAwLTEuMi0yLjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA2QTMgMyAwIDAxOC44OC44OGEzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAyem0wIDMwYTMgMyAwIDAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDMyem0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMTEgMjh6bTAtMTJhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgMTZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAxMnptMTAtNkEzIDMgMCAwMTE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDJ6bTAgMzBhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgMzJ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAyMSAyOHptMC0xMmEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSAxNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTW9uaXRvcmluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBNb25pdG9yaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS44MSAxNS4xOUE4Ljk0IDguOTQgMCAwMTE1LjYyIDMuODZsLjM4LjQyLjM4LS40MmE4Ljk0IDguOTQgMCAwMTE0LjI2IDEwLjY4bC0xLjctMS4wN2E2Ljk0IDYuOTQgMCAwMC0xMS4wNy04LjI4TDE2IDcuMjlsLTEuODctMi4xQTYuOTQgNi45NCAwIDAwMy40MSAxNGwtMS42IDEuMTl6TTE2IDMxLjE4bC03Ljc0LTguNTEgMS40OC0xLjM0TDE2IDI4LjIxbDYuMjYtNi44OCAxLjQ4IDEuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2LjE2IDIzLjI5bC00LjEtNy4xN0wxMC42MiAxOUgwdi0yaDkuMzhsMi41Ni01LjEyIDMuOSA2LjgzIDQuMTMtMTAuMzJMMjMuNjYgMTdIMzJ2MmgtOS42NmwtMi4zMS01LjM5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNb25pdG9yaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBOb3RlYm9vayA9IGZ1bmN0aW9uIEV1aUljb25BcHBOb3RlYm9vayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDJoLTVWMGgtMnYyaC0zVjBoLTJ2MmgtM1YwSDh2MkgzdjI2aDIyVjJ6bS0yIDI0SDVWNGgzdjJoMlY0aDN2MmgyVjRoM3YyaDJWNGgzdjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgN3YyM0g4djJoMjFWN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOCAxMmgxMnYySDh6TTggMTdoMTJ2Mkg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBOb3RlYm9vazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGFja2V0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBQYWNrZXRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTQgNCAwIDEwLTQgNCA0IDQgMCAwMDItLjU3bDUuMjcgNS4yNyAxLjQxLTEuNDFMNy40MyA2QTQgNCAwIDAwOCA0ek00IDZhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTE2LjcxIDYuNzFMMjYgNy40M0E0IDQgMCAwMDI4IDhhNCA0IDAgMTAtNC00IDQgNCAwIDAwLjU3IDJsLTUuMjcgNS4yNyAxLjQxIDEuNDR6TTI4IDJhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6TTExLjI5IDE5LjI5TDYgMjQuNTdBNCA0IDAgMDA0IDI0YTQgNCAwIDEwNCA0IDQgNCAwIDAwLS41Ny0ybDUuMjctNS4yNy0xLjQxLTEuNDR6TTQgMzBhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTI0LTZhNCA0IDAgMDAtMiAuNTdsLTUuMjctNS4yNy0xLjQxIDEuNDFMMjQuNTcgMjZhNCA0IDAgMDAtLjU3IDIgNCA0IDAgMTA0LTR6bTAgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGFja2V0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGlwZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGlwZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxMmEzIDMgMCAwMC0zIDNoLTRhMyAzIDAgMDAtMy0zaC02YTMgMyAwIDAwLTMgM0g2YTMgMyAwIDAwLTMtM0gwdjE0aDNhMyAzIDAgMDAzLTNoNGEzIDMgMCAwMDMgM2g2YTMgMyAwIDAwMy0zaDRhMyAzIDAgMDAzIDNoM1YxMmgtM3pNMyAyNEgyVjE0aDFhMSAxIDAgMDExIDF2OGExIDEgMCAwMS0xIDF6bTE3LTN2MmExIDEgMCAwMS0xIDFoLTZhMSAxIDAgMDEtMS0xdi0ySDZ2LTRoNnYtMmExIDEgMCAwMTEtMWg2YTEgMSAwIDAxMSAxdjJoNnY0aC02em0xMCAzaC0xYTEgMSAwIDAxLTEtMXYtOGExIDEgMCAwMTEtMWgxdjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiA2SDEwdjJoNXYyaDJWOGg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQaXBlbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNSA0aDJ2OS4xN0EzLjAwOSAzLjAwOSAwIDAxMTguODMgMTVIMjZ2MmgtNy4xN0EzLjAwMSAzLjAwMSAwIDExMTUgMTMuMTdWNHptMSAxM2ExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFJlcG9ydGluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZXBvcnRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSA1aC0uMTd2MkgyNWExIDEgMCAwMTEgMXYyMGExIDEgMCAwMS0xIDFIN2ExIDEgMCAwMS0xLTFWOGExIDEgMCAwMTEtMWguMTdWNUg3YTMgMyAwIDAwLTMgM3YyMGEzIDMgMCAwMDMgM2gxOGEzIDMgMCAwMDMtM1Y4YTMgMyAwIDAwLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNoLTNWMGgtOHYzSDl2NmgxNFYzem0tMiA0SDExVjVoM1YyaDR2M2gzdjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEwIDEzaDEydjJIMTB6TTEwIDE4aDEydjJIMTB6TTEwIDIzaDEydjJIMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFJlcG9ydGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU2F2ZWRPYmplY3RzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjAuMzggNy4wMDFMMTcgOS42MTlWMGgtMnY5LjYxOWwtMy4zNy0yLjYxOC0xLjI1IDEuNTEzTDE2IDEyLjg3OGw1LjYzLTQuMzY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuMDYuMTY1bC0xLjExIDEuNjEgOS4yNSA1Ljk4M0wxNiAxNi4yOSAyLjggNy43NThsOS4yNS01Ljk4My0xLjEtMS42MUwwIDcuMjM0djEzLjY1M2wxNiAxMC4zMzcgMTYtMTAuMzM3VjcuMjM0TDIxLjA2LjE2NHpNMiA5LjU3bDEzIDguNDA3djEwLjI3OUwyIDE5Ljg0VjkuNTd6bTE1IDE4LjY3NlYxNy45NzhsMTMtOC40MDdWMTkuODVsLTEzIDguMzk3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTYXZlZE9iamVjdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMS42MyA4aDcuMzh2MmgtNy4zOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgOGgzLjE5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNyAxNmg3LjM4djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjgxIDE2SDE5djJoLTMuMTl6TTcgMTJoOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAwQzUuODIgMCAwIDUuODIgMCAxM3M1LjgyIDEzIDEzIDEzIDEzLTUuODIgMTMtMTNBMTMgMTMgMCAwMDEzIDB6bTAgMjRDNi45MjUgMjQgMiAxOS4wNzUgMiAxM1M2LjkyNSAyIDEzIDJzMTEgNC45MjUgMTEgMTEtNC45MjUgMTEtMTEgMTF6TTIyLjU4MSAyMy45OTNsMS40MTQtMS40MTQgNy43MDggNy43MDgtMS40MTQgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDMybC0uMzYtLjE0QTIxLjA3IDIxLjA3IDAgMDEwIDEyLjA3VjUuNDRMMTQgLjA2bDE0IDUuMzh2Ni42M2EyMS4wNyAyMS4wNyAwIDAxLTEzLjY0IDE5Ljc4TDE0IDMyek0yIDYuODJ2NS4yNWExOS4wOCAxOS4wOCAwIDAwMTIgMTcuNzcgMTkuMDggMTkuMDggMCAwMDEyLTE3Ljc3VjYuODJMMTQgMi4yIDIgNi44MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOSAxNy44M2gyVjIzSDl6TTExIDEwLjE4VjdIOXYzLjE4YTMgMyAwIDEwMiAwek0xMCAxNGExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnpNMTcgN2gydjUuMTdoLTJ6TTIxIDE3YTMgMyAwIDEwLTQgMi44MlYyM2gydi0zLjE4QTMgMyAwIDAwMjEgMTd6bS0zIDFhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDV2Ny45MjhjMCAxLjI5OS44MDggMi43OTUgMi44OCA0LjQ4IDEuODMgMS40ODkgNC41MjQgMy4wMiA4LjEyIDQuNTg0VjI2aDJ2NS45OTJsLTEuMzgtLjU2N2MtNC4zNzItMS43OTctNy43MjQtMy42MTMtMTAtNS40NjVDNC4zNTggMjQuMTIyIDMgMjIuMTE0IDMgMTkuOTI4VjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk05IDEwaDl2MTRsLTEuMjcyLS40NThjLTEuMzY3LS40OTQtMy4yMy0xLjMxNC00Ljc2OC0yLjM5QzEwLjQ4NCAyMC4xMTggOSAxOC42MzYgOSAxNi43NjFWMTB6bTEuODk1IDEuODc2djQuODg3YzAgLjg3Ny43NDQgMS44NjcgMi4xNTggMi44NTYuOTM3LjY1NiAyLjAzOCAxLjIxOSAzLjA1MiAxLjY1N3YtOS40aC01LjIxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMUg5djdoMlYyLjk2NmgxNlYxNi43M2MwIC41NTgtLjI0NSAxLjEyOC0uNzU2IDEuNzItLjUxNS41OTYtMS4yNTYgMS4xNTgtMi4xMiAxLjY2OC0xLjM4MS44MTgtMi45NjEgMS40MzQtNC4xMjQgMS44MTdWMjRjMS4yNi0uMzc4IDMuMzM0LTEuMTIgNS4xNTUtMi4xOTcuOTY1LS41NyAxLjkwNS0xLjI2MSAyLjYxMi0yLjA4LjcxMi0uODIyIDEuMjMzLTEuODI3IDEuMjMzLTIuOTkyVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDRoNnYySDR6TTIyIDRoNnYyaC02ek00IDIyaDZ2Mkg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxNGgxNFYwSDB2MTR6TTIgMmgxMHYxMEgyVjJ6bTE2LTJ2MTRoMTRWMEgxOHptMTIgMTJIMjBWMmgxMHYxMHpNMCAzMmgxNFYxOEgwdjE0em0yLTEyaDEwdjEwSDJWMjB6bTE2IDEyaDE0VjE4SDE4djE0em0yLTEyaDEwdjEwSDIwVjIwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAyMmg2djJoLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU3FsID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTggNmg5djJoLTl6TTUgNmg5djJINXpNNSAxMmg5djJINXpNMTggMTJoOXYyaC05ek01IDE4aDl2Mkg1ek0xOCAxOGg5djJoLTl6TTE4IDI0aDl2MmgtOXpNNSAyNGg5djJINXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MjZhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDI2YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2MjAuMzRMMTYgMzJsMTItNy42NFY0SDR6bTIyIDJ2NGgtNGEzIDMgMCAwMC0zIDN2NWgtNnYtNWEzIDMgMCAwMC0zLTNINlY2aDIwem0tNy44NyAxNEwxNiAyMi41MiAxMy44NyAyMGg0LjI2ek02IDEyaDRhMSAxIDAgMDExIDF2Ni43bDMuNjkgNC4zNy0yLjU4IDMuMDZMNiAyMy4yNFYxMnptNy44MSAxNi4yMmwyLjE5LTIuNiAyLjE5IDIuNkwxNiAyOS42MWwtMi4xOS0xLjM5em02LjA4LTEuMDlsLTIuNTgtMy4wNkwyMSAxOS43VjEzYTEgMSAwIDAxMS0xaDR2MTEuMjRsLTYuMTEgMy44OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAwaDI0djJINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuNDIgMTkuNjlhMTIgMTIgMCAwMS0yMy4xMS0xbDIuMjctLjQ1LTQuMzItNC40N0wwIDE5LjU1bDIuMzktLjQ3YTE0IDE0IDAgMDAyNyAxLjIzbC0xLjk3LS42MnptMi4yMy02Ljc3YTE0IDE0IDAgMDAtMjctMS4yM2wxLjkuNjJhMTIgMTIgMCAwMTIzLjExIDFsLTIuMjcuNDUgNC4zMiA0LjQ2TDMyIDEyLjQ1bC0yLjM1LjQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBVcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00LjIxNiAxMi4zNzdBMTAuOTQ4IDEwLjk0OCAwIDAwMi4xODEgMTdILjE1M2ExMi45NDEgMTIuOTQxIDAgMDEyLjY5My02LjExOGwxLjM3IDEuNDk1em0yLjk0OC0yLjcwM2wtMS4zNy0xLjQ5NUExMi45NCAxMi45NCAwIDAxMTMgNnYyYy0yLjE0NCAwLTQuMTQ0LjYxMy01LjgzNiAxLjY3NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2IDQuNDE0VjE5YzAgNy4xOC01LjgyIDEzLTEzIDEzQzYuNSAzMiAxLjExNSAyNy4yMy4xNTMgMjFIMi4xOGMuOTQgNS4xMiA1LjQyNyA5IDEwLjgxOSA5IDYuMDc1IDAgMTEtNC45MjUgMTEtMTFWNC40MTRsLTQuMjkzIDQuMjkzLTEuNDE0LTEuNDE0TDI1IC41ODZsNi43MDcgNi43MDctMS40MTQgMS40MTRMMjYgNC40MTR6bS03LjgzNiA5LjkwOWwxLjQ3MiAxLjM1NC03LjU3NyA4LjIzNS00LjgzNS00LjQ0MiAxLjM1My0xLjQ3MyAzLjM2NCAzLjA5IDYuMjIzLTYuNzY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVzZXJzUm9sZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXNlcnNSb2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjMwNyAzLjIxYTIuOTEgMi45MSAwIDEwLS4yMjMgMS45NCAxMS42MzYgMTEuNjM2IDAgMDE4LjIzMiA3LjA0OWwxLjc3NS0uNjk4YTEzLjU3NiAxMy41NzYgMCAwMC05Ljc4NC04LjI5MXptLTIuODIyIDEuNjM4YS45Ny45NyAwIDExMC0xLjkzOS45Ny45NyAwIDAxMCAxLjk0em0tNC4yNjcuODA1bC0uNzE3LTEuNzc0YTEzLjU3NiAxMy41NzYgMCAwMC04LjI5MSA5Ljc4NCAyLjkxIDIuOTEgMCAxMDEuOTQuMjIzIDExLjYzNiAxMS42MzYgMCAwMTcuMDY4LTguMjMzem0tOC4zNCAxMS44MDJhLjk3Ljk3IDAgMTEwLTEuOTQuOTcuOTcgMCAwMTAgMS45NHptMTIuNjA3IDguNzI3YTIuOTEgMi45MSAwIDAwLTIuNTk5IDEuNjIgMTEuNjM2IDExLjYzNiAwIDAxLTguMjMzLTcuMDVsLTEuNzc0LjcxN2ExMy41NzYgMTMuNTc2IDAgMDA5LjgxMyA4LjI5MSAyLjkxIDIuOTEgMCAxMDIuNzkzLTMuNTc4em0wIDMuODc5YS45Ny45NyAwIDExMC0xLjk0Ljk3Ljk3IDAgMDEwIDEuOTR6TTMyIDE2LjQ4NWEyLjkxIDIuOTEgMCAxMC00LjE5OSAyLjU5OSAxMS42MzYgMTEuNjM2IDAgMDEtNy4wNSA4LjIzMmwuNzE4IDEuNzc1YTEzLjU3NiAxMy41NzYgMCAwMDguMjkxLTkuODEzQTIuOTEgMi45MSAwIDAwMzIgMTYuNDg1em0tMi45MS45N2EuOTcuOTcgMCAxMTAtMS45NC45Ny45NyAwIDAxMCAxLjk0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOS4xOSAxNi4zNWEzLjg3OSAzLjg3OSAwIDEwLTUuNDIgMCA0Ljg0OCA0Ljg0OCAwIDAwLTIuMTM0IDQuMDE0djEuOTM5aDkuNjk3di0xLjk0YTQuODQ4IDQuODQ4IDAgMDAtMi4xNDMtNC4wMTR6bS00LjY0NS0yLjc3NGExLjk0IDEuOTQgMCAxMTMuODggMCAxLjk0IDEuOTQgMCAwMS0zLjg4IDB6bS0uOTcgNi43ODhhMi45MSAyLjkxIDAgMTE1LjgxOSAwaC01LjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXNlcnNSb2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVmlzdWFsaXplID0gZnVuY3Rpb24gRXVpSWNvbkFwcFZpc3VhbGl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMzIgMzJINGE0IDQgMCAwMS00LTRWMGgydjI4YTIgMiAwIDAwMiAyaDI4djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIwaDJ2N0g2ek0xNiAxMmgydjE1aC0yek0yNiAxN2gydjEwaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgNmEzIDMgMCAwMC0yLjA4Ljg0TDIwIDQuMzZBMi4yIDIuMiAwIDAwMjAgNGEzIDMgMCAwMC02IDBjLjAwMS4zNDEuMDYyLjY4LjE4IDFsLTUuNiA0LjQ2QTMgMyAwIDAwNyA5YTMgMyAwIDEwMyAzIDIuOTMgMi45MyAwIDAwLS4xOC0xbDUuNi00LjQ4QTMgMyAwIDAwMTcgN2EzIDMgMCAwMDIuMDgtLjg0bDUgMi40OEEyLjIgMi4yIDAgMDAyNCA5YTMgMyAwIDEwMy0zek03IDEzYTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMC04YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMCA1YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBWaXN1YWxpemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdhdGNoZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwV2F0Y2hlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzQgNy43M2wtMS41LTEuMzJhMTMgMTMgMCAwMDAgMTcuMTlsMS41LTEuMzJhMTEgMTEgMCAwMTAtMTQuNTR2LS4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTEgMy42Nkw1IDIuMzRjLTYuMzc3IDcuMjQtNi4zNzcgMTguMDkgMCAyNS4zM2wxLjUtMS4zMkMuNzkyIDE5Ljg2Ny43OTIgMTAuMTUzIDYuNSAzLjY3bC4wMS0uMDF6bTE3LjI1IDIuNzVsLTEuNSAxLjMyYTExIDExIDAgMDEwIDE0LjU0bDEuNSAxLjMyYTEzIDEzIDAgMDAwLTE3LjE5di4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDIuMzRsLTEuNSAxLjMyYzUuNzA4IDYuNDgzIDUuNzA4IDE2LjE5NyAwIDIyLjY4bDEuNSAxLjMzYzYuMzc3LTcuMjQgNi4zNzctMTguMDkgMC0yNS4zM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMTVhNSA1IDAgMTAtNiA0LjlWMzFoMlYxOS45YTUgNSAwIDAwNC00Ljl6bS01IDNhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFdhdGNoZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MSAxSDJ2MzBoNS44MTVjMS43MDUgMCAzLjM0My0uNzgzIDQuMzgtMi4wOTRsMy4xODItNC4wMjMuMDA2LjAwNiAyLjYwNy0zLjEzNy4wMS0uMDE0YTkuNDIgOS40MiAwIDAwMS45NTMtNC44MjYgOS4xMTIgOS4xMTIgMCAwMC0xLjg5MS02LjUyMmwtLjAxLS4wMTItMi42MDMtMy4xNTZMMTIuMTk3IDMuMUMxMS4xNiAxLjc4NiA5LjUyIDEgNy44MSAxem02LjExOCA3LjUyM2wtMy4zMS00LjE5NUM5Ljk2OCAzLjUxMiA4LjkxNyAzIDcuODEgM0g0djI2aDMuODE1YzEuMSAwIDIuMTUtLjUwOCAyLjgtMS4zMmwzLjMzLTQuMjEtMS43OTYtMS43Ny0uMDI3LS4wMzNjLTIuODQtMy4zMTctMi44My04LjE5NS4wMjgtMTEuMjg3bC4wMDQtLjAwNGE5OC44OTMgOTguODkzIDAgMDExLjc3NC0xLjg1M3ptNC4wNDMgOC4wOTljLS4xMiAxLjI3OS0uNjE2IDIuNTM3LTEuNDkgMy42NGwtMS4yODggMS42My0xLjU3OC0xLjU1NmMtMi4xOS0yLjU5LTIuMTE4LTYuMy4wMDEtOC41OTYuNi0uNjQgMS4xMTktMS4xODMgMS41NjEtMS42MzVsMS4yOTMgMS42Mzh2LjAwMmwuMDE0LjAxNmMuOTQyIDEuMTkyIDEuNDQ2IDIuNTY0IDEuNTEgMy45NDlhNy4wOSA3LjA5IDAgMDEtLjAyMy45MTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMy44MDEgM2MtLjM4MiAwLTEuMDUyLjIzMS0xLjkyNS44MTItLjYzNi40MjItMS4yMjguOTI4LTEuNjc3IDEuMzU3bDEuNzcxIDIuMjQ1LjAwNS4wMDcuMDI0LjAzLjAwOC4wMWM0LjAwMyA1LjA5OSAzLjk5IDEyLjA1Ny0uMDM1IDE3LjE0NWwtMS43OTMgMi4yNjdhOC4yMDYgOC4yMDYgMCAwMDEuNzY5IDEuNDk4Yy42OTguNDI3IDEuMzM3LjYyOSAxLjg1Mi42MjlIMjhWM2gtNC4xOTl6bS02LjE0OCAyMy44NDJsLjc2NSAxLjA1My4wMjMuMDI3Yy43MTcuODUxIDEuNTY2IDEuNjA3IDIuNDY0IDIuMTU2Ljg5LjU0NCAxLjg5LjkyMiAyLjg5NS45MjJIMzBWMWgtNi4xOTljLS45ODcgMC0yLjA2Ni41MDUtMy4wMzIgMS4xNDZhMTQuOTM0IDE0LjkzNCAwIDAwLTIuMzUyIDEuOTc0bC0uMjc2LjI4OC0uNTk1LjYyOCAyLjg1NSAzLjYxOS4wMDYuMDA2YzMuNDU5IDQuMzc1IDMuNDU3IDEwLjMyOS0uMDA0IDE0LjcwNGwtMi43NSAzLjQ3N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBzID0gZnVuY3Rpb24gRXVpSWNvbkFwcHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWMmgydjJIMnptNSAwVjJoMnYySDd6bTUgMFYyaDJ2MmgtMnpNMiA5VjdoMnYySDJ6bTUgMFY3aDJ2Mkg3em01IDBWN2gydjJoLTJ6TTIgMTR2LTJoMnYySDJ6bTUgMHYtMmgydjJIN3ptNSAwdi0yaDJ2MmgtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dFbmQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dFbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODU3IDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0VuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dTdGFydCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1N0YXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy4xMzUgMTQuMDQzYS43NS43NSAwIDAwLjAyNS0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93U3RhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93RG93biA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0Rvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDQuOTgyYS43NS43NSAwIDAxMS4wNi0uMDI1bDQuODEgNC41OTFhLjI1LjI1IDAgMDAuMzQ2IDBsNC44MS00LjU5YS43NS43NSAwIDAxMS4wMzUgMS4wODVsLTQuODEgNC41OWExLjc1IDEuNzUgMCAwMS0yLjQxNiAwbC00LjgxLTQuNTlhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0Rvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjAxOCAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI0LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwMDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43NjEuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljk4MiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dVcCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1VwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xLjk1NyAxMS4wMThjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNGw0LjgxLTQuNTlhLjI1LjI1IDAgMDEuMzQ2IDBsNC44MSA0LjU5YS43NS43NSAwIDAwMS4wMzUtMS4wODVsLTQuODEtNC41OWExLjc1IDEuNzUgMCAwMC0yLjQxNiAwbC00LjgxIDQuNTlhLjc1Ljc1IDAgMDAtLjAyNSAxLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1VwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Bc3RlcmlzayA9IGZ1bmN0aW9uIEV1aUljb25Bc3RlcmlzayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTI4IDguNDY4TDQgNy42MThsLjQ0Ni0xLjQyN0w3LjM3NSA3LjI1IDcuMjg3IDRoMS40ODRsLS4wOTcgMy4yOTYgMi44OC0xLjAzOUwxMiA3LjY5M2wtMi45NzcuODYgMS45MiAyLjU2TDkuNzQxIDEyIDcuOTM3IDkuMjhsLTEuNzQ1IDIuNjU0LTEuMjEzLS44NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXN0ZXJpc2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJlYWtlciA9IGZ1bmN0aW9uIEV1aUljb25CZWFrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI3NyAxMC4wODhjLjAyLjAxNC4wNC4wMy4wNTcuMDQ3LjU4Mi41NSAxLjEzNC44MTIgMS42NjYuODEyLjU4NiAwIDEuODQtLjI5MyAzLjcxMy0uODhMOSA2LjIxMlYySDd2NC4yMTJsLTEuNzIzIDMuODc2em0tLjQzOC45ODdMMy41MzkgMTRoOC45MjJsLTEuMzItMi45NjlDOS4wOTYgMTEuNjc3IDcuNzMzIDEyIDcgMTJjLS43NCAwLTEuNDYzLS4zMTUtMi4xNjEtLjkyNXpNNiAySDVWMWg2djFoLTF2NGwzLjM3NSA3LjU5NEExIDEgMCAwMTEyLjQ2MSAxNUgzLjU0YTEgMSAwIDAxLS45MTQtMS40MDZMNiA2VjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlYWtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQmVsbCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMzE2IDEyaDEwLjM2OGMtLjE4OC0uNzA0LS4yOC0xLjY5MS0uMzQ4LTMuMDM3LS4wNy0xLjM4Mi0uMTAzLTEuODg4LS4xOS0yLjYxMi0uMDI4LS4yMzYtLjA2LS40NjItLjA5Ni0uNjgtLjMxLTEuODkyLTEuNTA2LTIuOTIzLTMuNzA4LTMuMTMxYTEgMSAwIDEwLTEuNjg0IDBjLTIuMjAyLjIwOC0zLjM5NyAxLjI0LTMuNzA4IDMuMTNhMTYuMDEgMTYuMDEgMCAwMC0uMDk2LjY4Yy0uMDg3LjcyNS0uMTIgMS4yMy0uMTkgMi42MTMtLjA2OCAxLjM0Ni0uMTYgMi4zMzMtLjM0OCAzLjAzN3ptMTAuODQzIDFIMS44NGMtLjMwOC4zNTMtLjczNy41LTEuMzQxLjVhLjUuNSAwIDExMC0xYy43ODYgMCAxLjAyNC0uNzgzIDEuMTY2LTMuNTg3LjA3LTEuNDA3LjEwNS0xLjkyNi4xOTYtMi42ODEuMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQxIDEuNTQ2LTMuMzEzIDMuNTU2LTMuNzkyYTIgMiAwIDAxMy45NiAwYzIuMDEuNDc5IDMuMjIyIDEuNzUgMy41NTcgMy43OTJhMTcgMTcgMCAwMS4xMDIuNzI0Yy4wOS43NTUuMTI1IDEuMjc0LjE5NiAyLjY4MS4xNCAyLjgwNC4zNzkgMy41ODcgMS4xNjUgMy41ODdhLjUuNSAwIDExMCAxYy0uNjA0IDAtMS4wMzMtLjE0Ny0xLjM0MS0uNXpNNS41IDE0aDRhMiAyIDAgMTEtNCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CZWxsU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uQmVsbFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDE0bC0uMDA1LjE1YTIgMiAwIDAxLTMuOTcyLjE1M2wtLjAxOC0uMTU0TDUuNSAxNGg0em01LjM4LTEyLjgyNWEuNS41IDAgMDEuMDA4LjY0bC0uMDYzLjA2NS0xNCAxMmEuNS41IDAgMDEtLjcxMy0uNjk1bC4wNjMtLjA2NSAxNC0xMmEuNS41IDAgMDEuNzA1LjA1NXpNMTMuMDM2IDUuNTFsLjA1NS4zNTMuMDQ4LjM2OGMuMDY2LjU1NC4xMDMuOTguMTQ1IDEuNzI0bC4wOCAxLjQ5MWMuMTQ2IDIuMzcxLjQwMiAzLjA1MyAxLjEzNiAzLjA1M2EuNS41IDAgMTEwIDFjLS42MDMgMC0xLjAzMS0uMTQ2LTEuMzQtLjQ5OUg0LjE4NWwxLjE4Mi0xaDcuMzE3Yy0uMTcyLS42NDQtLjI2NC0xLjUyOC0uMzMtMi43MDhsLS4wOS0xLjYzOGMtLjAzMy0uNTE0LS4wNjYtLjg3LS4xMTgtMS4zMDRsLS4wMTEtLjA3Ny45MDEtLjc2M3pNNy41IDBhMiAyIDAgMDExLjk4IDEuNzE3Yy40NzYuMTEzLjkwNy4yNyAxLjI5Mi40NzJsLS44MzguNzFhNS43MjggNS43MjggMCAwMC0xLjU5MS0uMzYgMSAxIDAgMTAtMS42ODQgMEM0LjQ1NSAyLjc1IDMuMjYgMy43OCAyLjk1IDUuNjcxbC0uMDUuMzM0LS4wNDYuMzQ3Yy0uMDguNjc2LS4xMTUgMS4xNjEtLjE3NiAyLjM0N2wtLjAxNC4yNjUtLjAwNS4wOS0xLjA1OC44OTdjLjAxOC0uMjM0LjAzNS0uNDg4LjA1LS43NjNsLjA3Ny0xLjQyN2MuMDM4LS42MjYuMDczLTEuMDI1LjEzNC0xLjUyOC4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNCAxLjU0Ni0zLjMxMyAzLjU1NS0zLjc5MmwuMDA0LS4wMTlBMiAyIDAgMDE3LjUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVsbFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb2x0ID0gZnVuY3Rpb24gRXVpSWNvbkJvbHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA0IDEzLjI3NGEuNS41IDAgMTAuODkyLjQ1M2wzLjAxNC01LjkzMWEuNS41IDAgMDAtLjQ0NS0uNzI3SDUuMzE2TDguMDMgMS43MjdhLjUuNSAwIDEwLS44OTItLjQ1M0w0LjA1NSA3LjM0M2EuNS41IDAgMDAuNDQ2LjcyNmg1LjE4NUw3LjA0IDEzLjI3NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm9sdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQm94ZXNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNmg0djRIMFY2em0xIDF2MmgyVjdIMXptNS0xaDR2NEg2VjZ6bTEgMXYyaDJWN0g3em01LTFoNHY0aC00VjZ6bTEgM2gyVjdoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm94ZXNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb3hlc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDF2MmgyVjFIN3pNNiAwaDR2NEg2VjB6bTAgNmg0djRINlY2em0xIDF2MmgyVjdIN3ptLTEgNWg0djRINnYtNHptMSAxdjJoMnYtMkg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CcmFuY2ggPSBmdW5jdGlvbiBFdWlJY29uQnJhbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMC4wMzhhMy40OSAzLjQ5IDAgMDEyLjUtMS4wNWgyYTIuNSAyLjUgMCAwMDIuNDYyLTIuMDYxIDIgMiAwIDExMS4wMDguMDE3QTMuNSAzLjUgMCAwMTkuNSA5Ljk4N2gtMmEyLjUgMi41IDAgMDAtMi40NjYgMi4wODVBMiAyIDAgMTE0IDEyLjA2M1YzLjkzN2EyIDIgMCAxMTEgMHY2LjF6TTQuNSAzYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0wIDEyYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem04LTlhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJhbmNoVXNlciA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2hVc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgNy45ODdhMy40OSAzLjQ5IDAgMDAtMi41IDEuMDV2LTQuMWEyIDIgMCAxMC0xIDB2Ni4xMjZhMiAyIDAgMTAxLjAzNC4wMUEyLjUgMi41IDAgMDE2IDguOTg2aDFhMy41IDMuNSAwIDAwMy40Ny0zLjA0MyAyIDIgMCAxMC0xLjAwOS0uMDE3QTIuNSAyLjUgMCAwMTcgNy45ODdINnpNNCAzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptMCAxMGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bTctOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAxMC41YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwek05IDE1Yy4yODQtMS4yMjMgMS41MTktMi4xNDMgMy0yLjE0M3MyLjcxNi45MiAzIDIuMTQzSDl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaFVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJyb29tID0gZnVuY3Rpb24gRXVpSWNvbkJyb29tKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43MzIgMTMuMDk2bC0uMTk3LS4xOTcgMi44My0yLjgyOC43MDYuNzA3LTIuODI5IDIuODI4LjcwOC43MDggMi44MjgtMi44MjhhMSAxIDAgMDAwLTEuNDE0TDUuNjU4IDcuOTVhLjk5My45OTMgMCAwMC0uNzA4LS4yOTMuOTk0Ljk5NCAwIDAwLS43MDguMjkzbC0yLjgyOCAyLjgyOS43MDcuNzA3IDIuODI5LTIuODMuNzA3LjcwOC0yLjgyOSAyLjgyOS45MDQuOTAzem0xLjIxOC02LjQ0Yy41MTIgMCAxLjAyMy4xOTYgMS40MTQuNTg3bDIuMTIxIDIuMTJhMiAyIDAgMDEwIDIuODNMNC45NSAxNS43MjggMCAxMC43NzhsMy41MzUtMy41MzVhMS45OTMgMS45OTMgMCAwMTEuNDE1LS41ODZ6TTE0LjAyIDFsLjcwOC43MDctNi45NSA2Ljk1LS43MDctLjcwN0wxNC4wMjEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJvb207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJydXNoID0gZnVuY3Rpb24gRXVpSWNvbkJydXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAxMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3em0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZ6TTQgNS42NThWMS4wMDVoMS4yNjJ2NC42NTNINHptMi4yNjEgMFYxLjAwNWgxLjI0NHY0LjY1M0g2LjI2em0yLjI0NCAwVjEuMDA1aDEuMjM1djQuNjUzSDguNTA0em0yLjIzNCAwVjEuMDA1aDEuMjU0djQuNjUzaC0xLjI1NHpNMy4wMDggMEwzIDguMTdhMi41MDkgMi41MDkgMCAwMDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAwMi40OTgtMi41MTJMMTMgMEgzLjAwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJ1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJ1ZyA9IGZ1bmN0aW9uIEV1aUljb25CdWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42NTEgNS4xMjZsLjkyMi0uNDU1Ljg4NC0yLjM0M2EuNS41IDAgMDEuOTM5LjM0NEwxMi4zNzQgNS4zOWwtMS40NS43MTdBNS4zIDUuMyAwIDAxMTEgN2gxLjA0M2wyLjMgMi4xOThhLjUuNSAwIDAxLS42OTIuNzIzTDExLjY0MiA4aC0uNzM3Yy0uMDkuNDY2LS4yNC44OTktLjQ0MSAxLjI4M2wuODkyLjQ5IDEuMjc4IDMuNTU0YS41LjUgMCAwMS0uOTQuMzQybC0xLjE1LTMuMi0uNjU1LS4zNkM5LjM3MyAxMC42NjUgOC43MTYgMTEgOCAxMXMtMS4zNzQtLjMzNS0xLjg5LS44OTNsLS42NTguMzYxLTEuMTUgMy4yMDFhLjUuNSAwIDExLS45NC0uMzQybDEuMjc5LTMuNTU0Ljg5NS0uNDkxQTQuNyA0LjcgMCAwMTUuMDk1IDhoLS43NGwtMi4wMSAxLjkyYS41LjUgMCAwMS0uNjktLjcyMkwzLjk1MiA3SDVhNS4zIDUuMyAwIDAxLjA3NS0uODkyTDMuNjIzIDUuMzkgMi42IDIuNjcyYS41LjUgMCAxMS45MzktLjM0NGwuODg0IDIuMzQzLjkyNC40NTdjLjE3LS40MjguMzk3LS44MS42NjgtMS4xMjhoLjU3YTEuNSAxLjUgMCAxMTIuODMgMGguNTY4Yy4yNy4zMTguNDk3LjY5OS42NjcgMS4xMjZ6TTggNGEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0xLjc1MSAxLjU3MUEzLjMyNiAzLjMyNiAwIDAwOS40NzYgNUg2LjUyNGMtLjEwNy4xNzUtLjIuMzY3LS4yNzYuNTczLS4xMS4yOTUtLjE4Ni42MTgtLjIyMy45NTdhNC4zNTQgNC4zNTQgMCAwMC4wOSAxLjQ2NWMuMDcxLjI5NC4xNzIuNTY1LjI5NS44MDYuMTY4LjMyOC4zOC42MDEuNjE2LjgwMy4yOTUuMjUzLjYzMS4zOTYuOTc0LjM5Ni4zNDIgMCAuNjc4LS4xNDIuOTczLS4zOTQuMjM3LS4yMDMuNDQ4LS40NzYuNjE2LS44MDNhMy42MiAzLjYyIDAgMDAuMjk2LS44MDcgNC4yNjMgNC4yNjMgMCAwMC4wOS0xLjQ2NiAzLjk4OCAzLjk4OCAwIDAwLS4yMjQtLjk1OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnVnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CdWxsc2V5ZSA9IGZ1bmN0aW9uIEV1aUljb25CdWxsc2V5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMTA4IDJhNiA2IDAgMDAwIDEyem0wIDFBNyA3IDAgMTE4IDFhNyA3IDAgMDEwIDE0em0wLTNhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAtMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0yYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWxsc2V5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2FsZW5kYXIgPSBmdW5jdGlvbiBFdWlJY29uQ2FsZW5kYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCA0di0uOTk0QzE0IDIuNDUgMTMuNTUgMiAxMi45OTQgMkgxMXYxaC0xVjJINnYxSDVWMkgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0aDkuOTg4QzEzLjU1IDE0IDE0IDEzLjU1IDE0IDEyLjk5NFY1SDJWNGgxMnptLTMtM2gxLjk5NEMxNC4xMDIgMSAxNSAxLjg5NyAxNSAzLjAwNnY5Ljk4OEEyLjAwNSAyLjAwNSAwIDAxMTIuOTk0IDE1SDMuMDA2QTIuMDA1IDIuMDA1IDAgMDExIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1VjBoMXYxaDRWMGgxdjF6TTQgN2gydjFINFY3em0zIDBoMnYxSDdWN3ptMyAwaDJ2MWgtMlY3ek00IDloMnYxSDRWOXptMyAwaDJ2MUg3Vjl6bTMgMGgydjFoLTJWOXptLTYgMmgydjFINHYtMXptMyAwaDJ2MUg3di0xem0zIDBoMnYxaC0ydi0xelwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2FsZW5kYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNSAxMmEuNTAyLjUwMiAwIDAxLS4zNTQtLjE0NmwtNC00YS41MDIuNTAyIDAgMDEuNzA4LS43MDhMNi41IDEwLjc5M2w2LjY0Ni02LjY0N2EuNTAyLjUwMiAwIDAxLjcwOC43MDhsLTcgN0EuNTAyLjUwMiAwIDAxNi41IDEyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTMuNjUtMTAuODU3TDYuOTEgOS44IDQuMzUgNy4yODZhLjUuNSAwIDAwLS43LjcxNGwyLjkwOSAyLjg1N2EuNS41IDAgMDAuNyAwbDUuMDkxLTVhLjUuNSAwIDEwLS43LS43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWVyID0gZnVuY3Rpb24gRXVpSWNvbkNoZWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MzQgMy4wNjNhMS41IDEuNSAwIDAxLjU0Ny4zMjFsLjExMi4xMTUgNi4wNyA2LjkxNWExLjUgMS41IDAgMDEtLjY0NiAyLjQxbC0uMTQyLjA0LTkuMDMxIDIuMDk3QTEuNSAxLjUgMCAwMS4wMzcgMTMuMTlsLjA0My0uMTU5TDMuMDQgNC4wMmExLjUgMS41IDAgMDExLjg5My0uOTU3ek00LjAyNyA0LjI1bC0uMDM2LjA4My0yLjk2MSA5LjAxMWEuNS41IDAgMDAuNDk4LjY1NmwuMDktLjAxMyAyLjkzNy0uNjgxLTEuMzk5LTEuNTA4YS41LjUgMCAwMS42NjYtLjc0bC4wNjcuMDYgMS43ODggMS45MjcgMi42MzQtLjYxMS0zLjE5OC0zLjYwMWEuNS41IDAgMDEuNjgyLS43MjZsLjA2Ni4wNjIgMy41NTkgNC4wMDcgMS4yMjktLjI4NGEuNS41IDAgMDAuMTUtLjA2M2wuMDY3LS4wNDlhLjUuNSAwIDAwLjA5OS0uNjMybC0uMDUzLS4wNzMtNi4wNy02LjkxNmEuNS41IDAgMDAtLjEzOC0uMTFsLS4wODItLjAzNS0uMDg4LS4wMmEuNS41IDAgMDAtLjUwNy4yNTZ6bTExLjY2IDUuMDM5YTIuNSAyLjUgMCAwMS0uOTc1IDMuMzk5LjUuNSAwIDAxLS40ODUtLjg3NSAxLjUgMS41IDAgMDAtMS40NTQtMi42MjQuNS41IDAgMDEtLjQ4NS0uODc1IDIuNSAyLjUgMCAwMTMuMzk5Ljk3NXptLTUuMDMtNi4yMDZhLjUuNSAwIDAxLjMzOC41NDRsLS4wMi4wODgtLjY3NyAyLjAzNSAyLjA2OC0uNzIxYS41LjUgMCAwMS42LjIyNWwuMDM2LjA4MmEuNS41IDAgMDEtLjIyNS42bC0uMDgyLjAzN0w5LjY3IDcuMDI4YS41LjUgMCAwMS0uNjU5LS41NWwuMDItLjA4Ljk5NS0zYS41LjUgMCAwMS42MzItLjMxNnpNMTQuNSA0YS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTcuODYyLjQwM2EyLjUgMi41IDAgMDEuNzM1IDMuNDU5LjUuNSAwIDAxLS44MzktLjU0NSAxLjUgMS41IDAgMTAtMi41MTYtMS42MzQuNS41IDAgMDEtLjgzOS0uNTQ1QTIuNSAyLjUgMCAwMTcuODYyLjQwM3pNMTMuNSAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0zLTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptNC0xYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG9jayA9IGZ1bmN0aW9uIEV1aUljb25DbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTNBNS41MDYgNS41MDYgMCAwMTIgNy41QzIgNC40NjcgNC40NjcgMiA3LjUgMlMxMyA0LjQ2NyAxMyA3LjUgMTAuNTMzIDEzIDcuNSAxM20wLTEyYTYuNSA2LjUgMCAxMDAgMTMgNi41IDYuNSAwIDAwMC0xM20zIDZIOFYzLjVhLjUuNSAwIDAwLTEgMHY0YS41LjUgMCAwMC41LjVoM2EuNS41IDAgMDAwLTFcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb3VkRHJpenpsZSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZERyaXp6bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjM0OCAzLjc2MUEzLjk5NSAzLjk5NSAwIDAxOCA3YS41LjUgMCAwMS0xIDAgMyAzIDAgMTAtNC44NzggMi4zNC41LjUgMCAwMS0uNjI3Ljc3OSA0IDQgMCAwMTMuOTczLTYuODQgNS41MDIgNS41MDIgMCAwMTEwLjA5NiA0LjM3LjUuNSAwIDExLS45Mi0uMzkgNC41IDQuNSAwIDEwLTguMjk2LTMuNDk3em0tMS42MSA0LjkzNWEuNS41IDAgMTEuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDExLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MnptLTMuMTIgMy42NDdhLjUuNSAwIDAxLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAxLS43NzQtLjYzNGwxLjUwNS0xLjg0em03LjYyLTMuNjQ3YS41LjUgMCAwMS43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMTEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyem0tMy4xMiAzLjY0N2EuNS41IDAgMDEuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMDEtLjc3NC0uNjM0bDEuNTA1LTEuODR6bTcuNjItMy42NDdhLjUuNSAwIDExLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxMS0uNzc0LS42MzNsMS40NjYtMS43OTJ6bS0zLjEyIDMuNjQ3YS41LjUgMCAwMS43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwMS0uNzc0LS42MzRsMS41MDUtMS44NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWREcml6emxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG91ZFN0b3JteSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN0b3JteShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDIxIDQuOTNhLjUuNSAwIDExLS44Ny40OSAzIDMgMCAxMC00LjQzIDMuOTE4LjUuNSAwIDAxLS42MjYuNzggNCA0IDAgMDEzLjk3My02Ljg0bC4wMzIuMDE4VjMuMjhhNS41IDUuNSAwIDExNy4wMDMgNy4zNTcuNS41IDAgMTEtLjM2LS45MzQgNC41IDQuNSAwIDEwLTUuNzctNS45MjNjLjQyLjMxLjc3OC43MDEgMS4wNSAxLjE1aC0uMDAyek05LjYgMTFjLjY2OS4wMDIuNzk0LjY3LjM2IDEuMDAzbC00LjY4IDMuODgyYy0uNDU3LjM3OC0xLjA1My0uMjYtLjY0My0uNjg5bDMuMDgtMy4xOTNBNTQxMS43IDU0MTEuNyAwIDAxNS4xMTMgMTJjLS42NjgtLjAwMS0uNzkzLS42NjktLjM2LTEuMDAzbDQuNjgtMy44ODFjLjQ1OC0uMzc5IDEuMDUzLjI2LjY0My42ODhsLTMuMDggMy4xOTNMOS42IDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN0b3JteTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2xvdWRTdW5ueSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN1bm55KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzQ2IDUuMDA1QTUuNSA1LjUgMCAwMTEwLjUgMTZINGE0IDQgMCAwMS0xLjYxLTcuNjYzQTQuNDczIDQuNDczIDAgMDEyLjAyOSA3SC41YS41LjUgMCAwMTAtMWgxLjUyN2E0LjQ3OSA0LjQ3OSAwIDAxLjk1Ny0yLjMwOUwxLjY0NiAyLjM1NGEuNS41IDAgMTEuNzA4LS43MDhMMy42OSAyLjk4NEE0LjQ3OSA0LjQ3OSAwIDAxNiAyLjAyN1YuNWEuNS41IDAgMDExIDB2MS41MjhhNC40OTMgNC40OTMgMCAwMTIuMzA5Ljk1NmwxLjMzNy0xLjMzOGEuNS41IDAgMDEuNzA4LjcwOEwxMC4wMTYgMy42OWMuMzExLjM4OC41Ni44MzEuNzMgMS4zMTR6TTQgMTVoNi41YTQuNSA0LjUgMCAxMC00LjE1Mi02LjIzOUEzLjk5NSAzLjk5NSAwIDAxOCAxMmEuNS41IDAgMTEtMSAwIDMgMyAwIDEwLTMgM3ptNS42OTEtOS45NGEzLjUgMy41IDAgMTAtNi4zMyAyLjk5MSA0LjAyOSA0LjAyOSAwIDAxMi4xMDYuMjI3IDUuNTA1IDUuNTA1IDAgMDE0LjIyNC0zLjIxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWRTdW5ueTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2x1c3RlciA9IGZ1bmN0aW9uIEV1aUljb25DbHVzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgN2EyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em0wLTZhMy41IDMuNSAwIDAxMy40NjUgM2gzLjEyYTEuNSAxLjUgMCAxMTAgMWgtMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLS42NjIgMS41OTZsMi4xIDIuMUEzLjUgMy41IDAgMTE4LjAzNiAxMmgtMy4xMmExLjUgMS41IDAgMTEwLS45OTloMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLjY2Mi0xLjU5NmwtMi4xLTIuMUEzLjUgMy41IDAgMTE0LjUgMXpNMTIgNC41YS41LjUgMCAxMDEgMCAuNS41IDAgMDAtMSAwem0tLjUgOS41YTIuNSAyLjUgMCAxMTAtNSAyLjUgMi41IDAgMDEwIDV6TTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2x1c3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29sb3IgPSBmdW5jdGlvbiBFdWlJY29uQ29sb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxMWMxLjMzNCAxLjM5MyAyIDIuNDM1IDIgMy4xMjVDMTUgMTUuMTYxIDE0LjEwNSAxNiAxMyAxNmMtMS4xMDQgMC0yLS44NC0yLTEuODc1IDAtLjY5LjY2Ny0xLjczMiAyLTMuMTI1ek01Ljg1Ny4xNWw2LjM0IDYuNDUuMDE2LjAyLjMyNC4zMjFhMS41IDEuNSAwIDAxLjExIDIuMDA2bC0uMTAzLjExNC00LjQ3NCA0LjUxM2ExLjUgMS41IDAgMDEtMi4xMjMuMDA4TDEuNDY0IDkuMDZhMS41IDEuNSAwIDAxLjAwNy0yLjEybDQuNDcyLTQuNDVjLjE0NS0uMTQ2LjMxMy0uMjU0LjQ5Mi0uMzI3TDUuMTQ0Ljg1YS41LjUgMCAwMS43MTMtLjd6bTEuNDk2IDMuMDQ5YS41LjUgMCAwMC0uNzA1IDBMMi4xNzcgNy42NWEuNDk4LjQ5OCAwIDAwLS4xNDguMzVoOS45NWEuNDk4LjQ5OCAwIDAwLS4xNDgtLjM1TDcuMzUzIDMuMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29sb3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbXB1dGUgPSBmdW5jdGlvbiBFdWlJY29uQ29tcHV0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgM2ExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjRhMSAxIDAgMDAtMS0xSDR6bTEwIDh2MWEyIDIgMCAwMS0yIDJoLTF2MmgtMXYtMkg4LjV2MmgtMXYtMkg2djJINXYtMkg0YTIgMiAwIDAxLTItMnYtMUgwdi0xaDJWOC41SDB2LTFoMlY2SDBWNWgyVjRhMiAyIDAgMDEyLTJoMVYwaDF2MmgxLjVWMGgxdjJIMTBWMGgxdjJoMWEyIDIgMCAwMTIgMnYxaDJ2MWgtMnYxLjVoMnYxaC0yVjEwaDJ2MWgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiA2LFxuICAgIGhlaWdodDogNixcbiAgICB4OiA1LFxuICAgIHk6IDUsXG4gICAgcng6IDFcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbXB1dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnNvbGUgPSBmdW5jdGlvbiBFdWlJY29uQ29uc29sZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTU3IDEyLjIyNEw1Ljc2OCA4LjMyYS40MDQuNDA0IDAgMDAwLS42NGwtNC42MS0zLjkwNGEuNDA3LjQwNyAwIDAxMC0uNjQzLjYwOC42MDggMCAwMS43NTkgMGw0LjYxIDMuOTA0Yy42MzEuNTM0LjYzIDEuMzkzIDAgMS45MjZsLTQuNjEgMy45MDRhLjYwOC42MDggMCAwMS0uNzYgMCAuNDA3LjQwNyAwIDAxMC0uNjQzek05IDEyaDZ2MUg5di0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db25zb2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250YWluZXIgPSBmdW5jdGlvbiBFdWlJY29uQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDIuNUEuNS41IDAgMDEuNSAyaDE1YS41LjUgMCAwMTAgMUgxNXYxMGguNWEuNS41IDAgMDEwIDFILjVhLjUuNSAwIDAxMC0xSDFWM0guNWEuNS41IDAgMDEtLjUtLjV6TTIgM2gxMnYxMEgyVjN6bTMgMmEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA1IDV6bTUuNS41YS41LjUgMCAwMTEgMHY1YS41LjUgMCAwMS0xIDB2LTV6TTggNWEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA4IDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRhaW5lcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05YS41LjUgMCAwMC0uNS0uNXptMyAwYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwVjloNnYxLjVhLjUuNSAwIDAwLjgyLjM4NGwzLTIuNWEuNS41IDAgMDAwLS43NjhsLTMtMi41QS41LjUgMCAwMDExIDUuNVY3SDVWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAzYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtMSAwVjlINHYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE0IDUuNVY3aDJWMy41YS41LjUgMCAwMS41LS41em0zIDBhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDBWOWgydjEuNWEuNS41IDAgMDAuODIuMzg0bDMtMi41YS41LjUgMCAwMDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAwMTIgNS41VjdoLTJWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS41IDNhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0xIDBWOUg1djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTUgNS41VjdoNlYzLjVhLjUuNSAwIDAxLjUtLjV6bTMgMGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDAxLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5V2l0aGluID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05QS41LjUgMCAwMC41IDN6bTE0LjUuNWEuNS41IDAgMDExIDB2OWEuNS41IDAgMDEtMSAwdi05em0tNC43MTIgMS41NDdhLjUuNSAwIDAxLjUzMi4wNjlsMyAyLjVhLjUuNSAwIDAxMCAuNzY4bC0zIDIuNUEuNS41IDAgMDExMCAxMC41VjlINnYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE2IDUuNVY3aDRWNS41YS41LjUgMCAwMS4yODgtLjQ1M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eVdpdGhpbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA1IDEwYTIuNSAyLjUgMCAwMTQuOSAwaDEuNTVhLjUuNSAwIDExMCAxaC0xLjU1YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDExMC0xaDYuNTV6bS0uMS00YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDAxMC0xaDEuNTVhMi41IDIuNSAwIDAxNC45IDBoNi41NWEuNS41IDAgMTEwIDFINy45NXpNNCA1LjVhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6bTggNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250cm9sc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNy45NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDExMSAwdjEuNTVhMi41IDIuNSAwIDAxMCA0Ljl2Ni41NWEuNS41IDAgMTEtMSAwVjcuOTV6bS00IC4xYTIuNSAyLjUgMCAwMTAgNC45djEuNTVhLjUuNSAwIDExLTEgMHYtMS41NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDAxMSAwdjYuNTV6TTUuNSAxMmExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem01LThhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29weSA9IGZ1bmN0aW9uIEV1aUljb25Db3B5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNCAwYy4yMzUgMCAuNDYuMDk5LjYyMi4yNzNsMi43NDMgM2MuMTUxLjE2Mi4yMzUuMzc4LjIzNS42MDJ2OS4yNWEuODY3Ljg2NyAwIDAxLS44NTcuODc1SDMuODU3QS44NjcuODY3IDAgMDEzIDEzLjEyNVYuODc1QzMgLjM5MiAzLjM4NCAwIDMuODU3IDBIMTEuNHpNMTQgNGgtMi42YS40LjQgMCAwMS0uNC0uNFYxSDR2MTJoMTBWNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMUgyYTEgMSAwIDAwLTEgMXYxM2ExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMXYtMWgtMXYxSDJWMmgxVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvcHlDbGlwYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQ29weUNsaXBib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi43MjlWMmExIDEgMCAwMTEtMWgydjFIM3YxMmg0djFIM2ExIDEgMCAwMS0xLTFWMi43Mjl6TTE0IDVWMmExIDEgMCAwMC0xLTFoLTJ2MWgydjNoMXptLTEgMWgydjlIOFY2aDVWNUg4YTEgMSAwIDAwLTEgMXY5YTEgMSAwIDAwMSAxaDdhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFoLTJ2MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoNVY5SDl2MXptMC0yaDVWN0g5djF6bTAgNGg1di0xSDl2MXptMCAyaDV2LTFIOXYxem0yLTEyVjFhMSAxIDAgMDAtMS0xSDZhMSAxIDAgMDAtMSAxdjFoMVYxaDR2MWgxek01IDNoNlYySDV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weUNsaXBib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3MgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI5MyA4TDMuMTQ2IDMuODU0YS41LjUgMCAxMS43MDgtLjcwOEw4IDcuMjkzbDQuMTQ2LTQuMTQ3YS41LjUgMCAwMS43MDguNzA4TDguNzA3IDhsNC4xNDcgNC4xNDZhLjUuNSAwIDAxLS43MDguNzA4TDggOC43MDdsLTQuMTQ2IDQuMTQ3YS41LjUgMCAwMS0uNzA4LS43MDhMNy4yOTMgOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43NDYgOGwzLjEtMy4xYS41MjcuNTI3IDAgMTAtLjc0Ni0uNzQ2TDggNy4yNTRsLTMuMS0zLjFhLjUyNy41MjcgMCAxMC0uNzQ2Ljc0NmwzLjEgMy4xLTMuMSAzLjFhLjUyNy41MjcgMCAxMC43NDYuNzQ2bDMuMS0zLjEgMy4xIDMuMWEuNTI3LjUyNyAwIDEwLjc0Ni0uNzQ2TDguNzQ2IDh6TTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQUNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3NoYWlycyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc2hhaXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44MjIgMS44NzRhLjUuNSAwIDExLjMzNS45NDIgNS41MTcgNS41MTcgMCAwMC0zLjM0IDMuMzQxLjUuNSAwIDExLS45NDMtLjMzNSA2LjUxNyA2LjUxNyAwIDAxMy45NDgtMy45NDh6TTEuODY0IDEwLjE1YS41LjUgMCAxMS45NDQtLjMzIDUuNTE3IDUuNTE3IDAgMDAzLjM2NSAzLjM3LjUuNSAwIDAxLS4zMzMuOTQzIDYuNTE3IDYuNTE3IDAgMDEtMy45NzYtMy45ODN6bTguMzAyIDMuOTgxYS41LjUgMCAxMS0uMzMzLS45NDMgNS41MTcgNS41MTcgMCAwMDMuMzQ3LTMuMzMyLjUuNSAwIDExLjk0MS4zMzcgNi41MTcgNi41MTcgMCAwMS0zLjk1NSAzLjkzOHptMy45NjgtOC4yODVhLjUuNSAwIDExLS45NDMuMzMxQTUuNTE3IDUuNTE3IDAgMDA5Ljg1IDIuODJhLjUuNSAwIDAxLjMzNy0uOTQyIDYuNTE3IDYuNTE3IDAgMDEzLjk0NiAzLjk2OHpNOC41IDMuNWEuNS41IDAgMDEtMSAwVi45OTdhLjUuNSAwIDAxMSAwVjMuNXptLTQuOTk3IDRhLjUuNSAwIDAxMCAxSDFhLjUuNSAwIDAxMC0xaDIuNTAzek03LjUgMTIuNDk3YS41LjUgMCAwMTEgMFYxNWEuNS41IDAgMTEtMSAwdi0yLjUwM3pNMTIuNDk3IDguNWEuNS41IDAgMDEwLTFIMTVhLjUuNSAwIDExMCAxaC0yLjUwM3pNOCA5YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc2hhaXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DdXJyZW5jeSA9IGZ1bmN0aW9uIEV1aUljb25DdXJyZW5jeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk1IDEuNjM2bDEuNDE0IDEuNDE0LTIuMTkyIDIuMTkzQzEyLjY5NSA2LjAzMyAxMyA2Ljk4IDEzIDhjMCAxLjAyLS4zMDUgMS45NjctLjgyOCAyLjc1N2wyLjE5MiAyLjE5My0xLjQxNCAxLjQxNC0yLjE5My0yLjE5MkE0Ljk3NyA0Ljk3NyAwIDAxOCAxM2E0Ljk3NyA0Ljk3NyAwIDAxLTIuNzU3LS44MjhMMy4wNSAxNC4zNjQgMS42MzYgMTIuOTVsMi4xOTItMi4xOTNBNC45NzcgNC45NzcgMCAwMTMgOGMwLTEuMDIuMzA1LTEuOTY3LjgyOC0yLjc1N0wxLjYzNiAzLjA1IDMuMDUgMS42MzZsMi4xOTMgMi4xOTJBNC45NzcgNC45NzcgMCAwMTggM2MxLjAyIDAgMS45NjcuMzA1IDIuNzU3LjgyOGwyLjE5My0yLjE5MnpNOCA1YTIuOTkgMi45OSAwIDAwLTEuMTY4LjIzNmwtLjEyNi4wNTctLjIxOC4xMTYtLjEzMi4wODEtLjA3My4wNWEzLjAxMyAzLjAxMyAwIDAwLS4yNDEuMTg3bC0uMTEzLjEwMy0uMTQ3LjE1Yy0uMDUuMDU0LS4wOTcuMTEtLjE0Mi4xNjhsLS4xLjEzNS0uMDUuMDczLS4wNi4wOTdjLS4wNS4wODItLjA5Ni4xNjYtLjEzNy4yNTNsLS4wNTcuMTI2QTIuOTkgMi45OSAwIDAwNSA4YzAgLjQxNC4wODQuODA5LjIzNiAxLjE2OGwuMDU3LjEyNi4xMTYuMjE4LjA4MS4xMzJjLjA1OS4wODkuMTIxLjE3NS4xODkuMjU3bC4xNS4xNy4xNTEuMTQ3Yy4wNTYuMDUxLjExNC4xLjE3NC4xNDdsLjE0Mi4xMDVjLjA1NC4wMzcuMTA5LjA3Mi4xNjUuMTA2bC0uMTI0LS4wNzkuMDkyLjA2LjA5NC4wNTVjLjQzNi4yNDcuOTQuMzg4IDEuNDc3LjM4OGEyLjk5IDIuOTkgMCAwMDEuMTY4LS4yMzZsLjEyNS0uMDU2LjIxMy0uMTEzLjE1MS0uMDk0LjA1LS4wMzRhMy4wMTEgMy4wMTEgMCAwMC4zMjMtLjI1OGwtLjE1LjEyOS4wOS0uMDc1LjE2OC0uMTU5LjA4LS4wODRjLjA1MS0uMDU2LjEtLjExNC4xNDctLjE3NGwuMTA1LS4xNDIuMTA2LS4xNjVjLjA0Ny0uMDguMDkxLS4xNjEuMTMxLS4yNDVsLjA1Ny0uMTI2QTIuOTkgMi45OSAwIDAwMTEgOGEyLjk5IDIuOTkgMCAwMC0uMjM2LTEuMTY4bC0uMDU2LS4xMjUtLjExMi0uMjExLS4wOTYtLjE1NS0uMDMzLS4wNDlhMy4wMTEgMy4wMTEgMCAwMC0uMjU4LS4zMjJsLjEyOS4xNS0uMDc1LS4wOS0uMTU5LS4xNjgtLjA4NC0uMDhhMy4wMTUgMy4wMTUgMCAwMC0uMTc0LS4xNDdsLS4xODMtLjEzMi0uMTI0LS4wNzlhMi45OTMgMi45OTMgMCAwMC0uMjQ1LS4xMzFsLS4xMjYtLjA1N0EyLjk5IDIuOTkgMCAwMDggNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3VycmVuY3k7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkN1dCA9IGZ1bmN0aW9uIEV1aUljb25DdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4xNDIgMTEuMDc0bC0xLjkxMi41NDhhMi41MzIgMi41MzIgMCAxMS0xLjM5NS00Ljg2N2wxLjk0Ny0uNTU5YTIuNTMyIDIuNTMyIDAgMDEyLjU1NS43MTNsMS41My01LjMzNWMuMTM5LS40ODUuNi0uODk3IDEuMTU5LTEuMjM4LjI3LS4xNjQuNTItLjI3OC43NzktLjMyLjgxNC0uMTMyIDEuNTAzLjU1OCAxLjI2MSAxLjQyMkw5LjU3NCA2LjY0M2w0Ljk4OC0xLjQzYy44NjQtLjI0MiAxLjU1NC40NDcgMS40MjIgMS4yNi0uMDQyLjI2LS4xNTYuNTEtLjMyLjc4LS4zNDEuNTYtLjc1MyAxLjAyLTEuMjM4IDEuMTZMOS41MjMgOS44MTdhMi41MyAyLjUzIDAgMDEuNTYgMi40bC0uNTYgMS45NDdhMi41MzIgMi41MzIgMCAxMS00Ljg2Ny0xLjM5NWwuNDg2LTEuNjk2em0uMzMtMS4xNDhsLjQ4LTEuNjczYTEuNTIgMS41MiAwIDAwLTEuODktMS4wODNsLTEuOTQ4LjU1OGExLjUyIDEuNTIgMCAwMC44MzcgMi45MmwyLjUyLS43MjJ6bTMuNzczLTIuMTM1bC0uMzMgMS4xNDggNS4yMzItMS41Yy4zMjQtLjA5MyAxLjE4Mi0xLjM5LjY5NC0xLjI1M0w5LjI0NSA3Ljc5MXpNNS42MyAxMy4wNDlhMS41MiAxLjUyIDAgMDAyLjkyLjgzN2wuNTU5LTEuOTQ3YTEuNTIgMS41MiAwIDAwLTEuNTUzLTEuOTM1bDIuNTM3LTguODQ1Yy4xMzYtLjQ4OC0xLjE2LjM3LTEuMjUzLjY5NEw1LjYzIDEzLjA1em0uOTczLjI3OWwuNTU5LTEuOTQ3YS41MDYuNTA2IDAgMTEuOTczLjI3OWwtLjU1OCAxLjk0N2EuNTA2LjUwNiAwIDExLS45NzQtLjI4em0tMy45My0zLjY1M2EuNTA2LjUwNiAwIDExLS4yOC0uOTczbDEuOTQ3LS41NThhLjUwNi41MDYgMCAwMS4yOC45NzNsLTEuOTQ4LjU1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25EYXRhYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25EYXRhYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTJoMTJ2LTEuOTdjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1YxMnptLTEgMFYzYzAtMS4xMDUgMy4xMzQtMiA3LTJzNyAuODk1IDcgMnY5YzAgMS4xMDUtMy4xMzQgMi03IDJzLTctLjg5NS03LTJ6bTEtM2gxMlY3LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdWOXptMC00Ljk3VjZoMTJWNC4wM2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3em0xMC42NzUtMS40ODNDMTEuNDY3IDIuMjAyIDkuNzk1IDIgOCAyYy0xLjc5NCAwLTMuNDY3LjIwMi00LjY3NS41NDctLjQ5Mi4xNC0uODguMjk4LTEuMTM2LjQ1My4yNTYuMTU1LjY0NC4zMTIgMS4xMzYuNDUzQzQuNTMzIDMuNzk4IDYuMjA1IDQgOCA0YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQuODgtLjI5OCAxLjEzNi0uNDUzLS4yNTYtLjE1NS0uNjQ0LS4zMTItMS4xMzYtLjQ1M3pNMiA2Yy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDYuNzk4IDYuMjA1IDcgOCA3YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMnptMCAzYy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDkuNzk4IDYuMjA1IDEwIDggMTBjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyem0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgMTIuNzk4IDYuMjA1IDEzIDggMTNjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EYXRhYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRGVza3RvcCA9IGZ1bmN0aW9uIEV1aUljb25EZXNrdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMmExIDEgMCAwMC0xIDF2N2ExIDEgMCAwMDEgMWg0bC0xIDNIMy41YS41LjUgMCAwMDAgMWg5YS41LjUgMCAwMDAtMUgxMWwtMS0zaDRhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIMnptMCA4VjNoMTJ2N0gyem01IDFoMmwxIDNINmwxLTN6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0zIDBhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0yLjUuNWEuNS41IDAgMDEuNS0uNWgxYS41LjUgMCAwMTAgMWgtMWEuNS41IDAgMDEtLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRlc2t0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvY3VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuOCAwYy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDMuMiAzLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWMTVhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjFhMSAxIDAgMDExLTFoOC44ek0xNCA1aC0zLjVhLjUuNSAwIDAxLS41LS41VjFIMnYxNGgxMlY1em0tOC41IDdhLjUuNSAwIDExMC0xaDVhLjUuNSAwIDExMCAxaC01em0wLTNhLjUuNSAwIDAxMC0xaDVhLjUuNSAwIDExMCAxaC01elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDguOTk1bDYuNDUzLTYuNDQtMS41LTEuNS02LjQ1MyA2LjQ0IDEuNSAxLjV6TTEyLjk2OC4xOWMuMjU4LS4yMzguNjU3LS4yNi45MSAwbDEuOTI4IDEuOTI5YS42NDIuNjQyIDAgMDEwIC45MDlsLTYuNzggNi43ODRBLjY0MS42NDEgMCAwMTguNTcgMTBINi42NDNBLjY0My42NDMgMCAwMTYgOS4zNTdWNy40M2MwLS4xNy4wNjctLjMzNS4xODgtLjQ1NUwxMi45NjguMTl6TTQuNSAxM2EuNS41IDAgMTEwLTFoN2EuNS41IDAgMTEwIDFoLTd6bTQtMTJhLjUuNSAwIDAxMCAxSDJ2MTNoMTJWNy41YS41LjUgMCAxMTEgMFYxNWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50RWRpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAzLjVhLjUuNSAwIDExLTEgMCAuNS41IDAgMDExIDB6TTkgNXYzaDF2MUg4VjZIN1Y1aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy44NTUgMTQuMTQ3YTEuMzQgMS4zNCAwIDAxLS4xNTgtLjI0NkExLjk5OCAxLjk5OCAwIDAxMTMuNSAxM2MwLS40MTQuMTAzLS43MTMuMTk3LS45MDFhMS4zNCAxLjM0IDAgMDEuMTU4LS4yNDZsLjAwMy0uMDA1QS41LjUgMCAwMDE0IDExLjVWLjVhLjUuNSAwIDAwLS41LS41SDMuNDYxbC0uMDgzLjAwNWEyLjk1NyAyLjk1NyAwIDAwLTEuMTAyLjI5OCAyLjI1NyAyLjI1NyAwIDAwLS44OC43NjNDMS4xNDggMS40NCAxIDEuOTEzIDEgMi41VjEzYzAgLjQ2My4xMTcuODQzLjMxOCAxLjE0NS4yLjI5OC40NjIuNDkxLjcwOC42MTVhMi4zNDQgMi4zNDQgMCAwMC45NC4yNEgzdi0xYy0uMDA1IDAtLjAxNSAwLS4wMjktLjAwMmExLjM0NCAxLjM0NCAwIDAxLS40OTgtLjEzMy44MTcuODE3IDAgMDEtLjMyMy0uMjc1QzIuMDcgMTMuNDcgMiAxMy4yODcgMiAxM3MuMDctLjQ3LjE1LS41OWEuODE3LjgxNyAwIDAxLjMyNC0uMjc1QTEuMzQ0IDEuMzQ0IDAgMDEzIDEyaDkuNjU4Yy0uMDkxLjI3LS4xNTguNjA1LS4xNTggMXMuMDY3LjczLjE1OCAxSDh2MWg1LjVhLjUuNSAwIDAwLjM1OS0uODQ4bC0uMDA0LS4wMDV6bS0uMDAxIDBsLjAwMi4wMDItLjAwMi0uMDAyek0yLjcyNCAxLjE5N2MuMDkyLS4wNDYuMTg2LS4wODIuMjc2LS4xMUMzIDIuOTE4IDMuMDAxIDExIDIuOTk5IDExaC0uMDMzYTEuOTc3IDEuOTc3IDAgMDAtLjI4My4wMyAyLjM0NCAyLjM0NCAwIDAwLS42NTcuMjFMMiAxMS4yNTRWMi41YzAtLjQxMy4xMDItLjY4OS4yMjktLjg3OS4xMjgtLjE5My4zMDQtLjMyOC40OTUtLjQyNHpNNCAxMVYxaDl2MTBINHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTNINHYyLjVhLjUuNSAwIDAwLjg1NC4zNTRsLjY0Ni0uNjQ3LjY0Ni42NDdBLjUuNSAwIDAwNyAxNS41VjEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudHMgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxM2ExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMWExIDEgMCAwMTEtMWg2Ljh6TTEyIDVIOC41YS41LjUgMCAwMS0uNS0uNVYxSDJ2MTJoMTBWNXptLTcuNSA2YS41LjUgMCAxMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMC0zYS41LjUgMCAwMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMSA4YS41LjUgMCAxMTAtMUgxNFY2LjVhLjUuNSAwIDExMSAwVjE1YTEgMSAwIDAxLTEgMUg1LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG90ID0gZnVuY3Rpb24gRXVpSWNvbkRvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDgsXG4gICAgY3k6IDgsXG4gICAgcjogNFxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3VibGVBcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG91YmxlQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjIzMiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4yMzIgMTQuMDQzYS43NS43NSAwIDAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAwMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMDExLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMDEwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMDEtMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvd25sb2FkID0gZnVuY3Rpb24gRXVpSWNvbkRvd25sb2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA5LjExNGwxLjg1LTEuOTQzYS41Mi41MiAwIDAxLjc3IDBjLjIxNC4yMjguMjE0LjYgMCAuODI5bC0xLjk1IDIuMDVhMS41NTIgMS41NTIgMCAwMS0yLjMxIDBMNS40MSA4YS42MTcuNjE3IDAgMDEwLS44MjkuNTIuNTIgMCAwMS43NyAwTDggOS4wODJWLjU1NkM4IC4yNDkgOC4yMjQgMCA4LjUgMHMuNS4yNDkuNS41NTZ2OC41NTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMy4wMDZWMTBoLTF2My4wMDZhLjk5NS45OTUgMCAwMS0uOTk0Ljk5NEgzLjAxYS45OTUuOTk1IDAgMDEtLjk5NC0uOTk0VjEwaC0xdjMuMDA2YzAgMS4xLjg5MiAxLjk5NCAxLjk5NCAxLjk5NGgxMC45OTZjMS4xIDAgMS45OTQtLjg5MyAxLjk5NC0xLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG93bmxvYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAyaDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXptMTMgMGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xem0wIDEzaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDFoMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yek0xLjUgMTRoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEg3VjEuNWEuNS41IDAgMDExIDBWNHptMCA4djIuNWEuNS41IDAgMTEtMSAwVjEyaDF6TTMgNWg5YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgN3YxSDEuNWEuNS41IDAgMDEwLTFINHptOCAwaDIuNWEuNS41IDAgMTEwIDFIMTJWN3pNNyAxaDJhMiAyIDAgMDEyIDJ2OWEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6bTExLjUtNGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgM2gyYTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDhoNWExIDEgMCAwMTEgMXY1SDNhMSAxIDAgMDEtMS0xVjh6bTEtN2gxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGg1djVhMSAxIDAgMDEtMSAxSDhWOWExIDEgMCAwMTEtMXpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJoNXY1YTEgMSAwIDAxLTEgMUgyVjNhMSAxIDAgMDExLTF6bTAtMWgxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmg1YTEgMSAwIDAxMSAxdjVIOWExIDEgMCAwMS0xLTFWMnpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA0VjNoNnYxSDV6TTMgN1Y2aDEwdjFIM3ptMiAzVjloNnYxSDV6bS0yIDN2LTFoMTB2MUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDZ2MUgyem0wIDNWNmgxMHYxSDJ6bTAgM1Y5aDZ2MUgyem0wIDN2LTFoMTB2MUgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNFYzaDZ2MUg4ek00IDdWNmgxMHYxSDR6bTQgM1Y5aDZ2MUg4em0tNCAzdi0xaDEwdjFINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQm9sZCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JCb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xOTMgMTNINFYzaDQuMTUxYzEuODE2IDAgMi45ODcuOTc3IDIuOTg3IDIuNDk1IDAgMS4wNzQtLjc5NyAyLjAxLTEuODIzIDIuMTc2di4wNTVjMS4zNTkuMTMyIDIuMzA4IDEuMTEgMi4zMDggMi40MzMgMCAxLjc2LTEuMjk2IDIuODQxLTMuNDMgMi44NDF6TTUuNzg4IDQuMzkzdjIuODJoMS42MzVjMS4yNDggMCAxLjk0OC0uNTI2IDEuOTQ4LTEuNDU1IDAtLjg3My0uNjAzLTEuMzY1LTEuNjctMS4zNjVINS43ODh6bTAgNy4yMTRoMS45OTZjMS4zMTYgMCAyLjAxNi0uNTQ3IDIuMDE2LTEuNTczIDAtMS4wMTktLjcyLTEuNTUyLTIuMDkyLTEuNTUyaC0xLjkydjMuMTI1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JCb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JDaGVja2xpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41OTcgM2EuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40Mi40MiAwIDAwLS4yOTIuMDk4LjMzMy4zMzMgMCAwMC0uMTIuMjU3LjMzNS4zMzUgMCAwMC4xMjcuMjU0bDEuMDY0Ljk4MkEuNDE4LjQxOCAwIDAwMi40ODggNmEuNDExLjQxMSAwIDAwLjI4OC0uMTI2TDQuOTA0IDMuNThhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzhBLjQyMS40MjEgMCAwMDQuNTk3IDN6bS0uMjk5IDQuMTMyQS40MTEuNDExIDAgMDE0LjU5NyA3YS40MjEuNDIxIDAgMDEuMjc2LjA5M2MuMDc2LjA2Mi4xMi4xNDcuMTI2LjIzOGEuMzI4LjMyOCAwIDAxLS4wOTUuMjVMMi43NzYgOS44NzRhLjQxMS40MTEgMCAwMS0uMjg4LjEyNi40MTguNDE4IDAgMDEtLjI5Ny0uMTA4TDEuMTI3IDguOTFBLjMzNS4zMzUgMCAwMTEgOC42NTZhLjMzMy4zMzMgMCAwMS4xMi0uMjU3LjQyLjQyIDAgMDEuMjkyLS4wOThjLjEwOC4wMDUuMjEuMDUuMjguMTIzbC43NTcuNzAxIDEuODQ5LTEuOTkzek00LjU5NyAxMWEuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40MjEuNDIxIDAgMDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAwLS4xMi4yNTcuMzM1LjMzNSAwIDAwLjEyNy4yNTRsMS4wNjQuOTgyYS40MTguNDE4IDAgMDAuMjk3LjEwOC40MTEuNDExIDAgMDAuMjg4LS4xMjZsMi4xMjgtMi4yOTNhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzguNDIxLjQyMSAwIDAwLS4yNzYtLjA5M3pNNi41IDRhLjUuNSAwIDAwMCAxaDdhLjUuNSAwIDAwMC0xaC03ek02IDguNWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEtLjUtLjV6bS41IDMuNWEuNS41IDAgMDAwIDFoN2EuNS41IDAgMDAwLTFoLTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNoZWNrbGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQ29kZUJsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNvZGVCbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNDE0IDguMDM2TDQuODkgMTAuNTFhLjUuNSAwIDAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwMTAtLjcwN2wyLjgyOC0yLjgyOGEuNS41IDAgMTEuNzA3LjcwN0wyLjQxNCA4LjAzNnptOC43NjggMi40NzRsMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAxLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwMTAgLjcwN2wtMi44MjkgMi44MjlhLjUuNSAwIDExLS43MDctLjcwOHpNOC41NTkgMi41MDZhLjUuNSAwIDAxLjk4MS4xOUw3LjQ0MSAxMy40OTRhLjUuNSAwIDAxLS45ODEtLjE5TDguNTU5IDIuNTA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb2RlQmxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckNvbW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29tbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTExIDEwSDEyYTEgMSAwIDAwMS0xVjVhMSAxIDAgMDAtMS0xSDRhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMDAxIDFoMXYxLjI5N0w2LjExMSAxMHptLjQ2IDFMNCAxNHYtM2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjRhMiAyIDAgMDEtMiAySDYuNTcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb21tZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JIZWFkaW5nID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckhlYWRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDExYTEgMSAwIDAxMCAySDRhMSAxIDAgMDEwLTJWNWExIDEgMCAxMTAtMmgyYTEgMSAwIDExMCAydjJoNFY1YTEgMSAwIDExMC0yaDJhMSAxIDAgMDEwIDJ2NmExIDEgMCAwMTAgMmgtMmExIDEgMCAwMTAtMlY5SDZ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySGVhZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRhbGljID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0YWxpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTYgMTJIOS41YS41LjUgMCAxMTAgMWgtNGEuNS41IDAgMTEwLTFoMS42MzlsMS43LThINy41YS41LjUgMCAwMTAtMWg0YS41LjUgMCAxMTAgMUg5Ljg2MWwtMS43IDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0YWxpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yTGluayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JMaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTYgNS4wNTFhLjQ1LjQ1IDAgMDAuNjM3LjYzN2wxLjUwMy0xLjUwNGMuNDMyLS40MzEgMS4yNzgtLjM4MiAxLjg5LjIzLjYxMi42MTIuNjYyIDEuNDU4LjIzIDEuODlMOS41MTkgOC42Yy0uNDMyLjQzMi0xLjI3OC4zODMtMS44OS0uMjNhLjQ1LjQ1IDAgMTAtLjYzNi42MzdjLjkxNC45MTQgMi4zMyAxLjA2MyAzLjE2Mi4yM2wyLjI5Ny0yLjI5N2MuODMzLS44MzMuNjg0LTIuMjQ4LS4yMy0zLjE2Mi0uOTE0LS45MTUtMi4zMy0xLjA2My0zLjE2Mi0uMjNMNy41NTYgNS4wNTF6bS44ODggNS4yNjFhLjQ1LjQ1IDAgMDAtLjYzNyAwbC0xLjUwMyAxLjUwNGMtLjQzMi40MzEtMS4yNzguMzgyLTEuODktLjIzLS42MTItLjYxMi0uNjYxLTEuNDU4LS4yMy0xLjg5TDYuNDgxIDcuNGMuNDMyLS40MzIgMS4yNzgtLjM4MyAxLjg5LjIzYS40NS40NSAwIDAwLjYzNi0uNjM3Yy0uOTE0LS45MTQtMi4zMy0xLjA2My0zLjE2Mi0uMjNMMy41NDggOS4wNmMtLjgzMy44MzMtLjY4NSAyLjI0OC4yMyAzLjE2Mi45MTQuOTE1IDIuMzMgMS4wNjMgMy4xNjIuMjNsMS41MDQtMS41MDNhLjQ1LjQ1IDAgMDAwLS42Mzd6TTcuODc3IDUuNzZhLjM5LjM5IDAgMDAuMjc0LS4xMTRsMS41MDMtMS41MDQtMS41MDMgMS41MDRhLjM5LjM5IDAgMDEtLjI3NC4xMTR6bS45MTIgMy4xODNjLS40LjAwMy0uODQzLS4xNzItMS4yMDItLjUzLjM1OS4zNTguODAyLjUzMyAxLjIwMi41M3pNMTIuMTggMy44MmMtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2LjYxOC0uMDA2IDEuMjcuMjU3IDEuNzczLjc2Ljg5OC44OTggMS4wMzQgMi4yNzUuMjMgMy4wNzhsLTIuMjk3IDIuMjk3IDIuMjk3LTIuMjk3Yy44MDQtLjgwMy42NjgtMi4xOC0uMjMtMy4wNzh6bS00LjA2MiA2LjQyYS4zOS4zOSAwIDAxLjI4NC42NjdMNi44OTggMTIuNDFsMS41MDQtMS41MDNhLjM5LjM5IDAgMDAtLjI4NC0uNjY3em0tLjkyNi0zLjk2NWMuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2ek01LjQxNCAxMi4xNWExLjc2MiAxLjc2MiAwIDAxLTEuMDQyLS41MjJjLS42MjYtLjYyNy0uNjkyLTEuNTExLS4yMy0xLjk3NEw2LjQ0IDcuMzU4IDQuMTQyIDkuNjU0Yy0uNDYyLjQ2My0uMzk2IDEuMzQ4LjIzIDEuOTc0LjMxMS4zMTEuNjg3LjQ4NCAxLjA0Mi41MjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA4djFoMXYxSDFWOWgxVjhIMVY3aDN2MUgzem0xIDR2Mkgxdi0xaDF2LTFIMXYtMWgzdjF6TTMgNWgxdjFIMVY1aDFWNEgxVjNoMnYyem0yLjUtMWg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JSZWRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclJlZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA2SDVDMy4wNTcgNiAyIDcuMDU3IDIgOXMxLjA1NyAzIDMgM2gxLjV2LTFINWMtMS4zOSAwLTItLjYxLTItMiAwLTEuMzkuNjEtMiAyLTJoNXYzbDMuNS0zLjVMMTAgM3YzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JSZWRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JTdHJpa2UgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yU3RyaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDIzIDEwaDEuMjc0Yy4wMDYuMDguMDEuMTY0LjAxLjI1YTIuNTU3IDIuNTU3IDAgMDEtLjg4MyAxLjk0OWMtLjI4NC4yNS0uNjI3LjQ0Ni0xLjAzLjU4OEE0LjA4NyA0LjA4NyAwIDAxOC4wMjggMTNhNC42MTYgNC42MTYgMCAwMS0zLjM4Mi0xLjQyNmMtLjE5My0uMjU5LS4xOTMtLjUgMC0uNzI0LjE5My0uMjIzLjQzOC0uMjY2LjczNS0uMTMuMzQzLjM2My43NDguNjU1IDEuMjEzLjg3Ni40NjYuMjIuOTQ5LjMzIDEuNDQ5LjMzLjYzNyAwIDEuMTMyLS4xNDQgMS40ODUtLjQzMy4zNTMtLjI5LjUzLS42Ny41My0xLjE0YTEuNzIgMS43MiAwIDAwLS4wMzQtLjM1M3pNNS41ODYgN2EyLjQ5IDIuNDkgMCAwMS0uMjk0LS41MDcgMi4zMTYgMi4zMTYgMCAwMS0uMTc3LS45MzRjMC0uMzYzLjA3Ni0uNzAxLjIyOC0xLjAxNS4xNTItLjMxNC4zNjMtLjU4Ni42MzMtLjgxNi4yNy0uMjMuNTg4LS40MS45NTUtLjUzN0EzLjY4MyAzLjY4MyAwIDAxOC4xNDUgM2MuNTc4IDAgMS4xMTIuMTEgMS42MDMuMzMuNDkuMjIxLjkwNy41MDggMS4yNS44NjEuMTYuMjgyLjE2LjUxMiAwIC42OTItLjE2LjE4LS4zOC4yMTQtLjY2Mi4xMDJhMy40MzggMy40MzggMCAwMC0uOTc4LS42NjkgMi45MTQgMi45MTQgMCAwMC0xLjIxMy0uMjQyYy0uNTQgMC0uOTczLjEyNS0xLjMwMi4zNzUtLjMyOC4yNS0uNDkyLjU5NS0uNDkyIDEuMDM2IDAgLjIzNi4wNDYuNDM0LjE0LjU5Ni4wOTIuMTYyLjIxNy4zMDQuMzc0LjQyNi4xNTcuMTIzLjMyOS4yMy41MTUuMzI0LjExOS4wNi4yNC4xMTYuMzYyLjE2OUg1LjU4NnpNMi41IDhoMTFhLjUuNSAwIDExMCAxaC0xMWEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclN0cmlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzdjJIMlYzdjEwaDEyVjN6TTIgMmgxMmMuNTUyIDAgMSAuNDEzIDEgLjkyM3YxMC4xNTRjMCAuNTEtLjQ0OC45MjMtMSAuOTIzSDJjLS41NTIgMC0xLS40MTMtMS0uOTIzVjIuOTIzQzEgMi40MTMgMS40NDggMiAyIDJ6bTAgNWgxMnYxSDJWN3ptMCAzaDEydjFIMnYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZGVybGluZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRlcmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDMuNTM2VjcuOGMwIDEuNjI4IDEuMjI0IDIuNiAzIDIuNiAxLjc4MyAwIDMtLjk3MiAzLTIuNlYzLjUzNmMwLS4zNTcuMTY3LS41MzYuNS0uNTM2LjMzMyAwIC41LjE3OS41LjUzNnY0LjMxOGMwIDIuMDkzLTEuNjY1IDMuNTQ2LTQgMy41NDZTNCA5Ljg5MyA0IDcuOFYzLjUzNkM0IDMuMTc5IDQuMTY3IDMgNC41IDNjLjMzMyAwIC41LjE3OS41LjUzNnpNMi41IDEzaDExYS41LjUgMCAxMTAgMWgtMTFhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRlcmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5kbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2aDVjMS45NDMgMCAzIDEuMDU3IDMgM3MtMS4wNTcgMy0zIDNIOXYtMWgxLjVjMS4zOSAwIDItLjYxIDItMiAwLTEuMzktLjYxLTItMi0yaC01djNMMiA2LjUgNS41IDN2M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5kbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDExMC0xem0tMy03YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTAgNGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0wIDRhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRW1haWwgPSBmdW5jdGlvbiBFdWlJY29uRW1haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuOTUgMy42ODRMOC42MzcgOC45MTJhMSAxIDAgMDEtMS4yNzYgMEwxLjA1MSAzLjY4NEEuOTk5Ljk5OSAwIDAwMSA0djhhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNGEuOTk5Ljk5OSAwIDAwLS4wNS0uMzE2ek0yIDJoMTJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptLS4yMSAxbDUuNTc2IDQuNjAzYTEgMSAwIDAwMS4yNy4wMDNMMTQuMjY4IDNIMS43OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcykpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FcWwgPSBmdW5jdGlvbiBFdWlJY29uRXFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODYyIDE0LjE4di4wMDFhLjQ4Mi40ODIgMCAwMS4xLjUyMS41LjUgMCAwMS0uNDQ3LjI5OWgtMy4xNDljLS4wNyAwLS4xMzYgMC0uMi0uMDAzYS42NjQuNjY0IDAgMDEtLjQxNC0uMTRjLS4zNS0uMzEtLjY4NC0uNjM3LTEuMDAxLS45ODFsLTEuNzcyLTEuNzM4YTUuOTQxIDUuOTQxIDAgMDEtMy44MDIuMTRsLS4wNDUtLjAxMmE1Ljg5IDUuODkgMCAwMS0yLjY4Mi0xLjcxMkE1LjcxNSA1LjcxNSAwIDAxMS4wOCA3LjcyYTUuNjYgNS42NiAwIDAxLjM0OC0zLjExOEE1Ljc4IDUuNzggMCAwMTMuMzkgMi4xMjRhNS45NzkgNS45NzkgMCAwMTYuMTM2LS41MDUgNS44MzYgNS44MzYgMCAwMTIuMzU2IDIuMTIzIDUuNjcgNS42NyAwIDAxLjg3MyAzLjAxN2wuMDAxLjAwM2MwIC4xMjgtLjA1MS4yNS0uMTQzLjM0YS40OTUuNDk1IDAgMDEtLjY5NCAwIC40NzYuNDc2IDAgMDEtLjE0My0uMzRjMC0uOTUtLjI4OC0xLjg3OC0uODI2LTIuNjY4YTQuODggNC44OCAwIDAwLTIuMTk4LTEuNzY5IDQuOTkgNC45OSAwIDAwLTIuODMtLjI3MyA0LjkzIDQuOTMgMCAwMC0yLjUwOSAxLjMxNCA0Ljc3NCA0Ljc3NCAwIDAwLTEuMzQgMi40NkE0LjcxNSA0LjcxNSAwIDAwMi4zNTIgOC42YTQuODIgNC44MiAwIDAwMS44MDQgMi4xNTVjLjgwNS41MjggMS43NTIuODEgMi43MjEuODFhNC44OTkgNC44OTkgMCAwMDEuMjk2LS4xOTRsLjAzMi0uMDA5LjcxNy0uMjExYS41MDYuNTA2IDAgMDEuNDgzLjExMWwxLjExIDEuMDI2IDEuNzg4IDEuNzUyaDIuMDNsLTMuNjU3LTMuNTgzYS40NzUuNDc1IDAgMDEuMDE0LS42NjYuNDk1LjQ5NSAwIDAxLjY3OS0uMDEzbDQuNDkzIDQuNDAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wOTcgMy40NjhMOS42NzkgNC45M2EuNDMzLjQzMyAwIDAxLjIxOC4zN3YyLjkyNGEuNDIyLjQyMiAwIDAxLS4yMTguMzdsLTIuNTgyIDEuNDYxYS40MzguNDM4IDAgMDEtLjQzNyAwTDQuMDc3IDguNTk0YS40MzMuNDMzIDAgMDEtLjIxOC0uMzdWNS4zYS40MjIuNDIyIDAgMDEuMjE4LS4zN0w2LjY2IDMuNDY3YS40NDYuNDQ2IDAgMDEuNDM3IDB6bTEuODQ1IDQuMjdWNS43ODRhLjMyOC4zMjggMCAwMC0uMTctLjI4N0w3LjA0NyA0LjUyYS4zNDIuMzQyIDAgMDAtLjMzOCAwbC0xLjcyNi45NzdhLjMzNi4zMzYgMCAwMC0uMTY4LjI4N3YxLjk1M2EuMzI2LjMyNiAwIDAwLjE3LjI4N2wxLjcyNC45NzdhLjM0Mi4zNDIgMCAwMC4zMzggMGwxLjcyNi0uOTc4YS4zMzQuMzM0IDAgMDAuMTY5LS4yODd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXJhc2VyID0gZnVuY3Rpb24gRXVpSWNvbkVyYXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNjQ4IDkuOTM3bDcuMjktNy4yODhhMi4yMSAyLjIxIDAgMDEzLjEyNCAwbDIuMjkgMi4yODhhMi4yMSAyLjIxIDAgMDEwIDMuMTI2TDEwLjQxMyAxM0gxMi41YS41LjUgMCAwMTAgMUg0LjUwMWEyLjIxIDIuMjEgMCAwMS0xLjU2My0uNjQ3bC43MDctLjcwN2MuMjI3LjIyNi41MzUuMzU0Ljg1Ni4zNTRoNC4wMDVhMS4yMSAxLjIxIDAgMDAuODQ4LS4zNTRsMS4yOTItMS4yOTMtNC00LTMuMjkgMy4yOTFhMS4yMSAxLjIxIDAgMDAwIDEuNzEybC4yOS4yOS0uNzA4LjcwNy0uMjktLjI5YTIuMjEgMi4yMSAwIDAxMC0zLjEyNnpNOCA2aDYuODlhMS4yMDggMS4yMDggMCAwMC0uMjQ2LS4zNTZMMTQgNUg5TDggNnptMi0yaDNsLS42NDUtLjY0NGExLjIxIDEuMjEgMCAwMC0xLjcxIDBMMTAgNHptNC44OSAzSDcuNzA4bDEgMUgxNGwuNjQ0LS42NDRBMS4yMiAxLjIyIDAgMDAxNC44OTEgN3pNOS43MDggOWwxLjY0NiAxLjY0NkwxMyA5SDkuNzA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMS41LS41YS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bS0xIDJhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcmFzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41MzUgMTIuNDkzYS40Ny40NyAwIDAxLjQ2OC40Njh2Mi41NjRhLjQ3My40NzMgMCAwMS0uNDY2LjQ3NUgzVjBIMTIuNTk1YS40NS40NSAwIDAxLjM5OC40NjN2Mi41NjVhLjQ2OS40NjkgMCAwMS0uNDY4LjQ2N2gtLjA2NWEuNDY4LjQ2OCAwIDAxLS40NjctLjQ2N1YxSDR2MTRoOC4wMWwtLjAwNy0yLjA0YzAtLjI1Ny4yMS0uNDY3LjQ2Ny0uNDY3aC4wNjV6bS0xLjA5Ni03LjU5bDIuMTIxIDIuMTIyYTEuNSAxLjUgMCAwMTAgMi4xMjFsLTIuMTIgMi4xMjJhLjUuNSAwIDExLS43MDgtLjcwOGwyLjEyMS0yLjEyYS41LjUgMCAwMDAtLjcwOGwtMi4xMjEtMi4xMjFhLjUuNSAwIDAxLjcwNy0uNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBhbmQgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzU0IDEyLjM1NGw4LThhLjUuNSAwIDAwLS43MDgtLjcwOGwtOCA4YS41LjUgMCAwMC43MDguNzA4ek0xIDEwLjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDExIDEzLjV2LTN6bTE0LTVhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDExMC0xaDNBMS41IDEuNSAwIDAxMTUgMi41djN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwYW5kTWluaSA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmRNaW5pKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNzA3IDEwTDEwIDYuNzA3QS41LjUgMCAwMDkuMjkzIDZMNiA5LjI5M2EuNS41IDAgMTAuNzA3LjcwN3pNNCA5LjVhLjUuNSAwIDAxMSAwdjFhLjUuNSAwIDAwLjUuNWgxYS41LjUgMCAxMTAgMWgtMUExLjUgMS41IDAgMDE0IDEwLjV2LTF6bTgtM2EuNS41IDAgMTEtMSAwdi0xYS41LjUgMCAwMC0uNS0uNWgtMWEuNS41IDAgMDEwLTFoMUExLjUgMS41IDAgMDExMiA1LjV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kTWluaTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkV4cG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDFjLjQyMi0uMDAzLjg0NC4xNyAxLjE2Ni41MTZsMS45NSAyLjA1Yy4yMTMuMjI4LjIxMy42IDAgLjgyOGEuNTIuNTIgMCAwMS0uNzcxIDBMOSAyLjQ1MXY3Ljk5M2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZ2LTcuOTZsLTEuODIgMS45MWEuNTIuNTIgMCAwMS0uNzcgMCAuNjE3LjYxNyAwIDAxMC0uODI5bDEuOTUtMi4wNUExLjU3NSAxLjU3NSAwIDAxOC41IDFoLjAwNXpNNC4xOCA3Yy0uNDczIDAtLjg4LjI5NC0uOTcyLjcwM2wtMS4xODkgNS4yNWEuNzc2Ljc3NiAwIDAwLS4wMTkuMTcyYzAgLjQ4My40NDQuODc1Ljk5Ljg3NUgxNC4wMWMuMDY1IDAgLjEzLS4wMDYuMTk0LS4wMTcuNTM3LS4wOTUuODg1LS41NTYuNzc4LTEuMDNsLTEuMTktNS4yNUMxMy43IDcuMjk0IDEzLjI5MyA3IDEyLjgyMiA3SDQuMTh6TTYgNnYxaDVWNmgxLjgyNWMuOTQ2IDAgMS43Ni42MDYgMS45NDYgMS40NDdsMS4xOSA1LjRjLjIxNS45NzUtLjQ4MiAxLjkyMy0xLjU1NiAyLjExOGEyLjE4IDIuMTggMCAwMS0uMzkuMDM1SDIuOTg1QzEuODg4IDE1IDEgMTQuMTk0IDEgMTMuMmMwLS4xMTkuMDEzLS4yMzcuMDM5LS4zNTNsMS4xOS01LjRDMi40MTQgNi42MDYgMy4yMjkgNiA0LjE3NCA2SDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllID0gZnVuY3Rpb24gRXVpSWNvbkV5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljk4IDcuODczYy4wMTMuMDMuMDIuMDY0LjAyLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRTLjA0NyA4LjE4OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyczcuOTUzIDUuODEzIDcuOTggNS44NzN6bS0xLjM3LS40MjRhMTIuMDk3IDEyLjA5NyAwIDAwLTEuMzg1LTEuODYyQzExLjczOSAzLjk1NiA5Ljk5OSAzIDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4wOTUgMTIuMDk1IDAgMDAxLjcgMi40MTNDNC4yNiAxMi4wNDMgNi4wMDIgMTMgOCAxM3MzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhjLS4wOC0uMTUtLjE4OS0uMzQzLS4zMTUtLjU1MXpNOCA0Ljc1QTMuMjUzIDMuMjUzIDAgMDExMS4yNSA4IDMuMjU0IDMuMjU0IDAgMDE4IDExLjI1IDMuMjUzIDMuMjUzIDAgMDE0Ljc1IDggMy4yNTIgMy4yNTIgMCAwMTggNC43NXptMCAxQzYuNzYgNS43NSA1Ljc1IDYuNzYgNS43NSA4UzYuNzYgMTAuMjUgOCAxMC4yNSAxMC4yNSA5LjI0IDEwLjI1IDggOS4yNCA1Ljc1IDggNS43NXptMCAxLjVhLjc1Ljc1IDAgMTAwIDEuNS43NS43NSAwIDAwMC0xLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllQ2xvc2VkID0gZnVuY3Rpb24gRXVpSWNvbkV5ZUNsb3NlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzE4IDEzLjQ3bC43NzYtLjc3NkE2LjA0IDYuMDQgMCAwMDggMTNjMS45OTkgMCAzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhhMTIuMDk3IDEyLjA5NyAwIDAwLTEuNzAxLTIuNDEzbC0uMDExLS4wMTIuNzA3LS43MDhjMS4zNTkgMS40NzYgMi4wNDUgMi45NzYgMi4wNTggMy4wMDYuMDE0LjAzLjAyMS4wNjQuMDIxLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRhNy4wMyA3LjAzIDAgMDEtMi42ODItLjUzek0yLjA0IDExLjA5MkMuNzA3IDkuNjI5LjAzNCA4LjE1OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyYy45NjIgMCAxLjgzNy4xOTIgMi42MjUuNTA3bC0uNzguNzhBNi4wMzkgNi4wMzkgMCAwMDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4xMSAxMi4xMSAwIDAwMS42NzQgMi4zODNsLS43MDguNzA4ek04LjM2MiA0Ljc3TDcuMjU1IDUuODc3YTIuMjYyIDIuMjYyIDAgMDAtMS4zNzggMS4zNzhMNC43NyA4LjM2MkEzLjI1MiAzLjI1MiAwIDAxOC4zNjIgNC43N3ptMi44NiAyLjc5N2EzLjI1NCAzLjI1NCAwIDAxLTMuNjU0IDMuNjU0bDEuMDYtMS4wNmEyLjI2MiAyLjI2MiAwIDAwMS41MzMtMS41MzNsMS4wNi0xLjA2em0tOS4zNjggNy4yODdhLjUuNSAwIDAxLS43MDgtLjcwOGwxMy0xM2EuNS41IDAgMDEuNzA4LjcwOGwtMTMgMTN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZUNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZUhhcHB5ID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VIYXBweShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0yLjczOSA4LjgwMmEuNTMzLjUzMyAwIDAxLjkyMi0uNTM3QzQuODE1IDEwLjI0NSA2LjI0OSAxMS4yIDggMTEuMmMxLjc1IDAgMy4xODUtLjk1NiA0LjM0LTIuOTM1YS41MzMuNTMzIDAgMDEuOTIuNTM3Yy0xLjMzMyAyLjI4Ny0zLjEgMy40NjUtNS4yNiAzLjQ2NS0yLjE2IDAtMy45MjctMS4xNzgtNS4yNi0zLjQ2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZUhhcHB5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlTmV1dHJhbCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlTmV1dHJhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0zLjIgMTAuNjY3YS41MzMuNTMzIDAgMDEwLTEuMDY3aDkuNmEuNTMzLjUzMyAwIDExMCAxLjA2N0gzLjJ6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlTmV1dHJhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZVNhZCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlU2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTIuNDg3IDMuODY4YS41MzMuNTMzIDAgMTEtLjcwOC43OTdDMTAuOTM2IDkuNzI1IDkuNDU4IDkuMDY3IDggOS4wNjdjLTEuNDU4IDAtMi45MzcuNjU3LTQuNDQ2IDEuOTk4YS41MzMuNTMzIDAgMTEtLjcwOC0uNzk3QzQuNTM2IDguNzY1IDYuMjU4IDggOCA4czMuNDYzLjc2NSA1LjE1NCAyLjI2OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZVNhZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljk5OSAxNS45OTlhOCA4IDAgMTEwLTE2IDggOCAwIDAxMCAxNnpNOCAxNUE3IDcgMCAxMDggMWE3IDcgMCAwMDAgMTR6TTMuNSA1aDlhLjUuNSAwIDExMCAxaC05YS41LjUgMCAwMTAtMXptMiAzaDVhLjUuNSAwIDExMCAxaC01YS41LjUgMCAwMTAtMXptMiAzaDFhLjUuNSAwIDExMCAxaC0xYS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GbGFnID0gZnVuY3Rpb24gRXVpSWNvbkZsYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY4NiA4LjQ2NGMxLjU0Ny0uNjE5IDMuMDgtLjYxOSA0LjYyOCAwQS41LjUgMCAwMDEzIDhWMmEuNS41IDAgMDAtLjI3Ni0uNDQ3QzExLjI1OS44MiA5LjQ1OC44MiA3LjM0MiAxLjUyNmMtMS44ODQuNjI4LTMuNDE3LjYyOC00LjYxOC4wMjdBLjUuNSAwIDAwMiAydjEyLjVhLjUuNSAwIDEwMSAwVjguNTUzYzEuNDExLjYyNyAyLjk4My41OTIgNC42ODYtLjA4OXpNMyAyLjc0MWMxLjMyMi40MiAyLjg3OC4zMjcgNC42NTgtLjI2N0M5LjQgMS44OTQgMTAuODQzIDEuODUgMTIgMi4zMjJ2NC45NzVjLTEuNTYtLjQ2NC0zLjEyOC0uMzg0LTQuNjg2LjIzOS0xLjU0LjYxNi0yLjg5Mi42MTYtNC4wOS4wMTdBLjQ5OC40OTggMCAwMDMgNy41VjIuNzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZsYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQuMTkyTDcuNTMgMi40OWEuNjcuNjcgMCAwMC45NDIgMEwxMC44Ni4xOTJhLjY3Ny42NzcgMCAwMS45NDQgMCAuNjUuNjUgMCAwMTAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAxMC0uOTMuNjc3LjY3NyAwIDAxLjk0NCAwem0wIDE1LjYxNmwyLjM5LTIuMjk4YS42Ny42NyAwIDAxLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwMDAtLjkzbC0yLjM4OC0yLjNhMi4wMiAyLjAyIDAgMDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAwMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjExaDYuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2My40MTZhNC45NjIgNC45NjIgMCAwMC0xLS4zMTZWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAxNiAyLjg3NVYyem0xMCAxMGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAySDJ2MTFoMTJWNEg4LjEyNUExLjEyNSAxLjEyNSAwIDAxNyAyLjg3NVYyem0uMjUtMWEuNzUuNzUgMCAwMS43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDE0YTEgMSAwIDAxMSAxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDkuNWwuODI2LTMuNzE3QTEgMSAwIDAxMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMDE2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41SDcuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtLjQ0NyAyLjAxMWE1LjAxNSA1LjAxNSAwIDAwLS44ODctLjYxOEwxNC43NTMgNkgyLjgwM2wtMS41NTYgN3pNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAxLS41Ny0uNDk1bC0uMjktMi4wMTVhLjg2Ny44NjcgMCAxMTEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwMS0uNTcuNDk1em0wIDIuNWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlck9wZW4gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgOS41bC44MjYtMy43MTdBMSAxIDAgMDEyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwMTYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVoMTEuOTVsMS41NTYtN0gyLjgwM2wtMS41NTYgN3pNMTMgMTRIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtMS41NTYgN2ExIDEgMCAwMS0uOTc2Ljc4M0gxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVOZXh0ID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lTmV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTUuMTQ2LjIybDcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAxMCAyLjM5OGwtNy4yIDQuNTgxQzcuMjEgMTQuMzc1IDYgMTMuNjkyIDYgMTIuNTgxVjMuNDJjMC0xLjExMiAxLjIxLTEuNzk1IDIuMTQ2LTEuMnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lTmV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVQcmV2aW91cyA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZVByZXZpb3VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMmExIDEgMCAwMTEgMXYxMGExIDEgMCAxMS0yIDBWM2ExIDEgMCAwMTEtMXptLTUuMTQ2LjIybC03LjIgNC41ODFhMS40MjUgMS40MjUgMCAwMDAgMi4zOThsNy4yIDQuNTgxYy45MzYuNTk1IDIuMTQ2LS4wODggMi4xNDYtMS4xOTlWMy40MmMwLTEuMTExLTEuMjEtMS43OTQtMi4xNDYtMS4xOTl6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GcmFtZVByZXZpb3VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdWxsU2NyZWVuRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgN1YzaDF2M2gzdjFIOXpNNyA3SDNWNmgzVjNoMXY0em0yIDJoNHYxaC0zdjNIOVY5ek03IDl2NEg2di0zSDNWOWg0ek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDN2NGgtMVY0SDlWM2g0ek0zIDNoNHYxSDR2M0gzVjN6bTEwIDEwSDl2LTFoM1Y5aDF2NHpNMyAxM1Y5aDF2M2gzdjFIM3pNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwMTE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAxMCAxNC4wMDZWMS45OTR6bTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwMC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAwMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwMDEgMS45OTR6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDIuMjI2djIuMjE4Yy0uMzU5LS4xNDMtLjg0NS0uMjE4LTEuMzE1LS4yMTgtMS4wNTkgMC0xLjYzMS41MTktMS44MDIgMS41NjVsLS4xNjguOTM3aDIuNzk4djIuMTU5SDkuNDFsLS4zMTMgMS42NzRDOC42OTYgMTIuOTg3IDcuMjYxIDE0IDQuNzg1IDE0Yy0uNzE4IDAtMS4zNS0uMDkyLTEuNzg1LS4yNTF2LTIuMjQzYy40MTguMTc2LjkwNS4yNjggMS4zODMuMjY4IDEuMDA4IDAgMS41NDYtLjQzNSAxLjcyNS0xLjUyM2wuMjQtMS4zNjRIMy43ODdWNi43MjhoMi44MTJsLjI4OC0xLjI2NEM3LjI4NiAzLjA3MSA4LjY2MiAyIDExLjM1MiAyYy41OTggMCAxLjMwNi4xIDEuNjQ4LjIyNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdlYXIgPSBmdW5jdGlvbiBFdWlJY29uR2VhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4xNjQgMTAuMzI5TDEuODcgOCAuMTYzIDUuNjdjLjE4LS42MDEuNDMtMS4xOS43NTgtMS43NTdhOC4xOTcgOC4xOTcgMCAwMTEuMTQyLTEuNTM1bDIuODcyLjMxM0w2LjA5OS4wNWE4LjE2NiA4LjE2NiAwIDAxMy44LS4wMDNsMS4xNjYgMi42NDQgMi44NzItLjMxM2E4LjE2NiA4LjE2NiAwIDAxMS44OTkgMy4yOTNMMTQuMTMgOGwxLjcwNiAyLjMzYy0uMTguNjAxLS40MyAxLjE5LS43NTggMS43NTdhOC4xOTcgOC4xOTcgMCAwMS0xLjE0MiAxLjUzNWwtMi44NzItLjMxMy0xLjE2NCAyLjY0MWE4LjE2NiA4LjE2NiAwIDAxLTMuOC4wMDNsLTEuMTY2LTIuNjQ0LTIuODcyLjMxM2E4LjE2NiA4LjE2NiAwIDAxLTEuODk5LTMuMjkzem00LjY2MyAxLjk4NmExIDEgMCAwMTEuMDIzLjU5MWwuOTU3IDIuMTdjLjc5LjEzNCAxLjU5Ny4xMzIgMi4zODctLjAwMWwuOTU2LTIuMTY5YTEgMSAwIDAxMS4wMjMtLjU5bDIuMzU4LjI1NmE3LjIzIDcuMjMgMCAwMDEuMTk0LTIuMDY4bC0xLjQwMS0xLjkxM2ExIDEgMCAwMTAtMS4xODJsMS40LTEuOTEyYTcuMTY1IDcuMTY1IDAgMDAtMS4xOTItMi4wNjlsLTIuMzU5LjI1N2ExIDEgMCAwMS0xLjAyMy0uNTkxTDkuMTkzLjkyNGE3LjE2NSA3LjE2NSAwIDAwLTIuMzg3LjAwMUw1Ljg1IDMuMDk0YTEgMSAwIDAxLTEuMDIzLjU5bC0yLjM1OC0uMjU2YTcuMjMgNy4yMyAwIDAwLTEuMTk0IDIuMDY4bDEuNDAxIDEuOTEzYTEgMSAwIDAxMCAxLjE4MmwtMS40IDEuOTEyYy4yOC43NTEuNjgxIDEuNDUgMS4xOTIgMi4wNjlsMi4zNTktLjI1N3pNOCAxMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0xYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HbGFzc2VzID0gZnVuY3Rpb24gRXVpSWNvbkdsYXNzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAzNSA5QTMuNSAzLjUgMCAwMTE1IDcuMDVWNC41YzAtMS4wNzItLjY0OC0xLjcyLTIuMDk4LTIuMDFhLjUuNSAwIDAxLjE5Ni0uOThDMTQuOTgxIDEuODg2IDE2IDIuOTA1IDE2IDQuNXY0LjI1YzAgLjA3Mi0uMDE1LjE0LS4wNDMuMjAyQTMuNSAzLjUgMCAxMTkuMDM1IDEwaC0yLjA3QTMuNSAzLjUgMCAxMS4wNDMgOC45NTIuNDk4LjQ5OCAwIDAxMCA4Ljc1VjQuNWMwLTEuNTk1IDEuMDE5LTIuNjE0IDIuOTAyLTIuOTlhLjUuNSAwIDAxLjE5Ni45OEMxLjY0OCAyLjc4IDEgMy40MjggMSA0LjV2Mi41NUEzLjUgMy41IDAgMDE2Ljk2NSA5aDIuMDd6TTMuNSAxMmEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em05IDBhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xhc3NlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uR2xvYmUgPSBmdW5jdGlvbiBFdWlJY29uR2xvYmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxOSA4YTYuNDYyIDYuNDYyIDAgMDAxLjAwMyAzaDIuMzgyYTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2LTNoLTIuOTl6bTAtMWgyLjk4OWMuMDMzLTEuMDc4LjE3Mi0yLjA5NC4zOTYtM0gyLjAyMmE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzIDN6TTEzLjk4IDhoLTIuOTg5YTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2IDNoMi4zODJhNi40NjIgNi40NjIgMCAwMDEuMDAzLTN6bTAtMWE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzLTNoLTIuMzgyYy4yMjQuOTA2LjM2MyAxLjkyMi4zOTYgM2gyLjk5ek01LjAwOCA4Yy4wMzcgMS4xMDcuMTk1IDIuMTI3LjQyOSAzaDQuMTI2Yy4yMzQtLjg3My4zOTItMS44OTMuNDI5LTNINS4wMDh6bTAtMWg0Ljk4NGExMy40MjIgMTMuNDIyIDAgMDAtLjQyOS0zSDUuNDM3YTEzLjQyMiAxMy40MjIgMCAwMC0uNDI5IDN6TS4wMTYgOEgwVjdoLjAxNmE3LjUgNy41IDAgMDExNC45NjggMEgxNXYxaC0uMDE2QTcuNSA3LjUgMCAwMS4wMTYgOHptMi43OTQgNGE2LjUwMSA2LjUwMSAwIDAwMi43MTcgMS42OTVBNy4zMTUgNy4zMTUgMCAwMTQuNyAxMkgyLjgxem05LjM4IDBIMTAuM2MtLjIzLjY1Ny0uNTEgMS4yMy0uODI3IDEuNjk1QTYuNTAxIDYuNTAxIDAgMDAxMi4xOSAxMnptLTYuNDI4IDBjLjQ4NCAxLjI0IDEuMTMyIDIgMS43MzggMiAuNjA2IDAgMS4yNTQtLjc2IDEuNzM4LTJINS43NjJ6TTIuODEgM0g0LjdjLjIzLS42NTcuNTEtMS4yMy44MjctMS42OTVBNi41MDEgNi41MDEgMCAwMDIuODEgM3ptOS4zOCAwYTYuNTAxIDYuNTAxIDAgMDAtMi43MTctMS42OTVjLjMxNy40NjUuNTk3IDEuMDM4LjgyNyAxLjY5NWgxLjg5ek01Ljc2MiAzaDMuNDc2QzguNzU0IDEuNzYgOC4xMDYgMSA3LjUgMWMtLjYwNiAwLTEuMjU0Ljc2LTEuNzM4IDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsb2JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiID0gZnVuY3Rpb24gRXVpSWNvbkdyYWIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNSA2Yy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTF6bTAgM2MuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjc2LjIyOS0uNS41LS41aDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDIuNWMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6bTMgMGMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmlkID0gZnVuY3Rpb24gRXVpSWNvbkdyaWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMXptMy0xVjJIMnYyaDJ6bTIgMVYxaDR2NEg2em0zLTFWMkg3djJoMnptMiAxVjFoNHY0aC00em0xLTFoMlYyaC0ydjJ6TTEgMTBWNmg0djRIMXptMy0xVjdIMnYyaDJ6bTIgMVY2aDR2NEg2em0zLTFWN0g3djJoMnptMiAxVjZoNHY0aC00em0zLTFWN2gtMnYyaDJ6TTEgMTV2LTRoNHY0SDF6bTEtMWgydi0ySDJ2MnptNCAxdi00aDR2NEg2em0xLTFoMnYtMkg3djJ6bTQgMXYtNGg0djRoLTR6bTEtMWgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyaWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkhlYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MDIgMy4wOThhMy43NSAzLjc1IDAgMDAtNS4zMDQgNS4zMDRsNS41NTggNS4yN0w4IDE0bDUuODkyLTUuNTg4YTMuNzUgMy43NSAwIDEwLTUuMjk0LTUuMzEzTDggMy42OTdsLS41OTgtLjU5OXpNMi43OTYgNy42ODVhMi43NDcgMi43NDcgMCAwMS4wMS0zLjg4IDIuNzUgMi43NSAwIDAxMy44ODkgMEw4IDUuMTExbDEuMzA1LTEuMzA2YTIuNzUgMi43NSAwIDExMy44OSAzLjg5TDggMTIuNjIgMi43OTYgNy42ODV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25IZWF0bWFwID0gZnVuY3Rpb24gRXVpSWNvbkhlYXRtYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA5YTMgMyAwIDExMCA2IDMgMyAwIDAxMC02em0wIDFhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTQgMmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptMCAxYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0wIDVhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMWEzIDMgMCAxMDAgNiAzIDMgMCAwMDAtNnptOC05YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0wIDFhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXRtYXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlbHAgPSBmdW5jdGlvbiBFdWlJY29uSGVscChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42IDEyLjE4NmwtMS4zNTctMS4zNThjLS4wMjUtLjAyNS0uMDU4LS4wMzQtLjA4NC0uMDU2LjUzLS43OTQuODQtMS43NDYuODQtMi43NzNhNC45NzcgNC45NzcgMCAwMC0uODQtMi43NzJjLjAyNi0uMDIuMDU5LS4wMy4wODQtLjA1NkwxMy42IDMuODEzYTYuOTYgNi45NiAwIDAxMCA4LjM3M3pNOCAxNUE2Ljk1NiA2Ljk1NiAwIDAxMy44MTQgMTMuNmwxLjM1OC0xLjM1OGMuMDI1LS4wMjUuMDM0LS4wNTcuMDU1LS4wODRDNi4wMiAxMi42ODggNi45NzQgMTMgOCAxM2E0Ljk3OCA0Ljk3OCAwIDAwMi43NzMtLjg0Yy4wMi4wMjYuMDMuMDU4LjA1Ni4wODNsMS4zNTcgMS4zNThBNi45NTYgNi45NTYgMCAwMTggMTV6bS01LjYwMS0yLjgxM2E2Ljk2MyA2Ljk2MyAwIDAxMC04LjM3M2wxLjM1OSAxLjM1OGMuMDI0LjAyNS4wNTcuMDM1LjA4NC4wNTZBNC45NyA0Ljk3IDAgMDAzIDhjMCAxLjAyNy4zMSAxLjk4Ljg0MiAyLjc3My0uMDI3LjAyMi0uMDYuMDMxLS4wODQuMDU2bC0xLjM2IDEuMzU4em01LjYtLjE4N0E0IDQgMCAxMTggNGE0IDQgMCAwMTAgOHpNOCAxYzEuNTczIDAgMy4wMTkuNTI1IDQuMTg3IDEuNGwtMS4zNTcgMS4zNThjLS4wMjUuMDI1LS4wMzUuMDU3LS4wNTYuMDg0QTQuOTc5IDQuOTc5IDAgMDA4IDNhNC45NzkgNC45NzkgMCAwMC0yLjc3My44NDJjLS4wMjEtLjAyNy0uMDMtLjA1OS0uMDU1LS4wODRMMy44MTQgMi40QTYuOTU3IDYuOTU3IDAgMDE4IDF6bTAtMWE4LjAwMSA4LjAwMSAwIDEwLjAwMyAxNi4wMDJBOC4wMDEgOC4wMDEgMCAwMDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVscDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSG9tZSA9IGZ1bmN0aW9uIEV1aUljb25Ib21lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xMyAxLjIyOWw1LjUgNC40N2ExIDEgMCAwMS4zNy43NzdWMTRhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjYuNDc2YTEgMSAwIDAxLjM3LS43NzZsNS41LTQuNDcxYTEgMSAwIDAxMS4yNiAwek0xMyA2LjQ3Nkw3LjUgMi4wMDUgMiA2LjQ3NVYxNGgxMVY2LjQ3NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSG9tZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSUluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbklJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTEuNTA4TDcuNDY4IDhINi4yNVY3aDIuNDAxbC4wMyAzLjUwOEg5Ljh2MUg3LjV6bS0uMjUtNi4yMDJhLjgzLjgzIDAgMDEuMjA3LS41NzdjLjEzNy0uMTUzLjMzNC0uMjI5LjU5LS4yMjkuMjU2IDAgLjQ1NC4wNzYuNTk0LjIzLjE0LjE1Mi4yMDkuMzQ1LjIwOS41NzYgMCAuMjI4LS4wNy40MTctLjIxLjU2OC0uMTQuMTUtLjMzNy4yMjYtLjU5My4yMjYtLjI1NiAwLS40NTMtLjA3NS0uNTktLjIyNmEuODEuODEgMCAwMS0uMjA3LS41Njh6TTggMTNBNSA1IDAgMTA4IDNhNSA1IDAgMDAwIDEwem0wIDFBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkltYWdlID0gZnVuY3Rpb24gRXVpSWNvbkltYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTIgMiAwIDExLTQgMCAyIDIgMCAwMTQgMHptOS00YTEgMSAwIDAxMSAxdjEyYTEgMSAwIDAxLTEgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xem0tMy40NDggNi4xMzRsLTMuNzYgMi43NjlhLjUuNSAwIDAxLS40MzYuMDc3bC0uMDg3LS4wMzQtMS43MTMtLjg3TDEgMTEuOFYxNGgxNFY5Ljc1MWwtMy40NDgtMi42MTd6TTE1IDJIMXY4LjYzNWw0LjI4LTIuNTU4YS41LjUgMCAwMS4zODktLjA1NGwuMDk0LjAzNyAxLjY4NC44NTUgMy44MTMtMi44MDdhLjUuNSAwIDAxLjUyLS4wNDVsLjA3OS4wNUwxNSA4LjQ5NVYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbWFnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW1wb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkltcG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTAuMTE0bDEuODUtMS45NDNhLjUyLjUyIDAgMDEuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAxLTIuMzEgMEw1LjQxIDlhLjYxNy42MTcgMCAwMTAtLjgyOS41Mi41MiAwIDAxLjc3IDBMOCAxMC4wODJWMS41NTZDOCAxLjI0OSA4LjIyNCAxIDguNSAxcy41LjI0OS41LjU1NnY4LjU1OHpNNC4xOCA2YS45OTMuOTkzIDAgMDAtLjk3Mi44MDRsLTEuMTg5IDZBLjk5NS45OTUgMCAwMDIuOTkxIDE0aDExLjAxOGExIDEgMCAwMC45NzItMS4xOTZsLTEuMTktNmEuOTkzLjk5MyAwIDAwLS45Ny0uODA0SDQuMTh6TTYgNXYxaDVWNWgxLjgyNWMuOTQ2IDAgMS43Ni42NzMgMS45NDYgMS42MDhsMS4xOSA2QTIgMiAwIDAxMTQuMDE2IDE1SDIuOTg0YTEuOTkyIDEuOTkyIDAgMDEtMS45NDUtMi4zOTJsMS4xOS02QzIuNDE0IDUuNjczIDMuMjI5IDUgNC4xNzQgNUg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbXBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4Q2xvc2UgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhDbG9zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUuNS0xLjIwN0w5LjA4NiA4LjM3OWwtLjcwNy43MDdMOS43OTMgMTAuNWwtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNC0xLjQxNCAxLjQxNCAxLjQxNC43MDctLjcwNy0xLjQxNC0xLjQxNCAxLjQxNC0xLjQxNC0uNzA3LS43MDdMMTAuNSA5Ljc5M3pNMyAxMXYtMWgxdjFIM3ptNy41LTVhNC41IDQuNSAwIDExMCA5IDQuNSA0LjUgMCAwMTAtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhDbG9zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg0djFIMVYxaDEydjVoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoNnYxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoM3YxSDV6bS0yIDB2LTFoMXYxSDN6bTQuNTAyIDEuNDFMMTIuOTEzIDcgMTUgOS4wODdsLTUuNDEgNS40MUw3IDE1bC41MDItMi41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleEZsdXNoID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Rmx1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuNTE2IDlIMTAuNWEuNS41IDAgMDEwLTFoNC4wMTZMMTMuMTEgNS45NDhjLS4xNzEtLjI1Mi0uMTM3LS42Mi4wNzktLjgyMS4yMTctLjIuNTMxLS4xNTkuNzAzLjA5MmwyIDIuOTE2YS42NDguNjQ4IDAgMDEuMTA4LjM5Ny42NDMuNjQzIDAgMDEtLjEwOC4zMzJsLTIgMi45MThBLjQ3OC40NzggMCAwMTEzLjUgMTJhLjQ1Ny40NTcgMCAwMS0uMzEyLS4xMjdjLS4yMTYtLjIwMi0uMjUtLjU3LS4wNzktLjgyTDE0LjUxNiA5ek0zIDE1SDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNy44Yy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDIuMiAyLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWN2gtMVY1SDguNWEuNS41IDAgMDEtLjUtLjVWMkgzdjEyaDh2LTRoMXY0YTEgMSAwIDAxLTEgMUgzem0tMS0xVjJIMXYxMmgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEZsdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleE1hcHBpbmcgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhNYXBwaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA4SDQuOTE1YTEuNSAxLjUgMCAxMTAtMUg4VjIuNUExLjUgMS41IDAgMDE5LjUgMWgyLjU4NWExLjUgMS41IDAgMTEwIDFIOS41YS41LjUgMCAwMC0uNS41djEwYS41LjUgMCAwMC41LjVoMi41ODVhMS41IDEuNSAwIDExMCAxSDkuNUExLjUgMS41IDAgMDE4IDEyLjVWOHpNMy41IDNhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3ptMCAxMmExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzem0xMC02YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4TWFwcGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4T3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUtMUg4djFoMnYyaDF2LTJoMnYtMWgtMlY4aC0xdjJ6bS03IDF2LTFoMXYxSDN6bTcuNS01YTQuNSA0LjUgMCAxMTAgOSA0LjUgNC41IDAgMDEwLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4T3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhSdW50aW1lID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4UnVudGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjYuODM5bC0xLS43MDdWMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTF2LTFINXYxaDN6bTAtMy4wNTVjMC0uMzQyLjA4Mi0uNjY0LjIzLS45NDVINXYxaDN2LS4wNTV6TTUgNWg1Ljk5OVY0SDV2MXpNMyA0djFoMVY0SDN6bTAgM3YxaDFWN0gzem0wIDN2MWgxdi0xSDN6bTExLjYwNy4ybC00LjMyLTMuMDU1QzkuNzI3IDYuNzUgOSA3LjIwNCA5IDcuOTQ1djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4UnVudGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDUuOTk5VjRINXYxek0zIDVoMVY0SDN2MXptMCAzaDFWN0gzdjF6bTYuMDIyLTFsLS4xNS4zMzMtLjczNy0uMDc4LS40NjctLjA1LS4zMy4zNDJBNS4xMyA1LjEzIDAgMDA2Ljk0OCA4SDVWN2g0LjAyMnptLTMuMDA1IDNMNiAxMC4wNTZsLjMwNi40MTEuMzk5LjUzM0g1di0xaDEuMDE3ek0zIDExaDF2LTFIM3YxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNy4wNWwtLjE2Mi0uMzU5LS4yLS40NDctLjQ3LS4xMUE1LjAxOSA1LjAxOSAwIDAwMTIgNi4wOThWMkgydjExaDQuMzZjLjE1Ny4zNTQuMzU1LjY5LjU5IDFIMVYxaDEydjYuMDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4wMDQgN2MuMzIyIDAgLjY0Ni4wMzYuOTY2LjEwOWwuNTk1IDEuMjkzIDEuNDY1LS4xNTJjLjQ1Ny40NjIuNzg2IDEuMDE2Ljk2OSAxLjYxbC0uODcgMS4xNC44NzEgMS4xNDFhMy45NCAzLjk0IDAgMDEtLjM4Ny44NTkgNC4wNTggNC4wNTggMCAwMS0uNTgzLjc1bC0xLjQ2NS0uMTUyLS41OTQgMS4yOTJhNC4zNyA0LjM3IDAgMDEtMS45NDEuMDAxbC0uNTk0LTEuMjkzLTEuNDY2LjE1MmEzLjk1NCAzLjk1NCAwIDAxLS45NjktMS42MWwuODctMS4xNEw3IDkuODZhMy45NDcgMy45NDcgMCAwMS45Ny0xLjYxbDEuNDY2LjE1Mi41OTMtMS4yOTJhNC4zNyA0LjM3IDAgMDEuOTc1LS4xMXpNMTEgMTJhMSAxIDAgMTAuMDAyLTEuOTk4QTEgMSAwIDAwMTEgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4U2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbklucHV0T3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbklucHV0T3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTMuOTk5di0yLjk5aDFWMTVIMFYxaDExdjMuOTk5aC0xVjIuMDAxSDF2MTEuOTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEwVjlIMTF2MXpNMTMgOS41bDMtMy0zLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNi41djZsLTMtM3pNNyA3VjZoNi41djF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklucHV0T3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbnNwZWN0ID0gZnVuY3Rpb24gRXVpSWNvbkluc3BlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zNjMgMTQuNjU4YS41LjUgMCAxMS0uNzEzLjdsLTIuOTctMy4wMjNhLjUuNSAwIDAxLjAwMS0uN0EzLjkgMy45IDAgMTA4LjkgMTIuOGEuNS41IDAgMTEwIC45OTkgNC45IDQuOSAwIDExMy44MjEtMS44MzNsMi42NDIgMi42OTF6TTMuMDk0IDEzYS41LjUgMCAxMTAgMUgyLjVBMi41IDIuNSAwIDAxMCAxMS41di05QTIuNSAyLjUgMCAwMTIuNSAwaDlBMi41IDIuNSAwIDAxMTQgMi41di41OTlhLjUuNSAwIDExLTEgMFYyLjVBMS41IDEuNSAwIDAwMTEuNSAxaC05QTEuNSAxLjUgMCAwMDEgMi41djlBMS41IDEuNSAwIDAwMi41IDEzaC41OTR6TTIuNSAzYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTQgMmEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTIgMWEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDNhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptNi02YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tOCA4YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluc3BlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkludmVydCA9IGZ1bmN0aW9uIEV1aUljb25JbnZlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEzLjI1YTUuMjUgNS4yNSAwIDEwMC0xMC41IDUuMjUgNS4yNSAwIDAwMCAxMC41ek04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmE2IDYgMCAxMDAgMTJWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW52ZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JcCA9IGZ1bmN0aW9uIEV1aUljb25JcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMmg4em0tMiAzSDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1ek02IDVINXY2aDFWNXptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LZXlib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25LZXlib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAzaDE2djExSDBWM3ptMTUgMTBWNEgxdjloMTR6TTIgNWgydjFIMlY1em0yIDd2LTFIMnYxaDJ6bTEwLTF2MWgtMnYtMWgyem0tMyAxdi0xSDV2MWg2ek01IDVoMXYxSDVWNXpNMyA3SDJ2MWgxVjd6bTMgMGgxdjFINlY3ek0zIDlIMnYxaDFWOXptMyAwaDF2MUg2Vjl6bTItNEg3djFoMVY1ek00IDdoMXYxSDRWN3ptNSAwSDh2MWgxVjd6bTEgMGgxdjFoLTFWN3pNNSA5SDR2MWgxVjl6bTMgMGgxdjFIOFY5em0zIDBoLTF2MWgxVjl6TTkgNWgxdjFIOVY1em0zIDBoLTF2MWgxVjV6bTEgMGgxdjFoLTFWNXptMSAyaC0ydjNoMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXlib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsRmllbGQgPSBmdW5jdGlvbiBFdWlJY29uS3FsRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTAsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTBcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDlhNSA1IDAgMTEwLTggNSA1IDAgMTEwIDh6bS43NS0uNjkyYTQgNCAwIDEwMC02LjYxNUE0Ljk4MSA0Ljk4MSAwIDAxMTAgNWE0Ljk4MSA0Ljk4MSAwIDAxLTEuMjUgMy4zMDh6TTQuMTMzIDhWNS41NTloMi40OTZ2LS42MjVINC4xMzNWMi45OTZoMi43MTl2LS42MzNIMy40M1Y4aC43MDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LcWxGdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25LcWxGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgN0gzdjJoNHYybDMtMy0zLTN2MnpNNiA2VjVhMSAxIDAgMDExLjcwNy0uNzA3bDMgM2ExIDEgMCAwMTAgMS40MTRsLTMgM0ExIDEgMCAwMTYgMTF2LTFIM2ExIDEgMCAwMS0xLTFWN2ExIDEgMCAwMTEtMWgzem03LjUtM2EuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbE9wZXJhbmQgPSBmdW5jdGlvbiBFdWlJY29uS3FsT3BlcmFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjE5MiAxMC4xNDVsMi4yOTgtMS43OTJjLjI1OS0uMTk2LjI1OS0uNTA5IDAtLjcwNmwtMi4yOTgtMS43OTJjLS4yNTYtLjE5Ni0uMjU2LS41MTMgMC0uNzA4YS44MS44MSAwIDAxLjkzIDBsMi4zIDEuNzkxYy43NzIuNTkuNzcgMS41MzcgMCAyLjEyNGwtMi4zIDEuNzkxYS44MS44MSAwIDAxLS45MyAwYy0uMjU2LS4xOTUtLjI1Ni0uNTEyIDAtLjcwOHptLTYuMzg0LTQuMjlMMi41MSA3LjY0N2MtLjI1OS4xOTYtLjI1OS41MDkgMCAuNzA2bDIuMjk4IDEuNzkyYy4yNTYuMTk2LjI1Ni41MTMgMCAuNzA4YS44MS44MSAwIDAxLS45MyAwbC0yLjMtMS43OTFjLS43NzItLjU5LS43Ny0xLjUzNyAwLTIuMTI0bDIuMy0xLjc5MWEuODEuODEgMCAwMS45MyAwYy4yNTYuMTk1LjI1Ni41MTIgMCAuNzA4ek02LjUgNmgzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6bTAgM2gzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbE9wZXJhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFNlbGVjdG9yID0gZnVuY3Rpb24gRXVpSWNvbktxbFNlbGVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMmE0IDQgMCAxMDAtOCA0IDQgMCAwMDAgOHptMCAxQTUgNSAwIDExNSAzYTUgNSAwIDAxMCAxMHptNi0xYTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wIDFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsU2VsZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFZhbHVlID0gZnVuY3Rpb24gRXVpSWNvbktxbFZhbHVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTUgNSAwIDExMCA4IDUgNSAwIDExMC04em0tLjc1LjY5MmE0IDQgMCAxMDAgNi42MTVBNC45ODEgNC45ODEgMCAwMTYgOGMwLTEuMjY4LjQ3Mi0yLjQyNiAxLjI1LTMuMzA4ek0xMS4zNDggMTFsMi4wNzgtNS42MzdoLS43MzlsLTEuNjU2IDQuNzI3aC0uMDYyTDkuMzEzIDUuMzYzaC0uNzM5TDEwLjY1MiAxMWguNjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxWYWx1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3ViZXJuZXRlc05vZGUgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc05vZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDExLjQyVjQuNThMOCAxLjE1MiAyIDQuNTh2Ni44NGw2IDMuNDI4IDYtMy40Mjh6TTggMTZsNy00VjRMOCAwIDEgNHY4bDcgNHpNOCA0LjYwN2wzIDEuNzE0VjkuNjhsLTMgMS43MTQtMy0xLjcxNFY2LjMybDMtMS43MTR6bTQgMS4xMzR2NC41MThsLTQgMi4yODYtNC0yLjI4NlY1Ljc0MWw0LTIuMjg2IDQgMi4yODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNOb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LdWJlcm5ldGVzUG9kID0gZnVuY3Rpb24gRXVpSWNvbkt1YmVybmV0ZXNQb2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDUuMTUxdjYuMjY5bC01LjUgMy4xNDJWOC4yOUwxNCA1LjE1MXptLS41MDgtLjg2MUw4IDEuMTUyIDIuNTA4IDQuMjkgOCA3LjQyNGw1LjQ5Mi0zLjEzNHpNMiA1LjE1MWw1LjUgMy4xNHY2LjI3MkwyIDExLjQyVjUuMTV6TTE1IDEybC03IDQtNy00VjRsNy00IDcgNHY4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzUG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MYXllcnMgPSBmdW5jdGlvbiBFdWlJY29uTGF5ZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzYgMS4wNTNhLjUuNSAwIDAxLjQ0OCAwbDYgM2EuNS41IDAgMDEwIC44OTRsLTYgM2EuNS41IDAgMDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAxMC0uODk0bDYtM3pNMi42MTggNC41TDcuNSA2Ljk0MSAxMi4zODIgNC41IDcuNSAyLjA1OSAyLjYxOCA0LjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjA1MyA3LjI3NmEuNS41IDAgMDEuNjctLjIyM0w3LjUgOS45NGw1Ljc3Ni0yLjg4OGEuNS41IDAgMTEuNDQ4Ljg5NGwtNiAzYS41LjUgMCAwMS0uNDQ4IDBsLTYtM2EuNS41IDAgMDEtLjIyMy0uNjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjcyNCAxMC4wNTNhLjUuNSAwIDEwLS40NDguODk0bDYgM2EuNS41IDAgMDAuNDQ4IDBsNi0zYS41LjUgMCAxMC0uNDQ4LS44OTRMNy41IDEyLjk0bC01Ljc3Ni0yLjg4OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGF5ZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MZXR0ZXJpbmcgPSBmdW5jdGlvbiBFdWlJY29uTGV0dGVyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUgM2wzIDlIN0w2IDlIM2wtMSAzSDFsMy05aDF6bS0uNSAxLjVMNS42NjcgOEgzLjMzM0w0LjUgNC41em03Ljk5IDEuNjQ3QzEyLjE2IDYuMDA1IDExLjc2IDYgMTEuNSA2Yy0uMzU5IDAtMS4wMjIuMTc1LTEuNjMyLjgzOGwtLjczNi0uNjc2QzkuOTI5IDUuMjk0IDEwLjg1OSA1IDExLjUgNWguMDE2Yy4yNSAwIC44MzYgMCAxLjM2OS4yMjguMjgxLjEyLjU2OC4zMTMuNzgyLjYxNy4yMTYuMzA3LjMzMy42OTMuMzMzIDEuMTU1djVoLTF2LS4zNTRhMi4xMDEgMi4xMDEgMCAwMS0uMDY0LjAzOGMtLjU1NC4zMTctMS4xNjYuMzE2LTEuNDIuMzE2aC0uMDMyYy0uMjUgMC0uODM2IDAtMS4zNjgtLjIyOGExLjgxIDEuODEgMCAwMS0uNzgzLS42MTdDOS4xMTcgMTAuODQ4IDkgMTAuNDYyIDkgMTBjMC0uNDYyLjExNy0uODQ4LjMzMy0xLjE1NS4yMTQtLjMwNC41LS40OTYuNzgzLS42MTdDMTAuNjQ4IDggMTEuMjMzIDggMTEuNDg0IDhoLjAxNmMuMjU4IDAgLjY5LS4wMDMgMS4wNS0uMTA2YS44ODkuODg5IDAgMDAuMzY0LS4xNzljLjA1My0uMDUuMDg2LS4xMDguMDg2LS4yMTVWN2MwLS4yODgtLjA3LS40NjUtLjE1MS0uNThhLjgxNC44MTQgMCAwMC0uMzU4LS4yNzN6TTEzIDguOGMtLjA2LjAyMi0uMTE4LjA0LS4xNzUuMDU3QzEyLjMyIDkgMTEuNzYyIDkgMTEuNTEzIDlIMTEuNWMtLjI1OSAwLS42Ni4wMDUtLjk5LjE0N2EuODE0LjgxNCAwIDAwLS4zNTkuMjc0Yy0uMDguMTE0LS4xNTEuMjkxLS4xNTEuNTc5cy4wNy40NjUuMTUxLjU4YS44MTMuODEzIDAgMDAuMzU4LjI3M2MuMzMxLjE0Mi43MzIuMTQ3Ljk5MS4xNDcuMjU3IDAgLjYzLS4wMDguOTQtLjE4NC4yNTUtLjE0Ni41Ni0uNDYzLjU2LTEuMzE2di0uNzAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MZXR0ZXJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEYXNoZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURhc2hlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjcwNyA0LjcwN2ExIDEgMCAxMS0xLjQxNC0xLjQxNGwyLTJhMSAxIDAgMTExLjQxNCAxLjQxNGwtMiAyem0tNi40MTQgNWExIDEgMCAwMDEuNDE0IDBsMi0yYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMDAwIDEuNDE0em0tNSA1YTEgMSAwIDAwMS40MTQgMGwyLTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEYXNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEb3R0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURvdHRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgM2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzek0xMSA1LjVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTUuNSAxMWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0tNCA0YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEb3R0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVTb2xpZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lU29saWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjI5MyAxNC43MDdhMSAxIDAgMDAxLjQxNCAwbDEyLTEyYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0xMiAxMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVTb2xpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluayA9IGZ1bmN0aW9uIEV1aUljb25MaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42NiAzLjgwM2EuNS41IDAgMTEtLjcwNi0uNzA3TDkuMjY4Ljc4YzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0czEuNTQgMy40MDkuMzU0IDQuNTk2bC0zLjUzNiAzLjUzNmMtMS4xODcgMS4xODctMy4yNDIgMS00LjU5Ni0uMzU0YS41LjUgMCAxMS43MDctLjcwN2MuOTkuOTkgMi40MTcgMS4xMTkgMy4xODIuMzU0bDMuNTM2LTMuNTM2Yy43NjUtLjc2NS42MzUtMi4xOTMtLjM1NC0zLjE4Mi0uOTktLjk5LTIuNDE3LTEuMTE5LTMuMTgyLS4zNTRMNy42NjEgMy44MDN6bS0uMzIgNy4zOTJhLjUuNSAwIDExLjcwNy43MDdsLTIuMzE1IDIuMzE0Yy0xLjE4NyAxLjE4OC0zLjI0MiAxLTQuNTk2LS4zNTMtMS4zNTQtMS4zNTQtMS41NC0zLjQxLS4zNTMtNC41OTZMNC4zMTggNS43M2MxLjE4Ny0xLjE4NyAzLjI0Mi0xIDQuNTk2LjM1NGEuNS41IDAgMDEtLjcwNy43MDdjLS45ODktLjk5LTIuNDE2LTEuMTItMy4xODItLjM1NEwxLjQ5IDkuOTc0Yy0uNzY2Ljc2NS0uNjM2IDIuMTkzLjM1MyAzLjE4Mi45OS45ODkgMi40MTcgMS4xMTkgMy4xODIuMzUzbDIuMzE1LTIuMzE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkxpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2gydjFIMnptNCAwVjNoOHYxSDZ6bTAgM1Y2aDh2MUg2em0wIDNWOWg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem00IDN2LTFoOHYxSDZ6bS00IDB2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpc3RBZGQgPSBmdW5jdGlvbiBFdWlJY29uTGlzdEFkZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDExSDl2MWgydjJoMXYtMmgydi0xaC0yVjloLTF2MnpNNy43NTggOWE0LjUgNC41IDAgMTEtLjUwMiA0SDZ2LTFoMS4wMjdhNC41NDggNC41NDggMCAwMS4yMy0ySDZWOWgxLjc1OHpNMiA0VjNoMnYxSDJ6bTQgMFYzaDh2MUg2em0wIDNWNmg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem0wIDN2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3RBZGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNXYtLjhDNCAxLjg4IDUuNzkgMCA4IDBzNCAxLjg4IDQgNC4yVjVoMS4xNDNjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFIMi44NTdDMi4zODQgMTYgMiAxNS41NTIgMiAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFINHpNMyAxNWgxMFY2SDN2OXptNS45OTgtMy43MDZMOS41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNi41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6TTExIDQuMzZDMTEgMi41MDQgOS42NTcgMSA4IDFTNSAyLjUwNCA1IDQuMzZWNWg2di0uNjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2tPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkxvY2tPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTQzIDVjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFILjg1N0MuMzg0IDE2IDAgMTUuNTUyIDAgMTVWNmMwLS41NTIuMzg0LTEgLjg1Ny0xSDh2LS44QzggMS44OCA5Ljc5IDAgMTIgMHM0IDEuODggNCA0LjJWNWgtMXYtLjY0QzE1IDIuNTA0IDEzLjY1NyAxIDEyIDFTOSAyLjUwNCA5IDQuMzZWNWgyLjE0M3pNMSAxNWgxMFY2SDF2OXptNS45OTgtMy43MDZMNy41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNC41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2tPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQWVyb3NwaWtlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BZXJvc3Bpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzQzNzNBXCIsXG4gICAgZDogXCJNMCAzMS44MDZoMzJWLjc3NkgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTkuNDQ4IDEyLjUwOGwtOC45ODYgMy44NiA4Ljk4NiAzLjg4M3YtNy43NDN6bS0xMS4zMDQgNC43M2wtMi4wOTQtLjg2MyAyLjA5NC0uOTMxIDE3Ljc0OS03Ljc0MXYyLjA2MmwtNC42NTQgMS45OXY5LjI1bDQuNjU0IDIuMDF2MS45NjhMOC4xNDMgMTcuMjR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQWVyb3NwaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXBhY2hlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcGFjaGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fYXBhY2hlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiMjEuOTAyJVwiLFxuICAgIHgyOiBcIjE0MS44NzklXCIsXG4gICAgeTE6IFwiNjMuOTA1JVwiLFxuICAgIHkyOiBcIjIwLjIxMyVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNjk5MjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMS4yMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y3OUEyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjgzLjgzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiLTIxNy42NTElXCIsXG4gICAgeDI6IFwiNzQuNzQzJVwiLFxuICAgIHkxOiBcIjE3Ny4xMjclXCIsXG4gICAgeTI6IFwiMzYuNjY1JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiLTgwLjA0NCVcIixcbiAgICB4MjogXCIxNDYuMjQlXCIsXG4gICAgeTE6IFwiNzMuNTc0JVwiLFxuICAgIHkyOiBcIjMxLjUzOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIi0xOC4zMTYlXCIsXG4gICAgeDI6IFwiMTY1LjAwMiVcIixcbiAgICB5MTogXCI1Mi40OTclXCIsXG4gICAgeTI6IFwiNDEuNjU2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIi0xMDkuNzAxJVwiLFxuICAgIHgyOiBcIjY0LjYxNyVcIixcbiAgICB5MTogXCI0NjMuNzE1JVwiLFxuICAgIHkyOiBcIjE3LjE5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgeDE6IFwiLTM0Ljg4JVwiLFxuICAgIHgyOiBcIjExMC41OTklXCIsXG4gICAgeTE6IFwiMTMwLjUyMiVcIixcbiAgICB5MjogXCItOS4xMTglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICB4MTogXCItMTMuNjczJVwiLFxuICAgIHgyOiBcIjExNy44NTglXCIsXG4gICAgeTE6IFwiMTkyLjU2NCVcIixcbiAgICB5MjogXCItMTM2LjkwNiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMTMuNjI4LjE4Yy0uNDk4LjI5My0xLjMzMiAxLjEzNC0yLjMyOCAyLjM0OHYuMDc0bC44NzEgMS42MTMuMDQ0LjAzYy42NDEtLjkxNCAxLjI4OS0xLjc0MiAxLjk0OC0yLjQ0Ni4wNS0uMDU2LjA3NS0uMDguMDc1LS4wOC0uMDI1LjAyNC0uMDUuMDU1LS4wNzUuMDgtLjIxMS4yMzctLjg1OS45ODQtMS44MyAyLjQ3OGwuMTEyLjAyNXMyLjI3My0uMjI0IDMuMzY4LS40MWwuMDYyLS4wNTdjLjM1LTEuOTU1LS4zNDItMi44NTEtLjM0Mi0yLjg1MVMxNC42NjEtLjQyMyAxMy42MjguMTh6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjUyNSA4LjY5N2MuMjgtLjUxNi41Ni0xLjAyNy44NC0xLjUxOS4yOTMtLjUxLjU5Mi0xLjAwOC44OTctMS40ODhhLjM5Ny4zOTcgMCAwMC4wNS0uMDg3Yy4yOTktLjQ3My41OTgtLjkyMS45MDMtMS4zNTdMMTEuMyAyLjUyYy0uMDY5LjA4MS0uMTM3LjE2OC0uMjA2LjI1Ni0uMjYxLjMzLS41MzUuNjc4LS44MTUgMS4wNTJhNTEuNzgzIDUxLjc4MyAwIDAwLTEuODkzIDIuNzA4Yy0uMjYxLjQwNS0uNTMuODE2LS43OSAxLjI0NWwtLjAzMi4wNVY3LjlsMS4xNCAyLjI2LjA1LjAxOWMuMjU1LS40OTguNTEtLjk5Ni43NzEtMS40ODJ6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjU2MyAxOS43NmMuMjA2LS41MzUuNDI0LTEuMDc3LjY0Mi0xLjYyNS4yMTEtLjUyMy40MjMtMS4wNTIuNjQ3LTEuNTguMjE4LS41My40NDgtMS4wNi42NzktMS41OTUuMjM2LS41NDEuNDczLTEuMDgzLjcxNi0xLjYxOC4yNDItLjUzLjQ4NS0xLjA1OS43MzQtMS41ODIuMDg3LS4xODYuMTgtLjM4LjI3NC0uNTY2LjE1Ni0uMzI0LjMxOC0uNjQ4LjQ3My0uOTY1LjAwNy0uMDE5LjAyLS4wMzEuMDI1LS4wNUw3LjU2NCA3LjgzMmwtLjA1Ni4wOTNjLS4yNzQuNDU1LS41NTQuOTE1LS44MjIgMS4zODlhNTQuNTM1IDU0LjUzNSAwIDAwLTEuNDUgMi43MTRjLS4wNDQuMDg3LS4wODEuMTY4LS4xMjUuMjU1YTMyLjE1IDMyLjE1IDAgMDAtLjcwMyAxLjU0NGMtLjIzNy41Ni0uNDQ4IDEuMDk2LS42MzUgMS42MDYtLjEyNS4zMzctLjIzLjY1NC0uMzM2Ljk2NS0uMDgxLjI2Mi0uMTYyLjUzLS4yMzcuNzkxLS4xOC42MjMtLjMzIDEuMjM5LS40NTQgMS44NjJsLjAxOC4wNzQgMS4xNCAyLjI2Ni4wMzcuMDJjLjE1NS0uNDI0LjMxNy0uODQ4LjQ4NS0xLjI4My4wNDQtLjEyNS4wOTQtLjI0My4xMzctLjM2OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIuNzMzIDE5LjEzMmExOC44NCAxOC44NCAwIDAwLS4zMTEgMi4yNTNjMCAuMDI1LS4wMDYuMDUtLjAwNi4wODEtLjM3NC0uNTk4LTEuMzctMS4xNzctMS4zNy0xLjE3Ny43MTYgMS4wMzQgMS4yNTggMi4wNjEgMS4zMzggMy4wNy0uMzguMDgtLjkwMi0uMDM4LTEuNTEyLS4yNTUuNjI4LjU3OCAxLjEwMi43NCAxLjI4OC43ODQtLjU3OS4wMzctMS4xODMuNDM2LTEuNzkzLjg5Ljg5LS4zNiAxLjYwNy0uNTA0IDIuMTIzLS4zOTItLjgxNSAyLjMxLTEuNjMgNC44NjItMi40NTMgNy41NjQuMjUtLjA3NS4zOTktLjI0My40ODYtLjQ3My4xNDMtLjQ5MiAxLjExNC0zLjcwNCAyLjYyNy03LjkzMS4wNDQtLjExOS4wODctLjI0My4xMy0uMzYyLjAxMy0uMDMuMDI2LS4wNjguMDM4LS4xLjE2Mi0uNDQxLjMyNC0uODk2LjQ5OC0xLjM1Ni4wMzgtLjEwNi4wODEtLjIxMi4xMTktLjMxOHYtLjAwNmwtMS4xOS0yLjM1M2MwIC4wMy0uMDA2LjA1Ni0uMDEyLjA4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMTIuMzMzIDQuMjgzYy0uMjY4LjQxMS0uNTYuODc4LS44NzggMS40MDctLjAxOC4wMjUtLjAzLjA1Ni0uMDUuMDgxYTYyLjUzOCA2Mi41MzggMCAwMC0xLjY4NyAzLjA1Yy0uMjQ5LjQ4LS41MDQuOTg0LS43NjUgMS41MjZsLjA1Ni4wMjUgMi44OTUtLjMxMS4wNjgtLjA1Yy44NzgtLjQwNSAxLjI3LS43NzIgMS42NS0xLjMwMS4xLS4xNDMuMjA1LS4zLjMwNS0uNDU1LjMxMS0uNDg1LjYxNi0xLjAxNS44ODQtMS41NDQuMjYxLS41MS40OTItMS4wMi42NzItMS40NzVhNi41NiA2LjU2IDAgMDAuMzk4LTEuMzk1Yy0xLjE3LjIwNi0yLjYwOC4zOTktMy41NDguNDQyelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIiksXG4gICAgZDogXCJNOC44NCAxMC41OWMtLjEuMjEyLS4yMDUuNDMtLjMxLjY0Ny0uMTEzLjIzNy0uMjMxLjQ4Ni0uMzQzLjczNS0uMDU2LjEyNC0uMTE5LjI1NS0uMTc1LjM4LS4xOC4zODYtLjM1NC43ODQtLjU0MSAxLjE5NWExMDcuMDM1IDEwNy4wMzUgMCAwMC0xLjM1NyAzLjE5NGMtLjIxOC41MjktLjQzNiAxLjA3Ny0uNjU0IDEuNjM3LS4yLjUwNC0uMzk5IDEuMDE1LS41OTggMS41NS0uMDEyLjAyNS0uMDE4LjA1LS4wMy4wNzUtLjIuNTMtLjM5NCAxLjA2OC0uNiAxLjYyMi0uMDA2LjAxMi0uMDE3LjA0NS0uMDIzLjA1N2wuMDQzLjAxLjg2Ni0uMDk0LjA0OC0uMDJjLS4wMTgtLjAwNi0uMDMtLjAzLS4wNDgtLjAzNyAxLjE0NS0uMTQzIDIuNjctMS4wMDIgMy42Ni0yLjA2LjQ1NS0uNDg2Ljg2Ni0xLjA2NSAxLjI1Mi0xLjczOC4yODYtLjUwNC41NDctMS4wNTguODAzLTEuNjc1LjIyNC0uNTM1LjQzNS0xLjEyLjY0LTEuNzQ5YTMuNDU3IDMuNDU3IDAgMDEtLjg5Ni4zMTEgOC45NzcgOC45NzcgMCAwMS0uMTguMDM4Yy0uMDYyLjAxMi0uMTI1LjAxOC0uMTguMDMgMS4wNy0uNDEgMS43NDMtMS4yMDcgMi4yMzQtMi4xNzgtLjI4LjE5My0uNzQuNDQyLTEuMjg4LjU2NmEyLjUyIDIuNTIgMCAwMS0uMjMuMDQ0Yy0uMDIgMC0uMDM4LjAwNi0uMDU3LjAwNi4zNzQtLjE1NS42ODUtLjMzLjk1OS0uNTM1LjA1Ni0uMDQ0LjExMi0uMDg3LjE2OC0uMTM3LjA4MS0uMDc1LjE2Mi0uMTUuMjM3LS4yMjQuMDUtLjA1LjA5My0uMS4xNDMtLjE1Ni4xMDYtLjEyNC4yMDUtLjI2MS4yOTktLjQxLjAzLS4wNDQuMDU2LS4wOTQuMDg3LS4xMzguMDM3LS4wNjguMDY4LS4xMzcuMS0uMjA1LjE0OS0uMy4yNjctLjU2Ny4zNi0uODAzLjA1LS4xMTkuMDg4LS4yMjQuMTI1LS4zMy4wMTMtLjAzOC4wMjUtLjA4MS4wNDQtLjExOS4wMzctLjExMi4wNjgtLjIxMS4wOTMtLjMwNS4wMzctLjEzLjA1Ni0uMjM2LjA2OS0uMzExYTEuMDc3IDEuMDc3IDAgMDEtLjEyNS4wODdjLS4zMjQuMTkzLS44NzguMzY4LTEuMzI2LjQ0OGwuODg0LS4xLS44ODQuMWMtLjA2Mi4wMTMtLjEwNi4wMi0uMTU2LjAzMi4wMDQtLjAwNS0uOTk0LjEwMS0yLjk5NS4zMTZhMi4zMTMgMi4zMTMgMCAwMC0uMTE4LjI0NHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuMTE1IDIxLjkxNGMtLjE1NS40My0uMzE3Ljg3Mi0uNDczIDEuMzIgMCAuMDA2LS4wMDYuMDEzLS4wMDYuMDE5LS4wMjUuMDYyLS4wNDQuMTI0LS4wNjkuMTkzLS4xMDYuMzA1LS4xOTkuNTczLS40MSAxLjE5NS4zNDguMTYyLjYyOC41OC44OTYgMS4wNTlhMS44NzYgMS44NzYgMCAwMC0uNjIzLTEuMzE0YzEuNzI1LjA3NSAzLjIxMy0uMzYxIDMuOTc5LTEuNjE5LjA2OC0uMTEyLjEzLS4yMy4xODYtLjM1NS0uMzQ4LjQ0Mi0uNzg0LjYzLTEuNTkzLjU4NmgtLjAwNy4wMDdjMS4yMDEtLjUzNiAxLjc5OS0xLjA1MiAyLjMzNC0xLjkwNS4xMjUtLjIwNi4yNS0uNDI0LjM3NC0uNjY3LTEuMDUyIDEuMDc4LTIuMjY2IDEuMzgzLTMuNTQzIDEuMTUybC0uOTU4LjEwNmMtLjAzMi4wNjktLjA2My4xNS0uMDk0LjIzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcGFjaGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMDAtNyAwbC04IDQuNjE5QTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2Mmw3LjUgNC4zM1YxNy45NzlhNyA3IDAgMDEzLjUtNi4wNjJMMjcgNS4yNzYgMTkuNS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwMC03IDBMNSA1LjI3N2wxMSA2LjM1IDExLTYuMzUtNy41LTQuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yOC40MzUgNy43NmwtMTAuMDI2IDUuNzlhNi45OTQgNi45OTQgMCAwMTEuNTkgNC40Mjh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMDAzLjUtNi4wNjF2LTkuMjM4YTYuOTkyIDYuOTkyIDAgMDAtMS41ODYtNC40MjJsLS45NzguNTY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXdzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwMS4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMDEuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwMTEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJ6bS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMDAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOXptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTV6bTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMDEuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAwLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAxMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMDEuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjRjkwXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Bd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Bd3NNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3NNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMDEuMDc1LjI0MmMwIC4xMDUtLjA2NC4yMS0uMjAyLjMxNWwtLjY3LjQ0MmEuNTE0LjUxNCAwIDAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMDEtLjMzLS42MmMtLjgzLjk2Ny0xLjg3MyAxLjQ1LTMuMTI4IDEuNDUtLjg5NCAwLTEuNjA3LS4yNTItMi4xMjktLjc1Ni0uNTIxLS41MDUtLjc4Ny0xLjE3OC0uNzg3LTIuMDIgMC0uODk0LjMxOS0xLjYyLjk2OC0yLjE2Ni42NS0uNTQ3IDEuNTExLS44MiAyLjYwNy0uODIuMzYyIDAgLjczNS4wMyAxLjEyOC4wODMuMzk0LjA1My43OTkuMTM3IDEuMjI0LjIzMnYtLjc2OGMwLS44LS4xNy0xLjM1Ny0uNS0xLjY4My0uMzQtLjMyNi0uOTE1LS40ODQtMS43MzUtLjQ4NC0uMzcyIDAtLjc1NS4wNDMtMS4xNDkuMTM3LS4zOTQuMDk1LS43NzcuMjEtMS4xNS4zNTgtLjE3LjA3My0uMjk3LjExNS0uMzcyLjEzNmEuNjYuNjYgMCAwMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAxLjI5OC0uMjIxYy4zNzMtLjE5LjgyLS4zNDcgMS4zNC0uNDc0YTYuNTI0IDYuNTI0IDAgMDExLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyem0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAwMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAwLTEtLjA2M2MtLjcxMyAwLTEuMjM0LjEzNy0xLjU4Ni40Mi0uMzUuMjg1LS41MjEuNjg0LS41MjEgMS4yMSAwIC40OTQuMTI4Ljg2Mi4zOTQgMS4xMTUuMjU1LjI2My42MjguMzkgMS4xMTcuMzl6bTguNTQ1IDEuMTM1Yy0uMTkyIDAtLjMyLS4wMzItLjQwNS0uMTA1LS4wODUtLjA2My0uMTYtLjIxLS4yMjMtLjQxbC0yLjUwMS04LjEzYy0uMDY0LS4yMS0uMDk2LS4zNDctLjA5Ni0uNDIxIDAtLjE2OC4wODUtLjI2My4yNTYtLjI2M2gxLjA0M2MuMjAyIDAgLjM0LjAzMi40MTUuMTA1LjA4NS4wNjMuMTQ5LjIxLjIxMi40MWwxLjc4OCA2Ljk2MyAxLjY2LTYuOTYzYy4wNTQtLjIxLjExNy0uMzQ3LjIwMy0uNDEuMDg1LS4wNjMuMjM0LS4xMDUuNDI1LS4xMDVoLjg1MmMuMjAyIDAgLjM0LjAzMi40MjUuMTA1LjA4NS4wNjMuMTYuMjEuMjAzLjQxbDEuNjgxIDcuMDQ3IDEuODQxLTcuMDQ3Yy4wNjQtLjIxLjEzOC0uMzQ3LjIxMy0uNDEuMDg1LS4wNjMuMjIzLS4xMDUuNDE1LS4xMDVoLjk5Yy4xNyAwIC4yNjYuMDg0LjI2Ni4yNjMgMCAuMDUyLS4wMTEuMTA1LS4wMjIuMTY4LS4wMS4wNjMtLjAzMi4xNDctLjA3NC4yNjNsLTIuNTY1IDguMTNjLS4wNjQuMjEtLjEzOC4zNDctLjIyMy40MS0uMDg1LjA2My0uMjI0LjEwNS0uNDA1LjEwNWgtLjkxNWMtLjIwMiAwLS4zNC0uMDMxLS40MjYtLjEwNS0uMDg1LS4wNzMtLjE2LS4yMS0uMjAyLS40MmwtMS42NS02Ljc4NC0xLjYzOCA2Ljc3M2MtLjA1My4yMS0uMTE3LjM0Ny0uMjAyLjQyLS4wODYuMDc0LS4yMzUuMTA2LS40MjYuMTA2aC0uOTE1em0xMy42NzUuMjg0YTcuMTIyIDcuMTIyIDAgMDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAxLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwMC41NTQtLjk5OWMwLS4yOTQtLjA5Ni0uNTM2LS4yODgtLjczNi0uMTkxLS4yLS41NTMtLjM3OS0xLjA3NC0uNTQ3bC0xLjU0NC0uNDczYy0uNzc2LS4yNDItMS4zNTEtLjYtMS43MDItMS4wNzNhMi40ODcgMi40ODcgMCAwMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwMTEuMzQtLjE3OGMuMjM1IDAgLjQ4LjAxLjcxNC4wNDIuMjQ1LjAzMS40NjguMDczLjY5Mi4xMTUuMjEyLjA1My40MTUuMTA1LjYwNi4xNjkuMTkyLjA2My4zNC4xMjYuNDQ3LjE4OWEuOTE4LjkxOCAwIDAxLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMDEtLjc3Ny45MjVjLS4zMy4yNjMtLjcyNC40NTItMS4xODIuNTktLjQ3OC4xNDYtLjk3OS4yMi0xLjUyMS4yMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3c01vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BenVyZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDcyQzZcIixcbiAgICBkOiBcIk0xNy40NDggNGwtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNHpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F6dXJlTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmVNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNDQ4IDRsLTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDR6TTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXp1cmVNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQmVhdHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0JlYXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTUgMjBINFYwaDExYzUuNTIyIDAgMTAgNC40NzggMTAgMTBzLTQuNDc4IDEwLTEwIDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEMyQjNcIixcbiAgICBkOiBcIk0yNi43MDIgMTUuNjI0QzI0LjYgMTkuOTc5IDIwLjE1MiAyMyAxNSAyM0g0djloMTVjNS41MjIgMCAxMC00LjQ3OCAxMC0xMGE5Ljk1MiA5Ljk1MiAwIDAwLTIuMjk4LTYuMzc2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMjQuMzM4IDEzLjU1NEE5Ljk0MiA5Ljk0MiAwIDAwMTkgMTJINHY4aDExYzQuMjcgMCA3LjkwMy0yLjY4IDkuMzM4LTYuNDQ2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CZWF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMmMwIDUuNTIyIDQuNDc4IDEwIDEwIDEwVjEyQzQuNDc4IDEyIDAgMTYuNDc4IDAgMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMCAxMnYxMGgxMGMwLTUuNTIyLTQuNDc4LTEwLTEwLTEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAwdjljNy4xNjggMCAxMyA1LjgzMiAxMyAxM2g5QzMyIDkuODUgMjIuMTUgMCAxMCAwXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DZXBoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DZXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNDcxIDI3LjU2Yy0xLjA2LS41NjctMS42NzYtMS4yMDYtMS44MTEtMS45MDItLjEzLS42NzMuMTctMS40MjEuOTE4LTIuMjg4YTExLjI5IDExLjI5IDAgMDAyLjc3My03LjQyQTExLjMyNCAxMS4zMjQgMCAwMDE2LjA0MiA0LjY0bC0uMDUuMDAxaC0uMDVBMTEuMzI0IDExLjMyNCAwIDAwNC42MzIgMTUuOTQ5YTExLjI5MSAxMS4yOTEgMCAwMDIuNzc0IDcuNDIyYy43NTMuODcyIDEuMDQ3IDEuNTkxLjkyOCAyLjI1Ny0uMTMuNjk0LS43NCAxLjM0Mi0xLjgxNyAxLjkzLTEuNjU3LTEuMzc1LTMuMTE2LTMuMjEyLTQuMDEtNS4wNTZhMTQuOTQzIDE0Ljk0MyAwIDAxLTEuMTE3LTMuMTM5QTE0Ljk5NyAxNC45OTcgMCAwMTEgMTUuOTVhMTQuOTAxIDE0LjkwMSAwIDAxNC4zNzgtMTAuNTcgMTQuOTI0IDE0LjkyNCAwIDAxNC43NTItMy4yMDRDMTEuOTcgMS4zOTUgMTMuOTUuOTk2IDE1Ljk0OCAxaC4xMDFhMTQuODg4IDE0Ljg4OCAwIDAxMTAuNTcgNC4zNzggMTQuOTEyIDE0LjkxMiAwIDAxMy45ODIgMTMuOTg1IDE0Ljg3MSAxNC44NzEgMCAwMS0xLjExOCAzLjE0Yy0uOSAxLjg0My0yLjM1OCAzLjY4MS00LjAxIDUuMDU3aC0uMDAzem0tNS41MjMgMi43OThjLS4xNzMtLjExLS43NjctLjU1LTEuMzQ1LTEuMzUzYTYuMTIyIDYuMTIyIDAgMDEtMS4xNzQtMy43MzggOC4yNiA4LjI2IDAgMDEuNjExLTIuOTY0IDguNDIgOC40MiAwIDAxMS42MjctMi41NGwuMDA0LS4wMDguMTU0LS4xNzhjLjI2My0uMzA1LjUzNi0uNjIyLjc1My0uOTkuMjY4LS40NTQuNDYyLS45MzEuNTc4LTEuNDIuMTc4LS43NTguMTg4LTEuNTQ3LjAyOS0yLjMxYTUuMyA1LjMgMCAwMC0uODU4LTEuOTU2IDUuMjY0IDUuMjY0IDAgMDAtNC4yOS0yLjIxN2gtLjEwOGE1LjI1IDUuMjUgMCAwMC00LjI5IDIuMjE2IDUuMzEgNS4zMSAwIDAwLS44NTYgMS45NTZjLS4xNi43NjMtLjE1IDEuNTUyLjAzIDIuMzExLjExNS40ODguMzEuOTY1LjU3NiAxLjQxOS4yMTkuMzcuNDkuNjg0Ljc1My45OWwuMTU1LjE3OS4wMDMuMDA3YTguMzg0IDguMzg0IDAgMDExLjYyOCAyLjU0IDguMjQgOC4yNCAwIDAxLjYxIDIuOTY0IDYuMTIzIDYuMTIzIDAgMDEtMS4xNzMgMy43MzhjLS41OC43OTUtMS4xNzQgMS4yNDMtMS4zNDYgMS4zNTJsLS44NjctLjI2YTE1LjQzNCAxNS40MzQgMCAwMS0yLjQ5LTEuMDk4IDQuMjQ1IDQuMjQ1IDAgMDAyLjIzNC0zLjczNmMwLTEuMDM0LS40MDMtMi4wMjgtMS4xOTUtMi45NWwtLjAzNC0uMDM0LS4yMzctLjI2LS42MzYtLjc0NmE4LjkyNCA4LjkyNCAwIDAxLTEuNTI1LTMuMjYgOC45ODMgOC45ODMgMCAwMS0uMDUtMy45MDUgOC45MDYgOC45MDYgMCAwMTEuNDYtMy4zMTNBOC45OTMgOC45OTMgMCAwMTExLjIzIDguMzlhOC45MzcgOC45MzcgMCAwMTQuNzAyLTEuMzQ0aC4xMTJjLjQyIDAgLjg0LjAyOSAxLjI1NS4wODhhOC45MzggOC45MzggMCAwMTMuNDQ4IDEuMjU2IDkuMDAzIDkuMDAzIDAgMDEyLjU1NCAyLjQwNCA5LjA5MyA5LjA5MyAwIDAxMS40NTkgMy4zMTMgOS4wNDMgOS4wNDMgMCAwMS0uMDUgMy45MTIgOC45MjUgOC45MjUgMCAwMS0xLjUyNiAzLjI2Yy0uMi4yNjUtLjQwOS40OTUtLjYzNy43NDVsLS4yMy4yNTRjLS4wMTcuMDE2LS4wMy4wMjctLjA0LjA0My0uODA0Ljk2MS0xLjE5NSAxLjkyNy0xLjE5NSAyLjk0OGE0LjI1IDQuMjUgMCAwMDIuMjM3IDMuNzM1Yy0uNzk1LjQ0MS0xLjYzLjgwOS0yLjQ5MSAxLjA5OGwtLjg2Mi4yNi0uMDE4LS4wMDR6bS0zLjk1Ni0xMS4zMTRhMi45NTcgMi45NTcgMCAwMS0yLjk1Mi0yLjk1MiAyLjk1NyAyLjk1NyAwIDAxMi45NTItMi45NTIgMi45NTYgMi45NTYgMCAwMTIuOTUgMi45NTIgMi45NTcgMi45NTcgMCAwMS0yLjk1IDIuOTUyXCIsXG4gICAgZmlsbDogXCIjRjA1QzU2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DZXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTIuMzcgMTguMzUyYy4wMzItLjAxLjA2Ni0uMDE0LjEtLjAyM0E2IDYgMCAwMTE4IDEwVjBDOS4xNjMgMCAyIDcuMTY0IDIgMTZjMCAyLjc5My43MiA1LjQxNyAxLjk3NiA3LjcwMmExOC45NDcgMTguOTQ3IDAgMDE4LjM5My01LjM0OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMDA1LjcxNyA1Ljc1YTE2LjAwNiAxNi4wMDYgMCAwMDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwMTE4IDEwYTUuOTQgNS45NCAwIDAxMi41OTYuNTk0Yy42NjkuMzIzIDEuNDM2LjQwOCAyLjE0Ni4xODhhMTYuMDEgMTYuMDEgMCAwMDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwMDE4IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIyLjc0MiAyMS4yMThjLS43MS0uMjItMS40NzgtLjEzNS0yLjE0Ni4xODhBNS45NDcgNS45NDcgMCAwMTE4IDIyYTUuOTQgNS45NCAwIDAxLTIuNTk2LS41OTRjLS42NjktLjMyMy0xLjQzNi0uNDA4LTIuMTQ2LS4xODhhMTYuMDA2IDE2LjAwNiAwIDAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMzJjNC45MzYgMCA5LjM0OC0yLjIzNiAxMi4yODMtNS43NWExNi4wMTYgMTYuMDE2IDAgMDAtNy41NC01LjAzMlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWRFY2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkRWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTE4IDB2MTBhNiA2IDAgMDAtNS41MyA4LjMzYy0uMDM0LjAwOS0uMDY4LjAxMi0uMS4wMjNBMTguOTQ3IDE4Ljk0NyAwIDAwMy45NzUgMjMuNyAxNS45MzQgMTUuOTM0IDAgMDEyIDE2QzIgNy4xNjQgOS4xNjMgMCAxOCAwem0wIDEzYTMgMyAwIDExMCA2IDMgMyAwIDAxMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBRUZBXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAxMTggMjJhNS45NCA1Ljk0IDAgMDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwMC03LjU0LTUuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwMDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAwNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAxMTggMTBhNS45NCA1Ljk0IDAgMDEyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAwNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWRFY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Db2RlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTkuNzUgMTJMMTYgMzJoMTBsLTMuNC0xMC44OEExMyAxMyAwIDAwMTAuMTkgMTJoLS40NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjcyNSAxMS45M0ExNyAxNyAwIDAwOS41IDBINmwzLjc1IDEyaC40NGExMyAxMyAwIDAxMTIuNDEgOS4xMkwyNiAzMmg2bC02LjI3NS0yMC4wN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzNzdDQVwiLFxuICAgIGQ6IFwiTTcuOTEgMTYuMTc1TDAgMzJoMTIuODU1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvZGVzYW5kYm94ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjczOCAyOC4wNDRWMTYuNjgxTDMuMTcyIDEwLjkxOXY2LjQ2bDUuMzIgMi42N3Y0Ljg4OWw2LjI0NiAzLjEwNnptMi4zNDQuMDY2bDYuMzU3LTMuMTd2LTUuMDAybDUuMzUzLTIuNjg2VjEwLjg3bC0xMS43MSA1Ljg1NFYyOC4xMXpNMjcuMzA2IDguOTkzbC02LjAwMy0zLjAxMi01LjI4NiAyLjY1Ni01LjMyNS0yLjY1OUw0LjYzNyA5LjAzbDExLjMxNyA1LjYzOCAxMS4zNTItNS42NzV6TS44MjggMjMuNzQ0VjguMzI0TDE1Ljk4MS42ODlsMTUuMTU1IDcuNjA0VjIzLjcyTDE1Ljk4IDMxLjI4LjgyOCAyMy43NDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvdWNoYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ291Y2hiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUQyMjI2XCIsXG4gICAgZDogXCJNMTYuMDcyLjAyNEM3LjI5LjAyNC4xNDQgNy4xNDYuMTQ0IDE1Ljk1MmMwIDguNzgyIDcuMTIyIDE1LjkyOCAxNS45MjggMTUuOTI4QzI0Ljg1NCAzMS44OCAzMiAyNC43NTggMzIgMTUuOTUyIDMyIDcuMTQ2IDI0Ljg1NC4wMjQgMTYuMDcyLjAyNHptMTAuNzU1IDE4LjcxOWMwIC45NjItLjU1MyAxLjgwNC0xLjYzNiAxLjk5Ny0xLjg3Ny4zMzYtNS44MjMuNTMtOS4xMTkuNTMtMy4yOTYgMC03LjI0Mi0uMTk0LTkuMTE5LS41My0xLjA4Mi0uMTkzLTEuNjM2LTEuMDM1LTEuNjM2LTEuOTk3di02LjIwOGMwLS45NjIuNzQ2LTEuODUyIDEuNjM2LTEuOTk3LjU1NC0uMDk2IDEuODUzLS4xOTIgMi44NjQtLjE5Mi4zODUgMCAuNjk3LjI4OS42OTcuNzQ2djQuMzU1bDUuNTgyLS4xMiA1LjU4Mi4xMnYtNC4zNTVjMC0uNDU3LjMxMy0uNzQ2LjY5OC0uNzQ2IDEuMDEgMCAyLjMxLjA5NiAyLjg2My4xOTIuOTE0LjE0NSAxLjYzNiAxLjAzNSAxLjYzNiAxLjk5Ny0uMDQ4IDIuMDQ1LS4wNDggNC4xMzktLjA0OCA2LjIwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvdWNoYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0RvY2tlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRG9ja2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguMDk5IDE1LjEwOGgzLjMwNHYtMi45NzNIMTguMXYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczaC0zLjMwNHYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczSDEwLjI5djIuOTczem0tMy45MDUgMEg5LjY5di0yLjk3M0g2LjM4NHYyLjk3M3ptLTMuOTA0IDBoMy4zMDR2LTIuOTczSDIuNDh2Mi45NzN6bTMuOTA0LTMuNTY4SDkuNjlWOC41NjhINi4zODR2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhIMTAuMjl2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhoLTMuMzA0djIuOTcyem0wLTMuNTY3aDMuMzA0VjVoLTMuMzA0djIuOTczem0xNy4xMzkgNS40MDJjLS43MjItLjQ3OC0yLjM4LS42NTMtMy42NTYtLjQxNS0uMTY0LTEuMTktLjgzNC0yLjIyMS0yLjA1Mi0zLjE1M2wtLjctLjQ2My0uNDY4LjY5NGMtLjU5OC44OTMtLjg5NyAyLjEzLS44IDMuMzE3LjA0NS40MTguMTgzIDEuMTY0LjYxNyAxLjgyLS40MzMuMjMxLTEuMjkuNTQ5LTIuNDIuNTI4SC4xMjRsLS4wNDMuMjQ3Yy0uMjA0IDEuMTkzLS4yIDQuOTE0IDIuMjQgNy43NzRDNC4xNzggMjUuODk4IDYuOTYgMjcgMTAuNTkgMjdjNy44NyAwIDEzLjY5My0zLjU4NiAxNi40Mi0xMC4xMDQgMS4wNzMuMDIgMy4zODEuMDA2IDQuNTY3LTIuMjM3LjAzMS0uMDUxLjEwMi0uMTg2LjMxLS42MWwuMTEzLS4yMzQtLjY2Ny0uNDR6XCIsXG4gICAgZmlsbDogXCIjMTM2RUEzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRG9ja2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRHJvcHdpemFyZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRHJvcHdpemFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19kcm9wd2l6YXJkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyOS42MXM5LjU1IDQuNzQgMTYuODU2LS44OTNjLTEuOTA1LTUuMTE0LTUuMjUtMTkuODY3LTcuMjI2LTI2LjM4My0uNDIyLTEuMzg5LS40OS0xLjUyNy0uNjYzLTEuOTA5LS45NjQtMi4xMzQtMS45NzggNC4xNDItMy42MjggMTAuNDU5QzEyLjc0OSAxMy4xNDggOCAyOS42MSA4IDI5LjYxXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuOTI2IDI4LjU2M3M4LjE3IDQuNzk0IDE0LjkzLjE1NGMtLjE4LS44MDctLjY0Mi0yLjEwMy0uOTU1LTMuMzExLTEuNjY0LTYuNDE2LTQuNjc2LTE3LjI0OC02LjE0NC0yMi42MjYtMS41OS01LjgyMi0yLjEwNS45ODYtMy45NjEgOC4yMy0uNTY0IDIuMjA0LTMuODcgMTcuNTUzLTMuODcgMTcuNTUzXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0IDI0LjQxbC44NS0xLjQ2Ni43OTMgMS41NDQtLjkwOCAxLjk5LS43MzUtMi4wNjl6bTYuOTM0LTUuNTQ1bC44NS0xLjQ2NS43OTMgMS41NDMtLjkwOCAxLjk5LS43MzUtMi4wNjh6bS00Ljc0Ny01Ljg1MWwuODUtMS40NjUuNzkyIDEuNTQzLS45MDggMS45OS0uNzM0LTIuMDY4XCIsXG4gICAgZmlsbDogXCIjRjlBNzJCXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4xNCAyNC40MWwuODUtMS43MTYuNzkzIDEuNzk0LS45MDcgMS40NjgtLjczNi0xLjU0NnptNi45MzQtNS41NDVsLjg1MS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM3LTEuNTQ2em0tNC43NDctNS44NTFsLjg1LTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzYtMS41NDZcIixcbiAgICBmaWxsOiBcIiNGRkYyMDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk4NyAyOC40MjJzNi4wODIgMS4wMTUgMTAuMDg2LTEuNTQ5Yy0uNTAyIDEuNTUtNC45OTEgMy4zMTQtMTAuMDg2IDEuNTVcIixcbiAgICBmaWxsOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiAzMy40NzMsXG4gICAgeTE6IDcuNjc0LFxuICAgIHgyOiA3Ljc1MSxcbiAgICB5MjogMjEuMzMxLFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiAyMS4wMjgsXG4gICAgeTE6IDE0LjkyOCxcbiAgICB4MjogNi4wMTcsXG4gICAgeTI6IDE4Ljg0NCxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRHJvcHdpemFyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10eXBlXCI6IFwibG9nb0VsYXN0aWNcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm91dGxpbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMwLjg2IDEzLjEyOUE2LjMzMyA2LjMzMyAwIDAxMzIgMTYuNzdhNi40MTkgNi40MTkgMCAwMS0xLjE2MiAzLjY1MiA2LjM4MiA2LjM4MiAwIDAxLTMuMDMyIDIuMzMxIDQuODMzIDQuODMzIDAgMDEtMS42NzIgNS41NDIgNC43ODkgNC43ODkgMCAwMS01Ljc3LS4wNzQgOS4wMTYgOS4wMTYgMCAwMS00LjUgMy4zMjIgOC45ODIgOC45ODIgMCAwMS01LjU4Ny4wMjMgOS4wMTQgOS4wMTQgMCAwMS00LjUyNi0zLjI4NyA5LjA2NyA5LjA2NyAwIDAxLTEuNzI3LTUuMzMzYzAtLjU3OS4wNTMtMS4xNTYuMTYtMS43MjVBNi4zMDUgNi4zMDUgMCAwMTEuMTQ1IDE4LjkgNi4zNDEgNi4zNDEgMCAwMTAgMTUuMjQyYTYuNDIgNi40MiAwIDAxMS4xNjMtMy42NTIgNi4zODQgNi4zODQgMCAwMTMuMDM1LTIuMzMgNC44MzMgNC44MzMgMCAwMTEuNjU4LTUuNTU3IDQuNzg5IDQuNzg5IDAgMDE1Ljc4LjA3IDkuMDM3IDkuMDM3IDAgMDE0LjkzLTMuNDQ2IDkuMDA3IDkuMDA3IDAgMDE1Ljk5NC40MTkgOS4wNSA5LjA1IDAgMDE0LjQwNyA0LjA5OCA5LjA5NyA5LjA5NyAwIDAxLjg3MyA1Ljk2NSA2LjI5OCA2LjI5OCAwIDAxMy4wMiAyLjMyem0tMTguMjguNjU4bDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODUgNy44NSAwIDAwLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwMC00LjkzMi4wODYgNy45IDcuOSAwIDAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDF6bS03LjI0NyA3LjQ0MUE3Ljk2NCA3Ljk2NCAwIDAwNi43MiAyNy41M2E3LjkxOCA3LjkxOCAwIDAwNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwMDQuOTUtLjA5NyA3LjkyIDcuOTIgMCAwMDMuOTI2LTMuMDNsMS4xNjYtNi4xMDItMS41NTUtMi45ODUtNy4wMy0zLjIxMS02Ljg4NSA2LjI0OC4wMDEuMDAxem00Ljc1NS0xMS4wMjRsLTQuOC0xLjEzNy4wMDItLjAwMmEzLjgyIDMuODIgMCAwMTEuMzEyLTQuMzU4IDMuNzg1IDMuNzg1IDAgMDE0LjUzOC4wMjNsLTEuMDUyIDUuNDc0em0tNS4yMTYuMDFhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXptMTguMjg2IDE3Ljg0OGEzLjczNyAzLjczNyAwIDAxLTIuMjg1LS43ODVsMS4wMzctNS40NTQgNC44IDEuMTI1YTMuODEyIDMuODEyIDAgMDEtMS44MDEgNC42OGMtLjU0LjI4My0xLjE0LjQzMi0xLjc1MS40MzR6bS0xLjMxLTcuNDk5bDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMDAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwMDEuMDEzLTMuMTA2IDUuMzExIDUuMzExIDAgMDAtLjkzNi0zLjAxIDUuMjgyIDUuMjgyIDAgMDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjl6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41OCAxMy43ODdsNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NDkgNy44NDkgMCAwMC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAwLTQuMDItMi44NjkgNy44NyA3Ljg3IDAgMDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxelwiLFxuICAgIGZpbGw6IFwiI0ZFQzUxNFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zMzMgMjEuMjI4QTcuOTY0IDcuOTY0IDAgMDA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMDA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAwNC45NS0uMDk3IDcuOTIgNy45MiAwIDAwMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDF6XCIsXG4gICAgZmlsbDogXCIjMDBCRkIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI4OCA5LjA2N2w0LjggMS4xMzdMMTEuMTQgNC43M2EzLjc4NSAzLjc4NSAwIDAwLTUuOTE0IDEuOTQgMy44MiAzLjgyIDAgMDAuMDY0IDIuMzk1XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg3MiAxMC4yMTRhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXpcIixcbiAgICBmaWxsOiBcIiMxQkE5RjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjg3MyAyNy4yNzdhMy43MzYgMy43MzYgMCAwMDIuMjg1Ljc4NSAzLjc4MyAzLjc4MyAwIDAwMy4xMDEtMS42MyAzLjgxMiAzLjgxMiAwIDAwLjQ1MS0zLjQ4NGwtNC44LTEuMTI1LTEuMDM3IDUuNDU0elwiLFxuICAgIGZpbGw6IFwiIzkzQzkwRVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuODQ4IDIwLjU2M2w1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAwMi42MjItMS45MzggNS4zNyA1LjM3IDAgMDAxLjAxMy0zLjEwNiA1LjMxMiA1LjMxMiAwIDAwLS45MzYtMy4wMSA1LjI4MyA1LjI4MyAwIDAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5elwiLFxuICAgIGZpbGw6IFwiIzA3Q1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0zMiA5VjIuNUEyLjUgMi41IDAgMDAyOS41IDBoLTI3QTIuNSAyLjUgMCAwMDAgMi41VjloMzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIwaDMydi04SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNC41IDIzSDB2Ni41QTIuNSAyLjUgMCAwMDIuNSAzMmgxMnYtOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE3LjUgMjN2OWgxMmEyLjUgMi41IDAgMDAyLjUtMi41VjIzSDE3LjV6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTIgMTZjMCAxLjM4NC4xOTQgMi43Mi41MjQgNEgyMmE0IDQgMCAwMDAtOEgyLjUyNEExNS45ODQgMTUuOTg0IDAgMDAyIDE2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0yOC45MjQgNy42NjJBMTUuMzgxIDE1LjM4MSAwIDAwMzAuNDggNkMyNy41NDcgMi4zNDYgMjMuMDUgMCAxOCAwIDExLjY3OSAwIDYuMjM5IDMuNjc4IDMuNjQ0IDlIMjUuNTFhNS4wMzkgNS4wMzkgMCAwMDMuNDEzLTEuMzM4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yNS41MSAyM0gzLjY0NUM2LjI0IDI4LjMyMyAxMS42NzkgMzIgMTggMzJjNS4wNSAwIDkuNTQ3LTIuMzQ2IDEyLjQ4LTZhMTUuMzgxIDE1LjM4MSAwIDAwLTEuNTU2LTEuNjYyQTUuMDM0IDUuMDM0IDAgMDAyNS41MSAyM1wiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDBjLTIuOTE4IDAtNS42NDUuNzk0LTggMi4xNTggNC43NzcgMi43NjggOCA3LjkyMyA4IDEzLjg0MiAwIDUuOTE5LTMuMjIzIDExLjA3NC04IDEzLjg0MkExNS45MDcgMTUuOTA3IDAgMDAxNiAzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2UzI0LjgzNyAwIDE2IDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMjRoMi4yMjJBMTIuOTk2IDEyLjk5NiAwIDAwMTMgMTZjMC0yLjkzNS0xLjAxMi01Ljc0NC0yLjc3OC04SDhhOCA4IDAgMDAwIDE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgOGgtMi4xNTJBMTUuODc3IDE1Ljg3NyAwIDAxMTYgMTZjMCAyLjkxOC0uNzg2IDUuNjQ3LTIuMTUyIDhIMTZhOCA4IDAgMDAwLTE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FdGNkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FdGNkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjNDE5RURBXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjY1IDE0LjE2NGMwIDEuMTg5LS45MzMgMi4xNS0yLjA4MyAyLjE1LTEuMTUyIDAtMi4wODItLjk2MS0yLjA4Mi0yLjE1IDAtMS4xODUuOTMtMi4xNSAyLjA4Mi0yLjE1IDEuMTUgMCAyLjA4My45NjUgMi4wODMgMi4xNXptMi42OTMgMGMwIDEuMTg5LjkzNCAyLjE1IDIuMDg0IDIuMTVzMi4wODMtLjk2MSAyLjA4My0yLjE1YzAtMS4xODUtLjkzMy0yLjE1LTIuMDgzLTIuMTUtMS4xNSAwLTIuMDg0Ljk2NS0yLjA4NCAyLjE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEuNTIyIDE2LjQ5NWE1Ljg0NSA1Ljg0NSAwIDAxLTMuMTA1LS42MThjLjI3Mi0xLjYwMy4zODctMy4yMTguMzU3LTQuODI3YTI0Ljg5NiAyNC44OTYgMCAwMC0zLjAyNy0zLjcwMyA2LjEzNyA2LjEzNyAwIDAxMi4xMzMtMi4zNmwuMzkxLS4yNS0uMzA0LS4zNTRjLTEuNTctMS44MjUtMy40NDQtMy4yMzUtNS41NjgtNC4xOTNMMjEuOTc1IDBsLS4xMDcuNDYyYTYuMjQ4IDYuMjQ4IDAgMDEtMS41MSAyLjgyOSAyMy43NyAyMy43NyAwIDAwLTQuMzYyLTEuODU1IDIzLjc5IDIzLjc5IDAgMDAtNC4zNTUgMS44NTFBNi4yNDYgNi4yNDYgMCAwMTEwLjEzNy40NjVsLS4xMDgtLjQ2Mi0uNDIzLjE4OWMtMi4wOTcuOTQzLTQuMDIyIDIuMzkyLTUuNTY2IDQuMTlsLS4zMDYuMzU1LjM5LjI1YTYuMTI1IDYuMTI1IDAgMDEyLjEyOSAyLjM0NyAyNS4wMDEgMjUuMDAxIDAgMDAtMy4wMjIgMy42ODkgMjYuMDY4IDI2LjA2OCAwIDAwLjM0NyA0Ljg2IDUuODMyIDUuODMyIDAgMDEtMy4wOS42MTJMLjAzIDE2LjQ2bC4wNDMuNDczYTE2LjcyMyAxNi43MjMgMCAwMDIuMTQgNi43NjVsLjIzNC40MS4zNS0uMzA4YTUuOTE0IDUuOTE0IDAgMDEyLjgzNy0xLjM3MiAyNS4yNTUgMjUuMjU1IDAgMDAyLjQyOSA0LjA4M2MxLjQ3NS41MzMgMy4wMTMuOTMgNC42MDEgMS4xNjdhNi4zNTkgNi4zNTkgMCAwMS0uMzgzIDMuMjQzbC0uMTc1LjQzOS40NS4xMDJjMS4xNS4yNjEgMi4zMS4zOTQgMy40NDcuMzk0bDMuNDQ3LS4zOTQuNDUtLjEwMi0uMTc1LS40NGE2LjM3NiA2LjM3NiAwIDAxLS4zODMtMy4yNDQgMjMuOTA1IDIzLjkwNSAwIDAwNC41ODUtMS4xNjUgMjUuMjg2IDI1LjI4NiAwIDAwMi40My00LjA4NiA1Ljk0IDUuOTQgMCAwMTIuODUxIDEuMzczbC4zNS4zMDYuMjMzLS40MDhhMTYuNjYxIDE2LjY2MSAwIDAwMi4xNC02Ljc2NGwuMDQyLS40NzItLjQ1LjAzNnpNMjAuOTMgMjIuMjc4Yy0xLjYzLjQ1OC0zLjI4Ny42ODktNC45MzMuNjg5LTEuNjUgMC0zLjMwNC0uMjMxLTQuOTM2LS42OWEyMC4wMjggMjAuMDI4IDAgMDEtMi4xMTMtNC41OTQgMjAuMDcyIDIwLjA3MiAwIDAxLS44OS01LjA0IDE5LjA3NiAxOS4wNzYgMCAwMTMuNTc2LTMuNTE2IDE4Ljg2NyAxOC44NjcgMCAwMTQuMzYzLTIuNDQ4IDE4Ljk0NCAxOC45NDQgMCAwMTQuMzU1IDIuNDQzIDE5LjE5IDE5LjE5IDAgMDEzLjU5MiAzLjUzOGMtLjA5IDEuNzMtLjM5IDMuNDEtLjg5OSA1LjAxOWExOS45NjUgMTkuOTY1IDAgMDEtMi4xMTUgNC41OTl6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRXRjZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2djcCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjA4NS4xaDQuNTQ5djYuMjkxSC4wODV6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEQjQ0MzdcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMjIuNTcgMjkuOTgyaC01Ljc0OWMuNTI3IDAgLjk4Ny0uMjgyIDEuMjMzLS43TDI1Ljg1NyAxNiAyMC45MyA3LjYxbDUuNzQ4LjAwMWMuNDkyIDAgLjk3LjI1MSAxLjIzMi43bDMuNjk4IDYuMjkxYy40OS44MzcuNTI2IDEuOSAwIDIuNzk3bC02LjU3MiAxMS4xODVhMi44NTMgMi44NTMgMCAwMS0yLjQ2NCAxLjM5OHptLS43MS0yLjc5NmMwIC4zODYuMzE4LjcuNzEuN2EuNzA1LjcwNSAwIDAwLjcxMi0uN2MwLS4zODYtLjMxOC0uNy0uNzExLS43YS43MDUuNzA1IDAgMDAtLjcxMi43em02LjkyNy0xMC41OGMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwMC0uMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3Mi4yNTYuNjkyLjY5MiAwIDAwLjI2Ljk1NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yNS4wMzYgMy40MTZsMi44NzMgNC44OTRhMS40MjcgMS40MjcgMCAwMC0xLjIzMi0uNjk5SDExLjA3MWwtNC45MjggOC4zODgtMi44NzQtNC44OTJhMS4zNzcgMS4zNzcgMCAwMTAtMS4zOTlsMy42OTYtNi4yOTJhMi44NTMgMi44NTMgMCAwMTIuNDY0LTEuMzk4aDEzLjE0M2MuOTgyIDAgMS45MzcuNTAyIDIuNDY0IDEuMzk4ek0xMC4xNCA0LjgxNGMwLS4zODYtLjMxOC0uNy0uNzEtLjdhLjcwNS43MDUgMCAwMC0uNzEyLjdjMCAuMzg2LjMxOC43LjcxMS43YS43MDUuNzA1IDAgMDAuNzExLS43em0xMi43ODcuNjA2YS42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2LjY5Mi42OTIgMCAwMC0uMjYuOTU1LjcxOC43MTggMCAwMC45NzEuMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjRCNDAwXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4zOTQgMTQuNjAxbDIuODc1LTQuODkzYy0uMjYzLjQ0OS0uMjQ1Ljk4IDAgMS4zOTlMMTEuMDcgMjQuMzloOS44NTdsLTIuODc0IDQuODkyYy0uMjQ2LjQxOC0uNzA2LjctMS4yMzMuN0g5LjQyOGEyLjg1NCAyLjg1NCAwIDAxLTIuNDY0LTEuMzk4TC4zOTQgMTcuMzk4YTIuNzU0IDIuNzU0IDAgMDEwLTIuNzk3em0yLjgyLjc5M2EuNzE4LjcxOCAwIDAwLS45NzIuMjU2LjY5My42OTMgMCAwMC4yNi45NTVjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMDAtLjI2LS45NTV6TTkuMDcyIDI2LjU4YS42OTIuNjkyIDAgMDAtLjI2Ljk1NS43MTguNzE4IDAgMDAuOTcxLjI1Ni42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMTguMDU0IDI5LjI4MmwyLjg3NS00Ljg5MkgxNy45NmwtMS4xMzggNS41OTFjLjUyNiAwIC45ODYtLjI4IDEuMjMyLS42OTlNMjYuNjc4IDcuNjExaC01Ljc0OWwxLjQ4NCAyLjUyN0wyNy45MSA4LjMxYTEuNDI3IDEuNDI3IDAgMDAtMS4yMzItLjdcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBvcGFjaXR5OiAwLjEsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjk5NCA5LjYwOSlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTS4yNzUgMS40OThMMy4xNSA2LjM5MWwxLjQ4NS0yLjUyN0wuMjc1LjFjLS4yNjMuNDQ4LS4yNDUuOTggMCAxLjM5OFwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQ0NDXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjA3MSAyNC4zOUw2LjE0MyAxNmw0LjkyOC04LjM5aDkuODU4TDI1Ljg1NyAxNmwtNC45MjggOC4zOUgxMS4wN3pNMjAuMjY4IDE2YzAtMi4zMTctMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc3LTQuMjY4IDQuMTk0IDAgMi4zMTYgMS45MSA0LjE5NCA0LjI2OCA0LjE5NCAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcE1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcE1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNTYgMTUuOTgyYzAtMi4zMTYtMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc4LTQuMjY4IDQuMTk0IDAgMi4zMTcgMS45MTEgNC4xOTUgNC4yNjggNC4xOTUgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuODcgMTYuNTQzYS44NjIuODYyIDAgMDEtMS4xNjcuMzA4LjgzMi44MzIgMCAwMS0uMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMiAxLjE0N00yMi41NiAyOC4xNWEuODQ3Ljg0NyAwIDAxLS44NTUtLjg0YzAtLjQ2NC4zODMtLjg0Ljg1NS0uODRzLjg1NC4zNzYuODU0Ljg0YzAgLjQ2NC0uMzgyLjg0LS44NTQuODRtLTEyLjcxNS0uMTEzYS44NjMuODYzIDAgMDEtMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LjMwOC44MzIuODMyIDAgMDEtLjMxMiAxLjE0N00zLjU4NiAxNi41NDJhLjg2My44NjMgMCAwMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAxLS4zMTMtMS4xNDcuODYyLjg2MiAwIDAxMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEzIDEuMTQ3TTIyLjk4NyA1LjY2NWEuODYyLjg2MiAwIDAxLTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMi0xLjE0Ny44NjMuODYzIDAgMDExLjE2OC4zMDguODMyLjgzMiAwIDAxLS4zMTMgMS4xNDdtLTEzLjU3LjExMmEuODQ3Ljg0NyAwIDAxLS44NTQtLjg0YzAtLjQ2NC4zODItLjg0Ljg1NC0uODRzLjg1NS4zNzYuODU1Ljg0YzAgLjQ2NC0uMzgzLjg0LS44NTUuODRtMjIuMTc4IDguNzk3bC0zLjY5Ny02LjI5MmMtLjAxNC0uMDIzLS4wMy0uMDQzLS4wNDUtLjA2NWwtMi44My00LjgxOEEyLjg1NCAyLjg1NCAwIDAwMjIuNTYgMkg5LjQxN2EyLjg1MyAyLjg1MyAwIDAwLTIuNDY0IDEuMzk4TDMuMjU3IDkuNjlsMy4yODQgNS41OSA0LjUxOS03LjY5aDE1LjYwNWMuNDkxIDAgLjk2OS4yNTEgMS4yMzIuNjk5aC02LjU2NWw0LjUxMyA3LjY4Mi00LjkzNSA4LjQtMi44NyA0Ljg4M2ExLjQyNiAxLjQyNiAwIDAxLTEuMjMuNjk5bDMuMjc5LTUuNTgyaC05LjAzbC00LjU0NC03LjczOC0uMzg0LS42NTMtMi44NzQtNC44OTNhMS4zNzcgMS4zNzcgMCAwMS0uMDAzLTEuMzkxTC4zODIgMTQuNTg0YTIuNzU0IDIuNzU0IDAgMDAwIDIuNzk2bDYuNTcgMTEuMTg2YTIuODU0IDIuODU0IDAgMDAyLjQ2NSAxLjM5OGg3LjM5MmMuMDU0IDAgLjEwNy0uMDA1LjE2LS4wMTFoNS41OWEyLjg1MyAyLjg1MyAwIDAwMi40NjQtMS4zOTdsNi41NzItMTEuMTg2Yy41MjYtLjg5Ni40OS0xLjk2IDAtMi43OTZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcE1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HaXRodWIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dpdGh1YihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjQgMCAwIDcuMzQzIDAgMTYuNGMwIDcuMjQ4IDQuNTg0IDEzLjM5NCAxMC45NDIgMTUuNTYyLjguMTUgMS4wOTItLjM1NiAxLjA5Mi0uNzg5IDAtLjM5LS4wMTQtMS42ODQtLjAyMi0zLjA1My00LjQ1Ljk5MS01LjM5LTEuOTM0LTUuMzktMS45MzQtLjcyOC0xLjg5NC0xLjc3Ni0yLjM5OC0xLjc3Ni0yLjM5OC0xLjQ1NC0xLjAxNy4xMS0uOTk3LjExLS45OTcgMS42MDYuMTE0IDIuNDUyIDEuNjkgMi40NTIgMS42OSAxLjQyOCAyLjUwNiAzLjc0NiAxLjc4MSA0LjY1NiAxLjM2LjE0Ni0xLjA1Ni41Ni0xLjc4IDEuMDE2LTIuMTktMy41NTItLjQxNC03LjI4OC0xLjgyMS03LjI4OC04LjEwNSAwLTEuNzkyLjYyNC0zLjI1NCAxLjY0Ni00LjQwMi0uMTY0LS40MTYtLjcxNC0yLjA4NS4xNTgtNC4zNDIgMCAwIDEuMzQxLS40NCA0LjQgMS42ODFBMTQuODgyIDE0Ljg4MiAwIDAxMTYgNy45MzJjMS4zNi4wMDYgMi43MjguMTg4IDQuMDA2LjU1MyAzLjA1My0yLjEyNCA0LjM5Ni0xLjY4MSA0LjM5Ni0xLjY4MS44NzUgMi4yNTkuMzI1IDMuOTI2LjE2IDQuMzQgMS4wMjYgMS4xNDggMS42NDUgMi42MSAxLjY0NSA0LjQwMiAwIDYuMy0zLjc0MiA3LjY4Ny03LjMwNyA4LjA5NC41NzcuNTA4IDEuMDg2IDEuNTA1IDEuMDg2IDMuMDM1IDAgMi4xOTItLjAyMSAzLjk2LS4wMjEgNC41IDAgLjQzNy4yOS45NDcgMS4xMDEuNzg3QzI3LjQyIDI5Ljc5IDMyIDIzLjY0NCAzMiAxNi40IDMyIDcuMzQzIDI0LjgzNiAwIDE2IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HaXRodWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR21haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTY1QTREXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy4yOS0uMTc1LjU4OC0uMDc4Ljg3MyAwYTIuNjE2IDIuNjE2IDAgMDExLjkwNyAyLjQ3NmMuMDA2LjI5LS4wMDcuNTgxLS4wMDcuODY2LS4wODQgMC0uMTM1LjA1Mi0uMi4wOTctLjgxNS41ODItMS42NDIgMS4xNjQtMi40NSAxLjc1Mi0uMzMuMjM5LS42OTIuNDI2LS45Ny43My0uMTE2IDAtLjIuMDc4LS4yODQuMTM2LTIuNjkgMS44NTUtNS4zNzkgMy43MDQtOC4wNjIgNS41Ni0xLjMzMS45MTgtMi42NjMgMS44NDktMy45OTUgMi43NzNoLS4xMWMtLjA1OC0uMDQ1LS4xMS0uMTAzLS4xNjgtLjE0Mkw1Ljg2MyAxMS41NWMtLjY3Mi0uNDY2LTEuMzQ0LS45MzgtMi4wMTctMS40MDMtLjA3Ny0uMDUyLS4xNDgtLjE2Mi0uMjQ1LS4xMDQtLjA5LjA1Mi0uMDMzLjE3NS0uMDQ1LjI3Mi0uMDA3LjAzMiAwIC4wNjUgMCAuMDk3djE2LjE5NGMwIC4xMTYuMDA2LjI0LjAxMi4zNTUgMCAuMDY1LS4wMDYuMTIzLS4wMDYuMTg4LTEuMjI4LjE0OS0yLjM0Ny0uMDItMy4xMTYtMS4xMzFhMi4zODEgMi4zODEgMCAwMS0uNDQtMS4zNjRjMC02LjAzMi0uMDA2LTEyLjA1Ny4wMDctMTguMDg5IDAtMS4yMjguOTk1LTIuMzE0IDIuMjE3LTIuNDg4LjE5NC0uMDI2LjM4OC0uMDUyLjU1Ni4wNzcuMDQuMDM5LjA3MS4wNzguMTE3LjExIDQuMjczIDMuMTY4IDguNTQ2IDYuMzM1IDEyLjgxOSA5LjUxLjE2OC4xMjIuMjc4LjExNi40NDYtLjAwNyAzLjQxMy0yLjUyMSA2LjgzMy01LjAzNiAxMC4yNDctNy41NS45MDUtLjY5MiAxLjgyMy0xLjM4NCAyLjc0Ny0yLjA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZGNEVDXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy0uOTI0LjY4NS0xLjg0MiAxLjM3Ny0yLjc2NyAyLjA2Mi0zLjQxMyAyLjUyMS02LjgzMyA1LjAzLTEwLjI0NiA3LjU1LS4xNjguMTIzLS4yNzIuMTMtLjQ0Ni4wMDctNC4yNjctMy4xNzQtOC41NC02LjMzNS0xMi44MTMtOS41MS0uMDQ2LS4wMzItLjA3OC0uMDctLjExNy0uMTEuMDc4LS4xMjkuMjE0LS4wODMuMzI0LS4wODNoMjUuNzQyYy4xMSAwIC4yMzktLjA0Ni4zMjMuMDg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNMy41NTYgMjYuOTVhNi41MzMgNi41MzMgMCAwMS0uMDEzLS4zNTZWMTAuNGMwLS4wMzItLjAwNy0uMDY1IDAtLjA5Ny4wMTMtLjA5LS4wNDYtLjIxMy4wNDUtLjI3MS4wOTctLjA1OS4xNzQuMDUxLjI0Ni4xMDMuNjcyLjQ2NSAxLjM0NC45MzcgMi4wMTcgMS40MDNsOS44MzIgNi44NDZjLjA1OC4wNDUuMTE3LjA5Ny4xNjguMTQyLS4wMjYuMDI2LS4wNTguMDQ1LS4wODQuMDcxbC0uMDY0LjA2NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDA3LjAxMy0uMDIuMDItLjAyNi4wMzIuMDEzLS4wMDYuMDItLjAxOS4wMzItLjAyNWwuMDY1LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAxOC0uMDIuMDQ0LS4wNDUuMDY0LS4wNjQuMDY0IDAgLjEyOS0uMDA3LjE5NC0uMDA3Ljg5OC42MjcgMS44MDMgMS4yNDggMi43MDIgMS44NzUgMi42NzYgMS44NTUgNS4zNTMgMy43MDQgOC4wMjMgNS41NzIuNDc4LjMzNyAxLjAwMi42MjggMS40MjggMS4wMzUtLjExNi4xMS0uMjU4LjAzOS0uMzg4LjA1OC4wMDctLjE0OS0uMTIyLS4xODgtLjIyLS4yNTItLjQ5LS4zNDMtLjk5NS0uNjcyLTEuNDczLTEuMDI4LS44MDItLjU4OC0xLjYxNy0xLjE1LTIuNDMxLTEuNzItLjY3OS0uNDcyLTEuMzUxLS45NjMtMi4wNS0xLjQwOS0uNjA3LS4zODgtMS4xNy0uODUzLTEuNzc3LTEuMjQ4LS42ODUtLjQ0LTEuMzMyLS45My0yLjAxLTEuMzc3LS41NjMtLjM2OC0xLjExMy0uNzYyLTEuNjYyLTEuMTUtLjExLS4wNzgtLjIwNy0uMTEtLjMyMy0uMDMzLS4yMzMuMTY4LS41My4yNzgtLjcyNC40Ni0uNTU2LjUxLTEuMjM1Ljg0LTEuODE3IDEuMzA1LS43NDMuNTg5LTEuNTQ1IDEuMTEyLTIuMzQgMS42MzYtMS4zMTkuODczLTIuNTk5IDEuODE2LTMuOTExIDIuNjk2YTQzLjY5NyA0My42OTcgMCAwMC0yLjMwOCAxLjYyOWMtLjIwNy4xNTUtLjQ4NS4yMjYtLjYxNC40ODUtLjEzLS4wMTMtLjI3Mi4wMzgtLjM5NS0uMDQ2IDIuMzE1LTEuNjE2IDQuNjMtMy4yMjYgNi45MzctNC44NDIuMzA0LS4yMTMuNjQ2LS4zODEuODk5LS42NjYuMDQ1LS4wMTMuMTAzLS4wMTkuMDk3LS4wODQgMC0uMDA2LS4wMTMtLjAyLS4wMi0uMDItLjA2NS0uMDA2LS4wNzcuMDQ2LS4wOS4wOTEtLjIzMy4wMTMtLjM3NS4xOTQtLjU1LjMxLTIuNDYzIDEuNy00LjkzMiAzLjM4OC03LjM5NSA1LjA3NXptMTEuMTE5LTcuNTY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAyLjAyNS0uMDMyLS4wMTIuMDA2LS4wMTkuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDE4LjAyNi0uMDM4LjA0NS0uMDU3LjA3LS4wMTMuMDA3LS4wMjYuMDE0LS4wMzMuMDI3LjAxMy0uMDA3LjAyNi0uMDEzLjAzMy0uMDI2em0tLjg0LjU3NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjUtLjAzOS4wMDYtLjA5LjAwNi0uMDk3LjA2NSAwIC4wMTIuMDI2LjAzOC4wMzkuMDM4LjA1Mi0uMDA2LjA1OC0uMDUxLjA2NS0uMDkuMDUxLS4wMDcuMDk2LS4wMTMuMTIyLS4wNzhhLjMxMS4zMTEgMCAwMC4wNzEtLjA1OGMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjVsLjA2NC0uMDY0Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMi0uMDIuMDI2LS4wMzItLjAxMy4wMDYtLjAyLjAyLS4wMzMuMDI2LS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY0LS4wMTguMDItLjA0NC4wNDYtLjA2NC4wNjUtLjA1MSAwLS4xMDMuMDEzLS4xMjkuMDY1bC0uMDY1LjA2NHptLS44NDEuNTg4Yy0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDUxLjAwNy0uMTAzLjAxMy0uMDk2LjA4NCAwIC4wMDcuMDEzLjAyLjAyLjAyLjA3LjAwNi4wNzctLjA0Ni4wODMtLjA5Ny4wNTItLjAwNy4wOTctLjAyLjEyMy0uMDcyLjAyNi0uMDEyLjA0NS0uMDM4LjA3MS0uMDU4LjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDE5LS4wMTkuMDI1LS4wMzItLjAxMy4wMDctLjAyLjAyLS4wMzIuMDI2LS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1bC0uMDY0LjA2NGMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVhLjMwNi4zMDYgMCAwMC0uMDY0LjA2NHptLS42NDcuNDZjLjA1Mi0uMDA3LjEwNC0uMDEzLjA5Ny0uMDg1IDAtLjAwNi0uMDEyLS4wMTktLjAxOS0uMDE5LS4wNzEtLjAwNi0uMDc4LjA0NS0uMDg0LjA5Ny0uMDUyIDAtLjA5Ny4wMTMtLjEzLjA2NWEuMjIzLjIyMyAwIDAwLS4xOTMuMTI5Yy0uMDQ1LjAxMy0uMTA0LjAxMy0uMDk3LjA4NCAwIC4wMDYuMDEzLjAyLjAyLjAyLjA2NC4wMDYuMDc3LS4wNDYuMDgzLS4wOTguMDkgMCAuMTgxLS4wMDYuMTk0LS4xMjkuMDU4LS4wMDYuMTA0LS4wMi4xMy0uMDY1em0yLjEyOC0xLjUzM2MtLjAwOC4wMjctLjAyNS4wNTQtLjAzMy4wNzIuMDI1LjAwOS4wNS4wMzUuMDY3LjAyNy4wMTYtLjAxLjAyNS0uMDQ1LjAzMy0uMDcyYS41NS41NSAwIDAxLS4wNjctLjAyN3ptLTEuODEgMS4zNWMtLjAwOC0uMDI0LS4wMTUtLjA1Ni0uMDMtLjA1Ni0uMDE1LS4wMDgtLjA1Mi4wMDgtLjA2LjAyNC0uMDIyLjAzMy0uMDA3LjA3NC4wMy4wNzQuMDIyIDAgLjAzNy0uMDI1LjA2LS4wNDF6TTE1LjM1NSAxOWEuMTg1LjE4NSAwIDAxLjAzNC0uMDcyYy0uMDI1LS4wMDktLjA1LS4wMzUtLjA2Ny0uMDI2LS4wMTYuMDA4LS4wMjUuMDQ0LS4wMzMuMDcuMDE3LjAxLjA0Mi4wMTkuMDY3LjAyOHptLTMuNTI2IDIuNDAyYy0uMDE2LS4wMjQtLjAzMS0uMDUtLjA0LS4wNTctLjAxNSAwLS4wNTUuMDE2LS4wNTUuMDMzLS4wMTYuMDQuMDA4LjA3NC4wNDguMDY1LjAxNiAwIC4wMzEtLjAyNC4wNDctLjA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQjZCNUFDXCIsXG4gICAgZDogXCJNMjguMTIxIDI3LjA4NWMtLjQyNi0uNDEzLS45NDQtLjY5OC0xLjQyOC0xLjAzNC0yLjY3LTEuODYyLTUuMzQ3LTMuNzE3LTguMDIzLTUuNTczLS44OTktLjYyNy0xLjgwNC0xLjI0Ny0yLjcwMi0xLjg3NCAwLS4wMi0uMDA3LS4wNDYtLjAwNy0uMDY1bDMuOTk1LTIuNzczYzIuNjktMS44NTYgNS4zNzktMy43MDUgOC4wNjItNS41Ni4wODQtLjA1OC4xNjgtLjEzNi4yODQtLjEzNnYxNy4wNzNjLS4wNTEtLjAxOS0uMTE2LS4wMzgtLjE4LS4wNTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk00LjA3MyAyNy4xNDNjLjEyMy0uMjU4LjQwNy0uMzMuNjE0LS40ODRhNDcuODQ1IDQ3Ljg0NSAwIDAxMi4zMDgtMS42M2MxLjMxMi0uODg1IDIuNTkyLTEuODIzIDMuOTEtMi42OTUuNzk2LS41MjQgMS41OTgtMS4wNDggMi4zNDEtMS42MzYuNTg4LS40NjUgMS4yNi0uNzk1IDEuODE3LTEuMzA2LjItLjE4LjQ5LS4yOS43MjQtLjQ1OS4xMS0uMDg0LjIwNy0uMDUxLjMyMy4wMzMuNTUuMzg4IDEuMDk5Ljc4MiAxLjY2MSAxLjE1LjY4LjQ0NiAxLjMyNi45NDQgMi4wMSAxLjM3Ny42MDguMzg4IDEuMTcuODU0IDEuNzc5IDEuMjQ4LjY5OC40NDYgMS4zNy45MzcgMi4wNDkgMS40MS44MTQuNTY4IDEuNjM1IDEuMTMgMi40MyAxLjcxOS40ODUuMzU1Ljk4My42ODUgMS40NzUgMS4wMjguMDkuMDY0LjIyNi4xMDMuMjIuMjUyLTcuODg4LS4wMDctMTUuNzc0LS4wMDctMjMuNjYxLS4wMDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCMTM5MkZcIixcbiAgICBkOiBcIk0yOC4zMTUgMjcuMTQzVjEwLjA3Yy4yNzgtLjMwNC42NC0uNDkxLjk3LS43My44MTQtLjU5NSAxLjYzNS0xLjE3IDIuNDUtMS43NTIuMDU4LS4wNDUuMTE2LS4wOTcuMi0uMDk3LjAwNy4xMS4wMTMuMjEzLjAxMy4zMjMgMCA1LjUwMiAwIDExLjAxLjAwNyAxNi41MSAwIC4zNzYtLjAxMy43NS0uMTA0IDEuMTI2LS4xNjEuNjkxLS41NzUgMS4xNy0xLjI0NyAxLjQwOS0uNzQ0LjI1OS0xLjUxMy4zMy0yLjI4OS4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCRUJEQjNcIixcbiAgICBkOiBcIk0xMS41MTQgMjEuNTljLS4yNTMuMjg1LS41OTUuNDUzLS45LjY2NmEyNjUwLjA3OCAyNjUwLjA3OCAwIDAxLTYuOTM2IDQuODQybC0uMTI5LjAzOWMwLS4wNjUuMDA3LS4xMjMuMDA3LS4xODggMi40Ny0xLjY4NyA0LjkzMi0zLjM3NCA3LjQwMi01LjA2MS4xNzQtLjExNy4zMS0uMzA0LjU1LS4zMWwuMDA2LjAxMnpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dvbGFuZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29sYW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzAxYy4wNDUuOTQ2IDEgLjUgMS40MTYuMjEuNDE1LS4yOS41LS4wNDUuNTYtLjZhOS4wNyA5LjA3IDAgMDAuMDQ1LTEuMDkgMi42NzYgMi42NzYgMCAwMC0xLjc4Ni40NTVjLS4yNi4xOS0uNzQ1Ljc5LS4yNCAxXCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjgwNSAxNy45ODdhLjYuNiAwIDAxLS4yNy0uMDYuNjIuNjIgMCAwMS0uMzEtLjU1QS40MS40MSAwIDAxNCAxNy4wNWExLjE1IDEuMTUgMCAwMS41LS44MyAyLjc1MiAyLjc1MiAwIDAxMS44NDYtLjQ3aC4wNzV2LjA3NGMuMDEuMjg2LjAwMy41NzItLjAyNS44NTZ2LjI1Yy0uMDI1LjM5LS4xLjQ1LS4zLjVhMS4xMTggMS4xMTggMCAwMC0uMy4xNDVjLS4yODguMjIzLS42My4zNjQtLjk5LjQxem0xLjI3MS0yLjA2N2EyLjUwMiAyLjUwMiAwIDAwLTEuNDcuNDUgMSAxIDAgMDAtLjQyLjY3MS4yNS4yNSAwIDAwLjE3LjIwNWguMDV2LjA1NWEuNS41IDAgMDAuMjEuNDUgMS4zMSAxLjMxIDAgMDAxLjA2NS0uMzEgMS4yOSAxLjI5IDAgMDEuMzQtLjE3Yy4xMy0uMDQ1LjE2LS4wNTUuMTgtLjM2NXYtLjI1Yy4wMjQtLjI1LjAzNC0uNS4wMy0uNzVoLS4xNTV2LjAxNHpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMzE1IDE3LjNhLjc0NS43NDUgMCAwMC4zNzYtLjIxelwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzkxYS4wOTIuMDkyIDAgMTEtLjA1NS0uMTc1aC4wNmEuNTQuNTQgMCAwMC4yNzUtLjE2LjA5Mi4wOTIgMCAwMS4wNi0uMDM1LjA5LjA5IDAgMDEuMDY4LjAxNy4wOS4wOSAwIDAxLjAzNS4wNi4wOTEuMDkxIDAgMDEtLjAxOC4wNjguNy43IDAgMDEtLjM2LjIyaC0uMDY1di4wMDV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjQ5NiA2LjA1QzIuODggNS4wNDkgNS41NzEuNDMgOC40OTggMi4zMjJMNi40OTYgNi4wNXpcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTQxIDYuMTU0aC0uMDdjLTEuMDMtLjI5LTEuNjY2LS45LTEuNzg2LTEuNzE2YTIuMzk2IDIuMzk2IDAgMDExLjExNi0yLjI2IDIuNDIxIDIuNDIxIDAgMDEyLjcyMi4wOWwuMDcuMDQ0TDYuNTQgNi4xNTR6bS41LTQuMTkyYy0uNDEgMC0uODExLjEyLTEuMTU1LjM0NUEyLjIxMSAyLjIxMSAwIDAwNC44NSA0LjM5M2MuMTEuNzI2LjY3IDEuMjc2IDEuNTg2IDEuNTUxbDEuOTAxLTMuNTg3YTIuNTAxIDIuNTAxIDAgMDAtMS4yOC0uMzhsLS4wMTUtLjAxNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjU2NiAxLjk3N2MyLjg2Mi0yLjAwMSA1LjQ0OCAyLjUwMiAyLjEyMSAzLjY2N2wtMi4xMjEtMy42Njd6XCIsXG4gICAgZmlsbDogXCIjNzRDREREXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNC42NDcgNS43NTRsLTIuMjAxLTMuODAyLjA2NS0uMDQ1YTIuMzYyIDIuMzYyIDAgMDEyLjYyNi0uMjIgMi40MjcgMi40MjcgMCAwMTEuMTk2IDIuMjQxYy0uMDUuNS0uMzIgMS4zNTYtMS42MTYgMS44MDFsLS4wNy4wMjV6bS0xLjk2MS0zLjc1MmwyLjA0MSAzLjUzMmExLjk1NiAxLjk1NiAwIDAwMS40MjYtMS42MiAyLjI0IDIuMjQgMCAwMC0xLjEwNi0yLjA3NyAyLjEyNiAyLjEyNiAwIDAwLTIuMzYxLjE2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzLjE4MSAyOC45MjhjLjcyNi40NSAyLjA1NiAxLjgxMS45NjYgMi40NzEtMS4wNDYuOTYxLTEuNjM2LTEuMDU1LTIuNTU3LTEuMzNhMi41NDkgMi41NDkgMCAwMTEuNTkxLTEuMTQxelwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMuNTkyIDMxLjc0NWgtLjA0Yy0uNDE2LS4wMjUtLjc1Ni0uNDMtMS4wODYtLjgxNmEyLjMzIDIuMzMgMCAwMC0uOS0uNzc1bC0uMTItLjAzNS4wNzQtLjEyNWEyLjY1NiAyLjY1NiAwIDAxMS42NDYtMS4xNzZoLjA2NWMuNDY2LjI5IDEuNDI2IDEuMTMgMS40MjEgMS44OTFhLjgzNS44MzUgMCAwMS0uNDUuNzI1LjkwNS45MDUgMCAwMS0uNjEuMzF6bS0xLjg2MS0xLjcyMWMuMzM5LjIuNjMzLjQ2Ny44NjUuNzg1LjIxOS4zNi41Ni42MjguOTYuNzU1YS43MTYuNzE2IDAgMDAuNS0uMjM1LjY2MS42NjEgMCAwMC4zNzEtLjU4YzAtLjYxLS43Ny0xLjM3Ni0xLjMwNi0xLjcyMWEyLjM1MSAyLjM1MSAwIDAwLTEuMzg2Ljk5NmgtLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjE0NyAzMS40OTRhLjA5LjA5IDAgMDEtLjA4LS4wNWMtLjA1My0uMTEtLjEtLjIyNC0uMTQtLjM0YTEuNSAxLjUgMCAwMC0uMzMtLjYxLjA5MS4wOTEgMCAwMS0uMDIyLS4wOTguMDkuMDkgMCAwMS4xNDctLjAzMmMuMTcyLjE4OC4zLjQxNC4zNy42Ni4wMzkuMTEuMDg0LjIxNi4xMzUuMzJhLjA5LjA5IDAgMDEtLjA0LjEybC0uMDQuMDN6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4xODkgMzAuNDY0Yy0uODU2LjEzLTEuMzM2LjktMi4wNDYgMS4yOWEuNjIuNjIgMCAwMS0xLjAwMS0uMjM1LjMyNS4zMjUgMCAwMS0uMjYtLjEyYy0uNjItMSAuNjQ1LTEuNjk2IDEuMzEtMi4xODYuOTM2LS4xOCAxLjUxMS42MTUgMS45OTcgMS4yNXpcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjkyIDMxLjk5NWEuNjEzLjYxMyAwIDAxLS4xNiAwIC43NC43NCAwIDAxLS40MzUtLjM3NS4zMDEuMzAxIDAgMDEtLjI0NS0uMTNjLS42LS45NDYuNDItMS42NjIgMS4wOTYtMi4xMzdsLjIzNS0uMTdjLjk0NS0uMTkgMS41NDYuNTkgMi4wMjYgMS4yMmwuMTM1LjE4MWgtLjE1YTIuNTg2IDIuNTg2IDAgMDAtMS4yNjYuNzI1Yy0uMjMuMjEyLS40ODIuNC0uNzUuNTZhMS4wMDEgMS4wMDEgMCAwMS0uNDg2LjEyNnptLS42LS41OGEuMjQ1LjI0NSAwIDAxLjEwNSAwaC4wMjVsLjA0LjA4YS41OC41OCAwIDAwLjMzNS4zMDUuNjg2LjY4NiAwIDAwLjUtLjEyYy4yNi0uMTU1LjUwMy0uMzM3LjcyNi0uNTRhMyAzIDAgMDExLjIwNi0uNzM2Yy0uNDYtLjYtMS0xLjI1LTEuNzg2LTEuMWwtLjIyNS4xNmMtLjY5LjUtMS41NDYgMS4wOS0xLjA1MSAxLjg4NWEuMTQ2LjE0NiAwIDAwLjEwNS4wN2wuMDItLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTU3IDMxLjYxNGEuMDkuMDkgMCAwMS0uMDktLjEyYy4wMzctLjI0LjEzNy0uNDY2LjI5LS42NTUuMDcyLS4xLjEzNi0uMjA1LjE5LS4zMTVhLjA5LjA5IDAgMTEuMTY1LjA3NWMtLjA1OC4xMi0uMTI3LjIzNi0uMjA1LjM0NS0uMTMyLjE3LS4yMTcuMzcyLS4yNDUuNTg1YS4wOS4wOSAwIDAxLS4wNjcuMDg0LjA5LjA5IDAgMDEtLjAzOC4wMDJ6TTYuNjQ3IDQuNzhjLS41LS4yNS0uODI2LS41OTYtLjUzNi0xLjE0Ni4yOS0uNTUuNzctLjQ1NSAxLjI1MS0uMjA1bC0uNzE1IDEuMzV6bTE3LjI4NS0uNDhjLjUtLjI1LjgyNS0uNTk2LjUzNS0xLjE0Ni0uMjktLjU1LS43Ny0uNDU2LTEuMjUtLjIwNWwuNzE1IDEuMzV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTkgMTcuMTgxYy0uMDQ1Ljk0Ni0xLjAwMS41LTEuNDE2LjIxLS40MTYtLjI5LS41LS4wNDUtLjU2LS42YTkuMDY4IDkuMDY4IDAgMDEtLjA0Ni0xLjA5IDIuNjc3IDIuNjc3IDAgMDExLjc4Ny40NTRjLjI2LjE5Ljc0NS43OS4yNCAxLjAwMVwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNzI4IDE3Ljg0NmEyLjA0NiAyLjA0NiAwIDAxLS45NTUtLjM2IDEuMTE3IDEuMTE3IDAgMDAtLjMtLjE0NWMtLjItLjA3LS4yNzUtLjEzLS4zLS41di0uMjVhNi41MTYgNi41MTYgMCAwMS0uMDI2LS44NTZ2LS4xMmguMDc2YTIuNzUxIDIuNzUxIDAgMDExLjg0Ni40NyAxLjE1IDEuMTUgMCAwMS41LjgzLjQxMi40MTIgMCAwMS0uMjI1LjMyNi42Mi42MiAwIDAxLS4zMS41NS42MDUuNjA1IDAgMDEtLjMwNi4wNTV6bS0xLjQ1Ni0yLjA2Yy0uMDAzLjI1LjAwNy41LjAzLjc1di4yNWMwIC4zMDUuMDQ2LjMxNS4xOC4zNjUuMTIyLjA0LjIzNi4wOTcuMzQuMTdhMS4zMDcgMS4zMDcgMCAwMDEuMDY3LjMxLjUwMi41MDIgMCAwMC4yMS0uNDV2LS4wNmguMDVhLjI1LjI1IDAgMDAuMTctLjIwNSAxLjAwMiAxLjAwMiAwIDAwLS40Mi0uNjcgMi41NTIgMi41NTIgMCAwMC0xLjYyNy0uNDZ6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTggMTcuMTgxYS43NDYuNzQ2IDAgMDEtLjM3NS0uMTk1elwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuMjE5IDE3LjI3MWgtLjA5NWEuNy43IDAgMDEtLjM1LS4yNS4wOS4wOSAwIDAxLS4wMDctLjEwMS4wOTEuMDkxIDAgMDEuMTUyLS4wMS41NC41NCAwIDAwLjI3NS4xNmguMDZhLjEwMS4xMDEgMCAxMS0uMDM1LjIwMXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjQwNy4wNjZjMy42MjIgMCA3LjAwNC41IDguNzg1IDQuMDAyIDEuNTg2IDMuODk4IDEgOC4xMDUgMS4yNjYgMTIuMjIzLjIxIDMuNTM3LjY3IDcuNjI0LS45NyAxMC45MDYtMS43MTcgMy40NDItNi4wNSA0LjI5Ny05LjYwMSA0LjE4Mi0yLjc5Mi0uMS02LjE2NC0xLTcuNzQtMy41NjItMS44NTEtMy4wMDItLjk3Ni03LjQ0NC0uODQtMTAuNzcxLjE2LTMuOTQyLTEuMDcxLTcuOS4yMjUtMTEuNzYyQzcuODc3IDEuMjgyIDExLjUuMzc2IDE1LjQwMi4wNjZcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUwMiAzMS40OTRoLS42MmExMy4yMDIgMTMuMjAyIDAgMDEtNC4zNTgtLjg3IDYuOTY5IDYuOTY5IDAgMDEtMy40NTctMi43MzdjLTEuNTAxLTIuNDIxLTEuMjMtNS43NjMtMS04LjcxNS4wNi0uNzQuMTE0LTEuNDQ2LjE0LTIuMTA2LjAyNi0xLjQtLjAzNC0yLjgtLjE4LTQuMTkyLS4yMTEtMi41MDItLjQzMS01LjA4OS40MS03LjU5NWE2LjY0NCA2LjY0NCAwIDAxMy41MDEtNC4wNDdDMTEuMjkuNTcyIDEyLjk0LjE5IDE1LjM2NyAwYzMuNTcyLS4wMjUgNy4wOTQuNDc1IDguOTA1IDQuMDIyIDEuMTYgMi44NTIgMS4xNzYgNS45MTQgMS4xOTYgOC44NzYgMCAxLjExIDAgMi4yNTYuMDggMy4zNzcgMCAuMzQuMDQuNjg1LjA2NSAxLjAzLjIxIDMuMjQ3LjQ1IDYuOTM0LTEuMDQ2IDkuOTE2LTEuODcxIDMuNzMyLTYuNTc0IDQuMjcyLTkuMDY1IDQuMjcyek0xNS40MDcuMTU2Yy0zLjc2OC4zMi03LjQ0IDEuMTMtOC43OSA1LjE1OC0uODMxIDIuNDcxLS42MSA1LjAzOC0uNDA2IDcuNTA0LjE0NyAxLjQuMjA3IDIuODA2LjE4IDQuMjEzLS4wMjUuNjY1LS4wODUgMS4zNy0uMTQgMi4xMTYtLjIzIDIuOTIyLS41IDYuMjM5Ljk2NiA4LjYwNS42MTUgMSAyLjU5NiAzLjMzNyA3LjY3IDMuNTAyIDIuMTk2LjA4IDcuNTA0LS4xNyA5LjUwNS00LjE0MiAxLjQ3LTIuOTQyIDEuMjM2LTYuNTk5IDEuMDI2LTkuODI2IDAtLjM1LS4wNDUtLjY5NS0uMDY1LTEuMDNhNjcuNDUxIDY3LjQ1MSAwIDAxLS4wOC0zLjM1M2MwLTIuOTQxLS4wMy02LjAwMy0xLjE4MS04LjgwNUE2LjQzOCA2LjQzOCAwIDAwMjAuNDQ1Ljg0MWExNC45NiAxNC45NiAwIDAwLTUuMDM4LS42ODV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNDIgNC45MjRjLjY1IDMuNzc3IDYuODI0IDIuNzgxIDUuOTM4LTEuMDMtLjc5NS0zLjQxOC02LjE1My0yLjQ3Mi01LjkzOCAxLjAzelwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguOTc5IDcuMzlhMy40NTcgMy40NTcgMCAwMS0xLjEzLS4xODUgMi43OTcgMi43OTcgMCAwMS0xLjg5Mi0yLjI2NiAyLjg4MiAyLjg4MiAwIDAxLjc4LTIuMjIyIDMuNDA3IDMuNDA3IDAgMDEyLjAwMi0xIDMuMjAyIDMuMjAyIDAgMDEyLjAzMS4zNSAyLjcyNyAyLjcyNyAwIDAxMS4yOTYgMS44MDYgMi42NDMgMi42NDMgMCAwMS0uNzcgMi42ODIgMy41MDIgMy41MDIgMCAwMS0yLjMxNy44MzV6bS0yLjg0Ny0yLjQ3NmEyLjYyNiAyLjYyNiAwIDAwMS43NzYgMi4xMjYgMy40MTcgMy40MTcgMCAwMDMuMjc3LS42MiAyLjUwMiAyLjUwMiAwIDAwLjcxNi0yLjUwMiAyLjY3MiAyLjY3MiAwIDAwLTMuMTMyLTIuMDMxIDIuODg3IDIuODg3IDAgMDAtMi42MzcgMy4wMjd6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjY2MyA1LjUzOWMuODQgMy4yODcgNi4xMDMgMi40NDEgNS45MDgtLjg1NS0uMjM1LTMuOTUzLTYuNzE0LTMuMjA3LTUuOTA4Ljg1NXpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjQ3NCA3LjcwNWEzLjIzMiAzLjIzMiAwIDAxLTEuNTM2LS4zNzUgMi43MjcgMi43MjcgMCAwMS0xLjM1NS0xLjc3NiAyLjc1NyAyLjc1NyAwIDAxLjk0LTIuODI3IDMuNTUyIDMuNTUyIDAgMDEzLjUzMi0uNDUgMi42NzIgMi42NzIgMCAwMTEuNjAxIDIuNDAyYy4xMDUgMS43NS0xLjI4NiAyLjc3MS0yLjYxNyAzLjAwMWEzLjY1NyAzLjY1NyAwIDAxLS41NjUuMDI1ek04Ljc2MyA1LjUyQTIuNzMyIDIuNzMyIDAgMDAxMi4wMyA3LjUyYzEuMjYtLjIgMi41NzYtMS4xNiAyLjQ3Ni0yLjgwNmEyLjUwMSAyLjUwMSAwIDAwLTEuNS0yLjI2MiAzLjM3NyAzLjM3NyAwIDAwLTMuMzU4LjQzIDIuNTk3IDIuNTk3IDAgMDAtLjg4NSAyLjYzN3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2Ljc2NyA5LjQ4MWMuMDQ5LjUyMS4wNDkgMS4wNDYgMCAxLjU2NmExIDEgMCAwMS0uNTg1LjM2Ljg2MS44NjEgMCAwMS0uNjU1LS41Yy0uMDMyLS41OS0uMDE3LTEuMTgzLjA0NS0xLjc3bDEuMTk1LjM0NHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjIzNyAxMS40ODNoLS4wMjVhLjk0NC45NDQgMCAwMS0uNzI1LS41NjYgNS45NSA1Ljk1IDAgMDEwLTEuMjE1YzAtLjE4NS4wMy0uMzguMDM1LS41N3YtLjE1bDEuMzUuNDE0di4wODVjMCAuMTYgMCAuMzMuMDI2LjUuMDQ1LjM1OC4wNDUuNzIgMCAxLjA3NnYuMDI1YS43NS43NSAwIDAxLS40NzYuMzRsLS4xNTUuMDZoLS4wM3ptLS41OC0uNjNhLjc2Ni43NjYgMCAwMC41Ni40NDVsLjE0LS4wNTZhLjYuNiAwIDAwLjM2Ni0uMjZjLjA0LS4zMzIuMDQtLjY2OCAwLTEgMC0uMTU1IDAtLjMwNS0uMDI2LS40NTVsLTEtLjMwNmMwIC4xNTUgMCAuMzEtLjAzLjQ2LS4wNDQuMzg4LS4wNS43NzgtLjAxNSAxLjE2NmwuMDA1LjAwNXpNMTAuMTE0IDUuOTY0Yy40OTEgMCAuODktLjQzMi44OS0uOTY1IDAtLjUzNC0uMzk5LS45NjYtLjg5LS45NjYtLjQ5MiAwLS44OS40MzItLjg5Ljk2NiAwIC41MzMuMzk4Ljk2NS44OS45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41MTkgNS40NjRjLjExNiAwIC4yMS0uMTEuMjEtLjI0NXMtLjA5NC0uMjQ1LS4yMS0uMjQ1Yy0uMTE2IDAtLjIxLjExLS4yMS4yNDVzLjA5NC4yNDUuMjEuMjQ1elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNTY4IDUuNzI0Yy40ODMgMCAuODc1LS40MzIuODc1LS45NjUgMC0uNTMzLS4zOTItLjk2Ni0uODc1LS45NjYtLjQ4NCAwLS44NzYuNDMzLS44NzYuOTY2IDAgLjUzMy4zOTIuOTY1Ljg3Ni45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy45NjMgNS4yMjRjLjExNCAwIC4yMDYtLjExLjIwNi0uMjQ1IDAtLjEzNi0uMDkyLS4yNDUtLjIwNi0uMjQ1LS4xMTMgMC0uMjA1LjExLS4yMDUuMjQ1cy4wOTIuMjQ1LjIwNS4yNDV6TTE0LjI2NiA5LjQwNmMtLjM5Ljk0MS4yMTUgMi44MjIgMS4yNyAxLjQzNmExMS4xMiAxMS4xMiAwIDAxLjA0Ni0xLjc3bC0xLjMxNi4zMzR6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC44MTIgMTEuNDI4YS41LjUgMCAwMS0uMjYtLjA3Yy0uNDI2LS4yNDYtLjY5MS0xLjI1MS0uMzktMi4wMDJ2LS4wNGwxLjUtLjM4di4xMmMwIC4xOTUgMCAuMzktLjAzNS41NzVhNS43MSA1LjcxIDAgMDAwIDEuMTgxdi4wNjVhMS4wNTYgMS4wNTYgMCAwMS0uODE1LjU1em0tLjQ5Ni0xLjk0N2MtLjIxNS41ODYtLjA0NSAxLjUwMS4zMyAxLjcxNi4yNy4xNTUuNTctLjExNS43OC0uMzg1YTYuMTI4IDYuMTI4IDAgMDEwLTEuMThjMC0uMTQ2IDAtLjMuMDMxLS40NWwtMS4xNC4zelwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMzggNy41OTVhMS4xNDYgMS4xNDYgMCAwMC0uOTQgMS42MDFjLjUuOSAxLjYxMS0uMDggMi4zMDIgMCAuNzk1IDAgMS40NS44NCAyLjA5LjE1LjcxMS0uNzctLjMwNC0xLjUtMS4xLTEuODU2bC0yLjM1MS4xMDV6XCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy4yNjggOS43MjdhMiAyIDAgMDEtLjczLS4yMDYgMi4yMDcgMi4yMDcgMCAwMC0uNzkxLS4yMmMtLjI4NyAwLS41Ny4wNjItLjgzLjE4LS41NjEuMTk1LTEuMTk2LjQxNi0xLjU1Ny0uMjNhMS4wOCAxLjA4IDAgMDEwLTEuMDUgMS4yODEgMS4yODEgMCAwMTEuMDAxLS42ODZsMi40MDYtLjEwNWMuNTkuMjUgMS4yNjYuNzA2IDEuMzgxIDEuMjM2YS45NTUuOTU1IDAgMDEtLjg4IDEuMDh6bS0xLjUwMS0uNjA2Yy4yOTYuMDI0LjU4NC4xMDQuODUuMjM1LjQ1LjE5LjgwNi4zMzUgMS4xNjYtLjA1NWEuNjY0LjY2NCAwIDAwLjIwNS0uNjA1Yy0uMS0uNDYtLjczNS0uODgtMS4yNTYtMS4xbC0yLjMyNi4wOTRhMS4xMSAxLjExIDAgMDAtLjg1LjU5LjkwNi45MDYgMCAwMDAgLjg3NmMuMjg1LjUuNzk1LjMzNSAxLjM0LjE1LjI3NC0uMTIyLjU3LS4xODUuODctLjE4NXpcIixcbiAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjI2NiA3LjU2Yy0uMDU1LTEuMjUgMi4zMzYtMS40MSAyLjYxNy0uMzYuMjggMS4wNS0yLjUwMiAxLjI5LTIuNjE3LjM2elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29sYW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR29vZ2xlRyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29vZ2xlRyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nb29nbGVfZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNMTUuMzE5IDMuMjc4YzAtMS4xMzEtLjEwMi0yLjIyLS4yOS0zLjI2NEgwdjYuMTcyaDguNTg3Yy0uMzcgMS45OTUtMS40OTQgMy42ODUtMy4xODQgNC44MTZ2NC4wMDRoNS4xNTdjMy4wMTctMi43NzggNC43NTgtNi44NjkgNC43NTgtMTEuNzI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBkOiBcIk0xNC4zNDMgMTIuOTU2YzQuMzA4IDAgNy45Mi0xLjQzIDEwLjU2LTMuODY2bC01LjE1Ny00LjAwNGMtMS40MjkuOTU4LTMuMjU2IDEuNTIzLTUuNDAzIDEuNTIzLTQuMTU2IDAtNy42NzQtMi44MDYtOC45MjgtNi41NzhILjA4NHY0LjEzNGMyLjYyNSA1LjIxNSA4LjAyMSA4Ljc5IDE0LjI1OSA4Ljc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBkOiBcIk03LjAyOCAxMC4yNWE5LjU5IDkuNTkgMCAwMS0uNS0zLjAzMiA5LjU5IDkuNTkgMCAwMS41LTMuMDMyVi4wNTJoLTUuMzNBMTUuOTUgMTUuOTUgMCAwMDAgNy4yMThjMCAyLjU3NS42MTcgNS4wMTIgMS42OTcgNy4xNjZsNS4zMzEtNC4xMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGQ6IFwiTTE0LjM0MyA2LjM5MmMyLjM0MiAwIDQuNDQ2LjgwNSA2LjEgMi4zODZsNC41NzYtNC41NzZDMjIuMjU2IDEuNjI3IDE4LjY0NC4wNDYgMTQuMzQzLjA0NiA4LjEwNS4wNDYgMi43MDkgMy42MjIuMDgzIDguODM2bDUuMzMyIDQuMTM0YzEuMjU0LTMuNzcgNC43NzItNi41NzggOC45MjgtNi41Nzh6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE1Ljk1NSAxMy4wODcpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0Mjg1RjRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDAxIDE1LjAwNmgxNS4zMThWLjAxNEguMDAxelwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS42MTMgMTkuMDAzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzRBODUzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNLjA4NCAxMi45NTZoMjQuODE5Vi4wMzFILjA4NHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgOC43ODQpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQkJDMDRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDE0LjM4NGg3LjAyOFYuMDUySDB6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2gnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VBNDMzNVwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2gnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wODQgMTIuOTdoMjQuOTM1Vi4wNDZILjA4NHpcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29vZ2xlRzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0hhcHJveHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0hhcHJveHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faGFwcm94eScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2NsaXAwJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMDUgMTMuMjM3bC0zLjExLTMuNjEyXCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTE3IDEwLjUyOGwyLjUwOSAzLjUxMlwiLFxuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNSAxMy4yMzdsMy4xMS0zLjYxMk0xOS44NjMgMTcuMTVsMy43MTItMy4xMU0xOS44NjMgMTcuMTVsMy43MTIgMy4zMTFNMTkuMTYgMjQuNTc1bC0zLjExLTMuNTExTTEyLjk0IDI0LjU3NWwzLjExLTMuNTExTTguNjI1IDIwLjI2bDMuNTEyLTMuMTFNOC42MjUgMTQuMDRsMy41MTIgMy4xMU0xNi4wNSAxMy4yMzhsLTcuNDI1LjgwMk0xNi4wNSAxMy4yMzhsNy41MjUuODAyTTE5Ljg2MyAxNy4xNWwtLjcwMi03LjUyNU0xOS44NjMgMTcuMTVsLS43MDIgNy40MjVNMjMuNTc1IDIwLjQ2MWwtNy41MjUuNjAyTTguNjI1IDIwLjI2MWw3LjQyNS44MDNNMTIuOTQgMjQuNTc1bC0uODAzLTcuNDI1TTEyLjk0IDkuNjI1bC0uODAzIDcuNTI1XCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTE0IDE1LjA0M2wzLjUxMS0xLjAwM005LjMyOCA3LjExN2wzLjYxMiAyLjUwOU0xMy43NDMgNS41MTJsLS44MDMgNC4xMTNNMTMuNzQzIDUuNTEybDUuNDE4IDQuMTEzTTE4LjM1OCA1LjUxMmwuODAzIDQuMTEzTTIyLjc3MyA3LjExN0wxOS4xNiA5LjYyNk0yNS45ODMgMTAuNTI4bC02LjgyMi0uOTAzTTIzLjU3NSAxNC4wNGwyLjQwOC0zLjUxMk0yMy41NzUgMTQuMDRsMy40MTIgMS4wMDNNMjMuNTc1IDE0LjA0bDMuNDEyIDUuMjE3TTE4LjM1OCA1LjUxMkwxMi45NCA5LjYyNU0yMy41NzYgMTQuMDRsLS44MDMtNi45MjNNMjMuNTc1IDIwLjQ2MmwzLjQxMi0xLjIwNE0yMy41NzUgMjAuNDYybDMuNDEyLTUuNDE4TTIzLjU3NSAyMC40NjFsMi40MDggMy4zMTJNMjMuNTc2IDIwLjQ2MWwtLjgwMyA2LjcyM00xOS4xNiAyNC41NzVsMy42MTMgMi42MDlNMTkuMTYgMjQuNTc1bDYuODIzLS44MDJNMTkuMTYgMjQuNTc1bC0uODAyIDQuMjE0TTE5LjE2IDI0LjU3NWwtNS40MTcgNC4yMTRNMTIuOTQgMjQuNTc1bC44MDMgNC4yMTRNMTIuOTQgMjQuNTc1bDUuNDE4IDQuMjE0TTEyLjk0IDI0LjU3NWwtMy42MTIgMi42MDlNMTIuOTQgMjQuNTc1bC02LjgyMy0uODAyTTguNjI2IDIwLjI2MWwtMi41MDkgMy41MTJNOC42MjUgMjAuMjYxbC43MDMgNi45MjNNOC42MjUgMjAuMjZsLTMuNTExLTEuMDAyTTguNjI1IDE0LjA0bC0zLjUxMSA1LjIxN004LjYyNSAyMC4yNmwtMy41MTEtNS4yMTdNOS4zMjggNy4xMTdsLS43MDMgNi45MjNNNi4xMTcgMTAuNTI4bDYuODIzLS45MDNcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA2LFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4zMjcgNy4xMTdMNi43MiA1LjgxM005LjMyOCA3LjExN2wtLjIwMS0yLjkxTTEzLjc0MiA1LjUxMkw5LjEyNyA0LjIwN00xMy43NDIgNS41MTJsLTIuMDA2LTIuNTA5TTEzLjc0MyA1LjUxMmwuODAyLTIuOTFNOS4zMjggNy4xMTdsMi40MDgtNC4xMTRNMTguMzU4IDUuNTEybC0zLjgxMy0yLjkxTTE4LjM1OCA1LjUxMmwtLjgwMy0zLjAxTTEzLjc0MyA1LjUxMmwzLjgxMi0zLjAxTTE4LjM1OCA1LjUxMmwyLjAwNy0yLjUwOU0yMi43NzMgNy4xMTdsLTIuNDA4LTQuMTE0TTIyLjc3MyA3LjExN2wuMzAxLTIuOTFNMTguMzU4IDUuNTEybDQuNzE2LTEuMzA1TTIyLjc3MyA3LjExN2wyLjcwOS0xLjQwNU0yMi43NzMgNy4xMTdsNC43MTYuNzAzTTI1Ljk4MyAxMC41MjhsMS41MDUtMi43MDlNMjUuOTg0IDEwLjUyOGwtLjUwMi00LjgxNk0yNS45ODMgMTAuNTI4bDMuMTEtLjNNMjUuOTgzIDEwLjUyOGw0LjIxNCAyLjMwOE0yNi45ODcgMTUuMDQ0bDIuMTA3LTQuODE3TTI2Ljk4NyAxNS4wNDNsMy4yMS0yLjIwN00yNi45ODcgMTUuMDQzbDMuNjEyLjcwM00yNi45ODcgMTkuMjU4bDMuNjEyLTMuNTEyTTI2Ljk4NyAxOS4yNThsMy43MTItLjcwM00yNi45ODcgMTUuMDQzbDMuNzEyIDMuNTEyTTI2Ljk4NyAxOS4yNThsMy4xMSAyLjEwN00yNS45ODMgMjMuNzczbDQuMTE0LTIuNDA5TTI1Ljk4MyAyMy43NzNsMy4xMS4zTTI2Ljk4NyAxOS4yNThsMi4xMDcgNC44MTZNMjUuOTgzIDIzLjc3M2wxLjUwNSAyLjcwOU0yNS45ODQgMjMuNzczbC0uNTAyIDQuNzE1TTI1LjQ4MiAyOC40ODhsLTIuNzEtMS4zMDRNMjIuNzczIDI3LjE4NGwuMiAyLjkxTTIyLjc3MyAyNy4xODRsNC43MTYtLjcwM00yMi43NzMgMjcuMTg0bC0yLjQwOCA0LjExNE0xOC4zNTggMjguNzlsMi4wMDcgMi41MDhNMTguMzU4IDI4Ljc5bDQuNjE1IDEuMzA0TTE4LjM1OCAyOC43OWwtLjgwMyAzLjAxTTE4LjM1OCAyOC43OWwtMy44MTMgMy4wMU0xMy43NDMgMjguNzlsLjgwMiAzLjAxTTEzLjc0MyAyOC43OWwzLjgxMiAzLjAxTTEzLjc0MiAyOC43OWwtMi4wMDYgMi41MDhNOS4zMjggMjcuMTg0bDIuNDA4IDQuMTE0TTEzLjc0MiAyOC43OWwtNC42MTUgMS40MDRNOS4zMjggMjcuMTg0bC0uMjAxIDMuMDFNOS4zMjggMjcuMTg0bC0yLjcxIDEuNDA0TTYuMTE3IDIzLjc3M2wuNTAyIDQuODE2TTkuMzI4IDI3LjE4NGwtNC43MTYtLjcwM002LjExNyAyMy43NzNsLTEuNTA1IDIuNzA5TTYuMTE3IDIzLjc3M2wtMy4xMS4zTTYuMTE3IDIzLjc3M2wtNC4yMTQtMi40MDlNNS4xMTQgMTkuMjU4bC0zLjIxIDIuMTA3TTUuMTE0IDE5LjI1OEwxLjQgMTguNTU1TTUuMTE0IDE5LjI1OGwtMi4xMDcgNC44MTZNNS4xMTQgMTUuMDQzTDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4TDEuNCAxNS43NDZNNS4xMTQgMTUuMDQzbC0zLjExLTIuMTA2TTUuMTE0IDE1LjA0M2wtMy43MTMuNzAzTTUuMTE0IDE1LjA0NGwtMi4wMDctNC44MTdNNi4xMTcgMTAuNTI4bC0zLjAxLS4zTTYuMTE3IDEwLjUyOGwtNC4xMTQgMi40MDhNNi4xMTcgMTAuNTI4TDQuNzEyIDcuOTJNNi4xMTcgMTAuNTI4bC42MDItNC43MTVNOS4zMjggNy4xMTdsLTQuNjE2LjgwM1wiLFxuICAgIHN0cm9rZTogXCIjMDgzRDVGXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDUsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45NDMgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6TTE3Ljc1NiAxMS4zMzFoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpNMTcuNzU2IDE5LjE1N2gtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyek0yMS42NjkgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6XCIsXG4gICAgZmlsbDogXCIjMDA2REE4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4zNjUgOC40MjFoLTIuNTA5VjEwLjloMi41MDlWOC40MnpNMTQuMTQ0IDguMzIxaC0yLjUwOXYyLjQ3OGgyLjUwOVY4LjMyMXpNOS44MyAxMi44MzZINy4zMnYyLjQ3OEg5Ljgzdi0yLjQ3OHpNOS44MyAxOC45NTZINy4zMnYyLjQ3OUg5Ljgzdi0yLjQ3OXpNMjQuNjc5IDE4Ljk1NkgyMi4xN3YyLjQ3OWgyLjUwOXYtMi40Nzl6TTI0LjY3OSAxMi43MzZIMjIuMTd2Mi40NzhoMi41MDl2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MiA5LjYyNUg1LjMxNHYxLjY3Nkg2LjkyVjkuNjI1ek0xMC4xMyA2LjIxNEg4LjUyNnYxLjY3NWgxLjYwNlY2LjIxNHpNMTQuNDQ1IDQuNjA5aC0xLjYwNnYxLjY3NWgxLjYwNlY0LjYxek01LjkxNiAxNC4xNEg0LjMxMXYxLjY3NmgxLjYwNVYxNC4xNHpNMjYuNzg2IDkuODI2SDI1LjA4djEuNjQ2aDEuNzA2VjkuODI2ek0yMy41NzUgNi40MTVIMjEuODdWOC4wNmgxLjcwNVY2LjQxNXpNMTkuMjYgNC44MWgtMS43MDV2MS42NDVoMS43MDZWNC44MDl6TTI3LjY4OSAxNC40NDFoLTEuNjA1djEuNjQ2aDEuNjA1VjE0LjQ0elwiLFxuICAgIGZpbGw6IFwiIzEzOUJEN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMTQ0IDIzLjI3aC0yLjUwOXYyLjQ3OWgyLjUwOXYtMi40Nzh6TTIwLjI2NCAyMy4yN2gtMi41MDh2Mi40NzloMi41MDh2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNjg1IDIyLjc3SDI1LjA4djEuNjc1aDEuNjA1di0xLjY3NnpNMjMuMzc1IDI2LjA4SDIxLjc3djEuNjc2aDEuNjA1VjI2LjA4ek0xOS4wNiAyNy42ODZoLTEuNjA1djEuNjc1aDEuNjA1di0xLjY3NXpNMjcuNTg5IDE4LjI1NGgtMS42MDZ2MS42NzZoMS42MDZ2LTEuNjc2ek02LjkyIDIyLjk3SDUuMjE0djEuNjQ2SDYuOTJWMjIuOTd6TTEwLjAzIDI2LjM4MUg4LjMyNXYxLjY0NmgxLjcwNVYyNi4zOHpNMTQuNDQ1IDI3Ljk4N2gtMS43MDZ2MS42NDVoMS43MDZ2LTEuNjQ1ek01LjgxNiAxOC4zNTVINC4yMVYyMGgxLjYwNnYtMS42NDV6XCIsXG4gICAgZmlsbDogXCIjMTM5QkQ3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6XCIsXG4gICAgZmlsbDogXCIjMDNBOURBXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI1LjY4MiAyNy44ODZoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMSAxNy45NTNoLS45MDN2LjkzM0gzMXYtLjkzM3pNNy4xMiAyNy45ODdoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMC4zOTggMjAuNzYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjAuNjY1IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSAyMy4zNzFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yNy42OSAyNS43OGgtLjkwNHYuOTMyaC45MDN2LS45MzN6TTIzLjI3NCAyOS43OTNoLS45MDN2LjkwMmguOTAzdi0uOTAyek0xNy43NTYgMzEuNDk4aC0uOTAzdi45MDNoLjkwM3YtLjkwM3pNOS40MjggMjkuNDkyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggMjMuNDcyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMi4zMDQgMjAuODYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNNS4wMTMgMjUuODhINC4xMXYuOTMzaC45MDN2LS45MzN6TTEuOTAzIDE3Ljk1M0gxdi45MzNoLjkwM3YtLjkzM3pNMTQuOTQ3IDMxLjQ5OGgtLjkwM3YuOTMzaC45MDJ2LS45MzN6TTEyLjEzNyAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzelwiLFxuICAgIGZpbGw6IFwiIzAzQTlEQVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnY2xpcDAnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwaDMydjMySDBWMHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSGFwcm94eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2libScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjguMDA1JVwiLFxuICAgIHgyOiBcIjUzLjMzJVwiLFxuICAgIHkxOiBcIjc5LjMyMyVcIixcbiAgICB5MjogXCI3OS4zMjQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjM0JEQURFXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAuNDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMzZDRUUxXCIsXG4gICAgc3RvcE9wYWNpdHk6IDAuMzgzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTJFRlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjE5LjQ5NiVcIixcbiAgICB4MjogXCI3MS4zMDklXCIsXG4gICAgeTE6IFwiODMuMzQ0JVwiLFxuICAgIHkyOiBcIjE3LjYzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMDdGRkFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RUFGRjFcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCIyMS45MDklXCIsXG4gICAgeDI6IFwiMjEuOTA5JVwiLFxuICAgIHkxOiBcIjk2LjMxNCVcIixcbiAgICB5MjogXCIyOS40NTQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDJDMUU2XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNTcuMDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkZCOUVGXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODYuNzE2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjBDQkU3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNUNDRkU1XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiOTYuMjA1JVwiLFxuICAgIHgyOiBcIi0xLjE3MiVcIixcbiAgICB5MTogXCIxMi42NjclXCIsXG4gICAgeTI6IFwiLTIyLjI1MiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIyMi40MjclXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzOEQyRTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5MS4yMDMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2QUJGRUNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICB4MTogXCI5LjQwOCVcIixcbiAgICB4MjogXCI4MC41ODklXCIsXG4gICAgeTE6IFwiODcuNzY0JVwiLFxuICAgIHkyOiBcIjgzLjEzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMxMjZDRkRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMUExRUZcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzOEQyRTBcIixcbiAgICBkOiBcIk00LjI2MiAxMy4xMjJhLjYwNC42MDQgMCAwMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMDEtLjI5NS0uNzM0LjYwOC42MDggMCAwMS44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMDEtLjUzMy4zMnptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwMS0uNTIyLS4yOThMNy4wMTIgNS4xNDRhLjYxNS42MTUgMCAwMS4xMTUtLjc4Mi42MDYuNjA2IDAgMDEuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN3ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwMS41NzUtLjYzNC42MDUuNjA1IDAgMDEuNDQzLjE2NC41OTMuNTkzIDAgMDEuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAxLS4xODYuNDMuNjA1LjYwNSAwIDAxLS40NDMuMTY1LjYyNC42MjQgMCAwMS0uNTc1LS42MzR6bTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMDEtLjM0My0uMTA3LjYxNy42MTcgMCAwMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMDEuOTExLS4xNTdjLjIyMy4yLjI3MS41MjguMTE1Ljc4MkwyMy4xMTcgNy45NmEuNjAzLjYwMyAwIDAxLS41MjIuMjk4em00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAxLS41MzQtLjMxOS42MTYuNjE2IDAgMDEuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAxLjc4My4xMTIuNTkyLjU5MiAwIDAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAxLS4zLjA4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNi41MzYgMTkuNjQ1bC0xLjIwNC0uMDA5Yy4wMjYtMy4zNzcgMi4xNDYtNi4zOTEgNS4zMzctNy41ODVhOC4zMDggOC4zMDggMCAwMTkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAwLTcuNzQ1LTEuODc2Yy0yLjcyNiAxLjAxOS00LjUzNyAzLjU5My00LjU1OSA2LjQ3OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNLjAyOSAyMC45MDljLjAyMi0zLjM1NCAyLjQ3NS02LjIwOCA1LjgxNS02Ljc2NGwuMjAxIDEuMTc2Yy0yLjc2NC40Ni00Ljc5NCAyLjgyLTQuODEyIDUuNTk2TC4wMjkgMjAuOTF6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguMjQ2IDI0LjczN2ExMC42MjUgMTAuNjI1IDAgMDEwLTE1LjEzMWM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAxMS4zODQgMS42NzhsLTEuMDA0LjY1N2E5LjUxNyA5LjUxNyAwIDAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDQyIDkuNDQyIDAgMDAwIDEzLjQ0NWwtLjg1MS44NDN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTUuODM2IDEzLjIzNGMuNDA0LTEuMzMyIDEuMzMtMi41NiAyLjQxLTMuNjI4IDQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMDExLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NzQgOS40NzQgMCAwMC0yLjA3NCAzLjA2Yy0xLjQ1MiAzLjQ1LTIuMzU4IDMuNTkzLTEuMTg3LS4yNzV6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIzLjUyNCAyNy44N0g2Ljk2YTcuMDEyIDcuMDEyIDAgMDEtNC45MjItMi4wNTlBNi44NzYgNi44NzYgMCAwMS4wMjkgMjAuOTFsMS4yMDQuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4aC0uMDYzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNLjA0NyAyMi45MDlsMS4xODYuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4SDYuOTZhNy4wMTIgNy4wMTIgMCAwMS00LjkyMi0yLjA2QTYuODc2IDYuODc2IDAgMDEuMDI5IDIyLjkxaC4wMTgtLjAxOGMuMDE3LTIuNzEgMS42Mi01LjA5MSAzLjk5Ny02LjIuMTE0LS4wNTQuMzIuMjkuNjE5IDEuMDNhNS43MSA1LjcxIDAgMDAtMy40MTIgNS4xOGwtMS4xODYtLjAxem00LjIxNS05Ljc4N2EuNjA0LjYwNCAwIDAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAxLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwMS0uNTMzLjMyem00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAxLjExNS0uNzgyLjYwNi42MDYgMCAwMS45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3em02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAxLjU3NS0uNjM0LjYwNS42MDUgMCAwMS40NDMuMTY0LjU5My41OTMgMCAwMS4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMDEtLjE4Ni40My42MDUuNjA1IDAgMDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAxLS41NzUtLjYzNHptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwMS45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMDEtLjUyMi4yOTh6bTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwMS4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMDEuNzgzLjExMi41OTIuNTkyIDAgMDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMDEtLjMuMDh6TTE2LjM2NiAxOS43OEgxNmEyLjMyMiAyLjMyMiAwIDAxLS4zMDIgMGMtLjA5LS4wMTEtLjE1Mi4wNS0uMDg2LS4xOTZhOC4yMDQgOC4yMDQgMCAwMTUuMDU3LTUuNTMzIDguMzA4IDguMzA4IDAgMDE5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwMC03Ljc0NS0xLjg3NiA3LjAwOSA3LjAwOSAwIDAwLTQuMjg4IDQuNjEzYy0uMTE1LjM5OS0uMTE1LjM5OSAwIDBoLS40NHpNNi4xNTQgMjMuODI2YTEwLjYyNiAxMC42MjYgMCAwMTIuMDkyLTEyLjIyYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwbC0uODUxLjg0M2MtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMEE5LjQ0MiA5LjQ0MiAwIDAwNy4yNjQgMjMuMzZhNi45OSA2Ljk5IDAgMDAtLjQxOC4xNzJsLS4yMTIuMDk0LS4xNjIuMDc3LS4wOTQuMDMtLjA5LjAzOWMuNjQ4LS4yODIuOTY1LS40Mi45NS0uNDEyLS4wMjYuMDE1LTEuMDczLjQ4OS0xLjA4NC40NjZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm1Nb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2Fma2EgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0thZmthKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNTY1IDE3LjYyM2MtMS4xNzMgMC0yLjIyNS41Mi0yLjk0NSAxLjMzN2wtMS44NDUtMS4zMDZjLjE5Ni0uNTQuMzA5LTEuMTE4LjMwOS0xLjcyNCAwLS41OTYtLjEwOS0xLjE2NS0uMjk4LTEuNjk2bDEuODQtMS4yOTNhMy45MTQgMy45MTQgMCAwMDIuOTM5IDEuMzMxIDMuOTMgMy45MyAwIDAwMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYgMy45MjZjMCAuMzg3LjA1OC43NjEuMTYzIDEuMTE1bC0xLjg0MiAxLjI5M2E1LjA2OCA1LjA2OCAwIDAwLTMuMTQtMS44MjVWOC43MWEzLjkzMiAzLjkzMiAwIDAwMy4xMTktMy44NDJBMy45MyAzLjkzIDAgMDAxMi4wMTIuOTQxYTMuOTMgMy45MyAwIDAwLTMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAwMy4wNDggMy44MjR2Mi4yNDlhNS4wNzUgNS4wNzUgMCAwMC00LjE5MyA0Ljk5IDUuMDc1IDUuMDc1IDAgMDA0LjIyOSA0Ljk5NVYyMy4zYTMuOTMxIDMuOTMxIDAgMDAtMy4wODQgMy44MzMgMy45MyAzLjkzIDAgMDAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwMDMuOTI3LTMuOTI2IDMuOTMxIDMuOTMxIDAgMDAtMy4wODQtMy44MzN2LTIuMzc1YTUuMDcgNS4wNyAwIDAwMy4wODctMS43OTVsMS44NTcgMS4zMTRjLS4xMDMuMzUxLS4xNi43MjEtLjE2IDEuMTA1YTMuOTMgMy45MyAwIDAwMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMDAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNi0zLjkyNnptMC05LjE4YzEuMDUgMCAxLjkwMy44NTMgMS45MDMgMS45MDNzLS44NTQgMS45MDMtMS45MDMgMS45MDNhMS45MDYgMS45MDYgMCAwMS0xLjkwNC0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTA0LTEuOTA0ek0xMC4xMDkgNC44NjZjMC0xLjA1Ljg1NC0xLjkwMyAxLjkwMy0xLjkwMyAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTAzIDAgMS4wNS0uODU0IDEuOTA0LTEuOTA0IDEuOTA0YTEuOTA2IDEuOTA2IDAgMDEtMS45MDMtMS45MDR6bTMuODA3IDIyLjI2NmMwIDEuMDUtLjg1NCAxLjkwMy0xLjkwNCAxLjkwM2ExLjkwNiAxLjkwNiAwIDAxLTEuOTAzLTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDMtMS45MDQgMS4wNSAwIDEuOTA0Ljg1NCAxLjkwNCAxLjkwNHptLTEuOTA0LTguNTQ4YTIuNjU4IDIuNjU4IDAgMDEtMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwMTIuNjU1LTIuNjU1IDIuNjU4IDIuNjU4IDAgMDEyLjY1NSAyLjY1NSAyLjY1OCAyLjY1OCAwIDAxLTIuNjU1IDIuNjU1em05LjU1MyA0Ljg2N2ExLjkwNiAxLjkwNiAwIDAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDQgMS4wNSAwIDEuOTAzLjg1NCAxLjkwMyAxLjkwNCAwIDEuMDUtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0thZmthOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2liYW5hID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LaWJhbmEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTQgMHYyOC43ODlMMjguOTM1LjAxN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk00IDEydjE2Ljc4OWwxMS45MDYtMTMuNzM4QTI0LjcyMSAyNC43MjEgMCAwMDQgMTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE4LjQ3OSAxNi42NjRMNi4yNjggMzAuNzU0bC0xLjA3MyAxLjIzN2gyMy4xOTFjLTEuMjUyLTYuMjkyLTQuODgzLTExLjcxOS05LjkwOC0xNS4zMjdcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LaWJhbmE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LdWJlcm5ldGVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LdWJlcm5ldGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODkuMDAzYTIuMTQgMi4xNCAwIDAxMS4wMy4yMDZsMTEuMTI3IDUuMzA0YTIuMTEgMi4xMSAwIDAxMS4xNSAxLjQyOWwyLjc1IDExLjkyMWEyLjA5IDIuMDkgMCAwMS0uNDEyIDEuNzgzbC03LjY5NyA5LjU2Yy0uNDA0LjUtMS4wMTYuNzkyLTEuNjYzLjc5MUw5LjgyNyAzMWMtLjY0OCAwLTEuMjYtLjI5Mi0xLjY2NC0uNzkzbC03LjctOS41NThhMi4xMDcgMi4xMDcgMCAwMS0uNDEtMS43ODNMMi43OTggNi45NDVhMi4xMSAyLjExIDAgMDExLjE1MS0xLjQzTDE1LjA3NC4yMWMuMjU1LS4xMjIuNTMyLS4xOTIuODE1LS4yMDZ6TTE2IDQuMDZjLS4zNjggMC0uNjY3LjMzLS42NjcuNzM4bC4wMDIuMDE5YzAgLjA1NS0uMDAzLjEyMi0uMDAyLjE3LjAxLjIzNi4wNi40MTYuMDkxLjYzMi4wNTcuNDY0LjEwMy44NDkuMDc0IDEuMjA2LS4wMjguMTM1LS4xMjcuMjU4LS4yMTYuMzQ0bC0uMDE1LjI4MWE4LjU2OSA4LjU2OSAwIDAwLTUuNTU1IDIuNjY2IDkuOTggOS45OCAwIDAxLS4yNC0uMTdjLS4xMi4wMTYtLjI0LjA1My0uMzk2LS4wMzgtLjI5OC0uMi0uNTctLjQ3Ny0uODk4LS44MS0uMTUtLjE2LS4yNi0uMzEtLjQzOC0uNDY0LS4wNC0uMDM1LS4xMDMtLjA4Mi0uMTQ4LS4xMThhLjc5My43OTMgMCAwMC0uNDY0LS4xNzUuNjQyLjY0MiAwIDAwLS41My4yMzRjLS4yMy4yODgtLjE1Ni43MjYuMTYzLjk4bC4wMS4wMDhjLjA0NC4wMzUuMDk4LjA4LjEzOC4xMS4xOS4xNC4zNjMuMjEyLjU1Mi4zMjMuMzk4LjI0Ni43MjkuNDUuOTkuNjk1LjEwMy4xMDguMTIuMy4xMzQuMzgzbC4yMTQuMTlhOC41OTIgOC41OTIgMCAwMC0xLjM2IDUuOTk4bC0uMjc4LjA4Yy0uMDc0LjA5Ni0uMTc3LjI0NS0uMjg2LjI5LS4zNDMuMTA3LS43MjguMTQ3LTEuMTk0LjE5NS0uMjE4LjAxOC0uNDA3LjAwOC0uNjM5LjA1MS0uMDUuMDEtLjEyMi4wMjktLjE3Ny4wNDJsLS4wMDYuMDAxLS4wMS4wMDNjLS4zOTMuMDk1LS42NDUuNDU1LS41NjQuODEuMDgyLjM1NS40NjUuNTcuODYuNDg1bC4wMS0uMDAxLjAxMy0uMDA0Yy4wNTUtLjAxMi4xMjQtLjAyNi4xNzItLjAzOS4yMjgtLjA2LjM5My0uMTUuNTk3LS4yMjguNDQtLjE1OC44MDYtLjI5IDEuMTYxLS4zNDEuMTQ5LS4wMTIuMzA1LjA5MS4zODMuMTM1bC4yOS0uMDVhOC42NTQgOC42NTQgMCAwMDMuODQgNC43ODdsLS4xMi4yOWMuMDQzLjExMy4wOTEuMjY1LjA1OS4zNzYtLjEzLjMzNC0uMzUuNjg4LS42MDMgMS4wODEtLjEyMi4xODItLjI0Ny4zMjQtLjM1Ny41MzItLjAyNi4wNS0uMDYuMTI2LS4wODYuMTc5LS4xNy4zNjUtLjA0NS43ODYuMjg0Ljk0NC4zMy4xNi43NDEtLjAwOC45MTktLjM3NWwuMDAxLS4wMDF2LS4wMDJjLjAyNS0uMDUxLjA2MS0uMTIuMDgzLS4xNjkuMDk0LS4yMTUuMTI1LS40LjE5Mi0uNjA5LjE3Ni0uNDQyLjI3My0uOTA1LjUxNS0xLjE5NC4wNjctLjA4LjE3NS0uMTEuMjg3LS4xNGwuMTUxLS4yNzNhOC42MTYgOC42MTYgMCAwMDYuMTQ1LjAxNmwuMTQyLjI1NmMuMTE0LjAzNy4yMzkuMDU2LjM0LjIwNi4xODIuMzEuMzA2LjY3NS40NTcgMS4xMTguMDY2LjIwOC4xLjM5My4xOTQuNjEuMDIxLjA0OC4wNTcuMTE3LjA4Mi4xNy4xNzcuMzY3LjU5LjUzNS45Mi4zNzYuMzMtLjE1OC40NTUtLjU4LjI4NC0uOTQ1LS4wMjYtLjA1Mi0uMDYtLjEyOS0uMDg3LS4xNzktLjExLS4yMDgtLjIzNS0uMzQ4LS4zNTctLjUzLS4yNTItLjM5My0uNDYxLS43Mi0uNTktMS4wNTUtLjA1NS0uMTczLjAwOS0uMjguMDUtLjM5Mi0uMDI1LS4wMjktLjA3OS0uMTkyLS4xMS0uMjY4YTguNjU0IDguNjU0IDAgMDAzLjgzOC00LjgyMmMuMDg2LjAxNC4yMzYuMDQuMjg1LjA1LjEtLjA2Ni4xOTItLjE1Mi4zNzMtLjEzOC4zNTUuMDUyLjcyLjE4MyAxLjE2LjM0MS4yMDUuMDc4LjM3LjE3LjU5OC4yMy4wNDguMDEzLjExNy4wMjUuMTcyLjAzN2wuMDEzLjAwNC4wMS4wMDJjLjM5NS4wODUuNzc4LS4xMzEuODYtLjQ4Ni4wOC0uMzU1LS4xNzEtLjcxNS0uNTY0LS44MS0uMDU3LS4wMTMtLjEzOC0uMDM1LS4xOTMtLjA0NS0uMjMyLS4wNDQtLjQyLS4wMzMtLjY0LS4wNTEtLjQ2NS0uMDQ5LS44NS0uMDg5LTEuMTkzLS4xOTYtLjE0LS4wNTQtLjIzOS0uMjItLjI4Ny0uMjg5bC0uMjctLjA3OGE4LjU3MiA4LjU3MiAwIDAwLS4xMzktMy4xMDQgOC41OTkgOC41OTkgMCAwMC0xLjI0Ny0yLjg4Yy4wNjgtLjA2Mi4xOTktLjE3Ny4yMzYtLjIxLjAxLS4xMi4wMDEtLjI0NS4xMjUtLjM3Ny4yNjItLjI0Ni41OTItLjQ1Ljk5LS42OTUuMTktLjExLjM2NC0uMTgyLjU1NC0uMzIyLjA0My0uMDMyLjEwMS0uMDgyLjE0Ni0uMTE4LjMyLS4yNTUuMzkzLS42OTMuMTY0LS45OC0uMjMtLjI4Ny0uNjc0LS4zMTQtLjk5My0uMDYtLjA0Ni4wMzYtLjEwNy4wODMtLjE0OC4xMTgtLjE3OS4xNTMtLjI5LjMwNS0uNDQuNDY0LS4zMjguMzMzLS42LjYxMS0uODk4LjgxMi0uMTI5LjA3NS0uMzE4LjA0OS0uNDA0LjA0NGwtLjI1My4xOGE4LjczMiA4LjczMiAwIDAwLTUuNTI4LTIuNjY2IDE2LjAzNiAxNi4wMzYgMCAwMS0uMDE1LS4yOTdjLS4wODctLjA4My0uMTkyLS4xNTQtLjIxOC0uMzMzLS4wMjktLjM1Ny4wMi0uNzQyLjA3Ni0xLjIwNi4wMy0uMjE2LjA4Mi0uMzk2LjA5LS42MzIuMDAzLS4wNTMgMC0uMTMgMC0uMTg5IDAtLjQwOC0uMjk5LS43MzgtLjY2Ny0uNzM4em0tLjgzNCA1LjE1NmwtLjE5OCAzLjQ4OC0uMDE0LjAwN2EuNTg3LjU4NyAwIDAxLS45MzIuNDQ5bC0uMDA2LjAwMi0yLjg2NC0yLjAyN2E2Ljg2MiA2Ljg2MiAwIDAxNC4wMTQtMS45MTl6bTEuNjY4IDBhNi45MjIgNi45MjIgMCAwMTMuOTkgMS45MmwtMi44NDYgMi4wMTUtLjAxLS4wMDRhLjU4OC41ODggMCAwMS0uOTMzLS40NDhsLS4wMDMtLjAwMS0uMTk4LTMuNDgyem0tNi43MiAzLjIyMmwyLjYxNCAyLjMzNS0uMDAzLjAxNGEuNTg1LjU4NSAwIDAxLS4yMyAxLjAwOGwtLjAwMy4wMS0zLjM1Mi45NjdhNi44MzggNi44MzggMCAwMS45NzMtNC4zMzR6bTExLjc1My4wMDFjLjM4OC42My42ODMgMS4zMzEuODU4IDIuMDkzYTYuOTEgNi45MSAwIDAxLjE0NSAyLjIyOWwtMy4zNy0uOTctLjAwMi0uMDEzYS41ODYuNTg2IDAgMDEtLjIzLTEuMDA4bC0uMDAyLS4wMDcgMi42LTIuMzI0em0tNi40MDQgMi41MTVoMS4wNzFsLjY2Ni44My0uMjM5IDEuMDM4LS45NjIuNDYxLS45NjQtLjQ2My0uMjQtMS4wMzcuNjY4LS44M3ptMy40MzUgMi44NDRhLjU4NS41ODUgMCAwMS4xMzUuMDFsLjAwNS0uMDA4IDMuNDY4LjU4NmE2Ljg1OCA2Ljg1OCAwIDAxLTIuNzc2IDMuNDgxbC0xLjM0Ni0zLjI0Ni4wMDQtLjAwNWEuNTg2LjU4NiAwIDAxLjUxLS44MTh6bS01LjgyNC4wMTRhLjU4Ny41ODcgMCAwMS41My44MTdsLjAxLjAxMi0xLjMzMSAzLjIxNGE2Ljg4NiA2Ljg4NiAwIDAxLTIuNzY3LTMuNDU4bDMuNDM3LS41ODIuMDA2LjAwN2EuNTk1LjU5NSAwIDAxLjExNS0uMDF6bTIuOTA0IDEuNDA3YS41ODIuNTgyIDAgMDEuMjc1LjA1OS41ODMuNTgzIDAgMDEuMjYzLjI1aC4wMTNsMS42OTQgMy4wNTdjLS4yMi4wNzMtLjQ0Ni4xMzYtLjY3Ny4xODlhNi44OTYgNi44OTYgMCAwMS0zLjc1OC0uMTk0bDEuNjktMy4wNWguMDAzYS41ODguNTg4IDAgMDEuNDk3LS4zMXpcIixcbiAgICBmaWxsOiBcIiMzMjZDRTVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0t1YmVybmV0ZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Mb2dnaW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dnaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMiAxMHYxM2E5IDkgMCAwMTkgOWgxM2MwLTEyLjE1LTkuODUtMjItMjItMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNCAxMy41NjVWMzJoMTBjMC03LjcyMi0zLjk4MS0xNC41MS0xMC0xOC40MzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE0IDB2MTAuMjI2QzIxLjY2NiAxNC40NjggMjYuODY5IDIyLjYzNiAyNi44NjkgMzJIMzBWMTZjMC04LjgzNy03LjE2My0xNi0xNi0xNlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nZ2luZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0xvZ3N0YXNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dzdGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDMyaDExVjIwSDE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNNCAwSDN2MjBoMTN2LThDMTYgNS4zNzMgMTAuNjI3IDAgNCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMyAyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDFWMjBIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ3N0YXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWFwcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWFwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjUgOS41YzAgNi42NS05LjUgMTEuNDI1LTkuNSAxMS40MjVTNi41IDE2LjE1IDYuNSA5LjVBOS41IDkuNSAwIDAxMTYgMGE5LjUgOS41IDAgMDE5LjUgOS41XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYgMjAuOTI1czQuMzI2LTIuMTgzIDcuMTQxLTUuNjQ1bC0yLjUwNS0xLjg3OGE3LjcyNSA3LjcyNSAwIDAwLTkuMjcyIDBMOC44NTkgMTUuMjhDMTEuNjc0IDE4Ljc0MiAxNiAyMC45MjUgMTYgMjAuOTI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yNS41MyAxNy4wNzNhMjEuMTI0IDIxLjEyNCAwIDAxLTIuODM0IDIuOTE2Yy0yLjYyIDIuMjM1LTUuMjM5IDMuNTYxLTUuMzQ5IDMuNjE2TDE2IDI0LjI4MmwtMS4zNDgtLjY3N2MtLjEwOS0uMDU1LTIuNzI4LTEuMzgxLTUuMzQ5LTMuNjE2YTIxLjE4MiAyMS4xODIgMCAwMS0yLjgzNC0yLjkxNkwwIDIxLjkyNWwxMS4zNjQgOC41MjNhNy43MjQgNy43MjQgMCAwMDkuMjcxIDBMMzIgMjEuOTI1bC02LjQ3LTQuODUyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWFwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01lbWNhY2hlZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWVtY2FjaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX21lbWNhY2hlZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGN4OiBcIjQxLjQwNiVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQxLjQwNiVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgY3g6IFwiNDQuMjcxJVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDQuMjcxJVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI1MCVcIixcbiAgICB4MjogXCI1MCVcIixcbiAgICB5MTogXCIxMDAlXCIsXG4gICAgeTI6IFwiMCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1NzRDNEFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM4MDcxNkRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCI4OC43NzglXCIsXG4gICAgeDI6IFwiMzAuMTQ5JVwiLFxuICAgIHkxOiBcIjk4LjM0MiVcIixcbiAgICB5MjogXCItOC42OCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyNjhEODNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyRUExOUVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMCAyMS41NjdWMTAuMzUyQzAgMS4yOTQgMS4yOTMgMCAxMC4zNDIgMGgxMS4yMzZjOS4wNDkgMCAxMC4zNDEgMS4yOTQgMTAuMzQxIDEwLjM1MnYxMS4yMTVjMCA5LjA1OS0xLjI5MiAxMC4zNTItMTAuMzQxIDEwLjM1MkgxMC4zNDJDMS4yOTIgMzEuOTIgMCAzMC42MjYgMCAyMS41Njd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3aDQuOTA0Yy0uNDY2LTIuNDgzLTIuMTQtMTMuODI0LS43NDgtMTMuODYxLjc0Ni4xMTggNC4xNTYgOS42MjEgNC4xNTYgOS42MjFzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy40MS05LjUwMyA0LjE1Ny05LjYyMWMxLjM5Mi4wMzctLjI4MiAxMS4zNzgtLjc0OCAxMy44Nmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1M2gtNC41NGMtLjg2NS4wMS00LjE1MyA1Ljc3Ny00LjUzMSA1Ljc3Ny0uMzc4IDAtMy42NjYtNS43NjctNC41My01Ljc3N0g2Ljg4OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNMTQuOTkzIDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMTkuMjQ5IDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTI0LjggNi4zNDVjLjcwNyA0Ljc5Ljg3MyA5LjM4OC44NiAxMi44MTMtLjAxMyAzLjUwMy0uMjE0IDUuNzgtLjIxNCA1Ljc4aC00LjEyOGwtLjQ0My4zMzJoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTRsLS4yMzIuMzI5em0tMTIuOTk2LS4xMjFjMS4yODggMS40MzMgMy41MTYgNS4yMzcgMy44MjMgNS4yMzctLjgxNy0xLjA0NS0yLjgyMy00LjM3OC0zLjgyMy01LjIzN3ptLTEuODQgNC44NTJjLTEuMzkyLjAzOC4yODIgMTEuMzc5Ljc0OSAxMy44NjFINi40M2wtLjI5LjMzM2g0LjkwNGMtLjQ2NC0yLjQ3LTIuMTIzLTEzLjcxLS43NjktMTMuODYxLS4xMjYtLjE5LS4yMzUtLjMyLS4zMTEtLjMzM3ptMTEuMzI2IDBjLS43NDYuMTE5LTQuMTU2IDkuNjIyLTQuMTU2IDkuNjIycy0uNzUxLS4wOTQtMS41MDctLjA5NGMtLjQ0NyAwLS44MzIuMDI4LTEuMDkyLjA1MmwtLjA4Mi4zNzRzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy4zODUtOS40NCA0LjE0Ni05LjYyMWMtLjA4Mi0uMjA4LS4xODMtLjMzLS4zMjItLjMzM3pcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2wuMjg5LS4zMjVjLS4xNDgtMi4xOTctLjU0My0xMC4xNC43OTEtMTguNTk3aDQuNTQxYy4wOTYuMDAyLjIyNS4wOC4zNzQuMjA4LS4yOTctLjMzLS41NDQtLjUzOC0uNzA2LS41NEg2Ljg4OXptMTMuNjAxIDBjLS44NjQuMDEtNC4xNTIgNS43NzctNC41MyA1Ljc3Ny4xNTQuMTk3LjI3OS4zMzMuMzMyLjMzMy4zNzggMCAzLjY2Ni01Ljc2NyA0LjUzLTUuNzc3aDQuMDA4bC4yLS4zMzNoLTQuNTR6bS05Ljg4MSA1LjcyNWMxLjEwMyAxLjY1NyAzLjg0NCA5LjI5IDMuODQ0IDkuMjlsLjA4LS4zNzNjLS42NzYtMS44NTYtMy4yNTYtOC44MTQtMy45MDMtOC45MTdoLS4wMjF6bTExLjM0NiAwYy43NCAxLjg4Ny0uNjYgMTEuMjk1LTEuMDggMTMuNTI5bC40NDQtLjM0OGMuNTY4LTMuMzMxIDEuOTM2LTEzLjE0Ni42MzYtMTMuMTh6XCIsXG4gICAgb3BhY2l0eTogMC4zXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01lbWNhY2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzJoMjhWMjBsLTYuNDY1LTYuNDY1YTUgNSAwIDAwLTcuMDcgMEwyIDI4djR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYuNDY1IDEzLjUzNWwtMy41MzYgMy41MzZhOS45NjUgOS45NjUgMCAwMDcuMDcgMi45MyA5Ljk2NSA5Ljk2NSAwIDAwNy4wNzItMi45M2wtMy41MzYtMy41MzZhNSA1IDAgMDAtNy4wNyAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0xNC4zNDMgMTEuNDE0QTcuOTUxIDcuOTUxIDAgMDEyMCA5LjA3MWMyLjEzNyAwIDQuMTQ2LjgzMiA1LjY1NyAyLjM0M2wzLjIwNyAzLjIwN0E5Ljk1NSA5Ljk1NSAwIDAwMzAgMTAuMDAxYzAtNS41MjQtNC40NzctMTAtMTAtMTAtNS41MjIgMC0xMCA0LjQ3Ni0xMCAxMCAwIDEuNjY3LjQxNCAzLjIzNyAxLjEzNyA0LjYybDMuMjA2LTMuMjA3elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Nb25nb2RiID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Nb25nb2RiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE2Ljg0NCAzMS44NDdsLS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNkEzODVcIixcbiAgICBkOiBcIk0xNi44NDQgMzEuODQ3bC0uODQ3LS4yOXMuMTA0LTQuMzE1LTEuNDQ1LTQuNjI1Yy0xLjAzMi0xLjE5OC4xNjUtNTAuOCAzLjg4Mi0uMTY1IDAgMC0xLjI4LjY0LTEuNTA3IDEuNzM1LS4yNDggMS4wNzQtLjA4MyAzLjM0NS0uMDgzIDMuMzQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0OTlENEFcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM1OEFBNTBcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01vbmdvZGI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29NeXNxbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTXlzcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiMwMDU0NkJcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuNDU2IDI0LjI3NmMtMS43NC0uMDQzLTMuMDg4LjEzMS00LjIxOS42MS0uMzI2LjEzLS44NDguMTMtLjg5Mi41NDMuMTc0LjE3NC4xOTYuNDU3LjM0OC42OTYuMjYxLjQzNS43MTggMS4wMjIgMS4xMzEgMS4zMjcuNDU3LjM0OC45MTQuNjk2IDEuMzkyIDEgLjg0OC41MjIgMS44MDUuODI3IDIuNjMxIDEuMzQ5LjQ4LjMwNC45NTcuNjk1IDEuNDM2IDEuMDIyLjI0LjE3My4zOTEuNDU2LjY5Ni41NjV2LS4wNjVjLS4xNTMtLjE5Ni0uMTk2LS40NzktLjM0OC0uNjk2LS4yMTgtLjIxOC0uNDM1LS40MTMtLjY1My0uNjNhMTAuMzE2IDEwLjMxNiAwIDAwLTIuMjYxLTIuMTk3Yy0uNjk2LS40NzktMi4yMTktMS4xMzEtMi41MDEtMS45MzZsLS4wNDQtLjA0M2MuNDc5LS4wNDQgMS4wNDQtLjIxOCAxLjUtLjM0OC43NC0uMTk2IDEuNDE0LS4xNTMgMi4xNzUtLjM0OC4zNDgtLjA4Ny42OTYtLjE5NiAxLjA0NC0uMzA1di0uMTk1Yy0uMzkxLS4zOTItLjY3NC0uOTE0LTEuMDg3LTEuMjg0LTEuMTEtLjk1Ny0yLjMyNy0xLjg5Mi0zLjU4OC0yLjY3NC0uNjc1LS40MzUtMS41NDUtLjcxOC0yLjI2Mi0xLjA4OC0uMjYxLS4xMy0uNjk2LS4xOTYtLjg0OC0uNDEzLS4zOTItLjQ3OS0uNjEtMS4xMS0uODkyLTEuNjc1YTU0LjkyMiA1NC45MjIgMCAwMS0xLjc4My0zLjc4NGMtLjM5Mi0uODQ4LS42My0xLjY5Ni0xLjExLTIuNDc5LTIuMjQtMy42OTctNC42NzUtNS45MzctOC40MTYtOC4xMzQtLjgwNC0uNDU2LTEuNzYxLS42NTItMi43ODMtLjg5MS0uNTQ0LS4wMjItMS4wODgtLjA2NS0xLjYzMS0uMDg3LS4zNDgtLjE1Mi0uNjk2LS41NjYtMS0uNzYxLTEuMjQtLjc4My00LjQzNy0yLjQ4LTUuMzUtLjI0LS41ODggMS40MTQuODcgMi44MDYgMS4zNyAzLjUyNC4zNy41Ljg0OCAxLjA2NSAxLjEwOSAxLjYzLjE1Mi4zNy4xOTUuNzYyLjM0NyAxLjE1My4zNDguOTU3LjY3NSAyLjAyMyAxLjEzMSAyLjkxNC4yNC40NTcuNS45MzYuODA1IDEuMzQ5LjE3NC4yMzkuNDc4LjM0OC41NDQuNzQtLjMwNS40MzQtLjMyNyAxLjA4Ny0uNSAxLjYzLS43ODMgMi40NTgtLjQ3OSA1LjUwMi42MyA3LjMwNy4zNDguNTQ0IDEuMTc1IDEuNzQgMi4yODQgMS4yODQuOTc4LS4zOTIuNzYtMS42MzIgMS4wNDMtMi43MTkuMDY2LS4yNjEuMDIyLS40MzUuMTUzLS42MDl2LjA0NGMuMzA0LjYwOS42MDkgMS4xOTYuODkxIDEuODA1LjY3NSAxLjA2NSAxLjg0OSAyLjE3NCAyLjgyOCAyLjkxNC41MjIuMzkxLjkzNSAxLjA2NSAxLjU4NyAxLjMwNXYtLjA2NmgtLjA0M2MtLjEzLS4xOTUtLjMyNy0uMjgyLS41LS40MzUtLjM5Mi0uMzktLjgyNy0uODctMS4xMzEtMS4zMDQtLjkxNC0xLjIxOC0xLjcxOS0yLjU2Ny0yLjQzNi0zLjk1OC0uMzQ4LS42NzUtLjY1My0xLjQxNC0uOTM1LTIuMDg4LS4xMy0uMjYxLS4xMy0uNjUzLS4zNDgtLjc4My0uMzI3LjQ3OC0uODA1Ljg5Mi0xLjA0NCAxLjQ3OS0uNDEzLjkzNS0uNDU3IDIuMDg4LS42MSAzLjI4NC0uMDg2LjAyMS0uMDQzIDAtLjA4Ni4wNDMtLjY5Ni0uMTc0LS45MzUtLjg5MS0xLjE5Ni0xLjUtLjY1My0xLjU0NS0uNzYxLTQuMDI0LS4xOTYtNS44MDcuMTUyLS40NTcuODA1LTEuODkyLjU0NC0yLjMyNy0uMTMtLjQxMy0uNTY2LS42NTItLjgwNS0uOTc5YTguNzY0IDguNzY0IDAgMDEtLjc4My0xLjM5MmMtLjUyMi0xLjIxNy0uNzgzLTIuNTY2LTEuMzQ4LTMuNzg0LS4yNjEtLjU2NS0uNzE4LTEuMTUyLTEuMDg3LTEuNjc0LS40MTQtLjU4Ny0uODctMS0xLjE5Ny0xLjY5Ny0uMTA4LS4yMzktLjI2LS42My0uMDg3LS44OTEuMDQ0LS4xNzQuMTMtLjI0LjMwNS0uMjgzLjI4My0uMjQgMS4wODcuMDY1IDEuMzcuMTk2LjgwNS4zMjYgMS40NzkuNjMgMi4xNTMgMS4wODcuMzA0LjIxOC42My42MzEgMS4wMjIuNzRoLjQ1N2MuNjk2LjE1MiAxLjQ3OS4wNDMgMi4xMzEuMjM5IDEuMTUzLjM3IDIuMTk2LjkxMyAzLjEzMiAxLjVhMTkuMjk0IDE5LjI5NCAwIDAxNi43ODUgNy40MzhjLjI2MS41LjM3Ljk1Ny42MDkgMS40NzkuNDU3IDEuMDY2IDEuMDIyIDIuMTUzIDEuNDc5IDMuMTk3LjQ1NiAxLjAyMi44OTEgMi4wNjYgMS41NDQgMi45MTQuMzI2LjQ1NyAxLjYzLjY5NiAyLjIxOC45MzUuNDM1LjE5NiAxLjExLjM3IDEuNS42MS43NC40NTYgMS40OC45NzggMi4xNzUgMS40NzguMzQ4LjI2IDEuNDM2LjgwNSAxLjUwMSAxLjI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzMgNS4zNzhjLS4zNyAwLS42My4wNDMtLjg5MS4xMDl2LjA0M2guMDQzYy4xNzQuMzQ4LjQ3OS41ODcuNjk2Ljg5Mi4xNzQuMzQ4LjMyNi42OTYuNSAxLjA0NGwuMDQ0LS4wNDRjLjMwNC0uMjE3LjQ1Ny0uNTY1LjQ1Ny0xLjA4Ny0uMTMxLS4xNTItLjE1My0uMzA1LS4yNjEtLjQ1Ny0uMTMtLjIxOC0uNDE0LS4zMjYtLjU4OC0uNXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NeXNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb05naW54ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29OZ2lueChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTE5NjM5XCIsXG4gICAgZDogXCJNMTYgMGwxMy44NTYgOHYxNkwxNiAzMiAyLjE0NCAyNFY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjE3IDEzLjUxMnY4LjM3NmExLjYwNyAxLjYwNyAwIDExLTMuMjE1IDBWOS42MzJjMC0xLjQzMiAxLjczMS0yLjE0OSAyLjc0NC0xLjEzNmw5LjUxIDkuNTEyVjkuNjMyYTEuNjA3IDEuNjA3IDAgMDEzLjIxNSAwdjEyLjI1NmMwIDEuNDMyLTEuNzMxIDIuMTQ5LTIuNzQ0IDEuMTM2bC05LjUxLTkuNTEyelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb05naW54OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDMySDcuMjM4QzMuNzkzIDMyIDEgMjguODY1IDEgMjQuOTk4VjE1aDl2MTd6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTAgMzJoOVY4aC05elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEgMzJoLTlWMGwxLjk3My4wMjRDMjcuODY2LjA3MiAzMSAzLjczMSAzMSA4LjIyOFYzMnpcIixcbiAgICBmaWxsOiBcIiMwN0NcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09ic2VydmFiaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Pc3F1ZXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Pc3F1ZXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkwNy4wMzJ2Ny45NjlsLTcuOTUyIDcuOTUxVjcuOTY3TDMxLjkwNy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwMy4wMzJ2Ny45NjlsNy45NTIgNy45NTFWNy45NjdMMTYuMDAzLjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTIzIDMxLjg1NWgtNy45NjhsLTcuOTUyLTcuOTUxaDcuOTg1bDcuOTM1IDcuOTUxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0zMS45MjMgMTUuOTUyaC03Ljk2OGwtNy45NTIgNy45NTJoNy45ODVsNy45MzUtNy45NTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4xIDMxLjg3MnYtNy45NjhsNy45NTItNy45NTJ2Ny45ODVMLjEgMzEuODcyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDQgMzEuODcydi03Ljk2OGwtNy45NTItNy45NTJ2Ny45ODVsNy45NTIgNy45MzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4wODQuMDQ4aDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQuMDQ4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0uMDg0IDE1Ljk1Mmg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0IDE1Ljk1MlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09zcXVlcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29QaHAgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1BocChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19waHAnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGN4OiBcIjMwLjAyJVwiLFxuICAgIGN5OiBcIjgyLjQyMiVcIixcbiAgICByOiBcIjEyNC44MTQlXCIsXG4gICAgZng6IFwiMzAuMDIlXCIsXG4gICAgZnk6IFwiODIuNDIyJVwiLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBcIm1hdHJpeCguNTI2MDQgMCAwIDEgLjE0MiAwKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMSAwIDAgLTEgLjAyNiAyNS40MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjU5MiAuODYpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc3N0JCM1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xNS40OTQgMS40NzJjNy44OTQgMCAxNC4yOTMgMy4yNDMgMTQuMjkzIDcuMjQzcy02LjQgNy4yNDQtMTQuMjkzIDcuMjQ0Yy03Ljg5NCAwLTE0LjI5My0zLjI0My0xNC4yOTMtNy4yNDQgMC00IDYuNC03LjI0MyAxNC4yOTMtNy4yNDNcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTguNzAxIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZIOC40MzNsLS41NzUtMi45NTloLjg0M3pNNS4zMSA0LjE3MmEuMTYxLjE2MSAwIDAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4NiAzLjY4NiAwIDAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwMC0uMTU4LS4xM0g1LjMwOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTguNTY2IDEwLjYxNWguOTA1Yy43MjIgMCAuOTcyLS4xNTggMS4wNTgtLjI1My4xNDEtLjE1Ny4xNjgtLjQ4Ny4wNzctLjk1Ni0uMTAyLS41MjQtLjI5MS0uODk2LS41NjMtMS4xMDUtLjI3Ny0uMjE0LS43MjktLjMyMi0xLjM0MS0uMzIyaC0uNjQ4bC41MTIgMi42MzZ6bTEuNTUxIDEuODgzSDYuODMzYS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxTDQuOTkyIDQuMzk2YS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODh6TTcuNjYzIDcuNjU2aDEuMDM5Yy42ODggMCAxLjIwMS4xMyAxLjUzOC4zOS4zMzcuMjU5LjU2NS42OTIuNjgzIDEuMjk5LjExMy41ODMuMDYxLjk5NC0uMTU1IDEuMjMzLS4yMTYuMjQtLjY0OC4zNi0xLjI5Ny4zNkg4LjNsLS42MzgtMy4yODJ6bTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDUzLS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNINy40MjJsLS40MDUtMi4wODVINS4zMDlsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xNi43NjMgNi4yNTdhLjE2MS4xNjEgMCAwMC0uMTU5LjE5MmwuNjc0IDMuNDdjLjA2NC4zMy4wNDkuNTY2LS4wNDQuNjY2LS4wNTcuMDYxLS4yMjguMTY0LS43MzIuMTY0SDE1LjI4bC0uODQ3LTQuMzYxYS4xNjEuMTYxIDAgMDAtLjE1OS0uMTMxSDEyLjU4YS4xNjEuMTYxIDAgMDAtLjE1OS4xOTJsMS41MjQgNy44NDFjLjAxNS4wNzYuMDgyLjEzLjE1OS4xM2gxLjY5NGEuMTYxLjE2MSAwIDAwLjE1OS0uMTkxbC0uMzY4LTEuODkzaDEuMzE0YzEgMCAxLjY4LS4xNzYgMi4wNzUtLjU0LjQwMy0uMzcuNTI5LS45NjIuMzc0LTEuNzZsLS43MS0zLjY0OGEuMTYxLjE2MSAwIDAwLS4xNTgtLjEzMWgtMS43MjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS43OTkgMTQuNTgyaC0xLjY5NWEuMzIzLjMyMyAwIDAxLS4zMTctLjI2MUwxMi4yNjMgNi40OGEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNjk1Yy4xNTQgMCAuMjg3LjExLjMxNy4yNjJsLjgyMiA0LjIzaDEuMDg4Yy41MDQgMCAuNjEtLjEwNy42MTQtLjExMi4wMy0uMDMzLjA3LS4xODUuMDA0LS41MjZsLS42NzQtMy40N2EuMzIzLjMyMyAwIDAxLjMxNy0uMzg0aDEuNzIxYy4xNTUgMCAuMjg4LjExLjMxNy4yNjJsLjcxIDMuNjQ4Yy4xNjYuODU3LjAyMyAxLjUtLjQyNCAxLjkxLS40MjYuMzkyLTEuMTQuNTgyLTIuMTg0LjU4MmgtMS4xMThsLjMzIDEuN2EuMzIzLjMyMyAwIDAxLS4zMTYuMzg1bTAtLjMyM2wtLjQwNi0yLjA4NGgxLjUxYy45NSAwIDEuNjA1LS4xNjYgMS45NjYtLjQ5Ny4zNi0uMzMyLjQ2OC0uODY5LjMyNC0xLjYxMWwtLjcwOS0zLjY0OWgtMS43MjFsLjY3NCAzLjQ3Yy4wNzcuMzk0LjA0OC42NjMtLjA4NS44MDctLjEzMy4xNDMtLjQxNi4yMTUtLjg1LjIxNWgtMS4zNTRsLS44NzMtNC40OTJIMTIuNThsMS41MjQgNy44NDFoMS42OTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTIyLjAzMyA3LjgxN2MuNjUgMCAxLjEzNC4xMiAxLjQ0LjM1Ni4zMDQuMjMzLjUxMy42MzguNjIzIDEuMjAyLjEwMy41MjguMDY0Ljg5Ni0uMTE2IDEuMDk1LS4xODMuMjAzLS41OC4zMDYtMS4xNzcuMzA2aC0xLjAzOGwtLjU3NS0yLjk1OWguODQzem0tMy4zOTItMy42NDVhLjE2MS4xNjEgMCAwMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODkgMy42ODkgMCAwMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMDAtLjcyNy0uOTEgMy4xODkgMy4xODkgMCAwMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMDAtLjE1OC0uMTNIMTguNjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMS44OTggMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkyLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNnptMS41NTEgMS44ODNoLTMuMjg0YS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxbC0xLjUyNC03Ljg0MWEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4em0tMi40NTQtNC44NDJoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2aC0xLjE3bC0uNjM4LTMuMjgyem0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1NC0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAwLS4zNzgtMS4wNSAzLjUwMiAzLjUwMiAwIDAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzaC0xLjQ2M2wtLjQwNS0yLjA4NWgtMS43MDhsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1BocDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Bvc3RncmVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qb3N0Z3JlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0zMS44NzYgMTkuMTYyYy0uMTkyLS41NjQtLjY5NS0uOTU2LTEuMzQ1LTEuMDUtLjMwNi0uMDQ1LS42NTctLjAyNi0xLjA3Mi4wNTctLjcyNC4xNDUtMS4yNjEuMi0xLjY1NC4yMTEgMS40OC0yLjQyMiAyLjY4My01LjE4NSAzLjM3Ni03Ljc4NSAxLjEyLTQuMjA1LjUyMS02LjEyLS4xNzgtNi45ODctMS44NS0yLjI5My00LjU1MS0zLjUyNS03LjgwOS0zLjU2M2ExNC4yMzkgMTQuMjM5IDAgMDAtNC4wNi41NTEgMTUuNTczIDE1LjU3MyAwIDAwLTIuMzczLS4yMWMtMS41NjctLjAyNC0yLjk1Mi4zMDctNC4xMzUuOTg4YTE5LjMzNCAxOS4zMzQgMCAwMC0yLjkyLS43MTFDNi44NS4yMDggNC41NDkuNTYzIDIuODY2IDEuNzE2LjgyOCAzLjExMi0uMTE3IDUuNTM3LjA1OCA4LjkyNi4xMTMgMTAgLjczNCAxMy4yNzMgMS43MSAxNi4zNzZjLjU2MSAxLjc4NCAxLjE2IDMuMjY2IDEuNzggNC40MDQuODc4IDEuNjE0IDEuODE4IDIuNTY0IDIuODczIDIuOTA2LjU5MS4xOSAxLjY2Ni4zMjUgMi43OTYtLjU4OC4xNDMuMTY4LjMzNC4zMzUuNTg4LjQ5LjMyMi4xOTguNzE2LjM1OSAxLjEwOS40NTQgMS40MTguMzQ0IDIuNzQ1LjI1OCAzLjg3OC0uMjI0LjAwNy4xOTUuMDEzLjM4Mi4wMTcuNTQzLjAwOC4yNjIuMDE1LjUxOC4wMjUuNzU4LjA2NyAxLjYyLjE4MSAyLjg4MS41MTggMy43NjNsLjA3LjIwMWMuMTY4LjUuNDQ5IDEuMzM1IDEuMTY0IDEuOTkuNzQuNjc3IDEuNjM3Ljg4NSAyLjQ1Ny44ODUuNDEyIDAgLjgwNC0uMDUyIDEuMTQ5LS4xMjQgMS4yMjctLjI1NSAyLjYyMS0uNjQzIDMuNjMtMi4wMzYuOTUzLTEuMzE2IDEuNDE3LTMuMjk5IDEuNS02LjQyM2wuMDMxLS4yNTMuMDItLjE2NS4yMjUuMDE5LjA1OC4wMDRjMS4yNS4wNTUgMi43NzktLjIwMiAzLjcxOC0uNjI1Ljc0MS0uMzM0IDMuMTE5LTEuNTUgMi41NTktMy4xOTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzNjc5MVwiLFxuICAgIGQ6IFwiTTI5LjczOCAxOS40ODFjLTMuNzE3Ljc0NC0zLjk3My0uNDc2LTMuOTczLS40NzYgMy45MjUtNS42NDggNS41NjYtMTIuODE3IDQuMTUtMTQuNTcxQzI2LjA1Mi0uMzUyIDE5LjM2NSAxLjkxIDE5LjI1NCAxLjk3bC0uMDM2LjAwNmExMy42NTcgMTMuNjU3IDAgMDAtMi40OC0uMjVjLTEuNjgyLS4wMjctMi45NTguNDI3LTMuOTI3IDEuMTQgMCAwLTExLjkyOC00Ljc2Ni0xMS4zNzQgNS45OTIuMTE4IDIuMjg5IDMuMzgzIDE3LjMxOCA3LjI3OCAxMi43NzlhNzAuNDQzIDcwLjQ0MyAwIDAxMi43OTgtMy4wNjRjLjY4My40NCAxLjUwMS42NjUgMi4zNTguNTg0bC4wNjctLjA1NWMtLjAyLjIwNi0uMDExLjQwOC4wMjcuNjQ3LTEuMDA0IDEuMDg3LS43MDkgMS4yNzctMi43MTQgMS42NzgtMi4wMy40MDUtLjgzNyAxLjEyNy0uMDYgMS4zMTYuOTQ0LjIyOSAzLjEyNy41NTMgNC42MDItMS40NWwtLjA1OC4yM2MuMzkzLjMwNC42NjkgMS45ODUuNjIzIDMuNTA4LS4wNDcgMS41MjQtLjA3OCAyLjU3LjIzMiAzLjM4Ny4zMS44MTcuNjE5IDIuNjU1IDMuMjU1IDIuMTA3IDIuMjAzLS40NTggMy4zNDUtMS42NDQgMy41MDMtMy42MjMuMTEzLTEuNDA3LjM2OC0xLjE5OS4zODQtMi40NTdsLjIwNS0uNTk1Yy4yMzYtMS45MDcuMDM3LTIuNTIyIDEuMzk0LTIuMjM2bC4zMy4wMjhjMSAuMDQ0IDIuMzA3LS4xNTYgMy4wNzQtLjUwMiAxLjY1Mi0uNzQzIDIuNjMyLTEuOTg1IDEuMDAzLTEuNjU5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xMy41MSA5Ljg4MmMtLjMzNS0uMDQ1LS42MzktLjAwNC0uNzkyLjExYS4yOC4yOCAwIDAwLS4xMi4xODdjLS4wMi4xMzMuMDc3LjI4Mi4xMzYuMzU4LjE2OS4yMTYuNDE0LjM2NS42NTguMzk4LjAzNS4wMDQuMDcuMDA3LjEwNS4wMDcuNDA1IDAgLjc3NC0uMzA3LjgwNy0uNTMzLjA0LS4yODMtLjM4My0uNDcyLS43OTUtLjUyN20xMS4wOTkuMDA5Yy0uMDMyLS4yMjItLjQ0LS4yODUtLjgyNi0uMjMzLS4zODYuMDUyLS43Ni4yMi0uNzMuNDQzLjAyNi4xNzMuMzQ4LjQ2OC43My40NjhhLjcxOC43MTggMCAwMC4wOTctLjAwNi45NDcuOTQ3IDAgMDAuNTMtLjI4MWMuMTM1LS4xMzguMjEzLS4yOTEuMTk5LS4zOTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTMwLjk3NSAxOS4zOTdjLS4xNDItLjQxNi0uNTk4LS41NS0xLjM1Ni0uMzk4LTIuMjUuNDUtMy4wNTYuMTM5LTMuMzIxLS4wNSAxLjc1LTIuNTg0IDMuMTg5LTUuNzA4IDMuOTY1LTguNjIzLjM2OC0xLjM4LjU3LTIuNjYzLjU4Ny0zLjcwOC4wMTktMS4xNDctLjE4My0xLjk5LS41OTgtMi41MDUtMS42NzUtMi4wNzUtNC4xMzQtMy4xODktNy4xMS0zLjIyLTIuMDQ3LS4wMjItMy43NzUuNDg2LTQuMTEuNjI5YTEwLjU0OSAxMC41NDkgMCAwMC0yLjMxMy0uMjg4Yy0xLjUzNi0uMDI0LTIuODY0LjMzMi0zLjk2MyAxLjA2YTE4LjEzMSAxOC4xMzEgMCAwMC0zLjIyLS44MmMtMi42MS0uNDA3LTQuNjgzLS4wOTgtNi4xNjMuOTE4QzEuNjA4IDMuNjA1Ljc5MyA1Ljc3My45NTEgOC44MzZjLjA1MyAxLjAzLjY1OCA0LjIgMS42MTQgNy4yMzYgMS4yNTggMy45OTYgMi42MjUgNi4yNTcgNC4wNjMgNi43MjMuMTY5LjA1NC4zNjMuMDkyLjU3Ny4wOTIuNTI1IDAgMS4xNjgtLjIzIDEuODM4LTEuMDFhNjQuODk0IDY0Ljg5NCAwIDAxMi41MzItMi43NzggNC4xOCA0LjE4IDAgMDAxLjgyMi40NzVsLjAwNS4wNDhjLS4xMS4xMjctLjIxNy4yNTUtLjMyMS4zODUtLjQ0LjU0Mi0uNTMyLjY1NS0xLjk1LjkzOC0uNDAzLjA4LTEuNDczLjI5NC0xLjQ4OSAxLjAyMi0uMDE3Ljc5NSAxLjI2NiAxLjEzIDEuNDEyIDEuMTY1LjUwOS4xMjMgMSAuMTg0IDEuNDY3LjE4NCAxLjEzOCAwIDIuMTQtLjM2MyAyLjk0LTEuMDY0LS4wMjUgMi44MzQuMDk3IDUuNjI4LjQ0OCA2LjQ3OS4yODguNjk2Ljk5IDIuNCAzLjIwOCAyLjM5OWE1LjMgNS4zIDAgMDAxLjA3OC0uMTE5YzIuMzE1LS40OCAzLjMyLTEuNDczIDMuNzEtMy42Ni4yMDgtMS4xNy41NjUtMy45NjEuNzMzLTUuNDU5LjM1NC4xMDcuODEuMTU2IDEuMzA0LjE1NiAxLjAyOSAwIDIuMjE2LS4yMTIgMi45NjEtLjU0Ny44MzctLjM3NyAyLjM0Ni0xLjMgMi4wNzItMi4xMDR6TTI1LjQ2MiA5LjI3OGMtLjAwOC40NDItLjA3Ljg0NC0uMTM3IDEuMjYyLS4wNzIuNDUxLS4xNDUuOTE3LS4xNjQgMS40ODItLjAxOS41NS4wNTIgMS4xMjMuMTIgMS42NzYuMTQgMS4xMTguMjgyIDIuMjY4LS4yNjkgMy40MDNhNC4zNyA0LjM3IDAgMDEtLjI0My0uNDg1Yy0uMDY5LS4xNjEtLjIxNy0uNDItLjQyMy0uNzc3LS44LTEuMzktMi42NzMtNC42NDgtMS43MTQtNS45NzcuMjg2LS4zOTYgMS4wMS0uODAzIDIuODMtLjU4NHptLTIuMjA2LTcuNDljMi42NjcuMDU4IDQuNzc3IDEuMDI1IDYuMjcgMi44NzYgMS4xNDYgMS40Mi0uMTE2IDcuODc5LTMuNzY3IDEzLjQ1bC0uMTExLS4xMzUtLjA0Ni0uMDU2Yy45NDMtMS41MS43NTktMy4wMDYuNTk1LTQuMzMxLS4wNjgtLjU0NC0uMTMyLTEuMDU4LS4xMTUtMS41NDEuMDE2LS41MTEuMDg2LS45NS4xNTQtMS4zNzUuMDgyLS41MjIuMTY3LTEuMDYzLjE0NC0xLjcwMWEuNjg0LjY4NCAwIDAwLjAxNS0uMjRjLS4wNi0uNjExLS43OC0yLjQ0MS0yLjI0Ny00LjA5OGExMC4wOTQgMTAuMDk0IDAgMDAtMy41NzItMi42MDQgMTIuNDA3IDEyLjQwNyAwIDAxMi42OC0uMjQ0ek04LjMzNCAyMS4zMDdjLS43MzcuODYtMS4yNDYuNjk1LTEuNDE0LjY0MS0xLjA5MS0uMzUzLTIuMzU3LTIuNTktMy40NzQtNi4xMzYtLjk2Ni0zLjA2OS0xLjUzLTYuMTU1LTEuNTc1LTcuMDItLjE0MS0yLjczNy41NDMtNC42NDQgMi4wMzMtNS42NjkgMi40MjYtMS42NjggNi40MTQtLjY3IDguMDE2LS4xNjMtLjAyMy4wMjItLjA0Ny4wNDItLjA3LjA2NS0yLjYzIDIuNTc1LTIuNTY3IDYuOTc0LTIuNTYgNy4yNDMgMCAuMTA0LjAwOC4yNTEuMDIuNDUzLjA0Ni43NC4xMyAyLjExNy0uMDk1IDMuNjc3LS4yMDkgMS40NS4yNTIgMi44NjggMS4yNjQgMy44OTIuMTA0LjEwNS4yMTMuMjA1LjMyNy4zLS40NS40NjctMS40MyAxLjUwMi0yLjQ3MiAyLjcxN3ptMi44MS0zLjYzNWMtLjgxNi0uODI2LTEuMTg2LTEuOTc0LTEuMDE3LTMuMTUuMjM4LTEuNjQ4LjE1LTMuMDgzLjEwMy0zLjg1NGwtLjAxNi0uMjc3Yy4zODQtLjMzIDIuMTY1LTEuMjU1IDMuNDM0LS45NzMuNTguMTI5LjkzMi41MTEgMS4wOCAxLjE3Ljc1OSAzLjQwNi4xIDQuODI1LS40MyA1Ljk2Ni0uMTA5LjIzNS0uMjEyLjQ1OC0uMy42ODdsLS4wNjguMTc4Yy0uMTczLjQ1LS4zMzQuODY3LS40MzQgMS4yNjRhMy4zMjUgMy4zMjUgMCAwMS0yLjM1Mi0xLjAxMXptLjEzMyA0LjU5NGEyLjA3IDIuMDcgMCAwMS0uNjE0LS4yNTZjLjExMS0uMDUxLjMxLS4xMi42NTQtLjE5IDEuNjY4LS4zMzIgMS45MjUtLjU2NyAyLjQ4Ny0xLjI2LjEzLS4xNTguMjc1LS4zMzguNDc4LS41NTcuMzAxLS4zMjguNDQtLjI3Mi42OS0uMTcyLjIwMi4wODIuNC4zMjguNDguNTk5LjAzNy4xMjguMDguMzctLjA2LjU2LTEuMTc0IDEuNTk1LTIuODg2IDEuNTc0LTQuMTE1IDEuMjc2em04LjcyNSA3Ljg3M2MtMi4wNC40MjQtMi43NjEtLjU4Ni0zLjIzNy0xLjc0LS4zMDgtLjc0NC0uNDU5LTQuMTAyLS4zNTEtNy44MWEuNDM0LjQzNCAwIDAwLS4wMi0uMTQzIDEuODIzIDEuODIzIDAgMDAtLjA1Ny0uMjYyYy0uMTYtLjU0LS41NDgtLjk5LTEuMDEzLTEuMTc4LS4xODUtLjA3NC0uNTI1LS4yMS0uOTMzLS4xMS4wODctLjM0Ny4yMzgtLjc0LjQwMi0xLjE2NWwuMDY4LS4xNzhjLjA3OC0uMjAyLjE3NS0uNDEuMjc3LS42MzIuNTU0LTEuMTk0IDEuMzEzLTIuODI5LjQ5LTYuNTIyLS4zMDktMS4zODQtMS4zNC0yLjA2LTIuOTAxLTEuOTAzLS45MzYuMDk0LTEuNzkzLjQ2LTIuMjIuNjdhNy4yNTUgNy4yNTUgMCAwMC0uMjU1LjEzMmMuMTItMS4zOTQuNTctNCAyLjI1NS01LjY0NyAxLjA2Mi0xLjAzOCAyLjQ3NS0xLjU1IDQuMTk2LTEuNTIzIDMuMzkzLjA1NCA1LjU2OSAxLjc0MiA2Ljc5NiAzLjE1IDEuMDU4IDEuMjExIDEuNjMxIDIuNDMzIDEuODYgMy4wOTEtMS43Mi0uMTctMi44ODkuMTYtMy40ODIuOTgyLTEuMjkgMS43ODcuNzA2IDUuMjU3IDEuNjY1IDYuOTI0LjE3NS4zMDYuMzI3LjU3LjM3NS42ODIuMzEyLjczNC43MTYgMS4yMjQgMS4wMTIgMS41ODIuMDkuMTEuMTc4LjIxNS4yNDUuMzA4LS41MjEuMTQ2LTEuNDU2LjQ4Mi0xLjM3MSAyLjE2NC0uMDY5Ljg0My0uNTU4IDQuNzkzLS44MDYgNi4xODktLjMyOCAxLjg0My0xLjAyOCAyLjUzLTIuOTk1IDIuOTM5em04LjUxMy05LjQ0N2MtLjUzMi4yNC0xLjQyNC40Mi0yLjI3LjQ1OC0uOTM1LjA0My0xLjQxMS0uMTAxLTEuNTIzLS4xOS0uMDUzLTEuMDQ4LjM1LTEuMTU3Ljc3NS0xLjI3M2EzLjM1IDMuMzUgMCAwMC4xOTUtLjA1OGMuMDQuMDMxLjA4Mi4wNjIuMTMuMDkyLjc1LjQ4MSAyLjA5MS41MzMgMy45ODQuMTU0bC4wMi0uMDA0Yy0uMjU1LjIzMi0uNjkyLjU0Mi0xLjMxLjgyMXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qb3N0Z3JlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Byb21ldGhldXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Byb21ldGhldXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjUyMkNcIixcbiAgICBkOiBcIk0xNS45MDcuMTg3QzcuMTIyLjE4NyAwIDcuMzA4IDAgMTYuMDkzUzcuMTIyIDMyIDE1LjkwNyAzMmM4Ljc4NCAwIDE1LjkwNi03LjEyMSAxNS45MDYtMTUuOTA2UzI0LjY5LjE4NyAxNS45MDcuMTg3em0wIDI5Ljc3Yy0yLjUgMC00LjUyNi0xLjY3LTQuNTI2LTMuNzI5aDkuMDUxYzAgMi4wNi0yLjAyNiAzLjczLTQuNTI1IDMuNzN6bTcuNDc1LTQuOTYzSDguNDN2LTIuNzExaDE0Ljk1djIuNzF6bS0uMDU0LTQuMTA3SDguNDczYy0uMDUtLjA1Ny0uMS0uMTEzLS4xNDctLjE3LTEuNTMtMS44NTktMS44OTEtMi44MjktMi4yNDEtMy44MTgtLjAwNi0uMDMyIDEuODU1LjM4IDMuMTc2LjY3OCAwIDAgLjY3OS4xNTcgMS42NzIuMzM4LS45NTMtMS4xMTgtMS41Mi0yLjUzOS0xLjUyLTMuOTkxIDAtMy4xODkgMi40NDYtNS45NzUgMS41NjQtOC4yMjcuODU4LjA3IDEuNzc3IDEuODEyIDEuODM5IDQuNTM3LjkxMy0xLjI2MiAxLjI5NS0zLjU2NiAxLjI5NS00Ljk3OCAwLTEuNDYzLjk2My0zLjE2MSAxLjkyNy0zLjIyLS44NiAxLjQxNy4yMjMgMi42MyAxLjE4NCA1LjY0Mi4zNjEgMS4xMzIuMzE1IDMuMDM1LjU5NCA0LjI0My4wOTItMi41MDguNTIzLTYuMTY3IDIuMTE0LTcuNDMtLjcwMiAxLjU5MS4xMDQgMy41ODEuNjU1IDQuNTM4Ljg4OSAxLjU0NCAxLjQyOCAyLjcxNCAxLjQyOCA0LjkyNiAwIDEuNDgzLS41NDggMi44OC0xLjQ3MiAzLjk3MSAxLjA1LS4xOTcgMS43NzYtLjM3NCAxLjc3Ni0uMzc0bDMuNDExLS42NjZzLS40OTUgMi4wMzgtMi40IDQuMDAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUHJvbWV0aGV1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1JhYmJpdG1xID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29SYWJiaXRtcShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2MFwiLFxuICAgIGQ6IFwiTTMwLjA4MyAxMy4xOTdoLTkuODc4Yy0uNzktLjA4OC0xLjM5MS0uNzQtMS4zOTEtMS41MDhWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1aC0zLjQ1NmMtLjg4NSAwLTEuNTk1LjY3Mi0xLjU5NSAxLjQ5NXY5LjgyYy0uMDQzLjc0LS42OTYgMS4zMzgtMS40NzggMS40MDZIOC4xMDJjLS43Ni0uMDg4LTEuMzQ4LS42ODYtMS4zOTgtMS40MDZWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1SDEuNjUyQy43NjguNDc2LjA1OCAxLjE0OC4wNTggMS45N3YyOC4zNThjMCAuODMuNzE3IDEuNDk1IDEuNTk0IDEuNDk1aDI4LjQzOWMuODg0IDAgMS41OTQtLjY3MyAxLjU5NC0xLjQ5NVYxNC42OTJjLS4wMDctLjgyOS0uNzE4LTEuNDk1LTEuNjAyLTEuNDk1em0tNC41NSAxMC43MjRjMCAuODI5LS43MTggMS40OTUtMS41OTUgMS40OTVIMjAuNDhjLS44ODQgMC0xLjU5NS0uNjczLTEuNTk1LTEuNDk1di0zLjA1OGMwLS44My43MTgtMS40OTUgMS41OTUtMS40OTVoMy40NTdjLjg4NCAwIDEuNTk0LjY3MiAxLjU5NCAxLjQ5NXYzLjA1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JhYmJpdG1xOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUmVkaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JlZGlzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDMpXCIsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAyMC43OTFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM3LTEyLjQ2LTUuMjM0LS44MzgtLjM5OS0xLjI3OC0uNzM1LTEuMjc4LTEuMDUydi0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTEuNjIzIDIuMzkzIDEzLjI3IDIuOTkybC0uMDAxIDMuMTM1YzAgLjMxNC0uMzguNjU5LTEuMjQgMS4xMDR6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTcuNjFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU2LTEuNDcxLS42OTgtMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0LTEuNjc2LS43OTctMS43MTItMS4zNDUtLjA2NC0xLjk4NyAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MiAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTUuNjA2Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS43LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNS0uODM4LS4zOTgtMS4yNzgtLjczNC0xLjI3OC0xLjA1MXYtMy4xOFMxMi4zMDcgOS4xOSAxNC4yNjQgOC40OTJjMS45NTctLjY5OCAyLjYzNi0uNzIzIDQuMzAxLS4xMTcgMS42NjYuNjA2IDExLjYyMyAyLjM5MiAxMy4yNyAyLjk5MWwtLjAwMSAzLjEzNWMwIC4zMTUtLjM4LjY2LTEuMjQgMS4xMDV6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTIuNDI1Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LTEuNjc2LS43OTYtMS43MTItMS4zNDUtLjA2NC0xLjk4NiAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MyAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTAuMzYzIDQuMDQ3IDEyLjAwOSA0LjY0NiAxLjY0Ni42IDEuNzEgMS4wOTQuMDIgMS45Njl6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTAuMjI4Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNEMuNjI3IDEwLjI2OC4xODcgOS45MzIuMTg3IDkuNjE1di0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkxIDEzLjI3IDIuOTlsLS4wMDEgMy4xMzZjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCA3LjA0N2MtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTUtNC4zNy4yNTYtMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzRDLS4yMTEgNi42ODktLjI0NyA2LjE0IDEuNCA1LjQ5OVMxMi4zMDcgMS4yNDcgMTQuMjY0LjU1YzEuOTU3LS43IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMC4xNTcgMy45ODVsLTIuNzQyLjI4My0uNjE0IDEuNDY4LS45OTItMS42MzgtMy4xNjYtLjI4MyAyLjM2Mi0uODQ3LS43MDgtMS4zIDIuMjEyLjg2IDIuMDg1LS42OC0uNTYzIDEuMzQ1em0tMy41MiA3LjEyM2wtNS4xMTgtMi4xMSA3LjMzNC0xLjExOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImVsbGlwc2VcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGN4OiA5LjU0MSxcbiAgICBjeTogNi4zMTEsXG4gICAgcng6IDMuOTIsXG4gICAgcnk6IDEuNTFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3QTBDMDBcIixcbiAgICBkOiBcIk0yMy4zOTggNC4zODZsNC4zNCAxLjcwNS00LjMzNiAxLjcwM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0FEMjExNVwiLFxuICAgIGQ6IFwiTTE4LjU5NiA2LjI3NGw0LjgwMi0xLjg4OC4wMDQgMy40MDgtLjQ3MS4xODN6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmVkaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29TZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDcuMDA4VjBoMjB2MTYuNzQ0YzAgMy45MTMtNi4zNzggNi40NzctOS4wMTUgNy4yNTZWNy4wMDhIOXpcIixcbiAgICBmaWxsOiBcIiNGQTc0NEVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjAuMDczVjEwaDE0djIyQzcuNjY3IDI3Ljk4IDMgMjQuMDA0IDMgMjAuMDczelwiLFxuICAgIGZpbGw6IFwiIzFEQkFCMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg4djE0Yy0yLjk4My0xLjE0LTgtMy43NTYtOC03LjA0M1YxMHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1NpdGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NpdGVTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI3LjA1IDEwaC03LjM0bC0xMSAyMnMxNS42OTYtNC45NiAyMS44NTUtMTYuMDc2QzMyLjAzNyAxMy4yNjYgMzAuMDg4IDEwIDI3LjA1IDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMS4zNTUgMEg3LjUzM0wuNDI3IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDQgMjBoNy4zNTFsMTAtMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMi41MzMgMTBMLjQyOCAxNC4yMTFDLS45MDMgMTYuODcxIDEuMDMyIDIwIDQuMDA1IDIwaDcuMzVsNS0xMEgyLjUzM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TaXRlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2tldGNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ta2V0Y2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzJMMCAxMS40NTRsNi45MzEtMTAuMzhMMTYgMGw5LjA2OSAxLjA3NEwzMiAxMS40NTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQzZDMDBcIixcbiAgICBkOiBcIk0xNiAzMkwwIDExLjQ1NGgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkVGQjRcIixcbiAgICBkOiBcIk0xNiAwTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk02LjkzMiAxLjA3NEwzLjM2OSA2LjMuMDAxIDExLjQ1NGg2LjU0MnpNMjUuMDY5IDEuMDc0TDI4LjYzMiA2LjMgMzIgMTEuNDU0aC02LjU0MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFRDMwNVwiLFxuICAgIGQ6IFwiTTYuOTMxIDEuMDc0bC0uNDUzIDEwLjM4TDE2IDB6TTI1LjA2OSAxLjA3NGwuNDUzIDEwLjM4TDE2IDB6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2tldGNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2xhY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NsYWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0UwMUU1QVwiLFxuICAgIGQ6IFwiTTYuODEzIDIwLjE4YTMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjgtMy4zMyAzLjMzNyAzLjMzNyAwIDAxMy4zMjktMy4zMjloMy4zMjl2My4zM3ptMS42NzcgMGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMjggMy4zM3Y4LjMzNWEzLjMzNyAzLjMzNyAwIDAxLTMuMzI5IDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMjktMy4zM1YyMC4xOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM2QzVGMFwiLFxuICAgIGQ6IFwiTTExLjgyIDYuODEzYTMuMzM3IDMuMzM3IDAgMDEtMy4zMy0zLjMzQTMuMzM3IDMuMzM3IDAgMDExMS44Mi4xNTZhMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzI5djMuMzI5SDExLjgyem0wIDEuNjc3YTMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjhIMy40ODRhMy4zMzcgMy4zMzcgMCAwMS0zLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5aDguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkVCNjdEXCIsXG4gICAgZDogXCJNMjUuMTg3IDExLjgyYTMuMzM3IDMuMzM3IDAgMDEzLjMyOS0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOGgtMy4zMjhWMTEuODJ6bS0xLjY3OCAwYTMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjggMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOVYzLjQ4NGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzdjguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUNCMjJFXCIsXG4gICAgZDogXCJNMjAuMTggMjUuMTg3YTMuMzM3IDMuMzM3IDAgMDEzLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOSAzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzN2LTMuMzI4aDMuMzN6bTAtMS42NzhhMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOWg4LjMzNWEzLjMzNyAzLjMzNyAwIDAxMy4zMjkgMy4zMyAzLjMzNyAzLjMzNyAwIDAxLTMuMzMgMy4zMjhIMjAuMTh6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2xhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29VcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1VwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDE1YzAgNy4wNjItNC44ODggMTIuOTY5LTExLjQ2IDE0LjU2M0ExNS45MTQgMTUuOTE0IDAgMDAxNiAzMmM4LjgzNiAwIDE2LTcuMTYzIDE2LTE2di0zbC02LjUtNi02LjUgNnYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNNi44MzMgMjYuNjQ2YTExLjk1NCAxMS45NTQgMCAwMDguNTQ0LTcuODM0QTEyLjQzIDEyLjQzIDAgMDExMyAxMS41Vi4yOTJDNS42IDEuNjk2IDAgOC4xOSAwIDE2LjAwMmMwIDQuMzU4IDEuNzUgOC4zMDYgNC41NzcgMTEuMTkybDIuMjU2LS41NDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMzAuMzYyIDIzLjAyYy0xLjQ5NC42My0zLjEzNy45OC00Ljg2MS45OGExMi40NDMgMTIuNDQzIDAgMDEtNy44NTItMi43OCAxNS4wNDIgMTUuMDQyIDAgMDEtMTAuMTEgOC4zNDNBMTUuOTEgMTUuOTEgMCAwMDE2LjAwMiAzMmM2LjMxNCAwIDExLjc1OC0zLjY2OSAxNC4zNi04Ljk4XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29VcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29XZWJob29rID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XZWJob29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3M0E2M1wiLFxuICAgIGQ6IFwiTTE0Ljk0MyAxMy41NjNjLTEuMzI3IDIuMjMtMi41OTcgNC4zODgtMy44OTQgNi41MzEtLjMzNC41NS0uNDk4Ljk5OC0uMjMyIDEuNjk4LjczNCAxLjkzMS0uMzAyIDMuODExLTIuMjUgNC4zMjEtMS44MzcuNDgyLTMuNjI3LS43MjYtMy45OTItMi42OTItLjMyMy0xLjc0MSAxLjAyOC0zLjQ0OCAyLjk0OC0zLjcyLjE2LS4wMjMuMzI1LS4wMjYuNTk1LS4wNDZsMi45Mi00Ljg5NkM5LjIgMTIuOTMzIDguMTA4IDEwLjggOC4zNSA4LjE1NGMuMTcxLTEuODcuOTA3LTMuNDg2IDIuMjUtNC44MWE3LjYzOSA3LjYzOSAwIDAxOS41MzEtMWMyLjkxIDEuODcgNC4yNDQgNS41MTIgMy4xMDcgOC42MjlsLTIuNjY4LS43MjRjLjM1Ny0xLjczMy4wOTMtMy4yOS0xLjA3Ni00LjYyMy0uNzcyLS44OC0xLjc2My0xLjM0MS0yLjg5LTEuNTExLTIuMjU4LS4zNDEtNC40NzYgMS4xMS01LjEzNCAzLjMyNy0uNzQ4IDIuNTE2LjM4MyA0LjU3MiAzLjQ3MyA2LjEyMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRCNEI0QlwiLFxuICAgIGQ6IFwiTTE4LjczIDEwLjkyNmwyLjgyMyA0Ljk4YzQuNzUzLTEuNDcgOC4zMzYgMS4xNiA5LjYyMiAzLjk3NyAxLjU1MiAzLjQwMi40OTEgNy40MzItMi41NTggOS41MzEtMy4xMyAyLjE1NS03LjA4OSAxLjc4Ny05Ljg2Mi0uOTgxbDIuMTc2LTEuODIxYzIuNzM5IDEuNzc0IDUuMTM1IDEuNjkgNi45MTMtLjQxYTQuNzY2IDQuNzY2IDAgMDAtLjA3Ny02LjIxOWMtMS44LTIuMDI1LTQuMjEzLTIuMDg2LTcuMTMtLjE0My0xLjIwOS0yLjE0Ni0yLjQ0LTQuMjc1LTMuNjEtNi40MzYtLjM5Ni0uNzI5LS44MzItMS4xNTItMS43MjItMS4zMDYtMS40ODctLjI1Ny0yLjQ0Ni0xLjUzNC0yLjUwNC0yLjk2NGEzLjI1OCAzLjI1OCAwIDAxMi4wOC0zLjE5MiAzLjI0MyAzLjI0MyAwIDAxMy42NzEgMS4wMDJjLjcxLjg5Ni45MzUgMS45MDUuNTYyIDMuMDEtLjEwNC4zMDktLjIzOC42MDctLjM4NC45NzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QTRBNEFcIixcbiAgICBkOiBcIk0yMC45NjMgMjQuNDAxaC01LjcyYy0uNTUgMi4yNTYtMS43MzQgNC4wNzctMy43NzUgNS4yMzUtMS41ODYuOS0zLjI5NiAxLjIwNS01LjExNi45MTFDMyAzMC4wMDcuMjYgMjYuOTkuMDE5IDIzLjU5M2MtLjI3My0zLjg0OCAyLjM3Mi03LjI2OCA1Ljg5OC04LjAzNmwuNzMyIDIuNjU4Yy0zLjIzNCAxLjY1LTQuMzUzIDMuNzMtMy40NDggNi4zMy43OTcgMi4yODcgMy4wNiAzLjU0MSA1LjUxOCAzLjA1NiAyLjUxLS40OTUgMy43NzYtMi41ODEgMy42MjEtNS45MjkgMi4zOCAwIDQuNzYxLS4wMjQgNy4xNC4wMTIuOTMuMDE1IDEuNjQ4LS4wODEgMi4zNDgtLjkgMS4xNTItMS4zNDkgMy4yNzMtMS4yMjcgNC41MTUuMDQ2IDEuMjY4IDEuMzAxIDEuMjA3IDMuMzk1LS4xMzUgNC42NDFhMy4yMzYgMy4yMzYgMCAwMS00LjU1My0uMTU3Yy0uMjQ5LS4yNjctLjQ0NS0uNTg1LS42OTItLjkxM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XZWJob29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV2luZG93cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV2luZG93cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQURFRlwiLFxuICAgIGQ6IFwiTTAgNC41MWwxMi45NzctMS43NjguMDA2IDEyLjUxOC0xMi45NzEuMDc0TDAgNC41MXptMTIuOTcgMTIuMTkybC4wMTEgMTIuNTI5LTEyLjk3LTEuNzg0LS4wMDItMTAuODI5IDEyLjk2Mi4wODR6bTEuNTc0LTE0LjE5TDMxLjc1MSAwdjE1LjFsLTE3LjIwNy4xMzdWMi41MTF6bTE3LjIxIDE0LjMwOGwtLjAwMyAxNS4wMzMtMTcuMjA3LTIuNDI5LS4wMjQtMTIuNjMyIDE3LjIzNS4wMjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XaW5kb3dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy41NTcgNS4wNWMuMTctLjIwMi40NTctLjUxMi44Ni0uOTNDMTkuNDgzIDMuMDE3IDIxLjgyOCAxIDIzLjgwMSAxSDMwdjMwaC02LjJjLTEuOTcyIDAtMy45OTUtMS40NDktNS4zODMtMy4xMDZsLS43NjQtMS4wNTIgMi43NS0zLjQ3N2MzLjQ2Mi00LjM3NiAzLjQ2My0xMC4zMzIuMDAxLTE0LjcwN0wxNy41NTcgNS4wNXpcIixcbiAgICBmaWxsOiBcIiNGRUM1MTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMzFWMWg1LjgxYzEuNzEgMCAzLjM1Ljc4NiA0LjM4NyAyLjFsNS44NTUgNy40MmMyLjU5OCAzLjI4MyAyLjU5OCA3LjY5OC0uMDAyIDEwLjk4M2wtNS44NTUgNy40MDNDMTEuMTU4IDMwLjIxNyA5LjUyIDMxIDcuODE1IDMxSDJ6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zODQgMjQuODlMMTIuMTUgMjEuN2MtMi44NjgtMy4zMTgtMi44NjgtOC4yMi4wMDItMTEuMzIyIDEuNTM1LTEuNjM5IDIuNjExLTIuNzE4IDMuMjMtMy4yMzhsMi42NyAzLjIzOGMyLjYzNyAzLjM4NSAyLjU3NSA3Ljk4Ny0uMDYyIDExLjM3NGwtMi42MDcgMy4xMzd6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaEZpbHRlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaEZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOTE0IDFjLTMuNiAwLTUuODk3IDEuMTExLTUuODk3IDEuODc2IDAgLjc2NiAyLjI5NyAxLjg3NyA1Ljg5NyAxLjg3N3M1Ljg5Ny0xLjExMSA1Ljg5Ny0xLjg3N0MxMy44MTEgMi4xMTEgMTEuNTE0IDEgNy45MTQgMW0zLjk4IDcuOTg4Yy0xLjE4Ny4zMzEtMi42MDEuNTAyLTMuOTguNTAyLTEuMzgzIDAtMi44MDEtLjE3Mi0zLjk5MS0uNTA1bDIuODYzIDMuMjQydjIuNTE1Yy4xMzYuMDguNTE1LjIxNCAxLjEyOC4yMTQuNjEgMCAuOTg5LS4xMzMgMS4xMjYtLjIxM3YtMi41MTVsMi44NTQtMy4yNHptMi4zOTQtMS4yMDZsLTQuMjQ4IDQuODIzdjIuMjQ2aC4wMDRjMCAuNzYzLTEuMDY5IDEuMTA1LTIuMTMgMS4xMDUtMS4wNiAwLTIuMTMtLjM0Mi0yLjEzLTEuMTA1aC4wMDJ2LTIuMjQ1TDEuMzIxIDcuNTVsLjAxLS4wMDhBMS41MyAxLjUzIDAgMDExIDYuNjA3VjIuNzhoLjAyQzEuMTQuOTczIDQuNjI3IDAgNy45MTMgMGMzLjI4NiAwIDYuNzc0Ljk3MyA2Ljg5NCAyLjc4aC4wMnYzLjgyN2MwIC4zNDMtLjEyLjY1Ny0uMzM1Ljk0MWwtLjAwMy4wMDRjLS4wNi4wNzktLjEyOC4xNTUtLjIwMi4yM3ptLS41NzgtLjg1NmEuNTYuNTYgMCAwMC4xMTgtLjMxOVY0LjQxMWMtMS4yODguODc5LTMuNjQ5IDEuMzQyLTUuOTE0IDEuMzQyQzUuNjUgNS43NTMgMy4yODggNS4yOSAyIDQuNDExdjIuMTk2QzIgNy4zNzUgNC4zMDQgOC40OSA3LjkxNCA4LjQ5YzIuODc5IDAgNC45MjctLjcwOSA1LjYzOS0xLjM4NWwuMTU3LS4xOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hGaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSWYgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJZihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTE4IDkuNzk5bC00LjgyIDQuODE5IDIuODgtLjQzLjE0OC45ODdMMCAxNS45NDNsLjc2OC01LjEyNi45ODguMTQ4LS40NTMgMy4wMzMgNC45MzYtNC45MzVhMi4wMDMgMi4wMDMgMCAwMTEuMjY1LTIuODg1VjBoMXY2LjE3OGEyLjAwMyAyLjAwMyAwIDAxMS4yNjMgMi44ODRsNC44NjUgNC44NjYtLjQ0My0yLjk2My45ODgtLjE0Ny43NjggNS4xMjYtNS4xMjctLjc2OS4xNS0uOTg4IDIuOTUuNDQxLTQuODMtNC44M2MtLjMxMi4yMDMtLjY4NS4zMi0xLjA4NS4zMi0uNCAwLS43NzMtLjExNy0xLjA4NS0uMzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSWY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJbnB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzQ3IDEwLjk5MmgxMy4xYS4xMjMuMTIzIDAgMDAuMTIyLS4xMjNWOC41MWEuMTIyLjEyMiAwIDAwLS4xMjItLjEyMkgxLjEyMkEuMTIyLjEyMiAwIDAwMSA4LjUxdjIuMzZjMCAuMDY2LjA1NS4xMjIuMTIyLjEyMmguNjI1em0xMi4wMTEgMUgyLjIxVjE2aC0xdi00LjAwOGgtLjA4OEExLjEyNCAxLjEyNCAwIDAxMCAxMC44N1Y4LjUxYzAtLjYyLjUwMy0xLjEyMiAxLjEyMi0xLjEyMmgxMy43MjVjLjYyIDAgMS4xMjIuNTAyIDEuMTIyIDEuMTIydjIuMzZjMCAuNjE4LS41MDMgMS4xMjItMS4xMjIgMS4xMjJoLS4wODlWMTZoLTF2LTQuMDA4em0tNi4yNy03LjQ4N1YwaDF2NC41MjlsMi40MDctMi4yNjIuNjg1LjczTDggNi4zNTYgNC40MiAyLjk5NWwuNjg1LS43MjkgMi4zODMgMi4yNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjIxIDQuMDA4SDEzLjc2VjBoMXY0LjAwOGguMDg4Yy42MTkgMCAxLjEyMi41MDQgMS4xMjIgMS4xMjNWNy40OWMwIC42Mi0uNTAzIDEuMTIyLTEuMTIyIDEuMTIySDEuMTIyQTEuMTIyIDEuMTIyIDAgMDEwIDcuNDlWNS4xM2MwLS42MTguNTAzLTEuMTIyIDEuMTIyLTEuMTIyaC4wODlWMGgxdjQuMDA4em0xMS41NDkgMUgxLjEyQS4xMjMuMTIzIDAgMDAxIDUuMTNWNy40OWMwIC4wNjguMDU1LjEyMi4xMjIuMTIyaDEzLjcyNWEuMTIyLjEyMiAwIDAwLjEyMi0uMTIyVjUuMTNhLjEyMy4xMjMgMCAwMC0uMTIyLS4xMjJoLTEuMDg4em0tNS4zMDEgOS4wOTdsMi40MDUtMi4yNi42ODYuNzI4LTMuNTggMy4zNjMtMy41OC0zLjM2My42ODYtLjcyOCAyLjM4MyAyLjI0VjkuNTc3aDF2NC41Mjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoT3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaFF1ZXVlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoUXVldWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4zMzkgMTUuNDY0SDQuNzdhMy4yNDggMy4yNDggMCAwMS0zLjI0NS0zLjI0NFY0LjU0OUgwdi0xaDIuNTI2djguNjdhMi4yNDcgMi4yNDcgMCAwMDIuMjQ1IDIuMjQ1aDYuNTY4YTIuMjQ3IDIuMjQ3IDAgMDAyLjI0NC0yLjI0NFYzLjU0OWgyLjQ1NXYxaC0xLjQ1NXY3LjY3YTMuMjQ3IDMuMjQ3IDAgMDEtMy4yNDQgMy4yNDV6bS41MTMtNS45NjJ2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjkuNTAybDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY1LjI1bDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlYxbDMuODUgMS43MkwxMS44NTIgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hRdWV1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWFnbmV0ID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25ldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTUyIDEwLjcxYTMuMDA4IDMuMDA4IDAgMDA0LjE5LjczOGwxLjY0Mi0xLjE1IDEuMTUgMS42NDItMS42NDMgMS4xNWE1LjAxMyA1LjAxMyAwIDExLTUuNzUtOC4yMTJsMS42NDItMS4xNSAxLjE1IDEuNjQzLTEuNjQyIDEuMTVhMy4wMDcgMy4wMDcgMCAwMC0uNzM5IDQuMTg5em04LjI5Ni0yLjEzN2wxLjE1IDEuNjQzLTEuNjQzIDEuMTQ5LTEuMTUtMS42NDIgMS42NDMtMS4xNXptLTQuNi02LjU3MWwxLjE1IDEuNjQzLTEuNjQzIDEuMTUtMS4xNS0xLjY0MiAxLjY0Mi0xLjE1MXptMS45NyAxLjA2OEw5LjA3IDEuNDI4YTEuMDAzIDEuMDAzIDAgMDAtMS4zOTctLjI0NkwzLjU2NiA0LjA1N0E1Ljk5NSA1Ljk5NSAwIDAwMS4wOTIgNy45NGE1Ljk5MyA1Ljk5MyAwIDAwLjk5NiA0LjQ5NSA1Ljk5IDUuOTkgMCAwMDMuODgzIDIuNDczIDUuOTkxIDUuOTkxIDAgMDA0LjQ5NS0uOTk2bDQuMTA3LTIuODc1Yy40NTQtLjMxOC41NjMtLjk0My4yNDYtMS4zOTZsLTEuMTUtMS42NDNhMS4wMDIgMS4wMDIgMCAwMC0xLjM5Ni0uMjQ2bC00LjEwNyAyLjg3NWEyLjAwMiAyLjAwMiAwIDAxLTEuNDk4LjMzMiAyIDIgMCAwMS0xLjYyNy0yLjMyM2MuMDktLjUwNS4zNzEtLjk3Ni44MjQtMS4yOTRsNC4xMDctMi44NzZjLjQ1NC0uMzE3LjU2NC0uOTQyLjI0Ni0xLjM5NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4xNDMgMTUuODVsLTMuODcyLTMuODcyYS41LjUgMCAwMS0uMDM0LS43MzggNi4wMSA2LjAxIDAgMDAwLTguNDg2IDYuMDA0IDYuMDA0IDAgMDAtOC40ODQgMCA2LjAxIDYuMDEgMCAwMDAgOC40ODYgNS45NiA1Ljk2IDAgMDA0LjI0MiAxLjc1Ny41LjUgMCAwMTAgMSA2Ljk1NSA2Ljk1NSAwIDAxLTQuOTQ5LTIuMDVjLTIuNzI4LTIuNzMtMi43MjgtNy4xNzEgMC05LjkgMi43MjgtMi43MyA3LjE2OC0yLjczIDkuODk4IDAgMi42MDkgMi42MSAyLjcyMyA2Ljc4NS4zNDIgOS41MzJsMy41NjUgMy41NjRhLjUwMi41MDIgMCAwMS0uNzA4LjcwOHpNNi4yNTQgM2wuMjc3IDUuMDYzaC45MzVMNy43NTQgM2gtMS41em0uMjIyIDcuNTQ4YS43MjcuNzI3IDAgMDAuNTMzLjIyMi43MTcuNzE3IDAgMDAuNTItLjIyLjcxNS43MTUgMCAwMC4yMjUtLjUzLjcxNi43MTYgMCAwMC0uMjIyLS41MzQuNzI0LjcyNCAwIDAwLS41MjMtLjIxNi43MzEuNzMxIDAgMDAtLjUzMy4yMTkuNzE5LjcxOSAwIDAwLS4yMjIuNTNjMCAuMjA1LjA3NC4zOC4yMjIuNTI5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aE1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgNmEuNS41IDAgMDEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS43NCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwMDEyIDYuNSA1LjUgNS41IDAgMTA2LjUgMTJhLjUuNSAwIDExMCAxIDYuNSA2LjUgMCAxMTQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAxLS4xNC0uMzQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aE1pbnVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aFBsdXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhQbHVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA2aDIuNWEuNS41IDAgMDEwIDFIN3YyLjVhLjUuNSAwIDAxLTEgMFY3SDMuNWEuNS41IDAgMDEwLTFINlYzLjVhLjUuNSAwIDAxMSAwVjZ6bTMuMjQgNC43NGMwLS4xMTcuMDQtLjIyNS4xMDctLjMxQTUuNDc4IDUuNDc4IDAgMDAxMiA2LjUgNS41IDUuNSAwIDEwNi41IDEyYS41LjUgMCAxMTAgMSA2LjUgNi41IDAgMTE0LjkzNi0yLjI3bDQuNDE5IDQuNDE4YS41LjUgMCAwMS0uNzA3LjcwN2wtNC43NjgtNC43NjhhLjQ5OS40OTkgMCAwMS0uMTQtLjM0N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhQbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYXBNYXJrZXIgPSBmdW5jdGlvbiBFdWlJY29uTWFwTWFya2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NSAxNC4yMjRhLjUwMi41MDIgMCAwMC44OTcgMGw0LThhLjUuNSAwIDAwLjA1My0uMjM1IDQuNjcyIDQuNjcyIDAgMDAtLjA4NC0uNzA1IDUuNTM4IDUuNTM4IDAgMDAtLjUwNS0xLjUxMkMxMS4xODkgMi4zNjIgOS45MDYgMS41IDggMS41Yy0xLjkwNiAwLTMuMTkuODYyLTMuOTEgMi4yNzItLjI0OC40ODUtLjQxLjk5OC0uNTA2IDEuNTEyLS4wNTguMzEtLjA4LjU1NC0uMDg0LjcwNWEuNS41IDAgMDAuMDUzLjIzNWwzLjk5NyA4ek04IDVhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bS0zLjQ5My44OTVjLjAwOS0uMTA2LjAyNy0uMjUzLjA2LS40MjkuMDc5LS40MjQuMjEzLS44NDguNDEzLTEuMjM4QzUuNTM3IDMuMTM4IDYuNDg3IDIuNSA4IDIuNWMxLjUxMyAwIDIuNDYzLjYzOCAzLjAyIDEuNzI4LjIuMzkuMzM0LjgxNC40MTMgMS4yMzguMDMzLjE3Ni4wNTEuMzIzLjA2LjQzTDggMTIuODgxIDQuNTA3IDUuODk1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYXBNYXJrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbW9yeSA9IGZ1bmN0aW9uIEV1aUljb25NZW1vcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEwaDJWNkg3ek0zIDEwaDJWNkgzek0xMS4wMjUgMTBoMlY2aC0yek0zLjUgMTMuNzVoMXYtMi40aC0xek02LjE3NSAxMy43NWgxLjAwMXYtMi40SDYuMTc1ek04Ljg1IDEzLjc1aDF2LTIuNGgtMXpNMTEuNTI1IDEzLjc1aDF2LTIuNGgtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgM3Y3LjA1aDF2My42OThoMXYtMy42OTloMTJ2My42OTloMXYtMy42OTloMVYzSDB6bTEgNmgxNFY0SDF2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVtb3J5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDJoMTZ2MkgwVjJ6bTAgNWgxNnYySDBWN3ptMTYgNUgwdjJoMTZ2LTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVEb3duID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDcuNXpNMy41MSA0YS41MTMuNTEzIDAgMDEtLjUwMi0uNDEyTDMgMy41YzAtLjI3Ni4yMjgtLjUuNTEtLjVoOC45OGMuMjUgMCAuNDU5LjE4My41MDIuNDEyTDEzIDMuNWMwIC4yNzYtLjIyOC41LS41MS41SDguNDkzdjcuNzkybDIuMDYtMi4wNmEuNS41IDAgMTEuNzA3LjcwN0w5LjE0IDEyLjU2QTEuNDk2IDEuNDk2IDAgMDE4LjAyNiAxM0w3Ljk5MyAxM2EuNTAxLjUwMSAwIDAxLS4xMTgtLjAxNCAxLjQ5MyAxLjQ5MyAwIDAxLS44NTctLjQyNmwtMi4xMjItMi4xMmEuNS41IDAgMDEuNzA4LS43MDhsMS44ODkgMS44OVY0SDMuNTF6TTEzIDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwxMCA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkwxMyA3LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25NZW51TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE0IDcuMzgyYS41MDEuNTAxIDAgMDAtLjAxMy4xNTJjLS4wMTQuNC4xMzMuODA2LjQzOSAxLjExMmwyLjEyIDIuMTIyYS41LjUgMCAxMC43MDgtLjcwOEwyLjIwOCA4SDE0LjVhLjUuNSAwIDAwMC0xSDIuMzc5bDEuODg5LTEuODlhLjUuNSAwIDAwLS43MDctLjcwNkwxLjQ0IDYuNTI0Yy0uMjQxLjI0Mi0uMzgzLjU0NC0uNDI2Ljg1OHpNMTQuNSAzaC03YS41LjUgMCAwMDAgMWg3YS41LjUgMCAwMDAtMXptMCA4aC03YS41LjUgMCAxMDAgMWg3YS41LjUgMCAxMDAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25NZW51UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC45ODYgNy4zODJhLjUwMS41MDEgMCAwMS4wMTMuMTUyYy4wMTQuNC0uMTMzLjgwNi0uNDM5IDEuMTEybC0yLjEyIDIuMTIyYS41LjUgMCAxMS0uNzA4LS43MDhMMTMuNzkyIDhIMS41YS41LjUgMCAwMTAtMWgxMi4xMjFsLTEuODg5LTEuODlhLjUuNSAwIDAxLjcwNy0uNzA2bDIuMTIxIDIuMTJjLjI0MS4yNDIuMzgzLjU0NC40MjYuODU4ek0xLjUgM2g3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEwLTF6bTAgOGg3YS41LjUgMCAxMTAgMWgtN2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudVVwID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjAxIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMDEtLjQ4Ny0uNDEyTDEwLjAxIDguNXpNMTIuNSAxMmMuMjUgMCAuNDU5LjE4My41MDIuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjI4LjUtLjUxLjVIMy41MmEuNTEzLjUxMyAwIDAxLS41MDItLjQxMkwzLjAxIDEyLjVjMC0uMjc2LjIyOC0uNS41MS0uNWgzLjk4N1Y0LjIwOGwtMi4wNiAyLjA2YS41LjUgMCAxMS0uNzA3LS43MDdMNi44NiAzLjQ0QTEuNDk2IDEuNDk2IDAgMDE3Ljk3NCAzTDguMDA3IDNjLjA0IDAgLjA4LjAwNS4xMTguMDE0LjMxNC4wNDMuNjE2LjE4NS44NTcuNDI2bDIuMTIyIDIuMTJhLjUuNSAwIDAxLS43MDguNzA4bC0xLjg4OS0xLjg5VjEySDEyLjV6TTMgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA4LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA4LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVyZ2UgPSBmdW5jdGlvbiBFdWlJY29uTWVyZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjM1MiA2SDIuNWEuNS41IDAgMDEwLTFoNC44NTJMNS4xMiAyLjcyMWMtLjE4LS4xODMtLjE1NS0uNDYuMDU1LS42MTZhLjU1MS41NTEgMCAwMS43MDUuMDQ4bDMgMy4wNjJjLjE2LjE2NC4xNi40MDUgMCAuNTdsLTMgMy4wNjJBLjUzMi41MzIgMCAwMTUuNSA5YS41NC41NCAwIDAxLS4zMjUtLjEwNmMtLjIxLS4xNTctLjIzNS0uNDMzLS4wNTUtLjYxNkw3LjM1MiA2em0xLjI5NiA0SDEzLjVhLjUuNSAwIDAxMCAxSDguNjQ4bDIuMjMyIDIuMjc4Yy4xOC4xODMuMTU1LjQ2LS4wNTUuNjE3QS41NC41NCAwIDAxMTAuNSAxNGEuNTMyLjUzMiAwIDAxLS4zOC0uMTUzbC0zLTMuMDYzYS4zOTcuMzk3IDAgMDEwLS41NjhsMy0zLjA2M2EuNTUxLjU1MSAwIDAxLjcwNS0uMDQ3Yy4yMS4xNTYuMjM1LjQzMy4wNTUuNjE2TDguNjQ4IDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZXJnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWluaW1pemUgPSBmdW5jdGlvbiBFdWlJY29uTWluaW1pemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjE0NiAxNC4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6TTYuNSA4QTEuNSAxLjUgMCAwMTggOS41djNhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDAxMC0xaDN6bTItNWEuNS41IDAgMDEuNS41djNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDE4IDYuNXYtM2EuNS41IDAgMDEuNS0uNXptMS42NTEgMi4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbmltaXplOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NaW51cyA9IGZ1bmN0aW9uIEV1aUljb25NaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEuNSxcbiAgICB4OiAzLFxuICAgIHk6IDcuMjUsXG4gICAgcng6IDAuNVxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyek0zLjUgN2g4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0tNCA3YS41LjUgMCAwMDAgMWg4YS41LjUgMCAxMDAtMWgtOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxNnY1aDIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMDAgMkg3djVINXYtNUgwdi0yaDV2LTVoMnpNNyAwdjVoNXYySDd2NUg1VjdIMFY1aDVWMGgyem0xNiAwdjVoNXYyaC01djIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMC0yIDBWN2gtNVY1aDVWMGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAxMGMzLjA3MyAwIDUuODc3IDEuMTU1IDggMy4wNTZ2My4yNTJBOS44MiA5LjgyIDAgMTAxNi4zMDcgMzBoLTMuMjUxQTExLjk1NSAxMS45NTUgMCAwMTEwIDIyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6bTEgOHYzaDN2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZoLTJjMC03LjczMi02LjI2OC0xNC0xNC0xNFMyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTR2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjcgMjB2MTJoLTJWMjBoMnptLTUgNHY4aC0ydi04aDJ6bTEwLTJ2MTBoLTJWMjJoMnpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHpNNCAyNmEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6TTQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAyYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek00IDJhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNzggMjkuMDVjLjEwMi42NzcuMyAxLjMyMi41ODIgMS45MkExNS45NjMgMTUuOTYzIDAgMDExNiAzMmMtMS45OTMgMC0zLjktLjM2NC01LjY2LTEuMDMuMjgxLS41OTguNDgtMS4yNDMuNTgyLTEuOTIgMS41NzQuNjE0IDMuMjg3Ljk1IDUuMDc4Ljk1IDEuNzkxIDAgMy41MDQtLjMzNiA1LjA3OC0uOTV6bTkuODkyLTE4LjcxQTE1Ljk2MyAxNS45NjMgMCAwMTMyIDE2YzAgMS45OTMtLjM2NCAzLjktMS4wMyA1LjY2YTYuOTQ4IDYuOTQ4IDAgMDAtMS45Mi0uNTgyYy42MTQtMS41NzQuOTUtMy4yODcuOTUtNS4wNzggMC0xLjc5MS0uMzM2LTMuNTA0LS45NS01LjA3OGE2Ljk0OCA2Ljk0OCAwIDAwMS45Mi0uNTgyem0tMjkuOTQgMGMuNTk4LjI4MSAxLjI0My40OCAxLjkyLjU4MkExMy45NjUgMTMuOTY1IDAgMDAyIDE2YzAgMS43OTEuMzM2IDMuNTA0Ljk1IDUuMDc4LS42NzcuMTAyLTEuMzIyLjMtMS45Mi41ODJBMTUuOTY0IDE1Ljk2NCAwIDAxMCAxNmMwLTEuOTkzLjM2NC0zLjkgMS4wMy01LjY2ek0xNiAwYzEuOTkzIDAgMy45LjM2NCA1LjY2IDEuMDNhNi45NDggNi45NDggMCAwMC0uNTgyIDEuOTJBMTMuOTY1IDEzLjk2NSAwIDAwMTYgMmMtMS43OTEgMC0zLjUwNC4zMzYtNS4wNzguOTVhNi45NDggNi45NDggMCAwMC0uNTgyLTEuOTJBMTUuOTY0IDE1Ljk2NCAwIDAxMTYgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBjNS41MjMgMCAxMCA0LjQ3NyAxMCAxMHMtNC40NzcgMTAtMTAgMTBTNiAxNS41MjMgNiAxMCAxMC40NzcgMCAxNiAwem0wIDJhOCA4IDAgMTAwIDE2IDggOCAwIDAwMC0xNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOC40IDE5LjI4OGMuNDkyLjQwMiAxLjAxNS43NjYgMS41NjYgMS4wODdMNy4yNiAyMy42ODJhNCA0IDAgMTEtMS40MzctMS4yNDNsMi41NzgtMy4xNTF6bTE1LjIgMGwyLjU3NyAzLjE1YTQgNCAwIDExLTEuNDM3IDEuMjQzbC0yLjcwNi0zLjMwNmExMi4wMzIgMTIuMDMyIDAgMDAxLjU2NS0xLjA4N3pNNCAyNGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgNnYzaDN2MmgtM3YzaC0ydi0zaC0zVjloM1Y2aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMyAxNWgtNlY5aC0ydjZIOXYyaDZ2Nmgydi02aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbERhdGFWaXN1YWxpemVyID0gZnVuY3Rpb24gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIwdjEwaDEwdjJIMFYyMGgyem0zMCAwdjEySDIwdi0yaDEwVjIwaDJ6TTEyIDRhOCA4IDAgMTEwIDE2IDggOCAwIDAxMC0xNnptMCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6bTAtNnYySDJ2MTBIMFYwaDEyem0yMCAwdjEyaC0yVjJIMjBWMGgxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEuOTk3IDEyLjI1MWMtLjAxNy42ODktLjEwNCAxLjM2LS4yNTMgMi4wMDZhNiA2IDAgMTEtNy40ODcgNy40ODdjLS42NDYuMTUtMS4zMTcuMjM2LTIuMDA2LjI1M2E4IDggMCAxMDkuNzQ2LTkuNzQ2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbERhdGFWaXN1YWxpemVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMnY2aDZ2Mkgwdi04aDJ6bTE4IDB2OGgtOHYtMmg2di02aDJ6TTggMHYySDJ2NkgwVjBoOHptMTIgMHY4aC0yVjJoLTZWMGg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMTIgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptLTEyIDEuNzVhMi4yNSAyLjI1IDAgMTAwIDQuNSAyLjI1IDIuMjUgMCAwMDAtNC41em0xMiAwYTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpNMjggMTJhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6TTEwIDZhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxSZWdyZXNzaW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sUmVncmVzc2lvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDBhOCA4IDAgMTEtNC45MDYgMTQuMzJsLTQuNzc0IDQuNzc0YTggOCAwIDExLTEuNDE0LTEuNDE0bDQuNzc0LTQuNzc0QTggOCAwIDAxMjQgMHpNOCAxOGE2IDYgMCAxMDAgMTIgNiA2IDAgMDAwLTEyek0yNCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMyIDIwdjEySDIwVjIwaDEyem0tMiAyaC04djhoOHYtOHpNMTIgMHYxMkgwVjBoMTJ6bS0yIDJIMnY4aDhWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxSZWdyZXNzaW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Nb2JpbGUgPSBmdW5jdGlvbiBFdWlJY29uTW9iaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyLjVhLjUuNSAwIDAxLjUtLjVoM2EuNS41IDAgMDEwIDFoLTNhLjUuNSAwIDAxLS41LS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgMEExLjUgMS41IDAgMDAzIDEuNXYxM0ExLjUgMS41IDAgMDA0LjUgMTZoN2ExLjUgMS41IDAgMDAxLjUtMS41di0xM0ExLjUgMS41IDAgMDAxMS41IDBoLTd6TTQgMS41YS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxLjUuNVY0SDRWMS41ek00IDEzdjEuNWEuNS41IDAgMDAuNS41aDdhLjUuNSAwIDAwLjUtLjVWMTNINHptMC0xaDhWNUg0djd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vYmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTW9vbiA9IGZ1bmN0aW9uIEV1aUljb25Nb29uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43OTYgOS4wNDhjLTEuNTUyLTIuMjM4LTEuMTk5LTUuMzIzLjYxLTguMS0zLjQ3LS4xMi02LjYgMi4yMzItNy4yNjkgNS42NzItLjc0MiAzLjgyIDEuODMgNy41MzMgNS43NDkgOC4yOTRhNy4yMjYgNy4yMjYgMCAwMDcuNTI2LTMuMjE4Yy0yLjc5NC4xNzctNS4yNy0uNzExLTYuNjE2LTIuNjQ4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb29uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uTmFtZXNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDFoMTR2MTRIMVYxem0xMyAxMnYxSDJWMmgxMnYxMXpNNiA2aDR2NEg2VjZ6bS0xIDVWNWg2djZINXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDFhLjUuNSAwIDAxMCAxSDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRINS41YS41LjUgMCAxMTAgMUgzLjAwNkEyLjAwNSAyLjAwNSAwIDAxMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINS41em03LjQ5NCAwYzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXY5Ljk4OGEyLjAwNSAyLjAwNSAwIDAxLTEuODU2IDJsLS4xNS4wMDZIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxNGgyLjQ5NGMuNTE2IDAgLjk0MS0uMzg4IDEtLjg4OGwuMDA2LS4xMThWMy4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTIuOTk0IDJIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxaDIuNDk0ek01IDdhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6bTMgMGExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptMyAwYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5vZGUgPSBmdW5jdGlvbiBFdWlJY29uTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxLjQ0M2ExIDEgMCAwMC0xIDBMMi41NzIgNC4yOWExIDEgMCAwMC0uNS44NjZ2NS42OWExIDEgMCAwMC41Ljg2Nkw3LjUgMTQuNTU3YTEgMSAwIDAwMSAwbDQuOTI4LTIuODQ2YTEgMSAwIDAwLjUtLjg2NnYtNS42OWExIDEgMCAwMC0uNS0uODY2TDguNSAxLjQ0M3pNOSAuNTc3bDQuOTI4IDIuODQ2YTIgMiAwIDAxMSAxLjczMnY1LjY5YTIgMiAwIDAxLTEgMS43MzJMOSAxNS40MjNhMiAyIDAgMDEtMiAwbC00LjkyOC0yLjg0NmEyIDIgMCAwMS0xLTEuNzMydi01LjY5YTIgMiAwIDAxMS0xLjczMkw3IC41NzdhMiAyIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjgwOCAxMC4xOTdINi43OTZMNS44NTkgMTNINC40ODVsLjkzNy0yLjgwM0gzLjk2NmwuMjE5LTEuMjVoMS42NDdsLjYwOC0xLjgwNUg0Ljk5MWwuMjI2LTEuMjUxaDEuNjRsLjk1LTIuODQ0aDEuMzY4bC0uOTUgMi44NDRoMS4wMThsLjk1LTIuODQ0aDEuMzc0bC0uOTUgMi44NDRoMS41MWwtLjIxOCAxLjI1aC0xLjcwMmwtLjYwOCAxLjgwNWgxLjQ5N2wtLjIxOSAxLjI1MUg5LjE4Mkw4LjI1MiAxM0g2Ljg3OGwuOTMtMi44MDN6bS0uNjAyLTEuMjVoMS4wMTJsLjYxNS0xLjgwNUg3LjgxNGwtLjYwOCAxLjgwNHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uT2ZmbGluZSA9IGZ1bmN0aW9uIEV1aUljb25PZmZsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MTcgMTIuMjcxbDEuMjU0LTEuMjU0YTEuNSAxLjUgMCAxMS0xLjI1NCAxLjI1NHptMi45NDUtMi45NDRsLjc0LS43NGMuMzYxLjIwOC42OTQuNDY3Ljk4Ny43NzJhLjUuNSAwIDAxLS43MjEuNjkzIDMuNDI0IDMuNDI0IDAgMDAtMS4wMDYtLjcyNXptMi4xNjItMi4xNjNsLjcxNi0uNzE1Yy4zMDguMjMyLjU5OS40OS44Ny43NzJhLjUuNSAwIDExLS43MjIuNjkyIDYuMjYgNi4yNiAwIDAwLS44NjQtLjc0OXpNNy4wNjEgNi4wN0E2LjE5OCA2LjE5OCAwIDAwMy41NCA3Ljg4NWEuNS41IDAgMDEtLjcxNy0uNjk3IDcuMTk5IDcuMTk5IDAgMDE1LjMwOS0yLjE4N2wtMS4wNyAxLjA3em02LjY3Mi0xLjAxNGwuNzEtLjcxYy4yNzQuMjMuNTM2LjQ3Ni43ODYuNzM2YS41LjUgMCAwMS0uNzIxLjY5MiA5LjEgOS4xIDAgMDAtLjc3NS0uNzE4em0tMy44MDctMS44NUE5LjA2IDkuMDYgMCAwMDggM2E4Ljk5IDguOTkgMCAwMC02LjQ2OSAyLjczNC41LjUgMCAxMS0uNzE3LS42OTdBOS45OSA5Ljk5IDAgMDE4IDJjLjk0NCAwIDEuODY4LjEzMSAyLjc1LjM4MmwtLjgyNC44MjR6TTggMTNhLjUuNSAwIDEwMC0xIC41LjUgMCAwMDAgMXptLTUuNDI0IDFhLjUuNSAwIDAxLS43MDctLjcwN0wxNC4xNDYgMS4xNDZhLjUuNSAwIDAxLjcwOC43MDhMMi41NzYgMTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9mZmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk9ubGluZSA9IGZ1bmN0aW9uIEV1aUljb25PbmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6bTAtMWEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0zLjE4OS0zLjY0YS41LjUgMCAwMS0uNzIxLjY5MkEzLjQwOCAzLjQwOCAwIDAwOCA5Yy0uOTM3IDAtMS44MTMuMzc4LTIuNDUzIDEuMDM3YS41LjUgMCAwMS0uNzE3LS42OTdBNC40MDggNC40MDggMCAwMTggOGMxLjIyIDAgMi4zNjEuNDk3IDMuMTg5IDEuMzZ6bTIuMDItMi4xNGEuNS41IDAgMTEtLjcyMS42OTNBNi4yIDYuMiAwIDAwOCA2YTYuMTk5IDYuMTk5IDAgMDAtNC40NiAxLjg4NS41LjUgMCAwMS0uNzE4LS42OTdBNy4xOTkgNy4xOTkgMCAwMTggNWE3LjIgNy4yIDAgMDE1LjIxIDIuMjJ6bTIuMDItMi4xMzhhLjUuNSAwIDAxLS43MjEuNjkyQTguOTkgOC45OSAwIDAwOCAzYTguOTkgOC45OSAwIDAwLTYuNDY5IDIuNzM0LjUuNSAwIDExLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwMTggMmE5Ljk5IDkuOTkgMCAwMTcuMjMgMy4wODJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9ubGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNDQ3IDMuNzI0bC02LTNhMSAxIDAgMDAtLjg5NCAwbC02IDNBMSAxIDAgMDAxIDQuNjE4djYuNzY0YTEgMSAwIDAwLjU1My44OTRsNiAzYTEgMSAwIDAwLjg5NCAwbDYtM2ExIDEgMCAwMC41NTMtLjg5NFY0LjYxOGExIDEgMCAwMC0uNTUzLS44OTR6TTUuODcxIDUuODk3bDUuMzQzLTIuNjcyIDIuMTU4IDEuMDc5TDggNi45NDN6TTggMS42MThsMi4wOTYgMS4wNDgtNS4zNTMgMi42NzctMi4xMTUtMS4wMzl6TTIgNS4xMWwyLjI1IDEuMTA1VjlhLjUuNSAwIDAwMSAwVjYuNzA2TDcuNSA3LjgxMXY2LjMyMUwyIDExLjM4MnptNi41IDkuMDIydi02LjMyTDE0IDUuMTF2Ni4yNzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhZ2VTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZVNlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDVhNC45OTUgNC45OTUgMCAwMS0uNTg0LTFIM1YyaDd2MmExIDEgMCAwMDEgMWgydjIuMWMuMzQ4LjA3LjY4Mi4xNzcgMSAuMzE2VjRhMSAxIDAgMDAtLjI5My0uNzA3bC0yLTJBMSAxIDAgMDAxMSAxSDN6bTEzIDExYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZVNlbGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFnZXNTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZXNTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAxMS0xaDhhMSAxIDAgMDEuNzA3LjI5M2wyIDJBMSAxIDAgMDExNSAzdjVhNC45OTUgNC45OTUgMCAwMC0xLS41ODRWNGgtMmExIDEgMCAwMS0xLTFWMUg0djEyaDMuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFINGExIDEgMCAwMS0xLTFWMXptNSAxNEgyVjJhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDdhNS4wMjkgNS4wMjkgMCAwMS0xLTF6bTgtM2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VzU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWludCA9IGZ1bmN0aW9uIEV1aUljb25QYWludChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5MyA4LjE3YzAgLjgzLS42NzMgMS41MDctMS40OTkgMS41MDdINS40OThBMS41MDUgMS41MDUgMCAwMTMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN3ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2ek00IDUuNjU4aDEuMjYyVjEuMDA1SDR2NC42NTN6bTIuMjYxIDBoMS4yNDRWMS4wMDVINi4yNnY0LjY1M3ptMi4yNDQgMGgxLjIzNVYxLjAwNUg4LjUwNHY0LjY1M3ptMi4yMzQgMGgxLjI1NFYxLjAwNWgtMS4yNTR2NC42NTN6TTMuMDA4IDBMMyA4LjE3YTIuNTA5IDIuNTA5IDAgMDAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwMDIuNDk4LTIuNTEyTDEzIDBIMy4wMDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXBlckNsaXAgPSBmdW5jdGlvbiBFdWlJY29uUGFwZXJDbGlwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NCAyLjAxOUwzLjA0NiA4LjU3Yy0uOTg3Ljk1Mi0xLjEzMyAyLjUxNy0uMTk5IDMuNTE2Ljk1MSAxLjAyMSAyLjU4IDEuMTA2IDMuNjQuMTkuMDM0LS4wMy4wNjgtLjA2MS4xLS4wOTJsNS42NTUtNS40NTJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MjkgMEw1LjkyIDExLjQyMWMtLjU3Mi41NTEtMS41MDUuNjU3LTIuMTMxLjE2M2ExLjQ1NSAxLjQ1NSAwIDAxLS4xMTgtMi4yMTFsNi44OTktNi42NTFhMi42NDYgMi42NDYgMCAwMTMuNjQ0IDAgMi40MjIgMi40MjIgMCAwMTAgMy41MTNMNy4zIDEyLjkwMWMtMS4zMzMgMS4yODUtMy40OTcgMS40OTMtNC45NS4zMzYtMS41NC0xLjIyLTEuNzY0LTMuNDExLS41LTQuODk3YTMuMzMgMy4zMyAwIDAxLjIzOC0uMjUybDUuNzgtNS41NzJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MyAwbC01Ljc4IDUuNTcyYTQuMzYgNC4zNiAwIDAwMCA2LjMyNGMyLjE4OCAyLjEwOSA1LjIwMiAxLjMxIDYuNjYtLjA5NWw2LjkyNS02LjY3NmEzLjM5IDMuMzkgMCAwMDAtNC45MkMxMy41MzQuNjYgMTEuMjUuNjYgOS44NDEgMi4wMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcGVyQ2xpcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFydGlhbCA9IGZ1bmN0aW9uIEV1aUljb25QYXJ0aWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi42NjQgMTQuODcxYTcgNyAwIDAxLTIuNDItMTIuNzc4LjUuNSAwIDAxLjYxMi4wNmMuNDU2LjQzMSA4LjIxNiA4LjIxMiA4Ljk4IDkuMDAyYS41LjUgMCAwMS4wNjMuNjE4IDcuMDAyIDcuMDAyIDAgMDEtNy4yMzUgMy4wOTh6bTYuMTY4LTMuMzEyYTE5NjEuNzMzIDE5NjEuNzMzIDAgMDAtOC4zNzctOC40IDYgNiAwIDEwOC4zNzggOC40em0yLjA5NS0yLjU0OGEuNS41IDAgMTEtLjk5LS4xNDRjLjAxLS4wNjYuMDEtLjA2Ni4wMTgtLjEzM2E2LjAwNyA2LjAwNyAwIDAwLS4wMzQtMS43MTQuNS41IDAgMTEuOTg3LS4xNjNjLjEwOC42NTUuMTIyIDEuMzI2LjA0IDEuOTk5bC0uMDIxLjE1NXptLTEuMjczLTUuMTM4YS41LjUgMCAxMS0uODA4LjU5IDYuMDI2IDYuMDI2IDAgMDAtMS4zMDQtMS4zMDguNS41IDAgMDEuNTktLjgwNiA3LjAyNiA3LjAyNiAwIDAxMS41MjIgMS41MjR6TTkuMTY5IDEuMDk4YS41LjUgMCAxMS0uMTY2Ljk4NiA2LjEwNSA2LjEwNSAwIDAwLTEuODQ5LS4wMjYuNS41IDAgMDEtLjE0LS45OSA3LjAyIDcuMDIgMCAwMTIuMTU1LjAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXJ0aWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXVzZSA9IGZ1bmN0aW9uIEV1aUljb25QYXVzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTYgMGExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhdXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXltZW50ID0gZnVuY3Rpb24gRXVpSWNvblBheW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNTg2IDIuNTg2QTIgMiAwIDAwMCA0aDFhMSAxIDAgMDExLTFWMmEyIDIgMCAwMC0xLjQxNC41ODZ6TTIgMmgxMC41YS41LjUgMCAwMTAgMUgyVjJ6TTAgNGgxdjYuNWEuNS41IDAgMDEtMSAwVjR6bTIuNTg2LjU4NkEyIDIgMCAwMDIgNmgxYTEgMSAwIDAxMS0xVjRhMiAyIDAgMDAtMS40MTQuNTg2em0wIDguODI4QTIgMiAwIDAxMiAxMmgxYTEgMSAwIDAwMSAxdjFhMiAyIDAgMDEtMS40MTQtLjU4NnptMTIuODI4LTguODI4QTIgMiAwIDAxMTYgNmgtMWExIDEgMCAwMC0xLTFWNGEyIDIgMCAwMTEuNDE0LjU4NnptMCA4LjgyOEEyIDIgMCAwMDE2IDEyaC0xYTEgMSAwIDAxLTEgMXYxYTIgMiAwIDAwMS40MTQtLjU4NnpNNCA0aDEwdjFINHpNMyA3aDEydjFIM3ptMSA2aDEwdjFINHpNMiA2aDF2Nkgyem0xMyAwaDF2NmgtMXptLTUuNSA0YS41LjUgMCAwMTAgMUg3LjQ5NmEuNS41IDAgMDEwLTFIOS41em00IDBhLjUuNSAwIDAxMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF5bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGVuY2lsID0gZnVuY3Rpb24gRXVpSWNvblBlbmNpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0OCAzLjE0OEwxMSAybC05IDl2M2gzbDktOS0xLjE0NC0xLjE0NC04LjAwMiA3Ljk5OGEuNTAyLjUwMiAwIDAxLS43MDggMCAuNTAyLjUwMiAwIDAxMC0uNzA4bDguMDAyLTcuOTk4ek0xMSAxYy4yNTYgMCAuNTEyLjA5OC43MDcuMjkzbDMgM2EuOTk5Ljk5OSAwIDAxMCAxLjQxNGwtOSA5QS45OTcuOTk3IDAgMDE1IDE1SDJhMSAxIDAgMDEtMS0xdi0zYzAtLjI2NS4xMDUtLjUyLjI5My0uNzA3bDktOUEuOTk3Ljk5NyAwIDAxMTEgMXpNNSAxNEgydi0zbDMgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVuY2lsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QZXJjZW50ID0gZnVuY3Rpb24gRXVpSWNvblBlcmNlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSA4YzEuMTA1IDAgMi0xLjEyIDItMi41UzYuMTA1IDMgNSAzIDMgNC4xMiAzIDUuNSAzLjg5NSA4IDUgOHptMC0xYy4zNTYgMCAxLS40NTIgMS0xLjVTNS4zNTYgNCA1IDRzLTEgLjQ1Mi0xIDEuNVM0LjY0NCA3IDUgN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgM0gxMkw1LjUgMTNINGw2LjUtMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTAuNWMwIDEuMzgtLjg5NSAyLjUtMiAyLjVzLTItMS4xMi0yLTIuNVM5Ljg5NSA4IDExIDhzMiAxLjEyIDIgMi41em0tMSAwYzAgMS4wNDgtLjY0NCAxLjUtMSAxLjVzLTEtLjQ1Mi0xLTEuNS42NDQtMS41IDEtMS41IDEgLjQ1MiAxIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVyY2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGluID0gZnVuY3Rpb24gRXVpSWNvblBpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDExaDQuNWEuNS41IDAgMTAwLTFoLTEwYS41LjUgMCAwMDAgMUg3djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTF6TTQgNGgxdjZINFY0em02IDBoMXY2aC0xVjR6TTQuMjg2IDJDNC4wOCAyIDQgMi4wNjMgNCAydjFjMC0uMDYzLjA4IDAgLjI4NiAwaDYuNDI4QzEwLjkyIDMgMTEgMi45MzcgMTEgM1YyYzAgLjA2My0uMDggMC0uMjg2IDBINC4yODZ6bTAtMWg2LjQyOEMxMS40MjQgMSAxMiAxLjQ0OCAxMiAydjFjMCAuNTUyLS41NzYgMS0xLjI4NiAxSDQuMjg2QzMuNTc2IDQgMyAzLjU1MiAzIDNWMmMwLS41NTIuNTc2LTEgMS4yODYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QaW5GaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGluRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMWg0LjVhLjUuNSAwIDEwMC0xaC0xMGEuNS41IDAgMTAwIDFIOHY0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExek01IDRoN3Y2SDVWNHptLjI4Ni0zaDYuNDI4QzEyLjQyNCAxIDEzIDEuNDQ4IDEzIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINS4yODZDNC41NzYgNCA0IDMuNTUyIDQgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW5GaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsYXkgPSBmdW5jdGlvbiBFdWlJY29uUGxheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjA4IDMuMDYzQzQuMzQ1IDIuODk1IDQgMy4wODkgNCAzLjQxOHY5LjE2N2MwIC4zMjkuMzQ1LjUyMy42MDguMzU2bDcuMi00LjU4NGEuNDI2LjQyNiAwIDAwMC0uNzExbC03LjItNC41ODN6bS41MzgtLjg0NGw3LjIgNC41ODNhMS40MjYgMS40MjYgMCAwMTAgMi4zOTlsLTcuMiA0LjU4M0M0LjIxIDE0LjM4IDMgMTMuNjk2IDMgMTIuNTg1VjMuNDE4QzMgMi4zMDcgNC4yMSAxLjYyNCA1LjE0NiAyLjIyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbGF5RmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsYXlGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4zNDUgNi44MDFsLTcuMi00LjU4MUM0LjIxIDEuNjI1IDMgMi4zMDggMyAzLjQxOXY5LjE2MmMwIDEuMTExIDEuMjEgMS43OTQgMi4xNDYgMS4xOTlsNy4yLTQuNTgxYTEuNDI1IDEuNDI1IDAgMDAwLTIuMzk4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5RmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzID0gZnVuY3Rpb24gRXVpSWNvblBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjI1IDNhLjUuNSAwIDAxLjUuNXYzLjc1aDMuNzVhLjUuNSAwIDAxLjUuNXYuNWEuNS41IDAgMDEtLjUuNUg4Ljc1djMuNzVhLjUuNSAwIDAxLS41LjVoLS41YS41LjUgMCAwMS0uNS0uNVY4Ljc1SDMuNWEuNS41IDAgMDEtLjUtLjV2LS41YS41LjUgMCAwMS41LS41aDMuNzVWMy41YS41LjUgMCAwMS41LS41aC41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggN2gzLjVhLjUuNSAwIDExMCAxSDh2My41YS41LjUgMCAxMS0xIDBWOEgzLjVhLjUuNSAwIDAxMC0xSDdWMy41YS41LjUgMCAwMTEgMFY3em0tLjUtN0MxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDdWMy41YS41LjUgMCAwMC0xIDBWN0gzLjVhLjUuNSAwIDAwMCAxSDd2My41YS41LjUgMCAxMDEgMFY4aDMuNWEuNS41IDAgMTAwLTFIOHptLS41IDhhNy41IDcuNSAwIDExMC0xNSA3LjUgNy41IDAgMDEwIDE1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBvcG91dCA9IGZ1bmN0aW9uIEV1aUljb25Qb3BvdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA4LjVhLjUuNSAwIDExMSAwVjEyYTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yaDMuNWEuNS41IDAgMDEwIDFINGExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjguNXptLTUuMTIuMzM5YS41LjUgMCAxMS0uNzA2LS43MDdMMTMuMzA1IDJIMTAuNWEuNS41IDAgMTEwLTFIMTRhMSAxIDAgMDExIDF2My41YS41LjUgMCAxMS0xIDBWMi43Mkw3Ljg4IDguODM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Qb3BvdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblB1c2ggPSBmdW5jdGlvbiBFdWlJY29uUHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTcxIDUuMTVMMTAuMTE0IDdIMS41NTZDMS4yNDkgNyAxIDcuMjI0IDEgNy41cy4yNDkuNS41NTYuNWg4LjUyNmwtMS45MSAxLjgyYS41Mi41MiAwIDAwMCAuNzdjLjIyNy4yMTMuNi4yMTMuODI4IDBsMi4wNS0xLjk1YTEuNTUyIDEuNTUyIDAgMDAwLTIuMzFMOSA0LjM4YS42MTcuNjE3IDAgMDAtLjgyOSAwIC41Mi41MiAwIDAwMCAuNzd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjgwNCAxMi43OTJBLjk5My45OTMgMCAwMTYgMTEuODJWMTBINXYxLjgyNmMwIC45NDUuNjczIDEuNzYgMS42MDggMS45NDVsNiAxLjE5QTEuOTkyIDEuOTkyIDAgMDAxNSAxMy4wMTZWMS45ODRBMiAyIDAgMDAxMi42MDguMDRsLTYgMS4xOUM1LjY3MyAxLjQxNSA1IDIuMjMgNSAzLjE3NVY1aDFWMy4xOGMwLS40NzIuMzM2LS44NzkuODA0LS45NzJsNi0xLjE4OUExIDEgMCAwMTE0IDEuOTkxdjExLjAxOGEuOTk1Ljk5NSAwIDAxLTEuMTk2Ljk3MmwtNi0xLjE5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdWVzdGlvbkluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnptMC0xQTUgNSAwIDEwOCAzYTUgNSAwIDAwMCAxMHptLS4xODYtMS4wNjVBLjc4NS43ODUgMCAwMTcgMTEuMTJjMC0uNDguMzQtLjgyLjgxNC0uODIuNDc1IDAgLjgwOS4zNC44MDkuODIgMCAuNDc1LS4zMzQuODE1LS44MDkuODE1ek01LjkgNi4zMTdDNS45NiA1LjE2OCA2Ljc1NSA0LjQgOC4wNDggNC40YzEuMjE4IDAgMi4wOTEuNzU5IDIuMDkxIDEuOCAwIC43MzYtLjM2IDEuMzA0LTEuMDMgMS43MDctLjU2LjMzLS43MTcuNTYtLjcxNyAxLjAyMnYuMzA1bC0uMS4xSDcuNDdsLS4xLS4xdi0uNDMxYy0uMDA1LS42NDYuMzAyLTEuMTA0Ljk4Ny0xLjUxNC41MjctLjMyMi43MDgtLjU5LjcwOC0xLjA0NyAwLS41MzYtLjQxNi0uOTEtMS4wNS0uOTEtLjY1MiAwLTEuMDY0LjM3NC0xLjExMi45OThsLS4xLjA5Mkg2bC0uMS0uMTA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25RdWVzdGlvbkluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdW90ZSA9IGZ1bmN0aW9uIEV1aUljb25RdW90ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODQ4IDIuNDdhMSAxIDAgMDEtLjMxOCAxLjM3OEE3LjI4NCA3LjI4NCAwIDAwMy43NSA3LjAxIDMgMyAwIDExMSAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAxLjAxLS4yMzJjLjAwOS0uMTUuMDI3LS4zNi4wNjItLjYxOC4wNy0uNTEzLjIwNy0xLjIyLjQ4NC0yLjAxNC41NTItMS41OSAxLjY3LTMuNTU1IDMuOTE0LTQuOTU3YTEgMSAwIDAxMS4zNzguMzE4em03IDBhMSAxIDAgMDEtLjMxOCAxLjM3OCA3LjI4MyA3LjI4MyAwIDAwLTIuNzggMy4xNjJBMyAzIDAgMTE4IDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMDEuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMDExLjM3OC4zMTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1b3RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblJlZnJlc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yMjggMi45NDJhLjUuNSAwIDExLS41MzguODQyQTUgNSAwIDEwMTMgOGEuNS41IDAgMTExIDAgNiA2IDAgMTEtMi43NzItNS4wNTh6TTE0IDEuNXYzQTEuNSAxLjUgMCAwMTEyLjUgNmgtM2EuNS41IDAgMDEwLTFoM2EuNS41IDAgMDAuNS0uNXYtM2EuNS41IDAgMTExIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJlcG9ydGVyID0gZnVuY3Rpb24gRXVpSWNvblJlcG9ydGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNjg0Ljg5NUw2LjA3NC4zNThhMSAxIDAgMDAtMS4yOTYuNzUzTDQuMiA0SDIuNWEuNS41IDAgMDAwIDFoMS42MjZhNC4wMDcgNC4wMDcgMCAwMC4xMSAyLjM1OWwtMi4wNzItLjM0NUExIDEgMCAwMDEgOHYxYy4zNjQgMCAuNzA2LjA5NyAxIC4yNjhWOGwxIC4xNjcgMS44NTkuMzEgMi4xNjMuMzYuNDc4LjA4djZMMiAxNHYtMS4yNjhBMS45OSAxLjk5IDAgMDExIDEzdjFhMSAxIDAgMDAuODM2Ljk4Nmw2IDFjLjEwOC4wMTguMjIuMDE4LjMyOCAwbDYtMUExIDEgMCAwMDE1IDE0di0xYTEuOTkgMS45OSAwIDAxLTEtLjI2OFYxNGwtNS41LjkxN3YtNmwuNDc4LS4wOCAyLjE2My0uMzZMMTMgOC4xNjYgMTQgOHYxLjI2OEExLjk5IDEuOTkgMCAwMTE1IDlWOGExIDEgMCAwMC0xLjE2NC0uOTg2bC0yLjA3My4zNDVBMy45OTEgMy45OTEgMCAwMDExLjg3NCA1SDEzLjVhLjUuNSAwIDAwMC0xaC0xLjdsLS41NzgtMi44OUExIDEgMCAwMDkuOTI1LjM1OUw4LjMxNi44OTVhMSAxIDAgMDEtLjYzMiAwem0yLjg4IDYuNjY0QTMuMDEzIDMuMDEzIDAgMDAxMC44MyA1SDUuMTdhMy4wMTMgMy4wMTMgMCAwMC4yNjYgMi41NTlMOCA3Ljk4NmwyLjU2NC0uNDI3ek0xMC44IDRIOS4yTDkgM2wxLjUtLjUuMyAxLjV6TTEgMTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTE0IDBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlcG9ydGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZXR1cm5LZXkgPSBmdW5jdGlvbiBFdWlJY29uUmV0dXJuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk0IDRjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djEuOTg4YTIuMDA1IDIuMDA1IDAgMDEtMS44NTYgMkwxMiAxMEgzLjQ4NGwxLjkxIDEuODJhLjUyLjUyIDAgMDEwIC43Ny42MTYuNjE2IDAgMDEtLjgyOSAwbC0yLjA1LTEuOTVhMS41NTEgMS41NTEgMCAwMTAtMi4zMWwyLjA1LTEuOTVhLjYxNy42MTcgMCAwMS44MyAwIC41Mi41MiAwIDAxMCAuNzdMMy40NSA5SDEyYy41MTQtLjAwMy45MzUtLjM5Ljk5My0uODg4TDEzIDcuOTk0VjYuMDA2YzAtLjUxNi0uMzg4LS45NDEtLjg4OC0xTDExLjk5NCA1SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDRoMi40OTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJldHVybktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2F2ZSA9IGZ1bmN0aW9uIEV1aUljb25TYXZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4wMDggMkgyLjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzV2MTEuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gxMS40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjQuNjJjMC0uMTMtLjAwMS0uMTgtLjAwNC0uMjA0YTIuNjU0IDIuNjU0IDAgMDAtLjE0MS0uMTQ3TDExLjczIDIuMTQ1YTIuNjU0IDIuNjU0IDAgMDAtLjE0Ny0uMTQxQTIuNjU0IDIuNjU0IDAgMDAxMS4zOCAyaC0uMzg4Yy4wMDUuMDguMDA4LjE3Mi4wMDguMjgydjIuNDM2YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRINi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhDNS4wNDYgNS4zMjUgNSA1LjE2NCA1IDQuNzE4VjIuMjgyYzAtLjExLjAwMy0uMjAyLjAwOC0uMjgyek0yLjI4MiAxaDkuMDk4Yy4yNTkgMCAuMzQ4LjAxLjQ0Ny4wMzJhLjg3Ljg3IDAgMDEuMjczLjExM2MuMDg2LjA1NC4xNTYuMTEuMzM4LjI5M2wyLjEyNCAyLjEyNGMuMTgyLjE4Mi4yMzkuMjUyLjI5My4zMzhhLjg3Ljg3IDAgMDEuMTEzLjI3M2MuMDIzLjEuMDMyLjE4OC4wMzIuNDQ3djkuMDk4YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRIMi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhjLS4wODgtLjE2My0uMTM0LS4zMjQtLjEzNC0uNzdWMi4yODJjMC0uNDQ2LjA0Ni0uNjA3LjEzNC0uNzdhLjkwOS45MDkgMCAwMS4zNzgtLjM3OGMuMTYzLS4wODguMzI0LS4xMzQuNzctLjEzNHpNNiAyLjI4MnYyLjQzNmMwIC4xODEuMDAyLjI0NS4wMDcuMjc1LjAzLjAwNS4wOTQuMDA3LjI3NS4wMDdoMy40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjIuMjgyYzAtLjE4MS0uMDAyLS4yNDUtLjAwNy0uMjc1QTIuMjQ4IDIuMjQ4IDAgMDA5LjcxOCAySDYuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXpNOCAxMmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMC0xYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TYXZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TY2FsZSA9IGZ1bmN0aW9uIEV1aUljb25TY2FsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41IDEyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDBhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem00LTJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0yLTFhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMC0zYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTItMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem02LTZhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TY2FsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvblNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjI3MSAxMS45NzhsMy44NzIgMy44NzNhLjUwMi41MDIgMCAwMC43MDggMCAuNTAyLjUwMiAwIDAwMC0uNzA4bC0zLjU2NS0zLjU2NGMyLjM4LTIuNzQ3IDIuMjY3LTYuOTIzLS4zNDItOS41MzItMi43My0yLjczLTcuMTctMi43My05Ljg5OCAwLTIuNzI4IDIuNzI5LTIuNzI4IDcuMTcgMCA5LjlhNi45NTUgNi45NTUgMCAwMDQuOTQ5IDIuMDUuNS41IDAgMDAwLTEgNS45NiA1Ljk2IDAgMDEtNC4yNDItMS43NTcgNi4wMSA2LjAxIDAgMDEwLTguNDg2YzIuMzM3LTIuMzQgNi4xNDMtMi4zNCA4LjQ4NCAwYTYuMDEgNi4wMSAwIDAxMCA4LjQ4Ni41LjUgMCAwMC4wMzQuNzM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjg3NSAzLjQxOGE2IDYgMCAxMC43MDcuNzA3bC0yLjQ2IDIuNDYtMS4xNTYgMS4xNTZhMSAxIDAgMTEtLjcwNy0uNzA3bC43NTctLjc1N2EyIDIgMCAwMC0yLjQzIDMuMTM3LjUuNSAwIDExLS43MDcuNzA3IDMgMyAwIDAxMy44Ni00LjU2N2wuNzE0LS43MTRBNCA0IDAgMTA4IDEyYS41LjUgMCAxMTAgMSA1IDUgMCAxMTMuMTY0LTguODcxbC43MS0uNzF6bS43MDktLjcwOWE3IDcgMCAxMC43MDcuNzA3bC4zNjYtLjM2NmEuNS41IDAgMTAtLjcwNy0uNzA3bC0uMzY2LjM2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMDAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxMDggMTVhNC45OTQgNC45OTQgMCAwMS0uNTk3LTEuMDMgNiA2IDAgMTE0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxMC00LjA4IDguNzg4IDUuMDI3IDUuMDI3IDAgMDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAxOCA0YTMuOTggMy45OCAwIDAxMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAwLTMuODYgNC41NjcuNS41IDAgMTAuNzA4LS43MDcgMiAyIDAgMDEyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxMC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAxMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS00IC41YS41NzcuNTc3IDAgMDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDExMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDEwLS43MDctLjcwN2wtLjM2Ni4zNjZBNyA3IDAgMTA4IDE1YTQuOTk0IDQuOTk0IDAgMDEtLjU5Ny0xLjAzIDYgNiAwIDExNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMTAtNC4wOCA4Ljc4OCA1LjAyOCA1LjAyOCAwIDAxLS4wODItMS4wNDJBNC4wMDIgNC4wMDIgMCAwMTggNGEzLjk4IDMuOTggMCAwMTIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwMC0zLjg2IDQuNTY3LjUuNSAwIDEwLjcwOC0uNzA3IDIgMiAwIDAxMi40My0zLjEzN2wtLjc1Ny43NTdhMSAxIDAgMTAuNzA3LjcwN2wxLjE1NS0xLjE1NSAyLjQ2LTIuNDZhNS45NzIgNS45NzIgMCAwMTEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAxMCAuNzA3bC0yLjUgMi41YS41LjUgMCAwMS0uNzA4IDBsLTEtMWEuNS41IDAgMDEuNzA4LS43MDdsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAxLjcwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZXNzaW9uVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNlc3Npb25WaWV3ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDZoMXYxSDRWNnptMiAySDVWN2gxdjF6bTAgMVY4aDF2MUg2em0tMSAxVjloMXYxSDV6bTAgMHYxSDR2LTFoMXptMiAwaDR2MUg3di0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2ExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYxMGExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWM3ptMSAxaDEydjlIMlY0elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2Vzc2lvblZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2hhcmQgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjEzNCA3LjAzMUw4IDEyLjc2NGwyLjg2Ni01LjczM0w4IDIuMDE2IDUuMTM0IDcuMDN6TTggMGw0IDctNCA4LTQtOCA0LTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TaGFyZSA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi44MXY2LjM4YzAgLjQ5My40NDguOS45OTIuOWg3LjAxNmMuNTQzIDAgLjk5Mi0uNDA2Ljk5Mi0uOVY2LjgxYzAtLjQ5My0uNDQ4LS45LS45OTItLjlIMy45OTJjLS41NDMgMC0uOTkyLjQwNi0uOTkyLjl6TTYgNXYuOTFoM1Y1aDIuMDA4QzEyLjEwOCA1IDEzIDUuODE4IDEzIDYuODF2Ni4zOGMwIDEtLjkgMS44MS0xLjk5MiAxLjgxSDMuOTkyQzIuODkyIDE1IDIgMTQuMTgyIDIgMTMuMTlWNi44MUMyIDUuODEgMi45IDUgMy45OTIgNUg2em0xLjk5Ny0zLjU1MkEuNTA2LjUwNiAwIDAxOCAxLjV2OGEuNS41IDAgMDEtMSAwdi04YS41MS41MSAwIDAxMC0uMDE3TDUuMTggMy4zOTRhLjUyLjUyIDAgMDEtLjc3IDAgLjYxNy42MTcgMCAwMTAtLjgyOUw2LjM2LjUxNWExLjU1MiAxLjU1MiAwIDAxMi4zMSAwbDEuOTUgMi4wNWMuMjE0LjIyOS4yMTQuNjAxIDAgLjgzYS41Mi41MiAwIDAxLS43NyAwTDcuOTk3IDEuNDQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaGFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU25vd2ZsYWtlID0gZnVuY3Rpb24gRXVpSWNvblNub3dmbGFrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjAwNy41YS41LjUgMCAwMTEgMHYyLjAyNGEuOTk5Ljk5OSAwIDAwLjI2OC0uMjI3bDEuMDI3LTEuMjMzYS41LjUgMCAwMS43NjkuNjRMOC4yNzUgMy44NmEuOTk5Ljk5OSAwIDAxLS4yNjguMjI3djIuNTQ4bDIuMjA3LTEuMjc0YzAtLjExNC4wMi0uMjMxLjA2Mi0uMzQ2bC45NjgtMi42MzJhLjUuNSAwIDExLjkzOC4zNDVsLS41NTQgMS41MDZhLjk5OC45OTggMCAwMC0uMDYyLjM0NmwxLjc1My0xLjAxMmEuNS41IDAgMTEuNS44NjZsLTEuNzUzIDEuMDEyYy4xLjA1Ny4yMS4wOTguMzMuMTE5bDEuNTgyLjI3M2EuNS41IDAgMTEtLjE3Ljk4NmwtMi43NjQtLjQ3OGExIDEgMCAwMS0uMzMtLjEyTDguNTA2IDcuNWwyLjIwNyAxLjI3NGExIDEgMCAwMS4zMy0uMTE5bDIuNzY0LS40NzhhLjUuNSAwIDExLjE3Ljk4NmwtMS41ODIuMjczYS45OTkuOTk5IDAgMDAtLjMzLjEybDEuNzUzIDEuMDExYS41LjUgMCAxMS0uNS44NjZsLTEuNzUzLTEuMDEyYzAgLjExNS4wMi4yMzEuMDYyLjM0NmwuNTU0IDEuNTA2YS41LjUgMCAwMS0uOTM4LjM0NWwtLjk2OC0yLjYzMmEuOTk5Ljk5OSAwIDAxLS4wNjItLjM0Nkw4LjAwNyA4LjM2NnYyLjU0OGMuMDk4LjA1OC4xOS4xMzMuMjY4LjIyN2wxLjc5NiAyLjE1NWEuNS41IDAgMDEtLjc2OS42NGwtMS4wMjctMS4yMzNhLjk5OS45OTkgMCAwMC0uMjY4LS4yMjZWMTQuNWEuNS41IDAgMDEtMSAwdi0yLjAyNGEuOTk5Ljk5OSAwIDAwLS4yNjkuMjI3bC0xLjAyNyAxLjIzM2EuNS41IDAgMDEtLjc2OC0uNjRsMS43OTUtMi4xNTVhLjk5OS45OTkgMCAwMS4yNjktLjIyN1Y4LjM2Nkw0LjggOS42NGMwIC4xMTQtLjAyLjIzMS0uMDYyLjM0NmwtLjk2OSAyLjYzMmEuNS41IDAgMTEtLjkzOC0uMzQ1bC41NTQtMS41MDZhMSAxIDAgMDAuMDYyLS4zNDZsLTEuNzUzIDEuMDEyYS41LjUgMCAwMS0uNS0uODY2bDEuNzUzLTEuMDEyYS45OTkuOTk5IDAgMDAtLjMzLS4xMTlsLTEuNTgyLS4yNzNhLjUuNSAwIDAxLjE3LS45ODZsMi43NjQuNDc4Yy4xMi4wMi4yMzIuMDYyLjMzLjEyTDYuNTA4IDcuNSA0LjMgNi4yMjZhLjk5OS45OTkgMCAwMS0uMzMuMTE5bC0yLjc2NS40NzhhLjUuNSAwIDExLS4xNy0uOTg2bDEuNTgyLS4yNzNhLjk5OS45OTkgMCAwMC4zMy0uMTJMMS4xOTQgNC40MzRhLjUuNSAwIDExLjUtLjg2NmwxLjc1MyAxLjAxMmMwLS4xMTQtLjAyLS4yMzEtLjA2Mi0uMzQ2TDIuODMgMi43MjdhLjUuNSAwIDExLjkzOC0uMzQ1bC45NjkgMi42MzJhLjk5OS45OTkgMCAwMS4wNjIuMzQ2bDIuMjA3IDEuMjc0VjQuMDg2YTEgMSAwIDAxLS4yNjktLjIyN0w0Ljk0MyAxLjcwNGEuNS41IDAgMDEuNzY4LS42NGwxLjAyNyAxLjIzM2MuMDc5LjA5NC4xNy4xNy4yNjkuMjI3Vi41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tbm93Zmxha2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMDggN2g4LjEzNmMuMzA3IDAgLjU1Ni4yMjQuNTU2LjVzLS4yNDkuNS0uNTU2LjVINC4zMDhsNC4wOTYgNC4wOTZhLjUuNSAwIDAxLS43MDcuNzA3TDMuNDU0IDguNTYxYTEuNDk0IDEuNDk0IDAgMDEtLjQzMy0uOTI1LjQ1NC40NTQgMCAwMTAtLjI3MmMuMDMtLjMzOC4xNzUtLjY2Ni40MzMtLjkyNWw0LjI0My00LjI0MmEuNS41IDAgMTEuNzA3LjcwN0w0LjMwOCA3elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS42OTIgN0gzLjU1NkMzLjI0OSA3IDMgNy4yMjQgMyA3LjVzLjI0OS41LjU1Ni41aDguMTM2bC00LjA5NiA0LjA5NmEuNS41IDAgMDAuNzA3LjcwN2w0LjI0My00LjI0MmMuMjU4LS4yNTkuNDAzLS41ODcuNDMzLS45MjVhLjQ1NC40NTQgMCAwMDAtLjI3MiAxLjQ5NCAxLjQ5NCAwIDAwLS40MzMtLjkyNUw4LjMwMyAyLjE5N2EuNS41IDAgMTAtLjcwNy43MDdMMTEuNjkyIDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydERvd24gPSBmdW5jdGlvbiBFdWlJY29uU29ydERvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExLjY5MlYzLjU1NkM3IDMuMjQ5IDcuMjI0IDMgNy41IDNzLjUuMjQ5LjUuNTU2djguMTM2bDQuMDk2LTQuMDk2YS41LjUgMCAwMS43MDcuNzA3bC00LjI0MiA0LjI0M2ExLjQ5NCAxLjQ5NCAwIDAxLS45MjUuNDMzLjQ1NC40NTQgMCAwMS0uMjcyIDAgMS40OTQgMS40OTQgMCAwMS0uOTI1LS40MzNMMi4xOTcgOC4zMDNhLjUuNSAwIDExLjcwNy0uNzA3TDcgMTEuNjkyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydFVwID0gZnVuY3Rpb24gRXVpSWNvblNvcnRVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4yMDd2OC4yMzdjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2VjQuMjA3TDIuOTA0IDguMzAzYS41LjUgMCAwMS0uNzA3LS43MDdsNC4yNDItNC4yNDJhMS41IDEuNSAwIDAxMi4xMjIgMGw0LjI0MiA0LjI0MmEuNS41IDAgMTEtLjcwNy43MDdMOCA0LjIwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0YWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0YWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTIuNzg2VjMuMkwzLjYwNCA2LjU5NmEuNS41IDAgMDEtLjcwOC0uNzA3bDMuNTM2LTMuNTM1YTEuNSAxLjUgMCAwMTIuMTIxIDBsMy41MzYgMy41MzVhLjUuNSAwIDAxLS43MDcuNzA3TDggMy4yMTR2OS41NTdsMy4zODItMy4zODJhLjUuNSAwIDAxLjcwNy43MDdsLTMuNTM2IDMuNTM2YTEuNSAxLjUgMCAwMS0yLjEyMSAwbC0zLjUzNi0zLjUzNmEuNS41IDAgMDEuNzA4LS43MDdMNyAxMi43ODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm04IDhoMnYxaC0ydjJoLTF2LTJoLTJ2LTFoMlY4aDF2MnpNNiAzYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyUGx1c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyek02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA4IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZsLTIuMjAyIDIuMjI2LS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw4IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM3LjkwNSAzLjA1IDcuOTI3IDMgOCAzXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckVtcHR5U3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5U3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5U3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RhckZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwOCAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWRTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkU3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRmlsbGVkU3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA2IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzem0xMCA3djFoLTV2LTFoNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAxLjc5Mi41MTFsMS4zMyAyLjkyNCAzLjEyOC40NDZjLjcxLjEwMiAxLjAwMS45NzYuNDk2IDEuNDg3TDkuNDMzIDkuNzA0bC41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMTkuMTM2IDE0YS44NjIuODYyIDAgMDEtLjQyOS0uMTE2TDYgMTIuMzQybC0yLjcwNyAxLjU0MmEuODYyLjg2MiAwIDAxLS40My4xMTYuODc3Ljg3NyAwIDAxLS44NTktMS4wMjdsLjU2My0zLjI2OUwuMjU0IDcuMzY4Qy0uMjUgNi44NTcuMDQgNS45ODMuNzUgNS44OGwzLjEyOC0uNDQ2IDEuMzMtMi45MjNBLjg2Ljg2IDAgMDE2IDJ6bTEwIDh2MWgtNXYtMWg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXRzID0gZnVuY3Rpb24gRXVpSWNvblN0YXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTR2LTRoMXY0aDVWNWgxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xdi0yaDF2Mmg2em00Ljg1My0xMC4xNDZsLTIuOTk5IDNhMS41IDEuNSAwIDAxLTIuNTM4IDEuNTY4bC0yLjcxNC45MDRMNCA5LjUyN2ExLjUgMS41IDAgMTEtLjMxNi0uOTQ4TDcgNy40NzNhMS41IDEuNSAwIDAxMi4xNDYtMS4zMjdsMy0zYTEuNSAxLjUgMCAxMS43MDcuNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWNGExIDEgMCAwMC0xLTFINHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RvcEZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHg6IDIsXG4gICAgeTogMixcbiAgICByeDogMixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3BGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4yNTkgMy4wMzRBMS4wMDEgMS4wMDEgMCAwMDEyIDNINGExIDEgMCAwMC0xIDF2OGMwIC4wOS4wMTIuMTc2LjAzNC4yNTlsOS4yMjUtOS4yMjV6bS43MDcuNzA3bC05LjIyNSA5LjIyNWMuMDgzLjAyMi4xNy4wMzQuMjU5LjAzNGg4YTEgMSAwIDAwMS0xVjRjMC0uMDktLjAxMi0uMTc2LS4wMzQtLjI1OXpNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdG9yYWdlID0gZnVuY3Rpb24gRXVpSWNvblN0b3JhZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yIDZhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoMTJhMSAxIDAgMDExIDF2M2ExIDEgMCAwMS0xIDFIMnptMTMgMnYzYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVY4YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDAxMSAxem0xLTNWMmEyIDIgMCAwMC0yLTJIMmEyIDIgMCAwMC0yIDJ2M2MwIC42MDEuMjcxIDEuMTMzLjY5IDEuNUMuMjcxIDYuODY3IDAgNy4zOTkgMCA4djNhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWOGMwLS42MDEtLjI3MS0xLjEzMy0uNjg5LTEuNS40MTgtLjM2Ny42ODktLjg5OS42ODktMS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiA5LjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiAzLjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGgxdjNoLTF6TTEwIDhoMXYzaC0xek0xMiAyaDF2M2gtMXpNMTAgMmgxdjNoLTF6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9yYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdHJpbmcgPSBmdW5jdGlvbiBFdWlJY29uU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMjk3IDNMOC45MyA1LjEwMmgxLjM1MWwtLjMyIDEuODI4SDguNjA5bC0uNjU2IDMuODgzYy0uMDM2LjI2NS0uMDIuNDY2LjA1LjYwMS4wNzEuMTM1LjI0Ny4yMDguNTI4LjIxOS4xMS4wMDUuMzM0LS4wMDguNjcyLS4wNEw5LjAxNiAxMy41YTQuMTYgNC4xNiAwIDAxLTEuMzgzLjE5NWMtLjc5Ny0uMDEtMS4zOTMtLjI0NC0xLjc5LS43MDMtLjM5NS0uNDU4LS41NTctMS4wOC0uNDg0LTEuODY3bC42ODgtNC4xOTVINWwuMzEzLTEuODI4aDEuMDQ2TDYuNzI3IDNoMi41N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdWJtb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uU3VibW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJIMXYxMmgzVjdhMSAxIDAgMDExLTFoNWExIDEgMCAwMTEgMXYxaDRWNEg3Yy0uNjIxIDAtMS0uMzc5LTEtMVYyem0xMCA2djZhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNWEuNzUuNzUgMCAwMS43NS43NWwtLjAwNC4yMDZDNi45OSAyLjMxNyA2Ljk3NCAzIDcgM2g4YTEgMSAwIDAxMSAxdjR6bS0xIDFoLTRhMSAxIDAgMDEtMS0xVjdINXY3aDEwVjl6TTIgNC41YS41LjUgMCAwMS41LS41aDJhLjUuNSAwIDAxMCAxaC0yYS41LjUgMCAwMS0uNS0uNXpNNi41IDlhLjUuNSAwIDAwMCAxaDJhLjUuNSAwIDAwMC0xaC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdWJtb2R1bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN1biA9IGZ1bmN0aW9uIEV1aUljb25TdW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHpNNy4yNS43NWEuNzUuNzUgMCAwMTEuNSAwdjEuNWEuNzUuNzUgMCAxMS0xLjUgMFYuNzV6bTAgMTNhLjc1Ljc1IDAgMDExLjUgMHYxLjVhLjc1Ljc1IDAgMDEtMS41IDB2LTEuNXptNS4zNDYtMTEuNDA3YS43NS43NSAwIDAxMS4wNiAxLjA2bC0xLjA2IDEuMDYxYS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6bS05LjE5MiA5LjE5M2EuNzUuNzUgMCAxMTEuMDYgMS4wNmwtMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6TS43NSA4Ljc1YS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDExMCAxLjVILjc1em0xMyAwYS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDAxMCAxLjVoLTEuNXpNMi4zNDMgMy40MDRhLjc1Ljc1IDAgMTExLjA2LTEuMDZsMS4wNjEgMS4wNmEuNzUuNzUgMCAwMS0xLjA2IDEuMDZsLTEuMDYtMS4wNnptOS4xOTMgOS4xOTJhLjc1Ljc1IDAgMDExLjA2LTEuMDZsMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN3YXRjaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvblN3YXRjaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHJ4OiAzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3YXRjaElucHV0X19zdHJva2VcIixcbiAgICB4OiAyLjUsXG4gICAgeTogMi41LFxuICAgIHdpZHRoOiAxMSxcbiAgICBoZWlnaHQ6IDExLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Td2F0Y2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3ltbGluayA9IGZ1bmN0aW9uIEV1aUljb25TeW1saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMC44IDBIMmExIDEgMCAwMC0xIDF2OGwxLTFWMWg4djMuNWEuNS41IDAgMDAuNS41SDE0djEwSDJ2LTFhMy41IDMuNSAwIDAxMy41LTMuNUg4VjEzbDMtMy0zLTN2Mi41SDUuNUE0LjUgNC41IDAgMDAxIDE0djFhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOEExLjAwMiAxLjAwMiAwIDAwMTAuOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TeW1saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZU9mQ29udGVudHMgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVPZkNvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxdjE0aDE0VjFIMXpNMCAwaDE2djE2SDBWMHptOSAxdjE0aDFWMUg5ek0zIDMuNWg0di0xSDN2MXptMCAzaDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlT2ZDb250ZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNDk2IDdhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggOCA2IDcuNzc2IDYgNy41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjQ5NiA1YS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDYgNiA1Ljc3NiA2IDUuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC40OTYgOWEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMCA2IDkuNzc2IDYgOS41cy4xMjgtLjUuMjg2LS41aDMuNDI4em0tNS4yMTggMmEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMiA2IDExLjc3NiA2IDExLjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6bS01LjIxOCAyYS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTktNmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMC0yYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wIDRhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bTAgMmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMCAyYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0tMy43ODIgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTQgNiAxMy43NzYgNiAxMy41cy4xMjgtLjUuMjg2LS41aDMuNDI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJoMTJhMiAyIDAgMDEyIDJ2MXptLTEgMFYyYTEgMSAwIDAwLTEtMUgyYTEgMSAwIDAwLTEgMXYxaDE0em0wIDFIMXYxMGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0ek00LjUgN2EuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMDEwLTFoNnptLTkgNGEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMTEwLTFoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC41IDZhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDcgNiA2Ljc3NiA2IDYuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC41IDlhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6TTQuNSAxMmEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOS02YS41LjUgMCAxMTAgMWgtMi4wMDRhLjUuNSAwIDAxMC0xSDEzLjV6bTAgM2EuNS41IDAgMTEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41em0wIDNhLjUuNSAwIDExMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXptLTMuNzg2IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEzIDYgMTIuNzc2IDYgMTIuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWcgPSBmdW5jdGlvbiBFdWlJY29uVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNTQgMTQuOTdMLjk5NiA5LjcxMmMtLjMxNS0uMzE2LS4zOTctLjQ2My0uNDUtLjY0YS45MDkuOTA5IDAgMDEwLS41MzRjLjA1My0uMTc3LjEzNS0uMzI0LjQ1LS42NEw3LjQzIDEuNDY2Yy4xODItLjE4My4yNTItLjI0LjMzOC0uMjkzYS44Ny44NyAwIDAxLjI3My0uMTEzYy4wOTktLjAyMy4xODgtLjAzMi40NDYtLjAzMmg1LjE3M2MuNDQ1IDAgLjYwNy4wNDYuNzcuMTMzLjE2Mi4wODcuMjkuMjE0LjM3Ny4zNzcuMDg4LjE2Mi4xMzQuMzI0LjEzNi43NjlsLjAxNSA1LjE1YzAgLjI1OS0uMDA5LjM0OC0uMDMyLjQ0OGEuODcuODcgMCAwMS0uMTEyLjI3M2MtLjA1NC4wODctLjExMS4xNTctLjI5NC4zNEw4LjA2NyAxNC45N2MtLjMxNS4zMTUtLjQ2Mi4zOTYtLjYzOS40NWEuOTA5LjkwOSAwIDAxLS41MzUgMGMtLjE3Ni0uMDU0LS4zMjQtLjEzNS0uNjM5LS40NXptMS4xMDYtLjcwN2w2LjQ1My02LjQ1M2MuMDkyLS4wOTIuMTI2LS4xMjguMTQxLS4xNDcuMDAzLS4wMjUuMDA0LS4wNzQuMDA0LS4yMDRsLS4wMTUtNS4xNWMwLS4xODEtLjAwMy0uMjQ1LS4wMDktLjI3NWEyLjI0NyAyLjI0NyAwIDAwLS4yNzQtLjAwN0g4LjQ4N2MtLjEzIDAtLjE3OS4wMDEtLjIwMy4wMDQtLjAyLjAxNS0uMDU1LjA1LS4xNDcuMTQxTDEuNzAzIDguNjA2YTIuMjQ4IDIuMjQ4IDAgMDAtLjE4OS4yYy4wMTcuMDI0LjA2MS4wNy4xOS4xOThsNS4yNTcgNS4yNTljLjEyOC4xMjguMTc1LjE3MS4yLjE4OC4wMjQtLjAxNy4wNzEtLjA2LjItLjE4OHptNC45NzItMTAuNjA3YTIgMiAwIDExLTIuODI4IDIuODI4IDIgMiAwIDAxMi44MjgtMi44Mjh6bS0uNzA3LjcwN2ExIDEgMCAxMC0xLjQxNCAxLjQxNCAxIDEgMCAwMDEuNDE0LTEuNDE0ek02LjgwNyAxMS4yOEw0LjY4NiA5LjE1OWEuNS41IDAgMTEuNzA3LS43MDdsMi4xMjEgMi4xMmEuNS41IDAgMTEtLjcwNy43MDh6bTEuNDE0LTEuNDE0bC0yLjEyLTIuMTIyYS41LjUgMCAxMS43MDYtLjcwN0w4LjkyOCA5LjE2YS41LjUgMCAxMS0uNzA3LjcwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZWFyID0gZnVuY3Rpb24gRXVpSWNvblRlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1MyAxLjc3NmEuNS41IDAgMDEuODk0IDBsNCA4YS41LjUgMCAwMS4wNTMuMjM1Yy0uMDA0LjE1LS4wMjYuMzk2LS4wODQuNzA1YTUuNTM4IDUuNTM4IDAgMDEtLjUwNSAxLjUxMkMxMS4xODkgMTMuNjM4IDkuOTA2IDE0LjUgOCAxNC41Yy0xLjkwNiAwLTMuMTktLjg2Mi0zLjkxLTIuMjcyYTUuNTM4IDUuNTM4IDAgMDEtLjUwNi0xLjUxMiA0LjY3MiA0LjY3MiAwIDAxLS4wODQtLjcwNS41LjUgMCAwMS4wNTMtLjIzNWw0LTh6bS0zLjA0NiA4LjMyOWMuMDA5LjEwNi4wMjcuMjUzLjA2LjQyOS4wNzkuNDI0LjIxMy44NDguNDEzIDEuMjM4QzUuNTM3IDEyLjg2MiA2LjQ4NyAxMy41IDggMTMuNWMxLjUxMyAwIDIuNDYzLS42MzggMy4wMi0xLjcyOC4yLS4zOS4zMzQtLjgxNC40MTMtMS4yMzguMDMzLS4xNzYuMDUxLS4zMjMuMDYtLjQzTDggMy4xMTlsLTMuNDkzIDYuOTg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25UZW1wZXJhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxNWEzLjUgMy41IDAgMDEtMS43NS02LjUzMkw3IDguMzI0VjIuNUExLjQ5NiAxLjQ5NiAwIDAxOS45MDggMkg4LjV2MUgxMHYxSDguNXYxSDEwdjFIOC41djFIMTB2MS4zMjRsLjI1LjE0NEEzLjUgMy41IDAgMDE4LjUgMTVNMTEgNy43NThWMi41YTIuNSAyLjUgMCAxMC01IDB2NS4yNThhNC41IDQuNSAwIDEwNSAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgOWEyLjUgMi41IDAgMTEwIDUgMi41IDIuNSAwIDAxMC01XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlbXBlcmF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UaW1lUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25UaW1lUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuODA5IDguODA3YTQuNSA0LjUgMCAwMS01LjU3Mi01Ljc1QTUgNSAwIDAwMy4wNCA5LjMxYS41LjUgMCAwMS0uOTY2LjI1OSA2IDYgMCAwMTUuNjcyLTcuNTUzIDQuNSA0LjUgMCAxMTYuMTE3IDYuMzEzIDYuMDAyIDYuMDAyIDAgMDEtNy44MDMgNS40MDkuNS41IDAgMTEuMzAzLS45NTQgNS4wMDEgNS4wMDEgMCAwMDYuNDQ1LTMuOTc5ek0xMS44NTkgNUgxMy41YS41LjUgMCAwMDAtMUgxMlYxLjVhLjUuNSAwIDAwLTEgMHYzYS41LjUgMCAwMC41LjVoLjM2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43NTcgMTUuODQ4bC0uNzc2LTIuODk3YTEuNSAxLjUgMCAwMTEuMDYtMS44MzhsMi44OTgtLjc3NmEuNS41IDAgMTEuMjU5Ljk2NmwtMi44OTguNzc2YS41LjUgMCAwMC0uMzUzLjYxM2wuNzc2IDIuODk4YS41LjUgMCAwMS0uOTY2LjI1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZVJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRpbWVsaW5lID0gZnVuY3Rpb24gRXVpSWNvblRpbWVsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcgNC41YS41LjUgMCAwMDEgMFY0aDFhMSAxIDAgMDAxLTFWMWExIDEgMCAwMC0xLTFINmExIDEgMCAwMC0xIDF2MmExIDEgMCAwMDEgMWgxdi41ek05IDFINnYyaDNWMXpNMiA3LjVhLjUuNSAwIDExMSAwIC41LjUgMCAwMS0xIDB6TTIuNSA5YTEuNSAxLjUgMCAwMS0xLjQxNS0xSC41YS41LjUgMCAwMTAtMWguNTg1YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGguNTg1YS41LjUgMCAwMTAgMWgtLjU4NWExLjUgMS41IDAgMDEtMi44MyAwaC0yLjE3YTEuNSAxLjUgMCAwMS0yLjgzIDBoLTIuMTdBMS41IDEuNSAwIDAxMi41IDl6TTEzIDcuNWEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHptLTUgMGEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHpNMi41IDEwYS41LjUgMCAwMC0uNS41di41SDFhMSAxIDAgMDAtMSAxdjJhMSAxIDAgMDAxIDFoM2ExIDEgMCAwMDEtMXYtMmExIDEgMCAwMC0xLTFIM3YtLjVhLjUuNSAwIDAwLS41LS41ek00IDE0di0ySDF2Mmgzem04LTMuNWEuNS41IDAgMDExIDB2LjVoMWExIDEgMCAwMTEgMXYyYTEgMSAwIDAxLTEgMWgtM2ExIDEgMCAwMS0xLTF2LTJhMSAxIDAgMDExLTFoMXYtLjV6bTIgMi41djFoLTN2LTJoM3YxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGltZXNsaWRlciA9IGZ1bmN0aW9uIEV1aUljb25UaW1lc2xpZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuOTIzIDhBNS45MyA1LjkzIDAgMDA4IDIuMDc3IDUuOTMgNS45MyAwIDAwMi4wNzcgOGE1LjkzIDUuOTMgMCAwMDYuMjk2IDUuOTEyYy4zMjgtLjAyMS42MjUuMjI3LjYyNS41NTZhLjUwNC41MDQgMCAwMS0uNDU4LjUxMSA3IDcgMCAxMTYuNDMtNi4zMzNjLS4wMzYuMzk4LS40ODcuNTgtLjgxNy4zNTRhLjU5NS41OTUgMCAwMS0uMjQ4LS41NGMuMDEyLS4xNTIuMDE4LS4zMDUuMDE4LS40NnptMS42ODQgMy4ybC00LjMyLTMuMDU1Yy0uNTYtLjM5Ni0xLjI4Ny4wNTktMS4yODcuOHY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4ek03LjQ2MiA3LjQ2Mkg0Ljc2OWEuNTM5LjUzOSAwIDAwMCAxLjA3Nkg4QS41MzkuNTM5IDAgMDA4LjUzOCA4VjMuNjkyYS41MzkuNTM5IDAgMDAtMS4wNzYgMHYzLjc3elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZXNsaWRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5BbGlhcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFsaWFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMDc1IDYuOTUzYS41LjUgMCAxMS0uNzA3LjcwNyAxLjUgMS41IDAgMDAtMi4xMjIgMEw0LjEyNSA5Ljc4MmExLjUgMS41IDAgMTAyLjEyMSAyLjEyMWwxLjE0NS0xLjE0NGEuNS41IDAgMDEuNzA3LjcwN0w2Ljk1MyAxMi42MWEyLjUgMi41IDAgMTEtMy41MzUtMy41MzVsMi4xMjEtMi4xMjJhMi41IDIuNSAwIDAxMy41MzYgMHptMy41MzUtMy41MzVhMi41IDIuNSAwIDAxMCAzLjUzNUwxMC40OSA5LjA3NWEyLjUgMi41IDAgMDEtMy41MzYgMCAuNS41IDAgMTEuNzA3LS43MDggMS41IDEuNSAwIDAwMi4xMjIgMGwyLjEyMS0yLjEyYTEuNSAxLjUgMCAxMC0yLjEyMS0yLjEyMkw4LjYzNyA1LjI2OWEuNS41IDAgMTEtLjcwNy0uNzA3bDEuMTQ1LTEuMTQ0YTIuNSAyLjUgMCAwMTMuNTM1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQWxpYXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xNSAzLjM5MmMyLjc5NyAwIDQuNTI0IDEuNjQ0IDQuNTE3IDQuMjg5LjAwNyAxLjgxNi0uNzA4IDIuODkzLTIuMjEgMy4wMDQtLjkwOC4wNzYtMS4wODEtLjI4Ny0xLjE1Ny0uNzI1aC0uMDQxYy0uMTYzLjQyLS45NjQuNzMyLTEuNzQ0LjY4My0xLjA1My0uMDY1LTIuMDgyLS44NDItMi4wOS0yLjU3Mi4wMDgtMS43MiAxLjA3MS0yLjQ0MSAxLjk1OS0yLjU4Ni44MDQtLjEzNSAxLjU5OC4xNTggMS43MjMuNDYyaC4wNTF2LS4zODZoMS4xOTV2My40NTJjLjAwNy4zLjEyOC40MjUuMzA0LjQyNS40IDAgLjY3Ny0uNTgzLjY3My0xLjg2MS4wMDQtMi4zNzYtMS43MDUtMi45MTQtMy4xODctMi45MTQtMi4zNCAwLTMuNDE1IDEuNTIyLTMuNDIyIDMuMzg3LjAwNyAyLjEyNyAxLjIyIDMuMjc3IDMuNDMzIDMuMjc3LjgwOCAwIDEuNTk4LS4xNzYgMi4wMDYtLjM0OWwuMzkzIDEuMTIyYy0uNDM1LjI3LTEuNDE5LjUwOC0yLjQ5My41MDgtMi45OCAwLTQuNzIzLTEuNjYtNC43MjctNC40OTYuMDA0LTIuODA0IDEuNzQ4LTQuNzIgNC44MTctNC43MnpNNy45NjQgNi43OWMtLjc2IDAtMS4xODUuNDU5LTEuMTg4IDEuMjQuMDAzLjY4My4zIDEuMzMyIDEuMjAyIDEuMzMyLjgyMSAwIDEuMDk0LS40NzMgMS4wNzctMS4zNDMtLjAwNC0uNzE4LS4yMDQtMS4yMy0xLjA5MS0xLjIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQXJyYXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BcnJheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjM5MiAxMlY0aDIuNzEzdjEuMTRoLTEuMjF2NS43MmgxLjIxVjEySDQuMzkyem03LjY5Mi04djhIOS4zN3YtMS4xNGgxLjIwOVY1LjE0SDkuMzdWNGgyLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BcnJheTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5CaW5hcnkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5CaW5hcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgNEg0djhoOFY0ek04LjUgNS41aC0zdjVoM3YtNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5CaW5hcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQm9vbGVhbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJvb2xlYW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxM0E1IDUgMCAxMTggM2E1IDUgMCAwMTAgMTB6bS0yLjgyOC0yLjE3MmE0IDQgMCAwMTUuNjU2LTUuNjU2Yy4wMDQuMDEzLTUuNjQ1IDUuNjc0LTUuNjU2IDUuNjU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJvb2xlYW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ2xhc3MgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5DbGFzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zMzMgNy4wMjdIOS4zNzVjLS4wNTYtLjcwOC0uNDgtMS4xODctMS4yMjItMS4xODctLjk3MiAwLTEuNS44MDYtMS41IDIuMTYgMCAxLjQzLjU0NSAyLjE2IDEuNDg2IDIuMTYuNzA4IDAgMS4xMzktLjQxNSAxLjIzNi0xLjA4bDEuOTU4LjAxNUMxMS4yMzYgMTAuNDE4IDEwLjE4MSAxMiA4LjA5NyAxMmMtMS45NTggMC0zLjQzLTEuNDEtMy40My00IDAtMi42IDEuNTE0LTQgMy40My00IDEuNzkyIDAgMy4wODQgMS4wOTUgMy4yMzYgMy4wMjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ2xhc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA0YTEgMSAwIDAxMS0xaDhhMSAxIDAgMDExIDF2NS45OTZhMSAxIDAgMDEtMSAxaC0xLjY2MUw3LjQgMTMuMkEuMjUuMjUgMCAwMTcgMTN2LTIuMDA0SDRhMSAxIDAgMDEtMS0xVjR6bTEuNSAxYS41LjUgMCAwMS41LS41aDZhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41aC0uOUw4IDExVjkuNUg1YS41LjUgMCAwMS0uNS0uNVY1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNzUgNmExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMi41IDBhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Db25zdGFudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbnN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuNDE0IDMuNzU3bDIuODI5IDIuODI5YTIgMiAwIDAxMCAyLjgyOGwtMi44MjkgMi44MjlhMiAyIDAgMDEtMi44MjggMEwzLjc1NyA5LjQxNGEyIDIgMCAwMTAtMi44MjhsMi44MjktMi44MjlhMiAyIDAgMDEyLjgyOCAwem0tMS43NDcgMi45MWExIDEgMCAwMC0xIDF2LjY2NmExIDEgMCAwMDEgMWguNjY2YTEgMSAwIDAwMS0xdi0uNjY2YTEgMSAwIDAwLTEtMWgtLjY2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db25zdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5EYXRlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRGF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMS41NjdDMTMgMTIuMzYgMTIuMzYgMTMgMTEuNTY3IDEzSDQuNDMzQzMuNjQgMTMgMyAxMi4zNiAzIDExLjU2N1Y0LjQzM0MzIDMuNjQgMy42NCAzIDQuNDMzIDNINnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w2LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w5LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMS41NjdDMTIuMzYgMyAxMyAzLjY0IDEzIDQuNDMzdjcuMTM0ek00IDZ2NS4zM2MwIC4zNy4zLjY3LjY3LjY3aDYuNjZjLjM3IDAgLjY3LS4zLjY3LS42N1Y2SDR6bTEuNSA0Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSAxMHpNOCAxMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEybC4wMDguMDg4YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDEwem0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgMTB6bS01LTEuNWMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOS41QS41MDUuNTA1IDAgMDE1IDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDguNXptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDkuNWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggOC41em0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA5LjVBLjUwNS41MDUgMCAwMTEwIDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA4LjV6TTUuNSA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgN3pNOCA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDd6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgN3pNNCA1aDh2LS4zM2MwLS4zNy0uMy0uNjctLjY3LS42N0g0LjY3QzQuMyA0IDQgNC4zIDQgNC42N1Y1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRGVuc2VWZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EZW5zZVZlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMTU0IDEyVjRoMi43MTN2MS4xNEg1LjY1OHY1LjcyaDEuMjFWMTJINC4xNTN6bTcuNjkyLTh2OEg5LjEzM3YtMS4xNGgxLjIwOVY1LjE0aC0xLjIxVjRoMi43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGVuc2VWZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRWxlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVsZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy4zOSA5LjczNmwtMS4wNDEuOTRMMy4yNTggOGwzLjA5LTIuNjc3IDEuMDQxLjk0LTIuMDMyIDEuNzIydi4wM2wyLjAzMiAxLjcyMXptMi43NzcuOTRsLTEuMDQtLjk0IDIuMDMyLTEuNzIxdi0uMDNMOS4xMjYgNi4yNjRsMS4wNC0uOTRMMTMuMjU5IDhsLTMuMDkxIDIuNjc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVsZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yMTEgMTJWNGg1LjU3OHYxLjU3SDcuMTQ1djEuNjQxaDMuMzU5djEuNTc0SDcuMTQ1djEuNjQ1aDMuNjQ0VjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVudW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bU1lbWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW1NZW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODIgMTJWOS4yNDdsMS4wMjMtLjg2MWEuNS41IDAgMDAtLjAwMy0uNzY4bC0xLjAyLS44NDRWNGg1LjU3OHYxLjU3SDkuNjE1djEuNjRoMy4zNnYxLjU3NWgtMy4zNnYxLjY0NWgzLjY0NVYxMkg3LjY4MnptLjc0My00LjEwM2EuMTM4LjEzOCAwIDAxMCAuMjA2TDYuMTU4IDkuOTdhLjEzMy4xMzMgMCAwMS0uMjE4LS4xMDN2LS45MzRIMi44NzNBLjEzMy4xMzMgMCAwMTIuNzQgOC44VjcuMmMwLS4wNzQuMDYtLjEzMy4xMzMtLjEzM0g1Ljk0di0uOTM0YS4xMzMuMTMzIDAgMDEuMjE4LS4xMDNsMi4yNjcgMS44Njd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bU1lbWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FdmVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjIyNSA1LjY1NmMwIC40MjMtLjEwNi43OS0uMzE4IDEuMTAyLS4yMTEuMzExLS41MS41Ny0uODk4Ljc3NWE1LjQzNSA1LjQzNSAwIDAxLTEuMzkyLjQ4NWMtLjU0LjExNy0xLjE0LjE5My0xLjc5OC4yMjlhNi4wNDcgNi4wNDcgMCAwMC0uMDM1LjY3YzAgLjI1OC4wMi41MS4wNjIuNzU3LjA0LjI0Ny4xMTQuNDY0LjIyLjY1MnMuMjUuMzQuNDMyLjQ1OC40MTQuMTc2LjY5Ni4xNzZjLjIxMSAwIC40NjctLjA0NC43NjYtLjEzMi4zLS4wODguNjItLjI0NC45Ni0uNDY3LjEwNi0uMDcuMTkyLS4xMjkuMjU2LS4xNzZhLjM2NS4zNjUgMCAwMS4yMi0uMDdjLjExOCAwIC4xOTcuMDYxLjIzOC4xODVhLjk5Ljk5IDAgMDEuMDYyLjI1NSA3LjEgNy4xIDAgMDEtLjU3My40NjcgNC45MyA0LjkzIDAgMDEtLjc3NS40NjdjLS4yODguMTQxLS42LjI2MS0uOTM0LjM2MS0uMzM1LjEtLjY3OC4xNS0xLjAzLjE1LS41NDEgMC0uOTgyLS4wODgtMS4zMjItLjI2NGEyLjA3MiAyLjA3MiAwIDAxLS43OTMtLjY4OCAyLjYyNiAyLjYyNiAwIDAxLS4zODgtLjkzMyA0Ljk0OSA0Ljk0OSAwIDAxLS4xMDYtMS4wMDVjMC0uNjM0LjEwMy0xLjI1Ny4zMDktMS44NjguMjA1LS42MS40OTktMS4xNTcuODgtMS42MzguMzgzLS40ODIuODM4LS44NyAxLjM2Ni0xLjE2M0EzLjU2NyAzLjU2NyAwIDAxOS4wOTMgNGMuNTk5IDAgMS4xMDQuMTI2IDEuNTE1LjM3OS40MTEuMjUyLjYxNy42NzguNjE3IDEuMjc3em0tMi40NjctLjk1MWMtLjIyMyAwLS40MzUuMDgtLjYzNS4yMzgtLjIuMTU4LS4zODEuMzczLS41NDYuNjQzLS4xNjQuMjctLjMwNS41NzgtLjQyMy45MjVhNi40MiA2LjQyIDAgMDAtLjI2NCAxLjEwMWMuNDctLjA0Ny44NjMtLjEzNSAxLjE4LS4yNjQuMzE4LS4xMy41Ny0uMjg1Ljc1OC0uNDY3LjE4OC0uMTgyLjMyMy0uMzg4LjQwNS0uNjE3LjA4My0uMjI5LjEyNC0uNDY3LjEyNC0uNzEzIDAtLjI3LS4wNTYtLjQ3OS0uMTY4LS42MjZhLjUxOS41MTkgMCAwMC0uNDMxLS4yMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FeGNlcHRpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FeGNlcHRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQ2MSA3LjMxaDMuMDU1YS43NC43NCAwIDAxLjY2IDEuMDc0bC0yLjE0MSA0LjIxMWEuNzQuNzQgMCAxMS0xLjMxOS0uNjdMOS4zMSA4Ljc5SDYuMjU2YS43NC43NCAwIDAxLS42Ni0xLjA3NWwyLjE5LTQuMzFhLjc0Ljc0IDAgMDExLjMxOS42N0w3LjQ2MSA3LjMxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV4Y2VwdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuMjcgMTJWNGg1LjQ2djEuNTdINy4yMDN2MS42NDFoMy4xOHYxLjU3NGgtMy4xOFYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmlsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODY3IDIuNjY3SDRhLjY2Ny42NjcgMCAwMC0uNjY3LjY2NnY5LjMzNGMwIC4zNjguMjk5LjY2Ni42NjcuNjY2aDhhLjY2Ny42NjcgMCAwMC42NjctLjY2NlY1LjYxOWEuNjY5LjY2OSAwIDAwLS4xODMtLjQ1OWwtMi4xMzMtMi4yODVhLjY2OC42NjggMCAwMC0uNDg0LS4yMDhtMS40NjYgNFYxMkg0LjY2N1Y0aDR2Mi4zMzNjMCAuMTg0LjE0OS4zMzQuMzMzLjMzNGgyLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZsYXR0ZW5lZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZsYXR0ZW5lZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuMjUgM2EuMjUuMjUgMCAwMC0uMjUuMjV2MmMwIC4xMzguMTEyLjI1LjI1LjI1aDkuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTJhLjI1LjI1IDAgMDAtLjI1LS4yNWgtOS41em0wIDMuNzVBLjI1LjI1IDAgMDAzIDd2MmMwIC4xMzguMTEyLjI1LjI1LjI1SDUuNUEuMjUuMjUgMCAwMDUuNzUgOVY3YS4yNS4yNSAwIDAwLS4yNS0uMjVIMy4yNXptLS4yNSA0YS4yNS4yNSAwIDAxLjI1LS4yNUg1LjVhLjI1LjI1IDAgMDEuMjUuMjV2MmEuMjUuMjUgMCAwMS0uMjUuMjVIMy4yNWEuMjUuMjUgMCAwMS0uMjUtLjI1di0yem0zLjMxLS43MjdjLS4wODItLjA3My0uMDgyLS4yMjQgMC0uMjk2bDMuMDU0LTIuNjgzYS4xNy4xNyAwIDAxLjE5LS4wMjZjLjA2NC4wMzIuMTA0LjEuMTA0LjE3NHYxLjM0MWwzLjE2MS0uMDE2Yy4xIDAgLjE4LjA4Ni4xOC4xOTJ2Mi4zYzAgLjEwNS0uMDguMTkxLS4xOC4xOTFsLTMuMTYxLjAxN3YxLjM0MWMwIC4wNzQtLjA0LjE0Mi0uMTAzLjE3NGEuMTcuMTcgMCAwMS0uMTktLjAyNUw2LjMxIDEwLjAyM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GbGF0dGVuZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4yNjYgNC4xNVY1LjYzYTIuNDEgMi40MSAwIDAwLS44NTktLjE0NWMtLjY5MiAwLTEuMDY1LjM0Ni0xLjE3NyAxLjA0M2wtLjExLjYyNWgxLjgyOHYxLjQ0SDguOTIxbC0uMjA0IDEuMTE1QzguNDU1IDExLjMyNSA3LjUxNyAxMiA1LjkgMTJjLS40NjkgMC0uODgyLS4wNjEtMS4xNjYtLjE2N3YtMS40OTVjLjI3My4xMTcuNTkxLjE3OC45MDMuMTc4LjY1OSAwIDEuMDEtLjI5IDEuMTI3LTEuMDE1bC4xNTctLjkxSDUuMjQ3VjcuMTUyaDEuODM3bC4xODgtLjg0MkM3LjUzNCA0LjcxNCA4LjQzMiA0IDEwLjE5IDRjLjM5IDAgLjg1My4wNjcgMS4wNzYuMTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuR2VvID0gZnVuY3Rpb24gRXVpSWNvblRva2VuR2VvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2MxLjYzNiAwIDMuMDg4Ljc4NSA0IDIgLjYyOC44MzYgMSAxLjg3NSAxIDNhNC45NzggNC45NzggMCAwMS0uOTk5IDNIMTJhNC45OTIgNC45OTIgMCAwMS00IDIgNC45OTIgNC45OTIgMCAwMS00LTEuOTk5VjExYTUgNSAwIDAxNC04em0uOTQ4IDhINy4wNTJjLjI3Ny42MjYuNjIzIDEgLjk0OCAxIC4zMjUgMCAuNjctLjM3NC45NDgtMXpNNiAxMWwtLjY0NS4wMDFjLjI3NC4yNDIuNTgxLjQ0Ni45MTQuNjA2QTUuNDQ1IDUuNDQ1IDAgMDE2IDExLjAwMXptNC42NDUuMDAxSDEwYTUuNTEgNS41MSAwIDAxLS4yNjkuNjA2Yy4zMzMtLjE2LjY0LS4zNjQuOTE0LS42MDZ6bS01LjEzMy0yLjVINC4wMzFjLjA2OC41NC4yNDMgMS4wNDguNTA1IDEuNWgxLjE3MmE5LjE4NiA5LjE4NiAwIDAxLS4xOTYtMS41em0zLjk3NSAwSDYuNTEzYy4wMy41NDQuMTA0IDEuMDUuMjEgMS41aDIuNTUzYy4xMDctLjQ1LjE4Mi0uOTU2LjIxLTEuNXptMi40ODIgMGgtMS40ODFhOS4xODYgOS4xODYgMCAwMS0uMTk2IDEuNWgxLjE3MmMuMjYyLS40NTIuNDM3LS45Ni41MDUtMS41ek01LjcwOCA2TDQuNTM1IDZjLS4yNjEuNDUyLS40MzcuOTYtLjUwNCAxLjVoMS40ODFBOS4xODcgOS4xODcgMCAwMTUuNzA4IDZ6bTMuNTY4IDBINi43MjRjLS4xMDcuNDQ5LS4xODIuOTU1LS4yMSAxLjQ5OWgyLjk3M2E4LjQ3OSA4LjQ3OSAwIDAwLS4yMS0xLjV6TTExLjQ2NSA2aC0xLjE3M2MuMTAyLjQ2Ny4xNy45NzIuMTk2IDEuNWgxLjQ4MWEzLjk3NCAzLjk3NCAwIDAwLS41MDQtMS41ek02LjI2OSA0LjM5M2wtLjEyNC4wNjJjLS4yODYuMTUtLjU1MS4zMzMtLjc5LjU0NUg2YTUuNTEgNS41MSAwIDAxLjI2OS0uNjA3ek04IDRjLS4zMjYgMC0uNjcxLjM3NS0uOTQ4IDFoMS44OTZDOC42NzEgNC4zNzYgOC4zMjYgNCA4IDR6bTEuNzMuMzkzbC4wMzguMDcxYy4wODMuMTY4LjE2MS4zNDcuMjMyLjUzNmguNjQ2YTQuMDA2IDQuMDA2IDAgMDAtLjkxNS0uNjA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkdlbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5IaXN0b2dyYW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5IaXN0b2dyYW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNoNHY1aDJWNS41aDRWMTNIMy4wMDF2LTFIM1Yzem0xIDloMlY0SDR2OHptMyAwaDJWOUg3djN6bTMgMGgyVjYuNWgtMlYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5IaXN0b2dyYW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSVAgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JUChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMSAzYTIgMiAwIDAxMiAydjZhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNnptLTEgMkg4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNXpNNiA1SDV2NmgxVjV6bTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbklQOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkludGVyZmFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkludGVyZmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04Ljk2NyAxMC42NTNoMS43MjdWMTJINS4zMDZ2LTEuMzQ3aDEuNzI3VjUuMzQ3SDUuMzA2VjRoNS4zODh2MS4zNDdIOC45Njd2NS4zMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSW50ZXJmYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkpvaW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Kb2luKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgNC41djEuMDI1YzAgMS4yNjktMS4xODUgMS45MDgtMi4xMTIgMS43MzdhLjc1Ljc1IDAgMTAwIDEuNDc1Yy45MjctLjE3IDIuMTEyLjQ3IDIuMTEyIDEuNzM5djEuMDIzaDR2LTEuMDA1YTIuNSAyLjUgMCAwMTAtNC45ODhWNC41aC00ek0xMyA0YTEgMSAwIDAwLTEtMUg3YTEgMSAwIDAwLTEgMXYxLjUyNWMwIC4xNzItLjE3Mi4yOTMtLjM0MS4yNjJhMi4yNSAyLjI1IDAgMTAwIDQuNDI2Yy4xNy0uMDMxLjM0MS4wOS4zNDEuMjYyVjEyYTEgMSAwIDAwMSAxaDVhMSAxIDAgMDAxLTFWOS4wMDRhLjE2LjE2IDAgMDAtLjA0LS4xMDVjLS4xMDktLjEyNS0uNTk0LS4xNi0uNzMyLS4wNjhhMSAxIDAgMTEwLTEuNjYyYy4xMzguMDkyLjYyMy4wNTcuNzMyLS4wNjhhLjE2LjE2IDAgMDAuMDQtLjEwNVY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkpvaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjY2NyA2LjU0MkEzLjIwOCAzLjIwOCAwIDAxOC44NiA5LjY5NGwtLjQzOC40OTJhLjQzNy40MzcgMCAwMS0uMzI3LjE0N2gtLjY3OHYuNzNhLjQzNy40MzcgMCAwMS0uNDM4LjQzN0g2LjI1di43M2EuNDM3LjQzNyAwIDAxLS40MzguNDM3SDMuNzcyYS40MzcuNDM3IDAgMDEtLjQzOC0uNDM4di0xLjQyM2MwLS4xMTYuMDQ2LS4yMjcuMTI4LS4zMWwyLjk1LTIuOTQ5YTMuMjA4IDMuMjA4IDAgMDEzLjA0Ny00LjIxNCAzLjIwMiAzLjIwMiAwIDAxMy4yMDkgMy4yMDl6bS0zLjIwOS0uODc1YS44NzUuODc1IDAgMTAxLjc1IDAgLjg3NS44NzUgMCAwMC0xLjc1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbktleXdvcmQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXl3b3JkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzMgMTAuMjhjLS4xMi4wNC0uMjkuMDctLjQyLjA3LS4yMyAwLS40My0uMDgtLjUzLS4zbC0uNjMtMS4zNCAyLjMyLTIuODFIOS4zTDcuNzYgNy45M2gtLjA5TDguMjIgNEg2LjU5bC0xLjA1IDcuNWgxLjYzbC4yNy0xLjk0aC4xbC40MyAxLjEyYy4yNy43MS43NC45MiAxLjMzLjkyLjIzIDAgLjYtLjA0Ljg2LS4xMWwuMTctMS4yMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXl3b3JkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldGhvZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldGhvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zLjMzMyAxMS4wMjdWNS4wNWgyLjA1OXYxLjEzNmguMDYzYy4yNS0uNzQ3Ljg5MS0xLjIxNCAxLjcyOC0xLjIxNC44NDggMCAxLjUyNC40ODMgMS42NSAxLjIxNGguMDYzYy4yMDQtLjczMS45MjctMS4yMTQgMS44MjItMS4yMTQgMS4xNTUgMCAxLjk0OS43OTggMS45NDkgMi4wMjN2NC4wM2gtMi4xNjlWNy41NDJjMC0uNTIxLS4yOS0uODQtLjczOC0uODRzLS43MjMuMzE5LS43MjMuODR2My40ODZINi45NjNWNy41NGMwLS41MjEtLjI5LS44NC0uNzM5LS44NC0uNDQ3IDAtLjcyMi4zMTktLjcyMi44NHYzLjQ4NkgzLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRob2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0cmljQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzYTEgMSAwIDAwLTEgMXYxSDlhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwVjdoMWExIDEgMCAxMDAtMmgtMVY0YTEgMSAwIDAwLTEtMXpNNSA3YTEgMSAwIDAwLTEgMXYxSDNhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwdi0xaDFhMSAxIDAgMTAwLTJINlY4YTEgMSAwIDAwLTEtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRoLS41YS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtLjUuNWgtMWEuNS41IDAgMDEwLTFINXYtMmgtLjVhLjUuNSAwIDAxMC0xSDVWN2gtLjVhLjUuNSAwIDAxMC0xSDVWNHptMyAxYTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDJhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFIOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Nb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Nb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJsNS4xOTYgM3YuMTc4bC0uODY2LjQ2OFY1LjVMOCAzIDMuNjcgNS41djVMOCAxM2w0LjMzLTIuNVY1Ljc3bC44NjYtLjQ3NFYxMUw4IDE0bC01LjE5Ni0zVjVMOCAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4yNDMgNC40MjlMOS41OTcgNy4wNCA4IDcuOTI4IDMuNzQzIDUuNTYzYS41LjUgMCAxMC0uNDg2Ljg3NEw3LjUgOC43OTRWMTMuNWgxVjguNzk0bDQuMjQzLTIuMzU3YS41MDguNTA4IDAgMDAuMDYtLjA0bC4zOTItLjIwMlY1LjA0N2wtLjkxNy41MDVhLjU3My41NzMgMCAwMC0uMDIuMDFsLS4xMDYuMDYtLjE5MS4xMDUtMS4zNTUuNzUzLTQuODQ5LTIuOTA5LS41MTQuODU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA4LjQxNmwtLjgwNC0xLjY4aC0uMDM2djUuNjRINVY0aDEuOTkybDIuMjkyIDMuOTYuODA0IDEuNjhoLjAzNlY0aDEuNzE2djguMzc2SDkuODQ4bC0yLjI5Mi0zLjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5hbWVzcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNjMS4wNDQgMCAxLjkxMy43NTcgMS45OTQgMS43MzZsLjAwNi4xNDl2Ni4yM2MwIDEtLjgyIDEuODA1LTEuODQ1IDEuODhMMTEgMTNIOS41MDFhLjUuNSAwIDAxLS4wOS0uOTkybC4wOS0uMDA4SDExYy41MiAwIC45MzctLjM1Ljk5My0uNzgzbC4wMDctLjEwMnYtNi4yM2MwLS40NDUtLjM3OS0uODI3LS44ODItLjg3OUwxMSA0SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDNIMTF6TTYuNSAzYS41LjUgMCAwMS4wOS45OTJMNi41IDRINWMtLjUyIDAtLjkzNy4zNS0uOTkzLjc4M0w0IDQuODg1djYuMjNjMCAuNDQ1LjM3OS44MjcuODgyLjg3OUw1IDEyaDEuNWEuNS41IDAgMDEuMDkuOTkyTDYuNSAxM0g1Yy0xLjA0NCAwLTEuOTEzLS43NTctMS45OTQtMS43MzZMMyAxMS4xMTV2LTYuMjNjMC0xIC44Mi0xLjgwNSAxLjg0NS0xLjg4TDUgM2gxLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01Ljg2NCA3LjI1YS43MTQuNzE0IDAgMTEwIDEuNDI5LjcxNC43MTQgMCAwMTAtMS40Mjl6bTIuMTQzIDBhLjcxNC43MTQgMCAxMTAgMS40MjkuNzE0LjcxNCAwIDAxMC0xLjQyOXptMi4xNDMgMGEuNzE0LjcxNCAwIDExMCAxLjQyOS43MTQuNzE0IDAgMDEwLTEuNDI5elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTnVsbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwMiAxMi40MTJsLS45NjIuOTYyYTEgMSAwIDAxLTEuNDE0LTEuNDE0bC45NjItLjk2MmE1LjMzMyA1LjMzMyAwIDAxNy40MS03LjQxbC45NjItLjk2MmExIDEgMCAxMTEuNDE0IDEuNDE0bC0uOTYyLjk2MmE1LjMzMyA1LjMzMyAwIDAxLTcuNDEgNy40MXptLjk2Ni0uOTY2YTQgNCAwIDAwNS40NzgtNS40NzhsLTUuNDc4IDUuNDc4em0tMS40MTQtMS40MTRsNS40NzgtNS40NzhhNCA0IDAgMDAtNS40NzggNS40Nzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVsbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjggOS44MTJoLS44NDJsLS43OCAyLjMzNUg1LjAzMWwuNzgtMi4zMzVINC42bC4xODItMS4wNDNoMS4zNzNsLjUwNy0xLjUwNEg1LjQ1NGwuMTg4LTEuMDQyaDEuMzY3bC43OTItMi4zN0g4Ljk0bC0uNzkyIDIuMzdoLjg0OWwuNzkyLTIuMzdoMS4xNDVsLS43OTIgMi4zN0gxMS40bC0uMTgyIDEuMDQySDkuOEw5LjI5MyA4Ljc3aDEuMjQ4bC0uMTgzIDEuMDQzSDguOTQ2bC0uNzc1IDIuMzM1SDcuMDI2TDcuOCA5LjgxMnptLS41LTEuMDQzaC44NDJsLjUxMy0xLjUwNGgtLjg0OUw3LjMgOC43N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuT2JqZWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT2JqZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjMgMTJjLTEuMjk0IDAtMi4zODMtLjEwNS0yLjM4My0xLjgwMlY5LjZjMC0uNjM4LS4yNDctLjkxNC0uOTgtLjkxNHYtMS4zN2MuNzMzIDAgLjk4LS4yOC45OC0uOTE1di0uNkM0LjI0NyA0LjEwNSA1LjMzNiA0IDYuNjMxIDR2MS4xNGMtLjc1OSAwLS44ODYuMjcyLS44ODYuODQzdi44MTNjMCAuNDc5LS4yMjUuOTM2LTEuMjEyIDEuMTMzdi4xNDJjLjk4Ny4xOTcgMS4yMTIuNjU0IDEuMjEyIDEuMTMzdi44MTNjMCAuNTcuMTI3Ljg0NC44ODYuODQ0VjEyem0yLjI2Ni04YzEuMjk1IDAgMi4zODQuMTA1IDIuMzg0IDEuODAyVjYuNGMwIC42MzguMjQ3LjkxNC45OC45MTR2MS4zN2MtLjczMyAwLS45OC4yOC0uOTguOTE1di42QzExLjI4IDExLjg5NSAxMC4xOSAxMiA4Ljg5NiAxMnYtMS4xNGMuNzU5IDAgLjg4Ni0uMjcyLjg4Ni0uODQzdi0uODEzYzAtLjQ3OS4yMjUtLjkzNiAxLjIxMi0xLjEzM1Y3LjkzYy0uOTg3LS4xOTctMS4yMTItLjY1NC0xLjIxMi0xLjEzM3YtLjgxM2MwLS41Ny0uMTI3LS44NDQtLjg4Ni0uODQ0VjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT2JqZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk9wZXJhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT3BlcmF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi42NjcgOC4wMDJjMC0xLjUuMzk0LTIuNzQzIDEuMjQ4LTMuODIyaDEuNDM3Yy0uNjUyLjgtMS4xNCAyLjM4OC0xLjE0IDMuODIyIDAgMS40My40ODggMy4wMTggMS4xNCAzLjgxOEgzLjkxNWMtLjg1NC0xLjA4LTEuMjQ4LTIuMzIyLTEuMjQ4LTMuODE4ek02Ljc3IDkuOTk4bC0uODE4LS44MDMgMS4yMy0xLjE5Ny0xLjIzLTEuMjAzLjgzLS43OTMgMS4yMjEgMS4xOTNMOS4yMyA2LjAwMmwuODE4Ljc5My0xLjIyNyAxLjIgMS4yMjcgMS4yLS44MTguODAzTDggOC43OTUgNi43NyA5Ljk5OHptNi41NjMtMmMwIDEuNS0uMzk0IDIuNzQzLTEuMjQ4IDMuODIyaC0xLjQzN2MuNjUyLS44IDEuMTQtMi4zODggMS4xNC0zLjgyMiAwLTEuNDMtLjQ4OC0zLjAxOC0xLjE0LTMuODE4aDEuNDM3Yy44NTQgMS4wOCAxLjI0OCAyLjMyMiAxLjI0OCAzLjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PcGVyYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA0OSAzLjc4NWwzLjg1MiAxLjAwNi00LjA0OSAxLjEwM0w0IDQuNzkxbDMuOTUxLTEuMDA2YS4xOS4xOSAwIDAxLjA5OCAwem0uMDczIDIuNjU0bDQuNTQ1LTEuMzA2djUuNDVsLS4xMzEuMTg0LTQuNDE0IDEuNDU1VjYuNDM5em0tNC43ODkgNC4xNDVWNS4xODhMNy40OTggNi40MXY1LjgxbC00LjAzNC0xLjQ1My0uMTMtLjE4M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBhcmFtZXRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBhcmFtZXRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFyYW1ldGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBlcmNvbGF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QZXJjb2xhdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjUgN2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0wIDFhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpNMTEgOWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMCAxYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0tMi41IDEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBlcmNvbGF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUHJvcGVydHkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Qcm9wZXJ0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUHJvcGVydHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFuZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5nZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MiA1LjExNmEuNS41IDAgMDAtLjcwNC43MDRsLjA2NC4wNjRMMTEuNzE5IDhsLTIuNTQgMi4xMTZhLjUuNSAwIDAwLS4xMTQuNjNsLjA1LjA3NGEuNS41IDAgMDAuNjMuMTE1bC4wNzUtLjA1IDMtMi41YS41LjUgMCAwMC4wNzEtLjY5N2wtLjA3LS4wNzItMy0yLjV6TTYuMTggNS4xMTZhLjUuNSAwIDAxLjcwNC43MDRsLS4wNjQuMDY0TDQuMjgxIDhsMi41NCAyLjExNmEuNS41IDAgMDEuMTE0LjYzbC0uMDUuMDc0YS41LjUgMCAwMS0uNjMuMTE1bC0uMDc1LS4wNS0zLTIuNWEuNS41IDAgMDEtLjA3MS0uNjk3bC4wNy0uMDcyIDMtMi41elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5nZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblJlcG8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SZXBvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTMzIDkuMDY3Yy0xLjc5MiAwLTIuMzc4LjcyLTIuNTcgMS4xOTRhMS42MDEgMS42MDEgMCAxMS0xLjE2My0uMDM3VjUuNzc2YTEuNTk1IDEuNTk1IDAgMDEtMS4wNjctMS41MWMwLS44ODUuNzE1LTEuNiAxLjYtMS42Ljg4NiAwIDEuNi43MTUgMS42IDEuNiAwIC43LS40NDIgMS4yOTEtMS4wNjYgMS41MXYyLjgyMUM2LjMzNiA4LjI1MSA3LjAxOSA4IDggOGMxLjQyNCAwIDEuODk5LS43MTUgMi4wNTMtMS4xOWExLjYwMyAxLjYwMyAwIDAxLS45ODYtMS40NzdjMC0uODg1LjcxNC0xLjYgMS42LTEuNi44ODUgMCAxLjYuNzE1IDEuNiAxLjZhMS41OSAxLjU5IDAgMDEtMS4xMTUgMS41MjZjLS4xMzkuNzYyLS42NTYgMi4yMDgtMi42MTkgMi4yMDh6bS0zLjIgMi4xMzNhLjUzNS41MzUgMCAwMC0uNTMzLjUzM2MwIC4yOTQuMjQuNTM0LjUzMy41MzRhLjUzNS41MzUgMCAwMDAtMS4wNjd6bTAtNy40NjdhLjUzNS41MzUgMCAwMC0uNTMzLjUzNGMwIC4yOTMuMjQuNTMzLjUzMy41MzMuMjk0IDAgLjUzNC0uMjQuNTM0LS41MzNhLjUzNS41MzUgMCAwMC0uNTM0LS41MzR6TTEwLjY2NyA0LjhhLjUzNS41MzUgMCAwMC0uNTM0LjUzMy41MzUuNTM1IDAgMDAxLjA2NyAwIC41MzUuNTM1IDAgMDAtLjUzMy0uNTMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJlcG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU2VhcmNoVHlwZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlYXJjaFR5cGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI3IDcuNWExIDEgMCAxMTIgMCAxIDEgMCAwMS0yIDB6TTguNzcgNy41YTEgMSAwIDExMiAwIDEgMSAwIDAxLTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNzAyIDEwLjY4MmE0LjUwMSA0LjUwMSAwIDAxLTUuNzk2LjQ4Mkw0LjI4IDEyLjc4OWEuNzUuNzUgMCAwMS0xLjA2LTEuMDZMNC44NDcgMTAuMWE0LjUwMSA0LjUwMSAwIDExNi44NTUuNTgxem0tNS4zMDQtMS4wNmEzIDMgMCAxMDQuMjQzLTQuMjQzQTMgMyAwIDAwNi4zOTggOS42MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TZWFyY2hUeXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblNoYXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2hhcGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTB2M2gtM3YtMUg2djFIM3YtM2gxVjZIM1YzaDN2MWg0VjNoM3YzaC0xdjRoMXptLTggMUg0djFoMXYtMXptNyAwaC0xdjFoMXYtMXpNNSA0SDR2MWgxVjR6bTcgMGgtMXYxaDFWNHptLTEgMmgtMVY1SDZ2MUg1djRoMXYxaDR2LTFoMVY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNoYXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3RydWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RydWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNjY3IDQuNjY3aDIuNjY2djIuNjY2SDQuNjY3VjQuNjY3em0wIDRoMi42NjZ2Mi42NjZINC42NjdWOC42Njd6bTQtNGgyLjY2NnYyLjY2Nkg4LjY2N1Y0LjY2N3ptMCA0aDIuNjY2djIuNjY2SDguNjY3VjguNjY3ek0zLjMzMyAzLjMzM3Y5LjMzNGg5LjMzNFYzLjMzM0gzLjMzM3ptMC0xLjMzM2g5LjMzNEMxMy40MDMgMiAxNCAyLjU5NyAxNCAzLjMzM3Y5LjMzNGMwIC43MzYtLjU5NyAxLjMzMy0xLjMzMyAxLjMzM0gzLjMzM0ExLjMzMyAxLjMzMyAwIDAxMiAxMi42NjdWMy4zMzNDMiAyLjU5NyAyLjU5NyAyIDMuMzMzIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3RydWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN5bWJvbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN5bWJvbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMzE2IDE0YTYgNiAwIDExMC0xMiA2IDYgMCAwMTAgMTJ6bTAtMS4zMzNhNC42NjcgNC42NjcgMCAxMDAtOS4zMzQgNC42NjcgNC42NjcgMCAwMDAgOS4zMzR6bTIuMTktNS43MmgxLjE0M2MuMDE5IDEuNDQ4LS43OTMgMi4zMzgtMS45MjIgMi4zMzgtLjYzMiAwLTEuMTk0LS4yNjctMS43MDYtLjgxMS0uMzYtLjM5Ny0uNjM2LS41NzYtMS0uNTc2LS41MTcgMC0uODQ5LjM1NS0uODg1IDEuMDgzSDQuOTgzYy4wMTQtMS40Ny44NTgtMi4zMTQgMS45NS0yLjMxNC41OTUgMCAxLjEyNS4yNDkgMS42NzguODAyLjM5Mi4zODIuNjQxLjU5NSAxLjAzOC41OTUuNDg0IDAgLjg1Ny0uMzIzLjg1Ny0xLjExNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TeW1ib2w7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuVGFnID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgOGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCA0YTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDYuOTg5YTEgMSAwIDAwLjgyNS0uNDM2bDIuMDUtM2ExIDEgMCAwMDAtMS4xMjhsLTIuMDUtM0ExIDEgMCAwMDEwLjk5IDRINHptLjc1IDEuMjVhLjUuNSAwIDAwLS41LjV2NC41YS41LjUgMCAwMC41LjVoNS43NDVhLjUuNSAwIDAwLjQwNS0uMjA2bDEuNjM2LTIuMjVhLjUuNSAwIDAwMC0uNTg4TDEwLjkgNS40NTZhLjUuNSAwIDAwLS40MDUtLjIwNkg0Ljc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5UZXh0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5UZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblRva2VuQ291bnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Ub2tlbkNvdW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDN2M2g1VjR6TTEzIDlIOHYzaDVWOXpNMTAgNGgzdjNoLTNWNHpNNiA5SDN2M2gzVjl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVG9rZW5Db3VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5WYXJpYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZhcmlhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjQ5IDQuNjY3bDEuMzI2IDQuN2guMDVsMS4zMjYtNC43aDEuOTgybC0yLjEzNCA2LjY2Nkg2LjgwMUw0LjY2NyA0LjY2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WYXJpYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhaW5pbmcgPSBmdW5jdGlvbiBFdWlJY29uVHJhaW5pbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zODYgOS44MzZhMi41IDIuNSAwIDExMy42MTEuNjY3QzE1LjIxMiAxMS4xNzMgMTYgMTIuNDYgMTYgMTR2MS41YS41LjUgMCAxMS0xIDBWMTRjMC0xLjcyNC0xLjI3Ni0zLTMtMy0uOTEgMC0xLjI5OC0uMDItMS44MDUtLjEyMi0xLjI1LS4yNTQtMi4zMzMtMS0zLjU4NS0yLjU2NmEuNS41IDAgMTEuNzgtLjYyNGMuOSAxLjEyNCAxLjY1MyAxLjc0IDIuNDM0IDIuMDQzLjE1NS4wNTIuMzQ1LjA4My41NjIuMTA1em0xLjc4NS4xMjhjLjA4My4wMS4xNjcuMDIxLjI1MS4wMzRMMTIuNSAxMGExLjUgMS41IDAgMTAtLjMzLS4wMzZ6TTkuNzggMTEuOTdhLjUuNSAwIDAxLjUuNWMwIC4wNzYtLjA0Ny4yMjYtLjA1LjIzMS0uMTc5LjM4LS4yMy43NzQtLjIzIDEuMzAydjEuNWEuNS41IDAgMTEtMSAwdi0xLjVjMC0uNjU3LjA3Mi0xLjE4Ni4zMDctMS42OTZhLjUuNSAwIDAxLjQ3My0uMzM3ek01Ljk1OCA1Ljc3MmEuNS41IDAgMDEtLjc4LjYyNUwzLjExIDMuODEyYS41LjUgMCAxMS43OC0uNjI0bDIuMDY4IDIuNTg0ek0xIDExaDUuNWEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxLS41LS41Vi41QS41LjUgMCAwMS41IDBoMTJhLjUuNSAwIDAxLjUuNXYzYS41LjUgMCAxMS0xIDBWMUgxdjEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFpbmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhc2ggPSBmdW5jdGlvbiBFdWlJY29uVHJhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzaDV2MUgwVjNoNVYxYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2MnptLTcuMDU2IDhIN3YxSDQuMWwuMzkyIDIuNTE5Yy4wNDIuMjY5LjI1NC40NTguNDkzLjQ1OGg2LjAzYy4yMzkgMCAuNDUxLS4xODkuNDkzLS40NThsMS40OTgtOS41NzZIMTRsLTEuNTA0IDkuNzNjLS4xMTYuNzQ3LS43NCAxLjMwNC0xLjQ4MSAxLjMwNGgtNi4wM2MtLjc0MSAwLTEuMzY1LS41NTctMS40ODEtMS4zMDRsLTEuNTExLTkuNzNIOVY1Ljk1SDMuMTU3TDMuNDc2IDhIOHYxSDMuNjMybC4zMTIgMnpNNiAzaDRWMUg2djJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25VbmZvbGQgPSBmdW5jdGlvbiBFdWlJY29uVW5mb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNCAzLjgwOEw3LjUzIDEuNTFhLjY3LjY3IDAgMDEuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAwMC0uOTNMOS40MTYuNTc4YTIuMDIgMi4wMiAwIDAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwMDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHptMCA4LjM4NGwyLjM5IDIuMjk4YS42Ny42NyAwIDAwLjk0MiAwbDIuMzg5LTIuMjk4YS42NzcuNjc3IDAgMDEuOTQ0IDAgLjY1LjY1IDAgMDEwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwMTAtLjkzLjY3Ny42NzcgMCAwMS45NDQgMHpNMTYgNkgwdjRoMTZWNnpNMSA5VjdoMTR2MkgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25VbmZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVubGluayA9IGZ1bmN0aW9uIEV1aUljb25VbmxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU2NSAxMC44M2EuNS41IDAgMTEuODE5LjU3M2wtMS44NzcgMi42OGMtLjk2MyAxLjM3Ni0zLjAyIDEuNTUtNC41ODguNDVDLjM1IDEzLjQzNi0uMTkxIDExLjQ0NS43NzMgMTAuMDdMMy42NCA1Ljk3M2MuOTYzLTEuMzc1IDMuMDE5LTEuNTQ4IDQuNTg3LS40NWEuNS41IDAgMTEtLjU3My44MkM2LjUwOSA1LjU0IDUuMDggNS42NiA0LjQ2IDYuNTQ2bC0yLjg2OCA0LjA5NWMtLjYyMS44ODctLjI0NSAyLjI3LjkgMy4wNzMgMS4xNDYuODAyIDIuNTc1LjY4MiAzLjE5Ni0uMjA1bDEuODc3LTIuNjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03Ljg5MiAzLjQzYS41LjUgMCAxMS0uNTc0LS44MTlMMTAgLjczNGMxLjM3Ni0uOTYzIDMuMzY3LS40MjIgNC40NjUgMS4xNDYgMS4wOTggMS41NjkuOTI2IDMuNjI1LS40NSA0LjU4OEw5LjkxOCA5LjMzNmMtMS4zNzUuOTYzLTMuMzY2LjQyMi00LjQ2NC0xLjE0NmEuNS41IDAgMTEuODE5LS41NzRjLjgwMiAxLjE0NiAyLjE4NSAxLjUyMiAzLjA3Mi45TDEzLjQ0IDUuNjVjLjg4Ni0uNjIxIDEuMDA2LTIuMDUuMjA0LTMuMTk1LS44MDItMS4xNDYtMi4xODYtMS41MjItMy4wNzItLjlMNy44OTIgMy40M3pNNiAuNXYzYS41LjUgMCAwMS0xIDB2LTNhLjUuNSAwIDAxMSAwek0xLjA1OCAyLjIzbDIuNDU4IDEuNzJhLjUuNSAwIDAxLS41NzQuODJMLjQ4NCAzLjA1YS41LjUgMCAxMS41NzQtLjgyem0xMiA3LjA5M2wyLjQ1NyAxLjcyYS41LjUgMCAxMS0uNTczLjgybC0yLjQ1Ny0xLjcyYS41LjUgMCAxMS41NzMtLjgyem0tMi4wOTkgMS4xODF2M2EuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAxMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyID0gZnVuY3Rpb24gRXVpSWNvblVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5YTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wLTFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgMTQuMjkxQTkuMDUzIDkuMDUzIDAgMDA4IDExYTkuMDUzIDkuMDUzIDAgMDAtNyAzLjI5MWwuNzE1LjcxQTguMDQ3IDguMDQ3IDAgMDE4IDExLjk5NiA4LjA0NyA4LjA0NyAwIDAxMTQuMjg2IDE1bC43MTQtLjcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyQXZhdGFyID0gZnVuY3Rpb24gRXVpSWNvblVzZXJBdmF0YXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgdmlld0JveDogXCIwIDAgMTggMThcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjY4OSAxMS4xMzJjMS4xNTUgMS4yMjIgMS45NTMgMi44NzkgMi4xODMgNC43NDhhMS4wMDcgMS4wMDcgMCAwMS0xIDEuMTJIMy4wMDdhMS4wMDUgMS4wMDUgMCAwMS0xLTEuMTJjLjIzLTEuODcgMS4wMjgtMy41MjYgMi4xODMtNC43NDguMjQ3LjIyOC41MDUuNDQyLjc4Mi42MzMtMS4wMzggMS4wNjktMS43NjUgMi41NS0xLjk3MiA0LjIzN0wxNC44NzIgMTZjLS4yMDQtMS42ODYtLjkzLTMuMTY2LTEuOTY2LTQuMjM1YTcuMDEgNy4wMSAwIDAwLjc4My0uNjMzek04LjkzOSAxYzEuOSAwIDMgMiA0LjM4IDIuNjMzYTIuNDgzIDIuNDgzIDAgMDEtMS44OC44NjdjLS4yOTggMC0uNTc5LS4wNi0uODQ0LS4xNTdBMy43MjYgMy43MjYgMCAwMTcuNjkgNS43NWMtMS4zOTUgMC0zLjc1LjI1LTMuMjQ1LTEuOTAzQzUuOTQgMyA2Ljk1MiAxIDguOTQgMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTQgMmMyLjIwNSAwIDQgMS43OTQgNCA0cy0xLjc5NSA0LTQgNGMtMi4yMDcgMC00LTEuNzk0LTQtNHMxLjc5My00IDQtNG0wIDlBNSA1IDAgMTA4LjkzNy45OTkgNSA1IDAgMDA4Ljk0IDExXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyQXZhdGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VycyA9IGZ1bmN0aW9uIEV1aUljb25Vc2VycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjQ4MiA0LjM0NGEyIDIgMCAxMC0yLjk2MyAwYy0uMDguMDQyLS4xNTYuMDg3LS4yMy4xMzYtLjQ1Ny4zMDUtLjc1LjcwNC0uOTMzIDEuMDczQTMuNDU3IDMuNDU3IDAgMDAxIDYuOTc4VjlhMSAxIDAgMDAxIDFoMi41YTMuNjkgMy42OSAwIDAxLjY4NC0uOTYyTDUuMTcxIDlIMlY3czAtMiAyLTJjMS4wMDcgMCAxLjUwNy41MDcgMS43NTUgMS4wMS4yMjUtLjI1NC40OTMtLjQ3Ljc5My0uNjM2YTIuNzE3IDIuNzE3IDAgMDAtMS4wNjYtMS4wM3pNNCA0YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0xMCA2aC0yLjVhMy42ODQgMy42ODQgMCAwMC0uNjg0LS45NjJMMTAuODI5IDlIMTRWN3MwLTItMi0yYy0xLjAwNyAwLTEuNTA3LjUwNy0xLjc1NSAxLjAxYTMuMDEyIDMuMDEyIDAgMDAtLjc5My0uNjM2IDIuNzE2IDIuNzE2IDAgMDExLjA2Ni0xLjAzIDIgMiAwIDExMi45NjMgMGMuMDguMDQyLjE1Ni4wODcuMjMuMTM2LjQ1Ny4zMDUuNzUuNzA0LjkzMyAxLjA3M0EzLjQ1MyAzLjQ1MyAwIDAxMTUgNi45NDRWOWExIDEgMCAwMS0xIDF6bS0yLTZhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgOGMwIC41MTctLjE5Ni45ODktLjUxOCAxLjM0NGEyLjc1NSAyLjc1NSAwIDAxMS4xNjMgMS4yMUEzLjQ1MyAzLjQ1MyAwIDAxMTEgMTEuOTc3VjE0YTEgMSAwIDAxLTEgMUg2YTEgMSAwIDAxLTEtMXYtMi4wMjJhMi4wMDUgMi4wMDUgMCAwMS4wMDYtLjEzNSAzLjQ1NiAzLjQ1NiAwIDAxLjM1LTEuMjkgMi43NTUgMi43NTUgMCAwMTEuMTYyLTEuMjFBMiAyIDAgMTExMCA4em0tNCA0djJoNHYtMnMwLTItMi0yLTIgMi0yIDJ6bTMtNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNSAxMVY1SDExVjMuNUg1VjVIMy41djZINXYxLjVoNlYxMWgxLjV6bTEgMEgxNXY0aC00di0xLjVINVYxNUgxdi00aDEuNVY1SDFWMWg0djEuNWg2VjFoNHY0aC0xLjV2NnpNNCA0VjJIMnYyaDJ6bTggMGgyVjJoLTJ2MnpNMiAxNGgydi0ySDJ2MnptMTAgMGgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlkZW9QbGF5ZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlkZW9QbGF5ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpNMSA0aDE0djFIMVY0em0xLjUtMWEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTMgMGEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTQuOTQ3IDYuMTA2YTEgMSAwIDAxMCAxLjc4OGwtMyAyQTEgMSAwIDAxNiAxMlY4YTEgMSAwIDAxMS40NDctLjg5NGwzIDJ6TTEwIDEwTDcgOHY0bDMtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlkZW9QbGF5ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0FyZWEgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNoMTBWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxNyAzIDYuMTkxVjEzem01LjI5NS01LjM1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDFMOC4yOTUgNy42NXpNMSAxNWgxMy41YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMDEtLjUtLjV2LTE0YS41LjUgMCAwMTEgMFYxNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQXJlYVN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYVN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwMS41LjVWMTVoMTMuNWEuNS41IDAgMTEwIDFILjVhLjUuNSAwIDAxLS41LS41di0xNEEuNS41IDAgMDEuNSAxem00LjM0MiAyLjE5NEw4LjI5NSA3LjY1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDF6bS0uMzk0IDEuMTIzTDMgNi4xOTF2NC4xMDFsMS4xNDYtMS4xNDZhLjUuNSAwIDAxLjQ5My0uMTI2bC4wODUuMDMzTDguNSAxMC45NGwxLjc3Ni0uODg4YS41LjUgMCAwMS4zNi0uMDM0bC4wODguMDM0TDEzIDExLjE5VjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwMS0uNzI4LS4wNjdMNC40NDggNC4zMTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0FyZWFTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBoLTZhLjUuNSAwIDAxMC0xSDhWNkgyLjVhLjUuNSAwIDAxMC0xSDEzVjJIMi41YS41LjUgMCAwMTAtMWgxMWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVIOXYzaDIuNWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVoLTlhLjUuNSAwIDExMC0xSDExdi0zSDguNXpNMCAuNWEuNS41IDAgMTExIDB2MTRhLjUuNSAwIDExLTEgMFYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAwYS41LjUgMCAwMS41LjV2MTRhLjUuNSAwIDExLTEgMFYuNUEuNS41IDAgMDEuNSAwem0xMyAxYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNUg5djNoMi41YS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNWgtOWEuNS41IDAgMTEwLTFIOXYtM0gyLjVhLjUuNSAwIDAxMC0xSDZWNkgyLjVhLjUuNSAwIDAxMC0xSDEwVjJIMi41YS41LjUgMCAwMTAtMWgxMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNy41djZhLjUuNSAwIDExLTEgMFY4SDZ2NS41YS41LjUgMCAxMS0xIDBWM0gydjEwLjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41VjdoM1Y0LjVhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMFY1aC0zdjIuNXpNLjUgMTZhLjUuNSAwIDExMC0xaDE0YS41LjUgMCAxMTAgMUguNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE1YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMTEwLTFoMTR6bS05LTEzYS41LjUgMCAwMS41LjVMNS45OTkgN0g5VjQuNWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwVjdoLTN2Ni41YS41LjUgMCAwMS0uNDEuNDkyTDkuNSAxNGEuNS41IDAgMDEtLjUtLjVWMTBINnYzLjVhLjUuNSAwIDAxLS45OTIuMDlMNSAxMy41VjZIMnY3LjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjg3NyA1Ljg0N2wtMS4wMiAxLjAyYS41LjUgMCAwMS0uNzA4LS43MDdsMS4xLTEuMDk5Yy0uMDUtLjA1My0uMS0uMTA2LS4xNTItLjE1N0E2LjQ3MSA2LjQ3MSAwIDAwOCAzLjAxOVY0LjVhLjUuNSAwIDAxLTEgMFYzLjAxOWE2LjQ3IDYuNDcgMCAwMC00LjI2MSAyLjA1NWwxLjA3IDEuMDcxYS41LjUgMCAwMS0uNzA2LjcwN2wtLjk5LS45OUE2LjQ2IDYuNDYgMCAwMDEuMDE4IDEwSDIuNWEuNS41IDAgMTEwIDFIMS4xNzRjLjA4My4zNTMuMTk2LjY5Ny4zMzcgMS4wM2EuNS41IDAgMTEtLjkyMi4zOUE3LjQ4NyA3LjQ4NyAwIDAxMCA5LjVhNy40ODMgNy40ODMgMCAwMTIuMTk3LTUuMzA0QTcuNDg3IDcuNDg3IDAgMDE3LjUgMmE3LjQ4NyA3LjQ4NyAwIDAxNS4zMDQgMi4xOTdBNy40ODMgNy40ODMgMCAwMTE1IDkuNWE3LjQ4NyA3LjQ4NyAwIDAxLS41OSAyLjkyLjUuNSAwIDAxLS45Mi0uMzljLjE0LS4zMzMuMjUzLS42NzcuMzM2LTEuMDNIMTIuNWEuNS41IDAgMTEwLTFoMS40ODFhNi40ODMgNi40ODMgMCAwMC0xLjEwNC00LjE1M3ptLTYuMDQxIDUuMzE3YS45OTMuOTkzIDAgMDEtLjAxLTEuNDA0Yy4zODQtLjM4NSAyLjg4Mi0yLjAwMiAzLjE0OS0xLjczNS4yNjcuMjY3LTEuMzUgMi43NjUtMS43MzUgMy4xNWEuOTkzLjk5MyAwIDAxLTEuNDA0LS4wMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR2F1Z2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0dvYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzR29hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcyNSAzLjY1M2E2IDYgMCAwMTIuODQ3IDcuNTc2LjUuNSAwIDAxLS45MjgtLjM3MiA1IDUgMCAxMC05LjI5My0uMDE0LjUuNSAwIDAxLS4yMTguNjE5TDEuMzkgMTIuNDdhLjUuNSAwIDAxLS43MDgtLjIzQTcuOTkgNy45OSAwIDAxMCA5YTggOCAwIDAxMTEuMjEyLTcuMzI5LjUuNSAwIDAxLjIzNC43MDRsLS43MjEgMS4yNzh6bS0uOTMzLS4zOGwuNS0uODg5YTcgNyAwIDAwLTguOTAyIDguOTNsLjg4Ni0uNTExYTYgNiAwIDAxNy41MTYtNy41M3pNNi43MyA5LjQ2N2ExLjc1IDEuNzUgMCAxMTIuNTM5IDAgMiAyIDAgMTEtMi41MzkgMHpNOCAxMi4wMTNhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTAtM2EuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR29hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTGluZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNMaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNjU0IDMuNDhjLjI0OC4yMjUuNTUyLjM4OS44ODguNDY3TDExLjI0IDkuNDNhMS45OSAxLjk5IDAgMDAtLjkxNS0uNDA0bDIuMzMtNS41NDd6TTkuMTQ2IDkuMTlhMi4wMDggMi4wMDggMCAwMC0uNzY5LjY0bC0xLjU3Mi0yYy4zMTEtLjEzNi41ODEtLjM1Ljc4NS0uNjE4bDEuNTU2IDEuOTc4ek01LjU4MSA3Ljk1NmwtMi4xMzQgNC4yNjhhLjUuNSAwIDAxLS44OTQtLjQ0OGwyLjEzNC00LjI2OGMuMjUuMjIuNTU3LjM3Ni44OTQuNDQ4ek0xIDE1aDEzLjVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAwMS0uNS0uNXYtMTRhLjUuNSAwIDAxMSAwVjE1em01LThhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTQgNWExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnptNC05YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNMaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNNYXBDb29yZGluYXRlID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcENvb3JkaW5hdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgMTVDNS43NyAxNSAyIDkuOTcgMiA2LjU5NSAyIDMuNTA3IDQuNDYgMSA3LjUgMVMxMyAzLjUwNyAxMyA2LjU5NUMxMyA5Ljk3IDkuMjMgMTUgNy41IDE1em0wLTFjLjI4NiAwIDEuNDgtMS4wNDQgMi40NTktMi4zNUMxMS4yMTkgOS45NjkgMTIgOC4xNTMgMTIgNi41OTYgMTIgNC4wNTUgOS45ODMgMiA3LjUgMlMzIDQuMDU1IDMgNi41OTVjMCAxLjU1Ny43OCAzLjM3MyAyLjA0MSA1LjA1NkM2LjAyIDEyLjk1NiA3LjIxNCAxNCA3LjUgMTR6bTAtNC45OTZhMi41IDIuNSAwIDExMC01IDIuNSAyLjUgMCAwMTAgNXptMC0xYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcENvb3JkaW5hdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01hcFJlZ2lvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNNYXBSZWdpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMi4zMDl2OC42OWEuNDk5LjQ5OSAwIDAxLS4wMzIuMTc2TDkuNSAxMi42OTFWMy44MDlsLTMtMS41em0tMS0uMDRMMiAzLjgyNXY4LjkwNmwzLjUyNy0xLjU2OGEuNS41IDAgMDEtLjAyNy0uMTY0VjIuMjd6bS4yNzQtMS4yMTZhLjQ5OC40OTggMCAwMS40NzEuMDFsMy43NjggMS44ODQgNC4yODQtMS45MDRBLjUuNSAwIDAxMTUgMS41djEwYS41LjUgMCAwMS0uMjk3LjQ1N2wtNC41IDJhLjUuNSAwIDAxLS40MjctLjAxbC0zLjc4OS0xLjg5NC00LjI4MyAxLjkwNGEuNS41IDAgMDEtLjcwMy0uNDU3di0xMGEuNS41IDAgMDEuMjk3LS40NTdsNC40NzYtMS45OXpNMTAuNSAzLjgyNXY4LjkwNmwzLjUtMS41NTZWMi4yN2wtMy41IDEuNTU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNYXBSZWdpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01ldHJpYyA9IGZ1bmN0aW9uIEV1aUljb25WaXNNZXRyaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUzMiA3LjM0YTIuMTYxIDIuMTYxIDAgMTEyLjkzNiAwIDIuNzQ2IDIuNzQ2IDAgMTEtMi45MzYgMHpNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bTYgNS45MTVhMS4xNjEgMS4xNjEgMCAxMDAtMi4zMjIgMS4xNjEgMS4xNjEgMCAwMDAgMi4zMjJ6bTAgNC40OTJhMS43NDYgMS43NDYgMCAxMDAtMy40OTIgMS43NDYgMS43NDYgMCAwMDAgMy40OTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01ldHJpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzUGllID0gZnVuY3Rpb24gRXVpSWNvblZpc1BpZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSA5YS41LjUgMCAwMS0uNS0uNVYzLjAyM0E1LjUgNS41IDAgMTAxMS45NzggOUg2LjV6TTcgOGg1LjVhLjUuNSAwIDAxLjUuNUE2LjUgNi41IDAgMTE2LjUgMmEuNS41IDAgMDEuNS41Vjh6bTItNi45NzJWNmg0Ljk3MkMxMy42OTYgMy41NTIgMTEuNDQ4IDEuMzA0IDkgMS4wMjh6TTE0LjUgN2gtNmEuNS41IDAgMDEtLjUtLjV2LTZhLjUuNSAwIDAxLjUtLjVDMTEuODUzIDAgMTUgMy4xNDcgMTUgNi41YS41LjUgMCAwMS0uNS41ek02LjE0NiA4Ljg1NGEuNS41IDAgMTEuNzA4LS43MDhsNCA0YS41LjUgMCAwMS0uNzA4LjcwOGwtNC00elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNQaWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1RhYmxlID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNSA2YS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAxMTAtMWg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGFnQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFnQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgOS4wNDdhLjUuNSAwIDEwMCAxaDEzYS41LjUgMCAwMDAtMWgtMTN6bTAtMWgxM2ExLjUgMS41IDAgMDEwIDNoLTEzYTEuNSAxLjUgMCAwMTAtM3pNMTAgMTNhLjUuNSAwIDExMCAxSDRhLjUuNSAwIDExMC0xaDZ6TTguMDAxIDIuMDE1YS41LjUgMCAxMS0uMDAyIDFsLTUtLjAxNWEuNS41IDAgMTEuMDAzLTFsNSAuMDE1ek0xNCA1YS41LjUgMCAxMTAgMUg2YS41LjUgMCAwMTAtMWg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWdDbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDV2NmgyYS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTFoMlY1SDV2LjVhLjUuNSAwIDAxLTEgMHYtMWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMS41LjUxbC0uMDIxIDFhLjUuNSAwIDExLTEtLjAybC4wMS0uNDlIOC41ek0xIDE1aDEuNWEuNS41IDAgMTEwIDFoLTJhLjUuNSAwIDAxLS41LS41di0xLjk5NmEuNS41IDAgMDExIDBWMTV6TTEgMXYxLjQ5N2EuNS41IDAgMTEtMSAwVi41QS41LjUgMCAwMS41IDBoMmEuNS41IDAgMDEwIDFIMXptMTQgMGgtMS40OTVhLjUuNSAwIDAxMC0xSDE1LjVhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMXptMCAxNHYtMS41YS41LjUgMCAxMTEgMHYyYS41LjUgMCAwMS0uNS41aC0yYS41LjUgMCAxMTAtMUgxNXpNMCA2LjVhLjUuNSAwIDAxMSAwdjNhLjUuNSAwIDAxLTEgMHYtM3pNOS41IDBhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMWgzek0xNSA2LjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDExLTEgMHYtM3pNOS41IDE1YS41LjUgMCAxMTAgMWgtM2EuNS41IDAgMTEwLTFoM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uVmlzVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44ODQgMS44MDJjMS4xNzEtLjMwOSAyLjIyLS4yNCAzLjEwMy4wNy4yOTUuMTA0LjUwNy4yMTIuNjMxLjI5MmwuMTY0LjEwNi4wNDguMTg4Yy4yNzggMS4wNjYuMiAyLjE3NS0uMDkxIDMuMjNhNi43MjggNi43MjggMCAwMS0uMTk0LjU5OGMuMDM1LjEyLjA3NC4yNzMuMTEyLjQ1NC4yMjcgMS4wNjUuMjQ3IDIuMTkzLS4wOCAzLjI2N2E0Ljg1NSA0Ljg1NSAwIDAxLS41MzQgMS4xNzVjLS4zMjQuNTE0LS43Ljk1NC0xLjExNyAxLjMyMy0uODA2LjcxMi0xLjYxNiAxLjA3MS0yLjIzNSAxLjIwNi0uMTQuMTc5LS4zNDYuMzgxLS42MjkuNTc4LS42NDMuNDQ3LTEuNDkzLjcxMS0yLjU2MS43MTEtMS4wNyAwLTEuOTItLjI2NC0yLjU2My0uNzExYTIuODc0IDIuODc0IDAgMDEtLjYyOS0uNTc4Yy0uNjE4LS4xMzQtMS40MjgtLjQ5My0yLjIzMi0xLjIwMy0uNDE5LS4zNy0uNzk2LS44MS0xLjEyLTEuMzI2YTQuODU1IDQuODU1IDAgMDEtLjUzNC0xLjE3NUMuMDk2IDguOTMzLjExNiA3LjgwNS4zNDMgNi43NGE2Ljc0IDYuNzQgMCAwMS4xMTItLjQ1NCA2LjcyOCA2LjcyOCAwIDAxLS4xOTQtLjU5OEMtLjAzIDQuNjMzLS4xMDggMy41MjQuMTcgMi40NThsLjA0OC0uMTg4LjE2NC0uMTA2Yy4xMjQtLjA4LjMzNi0uMTg4LjYzLS4yOTEuODg1LS4zMSAxLjkzMy0uMzggMy4xMDQtLjA3LjE4NC0uMTA4LjQzNC0uMjMuNzQ4LS4zNDhDNS42MTYgMS4xNyA2LjQ5NyAxIDcuNTAxIDFjMS4wMDIgMCAxLjg4My4xNyAyLjYzNC40NTUuMzE1LjExOS41NjUuMjQuNzUuMzQ3em0zLjAyNyAxLjExNmEzLjEzIDMuMTMgMCAwMC0uMjU1LS4xMDJjLS43NDktLjI2My0xLjY2LS4zMDktMi43MDguMDA3bC0uMjM4LjA3Mi0uMjAxLS4xNDdjLS4xMS0uMDgtLjM1NC0uMjE3LS43MjgtLjM1OEM5LjE0IDIuMTQ3IDguMzggMiA3LjUwMSAyYy0uODggMC0xLjY0MS4xNDctMi4yODMuMzktLjM3My4xNDEtLjYxNy4yNzgtLjcyNy4zNThsLS4yLjE0Ny0uMjQtLjA3MmMtMS4wNDgtLjMxNi0xLjk1OC0uMjctMi43MDctLjAwN2EzLjEzIDMuMTMgMCAwMC0uMjU1LjEwMmMtLjE2Ny44MTItLjA5NCAxLjY3NC4xMzYgMi41MDMuMDg0LjMwMy4xNjYuNTI0LjIxNy42MzdsLjA4Mi4xODItLjA2Ni4xOWMtLjAzMi4wOS0uMDg0LjI3LS4xMzcuNTE4LS4xOTUuOTE0LS4yMTIgMS44OC4wNTkgMi43NjcuMS4zMzMuMjQxLjY0NS40MjMuOTM1LjI3My40MzQuNTg4LjgwMS45MzYgMS4xMDguNDM0LjM4My44OTguNjU1IDEuMzYuODM0LjI3LjEwNS40NzQuMTU1LjU3NS4xN2wuMjQ4LjAzNC4xMi4yMmMuMDUxLjA5MS4xOTkuMjY2LjQ2Ni40NTIuNDc2LjMzIDEuMTI3LjUzMiAxLjk5My41MzIuODY1IDAgMS41MTYtLjIwMiAxLjk5LS41MzIuMjY4LS4xODYuNDE2LS4zNi40NjYtLjQ1MmwuMTIxLS4yMi4yNDgtLjAzNGMuMTAxLS4wMTUuMzA1LS4wNjUuNTc2LS4xNy40NjItLjE4LjkyNy0uNDUyIDEuMzYyLS44MzYuMzQ3LS4zMDcuNjYtLjY3NC45MzMtMS4xMDcuMTgyLS4yOS4zMjItLjYwMS40MjMtLjkzNC4yNzEtLjg4Ny4yNTQtMS44NTMuMDYtMi43NjdhNC41OTcgNC41OTcgMCAwMC0uMTM4LS41MTlsLS4wNjYtLjE4OS4wODItLjE4MmMuMDUtLjExMy4xMzMtLjMzNC4yMTctLjYzNy4yMy0uODI5LjMwMy0xLjY5MS4xMzYtMi41MDN6TTUgNS4wMDhjLjAwNC4xODEtLjA0OC4zNjQtLjI2NC42MTYtLjQyOC40OTgtLjk4NS40ODgtMS40MzEuMDQ5LS4zMjYtLjMyMS0uMzI1LS43MzItLjI5LTEuMDQ3LjA4NS0uNzYuNzQ4LS43MjIgMS4yNjItLjQ0LjQ4Ni4yNy43MTcuNjE2LjcyMy44MjN6bTUgMGMuMDA2LS4yMDYuMjM3LS41NTMuNzI0LS44MjEuNTE0LS4yODMgMS4xNzYtLjMyMSAxLjI2LjQ0LjAzNi4zMTQuMDM4LjcyNS0uMjg4IDEuMDQ2LS40NDYuNDQtMS4wMDUuNDQ5LTEuNDMzLS4wNS0uMjE3LS4yNS0uMjY3LS40MzQtLjI2My0uNjE0ek03LjUgOGMtLjUwMyAwLS45NzYtLjI0LTEuMzc1LS42NzItLjM5OC0uNDMyLS41OTItMS4xMjYgMC0xLjUyOC4zODQtLjI1OSAxLjA4Mi0uMyAxLjM3NS0uMy4yOTQgMCAuOTkxLjA0MSAxLjM3NS4zLjU5My40MDIuMzk3IDEuMDk2IDAgMS41MjhDOC40NzcgNy43NiA4LjAwMiA4IDcuNSA4em0wIDFjLjgwOCAwIDIuNjU2Ljk5NCAyLjQ5IDIuMDc0LS4xNTMuOTkzLTIuMTE0LjkyNS0yLjQ5LjkyNS0uMzc0IDAtMi4zMzYuMDY4LTIuNDktLjkyNUM0Ljg0NSA5Ljk5NCA2LjY5MyA5IDcuNSA5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVmVnYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNWZWdhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzZMNC44OSAxMC41MWEuNS41IDAgMDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAxMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxMS43MDcuNzA3TDIuNDE0IDguMDM2em04Ljc2OCAyLjQ3NGwyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMDEuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAxMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMTEtLjcwNy0uNzA4ek04LjU1OSAyLjUwNmEuNS41IDAgMDEuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMDEtLjk4MS0uMTlMOC41NTkgMi41MDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1ZlZ2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODM3IDdjLjExLjkzLjE2NSAxLjg4Ni4xNjUgMi44NjlWMTMuNWEuNS41IDAgMTEtMSAwVjkuODY5QTIzLjMgMjMuMyAwIDAwOC44MyA3SDcuMjljLS4xOTUgMS4wNC0uMjkyIDEuOTg1LS4yOTIgMi44MzVWMTMuNWEuNS41IDAgMTEtMSAwVjkuODM1YzAtLjg2NC4wOTItMS44MDkuMjc2LTIuODM1SDIuNWEuNS41IDAgMDEtLjQ5NS0uNTdjLjI4NS0yLjAyMyAxLjYyNi0zLjM1OCAzLjkzMS0zLjk2IDEuOTY3LS41MTQgNC4yMi0uNjA2IDYuNzU2LS4yNzhBMS41IDEuNSAwIDAxMTQgMy42NzlWNS41QTEuNSAxLjUgMCAwMTEyLjUgN0g5LjgzN3ptLS41NjktMUgxMi41YS41LjUgMCAwMC41LS41VjMuNjhhLjUuNSAwIDAwLS40MzYtLjQ5N2MtMi40MTYtLjMxMS00LjU0LS4yMjUtNi4zNzUuMjU0QzQuNDk0IDMuODggMy40OTEgNC43MjQgMy4xMTcgNkg5LjI2OHpNMiAxMHYzLjVhLjUuNSAwIDExLTEgMHYtNGEuNS41IDAgMDEuNS0uNWgzYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMTEtMSAwVjEwSDJ6bTEwIDMuNWEuNS41IDAgMTEtMSAwdi0yYS41LjUgMCAwMS41LS41aDNhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMTJoLTJ2MS41ek0xLjAxNiAxNi4wMjZhLjUuNSAwIDAxMC0xSDE1YS41LjUgMCAxMTAgMUgxLjAxNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXAgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoMTJ2MUgyVjN6bTAgOGg2djFIMnYtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgN2g5LjV2LjVWN2guMDM5bC4wODMuMDA1YTIuOTU4IDIuOTU4IDAgMDExLjEwMi4yOThjLjMwOS4xNTQuNjMzLjM5NC44OC43NjMuMjQ4LjM3My4zOTYuODQ3LjM5NiAxLjQzNCAwIC41ODgtLjE0OCAxLjA2MS0uMzk2IDEuNDM0YTIuMjU3IDIuMjU3IDAgMDEtLjg4Ljc2MyAyLjk1NyAyLjk1NyAwIDAxLTEuMTg1LjMwMmgtLjAyNWwtLjAwOS4wMDFoLS4wMDNzLS4wMDIgMC0uMDAyLS41di41SDExdjFsLTItMS41IDItMS41djFoLjUwNmwuMDQ0LS4wMDNhMS45NTkgMS45NTkgMCAwMC43MjYtLjE5NWMuMTkxLS4wOTUuMzY3LS4yMy40OTUtLjQyMy4xMjctLjE5LjIyOS0uNDY2LjIyOS0uODc5cy0uMTAyLS42ODktLjIyOS0uODc5YTEuMjU2IDEuMjU2IDAgMDAtLjQ5NS0uNDI0IDEuOTU4IDEuOTU4IDAgMDAtLjc3LS4xOTdIMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXBEaXNhYmxlZCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcERpc2FibGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMy41TDEyIDJ2MUgydjFoMTB2MWwyLTEuNXpNMTIgOVY4SDJWN2gxMFY2bDIgMS41TDEyIDl6bTAgM3YxbDItMS41LTItMS41djFIMnYxaDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcERpc2FibGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25XcmVuY2ggPSBmdW5jdGlvbiBFdWlJY29uV3JlbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MTggOS43NDZsNC41MzcgNC41MzdhMiAyIDAgMTAyLjgyOC0yLjgyOWwtMy4xNTctMy4xNTZhLjUuNSAwIDAxLjcwOC0uNzA4bDMuMTU2IDMuMTU3YTMgMyAwIDExLTQuMjQzIDQuMjQzbC00Ljk0OS00Ljk1YTUuMDAxIDUuMDAxIDAgMDEtNS4yMi03LjEwNi41LjUgMCAwMS44MDUtLjEzOEwzLjY3NiA1LjA5YTEgMSAwIDEwMS40MTUtMS40MTRMMi43OTcgMS4zODJhLjUuNSAwIDAxLjEzOC0uODA1IDUuMDAxIDUuMDAxIDAgMTEzLjk4MyA5LjE2OXpNMS4yMjYgNC4wNTRhNC4wMDIgNC4wMDIgMCAwMDYuNjkzIDMuODY1IDQgNCAwIDAwLTMuODY1LTYuNjkzbDEuNzQ0IDEuNzQzYTIgMiAwIDExLTIuODI5IDIuODI4TDEuMjI2IDQuMDU0em0xMC4yMjkgOC44MTRhMSAxIDAgMTExLjQxNC0xLjQxNCAxIDEgMCAwMS0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV3JlbmNoOyIsICJpbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMiBmcm9tICcuL2Fzc2V0cy9hbGVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNiBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3IGZyb20gJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTggZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYgZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNyBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4IGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMCBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQgZnJvbSAnLi9hc3NldHMvYXBwX2dpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4IGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMCBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzIGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNSBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2IGZyb20gJy4vYXNzZXRzL2FwcF9tbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzggZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MCBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MSBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzIGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NyBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDggZnJvbSAnLi9hc3NldHMvYXBwX3NxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5IGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MyBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2IGZyb20gJy4vYXNzZXRzL2FwcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NyBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4IGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OSBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxIGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0IGZyb20gJy4vYXNzZXRzL2JlYWtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1IGZyb20gJy4vYXNzZXRzL2JlbGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NiBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NyBmcm9tICcuL2Fzc2V0cy9ib2x0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjggZnJvbSAnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5IGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAgZnJvbSAnLi9hc3NldHMvYnJhbmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEgZnJvbSAnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyIGZyb20gJy4vYXNzZXRzL2Jyb29tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMgZnJvbSAnLi9hc3NldHMvYnJ1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NCBmcm9tICcuL2Fzc2V0cy9idWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NSBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2IGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcgZnJvbSAnLi9hc3NldHMvY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OCBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkgZnJvbSAnLi9hc3NldHMvY2hlZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MCBmcm9tICcuL2Fzc2V0cy9jbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxIGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMgZnJvbSAnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NSBmcm9tICcuL2Fzc2V0cy9jb2xvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2IGZyb20gJy4vYXNzZXRzL2NvbXB1dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NyBmcm9tICcuL2Fzc2V0cy9jb25zb2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUgZnJvbSAnLi9hc3NldHMvY29weS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcgZnJvbSAnLi9hc3NldHMvY3Jvc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OCBmcm9tICcuL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5IGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAgZnJvbSAnLi9hc3NldHMvY3VycmVuY3kuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEgZnJvbSAnLi9hc3NldHMvY3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAyIGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAzIGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA2IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA4IGZyb20gJy4vYXNzZXRzL2RvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE1IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE3IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIxIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjIgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIzIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEgZnJvbSAnLi9hc3NldHMvZW1haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIgZnJvbSAnLi9hc3NldHMvZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDMgZnJvbSAnLi9hc3NldHMvZXFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0IGZyb20gJy4vYXNzZXRzL2VyYXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSBmcm9tICcuL2Fzc2V0cy9leGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2IGZyb20gJy4vYXNzZXRzL2V4cGFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NyBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4IGZyb20gJy4vYXNzZXRzL2V4cG9ydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0OSBmcm9tICcuL2Fzc2V0cy9leWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUyIGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MyBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCBmcm9tICcuL2Fzc2V0cy9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUgZnJvbSAnLi9hc3NldHMvZmxhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiBmcm9tICcuL2Fzc2V0cy9mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU3IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU5IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MyBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiBmcm9tICcuL2Fzc2V0cy9nZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY3IGZyb20gJy4vYXNzZXRzL2dsYXNzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjggZnJvbSAnLi9hc3NldHMvZ2xvYmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjkgZnJvbSAnLi9hc3NldHMvZ3JhYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MCBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEgZnJvbSAnLi9hc3NldHMvZ3JpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MiBmcm9tICcuL2Fzc2V0cy9oZWFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MyBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc0IGZyb20gJy4vYXNzZXRzL2hlbHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUgZnJvbSAnLi9hc3NldHMvaG9tZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NiBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcgZnJvbSAnLi9hc3NldHMvaW1hZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzggZnJvbSAnLi9hc3NldHMvaW1wb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc5IGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgwIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODEgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODIgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MyBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg0IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODUgZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODYgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODcgZnJvbSAnLi9hc3NldHMvaW5zcGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCBmcm9tICcuL2Fzc2V0cy9pbnZlcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODkgZnJvbSAnLi9hc3NldHMvaXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTggZnJvbSAnLi9hc3NldHMvbGF5ZXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk5IGZyb20gJy4vYXNzZXRzL2xldHRlcmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAxIGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAzIGZyb20gJy4vYXNzZXRzL2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQgZnJvbSAnLi9hc3NldHMvbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNSBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiBmcm9tICcuL2Fzc2V0cy9sb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA3IGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA4IGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA5IGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEwIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE1IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE4IGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTkgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIxIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI1IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI4IGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjkgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMwIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMxIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzIgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM2IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2libS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM5IGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQyIGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4IGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDkgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTEgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUyIGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUzIGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTQgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU1IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU4IGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTkgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjMgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjggZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY5IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcwIGZyb20gJy4vYXNzZXRzL21hZ25ldC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcyIGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc0IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUgZnJvbSAnLi9hc3NldHMvbWVtb3J5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc2IGZyb20gJy4vYXNzZXRzL21lbnUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzcgZnJvbSAnLi9hc3NldHMvbWVudURvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzggZnJvbSAnLi9hc3NldHMvbWVudUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzkgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgwIGZyb20gJy4vYXNzZXRzL21lbnVVcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSBmcm9tICcuL2Fzc2V0cy9tZXJnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MyBmcm9tICcuL2Fzc2V0cy9taW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODUgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODcgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkxIGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQgZnJvbSAnLi9hc3NldHMvbW9iaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk1IGZyb20gJy4vYXNzZXRzL21vb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk3IGZyb20gJy4vYXNzZXRzL25lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCBmcm9tICcuL2Fzc2V0cy9ub2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk5IGZyb20gJy4vYXNzZXRzL251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMCBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAxIGZyb20gJy4vYXNzZXRzL29ubGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAzIGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDQgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUgZnJvbSAnLi9hc3NldHMvcGFpbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNyBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA4IGZyb20gJy4vYXNzZXRzL3BhdXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA5IGZyb20gJy4vYXNzZXRzL3BheW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAgZnJvbSAnLi9hc3NldHMvcGVuY2lsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzExIGZyb20gJy4vYXNzZXRzL3BlcmNlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIgZnJvbSAnLi9hc3NldHMvcGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEzIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQgZnJvbSAnLi9hc3NldHMvcGxheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE2IGZyb20gJy4vYXNzZXRzL3BsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE5IGZyb20gJy4vYXNzZXRzL3BvcG91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCBmcm9tICcuL2Fzc2V0cy9wdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIxIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiBmcm9tICcuL2Fzc2V0cy9xdW90ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMyBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI0IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI1IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYgZnJvbSAnLi9hc3NldHMvc2F2ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNyBmcm9tICcuL2Fzc2V0cy9zY2FsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCBmcm9tICcuL2Fzc2V0cy9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjkgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMyIGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMgZnJvbSAnLi9hc3NldHMvc2hhcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQgZnJvbSAnLi9hc3NldHMvc2hhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUgZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM2IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM3IGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzkgZnJvbSAnLi9hc3NldHMvc29ydF91cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQyIGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQzIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NyBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5IGZyb20gJy4vYXNzZXRzL3N0YXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUwIGZyb20gJy4vYXNzZXRzL3N0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MyBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU0IGZyb20gJy4vYXNzZXRzL3N0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTYgZnJvbSAnLi9hc3NldHMvc3VuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU3IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCBmcm9tICcuL2Fzc2V0cy9zeW1saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU5IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MyBmcm9tICcuL2Fzc2V0cy90YWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQgZnJvbSAnLi9hc3NldHMvdGVhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NyBmcm9tICcuL2Fzc2V0cy90aW1lbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY5IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcxIGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc2IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc4IGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgwIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODIgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MyBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg1IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NyBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg4IGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg5IGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkwIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTIgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkzIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk0IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA4IGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDkgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDExIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEyIGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMyBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTQgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNyBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCBmcm9tICcuL2Fzc2V0cy90b2tlblRhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOSBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMgZnJvbSAnLi9hc3NldHMvdHJhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQgZnJvbSAnLi9hc3NldHMvdW5mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI1IGZyb20gJy4vYXNzZXRzL3VubGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNiBmcm9tICcuL2Fzc2V0cy91c2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI3IGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjggZnJvbSAnLi9hc3NldHMvdXNlcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjkgZnJvbSAnLi9hc3NldHMvdmVjdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMwIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMxIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMyIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM0IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM1IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM3IGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSBmcm9tICcuL2Fzc2V0cy92aXNfbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MyBmcm9tICcuL2Fzc2V0cy92aXNfcGllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3IGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OCBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OSBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MiBmcm9tICcuL2Fzc2V0cy93cmVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUgZnJvbSAnLi9hc3NldHMvYWxlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU3IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTggZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYxIGZyb20gJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMgZnJvbSAnLi9hc3NldHMvYXBwX2FwbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY2IGZyb20gJy4vYXNzZXRzL2FwcF9jYW52YXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY4IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY5IGZyb20gJy4vYXNzZXRzL2FwcF9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcwIGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcxIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIgZnJvbSAnLi9hc3NldHMvYXBwX2RldnRvb2xzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDczIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NCBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc1IGZyb20gJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcgZnJvbSAnLi9hc3NldHMvYXBwX2dpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3JhcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzkgZnJvbSAnLi9hc3NldHMvYXBwX2dyb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MyBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg0IGZyb20gJy4vYXNzZXRzL2FwcF9sZW5zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg1IGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg2IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg3IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg4IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg5IGZyb20gJy4vYXNzZXRzL2FwcF9tbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MCBmcm9tICcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMgZnJvbSAnLi9hc3NldHMvYXBwX3BpcGVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk0IGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTUgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiBmcm9tICcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NyBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAwIGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEgZnJvbSAnLi9hc3NldHMvYXBwX3NxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiBmcm9tICcuL2Fzc2V0cy9hcHBfdGltZWxpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDMgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA0IGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUgZnJvbSAnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA2IGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDkgZnJvbSAnLi9hc3NldHMvYXBwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEyIGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSBmcm9tICcuL2Fzc2V0cy9hcnJvd191cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNyBmcm9tICcuL2Fzc2V0cy9iZWFrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTggZnJvbSAnLi9hc3NldHMvYmVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAgZnJvbSAnLi9hc3NldHMvYm9sdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIyIGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIzIGZyb20gJy4vYXNzZXRzL2JyYW5jaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI1IGZyb20gJy4vYXNzZXRzL2Jyb29tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI2IGZyb20gJy4vYXNzZXRzL2JydXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI3IGZyb20gJy4vYXNzZXRzL2J1Zyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOSBmcm9tICcuL2Fzc2V0cy9jYWxlbmRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCBmcm9tICcuL2Fzc2V0cy9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMyIGZyb20gJy4vYXNzZXRzL2NoZWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMzIGZyb20gJy4vYXNzZXRzL2Nsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM0IGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNSBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM3IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzggZnJvbSAnLi9hc3NldHMvY29sb3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzkgZnJvbSAnLi9hc3NldHMvY29tcHV0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MCBmcm9tICcuL2Fzc2V0cy9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQxIGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUJlbG93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCBmcm9tICcuL2Fzc2V0cy9jb3B5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUwIGZyb20gJy4vYXNzZXRzL2Nyb3NzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUxIGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUyIGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMgZnJvbSAnLi9hc3NldHMvY3VycmVuY3knO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTQgZnJvbSAnLi9hc3NldHMvY3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU1IGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU2IGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYxIGZyb20gJy4vYXNzZXRzL2RvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcwIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc0IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc2IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQgZnJvbSAnLi9hc3NldHMvZW1haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUgZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTYgZnJvbSAnLi9hc3NldHMvZXFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk3IGZyb20gJy4vYXNzZXRzL2VyYXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCBmcm9tICcuL2Fzc2V0cy9leGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk5IGZyb20gJy4vYXNzZXRzL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAxIGZyb20gJy4vYXNzZXRzL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMiBmcm9tICcuL2Fzc2V0cy9leWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDMgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA1IGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNyBmcm9tICcuL2Fzc2V0cy9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDggZnJvbSAnLi9hc3NldHMvZmxhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOSBmcm9tICcuL2Fzc2V0cy9mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSBmcm9tICcuL2Fzc2V0cy9nZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEgZnJvbSAnLi9hc3NldHMvZ2xvYmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIgZnJvbSAnLi9hc3NldHMvZ3JhYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMyBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQgZnJvbSAnLi9hc3NldHMvZ3JpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSBmcm9tICcuL2Fzc2V0cy9oZWFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI3IGZyb20gJy4vYXNzZXRzL2hlbHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjggZnJvbSAnLi9hc3NldHMvaG9tZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOSBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAgZnJvbSAnLi9hc3NldHMvaW1hZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEgZnJvbSAnLi9hc3NldHMvaW1wb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMyIGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMzIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM3IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzggZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzkgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAgZnJvbSAnLi9hc3NldHMvaW5zcGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSBmcm9tICcuL2Fzc2V0cy9pbnZlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIgZnJvbSAnLi9hc3NldHMvaXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDMgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1IGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NyBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDggZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ5IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUwIGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEgZnJvbSAnLi9hc3NldHMvbGF5ZXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUyIGZyb20gJy4vYXNzZXRzL2xldHRlcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MyBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU0IGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU2IGZyb20gJy4vYXNzZXRzL2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcgZnJvbSAnLi9hc3NldHMvbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OCBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSBmcm9tICcuL2Fzc2V0cy9sb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYwIGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY2IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY4IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjkgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcxIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc0IGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzcgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc4IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgxIGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgzIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg5IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkyIGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk1IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk3IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAxIGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMyBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDQgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA1IGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA2IGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDcgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA4IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDkgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzExIGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE3IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIzIGZyb20gJy4vYXNzZXRzL21hZ25ldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI1IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI3IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjggZnJvbSAnLi9hc3NldHMvbWVtb3J5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI5IGZyb20gJy4vYXNzZXRzL21lbnUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAgZnJvbSAnLi9hc3NldHMvbWVudURvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEgZnJvbSAnLi9hc3NldHMvbWVudUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMzIGZyb20gJy4vYXNzZXRzL21lbnVVcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNCBmcm9tICcuL2Fzc2V0cy9tZXJnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNSBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNiBmcm9tICcuL2Fzc2V0cy9taW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNyBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOSBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDMgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0IGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcgZnJvbSAnLi9hc3NldHMvbW9iaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4IGZyb20gJy4vYXNzZXRzL21vb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDkgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUwIGZyb20gJy4vYXNzZXRzL25lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSBmcm9tICcuL2Fzc2V0cy9ub2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUyIGZyb20gJy4vYXNzZXRzL251bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MyBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU0IGZyb20gJy4vYXNzZXRzL29ubGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU2IGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTggZnJvbSAnLi9hc3NldHMvcGFpbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTkgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYxIGZyb20gJy4vYXNzZXRzL3BhdXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYyIGZyb20gJy4vYXNzZXRzL3BheW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMgZnJvbSAnLi9hc3NldHMvcGVuY2lsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY0IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUgZnJvbSAnLi9hc3NldHMvcGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY2IGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcgZnJvbSAnLi9hc3NldHMvcGxheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY5IGZyb20gJy4vYXNzZXRzL3BsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcyIGZyb20gJy4vYXNzZXRzL3BvcG91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MyBmcm9tICcuL2Fzc2V0cy9wdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc0IGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSBmcm9tICcuL2Fzc2V0cy9xdW90ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc3IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc4IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzkgZnJvbSAnLi9hc3NldHMvc2F2ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCBmcm9tICcuL2Fzc2V0cy9zY2FsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSBmcm9tICcuL2Fzc2V0cy9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg1IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYgZnJvbSAnLi9hc3NldHMvc2hhcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODcgZnJvbSAnLi9hc3NldHMvc2hhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg5IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkwIGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTIgZnJvbSAnLi9hc3NldHMvc29ydF91cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MyBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk1IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk2IGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAxIGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAyIGZyb20gJy4vYXNzZXRzL3N0YXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAzIGZyb20gJy4vYXNzZXRzL3N0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA3IGZyb20gJy4vYXNzZXRzL3N0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDkgZnJvbSAnLi9hc3NldHMvc3VuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEwIGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEyIGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiBmcm9tICcuL2Fzc2V0cy90YWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcgZnJvbSAnLi9hc3NldHMvdGVhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIyIGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI0IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI3IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjggZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI5IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMxIGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMzIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM4IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MCBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQxIGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQyIGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQzIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ2IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ3IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MyBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYxIGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MyBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY0IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY1IGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OCBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MSBmcm9tICcuL2Fzc2V0cy90b2tlblRhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc0IGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYgZnJvbSAnLi9hc3NldHMvdHJhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcgZnJvbSAnLi9hc3NldHMvdW5mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc4IGZyb20gJy4vYXNzZXRzL3VubGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSBmcm9tICcuL2Fzc2V0cy91c2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgwIGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEgZnJvbSAnLi9hc3NldHMvdXNlcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIgZnJvbSAnLi9hc3NldHMvdmVjdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgzIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg0IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg1IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg3IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg4IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkwIGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiBmcm9tICcuL2Fzc2V0cy92aXNfbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MyBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiBmcm9tICcuL2Fzc2V0cy92aXNfcGllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk3IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk5IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAwIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMSBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNSBmcm9tICcuL2Fzc2V0cy93cmVuY2gnO1xuY29uc3QgX0R5bmFtaWNJbXBvcnRNb2R1bGVNYXAgPSB7Jy4vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMCwnLi9hc3NldHMvYWdncmVnYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEsJy4vYXNzZXRzL2FsZXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzLCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQsJy4vYXNzZXRzL2Fubm90YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNSwnLi9hc3NldHMvYXBtX3RyYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYsJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3LCcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOCwnLi9hc3NldHMvYXBwX2FnZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTksJy4vYXNzZXRzL2FwcF9hcG0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyLCcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzLCcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQsJy4vYXNzZXRzL2FwcF9jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1LCcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNiwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcsJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgsJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwLCcuL2Fzc2V0cy9hcHBfZW1zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIsJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMywnLi9hc3NldHMvYXBwX2dpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNCwnLi9hc3NldHMvYXBwX2dyYXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1LCcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNiwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNywnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwLCcuL2Fzc2V0cy9hcHBfbGVucy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMSwnLi9hc3NldHMvYXBwX2xvZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzLCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNCwnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUsJy4vYXNzZXRzL2FwcF9tbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNiwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcsJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzksJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MCwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MSwnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MiwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQsJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NSwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NiwnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NywnLi9hc3NldHMvYXBwX3NxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5LCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAsJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MiwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MywnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1LCcuL2Fzc2V0cy9hcHBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2LCcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NywnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OCwnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OSwnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MCwnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEsJy4vYXNzZXRzL2Fycm93X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyLCcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MywnLi9hc3NldHMvYmVha2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0LCcuL2Fzc2V0cy9iZWxsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1LCcuL2Fzc2V0cy9iZWxsU2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYsJy4vYXNzZXRzL2JvbHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5LCcuL2Fzc2V0cy9icmFuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAsJy4vYXNzZXRzL2JyYW5jaFVzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEsJy4vYXNzZXRzL2Jyb29tLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyLCcuL2Fzc2V0cy9icnVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MywnLi9hc3NldHMvYnVnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0LCcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NSwnLi9hc3NldHMvY2FsZW5kYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYsJy4vYXNzZXRzL2NoZWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3LCcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4LCcuL2Fzc2V0cy9jaGVlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OSwnLi9hc3NldHMvY2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAsJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MSwnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIsJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMsJy4vYXNzZXRzL2NsdXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQsJy4vYXNzZXRzL2NvbG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1LCcuL2Fzc2V0cy9jb21wdXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2LCcuL2Fzc2V0cy9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3LCcuL2Fzc2V0cy9jb250YWluZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OSwnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MSwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MiwnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQsJy4vYXNzZXRzL2NvcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUsJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2LCcuL2Fzc2V0cy9jcm9zcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NywnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgsJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTksJy4vYXNzZXRzL2N1cnJlbmN5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCwnLi9hc3NldHMvY3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSwnLi9hc3NldHMvZGF0YWJhc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAyLCcuL2Fzc2V0cy9kZXNrdG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMywnLi9hc3NldHMvZG9jdW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA0LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA1LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNiwnLi9hc3NldHMvZG9jdW1lbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNywnLi9hc3NldHMvZG90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOCwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAsJy4vYXNzZXRzL2Rvd25sb2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEyLCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEzLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE0LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE1LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNiwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNywnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE5LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIwLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI0LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjUsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjYsJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNywnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjgsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMwLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzEsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMyLCcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM0LCcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM2LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM3LCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCwnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM5LCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQwLCcuL2Fzc2V0cy9lbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEsJy4vYXNzZXRzL2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiwnLi9hc3NldHMvZXFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MywnLi9hc3NldHMvZXJhc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCwnLi9hc3NldHMvZXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUsJy4vYXNzZXRzL2V4cGFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYsJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3LCcuL2Fzc2V0cy9leHBvcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4LCcuL2Fzc2V0cy9leWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5LCcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCwnLi9hc3NldHMvZmFjZV9oYXBweS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTEsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIsJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MywnLi9hc3NldHMvZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCwnLi9hc3NldHMvZmxhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUsJy4vYXNzZXRzL2ZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU2LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU3LCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OSwnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYwLCcuL2Fzc2V0cy9mcmFtZU5leHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYxLCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYzLCcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQsJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSwnLi9hc3NldHMvZ2Vhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYsJy4vYXNzZXRzL2dsYXNzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY3LCcuL2Fzc2V0cy9nbG9iZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjgsJy4vYXNzZXRzL2dyYWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY5LCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcwLCcuL2Fzc2V0cy9ncmlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSwnLi9hc3NldHMvaGVhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcyLCcuL2Fzc2V0cy9oZWF0bWFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MywnLi9hc3NldHMvaGVscC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQsJy4vYXNzZXRzL2hvbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc1LCcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc2LCcuL2Fzc2V0cy9pbWFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcsJy4vYXNzZXRzL2ltcG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzgsJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSwnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODAsJy4vYXNzZXRzL2luZGV4X2ZsdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSwnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODIsJy4vYXNzZXRzL2luZGV4X29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgzLCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCwnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg1LCcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODYsJy4vYXNzZXRzL2luc3BlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg3LCcuL2Fzc2V0cy9pbnZlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg4LCcuL2Fzc2V0cy9pcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODksJy4vYXNzZXRzL2tleWJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCwnLi9hc3NldHMva3FsX2ZpZWxkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSwnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MiwnLi9hc3NldHMva3FsX29wZXJhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkzLCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk0LCcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk1LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYsJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk3LCcuL2Fzc2V0cy9sYXllcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk4LCcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk5LCcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCwnLi9hc3NldHMvbGluZURvdHRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEsJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIsJy4vYXNzZXRzL2xpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAzLCcuL2Fzc2V0cy9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCwnLi9hc3NldHMvbGlzdF9hZGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA1LCcuL2Fzc2V0cy9sb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiwnLi9hc3NldHMvbG9ja09wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA3LCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDgsJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCwnLi9hc3NldHMvbG9nb19hd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjExLCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiwnLi9hc3NldHMvbG9nb19henVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQsJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE1LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYsJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcsJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE4LCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTksJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIxLCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIsJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMywnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCwnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNSwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNywnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjgsJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjksJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCwnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEsJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiwnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMsJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCwnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzUsJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYsJy4vYXNzZXRzL2xvZ29faWJtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNywnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzgsJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM5LCcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQzLCcuL2Fzc2V0cy9sb2dvX21hcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUsJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYsJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcsJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4LCcuL2Fzc2V0cy9sb2dvX25naW54LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCwnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSwnLi9hc3NldHMvbG9nb19waHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUyLCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MywnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCwnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUsJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU2LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NywnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTgsJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSwnLi9hc3NldHMvbG9nb19zbGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAsJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSwnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiwnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MywnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCwnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSwnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY2LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjgsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSwnLi9hc3NldHMvbWFnbmV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCwnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcyLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjczLCcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NCwnLi9hc3NldHMvbWVtb3J5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSwnLi9hc3NldHMvbWVudS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYsJy4vYXNzZXRzL21lbnVEb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NywnLi9hc3NldHMvbWVudUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc4LCcuL2Fzc2V0cy9tZW51UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc5LCcuL2Fzc2V0cy9tZW51VXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgwLCcuL2Fzc2V0cy9tZXJnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODEsJy4vYXNzZXRzL21pbmltaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiwnLi9hc3NldHMvbWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgzLCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg0LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODcsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCwnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkzLCcuL2Fzc2V0cy9tb2JpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk0LCcuL2Fzc2V0cy9tb29uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NSwnLi9hc3NldHMvbmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiwnLi9hc3NldHMvbmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NywnLi9hc3NldHMvbm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTgsJy4vYXNzZXRzL251bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTksJy4vYXNzZXRzL29mZmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAwLCcuL2Fzc2V0cy9vbmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAxLCcuL2Fzc2V0cy9wYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiwnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCwnLi9hc3NldHMvcGFpbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA1LCcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiwnLi9hc3NldHMvcGFydGlhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcsJy4vYXNzZXRzL3BhdXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCwnLi9hc3NldHMvcGF5bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDksJy4vYXNzZXRzL3BlbmNpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAsJy4vYXNzZXRzL3BlcmNlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzExLCcuL2Fzc2V0cy9waW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEyLCcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMywnLi9hc3NldHMvcGxheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQsJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE1LCcuL2Fzc2V0cy9wbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNiwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE3LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE4LCcuL2Fzc2V0cy9wb3BvdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE5LCcuL2Fzc2V0cy9wdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCwnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMSwnLi9hc3NldHMvcXVvdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIyLCcuL2Fzc2V0cy9yZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMywnLi9hc3NldHMvcmVwb3J0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI0LCcuL2Fzc2V0cy9yZXR1cm5fa2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSwnLi9hc3NldHMvc2F2ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYsJy4vYXNzZXRzL3NjYWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNywnLi9hc3NldHMvc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI5LCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzEsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMyLCcuL2Fzc2V0cy9zaGFyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMsJy4vYXNzZXRzL3NoYXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCwnLi9hc3NldHMvc25vd2ZsYWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSwnLi9hc3NldHMvc29ydExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM2LCcuL2Fzc2V0cy9zb3J0UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM3LCcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM4LCcuL2Fzc2V0cy9zb3J0X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSwnLi9hc3NldHMvc29ydGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQwLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQyLCcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MywnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQsJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NywnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4LCcuL2Fzc2V0cy9zdGF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDksJy4vYXNzZXRzL3N0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUwLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEsJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUyLCcuL2Fzc2V0cy9zdG9yYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MywnLi9hc3NldHMvc3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCwnLi9hc3NldHMvc3VibW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSwnLi9hc3NldHMvc3VuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiwnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NywnLi9hc3NldHMvc3ltbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTgsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTksJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYxLCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjIsJy4vYXNzZXRzL3RhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjMsJy4vYXNzZXRzL3RlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY0LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjUsJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiwnLi9hc3NldHMvdGltZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY3LCcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCwnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjksJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAsJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcxLCcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMsJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc0LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc1LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NiwnLi9hc3NldHMvdG9rZW5EYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NywnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzgsJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzksJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODAsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODEsJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgyLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODMsJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg0LCcuL2Fzc2V0cy90b2tlbkZpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg1LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODYsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg3LCcuL2Fzc2V0cy90b2tlbkdlby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODgsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OSwnLi9hc3NldHMvdG9rZW5JUC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSwnLi9hc3NldHMvdG9rZW5Kb2luLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiwnLi9hc3NldHMvdG9rZW5LZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkzLCcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk0LCcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTUsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk3LCcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTgsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSwnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAwLCcuL2Fzc2V0cy90b2tlbk51bGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAxLCcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIsJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMywnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQsJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNywnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDgsJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA5LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDExLCcuL2Fzc2V0cy90b2tlblJlcG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEyLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEzLCcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCwnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE1LCcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTYsJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNywnLi9hc3NldHMvdG9rZW5UYWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE4LCcuL2Fzc2V0cy90b2tlblRleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE5LCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIwLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSwnLi9hc3NldHMvdHJhaW5pbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIyLCcuL2Fzc2V0cy90cmFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMsJy4vYXNzZXRzL3VuZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQsJy4vYXNzZXRzL3VubGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUsJy4vYXNzZXRzL3VzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI2LCcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNywnLi9hc3NldHMvdXNlcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI4LCcuL2Fzc2V0cy92ZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI5LCcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAsJy4vYXNzZXRzL3Zpc19hcmVhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMSwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYsJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcsJy4vYXNzZXRzL3Zpc19nb2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCwnLi9hc3NldHMvdmlzX2xpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM5LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQwLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEsJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQyLCcuL2Fzc2V0cy92aXNfcGllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MywnLi9hc3NldHMvdmlzX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NCwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDUsJy4vYXNzZXRzL3Zpc190ZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NiwnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NywnLi9hc3NldHMvdmlzX3ZlZ2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4LCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5LCcuL2Fzc2V0cy93b3JkV3JhcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUxLCcuL2Fzc2V0cy93cmVuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUyLCcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MywnLi9hc3NldHMvYWdncmVnYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCwnLi9hc3NldHMvYWxlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU1LCcuL2Fzc2V0cy9hbmFseXplRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU2LCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NywnLi9hc3NldHMvYW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTgsJy4vYXNzZXRzL2FwbV90cmFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTksJy4vYXNzZXRzL2FwcF9hZGRfZGF0YSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAsJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEsJy4vYXNzZXRzL2FwcF9hZ2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIsJy4vYXNzZXRzL2FwcF9hcG0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYzLCcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY1LCcuL2Fzc2V0cy9hcHBfY2FudmFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NiwnLi9hc3NldHMvYXBwX2Nhc2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NywnLi9hc3NldHMvYXBwX2NvZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY4LCcuL2Fzc2V0cy9hcHBfY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjksJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCwnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEsJy4vYXNzZXRzL2FwcF9kZXZ0b29scyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIsJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMsJy4vYXNzZXRzL2FwcF9lbXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc0LCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc1LCcuL2Fzc2V0cy9hcHBfZmxlZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc2LCcuL2Fzc2V0cy9hcHBfZ2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NywnLi9hc3NldHMvYXBwX2dyYXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCwnLi9hc3NldHMvYXBwX2dyb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc5LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIsJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgzLCcuL2Fzc2V0cy9hcHBfbGVucyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQsJy4vYXNzZXRzL2FwcF9sb2dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NSwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg2LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcsJy4vYXNzZXRzL2FwcF9tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCwnLi9hc3NldHMvYXBwX21sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkwLCcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkxLCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIsJy4vYXNzZXRzL2FwcF9waXBlbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMsJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk0LCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk2LCcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTksJy4vYXNzZXRzL2FwcF9zcGFjZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAwLCcuL2Fzc2V0cy9hcHBfc3FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSwnLi9hc3NldHMvYXBwX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiwnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMywnLi9hc3NldHMvYXBwX3VwdGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUsJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCwnLi9hc3NldHMvYXBwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDksJy4vYXNzZXRzL2Fycm93RW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCwnLi9hc3NldHMvYXJyb3dTdGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTEsJy4vYXNzZXRzL2Fycm93X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMywnLi9hc3NldHMvYXJyb3dfcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE0LCcuL2Fzc2V0cy9hcnJvd191cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUsJy4vYXNzZXRzL2FzdGVyaXNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiwnLi9hc3NldHMvYmVha2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNywnLi9hc3NldHMvYmVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTgsJy4vYXNzZXRzL2JlbGxTbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTksJy4vYXNzZXRzL2JvbHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIwLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIyLCcuL2Fzc2V0cy9icmFuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIzLCcuL2Fzc2V0cy9icmFuY2hVc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCwnLi9hc3NldHMvYnJvb20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI1LCcuL2Fzc2V0cy9icnVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYsJy4vYXNzZXRzL2J1Zyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcsJy4vYXNzZXRzL2J1bGxzZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCwnLi9hc3NldHMvY2FsZW5kYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI5LCcuL2Fzc2V0cy9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMxLCcuL2Fzc2V0cy9jaGVlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIsJy4vYXNzZXRzL2Nsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMywnLi9hc3NldHMvY2xvdWREcml6emxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNCwnLi9hc3NldHMvY2xvdWRTdG9ybXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM1LCcuL2Fzc2V0cy9jbG91ZFN1bm55JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiwnLi9hc3NldHMvY2x1c3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcsJy4vYXNzZXRzL2NvbG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCwnLi9hc3NldHMvY29tcHV0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzksJy4vYXNzZXRzL2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQwLCcuL2Fzc2V0cy9jb250YWluZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQxLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQyLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1LCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiwnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3LCcuL2Fzc2V0cy9jb3B5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5LCcuL2Fzc2V0cy9jcm9zcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAsJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSwnLi9hc3NldHMvY3Jvc3NoYWlycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIsJy4vYXNzZXRzL2N1cnJlbmN5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MywnLi9hc3NldHMvY3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCwnLi9hc3NldHMvZGF0YWJhc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU1LCcuL2Fzc2V0cy9kZXNrdG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NiwnLi9hc3NldHMvZG9jdW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU3LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU4LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OSwnLi9hc3NldHMvZG9jdW1lbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCwnLi9hc3NldHMvZG90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MSwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMsJy4vYXNzZXRzL2Rvd25sb2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY1LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY2LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcxLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcyLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTczLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NCwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc3LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzgsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzksJy4vYXNzZXRzL2VkaXRvcl9ib2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgzLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg1LCcuL2Fzc2V0cy9lZGl0b3JfbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg3LCcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODgsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg5LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkwLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSwnLi9hc3NldHMvZWRpdG9yX3VuZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkyLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkzLCcuL2Fzc2V0cy9lbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQsJy4vYXNzZXRzL2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSwnLi9hc3NldHMvZXFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiwnLi9hc3NldHMvZXJhc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NywnLi9hc3NldHMvZXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTgsJy4vYXNzZXRzL2V4cGFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTksJy4vYXNzZXRzL2V4cGFuZE1pbmknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAwLCcuL2Fzc2V0cy9leHBvcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAxLCcuL2Fzc2V0cy9leWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAyLCcuL2Fzc2V0cy9leWVfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMywnLi9hc3NldHMvZmFjZV9oYXBweSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUsJy4vYXNzZXRzL2ZhY2Vfc2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiwnLi9hc3NldHMvZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNywnLi9hc3NldHMvZmxhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDgsJy4vYXNzZXRzL2ZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMiwnLi9hc3NldHMvZm9sZGVyX29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEzLCcuL2Fzc2V0cy9mcmFtZU5leHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcsJy4vYXNzZXRzL2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCwnLi9hc3NldHMvZ2Vhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTksJy4vYXNzZXRzL2dsYXNzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIwLCcuL2Fzc2V0cy9nbG9iZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEsJy4vYXNzZXRzL2dyYWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIyLCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIzLCcuL2Fzc2V0cy9ncmlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCwnLi9hc3NldHMvaGVhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI1LCcuL2Fzc2V0cy9oZWF0bWFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiwnLi9hc3NldHMvaGVscCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcsJy4vYXNzZXRzL2hvbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI4LCcuL2Fzc2V0cy9pSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI5LCcuL2Fzc2V0cy9pbWFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAsJy4vYXNzZXRzL2ltcG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEsJy4vYXNzZXRzL2luZGV4X2Nsb3NlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiwnLi9hc3NldHMvaW5kZXhfZWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMsJy4vYXNzZXRzL2luZGV4X2ZsdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCwnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUsJy4vYXNzZXRzL2luZGV4X29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM2LCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNywnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM4LCcuL2Fzc2V0cy9pbnB1dE91dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzksJy4vYXNzZXRzL2luc3BlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQwLCcuL2Fzc2V0cy9pbnZlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQxLCcuL2Fzc2V0cy9pcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIsJy4vYXNzZXRzL2tleWJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MywnLi9hc3NldHMva3FsX2ZpZWxkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCwnLi9hc3NldHMva3FsX2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSwnLi9hc3NldHMva3FsX29wZXJhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2LCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3LCcuL2Fzc2V0cy9rcWxfdmFsdWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDksJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUwLCcuL2Fzc2V0cy9sYXllcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUxLCcuL2Fzc2V0cy9sZXR0ZXJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUyLCcuL2Fzc2V0cy9saW5lRGFzaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MywnLi9hc3NldHMvbGluZURvdHRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQsJy4vYXNzZXRzL2xpbmVTb2xpZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUsJy4vYXNzZXRzL2xpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU2LCcuL2Fzc2V0cy9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NywnLi9hc3NldHMvbGlzdF9hZGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU4LCcuL2Fzc2V0cy9sb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSwnLi9hc3NldHMvbG9ja09wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MywnLi9hc3NldHMvbG9nb19hd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSwnLi9hc3NldHMvbG9nb19henVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcsJy4vYXNzZXRzL2xvZ29fYmVhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjksJy4vYXNzZXRzL2xvZ29fY2VwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAsJy4vYXNzZXRzL2xvZ29fY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIsJy4vYXNzZXRzL2xvZ29fY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NywnLi9hc3NldHMvbG9nb19lbGFzdGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEsJy4vYXNzZXRzL2xvZ29fZXRjZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIsJy4vYXNzZXRzL2xvZ29fZ2NwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MywnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSwnLi9hc3NldHMvbG9nb19nbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NywnLi9hc3NldHMvbG9nb19nb29nbGVfZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODgsJy4vYXNzZXRzL2xvZ29faGFwcm94eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODksJy4vYXNzZXRzL2xvZ29faWJtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCwnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTEsJy4vYXNzZXRzL2xvZ29fa2Fma2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk2LCcuL2Fzc2V0cy9sb2dvX21hcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAsJy4vYXNzZXRzL2xvZ29fbXlzcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAxLCcuL2Fzc2V0cy9sb2dvX25naW54JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCwnLi9hc3NldHMvbG9nb19waHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNywnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDgsJy4vYXNzZXRzL2xvZ29fcmVkaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEsJy4vYXNzZXRzL2xvZ29fc2tldGNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiwnLi9hc3NldHMvbG9nb19zbGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCwnLi9hc3NldHMvbG9nb193ZWJob29rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSwnLi9hc3NldHMvbG9nb193aW5kb3dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiwnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNywnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCwnLi9hc3NldHMvbG9nc3Rhc2hfaWYnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiwnLi9hc3NldHMvbWFnbmV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMywnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI1LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI2LCcuL2Fzc2V0cy9tYXBfbWFya2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNywnLi9hc3NldHMvbWVtb3J5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCwnLi9hc3NldHMvbWVudSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjksJy4vYXNzZXRzL21lbnVEb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMCwnLi9hc3NldHMvbWVudUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMxLCcuL2Fzc2V0cy9tZW51UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMyLCcuL2Fzc2V0cy9tZW51VXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMzLCcuL2Fzc2V0cy9tZXJnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQsJy4vYXNzZXRzL21pbmltaXplJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNSwnLi9hc3NldHMvbWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM2LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM3LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOCwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOSwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MywnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ2LCcuL2Fzc2V0cy9tb2JpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3LCcuL2Fzc2V0cy9tb29uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCwnLi9hc3NldHMvbmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSwnLi9hc3NldHMvbmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCwnLi9hc3NldHMvbm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEsJy4vYXNzZXRzL251bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIsJy4vYXNzZXRzL29mZmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUzLCcuL2Fzc2V0cy9vbmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU0LCcuL2Fzc2V0cy9wYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSwnLi9hc3NldHMvcGFnZVNlbGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NywnLi9hc3NldHMvcGFpbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU4LCcuL2Fzc2V0cy9wYXBlcl9jbGlwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSwnLi9hc3NldHMvcGFydGlhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAsJy4vYXNzZXRzL3BhdXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSwnLi9hc3NldHMvcGF5bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIsJy4vYXNzZXRzL3BlbmNpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMsJy4vYXNzZXRzL3BlcmNlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY0LCcuL2Fzc2V0cy9waW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY1LCcuL2Fzc2V0cy9waW5fZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiwnLi9hc3NldHMvcGxheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcsJy4vYXNzZXRzL3BsYXlGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY4LCcuL2Fzc2V0cy9wbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcwLCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcxLCcuL2Fzc2V0cy9wb3BvdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcyLCcuL2Fzc2V0cy9wdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MywnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCwnLi9hc3NldHMvcXVvdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc1LCcuL2Fzc2V0cy9yZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiwnLi9hc3NldHMvcmVwb3J0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc3LCcuL2Fzc2V0cy9yZXR1cm5fa2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OCwnLi9hc3NldHMvc2F2ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzksJy4vYXNzZXRzL3NjYWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCwnLi9hc3NldHMvc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MywnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg1LCcuL2Fzc2V0cy9zaGFyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYsJy4vYXNzZXRzL3NoYXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NywnLi9hc3NldHMvc25vd2ZsYWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCwnLi9hc3NldHMvc29ydExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg5LCcuL2Fzc2V0cy9zb3J0UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkwLCcuL2Fzc2V0cy9zb3J0X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkxLCcuL2Fzc2V0cy9zb3J0X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiwnLi9hc3NldHMvc29ydGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkzLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk1LCcuL2Fzc2V0cy9zdGFyX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcsJy4vYXNzZXRzL3N0YXJfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk5LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAxLCcuL2Fzc2V0cy9zdGF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIsJy4vYXNzZXRzL3N0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAzLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQsJy4vYXNzZXRzL3N0b3Bfc2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA1LCcuL2Fzc2V0cy9zdG9yYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiwnLi9hc3NldHMvc3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNywnLi9hc3NldHMvc3VibW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCwnLi9hc3NldHMvc3VuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSwnLi9hc3NldHMvc3dhdGNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMCwnLi9hc3NldHMvc3ltbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTEsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTMsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE0LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUsJy4vYXNzZXRzL3RhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYsJy4vYXNzZXRzL3RlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODE3LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTgsJy4vYXNzZXRzL3RpbWVSZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSwnLi9hc3NldHMvdGltZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIwLCcuL2Fzc2V0cy90aW1lc2xpZGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSwnLi9hc3NldHMvdG9rZW5BbGlhcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIsJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMsJy4vYXNzZXRzL3Rva2VuQXJyYXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODI0LCcuL2Fzc2V0cy90b2tlbkJpbmFyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYsJy4vYXNzZXRzL3Rva2VuQ2xhc3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI3LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODI4LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyOSwnLi9hc3NldHMvdG9rZW5EYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCwnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEsJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIsJy4vYXNzZXRzL3Rva2VuRW51bSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzQsJy4vYXNzZXRzL3Rva2VuRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM1LCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYsJy4vYXNzZXRzL3Rva2VuRmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM3LCcuL2Fzc2V0cy90b2tlbkZpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM4LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzksJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQwLCcuL2Fzc2V0cy90b2tlbkdlbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiwnLi9hc3NldHMvdG9rZW5JUCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCwnLi9hc3NldHMvdG9rZW5Kb2luJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSwnLi9hc3NldHMvdG9rZW5LZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ2LCcuL2Fzc2V0cy90b2tlbktleXdvcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ3LCcuL2Fzc2V0cy90b2tlbk1ldGhvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDgsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDksJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUwLCcuL2Fzc2V0cy90b2tlbk1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTEsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiwnLi9hc3NldHMvdG9rZW5OZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUzLCcuL2Fzc2V0cy90b2tlbk51bGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU0LCcuL2Fzc2V0cy90b2tlbk51bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUsJy4vYXNzZXRzL3Rva2VuT2JqZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiwnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcsJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTgsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEsJy4vYXNzZXRzL3Rva2VuUmFuZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYyLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MywnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY0LCcuL2Fzc2V0cy90b2tlblJlcG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlODY1LCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY2LCcuL2Fzc2V0cy90b2tlblNoYXBlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NywnLi9hc3NldHMvdG9rZW5TdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY4LCcuL2Fzc2V0cy90b2tlblN0cnVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjksJy4vYXNzZXRzL3Rva2VuU3ltYm9sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCwnLi9hc3NldHMvdG9rZW5UYWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcxLCcuL2Fzc2V0cy90b2tlblRleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcyLCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODczLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCwnLi9hc3NldHMvdHJhaW5pbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc1LCcuL2Fzc2V0cy90cmFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYsJy4vYXNzZXRzL3VuZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcsJy4vYXNzZXRzL3VubGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzgsJy4vYXNzZXRzL3VzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODc5LCcuL2Fzc2V0cy91c2VyQXZhdGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCwnLi9hc3NldHMvdXNlcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgxLCcuL2Fzc2V0cy92ZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlODgyLCcuL2Fzc2V0cy92aWRlb1BsYXllcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMsJy4vYXNzZXRzL3Zpc19hcmVhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NCwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NywnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODgsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODksJy4vYXNzZXRzL3Zpc19nYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAsJy4vYXNzZXRzL3Zpc19nb2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSwnLi9hc3NldHMvdmlzX2xpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkyLCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkzLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQsJy4vYXNzZXRzL3Zpc19tZXRyaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk1LCcuL2Fzc2V0cy92aXNfcGllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiwnLi9hc3NldHMvdmlzX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NywnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTgsJy4vYXNzZXRzL3Zpc190ZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCwnLi9hc3NldHMvdmlzX3ZlZ2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAxLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAyLCcuL2Fzc2V0cy93b3JkV3JhcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA0LCcuL2Fzc2V0cy93cmVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA1fTtcbmZ1bmN0aW9uIF9EeW5hbWljSW1wb3J0KHBhdGgpIHtjb25zdCBtb2Q9X0R5bmFtaWNJbXBvcnRNb2R1bGVNYXBbcGF0aF07bW9kW1N5bWJvbC50b1N0cmluZ1RhZ109J01vZHVsZSc7cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2QpOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwidGFiSW5kZXhcIiwgXCJ0aXRsZVwiLCBcIm9uSWNvbkxvYWRcIiwgXCJ0aGVtZVwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB0eXBlVG9QYXRoTWFwIH0gZnJvbSAnLi9pY29uX21hcCc7XG5pbXBvcnQgeyBpY29uIGFzIGVtcHR5IH0gZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yLCB3aXRoRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgeyBDT0xPUlMgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBpc05hbWVkQ29sb3IgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBldWlJY29uU3R5bGVzIH0gZnJvbSAnLi9pY29uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgZ2V0SXNBcHBJY29uID0gZnVuY3Rpb24gZ2V0SXNBcHBJY29uKGljb25UeXBlKSB7XG4gIGlmICh0eXBlb2YgaWNvblR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpY29uVHlwZSA9PT0gJ2RhdGFWaXN1YWxpemVyJykgcmV0dXJuIHRydWU7IC8vIFNwZWNpYWwgY2FzZVxuXG4gIGlmIChpY29uVHlwZS5pbmRleE9mKCdkYXRhOicpID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIElubGluZSBkYXRhIFVSSXMgc2hvdWxkIGJlIHNob3J0LWNpcmN1aXRlZCBmb3IgcGVyZm9ybWFuY2VcblxuICByZXR1cm4gaWNvblR5cGUuZW5kc1dpdGgoJ0FwcCcpIHx8IGljb25UeXBlLmVuZHNXaXRoKCdKb2InKTtcbn07XG5cbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvUGF0aE1hcCk7XG5leHBvcnQgdmFyIFNJWkVTID0gWydvcmlnaW5hbCcsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcblxuZnVuY3Rpb24gaXNFdWlJY29uVHlwZSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgdHlwZVRvUGF0aE1hcC5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5pdGlhbEljb24oaWNvbikge1xuICBpZiAoaWNvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChpc0V1aUljb25UeXBlKGljb24pKSB7XG4gICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uKSkge1xuICAgICAgcmV0dXJuIGljb25Db21wb25lbnRDYWNoZVtpY29uXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGljb247XG59XG5cbnZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCk7XG52YXIgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG5leHBvcnQgdmFyIGNsZWFySWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGUpIHtcbiAgaWYgKGljb25UeXBlICE9IG51bGwpIHtcbiAgICBkZWxldGUgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXTtcbiAgfSBlbHNlIHtcbiAgICBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gIGZvciAodmFyIF9pY29uVHlwZSBpbiBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICAgIGlmIChpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcC5oYXNPd25Qcm9wZXJ0eShfaWNvblR5cGUpKSB7XG4gICAgICBpY29uQ29tcG9uZW50Q2FjaGVbX2ljb25UeXBlXSA9IGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwW19pY29uVHlwZV07XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHZhciBFdWlJY29uQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlJY29uQ2xhc3MsIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUljb25DbGFzcyk7XG5cbiAgZnVuY3Rpb24gRXVpSWNvbkNsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUljb25DbGFzcyk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc01vdW50ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibG9hZEljb25Db21wb25lbnRcIiwgZnVuY3Rpb24gKGljb25UeXBlKSB7XG4gICAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgICAvLyBleGlzdHMgaW4gY2FjaGVcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaWNvbjogaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXVxuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpcy5vbkljb25Mb2FkKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfRHluYW1pY0ltcG9ydChgLi9hc3NldHMvJHt0eXBlVG9QYXRoTWFwW2ljb25UeXBlXX1gKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpY29uID0gX3JlZi5pY29uO1xuICAgICAgICBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdID0gaWNvbjtcbiAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuaXNNb3VudGVkICYmIF90aGlzLnByb3BzLnR5cGUgPT09IGljb25UeXBlKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgIGljb25UaXRsZTogaWNvblR5cGUsXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIF90aGlzLm9uSWNvbkxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkljb25Mb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkljb25Mb2FkID0gX3RoaXMucHJvcHMub25JY29uTG9hZDtcblxuICAgICAgaWYgKG9uSWNvbkxvYWQpIHtcbiAgICAgICAgb25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpbml0aWFsSWNvbiA9IGdldEluaXRpYWxJY29uKHR5cGUpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaWNvbjogaW5pdGlhbEljb24sXG4gICAgICBpY29uVGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUljb25DbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcblxuICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkgJiYgdGhpcy5zdGF0ZS5pY29uID09IG51bGwpIHtcbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLW1vdW50LXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG5cbiAgICAgIGlmICh0eXBlICE9PSBwcmV2UHJvcHMudHlwZSkge1xuICAgICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KHR5cGUpLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGljb246IHR5cGUsXG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdHlwZSA9IF90aGlzJHByb3BzLnR5cGUsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF90aGlzJHByb3BzJHNpemUsXG4gICAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wcy5jb2xvcixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgdGFiSW5kZXggPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIG9uSWNvbkxvYWQgPSBfdGhpcyRwcm9wcy5vbkljb25Mb2FkLFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHN0YXRlLmlzTG9hZGluZyxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nID0gX3RoaXMkc3RhdGUubmVlZGVkTG9hZGluZyxcbiAgICAgICAgICBpY29uVGl0bGUgPSBfdGhpcyRzdGF0ZS5pY29uVGl0bGU7XG4gICAgICB2YXIgaXNMb2FkZWQgPSAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmc7XG4gICAgICB2YXIgaXNDdXN0b21Db2xvciA9IGNvbG9yICYmICFpc05hbWVkQ29sb3IoY29sb3IpO1xuICAgICAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gaXNDdXN0b21Db2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0sIHN0eWxlKSA6IHN0eWxlOyAvLyBUaGVzZSBpY29ucyBhcmUgYSBsaXR0bGUgc3BlY2lhbCBhbmQgZ2V0IHNvbWUgZXh0cmEgQ1NTIGZsZXhpYmlsaXR5XG5cbiAgICAgIHZhciBpc0FwcEljb24gPSBnZXRJc0FwcEljb24odHlwZSk7IC8vIEFwcCBjb2xvciBzdHlsZXMgYXJlIG9ubHkgYXBwbGllZCBpZiBubyBjb2xvciBpcyBwYXNzZWQgb3IgaWYgY29sb3I9XCJkZWZhdWx0XCIgaXMgcGFzc2VkXG5cbiAgICAgIHZhciBhcHBJY29uSGFzQ29sb3IgPSBjb2xvciAmJiBjb2xvciAhPT0gJ2RlZmF1bHQnOyAvLyBUaGUgRWxhc3RpYyBsb2dvIHNob3VsZCBiZSBhbiBvdXRsaW5lIGluIHRleHQgYW5kIGdob3N0IG1vZGVcblxuICAgICAgdmFyIGlzRWxhc3RpY0xvZ29PdXRsaW5lID0gdHlwZSA9PT0gJ2xvZ29FbGFzdGljJyAmJiAoY29sb3IgPT09ICdnaG9zdCcgfHwgY29sb3IgPT09ICd0ZXh0Jyk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUljb24nLCBjbGFzc05hbWUpOyAvLyBFbW90aW9uIHN0eWxlc1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpSWNvblN0eWxlcyh0aGVtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJY29uLCBzdHlsZXNbc2l6ZV0sIGNvbG9yICYmIGlzTmFtZWRDb2xvcihjb2xvcikgJiYgc3R5bGVzW2NvbG9yXSwgaXNDdXN0b21Db2xvciAmJiBzdHlsZXMuY3VzdG9tQ29sb3IsIGlzRWxhc3RpY0xvZ29PdXRsaW5lICYmIHN0eWxlcy5sb2dvRWxhc3RpY091dGxpbmUsIGlzQXBwSWNvbiAmJiAhYXBwSWNvbkhhc0NvbG9yICYmIHN0eWxlcy5hcHAsIGlzTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkaW5nLCAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGVkXTtcbiAgICAgIHZhciBpY29uID0gdGhpcy5zdGF0ZS5pY29uIHx8IGVtcHR5OyAvLyBUaGlzIGlzIGEgZml4IGZvciBJRSBhbmQgRWRnZSwgd2hpY2ggaWdub3JlcyB0YWJpbmRleD1cIi0xXCIgb24gYW4gU1ZHLCBidXQgcmVzcGVjdHNcbiAgICAgIC8vIGZvY3VzYWJsZT1cImZhbHNlXCIuXG4gICAgICAvLyAgIC0gSWYgdGhlcmUncyBubyB0YWJpbmRleCBzcGVjaWZpZWQsIHdlJ2xsIGRlZmF1bHQgdGhlIGljb24gdG8gbm90IGJlIGZvY3VzYWJsZSxcbiAgICAgIC8vICAgICB3aGljaCBpcyBob3cgU1ZHcyBiZWhhdmUgaW4gQ2hyb21lLCBTYWZhcmksIGFuZCBGRi5cbiAgICAgIC8vICAgLSBJZiB0YWJpbmRleCBpcyAtMSwgdGhlbiB0aGUgY29uc3VtZXIgd2FudHMgdGhlIGljb24gdG8gYmUgZm9jdXNhYmxlIGJ5IEphdmFTY3JpcHQgb25seS5cbiAgICAgIC8vICAgLSBJZiB0aGUgdGFiaW5kZXggaXMgMCwgdGhlIGNvbnN1bWVyIHdhbnRzIHRoZSBpY29uIHRvIGJlIGtleWJvYXJkIGZvY3VzYWJsZS5cblxuICAgICAgdmFyIGZvY3VzYWJsZSA9IHRhYkluZGV4ID09IG51bGwgfHwgdGFiSW5kZXggPT09IC0xID8gJ2ZhbHNlJyA6ICd0cnVlJztcblxuICAgICAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgYWx0OiB0aXRsZSA/IHRpdGxlIDogJycsXG4gICAgICAgICAgc3JjOiBpY29uLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXhcbiAgICAgICAgfSwgcmVzdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIFN2ZyA9IGljb247IC8vIElmIGl0J3MgYW4gZW1wdHkgaWNvbiwgb3IgaWYgdGhlcmUgaXMgbm8gYXJpYS1sYWJlbCwgYXJpYS1sYWJlbGxlZGJ5LCBvciB0aXRsZSBpdCBnZXRzIGFyaWEtaGlkZGVuIHRydWVcblxuICAgICAgICB2YXIgaXNBcmlhSGlkZGVuID0gaWNvbiA9PT0gZW1wdHkgfHwgISh0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gfHwgdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgdGhpcy5wcm9wcy50aXRsZSk7XG4gICAgICAgIHZhciBoaWRlSWNvbkVtcHR5ID0gaXNBcmlhSGlkZGVuICYmIHtcbiAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aXRsZUlkOyAvLyBJZiBubyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBpcyBwcm92aWRlZCBidXQgdGhlcmUncyBhIHRpdGxlLCBhIHRpdGxlSWQgaXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vICBUaGUgc3ZnIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZ2V0cyB0aGlzIHRpdGxlSWRcbiAgICAgICAgLy8gIFRoZSBzdmcgdGl0bGUgZWxlbWVudCBnZXRzIHRoaXMgdGl0bGVJZCBhcyBhbiBpZFxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddICYmICF0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSAmJiB0aXRsZSkge1xuICAgICAgICAgIHRpdGxlSWQgPSB7XG4gICAgICAgICAgICB0aXRsZUlkOiBnZW5lcmF0ZUlkKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgZm9jdXNhYmxlOiBmb2N1c2FibGUsXG4gICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWljb24tdHlwZVwiOiBpY29uVGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRlZFwiOiBpc0xvYWRlZCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRpbmdcIjogaXNMb2FkaW5nIHx8IHVuZGVmaW5lZFxuICAgICAgICB9LCB0aXRsZUlkLCByZXN0LCBoaWRlSWNvbkVtcHR5KSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUljb25DbGFzcztcbn0oUHVyZUNvbXBvbmVudCk7XG5FdWlJY29uQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBgRW51bWAgaXMgYW55IG9mIHRoZSBuYW1lZCBpY29ucyBsaXN0ZWQgaW4gdGhlIGRvY3MsIGBzdHJpbmdgIGlzIHVzdWFsbHkgYSBVUkwgdG8gYW4gU1ZHIGZpbGUsIGFuZCBgZWxlbWVudFR5cGVgIGlzIGFueSBSZWFjdCBTVkcgY29tcG9uZW50XG4gICAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIE9uZSBvZiBFVUkncyBjb2xvciBwYWxldHRlIG9yIGEgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvcl92YWx1ZS5cbiAgICAgICAqIE5vdGUgdGhhdCBjb2xvcmluZyBvbmx5IHdvcmtzIGlmIHlvdXIgU1ZHIGlzIHJlbW92ZWQgb2YgZmlsbCBhdHRyaWJ1dGVzLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGV2ZXJ5IHNpemUgb3RoZXIgdGhhbiBgb3JpZ2luYWxgIGFzc3VtZXMgdGhlIHByb3ZpZGVkIFNWRyBzaXRzIG9uIGEgc3F1YXJlIHZpZXdib3guXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIERlc2NyaXB0aXZlIHRpdGxlIGZvciBuYW1pbmcgdGhlIGljb24gYmFzZWQgb24gaXRzIHVzZVxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRpdGxlIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogSXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEc1xuICAgICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBpY29uIGhhcyBiZWVuIGxvYWRlZCAmIHJlbmRlcmVkXG4gICAgICAgKi9cbiAgb25JY29uTG9hZDogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aUljb24gPSB3aXRoRXVpVGhlbWUoRXVpSWNvbkNsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgdHlwZVRvUGF0aE1hcCA9IHtcbiAgYWNjZXNzaWJpbGl0eTogJ2FjY2Vzc2liaWxpdHknLFxuICBhZGREYXRhQXBwOiAnYXBwX2FkZF9kYXRhJyxcbiAgYWR2YW5jZWRTZXR0aW5nc0FwcDogJ2FwcF9hZHZhbmNlZF9zZXR0aW5ncycsXG4gIGFnZW50QXBwOiAnYXBwX2ZsZWV0JyxcbiAgYWdncmVnYXRlOiAnYWdncmVnYXRlJyxcbiAgYWxlcnQ6ICdhbGVydCcsXG4gIGFuYWx5emVFdmVudDogJ2FuYWx5emVFdmVudCcsXG4gIGFubm90YXRpb246ICdhbm5vdGF0aW9uJyxcbiAgYXBtQXBwOiAnYXBwX2FwbScsXG4gIGFwbVRyYWNlOiAnYXBtX3RyYWNlJyxcbiAgYXBwU2VhcmNoQXBwOiAnYXBwX2FwcF9zZWFyY2gnLFxuICBhcHBzOiAnYXBwcycsXG4gIGFycm93RG93bjogJ2Fycm93X2Rvd24nLFxuICBhcnJvd0xlZnQ6ICdhcnJvd19sZWZ0JyxcbiAgYXJyb3dSaWdodDogJ2Fycm93X3JpZ2h0JyxcbiAgYXJyb3dVcDogJ2Fycm93X3VwJyxcbiAgYXJyb3dTdGFydDogJ2Fycm93U3RhcnQnLFxuICBhcnJvd0VuZDogJ2Fycm93RW5kJyxcbiAgYXN0ZXJpc2s6ICdhc3RlcmlzaycsXG4gIGF1ZGl0YmVhdEFwcDogJ2FwcF9hdWRpdGJlYXQnLFxuICBiZWFrZXI6ICdiZWFrZXInLFxuICBiZWxsOiAnYmVsbCcsXG4gIGJlbGxTbGFzaDogJ2JlbGxTbGFzaCcsXG4gIGJvbHQ6ICdib2x0JyxcbiAgYm94ZXNIb3Jpem9udGFsOiAnYm94ZXNfaG9yaXpvbnRhbCcsXG4gIGJveGVzVmVydGljYWw6ICdib3hlc192ZXJ0aWNhbCcsXG4gIGJyYW5jaDogJ2JyYW5jaCcsXG4gIGJyYW5jaFVzZXI6ICdicmFuY2hVc2VyJyxcbiAgYnJvb206ICdicm9vbScsXG4gIGJydXNoOiAnYnJ1c2gnLFxuICBidWc6ICdidWcnLFxuICBidWxsc2V5ZTogJ2J1bGxzZXllJyxcbiAgY2FsZW5kYXI6ICdjYWxlbmRhcicsXG4gIGNhbnZhc0FwcDogJ2FwcF9jYW52YXMnLFxuICBjYXNlc0FwcDogJ2FwcF9jYXNlcycsXG4gIGNoZWNrOiAnY2hlY2snLFxuICBjaGVja0luQ2lyY2xlRmlsbGVkOiAnY2hlY2tJbkNpcmNsZUZpbGxlZCcsXG4gIGNoZWVyOiAnY2hlZXInLFxuICBjbGFzc2lmaWNhdGlvbkpvYjogJ21sX2NsYXNzaWZpY2F0aW9uX2pvYicsXG4gIGNsb2NrOiAnY2xvY2snLFxuICBjbG91ZERyaXp6bGU6ICdjbG91ZERyaXp6bGUnLFxuICBjbG91ZFN0b3JteTogJ2Nsb3VkU3Rvcm15JyxcbiAgY2xvdWRTdW5ueTogJ2Nsb3VkU3VubnknLFxuICBjbHVzdGVyOiAnY2x1c3RlcicsXG4gIGNvZGVBcHA6ICdhcHBfY29kZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb21wdXRlOiAnY29tcHV0ZScsXG4gIGNvbnNvbGU6ICdjb25zb2xlJyxcbiAgY29uc29sZUFwcDogJ2FwcF9jb25zb2xlJyxcbiAgY29udGFpbmVyOiAnY29udGFpbmVyJyxcbiAgY29udGludWl0eUFib3ZlOiAnY29udGludWl0eUFib3ZlJyxcbiAgY29udGludWl0eUFib3ZlQmVsb3c6ICdjb250aW51aXR5QWJvdmVCZWxvdycsXG4gIGNvbnRpbnVpdHlCZWxvdzogJ2NvbnRpbnVpdHlCZWxvdycsXG4gIGNvbnRpbnVpdHlXaXRoaW46ICdjb250aW51aXR5V2l0aGluJyxcbiAgY29udHJvbHNIb3Jpem9udGFsOiAnY29udHJvbHNfaG9yaXpvbnRhbCcsXG4gIGNvbnRyb2xzVmVydGljYWw6ICdjb250cm9sc192ZXJ0aWNhbCcsXG4gIGNvcHk6ICdjb3B5JyxcbiAgY29weUNsaXBib2FyZDogJ2NvcHlfY2xpcGJvYXJkJyxcbiAgY3JlYXRlQWR2YW5jZWRKb2I6ICdtbF9jcmVhdGVfYWR2YW5jZWRfam9iJyxcbiAgY3JlYXRlTXVsdGlNZXRyaWNKb2I6ICdtbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYicsXG4gIGNyZWF0ZVBvcHVsYXRpb25Kb2I6ICdtbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InLFxuICBjcmVhdGVTaW5nbGVNZXRyaWNKb2I6ICdtbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InLFxuICBjcm9zczogJ2Nyb3NzJyxcbiAgY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHA6ICdhcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbicsXG4gIGNyb3NzSW5BQ2lyY2xlRmlsbGVkOiAnY3Jvc3NJbkFDaXJjbGVGaWxsZWQnLFxuICBjcm9zc2hhaXJzOiAnY3Jvc3NoYWlycycsXG4gIGN1cnJlbmN5OiAnY3VycmVuY3knLFxuICBjdXQ6ICdjdXQnLFxuICBkYXNoYm9hcmRBcHA6ICdhcHBfZGFzaGJvYXJkJyxcbiAgZGF0YVZpc3VhbGl6ZXI6ICdtbF9kYXRhX3Zpc3VhbGl6ZXInLFxuICBkYXRhYmFzZTogJ2RhdGFiYXNlJyxcbiAgZGVza3RvcDogJ2Rlc2t0b3AnLFxuICBkZXZUb29sc0FwcDogJ2FwcF9kZXZ0b29scycsXG4gIGRpc2NvdmVyQXBwOiAnYXBwX2Rpc2NvdmVyJyxcbiAgZG9jdW1lbnQ6ICdkb2N1bWVudCcsXG4gIGRvY3VtZW50RWRpdDogJ2RvY3VtZW50RWRpdCcsXG4gIGRvY3VtZW50YXRpb246ICdkb2N1bWVudGF0aW9uJyxcbiAgZG9jdW1lbnRzOiAnZG9jdW1lbnRzJyxcbiAgZG90OiAnZG90JyxcbiAgZG91YmxlQXJyb3dMZWZ0OiAnZG91YmxlQXJyb3dMZWZ0JyxcbiAgZG91YmxlQXJyb3dSaWdodDogJ2RvdWJsZUFycm93UmlnaHQnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZWRpdG9yQWxpZ25DZW50ZXI6ICdlZGl0b3JfYWxpZ25fY2VudGVyJyxcbiAgZWRpdG9yQWxpZ25MZWZ0OiAnZWRpdG9yX2FsaWduX2xlZnQnLFxuICBlZGl0b3JBbGlnblJpZ2h0OiAnZWRpdG9yX2FsaWduX3JpZ2h0JyxcbiAgZWRpdG9yQm9sZDogJ2VkaXRvcl9ib2xkJyxcbiAgZWRpdG9yQ2hlY2tsaXN0OiAnZWRpdG9yX2NoZWNrbGlzdCcsXG4gIGVkaXRvckNvZGVCbG9jazogJ2VkaXRvcl9jb2RlX2Jsb2NrJyxcbiAgZWRpdG9yQ29tbWVudDogJ2VkaXRvcl9jb21tZW50JyxcbiAgZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw6ICdlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDogJ2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCcsXG4gIGVkaXRvckhlYWRpbmc6ICdlZGl0b3JfaGVhZGluZycsXG4gIGVkaXRvckl0YWxpYzogJ2VkaXRvcl9pdGFsaWMnLFxuICBlZGl0b3JJdGVtQWxpZ25Cb3R0b206ICdlZGl0b3JJdGVtQWxpZ25Cb3R0b20nLFxuICBlZGl0b3JJdGVtQWxpZ25DZW50ZXI6ICdlZGl0b3JJdGVtQWxpZ25DZW50ZXInLFxuICBlZGl0b3JJdGVtQWxpZ25MZWZ0OiAnZWRpdG9ySXRlbUFsaWduTGVmdCcsXG4gIGVkaXRvckl0ZW1BbGlnbk1pZGRsZTogJ2VkaXRvckl0ZW1BbGlnbk1pZGRsZScsXG4gIGVkaXRvckl0ZW1BbGlnblJpZ2h0OiAnZWRpdG9ySXRlbUFsaWduUmlnaHQnLFxuICBlZGl0b3JJdGVtQWxpZ25Ub3A6ICdlZGl0b3JJdGVtQWxpZ25Ub3AnLFxuICBlZGl0b3JMaW5rOiAnZWRpdG9yX2xpbmsnLFxuICBlZGl0b3JPcmRlcmVkTGlzdDogJ2VkaXRvcl9vcmRlcmVkX2xpc3QnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wTGVmdDogJ2VkaXRvclBvc2l0aW9uVG9wTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wUmlnaHQ6ICdlZGl0b3JQb3NpdGlvblRvcFJpZ2h0JyxcbiAgZWRpdG9yUmVkbzogJ2VkaXRvcl9yZWRvJyxcbiAgZWRpdG9yU3RyaWtlOiAnZWRpdG9yX3N0cmlrZScsXG4gIGVkaXRvclRhYmxlOiAnZWRpdG9yX3RhYmxlJyxcbiAgZWRpdG9yVW5kZXJsaW5lOiAnZWRpdG9yX3VuZGVybGluZScsXG4gIGVkaXRvclVuZG86ICdlZGl0b3JfdW5kbycsXG4gIGVkaXRvclVub3JkZXJlZExpc3Q6ICdlZGl0b3JfdW5vcmRlcmVkX2xpc3QnLFxuICBlbWFpbDogJ2VtYWlsJyxcbiAgZW1wdHk6ICdlbXB0eScsXG4gIGVtc0FwcDogJ2FwcF9lbXMnLFxuICBlcWw6ICdlcWwnLFxuICBlcmFzZXI6ICdlcmFzZXInLFxuICBleGl0OiAnZXhpdCcsXG4gIGV4cGFuZDogJ2V4cGFuZCcsXG4gIGV4cGFuZE1pbmk6ICdleHBhbmRNaW5pJyxcbiAgZXhwb3J0QWN0aW9uOiAnZXhwb3J0JyxcbiAgZXllOiAnZXllJyxcbiAgZXllQ2xvc2VkOiAnZXllX2Nsb3NlZCcsXG4gIGZhY2VIYXBweTogJ2ZhY2VfaGFwcHknLFxuICBmYWNlTmV1dHJhbDogJ2ZhY2VfbmV1dHJhbCcsXG4gIGZhY2VTYWQ6ICdmYWNlX3NhZCcsXG4gIGZpbGViZWF0QXBwOiAnYXBwX2ZpbGViZWF0JyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmxhZzogJ2ZsYWcnLFxuICBmbGVldEFwcDogJ2FwcF9hZ2VudCcsXG4gIGZvbGQ6ICdmb2xkJyxcbiAgZm9sZGVyQ2hlY2s6ICdmb2xkZXJfY2hlY2snLFxuICBmb2xkZXJDbG9zZWQ6ICdmb2xkZXJfY2xvc2VkJyxcbiAgZm9sZGVyRXhjbGFtYXRpb246ICdmb2xkZXJfZXhjbGFtYXRpb24nLFxuICBmb2xkZXJPcGVuOiAnZm9sZGVyX29wZW4nLFxuICBmcmFtZU5leHQ6ICdmcmFtZU5leHQnLFxuICBmcmFtZVByZXZpb3VzOiAnZnJhbWVQcmV2aW91cycsXG4gIGZ1bGxTY3JlZW46ICdmdWxsX3NjcmVlbicsXG4gIGZ1bGxTY3JlZW5FeGl0OiAnZnVsbFNjcmVlbkV4aXQnLFxuICBmdW5jdGlvbjogJ2Z1bmN0aW9uJyxcbiAgZ2VhcjogJ2dlYXInLFxuICBnaXNBcHA6ICdhcHBfZ2lzJyxcbiAgZ2xhc3NlczogJ2dsYXNzZXMnLFxuICBnbG9iZTogJ2dsb2JlJyxcbiAgZ3JhYjogJ2dyYWInLFxuICBncmFiSG9yaXpvbnRhbDogJ2dyYWJfaG9yaXpvbnRhbCcsXG4gIGdyYXBoQXBwOiAnYXBwX2dyYXBoJyxcbiAgZ3JpZDogJ2dyaWQnLFxuICBncm9rQXBwOiAnYXBwX2dyb2snLFxuICBoZWFydDogJ2hlYXJ0JyxcbiAgaGVhcnRiZWF0QXBwOiAnYXBwX2hlYXJ0YmVhdCcsXG4gIGhlYXRtYXA6ICdoZWF0bWFwJyxcbiAgaGVscDogJ2hlbHAnLFxuICBob21lOiAnaG9tZScsXG4gIGlJbkNpcmNsZTogJ2lJbkNpcmNsZScsXG4gIGltYWdlOiAnaW1hZ2UnLFxuICBpbXBvcnRBY3Rpb246ICdpbXBvcnQnLFxuICBpbmRleENsb3NlOiAnaW5kZXhfY2xvc2UnLFxuICBpbmRleEVkaXQ6ICdpbmRleF9lZGl0JyxcbiAgaW5kZXhGbHVzaDogJ2luZGV4X2ZsdXNoJyxcbiAgaW5kZXhNYW5hZ2VtZW50QXBwOiAnYXBwX2luZGV4X21hbmFnZW1lbnQnLFxuICBpbmRleE1hcHBpbmc6ICdpbmRleF9tYXBwaW5nJyxcbiAgaW5kZXhPcGVuOiAnaW5kZXhfb3BlbicsXG4gIGluZGV4UGF0dGVybkFwcDogJ2FwcF9pbmRleF9wYXR0ZXJuJyxcbiAgaW5kZXhSb2xsdXBBcHA6ICdhcHBfaW5kZXhfcm9sbHVwJyxcbiAgaW5kZXhSdW50aW1lOiAnaW5kZXhfcnVudGltZScsXG4gIGluZGV4U2V0dGluZ3M6ICdpbmRleF9zZXR0aW5ncycsXG4gIGlucHV0T3V0cHV0OiAnaW5wdXRPdXRwdXQnLFxuICBpbnNwZWN0OiAnaW5zcGVjdCcsXG4gIGludmVydDogJ2ludmVydCcsXG4gIGlwOiAnaXAnLFxuICBrZXlib2FyZDogJ2tleWJvYXJkJyxcbiAga3FsRmllbGQ6ICdrcWxfZmllbGQnLFxuICBrcWxGdW5jdGlvbjogJ2txbF9mdW5jdGlvbicsXG4gIGtxbE9wZXJhbmQ6ICdrcWxfb3BlcmFuZCcsXG4gIGtxbFNlbGVjdG9yOiAna3FsX3NlbGVjdG9yJyxcbiAga3FsVmFsdWU6ICdrcWxfdmFsdWUnLFxuICBrdWJlcm5ldGVzTm9kZTogJ2t1YmVybmV0ZXNOb2RlJyxcbiAga3ViZXJuZXRlc1BvZDogJ2t1YmVybmV0ZXNQb2QnLFxuICBsYXllcnM6ICdsYXllcnMnLFxuICBsZW5zQXBwOiAnYXBwX2xlbnMnLFxuICBsZXR0ZXJpbmc6ICdsZXR0ZXJpbmcnLFxuICBsaW5lRGFzaGVkOiAnbGluZURhc2hlZCcsXG4gIGxpbmVEb3R0ZWQ6ICdsaW5lRG90dGVkJyxcbiAgbGluZVNvbGlkOiAnbGluZVNvbGlkJyxcbiAgbGluazogJ2xpbmsnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxpc3RBZGQ6ICdsaXN0X2FkZCcsXG4gIGxvY2s6ICdsb2NrJyxcbiAgbG9ja09wZW46ICdsb2NrT3BlbicsXG4gIGxvZ29BV1M6ICdsb2dvX2F3cycsXG4gIGxvZ29BV1NNb25vOiAnbG9nb19hd3NfbW9ubycsXG4gIGxvZ29BZXJvc3Bpa2U6ICdsb2dvX2Flcm9zcGlrZScsXG4gIGxvZ29BcGFjaGU6ICdsb2dvX2FwYWNoZScsXG4gIGxvZ29BcHBTZWFyY2g6ICdsb2dvX2FwcF9zZWFyY2gnLFxuICBsb2dvQXp1cmU6ICdsb2dvX2F6dXJlJyxcbiAgbG9nb0F6dXJlTW9ubzogJ2xvZ29fYXp1cmVfbW9ubycsXG4gIGxvZ29CZWF0czogJ2xvZ29fYmVhdHMnLFxuICBsb2dvQnVzaW5lc3NBbmFseXRpY3M6ICdsb2dvX2J1c2luZXNzX2FuYWx5dGljcycsXG4gIGxvZ29DZXBoOiAnbG9nb19jZXBoJyxcbiAgbG9nb0Nsb3VkOiAnbG9nb19jbG91ZCcsXG4gIGxvZ29DbG91ZEVudGVycHJpc2U6ICdsb2dvX2Nsb3VkX2VjZScsXG4gIGxvZ29Db2RlOiAnbG9nb19jb2RlJyxcbiAgbG9nb0NvZGVzYW5kYm94OiAnbG9nb19jb2Rlc2FuZGJveCcsXG4gIGxvZ29Db3VjaGJhc2U6ICdsb2dvX2NvdWNoYmFzZScsXG4gIGxvZ29Eb2NrZXI6ICdsb2dvX2RvY2tlcicsXG4gIGxvZ29Ecm9wd2l6YXJkOiAnbG9nb19kcm9wd2l6YXJkJyxcbiAgbG9nb0VsYXN0aWM6ICdsb2dvX2VsYXN0aWMnLFxuICBsb2dvRWxhc3RpY1N0YWNrOiAnbG9nb19lbGFzdGljX3N0YWNrJyxcbiAgbG9nb0VsYXN0aWNzZWFyY2g6ICdsb2dvX2VsYXN0aWNzZWFyY2gnLFxuICBsb2dvRW50ZXJwcmlzZVNlYXJjaDogJ2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnLFxuICBsb2dvRXRjZDogJ2xvZ29fZXRjZCcsXG4gIGxvZ29HQ1A6ICdsb2dvX2djcCcsXG4gIGxvZ29HQ1BNb25vOiAnbG9nb19nY3BfbW9ubycsXG4gIGxvZ29HaXRodWI6ICdsb2dvX2dpdGh1YicsXG4gIGxvZ29HbWFpbDogJ2xvZ29fZ21haWwnLFxuICBsb2dvR29sYW5nOiAnbG9nb19nb2xhbmcnLFxuICBsb2dvR29vZ2xlRzogJ2xvZ29fZ29vZ2xlX2cnLFxuICBsb2dvSEFwcm94eTogJ2xvZ29faGFwcm94eScsXG4gIGxvZ29JQk06ICdsb2dvX2libScsXG4gIGxvZ29JQk1Nb25vOiAnbG9nb19pYm1fbW9ubycsXG4gIGxvZ29LYWZrYTogJ2xvZ29fa2Fma2EnLFxuICBsb2dvS2liYW5hOiAnbG9nb19raWJhbmEnLFxuICBsb2dvS3ViZXJuZXRlczogJ2xvZ29fa3ViZXJuZXRlcycsXG4gIGxvZ29Mb2dnaW5nOiAnbG9nb19sb2dnaW5nJyxcbiAgbG9nb0xvZ3N0YXNoOiAnbG9nb19sb2dzdGFzaCcsXG4gIGxvZ29NYXBzOiAnbG9nb19tYXBzJyxcbiAgbG9nb01lbWNhY2hlZDogJ2xvZ29fbWVtY2FjaGVkJyxcbiAgbG9nb01ldHJpY3M6ICdsb2dvX21ldHJpY3MnLFxuICBsb2dvTW9uZ29kYjogJ2xvZ29fbW9uZ29kYicsXG4gIGxvZ29NeVNRTDogJ2xvZ29fbXlzcWwnLFxuICBsb2dvTmdpbng6ICdsb2dvX25naW54JyxcbiAgbG9nb09ic2VydmFiaWxpdHk6ICdsb2dvX29ic2VydmFiaWxpdHknLFxuICBsb2dvT3NxdWVyeTogJ2xvZ29fb3NxdWVyeScsXG4gIGxvZ29QaHA6ICdsb2dvX3BocCcsXG4gIGxvZ29Qb3N0Z3JlczogJ2xvZ29fcG9zdGdyZXMnLFxuICBsb2dvUHJvbWV0aGV1czogJ2xvZ29fcHJvbWV0aGV1cycsXG4gIGxvZ29SYWJiaXRtcTogJ2xvZ29fcmFiYml0bXEnLFxuICBsb2dvUmVkaXM6ICdsb2dvX3JlZGlzJyxcbiAgbG9nb1NlY3VyaXR5OiAnbG9nb19zZWN1cml0eScsXG4gIGxvZ29TaXRlU2VhcmNoOiAnbG9nb19zaXRlX3NlYXJjaCcsXG4gIGxvZ29Ta2V0Y2g6ICdsb2dvX3NrZXRjaCcsXG4gIGxvZ29TbGFjazogJ2xvZ29fc2xhY2snLFxuICBsb2dvVXB0aW1lOiAnbG9nb191cHRpbWUnLFxuICBsb2dvV2ViaG9vazogJ2xvZ29fd2ViaG9vaycsXG4gIGxvZ29XaW5kb3dzOiAnbG9nb193aW5kb3dzJyxcbiAgbG9nb1dvcmtwbGFjZVNlYXJjaDogJ2xvZ29fd29ya3BsYWNlX3NlYXJjaCcsXG4gIGxvZ3NBcHA6ICdhcHBfbG9ncycsXG4gIGxvZ3N0YXNoRmlsdGVyOiAnbG9nc3Rhc2hfZmlsdGVyJyxcbiAgbG9nc3Rhc2hJZjogJ2xvZ3N0YXNoX2lmJyxcbiAgbG9nc3Rhc2hJbnB1dDogJ2xvZ3N0YXNoX2lucHV0JyxcbiAgbG9nc3Rhc2hPdXRwdXQ6ICdsb2dzdGFzaF9vdXRwdXQnLFxuICBsb2dzdGFzaFF1ZXVlOiAnbG9nc3Rhc2hfcXVldWUnLFxuICBtYWNoaW5lTGVhcm5pbmdBcHA6ICdhcHBfbWwnLFxuICBtYWduZXQ6ICdtYWduZXQnLFxuICBtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOiAnbWFnbmlmeVdpdGhFeGNsYW1hdGlvbicsXG4gIG1hZ25pZnlXaXRoTWludXM6ICdtYWduaWZ5V2l0aE1pbnVzJyxcbiAgbWFnbmlmeVdpdGhQbHVzOiAnbWFnbmlmeVdpdGhQbHVzJyxcbiAgbWFuYWdlbWVudEFwcDogJ2FwcF9tYW5hZ2VtZW50JyxcbiAgbWFwTWFya2VyOiAnbWFwX21hcmtlcicsXG4gIG1lbW9yeTogJ21lbW9yeScsXG4gIG1lbnU6ICdtZW51JyxcbiAgbWVudURvd246ICdtZW51RG93bicsXG4gIG1lbnVMZWZ0OiAnbWVudUxlZnQnLFxuICBtZW51UmlnaHQ6ICdtZW51UmlnaHQnLFxuICBtZW51VXA6ICdtZW51VXAnLFxuICBtZXJnZTogJ21lcmdlJyxcbiAgbWV0cmljYmVhdEFwcDogJ2FwcF9tZXRyaWNiZWF0JyxcbiAgbWV0cmljc0FwcDogJ2FwcF9tZXRyaWNzJyxcbiAgbWluaW1pemU6ICdtaW5pbWl6ZScsXG4gIG1pbnVzOiAnbWludXMnLFxuICBtaW51c0luQ2lyY2xlOiAnbWludXNfaW5fY2lyY2xlJyxcbiAgbWludXNJbkNpcmNsZUZpbGxlZDogJ21pbnVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBtb2JpbGU6ICdtb2JpbGUnLFxuICBtb25pdG9yaW5nQXBwOiAnYXBwX21vbml0b3JpbmcnLFxuICBtb29uOiAnbW9vbicsXG4gIG5hbWVzcGFjZTogJ25hbWVzcGFjZScsXG4gIG5lc3RlZDogJ25lc3RlZCcsXG4gIG5vZGU6ICdub2RlJyxcbiAgbm90ZWJvb2tBcHA6ICdhcHBfbm90ZWJvb2snLFxuICBudW1iZXI6ICdudW1iZXInLFxuICBvZmZsaW5lOiAnb2ZmbGluZScsXG4gIG9ubGluZTogJ29ubGluZScsXG4gIG91dGxpZXJEZXRlY3Rpb25Kb2I6ICdtbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InLFxuICBwYWNrYWdlOiAncGFja2FnZScsXG4gIHBhY2tldGJlYXRBcHA6ICdhcHBfcGFja2V0YmVhdCcsXG4gIHBhZ2VTZWxlY3Q6ICdwYWdlU2VsZWN0JyxcbiAgcGFnZXNTZWxlY3Q6ICdwYWdlc1NlbGVjdCcsXG4gIHBhcGVyQ2xpcDogJ3BhcGVyX2NsaXAnLFxuICBwYXJ0aWFsOiAncGFydGlhbCcsXG4gIHBhdXNlOiAncGF1c2UnLFxuICBwYXltZW50OiAncGF5bWVudCcsXG4gIHBlbmNpbDogJ3BlbmNpbCcsXG4gIHBlcmNlbnQ6ICdwZXJjZW50JyxcbiAgcGluOiAncGluJyxcbiAgcGluRmlsbGVkOiAncGluX2ZpbGxlZCcsXG4gIHBpcGVsaW5lQXBwOiAnYXBwX3BpcGVsaW5lJyxcbiAgcGxheTogJ3BsYXknLFxuICBwbGF5RmlsbGVkOiAncGxheUZpbGxlZCcsXG4gIHBsdXM6ICdwbHVzJyxcbiAgcGx1c0luQ2lyY2xlOiAncGx1c19pbl9jaXJjbGUnLFxuICBwbHVzSW5DaXJjbGVGaWxsZWQ6ICdwbHVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBwb3BvdXQ6ICdwb3BvdXQnLFxuICBwdXNoOiAncHVzaCcsXG4gIHF1ZXN0aW9uSW5DaXJjbGU6ICdxdWVzdGlvbl9pbl9jaXJjbGUnLFxuICBxdW90ZTogJ3F1b3RlJyxcbiAgcmVjZW50bHlWaWV3ZWRBcHA6ICdhcHBfcmVjZW50bHlfdmlld2VkJyxcbiAgcmVmcmVzaDogJ3JlZnJlc2gnLFxuICByZWdyZXNzaW9uSm9iOiAnbWxfcmVncmVzc2lvbl9qb2InLFxuICByZXBvcnRlcjogJ3JlcG9ydGVyJyxcbiAgcmVwb3J0aW5nQXBwOiAnYXBwX3JlcG9ydGluZycsXG4gIHJldHVybktleTogJ3JldHVybl9rZXknLFxuICBzYXZlOiAnc2F2ZScsXG4gIHNhdmVkT2JqZWN0c0FwcDogJ2FwcF9zYXZlZF9vYmplY3RzJyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlYXJjaFByb2ZpbGVyQXBwOiAnYXBwX3NlYXJjaF9wcm9maWxlcicsXG4gIHNlY3VyaXR5QW5hbHl0aWNzQXBwOiAnYXBwX3NlY3VyaXR5X2FuYWx5dGljcycsXG4gIHNlY3VyaXR5QXBwOiAnYXBwX3NlY3VyaXR5JyxcbiAgc2VjdXJpdHlTaWduYWw6ICdzZWN1cml0eVNpZ25hbCcsXG4gIHNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ6ICdzZWN1cml0eVNpZ25hbERldGVjdGVkJyxcbiAgc2VjdXJpdHlTaWduYWxSZXNvbHZlZDogJ3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnLFxuICBzZXNzaW9uVmlld2VyOiAnc2Vzc2lvblZpZXdlcicsXG4gIHNoYXJkOiAnc2hhcmQnLFxuICBzaGFyZTogJ3NoYXJlJyxcbiAgc25vd2ZsYWtlOiAnc25vd2ZsYWtlJyxcbiAgc29ydERvd246ICdzb3J0X2Rvd24nLFxuICBzb3J0TGVmdDogJ3NvcnRMZWZ0JyxcbiAgc29ydFJpZ2h0OiAnc29ydFJpZ2h0JyxcbiAgc29ydFVwOiAnc29ydF91cCcsXG4gIHNvcnRhYmxlOiAnc29ydGFibGUnLFxuICBzcGFjZXNBcHA6ICdhcHBfc3BhY2VzJyxcbiAgc3FsQXBwOiAnYXBwX3NxbCcsXG4gIHN0YXJFbXB0eTogJ3N0YXJfZW1wdHknLFxuICBzdGFyRW1wdHlTcGFjZTogJ3N0YXJfZW1wdHlfc3BhY2UnLFxuICBzdGFyRmlsbGVkOiAnc3Rhcl9maWxsZWQnLFxuICBzdGFyRmlsbGVkU3BhY2U6ICdzdGFyX2ZpbGxlZF9zcGFjZScsXG4gIHN0YXJNaW51c0VtcHR5OiAnc3Rhcl9taW51c19lbXB0eScsXG4gIHN0YXJNaW51c0ZpbGxlZDogJ3N0YXJfbWludXNfZmlsbGVkJyxcbiAgc3RhclBsdXNFbXB0eTogJ3N0YXJQbHVzRW1wdHknLFxuICBzdGFyUGx1c0ZpbGxlZDogJ3N0YXJQbHVzRmlsbGVkJyxcbiAgc3RhdHM6ICdzdGF0cycsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3RvcEZpbGxlZDogJ3N0b3BfZmlsbGVkJyxcbiAgc3RvcFNsYXNoOiAnc3RvcF9zbGFzaCcsXG4gIHN0b3JhZ2U6ICdzdG9yYWdlJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3VibW9kdWxlOiAnc3VibW9kdWxlJyxcbiAgc3VuOiAnc3VuJyxcbiAgc3dhdGNoSW5wdXQ6ICdzd2F0Y2hfaW5wdXQnLFxuICAvLyBVbmRvY3VtZW50ZWQgb24gcHVycG9zZS4gSGFzIGFuIGV4dHJhIHN0cm9rZSBmb3IgRXVpQ29sb3JQaWNrZXJcbiAgc3ltbGluazogJ3N5bWxpbmsnLFxuICB0YWJsZURlbnNpdHlDb21wYWN0OiAndGFibGVfZGVuc2l0eV9jb21wYWN0JyxcbiAgdGFibGVEZW5zaXR5RXhwYW5kZWQ6ICd0YWJsZV9kZW5zaXR5X2V4cGFuZGVkJyxcbiAgdGFibGVEZW5zaXR5Tm9ybWFsOiAndGFibGVfZGVuc2l0eV9ub3JtYWwnLFxuICB0YWJsZU9mQ29udGVudHM6ICd0YWJsZU9mQ29udGVudHMnLFxuICB0YWc6ICd0YWcnLFxuICB0ZWFyOiAndGVhcicsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0aW1lbGluZTogJ3RpbWVsaW5lJyxcbiAgdGltZWxpb25BcHA6ICdhcHBfdGltZWxpb24nLFxuICB0aW1lUmVmcmVzaDogJ3RpbWVSZWZyZXNoJyxcbiAgdGltZXNsaWRlcjogJ3RpbWVzbGlkZXInLFxuICB0cmFpbmluZzogJ3RyYWluaW5nJyxcbiAgdHJhc2g6ICd0cmFzaCcsXG4gIHVuZm9sZDogJ3VuZm9sZCcsXG4gIHVubGluazogJ3VubGluaycsXG4gIHVwZ3JhZGVBc3Npc3RhbnRBcHA6ICdhcHBfdXBncmFkZV9hc3Npc3RhbnQnLFxuICB1cHRpbWVBcHA6ICdhcHBfdXB0aW1lJyxcbiAgdXNlcjogJ3VzZXInLFxuICB1c2VyQXZhdGFyOiAndXNlckF2YXRhcicsXG4gIHVzZXJzOiAndXNlcnMnLFxuICB1c2Vyc1JvbGVzQXBwOiAnYXBwX3VzZXJzX3JvbGVzJyxcbiAgdmVjdG9yOiAndmVjdG9yJyxcbiAgdmlkZW9QbGF5ZXI6ICd2aWRlb1BsYXllcicsXG4gIHZpc0FyZWE6ICd2aXNfYXJlYScsXG4gIHZpc0FyZWFTdGFja2VkOiAndmlzX2FyZWFfc3RhY2tlZCcsXG4gIHZpc0Jhckhvcml6b250YWw6ICd2aXNfYmFyX2hvcml6b250YWwnLFxuICB2aXNCYXJIb3Jpem9udGFsU3RhY2tlZDogJ3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJyxcbiAgdmlzQmFyVmVydGljYWw6ICd2aXNfYmFyX3ZlcnRpY2FsJyxcbiAgdmlzQmFyVmVydGljYWxTdGFja2VkOiAndmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJyxcbiAgdmlzR2F1Z2U6ICd2aXNfZ2F1Z2UnLFxuICB2aXNHb2FsOiAndmlzX2dvYWwnLFxuICB2aXNMaW5lOiAndmlzX2xpbmUnLFxuICB2aXNNYXBDb29yZGluYXRlOiAndmlzX21hcF9jb29yZGluYXRlJyxcbiAgdmlzTWFwUmVnaW9uOiAndmlzX21hcF9yZWdpb24nLFxuICB2aXNNZXRyaWM6ICd2aXNfbWV0cmljJyxcbiAgdmlzUGllOiAndmlzX3BpZScsXG4gIHZpc1RhYmxlOiAndmlzX3RhYmxlJyxcbiAgdmlzVGFnQ2xvdWQ6ICd2aXNfdGFnX2Nsb3VkJyxcbiAgdmlzVGV4dDogJ3Zpc190ZXh0JyxcbiAgdmlzVGltZWxpb246ICd2aXNfdGltZWxpb24nLFxuICB2aXNWZWdhOiAndmlzX3ZlZ2EnLFxuICB2aXNWaXN1YWxCdWlsZGVyOiAndmlzX3Zpc3VhbF9idWlsZGVyJyxcbiAgdmlzdWFsaXplQXBwOiAnYXBwX3Zpc3VhbGl6ZScsXG4gIHdhdGNoZXNBcHA6ICdhcHBfd2F0Y2hlcycsXG4gIHdvcmRXcmFwOiAnd29yZFdyYXAnLFxuICB3b3JkV3JhcERpc2FibGVkOiAnd29yZFdyYXBEaXNhYmxlZCcsXG4gIHdvcmtwbGFjZVNlYXJjaEFwcDogJ2FwcF93b3JrcGxhY2Vfc2VhcmNoJyxcbiAgd3JlbmNoOiAnd3JlbmNoJyxcbiAgLy8gVG9rZW4gSWNvbiBJbXBvcnRzXG4gIHRva2VuQWxpYXM6ICd0b2tlbkFsaWFzJyxcbiAgdG9rZW5Bbm5vdGF0aW9uOiAndG9rZW5Bbm5vdGF0aW9uJyxcbiAgdG9rZW5BcnJheTogJ3Rva2VuQXJyYXknLFxuICB0b2tlbkJpbmFyeTogJ3Rva2VuQmluYXJ5JyxcbiAgdG9rZW5Cb29sZWFuOiAndG9rZW5Cb29sZWFuJyxcbiAgdG9rZW5DbGFzczogJ3Rva2VuQ2xhc3MnLFxuICB0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXI6ICd0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInLFxuICB0b2tlbkNvbnN0YW50OiAndG9rZW5Db25zdGFudCcsXG4gIHRva2VuRGF0ZTogJ3Rva2VuRGF0ZScsXG4gIHRva2VuRGVuc2VWZWN0b3I6ICd0b2tlbkRlbnNlVmVjdG9yJyxcbiAgdG9rZW5FbGVtZW50OiAndG9rZW5FbGVtZW50JyxcbiAgdG9rZW5FbnVtOiAndG9rZW5FbnVtJyxcbiAgdG9rZW5FbnVtTWVtYmVyOiAndG9rZW5FbnVtTWVtYmVyJyxcbiAgdG9rZW5FdmVudDogJ3Rva2VuRXZlbnQnLFxuICB0b2tlbkV4Y2VwdGlvbjogJ3Rva2VuRXhjZXB0aW9uJyxcbiAgdG9rZW5GaWVsZDogJ3Rva2VuRmllbGQnLFxuICB0b2tlbkZpbGU6ICd0b2tlbkZpbGUnLFxuICB0b2tlbkZsYXR0ZW5lZDogJ3Rva2VuRmxhdHRlbmVkJyxcbiAgdG9rZW5GdW5jdGlvbjogJ3Rva2VuRnVuY3Rpb24nLFxuICB0b2tlbkdlbzogJ3Rva2VuR2VvJyxcbiAgdG9rZW5IaXN0b2dyYW06ICd0b2tlbkhpc3RvZ3JhbScsXG4gIHRva2VuSW50ZXJmYWNlOiAndG9rZW5JbnRlcmZhY2UnLFxuICB0b2tlbklQOiAndG9rZW5JUCcsXG4gIHRva2VuSm9pbjogJ3Rva2VuSm9pbicsXG4gIHRva2VuS2V5OiAndG9rZW5LZXknLFxuICB0b2tlbktleXdvcmQ6ICd0b2tlbktleXdvcmQnLFxuICB0b2tlbk1ldGhvZDogJ3Rva2VuTWV0aG9kJyxcbiAgdG9rZW5NZXRyaWNDb3VudGVyOiAndG9rZW5NZXRyaWNDb3VudGVyJyxcbiAgdG9rZW5NZXRyaWNHYXVnZTogJ3Rva2VuTWV0cmljR2F1Z2UnLFxuICB0b2tlbk1vZHVsZTogJ3Rva2VuTW9kdWxlJyxcbiAgdG9rZW5OYW1lc3BhY2U6ICd0b2tlbk5hbWVzcGFjZScsXG4gIHRva2VuTmVzdGVkOiAndG9rZW5OZXN0ZWQnLFxuICB0b2tlbk51bGw6ICd0b2tlbk51bGwnLFxuICB0b2tlbk51bWJlcjogJ3Rva2VuTnVtYmVyJyxcbiAgdG9rZW5PYmplY3Q6ICd0b2tlbk9iamVjdCcsXG4gIHRva2VuT3BlcmF0b3I6ICd0b2tlbk9wZXJhdG9yJyxcbiAgdG9rZW5QYWNrYWdlOiAndG9rZW5QYWNrYWdlJyxcbiAgdG9rZW5QYXJhbWV0ZXI6ICd0b2tlblBhcmFtZXRlcicsXG4gIHRva2VuUGVyY29sYXRvcjogJ3Rva2VuUGVyY29sYXRvcicsXG4gIHRva2VuUHJvcGVydHk6ICd0b2tlblByb3BlcnR5JyxcbiAgdG9rZW5SYW5nZTogJ3Rva2VuUmFuZ2UnLFxuICB0b2tlblJhbmtGZWF0dXJlOiAndG9rZW5SYW5rRmVhdHVyZScsXG4gIHRva2VuUmFua0ZlYXR1cmVzOiAndG9rZW5SYW5rRmVhdHVyZXMnLFxuICB0b2tlblJlcG86ICd0b2tlblJlcG8nLFxuICB0b2tlblNlYXJjaFR5cGU6ICd0b2tlblNlYXJjaFR5cGUnLFxuICB0b2tlblNoYXBlOiAndG9rZW5TaGFwZScsXG4gIHRva2VuU3RyaW5nOiAndG9rZW5TdHJpbmcnLFxuICB0b2tlblN0cnVjdDogJ3Rva2VuU3RydWN0JyxcbiAgdG9rZW5TeW1ib2w6ICd0b2tlblN5bWJvbCcsXG4gIHRva2VuVGFnOiAndG9rZW5UYWcnLFxuICB0b2tlblRleHQ6ICd0b2tlblRleHQnLFxuICB0b2tlblRva2VuQ291bnQ6ICd0b2tlblRva2VuQ291bnQnLFxuICB0b2tlblZhcmlhYmxlOiAndG9rZW5WYXJpYWJsZSdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7XG52YXIgX3F1ZXVlID0gW107XG5cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgLy8gdGhlIHF1ZXVlZCBmdW5jdGlvbnMgdHJpZ2dlciByZWFjdCBzZXRTdGF0ZXMgd2hpY2gsIGlmIHVuYmF0Y2hlZCxcbiAgLy8gZWFjaCBjYXVzZSBhIGZ1bGwgdXBkYXRlLT5yZW5kZXItPmRvbSBwYXNzIF9wZXIgZnVuY3Rpb25fXG4gIC8vIGluc3RlYWQsIHRlbGwgUmVhY3QgdG8gd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBhcmUgZmluaXNoZWQgYmVmb3JlIHJlLXJlbmRlcmluZ1xuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9xdWV1ZVtpXSgpO1xuICAgIH1cblxuICAgIF9xdWV1ZS5sZW5ndGggPSAwO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVTdGF0ZUNoYW5nZShmbikge1xuICBpZiAoX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHNldFRpbWVvdXQocHJvY2Vzc1F1ZXVlKTtcbiAgfVxuXG4gIF9xdWV1ZS5wdXNoKGZuKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInLCAndGV4dCcsICdzdWJkdWVkJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQ29sb3IobmFtZSkge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKG5hbWUpO1xufSIsICJmdW5jdGlvbiBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KG9iaikgeyBpZiAob2JqID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdW5kZWZpbmVkXCIpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVNjcm9sbEJhclN0eWxlcyB9IGZyb20gJy4uL21peGlucyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHJlc2V0U3R5bGVzIGFzIHJlc2V0IH0gZnJvbSAnLi9yZXNldCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlHbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBFdWlHbG9iYWxTdHlsZXMoX3JlZikge1xuICBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KF9yZWYpO1xuXG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYmFzZSA9IGV1aVRoZW1lLmJhc2UsXG4gICAgICBjb2xvcnMgPSBldWlUaGVtZS5jb2xvcnMsXG4gICAgICBmb250ID0gZXVpVGhlbWUuZm9udDtcbiAgLyoqXG4gICAqIERlY2xhcmluZyB0aGUgdG9wIGxldmVsIHNjcm9sbGJhciBjb2xvcnMgdG8gbWF0Y2ggdGhlIHRoZW1lIGFsc28gcmVxdWlyZXMgc2V0dGluZyB0aGUgc2l6ZXMgb24gQ2hyb21lXG4gICAqIHNvIHRoYXQgaXQga25vd3MgdG8gdXNlIGN1c3RvbSBzdHlsZXMuIFRoZXJlZm9yZSwgd2UganVzdCByZXVzZSB0aGUgc2FtZSBzY3JvbGxiYXIgbWl4aW4gd2l0aCB0aGljayBzaXplLlxuICAgKi9cblxuICB2YXIgc2Nyb2xsYmFyU3R5bGVzID0gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIHRyYWNrQ29sb3I6IGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IHNoYWRlKGNvbG9ycy5ib2R5LCAwLjAzKSA6IHRpbnQoY29sb3JzLmJvZHksIDAuMDcpLFxuICAgIHdpZHRoOiAnYXV0bydcbiAgfSk7XG4gIC8qKlxuICAgKiBUaGlzIGZvbnQgcmVzZXQgc2V0cyBhbGwgb3VyIGJhc2UgZm9udC90eXBvZ3JhcGh5IHJlbGF0ZWQgcHJvcGVydGllc1xuICAgKiB0aGF0IGFyZSBuZWVkZWQgdG8gb3ZlcnJpZGUgYnJvd3Nlci1zcGVjaWZpYyBlbGVtZW50IHNldHRpbmdzLlxuICAgKi9cblxuICB2YXIgZm9udFJlc2V0ID0gXCJcXG4gICAgZm9udC1mYW1pbHk6IFwiLmNvbmNhdChmb250LmZhbWlseSwgXCI7XFxuICAgIGZvbnQtc2l6ZTogXCIsIFwiXCIuY29uY2F0KGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UsIFwicHhcIiksIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChiYXNlIC8gKGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UpLCBcIjtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZm9udC53ZWlnaHRbZm9udC5ib2R5LndlaWdodF0sIFwiO1xcbiAgXCIpO1xuICAvKipcbiAgICogRmluYWwgc3R5bGVzXG4gICAqL1xuXG4gIHZhciBzdHlsZXMgPSAvKiNfX1BVUkVfXyovY3NzKHJlc2V0LCBcIiBodG1se1wiLCBzY3JvbGxiYXJTdHlsZXMsIFwiIFwiLCBmb250UmVzZXQsIFwiIHRleHQtc2l6ZS1hZGp1c3Q6MTAwJTtmb250LWtlcm5pbmc6bm9ybWFsO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5ib2R5LCBcIjtjb2xvcjpcIiwgY29sb3JzLnRleHQsIFwiO31jb2RlLHByZSxrYmQsc2FtcHtmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHlDb2RlLCBcIjt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e1wiLCBmb250UmVzZXQsIFwiO31idXR0b257Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5LCBcIjt9ZW17Zm9udC1zdHlsZTppdGFsaWM7fXN0cm9uZ3tmb250LXdlaWdodDpcIiwgZm9udC53ZWlnaHQuYm9sZCwgXCI7fSo6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZSksIFwiO306OnNlbGVjdGlvbntiYWNrZ3JvdW5kOlwiLCB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgY29sb3JNb2RlID09PSAnTElHSFQnID8gMC4xIDogMC4yKSwgXCI7fWF7Y29sb3I6XCIsIGNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7JiwmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fX0uZXVpQm9keS1oYXNQb3J0YWxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6c3R5bGVzO1wiKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgQkFDS0dST1VORF9DT0xPUlMgPSBbJ3RyYW5zcGFyZW50JywgJ3BsYWluJywgJ3N1YmR1ZWQnLCAnYWNjZW50JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBldWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBldWlCYWNrZ3JvdW5kQ29sb3IoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBtZXRob2QgPSBfcmVmMi5tZXRob2Q7XG5cbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gJ3RyYW5zcGFyZW50JztcblxuICBpZiAobWV0aG9kID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgaWYgKGNvbG9yID09PSAncGxhaW4nKSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmdob3N0LCAwLjIpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWJkdWVkJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC4xKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCAwLjgpIDogdGludChjb2xvciwgMC45KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoIChjb2xvcikge1xuICAgICAgY2FzZSAncGxhaW4nOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGU7XG5cbiAgICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmJvZHk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvcihjb2xvcikge1xuICB2YXIgX3JlZjMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgbWV0aG9kID0gX3JlZjMubWV0aG9kO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yLCB7XG4gICAgbWV0aG9kOiBtZXRob2RcbiAgfSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNwYXJlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3RyYW5zcGFyZW50JyksIFwiOztsYWJlbDp0cmFuc3BhcmVudDtcIiksXG4gICAgcGxhaW46IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3BsYWluJyksIFwiOztsYWJlbDpwbGFpbjtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3ViZHVlZCcpLCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdhY2NlbnQnKSwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcigncHJpbWFyeScpLCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3VjY2VzcycpLCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignd2FybmluZycpLCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdkYW5nZXInKSwgXCI7O2xhYmVsOmRhbmdlcjtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuLyoqXG4gKiBTZXQgc2Nyb2xsIGJhciBhcHBlYXJhbmNlIG9uIENocm9tZSAoYW5kIGZpcmVmb3gpLlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIHNwZWNpZmljIGdsb2JhbCBzZXR0aW5ncy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcm9sbEJhclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcm9sbEJhclN0eWxlcyhfcmVmKSB7XG4gIHZhciBfcmVmJGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9ycyA9IF9yZWYkZXVpVGhlbWUuY29sb3JzLFxuICAgICAgc2l6ZSA9IF9yZWYkZXVpVGhlbWUuc2l6ZTtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3RodW1iQ29sb3IgPSBfcmVmMi50aHVtYkNvbG9yLFxuICAgICAgX3JlZjIkdHJhY2tDb2xvciA9IF9yZWYyLnRyYWNrQ29sb3IsXG4gICAgICB0cmFja0NvbG9yID0gX3JlZjIkdHJhY2tDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYyJHRyYWNrQ29sb3IsXG4gICAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gJ3RoaW4nIDogX3JlZjIkd2lkdGgsXG4gICAgICBfc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBfY29ybmVyID0gX3JlZjIuY29ybmVyO1xuXG4gIC8vIFNldCBkZWZhdWx0cyBmcm9tIHRoZW1lXG4gIHZhciB0aHVtYkNvbG9yID0gX3RodW1iQ29sb3IgfHwgdHJhbnNwYXJlbnRpemUoY29sb3JzLmRhcmtTaGFkZSwgMC41KTtcblxuICB2YXIgc2Nyb2xsQmFyU2l6ZSA9IF9zaXplIHx8IHNpemUuYmFzZTtcbiAgdmFyIHNjcm9sbEJhckNvcm5lciA9IF9jb3JuZXIgfHwgd2lkdGggPT09ICd0aGluJyA/IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5zLCBcIiAqIDAuNzUpXCIpIDogc2l6ZS54czsgLy8gRmlyZWZveCdzIHNjcm9sbGJhciBjb2xvcmluZyBjYXNjYWRlcywgYnV0IHRoZSBzaXppbmcgZG9lcyBub3QsXG4gIC8vIHNvIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhpcyBtaXhpbiBmb3IgYWxsb3dpbmcgc3VwcG9ydCB3aGVyZXZlciBjdXN0b20gc2Nyb2xsYmFycyBhcmVcblxuICB2YXIgZmlyZWZveFN1cHBvcnQgPSBcInNjcm9sbGJhci1jb2xvcjogXCIuY29uY2F0KHRodW1iQ29sb3IsIFwiIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XCIpO1xuICByZXR1cm4gXCJzY3JvbGxiYXItd2lkdGg6IFwiLmNvbmNhdCh3aWR0aCwgXCI7XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICB3aWR0aDogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgICBoZWlnaHQ6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodGh1bWJDb2xvciwgXCI7XFxuICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChzY3JvbGxCYXJDb3JuZXIsIFwiIHNvbGlkIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLFxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICBcIikuY29uY2F0KGZpcmVmb3hTdXBwb3J0LCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2Nyb2xsQmFyID0gZnVuY3Rpb24gdXNlRXVpU2Nyb2xsQmFyKG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiAqSU5URVJOQUwqXG4gKiBPdmVyZmxvdyBzaGFkb3cgbWFza3MgZm9yIHVzZSBpbiBZU2Nyb2xsIGFuZCBYU2Nyb2xsIGhlbHBlcnNcbiAqL1xuXG52YXIgZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhfcmVmMykge1xuICB2YXIgc2l6ZSA9IF9yZWYzLmV1aVRoZW1lLnNpemU7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9kaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICBfc2lkZSA9IF9yZWY0LnNpZGU7XG5cbiAgdmFyIGRpcmVjdGlvbiA9IF9kaXJlY3Rpb24gfHwgJ3knO1xuICB2YXIgc2lkZSA9IF9zaWRlIHx8ICdib3RoJztcbiAgdmFyIGhpZGVIZWlnaHQgPSBcImNhbGMoXCIuY29uY2F0KHNpemUuYmFzZSwgXCIgKiAwLjc1ICogMS4yNSlcIik7XG4gIHZhciBncmFkaWVudFN0YXJ0ID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMCUsXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIlxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnRFbmQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgY2FsYygxMDAlIC0gXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIiksXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAxMDAlXFxuICBcIik7XG4gIHZhciBncmFkaWVudCA9ICcnO1xuXG4gIGlmIChzaWRlKSB7XG4gICAgaWYgKHNpZGUgPT09ICdib3RoJykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0LCBcIiwgXCIpLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfSBlbHNlIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH1cbn07XG4vKipcbiAqIDEuIEZvY3VzIHJpbmdzIHNob3VsZG4ndCBiZSB2aXNpYmxlIG9uIHNjcm9sbGFibGUgcmVnaW9ucywgYnV0IGExMXkgcmVxdWlyZXMgdGhlbSB0byBiZSBmb2N1c2FibGUuXG4gKiAgICBCcm93c2VyJ3Mgc3VwcG9ydGluZyBgOmZvY3VzLXZpc2libGVgIHdpbGwgc3RpbGwgc2hvdyBvdXRsaW5lIG9uIGtleWJvYXJkIGZvY3VzIG9ubHkuXG4gKiAgICBPdGhlcnMgbGlrZSBTYWZhcmksIHdvbid0IHNob3cgYW55dGhpbmcgYXQgYWxsLlxuICovXG4vLyBUT0RPOiBIb3cgZG8gd2UgdXNlIEVtb3Rpb24gdG8gb3V0cHV0IHRoZSBDU1MgY2xhc3MgdXRpbGl0aWVzIGluc3RlYWQ/XG5cblxuZXhwb3J0IHZhciBldWlZU2Nyb2xsID0gZnVuY3Rpb24gZXVpWVNjcm9sbChldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGwoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlZU2Nyb2xsKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd5J1xuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbCA9IGZ1bmN0aW9uIGV1aVhTY3JvbGwoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbChldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWFNjcm9sbChldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneCdcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIF9yZWY1JG1hc2sgPSBfcmVmNS5tYXNrLFxuICAgICAgbWFzayA9IF9yZWY1JG1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjUkbWFzaztcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWVNjcm9sbChldWlUaGVtZSk7XG5cbiAgICBjYXNlICd4JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBkaXJlY3Rpb24gb3B0aW9uIHRvIHVzZUV1aU92ZXJmbG93U2Nyb2xsJyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpT3ZlcmZsb3dTY3JvbGwoZGlyZWN0aW9uKSB7XG4gIHZhciBtYXNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgbWFzazogbWFza1xuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGxvZ2ljYWxTaWRlIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCddO1xuZXhwb3J0IHZhciBldWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIGV1aVBhZGRpbmdTaXplKF9yZWYsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZS5iYXNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplW3NpemVdO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdTaXplKHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdDU1MgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nQ1NTKHNpZGUpIHtcbiAgdmFyIHByb3BlcnR5ID0gc2lkZSA/IFwicGFkZGluZy1cIi5jb25jYXQobG9naWNhbFNpZGVbc2lkZV0pIDogJ3BhZGRpbmcnO1xuICByZXR1cm4ge1xuICAgIG5vbmU6IG51bGwsXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCdsJyksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCd4bCcpLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogSXQgaXMgYmVzdCBwcmFjdGljZSB0byB1dGlsaXplIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBgb3V0bGluZWAgcHJvcGVydHkgZm9yIGhhbmRsaW5nIGZvY3VzIHJpbmdzLlxuICogSG93ZXZlciwgc29tZSBjb21wb25lbnRzIG5lZWQgdG8gYmUgZm9yY2VkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIG9yIGFkanVzdCB0aGUgZGlzcGxheS5cbiAqIFRoaXMgZnVuY3Rpb24gcmUtYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0IG91dGxpbmUgd2l0aCBhIGNvdXBsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZXVpVGhlbWUgVXNlRXVpVGhlbWUuZXVpVGhlbWVcbiAqIEBwYXJhbSBvZmZzZXQgQWNjZXB0cyBhIHNwZWNpZmljIG1lYXN1cmVtZW50IG9yICdpbnNldCcsICdvdXRzZXQnIG9yICdjZW50ZXInIHRvIGFkanVzdCBvdXRsaW5lIHBvc2l0aW9uXG4gKiBAcGFyYW0gY29sb3IgQWNjZXB0cyBhbnkgQ1NTIGNvbG9yLCAqKk5vdGU6IG9ubHkgd29ya3MgaW4gLXdlYmtpdC0qKlxuICovXG5leHBvcnQgdmFyIGV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIGV1aUZvY3VzUmluZyhldWlUaGVtZSkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gV2lkdGggaXMgZW5mb3JjZWQgYXMgYSBjb25zdGFudCBhdCB0aGUgZ2xvYmFsIHRoZW1lIGxheWVyXG4gIHZhciBvdXRsaW5lV2lkdGggPSBldWlUaGVtZS5mb2N1cy53aWR0aDtcbiAgdmFyIG91dGxpbmVDb2xvciA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29sb3IpIHx8IGV1aVRoZW1lLmZvY3VzLmNvbG9yO1xuICB2YXIgb3V0bGluZU9mZnNldCA9IG9mZnNldDtcblxuICBpZiAob2Zmc2V0ID09PSAnaW5zZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiLVwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ291dHNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCJcIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdjZW50ZXInKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiY2FsYyhcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiAvIC0yKTtcIik7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgZm9jdXMtdmlzaWJsZWAgdG8gdHVybiBvbiBmb2N1cyBvdXRsaW5lcy5cbiAgLy8gQnV0IHRoaXMgaXMgYnJvd3Nlci1kZXBlbmRlbmQ6XG4gIC8vIFx1RDgzRFx1REM0OSBTYWZhcmkgYW5kIEZpcmVmb3ggaW5uYXRlbHkgcmVzcGVjdCBvbmx5IHNob3dpbmcgdGhlIG91dGxpbmUgd2l0aCBrZXlib2FyZCBvbmx5XG4gIC8vIFx1RDgzRFx1REM5NCBCdXQgdGhleSBkb24ndCBhbGxvdyBjb2xvcmluZyBvZiB0aGUgJ2F1dG8nL2RlZmF1bHQgb3V0bGluZSwgc28gY29udHJhc3QgaXMgbm8gZ29vZCBpbiBkYXJrIG1vZGUuXG4gIC8vIFx1RDgzRFx1REM0OSBGb3IgdGhlc2UgYnJvd3NlcnMgd2UgdXNlIHRoZSBzb2xpZCB0eXBlIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggYGN1cnJlbnRDb2xvci5cbiAgLy8gXHVEODNEXHVERTI2IFdoaWNoIGRvZXMgbWVhbnMgdGhlIG91dGxpbmUgd2lsbCBiZSBzcXVhcmVcblxuXG4gIHJldHVybiBcIlxcbiAgICBvdXRsaW5lOiBcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KG91dGxpbmVDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KG91dGxpbmVPZmZzZXQsIFwiO1xcblxcbiAgICAvLyBcXHVEODNEXFx1REM0MCBDaHJvbWUgcmVzcGVjdHMgOmZvY3VzLXZpc2libGUgYW5kIGFsbG93cyBjb2xvcmluZyB0aGUgYGF1dG9gIHN0eWxlXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZS1zdHlsZTogYXV0bztcXG4gICAgfVxcblxcbiAgICAvLyBcXHVEODNEXFx1REU0NVxcdTIwMERcXHUyNjQwXFx1RkUwRiBCdXQgQ2hyb21lIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgb3V0bGluZSBmb3JjZWZ1bGx5IHJlbW92ZWQgZnJvbSByZWd1bGFyIGA6Zm9jdXNgIHN0YXRlXFxuICAgICY6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gdXNlRXVpRm9jdXNSaW5nKG9mZnNldCwgY29sb3IpIHtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZTtcblxuICByZXR1cm4gZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCBvZmZzZXQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgZXVpTGluZUhlaWdodEZyb21CYXNlbGluZSwgZXVpRm9udFNpemVGcm9tU2NhbGUgfSBmcm9tICcuLi9mdW5jdGlvbnMvdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2hvb2tzJztcblxuLyoqXG4gKiBSZXR1cm5zIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHRcbiAqL1xuZXhwb3J0IHZhciBldWlGb250U2l6ZSA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplKF9yZWYsIHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZm9udFNpemU6IGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucyksXG4gICAgbGluZUhlaWdodDogZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpXG4gIH07XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb250U2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aUZvbnRTaXplKHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlGb250U2l6ZShldWlUaGVtZSwgc2NhbGUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogRm9yY2UgdGV4dCB0byB3cmFwIG9uIG5hdHVyYWwgd29yZCBicmVha3MgKGUuZy4gc3BhY2VzICYgaHlwaGVucylcbiAqIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL3ByZXZlbnQtbG9uZy11cmxzLWZyb20tYnJlYWtpbmctb3V0LW9mLWNvbnRhaW5lci9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRCcmVha1dvcmQgPSBmdW5jdGlvbiBldWlUZXh0QnJlYWtXb3JkKCkge1xuICByZXR1cm4gXCJcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gbWFrZXMgc3VyZSB0aGUgbG9uZyBzdHJpbmcgd2lsbCB3cmFwIGFuZCBub3QgYnVzdCBvdXQgb2YgdGhlIGNvbnRhaW5lclxcbiAgd29yZC13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IC8vIHNwZWMgc2F5cywgdGhleSBhcmUgbGl0ZXJhbGx5IGp1c3QgYWx0ZXJuYXRlIG5hbWVzIGZvciBlYWNoIG90aGVyIGJ1dCBzb21lIGJyb3dzZXJzIHN1cHBvcnQgb25lIGFuZCBub3QgdGhlIG90aGVyXFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkOyAvLyBJRSBkb2Vzbid0IHVuZGVyc3RhbmQgYnV0IHRoYXQncyBva1xcblwiO1xufTtcbi8qKlxuICogUHJldmVudCB0ZXh0IGZyb20gd3JhcHBpbmcgb250byBtdWx0aXBsZSBsaW5lcywgYW5kIHRydW5jYXRlIHdpdGggYW4gZWxsaXBzaXMuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBldWlUZXh0VHJ1bmNhdGUoKSB7XG4gIHZhciBtYXhXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJzEwMCUnO1xuICByZXR1cm4gXCJcXG4gIG1heC13aWR0aDogXCIuY29uY2F0KG1heFdpZHRoLCBcIjsgLy8gRW5zdXJlIHRoYXQgdGhlIG5vZGUgaGFzIGEgbWF4aW11bSB3aWR0aCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1clxcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG5cIik7XG59O1xuLyoqXG4gKiBGaXhlZC13aWR0aCBudW1iZXJzIGZvciB0YWJ1bGFyIGRhdGFcbiAqL1xuXG5leHBvcnQgdmFyIGV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGV1aU51bWJlckZvcm1hdChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZlYXR1cmVTZXR0aW5ncywgXCIsICd0bnVtJyAxO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIHVzZUV1aU51bWJlckZvcm1hdCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU51bWJlckZvcm1hdChldWlUaGVtZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5XG4gKiBzbyB0aGF0IHdoZW4gaXQgaXMgdHVybmVkIG9mZiwgYW5pbWF0aW9ucyBhcmUgbm90IHJ1bi5cbiAqL1xuZXhwb3J0IHZhciBldWlDYW5BbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSc7XG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbFxuICogb25seSBhcHBseSB0aGUgY29udGVudCBpZiB0aGUgc2V0dGluZyBpcyBvZmYgKHJlZHVjZSkuXG4gKi9cblxuZXhwb3J0IHZhciBldWlDYW50QW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSc7XG4vKipcbiAqIFNwZWVkcyAvIER1cmF0aW9ucyAvIERlbGF5c1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25TcGVlZHMgPSBbJ2V4dHJhRmFzdCcsICdmYXN0JywgJ25vcm1hbCcsICdzbG93JywgJ2V4dHJhU2xvdyddO1xuXG4vKipcbiAqIEVhc2luZ3MgLyBUaW1pbmcgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25FYXNpbmdzID0gWydib3VuY2UnLCAncmVzaXN0YW5jZSddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciByZXNldFN0eWxlcyA9IFwiXFxuLyogLy8gQWRhcHRlZCBmcm9tIEVyaWMgTWV5ZXIncyByZXNldCAoaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC8sIHYyLjAgfCAyMDExMDEyNikuICovXFxuXFxuXFxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsXFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxcbnRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLFxcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuYVtocmVmXSxcXG5idXR0b24sXFxuW3JvbGU9J2J1dHRvbiddIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5pbnB1dCB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5pbnB1dDpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAxOyAvKiByZXF1aXJlZCBvbiBpT1MgKi9cXG59XFxuXFxub2wsXFxudWwge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZSxcXG5xIHtcXG4gIHF1b3Rlczogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZTpiZWZvcmUsXFxuYmxvY2txdW90ZTphZnRlcixcXG5xOmJlZm9yZSxcXG5xOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG5cXG50YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuZmllbGRzZXQge1xcbiAgbWluLWlubGluZS1zaXplOiBhdXRvO1xcbn1cXG5cXG4vKiBDaHJvbWUgaGFzIGFuIGlzc3VlIGFyb3VuZCBSVEwgbGFuZ3VhZ2VzIGluIFNWR3Mgd2hlbiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZVxcbiAqIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTk2NjQ4MFxcbiAqL1xcbnN2ZyB0ZXh0IHtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDtcXG59XCI7IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBpY29uU2l6ZSA9IGZ1bmN0aW9uIGljb25TaXplKHNpemUpIHtcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIHNpemUpLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzaXplKSwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGljb25Mb2FkaW5nT3BhY2l0eSA9IDAuMDU7XG52YXIgaWNvbkxvYWRpbmcgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiBcIiwgXCI7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSwgaWNvbkxvYWRpbmdPcGFjaXR5KTtcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJY29uU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKTsuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGUsIFwiO307bGFiZWw6ZXVpSWNvbjtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmdob3N0O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOnRleHQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgaW5oZXJpdDogX3JlZjIsXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIiksXG4gICAgbG9nb0VsYXN0aWNPdXRsaW5lOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS5tKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUubCksIFwiO2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueGwpLCBcIjtsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueHhsKSwgXCI7bGFiZWw6eHhsO1wiKSxcbiAgICAvLyBWYXJpYW50c1xuICAgIC8vIEFwcCBpY29ucyBhcmUgdHdvLXRvbmVkLiBUaGlzIHByb3ZpZGVzIHRoZSBiYXNlIGNvbG9yLlxuICAgIGFwcDogLyojX19QVVJFX18qL2NzcyhcImZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjsuZXVpSWNvbl9fZmlsbFNlY29uZGFyeXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiO307bGFiZWw6YXBwO1wiKSxcbiAgICBsb2dvOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxvZ287XCIpLFxuICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgaXNMb2FkaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTpcIiwgaWNvbkxvYWRpbmdPcGFjaXR5LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6aXNMb2FkaW5nO1wiKSxcbiAgICBpc0xvYWRlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGljb25Mb2FkaW5nLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbiAwcyAxIGZvcndhcmRzO307bGFiZWw6aXNMb2FkZWQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlJMThuQ29uc3VtZXIgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9jb250ZXh0JztcbmltcG9ydCB7IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuIH0gZnJvbSAnLi9pMThuX3V0aWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiSTE4biBtYXBwaW5nIGZvciB0b2tlbiBcXFwiXCIuY29uY2F0KHRva2VuLCBcIlxcXCIgaXMgYSBmb3JtYXR0aW5nIGZ1bmN0aW9uIGJ1dCBubyB2YWx1ZXMgd2VyZSBwcm92aWRlZC5cIikpO1xufVxuXG5mdW5jdGlvbiBsb29rdXBUb2tlbihvcHRpb25zKSB7XG4gIHZhciB0b2tlbiA9IG9wdGlvbnMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZyA9IG9wdGlvbnMuaTE4bk1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQgPSBvcHRpb25zLnZhbHVlRGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYyA9IG9wdGlvbnMuaTE4bk1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgICByZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgdmFyIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZyAmJiBpMThuTWFwcGluZ1t0b2tlbl0gfHwgdmFsdWVEZWZhdWx0O1xuXG4gIGlmICh0eXBlb2YgcmVuZGVyYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgVHlwZVNjcmlwdCBjb21wbGFpbnMgdGhhdCBgREVGQVVMVGAgZG9lc24ndCBoYXZlIGEgY2FsbCBzaWduYXR1cmUgYnV0IHdlIHZlcmlmaWVkIGByZW5kZXJhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cblxuICAgIHZhciByZW5kZXJlZCA9IHJlbmRlcmFibGUodmFsdWVzKTtcbiAgICByZXR1cm4gaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiByZW5kZXJlZCA9PT0gJ3N0cmluZycgPyBpMThuTWFwcGluZ0Z1bmMocmVuZGVyZWQpIDogcmVuZGVyZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWVzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlbmRlcmFibGUgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgdmFsdWVEZWZhdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZURlZmF1bHQpO1xuICAgIH0gLy8gdGhlcmUncyBhIGhvbGUgaW4gdGhlIHR5cGluZ3MgaGVyZSBhcyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpMThuTWFwcGluZ0Z1bmNcbiAgICAvLyByZXR1cm5lZCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgd2UgbmVlZCB0byBrZWVwIHRoYXQgYXNzdW1wdGlvblxuXG5cbiAgICByZXR1cm4gcmVuZGVyYWJsZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKHJlbmRlcmFibGUsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKTtcblxuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgIC8vIGxpa2V3aXNlLCBgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW5gIHJldHVybnMgYSBzdHJpbmcgb3IgUmVhY3RDaGlsZFtdIGRlcGVuZGluZyBvblxuICAgIC8vIHRoZSB0eXBlIG9mIGB2YWx1ZXNgLCBzbyB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBjb3JyZWN0LlxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciBDb21wb25lbnQgPSByZW5kZXIgPyByZW5kZXIoY2hpbGRyZW4pIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH07IC8vIHNhbWUgcmVhc29ucyBhcyBhYm92ZSwgd2UgY2FuJ3QgcHJvbWlzZSB0aGUgdHJhbnNmb3JtcyBtYXRjaCB0aGUgZGVmYXVsdCdzIHR5cGVcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB2YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBpc0kxOG5Ub2tlbnNTaGFwZSh4KSB7XG4gIHJldHVybiB4LnRva2VucyAhPSBudWxsO1xufSAvLyBNdXN0IHVzZSB0aGUgZ2VuZXJpY3MgPFQgZXh0ZW5kcyB7fT5cbi8vIElmIGluc3RlYWQgdHlwZWQgd2l0aCBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCB0aGVyZSBpc24ndCBmZWVkYmFjayBnaXZlbiBiYWNrIHRvIHRoZSBkZXZcbi8vIHdoZW4gdXNpbmcgYSBgdmFsdWVzYCBvYmplY3Qgd2l0aCBhIHJlbmRlcmVyIGNhbGxiYWNrLlxuXG5cbnZhciBFdWlJMThuID0gZnVuY3Rpb24gRXVpSTE4bihwcm9wcykge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChpMThuQ29uZmlnKSB7XG4gICAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgICBpZiAoaXNJMThuVG9rZW5zU2hhcGUocHJvcHMpKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4ocHJvcHMudG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdHNbaWR4XSxcbiAgICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5WYWx1ZSA9IGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0LFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRva2VuVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgICB9XG4gIH0pO1xufTsgLy8gQSBzaW5nbGUgZGVmYXVsdCBjb3VsZCBiZSBhIHN0cmluZywgcmVhY3QgY2hpbGQsIG9yIHJlbmRlciBmdW5jdGlvblxuXG5cbmZ1bmN0aW9uIHVzZUV1aUkxOG4oKSB7XG4gIHZhciBpMThuQ29uZmlnID0gdXNlQ29udGV4dChJMThuQ29udGV4dCk7XG4gIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9wc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgX3Rva2VuID0gcHJvcHNbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWUgPSBwcm9wc1sxXSxcbiAgICAgICAgX3ZhbHVlcyA9IHByb3BzWzJdO1xuICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogX3Rva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWUsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBfdmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBfdG9rZW5zID0gX3JlZjJbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWVzID0gX3JlZjJbMV07XG5cbiAgICByZXR1cm4gX3Rva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZXNbaWR4XSxcbiAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJMThuQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBFdWlJMThuUHJvdmlkZXIgPSBJMThuQ29udGV4dC5Qcm92aWRlcixcbiAgICBFdWlJMThuQ29uc3VtZXIgPSBJMThuQ29udGV4dC5Db25zdW1lcjtcblxudmFyIEV1aUNvbnRleHQgPSBmdW5jdGlvbiBFdWlDb250ZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaTE4biA9IF9yZWYuaTE4bixcbiAgICAgIGkxOG4gPSBfcmVmJGkxOG4gPT09IHZvaWQgMCA/IHt9IDogX3JlZiRpMThuLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaTE4blxuICB9LCBjaGlsZHJlbik7XG59O1xuXG5FdWlDb250ZXh0LnByb3BUeXBlcyA9IHtcbiAgaTE4bjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtYXBwaW5nOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIG1hcHBpbmdGdW5jOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogU29tZSBicm93c2VycycgdHJhbnNsYXRpb24gZmVhdHVyZXMgZG9uJ3Qgd29yayB3aXRoIGEgcmVuZGVyZWQgYDxGcmFnbWVudD5gIGNvbXBvbmVudC5cbiAgICAgICAqIFRoZSBgcmVuZGVyYCBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHBhc3MgaW4gYW5vdGhlciBjb21wb25lbnQgaW5zdGVhZCwgZS5nLiBgPGRpdj5gXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdE51bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0RGF0ZVRpbWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHsgRXVpQ29udGV4dCwgRXVpSTE4bkNvbnN1bWVyLCBJMThuQ29udGV4dCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaGFzUHJvcE5hbWUoY2hpbGQpIHtcbiAgcmV0dXJuIGNoaWxkID8gX3R5cGVvZihjaGlsZCkgPT09ICdvYmplY3QnICYmIGNoaWxkLmhhc093blByb3BlcnR5KCdwcm9wTmFtZScpIDogZmFsc2U7XG59XG4vKipcbiAqIFJlcGxhY2VzIHBsYWNlaG9sZGVyIHZhbHVlcyBpbiBgaW5wdXRgIHdpdGggdGhlaXIgbWF0Y2hpbmcgdmFsdWUgaW4gYHZhbHVlc2BcbiAqIGUuZy4gaW5wdXQ6J0hlbGxvLCB7bmFtZX0nIHdpbGwgcmVwbGFjZSBge25hbWV9YCB3aXRoIGB2YWx1ZXNbbmFtZV1gXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7UmVuZGVyYWJsZVZhbHVlc30gdmFsdWVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpMThuTWFwcGluZ0Z1bmNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBSZWFjdC5SZWFjdENoaWxkW119XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4oaW5wdXQsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdO1xuICB2YXIgY2hpbGQ7XG5cbiAgZnVuY3Rpb24gYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcikge1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzdGFydGluZyBhIG5ldyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGFyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXhpc3Rpbmcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hpbGQgKyBjaGFyO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUoY2hpbGQpKSB7XG4gICAgICAvLyBhZGRpbmcgdG8gdGhlIHByb3BOYW1lIG9mIGEgdmFsdWVzIGxvb2t1cFxuICAgICAgY2hpbGQucHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZSArIGNoYXI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIC8vIGFuIGFycmF5IHdpdGggYW55IFJlYWN0RWxlbWVudHMgd2lsbCBiZSBrZXB0IGFzIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGV5IG5lZWQgdG8gYmUgYXNzaWduZWQgYSBrZXlcbiAgICAgIGNoaWxkcmVuLnB1c2goIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQodmFsdWUsIHtcbiAgICAgICAga2V5OiBjaGlsZHJlbi5sZW5ndGhcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKHZhbHVlKSkgey8vIHRoaXMgd29uJ3QgYmUgY2FsbGVkLCBwcm9wTmFtZSBjaGlsZHJlbiBhcmUgY29udmVydGVkIHRvIGEgUmVhY3RDaGlsZCBiZWZvcmUgY2FsbGluZyB0aGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gZ28gc3RyYWlnaHQgaW5cbiAgICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9IC8vIGlmIHdlIGRvbid0IGVuY291bnRlciBhIG5vbi1wcmltaXRpdmVcbiAgLy8gdGhlbiBgY2hpbGRyZW5gIGNhbiBiZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgYXQgdGhlIGVuZFxuXG5cbiAgdmFyIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFyID0gaW5wdXRbaV07XG5cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyBwZWVrIGF0IHRoZSBuZXh0IGNoYXJhY3RlciB0byBrbm93IGlmIHRoaXMgaXMgYW4gZXNjYXBlXG4gICAgICB2YXIgbmV4dENoYXIgPSBpbnB1dFtpICsgMV07XG4gICAgICB2YXIgY2hhclRvQWRkID0gY2hhcjsgLy8gaWYgdGhpcyBpc24ndCBhbiBlc2NhcGUgc2VxdWVuY2UgdGhlbiB3ZSB3aWxsIGFkZCB0aGUgYmFja3NsYXNoXG5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gJ3snIHx8IG5leHRDaGFyID09PSAnfScpIHtcbiAgICAgICAgLy8gZXNjYXBpbmcgYSBicmFjZVxuICAgICAgICBpICs9IDE7IC8vIGFkdmFuY2UgcGFzc2VkIHRoZSBicmFjZVxuXG4gICAgICAgIGNoYXJUb0FkZCA9IGlucHV0W2ldO1xuICAgICAgfVxuXG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyVG9BZGQpO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgY2hpbGQgPSB7XG4gICAgICAgIHByb3BOYW1lOiAnJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd9Jykge1xuICAgICAgdmFyIHByb3BOYW1lID0gY2hpbGQucHJvcE5hbWU7XG5cbiAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXkgXFxcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiIG5vdCBmb3VuZCBpbiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbHVlcywgbnVsbCwgMikpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGVuY291bnRlcmVkTm9uUHJpbWl0aXZlIHx8ICFpc1ByaW1pdGl2ZShwcm9wVmFsdWUpO1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHByb3BWYWx1ZSk7XG4gICAgICBjaGlsZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcik7XG4gICAgfVxuICB9IC8vIGluY2x1ZGUgYW55IHJlbWFpbmluZyBjaGlsZCB2YWx1ZVxuXG5cbiAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgcmV0dXJuIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID8gY2hpbGRyZW4gOiBjaGlsZHJlbi5qb2luKCcnKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmV4cG9ydCB2YXIgdXNlTG9hZGluZ0FyaWFMYWJlbCA9IGZ1bmN0aW9uIHVzZUxvYWRpbmdBcmlhTGFiZWwoKSB7XG4gIHJldHVybiB1c2VFdWlJMThuKCdldWlMb2FkaW5nU3RyaW5ncy5hcmlhTGFiZWwnLCAnTG9hZGluZycpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VMb2FkaW5nQXJpYUxhYmVsIH0gZnJvbSAnLi9fbG9hZGluZ19zdHJpbmdzJztcbmltcG9ydCB7IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzIH0gZnJvbSAnLi9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpTG9hZGluZ1NwaW5uZXIgPSBmdW5jdGlvbiBFdWlMb2FkaW5nU3Bpbm5lcihfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoZXVpVGhlbWUsIGNvbG9yKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTG9hZGluZ1NwaW5uZXIsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTG9hZGluZ1NwaW5uZXInLCBjbGFzc05hbWUpO1xuICB2YXIgZGVmYXVsdExhYmVsID0gdXNlTG9hZGluZ0FyaWFMYWJlbCgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0TGFiZWxcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUxvYWRpbmdTcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlciBhbmQgaGlnaGxpZ2h0LlxuICAgICAgICogRWFjaCBrZXkgYWNjZXB0cyBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqIFNlZSAjRXVpTG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJvcmRlcjogUHJvcFR5cGVzLmFueSxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX2xvYWRpbmdTcGlubmVyID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcXG4gIH1cXG5cIl0pKSk7XG5cbnZhciBzcGlubmVyU2l6ZXMgPSB7XG4gIHM6ICdtJyxcbiAgbTogJ2Jhc2UnLFxuICBsOiAnbCcsXG4gIHhsOiAneGwnLFxuICB4eGw6ICd4eGwnXG59O1xuXG52YXIgc3Bpbm5lckNvbG9yc0NTUyA9IGZ1bmN0aW9uIHNwaW5uZXJDb2xvcnNDU1MoYm9yZGVyLCBoaWdobGlnaHQpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGJvcmRlci1jb2xvcjogXCIuY29uY2F0KGhpZ2hsaWdodCwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMb2FkaW5nU3Bpbm5lcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpY2ssIFwiO1wiLCBzcGlubmVyQ29sb3JzQ1NTKChjb2xvciA9PT0gbnVsbCB8fCBjb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3IuYm9yZGVyKSB8fCBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgKGNvbG9yID09PSBudWxsIHx8IGNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb2xvci5oaWdobGlnaHQpIHx8IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5KSwgXCI7XCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgX2xvYWRpbmdTcGlubmVyLCBcIiAwLjZzIGluZmluaXRlIGxpbmVhcjt9O2xhYmVsOmV1aUxvYWRpbmdTcGlubmVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2JvcmRlci13aWR0aDpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgKiAxLjUpOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtib3JkZXItd2lkdGg6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiICogMS41KTs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0sIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgVVJMIGZyb20gJ3VybC1wYXJzZSc7XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIcmVmKGhyZWYpIHtcbiAgLy8gY2hlY2sgaHJlZiBhbmQgdHJlYXQgaXQgYXMgaW52YWxpZCBpZiBpdCB1c2VzIHRoZSBqYXZhc2NyaXB0OiBwcm90b2NvbFxuICB2YXIgcGFydHMgPSBuZXcgVVJMKGhyZWYpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuXG4gIHJldHVybiBwYXJ0cy5wcm90b2NvbCAhPT0gJ2phdmFzY3JpcHQ6Jztcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgaGFzUmVzaXplT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbmV4cG9ydCB2YXIgRXVpUmVzaXplT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBfaW5oZXJpdHMoRXVpUmVzaXplT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlSZXNpemVPYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVJlc2l6ZU9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpUmVzaXplT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGBlbnRyeS5jb250ZW50UmVjdGAgcHJvdmlkZXMgaW5jb21wbGV0ZSBgaGVpZ2h0YCBhbmQgYHdpZHRoYCBkYXRhLlxuICAgICAgLy8gVXNlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgYW5kIGJvcmRlci5cbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgIGlmICghX3RoaXMuY2hpbGROb2RlKSByZXR1cm47XG5cbiAgICAgIHZhciBfdGhpcyRjaGlsZE5vZGUkZ2V0Qm8gPSBfdGhpcy5jaGlsZE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkY2hpbGROb2RlJGdldEJvLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJGNoaWxkTm9kZSRnZXRCby53aWR0aDsgLy8gQ2hlY2sgZm9yIGFjdHVhbCByZXNpemUgZXZlbnRcblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuaGVpZ2h0ID09PSBoZWlnaHQgJiYgX3RoaXMuc3RhdGUud2lkdGggPT09IHdpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMucHJvcHMub25SZXNpemUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHN1cGVyY2xhc3MgY2hlY2tzIHRoYXQgY2hpbGROb2RlIGlzIG5vdCBudWxsIGJlZm9yZSBpbnZva2luZ1xuICAgICAgLy8gYmVnaW5PYnNlcnZlKClcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLm9uUmVzaXplKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBFdWlSZXNpemVPYnNlcnZlcjtcbn0oRXVpT2JzZXJ2ZXIpO1xuXG52YXIgbWFrZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gbWFrZVJlc2l6ZU9ic2VydmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIHZhciBvYnNlcnZlcjtcblxuICBpZiAoaGFzUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gIH1cblxuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuXG5leHBvcnQgdmFyIHVzZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBkaW1lbnNpb24pIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNpemUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgX3NldFNpemUgPSBfdXNlU3RhdGUyWzFdOyAvLyBfY3VycmVudERpbWVuc2lvbnMgYW5kIF9zZXRTaXplIGFyZSB1c2VkIHRvIG9ubHkgc3RvcmUgdGhlXG4gIC8vIG5ldyBzdGF0ZSAoYW5kIHRyaWdnZXIgYSByZS1yZW5kZXIpIHdoZW4gdGhlIG5ldyBkaW1lbnNpb25zIGFjdHVhbGx5IGRpZmZlclxuXG5cbiAgdmFyIF9jdXJyZW50RGltZW5zaW9ucyA9IHVzZVJlZihzaXplKTtcblxuICB2YXIgc2V0U2l6ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChkaW1lbnNpb25zKSB7XG4gICAgdmFyIGRvZXNXaWR0aE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ2hlaWdodCc7XG4gICAgdmFyIGRvZXNIZWlnaHRNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICd3aWR0aCc7XG5cbiAgICBpZiAoZG9lc1dpZHRoTWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LndpZHRoICE9PSBkaW1lbnNpb25zLndpZHRoIHx8IGRvZXNIZWlnaHRNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQuaGVpZ2h0ICE9PSBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQgPSBkaW1lbnNpb25zO1xuXG4gICAgICBfc2V0U2l6ZShkaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIFtkaW1lbnNpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFJlc2l6ZU9ic2VydmVyJ3MgZmlyc3QgY2FsbCB0byB0aGUgb2JzZXJ2YXRpb24gY2FsbGJhY2sgaXMgc2NoZWR1bGVkIGluIHRoZSBmdXR1cmVcbiAgICAgIC8vIHNvIGZpbmQgdGhlIGNvbnRhaW5lcidzIGluaXRpYWwgZGltZW5zaW9ucyBub3dcbiAgICAgIHZhciBib3VuZGluZ1JlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYGVudHJ5LmNvbnRlbnRSZWN0YCBwcm92aWRlcyBpbmNvbXBsZXRlIGBoZWlnaHRgIGFuZCBgd2lkdGhgIGRhdGEuXG4gICAgICAgIC8vIFVzZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGFuZCBib3JkZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgICAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGhlaWdodCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5oZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aDtcblxuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlciAmJiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBzZXRTaXplXSk7XG4gIHJldHVybiBzaXplO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU9ic2VydmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT2JzZXJ2ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJuYW1lXCIsICdFdWlPYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNoaWxkTm9kZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvYnNlcnZlclwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVDaGlsZE5vZGVcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSA9PT0gcmVmKSByZXR1cm47IC8vIG5vZGUgaGFzbid0IGNoYW5nZWRcbiAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcgb2JzZXJ2ZXIgZGlzY29ubmVjdCBpdFxuXG4gICAgICBpZiAoX3RoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jaGlsZE5vZGUgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlPYnNlcnZlciBoYXMgbm8gZGVmYXVsdCBvYnNlcnZhdGlvbiBtZXRob2QnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPYnNlcnZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZE5vZGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQodGhpcy5uYW1lLCBcIiBkaWQgbm90IHJlY2VpdmUgYSByZWZcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRoaXMudXBkYXRlQ2hpbGROb2RlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT2JzZXJ2ZXI7XG59KENvbXBvbmVudCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY29sb3JcIiwgXCJncm93XCIsIFwidGV4dEFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRTdHlsZXMgfSBmcm9tICcuL3RleHQuc3R5bGVzJztcbmltcG9ydCB7IEV1aVRleHRDb2xvciB9IGZyb20gJy4vdGV4dF9jb2xvcic7XG5pbXBvcnQgeyBFdWlUZXh0QWxpZ24gfSBmcm9tICcuL3RleHRfYWxpZ24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ3JlbGF0aXZlJ107XG5leHBvcnQgdmFyIEV1aVRleHQgPSBmdW5jdGlvbiBFdWlUZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICB0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUZXh0U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dCwgIWdyb3cgPyBzdHlsZXMuY29uc3RyYWluZWRXaWR0aCA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0JywgY2xhc3NOYW1lKTtcblxuICB2YXIgdGV4dCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuXG4gIGlmIChjb2xvcikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRDb2xvciwge1xuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICBpZiAodGV4dEFsaWduKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dEFsaWduLCB7XG4gICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuRXVpVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGV4dCBzaXplLiBDaG9vc2UgYHJlbGF0aXZlYCB0byBjb250cm9sIHRoZSBgZm9udC1zaXplYCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSBwYXJlbnQgY29udGFpbmVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfY29sb3JDU1MgPSBmdW5jdGlvbiBfY29sb3JDU1MoY29sb3IpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoY29sb3IsIFwiO1xcblxcbiAgICAmOmhvdmVyLFxcbiAgICAmOmZvY3VzLFxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgJjp0YXJnZXQge1xcbiAgICAgIGNvbG9yOiBkYXJrZW4oXCIpLmNvbmNhdChjb2xvciwgXCIsIDEwJSk7XFxuICAgIH1cXG4gIFwiKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua0hvdmVyQ1NTID0gZnVuY3Rpb24gZXVpTGlua0hvdmVyQ1NTKCkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICBcIjtcbn07XG5leHBvcnQgdmFyIGV1aUxpbmtGb2N1c0NTUyA9IGZ1bmN0aW9uIGV1aUxpbmtGb2N1c0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiICFpbXBvcnRhbnQ7XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlMaW5rQ1NTID0gZnVuY3Rpb24gZXVpTGlua0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBcIikuY29uY2F0KGV1aUxpbmtIb3ZlckNTUygpLCBcIlxcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChldWlMaW5rRm9jdXNDU1MoZXVpVGhlbWUpLCBcIlxcbiAgICB9XFxuICBcIik7XG59O1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUxpbmtTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTGluazogLyojX19QVVJFX18qL2NzcyhldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCIgdXNlci1zZWxlY3Q6dGV4dDsmW3RhcmdldD0nX2JsYW5rJ117cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpldWlMaW5rO1wiKSxcbiAgICBkaXNhYmxlZDogX3JlZixcbiAgICAvLyBDb2xvciBzdHlsZXNcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQpLCBcIjtsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQpLCBcIjtsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQpLCBcIjtsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KSwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0KSwgXCI7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQpLCBcIjtsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmdob3N0KSwgXCI7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy50ZXh0KSwgXCI7bGFiZWw6dGV4dDtcIiksXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMHB4JyksIFwiOztsYWJlbDpldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0O1wiKSxcbiAgICBldWlMaW5rX19leHRlcm5hbEljb246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUxpbmtfX2V4dGVybmFsSWNvbjtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0QnJlYWtXb3JkLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGl0bGUgPSBmdW5jdGlvbiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXAgPSB7XG4gICAgeHh4czogJ3hzJyxcbiAgICB4eHM6ICdzJyxcbiAgICB4czogJ20nLFxuICAgIHM6ICdsJyxcbiAgICBtOiAneGwnLFxuICAgIGw6ICd4eGwnXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcFtzY2FsZV0sIG9wdGlvbnMpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZVxuICB9KTtcbn07IC8vIEhvb2sgdmVyc2lvblxuXG5leHBvcnQgdmFyIHVzZUV1aVRpdGxlID0gZnVuY3Rpb24gdXNlRXVpVGl0bGUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVRpdGxlKGV1aVRoZW1lLCBzY2FsZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVRpdGxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIiAmKyZ7bWFyZ2luLXRvcDpcIiwgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubCwgXCI7fTtsYWJlbDpldWlUaXRsZTtcIiksXG4gICAgdXBwZXJjYXNlOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiOztsYWJlbDp4eHhzO1wiKSxcbiAgICB4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDp4eHM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjs7bGFiZWw6bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSwgZXVpQmFja2dyb3VuZENvbG9yIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpTGlua0NTUyB9IGZyb20gJy4uL2xpbmsvbGluay5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuLyoqXG4gKiBUT0RPOiBNYWtlIHRoaXMgYSBnbG9iYWwgdmFsdWUgc28gaXQgY2FuIGJlIHNldCBieSB0aGVtZT9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoID0gJ21heCg2NGNoLCA3NSUpJztcbi8qKlxuICogTWl4aW5zXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0ID0gZnVuY3Rpb24gZXVpVGV4dChldWlUaGVtZSkge1xuICB2YXIgaW5oZXJpdENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogaW5oZXJpdENvbG9yID8gJ2luaGVyaXQnIDogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHQucmVndWxhclxuICB9O1xufTsgLy8gSW50ZXJuYWwgdXRpbGl0eSBmb3IgRXVpVGV4dCBzY2FsZXMvc2l6ZXNcblxudmFyIGV1aVNjYWxlVGV4dCA9IGZ1bmN0aW9uIGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplLFxuICAgICAgbGluZUhlaWdodCA9IF9ldWlGb250U2l6ZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIG1lYXN1cmVtZW50ID0gb3B0aW9ucy5tZWFzdXJlbWVudCxcbiAgICAgIF9jdXN0b21TY2FsZSA9IG9wdGlvbnMuY3VzdG9tU2NhbGU7XG4gIHZhciBsaW5lSGVpZ2h0U2l6ZSA9IG1lYXN1cmVtZW50ID09PSAnZW0nID8gXCJcIi5jb25jYXQobGluZUhlaWdodCwgXCJlbVwiKSA6IGxpbmVIZWlnaHQ7XG4gIHZhciBoZWFkaW5ncyA9IHtcbiAgICBoMTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcsIG9wdGlvbnMpLFxuICAgIGgyOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgaDM6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKSxcbiAgICBoNDogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKSxcbiAgICBoNTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJywgb3B0aW9ucyksXG4gICAgaDY6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnLCBvcHRpb25zKVxuICB9OyAvLyBHZW5lcmF0ZSBtYXJnaW5zIGZvciBoZWFkaW5ncyBiYXNlZCBvbiBjdXN0b21TY2FsZSAobm90IG9uIGhlYWRpbmcgbGV2ZWwpXG5cbiAgdmFyIGN1c3RvbVNjYWxlID0gX2N1c3RvbVNjYWxlID09PSAneHh4cycgPyAneHhzJyA6IF9jdXN0b21TY2FsZSB8fCAnbSc7XG4gIHZhciBoZWFkaW5nTWFyZ2luVG9wID0gXCJcIi5jb25jYXQocGFyc2VGbG9hdChldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXSkgKiAyLCBcInB4XCIpO1xuICB2YXIgaGVhZGluZ01hcmdpbkJvdHRvbSA9IGV1aVRoZW1lLnNpemVbY3VzdG9tU2NhbGVdO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1zaXplOiBcIi5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgaDEge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEubGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG4gICAgaDE6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgIH1cXG5cXG4gICAgaDIge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoMyB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIHVsLFxcbiAgICBvbCxcXG4gICAgZGwsXFxuICAgIGJsb2NrcXVvdGUsXFxuICAgIGltZyxcXG4gICAgcHJlIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgdWwsXFxuICAgIG9sIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuICBcXG4gICAgYmxvY2txdW90ZSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBwYWRkaW5nOiBcIikuY29uY2F0KGxpbmVIZWlnaHRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBkZCArIGR0IHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBmb250U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgZHQsXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGRkIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGR0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgICAgY29sb3I6IFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIHNtYWxsIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkge1xcbiAgICAgIHBhZGRpbmc6IFwiKS5jb25jYXQobGluZUhlaWdodFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIGNvZGU6bm90KC5ldWlDb2RlKTpub3QoLmV1aUNvZGVCbG9ja19fY29kZSkgIHtcXG4gICAgICBmb250LXNpemU6IC45ZW07IC8vIDkwJSBvZiBwYXJlbnQgZm9udCBzaXplXFxuICAgIH1cXG4gICAgXCIpLmNvbmNhdCggLy8gd2hlbiB0ZXh0U2l6ZSBpcyAnbScsIHRoZSAna2JkJyBlbGVtZW50IGdldHMgYSBsaW5lIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoZSBib3JkZXItYm90dG9tXG4gIF9jdXN0b21TY2FsZSA9PT0gJ20nID8gXCJcXG4gICAga2JkIHtcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAvLyBlbnN1cmVzIHdoZW4gb25seSBvbmUgY2hhcmFjdGVyIHRoZSBzaGFwZSBsb29rcyBsaWtlIGEgc3F1YXJlXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBldWlUaGVtZS5zaXplLmwpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiXFxuICAgIH1cXG4gICAgXFxuICAgIGtiZDo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6ICcnO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0KSksIFwiXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbGVmdCcsIDApLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICB9XCIpIDogJycsIFwiXFxuICBcIik7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG5cbmV4cG9ydCB2YXIgZXVpVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHQoZXVpVGhlbWUsIHRydWUpLCBcIjtjbGVhcjpib3RoO2E6bm90KFtjbGFzc10pe1wiLCBldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCI7fWltZ3tkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjt9dWx7bGlzdC1zdHlsZTpkaXNjO31vbHtsaXN0LXN0eWxlOmRlY2ltYWw7fWJsb2NrcXVvdGU6bm90KC5ldWlNYXJrZG93bkZvcm1hdF9fYmxvY2txdW90ZSl7cG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIiBmb250LWZhbWlseTpcIiwgZXVpVGhlbWUuZm9udC5mYW1pbHlTZXJpZiwgXCI7Zm9udC1zdHlsZTppdGFsaWM7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3A6bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsICcwJyksIFwiO30mOmJlZm9yZSwmOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljayksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMjUlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsICcyNSUnKSwgXCIgYmFja2dyb3VuZDpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7fSY6YmVmb3Jle1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnMCcpLCBcIjt9JjphZnRlcntcIiwgbG9naWNhbENTUygnYm90dG9tJywgJzAnKSwgXCI7fX1oMXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt9aDJ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fWgze1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO31oNCxkdHtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7fWg1e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7fWg2e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt9aDEsaDIsaDMsaDQsaDUsaDYsZHR7Y29sb3I6aW5oZXJpdDt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpe3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQ6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWJkdWVkJyksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSxwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkgY29kZXtkaXNwbGF5OmJsb2NrO30+Omxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAnMCAhaW1wb3J0YW50JyksIFwiO31rYmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgbGluZS1oZWlnaHQ6MTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO2JvcmRlci1yYWRpdXM6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCIgLyAyKTt9O2xhYmVsOmV1aVRleHQ7XCIpLFxuICAgIGNvbnN0cmFpbmVkV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGgpLCBcIjs7bGFiZWw6Y29uc3RyYWluZWRXaWR0aDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAncmVtJyxcbiAgICAgIGN1c3RvbVNjYWxlOiAnbSdcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICdzJ1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICd4cydcbiAgICB9KSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICByZWxhdGl2ZTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ2VtJ1xuICAgIH0pLCBcIjs7bGFiZWw6cmVsYXRpdmU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsb25lRWxlbWVudFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRDb2xvclN0eWxlcyB9IGZyb20gJy4vdGV4dF9jb2xvci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBFdWlUZXh0Q29sb3IgPSBmdW5jdGlvbiBFdWlUZXh0Q29sb3IoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdzcGFuJyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc05hbWVkQ29sb3IgPSBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVGV4dENvbG9yU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dENvbG9yLCBpc05hbWVkQ29sb3IgPyBzdHlsZXNbY29sb3JdIDogc3R5bGVzLmN1c3RvbUNvbG9yXTsgLy8gV2UncmUgY2hlY2tpbmcgaWYgaXMgYSBjdXN0b20gY29sb3IuXG4gIC8vIElmIGl0IGlzIGEgY3VzdG9tIGNvbG9yIHdlIHNldCB0aGUgYGNvbG9yYCBvZiB0aGUgYC5ldWlUZXh0Q29sb3JgIGRpdiB0byB0aGF0IGN1c3RvbSBjb2xvci5cbiAgLy8gVGhpcyB3YXkgdGhlIGNoaWxkcmVuIHRleHQgZWxlbWVudHMgY2FuIGBpbmhlcml0YCB0aGF0IGNvbG9yIGFuZCBib3JkZXIgYW5kIGJhY2tncm91bmRzIGNhbiBnZXQgdGhhdCBgY3VycmVudENvbG9yYC5cblxuICB2YXIgZXVpVGV4dFN0eWxlID0gIWlzTmFtZWRDb2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbG9yOiBjb2xvclxuICB9LCBzdHlsZSkgOiBfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGV1aVRleHRTdHlsZVxuICB9LCByZXN0KTtcblxuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgZXVpVGV4dFN0eWxlKTtcblxuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIHN0eWxlOiBjaGlsZHJlblN0eWxlXG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dENvbG9yLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgcm9vdCBlbGVtZW50XG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBzcGFuYC9gZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpVGV4dENvbG9yU3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dENvbG9yU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHRDb2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0Q29sb3I7XCIpLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIiFpbXBvcnRhbnQ7O2xhYmVsOmdob3N0O1wiKSxcbiAgICBpbmhlcml0OiBfcmVmLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSAvLyBIYW5kbGVkIGJ5IGBzdHlsZWAgdGFnIC0gdGhpcyBpcyBqdXN0IGhlcmUgZm9yIGEgY2xhc3NOYW1lIGhvb2tcblxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dEFsaWduXCIsIFwiY2xvbmVFbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUZXh0QWxpZ25TdHlsZXMgfSBmcm9tICcuL3RleHRfYWxpZ24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG5leHBvcnQgdmFyIEV1aVRleHRBbGlnbiA9IGZ1bmN0aW9uIEV1aVRleHRBbGlnbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzdHlsZXMgPSBldWlUZXh0QWxpZ25TdHlsZXMoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dEFsaWduLCBzdHlsZXNbdGV4dEFsaWduXV07XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCk7XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRBbGlnbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlciBgZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUZXh0QWxpZ25TdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0QWxpZ25TdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dEFsaWduOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRBbGlnbjtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7O2xhYmVsOmNlbnRlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZsdXNoXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaXNMb2FkaW5nXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc1NlbGVjdGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgYXMgRXVpQnV0dG9uQ29udGVudCB9IGZyb20gJy4uL19idXR0b25fY29udGVudF9kZXByZWNhdGVkJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcHJpbWFyeTogJ2V1aUJ1dHRvbkVtcHR5LS1wcmltYXJ5JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uRW1wdHktLWRhbmdlcicsXG4gIHRleHQ6ICdldWlCdXR0b25FbXB0eS0tdGV4dCcsXG4gIGdob3N0OiAnZXVpQnV0dG9uRW1wdHktLWdob3N0JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkVtcHR5LS1zdWNjZXNzJyxcbiAgd2FybmluZzogJ2V1aUJ1dHRvbkVtcHR5LS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25FbXB0eS0teFNtYWxsJyxcbiAgczogJ2V1aUJ1dHRvbkVtcHR5LS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgZmx1c2hUeXBlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hMZWZ0JyxcbiAgcmlnaHQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hSaWdodCcsXG4gIGJvdGg6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hCb3RoJ1xufTtcbmV4cG9ydCB2YXIgRkxVU0hfVFlQRVMgPSBrZXlzT2YoZmx1c2hUeXBlVG9DbGFzc05hbWVNYXApO1xuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25FbXB0eSA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgZmx1c2ggPSBfcmVmLmZsdXNoLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICBjb250ZW50UHJvcHMgPSBfcmVmLmNvbnRlbnRQcm9wcyxcbiAgICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkOyAvLyBJZiBpbiB0aGUgbG9hZGluZyBzdGF0ZSwgZm9yY2UgZGlzYWJsZWQgdG8gdHJ1ZVxuXG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHknLCBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSwgc2l6ZSA/IHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSA6IG51bGwsIGZsdXNoID8gZmx1c2hUeXBlVG9DbGFzc05hbWVNYXBbZmx1c2hdIDogbnVsbCwge1xuICAgICdldWlCdXR0b25FbXB0eS1pc0Rpc2FibGVkJzogYnV0dG9uSXNEaXNhYmxlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fY29udGVudCcsIGNvbnRlbnRQcm9wcyAmJiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX3RleHQnLCB0ZXh0UHJvcHMgJiYgdGV4dFByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIGlubmVyTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uQ29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGljb25UeXBlOiBpY29uVHlwZSxcbiAgICBpY29uU2lkZTogaWNvblNpZGUsXG4gICAgaWNvblNpemU6IHNpemUgPT09ICd4cycgPyAncycgOiBpY29uU2l6ZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pOyAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBkaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkXG4gIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xufTtcbkV1aUJ1dHRvbkVtcHR5LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidHlwZVwiLCBcImRpc3BsYXlcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCIsIFwiYnV0dG9uUmVmXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzTG9hZGluZ1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGJhc2U6IG51bGwsXG4gIGVtcHR5OiAnZXVpQnV0dG9uSWNvbi0tZW1wdHknLFxuICBmaWxsOiAnZXVpQnV0dG9uSWNvbi0tZmlsbCdcbn07XG5leHBvcnQgdmFyIERJU1BMQVlTID0ga2V5c09mKGRpc3BsYXlUb0NsYXNzTmFtZU1hcCk7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgYWNjZW50OiAnZXVpQnV0dG9uSWNvbi0tYWNjZW50JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uSWNvbi0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICdldWlCdXR0b25JY29uLS1naG9zdCcsXG4gIHByaW1hcnk6ICdldWlCdXR0b25JY29uLS1wcmltYXJ5JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkljb24tLXN1Y2Nlc3MnLFxuICB0ZXh0OiAnZXVpQnV0dG9uSWNvbi0tdGV4dCcsXG4gIHdhcm5pbmc6ICdldWlCdXR0b25JY29uLS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25JY29uLS14U21hbGwnLFxuICBzOiAnZXVpQnV0dG9uSWNvbi0tc21hbGwnLFxuICBtOiAnZXVpQnV0dG9uSWNvbi0tbWVkaXVtJ1xufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uSWNvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZW1wdHknIDogX3JlZiRkaXNwbGF5LFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJHNpemUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkIHx8IGlzTG9hZGluZztcbiAgdmFyIGFyaWFIaWRkZW4gPSByZXN0WydhcmlhLWhpZGRlbiddO1xuICB2YXIgaXNBcmlhSGlkZGVuID0gYXJpYUhpZGRlbiA9PT0gJ3RydWUnIHx8IGFyaWFIaWRkZW4gPT09IHRydWU7XG5cbiAgaWYgKCFyZXN0WydhcmlhLWxhYmVsJ10gJiYgIXJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmICFpc0FyaWFIaWRkZW4pIHtcbiAgICBjb25zb2xlLndhcm4oXCJFdWlCdXR0b25JY29uIHJlcXVpcmVzIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IHRvIGJlIHNwZWNpZmllZCBiZWNhdXNlIGljb24tb25seVxcbiAgICAgIGJ1dHRvbnMgYXJlIHNjcmVlbi1yZWFkZXItaW5hY2Nlc3NpYmxlIHdpdGhvdXQgdGhlbS5cIik7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkljb24nLCB7XG4gICAgJ2V1aUJ1dHRvbkljb24taXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSwgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0sIGRpc3BsYXkgJiYgZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldLCBzaXplICYmIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTsgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpY29uVHlwZSAmJiAhaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkljb25fX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9IC8vIGBvcmlnaW5hbGAgc2l6ZSBkb2Vzbid0IGV4aXN0IGluIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gd2hlbiB0aGUgYGljb25TaXplYCBpcyBgb3JpZ2luYWxgIHdlIGRvbid0IHBhc3MgYW55IHNpemUgdG8gdGhlIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gc28gaXQgZ2V0cyB0aGUgZGVmYXVsdCBzaXplXG5cblxuICB2YXIgbG9hZGluZ1NpemUgPSBpY29uU2l6ZSA9PT0gJ29yaWdpbmFsJyA/IHVuZGVmaW5lZCA6IGljb25TaXplO1xuXG4gIGlmIChpY29uVHlwZSAmJiBpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgc2l6ZTogbG9hZGluZ1NpemVcbiAgICB9KTtcbiAgfSAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG4gIH1cblxuICB2YXIgYnV0dG9uVHlwZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmXG4gIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbn07XG5FdWlCdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mKFtcInN1Ym1pdFwiLCBcInJlc2V0XCIsIFwiYnV0dG9uXCJdKV0pLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgaWNvbiBvbmx5LlxuICAgICAqIFRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImJhc2VcIiwgXCJlbXB0eVwiLCBcImZpbGxcIl0pLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gdXNlSW5uZXJUZXh0KGlubmVyVGV4dEZhbGxiYWNrKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgcmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFJlZiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShpbm5lclRleHRGYWxsYmFjayksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpbm5lclRleHQgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0SW5uZXJUZXh0ID0gX3VzZVN0YXRlNFsxXTtcblxuICB2YXIgdXBkYXRlSW5uZXJUZXh0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICBzZXRJbm5lclRleHQoIC8vIENoZWNrIGZvciBgaW5uZXJUZXh0YCBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBhIHNpbXBsZSBPUiBjaGVja1xuICAgIC8vIGJlY2F1c2UgaW4gcmVhbCBjYXNlcyB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgIGNvdWxkIGNvcnJlY3RseSBiZSBgbnVsbGBcbiAgICAvLyB3aGlsZSB0aGUgcmVzdWx0IG9mIGB0ZXh0Q29udGVudGAgY291bGQgY29ycmVjdGx5IGJlIG5vbi1gbnVsbGAgZHVlIHRvXG4gICAgLy8gZGlmZmVyaW5nIHJlbGlhbmNlIG9uIGJyb3dzZXIgbGF5b3V0IGNhbGN1bGF0aW9ucy5cbiAgICAvLyBXZSBwcmVmZXIgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCwgaWYgYXZhaWxhYmxlLlxuICAgICdpbm5lclRleHQnIGluIG5vZGUgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUudGV4dENvbnRlbnQgfHwgaW5uZXJUZXh0RmFsbGJhY2spO1xuICB9LCBbaW5uZXJUZXh0RmFsbGJhY2tdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zTGlzdCkge1xuICAgICAgaWYgKG11dGF0aW9uc0xpc3QubGVuZ3RoKSB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICB9KTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYsIHtcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtyZWYsIHVwZGF0ZUlubmVyVGV4dF0pO1xuICByZXR1cm4gW3NldFJlZiwgaW5uZXJUZXh0XTtcbn1cbmV4cG9ydCB2YXIgRXVpSW5uZXJUZXh0ID0gZnVuY3Rpb24gRXVpSW5uZXJUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dChmYWxsYmFjayksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgcmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBpbm5lclRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcblxuICByZXR1cm4gY2hpbGRyZW4ocmVmLCBpbm5lclRleHQpO1xufTtcbkV1aUlubmVyVGV4dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBmYWxsYmFjazogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIERldGVjdCBFbGVtZW50IFJlc2l6ZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiBTZWJhc3RpYW4gRGVjaW1hXG4gKlxuICogRm9ya2VkIGZyb20gdmVyc2lvbiAwLjUuMzsgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxuICogMSkgR3VhcmQgYWdhaW5zdCB1bnNhZmUgJ3dpbmRvdycgYW5kICdkb2N1bWVudCcgcmVmZXJlbmNlcyAodG8gc3VwcG9ydCBTU1IpLlxuICogMikgRGVmZXIgaW5pdGlhbGl6YXRpb24gY29kZSB2aWEgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gd3JhcHBlciAodG8gc3VwcG9ydCBTU1IpLlxuICogMykgQXZvaWQgdW5uZWNlc3NhcnkgcmVmbG93cyBieSBub3QgbWVhc3VyaW5nIHNpemUgZm9yIHNjcm9sbCBldmVudHMgYnViYmxpbmcgZnJvbSBjaGlsZHJlbi5cbiAqIDQpIEFkZCBub25jZSBmb3Igc3R5bGUgZWxlbWVudC5cbiAqIDUpIFVzZSAnZXhwb3J0JyBzdGF0ZW1lbnQgb3ZlciAnbW9kdWxlLmV4cG9ydHMnIGFzc2lnbm1lbnRcbiAqKi9cblxuLy8gQ2hlY2sgYGRvY3VtZW50YCBhbmQgYHdpbmRvd2AgaW4gY2FzZSBvZiBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbmxldCB3aW5kb3dPYmplY3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3dPYmplY3QgPSB3aW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIHdpbmRvd09iamVjdCA9IHNlbGY7XG59IGVsc2Uge1xuICB3aW5kb3dPYmplY3QgPSBnbG9iYWw7XG59XG5sZXQgY2FuY2VsRnJhbWUgPSBudWxsO1xubGV0IHJlcXVlc3RGcmFtZSA9IG51bGw7XG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMjA7XG5jb25zdCBjbGVhclRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5jbGVhclRpbWVvdXQ7XG5jb25zdCBzZXRUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3Quc2V0VGltZW91dDtcbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5pZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID09IG51bGwpIHtcbiAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lLFxuICAvLyBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQgYmFzZWQgYXBwcm9hY2guXG4gIGNhbmNlbEZyYW1lID0gY2xlYXJUaW1lb3V0Rm47XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVZpYVNldFRpbWVvdXQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2V0VGltZW91dEZuKGNhbGxiYWNrLCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIENvdW50ZXIgaW50dWl0aXZlbHksIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lcyBjYW4gYmUgdHJpY2tpZXIuXG4gIC8vIENocm9tZSdzIFwiVGhyb3R0bGUgbm9uLXZpc2libGUgY3Jvc3Mtb3JpZ2luIGlmcmFtZXNcIiBmbGFnIGNhbiBwcmV2ZW50IHJBRnMgZnJvbSBiZWluZyBjYWxsZWQuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCgpIGltcGxlbWVudGF0aW9uLlxuICBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEZyYW1lKFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICB9O1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoU2V0VGltZW91dEZhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7XG4gICAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0Rm4oZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSwgVElNRU9VVF9EVVJBVElPTik7XG4gICAgcmV0dXJuIFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSkge1xuICBsZXQgYW5pbWF0aW9uS2V5ZnJhbWVzO1xuICBsZXQgYW5pbWF0aW9uTmFtZTtcbiAgbGV0IGFuaW1hdGlvblN0YXJ0RXZlbnQ7XG4gIGxldCBhbmltYXRpb25TdHlsZTtcbiAgbGV0IGNoZWNrVHJpZ2dlcnM7XG4gIGxldCByZXNldFRyaWdnZXJzO1xuICBsZXQgc2Nyb2xsTGlzdGVuZXI7XG4gIGNvbnN0IGF0dGFjaEV2ZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50O1xuICBpZiAoIWF0dGFjaEV2ZW50KSB7XG4gICAgcmVzZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLFxuICAgICAgICBleHBhbmQgPSB0cmlnZ2Vycy5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgY29udHJhY3QgPSB0cmlnZ2Vycy5sYXN0RWxlbWVudENoaWxkLFxuICAgICAgICBleHBhbmRDaGlsZCA9IGV4cGFuZC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbExlZnQgPSBjb250cmFjdC5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbFRvcCA9IGNvbnRyYWN0LnNjcm9sbEhlaWdodDtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gICAgICBleHBhbmQuc2Nyb2xsVG9wID0gZXhwYW5kLnNjcm9sbEhlaWdodDtcbiAgICB9O1xuICAgIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0O1xuICAgIH07XG4gICAgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gRG9uJ3QgbWVhc3VyZSAod2hpY2ggZm9yY2VzKSByZWZsb3cgZm9yIHNjcm9sbHMgdGhhdCBoYXBwZW4gaW5zaWRlIG9mIGNoaWxkcmVuIVxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAmJiB0eXBlb2YgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImNvbnRyYWN0LXRyaWdnZXJcIikgPCAwICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIikgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgcmVzZXRUcmlnZ2Vycyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLl9fcmVzaXplUkFGX18pIHtcbiAgICAgICAgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19yZXNpemVSQUZfXyA9IHJlcXVlc3RGcmFtZShmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpIHtcbiAgICAgICAgaWYgKGNoZWNrVHJpZ2dlcnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hSZXNpemVMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgZm4uY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIERldGVjdCBDU1MgQW5pbWF0aW9ucyBzdXBwb3J0IHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgbGV0IGFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIGxldCBrZXlmcmFtZXByZWZpeCA9IFwiXCI7XG4gICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IFwiYW5pbWF0aW9uc3RhcnRcIjtcbiAgICBjb25zdCBkb21QcmVmaXhlcyA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBzdGFydEV2ZW50cyA9IFwid2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQgb0FuaW1hdGlvblN0YXJ0IE1TQW5pbWF0aW9uU3RhcnRcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHBmeCA9IFwiXCI7XG4gICAge1xuICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO1xuICAgICAgaWYgKGVsbS5zdHlsZS5hbmltYXRpb25OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZWxtLnN0eWxlW2RvbVByZWZpeGVzW2ldICsgXCJBbmltYXRpb25OYW1lXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBmeCA9IGRvbVByZWZpeGVzW2ldO1xuICAgICAgICAgICAga2V5ZnJhbWVwcmVmaXggPSBcIi1cIiArIHBmeC50b0xvd2VyQ2FzZSgpICsgXCItXCI7XG4gICAgICAgICAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gc3RhcnRFdmVudHNbaV07XG4gICAgICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFuaW1hdGlvbk5hbWUgPSBcInJlc2l6ZWFuaW1cIjtcbiAgICBhbmltYXRpb25LZXlmcmFtZXMgPSBcIkBcIiArIGtleWZyYW1lcHJlZml4ICsgXCJrZXlmcmFtZXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSBcIjtcbiAgICBhbmltYXRpb25TdHlsZSA9IGtleWZyYW1lcHJlZml4ICsgXCJhbmltYXRpb246IDFtcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIjsgXCI7XG4gIH1cbiAgY29uc3QgY3JlYXRlU3R5bGVzID0gZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICghZG9jLmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSkge1xuICAgICAgLy9vcGFjaXR5OjAgd29ya3MgYXJvdW5kIGEgY2hyb21lIGJ1ZyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2MzYwXG4gICAgICBjb25zdCBjc3MgPSAoYW5pbWF0aW9uS2V5ZnJhbWVzID8gYW5pbWF0aW9uS2V5ZnJhbWVzIDogXCJcIikgKyBcIi5yZXNpemUtdHJpZ2dlcnMgeyBcIiArIChhbmltYXRpb25TdHlsZSA/IGFuaW1hdGlvblN0eWxlIDogXCJcIikgKyBcInZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfSBcIiArICcucmVzaXplLXRyaWdnZXJzLCAucmVzaXplLXRyaWdnZXJzID4gZGl2LCAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyBjb250ZW50OiBcIiBcIjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAtMTsgfSAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH0gLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScsXG4gICAgICAgIGhlYWQgPSBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICBzdHlsZS5pZCA9IFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiO1xuICAgICAgc3R5bGUudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICAgIGlmIChub25jZSAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50U3R5bGUgPSB3aW5kb3dPYmplY3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiBlbGVtZW50U3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVN0eWxlcyhkb2MpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fID0ge307XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuICAgICAgICAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuY2xhc3NOYW1lID0gXCJyZXNpemUtdHJpZ2dlcnNcIjtcbiAgICAgICAgY29uc3QgZXhwYW5kVHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiZXhwYW5kLXRyaWdnZXJcIjtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0VHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250cmFjdFRyaWdnZXIuY2xhc3NOYW1lID0gXCJjb250cmFjdC10cmlnZ2VyXCI7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGV4cGFuZFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChjb250cmFjdFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgICBpZiAoYW5pbWF0aW9uU3RhcnRFdmVudCkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IGZ1bmN0aW9uIGFuaW1hdGlvbkxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9ICFlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFByZWFjdCBjb21wYXQ7IHNlZSBkZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9pc3N1ZXMvMjI4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkUmVzaXplTGlzdGVuZXIsXG4gICAgcmVtb3ZlUmVzaXplTGlzdGVuZXJcbiAgfTtcbn1cblxuY2xhc3MgQXV0b1NpemVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkSGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZFdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDBcbiAgICB9O1xuICAgIHRoaXMuX2F1dG9TaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0LFxuICAgICAgICBkaXNhYmxlV2lkdGgsXG4gICAgICAgIG9uUmVzaXplXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgQXV0b1NpemVyIGNvbXBvbmVudCBiZWluZyByZW1vdmVkIGZyb20gdGhlIERPTSBpbW1lZGlhdGVseSBhZnRlciBiZWluZyBhZGRlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gcmVzdWx0IGluIGludmFsaWQgc3R5bGUgdmFsdWVzIHdoaWNoIGNhbiByZXN1bHQgaW4gTmFOIHZhbHVlcyBpZiB3ZSBkb24ndCBoYW5kbGUgdGhlbS5cbiAgICAgICAgLy8gU2VlIGlzc3VlICMxNTAgZm9yIG1vcmUgY29udGV4dC5cblxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3BhcmVudE5vZGUpIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3AgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX3BhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gcmVjdC53aWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgaWYgKCFkaXNhYmxlSGVpZ2h0ICYmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuc3RhdGUuc2NhbGVkSGVpZ2h0ICE9PSBzY2FsZWRIZWlnaHQpIHx8ICFkaXNhYmxlV2lkdGggJiYgKHRoaXMuc3RhdGUud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuc3RhdGUuc2NhbGVkV2lkdGggIT09IHNjYWxlZFdpZHRoKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICBzY2FsZWRXaWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZXNpemUoe1xuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICAgICAgICAgIHdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NldFJlZiA9IGF1dG9TaXplciA9PiB7XG4gICAgICB0aGlzLl9hdXRvU2l6ZXIgPSBhdXRvU2l6ZXI7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBub25jZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9hdXRvU2l6ZXIgPyB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSA6IG51bGw7XG4gICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIHBhcmVudE5vZGUgaW5zdGFuY2VvZiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIERlbGF5IGFjY2VzcyBvZiBwYXJlbnROb2RlIHVudGlsIG1vdW50LlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGVkZ2UtY2FzZXMgd2hlcmUgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCBiZWZvcmUgaXRzIHJlZiBoYXMgYmVlbiBzZXQsXG4gICAgICAvLyBBcyB3ZWxsIGFzIGxpYnJhcmllcyBsaWtlIHJlYWN0LWxpdGUgd2hpY2ggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBsaWZlY3ljbGUuXG4gICAgICB0aGlzLl9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aGVyZSBwYXJlbnROb2RlICh3aGljaCB3ZSB3aWxsIG9ic2VydmUpIHdhcyBkZWZpbmVkXG4gICAgICAvLyBVc2luZyBqdXN0IGdsb2JhbCBjYW4gcmVzdWx0IGludG8gb25SZXNpemUgZXZlbnRzIG5vdCBiZWluZyBlbWl0dGVkIGluIGNhc2VzIHdpdGggbXVsdGlwbGUgcmVhbG1zXG4gICAgICBjb25zdCBSZXNpemVPYnNlcnZlckluc3RhbmNlID0gcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LlJlc2l6ZU9ic2VydmVyO1xuICAgICAgaWYgKFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlckluc3RhbmNlKCgpID0+IHtcbiAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBsaW1pdCBleGNlZWRlZFwiIGVycm9yO1xuICAgICAgICAgIC8vIGNvdWxkIGJlIHRyaWdnZXJlZCBpZiB0aGUgc3RhdGUgdXBkYXRlIGNhdXNlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgaGFuZGxlciB0byBydW4gbG9uZy5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9pc3N1ZXMvNTVcbiAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX29uUmVzaXplLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZlciByZXF1aXJpbmcgcmVzaXplIGhhbmRsZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjNDFcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpO1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHBhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICBpZiAodGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0SGVpZ2h0LFxuICAgICAgZGVmYXVsdFdpZHRoLFxuICAgICAgZGlzYWJsZUhlaWdodCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVdpZHRoID0gZmFsc2UsXG4gICAgICBkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4gPSBmYWxzZSxcbiAgICAgIG5vbmNlLFxuICAgICAgb25SZXNpemUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgdGFnTmFtZSA9IFwiZGl2XCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICB3aWR0aFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gT3V0ZXIgZGl2IHNob3VsZCBub3QgZm9yY2Ugd2lkdGgvaGVpZ2h0IHNpbmNlIHRoYXQgbWF5IHByZXZlbnQgY29udGFpbmVycyBmcm9tIHNocmlua2luZy5cbiAgICAvLyBJbm5lciBjb21wb25lbnQgc2hvdWxkIG92ZXJmbG93IGFuZCB1c2UgY2FsY3VsYXRlZCB3aWR0aC9oZWlnaHQuXG4gICAgLy8gU2VlIGlzc3VlICM2OCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBvdXRlclN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZFBhcmFtcyA9IHt9O1xuXG4gICAgLy8gQXZvaWQgcmVuZGVyaW5nIGNoaWxkcmVuIGJlZm9yZSB0aGUgaW5pdGlhbCBtZWFzdXJlbWVudHMgaGF2ZSBiZWVuIGNvbGxlY3RlZC5cbiAgICAvLyBBdCBiZXN0IHRoaXMgd291bGQganVzdCBiZSB3YXN0aW5nIGN5Y2xlcy5cbiAgICBsZXQgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBpZiAoIWRpc2FibGVIZWlnaHQpIHtcbiAgICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgY2hpbGRQYXJhbXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkSGVpZ2h0ID0gc2NhbGVkSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoIWRpc2FibGVXaWR0aCkge1xuICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUud2lkdGggPSAwO1xuICAgICAgY2hpbGRQYXJhbXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZFdpZHRoID0gc2NhbGVkV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4pIHtcbiAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHtcbiAgICAgIHJlZjogdGhpcy5fc2V0UmVmLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4ub3V0ZXJTdHlsZSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH0sXG4gICAgICAuLi5yZXN0XG4gICAgfSwgIWJhaWxvdXRPbkNoaWxkcmVuICYmIGNoaWxkcmVuKGNoaWxkUGFyYW1zKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWlnaHRBbmRXaWR0aFByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGVpZ2h0T25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzV2lkdGhPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgPT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuXG5leHBvcnQgeyBBdXRvU2l6ZXIgYXMgZGVmYXVsdCwgaXNIZWlnaHRBbmRXaWR0aFByb3BzLCBpc0hlaWdodE9ubHlQcm9wcywgaXNXaWR0aE9ubHlQcm9wcyB9O1xuIiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IEF1dG9TaXplciBmcm9tICdyZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyJztcbmV4cG9ydCB2YXIgRXVpQXV0b1NpemVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXV0b1NpemVyKSB7XG4gIF9pbmhlcml0cyhFdWlBdXRvU2l6ZXIsIF9BdXRvU2l6ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQXV0b1NpemVyKTtcblxuICBmdW5jdGlvbiBFdWlBdXRvU2l6ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUF1dG9TaXplcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gRXVpQXV0b1NpemVyO1xufShBdXRvU2l6ZXIpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjbGFzc05hbWVcIiwgXCJpc0Rpc2FibGVkXCIsIFwib25DbGlja1wiLCBcImljb25PbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImljb25PbkNsaWNrQXJpYUxhYmVsXCIsIFwiY2xvc2VCdXR0b25Qcm9wc1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIGlzQ29sb3JEYXJrIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBjaHJvbWFWYWxpZCwgcGFyc2VDb2xvciB9IGZyb20gJy4uL2NvbG9yX3BpY2tlci91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZXMgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzI3MzEgaXMgY2xvc2VkXG52YXIgY29sb3JJbmsgPSAnIzAwMCc7XG52YXIgY29sb3JHaG9zdCA9ICcjZmZmJzsgLy8gVGhlIGNvbG9yIGJsaW5kIHBhbGV0dGUgaGFzIHNvbWUgc3RyaWN0ZXIgYWNjZXNzaWJpbGl0eSBuZWVkcyB3aXRoIHJlZ2FyZHMgdG9cbi8vIGNoYXJ0cyBhbmQgY29udHJhc3QuIFdlIHVzZSB0aGUgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0IHZhcmlhbnQgaGVyZSBzaW5jZSBvdXJcbi8vIGFjY2Vzc2liaWxpdHkgY29uY2VybnMgcGVydGFpbiB0byBmb3JlZ3JvdW5kICh0ZXh0KSBhbmQgYmFja2dyb3VuZCBjb250cmFzdFxuXG52YXIgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG52YXIgY29sb3JUb0hleE1hcCA9IHtcbiAgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcbiAgZGVmYXVsdDogJyNkM2RhZTYnLFxuICBwcmltYXJ5OiB2aXNDb2xvcnNbMV0sXG4gIHN1Y2Nlc3M6IHZpc0NvbG9yc1swXSxcbiAgYWNjZW50OiB2aXNDb2xvcnNbMl0sXG4gIHdhcm5pbmc6IHZpc0NvbG9yc1s1XSxcbiAgZGFuZ2VyOiB2aXNDb2xvcnNbOV1cbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvSGV4TWFwKTtcbnZhciBpY29uU2lkZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQmFkZ2UtLWljb25MZWZ0JyxcbiAgcmlnaHQ6ICdldWlCYWRnZS0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmFkZ2UgPSBmdW5jdGlvbiBFdWlCYWRnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBpY29uT25DbGljayA9IF9yZWYuaWNvbk9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLmljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY2xvc2VCdXR0b25Qcm9wcyA9IF9yZWYuY2xvc2VCdXR0b25Qcm9wcyxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IHN0eWxlO1xuICB2YXIgdGV4dENvbG9yID0gbnVsbDsgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcblxuICB2YXIgd2NhZ0NvbnRyYXN0QmFzZSA9IDQuNTsgLy8gV0NBRyBBQSBjb250cmFzdCBsZXZlbFxuXG4gIHZhciB3Y2FnQ29udHJhc3QgPSBudWxsO1xuICB2YXIgY29sb3JIZXggPSBudWxsOyAvLyBDaGVjayBpZiBhIHZhbGlkIGNvbG9yIG5hbWUgd2FzIHByb3ZpZGVkXG5cbiAgdHJ5IHtcbiAgICBpZiAoQ09MT1JTLmluZGV4T2YoY29sb3IpID4gLTEpIHtcbiAgICAgIC8vIEdldCB0aGUgaGV4IGVxdWl2YWxlbnQgZm9yIHRoZSBwcm92aWRlZCBjb2xvciBuYW1lXG4gICAgICBjb2xvckhleCA9IGNvbG9yVG9IZXhNYXBbY29sb3JdOyAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuXG4gICAgICB0ZXh0Q29sb3IgPSBzZXRUZXh0Q29sb3IoY29sb3JIZXgpO1xuICAgICAgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvckhleCxcbiAgICAgICAgY29sb3I6IHRleHRDb2xvclxuICAgICAgfSwgb3B0aW9uYWxDdXN0b21TdHlsZXMpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgIT09ICdob2xsb3cnKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY3VzdG9tIGNvbG9yIHRoYXQgaXMgbmVpdGhlciBmcm9tIHRoZSBiYXNlIHBhbGV0dGUgbm9yIGhvbGxvd1xuICAgICAgLy8gTGV0J3MgZG8gb3VyIGJlc3QgdG8gZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgc3VmZmljaWVudCBjb250cmFzdFxuICAgICAgLy8gU2V0IGRhcmsgb3IgbGlnaHQgdGV4dCBjb2xvciBiYXNlZCB1cG9uIGJlc3QgY29udHJhc3RcbiAgICAgIHRleHRDb2xvciA9IHNldFRleHRDb2xvcihjb2xvcik7IC8vIENoZWNrIHRoZSBjb250cmFzdFxuXG4gICAgICB3Y2FnQ29udHJhc3QgPSBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xuXG4gICAgICBpZiAod2NhZ0NvbnRyYXN0IDwgd2NhZ0NvbnRyYXN0QmFzZSkge1xuICAgICAgICAvLyBJdCdzIGxvdyBjb250cmFzdCwgc28gbGV0cyBzaG93IGEgd2FybmluZyBpbiB0aGUgY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6ICcsIGNvbG9yLCAnIGJhZGdlIGhhcyBsb3cgY29udHJhc3Qgb2YgJywgd2NhZ0NvbnRyYXN0LnRvRml4ZWQoMiksICcuIFNob3VsZCBiZSBhYm92ZSAnLCB3Y2FnQ29udHJhc3RCYXNlLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICBjb2xvcjogdGV4dENvbG9yXG4gICAgICB9LCBvcHRpb25hbEN1c3RvbVN0eWxlcyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBoYW5kbGVJbnZhbGlkQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZScsIHtcbiAgICAnZXVpQmFkZ2UtaXNDbGlja2FibGUnOiAob25DbGljayB8fCBocmVmKSAmJiAhaWNvbk9uQ2xpY2ssXG4gICAgJ2V1aUJhZGdlLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdldWlCYWRnZS0taG9sbG93JzogY29sb3IgPT09ICdob2xsb3cnXG4gIH0sIGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdLCBjbGFzc05hbWUpO1xuICB2YXIgY2xvc2VDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2VfX2ljb24nLCBjbG9zZUJ1dHRvblByb3BzICYmIGNsb3NlQnV0dG9uUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIEVsZW1lbnQgPSBocmVmICYmICFpc0Rpc2FibGVkID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsSWNvbiA9IG51bGw7XG5cbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgICBpZiAoIWljb25PbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIHRoZSBpY29uT25DbGljayBwcm9wcyB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIGljb25PbkNsaWNrQXJpYUxhYmVsJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25CdXR0b25cIixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdGl0bGU6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBpY29uT25DbGlja1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgICAgfSwgY2xvc2VCdXR0b25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsb3NlQ2xhc3NOYW1lc1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBjaGlsZHJlbiA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbkNsaWNrICYmICFvbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3Npbmcgb25DbGljayB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIG9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgfVxuXG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gIH0sIGNoaWxkcmVuICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX3RleHRcIlxuICB9LCBjaGlsZHJlbiksIG9wdGlvbmFsSWNvbik7XG5cbiAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgcmV0dXJuIG9uQ2xpY2sgfHwgaHJlZiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gICAgfSwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NoaWxkQnV0dG9uXCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICB9KSwgb3B0aW9uYWxJY29uKSkgOiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59O1xuRXVpQmFkZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICovXG4gIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICovXG4gIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5mdW5jdGlvbiBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpIHtcbiAgdmFyIGNvbnRyYXN0VmFsdWUgPSBjaHJvbWEuY29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG4gIHJldHVybiBjb250cmFzdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29sb3IoYmdDb2xvcikge1xuICB2YXIgdGV4dENvbG9yID0gaXNDb2xvckRhcmsuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hyb21hKGJnQ29sb3IpLnJnYigpKSkgPyBjb2xvckdob3N0IDogY29sb3JJbms7XG4gIHJldHVybiB0ZXh0Q29sb3I7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUludmFsaWRDb2xvcihjb2xvcikge1xuICB2YXIgaXNOYW1lZENvbG9yID0gY29sb3IgJiYgQ09MT1JTLmluY2x1ZGVzKGNvbG9yKSB8fCBjb2xvciA9PT0gJ2hvbGxvdyc7XG4gIHZhciBpc1ZhbGlkQ29sb3JTdHJpbmcgPSBjb2xvciAmJiBjaHJvbWFWYWxpZChwYXJzZUNvbG9yKGNvbG9yKSB8fCAnJyk7XG5cbiAgaWYgKCFpc05hbWVkQ29sb3IgJiYgIWlzVmFsaWRDb2xvclN0cmluZykge1xuICAgIGNvbnNvbGUud2FybignRXVpQmFkZ2UgZXhwZWN0cyBhIHZhbGlkIGNvbG9yLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSB0aHJlZSBvciBzaXggJyArIFwiY2hhcmFjdGVyIGhleCB2YWx1ZSwgcmdiKGEpIHZhbHVlLCBoc3YgdmFsdWUsIGhvbGxvdywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwiLmNvbmNhdChDT0xPUlMsIFwiLiBcIikgKyBcIkluc3RlYWQgZ290IFwiLmNvbmNhdChjb2xvciwgXCIuXCIpKTtcbiAgfVxufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIGdldEV2ZW50UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFdmVudFBvc2l0aW9uKGxvY2F0aW9uLCBjb250YWluZXIpIHtcbiAgdmFyIHggPSBsb2NhdGlvbi54LFxuICAgICAgeSA9IGxvY2F0aW9uLnk7XG5cbiAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpZHRoID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmhlaWdodCxcbiAgICAgIGxlZnQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4ubGVmdCxcbiAgICAgIHRvcCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi50b3A7XG5cbiAgdmFyIGxlZnRQb3MgPSB4IC0gKGxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQpO1xuICB2YXIgdG9wUG9zID0geSAtICh0b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXG4gIGlmIChsZWZ0UG9zIDwgMCkge1xuICAgIGxlZnRQb3MgPSAwO1xuICB9IGVsc2UgaWYgKGxlZnRQb3MgPiB3aWR0aCkge1xuICAgIGxlZnRQb3MgPSB3aWR0aDtcbiAgfVxuXG4gIGlmICh0b3BQb3MgPCAwKSB7XG4gICAgdG9wUG9zID0gMDtcbiAgfSBlbHNlIGlmICh0b3BQb3MgPiBoZWlnaHQpIHtcbiAgICB0b3BQb3MgPSBoZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGxlZnRQb3MsXG4gICAgdG9wOiB0b3BQb3MsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59O1xuZXhwb3J0IHZhciBIRVhfRkFMTEJBQ0sgPSAnJztcbmV4cG9ydCB2YXIgSFNWX0ZBTExCQUNLID0gWzAsIDAsIDBdO1xuZXhwb3J0IHZhciBSR0JfRkFMTEJBQ0sgPSBbTmFOLCBOYU4sIE5hTiwgMV07XG5leHBvcnQgdmFyIFJHQl9KT0lOID0gJywgJzsgLy8gR2l2ZW4gYSBzdHJpbmcsIHRoaXMgYXR0ZW1wdHMgdG8gcmV0dXJuIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IGNocm9tYS1qc1xuXG5leHBvcnQgdmFyIHBhcnNlQ29sb3IgPSBmdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gIGlmIChpbnB1dC5pbmRleE9mKCcsJykgPiAwKSB7XG4gICAgaWYgKCEvXltcXHMsLjAtOV0qJC8udGVzdChpbnB1dCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciByZ2IgPSBpbnB1dC50cmltKCkuc3BsaXQoJywnKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuICE9PSAnJztcbiAgICB9KS5tYXAoTnVtYmVyKTtcbiAgICBwYXJzZWQgPSByZ2IubGVuZ3RoID4gMiAmJiByZ2IubGVuZ3RoIDwgNSA/IHJnYiA6IEhFWF9GQUxMQkFDSztcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59OyAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IHdpbGwgcmV0dXJuIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdCB3aGVuIGRlc2lnbmF0ZWQgYXMgb25lIG9mXG4vLyB0aGUgYWNjZXB0YWJsZSBmb3JtYXRzOiBoZXgsIHJnYiwgcmdiYVxuXG5leHBvcnQgdmFyIGNocm9tYVZhbGlkID0gZnVuY3Rpb24gY2hyb21hVmFsaWQoY29sb3IpIHtcbiAgdmFyIHBhcnNlZCA9IGNvbG9yO1xuXG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyc2VkID0gcGFyc2VDb2xvcihjb2xvcik7XG4gIH1cblxuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2InKSB8fCBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiYScpO1xuICB9XG5cbiAgcmV0dXJuIGNocm9tYS52YWxpZChjb2xvciwgJ2hleCcpO1xufTsgLy8gR2l2ZW4gYW4gaW5wdXQgYW5kIG9wYWNpdHkgY29uZmlndXJhdGlvbiwgdGhpcyByZXR1cm5zIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdFxuXG5leHBvcnQgdmFyIGdldENocm9tYUNvbG9yID0gZnVuY3Rpb24gZ2V0Q2hyb21hQ29sb3IoaW5wdXQpIHtcbiAgdmFyIGFsbG93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGlucHV0KTtcblxuICBpZiAocGFyc2VkICYmIGNocm9tYVZhbGlkKHBhcnNlZCkpIHtcbiAgICAvLyB0eXBlIGd1YXJkIGZvciB0aGUgZnVuY3Rpb24gb3ZlcmxvYWRcbiAgICB2YXIgY2hyb21hQ29sb3IgPSBfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnID8gY2hyb21hKHBhcnNlZCkgOiBjaHJvbWEocGFyc2VkKTtcblxuICAgIGlmICghYWxsb3dPcGFjaXR5ICYmIGNocm9tYUNvbG9yLmFscGhhKCkgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hyb21hQ29sb3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07IC8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuLy8gT3IgZ2l2ZW4gYW4gYXJyYXkgb2YgaGV4IGNvbG9ycyByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuXG5leHBvcnQgdmFyIGdldExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0TGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gIHZhciBsaW5lYXJHcmFkaWVudDtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG5cbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFswXS5jb2xvciwgXCIgMCUsXCIpO1xuICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBpKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtpXS5jb2xvciwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKSwgXCIlLFwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLmNvbG9yLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZVswXSwgXCIgMCUsXCIpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBfaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbX2ldLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IoMTAwICogX2kgLyBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiksIFwiJSxcIik7XG4gICAgfVxuXG4gICAgdmFyIF9saW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0sIFwiIDEwMCUpXCIpO1xuXG4gICAgcmV0dXJuIF9saW5lYXJHcmFkaWVudFN0eWxlO1xuICB9XG59OyAvLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3Igb3IgYW4gYXJyYXkgb2YgaGV4IGNvbG9yc1xuLy8gcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIGNvbG9yL3dpZHRoXG5cbmV4cG9ydCB2YXIgZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldEZpeGVkTGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcblxuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzID0gcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGNvbG9yU3RvcCwgaW5kZXgpIHtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgICB2YXIgaXNGaXJzdENvbG9yU3RvcCA9IGluZGV4ID09PSAwO1xuICAgICAgdmFyIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG5cbiAgICAgIGlmIChpc0ZpcnN0Q29sb3JTdG9wKSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpbmRleCAtIDFdLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50Q29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKGNvbG9yU3RvcC5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgdmFyIGNvbG9yU3RvcFdpZHRoID0gY3VycmVudENvbG9yU3RvcFdpZHRoIC0gcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBjb2xvclN0b3AuY29sb3IsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChjb2xvclN0b3BXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIHBhbGV0dGVXaWR0aCA9IDEwMCAvIHBhbGV0dGUubGVuZ3RoO1xuXG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG8gPSBfcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGhleENvZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBoZXhDb2RlLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQocGFsZXR0ZVdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0bztcbiAgfVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJ0b29sdGlwQ29udGVudFwiLCBcInRvb2x0aXBQb3NpdGlvblwiLCBcInRpdGxlXCIsIFwiaWNvblR5cGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBjb2xvclRvQ2xhc3NNYXAgPSB7XG4gIGFjY2VudDogJ2V1aUJldGFCYWRnZS0tYWNjZW50JyxcbiAgc3ViZHVlZDogJ2V1aUJldGFCYWRnZS0tc3ViZHVlZCcsXG4gIGhvbGxvdzogJ2V1aUJldGFCYWRnZS0taG9sbG93J1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc01hcCk7XG5leHBvcnQgdmFyIHNpemVUb0NsYXNzTWFwID0ge1xuICBzOiAnZXVpQmV0YUJhZGdlLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmV0YUJhZGdlID0gZnVuY3Rpb24gRXVpQmV0YUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdob2xsb3cnIDogX3JlZiRjb2xvcixcbiAgICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICAgIF9yZWYkdG9vbHRpcFBvc2l0aW9uID0gX3JlZi50b29sdGlwUG9zaXRpb24sXG4gICAgICB0b29sdGlwUG9zaXRpb24gPSBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHRvb2x0aXBQb3NpdGlvbixcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHNpbmdsZUxldHRlciA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLmxlbmd0aCA9PT0gMSkge1xuICAgIHNpbmdsZUxldHRlciA9IHRydWU7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJldGFCYWRnZScsIHtcbiAgICAnZXVpQmV0YUJhZGdlLS1pY29uT25seSc6IGljb25UeXBlLFxuICAgICdldWlCZXRhQmFkZ2UtLXNpbmdsZUxldHRlcic6IHNpbmdsZUxldHRlcixcbiAgICAnZXVpQmV0YUJhZGdlLWlzQ2xpY2thYmxlJzogb25DbGljayB8fCBocmVmXG4gIH0sIGNvbG9yVG9DbGFzc01hcFtjb2xvcl0sIHNpemVUb0NsYXNzTWFwW3NpemVdLCBjbGFzc05hbWUpO1xuICB2YXIgaWNvbjtcblxuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IHNpemUgPT09ICdtJyA/ICdtJyA6ICdzJyxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgfSk7XG4gIH1cblxuICB2YXIgRWxlbWVudCA9IGhyZWYgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuXG4gIGlmIChocmVmKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cblxuICB2YXIgY29udGVudDtcblxuICBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0aXRsZTogdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGxhYmVsIDogdGl0bGVcbiAgICB9LCByZWxPYmosIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcblxuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsXG4gICAgICB9LCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNvbnRlbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICByb2xlOiBcImJ1dHRvblwiXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhblRpdGxlID0gdGl0bGUgfHwgbGFiZWw7XG5cbiAgICAgIGlmIChzcGFuVGl0bGUgJiYgdHlwZW9mIHNwYW5UaXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiT25seSBzdHJpbmcgdGl0bGVzIGFyZSBwZXJtaXR0ZWQgb24gYmFkZ2VzIHRoYXQgZG8gbm90IHVzZSB0b29sdGlwcy4gRm91bmQ6IFwiLmNvbmNhdChfdHlwZW9mKHNwYW5UaXRsZSkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICB0aXRsZTogc3BhblRpdGxlXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCk7XG4gICAgfVxuICB9XG59O1xuRXVpQmV0YUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogU3VwcGx5IGFuIGljb24gdHlwZSBpZiB0aGUgYmFkZ2Ugc2hvdWxkIGp1c3QgYmUgYW4gaWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcblxuICAvKipcbiAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSB3aWxsIGJlIHN1cHBsaWVkIGFzIHRvb2x0aXAgdGl0bGUgb3IgdGl0bGUgYXR0cmlidXRlXG4gICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJhY2NlbnRcIiwgXCJzdWJkdWVkXCIsIFwiaG9sbG93XCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbmNob3JDbGFzc05hbWVcIiwgXCJjb250ZW50XCIsIFwidGl0bGVcIiwgXCJkZWxheVwiLCBcImRpc3BsYXlcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aVRvb2xUaXBQb3BvdmVyIH0gZnJvbSAnLi90b29sX3RpcF9wb3BvdmVyJztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgcG9zaXRpb25zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHRvcDogJ2V1aVRvb2xUaXAtLXRvcCcsXG4gIHJpZ2h0OiAnZXVpVG9vbFRpcC0tcmlnaHQnLFxuICBib3R0b206ICdldWlUb29sVGlwLS1ib3R0b20nLFxuICBsZWZ0OiAnZXVpVG9vbFRpcC0tbGVmdCdcbn07XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IGtleXNPZihwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcCk7XG52YXIgZGVsYXlUb01zTWFwID0ge1xuICByZWd1bGFyOiAyNTAsXG4gIGxvbmc6IDI1MCAqIDVcbn07XG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbmxpbmVCbG9jazogdW5kZWZpbmVkLFxuICBibG9jazogJ2V1aVRvb2xUaXBBbmNob3ItLWRpc3BsYXlCbG9jaydcbn07XG52YXIgREVGQVVMVF9UT09MVElQX1NUWUxFUyA9IHtcbiAgLy8gcG9zaXRpb24gdGhlIHRvb2x0aXAgY29udGVudCBuZWFyIHRoZSB0b3AtbGVmdFxuICAvLyBjb3JuZXIgb2YgdGhlIHdpbmRvdyBzbyBpdCBjYW4ndCBjcmVhdGUgc2Nyb2xsYmFyc1xuICAvLyA1MCw1MCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IG5lZ2F0aXZlIG1hcmdpbnMsIHBhZGRpbmcsIGV0Y1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MCxcbiAgLy8ganVzdCBpbiBjYXNlLCBhdm9pZCBhbnkgcG90ZW50aWFsIGZsaWNrZXIgYnkgaGlkaW5nXG4gIC8vIHRoZSB0b29sdGlwIGJlZm9yZSBpdCBpcyBwb3NpdGlvbmVkXG4gIG9wYWNpdHk6IDAsXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCBtb3VzZSBpbnRlcmFjdGlvbiB3aGlsZSBwb3NpdGlvbmluZ1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufTtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVG9vbFRpcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUb29sVGlwKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUb29sVGlwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYW5jaG9yXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGltZW91dElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBjYWxjdWxhdGVkUG9zaXRpb246IF90aGlzLnByb3BzLnBvc2l0aW9uLFxuICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWQsXG4gICAgICBpZDogX3RoaXMucHJvcHMuaWQgfHwgaHRtbElkR2VuZXJhdG9yKCkoKVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQW5pbWF0aW9uVGltZW91dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRlc3RBbmNob3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gd2hlbiB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlLCB0aGlzIGNoZWNrcyBpZiB0aGUgYW5jaG9yIGlzIHN0aWxsIHBhcnQgb2YgZG9jdW1lbnRcbiAgICAgIC8vIHRoaXMgZml4ZXMgd2hlbiB0aGUgcmVhY3Qgcm9vdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvbSB3aXRob3V0IHVubW91bnRpbmdcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMTEwNVxuICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXMuYW5jaG9yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhlIGFuY2hvciBpcyBubyBsb25nZXIgcGFydCBvZiBgZG9jdW1lbnRgXG4gICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgIC8vIGlmIHN0aWxsIHZpc2libGUsIGtlZXAgY2hlY2tpbmdcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudGVzdEFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7IC8vIGlmIHRoZSBwb3BvdmVyIGhhcyBiZWVuIHVubW91bnRlZCwgY2xlYXJcbiAgICAgIC8vIGFueSBwcmV2aW91cyBrbm93bGVkZ2UgYWJvdXQgaXRzIHNpemVcblxuICAgICAgaWYgKHJlZiA9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2hvd1Rvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBkZWxheVRvTXNNYXBbX3RoaXMucHJvcHMuZGVsYXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcXVlc3RlZFBvc2l0aW9uID0gX3RoaXMucHJvcHMucG9zaXRpb247XG5cbiAgICAgIGlmICghX3RoaXMuYW5jaG9yIHx8ICFfdGhpcy5wb3BvdmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFuY2hvcjogX3RoaXMuYW5jaG9yLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wb3BvdmVyLFxuICAgICAgICBwb3NpdGlvbjogcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgIG9mZnNldDogMTYsXG4gICAgICAgIC8vIG9mZnNldCBwb3BvdmVyIDE2cHggZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgYXJyb3dXaWR0aDogMTIsXG4gICAgICAgICAgYXJyb3dCdWZmZXI6IDRcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgICAgcG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdzsgLy8gSWYgZW5jcm9hY2hpbmcgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdzpcbiAgICAgIC8vIFdoZW4gYHByb3BzLmNvbnRlbnRgIGNoYW5nZXMgYW5kIGlzIGxvbmdlciB0aGFuIGBwcmV2UHJvcHMuY29udGVudGAsIHRoZSB0b29sdGlwIHdpZHRoIHJlbWFpbnMgYW5kXG4gICAgICAvLyB0aGUgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBmaXJlIHR3aWNlIChvbmNlIGZvciB2ZXJ0aWNhbCByZXNpemUgY2F1c2VkIGJ5IHRleHQgbGluZSB3cmFwcGluZyxcbiAgICAgIC8vIG9uY2UgZm9yIGEgc3Vic2VxdWVudCBwb3NpdGlvbiBjb3JyZWN0aW9uKSBhbmQgY2F1c2UgYSBmbGFzaCByZXJlbmRlciBhbmQgcmVwb3NpdGlvbi5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgY2FuIG9yaWVudCBmcm9tIHRoZSByaWdodCBzbyB0aGF0IHRleHQgbGluZSB3cmFwcGluZyBkb2VzIG5vdCBvY2N1ciwgbmVnYXRpbmdcbiAgICAgIC8vIHRoZSBzZWNvbmQgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgY2FsbC5cblxuXG4gICAgICB2YXIgd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICB2YXIgdXNlUmlnaHRWYWx1ZSA9IHdpbmRvd1dpZHRoIC8gMiA8IGxlZnQ7XG4gICAgICB2YXIgdG9vbFRpcFN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IHVzZVJpZ2h0VmFsdWUgPyAnYXV0bycgOiBsZWZ0LFxuICAgICAgICByaWdodDogdXNlUmlnaHRWYWx1ZSA/IHdpbmRvd1dpZHRoIC0gbGVmdCAtIF90aGlzLnBvcG92ZXIub2Zmc2V0V2lkdGggOiAnYXV0bydcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgdG9vbFRpcFN0eWxlczogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoaWRlVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcblxuICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5zaG93VG9vbFRpcCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZU91dFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgbW91c2luZyBvdmVyIGNoaWxkcmVuIGZyb20gaGlkaW5nIHRoZSB0b29sdGlwIGJ5IHRlc3RpbmcgZm9yIHdoZXRoZXIgdGhlIG1vdXNlIGhhc1xuICAgICAgLy8gbGVmdCB0aGUgYW5jaG9yIGZvciBhIG5vbi1jaGlsZC5cbiAgICAgIGlmIChfdGhpcy5hbmNob3IgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgX3RoaXMuYW5jaG9yICE9IG51bGwgJiYgIV90aGlzLmFuY2hvci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICBpZiAoIV90aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZU91dCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnZpc2libGUgPT09IGZhbHNlICYmIHRoaXMuc3RhdGUudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgICBjb250ZW50ID0gX3RoaXMkcHJvcHMuY29udGVudCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMuZGVsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhcnJvd1N0eWxlcyA9IF90aGlzJHN0YXRlLmFycm93U3R5bGVzLFxuICAgICAgICAgIGlkID0gX3RoaXMkc3RhdGUuaWQsXG4gICAgICAgICAgdG9vbFRpcFN0eWxlcyA9IF90aGlzJHN0YXRlLnRvb2xUaXBTdHlsZXMsXG4gICAgICAgICAgdmlzaWJsZSA9IF90aGlzJHN0YXRlLnZpc2libGU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXAnLCBwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcFt0aGlzLnN0YXRlLmNhbGN1bGF0ZWRQb3NpdGlvbl0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBBbmNob3InLCBkaXNwbGF5ID8gZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldIDogbnVsbCwgYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICAgIHZhciB0b29sdGlwO1xuXG4gICAgICBpZiAodmlzaWJsZSAmJiAoY29udGVudCB8fCB0aXRsZSkpIHtcbiAgICAgICAgdG9vbHRpcCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcDogdGhpcy5wb3NpdGlvblRvb2xUaXAsXG4gICAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5zZXRQb3BvdmVyUmVmLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcm9sZTogXCJ0b29sdGlwXCJcbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHN0eWxlOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fYXJyb3dcIlxuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLnBvc2l0aW9uVG9vbFRpcFxuICAgICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgICAgfSkpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuY2hvciA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9tb3VzZS1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgICBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGFuY2hvcikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYW5jaG9yID0gYW5jaG9yO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgIG9uTW91c2VPdmVyOiB0aGlzLnNob3dUb29sVGlwLFxuICAgICAgICBvbk1vdXNlT3V0OiB0aGlzLm9uTW91c2VPdXRcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyAmJiBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzKGUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihlKSB7XG4gICAgICAgICAgX3RoaXMyLm9uQmx1cigpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyICYmIGNoaWxkcmVuLnByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdmlzaWJsZSAmJiB7XG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdGhpcy5zdGF0ZS5pZFxuICAgICAgfSkpKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGFuY2hvciwgdG9vbHRpcCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRvb2xUaXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUb29sVGlwLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHBvc2l0aW9uOiAndG9wJyxcbiAgZGVsYXk6ICdyZWd1bGFyJyxcbiAgZGlzcGxheTogJ2lubGluZUJsb2NrJ1xufSk7XG5cbkV1aVRvb2xUaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgaW4tdmlldyB0cmlnZ2VyIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJpbmxpbmVCbG9ja1wiLCBcImJsb2NrXCJdKSxcblxuICAvKipcbiAgICAgKiBEZWxheSBiZWZvcmUgc2hvd2luZyB0b29sdGlwLiBHb29kIGZvciByZXBlYXRhYmxlIGl0ZW1zLlxuICAgICAqL1xuICBkZWxheTogUHJvcFR5cGVzLm9uZU9mKFtcInJlZ3VsYXJcIiwgXCJsb25nXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTdWdnZXN0ZWQgcG9zaXRpb24uIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgaXQgdGhpcyB3aWxsIGJlIGNoYW5nZWQuXG4gICAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBXZSBjYW4ndCB0ZXN0IHRoaXMgY29tcG9uZW50IGJlY2F1c2UgRW56eW1lIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXJpbmdcbiAqIGludG8gcG9ydGFscy5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5leHBvcnQgdmFyIGluc2VydFBvc2l0aW9ucyA9IHtcbiAgYWZ0ZXI6ICdhZnRlcmVuZCcsXG4gIGJlZm9yZTogJ2JlZm9yZWJlZ2luJ1xufTtcbmV4cG9ydCB2YXIgSU5TRVJUX1BPU0lUSU9OUyA9IGtleXNPZihpbnNlcnRQb3NpdGlvbnMpO1xuZXhwb3J0IHZhciBFdWlQb3J0YWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVBvcnRhbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlQb3J0YWwpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcnRhbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3J0YWwpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9ydGFsTm9kZVwiLCBudWxsKTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTsgLy8gUHJldmVudCBTU1IgZXJyb3JzXG5cbiAgICB2YXIgaW5zZXJ0ID0gX3RoaXMucHJvcHMuaW5zZXJ0O1xuICAgIF90aGlzLnBvcnRhbE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpcy5wb3J0YWxOb2RlLmRhdGFzZXQuZXVpcG9ydGFsID0gJ3RydWUnO1xuXG4gICAgaWYgKGluc2VydCA9PSBudWxsKSB7XG4gICAgICAvLyBubyBpbnNlcnRpb24gZGVmaW5lZCwgYXBwZW5kIHRvIGJvZHlcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX3RoaXMucG9ydGFsTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydGluZyBiZWZvcmUgb3IgYWZ0ZXIgYW4gZWxlbWVudFxuICAgICAgdmFyIHNpYmxpbmcgPSBpbnNlcnQuc2libGluZyxcbiAgICAgICAgICBwb3NpdGlvbiA9IGluc2VydC5wb3NpdGlvbjtcbiAgICAgIHNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGluc2VydFBvc2l0aW9uc1twb3NpdGlvbl0sIF90aGlzLnBvcnRhbE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYodGhpcy5wb3J0YWxOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcG9ydGFsTm9kZTtcblxuICAgICAgaWYgKChfdGhpcyRwb3J0YWxOb2RlID0gdGhpcy5wb3J0YWxOb2RlKSAhPT0gbnVsbCAmJiBfdGhpcyRwb3J0YWxOb2RlICE9PSB2b2lkIDAgJiYgX3RoaXMkcG9ydGFsTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMucG9ydGFsTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9ydGFsTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKG51bGwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3J0YWxSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9ydGFsUmVmKHJlZikge1xuICAgICAgaWYgKHRoaXMucHJvcHMucG9ydGFsUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMucG9ydGFsUmVmKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3J0YWxOb2RlID8gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLCB0aGlzLnBvcnRhbE5vZGUpIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpUG9ydGFsO1xufShDb21wb25lbnQpO1xuRXVpUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgcG9ydGFsUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0aXRsZVwiLCBcImNsYXNzTmFtZVwiLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBcInBvcG92ZXJSZWZcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcFBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRvb2xUaXBQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRvb2xUaXBQb3BvdmVyKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwUG9wb3ZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVG9vbFRpcFBvcG92ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVyXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlRGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHRoaXMgZGVsYXksIHNvbWV0aW1lcyBgcG9zaXRpb25Ub29sVGlwYCBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgICAgICBpZiAoX3RoaXMucG9wb3Zlcikge1xuICAgICAgICAgIF90aGlzLnByb3BzLnBvc2l0aW9uVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5wb3BvdmVyUmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLnBvcG92ZXJSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlRGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcCA9IF90aGlzJHByb3BzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgb3B0aW9uYWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX190aXRsZVwiXG4gICAgICAgIH0sIHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHJlZjogdGhpcy5zZXRQb3BvdmVyUmVmXG4gICAgICB9LCByZXN0KSwgb3B0aW9uYWxUaXRsZSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUb29sVGlwUG9wb3Zlcjtcbn0oQ29tcG9uZW50KTtcbkV1aVRvb2xUaXBQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvblRvb2xUaXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiaWNvblByb3BzXCIsIFwicG9zaXRpb25cIiwgXCJkZWxheVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi90b29sX3RpcCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJY29uVGlwID0gZnVuY3Rpb24gRXVpSWNvblRpcChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAncXVlc3Rpb25JbkNpcmNsZScgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWYkYXJpYUxhYmVsID09PSB2b2lkIDAgPyAnSW5mbycgOiBfcmVmJGFyaWFMYWJlbCxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBpY29uUHJvcHMgPSBfcmVmLmljb25Qcm9wcyxcbiAgICAgIF9yZWYkcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmJHBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkcG9zaXRpb24sXG4gICAgICBfcmVmJGRlbGF5ID0gX3JlZi5kZWxheSxcbiAgICAgIGRlbGF5ID0gX3JlZiRkZWxheSA9PT0gdm9pZCAwID8gJ3JlZ3VsYXInIDogX3JlZiRkZWxheSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGRlbGF5OiBkZWxheVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0sIGljb25Qcm9wcykpKTtcbn07XG5FdWlJY29uVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImlubGluZUJsb2NrXCIsIFwiYmxvY2tcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogVGhlIGljb24gY29sb3IuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHR5cGUuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHNpemUuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRXhwbGFpbiB3aGF0IHRoaXMgaWNvbiBtZWFucyBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFBhc3MgY2VydGFpbiBwcm9wcyBkb3duIHRvIGBFdWlJY29uYFxuICAgICAqL1xuICAvLyBFdWlJY29uVGlwJ3MgYHR5cGVgIGlzIHBhc3NlZCB0byBFdWlJY29uLCBzbyB3ZSB3YW50IHRvIGV4Y2x1ZGUgYHR5cGVgIGZyb21cbiAgLy8gaWNvblByb3BzOyBob3dldmVyLCBkdWUgdG8gVFMncyBiaXZhcmlhbnQgZnVuY3Rpb24gYXJndW1lbnRzIGB0eXBlYCBjb3VsZCBiZVxuICAvLyBwYXNzZWQgd2l0aG91dCBhbnkgZXJyb3IvZmVlZGJhY2sgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYG5ldmVyYCB0eXBlXG4gIGljb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLy8gVGhpcyBhcmUgY29waWVkIGZyb20gRXVpVG9vbFRpcFByb3BzLCBidXQgbWFkZSBvcHRpb25hbC4gRGVmYXVsdHNcbiAgLy8gYXJlIGFwcGxpZWQgYmVsb3cuXG4gIGRlbGF5OiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJEIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdHlwZXMnOyAvLyBDcmVhdGUgYSBDU1MgY29sb3IgdmFsdWUgdXNpbmcgd2hvc2Ugb3BhY2l0eSBpcyBkZXRlcm1pbmVkIGJhc2VkXG4vLyBvbiBlaXRoZXIgYSBsaWdodCBvciBkYXJrIHRoZW1lLiBXZSB1c2UgYSBtdWx0aXBsaWVyXG4vLyBvZiAxIGZvciBsaWdodCB0aGVtZXMgYW5kIDIuNSBmb3IgZGFyayB0aGVtZXNcblxuZXhwb3J0IHZhciBnZXRTaGFkb3dDb2xvciA9IGZ1bmN0aW9uIGdldFNoYWRvd0NvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvck1vZGUpIHtcbiAgdmFyIHRoZW1lT3BhY2l0eSA9IGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IG9wYWNpdHkgKiAzLjUgOiBvcGFjaXR5ICogMTtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEodGhlbWVPcGFjaXR5KS5jc3MoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGdldFNoYWRvd0NvbG9yIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuLyoqXG4gKiBldWlTbGlnaHRTaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dYU21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dYU21hbGwoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuOHB4IC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMi4zcHggMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1NtYWxsXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1NtYWxsKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjMuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmNC5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjdweCAxLjRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAxLjlweCA0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDQuNXB4IDEwcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TWVkaXVtXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dNZWRpdW0gPSBmdW5jdGlvbiBldWlTaGFkb3dNZWRpdW0oX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmNS5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWY2LmNvbG9yLFxuICAgICAgcHJvcGVydHkgPSBfcmVmNi5wcm9wZXJ0eTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgdmFyIGFycmF5ID0gW1wiMCAuOXB4IDRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSkpLCBcIjAgMi42cHggOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSksIFwiMCA1LjdweCAxMnB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSksIFwiMCAxNXB4IDE1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpKV07XG5cbiAgaWYgKHByb3BlcnR5ID09PSAnZmlsdGVyJykge1xuICAgIHJldHVybiBcImZpbHRlcjogXCIuY29uY2F0KGFycmF5LnJlZHVjZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHYsIFwiIGRyb3Atc2hhZG93KFwiKS5jb25jYXQoaSwgXCIpXCIpO1xuICAgIH0sICcnKSwgXCI7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcImJveC1zaGFkb3c6IFwiLmNvbmNhdChhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH0pLCBcIjtcIik7XG4gIH1cbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93TGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dMYXJnZShfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY3LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjguY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TGFyZ2VcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hMYXJnZShfcmVmOSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmOS5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY5LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjEwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYxMC5jb2xvcixcbiAgICAgIHJldmVyc2UgPSBfcmVmMTAucmV2ZXJzZTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgXCIuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyLjdweCA5cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xMywgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjkuNHB4IDI0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIxLjhweCA0M3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIHNsaWdodFNoYWRvd0hvdmVyXG4gKiBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgb25seSB1c2VkIGJ5IHBhbmVscy9jYXJkcyBpbiB0aGUgQW1zdGVyZGFtIHRoZW1lLCBtb3ZlIHRoZXJlXG4gKi9cblxuZXhwb3J0IHZhciBldWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIGV1aVNsaWdodFNoYWRvd0hvdmVyKF9yZWYxMSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTEuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmMTEuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMTIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjEyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTbGlnaHRTaGFkb3dIb3ZlcihldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dGbGF0XG4gKlxuICogU2ltaWxhciB0byBzaGFkb3cgbWVkaXVtIGJ1dCB3aXRob3V0IHRoZSBib3R0b20gZGVwdGguXG4gKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgZHJvcCBVUCByYXRoZXIgdGhhbiBET1dOLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIGV1aVNoYWRvd0ZsYXQoX3JlZjEzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYxMy5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYxNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMTQuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDAgLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCA1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMTdweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93RmxhdChjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpU2hhZG93ID0gZnVuY3Rpb24gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2wnO1xuXG4gIHZhciBfcmVmMTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgY29sb3IgPSBfcmVmMTUuY29sb3I7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAneHMnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1NtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICd4bCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WExhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzaXplIG9wdGlvbiB0byB1c2VFdWlTaGFkb3cnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93KCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2wnO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCBzaXplLCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJocmVmXCIsIFwiZXh0ZXJuYWxcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwib25DbGlja1wiLCBcImRpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUxpbmtTdHlsZXMgfSBmcm9tICcuL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsncHJpbWFyeScsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ3RleHQnLCAnZ2hvc3QnXTtcbnZhciBFdWlMaW5rID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICBleHRlcm5hbCA9IF9yZWYuZXh0ZXJuYWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTGlua1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtdO1xuICB2YXIgY3NzU2NyZWVuUmVhZGVyVGV4dFN0eWxlcyA9IFtzdHlsZXMuZXVpTGlua19fc2NyZWVuUmVhZGVyVGV4dF07XG4gIHZhciBjc3NFeHRlcm5hbExpbmtJY29uU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rX19leHRlcm5hbEljb25dO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgdmFyIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIHtcbiAgICBjc3M6IGNzc1NjcmVlblJlYWRlclRleHRTdHlsZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpTGluay5uZXdUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihvcGVucyBpbiBhIG5ldyB0YWIgb3Igd2luZG93KVwiXG4gIH0pKSk7XG5cbiAgdmFyIGV4dGVybmFsTGlua0ljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBcImFyaWEtbGFiZWxcIjogdXNlRXVpSTE4bignZXVpTGluay5leHRlcm5hbC5hcmlhTGFiZWwnLCAnRXh0ZXJuYWwgbGluaycpLFxuICAgIHNpemU6IFwic1wiLFxuICAgIGNzczogY3NzRXh0ZXJuYWxMaW5rSWNvblN0eWxlcyxcbiAgICB0eXBlOiBcInBvcG91dFwiXG4gIH0pO1xuXG4gIGlmIChocmVmID09PSB1bmRlZmluZWQgfHwgIWlzSHJlZlZhbGlkKSB7XG4gICAgdmFyIGJ1dHRvblByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgICAgY3NzOiBbY3NzU3R5bGVzLCBkaXNhYmxlZCA/IFtzdHlsZXMuZGlzYWJsZWRdIDogc3R5bGVzW2NvbG9yXV0sXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0sIHJlc3QpO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiByZWZcbiAgICB9LCBidXR0b25Qcm9wcyksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiByZWxcbiAgfSk7XG5cbiAgdmFyIGFuY2hvclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICBjc3M6IFtjc3NTdHlsZXMsIHN0eWxlc1tjb2xvcl1dLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgb25DbGljazogb25DbGlja1xuICB9LCByZXN0KTtcblxuICB2YXIgc2hvd0V4dGVybmFsTGlua0ljb24gPSB0YXJnZXQgPT09ICdfYmxhbmsnICYmIGV4dGVybmFsICE9PSBmYWxzZSB8fCBleHRlcm5hbCA9PT0gdHJ1ZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBhbmNob3JQcm9wcyksIGNoaWxkcmVuLCBzaG93RXh0ZXJuYWxMaW5rSWNvbiAmJiBleHRlcm5hbExpbmtJY29uLCB0YXJnZXQgPT09ICdfYmxhbmsnICYmIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQpO1xufSk7XG5FdWlMaW5rLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJzdWJtaXRcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlMaW5rLmRpc3BsYXlOYW1lID0gJ0V1aUxpbmsnO1xuZXhwb3J0IHsgRXVpTGluayB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBGb2N1c09uIH0gZnJvbSAncmVhY3QtZm9jdXMtb24nO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb2N1c1RyYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvY3VzVHJhcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb2N1c1RyYXApO1xuXG4gIGZ1bmN0aW9uIEV1aUZvY3VzVHJhcCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9jdXNUcmFwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsYXN0SW50ZXJjZXB0ZWRFdmVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50Rm9jdXNFeGl0XCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRJbml0aWFsRm9jdXNcIiwgZnVuY3Rpb24gKGluaXRpYWxGb2N1cykge1xuICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHJldHVybjtcbiAgICAgIHZhciBub2RlID0gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoaW5pdGlhbEZvY3VzKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuOyAvLyBgZGF0YS1hdXRvZm9jdXNgIGlzIHBhcnQgb2YgdGhlICdyZWFjdC1mb2N1cy1vbicgQVBJXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZXVwT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7IC8vIFRpbWVvdXQgZ2l2ZXMgcHJlY2VkZW5jZSB0byB0aGUgY29uc3VtZXIgdG8gaW5pdGlhdGUgY2xvc2UgaWYgaXQgaGFzIHRvZ2dsZSBiZWhhdmlvci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIGV2ZW50IG1heSBvY2N1ciBmaXJzdCBhbmQgdGhlIGNvbnN1bWVyIHRvZ2dsZSB3aWxsIHJlb3BlbiB0aGUgZmx5b3V0LlxuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGlja091LCBfdGhpcyRwcm9wcztcblxuICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNsaWNrT3V0c2lkZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGlja091ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrT3UuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczIuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgY2xvc2VPbk1vdXNldXAgPSBfdGhpcyRwcm9wczIuY2xvc2VPbk1vdXNldXA7XG5cbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID8gX3RoaXMuYWRkTW91c2V1cExpc3RlbmVyKCkgOiBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9jdXNUcmFwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgfSAvLyBQcm9ncmFtbWF0aWNhbGx5IHNldHMgZm9jdXMgb24gYSBuZXN0ZWQgRE9NIG5vZGU7IG9wdGlvbmFsXG5cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgICAgcmV0dXJuRm9jdXMgPSBfdGhpcyRwcm9wczMucmV0dXJuRm9jdXMsXG4gICAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgICAgc2Nyb2xsTG9jayA9IF90aGlzJHByb3BzMy5zY3JvbGxMb2NrLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IGRpc2FibGVkIHx8IHRoaXMuc3RhdGUuaGFzQmVlbkRpc2FibGVkQnlDbGljaztcblxuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBzY3JvbGxMb2NrOiBzY3JvbGxMb2NrLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGlja1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZvY3VzT24sIGZvY3VzT25Qcm9wcywgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb2N1c1RyYXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb2N1c1RyYXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2Vcbn0pO1xuXG5FdWlGb2N1c1RyYXAucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9jdXNPbiBhcyBSZWFjdEZvY3VzT24gfSBmcm9tICcuL1VJJztcbmltcG9ydCBTaWRlQ2FyIGZyb20gJy4vc2lkZWNhcic7XG52YXIgUmVxdWlyZVNpZGVDYXIgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcHJvcHMpKTtcbn07XG5leHBvcnQgdmFyIEZvY3VzT24gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Rm9jdXNPbiwgX19hc3NpZ24oe30sIHByb3BzLCB7IHJlZjogcmVmLCBzaWRlQ2FyOiBSZXF1aXJlU2lkZUNhciB9KSk7IH0pO1xuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbCB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwvVUknO1xuaW1wb3J0IFJlYWN0Rm9jdXNMb2NrIGZyb20gJ3JlYWN0LWZvY3VzLWxvY2svVUknO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIFBSRVZFTlRfU0NST0xMID0geyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH07XG5leHBvcnQgdmFyIEZvY3VzT24gPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIF9hID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpLCBsb2NrUHJvcHMgPSBfYVswXSwgc2V0TG9ja1Byb3BzID0gX2FbMV07XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGF1dG9Gb2N1cyA9IHByb3BzLmF1dG9Gb2N1cywgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSwgX2IgPSBwcm9wcy5lbmFibGVkLCBlbmFibGVkID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBwcm9wcy5zY3JvbGxMb2NrLCBzY3JvbGxMb2NrID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBwcm9wcy5mb2N1c0xvY2ssIGZvY3VzTG9jayA9IF9kID09PSB2b2lkIDAgPyB0cnVlIDogX2QsIF9lID0gcHJvcHMucmV0dXJuRm9jdXMsIHJldHVybkZvY3VzID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZSwgaW5lcnQgPSBwcm9wcy5pbmVydCwgYWxsb3dQaW5jaFpvb20gPSBwcm9wcy5hbGxvd1BpbmNoWm9vbSwgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgc2hvdWxkSWdub3JlID0gcHJvcHMuc2hvdWxkSWdub3JlLCBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IHByb3BzLnByZXZlbnRTY3JvbGxPbkZvY3VzLCBzdHlsZSA9IHByb3BzLnN0eWxlLCBhcyA9IHByb3BzLmFzLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJhdXRvRm9jdXNcIiwgXCJzaGFyZHNcIiwgXCJjcm9zc0ZyYW1lXCIsIFwiZW5hYmxlZFwiLCBcInNjcm9sbExvY2tcIiwgXCJmb2N1c0xvY2tcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJzaWRlQ2FyXCIsIFwiY2xhc3NOYW1lXCIsIFwic2hvdWxkSWdub3JlXCIsIFwicHJldmVudFNjcm9sbE9uRm9jdXNcIiwgXCJzdHlsZVwiLCBcImFzXCIsIFwiZ2FwTW9kZVwiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBvbkFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IGxvY2tQcm9wcy5vbkRlYWN0aXZhdGlvbiwgcmVzdFByb3BzID0gX19yZXN0KGxvY2tQcm9wcywgW1wib25BY3RpdmF0aW9uXCIsIFwib25EZWFjdGl2YXRpb25cIl0pO1xuICAgIHZhciBhcHBsaWVkTG9ja1Byb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3RQcm9wcyksIHsgYXM6IGFzLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHNpZGVDYXI6IHNpZGVDYXIsXG4gICAgICAgIHNoYXJkczogc2hhcmRzLFxuICAgICAgICBhbGxvd1BpbmNoWm9vbTogYWxsb3dQaW5jaFpvb20sXG4gICAgICAgIGdhcE1vZGU6IGdhcE1vZGUsXG4gICAgICAgIGluZXJ0OiBpbmVydCwgZW5hYmxlZDogZW5hYmxlZCAmJiBzY3JvbGxMb2NrIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzTG9jaywgeyByZWY6IHBhcmVudFJlZiwgc2lkZUNhcjogc2lkZUNhciwgZGlzYWJsZWQ6ICEobG9ja1Byb3BzICYmIGVuYWJsZWQgJiYgZm9jdXNMb2NrKSwgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLCBhdXRvRm9jdXM6IGF1dG9Gb2N1cywgc2hhcmRzOiBzaGFyZHMsIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsIG9uQWN0aXZhdGlvbjogb25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sIGNsYXNzTmFtZTogY2xhc3NOYW1lLCB3aGl0ZUxpc3Q6IHNob3VsZElnbm9yZSwgbG9ja1Byb3BzOiBhcHBsaWVkTG9ja1Byb3BzLCBmb2N1c09wdGlvbnM6IHByZXZlbnRTY3JvbGxPbkZvY3VzID8gUFJFVkVOVF9TQ1JPTEwgOiB1bmRlZmluZWQsIGFzOiBSZW1vdmVTY3JvbGwgfSwgY2hpbGRyZW4pLFxuICAgICAgICBlbmFibGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIF9fYXNzaWduKHt9LCByZXN0LCB7IHNpZGVDYXI6IGVmZmVjdENhciwgc2V0TG9ja1Byb3BzOiBzZXRMb2NrUHJvcHMsIHNoYXJkczogc2hhcmRzIH0pKSkpKTtcbn0pO1xuZXhwb3J0ICogZnJvbSAnLi9yZUV4cG9ydHMnO1xuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIG5vdGhpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuO1xufTtcbi8qKlxuICogUmVtb3ZlcyBzY3JvbGxiYXIgZnJvbSB0aGUgcGFnZSBhbmQgY29udGFpbiB0aGUgc2Nyb2xsIHdpdGhpbiB0aGUgTG9ja1xuICovXG52YXIgUmVtb3ZlU2Nyb2xsID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9hID0gUmVhY3QudXNlU3RhdGUoe1xuICAgICAgICBvblNjcm9sbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uV2hlZWxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IG5vdGhpbmcsXG4gICAgfSksIGNhbGxiYWNrcyA9IF9hWzBdLCBzZXRDYWxsYmFja3MgPSBfYVsxXTtcbiAgICB2YXIgZm9yd2FyZFByb3BzID0gcHJvcHMuZm9yd2FyZFByb3BzLCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgZW5hYmxlZCA9IHByb3BzLmVuYWJsZWQsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgc2lkZUNhciA9IHByb3BzLnNpZGVDYXIsIG5vSXNvbGF0aW9uID0gcHJvcHMubm9Jc29sYXRpb24sIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIF9iID0gcHJvcHMuYXMsIENvbnRhaW5lciA9IF9iID09PSB2b2lkIDAgPyAnZGl2JyA6IF9iLCBnYXBNb2RlID0gcHJvcHMuZ2FwTW9kZSwgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiZm9yd2FyZFByb3BzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJyZW1vdmVTY3JvbGxCYXJcIiwgXCJlbmFibGVkXCIsIFwic2hhcmRzXCIsIFwic2lkZUNhclwiLCBcIm5vSXNvbGF0aW9uXCIsIFwiaW5lcnRcIiwgXCJhbGxvd1BpbmNoWm9vbVwiLCBcImFzXCIsIFwiZ2FwTW9kZVwiXSk7XG4gICAgdmFyIFNpZGVDYXIgPSBzaWRlQ2FyO1xuICAgIHZhciBjb250YWluZXJSZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgcGFyZW50UmVmXSk7XG4gICAgdmFyIGNvbnRhaW5lclByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCBjYWxsYmFja3MpO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7IHNpZGVDYXI6IGVmZmVjdENhciwgcmVtb3ZlU2Nyb2xsQmFyOiByZW1vdmVTY3JvbGxCYXIsIHNoYXJkczogc2hhcmRzLCBub0lzb2xhdGlvbjogbm9Jc29sYXRpb24sIGluZXJ0OiBpbmVydCwgc2V0Q2FsbGJhY2tzOiBzZXRDYWxsYmFja3MsIGFsbG93UGluY2hab29tOiAhIWFsbG93UGluY2hab29tLCBsb2NrUmVmOiByZWYsIGdhcE1vZGU6IGdhcE1vZGUgfSkpLFxuICAgICAgICBmb3J3YXJkUHJvcHMgPyAoUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMpLCB7IHJlZjogY29udGFpbmVyUmVmIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIF9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcywgeyBjbGFzc05hbWU6IGNsYXNzTmFtZSwgcmVmOiBjb250YWluZXJSZWYgfSksIGNoaWxkcmVuKSkpKTtcbn0pO1xuUmVtb3ZlU2Nyb2xsLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJlbW92ZVNjcm9sbEJhcjogdHJ1ZSxcbiAgICBpbmVydDogZmFsc2UsXG59O1xuUmVtb3ZlU2Nyb2xsLmNsYXNzTmFtZXMgPSB7XG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGhDbGFzc05hbWUsXG4gICAgemVyb1JpZ2h0OiB6ZXJvUmlnaHRDbGFzc05hbWUsXG59O1xuZXhwb3J0IHsgUmVtb3ZlU2Nyb2xsIH07XG4iLCAiZXhwb3J0IHZhciB6ZXJvUmlnaHRDbGFzc05hbWUgPSAncmlnaHQtc2Nyb2xsLWJhci1wb3NpdGlvbic7XG5leHBvcnQgdmFyIGZ1bGxXaWR0aENsYXNzTmFtZSA9ICd3aWR0aC1iZWZvcmUtc2Nyb2xsLWJhcic7XG5leHBvcnQgdmFyIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSA9ICd3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbic7XG4vKipcbiAqIE5hbWUgb2YgYSBDU1MgdmFyaWFibGUgY29udGFpbmluZyB0aGUgYW1vdW50IG9mIFwiaGlkZGVuXCIgc2Nyb2xsYmFyXG4gKiAhIG1pZ2h0IGJlIHVuZGVmaW5lZCAhIHVzZSB3aWxsIGZhbGxiYWNrIVxuICovXG5leHBvcnQgdmFyIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgPSAnLS1yZW1vdmVkLWJvZHktc2Nyb2xsLWJhci1zaXplJztcbiIsICIvKipcbiAqIEFzc2lnbnMgYSB2YWx1ZSBmb3IgYSBnaXZlbiByZWYsIG5vIG1hdHRlciBvZiB0aGUgcmVmIGZvcm1hdFxuICogQHBhcmFtIHtSZWZPYmplY3R9IHJlZiAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gb3IgcmVmIG9iamVjdFxuICogQHBhcmFtIHZhbHVlIC0gYSBuZXcgdmFsdWVcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiNhc3NpZ25yZWZcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWZPYmplY3QgPSB1c2VSZWYoKTtcbiAqIGNvbnN0IHJlZkZuID0gKHJlZikgPT4gey4uLi59XG4gKlxuICogYXNzaWduUmVmKHJlZk9iamVjdCwgXCJyZWZWYWx1ZVwiKTtcbiAqIGFzc2lnblJlZihyZWZGbiwgXCJyZWZWYWx1ZVwiKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblJlZihyZWYsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZWY7XG59XG4iLCAiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIGNyZWF0ZXMgYSBNdXRhYmxlUmVmIHdpdGggcmVmIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIGluaXRpYWwgcmVmIHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIGEgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdmFsdWUgY2hhbmdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByZWYgPSB1c2VDYWxsYmFja1JlZigwLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiBjb25zb2xlLmxvZyhvbGRWYWx1ZSwgJy0+JywgbmV3VmFsdWUpO1xuICogcmVmLmN1cnJlbnQgPSAxO1xuICogLy8gcHJpbnRzIDAgLT4gMVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXJlZlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlY2FsbGJhY2tyZWYtLS10by1yZXBsYWNlLXJlYWN0dXNlcmVmXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNhbGxiYWNrUmVmKGluaXRpYWxWYWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlU3RhdGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZSxcbiAgICAgICAgLy8gbGFzdCBjYWxsYmFja1xuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIC8vIFwibWVtb2l6ZWRcIiBwdWJsaWMgaW50ZXJmYWNlXG4gICAgICAgIGZhY2FkZToge1xuICAgICAgICAgICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZi52YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgY3VycmVudCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcmVmLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmNhbGxiYWNrKHZhbHVlLCBsYXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pOyB9KVswXTtcbiAgICAvLyB1cGRhdGUgY2FsbGJhY2tcbiAgICByZWYuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICByZXR1cm4gcmVmLmZhY2FkZTtcbn1cbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBhc3NpZ25SZWYgfSBmcm9tICcuL2Fzc2lnblJlZic7XG5pbXBvcnQgeyB1c2VDYWxsYmFja1JlZiB9IGZyb20gJy4vdXNlUmVmJztcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG52YXIgY3VycmVudFZhbHVlcyA9IG5ldyBXZWFrTWFwKCk7XG4vKipcbiAqIE1lcmdlcyB0d28gb3IgbW9yZSByZWZzIHRvZ2V0aGVyIHByb3ZpZGluZyBhIHNpbmdsZSBpbnRlcmZhY2UgdG8gc2V0IHRoZWlyIHZhbHVlXG4gKiBAcGFyYW0ge1JlZk9iamVjdHxSZWZ9IHJlZnNcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fSAtIGEgbmV3IHJlZiwgd2hpY2ggdHJhbnNsYXRlcyBhbGwgY2hhbmdlcyB0byB7cmVmc31cbiAqXG4gKiBAc2VlIHtAbGluayBtZXJnZVJlZnN9IGEgdmVyc2lvbiB3aXRob3V0IGJ1aXQtaW4gbWVtb2l6YXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZW1lcmdlcmVmc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgY29uc3Qgb3duUmVmID0gdXNlUmVmKCk7XG4gKiAgIGNvbnN0IGRvbVJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBvd25SZWZdKTsgLy8gXHVEODNEXHVEQzQ4IG1lcmdlIHRvZ2V0aGVyXG4gKiAgIHJldHVybiA8ZGl2IHJlZj17ZG9tUmVmfT4uLi48L2Rpdj5cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lcmdlUmVmcyhyZWZzLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgY2FsbGJhY2tSZWYgPSB1c2VDYWxsYmFja1JlZihkZWZhdWx0VmFsdWUgfHwgbnVsbCwgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikgeyByZXR1cm4gYXNzaWduUmVmKHJlZiwgbmV3VmFsdWUpOyB9KTtcbiAgICB9KTtcbiAgICAvLyBoYW5kbGUgcmVmcyBjaGFuZ2VzIC0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2xkVmFsdWUgPSBjdXJyZW50VmFsdWVzLmdldChjYWxsYmFja1JlZik7XG4gICAgICAgIGlmIChvbGRWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHByZXZSZWZzXzEgPSBuZXcgU2V0KG9sZFZhbHVlKTtcbiAgICAgICAgICAgIHZhciBuZXh0UmVmc18xID0gbmV3IFNldChyZWZzKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50XzEgPSBjYWxsYmFja1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgcHJldlJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuZXh0UmVmc18xLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICghcHJldlJlZnNfMS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25SZWYocmVmLCBjdXJyZW50XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRWYWx1ZXMuc2V0KGNhbGxiYWNrUmVmLCByZWZzKTtcbiAgICB9LCBbcmVmc10pO1xuICAgIHJldHVybiBjYWxsYmFja1JlZjtcbn1cbiIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XG4gICAgICB2YXIgcmVjID0gZW52LnN0YWNrLnBvcCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlYy5kaXNwb3NlICYmIHJlYy5kaXNwb3NlLmNhbGwocmVjLnZhbHVlKTtcbiAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmZ1bmN0aW9uIEl0b0koYSkge1xuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhc3NpZ25lZCA9IGZhbHNlO1xuICAgIHZhciBtZWRpdW0gPSB7XG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChhc3NpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZWRpdW06IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IG1pZGRsZXdhcmUoZGF0YSwgYXNzaWduZWQpO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggIT09IGl0ZW07IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduU3luY01lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBjYih4KTsgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcjsgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnbk1lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGVjdXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGN5Y2xlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihleGVjdXRlUXVldWUpOyB9O1xuICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUucHVzaCh4KTtcbiAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICByZXR1cm4gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWRlY2FyTWVkaXVtKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBtZWRpdW0gPSBpbm5lckNyZWF0ZU1lZGl1bShudWxsKTtcbiAgICBtZWRpdW0ub3B0aW9ucyA9IF9fYXNzaWduKHsgYXN5bmM6IHRydWUsIHNzcjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1lZGl1bTtcbn1cbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgU2lkZUNhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaWRlQ2FyID0gX2Euc2lkZUNhciwgcmVzdCA9IF9fcmVzdChfYSwgW1wic2lkZUNhclwiXSk7XG4gICAgaWYgKCFzaWRlQ2FyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyJyk7XG4gICAgfVxuICAgIHZhciBUYXJnZXQgPSBzaWRlQ2FyLnJlYWQoKTtcbiAgICBpZiAoIVRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXIgbWVkaXVtIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYXJnZXQsIF9fYXNzaWduKHt9LCByZXN0KSk7XG59O1xuU2lkZUNhci5pc1NpZGVDYXJFeHBvcnQgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFNpZGVjYXIobWVkaXVtLCBleHBvcnRlZCkge1xuICAgIG1lZGl1bS51c2VNZWRpdW0oZXhwb3J0ZWQpO1xuICAgIHJldHVybiBTaWRlQ2FyO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vZGUsIGJvb2wsIHN0cmluZywgYW55LCBhcnJheU9mLCBvbmVPZlR5cGUsIG9iamVjdCwgZnVuYyB9IGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJ2ZvY3VzLWxvY2svY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgaGlkZGVuR3VhcmQgfSBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5pbXBvcnQgeyBmb2N1c1Njb3BlIH0gZnJvbSAnLi9zY29wZSc7XG52YXIgZW1wdHlBcnJheSA9IFtdO1xudmFyIEZvY3VzTG9jayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvY3VzTG9ja1VJKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgdmFyIF9leHRlbmRzMjtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKCksXG4gICAgcmVhbE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzBdLFxuICAgIHNldE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuICB2YXIgb2JzZXJ2ZWQgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGlzQWN0aXZlID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgdmFyIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUyID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIHVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIF9wcm9wcyRkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3Byb3BzJGRpc2FibGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRkaXNhYmxlZCxcbiAgICBfcHJvcHMkbm9Gb2N1c0d1YXJkcyA9IHByb3BzLm5vRm9jdXNHdWFyZHMsXG4gICAgbm9Gb2N1c0d1YXJkcyA9IF9wcm9wcyRub0ZvY3VzR3VhcmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRub0ZvY3VzR3VhcmRzLFxuICAgIF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9IHByb3BzLnBlcnNpc3RlbnRGb2N1cyxcbiAgICBwZXJzaXN0ZW50Rm9jdXMgPSBfcHJvcHMkcGVyc2lzdGVudEZvY3UgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHBlcnNpc3RlbnRGb2N1LFxuICAgIF9wcm9wcyRjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSxcbiAgICBjcm9zc0ZyYW1lID0gX3Byb3BzJGNyb3NzRnJhbWUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkY3Jvc3NGcmFtZSxcbiAgICBfcHJvcHMkYXV0b0ZvY3VzID0gcHJvcHMuYXV0b0ZvY3VzLFxuICAgIGF1dG9Gb2N1cyA9IF9wcm9wcyRhdXRvRm9jdXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkYXV0b0ZvY3VzLFxuICAgIGFsbG93VGV4dFNlbGVjdGlvbiA9IHByb3BzLmFsbG93VGV4dFNlbGVjdGlvbixcbiAgICBncm91cCA9IHByb3BzLmdyb3VwLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB3aGl0ZUxpc3QgPSBwcm9wcy53aGl0ZUxpc3QsXG4gICAgaGFzUG9zaXRpdmVJbmRpY2VzID0gcHJvcHMuaGFzUG9zaXRpdmVJbmRpY2VzLFxuICAgIF9wcm9wcyRzaGFyZHMgPSBwcm9wcy5zaGFyZHMsXG4gICAgc2hhcmRzID0gX3Byb3BzJHNoYXJkcyA9PT0gdm9pZCAwID8gZW1wdHlBcnJheSA6IF9wcm9wcyRzaGFyZHMsXG4gICAgX3Byb3BzJGFzID0gcHJvcHMuYXMsXG4gICAgQ29udGFpbmVyID0gX3Byb3BzJGFzID09PSB2b2lkIDAgPyAnZGl2JyA6IF9wcm9wcyRhcyxcbiAgICBfcHJvcHMkbG9ja1Byb3BzID0gcHJvcHMubG9ja1Byb3BzLFxuICAgIGNvbnRhaW5lclByb3BzID0gX3Byb3BzJGxvY2tQcm9wcyA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkbG9ja1Byb3BzLFxuICAgIFNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLFxuICAgIF9wcm9wcyRyZXR1cm5Gb2N1cyA9IHByb3BzLnJldHVybkZvY3VzLFxuICAgIHNob3VsZFJldHVybkZvY3VzID0gX3Byb3BzJHJldHVybkZvY3VzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRyZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnMgPSBwcm9wcy5mb2N1c09wdGlvbnMsXG4gICAgb25BY3RpdmF0aW9uQ2FsbGJhY2sgPSBwcm9wcy5vbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uRGVhY3RpdmF0aW9uO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBpZCA9IF9SZWFjdCR1c2VTdGF0ZTNbMF07XG4gIHZhciBvbkFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gX3JlZi5jYXB0dXJlRm9jdXNSZXN0b3JlO1xuICAgIGlmICghb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50KSB7XG4gICAgICB2YXIgX2RvY3VtZW50O1xuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSAoX2RvY3VtZW50ID0gZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoYWN0aXZlRWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBjYXB0dXJlRm9jdXNSZXN0b3JlKGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAmJiBvbkFjdGl2YXRpb25DYWxsYmFjaykge1xuICAgICAgb25BY3RpdmF0aW9uQ2FsbGJhY2sob2JzZXJ2ZWQuY3VycmVudCk7XG4gICAgfVxuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSB0cnVlO1xuICAgIHVwZGF0ZSgpO1xuICB9LCBbb25BY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIG9uRGVhY3RpdmF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBpZiAob25EZWFjdGl2YXRpb25DYWxsYmFjaykge1xuICAgICAgb25EZWFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkRlYWN0aXZhdGlvbkNhbGxiYWNrXSk7XG4gIHZhciByZXR1cm5Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChhbGxvd0RlZmVyKSB7XG4gICAgdmFyIGZvY3VzUmVzdG9yZSA9IG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoZm9jdXNSZXN0b3JlKSB7XG4gICAgICB2YXIgcmV0dXJuRm9jdXNUbyA9ICh0eXBlb2YgZm9jdXNSZXN0b3JlID09PSAnZnVuY3Rpb24nID8gZm9jdXNSZXN0b3JlKCkgOiBmb2N1c1Jlc3RvcmUpIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICB2YXIgaG93VG9SZXR1cm5Gb2N1cyA9IHR5cGVvZiBzaG91bGRSZXR1cm5Gb2N1cyA9PT0gJ2Z1bmN0aW9uJyA/IHNob3VsZFJldHVybkZvY3VzKHJldHVybkZvY3VzVG8pIDogc2hvdWxkUmV0dXJuRm9jdXM7XG4gICAgICBpZiAoaG93VG9SZXR1cm5Gb2N1cykge1xuICAgICAgICB2YXIgcmV0dXJuRm9jdXNPcHRpb25zID0gdHlwZW9mIGhvd1RvUmV0dXJuRm9jdXMgPT09ICdvYmplY3QnID8gaG93VG9SZXR1cm5Gb2N1cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93RGVmZXIpIHtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuRm9jdXNUby5mb2N1cyhyZXR1cm5Gb2N1c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2hvdWxkUmV0dXJuRm9jdXNdKTtcbiAgdmFyIG9uRm9jdXMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoaXNBY3RpdmUuY3VycmVudCkge1xuICAgICAgbWVkaXVtRm9jdXMudXNlTWVkaXVtKGV2ZW50KTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdmFyIG9uQmx1ciA9IG1lZGl1bUJsdXIudXNlTWVkaXVtO1xuICB2YXIgc2V0T2JzZXJ2ZU5vZGUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3T2JzZXJ2ZWQpIHtcbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAhPT0gbmV3T2JzZXJ2ZWQpIHtcbiAgICAgIG9ic2VydmVkLmN1cnJlbnQgPSBuZXdPYnNlcnZlZDtcbiAgICAgIHNldE9ic2VydmVkKG5ld09ic2VydmVkKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGFsbG93VGV4dFNlbGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVhY3QtRm9jdXMtTG9jazogYWxsb3dUZXh0U2VsZWN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIGVuYWJsZWQgYnkgZGVmYXVsdCcpO1xuICAgIH1cbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvYnNlcnZlZC5jdXJyZW50ICYmIHR5cGVvZiBDb250YWluZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogY291bGQgbm90IG9idGFpbiByZWYgdG8gaW50ZXJuYWwgbm9kZScpO1xuICAgICAgfVxuICAgIH0sIFtdKTtcbiAgfVxuICB2YXIgbG9ja1Byb3BzID0gX2V4dGVuZHMoKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJbY29uc3RhbnRzLkZPQ1VTX0RJU0FCTEVEXSA9IGRpc2FibGVkICYmICdkaXNhYmxlZCcsIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfR1JPVVBdID0gZ3JvdXAsIF9leHRlbmRzMiksIGNvbnRhaW5lclByb3BzKTtcbiAgdmFyIGhhc0xlYWRpbmdHdWFyZHMgPSBub0ZvY3VzR3VhcmRzICE9PSB0cnVlO1xuICB2YXIgaGFzVGFpbGluZ0d1YXJkcyA9IGhhc0xlYWRpbmdHdWFyZHMgJiYgbm9Gb2N1c0d1YXJkcyAhPT0gJ3RhaWwnO1xuICB2YXIgbWVyZ2VkUmVmID0gdXNlTWVyZ2VSZWZzKFtwYXJlbnRSZWYsIHNldE9ic2VydmVOb2RlXSk7XG4gIHZhciBmb2N1c1Njb3BlVmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2ZWQ6IG9ic2VydmVkLFxuICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICBlbmFibGVkOiAhZGlzYWJsZWQsXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlLmN1cnJlbnRcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGlzQWN0aXZlLmN1cnJlbnQsIHNoYXJkcywgcmVhbE9ic2VydmVkXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGFzTGVhZGluZ0d1YXJkcyAmJiBbXG4gIC8qI19fUFVSRV9fKi9cbiAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgaGFzUG9zaXRpdmVJbmRpY2VzID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1uZWFyZXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAxLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSA6IG51bGxdLCAhZGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwge1xuICAgIGlkOiBpZCxcbiAgICBzaWRlQ2FyOiBtZWRpdW1TaWRlY2FyLFxuICAgIG9ic2VydmVkOiByZWFsT2JzZXJ2ZWQsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHBlcnNpc3RlbnRGb2N1czogcGVyc2lzdGVudEZvY3VzLFxuICAgIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgd2hpdGVMaXN0OiB3aGl0ZUxpc3QsXG4gICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLFxuICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBtZXJnZWRSZWZcbiAgfSwgbG9ja1Byb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoZm9jdXNTY29wZS5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBmb2N1c1Njb3BlVmFsdWVcbiAgfSwgY2hpbGRyZW4pKSwgaGFzVGFpbGluZ0d1YXJkcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59KTtcbkZvY3VzTG9jay5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBub2RlLFxuICBkaXNhYmxlZDogYm9vbCxcbiAgcmV0dXJuRm9jdXM6IG9uZU9mVHlwZShbYm9vbCwgb2JqZWN0LCBmdW5jXSksXG4gIGZvY3VzT3B0aW9uczogb2JqZWN0LFxuICBub0ZvY3VzR3VhcmRzOiBib29sLFxuICBoYXNQb3NpdGl2ZUluZGljZXM6IGJvb2wsXG4gIGFsbG93VGV4dFNlbGVjdGlvbjogYm9vbCxcbiAgYXV0b0ZvY3VzOiBib29sLFxuICBwZXJzaXN0ZW50Rm9jdXM6IGJvb2wsXG4gIGNyb3NzRnJhbWU6IGJvb2wsXG4gIGdyb3VwOiBzdHJpbmcsXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICB3aGl0ZUxpc3Q6IGZ1bmMsXG4gIHNoYXJkczogYXJyYXlPZihhbnkpLFxuICBhczogb25lT2ZUeXBlKFtzdHJpbmcsIGZ1bmMsIG9iamVjdF0pLFxuICBsb2NrUHJvcHM6IG9iamVjdCxcbiAgb25BY3RpdmF0aW9uOiBmdW5jLFxuICBvbkRlYWN0aXZhdGlvbjogZnVuYyxcbiAgc2lkZUNhcjogYW55LmlzUmVxdWlyZWRcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9jazsiLCAiLyoqXG4gKiBkZWZpbmVzIGEgZm9jdXMgZ3JvdXBcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19HUk9VUCA9ICdkYXRhLWZvY3VzLWxvY2snO1xuLyoqXG4gKiBkaXNhYmxlcyBlbGVtZW50IGRpc2NvdmVyeSBpbnNpZGUgYSBncm91cCBtYXJrZWQgYnkga2V5XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfRElTQUJMRUQgPSAnZGF0YS1mb2N1cy1sb2NrLWRpc2FibGVkJztcbi8qKlxuICogYWxsb3dzIHVuY29udHJvbGxlZCBmb2N1cyB3aXRoaW4gdGhlIG1hcmtlZCBhcmVhLCBlZmZlY3RpdmVseSBkaXNhYmxpbmcgZm9jdXMgbG9jayBmb3IgaXQncyBjb250ZW50XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfQUxMT1cgPSAnZGF0YS1uby1mb2N1cy1sb2NrJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyBlbmdpbmUgdG8gcGljayBkZWZhdWx0IGF1dG9mb2N1cyBpbnNpZGUgYSBnaXZlbiBub2RlXG4gKiBjYW4gYmUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIGNvbnRhaW5lclxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FVVE8gPSAnZGF0YS1hdXRvZm9jdXMtaW5zaWRlJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyB0byBpZ25vcmUgZWxlbWVudHMgd2l0aGluIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19OT19BVVRPRk9DVVMgPSAnZGF0YS1uby1hdXRvZm9jdXMnO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5leHBvcnQgdmFyIGhpZGRlbkd1YXJkID0ge1xuICB3aWR0aDogJzFweCcsXG4gIGhlaWdodDogJzBweCcsXG4gIHBhZGRpbmc6IDAsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHRvcDogJzFweCcsXG4gIGxlZnQ6ICcxcHgnXG59O1xudmFyIEluRm9jdXNHdWFyZCA9IGZ1bmN0aW9uIEluRm9jdXNHdWFyZChfcmVmKSB7XG4gIHZhciBfcmVmJGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWYkY2hpbGRyZW4gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGNoaWxkcmVuO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgY2hpbGRyZW4sIGNoaWxkcmVuICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtbGFzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pKTtcbn07XG5JbkZvY3VzR3VhcmQucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEluRm9jdXNHdWFyZDsiLCAiaW1wb3J0IHsgY3JlYXRlTWVkaXVtLCBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBtZWRpdW1Gb2N1cyA9IGNyZWF0ZU1lZGl1bSh7fSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQgPSBfcmVmLmN1cnJlbnRUYXJnZXQ7XG4gIHJldHVybiB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufSk7XG5leHBvcnQgdmFyIG1lZGl1bUJsdXIgPSBjcmVhdGVNZWRpdW0oKTtcbmV4cG9ydCB2YXIgbWVkaXVtRWZmZWN0ID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bVNpZGVjYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKHtcbiAgYXN5bmM6IHRydWUsXG4gIHNzcjogdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xufSk7IiwgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIGZvY3VzU2NvcGUgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpOyIsICJleHBvcnQgZnVuY3Rpb24gZGVmZXJBY3Rpb24oYWN0aW9uKSB7XG4gIHNldFRpbWVvdXQoYWN0aW9uLCAxKTtcbn1cbmV4cG9ydCB2YXIgaW5saW5lUHJvcCA9IGZ1bmN0aW9uIGlubGluZVByb3AobmFtZSwgdmFsdWUpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBvYmpbbmFtZV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn07XG5leHBvcnQgdmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiBleHRyYWN0UmVmKHJlZikge1xuICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07IiwgImltcG9ydCBGb2N1c0xvY2tVSSBmcm9tICcuL0xvY2snO1xuaW1wb3J0IEF1dG9Gb2N1c0luc2lkZSBmcm9tICcuL0F1dG9Gb2N1c0luc2lkZSc7XG5pbXBvcnQgTW92ZUZvY3VzSW5zaWRlLCB7IHVzZUZvY3VzSW5zaWRlIH0gZnJvbSAnLi9Nb3ZlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEZyZWVGb2N1c0luc2lkZSBmcm9tICcuL0ZyZWVGb2N1c0luc2lkZSc7XG5pbXBvcnQgSW5Gb2N1c0d1YXJkIGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUgfSBmcm9tICcuL3VzZS1mb2N1cy1zY29wZSc7XG5pbXBvcnQgeyB1c2VGb2N1c1N0YXRlIH0gZnJvbSAnLi91c2UtZm9jdXMtc3RhdGUnO1xuZXhwb3J0IHsgQXV0b0ZvY3VzSW5zaWRlLCBNb3ZlRm9jdXNJbnNpZGUsIEZyZWVGb2N1c0luc2lkZSwgSW5Gb2N1c0d1YXJkLCBGb2N1c0xvY2tVSSwgdXNlRm9jdXNJbnNpZGUsIHVzZUZvY3VzQ29udHJvbGxlciwgdXNlRm9jdXNTY29wZSwgdXNlRm9jdXNTdGF0ZSB9O1xuZXhwb3J0IGRlZmF1bHQgRm9jdXNMb2NrVUk7IiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbmV4cG9ydCB2YXIgZm9jdXNIaWRkZW5NYXJrZXIgPSAnZGF0YS1mb2N1cy1vbi1oaWRkZW4nO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IHsgbW92ZUZvY3VzSW5zaWRlLCBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZXhwYW5kRm9jdXNhYmxlTm9kZXMsIGZvY3VzTmV4dEVsZW1lbnQsIGZvY3VzUHJldkVsZW1lbnQsIGZvY3VzRmlyc3RFbGVtZW50LCBmb2N1c0xhc3RFbGVtZW50LCBjYXB0dXJlRm9jdXNSZXN0b3JlIH0gZnJvbSAnZm9jdXMtbG9jayc7XG5pbXBvcnQgeyBkZWZlckFjdGlvbiwgZXh0cmFjdFJlZiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtRWZmZWN0IH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIGZvY3VzT25Cb2R5ID0gZnVuY3Rpb24gZm9jdXNPbkJvZHkoKSB7XG4gIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5O1xufTtcbnZhciBpc0ZyZWVGb2N1cyA9IGZ1bmN0aW9uIGlzRnJlZUZvY3VzKCkge1xuICByZXR1cm4gZm9jdXNPbkJvZHkoKSB8fCBmb2N1c0lzSGlkZGVuKCk7XG59O1xudmFyIGxhc3RBY3RpdmVUcmFwID0gbnVsbDtcbnZhciBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xudmFyIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSBudWxsO1xudmFyIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAod29ya2luZ05vZGUpIHtcbiAgICAgIHZhciB3b3JraW5nQXJlYSA9IFt3b3JraW5nTm9kZV0uY29uY2F0KHNoYXJkcy5tYXAoZXh0cmFjdFJlZikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCBmb2N1c1doaXRlbGlzdGVkKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChwZXJzaXN0ZW50Rm9jdXMgfHwgZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWUpIHx8ICFpc0ZyZWVGb2N1cygpIHx8ICFsYXN0QWN0aXZlRm9jdXMgJiYgYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgaWYgKHdvcmtpbmdOb2RlICYmICEoZm9jdXNJbnNpZGUod29ya2luZ0FyZWEpIHx8IGFjdGl2ZUVsZW1lbnQgJiYgd2l0aGluSG9zdChhY3RpdmVFbGVtZW50LCB3b3JraW5nQXJlYSkgfHwgZm9jdXNJc1BvcnRhbGVkUGFpcihhY3RpdmVFbGVtZW50LCB3b3JraW5nTm9kZSkpKSB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgIWxhc3RBY3RpdmVGb2N1cyAmJiBhY3RpdmVFbGVtZW50ICYmICFhdXRvRm9jdXMpIHtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQuYmx1cikge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IG1vdmVGb2N1c0luc2lkZSh3b3JraW5nQXJlYSwgbGFzdEFjdGl2ZUZvY3VzLCB7XG4gICAgICAgICAgICAgICAgZm9jdXNPcHRpb25zOiBmb2N1c09wdGlvbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG4gICAgICAgICAgbGFzdEFjdGl2ZUZvY3VzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9KS5pbmRleE9mKG5ld0FjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBhbGxOb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICB2YXIgZ3VhcmQgPSBfcmVmMi5ndWFyZCxcbiAgICAgICAgICAgICAgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gZ3VhcmQgJiYgbm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkO1xuICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYzLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgYWxsTm9kZXMubGVuZ3RoLCArMSwgYWxsTm9kZXMpO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIC0xLCAtMSwgYWxsTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xudmFyIG9uVHJhcCA9IGZ1bmN0aW9uIG9uVHJhcChldmVudCkge1xuICBpZiAoYWN0aXZhdGVUcmFwKCkgJiYgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgcmV0dXJuIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG59O1xudmFyIG9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gIHZhciBzb3VyY2UgPSBldmVudC50YXJnZXQ7XG4gIHZhciBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmICghY3VycmVudE5vZGUuY29udGFpbnMoc291cmNlKSkge1xuICAgIHJlY29yZFBvcnRhbChjdXJyZW50Tm9kZSwgc291cmNlKTtcbiAgfVxufTtcbnZhciBGb2N1c1dhdGNoZXIgPSBmdW5jdGlvbiBGb2N1c1dhdGNoZXIoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBGb2N1c1RyYXAgPSBmdW5jdGlvbiBGb2N1c1RyYXAoX3JlZjQpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9LCBjaGlsZHJlbik7XG59O1xuRm9jdXNUcmFwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn0gOiB7fTtcbnZhciBvbldpbmRvd0JsdXIgPSBmdW5jdGlvbiBvbldpbmRvd0JsdXIoKSB7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG52YXIgZGV0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGRldGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG5mdW5jdGlvbiByZWR1Y2VQcm9wc1RvU3RhdGUocHJvcHNMaXN0KSB7XG4gIHJldHVybiBwcm9wc0xpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBkaXNhYmxlZCA9IF9yZWY1LmRpc2FibGVkO1xuICAgIHJldHVybiAhZGlzYWJsZWQ7XG4gIH0pO1xufVxudmFyIGZvY3VzTG9ja0FQSSA9IHtcbiAgbW92ZUZvY3VzSW5zaWRlOiBtb3ZlRm9jdXNJbnNpZGUsXG4gIGZvY3VzSW5zaWRlOiBmb2N1c0luc2lkZSxcbiAgZm9jdXNOZXh0RWxlbWVudDogZm9jdXNOZXh0RWxlbWVudCxcbiAgZm9jdXNQcmV2RWxlbWVudDogZm9jdXNQcmV2RWxlbWVudCxcbiAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZvY3VzRmlyc3RFbGVtZW50LFxuICBmb2N1c0xhc3RFbGVtZW50OiBmb2N1c0xhc3RFbGVtZW50LFxuICBjYXB0dXJlRm9jdXNSZXN0b3JlOiBjYXB0dXJlRm9jdXNSZXN0b3JlXG59O1xuZnVuY3Rpb24gaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCh0cmFwcykge1xuICB2YXIgdHJhcCA9IHRyYXBzLnNsaWNlKC0xKVswXTtcbiAgaWYgKHRyYXAgJiYgIWxhc3RBY3RpdmVUcmFwKSB7XG4gICAgYXR0YWNoSGFuZGxlcigpO1xuICB9XG4gIHZhciBsYXN0VHJhcCA9IGxhc3RBY3RpdmVUcmFwO1xuICB2YXIgc2FtZVRyYXAgPSBsYXN0VHJhcCAmJiB0cmFwICYmIHRyYXAuaWQgPT09IGxhc3RUcmFwLmlkO1xuICBsYXN0QWN0aXZlVHJhcCA9IHRyYXA7XG4gIGlmIChsYXN0VHJhcCAmJiAhc2FtZVRyYXApIHtcbiAgICBsYXN0VHJhcC5vbkRlYWN0aXZhdGlvbigpO1xuICAgIGlmICghdHJhcHMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGlkID0gX3JlZjYuaWQ7XG4gICAgICByZXR1cm4gaWQgPT09IGxhc3RUcmFwLmlkO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgbGFzdFRyYXAucmV0dXJuRm9jdXMoIXRyYXApO1xuICAgIH1cbiAgfVxuICBpZiAodHJhcCkge1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gICAgaWYgKCFzYW1lVHJhcCB8fCBsYXN0VHJhcC5vYnNlcnZlZCAhPT0gdHJhcC5vYnNlcnZlZCkge1xuICAgICAgdHJhcC5vbkFjdGl2YXRpb24oZm9jdXNMb2NrQVBJKTtcbiAgICB9XG4gICAgYWN0aXZhdGVUcmFwKHRydWUpO1xuICAgIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG4gIH0gZWxzZSB7XG4gICAgZGV0YWNoSGFuZGxlcigpO1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gIH1cbn1cbm1lZGl1bUZvY3VzLmFzc2lnblN5bmNNZWRpdW0ob25Gb2N1cyk7XG5tZWRpdW1CbHVyLmFzc2lnbk1lZGl1bShvbkJsdXIpO1xubWVkaXVtRWZmZWN0LmFzc2lnbk1lZGl1bShmdW5jdGlvbiAoY2IpIHtcbiAgcmV0dXJuIGNiKGZvY3VzTG9ja0FQSSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkoRm9jdXNXYXRjaGVyKTsiLCAiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2UodCwgbykge1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHNldFByb3RvdHlwZU9mKHQsIG8pO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzTG9vc2UgYXMgZGVmYXVsdCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5JztcbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB3aXRoU2lkZUVmZmVjdChyZWR1Y2VQcm9wc1RvU3RhdGUsIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICh0eXBlb2YgcmVkdWNlUHJvcHNUb1N0YXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlZHVjZVByb3BzVG9TdGF0ZSB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIFdyYXBwZWRDb21wb25lbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBXcmFwcGVkQ29tcG9uZW50IHRvIGJlIGEgUmVhY3QgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtb3VudGVkSW5zdGFuY2VzID0gW107XG4gICAgdmFyIHN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICAgIHN0YXRlID0gcmVkdWNlUHJvcHNUb1N0YXRlKG1vdW50ZWRJbnN0YW5jZXMubWFwKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvcHM7XG4gICAgICB9KSk7XG4gICAgICBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgU2lkZUVmZmVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0c0xvb3NlKFNpZGVFZmZlY3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gU2lkZUVmZmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIF9QdXJlQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IHRvIHVzZSBkaXNwbGF5TmFtZSBvZiB3cmFwcGVkIGNvbXBvbmVudFxuICAgICAgU2lkZUVmZmVjdC5wZWVrID0gZnVuY3Rpb24gcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfTtcblxuICAgICAgdmFyIF9wcm90byA9IFNpZGVFZmZlY3QucHJvdG90eXBlO1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgbW91bnRlZEluc3RhbmNlcy5wdXNoKHRoaXMpO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgICB9O1xuXG4gICAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbW91bnRlZEluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCB0aGlzLnByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICAgIH0oUHVyZUNvbXBvbmVudCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoU2lkZUVmZmVjdCwgXCJkaXNwbGF5TmFtZVwiLCBcIlNpZGVFZmZlY3QoXCIgKyBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSArIFwiKVwiKTtcblxuICAgIHJldHVybiBTaWRlRWZmZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2lkZUVmZmVjdDtcbiIsICIvKlxuSUUxMSBzdXBwb3J0XG4gKi9cbmV4cG9ydCB2YXIgdG9BcnJheSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHJldCA9IEFycmF5KGEubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmV0W2ldID0gYVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5leHBvcnQgdmFyIGFzQXJyYXkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogW2FdKTsgfTtcbmV4cG9ydCB2YXIgZ2V0Rmlyc3QgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gKEFycmF5LmlzQXJyYXkoYSkgPyBhWzBdIDogYSk7IH07XG4iLCAiaW1wb3J0IHsgRk9DVVNfTk9fQVVUT0ZPQ1VTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbnZhciBpc0VsZW1lbnRIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHdlIGNhbiBtZWFzdXJlIG9ubHkgXCJlbGVtZW50c1wiXG4gICAgLy8gY29uc2lkZXIgb3RoZXJzIGFzIFwidmlzaWJsZVwiXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKTtcbiAgICBpZiAoIWNvbXB1dGVkU3R5bGUgfHwgIWNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5JykgPT09ICdub25lJyB8fCBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKSA9PT0gJ2hpZGRlbicpO1xufTtcbnZhciBnZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIGNhbiBhbHNvIHBvaW50IG9uIFNoYWRvd1Jvb3QuIEluIHRoaXMgY2FzZSAuaG9zdCB3aWxsIHBvaW50IG9uIHRoZSBuZXh0IG5vZGVcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlICYmIG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFXG4gICAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5ob3N0XG4gICAgICAgIDogbm9kZS5wYXJlbnROb2RlO1xufTtcbnZhciBpc1RvcE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZSA9PT0gZG9jdW1lbnQgfHwgKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKTtcbn07XG52YXIgaXNJbmVydCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZSgnaW5lcnQnKTsgfTtcbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tL2Jsb2IvbWFpbi9zcmMvdG8tYmUtdmlzaWJsZS5qc1xuICovXG52YXIgaXNWaXNpYmxlVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gIW5vZGUgfHwgaXNUb3BOb2RlKG5vZGUpIHx8ICghaXNFbGVtZW50SGlkZGVuKG5vZGUpICYmICFpc0luZXJ0KG5vZGUpICYmIGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpKTtcbn07XG5leHBvcnQgdmFyIGlzVmlzaWJsZUNhY2hlZCA9IGZ1bmN0aW9uICh2aXNpYmlsaXR5Q2FjaGUsIG5vZGUpIHtcbiAgICB2YXIgY2FjaGVkID0gdmlzaWJpbGl0eUNhY2hlLmdldChub2RlKTtcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGlzVmlzaWJsZVVuY2FjaGVkKG5vZGUsIGlzVmlzaWJsZUNhY2hlZC5iaW5kKHVuZGVmaW5lZCwgdmlzaWJpbGl0eUNhY2hlKSk7XG4gICAgdmlzaWJpbGl0eUNhY2hlLnNldChub2RlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIGlzQXV0b0ZvY3VzQWxsb3dlZFVuY2FjaGVkID0gZnVuY3Rpb24gKG5vZGUsIGNoZWNrUGFyZW50KSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgIWlzVG9wTm9kZShub2RlKSA/IChpc0F1dG9Gb2N1c0FsbG93ZWQobm9kZSkgPyBjaGVja1BhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKSA6IGZhbHNlKSA6IHRydWU7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQgPSBmdW5jdGlvbiAoY2FjaGUsIG5vZGUpIHtcbiAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQobm9kZSwgaXNBdXRvRm9jdXNBbGxvd2VkQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCBjYWNoZSkpO1xuICAgIGNhY2hlLnNldChub2RlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IHZhciBnZXREYXRhc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5vZGUuZGF0YXNldDtcbn07XG5leHBvcnQgdmFyIGlzSFRNTEJ1dHRvbkVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnQlVUVE9OJzsgfTtcbmV4cG9ydCB2YXIgaXNIVE1MSW5wdXRFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJzsgfTtcbmV4cG9ydCB2YXIgaXNSYWRpb0VsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcbmV4cG9ydCB2YXIgbm90SGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiAhKChpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkgfHwgaXNIVE1MQnV0dG9uRWxlbWVudChub2RlKSkgJiYgKG5vZGUudHlwZSA9PT0gJ2hpZGRlbicgfHwgbm9kZS5kaXNhYmxlZCkpO1xufTtcbmV4cG9ydCB2YXIgaXNBdXRvRm9jdXNBbGxvd2VkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoRk9DVVNfTk9fQVVUT0ZPQ1VTKTtcbiAgICByZXR1cm4gIVt0cnVlLCAndHJ1ZScsICcnXS5pbmNsdWRlcyhhdHRyaWJ1dGUpO1xufTtcbmV4cG9ydCB2YXIgaXNHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHZhciBfYTsgcmV0dXJuIEJvb2xlYW4obm9kZSAmJiAoKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzR3VhcmQpKTsgfTtcbmV4cG9ydCB2YXIgaXNOb3RBR3VhcmQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gIWlzR3VhcmQobm9kZSk7IH07XG5leHBvcnQgdmFyIGlzRGVmaW5lZCA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmV4cG9ydCB2YXIgdGFiU29ydCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGFUYWIgPSBNYXRoLm1heCgwLCBhLnRhYkluZGV4KTtcbiAgICB2YXIgYlRhYiA9IE1hdGgubWF4KDAsIGIudGFiSW5kZXgpO1xuICAgIHZhciB0YWJEaWZmID0gYVRhYiAtIGJUYWI7XG4gICAgdmFyIGluZGV4RGlmZiA9IGEuaW5kZXggLSBiLmluZGV4O1xuICAgIGlmICh0YWJEaWZmKSB7XG4gICAgICAgIGlmICghYVRhYikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYkRpZmYgfHwgaW5kZXhEaWZmO1xufTtcbnZhciBnZXRUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgICAgIC8vIGFsbCBcImZvY3VzYWJsZVwiIGVsZW1lbnRzIGFyZSBhbHJlYWR5IHByZXNlbGVjdGVkXG4gICAgICAgIC8vIGJ1dCBzb21lIG1pZ2h0IGhhdmUgaW1wbGljaXQgbmVnYXRpdmUgdGFiSW5kZXhcbiAgICAgICAgLy8gcmV0dXJuIDAgZm9yIDxhdWRpbyB3aXRob3V0IHRhYkluZGV4IGF0dHJpYnV0ZSAtIGl0IGlzIFwidGFiYmFibGVcIlxuICAgICAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5leHBvcnQgdmFyIG9yZGVyQnlUYWJJbmRleCA9IGZ1bmN0aW9uIChub2RlcywgZmlsdGVyTmVnYXRpdmUsIGtlZXBHdWFyZHMpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gZ2V0VGFiSW5kZXgobm9kZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdGFiSW5kZXg6IGtlZXBHdWFyZHMgJiYgdGFiSW5kZXggPT09IC0xID8gKChub2RlLmRhdGFzZXQgfHwge30pLmZvY3VzR3VhcmQgPyAwIDogLTEpIDogdGFiSW5kZXgsXG4gICAgICAgIH07XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gIWZpbHRlck5lZ2F0aXZlIHx8IGRhdGEudGFiSW5kZXggPj0gMDsgfSlcbiAgICAgICAgLnNvcnQodGFiU29ydCk7XG59O1xuIiwgIi8qKlxuICogbGlzdCBvZiB0aGUgb2JqZWN0IHRvIGJlIGNvbnNpZGVyZWQgYXMgZm9jdXNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgdGFiYmFibGVzID0gW1xuICAgICdidXR0b246ZW5hYmxlZCcsXG4gICAgJ3NlbGVjdDplbmFibGVkJyxcbiAgICAndGV4dGFyZWE6ZW5hYmxlZCcsXG4gICAgJ2lucHV0OmVuYWJsZWQnLFxuICAgIC8vIGVsZW1lbnRzIHdpdGggZXhwbGljaXQgcm9sZXMgd2lsbCBhbHNvIHVzZSBleHBsaWNpdCB0YWJpbmRleFxuICAgIC8vICdbcm9sZT1cImJ1dHRvblwiXScsXG4gICAgJ2FbaHJlZl0nLFxuICAgICdhcmVhW2hyZWZdJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ2lmcmFtZScsXG4gICAgJ29iamVjdCcsXG4gICAgJ2VtYmVkJyxcbiAgICAnYXVkaW9bY29udHJvbHNdJyxcbiAgICAndmlkZW9bY29udHJvbHNdJyxcbiAgICAnW3RhYmluZGV4XScsXG4gICAgJ1tjb250ZW50ZWRpdGFibGVdJyxcbiAgICAnW2F1dG9mb2N1c10nLFxuXTtcbiIsICJpbXBvcnQgeyBGT0NVU19BVVRPIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IHRhYmJhYmxlcyB9IGZyb20gJy4vdGFiYmFibGVzJztcbnZhciBxdWVyeVRhYmJhYmxlcyA9IHRhYmJhYmxlcy5qb2luKCcsJyk7XG52YXIgcXVlcnlHdWFyZFRhYmJhYmxlcyA9IFwiXCIuY29uY2F0KHF1ZXJ5VGFiYmFibGVzLCBcIiwgW2RhdGEtZm9jdXMtZ3VhcmRdXCIpO1xudmFyIGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tID0gZnVuY3Rpb24gKHBhcmVudCwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KChwYXJlbnQuc2hhZG93Um9vdCB8fCBwYXJlbnQpLmNoaWxkcmVuKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY2hpbGQubWF0Y2hlcyh3aXRoR3VhcmRzID8gcXVlcnlHdWFyZFRhYmJhYmxlcyA6IHF1ZXJ5VGFiYmFibGVzKSA/IFtjaGlsZF0gOiBbXSwgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20oY2hpbGQpKTtcbiAgICB9LCBbXSk7XG59O1xudmFyIGdldEZvY3VzYWJsZXNXaXRoSUZyYW1lID0gZnVuY3Rpb24gKHBhcmVudCwgd2l0aEd1YXJkcykge1xuICAgIHZhciBfYTtcbiAgICAvLyBjb250ZW50RG9jdW1lbnQgb2YgaWZyYW1lIHdpbGwgYmUgbnVsbCBpZiBjdXJyZW50IG9yaWdpbiBjYW5ub3QgYWNjZXNzIGl0XG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50ICYmICgoX2EgPSBwYXJlbnQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvY3VzYWJsZXMoW3BhcmVudC5jb250ZW50RG9jdW1lbnQuYm9keV0sIHdpdGhHdWFyZHMpO1xuICAgIH1cbiAgICByZXR1cm4gW3BhcmVudF07XG59O1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudHMsIHdpdGhHdWFyZHMpIHtcbiAgICByZXR1cm4gcGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGFyZW50KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20gPSBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShwYXJlbnQsIHdpdGhHdWFyZHMpO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aElmcmFtZXMgPSAoX2EgPSBbXSkuY29uY2F0LmFwcGx5KF9hLCBmb2N1c2FibGVXaXRoU2hhZG93RG9tLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUobm9kZSwgd2l0aEd1YXJkcyk7IH0pKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoXG4gICAgICAgIC8vIGFkZCBhbGwgdGFiYmFibGVzIGluc2lkZSBhbmQgd2l0aGluIHNoYWRvdyBET01zIGluIERPTSBvcmRlclxuICAgICAgICBmb2N1c2FibGVXaXRoSWZyYW1lcywgXG4gICAgICAgIC8vIGFkZCBpZiBub2RlIGlzIHRhYmJhYmxlIGl0c2VsZlxuICAgICAgICBwYXJlbnQucGFyZW50Tm9kZVxuICAgICAgICAgICAgPyB0b0FycmF5KHBhcmVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlUYWJiYWJsZXMpKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUgPT09IHBhcmVudDsgfSlcbiAgICAgICAgICAgIDogW10pO1xuICAgIH0sIFtdKTtcbn07XG4vKipcbiAqIHJldHVybiBhIGxpc3Qgb2YgZm9jdXNhYmxlIG5vZGVzIHdpdGhpbiBhbiBhcmVhIG1hcmtlZCBhcyBcImF1dG8tZm9jdXNhYmxlXCJcbiAqIEBwYXJhbSBwYXJlbnRcbiAqL1xuZXhwb3J0IHZhciBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICB2YXIgcGFyZW50Rm9jdXMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQVVUTywgXCJdXCIpKTtcbiAgICByZXR1cm4gdG9BcnJheShwYXJlbnRGb2N1cylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbbm9kZV0pOyB9KVxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5vZGVzKSB7IHJldHVybiBhY2MuY29uY2F0KG5vZGVzKTsgfSwgW10pO1xufTtcbiIsICJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQsIGlzVmlzaWJsZUNhY2hlZCwgbm90SGlkZGVuSW5wdXQgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IG9yZGVyQnlUYWJJbmRleCB9IGZyb20gJy4vdGFiT3JkZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcywgZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL3RhYlV0aWxzJztcbi8qKlxuICogZ2l2ZW4gbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMga2VlcHMgdGhlIG9uZXMgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aFxuICogQHBhcmFtIG5vZGVzXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgZmlsdGVyRm9jdXNhYmxlID0gZnVuY3Rpb24gKG5vZGVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gdG9BcnJheShub2RlcylcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gaXNWaXNpYmxlQ2FjaGVkKHZpc2liaWxpdHlDYWNoZSwgbm9kZSk7IH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vdEhpZGRlbklucHV0KG5vZGUpOyB9KTtcbn07XG5leHBvcnQgdmFyIGZpbHRlckF1dG9Gb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIGNhY2hlKSB7XG4gICAgaWYgKGNhY2hlID09PSB2b2lkIDApIHsgY2FjaGUgPSBuZXcgTWFwKCk7IH1cbiAgICByZXR1cm4gdG9BcnJheShub2RlcykuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQoY2FjaGUsIG5vZGUpOyB9KTtcbn07XG4vKipcbiAqICFfX1dBUk5JTkdfXyEgTG93IGxldmVsIEFQSS5cbiAqIEByZXR1cm5zIGFsbCB0YWJiYWJsZSBub2Rlc1xuICpcbiAqIEBzZWUge0BsaW5rIGdldEZvY3VzYWJsZU5vZGVzfSB0byBnZXQgYW55IGZvY3VzYWJsZSBlbGVtZW50XG4gKlxuICogQHBhcmFtIHRvcE5vZGVzIC0gYXJyYXkgb2YgdG9wIGxldmVsIEhUTUxFbGVtZW50cyB0byBzZWFyY2ggaW5zaWRlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlIC0gYW4gY2FjaGUgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIG1lYXN1cmVtZW50cy4gRXhwZWN0ZWQgdG8gYmUgYSBmcmVzaCBgbmV3IE1hcGAgb24gZXZlcnkgY2FsbFxuICovXG5leHBvcnQgdmFyIGdldFRhYmJhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSwgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMsIHdpdGhHdWFyZHMpLCB2aXNpYmlsaXR5Q2FjaGUpLCB0cnVlLCB3aXRoR3VhcmRzKTtcbn07XG4vKipcbiAqICFfX1dBUk5JTkdfXyEgTG93IGxldmVsIEFQSS5cbiAqXG4gKiBAcmV0dXJucyBhbnl0aGluZyBcImZvY3VzYWJsZVwiLCBub3Qgb25seSB0YWJiYWJsZS4gVGhlIGRpZmZlcmVuY2UgaXMgaW4gYHRhYkluZGV4PS0xYFxuICogKHdpdGhvdXQgZ3VhcmRzLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCB0byBiZSBldmVyIGZvY3VzZWQpXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0VGFiYmFibGVOb2Rlc30gdG8gZ2V0IG9ubHkgdGFiYmxlIG5vZGVzIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0Rm9jdXNhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBvcmRlckJ5VGFiSW5kZXgoZmlsdGVyRm9jdXNhYmxlKGdldEZvY3VzYWJsZXModG9wTm9kZXMpLCB2aXNpYmlsaXR5Q2FjaGUpLCBmYWxzZSk7XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0by1mb2N1c2VkXG4gKiBAcGFyYW0gdG9wTm9kZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIHBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHRvcE5vZGUsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBmaWx0ZXJGb2N1c2FibGUoZ2V0UGFyZW50QXV0b2ZvY3VzYWJsZXModG9wTm9kZSksIHZpc2liaWxpdHlDYWNoZSk7XG59O1xuLypcbiAqIERldGVybWluZXMgaWYgZWxlbWVudCBpcyBjb250YWluZWQgaW4gc2NvcGUsIGluY2x1ZGluZyBuZXN0ZWQgc2hhZG93IERPTXNcbiAqL1xuZXhwb3J0IHZhciBjb250YWlucyA9IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xuICAgIGlmIChzY29wZS5zaGFkb3dSb290KSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhzY29wZS5zaGFkb3dSb290LCBlbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2NvcGUpLmNvbnRhaW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMuY2FsbChzY29wZSwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b0FycmF5KHNjb3BlLmNoaWxkcmVuKS5zb21lKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWZyYW1lQm9keSA9IChfYSA9IGNoaWxkLmNvbnRlbnREb2N1bWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKGlmcmFtZUJvZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGlmcmFtZUJvZHksIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbnMoY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IEZPQ1VTX0RJU0FCTEVELCBGT0NVU19HUk9VUCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhc0FycmF5LCB0b0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG4vKipcbiAqIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXMgbmVzdGVkIGluc2lkZSBlYWNoIG90aGVyXG4gKiBrZWVwcyBvbmx5IHRvcCBvbmVzXG4gKiB0aGlzIGlzIE8obmxvZ24pXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZmlsdGVyTmVzdGVkID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgdmFyIGNvbnRhaW5lZCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgbCA9IG5vZGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkgKz0gMSkge1xuICAgICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBsOyBqICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IG5vZGVzW2ldLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGVzW2pdKTtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cbiAgICAgICAgICAgIGlmICgocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVkLmFkZChqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocG9zaXRpb24gJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiAhY29udGFpbmVkLmhhcyhpbmRleCk7IH0pO1xufTtcbi8qKlxuICogZmluZHMgdG9wIG1vc3QgcGFyZW50IGZvciBhIG5vZGVcbiAqIEBwYXJhbSBub2RlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xudmFyIGdldFRvcFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZSA/IGdldFRvcFBhcmVudChub2RlLnBhcmVudE5vZGUpIDogbm9kZTtcbn07XG4vKipcbiAqIHJldHVybnMgYWxsIFwiZm9jdXMgY29udGFpbmVyc1wiIGluc2lkZSBhIGdpdmVuIG5vZGVcbiAqIEBwYXJhbSBub2RlIC0gbm9kZSBvciBub2RlcyB0byBsb29rIGluc2lkZVxuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWxsQWZmZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5vZGVzID0gYXNBcnJheShub2RlKTtcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjdXJyZW50Tm9kZSkge1xuICAgICAgICB2YXIgZ3JvdXAgPSBjdXJyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoRk9DVVNfR1JPVVApO1xuICAgICAgICBhY2MucHVzaC5hcHBseShhY2MsIChncm91cFxuICAgICAgICAgICAgPyBmaWx0ZXJOZXN0ZWQodG9BcnJheShnZXRUb3BQYXJlbnQoY3VycmVudE5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0dST1VQLCBcIj1cXFwiXCIpLmNvbmNhdChncm91cCwgXCJcXFwiXTpub3QoW1wiKS5jb25jYXQoRk9DVVNfRElTQUJMRUQsIFwiPVxcXCJkaXNhYmxlZFxcXCJdKVwiKSkpKVxuICAgICAgICAgICAgOiBbY3VycmVudE5vZGVdKSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xufTtcbiIsICJleHBvcnQgdmFyIHNhZmVQcm9iZSA9IGZ1bmN0aW9uIChjYikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG4iLCAiLyoqXG4gKiByZXR1cm5zIGFjdGl2ZSBlbGVtZW50IGZyb20gZG9jdW1lbnQgb3IgZnJvbSBuZXN0ZWQgc2hhZG93ZG9tc1xuICovXG5pbXBvcnQgeyBzYWZlUHJvYmUgfSBmcm9tICcuL3NhZmUnO1xuLyoqXG4gKiByZXR1cm5zIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQuIElmIHRoZSBhY3RpdmUgZWxlbWVudCBpcyBhIFwiY29udGFpbmVyXCIgaXRzZWxmKHNoYWRvd1Jvb3Qgb3IgaWZyYW1lKSByZXR1cm5zIGFjdGl2ZSBlbGVtZW50IGluc2lkZSBpdFxuICogQHBhcmFtIFtpbkRvY3VtZW50XVxuICovXG5leHBvcnQgdmFyIGdldEFjdGl2ZUVsZW1lbnQgPSBmdW5jdGlvbiAoaW5Eb2N1bWVudCkge1xuICAgIGlmIChpbkRvY3VtZW50ID09PSB2b2lkIDApIHsgaW5Eb2N1bWVudCA9IGRvY3VtZW50OyB9XG4gICAgaWYgKCFpbkRvY3VtZW50IHx8ICFpbkRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBpbkRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIChhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3RcbiAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdClcbiAgICAgICAgOiBhY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgc2FmZVByb2JlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudDsgfSlcbiAgICAgICAgICAgID8gZ2V0QWN0aXZlRWxlbWVudChhY3RpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpXG4gICAgICAgICAgICA6IGFjdGl2ZUVsZW1lbnQpO1xufTtcbiIsICJpbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGdldEZpcnN0LCB0b0FycmF5IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbnZhciBmb2N1c0luRnJhbWUgPSBmdW5jdGlvbiAoZnJhbWUsIGFjdGl2ZUVsZW1lbnQpIHsgcmV0dXJuIGZyYW1lID09PSBhY3RpdmVFbGVtZW50OyB9O1xudmFyIGZvY3VzSW5zaWRlSWZyYW1lID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0b0FycmF5KHRvcE5vZGUucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lJykpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGZvY3VzSW5GcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTsgfSkpO1xufTtcbi8qKlxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUsIGlmIHRoZSBjdXJyZW50IGZvY3VzIGlzIGluc2lkZSBnaXZlbiBub2RlIG9yIG5vZGVzLlxuICogU3VwcG9ydHMgbm9kZXMgaGlkZGVuIGluc2lkZSBzaGFkb3dEb21cbiAqL1xuZXhwb3J0IHZhciBmb2N1c0luc2lkZSA9IGZ1bmN0aW9uICh0b3BOb2RlLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgLy8gY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICBpZiAoYWN0aXZlRWxlbWVudCA9PT0gdm9pZCAwKSB7IGFjdGl2ZUVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpOyB9XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8IChhY3RpdmVFbGVtZW50LmRhdGFzZXQgJiYgYWN0aXZlRWxlbWVudC5kYXRhc2V0LmZvY3VzR3VhcmQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gY29udGFpbnMobm9kZSwgYWN0aXZlRWxlbWVudCkgfHwgZm9jdXNJbnNpZGVJZnJhbWUobm9kZSwgYWN0aXZlRWxlbWVudCk7XG4gICAgfSk7XG59O1xuIiwgImltcG9ydCB7IEZPQ1VTX0FMTE9XIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY29udGFpbnMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuLyoqXG4gKiBjaGVja3MgaWYgZm9jdXMgaXMgaGlkZGVuIEZST00gdGhlIGZvY3VzLWxvY2tcbiAqIGllIGNvbnRhaW5lZCBpbnNpZGUgYSBub2RlIGZvY3VzLWxvY2sgc2hhbGwgaWdub3JlXG4gKlxuICogVGhpcyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gY291cGxlZCB3aXRoIHtAbGluayBGT0NVU19BTExPV30gY29uc3RhbnRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gZm9jdXMgaXMgY3VycmVudGx5IGlzIGluIFwiYWxsb3dcIiBhcmVhXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNJc0hpZGRlbiA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoaW5Eb2N1bWVudCk7XG4gICAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gdGhpcyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgRk9DVVNfQUxMT1cgd2l0aGluIHNoYWRvdyBkb21cbiAgICByZXR1cm4gdG9BcnJheShpbkRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbXCIuY29uY2F0KEZPQ1VTX0FMTE9XLCBcIl1cIikpKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KTsgfSk7XG59O1xuIiwgImltcG9ydCB7IGlzUmFkaW9FbGVtZW50IH0gZnJvbSAnLi9pcyc7XG52YXIgZmluZFNlbGVjdGVkUmFkaW8gPSBmdW5jdGlvbiAobm9kZSwgbm9kZXMpIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgICAgICAgLmZpbHRlcihpc1JhZGlvRWxlbWVudClcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLm5hbWUgPT09IG5vZGUubmFtZTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNoZWNrZWQ7IH0pWzBdIHx8IG5vZGU7XG59O1xuZXhwb3J0IHZhciBjb3JyZWN0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIGlmIChpc1JhZGlvRWxlbWVudChub2RlKSAmJiBub2RlLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRTZWxlY3RlZFJhZGlvKG5vZGUsIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBnaXZpbmcgYSBzZXQgb2YgcmFkaW8gaW5wdXRzIGtlZXBzIG9ubHkgc2VsZWN0ZWQgKHRhYmJhYmxlKSBvbmVzXG4gKiBAcGFyYW0gbm9kZXNcbiAqL1xuZXhwb3J0IHZhciBjb3JyZWN0Tm9kZXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICAvLyBJRTExIGhhcyBubyBTZXQoYXJyYXkpIGNvbnN0cnVjdG9yXG4gICAgdmFyIHJlc3VsdFNldCA9IG5ldyBTZXQoKTtcbiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuYWRkKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7IH0pO1xuICAgIC8vIHVzaW5nIGZpbHRlciB0byBzdXBwb3J0IElFMTFcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZXN1bHRTZXQuaGFzKG5vZGUpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgY29ycmVjdE5vZGUgfSBmcm9tICcuL2NvcnJlY3RGb2N1cyc7XG5leHBvcnQgdmFyIHBpY2tGaXJzdEZvY3VzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgaWYgKG5vZGVzWzBdICYmIG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGNvcnJlY3ROb2RlKG5vZGVzWzBdLCBub2Rlcyk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlc1swXTtcbn07XG5leHBvcnQgdmFyIHBpY2tGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZXMuaW5kZXhPZihjb3JyZWN0Tm9kZShub2RlLCBub2RlcykpO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZXMgfSBmcm9tICcuL3V0aWxzL2NvcnJlY3RGb2N1cyc7XG5pbXBvcnQgeyBwaWNrRm9jdXNhYmxlIH0gZnJvbSAnLi91dGlscy9maXJzdEZvY3VzJztcbmltcG9ydCB7IGlzR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmV4cG9ydCB2YXIgTkVXX0ZPQ1VTID0gJ05FV19GT0NVUyc7XG4vKipcbiAqIE1haW4gc29sdmVyIGZvciB0aGUgXCJmaW5kIG5leHQgZm9jdXNcIiBxdWVzdGlvblxuICogQHBhcmFtIGlubmVyTm9kZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJyZXR1cm4gZm9jdXNcIlxuICogQHBhcmFtIGlubmVyVGFiYmFibGVzIC0gdXNlZCB0byBjb250cm9sIFwiYXV0b2ZvY3VzXCJcbiAqIEBwYXJhbSBvdXRlck5vZGVzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudFxuICogQHBhcmFtIGxhc3ROb2RlXG4gKiBAcmV0dXJucyB7bnVtYmVyfHN0cmluZ3x1bmRlZmluZWR8Kn1cbiAqL1xuZXhwb3J0IHZhciBuZXdGb2N1cyA9IGZ1bmN0aW9uIChpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlcywgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpIHtcbiAgICB2YXIgY250ID0gaW5uZXJOb2Rlcy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0Rm9jdXMgPSBpbm5lck5vZGVzWzBdO1xuICAgIHZhciBsYXN0Rm9jdXMgPSBpbm5lck5vZGVzW2NudCAtIDFdO1xuICAgIHZhciBpc09uR3VhcmQgPSBpc0d1YXJkKGFjdGl2ZUVsZW1lbnQpO1xuICAgIC8vIGZvY3VzIGlzIGluc2lkZVxuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIGlubmVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA+PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBhY3RpdmVJbmRleCA9IGFjdGl2ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCA/IG91dGVyTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA6IC0xO1xuICAgIHZhciBsYXN0SW5kZXggPSBsYXN0Tm9kZSA/IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleDtcbiAgICB2YXIgbGFzdE5vZGVJbnNpZGUgPSBsYXN0Tm9kZSA/IGlubmVyTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiAtMTtcbiAgICAvLyBubyBhY3RpdmUgZm9jdXMgKG9yIGZvY3VzIGlzIG9uIHRoZSBib2R5KVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgLy8ga25vd24gZmFsbGJhY2tcbiAgICAgICAgaWYgKGxhc3ROb2RlSW5zaWRlICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIC8vIG5ldyBmb2N1cywgbm90aGluZyB0byBjYWxjdWxhdGVcbiAgICBpZiAobGFzdE5vZGVJbnNpZGUgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBORVdfRk9DVVM7XG4gICAgfVxuICAgIHZhciBpbmRleERpZmYgPSBhY3RpdmVJbmRleCAtIGxhc3RJbmRleDtcbiAgICB2YXIgZmlyc3ROb2RlSW5kZXggPSBvdXRlck5vZGVzLmluZGV4T2YoZmlyc3RGb2N1cyk7XG4gICAgdmFyIGxhc3ROb2RlSW5kZXggPSBvdXRlck5vZGVzLmluZGV4T2YobGFzdEZvY3VzKTtcbiAgICB2YXIgY29ycmVjdGVkTm9kZXMgPSBjb3JyZWN0Tm9kZXMob3V0ZXJOb2Rlcyk7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihhY3RpdmVFbGVtZW50KSA6IC0xO1xuICAgIHZhciBjb3JyZWN0ZWRJbmRleERpZmYgPSBjb3JyZWN0ZWRJbmRleCAtIChsYXN0Tm9kZSA/IGNvcnJlY3RlZE5vZGVzLmluZGV4T2YobGFzdE5vZGUpIDogYWN0aXZlSW5kZXgpO1xuICAgIC8vIG9sZCBmb2N1c1xuICAgIGlmICghaW5kZXhEaWZmICYmIGxhc3ROb2RlSW5zaWRlID49IDApIHtcbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICAvLyBubyB0YWJiYWJsZSBlbGVtZW50cywgYXV0b2ZvY3VzIGlzIG5vdCBwb3NzaWJsZVxuICAgIGlmIChpbm5lclRhYmJhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYW4gZWRnZSBjYXNlIHdpdGggbm8gdGFiYmFibGUgZWxlbWVudHNcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IGZvY3VzYWJsZSBvbmVcbiAgICAgICAgLy8gd2l0aCBzb21lIHByb2JhYmlsaXR5IHRoaXMgd2lsbCBwcmV2ZW50IGZvY3VzIGZyb20gY3ljbGluZyBhY3Jvc3MgdGhlIGxvY2ssIGJ1dCB0aGVyZSBpcyBubyB0YWJiYWxlIGVsZW1lbnRzIHRvIGN5Y2xlIHRvXG4gICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICB9XG4gICAgdmFyIHJldHVybkZpcnN0Tm9kZSA9IHBpY2tGb2N1c2FibGUoaW5uZXJOb2RlcywgaW5uZXJUYWJiYWJsZXNbMF0pO1xuICAgIHZhciByZXR1cm5MYXN0Tm9kZSA9IHBpY2tGb2N1c2FibGUoaW5uZXJOb2RlcywgaW5uZXJUYWJiYWJsZXNbaW5uZXJUYWJiYWJsZXMubGVuZ3RoIC0gMV0pO1xuICAgIC8vIGZpcnN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXggJiYgaXNPbkd1YXJkICYmIE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5MYXN0Tm9kZTtcbiAgICB9XG4gICAgLy8gbGFzdCBlbGVtZW50XG4gICAgaWYgKGFjdGl2ZUluZGV4ID49IGxhc3ROb2RlSW5kZXggJiYgaXNPbkd1YXJkICYmIE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgIHJldHVybiByZXR1cm5GaXJzdE5vZGU7XG4gICAgfVxuICAgIC8vIGp1bXAgb3V0LCBidXQgbm90IG9uIHRoZSBndWFyZFxuICAgIGlmIChpbmRleERpZmYgJiYgTWF0aC5hYnMoY29ycmVjdGVkSW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBhYm92ZSBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4IDw9IGZpcnN0Tm9kZUluZGV4KSB7XG4gICAgICAgIHJldHVybiByZXR1cm5MYXN0Tm9kZTtcbiAgICB9XG4gICAgLy8gZm9jdXMgYmVsb3cgbG9ja1xuICAgIGlmIChhY3RpdmVJbmRleCA+IGxhc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8gaW5kZXggaXMgaW5zaWRlIHRhYiBvcmRlciwgYnV0IG91dHNpZGUgTG9ja1xuICAgIGlmIChpbmRleERpZmYpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGluZGV4RGlmZikgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChjbnQgKyBsYXN0Tm9kZUluc2lkZSArIGluZGV4RGlmZikgJSBjbnQ7XG4gICAgfVxuICAgIC8vIGRvIG5vdGhpbmdcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICJpbXBvcnQgeyBmaWx0ZXJBdXRvRm9jdXNhYmxlIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBwaWNrRmlyc3RGb2N1cyB9IGZyb20gJy4vZmlyc3RGb2N1cyc7XG5pbXBvcnQgeyBnZXREYXRhc2V0IH0gZnJvbSAnLi9pcyc7XG52YXIgZmluZEF1dG9Gb2N1c2VkID0gZnVuY3Rpb24gKGF1dG9Gb2N1c2FibGVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGF1dG9mb2N1cyA9IChfYSA9IGdldERhdGFzZXQobm9kZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hdXRvZm9jdXM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgbm9kZS5hdXRvZm9jdXMgfHxcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAoYXV0b2ZvY3VzICE9PSB1bmRlZmluZWQgJiYgYXV0b2ZvY3VzICE9PSAnZmFsc2UnKSB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIGF1dG9Gb2N1c2FibGVzLmluZGV4T2Yobm9kZSkgPj0gMCk7XG4gICAgfTtcbn07XG5leHBvcnQgdmFyIHBpY2tBdXRvZm9jdXMgPSBmdW5jdGlvbiAobm9kZXNJbmRleGVzLCBvcmRlcmVkTm9kZXMsIGdyb3Vwcykge1xuICAgIHZhciBub2RlcyA9IG5vZGVzSW5kZXhlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSk7XG4gICAgdmFyIGF1dG9Gb2N1c2FibGUgPSBmaWx0ZXJBdXRvRm9jdXNhYmxlKG5vZGVzLmZpbHRlcihmaW5kQXV0b0ZvY3VzZWQoZ3JvdXBzKSkpO1xuICAgIGlmIChhdXRvRm9jdXNhYmxlICYmIGF1dG9Gb2N1c2FibGUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBwaWNrRmlyc3RGb2N1cyhhdXRvRm9jdXNhYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGZpbHRlckF1dG9Gb2N1c2FibGUob3JkZXJlZE5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IHBhcmVudEF1dG9mb2N1c2FibGVzIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vYXJyYXknO1xudmFyIGdldFBhcmVudHMgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgIGlmIChwYXJlbnRzID09PSB2b2lkIDApIHsgcGFyZW50cyA9IFtdOyB9XG4gICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZ2V0UGFyZW50cyhub2RlLnBhcmVudE5vZGUuaG9zdCB8fCBub2RlLnBhcmVudE5vZGUsIHBhcmVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50cztcbn07XG4vKipcbiAqIGZpbmRzIGEgcGFyZW50IGZvciBib3RoIG5vZGVBIGFuZCBub2RlQlxuICogQHBhcmFtIG5vZGVBXG4gKiBAcGFyYW0gbm9kZUJcbiAqIEByZXR1cm5zIHtib29sZWFufCp9XG4gKi9cbmV4cG9ydCB2YXIgZ2V0Q29tbW9uUGFyZW50ID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQikge1xuICAgIHZhciBwYXJlbnRzQSA9IGdldFBhcmVudHMobm9kZUEpO1xuICAgIHZhciBwYXJlbnRzQiA9IGdldFBhcmVudHMobm9kZUIpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzQS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgY3VycmVudFBhcmVudCA9IHBhcmVudHNBW2ldO1xuICAgICAgICBpZiAocGFyZW50c0IuaW5kZXhPZihjdXJyZW50UGFyZW50KSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBnZXRUb3BDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAoYmFzZUFjdGl2ZUVsZW1lbnQsIGxlZnRFbnRyeSwgcmlnaHRFbnRyaWVzKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRzID0gYXNBcnJheShiYXNlQWN0aXZlRWxlbWVudCk7XG4gICAgdmFyIGxlZnRFbnRyaWVzID0gYXNBcnJheShsZWZ0RW50cnkpO1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gYWN0aXZlRWxlbWVudHNbMF07XG4gICAgdmFyIHRvcENvbW1vbiA9IGZhbHNlO1xuICAgIGxlZnRFbnRyaWVzLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQodG9wQ29tbW9uIHx8IGVudHJ5LCBlbnRyeSkgfHwgdG9wQ29tbW9uO1xuICAgICAgICByaWdodEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKHN1YkVudHJ5KSB7XG4gICAgICAgICAgICB2YXIgY29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGFjdGl2ZUVsZW1lbnQsIHN1YkVudHJ5KTtcbiAgICAgICAgICAgIGlmIChjb21tb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRvcENvbW1vbiB8fCBjb250YWlucyhjb21tb24sIHRvcENvbW1vbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gY29tbW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wQ29tbW9uID0gZ2V0Q29tbW9uUGFyZW50KGNvbW1vbiwgdG9wQ29tbW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFRPRE86IGFkZCBhc3NlcnQgaGVyZT9cbiAgICByZXR1cm4gdG9wQ29tbW9uO1xufTtcbi8qKlxuICogcmV0dXJuIGxpc3Qgb2Ygbm9kZXMgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGJlIGF1dG9mb2N1c2VkIGluc2lkZSBhIGdpdmVuIHRvcCBub2Rlc1xuICogQHBhcmFtIGVudHJpZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyA9IGZ1bmN0aW9uIChlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpIHtcbiAgICByZXR1cm4gZW50cmllcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZSkgeyByZXR1cm4gYWNjLmNvbmNhdChwYXJlbnRBdXRvZm9jdXNhYmxlcyhub2RlLCB2aXNpYmlsaXR5Q2FjaGUpKTsgfSwgW10pO1xufTtcbiIsICJpbXBvcnQgeyBORVdfRk9DVVMsIG5ld0ZvY3VzIH0gZnJvbSAnLi9zb2x2ZXInO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBhc0FycmF5LCBnZXRGaXJzdCB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgcGlja0F1dG9mb2N1cyB9IGZyb20gJy4vdXRpbHMvYXV0by1mb2N1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi91dGlscy9nZXRBY3RpdmVFbGVtZW50JztcbmltcG9ydCB7IGlzRGVmaW5lZCwgaXNOb3RBR3VhcmQgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IGFsbFBhcmVudEF1dG9mb2N1c2FibGVzLCBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG52YXIgcmVvcmRlck5vZGVzID0gZnVuY3Rpb24gKHNyY05vZGVzLCBkc3ROb2Rlcykge1xuICAgIHZhciByZW1hcCA9IG5ldyBNYXAoKTtcbiAgICAvLyBubyBTZXQoZHN0Tm9kZXMpIGZvciBJRTExIDooXG4gICAgZHN0Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5KSB7IHJldHVybiByZW1hcC5zZXQoZW50aXR5Lm5vZGUsIGVudGl0eSk7IH0pO1xuICAgIC8vIHJlbWFwIHRvIGRzdE5vZGVzXG4gICAgcmV0dXJuIHNyY05vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gcmVtYXAuZ2V0KG5vZGUpOyB9KS5maWx0ZXIoaXNEZWZpbmVkKTtcbn07XG4vKipcbiAqIGNvbnRhaW5zIHRoZSBtYWluIGxvZ2ljIG9mIHRoZSBgZm9jdXMtbG9ja2AgcGFja2FnZS5cbiAqXG4gKiAhIHlvdSBwcm9iYWJseSBkb250IG5lZWQgdGhpcyBmdW5jdGlvbiAhXG4gKlxuICogZ2l2ZW4gdG9wIG5vZGUocykgYW5kIHRoZSBsYXN0IGFjdGl2ZSBlbGVtZW50IHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYmUgZm9jdXNlZCBuZXh0XG4gKiBAcmV0dXJucyBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSBmb2N1c2VkIHRvIG1vdmUgZm9jdXMgaW5zaWRlXG4gKiBAcGFyYW0gdG9wTm9kZVxuICogQHBhcmFtIGxhc3ROb2RlXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNTb2x2ZXIgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoYXNBcnJheSh0b3BOb2RlKS5sZW5ndGggPiAwID8gZG9jdW1lbnQgOiBnZXRGaXJzdCh0b3BOb2RlKS5vd25lckRvY3VtZW50KTtcbiAgICB2YXIgZW50cmllcyA9IGdldEFsbEFmZmVjdGVkTm9kZXModG9wTm9kZSkuZmlsdGVyKGlzTm90QUd1YXJkKTtcbiAgICB2YXIgY29tbW9uUGFyZW50ID0gZ2V0VG9wQ29tbW9uUGFyZW50KGFjdGl2ZUVsZW1lbnQgfHwgdG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIHZpc2liaWxpdHlDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB2YXIgYW55Rm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlTm9kZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKTtcbiAgICB2YXIgaW5uZXJFbGVtZW50cyA9IGFueUZvY3VzYWJsZS5maWx0ZXIoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIGlzTm90QUd1YXJkKG5vZGUpO1xuICAgIH0pO1xuICAgIGlmICghaW5uZXJFbGVtZW50c1swXSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgb3V0ZXJOb2RlcyA9IGdldEZvY3VzYWJsZU5vZGVzKFtjb21tb25QYXJlbnRdLCB2aXNpYmlsaXR5Q2FjaGUpLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgb3JkZXJlZElubmVyRWxlbWVudHMgPSByZW9yZGVyTm9kZXMob3V0ZXJOb2RlcywgaW5uZXJFbGVtZW50cyk7XG4gICAgLy8gY29sbGVjdCBpbm5lciBmb2N1c2FibGUgYW5kIHNlcGFyYXRlbHkgdGFiYmFibGVzXG4gICAgdmFyIGlubmVyRm9jdXNhYmxlcyA9IG9yZGVyZWRJbm5lckVsZW1lbnRzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgaW5uZXJUYWJiYWJsZSA9IG9yZGVyZWRJbm5lckVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gX2EudGFiSW5kZXg7XG4gICAgICAgIHJldHVybiB0YWJJbmRleCA+PSAwO1xuICAgIH0pLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgbmV3SWQgPSBuZXdGb2N1cyhpbm5lckZvY3VzYWJsZXMsIGlubmVyVGFiYmFibGUsIG91dGVyTm9kZXMsIGFjdGl2ZUVsZW1lbnQsIGxhc3ROb2RlKTtcbiAgICBpZiAobmV3SWQgPT09IE5FV19GT0NVUykge1xuICAgICAgICB2YXIgZm9jdXNOb2RlID0gXG4gICAgICAgIC8vIGZpcnN0IHRyeSBvbmx5IHRhYmJhYmxlLCBhbmQgdGhlIGZhbGxiYWNrIHRvIGFsbCBmb2N1c2FibGUsIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgc2hvdWxkIGJlIHBpY2tlZCBmb3IgZm9jdXNcbiAgICAgICAgcGlja0F1dG9mb2N1cyhhbnlGb2N1c2FibGUsIGlubmVyVGFiYmFibGUsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpIHx8XG4gICAgICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJGb2N1c2FibGVzLCBhbGxQYXJlbnRBdXRvZm9jdXNhYmxlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICAgICAgaWYgKGZvY3VzTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogZm9jdXNOb2RlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2ZvY3VzLWxvY2s6IGNhbm5vdCBmaW5kIGFueSBub2RlIHRvIG1vdmUgZm9jdXMgaW50bycpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmV3SWQ7XG4gICAgfVxuICAgIHJldHVybiBvcmRlcmVkSW5uZXJFbGVtZW50c1tuZXdJZF07XG59O1xuIiwgImltcG9ydCB7IGdldEFsbEFmZmVjdGVkTm9kZXMgfSBmcm9tICcuL3V0aWxzL2FsbC1hZmZlY3RlZCc7XG5pbXBvcnQgeyBpc0d1YXJkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgZ2V0VG9wQ29tbW9uUGFyZW50IH0gZnJvbSAnLi91dGlscy9wYXJlbnRpbmcnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi91dGlscy90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzIH0gZnJvbSAnLi91dGlscy90YWJVdGlscyc7XG4vKipcbiAqIHRyYXZlcnNlcyBhbGwgcmVsYXRlZCBub2RlcyAoaW5jbHVkaW5nIGdyb3VwcykgcmV0dXJuaW5nIGEgbGlzdCBvZiBhbGwgbm9kZXMob3V0ZXIgYW5kIGludGVybmFsKSB3aXRoIG1ldGEgaW5mb3JtYXRpb25cbiAqIFRoaXMgaXMgbG93LWxldmVsIEFQSSFcbiAqIEByZXR1cm5zIGxpc3Qgb2YgZm9jdXNhYmxlIGVsZW1lbnRzIGluc2lkZSBhIGdpdmVuIHRvcCghKSBub2RlLlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHByb3ZpZGluZyBhIHNpbXBsZXIgQVBJXG4gKi9cbmV4cG9ydCB2YXIgZXhwYW5kRm9jdXNhYmxlTm9kZXMgPSBmdW5jdGlvbiAodG9wTm9kZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQodG9wTm9kZSwgdG9wTm9kZSwgZW50cmllcyk7XG4gICAgdmFyIG91dGVyTm9kZXMgPSBvcmRlckJ5VGFiSW5kZXgoZ2V0Rm9jdXNhYmxlcyhbY29tbW9uUGFyZW50XSwgdHJ1ZSksIHRydWUsIHRydWUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlbnRyaWVzLCBmYWxzZSk7XG4gICAgcmV0dXJuIG91dGVyTm9kZXMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGUsIGluZGV4ID0gX2EuaW5kZXg7XG4gICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGxvY2tJdGVtOiBpbm5lckVsZW1lbnRzLmluZGV4T2Yobm9kZSkgPj0gMCxcbiAgICAgICAgICAgIGd1YXJkOiBpc0d1YXJkKG5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iLCAiZXhwb3J0IHZhciBmb2N1c09uID0gZnVuY3Rpb24gKHRhcmdldCwgZm9jdXNPcHRpb25zKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgLy8gbm90IGNsZWFyIGhvdywgYnV0IGlzIHBvc3NpYmxlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvZm9jdXMtbG9jay9pc3N1ZXMvNTNcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJ2ZvY3VzJyBpbiB0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LmZvY3VzKGZvY3VzT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICgnY29udGVudFdpbmRvdycgaW4gdGFyZ2V0ICYmIHRhcmdldC5jb250ZW50V2luZG93KSB7XG4gICAgICAgIHRhcmdldC5jb250ZW50V2luZG93LmZvY3VzKCk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBmb2N1c1NvbHZlciB9IGZyb20gJy4vZm9jdXNTb2x2ZXInO1xudmFyIGd1YXJkQ291bnQgPSAwO1xudmFyIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuLyoqXG4gKiBUaGUgbWFpbiBmdW5jdGlvbmFsaXR5IG9mIHRoZSBmb2N1cy1sb2NrIHBhY2thZ2VcbiAqXG4gKiBDb250YWlucyBmb2N1cyBhdCBhIGdpdmVuIG5vZGUuXG4gKiBUaGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2lsbCBoZWxwIHRvIGRldGVybWluZSB3aGljaCBlbGVtZW50KGZpcnN0IG9yIGxhc3QpIHNob3VsZCBiZSBmb2N1c2VkLlxuICogVGhlIGZvdW5kIGVsZW1lbnQgd2lsbCBiZSBmb2N1c2VkLlxuICpcbiAqIFRoaXMgaXMgb25lIHRpbWUgYWN0aW9uIChtb3ZlKSwgbm90IGEgcGVyc2lzdGVudCBmb2N1cy1sb2NrXG4gKlxuICogSFRNTCBtYXJrZXJzIChzZWUge0BsaW5rIGltcG9ydCgnLi9jb25zdGFudHMnKS5GT0NVU19BVVRPfSBjb25zdGFudHMpIGNhbiBjb250cm9sIGF1dG9mb2N1c1xuICogQHNlZSB7QGxpbmsgZm9jdXNTb2x2ZXJ9IGZvciB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgYXV0b2ZvY3VzXG4gKi9cbmV4cG9ydCB2YXIgbW92ZUZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGxhc3ROb2RlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNTb2x2ZXIodG9wTm9kZSwgbGFzdE5vZGUpO1xuICAgIC8vIGdsb2JhbCBsb2NhbCBzaWRlIGVmZmVjdCB0byBjb3VudGFpbiByZWN1cnNpdmUgbG9jayBhY3RpdmF0aW9uIGFuZCByZXNvbHZlIGZvY3VzLWZpZ2h0aW5nXG4gICAgaWYgKGxvY2tEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgLyoqICtGT0NVUy1GSUdIVElORyBwcmV2ZW50aW9uICoqL1xuICAgICAgICBpZiAoZ3VhcmRDb3VudCA+IDIpIHtcbiAgICAgICAgICAgIC8vIHdlIGhhdmUgcmVjdXJzaXZlIGVudGVyZWQgYmFjayB0aGUgbG9jayBhY3RpdmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGb2N1c0xvY2s6IGZvY3VzLWZpZ2h0aW5nIGRldGVjdGVkLiBPbmx5IG9uZSBmb2N1cyBtYW5hZ2VtZW50IHN5c3RlbSBjb3VsZCBiZSBhY3RpdmUuICcgK1xuICAgICAgICAgICAgICAgICdTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrLyNmb2N1cy1maWdodGluZycpO1xuICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvY2tEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ3VhcmRDb3VudCsrO1xuICAgICAgICBmb2N1c09uKGZvY3VzYWJsZS5ub2RlLCBvcHRpb25zLmZvY3VzT3B0aW9ucyk7XG4gICAgICAgIGd1YXJkQ291bnQtLTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmZ1bmN0aW9uIHdlYWtSZWYodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAjNjggU2FmYXJpIDE0LjEgZG9udCBoYXZlIGl0IHlldFxuICAgIC8vIEZJWE1FOiByZW1vdmUgaW4gMjAyNVxuICAgIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlIHx8IG51bGw7IH07XG4gICAgfVxuICAgIHZhciB3ID0gdmFsdWUgPyBuZXcgV2Vha1JlZih2YWx1ZSkgOiBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiAodyA9PT0gbnVsbCB8fCB3ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3LmRlcmVmKCkpIHx8IG51bGw7IH07XG59XG5leHBvcnQgdmFyIHJlY29yZEVsZW1lbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGN1cnJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgcGFyZW50OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgbGVmdDogd2Vha1JlZihjdXJyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgICAgIHJpZ2h0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZyksXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IHdlYWtSZWYoZWxlbWVudCksXG4gICAgICAgIHN0YWNrOiBzdGFjayxcbiAgICAgICAgb3duZXJEb2N1bWVudDogZWxlbWVudC5vd25lckRvY3VtZW50LFxuICAgIH07XG59O1xudmFyIHJlc3RvcmVGb2N1c1RvID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IGxvY2F0aW9uLnN0YWNrLCBvd25lckRvY3VtZW50ID0gbG9jYXRpb24ub3duZXJEb2N1bWVudDtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIGZvciAodmFyIF9pID0gMCwgc3RhY2tfMSA9IHN0YWNrOyBfaSA8IHN0YWNrXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gc3RhY2tfMVtfaV07XG4gICAgICAgIHZhciBwYXJlbnRfMSA9IChfYSA9IGxpbmUucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsaW5lKTtcbiAgICAgICAgLy8gaXMgaXQgc3RpbGwgaGVyZT9cbiAgICAgICAgaWYgKHBhcmVudF8xICYmIG93bmVyRG9jdW1lbnQuY29udGFpbnMocGFyZW50XzEpKSB7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IChfYiA9IGxpbmUubGVmdCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobGluZSk7XG4gICAgICAgICAgICB2YXIgc2F2ZWRDdXJyZW50ID0gbGluZS5jdXJyZW50KCk7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHBhcmVudF8xLmNvbnRhaW5zKHNhdmVkQ3VycmVudCkgPyBzYXZlZEN1cnJlbnQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoX2MgPSBsaW5lLnJpZ2h0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBmb2N1c2FibGVzID0gZ2V0VGFiYmFibGVOb2RlcyhbcGFyZW50XzFdLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgICAgICAgICAgdmFyIGFpbSA9IFxuICAgICAgICAgICAgLy8gdGhhdCBpcyBlbGVtZW50IGl0c2VsZlxuICAgICAgICAgICAgKF9lID0gKF9kID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50ICE9PSB2b2lkIDAgPyBjdXJyZW50IDogXG4gICAgICAgICAgICAvLyBvciBzb21ldGhpbmcgaW4gaXQncyBwbGFjZVxuICAgICAgICAgICAgbGVmdCA9PT0gbnVsbCB8fCBsZWZ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsZWZ0Lm5leHRFbGVtZW50U2libGluZykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgcmlnaHQsIHN0aWxsIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgcmlnaHQpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFxuICAgICAgICAgICAgLy8gb3Igc29tZWJvZHkgdG8gdGhlIGxlZnQsIHNvbWV0aGluZz9cbiAgICAgICAgICAgIGxlZnQ7XG4gICAgICAgICAgICB3aGlsZSAoYWltKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBmb2N1c2FibGVzXzEgPSBmb2N1c2FibGVzOyBfZiA8IGZvY3VzYWJsZXNfMS5sZW5ndGg7IF9mKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzYWJsZSA9IGZvY3VzYWJsZXNfMVtfZl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhaW0gPT09IG51bGwgfHwgYWltID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhaW0uY29udGFpbnMoZm9jdXNhYmxlLm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLm5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWltID0gYWltLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb2N1c2FibGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHBhcmVudCBjb250YWlucyBhIGZvY3VzYWJsZSAtIG1vdmUgdGhlcmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlc1swXS5ub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vdGhpbmcgbWF0Y2hlZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDYXB0dXJlcyB0aGUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQgdG8gcmVzdG9yZSBmb2N1cyBhcyBjbG9zZSBhcyBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlXG4gKiBIYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBvciBubyBsb25nZXIgZm9jdXNhYmxlXG4gKiBtb3ZpbmcgZm9jdXMgdG8gdGhlIGNsb3Nlc3QgZm9jdXNhYmxlIGVsZW1lbnRcbiAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IC0gZWxlbWVudCB3aGVyZSBmb2N1cyBzaG91bGQgYmUgcmVzdG9yZWRcbiAqIEByZXR1cm5zIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgbmV3IGVsZW1lbnQgdG8gZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gZnVuY3Rpb24gKHRhcmdldEVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSByZWNvcmRFbGVtZW50TG9jYXRpb24odGFyZ2V0RWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVGb2N1c1RvKGxvY2F0aW9uKTtcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBnZXRUYWJiYWJsZU5vZGVzLCBjb250YWlucywgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5Jztcbi8qKlxuICogZm9yIGEgZ2l2ZW4gYGVsZW1lbnRgIGluIGEgZ2l2ZW4gYHNjb3BlYCByZXR1cm5zIGZvY3VzYWJsZSBzaWJsaW5nc1xuICogQHBhcmFtIGVsZW1lbnQgLSBiYXNlIGVsZW1lbnRcbiAqIEBwYXJhbSBzY29wZSAtIGNvbW1vbiBwYXJlbnQuIENhbiBiZSBkb2N1bWVudCwgYnV0IGJldHRlciB0byBuYXJyb3cgaXQgZG93biBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICogQHJldHVybnMge3ByZXYsbmV4dH0gLSByZWZlcmVuY2VzIHRvIGEgZm9jdXNhYmxlIGVsZW1lbnQgYmVmb3JlIGFuZCBhZnRlclxuICogQHJldHVybnMgdW5kZWZpbmVkIC0gaWYgb3BlcmF0aW9uIGlzIG5vdCBhcHBsaWNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgZ2V0UmVsYXRpdmVGb2N1c2FibGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2NvcGUsIHVzZVRhYmJhYmxlcykge1xuICAgIGlmICghZWxlbWVudCB8fCAhc2NvcGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbm8gZWxlbWVudCBvciBzY29wZSBnaXZlbicpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBzaGFyZHMgPSBhc0FycmF5KHNjb3BlKTtcbiAgICBpZiAoc2hhcmRzLmV2ZXJ5KGZ1bmN0aW9uIChzaGFyZCkgeyByZXR1cm4gIWNvbnRhaW5zKHNoYXJkLCBlbGVtZW50KTsgfSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlIGVsZW1lbnQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgc2NvcGUnKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgZm9jdXNhYmxlcyA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpO1xuICAgIHZhciBjdXJyZW50ID0gZm9jdXNhYmxlcy5maW5kSW5kZXgoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPT09IGVsZW1lbnQ7XG4gICAgfSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IC0xKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSwgd2hlbiBhbmNob3IgZWxlbWVudCBpcyBub3QgZm91bmRcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJldjogZm9jdXNhYmxlc1tjdXJyZW50IC0gMV0sXG4gICAgICAgIG5leHQ6IGZvY3VzYWJsZXNbY3VycmVudCArIDFdLFxuICAgICAgICBmaXJzdDogZm9jdXNhYmxlc1swXSxcbiAgICAgICAgbGFzdDogZm9jdXNhYmxlc1tmb2N1c2FibGVzLmxlbmd0aCAtIDFdLFxuICAgIH07XG59O1xudmFyIGdldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKHNoYXJkcywgdXNlVGFiYmFibGVzKSB7XG4gICAgdmFyIHNldCA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0OiBzZXRbMF0sXG4gICAgICAgIGxhc3Q6IHNldFtzZXQubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc2NvcGU6IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGN5Y2xlOiB0cnVlLFxuICAgICAgICBvbmx5VGFiYmFibGU6IHRydWUsXG4gICAgfSwgb3B0aW9ucyk7XG59O1xudmFyIG1vdmVGb2N1cyA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBuZXdPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHNvbHV0aW9uID0gZ2V0UmVsYXRpdmVGb2N1c2FibGUoZnJvbUVsZW1lbnQsIG5ld09wdGlvbnMuc2NvcGUsIG5ld09wdGlvbnMub25seVRhYmJhYmxlKTtcbiAgICBpZiAoIXNvbHV0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IGNiKHNvbHV0aW9uLCBuZXdPcHRpb25zLmN5Y2xlKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGZvY3VzT24odGFyZ2V0Lm5vZGUsIG5ld09wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIG5leHQgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTmV4dEVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgbmV4dCA9IF9hLm5leHQsIGZpcnN0ID0gX2EuZmlyc3Q7XG4gICAgICAgIHJldHVybiBuZXh0IHx8IChjeWNsZSAmJiBmaXJzdCk7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIHByZXYgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzUHJldkVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgcHJldiA9IF9hLnByZXYsIGxhc3QgPSBfYS5sYXN0O1xuICAgICAgICByZXR1cm4gcHJldiB8fCAoY3ljbGUgJiYgbGFzdCk7XG4gICAgfSk7XG59O1xudmFyIHBpY2tCb3VuZGFyeSA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucywgd2hhdCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgYm91bmRhcnkgPSBnZXRCb3VuZGFyeShzY29wZSwgKF9hID0gb3B0aW9ucy5vbmx5VGFiYmFibGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpO1xuICAgIHZhciBub2RlID0gYm91bmRhcnlbd2hhdF07XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgZm9jdXNPbihub2RlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRhYi1vcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzRmlyc3RFbGVtZW50ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBwaWNrQm91bmRhcnkoc2NvcGUsIG9wdGlvbnMsICdmaXJzdCcpO1xufTtcbi8qKlxuICogZm9jdXNlcyBsYXN0IGVsZW1lbnQgaW4gdGhlIHRhYiBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTGFzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2xhc3QnKTtcbn07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi9UcmFwJztcbmltcG9ydCB7IG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKG1lZGl1bVNpZGVjYXIsIEZvY3VzVHJhcCk7IiwgImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IG5vblBhc3NpdmUgfSBmcm9tICcuL2FnZ3Jlc2l2ZUNhcHR1cmUnO1xuaW1wb3J0IHsgaGFuZGxlU2Nyb2xsLCBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCB9IGZyb20gJy4vaGFuZGxlU2Nyb2xsJztcbmV4cG9ydCB2YXIgZ2V0VG91Y2hYWSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ID8gW2V2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgsIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldIDogWzAsIDBdO1xufTtcbmV4cG9ydCB2YXIgZ2V0RGVsdGFYWSA9IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gW2V2ZW50LmRlbHRhWCwgZXZlbnQuZGVsdGFZXTsgfTtcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbnZhciBkZWx0YUNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geFswXSA9PT0geVswXSAmJiB4WzFdID09PSB5WzFdOyB9O1xudmFyIGdlbmVyYXRlU3R5bGUgPSBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIFwiXFxuICAuYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogbm9uZTt9XFxuICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1cIikuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IGFsbDt9XFxuXCIpOyB9O1xudmFyIGlkQ291bnRlciA9IDA7XG52YXIgbG9ja1N0YWNrID0gW107XG5leHBvcnQgZnVuY3Rpb24gUmVtb3ZlU2Nyb2xsU2lkZUNhcihwcm9wcykge1xuICAgIHZhciBzaG91bGRQcmV2ZW50UXVldWUgPSBSZWFjdC51c2VSZWYoW10pO1xuICAgIHZhciB0b3VjaFN0YXJ0UmVmID0gUmVhY3QudXNlUmVmKFswLCAwXSk7XG4gICAgdmFyIGFjdGl2ZUF4aXMgPSBSZWFjdC51c2VSZWYoKTtcbiAgICB2YXIgaWQgPSBSZWFjdC51c2VTdGF0ZShpZENvdW50ZXIrKylbMF07XG4gICAgdmFyIFN0eWxlID0gUmVhY3QudXNlU3RhdGUoc3R5bGVTaW5nbGV0b24pWzBdO1xuICAgIHZhciBsYXN0UHJvcHMgPSBSZWFjdC51c2VSZWYocHJvcHMpO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3RQcm9wcy5jdXJyZW50ID0gcHJvcHM7XG4gICAgfSwgW3Byb3BzXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb3BzLmluZXJ0KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgdmFyIGFsbG93XzEgPSBfX3NwcmVhZEFycmF5KFtwcm9wcy5sb2NrUmVmLmN1cnJlbnRdLCAocHJvcHMuc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZiksIHRydWUpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9LCBbcHJvcHMuaW5lcnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCwgcHJvcHMuc2hhcmRzXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbEV2ZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBwYXJlbnQpIHtcbiAgICAgICAgaWYgKCd0b3VjaGVzJyBpbiBldmVudCAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuICFsYXN0UHJvcHMuY3VycmVudC5hbGxvd1BpbmNoWm9vbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHRvdWNoU3RhcnQgPSB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBkZWx0YVggPSAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IHRvdWNoU3RhcnRbMF0gLSB0b3VjaFswXTtcbiAgICAgICAgdmFyIGRlbHRhWSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogdG91Y2hTdGFydFsxXSAtIHRvdWNoWzFdO1xuICAgICAgICB2YXIgY3VycmVudEF4aXM7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gTWF0aC5hYnMoZGVsdGFYKSA+IE1hdGguYWJzKGRlbHRhWSkgPyAnaCcgOiAndic7XG4gICAgICAgIC8vIGFsbG93IGhvcml6b250YWwgdG91Y2ggbW92ZSBvbiBSYW5nZSBpbnB1dHMuIFRoZXkgd2lsbCBub3QgY2F1c2UgYW55IHNjcm9sbFxuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIG1vdmVEaXJlY3Rpb24gPT09ICdoJyAmJiB0YXJnZXQudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uID09PSAndicgPyAnaCcgOiAndic7XG4gICAgICAgICAgICBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIG90aGVyIGF4aXMgbWlnaHQgYmUgbm90IHNjcm9sbGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjdGl2ZUF4aXMuY3VycmVudCAmJiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ICYmIChkZWx0YVggfHwgZGVsdGFZKSkge1xuICAgICAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gY3VycmVudEF4aXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50QXhpcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbmNlbGluZ0F4aXMgPSBhY3RpdmVBeGlzLmN1cnJlbnQgfHwgY3VycmVudEF4aXM7XG4gICAgICAgIHJldHVybiBoYW5kbGVTY3JvbGwoY2FuY2VsaW5nQXhpcywgcGFyZW50LCBldmVudCwgY2FuY2VsaW5nQXhpcyA9PT0gJ2gnID8gZGVsdGFYIDogZGVsdGFZLCB0cnVlKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX2V2ZW50KSB7XG4gICAgICAgIHZhciBldmVudCA9IF9ldmVudDtcbiAgICAgICAgaWYgKCFsb2NrU3RhY2subGVuZ3RoIHx8IGxvY2tTdGFja1tsb2NrU3RhY2subGVuZ3RoIC0gMV0gIT09IFN0eWxlKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIGxhc3QgYWN0aXZlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbHRhID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBnZXREZWx0YVhZKGV2ZW50KSA6IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgc291cmNlRXZlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUubmFtZSA9PT0gZXZlbnQudHlwZSAmJiAoZS50YXJnZXQgPT09IGV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQgPT09IGUuc2hhZG93UGFyZW50KSAmJiBkZWx0YUNvbXBhcmUoZS5kZWx0YSwgZGVsdGEpOyB9KVswXTtcbiAgICAgICAgLy8gc2VsZiBldmVudCwgYW5kIHNob3VsZCBiZSBjYW5jZWxlZFxuICAgICAgICBpZiAoc291cmNlRXZlbnQgJiYgc291cmNlRXZlbnQuc2hvdWxkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3V0c2lkZSBvciBzaGFyZCBldmVudFxuICAgICAgICBpZiAoIXNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc2hhcmROb2RlcyA9IChsYXN0UHJvcHMuY3VycmVudC5zaGFyZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7IH0pO1xuICAgICAgICAgICAgdmFyIHNob3VsZFN0b3AgPSBzaGFyZE5vZGVzLmxlbmd0aCA+IDAgPyBzaG91bGRDYW5jZWxFdmVudChldmVudCwgc2hhcmROb2Rlc1swXSkgOiAhbGFzdFByb3BzLmN1cnJlbnQubm9Jc29sYXRpb247XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RvcCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHZhciBzaG91bGRDYW5jZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmFtZSwgZGVsdGEsIHRhcmdldCwgc2hvdWxkKSB7XG4gICAgICAgIHZhciBldmVudCA9IHsgbmFtZTogbmFtZSwgZGVsdGE6IGRlbHRhLCB0YXJnZXQ6IHRhcmdldCwgc2hvdWxkOiBzaG91bGQsIHNoYWRvd1BhcmVudDogZ2V0T3V0ZXJtb3N0U2hhZG93UGFyZW50KHRhcmdldCkgfTtcbiAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQucHVzaChldmVudCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgIT09IGV2ZW50OyB9KTtcbiAgICAgICAgfSwgMSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaFN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRvdWNoU3RhcnRSZWYuY3VycmVudCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxXaGVlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0RGVsdGFYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hNb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXRUb3VjaFhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2tTdGFjay5wdXNoKFN0eWxlKTtcbiAgICAgICAgcHJvcHMuc2V0Q2FsbGJhY2tzKHtcbiAgICAgICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvbldoZWVsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IHNjcm9sbFRvdWNoTW92ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrU3RhY2sgPSBsb2NrU3RhY2suZmlsdGVyKGZ1bmN0aW9uIChpbnN0KSB7IHJldHVybiBpbnN0ICE9PSBTdHlsZTsgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGluZXJ0ID0gcHJvcHMuaW5lcnQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBpbmVydCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZW5lcmF0ZVN0eWxlKGlkKSB9KSA6IG51bGwsXG4gICAgICAgIHJlbW92ZVNjcm9sbEJhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVtb3ZlU2Nyb2xsQmFyLCB7IGdhcE1vZGU6IHByb3BzLmdhcE1vZGUgfSkgOiBudWxsKSk7XG59XG5mdW5jdGlvbiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQobm9kZSkge1xuICAgIHZhciBzaGFkb3dQYXJlbnQgPSBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgc2hhZG93UGFyZW50ID0gbm9kZS5ob3N0O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZG93UGFyZW50O1xufVxuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRHYXBXaWR0aCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbmV4cG9ydCB2YXIgbG9ja0F0dHJpYnV0ZSA9ICdkYXRhLXNjcm9sbC1sb2NrZWQnO1xuLy8gaW1wb3J0YW50IHRpcCAtIG9uY2Ugd2UgbWVhc3VyZSBzY3JvbGxCYXIgd2lkdGggYW5kIHJlbW92ZSB0aGVtXG4vLyB3ZSBjb3VsZCBub3QgcmVwZWF0IHRoaXMgb3BlcmF0aW9uXG4vLyB0aHVzIHdlIGFyZSB1c2luZyBzdHlsZS1zaW5nbGV0b24gLSBvbmx5IHRoZSBmaXJzdCBcInlldCBjb3JyZWN0XCIgc3R5bGUgd2lsbCBiZSBhcHBsaWVkLlxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uIChfYSwgYWxsb3dSZWxhdGl2ZSwgZ2FwTW9kZSwgaW1wb3J0YW50KSB7XG4gICAgdmFyIGxlZnQgPSBfYS5sZWZ0LCB0b3AgPSBfYS50b3AsIHJpZ2h0ID0gX2EucmlnaHQsIGdhcCA9IF9hLmdhcDtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIHJldHVybiBcIlxcbiAgLlwiLmNvbmNhdChub1Njcm9sbGJhcnNDbGFzc05hbWUsIFwiIHtcXG4gICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbiBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XFxuICAgIFwiKS5jb25jYXQoW1xuICAgICAgICBhbGxvd1JlbGF0aXZlICYmIFwicG9zaXRpb246IHJlbGF0aXZlIFwiLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICAgICAgZ2FwTW9kZSA9PT0gJ21hcmdpbicgJiZcbiAgICAgICAgICAgIFwiXFxuICAgIHBhZGRpbmctbGVmdDogXCIuY29uY2F0KGxlZnQsIFwicHg7XFxuICAgIHBhZGRpbmctdG9wOiBcIikuY29uY2F0KHRvcCwgXCJweDtcXG4gICAgcGFkZGluZy1yaWdodDogXCIpLmNvbmNhdChyaWdodCwgXCJweDtcXG4gICAgbWFyZ2luLWxlZnQ6MDtcXG4gICAgbWFyZ2luLXRvcDowO1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgXCIpLFxuICAgICAgICBnYXBNb2RlID09PSAncGFkZGluZycgJiYgXCJwYWRkaW5nLXJpZ2h0OiBcIi5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcIiksXG4gICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcnKSwgXCJcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiB7XFxuICAgIHJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgXCIpLmNvbmNhdChyZW1vdmVkQmFyU2l6ZVZhcmlhYmxlLCBcIjogXCIpLmNvbmNhdChnYXAsIFwicHg7XFxuICB9XFxuXCIpO1xufTtcbnZhciBnZXRDdXJyZW50VXNlQ291bnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY291bnRlciA9IHBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpIHx8ICcwJywgMTApO1xuICAgIHJldHVybiBpc0Zpbml0ZShjb3VudGVyKSA/IGNvdW50ZXIgOiAwO1xufTtcbmV4cG9ydCB2YXIgdXNlTG9ja0F0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlLCAoZ2V0Q3VycmVudFVzZUNvdW50ZXIoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0NvdW50ZXIgPSBnZXRDdXJyZW50VXNlQ291bnRlcigpIC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdDb3VudGVyIDw9IDApIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZShsb2NrQXR0cmlidXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIG5ld0NvdW50ZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogUmVtb3ZlcyBwYWdlIHNjcm9sbGJhciBhbmQgYmxvY2tzIHBhZ2Ugc2Nyb2xsIHdoZW4gbW91bnRlZFxuICovXG5leHBvcnQgdmFyIFJlbW92ZVNjcm9sbEJhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBub1JlbGF0aXZlID0gX2Eubm9SZWxhdGl2ZSwgbm9JbXBvcnRhbnQgPSBfYS5ub0ltcG9ydGFudCwgX2IgPSBfYS5nYXBNb2RlLCBnYXBNb2RlID0gX2IgPT09IHZvaWQgMCA/ICdtYXJnaW4nIDogX2I7XG4gICAgdXNlTG9ja0F0dHJpYnV0ZSgpO1xuICAgIC8qXG4gICAgIGdhcCB3aWxsIGJlIG1lYXN1cmVkIG9uIGV2ZXJ5IGNvbXBvbmVudCBtb3VudFxuICAgICBob3dldmVyIGl0IHdpbGwgYmUgdXNlZCBvbmx5IGJ5IHRoZSBcImZpcnN0XCIgaW52b2NhdGlvblxuICAgICBkdWUgdG8gc2luZ2xldG9uIG5hdHVyZSBvZiA8U3R5bGVcbiAgICAgKi9cbiAgICB2YXIgZ2FwID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRHYXBXaWR0aChnYXBNb2RlKTsgfSwgW2dhcE1vZGVdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdldFN0eWxlcyhnYXAsICFub1JlbGF0aXZlLCBnYXBNb2RlLCAhbm9JbXBvcnRhbnQgPyAnIWltcG9ydGFudCcgOiAnJykgfSk7XG59O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG4vKipcbiAqIGNyZWF0ZXMgYSBob29rIHRvIGNvbnRyb2wgc3R5bGUgc2luZ2xldG9uXG4gKiBAc2VlIHtAbGluayBzdHlsZVNpbmdsZXRvbn0gZm9yIGEgc2FmZXIgY29tcG9uZW50IHZlcnNpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gKiAvLy9cbiAqIHVzZVN0eWxlKCdib2R5IHsgb3ZlcmZsb3c6IGhpZGRlbn0nKTtcbiAqL1xuZXhwb3J0IHZhciBzdHlsZUhvb2tTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gc3R5bGVzaGVldFNpbmdsZXRvbigpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3R5bGVzLCBpc0R5bmFtaWMpIHtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZChzdHlsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzaGVldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtzdHlsZXMgJiYgaXNEeW5hbWljXSk7XG4gICAgfTtcbn07XG4iLCAidmFyIGN1cnJlbnROb25jZTtcbmV4cG9ydCB2YXIgc2V0Tm9uY2UgPSBmdW5jdGlvbiAobm9uY2UpIHtcbiAgICBjdXJyZW50Tm9uY2UgPSBub25jZTtcbn07XG5leHBvcnQgdmFyIGdldE5vbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjdXJyZW50Tm9uY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb25jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIF9fd2VicGFja19ub25jZV9fO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICJpbXBvcnQgeyBnZXROb25jZSB9IGZyb20gJ2dldC1ub25jZSc7XG5mdW5jdGlvbiBtYWtlU3R5bGVUYWcoKSB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgdGFnLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgIHZhciBub25jZSA9IGdldE5vbmNlKCk7XG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgbm9uY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGFnO1xufVxuZnVuY3Rpb24gaW5qZWN0U3R5bGVzKHRhZywgY3NzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0YWcuc3R5bGVTaGVldCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhZy5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVUYWcodGFnKSB7XG4gICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xufVxuZXhwb3J0IHZhciBzdHlsZXNoZWV0U2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgc3R5bGVzaGVldCA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlc2hlZXQgPSBtYWtlU3R5bGVUYWcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U3R5bGVzKHN0eWxlc2hlZXQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVUYWcoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIGlmICghY291bnRlciAmJiBzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5wYXJlbnROb2RlICYmIHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuLyoqXG4gKiBjcmVhdGUgYSBDb21wb25lbnQgdG8gYWRkIHN0eWxlcyBvbiBkZW1hbmRcbiAqIC0gc3R5bGVzIGFyZSBhZGRlZCB3aGVuIGZpcnN0IGluc3RhbmNlIGlzIG1vdW50ZWRcbiAqIC0gc3R5bGVzIGFyZSByZW1vdmVkIHdoZW4gdGhlIGxhc3QgaW5zdGFuY2UgaXMgdW5tb3VudGVkXG4gKiAtIGNoYW5naW5nIHN0eWxlcyBpbiBydW50aW1lIGRvZXMgbm90aGluZyB1bmxlc3MgZHluYW1pYyBpcyBzZXQuIEJ1dCB3aXRoIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBjYW4gbGVhZCB0byB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCB2YXIgc3R5bGVTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gICAgdmFyIFNoZWV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBfYS5zdHlsZXMsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICB1c2VTdHlsZShzdHlsZXMsIGR5bmFtaWMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBTaGVldDtcbn07XG4iLCAiZXhwb3J0IHZhciB6ZXJvR2FwID0ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGdhcDogMCxcbn07XG52YXIgcGFyc2UgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gcGFyc2VJbnQoeCB8fCAnJywgMTApIHx8IDA7IH07XG52YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICB2YXIgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICB2YXIgbGVmdCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nTGVmdCcgOiAnbWFyZ2luTGVmdCddO1xuICAgIHZhciB0b3AgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1RvcCcgOiAnbWFyZ2luVG9wJ107XG4gICAgdmFyIHJpZ2h0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdSaWdodCcgOiAnbWFyZ2luUmlnaHQnXTtcbiAgICByZXR1cm4gW3BhcnNlKGxlZnQpLCBwYXJzZSh0b3ApLCBwYXJzZShyaWdodCldO1xufTtcbmV4cG9ydCB2YXIgZ2V0R2FwV2lkdGggPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB6ZXJvR2FwO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldChnYXBNb2RlKTtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBvZmZzZXRzWzBdLFxuICAgICAgICB0b3A6IG9mZnNldHNbMV0sXG4gICAgICAgIHJpZ2h0OiBvZmZzZXRzWzJdLFxuICAgICAgICBnYXA6IE1hdGgubWF4KDAsIHdpbmRvd1dpZHRoIC0gZG9jdW1lbnRXaWR0aCArIG9mZnNldHNbMl0gLSBvZmZzZXRzWzBdKSxcbiAgICB9O1xufTtcbiIsICJ2YXIgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCB2YXIgbm9uUGFzc2l2ZSA9IHBhc3NpdmVTdXBwb3J0ZWQgPyB7IHBhc3NpdmU6IGZhbHNlIH0gOiBmYWxzZTtcbiIsICJ2YXIgYWx3YXlzQ29udGFpbnNTY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHRleHRhcmVhIHdpbGwgYWx3YXlzIF9jb250YWluXyBzY3JvbGwgaW5zaWRlIHNlbGYuIEl0IG9ubHkgY2FuIGJlIGhpZGRlblxuICAgIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XG59O1xudmFyIGVsZW1lbnRDYW5CZVNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUsIG92ZXJmbG93KSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgIHJldHVybiAoXG4gICAgLy8gbm90LW5vdC1zY3JvbGxhYmxlXG4gICAgc3R5bGVzW292ZXJmbG93XSAhPT0gJ2hpZGRlbicgJiZcbiAgICAgICAgLy8gY29udGFpbnMgc2Nyb2xsIGluc2lkZSBzZWxmXG4gICAgICAgICEoc3R5bGVzLm92ZXJmbG93WSA9PT0gc3R5bGVzLm92ZXJmbG93WCAmJiAhYWx3YXlzQ29udGFpbnNTY3JvbGwobm9kZSkgJiYgc3R5bGVzW292ZXJmbG93XSA9PT0gJ3Zpc2libGUnKSk7XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1knKTsgfTtcbnZhciBlbGVtZW50Q291bGRCZUhTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBlbGVtZW50Q2FuQmVTY3JvbGxlZChub2RlLCAnb3ZlcmZsb3dYJyk7IH07XG5leHBvcnQgdmFyIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgZG8ge1xuICAgICAgICAvLyBTa2lwIG92ZXIgc2hhZG93IHJvb3RcbiAgICAgICAgaWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSAndW5kZWZpbmVkJyAmJiBjdXJyZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNTY3JvbGxhYmxlID0gZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCBjdXJyZW50KTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIGN1cnJlbnQpLCBzY3JvbGxIZWlnaHQgPSBfYVsxXSwgY2xpZW50SGVpZ2h0ID0gX2FbMl07XG4gICAgICAgICAgICBpZiAoc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IG93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbnZhciBnZXRWU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IF9hLnNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0ID0gX2Euc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgPSBfYS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICBdO1xufTtcbnZhciBnZXRIU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBfYS5zY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCA9IF9hLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCA9IF9hLmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICBdO1xufTtcbnZhciBlbGVtZW50Q291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQobm9kZSkgOiBlbGVtZW50Q291bGRCZUhTY3JvbGxlZChub2RlKTtcbn07XG52YXIgZ2V0U2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZ2V0VlNjcm9sbFZhcmlhYmxlcyhub2RlKSA6IGdldEhTY3JvbGxWYXJpYWJsZXMobm9kZSk7XG59O1xudmFyIGdldERpcmVjdGlvbkZhY3RvciA9IGZ1bmN0aW9uIChheGlzLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZWxlbWVudCdzIGRpcmVjdGlvbiBpcyBydGwgKHJpZ2h0LXRvLWxlZnQpLCB0aGVuIHNjcm9sbExlZnQgaXMgMCB3aGVuIHRoZSBzY3JvbGxiYXIgaXMgYXQgaXRzIHJpZ2h0bW9zdCBwb3NpdGlvbixcbiAgICAgKiBhbmQgdGhlbiBpbmNyZWFzaW5nbHkgbmVnYXRpdmUgYXMgeW91IHNjcm9sbCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9zY3JvbGxMZWZ0XG4gICAgICovXG4gICAgcmV0dXJuIGF4aXMgPT09ICdoJyAmJiBkaXJlY3Rpb24gPT09ICdydGwnID8gLTEgOiAxO1xufTtcbmV4cG9ydCB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKGF4aXMsIGVuZFRhcmdldCwgZXZlbnQsIHNvdXJjZURlbHRhLCBub092ZXJzY3JvbGwpIHtcbiAgICB2YXIgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGF4aXMsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVuZFRhcmdldCkuZGlyZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb25GYWN0b3IgKiBzb3VyY2VEZWx0YTtcbiAgICAvLyBmaW5kIHNjcm9sbGFibGUgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICB2YXIgdGFyZ2V0SW5Mb2NrID0gZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbFRvcCA9IDA7XG4gICAgZG8ge1xuICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgdGFyZ2V0KSwgcG9zaXRpb24gPSBfYVswXSwgc2Nyb2xsXzEgPSBfYVsxXSwgY2FwYWNpdHkgPSBfYVsyXTtcbiAgICAgICAgdmFyIGVsZW1lbnRTY3JvbGwgPSBzY3JvbGxfMSAtIGNhcGFjaXR5IC0gZGlyZWN0aW9uRmFjdG9yICogcG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiB8fCBlbGVtZW50U2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsICs9IGVsZW1lbnRTY3JvbGw7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsVG9wICs9IHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoXG4gICAgLy8gcG9ydGFsZWQgY29udGVudFxuICAgICghdGFyZ2V0SW5Mb2NrICYmIHRhcmdldCAhPT0gZG9jdW1lbnQuYm9keSkgfHxcbiAgICAgICAgLy8gc2VsZiBjb250ZW50XG4gICAgICAgICh0YXJnZXRJbkxvY2sgJiYgKGVuZFRhcmdldC5jb250YWlucyh0YXJnZXQpIHx8IGVuZFRhcmdldCA9PT0gdGFyZ2V0KSkpO1xuICAgIC8vIGhhbmRsZSBlcHNpbG9uIGFyb3VuZCAwIChub24gc3RhbmRhcmQgem9vbSBsZXZlbHMpXG4gICAgaWYgKGlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGwpIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgZGVsdGEgPiBhdmFpbGFibGVTY3JvbGwpKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbFRvcCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiAtZGVsdGEgPiBhdmFpbGFibGVTY3JvbGxUb3ApKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkQ2FuY2VsU2Nyb2xsO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsU2lkZUNhciB9IGZyb20gJy4vU2lkZUVmZmVjdCc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKGVmZmVjdENhciwgUmVtb3ZlU2Nyb2xsU2lkZUNhcik7XG4iLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhpZGVPdGhlcnMgfSBmcm9tICdhcmlhLWhpZGRlbic7XG5pbXBvcnQgeyBJbnRlcmFjdGl2aXR5RGlzYWJsZXIgfSBmcm9tICcuL0ludGVyYWN0aXZpdHlEaXNhYmxlcic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEVmZmVjdChfYSkge1xuICAgIHZhciBzZXRMb2NrUHJvcHMgPSBfYS5zZXRMb2NrUHJvcHMsIG9uRXNjYXBlS2V5ID0gX2Eub25Fc2NhcGVLZXksIG9uQ2xpY2tPdXRzaWRlID0gX2Eub25DbGlja091dHNpZGUsIHNoYXJkcyA9IF9hLnNoYXJkcywgb25BY3RpdmF0aW9uID0gX2Eub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IF9hLm9uRGVhY3RpdmF0aW9uLCBub0lzb2xhdGlvbiA9IF9hLm5vSXNvbGF0aW9uO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKHVuZGVmaW5lZCksIGFjdGl2ZU5vZGUgPSBfYlswXSwgc2V0QWN0aXZlTm9kZSA9IF9iWzFdO1xuICAgIHZhciBsYXN0RXZlbnRUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gICAgdmFyIG1vdXNlVG91Y2hlcyA9IHVzZVJlZigwKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gMjcpICYmXG4gICAgICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHxcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPT09IGxhc3RFdmVudFRhcmdldC5jdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCAmJiBldmVudC5idXR0b24gIT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXJkcyAmJlxuICAgICAgICAgICAgICAgIHNoYXJkc1xuICAgICAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgICAgIC5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobm9kZSAmJiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID09PSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25DbGlja091dHNpZGUpIHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBtb3VzZVRvdWNoZXMuY3VycmVudCA9IGV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFthY3RpdmVOb2RlLCBvbkNsaWNrT3V0c2lkZSwgb25Fc2NhcGVLZXldKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgaWYgKG9uQWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgIG9uQWN0aXZhdGlvbihhY3RpdmVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uRGVhY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGVhY3RpdmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFshIWFjdGl2ZU5vZGVdKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3VuZG8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgICAgICB2YXIgdW5tb3VudGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbk5vZGVBY3RpdmF0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghbm9Jc29sYXRpb24pIHtcbiAgICAgICAgICAgICAgICBfdW5kbyA9IGhpZGVPdGhlcnMoX19zcHJlYWRBcnJheXMoW25vZGVdLCAoc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZikpLCBkb2N1bWVudC5ib2R5LCBmb2N1c0hpZGRlbk1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBY3RpdmVOb2RlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGU7IH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ob2RlRGVhY3RpdmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3VuZG8oKTtcbiAgICAgICAgICAgIGlmICghdW5tb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlTm9kZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0TG9ja1Byb3BzKHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFdmVudFRhcmdldC5jdXJyZW50ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFdmVudFRhcmdldC5jdXJyZW50ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25BY3RpdmF0aW9uOiBvbk5vZGVBY3RpdmF0aW9uLFxuICAgICAgICAgICAgb25EZWFjdGl2YXRpb246IG9uTm9kZURlYWN0aXZhdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVubW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICBzZXRMb2NrUHJvcHMoZmFsc2UpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcmFjdGl2aXR5RGlzYWJsZXIsIG51bGwpO1xufVxuIiwgInZhciBnZXREZWZhdWx0UGFyZW50ID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzYW1wbGVUYXJnZXQgPSBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0WzBdIDogb3JpZ2luYWxUYXJnZXQ7XG4gICAgcmV0dXJuIHNhbXBsZVRhcmdldC5vd25lckRvY3VtZW50LmJvZHk7XG59O1xudmFyIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xudmFyIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbnZhciBtYXJrZXJNYXAgPSB7fTtcbnZhciBsb2NrQ291bnQgPSAwO1xudmFyIHVud3JhcEhvc3QgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlICYmIChub2RlLmhvc3QgfHwgdW53cmFwSG9zdChub2RlLnBhcmVudE5vZGUpKTtcbn07XG52YXIgY29ycmVjdFRhcmdldHMgPSBmdW5jdGlvbiAocGFyZW50LCB0YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRhcmdldHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChwYXJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29ycmVjdGVkVGFyZ2V0ID0gdW53cmFwSG9zdCh0YXJnZXQpO1xuICAgICAgICBpZiAoY29ycmVjdGVkVGFyZ2V0ICYmIHBhcmVudC5jb250YWlucyhjb3JyZWN0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29ycmVjdGVkVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuJywgdGFyZ2V0LCAnaW4gbm90IGNvbnRhaW5lZCBpbnNpZGUnLCBwYXJlbnQsICcuIERvaW5nIG5vdGhpbmcnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfSk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbnRyb2xBdHRyaWJ1dGVdIC0gaHRtbCBBdHRyaWJ1dGUgdG8gY29udHJvbFxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbnZhciBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lLCBjb250cm9sQXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldHMgPSBjb3JyZWN0VGFyZ2V0cyhwYXJlbnROb2RlLCBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgaWYgKCFtYXJrZXJNYXBbbWFya2VyTmFtZV0pIHtcbiAgICAgICAgbWFya2VyTWFwW21hcmtlck5hbWVdID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgdmFyIG1hcmtlckNvdW50ZXIgPSBtYXJrZXJNYXBbbWFya2VyTmFtZV07XG4gICAgdmFyIGhpZGRlbk5vZGVzID0gW107XG4gICAgdmFyIGVsZW1lbnRzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgIHZhciBlbGVtZW50c1RvU3RvcCA9IG5ldyBTZXQodGFyZ2V0cyk7XG4gICAgdmFyIGtlZXAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbCB8fCBlbGVtZW50c1RvS2VlcC5oYXMoZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHNUb0tlZXAuYWRkKGVsKTtcbiAgICAgICAga2VlcChlbC5wYXJlbnROb2RlKTtcbiAgICB9O1xuICAgIHRhcmdldHMuZm9yRWFjaChrZWVwKTtcbiAgICB2YXIgZGVlcCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgZWxlbWVudHNUb1N0b3AuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvS2VlcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZWVwKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlIaWRkZW4gPSBhdHRyICE9PSBudWxsICYmIGF0dHIgIT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSAoY291bnRlck1hcC5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSAobWFya2VyQ291bnRlci5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbk5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyVmFsdWUgPT09IDEgJiYgYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJWYWx1ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobWFya2VyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uICcsIG5vZGUsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBkZWVwKHBhcmVudE5vZGUpO1xuICAgIGVsZW1lbnRzVG9LZWVwLmNsZWFyKCk7XG4gICAgbG9ja0NvdW50Kys7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGlkZGVuTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdW5jb250cm9sbGVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hcmtlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobWFya2VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2NrQ291bnQtLTtcbiAgICAgICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyXG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgbWFya2VyTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9O1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaGlkZU90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWFyaWEtaGlkZGVuJzsgfVxuICAgIHZhciB0YXJnZXRzID0gQXJyYXkuZnJvbShBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2hvdWxkIG5vdCBoaWRlIGFyaWFMaXZlIGVsZW1lbnRzIC0gaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9hcmlhLWhpZGRlbi9pc3N1ZXMvMTBcbiAgICB0YXJnZXRzLnB1c2guYXBwbHkodGFyZ2V0cywgQXJyYXkuZnJvbShhY3RpdmVQYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLWxpdmVdJykpKTtcbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyh0YXJnZXRzLCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnYXJpYS1oaWRkZW4nKTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGluZXJ0XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIGluZXJ0T3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtaW5lcnQtZWQnOyB9XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMob3JpZ2luYWxUYXJnZXQsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdpbmVydCcpO1xufTtcbi8qKlxuICogQHJldHVybnMgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIGluZXJ0XG4gKi9cbmV4cG9ydCB2YXIgc3VwcG9ydHNJbmVydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBIVE1MRWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBBdXRvbWF0aWMgZnVuY3Rpb24gdG8gXCJzdXBwcmVzc1wiIERPTSBlbGVtZW50cyAtIF9oaWRlXyBvciBfaW5lcnRfIGluIHRoZSBiZXN0IHBvc3NpYmxlIHdheVxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBzdXBwcmVzc090aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLXN1cHByZXNzZWQnOyB9XG4gICAgcmV0dXJuIChzdXBwb3J0c0luZXJ0KCkgPyBpbmVydE90aGVycyA6IGhpZGVPdGhlcnMpKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xudmFyIHN0eWxlcyA9IFwiXFxuIFtcIiArIGZvY3VzSGlkZGVuTWFya2VyICsgXCJdIHtcXG4gICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbiB9XFxuXCI7XG5leHBvcnQgdmFyIEludGVyYWN0aXZpdHlEaXNhYmxlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBzdHlsZXMgfSk7IH07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCAncmVhY3QtZm9jdXMtbG9jay9zaWRlY2FyJztcbmltcG9ydCAncmVhY3QtcmVtb3ZlLXNjcm9sbC9zaWRlY2FyJztcbmltcG9ydCB7IEVmZmVjdCB9IGZyb20gJy4vRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBFZmZlY3QpO1xuIiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuaW1wb3J0IHsgY3NzIGFzIF9jc3MgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJhbmNob3JDbGFzc05hbWVcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImJ1dHRvblwiLCBcImJ1dHRvblJlZlwiLCBcImluc2VydFwiLCBcImlzT3BlblwiLCBcIm93bkZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZVBvcG92ZXJcIiwgXCJwYW5lbENsYXNzTmFtZVwiLCBcInBhbmVsUGFkZGluZ1NpemVcIiwgXCJwYW5lbFByb3BzXCIsIFwicGFuZWxSZWZcIiwgXCJwYW5lbFN0eWxlXCIsIFwicG9wb3ZlclNjcmVlblJlYWRlclRleHRcIiwgXCJwb3BvdmVyUmVmXCIsIFwiaGFzQXJyb3dcIiwgXCJhcnJvd0NoaWxkcmVuXCIsIFwicmVwb3NpdGlvbk9uU2Nyb2xsXCIsIFwiekluZGV4XCIsIFwiYXR0YWNoVG9BbmNob3JcIiwgXCJkaXNwbGF5XCIsIFwib2Zmc2V0XCIsIFwib25UcmFwRGVhY3RpdmF0aW9uXCIsIFwiYnVmZmVyXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImNvbnRhaW5lclwiLCBcImZvY3VzVHJhcFByb3BzXCIsIFwiaW5pdGlhbEZvY3VzXCIsIFwidGFiSW5kZXhcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9jdXNhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBjYXNjYWRpbmdNZW51S2V5cywgZ2V0VHJhbnNpdGlvblRpbWluZ3MsIGdldFdhaXREdXJhdGlvbiwgcGVyZm9ybU9uRnJhbWUsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlNdXRhdGlvbk9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXInO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgZ2V0RWxlbWVudFpJbmRleCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgfSBmcm9tICcuLi9vdXRzaWRlX2NsaWNrX2RldGVjdG9yJztcbmltcG9ydCB7IEV1aVBvcG92ZXJBcnJvdyB9IGZyb20gJy4vcG9wb3Zlcl9hcnJvdyc7XG5pbXBvcnQgeyBldWlQb3BvdmVyU3R5bGVzIH0gZnJvbSAnLi9wb3BvdmVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyUGFuZWwgfSBmcm9tICcuL3BvcG92ZXJfcGFuZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgcG9wb3ZlckFuY2hvclBvc2l0aW9uID0gWyd1cENlbnRlcicsICd1cExlZnQnLCAndXBSaWdodCcsICdkb3duQ2VudGVyJywgJ2Rvd25MZWZ0JywgJ2Rvd25SaWdodCcsICdsZWZ0Q2VudGVyJywgJ2xlZnRVcCcsICdsZWZ0RG93bicsICdyaWdodENlbnRlcicsICdyaWdodFVwJywgJ3JpZ2h0RG93biddO1xudmFyIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXAgPSB7XG4gIHVwOiAndG9wJyxcbiAgcmlnaHQ6ICdyaWdodCcsXG4gIGRvd246ICdib3R0b20nLFxuICBsZWZ0OiAnbGVmdCdcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSB7XG4gIC8vIG1hcHMgdGhlIGFuY2hvciBwb3NpdGlvbiB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJ0b3BcIiwgXCJkb3duUmlnaHRcIiAtPiBcImJvdHRvbVwiXG4gIC8vIGV4dHJhY3QgdGhlIGZpcnN0IHBvc2l0aW9uYWwgd29yZCBmcm9tIGFuY2hvclBvc2l0aW9uOlxuICAvLyBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyAoXCIgXiBcIikgb2YgYW5jaG9yUG9zaXRpb24gYW5kXG4gIC8vIGNhcHR1cmVzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyAoXCIgKC4qPykgXCIpIHVudGlsIHRoZVxuICAvLyBmaXJzdCBjYXBpdGFsIGxldHRlciAoXCIgW0EtWl0gXCIpIGlzIGVuY291bnRlcmVkXG4gIHZhciBfcmVmID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goL14oLio/KVtBLVpdLyksXG4gICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgcHJpbWFyeVBvc2l0aW9uID0gX3JlZjJbMV07XG5cbiAgcmV0dXJuIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXBbcHJpbWFyeVBvc2l0aW9uXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyQWxpZ25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgZ3Jhdml0eSB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJsZWZ0XCIsIFwicmlnaHREb3duXCIgLT4gXCJib3R0b21cIlxuICAvLyBleHRyYWN0IHRoZSBzZWNvbmQgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhIGNhcHR1cmUgZ3JvdXAgYXQgdGhlIGZpcnN0IGNhcGl0YWwgbGV0dGVyXG4gIC8vIGFuZCBpbmNsdWRlcyBldmVyeXRoaW5nIGFmdGVyIGl0XG4gIHZhciBfcmVmMyA9IGFuY2hvclBvc2l0aW9uLm1hdGNoKC8oW0EtWl0uKikvKSxcbiAgICAgIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDIpLFxuICAgICAgYWxpZ24gPSBfcmVmNFsxXTsgLy8gdGhpcyBwZXJmb3JtcyB0d28gdGFza3M6XG4gIC8vIDEuIG5vcm1hbGl6ZXMgdGhlIGFsaWduIHBvc2l0aW9uIGJ5IGxvd2VyY2FzaW5nIGl0XG4gIC8vIDIuIGBjZW50ZXJgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxvb2t1cCBtYXAgd2hpY2ggY29udmVydHMgaXQgdG8gYHVuZGVmaW5lZGAgbWVhbmluZyBubyBhbGlnblxuXG5cbiAgcmV0dXJuIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXBbYWxpZ24udG9Mb3dlckNhc2UoKV07XG59XG52YXIgREVGQVVMVF9QT1BPVkVSX1NUWUxFUyA9IHtcbiAgdG9wOiA1MCxcbiAgbGVmdDogNTBcbn07XG52YXIgcmV0dXJuRm9jdXNDb25maWcgPSB7XG4gIHByZXZlbnRTY3JvbGw6IHRydWVcbn07XG52YXIgY2xvc2luZ1RyYW5zaXRpb25UaW1lID0gMjUwOyAvLyBUT0RPOiBEUlkgb3V0IHZhciB3aGVuIGNvbnZlcnRpbmcgdG8gQ1NTLWluLUpTXG5cbmV4cG9ydCB2YXIgRXVpUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpUG9wb3ZlciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlQb3BvdmVyKTtcblxuICBmdW5jdGlvbiBFdWlQb3BvdmVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVBvcG92ZXIpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVzcG9zaXRpb25UaW1lb3V0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RyYW5kZWRGb2N1c1RpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zaW5nVHJhbnNpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRlc2NyaXB0aW9uSWRcIiwgaHRtbElkR2VuZXJhdG9yKCkoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgX3RoaXMucHJvcHMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Fc2NhcGVLZXlcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuXG4gICAgICAgIF90aGlzLmhhbmRsZVN0cmFuZGVkRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTdHJhbmRlZEZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJZiBgcmV0dXJuRm9jdXNgIGZhaWxlZCBhbmQgZm9jdXMgd2FzIHN0cmFuZGVkIG9uIHRoZSBib2R5LFxuICAgICAgICAvLyBhdHRlbXB0IHRvIG1hbnVhbGx5IHJlc3RvcmUgZm9jdXMgdG8gdGhlIHRvZ2dsZSBidXR0b25cbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLmJ1dHRvbikgcmV0dXJuO1xuICAgICAgICAgIHZhciBmb2N1c2FibGVJdGVtcyA9IGZvY3VzYWJsZShfdGhpcy5idXR0b24pO1xuICAgICAgICAgIGlmICghZm9jdXNhYmxlSXRlbXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgdmFyIHRvZ2dsZUJ1dHRvbiA9IGZvY3VzYWJsZUl0ZW1zWzBdO1xuICAgICAgICAgIHRvZ2dsZUJ1dHRvbi5mb2N1cyhyZXR1cm5Gb2N1c0NvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gY2FzY2FkaW5nTWVudUtleXMuRVNDQVBFKSB7XG4gICAgICAgIF90aGlzLm9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIG9ubHkgY2xvc2UgdGhlIHBvcG92ZXIgaWYgdGhlIGV2ZW50IHNvdXJjZSBpc24ndCB0aGUgYW5jaG9yIGJ1dHRvblxuICAgICAgLy8gb3RoZXJ3aXNlLCBpdCBpcyB1cCB0byB0aGUgYW5jaG9yIHRvIHRvZ2dsZSB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdHVzXG4gICAgICBpZiAoX3RoaXMuYnV0dG9uICYmIF90aGlzLmJ1dHRvbi5jb250YWlucyhldmVudC50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wZW5Qb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0KTtcblxuICAgICAgaWYgKF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSk7XG4gICAgICB9IC8vIFdlIG5lZWQgdG8gc2V0IHRoaXMgc3RhdGUgYSBiZWF0IGFmdGVyIHRoZSByZW5kZXIgdGFrZXMgcGxhY2UsIHNvIHRoYXQgdGhlIENTU1xuICAgICAgLy8gdHJhbnNpdGlvbiBjYW4gdGFrZSBlZmZlY3QuXG5cblxuICAgICAgX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7IC8vIGZvciBlYWNoIGNoaWxkIGVsZW1lbnQgb2YgYHRoaXMucGFuZWxgLCBmaW5kIGFueSB0cmFuc2l0aW9uIGR1cmF0aW9uIHdlIHNob3VsZCB3YWl0IGZvciBiZWZvcmUgc3RhYmlsaXppbmdcblxuICAgICAgdmFyIF9BcnJheSRwcm90b3R5cGUkc2xpYyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKF90aGlzLnBhbmVsID8gW190aGlzLnBhbmVsXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KEFycmF5LmZyb20oX3RoaXMucGFuZWwuY2hpbGRyZW4pKSkgOiBbXSkucmVkdWNlKGZ1bmN0aW9uIChfcmVmNSwgZWxlbWVudCkge1xuICAgICAgICB2YXIgZHVyYXRpb25NYXRjaCA9IF9yZWY1LmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgICBkZWxheU1hdGNoID0gX3JlZjUuZGVsYXlNYXRjaDtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25UaW1pbmdzID0gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZHVyYXRpb25NYXRjaDogTWF0aC5tYXgoZHVyYXRpb25NYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCksXG4gICAgICAgICAgZGVsYXlNYXRjaDogTWF0aC5tYXgoZGVsYXlNYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZGVsYXlNYXRjaClcbiAgICAgICAgfTtcbiAgICAgIH0sIHtcbiAgICAgICAgZHVyYXRpb25NYXRjaDogMCxcbiAgICAgICAgZGVsYXlNYXRjaDogMFxuICAgICAgfSksXG4gICAgICAgICAgZHVyYXRpb25NYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kdXJhdGlvbk1hdGNoLFxuICAgICAgICAgIGRlbGF5TWF0Y2ggPSBfQXJyYXkkcHJvdG90eXBlJHNsaWMuZGVsYXlNYXRjaDtcblxuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCk7XG4gICAgICBfdGhpcy5yZXNwb3NpdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5TdGFibGU6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgZHVyYXRpb25NYXRjaCArIGRlbGF5TWF0Y2gpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgIHZhciB3YWl0RHVyYXRpb24gPSBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcyk7XG5cbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG5cbiAgICAgIHBlcmZvcm1PbkZyYW1lKHdhaXREdXJhdGlvbiwgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlclwiLCBmdW5jdGlvbiAoYWxsb3dFbmZvcmNlUG9zaXRpb24pIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b24gPT0gbnVsbCB8fCBfdGhpcy5wYW5lbCA9PSBudWxsKSByZXR1cm47XG4gICAgICB2YXIgX3JlZjYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF9yZWY2LmFuY2hvclBvc2l0aW9uO1xuICAgICAgdmFyIHBvc2l0aW9uID0gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKTtcbiAgICAgIHZhciBmb3JjZVBvc2l0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoYWxsb3dFbmZvcmNlUG9zaXRpb24gJiYgX3RoaXMuc3RhdGUuaXNPcGVuU3RhYmxlICYmIF90aGlzLnN0YXRlLm9wZW5Qb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHBvc2l0aW9uID0gX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uO1xuICAgICAgICBmb3JjZVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGNvbnRhaW5lcjogX3RoaXMucHJvcHMuY29udGFpbmVyLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgIGZvcmNlUG9zaXRpb246IGZvcmNlUG9zaXRpb24sXG4gICAgICAgIGFsaWduOiBnZXRQb3BvdmVyQWxpZ25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pLFxuICAgICAgICBhbmNob3I6IF90aGlzLmJ1dHRvbixcbiAgICAgICAgcG9wb3ZlcjogX3RoaXMucGFuZWwsXG4gICAgICAgIG9mZnNldDogIV90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yICYmIF90aGlzLnByb3BzLmhhc0Fycm93ID8gMTYgKyAoX3RoaXMucHJvcHMub2Zmc2V0IHx8IDApIDogOCArIChfdGhpcy5wcm9wcy5vZmZzZXQgfHwgMCksXG4gICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgYXJyb3dXaWR0aDogMjQsXG4gICAgICAgICAgYXJyb3dCdWZmZXI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHJldHVybkJvdW5kaW5nQm94OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgYnVmZmVyOiBfdGhpcy5wcm9wcy5idWZmZXJcbiAgICAgIH0pLFxuICAgICAgICAgIHRvcCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnRvcCxcbiAgICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICBmb3VuZFBvc2l0aW9uID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ucG9zaXRpb24sXG4gICAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdyxcbiAgICAgICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94OyAvLyB0aGUgcG9wb3ZlcidzIHotaW5kZXggbXVzdCBpbmhlcml0IGZyb20gdGhlIGJ1dHRvblxuICAgICAgLy8gdGhpcyBrZWVwcyBhIGJ1dHRvbidzIHBvcG92ZXIgdW5kZXIgYSBmbHlvdXQgdGhhdCB3b3VsZCBjb3ZlciB0aGUgYnV0dG9uXG4gICAgICAvLyBidXQgYSBwb3BvdmVyIHRyaWdnZXJlZCBpbnNpZGUgYSBmbHlvdXQgd2lsbCBhcHBlYXIgb3ZlciB0aGF0IGZseW91dFxuXG5cbiAgICAgIHZhciB6SW5kZXhQcm9wID0gX3RoaXMucHJvcHMuekluZGV4O1xuICAgICAgdmFyIHpJbmRleCA9IHpJbmRleFByb3AgPT0gbnVsbCA/IGdldEVsZW1lbnRaSW5kZXgoX3RoaXMuYnV0dG9uLCBfdGhpcy5wYW5lbCkgKyAyMDAwIDogekluZGV4UHJvcDtcblxuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnByb3BzLnBhbmVsU3R5bGUpLCB7fSwge1xuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbGVmdDogX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgYW5jaG9yQm91bmRpbmdCb3ggPyBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IDogbGVmdCxcbiAgICAgICAgekluZGV4OiB6SW5kZXhcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgd2lsbFJlbmRlckFycm93ID0gIV90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yICYmIF90aGlzLnByb3BzLmhhc0Fycm93O1xuICAgICAgdmFyIGFycm93U3R5bGVzID0gd2lsbFJlbmRlckFycm93ID8gYXJyb3cgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgYXJyb3dQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb247XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3ZlclN0eWxlczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93U3R5bGVzLFxuICAgICAgICBhcnJvd1Bvc2l0aW9uOiBhcnJvd1Bvc2l0aW9uLFxuICAgICAgICBvcGVuUG9zaXRpb246IGZvdW5kUG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlckZpeGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3Zlcih0cnVlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblBvcG92ZXJGbHVpZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXIoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG4gICAgICBfdGhpcy5wcm9wcy5wYW5lbFJlZiAmJiBfdGhpcy5wcm9wcy5wYW5lbFJlZihub2RlKTtcblxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAvLyBwYW5lbCBoYXMgdW5tb3VudGVkLCByZXN0b3JlIHRoZSBzdGF0ZSBkZWZhdWx0c1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgICAgICBhcnJvd1N0eWxlczoge30sXG4gICAgICAgICAgYXJyb3dQb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAgICAgaXNPcGVuU3RhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcGFuZWwgaXMgY29taW5nIGludG8gZXhpc3RlbmNlXG4gICAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKCk7XG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25SZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLmJ1dHRvbiA9IG5vZGU7XG4gICAgICBfdGhpcy5wcm9wcy5idXR0b25SZWYgJiYgX3RoaXMucHJvcHMuYnV0dG9uUmVmKG5vZGUpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgaXNPcGVuOiBwcm9wcy5pc09wZW5cbiAgICAgIH0sXG4gICAgICBzdXBwcmVzc2luZ1BvcG92ZXI6IHByb3BzLmlzT3BlbixcbiAgICAgIC8vIG9ubHkgc3VwcHJlc3MgaWYgY3JlYXRlZCB3aXRoIGlzT3Blbj10cnVlXG4gICAgICBpc0Nsb3Npbmc6IGZhbHNlLFxuICAgICAgaXNPcGVuaW5nOiBmYWxzZSxcbiAgICAgIHBvcG92ZXJTdHlsZXM6IERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMsXG4gICAgICBhcnJvd1N0eWxlczoge30sXG4gICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgb3BlblBvc2l0aW9uOiBudWxsLFxuICAgICAgLy8gb25jZSBhIHN0YWJsZSBwb3NpdGlvbiBoYXMgYmVlbiBmb3VuZCwga2VlcCB0aGUgY29udGVudHMgb24gdGhhdCBzaWRlXG4gICAgICBpc09wZW5TdGFibGU6IGZhbHNlIC8vIHdhaXQgZm9yIGFueSBpbml0aWFsIG9wZW5pbmcgdHJhbnNpdGlvbnMgdG8gZmluaXNoIGJlZm9yZSBtYXJraW5nIGFzIHN0YWJsZVxuXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuc3VwcHJlc3NpbmdQb3BvdmVyKSB7XG4gICAgICAgIC8vIGNvbXBvbmVudCB3YXMgY3JlYXRlZCB3aXRoIGlzT3Blbj10cnVlOyBub3cgdGhhdCBpdCdzIG1vdW50ZWRcbiAgICAgICAgLy8gc3RvcCBzdXBwcmVzc2luZyBhbmQgc3RhcnQgb3BlbmluZ1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLW1vdW50LXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzdXBwcmVzc2luZ1BvcG92ZXI6IGZhbHNlLFxuICAgICAgICAgIGlzT3BlbmluZzogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLm9uT3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgb3BlbmVkLlxuICAgICAgaWYgKCFwcmV2UHJvcHMuaXNPcGVuICYmIHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub25PcGVuUG9wb3ZlcigpO1xuICAgICAgfSAvLyB1cGRhdGUgc2Nyb2xsIGxpc3RlbmVyXG5cblxuICAgICAgaWYgKHByZXZQcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwgIT09IHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgY2xvc2VkLlxuXG5cbiAgICAgIGlmIChwcmV2UHJvcHMuaXNPcGVuICYmICF0aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMganVzdCBjbG9zZWQgdGhlIHBvcG92ZXIsIHF1ZXVlIHVwIHRoZSByZW1vdmFsIG9mIHRoZSBjb250ZW50IGFmdGVyIHRoZVxuICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgICB0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNDbG9zaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjbG9zaW5nVHJhbnNpdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc3Bvc2l0aW9uVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF90aGlzJHByb3BzLmFuY2hvclBvc2l0aW9uLFxuICAgICAgICAgIGJ1dHRvbiA9IF90aGlzJHByb3BzLmJ1dHRvbixcbiAgICAgICAgICBidXR0b25SZWYgPSBfdGhpcyRwcm9wcy5idXR0b25SZWYsXG4gICAgICAgICAgaW5zZXJ0ID0gX3RoaXMkcHJvcHMuaW5zZXJ0LFxuICAgICAgICAgIGlzT3BlbiA9IF90aGlzJHByb3BzLmlzT3BlbixcbiAgICAgICAgICBvd25Gb2N1cyA9IF90aGlzJHByb3BzLm93bkZvY3VzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGNsb3NlUG9wb3ZlciA9IF90aGlzJHByb3BzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgICBwYW5lbENsYXNzTmFtZSA9IF90aGlzJHByb3BzLnBhbmVsQ2xhc3NOYW1lLFxuICAgICAgICAgIHBhbmVsUGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wcy5wYW5lbFBhZGRpbmdTaXplLFxuICAgICAgICAgIHBhbmVsUHJvcHMgPSBfdGhpcyRwcm9wcy5wYW5lbFByb3BzLFxuICAgICAgICAgIHBhbmVsUmVmID0gX3RoaXMkcHJvcHMucGFuZWxSZWYsXG4gICAgICAgICAgcGFuZWxTdHlsZSA9IF90aGlzJHByb3BzLnBhbmVsU3R5bGUsXG4gICAgICAgICAgcG9wb3ZlclNjcmVlblJlYWRlclRleHQgPSBfdGhpcyRwcm9wcy5wb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgICBoYXNBcnJvdyA9IF90aGlzJHByb3BzLmhhc0Fycm93LFxuICAgICAgICAgIGFycm93Q2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5hcnJvd0NoaWxkcmVuLFxuICAgICAgICAgIHJlcG9zaXRpb25PblNjcm9sbCA9IF90aGlzJHByb3BzLnJlcG9zaXRpb25PblNjcm9sbCxcbiAgICAgICAgICB6SW5kZXggPSBfdGhpcyRwcm9wcy56SW5kZXgsXG4gICAgICAgICAgYXR0YWNoVG9BbmNob3IgPSBfdGhpcyRwcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgICBvZmZzZXQgPSBfdGhpcyRwcm9wcy5vZmZzZXQsXG4gICAgICAgICAgb25UcmFwRGVhY3RpdmF0aW9uID0gX3RoaXMkcHJvcHMub25UcmFwRGVhY3RpdmF0aW9uLFxuICAgICAgICAgIGJ1ZmZlciA9IF90aGlzJHByb3BzLmJ1ZmZlcixcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIGNvbnRhaW5lciA9IF90aGlzJHByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgICBmb2N1c1RyYXBQcm9wcyA9IF90aGlzJHByb3BzLmZvY3VzVHJhcFByb3BzLFxuICAgICAgICAgIGluaXRpYWxGb2N1c1Byb3AgPSBfdGhpcyRwcm9wcy5pbml0aWFsRm9jdXMsXG4gICAgICAgICAgdGFiSW5kZXhQcm9wID0gX3RoaXMkcHJvcHMudGFiSW5kZXgsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJTdHlsZXMoKTtcbiAgICAgIHZhciBwb3BvdmVyU3R5bGVzID0gW3N0eWxlcy5ldWlQb3BvdmVyLCB7XG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgIH1dO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyJywge1xuICAgICAgICAnZXVpUG9wb3Zlci1pc09wZW4nOiB0aGlzLnN0YXRlLmlzT3BlbmluZ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBhbmNob3JDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fYW5jaG9yJywgYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICAgIHZhciBzaG93QXJyb3cgPSBoYXNBcnJvdyAmJiAhYXR0YWNoVG9BbmNob3I7XG4gICAgICB2YXIgcGFuZWw7XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIgJiYgKGlzT3BlbiB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZykpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICAgICAgICB2YXIgaW5pdGlhbEZvY3VzID0gaW5pdGlhbEZvY3VzUHJvcDtcbiAgICAgICAgdmFyIGFyaWFEZXNjcmliZWRieTtcbiAgICAgICAgdmFyIGFyaWFMaXZlO1xuICAgICAgICB2YXIgcGFuZWxBcmlhTW9kYWwgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdhcmlhLW1vZGFsJykgPyBwYW5lbFByb3BzWydhcmlhLW1vZGFsJ10gOiAndHJ1ZSc7XG4gICAgICAgIHZhciBwYW5lbFJvbGUgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdyb2xlJykgPyBwYW5lbFByb3BzLnJvbGUgOiAnZGlhbG9nJztcblxuICAgICAgICBpZiAob3duRm9jdXMgfHwgcGFuZWxBcmlhTW9kYWwgIT09ICd0cnVlJykge1xuICAgICAgICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wICE9PSBudWxsICYmIHRhYkluZGV4UHJvcCAhPT0gdm9pZCAwID8gdGFiSW5kZXhQcm9wIDogMDtcbiAgICAgICAgICBhcmlhTGl2ZSA9ICdvZmYnO1xuXG4gICAgICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHtcbiAgICAgICAgICAgIGluaXRpYWxGb2N1cyA9IGZ1bmN0aW9uIGluaXRpYWxGb2N1cygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5wYW5lbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFyaWFMaXZlID0gJ2Fzc2VydGl2ZSc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dDtcblxuICAgICAgICBpZiAob3duRm9jdXMgfHwgcG9wb3ZlclNjcmVlblJlYWRlclRleHQpIHtcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSB0aGlzLmRlc2NyaXB0aW9uSWQ7XG4gICAgICAgICAgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZGVzY3JpcHRpb25JZFxuICAgICAgICAgIH0sIG93bkZvY3VzICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpUG9wb3Zlci5zY3JlZW5SZWFkZXJBbm5vdW5jZW1lbnRcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiWW91IGFyZSBpbiBhIGRpYWxvZy4gVG8gY2xvc2UgdGhpcyBkaWFsb2csIGhpdCBlc2NhcGUuXCJcbiAgICAgICAgICB9KSwgcG9wb3ZlclNjcmVlblJlYWRlclRleHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXR1cm5Gb2N1cyA9IHRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gcmV0dXJuRm9jdXNDb25maWcgOiBmYWxzZTtcbiAgICAgICAgcGFuZWwgPSBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwge1xuICAgICAgICAgIGluc2VydDogaW5zZXJ0XG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IHRydWVcbiAgICAgICAgfSwgZm9jdXNUcmFwUHJvcHMsIHtcbiAgICAgICAgICByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMgLy8gSWdub3JlIHRlbXBvcmFyeSBzdGF0ZSBvZiBpbmRlY2lzaXZlIGZvY3VzXG4gICAgICAgICAgLFxuICAgICAgICAgIGluaXRpYWxGb2N1czogaW5pdGlhbEZvY3VzLFxuICAgICAgICAgIG9uRGVhY3RpdmF0aW9uOiBvblRyYXBEZWFjdGl2YXRpb24sXG4gICAgICAgICAgb25DbGlja091dHNpZGU6IHRoaXMub25DbGlja091dHNpZGUsXG4gICAgICAgICAgb25Fc2NhcGVLZXk6IHRoaXMub25Fc2NhcGVLZXksXG4gICAgICAgICAgZGlzYWJsZWQ6ICFvd25Gb2N1cyB8fCAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgfHwgdGhpcy5zdGF0ZS5pc0Nsb3NpbmdcbiAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlclBhbmVsLCBfZXh0ZW5kcyh7fSwgcGFuZWxQcm9wcywge1xuICAgICAgICAgIHBhbmVsUmVmOiB0aGlzLnBhbmVsUmVmLFxuICAgICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc09wZW5pbmcsXG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBpc0F0dGFjaGVkOiBhdHRhY2hUb0FuY2hvcixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocGFuZWxDbGFzc05hbWUsIHBhbmVsUHJvcHMgPT09IG51bGwgfHwgcGFuZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFuZWxQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICAgIGhhc1NoYWRvdzogZmFsc2UsXG4gICAgICAgICAgcGFkZGluZ1NpemU6IHBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IGFyaWFMaXZlLFxuICAgICAgICAgIHJvbGU6IHBhbmVsUm9sZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZEJ5LFxuICAgICAgICAgIFwiYXJpYS1tb2RhbFwiOiBwYW5lbEFyaWFNb2RhbCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMuc3RhdGUucG9wb3ZlclN0eWxlcyksIHt9LCB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgYHdpbGwtY2hhbmdlYCB0byByZWR1Y2UgcmlzayBvZiBhIGJsdXJyeSBhbmltYXRpb24gaW4gQ2hyb21lIDg2K1xuICAgICAgICAgICAgd2lsbENoYW5nZTogIXRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gJ3RyYW5zZm9ybSwgb3BhY2l0eScgOiB1bmRlZmluZWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSwgc2hvd0Fycm93ICYmIHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJBcnJvdywge1xuICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24sXG4gICAgICAgICAgc3R5bGU6IHRoaXMuc3RhdGUuYXJyb3dTdHlsZXNcbiAgICAgICAgfSwgYXJyb3dDaGlsZHJlbiksIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQsIF9fX0Vtb3Rpb25KU1goRXVpTXV0YXRpb25PYnNlcnZlciwge1xuICAgICAgICAgIG9ic2VydmVyT3B0aW9uczoge1xuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgYXR0cmlidXRlIGNoYW5nZXNcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGFkZGVkL3JlbW92ZWQgZWxlbWVudHNcbiAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgICAvLyB0ZXh0IGNoYW5nZXNcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWUgLy8gd2F0Y2ggYWxsIGNoaWxkIGVsZW1lbnRzXG5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTXV0YXRpb246IHRoaXMub25NdXRhdGlvblxuICAgICAgICB9LCBmdW5jdGlvbiAobXV0YXRpb25SZWYpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICByZWY6IG11dGF0aW9uUmVmXG4gICAgICAgICAgfSwgY2hpbGRyZW4pO1xuICAgICAgICB9KSkpKTtcbiAgICAgIH0gLy8gcmVhY3QtZm9jdXMtb24gYW5kIHJlbGF0ZWQgZG8gbm90IHJlZ2lzdGVyIG91dHNpZGUgY2xpY2sgZGV0ZWN0aW9uXG4gICAgICAvLyB3aGVuIGRpc2FibGVkLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgY2hlY2sgZm9yIHRoYXQgb3Vyc2VsdmVzXG5cblxuICAgICAgaWYgKG93bkZvY3VzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHJlZjogcG9wb3ZlclJlZlxuICAgICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiAvKiNfX1BVUkVfXyovX2Nzcyh7XG4gICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5XG4gICAgICAgICAgfSwgXCI7bGFiZWw6cmVuZGVyO1wiKSxcbiAgICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgICAgcmVmOiB0aGlzLmJ1dHRvblJlZlxuICAgICAgICB9LCBidXR0b24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG51bGwgOiBidXR0b24pLCBwYW5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvciwge1xuICAgICAgICAgIG9uT3V0c2lkZUNsaWNrOiB0aGlzLmNsb3NlUG9wb3ZlclxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHJlZjogcG9wb3ZlclJlZixcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgICAgICB9LCBcIjtsYWJlbDpyZW5kZXI7XCIpLFxuICAgICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMuYnV0dG9uUmVmXG4gICAgICAgIH0sIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiksIHBhbmVsKSk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICYmICFuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzQ2xvc2luZzogdHJ1ZSxcbiAgICAgICAgICBpc09wZW5pbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2U3RhdGUucHJldlByb3BzLmlzT3BlbiAhPT0gbmV4dFByb3BzLmlzT3Blbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByZXZQcm9wczoge1xuICAgICAgICAgICAgaXNPcGVuOiBuZXh0UHJvcHMuaXNPcGVuXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpUG9wb3Zlcjtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVBvcG92ZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgb3duRm9jdXM6IHRydWUsXG4gIGFuY2hvclBvc2l0aW9uOiAnZG93bkNlbnRlcicsXG4gIHBhbmVsUGFkZGluZ1NpemU6ICdtJyxcbiAgaGFzQXJyb3c6IHRydWUsXG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59KTtcblxuRXVpUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIENsYXNzIG5hbWUgcGFzc2VkIHRvIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBidXR0b25cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEFsaWdubWVudCBvZiB0aGUgcG9wb3ZlciBhbmQgYXJyb3cgcmVsYXRpdmUgdG8gdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTdHlsZSBhbmQgcG9zaXRpb24gYWx0ZXJhdGlvbiBmb3IgYXJyb3ctbGVzcywgbGVmdC1hbGlnbmVkXG4gICAgICogYXR0YWNobWVudC4gSW50ZW5kZWQgZm9yIHVzZSB3aXRoIGlucHV0cyBhcyBhbmNob3JzLCBlLmcuXG4gICAgICogRXVpSW5wdXRQb3BvdmVyXG4gICAgICovXG4gIGF0dGFjaFRvQW5jaG9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBUcmlnZ2VyaW5nIGVsZW1lbnQgZm9yIHdoaWNoIHRvIGFsaWduIHRoZSBwb3BvdmVyIHRvXG4gICAgICovXG4gIGJ1dHRvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaGFuZGxlIGhpZGluZyBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBjbG9zZVBvcG92ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogUmVzdHJpY3QgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiB3aXRoaW4gdGhpcyBlbGVtZW50XG4gICAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDU1MgZGlzcGxheSB0eXBlIGZvciBib3RoIHRoZSBwb3BvdmVyIGFuZCBhbmNob3JcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aUZvY3VzVHJhcFxuICAgICAqL1xuICBmb2N1c1RyYXBQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTaG93IGFycm93IGluZGljYXRpbmcgdG8gb3JpZ2luYXRpbmcgYnV0dG9uXG4gICAgICovXG4gIGhhc0Fycm93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hhdCBlbGVtZW50IHNob3VsZCBpbml0aWFsbHkgaGF2ZSBmb2N1czsgQ2FuIGJlIGEgRE9NXG4gICAgICogbm9kZSwgb3IgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gICAgICogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpIHRvIGZpbmQgdGhlIERPTSBub2RlKSwgb3IgYSBmdW5jdGlvbiB0aGF0XG4gICAgICogcmV0dXJucyBhIERPTSBub2RlLlxuICAgICAqXG4gICAgICogSWYgbm90IHBhc3NlZCwgaW5pdGlhbCBmb2N1cyBkZWZhdWx0cyB0byB0aGUgcG9wb3ZlciBwYW5lbC5cbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFBhc3NlZCBkaXJlY3RseSB0byBFdWlQb3J0YWwgZm9yIERPTSBwb3NpdGlvbmluZy4gQm90aCBwcm9wZXJ0aWVzIGFyZVxuICAgICAqIHJlcXVpcmVkIGlmIHByb3AgaXMgc3BlY2lmaWVkXG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcblxuICAvKipcbiAgICAgKiBWaXNpYmlsaXR5IHN0YXRlIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogVHJhcHMgdGFiIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3ZlciBjb250ZW50c1xuICAgICAqL1xuICBvd25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIGNsYXNzIGFkZGVkIHRvIHRoZSBFdWlQYW5lbCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIHBhbmVsQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEV1aVBhbmVsIHBhZGRpbmcgb24gYWxsIHNpZGVzXG4gICAgICovXG4gIHBhbmVsUGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogU3RhbmRhcmQgRE9NIGBzdHlsZWAgYXR0cmlidXRlLiBQYXNzZWQgdG8gdGhlIEV1aVBhbmVsXG4gICAgICovXG4gIHBhbmVsU3R5bGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byBFdWlQYW5lbC4gU2VlICNFdWlQb3BvdmVyUGFuZWxQcm9wc1xuICAgICAqL1xuICBwYW5lbFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB0byBhbm5vdW5jZSB1cG9uIHBvcG92ZXIgb3BlbixcbiAgICAgKiBpbiBhZGRpdGlvbiB0byBFVUkncyBkZWZhdWx0IHBvcG92ZXIgaW5zdHJ1Y3Rpb25zIGZvciBFc2NhcGUgb24gY2xvc2UuXG4gICAgICogVXNlZnVsIGZvciBwb3BvdmVycyB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwga2V5Ym9hcmQgY2FwYWJpbGl0aWVzIHN1Y2ggYXNcbiAgICAgKiBhcnJvdyBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSksXG4gIHBvcG92ZXJSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscywgdGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gcG9wb3ZlciBhbmNob3JzLiBXaGVuIG5lc3RpbmdcbiAgICAgKiBhbiBgRXVpUG9wb3ZlcmAgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgYHJlcG9zaXRpb25PblNjcm9sbGAgc2hvdWxkIGJlIGB0cnVlYFxuICAgICAqL1xuICByZXBvc2l0aW9uT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHBvcG92ZXIgY29udGVudCBpbmhlcml0cyB0aGUgei1pbmRleCBvZiB0aGUgYW5jaG9yXG4gICAgICogY29tcG9uZW50OyBwYXNzIGB6SW5kZXhgIHRvIG92ZXJyaWRlXG4gICAgICovXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBGdW5jdGlvbiBjYWxsYmFjayBmb3Igd2hlbiB0aGUgZm9jdXMgdHJhcCBpcyBkZWFjdGl2YXRlZFxuICAgICAqL1xuICBvblRyYXBEZWFjdGl2YXRpb246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRGlzdGFuY2UgYXdheSBmcm9tIHRoZSBhbmNob3IgdGhhdCB0aGUgcG9wb3ZlciB3aWxsIHJlbmRlclxuICAgICAqL1xuICBvZmZzZXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyO1xuICAgICAqIFBhc3MgYW4gYXJyYXkgb2YgNCB2YWx1ZXMgdG8gYWRqdXN0IGVhY2ggc2lkZSBkaWZmZXJlbnRseTogYFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdYFxuICAgICAqIERlZmF1bHQgaXMgMTZcbiAgICAgKi9cbiAgYnVmZmVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIEVsZW1lbnQgdG8gcGFzcyBhcyB0aGUgY2hpbGQgZWxlbWVudCBvZiB0aGUgYXJyb3c7XG4gICAgICogVXNlIGNhc2UgaXMgdHlwaWNhbGx5IGxpbWl0ZWQgdG8gYW4gYWNjb21wYW55aW5nIGBFdWlCZWFjb25gXG4gICAgICovXG4gIGFycm93Q2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIFByb3ZpZGUgYSBuYW1lIHRvIHRoZSBwb3BvdmVyIHBhbmVsXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEFsdGVybmF0aXZlIG9wdGlvbiB0byBgYXJpYS1sYWJlbGAgdGhhdCB0YWtlcyBhbiBgaWRgLlxuICAgICAqIFVzdWFsbHkgdGFrZXMgdGhlIGBpZGAgb2YgdGhlIHBvcG92ZXIgdGl0bGVcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgRXVpTXV0YXRpb25PYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V1aU9ic2VydmVyKSB7XG4gIF9pbmhlcml0cyhFdWlNdXRhdGlvbk9ic2VydmVyLCBfRXVpT2JzZXJ2ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpTXV0YXRpb25PYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpTXV0YXRpb25PYnNlcnZlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm5hbWVcIiwgJ0V1aU11dGF0aW9uT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk11dGF0aW9uXCIsIGZ1bmN0aW9uIChyZWNvcmRzLCBvYnNlcnZlcikge1xuICAgICAgX3RoaXMucHJvcHMub25NdXRhdGlvbihyZWNvcmRzLCBvYnNlcnZlcik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNoaWxkTm9kZSwgX3RoaXMucHJvcHMub2JzZXJ2ZXJPcHRpb25zLCBfdGhpcy5vbk11dGF0aW9uKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBFdWlNdXRhdGlvbk9ic2VydmVyO1xufShFdWlPYnNlcnZlcik7XG5cbnZhciBtYWtlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIG1ha2VNdXRhdGlvbk9ic2VydmVyKG5vZGUsIF9vYnNlcnZlck9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIC8vIElFMTEgYW5kIHRoZSBNdXRhdGlvbk9ic2VydmVyIHBvbHlmaWxsIHVzZWQgaW4gS2liYW5hIChmb3IgSmVzdCkgaW1wbGVtZW50XG4gIC8vIGFuIG9sZGVyIHNwZWMgaW4gd2hpY2ggc3BlY2lmeWluZyBgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgXG4gIC8vIHdpdGhvdXQgc3BlY2lmeWluZyBgYXR0cmlidXRlc2AgcmVzdWx0cyBpbiBhIGBTeW50YXhFcnJvcmAuXG4gIC8vIFRoZSBmb2xsb3dpbmcgbG9naWMgcGF0Y2hlcyB0aGUgbmV3ZXIgc3BlYyBpbiB3aGljaCBgYXR0cmlidXRlczogdHJ1ZWAgY2FuIGJlXG4gIC8vIGltcGxpZWQgd2hlbiBhcHByb3ByaWF0ZSAoYGF0dHJpYnV0ZU9sZFZhbHVlYCBvciBgYXR0cmlidXRlRmlsdGVyYCBpcyBzcGVjaWZpZWQpLlxuICB2YXIgb2JzZXJ2ZXJPcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgX29ic2VydmVyT3B0aW9ucyk7XG5cbiAgdmFyIG5lZWRzQXR0cmlidXRlcyA9IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlT2xkVmFsdWUnKSB8fCBvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZUZpbHRlcicpO1xuXG4gIGlmIChuZWVkc0F0dHJpYnV0ZXMgJiYgIW9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlcycpKSB7XG4gICAgb2JzZXJ2ZXJPcHRpb25zLmF0dHJpYnV0ZXMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIG9ic2VydmVyT3B0aW9ucyk7XG4gIHJldHVybiBvYnNlcnZlcjtcbn07XG5cbmV4cG9ydCB2YXIgdXNlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoY29udGFpbmVyLCBjYWxsYmFjaywgb2JzZXJ2ZXJPcHRpb25zKSB7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIG9ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCAvLyBpZ25vcmUgY2hhbmdpbmcgb2JzZXJ2ZXJPcHRpb25zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBbY29udGFpbmVyLCBjYWxsYmFja10pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIEV1aU91dHNpZGVDbGlja0RldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcik7XG5cbiAgLy8gV2UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgY2xpY2sgZXZlbnQgaXNcbiAgLy8gZXF1aXZhbGVudCB0byBhIHNlcXVlbnRpYWwsIGNvbXBvdW5kIHByZXNzIGFuZCByZWxlYXNlIG9mXG4gIC8vIHRoZSBwb2ludGluZyBkZXZpY2UgKG1vdXNlLCBmaW5nZXIsIHN0eWx1cywgZXRjLikuXG4gIC8vIEEgY2xpY2sgZXZlbnQncyB0YXJnZXQgY2FuIGJlIGltcHJlY2lzZSwgYXMgdGhlIHZhbHVlIHdpbGwgYmVcbiAgLy8gdGhlIGNsb3Nlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBwcmVzcyAobW91c2Vkb3duLCB0b3VjaHN0YXJ0KVxuICAvLyBhbmQgcmVsZWFzZSAobW91c2V1cCwgdG91Y2hlbmQpIGV2ZW50cyAob2Z0ZW4gPGJvZHkgLz4pIGlmXG4gIC8vIHRoZSB0aGUgdGFyZ2V0IG9mIGVhY2ggZXZlbnQgZGlmZmVycy5cbiAgLy8gV2UgbmVlZCB0aGUgYWN0dWFsIGV2ZW50IHRhcmdldHMgdG8gbWFrZSB0aGUgY29ycmVjdCBkZWNpc2lvbnNcbiAgLy8gYWJvdXQgdXNlciBpbnRlbnRpb24uIFNvLCBjb25zaWRlciB0aGUgZG93bi9zdGFydCBhbmQgdXAvZW5kXG4gIC8vIGl0ZW1zIGJlbG93IGFzIHRoZSBkZWNvbnN0cnVjdGlvbiBvZiBhIGNsaWNrIGV2ZW50LlxuICBmdW5jdGlvbiBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTsgLy8gdGhlIGlkIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3JcbiAgICAvLyBpcyB0aGUgc291cmNlIG9mIGEgY2xpY2sgZXZlbnQ7IGFzIHRoZSBjbGljayBldmVudCBidWJibGVzXG4gICAgLy8gdXAgYW5kIHJlYWNoZXMgdGhlIGNsaWNrIGRldGVjdG9yJ3MgY2hpbGQgY29tcG9uZW50IHRoZVxuICAgIC8vIGlkIHZhbHVlIGlzIHN0YW1wZWQgb24gdGhlIGV2ZW50LiBUaGlzIGlkIGlzIGluc3BlY3RlZFxuICAgIC8vIGluIHRoZSBkb2N1bWVudCdzIGNsaWNrIGhhbmRsZXIsIGFuZCBpZiB0aGUgaWQgZG9lc24ndFxuICAgIC8vIGV4aXN0IG9yIGRvZXNuJ3QgbWF0Y2ggdGhpcyBkZXRlY3RvcidzIGlkLCB0aGVuIHRyaWdnZXJcbiAgICAvLyB0aGUgb3V0c2lkZUNsaWNrIGNhbGxiYWNrLlxuICAgIC8vXG4gICAgLy8gVGFraW5nIHRoaXMgYXBwcm9hY2ggaW5zdGVhZCBvZiBjaGVja2luZyBpZiB0aGUgZXZlbnQnc1xuICAgIC8vIHRhcmdldCBlbGVtZW50IGV4aXN0cyBpbiB0aGlzIGNvbXBvbmVudCdzIERPTSBzdWItdHJlZSBpc1xuICAgIC8vIG5lY2Vzc2FyeSBmb3IgaGFuZGxpbmcgY2xpY2tzIG9yaWdpbmF0aW5nIGZyb20gY2hpbGRyZW5cbiAgICAvLyByZW5kZXJlZCB0aHJvdWdoIFJlYWN0J3MgcG9ydGFscyAoRXVpUG9ydGFsKS4gVGhlIGlkIHRyYWNraW5nXG4gICAgLy8gd29ya3MgYmVjYXVzZSBSZWFjdCBndWFyYW50ZWVzIHRoZSBldmVudCBidWJibGVzIHRocm91Z2ggdGhlXG4gICAgLy8gdmlydHVhbCBET00gYW5kIGV4ZWN1dGVzIEV1aUNsaWNrRGV0ZWN0b3IncyBvbkNsaWNrIGhhbmRsZXIsXG4gICAgLy8gc3RhbXBpbmcgdGhlIGlkIGV2ZW4gdGhvdWdoIHRoZSBldmVudCBvcmlnaW5hdGVzIG91dHNpZGVcbiAgICAvLyB0aGlzIGNvbXBvbmVudCdzIHJlaWZpZWQgRE9NIHRyZWUuXG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjYXB0dXJlZERvd25JZHNcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk91dHNpZGVDbGljaztcblxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50ID0gZTtcblxuICAgICAgaWYgKGV2ZW50LmV1aUdlbmVyYXRlZEJ5ICYmIGV2ZW50LmV1aUdlbmVyYXRlZEJ5LmluY2x1ZGVzKF90aGlzLmlkKSB8fCBfdGhpcy5jYXB0dXJlZERvd25JZHMuaW5jbHVkZXMoX3RoaXMuaWQpKSB7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgcmV0dXJuIG9uT3V0c2lkZUNsaWNrKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50LCBjYikge1xuICAgICAgLy8gdG8gc3VwcG9ydCBuZXN0ZWQgY2xpY2sgZGV0ZWN0b3JzLCBidWlsZCBhbiBhcnJheVxuICAgICAgLy8gb2YgZGV0ZWN0b3IgaWRzIHRoYXQgaGF2ZSBiZWVuIGVuY291bnRlcmVkO1xuICAgICAgaWYgKGV2ZW50Lm5hdGl2ZUV2ZW50Lmhhc093blByb3BlcnR5KCdldWlHZW5lcmF0ZWRCeScpKSB7XG4gICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5LnB1c2goX3RoaXMuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkgPSBbX3RoaXMuaWRdO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2IpIGNiKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMub25DaGlsZENsaWNrKGV2ZW50LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgbmF0aXZlRXZlbnQgPSBlLm5hdGl2ZUV2ZW50O1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBuYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VEb3duKSBfdGhpcy5wcm9wcy5vbk1vdXNlRG93bihlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hTdGFydCkgX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DaGlsZE1vdXNlVXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlVXApIF90aGlzLnByb3BzLm9uTW91c2VVcChlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hFbmQpIF90aGlzLnByb3BzLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF90aGlzLmlkID0gaHRtbElkR2VuZXJhdG9yKCkoKTtcbiAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzKSwge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoU3RhcnQ6IHRoaXMub25DaGlsZE1vdXNlRG93bixcbiAgICAgICAgb25Nb3VzZVVwOiB0aGlzLm9uQ2hpbGRNb3VzZVVwLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ2hpbGRNb3VzZVVwXG4gICAgICB9KTtcblxuICAgICAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCBwcm9wcyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aU91dHNpZGVDbGlja0RldGVjdG9yO1xufShDb21wb25lbnQpO1xuRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgb25PdXRzaWRlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbk1vdXNlRG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJwb3NpdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBldWlQb3BvdmVyQXJyb3dTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX2Fycm93LnN0eWxlcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IFsndG9wJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJ107XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJBcnJvdyA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJBcnJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXJBcnJvdywgc3R5bGVzW3Bvc2l0aW9uXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtcG9wb3Zlci1hcnJvd1wiOiBwb3NpdGlvbixcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBvcG92ZXJBcnJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUJhY2tncm91bmRDb2xvciwgbG9naWNhbHMsIGxvZ2ljYWxTaXplQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBwb3BvdmVyQXJyb3dTaXplID0gJ20nO1xuZXhwb3J0IHZhciBldWlQb3BvdmVyQXJyb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyQXJyb3dTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTsgLy8gTWF0Y2ggdGhlIGJhY2tncm91bmQgY29sb3Igb2YgcGFuZWxzXG5cbiAgdmFyIGJvcmRlckNvbG9yID0gZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3BsYWluJyk7XG4gIHZhciBhcnJvd1NpemUgPSBldWlUaGVtZS5zaXplW3BvcG92ZXJBcnJvd1NpemVdO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQb3BvdmVyQXJyb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiJjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiO307bGFiZWw6ZXVpUG9wb3ZlckFycm93O1wiKSxcbiAgICAvLyBQT1NJVElPTlNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMuYm90dG9tLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjo1MCU7XCIsIGxvZ2ljYWxzLnJpZ2h0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMubGVmdCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOnJpZ2h0O1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyU3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2UgYW5jaG9yIHdyYXBwZXJcbiAgICBldWlQb3BvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZXVpUG9wb3ZlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzT3BlblwiLCBcImlzQXR0YWNoZWRcIiwgXCJwb3NpdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi8uLi9wYW5lbC9wYW5lbCc7XG5pbXBvcnQgeyBldWlQb3BvdmVyUGFuZWxTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICBwYWRkaW5nU2l6ZTogJ2wnXG59KTtcblxuLyoqXG4gKiAqSU5URVJOQUwgT05MWSpcbiAqIFB1cmVseSBmb3IgcmUtdXNlIG9mIHN0eWxpbmdcbiAqL1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWwgPSBmdW5jdGlvbiBFdWlQb3BvdmVyUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpc09wZW4gPSBfcmVmLmlzT3BlbixcbiAgICAgIGlzQXR0YWNoZWQgPSBfcmVmLmlzQXR0YWNoZWQsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHBhbmVsQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpUG9wb3ZlclBhbmVsQ29udGV4dCk7XG4gIGlmIChyZXN0LnBhZGRpbmdTaXplKSBwYW5lbENvbnRleHQucGFkZGluZ1NpemUgPSByZXN0LnBhZGRpbmdTaXplO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTsgLy8gVXNpbmcgQkVNIGNoaWxkIGNsYXNzIGZvciBCV0NcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXJfX3BhbmVsJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgcGFuZWxDU1MgPSBbc3R5bGVzLmV1aVBvcG92ZXJfX3BhbmVsLCBpc09wZW4gJiYgc3R5bGVzLmlzT3BlbiwgaXNPcGVuICYmIHBvc2l0aW9uICYmIHN0eWxlc1twb3NpdGlvbl1dO1xuXG4gIGlmIChpc0F0dGFjaGVkKSB7XG4gICAgcGFuZWxDU1MgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHBhbmVsQ1NTKSwgW2lzT3BlbiAmJiBzdHlsZXMuYXR0YWNoZWQuaXNPcGVuLCBwb3NpdGlvbiAmJiBzdHlsZXMuYXR0YWNoZWRbcG9zaXRpb25dXSk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHBhbmVsQ29udGV4dFxuICB9LCBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogcGFuZWxDU1MsXG4gICAgXCJkYXRhLXBvcG92ZXItcGFuZWxcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9wb3Zlci1vcGVuXCI6IGlzT3BlbiB8fCB1bmRlZmluZWRcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSk7XG59O1xuRXVpUG9wb3ZlclBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiXSksXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGlzQXR0YWNoZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcImJvcmRlclJhZGl1c1wiLCBcImNvbG9yXCIsIFwiaGFzU2hhZG93XCIsIFwiaGFzQm9yZGVyXCIsIFwiZ3Jvd1wiLCBcInBhbmVsUmVmXCIsIFwiZWxlbWVudFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTLCB1c2VFdWlQYWRkaW5nQ1NTLCBCQUNLR1JPVU5EX0NPTE9SUywgUEFERElOR19TSVpFUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBldWlQYW5lbFN0eWxlcyB9IGZyb20gJy4vcGFuZWwuc3R5bGUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBQQURESU5HX1NJWkVTOyAvLyBFeHBvcnRlZCBwYWRkaW5nIHNpemVzIGFuZCBjbGFzcyBuYW1lcyBuZWNlc3NhcnkgZm9yIEV1aVBvcG92ZXIgYW5kIEV1aUNhcmQuXG4vLyBXaGljaCBjdXJyZW50bHkgd2lsbCBvbmx5IG1haW50YWluIHN1cHBvcnQgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZXMgdW50aWwgY29udmVyc2lvbi5cblxudmFyIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHM6ICdwYWRkaW5nU21hbGwnLFxuICBtOiAncGFkZGluZ01lZGl1bScsXG4gIGw6ICdwYWRkaW5nTGFyZ2UnXG59O1xuXG52YXIgX1NJWkVTID0ga2V5c09mKHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXApO1xuXG5leHBvcnQgdmFyIEJPUkRFUl9SQURJSSA9IFsnbm9uZScsICdtJ107XG5leHBvcnQgdmFyIENPTE9SUyA9IEJBQ0tHUk9VTkRfQ09MT1JTO1xuZXhwb3J0IHZhciBFdWlQYW5lbCA9IGZ1bmN0aW9uIEV1aVBhbmVsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgICBwYWRkaW5nU2l6ZSA9IF9yZWYkcGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkcGFkZGluZ1NpemUsXG4gICAgICBfcmVmJGJvcmRlclJhZGl1cyA9IF9yZWYuYm9yZGVyUmFkaXVzLFxuICAgICAgYm9yZGVyUmFkaXVzID0gX3JlZiRib3JkZXJSYWRpdXMgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkYm9yZGVyUmFkaXVzLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwbGFpbicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGhhc1NoYWRvdyA9IF9yZWYkaGFzU2hhZG93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTaGFkb3csXG4gICAgICBfcmVmJGhhc0JvcmRlciA9IF9yZWYuaGFzQm9yZGVyLFxuICAgICAgaGFzQm9yZGVyID0gX3JlZiRoYXNCb3JkZXIgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoYXNCb3JkZXIsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgcGFuZWxSZWYgPSBfcmVmLnBhbmVsUmVmLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpOyAvLyBTaGFkb3dzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGVyZSdzIGEgd2hpdGUgYmFja2dyb3VuZCAocGxhaW4pXG5cbiAgdmFyIGNhbkhhdmVTaGFkb3cgPSAhaGFzQm9yZGVyICYmIGNvbG9yID09PSAncGxhaW4nO1xuICB2YXIgY2FuSGF2ZUJvcmRlciA9IGNvbG9yID09PSAncGxhaW4nIHx8IGNvbG9yID09PSAndHJhbnNwYXJlbnQnO1xuICB2YXIgc3R5bGVzID0gZXVpUGFuZWxTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlQYW5lbCwgZ3JvdyAmJiBzdHlsZXMuZ3Jvdywgc3R5bGVzLnJhZGl1c1tib3JkZXJSYWRpdXNdLCB1c2VFdWlQYWRkaW5nQ1NTKClbcGFkZGluZ1NpemVdLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKVtjb2xvcl0sIGNhbkhhdmVTaGFkb3cgJiYgaGFzU2hhZG93ID09PSB0cnVlICYmIHN0eWxlcy5oYXNTaGFkb3csIGNhbkhhdmVCb3JkZXIgJiYgaGFzQm9yZGVyID09PSB0cnVlICYmIHN0eWxlcy5oYXNCb3JkZXIsIHJlc3Qub25DbGljayAmJiBzdHlsZXMuaXNDbGlja2FibGVdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhbmVsJywgXCJldWlQYW5lbC0tXCIuY29uY2F0KGNvbG9yKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVBhbmVsLS1cIi5jb25jYXQocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0pLCBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlc3Qub25DbGljayAmJiBlbGVtZW50ICE9PSAnZGl2Jykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcGFuZWxSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBwYW5lbFJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKV0pLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiXG59IDoge1xuICBuYW1lOiBcIjEyMmx3MGUtZ3Jvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6Z3JvdztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhbmVsOiBfcmVmMixcbiAgICBncm93OiBfcmVmLFxuICAgIGhhc1NoYWRvdzogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6aGFzU2hhZG93O1wiKSxcbiAgICBoYXNCb3JkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGluLCBcIjs7bGFiZWw6aGFzQm9yZGVyO1wiKSxcbiAgICByYWRpdXM6IHtcbiAgICAgIG5vbmU6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bm9uZTtcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDptO1wiKVxuICAgIH0sXG4gICAgLy8gU2V0dXAgaW50ZXJhY3RpdmUgYmVoYXZpb3JcbiAgICBpc0NsaWNrYWJsZTogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOmJveC1zaGFkb3cgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiLHRyYW5zZm9ybSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fSY6ZW5hYmxlZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7fSY6aG92ZXIsJjpmb2N1c3tcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7Y3Vyc29yOnBvaW50ZXI7fTtsYWJlbDppc0NsaWNrYWJsZTtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3csIGV1aVNoYWRvd0ZsYXQsIGV1aVNoYWRvd01lZGl1bSB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgdHJhbnNsYXRlRGlzdGFuY2UgPSAncyc7XG4vKipcbiAqIDEuIENhbiBleHBhbmQgZnVydGhlciwgYnV0IGl0IGxvb2tzIHdlaXJkIGlmIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hdGluZyBidXR0b24uXG4gKiAyLiBBbmltYXRpb24gaGFwcGVucyBvbiB0aGUgcGFuZWwuIEJ1dCBkb24ndCBhbmltYXRlIHBvc2l0aW9uIHdoZW4gdXNpbmcgdGhlIGF0dGFjaGVkIG1vZGUgbGlrZSBmb3IgaW5wdXRzXG4gKiAzLiBNYWtlIHN1cmUgdGhlIHBhbmVsIHN0YXlzIHdpdGhpbiB0aGUgd2luZG93LlxuICovXG5cbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJfX3BhbmVsOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJhc2UgKiA3LCBcInB4XCIpKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIFwiY2FsYygxMDB2dyAtIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnhsLCBcIilcIikpLCBcIjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVooMCk7XCIsIGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIHByb3BlcnR5OiAnZmlsdGVyJ1xuICAgIH0pLCBcIiAmOmZvY3Vze291dGxpbmUtb2Zmc2V0OjA7fTtsYWJlbDpldWlQb3BvdmVyX19wYW5lbDtcIiksXG4gICAgLy8gSXMgdmlzaWJsZSAvIG9wZW5cbiAgICBpc09wZW46IC8qI19fUFVSRV9fKi9jc3MoXCJvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0bztcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiLHRyYW5zZm9ybSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgY2FsYyhcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiICsgMTAwbXMpO307bGFiZWw6aXNPcGVuO1wiKSxcbiAgICAvLyBQb3NpdGlvbnNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDp0b3A7XCIpLFxuICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKC1cIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWChcIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKC1cIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gQXR0YWNoZWQgdmVyc2lvbiBvdmVycmlkZXNcbiAgICBhdHRhY2hlZDoge1xuICAgICAgaXNPcGVuOiAvKiNfX1BVUkVfXyovY3NzKFwiZmlsdGVyOm5vbmU7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246b3BhY2l0eSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIjt9O2xhYmVsOmlzT3BlbjtcIiksXG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93RmxhdChldWlUaGVtZUNvbnRleHQpLCBcIjs7bGFiZWw6dG9wO1wiKSxcbiAgICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIC8vIFNhdGlzZmllcyBUU1xuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnJpZ2h0O1wiKVxuICAgIH1cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0ZXh0VHJhbnNmb3JtXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQnO1xuaW1wb3J0IHsgZXVpVGl0bGVTdHlsZXMgfSBmcm9tICcuL3RpdGxlLnN0eWxlcyc7XG5leHBvcnQgdmFyIFRJVExFX1NJWkVTID0gWyd4eHhzJywgJ3h4cycsICd4cycsICdzJywgJ20nLCAnbCddO1xuZXhwb3J0IHZhciBURVhUX1RSQU5TRk9STSA9IFsndXBwZXJjYXNlJ107XG5leHBvcnQgdmFyIEV1aVRpdGxlID0gZnVuY3Rpb24gRXVpVGl0bGUoX3JlZikge1xuICB2YXIgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB0ZXh0VHJhbnNmb3JtID0gX3JlZi50ZXh0VHJhbnNmb3JtLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUaXRsZVN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRpdGxlLCB0ZXh0VHJhbnNmb3JtID8gc3R5bGVzW3RleHRUcmFuc2Zvcm1dIDogdW5kZWZpbmVkLCBzdHlsZXNbc2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRpdGxlJywgY2xhc3NOYW1lLCBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KTtcblxuICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xufTtcbkV1aVRpdGxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICB0ZXh0VHJhbnNmb3JtOiBQcm9wVHlwZXMuYW55LFxuICBpZDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImRlc2NyaXB0aW9uXCIsIFwiaXNEaXNhYmxlZFwiLCBcInRpdGxlXCIsIFwidGl0bGVFbGVtZW50XCIsIFwidGl0bGVTaXplXCIsIFwiaWNvblwiLCBcImltYWdlXCIsIFwiY2hpbGRyZW5cIiwgXCJmb290ZXJcIiwgXCJvbkNsaWNrXCIsIFwiaHJlZlwiLCBcInJlbFwiLCBcInRhcmdldFwiLCBcInRleHRBbGlnblwiLCBcImJldGFCYWRnZVByb3BzXCIsIFwibGF5b3V0XCIsIFwic2VsZWN0YWJsZVwiLCBcImRpc3BsYXlcIiwgXCJwYWRkaW5nU2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVRpdGxlIH0gZnJvbSAnLi4vdGl0bGUnO1xuaW1wb3J0IHsgRXVpQmV0YUJhZGdlIH0gZnJvbSAnLi4vYmFkZ2UvYmV0YV9iYWRnZSc7XG5pbXBvcnQgeyBFdWlDYXJkU2VsZWN0LCBldWlDYXJkU2VsZWN0YWJsZUNvbG9yIH0gZnJvbSAnLi9jYXJkX3NlbGVjdCc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IEV1aVBhbmVsIH0gZnJvbSAnLi4vcGFuZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0ZXh0QWxpZ25Ub0NsYXNzTmFtZU1hcCA9IHtcbiAgbGVmdDogJ2V1aUNhcmQtLWxlZnRBbGlnbmVkJyxcbiAgY2VudGVyOiAnZXVpQ2FyZC0tY2VudGVyQWxpZ25lZCcsXG4gIHJpZ2h0OiAnZXVpQ2FyZC0tcmlnaHRBbGlnbmVkJ1xufTtcbmV4cG9ydCB2YXIgQUxJR05NRU5UUyA9IGtleXNPZih0ZXh0QWxpZ25Ub0NsYXNzTmFtZU1hcCk7XG52YXIgbGF5b3V0VG9DbGFzc05hbWVNYXAgPSB7XG4gIHZlcnRpY2FsOiAnJyxcbiAgaG9yaXpvbnRhbDogJ2V1aUNhcmQtLWhvcml6b250YWwnXG59O1xuZXhwb3J0IHZhciBMQVlPVVRfQUxJR05NRU5UUyA9IGtleXNPZihsYXlvdXRUb0NsYXNzTmFtZU1hcCk7XG4vKipcbiAqIENlcnRhaW4gcHJvcHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZSBsYXlvdXQgaXMgdmVydGljYWxcbiAqL1xuXG5leHBvcnQgdmFyIEV1aUNhcmQgPSBmdW5jdGlvbiBFdWlDYXJkKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmLmRlc2NyaXB0aW9uLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICBfcmVmJHRpdGxlRWxlbWVudCA9IF9yZWYudGl0bGVFbGVtZW50LFxuICAgICAgdGl0bGVFbGVtZW50ID0gX3JlZiR0aXRsZUVsZW1lbnQgPT09IHZvaWQgMCA/ICdzcGFuJyA6IF9yZWYkdGl0bGVFbGVtZW50LFxuICAgICAgX3JlZiR0aXRsZVNpemUgPSBfcmVmLnRpdGxlU2l6ZSxcbiAgICAgIHRpdGxlU2l6ZSA9IF9yZWYkdGl0bGVTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRpdGxlU2l6ZSxcbiAgICAgIGljb24gPSBfcmVmLmljb24sXG4gICAgICBpbWFnZSA9IF9yZWYuaW1hZ2UsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBmb290ZXIgPSBfcmVmLmZvb3RlcixcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIF9yZWYkdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgICB0ZXh0QWxpZ24gPSBfcmVmJHRleHRBbGlnbiA9PT0gdm9pZCAwID8gJ2NlbnRlcicgOiBfcmVmJHRleHRBbGlnbixcbiAgICAgIGJldGFCYWRnZVByb3BzID0gX3JlZi5iZXRhQmFkZ2VQcm9wcyxcbiAgICAgIF9yZWYkbGF5b3V0ID0gX3JlZi5sYXlvdXQsXG4gICAgICBsYXlvdXQgPSBfcmVmJGxheW91dCA9PT0gdm9pZCAwID8gJ3ZlcnRpY2FsJyA6IF9yZWYkbGF5b3V0LFxuICAgICAgc2VsZWN0YWJsZSA9IF9yZWYuc2VsZWN0YWJsZSxcbiAgICAgIGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgICBwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGlzQ2xpY2thYmxlID0gIWlzRGlzYWJsZWQgJiYgKG9uQ2xpY2sgfHwgaHJlZiB8fCBzZWxlY3RhYmxlICYmICFzZWxlY3RhYmxlLmlzRGlzYWJsZWQpO1xuICAvKipcbiAgICogRm9yIGExMXksIHdlIHNpbXVsYXRlIHRoZSBzYW1lIGNsaWNrIHRoYXQncyBwcm92aWRlZCBvbiB0aGUgdGl0bGUgd2hlbiBjbGlja2luZyB0aGUgd2hvbGUgY2FyZFxuICAgKiB3aXRob3V0IGhhdmluZyB0byBtYWtlIHRoZSB3aG9sZSBjYXJkIGEgYnV0dG9uIG9yIGFuY2hvciB0YWcuXG4gICAqICpDYXJkIEFjY2Vzc2liaWxpdHk6IFRoZSByZWR1bmRhbnQgY2xpY2sgZXZlbnQgaHR0cHM6Ly9pbmNsdXNpdmUtY29tcG9uZW50cy5kZXNpZ24vY2FyZHMvKlxuICAgKi9cblxuICB2YXIgbGluayA9IG51bGw7XG5cbiAgdmFyIG91dGVyT25DbGljayA9IGZ1bmN0aW9uIG91dGVyT25DbGljayhlKSB7XG4gICAgaWYgKGxpbmsgJiYgbGluayAhPT0gZS50YXJnZXQpIHtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgaWYgKGltYWdlIHx8IGZvb3RlciB8fCB0ZXh0QWxpZ24gIT09ICdjZW50ZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V1aUNhcmQ6IGBsYXlvdXQ9XCJob3Jpem9udGFsXCJgIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGltYWdlYCwgYGZvb3RlcmAsIG9yIGB0ZXh0QWxpZ25gLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzZWxlY3RhYmxlQ29sb3JDbGFzcyA9IHNlbGVjdGFibGUgPyBcImV1aUNhcmQtLWlzU2VsZWN0YWJsZS0tXCIuY29uY2F0KGV1aUNhcmRTZWxlY3RhYmxlQ29sb3Ioc2VsZWN0YWJsZS5jb2xvciwgc2VsZWN0YWJsZS5pc1NlbGVjdGVkKSkgOiB1bmRlZmluZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2FyZCcsIHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwW3RleHRBbGlnbl0sIGxheW91dFRvQ2xhc3NOYW1lTWFwW2xheW91dF0sIHtcbiAgICAnZXVpQ2FyZC0taXNDbGlja2FibGUnOiBpc0NsaWNrYWJsZSxcbiAgICAnZXVpQ2FyZC0taGFzQmV0YUJhZGdlJzogYmV0YUJhZGdlUHJvcHMgPT09IG51bGwgfHwgYmV0YUJhZGdlUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJldGFCYWRnZVByb3BzLmxhYmVsLFxuICAgICdldWlDYXJkLS1oYXNJY29uJzogaWNvbixcbiAgICAnZXVpQ2FyZC0taXNTZWxlY3RhYmxlJzogc2VsZWN0YWJsZSxcbiAgICAnZXVpQ2FyZC1pc1NlbGVjdGVkJzogc2VsZWN0YWJsZSA9PT0gbnVsbCB8fCBzZWxlY3RhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RhYmxlLmlzU2VsZWN0ZWQsXG4gICAgJ2V1aUNhcmQtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSwgc2VsZWN0YWJsZUNvbG9yQ2xhc3MsIGNsYXNzTmFtZSk7XG4gIHZhciBhcmlhSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcbiAgdmFyIGFyaWFEZXNjID0gZGVzY3JpcHRpb24gPyBcIlwiLmNvbmNhdChhcmlhSWQsIFwiRGVzY3JpcHRpb25cIikgOiAnJztcbiAgLyoqXG4gICAqIFRvcCBhcmVhIGNvbnRhaW5pbmcgaW1hZ2UsIGljb24gb3IgYm90aFxuICAgKi9cblxuICB2YXIgaW1hZ2VOb2RlO1xuXG4gIGlmIChpbWFnZSAmJiBsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgfHwgdHlwZW9mIGltYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgaW1hZ2VOb2RlID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19pbWFnZVwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoaW1hZ2UpID8gaW1hZ2UgOiBfX19FbW90aW9uSlNYKFwiaW1nXCIsIHtcbiAgICAgICAgc3JjOiBpbWFnZSxcbiAgICAgICAgYWx0OiBcIlwiXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltYWdlTm9kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGljb25Ob2RlO1xuXG4gIGlmIChpY29uKSB7XG4gICAgaWNvbk5vZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhpY29uLnByb3BzLmNsYXNzTmFtZSwgJ2V1aUNhcmRfX2ljb24nKVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsQ2FyZFRvcDtcblxuICBpZiAoaW1hZ2VOb2RlIHx8IGljb25Ob2RlKSB7XG4gICAgb3B0aW9uYWxDYXJkVG9wID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdG9wXCJcbiAgICB9LCBpbWFnZU5vZGUsIGljb25Ob2RlKTtcbiAgfVxuICAvKipcbiAgICogT3B0aW9uYWwgRXVpQmV0YUJhZGdlXG4gICAqL1xuXG5cbiAgdmFyIG9wdGlvbmFsQmV0YUJhZGdlO1xuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2VJRCA9ICcnO1xuXG4gIGlmIChiZXRhQmFkZ2VQcm9wcyAhPT0gbnVsbCAmJiBiZXRhQmFkZ2VQcm9wcyAhPT0gdm9pZCAwICYmIGJldGFCYWRnZVByb3BzLmxhYmVsKSB7XG4gICAgb3B0aW9uYWxCZXRhQmFkZ2VJRCA9IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJCZXRhQmFkZ2VcIik7XG4gICAgb3B0aW9uYWxCZXRhQmFkZ2UgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fYmV0YUJhZGdlV3JhcHBlclwiXG4gICAgfSwgX19fRW1vdGlvbkpTWChFdWlCZXRhQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBvcHRpb25hbEJldGFCYWRnZUlEXG4gICAgfSwgYmV0YUJhZGdlUHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpQ2FyZF9fYmV0YUJhZGdlJywgYmV0YUJhZGdlUHJvcHMgPT09IG51bGwgfHwgYmV0YUJhZGdlUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJldGFCYWRnZVByb3BzLmNsYXNzTmFtZSlcbiAgICB9KSkpOyAvLyBJbmNyZWFzZSBwYWRkaW5nIHNpemUgd2hlbiB0aGVyZSBpcyBhIGJldGEgYmFkZ2UgdW5sZXNzIGl0J3MgYWxyZWFkeSBkZXRlcm1pbmVkXG5cbiAgICBwYWRkaW5nU2l6ZSA9IHBhZGRpbmdTaXplIHx8ICdsJztcbiAgfVxuICAvKipcbiAgICogT3B0aW9uYWwgc2VsZWN0YWJsZSBidXR0b25cbiAgICovXG5cblxuICBpZiAoc2VsZWN0YWJsZSAmJiBpc0Rpc2FibGVkICYmIHNlbGVjdGFibGUuaXNEaXNhYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHZhciBvcHRpb25hbFNlbGVjdEJ1dHRvbjtcblxuICBpZiAoc2VsZWN0YWJsZSkge1xuICAgIG9wdGlvbmFsU2VsZWN0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlDYXJkU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQoYXJpYUlkLCBcIlRpdGxlIFwiKS5jb25jYXQoYXJpYURlc2MpXG4gICAgfSwgc2VsZWN0YWJsZSwge1xuICAgICAgYnV0dG9uUmVmOiBmdW5jdGlvbiBidXR0b25SZWYobm9kZSkge1xuICAgICAgICBsaW5rID0gbm9kZTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cbiAgLyoqXG4gICAqIFdyYXBzIHRoZSB0aXRsZSB3aXRoIHRoZSBsaW5rICg8YT4pIG9yIGJ1dHRvbi5cbiAgICogVGhpcyBtYWtlcyB0aGUgdGl0bGUgZWxlbWVudCBhMTF5IGZyaWVuZGx5IGFuZCBnZXRzIGRlc2NyaWJlZCBieSBpdHMgY29udGVudCBpZiBpdHMgaW50ZXJhY3RhYmxlLlxuICAgKi9cblxuXG4gIHZhciB0aGVUaXRsZTtcblxuICBpZiAoIWlzRGlzYWJsZWQgJiYgaHJlZikge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcImFcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQW5jaG9yXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjLFxuICAgICAgcmVsOiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgcmVsOiByZWxcbiAgICAgIH0pLFxuICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICBsaW5rID0gbm9kZTtcbiAgICAgIH1cbiAgICB9LCB0aXRsZSk7XG4gIH0gZWxzZSBpZiAoaXNEaXNhYmxlZCB8fCBvbkNsaWNrKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZUJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwiXCIuY29uY2F0KG9wdGlvbmFsQmV0YUJhZGdlSUQsIFwiIFwiKS5jb25jYXQoYXJpYURlc2MpLFxuICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICBsaW5rID0gbm9kZTtcbiAgICAgIH1cbiAgICB9LCB0aXRsZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhlVGl0bGUgPSB0aXRsZTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydCB0aXRsZUVsZW1lbnQgdG8gYSBjYXBpdGFsIFRpdGxlRWxlbWVudFxuICAgKi9cblxuXG4gIHZhciBUaXRsZUVsZW1lbnQgPSB0aXRsZUVsZW1lbnQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgb25DbGljazogaXNDbGlja2FibGUgPyBvdXRlck9uQ2xpY2sgOiB1bmRlZmluZWQsXG4gICAgY29sb3I6IGlzRGlzYWJsZWQgPyAnc3ViZHVlZCcgOiBkaXNwbGF5LFxuICAgIGhhc1NoYWRvdzogaXNEaXNhYmxlZCB8fCBkaXNwbGF5ID8gZmFsc2UgOiB0cnVlLFxuICAgIGhhc0JvcmRlcjogZGlzcGxheSA/IGZhbHNlIDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdTaXplOiBwYWRkaW5nU2l6ZVxuICB9LCByZXN0KSwgb3B0aW9uYWxDYXJkVG9wLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fY29udGVudFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGl0bGUsIHtcbiAgICBpZDogXCJcIi5jb25jYXQoYXJpYUlkLCBcIlRpdGxlXCIpLFxuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZVwiLFxuICAgIHNpemU6IHRpdGxlU2l6ZVxuICB9LCBfX19FbW90aW9uSlNYKFRpdGxlRWxlbWVudCwgbnVsbCwgdGhlVGl0bGUpKSwgZGVzY3JpcHRpb24gJiYgX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgaWQ6IGFyaWFEZXNjLFxuICAgIHNpemU6IFwic1wiLFxuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19kZXNjcmlwdGlvblwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIGNoaWxkcmVuICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jaGlsZHJlblwiXG4gIH0sIGNoaWxkcmVuKSksIG9wdGlvbmFsQmV0YUJhZGdlLCBsYXlvdXQgPT09ICd2ZXJ0aWNhbCcgJiYgZm9vdGVyICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19mb290ZXJcIlxuICB9LCBmb290ZXIpLCBvcHRpb25hbFNlbGVjdEJ1dHRvbik7XG59O1xuRXVpQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAgICogQ2hhbmdlIHRvIFwiaG9yaXpvbnRhbFwiIGlmIHlvdSBuZWVkIHRoZSBpY29uIHRvIGJlIGxlZnQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICAgKiBIb3Jpem9udGFsIGxheW91dHMgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuXG4gICAgICAgKi9cbiAgbGF5b3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1widmVydGljYWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaG9yaXpvbnRhbFwiXSkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyBhbGlnbm1lbnQgb2YgdGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuICAgICAgICovXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBjb21iaW5hdGlvbiBvZiBlbGVtZW50c1xuICAgICAgICovXG4gIGZvb3RlcjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGEgdXJsIGluIHN0cmluZyBmb3JtIG9yIFJlYWN0RWxlbWVudCBmb3IgYSBjdXN0b20gaW1hZ2UgY29tcG9uZW50XG4gICAgICAgKi9cbiAgaW1hZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ2FyZHMgYXJlIHJlcXVpcmVkIHRvIGhhdmUgYXQgbGVhc3QgYSB0aXRsZSBhbmQgYSBkZXNjcmlwdGlvbiBhbmQvb3IgY2hpbGRyZW5cbiAgICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGl0bGUncyBoZWFkaW5nIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJoMlwiLCBcImgzXCIsIFwiaDRcIiwgXCJoNVwiLCBcImg2XCIsIFwic3BhblwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIHNpemUsIG1hdGNoaW5nIHRoYXQgb2YgRXVpVGl0bGUuXG4gICAgICAgKiBUaG91Z2gsIGNhcmQgdGl0bGVzIGNhbid0IGJlIHRvbyBsYXJnZSBvciBzbWFsbCByZWxhdGl2ZSB0byB0aGUgZGVzY3JpcHRpb24gdGV4dC5cbiAgICAgICAqL1xuICB0aXRsZVNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwieHNcIl0pLFxuICAvLyBkZXNjcmlwdGlvbiBpcyByZXF1aXJlZCBpZiBjaGlsZHJlbiBpcyBvbWl0dGVkXG4gIC8vIGRlc2NyaXB0aW9uIGJlY29tZXMgb3B0aW9uYWwgd2hlbiBjaGlsZHJlbiBpcyBwcmVzZW50XG5cbiAgLyoqXG4gICAgICAgKiBQbGFjZWQgd2l0aGluIGEgc21hbGwgRXVpVGV4dCBgPHA+YCB0YWdcbiAgICAgICAqL1xuICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW4gYDxFdWlJY29uPmAgbm9kZSBvciBgbnVsbGBcbiAgICAgICAqL1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pLFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAgICogVXNlIG9ubHkgaWYgeW91IHdhbnQgdG8gZm9yZWdvIGEgYnV0dG9uIGluIHRoZSBmb290ZXIgYW5kIG1ha2UgdGhlIHdob2xlIGNhcmQgY2xpY2thYmxlXG4gICAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYmFkZ2UgdG8gdG9wIG9mIHRoZSBjYXJkIHRvIGxhYmVsIGl0IGFzIFwiQmV0YVwiIG9yIG90aGVyIG5vbi1HQSBzdGF0ZS5cbiAgICAgICAqIEFjY2VwdHMgYWxsIHRoZSBwcm9wcyBvZiBbRXVpQmV0YUJhZGdlXSgjL2Rpc3BsYXkvYmFkZ2UjYmV0YS1iYWRnZS10eXBlKSwgd2hlcmUgYGxhYmVsYCBpcyByZXF1aXJlZC5cbiAgICAgICAqL1xuICBiZXRhQmFkZ2VQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIE1hdGNoZXMgdG8gdGhlIGNvbG9yIHByb3BlcnR5IG9mIEV1aVBhbmVsLiBJZiBkZWZpbmVkLCByZW1vdmVzIGFueSBib3JkZXIgJiBzaGFkb3cuXG4gICAgICAgKiBMZWF2ZSBhcyBgdW5kZWZpbmVkYCB0byBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqIFNlbGVjdGFibGUgY2FyZHMgd2lsbCBhbHdheXMgZGlzcGxheSBhcyBhIGRlZmF1bHQgcGFuZWwuXG4gICAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgYXBwbGllZCBhcm91bmQgdGhlIGNvbnRlbnQgb2YgdGhlIGNhcmRcbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEFkZHMgYSBidXR0b24gdG8gdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCB0byBhbGxvdyBmb3IgaW4tcGxhY2Ugc2VsZWN0aW9uXG4gICAgICAgKi9cbiAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gICAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInhzXCIsIFwic1wiLCBcIm1cIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAgICovXG4gICAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAgIC8qKlxuICAgICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICAgKi9cbiAgICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBJcyBpbiB0aGUgc2VsZWN0ZWQgc3RhdGVcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgICAqL1xuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiLCBcInN1Ym1pdFwiXSksXG4gICAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICAgKi9cbiAgICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICAgKi9cbiAgICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuXG4gIC8qKlxuICAgICAgICogVXNlIGEgYm9yZGVyIHN0eWxlIG9mIGNhcmQgaW5zdGVhZCBvZiBzaGFkb3dcbiAgICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzRGlzYWJsZWRcIiwgXCJjb2xvclwiLCBcImNoaWxkcmVuXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uX2VtcHR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNhcmRTZWxlY3QgPSBmdW5jdGlvbiBFdWlDYXJkU2VsZWN0KF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYkaXNTZWxlY3RlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzU2VsZWN0ZWQsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjaGlsZCA9IGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkLCBjaGlsZHJlbik7XG4gIHZhciBzZWxlY3RDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2FyZFNlbGVjdCcsIFwiZXVpQ2FyZFNlbGVjdC0tXCIuY29uY2F0KGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IoY29sb3IsIGlzU2VsZWN0ZWQpKSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHNlbGVjdENsYXNzZXMsXG4gICAgY29sb3I6IGNvbG9yIHx8ICd0ZXh0JyxcbiAgICBzaXplOiBcInhzXCIsXG4gICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBpY29uVHlwZTogaXNTZWxlY3RlZCA/ICdjaGVjaycgOiB1bmRlZmluZWQsXG4gICAgcm9sZTogXCJzd2l0Y2hcIixcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBpc1NlbGVjdGVkXG4gIH0sIHJlc3QpLCBjaGlsZCk7XG59O1xuRXVpQ2FyZFNlbGVjdC5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSXMgaW4gdGhlIHNlbGVjdGVkIHN0YXRlXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5mdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZVRleHQoaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCwgY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHRleHQ7XG5cbiAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdGVkXCIsXG4gICAgICBkZWZhdWx0OiBcIlNlbGVjdGVkXCJcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ2FyZFNlbGVjdC51bmF2YWlsYWJsZVwiLFxuICAgICAgZGVmYXVsdDogXCJVbmF2YWlsYWJsZVwiXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ2FyZFNlbGVjdC5zZWxlY3RcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0XCJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCkge1xuICB2YXIgY2FsY3VsYXRlZENvbG9yO1xuXG4gIGlmIChjb2xvcikge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9IGNvbG9yO1xuICB9IGVsc2UgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAnc3VjY2Vzcyc7XG4gIH0gZWxzZSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gJ3RleHQnO1xuICB9XG5cbiAgcmV0dXJuIGNhbGN1bGF0ZWRDb2xvcjtcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaWRcIiwgXCJjaGVja2VkXCIsIFwibGFiZWxcIiwgXCJvbkNoYW5nZVwiLCBcInR5cGVcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJpbmRldGVybWluYXRlXCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbFByb3BzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgaW5MaXN0OiAnZXVpQ2hlY2tib3gtLWluTGlzdCdcbn07XG5leHBvcnQgdmFyIFRZUEVTID0ga2V5c09mKHR5cGVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEV1aUNoZWNrYm94ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDaGVja2JveCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDaGVja2JveCk7XG5cbiAgZnVuY3Rpb24gRXVpQ2hlY2tib3goKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNoZWNrYm94KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZcIiwgdW5kZWZpbmVkKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRJbnB1dFJlZlwiLCBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgIF90aGlzLmlucHV0UmVmID0gaW5wdXQ7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5pbnB1dFJlZihpbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ2hlY2tib3gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5pbnZhbGlkYXRlSW5kZXRlcm1pbmF0ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy5pbnZhbGlkYXRlSW5kZXRlcm1pbmF0ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wcy5pZCxcbiAgICAgICAgICBjaGVja2VkID0gX3RoaXMkcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzLmxhYmVsLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgdHlwZSA9IF90aGlzJHByb3BzLnR5cGUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMuY29tcHJlc3NlZCxcbiAgICAgICAgICBpbmRldGVybWluYXRlID0gX3RoaXMkcHJvcHMuaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzLmlucHV0UmVmLFxuICAgICAgICAgIGxhYmVsUHJvcHMgPSBfdGhpcyRwcm9wcy5sYWJlbFByb3BzLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2hlY2tib3gnLCB0eXBlICYmIHR5cGVUb0NsYXNzTmFtZU1hcFt0eXBlXSwge1xuICAgICAgICAnZXVpQ2hlY2tib3gtLW5vTGFiZWwnOiAhbGFiZWwsXG4gICAgICAgICdldWlDaGVja2JveC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgbGFiZWxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ2hlY2tib3hfX2xhYmVsJywgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNsYXNzTmFtZSk7XG4gICAgICB2YXIgb3B0aW9uYWxMYWJlbDtcblxuICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgIG9wdGlvbmFsTGFiZWwgPSBfX19FbW90aW9uSlNYKFwibGFiZWxcIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICAgICAgICBodG1sRm9yOiBpZFxuICAgICAgICB9KSwgbGFiZWwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNoZWNrYm94X19pbnB1dFwiLFxuICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHJlZjogdGhpcy5zZXRJbnB1dFJlZlxuICAgICAgfSwgcmVzdCkpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNoZWNrYm94X19zcXVhcmVcIlxuICAgICAgfSksIG9wdGlvbmFsTGFiZWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnZhbGlkYXRlSW5kZXRlcm1pbmF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnZhbGlkYXRlSW5kZXRlcm1pbmF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0UmVmKSB7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IHRoaXMucHJvcHMuaW5kZXRlcm1pbmF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ2hlY2tib3g7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDaGVja2JveCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBjaGVja2VkOiBmYWxzZSxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2Vcbn0pO1xuXG5FdWlDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAvLyBvdmVycmlkaW5nIHRvIG1ha2UgaXQgcmVxdWlyZWRcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJpbkxpc3RcIl0pLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogd2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGNoZWNrYm94IHJvd1xuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPGxhYmVsLz5cbiAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImd1dHRlclNpemVcIiwgXCJhbGlnbkl0ZW1zXCIsIFwicmVzcG9uc2l2ZVwiLCBcImp1c3RpZnlDb250ZW50XCIsIFwiZGlyZWN0aW9uXCIsIFwid3JhcFwiLCBcImNvbXBvbmVudFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBndXR0ZXJTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHhzOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJFeHRyYVNtYWxsJyxcbiAgczogJ2V1aUZsZXhHcm91cC0tZ3V0dGVyU21hbGwnLFxuICBtOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJNZWRpdW0nLFxuICBsOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJMYXJnZScsXG4gIHhsOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJFeHRyYUxhcmdlJ1xufTtcbmV4cG9ydCB2YXIgR1VUVEVSX1NJWkVTID0ga2V5c09mKGd1dHRlclNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgYWxpZ25JdGVtc1RvQ2xhc3NOYW1lTWFwID0ge1xuICBzdHJldGNoOiBudWxsLFxuICBmbGV4U3RhcnQ6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNGbGV4U3RhcnQnLFxuICBmbGV4RW5kOiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zRmxleEVuZCcsXG4gIGNlbnRlcjogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0NlbnRlcicsXG4gIGJhc2VsaW5lOiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zQmFzZWxpbmUnXG59O1xuZXhwb3J0IHZhciBBTElHTl9JVEVNUyA9IGtleXNPZihhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXApO1xudmFyIGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXAgPSB7XG4gIGZsZXhTdGFydDogbnVsbCxcbiAgZmxleEVuZDogJ2V1aUZsZXhHcm91cC0tanVzdGlmeUNvbnRlbnRGbGV4RW5kJyxcbiAgY2VudGVyOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudENlbnRlcicsXG4gIHNwYWNlQmV0d2VlbjogJ2V1aUZsZXhHcm91cC0tanVzdGlmeUNvbnRlbnRTcGFjZUJldHdlZW4nLFxuICBzcGFjZUFyb3VuZDogJ2V1aUZsZXhHcm91cC0tanVzdGlmeUNvbnRlbnRTcGFjZUFyb3VuZCcsXG4gIHNwYWNlRXZlbmx5OiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlRXZlbmx5J1xufTtcbmV4cG9ydCB2YXIgSlVTVElGWV9DT05URU5UUyA9IGtleXNPZihqdXN0aWZ5Q29udGVudFRvQ2xhc3NOYW1lTWFwKTtcbnZhciBkaXJlY3Rpb25Ub0NsYXNzTmFtZU1hcCA9IHtcbiAgcm93OiAnZXVpRmxleEdyb3VwLS1kaXJlY3Rpb25Sb3cnLFxuICByb3dSZXZlcnNlOiAnZXVpRmxleEdyb3VwLS1kaXJlY3Rpb25Sb3dSZXZlcnNlJyxcbiAgY29sdW1uOiAnZXVpRmxleEdyb3VwLS1kaXJlY3Rpb25Db2x1bW4nLFxuICBjb2x1bW5SZXZlcnNlOiAnZXVpRmxleEdyb3VwLS1kaXJlY3Rpb25Db2x1bW5SZXZlcnNlJ1xufTtcbmV4cG9ydCB2YXIgRElSRUNUSU9OUyA9IGtleXNPZihkaXJlY3Rpb25Ub0NsYXNzTmFtZU1hcCk7XG5cbnZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KGNvbXBvbmVudCkge1xuICByZXR1cm4gWydkaXYnLCAnc3BhbiddLmluY2x1ZGVzKGNvbXBvbmVudCk7XG59O1xuXG5leHBvcnQgdmFyIEV1aUZsZXhHcm91cCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRndXR0ZXJTaXplID0gX3JlZi5ndXR0ZXJTaXplLFxuICAgICAgZ3V0dGVyU2l6ZSA9IF9yZWYkZ3V0dGVyU2l6ZSA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRndXR0ZXJTaXplLFxuICAgICAgX3JlZiRhbGlnbkl0ZW1zID0gX3JlZi5hbGlnbkl0ZW1zLFxuICAgICAgYWxpZ25JdGVtcyA9IF9yZWYkYWxpZ25JdGVtcyA9PT0gdm9pZCAwID8gJ3N0cmV0Y2gnIDogX3JlZiRhbGlnbkl0ZW1zLFxuICAgICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICAgIF9yZWYkanVzdGlmeUNvbnRlbnQgPSBfcmVmLmp1c3RpZnlDb250ZW50LFxuICAgICAganVzdGlmeUNvbnRlbnQgPSBfcmVmJGp1c3RpZnlDb250ZW50ID09PSB2b2lkIDAgPyAnZmxleFN0YXJ0JyA6IF9yZWYkanVzdGlmeUNvbnRlbnQsXG4gICAgICBfcmVmJGRpcmVjdGlvbiA9IF9yZWYuZGlyZWN0aW9uLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZiRkaXJlY3Rpb24gPT09IHZvaWQgMCA/ICdyb3cnIDogX3JlZiRkaXJlY3Rpb24sXG4gICAgICBfcmVmJHdyYXAgPSBfcmVmLndyYXAsXG4gICAgICB3cmFwID0gX3JlZiR3cmFwID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkd3JhcCxcbiAgICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgICBjb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhHcm91cCcsIGd1dHRlclNpemVUb0NsYXNzTmFtZU1hcFtndXR0ZXJTaXplXSwgYWxpZ25JdGVtc1RvQ2xhc3NOYW1lTWFwW2FsaWduSXRlbXNdLCBqdXN0aWZ5Q29udGVudFRvQ2xhc3NOYW1lTWFwW2p1c3RpZnlDb250ZW50XSwgZGlyZWN0aW9uVG9DbGFzc05hbWVNYXBbZGlyZWN0aW9uXSwge1xuICAgICdldWlGbGV4R3JvdXAtLXJlc3BvbnNpdmUnOiByZXNwb25zaXZlLFxuICAgICdldWlGbGV4R3JvdXAtLXdyYXAnOiB3cmFwXG4gIH0sIGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFpc1ZhbGlkRWxlbWVudChjb21wb25lbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudCwgXCIgaXMgbm90IGEgdmFsaWQgZWxlbWVudCB0eXBlLiBVc2UgYGRpdmAgb3IgYHNwYW5gLlwiKSk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50ID09PSAnc3BhbicgPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogcmVmXG4gIH0sIHJlc3QpLCBjaGlsZHJlbikgOiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn0pO1xuRXVpRmxleEdyb3VwLnByb3BUeXBlcyA9IHtcbiAgYWxpZ25JdGVtczogUHJvcFR5cGVzLm9uZU9mKFtcInN0cmV0Y2hcIiwgXCJmbGV4U3RhcnRcIiwgXCJmbGV4RW5kXCIsIFwiY2VudGVyXCIsIFwiYmFzZWxpbmVcIl0pLFxuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIiwgXCJzcGFuXCJdKSxcbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wicm93XCIsIFwicm93UmV2ZXJzZVwiLCBcImNvbHVtblwiLCBcImNvbHVtblJldmVyc2VcIl0pLFxuICBndXR0ZXJTaXplOiBQcm9wVHlwZXMub25lT2YoW1wibm9uZVwiLCBcInhzXCIsIFwic1wiLCBcIm1cIiwgXCJsXCIsIFwieGxcIl0pLFxuICBqdXN0aWZ5Q29udGVudDogUHJvcFR5cGVzLm9uZU9mKFtcImZsZXhTdGFydFwiLCBcImZsZXhFbmRcIiwgXCJjZW50ZXJcIiwgXCJzcGFjZUJldHdlZW5cIiwgXCJzcGFjZUFyb3VuZFwiLCBcInNwYWNlRXZlbmx5XCJdKSxcbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIHdyYXA6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5FdWlGbGV4R3JvdXAuZGlzcGxheU5hbWUgPSAnRXVpRmxleEdyb3VwJzsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZ3Jvd1wiLCBcImNvbXBvbmVudFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEdST1dfU0laRVMgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdO1xuZXhwb3J0IHZhciBFdWlGbGV4SXRlbSA9IGZ1bmN0aW9uIEV1aUZsZXhJdGVtKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgICBDb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YWxpZGF0ZUdyb3dWYWx1ZShncm93KTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGbGV4SXRlbScsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgJ2V1aUZsZXhJdGVtLS1mbGV4R3Jvd1plcm8nOiAhZ3Jvd1xuICB9LCBcImV1aUZsZXhJdGVtLS1mbGV4R3Jvd1wiLmNvbmNhdChncm93KSwgdHlwZW9mIGdyb3cgPT09ICdudW1iZXInID8gR1JPV19TSVpFUy5pbmRleE9mKGdyb3cpID49IDAgOiB1bmRlZmluZWQpLCBjbGFzc05hbWUpO1xuICByZXR1cm4gKC8vIEB0cy1pZ25vcmUgZGlmZmljdWx0IHRvIHZlcmlmeSBgcmVzdGAgYXBwbGllcyB0byBgQ29tcG9uZW50YFxuICAgIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pXG4gICk7XG59O1xuRXVpRmxleEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGdyb3c6IFByb3BUeXBlcy5vbmVPZihbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIHRydWUsIGZhbHNlLCBudWxsXSksXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVHcm93VmFsdWUodmFsdWUpIHtcbiAgdmFyIHZhbGlkVmFsdWVzID0gW251bGwsIHVuZGVmaW5lZCwgdHJ1ZSwgZmFsc2VdLmNvbmNhdChHUk9XX1NJWkVTKTtcblxuICBpZiAodmFsaWRWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvcCBgZ3Jvd2AgcGFzc2VkIHRvIGBFdWlGbGV4SXRlbWAgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwLCByZWNlaXZlZCBgXCIuY29uY2F0KHZhbHVlLCBcImBcIikpO1xuICB9XG59IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiaWNvblwiLCBcImNsZWFyXCIsIFwiZnVsbFdpZHRoXCIsIFwiaXNMb2FkaW5nXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJjbGFzc05hbWVcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwicmVhZE9ubHlcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Ryb3Bkb3duXCIsIFwiaW5wdXRJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMnO1xuaW1wb3J0IHsgRXVpRm9ybUxhYmVsIH0gZnJvbSAnLi4vZm9ybV9sYWJlbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHsgSUNPTl9TSURFUyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb3JtQ29udHJvbExheW91dCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb3JtQ29udHJvbExheW91dCk7XG5cbiAgZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXQoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Db250cm9sTGF5b3V0KTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGb3JtQ29udHJvbExheW91dCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMuaWNvbixcbiAgICAgICAgICBjbGVhciA9IF90aGlzJHByb3BzLmNsZWFyLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzLmZ1bGxXaWR0aCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wcy5pc0xvYWRpbmcsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzLmNvbXByZXNzZWQsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wcy5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzLmFwcGVuZCxcbiAgICAgICAgICByZWFkT25seSA9IF90aGlzJHByb3BzLnJlYWRPbmx5LFxuICAgICAgICAgIGludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzLmlzRHJvcGRvd24sXG4gICAgICAgICAgaW5wdXRJZCA9IF90aGlzJHByb3BzLmlucHV0SWQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dCcsIHtcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC0tcmVhZE9ubHknOiByZWFkT25seSxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1ncm91cCc6IHByZXBlbmQgfHwgYXBwZW5kLFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgcHJlcGVuZE5vZGVzID0gdGhpcy5yZW5kZXJTaWRlTm9kZSgncHJlcGVuZCcsIHByZXBlbmQsIGlucHV0SWQpO1xuICAgICAgdmFyIGFwcGVuZE5vZGVzID0gdGhpcy5yZW5kZXJTaWRlTm9kZSgnYXBwZW5kJywgYXBwZW5kLCBpbnB1dElkKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgcHJlcGVuZE5vZGVzLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0X19jaGlsZHJlbldyYXBwZXJcIlxuICAgICAgfSwgY2hpbGRyZW4sIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywge1xuICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICBjbGVhcjogY2xlYXIsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQ6IGludmFsaWQsXG4gICAgICAgIGlzRHJvcGRvd246ICFyZWFkT25seSAmJiAhaXNEaXNhYmxlZCAmJiBpc0Ryb3Bkb3duXG4gICAgICB9KSksIGFwcGVuZE5vZGVzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyU2lkZU5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyU2lkZU5vZGUoc2lkZSwgbm9kZXMsIGlucHV0SWQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5vZGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGb3JtTGFiZWwoc2lkZSwgbm9kZXMsIGlucHV0SWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXBwZW5kTm9kZXMgPSBSZWFjdC5DaGlsZHJlbi5tYXAobm9kZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gX3RoaXMuY3JlYXRlRm9ybUxhYmVsKHNpZGUsIGl0ZW0sIGlucHV0SWQpIDogX3RoaXMuY3JlYXRlU2lkZU5vZGUoc2lkZSwgaXRlbSwgaW5kZXgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXBwZW5kTm9kZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZUZvcm1MYWJlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVGb3JtTGFiZWwoc2lkZSwgc3RyaW5nLCBpbnB1dElkKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtTGFiZWwsIHtcbiAgICAgICAgaHRtbEZvcjogaW5wdXRJZCxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0X19cIi5jb25jYXQoc2lkZSlcbiAgICAgIH0sIHN0cmluZyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVNpZGVOb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZVNpZGVOb2RlKHNpZGUsIG5vZGUsIGtleSkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQobm9kZSwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXCJldWlGb3JtQ29udHJvbExheW91dF9fXCIuY29uY2F0KHNpZGUpLCBub2RlLnByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgIGtleToga2V5XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9ybUNvbnRyb2xMYXlvdXQ7XG59KENvbXBvbmVudCk7XG5FdWlGb3JtQ29udHJvbExheW91dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGNoaWxkcmVuLlxuICAgICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICBzaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAgIHJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBjbGVhcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNpemU6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQ29udHJvbHMgdGhlIGFkZGluZyBvZiBhbmQgdmlzaWJpbGl0eSBvZiBhIGRvd24gYXJyb3cgaWNvblxuICAgICAgICovXG4gIGlzRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQ29ubmVjdHMgdGhlIHByZXBlbmQgYW5kIGFwcGVuZCBsYWJlbHMgdG8gdGhlIGlucHV0XG4gICAgICAgKi9cbiAgaW5wdXRJZDogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wicmVmXCIsIFwic2lkZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY3VzdG9tX2ljb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IFsnbGVmdCcsICdyaWdodCddO1xuXG5mdW5jdGlvbiBpc0ljb25TaGFwZShpY29uKSB7XG4gIHJldHVybiAhIWljb24gJiYgaWNvbi5oYXNPd25Qcm9wZXJ0eSgndHlwZScpO1xufVxuXG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyk7XG5cbiAgZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHMuaXNJbnZhbGlkLFxuICAgICAgICAgIGlzRHJvcGRvd24gPSBfdGhpcyRwcm9wcy5pc0Ryb3Bkb3duO1xuICAgICAgdmFyIGljb25TaWRlID0gaXNJY29uU2hhcGUoaWNvbikgJiYgaWNvbi5zaWRlID8gaWNvbi5zaWRlIDogJ2xlZnQnO1xuICAgICAgdmFyIGN1c3RvbUljb24gPSB0aGlzLnJlbmRlckN1c3RvbUljb24oKTtcbiAgICAgIHZhciBsb2FkaW5nU3Bpbm5lciA9IHRoaXMucmVuZGVyTG9hZGluZ1NwaW5uZXIoKTtcbiAgICAgIHZhciBjbGVhckJ1dHRvbiA9IHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKTtcbiAgICAgIHZhciBpbnZhbGlkSWNvbiA9IHRoaXMucmVuZGVySW52YWxpZEljb24oKTtcbiAgICAgIHZhciBkcm9wZG93bkljb24gPSB0aGlzLnJlbmRlckRyb3Bkb3duSWNvbigpO1xuICAgICAgdmFyIGxlZnRJY29ucztcblxuICAgICAgaWYgKGN1c3RvbUljb24gJiYgaWNvblNpZGUgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0SWNvbnMgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29uc1wiXG4gICAgICAgIH0sIGN1c3RvbUljb24pO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmlnaHRJY29uczsgLy8gSWYgdGhlIGljb24gaXMgb24gdGhlIHJpZ2h0LCBpdCBzaG91bGQgYmUgcGxhY2VkIGFmdGVyIHRoZSBjbGVhciBidXR0b24gaW4gdGhlIERPTS5cblxuICAgICAgaWYgKGNsZWFyQnV0dG9uIHx8IGxvYWRpbmdTcGlubmVyIHx8IGlzSW52YWxpZCB8fCBpc0Ryb3Bkb3duIHx8IGN1c3RvbUljb24gJiYgaWNvblNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgcmlnaHRJY29ucyA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zIGV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMtLXJpZ2h0XCJcbiAgICAgICAgfSwgY2xlYXJCdXR0b24sIGxvYWRpbmdTcGlubmVyLCBpbnZhbGlkSWNvbiwgaWNvblNpZGUgPT09ICdyaWdodCcgPyBjdXN0b21JY29uIDogdW5kZWZpbmVkLCBkcm9wZG93bkljb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgbGVmdEljb25zLCByaWdodEljb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ3VzdG9tSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDdXN0b21JY29uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzMi5pY29uLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpY29uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyBOb3JtYWxpemUgdGhlIGljb24gdG8gYW4gb2JqZWN0IGlmIGl0J3MgYSBzdHJpbmcuXG5cblxuICAgICAgdmFyIGljb25Qcm9wcyA9IGlzSWNvblNoYXBlKGljb24pID8gaWNvbiA6IHtcbiAgICAgICAgdHlwZTogaWNvblxuICAgICAgfTtcblxuICAgICAgdmFyIGljb25SZWYgPSBpY29uUHJvcHMucmVmLFxuICAgICAgICAgIHNpZGUgPSBpY29uUHJvcHMuc2lkZSxcbiAgICAgICAgICBpY29uUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhpY29uUHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBpY29uUmVmOiBpY29uUmVmXG4gICAgICB9LCBpY29uUmVzdCkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJEcm9wZG93bkljb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRHJvcGRvd25JY29uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzMy5pc0Ryb3Bkb3duLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpc0Ryb3Bkb3duKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgdHlwZTogXCJhcnJvd0Rvd25cIlxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckxvYWRpbmdTcGlubmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmdTcGlubmVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHM0LmlzTG9hZGluZyxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM0LmNvbXByZXNzZWQ7XG5cbiAgICAgIGlmICghaXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyQ2xlYXJCdXR0b25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ2xlYXJCdXR0b24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGVhciA9IF90aGlzJHByb3BzNS5jbGVhcixcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM1LmNvbXByZXNzZWQ7XG5cbiAgICAgIGlmICghY2xlYXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24sIF9leHRlbmRzKHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJ1xuICAgICAgfSwgY2xlYXIpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySW52YWxpZEljb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySW52YWxpZEljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczYuaXNJbnZhbGlkLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczYuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpc0ludmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCIsXG4gICAgICAgIHR5cGU6IFwiYWxlcnRcIlxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnM7XG59KENvbXBvbmVudCk7XG5FdWlGb3JtQ29udHJvbExheW91dEljb25zLnByb3BUeXBlcyA9IHtcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHM6ICdldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24nLCBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLmxhYmVsXCIsXG4gICAgZGVmYXVsdDogXCJDbGVhciBpbnB1dFwiXG4gIH0sIGZ1bmN0aW9uIChsYWJlbCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IGxhYmVsXG4gICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b25fX2ljb25cIixcbiAgICAgIHR5cGU6IFwiY3Jvc3NcIlxuICAgIH0pKTtcbiAgfSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcIm9uQ2xpY2tcIiwgXCJ0eXBlXCIsIFwiaWNvblJlZlwiLCBcInNpemVcIiwgXCJjb2xvclwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgaWNvblJlZiA9IF9yZWYuaWNvblJlZixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLS1jbGlja2FibGUnOiBvbkNsaWNrXG4gIH0pO1xuXG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICByZWY6IGljb25SZWZcbiAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uX19pY29uXCIsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBjb2xvcjogY29sb3JcbiAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IGljb25SZWZcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgIHNpemU6IHNpemUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3JcbiAgfSkpO1xufTtcbkV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwiaXNGb2N1c2VkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUxhYmVsID0gZnVuY3Rpb24gRXVpRm9ybUxhYmVsKF9yZWYpIHtcbiAgdmFyIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdsYWJlbCcgOiBfcmVmJHR5cGUsXG4gICAgICBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZCxcbiAgICAgIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUxhYmVsJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aUZvcm1MYWJlbC1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWQsXG4gICAgJ2V1aUZvcm1MYWJlbC1pc0ludmFsaWQnOiBpc0ludmFsaWQsXG4gICAgJ2V1aUZvcm1MYWJlbC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9KTtcblxuICBpZiAodHlwZSA9PT0gJ2xlZ2VuZCcpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxlZ2VuZFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGFiZWxcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aUZvcm1MYWJlbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmF1bHQgdHlwZSBpcyBhIGBsYWJlbGAgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgYGxlZ2VuZGBcbiAgICAgKiBpZiB1c2luZyBpbnNpZGUgYSBgZmllbGRzZXRgLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERlZmF1bHQgdHlwZSBpcyBhIGBsYWJlbGAgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgYGxlZ2VuZGBcbiAgICAgKiBpZiB1c2luZyBpbnNpZGUgYSBgZmllbGRzZXRgLlxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIiwgXCJsZWdlbmRcIl0pXSksIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsZWdlbmRcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKV0pLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENoYW5nZXMgYGN1cnNvcmAgdG8gYGRlZmF1bHRgLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENoYW5nZXMgYGN1cnNvcmAgdG8gYGRlZmF1bHRgLlxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5mdW5jdGlvbiBpc011dGFibGVSZWYocmVmKSB7XG4gIHJldHVybiByZWYgIT0gbnVsbCAmJiByZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKTtcbn1cblxuZXhwb3J0IHZhciBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgPSBmdW5jdGlvbiBFdWlWYWxpZGF0YWJsZUNvbnRyb2woX3JlZikge1xuICB2YXIgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBjb250cm9sID0gdXNlUmVmKG51bGwpO1xuICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkUmVmID0gY2hpbGQucmVmO1xuICB2YXIgcmVwbGFjZWRSZWYgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGNvbnRyb2wuY3VycmVudCA9IGVsZW1lbnQ7IC8vIENhbGwgdGhlIG9yaWdpbmFsIHJlZiwgaWYgYW55XG5cbiAgICBpZiAodHlwZW9mIGNoaWxkUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjaGlsZFJlZihlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGlzTXV0YWJsZVJlZihjaGlsZFJlZikpIHtcbiAgICAgIGNoaWxkUmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgfSwgW2NoaWxkUmVmXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRyb2wuY3VycmVudCA9PT0gbnVsbCB8fCB0eXBlb2YgY29udHJvbC5jdXJyZW50LnNldEN1c3RvbVZhbGlkaXR5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47IC8vIGpzZG9tIGRvZXNuJ3QgcG9seWZpbGwgdGhpcyBmb3IgdGhlIHNlcnZlci1zaWRlXG4gICAgfVxuXG4gICAgaWYgKGlzSW52YWxpZCkge1xuICAgICAgY29udHJvbC5jdXJyZW50LnNldEN1c3RvbVZhbGlkaXR5KCdJbnZhbGlkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuY3VycmVudC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICByZWY6IHJlcGxhY2VkUmVmLFxuICAgICdhcmlhLWludmFsaWQnOiBpc0ludmFsaWRcbiAgfSk7XG59O1xuRXVpVmFsaWRhdGFibGVDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJlZjogUHJvcFR5cGVzLmFueVxuICB9KS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFRoZSBgZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnRgIGZ1bmN0aW9uIGhlbHBzIHNldHVwIHRoZSBjbGFzc05hbWUgYXBwZW5kdW1cbiAqIGRlcGVuZGluZyBvbiB0aGUgZm9ybSBjb250cm9sJ3MgY3VycmVudCBzZXR0aW5ncy9zdGF0ZS5cbiAqXG4gKiBAcGFyYW0gaWNvbiB7Ym9vbGVhbn0gRG9lcyBpdCBjb250YWluIGEgc3RhdGljIGljb24gbGlrZSBhcnJvd0Rvd25cbiAqIEBwYXJhbSBjbGVhciB7Ym9vbGVhbn0gSXMgaXQgY3VycmVudGx5IGNsZWFyYWJsZVxuICogQHBhcmFtIGlzTG9hZGluZyB7Ym9vbGVhbn0gSXMgaXMgY3VycmVudGx5IGxvYWRpbmdcbiAqIEBwYXJhbSBpc0ludmFsaWQge2Jvb2xlYW59IEl0IGlzIGN1cnJlbnRseSBpbnZhbGlkXG4gKiBAcGFyYW0gaXNEcm9wZG93biB7Ym9vbGVhbn0gSXQgaXMgYXMgZHJvcGRvd25cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFJldHVybnMgdGhlIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIGJhc2UgY2xhc3NOYW1lIG9mIHRoZSBmb3JtIGNvbnRyb2w7IG9yIGB1bmRlZmluZWRgIGlmIGFsbCBldmFsdWF0ZSB0byBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnQoX3JlZikge1xuICB2YXIgaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIGNsZWFyID0gX3JlZi5jbGVhcixcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgICBpc0Ryb3Bkb3duID0gX3JlZi5pc0Ryb3Bkb3duO1xuICB2YXIgbnVtSWNvbnMgPSBbaWNvbiwgY2xlYXIsIGlzSW52YWxpZCwgaXNMb2FkaW5nLCBpc0Ryb3Bkb3duXS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbSA9PT0gdHJ1ZTtcbiAgfSkubGVuZ3RoOyAvLyBUaGlzIGNsYXNzTmFtZSBpcyBhbHNvIHNwZWNpZmljYWxseSB1c2VkIGluIGBzcmMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19mb3JtLnNjc3NgXG5cbiAgcmV0dXJuIG51bUljb25zID4gMCA/IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXQtLVwiLmNvbmNhdChudW1JY29ucywgXCJpY29uc1wiKSA6IHVuZGVmaW5lZDtcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaWRcIiwgXCJuYW1lXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJpc0ludmFsaWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpbnB1dFJlZlwiLCBcImluY3JlbWVudGFsXCIsIFwiY29tcHJlc3NlZFwiLCBcIm9uU2VhcmNoXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEJyb3dzZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9icm93c2VyJztcbmltcG9ydCB7IGtleXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uL2Zvcm1fY29udHJvbF9sYXlvdXQnO1xuaW1wb3J0IHsgRXVpVmFsaWRhdGFibGVDb250cm9sIH0gZnJvbSAnLi4vdmFsaWRhdGFibGVfY29udHJvbCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudCB9IGZyb20gJy4uL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGlzU2VhcmNoU3VwcG9ydGVkID0gZmFsc2U7XG5leHBvcnQgdmFyIEV1aUZpZWxkU2VhcmNoID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGaWVsZFNlYXJjaCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGaWVsZFNlYXJjaCk7XG5cbiAgZnVuY3Rpb24gRXVpRmllbGRTZWFyY2goKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZpZWxkU2VhcmNoKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgdmFsdWU6IF90aGlzLnByb3BzLnZhbHVlIHx8IFN0cmluZyhfdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRFbGVtZW50XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFudXBzXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsZWFyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGNsZWFyIHRoZSBmaWVsZCdzIHZhbHVlXG4gICAgICAvLyAxLiBSZWFjdCBkb2Vzbid0IGxpc3RlbiBmb3IgYGNoYW5nZWAgZXZlbnRzLCBpbnN0ZWFkIGl0IG1hcHMgYGlucHV0YCBldmVudHMgdG8gYGNoYW5nZWBcbiAgICAgIC8vIDIuIFJlYWN0IG9ubHkgZmlyZXMgdGhlIG1hcHBlZCBgY2hhbmdlYCBldmVudCBpZiB0aGUgZWxlbWVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgICAvLyAzLiBBbiBpbnB1dCdzIHZhbHVlIGlzLCBpbiBhZGRpdGlvbiB0byBvdGhlciBtZXRob2RzLCB0cmFja2VkIGJ5IGludGVyY2VwdGluZyBlbGVtZW50LnZhbHVlID0gJy4uLidcbiAgICAgIC8vXG4gICAgICAvLyBTbyB3ZSBoYXZlIHRvIGdvIGJlbG93IHRoZSBlbGVtZW50J3MgdmFsdWUgc2V0dGVyIHRvIGF2b2lkIFJlYWN0IGludGVyY2VwdGluZyBpdCxcbiAgICAgIC8vIG9ubHkgdGhlbiB3aWxsIFJlYWN0IHRyZWF0IHRoZSB2YWx1ZSBhcyBkaWZmZXJlbnQgYW5kIGZpcmUgaXRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgICAvL1xuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjM4OTI1NDcvd2hhdC1pcy10aGUtYmVzdC13YXktdG8tdHJpZ2dlci1vbmNoYW5nZS1ldmVudC1pbi1yZWFjdC1qc1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCAndmFsdWUnKTtcbiAgICAgIHZhciBuYXRpdmVJbnB1dFZhbHVlU2V0dGVyID0gbmF0aXZlSW5wdXRWYWx1ZSA/IG5hdGl2ZUlucHV0VmFsdWUuc2V0IDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmF0aXZlSW5wdXRWYWx1ZVNldHRlcikge1xuICAgICAgICBuYXRpdmVJbnB1dFZhbHVlU2V0dGVyLmNhbGwoX3RoaXMuaW5wdXRFbGVtZW50LCAnJyk7XG4gICAgICB9IC8vIGRpc3BhdGNoIGlucHV0IGV2ZW50LCB3aXRoIElFMTEgc3VwcG9ydC9mYWxsYmFja1xuXG5cbiAgICAgIHZhciBldmVudDtcblxuICAgICAgaWYgKCdFdmVudCcgaW4gd2luZG93ICYmIHR5cGVvZiBFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBldmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElFMTFcbiAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCdpbnB1dCcsIHRydWUsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICBfdGhpcy5pbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIH0gLy8gc2V0IGZvY3VzIG9uIHRoZSBzZWFyY2ggZmllbGRcblxuXG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGluY3JlbWVudGFsID0gX3RoaXMkcHJvcHMuaW5jcmVtZW50YWwsXG4gICAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wcy5vblNlYXJjaDtcblxuICAgICAgaWYgKG9uU2VhcmNoICYmIGluY3JlbWVudGFsKSB7XG4gICAgICAgIG9uU2VhcmNoKCcnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRSZWZcIiwgZnVuY3Rpb24gKGlucHV0RWxlbWVudCkge1xuICAgICAgX3RoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50O1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIHtcbiAgICAgICAgX3RoaXMucHJvcHMuaW5wdXRSZWYoaW5wdXRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleVVwXCIsIGZ1bmN0aW9uIChldmVudCwgaW5jcmVtZW50YWwsIG9uU2VhcmNoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25LZXlVcCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbktleVVwKGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob25TZWFyY2ggJiYgKGV2ZW50LmtleSAhPT0ga2V5cy5FTlRFUiAmJiBpbmNyZW1lbnRhbCB8fCBldmVudC5rZXkgPT09IGtleXMuRU5URVIgJiYgIWlzU2VhcmNoU3VwcG9ydGVkKSkge1xuICAgICAgICBvblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZpZWxkU2VhcmNoLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50KSByZXR1cm47XG4gICAgICBpc1NlYXJjaFN1cHBvcnRlZCA9IEJyb3dzZXIuaXNFdmVudFN1cHBvcnRlZCgnc2VhcmNoJywgdGhpcy5pbnB1dEVsZW1lbnQpO1xuXG4gICAgICBpZiAoaXNTZWFyY2hTdXBwb3J0ZWQpIHtcbiAgICAgICAgdmFyIG9uU2VhcmNoID0gZnVuY3Rpb24gb25TZWFyY2goZXZlbnQpIHtcbiAgICAgICAgICBpZiAoX3RoaXMyLnByb3BzLm9uU2VhcmNoKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBfdGhpczIucHJvcHMub25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VhcmNoJywgb25TZWFyY2gpO1xuICAgICAgICB0aGlzLmNsZWFudXBzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMyLmlucHV0RWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgICAgX3RoaXMyLmlucHV0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC52YWx1ZSAhPT0gX3RoaXMyLnN0YXRlLnZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYW51cHMuZm9yRWFjaChmdW5jdGlvbiAoY2xlYW51cCkge1xuICAgICAgICByZXR1cm4gY2xlYW51cCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgICBuYW1lID0gX3RoaXMkcHJvcHMyLm5hbWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczIucGxhY2Vob2xkZXIsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHMyLmlzSW52YWxpZCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgICAgaW5wdXRSZWYgPSBfdGhpcyRwcm9wczIuaW5wdXRSZWYsXG4gICAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wczIuaW5jcmVtZW50YWwsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICAgIG9uU2VhcmNoID0gX3RoaXMkcHJvcHMyLm9uU2VhcmNoLFxuICAgICAgICAgIF9pc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzMi5pc0NsZWFyYWJsZSxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczIuYXBwZW5kLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczIucHJlcGVuZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZSAhPT0gJ3N0cmluZycpIHZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTsgLy8gU2V0IGFjdHVhbCB2YWx1ZSBvZiBpc0NsZWFyYWJsZSBpZiB2YWx1ZSBleGlzdHMgYXMgd2VsbFxuXG4gICAgICB2YXIgaXNDbGVhcmFibGUgPSBCb29sZWFuKF9pc0NsZWFyYWJsZSAmJiB2YWx1ZSAmJiAhcmVzdC5yZWFkT25seSAmJiAhcmVzdC5kaXNhYmxlZCk7XG4gICAgICB2YXIgbnVtSWNvbnNDbGFzcyA9IGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50KHtcbiAgICAgICAgY2xlYXI6IGlzQ2xlYXJhYmxlLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdcbiAgICAgIH0pO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWVsZFNlYXJjaCcsIG51bUljb25zQ2xhc3MsIHtcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC0taW5Hcm91cCc6IHByZXBlbmQgfHwgYXBwZW5kLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNMb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNDbGVhcmFibGUnOiBpc0NsZWFyYWJsZSxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzSW52YWxpZCc6IGlzSW52YWxpZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCB7XG4gICAgICAgIGljb246IFwic2VhcmNoXCIsXG4gICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgIGNsZWFyOiBpc0NsZWFyYWJsZSA/IHtcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ2xlYXIsXG4gICAgICAgICAgJ2RhdGEtdGVzdC1zdWJqJzogJ2NsZWFyU2VhcmNoQnV0dG9uJ1xuICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlWYWxpZGF0YWJsZUNvbnRyb2wsIHtcbiAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWRcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IFwic2VhcmNoXCIsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIG9uS2V5VXA6IGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMub25LZXlVcChlLCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpO1xuICAgICAgICB9LFxuICAgICAgICByZWY6IHRoaXMuc2V0UmVmXG4gICAgICB9LCByZXN0KSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRmllbGRTZWFyY2g7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWVsZFNlYXJjaCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBpbmNyZW1lbnRhbDogZmFsc2UsXG4gIGNvbXByZXNzZWQ6IGZhbHNlLFxuICBpc0NsZWFyYWJsZTogdHJ1ZVxufSk7XG5cbkV1aUZpZWxkU2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIFtFbnRlcl0gT1Igb24gY2hhbmdlIGlmIHRoZSBpbmNyZW1lbnRhbCBwcm9wIGlzIGB0cnVlYC5cbiAgICAgKiBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgb25bRW50ZXJdIGZ1bmN0aW9uYWxpdHksIHByZWZlciB1c2luZyBvbkNoYW5nZVxuICAgICAqL1xuICBvblNlYXJjaDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgdGhlIHNlYXJjaCB3aWxsIGJlIGV4ZWN1dGVkICh0aGF0IGlzLCB0aGUgYG9uU2VhcmNoYCB3aWxsIGJlIGNhbGxlZCkgYXMgdGhlXG4gICAgICogdXNlciB0eXBlcy5cbiAgICAgKi9cbiAgaW5jcmVtZW50YWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIHdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBpbnB1dFxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYmVmb3JlIGlucHV0XG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGlucHV0LlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFdlIGRvbid0IG5vcm1hbGx5IHVzZSAnSScgcHJlZml4ZXMsIHRoaXMgZmlsZSBpcyBhbiBleGNlcHRpb25cbnZhciBCcm93c2VySW1wbCA9IHtcbiAgaXNFdmVudFN1cHBvcnRlZDogZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChuYW1lLCBlbGVtZW50KSB7XG4gICAgcmV0dXJuIFwib25cIi5jb25jYXQobmFtZSkgaW4gZWxlbWVudDtcbiAgfVxufTtcbmV4cG9ydCB2YXIgQnJvd3NlciA9IE9iamVjdC5mcmVlemUoQnJvd3NlckltcGwpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtRXJyb3JUZXh0ID0gZnVuY3Rpb24gRXVpRm9ybUVycm9yVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1FcnJvclRleHQnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCJcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtRXJyb3JUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtSGVscFRleHQgPSBmdW5jdGlvbiBFdWlGb3JtSGVscFRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtSGVscFRleHQnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpRm9ybUhlbHBUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImhlbHBUZXh0XCIsIFwiaXNJbnZhbGlkXCIsIFwiZXJyb3JcIiwgXCJsYWJlbFwiLCBcImxhYmVsVHlwZVwiLCBcImxhYmVsQXBwZW5kXCIsIFwiaGFzRW1wdHlMYWJlbFNwYWNlXCIsIFwiZnVsbFdpZHRoXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVzY3JpYmVkQnlJZHNcIiwgXCJkaXNwbGF5XCIsIFwiaGFzQ2hpbGRMYWJlbFwiLCBcImlkXCIsIFwiaXNEaXNhYmxlZFwiXTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50LCBDaGlsZHJlbiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29iamVjdHMnO1xuaW1wb3J0IHsgRXVpRm9ybUhlbHBUZXh0IH0gZnJvbSAnLi4vZm9ybV9oZWxwX3RleHQnO1xuaW1wb3J0IHsgRXVpRm9ybUVycm9yVGV4dCB9IGZyb20gJy4uL2Zvcm1fZXJyb3JfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIHJvdzogbnVsbCxcbiAgcm93Q29tcHJlc3NlZDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQnLFxuICBjb2x1bW5Db21wcmVzc2VkOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCBldWlGb3JtUm93LS1ob3Jpem9udGFsJyxcbiAgY2VudGVyOiBudWxsLFxuICBjZW50ZXJDb21wcmVzc2VkOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCcsXG4gIGNvbHVtbkNvbXByZXNzZWRTd2l0Y2g6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkIGV1aUZvcm1Sb3ctLWhvcml6b250YWwgZXVpRm9ybVJvdy0taGFzU3dpdGNoJ1xufTtcbmV4cG9ydCB2YXIgRElTUExBWVMgPSBrZXlzT2YoZGlzcGxheVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpRm9ybVJvdyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRm9ybVJvdywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb3JtUm93KTtcblxuICBmdW5jdGlvbiBFdWlGb3JtUm93KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtUm93KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KF9hcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlkOiBfdGhpcy5wcm9wcy5pZCB8fCBodG1sSWRHZW5lcmF0b3IoKSgpXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEb2luZyB0aGlzIHRvIGFsbG93IG9uRm9jdXMgdG8gYmUgY2FsbGVkIGNvcnJlY3RseSBmcm9tIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IGFzIHRoaXMgY29tcG9uZW50IG92ZXJyaWRlcyBpdFxuICAgICAgdmFyIG9uQ2hpbGRGb2N1cyA9IGdldChfdGhpcy5wcm9wcywgJ2NoaWxkcmVuLnByb3BzLm9uRm9jdXMnKTtcblxuICAgICAgaWYgKG9uQ2hpbGRGb2N1cykge1xuICAgICAgICBvbkNoaWxkRm9jdXMuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQ7XG5cbiAgICAgICAgaWYgKCFpc0ZvY3VzZWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvaW5nIHRoaXMgdG8gYWxsb3cgb25CbHVyIHRvIGJlIGNhbGxlZCBjb3JyZWN0bHkgZnJvbSB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudCBhcyB0aGlzIGNvbXBvbmVudCBvdmVycmlkZXMgaXRcbiAgICAgIHZhciBvbkNoaWxkQmx1ciA9IGdldChfdGhpcy5wcm9wcywgJ2NoaWxkcmVuLnByb3BzLm9uQmx1cicpO1xuXG4gICAgICBpZiAob25DaGlsZEJsdXIpIHtcbiAgICAgICAgb25DaGlsZEJsdXIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvcm1Sb3csIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3JlZjIsIF9jaGlsZCRwcm9wcyRkaXNhYmxlZDtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGhlbHBUZXh0ID0gX3RoaXMkcHJvcHMuaGVscFRleHQsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHMuaXNJbnZhbGlkLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMuZXJyb3IsXG4gICAgICAgICAgbGFiZWwgPSBfdGhpcyRwcm9wcy5sYWJlbCxcbiAgICAgICAgICBsYWJlbFR5cGUgPSBfdGhpcyRwcm9wcy5sYWJlbFR5cGUsXG4gICAgICAgICAgbGFiZWxBcHBlbmQgPSBfdGhpcyRwcm9wcy5sYWJlbEFwcGVuZCxcbiAgICAgICAgICBoYXNFbXB0eUxhYmVsU3BhY2UgPSBfdGhpcyRwcm9wcy5oYXNFbXB0eUxhYmVsU3BhY2UsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMuZnVsbFdpZHRoLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBkZXNjcmliZWRCeUlkcyA9IF90aGlzJHByb3BzLmRlc2NyaWJlZEJ5SWRzLFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIGhhc0NoaWxkTGFiZWwgPSBfdGhpcyRwcm9wcy5oYXNDaGlsZExhYmVsLFxuICAgICAgICAgIHByb3BzSWQgPSBfdGhpcyRwcm9wcy5pZCxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaWQgPSB0aGlzLnN0YXRlLmlkO1xuICAgICAgdmFyIGhhc0xhYmVsID0gbGFiZWwgfHwgbGFiZWxBcHBlbmQ7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Sb3cnLCB7XG4gICAgICAgICdldWlGb3JtUm93LS1oYXNFbXB0eUxhYmVsU3BhY2UnOiBoYXNFbXB0eUxhYmVsU3BhY2UsXG4gICAgICAgICdldWlGb3JtUm93LS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlGb3JtUm93LS1oYXNMYWJlbCc6IGhhc0xhYmVsXG4gICAgICB9LCBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0sIC8vIFNhZmUgdXNlIG9mICEgYXMgZGVmYXVsdCBwcm9wIGlzICdyb3cnXG4gICAgICBjbGFzc05hbWUpO1xuICAgICAgdmFyIG9wdGlvbmFsSGVscFRleHRzO1xuXG4gICAgICBpZiAoaGVscFRleHQpIHtcbiAgICAgICAgdmFyIGhlbHBUZXh0cyA9IEFycmF5LmlzQXJyYXkoaGVscFRleHQpID8gaGVscFRleHQgOiBbaGVscFRleHRdO1xuICAgICAgICBvcHRpb25hbEhlbHBUZXh0cyA9IGhlbHBUZXh0cy5tYXAoZnVuY3Rpb24gKGhlbHBUZXh0LCBpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBoZWxwVGV4dCA9PT0gJ3N0cmluZycgPyBoZWxwVGV4dCA6IGk7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUhlbHBUZXh0LCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItaGVscC1cIikuY29uY2F0KGkpLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX3RleHRcIlxuICAgICAgICAgIH0sIGhlbHBUZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25hbEVycm9ycztcblxuICAgICAgaWYgKGVycm9yICYmIGlzSW52YWxpZCkge1xuICAgICAgICB2YXIgZXJyb3JUZXh0cyA9IEFycmF5LmlzQXJyYXkoZXJyb3IpID8gZXJyb3IgOiBbZXJyb3JdO1xuICAgICAgICBvcHRpb25hbEVycm9ycyA9IGVycm9yVGV4dHMubWFwKGZ1bmN0aW9uIChlcnJvciwgaSkge1xuICAgICAgICAgIHZhciBrZXkgPSB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiBpO1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1FcnJvclRleHQsIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1lcnJvci1cIikuY29uY2F0KGkpLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX3RleHRcIlxuICAgICAgICAgIH0sIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25hbExhYmVsO1xuICAgICAgdmFyIGlzTGVnZW5kID0gbGFiZWwgJiYgbGFiZWxUeXBlID09PSAnbGVnZW5kJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHZhciBsYWJlbElkID0gXCJcIi5jb25jYXQoaWQsIFwiLWxhYmVsXCIpO1xuXG4gICAgICBpZiAoaGFzTGFiZWwpIHtcbiAgICAgICAgdmFyIGxhYmVsUHJvcHMgPSB7fTtcblxuICAgICAgICBpZiAoaXNMZWdlbmQpIHtcbiAgICAgICAgICBsYWJlbFByb3BzID0ge1xuICAgICAgICAgICAgdHlwZTogbGFiZWxUeXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYWJlbFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGh0bWxGb3I6IGhhc0NoaWxkTGFiZWwgPyBpZCA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sICFpc0Rpc2FibGVkICYmIHtcbiAgICAgICAgICAgIGlzRm9jdXNlZDogdGhpcy5zdGF0ZS5pc0ZvY3VzZWRcbiAgICAgICAgICB9KSwge30sIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSByb3cgaXMgZGlzYWJsZWQsIGRvbid0IHBhc3MgdGhlIGlzRm9jdXNlZCBzdGF0ZS5cbiAgICAgICAgICAgIHR5cGU6IGxhYmVsVHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9uYWxMYWJlbCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X19sYWJlbFdyYXBwZXJcIlxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X19sYWJlbFwiLFxuICAgICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogaXNJbnZhbGlkLFxuICAgICAgICAgIGlkOiBsYWJlbElkXG4gICAgICAgIH0sIGxhYmVsUHJvcHMpLCBsYWJlbCksIGxhYmVsQXBwZW5kICYmICcgJywgbGFiZWxBcHBlbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9uYWxQcm9wcyA9IHt9O1xuICAgICAgLyoqXG4gICAgICAgKiBTYWZlIHVzZSBvZiAhIGFzIGRlZmF1bHQgcHJvcCBpcyBbXVxuICAgICAgICovXG5cbiAgICAgIHZhciBkZXNjcmliaW5nSWRzID0gX3RvQ29uc3VtYWJsZUFycmF5KGRlc2NyaWJlZEJ5SWRzKTtcblxuICAgICAgaWYgKG9wdGlvbmFsSGVscFRleHRzKSB7XG4gICAgICAgIG9wdGlvbmFsSGVscFRleHRzLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbmFsSGVscFRleHQpIHtcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKG9wdGlvbmFsSGVscFRleHQucHJvcHMuaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbmFsRXJyb3JzKSB7XG4gICAgICAgIG9wdGlvbmFsRXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMucHVzaChlcnJvci5wcm9wcy5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzY3JpYmluZ0lkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9wdGlvbmFsUHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IGRlc2NyaWJpbmdJZHMuam9pbignICcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KGNoaWxkcmVuKTtcbiAgICAgIHZhciBmaWVsZCA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBpZDogaWQsXG4gICAgICAgIC8vIEFsbG93IHRoZSBjaGlsZCdzIGRpc2FibGVkIG9yIGlzRGlzYWJsZWQgcHJvcCB0byBzdXBlcmNlZGUgdGhlIGBpc0Rpc2FibGVkYFxuICAgICAgICBkaXNhYmxlZDogKF9yZWYyID0gKF9jaGlsZCRwcm9wcyRkaXNhYmxlZCA9IGNoaWxkLnByb3BzLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfY2hpbGQkcHJvcHMkZGlzYWJsZWQgIT09IHZvaWQgMCA/IF9jaGlsZCRwcm9wcyRkaXNhYmxlZCA6IGNoaWxkLnByb3BzLmlzRGlzYWJsZWQpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IGlzRGlzYWJsZWQsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1clxuICAgICAgfSwgb3B0aW9uYWxQcm9wcykpO1xuICAgICAgdmFyIGZpZWxkV3JhcHBlckNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtUm93X19maWVsZFdyYXBwZXInLCB7XG4gICAgICAgIGV1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlckRpc3BsYXlPbmx5OlxuICAgICAgICAvKipcbiAgICAgICAgICogU2FmZSB1c2Ugb2YgISBhcyBkZWZhdWx0IHByb3AgaXMgJ3JvdydcbiAgICAgICAgICovXG4gICAgICAgIGRpc3BsYXkuc3RhcnRzV2l0aCgnY2VudGVyJylcbiAgICAgIH0pO1xuICAgICAgdmFyIHNoYXJlZFByb3BzID0ge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItcm93XCIpXG4gICAgICB9O1xuXG4gICAgICB2YXIgY29udGVudHMgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBvcHRpb25hbExhYmVsLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZFdyYXBwZXJDbGFzc2VzXG4gICAgICB9LCBmaWVsZCwgb3B0aW9uYWxFcnJvcnMsIG9wdGlvbmFsSGVscFRleHRzKSk7XG5cbiAgICAgIHJldHVybiBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8gX19fRW1vdGlvbkpTWChcImZpZWxkc2V0XCIsIF9leHRlbmRzKHt9LCBzaGFyZWRQcm9wcywgcmVzdCksIGNvbnRlbnRzKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCByZXN0KSwgY29udGVudHMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb3JtUm93O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRm9ybVJvdywgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkaXNwbGF5OiAncm93JyxcbiAgaGFzRW1wdHlMYWJlbFNwYWNlOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgZGVzY3JpYmVkQnlJZHM6IFtdLFxuICBsYWJlbFR5cGU6ICdsYWJlbCcsXG4gIGhhc0NoaWxkTGFiZWw6IHRydWVcbn0pO1xuXG5FdWlGb3JtUm93LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdHMgdG8gcmVuZGVyaW5nIGEgYDxsYWJlbD5gIGJ1dCBpZiBwYXNzZWQgYCdsZWdlbmQnYCBmb3IgbGFiZWxUeXBlLFxuICAgICAqIHdpbGwgcmVuZGVyIGJvdGggYSBgPGxlZ2VuZD5gIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGFpbmVyIGFzIGEgYDxmaWVsZHNldD5gXG4gICAgICovXG4gIGxhYmVsVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSldKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdoZW4gYHJvd0NvbXByZXNzZWRgLCBqdXN0IHRpZ2h0ZW5zIHVwIHRoZSBzcGFjaW5nO1xuICAgICAqIFNldCB0byBgY29sdW1uQ29tcHJlc3NlZGAgaWYgY29tcHJlc3NlZFxuICAgICAqIGFuZCBob3Jpem9udGFsIGxheW91dCBpcyBuZWVkZWQuXG4gICAgICogU2V0IHRvIGBjZW50ZXJgIG9yIGBjZW50ZXJDb21wcmVzc2VkYCB0byBhbGlnbiBub24taW5wdXRcbiAgICAgKiBjb250ZW50IGJldHRlciB3aXRoIGlubGluZSByb3dzLlxuICAgICAqIFNldCB0byBgY29sdW1uQ29tcHJlc3NlZFN3aXRjaGAgaWYgdGhlIGZvcm0gY29udHJvbCBiZWluZyBwYXNzZWRcbiAgICAgKiBhcyB0aGUgY2hpbGQgaXMgYSBzd2l0Y2guXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogV2hlbiBgcm93Q29tcHJlc3NlZGAsIGp1c3QgdGlnaHRlbnMgdXAgdGhlIHNwYWNpbmc7XG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkYCBpZiBjb21wcmVzc2VkXG4gICAgICogYW5kIGhvcml6b250YWwgbGF5b3V0IGlzIG5lZWRlZC5cbiAgICAgKiBTZXQgdG8gYGNlbnRlcmAgb3IgYGNlbnRlckNvbXByZXNzZWRgIHRvIGFsaWduIG5vbi1pbnB1dFxuICAgICAqIGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIHJvd3MuXG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCBpZiB0aGUgZm9ybSBjb250cm9sIGJlaW5nIHBhc3NlZFxuICAgICAqIGFzIHRoZSBjaGlsZCBpcyBhIHN3aXRjaC5cbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcInJvd1wiLCBcInJvd0NvbXByZXNzZWRcIiwgXCJjb2x1bW5Db21wcmVzc2VkXCIsIFwiY2VudGVyXCIsIFwiY2VudGVyQ29tcHJlc3NlZFwiLCBcImNvbHVtbkNvbXByZXNzZWRTd2l0Y2hcIl0pLFxuICBoYXNFbXB0eUxhYmVsU3BhY2U6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBJRHMgb2YgYWRkaXRpb25hbCBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBwYXJ0IG9mIGNoaWxkcmVuJ3MgYGFyaWEtZGVzY3JpYmVkYnlgXG4gICAgICovXG4gIGRlc2NyaWJlZEJ5SWRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIEVzY2FwZSBoYXRjaCB0byBub3QgcmVuZGVyIGR1cGxpY2F0ZSBsYWJlbHMgaWYgdGhlIGNoaWxkIGFsc28gcmVuZGVycyBhIGxhYmVsXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cbiAgaGFzQ2hpbGRMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBZGRzIGFuIGV4dHJhIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmb3JtIGxhYmVsIHdpdGhvdXRcbiAgICAgKiBiZWluZyBjb250YWluZWQgaW5zaWRlIHRoZSBmb3JtIGxhYmVsLiBHb29kIGZvciB0aGluZ3NcbiAgICAgKiBsaWtlIGRvY3VtZW50YXRpb24gbGlua3MuXG4gICAgICovXG4gIGxhYmVsQXBwZW5kOiBQcm9wVHlwZXMuYW55LFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZXJyb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiAgQWRkcyBhIHNpbmdsZSBub2RlL3N0cmluZyBvciBhbiBhcnJheSBvZiBub2Rlcy9zdHJpbmdzIGJlbG93IHRoZSBpbnB1dFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG4gIGhlbHBUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogIFBhc3NlZCBhbG9uZyB0byB0aGUgbGFiZWwgZWxlbWVudDsgYW5kIHRvIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50IHdoZW4gYGRpc2FibGVkYCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qgb24gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogIFBhc3NlZCBhbG9uZyB0byB0aGUgbGFiZWwgZWxlbWVudDsgYW5kIHRvIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50IHdoZW4gYGRpc2FibGVkYCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qgb24gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIm9uQ2xvc2VcIiwgXCJ0aXRsZVwiLCBcIm9uSGVpZ2h0Q2hhbmdlXCIsIFwidHJhbnNpdGlvblR5cGVcIiwgXCJ0cmFuc2l0aW9uRGlyZWN0aW9uXCIsIFwib25UcmFuc2l0aW9uQ29tcGxldGVcIiwgXCJvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZVwiLCBcIml0ZW1zXCIsIFwiaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXhcIiwgXCJzaG93TmV4dFBhbmVsXCIsIFwic2hvd1ByZXZpb3VzUGFuZWxcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdGFiYmFibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgY2FzY2FkaW5nTWVudUtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0gfSBmcm9tICcuL2NvbnRleHRfbWVudV9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdGl0bGVTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHM6ICdldWlDb250ZXh0TWVudVBhbmVsVGl0bGUtLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2YodGl0bGVTaXplVG9DbGFzc05hbWVNYXApO1xudmFyIHRyYW5zaXRpb25EaXJlY3Rpb25BbmRUeXBlVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5leHQ6IHtcbiAgICBpbjogJ2V1aUNvbnRleHRNZW51UGFuZWwtdHhJbkxlZnQnLFxuICAgIG91dDogJ2V1aUNvbnRleHRNZW51UGFuZWwtdHhPdXRMZWZ0J1xuICB9LFxuICBwcmV2aW91czoge1xuICAgIGluOiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eEluUmlnaHQnLFxuICAgIG91dDogJ2V1aUNvbnRleHRNZW51UGFuZWwtdHhPdXRSaWdodCdcbiAgfVxufTtcbmV4cG9ydCB2YXIgRXVpQ29udGV4dE1lbnVQYW5lbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ29udGV4dE1lbnVQYW5lbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb250ZXh0TWVudVBhbmVsKTtcblxuICBmdW5jdGlvbiBFdWlDb250ZXh0TWVudVBhbmVsKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbnRleHRNZW51UGFuZWwpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYmFja0J1dHRvblwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwYW5lbFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbml0aWFsUG9wb3ZlclBhcmVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmaW5kTWVudUl0ZW1zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRpdGVtcztcblxuICAgICAgaWYgKCFfdGhpcy5wYW5lbCkgcmV0dXJuO1xuICAgICAgaWYgKCEoKF90aGlzJHByb3BzJGl0ZW1zID0gX3RoaXMucHJvcHMuaXRlbXMpICE9PSBudWxsICYmIF90aGlzJHByb3BzJGl0ZW1zICE9PSB2b2lkIDAgJiYgX3RoaXMkcHJvcHMkaXRlbXMubGVuZ3RoKSkgcmV0dXJuOyAvLyBXZSBvbmx5IG5lZWQgbWVudSBpdGVtcy9hcnJvdyBrZXkgbmF2aWdhdGlvbiBmb3IgdGhlIGBpdGVtc2AgQVBJXG5cbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBtZW51IGl0ZW1zLCBubyBuZWVkIHRvIGNvbnRpbnVlXG5cbiAgICAgIHZhciB0YWJiYWJsZUl0ZW1zID0gdGFiYmFibGUoX3RoaXMucGFuZWwpO1xuXG4gICAgICBpZiAodGFiYmFibGVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG1lbnVJdGVtczogdGFiYmFibGVJdGVtc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmb2N1c01lbnVJdGVtXCIsIGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSRtZW51SXRlbXM7XG5cbiAgICAgIHZhciBpbmRleE9mZnNldCA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcbiAgICAgIHZhciBuZXh0Rm9jdXNlZEl0ZW1JbmRleDtcblxuICAgICAgaWYgKF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggLSAxIDogMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCArIGluZGV4T2Zmc2V0O1xuXG4gICAgICAgIGlmIChuZXh0Rm9jdXNlZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4ID09PSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogbmV4dEZvY3VzZWRJdGVtSW5kZXhcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkc3RhdGUkbWVudUl0ZW1zID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zW25leHRGb2N1c2VkSXRlbUluZGV4XSkgPT09IG51bGwgfHwgX3RoaXMkc3RhdGUkbWVudUl0ZW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRzdGF0ZSRtZW51SXRlbXMuZm9jdXMoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBJZiB0aGlzIHBhbmVsIGNvbnRhaW5zIGl0ZW1zIHlvdSBjYW4gdXNlIHRoZSBsZWZ0IGFycm93IGtleSB0byBnbyBiYWNrIGF0IGFueSB0aW1lLlxuICAgICAgLy8gQnV0IGlmIGl0IGRvZXNuJ3QgY29udGFpbiBpdGVtcywgdGhlbiB5b3UgaGF2ZSB0byBmb2N1cyBvbiB0aGUgYmFjayBidXR0b24gc3BlY2lmaWNhbGx5LFxuICAgICAgLy8gc2luY2UgdGhlcmUgY291bGQgYmUgY29udGVudCBpbnNpZGUgdGhlIHBhbmVsIHdoaWNoIHJlcXVpcmVzIHVzZSBvZiB0aGUgbGVmdCBhcnJvdyBrZXksXG4gICAgICAvLyBlLmcuIHRleHQgaW5wdXRzLlxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzLnNob3dQcmV2aW91c1BhbmVsO1xuXG4gICAgICBpZiAob25DbG9zZSAmJiAoaXRlbXMgIT09IG51bGwgJiYgaXRlbXMgIT09IHZvaWQgMCAmJiBpdGVtcy5sZW5ndGggfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMuYmFja0J1dHRvbiB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5wYW5lbCkpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gY2FzY2FkaW5nTWVudUtleXMuQVJST1dfTEVGVCkge1xuICAgICAgICAgIGlmIChzaG93UHJldmlvdXNQYW5lbCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwoKTtcblxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2UgY2FzY2FkaW5nTWVudUtleXMuVEFCOlxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgLy8gTk9URTogZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBzdGFsZSBpZiBub3Qgd3JhcHBlZCBpbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgICAgICAgICAgdmFyIGZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTsgLy8gV2UgbmVlZCB0byBzeW5jIG91ciBpbnRlcm5hbCBzdGF0ZSB3aXRoIHRoZSB1c2VyIHRhYmJpbmcgdGhyb3VnaCBpdGVtc1xuXG5cbiAgICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IGZvY3VzZWRJdGVtSW5kZXggPj0gMCAmJiBmb2N1c2VkSXRlbUluZGV4IDwgX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCA/IGZvY3VzZWRJdGVtSW5kZXggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19VUDpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIF90aGlzLmZvY3VzTWVudUl0ZW0oJ3VwJyk7XG5cbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgY2FzY2FkaW5nTWVudUtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIF90aGlzLmZvY3VzTWVudUl0ZW0oJ2Rvd24nKTtcblxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19SSUdIVDpcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMuc2hvd05leHRQYW5lbChvbkNsb3NlICYmIF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggPyBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4IC0gMSAvLyBBY2NvdW50IGZvciBwYW5lbCB0aXRsZSBiYWNrIGJ1dHRvblxuICAgICAgICAgICAgICA6IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXgpO1xuXG4gICAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWNsYWltUG9wb3ZlckZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25UcmFuc2l0aW9uQ29tcGxldGUpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25UcmFuc2l0aW9uQ29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwYW5lbFJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMucGFuZWwgPSBub2RlO1xuXG4gICAgICBfdGhpcy51cGRhdGVIZWlnaHQoKTtcblxuICAgICAgX3RoaXMuZ2V0SW5pdGlhbFBvcG92ZXJQYXJlbnQoKTtcblxuICAgICAgX3RoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgaXRlbXM6IF90aGlzLnByb3BzLml0ZW1zXG4gICAgICB9LFxuICAgICAgbWVudUl0ZW1zOiBbXSxcbiAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IHByb3BzLm9uQ2xvc2UgJiYgcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggIT0gbnVsbCA/IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4ICsgMSAvLyBBY2NvdW50IGZvciBwYW5lbCB0aXRsZSBiYWNrIGJ1dHRvblxuICAgICAgOiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCxcbiAgICAgIGN1cnJlbnRIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogZmFsc2UsXG4gICAgICB0b29rSW5pdGlhbEZvY3VzOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9IC8vIEZpbmQgYWxsIHRhYmJhYmxlIG1lbnUgaXRlbXMgb24gYm90aCBwYW5lbCBpbml0IGFuZFxuICAvLyB3aGVuZXZlciBgbWVudUl0ZW1zYCByZXNldHMgd2hlbiBgcHJvcHMuaXRlbXNgIGNoYW5nZXNcblxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudVBhbmVsLCBbe1xuICAgIGtleTogXCJ0YWtlSW5pdGlhbEZvY3VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRha2VJbml0aWFsRm9jdXMoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgLy8gR2l2ZSBwb3NpdGlvbmluZyB0aW1lIHRvIHJlbmRlciBiZWZvcmUgZm9jdXMgaXMgYXBwbGllZC4gT3RoZXJ3aXNlIHBhZ2UganVtcHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5faXNNb3VudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIERvbid0IHRha2UgZm9jdXMgeWV0IGlmIEV1aUNvbnRleHRNZW51IGlzIGluIGEgcG9wb3ZlclxuICAgICAgICAvLyBhbmQgdGhlIHBvcG92ZXIgaXMgaW5pdGlhbGx5IG9wZW5pbmcvdHJhbnNpdGlvbmluZyBpblxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5pbml0aWFsUG9wb3ZlclBhcmVudCAmJiBfdGhpczIuc3RhdGUud2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFNldHRpbmcgZm9jdXMgd2hpbGUgdHJhbnNpdGlvbmluZyBjYXVzZXMgdGhlIGFuaW1hdGlvbiB0byBnbGl0Y2gsIHNvIHdlIGhhdmUgdG8gd2FpdFxuICAgICAgICAvLyB1bnRpbCBpdCdzIGZpbmlzaGVkIGJlZm9yZSB3ZSBmb2N1cyBhbnl0aGluZy5cblxuXG4gICAgICAgIGlmIChfdGhpczIucHJvcHMudHJhbnNpdGlvblR5cGUpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyJHBhbmVsO1xuXG4gICAgICAgICAgLy8gSWYgdGhlIHBhbmVsIGlzIHRyYW5zaXRpb25pbmcsIHNldCBmb2N1cyB0byB0aGUgcGFuZWwgc28gdGhhdCB1c2VycyB1c2luZ1xuICAgICAgICAgIC8vIGFycm93IGtleXMgdGhhdCBhcmUgZmFzdCBjbGlja2VycyBkb24ndCBhY2NpZGVudGFsbHkgZ2V0IHN0cmFuZGVkIGZvY3VzXG4gICAgICAgICAgLy8gb3IgdHJpZ2dlciBrZXlzdHJva2VzIHdoZW4gaXQgc2hvdWxkbid0XG4gICAgICAgICAgKF90aGlzMiRwYW5lbCA9IF90aGlzMi5wYW5lbCkgPT09IG51bGwgfHwgX3RoaXMyJHBhbmVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpczIkcGFuZWwuZm9jdXMoe1xuICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJbml0aWFsIGZvY3VzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZCwgbm8gbmVlZCB0byBjb250aW51ZSBhbmQgcG90ZW50aWFsbHkgaGlqYWNrL2ZvY3VzIGZpZ2h0XG5cblxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLnRvb2tJbml0aWFsRm9jdXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gSWYgYW4gaXRlbSBzaG91bGQgYmUgZm9jdXNlZCwgZm9jdXMgaXQgKGlmIGl0IGV4aXN0cylcblxuXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsICYmIF90aGlzMi5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGZvY3VzZWRJdGVtID0gX3RoaXMyLnN0YXRlLm1lbnVJdGVtc1tfdGhpczIuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleF07XG5cbiAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIGZvY3VzZWRJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIE90aGVyd2lzZSwgaWYgdGhlIGJhY2sgYnV0dG9uIHBhbmVsIHRpdGxlIGlzIHByZXNlbnQsIGZvY3VzIGl0XG5cblxuICAgICAgICBpZiAoX3RoaXMyLmJhY2tCdXR0b24pIHtcbiAgICAgICAgICAvLyBGb2N1cyB0aGUgYmFjayBidXR0b24gZm9yIGJvdGggYGl0ZW1zYCBhbmQgYGNoaWxkcmVuYCBBUElzXG4gICAgICAgICAgX3RoaXMyLmJhY2tCdXR0b24uZm9jdXMoKTsgLy8gSWYgYGl0ZW1zYCwgZW5zdXJlIG91ciBmb2N1c2VkIGl0ZW0gaW5kZXggaXMgY29ycmVjdFxuXG5cbiAgICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IC8vIEZvY3VzIG9uIHRoZSBwYW5lbCBhcyBhIGxhc3QgcmVzb3J0LlxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5wYW5lbCAmJiAhX3RoaXMyLnBhbmVsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLnBhbmVsLmZvY3VzKCk7XG5cbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdG9va0luaXRpYWxGb2N1czogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShfLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUubWVudUl0ZW1zICE9PSB0aGlzLnN0YXRlLm1lbnVJdGVtcykge1xuICAgICAgICB0aGlzLmZpbmRNZW51SXRlbXMoKTtcbiAgICAgIH0gLy8gRm9jdXMgaXNuJ3QgYWx3YXlzIHJlYWR5IHRvIGJlIHRha2VuIG9uIG1vdW50LCBzbyB3ZSBuZWVkIHRvIGNhbGwgaXRcbiAgICAgIC8vIG9uIHVwZGF0ZSBhcyB3ZWxsIGp1c3QgaW4gY2FzZVxuXG5cbiAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElmIEV1aUNvbnRleHRNZW51IGlzIHVzZWQgd2l0aGluIGFuIEV1aVBvcG92ZXIsIHdlIG5lZWQgdG8gd2FpdCBmb3IgRXVpUG9wb3ZlciB0bzpcbiAgICAgIC8vIDEuIENvcnJlY3RseSBzZXQgaXRzIGByZXR1cm5Gb2N1c2AgdG8gdGhlIHRvZ2dsaW5nIGJ1dHRvbixcbiAgICAgIC8vICAgIHNvIGZvY3VzIGlzIGNvcnJlY3RseSByZXN0b3JlZCB0byB0aGUgcG9wb3ZlciB0b2dnbGUgb24gY2xvc2VcbiAgICAgIC8vIDIuIEZpbmlzaCBpdHMgcmVhY3QtZm9jdXMtb24gYGF1dG9Gb2N1c2AgYmVoYXZpb3IgYWZ0ZXIgdHJhbnNpdGlvbmluZyBpbixcbiAgICAgIC8vICAgIHNvIHRoZSBwYW5lbCBjYW4gaGFuZGxlIGl0cyBvd24gZm9jdXMgd2l0aG91dCBmb2N1cyBmaWdodGluZ1xuICAgICAgaWYgKHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cywge1xuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkaW5pdGlhbFBvcG92ZXJQO1xuXG4gICAgICAoX3RoaXMkaW5pdGlhbFBvcG92ZXJQID0gdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkgPT09IG51bGwgfHwgX3RoaXMkaW5pdGlhbFBvcG92ZXJQID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRpbml0aWFsUG9wb3ZlclAucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnJlY2xhaW1Qb3BvdmVyRm9jdXMpO1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZUhlaWdodFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVIZWlnaHQoKSB7XG4gICAgICB2YXIgY3VycmVudEhlaWdodCA9IHRoaXMucGFuZWwgPyB0aGlzLnBhbmVsLmNsaWVudEhlaWdodCA6IDA7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gY3VycmVudEhlaWdodCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZSkge1xuICAgICAgICAgIHRoaXMucHJvcHMub25IZWlnaHRDaGFuZ2UoY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBoZWlnaHQ6IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbml0aWFsUG9wb3ZlclBhcmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpIHtcbiAgICAgIHZhciBfcGFyZW50JHBhcmVudE5vZGU7XG5cbiAgICAgIC8vIElmIGB0cmFuc2l0aW9uVHlwZWAgZXhpc3RzLCB0aGF0IG1lYW5zIHdlJ3JlIG5hdmlnYXRpbmcgYmV0d2VlbiBwYW5lbHNcbiAgICAgIC8vIGFuZCB0aGUgaW5pdGlhbCBwb3BvdmVyIGhhcyBhbHJlYWR5IGxvYWRlZCwgc28gd2Ugc2hvdWxkbid0IG5lZWQgdGhpcyBsb2dpY1xuICAgICAgaWYgKHRoaXMucHJvcHMudHJhbnNpdGlvblR5cGUpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5wYW5lbCkgcmV0dXJuO1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFuZWwucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gICAgICB2YXIgaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPSBwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWlDb250ZXh0TWVudScpOyAvLyBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhbiBFdWlDb250ZXh0TWVudVBhbmVsIGRpcmVjdGx5IGluIGEgcG9wb3ZlciB3aXRob3V0XG4gICAgICAvLyBhbiBFdWlDb250ZXh0TWVudSwgc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0IHdoZW4gc2VhcmNoaW5nIHBhcmVudCBub2Rlc1xuXG4gICAgICB2YXIgcG9wb3ZlclBhcmVudCA9IGhhc0V1aUNvbnRleHRNZW51UGFyZW50ID8gcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9wYXJlbnQkcGFyZW50Tm9kZSA9IHBhcmVudC5wYXJlbnROb2RlKSA9PT0gbnVsbCB8fCBfcGFyZW50JHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wYXJlbnQkcGFyZW50Tm9kZS5wYXJlbnROb2RlIDogcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LnBhcmVudE5vZGU7XG4gICAgICBpZiAoIXBvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNQb3BvdmVyUGFyZW50ID0gISFwb3BvdmVyUGFyZW50LmRhdGFzZXQucG9wb3ZlclBhbmVsO1xuICAgICAgaWYgKCFoYXNQb3BvdmVyUGFyZW50KSByZXR1cm47XG4gICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50ID0gcG9wb3ZlclBhcmVudDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgb25DbG9zZSA9IF90aGlzJHByb3BzMi5vbkNsb3NlLFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMyLnRpdGxlLFxuICAgICAgICAgIG9uSGVpZ2h0Q2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uSGVpZ2h0Q2hhbmdlLFxuICAgICAgICAgIHRyYW5zaXRpb25UeXBlID0gX3RoaXMkcHJvcHMyLnRyYW5zaXRpb25UeXBlLFxuICAgICAgICAgIHRyYW5zaXRpb25EaXJlY3Rpb24gPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvbkRpcmVjdGlvbixcbiAgICAgICAgICBvblRyYW5zaXRpb25Db21wbGV0ZSA9IF90aGlzJHByb3BzMi5vblRyYW5zaXRpb25Db21wbGV0ZSxcbiAgICAgICAgICBvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSA9IF90aGlzJHByb3BzMi5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzMi5pdGVtcyxcbiAgICAgICAgICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzJHByb3BzMi5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCxcbiAgICAgICAgICBzaG93TmV4dFBhbmVsID0gX3RoaXMkcHJvcHMyLnNob3dOZXh0UGFuZWwsXG4gICAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd1ByZXZpb3VzUGFuZWwsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzMi5zaXplLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgcGFuZWxUaXRsZTtcblxuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIHZhciB0aXRsZUNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudVBhbmVsVGl0bGUnLCBzaXplICYmIHRpdGxlU2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdKTtcblxuICAgICAgICBpZiAoQm9vbGVhbihvbkNsb3NlKSkge1xuICAgICAgICAgIHBhbmVsVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGl0bGVDbGFzc2VzLFxuICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xvc2UsXG4gICAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgICAgICAgIF90aGlzMy5iYWNrQnV0dG9uID0gbm9kZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY29udGV4dE1lbnVQYW5lbFRpdGxlQnV0dG9uXCJcbiAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXRcIlxuICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJvd0xlZnRcIixcbiAgICAgICAgICAgIHNpemU6IFwibVwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pY29uXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X190ZXh0XCJcbiAgICAgICAgICB9LCB0aXRsZSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYW5lbFRpdGxlID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IHRpdGxlQ2xhc3Nlc1xuICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faXRlbUxheW91dFwiXG4gICAgICAgICAgfSwgdGl0bGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51UGFuZWwnLCBjbGFzc05hbWUsIHRyYW5zaXRpb25EaXJlY3Rpb24gJiYgdHJhbnNpdGlvblR5cGUgJiYgdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcFt0cmFuc2l0aW9uRGlyZWN0aW9uXSA/IHRyYW5zaXRpb25EaXJlY3Rpb25BbmRUeXBlVG9DbGFzc05hbWVNYXBbdHJhbnNpdGlvbkRpcmVjdGlvbl1bdHJhbnNpdGlvblR5cGVdIDogdW5kZWZpbmVkKTtcbiAgICAgIHZhciBjb250ZW50ID0gaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChNZW51SXRlbSkge1xuICAgICAgICB2YXIgY2xvbmVQcm9wcyA9IHt9O1xuXG4gICAgICAgIGlmIChzaXplKSB7XG4gICAgICAgICAgY2xvbmVQcm9wcy5zaXplID0gc2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBNZW51SXRlbS50eXBlID09PSBFdWlDb250ZXh0TWVudUl0ZW0gPyAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KE1lbnVJdGVtLCBjbG9uZVByb3BzKSA6IE1lbnVJdGVtO1xuICAgICAgfSkgOiBjaGlsZHJlbjtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLnBhbmVsUmVmLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd24sXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgb25BbmltYXRpb25FbmQ6IHRoaXMub25UcmFuc2l0aW9uQ29tcGxldGVcbiAgICAgIH0sIHJlc3QpLCBwYW5lbFRpdGxlLCBfX19FbW90aW9uSlNYKEV1aVJlc2l6ZU9ic2VydmVyLCB7XG4gICAgICAgIG9uUmVzaXplOiBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnVwZGF0ZUhlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICByZWY6IHJlc2l6ZVJlZlxuICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgbmVlZHNVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7fTsgLy8gQ2xlYXIgcmVmcyB0byBtZW51SXRlbXMgaWYgd2UncmUgZ2V0dGluZyBuZXcgb25lcy5cblxuICAgICAgaWYgKG5leHRQcm9wcy5pdGVtcyAhPT0gcHJldlN0YXRlLnByZXZQcm9wcy5pdGVtcykge1xuICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgIG5leHRTdGF0ZS5tZW51SXRlbXMgPSBbXTtcbiAgICAgICAgbmV4dFN0YXRlLnByZXZQcm9wcyA9IHtcbiAgICAgICAgICBpdGVtczogbmV4dFByb3BzLml0ZW1zXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkc1VwZGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29udGV4dE1lbnVQYW5lbDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNvbnRleHRNZW51UGFuZWwsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXRlbXM6IFtdXG59KTtcblxuRXVpQ29udGV4dE1lbnVQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkKSxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSGVpZ2h0Q2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25UcmFuc2l0aW9uQ29tcGxldGU6IFByb3BUeXBlcy5mdW5jLFxuICBvblVzZUtleWJvYXJkVG9OYXZpZ2F0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dOZXh0UGFuZWw6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93UHJldmlvdXNQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgdHJhbnNpdGlvbkRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcIm5leHRcIiwgXCJwcmV2aW91c1wiXSksXG4gIHRyYW5zaXRpb25UeXBlOiBQcm9wVHlwZXMub25lT2YoW1wiaW5cIiwgXCJvdXRcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFsdGVycyB0aGUgc2l6ZSBvZiB0aGUgaXRlbXMgYW5kIHRoZSB0aXRsZVxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJoYXNQYW5lbFwiLCBcImljb25cIiwgXCJidXR0b25SZWZcIiwgXCJkaXNhYmxlZFwiLCBcImxheW91dEFsaWduXCIsIFwidG9vbFRpcFRpdGxlXCIsIFwidG9vbFRpcENvbnRlbnRcIiwgXCJ0b29sVGlwUG9zaXRpb25cIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUNvbnRleHRNZW51SXRlbS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xudmFyIGxheW91dEFsaWduVG9DbGFzc05hbWVzID0ge1xuICBjZW50ZXI6IG51bGwsXG4gIHRvcDogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS10b3AnLFxuICBib3R0b206ICdldWlDb250ZXh0TWVudV9faXRlbUxheW91dC0tYm90dG9tJ1xufTtcbmV4cG9ydCB2YXIgTEFZT1VUX0FMSUdOID0ga2V5c09mKGxheW91dEFsaWduVG9DbGFzc05hbWVzKTtcbmV4cG9ydCB2YXIgRXVpQ29udGV4dE1lbnVJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb250ZXh0TWVudUl0ZW0sIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29udGV4dE1lbnVJdGVtKTtcblxuICBmdW5jdGlvbiBFdWlDb250ZXh0TWVudUl0ZW0oKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbnRleHRNZW51SXRlbSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ29udGV4dE1lbnVJdGVtLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBoYXNQYW5lbCA9IF90aGlzJHByb3BzLmhhc1BhbmVsLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wcy5pY29uLFxuICAgICAgICAgIGJ1dHRvblJlZiA9IF90aGlzJHByb3BzLmJ1dHRvblJlZixcbiAgICAgICAgICBfZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRsYXlvdXRBbGkgPSBfdGhpcyRwcm9wcy5sYXlvdXRBbGlnbixcbiAgICAgICAgICBsYXlvdXRBbGlnbiA9IF90aGlzJHByb3BzJGxheW91dEFsaSA9PT0gdm9pZCAwID8gJ2NlbnRlcicgOiBfdGhpcyRwcm9wcyRsYXlvdXRBbGksXG4gICAgICAgICAgdG9vbFRpcFRpdGxlID0gX3RoaXMkcHJvcHMudG9vbFRpcFRpdGxlLFxuICAgICAgICAgIHRvb2xUaXBDb250ZW50ID0gX3RoaXMkcHJvcHMudG9vbFRpcENvbnRlbnQsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkdG9vbFRpcFBvID0gX3RoaXMkcHJvcHMudG9vbFRpcFBvc2l0aW9uLFxuICAgICAgICAgIHRvb2xUaXBQb3NpdGlvbiA9IF90aGlzJHByb3BzJHRvb2xUaXBQbyA9PT0gdm9pZCAwID8gJ3JpZ2h0JyA6IF90aGlzJHByb3BzJHRvb2xUaXBQbyxcbiAgICAgICAgICBocmVmID0gX3RoaXMkcHJvcHMuaHJlZixcbiAgICAgICAgICB0YXJnZXQgPSBfdGhpcyRwcm9wcy50YXJnZXQsXG4gICAgICAgICAgcmVsID0gX3RoaXMkcHJvcHMucmVsLFxuICAgICAgICAgIHNpemUgPSBfdGhpcyRwcm9wcy5zaXplLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBpY29uSW5zdGFuY2U7XG4gICAgICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuXG4gICAgICBpZiAoaWNvbikge1xuICAgICAgICBzd2l0Y2ggKF90eXBlb2YoaWNvbikpIHtcbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgaWNvbkluc3RhbmNlID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICAgIHR5cGU6IGljb24sXG4gICAgICAgICAgICAgIHNpemU6IFwibVwiLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2ljb25cIixcbiAgICAgICAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBBc3N1bWUgaXQncyBhbHJlYWR5IGFuIGluc3RhbmNlIG9mIGFuIGljb24uXG4gICAgICAgICAgICBpY29uSW5zdGFuY2UgPSAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZXVpQ29udGV4dE1lbnVfX2ljb24nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgYXJyb3c7XG5cbiAgICAgIGlmIChoYXNQYW5lbCkge1xuICAgICAgICBhcnJvdyA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgIHR5cGU6IFwiYXJyb3dSaWdodFwiLFxuICAgICAgICAgIHNpemU6IFwibVwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9fYXJyb3dcIlxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudUl0ZW0nLCBzaXplICYmIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb250ZXh0TWVudUl0ZW0taXNEaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICB9KTtcbiAgICAgIHZhciBsYXlvdXRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQnLCBsYXlvdXRBbGlnblRvQ2xhc3NOYW1lc1tsYXlvdXRBbGlnbl0pO1xuXG4gICAgICB2YXIgYnV0dG9uSW5uZXIgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogbGF5b3V0Q2xhc3Nlc1xuICAgICAgfSwgaWNvbkluc3RhbmNlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudUl0ZW1fX3RleHRcIlxuICAgICAgfSwgY2hpbGRyZW4pLCBhcnJvdyk7XG5cbiAgICAgIHZhciBidXR0b247IC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAgICAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG4gICAgICBpZiAoaHJlZiAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICByZWw6IHJlbFxuICAgICAgICB9KTtcbiAgICAgICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgICAgIH0sIHJlc3QpLCBidXR0b25Jbm5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgcmVmOiBidXR0b25SZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbklubmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvb2xUaXBDb250ZW50KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgICB0aXRsZTogdG9vbFRpcFRpdGxlID8gdG9vbFRpcFRpdGxlIDogbnVsbCxcbiAgICAgICAgICBjb250ZW50OiB0b29sVGlwQ29udGVudCxcbiAgICAgICAgICBhbmNob3JDbGFzc05hbWU6IFwiZXVpLWRpc3BsYXlCbG9ja1wiLFxuICAgICAgICAgIHBvc2l0aW9uOiB0b29sVGlwUG9zaXRpb25cbiAgICAgICAgfSwgYnV0dG9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBidXR0b247XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbnRleHRNZW51SXRlbTtcbn0oQ29tcG9uZW50KTtcbkV1aUNvbnRleHRNZW51SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgaGFzUGFuZWw6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogUmVxdWlyZWQgaWYgdXNpbmcgYSB0b29sdGlwLiBBZGQgYW4gb3B0aW9uYWwgdG9vbHRpcCBvbiBob3ZlclxuICAgICAqL1xuICB0b29sVGlwQ29udGVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogT3B0aW9uYWwgdGl0bGUgZm9yIHRoZSB0b29sdGlwXG4gICAgICovXG4gIHRvb2xUaXBUaXRsZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogRGljdGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLlxuICAgICAqL1xuICB0b29sVGlwUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBIb3cgdG8gYWxpZ24gaWNvbiB3aXRoIGNvbnRlbnQgb2YgYnV0dG9uXG4gICAgICovXG4gIGxheW91dEFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wiY2VudGVyXCIsIFwidG9wXCIsIFwiYm90dG9tXCJdKSxcblxuICAvKipcbiAgICAgKiBSZWR1Y2UgdGhlIHNpemUgdG8gYHNgIHdoZW4gaW4gbmVlZCBvZiBhIG1vcmUgY29tcHJlc3NlZCBtZW51XG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCIsIFwibWFyZ2luXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyB9IGZyb20gJy4vaG9yaXpvbnRhbF9ydWxlLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsnZnVsbCcsICdoYWxmJywgJ3F1YXJ0ZXInXTtcbmV4cG9ydCB2YXIgTUFSR0lOUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbnZhciBtYXJnaW5Ub0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgeHM6ICdtYXJnaW5YU21hbGwnLFxuICBzOiAnbWFyZ2luU21hbGwnLFxuICBtOiAnbWFyZ2luTWVkaXVtJyxcbiAgbDogJ21hcmdpbkxhcmdlJyxcbiAgeGw6ICdtYXJnaW5YTGFyZ2UnLFxuICB4eGw6ICdtYXJnaW5YWExhcmdlJ1xufTtcbmV4cG9ydCB2YXIgRXVpSG9yaXpvbnRhbFJ1bGUgPSBmdW5jdGlvbiBFdWlIb3Jpem9udGFsUnVsZShfcmVmKSB7XG4gIHZhciBfY2xhc3NOYW1lcztcblxuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnZnVsbCcgOiBfcmVmJHNpemUsXG4gICAgICBfcmVmJG1hcmdpbiA9IF9yZWYubWFyZ2luLFxuICAgICAgbWFyZ2luID0gX3JlZiRtYXJnaW4gPT09IHZvaWQgMCA/ICdsJyA6IF9yZWYkbWFyZ2luLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSG9yaXpvbnRhbFJ1bGUnLCAoX2NsYXNzTmFtZXMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9jbGFzc05hbWVzLCBcImV1aUhvcml6b250YWxSdWxlLS1cIi5jb25jYXQoc2l6ZSksIHNpemUpLCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzTmFtZXMsIFwiZXVpSG9yaXpvbnRhbFJ1bGUtLVwiLmNvbmNhdChtYXJnaW5Ub0NsYXNzTmFtZU1hcFttYXJnaW5dKSwgbWFyZ2luICYmIG1hcmdpbiAhPT0gJ25vbmUnKSwgX2NsYXNzTmFtZXMpLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIb3Jpem9udGFsUnVsZSwgc3R5bGVzW3NpemVdLCBzdHlsZXNbbWFyZ2luXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiaHJcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSk7XG59O1xuRXVpSG9yaXpvbnRhbFJ1bGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgSFIuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIG1hcmdpbjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMgPSBmdW5jdGlvbiBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyhfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpSG9yaXpvbnRhbFJ1bGU6IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXI6bm9uZTtcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4pLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBldWlUaGVtZS5ib3JkZXIuY29sb3IsIFwiO2ZsZXgtc2hyaW5rOjA7ZmxleC1ncm93OjA7O2xhYmVsOmV1aUhvcml6b250YWxSdWxlO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIGZ1bGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbDtcIiksXG4gICAgaGFsZjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOmhhbGY7XCIpLFxuICAgIHF1YXJ0ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMjUlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsICdhdXRvJyksIFwiOztsYWJlbDpxdWFydGVyO1wiKSxcbiAgICAvLyBNYXJnaW5zXG4gICAgbm9uZTogJycsXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLm0sIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUueHhsLCBcIjs7bGFiZWw6eHhsO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImxhYmVsXCIsIFwiaWRcIiwgXCJjaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJjb21wcmVzc2VkXCIsIFwib25DaGFuZ2VcIiwgXCJjbGFzc05hbWVcIiwgXCJzaG93TGFiZWxcIiwgXCJ0eXBlXCIsIFwibGFiZWxQcm9wc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTd2l0Y2ggPSBmdW5jdGlvbiBFdWlTd2l0Y2goX3JlZikge1xuICB2YXIgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgaWQgPSBfcmVmLmlkLFxuICAgICAgY2hlY2tlZCA9IF9yZWYuY2hlY2tlZCxcbiAgICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGNvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQsXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2hvd0xhYmVsID0gX3JlZi5zaG93TGFiZWwsXG4gICAgICBzaG93TGFiZWwgPSBfcmVmJHNob3dMYWJlbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc2hvd0xhYmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBsYWJlbFByb3BzID0gX3JlZi5sYWJlbFByb3BzLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzd2l0Y2hJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgY29uZGl0aW9uYWxJZDogaWRcbiAgfSk7XG4gIHZhciBsYWJlbElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuaWRcbiAgfSk7XG4gIHZhciBvbkNsaWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXZlbnQgPSBlO1xuICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gIWNoZWNrZWQ7XG4gICAgb25DaGFuZ2UoZXZlbnQpO1xuICB9LCBbY2hlY2tlZCwgZGlzYWJsZWQsIG9uQ2hhbmdlXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3dpdGNoJywge1xuICAgICdldWlTd2l0Y2gtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2hfX2xhYmVsJywgbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmNsYXNzTmFtZSk7XG5cbiAgaWYgKHNob3dMYWJlbCA9PT0gZmFsc2UgJiYgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgIGNvbnNvbGUud2FybignRXVpU3dpdGNoIGBsYWJlbGAgbXVzdCBiZSBhIHN0cmluZyB3aGVuIGBzaG93TGFiZWxgIGlzIGZhbHNlLicpO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBpZDogc3dpdGNoSWQsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogY2hlY2tlZCB8fCBmYWxzZSxcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19idXR0b25cIixcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgXCJhcmlhLWxhYmVsXCI6IHNob3dMYWJlbCA/IHVuZGVmaW5lZCA6IGxhYmVsLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNob3dMYWJlbCA/IGxhYmVsSWQgOiB1bmRlZmluZWRcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19ib2R5XCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX3RodW1iXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX190cmFja1wiXG4gIH0sICFjb21wcmVzc2VkICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiY3Jvc3NcIixcbiAgICBzaXplOiBcIm1cIixcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19pY29uXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiY2hlY2tcIixcbiAgICBzaXplOiBcIm1cIixcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX19pY29uIGV1aVN3aXRjaF9faWNvbi0tY2hlY2tlZFwiXG4gIH0pKSkpKSwgc2hvd0xhYmVsICYmIC8vIDxidXR0b24+ICsgPGxhYmVsPiBoYXMgcG9vciBzY3JlZW4gcmVhZGVyIHN1cHBvcnQuXG4gIC8vIENsaWNrIGhhbmRsZXIgYWRkZWQgdG8gc2ltdWxhdGUgbmF0dXJhbCwgc2Vjb25kYXJ5IDxsYWJlbD4gaW50ZXJhY3Rpdml0eS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zXG4gIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHt9LCBsYWJlbFByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzZXMsXG4gICAgaWQ6IGxhYmVsSWQsXG4gICAgb25DbGljazogb25DbGlja1xuICB9KSwgbGFiZWwpKTtcbn07XG5FdWlTd2l0Y2gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgcmVuZGVyIHRoZSB0ZXh0IGxhYmVsXG4gICAgICAgKi9cbiAgc2hvd0xhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIE11c3QgYmUgYSBzdHJpbmcgaWYgYHNob3dMYWJlbGAgcHJvcCBpcyBmYWxzZVxuICAgICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcInN1Ym1pdFwiLCBcInJlc2V0XCIsIFwiYnV0dG9uXCJdKSxcblxuICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIGxhYmVsJ3MgPHNwYW4vPlxuICAgICAgICovXG4gIGxhYmVsUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KVxufTsiLCAiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCAidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCAiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoZS5pbmNsdWRlcyhuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwgIi8vIEBmbG93XG5cbi8vIEFuaW1hdGlvbiBmcmFtZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRUaW1lb3V0LlxuLy8gSW5zcGlyZWQgYnkgSm9lIExhbWJlcnQsIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2pvZWxhbWJlcnQvMTAwMjExNiNmaWxlLXJlcXVlc3R0aW1lb3V0LWpzXG5cbmNvbnN0IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID1cbiAgdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vd1xuICA/ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpXG4gIDogKCkgPT4gRGF0ZS5ub3coKTtcblxuZXhwb3J0IHR5cGUgVGltZW91dElEID0ge3xcbiAgaWQ6IEFuaW1hdGlvbkZyYW1lSUQsXG58fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFRpbWVvdXQodGltZW91dElEOiBUaW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlcik6IFRpbWVvdXRJRCB7XG4gIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG5cbiAgZnVuY3Rpb24gdGljaygpIHtcbiAgICBpZiAobm93KCkgLSBzdGFydCA+PSBkZWxheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dElELmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRpbWVvdXRJRDogVGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayksXG4gIH07XG5cbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cbiIsICIvLyBAZmxvd1xuXG5sZXQgc2l6ZTogbnVtYmVyID0gLTE7XG5cbi8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyIHtcbiAgaWYgKHNpemUgPT09IC0xIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkuYXBwZW5kQ2hpbGQoZGl2KTtcblxuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgdHlwZSBSVExPZmZzZXRUeXBlID1cbiAgfCAnbmVnYXRpdmUnXG4gIHwgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnXG4gIHwgJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG5cbmxldCBjYWNoZWRSVExSZXN1bHQ6IFJUTE9mZnNldFR5cGUgfCBudWxsID0gbnVsbDtcblxuLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0UlRMT2Zmc2V0VHlwZShyZWNhbGN1bGF0ZT86IGJvb2xlYW4gPSBmYWxzZSk6IFJUTE9mZnNldFR5cGUge1xuICBpZiAoY2FjaGVkUlRMUmVzdWx0ID09PSBudWxsIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgY29uc3Qgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcblxuICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcblxuICAgIG91dGVyRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcblxuICAgIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICBkYXRhOiBULFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHJvd0luZGV4OiBudW1iZXIsXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbmV4cG9ydCB0eXBlIFJlbmRlckNvbXBvbmVudDxUPiA9IFJlYWN0JENvbXBvbmVudFR5cGU8XG4gICRTaGFwZTxSZW5kZXJDb21wb25lbnRQcm9wczxUPj5cbj47XG5cbnR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxudHlwZSBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayA9ICh7XG4gIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXIsXG59KSA9PiB2b2lkO1xudHlwZSBPblNjcm9sbENhbGxiYWNrID0gKHtcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG59KSA9PiB2b2lkO1xuXG50eXBlIFNjcm9sbEV2ZW50ID0gU3ludGhldGljRXZlbnQ8SFRNTERpdkVsZW1lbnQ+O1xudHlwZSBJdGVtU3R5bGVDYWNoZSA9IHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH07XG5cbnR5cGUgT3V0ZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBjbGFzc05hbWU6IHN0cmluZyB8IHZvaWQsXG4gIG9uU2Nyb2xsOiBTY3JvbGxFdmVudCA9PiB2b2lkLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG50eXBlIElubmVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxuZXhwb3J0IHR5cGUgUHJvcHM8VD4gPSB7fFxuICBjaGlsZHJlbjogUmVuZGVyQ29tcG9uZW50PFQ+LFxuICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gIGNvbHVtbkNvdW50OiBudW1iZXIsXG4gIGNvbHVtbldpZHRoOiBpdGVtU2l6ZSxcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gIGhlaWdodDogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsTGVmdD86IG51bWJlcixcbiAgaW5pdGlhbFNjcm9sbFRvcD86IG51bWJlcixcbiAgaW5uZXJSZWY/OiBhbnksXG4gIGlubmVyRWxlbWVudFR5cGU/OiBzdHJpbmcgfCBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxJbm5lclByb3BzLCBhbnk+LFxuICBpbm5lclRhZ05hbWU/OiBzdHJpbmcsIC8vIGRlcHJlY2F0ZWRcbiAgaXRlbURhdGE6IFQsXG4gIGl0ZW1LZXk/OiAocGFyYW1zOiB7fFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgZGF0YTogVCxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICB8fSkgPT4gYW55LFxuICBvbkl0ZW1zUmVuZGVyZWQ/OiBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayxcbiAgb25TY3JvbGw/OiBPblNjcm9sbENhbGxiYWNrLFxuICBvdXRlclJlZj86IGFueSxcbiAgb3V0ZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PE91dGVyUHJvcHMsIGFueT4sXG4gIG91dGVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvbHVtbkNvdW50PzogbnVtYmVyLFxuICBvdmVyc2NhbkNvbHVtbnNDb3VudD86IG51bWJlciwgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuUm93Q291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93c0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIHJvd0NvdW50OiBudW1iZXIsXG4gIHJvd0hlaWdodDogaXRlbVNpemUsXG4gIHN0eWxlPzogT2JqZWN0LFxuICB1c2VJc1Njcm9sbGluZzogYm9vbGVhbixcbiAgd2lkdGg6IG51bWJlcixcbnx9O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgaW5zdGFuY2U6IGFueSxcbiAgaXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxuICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxufH07XG5cbnR5cGUgZ2V0SXRlbU9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIGdldEl0ZW1TaXplID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZVByb3BzOiBhbnkpID0+IG51bWJlcjtcbnR5cGUgR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55LFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBJbml0SW5zdGFuY2VQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSkgPT4gYW55O1xudHlwZSBWYWxpZGF0ZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+KSA9PiB2b2lkO1xuXG5jb25zdCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbmNvbnN0IGRlZmF1bHRJdGVtS2V5ID0gKHsgY29sdW1uSW5kZXgsIGRhdGEsIHJvd0luZGV4IH0pID0+XG4gIGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbi8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxubGV0IGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBudWxsO1xubGV0IGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldCxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgZ2V0Q29sdW1uV2lkdGgsXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgZ2V0Um93SGVpZ2h0LFxuICBnZXRSb3dPZmZzZXQsXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICB2YWxpZGF0ZVByb3BzLFxufToge3xcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aDogZ2V0SXRlbVNpemUsXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldFJvd09mZnNldDogZ2V0SXRlbU9mZnNldCxcbiAgZ2V0Um93SGVpZ2h0OiBnZXRJdGVtU2l6ZSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIEdyaWQ8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG4gICAgX291dGVyUmVmOiA/SFRNTERpdkVsZW1lbnQ7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICB1c2VJc1Njcm9sbGluZzogZmFsc2UsXG4gICAgfTtcblxuICAgIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlOiB0aGlzLFxuICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsTGVmdDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVG9wOlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wXG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgfTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8VD4pIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgbmV4dFByb3BzOiBQcm9wczxUPixcbiAgICAgIHByZXZTdGF0ZTogU3RhdGVcbiAgICApOiAkU2hhcGU8U3RhdGU+IHwgbnVsbCB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbFRvKHtcbiAgICAgIHNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3AsXG4gICAgfToge1xuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgfSk6IHZvaWQge1xuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiZcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0l0ZW0oe1xuICAgICAgYWxpZ24gPSAnYXV0bycsXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgIH06IHtcbiAgICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgICAgY29sdW1uSW5kZXg/OiBudW1iZXIsXG4gICAgICByb3dJbmRleD86IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBjb25zdCB7IGNvbHVtbkNvdW50LCBoZWlnaHQsIHJvd0NvdW50LCB3aWR0aCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsXG4gICAgICAvLyB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxiYXJTaXplID1cbiAgICAgICAgZXN0aW1hdGVkVG90YWxXaWR0aCA+IHdpZHRoID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuXG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDpcbiAgICAgICAgICBjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhclNpemVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6XG4gICAgICAgICAgcm93SW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICBhbGlnbixcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbFRvcCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBpbml0aWFsU2Nyb2xsTGVmdCwgaW5pdGlhbFNjcm9sbFRvcCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbURhdGEsXG4gICAgICAgIGl0ZW1LZXkgPSBkZWZhdWx0SXRlbUtleSxcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgb3V0ZXJUYWdOYW1lLFxuICAgICAgICByb3dDb3VudCxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3QgW1xuICAgICAgICBjb2x1bW5TdGFydEluZGV4LFxuICAgICAgICBjb2x1bW5TdG9wSW5kZXgsXG4gICAgICBdID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgIGNvbnN0IFtyb3dTdGFydEluZGV4LCByb3dTdG9wSW5kZXhdID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk7XG5cbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgbGV0IHJvd0luZGV4ID0gcm93U3RhcnRJbmRleDtcbiAgICAgICAgICByb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7XG4gICAgICAgICAgcm93SW5kZXgrK1xuICAgICAgICApIHtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoeyBjb2x1bW5JbmRleCwgZGF0YTogaXRlbURhdGEsIHJvd0luZGV4IH0pLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUocm93SW5kZXgsIGNvbHVtbkluZGV4KSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogZXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZDogKFxuICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICApID0+IHZvaWQ7XG4gICAgX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogbnVtYmVyXG4gICAgICApID0+XG4gICAgICAgICgodGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQ6IGFueSk6IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrKSh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXgsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsT25TY3JvbGw6IChcbiAgICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uU2Nyb2xsOiBhbnkpOiBPblNjcm9sbENhbGxiYWNrKSh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbkNvdW50LCBvbkl0ZW1zUmVuZGVyZWQsIG9uU2Nyb2xsLCByb3dDb3VudCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICBfZ2V0SXRlbVN0eWxlOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gT2JqZWN0O1xuICAgIF9nZXRJdGVtU3R5bGUgPSAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IE9iamVjdCA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbldpZHRoLCBkaXJlY3Rpb24sIHJvd0hlaWdodCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgaXRlbVN0eWxlQ2FjaGUgPSB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBjb2x1bW5XaWR0aCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24sXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgcm93SGVpZ2h0XG4gICAgICApO1xuXG4gICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH06JHtjb2x1bW5JbmRleH1gO1xuXG4gICAgICBsZXQgc3R5bGU7XG4gICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRDb2x1bW5PZmZzZXQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0LFxuICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6IGdldFJvd09mZnNldCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgaGVpZ2h0OiBnZXRSb3dIZWlnaHQodGhpcy5wcm9wcywgcm93SW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIGlzU2Nyb2xsaW5nLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQ6IG51bWJlciA9XG4gICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQgfHwgb3ZlcnNjYW5Db2x1bW5zQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvdW50LFxuICAgICAgICBvdmVyc2NhblJvd0NvdW50LFxuICAgICAgICBvdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuICAgICAgY29uc3Qgb3ZlcnNjYW5Gb3J3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfb25TY3JvbGwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBzY3JvbGxXaWR0aCxcbiAgICAgIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiZcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgbGV0IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogY2FsY3VsYXRlZFNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX291dGVyUmVmU2V0dGVyID0gKHJlZjogYW55KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IG91dGVyUmVmIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICB0aGlzLl9vdXRlclJlZiA9ICgocmVmOiBhbnkpOiBIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIG91dGVyUmVmICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpXG4gICAgICApIHtcbiAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsXG4gICAgICAgIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzU2Nyb2xsaW5nOiBmYWxzZSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgaW5uZXJUYWdOYW1lLFxuICAgIG91dGVyVGFnTmFtZSxcbiAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICBvdmVyc2NhbkNvdW50LFxuICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgIHdpZHRoLFxuICB9OiBQcm9wczxhbnk+LFxuICB7IGluc3RhbmNlIH06IFN0YXRlXG4pOiB2b2lkID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db3VudCBwcm9wIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCAmJlxuICAgICAgICAhZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuaGFzKGluc3RhbmNlKVxuICAgICAgKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgYFwiJHtjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIC4uLlByb3BzPGFueT4sXG58fTtcblxudHlwZSBpdGVtU2l6ZUdldHRlciA9IChpbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG50eXBlIEl0ZW1UeXBlID0gJ2NvbHVtbicgfCAncm93JztcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEl0ZW1NZXRhZGF0YU1hcCA9IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfTtcbnR5cGUgSW5zdGFuY2VQcm9wcyA9IHt8XG4gIGNvbHVtbk1ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG4gIGVzdGltYXRlZENvbHVtbldpZHRoOiBudW1iZXIsXG4gIGVzdGltYXRlZFJvd0hlaWdodDogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRSb3dJbmRleDogbnVtYmVyLFxuICByb3dNZXRhZGF0YU1hcDogSXRlbU1ldGFkYXRhTWFwLFxufH07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gKFxuICB7IHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gIHsgcm93TWV0YWRhdGFNYXAsIGVzdGltYXRlZFJvd0hlaWdodCwgbGFzdE1lYXN1cmVkUm93SW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7XG5cbiAgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IHJvd0NvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSByb3dDb3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZFJvd0hlaWdodDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSAoXG4gIHsgY29sdW1uQ291bnQgfTogUHJvcHM8YW55PixcbiAge1xuICAgIGNvbHVtbk1ldGFkYXRhTWFwLFxuICAgIGVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4LFxuICB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gY29sdW1uTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG5cbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbik6IEl0ZW1NZXRhZGF0YSA9PiB7XG4gIGxldCBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSAoKHByb3BzLmNvbHVtbldpZHRoOiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSAoKHByb3BzLnJvd0hlaWdodDogYW55KTogaXRlbVNpemVHZXR0ZXIpO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICBsZXQgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuXG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGxldCBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXgsXG4gICAgICAwLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIG1pZGRsZSxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXRcbiAgKSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgaXRlbVR5cGUsXG4gICAgcHJvcHMsXG4gICAgaW5zdGFuY2VQcm9wcyxcbiAgICBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksXG4gICAgTWF0aC5mbG9vcihpbmRleCAvIDIpLFxuICAgIG9mZnNldFxuICApO1xufTtcblxuY29uc3QgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBzaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMud2lkdGggOiBwcm9wcy5oZWlnaHQ7XG4gIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTtcblxuICAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPVxuICAgIGl0ZW1UeXBlID09PSAnY29sdW1uJ1xuICAgICAgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKVxuICAgICAgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICApO1xuICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplXG4gICk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICBjYXNlICdlbmQnOlxuICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cbiAgfVxufTtcblxuY29uc3QgVmFyaWFibGVTaXplR3JpZCA9IGNyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KSxcblxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBjb2x1bW5Db3VudCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgJ2NvbHVtbicsXG4gICAgICBwcm9wcyxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxMZWZ0ICsgd2lkdGg7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGdldENvbHVtbldpZHRoOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgJ3JvdycsXG4gICAgICBwcm9wcyxcbiAgICAgIGluZGV4LFxuICAgICAgYWxpZ24sXG4gICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICksXG5cbiAgZ2V0Um93T2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldFJvd0hlaWdodDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKSxcblxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IHJvd0NvdW50LCBoZWlnaHQgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgJ3JvdycsXG4gICAgICBwcm9wcyxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3Qge1xuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcblxuICAgIGNvbnN0IGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9LFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyQ29sdW1uSW5kZXggPSAoXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoeyBjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IChcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSAoe1xuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZSxcbiAgICB9OiB7XG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IGJvb2xlYW4sXG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IE1hdGgubWluKFxuICAgICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXggLSAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCxcbiAgICAgICAgICByb3dJbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgY29sdW1uV2lkdGgsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke1xuICAgICAgICAgICAgICBjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aFxuICAgICAgICAgICAgfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7cm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVmFyaWFibGVTaXplR3JpZDtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2FuY2VsVGltZW91dCwgcmVxdWVzdFRpbWVvdXQgfSBmcm9tICcuL3RpbWVyJztcbmltcG9ydCB7IGdldFNjcm9sbGJhclNpemUsIGdldFJUTE9mZnNldFR5cGUgfSBmcm9tICcuL2RvbUhlbHBlcnMnO1xuXG5pbXBvcnQgdHlwZSB7IFRpbWVvdXRJRCB9IGZyb20gJy4vdGltZXInO1xuXG5leHBvcnQgdHlwZSBTY3JvbGxUb0FsaWduID0gJ2F1dG8nIHwgJ3NtYXJ0JyB8ICdjZW50ZXInIHwgJ3N0YXJ0JyB8ICdlbmQnO1xuXG50eXBlIGl0ZW1TaXplID0gbnVtYmVyIHwgKChpbmRleDogbnVtYmVyKSA9PiBudW1iZXIpO1xuLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9ucyBcImhvcml6b250YWxcIiBhbmQgXCJ2ZXJ0aWNhbFwiXG50eXBlIERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCcgfCAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xudHlwZSBMYXlvdXQgPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG50eXBlIFJlbmRlckNvbXBvbmVudFByb3BzPFQ+ID0ge3xcbiAgZGF0YTogVCxcbiAgaW5kZXg6IG51bWJlcixcbiAgaXNTY3JvbGxpbmc/OiBib29sZWFuLFxuICBzdHlsZTogT2JqZWN0LFxufH07XG50eXBlIFJlbmRlckNvbXBvbmVudDxUPiA9IFJlYWN0JENvbXBvbmVudFR5cGU8JFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+Pj47XG5cbnR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxudHlwZSBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayA9ICh7XG4gIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXIsXG59KSA9PiB2b2lkO1xudHlwZSBvblNjcm9sbENhbGxiYWNrID0gKHtcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG59KSA9PiB2b2lkO1xuXG50eXBlIFNjcm9sbEV2ZW50ID0gU3ludGhldGljRXZlbnQ8SFRNTERpdkVsZW1lbnQ+O1xudHlwZSBJdGVtU3R5bGVDYWNoZSA9IHsgW2luZGV4OiBudW1iZXJdOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gIGhlaWdodDogbnVtYmVyIHwgc3RyaW5nLFxuICBpbml0aWFsU2Nyb2xsT2Zmc2V0PzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtQ291bnQ6IG51bWJlcixcbiAgaXRlbURhdGE6IFQsXG4gIGl0ZW1LZXk/OiAoaW5kZXg6IG51bWJlciwgZGF0YTogVCkgPT4gYW55LFxuICBpdGVtU2l6ZTogaXRlbVNpemUsXG4gIGxheW91dDogTGF5b3V0LFxuICBvbkl0ZW1zUmVuZGVyZWQ/OiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayxcbiAgb25TY3JvbGw/OiBvblNjcm9sbENhbGxiYWNrLFxuICBvdXRlclJlZj86IGFueSxcbiAgb3V0ZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PE91dGVyUHJvcHMsIGFueT4sXG4gIG91dGVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvdW50OiBudW1iZXIsXG4gIHN0eWxlPzogT2JqZWN0LFxuICB1c2VJc1Njcm9sbGluZzogYm9vbGVhbixcbiAgd2lkdGg6IG51bWJlciB8IHN0cmluZyxcbnx9O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgaW5zdGFuY2U6IGFueSxcbiAgaXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIHNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxufH07XG5cbnR5cGUgR2V0SXRlbU9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldEl0ZW1TaXplID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0RXN0aW1hdGVkVG90YWxTaXplID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZVByb3BzOiBhbnkpID0+IG51bWJlcjtcbnR5cGUgR2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoaW5kZXg6IG51bWJlciwgZGF0YTogYW55KSA9PiBpbmRleDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBudWxsO1xubGV0IGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSBuZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEl0ZW1TaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRJdGVtT2Zmc2V0OiBHZXRJdGVtT2Zmc2V0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IEdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemU6IEdldEl0ZW1TaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzOiBJbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogYm9vbGVhbixcbiAgdmFsaWRhdGVQcm9wczogVmFsaWRhdGVQcm9wcyxcbnx9KSB7XG4gIHJldHVybiBjbGFzcyBMaXN0PFQ+IGV4dGVuZHMgUHVyZUNvbXBvbmVudDxQcm9wczxUPiwgU3RhdGU+IHtcbiAgICBfaW5zdGFuY2VQcm9wczogYW55ID0gaW5pdEluc3RhbmNlUHJvcHModGhpcy5wcm9wcywgdGhpcyk7XG4gICAgX291dGVyUmVmOiA/SFRNTERpdkVsZW1lbnQ7XG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQ6IFRpbWVvdXRJRCB8IG51bGwgPSBudWxsO1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBzY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgIHNjcm9sbE9mZnNldDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldFxuICAgICAgICAgIDogMCxcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8VD4pIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgbmV4dFByb3BzOiBQcm9wczxUPixcbiAgICAgIHByZXZTdGF0ZTogU3RhdGVcbiAgICApOiAkU2hhcGU8U3RhdGU+IHwgbnVsbCB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbFRvKHNjcm9sbE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbShpbmRleDogbnVtYmVyLCBhbGlnbjogU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyk6IHZvaWQge1xuICAgICAgY29uc3QgeyBpdGVtQ291bnQsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cbiAgICAgIGxldCBzY3JvbGxiYXJTaXplID0gMDtcbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPVxuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICAgPyBnZXRTY3JvbGxiYXJTaXplKClcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHMsXG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIGluaXRpYWxTY3JvbGxPZmZzZXQsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjbGllbnRXaWR0aCwgc2Nyb2xsV2lkdGggfSA9IG91dGVyUmVmO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGlubmVyUmVmLFxuICAgICAgICBpbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICBpbm5lclRhZ05hbWUsXG4gICAgICAgIGl0ZW1Db3VudCxcbiAgICAgICAgaXRlbURhdGEsXG4gICAgICAgIGl0ZW1LZXkgPSBkZWZhdWx0SXRlbUtleSxcbiAgICAgICAgbGF5b3V0LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB1c2VJc1Njcm9sbGluZyxcbiAgICAgICAgd2lkdGgsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgIGNvbnN0IG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsXG4gICAgICAgID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsXG4gICAgICAgIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgY29uc3QgW3N0YXJ0SW5kZXgsIHN0b3BJbmRleF0gPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCk7XG5cbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7IGluZGV4IDw9IHN0b3BJbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKGluZGV4KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgb25TY3JvbGwsXG4gICAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZDogKFxuICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogb25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uU2Nyb2xsOiBhbnkpOiBvblNjcm9sbENhbGxiYWNrKSh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHsgaXRlbUNvdW50IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChcbiAgICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICBfZ2V0SXRlbVN0eWxlOiAoaW5kZXg6IG51bWJlcikgPT4gT2JqZWN0O1xuICAgIF9nZXRJdGVtU3R5bGUgPSAoaW5kZXg6IG51bWJlcik6IE9iamVjdCA9PiB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaXRlbVNpemUsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgaXRlbVN0eWxlQ2FjaGUgPSB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBpdGVtU2l6ZSxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBsYXlvdXQsXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uXG4gICAgICApO1xuXG4gICAgICBsZXQgc3R5bGU7XG4gICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVbaW5kZXhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0SXRlbU9mZnNldCh0aGlzLnByb3BzLCBpbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBnZXRJdGVtU2l6ZSh0aGlzLnByb3BzLCBpbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9XG4gICAgICAgICAgZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBjb25zdCBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gb2Zmc2V0IDogMDtcbiAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXRIb3Jpem9udGFsLFxuICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gb2Zmc2V0IDogMCxcbiAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcblxuICAgIF9nZXRJdGVtU3R5bGVDYWNoZTogKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+IEl0ZW1TdHlsZUNhY2hlO1xuICAgIF9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+ICh7fSkpO1xuXG4gICAgX2dldFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3QgeyBpdGVtQ291bnQsIG92ZXJzY2FuQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nLCBzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbEhvcml6b250YWwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgbGV0IHNjcm9sbE9mZnNldCA9IHNjcm9sbExlZnQ7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX29uU2Nyb2xsVmVydGljYWwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbmNvbnN0IHZhbGlkYXRlU2hhcmVkUHJvcHMgPSAoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXJlY3Rpb24sXG4gICAgaGVpZ2h0LFxuICAgIGxheW91dCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIHdpZHRoLFxuICB9OiBQcm9wczxhbnk+LFxuICB7IGluc3RhbmNlIH06IFN0YXRlXG4pOiB2b2lkID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgK1xuICAgICAgICAgICAgYFwiJHtkaXJlY3Rpb259XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2xheW91dH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgYFwiJHtjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICtcbiAgICAgICAgICBgXCIke3dpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRofVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgK1xuICAgICAgICAgIGBcIiR7aGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVMaXN0Q29tcG9uZW50IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG5jb25zdCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudHlwZSBWYXJpYWJsZVNpemVQcm9wcyA9IHt8XG4gIGVzdGltYXRlZEl0ZW1TaXplOiBudW1iZXIsXG4gIC4uLlByb3BzPGFueT4sXG58fTtcblxudHlwZSBpdGVtU2l6ZUdldHRlciA9IChpbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbnR5cGUgSXRlbU1ldGFkYXRhID0ge3xcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIHNpemU6IG51bWJlcixcbnx9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgaXRlbU1ldGFkYXRhTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSXRlbU1ldGFkYXRhIH0sXG4gIGVzdGltYXRlZEl0ZW1TaXplOiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZEluZGV4OiBudW1iZXIsXG58fTtcblxuY29uc3QgZ2V0SXRlbU1ldGFkYXRhID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgY29uc3QgeyBpdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuICBjb25zdCB7IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXggfSA9IGluc3RhbmNlUHJvcHM7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gKChpdGVtU2l6ZTogYW55KTogaXRlbVNpemVHZXR0ZXIpKGkpO1xuXG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgb2Zmc2V0OiBudW1iZXJcbikgPT4ge1xuICBjb25zdCB7IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXggfSA9IGluc3RhbmNlUHJvcHM7XG5cbiAgY29uc3QgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaGlnaDogbnVtYmVyLFxuICBsb3c6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgY29uc3QgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHsgaXRlbUNvdW50IH0gPSBwcm9wcztcbiAgbGV0IGludGVydmFsID0gMTtcblxuICB3aGlsZSAoXG4gICAgaW5kZXggPCBpdGVtQ291bnQgJiZcbiAgICBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXRcbiAgKSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgcHJvcHMsXG4gICAgaW5zdGFuY2VQcm9wcyxcbiAgICBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksXG4gICAgTWF0aC5mbG9vcihpbmRleCAvIDIpLFxuICAgIG9mZnNldFxuICApO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gKFxuICB7IGl0ZW1Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7IGl0ZW1NZXRhZGF0YU1hcCwgZXN0aW1hdGVkSXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4IH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVMaXN0ID0gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRJdGVtU2l6ZTogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBoZWlnaHQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTtcblxuICAgIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cbiAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldClcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKFxuICAgICAgICBzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJlxuICAgICAgICBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCksXG5cbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBsYXlvdXQsIHdpZHRoIH0gPSBwcm9wcztcblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuXG4gICAgbGV0IG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICBsZXQgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSk6IEluc3RhbmNlUHJvcHMge1xuICAgIGNvbnN0IHsgZXN0aW1hdGVkSXRlbVNpemUgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcblxuICAgIGNvbnN0IGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMSxcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gKFxuICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgICAgaW5kZXggLSAxXG4gICAgICApO1xuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke2l0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVMaXN0O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVHcmlkQ29tcG9uZW50IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5jb25zdCBGaXhlZFNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKHsgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRDb2x1bW5XaWR0aDogKHsgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Um93T2Zmc2V0OiAoeyByb3dIZWlnaHQgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Um93SGVpZ2h0OiAoeyByb3dIZWlnaHQgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiAoeyByb3dDb3VudCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgKiByb3dDb3VudCxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiAoeyBjb2x1bW5Db3VudCwgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpICogY29sdW1uQ291bnQsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgeyBjb2x1bW5Db3VudCwgY29sdW1uV2lkdGgsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgY29sdW1uQ291bnQgKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpIC0gd2lkdGhcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdENvbHVtbk9mZnNldCxcbiAgICAgIGNvbHVtbkluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpIC1cbiAgICAgICAgd2lkdGggK1xuICAgICAgICBzY3JvbGxiYXJTaXplICtcbiAgICAgICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiAoXG4gICAgeyByb3dIZWlnaHQsIGhlaWdodCwgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IHR5cGVvZiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIHJvd0NvdW50ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgLSBoZWlnaHRcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdFJvd09mZnNldCxcbiAgICAgIHJvd0luZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIHJvd0luZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgLVxuICAgICAgICBoZWlnaHQgK1xuICAgICAgICBzY3JvbGxiYXJTaXplICtcbiAgICAgICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBjb2x1bW5XaWR0aCwgY29sdW1uQ291bnQgfTogUHJvcHM8YW55PixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSlcbiAgICAgIClcbiAgICApLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGVmdCA9IHN0YXJ0SW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKFxuICAgICAgKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBjb2x1bW5Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICAgKVxuICAgICk7XG4gIH0sXG5cbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgcm93SGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbFRvcDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSkpXG4gICAgKSxcblxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50LCBoZWlnaHQgfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB0b3AgPSBzdGFydEluZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoXG4gICAgICAoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIHJvd0NvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55Pik6IGFueSB7XG4gICAgLy8gTm9vcFxuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgY29sdW1uV2lkdGgsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaXhlZFNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVMaXN0Q29tcG9uZW50IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG50eXBlIEluc3RhbmNlUHJvcHMgPSBhbnk7XG5cbmNvbnN0IEZpeGVkU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRJdGVtU2l6ZTogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgoaXRlbVNpemU6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiAoeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4pID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAqIGl0ZW1Db3VudCxcblxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogKFxuICAgIHsgZGlyZWN0aW9uLCBoZWlnaHQsIGl0ZW1Db3VudCwgaXRlbVNpemUsIGxheW91dCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGl0ZW1Db3VudCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgLSBzaXplXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgIGxhc3RJdGVtT2Zmc2V0LFxuICAgICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgLVxuICAgICAgICBzaXplICtcbiAgICAgICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSArXG4gICAgICAgIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOiB7XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgaXRlbUNvdW50LCBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSkpXG4gICAgKSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IG9mZnNldCA9IHN0YXJ0SW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKFxuICAgICAgKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBpdGVtQ291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55Pik6IGFueSB7XG4gICAgLy8gTm9vcFxuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55Pik6IHZvaWQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke2l0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaXhlZFNpemVMaXN0O1xuIiwgIi8vIEBmbG93XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldjogT2JqZWN0LCBuZXh0OiBPYmplY3QpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W2F0dHJpYnV0ZV0gIT09IG5leHRbYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgc2hhbGxvd0RpZmZlcnMgZnJvbSAnLi9zaGFsbG93RGlmZmVycyc7XG5cbi8vIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vKCkuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJlRXF1YWwoXG4gIHByZXZQcm9wczogT2JqZWN0LFxuICBuZXh0UHJvcHM6IE9iamVjdFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgc3R5bGU6IHByZXZTdHlsZSwgLi4ucHJldlJlc3QgfSA9IHByZXZQcm9wcztcbiAgY29uc3QgeyBzdHlsZTogbmV4dFN0eWxlLCAuLi5uZXh0UmVzdCB9ID0gbmV4dFByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KVxuICApO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBhcmVFcXVhbCBmcm9tICcuL2FyZUVxdWFsJztcbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIHNob3VsZENvbXBvbmVudFVwZGF0ZSBmb3IgY2xhc3MgY29tcG9uZW50cy5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoXG4gIG5leHRQcm9wczogT2JqZWN0LFxuICBuZXh0U3RhdGU6IE9iamVjdFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKVxuICApO1xufVxuIiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcIm9uQ2xpY2tcIiwgXCJoZWFkZXJaaW5kZXhMb2NhdGlvblwiLCBcIm1hc2tSZWZcIl07XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBXZSBjYW4ndCB0ZXN0IHRoaXMgY29tcG9uZW50IGJlY2F1c2UgRW56eW1lIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXJpbmdcbiAqIGludG8gcG9ydGFscy5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VDb21iaW5lZFJlZnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlPdmVybGF5TWFzayA9IGZ1bmN0aW9uIEV1aU92ZXJsYXlNYXNrKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIF9yZWYkaGVhZGVyWmluZGV4TG9jYSA9IF9yZWYuaGVhZGVyWmluZGV4TG9jYXRpb24sXG4gICAgICBoZWFkZXJaaW5kZXhMb2NhdGlvbiA9IF9yZWYkaGVhZGVyWmluZGV4TG9jYSA9PT0gdm9pZCAwID8gJ2Fib3ZlJyA6IF9yZWYkaGVhZGVyWmluZGV4TG9jYSxcbiAgICAgIG1hc2tSZWYgPSBfcmVmLm1hc2tSZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG92ZXJsYXlNYXNrTm9kZSA9IHVzZVJlZigpO1xuICB2YXIgY29tYmluZWRNYXNrUmVmID0gdXNlQ29tYmluZWRSZWZzKFtvdmVybGF5TWFza05vZGUsIG1hc2tSZWZdKTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc1BvcnRhbFRhcmdldFJlYWR5ID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldElzUG9ydGFsVGFyZ2V0UmVhZHkgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdldWlCb2R5LWhhc092ZXJsYXlNYXNrJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNPdmVybGF5TWFzaycpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29tYmluZWRNYXNrUmVmKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICB9XG4gIH0sIFtdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3J0YWxUYXJnZXQgPSBvdmVybGF5TWFza05vZGUuY3VycmVudDtcblxuICAgIGlmIChwb3J0YWxUYXJnZXQpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9ydGFsVGFyZ2V0KTtcbiAgICB9XG5cbiAgICBzZXRJc1BvcnRhbFRhcmdldFJlYWR5KHRydWUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAocG9ydGFsVGFyZ2V0KSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocG9ydGFsVGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFvdmVybGF5TWFza05vZGUuY3VycmVudCkgcmV0dXJuO1xuICAgIGtleXNPZihyZXN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVzdFtrZXldICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgcHJvcGVydHkgdHlwZS4gRXVpT3ZlcmxheU1hc2sgcHJvcGVydHkgXCIuY29uY2F0KGtleSwgXCIgaXMgbm90IGEgc3RyaW5nLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGF5TWFza05vZGUuY3VycmVudCkge1xuICAgICAgICBvdmVybGF5TWFza05vZGUuY3VycmVudC5zZXRBdHRyaWJ1dGUoa2V5LCByZXN0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbXSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSByZXR1cm47XG4gICAgb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lcygnZXVpT3ZlcmxheU1hc2snLCBcImV1aU92ZXJsYXlNYXNrLS1cIi5jb25jYXQoaGVhZGVyWmluZGV4TG9jYXRpb24sIFwiSGVhZGVyXCIpLCBjbGFzc05hbWUpO1xuICB9LCBbY2xhc3NOYW1lLCBoZWFkZXJaaW5kZXhMb2NhdGlvbl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3J0YWxUYXJnZXQgPSBvdmVybGF5TWFza05vZGUuY3VycmVudDtcbiAgICBpZiAoIXBvcnRhbFRhcmdldCB8fCAhb25DbGljaykgcmV0dXJuO1xuXG4gICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBwb3J0YWxUYXJnZXQpIHtcbiAgICAgICAgb25DbGljaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwb3J0YWxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBvcnRhbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICB9O1xuICB9LCBbb25DbGlja10pO1xuICByZXR1cm4gaXNQb3J0YWxUYXJnZXRSZWFkeSA/IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSkgOiBudWxsO1xufTtcbkV1aU92ZXJsYXlNYXNrLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgYXBwbGllcyB0byBjbGlja2luZyB0aGUgbWFzayBpdHNlbGYgYW5kIG5vdCB0aGUgY2hpbGRyZW5cbiAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIFNob3VsZCB0aGUgbWFzayB2aXN1YWxseSBzaXQgYWJvdmUgb3IgYmVsb3cgdGhlIEV1aUhlYWRlciAoY29udHJvbGxlZCBieSB6LWluZGV4KVxuICAgICAqL1xuICBoZWFkZXJaaW5kZXhMb2NhdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImFib3ZlXCIsIFwiYmVsb3dcIl0pLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0IHJlZiB0byBiZSBwYXNzZWQgdG8gdGhlIHdyYXBwaW5nIGNvbnRhaW5lclxuICAgICAqL1xuICBtYXNrUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU3BhY2VyU3R5bGVzIH0gZnJvbSAnLi9zcGFjZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWyd4cycsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpU3BhY2VyID0gZnVuY3Rpb24gRXVpU3BhY2VyKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlTcGFjZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNwYWNlcicsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJldWlTcGFjZXItLVwiLmNvbmNhdChzaXplKSwgc2l6ZSksIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNwYWNlciwgc3R5bGVzW3NpemVdXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSk7XG59O1xuRXVpU3BhY2VyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FscyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTkxeGkxbi1ldWlTcGFjZXJcIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpU3BhY2VyO1wiXG59IDoge1xuICBuYW1lOiBcIjE5MXhpMW4tZXVpU3BhY2VyXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aVNwYWNlcjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVNwYWNlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNwYWNlclN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlTcGFjZXI6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnhzLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHhsLCBcIjs7bGFiZWw6eHhsO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhc3luY1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJjdXN0b21PcHRpb25UZXh0XCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dFJlZlwiLCBcImlzQ2xlYXJhYmxlXCIsIFwiaXNEaXNhYmxlZFwiLCBcImlzSW52YWxpZFwiLCBcImlzTG9hZGluZ1wiLCBcIm5vU3VnZ2VzdGlvbnNcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ3JlYXRlT3B0aW9uXCIsIFwib25TZWFyY2hDaGFuZ2VcIiwgXCJvcHRpb25zXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJyb3dIZWlnaHRcIiwgXCJzZWxlY3RlZE9wdGlvbnNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJwcmVwZW5kXCIsIFwic29ydE1hdGNoZXNCeVwiLCBcImRlbGltaXRlclwiLCBcImFwcGVuZFwiLCBcImF1dG9Gb2N1c1wiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogRWxlbWVudHMgd2l0aGluIEV1aUNvbWJvQm94IHdoaWNoIHdvdWxkIG5vcm1hbGx5IGJlIHRhYmJhYmxlIChpbnB1dHMsIGJ1dHRvbnMpIGhhdmUgYmVlbiByZW1vdmVkXG4gKiBmcm9tIHRoZSB0YWIgb3JkZXIgd2l0aCB0YWJpbmRleD17LTF9IHNvIHRoYXQgd2UgY2FuIGNvbnRyb2wgdGhlIGtleWJvYXJkIG5hdmlnYXRpb24gaW50ZXJmYWNlLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBodG1sSWRHZW5lcmF0b3IsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlQb3J0YWwgfSBmcm9tICcuLi9wb3J0YWwnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCB9IGZyb20gJy4vY29tYm9fYm94X29wdGlvbnNfbGlzdCc7XG5pbXBvcnQgeyBnZXRNYXRjaGluZ09wdGlvbnMsIGZsYXR0ZW5PcHRpb25Hcm91cHMsIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgfSBmcm9tICcuL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hJbnB1dCB9IGZyb20gJy4vY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9pbnB1dCc7XG5pbXBvcnQgeyBnZXRFbGVtZW50WkluZGV4IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGluaXRpYWxTZWFyY2hWYWx1ZSA9ICcnO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3gsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3gpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiAtMSxcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGlzTGlzdE9wZW46IGZhbHNlLFxuICAgICAgbGlzdEVsZW1lbnQ6IG51bGwsXG4gICAgICBsaXN0UG9zaXRpb246ICdib3R0b20nLFxuICAgICAgbGlzdFpJbmRleDogdW5kZWZpbmVkLFxuICAgICAgbWF0Y2hpbmdPcHRpb25zOiBnZXRNYXRjaGluZ09wdGlvbnMoX3RoaXMucHJvcHMub3B0aW9ucywgX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLCBpbml0aWFsU2VhcmNoVmFsdWUsIF90aGlzLnByb3BzLmFzeW5jLCBCb29sZWFuKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbiksIF90aGlzLnByb3BzLnNvcnRNYXRjaGVzQnkpLFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIHdpZHRoOiAwXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb21ib0JveFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbWJvQm94UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgdGhlIGByZWxhdGVkVGFyZ2V0YCBldmVudCBwcm9wZXJ0eSBmb3IgYmx1ciBldmVudHNcbiAgICAgIC8vIGJ1dCBkb2VzIGFkZCBpdCBmb3IgZm9jdXNvdXQuIFJlYWN0IGRvZXNuJ3Qgc3VwcG9ydCBgb25Gb2N1c091dGAgc28gaGVyZSB3ZSBhcmUuXG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgX3RoaXMub25Db250YWluZXJCbHVyKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSA9IHJlZjtcblxuICAgICAgaWYgKF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIF90aGlzLm9uQ29udGFpbmVyQmx1cik7XG5cbiAgICAgICAgdmFyIGNvbWJvQm94Qm91bmRzID0gX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgd2lkdGg6IGNvbWJvQm94Qm91bmRzLndpZHRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhdXRvU2l6ZUlucHV0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNlYXJjaElucHV0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2VhcmNoSW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlID0gcmVmO1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSBfdGhpcy5wcm9wcy5pbnB1dFJlZihyZWYpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgLy8gZmluZCB0aGUgekluZGV4IG9mIHRoZSBjb21ib2JveCByZWxhdGl2ZSB0byB0aGUgcGFnZSBib2R5XG4gICAgICAgIC8vIGFuZCB1c2UgdGhhdCB0byBkZXB0aC1wb3NpdGlvbiB0aGUgbGlzdCBib3hcbiAgICAgICAgLy8gYWRkcyBhbiBleHRyYSBgMTAwYCB0byBwcm92aWRlIHNvbWUgZGVmZW5zZSBhcm91bmQgbmVpZ2hib3JpbmcgZWxlbWVudHMnIHBvc2l0aW9uaW5nXG4gICAgICAgIHZhciBsaXN0WkluZGV4ID0gZ2V0RWxlbWVudFpJbmRleChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLCBkb2N1bWVudC5ib2R5KSArIDEwMDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbGlzdFpJbmRleDogbGlzdFpJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRvZ2dsZUJ1dHRvblJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRvZ2dsZUJ1dHRvblJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnRvZ2dsZUJ1dHRvblJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wdGlvbnNSZWZJbnN0YW5jZXNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wdGlvblJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChpbmRleCwgcmVmKSB7XG4gICAgICBfdGhpcy5vcHRpb25zUmVmSW5zdGFuY2VzW2luZGV4XSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvcGVuTGlzdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTGlzdE9wZW46IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NlTGlzdFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC50YXJnZXQgPT09IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgLy8gcmVhbGx5IGxvbmcgc2VhcmNoIHZhbHVlcyAvIGN1c3RvbSBlbnRyaWVzIHRyaWdnZXJzIGEgc2Nyb2xsIGV2ZW50IG9uIHRoZSBpbnB1dFxuICAgICAgICAvLyB3aGljaCB0aGUgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCBwYXNzZXMgdGhyb3VnaCBoZXJlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsaXN0WkluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgIGlzTGlzdE9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVQb3NpdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGlzdEVsZW1lbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IF90aGlzLnN0YXRlLmxpc3RFbGVtZW50O1xuXG4gICAgICBpZiAoIV90aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxpc3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gaXQncyBwb3NzaWJsZSB0aGF0IHVwZGF0ZUxpc3RQb3NpdGlvbiBpcyBjYWxsZWQgd2hlbiBsaXN0RWxlbWVudCBpcyBiZWNvbWluZyB2aXNpYmxlLCBidXQgaXNuJ3QgeWV0XG5cblxuICAgICAgdmFyIGxpc3RFbGVtZW50Qm91bmRzID0gbGlzdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIGlmIChsaXN0RWxlbWVudEJvdW5kcy53aWR0aCA9PT0gMCB8fCBsaXN0RWxlbWVudEJvdW5kcy5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYm9Cb3hCb3VuZHMgPSBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB2YXIgX3JlZiA9IGZpbmRQb3BvdmVyUG9zaXRpb24oe1xuICAgICAgICBhbGxvd0Nyb3NzQXhpczogZmFsc2UsXG4gICAgICAgIGFuY2hvcjogX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSxcbiAgICAgICAgcG9wb3ZlcjogbGlzdEVsZW1lbnQsXG4gICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJ1xuICAgICAgfSksXG4gICAgICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgICAgIHRvcCA9IF9yZWYudG9wO1xuXG4gICAgICBpZiAoX3RoaXMubGlzdFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5zdHlsZS50b3AgPSBcIlwiLmNvbmNhdCh0b3AsIFwicHhcIik7IC8vIGxpc3RFbGVtZW50IGRvZXNuJ3QgaGF2ZSBpdHMgd2lkdGggc2V0IHVudGlsIGFmdGVyIHVwZGF0aW5nIHRoZSBwb3NpdGlvblxuICAgICAgICAvLyB3aGljaCBtZWFucyB0aGUgcG9wb3ZlciBzZXJ2aWNlIHdvbid0IGtub3cgYWJvdXQgdGhlIGNvcnJlY3Qgd2lkdGhcbiAgICAgICAgLy8gaG93ZXZlciwgd2UgYWxyZWFkeSBrbm93IHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBlbGVtZW50XG5cbiAgICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlLnN0eWxlLmxlZnQgPSBcIlwiLmNvbmNhdChjb21ib0JveEJvdW5kcy5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0LCBcInB4XCIpO1xuICAgICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2Uuc3R5bGUud2lkdGggPSBcIlwiLmNvbmNhdChjb21ib0JveEJvdW5kcy53aWR0aCwgXCJweFwiKTtcbiAgICAgIH0gLy8gQ2FjaGUgZm9yIGZ1dHVyZSBjYWxscy5cblxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxpc3RFbGVtZW50OiBsaXN0RWxlbWVudCxcbiAgICAgICAgbGlzdFBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgd2lkdGg6IGNvbWJvQm94Qm91bmRzLndpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleFwiLCBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUsIGRvIG5vdGhpbmcuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZjIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfcmVmMi5tYXRjaGluZ09wdGlvbnM7XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4ICsgYW1vdW50O1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBHcm91cCB0aXRsZXMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcbiAgICAgICAgLy8gU2tpcCBncm91cCB0aXRsZSBvcHRpb25zXG5cblxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IDEgOiAtMTtcblxuICAgICAgICB3aGlsZSAobWF0Y2hpbmdPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uaXNHcm91cExhYmVsT3B0aW9uKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IG5leHRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA+IC0xICYmIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4IDwgX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhckFjdGl2ZU9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiAtMVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJTZWFyY2hWYWx1ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5vblNlYXJjaENoYW5nZSgnJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlTGFzdE9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBCYWNrc3BhY2Ugd2lsbCBiZSB1c2VkIHRvIGRlbGV0ZSB0aGUgaW5wdXQsIG5vdCBhIHBpbGwuXG5cblxuICAgICAgaWYgKF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERlbGV0ZSBsYXN0IHBpbGwuXG5cblxuICAgICAgX3RoaXMub25SZW1vdmVPcHRpb24oX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zW190aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxXSk7XG5cbiAgICAgIGlmIChCb29sZWFuKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbikgJiYgIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRDdXN0b21PcHRpb25cIiwgZnVuY3Rpb24gKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMub25DcmVhdGVPcHRpb24sXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzLm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnM7XG5cbiAgICAgIGlmIChfdGhpcy5kb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uKCkpIHtcbiAgICAgICAgX3RoaXMub25BZGRPcHRpb24obWF0Y2hpbmdPcHRpb25zWzBdLCBpc0NvbnRhaW5lckJsdXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvbkNyZWF0ZU9wdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERvbid0IGJvdGhlciB0cnlpbmcgdG8gY3JlYXRlIGFuIG9wdGlvbiBpZiB0aGUgdXNlciBoYXNuJ3QgdHlwZWQgYW55dGhpbmcuXG5cblxuICAgICAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERvbid0IGNyZWF0ZSB0aGUgdmFsdWUgaWYgaXQncyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQuXG5cblxuICAgICAgaWYgKGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBBZGQgbmV3IGN1c3RvbSBwaWxsIGlmIHRoaXMgaXMgY3VzdG9tIGlucHV0LCBldmVuIGlmIGl0IHBhcnRpYWxseSBtYXRjaGVzIGFuIG9wdGlvbi5cblxuXG4gICAgICB2YXIgaXNPcHRpb25DcmVhdGVkID0gb25DcmVhdGVPcHRpb24oc2VhcmNoVmFsdWUsIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykpOyAvLyBFeHBlY3QgdGhlIGNvbnN1bWVyIHRvIGJlIGV4cGxpY2l0IGluIHJlamVjdGluZyBhIGN1c3RvbSBvcHRpb24uXG5cbiAgICAgIGlmIChpc09wdGlvbkNyZWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2xlYXJTZWFyY2hWYWx1ZSgpO1xuXG4gICAgICBpZiAoQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pKSB7XG4gICAgICAgIC8vIEFkZGluZyBhIGN1c3RvbSBvcHRpb24gdG8gYSBzaW5nbGUgc2VsZWN0IHRoYXQgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBsaXN0IG9mIG9wdGlvbnNcbiAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZG9lc1NlYXJjaE1hdGNoT25seU9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcblxuICAgICAgaWYgKF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zWzBdLmxhYmVsLnRvTG93ZXJDYXNlKCkgPT09IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXJlQWxsT3B0aW9uc1NlbGVjdGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzMi5hc3luYzsgLy8gQXNzdW1lIGlmIHRoaXMgaXMgYXN5bmMgdGhlbiB0aGVyZSBjb3VsZCBiZSBpbmZpbml0ZSBvcHRpb25zLlxuXG4gICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmxhdHRlbk9wdGlvbnMgPSBmbGF0dGVuT3B0aW9uR3JvdXBzKG9wdGlvbnMpLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbiksIHt9LCB7XG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG51bWJlck9mU2VsZWN0ZWRPcHRpb25zID0gMDtcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmMy5sYWJlbDtcbiAgICAgICAgdmFyIHRyaW1tZWRMYWJlbCA9IGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZmxhdHRlbk9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSB0cmltbWVkTGFiZWw7XG4gICAgICAgIH0pICE9PSAtMSkgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgKz0gMTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZsYXR0ZW5PcHRpb25zLmxlbmd0aCA9PT0gbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnM7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db21ib0JveEZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldEN1c3RvbU9wdGlvbnNcIiwgZnVuY3Rpb24gKGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgZGVsaW1pdGVyID0gX3RoaXMucHJvcHMuZGVsaW1pdGVyO1xuXG4gICAgICBpZiAoZGVsaW1pdGVyKSB7XG4gICAgICAgIHNlYXJjaFZhbHVlLnNwbGl0KGRlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5sZW5ndGggPiAwKSBfdGhpcy5hZGRDdXN0b21PcHRpb24oaXNDb250YWluZXJCbHVyLCBvcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIHNlYXJjaFZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBjbG9zZSB0aGUgb3B0aW9ucyBsaXN0LCB1bmxlc3MgdGhlIHVzZXIgY2xpY2tlZCBvbiBhbiBvcHRpb25cblxuICAgICAgLyoqXG4gICAgICAgKiBGaXJlRm94IHJldHVybnMgYHJlbGF0ZWRUYXJnZXRgIGFzIGBudWxsYCBmb3Igc2VjdXJpdHkgcmVhc29ucywgYnV0IHByb3ZpZGVzIGEgcHJvcHJpZXRhcnkgYGV4cGxpY2l0T3JpZ2luYWxUYXJnZXRgLlxuICAgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvZXhwbGljaXRPcmlnaW5hbFRhcmdldFxuICAgICAgICovXG4gICAgICB2YXIgZm9jdXNFdmVudCA9IGV2ZW50O1xuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSBmb2N1c0V2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZm9jdXNFdmVudC5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0O1xuXG4gICAgICB2YXIgZm9jdXNlZEluT3B0aW9uc0xpc3QgPSByZWxhdGVkVGFyZ2V0ICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZSAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG5cbiAgICAgIHZhciBmb2N1c2VkSW5JbnB1dCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICBpZiAoIWZvY3VzZWRJbk9wdGlvbnNMaXN0ICYmICFmb2N1c2VkSW5JbnB1dCkge1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcblxuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7IC8vIElmIHRoZSB1c2VyIHRhYnMgYXdheSBvciBjaGFuZ2VzIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudCwgdGFrZSB3aGF0ZXZlciBpbnB1dCB0aGV5J3ZlXG4gICAgICAgIC8vIHR5cGVkIGFuZCBjb252ZXJ0IGl0IGludG8gYSBwaWxsLCB0byBwcmV2ZW50IHRoZSBjb21ibyBib3ggZnJvbSBsb29raW5nIGxpa2UgYSB0ZXh0IGlucHV0LlxuXG5cbiAgICAgICAgaWYgKCFfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnModHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZEluT3B0aW9uc0xpc3QpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy81MTc5XG4gICAgICAgIC8vIG5lZWQgdG8gcmVzdG9yZSBmb2N1cyB0byB0aGUgaW5wdXQgYm94IHdoZW4gY2xpY2tpbmcgbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgICAgIC8vIGZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IGNhbGxpbmcgLmZvY3VzKCkgZHVyaW5nIGEgYmx1ciBldmVudFxuICAgICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MzU3OVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRzZWFyY2hJbnB1dFJlZkk7XG5cbiAgICAgICAgICAoX3RoaXMkc2VhcmNoSW5wdXRSZWZJID0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkgPT09IG51bGwgfHwgX3RoaXMkc2VhcmNoSW5wdXRSZWZJID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRzZWFyY2hJbnB1dFJlZkkuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzRGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoLTEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkJBQ0tTUEFDRTpcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIF90aGlzLnJlbW92ZUxhc3RPcHRpb24oKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5FU0NBUEU6XG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkVOVEVSOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIF90aGlzLm9uQWRkT3B0aW9uKF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuVEFCOlxuICAgICAgICAgIC8vIERpc2FsbG93IHRhYmJpbmcgd2hlbiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHRoZSBvcHRpb25zLlxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSAmJiBfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25LZXlEb3duKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbktleURvd24oZXZlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uRW50ZXJLZXlcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wdGlvbkNsaWNrXCIsIGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25BZGRPcHRpb25cIiwgZnVuY3Rpb24gKGFkZGVkT3B0aW9uLCBpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgIGlmIChhZGRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkNoYW5nZSxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvblByb3AgPSBfdGhpcyRwcm9wczMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIHNpbmdsZVNlbGVjdGlvbiA9IEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uUHJvcCk7XG4gICAgICB2YXIgY2hhbmdlT3B0aW9ucyA9IHNpbmdsZVNlbGVjdGlvbiA/IFthZGRlZE9wdGlvbl0gOiBzZWxlY3RlZE9wdGlvbnMuY29uY2F0KGFkZGVkT3B0aW9uKTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZU9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG5cbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG5cbiAgICAgIGlmICghaXNDb250YWluZXJCbHVyKSB7XG4gICAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMuaW5kZXhPZihhZGRlZE9wdGlvbilcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25SZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKHJlbW92ZWRPcHRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzNC5vbkNoYW5nZSxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczQuc2VsZWN0ZWRPcHRpb25zO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2Uoc2VsZWN0ZWRPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbiAhPT0gcmVtb3ZlZE9wdGlvbjtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyU2VsZWN0ZWRPcHRpb25zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkNoYW5nZSA9IF90aGlzLnByb3BzLm9uQ2hhbmdlO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoW10pO1xuICAgICAgfSAvLyBDbGlja2luZyB0aGUgY2xlYXIgYnV0dG9uIHdpbGwgYWxzbyBjYXVzZSBpdCB0byBkaXNhcHBlYXIuIFRoaXMgd291bGQgcmVzdWx0IGluIGZvY3VzXG4gICAgICAvLyBzaGlmdGluZyB1bmV4cGVjdGVkbHkgdG8gdGhlIGJvZHkgZWxlbWVudCBzbyB3ZSBzZXQgaXQgdG8gdGhlIGlucHV0IHdoaWNoIGlzIG1vcmUgcmVhc29uYWJsZSxcblxuXG4gICAgICBpZiAoX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29tYm9Cb3hDbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcyBhbnl3aGVyZSBvbiB0aGUgYm94LCBlbnRlciB0aGUgaW50ZXJhY3Rpb24gc3RhdGUuXG4gICAgICBpZiAoX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICB9IC8vIElmIHRoZSB1c2VyIGRvZXMgdGhpcyBmcm9tIGEgc3RhdGUgaW4gd2hpY2ggYW4gb3B0aW9uIGhhcyBmb2N1cywgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0IGl0IG9yIGNsZWFyIGl0LlxuXG5cbiAgICAgIGlmIChCb29sZWFuKF90aGlzLnByb3BzLnNpbmdsZVNlbGVjdGlvbikgJiYgX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25JbmRleCA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbCAmJiBvcHRpb24ua2V5ID09PSBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbMF0ua2V5O1xuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHNlbGVjdGVkT3B0aW9uSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3Blbkxpc3RDbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uTGlzdFNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DbG9zZUxpc3RDbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblNlYXJjaENoYW5nZVwiLCBmdW5jdGlvbiAoc2VhcmNoVmFsdWUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblNlYXJjaENoYW5nZSA9IF90aGlzJHByb3BzNS5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczUuZGVsaW1pdGVyO1xuXG4gICAgICBpZiAob25TZWFyY2hDaGFuZ2UpIHtcbiAgICAgICAgdmFyIF9oYXNNYXRjaGluZ09wdGlvbnMgPSBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoID4gMDtcblxuICAgICAgICBvblNlYXJjaENoYW5nZShzZWFyY2hWYWx1ZSwgX2hhc01hdGNoaW5nT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWFyY2hWYWx1ZSAmJiBfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuID09PSBmYWxzZSkgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmVuZHNXaXRoKGRlbGltaXRlcikpIHtcbiAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlTWF0Y2hpbmdPcHRpb25zSWZEaWZmZXJlbnRcIiwgZnVuY3Rpb24gKG5ld01hdGNoaW5nT3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkc3RhdGUubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM2LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczYuc2VsZWN0ZWRPcHRpb25zO1xuICAgICAgdmFyIGFyZU9wdGlvbnNEaWZmZXJlbnQgPSBmYWxzZTtcblxuICAgICAgaWYgKG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggIT09IG5ld01hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgYXJlT3B0aW9uc0RpZmZlcmVudCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChtYXRjaGluZ09wdGlvbnNbaV0ubGFiZWwgIT09IG5ld01hdGNoaW5nT3B0aW9uc1tpXS5sYWJlbCkge1xuICAgICAgICAgICAgYXJlT3B0aW9uc0RpZmZlcmVudCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFyZU9wdGlvbnNEaWZmZXJlbnQpIHtcbiAgICAgICAgX3RoaXMub3B0aW9uc1JlZkluc3RhbmNlcyA9IFtdO1xuICAgICAgICB2YXIgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXg7IC8vIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2luZ2xlIG9wdGlvbiBpcyBhY3RpdmUgaWYgaXQgaXMgaW4gdGhlIG1hdGNoaW5nT3B0aW9uc1xuXG4gICAgICAgIGlmIChCb29sZWFuKHNpbmdsZVNlbGVjdGlvbikgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGlmIChuZXdNYXRjaGluZ09wdGlvbnMuaW5jbHVkZXMoc2VsZWN0ZWRPcHRpb25zWzBdKSkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV3TWF0Y2hpbmdPcHRpb25zLmluZGV4T2Yoc2VsZWN0ZWRPcHRpb25zWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWF0Y2hpbmdPcHRpb25zOiBuZXdNYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IG5leHRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIW5ld01hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVuZGxlc3Mgc2V0U3RhdGUgLT4gY29tcG9uZW50V2lsbFVwZGF0ZSAtPiBzZXRTdGF0ZSBsb29wLlxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTsgLy8gVE9ETzogVGhpcyB3aWxsIG5lZWQgdG8gYmUgY2FsbGVkIG9uY2UgdGhlIGFjdHVhbCBzdHlsZXNoZWV0IGxvYWRzLlxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzMi5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICBfdGhpczIuYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlLmNvcHlJbnB1dFN0eWxlcygpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM3LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gX3RoaXMkcHJvcHM3LnNvcnRNYXRjaGVzQnk7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSB0aGlzLnN0YXRlLnNlYXJjaFZhbHVlOyAvLyBSZWFjdCAxNi4zIGhhcyBhIGJ1ZyAoZml4ZWQgaW4gMTYuNCkgd2hlcmUgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgICAvLyBpc24ndCBjYWxsZWQgYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2UsIGFuZCB3ZSB0cmFjayBgc2VhcmNoVmFsdWVgIGluIHN0YXRlXG4gICAgICAvLyBpbnN0ZWFkIHdlIG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UgaW4gc2VhcmNoVmFsdWUgaGVyZVxuXG4gICAgICB0aGlzLnVwZGF0ZU1hdGNoaW5nT3B0aW9uc0lmRGlmZmVyZW50KGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZE9wdGlvbnMsIHNlYXJjaFZhbHVlLCB0aGlzLnByb3BzLmFzeW5jLCBCb29sZWFuKHNpbmdsZVNlbGVjdGlvbiksIHNvcnRNYXRjaGVzQnkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkYXRhVGVzdFN1YmogPSBfdGhpcyRwcm9wczhbJ2RhdGEtdGVzdC1zdWJqJ10sXG4gICAgICAgICAgYXN5bmMgPSBfdGhpcyRwcm9wczguYXN5bmMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM4LmNsYXNzTmFtZSxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM4LmNvbXByZXNzZWQsXG4gICAgICAgICAgY3VzdG9tT3B0aW9uVGV4dCA9IF90aGlzJHByb3BzOC5jdXN0b21PcHRpb25UZXh0LFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzOC5mdWxsV2lkdGgsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczguaWQsXG4gICAgICAgICAgaW5wdXRSZWYgPSBfdGhpcyRwcm9wczguaW5wdXRSZWYsXG4gICAgICAgICAgaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczguaXNDbGVhcmFibGUsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzOC5pc0Rpc2FibGVkLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzOC5pc0ludmFsaWQsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHM4LmlzTG9hZGluZyxcbiAgICAgICAgICBub1N1Z2dlc3Rpb25zID0gX3RoaXMkcHJvcHM4Lm5vU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25CbHVyID0gX3RoaXMkcHJvcHM4Lm9uQmx1cixcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzOC5vbkNoYW5nZSxcbiAgICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzOC5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICBvblNlYXJjaENoYW5nZSA9IF90aGlzJHByb3BzOC5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM4Lm9wdGlvbnMsXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczgucGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHM4LnJlbmRlck9wdGlvbixcbiAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczgucm93SGVpZ2h0LFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzOC5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM4LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHM4LnByZXBlbmQsXG4gICAgICAgICAgc29ydE1hdGNoZXNCeSA9IF90aGlzJHByb3BzOC5zb3J0TWF0Y2hlc0J5LFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzOC5kZWxpbWl0ZXIsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHM4LmFwcGVuZCxcbiAgICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczguYXV0b0ZvY3VzLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzOFsnYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHM4WydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzOCwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZTIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgaGFzRm9jdXMgPSBfdGhpcyRzdGF0ZTIuaGFzRm9jdXMsXG4gICAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHN0YXRlMi5pc0xpc3RPcGVuLFxuICAgICAgICAgIGxpc3RQb3NpdGlvbiA9IF90aGlzJHN0YXRlMi5saXN0UG9zaXRpb24sXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZTIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRzdGF0ZTIud2lkdGgsXG4gICAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkc3RhdGUyLm1hdGNoaW5nT3B0aW9uczsgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBJRCBpZiB1c2VycyBkb24ndCBwYXNzIG9uZSBhcyBhIHByb3BcblxuICAgICAgdmFyIGlucHV0SWQgPSBpZCAhPT0gbnVsbCAmJiBpZCAhPT0gdm9pZCAwID8gaWQgOiB0aGlzLnJvb3RJZCgnX2V1aS1jb21ib2JveC1pZCcpOyAvLyBWaXN1YWxseSBpbmRpY2F0ZSB0aGUgY29tYm9ib3ggaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSBpZiBpdCBoYXMgbG9zdCBmb2N1cyBidXQgdGhlcmUgaXMgdGV4dCBlbnRlcmVkIGluIHRoZSBpbnB1dC5cbiAgICAgIC8vIFdoZW4gY3VzdG9tIG9wdGlvbnMgYXJlIGRpc2FibGVkIGFuZCB0aGUgdXNlciBsZWF2ZXMgdGhlIGNvbWJvIGJveCBhZnRlciBlbnRlcmluZyB0ZXh0IHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55XG4gICAgICAvLyBvcHRpb25zLCB0aGlzIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhleSd2ZSBlbnRlcmVkIGludmFsaWQgaW5wdXQuXG5cbiAgICAgIHZhciBtYXJrQXNJbnZhbGlkID0gaXNJbnZhbGlkIHx8IChoYXNGb2N1cyA9PT0gZmFsc2UgfHwgaXNMaXN0T3BlbiA9PT0gZmFsc2UpICYmIHNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveCcsIGNsYXNzTmFtZSwge1xuICAgICAgICAnZXVpQ29tYm9Cb3gtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LS1wcmVwZW5kZWQnOiBwcmVwZW5kLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtLWFwcGVuZGVkJzogYXBwZW5kLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc0ludmFsaWQnOiBtYXJrQXNJbnZhbGlkLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtaXNPcGVuJzogaXNMaXN0T3BlblxuICAgICAgfSk7XG4gICAgICB2YXIgdmFsdWUgPSBzZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb24ubGFiZWw7XG4gICAgICB9KS5qb2luKCcsICcpO1xuICAgICAgdmFyIG9wdGlvbnNMaXN0O1xuXG4gICAgICBpZiAoIW5vU3VnZ2VzdGlvbnMgJiYgaXNMaXN0T3Blbikge1xuICAgICAgICB2YXIgb3B0aW9uc0xpc3REYXRhVGVzdFN1YmogPSBkYXRhVGVzdFN1YmogPyBcIlwiLmNvbmNhdChkYXRhVGVzdFN1YmosIFwiLW9wdGlvbnNMaXN0XCIpIDogdW5kZWZpbmVkO1xuICAgICAgICBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveC5saXN0Ym94QXJpYUxhYmVsXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJDaG9vc2UgZnJvbSB0aGUgZm9sbG93aW5nIG9wdGlvbnNcIlxuICAgICAgICB9LCBmdW5jdGlvbiAobGlzdGJveEFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIHtcbiAgICAgICAgICAgIHpJbmRleDogX3RoaXMzLnN0YXRlLmxpc3RaSW5kZXgsXG4gICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkOiBfdGhpczMuYXJlQWxsT3B0aW9uc1NlbGVjdGVkKCksXG4gICAgICAgICAgICBjdXN0b21PcHRpb25UZXh0OiBjdXN0b21PcHRpb25UZXh0LFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBvcHRpb25zTGlzdERhdGFUZXN0U3ViaixcbiAgICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgICBsaXN0UmVmOiBfdGhpczMubGlzdFJlZkNhbGxiYWNrLFxuICAgICAgICAgICAgbWF0Y2hpbmdPcHRpb25zOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgICBvbkNsb3NlTGlzdDogX3RoaXMzLmNsb3NlTGlzdCxcbiAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uOiBvbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICAgIG9uT3B0aW9uQ2xpY2s6IF90aGlzMy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgICAgb25PcHRpb25FbnRlcktleTogX3RoaXMzLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgICBvblNjcm9sbDogX3RoaXMzLm9uT3B0aW9uTGlzdFNjcm9sbCxcbiAgICAgICAgICAgIG9wdGlvblJlZjogX3RoaXMzLm9wdGlvblJlZkNhbGxiYWNrLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBsaXN0UG9zaXRpb24sXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICAgIHJlbmRlck9wdGlvbjogcmVuZGVyT3B0aW9uLFxuICAgICAgICAgICAgcm9vdElkOiBfdGhpczMucm9vdElkLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb0luZGV4OiBhY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgICAgdXBkYXRlUG9zaXRpb246IF90aGlzMy51cGRhdGVQb3NpdGlvbixcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgICAgICAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIGxpc3Rib3hBcmlhTGFiZWw6IGxpc3Rib3hBcmlhTGFiZWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICAvKipcbiAgICAgICAgICogRXVpQ29tYm9Cb3ggZm9sbG93cyB0aGUgV0FJLUFSSUEgMS4yIHNwZWMgZm9yIGVkaXRhYmxlIGNvbWJvYm94ZXNcbiAgICAgICAgICogd2l0aCBsaXN0IGF1dG9jb21wbGV0ZS4gVGhpcyBwYXR0ZXJuIGlzIGFuIGltcHJvdmVtZW50IG9uIHRoZSB1c2VyXG4gICAgICAgICAqIGV4cGVyaWVuY2UgZm9yIHNjcmVlbiByZWFkZXJzIG92ZXIgdGhlIFdBSS1BUklBIDEuMSBwYXR0ZXJuLlxuICAgICAgICAgKlxuICAgICAgICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMi9leGFtcGxlcy9jb21ib2JveC9jb21ib2JveC1hdXRvY29tcGxldGUtbGlzdC5odG1sXG4gICAgICAgICAqL1xuICAgICAgICBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd24sXG4gICAgICAgICAgcmVmOiB0aGlzLmNvbWJvQm94UmVmQ2FsbGJhY2tcbiAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hJbnB1dCwge1xuICAgICAgICAgIGF1dG9TaXplSW5wdXRSZWY6IHRoaXMuYXV0b1NpemVJbnB1dFJlZkNhbGxiYWNrLFxuICAgICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbklkOiB0aGlzLmhhc0FjdGl2ZU9wdGlvbigpID8gdGhpcy5yb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdCh0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4KSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCxcbiAgICAgICAgICBpZDogaW5wdXRJZCxcbiAgICAgICAgICBpbnB1dFJlZjogdGhpcy5zZWFyY2hJbnB1dFJlZkNhbGxiYWNrLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNMaXN0T3BlbjogaXNMaXN0T3BlbixcbiAgICAgICAgICBub0ljb246ICEhbm9TdWdnZXN0aW9ucyxcbiAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgICBvbkNsZWFyOiBpc0NsZWFyYWJsZSAmJiAhaXNEaXNhYmxlZCA/IHRoaXMuY2xlYXJTZWxlY3RlZE9wdGlvbnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgb25DbGljazogdGhpcy5vbkNvbWJvQm94Q2xpY2ssXG4gICAgICAgICAgb25DbG9zZUxpc3RDbGljazogdGhpcy5vbkNsb3NlTGlzdENsaWNrLFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25Db21ib0JveEZvY3VzLFxuICAgICAgICAgIG9uT3Blbkxpc3RDbGljazogdGhpcy5vbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgICAgb25SZW1vdmVPcHRpb246IHRoaXMub25SZW1vdmVPcHRpb24sXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJvb3RJZDogdGhpcy5yb290SWQsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHRvZ2dsZUJ1dHRvblJlZjogdGhpcy50b2dnbGVCdXR0b25SZWZDYWxsYmFjayxcbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbjogdGhpcy51cGRhdGVQb3NpdGlvbixcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgYXBwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBhcHBlbmQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJlcGVuZDogc2luZ2xlU2VsZWN0aW9uID8gcHJlcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5XG4gICAgICAgIH0pLCBvcHRpb25zTGlzdClcbiAgICAgICk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBuZXh0UHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBuZXh0UHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IG5leHRQcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc29ydE1hdGNoZXNCeSA9IG5leHRQcm9wcy5zb3J0TWF0Y2hlc0J5O1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gcHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlOyAvLyBDYWxjdWxhdGUgYW5kIGNhY2hlIHRoZSBvcHRpb25zIHdoaWNoIG1hdGNoIHRoZSBzZWFyY2hWYWx1ZSwgYmVjYXVzZSB3ZSB1c2UgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgLy8gaW4gbXVsdGlwbGUgcGxhY2VzIGFuZCBpdCB3b3VsZCBiZSBleHBlbnNpdmUgdG8gY2FsY3VsYXRlIHJlcGVhdGVkbHkuXG5cbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRPcHRpb25zLCBzZWFyY2hWYWx1ZSwgbmV4dFByb3BzLmFzeW5jLCBCb29sZWFuKHNpbmdsZVNlbGVjdGlvbiksIHNvcnRNYXRjaGVzQnkpO1xuICAgICAgdmFyIHN0YXRlVXBkYXRlID0ge1xuICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9uc1xuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ID49IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGFzeW5jOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlLFxuICBvcHRpb25zOiBbXSxcbiAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcbiAgcHJlcGVuZDogdW5kZWZpbmVkLFxuICBhcHBlbmQ6IHVuZGVmaW5lZCxcbiAgc29ydE1hdGNoZXNCeTogJ25vbmUnXG59KTtcblxuRXVpQ29tYm9Cb3gucHJvcFR5cGVzID0ge1xuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiBvcHRpb25zIGFzeW5jaHJvbm91c2x5XG4gICAgICovXG4gIGFzeW5jOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgZXhwYW5kcyB0byB0aGUgZW50aXJlIHdpZHRoIGF2YWlsYWJsZVxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTaG93cyBhIGJ1dHRvbiB0aGF0IHF1aWNrbHkgY2xlYXJzIGFueSBpbnB1dFxuICAgICAqL1xuICBpc0NsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU3dhcHMgdGhlIGRyb3Bkb3duIG9wdGlvbnMgZm9yIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRG9lc24ndCBzaG93IHRoZSBzdWdnZXN0aW9ucyBsaXN0L2Ryb3Bkb3duXG4gICAgICovXG4gIG5vU3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBvbkJsdXI6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHF1ZXJ5IGluIHRoZSBjb21ibyBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmFueSxcbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSB0ZXh0IHF1ZXJ5IGluIHRoZSBzZWFyY2ggYm94IGlzIHBhcnNlZFxuICAgICAqL1xuICBvblNlYXJjaENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgb2YgdGhlIGlucHV0XG4gICAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEV2ZXJ5IG9wdGlvbiBtdXN0IGJlIHRoZSBzYW1lIGhlaWdodCBhbmQgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBpZiB1c2luZyBhIGN1c3RvbSByZW5kZXJcbiAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIG9ubHkgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHNpbmdsZSBvcHRpb24uIFNldCB0byBgeyBhc1BsYWluVGV4dDogdHJ1ZSB9YCB0byBub3QgcmVuZGVyIGlucHV0IHNlbGVjdGlvbiBhcyBwaWxsc1xuICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIERpc3BsYXkgbWF0Y2hpbmcgb3B0aW9ucyBieTpcbiAgICAgKiBgc3RhcnRzV2l0aGA6IG1vdmVzIGl0ZW1zIHRoYXQgc3RhcnQgd2l0aCBzZWFyY2ggdmFsdWUgdG8gdG9wIG9mIHRoZSBsaXN0O1xuICAgICAqIGBub25lYDogZG9uJ3QgY2hhbmdlIHRoZSBzb3J0IG9yZGVyIG9mIGluaXRpYWwgb2JqZWN0XG4gICAgICovXG4gIHNvcnRNYXRjaGVzQnk6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwic3RhcnRzV2l0aFwiXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYmVmb3JlIGlucHV0LiBJdCB3b24ndCBzaG93IGlmIGBzaW5nbGVTZWxlY3Rpb25gIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQSBzcGVjaWFsIGNoYXJhY3RlciB0byB1c2UgYXMgYSB2YWx1ZSBzZXBhcmF0b3IuIFR5cGljYWxseSBhIGNvbW1hIGAsYFxuICAgICAqL1xuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGlucHV0IHNob3VsZCBoYXZlIGZvY3VzIHdoZW4gdGhlIGNvbXBvbmVudCBsb2Fkc1xuICAgICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFJlcXVpcmVkIHdoZW4gcmVuZGVyaW5nIHdpdGhvdXQgYSB2aXNpYmxlIGxhYmVsIGZyb20gW0V1aUZvcm1Sb3ddKC8jL2Zvcm1zL2Zvcm0tbGF5b3V0cykuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFJlZmVyZW5jZSBJRCBvZiBhIHRleHQgZWxlbWVudCBjb250YWluaW5nIHRoZSB2aXNpYmxlIGxhYmVsIGZvciB0aGUgY29tYm8gYm94IHdoZW4gbm90XG4gICAgICogc3VwcGxpZWQgYnkgYGFyaWEtbGFiZWxgIG9yIGZyb20gW0V1aUZvcm1Sb3ddKC8jL2Zvcm1zL2Zvcm0tbGF5b3V0cykuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImtleVwiLCBcImlzR3JvdXBMYWJlbE9wdGlvblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImRhdGEtdGVzdC1zdWJqXCIsIFwiYWN0aXZlT3B0aW9uSW5kZXhcIiwgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgXCJjdXN0b21PcHRpb25UZXh0XCIsIFwiZnVsbFdpZHRoXCIsIFwiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZVwiLCBcImlzTG9hZGluZ1wiLCBcImxpc3RSZWZcIiwgXCJtYXRjaGluZ09wdGlvbnNcIiwgXCJvbkNsb3NlTGlzdFwiLCBcIm9uQ3JlYXRlT3B0aW9uXCIsIFwib25PcHRpb25DbGlja1wiLCBcIm9uT3B0aW9uRW50ZXJLZXlcIiwgXCJvblNjcm9sbFwiLCBcIm9wdGlvblJlZlwiLCBcIm9wdGlvbnNcIiwgXCJwb3NpdGlvblwiLCBcInJlbmRlck9wdGlvblwiLCBcInJvb3RJZFwiLCBcInJvd0hlaWdodFwiLCBcInNjcm9sbFRvSW5kZXhcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInVwZGF0ZVBvc2l0aW9uXCIsIFwid2lkdGhcIiwgXCJkZWxpbWl0ZXJcIiwgXCJ6SW5kZXhcIiwgXCJzdHlsZVwiLCBcImxpc3Rib3hBcmlhTGFiZWxcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0IH0gZnJvbSAncmVhY3Qtd2luZG93JztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi8uLi9mbGV4JztcbmltcG9ydCB7IEV1aUhpZ2hsaWdodCB9IGZyb20gJy4uLy4uL2hpZ2hsaWdodCc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hUaXRsZSB9IGZyb20gJy4vY29tYm9fYm94X3RpdGxlJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUZpbHRlclNlbGVjdEl0ZW0gfSBmcm9tICcuLi8uLi9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UvJztcbmltcG9ydCB7IEV1aVBvcG92ZXJQYW5lbCB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlcl9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIE9QVElPTl9DT05URU5UX0NMQVNTTkFNRSA9ICdldWlDb21ib0JveE9wdGlvbl9fY29udGVudCc7XG5cbnZhciBoaXRFbnRlckJhZGdlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwge1xuICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VudGVyQmFkZ2VcIixcbiAgY29sb3I6IFwiaG9sbG93XCIsXG4gIGljb25UeXBlOiBcInJldHVybktleVwiLFxuICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG59KTtcblxuZXhwb3J0IHZhciBFdWlDb21ib0JveE9wdGlvbnNMaXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0Qm94UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdhaXQgYSBiZWF0IGZvciB0aGUgRE9NIHRvIHVwZGF0ZSwgc2luY2Ugd2UgZGVwZW5kIG9uIERPTSBlbGVtZW50cycgYm91bmRzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMucHJvcHMudXBkYXRlUG9zaXRpb24oX3RoaXMubGlzdFJlZkluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NlTGlzdE9uU2Nyb2xsXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gQ2xvc2UgdGhlIGxpc3Qgd2hlbiBhIHNjcm9sbCBldmVudCBoYXBwZW5zLCBidXQgbm90IGlmIHRoZSBzY3JvbGwgaGFwcGVuZWQgaW4gdGhlIG9wdGlvbnMgbGlzdC5cbiAgICAgIC8vIFRoaXMgbWlycm9ycyBGaXJlZm94J3MgYXBwcm9hY2ggb2YgYXV0by1jbG9zaW5nIGBzZWxlY3RgIGVsZW1lbnRzIG9uc2Nyb2xsLlxuICAgICAgaWYgKF90aGlzLmxpc3RSZWZJbnN0YW5jZSAmJiBldmVudC50YXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uQ2xvc2VMaXN0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMucHJvcHMubGlzdFJlZihyZWYpO1xuXG4gICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldExpc3RCb3hSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdEJveFJlZiA9IHJlZjtcblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgX3RoaXMucHJvcHMubGlzdGJveEFyaWFMYWJlbCk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2lkJywgX3RoaXMucHJvcHMucm9vdElkKCdsaXN0Ym94JykpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnMCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIkxpc3RSb3dcIiwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBfb3B0aW9uJGtleTtcblxuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICAgICAgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICAgIHN0eWxlID0gX3JlZi5zdHlsZTtcbiAgICAgIHZhciBvcHRpb24gPSBkYXRhW2luZGV4XTtcblxuICAgICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgICAgaXNHcm91cExhYmVsT3B0aW9uID0gb3B0aW9uLmlzR3JvdXBMYWJlbE9wdGlvbixcbiAgICAgICAgICBsYWJlbCA9IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMub25PcHRpb25DbGljayxcbiAgICAgICAgICBvcHRpb25SZWYgPSBfdGhpcyRwcm9wcy5vcHRpb25SZWYsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wcy5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wcy5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wcy5yb290SWQ7XG5cbiAgICAgIGlmIChpc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBzdHlsZTogc3R5bGVcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveFRpdGxlLCBudWxsLCBsYWJlbCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hlY2tlZCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmIHNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbCA9PT0gbGFiZWwgJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGNoZWNrZWQgPSAnb24nO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9uSXNGb2N1c2VkID0gYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4O1xuICAgICAgdmFyIG9wdGlvbklzRGlzYWJsZWQgPSBvcHRpb24uaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgb3B0aW9uLmRpc2FibGVkID09PSB0cnVlO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmlsdGVyU2VsZWN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIGtleTogKF9vcHRpb24ka2V5ID0gb3B0aW9uLmtleSkgIT09IG51bGwgJiYgX29wdGlvbiRrZXkgIT09IHZvaWQgMCA/IF9vcHRpb24ka2V5IDogb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgaWYgKG9uT3B0aW9uQ2xpY2spIHtcbiAgICAgICAgICAgIG9uT3B0aW9uQ2xpY2sob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogb3B0aW9uUmVmLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIGluZGV4KSxcbiAgICAgICAgaXNGb2N1c2VkOiBvcHRpb25Jc0ZvY3VzZWQsXG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgIHNob3dJY29uczogc2luZ2xlU2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICBpZDogcm9vdElkKFwiX29wdGlvbi1cIi5jb25jYXQoaW5kZXgpKSxcbiAgICAgICAgdGl0bGU6IGxhYmVsXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgIH0sIHJlbmRlck9wdGlvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBPUFRJT05fQ09OVEVOVF9DTEFTU05BTUVcbiAgICAgIH0sIHJlbmRlck9wdGlvbihvcHRpb24sIHNlYXJjaFZhbHVlLCAnZXVpQ29tYm9Cb3hPcHRpb25fX3JlbmRlck9wdGlvbicpKSA6IF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWUsXG4gICAgICAgIGNsYXNzTmFtZTogT1BUSU9OX0NPTlRFTlRfQ0xBU1NOQU1FXG4gICAgICB9LCBsYWJlbCksIG9wdGlvbklzRm9jdXNlZCAmJiAhb3B0aW9uSXNEaXNhYmxlZCA/IGhpdEVudGVyQmFkZ2UgOiBudWxsKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgLy8gV2FpdCBhIGZyYW1lLCBvdGhlcndpc2UgbW92aW5nIGZvY3VzIGZyb20gb25lIGNvbWJvIGJveCB0byBhbm90aGVyIHdpbGwgcmVzdWx0IGluIHRoZSBjbGFzc1xuICAgICAgLy8gYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBib2R5LlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlUG9zaXRpb24pOyAvLyBGaXJlZm94IHdpbGwgdHJpZ2dlciBhIHNjcm9sbCBldmVudCBpbiBtYW55IGNvbW1vbiBzaXR1YXRpb25zIHdoZW4gdGhlIG9wdGlvbnMgbGlzdCBkaXYgaXMgYXBwZW5kZWRcbiAgICAgIC8vIHRvIHRoZSBET007IGluIHRlc3RpbmcgaXQgd2FzIGFsd2F5cyB3aXRoaW4gMTAwbXMsIGJ1dCBzZXR0aW5nIGEgdGltZW91dCBoZXJlIGZvciA1MDBtcyB0byBiZSBzYWZlXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgX3RoaXMyLmNsb3NlTGlzdE9uU2Nyb2xsLCB7XG4gICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAvLyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFzIHdlIHdvbid0IGNhbGwgcHJldmVudERlZmF1bHRcbiAgICAgICAgICBjYXB0dXJlOiB0cnVlIC8vIHNjcm9sbCBldmVudHMgZG9uJ3QgYnViYmxlLCB0aGV5IG11c3QgYmUgY2FwdHVyZWQgaW5zdGVhZFxuXG4gICAgICAgIH0pO1xuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gcHJldlByb3BzLm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gcHJldlByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IHByZXZQcm9wcy5zZWFyY2hWYWx1ZTsgLy8gV2UgZG9uJ3QgY29tcGFyZSBtYXRjaGluZ09wdGlvbnMgYmVjYXVzZSB0aGF0IHdpbGwgcmVzdWx0IGluIGEgbG9vcC5cblxuICAgICAgaWYgKHNlYXJjaFZhbHVlICE9PSB0aGlzLnByb3BzLnNlYXJjaFZhbHVlIHx8IG9wdGlvbnMgIT09IHRoaXMucHJvcHMub3B0aW9ucyB8fCBzZWxlY3RlZE9wdGlvbnMgIT09IHRoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGlzdFJlZiAmJiB0eXBlb2YgdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCAhPT0gcHJldlByb3BzLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHRoaXMubGlzdFJlZi5zY3JvbGxUb0l0ZW0odGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlUG9zaXRpb24pO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuY2xvc2VMaXN0T25TY3JvbGwsIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkYXRhVGVzdFN1YmogPSBfdGhpcyRwcm9wczJbJ2RhdGEtdGVzdC1zdWJqJ10sXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkID0gX3RoaXMkcHJvcHMyLmFyZUFsbE9wdGlvbnNTZWxlY3RlZCxcbiAgICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHMyLmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLmdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBsaXN0UmVmID0gX3RoaXMkcHJvcHMyLmxpc3RSZWYsXG4gICAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMkcHJvcHMyLm1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICBvbkNsb3NlTGlzdCA9IF90aGlzJHByb3BzMi5vbkNsb3NlTGlzdCxcbiAgICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzMi5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgb25PcHRpb25FbnRlcktleSA9IF90aGlzJHByb3BzMi5vbk9wdGlvbkVudGVyS2V5LFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHMyLm9uU2Nyb2xsLFxuICAgICAgICAgIG9wdGlvblJlZiA9IF90aGlzJHByb3BzMi5vcHRpb25SZWYsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMi5vcHRpb25zLFxuICAgICAgICAgIF90aGlzJHByb3BzMiRwb3NpdGlvbiA9IF90aGlzJHByb3BzMi5wb3NpdGlvbixcbiAgICAgICAgICBwb3NpdGlvbiA9IF90aGlzJHByb3BzMiRwb3NpdGlvbiA9PT0gdm9pZCAwID8gJ2JvdHRvbScgOiBfdGhpcyRwcm9wczIkcG9zaXRpb24sXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMyLnJlbmRlck9wdGlvbixcbiAgICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wczIucm9vdElkLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzMi5yb3dIZWlnaHQsXG4gICAgICAgICAgc2Nyb2xsVG9JbmRleCA9IF90aGlzJHByb3BzMi5zY3JvbGxUb0luZGV4LFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbiA9IF90aGlzJHByb3BzMi51cGRhdGVQb3NpdGlvbixcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzMi53aWR0aCxcbiAgICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczIuZGVsaW1pdGVyLFxuICAgICAgICAgIHpJbmRleCA9IF90aGlzJHByb3BzMi56SW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczIuc3R5bGUsXG4gICAgICAgICAgbGlzdGJveEFyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5saXN0Ym94QXJpYUxhYmVsLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQyKTtcblxuICAgICAgdmFyIGVtcHR5U3RhdGVDb250ZW50O1xuXG4gICAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICAgICAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICAgIHNpemU6IFwibVwiXG4gICAgICAgIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QubG9hZGluZ09wdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkxvYWRpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0pKSk7XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIG1hdGNoaW5nT3B0aW9ucyAmJiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChvbkNyZWF0ZU9wdGlvbiAmJiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgaWYgKGRlbGltaXRlciAmJiBzZWFyY2hWYWx1ZS5pbmNsdWRlcyhkZWxpbWl0ZXIpKSB7XG4gICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5kZWxpbWl0ZXJNZXNzYWdlXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIGVhY2ggaXRlbSBzZXBhcmF0ZWQgYnkge2RlbGltaXRlcn1cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIGRlbGltaXRlcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLCBoaXRFbnRlckJhZGdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUgPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHNlYXJjaFZhbHVlLCBzZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSkge1xuICAgICAgICAgICAgICAvLyBEaXNhbGxvdyBkdXBsaWNhdGUgY3VzdG9tIG9wdGlvbnMuXG4gICAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbHJlYWR5QWRkZWRcIixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIntsYWJlbH0gaGFzIGFscmVhZHkgYmVlbiBhZGRlZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZS5sYWJlbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBoaWdobGlnaHRTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGhpZ2hsaWdodFNlYXJjaFZhbHVlKHRleHQsIHNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoLyhcXHtzZWFyY2hWYWx1ZX0pLywgJ2dpJyk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gdGV4dC5zcGxpdChyZWcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgICAgICB9LCBwYXJ0cy5tYXAoZnVuY3Rpb24gKHBhcnQsIGlkeCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQubWF0Y2gocmVnKSA/IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGlkeFxuICAgICAgICAgICAgICAgICAgfSwgc2VhcmNoVmFsdWUpIDogcGFydDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnRXcmFwcGVyXCJcbiAgICAgICAgICAgICAgfSwgY3VzdG9tT3B0aW9uVGV4dCA/IGhpZ2hsaWdodFNlYXJjaFZhbHVlKGN1c3RvbU9wdGlvblRleHQsIHNlYXJjaFZhbHVlKSA6IF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5jcmVhdGVDdXN0b21PcHRpb25cIixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBcIkFkZCB7c2VhcmNoVmFsdWV9IGFzIGEgY3VzdG9tIG9wdGlvblwiLFxuICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5ub01hdGNoaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7c2VhcmNoVmFsdWV9IGRvZXNuJ3QgbWF0Y2ggYW55IG9wdGlvbnNcIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5ub0F2YWlsYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRoZXJlIGFyZW4ndCBhbnkgb3B0aW9ucyBhdmFpbGFibGVcIlxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKGFyZUFsbE9wdGlvbnNTZWxlY3RlZCkge1xuICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuYWxsT3B0aW9uc1NlbGVjdGVkXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJZb3UndmUgc2VsZWN0ZWQgYWxsIGF2YWlsYWJsZSBvcHRpb25zXCJcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW1wdHlTdGF0ZSA9IGVtcHR5U3RhdGVDb250ZW50ID8gX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgIHNpemU6IFwieHNcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX2VtcHR5XCJcbiAgICAgIH0sIGVtcHR5U3RhdGVDb250ZW50KSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBudW1WaXNpYmxlT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPCA3ID8gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA6IDc7XG4gICAgICB2YXIgaGVpZ2h0ID0gbnVtVmlzaWJsZU9wdGlvbnMgKiAocm93SGVpZ2h0ICsgMSk7IC8vIEFkZCBvbmUgZm9yIHRoZSBib3JkZXJcbiAgICAgIC8vIGJvdW5kZWQgYnkgbWF4LWhlaWdodCBvZiBldWlDb21ib0JveE9wdGlvbnNMaXN0X19yb3dXcmFwXG5cbiAgICAgIHZhciBib3VuZGVkSGVpZ2h0ID0gaGVpZ2h0ID4gMjAwID8gMjAwIDogaGVpZ2h0O1xuXG4gICAgICB2YXIgb3B0aW9uc0xpc3QgPSBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIHtcbiAgICAgICAgaGVpZ2h0OiBib3VuZGVkSGVpZ2h0LFxuICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgIGl0ZW1Db3VudDogbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCxcbiAgICAgICAgaXRlbVNpemU6IHJvd0hlaWdodCxcbiAgICAgICAgaXRlbURhdGE6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgcmVmOiB0aGlzLnNldExpc3RSZWYsXG4gICAgICAgIGlubmVyUmVmOiB0aGlzLnNldExpc3RCb3hSZWYsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfSwgdGhpcy5MaXN0Um93KTtcbiAgICAgIC8qKlxuICAgICAgICogUmV1c2luZyB0aGUgRXVpUG9wb3Zlcl9fcGFuZWwgY2xhc3NlcyB0byBoZWxwIHdpdGggY29uc2lzdGVuY3kvbWFpbnRlbmFuY2UuXG4gICAgICAgKiBCdXQgdGhpcyBzaG91bGQgcmVhbGx5IGJlIGNvbnZlcnRlZCB0byB1c2VyIHRoZSBwb3BvdmVyIGNvbXBvbmVudC5cbiAgICAgICAqL1xuXG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3hPcHRpb25zTGlzdCcpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlclBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgICAgIHBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICAgICAgaGFzU2hhZG93OiBmYWxzZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBwYW5lbFJlZjogdGhpcy5saXN0UmVmQ2FsbGJhY2ssXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveE9wdGlvbnNMaXN0IFwiLmNvbmNhdChkYXRhVGVzdFN1YmopLFxuICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgICAgICAgekluZGV4OiB6SW5kZXhcbiAgICAgICAgfSksXG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgaXNBdHRhY2hlZDogdHJ1ZSxcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0X19yb3dXcmFwXCJcbiAgICAgIH0sIGVtcHR5U3RhdGUgfHwgb3B0aW9uc0xpc3QpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29tYm9Cb3hPcHRpb25zTGlzdDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgJ2RhdGEtdGVzdC1zdWJqJzogJycsXG4gIHJvd0hlaWdodDogMjkgLy8gcm93IGhlaWdodCBvZiBkZWZhdWx0IG9wdGlvbiByZW5kZXJlclxuXG59KTtcblxuRXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG4gIGFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBsaXN0Ym94QXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgY3VzdG9tIHRleHQgb3B0aW9uLiBZb3UgY2FuIHVzZSBge3NlYXJjaFZhbHVlfWAgaW5zaWRlIHlvdXIgc3RyaW5nIHRvIGJldHRlciBjdXN0b21pemUgeW91ciB0ZXh0LlxuICAgICAgICogSXQgd29uJ3Qgc2hvdyBpZiB0aGVyZSdzIG5vIG9uQ3JlYXRlT3B0aW9uLlxuICAgICAgICovXG4gIGN1c3RvbU9wdGlvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBsaXN0UmVmOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIG1hdGNoaW5nT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBvbkNsb3NlTGlzdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DcmVhdGVPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25PcHRpb25FbnRlcktleTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2Nyb2xsOiBQcm9wVHlwZXMuYW55LFxuICBvcHRpb25SZWY6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBBcnJheSBvZiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiBvYmplY3RzLiBTZWUgI0V1aUNvbWJvQm94T3B0aW9uT3B0aW9uXG4gICAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcImJvdHRvbVwiXSksXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIHJvb3RJZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgc2Nyb2xsVG9JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHVwZGF0ZVBvc2l0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB3aWR0aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB6SW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInNlYXJjaFwiLCBcInN0cmljdFwiLCBcImhpZ2hsaWdodEFsbFwiLCBcImhhc1NjcmVlblJlYWRlckhlbHBUZXh0XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpTWFyayB9IGZyb20gJy4uL21hcmsnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIGhpZ2hsaWdodCA9IGZ1bmN0aW9uIGhpZ2hsaWdodChzZWFyY2hTdWJqZWN0LCBzZWFyY2hWYWx1ZSwgaXNTdHJpY3QsIGhpZ2hsaWdodEFsbCwgaGFzU2NyZWVuUmVhZGVySGVscFRleHQpIHtcbiAgaWYgKCFzZWFyY2hWYWx1ZSkge1xuICAgIHJldHVybiBzZWFyY2hTdWJqZWN0O1xuICB9XG5cbiAgaWYgKCFzZWFyY2hTdWJqZWN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaGlnaGxpZ2h0QWxsKSB7XG4gICAgdmFyIGNodW5rcyA9IGdldEhpZ2h0bGlnaHRXb3JkcyhzZWFyY2hTdWJqZWN0LCBzZWFyY2hWYWx1ZSwgaXNTdHJpY3QpO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaHVua3MubWFwKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgdmFyIGVuZCA9IGNodW5rLmVuZCxcbiAgICAgICAgICBoaWdobGlnaHQgPSBjaHVuay5oaWdobGlnaHQsXG4gICAgICAgICAgc3RhcnQgPSBjaHVuay5zdGFydDtcbiAgICAgIHZhciB2YWx1ZSA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCk7XG5cbiAgICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTWFyaywge1xuICAgICAgICAgIGtleTogc3RhcnQsXG4gICAgICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pKTtcbiAgfVxuXG4gIHZhciBub3JtYWxpemVkU2VhcmNoU3ViamVjdCA9IGlzU3RyaWN0ID8gc2VhcmNoU3ViamVjdCA6IHNlYXJjaFN1YmplY3QudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IGlzU3RyaWN0ID8gc2VhcmNoVmFsdWUgOiBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgaW5kZXhPZk1hdGNoID0gbm9ybWFsaXplZFNlYXJjaFN1YmplY3QuaW5kZXhPZihub3JtYWxpemVkU2VhcmNoVmFsdWUpO1xuXG4gIGlmIChpbmRleE9mTWF0Y2ggPT09IC0xKSB7XG4gICAgcmV0dXJuIHNlYXJjaFN1YmplY3Q7XG4gIH1cblxuICB2YXIgcHJlTWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cigwLCBpbmRleE9mTWF0Y2gpO1xuICB2YXIgbWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cihpbmRleE9mTWF0Y2gsIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHZhciBwb3N0TWF0Y2ggPSBzZWFyY2hTdWJqZWN0LnN1YnN0cihpbmRleE9mTWF0Y2ggKyBzZWFyY2hWYWx1ZS5sZW5ndGgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgcHJlTWF0Y2gsIF9fX0Vtb3Rpb25KU1goRXVpTWFyaywge1xuICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFxuICB9LCBtYXRjaCksIHBvc3RNYXRjaCk7XG59O1xuXG52YXIgZ2V0SGlnaHRsaWdodFdvcmRzID0gZnVuY3Rpb24gZ2V0SGlnaHRsaWdodFdvcmRzKHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCkge1xuICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLCBpc1N0cmljdCA/ICdnJyA6ICdnaScpO1xuICB2YXIgbWF0Y2hlcyA9IFtdO1xuICB2YXIgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc2VhcmNoU3ViamVjdCkpICE9PSBudWxsKSB7XG4gICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCxcbiAgICAgIGVuZDogKG1hdGNoLmluZGV4IHx8IDApICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmlsbEluQ2h1bmtzKG1hdGNoZXMsIHNlYXJjaFN1YmplY3QubGVuZ3RoKTtcbn07XG5cbnZhciBmaWxsSW5DaHVua3MgPSBmdW5jdGlvbiBmaWxsSW5DaHVua3MoY2h1bmtzVG9IaWdobGlnaHQsIHRvdGFsTGVuZ3RoKSB7XG4gIHZhciBhbGxDaHVua3MgPSBbXTtcblxuICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKHN0YXJ0LCBlbmQsIGhpZ2hsaWdodCkge1xuICAgIGlmIChlbmQgLSBzdGFydCA+IDApIHtcbiAgICAgIGFsbENodW5rcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgaGlnaGxpZ2h0OiBoaWdobGlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBpZiAoY2h1bmtzVG9IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgYXBwZW5kKDAsIHRvdGFsTGVuZ3RoLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IDA7XG4gICAgY2h1bmtzVG9IaWdobGlnaHQuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIGFwcGVuZChsYXN0SW5kZXgsIGNodW5rLnN0YXJ0LCBmYWxzZSk7XG4gICAgICBhcHBlbmQoY2h1bmsuc3RhcnQsIGNodW5rLmVuZCwgdHJ1ZSk7XG4gICAgICBsYXN0SW5kZXggPSBjaHVuay5lbmQ7XG4gICAgfSk7XG4gICAgYXBwZW5kKGxhc3RJbmRleCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiBhbGxDaHVua3M7XG59O1xuXG5leHBvcnQgdmFyIEV1aUhpZ2hsaWdodCA9IGZ1bmN0aW9uIEV1aUhpZ2hsaWdodChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHNlYXJjaCA9IF9yZWYuc2VhcmNoLFxuICAgICAgX3JlZiRzdHJpY3QgPSBfcmVmLnN0cmljdCxcbiAgICAgIHN0cmljdCA9IF9yZWYkc3RyaWN0ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3RyaWN0LFxuICAgICAgX3JlZiRoaWdobGlnaHRBbGwgPSBfcmVmLmhpZ2hsaWdodEFsbCxcbiAgICAgIGhpZ2hsaWdodEFsbCA9IF9yZWYkaGlnaGxpZ2h0QWxsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaGlnaGxpZ2h0QWxsLFxuICAgICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIGhpZ2hsaWdodChjaGlsZHJlbiwgc2VhcmNoLCBzdHJpY3QsIGhpZ2hsaWdodEFsbCwgaGFzU2NyZWVuUmVhZGVySGVscFRleHQpKTtcbn07XG5FdWlIaWdobGlnaHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBzdHJpbmcgdG8gaGlnaGxpZ2h0IGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBXaGF0IHRvIHNlYXJjaCBmb3JcbiAgICAgICAqL1xuICBzZWFyY2g6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFNob3VsZCB0aGUgc2VhcmNoIGJlIHN0cmljdCBvciBub3RcbiAgICAgICAqL1xuICBzdHJpY3Q6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogU2hvdWxkIGhpZ2hsaWdodCBhbGwgbWF0Y2hlc1xuICAgICAgICovXG4gIGhpZ2hsaWdodEFsbDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1NjcmVlblJlYWRlckhlbHBUZXh0XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlNYXJrU3R5bGVzIH0gZnJvbSAnLi9tYXJrLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlNYXJrID0gZnVuY3Rpb24gRXVpTWFyayhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9IF9yZWYuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9IF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2NyZWVuUmVhZGVySCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgdXNlVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgaGlnaGxpZ2h0U3RhcnQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodFN0YXJ0JywgJ2hpZ2hsaWdodCBzdGFydCcpO1xuICB2YXIgaGlnaGxpZ2h0RW5kID0gdXNlRXVpSTE4bignZXVpTWFyay5oaWdobGlnaHRFbmQnLCAnaGlnaGxpZ2h0IGVuZCcpO1xuICB2YXIgc3R5bGVzID0gZXVpTWFya1N0eWxlcyh1c2VUaGVtZSwge1xuICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICBoaWdobGlnaHRTdGFydDogaGlnaGxpZ2h0U3RhcnQsXG4gICAgaGlnaGxpZ2h0RW5kOiBoaWdobGlnaHRFbmRcbiAgfSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTWFyaycsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibWFya1wiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBbc3R5bGVzLCBcIjtsYWJlbDpFdWlNYXJrO1wiXSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlNYXJrLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogU2V0IHRvIGBmYWxzZWAgdG8gcmVtb3ZlIHRoZSBDU1MgOmJlZm9yZSBhbmQgOmFmdGVyXG4gICAgICAgKiBzY3JlZW4gcmVhZGVyIGhlbHBlciB0ZXh0XG4gICAgICAgKi9cbiAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuZXhwb3J0IHZhciBldWlNYXJrU3R5bGVzID0gZnVuY3Rpb24gZXVpTWFya1N0eWxlcyhfcmVmLCBfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG4gIHZhciBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9IF9yZWYyLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgICAgaGlnaGxpZ2h0U3RhcnQgPSBfcmVmMi5oaWdobGlnaHRTdGFydCxcbiAgICAgIGhpZ2hsaWdodEVuZCA9IF9yZWYyLmhpZ2hsaWdodEVuZDtcbiAgLy8gVE9ETzogV2FzICRldWlGb2N1c0JhY2tncm91bmRDb2xvclxuICB2YXIgdHJhbnNwYXJlbmN5ID0ge1xuICAgIExJR0hUOiAwLjEsXG4gICAgREFSSzogMC4zXG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLnByaW1hcnksIHRyYW5zcGFyZW5jeVtjb2xvck1vZGVdKSwgXCI7Zm9udC13ZWlnaHQ6XCIsIGV1aVRoZW1lLmZvbnQud2VpZ2h0LmJvbGQsIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7XCIsIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID09PSB0cnVlICYmIFwiXFxuICAgICAgJjpiZWZvcmUsXFxuICAgICAgJjphZnRlciB7XFxuICAgICAgICBcIi5jb25jYXQoZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOmJlZm9yZSB7XFxuICAgICAgICBjb250ZW50OiAnIFtcIikuY29uY2F0KGhpZ2hsaWdodFN0YXJ0LCBcIl0gJztcXG4gICAgICB9XFxuXFxuICAgICAgJjphZnRlciB7XFxuICAgICAgICBjb250ZW50OiAnIFtcIikuY29uY2F0KGhpZ2hsaWdodEVuZCwgXCJdICc7XFxuICAgICAgfVxcbiAgICBcIiksIFwiOztsYWJlbDpldWlNYXJrU3R5bGVzO1wiKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hUaXRsZSA9IGZ1bmN0aW9uIEV1aUNvbWJvQm94VGl0bGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94VGl0bGVcIlxuICB9LCBjaGlsZHJlbik7XG59O1xuRXVpQ29tYm9Cb3hUaXRsZS5wcm9wVHlwZXMgPSB7fTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImNoZWNrZWRcIiwgXCJpc0ZvY3VzZWRcIiwgXCJzaG93SWNvbnNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIHJlc29sdmVJY29uQW5kQ29sb3IgPSBmdW5jdGlvbiByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpIHtcbiAgaWYgKCFjaGVja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246ICdlbXB0eSdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrZWQgPT09ICdvbicgPyB7XG4gICAgaWNvbjogJ2NoZWNrJyxcbiAgICBjb2xvcjogJ3RleHQnXG4gIH0gOiB7XG4gICAgaWNvbjogJ2Nyb3NzJyxcbiAgICBjb2xvcjogJ3RleHQnXG4gIH07XG59O1xuXG5leHBvcnQgdmFyIEV1aUZpbHRlclNlbGVjdEl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZpbHRlclNlbGVjdEl0ZW0sIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRmlsdGVyU2VsZWN0SXRlbSk7XG5cbiAgZnVuY3Rpb24gRXVpRmlsdGVyU2VsZWN0SXRlbSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmlsdGVyU2VsZWN0SXRlbSk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuYnV0dG9uUmVmKSB7XG4gICAgICAgIF90aGlzLmJ1dHRvblJlZi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhc0ZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5oYXNGb2N1cztcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGaWx0ZXJTZWxlY3RJdGVtLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBjaGVja2VkID0gX3RoaXMkcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRwcm9wcy5pc0ZvY3VzZWQsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMuc2hvd0ljb25zLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmlsdGVyU2VsZWN0SXRlbScsIHtcbiAgICAgICAgJ2V1aUZpbHRlclNlbGVjdEl0ZW0taXNGb2N1c2VkJzogaXNGb2N1c2VkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGljb25Ob2RlO1xuXG4gICAgICBpZiAoc2hvd0ljb25zKSB7XG4gICAgICAgIHZhciBfcmVzb2x2ZUljb25BbmRDb2xvciA9IHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCksXG4gICAgICAgICAgICBpY29uID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuaWNvbixcbiAgICAgICAgICAgIGNvbG9yID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuY29sb3I7XG5cbiAgICAgICAgaWNvbk5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgIHR5cGU6IGljb25cbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmJ1dHRvblJlZiA9IF9yZWY7XG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBpc0ZvY3VzZWQsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWRcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIixcbiAgICAgICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgICAgIH0sIGljb25Ob2RlLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGaWx0ZXJTZWxlY3RJdGVtX19jb250ZW50XCIsXG4gICAgICAgIGNvbXBvbmVudDogXCJzcGFuXCJcbiAgICAgIH0sIGNoaWxkcmVuKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGaWx0ZXJTZWxlY3RJdGVtO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRmlsdGVyU2VsZWN0SXRlbSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBzaG93SWNvbnM6IHRydWVcbn0pO1xuXG5FdWlGaWx0ZXJTZWxlY3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCJdKSxcbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGZsYXR0ZW5PcHRpb25Hcm91cHMgPSBmdW5jdGlvbiBmbGF0dGVuT3B0aW9uR3JvdXBzKG9wdGlvbnNPckdyb3Vwcykge1xuICByZXR1cm4gb3B0aW9uc09yR3JvdXBzLnJlZHVjZShmdW5jdGlvbiAob3B0aW9ucywgb3B0aW9uT3JHcm91cCkge1xuICAgIGlmIChvcHRpb25Pckdyb3VwLm9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNvbmNhdChvcHRpb25Pckdyb3VwLm9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnB1c2gob3B0aW9uT3JHcm91cCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sIFtdKTtcbn07XG5leHBvcnQgdmFyIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHNlYXJjaFZhbHVlLCBzZWxlY3RlZE9wdGlvbnMsIG9wdGlvbktleSkge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSAmJiAoIW9wdGlvbktleSB8fCBvcHRpb24ua2V5ID09PSBvcHRpb25LZXkpO1xuICB9KTtcbn07XG5cbnZhciBjb2xsZWN0TWF0Y2hpbmdPcHRpb24gPSBmdW5jdGlvbiBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oYWNjdW11bGF0b3IsIG9wdGlvbiwgc2VsZWN0ZWRPcHRpb25zLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQpIHtcbiAgLy8gT25seSBzaG93IG9wdGlvbnMgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBzZWxlY3RlZCB1bmxlc3MgcmVxdWVzdGVkLlxuICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKG9wdGlvbi5sYWJlbCwgc2VsZWN0ZWRPcHRpb25zLCBvcHRpb24ua2V5KTtcblxuICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIXNob3dQcmV2U2VsZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIG9wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlLWZpbHRlcmVkIHRoZW4gd2UgY2FuIHNraXAgZmlsdGVyaW5nIGFnYWluc3QgdGhlIHNlYXJjaCB2YWx1ZS5cblxuXG4gIGlmIChpc1ByZUZpbHRlcmVkKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub3JtYWxpemVkT3B0aW9uID0gb3B0aW9uLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub3JtYWxpemVkT3B0aW9uLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgZ2V0TWF0Y2hpbmdPcHRpb25zID0gZnVuY3Rpb24gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkT3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQsIHNvcnRNYXRjaGVzQnkpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gW107XG4gIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgaWYgKG9wdGlvbi5vcHRpb25zKSB7XG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zRm9yR3JvdXAgPSBbXTtcbiAgICAgIG9wdGlvbi5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwT3B0aW9uKSB7XG4gICAgICAgIGNvbGxlY3RNYXRjaGluZ09wdGlvbihtYXRjaGluZ09wdGlvbnNGb3JHcm91cCwgZ3JvdXBPcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBBZGQgb3B0aW9uIGZvciBncm91cCBsYWJlbFxuICAgICAgICBtYXRjaGluZ09wdGlvbnMucHVzaCh7XG4gICAgICAgICAga2V5OiBvcHRpb24ua2V5LFxuICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiB0cnVlXG4gICAgICAgIH0pOyAvLyBBZGQgbWF0Y2hpbmcgb3B0aW9ucyBmb3IgZ3JvdXBcbiAgICAgICAgLy8gdXNlIGNvbmNhdCBvdmVyIHNwcmVhZGluZyB0byBzdXBwb3J0IGxhcmdlIGFycmF5cyAtIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL2phdmFzY3JpcHQtYXJndW1lbnQtY291bnRcblxuICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBtYXRjaGluZ09wdGlvbnMuY29uY2F0KG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9ucywgb3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoc29ydE1hdGNoZXNCeSA9PT0gJ3N0YXJ0c1dpdGgnKSB7XG4gICAgdmFyIHJlZk9iaiA9IHtcbiAgICAgIHN0YXJ0V2l0aDogW10sXG4gICAgICBvdGhlcnM6IFtdXG4gICAgfTtcbiAgICBtYXRjaGluZ09wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0LmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChub3JtYWxpemVkU2VhcmNoVmFsdWUpKSB7XG4gICAgICAgIHJlZk9iai5zdGFydFdpdGgucHVzaChvYmplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmT2JqLm90aGVycy5wdXNoKG9iamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocmVmT2JqLnN0YXJ0V2l0aCksIF90b0NvbnN1bWFibGVBcnJheShyZWZPYmoub3RoZXJzKSk7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hpbmdPcHRpb25zO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImtleVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJvbkNsaWNrXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEF1dG9zaXplSW5wdXQgZnJvbSAncmVhY3QtaW5wdXQtYXV0b3NpemUnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXQgfSBmcm9tICcuLi8uLi9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQnO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hQaWxsIH0gZnJvbSAnLi9jb21ib19ib3hfcGlsbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveElucHV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveElucHV0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbWJvQm94SW5wdXQpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94SW5wdXQpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVQb3NpdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXYWl0IGEgYmVhdCBmb3IgdGhlIERPTSB0byB1cGRhdGUsIHNpbmNlIHdlIGRlcGVuZCBvbiBET00gZWxlbWVudHMnIGJvdW5kcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnByb3BzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0T25DaGFuZ2VcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMuc2VhcmNoVmFsdWU7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgdmFyIGF1dG9TaXplSW5wdXRSZWYgPSBfdGhpcy5wcm9wcy5hdXRvU2l6ZUlucHV0UmVmO1xuXG4gICAgICBpZiAoYXV0b1NpemVJbnB1dFJlZikge1xuICAgICAgICBhdXRvU2l6ZUlucHV0UmVmKHJlZik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3hJbnB1dCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IHByZXZQcm9wcy5zZWFyY2hWYWx1ZTsgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIHBvc2l0aW9uIG9mIGV2ZXJ5dGhpbmcgaWYgdGhlIHVzZXIgZW50ZXJzIGVub3VnaCBpbnB1dCB0byBjaGFuZ2VcbiAgICAgIC8vIHRoZSBzaXplIG9mIHRoZSBpbnB1dC5cblxuICAgICAgaWYgKHNlYXJjaFZhbHVlICE9PSB0aGlzLnByb3BzLnNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQgPSBfdGhpcyRwcm9wczIuZm9jdXNlZE9wdGlvbklkLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLmhhc1NlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzMi5pZCxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMyLmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNMaXN0T3BlbiA9IF90aGlzJHByb3BzMi5pc0xpc3RPcGVuLFxuICAgICAgICAgIG5vSWNvbiA9IF90aGlzJHByb3BzMi5ub0ljb24sXG4gICAgICAgICAgb25DbGVhciA9IF90aGlzJHByb3BzMi5vbkNsZWFyLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25DbGljayxcbiAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2VMaXN0Q2xpY2ssXG4gICAgICAgICAgb25PcGVuTGlzdENsaWNrID0gX3RoaXMkcHJvcHMyLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICBvblJlbW92ZU9wdGlvbiA9IF90aGlzJHByb3BzMi5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgICByb290SWQgPSBfdGhpcyRwcm9wczIucm9vdElkLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uUHJvcCA9IF90aGlzJHByb3BzMi5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdG9nZ2xlQnV0dG9uUmVmID0gX3RoaXMkcHJvcHMyLnRvZ2dsZUJ1dHRvblJlZixcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzMi52YWx1ZSxcbiAgICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMyLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMyLmFwcGVuZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczJbJ2FyaWEtbGFiZWxsZWRieSddO1xuICAgICAgdmFyIHNpbmdsZVNlbGVjdGlvbiA9IEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uUHJvcCk7XG4gICAgICB2YXIgYXNQbGFpblRleHQgPSBzaW5nbGVTZWxlY3Rpb25Qcm9wICYmIF90eXBlb2Yoc2luZ2xlU2VsZWN0aW9uUHJvcCkgPT09ICdvYmplY3QnICYmIHNpbmdsZVNlbGVjdGlvblByb3AuYXNQbGFpblRleHQgfHwgZmFsc2U7XG4gICAgICB2YXIgcGlsbHMgPSBzZWxlY3RlZE9wdGlvbnMgPyBzZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgICAgICBsYWJlbCA9IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgIGNvbG9yID0gb3B0aW9uLmNvbG9yLFxuICAgICAgICAgICAgb25DbGljayA9IG9wdGlvbi5vbkNsaWNrLFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG5cbiAgICAgICAgdmFyIHBpbGxPbkNsb3NlID0gaXNEaXNhYmxlZCB8fCBzaW5nbGVTZWxlY3Rpb24gfHwgb25DbGljayA/IHVuZGVmaW5lZCA6IG9uUmVtb3ZlT3B0aW9uO1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb21ib0JveFBpbGwsIF9leHRlbmRzKHtcbiAgICAgICAgICBvcHRpb246IG9wdGlvbixcbiAgICAgICAgICBvbkNsb3NlOiBwaWxsT25DbG9zZSxcbiAgICAgICAgICBrZXk6IGtleSAhPT0gbnVsbCAmJiBrZXkgIT09IHZvaWQgMCA/IGtleSA6IGxhYmVsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgICAgb25DbGlja0FyaWFMYWJlbDogb25DbGljayA/ICdDaGFuZ2UnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGFzUGxhaW5UZXh0OiBhc1BsYWluVGV4dFxuICAgICAgICB9LCByZXN0KSwgbGFiZWwpO1xuICAgICAgfSkgOiBudWxsO1xuICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2U7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZUlkO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNGb2N1cykge1xuICAgICAgICB2YXIgcmVhZFBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyBcIlwiLmNvbmNhdChwbGFjZWhvbGRlciwgXCIuXCIpIDogJyc7XG4gICAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCA9IFwiQ29tYm8gYm94LiBTZWxlY3RlZC4gXCIuY29uY2F0KHNlYXJjaFZhbHVlID8gXCJcIi5jb25jYXQoc2VhcmNoVmFsdWUsIFwiLiBTZWxlY3RlZC4gXCIpIDogJycpLmNvbmNhdChzZWxlY3RlZE9wdGlvbnMgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDAgPyBcIlwiLmNvbmNhdCh2YWx1ZSwgXCIuIFByZXNzIEJhY2tzcGFjZSB0byBkZWxldGUgXCIpLmNvbmNhdChzZWxlY3RlZE9wdGlvbnNbc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdLmxhYmVsLCBcIi4gXCIpIDogJycsIFwiQ29tYm8gYm94IGlucHV0LiBcIikuY29uY2F0KHJlYWRQbGFjZWhvbGRlciwgXCIgVHlwZSBzb21lIHRleHQgb3IsIHRvIGRpc3BsYXkgYSBsaXN0IG9mIGNob2ljZXMsIHByZXNzIERvd24gQXJyb3cuIFwiKSArICdUbyBleGl0IHRoZSBsaXN0IG9mIGNob2ljZXMsIHByZXNzIEVzY2FwZS4nO1xuICAgICAgICByZW1vdmVPcHRpb25NZXNzYWdlSWQgPSByb290SWQoJ3JlbW92ZU9wdGlvbk1lc3NhZ2UnKTsgLy8gYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgd2lsbCByZWFkIHRoaXMgbWVzc2FnZSBhbG91ZCBpbW1lZGlhdGVseSBvbmNlIGl0IGVudGVycyB0aGUgRE9NLlxuICAgICAgICAvLyBXZSdsbCByZW5kZXIgdG8gdGhlIERPTSB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cyBhbmQgcmVtb3ZlIGl0IHdoZW4gdGhlIGlucHV0IGxvc2VzIGZvY3VzLlxuICAgICAgICAvLyBXZSdsbCB1c2UgYXJpYS1oaWRkZW4gdG8gcHJldmVudCBkZWZhdWx0IGFyaWEgaW5mb3JtYXRpb24gZnJvbSBiZWluZyByZWFkIGJ5IHRoZSBzY3JlZW5cbiAgICAgICAgLy8gcmVhZGVyLlxuXG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2UgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgICAgIGlkOiByZW1vdmVPcHRpb25NZXNzYWdlSWRcbiAgICAgICAgfSwgcmVtb3ZlT3B0aW9uTWVzc2FnZUNvbnRlbnQpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBsYWNlaG9sZGVyTWVzc2FnZTtcblxuICAgICAgaWYgKHBsYWNlaG9sZGVyICYmIHNlbGVjdGVkT3B0aW9ucyAmJiAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAmJiAhc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgcGxhY2Vob2xkZXJNZXNzYWdlID0gX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveFBsYWNlaG9sZGVyXCJcbiAgICAgICAgfSwgcGxhY2Vob2xkZXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xpY2tQcm9wcyA9IHt9O1xuXG4gICAgICBpZiAoIWlzRGlzYWJsZWQgJiYgb25DbGVhciAmJiBoYXNTZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgY2xpY2tQcm9wcy5jbGVhciA9IHtcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hDbGVhckJ1dHRvbicsXG4gICAgICAgICAgb25DbGljazogb25DbGVhclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgaWNvbjtcblxuICAgICAgaWYgKCFub0ljb24pIHtcbiAgICAgICAgaWNvbiA9IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IGlzTGlzdE9wZW4gPyAnQ2xvc2UgbGlzdCBvZiBvcHRpb25zJyA6ICdPcGVuIGxpc3Qgb2Ygb3B0aW9ucycsXG4gICAgICAgICAgJ2RhdGEtdGVzdC1zdWJqJzogJ2NvbWJvQm94VG9nZ2xlTGlzdEJ1dHRvbicsXG4gICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgICAgb25DbGljazogaXNMaXN0T3BlbiAmJiAhaXNEaXNhYmxlZCA/IG9uQ2xvc2VMaXN0Q2xpY2sgOiBvbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgICAgcmVmOiB0b2dnbGVCdXR0b25SZWYsXG4gICAgICAgICAgc2lkZTogJ3JpZ2h0JyxcbiAgICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgICAgdHlwZTogJ2Fycm93RG93bidcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHdyYXBDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcCcsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tbm9XcmFwJzogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC1pc0xvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLWlzQ2xlYXJhYmxlJzogb25DbGVhcixcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtLWluR3JvdXAnOiBwcmVwZW5kIHx8IGFwcGVuZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dCwgX2V4dGVuZHMoe1xuICAgICAgICBpY29uOiBpY29uXG4gICAgICB9LCBjbGlja1Byb3BzLCB7XG4gICAgICAgIGlucHV0SWQ6IGlkLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kXG4gICAgICB9KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogd3JhcENsYXNzZXMsXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveElucHV0XCIsXG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgIHRhYkluZGV4OiAtMSAvLyBiZWNvbWVzIG9uQmx1ciBldmVudCdzIHJlbGF0ZWRUYXJnZXQsIG90aGVyd2lzZSByZWxhdGVkVGFyZ2V0IGlzIG51bGwgd2hlbiBjbGlja2luZyBvbiB0aGlzIGRpdlxuXG4gICAgICB9LCAhc2luZ2xlU2VsZWN0aW9uIHx8ICFzZWFyY2hWYWx1ZSA/IHBpbGxzIDogbnVsbCwgcGxhY2Vob2xkZXJNZXNzYWdlLCBfX19FbW90aW9uSlNYKEF1dG9zaXplSW5wdXQsIHtcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogZm9jdXNlZE9wdGlvbklkLFxuICAgICAgICBcImFyaWEtYXV0b2NvbXBsZXRlXCI6IFwibGlzdFwiLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogaXNMaXN0T3BlbiA/IHJvb3RJZCgnbGlzdGJveCcpIDogJycsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBpc0xpc3RPcGVuLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRieSxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94X19pbnB1dFwiLFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY29tYm9Cb3hTZWFyY2hJbnB1dFwiLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbnB1dFJlZjogaW5wdXRSZWYsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmlucHV0T25DaGFuZ2UsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgcmVmOiB0aGlzLmlucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBmb250U2l6ZTogMTRcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1c1xuICAgICAgfSksIHJlbW92ZU9wdGlvbk1lc3NhZ2UpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29tYm9Cb3hJbnB1dDtcbn0oQ29tcG9uZW50KTtcbkV1aUNvbWJvQm94SW5wdXQucHJvcFR5cGVzID0ge1xuICBhdXRvU2l6ZUlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb2N1c2VkT3B0aW9uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGhhc1NlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMaXN0T3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgbm9JY29uOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkJsdXI6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsb3NlTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIG9uT3Blbkxpc3RDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25SZW1vdmVPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkKSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIHRvZ2dsZUJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcbiAgdXBkYXRlUG9zaXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGFwcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImFzUGxhaW5UZXh0XCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNsaWNrQXJpYUxhYmVsXCIsIFwib25DbG9zZVwiLCBcIm9wdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94UGlsbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3hQaWxsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbWJvQm94UGlsbCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hQaWxsKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveFBpbGwpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsb3NlQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbG9zZSA9IF90aGlzJHByb3BzLm9uQ2xvc2UsXG4gICAgICAgICAgb3B0aW9uID0gX3RoaXMkcHJvcHMub3B0aW9uO1xuXG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICBvbkNsb3NlKG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3hQaWxsLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFzUGxhaW5UZXh0ID0gX3RoaXMkcHJvcHMyLmFzUGxhaW5UZXh0LFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wczIuY29sb3IsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIG9uQ2xpY2tBcmlhTGFiZWwgPSBfdGhpcyRwcm9wczIub25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2UsXG4gICAgICAgICAgb3B0aW9uID0gX3RoaXMkcHJvcHMyLm9wdGlvbixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveFBpbGwnLCB7XG4gICAgICAgICdldWlDb21ib0JveFBpbGwtLXBsYWluVGV4dCc6IGFzUGxhaW5UZXh0XG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIG9uQ2xpY2tQcm9wcyA9IG9uQ2xpY2sgJiYgb25DbGlja0FyaWFMYWJlbCA/IHtcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgb25DbGlja0FyaWFMYWJlbDogb25DbGlja0FyaWFMYWJlbFxuICAgICAgfSA6IHt9O1xuXG4gICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hQaWxsLnJlbW92ZVNlbGVjdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiUmVtb3ZlIHtjaGlsZHJlbn0gZnJvbSBzZWxlY3Rpb24gaW4gdGhpcyBncm91cFwiLFxuICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAocmVtb3ZlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICAgIGljb25PbkNsaWNrOiBfdGhpczIub25DbG9zZUJ1dHRvbkNsaWNrLFxuICAgICAgICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IHJlbW92ZVNlbGVjdGlvbixcbiAgICAgICAgICAgIGljb25TaWRlOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICBpY29uVHlwZTogXCJjcm9zc1wiLFxuICAgICAgICAgICAgdGl0bGU6IGNoaWxkcmVuXG4gICAgICAgICAgfSwgb25DbGlja1Byb3BzLCByZXN0KSwgY2hpbGRyZW4pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFzUGxhaW5UZXh0KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICB0aXRsZTogY2hpbGRyZW5cbiAgICAgIH0sIHJlc3QsIG9uQ2xpY2tQcm9wcyksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29tYm9Cb3hQaWxsO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hQaWxsLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNvbG9yOiAnaG9sbG93J1xufSk7XG5cbkV1aUNvbWJvQm94UGlsbC5wcm9wVHlwZXMgPSB7XG4gIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb3B0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJhY3RpdmVQYWdlXCIsIFwiaXRlbXNQZXJQYWdlXCIsIFwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiLCBcInNob3dQZXJQYWdlT3B0aW9uc1wiLCBcIm9uQ2hhbmdlSXRlbXNQZXJQYWdlXCIsIFwib25DaGFuZ2VQYWdlXCIsIFwicGFnZUNvdW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtLCBFdWlDb250ZXh0TWVudVBhbmVsIH0gZnJvbSAnLi4vLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi8uLi9mbGV4JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb24gfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi8uLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUGFnaW5hdGlvbiA9IGZ1bmN0aW9uIEV1aVRhYmxlUGFnaW5hdGlvbihfcmVmKSB7XG4gIHZhciBhY3RpdmVQYWdlID0gX3JlZi5hY3RpdmVQYWdlLFxuICAgICAgX3JlZiRpdGVtc1BlclBhZ2UgPSBfcmVmLml0ZW1zUGVyUGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZSA9IF9yZWYkaXRlbXNQZXJQYWdlID09PSB2b2lkIDAgPyA1MCA6IF9yZWYkaXRlbXNQZXJQYWdlLFxuICAgICAgX3JlZiRpdGVtc1BlclBhZ2VPcHRpID0gX3JlZi5pdGVtc1BlclBhZ2VPcHRpb25zLFxuICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucyA9IF9yZWYkaXRlbXNQZXJQYWdlT3B0aSA9PT0gdm9pZCAwID8gWzEwLCAyMCwgNTAsIDEwMF0gOiBfcmVmJGl0ZW1zUGVyUGFnZU9wdGksXG4gICAgICBfcmVmJHNob3dQZXJQYWdlT3B0aW8gPSBfcmVmLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICAgIHNob3dQZXJQYWdlT3B0aW9ucyA9IF9yZWYkc2hvd1BlclBhZ2VPcHRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc2hvd1BlclBhZ2VPcHRpbyxcbiAgICAgIF9yZWYkb25DaGFuZ2VJdGVtc1BlciA9IF9yZWYub25DaGFuZ2VJdGVtc1BlclBhZ2UsXG4gICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZSA9IF9yZWYkb25DaGFuZ2VJdGVtc1BlciA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkge30gOiBfcmVmJG9uQ2hhbmdlSXRlbXNQZXIsXG4gICAgICBvbkNoYW5nZVBhZ2UgPSBfcmVmLm9uQ2hhbmdlUGFnZSxcbiAgICAgIHBhZ2VDb3VudCA9IF9yZWYucGFnZUNvdW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzUG9wb3Zlck9wZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIHRvZ2dsZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmdW5jdGlvbiAoaXNPcGVuKSB7XG4gICAgICByZXR1cm4gIWlzT3BlbjtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgY2xvc2VQb3BvdmVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIHtcbiAgICBzaXplOiBcInhzXCIsXG4gICAgY29sb3I6IFwidGV4dFwiLFxuICAgIGljb25UeXBlOiBcImFycm93RG93blwiLFxuICAgIGljb25TaWRlOiBcInJpZ2h0XCIsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvblBvcG92ZXJCdXR0b25cIixcbiAgICBvbkNsaWNrOiB0b2dnbGVQb3BvdmVyXG4gIH0sIGl0ZW1zUGVyUGFnZSA9PT0gMCA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5hbGxSb3dzXCIsXG4gICAgZGVmYXVsdDogXCJTaG93aW5nIGFsbCByb3dzXCJcbiAgfSkgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24ucm93c1BlclBhZ2VcIixcbiAgICBkZWZhdWx0OiBcIlJvd3MgcGVyIHBhZ2VcIlxuICB9KSwgXCI6IFwiLCBpdGVtc1BlclBhZ2UpKTtcblxuICB2YXIgaXRlbXMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXRlbXNQZXJQYWdlT3B0aW9ucy5tYXAoZnVuY3Rpb24gKGl0ZW1zUGVyUGFnZU9wdGlvbikge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgIGtleTogaXRlbXNQZXJQYWdlT3B0aW9uLFxuICAgICAgICBpY29uOiBpdGVtc1BlclBhZ2VPcHRpb24gPT09IGl0ZW1zUGVyUGFnZSA/ICdjaGVjaycgOiAnZW1wdHknLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgICAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlKGl0ZW1zUGVyUGFnZU9wdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb24tXCIuY29uY2F0KGl0ZW1zUGVyUGFnZU9wdGlvbiwgXCItcm93c1wiKVxuICAgICAgfSwgaXRlbXNQZXJQYWdlT3B0aW9uID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblNob3dBbGxSb3dzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2hvdyBhbGwgcm93c1wiXG4gICAgICB9KSA6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24ucm93c1BlclBhZ2VPcHRpb25cIixcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcm93c1BlclBhZ2U6IGl0ZW1zUGVyUGFnZU9wdGlvblxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiBcIntyb3dzUGVyUGFnZX0gcm93c1wiXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0sIFtpdGVtc1BlclBhZ2VPcHRpb25zLCBpdGVtc1BlclBhZ2UsIG9uQ2hhbmdlSXRlbXNQZXJQYWdlLCBjbG9zZVBvcG92ZXJdKTtcblxuICB2YXIgaXRlbXNQZXJQYWdlUG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgIGJ1dHRvbjogYnV0dG9uLFxuICAgIGlzT3BlbjogaXNQb3BvdmVyT3BlbixcbiAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICBhbmNob3JQb3NpdGlvbjogXCJ1cFJpZ2h0XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgaXRlbXM6IGl0ZW1zXG4gIH0pKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgIHdyYXA6IHRydWUsXG4gICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aS14U2Nyb2xsXCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIHNob3dQZXJQYWdlT3B0aW9ucyAmJiBpdGVtc1BlclBhZ2VQb3BvdmVyKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGl0ZW1zUGVyUGFnZSA+IDAgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uLCBfZXh0ZW5kcyh7XG4gICAgcGFnZUNvdW50OiBwYWdlQ291bnQsXG4gICAgYWN0aXZlUGFnZTogYWN0aXZlUGFnZSxcbiAgICBvblBhZ2VDbGljazogb25DaGFuZ2VQYWdlXG4gIH0sIHJlc3QpKSkpO1xufTtcbkV1aVRhYmxlUGFnaW5hdGlvbi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIE9wdGlvbiB0byBjb21wbGV0ZWx5IGhpZGUgdGhlIFwiUm93cyBwZXIgcGFnZVwiIHNlbGVjdG9yLlxuICAgICAqL1xuICBzaG93UGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEN1cnJlbnQgc2VsZWN0aW9uIGZvciBcIlJvd3MgcGVyIHBhZ2VcIi5cbiAgICAgKiBQYXNzIGAwYCB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZCBcIlNob3cgYWxsXCIgb3B0aW9uIGFuZCBoaWRlIHRoZSBwYWdpbmF0aW9uLlxuICAgICAqL1xuICBpdGVtc1BlclBhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIGFycmF5IG9mIG9wdGlvbnMgZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB0byBjcmVhdGUgYSBcIlNob3cgYWxsXCIgb3B0aW9uLlxuICAgICAqL1xuICBpdGVtc1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayBzZWxlY3RlZCBgcGFnZVNpemVgIG51bWJlclxuICAgICAqL1xuICBvbkNoYW5nZUl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlUGFnZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogUmVxdWlyZXMgdGhlIGBpZGAgb2YgdGhlIHRhYmxlIGJlaW5nIGNvbnRyb2xsZWRcbiAgICAgKi9cbiAgXCJhcmlhLWNvbnRyb2xzXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicGFnZUNvdW50XCIsIFwiYWN0aXZlUGFnZVwiLCBcIm9uUGFnZUNsaWNrXCIsIFwiY29tcHJlc3NlZFwiLCBcImFyaWEtY29udHJvbHNcIiwgXCJyZXNwb25zaXZlXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uQnV0dG9uIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJMThuLCB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uX2Fycm93JztcbmltcG9ydCB7IHVzZUlzV2l0aGluQnJlYWtwb2ludHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIE1BWF9WSVNJQkxFX1BBR0VTID0gNTtcbnZhciBOVU1CRVJfU1VSUk9VTkRJTkdfUEFHRVMgPSBNYXRoLmZsb29yKE1BWF9WSVNJQkxFX1BBR0VTICogMC41KTtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbiA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHBhZ2VDb3VudCA9IF9yZWYucGFnZUNvdW50LFxuICAgICAgcGFnZUNvdW50ID0gX3JlZiRwYWdlQ291bnQgPT09IHZvaWQgMCA/IDEgOiBfcmVmJHBhZ2VDb3VudCxcbiAgICAgIF9yZWYkYWN0aXZlUGFnZSA9IF9yZWYuYWN0aXZlUGFnZSxcbiAgICAgIGFjdGl2ZVBhZ2UgPSBfcmVmJGFjdGl2ZVBhZ2UgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGFjdGl2ZVBhZ2UsXG4gICAgICBfcmVmJG9uUGFnZUNsaWNrID0gX3JlZi5vblBhZ2VDbGljayxcbiAgICAgIG9uUGFnZUNsaWNrID0gX3JlZiRvblBhZ2VDbGljayA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKCkge30gOiBfcmVmJG9uUGFnZUNsaWNrLFxuICAgICAgX2NvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQsXG4gICAgICBhcmlhQ29udHJvbHMgPSBfcmVmWydhcmlhLWNvbnRyb2xzJ10sXG4gICAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyBbJ3hzJywgJ3MnXSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNSZXNwb25zaXZlID0gdXNlSXNXaXRoaW5CcmVha3BvaW50cyhyZXNwb25zaXZlLCAhIXJlc3BvbnNpdmUpOyAvLyBGb3JjZSB0byBgY29tcHJlc3NlZGAgdmVyc2lvbiBpZiBzcGVjaWZpZWQgb3Igd2l0aGluIHRoZSByZXNwb25zaXZlIGJyZWFrcG9pbnRzXG5cbiAgdmFyIGNvbXByZXNzZWQgPSBfY29tcHJlc3NlZCB8fCBpc1Jlc3BvbnNpdmU7XG5cbiAgdmFyIHNhZmVDbGljayA9IGZ1bmN0aW9uIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoYXJpYUNvbnRyb2xzKSB7XG4gICAgICB2YXIgY29udHJvbGxlZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmlhQ29udHJvbHMpO1xuXG4gICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnQpIHtcbiAgICAgICAgY29udHJvbGxlZEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhZ2VDbGljayhwYWdlSW5kZXgpO1xuICB9O1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbicsIGNsYXNzTmFtZSk7XG5cbiAgdmFyIGZpcnN0QnV0dG9uID0gKHBhZ2VDb3VudCA8IDEgfHwgY29tcHJlc3NlZCkgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcImZpcnN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIDApO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG5cbiAgdmFyIHByZXZpb3VzQnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcInByZXZpb3VzXCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIGFjdGl2ZVBhZ2UgLSAxKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAwXG4gIH0pO1xuXG4gIHZhciBuZXh0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcIm5leHRcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSArIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IC0xIHx8IGFjdGl2ZVBhZ2UgPT09IHBhZ2VDb3VudCAtIDFcbiAgfSk7XG5cbiAgdmFyIGxhc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibGFzdFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlQ291bnQgPyBwYWdlQ291bnQgLSAxIDogLTEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IC0xIHx8IGFjdGl2ZVBhZ2UgPT09IHBhZ2VDb3VudCAtIDFcbiAgfSk7XG5cbiAgdmFyIGNlbnRlclBhZ2VDb3VudDtcblxuICBpZiAocGFnZUNvdW50KSB7XG4gICAgdmFyIHNoYXJlZEJ1dHRvblByb3BzID0ge1xuICAgICAgYWN0aXZlUGFnZTogYWN0aXZlUGFnZSxcbiAgICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgICAgc2FmZUNsaWNrOiBzYWZlQ2xpY2ssXG4gICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgIH07XG5cbiAgICBpZiAoY29tcHJlc3NlZCkge1xuICAgICAgY2VudGVyUGFnZUNvdW50ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgIHNpemU6IFwic1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9fY29tcHJlc3NlZFRleHRcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24ucGFnZU9mVG90YWxDb21wcmVzc2VkXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwie3BhZ2V9IG9mIHt0b3RhbH1cIixcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcGFnZTogX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgYWN0aXZlUGFnZSArIDEpLFxuICAgICAgICAgIHRvdGFsOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBwYWdlQ291bnQpXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhZ2VzID0gW107XG4gICAgICB2YXIgZmlyc3RQYWdlSW5SYW5nZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGFjdGl2ZVBhZ2UgLSBOVU1CRVJfU1VSUk9VTkRJTkdfUEFHRVMsIHBhZ2VDb3VudCAtIE1BWF9WSVNJQkxFX1BBR0VTKSk7XG4gICAgICB2YXIgbGFzdFBhZ2VJblJhbmdlID0gTWF0aC5taW4ocGFnZUNvdW50LCBmaXJzdFBhZ2VJblJhbmdlICsgTUFYX1ZJU0lCTEVfUEFHRVMpO1xuXG4gICAgICBmb3IgKHZhciBpID0gZmlyc3RQYWdlSW5SYW5nZSwgaW5kZXggPSAwOyBpIDwgbGFzdFBhZ2VJblJhbmdlOyBpKyssIGluZGV4KyspIHtcbiAgICAgICAgcGFnZXMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBpLFxuICAgICAgICAgIGtleTogaVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0UGFnZUJ1dHRvbnMgPSBbXTtcblxuICAgICAgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPiAwKSB7XG4gICAgICAgIGZpcnN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgIGtleTogMFxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcblxuICAgICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDEgJiYgZmlyc3RQYWdlSW5SYW5nZSAhPT0gMikge1xuICAgICAgICAgIGZpcnN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJzdGFydGluZ0VsbGlwc2VzXCIsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLmZpcnN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMgMiB0byB7bGFzdFBhZ2V9XCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IGZpcnN0UGFnZUluUmFuZ2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZmlyc3RSYW5nZUFyaWFMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBmaXJzdFJhbmdlQXJpYUxhYmVsLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc1BsYWNlaG9sZGVyIGV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgICAgICAgICAgfSwgXCJcXHUyMDI2XCIpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdFBhZ2VJblJhbmdlID09PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMSxcbiAgICAgICAgICAgIGtleTogMVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsYXN0UGFnZUJ1dHRvbnMgPSBbXTtcblxuICAgICAgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCkge1xuICAgICAgICBpZiAobGFzdFBhZ2VJblJhbmdlICsgMSA9PT0gcGFnZUNvdW50IC0gMSkge1xuICAgICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogbGFzdFBhZ2VJblJhbmdlLFxuICAgICAgICAgICAga2V5OiBsYXN0UGFnZUluUmFuZ2VcbiAgICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0UGFnZUluUmFuZ2UgPCBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IFwiZW5kaW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24ubGFzdFJhbmdlQXJpYUxhYmVsXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlNraXBwaW5nIHBhZ2VzIHtmaXJzdFBhZ2V9IHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBmaXJzdFBhZ2U6IGxhc3RQYWdlSW5SYW5nZSArIDEsXG4gICAgICAgICAgICAgIGxhc3RQYWdlOiBwYWdlQ291bnQgLSAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGxhc3RSYW5nZUFyaWFMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBsYXN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXIgZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogcGFnZUNvdW50IC0gMSxcbiAgICAgICAgICBrZXk6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RhYmxlUGFnZXMgPSBwYWdlcztcblxuICAgICAgdmFyIGFjY2Vzc2libGVOYW1lID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0WydhcmlhLWxhYmVsJ10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHJlc3RbJ2FyaWEtbGFiZWwnXVxuICAgICAgfSksIHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmIHtcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddXG4gICAgICB9KTtcblxuICAgICAgY2VudGVyUGFnZUNvdW50ID0gX19fRW1vdGlvbkpTWChcInVsXCIsIF9leHRlbmRzKHt9LCBhY2Nlc3NpYmxlTmFtZSwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9fbGlzdFwiXG4gICAgICB9KSwgZmlyc3RQYWdlQnV0dG9ucywgc2VsZWN0YWJsZVBhZ2VzLCBsYXN0UGFnZUJ1dHRvbnMpO1xuICAgIH1cbiAgfSAvLyBBbGwgdGhlIGkxOG4gc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSB3aG9sZSBTUi1vbmx5IHRleHRcblxuXG4gIHZhciBsYXN0TGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmxhc3QnLCAnTGFzdCcpO1xuICB2YXIgcGFnZUxhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5wYWdlJywgJ1BhZ2UnKTtcbiAgdmFyIG9mTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLm9mJywgJ29mJyk7XG4gIHZhciBjb2xsZWN0aW9uTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmNvbGxlY3Rpb24nLCAnY29sbGVjdGlvbicpO1xuICB2YXIgZnJvbUVuZExhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5mcm9tRW5kTGFiZWwnLCAnZnJvbSBlbmQnKTsgLy8gQmFzZWQgb24gdGhlIGBhY3RpdmVQYWdlYCBjb3VudCwgYnVpbGQgdGhlIGZyb250IG9mIHRoZSBTUi1vbmx5IHRleHRcbiAgLy8gaS5lLiBgUGFnZSAxYCwgYFBhZ2UgMiBmcm9tIGVuZGAsIGBMYXN0IFBhZ2VgXG5cbiAgdmFyIGFjY2Vzc2libGVQYWdlU3RyaW5nID0gZnVuY3Rpb24gYWNjZXNzaWJsZVBhZ2VTdHJpbmcoKSB7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPCAtMSkgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChNYXRoLmFicyhhY3RpdmVQYWdlKSwgXCIgXCIpLmNvbmNhdChmcm9tRW5kTGFiZWwpO1xuICAgIGlmIChhY3RpdmVQYWdlID09PSAtMSkgcmV0dXJuIFwiXCIuY29uY2F0KGxhc3RMYWJlbCwgXCIgXCIpLmNvbmNhdChwYWdlTGFiZWwpO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwYWdlTGFiZWwsIFwiIFwiKS5jb25jYXQoYWN0aXZlUGFnZSArIDEpO1xuICB9OyAvLyBJZiBgcGFnZUNvdW50YCBpcyB1bmtub3duIGNhbGwgaXQgYGNvbGxlY3Rpb25gXG5cblxuICB2YXIgYWNjZXNzaWJsZUNvbGxlY3Rpb25TdHJpbmcgPSBwYWdlQ291bnQgPT09IDAgPyBjb2xsZWN0aW9uTGFiZWwgOiBwYWdlQ291bnQudG9TdHJpbmcoKTsgLy8gQ3JlYXRlIHRoZSB3aG9sZSBzdHJpbmcgd2l0aCB0b3RhbCBwYWdlQ291bnQgb3IgYGNvbGxlY3Rpb25gXG5cbiAgdmFyIGFjY2Vzc2libGVQYWdlQ291bnQgPSBcIlwiLmNvbmNhdChhY2Nlc3NpYmxlUGFnZVN0cmluZygpLCBcIiBcIikuY29uY2F0KG9mTGFiZWwsIFwiIFwiKS5jb25jYXQoYWNjZXNzaWJsZUNvbGxlY3Rpb25TdHJpbmcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcIm5hdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiLFxuICAgIFwiYXJpYS1yZWxldmFudFwiOiBcImFkZGl0aW9ucyB0ZXh0XCIsXG4gICAgcm9sZTogXCJzdGF0dXNcIlxuICB9LCBhY2Nlc3NpYmxlUGFnZUNvdW50KSksIGZpcnN0QnV0dG9uLCBwcmV2aW91c0J1dHRvbiwgY2VudGVyUGFnZUNvdW50LCBuZXh0QnV0dG9uLCBsYXN0QnV0dG9uKTtcbn07XG5FdWlQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMuXG4gICAgICogUGFzcyBgMGAgaWYgdG90YWwgY291bnQgaXMgdW5rbm93bi5cbiAgICAgKi9cbiAgcGFnZUNvdW50OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHBhZ2UgdXNpbmcgYSB6ZXJvIGJhc2VkIGluZGV4LlxuICAgICAqIFNvIGlmIHlvdSBzZXQgdGhlIGFjdGl2ZVBhZ2UgdG8gMSwgaXQgd2lsbCBhY3RpdmF0ZSB0aGUgc2Vjb25kIHBhZ2UuXG4gICAgICogUGFzcyBgLTFgIGZvciBmb3JjaW5nIHRvIGxhc3QgcGFnZS5cbiAgICAgKi9cbiAgYWN0aXZlUGFnZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBDbGljayBoYW5kbGVyIHRoYXQgcGFzc2VzIGJhY2sgdGhlIGludGVybmFsbHkgY2FsY3VsYXRlZCBgYWN0aXZlUGFnZWAgaW5kZXhcbiAgICAgKi9cbiAgb25QYWdlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgb25seSBzaG93IG5leHQvcHJldiBhcnJvd3MgYW5kIHNpbXBsaWZpZWQgbnVtYmVyIHNldC5cbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSWYgcGFzc2VkIGluLCBwYXNzZXMgdmFsdWUgdGhyb3VnaCB0byBlYWNoIGJ1dHRvbiB0byBzZXQgYXJpYS1jb250cm9scy5cbiAgICAgKi9cbiAgXCJhcmlhLWNvbnRyb2xzXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSByZWR1Y2VzIHRvIHRoZSBgY29tcHJlc3NlZGAgdmVyc2lvbiBvbiBzbWFsbGVyIHNjcmVlbnMuXG4gICAgICogUmVtb3ZlIGNvbXBsZXRlbHkgd2l0aCBgZmFsc2VgIG9yIHByb3ZpZGUgeW91ciBvd24gbGlzdCBvZiByZXNwb25zaXZlIGJyZWFrcG9pbnRzLlxuICAgICAqL1xuICByZXNwb25zaXZlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pXG59O1xuXG52YXIgUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIgPSBmdW5jdGlvbiBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlcihfcmVmMikge1xuICB2YXIgcGFnZUluZGV4ID0gX3JlZjIucGFnZUluZGV4LFxuICAgICAgX3JlZjIkaW5MaXN0ID0gX3JlZjIuaW5MaXN0LFxuICAgICAgaW5MaXN0ID0gX3JlZjIkaW5MaXN0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkaW5MaXN0LFxuICAgICAgYWN0aXZlUGFnZSA9IF9yZWYyLmFjdGl2ZVBhZ2UsXG4gICAgICBwYWdlQ291bnQgPSBfcmVmMi5wYWdlQ291bnQsXG4gICAgICBhcmlhQ29udHJvbHMgPSBfcmVmMi5hcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2sgPSBfcmVmMi5zYWZlQ2xpY2ssXG4gICAgICBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkO1xuXG4gIHZhciBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b24sIHtcbiAgICBpc0FjdGl2ZTogcGFnZUluZGV4ID09PSBhY3RpdmVQYWdlLFxuICAgIHRvdGFsUGFnZXM6IHBhZ2VDb3VudCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgcGFnZUluZGV4KTtcbiAgICB9LFxuICAgIHBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0pO1xuXG4gIGlmIChpbkxpc3QpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICB9LCBidXR0b24pO1xuICB9XG5cbiAgcmV0dXJuIGJ1dHRvbjtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc0FjdGl2ZVwiLCBcImlzUGxhY2Vob2xkZXJcIiwgXCJwYWdlSW5kZXhcIiwgXCJ0b3RhbFBhZ2VzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbkJ1dHRvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIGlzUGxhY2Vob2xkZXIgPSBfcmVmLmlzUGxhY2Vob2xkZXIsXG4gICAgICBwYWdlSW5kZXggPSBfcmVmLnBhZ2VJbmRleCxcbiAgICAgIHRvdGFsUGFnZXMgPSBfcmVmLnRvdGFsUGFnZXMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uQnV0dG9uJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVBhZ2luYXRpb25CdXR0b24taXNBY3RpdmUnOiBpc0FjdGl2ZSxcbiAgICAnZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc1BsYWNlaG9sZGVyJzogaXNQbGFjZWhvbGRlclxuICB9KTtcblxuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNpemU6ICdzJyxcbiAgICBjb2xvcjogJ3RleHQnLFxuICAgICdkYXRhLXRlc3Qtc3Viaic6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHBhZ2VJbmRleCksXG4gICAgaXNEaXNhYmxlZDogaXNQbGFjZWhvbGRlciB8fCBpc0FjdGl2ZVxuICB9LCBpc0FjdGl2ZSAmJiB7XG4gICAgJ2FyaWEtY3VycmVudCc6IHRydWVcbiAgfSksIHJlc3RbJ2FyaWEtY29udHJvbHMnXSAmJiB7XG4gICAgaHJlZjogXCIjXCIuY29uY2F0KHJlc3RbJ2FyaWEtY29udHJvbHMnXSlcbiAgfSksIHJlc3QpO1xuXG4gIHZhciBwYWdlTnVtYmVyID0gcGFnZUluZGV4ICsgMTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb25CdXR0b24ubG9uZ1BhZ2VTdHJpbmdcIixcbiAgICBkZWZhdWx0OiBcIlBhZ2Uge3BhZ2V9IG9mIHt0b3RhbFBhZ2VzfVwiLFxuICAgIHZhbHVlczoge1xuICAgICAgcGFnZTogcGFnZU51bWJlcixcbiAgICAgIHRvdGFsUGFnZXM6IHRvdGFsUGFnZXNcbiAgICB9XG4gIH0sIGZ1bmN0aW9uIChsb25nUGFnZVN0cmluZykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb25CdXR0b24uc2hvcnRQYWdlU3RyaW5nXCIsXG4gICAgICBkZWZhdWx0OiBcIlBhZ2Uge3BhZ2V9XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgcGFnZTogcGFnZU51bWJlclxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChzaG9ydFBhZ2VTdHJpbmcpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0b3RhbFBhZ2VzID8gbG9uZ1BhZ2VTdHJpbmcgOiBzaG9ydFBhZ2VTdHJpbmdcbiAgICAgIH0sIHByb3BzKSwgcGFnZU51bWJlcik7XG4gICAgfSk7XG4gIH0pO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInhzXCIsIFwic1wiLCBcIm1cIl0pLFxuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIGZsdXNoOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm90aFwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiLCBcInN1Ym1pdFwiXSksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNBY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvciBlbGxpcHNpcyBvciBvdGhlciBub24tY2xpY2thYmxlIGJ1dHRvbnMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yIGVsbGlwc2lzIG9yIG90aGVyIG5vbi1jbGlja2FibGUgYnV0dG9ucy5cbiAgICAgKi9cbiAgaXNQbGFjZWhvbGRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2VJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB0b3RhbFBhZ2VzOiBQcm9wVHlwZXMubnVtYmVyXG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbi9idXR0b25faWNvbic7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0eXBlVG9JY29uVHlwZU1hcCA9IHtcbiAgZmlyc3Q6ICdhcnJvd1N0YXJ0JyxcbiAgcHJldmlvdXM6ICdhcnJvd0xlZnQnLFxuICBuZXh0OiAnYXJyb3dSaWdodCcsXG4gIGxhc3Q6ICdhcnJvd0VuZCdcbn07XG5leHBvcnQgdmFyIFRZUEVTID0ga2V5c09mKHR5cGVUb0ljb25UeXBlTWFwKTtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93ID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93KF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWYuYXJpYUNvbnRyb2xzLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljaztcbiAgdmFyIGxhYmVscyA9IHtcbiAgICBmaXJzdDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LmZpcnN0UGFnZScsICdGaXJzdCBwYWdlJyksXG4gICAgcHJldmlvdXM6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcmV2aW91c1BhZ2UnLCAnUHJldmlvdXMgcGFnZScpLFxuICAgIG5leHQ6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5uZXh0UGFnZScsICdOZXh0IHBhZ2UnKSxcbiAgICBsYXN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cubGFzdFBhZ2UnLCAnTGFzdCBwYWdlJylcbiAgfTtcbiAgdmFyIGJ1dHRvblByb3BzID0ge307XG5cbiAgaWYgKGFyaWFDb250cm9scyAmJiAhZGlzYWJsZWQpIHtcbiAgICBidXR0b25Qcm9wcy5ocmVmID0gXCIjXCIuY29uY2F0KGFyaWFDb250cm9scyk7XG4gICAgYnV0dG9uUHJvcHNbJ2FyaWEtY29udHJvbHMnXSA9IGFyaWFDb250cm9scztcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25BcnJvd0J1dHRvbicsIGNsYXNzTmFtZSksXG4gICAgY29sb3I6IFwidGV4dFwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBsYWJlbHNbdHlwZV0sXG4gICAgdGl0bGU6IGRpc2FibGVkID8gdW5kZWZpbmVkIDogbGFiZWxzW3R5cGVdLFxuICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInBhZ2luYXRpb24tYnV0dG9uLVwiLmNvbmNhdCh0eXBlKSxcbiAgICBpY29uVHlwZTogdHlwZVRvSWNvblR5cGVNYXBbdHlwZV1cbiAgfSwgYnV0dG9uUHJvcHMpKTtcbn07XG5FdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUNvbnRyb2xzOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNTZWxlY3RlZFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYiA9IGZ1bmN0aW9uIEV1aVRhYihfcmVmKSB7XG4gIHZhciBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICBwcmVwZW5kID0gX3JlZi5wcmVwZW5kLFxuICAgICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYicsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWItaXNTZWxlY3RlZCc6IGlzU2VsZWN0ZWQsXG4gICAgJ2V1aVRhYi1pc0Rpc2FibGVkJzogZGlzYWJsZWRcbiAgfSk7XG5cbiAgdmFyIHByZXBlbmROb2RlID0gcHJlcGVuZCAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fcHJlcGVuZFwiXG4gIH0sIHByZXBlbmQpO1xuXG4gIHZhciBhcHBlbmROb2RlID0gYXBwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19hcHBlbmRcIlxuICB9LCBhcHBlbmQpOyAvLyAgPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vICB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cblxuICBpZiAoaHJlZiAmJiAhZGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwidGFiXCIsXG4gICAgICBcImFyaWEtc2VsZWN0ZWRcIjogISFpc1NlbGVjdGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWxcbiAgICB9LCByZXN0KSwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnRcIlxuICAgIH0sIGNoaWxkcmVuKSwgYXBwZW5kTm9kZSk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgcm9sZTogXCJ0YWJcIixcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogISFpc1NlbGVjdGVkLFxuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9LCByZXN0KSwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19jb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbn07XG5FdWlUYWIucHJvcFR5cGVzID0ge1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm90dG9tQm9yZGVyXCIsIFwiZXhwYW5kXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHM6ICdldWlUYWJzLS1zbWFsbCcsXG4gIG06IG51bGwsXG4gIGw6ICdldWlUYWJzLS1sYXJnZScsXG4gIHhsOiAnZXVpVGFicy0teGxhcmdlJ1xufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpVGFicyA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRib3R0b21Cb3JkZXIgPSBfcmVmLmJvdHRvbUJvcmRlcixcbiAgICAgIGJvdHRvbUJvcmRlciA9IF9yZWYkYm90dG9tQm9yZGVyID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRib3R0b21Cb3JkZXIsXG4gICAgICBfcmVmJGV4cGFuZCA9IF9yZWYuZXhwYW5kLFxuICAgICAgZXhwYW5kID0gX3JlZiRleHBhbmQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRleHBhbmQsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJzJywgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCB7XG4gICAgJ2V1aVRhYnMtLWV4cGFuZCc6IGV4cGFuZCxcbiAgICAnZXVpVGFicy0tYm90dG9tQm9yZGVyJzogYm90dG9tQm9yZGVyXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgY2hpbGRyZW4gJiYge1xuICAgIHJvbGU6ICd0YWJsaXN0J1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufSk7XG5FdWlUYWJzLmRpc3BsYXlOYW1lID0gJ0V1aVRhYnMnOyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJleHBhbmRcIiwgXCJpbml0aWFsU2VsZWN0ZWRUYWJcIiwgXCJvblRhYkNsaWNrXCIsIFwic2VsZWN0ZWRUYWJcIiwgXCJzaXplXCIsIFwidGFic1wiLCBcImF1dG9Gb2N1c1wiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiaWRcIiwgXCJuYW1lXCIsIFwiY29udGVudFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRhYnMgfSBmcm9tICcuLi90YWJzJztcbmltcG9ydCB7IEV1aVRhYiB9IGZyb20gJy4uL3RhYic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG4vKipcbiAqIE1hcmtlZCBhcyBjb25zdCBzbyB0eXBlIGlzIGBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXWAgaW5zdGVhZCBvZiBgc3RyaW5nW11gXG4gKi9cbmV4cG9ydCB2YXIgQVVUT0ZPQ1VTID0gWydpbml0aWFsJywgJ3NlbGVjdGVkJ107XG5leHBvcnQgdmFyIEV1aVRhYmJlZENvbnRlbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRhYmJlZENvbnRlbnQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpVGFiYmVkQ29udGVudCk7XG5cbiAgZnVuY3Rpb24gRXVpVGFiYmVkQ29udGVudChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJiZWRDb250ZW50KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJvb3RJZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0YWJzUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZm9jdXNUYWJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRhcmdldFRhYiA9IF90aGlzLnRhYnNSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwiI1wiLmNvbmNhdChfdGhpcy5zdGF0ZS5zZWxlY3RlZFRhYklkKSk7XG5cbiAgICAgIHRhcmdldFRhYi5mb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluaXRpYWxpemVGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmluRm9jdXMgJiYgX3RoaXMucHJvcHMuYXV0b0ZvY3VzID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICAgIC8vIE11c3Qgd2FpdCBmb3Igc2V0U3RhdGUgdG8gZmluaXNoIGJlZm9yZSBjYWxsaW5nIGAuZm9jdXMoKWBcbiAgICAgICAgLy8gYXMgdGhlIGZvY3VzIGNhbGwgdHJpZ2dlcnMgYSBibHVyIG9uIHRoZSBmaXJzdCB0YWJcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmZvY3VzVGFiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUZvY3VzXCIsIGZ1bmN0aW9uIChibHVyRXZlbnQpIHtcbiAgICAgIC8vIG9ubHkgc2V0IGluRm9jdXMgdG8gZmFsc2UgaWYgdGhlIHdyYXBwaW5nIGRpdiBkb2Vzbid0IGNvbnRhaW4gdGhlIG5vdy1mb2N1c2luZyBlbGVtZW50XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IGJsdXJFdmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSBibHVyRXZlbnQucmVsYXRlZFRhcmdldDtcblxuICAgICAgaWYgKGN1cnJlbnRUYXJnZXQuY29udGFpbnMocmVsYXRlZFRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbkZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblRhYkNsaWNrXCIsIGZ1bmN0aW9uIChzZWxlY3RlZFRhYikge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25UYWJDbGljayA9IF90aGlzJHByb3BzLm9uVGFiQ2xpY2ssXG4gICAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzLnNlbGVjdGVkVGFiO1xuXG4gICAgICBpZiAob25UYWJDbGljaykge1xuICAgICAgICBvblRhYkNsaWNrKHNlbGVjdGVkVGFiKTtcbiAgICAgIH0gLy8gT25seSB0cmFjayBzZWxlY3Rpb24gc3RhdGUgaWYgaXQncyBub3QgY29udHJvbGxlZCBleHRlcm5hbGx5LlxuXG5cbiAgICAgIGlmICghZXh0ZXJuYWxTZWxlY3RlZFRhYikge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZDogc2VsZWN0ZWRUYWIuaWRcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmZvY3VzVGFiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGluaXRpYWxTZWxlY3RlZFRhYiA9IHByb3BzLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgICAgX3NlbGVjdGVkVGFiID0gcHJvcHMuc2VsZWN0ZWRUYWIsXG4gICAgICAgIHRhYnMgPSBwcm9wcy50YWJzOyAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG5cbiAgICB2YXIgc2VsZWN0ZWRUYWJJZDtcblxuICAgIGlmICghX3NlbGVjdGVkVGFiKSB7XG4gICAgICBzZWxlY3RlZFRhYklkID0gaW5pdGlhbFNlbGVjdGVkVGFiICYmIGluaXRpYWxTZWxlY3RlZFRhYi5pZCB8fCB0YWJzWzBdLmlkO1xuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc2VsZWN0ZWRUYWJJZDogc2VsZWN0ZWRUYWJJZCxcbiAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVGFiYmVkQ29udGVudCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYHJlbGF0ZWRUYXJnZXRgIGV2ZW50IHByb3BlcnR5IGZvciBibHVyIGV2ZW50c1xuICAgICAgLy8gYnV0IGRvZXMgYWRkIGl0IGZvciBmb2N1c291dC4gUmVhY3QgZG9lc24ndCBzdXBwb3J0IGBvbkZvY3VzT3V0YCBzbyBoZXJlIHdlIGFyZS5cbiAgICAgIGlmICh0aGlzLnRhYnNSZWYuY3VycmVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNob3J0LXRlcm0gc29sdXRpb24gZm9yIGV2ZW50IGxpc3RlbmVyIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvMjcxNylcbiAgICAgICAgdGhpcy50YWJzUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLnJlbW92ZUZvY3VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy50YWJzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgLy8gQ3VycmVudCBzaG9ydC10ZXJtIHNvbHV0aW9uIGZvciBldmVudCBsaXN0ZW5lciAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzI3MTcpXG4gICAgICAgIHRoaXMudGFic1JlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5yZW1vdmVGb2N1cyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBleHBhbmQgPSBfdGhpcyRwcm9wczIuZXhwYW5kLFxuICAgICAgICAgIGluaXRpYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5pbml0aWFsU2VsZWN0ZWRUYWIsXG4gICAgICAgICAgb25UYWJDbGljayA9IF90aGlzJHByb3BzMi5vblRhYkNsaWNrLFxuICAgICAgICAgIGV4dGVybmFsU2VsZWN0ZWRUYWIgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRUYWIsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzMi5zaXplLFxuICAgICAgICAgIHRhYnMgPSBfdGhpcyRwcm9wczIudGFicyxcbiAgICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczIuYXV0b0ZvY3VzLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpOyAvLyBBbGxvdyB0aGUgY29uc3VtZXIgdG8gY29udHJvbCB0YWIgc2VsZWN0aW9uLlxuXG5cbiAgICAgIHZhciBzZWxlY3RlZFRhYiA9IGV4dGVybmFsU2VsZWN0ZWRUYWIgfHwgdGFicy5maW5kKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgcmV0dXJuIHRhYi5pZCA9PT0gX3RoaXMyLnN0YXRlLnNlbGVjdGVkVGFiSWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciBfcmVmID0gc2VsZWN0ZWRUYWIsXG4gICAgICAgICAgc2VsZWN0ZWRUYWJDb250ZW50ID0gX3JlZi5jb250ZW50LFxuICAgICAgICAgIHNlbGVjdGVkVGFiSWQgPSBfcmVmLmlkO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpVGFicywge1xuICAgICAgICByZWY6IHRoaXMudGFic1JlZixcbiAgICAgICAgZXhwYW5kOiBleHBhbmQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMuaW5pdGlhbGl6ZUZvY3VzXG4gICAgICB9LCB0YWJzLm1hcChmdW5jdGlvbiAodGFiKSB7XG4gICAgICAgIHZhciBpZCA9IHRhYi5pZCxcbiAgICAgICAgICAgIG5hbWUgPSB0YWIubmFtZSxcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0YWIuY29udGVudCxcbiAgICAgICAgICAgIHRhYlByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHRhYiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICBrZXk6IGlkLFxuICAgICAgICAgIGlkOiBpZFxuICAgICAgICB9LCB0YWJQcm9wcyksIHt9LCB7XG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIub25UYWJDbGljayh0YWIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNTZWxlY3RlZDogdGFiID09PSBzZWxlY3RlZFRhYixcbiAgICAgICAgICAnYXJpYS1jb250cm9scyc6IFwiXCIuY29uY2F0KF90aGlzMi5yb290SWQpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYiwgcHJvcHMsIG5hbWUpO1xuICAgICAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgcm9sZTogXCJ0YWJwYW5lbFwiLFxuICAgICAgICBpZDogXCJcIi5jb25jYXQodGhpcy5yb290SWQpLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBzZWxlY3RlZFRhYklkXG4gICAgICB9LCBzZWxlY3RlZFRhYkNvbnRlbnQpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVGFiYmVkQ29udGVudDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVRhYmJlZENvbnRlbnQsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXV0b0ZvY3VzOiAnaW5pdGlhbCdcbn0pO1xuXG5FdWlUYWJiZWRDb250ZW50LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiB0YWJiaW5nIGludG8gdGhlIHRhYnMsIHNldCB0aGUgZm9jdXMgb24gYGluaXRpYWxgIGZvciB0aGUgZmlyc3QgdGFiLFxuICAgICAgICogb3IgYHNlbGVjdGVkYCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWIuIEJlc3QgdXNlIGNhc2UgaXMgZm9yIGluc2lkZSBvZlxuICAgICAgICogb3ZlcmxheSBjb250ZW50IGxpa2UgcG9wb3ZlcnMgb3IgZmx5b3V0cy5cbiAgICAgICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5vbmVPZihbXCJpbml0aWFsXCIsIFwic2VsZWN0ZWRcIl0pLFxuXG4gIC8qKlxuICAgICAgICogRXZlbmx5IHN0cmV0Y2hlcyBlYWNoIHRhYiB0byBmaWxsIHRoZSBob3Jpem9udGFsIHNwYWNlXG4gICAgICAgKi9cbiAgZXhwYW5kOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgdG8gc2V0IHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgdGFiIHdoaWxlIGxldHRpbmcgdGhlIHRhYmJlZCBjb250ZW50IGNvbXBvbmVudFxuICAgICAgICogY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgaW50ZXJuYWxseVxuICAgICAgICovXG4gIGluaXRpYWxTZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgb25UYWJDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgdGhpcyBwcm9wIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgc2VsZWN0aW9uIHN0YXRlIHdpdGhpbiB0aGUgb3duZXIgY29tcG9uZW50XG4gICAgICAgKi9cbiAgc2VsZWN0ZWRUYWI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCIsIFwibFwiLCBcInhsXCJdKSxcblxuICAvKipcbiAgICAgICAqIEVhY2ggdGFiIG5lZWRzIGlkIGFuZCBjb250ZW50IHByb3BlcnRpZXMsIHNvIHdlIGNhbiBhc3NvY2lhdGUgaXQgd2l0aCBpdHMgcGFuZWwgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICAgKiBUaGUgbmFtZSBwcm9wZXJ0eSAoYSBub2RlKSBpcyBhbHNvIHJlcXVpcmVkIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuXG4gICAgICAgKi9cbiAgdGFiczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5leHBvcnQgdmFyIEV1aURlbGF5UmVuZGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlEZWxheVJlbmRlciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlEZWxheVJlbmRlcik7XG5cbiAgZnVuY3Rpb24gRXVpRGVsYXlSZW5kZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRGVsYXlSZW5kZXIpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGVsYXlJRFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRvQmVEZWxheWVkXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXJ0RGVsYXlpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChfdGhpcy5kZWxheUlEKTtcbiAgICAgIF90aGlzLnRvQmVEZWxheWVkID0gdHJ1ZTtcbiAgICAgIF90aGlzLmRlbGF5SUQgPSB3aW5kb3cuc2V0VGltZW91dChfdGhpcy5zdG9wRGVsYXlpbmcsIF90aGlzLnByb3BzLmRlbGF5KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdG9wRGVsYXlpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChfdGhpcy5kZWxheUlEKTtcbiAgICAgIF90aGlzLnRvQmVEZWxheWVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzLnNob3VsZFVwZGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB0b2dnbGU6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRGVsYXlSZW5kZXIsIFt7XG4gICAga2V5OiBcInNob3VsZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRVcGRhdGUoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciB0b2dnbGUgPSBfcmVmLnRvZ2dsZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2dnbGU6ICF0b2dnbGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc3RhcnREZWxheWluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG91bGRDb21wb25lbnRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgICAgaWYgKHRoaXMudG9CZURlbGF5ZWQpIHtcbiAgICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuc3RvcERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLnRvQmVEZWxheWVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAhdGhpcy50b0JlRGVsYXllZCA/IHRoaXMucHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlEZWxheVJlbmRlcjtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aURlbGF5UmVuZGVyLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRlbGF5OiA1MDBcbn0pO1xuXG5FdWlEZWxheVJlbmRlci5wcm9wVHlwZXMgPSB7XG4gIGRlbGF5OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwidGV4dFNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhlYWx0aFN0eWxlcyB9IGZyb20gJy4vaGVhbHRoLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBURVhUX1NJWkVTID0gWyd4cycsICdzJywgJ20nLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBFdWlIZWFsdGggPSBmdW5jdGlvbiBFdWlIZWFsdGgoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBfcmVmJHRleHRTaXplID0gX3JlZi50ZXh0U2l6ZSxcbiAgICAgIHRleHRTaXplID0gX3JlZiR0ZXh0U2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiR0ZXh0U2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSGVhbHRoU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSGVhbHRoLCBzdHlsZXNbdGV4dFNpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIZWFsdGgnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGd1dHRlclNpemU6IFwieHNcIixcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgIHJlc3BvbnNpdmU6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImRvdFwiLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlIZWFsdGgucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgZG90IGljb24uXG4gICAgICAgKiBJdCBhY2NlcHRzIGFueSBgSWNvbkNvbG9yYDogYGRlZmF1bHRgLCBgcHJpbWFyeWAsIGBzdWNjZXNzYCwgYGFjY2VudGAsIGB3YXJuaW5nYCwgYGRhbmdlcmAsIGB0ZXh0YCxcbiAgICAgICAqIGBzdWJkdWVkYCBvciBgZ2hvc3RgOyBvciBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIE1hdGNoZXMgdGhlIHRleHQgc2NhbGVzIG9mIEV1aVRleHQuXG4gICAgICAgKiBUaGUgYGluaGVyaXRgIHN0eWxlIHdpbGwgZ2V0IGl0cyBmb250IHNpemUgZnJvbSB0aGUgcGFyZW50IGVsZW1lbnRcbiAgICAgICAqL1xuICB0ZXh0U2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCIxcWhvanJpLWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImZvbnQtc2l6ZTppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIlxufSA6IHtcbiAgbmFtZTogXCJqOHVoY2stZXVpSGVhbHRoXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDpldWlIZWFsdGg7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlIZWFsdGhTdHlsZXMgPSBmdW5jdGlvbiBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlIZWFsdGg6IF9yZWYyLFxuICAgIC8vIFRleHQgc2l6ZXNcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWUsICdtJyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBpbmhlcml0OiBfcmVmXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYWx0XCIsIFwidXJsXCIsIFwic3JjXCIsIFwic2l6ZVwiLCBcImhhc1NoYWRvd1wiLCBcInN0eWxlXCIsIFwid3JhcHBlclByb3BzXCIsIFwiZnVsbFNjcmVlbkljb25Db2xvclwiLCBcImFsbG93RnVsbFNjcmVlblwiLCBcImNhcHRpb25cIiwgXCJmbG9hdFwiLCBcIm1hcmdpblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VXcmFwcGVyIH0gZnJvbSAnLi9pbWFnZV93cmFwcGVyJztcbmltcG9ydCB7IGV1aUltYWdlU3R5bGVzIH0gZnJvbSAnLi9pbWFnZS5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyJztcbmltcG9ydCB7IFNJWkVTIH0gZnJvbSAnLi9pbWFnZV90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZSA9IGZ1bmN0aW9uIEV1aUltYWdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgYWx0ID0gX3JlZi5hbHQsXG4gICAgICB1cmwgPSBfcmVmLnVybCxcbiAgICAgIHNyYyA9IF9yZWYuc3JjLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ29yaWdpbmFsJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgd3JhcHBlclByb3BzID0gX3JlZi53cmFwcGVyUHJvcHMsXG4gICAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZi5mdWxsU2NyZWVuSWNvbkNvbG9yLFxuICAgICAgYWxsb3dGdWxsU2NyZWVuID0gX3JlZi5hbGxvd0Z1bGxTY3JlZW4sXG4gICAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgICAgbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldElzRnVsbFNjcmVlbiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGlzTmFtZWRTaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnICYmIFNJWkVTLmluY2x1ZGVzKHNpemUpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUltYWdlJywgY2xhc3NOYW1lKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIGlzTmFtZWRTaXplICYmIHN0eWxlc1tzaXplXSwgIWlzTmFtZWRTaXplICYmIHN0eWxlcy5jdXN0b21TaXplLCBoYXNTaGFkb3cgJiYgc3R5bGVzLmhhc1NoYWRvd107XG4gIHZhciBjc3NJc0Z1bGxTY3JlZW5TdHlsZXMgPSBbc3R5bGVzLmV1aUltYWdlLCBzdHlsZXMuaXNGdWxsU2NyZWVuXTtcbiAgdmFyIGlzQ3VzdG9tU2l6ZSA9ICFpc05hbWVkU2l6ZSAmJiBzaXplICE9PSAnb3JpZ2luYWwnO1xuICB2YXIgY3VzdG9tU2l6ZSA9IHR5cGVvZiBzaXplID09PSAnc3RyaW5nJyA/IHNpemUgOiBcIlwiLmNvbmNhdChzaXplLCBcInB4XCIpO1xuICB2YXIgaW1hZ2VTdHlsZVdpdGhDdXN0b21TaXplID0gaXNDdXN0b21TaXplID8gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSksIHt9LCB7XG4gICAgbWF4V2lkdGg6IGN1c3RvbVNpemUsXG4gICAgbWF4SGVpZ2h0OiBjdXN0b21TaXplXG4gIH0pIDogc3R5bGU7XG4gIHZhciBpc0Z1bGxXaWR0aCA9IHNpemUgPT09ICdmdWxsV2lkdGgnO1xuICB2YXIgY29tbW9uV3JhcHBlclByb3BzID0ge1xuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIHdyYXBwZXJQcm9wczogd3JhcHBlclByb3BzLFxuICAgIHNldElzRnVsbFNjcmVlbjogc2V0SXNGdWxsU2NyZWVuLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGFsbG93RnVsbFNjcmVlbjogYWxsb3dGdWxsU2NyZWVuLFxuICAgIGFsdDogYWx0LFxuICAgIGNhcHRpb246IGNhcHRpb24sXG4gICAgZmxvYXQ6IGZsb2F0LFxuICAgIG1hcmdpbjogbWFyZ2luXG4gIH07XG5cbiAgdmFyIGNvbW1vbkltZ1Byb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNyYzogc3JjIHx8IHVybFxuICB9LCByZXN0KTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZVdyYXBwZXIsIGNvbW1vbldyYXBwZXJQcm9wcywgX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgYWx0OiBhbHQsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGltYWdlU3R5bGVXaXRoQ3VzdG9tU2l6ZVxuICB9LCBjb21tb25JbWdQcm9wcykpKSwgYWxsb3dGdWxsU2NyZWVuICYmIGlzRnVsbFNjcmVlbiAmJiBfX19FbW90aW9uSlNYKEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIsIGNvbW1vbldyYXBwZXJQcm9wcywgX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgYWx0OiBhbHQsXG4gICAgY3NzOiBjc3NJc0Z1bGxTY3JlZW5TdHlsZXMsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIGNvbW1vbkltZ1Byb3BzKSkpKTtcbn07XG5FdWlJbWFnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFJlcXVpcmVzIGVpdGhlciBgc3JjYCBvciBgdXJsYCBidXQgZGVmYXVsdHMgdG8gdXNpbmcgYHNyY2AgaWYgYm90aCBhcmUgcHJvdmlkZWRcbiAgICAgICAqL1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHVybDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEFsdCB0ZXh0IHNob3VsZCBkZXNjcmliZSB0aGUgaW1hZ2UgdG8gYWlkIHNjcmVlbiByZWFkZXIgdXNlcnMuIFNlZVxuICAgICAgICogaHR0cHM6Ly93ZWJhaW0ub3JnL3RlY2huaXF1ZXMvYWx0dGV4dC8gZm9yIGEgZ3VpZGUgb24gd3JpdGluZ1xuICAgICAgICogZWZmZWN0aXZlIGFsdCB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIElmIG5vIG1lYW5pbmdmdWwgZGVzY3JpcHRpb24gZXhpc3RzLCBvciBpZiB0aGUgaW1hZ2UgaXMgYWRlcXVhdGVseVxuICAgICAgICogZGVzY3JpYmVkIGJ5IHRoZSBzdXJyb3VuZGluZyB0ZXh0LCBwYXNzIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgICAqL1xuICBhbHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFByb3ZpZGVzIGEgdmlzaWJsZSBjYXB0aW9uIHRvIHRoZSBpbWFnZVxuICAgICAgICovXG4gIGNhcHRpb246IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBgc2AgLyBgbWAgLyBgbGAgLyBgeGxgIC8gYG9yaWdpbmFsYCAvIGBmdWxsV2lkdGhgIC8gb3IgYSBDU1Mgc2l6ZSBvZiBgbnVtYmVyYCBvciBgc3RyaW5nYC5cbiAgICAgICAqIGBmdWxsV2lkdGhgIHdpbGwgc2V0IHRoZSBmaWd1cmUgdG8gc3RyZXRjaCB0byAxMDAlIG9mIGl0cyBjb250YWluZXIuXG4gICAgICAgKiBgc3RyaW5nYCBhbmQgYG51bWJlcmAgdHlwZXMgd2lsbCBtYXggYm90aCB0aGUgd2lkdGggb3IgaGVpZ2h0LCB3aGljaGV2ZXIgaXMgZ3JlYXRlci5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBGbG9hdCB0aGUgaW1hZ2UgdG8gdGhlIGxlZnQgb3IgcmlnaHQuIFVzZWZ1bCBpbiBsYXJnZSB0ZXh0IGJsb2Nrcy5cbiAgICAgICAqL1xuICBmbG9hdDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIE1hcmdpbiBhcm91bmQgdGhlIGltYWdlLlxuICAgICAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCAoZGVmYXVsdCkgd2lsbCBhcHBseSBhIHNsaWdodCBzaGFkb3cgdG8gdGhlIGltYWdlXG4gICAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCB3aWxsIG1ha2UgdGhlIGltYWdlIGNsaWNrYWJsZSB0byBhIGxhcmdlciB2ZXJzaW9uXG4gICAgICAgKi9cbiAgYWxsb3dGdWxsU2NyZWVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIENoYW5nZXMgdGhlIGNvbG9yIG9mIHRoZSBpY29uIHRoYXQgZmxvYXRzIGFib3ZlIHRoZSBpbWFnZSB3aGVuIGl0IGNhbiBiZSBjbGlja2VkIHRvIGZ1bGxzY3JlZW4uXG4gICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBgbGlnaHRgIGlzIGZpbmUgdW5sZXNzIHlvdXIgaW1hZ2UgaGFzIGEgd2hpdGUgYmFja2dyb3VuZCwgaW4gd2hpY2ggY2FzZSB5b3Ugc2hvdWxkIGNoYW5nZSBpdCB0byBgZGFya2AuXG4gICAgICAgKi9cbiAgZnVsbFNjcmVlbkljb25Db2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcImxpZ2h0XCIsIFwiZGFya1wiXSksXG5cbiAgLyoqXG4gICAgICAgKiBQcm9wcyB0byBhZGQgdG8gdGhlIHdyYXBwaW5nIGZpZ3VyZSBlbGVtZW50XG4gICAgICAgKi9cbiAgd3JhcHBlclByb3BzOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IEV1aUltYWdlQ2FwdGlvbiB9IGZyb20gJy4vaW1hZ2VfY2FwdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZVdyYXBwZXIgPSBmdW5jdGlvbiBFdWlJbWFnZVdyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICAgIGZsb2F0ID0gX3JlZi5mbG9hdCxcbiAgICAgIG1hcmdpbiA9IF9yZWYubWFyZ2luLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgc2V0SXNGdWxsU2NyZWVuID0gX3JlZi5zZXRJc0Z1bGxTY3JlZW4sXG4gICAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgICBpc0Z1bGxXaWR0aCA9IF9yZWYuaXNGdWxsV2lkdGg7XG5cbiAgdmFyIG9wZW5GdWxsU2NyZWVuID0gZnVuY3Rpb24gb3BlbkZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKHRydWUpO1xuICB9O1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2VXcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VXcmFwcGVyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ZpZ3VyZVN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VXcmFwcGVyLCBmbG9hdCAmJiBzdHlsZXNbZmxvYXRdLCBtYXJnaW4gJiYgc3R5bGVzW21hcmdpbl0sIGFsbG93RnVsbFNjcmVlbiAmJiBzdHlsZXMuYWxsb3dGdWxsU2NyZWVuLCBpc0Z1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoXTtcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dCgpLFxuICAgICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZmlndXJlXCIsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtbGFiZWxcIjogb3B0aW9uYWxDYXB0aW9uVGV4dFxuICB9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NGaWd1cmVTdHlsZXNcbiAgfSksIGFsbG93RnVsbFNjcmVlbiA/IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VCdXR0b24sIHtcbiAgICBoYXNBbHQ6ICEhYWx0LFxuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIG9uQ2xpY2s6IG9wZW5GdWxsU2NyZWVuLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJhY3RpdmF0ZUZ1bGxTY3JlZW5CdXR0b25cIixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvclxuICB9LCBjaGlsZHJlbikpIDogY2hpbGRyZW4sIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VDYXB0aW9uLCB7XG4gICAgcmVmOiBvcHRpb25hbENhcHRpb25SZWYsXG4gICAgY2FwdGlvbjogY2FwdGlvblxuICB9KSk7XG59O1xuRXVpSW1hZ2VXcmFwcGVyLnByb3BUeXBlcyA9IHtcbiAgaXNGdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNldElzRnVsbFNjcmVlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgbG9naWNhbFNpZGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIlxufSA6IHtcbiAgbmFtZTogXCJnYWNubWMtYWxsb3dGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCImOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDphbGxvd0Z1bGxTY3JlZW47XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlJbWFnZVdyYXBwZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZVdyYXBwZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VXcmFwcGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiIFwiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7bGluZS1oZWlnaHQ6MDtmbGV4LXNocmluazowOztsYWJlbDpldWlJbWFnZVdyYXBwZXI7XCIpLFxuICAgIGFsbG93RnVsbFNjcmVlbjogX3JlZixcbiAgICAvLyBNYXJnaW5zXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW46XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgLy8gRmxvYXRzXG4gICAgLy8gMTogTG9naWNhbCBwcm9wZXJ0aWVzL3ZhbHVlcyBpbiBgZmxvYXRgIGlzIGN1cnJlbnRseSBub3QgeWV0IHN1cHBvcnRlZCBieSBhbGwgYnJvd3NlcnMgdy9vIGZsYWdzXG4gICAgLy8gQHNlZSBodHRwczovL2Nhbml1c2UuY29tL21kbi1jc3NfcHJvcGVydGllc19mbG9hdF9mbG93X3JlbGF0aXZlX3ZhbHVlcyBmb3Igd2hlbiB3ZSBjYW4gcmVtb3ZlIGxlZnQvcmlnaHQgZmFsbGJhY2tzXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogXCIsIGV1aVRoZW1lLmJyZWFrcG9pbnQubSwgXCJweCl7ZmxvYXQ6bGVmdDtmbG9hdDpcIiwgbG9naWNhbFNpZGUubGVmdCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgJzAnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCAnMCcpLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBcIiwgZXVpVGhlbWUuYnJlYWtwb2ludC5tLCBcInB4KXtmbG9hdDpyaWdodDtmbG9hdDpcIiwgbG9naWNhbFNpZGUucmlnaHQsIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tcmlnaHQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJoYXNBbHRcIiwgXCJoYXNTaGFkb3dcIiwgXCJjaGlsZHJlblwiLCBcIm9uQ2xpY2tcIiwgXCJvbktleURvd25cIiwgXCJpc0Z1bGxTY3JlZW5cIiwgXCJpc0Z1bGxXaWR0aFwiLCBcImZ1bGxTY3JlZW5JY29uQ29sb3JcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBldWlJbWFnZUJ1dHRvblN0eWxlcywgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV9idXR0b24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZnVsbFNjcmVlbkljb25Db2xvck1hcCA9IHtcbiAgbGlnaHQ6ICdnaG9zdCcsXG4gIGRhcms6ICdkZWZhdWx0J1xufTtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VCdXR0b24gPSBmdW5jdGlvbiBFdWlJbWFnZUJ1dHRvbihfcmVmKSB7XG4gIHZhciBoYXNBbHQgPSBfcmVmLmhhc0FsdCxcbiAgICAgIGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIG9uS2V5RG93biA9IF9yZWYub25LZXlEb3duLFxuICAgICAgaXNGdWxsU2NyZWVuID0gX3JlZi5pc0Z1bGxTY3JlZW4sXG4gICAgICBpc0Z1bGxXaWR0aCA9IF9yZWYuaXNGdWxsV2lkdGgsXG4gICAgICBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgICBmdWxsU2NyZWVuSWNvbkNvbG9yID0gX3JlZiRmdWxsU2NyZWVuSWNvbkNvID09PSB2b2lkIDAgPyAnbGlnaHQnIDogX3JlZiRmdWxsU2NyZWVuSWNvbkNvLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBidXR0b25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NCdXR0b25TdHlsZXMgPSBbYnV0dG9uU3R5bGVzLmV1aUltYWdlQnV0dG9uLCBoYXNTaGFkb3cgPyBidXR0b25TdHlsZXMuaGFzU2hhZG93SG92ZXIgOiBidXR0b25TdHlsZXMuc2hhZG93SG92ZXIsICFpc0Z1bGxTY3JlZW4gJiYgaXNGdWxsV2lkdGggJiYgYnV0dG9uU3R5bGVzLmZ1bGxXaWR0aF07XG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5vcGVuRnVsbFNjcmVlbl07XG4gIHZhciBvcGVuRnVsbFNjcmVlbkluc3RydWN0aW9ucyA9IHVzZUV1aUkxOG4oJ2V1aUltYWdlQnV0dG9uLm9wZW5GdWxsU2NyZWVuJywgJ0NsaWNrIHRvIG9wZW4gdGhpcyBpbWFnZSBpbiBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucyA9IHVzZUV1aUkxOG4oJ2V1aUltYWdlQnV0dG9uLmNsb3NlRnVsbFNjcmVlbicsICdQcmVzcyBFc2NhcGUgb3IgY2xpY2sgdG8gY2xvc2UgaW1hZ2UgZnVsbHNjcmVlbiBtb2RlJyk7XG4gIHZhciBpY29uQ29sb3IgPSBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwW2Z1bGxTY3JlZW5JY29uQ29sb3JdO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjc3M6IGNzc0J1dHRvblN0eWxlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gIH0sIHJlc3QpLCBpc0Z1bGxTY3JlZW4gJiYgLy8gSW4gZnVsbHNjcmVlbiBtb2RlLCBpbnN0cnVjdGlvbnMgc2hvdWxkIGNvbWUgZmlyc3QgdG8gYWxsb3cgc2NyZWVuIHJlYWRlclxuICAvLyB1c2VycyB0byBxdWlja2x5IGV4aXQgdnMuIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IGxvbmcvdW5za2lwcGFibGUgYWx0IHRleHRcbiAgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBjbG9zZUZ1bGxTY3JlZW5JbnN0cnVjdGlvbnMsIGhhc0FsdCAmJiAnIFx1MjAxNCAnKSksIGNoaWxkcmVuLCAhaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNzczogY3NzSWNvblN0eWxlc1xuICB9LCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGhhc0FsdCAmJiAnIFx1MjAxNCAnLCBvcGVuRnVsbFNjcmVlbkluc3RydWN0aW9ucykpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImZ1bGxTY3JlZW5cIixcbiAgICBjb2xvcjogaWNvbkNvbG9yXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgaGFzQWx0OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBsb2dpY2FsQ1NTLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUJ1dHRvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlQnV0dG9uOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjptYXRjaC1wYXJlbnQ7bGluZS1oZWlnaHQ6MDsmOjpiZWZvcmV7b3BhY2l0eTowO2NvbnRlbnQ6Jyc7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9fSY6aG92ZXIsJjpmb2N1c3smOjpiZWZvcmV7b3BhY2l0eToxO31bY2xhc3MqPSdldWlJbWFnZUJ1dHRvbl9faWNvbidde29wYWNpdHk6MTt9fSY6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZSwgJ291dHNldCcpLCBcIjt9O2xhYmVsOmV1aUltYWdlQnV0dG9uO1wiKSxcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKSxcbiAgICBzaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7fTtsYWJlbDpzaGFkb3dIb3ZlcjtcIiksXG4gICAgaGFzU2hhZG93SG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCImOjpiZWZvcmV7XCIsIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiO307bGFiZWw6aGFzU2hhZG93SG92ZXI7XCIpXG4gIH07XG59O1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ4ajRkc2EtY2xvc2VGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmNsb3NlRnVsbFNjcmVlbjtcIlxufSA6IHtcbiAgbmFtZTogXCJ4ajRkc2EtY2xvc2VGdWxsU2NyZWVuXCIsXG4gIHN0eWxlczogXCJwb2ludGVyLWV2ZW50czpub25lO2xhYmVsOmNsb3NlRnVsbFNjcmVlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VCdXR0b25fX2ljb246IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygndG9wJywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7O2xhYmVsOmV1aUltYWdlQnV0dG9uX19pY29uO1wiKSxcbiAgICBvcGVuRnVsbFNjcmVlbjogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6MDtjdXJzb3I6cG9pbnRlcjtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9O2xhYmVsOm9wZW5GdWxsU2NyZWVuO1wiKSxcbiAgICBjbG9zZUZ1bGxTY3JlZW46IF9yZWZcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSW1hZ2VDYXB0aW9uU3R5bGVzIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbWFnZUNhcHRpb24gPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgICAgX3JlZiRpc09uT3ZlcmxheU1hc2sgPSBfcmVmLmlzT25PdmVybGF5TWFzayxcbiAgICAgIGlzT25PdmVybGF5TWFzayA9IF9yZWYkaXNPbk92ZXJsYXlNYXNrID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNPbk92ZXJsYXlNYXNrO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VDYXB0aW9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VDYXB0aW9uLCBpc09uT3ZlcmxheU1hc2sgJiYgc3R5bGVzLmlzT25PdmVybGF5TWFza107XG4gIHJldHVybiBjYXB0aW9uID8gX19fRW1vdGlvbkpTWChcImZpZ2NhcHRpb25cIiwge1xuICAgIHJlZjogcmVmLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIGNhcHRpb24pIDogbnVsbDtcbn0pO1xuRXVpSW1hZ2VDYXB0aW9uLnByb3BUeXBlcyA9IHtcbiAgaXNPbk92ZXJsYXlNYXNrOiBQcm9wVHlwZXMuYm9vbFxufTtcbkV1aUltYWdlQ2FwdGlvbi5kaXNwbGF5TmFtZSA9ICdFdWlJbWFnZUNhcHRpb24nOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9udFNpemUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VDYXB0aW9uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VDYXB0aW9uU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlQ2FwdGlvbjogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpldWlJbWFnZUNhcHRpb247XCIpLFxuICAgIGlzT25PdmVybGF5TWFzazogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiO3RleHQtc2hhZG93OjAgMXB4IDJweCBcIiwgdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmluaywgMC42KSwgXCI7W2NsYXNzKj0nZXVpTGluaydde2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiO307bGFiZWw6aXNPbk92ZXJsYXlNYXNrO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5leHBvcnQgdmFyIGV1aUltYWdlU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpSW1hZ2U6IC8qI19fUFVSRV9fKi9jc3MoXCJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOyYsW2NsYXNzKj0nZXVpVGV4dCddICZ7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAwKSwgXCI7fTtsYWJlbDpldWlJbWFnZTtcIiksXG4gICAgLy8gVmFyaWF0aW9uc1xuICAgIGlzRnVsbFNjcmVlbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgJzgwdmgnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICc4MHZ3JyksIFwiOztsYWJlbDppc0Z1bGxTY3JlZW47XCIpLFxuICAgIGhhc1NoYWRvdzogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjs7bGFiZWw6aGFzU2hhZG93O1wiKSxcbiAgICAvLyBTaXplc1xuICAgIC8vIFRoZXNlIHNpemVzIGFyZSBtb3N0bHkgc3VnZ2VzdGlvbnMuIERvbid0IGxvb2sgdG9vIGhhcmQgZm9yIG1lYW5pbmcgaW4gdGhlaXIgdmFsdWVzLlxuICAgIC8vIFNpemUgaXMgYXBwbGllZCB0byB0aGUgaW1hZ2UsIHJhdGhlciB0aGFuIHRoZSB3cmFwcGVyIGZpZ3VyZSB0byB3b3JrIGJldHRlciB3aXRoIGZsb2F0c1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwcHgnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMjAwcHgnKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMzYwcHgnKSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzYwMHB4JyksIFwiOztsYWJlbDp4bDtcIiksXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIGN1c3RvbVNpemU6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnYXV0bycpLCBcIjs7bGFiZWw6Y3VzdG9tU2l6ZTtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZvY3VzVHJhcCB9IGZyb20gJy4uL2ZvY3VzX3RyYXAnO1xuaW1wb3J0IHsgRXVpT3ZlcmxheU1hc2sgfSBmcm9tICcuLi9vdmVybGF5X21hc2snO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUsIGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMgfSBmcm9tICcuL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlci5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VCdXR0b24gfSBmcm9tICcuL2ltYWdlX2J1dHRvbic7XG5pbXBvcnQgeyBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSW1hZ2VDYXB0aW9uIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIgPSBmdW5jdGlvbiBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyKF9yZWYpIHtcbiAgdmFyIGFsdCA9IF9yZWYuYWx0LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBjYXB0aW9uID0gX3JlZi5jYXB0aW9uLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgc2V0SXNGdWxsU2NyZWVuID0gX3JlZi5zZXRJc0Z1bGxTY3JlZW4sXG4gICAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3I7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlcl07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlcicsIHdyYXBwZXJQcm9wcyAmJiB3cmFwcGVyUHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5FU0NBUEUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNsb3NlRnVsbFNjcmVlbigpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgY2xvc2VGdWxsU2NyZWVuID0gZnVuY3Rpb24gY2xvc2VGdWxsU2NyZWVuKCkge1xuICAgIHNldElzRnVsbFNjcmVlbihmYWxzZSk7XG4gIH07XG5cbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoKSxcbiAgICAgIF91c2VJbm5lclRleHQyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUlubmVyVGV4dCwgMiksXG4gICAgICBvcHRpb25hbENhcHRpb25SZWYgPSBfdXNlSW5uZXJUZXh0MlswXSxcbiAgICAgIG9wdGlvbmFsQ2FwdGlvblRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcblxuICB2YXIgaWNvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NJY29uU3R5bGVzID0gW2ljb25TdHlsZXMuZXVpSW1hZ2VCdXR0b25fX2ljb24sIGljb25TdHlsZXMuY2xvc2VGdWxsU2NyZWVuXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpT3ZlcmxheU1hc2ssIHtcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZnVsbFNjcmVlbk92ZXJsYXlNYXNrXCIsXG4gICAgb25DbGljazogY2xvc2VGdWxsU2NyZWVuXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCB7XG4gICAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IHRydWVcbiAgfSwgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImZpZ3VyZVwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWxhYmVsXCI6IG9wdGlvbmFsQ2FwdGlvblRleHRcbiAgfSwgd3JhcHBlclByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQnV0dG9uLCB7XG4gICAgaGFzQWx0OiAhIWFsdCxcbiAgICBoYXNTaGFkb3c6IGhhc1NoYWRvdyxcbiAgICBvbkNsaWNrOiBjbG9zZUZ1bGxTY3JlZW4sXG4gICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImRlYWN0aXZhdGVGdWxsU2NyZWVuQnV0dG9uXCIsXG4gICAgaXNGdWxsU2NyZWVuOiB0cnVlLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICBjYXB0aW9uOiBjYXB0aW9uLFxuICAgIHJlZjogb3B0aW9uYWxDYXB0aW9uUmVmLFxuICAgIGlzT25PdmVybGF5TWFzazogdHJ1ZVxuICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZnVsbFNjcmVlbkV4aXRcIixcbiAgICBjb2xvcjogXCJnaG9zdFwiLFxuICAgIGNzczogY3NzSWNvblN0eWxlc1xuICB9KSkpKTtcbn07XG5FdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyLnByb3BUeXBlcyA9IHtcbiAgaXNGdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIHNldElzRnVsbFNjcmVlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LWhlaWdodCcsICc4MHZoJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnODB2dycpLCBcIjtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiO2xpbmUtaGVpZ2h0OjA7XCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgZXVpSW1hZ2VGdWxsU2NyZWVuKGV1aVRoZW1lLnNpemUueHh4eGwpLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmV4dHJhU2xvdywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiO30mOmhvdmVyIFtjbGFzcyo9J2V1aUltYWdlQ2FwdGlvbidde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fTtsYWJlbDpldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpXG4gIH07XG59O1xuXG52YXIgZXVpSW1hZ2VGdWxsU2NyZWVuID0gZnVuY3Rpb24gZXVpSW1hZ2VGdWxsU2NyZWVuKHNpemUpIHtcbiAgcmV0dXJuIGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShcIiwgXCIpO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gIH1cXG5cIl0pKSwgc2l6ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJywgJ2wnLCAneGwnLCAnZnVsbFdpZHRoJywgJ29yaWdpbmFsJ107XG52YXIgRkxPQVRTID0gWydsZWZ0JywgJ3JpZ2h0J107XG52YXIgTUFSR0lOUyA9IFsncycsICdtJywgJ2wnLCAneGwnXTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlHbG9iYWxTdHlsZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy9yZXNldC9nbG9iYWxfc3R5bGVzJztcbmltcG9ydCB7IEV1aVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5JztcbmltcG9ydCB7IEV1aVRoZW1lUHJvdmlkZXIsIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUaGVtZUFtc3RlcmRhbSB9IGZyb20gJy4uLy4uL3RoZW1lcyc7XG5pbXBvcnQgeyBFdWlDYWNoZVByb3ZpZGVyIH0gZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgaXNFbW90aW9uQ2FjaGVPYmplY3QgPSBmdW5jdGlvbiBpc0Vtb3Rpb25DYWNoZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgna2V5Jyk7XG59O1xuXG5leHBvcnQgdmFyIEV1aVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICB0aGVtZSA9IF9yZWYkdGhlbWUgPT09IHZvaWQgMCA/IEV1aVRoZW1lQW1zdGVyZGFtIDogX3JlZiR0aGVtZSxcbiAgICAgIF9yZWYkZ2xvYmFsU3R5bGVzID0gX3JlZi5nbG9iYWxTdHlsZXMsXG4gICAgICBHbG9iYWxzID0gX3JlZiRnbG9iYWxTdHlsZXMgPT09IHZvaWQgMCA/IEV1aUdsb2JhbFN0eWxlcyA6IF9yZWYkZ2xvYmFsU3R5bGVzLFxuICAgICAgX3JlZiR1dGlsaXR5Q2xhc3NlcyA9IF9yZWYudXRpbGl0eUNsYXNzZXMsXG4gICAgICBVdGlsaXRpZXMgPSBfcmVmJHV0aWxpdHlDbGFzc2VzID09PSB2b2lkIDAgPyBFdWlVdGlsaXR5Q2xhc3NlcyA6IF9yZWYkdXRpbGl0eUNsYXNzZXMsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICAgIG1vZGlmeSA9IF9yZWYubW9kaWZ5LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgZGVmYXVsdENhY2hlO1xuICB2YXIgZ2xvYmFsQ2FjaGU7XG4gIHZhciB1dGlsaXR5Q2FjaGU7XG5cbiAgaWYgKGNhY2hlKSB7XG4gICAgaWYgKGlzRW1vdGlvbkNhY2hlT2JqZWN0KGNhY2hlKSkge1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDYWNoZSA9IGNhY2hlLmRlZmF1bHQ7XG4gICAgICBnbG9iYWxDYWNoZSA9IGNhY2hlLmdsb2JhbDtcbiAgICAgIHV0aWxpdHlDYWNoZSA9IGNhY2hlLnV0aWxpdHk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiBkZWZhdWx0Q2FjaGVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZVByb3ZpZGVyLCB7XG4gICAgdGhlbWU6IHRoZW1lICE9PSBudWxsICYmIHRoZW1lICE9PSB2b2lkIDAgPyB0aGVtZSA6IHVuZGVmaW5lZCxcbiAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSxcbiAgICBtb2RpZnk6IG1vZGlmeVxuICB9LCB0aGVtZSAmJiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogZ2xvYmFsQ2FjaGUsXG4gICAgY2hpbGRyZW46IEdsb2JhbHMgJiYgX19fRW1vdGlvbkpTWChHbG9iYWxzLCBudWxsKVxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IHV0aWxpdHlDYWNoZSxcbiAgICBjaGlsZHJlbjogVXRpbGl0aWVzICYmIF9fX0Vtb3Rpb25KU1goVXRpbGl0aWVzLCBudWxsKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciwgbnVsbCwgY2hpbGRyZW4pKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGdsb2JhbFN0eWxlcyA9IC8qI19fUFVSRV9fKi9jc3MoXCIuZXVpU2NyZWVuUmVhZGVyT25seXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmdsb2JhbFN0eWxlcztcIik7XG5leHBvcnQgdmFyIEV1aVV0aWxpdHlDbGFzc2VzID0gZnVuY3Rpb24gRXVpVXRpbGl0eUNsYXNzZXMoKSB7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDYWNoZVByb3ZpZGVyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FjaGVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aUNhY2hlUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2FjaGUgPyBfX19FbW90aW9uSlNYKENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2FjaGVcbiAgfSwgY2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpdGVtc1wiLCBcImRpc3BsYXlcIiwgXCJleHBhbmRCeURlZmF1bHRcIiwgXCJzaG93RXhwYW5zaW9uQXJyb3dzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsga2V5cywgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aVRyZWVWaWV3Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KCcnKTtcblxuZnVuY3Rpb24gaGFzQXJpYUxhYmVsKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ2FyaWEtbGFiZWwnKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJlZUlkKHByb3BJZCwgY29udGV4dElkLCBpZEdlbmVyYXRvcikge1xuICByZXR1cm4gcHJvcElkICE9PSBudWxsICYmIHByb3BJZCAhPT0gdm9pZCAwID8gcHJvcElkIDogY29udGV4dElkID09PSAnJyA/IGlkR2VuZXJhdG9yKCkgOiBjb250ZXh0SWQ7XG59XG5cbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGRlZmF1bHQ6IG51bGwsXG4gIGNvbXByZXNzZWQ6ICdldWlUcmVlVmlldy0tY29tcHJlc3NlZCdcbn07XG5leHBvcnQgdmFyIEV1aVRyZWVWaWV3ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlUcmVlVmlldywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUcmVlVmlldyk7XG5cbiAgZnVuY3Rpb24gRXVpVHJlZVZpZXcoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRyZWVWaWV3KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidHJlZUlkR2VuZXJhdG9yXCIsIGh0bWxJZEdlbmVyYXRvcignZXVpVHJlZVZpZXcnKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNOZXN0ZWRcIiwgISFfdGhpcy5jb250ZXh0KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBvcGVuSXRlbXM6IF90aGlzLnByb3BzLmV4cGFuZEJ5RGVmYXVsdCA/IF90aGlzLnByb3BzLml0ZW1zLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gPyBpZCA6IG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcbiAgICAgIH0pIDogX3RoaXMucHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgaWQgPSBfcmVmMi5pZCxcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICAgICAgICBpc0V4cGFuZGVkID0gX3JlZjIuaXNFeHBhbmRlZDtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuICYmIGlzRXhwYW5kZWQgPyBpZCA6IG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcbiAgICAgIH0pLFxuICAgICAgYWN0aXZlSXRlbTogJycsXG4gICAgICB0cmVlSUQ6IGdldFRyZWVJZChfdGhpcy5wcm9wcy5pZCwgX3RoaXMuY29udGV4dCwgX3RoaXMudHJlZUlkR2VuZXJhdG9yKSxcbiAgICAgIGV4cGFuZENoaWxkTm9kZXM6IF90aGlzLnByb3BzLmV4cGFuZEJ5RGVmYXVsdCB8fCBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblJlZlwiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0QnV0dG9uUmVmXCIsIGZ1bmN0aW9uIChyZWYsIGluZGV4KSB7XG4gICAgICBfdGhpcy5idXR0b25SZWZbaW5kZXhdID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU5vZGVDbGlja1wiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGlnbm9yZUNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgICAgdmFyIGluZGV4ID0gX3RoaXMuc3RhdGUub3Blbkl0ZW1zLmluZGV4T2Yobm9kZS5pZCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZXhwYW5kQ2hpbGROb2RlczogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBub2RlLmlzRXhwYW5kZWQgPSAhbm9kZS5pc0V4cGFuZGVkO1xuXG4gICAgICBpZiAoIWlnbm9yZUNhbGxiYWNrICYmIG5vZGUuY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlLmNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5pc05vZGVPcGVuKG5vZGUpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHBhcnQgb2Ygb3Blbkl0ZW1zW10gdGhlbiByZW1vdmUgaXRcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG9wZW5JdGVtczogX3RoaXMuc3RhdGUub3Blbkl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoXywgaSkge1xuICAgICAgICAgICAgcmV0dXJuIGkgIT09IGluZGV4O1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgdGhlIG5vZGUgaXNuJ3QgcGFydCBvZiBvcGVuSXRlbXNbXSB0aGVuIGFkZCBpdFxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9wZW5JdGVtczogW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShwcmV2U3RhdGUub3Blbkl0ZW1zKSwgW25vZGUuaWRdKSxcbiAgICAgICAgICAgIGFjdGl2ZUl0ZW06IG5vZGUuaWRcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc05vZGVPcGVuXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUub3Blbkl0ZW1zLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQsIG5vZGUpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBub2RlQnV0dG9ucyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXRlc3Qtc3Viaj1cXFwiZXVpVHJlZVZpZXdCdXR0b24tXCIuY29uY2F0KF90aGlzLnN0YXRlLnRyZWVJRCwgXCJcXFwiXVwiKSkpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IG5vZGVCdXR0b25zLmluZGV4T2YoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB2YXIgbmV4dEJ1dHRvbiA9IG5vZGVCdXR0b25zW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBuZXh0QnV0dG9uLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX25vZGVCdXR0b25zID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGVzdC1zdWJqPVxcXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMuc3RhdGUudHJlZUlELCBcIlxcXCJdXCIpKSk7XG5cbiAgICAgICAgICAgIHZhciBfY3VycmVudEluZGV4ID0gX25vZGVCdXR0b25zLmluZGV4T2YoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChfY3VycmVudEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgdmFyIHByZXZCdXR0b24gPSBfbm9kZUJ1dHRvbnNbX2N1cnJlbnRJbmRleCArIC0xXTtcblxuICAgICAgICAgICAgICBpZiAocHJldkJ1dHRvbikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgcHJldkJ1dHRvbi5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfUklHSFQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc05vZGVPcGVuKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgIF90aGlzLmhhbmRsZU5vZGVDbGljayhub2RlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19MRUZUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc05vZGVPcGVuKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgIF90aGlzLmhhbmRsZU5vZGVDbGljayhub2RlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkcmVuS2V5ZG93blwiLCBmdW5jdGlvbiAoZXZlbnQsIGluZGV4KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkFSUk9XX0xFRlQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmW2luZGV4XS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRyZWVWaWV3LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaWQgIT09IHByZXZQcm9wcy5pZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdHJlZUlEOiBnZXRUcmVlSWQodGhpcy5wcm9wcy5pZCwgdGhpcy5jb250ZXh0LCB0aGlzLnRyZWVJZEdlbmVyYXRvcilcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIF90aGlzJHByb3BzJGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcyRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfdGhpcyRwcm9wcyRkaXNwbGF5LFxuICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdCA9IF90aGlzJHByb3BzLmV4cGFuZEJ5RGVmYXVsdCxcbiAgICAgICAgICBzaG93RXhwYW5zaW9uQXJyb3dzID0gX3RoaXMkcHJvcHMuc2hvd0V4cGFuc2lvbkFycm93cyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpOyAvLyBDb21wdXRlZCBjbGFzc05hbWVzXG5cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUcmVlVmlldycsIGRpc3BsYXkgPyBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0gOiBudWxsLCB7XG4gICAgICAgICdldWlUcmVlVmlldy0td2l0aEFycm93cyc6IHNob3dFeHBhbnNpb25BcnJvd3NcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaW5zdHJ1Y3Rpb25zSWQgPSBcIlwiLmNvbmNhdCh0aGlzLnN0YXRlLnRyZWVJRCwgXCItLWluc3RydWN0aW9uXCIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVHJlZVZpZXdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnRyZWVJRFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgIHNpemU6IGRpc3BsYXkgPT09ICdjb21wcmVzc2VkJyA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X193cmFwcGVyXCJcbiAgICAgIH0sICF0aGlzLmlzTmVzdGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUcmVlVmlldy5saXN0TmF2aWdhdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICBkZWZhdWx0OiBcIllvdSBjYW4gcXVpY2tseSBuYXZpZ2F0ZSB0aGlzIGxpc3QgdXNpbmcgYXJyb3cga2V5cy5cIlxuICAgICAgfSwgZnVuY3Rpb24gKGxpc3ROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICBpZDogaW5zdHJ1Y3Rpb25zSWRcbiAgICAgICAgfSwgbGlzdE5hdmlnYXRpb25JbnN0cnVjdGlvbnMpKTtcbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGlkOiAhdGhpcy5pc05lc3RlZCA/IHRoaXMuc3RhdGUudHJlZUlEIDogdW5kZWZpbmVkLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogIXRoaXMuaXNOZXN0ZWQgPyBpbnN0cnVjdGlvbnNJZCA6IHVuZGVmaW5lZFxuICAgICAgfSwgcmVzdCksIGl0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGJ1dHRvbklkID0gbm9kZS5pZDtcblxuICAgICAgICB2YXIgd3JhcHBpbmdJZCA9IF90aGlzMi50cmVlSWRHZW5lcmF0b3IoYnV0dG9uSWQpO1xuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwge1xuICAgICAgICAgIGtleTogbm9kZS5pZCArIGluZGV4LFxuICAgICAgICAgIGZhbGxiYWNrOiB0eXBlb2Ygbm9kZS5sYWJlbCA9PT0gJ3N0cmluZycgPyBub2RlLmxhYmVsIDogJydcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBub2RlLmlkICsgaW5kZXgsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlUcmVlVmlldy5hcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie25vZGVMYWJlbH0gY2hpbGQgb2Yge2FyaWFMYWJlbH1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBub2RlTGFiZWw6IGlubmVyVGV4dCxcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiBoYXNBcmlhTGFiZWwocmVzdCkgPyByZXN0WydhcmlhLWxhYmVsJ10gOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChhcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHZhciBsYWJlbCA9IGhhc0FyaWFMYWJlbChyZXN0KSA/IHtcbiAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWxcbiAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBcIlwiLmNvbmNhdChidXR0b25JZCwgXCIgXCIpLmNvbmNhdChyZXN0WydhcmlhLWxhYmVsbGVkYnknXSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgbm9kZUNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUcmVlVmlld19fbm9kZScsIGRpc3BsYXkgPyBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0gOiBudWxsLCB7XG4gICAgICAgICAgICAgICdldWlUcmVlVmlld19fbm9kZS0tZXhwYW5kZWQnOiBfdGhpczIuaXNOb2RlT3Blbihub2RlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbm9kZUJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUcmVlVmlld19fbm9kZUlubmVyJywgc2hvd0V4cGFuc2lvbkFycm93cyAmJiBub2RlLmNoaWxkcmVuID8gJ2V1aVRyZWVWaWV3X19ub2RlSW5uZXItLXdpdGhBcnJvd3MnIDogbnVsbCwgX3RoaXMyLnN0YXRlLmFjdGl2ZUl0ZW0gPT09IG5vZGUuaWQgPyAnZXVpVHJlZVZpZXdfX25vZGUtLWFjdGl2ZScgOiBudWxsLCBub2RlLmNsYXNzTmFtZSA/IG5vZGUuY2xhc3NOYW1lIDogbnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBub2RlQ2xhc3Nlc1xuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IHdyYXBwaW5nSWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdGhpczIuaXNOb2RlT3Blbihub2RlKSxcbiAgICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldEJ1dHRvblJlZihfcmVmMywgaW5kZXgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpVHJlZVZpZXdCdXR0b24tXCIuY29uY2F0KF90aGlzMi5zdGF0ZS50cmVlSUQpLFxuICAgICAgICAgICAgICBvbktleURvd246IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25LZXlEb3duKGV2ZW50LCBub2RlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZU5vZGVDbGljayhub2RlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBub2RlQnV0dG9uQ2xhc3Nlc1xuICAgICAgICAgICAgfSwgc2hvd0V4cGFuc2lvbkFycm93cyAmJiBub2RlLmNoaWxkcmVuID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19fZXhwYW5zaW9uQXJyb3dcIixcbiAgICAgICAgICAgICAgc2l6ZTogZGlzcGxheSA9PT0gJ2NvbXByZXNzZWQnID8gJ3MnIDogJ20nLFxuICAgICAgICAgICAgICB0eXBlOiBfdGhpczIuaXNOb2RlT3Blbihub2RlKSA/ICdhcnJvd0Rvd24nIDogJ2Fycm93UmlnaHQnXG4gICAgICAgICAgICB9KSA6IG51bGwsIG5vZGUuaWNvbiAmJiAhbm9kZS51c2VFbXB0eUljb24gPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19faWNvbldyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX3RoaXMyLmlzTm9kZU9wZW4obm9kZSkgJiYgbm9kZS5pY29uV2hlbkV4cGFuZGVkID8gbm9kZS5pY29uV2hlbkV4cGFuZGVkIDogbm9kZS5pY29uKSA6IG51bGwsIG5vZGUudXNlRW1wdHlJY29uICYmICFub2RlLmljb24gPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19faWNvblBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIH0pIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19ub2RlTGFiZWxcIlxuICAgICAgICAgICAgfSwgbm9kZS5sYWJlbCkpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgaWQ6IHdyYXBwaW5nSWQsXG4gICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbkNoaWxkcmVuS2V5ZG93bihldmVudCwgaW5kZXgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBub2RlLmNoaWxkcmVuICYmIF90aGlzMi5pc05vZGVPcGVuKG5vZGUpID8gX19fRW1vdGlvbkpTWChFdWlUcmVlVmlldywgX2V4dGVuZHMoe1xuICAgICAgICAgICAgICBpdGVtczogbm9kZS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcbiAgICAgICAgICAgICAgc2hvd0V4cGFuc2lvbkFycm93czogc2hvd0V4cGFuc2lvbkFycm93cyxcbiAgICAgICAgICAgICAgZXhwYW5kQnlEZWZhdWx0OiBfdGhpczIuc3RhdGUuZXhwYW5kQ2hpbGROb2Rlc1xuICAgICAgICAgICAgfSwgbGFiZWwpKSA6IG51bGwpKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRyZWVWaWV3O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVHJlZVZpZXcsIFwiY29udGV4dFR5cGVcIiwgRXVpVHJlZVZpZXdDb250ZXh0KTtcblxuRXVpVHJlZVZpZXcucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKiogQW4gYXJyYXkgb2YgRXVpVHJlZVZpZXdOb2Rlc1xuICAgICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBBbiBhcnJheSBvZiBFdWlUcmVlVmlld05vZGVzIHRvIHJlbmRlciBhcyBjaGlsZHJlblxuICAgICAgICovXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG5cbiAgICAvKiogVGhlIHJlYWRhYmxlIGxhYmVsIGZvciB0aGUgaXRlbVxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG5cbiAgICAvKiogQSB1bmlxdWUgSURcbiAgICAgICAqL1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAvKiogQW4gaWNvbiB0byB1c2Ugb24gdGhlIGxlZnQgb2YgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBpY29uOiBQcm9wVHlwZXMuZWxlbWVudCxcblxuICAgIC8qKiBEaXNwbGF5IGEgZGlmZmVyZW50IGljb24gd2hlbiB0aGUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgIEZvciBpbnN0YW5jZSwgYW4gb3BlbiBmb2xkZXIgb3IgYSBkb3duIGFycm93XG4gICAgICAqL1xuICAgIGljb25XaGVuRXhwYW5kZWQ6IFByb3BUeXBlcy5lbGVtZW50LFxuXG4gICAgLyoqIFVzZSBhbiBlbXB0eSBpY29uIHRvIGtlZXAgaXRlbXMgd2l0aG91dCBhbiBpY29uXG4gICAgICBsaW5lZCB1cCB3aXRoIHRoZWlyIHNpYmxpbmdzXG4gICAgICAqL1xuICAgIHVzZUVtcHR5SWNvbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdGhlIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAgICAgKi9cbiAgICBpc0V4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKiBPcHRpb25hbCBjbGFzcyB0byB0aHJvdyBvbiB0aGUgbm9kZVxuICAgICAgICovXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgaXRlbSBpcyBjbGlja2VkLlxuICAgICAgIFRoZSBvcGVuIHN0YXRlIG9mIHRoZSBpdGVtIHdpbGwgYWx3YXlzIGJlIHRvZ2dsZWQuXG4gICAgICAgKi9cbiAgICBjYWxsYmFjazogUHJvcFR5cGVzLmZ1bmNcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKiogT3B0aW9uYWxseSB1c2UgYSB2YXJpYXRpb24gd2l0aCBzbWFsbGVyIHRleHQgYW5kIGljb24gc2l6ZXNcbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wiZGVmYXVsdFwiLCBcImNvbXByZXNzZWRcIl0pLFxuXG4gIC8qKiBTZXQgYWxsIGl0ZW1zIHRvIG9wZW4gb24gaW5pdGlhbCBsb2FkXG4gICAgICAgKi9cbiAgZXhwYW5kQnlEZWZhdWx0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKiogRGlzcGxheSBleHBhbnNpb24gYXJyb3dzIG5leHQgdG8gYWxsIGl0ZW1zXG4gICAgICAgKiB0aGF0IGNvbnRhaW4gY2hpbGRyZW5cbiAgICAgICAqL1xuICBzaG93RXhwYW5zaW9uQXJyb3dzOiBQcm9wVHlwZXMuYm9vbCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib3B0aW9uc1wiLCBcIm9uQ2hhbmdlXCIsIFwib25BY3RpdmVPcHRpb25DaGFuZ2VcIiwgXCJzZWFyY2hhYmxlXCIsIFwic2VhcmNoUHJvcHNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJpc0xvYWRpbmdcIiwgXCJsaXN0UHJvcHNcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImxvYWRpbmdNZXNzYWdlXCIsIFwibm9NYXRjaGVzTWVzc2FnZVwiLCBcImVtcHR5TWVzc2FnZVwiLCBcImVycm9yTWVzc2FnZVwiLCBcImlzUHJlRmlsdGVyZWRcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwib25DaGFuZ2VcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpbnB1dFJlZlwiXSxcbiAgICBfZXhjbHVkZWQzID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJpc1ZpcnR1YWxpemVkXCIsIFwicm93SGVpZ2h0XCJdO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVTZWFyY2ggfSBmcm9tICcuL3NlbGVjdGFibGVfc2VhcmNoJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVNZXNzYWdlIH0gZnJvbSAnLi9zZWxlY3RhYmxlX21lc3NhZ2UnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3QgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdCc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJMaXZlLCBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGUpO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3NlYXJjaFByb3BzJG9uQ2hhbmdlO1xuXG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGUpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udGFpbmVyUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc0xpc3RSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50T25Gb2N1c1wiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibWVzc2FnZUNvbnRlbnRJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VEb3duXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJ5cGFzcyBvbkZvY3VzIHdoZW4gYSBjbGljayBldmVudCBvcmlnaW5hdGVzIGZyb20gdGhpcy5jb250YWluZXJSZWYuXG4gICAgICAvLyBQcmV2ZW50cyBvbkZvY3VzIGZyb20gc2Nyb2xsaW5nIGF3YXkgZnJvbSBhIGNsaWNrZWQgb3B0aW9uIGFuZCBuZWdhdGluZyB0aGUgc2VsZWN0aW9uIGV2ZW50LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy80MTQ3XG4gICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJldmVudE9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJldmVudE9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCB8fCBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0U2VsZWN0ZWQgPSBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmNoZWNrZWQgJiYgIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZmlyc3RTZWxlY3RlZCA+IC0xKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogZmlyc3RTZWxlY3RlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG9wdGlvbnNMaXN0ID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudDtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoMSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gRm9yIG5vbi1zZWFyY2hhYmxlIGluc3RhbmNlcywgU1BBQ0UgaW50ZXJhY3Rpb24gc2hvdWxkIGFsaWduIHdpdGhcbiAgICAgICAgLy8gdGhlIHVzZXIgZXhwZWN0YXRpb24gb2Ygc2VsZWN0aW9uIHRvZ2dsaW5nIChlLmcuLCBpbnB1dFt0eXBlPWNoZWNrYm94XSkuXG4gICAgICAgIC8vIEVOVEVSIGlzIGFsc28gYSB2YWxpZCBzZWxlY3Rpb24gbWVjaGFuaXNtIGluIHRoaXMgY2FzZS5cblxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgIGNhc2Uga2V5cy5TUEFDRTpcbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJCwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMjtcblxuICAgICAgICAgICAgLy8gRm9yIHNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpcyByZXNlcnZlZCBhcyBhIGNoYXJhY3RlciBmb3IgZmlsdGVyaW5nXG4gICAgICAgICAgICAvLyB2aWEgdGhlIGlucHV0IGJveCwgYW5kIGFzIHN1Y2ggb25seSBFTlRFUiB3aWxsIHRvZ2dsZSBzZWxlY3Rpb24uXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZiAmJiBldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZVxuICAgICAgICAgICAgLy8gc2VhcmNoYm94IG9yIHNlbGVjdGlvbiBsaXN0LiBJZiBub3QsIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG9cbiAgICAgICAgICAgIC8vIGludGVyYWN0IHdpdGggYW4gaW50ZXJuYWwgYnV0dG9uIHN1Y2ggYXMgdGhlIGNsZWFyIGJ1dHRvbixcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgZXZlbnQgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLlxuXG5cbiAgICAgICAgICAgIGlmICghKGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuaW5wdXRSZWYgfHwgZXZlbnQudGFyZ2V0ID09PSAoKF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQubGlzdEJveFJlZikgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkb3B0aW9uc0xpc3RSZWYkMi5wYXJlbnRFbGVtZW50KSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCAmJiBvcHRpb25zTGlzdCkge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBOT1RFOiBUaGlzIGlzIG5lZWRlZCBmb3IgUmVhY3QgdjE2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiAgICAgICAgICAgIG9wdGlvbnNMaXN0Lm9uQWRkT3JSZW1vdmVPcHRpb24oX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdLCBldmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFMVDpcbiAgICAgICAgY2FzZSBrZXlzLlNISUZUOlxuICAgICAgICBjYXNlIGtleXMuQ1RSTDpcbiAgICAgICAgY2FzZSBrZXlzLk1FVEE6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgX3RoaXMub25Gb2N1cyk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleFwiLCBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUsIGRvIG5vdGhpbmcuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IF9yZWYuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF9yZWYudmlzaWJsZU9wdGlvbnM7XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYW1vdW50IDwgMCA/IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4ICsgYW1vdW50O1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gR3JvdXAgdGl0bGVzIGFuZCBkaXNhYmxlZCBvcHRpb25zIGFyZSBpbmNsdWRlZCBpbiBvcHRpb24gbGlzdCBidXQgYXJlIG5vdCBzZWxlY3RhYmxlXG5cblxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IDEgOiAtMTtcblxuICAgICAgICB3aGlsZSAodmlzaWJsZU9wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWwgfHwgdmlzaWJsZU9wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG5leHRBY3RpdmVPcHRpb25JbmRleCArIGRpcmVjdGlvbjtcblxuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSB2aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblNlYXJjaENoYW5nZVwiLCBmdW5jdGlvbiAoc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkc2VhcmNoUHJvLCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICBfdGhpcy5vbkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvID0gX3RoaXMucHJvcHMuc2VhcmNoUHJvcHMpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJHByb3BzJHNlYXJjaFBybzIgPSBfdGhpcyRwcm9wcyRzZWFyY2hQcm8ub25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybzIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJHNlYXJjaFBybzIuY2FsbChfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIHNlYXJjaFZhbHVlLCB2aXNpYmxlT3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db250YWluZXJCbHVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX2UkcmVsYXRlZFRhcmdldCwgX2UkcmVsYXRlZFRhcmdldCRmaXJzO1xuXG4gICAgICAvLyBJZ25vcmUgYmx1ciBldmVudHMgd2hlbiBtb3ZpbmcgZnJvbSBzZWFyY2ggdG8gb3B0aW9uIHRvIGF2b2lkIGFjdGl2ZU9wdGlvbkluZGV4IGNvbmZsaWN0c1xuICAgICAgaWYgKCgoX2UkcmVsYXRlZFRhcmdldCA9IGUucmVsYXRlZFRhcmdldCkgPT09IG51bGwgfHwgX2UkcmVsYXRlZFRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9lJHJlbGF0ZWRUYXJnZXQkZmlycyA9IF9lJHJlbGF0ZWRUYXJnZXQuZmlyc3RDaGlsZCkgPT09IG51bGwgfHwgX2UkcmVsYXRlZFRhcmdldCRmaXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZSRyZWxhdGVkVGFyZ2V0JGZpcnMuaWQpID09PSBfdGhpcy5saXN0SWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlO1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgdmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9uc1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShvcHRpb25zLCBldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2Nyb2xsVG9JdGVtXCIsIGZ1bmN0aW9uIChpbmRleCwgYWxpZ24pIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zTGlzdFJlZiQzLCBfdGhpcyRvcHRpb25zTGlzdFJlZiQ0O1xuXG4gICAgICAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMyA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfdGhpcyRvcHRpb25zTGlzdFJlZiQ0ID0gX3RoaXMkb3B0aW9uc0xpc3RSZWYkMy5saXN0UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zTGlzdFJlZiQ0LnNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm1ha2VPcHRpb25JZFwiLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gXCJcIi5jb25jYXQoX3RoaXMubGlzdElkLCBcIl9vcHRpb24tXCIpLmNvbmNhdChpbmRleCkgOiAnJztcbiAgICB9KTtcblxuICAgIF90aGlzLnJvb3RJZCA9IHByb3BzLmlkID8gZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3BzLmlkKS5jb25jYXQoc3VmZml4ID8gXCJfXCIuY29uY2F0KHN1ZmZpeCkgOiAnJyk7XG4gICAgfSA6IGh0bWxJZEdlbmVyYXRvcigpO1xuICAgIF90aGlzLmxpc3RJZCA9IF90aGlzLnJvb3RJZCgnbGlzdGJveCcpO1xuICAgIF90aGlzLm1lc3NhZ2VDb250ZW50SWQgPSBfdGhpcy5yb290SWQoJ21lc3NhZ2VDb250ZW50Jyk7XG4gICAgdmFyIF9vcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBfaXNQcmVGaWx0ZXJlZCA9IHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIHNlYXJjaFByb3BzID0gcHJvcHMuc2VhcmNoUHJvcHM7XG4gICAgdmFyIGluaXRpYWxTZWFyY2hWYWx1ZSA9IChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpIHx8IFN0cmluZygoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLmRlZmF1bHRWYWx1ZSkgfHwgJycpO1xuXG4gICAgdmFyIF92aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhfb3B0aW9ucywgaW5pdGlhbFNlYXJjaFZhbHVlLCBfaXNQcmVGaWx0ZXJlZCk7XG5cbiAgICBzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9IHNlYXJjaFByb3BzLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZWFyY2hQcm9wcyRvbkNoYW5nZS5jYWxsKHNlYXJjaFByb3BzLCBpbml0aWFsU2VhcmNoVmFsdWUsIF92aXNpYmxlT3B0aW9ucyk7IC8vIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2luZ2xlIG9wdGlvbiBpcyBhY3RpdmUgaWYgaXQgaXMgaW4gdGhlIHZpc2libGVPcHRpb25zXG5cbiAgICB2YXIgc2VsZWN0ZWRPcHRpb25zID0gX29wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZDtcbiAgICB9KTtcblxuICAgIHZhciBfYWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChfdmlzaWJsZU9wdGlvbnMuaW5jbHVkZXMoc2VsZWN0ZWRPcHRpb25zWzBdKSkge1xuICAgICAgICBfYWN0aXZlT3B0aW9uSW5kZXggPSBfdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF9hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICB2aXNpYmxlT3B0aW9uczogX3Zpc2libGVPcHRpb25zLFxuICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT09IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQWN0aXZlTywgX3RoaXMkcHJvcHMyO1xuXG4gICAgICAgIHZhciBhY3RpdmVPcHRpb24gPSB0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgPyB0aGlzLnN0YXRlLnZpc2libGVPcHRpb25zW3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdIDogbnVsbDtcbiAgICAgICAgKF90aGlzJHByb3BzJG9uQWN0aXZlTyA9IChfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzKS5vbkFjdGl2ZU9wdGlvbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25BY3RpdmVPID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8uY2FsbChfdGhpcyRwcm9wczIsIGFjdGl2ZU9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMzLmNsYXNzTmFtZSxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25DaGFuZ2UsXG4gICAgICAgICAgb25BY3RpdmVPcHRpb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25BY3RpdmVPcHRpb25DaGFuZ2UsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMy5zZWFyY2hhYmxlLFxuICAgICAgICAgIHNlYXJjaFByb3BzID0gX3RoaXMkcHJvcHMzLnNlYXJjaFByb3BzLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMzLmlzTG9hZGluZyxcbiAgICAgICAgICBsaXN0UHJvcHMgPSBfdGhpcyRwcm9wczMubGlzdFByb3BzLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMy5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMzLmhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczMuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzM1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzM1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmxvYWRpbmdNZXNzYWdlLFxuICAgICAgICAgIG5vTWF0Y2hlc01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubm9NYXRjaGVzTWVzc2FnZSxcbiAgICAgICAgICBlbXB0eU1lc3NhZ2UgPSBfdGhpcyRwcm9wczMuZW1wdHlNZXNzYWdlLFxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IF90aGlzJHByb3BzMy5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzMy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRzdGF0ZS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4OyAvLyBTb21lIG1lc3N5IGRlc3RydWN0dXJpbmcgaGVyZSB0byByZW1vdmUgYXJpYS1sYWJlbC9kZXNjcmliZWRieSBmcm9tIHNlYXJjaFByb3BzIGFuZCBsaXN0UHJvcHNcbiAgICAgIC8vIE1hZGUgbWVzc2llciBieSBzb21lIFRTIHJlcXVpcmVtZW50c1xuICAgICAgLy8gVGhlIGFyaWEgYXR0cmlidXRlcyBhcmUgdGhlbiB1c2VkIGluIGdldEFjY2Vzc2libGVOYW1lKCkgdG8gcGxhY2UgdGhlbSB3aGVyZSB0aGV5IG5lZWQgdG8gZ29cblxuICAgICAgdmFyIHVua25vd25BY2Nlc3NpYmxlTmFtZSA9IHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB1bmRlZmluZWQsXG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICB2YXIgX3JlZjIgPSBzZWFyY2hQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgICAgc2VhcmNoQXJpYUxhYmVsID0gX3JlZjJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBzZWFyY2hBcmlhRGVzY3JpYmVkYnkgPSBfcmVmMlsnYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIHByb3BzT25DaGFuZ2UgPSBfcmVmMi5vbkNoYW5nZSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVmMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgaW5wdXRSZWYgPSBfcmVmMi5pbnB1dFJlZixcbiAgICAgICAgICBjbGVhbmVkU2VhcmNoUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgX3JlZjMgPSBsaXN0UHJvcHMgfHwgdW5rbm93bkFjY2Vzc2libGVOYW1lLFxuICAgICAgICAgIGxpc3RBcmlhTGFiZWwgPSBfcmVmM1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGxpc3RBcmlhRGVzY3JpYmVkYnkgPSBfcmVmM1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfcmVmMy5pc1ZpcnR1YWxpemVkLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodCxcbiAgICAgICAgICBjbGVhbmVkTGlzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBfZXhjbHVkZWQzKTtcblxuICAgICAgdmFyIHZpcnR1YWxpemVkUHJvcHM7XG5cbiAgICAgIGlmIChpc1ZpcnR1YWxpemVkID09PSBmYWxzZSkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIGlzVmlydHVhbGl6ZWQ6IGlzVmlydHVhbGl6ZWRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocm93SGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgdmlydHVhbGl6ZWRQcm9wcyA9IHtcbiAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGUnLCB7XG4gICAgICAgICdldWlTZWxlY3RhYmxlLWZ1bGxIZWlnaHQnOiBoZWlnaHQgPT09ICdmdWxsJ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIC8qKiBDcmVhdGUgbWVzc2FnZSBjb250ZW50IHRoYXQgcmVwbGFjZXMgdGhlIGxpc3QgaWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlICh5ZXQpICovXG5cbiAgICAgIHZhciBtZXNzYWdlQ29udGVudDtcblxuICAgICAgaWYgKGVycm9yTWVzc2FnZSAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2VDb250ZW50ID0gdHlwZW9mIGVycm9yTWVzc2FnZSA9PT0gJ3N0cmluZycgPyBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBlcnJvck1lc3NhZ2UpIDogZXJyb3JNZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgaWYgKGxvYWRpbmdNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGxvYWRpbmdNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICAgICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBsb2FkaW5nTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubG9hZGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChsb2FkaW5nTWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgbG9hZGluZ01lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWFyY2hWYWx1ZSAmJiB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG5vTWF0Y2hlc01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygbm9NYXRjaGVzTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIG5vTWF0Y2hlc01lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQobm9NYXRjaGVzTWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgbm9NYXRjaGVzTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAoZW1wdHlNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVtcHR5TWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVtcHR5TWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9BdmFpbGFibGVPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIk5vIG9wdGlvbnMgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGVtcHR5TWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgZW1wdHlNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogVGhlcmUgYXJlIGxvdHMgb2Ygd2F5cyB0byBhZGQgYW4gYWNjZXNzaWJsZSBuYW1lXG4gICAgICAgKiBVc3VhbGx5IHdlIHdhbnQgdGhlIHNhbWUgbmFtZSBmb3IgdGhlIGlucHV0IGFuZCB0aGUgbGlzdGJveCAod2hpY2ggaXMgYWRkZWQgYnkgYXJpYS1sYWJlbC9kZXNjcmliZWRieSlcbiAgICAgICAqIEJ1dCB5b3UgY2FuIGFsd2F5cyBvdmVycmlkZSBpdCB1c2luZyBzZWFyY2hQcm9wcyBvciBsaXN0UHJvcHNcbiAgICAgICAqIFRoaXMgZmluZHMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2VcbiAgICAgICAqXG4gICAgICAgKiBUT0RPOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGJlaW5nIGxhYmVsbGVkICg8bGFiZWwgZm9yPVwiaWRPZklucHV0XCI+KVxuICAgICAgICovXG5cblxuICAgICAgdmFyIGdldEFjY2Vzc2libGVOYW1lID0gZnVuY3Rpb24gZ2V0QWNjZXNzaWJsZU5hbWUocHJvcHMsIG1lc3NhZ2VDb250ZW50SWQpIHtcbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWxhYmVsJ10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwcm9wc1snYXJpYS1sYWJlbCddXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtZXNzYWdlQ29udGVudElkU3RyaW5nID0gbWVzc2FnZUNvbnRlbnRJZCA/IFwiIFwiLmNvbmNhdChtZXNzYWdlQ29udGVudElkKSA6ICcnO1xuXG4gICAgICAgIGlmIChwcm9wcyAmJiBwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQocHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmlhTGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyaWFEZXNjcmliZWRieSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KGFyaWFEZXNjcmliZWRieSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA9IGdldEFjY2Vzc2libGVOYW1lKHNlYXJjaFByb3BzLCB0aGlzLm1lc3NhZ2VDb250ZW50SWQpO1xuICAgICAgdmFyIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID0gQm9vbGVhbihPYmplY3Qua2V5cyhzZWFyY2hBY2Nlc3NpYmxlTmFtZSkubGVuZ3RoKTtcbiAgICAgIHZhciBzZWFyY2ggPSBzZWFyY2hhYmxlID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiRmlsdGVyIG9wdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKHBsYWNlaG9sZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBcImxpc3RTZWFyY2hcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbkNoYW5nZTogX3RoaXMyLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGxpc3RJZDogX3RoaXMyLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQgPyBfdGhpczIubGlzdElkIDogdW5kZWZpbmVkIC8vIE9ubHkgcGFzcyB0aGUgbGlzdElkIGlmIGl0IGV4aXN0cyBvbiB0aGUgcGFnZVxuICAgICAgICAgICxcbiAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfdGhpczIubWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSAvLyB0aGUgY3VycmVudCBmYXV4LWZvY3VzZWQgb3B0aW9uXG4gICAgICAgICAgLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlck5hbWUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCAhPT0gbnVsbCAmJiBpc1ByZUZpbHRlcmVkICE9PSB2b2lkIDAgPyBpc1ByZUZpbHRlcmVkIDogZmFsc2UsXG4gICAgICAgICAgaW5wdXRSZWY6IGZ1bmN0aW9uIGlucHV0UmVmKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfc2VhcmNoUHJvcHMkaW5wdXRSZWY7XG5cbiAgICAgICAgICAgIF90aGlzMi5pbnB1dFJlZiA9IG5vZGU7XG4gICAgICAgICAgICBzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9IHNlYXJjaFByb3BzLmlucHV0UmVmKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkaW5wdXRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZWFyY2hQcm9wcyRpbnB1dFJlZi5jYWxsKHNlYXJjaFByb3BzLCBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID8gc2VhcmNoQWNjZXNzaWJsZU5hbWUgOiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZFNlYXJjaFByb3BzKSk7XG4gICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gdmlzaWJsZU9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQ7XG4gICAgICB9KS5sZW5ndGg7XG5cbiAgICAgIHZhciBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzID0gc2VhcmNoYWJsZSAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5zZWFyY2hSZXN1bHRzXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KF9yZWY0KSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSBfcmVmNC5yZXN1bHRzTGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXN1bHRzTGVuZ3RoLCBcIiByZXN1bHRcIikuY29uY2F0KHJlc3VsdHNMZW5ndGggPT09IDEgPyAnJyA6ICdzJywgXCIgYXZhaWxhYmxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByZXN1bHRzTGVuZ3RoOiByZXN1bHRzTGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgbGlzdEFyaWFEZXNjcmliZWRieUlkID0gdGhpcy5yb290SWQoJ2luc3RydWN0aW9ucycpO1xuICAgICAgdmFyIGxpc3RBY2Nlc3NpYmxlTmFtZSA9IGdldEFjY2Vzc2libGVOYW1lKGxpc3RQcm9wcywgbGlzdEFyaWFEZXNjcmliZWRieUlkKTtcbiAgICAgIHZhciBsaXN0SGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKGxpc3RBY2Nlc3NpYmxlTmFtZSkubGVuZ3RoKTtcblxuICAgICAgdmFyIGxpc3QgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW5zOiBbJ2V1aVNlbGVjdGFibGUuc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zJywgJ2V1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lJ10sXG4gICAgICAgIGRlZmF1bHRzOiBbJ1VzZSB1cCBhbmQgZG93biBhcnJvd3MgdG8gbW92ZSBmb2N1cyBvdmVyIG9wdGlvbnMuIEVudGVyIHRvIHNlbGVjdC4gRXNjYXBlIHRvIGNvbGxhcHNlIG9wdGlvbnMuJywgJ0ZpbHRlciBvcHRpb25zJ11cbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICB2YXIgX3JlZjYgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksXG4gICAgICAgICAgICBwbGFjZWhvbGRlck5hbWUgPSBfcmVmNlswXSxcbiAgICAgICAgICAgIHNjcmVlblJlYWRlckluc3RydWN0aW9ucyA9IF9yZWY2WzFdO1xuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyTGl2ZSwge1xuICAgICAgICAgIGlzQWN0aXZlOiBtZXNzYWdlQ29udGVudCAhPSBudWxsIHx8IGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGxcbiAgICAgICAgfSwgbWVzc2FnZUNvbnRlbnQgfHwgbGlzdFNjcmVlblJlYWRlclN0YXR1cyksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBsaXN0QXJpYURlc2NyaWJlZGJ5SWRcbiAgICAgICAgfSwgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zKSksIG1lc3NhZ2VDb250ZW50ID8gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTWVzc2FnZSwge1xuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlTZWxlY3RhYmxlTWVzc2FnZVwiLFxuICAgICAgICAgIGlkOiBfdGhpczIubWVzc2FnZUNvbnRlbnRJZCxcbiAgICAgICAgICBib3JkZXJlZDogbGlzdFByb3BzICYmIGxpc3RQcm9wcy5ib3JkZXJlZFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCkgOiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVMaXN0XCIsXG4gICAgICAgICAga2V5OiBcImxpc3RcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4OiBmdW5jdGlvbiBzZXRBY3RpdmVPcHRpb25JbmRleChpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBpbmRleFxuICAgICAgICAgICAgfSwgY2IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgcmVmOiBfdGhpczIub3B0aW9uc0xpc3RSZWYsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgc2VhcmNoYWJsZTogc2VhcmNoYWJsZSxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQ6IF90aGlzMi5tYWtlT3B0aW9uSWQsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIubGlzdElkXG4gICAgICAgIH0sIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA/IGxpc3RBY2Nlc3NpYmxlTmFtZSA6IHNlYXJjaGFibGUgJiYge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogcGxhY2Vob2xkZXJOYW1lXG4gICAgICAgIH0sIGNsZWFuZWRMaXN0UHJvcHMsIHZpcnR1YWxpemVkUHJvcHMpKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMuY29udGFpbmVyUmVmLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd24sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkNvbnRhaW5lckJsdXIsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Nb3VzZURvd25cbiAgICAgIH0sIHJlc3QpLCBjaGlsZHJlbiAmJiBjaGlsZHJlbihsaXN0LCBzZWFyY2gpKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQgPSBuZXh0UHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBzZWFyY2hQcm9wcyA9IG5leHRQcm9wcy5zZWFyY2hQcm9wcztcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IHByZXZTdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQpO1xuICAgICAgdmFyIHN0YXRlVXBkYXRlID0ge1xuICAgICAgICB2aXNpYmxlT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgIH07XG5cbiAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIGFjdGl2ZU9wdGlvbkluZGV4ID49IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpICE9IG51bGwgJiYgc2VhcmNoUHJvcHMudmFsdWUgIT09IHNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnNlYXJjaFZhbHVlID0gc2VhcmNoUHJvcHMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZVVwZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpU2VsZWN0YWJsZTtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgb3B0aW9uczogW10sXG4gIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXG4gIHNlYXJjaGFibGU6IGZhbHNlLFxuICBpc1ByZUZpbHRlcmVkOiBmYWxzZVxufSk7XG5cbkV1aVNlbGVjdGFibGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBIb29rcyB1cCBhIHNlYXJjaCBib3ggdG8gZmlsdGVyIHRoZSBsaXN0IChib29sZWFuKVxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBwcm9wcyBkb3duIHRvIHRoZSBgRXVpRmllbGRTZWFyY2hgLlxuICAgICAgICogU2VlICNFdWlTZWxlY3RhYmxlU2VhcmNoUHJvcHNcbiAgICAgICAqL1xuICBzZWFyY2hQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGBsaXN0YCBub2RlIGFuZCB0aGVuXG4gICAgICAgKiB0aGUgYHNlYXJjaGAgbm9kZSAoaWYgYHNlYXJjaGFibGVgIGlzIGFwcGxpZWQpXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogQXJyYXkgb2YgRXVpU2VsZWN0YWJsZU9wdGlvbiBvYmplY3RzLiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25Qcm9wc1xuICAgICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZCxcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGFuZFxuICAgICAgICogJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgYmFjayB0aGUgYWx0ZXJlZCBgb3B0aW9uc2AgYXJyYXkgd2l0aCBzZWxlY3RlZCBvcHRpb25zIGhhdmluZyBgY2hlY2tlZDogJ29uJ2AuXG4gICAgICAgKiBBbHNvIHBhc3NlcyBiYWNrIHRoZSBSZWFjdCBjbGljay9rZXlib2FyZCBldmVudCBhcyBhIHNlY29uZCBhcmd1bWVudC5cbiAgICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgYmFjayB0aGUgY3VycmVudCBhY3RpdmUgb3B0aW9uIHdoZW5ldmVyIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGN1cnJlbnRseVxuICAgICAgICogaGlnaGxpZ2h0ZWQgb3B0aW9uIHZpYSBrZXlib2FyZCBuYXZpZ2F0aW9uIG9yIHNlYXJjaGluZy5cbiAgICAgICAqL1xuICBvbkFjdGl2ZU9wdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBzaW5nbGUgc2VsZWN0aW9uIHBvbGljeSBvZlxuICAgICAgICogYGZhbHNlYDogYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgICogYHRydWVgOiBvbmx5IGFsbG93cyBvbmUgc2VsZWN0aW9uXG4gICAgICAgKiBgYWx3YXlzYDogY2FuIGFuZCBtdXN0IGhhdmUgb25seSBvbmUgc2VsZWN0aW9uXG4gICAgICAgKi9cbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQWxsb3dzIG1hcmtpbmcgb3B0aW9ucyBhcyBgY2hlY2tlZD0nb2ZmJ2AgYXMgd2VsbCBhcyBgJ29uJ2BcbiAgICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogU2hvdyBhbiBsb2FkaW5nIGluZGljYXRvciB3aGlsZSB5b3UgbG9hZCBhbmQgaG9vayB1cCB5b3VyIGRhdGFcbiAgICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgICAqIHRoZSB3aG9sZSBncm91cCB0byBmaWxsIHRoZSBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBhbmRcbiAgICAgICAqIGFsbG93cyB0aGUgbGlzdCBncm93IGFzIHdlbGxcbiAgICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25zTGlzdFxuICAgICAgICovXG4gIGxpc3RQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gZm9yIGVhY2ggb3B0aW9uLlxuICAgICAgICogUmV0dXJucyBgKG9wdGlvbiwgc2VhcmNoVmFsdWUpYFxuICAgICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGxvYWRpbmcgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbG9hZGluZ01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBubyBtYXRjaGVzIG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIG5vTWF0Y2hlc01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBlbXB0eSBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBlbXB0eU1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgKiBUaGUgbWVzc2FnZSB3aWxsIGJlIHNob3duIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICAgKiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICpcbiAgICAgICAqIGBlcnJvck1lc3NhZ2U9e2hhc0Vycm9ycyA/ICdNeSBlcnJvciBtZXNzYWdlJyA6IG51bGx9YFxuICAgICAgICovXG4gIGVycm9yTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pLFxuXG4gIC8qKlxuICAgICAgICogQ29udHJvbCB3aGV0aGVyIG9yIG5vdCBvcHRpb25zIGdldCBmaWx0ZXJlZCBpbnRlcm5hbGx5IG9yIGlmIGNvbnN1bWVyIHdpbGwgZmlsdGVyXG4gICAgICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgICAgICovXG4gIGlzUHJlRmlsdGVyZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wib25DaGFuZ2VcIiwgXCJvcHRpb25zXCIsIFwidmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzUHJlRmlsdGVyZWRcIiwgXCJsaXN0SWRcIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZpZWxkU2VhcmNoIH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQgeyBnZXRNYXRjaGluZ09wdGlvbnMgfSBmcm9tICcuLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIG9uQ2hhbmdlQ2FsbGJhY2sgPSBfcmVmLm9uQ2hhbmdlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICAgIHBsYWNlaG9sZGVyID0gX3JlZi5wbGFjZWhvbGRlcixcbiAgICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmLmlzUHJlRmlsdGVyZWQsXG4gICAgICBsaXN0SWQgPSBfcmVmLmxpc3RJZCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHNlYXJjaFZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG4gICAgb25DaGFuZ2VDYWxsYmFjayhzZWFyY2hWYWx1ZSwgbWF0Y2hpbmdPcHRpb25zKTtcbiAgfSwgW29wdGlvbnMsIGlzUHJlRmlsdGVyZWQsIG9uQ2hhbmdlQ2FsbGJhY2tdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlU2VhcmNoJywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCA9IGxpc3RJZCA/IHtcbiAgICByb2xlOiAnY29tYm9ib3gnLFxuICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAnYXJpYS1leHBhbmRlZCc6IHRydWUsXG4gICAgJ2FyaWEtY29udHJvbHMnOiBsaXN0SWQsXG4gICAgJ2FyaWEtb3ducyc6IGxpc3RJZCAvLyBsZWdhY3kgYXR0cmlidXRlIGJ1dCBzaGltcyBzdXBwb3J0IGZvciBuZWFybHkgZXZlcnl0aGluZyBhdG1cblxuICB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWVsZFNlYXJjaCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBpbmNyZW1lbnRhbDogdHJ1ZSxcbiAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIlxuICB9LCBhcmlhUHJvcHNJZkxpc3RJc1ByZXNlbnQsIHJlc3QpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG52YXIgZ2V0U2VhcmNoYWJsZUxhYmVsID0gZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbikge1xuICB2YXIgbm9ybWFsaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICB2YXIgc2VhcmNoYWJsZUxhYmVsID0gb3B0aW9uLnNlYXJjaGFibGVMYWJlbCB8fCBvcHRpb24ubGFiZWw7XG4gIHJldHVybiBub3JtYWxpemUgPyBzZWFyY2hhYmxlTGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBzZWFyY2hhYmxlTGFiZWw7XG59O1xuXG52YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucykge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICByZXR1cm4gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbikgPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTtcbiAgfSk7XG59O1xuXG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKGFjY3VtdWxhdG9yLCBvcHRpb24sIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIC8vIERvbid0IHNob3cgb3B0aW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBpZlxuICAvLyB0aGUgc2VsZWN0ZWRPcHRpb25zIGxpc3QgZXhpc3RzXG4gIGlmIChzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24sIGZhbHNlKSwgc2VsZWN0ZWRPcHRpb25zKTtcblxuICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmVmaWx0ZXJlZCB0aGVuIHdlIGNhbiBza2lwIGZpbHRlcmluZyBhZ2FpbnN0IHRoZSBzZWFyY2ggdmFsdWUuXG4gIC8vIFRPRE86IEkgc3RpbGwgZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCBob3cgdGhpcyB3b3JrcyB3aGVuIGhvb2tlZCB1cCB0byBhc3luY1xuXG5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKTtcblxuICBpZiAobm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gW107XG4gIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9ucywgb3B0aW9uLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNlbGVjdGVkT3B0aW9ucyk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hpbmdPcHRpb25zO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9yZGVyZWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vLi4vdGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTWVzc2FnZSA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVNZXNzYWdlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRib3JkZXJlZCA9IF9yZWYuYm9yZGVyZWQsXG4gICAgICBib3JkZXJlZCA9IF9yZWYkYm9yZGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRib3JkZXJlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVNZXNzYWdlJywge1xuICAgICdldWlTZWxlY3RhYmxlTWVzc2FnZS0tYm9yZGVyZWQnOiBib3JkZXJlZFxuICB9LCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0LCBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IFwic3ViZHVlZFwiLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlTZWxlY3RhYmxlTWVzc2FnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIE1hdGNoIHRoaXMgdG8gdGhlIGBsaXN0UHJvcHMuYm9yZGVyZWRgIHByb3BlcnR5IG9mIHlvdXIgYEV1aVNlbGVjdGFibGVgIGluc3RhbmNlXG4gICAgICAgKi9cbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkYXRhXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJsYWJlbFwiLCBcImlzR3JvdXBMYWJlbFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWZcIiwgXCJrZXlcIiwgXCJzZWFyY2hhYmxlTGFiZWxcIiwgXCJkYXRhXCJdLFxuICAgIF9leGNsdWRlZDMgPSBbXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwic2VhcmNoVmFsdWVcIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwiaGVpZ2h0XCIsIFwid2luZG93UHJvcHNcIiwgXCJyb3dIZWlnaHRcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcIm1ha2VPcHRpb25JZFwiLCBcInNob3dJY29uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInZpc2libGVPcHRpb25zXCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwiYm9yZGVyZWRcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInNlYXJjaGFibGVcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJsaXN0SWRcIiwgXCJzZXRBY3RpdmVPcHRpb25JbmRleFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwicm9sZVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJ0ZXh0V3JhcFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIG1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIGFyZUVxdWFsIH0gZnJvbSAncmVhY3Qtd2luZG93JztcbmltcG9ydCB7IEV1aUF1dG9TaXplciB9IGZyb20gJy4uLy4uL2F1dG9fc2l6ZXInO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVMaXN0SXRlbSB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZUxpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGVMaXN0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGVMaXN0KTtcblxuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTGlzdChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmID0gcmVmO1xuXG4gICAgICBpZiAocmVmICYmIF90aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHJlZi5zY3JvbGxUb0l0ZW0oX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgLy8gRmlyZWZveCBhZGRzIGEgdGFiIHN0b3AgZm9yIHNjcm9sbGFibGUgY29udGFpbmVyc1xuICAgICAgLy8gV2UgaGFuZGxlIHRoaXMgaW5zaWRlIHNvIG5lZWQgdG8gc3RvcCBmaXJlZm94IGZyb20gZG9pbmcgaXRzIHRoaW5nXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHMubGlzdElkLFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J107XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBsaXN0SWQpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKTtcblxuICAgICAgICBpZiAoc2VhcmNoYWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcblxuICAgICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gIT09ICdhbHdheXMnICYmIHNpbmdsZVNlbGVjdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1tdWx0aXNlbGVjdGFibGUnLCAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJpYUxhYmVsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBhcmlhTGFiZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmlhTGFiZWxsZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBhcmlhTGFiZWxsZWRieSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyaWFEZXNjcmliZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBhcmlhRGVzY3JpYmVkYnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiTGlzdFJvd1wiLCAvKiNfX1BVUkVfXyovbWVtbyhmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICAgICAgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICAgIHN0eWxlID0gX3JlZi5zdHlsZTtcbiAgICAgIHZhciBvcHRpb24gPSBkYXRhW2luZGV4XTtcblxuICAgICAgdmFyIG9wdGlvbkRhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgICBfb3B0aW9uID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGlzR3JvdXBMYWJlbCA9IG9wdGlvbi5pc0dyb3VwTGFiZWwsXG4gICAgICAgICAgY2hlY2tlZCA9IG9wdGlvbi5jaGVja2VkLFxuICAgICAgICAgIGRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkLFxuICAgICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICAgIHJlZiA9IG9wdGlvbi5yZWYsXG4gICAgICAgICAga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsLFxuICAgICAgICAgIF9kYXRhID0gb3B0aW9uLmRhdGEsXG4gICAgICAgICAgb3B0aW9uUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMyLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczIub25Gb2N1c0JhZGdlLFxuICAgICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMyLnBhZGRpbmdTaXplLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzMi5zaG93SWNvbnMsXG4gICAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczIuc2VhcmNoYWJsZSxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzMi50ZXh0V3JhcDtcblxuICAgICAgaWYgKGlzR3JvdXBMYWJlbCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICByb2xlOiBcInByZXNlbnRhdGlvblwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbFwiLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSAvLyBAdHMtaWdub3JlIGNvbXBsZXhcblxuICAgICAgICB9LCBvcHRpb25SZXN0KSwgcHJlcGVuZCwgbGFiZWwsIGFwcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBsYWJlbENvdW50ID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIHZhciBpZCA9IG1ha2VPcHRpb25JZChpbmRleCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBpZCxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiBvbk1vdXNlRG93bigpIHtcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleChpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgICAgIF90aGlzLm9uQWRkT3JSZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogcmVmID8gcmVmLmJpbmQobnVsbCwgaW5kZXgpIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGFjdGl2ZU9wdGlvbkluZGV4ID09PSBpbmRleCxcbiAgICAgICAgdGl0bGU6IHNlYXJjaGFibGVMYWJlbCB8fCBsYWJlbCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgXCJhcmlhLXBvc2luc2V0XCI6IGluZGV4ICsgMSAtIGxhYmVsQ291bnQsXG4gICAgICAgIFwiYXJpYS1zZXRzaXplXCI6IGRhdGEubGVuZ3RoIC0gbGFiZWxDb3VudCxcbiAgICAgICAgb25Gb2N1c0JhZGdlOiBvbkZvY3VzQmFkZ2UsXG4gICAgICAgIGFsbG93RXhjbHVzaW9uczogYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBzaG93SWNvbnM6IHNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLFxuICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICB0ZXh0V3JhcDogdGV4dFdyYXBcbiAgICAgIH0sIG9wdGlvblJlc3QpLCByZW5kZXJPcHRpb24gPyByZW5kZXJPcHRpb24oIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuICAgICAgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfb3B0aW9uKSwgb3B0aW9uRGF0YSksIF90aGlzLnByb3BzLnNlYXJjaFZhbHVlKSA6IF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGxhYmVsKSk7XG4gICAgfSwgYXJlRXF1YWwpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9yUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChvcHRpb24sIGV2ZW50KSB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICAgIF90aGlzJHByb3BzMyR2aXNpYmxlTyA9IF90aGlzJHByb3BzMy52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHByb3BzMyR2aXNpYmxlTyA9PT0gdm9pZCAwID8gb3B0aW9ucyA6IF90aGlzJHByb3BzMyR2aXNpYmxlTztcblxuICAgICAgX3RoaXMucHJvcHMuc2V0QWN0aXZlT3B0aW9uSW5kZXgodmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmMi5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGxhYmVsID09PSBvcHRpb24ubGFiZWw7XG4gICAgICB9KSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgJiYgYWxsb3dFeGNsdXNpb25zKSB7XG4gICAgICAgICAgX3RoaXMub25FeGNsdWRlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5jaGVja2VkID09PSAnb24nIHx8IG9wdGlvbi5jaGVja2VkID09PSAnb2ZmJykge1xuICAgICAgICAgIF90aGlzLm9uUmVtb3ZlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNC5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczQub3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczQuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAvLyBpZiBzaW5nbGVTZWxlY3Rpb24gaXMgZW5hYmxlZCwgdW5jaGVjayBhbnkgc2VsZWN0ZWQgb3B0aW9uKHMpXG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcblxuICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZWRPcHRpb24uY2hlY2tlZDtcbiAgICAgICAgfSAvLyBpZiB0aGlzIGlzIHRoZSBub3ctc2VsZWN0ZWQgb3B0aW9uLCBjaGVjayBpdFxuXG5cbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gYWRkZWRPcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVkT3B0aW9uLmNoZWNrZWQgPSAnb24nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM1Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM1LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM1Lm9wdGlvbnM7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uID09PSByZW1vdmVkT3B0aW9uICYmIHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycpIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkV4Y2x1ZGVPcHRpb25cIiwgZnVuY3Rpb24gKGV4Y2x1ZGVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczYub25PcHRpb25DbGljayxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM2Lm9wdGlvbnM7XG4gICAgICBleGNsdWRlZE9wdGlvbi5jaGVja2VkID0gJ29mZic7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uID09PSBleGNsdWRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvZmYnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlTGlzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgIGlmICh0aGlzLmxpc3RCb3hSZWYgJiYgdGhpcy5wcm9wcy5zZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMubGlzdEJveFJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIFwiXCIuY29uY2F0KHRoaXMucHJvcHMubWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmxpc3RSZWYuc2Nyb2xsVG9JdGVtKHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM3LmNsYXNzTmFtZSxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnMsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczcuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzNy5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgZm9yY2VkSGVpZ2h0ID0gX3RoaXMkcHJvcHM3LmhlaWdodCxcbiAgICAgICAgICB3aW5kb3dQcm9wcyA9IF90aGlzJHByb3BzNy53aW5kb3dQcm9wcyxcbiAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczcucm93SGVpZ2h0LFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHM3LmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIG1ha2VPcHRpb25JZCA9IF90aGlzJHByb3BzNy5tYWtlT3B0aW9uSWQsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHM3LnNob3dJY29ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHM3LnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzNy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgYm9yZGVyZWQgPSBfdGhpcyRwcm9wczcuYm9yZGVyZWQsXG4gICAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczcucGFkZGluZ1NpemUsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzNy5zZWFyY2hhYmxlLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzNy5vbkZvY3VzQmFkZ2UsXG4gICAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHM3Lmxpc3RJZCxcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzNy5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczdbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzN1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHM3WydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgcm9sZSA9IF90aGlzJHByb3BzNy5yb2xlLFxuICAgICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfdGhpcyRwcm9wczcuaXNWaXJ0dWFsaXplZCxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzNy50ZXh0V3JhcCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzNywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAgIHZhciBvcHRpb25BcnJheSA9IHZpc2libGVPcHRpb25zIHx8IG9wdGlvbnM7XG4gICAgICB2YXIgaGVpZ2h0SXNGdWxsID0gZm9yY2VkSGVpZ2h0ID09PSAnZnVsbCc7XG4gICAgICB2YXIgY2FsY3VsYXRlZEhlaWdodCA9IGhlaWdodElzRnVsbCA/IGZhbHNlIDogZm9yY2VkSGVpZ2h0OyAvLyBJZiBjYWxjdWxhdGVkSGVpZ2h0IGlzIHN0aWxsIHVuZGVmaW5lZCwgdGhlbiBjYWxjdWxhdGUgaXRcblxuICAgICAgaWYgKGNhbGN1bGF0ZWRIZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbWF4VmlzaWJsZU9wdGlvbnMgPSA3O1xuICAgICAgICB2YXIgbnVtVmlzaWJsZU9wdGlvbnMgPSBvcHRpb25BcnJheS5sZW5ndGg7XG4gICAgICAgIHZhciBudW1WaXNpYmxlTW9yZVRoYW5NYXggPSBvcHRpb25BcnJheS5sZW5ndGggPiBtYXhWaXNpYmxlT3B0aW9ucztcblxuICAgICAgICBpZiAobnVtVmlzaWJsZU1vcmVUaGFuTWF4KSB7XG4gICAgICAgICAgLy8gU2hvdyBvbmx5IGhhbGYgb2YgdGhlIGxhc3Qgb25lIHRvIGluZGljYXRlIHRoZXJlJ3MgbW9yZSB0byBzY3JvbGwgdG9cbiAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ID0gKG1heFZpc2libGVPcHRpb25zIC0gMC41KSAqIHJvd0hlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ID0gbnVtVmlzaWJsZU9wdGlvbnMgKiByb3dIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdCcsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0LWZ1bGxIZWlnaHQnOiBoZWlnaHRJc0Z1bGwsXG4gICAgICAgICdldWlTZWxlY3RhYmxlTGlzdC1ib3JkZXJlZCc6IGJvcmRlcmVkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBpc1ZpcnR1YWxpemVkID8gX19fRW1vdGlvbkpTWChFdWlBdXRvU2l6ZXIsIHtcbiAgICAgICAgZGlzYWJsZUhlaWdodDogIWhlaWdodElzRnVsbFxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IF9yZWYzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjMuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGaXhlZFNpemVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcmVmOiBfdGhpczIuc2V0TGlzdFJlZixcbiAgICAgICAgICBvdXRlclJlZjogX3RoaXMyLnJlbW92ZVNjcm9sbGFibGVUYWJTdG9wLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fbGlzdFwiLFxuICAgICAgICAgIFwiZGF0YS1za2lwLWF4ZVwiOiBcInNjcm9sbGFibGUtcmVnaW9uLWZvY3VzYWJsZVwiLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGNhbGN1bGF0ZWRIZWlnaHQgfHwgaGVpZ2h0LFxuICAgICAgICAgIGl0ZW1Db3VudDogb3B0aW9uQXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGl0ZW1EYXRhOiBvcHRpb25BcnJheSxcbiAgICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGU6IFwidWxcIixcbiAgICAgICAgICBpbm5lclJlZjogX3RoaXMyLnNldExpc3RCb3hSZWZcbiAgICAgICAgfSwgd2luZG93UHJvcHMpLCBfdGhpczIuTGlzdFJvdyk7XG4gICAgICB9KSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3RcIixcbiAgICAgICAgcmVmOiB0aGlzLnJlbW92ZVNjcm9sbGFibGVUYWJTdG9wXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwidWxcIiwge1xuICAgICAgICByZWY6IHRoaXMuc2V0TGlzdEJveFJlZlxuICAgICAgfSwgb3B0aW9uQXJyYXkubWFwKGZ1bmN0aW9uIChfLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoX3RoaXMyLkxpc3RSb3csIHtcbiAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgIGRhdGE6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9LCBudWxsKTtcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlTGlzdDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGVMaXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHJvd0hlaWdodDogMzIsXG4gIHNlYXJjaFZhbHVlOiAnJyxcbiAgaXNWaXJ0dWFsaXplZDogdHJ1ZVxufSk7XG5cbkV1aVNlbGVjdGFibGVMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogVGhlIGluZGV4IG9mIHRoZSBvcHRpb24gdG8gYmUgaGlnaGxpZ2h0ZWQgYXMgcHNldWRvLWZvY3VzZWQ7XG4gICAgICAgKiBHb29kIGZvciB1c2Ugd2hlbiBvbmx5IG9uZSBzZWxlY3Rpb24gaXMgYWxsb3dlZCBhbmQgbmVlZGluZyB0byBvcGVuXG4gICAgICAgKiBkaXJlY3RseSB0byB0aGF0IG9wdGlvblxuICAgICAgICovXG4gIGFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAgICogU2hvdyB0aGUgY2hlY2svY3Jvc3Mgc2VsZWN0aW9uIGluZGljYXRvciBpY29uc1xuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFsd2F5c1wiXSksIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEFueSBwcm9wcyB0byBzZW5kIHNwZWNpZmljYWxseSB0byB0aGUgcmVhY3Qtd2luZG93IGBGaXhlZFNpemVMaXN0YFxuICAgICAgICovXG4gIHdpbmRvd1Byb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJvcmRlciBhcm91bmQgdGhlIGxpc3QgdG8gaW5kaWNhdGUgdGhlIGJvdW5kcztcbiAgICAgICAqIFVzZWZ1bCB3aGVuIHRoZSBsaXN0IHNjcm9sbHMsIG90aGVyd2lzZSB1c2UgeW91ciBvd24gY29udGFpbmVyXG4gICAgICAgKi9cbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSB0ZXh0LFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgdmlydHVhbGl6YXRpb24gaXMgb2ZmLlxuICAgICAgICovXG4gIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcblxuICAvKipcbiAgICAgICAqIFVzZSB2aXJ0dWFsaXplZCByZW5kZXJpbmcgZm9yIGxpc3QgaXRlbXMgd2l0aCBgcmVhY3Qtd2luZG93YC5cbiAgICAgICAqIFNldHMgZWFjaCByb3cncyBoZWlnaHQgdG8gdGhlIHZhbHVlIG9mIGByb3dIZWlnaHRgLlxuICAgICAgICovXG4gIGlzVmlydHVhbGl6ZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogIFRoZSBoZWlnaHQgb2YgZWFjaCBvcHRpb24gaW4gcGl4ZWxzLiBEZWZhdWx0cyB0byBgMzJgLlxuICAgICAgICogIEhhcyBubyBlZmZlY3QgaWYgYGlzVmlydHVhbGl6ZWQ9ZmFsc2VgLlxuICAgICAgICovXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBBbGwgcG9zc2libGUgb3B0aW9uc1xuICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogVmlzaWJsZSBsYWJlbCBvZiBvcHRpb24uXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMgaWYgYGtleWAgaXMgbm90IHN1cHBsaWVkXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcy5cbiAgICAgICAqIFdpbGwgYmUgdXNlZCB0byBtYXRjaCBvcHRpb25zIGluc3RlYWQgb2YgYGxhYmVsYFxuICAgICAgICovXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBMZWF2ZSBgdW5kZWZpbmVkYCB0byBpbmRpY2F0ZSBub3Qgc2VsZWN0ZWQsXG4gICAgICAgKiAnb24nIHRvIGluZGljYXRlIGluY2x1c2lvbiBhbmRcbiAgICAgICAqICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvblxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCIsIHVuZGVmaW5lZF0pLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGljb24gYW5kIHRoZSBsYWJlbFxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogT3B0aW9uIGRhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBgcmVuZGVyT3B0aW9uc2AgZWxlbWVudC5cbiAgICAgICAqIEJ5cGFzcyBgRXVpU2VsZWN0YWJsZUl0ZW1gIGFuZCBhdm9pZCBET00gYXR0cmlidXRlIHdhcm5pbmdzLlxuICAgICAgICovXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEZpbHRlcmVkIG9wdGlvbnMgbGlzdCAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgdmlzaWJsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCIsIHVuZGVmaW5lZF0pLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KVxuICB9KS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBTZWFyY2ggdmFsdWUgdG8gaGlnaGxpZ2h0IG9uIHRoZSBvcHRpb24gcmVuZGVyXG4gICAgICovXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB3aXRoIGFsdGVyZWQgY2hlY2tlZCBzdGF0ZVxuICAgICAqL1xuICBvbk9wdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZm9yIHRoZSBsYWJlbCBwb3J0aW9uIG9mIHRoZSBvcHRpb247XG4gICAgICogVGFrZXMgKG9wdGlvbiwgc2VhcmNoVmFsdWUpLCByZXR1cm5zIFJlYWN0Tm9kZVxuICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIG1heCBoZWlnaHQgaW4gcGl4ZWxzIG9yIHBhc3MgYGZ1bGxgIHRvIGFsbG93XG4gICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAqIGFsbG93cyB0aGUgbGlzdCBncm93IGFzIHdlbGxcbiAgICAgKi9cbiAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJmdWxsXCJdKV0pLFxuXG4gIC8qKlxuICAgICAqIEFsbG93IGN5Y2xpbmcgdGhyb3VnaCB0aGUgb24sIG9mZiBhbmQgdW5kZWZpbmVkIHN0YXRlIG9mIG9wdGlvbi5jaGVja2VkXG4gICAgICogYW5kIG5vdCBqdXN0IG9uIGFuZCB1bmRlZmluZWRcbiAgICAgKi9cbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIG1ha2VPcHRpb25JZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGlzdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNldEFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInJvbGVcIiwgXCJzZWFyY2hhYmxlXCIsIFwidGV4dFdyYXBcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbmZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn1cblxudmFyIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHM6ICdldWlTZWxlY3RhYmxlTGlzdEl0ZW0tLXBhZGRpbmdTbWFsbCdcbn07XG5leHBvcnQgdmFyIFBBRERJTkdfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJlZmVyLXN0YXRlbGVzcy1mdW5jdGlvblxuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlTZWxlY3RhYmxlTGlzdEl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0SXRlbShwcm9wcykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0pO1xuXG4gICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZCA9IF90aGlzJHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzLnNob3dJY29ucyxcbiAgICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wcy5hcHBlbmQsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRwYWRkaW5nU2kgPSBfdGhpcyRwcm9wcy5wYWRkaW5nU2l6ZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzJHBhZGRpbmdTaSA9PT0gdm9pZCAwID8gJ3MnIDogX3RoaXMkcHJvcHMkcGFkZGluZ1NpLFxuICAgICAgICAgIF90aGlzJHByb3BzJHJvbGUgPSBfdGhpcyRwcm9wcy5yb2xlLFxuICAgICAgICAgIHJvbGUgPSBfdGhpcyRwcm9wcyRyb2xlID09PSB2b2lkIDAgPyAnb3B0aW9uJyA6IF90aGlzJHByb3BzJHJvbGUsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wcy50ZXh0V3JhcCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbScsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgICAgIH0sIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRleHRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0JywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dC0tXCIuY29uY2F0KHRleHRXcmFwKSwgdGV4dFdyYXApKTtcbiAgICAgIHZhciBvcHRpb25JY29uO1xuXG4gICAgICBpZiAoc2hvd0ljb25zKSB7XG4gICAgICAgIHZhciBfcmVzb2x2ZUljb25BbmRDb2xvciA9IHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCksXG4gICAgICAgICAgICBpY29uID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuaWNvbixcbiAgICAgICAgICAgIGNvbG9yID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuY29sb3I7XG5cbiAgICAgICAgb3B0aW9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2ljb25cIixcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXRlO1xuICAgICAgdmFyIGluc3RydWN0aW9uO1xuXG4gICAgICBpZiAoYWxsb3dFeGNsdXNpb25zICYmIGNoZWNrZWQgPT09ICdvbicpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uaW5jbHVkZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdGVkIG9wdGlvbi5cIlxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uaW5jbHVkZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGV4Y2x1ZGUgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgY2hlY2tlZCA9PT0gJ29mZicpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkV4Y2x1ZGVkIG9wdGlvbi5cIlxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHVuY2hlY2sgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgIWNoZWNrZWQpIHtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0udW5ja2Vja2VkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBzZWxlY3QgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNDaGVja2VkID0gIWRpc2FibGVkICYmIHR5cGVvZiBjaGVja2VkID09PSAnc3RyaW5nJztcblxuICAgICAgaWYgKCFhbGxvd0V4Y2x1c2lvbnMgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIHN0YXRlID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmNoZWNrZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNoZWNrZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmVwZW5kTm9kZTtcblxuICAgICAgaWYgKHByZXBlbmQpIHtcbiAgICAgICAgcHJlcGVuZE5vZGUgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZFwiXG4gICAgICAgIH0sIHByZXBlbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXBwZW5kTm9kZTtcblxuICAgICAgaWYgKGFwcGVuZCB8fCAhIW9uRm9jdXNCYWRnZSkge1xuICAgICAgICB2YXIgb25Gb2N1c0JhZGdlTm9kZTtcbiAgICAgICAgdmFyIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcyA9IHtcbiAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAgIGljb25UeXBlOiAncmV0dXJuS2V5JyxcbiAgICAgICAgICBpY29uU2lkZTogJ2xlZnQnLFxuICAgICAgICAgIGNvbG9yOiAnaG9sbG93J1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvbkZvY3VzQmFkZ2UgPT09IHRydWUpIHtcbiAgICAgICAgICBvbkZvY3VzQmFkZ2VOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlXCJcbiAgICAgICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMpKTtcbiAgICAgICAgfSBlbHNlIGlmICghIW9uRm9jdXNCYWRnZSAmJiBvbkZvY3VzQmFkZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmFyIF9jaGlsZHJlbiA9IG9uRm9jdXNCYWRnZS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgX2NsYXNzTmFtZSA9IG9uRm9jdXNCYWRnZS5jbGFzc05hbWUsXG4gICAgICAgICAgICAgIHJlc3RCYWRnZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9uRm9jdXNCYWRnZSwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgICAgICBvbkZvY3VzQmFkZ2VOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX29uRm9jdXNCYWRnZScsIF9jbGFzc05hbWUpXG4gICAgICAgICAgfSwgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzLCByZXN0QmFkZ2VQcm9wcyksIF9jaGlsZHJlbik7XG4gICAgICAgIH0gLy8gT25seSBkaXNwbGF5IHRoZSBhcHBlbmQgd3JhcHBlciBpZiBhcHBlbmQgZXhpc3RzIG9yIGlzRm9jdXNlZFxuXG5cbiAgICAgICAgaWYgKGFwcGVuZCB8fCBpc0ZvY3VzZWQgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgYXBwZW5kTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZFwiXG4gICAgICAgICAgfSwgYXBwZW5kLCBcIiBcIiwgaXNGb2N1c2VkICYmICFkaXNhYmxlZCA/IG9uRm9jdXNCYWRnZU5vZGUgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gKGluc3RydWN0aW9uIHx8IHN0YXRlKSAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgc3RhdGUgfHwgaW5zdHJ1Y3Rpb24gPyAnIC0gJyA6IG51bGwsIHN0YXRlLCBzdGF0ZSAmJiBpbnN0cnVjdGlvbiA/ICcgJyA6IG51bGwsIGluc3RydWN0aW9uKSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgICAgICByb2xlOiByb2xlLFxuICAgICAgICBcImRhdGEtdGVzdC1zZWxlY3RlZFwiOiBpc0NoZWNrZWQgLy8gV2hldGhlciB0aGUgaXRlbSBpcyBjaGVja2VkL3NlbGVjdGVkXG4gICAgICAgICxcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogcm9sZSA9PT0gJ29wdGlvbicgPyBpc0NoZWNrZWQgOiB1bmRlZmluZWQgLy8gV2hldGhlciB0aGUgaXRlbSBpcyBcImNoZWNrZWRcIlxuICAgICAgICAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhZGlzYWJsZWQgJiYgaXNGb2N1c2VkIC8vIFdoZXRoZXIgdGhlIGl0ZW0gaGFzIGtleWJvYXJkIGZvY3VzIHBlciBXMyBzcGVjXG4gICAgICAgICxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWRcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnRcIlxuICAgICAgfSwgb3B0aW9uSWNvbiwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4sIGluc3RydWN0aW9ucyksIGFwcGVuZE5vZGUpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpU2VsZWN0YWJsZUxpc3RJdGVtO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZSxcbiAgb25Gb2N1c0JhZGdlOiB0cnVlLFxuICB0ZXh0V3JhcDogJ3RydW5jYXRlJ1xufSk7XG5cbkV1aVNlbGVjdGFibGVMaXN0SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyBhbiBpY29uIGFuZCB2aXN1YWwgc3R5bGluZyB0byBhY3RpdmF0ZWQgaXRlbXNcbiAgICAgICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBTaG93cyBpY29ucyBiYXNlZCBvbiBgY2hlY2tlZGAgdHlwZVxuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBIaWdobGlnaHRzIHRoZSBpdGVtIGZvciBwc2V1ZG8gZm9jdXNcbiAgICAgICAqL1xuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSBhIGN1c3RvbSBiYWRnZSxcbiAgICAgICAqIHNob3dzIGEgaG9sbG93IGJhZGdlIGFzIGFuIGFwcGVuZCAoZmFyIHJpZ2h0KSB3aGVuIHRoZSBpdGVtIGlzIGZvY3VzZWQuXG4gICAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHdoZW4gYHRydWVgIGlzIGBcdTIxQTkgdG8gc2VsZWN0L2Rlc2VsZWN0L2luY2x1ZGUvZXhjbHVkZWBcbiAgICAgICAqL1xuICBvbkZvY3VzQmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgICAqL1xuICAgIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgdGhlIGxpc3QgaXRlbXMuXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRoZSBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2UgaXMgc2VhcmNoYWJsZS5cbiAgICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFNwYWNlIGtleSB3aWxsIG5vdCB0b2dnbGUgc2VsZWN0aW9uLCBhcyBpdCB3aWxsIHR5cGUgaW50byB0aGUgc2VhcmNoIGJveCBpbnN0ZWFkLiBTY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB3aWxsIGJlIGFkZGVkIGluc3RydWN0aW5nIHVzZXJzIHRvIHVzZSB0aGUgRW50ZXIga2V5IHRvIHNlbGVjdCBpdGVtcy5cbiAgICAgICAqIFdoZW4gZmFsc2UsIHRoZSBTcGFjZSBrZXkgd2lsbCB0b2dnbGUgaXRlbSBzZWxlY3Rpb24uIE5vIGV4dHJhIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQsIGFzIFNwYWNlIHRvIHRvZ2dsZSBpcyBhIGdlbmVyYWxseSBzdGFuZGFyZCBmb3IgbW9zdCBzZWxlY3QvY2hlY2tlZCBlbGVtZW50cy5cbiAgICAgICAqL1xuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIEF0dHJpYnV0ZSBhcHBsaWVkIHRoZSBvcHRpb24gYDxsaT5gLlxuICAgICAgICogSWYgY29uZmlndXJlZCB0byBzb21ldGhpbmcgYmVzaWRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgb3B0aW9uYCxcbiAgICAgICAqIG90aGVyIEFSSUEgYXR0cmlidXRlcyBzdWNoIGFzIGBhcmlhLWNoZWNrZWRgIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZC5cbiAgICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wcmVzc2VkXCIsIFwidGFibGVMYXlvdXRcIiwgXCJyZXNwb25zaXZlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0YWJsZUxheW91dFRvQ2xhc3NNYXAgPSB7XG4gIGZpeGVkOiBudWxsLFxuICBhdXRvOiAnZXVpVGFibGUtLWF1dG8nXG59O1xuZXhwb3J0IHZhciBFdWlUYWJsZSA9IGZ1bmN0aW9uIEV1aVRhYmxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIF9yZWYkdGFibGVMYXlvdXQgPSBfcmVmLnRhYmxlTGF5b3V0LFxuICAgICAgdGFibGVMYXlvdXQgPSBfcmVmJHRhYmxlTGF5b3V0ID09PSB2b2lkIDAgPyAnZml4ZWQnIDogX3JlZiR0YWJsZUxheW91dCxcbiAgICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHJlc3BvbnNpdmUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZScsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZS0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgJ2V1aVRhYmxlLS1yZXNwb25zaXZlJzogcmVzcG9uc2l2ZVxuICB9LCB0YWJsZUxheW91dFRvQ2xhc3NNYXBbdGFibGVMYXlvdXRdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0YWJsZVwiLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlLnByb3BUeXBlcyA9IHtcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHlcbiAgICAgKi9cbiAgdGFibGVMYXlvdXQ6IFByb3BUeXBlcy5vbmVPZihbXCJmaXhlZFwiLCBcImF1dG9cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImJvZHlSZWZcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVCb2R5ID0gZnVuY3Rpb24gRXVpVGFibGVCb2R5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgYm9keVJlZiA9IF9yZWYuYm9keVJlZixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRib2R5XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICByZWY6IGJvZHlSZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUJvZHkucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJvZHlSZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUZvb3RlciA9IGZ1bmN0aW9uIEV1aVRhYmxlRm9vdGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGZvb3RcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwidHJcIiwgbnVsbCwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUZvb3Rlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgQ0VOVEVSX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyQ2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlRm9vdGVyQ2VsbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmJGFsaWduLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUZvb3RlckNlbGwnLCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5UXG4gIH0pO1xuICB2YXIgc3R5bGVPYmogPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50X190ZXh0XCJcbiAgfSwgY2hpbGRyZW4pKSk7XG59O1xuRXVpVGFibGVGb290ZXJDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wid2lkdGhcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgV0FSTklOR19NRVNTQUdFID0gJ1R3byBgd2lkdGhgIHByb3BlcnRpZXMgd2VyZSBwcm92aWRlZC4gUHJvdmlkZSBvbmx5IG9uZSBvZiBgc3R5bGUud2lkdGhgIG9yIGB3aWR0aGAgdG8gYXZvaWQgY29uZmxpY3RzLic7XG5leHBvcnQgdmFyIHJlc29sdmVXaWR0aEFzU3R5bGUgPSBmdW5jdGlvbiByZXNvbHZlV2lkdGhBc1N0eWxlKCkge1xuICB2YXIgc3R5bGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgd2lkdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICB2YXIgc3R5bGVXaWR0aCA9IHN0eWxlLndpZHRoLFxuICAgICAgc3R5bGVSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHN0eWxlLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBhdHRyV2lkdGggPSB3aWR0aDtcblxuICBpZiAoYXR0cldpZHRoICE9IG51bGwgJiYgKHR5cGVvZiBhdHRyV2lkdGggPT09ICdudW1iZXInIHx8ICFpc05hTihOdW1iZXIoYXR0cldpZHRoKSkpIC8vIHRyYW5zZm9ybSB7bnVtYmVyfSBvciB1bml0bGVzcyAnbnVtYmVyJyB0byBweCBzdHJpbmdcbiAgKSB7XG4gICAgYXR0cldpZHRoID0gXCJcIi5jb25jYXQoYXR0cldpZHRoLCBcInB4XCIpO1xuICB9XG5cbiAgaWYgKHN0eWxlV2lkdGggJiYgYXR0cldpZHRoKSB7XG4gICAgY29uc29sZS53YXJuKFdBUk5JTkdfTUVTU0FHRSk7XG4gIH1cblxuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZVJlc3QpLCB7fSwge1xuICAgIHdpZHRoOiBhdHRyV2lkdGggfHwgc3R5bGVXaWR0aFxuICB9KTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIndyYXBXaXRoVGFibGVSb3dcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXIgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYud3JhcFdpdGhUYWJsZVJvdyxcbiAgICAgIHdyYXBXaXRoVGFibGVSb3cgPSBfcmVmJHdyYXBXaXRoVGFibGVSb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHdyYXBXaXRoVGFibGVSb3csXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aGVhZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIHdyYXBXaXRoVGFibGVSb3cgPyBfX19FbW90aW9uSlNYKFwidHJcIiwgbnVsbCwgY2hpbGRyZW4pIDogY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQ2hpbGRyZW4gbXVzdCBiZSB2YWxpZCBET00gc3RydWN0dXJlIHJlc2lkaW5nIHdpdGhpbiBgPHRoZWFkPmAuXG4gICAgICAgKiBVc2UgYDx0ZD4gfCA8dGg+YCBieSBkZWZhdWx0LCBvciBgPHRyPjx0aC8+PC90cj5gIHdoZW4gYHdyYXBXaXRoVGFibGVSb3c9ZmFsc2VgXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAgICogQXV0b21hdGljYWxseSBhZGRzIGEgd3JhcHBpbmcgYDx0cj5gIGVsZW1lbnQgYXJvdW5kIHRoZSBjaGlsZHJlblxuICAgICAgICovXG4gIHdyYXBXaXRoVGFibGVSb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcIm9uU29ydFwiLCBcImlzU29ydGVkXCIsIFwiaXNTb3J0QXNjZW5kaW5nXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJtb2JpbGVPcHRpb25zXCIsIFwid2lkdGhcIiwgXCJzdHlsZVwiLCBcInJlYWRPbmx5XCIsIFwiZGVzY3JpcHRpb25cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIENFTlRFUl9BTElHTk1FTlQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgQ2VsbENvbnRlbnRzID0gZnVuY3Rpb24gQ2VsbENvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmLmRlc2NyaXB0aW9uLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgaXNTb3J0ZWQgPSBfcmVmLmlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZi5pc1NvcnRBc2NlbmRpbmcsXG4gICAgICBzaG93U29ydE1zZyA9IF9yZWYuc2hvd1NvcnRNc2c7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aVRhYmxlSGVhZGVyQ2VsbC50aXRsZVRleHRXaXRoRGVzY1wiLFxuICAgICAgZGVmYXVsdDogXCJ7aW5uZXJUZXh0fTsge2Rlc2NyaXB0aW9ufVwiLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIGlubmVyVGV4dDogaW5uZXJUZXh0LFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAodGl0bGVUZXh0V2l0aERlc2MpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIHRpdGxlOiBkZXNjcmlwdGlvbiA/IHRpdGxlVGV4dFdpdGhEZXNjIDogaW5uZXJUZXh0LFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHRcIlxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9KSwgZGVzY3JpcHRpb24gJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBkZXNjcmlwdGlvbikpLCBzaG93U29ydE1zZyAmJiBpc1NvcnRlZCAmJiBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVTb3J0SWNvblwiLFxuICAgIHR5cGU6IGlzU29ydEFzY2VuZGluZyA/ICdzb3J0VXAnIDogJ3NvcnREb3duJyxcbiAgICBzaXplOiBcIm1cIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyQ2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyQ2VsbChfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIF9yZWYyJGFsaWduID0gX3JlZjIuYWxpZ24sXG4gICAgICBhbGlnbiA9IF9yZWYyJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYyJGFsaWduLFxuICAgICAgb25Tb3J0ID0gX3JlZjIub25Tb3J0LFxuICAgICAgaXNTb3J0ZWQgPSBfcmVmMi5pc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYyLmlzU29ydEFzY2VuZGluZyxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICAgIHNjb3BlID0gX3JlZjIuc2NvcGUsXG4gICAgICBfcmVmMiRtb2JpbGVPcHRpb25zID0gX3JlZjIubW9iaWxlT3B0aW9ucyxcbiAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmMiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB7XG4gICAgc2hvdzogdHJ1ZVxuICB9IDogX3JlZjIkbW9iaWxlT3B0aW9ucyxcbiAgICAgIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlLFxuICAgICAgcmVhZE9ubHkgPSBfcmVmMi5yZWFkT25seSxcbiAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjIuZGVzY3JpcHRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJDZWxsJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlSGVhZGVyQ2VsbC0taGlkZUZvckRlc2t0b3AnOiBtb2JpbGVPcHRpb25zLm9ubHksXG4gICAgJ2V1aVRhYmxlSGVhZGVyQ2VsbC0taGlkZUZvck1vYmlsZSc6ICFtb2JpbGVPcHRpb25zLnNob3dcbiAgfSk7XG4gIHZhciBjb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlRcbiAgfSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgdmFyIENlbGxDb21wb25lbnQgPSBjaGlsZHJlbiA/ICd0aCcgOiAndGQnO1xuICB2YXIgY2VsbFNjb3BlID0gQ2VsbENvbXBvbmVudCA9PT0gJ3RoJyA/IHNjb3BlICE9PSBudWxsICYmIHNjb3BlICE9PSB2b2lkIDAgPyBzY29wZSA6ICdjb2wnIDogdW5kZWZpbmVkOyAvLyBgc2NvcGVgIGlzIG9ubHkgdmFsaWQgb24gYHRoYCBlbGVtZW50c1xuXG4gIGlmIChvblNvcnQgfHwgaXNTb3J0ZWQpIHtcbiAgICB2YXIgYnV0dG9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQnV0dG9uJywge1xuICAgICAgJ2V1aVRhYmxlSGVhZGVyQnV0dG9uLWlzU29ydGVkJzogaXNTb3J0ZWRcbiAgICB9KTtcbiAgICB2YXIgYXJpYVNvcnRWYWx1ZSA9ICdub25lJztcblxuICAgIGlmIChpc1NvcnRlZCkge1xuICAgICAgYXJpYVNvcnRWYWx1ZSA9IGlzU29ydEFzY2VuZGluZyA/ICdhc2NlbmRpbmcnIDogJ2Rlc2NlbmRpbmcnO1xuICAgIH1cblxuICAgIHZhciBjZWxsQ29udGVudHMgPSBfX19FbW90aW9uSlNYKENlbGxDb250ZW50cywge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NlcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgIHNob3dTb3J0TXNnOiB0cnVlLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgaXNTb3J0ZWQ6IGlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nOiBpc1NvcnRBc2NlbmRpbmdcbiAgICB9KTtcblxuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENlbGxDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHNjb3BlOiBjZWxsU2NvcGUsXG4gICAgICByb2xlOiBcImNvbHVtbmhlYWRlclwiLFxuICAgICAgXCJhcmlhLXNvcnRcIjogYXJpYVNvcnRWYWx1ZSxcbiAgICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsXG4gICAgICBzdHlsZTogc3R5bGVPYmpcbiAgICB9LCByZXN0KSwgb25Tb3J0ICYmICFyZWFkT25seSA/IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzTmFtZTogYnV0dG9uQ2xhc3NlcyxcbiAgICAgIG9uQ2xpY2s6IG9uU29ydCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlclNvcnRCdXR0b25cIlxuICAgIH0sIGNlbGxDb250ZW50cykgOiBjZWxsQ29udGVudHMpO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzY29wZTogY2VsbFNjb3BlLFxuICAgIHJvbGU6IFwiY29sdW1uaGVhZGVyXCIsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKENlbGxDb250ZW50cywge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzZXMsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgIHNob3dTb3J0TXNnOiBmYWxzZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgaXNTb3J0ZWQ6IGlzU29ydGVkLFxuICAgIGlzU29ydEFzY2VuZGluZzogaXNTb3J0QXNjZW5kaW5nXG4gIH0pKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogTW9iaWxlIG9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgZGlmZmVyZW50bHkgYXQgc21hbGwgc2NyZWVuc1xuICAgICAgICovXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgICAgICogSWYgZmFsc2UsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgbW9iaWxlXG4gICAgICAgICAgICovXG4gICAgc2hvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAgICAgKiBPbmx5IHNob3cgZm9yIG1vYmlsZT8gSWYgdHJ1ZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsXG4gICAgICAgICAgICogZm9yIGRlc2t0b3BcbiAgICAgICAgICAgKi9cbiAgICBvbmx5OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgc2NvcGU6IFByb3BUeXBlcy5vbmVPZihbXCJjb2xcIiwgXCJyb3dcIiwgXCJjb2xncm91cFwiLCBcInJvd2dyb3VwXCJdKSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogU2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGJ1dCByZW1vdmVzIHRoZSBidXR0b25cbiAgICAgICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInNjb3BlXCIsIFwic3R5bGVcIiwgXCJ3aWR0aFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94ID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3goX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIHNjb3BlID0gX3JlZiRzY29wZSA9PT0gdm9pZCAwID8gJ2NvbCcgOiBfcmVmJHNjb3BlLFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVPYmogPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGhcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzY29wZTogc2NvcGUsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLFxuICBzY29wZTogUHJvcFR5cGVzLm9uZU9mKFtcImNvbFwiLCBcInJvd1wiLCBcImNvbGdyb3VwXCIsIFwicm93Z3JvdXBcIl0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlck1vYmlsZSA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyTW9iaWxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJNb2JpbGUnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXJNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiaXRlbXNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uX2VtcHR5JztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi8uLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpVGFibGVTb3J0TW9iaWxlSXRlbSB9IGZyb20gJy4vdGFibGVfc29ydF9tb2JpbGVfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRhYmxlU29ydE1vYmlsZSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUYWJsZVNvcnRNb2JpbGUpO1xuXG4gIGZ1bmN0aW9uIEV1aVRhYmxlU29ydE1vYmlsZSgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVGFibGVTb3J0TW9iaWxlKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJ1dHRvbkNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogIV90aGlzLnN0YXRlLmlzUG9wb3Zlck9wZW5cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzUG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUYWJsZVNvcnRNb2JpbGUsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF90aGlzJHByb3BzLmFuY2hvclBvc2l0aW9uLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGUnLCBjbGFzc05hbWUpO1xuXG4gICAgICB2YXIgbW9iaWxlU29ydEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIHtcbiAgICAgICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgICAgIGljb25TaWRlOiBcInJpZ2h0XCIsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25CdXR0b25DbGljay5iaW5kKHRoaXMpLFxuICAgICAgICBmbHVzaDogXCJyaWdodFwiLFxuICAgICAgICBzaXplOiBcInhzXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUYWJsZVNvcnRNb2JpbGUuc29ydGluZ1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNvcnRpbmdcIlxuICAgICAgfSkpO1xuXG4gICAgICB2YXIgbW9iaWxlU29ydFBvcG92ZXIgPSBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgYnV0dG9uOiBtb2JpbGVTb3J0QnV0dG9uLFxuICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuaXNQb3BvdmVyT3BlbixcbiAgICAgICAgY2xvc2VQb3BvdmVyOiB0aGlzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgYW5jaG9yUG9zaXRpb246IGFuY2hvclBvc2l0aW9uIHx8ICdkb3duUmlnaHQnLFxuICAgICAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIlxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG1pbldpZHRoOiAyMDBcbiAgICAgICAgfSxcbiAgICAgICAgaXRlbXM6IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0sIHtcbiAgICAgICAgICAgIGtleTogaXRlbS5rZXksXG4gICAgICAgICAgICBvblNvcnQ6IGl0ZW0ub25Tb3J0LFxuICAgICAgICAgICAgaXNTb3J0ZWQ6IGl0ZW0uaXNTb3J0ZWQsXG4gICAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IGl0ZW0uaXNTb3J0QXNjZW5kaW5nXG4gICAgICAgICAgfSwgaXRlbS5uYW1lKTtcbiAgICAgICAgfSkgOiB1bmRlZmluZWRcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIG1vYmlsZVNvcnRQb3BvdmVyKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVGFibGVTb3J0TW9iaWxlO1xufShDb21wb25lbnQpO1xuRXVpVGFibGVTb3J0TW9iaWxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5hbnksXG4gICAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhTGFiZWxcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVTb3J0TW9iaWxlSXRlbSA9IGZ1bmN0aW9uIEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgb25Tb3J0ID0gX3JlZi5vblNvcnQsXG4gICAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgYXJpYUxhYmVsID0gX3JlZi5hcmlhTGFiZWwsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHNvcnRJY29uID0gJ2VtcHR5JztcblxuICBpZiAoaXNTb3J0ZWQpIHtcbiAgICBzb3J0SWNvbiA9IGlzU29ydEFzY2VuZGluZyA/ICdzb3J0VXAnIDogJ3NvcnREb3duJztcbiAgfVxuXG4gIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVTb3J0TW9iaWxlSXRlbScsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZVNvcnRNb2JpbGVJdGVtLWlzU29ydGVkJzogaXNTb3J0ZWRcbiAgfSk7XG4gIHZhciBjb2x1bW5UaXRsZSA9IGFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IGNoaWxkcmVuO1xuICB2YXIgc3RhdGVmdWxBcmlhTGFiZWwgPSBcIlNvcnQgXCIuY29uY2F0KGNvbHVtblRpdGxlLCBcIiBcIikuY29uY2F0KGlzU29ydEFzY2VuZGluZyA/ICdkZXNjZW5kaW5nJyA6ICdhc2NlbmRpbmcnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgIGljb246IHNvcnRJY29uLFxuICAgIG9uQ2xpY2s6IG9uU29ydCxcbiAgICBcImFyaWEtbGFiZWxcIjogc3RhdGVmdWxBcmlhTGFiZWxcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVNvcnRNb2JpbGVJdGVtLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8ga25vdyB3aGVuIGFuIGl0ZW0gaGFzIGJlZW4gY2xpY2tlZFxuICAgICAqL1xuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBjdXJyZW50IG9wdGlvbiBpcyB0aGUgc29ydGVkIG9uIGNvbHVtblxuICAgICAqL1xuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGRpcmVjdGlvbiB0aGUgY3VycmVudCBjb2x1bW4gaXMgc29ydGVkIG9uXG4gICAgICovXG4gIGlzU29ydEFzY2VuZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNTZWxlY3RhYmxlXCIsIFwiaGFzQWN0aW9uc1wiLCBcImlzRXhwYW5kZWRSb3dcIiwgXCJpc0V4cGFuZGFibGVcIiwgXCJvbkNsaWNrXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUm93ID0gZnVuY3Rpb24gRXVpVGFibGVSb3coX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgICAgaXNTZWxlY3RhYmxlID0gX3JlZi5pc1NlbGVjdGFibGUsXG4gICAgICBoYXNBY3Rpb25zID0gX3JlZi5oYXNBY3Rpb25zLFxuICAgICAgaXNFeHBhbmRlZFJvdyA9IF9yZWYuaXNFeHBhbmRlZFJvdyxcbiAgICAgIGlzRXhwYW5kYWJsZSA9IF9yZWYuaXNFeHBhbmRhYmxlLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlUm93LWlzU2VsZWN0YWJsZSc6IGlzU2VsZWN0YWJsZSxcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RlZCc6IGlzU2VsZWN0ZWQsXG4gICAgJ2V1aVRhYmxlUm93LWhhc0FjdGlvbnMnOiBoYXNBY3Rpb25zLFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGVkUm93JzogaXNFeHBhbmRlZFJvdyxcbiAgICAnZXVpVGFibGVSb3ctaXNFeHBhbmRhYmxlJzogaXNFeHBhbmRhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc0NsaWNrYWJsZSc6IG9uQ2xpY2tcbiAgfSk7XG5cbiAgaWYgKCFvbkNsaWNrKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG5cbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIC8vIFByZXZlbnQgYSBzY3JvbGwgZnJvbSBvY2N1cnJpbmcgaWYgdGhlIHVzZXIgaGFzIGhpdCBzcGFjZS5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIHZhciBvbktleVVwID0gZnVuY3Rpb24gb25LZXlVcChldmVudCkge1xuICAgIC8vIFN1cHBvcnQga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBieSBlbXVsYXRpbmcgbW91c2UgY2xpY2sgb24gRU5URVIgb3IgU1BBQ0Uga2V5cHJlc3MuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiB8fCBldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICBvbktleVVwOiBvbktleVVwLFxuICAgIHRhYkluZGV4OiAwXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBoYXMgYSBzaW5nbGUgY29sdW1uIG9mIGNoZWNrYm94ZXMgZm9yIHNlbGVjdGluZ1xuICAgICAqIHJvd3MgKGFmZmVjdHMgbW9iaWxlIG9ubHkpXG4gICAgICovXG4gIGlzU2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoZSBjdXJyZW50IHJvdyBoYXMgYmVlbiBzZWxlY3RlZFxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIGRlZGljYXRlZCBjb2x1bW4gZm9yIGljb24tb25seSBhY3Rpb25zXG4gICAgICogKGFmZmVjdHMgbW9iaWxlIG9ubHkpXG4gICAgICovXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgaGF2ZSBhbiBleHBhbmRlZCByb3dcbiAgICAgKi9cbiAgaXNFeHBhbmRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJvdyB3aWxsIGJlIHRoZSBleHBhbmRlZCByb3dcbiAgICAgKi9cbiAgaXNFeHBhbmRlZFJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidHJ1bmNhdGVUZXh0XCIsIFwic2V0U2NvcGVSb3dcIiwgXCJzaG93T25Ib3ZlclwiLCBcInRleHRPbmx5XCIsIFwiaGFzQWN0aW9uc1wiLCBcImlzRXhwYW5kZXJcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCIsIFwidmFsaWduXCIsIFwibW9iaWxlT3B0aW9uc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBDRU5URVJfQUxJR05NRU5ULCB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVSb3dDZWxsKF9yZWYpIHtcbiAgdmFyIF9tb2JpbGVPcHRpb25zJHNob3dPbiwgX21vYmlsZU9wdGlvbnMkdHJ1bmNhO1xuXG4gIHZhciBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmJGFsaWduLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB0cnVuY2F0ZVRleHQgPSBfcmVmLnRydW5jYXRlVGV4dCxcbiAgICAgIHNldFNjb3BlUm93ID0gX3JlZi5zZXRTY29wZVJvdyxcbiAgICAgIHNob3dPbkhvdmVyID0gX3JlZi5zaG93T25Ib3ZlcixcbiAgICAgIF9yZWYkdGV4dE9ubHkgPSBfcmVmLnRleHRPbmx5LFxuICAgICAgdGV4dE9ubHkgPSBfcmVmJHRleHRPbmx5ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiR0ZXh0T25seSxcbiAgICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgICBpc0V4cGFuZGVyID0gX3JlZi5pc0V4cGFuZGVyLFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgX3JlZiR2YWxpZ24gPSBfcmVmLnZhbGlnbixcbiAgICAgIHZhbGlnbiA9IF9yZWYkdmFsaWduID09PSB2b2lkIDAgPyAnbWlkZGxlJyA6IF9yZWYkdmFsaWduLFxuICAgICAgX3JlZiRtb2JpbGVPcHRpb25zID0gX3JlZi5tb2JpbGVPcHRpb25zLFxuICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYkbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8ge1xuICAgIHNob3c6IHRydWVcbiAgfSA6IF9yZWYkbW9iaWxlT3B0aW9ucyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2VsbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvd0NlbGwnLCBfZGVmaW5lUHJvcGVydHkoe1xuICAgICdldWlUYWJsZVJvd0NlbGwtLWhhc0FjdGlvbnMnOiBoYXNBY3Rpb25zLFxuICAgICdldWlUYWJsZVJvd0NlbGwtLWlzRXhwYW5kZXInOiBpc0V4cGFuZGVyLFxuICAgICdldWlUYWJsZVJvd0NlbGwtLWhpZGVGb3JEZXNrdG9wJzogbW9iaWxlT3B0aW9ucy5vbmx5LFxuICAgICdldWlUYWJsZVJvd0NlbGwtLWVubGFyZ2VGb3JNb2JpbGUnOiBtb2JpbGVPcHRpb25zLmVubGFyZ2VcbiAgfSwgXCJldWlUYWJsZVJvd0NlbGwtLVwiLmNvbmNhdCh2YWxpZ24pLCB2YWxpZ24pKTtcbiAgdmFyIGNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tc2hvd09uSG92ZXInOiBzaG93T25Ib3ZlcixcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tdHJ1bmNhdGVUZXh0JzogdHJ1bmNhdGVUZXh0LFxuICAgIC8vIFdlJ3JlIGRvaW5nIHRoaXMgcmlnYW1hcm9sZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGBldWlUYWJsZUNlbGxDb250ZW50LS10ZXh0T25seWAgZm9yIEJXQ1xuICAgIC8vIHB1cnBvc2VzIGZvciB0aGUgdGltZS1iZWluZy5cbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tb3ZlcmZsb3dpbmdDb250ZW50JzogdGV4dE9ubHkgIT09IHRydWVcbiAgfSk7XG4gIHZhciBtb2JpbGVDb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IG1vYmlsZU9wdGlvbnMuYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCB8fCBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IG1vYmlsZU9wdGlvbnMuYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlQgfHwgYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLXNob3dPbkhvdmVyJzogKF9tb2JpbGVPcHRpb25zJHNob3dPbiA9IG1vYmlsZU9wdGlvbnMuc2hvd09uSG92ZXIpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJHNob3dPbiAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkc2hvd09uIDogc2hvd09uSG92ZXIsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLXRydW5jYXRlVGV4dCc6IChfbW9iaWxlT3B0aW9ucyR0cnVuY2EgPSBtb2JpbGVPcHRpb25zLnRydW5jYXRlVGV4dCkgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkdHJ1bmNhICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgOiB0cnVuY2F0ZVRleHQsXG4gICAgLy8gV2UncmUgZG9pbmcgdGhpcyByaWdhbWFyb2xlIGluc3RlYWQgb2YgY3JlYXRpbmcgYGV1aVRhYmxlQ2VsbENvbnRlbnQtLXRleHRPbmx5YCBmb3IgQldDXG4gICAgLy8gcHVycG9zZXMgZm9yIHRoZSB0aW1lLWJlaW5nLlxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1vdmVyZmxvd2luZ0NvbnRlbnQnOiBtb2JpbGVPcHRpb25zLnRleHRPbmx5ICE9PSB0cnVlIHx8IHRleHRPbmx5ICE9PSB0cnVlXG4gIH0pO1xuICB2YXIgY2hpbGRDbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dDogdGV4dE9ubHkgPT09IHRydWUsXG4gICAgZXVpVGFibGVDZWxsQ29udGVudF9faG92ZXJJdGVtOiBzaG93T25Ib3ZlclxuICB9KTtcbiAgdmFyIHdpZHRoVmFsdWUgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKFsneHMnLCAncyddKSAmJiBtb2JpbGVPcHRpb25zLndpZHRoID8gbW9iaWxlT3B0aW9ucy53aWR0aCA6IHdpZHRoO1xuICB2YXIgc3R5bGVPYmogPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aFZhbHVlKTtcblxuICBmdW5jdGlvbiBtb2RpZnlDaGlsZHJlbihjaGlsZHJlbikge1xuICAgIHZhciBtb2RpZmllZENoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICBpZiAodGV4dE9ubHkgPT09IHRydWUpIHtcbiAgICAgIG1vZGlmaWVkQ2hpbGRyZW4gPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc2VzXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSBlbHNlIGlmICggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgbW9kaWZpZWRDaGlsZHJlbiA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGNoaWxkLnByb3BzLmNsYXNzTmFtZSwgY2hpbGRDbGFzc2VzKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZENoaWxkcmVuO1xuICB9XG5cbiAgdmFyIGNoaWxkcmVuTm9kZSA9IG1vZGlmeUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgdmFyIGhpZGVGb3JNb2JpbGVDbGFzc2VzID0gJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvck1vYmlsZSc7XG4gIHZhciBzaG93Rm9yTW9iaWxlQ2xhc3NlcyA9ICdldWlUYWJsZVJvd0NlbGwtLWhpZGVGb3JEZXNrdG9wJztcbiAgdmFyIEVsZW1lbnQgPSBzZXRTY29wZVJvdyA/ICd0aCcgOiAndGQnO1xuXG4gIHZhciBzaGFyZWRQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIHNjb3BlOiBzZXRTY29wZVJvdyA/ICdyb3cnIDogdW5kZWZpbmVkLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KTtcblxuICBpZiAobW9iaWxlT3B0aW9ucy5zaG93ID09PSBmYWxzZSkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2VsbENsYXNzZXMsIFwiIFwiKS5jb25jYXQoaGlkZUZvck1vYmlsZUNsYXNzZXMpXG4gICAgfSwgc2hhcmVkUHJvcHMpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzZXNcbiAgICB9LCBjaGlsZHJlbk5vZGUpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNlbGxDbGFzc2VzXG4gICAgfSwgc2hhcmVkUHJvcHMpLCBtb2JpbGVPcHRpb25zLmhlYWRlciAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVJvd0NlbGxfX21vYmlsZUhlYWRlciBcIi5jb25jYXQoc2hvd0Zvck1vYmlsZUNsYXNzZXMpXG4gICAgfSwgbW9iaWxlT3B0aW9ucy5oZWFkZXIpLCBtb2JpbGVPcHRpb25zLnJlbmRlciA/IF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChtb2JpbGVDb250ZW50Q2xhc3NlcywgXCIgXCIpLmNvbmNhdChzaG93Rm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBtb2RpZnlDaGlsZHJlbihtb2JpbGVPcHRpb25zLnJlbmRlcikpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY29udGVudENsYXNzZXMsIFwiIFwiKS5jb25jYXQoaGlkZUZvck1vYmlsZUNsYXNzZXMpXG4gICAgfSwgY2hpbGRyZW5Ob2RlKSkgOiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzZXNcbiAgICB9LCBjaGlsZHJlbk5vZGUpKTtcbiAgfVxufTtcbkV1aVRhYmxlUm93Q2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBWZXJ0aWNhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiAgICAgKi9cbiAgdmFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjZWxsIHNob3VsZCBiZSBtYXJrZWQgYXMgdGhlIGhlYWRpbmcgZm9yIGl0cyByb3dcbiAgICAgKi9cbiAgc2V0U2NvcGVSb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIGRlZGljYXRlZCB0byBpY29uLW9ubHkgYWN0aW9ucyAoY3VycmVudGx5XG4gICAgICogYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIGFzIHRoZSBleHBhbmRhYmxlIHJvdyB0b2dnbGVcbiAgICAgKi9cbiAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogTW9iaWxlIG9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgZGlmZmVyZW50bHkgYXQgc21hbGwgc2NyZWVucztcbiAgICAgKiBTZWUgI0V1aVRhYmxlUm93Q2VsbE1vYmlsZU9wdGlvbnNTaGFwZVxuICAgICAqL1xuICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogSWYgZmFsc2UsIHdpbGwgbm90IHJlbmRlciB0aGUgY2VsbCBhdCBhbGwgZm9yIG1vYmlsZVxuICAgICAgICovXG4gICAgc2hvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIE9ubHkgc2hvdyBmb3IgbW9iaWxlPyBJZiB0cnVlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGwgZm9yIGRlc2t0b3BcbiAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBDdXN0b20gcmVuZGVyL2NoaWxkcmVuIGlmIGRpZmZlcmVudCBmcm9tIGRlc2t0b3BcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBjb2x1bW4ncyBoZWFkZXIgZm9yIHVzZSBpbiBtb2JpbGUgdmlldyAoYXV0b21hdGljYWxseSBwYXNzZWQgZG93blxuICAgICAgICogd2hlbiB1c2luZyBgRXVpQmFzaWNUYWJsZWApLlxuICAgICAgICogT3IgcGFzcyBgZmFsc2VgIHRvIG5vdCBzaG93IGEgaGVhZGVyIGF0IGFsbC5cbiAgICAgICAqL1xuICAgIGhlYWRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBJbmNyZWFzZSB0ZXh0IHNpemUgY29tcGFyZWQgdG8gcmVzdCBvZiBjZWxsc1xuICAgICAgICovXG4gICAgZW5sYXJnZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIHZhbHVlIHRvIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBpbiBtb2JpbGUgdmlldyAodHlwaWNhbGx5IDUwJSlcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBfU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgYWN0aW9uIGNlbGxzX1xuICAgICAgICovXG4gICAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBTZXR0aW5nIGB0ZXh0T25seWAgdG8gYGZhbHNlYCB3aWxsIGJyZWFrIHdvcmRzIHVubmVjZXNzYXJpbHkgb24gRkYgYW5kXG4gICAgICAgKiBJRS4gIFRvIGNvbWJhdCB0aGlzIHByb2JsZW0gb24gRkYsIHdyYXAgY29udGVudHMgd2l0aCB0aGUgY3NzIHV0aWxpdHlcbiAgICAgICAqIGAuZXVpLXRleHRCcmVha1dvcmRgLlxuICAgICAgICovXG4gICAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBEb24ndCBhbGxvdyBsaW5lIGJyZWFrcyB3aXRoaW4gY2VsbHNcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG5cbiAgLyoqXG4gICAgICogSG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGxcbiAgICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gIC8qKlxuICAgICAqIF9TaG91bGQgb25seSBiZSB1c2VkIGZvciBhY3Rpb24gY2VsbHNfXG4gICAgICovXG4gIHNob3dPbkhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTZXR0aW5nIGB0ZXh0T25seWAgdG8gYGZhbHNlYCB3aWxsIGJyZWFrIHdvcmRzIHVubmVjZXNzYXJpbHkgb24gRkYgYW5kXG4gICAgICogSUUuICBUbyBjb21iYXQgdGhpcyBwcm9ibGVtIG9uIEZGLCB3cmFwIGNvbnRlbnRzIHdpdGggdGhlIGNzcyB1dGlsaXR5XG4gICAgICogYC5ldWktdGV4dEJyZWFrV29yZGAuXG4gICAgICovXG4gIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBEb24ndCBhbGxvdyBsaW5lIGJyZWFrcyB3aXRoaW4gY2VsbHNcbiAgICAgKi9cbiAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgd2lkdGg6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94ID0gZnVuY3Rpb24gRXVpVGFibGVSb3dDZWxsQ2hlY2tib3goX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvd0NlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRcIlxuICB9LCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlUm93Q2VsbENoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJsb2FkaW5nXCIsIFwiaXRlbXNcIiwgXCJpdGVtSWRcIiwgXCJjb2x1bW5zXCIsIFwicGFnaW5hdGlvblwiLCBcInNvcnRpbmdcIiwgXCJzZWxlY3Rpb25cIiwgXCJvbkNoYW5nZVwiLCBcImVycm9yXCIsIFwibm9JdGVtc01lc3NhZ2VcIiwgXCJjb21wcmVzc2VkXCIsIFwiaXRlbUlkVG9FeHBhbmRlZFJvd01hcFwiLCBcInJlc3BvbnNpdmVcIiwgXCJpc1NlbGVjdGFibGVcIiwgXCJpc0V4cGFuZGFibGVcIiwgXCJoYXNBY3Rpb25zXCIsIFwicm93UHJvcHNcIiwgXCJjZWxsUHJvcHNcIiwgXCJ0YWJsZUNhcHRpb25cIiwgXCJyb3dIZWFkZXJcIiwgXCJ0YWJsZUxheW91dFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiYWxpZ25cIiwgXCJyZW5kZXJcIiwgXCJkYXRhVHlwZVwiLCBcImlzRXhwYW5kZXJcIiwgXCJ0ZXh0T25seVwiLCBcIm5hbWVcIiwgXCJmaWVsZFwiLCBcImRlc2NyaXB0aW9uXCIsIFwic29ydGFibGVcIiwgXCJmb290ZXJcIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9ybWF0QXV0bywgZm9ybWF0Qm9vbGVhbiwgZm9ybWF0RGF0ZSwgZm9ybWF0TnVtYmVyLCBmb3JtYXRUZXh0LCBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYmplY3RzJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IEV1aUNoZWNrYm94IH0gZnJvbSAnLi4vZm9ybSc7XG5pbXBvcnQgeyBFdWlUYWJsZSwgRXVpVGFibGVCb2R5LCBFdWlUYWJsZUZvb3RlciwgRXVpVGFibGVGb290ZXJDZWxsLCBFdWlUYWJsZUhlYWRlciwgRXVpVGFibGVIZWFkZXJDZWxsLCBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCwgRXVpVGFibGVIZWFkZXJNb2JpbGUsIEV1aVRhYmxlUm93LCBFdWlUYWJsZVJvd0NlbGwsIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94LCBFdWlUYWJsZVNvcnRNb2JpbGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBDb2xsYXBzZWRJdGVtQWN0aW9ucyB9IGZyb20gJy4vY29sbGFwc2VkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBFeHBhbmRlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9leHBhbmRlZF9pdGVtX2FjdGlvbnMnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkJhciB9IGZyb20gJy4vcGFnaW5hdGlvbl9iYXInO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRGVsYXlSZW5kZXIgfSBmcm9tICcuLi9kZWxheV9yZW5kZXInO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRhdGFUeXBlc1Byb2ZpbGVzID0ge1xuICBhdXRvOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXV0byh2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBzdHJpbmc6IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRUZXh0KHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIG51bWJlcjoge1xuICAgIGFsaWduOiBSSUdIVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEJvb2xlYW4odmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgZGF0ZToge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUpO1xuICAgIH1cbiAgfVxufTtcbnZhciBEQVRBX1RZUEVTID0gT2JqZWN0LmtleXMoZGF0YVR5cGVzUHJvZmlsZXMpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChpdGVtLCBpdGVtSWQpIHtcbiAgaWYgKGl0ZW1JZCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1JZCkpIHtcbiAgICAgIHJldHVybiBpdGVtSWQoaXRlbSk7XG4gICAgfSAvLyBAdHMtaWdub3JlIG5ldmVyIG1pbmQgYWJvdXQgdGhlIGluZGV4IHNpZ25hdHVyZVxuXG5cbiAgICByZXR1cm4gaXRlbVtpdGVtSWRdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJvd1Byb3BzKGl0ZW0sIHJvd1Byb3BzKSB7XG4gIGlmIChyb3dQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKHJvd1Byb3BzKSkge1xuICAgICAgcmV0dXJuIHJvd1Byb3BzKGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dQcm9wcztcbiAgfVxuXG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzKSB7XG4gIGlmIChjZWxsUHJvcHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihjZWxsUHJvcHMpKSB7XG4gICAgICByZXR1cm4gY2VsbFByb3BzKGl0ZW0sIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxQcm9wcztcbiAgfVxuXG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sdW1uRm9vdGVyKGNvbHVtbiwgX3JlZikge1xuICB2YXIgaXRlbXMgPSBfcmVmLml0ZW1zLFxuICAgICAgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbjtcbiAgdmFyIF9yZWYyID0gY29sdW1uLFxuICAgICAgZm9vdGVyID0gX3JlZjIuZm9vdGVyO1xuXG4gIGlmIChmb290ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmb290ZXIpKSB7XG4gICAgICByZXR1cm4gZm9vdGVyKHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9vdGVyO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzUGFnaW5hdGlvbih4KSB7XG4gIHJldHVybiB4Lmhhc093blByb3BlcnR5KCdwYWdpbmF0aW9uJykgJiYgISF4LnBhZ2luYXRpb247XG59XG5cbmV4cG9ydCB2YXIgRXVpQmFzaWNUYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQmFzaWNUYWJsZSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlCYXNpY1RhYmxlKTtcblxuICBmdW5jdGlvbiBFdWlCYXNpY1RhYmxlKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUJhc2ljVGFibGUpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYW51cHNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRib2R5XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFRib2R5XCIsIGZ1bmN0aW9uICh0Ym9keSkge1xuICAgICAgLy8gcmVtb3ZlIGxpc3RlbmVycyBmcm9tIGFuIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgIF90aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTsgLy8gdXBkYXRlIHRoZSByZWZcblxuXG4gICAgICBfdGhpcy50Ym9keSA9IHRib2R5OyAvLyBpZiBsb2FkaW5nLCBhZGQgbGlzdGVuZXJzXG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5sb2FkaW5nID09PSB0cnVlICYmIHRib2R5KSB7XG4gICAgICAgIF90aGlzLmFkZExvYWRpbmdMaXN0ZW5lcnModGJvZHkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFkZExvYWRpbmdMaXN0ZW5lcnNcIiwgZnVuY3Rpb24gKHRib2R5KSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH07XG5cbiAgICAgIFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnbW91c2VvdmVyJywgJ21vdXNlb3V0JywgJ21vdXNlZW50ZXInLCAnbW91c2VsZWF2ZScsICdjbGljaycsICdkYmxjbGljaycsICdrZXlkb3duJywgJ2tleXVwJywgJ2tleXByZXNzJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGJvZHkuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuXG4gICAgICAgIF90aGlzLmNsZWFudXBzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVMb2FkaW5nTGlzdGVuZXJzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsZWFudXBzLmZvckVhY2goZnVuY3Rpb24gKGNsZWFudXApIHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXAoKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5jbGVhbnVwcy5sZW5ndGggPSAwO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRhYmxlSWRcIiwgaHRtbElkR2VuZXJhdG9yKCdfX3RhYmxlJykoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2VsZWN0QWxsSWRHZW5lcmF0b3JcIiwgaHRtbElkR2VuZXJhdG9yKCdfc2VsZWN0aW9uX2NvbHVtbi1jaGVja2JveCcpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5kZXJTZWxlY3RBbGxcIiwgZnVuY3Rpb24gKGlzTW9iaWxlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNlbGVjdGlvbjtcblxuICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0YWJsZUl0ZW1zID0gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiAhc2VsZWN0aW9uLnNlbGVjdGFibGUgfHwgc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBjaGVja2VkID0gX3RoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPiAwICYmIF90aGlzLnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPT09IHNlbGVjdGFibGVJdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID09PSAwO1xuXG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTZWxlY3Rpb24oc2VsZWN0YWJsZUl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUuc2VsZWN0QWxsUm93c1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0QWxsUm93cykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBfdGhpcy5zZWxlY3RBbGxJZEdlbmVyYXRvcihpc01vYmlsZSA/ICdtb2JpbGUnIDogJ2Rlc2t0b3AnKSxcbiAgICAgICAgICB0eXBlOiBpc01vYmlsZSA/IHVuZGVmaW5lZCA6ICdpbkxpc3QnLFxuICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSAvLyBPbmx5IGFkZCBkYXRhLXRlc3Qtc3ViaiB0byBvbmUgb2YgdGhlIGNoZWNrYm94ZXNcbiAgICAgICAgICAsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBpc01vYmlsZSA/IHVuZGVmaW5lZCA6ICdjaGVja2JveFNlbGVjdEFsbCcsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGVjdEFsbFJvd3MsXG4gICAgICAgICAgbGFiZWw6IGlzTW9iaWxlID8gc2VsZWN0QWxsUm93cyA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvblwiLCBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICB2YXIgc29ydGluZyA9IF90aGlzLnByb3BzLnNvcnRpbmc7XG4gICAgICB2YXIgX3JlZjMgPSBjb2x1bW4sXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmMy5zb3J0YWJsZSxcbiAgICAgICAgICBmaWVsZCA9IF9yZWYzLmZpZWxkLFxuICAgICAgICAgIG5hbWUgPSBfcmVmMy5uYW1lO1xuXG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRpbmcuc29ydCB8fCAhc29ydGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc29ydGluZy5zb3J0LmZpZWxkID09PSBmaWVsZCB8fCBzb3J0aW5nLnNvcnQuZmllbGQgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRpbmcuc29ydC5kaXJlY3Rpb247XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVzb2x2ZUNvbHVtbk9uU29ydFwiLCBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICB2YXIgc29ydGluZyA9IF90aGlzLnByb3BzLnNvcnRpbmc7XG4gICAgICB2YXIgX3JlZjQgPSBjb2x1bW4sXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmNC5zb3J0YWJsZSxcbiAgICAgICAgICBuYW1lID0gX3JlZjQubmFtZTtcblxuICAgICAgaWYgKCFzb3J0aW5nIHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFzaWNUYWJsZSBpcyBjb25maWd1cmVkIHRvIGJlIHNvcnRhYmxlIG9uIGNvbHVtbiBbXCIuY29uY2F0KG5hbWUsIFwiXSBidXRcXG4gICAgICAgICAgW29uQ2hhbmdlXSBpcyBub3QgY29uZmlndXJlZC4gVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGhhbmRsZSB0aGUgc29ydCByZXF1ZXN0c1wiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC8vIHVzZWQgZm9yIGNoZWNraW5nIGlmICBpbml0aWFsIHNlbGVjdGlvbiBpcyByZW5kZXJlZFxuICAgICAgaW5pdGlhbFNlbGVjdGlvblJlbmRlcmVkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbjogW11cbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlCYXNpY1RhYmxlLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRpbmcgJiYgdGhpcy50Ym9keSkgdGhpcy5hZGRMb2FkaW5nTGlzdGVuZXJzKHRoaXMudGJvZHkpO1xuICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAocHJldlByb3BzLmxvYWRpbmcgIT09IHRoaXMucHJvcHMubG9hZGluZykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5sb2FkaW5nICYmIHRoaXMudGJvZHkpIHtcbiAgICAgICAgICB0aGlzLmFkZExvYWRpbmdMaXN0ZW5lcnModGhpcy50Ym9keSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMb2FkaW5nTGlzdGVuZXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5yZW1vdmVMb2FkaW5nTGlzdGVuZXJzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFNlbGVjdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGlvbiAmJiB0aGlzLnByb3BzLnNlbGVjdGlvbi5pbml0aWFsU2VsZWN0ZWQgJiYgIXRoaXMuc3RhdGUuaW5pdGlhbFNlbGVjdGlvblJlbmRlcmVkICYmIHRoaXMucHJvcHMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3Rpb246IHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5pdGlhbFNlbGVjdGlvblJlbmRlcmVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYnVpbGRDcml0ZXJpYVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBidWlsZENyaXRlcmlhKHByb3BzKSB7XG4gICAgICB2YXIgY3JpdGVyaWEgPSB7fTtcblxuICAgICAgaWYgKGhhc1BhZ2luYXRpb24ocHJvcHMpKSB7XG4gICAgICAgIGNyaXRlcmlhLnBhZ2UgPSB7XG4gICAgICAgICAgaW5kZXg6IHByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4LFxuICAgICAgICAgIHNpemU6IHByb3BzLnBhZ2luYXRpb24ucGFnZVNpemVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgY3JpdGVyaWEuc29ydCA9IHByb3BzLnNvcnRpbmcuc29ydDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyaXRlcmlhO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjaGFuZ2VTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvblxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhclNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKFtdKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25QYWdlU2l6ZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VTaXplQ2hhbmdlKHNpemUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIC8vIHdoZW4gcGFnZSBzaXplIGNoYW5nZXMsIHdlIHRha2UgdGhlIHVzZXIgYmFjayB0byB0aGUgZmlyc3QgcGFnZVxuICAgICAgICAgIHNpemU6IHNpemVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25QYWdlQ2hhbmdlKGluZGV4KSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuXG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIHBhZ2U6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhLnBhZ2UpLCB7fSwge1xuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbkNvbHVtblNvcnRDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25Db2x1bW5Tb3J0Q2hhbmdlKGNvbHVtbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBTb3J0RGlyZWN0aW9uLkFTQztcblxuICAgICAgaWYgKGN1cnJlbnRDcml0ZXJpYSAmJiBjdXJyZW50Q3JpdGVyaWEuc29ydCAmJiAoY3VycmVudENyaXRlcmlhLnNvcnQuZmllbGQgPT09IGNvbHVtbi5maWVsZCB8fCBjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24ucmV2ZXJzZShjdXJyZW50Q3JpdGVyaWEuc29ydC5kaXJlY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIC8vIHJlc2V0dGluZyB0aGUgcGFnZSBpZiB0aGUgY3JpdGVyaWEgaGFzIG9uZVxuICAgICAgICBwYWdlOiAhY3VycmVudENyaXRlcmlhLnBhZ2UgPyB1bmRlZmluZWQgOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgc2l6ZTogY3VycmVudENyaXRlcmlhLnBhZ2Uuc2l6ZVxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCB8fCBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBjb21wbGV4IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhZ2luYXRpb24ncyBleGlzdGVuY2UgYW5kIGNyaXRlcmlhLCB0aGUgY29kZSBsb2dpYyBlbnN1cmVzIHRoaXMgaXMgY29ycmVjdGx5IG1haW50YWluZWRcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGxvYWRpbmcgPSBfdGhpcyRwcm9wczIubG9hZGluZyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzMi5pdGVtcyxcbiAgICAgICAgICBpdGVtSWQgPSBfdGhpcyRwcm9wczIuaXRlbUlkLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczIuY29sdW1ucyxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMyLnBhZ2luYXRpb24sXG4gICAgICAgICAgc29ydGluZyA9IF90aGlzJHByb3BzMi5zb3J0aW5nLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zZWxlY3Rpb24sXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczIub25DaGFuZ2UsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczIuZXJyb3IsXG4gICAgICAgICAgbm9JdGVtc01lc3NhZ2UgPSBfdGhpcyRwcm9wczIubm9JdGVtc01lc3NhZ2UsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPSBfdGhpcyRwcm9wczIuaXRlbUlkVG9FeHBhbmRlZFJvd01hcCxcbiAgICAgICAgICByZXNwb25zaXZlID0gX3RoaXMkcHJvcHMyLnJlc3BvbnNpdmUsXG4gICAgICAgICAgaXNTZWxlY3RhYmxlID0gX3RoaXMkcHJvcHMyLmlzU2VsZWN0YWJsZSxcbiAgICAgICAgICBpc0V4cGFuZGFibGUgPSBfdGhpcyRwcm9wczIuaXNFeHBhbmRhYmxlLFxuICAgICAgICAgIGhhc0FjdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzQWN0aW9ucyxcbiAgICAgICAgICByb3dQcm9wcyA9IF90aGlzJHByb3BzMi5yb3dQcm9wcyxcbiAgICAgICAgICBjZWxsUHJvcHMgPSBfdGhpcyRwcm9wczIuY2VsbFByb3BzLFxuICAgICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMi50YWJsZUNhcHRpb24sXG4gICAgICAgICAgcm93SGVhZGVyID0gX3RoaXMkcHJvcHMyLnJvd0hlYWRlcixcbiAgICAgICAgICB0YWJsZUxheW91dCA9IF90aGlzJHByb3BzMi50YWJsZUxheW91dCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYXNpY1RhYmxlJywge1xuICAgICAgICAnZXVpQmFzaWNUYWJsZS1sb2FkaW5nJzogbG9hZGluZ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciB0YWJsZSA9IHRoaXMucmVuZGVyVGFibGUoKTtcbiAgICAgIHZhciBwYWdpbmF0aW9uQmFyID0gdGhpcy5yZW5kZXJQYWdpbmF0aW9uQmFyKCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIHRhYmxlLCBwYWdpbmF0aW9uQmFyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMzLmNvbXByZXNzZWQsXG4gICAgICAgICAgcmVzcG9uc2l2ZSA9IF90aGlzJHByb3BzMy5yZXNwb25zaXZlLFxuICAgICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMzLnRhYmxlTGF5b3V0O1xuICAgICAgdmFyIG1vYmlsZUhlYWRlciA9IHJlc3BvbnNpdmUgPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyTW9iaWxlLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2VCZXR3ZWVuXCIsXG4gICAgICAgIGFsaWduSXRlbXM6IFwiYmFzZWxpbmVcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICBncm93OiBmYWxzZVxuICAgICAgfSwgdGhpcy5yZW5kZXJTZWxlY3RBbGwodHJ1ZSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICB9LCB0aGlzLnJlbmRlclRhYmxlTW9iaWxlU29ydCgpKSkpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGNhcHRpb24gPSB0aGlzLnJlbmRlclRhYmxlQ2FwdGlvbigpO1xuICAgICAgdmFyIGhlYWQgPSB0aGlzLnJlbmRlclRhYmxlSGVhZCgpO1xuICAgICAgdmFyIGJvZHkgPSB0aGlzLnJlbmRlclRhYmxlQm9keSgpO1xuICAgICAgdmFyIGZvb3RlciA9IHRoaXMucmVuZGVyVGFibGVGb290ZXIoKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIG1vYmlsZUhlYWRlciwgX19fRW1vdGlvbkpTWChFdWlUYWJsZSwge1xuICAgICAgICBpZDogdGhpcy50YWJsZUlkLFxuICAgICAgICB0YWJsZUxheW91dDogdGFibGVMYXlvdXQsXG4gICAgICAgIHJlc3BvbnNpdmU6IHJlc3BvbnNpdmUsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWRcbiAgICAgIH0sIGNhcHRpb24sIGhlYWQsIGJvZHksIGZvb3RlcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZU1vYmlsZVNvcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVNb2JpbGVTb3J0KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczQuY29sdW1ucyxcbiAgICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHM0LnNvcnRpbmc7XG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKCFzb3J0aW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9jb2x1bW4sIF9jb2x1bW4kbW9iaWxlT3B0aW9ucztcblxuICAgICAgICBpZiAoY29sdW1uLmZpZWxkICYmIHNvcnRpbmcuc29ydCAmJiAhIXNvcnRpbmcuZW5hYmxlQWxsQ29sdW1ucyAmJiBjb2x1bW4uc29ydGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSB8fCAoKF9jb2x1bW4gPSBjb2x1bW4pID09PSBudWxsIHx8IF9jb2x1bW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfY29sdW1uJG1vYmlsZU9wdGlvbnMgPSBfY29sdW1uLm1vYmlsZU9wdGlvbnMpID09PSBudWxsIHx8IF9jb2x1bW4kbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbHVtbiRtb2JpbGVPcHRpb25zLnNob3cpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzb3J0RGlyZWN0aW9uID0gX3RoaXMyLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG5cbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAga2V5OiBcIl9kYXRhX3NfXCIuY29uY2F0KGNvbHVtbi5maWVsZCwgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgb25Tb3J0OiBfdGhpczIucmVzb2x2ZUNvbHVtbk9uU29ydChjb2x1bW4pLFxuICAgICAgICAgIGlzU29ydGVkOiAhIXNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgaXNTb3J0QXNjZW5kaW5nOiBzb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhzb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlLCB7XG4gICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAgfSkgOiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUNhcHRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVDYXB0aW9uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczUuaXRlbXMsXG4gICAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzNS5wYWdpbmF0aW9uLFxuICAgICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzNS50YWJsZUNhcHRpb247XG4gICAgICB2YXIgaXRlbUNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIHRvdGFsSXRlbUNvdW50ID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgOiBpdGVtQ291bnQ7XG4gICAgICB2YXIgcGFnZSA9IHBhZ2luYXRpb24gPyBwYWdpbmF0aW9uLnBhZ2VJbmRleCArIDEgOiAxO1xuICAgICAgdmFyIHBhZ2VDb3VudCA9IHBhZ2luYXRpb24gIT09IG51bGwgJiYgcGFnaW5hdGlvbiAhPT0gdm9pZCAwICYmIHBhZ2luYXRpb24ucGFnZVNpemUgPyBNYXRoLmNlaWwocGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCAvIHBhZ2luYXRpb24ucGFnZVNpemUpIDogMTtcbiAgICAgIHZhciBjYXB0aW9uRWxlbWVudDtcblxuICAgICAgaWYgKHRhYmxlQ2FwdGlvbikge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcInt0YWJsZUNhcHRpb259OyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IHRhYmxlQ2FwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgICBpZiAocGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVBdXRvQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzIG91dCBvZiB7dG90YWxJdGVtQ291bnR9IHJvd3M7IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1Db3VudDogdG90YWxJdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZVNpbXBsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3M7IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aG91dFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNhcHRpb25cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDYXB0aW9uXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRGVsYXlSZW5kZXIsIG51bGwsIGNhcHRpb25FbGVtZW50KSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUhlYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVIZWFkKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczYuY29sdW1ucyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2VsZWN0aW9uO1xuICAgICAgdmFyIGhlYWRlcnMgPSBbXTtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9oXCJcbiAgICAgICAgfSwgdGhpcy5yZW5kZXJTZWxlY3RBbGwoZmFsc2UpKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX3JlZjUgPSBjb2x1bW4sXG4gICAgICAgICAgICBmaWVsZCA9IF9yZWY1LmZpZWxkLFxuICAgICAgICAgICAgd2lkdGggPSBfcmVmNS53aWR0aCxcbiAgICAgICAgICAgIG5hbWUgPSBfcmVmNS5uYW1lLFxuICAgICAgICAgICAgYWxpZ24gPSBfcmVmNS5hbGlnbixcbiAgICAgICAgICAgIGRhdGFUeXBlID0gX3JlZjUuZGF0YVR5cGUsXG4gICAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY1LnNvcnRhYmxlLFxuICAgICAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWY1Lm1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgICByZWFkT25seSA9IF9yZWY1LnJlYWRPbmx5LFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBfcmVmNS5kZXNjcmlwdGlvbjtcblxuICAgICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCBfdGhpczMuZ2V0QWxpZ25Gb3JEYXRhVHlwZShkYXRhVHlwZSk7IC8vIGFjdGlvbnMgY29sdW1uXG5cblxuICAgICAgICBpZiAoY29sdW1uLmFjdGlvbnMpIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJfYWN0aW9uc19oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgbW9iaWxlT3B0aW9uczogbW9iaWxlT3B0aW9uc1xuICAgICAgICAgIH0sIG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gY29tcHV0ZWQgY29sdW1uXG5cblxuICAgICAgICBpZiAoIWNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIHZhciBfc29ydGluZyA9IHt9OyAvLyBjb21wdXRlZCBjb2x1bW5zIGFyZSBvbmx5IHNvcnRhYmxlIGlmIHRoZWlyIGBzb3J0YWJsZWAgaXMgYSBmdW5jdGlvblxuXG4gICAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nICYmIHR5cGVvZiBzb3J0YWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICAgICAgX3NvcnRpbmcuaXNTb3J0ZWQgPSAhIXNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRBc2NlbmRpbmcgPSBzb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhzb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIF9zb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBfc29ydGluZy5yZWFkT25seSA9IF90aGlzMy5wcm9wcy5zb3J0aW5nLnJlYWRPbmx5IHx8IHJlYWRPbmx5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgICAga2V5OiBcIl9jb21wdXRlZF9jb2x1bW5faF9cIi5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgICAgYWxpZ246IGNvbHVtbkFsaWduLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgbW9iaWxlT3B0aW9uczogbW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlckNlbGxfXCIuY29uY2F0KHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IG5hbWUgOiAnJywgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgICAgICAgICB9LCBfc29ydGluZyksIG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gZmllbGQgZGF0YSBjb2x1bW5cblxuXG4gICAgICAgIHZhciBzb3J0aW5nID0ge307XG5cbiAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nKSB7XG4gICAgICAgICAgaWYgKF90aGlzMy5wcm9wcy5zb3J0aW5nLnNvcnQgJiYgISFfdGhpczMucHJvcHMuc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2x1bW4gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbHVtbiksIHt9LCB7XG4gICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3JlZjYgPSBjb2x1bW4sXG4gICAgICAgICAgICAgIF9zb3J0YWJsZSA9IF9yZWY2LnNvcnRhYmxlO1xuXG4gICAgICAgICAgaWYgKF9zb3J0YWJsZSkge1xuICAgICAgICAgICAgdmFyIF9zb3J0RGlyZWN0aW9uID0gX3RoaXMzLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG5cbiAgICAgICAgICAgIHNvcnRpbmcuaXNTb3J0ZWQgPSAhIV9zb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRBc2NlbmRpbmcgPSBfc29ydERpcmVjdGlvbiA/IFNvcnREaXJlY3Rpb24uaXNBc2MoX3NvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgc29ydGluZy5vblNvcnQgPSBfdGhpczMucmVzb2x2ZUNvbHVtbk9uU29ydChjb2x1bW4pO1xuICAgICAgICAgICAgc29ydGluZy5yZWFkT25seSA9IF90aGlzMy5wcm9wcy5zb3J0aW5nLnJlYWRPbmx5IHx8IHJlYWRPbmx5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGtleTogXCJfZGF0YV9oX1wiLmNvbmNhdChmaWVsZCwgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgYWxpZ246IGNvbHVtbkFsaWduLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZUhlYWRlckNlbGxfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgICAgICAgfSwgc29ydGluZyksIG5hbWUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXIsIG51bGwsIGhlYWRlcnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUZvb3RlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUZvb3RlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHM3Lml0ZW1zLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczcuY29sdW1ucyxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM3LnBhZ2luYXRpb24sXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM3LnNlbGVjdGlvbjtcbiAgICAgIHZhciBmb290ZXJzID0gW107XG4gICAgICB2YXIgaGFzRGVmaW5lZEZvb3RlciA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhbiBlbXB0eSBjZWxsIHRvIGNvbXBlbnNhdGUgZm9yIGFkZGl0aW9uYWwgc2VsZWN0aW9uIGNvbHVtblxuICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICBrZXk6IFwiX3NlbGVjdGlvbl9jb2x1bW5fZlwiXG4gICAgICAgIH0sIHVuZGVmaW5lZCkpO1xuICAgICAgfVxuXG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgZm9vdGVyID0gZ2V0Q29sdW1uRm9vdGVyKGNvbHVtbiwge1xuICAgICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX3JlZjcgPSBjb2x1bW4sXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjcubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICAgIGZpZWxkID0gX3JlZjcuZmllbGQsXG4gICAgICAgICAgICBhbGlnbiA9IF9yZWY3LmFsaWduO1xuXG4gICAgICAgIGlmIChtb2JpbGVPcHRpb25zICE9PSBudWxsICYmIG1vYmlsZU9wdGlvbnMgIT09IHZvaWQgMCAmJiBtb2JpbGVPcHRpb25zLm9ubHkpIHtcbiAgICAgICAgICByZXR1cm47IC8vIGV4Y2x1ZGUgY29sdW1ucyB0aGF0IG9ubHkgZXhpc3QgZm9yIG1vYmlsZSBoZWFkZXJzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAgICBrZXk6IFwiZm9vdGVyX1wiLmNvbmNhdChmaWVsZCwgXCJfXCIpLmNvbmNhdChmb290ZXJzLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgYWxpZ246IGFsaWduXG4gICAgICAgICAgfSwgZm9vdGVyKSk7XG4gICAgICAgICAgaGFzRGVmaW5lZEZvb3RlciA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9vdGVyIGlzIHVuZGVmaW5lZCwgc28gY3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gcHJlc2VydmUgbGF5b3V0XG4gICAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAgICBrZXk6IFwiZm9vdGVyX2VtcHR5X1wiLmNvbmNhdChmb290ZXJzLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgYWxpZ246IGFsaWduXG4gICAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZvb3RlcnMubGVuZ3RoICYmIGhhc0RlZmluZWRGb290ZXIgPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyLCBudWxsLCBmb290ZXJzKSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUJvZHkoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JCb2R5KHRoaXMucHJvcHMuZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLnByb3BzLml0ZW1zO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVtcHR5Qm9keSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcm93cyA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBwYWdpbmF0aW9uIHRoZSBpdGVtJ3MgaW5kZXggbXVzdCBiZSBhZGp1c3RlZCB0byB0aGUgd2hlcmUgaXQgaXMgaW4gdGhlIHdob2xlIGRhdGFzZXRcbiAgICAgICAgdmFyIHRhYmxlSXRlbUluZGV4ID0gaGFzUGFnaW5hdGlvbihfdGhpczQucHJvcHMpICYmIF90aGlzNC5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplID4gMCA/IF90aGlzNC5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCAqIF90aGlzNC5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplICsgaW5kZXggOiBpbmRleDtcbiAgICAgICAgcmV0dXJuIF90aGlzNC5yZW5kZXJJdGVtUm93KGl0ZW0sIHRhYmxlSXRlbUluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCB7XG4gICAgICAgIGJvZHlSZWY6IHRoaXMuc2V0VGJvZHlcbiAgICAgIH0sIHJvd3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJFcnJvckJvZHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRXJyb3JCb2R5KGVycm9yKSB7XG4gICAgICB2YXIgY29sU3BhbiA9IHRoaXMucHJvcHMuY29sdW1ucy5sZW5ndGggKyAodGhpcy5wcm9wcy5zZWxlY3Rpb24gPyAxIDogMCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBjb2xTcGFuOiBjb2xTcGFuLFxuICAgICAgICBtb2JpbGVPcHRpb25zOiB7XG4gICAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgdHlwZTogXCJtaW51c0luQ2lyY2xlXCIsXG4gICAgICAgIGNvbG9yOiBcImRhbmdlclwiXG4gICAgICB9KSwgXCIgXCIsIGVycm9yKSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJFbXB0eUJvZHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyRW1wdHlCb2R5KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzOC5jb2x1bW5zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzOC5zZWxlY3Rpb24sXG4gICAgICAgICAgbm9JdGVtc01lc3NhZ2UgPSBfdGhpcyRwcm9wczgubm9JdGVtc01lc3NhZ2U7XG4gICAgICB2YXIgY29sU3BhbiA9IGNvbHVtbnMubGVuZ3RoICsgKHNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIG5vSXRlbXNNZXNzYWdlKSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtUm93XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Sb3coaXRlbSwgcm93SW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM5ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM5LmNvbHVtbnMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM5LnNlbGVjdGlvbixcbiAgICAgICAgICBpc1NlbGVjdGFibGUgPSBfdGhpcyRwcm9wczkuaXNTZWxlY3RhYmxlLFxuICAgICAgICAgIGhhc0FjdGlvbnMgPSBfdGhpcyRwcm9wczkuaGFzQWN0aW9ucyxcbiAgICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczkucm93SGVhZGVyLFxuICAgICAgICAgIF90aGlzJHByb3BzOSRpdGVtSWRUbyA9IF90aGlzJHByb3BzOS5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICAgIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAgPSBfdGhpcyRwcm9wczkkaXRlbUlkVG8gPT09IHZvaWQgMCA/IHt9IDogX3RoaXMkcHJvcHM5JGl0ZW1JZFRvLFxuICAgICAgICAgIGlzRXhwYW5kYWJsZSA9IF90aGlzJHByb3BzOS5pc0V4cGFuZGFibGU7XG4gICAgICB2YXIgY2VsbHMgPSBbXTtcbiAgICAgIHZhciBpdGVtSWRDYWxsYmFjayA9IHRoaXMucHJvcHMuaXRlbUlkO1xuICAgICAgdmFyIGl0ZW1JZCA9IGdldEl0ZW1JZChpdGVtLCBpdGVtSWRDYWxsYmFjaykgIT0gbnVsbCA/IGdldEl0ZW1JZChpdGVtLCBpdGVtSWRDYWxsYmFjaykgOiByb3dJbmRleDtcbiAgICAgIHZhciBzZWxlY3RlZCA9ICFzZWxlY3Rpb24gPyBmYWxzZSA6IHRoaXMuc3RhdGUuc2VsZWN0aW9uICYmICEhdGhpcy5zdGF0ZS5zZWxlY3Rpb24uZmluZChmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiBnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWRDYWxsYmFjaykgPT09IGl0ZW1JZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNhbGN1bGF0ZWRIYXNTZWxlY3Rpb247XG5cbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgY2VsbHMucHVzaCh0aGlzLnJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQpKTtcbiAgICAgICAgY2FsY3VsYXRlZEhhc1NlbGVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBjYWxjdWxhdGVkSGFzQWN0aW9ucztcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICBpZiAoY29sdW1uLmFjdGlvbnMpIHtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtQWN0aW9uc0NlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSk7XG4gICAgICAgICAgY2FsY3VsYXRlZEhhc0FjdGlvbnMgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIHZhciBmaWVsZERhdGFDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUZpZWxkRGF0YUNlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBmaWVsZERhdGFDb2x1bW4uZmllbGQgPT09IHJvd0hlYWRlcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBPY2N1cHkgZnVsbCB3aWR0aCBvZiB0YWJsZSwgdGFraW5nIGNoZWNrYm94ICYgbW9iaWxlIG9ubHkgY29sdW1ucyBpbnRvIGFjY291bnQuXG5cbiAgICAgIHZhciBleHBhbmRlZFJvd0NvbFNwYW4gPSBzZWxlY3Rpb24gPyBjb2x1bW5zLmxlbmd0aCArIDEgOiBjb2x1bW5zLmxlbmd0aDtcbiAgICAgIHZhciBtb2JpbGVPbmx5Q29scyA9IGNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChudW0sIGNvbHVtbikge1xuICAgICAgICB2YXIgX21vYmlsZU9wdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbiAhPT0gbnVsbCAmJiBjb2x1bW4gIT09IHZvaWQgMCAmJiAoX21vYmlsZU9wdGlvbnMgPSBjb2x1bW4ubW9iaWxlT3B0aW9ucykgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMgIT09IHZvaWQgMCAmJiBfbW9iaWxlT3B0aW9ucy5vbmx5ID8gbnVtICsgMSA6IG51bSArIDA7IC8vIEJXQyBvbmx5XG4gICAgICB9LCAwKTtcbiAgICAgIGV4cGFuZGVkUm93Q29sU3BhbiA9IGV4cGFuZGVkUm93Q29sU3BhbiAtIG1vYmlsZU9ubHlDb2xzOyAvLyBXZSdsbCB1c2UgdGhlIElEIHRvIGFzc29jaWF0ZSB0aGUgZXhwYW5kZWQgcm93IHdpdGggdGhlIG9yaWdpbmFsLlxuXG4gICAgICB2YXIgaGFzRXhwYW5kZWRSb3cgPSBpdGVtSWRUb0V4cGFuZGVkUm93TWFwLmhhc093blByb3BlcnR5KGl0ZW1JZCk7XG4gICAgICB2YXIgZXhwYW5kZWRSb3dJZCA9IGhhc0V4cGFuZGVkUm93ID8gXCJyb3dfXCIuY29uY2F0KGl0ZW1JZCwgXCJfZXhwYW5zaW9uXCIpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGV4cGFuZGVkUm93ID0gaGFzRXhwYW5kZWRSb3cgPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCB7XG4gICAgICAgIGlkOiBleHBhbmRlZFJvd0lkLFxuICAgICAgICBpc0V4cGFuZGVkUm93OiB0cnVlLFxuICAgICAgICBpc1NlbGVjdGFibGU6IGlzU2VsZWN0YWJsZVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgY29sU3BhbjogZXhwYW5kZWRSb3dDb2xTcGFuLFxuICAgICAgICB0ZXh0T25seTogZmFsc2VcbiAgICAgIH0sIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXBbaXRlbUlkXSkpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJvd1Byb3BzQ2FsbGJhY2sgPSB0aGlzLnByb3BzLnJvd1Byb3BzO1xuICAgICAgdmFyIHJvd1Byb3BzID0gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHNDYWxsYmFjayk7XG5cbiAgICAgIHZhciByb3cgPSBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiYXJpYS1vd25zXCI6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGlzU2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlID09IG51bGwgPyBjYWxjdWxhdGVkSGFzU2VsZWN0aW9uIDogaXNTZWxlY3RhYmxlLFxuICAgICAgICBpc1NlbGVjdGVkOiBzZWxlY3RlZCxcbiAgICAgICAgaGFzQWN0aW9uczogaGFzQWN0aW9ucyA9PSBudWxsID8gY2FsY3VsYXRlZEhhc0FjdGlvbnMgOiBoYXNBY3Rpb25zLFxuICAgICAgICBpc0V4cGFuZGFibGU6IGlzRXhwYW5kYWJsZVxuICAgICAgfSwgcm93UHJvcHMpLCBjZWxscyk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCB7XG4gICAgICAgIGtleTogXCJyb3dfXCIuY29uY2F0KGl0ZW1JZClcbiAgICAgIH0sIHJvdywgZXhwYW5kZWRSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtU2VsZWN0aW9uQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtU2VsZWN0aW9uQ2VsbChpdGVtSWQsIGl0ZW0sIHNlbGVjdGVkKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMucHJvcHMuc2VsZWN0aW9uO1xuICAgICAgdmFyIGtleSA9IFwiX3NlbGVjdGlvbl9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCk7XG4gICAgICB2YXIgY2hlY2tlZCA9IHNlbGVjdGVkO1xuICAgICAgdmFyIGRpc2FibGVkID0gc2VsZWN0aW9uLnNlbGVjdGFibGUgJiYgIXNlbGVjdGlvbi5zZWxlY3RhYmxlKGl0ZW0pO1xuICAgICAgdmFyIHRpdGxlID0gc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlICYmIHNlbGVjdGlvbi5zZWxlY3RhYmxlTWVzc2FnZSghZGlzYWJsZWQsIGl0ZW0pO1xuXG4gICAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiBvbkNoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICBfdGhpczYuY2hhbmdlU2VsZWN0aW9uKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXM2LnN0YXRlLnNlbGVjdGlvbiksIFtpdGVtXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpdGVtSWRDYWxsYmFjayA9IF90aGlzNi5wcm9wcy5pdGVtSWQ7XG5cbiAgICAgICAgICBfdGhpczYuY2hhbmdlU2VsZWN0aW9uKF90aGlzNi5zdGF0ZS5zZWxlY3Rpb24ucmVkdWNlKGZ1bmN0aW9uIChzZWxlY3Rpb24sIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgaWYgKGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPT0gaXRlbUlkKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgICAgICAgfSwgW10pKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIHtcbiAgICAgICAga2V5OiBrZXlcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnNlbGVjdFRoaXNSb3dcIixcbiAgICAgICAgZGVmYXVsdDogXCJTZWxlY3QgdGhpcyByb3dcIlxuICAgICAgfSwgZnVuY3Rpb24gKHNlbGVjdFRoaXNSb3cpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ2hlY2tib3gsIHtcbiAgICAgICAgICBpZDogXCJcIi5jb25jYXQoX3RoaXM2LnRhYmxlSWQpLmNvbmNhdChrZXksIFwiLWNoZWNrYm94XCIpLFxuICAgICAgICAgIHR5cGU6IFwiaW5MaXN0XCIsXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSB8fCBzZWxlY3RUaGlzUm93LFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0aXRsZSB8fCBzZWxlY3RUaGlzUm93LFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjaGVja2JveFNlbGVjdFJvdy1cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUFjdGlvbnNDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICB2YXIgYWN0aW9uRW5hYmxlZCA9IGZ1bmN0aW9uIGFjdGlvbkVuYWJsZWQoYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBfdGhpczcuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCAmJiAoIWFjdGlvbi5lbmFibGVkIHx8IGFjdGlvbi5lbmFibGVkKGl0ZW0pKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBhY3R1YWxBY3Rpb25zID0gY29sdW1uLmFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuICFhY3Rpb24uYXZhaWxhYmxlIHx8IGFjdGlvbi5hdmFpbGFibGUoaXRlbSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdHVhbEFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICAvLyBpZiBhbnkgb2YgdGhlIGFjdGlvbnMgYGlzUHJpbWFyeWAsIGFkZCB0aGVtIGlubGluZSBhcyB3ZWxsLCBidXQgb25seSB0aGUgZmlyc3QgMlxuICAgICAgICB2YXIgcHJpbWFyeUFjdGlvbnMgPSBhY3R1YWxBY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAobykge1xuICAgICAgICAgIHJldHVybiBvLmlzUHJpbWFyeTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdHVhbEFjdGlvbnMgPSBwcmltYXJ5QWN0aW9ucy5zbGljZSgwLCAyKTsgLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMSBhY3Rpb24sIHdlIGRvbid0IHNob3cgdGhlbSBhbGwgaW4gdGhlIGNlbGwsIGluc3RlYWQgd2VcbiAgICAgICAgLy8gcHV0IHRoZW0gYWxsIGluIGEgcG9wb3ZlciB0b29sLiBUaGlzIGVmZmVjdGl2ZWx5IG1lYW5zIHdlIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtXG4gICAgICAgIC8vIG9mIG9uZSB0b29sIHBlciByb3cgKGl0J3MgZWl0aGVyIGFuZCBub3JtYWwgYWN0aW9uLCBvciBpdCdzIGEgcG9wb3ZlciB0aGF0IHNob3dzIG11bHRpcGxlIGFjdGlvbnMpXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGhlcmUgd2UgY3JlYXRlIGEgc2luZ2xlIGN1c3RvbSBhY3Rpb24gdGhhdCB0cmlnZ2VycyB0aGUgcG9wb3ZlciB3aXRoIGFsbCB0aGUgY29uZmlndXJlZCBhY3Rpb25zXG5cbiAgICAgICAgYWN0dWFsQWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiAnQWxsIGFjdGlvbnMnLFxuICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCB7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IGNvbHVtbi5hY3Rpb25zLFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgYWN0aW9uRW5hYmxlZDogYWN0aW9uRW5hYmxlZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRvb2xzID0gX19fRW1vdGlvbkpTWChFeHBhbmRlZEl0ZW1BY3Rpb25zLCB7XG4gICAgICAgIGFjdGlvbnM6IGFjdHVhbEFjdGlvbnMsXG4gICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICBhY3Rpb25FbmFibGVkOiBhY3Rpb25FbmFibGVkXG4gICAgICB9KTtcblxuICAgICAgdmFyIGtleSA9IFwicmVjb3JkX2FjdGlvbnNfXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgc2hvd09uSG92ZXI6IHRydWUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgICB0ZXh0T25seTogZmFsc2UsXG4gICAgICAgIGhhc0FjdGlvbnM6IHRydWVcbiAgICAgIH0sIHRvb2xzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUZpZWxkRGF0YUNlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUZpZWxkRGF0YUNlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4LCBzZXRTY29wZVJvdykge1xuICAgICAgdmFyIGZpZWxkID0gY29sdW1uLmZpZWxkLFxuICAgICAgICAgIHJlbmRlciA9IGNvbHVtbi5yZW5kZXIsXG4gICAgICAgICAgZGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGU7XG4gICAgICB2YXIga2V5ID0gXCJfZGF0YV9jb2x1bW5fXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICB2YXIgdmFsdWUgPSBnZXQoaXRlbSwgZmllbGQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIodmFsdWUsIGl0ZW0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBrZXksIGNvbnRlbnQsIHNldFNjb3BlUm93KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUNvbXB1dGVkQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ29tcHV0ZWRDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIHJlbmRlciA9IGNvbHVtbi5yZW5kZXI7XG4gICAgICB2YXIga2V5ID0gXCJfY29tcHV0ZWRfY29sdW1uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgdmFyIGNvbnRlbnRSZW5kZXJlciA9IHJlbmRlciB8fCB0aGlzLmdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKTtcbiAgICAgIHZhciBjb250ZW50ID0gY29udGVudFJlbmRlcmVyKGl0ZW0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBrZXksIGNvbnRlbnQsIGZhbHNlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbUNlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUNlbGwoaXRlbSwgY29sdW1uLCBrZXksIGNvbnRlbnQsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgX3JlZjggPSBjb2x1bW4sXG4gICAgICAgICAgYWxpZ24gPSBfcmVmOC5hbGlnbixcbiAgICAgICAgICByZW5kZXIgPSBfcmVmOC5yZW5kZXIsXG4gICAgICAgICAgZGF0YVR5cGUgPSBfcmVmOC5kYXRhVHlwZSxcbiAgICAgICAgICBpc0V4cGFuZGVyID0gX3JlZjguaXNFeHBhbmRlcixcbiAgICAgICAgICB0ZXh0T25seSA9IF9yZWY4LnRleHRPbmx5LFxuICAgICAgICAgIG5hbWUgPSBfcmVmOC5uYW1lLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjguZmllbGQsXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSBfcmVmOC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY4LnNvcnRhYmxlLFxuICAgICAgICAgIGZvb3RlciA9IF9yZWY4LmZvb3RlcixcbiAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjgubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY4LCBfZXhjbHVkZWQyKTtcblxuICAgICAgdmFyIGNvbHVtbkFsaWduID0gYWxpZ24gfHwgdGhpcy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciBjZWxsUHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMuY2VsbFByb3BzO1xuICAgICAgdmFyIGNlbGxQcm9wcyA9IGdldENlbGxQcm9wcyhpdGVtLCBjb2x1bW4sIGNlbGxQcm9wc0NhbGxiYWNrKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgYWxpZ246IGNvbHVtbkFsaWduLFxuICAgICAgICBpc0V4cGFuZGVyOiBpc0V4cGFuZGVyLFxuICAgICAgICB0ZXh0T25seTogdGV4dE9ubHkgfHwgIXJlbmRlcixcbiAgICAgICAgc2V0U2NvcGVSb3c6IHNldFNjb3BlUm93LFxuICAgICAgICBtb2JpbGVPcHRpb25zOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG1vYmlsZU9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIHJlbmRlcjogbW9iaWxlT3B0aW9ucyAmJiBtb2JpbGVPcHRpb25zLnJlbmRlciAmJiBtb2JpbGVPcHRpb25zLnJlbmRlcihpdGVtKSxcbiAgICAgICAgICBoZWFkZXI6IG1vYmlsZU9wdGlvbnMgJiYgbW9iaWxlT3B0aW9ucy5oZWFkZXIgPT09IGZhbHNlID8gZmFsc2UgOiBuYW1lXG4gICAgICAgIH0pXG4gICAgICB9LCBjZWxsUHJvcHMsIHJlc3QpLCBjb250ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlckZvckRhdGFUeXBlKCkge1xuICAgICAgdmFyIGRhdGFUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYXV0byc7XG4gICAgICB2YXIgcHJvZmlsZSA9IGRhdGFUeXBlc1Byb2ZpbGVzW2RhdGFUeXBlXTtcblxuICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGUgW1wiLmNvbmNhdChkYXRhVHlwZSwgXCJdLiBUaGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMgYXJlIFtcIikuY29uY2F0KERBVEFfVFlQRVMuam9pbignLCAnKSwgXCJdXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb2ZpbGUucmVuZGVyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRBbGlnbkZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsaWduRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuXG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZmlsZS5hbGlnbjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyUGFnaW5hdGlvbkJhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJQYWdpbmF0aW9uQmFyKCkge1xuICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMTAuZXJyb3IsXG4gICAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzMTAucGFnaW5hdGlvbixcbiAgICAgICAgICB0YWJsZUNhcHRpb24gPSBfdGhpcyRwcm9wczEwLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMTAub25DaGFuZ2U7XG5cbiAgICAgIGlmICghZXJyb3IgJiYgcGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICBpZiAoIW9uQ2hhbmdlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIEJhc2ljIFRhYmxlIGlzIGNvbmZpZ3VyZWQgd2l0aCBwYWdpbmF0aW9uIGJ1dCBbb25DaGFuZ2VdIGlzXFxuICAgICAgICBub3QgY29uZmlndXJlZC4gVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIHRvIGhhbmRsZSBwYWdpbmF0aW9uIGNoYW5nZXNcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZVBhZ2luYXRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlBhZ2luYXRpb24gZm9yIHRhYmxlOiB7dGFibGVDYXB0aW9ufVwiLFxuICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgdGFibGVDYXB0aW9uOiB0YWJsZUNhcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0YWJsZVBhZ2luYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQmFyLCB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uLFxuICAgICAgICAgICAgb25QYWdlU2l6ZUNoYW5nZTogX3RoaXM4Lm9uUGFnZVNpemVDaGFuZ2UuYmluZChfdGhpczgpLFxuICAgICAgICAgICAgb25QYWdlQ2hhbmdlOiBfdGhpczgub25QYWdlQ2hhbmdlLmJpbmQoX3RoaXM4KSxcbiAgICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBfdGhpczgudGFibGVJZCxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiB0YWJsZVBhZ2luYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKCFuZXh0UHJvcHMuc2VsZWN0aW9uKSB7XG4gICAgICAgIC8vIG5leHQgcHJvcHMgZG9lc24ndCBoYXZlIGEgc2VsZWN0aW9uLCByZXNldCBvdXIgc3RhdGVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3Rpb246IFtdXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtSWQgPSBuZXh0UHJvcHMuaXRlbUlkO1xuICAgICAgdmFyIHNlbGVjdGlvbiA9IHByZXZTdGF0ZS5zZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wcy5pdGVtcy5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkgPT09IGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZCk7XG4gICAgICAgIH0pICE9PSAtMTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uLmxlbmd0aCAhPT0gcHJldlN0YXRlLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG5leHRQcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICAgICAgICBuZXh0UHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gdXNlZCBmb3IgbW92aW5nIGluICYgb3V0IG9mIGBsb2FkaW5nYCBzdGF0ZVxuXG4gIH1dKTtcblxuICByZXR1cm4gRXVpQmFzaWNUYWJsZTtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUJhc2ljVGFibGUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgdGFibGVMYXlvdXQ6ICdmaXhlZCcsXG4gIG5vSXRlbXNNZXNzYWdlOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLm5vSXRlbXNNZXNzYWdlXCIsXG4gICAgZGVmYXVsdDogXCJObyBpdGVtcyBmb3VuZFwiXG4gIH0pXG59KTtcblxuRXVpQmFzaWNUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIGhvdyB0byBleHRyYWN0IGEgdW5pcXVlIElEIGZyb20gZWFjaCBpdGVtLCB1c2VkIGZvciBzZWxlY3Rpb25zICYgZXhwYW5kZWQgcm93c1xuICAgICAqL1xuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFJvdyBleHBhbnNpb24gdXNlcyB0aGUgaXRlbUlkIHByb3AgdG8gaWRlbnRpZnkgZWFjaCByb3dcbiAgICAgKi9cbiAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcDogUHJvcFR5cGVzLnNoYXBlKHt9KSxcblxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQSBsaXN0IG9mIG9iamVjdHMgdG8gYXBwZWFyIGluIHRoZSB0YWJsZSAtIGFuIGl0ZW0gcGVyIHJvd1xuICAgICAqL1xuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dDZWxsYFxuICAgICAqL1xuICBjZWxsUHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIG9uZSBvZiB0aGUgb2JqZWN0czogI0V1aVRhYmxlRmllbGREYXRhQ29sdW1uVHlwZSwgI0V1aVRhYmxlQ29tcHV0ZWRDb2x1bW5UeXBlIG9yICNFdWlUYWJsZUFjdGlvbnNDb2x1bW5UeXBlLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIG9uZSBvZiB0aGUgb2JqZWN0czogI0V1aVRhYmxlRmllbGREYXRhQ29sdW1uVHlwZSwgI0V1aVRhYmxlQ29tcHV0ZWRDb2x1bW5UeXBlIG9yICNFdWlUYWJsZUFjdGlvbnNDb2x1bW5UeXBlLlxuICAgICAqL1xuICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQSBmaWVsZCBvZiB0aGUgaXRlbSAobWF5IGJlIGEgbmVzdGVkIGZpZWxkKVxuICAgICAgICovXG4gICAgLy8gdHlwZSBoYWNrIHVzZWQgZm9yIGJldHRlciBhdXRvY29tcGxldGUgc3VwcG9ydFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjk3MjlcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIC8vIHN1cHBvcnRzIG91dGVyLmlubmVyIGtleSBwYXRoc1xuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbHVtbiAod2lsbCBiZSBwcmVzZW50ZWQgYXMgYSB0aXRsZSBvdmVyIHRoZSBjb2x1bW4gaGVhZGVyKVxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgZGlzcGxheWVkIHZhbHVlIChzZXJ2ZXMgYXMgYSByZW5kZXJpbmcgaGludCBmb3IgdGhlIHRhYmxlKVxuICAgICAgICovXG4gICAgZGF0YVR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJhdXRvXCIsIFwic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiLCBcImRhdGVcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uIChlLmcuIFwiMzAlXCIsIFwiMTAwcHhcIiwgZXRjLi4pXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSB1c2VyIGNhbiBzb3J0IG9uIHRoaXMgY29sdW1uLiBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIHRvIHNvcnQgYWdhaW5zdFxuICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIERlZmluZXMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcblxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIGl0cyBjb250ZW50IHdoZW4gaXQgZG9lc24ndCBmaXRcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmNcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmUgYSBjdXN0b20gcmVuZGVyZXIgZnVuY3Rpb24gZm9yIHRoZSBjb250ZW50XG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBDb250ZW50IHRvIGRpc3BsYXkgaW4gdGhlIGZvb3RlciBiZW5lYXRoIHRoaXMgY29sdW1uXG4gICAgICAgKi9cbiAgICBmb290ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlIGZvciBlYWNoIGl0ZW0gYW5kIHJlbmRlcnMgaXRcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXJcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBJZiBwcm92aWRlZCwgYWxsb3dzIHRoaXMgY29sdW1uIHRvIGJlIHNvcnRlZCBvbi4gTXVzdCByZXR1cm4gdGhlIHZhbHVlIHRvIHNvcnQgYWdhaW5zdC5cbiAgICAgICAqL1xuICAgIHNvcnRhYmxlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBDU1Mgd2lkdGggcHJvcGVydHkuIEhpbnRzIGZvciB0aGUgcmVxdWlyZWQgd2lkdGggb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29sdW1uIHNob3VsZCB0cnVuY2F0ZSBpdHMgY29udGVudCB3aGVuIGl0IGRvZXNuJ3QgZml0XG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcblxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRGVmYXVsdEl0ZW1BY3Rpb24gb3IgI0N1c3RvbUl0ZW1BY3Rpb25cbiAgICAgICAqL1xuICAgIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgICAvKipcbiAgICAgICAgICogVGhlIHR5cGUgb2YgYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJpY29uXCJdKS5pc1JlcXVpcmVkXSksXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciBvZiB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXSksXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgICAqL1xuICAgICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBEZXNjcmliZXMgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIHRpdGxlKVxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgICAqL1xuICAgICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgLyoqXG4gICAgICAgICAqIEFzc29jaWF0ZXMgYW4gaWNvbiB3aXRoIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICAgIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgYWN0aW9uLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIG5vZGUgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBgb25Gb2N1c2AgYW5kIGBvbkJsdXJgIGZ1bmN0aW9uc1xuICAgICAgICAgKi9cbiAgICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG4gICAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2xcbiAgICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXJcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY2FwdGlvbiB3aWxsIGJlIFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiXG4gICAgICovXG4gIHRhYmxlQ2FwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggY29sdW1uIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBpZGVudGlmeWluZyBjZWxsIGluIGVhY2ggcm93LiBTaG91bGQgbWF0Y2ggYSBcImZpZWxkXCIgcHJvcCBpbiBGaWVsZERhdGFDb2x1bW5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggY29sdW1uIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBpZGVudGlmeWluZyBjZWxsIGluIGVhY2ggcm93LiBTaG91bGQgbWF0Y2ggYSBcImZpZWxkXCIgcHJvcCBpbiBGaWVsZERhdGFDb2x1bW5cbiAgICAgKi9cbiAgcm93SGVhZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNFeHBhbmRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQcm92aWRlcyBhbiBpbmZpbml0ZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG4gIGxvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE1lc3NhZ2UgdG8gZGlzcGxheSBpZiB0YWJsZSBpcyBlbXB0eVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE1lc3NhZ2UgdG8gZGlzcGxheSBpZiB0YWJsZSBpcyBlbXB0eVxuICAgICAqL1xuICBub0l0ZW1zTWVzc2FnZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW5ldmVyIHBhZ2luYXRpb24gb3Igc29ydGluZyBjaGFuZ2VzICh0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHdoZW4gZWl0aGVyIHBhZ2luYXRpb24gb3Igc29ydGluZyBpcyBjb25maWd1cmVkKS4gU2VlICNDcml0ZXJpYSBvciAjQ3JpdGVyaWFXaXRoUGFnaW5hdGlvblxuICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjUGFnaW5hdGlvblxuICAgICAqL1xuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZF0pLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGN1cnJlbnQgcGFnZSAoemVyby1iYXNlZCkgaW5kZXhcbiAgICAgICAqL1xuICAgIHBhZ2VJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2hvd24gaW4gYSBzaW5nbGUgcGFnZS5cbiAgICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICAgKi9cbiAgICBwYWdlU2l6ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRoZSBwYWdlIGlzIFwic2xpY2VkXCIgb2ZcbiAgICAgICAqL1xuICAgIHRvdGFsSXRlbUNvdW50OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93biBvcHRpb25zLlxuICAgICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICAgKi9cbiAgICBwYWdlU2l6ZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG5cbiAgICAvKipcbiAgICAgICAqIEhpZGVzIHRoZSBwYWdlIHNpemUgZHJvcGRvd25cbiAgICAgICAqL1xuICAgIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2xcbiAgfSldKSxcblxuICAvKipcbiAgICAgKiBJZiB0cnVlLCB3aWxsIGNvbnZlcnQgdGFibGUgdG8gY2FyZHMgaW4gbW9iaWxlIHZpZXdcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBJZiB0cnVlLCB3aWxsIGNvbnZlcnQgdGFibGUgdG8gY2FyZHMgaW4gbW9iaWxlIHZpZXdcbiAgICAgKi9cbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dgXG4gICAgICovXG4gIHJvd1Byb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNlbGVjdGlvblR5cGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNlbGVjdGlvblR5cGVcbiAgICAgKi9cbiAgc2VsZWN0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBpdGVtIHNlbGVjdGlvbiBjaGFuZ2VzXG4gICAgICAgKi9cbiAgICBvblNlbGVjdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgcGVyIGl0ZW0gdG8gaW5kaWNhdGUgd2hldGhlciBpdCBpcyBzZWxlY3RhYmxlXG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byByZXRyaWV2ZSBhIG1lc3NhZ2UgZm9yIGl0cyBzZWxlY3RhYmxlIHN0YXRlLldlIGRpc3BsYXkgdGhlc2UgbWVzc2FnZXMgYXMgYSB0b29sdGlwIG9uIGFuIHVuc2VsZWN0YWJsZSBjaGVja2JveFxuICAgICAgICovXG4gICAgc2VsZWN0YWJsZU1lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGluaXRpYWxTZWxlY3RlZDogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKVxuICB9KSxcblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTb3J0aW5nVHlwZVxuICAgICAqL1xuICBzb3J0aW5nOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHRoZSBwcm9wZXJ0eS9maWVsZCB0byBzb3J0IG9uXG4gICAgICAgKi9cbiAgICBzb3J0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZmllbGQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICAgIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImFzY1wiLCBcImRlc2NcIl0pLmlzUmVxdWlyZWRcbiAgICB9KSxcblxuICAgIC8qKlxuICAgICAgICogRW5hYmxlcy9kaXNhYmxlcyB1bnNvcnRpbmcgb2YgdGFibGUgY29sdW1ucy4gU3VwcG9ydGVkIGJ5IEV1aUluTWVtb3J5VGFibGUuXG4gICAgICAgKi9cbiAgICBhbGxvd05ldXRyYWxTb3J0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRW5hYmxlcyB0aGUgZGVmYXVsdCBzb3J0aW5nIGFiaWxpdHkgZm9yIGVhY2ggY29sdW1uLlxuICAgICAgICovXG4gICAgZW5hYmxlQWxsQ29sdW1uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHkuIE5vdGUgdGhhdCBhdXRvIHRhYmxlTGF5b3V0IHByZXZlbnRzIHRydW5jYXRlVGV4dCBmcm9tIHdvcmtpbmcgcHJvcGVybHkuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cbiAgdGFibGVMYXlvdXQ6IFByb3BUeXBlcy5vbmVPZihbXCJmaXhlZFwiLCBcImF1dG9cIl0pLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gdGFibGUgY2VsbHMgPT4gQW55IGNlbGwgdXNpbmcgcmVuZGVyIGZ1bmN0aW9uIHdpbGwgc2V0IHRoaXMgdG8gYmUgZmFsc2UsIGxlYWRpbmcgdG8gdW5uZWNlc3Nhcnkgd29yZCBicmVha3MuIEFwcGx5IHRleHRPbmx5OiB0cnVlIGluIG9yZGVyIHRvIGVuc3VyZSBpdCBicmVha3MgcHJvcGVybHlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIHRhYmxlIGNlbGxzID0+IEFueSBjZWxsIHVzaW5nIHJlbmRlciBmdW5jdGlvbiB3aWxsIHNldCB0aGlzIHRvIGJlIGZhbHNlLCBsZWFkaW5nIHRvIHVubmVjZXNzYXJ5IHdvcmQgYnJlYWtzLiBBcHBseSB0ZXh0T25seTogdHJ1ZSBpbiBvcmRlciB0byBlbnN1cmUgaXQgYnJlYWtzIHByb3Blcmx5XG4gICAgICovXG4gIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gYWN0aW9uSXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gYWN0aW9uLmhhc093blByb3BlcnR5KCdyZW5kZXInKTtcbn1cblxuZXhwb3J0IHZhciBDb2xsYXBzZWRJdGVtQWN0aW9ucyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ29sbGFwc2VkSXRlbUFjdGlvbnMsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29sbGFwc2VkSXRlbUFjdGlvbnMpO1xuXG4gIGZ1bmN0aW9uIENvbGxhcHNlZEl0ZW1BY3Rpb25zKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb2xsYXBzZWRJdGVtQWN0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJEaXZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgcG9wb3Zlck9wZW46IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcG9wb3Zlck9wZW46ICFwcmV2U3RhdGUucG9wb3Zlck9wZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBvcG92ZXJPcGVuOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Qb3BvdmVyQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyB5b3UgbXVzdCBiZSBhc2tpbmcuLi4gV1RGPyBJIGtub3cuLi4gYnV0IHRoaXMgdGltZW91dCBpc1xuICAgICAgLy8gcmVxdWlyZWQgdG8gbWFrZSBzdXJlIHdlIHByb2Nlc3MgdGhlIG9uQmx1ciBldmVudHMgYWZ0ZXIgdGhlIGluaXRpYWxcbiAgICAgIC8vIGV2ZW50IGN5Y2xlLiBSZWZlcmVuY2U6XG4gICAgICAvLyBodHRwczovL21lZGl1bS5jb20vQGplc3NlYmVhY2gvZGVhbGluZy13aXRoLWZvY3VzLWFuZC1ibHVyLWluLWEtY29tcG9zaXRlLXdpZGdldC1pbi1yZWFjdC05MGQzYzNiNDlhOWJcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzLnBvcG92ZXJEaXYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiYgX3RoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlZ2lzdGVyUG9wb3ZlckRpdlwiLCBmdW5jdGlvbiAocG9wb3ZlckRpdikge1xuICAgICAgaWYgKCFfdGhpcy5wb3BvdmVyRGl2KSB7XG4gICAgICAgIF90aGlzLnBvcG92ZXJEaXYgPSBwb3BvdmVyRGl2O1xuICAgICAgICBfdGhpcy5wb3BvdmVyRGl2ICYmIF90aGlzLnBvcG92ZXJEaXYuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBfdGhpcy5vblBvcG92ZXJCbHVyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrSXRlbVwiLCBmdW5jdGlvbiAob25DbGlja0FjdGlvbikge1xuICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG5cbiAgICAgIGlmIChvbkNsaWNrQWN0aW9uKSB7XG4gICAgICAgIG9uQ2xpY2tBY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb2xsYXBzZWRJdGVtQWN0aW9ucywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5wb3BvdmVyRGl2KSB7XG4gICAgICAgIHRoaXMucG9wb3ZlckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMub25Qb3BvdmVyQmx1cik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3Rpb25zID0gX3RoaXMkcHJvcHMuYWN0aW9ucyxcbiAgICAgICAgICBpdGVtSWQgPSBfdGhpcyRwcm9wcy5pdGVtSWQsXG4gICAgICAgICAgaXRlbSA9IF90aGlzJHByb3BzLml0ZW0sXG4gICAgICAgICAgYWN0aW9uRW5hYmxlZCA9IF90aGlzJHByb3BzLmFjdGlvbkVuYWJsZWQsXG4gICAgICAgICAgb25Gb2N1cyA9IF90aGlzJHByb3BzLm9uRm9jdXMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lO1xuICAgICAgdmFyIGlzT3BlbiA9IHRoaXMuc3RhdGUucG9wb3Zlck9wZW47XG4gICAgICB2YXIgYWxsRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdmFyIGNvbnRyb2xzID0gYWN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGNvbnRyb2xzLCBhY3Rpb24sIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBcImFjdGlvbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGluZGV4KTtcbiAgICAgICAgdmFyIGF2YWlsYWJsZSA9IGFjdGlvbi5hdmFpbGFibGUgPyBhY3Rpb24uYXZhaWxhYmxlKGl0ZW0pIDogdHJ1ZTtcblxuICAgICAgICBpZiAoIWF2YWlsYWJsZSkge1xuICAgICAgICAgIHJldHVybiBjb250cm9scztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbmFibGVkID0gYWN0aW9uRW5hYmxlZChhY3Rpb24pO1xuICAgICAgICBhbGxEaXNhYmxlZCA9IGFsbERpc2FibGVkICYmICFlbmFibGVkO1xuXG4gICAgICAgIGlmIChhY3Rpb25Jc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSkge1xuICAgICAgICAgIHZhciBjdXN0b21BY3Rpb24gPSBhY3Rpb247XG4gICAgICAgICAgdmFyIGFjdGlvbkNvbnRyb2wgPSBjdXN0b21BY3Rpb24ucmVuZGVyKGl0ZW0sIGVuYWJsZWQpO1xuICAgICAgICAgIHZhciBhY3Rpb25Db250cm9sT25DbGljayA9IGFjdGlvbkNvbnRyb2wgJiYgYWN0aW9uQ29udHJvbC5wcm9wcyAmJiBhY3Rpb25Db250cm9sLnByb3BzLm9uQ2xpY2s7XG4gICAgICAgICAgY29udHJvbHMucHVzaChfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2xpY2tJdGVtKGFjdGlvbkNvbnRyb2xPbkNsaWNrID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25Db250cm9sT25DbGljayhpdGVtKTtcbiAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgYWN0aW9uQ29udHJvbCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb25DbGljayA9IGFjdGlvbi5vbkNsaWNrLFxuICAgICAgICAgICAgICBuYW1lID0gYWN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIGhyZWYgPSBhY3Rpb24uaHJlZixcbiAgICAgICAgICAgICAgdGFyZ2V0ID0gYWN0aW9uLnRhcmdldCxcbiAgICAgICAgICAgICAgZGF0YVRlc3RTdWJqID0gYWN0aW9uWydkYXRhLXRlc3Qtc3ViaiddO1xuICAgICAgICAgIHZhciBidXR0b25JY29uID0gYWN0aW9uLmljb247XG4gICAgICAgICAgdmFyIGljb247XG5cbiAgICAgICAgICBpZiAoYnV0dG9uSWNvbikge1xuICAgICAgICAgICAgaWNvbiA9IGlzU3RyaW5nKGJ1dHRvbkljb24pID8gYnV0dG9uSWNvbiA6IGJ1dHRvbkljb24oaXRlbSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGJ1dHRvbkNvbnRlbnQgPSB0eXBlb2YgbmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IG5hbWUoaXRlbSkgOiBuYW1lO1xuICAgICAgICAgIGNvbnRyb2xzLnB1c2goX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogZGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbkNsaWNrSXRlbShfb25DbGljayA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX29uQ2xpY2soaXRlbSk7XG4gICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGJ1dHRvbkNvbnRlbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9scztcbiAgICAgIH0sIFtdKTtcblxuICAgICAgdmFyIHBvcG92ZXJCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnMuYWxsQWN0aW9uc1wiLFxuICAgICAgICBkZWZhdWx0OiBcIkFsbCBhY3Rpb25zXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChhbGxBY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYWxsQWN0aW9ucyxcbiAgICAgICAgICBpY29uVHlwZTogXCJib3hlc0hvcml6b250YWxcIixcbiAgICAgICAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgICAgICAgaXNEaXNhYmxlZDogYWxsRGlzYWJsZWQsXG4gICAgICAgICAgb25DbGljazogX3RoaXMyLnRvZ2dsZVBvcG92ZXIuYmluZChfdGhpczIpLFxuICAgICAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zQnV0dG9uXCJcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHdpdGhUb29sdGlwID0gIWFsbERpc2FibGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQWxsIGFjdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKGFsbEFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICAgIGNvbnRlbnQ6IGFsbEFjdGlvbnMsXG4gICAgICAgICAgZGVsYXk6IFwibG9uZ1wiXG4gICAgICAgIH0sIHBvcG92ZXJCdXR0b24pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIHBvcG92ZXJSZWY6IHRoaXMucmVnaXN0ZXJQb3BvdmVyRGl2LFxuICAgICAgICBpZDogXCJcIi5jb25jYXQoaXRlbUlkLCBcIi1hY3Rpb25zXCIpLFxuICAgICAgICBpc09wZW46IGlzT3BlbixcbiAgICAgICAgYnV0dG9uOiB3aXRoVG9vbHRpcCB8fCBwb3BvdmVyQnV0dG9uLFxuICAgICAgICBjbG9zZVBvcG92ZXI6IHRoaXMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICAgICAgYW5jaG9yUG9zaXRpb246IFwibGVmdENlbnRlclwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICAgICAgaXRlbXM6IGNvbnRyb2xzXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbGxhcHNlZEl0ZW1BY3Rpb25zO1xufShDb21wb25lbnQpO1xuQ29sbGFwc2VkSXRlbUFjdGlvbnMucHJvcFR5cGVzID0ge1xuICBhY3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIHR5cGUgb2YgYWN0aW9uXG4gICAgICAgKi9cbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImljb25cIl0pLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgY29sb3Igb2YgdGhlIGJ1dHRvblxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXSksXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZXMgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIHRpdGxlKVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgKi9cbiAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgKi9cbiAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogQXNzb2NpYXRlcyBhbiBpY29uIHdpdGggdGhlIGJ1dHRvblxuICAgICAgICovXG4gICAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgdGhlIGFjdGlvbi4gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBub2RlIGlzIGV4cGVjdGVkIHRvIGhhdmUgYG9uRm9jdXNgIGFuZCBgb25CbHVyYCBmdW5jdGlvbnNcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICovXG4gICAgYXZhaWxhYmxlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAqL1xuICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIGl0ZW06IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgaXRlbUlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGFjdGlvbkVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmNcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBEZWZhdWx0SXRlbUFjdGlvbiB9IGZyb20gJy4vZGVmYXVsdF9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBDdXN0b21JdGVtQWN0aW9uIH0gZnJvbSAnLi9jdXN0b21faXRlbV9hY3Rpb24nO1xuaW1wb3J0IHsgaXNDdXN0b21JdGVtQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb25fdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXhwYW5kZWRJdGVtQWN0aW9ucyA9IGZ1bmN0aW9uIEV4cGFuZGVkSXRlbUFjdGlvbnMoX3JlZikge1xuICB2YXIgYWN0aW9ucyA9IF9yZWYuYWN0aW9ucyxcbiAgICAgIGl0ZW1JZCA9IF9yZWYuaXRlbUlkLFxuICAgICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICAgIGFjdGlvbkVuYWJsZWQgPSBfcmVmLmFjdGlvbkVuYWJsZWQsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcbiAgdmFyIG1vcmVUaGFuVGhyZWUgPSBhY3Rpb25zLmxlbmd0aCA+IDI7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAodG9vbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuXG4gICAgaWYgKCFhdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiB0b29scztcbiAgICB9XG5cbiAgICB2YXIgZW5hYmxlZCA9IGFjdGlvbkVuYWJsZWQoYWN0aW9uKTtcbiAgICB2YXIga2V5ID0gXCJpdGVtX2FjdGlvbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGluZGV4KTtcbiAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCB7XG4gICAgICBleHBhbmRlZEl0ZW1BY3Rpb25zX19jb21wbGV0ZWx5SGlkZTogbW9yZVRoYW5UaHJlZSAmJiBpbmRleCA8IDJcbiAgICB9KTtcblxuICAgIGlmIChpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSkge1xuICAgICAgLy8gY3VzdG9tIGFjdGlvbiBoYXMgYSByZW5kZXIgZnVuY3Rpb25cbiAgICAgIHRvb2xzLnB1c2goX19fRW1vdGlvbkpTWChDdXN0b21JdGVtQWN0aW9uLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKERlZmF1bHRJdGVtQWN0aW9uLCB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBlbmFibGVkOiBlbmFibGVkLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvb2xzO1xuICB9LCBbXSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSwgRXVpQnV0dG9uSWNvbiB9IGZyb20gJy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gSW4gb3JkZXIgdG8gdXNlIGdlbmVyaWNzIHdpdGggYW4gYXJyb3cgZnVuY3Rpb24gaW5zaWRlIGEgLnRzeCBmaWxlLCBpdCdzIG5lY2Vzc2FyeSB0byB1c2Vcbi8vIHRoaXMgYGV4dGVuZHNgIGhhY2sgYW5kIGRlY2xhcmUgdGhlIHR5cGVzIGFzIHNob3duLCBpbnN0ZWFkIG9mIGRlY2xhcmluZyB0aGUgY29uc3QgYXMgYVxuLy8gRnVuY3Rpb25Db21wb25lbnRcbmV4cG9ydCB2YXIgRGVmYXVsdEl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBEZWZhdWx0SXRlbUFjdGlvbihfcmVmKSB7XG4gIHZhciBhY3Rpb24gPSBfcmVmLmFjdGlvbixcbiAgICAgIGVuYWJsZWQgPSBfcmVmLmVuYWJsZWQsXG4gICAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG5cbiAgaWYgKCFhY3Rpb24ub25DbGljayAmJiAhYWN0aW9uLmhyZWYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVuZGVyIGl0ZW0gYWN0aW9uIFtcIi5jb25jYXQoYWN0aW9uLm5hbWUsIFwiXS4gTWlzc2luZyByZXF1aXJlZCAnb25DbGljaycgY2FsbGJhY2tcXG4gICAgICBvciAnaHJlZicgc3RyaW5nLiBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGEgY3VzdG9tIGFjdGlvbiBjb250cm9sLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoZSAncmVuZGVyJyBjYWxsYmFja1wiKSk7XG4gIH1cblxuICB2YXIgb25DbGljayA9IGFjdGlvbi5vbkNsaWNrID8gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBhY3Rpb24ub25DbGljayhpdGVtKTtcbiAgfSA6IHVuZGVmaW5lZDtcbiAgdmFyIGJ1dHRvbkNvbG9yID0gYWN0aW9uLmNvbG9yO1xuICB2YXIgY29sb3IgPSAncHJpbWFyeSc7XG5cbiAgaWYgKGJ1dHRvbkNvbG9yKSB7XG4gICAgY29sb3IgPSBpc1N0cmluZyhidXR0b25Db2xvcikgPyBidXR0b25Db2xvciA6IGJ1dHRvbkNvbG9yKGl0ZW0pO1xuICB9XG5cbiAgdmFyIGJ1dHRvbkljb24gPSBhY3Rpb24uaWNvbjtcbiAgdmFyIGljb247XG5cbiAgaWYgKGJ1dHRvbkljb24pIHtcbiAgICBpY29uID0gaXNTdHJpbmcoYnV0dG9uSWNvbikgPyBidXR0b25JY29uIDogYnV0dG9uSWNvbihpdGVtKTtcbiAgfVxuXG4gIHZhciBidXR0b247XG4gIHZhciBhY3Rpb25Db250ZW50ID0gdHlwZW9mIGFjdGlvbi5uYW1lID09PSAnZnVuY3Rpb24nID8gYWN0aW9uLm5hbWUoaXRlbSkgOiBhY3Rpb24ubmFtZTtcbiAgdmFyIGFyaWFMYWJlbElkID0gdXNlR2VuZXJhdGVkSHRtbElkKCk7XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnaWNvbicpIHtcbiAgICBpZiAoIWljb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBJdCBpcyBjb25maWd1cmVkIHRvIHJlbmRlciBhcyBhbiBpY29uIGJ1dCBub1xcbiAgICAgIGljb24gaXMgcHJvdmlkZWQuIE1ha2Ugc3VyZSB0byBzZXQgdGhlICdpY29uJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXCIpKTtcbiAgICB9XG5cbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsSWQsXG4gICAgICBpc0Rpc2FibGVkOiAhZW5hYmxlZCxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGljb25UeXBlOiBpY29uLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGFjdGlvbi5ocmVmLFxuICAgICAgdGFyZ2V0OiBhY3Rpb24udGFyZ2V0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ11cbiAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBpZDogYXJpYUxhYmVsSWRcbiAgICB9LCBhY3Rpb25Db250ZW50KSkpO1xuICB9IGVsc2Uge1xuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICBpc0Rpc2FibGVkOiAhZW5hYmxlZCxcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGljb25UeXBlOiBpY29uLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGFjdGlvbi5ocmVmLFxuICAgICAgdGFyZ2V0OiBhY3Rpb24udGFyZ2V0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ10sXG4gICAgICBmbHVzaDogXCJyaWdodFwiXG4gICAgfSwgYWN0aW9uQ29udGVudCk7XG4gIH1cblxuICByZXR1cm4gZW5hYmxlZCAmJiBhY3Rpb24uZGVzY3JpcHRpb24gPyBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICBjb250ZW50OiBhY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgZGVsYXk6IFwibG9uZ1wiXG4gIH0sIGJ1dHRvbikgOiBidXR0b247XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY2xvbmVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ3VzdG9tSXRlbUFjdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ3VzdG9tSXRlbUFjdGlvbiwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDdXN0b21JdGVtQWN0aW9uKTtcblxuICBmdW5jdGlvbiBDdXN0b21JdGVtQWN0aW9uKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEN1c3RvbUl0ZW1BY3Rpb24pO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibW91bnRlZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLm1vdW50ZWQpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMubW91bnRlZCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhc0ZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5oYXNGb2N1cztcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgfTsgLy8gd2hpbGUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYW4gYW50aS1wYXR0ZXJuLCBoZXJlIHdlIHJlcXVpcmVcbiAgICAvLyB0byBkbyB0aGF0IGFzIHRoZSBvbkZvY3VzL29uQmx1ciBldmVudHMgb2YgdGhlIGFjdGlvbiBjb250cm9sc1xuICAgIC8vIG1heSB0cmlnZ2VyIHdoaWxlIHRoaXMgY29tcG9uZW50IGlzIHVubW91bnRlZC4gQW4gYWx0ZXJuYXRpdmVcbiAgICAvLyAoYXQgbGVhc3QgdGhlIHdvcmthcm91bmRzIHN1Z2dlc3RlZCBieSByZWFjdCBpcyB0byB1bnJlZ2lzdGVyXG4gICAgLy8gdGhlIG9uRm9jdXMvb25CbHVyIGxpc3RlbmVycyBmcm9tIHRoZSBhY3Rpb24gY29udHJvbHMuLi4gdGhpc1xuICAgIC8vIHVuZm9ydHVuYXRlbHkgd2lsbCBsZWFkIHRvIHVubmVjZXNzYXJpbHkgY29tcGxleCBjb2RlLi4uIHNvIHdlJ2xsXG4gICAgLy8gc3RpY2sgdG8gdGhpcyBhcHByb2FjaCBmb3Igbm93KVxuXG4gICAgX3RoaXMubW91bnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDdXN0b21JdGVtQWN0aW9uLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGlvbiA9IF90aGlzJHByb3BzLmFjdGlvbixcbiAgICAgICAgICBlbmFibGVkID0gX3RoaXMkcHJvcHMuZW5hYmxlZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHMuaXRlbSxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWU7XG4gICAgICB2YXIgdG9vbCA9IGFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCk7XG4gICAgICB2YXIgY2xvbmVkVG9vbCA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQodG9vbCwge1xuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXJcbiAgICAgIH0pO1xuICAgICAgdmFyIHN0eWxlID0gdGhpcy5oYXNGb2N1cygpID8ge1xuICAgICAgICBvcGFjaXR5OiAxXG4gICAgICB9IDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCBjbG9uZWRUb29sKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ3VzdG9tSXRlbUFjdGlvbjtcbn0oQ29tcG9uZW50KTtcbkN1c3RvbUl0ZW1BY3Rpb24ucHJvcFR5cGVzID0ge1xuICBhY3Rpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGlzQ3VzdG9tSXRlbUFjdGlvbiA9IGZ1bmN0aW9uIGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuIGFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgncmVuZGVyJyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBFdWlUYWJsZVBhZ2luYXRpb24gfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBkZWZhdWx0cyA9IHtcbiAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDI1LCA1MF1cbn07XG5leHBvcnQgdmFyIFBhZ2luYXRpb25CYXIgPSBmdW5jdGlvbiBQYWdpbmF0aW9uQmFyKF9yZWYpIHtcbiAgdmFyIHBhZ2luYXRpb24gPSBfcmVmLnBhZ2luYXRpb24sXG4gICAgICBvblBhZ2VTaXplQ2hhbmdlID0gX3JlZi5vblBhZ2VTaXplQ2hhbmdlLFxuICAgICAgb25QYWdlQ2hhbmdlID0gX3JlZi5vblBhZ2VDaGFuZ2UsXG4gICAgICBhcmlhQ29udHJvbHMgPSBfcmVmWydhcmlhLWNvbnRyb2xzJ10sXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ107XG4gIHZhciBwYWdlU2l6ZU9wdGlvbnMgPSBwYWdpbmF0aW9uLnBhZ2VTaXplT3B0aW9ucyA/IHBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zIDogZGVmYXVsdHMucGFnZVNpemVPcHRpb25zO1xuICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbi5wYWdlU2l6ZSA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gcGFnaW5hdGlvbi5wYWdlU2l6ZSkgOiAxO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYWdlQ291bnQgPCBwYWdpbmF0aW9uLnBhZ2VJbmRleCArIDEpIHtcbiAgICAgIG9uUGFnZUNoYW5nZSA9PT0gbnVsbCB8fCBvblBhZ2VDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUGFnZUNoYW5nZShwYWdlQ291bnQgLSAxKTtcbiAgICB9XG4gIH0sIFtwYWdlQ291bnQsIG9uUGFnZUNoYW5nZSwgcGFnaW5hdGlvbl0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgIHNpemU6IFwibVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUGFnaW5hdGlvbiwge1xuICAgIGFjdGl2ZVBhZ2U6IHBhZ2luYXRpb24ucGFnZUluZGV4LFxuICAgIHNob3dQZXJQYWdlT3B0aW9uczogcGFnaW5hdGlvbi5zaG93UGVyUGFnZU9wdGlvbnMsXG4gICAgaXRlbXNQZXJQYWdlOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IHBhZ2VTaXplT3B0aW9ucyxcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZTogb25QYWdlU2l6ZUNoYW5nZSxcbiAgICBvbkNoYW5nZVBhZ2U6IG9uUGFnZUNoYW5nZSxcbiAgICBcImFyaWEtY29udHJvbHNcIjogYXJpYUNvbnRyb2xzLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWxcbiAgfSkpO1xufTsiLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciwgZnVuY3Rpb25hbFVwZGF0ZSwgaXNWYWxpZFRpbWVvdXQsIG5vb3AsIHJlcGxhY2VFcXVhbERlZXAsIHRpbWVVbnRpbFN0YWxlLCBlbnN1cmVRdWVyeUtleUFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tICcuL3JldHJ5ZXInOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5KGNvbmZpZykge1xuICAgIHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5jYWNoZSA9IGNvbmZpZy5jYWNoZTtcbiAgICB0aGlzLnF1ZXJ5S2V5ID0gY29uZmlnLnF1ZXJ5S2V5O1xuICAgIHRoaXMucXVlcnlIYXNoID0gY29uZmlnLnF1ZXJ5SGFzaDtcbiAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCB0aGlzLmdldERlZmF1bHRTdGF0ZSh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRjYWNoZVRpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHRoaXMubWV0YSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubWV0YTsgLy8gRGVmYXVsdCB0byA1IG1pbnV0ZXMgaWYgbm90IGNhY2hlIHRpbWUgaXMgc2V0XG5cbiAgICB0aGlzLmNhY2hlVGltZSA9IE1hdGgubWF4KHRoaXMuY2FjaGVUaW1lIHx8IDAsIChfdGhpcyRvcHRpb25zJGNhY2hlVGkgPSB0aGlzLm9wdGlvbnMuY2FjaGVUaW1lKSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRjYWNoZVRpIDogNSAqIDYwICogMTAwMCk7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZUdjID0gZnVuY3Rpb24gc2NoZWR1bGVHYygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuXG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuY2FjaGVUaW1lKSkge1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuY2FjaGVUaW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyR2NUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuZ2NUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5nY1RpbWVvdXQpO1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vcHRpb25hbFJlbW92ZSA9IGZ1bmN0aW9uIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmhhZE9ic2VydmVycykge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRpc0RhdGFFLCBfdGhpcyRvcHRpb25zO1xuXG4gICAgdmFyIHByZXZEYXRhID0gdGhpcy5zdGF0ZS5kYXRhOyAvLyBHZXQgdGhlIG5ldyBkYXRhXG5cbiAgICB2YXIgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpOyAvLyBVc2UgcHJldiBkYXRhIGlmIGFuIGlzRGF0YUVxdWFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHJldHVybnMgYHRydWVgXG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkaXNEYXRhRSA9IChfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zKS5pc0RhdGFFcXVhbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkaXNEYXRhRS5jYWxsKF90aGlzJG9wdGlvbnMsIHByZXZEYXRhLCBkYXRhKSkge1xuICAgICAgZGF0YSA9IHByZXZEYXRhO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgLy8gU3RydWN0dXJhbGx5IHNoYXJlIGRhdGEgYmV0d2VlbiBwcmV2IGFuZCBuZXcgZGF0YSBpZiBuZWVkZWRcbiAgICAgIGRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICB9IC8vIFNldCBkYXRhIGFuZCBtYXJrIGl0IGFzIGNhY2hlZFxuXG5cbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnVwZGF0ZWRBdFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBzZXRTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRTdGF0ZU9wdGlvbnM6IHNldFN0YXRlT3B0aW9uc1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyO1xuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7XG4gICAgKF90aGlzJHJldHJ5ZXIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyLmNhbmNlbChvcHRpb25zKTtcbiAgICByZXR1cm4gcHJvbWlzZSA/IHByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgdGhpcy5jYW5jZWwoe1xuICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmluaXRpYWxTdGF0ZSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzQWN0aXZlID0gZnVuY3Rpb24gaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIub3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNGZXRjaGluZztcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZSA9IGZ1bmN0aW9uIGlzU3RhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8IHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLmlzU3RhbGU7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGVCeVRpbWUgPSBmdW5jdGlvbiBpc1N0YWxlQnlUaW1lKHN0YWxlVGltZSkge1xuICAgIGlmIChzdGFsZVRpbWUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhbGVUaW1lID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIyO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjIuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjM7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIzID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjMuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5oYWRPYnNlcnZlcnMgPSB0cnVlOyAvLyBTdG9wIHRoZSBxdWVyeSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG5cbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyQWRkZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgIT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5vdCBzdXBwb3J0IGNhbmNlbGxhdGlvblxuICAgICAgICAvLyB3ZSdsbCBsZXQgdGhlIHF1ZXJ5IGNvbnRpbnVlIHNvIHRoZSByZXN1bHQgY2FuIGJlIGNhY2hlZFxuICAgICAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmV0cnllci5pc1RyYW5zcG9ydENhbmNlbGFibGUgfHwgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKHtcbiAgICAgICAgICAgICAgcmV2ZXJ0OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVUaW1lKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRPYnNlcnZlcnNDb3VudCA9IGZ1bmN0aW9uIGdldE9ic2VydmVyc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ludmFsaWRhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2gob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkYmVoYXZpbyxcbiAgICAgICAgX2NvbnRleHQkZmV0Y2hPcHRpb25zLFxuICAgICAgICBfYWJvcnRDb250cm9sbGVyJGFib3I7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIChmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoKSkge1xuICAgICAgICAvLyBTaWxlbnRseSBjYW5jZWwgY3VycmVudCBmZXRjaCBpZiB0aGUgdXNlciB3YW50cyB0byBjYW5jZWwgcmVmZXRjaGVzXG4gICAgICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJvbWlzZSkge1xuICAgICAgICB2YXIgX3RoaXMkcmV0cnllcjQ7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgcmV0cmllcyB0aGF0IHdlcmUgcG90ZW50aWFsbHkgY2FuY2VsbGVkIGR1ZSB0byB1bm1vdW50cyBjYW4gY29udGludWVcbiAgICAgICAgKF90aGlzJHJldHJ5ZXI0ID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjQuY29udGludWVSZXRyeSgpOyAvLyBSZXR1cm4gY3VycmVudCBwcm9taXNlIGlmIHdlIGFyZSBhbHJlYWR5IGZldGNoaW5nXG5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSBjb25maWcgaWYgcGFzc2VkLCBvdGhlcndpc2UgdGhlIGNvbmZpZyBmcm9tIHRoZSBsYXN0IGV4ZWN1dGlvbiBpcyB1c2VkXG5cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSAvLyBVc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUgZmlyc3Qgb2JzZXJ2ZXIgd2l0aCBhIHF1ZXJ5IGZ1bmN0aW9uIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBxdWVyeSBpcyBoeWRyYXRlZCBvciBjcmVhdGVkIHdpdGggc2V0UXVlcnlEYXRhLlxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4Lm9wdGlvbnMucXVlcnlGbjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBxdWVyeUtleSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkodGhpcy5xdWVyeUtleSk7XG4gICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpOyAvLyBDcmVhdGUgcXVlcnkgZnVuY3Rpb24gY29udGV4dFxuXG4gICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgcGFnZVBhcmFtOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCwgJ3NpZ25hbCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7IC8vIENyZWF0ZSBmZXRjaCBmdW5jdGlvblxuXG4gICAgdmFyIGZldGNoRm4gPSBmdW5jdGlvbiBmZXRjaEZuKCkge1xuICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgfTsgLy8gVHJpZ2dlciBiZWhhdmlvciBob29rXG5cblxuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZmV0Y2hPcHRpb25zOiBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIGZldGNoRm46IGZldGNoRm4sXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGJlaGF2aW8gPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8ub25GZXRjaCkge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnMkYmVoYXZpbzI7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zJGJlaGF2aW8yID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvMi5vbkZldGNoKGNvbnRleHQpO1xuICAgIH0gLy8gU3RvcmUgc3RhdGUgaW4gY2FzZSB0aGUgY3VycmVudCBmZXRjaCBuZWVkcyB0byBiZSByZXZlcnRlZFxuXG5cbiAgICB0aGlzLnJldmVydFN0YXRlID0gdGhpcy5zdGF0ZTsgLy8gU2V0IHRvIGZldGNoaW5nIHN0YXRlIGlmIG5vdCBhbHJlYWR5IGluIGl0XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNGZXRjaGluZyB8fCB0aGlzLnN0YXRlLmZldGNoTWV0YSAhPT0gKChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSkge1xuICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9uczI7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnZmV0Y2gnLFxuICAgICAgICBtZXRhOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5tZXRhXG4gICAgICB9KTtcbiAgICB9IC8vIFRyeSB0byBmZXRjaCB0aGUgZGF0YVxuXG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogY29udGV4dC5mZXRjaEZuLFxuICAgICAgYWJvcnQ6IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogKF9hYm9ydENvbnRyb2xsZXIkYWJvciA9IGFib3J0Q29udHJvbGxlci5hYm9ydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hYm9ydENvbnRyb2xsZXIkYWJvci5iaW5kKGFib3J0Q29udHJvbGxlciksXG4gICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uIG9uU3VjY2VzcyhkYXRhKSB7XG4gICAgICAgIF90aGlzMi5zZXREYXRhKGRhdGEpOyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuXG4gICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpczIpOyAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgLy8gT3B0aW1pc3RpY2FsbHkgdXBkYXRlIHN0YXRlIGlmIG5lZWRlZFxuICAgICAgICBpZiAoIShpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5zaWxlbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMyKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH0gLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IGNvbnRleHQub3B0aW9ucy5yZXRyeSxcbiAgICAgIHJldHJ5RGVsYXk6IGNvbnRleHQub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgdGhpcy5wcm9taXNlID0gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25RdWVyeVVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogX3RoaXMzLFxuICAgICAgICB0eXBlOiAncXVlcnlVcGRhdGVkJyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0U3RhdGUgPSBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUob3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICAgIHZhciBoYXNJbml0aWFsRGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgaW5pdGlhbERhdGFVcGRhdGVkQXQgPSBoYXNJbml0aWFsRGF0YSA/IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gICAgdmFyIGhhc0RhdGEgPSB0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBoYXNEYXRhID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgIT0gbnVsbCA/IGluaXRpYWxEYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSA6IDAsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgICBlcnJvclVwZGF0ZWRBdDogMCxcbiAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgZmV0Y2hNZXRhOiBudWxsLFxuICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgIHN0YXR1czogaGFzRGF0YSA/ICdzdWNjZXNzJyA6ICdpZGxlJ1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICB2YXIgX2FjdGlvbiRtZXRhLCBfYWN0aW9uJGRhdGFVcGRhdGVkQXQ7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncGF1c2UnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgZmV0Y2hNZXRhOiAoX2FjdGlvbiRtZXRhID0gYWN0aW9uLm1ldGEpICE9IG51bGwgPyBfYWN0aW9uJG1ldGEgOiBudWxsLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IHRydWUsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0sICFzdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIHtcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZGF0YVVwZGF0ZWRBdDogKF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA9IGFjdGlvbi5kYXRhVXBkYXRlZEF0KSAhPSBudWxsID8gX2FjdGlvbiRkYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdmFyIGVycm9yID0gYWN0aW9uLmVycm9yO1xuXG4gICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy5yZXZlcnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5yZXZlcnRTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnaW52YWxpZGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5O1xufSgpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXksIG5vb3AsIHBhcnNlRmlsdGVyQXJncywgcGFyc2VRdWVyeUFyZ3MsIHBhcnRpYWxNYXRjaEtleSwgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeUNhY2hlIH0gZnJvbSAnLi9xdWVyeUNhY2hlJztcbmltcG9ydCB7IE11dGF0aW9uQ2FjaGUgfSBmcm9tICcuL211dGF0aW9uQ2FjaGUnO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gJy4vaW5maW5pdGVRdWVyeUJlaGF2aW9yJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnlDbGllbnQoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25maWcgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXJ5Q2FjaGUgPSBjb25maWcucXVlcnlDYWNoZSB8fCBuZXcgUXVlcnlDYWNoZSgpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlIHx8IG5ldyBNdXRhdGlvbkNhY2hlKCk7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMgPSBbXTtcbiAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNsaWVudC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm1vdW50ID0gZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMudW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbkZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51bnN1YnNjcmliZU9ubGluZSA9IG9ubGluZU1hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25PbmxpbmUoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVubW91bnQgPSBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgIHZhciBfdGhpcyR1bnN1YnNjcmliZUZvY3UsIF90aGlzJHVuc3Vic2NyaWJlT25saTtcblxuICAgIChfdGhpcyR1bnN1YnNjcmliZUZvY3UgPSB0aGlzLnVuc3Vic2NyaWJlRm9jdXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZUZvY3UuY2FsbCh0aGlzKTtcbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVPbmxpID0gdGhpcy51bnN1YnNjcmliZU9ubGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlT25saS5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgZmlsdGVycy5mZXRjaGluZyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaXNNdXRhdGluZyA9IGZ1bmN0aW9uIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuZmluZEFsbChfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgZmV0Y2hpbmc6IHRydWVcbiAgICB9KSkubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBnZXRRdWVyeURhdGEocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQuc3RhdGUuZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBnZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYucXVlcnlLZXksXG4gICAgICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgcmV0dXJuIFtxdWVyeUtleSwgZGF0YV07XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MocXVlcnlLZXkpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucykuc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBzZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmMi5xdWVyeUtleTtcbiAgICAgICAgcmV0dXJuIFtxdWVyeUtleSwgX3RoaXMyLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucyldO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5U3RhdGUgPSBmdW5jdGlvbiBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDI7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyLnN0YXRlO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmVRdWVyaWVzID0gZnVuY3Rpb24gcmVtb3ZlUXVlcmllcyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeUNhY2hlLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXRRdWVyaWVzID0gZnVuY3Rpb24gcmVzZXRRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MzWzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczNbMV07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBhY3RpdmU6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5yZXNldCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3RoaXMzLnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsUXVlcmllcyA9IGZ1bmN0aW9uIGNhbmNlbFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M0ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczRbMF0sXG4gICAgICAgIF9wYXJzZUZpbHRlckFyZ3M0JCA9IF9wYXJzZUZpbHRlckFyZ3M0WzFdLFxuICAgICAgICBjYW5jZWxPcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczQkID09PSB2b2lkIDAgPyB7fSA6IF9wYXJzZUZpbHRlckFyZ3M0JDtcblxuICAgIGlmICh0eXBlb2YgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjYW5jZWxPcHRpb25zLnJldmVydCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5jYW5jZWwoY2FuY2VsT3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGVRdWVyaWVzID0gZnVuY3Rpb24gaW52YWxpZGF0ZVF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfcmVmMyxcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEFjdGl2LFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoSW5hY3QsXG4gICAgICAgIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczUgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M1WzFdO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIC8vIGlmIGZpbHRlcnMucmVmZXRjaEFjdGl2ZSBpcyBub3QgcHJvdmlkZWQgYW5kIGZpbHRlcnMuYWN0aXZlIGlzIGV4cGxpY2l0bHkgZmFsc2UsXG4gICAgICAvLyBlLmcuIGludmFsaWRhdGVRdWVyaWVzKHsgYWN0aXZlOiBmYWxzZSB9KSwgd2UgZG9uJ3Qgd2FudCB0byByZWZldGNoIGFjdGl2ZSBxdWVyaWVzXG4gICAgICBhY3RpdmU6IChfcmVmMyA9IChfZmlsdGVycyRyZWZldGNoQWN0aXYgPSBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoQWN0aXYgOiBmaWx0ZXJzLmFjdGl2ZSkgIT0gbnVsbCA/IF9yZWYzIDogdHJ1ZSxcbiAgICAgIGluYWN0aXZlOiAoX2ZpbHRlcnMkcmVmZXRjaEluYWN0ID0gZmlsdGVycy5yZWZldGNoSW5hY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoSW5hY3QgOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5pbnZhbGlkYXRlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2hRdWVyaWVzID0gZnVuY3Rpb24gcmVmZXRjaFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M2ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczZbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlsxXTtcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNi5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuZmV0Y2godW5kZWZpbmVkLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHJlZmV0Y2hQYWdlOiBmaWx0ZXJzID09IG51bGwgPyB2b2lkIDAgOiBmaWx0ZXJzLnJlZmV0Y2hQYWdlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApO1xuXG4gICAgaWYgKCEob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIGZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YW5uZXJsaW5zbGV5L3JlYWN0LXF1ZXJ5L2lzc3Vlcy82NTJcblxuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUoZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUpID8gcXVlcnkuZmV0Y2goZGVmYXVsdGVkT3B0aW9ucykgOiBQcm9taXNlLnJlc29sdmUocXVlcnkuc3RhdGUuZGF0YSk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIGZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICBwYXJzZWRPcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShwYXJzZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTXV0YXRpb25zID0gZnVuY3Rpb24gY2FuY2VsTXV0YXRpb25zKCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM3Lm11dGF0aW9uQ2FjaGUuZ2V0QWxsKCkubWFwKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNdXRhdGlvbkNhY2hlKCkucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5idWlsZCh0aGlzLCBvcHRpb25zKS5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5Q2FjaGUgPSBmdW5jdGlvbiBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uQ2FjaGUgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShxdWVyeUtleSkgPT09IGhhc2hRdWVyeUtleSh4LnF1ZXJ5S2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIHZhciBfdGhpcyRxdWVyeURlZmF1bHRzJGY7XG5cbiAgICByZXR1cm4gcXVlcnlLZXkgPyAoX3RoaXMkcXVlcnlEZWZhdWx0cyRmID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkocXVlcnlLZXksIHgucXVlcnlLZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlEZWZhdWx0cyRmLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5zZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gc2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkgPT09IGhhc2hRdWVyeUtleSh4Lm11dGF0aW9uS2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgbXV0YXRpb25LZXk6IG11dGF0aW9uS2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSkge1xuICAgIHZhciBfdGhpcyRtdXRhdGlvbkRlZmF1bHQ7XG5cbiAgICByZXR1cm4gbXV0YXRpb25LZXkgPyAoX3RoaXMkbXV0YXRpb25EZWZhdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb25LZXksIHgubXV0YXRpb25LZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkbXV0YXRpb25EZWZhdWx0LmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5xdWVyaWVzLCB0aGlzLmdldFF1ZXJ5RGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICghZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggJiYgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggPSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRlZE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdE11dGF0aW9uT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsIHRoaXMuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm11dGF0aW9uS2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMucXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZS5jbGVhcigpO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNsaWVudDtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGlzU2VydmVyLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgc2hhbGxvd0VxdWFsT2JqZWN0cywgdGltZVVudGlsU3RhbGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7XG5leHBvcnQgdmFyIFF1ZXJ5T2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlPYnNlcnZlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlPYnNlcnZlcihjbGllbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBfdGhpcy50cmFja2VkUHJvcHMgPSBbXTtcbiAgICBfdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG5cbiAgICBfdGhpcy5iaW5kTWV0aG9kcygpO1xuXG4gICAgX3RoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeU9ic2VydmVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYmluZE1ldGhvZHMgPSBmdW5jdGlvbiBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLnJlbW92ZSA9IHRoaXMucmVtb3ZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWZldGNoID0gdGhpcy5yZWZldGNoLmJpbmQodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG5cbiAgICAgIGlmIChzaG91bGRGZXRjaE9uTW91bnQodGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25SZWNvbm5lY3QgPSBmdW5jdGlvbiBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHRoaXMub3B0aW9ucy5yZWZldGNoT25SZWNvbm5lY3QpO1xuICB9O1xuXG4gIF9wcm90by5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPbldpbmRvd0ZvY3VzKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLmNsZWFyVGltZXJzKCk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGVuYWJsZWQgdG8gYmUgYSBib29sZWFuJyk7XG4gICAgfSAvLyBLZWVwIHByZXZpb3VzIHF1ZXJ5IGtleSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzdXBwbHkgb25lXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICB0aGlzLm9wdGlvbnMucXVlcnlLZXkgPSBwcmV2T3B0aW9ucy5xdWVyeUtleTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7XG4gICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpOyAvLyBGZXRjaCBpZiB0aGVyZSBhcmUgc3Vic2NyaWJlcnNcblxuICAgIGlmIChtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseSh0aGlzLmN1cnJlbnRRdWVyeSwgcHJldlF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHByZXZPcHRpb25zKSkge1xuICAgICAgdGhpcy5leGVjdXRlRmV0Y2goKTtcbiAgICB9IC8vIFVwZGF0ZSByZXN1bHRcblxuXG4gICAgdGhpcy51cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucyk7IC8vIFVwZGF0ZSBzdGFsZSBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IHRoaXMub3B0aW9ucy5zdGFsZVRpbWUgIT09IHByZXZPcHRpb25zLnN0YWxlVGltZSkpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgdmFyIG5leHRSZWZldGNoSW50ZXJ2YWwgPSB0aGlzLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKTsgLy8gVXBkYXRlIHJlZmV0Y2ggaW50ZXJ2YWwgaWYgbmVlZGVkXG5cbiAgICBpZiAobW91bnRlZCAmJiAodGhpcy5jdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gcHJldk9wdGlvbnMuZW5hYmxlZCB8fCBuZXh0UmVmZXRjaEludGVydmFsICE9PSB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0UmVmZXRjaEludGVydmFsKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9wdGltaXN0aWNSZXN1bHQgPSBmdW5jdGlvbiBnZXRPcHRpbWlzdGljUmVzdWx0KG9wdGlvbnMpIHtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlc3VsdChxdWVyeSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRSZXN1bHQgPSBmdW5jdGlvbiBnZXRDdXJyZW50UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnRyYWNrUmVzdWx0ID0gZnVuY3Rpb24gdHJhY2tSZXN1bHQocmVzdWx0LCBkZWZhdWx0ZWRPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgdHJhY2tlZFJlc3VsdCA9IHt9O1xuXG4gICAgdmFyIHRyYWNrUHJvcCA9IGZ1bmN0aW9uIHRyYWNrUHJvcChrZXkpIHtcbiAgICAgIGlmICghX3RoaXMyLnRyYWNrZWRQcm9wcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIF90aGlzMi50cmFja2VkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyYWNrZWRSZXN1bHQsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICB0cmFja1Byb3Aoa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSB8fCBkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgICB0cmFja1Byb3AoJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYWNrZWRSZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLmdldE5leHRSZXN1bHQgPSBmdW5jdGlvbiBnZXROZXh0UmVzdWx0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgdW5zdWJzY3JpYmUgPSBfdGhpczMuc3Vic2NyaWJlKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNGZXRjaGluZykge1xuICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRDdXJyZW50UXVlcnkgPSBmdW5jdGlvbiBnZXRDdXJyZW50UXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLnJlbW92ZSh0aGlzLmN1cnJlbnRRdWVyeSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2ggPSBmdW5jdGlvbiByZWZldGNoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgbWV0YToge1xuICAgICAgICByZWZldGNoUGFnZTogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZWZldGNoUGFnZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hPcHRpbWlzdGljID0gZnVuY3Rpb24gZmV0Y2hPcHRpbWlzdGljKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmZldGNoKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LmNyZWF0ZVJlc3VsdChxdWVyeSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmV0Y2goZmV0Y2hPcHRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS51cGRhdGVSZXN1bHQoKTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5jdXJyZW50UmVzdWx0O1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlRmV0Y2ggPSBmdW5jdGlvbiBleGVjdXRlRmV0Y2goZmV0Y2hPcHRpb25zKSB7XG4gICAgLy8gTWFrZSBzdXJlIHdlIHJlZmVyZW5jZSB0aGUgbGF0ZXN0IHF1ZXJ5IGFzIHRoZSBjdXJyZW50IG9uZSBtaWdodCBoYXZlIGJlZW4gcmVtb3ZlZFxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTsgLy8gRmV0Y2hcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5jdXJyZW50UXVlcnkuZmV0Y2godGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpO1xuXG4gICAgaWYgKCEoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIHVwZGF0ZVN0YWxlVGltZW91dCgpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJTdGFsZVRpbWVvdXQoKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLmN1cnJlbnRSZXN1bHQuaXNTdGFsZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5vcHRpb25zLnN0YWxlVGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhVXBkYXRlZEF0LCB0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKTsgLy8gVGhlIHRpbWVvdXQgaXMgc29tZXRpbWVzIHRyaWdnZXJlZCAxIG1zIGJlZm9yZSB0aGUgc3RhbGUgdGltZSBleHBpcmF0aW9uLlxuICAgIC8vIFRvIG1pdGlnYXRlIHRoaXMgaXNzdWUgd2UgYWx3YXlzIGFkZCAxIG1zIHRvIHRoZSB0aW1lb3V0LlxuXG4gICAgdmFyIHRpbWVvdXQgPSB0aW1lICsgMTtcbiAgICB0aGlzLnN0YWxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzNi5jdXJyZW50UmVzdWx0LmlzU3RhbGUpIHtcbiAgICAgICAgX3RoaXM2LnVwZGF0ZVJlc3VsdCgpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXQpO1xuICB9O1xuXG4gIF9wcm90by5jb21wdXRlUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRyZWZldGNoO1xuXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsID09PSAnZnVuY3Rpb24nID8gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCh0aGlzLmN1cnJlbnRSZXN1bHQuZGF0YSwgdGhpcy5jdXJyZW50UXVlcnkpIDogKF90aGlzJG9wdGlvbnMkcmVmZXRjaCA9IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJlZmV0Y2ggOiBmYWxzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gdXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRJbnRlcnZhbCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9IG5leHRJbnRlcnZhbDtcblxuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UgfHwgIWlzVmFsaWRUaW1lb3V0KHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkgfHwgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpczcub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWxJbkJhY2tncm91bmQgfHwgZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpKSB7XG4gICAgICAgIF90aGlzNy5leGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVUaW1lcnMgPSBmdW5jdGlvbiB1cGRhdGVUaW1lcnMoKSB7XG4gICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbCh0aGlzLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyVGltZXJzID0gZnVuY3Rpb24gY2xlYXJUaW1lcnMoKSB7XG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuY2xlYXJSZWZldGNoSW50ZXJ2YWwoKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJTdGFsZVRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclN0YWxlVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5zdGFsZVRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhbGVUaW1lb3V0SWQpO1xuICAgICAgdGhpcy5zdGFsZVRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyUmVmZXRjaEludGVydmFsID0gZnVuY3Rpb24gY2xlYXJSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMucmVmZXRjaEludGVydmFsSWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY3JlYXRlUmVzdWx0ID0gZnVuY3Rpb24gY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB2YXIgcHJldlJlc3VsdFN0YXRlID0gdGhpcy5jdXJyZW50UmVzdWx0U3RhdGU7XG4gICAgdmFyIHByZXZSZXN1bHRPcHRpb25zID0gdGhpcy5jdXJyZW50UmVzdWx0T3B0aW9ucztcbiAgICB2YXIgcXVlcnlDaGFuZ2UgPSBxdWVyeSAhPT0gcHJldlF1ZXJ5O1xuICAgIHZhciBxdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5Q2hhbmdlID8gcXVlcnkuc3RhdGUgOiB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZTtcbiAgICB2YXIgcHJldlF1ZXJ5UmVzdWx0ID0gcXVlcnlDaGFuZ2UgPyB0aGlzLmN1cnJlbnRSZXN1bHQgOiB0aGlzLnByZXZpb3VzUXVlcnlSZXN1bHQ7XG4gICAgdmFyIHN0YXRlID0gcXVlcnkuc3RhdGU7XG4gICAgdmFyIGRhdGFVcGRhdGVkQXQgPSBzdGF0ZS5kYXRhVXBkYXRlZEF0LFxuICAgICAgICBlcnJvciA9IHN0YXRlLmVycm9yLFxuICAgICAgICBlcnJvclVwZGF0ZWRBdCA9IHN0YXRlLmVycm9yVXBkYXRlZEF0LFxuICAgICAgICBpc0ZldGNoaW5nID0gc3RhdGUuaXNGZXRjaGluZyxcbiAgICAgICAgc3RhdHVzID0gc3RhdGUuc3RhdHVzO1xuICAgIHZhciBpc1ByZXZpb3VzRGF0YSA9IGZhbHNlO1xuICAgIHZhciBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlO1xuICAgIHZhciBkYXRhOyAvLyBPcHRpbWlzdGljYWxseSBzZXQgcmVzdWx0IGluIGZldGNoaW5nIHN0YXRlIGlmIG5lZWRlZFxuXG4gICAgaWYgKG9wdGlvbnMub3B0aW1pc3RpY1Jlc3VsdHMpIHtcbiAgICAgIHZhciBtb3VudGVkID0gdGhpcy5oYXNMaXN0ZW5lcnMoKTtcbiAgICAgIHZhciBmZXRjaE9uTW91bnQgPSAhbW91bnRlZCAmJiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpO1xuICAgICAgdmFyIGZldGNoT3B0aW9uYWxseSA9IG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKTtcblxuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgaXNGZXRjaGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFkYXRhVXBkYXRlZEF0KSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBLZWVwIHByZXZpb3VzIGRhdGEgaWYgbmVlZGVkXG5cblxuICAgIGlmIChvcHRpb25zLmtlZXBQcmV2aW91c0RhdGEgJiYgIXN0YXRlLmRhdGFVcGRhdGVDb3VudCAmJiAocHJldlF1ZXJ5UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UXVlcnlSZXN1bHQuaXNTdWNjZXNzKSAmJiBzdGF0dXMgIT09ICdlcnJvcicpIHtcbiAgICAgIGRhdGEgPSBwcmV2UXVlcnlSZXN1bHQuZGF0YTtcbiAgICAgIGRhdGFVcGRhdGVkQXQgPSBwcmV2UXVlcnlSZXN1bHQuZGF0YVVwZGF0ZWRBdDtcbiAgICAgIHN0YXR1cyA9IHByZXZRdWVyeVJlc3VsdC5zdGF0dXM7XG4gICAgICBpc1ByZXZpb3VzRGF0YSA9IHRydWU7XG4gICAgfSAvLyBTZWxlY3QgZGF0YSBpZiBuZWVkZWRcbiAgICBlbHNlIGlmIChvcHRpb25zLnNlbGVjdCAmJiB0eXBlb2Ygc3RhdGUuZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gTWVtb2l6ZSBzZWxlY3QgcmVzdWx0XG4gICAgICAgIGlmIChwcmV2UmVzdWx0ICYmIHN0YXRlLmRhdGEgPT09IChwcmV2UmVzdWx0U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHRTdGF0ZS5kYXRhKSAmJiBvcHRpb25zLnNlbGVjdCA9PT0gdGhpcy5zZWxlY3RGbikge1xuICAgICAgICAgIGRhdGEgPSB0aGlzLnNlbGVjdFJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RGbiA9IG9wdGlvbnMuc2VsZWN0O1xuICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMuc2VsZWN0KHN0YXRlLmRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5kYXRhLCBkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZXN1bHQgPSBkYXRhO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVXNlIHF1ZXJ5IGRhdGFcbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICB9IC8vIFNob3cgcGxhY2Vob2xkZXIgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnICYmIChzdGF0dXMgPT09ICdsb2FkaW5nJyB8fCBzdGF0dXMgPT09ICdpZGxlJykpIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlckRhdGE7IC8vIE1lbW9pemUgcGxhY2Vob2xkZXIgZGF0YVxuXG4gICAgICBpZiAoKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuaXNQbGFjZWhvbGRlckRhdGEpICYmIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSAocHJldlJlc3VsdE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHRPcHRpb25zLnBsYWNlaG9sZGVyRGF0YSkpIHtcbiAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gcHJldlJlc3VsdC5kYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gdHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEoKSA6IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiB0eXBlb2YgcGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBvcHRpb25zLnNlbGVjdChwbGFjZWhvbGRlckRhdGEpO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIHBsYWNlaG9sZGVyRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihzZWxlY3RFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgIGRhdGEgPSBwbGFjZWhvbGRlckRhdGE7XG4gICAgICAgIGlzUGxhY2Vob2xkZXJEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLnNlbGVjdEVycm9yO1xuICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgZXJyb3JVcGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICBpc0xvYWRpbmc6IHN0YXR1cyA9PT0gJ2xvYWRpbmcnLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09ICdzdWNjZXNzJyxcbiAgICAgIGlzRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyxcbiAgICAgIGlzSWRsZTogc3RhdHVzID09PSAnaWRsZScsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogZGF0YVVwZGF0ZWRBdCxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgIGVycm9yVXBkYXRlZEF0OiBlcnJvclVwZGF0ZWRBdCxcbiAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGVkOiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiAwIHx8IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgPiAwLFxuICAgICAgaXNGZXRjaGVkQWZ0ZXJNb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZGF0YVVwZGF0ZUNvdW50IHx8IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGluZzogaXNGZXRjaGluZyxcbiAgICAgIGlzUmVmZXRjaGluZzogaXNGZXRjaGluZyAmJiBzdGF0dXMgIT09ICdsb2FkaW5nJyxcbiAgICAgIGlzTG9hZGluZ0Vycm9yOiBzdGF0dXMgPT09ICdlcnJvcicgJiYgc3RhdGUuZGF0YVVwZGF0ZWRBdCA9PT0gMCxcbiAgICAgIGlzUGxhY2Vob2xkZXJEYXRhOiBpc1BsYWNlaG9sZGVyRGF0YSxcbiAgICAgIGlzUHJldmlvdXNEYXRhOiBpc1ByZXZpb3VzRGF0YSxcbiAgICAgIGlzUmVmZXRjaEVycm9yOiBzdGF0dXMgPT09ICdlcnJvcicgJiYgc3RhdGUuZGF0YVVwZGF0ZWRBdCAhPT0gMCxcbiAgICAgIGlzU3RhbGU6IGlzU3RhbGUocXVlcnksIG9wdGlvbnMpLFxuICAgICAgcmVmZXRjaDogdGhpcy5yZWZldGNoLFxuICAgICAgcmVtb3ZlOiB0aGlzLnJlbW92ZVxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkTm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24gc2hvdWxkTm90aWZ5TGlzdGVuZXJzKHJlc3VsdCwgcHJldlJlc3VsdCkge1xuICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMsXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID0gX3RoaXMkb3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucztcblxuICAgIGlmICghbm90aWZ5T25DaGFuZ2VQcm9wcyAmJiAhbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcgJiYgIXRoaXMudHJhY2tlZFByb3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGluY2x1ZGVkUHJvcHMgPSBub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcgPyB0aGlzLnRyYWNrZWRQcm9wcyA6IG5vdGlmeU9uQ2hhbmdlUHJvcHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlc3VsdCkuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgdHlwZWRLZXkgPSBrZXk7XG4gICAgICB2YXIgY2hhbmdlZCA9IHJlc3VsdFt0eXBlZEtleV0gIT09IHByZXZSZXN1bHRbdHlwZWRLZXldO1xuICAgICAgdmFyIGlzSW5jbHVkZWQgPSBpbmNsdWRlZFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBpbmNsdWRlZFByb3BzLnNvbWUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IGtleTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGlzRXhjbHVkZWQgPSBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2hhbmdlZCAmJiAhaXNFeGNsdWRlZCAmJiAoIWluY2x1ZGVkUHJvcHMgfHwgaXNJbmNsdWRlZCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVJlc3VsdCA9IGZ1bmN0aW9uIHVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0ID0gdGhpcy5jcmVhdGVSZXN1bHQodGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRRdWVyeS5zdGF0ZTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBPbmx5IG5vdGlmeSBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWRcblxuICAgIGlmIChzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMuY3VycmVudFJlc3VsdCwgcHJldlJlc3VsdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERldGVybWluZSB3aGljaCBjYWxsYmFja3MgdG8gdHJpZ2dlclxuXG5cbiAgICB2YXIgZGVmYXVsdE5vdGlmeU9wdGlvbnMgPSB7XG4gICAgICBjYWNoZTogdHJ1ZVxuICAgIH07XG5cbiAgICBpZiAoKG5vdGlmeU9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSAhPT0gZmFsc2UgJiYgdGhpcy5zaG91bGROb3RpZnlMaXN0ZW5lcnModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgZGVmYXVsdE5vdGlmeU9wdGlvbnMubGlzdGVuZXJzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShfZXh0ZW5kcyh7fSwgZGVmYXVsdE5vdGlmeU9wdGlvbnMsIG5vdGlmeU9wdGlvbnMpKTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUXVlcnkgPSBmdW5jdGlvbiB1cGRhdGVRdWVyeSgpIHtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIHRoaXMub3B0aW9ucyk7XG5cbiAgICBpZiAocXVlcnkgPT09IHRoaXMuY3VycmVudFF1ZXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByZXZRdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB0aGlzLnByZXZpb3VzUXVlcnlSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG5cbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgcHJldlF1ZXJ5ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UXVlcnkucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgICBxdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uUXVlcnlVcGRhdGUgPSBmdW5jdGlvbiBvblF1ZXJ5VXBkYXRlKGFjdGlvbikge1xuICAgIHZhciBub3RpZnlPcHRpb25zID0ge307XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgbm90aWZ5T3B0aW9ucy5vblN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdlcnJvcicgJiYgIWlzQ2FuY2VsbGVkRXJyb3IoYWN0aW9uLmVycm9yKSkge1xuICAgICAgbm90aWZ5T3B0aW9ucy5vbkVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRmlyc3QgdHJpZ2dlciB0aGUgY29uZmlndXJhdGlvbiBjYWxsYmFja3NcbiAgICAgIGlmIChub3RpZnlPcHRpb25zLm9uU3VjY2Vzcykge1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyhfdGhpczguY3VycmVudFJlc3VsdC5kYXRhKTtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblNldHRsZWQoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZGF0YSwgbnVsbCk7XG4gICAgICB9IGVsc2UgaWYgKG5vdGlmeU9wdGlvbnMub25FcnJvcikge1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vbkVycm9yKF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBfdGhpczguY3VycmVudFJlc3VsdC5lcnJvcik7XG4gICAgICB9IC8vIFRoZW4gdHJpZ2dlciB0aGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIF90aGlzOC5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICBsaXN0ZW5lcihfdGhpczguY3VycmVudFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBUaGVuIHRoZSBjYWNoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5jYWNoZSkge1xuICAgICAgICBfdGhpczguY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICAgIHF1ZXJ5OiBfdGhpczguY3VycmVudFF1ZXJ5LFxuICAgICAgICAgIHR5cGU6ICdvYnNlcnZlclJlc3VsdHNVcGRhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlPYnNlcnZlcjtcbn0oU3Vic2NyaWJhYmxlKTtcblxuZnVuY3Rpb24gc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UgJiYgIXF1ZXJ5LnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgIShxdWVyeS5zdGF0ZS5zdGF0dXMgPT09ICdlcnJvcicgJiYgb3B0aW9ucy5yZXRyeU9uTW91bnQgPT09IGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykgfHwgcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCA+IDAgJiYgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT24ocXVlcnksIG9wdGlvbnMsIGZpZWxkKSB7XG4gIGlmIChvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgdmFyIHZhbHVlID0gdHlwZW9mIGZpZWxkID09PSAnZnVuY3Rpb24nID8gZmllbGQocXVlcnkpIDogZmllbGQ7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnYWx3YXlzJyB8fCB2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAocXVlcnkgIT09IHByZXZRdWVyeSB8fCBwcmV2T3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkgJiYgKCFvcHRpb25zLnN1c3BlbnNlIHx8IHF1ZXJ5LnN0YXRlLnN0YXR1cyAhPT0gJ2Vycm9yJykgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUob3B0aW9ucy5zdGFsZVRpbWUpO1xufSIsICJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmV4cG9ydCB2YXIgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlczsiLCAiaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICcuL3JlYWN0QmF0Y2hlZFVwZGF0ZXMnO1xubm90aWZ5TWFuYWdlci5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKTsiLCAiZXhwb3J0IHZhciBsb2dnZXIgPSBjb25zb2xlOyIsICJpbXBvcnQgeyBzZXRMb2dnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbnNldExvZ2dlcihsb2dnZXIpOyIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIGRlZmF1bHRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbnZhciBRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpOyAvLyBpZiBjb250ZXh0U2hhcmluZyBpcyBvbiwgd2Ugc2hhcmUgdGhlIGZpcnN0IGFuZCBhdCBsZWFzdCBvbmVcbi8vIGluc3RhbmNlIG9mIHRoZSBjb250ZXh0IGFjcm9zcyB0aGUgd2luZG93XG4vLyB0byBlbnN1cmUgdGhhdCBpZiBSZWFjdCBRdWVyeSBpcyB1c2VkIGFjcm9zc1xuLy8gZGlmZmVyZW50IGJ1bmRsZXMgb3IgbWljcm9mcm9udGVuZHMgdGhleSB3aWxsXG4vLyBhbGwgdXNlIHRoZSBzYW1lICoqaW5zdGFuY2UqKiBvZiBjb250ZXh0LCByZWdhcmRsZXNzXG4vLyBvZiBtb2R1bGUgc2NvcGluZy5cblxuZnVuY3Rpb24gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKSB7XG4gIGlmIChjb250ZXh0U2hhcmluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICghd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0KSB7XG4gICAgICB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQgPSBkZWZhdWx0Q29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRDb250ZXh0O1xufVxuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5Q2xpZW50ID0gZnVuY3Rpb24gdXNlUXVlcnlDbGllbnQoKSB7XG4gIHZhciBxdWVyeUNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoZ2V0UXVlcnlDbGllbnRDb250ZXh0KFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCkpKTtcblxuICBpZiAoIXF1ZXJ5Q2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBRdWVyeUNsaWVudCBzZXQsIHVzZSBRdWVyeUNsaWVudFByb3ZpZGVyIHRvIHNldCBvbmUnKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeUNsaWVudDtcbn07XG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSBmdW5jdGlvbiBRdWVyeUNsaWVudFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNsaWVudCA9IF9yZWYuY2xpZW50LFxuICAgICAgX3JlZiRjb250ZXh0U2hhcmluZyA9IF9yZWYuY29udGV4dFNoYXJpbmcsXG4gICAgICBjb250ZXh0U2hhcmluZyA9IF9yZWYkY29udGV4dFNoYXJpbmcgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjb250ZXh0U2hhcmluZyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBjbGllbnQubW91bnQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2xpZW50LnVubW91bnQoKTtcbiAgICB9O1xuICB9LCBbY2xpZW50XSk7XG4gIHZhciBDb250ZXh0ID0gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFNoYXJpbmdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjbGllbnRcbiAgfSwgY2hpbGRyZW4pKTtcbn07IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIENPTlRFWFRcblxuZnVuY3Rpb24gY3JlYXRlVmFsdWUoKSB7XG4gIHZhciBfaXNSZXNldCA9IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGNsZWFyUmVzZXQ6IGZ1bmN0aW9uIGNsZWFyUmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgX2lzUmVzZXQgPSB0cnVlO1xuICAgIH0sXG4gICAgaXNSZXNldDogZnVuY3Rpb24gaXNSZXNldCgpIHtcbiAgICAgIHJldHVybiBfaXNSZXNldDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChjcmVhdGVWYWx1ZSgpKTsgLy8gSE9PS1xuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCk7XG59OyAvLyBDT01QT05FTlRcblxuZXhwb3J0IHZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHZhbHVlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVZhbHVlKCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbik7XG59OyIsICJleHBvcnQgZnVuY3Rpb24gc2hvdWxkVGhyb3dFcnJvcihzdXNwZW5zZSwgX3VzZUVycm9yQm91bmRhcnksIHBhcmFtcykge1xuICAvLyBBbGxvdyB1c2VFcnJvckJvdW5kYXJ5IGZ1bmN0aW9uIHRvIG92ZXJyaWRlIHRocm93aW5nIGJlaGF2aW9yIG9uIGEgcGVyLWVycm9yIGJhc2lzXG4gIGlmICh0eXBlb2YgX3VzZUVycm9yQm91bmRhcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX3VzZUVycm9yQm91bmRhcnkuYXBwbHkodm9pZCAwLCBwYXJhbXMpO1xuICB9IC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgdG8gb3ZlcnJpZGUgc3VzcGVuc2UncyB0aHJvd2luZyBiZWhhdmlvclxuXG5cbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gX3VzZUVycm9yQm91bmRhcnk7IC8vIElmIHN1c3BlbnNlIGlzIGVuYWJsZWQgZGVmYXVsdCB0byB0aHJvd2luZyBlcnJvcnNcblxuICByZXR1cm4gISFzdXNwZW5zZTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgfSBmcm9tICcuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9RdWVyeUNsaWVudFByb3ZpZGVyJztcbmltcG9ydCB7IHNob3VsZFRocm93RXJyb3IgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiB1c2VCYXNlUXVlcnkob3B0aW9ucywgT2JzZXJ2ZXIpIHtcbiAgdmFyIG1vdW50ZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUgPSBSZWFjdC51c2VTdGF0ZSgwKSxcbiAgICAgIGZvcmNlVXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuXG4gIHZhciBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHZhciBlcnJvclJlc2V0Qm91bmRhcnkgPSB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpO1xuICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHF1ZXJ5Q2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTsgLy8gTWFrZSBzdXJlIHJlc3VsdHMgYXJlIG9wdGltaXN0aWNhbGx5IHNldCBpbiBmZXRjaGluZyBzdGF0ZSBiZWZvcmUgc3Vic2NyaWJpbmcgb3IgdXBkYXRpbmcgb3B0aW9uc1xuXG4gIGRlZmF1bHRlZE9wdGlvbnMub3B0aW1pc3RpY1Jlc3VsdHMgPSB0cnVlOyAvLyBJbmNsdWRlIGNhbGxiYWNrcyBpbiBiYXRjaCByZW5kZXJzXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcikge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25FcnJvciA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAvLyBBbHdheXMgc2V0IHN0YWxlIHRpbWUgd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50XG4gICAgLy8gZmV0Y2hpbmcgYWdhaW4gd2hlbiBkaXJlY3RseSBtb3VudGluZyBhZnRlciBzdXNwZW5kaW5nXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lID0gMTAwMDtcbiAgICB9IC8vIFNldCBjYWNoZSB0aW1lIHRvIDEgaWYgdGhlIG9wdGlvbiBoYXMgYmVlbiBzZXQgdG8gMFxuICAgIC8vIHdoZW4gdXNpbmcgc3VzcGVuc2UgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wIG9mIGZldGNoZXNcblxuXG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLmNhY2hlVGltZSA9IDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgfHwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5KSB7XG4gICAgLy8gUHJldmVudCByZXRyeWluZyBmYWlsZWQgcXVlcnkgaWYgdGhlIGVycm9yIGJvdW5kYXJ5IGhhcyBub3QgYmVlbiByZXNldCB5ZXRcbiAgICBpZiAoIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnlPbk1vdW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZlcihxdWVyeUNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH0pLFxuICAgICAgb2JzZXJ2ZXIgPSBfUmVhY3QkdXNlU3RhdGUyWzBdO1xuXG4gIHZhciByZXN1bHQgPSBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBvYnNlcnZlci5zdWJzY3JpYmUobm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChtb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZm9yY2VVcGRhdGUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geCArIDE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKTsgLy8gVXBkYXRlIHJlc3VsdCB0byBtYWtlIHN1cmUgd2UgZGlkIG5vdCBtaXNzIGFueSBxdWVyeSB1cGRhdGVzXG4gICAgLy8gYmV0d2VlbiBjcmVhdGluZyB0aGUgb2JzZXJ2ZXIgYW5kIHN1YnNjcmliaW5nIHRvIGl0LlxuXG4gICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9LCBbZXJyb3JSZXNldEJvdW5kYXJ5LCBvYnNlcnZlcl0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIERvIG5vdCBub3RpZnkgb24gdXBkYXRlcyBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gdGhlIG9wdGlvbnMgYmVjYXVzZVxuICAgIC8vIHRoZXNlIGNoYW5nZXMgc2hvdWxkIGFscmVhZHkgYmUgcmVmbGVjdGVkIGluIHRoZSBvcHRpbWlzdGljIHJlc3VsdC5cbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMsIHtcbiAgICAgIGxpc3RlbmVyczogZmFsc2VcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyXSk7IC8vIEhhbmRsZSBzdXNwZW5zZVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlICYmIHJlc3VsdC5pc0xvYWRpbmcpIHtcbiAgICB0aHJvdyBvYnNlcnZlci5mZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucykudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IpO1xuICAgIH0pO1xuICB9IC8vIEhhbmRsZSBlcnJvciBib3VuZGFyeVxuXG5cbiAgaWYgKHJlc3VsdC5pc0Vycm9yICYmICFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpICYmICFyZXN1bHQuaXNGZXRjaGluZyAmJiBzaG91bGRUaHJvd0Vycm9yKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UsIGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSwgW3Jlc3VsdC5lcnJvciwgb2JzZXJ2ZXIuZ2V0Q3VycmVudFF1ZXJ5KCldKSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfSAvLyBIYW5kbGUgcmVzdWx0IHByb3BlcnR5IHVzYWdlIHRyYWNraW5nXG5cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzID09PSAndHJhY2tlZCcpIHtcbiAgICByZXN1bHQgPSBvYnNlcnZlci50cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCAiaW1wb3J0IHsgUXVlcnlPYnNlcnZlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgcGFyc2VRdWVyeUFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gJy4vdXNlQmFzZVF1ZXJ5JzsgLy8gSE9PS1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICByZXR1cm4gdXNlQmFzZVF1ZXJ5KHBhcnNlZE9wdGlvbnMsIFF1ZXJ5T2JzZXJ2ZXIpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUJhZGdlLCBFdWlJY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0JyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBCcmVhZGNydW1iUHJlc2VudGF0aW9uKHByb3BzOiBCcmVhZGNydW1iUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShwcm9wcy5vbnRvbG9neUlkIHx8IFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKX19PlxuICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9e3Byb3BzLm9udG9sb2d5SWQgPyBcImJyZWFkY3J1bWIgY2xpY2thYmxlLWJyZWFkY3J1bWJcIiA6IFwiYnJlYWRjcnVtYlwifSBjb2xvcj17cHJvcHMuY29sb3JGaXJzdCB8fCBcInByaW1hcnlcIn0+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5vbnRvbG9neU5hbWUgPyBwcm9wcy5vbnRvbG9neU5hbWUudG9VcHBlckNhc2UoKSA6IFwiTm8gb250b2xvZ3kgbmFtZSBhdmFpbGFibGVcIn1cbiAgICAgICAgICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAmbmJzcDs8RXVpSWNvbiB0eXBlPVwiYXJyb3dSaWdodFwiLz4mbmJzcDtcbiAgICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9XCJicmVhZGNydW1iXCIgY29sb3I9e3Byb3BzLmNvbG9yU2Vjb25kIHx8IFwic3VjY2Vzc1wifT5cbiAgICAgICAgICAgICAgICB7cHJvcHMuc2hvcnRGb3JtID8gcHJvcHMuc2hvcnRGb3JtLnRvVXBwZXJDYXNlKCkgOiBcIk5vIHNob3J0IGZvcm0gYXZhaWxhYmxlXCJ9XG4gICAgICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7RGF0YUNvbnRlbnRXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIHBhcmFtZXRlciwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ2llc0RhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgZGF0YVVwZGF0ZWRBdFxuICB9ID0gdXNlUXVlcnk8T250b2xvZ2llcz4oXG4gICAgW1wib250b2xvZ2llc0RhdGFcIiwgYXBpLCBwYXJhbWV0ZXJdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEoXG4gICAgICAgIHByb3BzLnBhcmFtZXRlclxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aUNhcmRcbiAgICAgICAgdGl0bGU9XCJEYXRhIENvbnRlbnRcIlxuICAgICAgICBkZXNjcmlwdGlvbj17ZGF0YVVwZGF0ZWRBdCA/IGBVcGRhdGVkICR7bmV3IERhdGUoZGF0YVVwZGF0ZWRBdCkudG9Mb2NhbGVTdHJpbmcoKX1gIDogXCJcIn1cbiAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICA+XG4gICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICB7KGlzRXJyb3IpICYmIDxFdWlUZXh0Pk5vIGRhdGEgY29udGVudCBhdmFpbGFibGU8L0V1aVRleHQ+fVxuICAgICAgICAgIHtpc0xvYWRpbmdcbiAgICAgICAgICAgID8gPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgIDpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldFRvdGFsT250b2xvZ2llcygpLnRvTG9jYWxlU3RyaW5nKCl9IG9udG9sb2dpZXMgYW5kIHRlcm1pbm9sb2dpZXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5vbnRvbG9neSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtQ2xhc3NlcygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXROdW1DbGFzc2VzKCkudG9Mb2NhbGVTdHJpbmcoKX0gdGVybXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT50ZXJtIG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1Qcm9wZXJ0aWVzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKS50b0xvY2FsZVN0cmluZygpfSBwcm9wZXJ0aWVzPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+cHJvcGVydHkgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bUluZGl2aWR1YWxzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bUluZGl2aWR1YWxzKCkudG9Mb2NhbGVTdHJpbmcoKX0gaW5kaXZpZHVhbHM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5pbmRpdmlkdWFsIG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7LyogPGxpPlZlcnNpb24ge05PVF9BVkFJTEFCTEV9PC9saT4gKi99IHsvKiBUT0RPIGhvdyB0byBnZXQgQVBJIHZlcnNpb24/ICovfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvRXVpVGV4dD5cbiAgICAgIDwvRXVpQ2FyZD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YUNvbnRlbnQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRGF0YUNvbnRlbnRXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZERhdGFDb250ZW50V2lkZ2V0KHByb3BzOiBEYXRhQ29udGVudFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPERhdGFDb250ZW50V2lkZ2V0XG4gICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgRGF0YUNvbnRlbnRXaWRnZXQsIGNyZWF0ZURhdGFDb250ZW50IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpU3BhY2VyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSc7XG5pbXBvcnQge2FzQXJyYXksIGNhcGl0YWxpemUsIGRlQ2FtZWxDYXNlLCBkZVVuZGVyc2NvcmUsIGdldEVudGl0eVR5cGVOYW1lLCByYW5kb21TdHJpbmcsIGdldEVycm9yTWVzc2FnZVRvRGlzcGxheX0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge2dldENsYXNzRXhwcmVzc2lvbkpTWCwgZ2V0RW50aXR5TGlua0pTWCwgZ2V0UmVpZmllZEpTWCwgZ2V0VG9vbHRpcH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZ1wiO1xuaW1wb3J0IHtQcm9wZXJ0eSwgVGhpbmcsIENsYXNzLCBFbnRpdHksIEluZGl2aWR1YWx9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2lzQ2xhc3MsIGlzUHJvcGVydHksIGlzSW5kaXZpZHVhbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge0VudGl0eUluZm9XaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG5mdW5jdGlvbiBFbnRpdHlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCBzaG93QmFkZ2VzICwgdXNlTGVnYWN5LCBvbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IGVudGl0eSxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHksXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzRW50aXR5LFxuICAgICAgICBpc0Vycm9yOiBpc0Vycm9yRW50aXR5LFxuICAgICAgICBlcnJvcjogZXJyb3JFbnRpdHksXG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcImVudGl0eUluZm9cIixcbiAgICAgICAgICAgIHByb3BzXG4gICAgICAgIF0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGdldExhYmVsU2VjdGlvbihlbnRpdHk6IEVudGl0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7ZW50aXR5LmdldExhYmVsKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5MYWJlbDo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldExhYmVsKCl9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PEV1aVNwYWNlci8+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3lub255bXNTZWN0aW9uKGVudGl0eTogRW50aXR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+U3lub255bXM6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2VudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57ZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChzeW5vbnltKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e3N5bm9ueW0udmFsdWV9PntnZXRSZWlmaWVkSlNYKGVudGl0eSwgc3lub255bSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgZW50aXR5LmdldFN5bm9ueW1zKClbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRIYXNLZXlTZWN0aW9uKHRlcm06IENsYXNzKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGtleXMgPSB0ZXJtLmdldEhhc0tleSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7a2V5cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+SGFzIEtleTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7a2V5cy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2tleXMubWFwKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGtleXMsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBrZXlzWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3Vic2V0c1NlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgeyB0ZXJtLmdldFN1YnNldHMoKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+SW4gU3Vic2V0czo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGVybS5nZXRTdWJzZXRzKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPnt0ZXJtLmdldFN1YnNldHMoKS5tYXAoKHN1YnNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzdWJzZXQgKyByYW5kb21TdHJpbmcoKX0+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBzdWJzZXQsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgdGVybS5nZXRTdWJzZXRzKClbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYXJhY3RlcmlzdGljc1NlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNoYXJhY3RlcmlzdGljcyA9IHByb3BlcnR5LmdldFJkZlR5cGVzKCkubWFwKHR5cGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI0Z1bmN0aW9uYWxQcm9wZXJ0eSc6ICdGdW5jdGlvbmFsJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjSW52ZXJzZUZ1bmN0aW9uYWxQcm9wZXJ0eSc6ICdJbnZlcnNlIEZ1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUcmFuc2l0aXZlUHJvcGVydHknOiAnVHJhbnNpdGl2ZScsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1N5bW1ldHJpY1Byb3BlcnR5JzogJ1N5bW1ldHJpYycsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI0FzeW1tZXRyaWNQcm9wZXJ0eSc6ICdBc3ltbWV0cmljJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjUmVmbGV4aXZlUHJvcGVydHknOiAnUmVmbGV4aXZlJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjSXJyZWZsZXhpdmVQcm9wZXJ0eSc6ICdJcnJlZmxleGl2ZScsXG4gICAgICAgICAgICB9KVt0eXBlXTtcbiAgICAgICAgfSkuZmlsdGVyKCh0eXBlKSA9PiAhIXR5cGUpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNoYXJhY3RlcmlzdGljczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57Y2hhcmFjdGVyaXN0aWNzLm1hcCgoY2hhcmFjdGVyaXN0aWMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Y2hhcmFjdGVyaXN0aWN9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgpfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Y2hhcmFjdGVyaXN0aWNzWzBdfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREb21haW5TZWN0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkb21haW5zID0gcHJvcGVydHkuZ2V0RG9tYWluKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5Eb21haW46PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2RvbWFpbnMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntkb21haW5zLm1hcCgoZG9tYWlucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGRvbWFpbnMsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGRvbWFpbnNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSYW5nZVNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IHByb3BlcnR5LmdldFJhbmdlKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5SYW5nZTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cmFuZ2VzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57cmFuZ2VzLm1hcCgocmFuZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgcmFuZ2VzLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJbmRpdmlkdWFsUHJvcGVydHlBc3NlcnRpb25zU2VjdGlvbihpbmRpdmlkdWFsOiBJbmRpdmlkdWFsKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5SXJpcyA9IE9iamVjdC5rZXlzKGluZGl2aWR1YWwucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IG5lZ2F0aXZlUHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSk7XG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSk/LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSlcbiAgICAgICAgY29uc3QgZGF0YVByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTEpXG4gICAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uczogUmVhY3RFbGVtZW50W10gPSBbXTtcblxuICAgICAgICBmb3IoY29uc3QgaXJpIG9mIG9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VG9vbHRpcCgodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgdi52YWx1ZSA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoY29uc3QgaXJpIG9mIGRhdGFQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1tpcmldKTtcbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGlyaSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7PD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz59XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBrZXkgb2YgbmVnYXRpdmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpcmkgPSBrZXkuc2xpY2UoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGlyaSk7XG4gICAgICAgICAgICBjb25zdCBoYXNEYXRhUHJvcGVydHkgPSBsaW5rZWRFbnRpdHk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNba2V5XSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19Pm5vdDwvaT57XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc09iamVjdFByb3BlcnR5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRvb2x0aXAoKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdiA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWUgPyBKU09OLnN0cmluZ2lmeSh2LnZhbHVlKSA6IEpTT04uc3RyaW5naWZ5KHYpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YVByb3BlcnR5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlByb3BlcnR5IGFzc2VydGlvbnM6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e3Byb3BlcnR5QXNzZXJ0aW9ucy5tYXAoKHBhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e3BhfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3Byb3BlcnR5QXNzZXJ0aW9uc1swXX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHt0aGluZy5nZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpLm1hcCgoYW5ub0tleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbm5vcyA9IHRoaW5nLmdldEFubm90YXRpb25CeUlkKGFubm9LZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZihhbm5vcy5sZW5ndGggPT0gMCkgcmV0dXJuIDw+PC8+O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IGtleT17YW5ub0tleX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj57Y2FwaXRhbGl6ZShkZVVuZGVyc2NvcmUoZGVDYW1lbENhc2UodGhpbmcuZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChhbm5vS2V5KSkpKX06PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Fubm9zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57YW5ub3MubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm9zWzBdLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gKGVudGl0eVR5cGUgPyBjYXBpdGFsaXplKGdldEVudGl0eVR5cGVOYW1lKGVudGl0eVR5cGUpKSA6IChpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5KSA/IGNhcGl0YWxpemUoZW50aXR5LmdldFR5cGUoKSkgOiBcIlwiKSAgKyBcIiBJbmZvcm1hdGlvblwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIHtpc0xvYWRpbmdFbnRpdHkgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICAgICAgICB7aXNTdWNjZXNzRW50aXR5ICYmIGVudGl0eSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbFNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5KX1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzQ2xhc3MoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRTdWJzZXRzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0SGFzS2V5U2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNQcm9wZXJ0eShlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RG9tYWluU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UmFuZ2VTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0luZGl2aWR1YWwoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRJbmRpdmlkdWFsUHJvcGVydHlBc3NlcnRpb25zU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eSAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yRW50aXR5LCBcImluZm9ybWF0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUluZm8ocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdGl5SW5mb1dpZGdldChwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlJbmZvV2lkZ2V0LCBjcmVhdGVFbnRpdHlJbmZvIH07XG4iLCAiaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpSWNvblRpcCwgRXVpSWNvbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHthc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5LCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgXCIuLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge09uTmF2aWdhdGVzfSBmcm9tIFwiLi4vYXBwL3R5cGVzXCI7XG5cbmNvbnN0IERFRkFVTFRfU0hPV19CQURHRVMgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHRpcCh0ZXh0OiBzdHJpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpSWNvblRpcCB0eXBlPXtcImlJbkNpcmNsZVwifSBjb2xvcj17XCJzdWJkdWVkXCJ9IGNvbnRlbnQ9e3RleHR9Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogUmV0dXJucyBSZWlmaWVkIGF4aW9tcyBhcyBKU1ggZWxlbWVudCAoc2ltaWxhciB0byBNZXRhZGF0YVRvb2x0aXAgY29tcG9uZW50IGluIG9sczQgcHJvamVjdClcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIHN1cnJvdW5kaW5nIGVudGl0eSBvZiB0aGUgYXhpb21zIGFycmF5IChmb3IgZXZlbnR1YWwgbGFiZWwgZmV0Y2hpbmcpXG4gKiBAcGFyYW0gYXhpb21zRGljdCB0aGUgZW50aXRpZXMgYXhpb21zIGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkgUmVpZmllZDo6Z2V0TWV0YWRhdGEoKVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBheGlvbXMgaW4gSlNYIGZvcm1hdCB0byBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBheGlvbXNEaWN0OiBhbnkgfCBudWxsKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgYXhpb21zVGV4dCA9IE9iamVjdC5rZXlzKGF4aW9tc0RpY3QpXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShrZXkpIHx8IGtleTtcbiAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIFwiKlwiICsgYXhpb21zRGljdFtrZXldICsgXCIgKFwiICsgbGFiZWwgKyBcIilcIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJldHVybiBcIlwiO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKVxuXG4gICAgcmV0dXJuIGdldFRvb2x0aXAoYXhpb21zVGV4dCk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIGEgbGFiZWxlZCBlbnRpdHkgbGluayBhcyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBpbiB3aGljaCB0aGUgbGlua2VkIGVudGl0eSBleGlzdHNcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChleGlzdHMgYXMgcGFyYW0gYmVjYXVzZSBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgZW50aXR5IGhhcyBhIGxpbmtlZEVudGl0aWVzIGJsb2NrIGluIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gaXJpICAgdGhlIGVudGl0aWVzJyBpcmlcbiAqIEBwYXJhbSBzaG93QmFkZ2VzICAgIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBlbnRpdHkgbGluayBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBpcmk6IHN0cmluZywgc2hvd0JhZGdlcyA6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGxhYmVsID0gbGlua2VkRW50aXRpZXMuZ2V0TGFiZWxGb3JJcmkoaXJpKSB8fCBpcmkuc3BsaXQoXCIvXCIpLnBvcCgpIHx8IGlyaTtcbiAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQoaXJpKTtcbiAgICBjb25zdCBsb2NhbE9udG9sb2d5ID0gcGFyZW50RW50aXR5LmdldE9udG9sb2d5SWQoKTtcblxuICAgIC8vIHJlZmVyZW5jZSB0byBzZWxmOiBqdXN0IGRpc3BsYXkgbGFiZWwgYmVjYXVzZSB3ZSBhcmUgYWxyZWFkeSBvbiB0aGF0IHBhZ2VcbiAgICBpZiAocGFyZW50RW50aXR5LmdldFR5cGUoKSAhPT0gXCJvbnRvbG9neVwiICYmIGlyaSA9PT0gcGFyZW50RW50aXR5Py5nZXRJcmkoKSkge1xuICAgICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiaGlnaGxpZ2h0XCI+e3BhcmVudEVudGl0eS5nZXRMYWJlbCgpfTwvc3Bhbj5cbiAgICB9XG5cbiAgICBpZiAoIWxpbmtlZEVudGl0eSkge1xuICAgICAgICBpZihpcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PntsYWJlbH08L2E+O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU28gZmFyIG9ubHkga25vd24gb2NjdXJyZW5jZSBvZiB0aGlzIGJyYW5jaCBpcyBmb3Igb3dsI1RoaW5nXG4gICAgICAgICAgICByZXR1cm4gPHNwYW4+e2xhYmVsfTwvc3Bhbj47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdGhlckRlZmluZWRCeSA9IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXSA/IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXS5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtICE9PSBsb2NhbE9udG9sb2d5fSkgOiBbXTtcbiAgICBjb25zdCBsaW5rZWRFbnRpdHlUeXBlID0gbGlua2VkRW50aXR5W1widHlwZVwiXSA/IGluZmVyVHlwZUZyb21UeXBlQXJyYXkobGlua2VkRW50aXR5W1widHlwZVwiXSkgOiBwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpO1xuXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0bGFiLnpibWVkLmRlL2ttL3NlbWxvb2twL29sczQvLS9ibG9iL2Rldi9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9FbnRpdHlMaW5rLnRzeCBmb3Igb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgaWYob3RoZXJEZWZpbmVkQnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGUgZGVmaW5pbmcgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kob3RoZXJEZWZpbmVkQnlbMF0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX08L3NwYW4+fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkPiBsaW5raW5nIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kob3RoZXJEZWZpbmVkQnlbMF0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX08L3NwYW4+fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYob3RoZXJEZWZpbmVkQnkubGVuZ3RoID4gMSkge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiA8b250b2xvZ3lJZDE+IDxvbnRvbG9neUlkMj4gLi4uIDxvbnRvbG9neUlkTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5IGFuZCA8b250b2xvZ3lJZEk+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoYXQgZGVmaW5pbmcgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5tYXAoKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIga2V5PXtyYW5kb21TdHJpbmcoKX0gb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShlbGVtLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+ezxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e2VsZW0udG9VcHBlckNhc2UoKX08L3NwYW4+fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPjxJQ09OPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtcycgaXJpIGFuZCA8SUNPTj4gbGlua3MgdG8gZGlzYW1iaWd1YXRpb24gcGFnZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBrZXk9e3JhbmRvbVN0cmluZygpfSBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUobGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1wib250b2xvZ2llc1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KGxvY2FsT250b2xvZ3ksIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57bGFiZWx9PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPjxJQ09OPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtcycgaXJpIGFuZCA8SUNPTj4gbGlua3MgdG8gZGlzYW1iaWd1YXRpb24gcGFnZVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtpcml9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIGtleT17cmFuZG9tU3RyaW5nKCl9IG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZShsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJvbnRvbG9neVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IHJhdyBpcmlcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17bGlua2VkRW50aXR5W1widXJsXCJdIHx8IGlyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIG9uZSBlbGVtZW50IG9mIGEgc2VjdGlvbnMnIGxpc3QsIHBvc3NpYmx5IGluIGEgcmVjdXJzaXZlIGZhc2hpb24gYnkgcGFyc2luZyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGF0IHRoZSBjdXJyZW50UmVzcG9uc2VQYXRoIHRvIHNob3cgTWFuY2hlc3RlciBzeW50YXguXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IHBvc3Nlc3NpbmcgdGhlIHdob2xlIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBjdXJyZW50UmVzcG9uc2VQYXRoIHRoZSBjdXJyZW50IHN1Yi1vYmplY3Qgb2YgdGhlIHBhcmVudEVudGl0aWVzIHJlc3BvbnNlIG9iamVjdCBwYXJzZWQgYXMgY2xhc3MgZXhwcmVzc2lvblxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGNsYXNzIGV4cHJlc3Npb24gSlNYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBjdXJyZW50UmVzcG9uc2VQYXRoOiBhbnksIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGxldCByZXN1bHQgPSA8PjwvPjtcblxuICAgIC8vIG1lcmdlIGxpbmtlZEVudGl0aWVzIG9mIGN1cnJlbnRSZXNwb25zZVBhdGggaWYgY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyBpcyBub3QgdW5kZWZpbmVkXG4gICAgbGlua2VkRW50aXRpZXMgPSBsaW5rZWRFbnRpdGllcy5tZXJnZVdpdGgoY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyk7XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBjdXJyZW50UmVzcG9uc2VQYXRoLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50UmVzcG9uc2VQYXRoID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGgpICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0pICYmIGN1cnJlbnRSZXNwb25zZVBhdGhbXCJ0eXBlXCJdLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTEpIHsgLy8gVE9ETzogQ29uY2F0IHdpdGggZWxzZSBwYXJ0PyBTZWUgcmVsYXRlZEZyb20gKE1hbmNoZXN0ZXIgc3ludGF4IGRvZXMgbm90IGdldCBkaXNwbGF5ZWQsIGJ1dCBuZWl0aGVyIGluIG9sczQpXG4gICAgICAgIC8vIGN1cnJlbnQgcmVzcG9uc2UgcGF0aCBpcyByZWlmaWNhdGlvblxuICAgICAgICByZXN1bHQgPSBnZXRSZWlmaWVkSlNYKHBhcmVudEVudGl0eSwgUmVpZmllZC5mcm9tSnNvbjxhbnk+KGN1cnJlbnRSZXNwb25zZVBhdGgpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgfVxuICAgIGVsc2UgeyAvLyB0eXBlID09PSBcIm9iamVjdFwiXG4gICAgICAgIGNvbnN0IHNvbWVWYWx1ZXNGcm9tID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NvbWVWYWx1ZXNGcm9tXCJdO1xuICAgICAgICBjb25zdCBhbGxWYWx1ZXNGcm9tID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2FsbFZhbHVlc0Zyb21cIl07XG4gICAgICAgIGNvbnN0IGludGVyc2VjdGlvbk9mID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW50ZXJzZWN0aW9uT2ZcIl0pO1xuICAgICAgICBjb25zdCB1bmlvbk9mID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdW5pb25PZlwiXSk7XG4gICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc1ZhbHVlXCJdO1xuICAgICAgICBjb25zdCBtaW5DYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtaW5DYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWluUXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IG1heENhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heENhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtYXhRdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgY2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjY2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3F1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBoYXNTZWxmID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc1NlbGZcIl07XG4gICAgICAgIGNvbnN0IGNvbXBsZW1lbnRPZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNjb21wbGVtZW50T2ZcIl07XG4gICAgICAgIGNvbnN0IG9uZU9mID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25lT2ZcIl0pO1xuICAgICAgICBjb25zdCBpbnZlcnNlT2YgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdO1xuICAgICAgICBjb25zdCBvblByb3BlcnR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uUHJvcGVydHlcIl07XG4gICAgICAgIGNvbnN0IG9uRGF0YVR5cGUgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25EYXRhdHlwZVwiXTtcblxuICAgICAgICBpZihvbkRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uRGF0YVR5cGUsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgY29uc3Qgd2l0aFJlc3RyaWN0aW9ucyA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3dpdGhSZXN0cmljdGlvbnNcIl0pO1xuICAgICAgICAgICAgaWYod2l0aFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCg8Pls8Lz4pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCByZXN0cmljdGlvbiBvZiB3aXRoUmVzdHJpY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzRmlyc3QpIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBlbGVtZW50cy5wdXNoKDw+LCZuYnNwOzwvPik7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluRXhjbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5FeGNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkluY2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWluSW5jbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhFeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4SW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmVcIl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYobWluRXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmd0OyB7bWluRXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWluSW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmdlOyB7bWluSW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWF4RXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmx0OyB7bWF4RXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWF4SW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmxlOyB7bWF4SW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCg8Pl08Lz4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSA8PntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvPlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNvbWVWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gc29tZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShzb21lVmFsdWVzRnJvbSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWxsVmFsdWVzRnJvbSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG9ubHkgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoYWxsVmFsdWVzRnJvbSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW50ZXJzZWN0aW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBpbnRlcnNlY3Rpb25PZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT4gYW5kIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiB1bmlvbk9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPiBvciA8L2k+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IHZhbHVlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGhhc1ZhbHVlKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtaW5DYXJkaW5hbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1pbiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtaW5DYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF4Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBtYXggPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkobWF4Q2FyZGluYWxpdHkpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gZXhhY3RseSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShjYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzU2VsZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IFNlbGYgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoaGFzU2VsZilbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tcGxlbWVudE9mKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGk+bm90IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGNvbXBsZW1lbnRPZilbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob25lT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjMTIzO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2Ygb25lT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiM0NDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjMTI1O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnZlcnNlT2YpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+aW52ZXJzZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGludmVyc2VPZiwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzZWN0aW9uIGxpc3QgZWxlbWVudHMgc3BlY2lmaWVkIGF0IGBjdXJyZW50UmVzcG9uc2VQYXRoYFxuICogQHBhcmFtIHBhcmVudEVudGl0eVxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzXG4gKiBAcGFyYW0gYXJyYXlcbiAqIEBwYXJhbSBzaG93QmFkZ2VzXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25MaXN0SlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcywgYXJyYXk6IGFueVtdLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2FycmF5Lmxlbmd0aCA9PT0gMSA/IChcbiAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgcGFyZW50RW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGFycmF5WzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9wPlxuICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXRlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPn1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGxpbmtzIGludG8gdGV4dCAocG90ZW50aWFsbHkgd2l0aCBsYWJlbCBpbnN0ZWFkIG9mIGxpbmsgZGlzcGxheWVkIGlmIGxpbmsgZXhpc3RzIGFzIGtleSBpbnNpZGUgbGlua2VkRW50aXRpZXMpIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgSlNYIGVsZW1lbnRcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBpbnNlcnQgbGlua3MgaW50b1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGlmIHVuZGVmaW5lZCwgbm8gbGFiZWxzIGFyZSBpbmZlcnJlZClcbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5mdW5jdGlvbiBhZGRMaW5rc1RvVGV4dChwYXJlbnRFbnRpdHk6IFRoaW5nLCB0ZXh0OiBzdHJpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcyB8IHVuZGVmaW5lZCwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcykge1xuICAgIGNvbnN0IGxpbmtzVG9TcGxpY2U6IEFycmF5PHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IGxpbms6IFJlYWN0RWxlbWVudCB9PiA9XG4gICAgICAgIFtdO1xuXG4gICAgaWYobGlua2VkRW50aXRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBPYmplY3Qua2V5cyhsaW5rZWRFbnRpdGllcy5saW5rZWRFbnRpdGllcykpIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0ZXh0LmluZGV4T2YoZW50aXR5SWQsIDApO1xuICAgICAgICAgICAgICAgIG4gIT09IC0xO1xuICAgICAgICAgICAgICAgIG4gPSB0ZXh0LmluZGV4T2YoZW50aXR5SWQsIG4pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbixcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuICsgZW50aXR5SWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVudGl0eUlkLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBuICs9IGVudGl0eUlkLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybFJlID0gL1tBLXpdKzpcXC9cXC9bXlxcc10rL2c7XG4gICAgZm9yIChsZXQgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpOyBtYXRjaDsgbWF0Y2ggPSB1cmxSZS5leGVjKHRleHQpKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG1hdGNoWzBdO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZvdW5kIG1hdGNoIFwiICsgdXJsKTtcblxuICAgICAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICAgICAgZW5kOiBtYXRjaC5pbmRleCArIHVybC5sZW5ndGgsXG4gICAgICAgICAgICBsaW5rOiAoXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e3VybH0+e3VybH08L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlua3NUb1NwbGljZS5zb3J0KChhLGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTtcblxuICAgIHJlbW92ZU92ZXJsYXBwaW5nOiBmb3IgKGxldCBuID0gMDsgbiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyApIHtcbiAgICAgICAgZm9yIChsZXQgbjIgPSBuICsgMTsgbjIgPCBsaW5rc1RvU3BsaWNlLmxlbmd0aDsgKytuMikge1xuICAgICAgICAgICAgY29uc3Qgc3BsaWNlQSA9IGxpbmtzVG9TcGxpY2Vbbl07XG4gICAgICAgICAgICBjb25zdCBzcGxpY2VCID0gbGlua3NUb1NwbGljZVtuMl07XG5cbiAgICAgICAgICAgIGlmIChzcGxpY2VBID09PSBzcGxpY2VCKSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gVGhlIHNwbGljZXMgb3ZlcmxhcCBpZiBuZWl0aGVyIGVuZHMgYmVmb3JlIHRoZSBvdGhlciBzdGFydHNcbiAgICAgICAgICAgIGlmIChzcGxpY2VBLmVuZCA+PSBzcGxpY2VCLnN0YXJ0ICYmIHNwbGljZUIuZW5kID49IHNwbGljZUEuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlJlbW92aW5nIG92ZXJsYXBwaW5nXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBzaG9ydGVyIGxpbmsgb2YgYm90aFxuICAgICAgICAgICAgICAgIGlmKHNwbGljZUEuZW5kIC0gc3BsaWNlQS5zdGFydCA8IHNwbGljZUIuZW5kIC0gc3BsaWNlQi5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnNwbGljZShuLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4yLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWUgcmVtb3ZlT3ZlcmxhcHBpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgKytuO1xuICAgIH1cblxuICAgIGlmIChsaW5rc1RvU3BsaWNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDw+e3RleHR9PC8+O1xuXG4gICAgY29uc3QgcmVzOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBuID0gMDtcblxuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rc1RvU3BsaWNlKSB7XG4gICAgICAgIHJlcy5wdXNoKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAge3RleHQuc3Vic3RyaW5nKG4sIGxpbmsuc3RhcnQpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgICAgICByZXMucHVzaChsaW5rLmxpbmspO1xuICAgICAgICBuID0gbGluay5lbmQ7XG4gICAgfVxuICAgIHJlcy5wdXNoKFxuICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57dGV4dC5zbGljZShuKX08L3NwYW4+XG4gICAgKTtcblxuICAgIHJldHVybiA8PntyZXN9PC8+O1xufVxuXG5cbi8qKlxuICogUmVuZGVycyBhIGdpdmVuIFJlaWZpZWRcbiAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0aGUgUmVpZmllZCBleGlzdHMgaW5cbiAqIEBwYXJhbSByZWlmaWVkIHRoZSBSZWlmaWVkXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlaWZpZWRKU1goZW50aXR5OiBUaGluZywgcmVpZmllZDogUmVpZmllZDxhbnk+LCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKTogUmVhY3RFbGVtZW50IHtcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUpTWCh2YWx1ZTogUmVpZmllZDxhbnk+KTogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKTtcblxuICAgICAgICAvLyBsaW5rZWRFbnRpdGllcyBub3QgZXhpc3RlbnQgb24gZW50aXR5ICgtPiBwcm9iYWJseSBsZWdhY3kgYXBpIHZlcnNpb24pXG4gICAgICAgIGlmKE9iamVjdC5rZXlzKGxpbmtlZEVudGl0aWVzLmxpbmtlZEVudGl0aWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoZW50aXR5LCB2YWx1ZS52YWx1ZS50b1N0cmluZygpLCB1bmRlZmluZWQsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBub3QgaGFwcGVuLCBwcm92ZSB0aGF0IHRoaXMgaXMgbmV2ZXIgdGhlIGNhc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldCh2YWx1ZS52YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChsaW5rZWRFbnRpdHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RW50aXR5TGlua0pTWChlbnRpdHksIGxpbmtlZEVudGl0aWVzLCB2YWx1ZS52YWx1ZSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZihlbnRpdHkuZ2V0VHlwZSgpID09IFwib250b2xvZ3lcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDw+e0pTT04uc3RyaW5naWZ5KHZhbHVlLnZhbHVlKX08Lz47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRMaW5rc1RvVGV4dChlbnRpdHksIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCksIGxpbmtlZEVudGl0aWVzLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtnZXRWYWx1ZUpTWChyZWlmaWVkKX1cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAge3JlaWZpZWQuaGFzTWV0YWRhdGEoKSAmJiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChlbnRpdHksIHJlaWZpZWQuZ2V0TWV0YWRhdGEoKSl9XG4gICAgICAgIDwvPlxuICAgICk7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQnV0dG9uLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtKc29uQXBpV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcblxuZnVuY3Rpb24gSnNvbkFwaVdpZGdldChwcm9wczogSnNvbkFwaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpUXVlcnksIGJ1dHRvblRleHQsIGJ1dHRvblNpemUgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPEV1aUJ1dHRvbiBocmVmPXthcGlRdWVyeX0gdGFyZ2V0PVwiX2JsYW5rXCIgc2l6ZT17YnV0dG9uU2l6ZSB8fCBcIm1cIn0+e2J1dHRvblRleHR9PC9FdWlCdXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUpzb25BcGkocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSnNvbkFwaVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSnNvbkFwaVdpZGdldChwcm9wczogSnNvbkFwaVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPEpzb25BcGlXaWRnZXRcbiAgICAgICAgICAgICAgYXBpUXVlcnk9e3Byb3BzLmFwaVF1ZXJ5fVxuICAgICAgICAgICAgICBidXR0b25UZXh0PXtwcm9wcy5idXR0b25UZXh0fVxuICAgICAgICAgICAgICBidXR0b25TaXplPXtwcm9wcy5idXR0b25TaXplfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgSnNvbkFwaVdpZGdldCwgY3JlYXRlSnNvbkFwaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb24sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7QnJlYWRjcnVtYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuXG5mdW5jdGlvbiBCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIG9udG9sb2d5SWQsIGlyaSwgZW50aXR5VHlwZSwgY29sb3JGaXJzdCwgY29sb3JTZWNvbmQsIHBhcmFtZXRlciAsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvT250b2xvZ3l9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcImJyZWFkY3J1bWJcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgJiYgcHJvcHMub250b2xvZ3lJZCkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kocHJvcHMub250b2xvZ3lJZCB8fCBcIlwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCl9fT5cbiAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPXtwcm9wcy5vbnRvbG9neUlkID8gXCJicmVhZGNydW1iIGNsaWNrYWJsZS1icmVhZGNydW1iXCIgOiBcImJyZWFkY3J1bWJcIn0gY29sb3I9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkKSA/IFwicHJpbWFyeVwiIDogXCJ3YXJuaW5nXCIpfT57cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9Lz59PC9FdWlCYWRnZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICZuYnNwOzxFdWlJY29uIHR5cGU9XCJhcnJvd1JpZ2h0XCIvPiZuYnNwO1xuICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17Y29sb3JTZWNvbmQgfHwgXCJ3YXJuaW5nXCJ9Pns8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9Lz59PC9FdWlCYWRnZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgIHNob3J0Rm9ybT17ZGF0YS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IGRhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgIGNvbG9yRmlyc3Q9e2NvbG9yRmlyc3R9XG4gICAgICAgICAgY29sb3JTZWNvbmQ9e2NvbG9yU2Vjb25kfVxuICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXtwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpLnRvVXBwZXJDYXNlKCkpIHx8IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neVwiKX1cbiAgICAgICAgICAgICAgc2hvcnRGb3JtPXsoZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpKSA/IGRhdGEuZ2V0U2hvcnRGb3JtKCkudG9VcHBlckNhc2UoKSA6IFwiXCJ9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgKGRhdGEgPyBkYXRhLmdldE9udG9sb2d5SWQoKSA6IFwiXCIpfVxuICAgICAgICAgICAgICBjb2xvckZpcnN0PXtjb2xvckZpcnN0IHx8ICgocHJvcHMub250b2xvZ3lJZCB8fCAoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSkpID8gXCJwcmltYXJ5XCIgOiBcImRhbmdlclwiKX1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e2NvbG9yU2Vjb25kIHx8ICgoZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpKSA/IFwic3VjY2Vzc1wiIDogXCJkYW5nZXJcIil9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAvPlxuICAgICAgfVxuICAgICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFkY3J1bWIocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86KCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRCcmVhZGNydW1iV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8QnJlYWRjcnVtYldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e3Byb3BzLmNvbG9yRmlyc3R9XG4gICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtwcm9wcy5jb2xvclNlY29uZH1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBjcmVhdGVCcmVhZGNydW1iIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RGVzY3JpcHRpb25XaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgTk9fREVTQ1JJUFRJT04gPSBcIk5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS5cIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIG9udG9sb2d5SWQsIGlyaSwgZGVzY1RleHQsIHRoaW5nVHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiZGVzY3JpcHRpb25cIiwgYXBpLCBwYXJhbWV0ZXIsIHRoaW5nVHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGhpbmdPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb24gZGVzY3JpcHRpb249e2RhdGEuZ2V0RGVzY3JpcHRpb24oKSB8fCBOT19ERVNDUklQVElPTn0gZGVzY1RleHQ9e2Rlc2NUZXh0fSB7Li4ucmVzdH0vPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXNjcmlwdGlvblwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZXNjcmlwdGlvbihwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86KCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGVzY3JpcHRpb25XaWRnZXRcbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBkZXNjVGV4dD17cHJvcHMuZGVzY1RleHR9XG4gICAgICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IERlc2NyaXB0aW9uV2lkZ2V0LCBjcmVhdGVEZXNjcmlwdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25QcmVzZW50YXRpb24ocHJvcHM6IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgY29uc3Qge2Rlc2NUZXh0LCBkZXNjcmlwdGlvbiwgLi4ucmVzdH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+e2Rlc2NUZXh0IHx8IGRlc2NyaXB0aW9ufTwvRXVpVGV4dD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUZsZXhJdGVtLCBFdWlMaW5rLCBFdWlQcm92aWRlciwgRXVpQnV0dG9uSWNvbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtJcmlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtpc0V1aUxpbmtDb2xvciwgaXNIZXhDb2xvciwgaXNSZ2JDb2xvcn0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5cbmZ1bmN0aW9uIElyaVdpZGdldChwcm9wczogSXJpV2lkZ2V0UHJvcHMpIHsgICAgICAgXG4gIGNvbnN0IHsgaXJpLCBpcmlUZXh0LCBjb2xvciwgZXh0ZXJuYWxJY29uLCB1cmxQcmVmaXgsIGNvcHlCdXR0b24gfSA9IHByb3BzO1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB1cmxQcmVmaXhFeGlzdCA9IHR5cGVvZih1cmxQcmVmaXgpICE9PSBcInVuZGVmaW5lZFwiICYmIHVybFByZWZpeCAhPT0gXCJcIiA/IHRydWUgOiBmYWxzZTtcbiAgY29uc3QgaXJpVXJsID0gdXJsUHJlZml4RXhpc3QgPyB1cmxQcmVmaXggKyBlbmNvZGVVUklDb21wb25lbnQoaXJpKSA6IGlyaTtcblxuICBjb25zdCBDb3B5TGlua0J1dHRvbiA9ICgpID0+IHtcbiAgICBpZiAoIWNvcGllZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUJ1dHRvbkljb24gXG4gICAgICAgICAgZGlzcGxheT1cImJhc2VcIlxuICAgICAgICAgIGljb25UeXBlPVwiY29weVwiICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICBrZXk9e1wiY29weS1idG5cIn1cbiAgICAgICAgICBzdHlsZT17e21hcmdpbkxlZnQ6IFwiNXB4XCIsIGNvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gXG4gICAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpTGlua0NvbG9yKGNvbG9yKSA/IGNvbG9yIDogdW5kZWZpbmVkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGlyaVVybCk7XG4gICAgICAgICAgICBzZXRDb3BpZWQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtzZXRDb3BpZWQoZmFsc2UpO30sIDIwMDApOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICB9fVxuICAgICAgICAgID4gICAgICAgICAgICBcbiAgICAgICAgPC9FdWlCdXR0b25JY29uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxFdWlCdXR0b25JY29uIFxuICAgICAgICBzdHlsZT17e21hcmdpbkxlZnQ6IFwiNXB4XCIsIGNvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gICBcbiAgICAgICAgZGlzcGxheT1cImJhc2VcIiBcbiAgICAgICAgaWNvblR5cGU9XCJjaGVja1wiIFxuICAgICAgICBrZXk9e1wiY29weS1idG5cIn1cbiAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpTGlua0NvbG9yKGNvbG9yKSA/IGNvbG9yIDogdW5kZWZpbmVkfVxuICAgICAgICA+XG4gICAgICA8L0V1aUJ1dHRvbkljb24+XG4gICAgKTsgICAgXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgPGRpdj5cbiAgICAgICAgPEV1aUxpbmsgXG4gICAgICAgICAgaHJlZj17aXJpVXJsfSBcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcbiAgICAgICAgICBzdHlsZT17e2NvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gXG4gICAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpTGlua0NvbG9yKGNvbG9yKSA/IGNvbG9yIDogdW5kZWZpbmVkfVxuICAgICAgICAgIGV4dGVybmFsPXtleHRlcm5hbEljb259XG4gICAgICAgICAgPlxuICAgICAgICAgIHtpcmlUZXh0ID8gaXJpVGV4dCA6IGlyaX0gICAgICAgICAgXG4gICAgICAgIDwvRXVpTGluaz5cbiAgICAgICAge2NvcHlCdXR0b24gJiYgPENvcHlMaW5rQnV0dG9uIC8+fVxuICAgICAgPC9kaXY+XG4gICAgPC9FdWlGbGV4SXRlbT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSXJpKHByb3BzOiBJcmlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7ICAgICAgIFxuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSXJpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTsgICAgXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBpcmlUZXh0PXtwcm9wcy5pcmlUZXh0fVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsSWNvbj17cHJvcHMuZXh0ZXJuYWxJY29ufVxuICAgICAgICAgICAgICAgICAgICB1cmxQcmVmaXg9e3Byb3BzLnVybFByZWZpeH1cbiAgICAgICAgICAgICAgICAgICAgY29weUJ1dHRvbj17cHJvcHMuY29weUJ1dHRvbn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgSXJpV2lkZ2V0LCBjcmVhdGVJcmkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1RhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWUsIGlzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxFbnRpdHk+KFxuICAgIFtcInRhYmRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGFiUHJlc2VudGF0aW9uIHsuLi5yZXN0fVxuICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICBlbnRpdHlUeXBlPXtkYXRhLmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXNjcmlwdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDw+XG4gICAgICAgICAge2lzRW50aXR5KGRhdGEpID8gcmVuZGVyKGRhdGEpIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRhYihwcm9wczogVGFiV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxUYWJXaWRnZXRcbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJXaWRnZXQsIGNyZWF0ZVRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUZsZXhJdGVtLCBFdWlUYWJiZWRDb250ZW50IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5V2lkZ2V0T0xTIH0gZnJvbSBcIi4vSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHksIGlzSW5kaXZpZHVhbCwgaXNQcm9wZXJ0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZCB9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge1RhYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFRhYlByZXNlbnRhdGlvbihwcm9wczogVGFiUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICAgIDxFdWlUYWJiZWRDb250ZW50IHNpemU9XCJzXCIgdGFicz17XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpZDogXCJ0YWIxXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJBbHRlcm5hdGl2ZSBOYW1lc1wiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG92ZXJmbG93OiBcImF1dG9cIn19PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMudXNlTGVnYWN5ID09IHVuZGVmaW5lZCB8fCBwcm9wcy51c2VMZWdhY3lcbiAgICAgICAgICAgICAgICAgICAgICA/IDxIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA6IDxIaWVyYXJjaHlXaWRnZXRPTFNcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGlkOiBcInRhYjJcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZXJhcmNoeVwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIGNyb3NzcmVmcz17UmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIH0pfSAvPixcbiAgICAgICAgICAgICAgICBpZDogXCJ0YWIzXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJDcm9zcyByZWZlcmVuY2VzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0gLz5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNFbnRpdHkocHJvcHMuZGF0YSkgfHwgaXNQcm9wZXJ0eShwcm9wcy5kYXRhKSB8fCBpc0luZGl2aWR1YWwocHJvcHMuZGF0YSkgPyByZW5kZXIocHJvcHMuZGF0YSkgOiBudWxsfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQge0V1aVBhbmVsLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFwiQHpibWVkL29scy10cmVldmlld1wiXG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90cmVlc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXRPTFNQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgSGllcmFyY2h5V2lkZ2V0T0xTID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcykgPT4ge1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdHJlZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0cmVlX2NvbnRhaW5lcicpO1xuICAgICh3aW5kb3cgYXMgYW55KVtcIk9MU1dpZGdldHNcIl0uY3JlYXRlRW50aXR5VHJlZSh7XG4gICAgICBpcmk6IHByb3BzLmlyaSxcbiAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICBhcGlVcmw6IHByb3BzLmFwaS5zdWJzdHJpbmcoMCwgcHJvcHMuYXBpLmxhc3RJbmRleE9mKFwiYXBpXCIpKSxcbiAgICAgIGVudGl0eVR5cGU6IChwcm9wcy5lbnRpdHlUeXBlID8gcGx1cmFsaXplVHlwZShwcm9wcy5lbnRpdHlUeXBlLCBmYWxzZSkgOiB1bmRlZmluZWQpIHx8IFwiZW50aXRpZXNcIixcbiAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5ID8gcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5IDogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgbmF2aWdhdGUgdG8gZW50aXR5IHdpdGggb250b2xvZ3lJZDogJHtvbnRvbG9neUlkfSwgZW50aXR5VHlwZTogJHtlbnRpdHlUeXBlfSwgaXJpOiAke2lyaX1gLCk7XG4gICAgICB9LFxuICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5ID8gcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgOiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBuYXZpZ2F0ZSB0byBvbnRvbG9neSB3aXRoIG9udG9sb2d5SWQ6ICR7b250b2xvZ3lJZH0sIGVudGl0eVR5cGU6ICR7ZW50aXR5VHlwZX0sIGlyaTogJHtpcml9YCwpO1xuICAgICAgfVxuICAgIH0sIHRyZWVDb250YWluZXIpO1xuICB9LCBbcHJvcHMuYXBpLCBwcm9wcy5pcmksIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIFwiSGllcmFyY2h5V2lkZ2V0T0xTXCJdKTtcblxuICByZXR1cm4gKFxuICAgIC8vbWluV2lkdGggcmVxdWlyZWQgd29ya2Fyb3VuZCB1bnRpbCBvdmVybGFwcGluZyBjaGVja2JveGVzIGFyZSBmaXhlZCBpbiBvbHM0LXdpZGdldHNcbiAgICA8RXVpUGFuZWwgc3R5bGU9e3ttaW5XaWR0aDogXCI2MDBweFwifX0+XG4gICAgICA8ZGl2IGlkPVwidHJlZV9jb250YWluZXJcIi8+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeU9MUyhwcm9wczogSGllcmFyY2h5V2lkZ2V0T0xTUHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldE9MUyhwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0T0xTKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXRPTFNcbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgSGllcmFyY2h5V2lkZ2V0T0xTLCBjcmVhdGVIaWVyYXJjaHlPTFMgfTtcbiIsICIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj02MDEwMyxwPTYwMTA2O2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7ZXhwb3J0cy5TdHJpY3RNb2RlPTYwMTA4O2V4cG9ydHMuUHJvZmlsZXI9NjAxMTQ7dmFyIHE9NjAxMDkscj02MDExMCx0PTYwMTEyO2V4cG9ydHMuU3VzcGVuc2U9NjAxMTM7dmFyIHU9NjAxMTUsdj02MDExNjtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB3PVN5bWJvbC5mb3I7bj13KFwicmVhY3QuZWxlbWVudFwiKTtwPXcoXCJyZWFjdC5wb3J0YWxcIik7ZXhwb3J0cy5GcmFnbWVudD13KFwicmVhY3QuZnJhZ21lbnRcIik7ZXhwb3J0cy5TdHJpY3RNb2RlPXcoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtleHBvcnRzLlByb2ZpbGVyPXcoXCJyZWFjdC5wcm9maWxlclwiKTtxPXcoXCJyZWFjdC5wcm92aWRlclwiKTtyPXcoXCJyZWFjdC5jb250ZXh0XCIpO3Q9dyhcInJlYWN0LmZvcndhcmRfcmVmXCIpO2V4cG9ydHMuU3VzcGVuc2U9dyhcInJlYWN0LnN1c3BlbnNlXCIpO3U9dyhcInJlYWN0Lm1lbW9cIik7dj13KFwicmVhY3QubGF6eVwiKX12YXIgeD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiB5KGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT14JiZhW3hdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9ZnVuY3Rpb24geihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBBPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxCPXt9O2Z1bmN0aW9uIEMoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX1DLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0MucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcih6KDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gRShhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfXZhciBGPUUucHJvdG90eXBlPW5ldyBEO0YuY29uc3RydWN0b3I9RTtsKEYsQy5wcm90b3R5cGUpO0YuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEc9e2N1cnJlbnQ6bnVsbH0sSD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIEooYSxiLGMpe3ZhciBlLGQ9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSC5jYWxsKGIsZSkmJiFJLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWRbZV0mJihkW2VdPWdbZV0pO3JldHVybnskJHR5cGVvZjpuLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpkLF9vd25lcjpHLmN1cnJlbnR9fVxuZnVuY3Rpb24gSyhhLGIpe3JldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTChhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bn1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIE09L1xcLysvZztmdW5jdGlvbiBOKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gTyhhLGIsYyxlLGQpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBuOmNhc2UgcDpoPSEwfX1pZihoKXJldHVybiBoPWEsZD1kKGgpLGE9XCJcIj09PWU/XCIuXCIrTihoLDApOmUsQXJyYXkuaXNBcnJheShkKT8oYz1cIlwiLG51bGwhPWEmJihjPWEucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSxPKGQsYixjLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9ZCYmKEwoZCkmJihkPUsoZCxjKyghZC5rZXl8fGgmJmgua2V5PT09ZC5rZXk/XCJcIjooXCJcIitkLmtleSkucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGQpKSwxO2g9MDtlPVwiXCI9PT1lP1wiLlwiOmUrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGc9XG4wO2c8YS5sZW5ndGg7ZysrKXtrPWFbZ107dmFyIGY9ZStOKGssZyk7aCs9TyhrLGIsYyxmLGQpfWVsc2UgaWYoZj15KGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1lK04oayxnKyspLGgrPU8oayxiLGMsZixkKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9XCJcIithLEVycm9yKHooMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO3JldHVybiBofWZ1bmN0aW9uIFAoYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGU9W10sZD0wO08oYSxlLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGMsYSxkKyspfSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBRKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O312YXIgUj17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBTKCl7dmFyIGE9Ui5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKHooMzIxKSk7cmV0dXJuIGF9dmFyIFQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpHLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bH07XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6UCxmb3JFYWNoOmZ1bmN0aW9uKGEsYixjKXtQKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYyl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UChhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTChhKSl0aHJvdyBFcnJvcih6KDE0MykpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9QztleHBvcnRzLlB1cmVDb21wb25lbnQ9RTtleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVQ7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoeigyNjcsYSkpO3ZhciBlPWwoe30sYS5wcm9wcyksZD1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Ry5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGQ9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilILmNhbGwoYixmKSYmIUkuaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO2Zvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsXG5rZXk6ZCxyZWY6ayxwcm9wczplLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6cixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOnEsX2NvbnRleHQ6YX07cmV0dXJuIGEuQ29uc3VtZXI9YX07ZXhwb3J0cy5jcmVhdGVFbGVtZW50PUo7ZXhwb3J0cy5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGEpe3ZhciBiPUouYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifTtleHBvcnRzLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtleHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnQscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PUw7XG5leHBvcnRzLmxhenk9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDphfSxfaW5pdDpRfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmLGcsaCxrO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3cpe3ZhciBsPXBlcmZvcm1hbmNlO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHA9RGF0ZSxxPXAubm93KCk7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcC5ub3coKS1xfX1cbmlmKFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciB0PW51bGwsdT1udWxsLHc9ZnVuY3Rpb24oKXtpZihudWxsIT09dCl0cnl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTt0KCEwLGEpO3Q9bnVsbH1jYXRjaChiKXt0aHJvdyBzZXRUaW1lb3V0KHcsMCksYjt9fTtmPWZ1bmN0aW9uKGEpe251bGwhPT10P3NldFRpbWVvdXQoZiwwLGEpOih0PWEsc2V0VGltZW91dCh3LDApKX07Zz1mdW5jdGlvbihhLGIpe3U9c2V0VGltZW91dChhLGIpfTtoPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpfTtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2s9ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbigpe319ZWxzZXt2YXIgeD13aW5kb3cuc2V0VGltZW91dCx5PXdpbmRvdy5jbGVhclRpbWVvdXQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjb25zb2xlKXt2YXIgej1cbndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB6JiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiKX12YXIgQT0hMSxCPW51bGwsQz0tMSxEPTUsRT0wO2V4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKT49XG5FfTtrPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGEpezA+YXx8MTI1PGE/Y29uc29sZS5lcnJvcihcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiKTpEPTA8YT9NYXRoLmZsb29yKDFFMy9hKTo1fTt2YXIgRj1uZXcgTWVzc2FnZUNoYW5uZWwsRz1GLnBvcnQyO0YucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7aWYobnVsbCE9PUIpe3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7RT1hK0Q7dHJ5e0IoITAsYSk/Ry5wb3N0TWVzc2FnZShudWxsKTooQT0hMSxCPW51bGwpfWNhdGNoKGIpe3Rocm93IEcucG9zdE1lc3NhZ2UobnVsbCksYjt9fWVsc2UgQT0hMX07Zj1mdW5jdGlvbihhKXtCPWE7QXx8KEE9ITAsRy5wb3N0TWVzc2FnZShudWxsKSl9O2c9ZnVuY3Rpb24oYSxiKXtDPVxueChmdW5jdGlvbigpe2EoZXhwb3J0cy51bnN0YWJsZV9ub3coKSl9LGIpfTtoPWZ1bmN0aW9uKCl7eShDKTtDPS0xfX1mdW5jdGlvbiBIKGEsYil7dmFyIGM9YS5sZW5ndGg7YS5wdXNoKGIpO2E6Zm9yKDs7KXt2YXIgZD1jLTE+Pj4xLGU9YVtkXTtpZih2b2lkIDAhPT1lJiYwPEkoZSxiKSlhW2RdPWIsYVtjXT1lLGM9ZDtlbHNlIGJyZWFrIGF9fWZ1bmN0aW9uIEooYSl7YT1hWzBdO3JldHVybiB2b2lkIDA9PT1hP251bGw6YX1cbmZ1bmN0aW9uIEsoYSl7dmFyIGI9YVswXTtpZih2b2lkIDAhPT1iKXt2YXIgYz1hLnBvcCgpO2lmKGMhPT1iKXthWzBdPWM7YTpmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTspe3ZhciBtPTIqKGQrMSktMSxuPWFbbV0sdj1tKzEscj1hW3ZdO2lmKHZvaWQgMCE9PW4mJjA+SShuLGMpKXZvaWQgMCE9PXImJjA+SShyLG4pPyhhW2RdPXIsYVt2XT1jLGQ9dik6KGFbZF09bixhW21dPWMsZD1tKTtlbHNlIGlmKHZvaWQgMCE9PXImJjA+SShyLGMpKWFbZF09cixhW3ZdPWMsZD12O2Vsc2UgYnJlYWsgYX19cmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSShhLGIpe3ZhciBjPWEuc29ydEluZGV4LWIuc29ydEluZGV4O3JldHVybiAwIT09Yz9jOmEuaWQtYi5pZH12YXIgTD1bXSxNPVtdLE49MSxPPW51bGwsUD0zLFE9ITEsUj0hMSxTPSExO1xuZnVuY3Rpb24gVChhKXtmb3IodmFyIGI9SihNKTtudWxsIT09Yjspe2lmKG51bGw9PT1iLmNhbGxiYWNrKUsoTSk7ZWxzZSBpZihiLnN0YXJ0VGltZTw9YSlLKE0pLGIuc29ydEluZGV4PWIuZXhwaXJhdGlvblRpbWUsSChMLGIpO2Vsc2UgYnJlYWs7Yj1KKE0pfX1mdW5jdGlvbiBVKGEpe1M9ITE7VChhKTtpZighUilpZihudWxsIT09SihMKSlSPSEwLGYoVik7ZWxzZXt2YXIgYj1KKE0pO251bGwhPT1iJiZnKFUsYi5zdGFydFRpbWUtYSl9fVxuZnVuY3Rpb24gVihhLGIpe1I9ITE7UyYmKFM9ITEsaCgpKTtRPSEwO3ZhciBjPVA7dHJ5e1QoYik7Zm9yKE89SihMKTtudWxsIT09TyYmKCEoTy5leHBpcmF0aW9uVGltZT5iKXx8YSYmIWV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSk7KXt2YXIgZD1PLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXtPLmNhbGxiYWNrPW51bGw7UD1PLnByaW9yaXR5TGV2ZWw7dmFyIGU9ZChPLmV4cGlyYXRpb25UaW1lPD1iKTtiPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGU/Ty5jYWxsYmFjaz1lOk89PT1KKEwpJiZLKEwpO1QoYil9ZWxzZSBLKEwpO089SihMKX1pZihudWxsIT09Tyl2YXIgbT0hMDtlbHNle3ZhciBuPUooTSk7bnVsbCE9PW4mJmcoVSxuLnN0YXJ0VGltZS1iKTttPSExfXJldHVybiBtfWZpbmFsbHl7Tz1udWxsLFA9YyxRPSExfX12YXIgVz1rO2V4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTE7ZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eT00O2V4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MztleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsO2V4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtleHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGEpe2EuY2FsbGJhY2s9bnVsbH07ZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe1J8fFF8fChSPSEwLGYoVikpfTtleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIFB9O2V4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gSihMKX07XG5leHBvcnRzLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oYSl7c3dpdGNoKFApe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBiPTM7YnJlYWs7ZGVmYXVsdDpiPVB9dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtQPWN9fTtleHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludD1XO2V4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPTN9dmFyIGM9UDtQPWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXtQPWN9fTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6TisrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsSChNLGEpLG51bGw9PT1KKEwpJiZhPT09SihNKSYmKFM/aCgpOlM9ITAsZyhVLGMtZCkpKTooYS5zb3J0SW5kZXg9ZSxIKEwsYSksUnx8UXx8KFI9ITAsZihWKSkpO3JldHVybiBhfTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPVA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e1A9Y319fTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxtPXJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpLHI9cmVxdWlyZShcInNjaGVkdWxlclwiKTtmdW5jdGlvbiB5KGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWlmKCFhYSl0aHJvdyBFcnJvcih5KDIyNykpO3ZhciBiYT1uZXcgU2V0LGNhPXt9O2Z1bmN0aW9uIGRhKGEsYil7ZWEoYSxiKTtlYShhK1wiQ2FwdHVyZVwiLGIpfVxuZnVuY3Rpb24gZWEoYSxiKXtjYVthXT1iO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspYmEuYWRkKGJbYV0pfVxudmFyIGZhPSEoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxoYT0vXls6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF1bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MF0qJC8saWE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbmphPXt9LGthPXt9O2Z1bmN0aW9uIGxhKGEpe2lmKGlhLmNhbGwoa2EsYSkpcmV0dXJuITA7aWYoaWEuY2FsbChqYSxhKSlyZXR1cm4hMTtpZihoYS50ZXN0KGEpKXJldHVybiBrYVthXT0hMDtqYVthXT0hMDtyZXR1cm4hMX1mdW5jdGlvbiBtYShhLGIsYyxkKXtpZihudWxsIT09YyYmMD09PWMudHlwZSlyZXR1cm4hMTtzd2l0Y2godHlwZW9mIGIpe2Nhc2UgXCJmdW5jdGlvblwiOmNhc2UgXCJzeW1ib2xcIjpyZXR1cm4hMDtjYXNlIFwiYm9vbGVhblwiOmlmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpcmV0dXJuIWMuYWNjZXB0c0Jvb2xlYW5zO2E9YS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7cmV0dXJuXCJkYXRhLVwiIT09YSYmXCJhcmlhLVwiIT09YTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIG5hKGEsYixjLGQpe2lmKG51bGw9PT1ifHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGJ8fG1hKGEsYixjLGQpKXJldHVybiEwO2lmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpc3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiFiO2Nhc2UgNDpyZXR1cm4hMT09PWI7Y2FzZSA1OnJldHVybiBpc05hTihiKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGIpfHwxPmJ9cmV0dXJuITF9ZnVuY3Rpb24gQihhLGIsYyxkLGUsZixnKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09Ynx8Mz09PWJ8fDQ9PT1iO3RoaXMuYXR0cmlidXRlTmFtZT1kO3RoaXMuYXR0cmlidXRlTmFtZXNwYWNlPWU7dGhpcy5tdXN0VXNlUHJvcGVydHk9Yzt0aGlzLnByb3BlcnR5TmFtZT1hO3RoaXMudHlwZT1iO3RoaXMuc2FuaXRpemVVUkw9Zjt0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWd9dmFyIEQ9e307XG5cImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwwLCExLGEsbnVsbCwhMSwhMSl9KTtbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiY2xhc3NOYW1lXCIsXCJjbGFzc1wiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWFbMF07RFtiXT1uZXcgQihiLDEsITEsYVsxXSxudWxsLCExLCExKX0pO1tcImNvbnRlbnRFZGl0YWJsZVwiLFwiZHJhZ2dhYmxlXCIsXCJzcGVsbENoZWNrXCIsXCJ2YWx1ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiYXV0b1JldmVyc2VcIixcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcImZvY3VzYWJsZVwiLFwicHJlc2VydmVBbHBoYVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEsbnVsbCwhMSwhMSl9KTtcImFsbG93RnVsbFNjcmVlbiBhc3luYyBhdXRvRm9jdXMgYXV0b1BsYXkgY29udHJvbHMgZGVmYXVsdCBkZWZlciBkaXNhYmxlZCBkaXNhYmxlUGljdHVyZUluUGljdHVyZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbltcImNoZWNrZWRcIixcIm11bHRpcGxlXCIsXCJtdXRlZFwiLFwic2VsZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMCxhLG51bGwsITEsITEpfSk7W1wiY2FwdHVyZVwiLFwiZG93bmxvYWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNCwhMSxhLG51bGwsITEsITEpfSk7W1wiY29sc1wiLFwicm93c1wiLFwic2l6ZVwiLFwic3BhblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw2LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJyb3dTcGFuXCIsXCJzdGFydFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw1LCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciBvYT0vW1xcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHBhKGEpe3JldHVybiBhWzFdLnRvVXBwZXJDYXNlKCl9XG5cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLFxucGEpO0RbYl09bmV3IEIoYiwxLCExLGEsbnVsbCwhMSwhMSl9KTtcInhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMSwhMSl9KTtbXCJ4bWw6YmFzZVwiLFwieG1sOmxhbmdcIixcInhtbDpzcGFjZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCExLCExKX0pO1tcInRhYkluZGV4XCIsXCJjcm9zc09yaWdpblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuRC54bGlua0hyZWY9bmV3IEIoXCJ4bGlua0hyZWZcIiwxLCExLFwieGxpbms6aHJlZlwiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCEwLCExKTtbXCJzcmNcIixcImhyZWZcIixcImFjdGlvblwiLFwiZm9ybUFjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO1xuZnVuY3Rpb24gcWEoYSxiLGMsZCl7dmFyIGU9RC5oYXNPd25Qcm9wZXJ0eShiKT9EW2JdOm51bGw7dmFyIGY9bnVsbCE9PWU/MD09PWUudHlwZTpkPyExOiEoMjxiLmxlbmd0aCl8fFwib1wiIT09YlswXSYmXCJPXCIhPT1iWzBdfHxcIm5cIiE9PWJbMV0mJlwiTlwiIT09YlsxXT8hMTohMDtmfHwobmEoYixjLGUsZCkmJihjPW51bGwpLGR8fG51bGw9PT1lP2xhKGIpJiYobnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixcIlwiK2MpKTplLm11c3RVc2VQcm9wZXJ0eT9hW2UucHJvcGVydHlOYW1lXT1udWxsPT09Yz8zPT09ZS50eXBlPyExOlwiXCI6YzooYj1lLmF0dHJpYnV0ZU5hbWUsZD1lLmF0dHJpYnV0ZU5hbWVzcGFjZSxudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTooZT1lLnR5cGUsYz0zPT09ZXx8ND09PWUmJiEwPT09Yz9cIlwiOlwiXCIrYyxkP2Euc2V0QXR0cmlidXRlTlMoZCxiLGMpOmEuc2V0QXR0cmlidXRlKGIsYykpKSl9XG52YXIgcmE9YWEuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc2E9NjAxMDMsdGE9NjAxMDYsdWE9NjAxMDcsd2E9NjAxMDgseGE9NjAxMTQseWE9NjAxMDksemE9NjAxMTAsQWE9NjAxMTIsQmE9NjAxMTMsQ2E9NjAxMjAsRGE9NjAxMTUsRWE9NjAxMTYsRmE9NjAxMjEsR2E9NjAxMjgsSGE9NjAxMjksSWE9NjAxMzAsSmE9NjAxMzE7XG5pZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgRT1TeW1ib2wuZm9yO3NhPUUoXCJyZWFjdC5lbGVtZW50XCIpO3RhPUUoXCJyZWFjdC5wb3J0YWxcIik7dWE9RShcInJlYWN0LmZyYWdtZW50XCIpO3dhPUUoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTt4YT1FKFwicmVhY3QucHJvZmlsZXJcIik7eWE9RShcInJlYWN0LnByb3ZpZGVyXCIpO3phPUUoXCJyZWFjdC5jb250ZXh0XCIpO0FhPUUoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtCYT1FKFwicmVhY3Quc3VzcGVuc2VcIik7Q2E9RShcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7RGE9RShcInJlYWN0Lm1lbW9cIik7RWE9RShcInJlYWN0LmxhenlcIik7RmE9RShcInJlYWN0LmJsb2NrXCIpO0UoXCJyZWFjdC5zY29wZVwiKTtHYT1FKFwicmVhY3Qub3BhcXVlLmlkXCIpO0hhPUUoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO0lhPUUoXCJyZWFjdC5vZmZzY3JlZW5cIik7SmE9RShcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIil9XG52YXIgS2E9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIExhKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT1LYSYmYVtLYV18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH12YXIgTWE7ZnVuY3Rpb24gTmEoYSl7aWYodm9pZCAwPT09TWEpdHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGMpe3ZhciBiPWMuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7TWE9YiYmYlsxXXx8XCJcIn1yZXR1cm5cIlxcblwiK01hK2F9dmFyIE9hPSExO1xuZnVuY3Rpb24gUGEoYSxiKXtpZighYXx8T2EpcmV0dXJuXCJcIjtPYT0hMDt2YXIgYz1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e2lmKGIpaWYoYj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5wcm90b3R5cGUsXCJwcm9wc1wiLHtzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO319KSxcIm9iamVjdFwiPT09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoYixbXSl9Y2F0Y2goayl7dmFyIGQ9a31SZWZsZWN0LmNvbnN0cnVjdChhLFtdLGIpfWVsc2V7dHJ5e2IuY2FsbCgpfWNhdGNoKGspe2Q9a31hLmNhbGwoYi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGspe2Q9a31hKCl9fWNhdGNoKGspe2lmKGsmJmQmJlwic3RyaW5nXCI9PT10eXBlb2Ygay5zdGFjayl7Zm9yKHZhciBlPWsuc3RhY2suc3BsaXQoXCJcXG5cIiksXG5mPWQuc3RhY2suc3BsaXQoXCJcXG5cIiksZz1lLmxlbmd0aC0xLGg9Zi5sZW5ndGgtMTsxPD1nJiYwPD1oJiZlW2ddIT09ZltoXTspaC0tO2Zvcig7MTw9ZyYmMDw9aDtnLS0saC0tKWlmKGVbZ10hPT1mW2hdKXtpZigxIT09Z3x8MSE9PWgpe2RvIGlmKGctLSxoLS0sMD5ofHxlW2ddIT09ZltoXSlyZXR1cm5cIlxcblwiK2VbZ10ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO3doaWxlKDE8PWcmJjA8PWgpfWJyZWFrfX19ZmluYWxseXtPYT0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1jfXJldHVybihhPWE/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOlwiXCIpP05hKGEpOlwiXCJ9XG5mdW5jdGlvbiBRYShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTpyZXR1cm4gTmEoYS50eXBlKTtjYXNlIDE2OnJldHVybiBOYShcIkxhenlcIik7Y2FzZSAxMzpyZXR1cm4gTmEoXCJTdXNwZW5zZVwiKTtjYXNlIDE5OnJldHVybiBOYShcIlN1c3BlbnNlTGlzdFwiKTtjYXNlIDA6Y2FzZSAyOmNhc2UgMTU6cmV0dXJuIGE9UGEoYS50eXBlLCExKSxhO2Nhc2UgMTE6cmV0dXJuIGE9UGEoYS50eXBlLnJlbmRlciwhMSksYTtjYXNlIDIyOnJldHVybiBhPVBhKGEudHlwZS5fcmVuZGVyLCExKSxhO2Nhc2UgMTpyZXR1cm4gYT1QYShhLnR5cGUsITApLGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIFJhKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGEuZGlzcGxheU5hbWV8fGEubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgdWE6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgdGE6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIHhhOnJldHVyblwiUHJvZmlsZXJcIjtjYXNlIHdhOnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgQmE6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgQ2E6cmV0dXJuXCJTdXNwZW5zZUxpc3RcIn1pZihcIm9iamVjdFwiPT09dHlwZW9mIGEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgemE6cmV0dXJuKGEuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgeWE6cmV0dXJuKGEuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgQWE6dmFyIGI9YS5yZW5kZXI7Yj1iLmRpc3BsYXlOYW1lfHxiLm5hbWV8fFwiXCI7XG5yZXR1cm4gYS5kaXNwbGF5TmFtZXx8KFwiXCIhPT1iP1wiRm9yd2FyZFJlZihcIitiK1wiKVwiOlwiRm9yd2FyZFJlZlwiKTtjYXNlIERhOnJldHVybiBSYShhLnR5cGUpO2Nhc2UgRmE6cmV0dXJuIFJhKGEuX3JlbmRlcik7Y2FzZSBFYTpiPWEuX3BheWxvYWQ7YT1hLl9pbml0O3RyeXtyZXR1cm4gUmEoYShiKSl9Y2F0Y2goYyl7fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYShhKXtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwic3RyaW5nXCI6Y2FzZSBcInVuZGVmaW5lZFwiOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuXCJcIn19ZnVuY3Rpb24gVGEoYSl7dmFyIGI9YS50eXBlO3JldHVybihhPWEubm9kZU5hbWUpJiZcImlucHV0XCI9PT1hLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1ifHxcInJhZGlvXCI9PT1iKX1cbmZ1bmN0aW9uIFVhKGEpe3ZhciBiPVRhKGEpP1wiY2hlY2tlZFwiOlwidmFsdWVcIixjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYiksZD1cIlwiK2FbYl07aWYoIWEuaGFzT3duUHJvcGVydHkoYikmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuZ2V0JiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5zZXQpe3ZhciBlPWMuZ2V0LGY9Yy5zZXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihhKXtkPVwiXCIrYTtmLmNhbGwodGhpcyxhKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtlbnVtZXJhYmxlOmMuZW51bWVyYWJsZX0pO3JldHVybntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBkfSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtkPVwiXCIrYX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7YS5fdmFsdWVUcmFja2VyPVxubnVsbDtkZWxldGUgYVtiXX19fX1mdW5jdGlvbiBWYShhKXthLl92YWx1ZVRyYWNrZXJ8fChhLl92YWx1ZVRyYWNrZXI9VWEoYSkpfWZ1bmN0aW9uIFdhKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEuX3ZhbHVlVHJhY2tlcjtpZighYilyZXR1cm4hMDt2YXIgYz1iLmdldFZhbHVlKCk7dmFyIGQ9XCJcIjthJiYoZD1UYShhKT9hLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmEudmFsdWUpO2E9ZDtyZXR1cm4gYSE9PWM/KGIuc2V0VmFsdWUoYSksITApOiExfWZ1bmN0aW9uIFhhKGEpe2E9YXx8KFwidW5kZWZpbmVkXCIhPT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKTtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGEpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBhLmFjdGl2ZUVsZW1lbnR8fGEuYm9keX1jYXRjaChiKXtyZXR1cm4gYS5ib2R5fX1cbmZ1bmN0aW9uIFlhKGEsYil7dmFyIGM9Yi5jaGVja2VkO3JldHVybiBtKHt9LGIse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPWM/YzphLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiBaYShhLGIpe3ZhciBjPW51bGw9PWIuZGVmYXVsdFZhbHVlP1wiXCI6Yi5kZWZhdWx0VmFsdWUsZD1udWxsIT1iLmNoZWNrZWQ/Yi5jaGVja2VkOmIuZGVmYXVsdENoZWNrZWQ7Yz1TYShudWxsIT1iLnZhbHVlP2IudmFsdWU6Yyk7YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpkLGluaXRpYWxWYWx1ZTpjLGNvbnRyb2xsZWQ6XCJjaGVja2JveFwiPT09Yi50eXBlfHxcInJhZGlvXCI9PT1iLnR5cGU/bnVsbCE9Yi5jaGVja2VkOm51bGwhPWIudmFsdWV9fWZ1bmN0aW9uICRhKGEsYil7Yj1iLmNoZWNrZWQ7bnVsbCE9YiYmcWEoYSxcImNoZWNrZWRcIixiLCExKX1cbmZ1bmN0aW9uIGFiKGEsYil7JGEoYSxiKTt2YXIgYz1TYShiLnZhbHVlKSxkPWIudHlwZTtpZihudWxsIT1jKWlmKFwibnVtYmVyXCI9PT1kKXtpZigwPT09YyYmXCJcIj09PWEudmFsdWV8fGEudmFsdWUhPWMpYS52YWx1ZT1cIlwiK2N9ZWxzZSBhLnZhbHVlIT09XCJcIitjJiYoYS52YWx1ZT1cIlwiK2MpO2Vsc2UgaWYoXCJzdWJtaXRcIj09PWR8fFwicmVzZXRcIj09PWQpe2EucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik7cmV0dXJufWIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKT9iYihhLGIudHlwZSxjKTpiLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpJiZiYihhLGIudHlwZSxTYShiLmRlZmF1bHRWYWx1ZSkpO251bGw9PWIuY2hlY2tlZCYmbnVsbCE9Yi5kZWZhdWx0Q2hlY2tlZCYmKGEuZGVmYXVsdENoZWNrZWQ9ISFiLmRlZmF1bHRDaGVja2VkKX1cbmZ1bmN0aW9uIGNiKGEsYixjKXtpZihiLmhhc093blByb3BlcnR5KFwidmFsdWVcIil8fGIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpe3ZhciBkPWIudHlwZTtpZighKFwic3VibWl0XCIhPT1kJiZcInJlc2V0XCIhPT1kfHx2b2lkIDAhPT1iLnZhbHVlJiZudWxsIT09Yi52YWx1ZSkpcmV0dXJuO2I9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlO2N8fGI9PT1hLnZhbHVlfHwoYS52YWx1ZT1iKTthLmRlZmF1bHRWYWx1ZT1ifWM9YS5uYW1lO1wiXCIhPT1jJiYoYS5uYW1lPVwiXCIpO2EuZGVmYXVsdENoZWNrZWQ9ISFhLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XCJcIiE9PWMmJihhLm5hbWU9Yyl9XG5mdW5jdGlvbiBiYihhLGIsYyl7aWYoXCJudW1iZXJcIiE9PWJ8fFhhKGEub3duZXJEb2N1bWVudCkhPT1hKW51bGw9PWM/YS5kZWZhdWx0VmFsdWU9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmEuZGVmYXVsdFZhbHVlIT09XCJcIitjJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitjKX1mdW5jdGlvbiBkYihhKXt2YXIgYj1cIlwiO2FhLkNoaWxkcmVuLmZvckVhY2goYSxmdW5jdGlvbihhKXtudWxsIT1hJiYoYis9YSl9KTtyZXR1cm4gYn1mdW5jdGlvbiBlYihhLGIpe2E9bSh7Y2hpbGRyZW46dm9pZCAwfSxiKTtpZihiPWRiKGIuY2hpbGRyZW4pKWEuY2hpbGRyZW49YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIGZiKGEsYixjLGQpe2E9YS5vcHRpb25zO2lmKGIpe2I9e307Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYltcIiRcIitjW2VdXT0hMDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWU9Yi5oYXNPd25Qcm9wZXJ0eShcIiRcIithW2NdLnZhbHVlKSxhW2NdLnNlbGVjdGVkIT09ZSYmKGFbY10uc2VsZWN0ZWQ9ZSksZSYmZCYmKGFbY10uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2M9XCJcIitTYShjKTtiPW51bGw7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7aWYoYVtlXS52YWx1ZT09PWMpe2FbZV0uc2VsZWN0ZWQ9ITA7ZCYmKGFbZV0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59bnVsbCE9PWJ8fGFbZV0uZGlzYWJsZWR8fChiPWFbZV0pfW51bGwhPT1iJiYoYi5zZWxlY3RlZD0hMCl9fVxuZnVuY3Rpb24gZ2IoYSxiKXtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXRocm93IEVycm9yKHkoOTEpKTtyZXR1cm4gbSh7fSxiLHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjpcIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9KX1mdW5jdGlvbiBoYihhLGIpe3ZhciBjPWIudmFsdWU7aWYobnVsbD09Yyl7Yz1iLmNoaWxkcmVuO2I9Yi5kZWZhdWx0VmFsdWU7aWYobnVsbCE9Yyl7aWYobnVsbCE9Yil0aHJvdyBFcnJvcih5KDkyKSk7aWYoQXJyYXkuaXNBcnJheShjKSl7aWYoISgxPj1jLmxlbmd0aCkpdGhyb3cgRXJyb3IoeSg5MykpO2M9Y1swXX1iPWN9bnVsbD09YiYmKGI9XCJcIik7Yz1ifWEuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOlNhKGMpfX1cbmZ1bmN0aW9uIGliKGEsYil7dmFyIGM9U2EoYi52YWx1ZSksZD1TYShiLmRlZmF1bHRWYWx1ZSk7bnVsbCE9YyYmKGM9XCJcIitjLGMhPT1hLnZhbHVlJiYoYS52YWx1ZT1jKSxudWxsPT1iLmRlZmF1bHRWYWx1ZSYmYS5kZWZhdWx0VmFsdWUhPT1jJiYoYS5kZWZhdWx0VmFsdWU9YykpO251bGwhPWQmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2QpfWZ1bmN0aW9uIGpiKGEpe3ZhciBiPWEudGV4dENvbnRlbnQ7Yj09PWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJlwiXCIhPT1iJiZudWxsIT09YiYmKGEudmFsdWU9Yil9dmFyIGtiPXtodG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLG1hdGhtbDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifTtcbmZ1bmN0aW9uIGxiKGEpe3N3aXRjaChhKXtjYXNlIFwic3ZnXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2Nhc2UgXCJtYXRoXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI7ZGVmYXVsdDpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIn19ZnVuY3Rpb24gbWIoYSxiKXtyZXR1cm4gbnVsbD09YXx8XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hP2xiKGIpOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09PWEmJlwiZm9yZWlnbk9iamVjdFwiPT09Yj9cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjphfVxudmFyIG5iLG9iPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGIsYyxkLGUpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGEoYixjLGQsZSl9KX06YX0oZnVuY3Rpb24oYSxiKXtpZihhLm5hbWVzcGFjZVVSSSE9PWtiLnN2Z3x8XCJpbm5lckhUTUxcImluIGEpYS5pbm5lckhUTUw9YjtlbHNle25iPW5ifHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO25iLmlubmVySFRNTD1cIjxzdmc+XCIrYi52YWx1ZU9mKCkudG9TdHJpbmcoKStcIjwvc3ZnPlwiO2ZvcihiPW5iLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQoYi5maXJzdENoaWxkKX19KTtcbmZ1bmN0aW9uIHBiKGEsYil7aWYoYil7dmFyIGM9YS5maXJzdENoaWxkO2lmKGMmJmM9PT1hLmxhc3RDaGlsZCYmMz09PWMubm9kZVR5cGUpe2Mubm9kZVZhbHVlPWI7cmV0dXJufX1hLnRleHRDb250ZW50PWJ9XG52YXIgcWI9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLFxuZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0scmI9W1wiV2Via2l0XCIsXCJtc1wiLFwiTW96XCIsXCJPXCJdO09iamVjdC5rZXlzKHFiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JiLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7cWJbYl09cWJbYV19KX0pO2Z1bmN0aW9uIHNiKGEsYixjKXtyZXR1cm4gbnVsbD09Ynx8XCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJcIj09PWI/XCJcIjpjfHxcIm51bWJlclwiIT09dHlwZW9mIGJ8fDA9PT1ifHxxYi5oYXNPd25Qcm9wZXJ0eShhKSYmcWJbYV0/KFwiXCIrYikudHJpbSgpOmIrXCJweFwifVxuZnVuY3Rpb24gdGIoYSxiKXthPWEuc3R5bGU7Zm9yKHZhciBjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9MD09PWMuaW5kZXhPZihcIi0tXCIpLGU9c2IoYyxiW2NdLGQpO1wiZmxvYXRcIj09PWMmJihjPVwiY3NzRmxvYXRcIik7ZD9hLnNldFByb3BlcnR5KGMsZSk6YVtjXT1lfX12YXIgdWI9bSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtcbmZ1bmN0aW9uIHZiKGEsYil7aWYoYil7aWYodWJbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDEzNyxhKSk7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl7aWYobnVsbCE9Yi5jaGlsZHJlbil0aHJvdyBFcnJvcih5KDYwKSk7aWYoIShcIm9iamVjdFwiPT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJlwiX19odG1sXCJpbiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDYxKSk7fWlmKG51bGwhPWIuc3R5bGUmJlwib2JqZWN0XCIhPT10eXBlb2YgYi5zdHlsZSl0aHJvdyBFcnJvcih5KDYyKSk7fX1cbmZ1bmN0aW9uIHdiKGEsYil7aWYoLTE9PT1hLmluZGV4T2YoXCItXCIpKXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYi5pcztzd2l0Y2goYSl7Y2FzZSBcImFubm90YXRpb24teG1sXCI6Y2FzZSBcImNvbG9yLXByb2ZpbGVcIjpjYXNlIFwiZm9udC1mYWNlXCI6Y2FzZSBcImZvbnQtZmFjZS1zcmNcIjpjYXNlIFwiZm9udC1mYWNlLXVyaVwiOmNhc2UgXCJmb250LWZhY2UtZm9ybWF0XCI6Y2FzZSBcImZvbnQtZmFjZS1uYW1lXCI6Y2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiB4YihhKXthPWEudGFyZ2V0fHxhLnNyY0VsZW1lbnR8fHdpbmRvdzthLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoYT1hLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtyZXR1cm4gMz09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmF9dmFyIHliPW51bGwsemI9bnVsbCxBYj1udWxsO1xuZnVuY3Rpb24gQmIoYSl7aWYoYT1DYihhKSl7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIHliKXRocm93IEVycm9yKHkoMjgwKSk7dmFyIGI9YS5zdGF0ZU5vZGU7YiYmKGI9RGIoYikseWIoYS5zdGF0ZU5vZGUsYS50eXBlLGIpKX19ZnVuY3Rpb24gRWIoYSl7emI/QWI/QWIucHVzaChhKTpBYj1bYV06emI9YX1mdW5jdGlvbiBGYigpe2lmKHpiKXt2YXIgYT16YixiPUFiO0FiPXpiPW51bGw7QmIoYSk7aWYoYilmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKUJiKGJbYV0pfX1mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhKGIpfWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7cmV0dXJuIGEoYixjLGQsZSl9ZnVuY3Rpb24gSWIoKXt9dmFyIEpiPUdiLEtiPSExLExiPSExO2Z1bmN0aW9uIE1iKCl7aWYobnVsbCE9PXpifHxudWxsIT09QWIpSWIoKSxGYigpfVxuZnVuY3Rpb24gTmIoYSxiLGMpe2lmKExiKXJldHVybiBhKGIsYyk7TGI9ITA7dHJ5e3JldHVybiBKYihhLGIsYyl9ZmluYWxseXtMYj0hMSxNYigpfX1cbmZ1bmN0aW9uIE9iKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9RGIoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgXCJvbkNsaWNrXCI6Y2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpjYXNlIFwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlIFwib25Nb3VzZURvd25cIjpjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlVXBcIjpjYXNlIFwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRW50ZXJcIjooZD0hZC5kaXNhYmxlZCl8fChhPWEudHlwZSxkPSEoXCJidXR0b25cIj09PWF8fFwiaW5wdXRcIj09PWF8fFwic2VsZWN0XCI9PT1hfHxcInRleHRhcmVhXCI9PT1hKSk7YT0hZDticmVhayBhO2RlZmF1bHQ6YT0hMX1pZihhKXJldHVybiBudWxsO2lmKGMmJlwiZnVuY3Rpb25cIiE9PVxudHlwZW9mIGMpdGhyb3cgRXJyb3IoeSgyMzEsYix0eXBlb2YgYykpO3JldHVybiBjfXZhciBQYj0hMTtpZihmYSl0cnl7dmFyIFFiPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRYixcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7UGI9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUWIsUWIpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLFFiLFFiKX1jYXRjaChhKXtQYj0hMX1mdW5jdGlvbiBSYihhLGIsYyxkLGUsZixnLGgsayl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXtiLmFwcGx5KGMsbCl9Y2F0Y2gobil7dGhpcy5vbkVycm9yKG4pfX12YXIgU2I9ITEsVGI9bnVsbCxVYj0hMSxWYj1udWxsLFdiPXtvbkVycm9yOmZ1bmN0aW9uKGEpe1NiPSEwO1RiPWF9fTtmdW5jdGlvbiBYYihhLGIsYyxkLGUsZixnLGgsayl7U2I9ITE7VGI9bnVsbDtSYi5hcHBseShXYixhcmd1bWVudHMpfVxuZnVuY3Rpb24gWWIoYSxiLGMsZCxlLGYsZyxoLGspe1hiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihTYil7aWYoU2Ipe3ZhciBsPVRiO1NiPSExO1RiPW51bGx9ZWxzZSB0aHJvdyBFcnJvcih5KDE5OCkpO1VifHwoVWI9ITAsVmI9bCl9fWZ1bmN0aW9uIFpiKGEpe3ZhciBiPWEsYz1hO2lmKGEuYWx0ZXJuYXRlKWZvcig7Yi5yZXR1cm47KWI9Yi5yZXR1cm47ZWxzZXthPWI7ZG8gYj1hLDAhPT0oYi5mbGFncyYxMDI2KSYmKGM9Yi5yZXR1cm4pLGE9Yi5yZXR1cm47d2hpbGUoYSl9cmV0dXJuIDM9PT1iLnRhZz9jOm51bGx9ZnVuY3Rpb24gJGIoYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9YS5tZW1vaXplZFN0YXRlO251bGw9PT1iJiYoYT1hLmFsdGVybmF0ZSxudWxsIT09YSYmKGI9YS5tZW1vaXplZFN0YXRlKSk7aWYobnVsbCE9PWIpcmV0dXJuIGIuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhYyhhKXtpZihaYihhKSE9PWEpdGhyb3cgRXJyb3IoeSgxODgpKTt9XG5mdW5jdGlvbiBiYyhhKXt2YXIgYj1hLmFsdGVybmF0ZTtpZighYil7Yj1aYihhKTtpZihudWxsPT09Yil0aHJvdyBFcnJvcih5KDE4OCkpO3JldHVybiBiIT09YT9udWxsOmF9Zm9yKHZhciBjPWEsZD1iOzspe3ZhciBlPWMucmV0dXJuO2lmKG51bGw9PT1lKWJyZWFrO3ZhciBmPWUuYWx0ZXJuYXRlO2lmKG51bGw9PT1mKXtkPWUucmV0dXJuO2lmKG51bGwhPT1kKXtjPWQ7Y29udGludWV9YnJlYWt9aWYoZS5jaGlsZD09PWYuY2hpbGQpe2ZvcihmPWUuY2hpbGQ7Zjspe2lmKGY9PT1jKXJldHVybiBhYyhlKSxhO2lmKGY9PT1kKXJldHVybiBhYyhlKSxiO2Y9Zi5zaWJsaW5nfXRocm93IEVycm9yKHkoMTg4KSk7fWlmKGMucmV0dXJuIT09ZC5yZXR1cm4pYz1lLGQ9ZjtlbHNle2Zvcih2YXIgZz0hMSxoPWUuY2hpbGQ7aDspe2lmKGg9PT1jKXtnPSEwO2M9ZTtkPWY7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1lO2M9ZjticmVha31oPWguc2libGluZ31pZighZyl7Zm9yKGg9Zi5jaGlsZDtoOyl7aWYoaD09PVxuYyl7Zz0hMDtjPWY7ZD1lO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZjtjPWU7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpdGhyb3cgRXJyb3IoeSgxODkpKTt9fWlmKGMuYWx0ZXJuYXRlIT09ZCl0aHJvdyBFcnJvcih5KDE5MCkpO31pZigzIT09Yy50YWcpdGhyb3cgRXJyb3IoeSgxODgpKTtyZXR1cm4gYy5zdGF0ZU5vZGUuY3VycmVudD09PWM/YTpifWZ1bmN0aW9uIGNjKGEpe2E9YmMoYSk7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBiPWE7Oyl7aWYoNT09PWIudGFnfHw2PT09Yi50YWcpcmV0dXJuIGI7aWYoYi5jaGlsZCliLmNoaWxkLnJldHVybj1iLGI9Yi5jaGlsZDtlbHNle2lmKGI9PT1hKWJyZWFrO2Zvcig7IWIuc2libGluZzspe2lmKCFiLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ319cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBkYyhhLGIpe2Zvcih2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09Yjspe2lmKGI9PT1hfHxiPT09YylyZXR1cm4hMDtiPWIucmV0dXJufXJldHVybiExfXZhciBlYyxmYyxnYyxoYyxpYz0hMSxqYz1bXSxrYz1udWxsLGxjPW51bGwsbWM9bnVsbCxuYz1uZXcgTWFwLG9jPW5ldyBNYXAscGM9W10scWM9XCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0XCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gcmMoYSxiLGMsZCxlKXtyZXR1cm57YmxvY2tlZE9uOmEsZG9tRXZlbnROYW1lOmIsZXZlbnRTeXN0ZW1GbGFnczpjfDE2LG5hdGl2ZUV2ZW50OmUsdGFyZ2V0Q29udGFpbmVyczpbZF19fWZ1bmN0aW9uIHNjKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6Y2FzZSBcImZvY3Vzb3V0XCI6a2M9bnVsbDticmVhaztjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmxjPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJtb3VzZW91dFwiOm1jPW51bGw7YnJlYWs7Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpuYy5kZWxldGUoYi5wb2ludGVySWQpO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpvYy5kZWxldGUoYi5wb2ludGVySWQpfX1cbmZ1bmN0aW9uIHRjKGEsYixjLGQsZSxmKXtpZihudWxsPT09YXx8YS5uYXRpdmVFdmVudCE9PWYpcmV0dXJuIGE9cmMoYixjLGQsZSxmKSxudWxsIT09YiYmKGI9Q2IoYiksbnVsbCE9PWImJmZjKGIpKSxhO2EuZXZlbnRTeXN0ZW1GbGFnc3w9ZDtiPWEudGFyZ2V0Q29udGFpbmVycztudWxsIT09ZSYmLTE9PT1iLmluZGV4T2YoZSkmJmIucHVzaChlKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHVjKGEsYixjLGQsZSl7c3dpdGNoKGIpe2Nhc2UgXCJmb2N1c2luXCI6cmV0dXJuIGtjPXRjKGtjLGEsYixjLGQsZSksITA7Y2FzZSBcImRyYWdlbnRlclwiOnJldHVybiBsYz10YyhsYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJtb3VzZW92ZXJcIjpyZXR1cm4gbWM9dGMobWMsYSxiLGMsZCxlKSwhMDtjYXNlIFwicG9pbnRlcm92ZXJcIjp2YXIgZj1lLnBvaW50ZXJJZDtuYy5zZXQoZix0YyhuYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSk7cmV0dXJuITA7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGY9ZS5wb2ludGVySWQsb2Muc2V0KGYsdGMob2MuZ2V0KGYpfHxudWxsLGEsYixjLGQsZSkpLCEwfXJldHVybiExfVxuZnVuY3Rpb24gdmMoYSl7dmFyIGI9d2MoYS50YXJnZXQpO2lmKG51bGwhPT1iKXt2YXIgYz1aYihiKTtpZihudWxsIT09YylpZihiPWMudGFnLDEzPT09Yil7aWYoYj0kYihjKSxudWxsIT09Yil7YS5ibG9ja2VkT249YjtoYyhhLmxhbmVQcmlvcml0eSxmdW5jdGlvbigpe3IudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KGEucHJpb3JpdHksZnVuY3Rpb24oKXtnYyhjKX0pfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5oeWRyYXRlKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1cbmZ1bmN0aW9uIHhjKGEpe2lmKG51bGwhPT1hLmJsb2NrZWRPbilyZXR1cm4hMTtmb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz15YyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09YylyZXR1cm4gYj1DYihjKSxudWxsIT09YiYmZmMoYiksYS5ibG9ja2VkT249YywhMTtiLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gemMoYSxiLGMpe3hjKGEpJiZjLmRlbGV0ZShiKX1cbmZ1bmN0aW9uIEFjKCl7Zm9yKGljPSExOzA8amMubGVuZ3RoOyl7dmFyIGE9amNbMF07aWYobnVsbCE9PWEuYmxvY2tlZE9uKXthPUNiKGEuYmxvY2tlZE9uKTtudWxsIT09YSYmZWMoYSk7YnJlYWt9Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9eWMoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PWMpe2EuYmxvY2tlZE9uPWM7YnJlYWt9Yi5zaGlmdCgpfW51bGw9PT1hLmJsb2NrZWRPbiYmamMuc2hpZnQoKX1udWxsIT09a2MmJnhjKGtjKSYmKGtjPW51bGwpO251bGwhPT1sYyYmeGMobGMpJiYobGM9bnVsbCk7bnVsbCE9PW1jJiZ4YyhtYykmJihtYz1udWxsKTtuYy5mb3JFYWNoKHpjKTtvYy5mb3JFYWNoKHpjKX1cbmZ1bmN0aW9uIEJjKGEsYil7YS5ibG9ja2VkT249PT1iJiYoYS5ibG9ja2VkT249bnVsbCxpY3x8KGljPSEwLHIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEFjKSkpfVxuZnVuY3Rpb24gQ2MoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gQmMoYixhKX1pZigwPGpjLmxlbmd0aCl7QmMoamNbMF0sYSk7Zm9yKHZhciBjPTE7YzxqYy5sZW5ndGg7YysrKXt2YXIgZD1qY1tjXTtkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PWtjJiZCYyhrYyxhKTtudWxsIT09bGMmJkJjKGxjLGEpO251bGwhPT1tYyYmQmMobWMsYSk7bmMuZm9yRWFjaChiKTtvYy5mb3JFYWNoKGIpO2ZvcihjPTA7YzxwYy5sZW5ndGg7YysrKWQ9cGNbY10sZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHBjLmxlbmd0aCYmKGM9cGNbMF0sbnVsbD09PWMuYmxvY2tlZE9uKTspdmMoYyksbnVsbD09PWMuYmxvY2tlZE9uJiZwYy5zaGlmdCgpfVxuZnVuY3Rpb24gRGMoYSxiKXt2YXIgYz17fTtjW2EudG9Mb3dlckNhc2UoKV09Yi50b0xvd2VyQ2FzZSgpO2NbXCJXZWJraXRcIithXT1cIndlYmtpdFwiK2I7Y1tcIk1velwiK2FdPVwibW96XCIrYjtyZXR1cm4gY312YXIgRWM9e2FuaW1hdGlvbmVuZDpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uRW5kXCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLGFuaW1hdGlvbnN0YXJ0OkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25TdGFydFwiKSx0cmFuc2l0aW9uZW5kOkRjKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sRmM9e30sR2M9e307XG5mYSYmKEdjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIEVjLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIEVjLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gSGMoYSl7aWYoRmNbYV0pcmV0dXJuIEZjW2FdO2lmKCFFY1thXSlyZXR1cm4gYTt2YXIgYj1FY1thXSxjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSYmYyBpbiBHYylyZXR1cm4gRmNbYV09YltjXTtyZXR1cm4gYX1cbnZhciBJYz1IYyhcImFuaW1hdGlvbmVuZFwiKSxKYz1IYyhcImFuaW1hdGlvbml0ZXJhdGlvblwiKSxLYz1IYyhcImFuaW1hdGlvbnN0YXJ0XCIpLExjPUhjKFwidHJhbnNpdGlvbmVuZFwiKSxNYz1uZXcgTWFwLE5jPW5ldyBNYXAsT2M9W1wiYWJvcnRcIixcImFib3J0XCIsSWMsXCJhbmltYXRpb25FbmRcIixKYyxcImFuaW1hdGlvbkl0ZXJhdGlvblwiLEtjLFwiYW5pbWF0aW9uU3RhcnRcIixcImNhbnBsYXlcIixcImNhblBsYXlcIixcImNhbnBsYXl0aHJvdWdoXCIsXCJjYW5QbGF5VGhyb3VnaFwiLFwiZHVyYXRpb25jaGFuZ2VcIixcImR1cmF0aW9uQ2hhbmdlXCIsXCJlbXB0aWVkXCIsXCJlbXB0aWVkXCIsXCJlbmNyeXB0ZWRcIixcImVuY3J5cHRlZFwiLFwiZW5kZWRcIixcImVuZGVkXCIsXCJlcnJvclwiLFwiZXJyb3JcIixcImdvdHBvaW50ZXJjYXB0dXJlXCIsXCJnb3RQb2ludGVyQ2FwdHVyZVwiLFwibG9hZFwiLFwibG9hZFwiLFwibG9hZGVkZGF0YVwiLFwibG9hZGVkRGF0YVwiLFwibG9hZGVkbWV0YWRhdGFcIixcImxvYWRlZE1ldGFkYXRhXCIsXCJsb2Fkc3RhcnRcIixcImxvYWRTdGFydFwiLFxuXCJsb3N0cG9pbnRlcmNhcHR1cmVcIixcImxvc3RQb2ludGVyQ2FwdHVyZVwiLFwicGxheWluZ1wiLFwicGxheWluZ1wiLFwicHJvZ3Jlc3NcIixcInByb2dyZXNzXCIsXCJzZWVraW5nXCIsXCJzZWVraW5nXCIsXCJzdGFsbGVkXCIsXCJzdGFsbGVkXCIsXCJzdXNwZW5kXCIsXCJzdXNwZW5kXCIsXCJ0aW1ldXBkYXRlXCIsXCJ0aW1lVXBkYXRlXCIsTGMsXCJ0cmFuc2l0aW9uRW5kXCIsXCJ3YWl0aW5nXCIsXCJ3YWl0aW5nXCJdO2Z1bmN0aW9uIFBjKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0yKXt2YXIgZD1hW2NdLGU9YVtjKzFdO2U9XCJvblwiKyhlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSk7TmMuc2V0KGQsYik7TWMuc2V0KGQsZSk7ZGEoZSxbZF0pfX12YXIgUWM9ci51bnN0YWJsZV9ub3c7UWMoKTt2YXIgRj04O1xuZnVuY3Rpb24gUmMoYSl7aWYoMCE9PSgxJmEpKXJldHVybiBGPTE1LDE7aWYoMCE9PSgyJmEpKXJldHVybiBGPTE0LDI7aWYoMCE9PSg0JmEpKXJldHVybiBGPTEzLDQ7dmFyIGI9MjQmYTtpZigwIT09YilyZXR1cm4gRj0xMixiO2lmKDAhPT0oYSYzMikpcmV0dXJuIEY9MTEsMzI7Yj0xOTImYTtpZigwIT09YilyZXR1cm4gRj0xMCxiO2lmKDAhPT0oYSYyNTYpKXJldHVybiBGPTksMjU2O2I9MzU4NCZhO2lmKDAhPT1iKXJldHVybiBGPTgsYjtpZigwIT09KGEmNDA5NikpcmV0dXJuIEY9Nyw0MDk2O2I9NDE4NjExMiZhO2lmKDAhPT1iKXJldHVybiBGPTYsYjtiPTYyOTE0NTYwJmE7aWYoMCE9PWIpcmV0dXJuIEY9NSxiO2lmKGEmNjcxMDg4NjQpcmV0dXJuIEY9NCw2NzEwODg2NDtpZigwIT09KGEmMTM0MjE3NzI4KSlyZXR1cm4gRj0zLDEzNDIxNzcyODtiPTgwNTMwNjM2OCZhO2lmKDAhPT1iKXJldHVybiBGPTIsYjtpZigwIT09KDEwNzM3NDE4MjQmYSkpcmV0dXJuIEY9MSwxMDczNzQxODI0O1xuRj04O3JldHVybiBhfWZ1bmN0aW9uIFNjKGEpe3N3aXRjaChhKXtjYXNlIDk5OnJldHVybiAxNTtjYXNlIDk4OnJldHVybiAxMDtjYXNlIDk3OmNhc2UgOTY6cmV0dXJuIDg7Y2FzZSA5NTpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBUYyhhKXtzd2l0Y2goYSl7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiA5OTtjYXNlIDEzOmNhc2UgMTI6Y2FzZSAxMTpjYXNlIDEwOnJldHVybiA5ODtjYXNlIDk6Y2FzZSA4OmNhc2UgNzpjYXNlIDY6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gOTc7Y2FzZSAzOmNhc2UgMjpjYXNlIDE6cmV0dXJuIDk1O2Nhc2UgMDpyZXR1cm4gOTA7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDM1OCxhKSk7fX1cbmZ1bmN0aW9uIFVjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXM7aWYoMD09PWMpcmV0dXJuIEY9MDt2YXIgZD0wLGU9MCxmPWEuZXhwaXJlZExhbmVzLGc9YS5zdXNwZW5kZWRMYW5lcyxoPWEucGluZ2VkTGFuZXM7aWYoMCE9PWYpZD1mLGU9Rj0xNTtlbHNlIGlmKGY9YyYxMzQyMTc3MjcsMCE9PWYpe3ZhciBrPWYmfmc7MCE9PWs/KGQ9UmMoayksZT1GKTooaCY9ZiwwIT09aCYmKGQ9UmMoaCksZT1GKSl9ZWxzZSBmPWMmfmcsMCE9PWY/KGQ9UmMoZiksZT1GKTowIT09aCYmKGQ9UmMoaCksZT1GKTtpZigwPT09ZClyZXR1cm4gMDtkPTMxLVZjKGQpO2Q9YyYoKDA+ZD8wOjE8PGQpPDwxKS0xO2lmKDAhPT1iJiZiIT09ZCYmMD09PShiJmcpKXtSYyhiKTtpZihlPD1GKXJldHVybiBiO0Y9ZX1iPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLVZjKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfVxuZnVuY3Rpb24gV2MoYSl7YT1hLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNTtyZXR1cm4gMCE9PWE/YTphJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFhjKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDEyOnJldHVybiBhPVljKDI0Jn5iKSwwPT09YT9YYygxMCxiKTphO2Nhc2UgMTA6cmV0dXJuIGE9WWMoMTkyJn5iKSwwPT09YT9YYyg4LGIpOmE7Y2FzZSA4OnJldHVybiBhPVljKDM1ODQmfmIpLDA9PT1hJiYoYT1ZYyg0MTg2MTEyJn5iKSwwPT09YSYmKGE9NTEyKSksYTtjYXNlIDI6cmV0dXJuIGI9WWMoODA1MzA2MzY4Jn5iKSwwPT09YiYmKGI9MjY4NDM1NDU2KSxifXRocm93IEVycm9yKHkoMzU4LGEpKTt9ZnVuY3Rpb24gWWMoYSl7cmV0dXJuIGEmLWF9ZnVuY3Rpb24gWmMoYSl7Zm9yKHZhciBiPVtdLGM9MDszMT5jO2MrKyliLnB1c2goYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiAkYyhhLGIsYyl7YS5wZW5kaW5nTGFuZXN8PWI7dmFyIGQ9Yi0xO2Euc3VzcGVuZGVkTGFuZXMmPWQ7YS5waW5nZWRMYW5lcyY9ZDthPWEuZXZlbnRUaW1lcztiPTMxLVZjKGIpO2FbYl09Y312YXIgVmM9TWF0aC5jbHozMj9NYXRoLmNsejMyOmFkLGJkPU1hdGgubG9nLGNkPU1hdGguTE4yO2Z1bmN0aW9uIGFkKGEpe3JldHVybiAwPT09YT8zMjozMS0oYmQoYSkvY2R8MCl8MH12YXIgZGQ9ci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxlZD1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxmZD0hMDtmdW5jdGlvbiBnZChhLGIsYyxkKXtLYnx8SWIoKTt2YXIgZT1oZCxmPUtiO0tiPSEwO3RyeXtIYihlLGEsYixjLGQpfWZpbmFsbHl7KEtiPWYpfHxNYigpfX1mdW5jdGlvbiBpZChhLGIsYyxkKXtlZChkZCxoZC5iaW5kKG51bGwsYSxiLGMsZCkpfVxuZnVuY3Rpb24gaGQoYSxiLGMsZCl7aWYoZmQpe3ZhciBlO2lmKChlPTA9PT0oYiY0KSkmJjA8amMubGVuZ3RoJiYtMTxxYy5pbmRleE9mKGEpKWE9cmMobnVsbCxhLGIsYyxkKSxqYy5wdXNoKGEpO2Vsc2V7dmFyIGY9eWMoYSxiLGMsZCk7aWYobnVsbD09PWYpZSYmc2MoYSxkKTtlbHNle2lmKGUpe2lmKC0xPHFjLmluZGV4T2YoYSkpe2E9cmMoZixhLGIsYyxkKTtqYy5wdXNoKGEpO3JldHVybn1pZih1YyhmLGEsYixjLGQpKXJldHVybjtzYyhhLGQpfWpkKGEsYixkLG51bGwsYyl9fX19XG5mdW5jdGlvbiB5YyhhLGIsYyxkKXt2YXIgZT14YihkKTtlPXdjKGUpO2lmKG51bGwhPT1lKXt2YXIgZj1aYihlKTtpZihudWxsPT09ZillPW51bGw7ZWxzZXt2YXIgZz1mLnRhZztpZigxMz09PWcpe2U9JGIoZik7aWYobnVsbCE9PWUpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMz09PWcpe2lmKGYuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIDM9PT1mLnRhZz9mLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7ZT1udWxsfWVsc2UgZiE9PWUmJihlPW51bGwpfX1qZChhLGIsZCxlLGMpO3JldHVybiBudWxsfXZhciBrZD1udWxsLGxkPW51bGwsbWQ9bnVsbDtcbmZ1bmN0aW9uIG5kKCl7aWYobWQpcmV0dXJuIG1kO3ZhciBhLGI9bGQsYz1iLmxlbmd0aCxkLGU9XCJ2YWx1ZVwiaW4ga2Q/a2QudmFsdWU6a2QudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gbWQ9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX1mdW5jdGlvbiBvZChhKXt2YXIgYj1hLmtleUNvZGU7XCJjaGFyQ29kZVwiaW4gYT8oYT1hLmNoYXJDb2RlLDA9PT1hJiYxMz09PWImJihhPTEzKSk6YT1iOzEwPT09YSYmKGE9MTMpO3JldHVybiAzMjw9YXx8MTM9PT1hP2E6MH1mdW5jdGlvbiBwZCgpe3JldHVybiEwfWZ1bmN0aW9uIHFkKCl7cmV0dXJuITF9XG5mdW5jdGlvbiByZChhKXtmdW5jdGlvbiBiKGIsZCxlLGYsZyl7dGhpcy5fcmVhY3ROYW1lPWI7dGhpcy5fdGFyZ2V0SW5zdD1lO3RoaXMudHlwZT1kO3RoaXMubmF0aXZlRXZlbnQ9Zjt0aGlzLnRhcmdldD1nO3RoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJihiPWFbY10sdGhpc1tjXT1iP2IoZik6ZltjXSk7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPWYuZGVmYXVsdFByZXZlbnRlZD9mLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1mLnJldHVyblZhbHVlKT9wZDpxZDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXFkO3JldHVybiB0aGlzfW0oYi5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOlwidW5rbm93blwiIT09dHlwZW9mIGEucmV0dXJuVmFsdWUmJlxuKGEucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXBkKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTpcInVua25vd25cIiE9PXR5cGVvZiBhLmNhbmNlbEJ1YmJsZSYmKGEuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXBkKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnBkfSk7cmV0dXJuIGJ9XG52YXIgc2Q9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihhKXtyZXR1cm4gYS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sdGQ9cmQoc2QpLHVkPW0oe30sc2Qse3ZpZXc6MCxkZXRhaWw6MH0pLHZkPXJkKHVkKSx3ZCx4ZCx5ZCxBZD1tKHt9LHVkLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hLnJlbGF0ZWRUYXJnZXQ/YS5mcm9tRWxlbWVudD09PWEuc3JjRWxlbWVudD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50OmEucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGEpe2lmKFwibW92ZW1lbnRYXCJpblxuYSlyZXR1cm4gYS5tb3ZlbWVudFg7YSE9PXlkJiYoeWQmJlwibW91c2Vtb3ZlXCI9PT1hLnR5cGU/KHdkPWEuc2NyZWVuWC15ZC5zY3JlZW5YLHhkPWEuc2NyZWVuWS15ZC5zY3JlZW5ZKTp4ZD13ZD0wLHlkPWEpO3JldHVybiB3ZH0sbW92ZW1lbnRZOmZ1bmN0aW9uKGEpe3JldHVyblwibW92ZW1lbnRZXCJpbiBhP2EubW92ZW1lbnRZOnhkfX0pLEJkPXJkKEFkKSxDZD1tKHt9LEFkLHtkYXRhVHJhbnNmZXI6MH0pLERkPXJkKENkKSxFZD1tKHt9LHVkLHtyZWxhdGVkVGFyZ2V0OjB9KSxGZD1yZChFZCksR2Q9bSh7fSxzZCx7YW5pbWF0aW9uTmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksSGQ9cmQoR2QpLElkPW0oe30sc2Qse2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBhP2EuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxKZD1yZChJZCksS2Q9bSh7fSxzZCx7ZGF0YTowfSksTGQ9cmQoS2QpLE1kPXtFc2M6XCJFc2NhcGVcIixcblNwYWNlYmFyOlwiIFwiLExlZnQ6XCJBcnJvd0xlZnRcIixVcDpcIkFycm93VXBcIixSaWdodDpcIkFycm93UmlnaHRcIixEb3duOlwiQXJyb3dEb3duXCIsRGVsOlwiRGVsZXRlXCIsV2luOlwiT1NcIixNZW51OlwiQ29udGV4dE1lbnVcIixBcHBzOlwiQ29udGV4dE1lbnVcIixTY3JvbGw6XCJTY3JvbGxMb2NrXCIsTW96UHJpbnRhYmxlS2V5OlwiVW5pZGVudGlmaWVkXCJ9LE5kPXs4OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEyOlwiQ2xlYXJcIiwxMzpcIkVudGVyXCIsMTY6XCJTaGlmdFwiLDE3OlwiQ29udHJvbFwiLDE4OlwiQWx0XCIsMTk6XCJQYXVzZVwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiwxMTI6XCJGMVwiLDExMzpcIkYyXCIsMTE0OlwiRjNcIiwxMTU6XCJGNFwiLDExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLFxuMTE5OlwiRjhcIiwxMjA6XCJGOVwiLDEyMTpcIkYxMFwiLDEyMjpcIkYxMVwiLDEyMzpcIkYxMlwiLDE0NDpcIk51bUxvY2tcIiwxNDU6XCJTY3JvbGxMb2NrXCIsMjI0OlwiTWV0YVwifSxPZD17QWx0OlwiYWx0S2V5XCIsQ29udHJvbDpcImN0cmxLZXlcIixNZXRhOlwibWV0YUtleVwiLFNoaWZ0Olwic2hpZnRLZXlcIn07ZnVuY3Rpb24gUGQoYSl7dmFyIGI9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gYi5nZXRNb2RpZmllclN0YXRlP2IuZ2V0TW9kaWZpZXJTdGF0ZShhKTooYT1PZFthXSk/ISFiW2FdOiExfWZ1bmN0aW9uIHpkKCl7cmV0dXJuIFBkfVxudmFyIFFkPW0oe30sdWQse2tleTpmdW5jdGlvbihhKXtpZihhLmtleSl7dmFyIGI9TWRbYS5rZXldfHxhLmtleTtpZihcIlVuaWRlbnRpZmllZFwiIT09YilyZXR1cm4gYn1yZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/KGE9b2QoYSksMTM9PT1hP1wiRW50ZXJcIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP05kW2Eua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6emQsY2hhckNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09YS50eXBlP29kKGEpOjB9LGtleUNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09XG5hLnR5cGU/b2QoYSk6XCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH19KSxSZD1yZChRZCksU2Q9bSh7fSxBZCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSxUZD1yZChTZCksVWQ9bSh7fSx1ZCx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkfSksVmQ9cmQoVWQpLFdkPW0oe30sc2Qse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksWGQ9cmQoV2QpLFlkPW0oe30sQWQse2RlbHRhWDpmdW5jdGlvbihhKXtyZXR1cm5cImRlbHRhWFwiaW4gYT9hLmRlbHRhWDpcIndoZWVsRGVsdGFYXCJpbiBhPy1hLndoZWVsRGVsdGFYOjB9LFxuZGVsdGFZOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFZXCJpbiBhP2EuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGE/LWEud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBhPy1hLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSxaZD1yZChZZCksJGQ9WzksMTMsMjcsMzJdLGFlPWZhJiZcIkNvbXBvc2l0aW9uRXZlbnRcImluIHdpbmRvdyxiZT1udWxsO2ZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJihiZT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBjZT1mYSYmXCJUZXh0RXZlbnRcImluIHdpbmRvdyYmIWJlLGRlPWZhJiYoIWFlfHxiZSYmODxiZSYmMTE+PWJlKSxlZT1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxmZT0hMTtcbmZ1bmN0aW9uIGdlKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJrZXl1cFwiOnJldHVybi0xIT09JGQuaW5kZXhPZihiLmtleUNvZGUpO2Nhc2UgXCJrZXlkb3duXCI6cmV0dXJuIDIyOSE9PWIua2V5Q29kZTtjYXNlIFwia2V5cHJlc3NcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcImZvY3Vzb3V0XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gaGUoYSl7YT1hLmRldGFpbDtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJlwiZGF0YVwiaW4gYT9hLmRhdGE6bnVsbH12YXIgaWU9ITE7ZnVuY3Rpb24gamUoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIGhlKGIpO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKDMyIT09Yi53aGljaClyZXR1cm4gbnVsbDtmZT0hMDtyZXR1cm4gZWU7Y2FzZSBcInRleHRJbnB1dFwiOnJldHVybiBhPWIuZGF0YSxhPT09ZWUmJmZlP251bGw6YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbmZ1bmN0aW9uIGtlKGEsYil7aWYoaWUpcmV0dXJuXCJjb21wb3NpdGlvbmVuZFwiPT09YXx8IWFlJiZnZShhLGIpPyhhPW5kKCksbWQ9bGQ9a2Q9bnVsbCxpZT0hMSxhKTpudWxsO3N3aXRjaChhKXtjYXNlIFwicGFzdGVcIjpyZXR1cm4gbnVsbDtjYXNlIFwia2V5cHJlc3NcIjppZighKGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSl8fGIuY3RybEtleSYmYi5hbHRLZXkpe2lmKGIuY2hhciYmMTxiLmNoYXIubGVuZ3RoKXJldHVybiBiLmNoYXI7aWYoYi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShiLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gZGUmJlwia29cIiE9PWIubG9jYWxlP251bGw6Yi5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxudmFyIGxlPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIG1lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iPyEhbGVbYS50eXBlXTpcInRleHRhcmVhXCI9PT1iPyEwOiExfWZ1bmN0aW9uIG5lKGEsYixjLGQpe0ViKGQpO2I9b2UoYixcIm9uQ2hhbmdlXCIpOzA8Yi5sZW5ndGgmJihjPW5ldyB0ZChcIm9uQ2hhbmdlXCIsXCJjaGFuZ2VcIixudWxsLGMsZCksYS5wdXNoKHtldmVudDpjLGxpc3RlbmVyczpifSkpfXZhciBwZT1udWxsLHFlPW51bGw7ZnVuY3Rpb24gcmUoYSl7c2UoYSwwKX1mdW5jdGlvbiB0ZShhKXt2YXIgYj11ZShhKTtpZihXYShiKSlyZXR1cm4gYX1cbmZ1bmN0aW9uIHZlKGEsYil7aWYoXCJjaGFuZ2VcIj09PWEpcmV0dXJuIGJ9dmFyIHdlPSExO2lmKGZhKXt2YXIgeGU7aWYoZmEpe3ZhciB5ZT1cIm9uaW5wdXRcImluIGRvY3VtZW50O2lmKCF5ZSl7dmFyIHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7emUuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKTt5ZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgemUub25pbnB1dH14ZT15ZX1lbHNlIHhlPSExO3dlPXhlJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OTxkb2N1bWVudC5kb2N1bWVudE1vZGUpfWZ1bmN0aW9uIEFlKCl7cGUmJihwZS5kZXRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkscWU9cGU9bnVsbCl9ZnVuY3Rpb24gQmUoYSl7aWYoXCJ2YWx1ZVwiPT09YS5wcm9wZXJ0eU5hbWUmJnRlKHFlKSl7dmFyIGI9W107bmUoYixxZSxhLHhiKGEpKTthPXJlO2lmKEtiKWEoYik7ZWxzZXtLYj0hMDt0cnl7R2IoYSxiKX1maW5hbGx5e0tiPSExLE1iKCl9fX19XG5mdW5jdGlvbiBDZShhLGIsYyl7XCJmb2N1c2luXCI9PT1hPyhBZSgpLHBlPWIscWU9YyxwZS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkpOlwiZm9jdXNvdXRcIj09PWEmJkFlKCl9ZnVuY3Rpb24gRGUoYSl7aWYoXCJzZWxlY3Rpb25jaGFuZ2VcIj09PWF8fFwia2V5dXBcIj09PWF8fFwia2V5ZG93blwiPT09YSlyZXR1cm4gdGUocWUpfWZ1bmN0aW9uIEVlKGEsYil7aWYoXCJjbGlja1wiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gRmUoYSxiKXtpZihcImlucHV0XCI9PT1hfHxcImNoYW5nZVwiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gR2UoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBIZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpHZSxJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gSmUoYSxiKXtpZihIZShhLGIpKXJldHVybiEwO2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYXx8bnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYnx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9T2JqZWN0LmtleXMoYSksZD1PYmplY3Qua2V5cyhiKTtpZihjLmxlbmd0aCE9PWQubGVuZ3RoKXJldHVybiExO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIUllLmNhbGwoYixjW2RdKXx8IUhlKGFbY1tkXV0sYltjW2RdXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS2UoYSl7Zm9yKDthJiZhLmZpcnN0Q2hpbGQ7KWE9YS5maXJzdENoaWxkO3JldHVybiBhfVxuZnVuY3Rpb24gTGUoYSxiKXt2YXIgYz1LZShhKTthPTA7Zm9yKHZhciBkO2M7KXtpZigzPT09Yy5ub2RlVHlwZSl7ZD1hK2MudGV4dENvbnRlbnQubGVuZ3RoO2lmKGE8PWImJmQ+PWIpcmV0dXJue25vZGU6YyxvZmZzZXQ6Yi1hfTthPWR9YTp7Zm9yKDtjOyl7aWYoYy5uZXh0U2libGluZyl7Yz1jLm5leHRTaWJsaW5nO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGV9Yz12b2lkIDB9Yz1LZShjKX19ZnVuY3Rpb24gTWUoYSxiKXtyZXR1cm4gYSYmYj9hPT09Yj8hMDphJiYzPT09YS5ub2RlVHlwZT8hMTpiJiYzPT09Yi5ub2RlVHlwZT9NZShhLGIucGFyZW50Tm9kZSk6XCJjb250YWluc1wiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9XG5mdW5jdGlvbiBOZSgpe2Zvcih2YXIgYT13aW5kb3csYj1YYSgpO2IgaW5zdGFuY2VvZiBhLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBjPVwic3RyaW5nXCI9PT10eXBlb2YgYi5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZCl7Yz0hMX1pZihjKWE9Yi5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7Yj1YYShhLmRvY3VtZW50KX1yZXR1cm4gYn1mdW5jdGlvbiBPZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGImJihcImlucHV0XCI9PT1iJiYoXCJ0ZXh0XCI9PT1hLnR5cGV8fFwic2VhcmNoXCI9PT1hLnR5cGV8fFwidGVsXCI9PT1hLnR5cGV8fFwidXJsXCI9PT1hLnR5cGV8fFwicGFzc3dvcmRcIj09PWEudHlwZSl8fFwidGV4dGFyZWFcIj09PWJ8fFwidHJ1ZVwiPT09YS5jb250ZW50RWRpdGFibGUpfVxudmFyIFBlPWZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsUWU9bnVsbCxSZT1udWxsLFNlPW51bGwsVGU9ITE7XG5mdW5jdGlvbiBVZShhLGIsYyl7dmFyIGQ9Yy53aW5kb3c9PT1jP2MuZG9jdW1lbnQ6OT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQ7VGV8fG51bGw9PVFlfHxRZSE9PVhhKGQpfHwoZD1RZSxcInNlbGVjdGlvblN0YXJ0XCJpbiBkJiZPZShkKT9kPXtzdGFydDpkLnNlbGVjdGlvblN0YXJ0LGVuZDpkLnNlbGVjdGlvbkVuZH06KGQ9KGQub3duZXJEb2N1bWVudCYmZC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLGQ9e2FuY2hvck5vZGU6ZC5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpkLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ZC5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ZC5mb2N1c09mZnNldH0pLFNlJiZKZShTZSxkKXx8KFNlPWQsZD1vZShSZSxcIm9uU2VsZWN0XCIpLDA8ZC5sZW5ndGgmJihiPW5ldyB0ZChcIm9uU2VsZWN0XCIsXCJzZWxlY3RcIixudWxsLGIsYyksYS5wdXNoKHtldmVudDpiLGxpc3RlbmVyczpkfSksYi50YXJnZXQ9UWUpKSl9XG5QYyhcImNhbmNlbCBjYW5jZWwgY2xpY2sgY2xpY2sgY2xvc2UgY2xvc2UgY29udGV4dG1lbnUgY29udGV4dE1lbnUgY29weSBjb3B5IGN1dCBjdXQgYXV4Y2xpY2sgYXV4Q2xpY2sgZGJsY2xpY2sgZG91YmxlQ2xpY2sgZHJhZ2VuZCBkcmFnRW5kIGRyYWdzdGFydCBkcmFnU3RhcnQgZHJvcCBkcm9wIGZvY3VzaW4gZm9jdXMgZm9jdXNvdXQgYmx1ciBpbnB1dCBpbnB1dCBpbnZhbGlkIGludmFsaWQga2V5ZG93biBrZXlEb3duIGtleXByZXNzIGtleVByZXNzIGtleXVwIGtleVVwIG1vdXNlZG93biBtb3VzZURvd24gbW91c2V1cCBtb3VzZVVwIHBhc3RlIHBhc3RlIHBhdXNlIHBhdXNlIHBsYXkgcGxheSBwb2ludGVyY2FuY2VsIHBvaW50ZXJDYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlckRvd24gcG9pbnRlcnVwIHBvaW50ZXJVcCByYXRlY2hhbmdlIHJhdGVDaGFuZ2UgcmVzZXQgcmVzZXQgc2Vla2VkIHNlZWtlZCBzdWJtaXQgc3VibWl0IHRvdWNoY2FuY2VsIHRvdWNoQ2FuY2VsIHRvdWNoZW5kIHRvdWNoRW5kIHRvdWNoc3RhcnQgdG91Y2hTdGFydCB2b2x1bWVjaGFuZ2Ugdm9sdW1lQ2hhbmdlXCIuc3BsaXQoXCIgXCIpLFxuMCk7UGMoXCJkcmFnIGRyYWcgZHJhZ2VudGVyIGRyYWdFbnRlciBkcmFnZXhpdCBkcmFnRXhpdCBkcmFnbGVhdmUgZHJhZ0xlYXZlIGRyYWdvdmVyIGRyYWdPdmVyIG1vdXNlbW92ZSBtb3VzZU1vdmUgbW91c2VvdXQgbW91c2VPdXQgbW91c2VvdmVyIG1vdXNlT3ZlciBwb2ludGVybW92ZSBwb2ludGVyTW92ZSBwb2ludGVyb3V0IHBvaW50ZXJPdXQgcG9pbnRlcm92ZXIgcG9pbnRlck92ZXIgc2Nyb2xsIHNjcm9sbCB0b2dnbGUgdG9nZ2xlIHRvdWNobW92ZSB0b3VjaE1vdmUgd2hlZWwgd2hlZWxcIi5zcGxpdChcIiBcIiksMSk7UGMoT2MsMik7Zm9yKHZhciBWZT1cImNoYW5nZSBzZWxlY3Rpb25jaGFuZ2UgdGV4dElucHV0IGNvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGVcIi5zcGxpdChcIiBcIiksV2U9MDtXZTxWZS5sZW5ndGg7V2UrKylOYy5zZXQoVmVbV2VdLDApO2VhKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7XG5lYShcIm9uTW91c2VMZWF2ZVwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO2VhKFwib25Qb2ludGVyRW50ZXJcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7ZWEoXCJvblBvaW50ZXJMZWF2ZVwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtkYShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvblNlbGVjdFwiLFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uQmVmb3JlSW5wdXRcIixbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl0pO2RhKFwib25Db21wb3NpdGlvbkVuZFwiLFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO1xuZGEoXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO2RhKFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO3ZhciBYZT1cImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksWWU9bmV3IFNldChcImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZVwiLnNwbGl0KFwiIFwiKS5jb25jYXQoWGUpKTtcbmZ1bmN0aW9uIFplKGEsYixjKXt2YXIgZD1hLnR5cGV8fFwidW5rbm93bi1ldmVudFwiO2EuY3VycmVudFRhcmdldD1jO1liKGQsYix2b2lkIDAsYSk7YS5jdXJyZW50VGFyZ2V0PW51bGx9XG5mdW5jdGlvbiBzZShhLGIpe2I9MCE9PShiJjQpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLGU9ZC5ldmVudDtkPWQubGlzdGVuZXJzO2E6e3ZhciBmPXZvaWQgMDtpZihiKWZvcih2YXIgZz1kLmxlbmd0aC0xOzA8PWc7Zy0tKXt2YXIgaD1kW2ddLGs9aC5pbnN0YW5jZSxsPWguY3VycmVudFRhcmdldDtoPWgubGlzdGVuZXI7aWYoayE9PWYmJmUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO1plKGUsaCxsKTtmPWt9ZWxzZSBmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKXtoPWRbZ107az1oLmluc3RhbmNlO2w9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7WmUoZSxoLGwpO2Y9a319fWlmKFViKXRocm93IGE9VmIsVWI9ITEsVmI9bnVsbCxhO31cbmZ1bmN0aW9uIEcoYSxiKXt2YXIgYz0kZShiKSxkPWErXCJfX2J1YmJsZVwiO2MuaGFzKGQpfHwoYWYoYixhLDIsITEpLGMuYWRkKGQpKX12YXIgYmY9XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBjZihhKXthW2JmXXx8KGFbYmZdPSEwLGJhLmZvckVhY2goZnVuY3Rpb24oYil7WWUuaGFzKGIpfHxkZihiLCExLGEsbnVsbCk7ZGYoYiwhMCxhLG51bGwpfSkpfVxuZnVuY3Rpb24gZGYoYSxiLGMsZCl7dmFyIGU9NDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAsZj1jO1wic2VsZWN0aW9uY2hhbmdlXCI9PT1hJiY5IT09Yy5ub2RlVHlwZSYmKGY9Yy5vd25lckRvY3VtZW50KTtpZihudWxsIT09ZCYmIWImJlllLmhhcyhhKSl7aWYoXCJzY3JvbGxcIiE9PWEpcmV0dXJuO2V8PTI7Zj1kfXZhciBnPSRlKGYpLGg9YStcIl9fXCIrKGI/XCJjYXB0dXJlXCI6XCJidWJibGVcIik7Zy5oYXMoaCl8fChiJiYoZXw9NCksYWYoZixhLGUsYiksZy5hZGQoaCkpfVxuZnVuY3Rpb24gYWYoYSxiLGMsZCl7dmFyIGU9TmMuZ2V0KGIpO3N3aXRjaCh2b2lkIDA9PT1lPzI6ZSl7Y2FzZSAwOmU9Z2Q7YnJlYWs7Y2FzZSAxOmU9aWQ7YnJlYWs7ZGVmYXVsdDplPWhkfWM9ZS5iaW5kKG51bGwsYixjLGEpO2U9dm9pZCAwOyFQYnx8XCJ0b3VjaHN0YXJ0XCIhPT1iJiZcInRvdWNobW92ZVwiIT09YiYmXCJ3aGVlbFwiIT09Ynx8KGU9ITApO2Q/dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtjYXB0dXJlOiEwLHBhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITApOnZvaWQgMCE9PWU/YS5hZGRFdmVudExpc3RlbmVyKGIsYyx7cGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSl9XG5mdW5jdGlvbiBqZChhLGIsYyxkLGUpe3ZhciBmPWQ7aWYoMD09PShiJjEpJiYwPT09KGImMikmJm51bGwhPT1kKWE6Zm9yKDs7KXtpZihudWxsPT09ZClyZXR1cm47dmFyIGc9ZC50YWc7aWYoMz09PWd8fDQ9PT1nKXt2YXIgaD1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKGg9PT1lfHw4PT09aC5ub2RlVHlwZSYmaC5wYXJlbnROb2RlPT09ZSlicmVhaztpZig0PT09Zylmb3IoZz1kLnJldHVybjtudWxsIT09Zzspe3ZhciBrPWcudGFnO2lmKDM9PT1rfHw0PT09aylpZihrPWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8saz09PWV8fDg9PT1rLm5vZGVUeXBlJiZrLnBhcmVudE5vZGU9PT1lKXJldHVybjtnPWcucmV0dXJufWZvcig7bnVsbCE9PWg7KXtnPXdjKGgpO2lmKG51bGw9PT1nKXJldHVybjtrPWcudGFnO2lmKDU9PT1rfHw2PT09ayl7ZD1mPWc7Y29udGludWUgYX1oPWgucGFyZW50Tm9kZX19ZD1kLnJldHVybn1OYihmdW5jdGlvbigpe3ZhciBkPWYsZT14YihjKSxnPVtdO1xuYTp7dmFyIGg9TWMuZ2V0KGEpO2lmKHZvaWQgMCE9PWgpe3ZhciBrPXRkLHg9YTtzd2l0Y2goYSl7Y2FzZSBcImtleXByZXNzXCI6aWYoMD09PW9kKGMpKWJyZWFrIGE7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjprPVJkO2JyZWFrO2Nhc2UgXCJmb2N1c2luXCI6eD1cImZvY3VzXCI7az1GZDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjp4PVwiYmx1clwiO2s9RmQ7YnJlYWs7Y2FzZSBcImJlZm9yZWJsdXJcIjpjYXNlIFwiYWZ0ZXJibHVyXCI6az1GZDticmVhaztjYXNlIFwiY2xpY2tcIjppZigyPT09Yy5idXR0b24pYnJlYWsgYTtjYXNlIFwiYXV4Y2xpY2tcIjpjYXNlIFwiZGJsY2xpY2tcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcIm1vdXNlbW92ZVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcIm1vdXNlb3V0XCI6Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJjb250ZXh0bWVudVwiOms9QmQ7YnJlYWs7Y2FzZSBcImRyYWdcIjpjYXNlIFwiZHJhZ2VuZFwiOmNhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2V4aXRcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6Y2FzZSBcImRyYWdvdmVyXCI6Y2FzZSBcImRyYWdzdGFydFwiOmNhc2UgXCJkcm9wXCI6az1cbkRkO2JyZWFrO2Nhc2UgXCJ0b3VjaGNhbmNlbFwiOmNhc2UgXCJ0b3VjaGVuZFwiOmNhc2UgXCJ0b3VjaG1vdmVcIjpjYXNlIFwidG91Y2hzdGFydFwiOms9VmQ7YnJlYWs7Y2FzZSBJYzpjYXNlIEpjOmNhc2UgS2M6az1IZDticmVhaztjYXNlIExjOms9WGQ7YnJlYWs7Y2FzZSBcInNjcm9sbFwiOms9dmQ7YnJlYWs7Y2FzZSBcIndoZWVsXCI6az1aZDticmVhaztjYXNlIFwiY29weVwiOmNhc2UgXCJjdXRcIjpjYXNlIFwicGFzdGVcIjprPUpkO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwicG9pbnRlcmNhbmNlbFwiOmNhc2UgXCJwb2ludGVyZG93blwiOmNhc2UgXCJwb2ludGVybW92ZVwiOmNhc2UgXCJwb2ludGVyb3V0XCI6Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJ1cFwiOms9VGR9dmFyIHc9MCE9PShiJjQpLHo9IXcmJlwic2Nyb2xsXCI9PT1hLHU9dz9udWxsIT09aD9oK1wiQ2FwdHVyZVwiOm51bGw6aDt3PVtdO2Zvcih2YXIgdD1kLHE7bnVsbCE9PVxudDspe3E9dDt2YXIgdj1xLnN0YXRlTm9kZTs1PT09cS50YWcmJm51bGwhPT12JiYocT12LG51bGwhPT11JiYodj1PYih0LHUpLG51bGwhPXYmJncucHVzaChlZih0LHYscSkpKSk7aWYoeilicmVhazt0PXQucmV0dXJufTA8dy5sZW5ndGgmJihoPW5ldyBrKGgseCxudWxsLGMsZSksZy5wdXNoKHtldmVudDpoLGxpc3RlbmVyczp3fSkpfX1pZigwPT09KGImNykpe2E6e2g9XCJtb3VzZW92ZXJcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWE7az1cIm1vdXNlb3V0XCI9PT1hfHxcInBvaW50ZXJvdXRcIj09PWE7aWYoaCYmMD09PShiJjE2KSYmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLmZyb21FbGVtZW50KSYmKHdjKHgpfHx4W2ZmXSkpYnJlYWsgYTtpZihrfHxoKXtoPWUud2luZG93PT09ZT9lOihoPWUub3duZXJEb2N1bWVudCk/aC5kZWZhdWx0Vmlld3x8aC5wYXJlbnRXaW5kb3c6d2luZG93O2lmKGspe2lmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLnRvRWxlbWVudCxrPWQseD14P3djKHgpOm51bGwsbnVsbCE9PVxueCYmKHo9WmIoeCkseCE9PXp8fDUhPT14LnRhZyYmNiE9PXgudGFnKSl4PW51bGx9ZWxzZSBrPW51bGwseD1kO2lmKGshPT14KXt3PUJkO3Y9XCJvbk1vdXNlTGVhdmVcIjt1PVwib25Nb3VzZUVudGVyXCI7dD1cIm1vdXNlXCI7aWYoXCJwb2ludGVyb3V0XCI9PT1hfHxcInBvaW50ZXJvdmVyXCI9PT1hKXc9VGQsdj1cIm9uUG9pbnRlckxlYXZlXCIsdT1cIm9uUG9pbnRlckVudGVyXCIsdD1cInBvaW50ZXJcIjt6PW51bGw9PWs/aDp1ZShrKTtxPW51bGw9PXg/aDp1ZSh4KTtoPW5ldyB3KHYsdCtcImxlYXZlXCIsayxjLGUpO2gudGFyZ2V0PXo7aC5yZWxhdGVkVGFyZ2V0PXE7dj1udWxsO3djKGUpPT09ZCYmKHc9bmV3IHcodSx0K1wiZW50ZXJcIix4LGMsZSksdy50YXJnZXQ9cSx3LnJlbGF0ZWRUYXJnZXQ9eix2PXcpO3o9djtpZihrJiZ4KWI6e3c9azt1PXg7dD0wO2ZvcihxPXc7cTtxPWdmKHEpKXQrKztxPTA7Zm9yKHY9dTt2O3Y9Z2YodikpcSsrO2Zvcig7MDx0LXE7KXc9Z2YodyksdC0tO2Zvcig7MDxxLXQ7KXU9XG5nZih1KSxxLS07Zm9yKDt0LS07KXtpZih3PT09dXx8bnVsbCE9PXUmJnc9PT11LmFsdGVybmF0ZSlicmVhayBiO3c9Z2Yodyk7dT1nZih1KX13PW51bGx9ZWxzZSB3PW51bGw7bnVsbCE9PWsmJmhmKGcsaCxrLHcsITEpO251bGwhPT14JiZudWxsIT09eiYmaGYoZyx6LHgsdywhMCl9fX1hOntoPWQ/dWUoZCk6d2luZG93O2s9aC5ub2RlTmFtZSYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKFwic2VsZWN0XCI9PT1rfHxcImlucHV0XCI9PT1rJiZcImZpbGVcIj09PWgudHlwZSl2YXIgSj12ZTtlbHNlIGlmKG1lKGgpKWlmKHdlKUo9RmU7ZWxzZXtKPURlO3ZhciBLPUNlfWVsc2Uoaz1oLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ay50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09aC50eXBlfHxcInJhZGlvXCI9PT1oLnR5cGUpJiYoSj1FZSk7aWYoSiYmKEo9SihhLGQpKSl7bmUoZyxKLGMsZSk7YnJlYWsgYX1LJiZLKGEsaCxkKTtcImZvY3Vzb3V0XCI9PT1hJiYoSz1oLl93cmFwcGVyU3RhdGUpJiZcbksuY29udHJvbGxlZCYmXCJudW1iZXJcIj09PWgudHlwZSYmYmIoaCxcIm51bWJlclwiLGgudmFsdWUpfUs9ZD91ZShkKTp3aW5kb3c7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6aWYobWUoSyl8fFwidHJ1ZVwiPT09Sy5jb250ZW50RWRpdGFibGUpUWU9SyxSZT1kLFNlPW51bGw7YnJlYWs7Y2FzZSBcImZvY3Vzb3V0XCI6U2U9UmU9UWU9bnVsbDticmVhaztjYXNlIFwibW91c2Vkb3duXCI6VGU9ITA7YnJlYWs7Y2FzZSBcImNvbnRleHRtZW51XCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwiZHJhZ2VuZFwiOlRlPSExO1VlKGcsYyxlKTticmVhaztjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6aWYoUGUpYnJlYWs7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjpVZShnLGMsZSl9dmFyIFE7aWYoYWUpYjp7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6dmFyIEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIjticmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOkw9XCJvbkNvbXBvc2l0aW9uRW5kXCI7YnJlYWsgYjtcbmNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOkw9XCJvbkNvbXBvc2l0aW9uVXBkYXRlXCI7YnJlYWsgYn1MPXZvaWQgMH1lbHNlIGllP2dlKGEsYykmJihMPVwib25Db21wb3NpdGlvbkVuZFwiKTpcImtleWRvd25cIj09PWEmJjIyOT09PWMua2V5Q29kZSYmKEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7TCYmKGRlJiZcImtvXCIhPT1jLmxvY2FsZSYmKGllfHxcIm9uQ29tcG9zaXRpb25TdGFydFwiIT09TD9cIm9uQ29tcG9zaXRpb25FbmRcIj09PUwmJmllJiYoUT1uZCgpKTooa2Q9ZSxsZD1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxpZT0hMCkpLEs9b2UoZCxMKSwwPEsubGVuZ3RoJiYoTD1uZXcgTGQoTCxhLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OkwsbGlzdGVuZXJzOkt9KSxRP0wuZGF0YT1ROihRPWhlKGMpLG51bGwhPT1RJiYoTC5kYXRhPVEpKSkpO2lmKFE9Y2U/amUoYSxjKTprZShhLGMpKWQ9b2UoZCxcIm9uQmVmb3JlSW5wdXRcIiksMDxkLmxlbmd0aCYmKGU9bmV3IExkKFwib25CZWZvcmVJbnB1dFwiLFxuXCJiZWZvcmVpbnB1dFwiLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmUsbGlzdGVuZXJzOmR9KSxlLmRhdGE9USl9c2UoZyxiKX0pfWZ1bmN0aW9uIGVmKGEsYixjKXtyZXR1cm57aW5zdGFuY2U6YSxsaXN0ZW5lcjpiLGN1cnJlbnRUYXJnZXQ6Y319ZnVuY3Rpb24gb2UoYSxiKXtmb3IodmFyIGM9YitcIkNhcHR1cmVcIixkPVtdO251bGwhPT1hOyl7dmFyIGU9YSxmPWUuc3RhdGVOb2RlOzU9PT1lLnRhZyYmbnVsbCE9PWYmJihlPWYsZj1PYihhLGMpLG51bGwhPWYmJmQudW5zaGlmdChlZihhLGYsZSkpLGY9T2IoYSxiKSxudWxsIT1mJiZkLnB1c2goZWYoYSxmLGUpKSk7YT1hLnJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiBnZihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtkbyBhPWEucmV0dXJuO3doaWxlKGEmJjUhPT1hLnRhZyk7cmV0dXJuIGE/YTpudWxsfVxuZnVuY3Rpb24gaGYoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yi5fcmVhY3ROYW1lLGc9W107bnVsbCE9PWMmJmMhPT1kOyl7dmFyIGg9YyxrPWguYWx0ZXJuYXRlLGw9aC5zdGF0ZU5vZGU7aWYobnVsbCE9PWsmJms9PT1kKWJyZWFrOzU9PT1oLnRhZyYmbnVsbCE9PWwmJihoPWwsZT8oaz1PYihjLGYpLG51bGwhPWsmJmcudW5zaGlmdChlZihjLGssaCkpKTplfHwoaz1PYihjLGYpLG51bGwhPWsmJmcucHVzaChlZihjLGssaCkpKSk7Yz1jLnJldHVybn0wIT09Zy5sZW5ndGgmJmEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6Z30pfWZ1bmN0aW9uIGpmKCl7fXZhciBrZj1udWxsLGxmPW51bGw7ZnVuY3Rpb24gbWYoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImJ1dHRvblwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwidGV4dGFyZWFcIjpyZXR1cm4hIWIuYXV0b0ZvY3VzfXJldHVybiExfVxuZnVuY3Rpb24gbmYoYSxiKXtyZXR1cm5cInRleHRhcmVhXCI9PT1hfHxcIm9wdGlvblwiPT09YXx8XCJub3NjcmlwdFwiPT09YXx8XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm51bWJlclwiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBvZj1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxwZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gcWYoYSl7MT09PWEubm9kZVR5cGU/YS50ZXh0Q29udGVudD1cIlwiOjk9PT1hLm5vZGVUeXBlJiYoYT1hLmJvZHksbnVsbCE9YSYmKGEudGV4dENvbnRlbnQ9XCJcIikpfVxuZnVuY3Rpb24gcmYoYSl7Zm9yKDtudWxsIT1hO2E9YS5uZXh0U2libGluZyl7dmFyIGI9YS5ub2RlVHlwZTtpZigxPT09Ynx8Mz09PWIpYnJlYWt9cmV0dXJuIGF9ZnVuY3Rpb24gc2YoYSl7YT1hLnByZXZpb3VzU2libGluZztmb3IodmFyIGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihcIiRcIj09PWN8fFwiJCFcIj09PWN8fFwiJD9cIj09PWMpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlXCIvJFwiPT09YyYmYisrfWE9YS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHRmPTA7ZnVuY3Rpb24gdWYoYSl7cmV0dXJueyQkdHlwZW9mOkdhLHRvU3RyaW5nOmEsdmFsdWVPZjphfX12YXIgdmY9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksd2Y9XCJfX3JlYWN0RmliZXIkXCIrdmYseGY9XCJfX3JlYWN0UHJvcHMkXCIrdmYsZmY9XCJfX3JlYWN0Q29udGFpbmVyJFwiK3ZmLHlmPVwiX19yZWFjdEV2ZW50cyRcIit2ZjtcbmZ1bmN0aW9uIHdjKGEpe3ZhciBiPWFbd2ZdO2lmKGIpcmV0dXJuIGI7Zm9yKHZhciBjPWEucGFyZW50Tm9kZTtjOyl7aWYoYj1jW2ZmXXx8Y1t3Zl0pe2M9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWIuY2hpbGR8fG51bGwhPT1jJiZudWxsIT09Yy5jaGlsZClmb3IoYT1zZihhKTtudWxsIT09YTspe2lmKGM9YVt3Zl0pcmV0dXJuIGM7YT1zZihhKX1yZXR1cm4gYn1hPWM7Yz1hLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2IoYSl7YT1hW3dmXXx8YVtmZl07cmV0dXJuIWF8fDUhPT1hLnRhZyYmNiE9PWEudGFnJiYxMyE9PWEudGFnJiYzIT09YS50YWc/bnVsbDphfWZ1bmN0aW9uIHVlKGEpe2lmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKXJldHVybiBhLnN0YXRlTm9kZTt0aHJvdyBFcnJvcih5KDMzKSk7fWZ1bmN0aW9uIERiKGEpe3JldHVybiBhW3hmXXx8bnVsbH1cbmZ1bmN0aW9uICRlKGEpe3ZhciBiPWFbeWZdO3ZvaWQgMD09PWImJihiPWFbeWZdPW5ldyBTZXQpO3JldHVybiBifXZhciB6Zj1bXSxBZj0tMTtmdW5jdGlvbiBCZihhKXtyZXR1cm57Y3VycmVudDphfX1mdW5jdGlvbiBIKGEpezA+QWZ8fChhLmN1cnJlbnQ9emZbQWZdLHpmW0FmXT1udWxsLEFmLS0pfWZ1bmN0aW9uIEkoYSxiKXtBZisrO3pmW0FmXT1hLmN1cnJlbnQ7YS5jdXJyZW50PWJ9dmFyIENmPXt9LE09QmYoQ2YpLE49QmYoITEpLERmPUNmO1xuZnVuY3Rpb24gRWYoYSxiKXt2YXIgYz1hLnR5cGUuY29udGV4dFR5cGVzO2lmKCFjKXJldHVybiBDZjt2YXIgZD1hLnN0YXRlTm9kZTtpZihkJiZkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT1iKXJldHVybiBkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBlPXt9LGY7Zm9yKGYgaW4gYyllW2ZdPWJbZl07ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWIsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1lKTtyZXR1cm4gZX1mdW5jdGlvbiBGZihhKXthPWEuY2hpbGRDb250ZXh0VHlwZXM7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfWZ1bmN0aW9uIEdmKCl7SChOKTtIKE0pfWZ1bmN0aW9uIEhmKGEsYixjKXtpZihNLmN1cnJlbnQhPT1DZil0aHJvdyBFcnJvcih5KDE2OCkpO0koTSxiKTtJKE4sYyl9XG5mdW5jdGlvbiBJZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7YT1iLmNoaWxkQ29udGV4dFR5cGVzO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBkLmdldENoaWxkQ29udGV4dClyZXR1cm4gYztkPWQuZ2V0Q2hpbGRDb250ZXh0KCk7Zm9yKHZhciBlIGluIGQpaWYoIShlIGluIGEpKXRocm93IEVycm9yKHkoMTA4LFJhKGIpfHxcIlVua25vd25cIixlKSk7cmV0dXJuIG0oe30sYyxkKX1mdW5jdGlvbiBKZihhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8Q2Y7RGY9TS5jdXJyZW50O0koTSxhKTtJKE4sTi5jdXJyZW50KTtyZXR1cm4hMH1mdW5jdGlvbiBLZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoeSgxNjkpKTtjPyhhPUlmKGEsYixEZiksZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1hLEgoTiksSChNKSxJKE0sYSkpOkgoTik7SShOLGMpfVxudmFyIExmPW51bGwsTWY9bnVsbCxOZj1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxPZj1yLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssUGY9ci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxRZj1yLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFJmPXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFNmPXIudW5zdGFibGVfbm93LFRmPXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsVWY9ci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxWZj1yLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFdmPXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksWGY9ci51bnN0YWJsZV9Mb3dQcmlvcml0eSxZZj1yLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxaZj17fSwkZj12b2lkIDAhPT1SZj9SZjpmdW5jdGlvbigpe30sYWc9bnVsbCxiZz1udWxsLGNnPSExLGRnPVNmKCksTz0xRTQ+ZGc/U2Y6ZnVuY3Rpb24oKXtyZXR1cm4gU2YoKS1kZ307XG5mdW5jdGlvbiBlZygpe3N3aXRjaChUZigpKXtjYXNlIFVmOnJldHVybiA5OTtjYXNlIFZmOnJldHVybiA5ODtjYXNlIFdmOnJldHVybiA5NztjYXNlIFhmOnJldHVybiA5NjtjYXNlIFlmOnJldHVybiA5NTtkZWZhdWx0OnRocm93IEVycm9yKHkoMzMyKSk7fX1mdW5jdGlvbiBmZyhhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gVWY7Y2FzZSA5ODpyZXR1cm4gVmY7Y2FzZSA5NzpyZXR1cm4gV2Y7Y2FzZSA5NjpyZXR1cm4gWGY7Y2FzZSA5NTpyZXR1cm4gWWY7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDMzMikpO319ZnVuY3Rpb24gZ2coYSxiKXthPWZnKGEpO3JldHVybiBOZihhLGIpfWZ1bmN0aW9uIGhnKGEsYixjKXthPWZnKGEpO3JldHVybiBPZihhLGIsYyl9ZnVuY3Rpb24gaWcoKXtpZihudWxsIT09Ymcpe3ZhciBhPWJnO2JnPW51bGw7UGYoYSl9amcoKX1cbmZ1bmN0aW9uIGpnKCl7aWYoIWNnJiZudWxsIT09YWcpe2NnPSEwO3ZhciBhPTA7dHJ5e3ZhciBiPWFnO2dnKDk5LGZ1bmN0aW9uKCl7Zm9yKDthPGIubGVuZ3RoO2ErKyl7dmFyIGM9YlthXTtkbyBjPWMoITApO3doaWxlKG51bGwhPT1jKX19KTthZz1udWxsfWNhdGNoKGMpe3Rocm93IG51bGwhPT1hZyYmKGFnPWFnLnNsaWNlKGErMSkpLE9mKFVmLGlnKSxjO31maW5hbGx5e2NnPSExfX19dmFyIGtnPXJhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIGxnKGEsYil7aWYoYSYmYS5kZWZhdWx0UHJvcHMpe2I9bSh7fSxiKTthPWEuZGVmYXVsdFByb3BzO2Zvcih2YXIgYyBpbiBhKXZvaWQgMD09PWJbY10mJihiW2NdPWFbY10pO3JldHVybiBifXJldHVybiBifXZhciBtZz1CZihudWxsKSxuZz1udWxsLG9nPW51bGwscGc9bnVsbDtmdW5jdGlvbiBxZygpe3BnPW9nPW5nPW51bGx9XG5mdW5jdGlvbiByZyhhKXt2YXIgYj1tZy5jdXJyZW50O0gobWcpO2EudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPWJ9ZnVuY3Rpb24gc2coYSxiKXtmb3IoO251bGwhPT1hOyl7dmFyIGM9YS5hbHRlcm5hdGU7aWYoKGEuY2hpbGRMYW5lcyZiKT09PWIpaWYobnVsbD09PWN8fChjLmNoaWxkTGFuZXMmYik9PT1iKWJyZWFrO2Vsc2UgYy5jaGlsZExhbmVzfD1iO2Vsc2UgYS5jaGlsZExhbmVzfD1iLG51bGwhPT1jJiYoYy5jaGlsZExhbmVzfD1iKTthPWEucmV0dXJufX1mdW5jdGlvbiB0ZyhhLGIpe25nPWE7cGc9b2c9bnVsbDthPWEuZGVwZW5kZW5jaWVzO251bGwhPT1hJiZudWxsIT09YS5maXJzdENvbnRleHQmJigwIT09KGEubGFuZXMmYikmJih1Zz0hMCksYS5maXJzdENvbnRleHQ9bnVsbCl9XG5mdW5jdGlvbiB2ZyhhLGIpe2lmKHBnIT09YSYmITEhPT1iJiYwIT09Yil7aWYoXCJudW1iZXJcIiE9PXR5cGVvZiBifHwxMDczNzQxODIzPT09YilwZz1hLGI9MTA3Mzc0MTgyMztiPXtjb250ZXh0OmEsb2JzZXJ2ZWRCaXRzOmIsbmV4dDpudWxsfTtpZihudWxsPT09b2cpe2lmKG51bGw9PT1uZyl0aHJvdyBFcnJvcih5KDMwOCkpO29nPWI7bmcuZGVwZW5kZW5jaWVzPXtsYW5lczowLGZpcnN0Q29udGV4dDpiLHJlc3BvbmRlcnM6bnVsbH19ZWxzZSBvZz1vZy5uZXh0PWJ9cmV0dXJuIGEuX2N1cnJlbnRWYWx1ZX12YXIgd2c9ITE7ZnVuY3Rpb24geGcoYSl7YS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsfSxlZmZlY3RzOm51bGx9fVxuZnVuY3Rpb24geWcoYSxiKXthPWEudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT09PWEmJihiLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6YS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmEuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmEubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmEuc2hhcmVkLGVmZmVjdHM6YS5lZmZlY3RzfSl9ZnVuY3Rpb24gemcoYSxiKXtyZXR1cm57ZXZlbnRUaW1lOmEsbGFuZTpiLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gQWcoYSxiKXthPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWEpe2E9YS5zaGFyZWQ7dmFyIGM9YS5wZW5kaW5nO251bGw9PT1jP2IubmV4dD1iOihiLm5leHQ9Yy5uZXh0LGMubmV4dD1iKTthLnBlbmRpbmc9Yn19XG5mdW5jdGlvbiBCZyhhLGIpe3ZhciBjPWEudXBkYXRlUXVldWUsZD1hLmFsdGVybmF0ZTtpZihudWxsIT09ZCYmKGQ9ZC51cGRhdGVRdWV1ZSxjPT09ZCkpe3ZhciBlPW51bGwsZj1udWxsO2M9Yy5maXJzdEJhc2VVcGRhdGU7aWYobnVsbCE9PWMpe2Rve3ZhciBnPXtldmVudFRpbWU6Yy5ldmVudFRpbWUsbGFuZTpjLmxhbmUsdGFnOmMudGFnLHBheWxvYWQ6Yy5wYXlsb2FkLGNhbGxiYWNrOmMuY2FsbGJhY2ssbmV4dDpudWxsfTtudWxsPT09Zj9lPWY9ZzpmPWYubmV4dD1nO2M9Yy5uZXh0fXdoaWxlKG51bGwhPT1jKTtudWxsPT09Zj9lPWY9YjpmPWYubmV4dD1ifWVsc2UgZT1mPWI7Yz17YmFzZVN0YXRlOmQuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTplLGxhc3RCYXNlVXBkYXRlOmYsc2hhcmVkOmQuc2hhcmVkLGVmZmVjdHM6ZC5lZmZlY3RzfTthLnVwZGF0ZVF1ZXVlPWM7cmV0dXJufWE9Yy5sYXN0QmFzZVVwZGF0ZTtudWxsPT09YT9jLmZpcnN0QmFzZVVwZGF0ZT1iOmEubmV4dD1cbmI7Yy5sYXN0QmFzZVVwZGF0ZT1ifVxuZnVuY3Rpb24gQ2coYSxiLGMsZCl7dmFyIGU9YS51cGRhdGVRdWV1ZTt3Zz0hMTt2YXIgZj1lLmZpcnN0QmFzZVVwZGF0ZSxnPWUubGFzdEJhc2VVcGRhdGUsaD1lLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1oKXtlLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIGs9aCxsPWsubmV4dDtrLm5leHQ9bnVsbDtudWxsPT09Zz9mPWw6Zy5uZXh0PWw7Zz1rO3ZhciBuPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1uKXtuPW4udXBkYXRlUXVldWU7dmFyIEE9bi5sYXN0QmFzZVVwZGF0ZTtBIT09ZyYmKG51bGw9PT1BP24uZmlyc3RCYXNlVXBkYXRlPWw6QS5uZXh0PWwsbi5sYXN0QmFzZVVwZGF0ZT1rKX19aWYobnVsbCE9PWYpe0E9ZS5iYXNlU3RhdGU7Zz0wO249bD1rPW51bGw7ZG97aD1mLmxhbmU7dmFyIHA9Zi5ldmVudFRpbWU7aWYoKGQmaCk9PT1oKXtudWxsIT09biYmKG49bi5uZXh0PXtldmVudFRpbWU6cCxsYW5lOjAsdGFnOmYudGFnLHBheWxvYWQ6Zi5wYXlsb2FkLGNhbGxiYWNrOmYuY2FsbGJhY2ssXG5uZXh0Om51bGx9KTthOnt2YXIgQz1hLHg9ZjtoPWI7cD1jO3N3aXRjaCh4LnRhZyl7Y2FzZSAxOkM9eC5wYXlsb2FkO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBDKXtBPUMuY2FsbChwLEEsaCk7YnJlYWsgYX1BPUM7YnJlYWsgYTtjYXNlIDM6Qy5mbGFncz1DLmZsYWdzJi00MDk3fDY0O2Nhc2UgMDpDPXgucGF5bG9hZDtoPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDP0MuY2FsbChwLEEsaCk6QztpZihudWxsPT09aHx8dm9pZCAwPT09aClicmVhayBhO0E9bSh7fSxBLGgpO2JyZWFrIGE7Y2FzZSAyOndnPSEwfX1udWxsIT09Zi5jYWxsYmFjayYmKGEuZmxhZ3N8PTMyLGg9ZS5lZmZlY3RzLG51bGw9PT1oP2UuZWZmZWN0cz1bZl06aC5wdXNoKGYpKX1lbHNlIHA9e2V2ZW50VGltZTpwLGxhbmU6aCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT1uPyhsPW49cCxrPUEpOm49bi5uZXh0PXAsZ3w9aDtmPWYubmV4dDtpZihudWxsPT09XG5mKWlmKGg9ZS5zaGFyZWQucGVuZGluZyxudWxsPT09aClicmVhaztlbHNlIGY9aC5uZXh0LGgubmV4dD1udWxsLGUubGFzdEJhc2VVcGRhdGU9aCxlLnNoYXJlZC5wZW5kaW5nPW51bGx9d2hpbGUoMSk7bnVsbD09PW4mJihrPUEpO2UuYmFzZVN0YXRlPWs7ZS5maXJzdEJhc2VVcGRhdGU9bDtlLmxhc3RCYXNlVXBkYXRlPW47RGd8PWc7YS5sYW5lcz1nO2EubWVtb2l6ZWRTdGF0ZT1BfX1mdW5jdGlvbiBFZyhhLGIsYyl7YT1iLmVmZmVjdHM7Yi5lZmZlY3RzPW51bGw7aWYobnVsbCE9PWEpZm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXSxlPWQuY2FsbGJhY2s7aWYobnVsbCE9PWUpe2QuY2FsbGJhY2s9bnVsbDtkPWM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGUpdGhyb3cgRXJyb3IoeSgxOTEsZSkpO2UuY2FsbChkKX19fXZhciBGZz0obmV3IGFhLkNvbXBvbmVudCkucmVmcztcbmZ1bmN0aW9uIEdnKGEsYixjLGQpe2I9YS5tZW1vaXplZFN0YXRlO2M9YyhkLGIpO2M9bnVsbD09PWN8fHZvaWQgMD09PWM/YjptKHt9LGIsYyk7YS5tZW1vaXplZFN0YXRlPWM7MD09PWEubGFuZXMmJihhLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1jKX1cbnZhciBLZz17aXNNb3VudGVkOmZ1bmN0aW9uKGEpe3JldHVybihhPWEuX3JlYWN0SW50ZXJuYWxzKT9aYihhKT09PWE6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtBZyhhLGYpO0pnKGEsZSxkKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YudGFnPTE7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0FnKGEsZik7SmcoYSxlLGQpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oYSxiKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBjPUhnKCksZD1JZyhhKSxlPXpnKGMsZCk7ZS50YWc9Mjt2b2lkIDAhPT1iJiZudWxsIT09YiYmKGUuY2FsbGJhY2s9XG5iKTtBZyhhLGUpO0pnKGEsZCxjKX19O2Z1bmN0aW9uIExnKGEsYixjLGQsZSxmLGcpe2E9YS5zdGF0ZU5vZGU7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Euc2hvdWxkQ29tcG9uZW50VXBkYXRlKGQsZixnKTpiLnByb3RvdHlwZSYmYi5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IUplKGMsZCl8fCFKZShlLGYpOiEwfVxuZnVuY3Rpb24gTWcoYSxiLGMpe3ZhciBkPSExLGU9Q2Y7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2Y9dmcoZik6KGU9RmYoYik/RGY6TS5jdXJyZW50LGQ9Yi5jb250ZXh0VHlwZXMsZj0oZD1udWxsIT09ZCYmdm9pZCAwIT09ZCk/RWYoYSxlKTpDZik7Yj1uZXcgYihjLGYpO2EubWVtb2l6ZWRTdGF0ZT1udWxsIT09Yi5zdGF0ZSYmdm9pZCAwIT09Yi5zdGF0ZT9iLnN0YXRlOm51bGw7Yi51cGRhdGVyPUtnO2Euc3RhdGVOb2RlPWI7Yi5fcmVhY3RJbnRlcm5hbHM9YTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWYpO3JldHVybiBifVxuZnVuY3Rpb24gTmcoYSxiLGMsZCl7YT1iLnN0YXRlO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7Yi5zdGF0ZSE9PWEmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoYixiLnN0YXRlLG51bGwpfVxuZnVuY3Rpb24gT2coYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZU5vZGU7ZS5wcm9wcz1jO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2UucmVmcz1GZzt4ZyhhKTt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/ZS5jb250ZXh0PXZnKGYpOihmPUZmKGIpP0RmOk0uY3VycmVudCxlLmNvbnRleHQ9RWYoYSxmKSk7Q2coYSxjLGUsZCk7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7Zj1iLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZiYmKEdnKGEsYixmLGMpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnR8fFxuKGI9ZS5zdGF0ZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnQmJmUuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksYiE9PWUuc3RhdGUmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpLENnKGEsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnREaWRNb3VudCYmKGEuZmxhZ3N8PTQpfXZhciBQZz1BcnJheS5pc0FycmF5O1xuZnVuY3Rpb24gUWcoYSxiLGMpe2E9Yy5yZWY7aWYobnVsbCE9PWEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZcIm9iamVjdFwiIT09dHlwZW9mIGEpe2lmKGMuX293bmVyKXtjPWMuX293bmVyO2lmKGMpe2lmKDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDMwOSkpO3ZhciBkPWMuc3RhdGVOb2RlfWlmKCFkKXRocm93IEVycm9yKHkoMTQ3LGEpKTt2YXIgZT1cIlwiK2E7aWYobnVsbCE9PWImJm51bGwhPT1iLnJlZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIucmVmJiZiLnJlZi5fc3RyaW5nUmVmPT09ZSlyZXR1cm4gYi5yZWY7Yj1mdW5jdGlvbihhKXt2YXIgYj1kLnJlZnM7Yj09PUZnJiYoYj1kLnJlZnM9e30pO251bGw9PT1hP2RlbGV0ZSBiW2VdOmJbZV09YX07Yi5fc3RyaW5nUmVmPWU7cmV0dXJuIGJ9aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKHkoMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKHkoMjkwLGEpKTt9cmV0dXJuIGF9XG5mdW5jdGlvbiBSZyhhLGIpe2lmKFwidGV4dGFyZWFcIiE9PWEudHlwZSl0aHJvdyBFcnJvcih5KDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhiKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO31cbmZ1bmN0aW9uIFNnKGEpe2Z1bmN0aW9uIGIoYixjKXtpZihhKXt2YXIgZD1iLmxhc3RFZmZlY3Q7bnVsbCE9PWQ/KGQubmV4dEVmZmVjdD1jLGIubGFzdEVmZmVjdD1jKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1jO2MubmV4dEVmZmVjdD1udWxsO2MuZmxhZ3M9OH19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIpe2E9VGcoYSxiKTthLmluZGV4PTA7YS5zaWJsaW5nPW51bGw7cmV0dXJuIGF9ZnVuY3Rpb24gZihiLGMsZCl7Yi5pbmRleD1kO2lmKCFhKXJldHVybiBjO2Q9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWQpcmV0dXJuIGQ9ZC5pbmRleCxkPGM/KGIuZmxhZ3M9MixcbmMpOmQ7Yi5mbGFncz0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmbnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5mbGFncz0yKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYixjLGQpe2lmKG51bGw9PT1ifHw2IT09Yi50YWcpcmV0dXJuIGI9VWcoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXtpZihudWxsIT09YiYmYi5lbGVtZW50VHlwZT09PWMudHlwZSlyZXR1cm4gZD1lKGIsYy5wcm9wcyksZC5yZWY9UWcoYSxiLGMpLGQucmV0dXJuPWEsZDtkPVZnKGMudHlwZSxjLmtleSxjLnByb3BzLG51bGwsYS5tb2RlLGQpO2QucmVmPVFnKGEsYixjKTtkLnJldHVybj1hO3JldHVybiBkfWZ1bmN0aW9uIGwoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDQhPT1iLnRhZ3x8Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWMuY29udGFpbmVySW5mb3x8Yi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1jLmltcGxlbWVudGF0aW9uKXJldHVybiBiPVxuV2coYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMuY2hpbGRyZW58fFtdKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIG4oYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8NyE9PWIudGFnKXJldHVybiBiPVhnKGMsYS5tb2RlLGQsZiksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gQShhLGIsYyl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBifHxcIm51bWJlclwiPT09dHlwZW9mIGIpcmV0dXJuIGI9VWcoXCJcIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBiJiZudWxsIT09Yil7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGM9VmcoYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxhLm1vZGUsYyksYy5yZWY9UWcoYSxudWxsLGIpLGMucmV0dXJuPWEsYztjYXNlIHRhOnJldHVybiBiPVdnKGIsYS5tb2RlLGMpLGIucmV0dXJuPWEsYn1pZihQZyhiKXx8TGEoYikpcmV0dXJuIGI9WGcoYixcbmEubW9kZSxjLG51bGwpLGIucmV0dXJuPWEsYjtSZyhhLGIpfXJldHVybiBudWxsfWZ1bmN0aW9uIHAoYSxiLGMsZCl7dmFyIGU9bnVsbCE9PWI/Yi5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGN8fFwibnVtYmVyXCI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYixcIlwiK2MsZCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGMua2V5PT09ZT9jLnR5cGU9PT11YT9uKGEsYixjLnByb3BzLmNoaWxkcmVuLGQsZSk6ayhhLGIsYyxkKTpudWxsO2Nhc2UgdGE6cmV0dXJuIGMua2V5PT09ZT9sKGEsYixjLGQpOm51bGx9aWYoUGcoYyl8fExhKGMpKXJldHVybiBudWxsIT09ZT9udWxsOm4oYSxiLGMsZCxudWxsKTtSZyhhLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIEMoYSxiLGMsZCxlKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGR8fFwibnVtYmVyXCI9PT10eXBlb2YgZClyZXR1cm4gYT1hLmdldChjKXx8XG5udWxsLGgoYixhLFwiXCIrZCxlKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsZC50eXBlPT09dWE/bihiLGEsZC5wcm9wcy5jaGlsZHJlbixlLGQua2V5KTprKGIsYSxkLGUpO2Nhc2UgdGE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGwoYixhLGQsZSl9aWYoUGcoZCl8fExhKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLG4oYixhLGQsZSxudWxsKTtSZyhiLGQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHgoZSxnLGgsayl7Zm9yKHZhciBsPW51bGwsdD1udWxsLHU9Zyx6PWc9MCxxPW51bGw7bnVsbCE9PXUmJno8aC5sZW5ndGg7eisrKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciBuPXAoZSx1LGhbel0sayk7aWYobnVsbD09PW4pe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09XG5uLmFsdGVybmF0ZSYmYihlLHUpO2c9ZihuLGcseik7bnVsbD09PXQ/bD1uOnQuc2libGluZz1uO3Q9bjt1PXF9aWYoej09PWgubGVuZ3RoKXJldHVybiBjKGUsdSksbDtpZihudWxsPT09dSl7Zm9yKDt6PGgubGVuZ3RoO3orKyl1PUEoZSxoW3pdLGspLG51bGwhPT11JiYoZz1mKHUsZyx6KSxudWxsPT09dD9sPXU6dC5zaWJsaW5nPXUsdD11KTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7ejxoLmxlbmd0aDt6KyspcT1DKHUsZSx6LGhbel0sayksbnVsbCE9PXEmJihhJiZudWxsIT09cS5hbHRlcm5hdGUmJnUuZGVsZXRlKG51bGw9PT1xLmtleT96OnEua2V5KSxnPWYocSxnLHopLG51bGw9PT10P2w9cTp0LnNpYmxpbmc9cSx0PXEpO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9ZnVuY3Rpb24gdyhlLGcsaCxrKXt2YXIgbD1MYShoKTtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgbCl0aHJvdyBFcnJvcih5KDE1MCkpO2g9bC5jYWxsKGgpO2lmKG51bGw9PVxuaCl0aHJvdyBFcnJvcih5KDE1MSkpO2Zvcih2YXIgdD1sPW51bGwsdT1nLHo9Zz0wLHE9bnVsbCxuPWgubmV4dCgpO251bGwhPT11JiYhbi5kb25lO3orKyxuPWgubmV4dCgpKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciB3PXAoZSx1LG4udmFsdWUsayk7aWYobnVsbD09PXcpe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09dy5hbHRlcm5hdGUmJmIoZSx1KTtnPWYodyxnLHopO251bGw9PT10P2w9dzp0LnNpYmxpbmc9dzt0PXc7dT1xfWlmKG4uZG9uZSlyZXR1cm4gYyhlLHUpLGw7aWYobnVsbD09PXUpe2Zvcig7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUEoZSxuLnZhbHVlLGspLG51bGwhPT1uJiYoZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUModSxlLHosbi52YWx1ZSxrKSxudWxsIT09biYmKGEmJm51bGwhPT1uLmFsdGVybmF0ZSYmXG51LmRlbGV0ZShudWxsPT09bi5rZXk/ejpuLmtleSksZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTthJiZ1LmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO3JldHVybiBsfXJldHVybiBmdW5jdGlvbihhLGQsZixoKXt2YXIgaz1cIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT11YSYmbnVsbD09PWYua2V5O2smJihmPWYucHJvcHMuY2hpbGRyZW4pO3ZhciBsPVwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY7aWYobClzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSBzYTphOntsPWYua2V5O2ZvcihrPWQ7bnVsbCE9PWs7KXtpZihrLmtleT09PWwpe3N3aXRjaChrLnRhZyl7Y2FzZSA3OmlmKGYudHlwZT09PXVhKXtjKGEsay5zaWJsaW5nKTtkPWUoayxmLnByb3BzLmNoaWxkcmVuKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWJyZWFrO2RlZmF1bHQ6aWYoay5lbGVtZW50VHlwZT09PWYudHlwZSl7YyhhLGsuc2libGluZyk7XG5kPWUoayxmLnByb3BzKTtkLnJlZj1RZyhhLGssZik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX19YyhhLGspO2JyZWFrfWVsc2UgYihhLGspO2s9ay5zaWJsaW5nfWYudHlwZT09PXVhPyhkPVhnKGYucHJvcHMuY2hpbGRyZW4sYS5tb2RlLGgsZi5rZXkpLGQucmV0dXJuPWEsYT1kKTooaD1WZyhmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGEubW9kZSxoKSxoLnJlZj1RZyhhLGQsZiksaC5yZXR1cm49YSxhPWgpfXJldHVybiBnKGEpO2Nhc2UgdGE6YTp7Zm9yKGs9Zi5rZXk7bnVsbCE9PWQ7KXtpZihkLmtleT09PWspaWYoND09PWQudGFnJiZkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09Zi5jb250YWluZXJJbmZvJiZkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWYuaW1wbGVtZW50YXRpb24pe2MoYSxkLnNpYmxpbmcpO2Q9ZShkLGYuY2hpbGRyZW58fFtdKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWVsc2V7YyhhLGQpO2JyZWFrfWVsc2UgYihhLGQpO2Q9ZC5zaWJsaW5nfWQ9XG5XZyhmLGEubW9kZSxoKTtkLnJldHVybj1hO2E9ZH1yZXR1cm4gZyhhKX1pZihcInN0cmluZ1wiPT09dHlwZW9mIGZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZilyZXR1cm4gZj1cIlwiK2YsbnVsbCE9PWQmJjY9PT1kLnRhZz8oYyhhLGQuc2libGluZyksZD1lKGQsZiksZC5yZXR1cm49YSxhPWQpOihjKGEsZCksZD1VZyhmLGEubW9kZSxoKSxkLnJldHVybj1hLGE9ZCksZyhhKTtpZihQZyhmKSlyZXR1cm4geChhLGQsZixoKTtpZihMYShmKSlyZXR1cm4gdyhhLGQsZixoKTtsJiZSZyhhLGYpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgZiYmIWspc3dpdGNoKGEudGFnKXtjYXNlIDE6Y2FzZSAyMjpjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnRocm93IEVycm9yKHkoMTUyLFJhKGEudHlwZSl8fFwiQ29tcG9uZW50XCIpKTt9cmV0dXJuIGMoYSxkKX19dmFyIFlnPVNnKCEwKSxaZz1TZyghMSksJGc9e30sYWg9QmYoJGcpLGJoPUJmKCRnKSxjaD1CZigkZyk7XG5mdW5jdGlvbiBkaChhKXtpZihhPT09JGcpdGhyb3cgRXJyb3IoeSgxNzQpKTtyZXR1cm4gYX1mdW5jdGlvbiBlaChhLGIpe0koY2gsYik7SShiaCxhKTtJKGFoLCRnKTthPWIubm9kZVR5cGU7c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOm1iKG51bGwsXCJcIik7YnJlYWs7ZGVmYXVsdDphPTg9PT1hP2IucGFyZW50Tm9kZTpiLGI9YS5uYW1lc3BhY2VVUkl8fG51bGwsYT1hLnRhZ05hbWUsYj1tYihiLGEpfUgoYWgpO0koYWgsYil9ZnVuY3Rpb24gZmgoKXtIKGFoKTtIKGJoKTtIKGNoKX1mdW5jdGlvbiBnaChhKXtkaChjaC5jdXJyZW50KTt2YXIgYj1kaChhaC5jdXJyZW50KTt2YXIgYz1tYihiLGEudHlwZSk7YiE9PWMmJihJKGJoLGEpLEkoYWgsYykpfWZ1bmN0aW9uIGhoKGEpe2JoLmN1cnJlbnQ9PT1hJiYoSChhaCksSChiaCkpfXZhciBQPUJmKDApO1xuZnVuY3Rpb24gaWgoYSl7Zm9yKHZhciBiPWE7bnVsbCE9PWI7KXtpZigxMz09PWIudGFnKXt2YXIgYz1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsPT09Y3x8XCIkP1wiPT09Yy5kYXRhfHxcIiQhXCI9PT1jLmRhdGEpKXJldHVybiBifWVsc2UgaWYoMTk9PT1iLnRhZyYmdm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH12YXIgamg9bnVsbCxraD1udWxsLGxoPSExO1xuZnVuY3Rpb24gbWgoYSxiKXt2YXIgYz1uaCg1LG51bGwsbnVsbCwwKTtjLmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiO2MudHlwZT1cIkRFTEVURURcIjtjLnN0YXRlTm9kZT1iO2MucmV0dXJuPWE7Yy5mbGFncz04O251bGwhPT1hLmxhc3RFZmZlY3Q/KGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWMsYS5sYXN0RWZmZWN0PWMpOmEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PWN9ZnVuY3Rpb24gb2goYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgNjpyZXR1cm4gYj1cIlwiPT09YS5wZW5kaW5nUHJvcHN8fDMhPT1iLm5vZGVUeXBlP251bGw6YixudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIHBoKGEpe2lmKGxoKXt2YXIgYj1raDtpZihiKXt2YXIgYz1iO2lmKCFvaChhLGIpKXtiPXJmKGMubmV4dFNpYmxpbmcpO2lmKCFifHwhb2goYSxiKSl7YS5mbGFncz1hLmZsYWdzJi0xMDI1fDI7bGg9ITE7amg9YTtyZXR1cm59bWgoamgsYyl9amg9YTtraD1yZihiLmZpcnN0Q2hpbGQpfWVsc2UgYS5mbGFncz1hLmZsYWdzJi0xMDI1fDIsbGg9ITEsamg9YX19ZnVuY3Rpb24gcWgoYSl7Zm9yKGE9YS5yZXR1cm47bnVsbCE9PWEmJjUhPT1hLnRhZyYmMyE9PWEudGFnJiYxMyE9PWEudGFnOylhPWEucmV0dXJuO2poPWF9XG5mdW5jdGlvbiByaChhKXtpZihhIT09amgpcmV0dXJuITE7aWYoIWxoKXJldHVybiBxaChhKSxsaD0hMCwhMTt2YXIgYj1hLnR5cGU7aWYoNSE9PWEudGFnfHxcImhlYWRcIiE9PWImJlwiYm9keVwiIT09YiYmIW5mKGIsYS5tZW1vaXplZFByb3BzKSlmb3IoYj1raDtiOyltaChhLGIpLGI9cmYoYi5uZXh0U2libGluZyk7cWgoYSk7aWYoMTM9PT1hLnRhZyl7YT1hLm1lbW9pemVkU3RhdGU7YT1udWxsIT09YT9hLmRlaHlkcmF0ZWQ6bnVsbDtpZighYSl0aHJvdyBFcnJvcih5KDMxNykpO2E6e2E9YS5uZXh0U2libGluZztmb3IoYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiLyRcIj09PWMpe2lmKDA9PT1iKXtraD1yZihhLm5leHRTaWJsaW5nKTticmVhayBhfWItLX1lbHNlXCIkXCIhPT1jJiZcIiQhXCIhPT1jJiZcIiQ/XCIhPT1jfHxiKyt9YT1hLm5leHRTaWJsaW5nfWtoPW51bGx9fWVsc2Uga2g9amg/cmYoYS5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9XG5mdW5jdGlvbiBzaCgpe2toPWpoPW51bGw7bGg9ITF9dmFyIHRoPVtdO2Z1bmN0aW9uIHVoKCl7Zm9yKHZhciBhPTA7YTx0aC5sZW5ndGg7YSsrKXRoW2FdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7dGgubGVuZ3RoPTB9dmFyIHZoPXJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsd2g9cmEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcseGg9MCxSPW51bGwsUz1udWxsLFQ9bnVsbCx5aD0hMSx6aD0hMTtmdW5jdGlvbiBBaCgpe3Rocm93IEVycm9yKHkoMzIxKSk7fWZ1bmN0aW9uIEJoKGEsYil7aWYobnVsbD09PWIpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aCYmYzxhLmxlbmd0aDtjKyspaWYoIUhlKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9XG5mdW5jdGlvbiBDaChhLGIsYyxkLGUsZil7eGg9ZjtSPWI7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2IubGFuZXM9MDt2aC5jdXJyZW50PW51bGw9PT1hfHxudWxsPT09YS5tZW1vaXplZFN0YXRlP0RoOkVoO2E9YyhkLGUpO2lmKHpoKXtmPTA7ZG97emg9ITE7aWYoISgyNT5mKSl0aHJvdyBFcnJvcih5KDMwMSkpO2YrPTE7VD1TPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO3ZoLmN1cnJlbnQ9Rmg7YT1jKGQsZSl9d2hpbGUoemgpfXZoLmN1cnJlbnQ9R2g7Yj1udWxsIT09UyYmbnVsbCE9PVMubmV4dDt4aD0wO1Q9Uz1SPW51bGw7eWg9ITE7aWYoYil0aHJvdyBFcnJvcih5KDMwMCkpO3JldHVybiBhfWZ1bmN0aW9uIEhoKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlPVQ9YTpUPVQubmV4dD1hO3JldHVybiBUfVxuZnVuY3Rpb24gSWgoKXtpZihudWxsPT09Uyl7dmFyIGE9Ui5hbHRlcm5hdGU7YT1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGE9Uy5uZXh0O3ZhciBiPW51bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZTpULm5leHQ7aWYobnVsbCE9PWIpVD1iLFM9YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKHkoMzEwKSk7Uz1hO2E9e21lbW9pemVkU3RhdGU6Uy5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpTLmJhc2VTdGF0ZSxiYXNlUXVldWU6Uy5iYXNlUXVldWUscXVldWU6Uy5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZT1UPWE6VD1ULm5leHQ9YX1yZXR1cm4gVH1mdW5jdGlvbiBKaChhLGIpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yn1cbmZ1bmN0aW9uIEtoKGEpe3ZhciBiPUloKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHkoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9UyxlPWQuYmFzZVF1ZXVlLGY9Yy5wZW5kaW5nO2lmKG51bGwhPT1mKXtpZihudWxsIT09ZSl7dmFyIGc9ZS5uZXh0O2UubmV4dD1mLm5leHQ7Zi5uZXh0PWd9ZC5iYXNlUXVldWU9ZT1mO2MucGVuZGluZz1udWxsfWlmKG51bGwhPT1lKXtlPWUubmV4dDtkPWQuYmFzZVN0YXRlO3ZhciBoPWc9Zj1udWxsLGs9ZTtkb3t2YXIgbD1rLmxhbmU7aWYoKHhoJmwpPT09bCludWxsIT09aCYmKGg9aC5uZXh0PXtsYW5lOjAsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixlYWdlclN0YXRlOmsuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxkPWsuZWFnZXJSZWR1Y2VyPT09YT9rLmVhZ2VyU3RhdGU6YShkLGsuYWN0aW9uKTtlbHNle3ZhciBuPXtsYW5lOmwsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixcbmVhZ2VyU3RhdGU6ay5lYWdlclN0YXRlLG5leHQ6bnVsbH07bnVsbD09PWg/KGc9aD1uLGY9ZCk6aD1oLm5leHQ9bjtSLmxhbmVzfD1sO0RnfD1sfWs9ay5uZXh0fXdoaWxlKG51bGwhPT1rJiZrIT09ZSk7bnVsbD09PWg/Zj1kOmgubmV4dD1nO0hlKGQsYi5tZW1vaXplZFN0YXRlKXx8KHVnPSEwKTtiLm1lbW9pemVkU3RhdGU9ZDtiLmJhc2VTdGF0ZT1mO2IuYmFzZVF1ZXVlPWg7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1kfXJldHVybltiLm1lbW9pemVkU3RhdGUsYy5kaXNwYXRjaF19XG5mdW5jdGlvbiBMaChhKXt2YXIgYj1JaCgpLGM9Yi5xdWV1ZTtpZihudWxsPT09Yyl0aHJvdyBFcnJvcih5KDMxMSkpO2MubGFzdFJlbmRlcmVkUmVkdWNlcj1hO3ZhciBkPWMuZGlzcGF0Y2gsZT1jLnBlbmRpbmcsZj1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWUpe2MucGVuZGluZz1udWxsO3ZhciBnPWU9ZS5uZXh0O2RvIGY9YShmLGcuYWN0aW9uKSxnPWcubmV4dDt3aGlsZShnIT09ZSk7SGUoZixiLm1lbW9pemVkU3RhdGUpfHwodWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1cbmZ1bmN0aW9uIE1oKGEsYixjKXt2YXIgZD1iLl9nZXRWZXJzaW9uO2Q9ZChiLl9zb3VyY2UpO3ZhciBlPWIuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7aWYobnVsbCE9PWUpYT1lPT09ZDtlbHNlIGlmKGE9YS5tdXRhYmxlUmVhZExhbmVzLGE9KHhoJmEpPT09YSliLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWQsdGgucHVzaChiKTtpZihhKXJldHVybiBjKGIuX3NvdXJjZSk7dGgucHVzaChiKTt0aHJvdyBFcnJvcih5KDM1MCkpO31cbmZ1bmN0aW9uIE5oKGEsYixjLGQpe3ZhciBlPVU7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoeSgzNDkpKTt2YXIgZj1iLl9nZXRWZXJzaW9uLGc9ZihiLl9zb3VyY2UpLGg9dmguY3VycmVudCxrPWgudXNlU3RhdGUoZnVuY3Rpb24oKXtyZXR1cm4gTWgoZSxiLGMpfSksbD1rWzFdLG49a1swXTtrPVQ7dmFyIEE9YS5tZW1vaXplZFN0YXRlLHA9QS5yZWZzLEM9cC5nZXRTbmFwc2hvdCx4PUEuc291cmNlO0E9QS5zdWJzY3JpYmU7dmFyIHc9UjthLm1lbW9pemVkU3RhdGU9e3JlZnM6cCxzb3VyY2U6YixzdWJzY3JpYmU6ZH07aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtwLmdldFNuYXBzaG90PWM7cC5zZXRTbmFwc2hvdD1sO3ZhciBhPWYoYi5fc291cmNlKTtpZighSGUoZyxhKSl7YT1jKGIuX3NvdXJjZSk7SGUobixhKXx8KGwoYSksYT1JZyh3KSxlLm11dGFibGVSZWFkTGFuZXN8PWEmZS5wZW5kaW5nTGFuZXMpO2E9ZS5tdXRhYmxlUmVhZExhbmVzO2UuZW50YW5nbGVkTGFuZXN8PWE7Zm9yKHZhciBkPVxuZS5lbnRhbmdsZW1lbnRzLGg9YTswPGg7KXt2YXIgaz0zMS1WYyhoKSx2PTE8PGs7ZFtrXXw9YTtoJj1+dn19fSxbYyxiLGRdKTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBkKGIuX3NvdXJjZSxmdW5jdGlvbigpe3ZhciBhPXAuZ2V0U25hcHNob3QsYz1wLnNldFNuYXBzaG90O3RyeXtjKGEoYi5fc291cmNlKSk7dmFyIGQ9SWcodyk7ZS5tdXRhYmxlUmVhZExhbmVzfD1kJmUucGVuZGluZ0xhbmVzfWNhdGNoKHEpe2MoZnVuY3Rpb24oKXt0aHJvdyBxO30pfX0pfSxbYixkXSk7SGUoQyxjKSYmSGUoeCxiKSYmSGUoQSxkKXx8KGE9e3BlbmRpbmc6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6SmgsbGFzdFJlbmRlcmVkU3RhdGU6bn0sYS5kaXNwYXRjaD1sPU9oLmJpbmQobnVsbCxSLGEpLGsucXVldWU9YSxrLmJhc2VRdWV1ZT1udWxsLG49TWgoZSxiLGMpLGsubWVtb2l6ZWRTdGF0ZT1rLmJhc2VTdGF0ZT1uKTtyZXR1cm4gbn1cbmZ1bmN0aW9uIFBoKGEsYixjKXt2YXIgZD1JaCgpO3JldHVybiBOaChkLGEsYixjKX1mdW5jdGlvbiBRaChhKXt2YXIgYj1IaCgpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBhJiYoYT1hKCkpO2IubWVtb2l6ZWRTdGF0ZT1iLmJhc2VTdGF0ZT1hO2E9Yi5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpKaCxsYXN0UmVuZGVyZWRTdGF0ZTphfTthPWEuZGlzcGF0Y2g9T2guYmluZChudWxsLFIsYSk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxhXX1cbmZ1bmN0aW9uIFJoKGEsYixjLGQpe2E9e3RhZzphLGNyZWF0ZTpiLGRlc3Ryb3k6YyxkZXBzOmQsbmV4dDpudWxsfTtiPVIudXBkYXRlUXVldWU7bnVsbD09PWI/KGI9e2xhc3RFZmZlY3Q6bnVsbH0sUi51cGRhdGVRdWV1ZT1iLGIubGFzdEVmZmVjdD1hLm5leHQ9YSk6KGM9Yi5sYXN0RWZmZWN0LG51bGw9PT1jP2IubGFzdEVmZmVjdD1hLm5leHQ9YTooZD1jLm5leHQsYy5uZXh0PWEsYS5uZXh0PWQsYi5sYXN0RWZmZWN0PWEpKTtyZXR1cm4gYX1mdW5jdGlvbiBTaChhKXt2YXIgYj1IaCgpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfWZ1bmN0aW9uIFRoKCl7cmV0dXJuIEloKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBVaChhLGIsYyxkKXt2YXIgZT1IaCgpO1IuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPVJoKDF8YixjLHZvaWQgMCx2b2lkIDA9PT1kP251bGw6ZCl9XG5mdW5jdGlvbiBWaChhLGIsYyxkKXt2YXIgZT1JaCgpO2Q9dm9pZCAwPT09ZD9udWxsOmQ7dmFyIGY9dm9pZCAwO2lmKG51bGwhPT1TKXt2YXIgZz1TLm1lbW9pemVkU3RhdGU7Zj1nLmRlc3Ryb3k7aWYobnVsbCE9PWQmJkJoKGQsZy5kZXBzKSl7UmgoYixjLGYsZCk7cmV0dXJufX1SLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1SaCgxfGIsYyxmLGQpfWZ1bmN0aW9uIFdoKGEsYil7cmV0dXJuIFVoKDUxNiw0LGEsYil9ZnVuY3Rpb24gWGgoYSxiKXtyZXR1cm4gVmgoNTE2LDQsYSxiKX1mdW5jdGlvbiBZaChhLGIpe3JldHVybiBWaCg0LDIsYSxiKX1mdW5jdGlvbiBaaChhLGIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXJldHVybiBhPWEoKSxiKGEpLGZ1bmN0aW9uKCl7YihudWxsKX07aWYobnVsbCE9PWImJnZvaWQgMCE9PWIpcmV0dXJuIGE9YSgpLGIuY3VycmVudD1hLGZ1bmN0aW9uKCl7Yi5jdXJyZW50PW51bGx9fVxuZnVuY3Rpb24gJGgoYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBWaCg0LDIsWmguYmluZChudWxsLGIsYSksYyl9ZnVuY3Rpb24gYWkoKXt9ZnVuY3Rpb24gYmkoYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9ZnVuY3Rpb24gY2koYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTthPWEoKTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9XG5mdW5jdGlvbiBkaShhLGIpe3ZhciBjPWVnKCk7Z2coOTg+Yz85ODpjLGZ1bmN0aW9uKCl7YSghMCl9KTtnZyg5NzxjPzk3OmMsZnVuY3Rpb24oKXt2YXIgYz13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7YSghMSksYigpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1jfX0pfVxuZnVuY3Rpb24gT2goYSxiLGMpe3ZhciBkPUhnKCksZT1JZyhhKSxmPXtsYW5lOmUsYWN0aW9uOmMsZWFnZXJSZWR1Y2VyOm51bGwsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sZz1iLnBlbmRpbmc7bnVsbD09PWc/Zi5uZXh0PWY6KGYubmV4dD1nLm5leHQsZy5uZXh0PWYpO2IucGVuZGluZz1mO2c9YS5hbHRlcm5hdGU7aWYoYT09PVJ8fG51bGwhPT1nJiZnPT09Uil6aD15aD0hMDtlbHNle2lmKDA9PT1hLmxhbmVzJiYobnVsbD09PWd8fDA9PT1nLmxhbmVzKSYmKGc9Yi5sYXN0UmVuZGVyZWRSZWR1Y2VyLG51bGwhPT1nKSl0cnl7dmFyIGg9Yi5sYXN0UmVuZGVyZWRTdGF0ZSxrPWcoaCxjKTtmLmVhZ2VyUmVkdWNlcj1nO2YuZWFnZXJTdGF0ZT1rO2lmKEhlKGssaCkpcmV0dXJufWNhdGNoKGwpe31maW5hbGx5e31KZyhhLGUsZCl9fVxudmFyIEdoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpBaCx1c2VDb250ZXh0OkFoLHVzZUVmZmVjdDpBaCx1c2VJbXBlcmF0aXZlSGFuZGxlOkFoLHVzZUxheW91dEVmZmVjdDpBaCx1c2VNZW1vOkFoLHVzZVJlZHVjZXI6QWgsdXNlUmVmOkFoLHVzZVN0YXRlOkFoLHVzZURlYnVnVmFsdWU6QWgsdXNlRGVmZXJyZWRWYWx1ZTpBaCx1c2VUcmFuc2l0aW9uOkFoLHVzZU11dGFibGVTb3VyY2U6QWgsdXNlT3BhcXVlSWRlbnRpZmllcjpBaCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LERoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe0hoKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9LHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OldoLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBVaCg0LDIsWmguYmluZChudWxsLFxuYixhKSxjKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVoKDQsMixhLGIpfSx1c2VNZW1vOmZ1bmN0aW9uKGEsYil7dmFyIGM9SGgoKTtiPXZvaWQgMD09PWI/bnVsbDpiO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SGgoKTtiPXZvaWQgMCE9PWM/YyhiKTpiO2QubWVtb2l6ZWRTdGF0ZT1kLmJhc2VTdGF0ZT1iO2E9ZC5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphLGxhc3RSZW5kZXJlZFN0YXRlOmJ9O2E9YS5kaXNwYXRjaD1PaC5iaW5kKG51bGwsUixhKTtyZXR1cm5bZC5tZW1vaXplZFN0YXRlLGFdfSx1c2VSZWY6U2gsdXNlU3RhdGU6UWgsdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPVFoKGEpLGM9YlswXSxkPWJbMV07V2goZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO1xud2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPVFoKCExKSxiPWFbMF07YT1kaS5iaW5kKG51bGwsYVsxXSk7U2goYSk7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUhoKCk7ZC5tZW1vaXplZFN0YXRlPXtyZWZzOntnZXRTbmFwc2hvdDpiLHNldFNuYXBzaG90Om51bGx9LHNvdXJjZTphLHN1YnNjcmliZTpjfTtyZXR1cm4gTmgoZCxhLGIsYyl9LHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtpZihsaCl7dmFyIGE9ITEsYj11ZihmdW5jdGlvbigpe2F8fChhPSEwLGMoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpKTt0aHJvdyBFcnJvcih5KDM1NSkpO30pLGM9UWgoYilbMV07MD09PShSLm1vZGUmMikmJihSLmZsYWdzfD01MTYsUmgoNSxmdW5jdGlvbigpe2MoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpfSxcbnZvaWQgMCxudWxsKSk7cmV0dXJuIGJ9Yj1cInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KTtRaChiKTtyZXR1cm4gYn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxFaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTokaCx1c2VMYXlvdXRFZmZlY3Q6WWgsdXNlTWVtbzpjaSx1c2VSZWR1Y2VyOktoLHVzZVJlZjpUaCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBLaChKaCl9LHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1LaChKaCksYz1iWzBdLGQ9YlsxXTtYaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPUtoKEpoKVswXTtyZXR1cm5bVGgoKS5jdXJyZW50LFxuYV19LHVzZU11dGFibGVTb3VyY2U6UGgsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBLaChKaClbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRmg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmJpLHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OlhoLHVzZUltcGVyYXRpdmVIYW5kbGU6JGgsdXNlTGF5b3V0RWZmZWN0OlloLHVzZU1lbW86Y2ksdXNlUmVkdWNlcjpMaCx1c2VSZWY6VGgsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpfSx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9TGgoSmgpLGM9YlswXSxkPWJbMV07WGgoZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e3doLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1MaChKaClbMF07cmV0dXJuW1RoKCkuY3VycmVudCxcbmFdfSx1c2VNdXRhYmxlU291cmNlOlBoLHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpWzBdfSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LGVpPXJhLlJlYWN0Q3VycmVudE93bmVyLHVnPSExO2Z1bmN0aW9uIGZpKGEsYixjLGQpe2IuY2hpbGQ9bnVsbD09PWE/WmcoYixudWxsLGMsZCk6WWcoYixhLmNoaWxkLGMsZCl9ZnVuY3Rpb24gZ2koYSxiLGMsZCxlKXtjPWMucmVuZGVyO3ZhciBmPWIucmVmO3RnKGIsZSk7ZD1DaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF1ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsaGkoYSxiLGUpO2IuZmxhZ3N8PTE7ZmkoYSxiLGQsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBpaShhLGIsYyxkLGUsZil7aWYobnVsbD09PWEpe3ZhciBnPWMudHlwZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmIWppKGcpJiZ2b2lkIDA9PT1nLmRlZmF1bHRQcm9wcyYmbnVsbD09PWMuY29tcGFyZSYmdm9pZCAwPT09Yy5kZWZhdWx0UHJvcHMpcmV0dXJuIGIudGFnPTE1LGIudHlwZT1nLGtpKGEsYixnLGQsZSxmKTthPVZnKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZik7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWc9YS5jaGlsZDtpZigwPT09KGUmZikmJihlPWcubWVtb2l6ZWRQcm9wcyxjPWMuY29tcGFyZSxjPW51bGwhPT1jP2M6SmUsYyhlLGQpJiZhLnJlZj09PWIucmVmKSlyZXR1cm4gaGkoYSxiLGYpO2IuZmxhZ3N8PTE7YT1UZyhnLGQpO2EucmVmPWIucmVmO2EucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9YX1cbmZ1bmN0aW9uIGtpKGEsYixjLGQsZSxmKXtpZihudWxsIT09YSYmSmUoYS5tZW1vaXplZFByb3BzLGQpJiZhLnJlZj09PWIucmVmKWlmKHVnPSExLDAhPT0oZiZlKSkwIT09KGEuZmxhZ3MmMTYzODQpJiYodWc9ITApO2Vsc2UgcmV0dXJuIGIubGFuZXM9YS5sYW5lcyxoaShhLGIsZik7cmV0dXJuIGxpKGEsYixjLGQsZil9XG5mdW5jdGlvbiBtaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLmNoaWxkcmVuLGY9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PWQubW9kZXx8XCJ1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZ1wiPT09ZC5tb2RlKWlmKDA9PT0oYi5tb2RlJjQpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LG5pKGIsYyk7ZWxzZSBpZigwIT09KGMmMTA3Mzc0MTgyNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sbmkoYixudWxsIT09Zj9mLmJhc2VMYW5lczpjKTtlbHNlIHJldHVybiBhPW51bGwhPT1mP2YuYmFzZUxhbmVzfGM6YyxiLmxhbmVzPWIuY2hpbGRMYW5lcz0xMDczNzQxODI0LGIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmF9LG5pKGIsYSksbnVsbDtlbHNlIG51bGwhPT1mPyhkPWYuYmFzZUxhbmVzfGMsYi5tZW1vaXplZFN0YXRlPW51bGwpOmQ9YyxuaShiLGQpO2ZpKGEsYixlLGMpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gb2koYSxiKXt2YXIgYz1iLnJlZjtpZihudWxsPT09YSYmbnVsbCE9PWN8fG51bGwhPT1hJiZhLnJlZiE9PWMpYi5mbGFnc3w9MTI4fWZ1bmN0aW9uIGxpKGEsYixjLGQsZSl7dmFyIGY9RmYoYyk/RGY6TS5jdXJyZW50O2Y9RWYoYixmKTt0ZyhiLGUpO2M9Q2goYSxiLGMsZCxmLGUpO2lmKG51bGwhPT1hJiYhdWcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tNTE3LGEubGFuZXMmPX5lLGhpKGEsYixlKTtiLmZsYWdzfD0xO2ZpKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gcGkoYSxiLGMsZCxlKXtpZihGZihjKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO3RnKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKW51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpLE1nKGIsYyxkKSxPZyhiLGMsZCxlKSxkPSEwO2Vsc2UgaWYobnVsbD09PWEpe3ZhciBnPWIuc3RhdGVOb2RlLGg9Yi5tZW1vaXplZFByb3BzO2cucHJvcHM9aDt2YXIgaz1nLmNvbnRleHQsbD1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgbCYmbnVsbCE9PWw/bD12ZyhsKToobD1GZihjKT9EZjpNLmN1cnJlbnQsbD1FZihiLGwpKTt2YXIgbj1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBufHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtBfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXG5cImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PWR8fGshPT1sKSYmTmcoYixnLGQsbCk7d2c9ITE7dmFyIHA9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cDtDZyhiLGQsZyxlKTtrPWIubWVtb2l6ZWRTdGF0ZTtoIT09ZHx8cCE9PWt8fE4uY3VycmVudHx8d2c/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBuJiYoR2coYixjLG4sZCksaz1iLm1lbW9pemVkU3RhdGUpLChoPXdnfHxMZyhiLGMsaCxkLHAsayxsKSk/KEF8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudHx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudCYmZy5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT09XG50eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpLGQ9ITEpfWVsc2V7Zz1iLnN0YXRlTm9kZTt5ZyhhLGIpO2g9Yi5tZW1vaXplZFByb3BzO2w9Yi50eXBlPT09Yi5lbGVtZW50VHlwZT9oOmxnKGIudHlwZSxoKTtnLnByb3BzPWw7QT1iLnBlbmRpbmdQcm9wcztwPWcuY29udGV4dDtrPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09az9rPXZnKGspOihrPUZmKGMpP0RmOk0uY3VycmVudCxrPUVmKGIsaykpO3ZhciBDPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDfHxcblwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09QXx8cCE9PWspJiZOZyhiLGcsZCxrKTt3Zz0hMTtwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7Q2coYixkLGcsZSk7dmFyIHg9Yi5tZW1vaXplZFN0YXRlO2ghPT1BfHxwIT09eHx8Ti5jdXJyZW50fHx3Zz8oXCJmdW5jdGlvblwiPT09dHlwZW9mIEMmJihHZyhiLGMsQyxkKSx4PWIubWVtb2l6ZWRTdGF0ZSksKGw9d2d8fExnKGIsYyxsLGQscCx4LGspKT8obnx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGV8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlJiZnLmNvbXBvbmVudFdpbGxVcGRhdGUoZCxcbngsayksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJmcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoZCx4LGspKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGUmJihiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKGIuZmxhZ3N8PTI1NikpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPXgpLGcucHJvcHM9ZCxnLnN0YXRlPXgsZy5jb250ZXh0PWssZD1sKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxcbmg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksZD0hMSl9cmV0dXJuIHFpKGEsYixjLGQsZixlKX1cbmZ1bmN0aW9uIHFpKGEsYixjLGQsZSxmKXtvaShhLGIpO3ZhciBnPTAhPT0oYi5mbGFncyY2NCk7aWYoIWQmJiFnKXJldHVybiBlJiZLZihiLGMsITEpLGhpKGEsYixmKTtkPWIuc3RhdGVOb2RlO2VpLmN1cnJlbnQ9Yjt2YXIgaD1nJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpkLnJlbmRlcigpO2IuZmxhZ3N8PTE7bnVsbCE9PWEmJmc/KGIuY2hpbGQ9WWcoYixhLmNoaWxkLG51bGwsZiksYi5jaGlsZD1ZZyhiLG51bGwsaCxmKSk6ZmkoYSxiLGgsZik7Yi5tZW1vaXplZFN0YXRlPWQuc3RhdGU7ZSYmS2YoYixjLCEwKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiByaShhKXt2YXIgYj1hLnN0YXRlTm9kZTtiLnBlbmRpbmdDb250ZXh0P0hmKGEsYi5wZW5kaW5nQ29udGV4dCxiLnBlbmRpbmdDb250ZXh0IT09Yi5jb250ZXh0KTpiLmNvbnRleHQmJkhmKGEsYi5jb250ZXh0LCExKTtlaChhLGIuY29udGFpbmVySW5mbyl9XG52YXIgc2k9e2RlaHlkcmF0ZWQ6bnVsbCxyZXRyeUxhbmU6MH07XG5mdW5jdGlvbiB0aShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1QLmN1cnJlbnQsZj0hMSxnOyhnPTAhPT0oYi5mbGFncyY2NCkpfHwoZz1udWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZT8hMTowIT09KGUmMikpO2c/KGY9ITAsYi5mbGFncyY9LTY1KTpudWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZXx8dm9pZCAwPT09ZC5mYWxsYmFja3x8ITA9PT1kLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrfHwoZXw9MSk7SShQLGUmMSk7aWYobnVsbD09PWEpe3ZvaWQgMCE9PWQuZmFsbGJhY2smJnBoKGIpO2E9ZC5jaGlsZHJlbjtlPWQuZmFsbGJhY2s7aWYoZilyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxiLm1lbW9pemVkU3RhdGU9c2ksYTtpZihcIm51bWJlclwiPT09dHlwZW9mIGQudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSlyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxcbmIubWVtb2l6ZWRTdGF0ZT1zaSxiLmxhbmVzPTMzNTU0NDMyLGE7Yz12aSh7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjphfSxiLm1vZGUsYyxudWxsKTtjLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWN9aWYobnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSl7aWYoZilyZXR1cm4gZD13aShhLGIsZC5jaGlsZHJlbixkLmZhbGxiYWNrLGMpLGY9Yi5jaGlsZCxlPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZSxmLm1lbW9pemVkU3RhdGU9bnVsbD09PWU/e2Jhc2VMYW5lczpjfTp7YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXNpLGQ7Yz14aShhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31pZihmKXJldHVybiBkPXdpKGEsYixkLmNoaWxkcmVuLGQuZmFsbGJhY2ssYyksZj1iLmNoaWxkLGU9YS5jaGlsZC5tZW1vaXplZFN0YXRlLGYubWVtb2l6ZWRTdGF0ZT1udWxsPT09ZT97YmFzZUxhbmVzOmN9Olxue2Jhc2VMYW5lczplLmJhc2VMYW5lc3xjfSxmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jLGIubWVtb2l6ZWRTdGF0ZT1zaSxkO2M9eGkoYSxiLGQuY2hpbGRyZW4sYyk7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gdWkoYSxiLGMsZCl7dmFyIGU9YS5tb2RlLGY9YS5jaGlsZDtiPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Yn07MD09PShlJjIpJiZudWxsIT09Zj8oZi5jaGlsZExhbmVzPTAsZi5wZW5kaW5nUHJvcHM9Yik6Zj12aShiLGUsMCxudWxsKTtjPVhnKGMsZSxkLG51bGwpO2YucmV0dXJuPWE7Yy5yZXR1cm49YTtmLnNpYmxpbmc9YzthLmNoaWxkPWY7cmV0dXJuIGN9XG5mdW5jdGlvbiB4aShhLGIsYyxkKXt2YXIgZT1hLmNoaWxkO2E9ZS5zaWJsaW5nO2M9VGcoZSx7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpjfSk7MD09PShiLm1vZGUmMikmJihjLmxhbmVzPWQpO2MucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGw7bnVsbCE9PWEmJihhLm5leHRFZmZlY3Q9bnVsbCxhLmZsYWdzPTgsYi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9YSk7cmV0dXJuIGIuY2hpbGQ9Y31cbmZ1bmN0aW9uIHdpKGEsYixjLGQsZSl7dmFyIGY9Yi5tb2RlLGc9YS5jaGlsZDthPWcuc2libGluZzt2YXIgaD17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmN9OzA9PT0oZiYyKSYmYi5jaGlsZCE9PWc/KGM9Yi5jaGlsZCxjLmNoaWxkTGFuZXM9MCxjLnBlbmRpbmdQcm9wcz1oLGc9Yy5sYXN0RWZmZWN0LG51bGwhPT1nPyhiLmZpcnN0RWZmZWN0PWMuZmlyc3RFZmZlY3QsYi5sYXN0RWZmZWN0PWcsZy5uZXh0RWZmZWN0PW51bGwpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PW51bGwpOmM9VGcoZyxoKTtudWxsIT09YT9kPVRnKGEsZCk6KGQ9WGcoZCxmLGUsbnVsbCksZC5mbGFnc3w9Mik7ZC5yZXR1cm49YjtjLnJldHVybj1iO2Muc2libGluZz1kO2IuY2hpbGQ9YztyZXR1cm4gZH1mdW5jdGlvbiB5aShhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTtzZyhhLnJldHVybixiKX1cbmZ1bmN0aW9uIHppKGEsYixjLGQsZSxmKXt2YXIgZz1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWc/YS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpiLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6ZCx0YWlsOmMsdGFpbE1vZGU6ZSxsYXN0RWZmZWN0OmZ9OihnLmlzQmFja3dhcmRzPWIsZy5yZW5kZXJpbmc9bnVsbCxnLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGcubGFzdD1kLGcudGFpbD1jLGcudGFpbE1vZGU9ZSxnLmxhc3RFZmZlY3Q9Zil9XG5mdW5jdGlvbiBBaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLnJldmVhbE9yZGVyLGY9ZC50YWlsO2ZpKGEsYixkLmNoaWxkcmVuLGMpO2Q9UC5jdXJyZW50O2lmKDAhPT0oZCYyKSlkPWQmMXwyLGIuZmxhZ3N8PTY0O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZ5aShhLGMpO2Vsc2UgaWYoMTk9PT1hLnRhZyl5aShhLGMpO2Vsc2UgaWYobnVsbCE9PWEuY2hpbGQpe2EuY2hpbGQucmV0dXJuPWE7YT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT1iKWJyZWFrIGE7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxhLnJldHVybj09PWIpYnJlYWsgYTthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47YT1hLnNpYmxpbmd9ZCY9MX1JKFAsZCk7aWYoMD09PShiLm1vZGUmMikpYi5tZW1vaXplZFN0YXRlPVxubnVsbDtlbHNlIHN3aXRjaChlKXtjYXNlIFwiZm9yd2FyZHNcIjpjPWIuY2hpbGQ7Zm9yKGU9bnVsbDtudWxsIT09YzspYT1jLmFsdGVybmF0ZSxudWxsIT09YSYmbnVsbD09PWloKGEpJiYoZT1jKSxjPWMuc2libGluZztjPWU7bnVsbD09PWM/KGU9Yi5jaGlsZCxiLmNoaWxkPW51bGwpOihlPWMuc2libGluZyxjLnNpYmxpbmc9bnVsbCk7emkoYiwhMSxlLGMsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09aWgoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfXppKGIsITAsYyxudWxsLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlIFwidG9nZXRoZXJcIjp6aShiLCExLG51bGwsbnVsbCx2b2lkIDAsYi5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OmIubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gaGkoYSxiLGMpe251bGwhPT1hJiYoYi5kZXBlbmRlbmNpZXM9YS5kZXBlbmRlbmNpZXMpO0RnfD1iLmxhbmVzO2lmKDAhPT0oYyZiLmNoaWxkTGFuZXMpKXtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IoeSgxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9VGcoYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPVRnKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9cmV0dXJuIG51bGx9dmFyIEJpLENpLERpLEVpO1xuQmk9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5jaGlsZDtudWxsIT09Yzspe2lmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKWEuYXBwZW5kQ2hpbGQoYy5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWMudGFnJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319O0NpPWZ1bmN0aW9uKCl7fTtcbkRpPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEubWVtb2l6ZWRQcm9wcztpZihlIT09ZCl7YT1iLnN0YXRlTm9kZTtkaChhaC5jdXJyZW50KTt2YXIgZj1udWxsO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjplPVlhKGEsZSk7ZD1ZYShhLGQpO2Y9W107YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZWIoYSxlKTtkPWViKGEsZCk7Zj1bXTticmVhaztjYXNlIFwic2VsZWN0XCI6ZT1tKHt9LGUse3ZhbHVlOnZvaWQgMH0pO2Q9bSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtmPVtdO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmU9Z2IoYSxlKTtkPWdiKGEsZCk7Zj1bXTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLm9uQ2xpY2smJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfXZiKGMsZCk7dmFyIGc7Yz1udWxsO2ZvcihsIGluIGUpaWYoIWQuaGFzT3duUHJvcGVydHkobCkmJmUuaGFzT3duUHJvcGVydHkobCkmJm51bGwhPWVbbF0paWYoXCJzdHlsZVwiPT09XG5sKXt2YXIgaD1lW2xdO2ZvcihnIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShnKSYmKGN8fChjPXt9KSxjW2ddPVwiXCIpfWVsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIhPT1sJiZcImNoaWxkcmVuXCIhPT1sJiZcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJlwiYXV0b0ZvY3VzXCIhPT1sJiYoY2EuaGFzT3duUHJvcGVydHkobCk/Znx8KGY9W10pOihmPWZ8fFtdKS5wdXNoKGwsbnVsbCkpO2ZvcihsIGluIGQpe3ZhciBrPWRbbF07aD1udWxsIT1lP2VbbF06dm9pZCAwO2lmKGQuaGFzT3duUHJvcGVydHkobCkmJmshPT1oJiYobnVsbCE9a3x8bnVsbCE9aCkpaWYoXCJzdHlsZVwiPT09bClpZihoKXtmb3IoZyBpbiBoKSFoLmhhc093blByb3BlcnR5KGcpfHxrJiZrLmhhc093blByb3BlcnR5KGcpfHwoY3x8KGM9e30pLGNbZ109XCJcIik7Zm9yKGcgaW4gaylrLmhhc093blByb3BlcnR5KGcpJiZoW2ddIT09a1tnXSYmKGN8fFxuKGM9e30pLGNbZ109a1tnXSl9ZWxzZSBjfHwoZnx8KGY9W10pLGYucHVzaChsLGMpKSxjPWs7ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWw/KGs9az9rLl9faHRtbDp2b2lkIDAsaD1oP2guX19odG1sOnZvaWQgMCxudWxsIT1rJiZoIT09ayYmKGY9Znx8W10pLnB1c2gobCxrKSk6XCJjaGlsZHJlblwiPT09bD9cInN0cmluZ1wiIT09dHlwZW9mIGsmJlwibnVtYmVyXCIhPT10eXBlb2Yga3x8KGY9Znx8W10pLnB1c2gobCxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmKGNhLmhhc093blByb3BlcnR5KGwpPyhudWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1sJiZHKFwic2Nyb2xsXCIsYSksZnx8aD09PWt8fChmPVtdKSk6XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09ayYmay4kJHR5cGVvZj09PUdhP2sudG9TdHJpbmcoKTooZj1mfHxbXSkucHVzaChsLGspKX1jJiYoZj1mfHxbXSkucHVzaChcInN0eWxlXCIsXG5jKTt2YXIgbD1mO2lmKGIudXBkYXRlUXVldWU9bCliLmZsYWdzfD00fX07RWk9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PWQmJihiLmZsYWdzfD00KX07ZnVuY3Rpb24gRmkoYSxiKXtpZighbGgpc3dpdGNoKGEudGFpbE1vZGUpe2Nhc2UgXCJoaWRkZW5cIjpiPWEudGFpbDtmb3IodmFyIGM9bnVsbDtudWxsIT09YjspbnVsbCE9PWIuYWx0ZXJuYXRlJiYoYz1iKSxiPWIuc2libGluZztudWxsPT09Yz9hLnRhaWw9bnVsbDpjLnNpYmxpbmc9bnVsbDticmVhaztjYXNlIFwiY29sbGFwc2VkXCI6Yz1hLnRhaWw7Zm9yKHZhciBkPW51bGw7bnVsbCE9PWM7KW51bGwhPT1jLmFsdGVybmF0ZSYmKGQ9YyksYz1jLnNpYmxpbmc7bnVsbD09PWQ/Ynx8bnVsbD09PWEudGFpbD9hLnRhaWw9bnVsbDphLnRhaWwuc2libGluZz1udWxsOmQuc2libGluZz1udWxsfX1cbmZ1bmN0aW9uIEdpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcztzd2l0Y2goYi50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2Q9Yi5zdGF0ZU5vZGU7ZC5wZW5kaW5nQ29udGV4dCYmKGQuY29udGV4dD1kLnBlbmRpbmdDb250ZXh0LGQucGVuZGluZ0NvbnRleHQ9bnVsbCk7aWYobnVsbD09PWF8fG51bGw9PT1hLmNoaWxkKXJoKGIpP2IuZmxhZ3N8PTQ6ZC5oeWRyYXRlfHwoYi5mbGFnc3w9MjU2KTtDaShiKTtyZXR1cm4gbnVsbDtjYXNlIDU6aGgoYik7dmFyIGU9ZGgoY2guY3VycmVudCk7Yz1iLnR5cGU7aWYobnVsbCE9PWEmJm51bGwhPWIuc3RhdGVOb2RlKURpKGEsYixjLGQsZSksYS5yZWYhPT1iLnJlZiYmKGIuZmxhZ3N8PTEyOCk7ZWxzZXtpZighZCl7aWYobnVsbD09PVxuYi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtyZXR1cm4gbnVsbH1hPWRoKGFoLmN1cnJlbnQpO2lmKHJoKGIpKXtkPWIuc3RhdGVOb2RlO2M9Yi50eXBlO3ZhciBmPWIubWVtb2l6ZWRQcm9wcztkW3dmXT1iO2RbeGZdPWY7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsZCk7RyhcImNsb3NlXCIsZCk7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihhPTA7YTxYZS5sZW5ndGg7YSsrKUcoWGVbYV0sZCk7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkcoXCJlcnJvclwiLGQpO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGQpO0coXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpHKFwidG9nZ2xlXCIsZCk7YnJlYWs7Y2FzZSBcImlucHV0XCI6WmEoZCxmKTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpkLl93cmFwcGVyU3RhdGU9XG57d2FzTXVsdGlwbGU6ISFmLm11bHRpcGxlfTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGQsZiksRyhcImludmFsaWRcIixkKX12YihjLGYpO2E9bnVsbDtmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoZT1mW2ddLFwiY2hpbGRyZW5cIj09PWc/XCJzdHJpbmdcIj09PXR5cGVvZiBlP2QudGV4dENvbnRlbnQhPT1lJiYoYT1bXCJjaGlsZHJlblwiLGVdKTpcIm51bWJlclwiPT09dHlwZW9mIGUmJmQudGV4dENvbnRlbnQhPT1cIlwiK2UmJihhPVtcImNoaWxkcmVuXCIsXCJcIitlXSk6Y2EuaGFzT3duUHJvcGVydHkoZykmJm51bGwhPWUmJlwib25TY3JvbGxcIj09PWcmJkcoXCJzY3JvbGxcIixkKSk7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGQpO2NiKGQsZiwhMCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoZCk7amIoZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJvcHRpb25cIjpicmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLm9uQ2xpY2smJihkLm9uY2xpY2s9XG5qZil9ZD1hO2IudXBkYXRlUXVldWU9ZDtudWxsIT09ZCYmKGIuZmxhZ3N8PTQpfWVsc2V7Zz05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDthPT09a2IuaHRtbCYmKGE9bGIoYykpO2E9PT1rYi5odG1sP1wic2NyaXB0XCI9PT1jPyhhPWcuY3JlYXRlRWxlbWVudChcImRpdlwiKSxhLmlubmVySFRNTD1cIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpKTpcInN0cmluZ1wiPT09dHlwZW9mIGQuaXM/YT1nLmNyZWF0ZUVsZW1lbnQoYyx7aXM6ZC5pc30pOihhPWcuY3JlYXRlRWxlbWVudChjKSxcInNlbGVjdFwiPT09YyYmKGc9YSxkLm11bHRpcGxlP2cubXVsdGlwbGU9ITA6ZC5zaXplJiYoZy5zaXplPWQuc2l6ZSkpKTphPWcuY3JlYXRlRWxlbWVudE5TKGEsYyk7YVt3Zl09YjthW3hmXT1kO0JpKGEsYiwhMSwhMSk7Yi5zdGF0ZU5vZGU9YTtnPXdiKGMsZCk7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsYSk7RyhcImNsb3NlXCIsYSk7XG5lPWQ7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGEpO2U9ZDticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoZT0wO2U8WGUubGVuZ3RoO2UrKylHKFhlW2VdLGEpO2U9ZDticmVhaztjYXNlIFwic291cmNlXCI6RyhcImVycm9yXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGEpO0coXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RyhcInRvZ2dsZVwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW5wdXRcIjpaYShhLGQpO2U9WWEoYSxkKTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjplPWViKGEsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmEuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfTtlPW0oe30sZCx7dmFsdWU6dm9pZCAwfSk7RyhcImludmFsaWRcIixhKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihhLGQpO2U9XG5nYihhLGQpO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7ZGVmYXVsdDplPWR9dmIoYyxlKTt2YXIgaD1lO2ZvcihmIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShmKSl7dmFyIGs9aFtmXTtcInN0eWxlXCI9PT1mP3RiKGEsayk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zj8oaz1rP2suX19odG1sOnZvaWQgMCxudWxsIT1rJiZvYihhLGspKTpcImNoaWxkcmVuXCI9PT1mP1wic3RyaW5nXCI9PT10eXBlb2Ygaz8oXCJ0ZXh0YXJlYVwiIT09Y3x8XCJcIiE9PWspJiZwYihhLGspOlwibnVtYmVyXCI9PT10eXBlb2YgayYmcGIoYSxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1mJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09ZiYmXCJhdXRvRm9jdXNcIiE9PWYmJihjYS5oYXNPd25Qcm9wZXJ0eShmKT9udWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1mJiZHKFwic2Nyb2xsXCIsYSk6bnVsbCE9ayYmcWEoYSxmLGssZykpfXN3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjpWYShhKTtjYihhLGQsITEpO1xuYnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoYSk7amIoYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOm51bGwhPWQudmFsdWUmJmEuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiK1NhKGQudmFsdWUpKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5tdWx0aXBsZT0hIWQubXVsdGlwbGU7Zj1kLnZhbHVlO251bGwhPWY/ZmIoYSwhIWQubXVsdGlwbGUsZiwhMSk6bnVsbCE9ZC5kZWZhdWx0VmFsdWUmJmZiKGEsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfW1mKGMsZCkmJihiLmZsYWdzfD00KX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD0xMjgpfXJldHVybiBudWxsO2Nhc2UgNjppZihhJiZudWxsIT1iLnN0YXRlTm9kZSlFaShhLGIsYS5tZW1vaXplZFByb3BzLGQpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtcbmM9ZGgoY2guY3VycmVudCk7ZGgoYWguY3VycmVudCk7cmgoYik/KGQ9Yi5zdGF0ZU5vZGUsYz1iLm1lbW9pemVkUHJvcHMsZFt3Zl09YixkLm5vZGVWYWx1ZSE9PWMmJihiLmZsYWdzfD00KSk6KGQ9KDk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShkKSxkW3dmXT1iLGIuc3RhdGVOb2RlPWQpfXJldHVybiBudWxsO2Nhc2UgMTM6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBiLmxhbmVzPWMsYjtkPW51bGwhPT1kO2M9ITE7bnVsbD09PWE/dm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLmZhbGxiYWNrJiZyaChiKTpjPW51bGwhPT1hLm1lbW9pemVkU3RhdGU7aWYoZCYmIWMmJjAhPT0oYi5tb2RlJjIpKWlmKG51bGw9PT1hJiYhMCE9PWIubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8MCE9PShQLmN1cnJlbnQmMSkpMD09PVYmJihWPTMpO2Vsc2V7aWYoMD09PVZ8fDM9PT1WKVY9XG40O251bGw9PT1VfHwwPT09KERnJjEzNDIxNzcyNykmJjA9PT0oSGkmMTM0MjE3NzI3KXx8SWkoVSxXKX1pZihkfHxjKWIuZmxhZ3N8PTQ7cmV0dXJuIG51bGw7Y2FzZSA0OnJldHVybiBmaCgpLENpKGIpLG51bGw9PT1hJiZjZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHJnKGIpLG51bGw7Y2FzZSAxNzpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMTk6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtmPTAhPT0oYi5mbGFncyY2NCk7Zz1kLnJlbmRlcmluZztpZihudWxsPT09ZylpZihmKUZpKGQsITEpO2Vsc2V7aWYoMCE9PVZ8fG51bGwhPT1hJiYwIT09KGEuZmxhZ3MmNjQpKWZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtnPWloKGEpO2lmKG51bGwhPT1nKXtiLmZsYWdzfD02NDtGaShkLCExKTtmPWcudXBkYXRlUXVldWU7bnVsbCE9PWYmJihiLnVwZGF0ZVF1ZXVlPWYsYi5mbGFnc3w9NCk7XG5udWxsPT09ZC5sYXN0RWZmZWN0JiYoYi5maXJzdEVmZmVjdD1udWxsKTtiLmxhc3RFZmZlY3Q9ZC5sYXN0RWZmZWN0O2Q9Yztmb3IoYz1iLmNoaWxkO251bGwhPT1jOylmPWMsYT1kLGYuZmxhZ3MmPTIsZi5uZXh0RWZmZWN0PW51bGwsZi5maXJzdEVmZmVjdD1udWxsLGYubGFzdEVmZmVjdD1udWxsLGc9Zi5hbHRlcm5hdGUsbnVsbD09PWc/KGYuY2hpbGRMYW5lcz0wLGYubGFuZXM9YSxmLmNoaWxkPW51bGwsZi5tZW1vaXplZFByb3BzPW51bGwsZi5tZW1vaXplZFN0YXRlPW51bGwsZi51cGRhdGVRdWV1ZT1udWxsLGYuZGVwZW5kZW5jaWVzPW51bGwsZi5zdGF0ZU5vZGU9bnVsbCk6KGYuY2hpbGRMYW5lcz1nLmNoaWxkTGFuZXMsZi5sYW5lcz1nLmxhbmVzLGYuY2hpbGQ9Zy5jaGlsZCxmLm1lbW9pemVkUHJvcHM9Zy5tZW1vaXplZFByb3BzLGYubWVtb2l6ZWRTdGF0ZT1nLm1lbW9pemVkU3RhdGUsZi51cGRhdGVRdWV1ZT1nLnVwZGF0ZVF1ZXVlLGYudHlwZT1nLnR5cGUsYT1nLmRlcGVuZGVuY2llcyxcbmYuZGVwZW5kZW5jaWVzPW51bGw9PT1hP251bGw6e2xhbmVzOmEubGFuZXMsZmlyc3RDb250ZXh0OmEuZmlyc3RDb250ZXh0fSksYz1jLnNpYmxpbmc7SShQLFAuY3VycmVudCYxfDIpO3JldHVybiBiLmNoaWxkfWE9YS5zaWJsaW5nfW51bGwhPT1kLnRhaWwmJk8oKT5KaSYmKGIuZmxhZ3N8PTY0LGY9ITAsRmkoZCwhMSksYi5sYW5lcz0zMzU1NDQzMil9ZWxzZXtpZighZilpZihhPWloKGcpLG51bGwhPT1hKXtpZihiLmZsYWdzfD02NCxmPSEwLGM9YS51cGRhdGVRdWV1ZSxudWxsIT09YyYmKGIudXBkYXRlUXVldWU9YyxiLmZsYWdzfD00KSxGaShkLCEwKSxudWxsPT09ZC50YWlsJiZcImhpZGRlblwiPT09ZC50YWlsTW9kZSYmIWcuYWx0ZXJuYXRlJiYhbGgpcmV0dXJuIGI9Yi5sYXN0RWZmZWN0PWQubGFzdEVmZmVjdCxudWxsIT09YiYmKGIubmV4dEVmZmVjdD1udWxsKSxudWxsfWVsc2UgMipPKCktZC5yZW5kZXJpbmdTdGFydFRpbWU+SmkmJjEwNzM3NDE4MjQhPT1jJiYoYi5mbGFnc3w9XG42NCxmPSEwLEZpKGQsITEpLGIubGFuZXM9MzM1NTQ0MzIpO2QuaXNCYWNrd2FyZHM/KGcuc2libGluZz1iLmNoaWxkLGIuY2hpbGQ9Zyk6KGM9ZC5sYXN0LG51bGwhPT1jP2Muc2libGluZz1nOmIuY2hpbGQ9ZyxkLmxhc3Q9Zyl9cmV0dXJuIG51bGwhPT1kLnRhaWw/KGM9ZC50YWlsLGQucmVuZGVyaW5nPWMsZC50YWlsPWMuc2libGluZyxkLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0LGQucmVuZGVyaW5nU3RhcnRUaW1lPU8oKSxjLnNpYmxpbmc9bnVsbCxiPVAuY3VycmVudCxJKFAsZj9iJjF8MjpiJjEpLGMpOm51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBLaSgpLG51bGwhPT1hJiZudWxsIT09YS5tZW1vaXplZFN0YXRlIT09KG51bGwhPT1iLm1lbW9pemVkU3RhdGUpJiZcInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCIhPT1kLm1vZGUmJihiLmZsYWdzfD00KSxudWxsfXRocm93IEVycm9yKHkoMTU2LGIudGFnKSk7fVxuZnVuY3Rpb24gTGkoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDE6RmYoYS50eXBlKSYmR2YoKTt2YXIgYj1hLmZsYWdzO3JldHVybiBiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2I9YS5mbGFncztpZigwIT09KGImNjQpKXRocm93IEVycm9yKHkoMjg1KSk7YS5mbGFncz1iJi00MDk3fDY0O3JldHVybiBhO2Nhc2UgNTpyZXR1cm4gaGgoYSksbnVsbDtjYXNlIDEzOnJldHVybiBIKFApLGI9YS5mbGFncyxiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMTk6cmV0dXJuIEgoUCksbnVsbDtjYXNlIDQ6cmV0dXJuIGZoKCksbnVsbDtjYXNlIDEwOnJldHVybiByZyhhKSxudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gS2koKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24gTWkoYSxiKXt0cnl7dmFyIGM9XCJcIixkPWI7ZG8gYys9UWEoZCksZD1kLnJldHVybjt3aGlsZShkKTt2YXIgZT1jfWNhdGNoKGYpe2U9XCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIitmLm1lc3NhZ2UrXCJcXG5cIitmLnN0YWNrfXJldHVybnt2YWx1ZTphLHNvdXJjZTpiLHN0YWNrOmV9fWZ1bmN0aW9uIE5pKGEsYil7dHJ5e2NvbnNvbGUuZXJyb3IoYi52YWx1ZSl9Y2F0Y2goYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGM7fSl9fXZhciBPaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcDtmdW5jdGlvbiBQaShhLGIsYyl7Yz16ZygtMSxjKTtjLnRhZz0zO2MucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgZD1iLnZhbHVlO2MuY2FsbGJhY2s9ZnVuY3Rpb24oKXtRaXx8KFFpPSEwLFJpPWQpO05pKGEsYil9O3JldHVybiBjfVxuZnVuY3Rpb24gU2koYSxiLGMpe2M9emcoLTEsYyk7Yy50YWc9Mzt2YXIgZD1hLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZT1iLnZhbHVlO2MucGF5bG9hZD1mdW5jdGlvbigpe05pKGEsYik7cmV0dXJuIGQoZSl9fXZhciBmPWEuc3RhdGVOb2RlO251bGwhPT1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCIhPT10eXBlb2YgZCYmKG51bGw9PT1UaT9UaT1uZXcgU2V0KFt0aGlzXSk6VGkuYWRkKHRoaXMpLE5pKGEsYikpO3ZhciBjPWIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChiLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09Yz9jOlwiXCJ9KX0pO3JldHVybiBjfXZhciBVaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldDtcbmZ1bmN0aW9uIFZpKGEpe3ZhciBiPWEucmVmO2lmKG51bGwhPT1iKWlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXRyeXtiKG51bGwpfWNhdGNoKGMpe1dpKGEsYyl9ZWxzZSBiLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBYaShhLGIpe3N3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOnJldHVybjtjYXNlIDE6aWYoYi5mbGFncyYyNTYmJm51bGwhPT1hKXt2YXIgYz1hLm1lbW9pemVkUHJvcHMsZD1hLm1lbW9pemVkU3RhdGU7YT1iLnN0YXRlTm9kZTtiPWEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoYi5lbGVtZW50VHlwZT09PWIudHlwZT9jOmxnKGIudHlwZSxjKSxkKTthLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWJ9cmV0dXJuO2Nhc2UgMzpiLmZsYWdzJjI1NiYmcWYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7cmV0dXJuO2Nhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fVxuZnVuY3Rpb24gWWkoYSxiLGMpe3N3aXRjaChjLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOmI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve2lmKDM9PT0oYS50YWcmMykpe3ZhciBkPWEuY3JlYXRlO2EuZGVzdHJveT1kKCl9YT1hLm5leHR9d2hpbGUoYSE9PWIpfWI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve3ZhciBlPWE7ZD1lLm5leHQ7ZT1lLnRhZzswIT09KGUmNCkmJjAhPT0oZSYxKSYmKFppKGMsYSksJGkoYyxhKSk7YT1kfXdoaWxlKGEhPT1iKX1yZXR1cm47Y2FzZSAxOmE9Yy5zdGF0ZU5vZGU7Yy5mbGFncyY0JiYobnVsbD09PWI/YS5jb21wb25lbnREaWRNb3VudCgpOihkPWMuZWxlbWVudFR5cGU9PT1jLnR5cGU/Yi5tZW1vaXplZFByb3BzOmxnKGMudHlwZSxiLm1lbW9pemVkUHJvcHMpLGEuY29tcG9uZW50RGlkVXBkYXRlKGQsXG5iLm1lbW9pemVkU3RhdGUsYS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSkpKTtiPWMudXBkYXRlUXVldWU7bnVsbCE9PWImJkVnKGMsYixhKTtyZXR1cm47Y2FzZSAzOmI9Yy51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YT1udWxsO2lmKG51bGwhPT1jLmNoaWxkKXN3aXRjaChjLmNoaWxkLnRhZyl7Y2FzZSA1OmE9Yy5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOmE9Yy5jaGlsZC5zdGF0ZU5vZGV9RWcoYyxiLGEpfXJldHVybjtjYXNlIDU6YT1jLnN0YXRlTm9kZTtudWxsPT09YiYmYy5mbGFncyY0JiZtZihjLnR5cGUsYy5tZW1vaXplZFByb3BzKSYmYS5mb2N1cygpO3JldHVybjtjYXNlIDY6cmV0dXJuO2Nhc2UgNDpyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsPT09Yy5tZW1vaXplZFN0YXRlJiYoYz1jLmFsdGVybmF0ZSxudWxsIT09YyYmKGM9Yy5tZW1vaXplZFN0YXRlLG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbCE9PWMmJkNjKGMpKSkpO1xucmV0dXJuO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMzpjYXNlIDI0OnJldHVybn10aHJvdyBFcnJvcih5KDE2MykpO31cbmZ1bmN0aW9uIGFqKGEsYil7Zm9yKHZhciBjPWE7Oyl7aWYoNT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihiKWQ9ZC5zdHlsZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5zZXRQcm9wZXJ0eT9kLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLFwibm9uZVwiLFwiaW1wb3J0YW50XCIpOmQuZGlzcGxheT1cIm5vbmVcIjtlbHNle2Q9Yy5zdGF0ZU5vZGU7dmFyIGU9Yy5tZW1vaXplZFByb3BzLnN0eWxlO2U9dm9pZCAwIT09ZSYmbnVsbCE9PWUmJmUuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2UuZGlzcGxheTpudWxsO2Quc3R5bGUuZGlzcGxheT1zYihcImRpc3BsYXlcIixlKX19ZWxzZSBpZig2PT09Yy50YWcpYy5zdGF0ZU5vZGUubm9kZVZhbHVlPWI/XCJcIjpjLm1lbW9pemVkUHJvcHM7ZWxzZSBpZigoMjMhPT1jLnRhZyYmMjQhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8Yz09PWEpJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PVxuYSlicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YSlyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGJqKGEsYil7aWYoTWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBNZi5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7TWYub25Db21taXRGaWJlclVubW91bnQoTGYsYil9Y2F0Y2goZil7fXN3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMjI6YT1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hJiYoYT1hLmxhc3RFZmZlY3QsbnVsbCE9PWEpKXt2YXIgYz1hPWEubmV4dDtkb3t2YXIgZD1jLGU9ZC5kZXN0cm95O2Q9ZC50YWc7aWYodm9pZCAwIT09ZSlpZigwIT09KGQmNCkpWmkoYixjKTtlbHNle2Q9Yjt0cnl7ZSgpfWNhdGNoKGYpe1dpKGQsZil9fWM9Yy5uZXh0fXdoaWxlKGMhPT1hKX1icmVhaztjYXNlIDE6VmkoYik7YT1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7YS5wcm9wcz1iLm1lbW9pemVkUHJvcHMsYS5zdGF0ZT1iLm1lbW9pemVkU3RhdGUsYS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKGYpe1dpKGIsXG5mKX1icmVhaztjYXNlIDU6VmkoYik7YnJlYWs7Y2FzZSA0OmNqKGEsYil9fWZ1bmN0aW9uIGRqKGEpe2EuYWx0ZXJuYXRlPW51bGw7YS5jaGlsZD1udWxsO2EuZGVwZW5kZW5jaWVzPW51bGw7YS5maXJzdEVmZmVjdD1udWxsO2EubGFzdEVmZmVjdD1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5yZXR1cm49bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gZWooYSl7cmV0dXJuIDU9PT1hLnRhZ3x8Mz09PWEudGFnfHw0PT09YS50YWd9XG5mdW5jdGlvbiBmaihhKXthOntmb3IodmFyIGI9YS5yZXR1cm47bnVsbCE9PWI7KXtpZihlaihiKSlicmVhayBhO2I9Yi5yZXR1cm59dGhyb3cgRXJyb3IoeSgxNjApKTt9dmFyIGM9YjtiPWMuc3RhdGVOb2RlO3N3aXRjaChjLnRhZyl7Y2FzZSA1OnZhciBkPSExO2JyZWFrO2Nhc2UgMzpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2Nhc2UgNDpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgxNjEpKTt9Yy5mbGFncyYxNiYmKHBiKGIsXCJcIiksYy5mbGFncyY9LTE3KTthOmI6Zm9yKGM9YTs7KXtmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGVqKGMucmV0dXJuKSl7Yz1udWxsO2JyZWFrIGF9Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2ZvcihjPWMuc2libGluZzs1IT09Yy50YWcmJjYhPT1jLnRhZyYmMTghPT1jLnRhZzspe2lmKGMuZmxhZ3MmMiljb250aW51ZSBiO2lmKG51bGw9PT1cbmMuY2hpbGR8fDQ9PT1jLnRhZyljb250aW51ZSBiO2Vsc2UgYy5jaGlsZC5yZXR1cm49YyxjPWMuY2hpbGR9aWYoIShjLmZsYWdzJjIpKXtjPWMuc3RhdGVOb2RlO2JyZWFrIGF9fWQ/Z2ooYSxjLGIpOmhqKGEsYyxiKX1cbmZ1bmN0aW9uIGdqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiPzg9PT1jLm5vZGVUeXBlP2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxiKTpjLmluc2VydEJlZm9yZShhLGIpOig4PT09Yy5ub2RlVHlwZT8oYj1jLnBhcmVudE5vZGUsYi5pbnNlcnRCZWZvcmUoYSxjKSk6KGI9YyxiLmFwcGVuZENoaWxkKGEpKSxjPWMuX3JlYWN0Um9vdENvbnRhaW5lcixudWxsIT09YyYmdm9pZCAwIT09Y3x8bnVsbCE9PWIub25jbGlja3x8KGIub25jbGljaz1qZikpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihnaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWdqKGEsYixjKSxhPWEuc2libGluZ31cbmZ1bmN0aW9uIGhqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiP2MuaW5zZXJ0QmVmb3JlKGEsYik6Yy5hcHBlbmRDaGlsZChhKTtlbHNlIGlmKDQhPT1kJiYoYT1hLmNoaWxkLG51bGwhPT1hKSlmb3IoaGooYSxiLGMpLGE9YS5zaWJsaW5nO251bGwhPT1hOyloaihhLGIsYyksYT1hLnNpYmxpbmd9XG5mdW5jdGlvbiBjaihhLGIpe2Zvcih2YXIgYz1iLGQ9ITEsZSxmOzspe2lmKCFkKXtkPWMucmV0dXJuO2E6Zm9yKDs7KXtpZihudWxsPT09ZCl0aHJvdyBFcnJvcih5KDE2MCkpO2U9ZC5zdGF0ZU5vZGU7c3dpdGNoKGQudGFnKXtjYXNlIDU6Zj0hMTticmVhayBhO2Nhc2UgMzplPWUuY29udGFpbmVySW5mbztmPSEwO2JyZWFrIGE7Y2FzZSA0OmU9ZS5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYX1kPWQucmV0dXJufWQ9ITB9aWYoNT09PWMudGFnfHw2PT09Yy50YWcpe2E6Zm9yKHZhciBnPWEsaD1jLGs9aDs7KWlmKGJqKGcsayksbnVsbCE9PWsuY2hpbGQmJjQhPT1rLnRhZylrLmNoaWxkLnJldHVybj1rLGs9ay5jaGlsZDtlbHNle2lmKGs9PT1oKWJyZWFrIGE7Zm9yKDtudWxsPT09ay5zaWJsaW5nOyl7aWYobnVsbD09PWsucmV0dXJufHxrLnJldHVybj09PWgpYnJlYWsgYTtrPWsucmV0dXJufWsuc2libGluZy5yZXR1cm49ay5yZXR1cm47az1rLnNpYmxpbmd9Zj8oZz1lLGg9Yy5zdGF0ZU5vZGUsXG44PT09Zy5ub2RlVHlwZT9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk6Zy5yZW1vdmVDaGlsZChoKSk6ZS5yZW1vdmVDaGlsZChjLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09Yy50YWcpe2lmKG51bGwhPT1jLmNoaWxkKXtlPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87Zj0hMDtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihiaihhLGMpLG51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybjs0PT09Yy50YWcmJihkPSExKX1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGlqKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjp2YXIgYz1iLnVwZGF0ZVF1ZXVlO2M9bnVsbCE9PWM/Yy5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWMpe3ZhciBkPWM9Yy5uZXh0O2RvIDM9PT0oZC50YWcmMykmJihhPWQuZGVzdHJveSxkLmRlc3Ryb3k9dm9pZCAwLHZvaWQgMCE9PWEmJmEoKSksZD1kLm5leHQ7d2hpbGUoZCE9PWMpfXJldHVybjtjYXNlIDE6cmV0dXJuO2Nhc2UgNTpjPWIuc3RhdGVOb2RlO2lmKG51bGwhPWMpe2Q9Yi5tZW1vaXplZFByb3BzO3ZhciBlPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpkO2E9Yi50eXBlO3ZhciBmPWIudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKG51bGwhPT1mKXtjW3hmXT1kO1wiaW5wdXRcIj09PWEmJlwicmFkaW9cIj09PWQudHlwZSYmbnVsbCE9ZC5uYW1lJiYkYShjLGQpO3diKGEsZSk7Yj13YihhLGQpO2ZvcihlPTA7ZTxmLmxlbmd0aDtlKz1cbjIpe3ZhciBnPWZbZV0saD1mW2UrMV07XCJzdHlsZVwiPT09Zz90YihjLGgpOlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWc/b2IoYyxoKTpcImNoaWxkcmVuXCI9PT1nP3BiKGMsaCk6cWEoYyxnLGgsYil9c3dpdGNoKGEpe2Nhc2UgXCJpbnB1dFwiOmFiKGMsZCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYyxkKTticmVhaztjYXNlIFwic2VsZWN0XCI6YT1jLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsYy5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhZC5tdWx0aXBsZSxmPWQudmFsdWUsbnVsbCE9Zj9mYihjLCEhZC5tdWx0aXBsZSxmLCExKTphIT09ISFkLm11bHRpcGxlJiYobnVsbCE9ZC5kZWZhdWx0VmFsdWU/ZmIoYywhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApOmZiKGMsISFkLm11bHRpcGxlLGQubXVsdGlwbGU/W106XCJcIiwhMSkpfX19cmV0dXJuO2Nhc2UgNjppZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjIpKTtiLnN0YXRlTm9kZS5ub2RlVmFsdWU9XG5iLm1lbW9pemVkUHJvcHM7cmV0dXJuO2Nhc2UgMzpjPWIuc3RhdGVOb2RlO2MuaHlkcmF0ZSYmKGMuaHlkcmF0ZT0hMSxDYyhjLmNvbnRhaW5lckluZm8pKTtyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsIT09Yi5tZW1vaXplZFN0YXRlJiYoamo9TygpLGFqKGIuY2hpbGQsITApKTtraihiKTtyZXR1cm47Y2FzZSAxOTpraihiKTtyZXR1cm47Y2FzZSAxNzpyZXR1cm47Y2FzZSAyMzpjYXNlIDI0OmFqKGIsbnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSk7cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fWZ1bmN0aW9uIGtqKGEpe3ZhciBiPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2EudXBkYXRlUXVldWU9bnVsbDt2YXIgYz1hLnN0YXRlTm9kZTtudWxsPT09YyYmKGM9YS5zdGF0ZU5vZGU9bmV3IFVpKTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9bGouYmluZChudWxsLGEsYik7Yy5oYXMoYil8fChjLmFkZChiKSxiLnRoZW4oZCxkKSl9KX19XG5mdW5jdGlvbiBtaihhLGIpe3JldHVybiBudWxsIT09YSYmKGE9YS5tZW1vaXplZFN0YXRlLG51bGw9PT1hfHxudWxsIT09YS5kZWh5ZHJhdGVkKT8oYj1iLm1lbW9pemVkU3RhdGUsbnVsbCE9PWImJm51bGw9PT1iLmRlaHlkcmF0ZWQpOiExfXZhciBuaj1NYXRoLmNlaWwsb2o9cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixwaj1yYS5SZWFjdEN1cnJlbnRPd25lcixYPTAsVT1udWxsLFk9bnVsbCxXPTAscWo9MCxyaj1CZigwKSxWPTAsc2o9bnVsbCx0aj0wLERnPTAsSGk9MCx1aj0wLHZqPW51bGwsamo9MCxKaT1JbmZpbml0eTtmdW5jdGlvbiB3aigpe0ppPU8oKSs1MDB9dmFyIFo9bnVsbCxRaT0hMSxSaT1udWxsLFRpPW51bGwseGo9ITEseWo9bnVsbCx6aj05MCxBaj1bXSxCaj1bXSxDaj1udWxsLERqPTAsRWo9bnVsbCxGaj0tMSxHaj0wLEhqPTAsSWo9bnVsbCxKaj0hMTtmdW5jdGlvbiBIZygpe3JldHVybiAwIT09KFgmNDgpP08oKTotMSE9PUZqP0ZqOkZqPU8oKX1cbmZ1bmN0aW9uIElnKGEpe2E9YS5tb2RlO2lmKDA9PT0oYSYyKSlyZXR1cm4gMTtpZigwPT09KGEmNCkpcmV0dXJuIDk5PT09ZWcoKT8xOjI7MD09PUdqJiYoR2o9dGopO2lmKDAhPT1rZy50cmFuc2l0aW9uKXswIT09SGomJihIaj1udWxsIT09dmo/dmoucGVuZGluZ0xhbmVzOjApO2E9R2o7dmFyIGI9NDE4NjExMiZ+SGo7YiY9LWI7MD09PWImJihhPTQxODYxMTImfmEsYj1hJi1hLDA9PT1iJiYoYj04MTkyKSk7cmV0dXJuIGJ9YT1lZygpOzAhPT0oWCY0KSYmOTg9PT1hP2E9WGMoMTIsR2opOihhPVNjKGEpLGE9WGMoYSxHaikpO3JldHVybiBhfVxuZnVuY3Rpb24gSmcoYSxiLGMpe2lmKDUwPERqKXRocm93IERqPTAsRWo9bnVsbCxFcnJvcih5KDE4NSkpO2E9S2ooYSxiKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDskYyhhLGIsYyk7YT09PVUmJihIaXw9Yiw0PT09ViYmSWkoYSxXKSk7dmFyIGQ9ZWcoKTsxPT09Yj8wIT09KFgmOCkmJjA9PT0oWCY0OCk/TGooYSk6KE1qKGEsYyksMD09PVgmJih3aigpLGlnKCkpKTooMD09PShYJjQpfHw5OCE9PWQmJjk5IT09ZHx8KG51bGw9PT1Daj9Daj1uZXcgU2V0KFthXSk6Q2ouYWRkKGEpKSxNaihhLGMpKTt2aj1hfWZ1bmN0aW9uIEtqKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH1cbmZ1bmN0aW9uIE1qKGEsYil7Zm9yKHZhciBjPWEuY2FsbGJhY2tOb2RlLGQ9YS5zdXNwZW5kZWRMYW5lcyxlPWEucGluZ2VkTGFuZXMsZj1hLmV4cGlyYXRpb25UaW1lcyxnPWEucGVuZGluZ0xhbmVzOzA8Zzspe3ZhciBoPTMxLVZjKGcpLGs9MTw8aCxsPWZbaF07aWYoLTE9PT1sKXtpZigwPT09KGsmZCl8fDAhPT0oayZlKSl7bD1iO1JjKGspO3ZhciBuPUY7ZltoXT0xMDw9bj9sKzI1MDo2PD1uP2wrNUUzOi0xfX1lbHNlIGw8PWImJihhLmV4cGlyZWRMYW5lc3w9ayk7ZyY9fmt9ZD1VYyhhLGE9PT1VP1c6MCk7Yj1GO2lmKDA9PT1kKW51bGwhPT1jJiYoYyE9PVpmJiZQZihjKSxhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tQcmlvcml0eT0wKTtlbHNle2lmKG51bGwhPT1jKXtpZihhLmNhbGxiYWNrUHJpb3JpdHk9PT1iKXJldHVybjtjIT09WmYmJlBmKGMpfTE1PT09Yj8oYz1Mai5iaW5kKG51bGwsYSksbnVsbD09PWFnPyhhZz1bY10sYmc9T2YoVWYsamcpKTphZy5wdXNoKGMpLFxuYz1aZik6MTQ9PT1iP2M9aGcoOTksTGouYmluZChudWxsLGEpKTooYz1UYyhiKSxjPWhnKGMsTmouYmluZChudWxsLGEpKSk7YS5jYWxsYmFja1ByaW9yaXR5PWI7YS5jYWxsYmFja05vZGU9Y319XG5mdW5jdGlvbiBOaihhKXtGaj0tMTtIaj1Haj0wO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYj1hLmNhbGxiYWNrTm9kZTtpZihPaigpJiZhLmNhbGxiYWNrTm9kZSE9PWIpcmV0dXJuIG51bGw7dmFyIGM9VWMoYSxhPT09VT9XOjApO2lmKDA9PT1jKXJldHVybiBudWxsO3ZhciBkPWM7dmFyIGU9WDtYfD0xNjt2YXIgZj1QaigpO2lmKFUhPT1hfHxXIT09ZCl3aigpLFFqKGEsZCk7ZG8gdHJ5e1JqKCk7YnJlYWt9Y2F0Y2goaCl7U2ooYSxoKX13aGlsZSgxKTtxZygpO29qLmN1cnJlbnQ9ZjtYPWU7bnVsbCE9PVk/ZD0wOihVPW51bGwsVz0wLGQ9Vik7aWYoMCE9PSh0aiZIaSkpUWooYSwwKTtlbHNlIGlmKDAhPT1kKXsyPT09ZCYmKFh8PTY0LGEuaHlkcmF0ZSYmKGEuaHlkcmF0ZT0hMSxxZihhLmNvbnRhaW5lckluZm8pKSxjPVdjKGEpLDAhPT1jJiYoZD1UaihhLGMpKSk7aWYoMT09PWQpdGhyb3cgYj1zaixRaihhLDApLElpKGEsYyksTWooYSxPKCkpLGI7YS5maW5pc2hlZFdvcms9XG5hLmN1cnJlbnQuYWx0ZXJuYXRlO2EuZmluaXNoZWRMYW5lcz1jO3N3aXRjaChkKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKHkoMzQ1KSk7Y2FzZSAyOlVqKGEpO2JyZWFrO2Nhc2UgMzpJaShhLGMpO2lmKChjJjYyOTE0NTYwKT09PWMmJihkPWpqKzUwMC1PKCksMTA8ZCkpe2lmKDAhPT1VYyhhLDApKWJyZWFrO2U9YS5zdXNwZW5kZWRMYW5lcztpZigoZSZjKSE9PWMpe0hnKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1vZihVai5iaW5kKG51bGwsYSksZCk7YnJlYWt9VWooYSk7YnJlYWs7Y2FzZSA0OklpKGEsYyk7aWYoKGMmNDE4NjExMik9PT1jKWJyZWFrO2Q9YS5ldmVudFRpbWVzO2ZvcihlPS0xOzA8Yzspe3ZhciBnPTMxLVZjKGMpO2Y9MTw8ZztnPWRbZ107Zz5lJiYoZT1nKTtjJj1+Zn1jPWU7Yz1PKCktYztjPSgxMjA+Yz8xMjA6NDgwPmM/NDgwOjEwODA+Yz8xMDgwOjE5MjA+Yz8xOTIwOjNFMz5jPzNFMzo0MzIwPlxuYz80MzIwOjE5NjAqbmooYy8xOTYwKSktYztpZigxMDxjKXthLnRpbWVvdXRIYW5kbGU9b2YoVWouYmluZChudWxsLGEpLGMpO2JyZWFrfVVqKGEpO2JyZWFrO2Nhc2UgNTpVaihhKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHkoMzI5KSk7fX1NaihhLE8oKSk7cmV0dXJuIGEuY2FsbGJhY2tOb2RlPT09Yj9Oai5iaW5kKG51bGwsYSk6bnVsbH1mdW5jdGlvbiBJaShhLGIpe2ImPX51ajtiJj1+SGk7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS1WYyhiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19XG5mdW5jdGlvbiBMaihhKXtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzI3KSk7T2ooKTtpZihhPT09VSYmMCE9PShhLmV4cGlyZWRMYW5lcyZXKSl7dmFyIGI9Vzt2YXIgYz1UaihhLGIpOzAhPT0odGomSGkpJiYoYj1VYyhhLGIpLGM9VGooYSxiKSl9ZWxzZSBiPVVjKGEsMCksYz1UaihhLGIpOzAhPT1hLnRhZyYmMj09PWMmJihYfD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9ITEscWYoYS5jb250YWluZXJJbmZvKSksYj1XYyhhKSwwIT09YiYmKGM9VGooYSxiKSkpO2lmKDE9PT1jKXRocm93IGM9c2osUWooYSwwKSxJaShhLGIpLE1qKGEsTygpKSxjO2EuZmluaXNoZWRXb3JrPWEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWI7VWooYSk7TWooYSxPKCkpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gVmooKXtpZihudWxsIT09Q2ope3ZhciBhPUNqO0NqPW51bGw7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZXhwaXJlZExhbmVzfD0yNCZhLnBlbmRpbmdMYW5lcztNaihhLE8oKSl9KX1pZygpfWZ1bmN0aW9uIFdqKGEsYil7dmFyIGM9WDtYfD0xO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIFhqKGEsYil7dmFyIGM9WDtYJj0tMjtYfD04O3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIG5pKGEsYil7SShyaixxaik7cWp8PWI7dGp8PWJ9ZnVuY3Rpb24gS2koKXtxaj1yai5jdXJyZW50O0gocmopfVxuZnVuY3Rpb24gUWooYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEscGYoYykpO2lmKG51bGwhPT1ZKWZvcihjPVkucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yztzd2l0Y2goZC50YWcpe2Nhc2UgMTpkPWQudHlwZS5jaGlsZENvbnRleHRUeXBlcztudWxsIT09ZCYmdm9pZCAwIT09ZCYmR2YoKTticmVhaztjYXNlIDM6ZmgoKTtIKE4pO0goTSk7dWgoKTticmVhaztjYXNlIDU6aGgoZCk7YnJlYWs7Y2FzZSA0OmZoKCk7YnJlYWs7Y2FzZSAxMzpIKFApO2JyZWFrO2Nhc2UgMTk6SChQKTticmVhaztjYXNlIDEwOnJnKGQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyNDpLaSgpfWM9Yy5yZXR1cm59VT1hO1k9VGcoYS5jdXJyZW50LG51bGwpO1c9cWo9dGo9YjtWPTA7c2o9bnVsbDt1aj1IaT1EZz0wfVxuZnVuY3Rpb24gU2ooYSxiKXtkb3t2YXIgYz1ZO3RyeXtxZygpO3ZoLmN1cnJlbnQ9R2g7aWYoeWgpe2Zvcih2YXIgZD1SLm1lbW9pemVkU3RhdGU7bnVsbCE9PWQ7KXt2YXIgZT1kLnF1ZXVlO251bGwhPT1lJiYoZS5wZW5kaW5nPW51bGwpO2Q9ZC5uZXh0fXloPSExfXhoPTA7VD1TPVI9bnVsbDt6aD0hMTtwai5jdXJyZW50PW51bGw7aWYobnVsbD09PWN8fG51bGw9PT1jLnJldHVybil7Vj0xO3NqPWI7WT1udWxsO2JyZWFrfWE6e3ZhciBmPWEsZz1jLnJldHVybixoPWMsaz1iO2I9VztoLmZsYWdzfD0yMDQ4O2guZmlyc3RFZmZlY3Q9aC5sYXN0RWZmZWN0PW51bGw7aWYobnVsbCE9PWsmJlwib2JqZWN0XCI9PT10eXBlb2YgayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGsudGhlbil7dmFyIGw9aztpZigwPT09KGgubW9kZSYyKSl7dmFyIG49aC5hbHRlcm5hdGU7bj8oaC51cGRhdGVRdWV1ZT1uLnVwZGF0ZVF1ZXVlLGgubWVtb2l6ZWRTdGF0ZT1uLm1lbW9pemVkU3RhdGUsaC5sYW5lcz1uLmxhbmVzKTpcbihoLnVwZGF0ZVF1ZXVlPW51bGwsaC5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBBPTAhPT0oUC5jdXJyZW50JjEpLHA9Zztkb3t2YXIgQztpZihDPTEzPT09cC50YWcpe3ZhciB4PXAubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09eClDPW51bGwhPT14LmRlaHlkcmF0ZWQ/ITA6ITE7ZWxzZXt2YXIgdz1wLm1lbW9pemVkUHJvcHM7Qz12b2lkIDA9PT13LmZhbGxiYWNrPyExOiEwIT09dy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjaz8hMDpBPyExOiEwfX1pZihDKXt2YXIgej1wLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT16KXt2YXIgdT1uZXcgU2V0O3UuYWRkKGwpO3AudXBkYXRlUXVldWU9dX1lbHNlIHouYWRkKGwpO2lmKDA9PT0ocC5tb2RlJjIpKXtwLmZsYWdzfD02NDtoLmZsYWdzfD0xNjM4NDtoLmZsYWdzJj0tMjk4MTtpZigxPT09aC50YWcpaWYobnVsbD09PWguYWx0ZXJuYXRlKWgudGFnPTE3O2Vsc2V7dmFyIHQ9emcoLTEsMSk7dC50YWc9MjtBZyhoLHQpfWgubGFuZXN8PTE7YnJlYWsgYX1rPVxudm9pZCAwO2g9Yjt2YXIgcT1mLnBpbmdDYWNoZTtudWxsPT09cT8ocT1mLnBpbmdDYWNoZT1uZXcgT2ksaz1uZXcgU2V0LHEuc2V0KGwsaykpOihrPXEuZ2V0KGwpLHZvaWQgMD09PWsmJihrPW5ldyBTZXQscS5zZXQobCxrKSkpO2lmKCFrLmhhcyhoKSl7ay5hZGQoaCk7dmFyIHY9WWouYmluZChudWxsLGYsbCxoKTtsLnRoZW4odix2KX1wLmZsYWdzfD00MDk2O3AubGFuZXM9YjticmVhayBhfXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApO2s9RXJyb3IoKFJhKGgudHlwZSl8fFwiQSBSZWFjdCBjb21wb25lbnRcIikrXCIgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuXFxuQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byBwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS5cIil9NSE9PVYmJihWPTIpO2s9TWkoayxoKTtwPVxuZztkb3tzd2l0Y2gocC50YWcpe2Nhc2UgMzpmPWs7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBKPVBpKHAsZixiKTtCZyhwLEopO2JyZWFrIGE7Y2FzZSAxOmY9azt2YXIgSz1wLnR5cGUsUT1wLnN0YXRlTm9kZTtpZigwPT09KHAuZmxhZ3MmNjQpJiYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEsuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09USYmXCJmdW5jdGlvblwiPT09dHlwZW9mIFEuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoUSkpKSl7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBMPVNpKHAsZixiKTtCZyhwLEwpO2JyZWFrIGF9fXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApfVpqKGMpfWNhdGNoKHZhKXtiPXZhO1k9PT1jJiZudWxsIT09YyYmKFk9Yz1jLnJldHVybik7Y29udGludWV9YnJlYWt9d2hpbGUoMSl9XG5mdW5jdGlvbiBQaigpe3ZhciBhPW9qLmN1cnJlbnQ7b2ouY3VycmVudD1HaDtyZXR1cm4gbnVsbD09PWE/R2g6YX1mdW5jdGlvbiBUaihhLGIpe3ZhciBjPVg7WHw9MTY7dmFyIGQ9UGooKTtVPT09YSYmVz09PWJ8fFFqKGEsYik7ZG8gdHJ5e2FrKCk7YnJlYWt9Y2F0Y2goZSl7U2ooYSxlKX13aGlsZSgxKTtxZygpO1g9Yztvai5jdXJyZW50PWQ7aWYobnVsbCE9PVkpdGhyb3cgRXJyb3IoeSgyNjEpKTtVPW51bGw7Vz0wO3JldHVybiBWfWZ1bmN0aW9uIGFrKCl7Zm9yKDtudWxsIT09WTspYmsoWSl9ZnVuY3Rpb24gUmooKXtmb3IoO251bGwhPT1ZJiYhUWYoKTspYmsoWSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Y2soYS5hbHRlcm5hdGUsYSxxaik7YS5tZW1vaXplZFByb3BzPWEucGVuZGluZ1Byb3BzO251bGw9PT1iP1pqKGEpOlk9Yjtwai5jdXJyZW50PW51bGx9XG5mdW5jdGlvbiBaaihhKXt2YXIgYj1hO2Rve3ZhciBjPWIuYWx0ZXJuYXRlO2E9Yi5yZXR1cm47aWYoMD09PShiLmZsYWdzJjIwNDgpKXtjPUdpKGMsYixxaik7aWYobnVsbCE9PWMpe1k9YztyZXR1cm59Yz1iO2lmKDI0IT09Yy50YWcmJjIzIT09Yy50YWd8fG51bGw9PT1jLm1lbW9pemVkU3RhdGV8fDAhPT0ocWomMTA3Mzc0MTgyNCl8fDA9PT0oYy5tb2RlJjQpKXtmb3IodmFyIGQ9MCxlPWMuY2hpbGQ7bnVsbCE9PWU7KWR8PWUubGFuZXN8ZS5jaGlsZExhbmVzLGU9ZS5zaWJsaW5nO2MuY2hpbGRMYW5lcz1kfW51bGwhPT1hJiYwPT09KGEuZmxhZ3MmMjA0OCkmJihudWxsPT09YS5maXJzdEVmZmVjdCYmKGEuZmlyc3RFZmZlY3Q9Yi5maXJzdEVmZmVjdCksbnVsbCE9PWIubGFzdEVmZmVjdCYmKG51bGwhPT1hLmxhc3RFZmZlY3QmJihhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxhLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0KSwxPGIuZmxhZ3MmJihudWxsIT09XG5hLmxhc3RFZmZlY3Q/YS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YjphLmZpcnN0RWZmZWN0PWIsYS5sYXN0RWZmZWN0PWIpKX1lbHNle2M9TGkoYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTIwNDc7WT1jO3JldHVybn1udWxsIT09YSYmKGEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PW51bGwsYS5mbGFnc3w9MjA0OCl9Yj1iLnNpYmxpbmc7aWYobnVsbCE9PWIpe1k9YjtyZXR1cm59WT1iPWF9d2hpbGUobnVsbCE9PWIpOzA9PT1WJiYoVj01KX1mdW5jdGlvbiBVaihhKXt2YXIgYj1lZygpO2dnKDk5LGRrLmJpbmQobnVsbCxhLGIpKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRrKGEsYil7ZG8gT2ooKTt3aGlsZShudWxsIT09eWopO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYz1hLmZpbmlzaGVkV29yaztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IoeSgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO3ZhciBkPWMubGFuZXN8Yy5jaGlsZExhbmVzLGU9ZCxmPWEucGVuZGluZ0xhbmVzJn5lO2EucGVuZGluZ0xhbmVzPWU7YS5zdXNwZW5kZWRMYW5lcz0wO2EucGluZ2VkTGFuZXM9MDthLmV4cGlyZWRMYW5lcyY9ZTthLm11dGFibGVSZWFkTGFuZXMmPWU7YS5lbnRhbmdsZWRMYW5lcyY9ZTtlPWEuZW50YW5nbGVtZW50cztmb3IodmFyIGc9YS5ldmVudFRpbWVzLGg9YS5leHBpcmF0aW9uVGltZXM7MDxmOyl7dmFyIGs9MzEtVmMoZiksbD0xPDxrO2Vba109MDtnW2tdPS0xO2hba109LTE7ZiY9fmx9bnVsbCE9PVxuQ2omJjA9PT0oZCYyNCkmJkNqLmhhcyhhKSYmQ2ouZGVsZXRlKGEpO2E9PT1VJiYoWT1VPW51bGwsVz0wKTsxPGMuZmxhZ3M/bnVsbCE9PWMubGFzdEVmZmVjdD8oYy5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxkPWMuZmlyc3RFZmZlY3QpOmQ9YzpkPWMuZmlyc3RFZmZlY3Q7aWYobnVsbCE9PWQpe2U9WDtYfD0zMjtwai5jdXJyZW50PW51bGw7a2Y9ZmQ7Zz1OZSgpO2lmKE9lKGcpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBnKWg9e3N0YXJ0Omcuc2VsZWN0aW9uU3RhcnQsZW5kOmcuc2VsZWN0aW9uRW5kfTtlbHNlIGE6aWYoaD0oaD1nLm93bmVyRG9jdW1lbnQpJiZoLmRlZmF1bHRWaWV3fHx3aW5kb3csKGw9aC5nZXRTZWxlY3Rpb24mJmguZ2V0U2VsZWN0aW9uKCkpJiYwIT09bC5yYW5nZUNvdW50KXtoPWwuYW5jaG9yTm9kZTtmPWwuYW5jaG9yT2Zmc2V0O2s9bC5mb2N1c05vZGU7bD1sLmZvY3VzT2Zmc2V0O3RyeXtoLm5vZGVUeXBlLGsubm9kZVR5cGV9Y2F0Y2godmEpe2g9bnVsbDtcbmJyZWFrIGF9dmFyIG49MCxBPS0xLHA9LTEsQz0wLHg9MCx3PWcsej1udWxsO2I6Zm9yKDs7KXtmb3IodmFyIHU7Oyl7dyE9PWh8fDAhPT1mJiYzIT09dy5ub2RlVHlwZXx8KEE9bitmKTt3IT09a3x8MCE9PWwmJjMhPT13Lm5vZGVUeXBlfHwocD1uK2wpOzM9PT13Lm5vZGVUeXBlJiYobis9dy5ub2RlVmFsdWUubGVuZ3RoKTtpZihudWxsPT09KHU9dy5maXJzdENoaWxkKSlicmVhazt6PXc7dz11fWZvcig7Oyl7aWYodz09PWcpYnJlYWsgYjt6PT09aCYmKytDPT09ZiYmKEE9bik7ej09PWsmJisreD09PWwmJihwPW4pO2lmKG51bGwhPT0odT13Lm5leHRTaWJsaW5nKSlicmVhazt3PXo7ej13LnBhcmVudE5vZGV9dz11fWg9LTE9PT1BfHwtMT09PXA/bnVsbDp7c3RhcnQ6QSxlbmQ6cH19ZWxzZSBoPW51bGw7aD1ofHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBoPW51bGw7bGY9e2ZvY3VzZWRFbGVtOmcsc2VsZWN0aW9uUmFuZ2U6aH07ZmQ9ITE7SWo9bnVsbDtKaj0hMTtaPWQ7ZG8gdHJ5e2VrKCl9Y2F0Y2godmEpe2lmKG51bGw9PT1cblopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7SWo9bnVsbDtaPWQ7ZG8gdHJ5e2ZvcihnPWE7bnVsbCE9PVo7KXt2YXIgdD1aLmZsYWdzO3QmMTYmJnBiKFouc3RhdGVOb2RlLFwiXCIpO2lmKHQmMTI4KXt2YXIgcT1aLmFsdGVybmF0ZTtpZihudWxsIT09cSl7dmFyIHY9cS5yZWY7bnVsbCE9PXYmJihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdj92KG51bGwpOnYuY3VycmVudD1udWxsKX19c3dpdGNoKHQmMTAzOCl7Y2FzZSAyOmZqKFopO1ouZmxhZ3MmPS0zO2JyZWFrO2Nhc2UgNjpmaihaKTtaLmZsYWdzJj0tMztpaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDEwMjQ6Wi5mbGFncyY9LTEwMjU7YnJlYWs7Y2FzZSAxMDI4OlouZmxhZ3MmPS0xMDI1O2lqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgNDppaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDg6aD1aO2NqKGcsaCk7dmFyIEo9aC5hbHRlcm5hdGU7ZGooaCk7bnVsbCE9PVxuSiYmZGooSil9Wj1aLm5leHRFZmZlY3R9fWNhdGNoKHZhKXtpZihudWxsPT09Wil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTt2PWxmO3E9TmUoKTt0PXYuZm9jdXNlZEVsZW07Zz12LnNlbGVjdGlvblJhbmdlO2lmKHEhPT10JiZ0JiZ0Lm93bmVyRG9jdW1lbnQmJk1lKHQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdCkpe251bGwhPT1nJiZPZSh0KSYmKHE9Zy5zdGFydCx2PWcuZW5kLHZvaWQgMD09PXYmJih2PXEpLFwic2VsZWN0aW9uU3RhcnRcImluIHQ/KHQuc2VsZWN0aW9uU3RhcnQ9cSx0LnNlbGVjdGlvbkVuZD1NYXRoLm1pbih2LHQudmFsdWUubGVuZ3RoKSk6KHY9KHE9dC5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnEuZGVmYXVsdFZpZXd8fHdpbmRvdyx2LmdldFNlbGVjdGlvbiYmKHY9di5nZXRTZWxlY3Rpb24oKSxoPXQudGV4dENvbnRlbnQubGVuZ3RoLEo9TWF0aC5taW4oZy5zdGFydCxoKSxnPXZvaWQgMD09PVxuZy5lbmQ/SjpNYXRoLm1pbihnLmVuZCxoKSwhdi5leHRlbmQmJko+ZyYmKGg9ZyxnPUosSj1oKSxoPUxlKHQsSiksZj1MZSh0LGcpLGgmJmYmJigxIT09di5yYW5nZUNvdW50fHx2LmFuY2hvck5vZGUhPT1oLm5vZGV8fHYuYW5jaG9yT2Zmc2V0IT09aC5vZmZzZXR8fHYuZm9jdXNOb2RlIT09Zi5ub2RlfHx2LmZvY3VzT2Zmc2V0IT09Zi5vZmZzZXQpJiYocT1xLmNyZWF0ZVJhbmdlKCkscS5zZXRTdGFydChoLm5vZGUsaC5vZmZzZXQpLHYucmVtb3ZlQWxsUmFuZ2VzKCksSj5nPyh2LmFkZFJhbmdlKHEpLHYuZXh0ZW5kKGYubm9kZSxmLm9mZnNldCkpOihxLnNldEVuZChmLm5vZGUsZi5vZmZzZXQpLHYuYWRkUmFuZ2UocSkpKSkpKTtxPVtdO2Zvcih2PXQ7dj12LnBhcmVudE5vZGU7KTE9PT12Lm5vZGVUeXBlJiZxLnB1c2goe2VsZW1lbnQ6dixsZWZ0OnYuc2Nyb2xsTGVmdCx0b3A6di5zY3JvbGxUb3B9KTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpO2Zvcih0PVxuMDt0PHEubGVuZ3RoO3QrKyl2PXFbdF0sdi5lbGVtZW50LnNjcm9sbExlZnQ9di5sZWZ0LHYuZWxlbWVudC5zY3JvbGxUb3A9di50b3B9ZmQ9ISFrZjtsZj1rZj1udWxsO2EuY3VycmVudD1jO1o9ZDtkbyB0cnl7Zm9yKHQ9YTtudWxsIT09Wjspe3ZhciBLPVouZmxhZ3M7SyYzNiYmWWkodCxaLmFsdGVybmF0ZSxaKTtpZihLJjEyOCl7cT12b2lkIDA7dmFyIFE9Wi5yZWY7aWYobnVsbCE9PVEpe3ZhciBMPVouc3RhdGVOb2RlO3N3aXRjaChaLnRhZyl7Y2FzZSA1OnE9TDticmVhaztkZWZhdWx0OnE9TH1cImZ1bmN0aW9uXCI9PT10eXBlb2YgUT9RKHEpOlEuY3VycmVudD1xfX1aPVoubmV4dEVmZmVjdH19Y2F0Y2godmEpe2lmKG51bGw9PT1aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO1o9bnVsbDskZigpO1g9ZX1lbHNlIGEuY3VycmVudD1jO2lmKHhqKXhqPSExLHlqPWEsemo9YjtlbHNlIGZvcihaPWQ7bnVsbCE9PVo7KWI9XG5aLm5leHRFZmZlY3QsWi5uZXh0RWZmZWN0PW51bGwsWi5mbGFncyY4JiYoSz1aLEsuc2libGluZz1udWxsLEsuc3RhdGVOb2RlPW51bGwpLFo9YjtkPWEucGVuZGluZ0xhbmVzOzA9PT1kJiYoVGk9bnVsbCk7MT09PWQ/YT09PUVqP0RqKys6KERqPTAsRWo9YSk6RGo9MDtjPWMuc3RhdGVOb2RlO2lmKE1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgTWYub25Db21taXRGaWJlclJvb3QpdHJ5e01mLm9uQ29tbWl0RmliZXJSb290KExmLGMsdm9pZCAwLDY0PT09KGMuY3VycmVudC5mbGFncyY2NCkpfWNhdGNoKHZhKXt9TWooYSxPKCkpO2lmKFFpKXRocm93IFFpPSExLGE9UmksUmk9bnVsbCxhO2lmKDAhPT0oWCY4KSlyZXR1cm4gbnVsbDtpZygpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gZWsoKXtmb3IoO251bGwhPT1aOyl7dmFyIGE9Wi5hbHRlcm5hdGU7Smp8fG51bGw9PT1Janx8KDAhPT0oWi5mbGFncyY4KT9kYyhaLElqKSYmKEpqPSEwKToxMz09PVoudGFnJiZtaihhLFopJiZkYyhaLElqKSYmKEpqPSEwKSk7dmFyIGI9Wi5mbGFnczswIT09KGImMjU2KSYmWGkoYSxaKTswPT09KGImNTEyKXx8eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSk7Wj1aLm5leHRFZmZlY3R9fWZ1bmN0aW9uIE9qKCl7aWYoOTAhPT16ail7dmFyIGE9OTc8emo/OTc6emo7emo9OTA7cmV0dXJuIGdnKGEsZmspfXJldHVybiExfWZ1bmN0aW9uICRpKGEsYil7QWoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfWZ1bmN0aW9uIFppKGEsYil7QmoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfVxuZnVuY3Rpb24gZmsoKXtpZihudWxsPT09eWopcmV0dXJuITE7dmFyIGE9eWo7eWo9bnVsbDtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzMxKSk7dmFyIGI9WDtYfD0zMjt2YXIgYz1CajtCaj1bXTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTIpe3ZhciBlPWNbZF0sZj1jW2QrMV0sZz1lLmRlc3Ryb3k7ZS5kZXN0cm95PXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyl0cnl7ZygpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Yz1BajtBaj1bXTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCs9Mil7ZT1jW2RdO2Y9Y1tkKzFdO3RyeXt2YXIgaD1lLmNyZWF0ZTtlLmRlc3Ryb3k9aCgpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Zm9yKGg9YS5jdXJyZW50LmZpcnN0RWZmZWN0O251bGwhPT1oOylhPWgubmV4dEVmZmVjdCxoLm5leHRFZmZlY3Q9bnVsbCxoLmZsYWdzJjgmJihoLnNpYmxpbmc9XG5udWxsLGguc3RhdGVOb2RlPW51bGwpLGg9YTtYPWI7aWcoKTtyZXR1cm4hMH1mdW5jdGlvbiBnayhhLGIsYyl7Yj1NaShjLGIpO2I9UGkoYSxiLDEpO0FnKGEsYik7Yj1IZygpO2E9S2ooYSwxKTtudWxsIT09YSYmKCRjKGEsMSxiKSxNaihhLGIpKX1cbmZ1bmN0aW9uIFdpKGEsYil7aWYoMz09PWEudGFnKWdrKGEsYSxiKTtlbHNlIGZvcih2YXIgYz1hLnJldHVybjtudWxsIT09Yzspe2lmKDM9PT1jLnRhZyl7Z2soYyxhLGIpO2JyZWFrfWVsc2UgaWYoMT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoZCkpKXthPU1pKGIsYSk7dmFyIGU9U2koYyxhLDEpO0FnKGMsZSk7ZT1IZygpO2M9S2ooYywxKTtpZihudWxsIT09YykkYyhjLDEsZSksTWooYyxlKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVRpfHwhVGkuaGFzKGQpKSl0cnl7ZC5jb21wb25lbnREaWRDYXRjaChiLGEpfWNhdGNoKGYpe31icmVha319Yz1jLnJldHVybn19XG5mdW5jdGlvbiBZaihhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7bnVsbCE9PWQmJmQuZGVsZXRlKGIpO2I9SGcoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmM7VT09PWEmJihXJmMpPT09YyYmKDQ9PT1WfHwzPT09ViYmKFcmNjI5MTQ1NjApPT09VyYmNTAwPk8oKS1qaj9RaihhLDApOnVqfD1jKTtNaihhLGIpfWZ1bmN0aW9uIGxqKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbCE9PWMmJmMuZGVsZXRlKGIpO2I9MDswPT09YiYmKGI9YS5tb2RlLDA9PT0oYiYyKT9iPTE6MD09PShiJjQpP2I9OTk9PT1lZygpPzE6MjooMD09PUdqJiYoR2o9dGopLGI9WWMoNjI5MTQ1NjAmfkdqKSwwPT09YiYmKGI9NDE5NDMwNCkpKTtjPUhnKCk7YT1LaihhLGIpO251bGwhPT1hJiYoJGMoYSxiLGMpLE1qKGEsYykpfXZhciBjaztcbmNrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iLmxhbmVzO2lmKG51bGwhPT1hKWlmKGEubWVtb2l6ZWRQcm9wcyE9PWIucGVuZGluZ1Byb3BzfHxOLmN1cnJlbnQpdWc9ITA7ZWxzZSBpZigwIT09KGMmZCkpdWc9MCE9PShhLmZsYWdzJjE2Mzg0KT8hMDohMTtlbHNle3VnPSExO3N3aXRjaChiLnRhZyl7Y2FzZSAzOnJpKGIpO3NoKCk7YnJlYWs7Y2FzZSA1OmdoKGIpO2JyZWFrO2Nhc2UgMTpGZihiLnR5cGUpJiZKZihiKTticmVhaztjYXNlIDQ6ZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOmQ9Yi5tZW1vaXplZFByb3BzLnZhbHVlO3ZhciBlPWIudHlwZS5fY29udGV4dDtJKG1nLGUuX2N1cnJlbnRWYWx1ZSk7ZS5fY3VycmVudFZhbHVlPWQ7YnJlYWs7Y2FzZSAxMzppZihudWxsIT09Yi5tZW1vaXplZFN0YXRlKXtpZigwIT09KGMmYi5jaGlsZC5jaGlsZExhbmVzKSlyZXR1cm4gdGkoYSxiLGMpO0koUCxQLmN1cnJlbnQmMSk7Yj1oaShhLGIsYyk7cmV0dXJuIG51bGwhPT1cbmI/Yi5zaWJsaW5nOm51bGx9SShQLFAuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjY0KSl7aWYoZClyZXR1cm4gQWkoYSxiLGMpO2IuZmxhZ3N8PTY0fWU9Yi5tZW1vaXplZFN0YXRlO251bGwhPT1lJiYoZS5yZW5kZXJpbmc9bnVsbCxlLnRhaWw9bnVsbCxlLmxhc3RFZmZlY3Q9bnVsbCk7SShQLFAuY3VycmVudCk7aWYoZClicmVhaztlbHNlIHJldHVybiBudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gYi5sYW5lcz0wLG1pKGEsYixjKX1yZXR1cm4gaGkoYSxiLGMpfWVsc2UgdWc9ITE7Yi5sYW5lcz0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmQ9Yi50eXBlO251bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpO2E9Yi5wZW5kaW5nUHJvcHM7ZT1FZihiLE0uY3VycmVudCk7dGcoYixjKTtlPUNoKG51bGwsYixkLGEsZSxjKTtiLmZsYWdzfD0xO2lmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBlJiZudWxsIT09ZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGUucmVuZGVyJiZ2b2lkIDA9PT1lLiQkdHlwZW9mKXtiLnRhZz0xO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtpZihGZihkKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO2IubWVtb2l6ZWRTdGF0ZT1udWxsIT09ZS5zdGF0ZSYmdm9pZCAwIT09ZS5zdGF0ZT9lLnN0YXRlOm51bGw7eGcoYik7dmFyIGc9ZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XCJmdW5jdGlvblwiPT09dHlwZW9mIGcmJkdnKGIsZCxnLGEpO2UudXBkYXRlcj1LZztiLnN0YXRlTm9kZT1lO2UuX3JlYWN0SW50ZXJuYWxzPWI7T2coYixkLGEsYyk7Yj1xaShudWxsLGIsZCwhMCxmLGMpfWVsc2UgYi50YWc9MCxmaShudWxsLGIsZSxjKSxiPWIuY2hpbGQ7cmV0dXJuIGI7Y2FzZSAxNjplPWIuZWxlbWVudFR5cGU7YTp7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7XG5hPWIucGVuZGluZ1Byb3BzO2Y9ZS5faW5pdDtlPWYoZS5fcGF5bG9hZCk7Yi50eXBlPWU7Zj1iLnRhZz1oayhlKTthPWxnKGUsYSk7c3dpdGNoKGYpe2Nhc2UgMDpiPWxpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE6Yj1waShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxMTpiPWdpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE0OmI9aWkobnVsbCxiLGUsbGcoZS50eXBlLGEpLGQsYyk7YnJlYWsgYX10aHJvdyBFcnJvcih5KDMwNixlLFwiXCIpKTt9cmV0dXJuIGI7Y2FzZSAwOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGxpKGEsYixkLGUsYyk7Y2FzZSAxOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLHBpKGEsYixkLGUsYyk7Y2FzZSAzOnJpKGIpO2Q9Yi51cGRhdGVRdWV1ZTtpZihudWxsPT09YXx8bnVsbD09PWQpdGhyb3cgRXJyb3IoeSgyODIpKTtcbmQ9Yi5wZW5kaW5nUHJvcHM7ZT1iLm1lbW9pemVkU3RhdGU7ZT1udWxsIT09ZT9lLmVsZW1lbnQ6bnVsbDt5ZyhhLGIpO0NnKGIsZCxudWxsLGMpO2Q9Yi5tZW1vaXplZFN0YXRlLmVsZW1lbnQ7aWYoZD09PWUpc2goKSxiPWhpKGEsYixjKTtlbHNle2U9Yi5zdGF0ZU5vZGU7aWYoZj1lLmh5ZHJhdGUpa2g9cmYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSxqaD1iLGY9bGg9ITA7aWYoZil7YT1lLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7aWYobnVsbCE9YSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSs9MilmPWFbZV0sZi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1hW2UrMV0sdGgucHVzaChmKTtjPVpnKGIsbnVsbCxkLGMpO2ZvcihiLmNoaWxkPWM7YzspYy5mbGFncz1jLmZsYWdzJi0zfDEwMjQsYz1jLnNpYmxpbmd9ZWxzZSBmaShhLGIsZCxjKSxzaCgpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIGdoKGIpLG51bGw9PT1hJiZcbnBoKGIpLGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZj1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6bnVsbCxnPWUuY2hpbGRyZW4sbmYoZCxlKT9nPW51bGw6bnVsbCE9PWYmJm5mKGQsZikmJihiLmZsYWdzfD0xNiksb2koYSxiKSxmaShhLGIsZyxjKSxiLmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJnBoKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4gdGkoYSxiLGMpO2Nhc2UgNDpyZXR1cm4gZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT1hP2IuY2hpbGQ9WWcoYixudWxsLGQsYyk6ZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDExOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGdpKGEsYixkLGUsYyk7Y2FzZSA3OnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbmMpLGIuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMDphOntkPWIudHlwZS5fY29udGV4dDtlPWIucGVuZGluZ1Byb3BzO2c9Yi5tZW1vaXplZFByb3BzO2Y9ZS52YWx1ZTt2YXIgaD1iLnR5cGUuX2NvbnRleHQ7SShtZyxoLl9jdXJyZW50VmFsdWUpO2guX2N1cnJlbnRWYWx1ZT1mO2lmKG51bGwhPT1nKWlmKGg9Zy52YWx1ZSxmPUhlKGgsZik/MDooXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzP2QuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKGgsZik6MTA3Mzc0MTgyMyl8MCwwPT09Zil7aWYoZy5jaGlsZHJlbj09PWUuY2hpbGRyZW4mJiFOLmN1cnJlbnQpe2I9aGkoYSxiLGMpO2JyZWFrIGF9fWVsc2UgZm9yKGg9Yi5jaGlsZCxudWxsIT09aCYmKGgucmV0dXJuPWIpO251bGwhPT1oOyl7dmFyIGs9aC5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWspe2c9aC5jaGlsZDtmb3IodmFyIGw9XG5rLmZpcnN0Q29udGV4dDtudWxsIT09bDspe2lmKGwuY29udGV4dD09PWQmJjAhPT0obC5vYnNlcnZlZEJpdHMmZikpezE9PT1oLnRhZyYmKGw9emcoLTEsYyYtYyksbC50YWc9MixBZyhoLGwpKTtoLmxhbmVzfD1jO2w9aC5hbHRlcm5hdGU7bnVsbCE9PWwmJihsLmxhbmVzfD1jKTtzZyhoLnJldHVybixjKTtrLmxhbmVzfD1jO2JyZWFrfWw9bC5uZXh0fX1lbHNlIGc9MTA9PT1oLnRhZz9oLnR5cGU9PT1iLnR5cGU/bnVsbDpoLmNoaWxkOmguY2hpbGQ7aWYobnVsbCE9PWcpZy5yZXR1cm49aDtlbHNlIGZvcihnPWg7bnVsbCE9PWc7KXtpZihnPT09Yil7Zz1udWxsO2JyZWFrfWg9Zy5zaWJsaW5nO2lmKG51bGwhPT1oKXtoLnJldHVybj1nLnJldHVybjtnPWg7YnJlYWt9Zz1nLnJldHVybn1oPWd9ZmkoYSxiLGUuY2hpbGRyZW4sYyk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgOTpyZXR1cm4gZT1iLnR5cGUsZj1iLnBlbmRpbmdQcm9wcyxkPWYuY2hpbGRyZW4sdGcoYixjKSxlPXZnKGUsXG5mLnVuc3RhYmxlX29ic2VydmVkQml0cyksZD1kKGUpLGIuZmxhZ3N8PTEsZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDE0OnJldHVybiBlPWIudHlwZSxmPWxnKGUsYi5wZW5kaW5nUHJvcHMpLGY9bGcoZS50eXBlLGYpLGlpKGEsYixlLGYsZCxjKTtjYXNlIDE1OnJldHVybiBraShhLGIsYi50eXBlLGIucGVuZGluZ1Byb3BzLGQsYyk7Y2FzZSAxNzpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKSxiLnRhZz0xLEZmKGQpPyhhPSEwLEpmKGIpKTphPSExLHRnKGIsYyksTWcoYixkLGUpLE9nKGIsZCxlLGMpLHFpKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gQWkoYSxiLGMpO2Nhc2UgMjM6cmV0dXJuIG1pKGEsYixjKTtjYXNlIDI0OnJldHVybiBtaShhLGIsYyl9dGhyb3cgRXJyb3IoeSgxNTYsYi50YWcpKTtcbn07ZnVuY3Rpb24gaWsoYSxiLGMsZCl7dGhpcy50YWc9YTt0aGlzLmtleT1jO3RoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGw7dGhpcy5pbmRleD0wO3RoaXMucmVmPW51bGw7dGhpcy5wZW5kaW5nUHJvcHM9Yjt0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbDt0aGlzLm1vZGU9ZDt0aGlzLmZsYWdzPTA7dGhpcy5sYXN0RWZmZWN0PXRoaXMuZmlyc3RFZmZlY3Q9dGhpcy5uZXh0RWZmZWN0PW51bGw7dGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIG5oKGEsYixjLGQpe3JldHVybiBuZXcgaWsoYSxiLGMsZCl9ZnVuY3Rpb24gamkoYSl7YT1hLnByb3RvdHlwZTtyZXR1cm4hKCFhfHwhYS5pc1JlYWN0Q29tcG9uZW50KX1cbmZ1bmN0aW9uIGhrKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBqaShhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09QWEpcmV0dXJuIDExO2lmKGE9PT1EYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiBUZyhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPW5oKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMubmV4dEVmZmVjdD1udWxsLGMuZmlyc3RFZmZlY3Q9bnVsbCxjLmxhc3RFZmZlY3Q9bnVsbCk7Yy5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcztjLmxhbmVzPWEubGFuZXM7Yy5jaGlsZD1hLmNoaWxkO2MubWVtb2l6ZWRQcm9wcz1hLm1lbW9pemVkUHJvcHM7Yy5tZW1vaXplZFN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtjLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWU7Yj1hLmRlcGVuZGVuY2llcztjLmRlcGVuZGVuY2llcz1udWxsPT09Yj9udWxsOntsYW5lczpiLmxhbmVzLGZpcnN0Q29udGV4dDpiLmZpcnN0Q29udGV4dH07XG5jLnNpYmxpbmc9YS5zaWJsaW5nO2MuaW5kZXg9YS5pbmRleDtjLnJlZj1hLnJlZjtyZXR1cm4gY31cbmZ1bmN0aW9uIFZnKGEsYixjLGQsZSxmKXt2YXIgZz0yO2Q9YTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlqaShhKSYmKGc9MSk7ZWxzZSBpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpZz01O2Vsc2UgYTpzd2l0Y2goYSl7Y2FzZSB1YTpyZXR1cm4gWGcoYy5jaGlsZHJlbixlLGYsYik7Y2FzZSBIYTpnPTg7ZXw9MTY7YnJlYWs7Y2FzZSB3YTpnPTg7ZXw9MTticmVhaztjYXNlIHhhOnJldHVybiBhPW5oKDEyLGMsYixlfDgpLGEuZWxlbWVudFR5cGU9eGEsYS50eXBlPXhhLGEubGFuZXM9ZixhO2Nhc2UgQmE6cmV0dXJuIGE9bmgoMTMsYyxiLGUpLGEudHlwZT1CYSxhLmVsZW1lbnRUeXBlPUJhLGEubGFuZXM9ZixhO2Nhc2UgQ2E6cmV0dXJuIGE9bmgoMTksYyxiLGUpLGEuZWxlbWVudFR5cGU9Q2EsYS5sYW5lcz1mLGE7Y2FzZSBJYTpyZXR1cm4gdmkoYyxlLGYsYik7Y2FzZSBKYTpyZXR1cm4gYT1uaCgyNCxjLGIsZSksYS5lbGVtZW50VHlwZT1KYSxhLmxhbmVzPWYsYTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBhJiZudWxsIT09YSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB5YTpnPTEwO2JyZWFrIGE7Y2FzZSB6YTpnPTk7YnJlYWsgYTtjYXNlIEFhOmc9MTE7YnJlYWsgYTtjYXNlIERhOmc9MTQ7YnJlYWsgYTtjYXNlIEVhOmc9MTY7ZD1udWxsO2JyZWFrIGE7Y2FzZSBGYTpnPTIyO2JyZWFrIGF9dGhyb3cgRXJyb3IoeSgxMzAsbnVsbD09YT9hOnR5cGVvZiBhLFwiXCIpKTt9Yj1uaChnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIFhnKGEsYixjLGQpe2E9bmgoNyxhLGQsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIHZpKGEsYixjLGQpe2E9bmgoMjMsYSxkLGIpO2EuZWxlbWVudFR5cGU9SWE7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIFVnKGEsYixjKXthPW5oKDYsYSxudWxsLGIpO2EubGFuZXM9YztyZXR1cm4gYX1cbmZ1bmN0aW9uIFdnKGEsYixjKXtiPW5oKDQsbnVsbCE9PWEuY2hpbGRyZW4/YS5jaGlsZHJlbjpbXSxhLmtleSxiKTtiLmxhbmVzPWM7Yi5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86YS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmEuaW1wbGVtZW50YXRpb259O3JldHVybiBifVxuZnVuY3Rpb24gamsoYSxiLGMpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5oeWRyYXRlPWM7dGhpcy5jYWxsYmFja05vZGU9bnVsbDt0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MDt0aGlzLmV2ZW50VGltZXM9WmMoMCk7dGhpcy5leHBpcmF0aW9uVGltZXM9WmMoLTEpO3RoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MDt0aGlzLmVudGFuZ2xlbWVudHM9WmMoMCk7dGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPW51bGx9XG5mdW5jdGlvbiBrayhhLGIsYyl7dmFyIGQ9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOnRhLGtleTpudWxsPT1kP251bGw6XCJcIitkLGNoaWxkcmVuOmEsY29udGFpbmVySW5mbzpiLGltcGxlbWVudGF0aW9uOmN9fVxuZnVuY3Rpb24gbGsoYSxiLGMsZCl7dmFyIGU9Yi5jdXJyZW50LGY9SGcoKSxnPUlnKGUpO2E6aWYoYyl7Yz1jLl9yZWFjdEludGVybmFscztiOntpZihaYihjKSE9PWN8fDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDE3MCkpO3ZhciBoPWM7ZG97c3dpdGNoKGgudGFnKXtjYXNlIDM6aD1oLnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGI7Y2FzZSAxOmlmKEZmKGgudHlwZSkpe2g9aC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYn19aD1oLnJldHVybn13aGlsZShudWxsIT09aCk7dGhyb3cgRXJyb3IoeSgxNzEpKTt9aWYoMT09PWMudGFnKXt2YXIgaz1jLnR5cGU7aWYoRmYoaykpe2M9SWYoYyxrLGgpO2JyZWFrIGF9fWM9aH1lbHNlIGM9Q2Y7bnVsbD09PWIuY29udGV4dD9iLmNvbnRleHQ9YzpiLnBlbmRpbmdDb250ZXh0PWM7Yj16ZyhmLGcpO2IucGF5bG9hZD17ZWxlbWVudDphfTtkPXZvaWQgMD09PWQ/bnVsbDpkO251bGwhPT1cbmQmJihiLmNhbGxiYWNrPWQpO0FnKGUsYik7SmcoZSxnLGYpO3JldHVybiBnfWZ1bmN0aW9uIG1rKGEpe2E9YS5jdXJyZW50O2lmKCFhLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChhLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gbmsoYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7dmFyIGM9YS5yZXRyeUxhbmU7YS5yZXRyeUxhbmU9MCE9PWMmJmM8Yj9jOmJ9fWZ1bmN0aW9uIG9rKGEsYil7bmsoYSxiKTsoYT1hLmFsdGVybmF0ZSkmJm5rKGEsYil9ZnVuY3Rpb24gcGsoKXtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHFrKGEsYixjKXt2YXIgZD1udWxsIT1jJiZudWxsIT1jLmh5ZHJhdGlvbk9wdGlvbnMmJmMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlc3x8bnVsbDtjPW5ldyBqayhhLGIsbnVsbCE9YyYmITA9PT1jLmh5ZHJhdGUpO2I9bmgoMyxudWxsLG51bGwsMj09PWI/NzoxPT09Yj8zOjApO2MuY3VycmVudD1iO2Iuc3RhdGVOb2RlPWM7eGcoYik7YVtmZl09Yy5jdXJyZW50O2NmKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtpZihkKWZvcihhPTA7YTxkLmxlbmd0aDthKyspe2I9ZFthXTt2YXIgZT1iLl9nZXRWZXJzaW9uO2U9ZShiLl9zb3VyY2UpO251bGw9PWMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT9jLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W2IsZV06Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2goYixlKX10aGlzLl9pbnRlcm5hbFJvb3Q9Y31cbnFrLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oYSl7bGsoYSx0aGlzLl9pbnRlcm5hbFJvb3QsbnVsbCxudWxsKX07cWsucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pbnRlcm5hbFJvb3QsYj1hLmNvbnRhaW5lckluZm87bGsobnVsbCxhLG51bGwsZnVuY3Rpb24oKXtiW2ZmXT1udWxsfSl9O2Z1bmN0aW9uIHJrKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlJiYoOCE9PWEubm9kZVR5cGV8fFwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlIFwiIT09YS5ub2RlVmFsdWUpKX1cbmZ1bmN0aW9uIHNrKGEsYil7Ynx8KGI9YT85PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLmZpcnN0Q2hpbGQ6bnVsbCxiPSEoIWJ8fDEhPT1iLm5vZGVUeXBlfHwhYi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlYWN0cm9vdFwiKSkpO2lmKCFiKWZvcih2YXIgYztjPWEubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGMpO3JldHVybiBuZXcgcWsoYSwwLGI/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9XG5mdW5jdGlvbiB0ayhhLGIsYyxkLGUpe3ZhciBmPWMuX3JlYWN0Um9vdENvbnRhaW5lcjtpZihmKXt2YXIgZz1mLl9pbnRlcm5hbFJvb3Q7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBoPWU7ZT1mdW5jdGlvbigpe3ZhciBhPW1rKGcpO2guY2FsbChhKX19bGsoYixnLGEsZSl9ZWxzZXtmPWMuX3JlYWN0Um9vdENvbnRhaW5lcj1zayhjLGQpO2c9Zi5faW50ZXJuYWxSb290O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaz1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1tayhnKTtrLmNhbGwoYSl9fVhqKGZ1bmN0aW9uKCl7bGsoYixnLGEsZSl9KX1yZXR1cm4gbWsoZyl9ZWM9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKTtKZyhhLDQsYik7b2soYSw0KX19O2ZjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPUhnKCk7SmcoYSw2NzEwODg2NCxiKTtvayhhLDY3MTA4ODY0KX19O1xuZ2M9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKSxjPUlnKGEpO0pnKGEsYyxiKTtvayhhLGMpfX07aGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYigpfTtcbnliPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7Y2FzZSBcImlucHV0XCI6YWIoYSxjKTtiPWMubmFtZTtpZihcInJhZGlvXCI9PT1jLnR5cGUmJm51bGwhPWIpe2ZvcihjPWE7Yy5wYXJlbnROb2RlOyljPWMucGFyZW50Tm9kZTtjPWMucXVlcnlTZWxlY3RvckFsbChcImlucHV0W25hbWU9XCIrSlNPTi5zdHJpbmdpZnkoXCJcIitiKSsnXVt0eXBlPVwicmFkaW9cIl0nKTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdO2lmKGQhPT1hJiZkLmZvcm09PT1hLmZvcm0pe3ZhciBlPURiKGQpO2lmKCFlKXRocm93IEVycm9yKHkoOTApKTtXYShkKTthYihkLGUpfX19YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYSxjKTticmVhaztjYXNlIFwic2VsZWN0XCI6Yj1jLnZhbHVlLG51bGwhPWImJmZiKGEsISFjLm11bHRpcGxlLGIsITEpfX07R2I9V2o7XG5IYj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVg7WHw9NDt0cnl7cmV0dXJuIGdnKDk4LGEuYmluZChudWxsLGIsYyxkLGUpKX1maW5hbGx5e1g9ZiwwPT09WCYmKHdqKCksaWcoKSl9fTtJYj1mdW5jdGlvbigpezA9PT0oWCY0OSkmJihWaigpLE9qKCkpfTtKYj1mdW5jdGlvbihhLGIpe3ZhciBjPVg7WHw9Mjt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtYPWMsMD09PVgmJih3aigpLGlnKCkpfX07ZnVuY3Rpb24gdWsoYSxiKXt2YXIgYz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4ga2soYSxiLG51bGwsYyl9dmFyIHZrPXtFdmVudHM6W0NiLHVlLERiLEViLEZiLE9qLHtjdXJyZW50OiExfV19LHdrPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp3YyxidW5kbGVUeXBlOjAsdmVyc2lvbjpcIjE3LjAuMlwiLHJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIn07XG52YXIgeGs9e2J1bmRsZVR5cGU6d2suYnVuZGxlVHlwZSx2ZXJzaW9uOndrLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTp3ay5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOndrLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOnJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oYSl7YT1jYyhhKTtyZXR1cm4gbnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6d2suZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFxucGssZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH07aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB5az1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXlrLmlzRGlzYWJsZWQmJnlrLnN1cHBvcnRzRmliZXIpdHJ5e0xmPXlrLmluamVjdCh4ayksTWY9eWt9Y2F0Y2goYSl7fX1leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPXZrO2V4cG9ydHMuY3JlYXRlUG9ydGFsPXVrO1xuZXhwb3J0cy5maW5kRE9NTm9kZT1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKDE9PT1hLm5vZGVUeXBlKXJldHVybiBhO3ZhciBiPWEuX3JlYWN0SW50ZXJuYWxzO2lmKHZvaWQgMD09PWIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLnJlbmRlcil0aHJvdyBFcnJvcih5KDE4OCkpO3Rocm93IEVycm9yKHkoMjY4LE9iamVjdC5rZXlzKGEpKSk7fWE9Y2MoYik7YT1udWxsPT09YT9udWxsOmEuc3RhdGVOb2RlO3JldHVybiBhfTtleHBvcnRzLmZsdXNoU3luYz1mdW5jdGlvbihhLGIpe3ZhciBjPVg7aWYoMCE9PShjJjQ4KSlyZXR1cm4gYShiKTtYfD0xO3RyeXtpZihhKXJldHVybiBnZyg5OSxhLmJpbmQobnVsbCxiKSl9ZmluYWxseXtYPWMsaWcoKX19O2V4cG9ydHMuaHlkcmF0ZT1mdW5jdGlvbihhLGIsYyl7aWYoIXJrKGIpKXRocm93IEVycm9yKHkoMjAwKSk7cmV0dXJuIHRrKG51bGwsYSxiLCEwLGMpfTtcbmV4cG9ydHMucmVuZGVyPWZ1bmN0aW9uKGEsYixjKXtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4gdGsobnVsbCxhLGIsITEsYyl9O2V4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihhKXtpZighcmsoYSkpdGhyb3cgRXJyb3IoeSg0MCkpO3JldHVybiBhLl9yZWFjdFJvb3RDb250YWluZXI/KFhqKGZ1bmN0aW9uKCl7dGsobnVsbCxudWxsLGEsITEsZnVuY3Rpb24oKXthLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbDthW2ZmXT1udWxsfSl9KSwhMCk6ITF9O2V4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM9V2o7ZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdWsoYSxiLDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKX07XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFyayhjKSl0aHJvdyBFcnJvcih5KDIwMCkpO2lmKG51bGw9PWF8fHZvaWQgMD09PWEuX3JlYWN0SW50ZXJuYWxzKXRocm93IEVycm9yKHkoMzgpKTtyZXR1cm4gdGsoYSxiLGMsITEsZCl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGg9cmVxdWlyZShcInJlYWN0XCIpLG49cmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7ZnVuY3Rpb24gcChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIHE9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6cCxyPW4udXNlU3luY0V4dGVybmFsU3RvcmUsdD1oLnVzZVJlZix1PWgudXNlRWZmZWN0LHY9aC51c2VNZW1vLHc9aC51c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcj1mdW5jdGlvbihhLGIsZSxsLGcpe3ZhciBjPXQobnVsbCk7aWYobnVsbD09PWMuY3VycmVudCl7dmFyIGY9e2hhc1ZhbHVlOiExLHZhbHVlOm51bGx9O2MuY3VycmVudD1mfWVsc2UgZj1jLmN1cnJlbnQ7Yz12KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtpZighYyl7Yz0hMDtkPWE7YT1sKGEpO2lmKHZvaWQgMCE9PWcmJmYuaGFzVmFsdWUpe3ZhciBiPWYudmFsdWU7aWYoZyhiLGEpKXJldHVybiBrPWJ9cmV0dXJuIGs9YX1iPWs7aWYocShkLGEpKXJldHVybiBiO3ZhciBlPWwoYSk7aWYodm9pZCAwIT09ZyYmZyhiLGUpKXJldHVybiBiO2Q9YTtyZXR1cm4gaz1lfXZhciBjPSExLGQsayxtPXZvaWQgMD09PWU/bnVsbDplO3JldHVybltmdW5jdGlvbigpe3JldHVybiBhKGIoKSl9LG51bGw9PT1tP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBhKG0oKSl9XX0sW2IsZSxsLGddKTt2YXIgZD1yKGEsY1swXSxjWzFdKTtcbnUoZnVuY3Rpb24oKXtmLmhhc1ZhbHVlPSEwO2YudmFsdWU9ZH0sW2RdKTt3KGQpO3JldHVybiBkfTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBiPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGM9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxlPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxmPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxnPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxoPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnNlcnZlcl9jb250ZXh0XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLG09U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikscD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHQ9U3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSx1O3U9U3ltYm9sLmZvcihcInJlYWN0Lm1vZHVsZS5yZWZlcmVuY2VcIik7XG5mdW5jdGlvbiB2KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciByPWEuJCR0eXBlb2Y7c3dpdGNoKHIpe2Nhc2UgYjpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBkOmNhc2UgZjpjYXNlIGU6Y2FzZSBtOmNhc2UgbjpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgaDpjYXNlIGw6Y2FzZSBxOmNhc2UgcDpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gcn19Y2FzZSBjOnJldHVybiByfX19ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aDtleHBvcnRzLkNvbnRleHRQcm92aWRlcj1nO2V4cG9ydHMuRWxlbWVudD1iO2V4cG9ydHMuRm9yd2FyZFJlZj1sO2V4cG9ydHMuRnJhZ21lbnQ9ZDtleHBvcnRzLkxhenk9cTtleHBvcnRzLk1lbW89cDtleHBvcnRzLlBvcnRhbD1jO2V4cG9ydHMuUHJvZmlsZXI9ZjtleHBvcnRzLlN0cmljdE1vZGU9ZTtleHBvcnRzLlN1c3BlbnNlPW07XG5leHBvcnRzLlN1c3BlbnNlTGlzdD1uO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bH07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1xfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXB9O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bX07ZXhwb3J0cy5pc1N1c3BlbnNlTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09ZXx8YT09PW18fGE9PT1ufHxhPT09dHx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT1xfHxhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PWd8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09bHx8YS4kJHR5cGVvZj09PXV8fHZvaWQgMCE9PWEuZ2V0TW9kdWxlSWQpPyEwOiExfTtleHBvcnRzLnR5cGVPZj12O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vKiBnbG9iYWwgbW9kdWxlLCBkZWZpbmUgKi9cblxuZnVuY3Rpb24gbWFwRWFjaChtYXAsIG9wZXJhdGlvbil7XG4gIHZhciBrZXlzID0gbWFwLmtleXMoKTtcbiAgdmFyIG5leHQ7XG4gIHdoaWxlKCEobmV4dCA9IGtleXMubmV4dCgpKS5kb25lKSB7XG4gICAgb3BlcmF0aW9uKG1hcC5nZXQobmV4dC52YWx1ZSksIG5leHQudmFsdWUsIG1hcCk7XG4gIH1cbn1cblxudmFyIE11bHRpbWFwID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgbWFwQ3RvcjtcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWFwQ3RvciA9IE1hcDtcblxuICAgIGlmICghTWFwLnByb3RvdHlwZS5rZXlzKSB7XG4gICAgICBNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE11bHRpbWFwKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgc2VsZi5fbWFwID0gbWFwQ3RvcjtcblxuICAgIGlmIChNdWx0aW1hcC5NYXApIHtcbiAgICAgIHNlbGYuX21hcCA9IE11bHRpbWFwLk1hcDtcbiAgICB9XG5cbiAgICBzZWxmLl8gPSBzZWxmLl9tYXAgPyBuZXcgc2VsZi5fbWFwKCkgOiB7fTtcblxuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgaXRlcmFibGUuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIHNlbGYuc2V0KGlbMF0sIGlbMV0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHZhbHVlcywgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggYSBrZXk7XG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcCA/IHRoaXMuXy5nZXQoa2V5KSA6IHRoaXMuX1trZXldO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWwuLi5cbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGtleSA9IGFyZ3Muc2hpZnQoKTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgZW50cnkgPSBbXTtcbiAgICAgIGlmICh0aGlzLl9tYXApXG4gICAgICAgIHRoaXMuXy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuX1trZXldID0gZW50cnk7XG4gICAgfVxuXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW50cnksIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYW55IHRoaW5nIGNoYW5nZWRcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIGlmICghdGhpcy5oYXMoa2V5KSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgIHRoaXMuX21hcCA/ICh0aGlzLl8uZGVsZXRlKGtleSkpIDogKGRlbGV0ZSB0aGlzLl9ba2V5XSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgIHZhciBpZHggPSBlbnRyeS5pbmRleE9mKHZhbCk7XG4gICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgIGVudHJ5LnNwbGljZShpZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB2YWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbWFwIGNvbnRhaW5zICdrZXknIG9yICdrZXk9PnZhbCcgcGFpclxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgdmFyIGhhc0tleSA9IHRoaXMuX21hcCA/IHRoaXMuXy5oYXMoa2V5KSA6IHRoaXMuXy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSB8fCAhaGFzS2V5KVxuICAgICAgcmV0dXJuIGhhc0tleTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSkgfHwgW107XG4gICAgcmV0dXJuIGVudHJ5LmluZGV4T2YodmFsKSAhPSAtMTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSBrZXlzIGluIHRoZSBtYXBcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21hcClcbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcy5fLmtleXMoKSk7XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKE9iamVjdC5rZXlzKHRoaXMuXykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcFxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWxzID0gW107XG4gICAgdGhpcy5mb3JFYWNoRW50cnkoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZhbHMsIGVudHJ5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IodmFscyk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZm9yRWFjaEVudHJ5ID0gZnVuY3Rpb24oaXRlcikge1xuICAgIG1hcEVhY2godGhpcywgaXRlcik7XG4gIH07XG5cbiAgTXVsdGltYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihpdGVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZm9yRWFjaEVudHJ5KGZ1bmN0aW9uKGVudHJ5LCBrZXkpIHtcbiAgICAgIGVudHJ5LmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVyKGl0ZW0sIGtleSwgc2VsZik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuXG4gIE11bHRpbWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgIHRoaXMuXy5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl8gPSB7fTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIE11bHRpbWFwLnByb3RvdHlwZSxcbiAgICBcInNpemVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgICAgIG1hcEVhY2godGhpcywgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIHRvdGFsICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBNdWx0aW1hcC5wcm90b3R5cGUsXG4gICAgXCJjb3VudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl8uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB2YXIgc2FmYXJpTmV4dDtcblxuICB0cnl7XG4gICAgc2FmYXJpTmV4dCA9IG5ldyBGdW5jdGlvbignaXRlcmF0b3InLCAnbWFrZUl0ZXJhdG9yJywgJ3ZhciBrZXlzQXJyYXkgPSBbXTsgZm9yKHZhciBrZXkgb2YgaXRlcmF0b3Ipe2tleXNBcnJheS5wdXNoKGtleSk7fSByZXR1cm4gbWFrZUl0ZXJhdG9yKGtleXNBcnJheSkubmV4dDsnKTtcbiAgfWNhdGNoKGVycm9yKXtcbiAgICAvLyBmb3Igb2Ygbm90IGltcGxlbWVudGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUl0ZXJhdG9yKGl0ZXJhdG9yKXtcbiAgICBpZihBcnJheS5pc0FycmF5KGl0ZXJhdG9yKSl7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gMDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oKXtcbiAgICAgICAgICByZXR1cm4gbmV4dEluZGV4IDwgaXRlcmF0b3IubGVuZ3RoID9cbiAgICAgICAgICAgIHt2YWx1ZTogaXRlcmF0b3JbbmV4dEluZGV4KytdLCBkb25lOiBmYWxzZX0gOlxuICAgICAgICAgIHtkb25lOiB0cnVlfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFuIGlzc3VlIGluIHNhZmFyaVxuICAgIGlmKCFpdGVyYXRvci5uZXh0ICYmIHNhZmFyaU5leHQpe1xuICAgICAgaXRlcmF0b3IubmV4dCA9IHNhZmFyaU5leHQoaXRlcmF0b3IsIG1ha2VJdGVyYXRvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIE11bHRpbWFwO1xufSkoKTtcblxuXG5pZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKVxuICBtb2R1bGUuZXhwb3J0cyA9IE11bHRpbWFwO1xuZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpbWFwOyB9KTtcbiIsICIvKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuLy8gJEZsb3dGaXhNZVxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaXNJbXBvcnRSdWxlID0gcnVsZS5jaGFyQ29kZUF0KDApID09PSA2NCAmJiBydWxlLmNoYXJDb2RlQXQoMSkgPT09IDEwNTtcblxuICAgICAgaWYgKGlzSW1wb3J0UnVsZSAmJiB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSkge1xuICAgICAgICAvLyB0aGlzIHdvdWxkIG9ubHkgY2F1c2UgcHJvYmxlbSBpbiBzcGVlZHkgbW9kZVxuICAgICAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCBlbmFibGluZyBzcGVlZHkgdG8gYWZmZWN0IHRoZSBvYnNlcnZhYmxlIGJlaGF2aW9yXG4gICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGlzIGVycm9yIGF0IGFsbCB0aW1lc1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IHRoZSBmb2xsb3dpbmcgcnVsZTpcXG5cIiArIHJ1bGUgKyAnXFxuXFxuYEBpbXBvcnRgIHJ1bGVzIG11c3QgYmUgYmVmb3JlIGFsbCBvdGhlciB0eXBlcyBvZiBydWxlcyBpbiBhIHN0eWxlc2hlZXQgYnV0IG90aGVyIHJ1bGVzIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgYEBpbXBvcnRgIHJ1bGVzIGFyZSBiZWZvcmUgYWxsIG90aGVyIHJ1bGVzLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSB8fCAhaXNJbXBvcnRSdWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIS86KC1tb3otcGxhY2Vob2xkZXJ8LW1vei1mb2N1cy1pbm5lcnwtbW96LWZvY3VzcmluZ3wtbXMtaW5wdXQtcGxhY2Vob2xkZXJ8LW1vei1yZWFkLXdyaXRlfC1tb3otcmVhZC1vbmx5fC1tcy1jbGVhcnwtbXMtZXhwYW5kfC1tcy1yZXZlYWwpey8udGVzdChydWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGluc2VydGluZyB0aGUgZm9sbG93aW5nIHJ1bGU6IFxcXCJcIiArIHJ1bGUgKyBcIlxcXCJcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnBhcmVudE5vZGUgJiYgdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lUfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2hhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCByZXBsYWNlLCBzdWJzdHIsIG1hdGNofSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ICh2YWx1ZSwgbGVuZ3RoLCBjaGlsZHJlbikge1xuXHRzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcblx0XHQvLyBjb2xvci1hZGp1c3Rcblx0XHRjYXNlIDUxMDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cdFx0Y2FzZSA1NzM3OiBjYXNlIDQyMDE6IGNhc2UgMzE3NzogY2FzZSAzNDMzOiBjYXNlIDE2NDE6IGNhc2UgNDQ1NzogY2FzZSAyOTIxOlxuXHRcdC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblx0XHRjYXNlIDU1NzI6IGNhc2UgNjM1NjogY2FzZSA1ODQ0OiBjYXNlIDMxOTE6IGNhc2UgNjY0NTogY2FzZSAzMDA1OlxuXHRcdC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXHRcdGNhc2UgNjM5MTogY2FzZSA1ODc5OiBjYXNlIDU2MjM6IGNhc2UgNjEzNTogY2FzZSA0NTk5OiBjYXNlIDQ4NTU6XG5cdFx0Ly8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblx0XHRjYXNlIDQyMTU6IGNhc2UgNjM4OTogY2FzZSA1MTA5OiBjYXNlIDUzNjU6IGNhc2UgNTYyMTogY2FzZSAzODI5OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB0YWItc2l6ZVxuXHRcdGNhc2UgNDc4OTpcblx0XHRcdHJldHVybiBNT1ogKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXHRcdGNhc2UgNTM0OTogY2FzZSA0MjQ2OiBjYXNlIDQ4MTA6IGNhc2UgNjk2ODogY2FzZSAyNzU2OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDU5MzY6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG5cdFx0XHRcdC8vIHZlcnRpY2FsLWwocilcblx0XHRcdFx0Y2FzZSAxMTQ6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWVcblx0XHRcdFx0Ly8gdmVydGljYWwtcihsKVxuXHRcdFx0XHRjYXNlIDEwODpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBob3Jpem9udGFsKC0pdGJcblx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBkZWZhdWx0OiBmYWxsdGhyb3VnaCB0byBiZWxvd1xuXHRcdFx0fVxuXHRcdC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uLCBzY3JvbGwtc25hcC10eXBlLCB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDY4Mjg6IGNhc2UgNDI2ODogY2FzZSAyOTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gb3JkZXJcblx0XHRjYXNlIDYxNjU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24taXRlbXNcblx0XHRjYXNlIDUxODc6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1zZWxmXG5cdFx0Y2FzZSA1NDQzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvZywgJycpICsgKCFtYXRjaCh2YWx1ZSwgL2ZsZXgtfGJhc2VsaW5lLykgPyBNUyArICdncmlkLXJvdy0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmL2csICcnKSA6ICcnKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tY29udGVudFxuXHRcdGNhc2UgNDY3NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmL2csICcnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1zaHJpbmtcblx0XHRjYXNlIDU1NDg6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1iYXNpc1xuXHRcdGNhc2UgNTI5Mjpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtZ3Jvd1xuXHRcdGNhc2UgNjA2MDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gdHJhbnNpdGlvblxuXHRcdGNhc2UgNDU1NDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWVcblx0XHQvLyBjdXJzb3Jcblx0XHRjYXNlIDYxODc6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2Vcblx0XHRjYXNlIDU0OTU6IGNhc2UgMzk1OTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJylcblx0XHQvLyBqdXN0aWZ5LWNvbnRlbnRcblx0XHRjYXNlIDQ5Njg6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBqdXN0aWZ5LXNlbGZcblx0XHRjYXNlIDQyMDA6XG5cdFx0XHRpZiAoIW1hdGNoKHZhbHVlLCAvZmxleC18YmFzZWxpbmUvKSkgcmV0dXJuIE1TICsgJ2dyaWQtY29sdW1uLWFsaWduJyArIHN1YnN0cih2YWx1ZSwgbGVuZ3RoKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGdyaWQtdGVtcGxhdGUtKGNvbHVtbnN8cm93cylcblx0XHRjYXNlIDI1OTI6IGNhc2UgMzM2MDpcblx0XHRcdHJldHVybiBNUyArIHJlcGxhY2UodmFsdWUsICd0ZW1wbGF0ZS0nLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGdyaWQtKHJvd3xjb2x1bW4pLXN0YXJ0XG5cdFx0Y2FzZSA0Mzg0OiBjYXNlIDM2MTY6XG5cdFx0XHRpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHsgcmV0dXJuIGxlbmd0aCA9IGluZGV4LCBtYXRjaChlbGVtZW50LnByb3BzLCAvZ3JpZC1cXHcrLWVuZC8pIH0pKSB7XG5cdFx0XHRcdHJldHVybiB+aW5kZXhvZih2YWx1ZSArIChjaGlsZHJlbiA9IGNoaWxkcmVuW2xlbmd0aF0udmFsdWUpLCAnc3BhbicpID8gdmFsdWUgOiAoTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWUgKyBNUyArICdncmlkLXJvdy1zcGFuOicgKyAofmluZGV4b2YoY2hpbGRyZW4sICdzcGFuJykgPyBtYXRjaChjaGlsZHJlbiwgL1xcZCsvKSA6ICttYXRjaChjaGlsZHJlbiwgL1xcZCsvKSAtICttYXRjaCh2YWx1ZSwgL1xcZCsvKSkgKyAnOycpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWVcblx0XHQvLyBncmlkLShyb3d8Y29sdW1uKS1lbmRcblx0XHRjYXNlIDQ4OTY6IGNhc2UgNDEyODpcblx0XHRcdHJldHVybiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbWF0Y2goZWxlbWVudC5wcm9wcywgL2dyaWQtXFx3Ky1zdGFydC8pIH0pKSA/IHZhbHVlIDogTVMgKyByZXBsYWNlKHJlcGxhY2UodmFsdWUsICctZW5kJywgJy1zcGFuJyksICdzcGFuICcsICcnKSArIHZhbHVlXG5cdFx0Ly8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblx0XHRjYXNlIDQwOTU6IGNhc2UgMzU4MzogY2FzZSA0MDY4OiBjYXNlIDI1MzI6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZVxuXHRcdC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cdFx0Y2FzZSA4MTE2OiBjYXNlIDcwNTk6IGNhc2UgNTc1MzogY2FzZSA1NTM1OlxuXHRcdGNhc2UgNTQ0NTogY2FzZSA1NzAxOiBjYXNlIDQ5MzM6IGNhc2UgNDY3Nzpcblx0XHRjYXNlIDU1MzM6IGNhc2UgNTc4OTogY2FzZSA1MDIxOiBjYXNlIDQ3NjU6XG5cdFx0XHQvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG5cdFx0XHRpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KVxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcblx0XHRcdFx0XHQvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDk6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlXG5cdFx0XHRcdFx0Ly8gKHMpdHJldGNoXG5cdFx0XHRcdFx0Y2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoLCBjaGlsZHJlbikgKyB2YWx1ZSA6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gZ3JpZC0oY29sdW1ufHJvdylcblx0XHRjYXNlIDUxNTI6IGNhc2UgNTkyMDpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rPyk6KFxcZCspKFxccypcXC9cXHMqKHNwYW4pP1xccyooXFxkKykpPyguKikvLCBmdW5jdGlvbiAoXywgYSwgYiwgYywgZCwgZSwgZikgeyByZXR1cm4gKE1TICsgYSArICc6JyArIGIgKyBmKSArIChjID8gKE1TICsgYSArICctc3BhbjonICsgKGQgPyBlIDogK2UgLSArYikpICsgZiA6ICcnKSArIHZhbHVlIH0pXG5cdFx0Ly8gcG9zaXRpb246IHN0aWNreVxuXHRcdGNhc2UgNDk0OTpcblx0XHRcdC8vIHN0aWNrKHkpP1xuXHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNikgPT09IDEyMSlcblx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4fGdyaWR8aW5saW5lLWdyaWQpXG5cdFx0Y2FzZSA2NDQ0OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/IDE4IDogMTEpKSB7XG5cdFx0XHRcdC8vIChpbmxpbmUtKT9mbGUoeClcblx0XHRcdFx0Y2FzZSAxMjA6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjtcXHMhXSspKDt8KFxccyspPyEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyAoaW5saW5lLSk/Z3JpKGQpXG5cdFx0XHRcdGNhc2UgMTAwOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIE1TKSArIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIHNjcm9sbC1tYXJnaW4sIHNjcm9sbC1tYXJnaW4tKHRvcHxyaWdodHxib3R0b218bGVmdClcblx0XHRjYXNlIDU3MTk6IGNhc2UgMjY0NzogY2FzZSAyMTM1OiBjYXNlIDM5Mjc6IGNhc2UgMjM5MTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnc2Nyb2xsLScsICdzY3JvbGwtc25hcC0nKSArIHZhbHVlXG5cdH1cblxuXHRyZXR1cm4gdmFsdWVcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9zcmMvRW51bS5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1V0aWxpdHkuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QYXJzZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QcmVmaXhlci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1Rva2VuaXplci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1NlcmlhbGl6ZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9NaWRkbGV3YXJlLmpzJ1xuIiwgInZhciB3ZWFrTWVtb2l6ZSA9IGZ1bmN0aW9uIHdlYWtNZW1vaXplKGZ1bmMpIHtcbiAgLy8gJEZsb3dGaXhNZSBmbG93IGRvZXNuJ3QgaW5jbHVkZSBhbGwgbm9uLXByaW1pdGl2ZSB0eXBlcyBhcyBhbGxvd2VkIGZvciB3ZWFrbWFwc1xuICB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZS5oYXMoYXJnKSkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcpO1xuICAgIH1cblxuICAgIHZhciByZXQgPSBmdW5jKGFyZyk7XG4gICAgY2FjaGUuc2V0KGFyZywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufTtcblxuZXhwb3J0IHsgd2Vha01lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyQxIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxuLy8gdGhpcyBmaWxlIGlzb2xhdGVzIHRoaXMgcGFja2FnZSB0aGF0IGlzIG5vdCB0cmVlLXNoYWtlYWJsZVxuLy8gYW5kIGlmIHRoaXMgbW9kdWxlIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBhbnkgbG9naWMgb2YgaXRzIG93blxuLy8gdGhlbiBSb2xsdXAganVzdCB1c2UgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJyBkaXJlY3RseSBpbiBvdGhlciBjaHVua3NcblxudmFyIGhvaXN0Tm9uUmVhY3RTdGF0aWNzID0gKGZ1bmN0aW9uICh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCkge1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MkMSh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCk7XG59KTtcblxuZXhwb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgYXMgZGVmYXVsdCB9O1xuIiwgInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzQnJvd3NlciQxIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjExLjRcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9faXNvbGF0ZWQtaG5yc1wiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL3BhY2thZ2UuanNvblwiOiBcIi4vcGFja2FnZS5qc29uXCIsXG5cdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdH1cblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby4qXCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjFcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMVwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0cmVhY3Q6IFwiPj0xNi44LjBcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzTWV0YToge1xuXHRcdFwiQHR5cGVzL3JlYWN0XCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fVxuXHR9LFxuXHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjExLjJcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjExLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBDbGFzc05hbWVzLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DbGFzc05hbWVzJztcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnOyAvLyAjMTcyNywgIzI5MDUgZm9yIHNvbWUgcmVhc29uIEplc3QgYW5kIFZpdGVzdCBldmFsdWF0ZSBtb2R1bGVzIHR3aWNlIGlmIHNvbWUgY29uc3VtaW5nIG1vZHVsZSBnZXRzIG1vY2tlZFxuXG4gIHZhciBpc1Rlc3RFbnYgPSB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZpICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc1Rlc3RFbnYpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0TXVpRXJyb3JNZXNzYWdlO1xuLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvaW50ZXJuYWwtYmFiZWwtbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gcmVzdCBwYXJhbXMgb3Zlci10cmFuc3BpbGUgZm9yIHRoaXMgY2FzZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB1cmwgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTsiLCAiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhYmJyfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRpc2FibGVSZW1vdGVQbGF5YmFja3xkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxlbnRlcktleUhpbnR8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgeyBpc1Byb3BWYWxpZCBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzUHJvcFZhbGlkIGZyb20gJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0IHsgd2l0aEVtb3Rpb25DYWNoZSwgVGhlbWVDb250ZXh0IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gaXNQcm9wVmFsaWQ7XG5cbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZSc7XG59O1xuXG52YXIgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiYgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5NiA/IHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA6IHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudDtcbn07XG52YXIgY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpIHtcbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdmFyIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA9IG9wdGlvbnMuc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA/IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgcmV0dXJuIHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AocHJvcE5hbWUpICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcChwcm9wTmFtZSk7XG4gICAgfSA6IG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2hvdWxkRm9yd2FyZFByb3AgIT09ICdmdW5jdGlvbicgJiYgaXNSZWFsKSB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZEZvcndhcmRQcm9wO1xufTtcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGNyZWF0ZVN0eWxlZCA9IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIGEgc3R5bGVkIGVsZW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgY29tcG9uZW50LlxcbllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW1wb3J0IGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3R5bGVzID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQgPyB0YWcuX19lbW90aW9uX3N0eWxlcy5zbGljZSgwKSA6IFtdO1xuXG4gICAgaWYgKGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibGFiZWw6XCIgKyBpZGVudGlmaWVyTmFtZSArIFwiO1wiKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoLmFwcGx5KHN0eWxlcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1bMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzLnB1c2goYXJnc1swXVswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVtpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWU6IHdlIG5lZWQgdG8gY2FzdCBTdGF0ZWxlc3NGdW5jdGlvbmFsQ29tcG9uZW50IHRvIG91ciBQcml2YXRlU3R5bGVkQ29tcG9uZW50IGNsYXNzXG5cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICggLy8gJEZsb3dGaXhNZVxuICAgICAgICBmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9IC8vICRGbG93Rml4TWU6IGNvZXJjZSB1bmRlZmluZWQgdG8gc3RyaW5nXG5cblxuICAgICAgICByZXR1cm4gXCIuXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTdHlsZWQud2l0aENvbXBvbmVudCA9IGZ1bmN0aW9uIChuZXh0VGFnLCBuZXh0T3B0aW9ucykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlZChuZXh0VGFnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywgbmV4dE9wdGlvbnMsIHtcbiAgICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMoU3R5bGVkLCBuZXh0T3B0aW9ucywgdHJ1ZSlcbiAgICAgIH0pKS5hcHBseSh2b2lkIDAsIHN0eWxlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBTdHlsZWQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi4vYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0ICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGFncyA9IFsnYScsICdhYmJyJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmFzZScsICdiZGknLCAnYmRvJywgJ2JpZycsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsICdlbScsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ2xpbmsnLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICdtZXRlcicsICduYXYnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpbWUnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndScsICd1bCcsICd2YXInLCAndmlkZW8nLCAnd2JyJywgLy8gU1ZHXG4nY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJHcmFkaWVudCcsICdtYXNrJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdmcnLCAndGV4dCcsICd0c3BhbiddO1xuXG52YXIgbmV3U3R5bGVkID0gY3JlYXRlU3R5bGVkLmJpbmQoKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB3ZSBjYW4gaWdub3JlIHRoaXMgYmVjYXVzZSBpdHMgZXhwb3NlZCB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIENyZWF0ZVN0eWxlZCB0eXBlXG4gIG5ld1N0eWxlZFt0YWdOYW1lXSA9IG5ld1N0eWxlZCh0YWdOYW1lKTtcbn0pO1xuXG5leHBvcnQgeyBuZXdTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztyZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKTt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksZz02MDEwMztleHBvcnRzLkZyYWdtZW50PTYwMTA3O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBoPVN5bWJvbC5mb3I7Zz1oKFwicmVhY3QuZWxlbWVudFwiKTtleHBvcnRzLkZyYWdtZW50PWgoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgbT1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxrKXt2YXIgYixkPXt9LGU9bnVsbCxsPW51bGw7dm9pZCAwIT09ayYmKGU9XCJcIitrKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihsPWEucmVmKTtmb3IoYiBpbiBhKW4uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjpnLHR5cGU6YyxrZXk6ZSxyZWY6bCxwcm9wczpkLF9vd25lcjptLmN1cnJlbnR9fWV4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFN0eWxlZEVuZ2luZVByb3ZpZGVyO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfY2FjaGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAZW1vdGlvbi9jYWNoZVwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8vIHByZXBlbmQ6IHRydWUgbW92ZXMgTVVJIHN0eWxlcyB0byB0aGUgdG9wIG9mIHRoZSA8aGVhZD4gc28gdGhleSdyZSBsb2FkZWQgZmlyc3QuXG4vLyBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBlYXNpbHkgb3ZlcnJpZGUgTVVJIHN0eWxlcyB3aXRoIG90aGVyIHN0eWxpbmcgc29sdXRpb25zLCBsaWtlIENTUyBtb2R1bGVzLlxubGV0IGNhY2hlO1xuaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcpIHtcbiAgY2FjaGUgPSAoMCwgX2NhY2hlLmRlZmF1bHQpKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoX3JlYWN0Mi5DYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBfcHJvcFR5cGVzLmRlZmF1bHQubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX1N0eWxlZEVuZ2luZVByb3ZpZGVyLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gR2xvYmFsU3R5bGVzO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3R5bGVzLFxuICAgIGRlZmF1bHRUaGVtZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoZW1lSW5wdXQgPT4gc3R5bGVzKGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0KSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShfcmVhY3QyLkdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyA9IHtcbiAgZGVmYXVsdFRoZW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICBzdHlsZXM6IF9wcm9wVHlwZXMuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMuZGVmYXVsdC5hcnJheSwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmZ1bmNdKVxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX0dsb2JhbFN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfR2xvYmFsU3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9HbG9iYWxTdHlsZXNcIikpOyIsICIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNS4xMVxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYmFsU3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9HbG9iYWxTdHlsZXMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdHlsZWRFbmdpbmVQcm92aWRlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfU3R5bGVkRW5naW5lUHJvdmlkZXIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaGVtZUNvbnRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LlRoZW1lQ29udGV4dDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmNzcztcbiAgfVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBzdHlsZWQ7XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSB2b2lkIDA7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJrZXlmcmFtZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmtleWZyYW1lcztcbiAgfVxufSk7XG52YXIgX3N0eWxlZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBlbW90aW9uL3N0eWxlZFwiKSk7XG52YXIgX3JlYWN0ID0gcmVxdWlyZShcIkBlbW90aW9uL3JlYWN0XCIpO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpO1xudmFyIF9HbG9iYWxTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0dsb2JhbFN0eWxlc1wiKSk7XG5mdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSAoMCwgX3N0eWxlZC5kZWZhdWx0KSh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzOyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWVwbWVyZ2U7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGl0ZW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGl0ZW0pICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIGl0ZW0pO1xufVxuZnVuY3Rpb24gZGVlcENsb25lKHNvdXJjZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIG91dHB1dFtrZXldID0gZGVlcENsb25lKHNvdXJjZVtrZXldKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMgPSB7XG4gIGNsb25lOiB0cnVlXG59KSB7XG4gIGNvbnN0IG91dHB1dCA9IG9wdGlvbnMuY2xvbmUgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCB0YXJnZXQpIDogdGFyZ2V0O1xuICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIGlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gQXZvaWQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pICYmIGtleSBpbiB0YXJnZXQgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2xvbmUpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSA/IGRlZXBDbG9uZShzb3VyY2Vba2V5XSkgOiBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgX2V4cG9ydE5hbWVzID0ge307XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWVwbWVyZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2RlZXBtZXJnZVwiKSk7XG5PYmplY3Qua2V5cyhfZGVlcG1lcmdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZGVlcG1lcmdlW2tleV0pIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX2RlZXBtZXJnZVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2FwaXRhbGl6ZTtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbi8vIEl0IHNob3VsZCB0byBiZSBub3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXF1aXZhbGVudCB0byBgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVgLlxuLy9cbi8vIEEgc3RyaWN0IGNhcGl0YWxpemF0aW9uIHNob3VsZCB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIHNlbnRlbmNlLlxuLy8gV2Ugb25seSBoYW5kbGUgdGhlIGZpcnN0IHdvcmQuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgY2FwaXRhbGl6ZShzdHJpbmcpXFxgIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSg3KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NhcGl0YWxpemUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NhcGl0YWxpemVcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdldERpc3BsYXlOYW1lO1xuZXhwb3J0cy5nZXRGdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWU7XG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG4vLyBTaW1wbGlmaWVkIHBvbHlmaWxsIGZvciBJRTExIHN1cHBvcnRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KYW1lc01HcmVlbmUvRnVuY3Rpb24ubmFtZS9ibG9iLzU4YjMxNGQ0YTk4MzExMGMzNjgyZjEyMjhmODQ1ZDM5Y2NjYTE4MTcvRnVuY3Rpb24ubmFtZS5qcyNMM1xuY29uc3QgZm5OYW1lTWF0Y2hSZWdleCA9IC9eXFxzKmZ1bmN0aW9uKD86XFxzfFxccypcXC9cXCouKlxcKlxcL1xccyopKyhbXihcXHMvXSopXFxzKi87XG5mdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUoZm4pIHtcbiAgY29uc3QgbWF0Y2ggPSBgJHtmbn1gLm1hdGNoKGZuTmFtZU1hdGNoUmVnZXgpO1xuICBjb25zdCBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIHJldHVybiBuYW1lIHx8ICcnO1xufVxuZnVuY3Rpb24gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgZmFsbGJhY2sgPSAnJykge1xuICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IGdldEZ1bmN0aW9uTmFtZShDb21wb25lbnQpIHx8IGZhbGxiYWNrO1xufVxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZShpbm5lclR5cGUpO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gYCR7d3JhcHBlck5hbWV9KCR7ZnVuY3Rpb25OYW1lfSlgIDogd3JhcHBlck5hbWUpO1xufVxuXG4vKipcbiAqIGNoZXJyeS1waWNrIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzc2OWIxZjI3MGUxMjUxZDlkYmRjZTBmY2JkOWU5MmU1MDJkMDU5YjgvcGFja2FnZXMvc2hhcmVkL2dldENvbXBvbmVudE5hbWUuanNcbiAqIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gcmVjb21wb3NlL2dldERpc3BsYXlOYW1lIHdpdGggYWRkZWQgSUUxMSBzdXBwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXBvbmVudCkge1xuICBpZiAoQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBDb21wb25lbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgJ0NvbXBvbmVudCcpO1xuICB9XG5cbiAgLy8gVHlwZVNjcmlwdCBjYW4ndCBoYXZlIGNvbXBvbmVudHMgYXMgb2JqZWN0cyBidXQgdGhleSBleGlzdCBpbiB0aGUgZm9ybSBvZiBgbWVtb2Agb3IgYFN1c3BlbnNlYFxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKENvbXBvbmVudC4kJHR5cGVvZikge1xuICAgICAgY2FzZSBfcmVhY3RJcy5Gb3J3YXJkUmVmOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuICAgICAgY2FzZSBfcmVhY3RJcy5NZW1vOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQudHlwZSwgJ21lbW8nKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHt9O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vZ2V0RGlzcGxheU5hbWVcIikpO1xuT2JqZWN0LmtleXMoX2dldERpc3BsYXlOYW1lKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZ2V0RGlzcGxheU5hbWVba2V5XSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWVba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLCBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbih2YWwsIG1heCkpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY2xhbXA7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jbGFtcC5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NsYW1wXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIikpO1xuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cbiAgcmV0dXJuICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBtZXJnZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5jb25zdCByZXNwb25zaXZlUHJvcFR5cGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3Byb3BUeXBlcy5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlcy5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmFycmF5XSkgOiB7fTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHJlc3BvbnNpdmVQcm9wVHlwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSA9IGNvbXB1dGVCcmVha3BvaW50c0Jhc2U7XG5leHBvcnRzLmNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMuaGFuZGxlQnJlYWtwb2ludHMgPSBoYW5kbGVCcmVha3BvaW50cztcbmV4cG9ydHMubWVyZ2VCcmVha3BvaW50c0luT3JkZXIgPSBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcjtcbmV4cG9ydHMucmVtb3ZlVW51c2VkQnJlYWtwb2ludHMgPSByZW1vdmVVbnVzZWRCcmVha3BvaW50cztcbmV4cG9ydHMucmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcztcbmV4cG9ydHMudmFsdWVzID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG4vLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbi8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtWy5cbmNvbnN0IHZhbHVlcyA9IGV4cG9ydHMudmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmZ1bmN0aW9uIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSkge1xuICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gcHJvcFZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAodGhlbWVCcmVha3BvaW50cy5rZXlzW2luZGV4XSldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcFZhbHVlKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgLy8ga2V5IGlzIGJyZWFrcG9pbnRcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzLnZhbHVlcyB8fCB2YWx1ZXMpLmluZGV4T2YoYnJlYWtwb2ludCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhS2V5ID0gdGhlbWVCcmVha3BvaW50cy51cChicmVha3BvaW50KTtcbiAgICAgICAgYWNjW21lZGlhS2V5XSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3NzS2V5ID0gYnJlYWtwb2ludDtcbiAgICAgICAgYWNjW2Nzc0tleV0gPSBwcm9wVmFsdWVbY3NzS2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWUpO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYnJlYWtwb2ludHMoc3R5bGVGdW5jdGlvbikge1xuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgbmV3U3R5bGVGdW5jdGlvbiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICAgIGNvbnN0IGJhc2UgPSBzdHlsZUZ1bmN0aW9uKHByb3BzKTtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gdGhlbWVCcmVha3BvaW50cy5rZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCB7fTtcbiAgICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAoa2V5KV0gPSBzdHlsZUZ1bmN0aW9uKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBzdHlsZUZ1bmN0aW9uLnByb3BUeXBlcywge1xuICAgIHhzOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHNtOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIG1kOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIGxnOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHhsOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG4gIH0pIDoge307XG4gIG5ld1N0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgLi4uc3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wc107XG4gIHJldHVybiBuZXdTdHlsZUZ1bmN0aW9uO1xufVxuZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5mdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZnVuY3Rpb24gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIoYnJlYWtwb2ludHNJbnB1dCwgLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dCA9IFtlbXB0eUJyZWFrcG9pbnRzLCAuLi5zdHlsZXNdLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICB2YWx1ZXM6IGJyZWFrcG9pbnRWYWx1ZXMsXG4gIGJyZWFrcG9pbnRzOiB0aGVtZUJyZWFrcG9pbnRzLFxuICBiYXNlOiBjdXN0b21CYXNlXG59KSB7XG4gIGNvbnN0IGJhc2UgPSBjdXN0b21CYXNlIHx8IGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhiYXNlKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRWYWx1ZXM7XG4gIH1cbiAgbGV0IHByZXZpb3VzO1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2ldICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2ldIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gYnJlYWtwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gYnJlYWtwb2ludHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLmdldFBhdGggPSBnZXRQYXRoO1xuZXhwb3J0cy5nZXRTdHlsZVZhbHVlID0gZ2V0U3R5bGVWYWx1ZTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbmZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsLCB1c2VyVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCkge1xuICBsZXQgdmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmcocHJvcFZhbHVlRmluYWwpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVNYXBwaW5nKSkge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nW3Byb3BWYWx1ZUZpbmFsXSB8fCB1c2VyVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBnZXRQYXRoKHRoZW1lTWFwcGluZywgcHJvcFZhbHVlRmluYWwpIHx8IHVzZXJWYWx1ZTtcbiAgfVxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgdmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSwgdGhlbWVNYXBwaW5nKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzdHlsZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9wLFxuICAgIGNzc1Byb3BlcnR5ID0gb3B0aW9ucy5wcm9wLFxuICAgIHRoZW1lS2V5LFxuICAgIHRyYW5zZm9ybVxuICB9ID0gb3B0aW9ucztcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzW3Byb3BdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiAoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzdHlsZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBtZW1vaXplO1xuZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5U3BhY2luZyA9IGNyZWF0ZVVuYXJ5U3BhY2luZztcbmV4cG9ydHMuY3JlYXRlVW5hcnlVbml0ID0gY3JlYXRlVW5hcnlVbml0O1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRTdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWU7XG5leHBvcnRzLmdldFZhbHVlID0gZ2V0VmFsdWU7XG5leHBvcnRzLm1hcmdpbiA9IG1hcmdpbjtcbmV4cG9ydHMubWFyZ2luS2V5cyA9IHZvaWQgMDtcbmV4cG9ydHMucGFkZGluZyA9IHBhZGRpbmc7XG5leHBvcnRzLnBhZGRpbmdLZXlzID0gdm9pZCAwO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4vc3R5bGVcIik7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG52YXIgX21lbW9pemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lbW9pemVcIikpO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gKDAsIF9tZW1vaXplLmRlZmF1bHQpKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmNvbnN0IG1hcmdpbktleXMgPSBleHBvcnRzLm1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5jb25zdCBwYWRkaW5nS2V5cyA9IGV4cG9ydHMucGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UoX21lcmdlLmRlZmF1bHQsIHt9KTtcbn1cbmZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5mdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHNwYWNpbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY29tcG9zZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBleHBvcnRzLmJvcmRlclRvcCA9IGV4cG9ydHMuYm9yZGVyUmlnaHRDb2xvciA9IGV4cG9ydHMuYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJhZGl1cyA9IGV4cG9ydHMuYm9yZGVyTGVmdENvbG9yID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJDb2xvciA9IGV4cG9ydHMuYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5ib3JkZXJUcmFuc2Zvcm0gPSBib3JkZXJUcmFuc2Zvcm07XG5leHBvcnRzLm91dGxpbmVDb2xvciA9IGV4cG9ydHMub3V0bGluZSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuL3NwYWNpbmdcIik7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG5mdW5jdGlvbiBib3JkZXJUcmFuc2Zvcm0odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfXB4IHNvbGlkYDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJvcmRlclN0eWxlKHByb3AsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmNvbnN0IGJvcmRlciA9IGV4cG9ydHMuYm9yZGVyID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlcicsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJUb3AgPSBleHBvcnRzLmJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyQ29sb3IgPSBleHBvcnRzLmJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5jb25zdCBib3JkZXJUb3BDb2xvciA9IGV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmNvbnN0IGJvcmRlclJpZ2h0Q29sb3IgPSBleHBvcnRzLmJvcmRlclJpZ2h0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHRDb2xvcicpO1xuY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbUNvbG9yJyk7XG5jb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBleHBvcnRzLmJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmNvbnN0IG91dGxpbmUgPSBleHBvcnRzLm91dGxpbmUgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBvdXRsaW5lQ29sb3IgPSBleHBvcnRzLm91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgYm9yZGVyUmFkaXVzID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuYm9yZGVyUmFkaXVzICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuYm9yZGVyUmFkaXVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMuYm9yZGVyUmFkaXVzID0gYm9yZGVyUmFkaXVzO1xuYm9yZGVyUmFkaXVzLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGJvcmRlclJhZGl1czogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5ib3JkZXJSYWRpdXMuZmlsdGVyUHJvcHMgPSBbJ2JvcmRlclJhZGl1cyddO1xuY29uc3QgYm9yZGVycyA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBib3JkZXJzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dHYXAgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkUm93ID0gZXhwb3J0cy5ncmlkQ29sdW1uID0gZXhwb3J0cy5ncmlkQXV0b1Jvd3MgPSBleHBvcnRzLmdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gZXhwb3J0cy5ncmlkQXJlYSA9IGV4cG9ydHMuZ2FwID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5jb2x1bW5HYXAgPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4vc3BhY2luZ1wiKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmdhcCA9IGdhcDtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmNvbHVtbkdhcCA9IGNvbHVtbkdhcDtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLnJvd0dhcCA9IHJvd0dhcDtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmNvbnN0IGdyaWRDb2x1bW4gPSBleHBvcnRzLmdyaWRDb2x1bW4gPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmNvbnN0IGdyaWRSb3cgPSBleHBvcnRzLmdyaWRSb3cgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9GbG93ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRBdXRvUm93cyA9IGV4cG9ydHMuZ3JpZEF1dG9Sb3dzID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVBcmVhcyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmNvbnN0IGdyaWRBcmVhID0gZXhwb3J0cy5ncmlkQXJlYSA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGdyaWQ7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmNvbG9yID0gZXhwb3J0cy5iZ2NvbG9yID0gZXhwb3J0cy5iYWNrZ3JvdW5kQ29sb3IgPSB2b2lkIDA7XG5leHBvcnRzLnBhbGV0dGVUcmFuc2Zvcm0gPSBwYWxldHRlVHJhbnNmb3JtO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbmZ1bmN0aW9uIHBhbGV0dGVUcmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSkge1xuICBpZiAodXNlclZhbHVlID09PSAnZ3JleScpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmNvbnN0IGNvbG9yID0gZXhwb3J0cy5jb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYmdjb2xvciA9IGV4cG9ydHMuYmdjb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IGJhY2tncm91bmRDb2xvciA9IGV4cG9ydHMuYmFja2dyb3VuZENvbG9yID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgcGFsZXR0ZSA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHBhbGV0dGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVXaWR0aCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9IGV4cG9ydHMubWluV2lkdGggPSBleHBvcnRzLm1pbkhlaWdodCA9IGV4cG9ydHMubWF4V2lkdGggPSBleHBvcnRzLm1heEhlaWdodCA9IGV4cG9ydHMuaGVpZ2h0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5ib3hTaXppbmcgPSB2b2lkIDA7XG5leHBvcnRzLnNpemluZ1RyYW5zZm9ybSA9IHNpemluZ1RyYW5zZm9ybTtcbmV4cG9ydHMud2lkdGggPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xuZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmNvbnN0IHdpZHRoID0gZXhwb3J0cy53aWR0aCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtYXhXaWR0aCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubWF4V2lkdGggIT09IG51bGwpIHtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4ge1xuICAgICAgdmFyIF9wcm9wcyR0aGVtZSwgX3Byb3BzJHRoZW1lMjtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSAoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUuYnJlYWtwb2ludHMpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWVbcHJvcFZhbHVlXSkgfHwgX2JyZWFrcG9pbnRzLnZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5tYXhXaWR0aCA9IG1heFdpZHRoO1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5jb25zdCBtaW5XaWR0aCA9IGV4cG9ydHMubWluV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgaGVpZ2h0ID0gZXhwb3J0cy5oZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IG1heEhlaWdodCA9IGV4cG9ydHMubWF4SGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtaW5IZWlnaHQgPSBleHBvcnRzLm1pbkhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZVdpZHRoID0gZXhwb3J0cy5zaXplV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZUhlaWdodCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYm94U2l6aW5nID0gZXhwb3J0cy5ib3hTaXppbmcgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaXppbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG52YXIgX2JvcmRlcnMgPSByZXF1aXJlKFwiLi4vYm9yZGVyc1wiKTtcbnZhciBfY3NzR3JpZCA9IHJlcXVpcmUoXCIuLi9jc3NHcmlkXCIpO1xudmFyIF9wYWxldHRlID0gcmVxdWlyZShcIi4uL3BhbGV0dGVcIik7XG52YXIgX3NpemluZyA9IHJlcXVpcmUoXCIuLi9zaXppbmdcIik7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IF9ib3JkZXJzLmJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IF9wYWxldHRlLnBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IF9jc3NHcmlkLmdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogX2Nzc0dyaWQucm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBfY3NzR3JpZC5jb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogX3NpemluZy5tYXhXaWR0aFxuICB9LFxuICBtaW5XaWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1pbkhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRTeENvbmZpZzsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4O1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9tZXJnZVwiKSk7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4uL3N0eWxlXCIpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuLi9icmVha3BvaW50c1wiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCkge1xuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbCwgdGhlbWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgW3Byb3BdOiB2YWwsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZ1twcm9wXTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjc3NQcm9wZXJ0eSA9IHByb3AsXG4gICAgICB0aGVtZUtleSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHN0eWxlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzgxMjNcbiAgICBpZiAodGhlbWVLZXkgPT09ICd0eXBvZ3JhcGh5JyAmJiB2YWwgPT09ICdpbmhlcml0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHJldHVybiBzdHlsZShwcm9wcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICgwLCBfc3R5bGUuZ2V0U3R5bGVWYWx1ZSkodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gKDAsIF9zdHlsZS5nZXRTdHlsZVZhbHVlKSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6ICgwLCBfY2FwaXRhbGl6ZS5kZWZhdWx0KShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgdmFsLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb25TeChwcm9wcykge1xuICAgIHZhciBfdGhlbWUkdW5zdGFibGVfc3hDb247XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuICAgIGlmICghc3gpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBFbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBuZWdsZWN0IG51bGxcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gKF90aGVtZSR1bnN0YWJsZV9zeENvbiA9IHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3RoZW1lJHVuc3RhYmxlX3N4Q29uIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuXG4gICAgLypcbiAgICAgKiBSZWNlaXZlIGBzeElucHV0YCBhcyBvYmplY3Qgb3IgY2FsbGJhY2tcbiAgICAgKiBhbmQgdGhlbiByZWN1cnNpdmVseSBjaGVjayBrZXlzICYgdmFsdWVzIHRvIGNyZWF0ZSBtZWRpYSBxdWVyeSBvYmplY3Qgc3R5bGVzLlxuICAgICAqICh0aGUgcmVzdWx0IHdpbGwgYmUgdXNlZCBpbiBgc3R5bGVkYClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuICAgICAgaWYgKHR5cGVvZiBzeElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHN4T2JqZWN0ID0gc3hJbnB1dCh0aGVtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeElucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICByZXR1cm4gc3hJbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gKDAsIF9icmVha3BvaW50cy5jcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QpKHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKSh7XG4gICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgfSwgdmFsdWUsIHggPT4gKHtcbiAgICAgICAgICAgICAgICBbc3R5bGVLZXldOiB4XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSAoMCwgX21lcmdlLmRlZmF1bHQpKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5yZW1vdmVVbnVzZWRCcmVha3BvaW50cykoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uU3g7XG59XG5jb25zdCBzdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKTtcbnN0eWxlRnVuY3Rpb25TeC5maWx0ZXJQcm9wcyA9IFsnc3gnXTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0eWxlRnVuY3Rpb25TeDsiLCAiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4dGVuZFN4UHJvcDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBzeXN0ZW1Qcm9wcyxcbiAgICBvdGhlclByb3BzXG4gIH0gPSBzcGxpdFByb3BzKG90aGVyKTtcbiAgbGV0IGZpbmFsU3g7XG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG4gICAgICBpZiAoISgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCByZXN1bHQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTeCA9ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXh0ZW5kU3hQcm9wXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9leHRlbmRTeFByb3AuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0eWxlRnVuY3Rpb25TeC51bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3N0eWxlRnVuY3Rpb25TeFwiKSk7XG52YXIgX2V4dGVuZFN4UHJvcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXh0ZW5kU3hQcm9wXCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJyZWFrcG9pbnRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlQnJlYWtwb2ludHM7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5jb25zdCBicmVha3BvaW50S2V5cyA9IGV4cG9ydHMuYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107XG4gIC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaGFwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVTcGFjaW5nO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG4vLyBUaGUgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW1wbHkgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBzdHJ1Y3R1cmFsbHkuXG4vLyBXZSBleHByZXNzIHRoZSBkaWZmZXJlbmNlIHdpdGggdmFyaWFibGUgbmFtZXMuXG5cbmZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH1cblxuICAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sXG4gIGNvbnN0IHRyYW5zZm9ybSA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVNwYWNpbmcpKHtcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXRcbiAgfSk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoLi4uYXJnc0lucHV0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghKGFyZ3NJbnB1dC5sZW5ndGggPD0gNCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQsIGV4cGVjdGVkIGJldHdlZW4gMCBhbmQgNCwgZ290ICR7YXJnc0lucHV0Lmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGFyZ3NJbnB1dC5sZW5ndGggPT09IDAgPyBbMV0gOiBhcmdzSW5wdXQ7XG4gICAgcmV0dXJuIGFyZ3MubWFwKGFyZ3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRyYW5zZm9ybShhcmd1bWVudCk7XG4gICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ251bWJlcicgPyBgJHtvdXRwdXR9cHhgIDogb3V0cHV0O1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfTtcbiAgc3BhY2luZy5tdWkgPSB0cnVlO1xuICByZXR1cm4gc3BhY2luZztcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBhcHBseVN0eWxlcztcbi8qKlxuICogQSB1bml2ZXJzYWwgdXRpbGl0eSB0byBzdHlsZSBjb21wb25lbnRzIHdpdGggbXVsdGlwbGUgY29sb3IgbW9kZXMuIEFsd2F5cyB1c2UgaXQgZnJvbSB0aGUgdGhlbWUgb2JqZWN0LlxuICogSXQgd29ya3Mgd2l0aDpcbiAqICAtIFtCYXNpYyB0aGVtZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vZGFyay1tb2RlLylcbiAqICAtIFtDU1MgdGhlbWUgdmFyaWFibGVzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvZXhwZXJpbWVudGFsLWFwaS9jc3MtdGhlbWUtdmFyaWFibGVzL292ZXJ2aWV3LylcbiAqICAtIFplcm8tcnVudGltZSBlbmdpbmVcbiAqXG4gKiBUaXBzOiBVc2UgYW4gYXJyYXkgb3ZlciBvYmplY3Qgc3ByZWFkIGFuZCBwbGFjZSBgdGhlbWUuYXBwbHlTdHlsZXMoKWAgbGFzdC5cbiAqXG4gKiBcdTI3MDUgW3sgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSldXG4gKlxuICogXHVEODNEXHVERUFCIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX2NyZWF0ZUJyZWFrcG9pbnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVCcmVha3BvaW50c1wiKSk7XG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG52YXIgX2NyZWF0ZVNwYWNpbmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVNwYWNpbmdcIikpO1xudmFyIF9zdHlsZUZ1bmN0aW9uU3ggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4XCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZ1wiKSk7XG52YXIgX2FwcGx5U3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hcHBseVN0eWxlc1wiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9ICgwLCBfY3JlYXRlQnJlYWtwb2ludHMuZGVmYXVsdCkoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoMCwgX2NyZWF0ZVNwYWNpbmcuZGVmYXVsdCkoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIF9zaGFwZS5kZWZhdWx0LCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lLmFwcGx5U3R5bGVzID0gX2FwcGx5U3R5bGVzLmRlZmF1bHQ7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+ICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0LCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuICgwLCBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQpKHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRoZW1lOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY3JlYXRlVGhlbWUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcml2YXRlX2NyZWF0ZUJyZWFrcG9pbnRzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVCcmVha3BvaW50cy5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuc3RhYmxlX2FwcGx5U3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcHBseVN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfY3JlYXRlQnJlYWtwb2ludHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZUJyZWFrcG9pbnRzXCIpKTtcbnZhciBfYXBwbHlTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FwcGx5U3R5bGVzXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWxwaGEgPSBhbHBoYTtcbmV4cG9ydHMuYmxlbmQgPSBibGVuZDtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5kYXJrZW4gPSBkYXJrZW47XG5leHBvcnRzLmRlY29tcG9zZUNvbG9yID0gZGVjb21wb3NlQ29sb3I7XG5leHBvcnRzLmVtcGhhc2l6ZSA9IGVtcGhhc2l6ZTtcbmV4cG9ydHMuZ2V0Q29udHJhc3RSYXRpbyA9IGdldENvbnRyYXN0UmF0aW87XG5leHBvcnRzLmdldEx1bWluYW5jZSA9IGdldEx1bWluYW5jZTtcbmV4cG9ydHMuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbmV4cG9ydHMuaHNsVG9SZ2IgPSBoc2xUb1JnYjtcbmV4cG9ydHMubGlnaHRlbiA9IGxpZ2h0ZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUFscGhhID0gcHJpdmF0ZV9zYWZlQWxwaGE7XG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRGFya2VuID0gcHJpdmF0ZV9zYWZlRGFya2VuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVFbXBoYXNpemUgPSBwcml2YXRlX3NhZmVFbXBoYXNpemU7XG5leHBvcnRzLnByaXZhdGVfc2FmZUxpZ2h0ZW4gPSBwcml2YXRlX3NhZmVMaWdodGVuO1xuZXhwb3J0cy5yZWNvbXBvc2VDb2xvciA9IHJlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5yZ2JUb0hleCA9IHJnYlRvSGV4O1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2xhbXBcIikpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXBXcmFwcGVyKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgwLCBfY2xhbXAuZGVmYXVsdCkodmFsdWUsIG1pbiwgbWF4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoOSwgY29sb3IpKTtcbiAgfVxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5jb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gY29sb3JDaGFubmVsO1xuY29uc3QgcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gKGNvbG9yLCB3YXJuaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbG9yQ2hhbm5lbChjb2xvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbDtcbmZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5mdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cbmZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnIHx8IGNvbG9yLnR5cGUgPT09ICdoc2xhJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pO1xuXG4gIC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5mdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcFdyYXBwZXIodmFsdWUpO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVBbHBoYShjb2xvciwgdmFsdWUsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWxwaGEoY29sb3IsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlTGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJpdmF0ZV9zYWZlRW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBCbGVuZCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgY29sb3Igd2l0aCBhIGJhY2tncm91bmQgY29sb3IsIHJlc3VsdGluZyBpbiBhIHNpbmdsZVxuICogUkdCIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5IC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eSAtIE9wYWNpdHkgbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWE9MS4wXSAtIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yLiBGb3IgZ2FtbWEtY29ycmVjdCBibGVuZGluZywgMi4yIGlzIHVzdWFsLlxuICovXG5mdW5jdGlvbiBibGVuZChiYWNrZ3JvdW5kLCBvdmVybGF5LCBvcGFjaXR5LCBnYW1tYSA9IDEuMCkge1xuICBjb25zdCBibGVuZENoYW5uZWwgPSAoYiwgbykgPT4gTWF0aC5yb3VuZCgoYiAqKiAoMSAvIGdhbW1hKSAqICgxIC0gb3BhY2l0eSkgKyBvICoqICgxIC8gZ2FtbWEpICogb3BhY2l0eSkgKiogZ2FtbWEpO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihiYWNrZ3JvdW5kKTtcbiAgY29uc3Qgb3ZlcmxheUNvbG9yID0gZGVjb21wb3NlQ29sb3Iob3ZlcmxheSk7XG4gIGNvbnN0IHJnYiA9IFtibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1swXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1swXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzFdLCBvdmVybGF5Q29sb3IudmFsdWVzWzFdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMl0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMl0pXTtcbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlOiAncmdiJyxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVN0eWxlZDtcbmV4cG9ydHMuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9nZXREaXNwbGF5TmFtZVwiKSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gKDAsIF9jcmVhdGVUaGVtZS5kZWZhdWx0KSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgKDAsIF9zdHlsZWRFbmdpbmUuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcykodGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gKDAsIF9zdHlsZWRFbmdpbmUuZGVmYXVsdCkodGFnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8ICgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7KDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHsoMCwgX2dldERpc3BsYXlOYW1lLmRlZmF1bHQpKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgeyBGcmFnbWVudCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gXCIuLi9hcHAvaG9va3NcIjtcbmltcG9ydCB7IHN0b3JlIH0gZnJvbSBcIi4uL2FwcC9zdG9yZVwiO1xuaW1wb3J0IEVudGl0eVRyZWUgZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZVwiO1xuaW1wb3J0IHsgZ2V0Q2xhc3NJbnN0YW5jZXMsIGdldEVudGl0eSwgZ2V0RW50aXR5V2l0aFR5cGUsIGdldE9udG9sb2d5IH0gZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvb250b2xvZ2llc1NsaWNlXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gJy4uL21vZGVsL09udG9sb2d5J1xuaW1wb3J0IEVudGl0eSBmcm9tICcuLi9tb2RlbC9FbnRpdHknXG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMge1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgYXBpVXJsOiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZT86IFwiZW50aXRpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCI7XG4gICAgbGFuZz86IHN0cmluZztcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHk/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eVRyZWUoXG4gICAgcHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcyxcbiAgICBjb250YWluZXI6IGFueSxcbiAgICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICAgIFJlYWN0RE9NLnJlbmRlcihFbnRpdHlUcmVlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIEVudGl0eVRyZWVXaWRnZXQocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlV2lkZ2V0SW5uZXJcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG5cbiAgICAgICAgPC9Qcm92aWRlcj5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBFbnRpdHlUcmVlV2lkZ2V0SW5uZXIocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgbGFuZyA9IFwiZW5cIixcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5ID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSA9ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBvbnRvbG9neSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5vbnRvbG9neSk7XG4gICAgY29uc3QgbG9hZGluZ09udG9sb2d5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdPbnRvbG9neSk7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZW50aXR5KTtcbiAgICBjb25zdCBsb2FkaW5nRW50aXR5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdFbnRpdHkpO1xuXG4gICAgLy9jb25zdCBjbGFzc0luc3RhbmNlcyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5jbGFzc0luc3RhbmNlcyk7XG4gICAgY29uc3QgbG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdDbGFzc0luc3RhbmNlcyk7XG5cblxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcblxuICAgIGNvbnN0IGhhbmRsZU5hdmlnYXRlVG9FbnRpdHkgPSAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBvbnRvbG9neUlkID0gb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpO1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3kgPSAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSk7XG4gICAgfTtcblxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICBnZXRPbnRvbG9neSh7XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICBsYW5nOiBcImVuXCIsXG4gICAgICAgICAgICAgICAgYXBpVXJsOiBwcm9wcy5hcGlVcmwsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuYXBpVXJsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob250b2xvZ3kgJiYgcHJvcHMuaXJpKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuZW50aXR5VHlwZSAmJiBwcm9wcy5lbnRpdHlUeXBlICE9PSBcImVudGl0aWVzXCIpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0RW50aXR5V2l0aFR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBwcm9wcy5lbnRpdHlUeXBlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlJcmk6IHByb3BzLmlyaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGdldEVudGl0eShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUlyaTogcHJvcHMuaXJpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBvbnRvbG9neV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eSAmJiBwcm9wcy5lbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIikge1xuICAgICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMoe1xuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc0lyaTogZW50aXR5LmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBlbnRpdHldKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIHsobG9hZGluZ0VudGl0eSB8fCBsb2FkaW5nT250b2xvZ3kgfHwgbG9hZGluZ0NsYXNzSW5zdGFuY2VzKSAmJlxuICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHshbG9hZGluZ0VudGl0eSAmJiAhbG9hZGluZ09udG9sb2d5ICYmICFsb2FkaW5nQ2xhc3NJbnN0YW5jZXMgJiYgb250b2xvZ3kgJiYgKFxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17ZW50aXR5VHlwZSA/IGVudGl0eVR5cGUgOiBcImVudGl0aWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17aGFuZGxlTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e2hhbmRsZU5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGlVcmx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbn1cbiIsICIvLyBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBhc3N1bWVzIHdlJ3JlIHdvcmtpbmcgd2l0aCBzdGFuZGFyZCBSZWFjdERPTS9STiwgYnV0XG4vLyBvbGRlciB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBpbmNsdWRlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgKFJlYWN0IDE2LjkgLSAxNy54KS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGNvbXBhdCBzaGltIGlzIG5lZWRlZC5cbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvcic7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyBhcyBiYXRjaCB9IGZyb20gJy4vdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5pbXBvcnQgeyBzZXRCYXRjaCB9IGZyb20gJy4vdXRpbHMvYmF0Y2gnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQ29ubmVjdCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0JztcbmluaXRpYWxpemVVc2VTZWxlY3Rvcih1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcik7XG5pbml0aWFsaXplQ29ubmVjdCh1c2VTeW5jRXh0ZXJuYWxTdG9yZSk7IC8vIEVuYWJsZSBiYXRjaGVkIHVwZGF0ZXMgaW4gb3VyIHN1YnNjcmlwdGlvbnMgZm9yIHVzZVxuLy8gd2l0aCBzdGFuZGFyZCBSZWFjdCByZW5kZXJlcnMgKFJlYWN0RE9NLCBSZWFjdCBOYXRpdmUpXG5cbnNldEJhdGNoKGJhdGNoKTtcbmV4cG9ydCB7IGJhdGNoIH07XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnOyIsICJleHBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7IiwgIi8vIERlZmF1bHQgdG8gYSBkdW1teSBcImJhdGNoXCIgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJ1bnMgdGhlIGNhbGxiYWNrXG5mdW5jdGlvbiBkZWZhdWx0Tm9vcEJhdGNoKGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKCk7XG59XG5cbmxldCBiYXRjaCA9IGRlZmF1bHROb29wQmF0Y2g7IC8vIEFsbG93IGluamVjdGluZyBhbm90aGVyIGJhdGNoaW5nIGZ1bmN0aW9uIGxhdGVyXG5cbmV4cG9ydCBjb25zdCBzZXRCYXRjaCA9IG5ld0JhdGNoID0+IGJhdGNoID0gbmV3QmF0Y2g7IC8vIFN1cHBseSBhIGdldHRlciBqdXN0IHRvIHNraXAgZGVhbGluZyB3aXRoIEVTTSBiaW5kaW5nc1xuXG5leHBvcnQgY29uc3QgZ2V0QmF0Y2ggPSAoKSA9PiBiYXRjaDsiLCAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJlZHV4Q29udGV4dEhvb2ssIHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVXNlU2VsZWN0b3IgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZm47XG59O1xuXG5jb25zdCByZWZFcXVhbGl0eSA9IChhLCBiKSA9PiBhID09PSBiO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNlbGVjdG9yKHNlbGVjdG9yLCBlcXVhbGl0eUZuT3JPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBlcXVhbGl0eUZuID0gcmVmRXF1YWxpdHksXG4gICAgICBzdGFiaWxpdHlDaGVjayA9IHVuZGVmaW5lZCxcbiAgICAgIG5vb3BDaGVjayA9IHVuZGVmaW5lZFxuICAgIH0gPSB0eXBlb2YgZXF1YWxpdHlGbk9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICAgIGVxdWFsaXR5Rm46IGVxdWFsaXR5Rm5Pck9wdGlvbnNcbiAgICB9IDogZXF1YWxpdHlGbk9yT3B0aW9ucztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVxdWFsaXR5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYW4gZXF1YWxpdHkgZnVuY3Rpb24gdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlLFxuICAgICAgc3RhYmlsaXR5Q2hlY2s6IGdsb2JhbFN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrOiBnbG9iYWxOb29wQ2hlY2tcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7XG4gICAgY29uc3QgZmlyc3RSdW4gPSB1c2VSZWYodHJ1ZSk7XG4gICAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gdXNlQ2FsbGJhY2soe1xuICAgICAgW3NlbGVjdG9yLm5hbWVdKHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxTdGFiaWxpdHlDaGVjayA9IHR5cGVvZiBzdGFiaWxpdHlDaGVjayA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxTdGFiaWxpdHlDaGVjayA6IHN0YWJpbGl0eUNoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdhbHdheXMnIHx8IGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b0NvbXBhcmUgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWxpdHlGbihzZWxlY3RlZCwgdG9Db21wYXJlKSkge1xuICAgICAgICAgICAgICBsZXQgc3RhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgICB9ID0gZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlbGVjdG9yICcgKyAoc2VsZWN0b3IubmFtZSB8fCAndW5rbm93bicpICsgJyByZXR1cm5lZCBhIGRpZmZlcmVudCByZXN1bHQgd2hlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiBhIG5ldyByZWZlcmVuY2UgKHN1Y2ggYXMgYW4gb2JqZWN0IG9yIGFuIGFycmF5KSBzaG91bGQgYmUgbWVtb2l6ZWQ6IGh0dHBzOi8vcmVkdXguanMub3JnL3VzYWdlL2Rlcml2aW5nLWRhdGEtc2VsZWN0b3JzI29wdGltaXppbmctc2VsZWN0b3JzLXdpdGgtbWVtb2l6YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQyOiB0b0NvbXBhcmUsXG4gICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmluYWxOb29wQ2hlY2sgPSB0eXBlb2Ygbm9vcENoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbE5vb3BDaGVjayA6IG5vb3BDaGVjaztcblxuICAgICAgICAgIGlmIChmaW5hbE5vb3BDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxOb29wQ2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIHRoZSByb290IHN0YXRlIHdoZW4gY2FsbGVkLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiB0aGUgZW50aXJlIHN0YXRlIGFyZSBhbG1vc3QgY2VydGFpbmx5IGEgbWlzdGFrZSwgYXMgdGhleSB3aWxsIGNhdXNlIGEgcmVyZW5kZXIgd2hlbmV2ZXIgKmFueXRoaW5nKiBpbiBzdGF0ZSBjaGFuZ2VzLicsIHtcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlyc3RSdW4uY3VycmVudCkgZmlyc3RSdW4uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgfVtzZWxlY3Rvci5uYW1lXSwgW3NlbGVjdG9yLCBnbG9iYWxTdGFiaWxpdHlDaGVjaywgc3RhYmlsaXR5Q2hlY2tdKTtcbiAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3Ioc3Vic2NyaXB0aW9uLmFkZE5lc3RlZFN1Yiwgc3RvcmUuZ2V0U3RhdGUsIGdldFNlcnZlclN0YXRlIHx8IHN0b3JlLmdldFN0YXRlLCB3cmFwcGVkU2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICAgIHVzZURlYnVnVmFsdWUoc2VsZWN0ZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU3RhdGU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUncyBzdGF0ZS4gVGhpcyBob29rIHRha2VzIGEgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogYXMgYW4gYXJndW1lbnQuIFRoZSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgc3RvcmUgc3RhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaG9vayB0YWtlcyBhbiBvcHRpb25hbCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyXHJcbiAqIHRoYXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlIHdheSB0aGUgc2VsZWN0ZWQgc3RhdGUgaXMgY29tcGFyZWQgdG8gZGV0ZXJtaW5lXHJcbiAqIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBlcXVhbGl0eUZuIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgZXF1YWxpdHlcclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNvdW50ZXIpXHJcbiAqICAgcmV0dXJuIDxkaXY+e2NvdW50ZXJ9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9jcmVhdGVTZWxlY3Rvckhvb2soKTsiLCAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcblxuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlUmVkdXhDb250ZXh0YCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVJlZHV4Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbnRleHRWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByZWFjdC1yZWR1eCBjb250ZXh0IHZhbHVlOyBwbGVhc2UgZW5zdXJlIHRoZSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBhIDxQcm92aWRlcj4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgLiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHsgc3RvcmUgfSA9IHVzZVJlZHV4Q29udGV4dCgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlUmVkdXhDb250ZXh0SG9vaygpOyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBDb250ZXh0S2V5ID0gU3ltYm9sLmZvcihgcmVhY3QtcmVkdXgtY29udGV4dGApO1xuY29uc3QgZ1QgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOlxuLyogZmFsbCBiYWNrIHRvIGEgcGVyLW1vZHVsZSBzY29wZSAocHJlLTguMSBiZWhhdmlvdXIpIGlmIGBnbG9iYWxUaGlzYCBpcyBub3QgYXZhaWxhYmxlICovXG57fTtcblxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgdmFyIF9nVCRDb250ZXh0S2V5O1xuXG4gIGlmICghUmVhY3QuY3JlYXRlQ29udGV4dCkgcmV0dXJuIHt9O1xuICBjb25zdCBjb250ZXh0TWFwID0gKF9nVCRDb250ZXh0S2V5ID0gZ1RbQ29udGV4dEtleV0pICE9IG51bGwgPyBfZ1QkQ29udGV4dEtleSA6IGdUW0NvbnRleHRLZXldID0gbmV3IE1hcCgpO1xuICBsZXQgcmVhbENvbnRleHQgPSBjb250ZXh0TWFwLmdldChSZWFjdC5jcmVhdGVDb250ZXh0KTtcblxuICBpZiAoIXJlYWxDb250ZXh0KSB7XG4gICAgcmVhbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJlYWxDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JlYWN0UmVkdXgnO1xuICAgIH1cblxuICAgIGNvbnRleHRNYXAuc2V0KFJlYWN0LmNyZWF0ZUNvbnRleHQsIHJlYWxDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGNvbnN0IFJlYWN0UmVkdXhDb250ZXh0ID0gLyojX19QVVJFX18qL2dldENvbnRleHQoKTtcbmV4cG9ydCBkZWZhdWx0IFJlYWN0UmVkdXhDb250ZXh0OyIsICJleHBvcnQgY29uc3Qgbm90SW5pdGlhbGl6ZWQgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcigndVNFUyBub3QgaW5pdGlhbGl6ZWQhJyk7XG59OyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1ZhbGlkRWxlbWVudFR5cGUsIGlzQ29udGV4dENvbnN1bWVyIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29ubmVjdC9zZWxlY3RvckZhY3RvcnknO1xuaW1wb3J0IHsgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcyc7XG5pbXBvcnQgeyBtZXJnZVByb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWVyZ2VQcm9wcyc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHNoYWxsb3dFcXVhbCBmcm9tICcuLi91dGlscy9zaGFsbG93RXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVDb25uZWN0ID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZuO1xufTsgLy8gRGVmaW5lIHNvbWUgY29uc3RhbnQgYXJyYXlzIGp1c3QgdG8gYXZvaWQgcmUtY3JlYXRpbmcgdGhlc2VcblxuY29uc3QgRU1QVFlfQVJSQVkgPSBbbnVsbCwgMF07XG5jb25zdCBOT19TVUJTQ1JJUFRJT05fQVJSQVkgPSBbbnVsbCwgbnVsbF07IC8vIEF0dGVtcHRzIHRvIHN0cmluZ2lmeSB3aGF0ZXZlciBub3QtcmVhbGx5LWEtY29tcG9uZW50IHZhbHVlIHdlIHdlcmUgZ2l2ZW5cbi8vIGZvciBsb2dnaW5nIGluIGFuIGVycm9yIG1lc3NhZ2VcblxuY29uc3Qgc3RyaW5naWZ5Q29tcG9uZW50ID0gQ29tcCA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KENvbXApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gU3RyaW5nKENvbXApO1xuICB9XG59O1xuXG4vLyBUaGlzIGlzIFwianVzdFwiIGEgYHVzZUxheW91dEVmZmVjdGAsIGJ1dCB3aXRoIHR3byBtb2RpZmljYXRpb25zOlxuLy8gLSB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byBgdXNlRWZmZWN0YCBpbiBTU1IgdG8gYXZvaWQgYW5ub3lpbmcgd2FybmluZ3Ncbi8vIC0gd2UgZXh0cmFjdCB0aGlzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgY2xvc2luZyBvdmVyIHZhbHVlc1xuLy8gICBhbmQgY2F1c2luZyBtZW1vcnkgbGVha3NcbmZ1bmN0aW9uIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhlZmZlY3RGdW5jLCBlZmZlY3RBcmdzLCBkZXBlbmRlbmNpZXMpIHtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiBlZmZlY3RGdW5jKC4uLmVmZmVjdEFyZ3MpLCBkZXBlbmRlbmNpZXMpO1xufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogYXNzaWduIHRoZSBsYXRlc3QgcHJvcHMgdmFsdWVzIHRvIHJlZnMgZm9yIGxhdGVyIHVzYWdlXG5cblxuZnVuY3Rpb24gY2FwdHVyZVdyYXBwZXJQcm9wcyhsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgLy8gYWN0dWFsQ2hpbGRQcm9wczogdW5rbm93bixcbmNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMpIHtcbiAgLy8gV2Ugd2FudCB0byBjYXB0dXJlIHRoZSB3cmFwcGVyIHByb3BzIGFuZCBjaGlsZCBwcm9wcyB3ZSB1c2VkIGZvciBsYXRlciBjb21wYXJpc29uc1xuICBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQgPSB3cmFwcGVyUHJvcHM7XG4gIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIHJlbmRlciB3YXMgZnJvbSBhIHN0b3JlIHVwZGF0ZSwgY2xlYXIgb3V0IHRoYXQgcmVmZXJlbmNlIGFuZCBjYXNjYWRlIHRoZSBzdWJzY3JpYmVyIHVwZGF0ZVxuXG4gIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQpIHtcbiAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBudWxsO1xuICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgfVxufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogc3Vic2NyaWJlIHRvIHRoZSBSZWR1eCBzdG9yZSBvciBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvcixcbi8vIGNoZWNrIGZvciB1cGRhdGVzIGFmdGVyIGRpc3BhdGNoZWQgYWN0aW9ucywgYW5kIHRyaWdnZXIgcmUtcmVuZGVycy5cblxuXG5mdW5jdGlvbiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgLy8gZm9yY2VDb21wb25lbnRVcGRhdGVEaXNwYXRjaDogUmVhY3QuRGlzcGF0Y2g8YW55PixcbmFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcikge1xuICAvLyBJZiB3ZSdyZSBub3Qgc3Vic2NyaWJlZCB0byB0aGUgc3RvcmUsIG5vdGhpbmcgdG8gZG8gaGVyZVxuICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuICgpID0+IHt9OyAvLyBDYXB0dXJlIHZhbHVlcyBmb3IgY2hlY2tpbmcgaWYgYW5kIHdoZW4gdGhpcyBjb21wb25lbnQgdW5tb3VudHNcblxuICBsZXQgZGlkVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgbGV0IGxhc3RUaHJvd25FcnJvciA9IG51bGw7IC8vIFdlJ2xsIHJ1biB0aGlzIGNhbGxiYWNrIGV2ZXJ5IHRpbWUgYSBzdG9yZSBzdWJzY3JpcHRpb24gdXBkYXRlIHByb3BhZ2F0ZXMgdG8gdGhpcyBjb21wb25lbnRcblxuICBjb25zdCBjaGVja0ZvclVwZGF0ZXMgPSAoKSA9PiB7XG4gICAgaWYgKGRpZFVuc3Vic2NyaWJlIHx8ICFpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgLy8gRG9uJ3QgcnVuIHN0YWxlIGxpc3RlbmVycy5cbiAgICAgIC8vIFJlZHV4IGRvZXNuJ3QgZ3VhcmFudGVlIHVuc3Vic2NyaXB0aW9ucyBoYXBwZW4gdW50aWwgbmV4dCBkaXNwYXRjaC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRPRE8gV2UncmUgY3VycmVudGx5IGNhbGxpbmcgZ2V0U3RhdGUgb3Vyc2VsdmVzIGhlcmUsIHJhdGhlciB0aGFuIGxldHRpbmcgYHVTRVNgIGRvIGl0XG5cblxuICAgIGNvbnN0IGxhdGVzdFN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGxldCBuZXdDaGlsZFByb3BzLCBlcnJvcjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3R1YWxseSBydW4gdGhlIHNlbGVjdG9yIHdpdGggdGhlIG1vc3QgcmVjZW50IHN0b3JlIHN0YXRlIGFuZCB3cmFwcGVyIHByb3BzXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlXG4gICAgICBuZXdDaGlsZFByb3BzID0gY2hpbGRQcm9wc1NlbGVjdG9yKGxhdGVzdFN0b3JlU3RhdGUsIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IgPSBlO1xuICAgICAgbGFzdFRocm93bkVycm9yID0gZTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBudWxsO1xuICAgIH0gLy8gSWYgdGhlIGNoaWxkIHByb3BzIGhhdmVuJ3QgY2hhbmdlZCwgbm90aGluZyB0byBkbyBoZXJlIC0gY2FzY2FkZSB0aGUgc3Vic2NyaXB0aW9uIHVwZGF0ZVxuXG5cbiAgICBpZiAobmV3Q2hpbGRQcm9wcyA9PT0gbGFzdENoaWxkUHJvcHMuY3VycmVudCkge1xuICAgICAgaWYgKCFyZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50KSB7XG4gICAgICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSByZWZlcmVuY2VzIHRvIHRoZSBuZXcgY2hpbGQgcHJvcHMuICBOb3RlIHRoYXQgd2UgdHJhY2sgdGhlIFwiY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGVcIlxuICAgICAgLy8gYXMgYSByZWYgaW5zdGVhZCBvZiBhIHVzZVN0YXRlL3VzZVJlZHVjZXIgYmVjYXVzZSB3ZSBuZWVkIGEgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IHZhbHVlIGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQuICBJZiB0aGlzIHdlbnQgaW50byB1c2VTdGF0ZS91c2VSZWR1Y2VyLCB3ZSBjb3VsZG4ndCBjbGVhciBvdXQgdGhlIHZhbHVlIHdpdGhvdXRcbiAgICAgIC8vIGZvcmNpbmcgYW5vdGhlciByZS1yZW5kZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gdHJ1ZTsgLy8gVE9ETyBUaGlzIGlzIGhhY2t5IGFuZCBub3QgaG93IGB1U0VTYCBpcyBtZWFudCB0byBiZSB1c2VkXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBSZWFjdCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIHN1YnNjcmliZXJcblxuICAgICAgYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9OyAvLyBBY3R1YWxseSBzdWJzY3JpYmUgdG8gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yIChvciBzdG9yZSlcblxuXG4gIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gY2hlY2tGb3JVcGRhdGVzO1xuICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7IC8vIFB1bGwgZGF0YSBmcm9tIHRoZSBzdG9yZSBhZnRlciBmaXJzdCByZW5kZXIgaW4gY2FzZSB0aGUgc3RvcmUgaGFzXG4gIC8vIGNoYW5nZWQgc2luY2Ugd2UgYmVnYW4uXG5cbiAgY2hlY2tGb3JVcGRhdGVzKCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVXcmFwcGVyID0gKCkgPT4ge1xuICAgIGRpZFVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IG51bGw7XG5cbiAgICBpZiAobGFzdFRocm93bkVycm9yKSB7XG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2F1Z2h0IGFuIGVycm9yIGR1ZSB0byBhIGJhZCBtYXBTdGF0ZSBmdW5jdGlvbiwgYnV0IHRoZVxuICAgICAgLy8gcGFyZW50IHJlLXJlbmRlcmVkIHdpdGhvdXQgdGhpcyBjb21wb25lbnQgYW5kIHdlJ3JlIGFib3V0IHRvIHVubW91bnQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYXMgbG9uZyBhcyB3ZSBkbyB0b3AtZG93biBzdWJzY3JpcHRpb25zIGNvcnJlY3RseSwgYnV0XG4gICAgICAvLyBpZiB3ZSBldmVyIGRvIHRob3NlIHdyb25nLCB0aGlzIHRocm93IHdpbGwgc3VyZmFjZSB0aGUgZXJyb3IgaW4gb3VyIHRlc3RzLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aHJvdyB0aGUgZXJyb3IgZnJvbSBoZXJlIHNvIGl0IGRvZXNuJ3QgZ2V0IGxvc3QuXG4gICAgICB0aHJvdyBsYXN0VGhyb3duRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1bnN1YnNjcmliZVdyYXBwZXI7XG59IC8vIFJlZHVjZXIgaW5pdGlhbCBzdGF0ZSBjcmVhdGlvbiBmb3Igb3VyIHVwZGF0ZSByZWR1Y2VyXG5cblxuY29uc3QgaW5pdFN0YXRlVXBkYXRlcyA9ICgpID0+IEVNUFRZX0FSUkFZO1xuXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuLyoqXHJcbiAqIEluZmVycyB0aGUgdHlwZSBvZiBwcm9wcyB0aGF0IGEgY29ubmVjdG9yIHdpbGwgaW5qZWN0IGludG8gYSBjb21wb25lbnQuXHJcbiAqL1xuXG5cbmxldCBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gZmFsc2U7XG4vKipcclxuICogQ29ubmVjdHMgYSBSZWFjdCBjb21wb25lbnQgdG8gYSBSZWR1eCBzdG9yZS5cclxuICpcclxuICogLSBXaXRob3V0IGFyZ3VtZW50cywganVzdCB3cmFwcyB0aGUgY29tcG9uZW50LCB3aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvciAvIHByb3BzXHJcbiAqXHJcbiAqIC0gSWYgMiBwYXJhbXMgYXJlIHBhc3NlZCAoM3JkIHBhcmFtLCBtZXJnZVByb3BzLCBpcyBza2lwcGVkKSwgZGVmYXVsdCBiZWhhdmlvclxyXG4gKiBpcyB0byBvdmVycmlkZSBvd25Qcm9wcyAoYXMgc3RhdGVkIGluIHRoZSBkb2NzKSwgc28gd2hhdCByZW1haW5zIGlzIGV2ZXJ5dGhpbmcgdGhhdCdzXHJcbiAqIG5vdCBhIHN0YXRlIG9yIGRpc3BhdGNoIHByb3BcclxuICpcclxuICogLSBXaGVuIDNyZCBwYXJhbSBpcyBwYXNzZWQsIHdlIGRvbid0IGtub3cgaWYgb3duUHJvcHMgcHJvcGFnYXRlIGFuZCB3aGV0aGVyIHRoZXlcclxuICogc2hvdWxkIGJlIHZhbGlkIGNvbXBvbmVudCBwcm9wcywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIG1lcmdlUHJvcHMgaW1wbGVtZW50YXRpb24uXHJcbiAqIEFzIHN1Y2gsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZXh0ZW5kIG93blByb3BzIGludGVyZmFjZSBmcm9tIHN0YXRlIG9yXHJcbiAqIGRpc3BhdGNoIHByb3BzIG9yIGJvdGggd2hlbiBhcHBsaWNhYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXBTdGF0ZVRvUHJvcHMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHZhbHVlcyBmcm9tIHN0YXRlXHJcbiAqIEBwYXJhbSBtYXBEaXNwYXRjaFRvUHJvcHMgU2V0dXAgZm9yIGRpc3BhdGNoaW5nIGFjdGlvbnNcclxuICogQHBhcmFtIG1lcmdlUHJvcHMgT3B0aW9uYWwgY2FsbGJhY2sgdG8gbWVyZ2Ugc3RhdGUgYW5kIGRpc3BhdGNoIHByb3BzIHRvZ2V0aGVyXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb25uZWN0aW9uXHJcbiAqXHJcbiAqL1xuXG5mdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCB7XG4gIC8vIFRoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIHNvIFRTIGRvZXNuJ3QgbGlrZSB1cyBkZXN0cnVjdHVyaW5nIHRoaXMgdG8gY2hlY2sgaXRzIGV4aXN0ZW5jZS5cbiAgLy8gQHRzLWlnbm9yZVxuICBwdXJlLFxuICBhcmVTdGF0ZXNFcXVhbCA9IHN0cmljdEVxdWFsLFxuICBhcmVPd25Qcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIC8vIHVzZSBSZWFjdCdzIGZvcndhcmRSZWYgdG8gZXhwb3NlIGEgcmVmIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudFxuICBmb3J3YXJkUmVmID0gZmFsc2UsXG4gIC8vIHRoZSBjb250ZXh0IGNvbnN1bWVyIHRvIHVzZVxuICBjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHRcbn0gPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChwdXJlICE9PSB1bmRlZmluZWQgJiYgIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24pIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSB0cnVlO1xuICAgICAgd2FybmluZygnVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gYGNvbm5lY3RgIGlzIG5vdyBhbHdheXMgYSBcInB1cmUvbWVtb2l6ZWRcIiBjb21wb25lbnQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBDb250ZXh0ID0gY29udGV4dDtcbiAgY29uc3QgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkobWFwU3RhdGVUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkobWFwRGlzcGF0Y2hUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1lcmdlUHJvcHMgPSBtZXJnZVByb3BzRmFjdG9yeShtZXJnZVByb3BzKTtcbiAgY29uc3Qgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzID0gQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpO1xuXG4gIGNvbnN0IHdyYXBXaXRoQ29ubmVjdCA9IFdyYXBwZWRDb21wb25lbnQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc1ZhbGlkRWxlbWVudFR5cGUoV3JhcHBlZENvbXBvbmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAke3N0cmluZ2lmeUNvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gYENvbm5lY3QoJHt3cmFwcGVkQ29tcG9uZW50TmFtZX0pYDtcbiAgICBjb25zdCBzZWxlY3RvckZhY3RvcnlPcHRpb25zID0ge1xuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzLFxuICAgICAgYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBDb25uZWN0RnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgIGNvbnN0IFtwcm9wc0NvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhY3R1YWwgXCJkYXRhXCIgcHJvcHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgd3JhcHBlciBjb21wb25lbnQsXG4gICAgICAgIC8vIGFuZCB2YWx1ZXMgbmVlZGVkIHRvIGNvbnRyb2wgYmVoYXZpb3IgKGZvcndhcmRlZCByZWZzLCBhbHRlcm5hdGUgY29udGV4dCBpbnN0YW5jZXMpLlxuICAgICAgICAvLyBUbyBtYWludGFpbiB0aGUgd3JhcHBlclByb3BzIG9iamVjdCByZWZlcmVuY2UsIG1lbW9pemUgdGhpcyBkZXN0cnVjdHVyaW5nLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICB9ID0gcHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBwZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAgIHJldHVybiBbcHJvcHMuY29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXTtcbiAgICAgIH0sIFtwcm9wc10pO1xuICAgICAgY29uc3QgQ29udGV4dFRvVXNlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFVzZXJzIG1heSBvcHRpb25hbGx5IHBhc3MgaW4gYSBjdXN0b20gY29udGV4dCBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBvdXIgUmVhY3RSZWR1eENvbnRleHQuXG4gICAgICAgIC8vIE1lbW9pemUgdGhlIGNoZWNrIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBjb250ZXh0IGluc3RhbmNlIHdlIHNob3VsZCB1c2UuXG4gICAgICAgIHJldHVybiBwcm9wc0NvbnRleHQgJiYgcHJvcHNDb250ZXh0LkNvbnN1bWVyICYmIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaXNDb250ZXh0Q29uc3VtZXIoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KHByb3BzQ29udGV4dC5Db25zdW1lciwgbnVsbCkpID8gcHJvcHNDb250ZXh0IDogQ29udGV4dDtcbiAgICAgIH0sIFtwcm9wc0NvbnRleHQsIENvbnRleHRdKTsgLy8gUmV0cmlldmUgdGhlIHN0b3JlIGFuZCBhbmNlc3RvciBzdWJzY3JpcHRpb24gdmlhIGNvbnRleHQsIGlmIGF2YWlsYWJsZVxuXG4gICAgICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHRUb1VzZSk7IC8vIFRoZSBzdG9yZSBfbXVzdF8gZXhpc3QgYXMgZWl0aGVyIGEgcHJvcCBvciBpbiBjb250ZXh0LlxuICAgICAgLy8gV2UnbGwgY2hlY2sgdG8gc2VlIGlmIGl0IF9sb29rc18gbGlrZSBhIFJlZHV4IHN0b3JlIGZpcnN0LlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyB0aHJvdWdoIGEgYHN0b3JlYCBwcm9wIHRoYXQgaXMganVzdCBhIHBsYWluIHZhbHVlLlxuXG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPSBCb29sZWFuKHByb3BzLnN0b3JlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmdldFN0YXRlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID0gQm9vbGVhbihjb250ZXh0VmFsdWUpICYmIEJvb2xlYW4oY29udGV4dFZhbHVlLnN0b3JlKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWRpZFN0b3JlQ29tZUZyb21Qcm9wcyAmJiAhZGlkU3RvcmVDb21lRnJvbUNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBcInN0b3JlXCIgaW4gdGhlIGNvbnRleHQgb2YgYCArIGBcIiR7ZGlzcGxheU5hbWV9XCIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIGAgKyBgb3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAgKyBgUmVhY3QgY29udGV4dCBjb25zdW1lciB0byAke2Rpc3BsYXlOYW1lfSBpbiBjb25uZWN0IG9wdGlvbnMuYCk7XG4gICAgICB9IC8vIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjaGVjaywgb25lIG9mIHRoZXNlIG11c3QgYmUgdHJ1ZVxuXG5cbiAgICAgIGNvbnN0IHN0b3JlID0gZGlkU3RvcmVDb21lRnJvbVByb3BzID8gcHJvcHMuc3RvcmUgOiBjb250ZXh0VmFsdWUuc3RvcmU7XG4gICAgICBjb25zdCBnZXRTZXJ2ZXJTdGF0ZSA9IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID8gY29udGV4dFZhbHVlLmdldFNlcnZlclN0YXRlIDogc3RvcmUuZ2V0U3RhdGU7XG4gICAgICBjb25zdCBjaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNoaWxkIHByb3BzIHNlbGVjdG9yIG5lZWRzIHRoZSBzdG9yZSByZWZlcmVuY2UgYXMgYW4gaW5wdXQuXG4gICAgICAgIC8vIFJlLWNyZWF0ZSB0aGlzIHNlbGVjdG9yIHdoZW5ldmVyIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAgICByZXR1cm4gZGVmYXVsdFNlbGVjdG9yRmFjdG9yeShzdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICB9LCBbc3RvcmVdKTtcbiAgICAgIGNvbnN0IFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gTk9fU1VCU0NSSVBUSU9OX0FSUkFZOyAvLyBUaGlzIFN1YnNjcmlwdGlvbidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzID8gdW5kZWZpbmVkIDogY29udGV4dFZhbHVlLnN1YnNjcmlwdGlvbik7IC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHN1YnNjcmlwdGlvbmAgd2lsbCB0aGVuIGJlIG51bGwuIFRoaXMgY2FuXG4gICAgICAgIC8vIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3MgbGlzdGVuZXJzIGxvZ2ljIGlzIGNoYW5nZWQgdG8gbm90IGNhbGwgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRoYXQgaGF2ZSBiZWVuIHVuc3Vic2NyaWJlZCBpbiB0aGUgIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AuXG5cbiAgICAgICAgY29uc3Qgbm90aWZ5TmVzdGVkU3VicyA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdO1xuICAgICAgfSwgW3N0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZV0pOyAvLyBEZXRlcm1pbmUgd2hhdCB7c3RvcmUsIHN1YnNjcmlwdGlvbn0gdmFsdWUgc2hvdWxkIGJlIHB1dCBpbnRvIG5lc3RlZCBjb250ZXh0LCBpZiBuZWNlc3NhcnksXG4gICAgICAvLyBhbmQgbWVtb2l6ZSB0aGF0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnRleHQgdXBkYXRlcy5cblxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlkU3RvcmVDb21lRnJvbVByb3BzKSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgZGlyZWN0bHkgc3Vic2NyaWJlZCB0byBhIHN0b3JlIGZyb20gcHJvcHMuXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBkZXNjZW5kYW50cyByZWFkaW5nIGZyb20gdGhpcyBzdG9yZSAtIHBhc3MgZG93biB3aGF0ZXZlclxuICAgICAgICAgIC8vIHRoZSBleGlzdGluZyBjb250ZXh0IHZhbHVlIGlzIGZyb20gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLlxuICAgICAgICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwdXQgdGhpcyBjb21wb25lbnQncyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgaW50byBjb250ZXh0LCBzbyB0aGF0XG4gICAgICAgIC8vIGNvbm5lY3RlZCBkZXNjZW5kYW50cyB3b24ndCB1cGRhdGUgdW50aWwgYWZ0ZXIgdGhpcyBjb21wb25lbnQgaXMgZG9uZVxuXG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0VmFsdWUsIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9LCBbZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWUsIHN1YnNjcmlwdGlvbl0pOyAvLyBTZXQgdXAgcmVmcyB0byBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVuIHRoZSBzdWJzY3JpcHRpb24gZWZmZWN0IGFuZCB0aGUgcmVuZGVyIGxvZ2ljXG5cbiAgICAgIGNvbnN0IGxhc3RDaGlsZFByb3BzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCBsYXN0V3JhcHBlclByb3BzID0gUmVhY3QudXNlUmVmKHdyYXBwZXJQcm9wcyk7XG4gICAgICBjb25zdCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCByZW5kZXJJc1NjaGVkdWxlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc1Byb2Nlc3NpbmdEaXNwYXRjaCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc01vdW50ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvciA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFRyaWNreSBsb2dpYyBoZXJlOlxuICAgICAgICAgIC8vIC0gVGhpcyByZW5kZXIgbWF5IGhhdmUgYmVlbiB0cmlnZ2VyZWQgYnkgYSBSZWR1eCBzdG9yZSB1cGRhdGUgdGhhdCBwcm9kdWNlZCBuZXcgY2hpbGQgcHJvcHNcbiAgICAgICAgICAvLyAtIEhvd2V2ZXIsIHdlIG1heSBoYXZlIGdvdHRlbiBuZXcgd3JhcHBlciBwcm9wcyBhZnRlciB0aGF0XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBuZXcgY2hpbGQgcHJvcHMsIGFuZCB0aGUgc2FtZSB3cmFwcGVyIHByb3BzLCB3ZSBrbm93IHdlIHNob3VsZCB1c2UgdGhlIG5ldyBjaGlsZCBwcm9wcyBhcy1pcy5cbiAgICAgICAgICAvLyBCdXQsIGlmIHdlIGhhdmUgbmV3IHdyYXBwZXIgcHJvcHMsIHRob3NlIG1pZ2h0IGNoYW5nZSB0aGUgY2hpbGQgcHJvcHMsIHNvIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhpbmdzLlxuICAgICAgICAgIC8vIFNvLCB3ZSdsbCB1c2UgdGhlIGNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlIG9ubHkgaWYgdGhlIHdyYXBwZXIgcHJvcHMgYXJlIHRoZSBzYW1lIGFzIGxhc3QgdGltZS5cbiAgICAgICAgICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ICYmIHdyYXBwZXJQcm9wcyA9PT0gbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50O1xuICAgICAgICAgIH0gLy8gVE9ETyBXZSdyZSByZWFkaW5nIHRoZSBzdG9yZSBkaXJlY3RseSBpbiByZW5kZXIoKSBoZXJlLiBCYWQgaWRlYT9cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IGNhdXNlIEJhZCBUaGluZ3MgKFRNKSB0byBoYXBwZW4gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGJlY2F1c2Ugb24gcmVuZGVycyBfbm90XyBjYXVzZWQgYnkgc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0aGUgbGF0ZXN0IHN0b3JlIHN0YXRlXG4gICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZS5cblxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNTZWxlY3RvcihzdG9yZS5nZXRTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgIH0sIFtzdG9yZSwgd3JhcHBlclByb3BzXSk7IC8vIFdlIG5lZWQgdGhpcyB0byBleGVjdXRlIHN5bmNocm9ub3VzbHkgZXZlcnkgdGltZSB3ZSByZS1yZW5kZXIuIEhvd2V2ZXIsIFJlYWN0IHdhcm5zXG4gICAgICAvLyBhYm91dCB1c2VMYXlvdXRFZmZlY3QgaW4gU1NSLCBzbyB3ZSB0cnkgdG8gZGV0ZWN0IGVudmlyb25tZW50IGFuZCBmYWxsIGJhY2sgdG9cbiAgICAgIC8vIGp1c3QgdXNlRWZmZWN0IGluc3RlYWQgdG8gYXZvaWQgdGhlIHdhcm5pbmcsIHNpbmNlIG5laXRoZXIgd2lsbCBydW4gYW55d2F5LlxuXG4gICAgICBjb25zdCBzdWJzY3JpYmVGb3JSZWFjdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSByZWFjdExpc3RlbmVyID0+IHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIHJlYWN0TGlzdGVuZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpYmU7XG4gICAgICB9LCBbc3Vic2NyaXB0aW9uXSk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoY2FwdHVyZVdyYXBwZXJQcm9wcywgW2xhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzXSk7XG4gICAgICBsZXQgYWN0dWFsQ2hpbGRQcm9wcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wcyA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKCAvLyBUT0RPIFdlJ3JlIHBhc3NpbmcgdGhyb3VnaCBhIGJpZyB3cmFwcGVyIHRoYXQgZG9lcyBhIGJ1bmNoIG9mIGV4dHJhIHNpZGUgZWZmZWN0cyBiZXNpZGVzIHN1YnNjcmliaW5nXG4gICAgICAgIHN1YnNjcmliZUZvclJlYWN0LCAvLyBUT0RPIFRoaXMgaXMgaW5jcmVkaWJseSBoYWNreS4gV2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIHN0b3JlIHVwZGF0ZSBhbmQgY2FsY3VsYXRlZCBuZXcgY2hpbGQgcHJvcHMsXG4gICAgICAgIC8vIFRPRE8gYW5kIHdlJ3JlIGp1c3QgcGFzc2luZyB0aGF0IHRocm91Z2ggc28gaXQgdHJpZ2dlcnMgYSByZS1yZW5kZXIgZm9yIHVzIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gYHVTRVNgLlxuICAgICAgICBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IsIGdldFNlcnZlclN0YXRlID8gKCkgPT4gY2hpbGRQcm9wc1NlbGVjdG9yKGdldFNlcnZlclN0YXRlKCksIHdyYXBwZXJQcm9wcykgOiBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQpIHtcbiAgICAgICAgICA7XG4gICAgICAgICAgZXJyLm1lc3NhZ2UgKz0gYFxcblRoZSBlcnJvciBtYXkgYmUgY29ycmVsYXRlZCB3aXRoIHRoaXMgcHJldmlvdXMgZXJyb3I6XFxuJHtsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQuc3RhY2t9XFxuXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gYWN0dWFsQ2hpbGRQcm9wcztcbiAgICAgIH0pOyAvLyBOb3cgdGhhdCBhbGwgdGhhdCdzIGRvbmUsIHdlIGNhbiBmaW5hbGx5IHRyeSB0byBhY3R1YWxseSByZW5kZXIgdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgIC8vIFdlIG1lbW9pemUgdGhlIGVsZW1lbnRzIGZvciB0aGUgcmVuZGVyZWQgY2hpbGQgY29tcG9uZW50IGFzIGFuIG9wdGltaXphdGlvbi5cblxuICAgICAgY29uc3QgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9leHRlbmRzKHt9LCBhY3R1YWxDaGlsZFByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH0sIFtyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCBXcmFwcGVkQ29tcG9uZW50LCBhY3R1YWxDaGlsZFByb3BzXSk7IC8vIElmIFJlYWN0IHNlZXMgdGhlIGV4YWN0IHNhbWUgZWxlbWVudCByZWZlcmVuY2UgYXMgbGFzdCB0aW1lLCBpdCBiYWlscyBvdXQgb2YgcmUtcmVuZGVyaW5nXG4gICAgICAvLyB0aGF0IGNoaWxkLCBzYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIFJlYWN0Lm1lbW8oKSBvciByZXR1cm5lZCBmYWxzZSBmcm9tIHNob3VsZENvbXBvbmVudFVwZGF0ZS5cblxuICAgICAgY29uc3QgcmVuZGVyZWRDaGlsZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgc3Vic2NyaWJlZCB0byBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRvIHBhc3MgaXRzIG93blxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBkb3duIHRvIG91ciBkZXNjZW5kYW50cy4gVGhhdCBtZWFucyByZW5kZXJpbmcgdGhlIHNhbWVcbiAgICAgICAgICAvLyBDb250ZXh0IGluc3RhbmNlLCBhbmQgcHV0dGluZyBhIGRpZmZlcmVudCB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0LlxuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0VG9Vc2UuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBvdmVycmlkZGVuQ29udGV4dFZhbHVlXG4gICAgICAgICAgfSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICB9LCBbQ29udGV4dFRvVXNlLCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQsIG92ZXJyaWRkZW5Db250ZXh0VmFsdWVdKTtcbiAgICAgIHJldHVybiByZW5kZXJlZENoaWxkO1xuICAgIH1cblxuICAgIGNvbnN0IF9Db25uZWN0ID0gUmVhY3QubWVtbyhDb25uZWN0RnVuY3Rpb24pO1xuXG4gICAgLy8gQWRkIGEgaGFja3kgY2FzdCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCB0eXBlXG4gICAgY29uc3QgQ29ubmVjdCA9IF9Db25uZWN0O1xuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgQ29ubmVjdC5kaXNwbGF5TmFtZSA9IENvbm5lY3RGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuXG4gICAgaWYgKGZvcndhcmRSZWYpIHtcbiAgICAgIGNvbnN0IF9mb3J3YXJkZWQgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIGZvcndhcmRDb25uZWN0UmVmKHByb3BzLCByZWYpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZjogcmVmXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3J3YXJkZWQgPSBfZm9yd2FyZGVkO1xuICAgICAgZm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICBmb3J3YXJkZWQuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICByZXR1cm4gaG9pc3RTdGF0aWNzKGZvcndhcmRlZCwgV3JhcHBlZENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvaXN0U3RhdGljcyhDb25uZWN0LCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gd3JhcFdpdGhDb25uZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB2ZXJpZnlQbGFpbk9iamVjdCBmcm9tICcuLi91dGlscy92ZXJpZnlQbGFpbk9iamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkQXJnRmFjdG9yeSB9IGZyb20gJy4vaW52YWxpZEFyZ0ZhY3RvcnknO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9wcywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNZXJnZVByb3BzUHJveHkoZGlzcGF0Y2gsIHtcbiAgICBkaXNwbGF5TmFtZSxcbiAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gIH0pIHtcbiAgICBsZXQgaGFzUnVuT25jZSA9IGZhbHNlO1xuICAgIGxldCBtZXJnZWRQcm9wcztcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICBjb25zdCBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcblxuICAgICAgaWYgKGhhc1J1bk9uY2UpIHtcbiAgICAgICAgaWYgKCFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc1J1bk9uY2UgPSB0cnVlO1xuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21lcmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VQcm9wc0ZhY3RvcnkobWVyZ2VQcm9wcykge1xuICByZXR1cm4gIW1lcmdlUHJvcHMgPyAoKSA9PiBkZWZhdWx0TWVyZ2VQcm9wcyA6IHR5cGVvZiBtZXJnZVByb3BzID09PSAnZnVuY3Rpb24nID8gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIDogY3JlYXRlSW52YWxpZEFyZ0ZhY3RvcnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnKTtcbn0iLCAiaW1wb3J0IHsgZ2V0QmF0Y2ggfSBmcm9tICcuL2JhdGNoJzsgLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xuLy8gd2VsbCBhcyBuZXN0aW5nIHN1YnNjcmlwdGlvbnMgb2YgZGVzY2VuZGFudCBjb21wb25lbnRzLCBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgdGhlXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcblxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCkge1xuICBjb25zdCBiYXRjaCA9IGdldEJhdGNoKCk7XG4gIGxldCBmaXJzdCA9IG51bGw7XG4gIGxldCBsYXN0ID0gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcigpIHtcbiAgICAgIGZpcnN0ID0gbnVsbDtcbiAgICAgIGxhc3QgPSBudWxsO1xuICAgIH0sXG5cbiAgICBub3RpZnkoKSB7XG4gICAgICBiYXRjaCgoKSA9PiB7XG4gICAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrKCk7XG4gICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0KCkge1xuICAgICAgbGV0IGxpc3RlbmVycyA9IFtdO1xuICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICB9LFxuXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGxhc3QgPSB7XG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBwcmV2OiBsYXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcnN0ID0gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgZmlyc3QgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLm5leHQpIHtcbiAgICAgICAgICBsaXN0ZW5lci5uZXh0LnByZXYgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3QgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpcnN0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbn1cblxuY29uc3QgbnVsbExpc3RlbmVycyA9IHtcbiAgbm90aWZ5KCkge30sXG5cbiAgZ2V0OiAoKSA9PiBbXVxufTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yikge1xuICBsZXQgdW5zdWJzY3JpYmU7XG4gIGxldCBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzOyAvLyBSZWFzb25zIHRvIGtlZXAgdGhlIHN1YnNjcmlwdGlvbiBhY3RpdmVcblxuICBsZXQgc3Vic2NyaXB0aW9uc0Ftb3VudCA9IDA7IC8vIElzIHRoaXMgc3BlY2lmaWMgc3Vic2NyaXB0aW9uIHN1YnNjcmliZWQgKG9yIG9ubHkgbmVzdGVkIG9uZXM/KVxuXG4gIGxldCBzZWxmU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIGNvbnN0IGNsZWFudXBMaXN0ZW5lciA9IGxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpOyAvLyBjbGVhbnVwIG5lc3RlZCBzdWJcblxuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcmVtb3ZlZCkge1xuICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cExpc3RlbmVyKCk7XG4gICAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XG4gICAgbGlzdGVuZXJzLm5vdGlmeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlV3JhcHBlcigpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xuICAgIHJldHVybiBzZWxmU3Vic2NyaWJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50Kys7XG5cbiAgICBpZiAoIXVuc3Vic2NyaWJlKSB7XG4gICAgICB1bnN1YnNjcmliZSA9IHBhcmVudFN1YiA/IHBhcmVudFN1Yi5hZGROZXN0ZWRTdWIoaGFuZGxlQ2hhbmdlV3JhcHBlcikgOiBzdG9yZS5zdWJzY3JpYmUoaGFuZGxlQ2hhbmdlV3JhcHBlcik7XG4gICAgICBsaXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50LS07XG5cbiAgICBpZiAodW5zdWJzY3JpYmUgJiYgc3Vic2NyaXB0aW9uc0Ftb3VudCA9PT0gMCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHVuc3Vic2NyaWJlID0gdW5kZWZpbmVkO1xuICAgICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZVNlbGYoKSB7XG4gICAgaWYgKCFzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgdHJ5U3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmVTZWxmKCkge1xuICAgIGlmIChzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgIGFkZE5lc3RlZFN1YixcbiAgICBub3RpZnlOZXN0ZWRTdWJzLFxuICAgIGhhbmRsZUNoYW5nZVdyYXBwZXIsXG4gICAgaXNTdWJzY3JpYmVkLFxuICAgIHRyeVN1YnNjcmliZTogdHJ5U3Vic2NyaWJlU2VsZixcbiAgICB0cnlVbnN1YnNjcmliZTogdHJ5VW5zdWJzY3JpYmVTZWxmLFxuICAgIGdldExpc3RlbmVyczogKCkgPT4gbGlzdGVuZXJzXG4gIH07XG4gIHJldHVybiBzdWJzY3JpcHRpb247XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuIFdlIG5lZWQgdXNlTGF5b3V0RWZmZWN0IHRvIGVuc3VyZSB0aGUgc3RvcmVcbi8vIHN1YnNjcmlwdGlvbiBjYWxsYmFjayBhbHdheXMgaGFzIHRoZSBzZWxlY3RvciBmcm9tIHRoZSBsYXRlc3QgcmVuZGVyIGNvbW1pdFxuLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IGhhcHBlbiBiZXR3ZWVuIHJlbmRlciBhbmQgdGhlIGVmZmVjdCxcbi8vIHdoaWNoIG1heSBjYXVzZSBtaXNzZWQgdXBkYXRlczsgd2UgYWxzbyBtdXN0IGVuc3VyZSB0aGUgc3RvcmUgc3Vic2NyaXB0aW9uXG4vLyBpcyBjcmVhdGVkIHN5bmNocm9ub3VzbHksIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgb2NjdXIgYmVmb3JlIHRoZVxuLy8gc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYW5kIGFuIGluY29uc2lzdGVudCBzdGF0ZSBtYXkgYmUgb2JzZXJ2ZWRcbi8vIE1hdGNoZXMgbG9naWMgaW4gUmVhY3QncyBgc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50YCBmaWxlXG5cbmV4cG9ydCBjb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuXG5mdW5jdGlvbiBQcm92aWRlcih7XG4gIHN0b3JlLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgc2VydmVyU3RhdGUsXG4gIHN0YWJpbGl0eUNoZWNrID0gJ29uY2UnLFxuICBub29wQ2hlY2sgPSAnb25jZSdcbn0pIHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZTogc2VydmVyU3RhdGUgPyAoKSA9PiBzZXJ2ZXJTdGF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrXG4gICAgfTtcbiAgfSwgW3N0b3JlLCBzZXJ2ZXJTdGF0ZSwgc3RhYmlsaXR5Q2hlY2ssIG5vb3BDaGVja10pO1xuICBjb25zdCBwcmV2aW91c1N0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLCBbc3RvcmVdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9uXG4gICAgfSA9IGNvbnRleHRWYWx1ZTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzO1xuICAgIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcblxuICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSBzdG9yZS5nZXRTdGF0ZSgpKSB7XG4gICAgICBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gIH0sIFtjb250ZXh0VmFsdWUsIHByZXZpb3VzU3RhdGVdKTtcbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7IC8vIEB0cy1pZ25vcmUgJ0FueUFjdGlvbicgaXMgYXNzaWduYWJsZSB0byB0aGUgY29uc3RyYWludCBvZiB0eXBlICdBJywgYnV0ICdBJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gIH0sIGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvdmlkZXI7IiwgImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0LCBjcmVhdGVSZWR1eENvbnRleHRIb29rIH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogLy8gQHRzLWlnbm9yZVxuICBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmVcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHJlZHV4IHN0b3JlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IEV4YW1wbGVDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTdG9yZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVTdG9yZUhvb2soKTsiLCAiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgYXMgdXNlRGVmYXVsdFN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL3VzZVN0b3JlJztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VTdG9yZSA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0U3RvcmUgOiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaDtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBgZGlzcGF0Y2hgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fGZ1bmN0aW9ufSByZWR1eCBzdG9yZSdzIGBkaXNwYXRjaGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gKiAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKVxyXG4gKiAgIGNvbnN0IGluY3JlYXNlQ291bnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlYXNlLWNvdW50ZXInIH0pLCBbXSlcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGRpdj5cclxuICogICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cclxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtpbmNyZWFzZUNvdW50ZXJ9PkluY3JlYXNlIGNvdW50ZXI8L2J1dHRvbj5cclxuICogICAgIDwvZGl2PlxyXG4gKiAgIClcclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZURpc3BhdGNoID0gLyojX19QVVJFX18qL2NyZWF0ZURpc3BhdGNoSG9vaygpOyIsICJpbXBvcnQgeyBUeXBlZFVzZVNlbGVjdG9ySG9vaywgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgdHlwZSB7IFJvb3RTdGF0ZSwgQXBwRGlzcGF0Y2ggfSBmcm9tIFwiLi9zdG9yZVwiO1xuXG5leHBvcnQgY29uc3QgdXNlQXBwRGlzcGF0Y2ggPSAoKSA9PiB1c2VEaXNwYXRjaDxBcHBEaXNwYXRjaD4oKTtcbmV4cG9ydCBjb25zdCB1c2VBcHBTZWxlY3RvcjogVHlwZWRVc2VTZWxlY3Rvckhvb2s8Um9vdFN0YXRlPiA9IHVzZVNlbGVjdG9yO1xuIiwgImNvbnN0IGVycm9ycyA9IHtcblx0MDogXCJJbGxlZ2FsIHN0YXRlXCIsXG5cdDE6IFwiSW1tZXIgZHJhZnRzIGNhbm5vdCBoYXZlIGNvbXB1dGVkIHByb3BlcnRpZXNcIixcblx0MjogXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLFxuXHQzKGRhdGE6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRcIkNhbm5vdCB1c2UgYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIERpZCB5b3UgcGFzcyBhbiBvYmplY3QgZnJvbSBpbnNpZGUgYW4gaW1tZXIgZnVuY3Rpb24gdG8gYW4gYXN5bmMgcHJvY2Vzcz8gXCIgK1xuXHRcdFx0ZGF0YVxuXHRcdClcblx0fSxcblx0NDogXCJBbiBpbW1lciBwcm9kdWNlciByZXR1cm5lZCBhIG5ldyB2YWx1ZSAqYW5kKiBtb2RpZmllZCBpdHMgZHJhZnQuIEVpdGhlciByZXR1cm4gYSBuZXcgdmFsdWUgKm9yKiBtb2RpZnkgdGhlIGRyYWZ0LlwiLFxuXHQ1OiBcIkltbWVyIGZvcmJpZHMgY2lyY3VsYXIgcmVmZXJlbmNlc1wiLFxuXHQ2OiBcIlRoZSBmaXJzdCBvciBzZWNvbmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvblwiLFxuXHQ3OiBcIlRoZSB0aGlyZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiLFxuXHQ4OiBcIkZpcnN0IGFyZ3VtZW50IHRvIGBjcmVhdGVEcmFmdGAgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgYW4gYXJyYXksIG9yIGFuIGltbWVyYWJsZSBvYmplY3RcIixcblx0OTogXCJGaXJzdCBhcmd1bWVudCB0byBgZmluaXNoRHJhZnRgIG11c3QgYmUgYSBkcmFmdCByZXR1cm5lZCBieSBgY3JlYXRlRHJhZnRgXCIsXG5cdDEwOiBcIlRoZSBnaXZlbiBkcmFmdCBpcyBhbHJlYWR5IGZpbmFsaXplZFwiLFxuXHQxMTogXCJPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMjogXCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMzogXCJJbW1lciBvbmx5IHN1cHBvcnRzIGRlbGV0aW5nIGFycmF5IGluZGljZXNcIixcblx0MTQ6IFwiSW1tZXIgb25seSBzdXBwb3J0cyBzZXR0aW5nIGFycmF5IGluZGljZXMgYW5kIHRoZSAnbGVuZ3RoJyBwcm9wZXJ0eVwiLFxuXHQxNShwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gXCJDYW5ub3QgYXBwbHkgcGF0Y2gsIHBhdGggZG9lc24ndCByZXNvbHZlOiBcIiArIHBhdGhcblx0fSxcblx0MTY6ICdTZXRzIGNhbm5vdCBoYXZlIFwicmVwbGFjZVwiIHBhdGNoZXMuJyxcblx0MTcob3A6IHN0cmluZykge1xuXHRcdHJldHVybiBcIlVuc3VwcG9ydGVkIHBhdGNoIG9wZXJhdGlvbjogXCIgKyBvcFxuXHR9LFxuXHQxOChwbHVnaW46IHN0cmluZykge1xuXHRcdHJldHVybiBgVGhlIHBsdWdpbiBmb3IgJyR7cGx1Z2lufScgaGFzIG5vdCBiZWVuIGxvYWRlZCBpbnRvIEltbWVyLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgaW1wb3J0IGFuZCBjYWxsIFxcYGVuYWJsZSR7cGx1Z2lufSgpXFxgIHdoZW4gaW5pdGlhbGl6aW5nIHlvdXIgYXBwbGljYXRpb24uYFxuXHR9LFxuXHQyMDogXCJDYW5ub3QgdXNlIHByb3hpZXMgaWYgUHJveHksIFByb3h5LnJldm9jYWJsZSBvciBSZWZsZWN0IGFyZSBub3QgYXZhaWxhYmxlXCIsXG5cdDIxKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYHByb2R1Y2UgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHRoaW5ncyB0aGF0IGFyZSBkcmFmdGFibGU6IHBsYWluIG9iamVjdHMsIGFycmF5cywgTWFwLCBTZXQgb3IgY2xhc3NlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnW2ltbWVyYWJsZV06IHRydWUnLiBHb3QgJyR7dGhpbmd9J2Bcblx0fSxcblx0MjIodGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWBcblx0fSxcblx0MjModGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ29yaWdpbmFsJyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gXG5cdH0sXG5cdDI0OiBcIlBhdGNoaW5nIHJlc2VydmVkIGF0dHJpYnV0ZXMgbGlrZSBfX3Byb3RvX18sIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaXMgbm90IGFsbG93ZWRcIlxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gZGllKGVycm9yOiBrZXlvZiB0eXBlb2YgZXJyb3JzLCAuLi5hcmdzOiBhbnlbXSk6IG5ldmVyIHtcblx0aWYgKF9fREVWX18pIHtcblx0XHRjb25zdCBlID0gZXJyb3JzW2Vycm9yXVxuXHRcdGNvbnN0IG1zZyA9ICFlXG5cdFx0XHQ/IFwidW5rbm93biBlcnJvciBucjogXCIgKyBlcnJvclxuXHRcdFx0OiB0eXBlb2YgZSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQ/IGUuYXBwbHkobnVsbCwgYXJncyBhcyBhbnkpXG5cdFx0XHQ6IGVcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFtJbW1lcl0gJHttc2d9YClcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0YFtJbW1lcl0gbWluaWZpZWQgZXJyb3IgbnI6ICR7ZXJyb3J9JHtcblx0XHRcdGFyZ3MubGVuZ3RoID8gXCIgXCIgKyBhcmdzLm1hcChzID0+IGAnJHtzfSdgKS5qb2luKFwiLFwiKSA6IFwiXCJcblx0XHR9LiBGaW5kIHRoZSBmdWxsIGVycm9yIGF0OiBodHRwczovL2JpdC5seS8zY1hFS1dmYFxuXHQpXG59XG4iLCAiaW1wb3J0IHtcblx0RFJBRlRfU1RBVEUsXG5cdERSQUZUQUJMRSxcblx0aGFzU2V0LFxuXHRPYmplY3Rpc2gsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55TWFwLFxuXHRBbnlTZXQsXG5cdEltbWVyU3RhdGUsXG5cdGhhc01hcCxcblx0QXJjaHR5cGUsXG5cdGRpZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBJbW1lciBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiAhIXZhbHVlW0RSQUZUX1NUQVRFXVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBjYW4gYmUgZHJhZnRlZCBieSBJbW1lciAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRhYmxlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlXG5cdHJldHVybiAoXG5cdFx0aXNQbGFpbk9iamVjdCh2YWx1ZSkgfHxcblx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSB8fFxuXHRcdCEhdmFsdWVbRFJBRlRBQkxFXSB8fFxuXHRcdCEhdmFsdWUuY29uc3RydWN0b3I/LltEUkFGVEFCTEVdIHx8XG5cdFx0aXNNYXAodmFsdWUpIHx8XG5cdFx0aXNTZXQodmFsdWUpXG5cdClcbn1cblxuY29uc3Qgb2JqZWN0Q3RvclN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IudG9TdHJpbmcoKVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdGNvbnN0IEN0b3IgPVxuXHRcdE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yXG5cblx0aWYgKEN0b3IgPT09IE9iamVjdCkgcmV0dXJuIHRydWVcblxuXHRyZXR1cm4gKFxuXHRcdHR5cGVvZiBDdG9yID09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IG9iamVjdEN0b3JTdHJpbmdcblx0KVxufVxuXG4vKiogR2V0IHRoZSB1bmRlcmx5aW5nIG9iamVjdCB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsPFQ+KHZhbHVlOiBUKTogVCB8IHVuZGVmaW5lZFxuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsKHZhbHVlOiBEcmFmdGVkPGFueT4pOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjMsIHZhbHVlKVxuXHRyZXR1cm4gdmFsdWVbRFJBRlRfU1RBVEVdLmJhc2VfXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBjb25zdCBvd25LZXlzOiAodGFyZ2V0OiBBbnlPYmplY3QpID0+IFByb3BlcnR5S2V5W10gPVxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0Lm93bktleXNcblx0XHQ/IFJlZmxlY3Qub3duS2V5c1xuXHRcdDogdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09IFwidW5kZWZpbmVkXCJcblx0XHQ/IG9iaiA9PlxuXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmNvbmNhdChcblx0XHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikgYXMgYW55XG5cdFx0XHRcdClcblx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5cbmV4cG9ydCBjb25zdCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID1cblx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgfHxcblx0ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0YXJnZXQ6IGFueSkge1xuXHRcdC8vIFBvbHlmaWxsIG5lZWRlZCBmb3IgSGVybWVzIGFuZCBJRSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9oZXJtZXMvaXNzdWVzLzI3NFxuXHRcdGNvbnN0IHJlczogYW55ID0ge31cblx0XHRvd25LZXlzKHRhcmdldCkuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0cmVzW2tleV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KVxuXHRcdH0pXG5cdFx0cmV0dXJuIHJlc1xuXHR9XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoPFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRvYmo6IFQsXG5cdGl0ZXI6IChrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSwgc291cmNlOiBUKSA9PiB2b2lkLFxuXHRlbnVtZXJhYmxlT25seT86IGJvb2xlYW5cbik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBlYWNoKG9iajogYW55LCBpdGVyOiBhbnksIGVudW1lcmFibGVPbmx5ID0gZmFsc2UpIHtcblx0aWYgKGdldEFyY2h0eXBlKG9iaikgPT09IEFyY2h0eXBlLk9iamVjdCkge1xuXHRcdDsoZW51bWVyYWJsZU9ubHkgPyBPYmplY3Qua2V5cyA6IG93bktleXMpKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0aWYgKCFlbnVtZXJhYmxlT25seSB8fCB0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSBpdGVyKGtleSwgb2JqW2tleV0sIG9iailcblx0XHR9KVxuXHR9IGVsc2Uge1xuXHRcdG9iai5mb3JFYWNoKChlbnRyeTogYW55LCBpbmRleDogYW55KSA9PiBpdGVyKGluZGV4LCBlbnRyeSwgb2JqKSlcblx0fVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJjaHR5cGUodGhpbmc6IGFueSk6IEFyY2h0eXBlIHtcblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0Y29uc3Qgc3RhdGU6IHVuZGVmaW5lZCB8IEltbWVyU3RhdGUgPSB0aGluZ1tEUkFGVF9TVEFURV1cblx0cmV0dXJuIHN0YXRlXG5cdFx0PyBzdGF0ZS50eXBlXyA+IDNcblx0XHRcdD8gc3RhdGUudHlwZV8gLSA0IC8vIGNhdXNlIE9iamVjdCBhbmQgQXJyYXkgbWFwIGJhY2sgZnJvbSA0IGFuZCA1XG5cdFx0XHQ6IChzdGF0ZS50eXBlXyBhcyBhbnkpIC8vIG90aGVycyBhcmUgdGhlIHNhbWVcblx0XHQ6IEFycmF5LmlzQXJyYXkodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5BcnJheVxuXHRcdDogaXNNYXAodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5NYXBcblx0XHQ6IGlzU2V0KHRoaW5nKVxuXHRcdD8gQXJjaHR5cGUuU2V0XG5cdFx0OiBBcmNodHlwZS5PYmplY3Rcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcyh0aGluZzogYW55LCBwcm9wOiBQcm9wZXJ0eUtleSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXBcblx0XHQ/IHRoaW5nLmhhcyhwcm9wKVxuXHRcdDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaW5nLCBwcm9wKVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KHRoaW5nOiBBbnlNYXAgfCBBbnlPYmplY3QsIHByb3A6IFByb3BlcnR5S2V5KTogYW55IHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXAgPyB0aGluZy5nZXQocHJvcCkgOiB0aGluZ1twcm9wXVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2V0KHRoaW5nOiBhbnksIHByb3BPck9sZFZhbHVlOiBQcm9wZXJ0eUtleSwgdmFsdWU6IGFueSkge1xuXHRjb25zdCB0ID0gZ2V0QXJjaHR5cGUodGhpbmcpXG5cdGlmICh0ID09PSBBcmNodHlwZS5NYXApIHRoaW5nLnNldChwcm9wT3JPbGRWYWx1ZSwgdmFsdWUpXG5cdGVsc2UgaWYgKHQgPT09IEFyY2h0eXBlLlNldCkge1xuXHRcdHRoaW5nLmFkZCh2YWx1ZSlcblx0fSBlbHNlIHRoaW5nW3Byb3BPck9sZFZhbHVlXSA9IHZhbHVlXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuXHQvLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2M2OTkwNGE1MTFiOTAwMjY2OTM1MTY4MjIzMDYzZGQ4NzcyZGZjNDAvcGFja2FnZXMvZmJqcy9zcmMvY29yZS9zaGFsbG93RXF1YWwuanNcblx0aWYgKHggPT09IHkpIHtcblx0XHRyZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHlcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5XG5cdH1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIEFueU1hcCB7XG5cdHJldHVybiBoYXNNYXAgJiYgdGFyZ2V0IGluc3RhbmNlb2YgTWFwXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NldCh0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBBbnlTZXQge1xuXHRyZXR1cm4gaGFzU2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIFNldFxufVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdChzdGF0ZTogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdHJldHVybiBzdGF0ZS5jb3B5XyB8fCBzdGF0ZS5iYXNlX1xufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZTogYW55KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGJhc2UpKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYmFzZSlcblx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdGxldCBrZXlzID0gb3duS2V5cyhkZXNjcmlwdG9ycylcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0Y29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV1cblx0XHRpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdGRlc2Mud3JpdGFibGUgPSB0cnVlXG5cdFx0XHRkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWVcblx0XHR9XG5cdFx0Ly8gbGlrZSBvYmplY3QuYXNzaWduLCB3ZSB3aWxsIHJlYWQgYW55IF9vd25fLCBnZXQvc2V0IGFjY2Vzc29ycy4gVGhpcyBoZWxwcyBpbiBkZWFsaW5nXG5cdFx0Ly8gd2l0aCBsaWJyYXJpZXMgdGhhdCB0cmFwIHZhbHVlcywgbGlrZSBtb2J4IG9yIHZ1ZVxuXHRcdC8vIHVubGlrZSBvYmplY3QuYXNzaWduLCBub24tZW51bWVyYWJsZXMgd2lsbCBiZSBjb3BpZWQgYXMgd2VsbFxuXHRcdGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcblx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsIC8vIGNvdWxkIGxpdmUgd2l0aCAhIWRlc2Muc2V0IGFzIHdlbGwgaGVyZS4uLlxuXHRcdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHRcdHZhbHVlOiBiYXNlW2tleV1cblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgZHJhZnRhYmxlIG9iamVjdHMuIFJldHVybnMgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAqIEJ5IGRlZmF1bHQgZnJlZXplcyBzaGFsbG93bHksIGJ1dCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGB0cnVlYCBpdCB3aWxsIGZyZWV6ZSByZWN1cnNpdmVseS5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gZGVlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogVCwgZGVlcD86IGJvb2xlYW4pOiBUXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogYW55LCBkZWVwOiBib29sZWFuID0gZmFsc2UpOiBUIHtcblx0aWYgKGlzRnJvemVuKG9iaikgfHwgaXNEcmFmdChvYmopIHx8ICFpc0RyYWZ0YWJsZShvYmopKSByZXR1cm4gb2JqXG5cdGlmIChnZXRBcmNodHlwZShvYmopID4gMSAvKiBNYXAgb3IgU2V0ICovKSB7XG5cdFx0b2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zIGFzIGFueVxuXHR9XG5cdE9iamVjdC5mcmVlemUob2JqKVxuXHRpZiAoZGVlcCkgZWFjaChvYmosIChrZXksIHZhbHVlKSA9PiBmcmVlemUodmFsdWUsIHRydWUpLCB0cnVlKVxuXHRyZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucygpIHtcblx0ZGllKDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb3plbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHRydWVcblx0Ly8gU2VlICM2MDAsIElFIGRpZXMgb24gbm9uLW9iamVjdHMgaW4gT2JqZWN0LmlzRnJvemVuXG5cdHJldHVybiBPYmplY3QuaXNGcm96ZW4ob2JqKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdFBhdGNoLFxuXHRJbW1lclNjb3BlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0UHJveHlUeXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFBsdWdpbiB1dGlsaXRpZXMgKi9cbmNvbnN0IHBsdWdpbnM6IHtcblx0UGF0Y2hlcz86IHtcblx0XHRnZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0KTogdm9pZFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRcdGJhc2U6IGFueSxcblx0XHRcdHJlcGxhY2VtZW50OiBhbnksXG5cdFx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHQpOiB2b2lkXG5cdFx0YXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFRcblx0fVxuXHRFUzU/OiB7XG5cdFx0d2lsbEZpbmFsaXplRVM1XyhzY29wZTogSW1tZXJTY29wZSwgcmVzdWx0OiBhbnksIGlzUmVwbGFjZWQ6IGJvb2xlYW4pOiB2b2lkXG5cdFx0Y3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdFx0YmFzZTogVCxcblx0XHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0XHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT5cblx0XHRoYXNDaGFuZ2VzXyhzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IEVTNU9iamVjdFN0YXRlKTogYm9vbGVhblxuXHR9XG5cdE1hcFNldD86IHtcblx0XHRwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVFxuXHRcdHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUXG5cdH1cbn0gPSB7fVxuXG50eXBlIFBsdWdpbnMgPSB0eXBlb2YgcGx1Z2luc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luPEsgZXh0ZW5kcyBrZXlvZiBQbHVnaW5zPihcblx0cGx1Z2luS2V5OiBLXG4pOiBFeGNsdWRlPFBsdWdpbnNbS10sIHVuZGVmaW5lZD4ge1xuXHRjb25zdCBwbHVnaW4gPSBwbHVnaW5zW3BsdWdpbktleV1cblx0aWYgKCFwbHVnaW4pIHtcblx0XHRkaWUoMTgsIHBsdWdpbktleSlcblx0fVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBwbHVnaW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW48SyBleHRlbmRzIGtleW9mIFBsdWdpbnM+KFxuXHRwbHVnaW5LZXk6IEssXG5cdGltcGxlbWVudGF0aW9uOiBQbHVnaW5zW0tdXG4pOiB2b2lkIHtcblx0aWYgKCFwbHVnaW5zW3BsdWdpbktleV0pIHBsdWdpbnNbcGx1Z2luS2V5XSA9IGltcGxlbWVudGF0aW9uXG59XG5cbi8qKiBFUzUgUGx1Z2luICovXG5cbmludGVyZmFjZSBFUzVCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1trZXk6IHN0cmluZ106IGFueX1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlZF86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFUzVPYmplY3RTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIEVTNU9iamVjdFN0YXRlPlxuXHRiYXNlXzogQW55T2JqZWN0XG5cdGNvcHlfOiBBbnlPYmplY3QgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVM1QXJyYXlTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1QXJyYXlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgRVM1QXJyYXlTdGF0ZT5cblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG59XG5cbi8qKiBNYXAgLyBTZXQgcGx1Z2luICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuTWFwXG5cdGNvcHlfOiBBbnlNYXAgfCB1bmRlZmluZWRcblx0YXNzaWduZWRfOiBNYXA8YW55LCBib29sZWFuPiB8IHVuZGVmaW5lZFxuXHRiYXNlXzogQW55TWFwXG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlNYXAsIE1hcFN0YXRlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlNldFxuXHRjb3B5XzogQW55U2V0IHwgdW5kZWZpbmVkXG5cdGJhc2VfOiBBbnlTZXRcblx0ZHJhZnRzXzogTWFwPGFueSwgRHJhZnRlZD4gLy8gbWFwcyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gdGhlIGRyYWZ0IHZhbHVlIGluIHRoZSBuZXcgc2V0XG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlTZXQsIFNldFN0YXRlPlxufVxuXG4vKiogUGF0Y2hlcyBwbHVnaW4gKi9cblxuZXhwb3J0IHR5cGUgUGF0Y2hQYXRoID0gKHN0cmluZyB8IG51bWJlcilbXVxuIiwgImltcG9ydCB7XG5cdFBhdGNoLFxuXHRQYXRjaExpc3RlbmVyLFxuXHREcmFmdGVkLFxuXHRJbW1lcixcblx0RFJBRlRfU1RBVEUsXG5cdEltbWVyU3RhdGUsXG5cdFByb3h5VHlwZSxcblx0Z2V0UGx1Z2luXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5pbXBvcnQge2RpZX0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yc1wiXG5cbi8qKiBFYWNoIHNjb3BlIHJlcHJlc2VudHMgYSBgcHJvZHVjZWAgY2FsbC4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJbW1lclNjb3BlIHtcblx0cGF0Y2hlc18/OiBQYXRjaFtdXG5cdGludmVyc2VQYXRjaGVzXz86IFBhdGNoW11cblx0Y2FuQXV0b0ZyZWV6ZV86IGJvb2xlYW5cblx0ZHJhZnRzXzogYW55W11cblx0cGFyZW50Xz86IEltbWVyU2NvcGVcblx0cGF0Y2hMaXN0ZW5lcl8/OiBQYXRjaExpc3RlbmVyXG5cdGltbWVyXzogSW1tZXJcblx0dW5maW5hbGl6ZWREcmFmdHNfOiBudW1iZXJcbn1cblxubGV0IGN1cnJlbnRTY29wZTogSW1tZXJTY29wZSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuXHRpZiAoX19ERVZfXyAmJiAhY3VycmVudFNjb3BlKSBkaWUoMClcblx0cmV0dXJuIGN1cnJlbnRTY29wZSFcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2NvcGUoXG5cdHBhcmVudF86IEltbWVyU2NvcGUgfCB1bmRlZmluZWQsXG5cdGltbWVyXzogSW1tZXJcbik6IEltbWVyU2NvcGUge1xuXHRyZXR1cm4ge1xuXHRcdGRyYWZ0c186IFtdLFxuXHRcdHBhcmVudF8sXG5cdFx0aW1tZXJfLFxuXHRcdC8vIFdoZW5ldmVyIHRoZSBtb2RpZmllZCBkcmFmdCBjb250YWlucyBhIGRyYWZ0IGZyb20gYW5vdGhlciBzY29wZSwgd2Vcblx0XHQvLyBuZWVkIHRvIHByZXZlbnQgYXV0by1mcmVlemluZyBzbyB0aGUgdW5vd25lZCBkcmFmdCBjYW4gYmUgZmluYWxpemVkLlxuXHRcdGNhbkF1dG9GcmVlemVfOiB0cnVlLFxuXHRcdHVuZmluYWxpemVkRHJhZnRzXzogMFxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShcblx0c2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG4pIHtcblx0aWYgKHBhdGNoTGlzdGVuZXIpIHtcblx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpIC8vIGFzc2VydCB3ZSBoYXZlIHRoZSBwbHVnaW5cblx0XHRzY29wZS5wYXRjaGVzXyA9IFtdXG5cdFx0c2NvcGUuaW52ZXJzZVBhdGNoZXNfID0gW11cblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXJcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlU2NvcGUoc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0bGVhdmVTY29wZShzY29wZSlcblx0c2NvcGUuZHJhZnRzXy5mb3JFYWNoKHJldm9rZURyYWZ0KVxuXHQvLyBAdHMtaWdub3JlXG5cdHNjb3BlLmRyYWZ0c18gPSBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWF2ZVNjb3BlKHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdGlmIChzY29wZSA9PT0gY3VycmVudFNjb3BlKSB7XG5cdFx0Y3VycmVudFNjb3BlID0gc2NvcGUucGFyZW50X1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyOiBJbW1lcikge1xuXHRyZXR1cm4gKGN1cnJlbnRTY29wZSA9IGNyZWF0ZVNjb3BlKGN1cnJlbnRTY29wZSwgaW1tZXIpKVxufVxuXG5mdW5jdGlvbiByZXZva2VEcmFmdChkcmFmdDogRHJhZnRlZCkge1xuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXVxuXHRpZiAoXG5cdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5Qcm94eU9iamVjdCB8fFxuXHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuUHJveHlBcnJheVxuXHQpXG5cdFx0c3RhdGUucmV2b2tlXygpXG5cdGVsc2Ugc3RhdGUucmV2b2tlZF8gPSB0cnVlXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HLFxuXHRQYXRjaFBhdGgsXG5cdGVhY2gsXG5cdGhhcyxcblx0ZnJlZXplLFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0LFxuXHRTZXRTdGF0ZSxcblx0c2V0LFxuXHRQcm94eVR5cGUsXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRyZXZva2VTY29wZSxcblx0aXNGcm96ZW4sXG5cdHNoYWxsb3dDb3B5XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0KHJlc3VsdDogYW55LCBzY29wZTogSW1tZXJTY29wZSkge1xuXHRzY29wZS51bmZpbmFsaXplZERyYWZ0c18gPSBzY29wZS5kcmFmdHNfLmxlbmd0aFxuXHRjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfIVswXVxuXHRjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnRcblx0aWYgKCFzY29wZS5pbW1lcl8udXNlUHJveGllc18pXG5cdFx0Z2V0UGx1Z2luKFwiRVM1XCIpLndpbGxGaW5hbGl6ZUVTNV8oc2NvcGUsIHJlc3VsdCwgaXNSZXBsYWNlZClcblx0aWYgKGlzUmVwbGFjZWQpIHtcblx0XHRpZiAoYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5tb2RpZmllZF8pIHtcblx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0ZGllKDQpXG5cdFx0fVxuXHRcdGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG5cdFx0XHQvLyBGaW5hbGl6ZSB0aGUgcmVzdWx0IGluIGNhc2UgaXQgY29udGFpbnMgKG9yIGlzKSBhIHN1YnNldCBvZiB0aGUgZHJhZnQuXG5cdFx0XHRyZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KVxuXHRcdFx0aWYgKCFzY29wZS5wYXJlbnRfKSBtYXliZUZyZWV6ZShzY29wZSwgcmVzdWx0KVxuXHRcdH1cblx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdFx0XHRiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLmJhc2VfLFxuXHRcdFx0XHRyZXN1bHQsXG5cdFx0XHRcdHNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRzY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZpbmFsaXplIHRoZSBiYXNlIGRyYWZ0LlxuXHRcdHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCBiYXNlRHJhZnQsIFtdKVxuXHR9XG5cdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyEoc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyEpXG5cdH1cblx0cmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZShyb290U2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIHBhdGg/OiBQYXRjaFBhdGgpIHtcblx0Ly8gRG9uJ3QgcmVjdXJzZSBpbiB0aG8gcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlc1xuXHRpZiAoaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHQvLyBBIHBsYWluIG9iamVjdCwgbWlnaHQgbmVlZCBmcmVlemluZywgbWlnaHQgY29udGFpbiBkcmFmdHNcblx0aWYgKCFzdGF0ZSkge1xuXHRcdGVhY2goXG5cdFx0XHR2YWx1ZSxcblx0XHRcdChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRcdGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgdmFsdWUsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCksXG5cdFx0XHR0cnVlIC8vIFNlZSAjNTkwLCBkb24ndCByZWN1cnNlIGludG8gbm9uLWVudW1lcmFibGUgb2Ygbm9uIGRyYWZ0ZWQgb2JqZWN0c1xuXHRcdClcblx0XHRyZXR1cm4gdmFsdWVcblx0fVxuXHQvLyBOZXZlciBmaW5hbGl6ZSBkcmFmdHMgb3duZWQgYnkgYW5vdGhlciBzY29wZS5cblx0aWYgKHN0YXRlLnNjb3BlXyAhPT0gcm9vdFNjb3BlKSByZXR1cm4gdmFsdWVcblx0Ly8gVW5tb2RpZmllZCBkcmFmdCwgcmV0dXJuIHRoZSAoZnJvemVuKSBvcmlnaW5hbFxuXHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgc3RhdGUuYmFzZV8sIHRydWUpXG5cdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdH1cblx0Ly8gTm90IGZpbmFsaXplZCB5ZXQsIGxldCdzIGRvIHRoYXQgbm93XG5cdGlmICghc3RhdGUuZmluYWxpemVkXykge1xuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlXG5cdFx0c3RhdGUuc2NvcGVfLnVuZmluYWxpemVkRHJhZnRzXy0tXG5cdFx0Y29uc3QgcmVzdWx0ID1cblx0XHRcdC8vIEZvciBFUzUsIGNyZWF0ZSBhIGdvb2QgY29weSBmcm9tIHRoZSBkcmFmdCBmaXJzdCwgd2l0aCBhZGRlZCBrZXlzIGFuZCB3aXRob3V0IGRlbGV0ZWQga2V5cy5cblx0XHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0IHx8IHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1QXJyYXlcblx0XHRcdFx0PyAoc3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5kcmFmdF8pKVxuXHRcdFx0XHQ6IHN0YXRlLmNvcHlfXG5cdFx0Ly8gRmluYWxpemUgYWxsIGNoaWxkcmVuIG9mIHRoZSBjb3B5XG5cdFx0Ly8gRm9yIHNldHMgd2UgY2xvbmUgYmVmb3JlIGl0ZXJhdGluZywgb3RoZXJ3aXNlIHdlIGNhbiBnZXQgaW4gZW5kbGVzcyBsb29wIGR1ZSB0byBtb2RpZnlpbmcgZHVyaW5nIGl0ZXJhdGlvbiwgc2VlICM2Mjhcblx0XHQvLyBUbyBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXIgaW4gYWxsIGNhc2VzIHdlIHRoZW4gY2xlYXIgdGhlIHNldFxuXHRcdC8vIEFuZCB3ZSBsZXQgZmluYWxpemVQcm9wZXJ0eSBrbm93IGl0IG5lZWRzIHRvIHJlLWFkZCBub24tZHJhZnQgY2hpbGRyZW4gYmFjayB0byB0aGUgdGFyZ2V0XG5cdFx0bGV0IHJlc3VsdEVhY2ggPSByZXN1bHRcblx0XHRsZXQgaXNTZXQgPSBmYWxzZVxuXHRcdGlmIChzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLlNldCkge1xuXHRcdFx0cmVzdWx0RWFjaCA9IG5ldyBTZXQocmVzdWx0KVxuXHRcdFx0cmVzdWx0LmNsZWFyKClcblx0XHRcdGlzU2V0ID0gdHJ1ZVxuXHRcdH1cblx0XHRlYWNoKHJlc3VsdEVhY2gsIChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoLCBpc1NldClcblx0XHQpXG5cdFx0Ly8gZXZlcnl0aGluZyBpbnNpZGUgaXMgZnJvemVuLCB3ZSBjYW4gZnJlZXplIGhlcmVcblx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIHJlc3VsdCwgZmFsc2UpXG5cdFx0Ly8gZmlyc3QgdGltZSBmaW5hbGl6aW5nLCBsZXQncyBjcmVhdGUgdGhvc2UgcGF0Y2hlc1xuXHRcdGlmIChwYXRoICYmIHJvb3RTY29wZS5wYXRjaGVzXykge1xuXHRcdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0cm9vdFNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRyb290U2NvcGUuaW52ZXJzZVBhdGNoZXNfIVxuXHRcdFx0KVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RhdGUuY29weV9cbn1cblxuZnVuY3Rpb24gZmluYWxpemVQcm9wZXJ0eShcblx0cm9vdFNjb3BlOiBJbW1lclNjb3BlLFxuXHRwYXJlbnRTdGF0ZTogdW5kZWZpbmVkIHwgSW1tZXJTdGF0ZSxcblx0dGFyZ2V0T2JqZWN0OiBhbnksXG5cdHByb3A6IHN0cmluZyB8IG51bWJlcixcblx0Y2hpbGRWYWx1ZTogYW55LFxuXHRyb290UGF0aD86IFBhdGNoUGF0aCxcblx0dGFyZ2V0SXNTZXQ/OiBib29sZWFuXG4pIHtcblx0aWYgKF9fREVWX18gJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KSBkaWUoNSlcblx0aWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcblx0XHRjb25zdCBwYXRoID1cblx0XHRcdHJvb3RQYXRoICYmXG5cdFx0XHRwYXJlbnRTdGF0ZSAmJlxuXHRcdFx0cGFyZW50U3RhdGUhLnR5cGVfICE9PSBQcm94eVR5cGUuU2V0ICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG5cdFx0XHQhaGFzKChwYXJlbnRTdGF0ZSBhcyBFeGNsdWRlPEltbWVyU3RhdGUsIFNldFN0YXRlPikuYXNzaWduZWRfISwgcHJvcCkgLy8gU2tpcCBkZWVwIHBhdGNoZXMgZm9yIGFzc2lnbmVkIGtleXMuXG5cdFx0XHRcdD8gcm9vdFBhdGghLmNvbmNhdChwcm9wKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdC8vIERyYWZ0cyBvd25lZCBieSBgc2NvcGVgIGFyZSBmaW5hbGl6ZWQgaGVyZS5cblx0XHRjb25zdCByZXMgPSBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUsIHBhdGgpXG5cdFx0c2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKVxuXHRcdC8vIERyYWZ0cyBmcm9tIGFub3RoZXIgc2NvcGUgbXVzdCBwcmV2ZW50ZWQgdG8gYmUgZnJvemVuXG5cdFx0Ly8gaWYgd2UgZ290IGEgZHJhZnQgYmFjayBmcm9tIGZpbmFsaXplLCB3ZSdyZSBpbiBhIG5lc3RlZCBwcm9kdWNlIGFuZCBzaG91bGRuJ3QgZnJlZXplXG5cdFx0aWYgKGlzRHJhZnQocmVzKSkge1xuXHRcdFx0cm9vdFNjb3BlLmNhbkF1dG9GcmVlemVfID0gZmFsc2Vcblx0XHR9IGVsc2UgcmV0dXJuXG5cdH0gZWxzZSBpZiAodGFyZ2V0SXNTZXQpIHtcblx0XHR0YXJnZXRPYmplY3QuYWRkKGNoaWxkVmFsdWUpXG5cdH1cblx0Ly8gU2VhcmNoIG5ldyBvYmplY3RzIGZvciB1bmZpbmFsaXplZCBkcmFmdHMuIEZyb3plbiBvYmplY3RzIHNob3VsZCBuZXZlciBjb250YWluIGRyYWZ0cy5cblx0aWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuXHRcdGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuXHRcdFx0Ly8gb3B0aW1pemF0aW9uOiBpZiBhbiBvYmplY3QgaXMgbm90IGEgZHJhZnQsIGFuZCB3ZSBkb24ndCBoYXZlIHRvXG5cdFx0XHQvLyBkZWVwZnJlZXplIGV2ZXJ5dGhpbmcsIGFuZCB3ZSBhcmUgc3VyZSB0aGF0IG5vIGRyYWZ0cyBhcmUgbGVmdCBpbiB0aGUgcmVtYWluaW5nIG9iamVjdFxuXHRcdFx0Ly8gY2F1c2Ugd2Ugc2F3IGFuZCBmaW5hbGl6ZWQgYWxsIGRyYWZ0cyBhbHJlYWR5OyB3ZSBjYW4gc3RvcCB2aXNpdGluZyB0aGUgcmVzdCBvZiB0aGUgdHJlZS5cblx0XHRcdC8vIFRoaXMgYmVuZWZpdHMgZXNwZWNpYWxseSBhZGRpbmcgbGFyZ2UgZGF0YSB0cmVlJ3Mgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5cdFx0XHQvLyBTZWUgYWRkLWRhdGEuanMgcGVyZiB0ZXN0XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0ZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKVxuXHRcdC8vIGltbWVyIGRlZXAgZnJlZXplcyBwbGFpbiBvYmplY3RzLCBzbyBpZiB0aGVyZSBpcyBubyBwYXJlbnQgc3RhdGUsIHdlIGZyZWV6ZSBhcyB3ZWxsXG5cdFx0aWYgKCFwYXJlbnRTdGF0ZSB8fCAhcGFyZW50U3RhdGUuc2NvcGVfLnBhcmVudF8pXG5cdFx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpXG5cdH1cbn1cblxuZnVuY3Rpb24gbWF5YmVGcmVlemUoc2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIGRlZXAgPSBmYWxzZSkge1xuXHQvLyB3ZSBuZXZlciBmcmVlemUgZm9yIGEgbm9uLXJvb3Qgc2NvcGU7IGFzIGl0IHdvdWxkIHByZXZlbnQgcHJ1bmluZyBmb3IgZHJhZnRzIGluc2lkZSB3cmFwcGluZyBvYmplY3RzXG5cdGlmICghc2NvcGUucGFyZW50XyAmJiBzY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgc2NvcGUuY2FuQXV0b0ZyZWV6ZV8pIHtcblx0XHRmcmVlemUodmFsdWUsIGRlZXApXG5cdH1cbn1cbiIsICJpbXBvcnQge1xuXHRlYWNoLFxuXHRoYXMsXG5cdGlzLFxuXHRpc0RyYWZ0YWJsZSxcblx0c2hhbGxvd0NvcHksXG5cdGxhdGVzdCxcblx0SW1tZXJCYXNlU3RhdGUsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55QXJyYXksXG5cdE9iamVjdGlzaCxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHREUkFGVF9TVEFURSxcblx0ZGllLFxuXHRjcmVhdGVQcm94eSxcblx0UHJveHlUeXBlXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmludGVyZmFjZSBQcm94eUJhc2VTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0YXNzaWduZWRfOiB7XG5cdFx0W3Byb3BlcnR5OiBzdHJpbmddOiBib29sZWFuXG5cdH1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlXygpOiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlPYmplY3RTdGF0ZSBleHRlbmRzIFByb3h5QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5Qcm94eU9iamVjdFxuXHRiYXNlXzogYW55XG5cdGNvcHlfOiBhbnlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgUHJveHlPYmplY3RTdGF0ZT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUFycmF5U3RhdGUgZXh0ZW5kcyBQcm94eUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuUHJveHlBcnJheVxuXHRiYXNlXzogQW55QXJyYXlcblx0Y29weV86IEFueUFycmF5IHwgbnVsbFxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55QXJyYXksIFByb3h5QXJyYXlTdGF0ZT5cbn1cblxudHlwZSBQcm94eVN0YXRlID0gUHJveHlPYmplY3RTdGF0ZSB8IFByb3h5QXJyYXlTdGF0ZVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgZHJhZnQgb2YgdGhlIGBiYXNlYCBvYmplY3QuXG4gKlxuICogVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IGRyYWZ0LXN0YXRlICh1c2VkIGludGVybmFsbHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHlQcm94eTxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0YmFzZTogVCxcblx0cGFyZW50PzogSW1tZXJTdGF0ZVxuKTogRHJhZnRlZDxULCBQcm94eVN0YXRlPiB7XG5cdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdGNvbnN0IHN0YXRlOiBQcm94eVN0YXRlID0ge1xuXHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLlByb3h5QXJyYXkgOiAoUHJveHlUeXBlLlByb3h5T2JqZWN0IGFzIGFueSksXG5cdFx0Ly8gVHJhY2sgd2hpY2ggcHJvZHVjZSBjYWxsIHRoaXMgaXMgYXNzb2NpYXRlZCB3aXRoLlxuXHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHQvLyBUcnVlIGZvciBib3RoIHNoYWxsb3cgYW5kIGRlZXAgY2hhbmdlcy5cblx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdC8vIFVzZWQgZHVyaW5nIGZpbmFsaXphdGlvbi5cblx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHQvLyBUcmFjayB3aGljaCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhc3NpZ25lZCAodHJ1ZSkgb3IgZGVsZXRlZCAoZmFsc2UpLlxuXHRcdGFzc2lnbmVkXzoge30sXG5cdFx0Ly8gVGhlIHBhcmVudCBkcmFmdCBzdGF0ZS5cblx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0Ly8gVGhlIGJhc2Ugc3RhdGUuXG5cdFx0YmFzZV86IGJhc2UsXG5cdFx0Ly8gVGhlIGJhc2UgcHJveHkuXG5cdFx0ZHJhZnRfOiBudWxsIGFzIGFueSwgLy8gc2V0IGJlbG93XG5cdFx0Ly8gVGhlIGJhc2UgY29weSB3aXRoIGFueSB1cGRhdGVkIHZhbHVlcy5cblx0XHRjb3B5XzogbnVsbCxcblx0XHQvLyBDYWxsZWQgYnkgdGhlIGBwcm9kdWNlYCBmdW5jdGlvbi5cblx0XHRyZXZva2VfOiBudWxsIGFzIGFueSxcblx0XHRpc01hbnVhbF86IGZhbHNlXG5cdH1cblxuXHQvLyB0aGUgdHJhcHMgbXVzdCB0YXJnZXQgc29tZXRoaW5nLCBhIGJpdCBsaWtlIHRoZSAncmVhbCcgYmFzZS5cblx0Ly8gYnV0IGFsc28sIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgZnJvbSB0aGUgdGFyZ2V0IHdoYXQgdGhlIHJlbGV2YW50IHN0YXRlIGlzXG5cdC8vICh0byBhdm9pZCBjcmVhdGluZyB0cmFwcyBwZXIgaW5zdGFuY2UgdG8gY2FwdHVyZSB0aGUgc3RhdGUgaW4gY2xvc3VyZSxcblx0Ly8gYW5kIHRvIGF2b2lkIGNyZWF0aW5nIHdlaXJkIGhpZGRlbiBwcm9wZXJ0aWVzIGFzIHdlbGwpXG5cdC8vIFNvIHRoZSB0cmljayBpcyB0byB1c2UgJ3N0YXRlJyBhcyB0aGUgYWN0dWFsICd0YXJnZXQnISAoYW5kIG1ha2Ugc3VyZSB3ZSBpbnRlcmNlcHQgZXZlcnl0aGluZylcblx0Ly8gTm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mIGFuIGFycmF5LCB3ZSBwdXQgdGhlIHN0YXRlIGluIGFuIGFycmF5IHRvIGhhdmUgYmV0dGVyIFJlZmxlY3QgZGVmYXVsdHMgb290YlxuXHRsZXQgdGFyZ2V0OiBUID0gc3RhdGUgYXMgYW55XG5cdGxldCB0cmFwczogUHJveHlIYW5kbGVyPG9iamVjdCB8IEFycmF5PGFueT4+ID0gb2JqZWN0VHJhcHNcblx0aWYgKGlzQXJyYXkpIHtcblx0XHR0YXJnZXQgPSBbc3RhdGVdIGFzIGFueVxuXHRcdHRyYXBzID0gYXJyYXlUcmFwc1xuXHR9XG5cblx0Y29uc3Qge3Jldm9rZSwgcHJveHl9ID0gUHJveHkucmV2b2NhYmxlKHRhcmdldCwgdHJhcHMpXG5cdHN0YXRlLmRyYWZ0XyA9IHByb3h5IGFzIGFueVxuXHRzdGF0ZS5yZXZva2VfID0gcmV2b2tlXG5cdHJldHVybiBwcm94eSBhcyBhbnlcbn1cblxuLyoqXG4gKiBPYmplY3QgZHJhZnRzXG4gKi9cbmV4cG9ydCBjb25zdCBvYmplY3RUcmFwczogUHJveHlIYW5kbGVyPFByb3h5U3RhdGU+ID0ge1xuXHRnZXQoc3RhdGUsIHByb3ApIHtcblx0XHRpZiAocHJvcCA9PT0gRFJBRlRfU1RBVEUpIHJldHVybiBzdGF0ZVxuXG5cdFx0Y29uc3Qgc291cmNlID0gbGF0ZXN0KHN0YXRlKVxuXHRcdGlmICghaGFzKHNvdXJjZSwgcHJvcCkpIHtcblx0XHRcdC8vIG5vbi1leGlzdGluZyBvciBub24tb3duIHByb3BlcnR5Li4uXG5cdFx0XHRyZXR1cm4gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGUsIHNvdXJjZSwgcHJvcClcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF1cblx0XHRpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVcblx0XHR9XG5cdFx0Ly8gQ2hlY2sgZm9yIGV4aXN0aW5nIGRyYWZ0IGluIG1vZGlmaWVkIHN0YXRlLlxuXHRcdC8vIEFzc2lnbmVkIHZhbHVlcyBhcmUgbmV2ZXIgZHJhZnRlZC4gVGhpcyBjYXRjaGVzIGFueSBkcmFmdHMgd2UgY3JlYXRlZCwgdG9vLlxuXHRcdGlmICh2YWx1ZSA9PT0gcGVlayhzdGF0ZS5iYXNlXywgcHJvcCkpIHtcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIChzdGF0ZS5jb3B5XyFbcHJvcCBhcyBhbnldID0gY3JlYXRlUHJveHkoXG5cdFx0XHRcdHN0YXRlLnNjb3BlXy5pbW1lcl8sXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRzdGF0ZVxuXHRcdFx0KSlcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlXG5cdH0sXG5cdGhhcyhzdGF0ZSwgcHJvcCkge1xuXHRcdHJldHVybiBwcm9wIGluIGxhdGVzdChzdGF0ZSlcblx0fSxcblx0b3duS2V5cyhzdGF0ZSkge1xuXHRcdHJldHVybiBSZWZsZWN0Lm93bktleXMobGF0ZXN0KHN0YXRlKSlcblx0fSxcblx0c2V0KFxuXHRcdHN0YXRlOiBQcm94eU9iamVjdFN0YXRlLFxuXHRcdHByb3A6IHN0cmluZyAvKiBzdHJpY3RseSBub3QsIGJ1dCBoZWxwcyBUUyAqLyxcblx0XHR2YWx1ZVxuXHQpIHtcblx0XHRjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdGlmIChkZXNjPy5zZXQpIHtcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaWYgdGhpcyB3cml0ZSBpcyBjYXB0dXJlZCBieSBhIHNldHRlciwgd2UgaGF2ZVxuXHRcdFx0Ly8gdG8gdHJpZ2dlciBpdCB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcblx0XHRcdGRlc2Muc2V0LmNhbGwoc3RhdGUuZHJhZnRfLCB2YWx1ZSlcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCBjaGVjayBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIHRvIHVuZGVmaW5lZCAod2hpY2ggaXMgYSBjaGFuZ2UpXG5cdFx0XHQvLyBmcm9tIHNldHRpbmcgYW4gZXhpc3RpbmcgcHJvcGVydHkgd2l0aCB2YWx1ZSB1bmRlZmluZWQgdG8gdW5kZWZpbmVkICh3aGljaCBpcyBub3QgYSBjaGFuZ2UpXG5cdFx0XHRjb25zdCBjdXJyZW50ID0gcGVlayhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlLCBpZiB3ZSBhc3NpZ25pbmcgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIGEgZHJhZnQsIHdlIGNhbiBpZ25vcmUgdGhlIGFzc2lnbm1lbnRcblx0XHRcdGNvbnN0IGN1cnJlbnRTdGF0ZTogUHJveHlPYmplY3RTdGF0ZSA9IGN1cnJlbnQ/LltEUkFGVF9TVEFURV1cblx0XHRcdGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLmJhc2VfID09PSB2YWx1ZSkge1xuXHRcdFx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlzKHZhbHVlLCBjdXJyZW50KSAmJiAodmFsdWUgIT09IHVuZGVmaW5lZCB8fCBoYXMoc3RhdGUuYmFzZV8sIHByb3ApKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0KHN0YXRlLmNvcHlfIVtwcm9wXSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgbmV3IHByb3BzIHdpdGggdmFsdWUgJ3VuZGVmaW5lZCdcblx0XHRcdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgfHwgcHJvcCBpbiBzdGF0ZS5jb3B5XykpIHx8XG5cdFx0XHQvLyBzcGVjaWFsIGNhc2U6IE5hTlxuXHRcdFx0KE51bWJlci5pc05hTih2YWx1ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXRlLmNvcHlfIVtwcm9wXSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IHRydWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9LFxuXHRkZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcDogc3RyaW5nKSB7XG5cdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRpZiAocGVlayhzdGF0ZS5iYXNlXywgcHJvcCkgIT09IHVuZGVmaW5lZCB8fCBwcm9wIGluIHN0YXRlLmJhc2VfKSB7XG5cdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0cHJlcGFyZUNvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYW4gb3JpZ2luYWxseSBub3QgYXNzaWduZWQgcHJvcGVydHkgd2FzIGRlbGV0ZWRcblx0XHRcdGRlbGV0ZSBzdGF0ZS5hc3NpZ25lZF9bcHJvcF1cblx0XHR9XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChzdGF0ZS5jb3B5XykgZGVsZXRlIHN0YXRlLmNvcHlfW3Byb3BdXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0Ly8gTm90ZTogV2UgbmV2ZXIgY29lcmNlIGBkZXNjLnZhbHVlYCBpbnRvIGFuIEltbWVyIGRyYWZ0LCBiZWNhdXNlIHdlIGNhbid0IG1ha2Vcblx0Ly8gdGhlIHNhbWUgZ3VhcmFudGVlIGluIEVTNSBtb2RlLlxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGUsIHByb3ApIHtcblx0XHRjb25zdCBvd25lciA9IGxhdGVzdChzdGF0ZSlcblx0XHRjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3duZXIsIHByb3ApXG5cdFx0aWYgKCFkZXNjKSByZXR1cm4gZGVzY1xuXHRcdHJldHVybiB7XG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogc3RhdGUudHlwZV8gIT09IFByb3h5VHlwZS5Qcm94eUFycmF5IHx8IHByb3AgIT09IFwibGVuZ3RoXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHR2YWx1ZTogb3duZXJbcHJvcF1cblx0XHR9XG5cdH0sXG5cdGRlZmluZVByb3BlcnR5KCkge1xuXHRcdGRpZSgxMSlcblx0fSxcblx0Z2V0UHJvdG90eXBlT2Yoc3RhdGUpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0YXRlLmJhc2VfKVxuXHR9LFxuXHRzZXRQcm90b3R5cGVPZigpIHtcblx0XHRkaWUoMTIpXG5cdH1cbn1cblxuLyoqXG4gKiBBcnJheSBkcmFmdHNcbiAqL1xuXG5jb25zdCBhcnJheVRyYXBzOiBQcm94eUhhbmRsZXI8W1Byb3h5QXJyYXlTdGF0ZV0+ID0ge31cbmVhY2gob2JqZWN0VHJhcHMsIChrZXksIGZuKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0YXJyYXlUcmFwc1trZXldID0gZnVuY3Rpb24oKSB7XG5cdFx0YXJndW1lbnRzWzBdID0gYXJndW1lbnRzWzBdWzBdXG5cdFx0cmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxufSlcbmFycmF5VHJhcHMuZGVsZXRlUHJvcGVydHkgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCkge1xuXHRpZiAoX19ERVZfXyAmJiBpc05hTihwYXJzZUludChwcm9wIGFzIGFueSkpKSBkaWUoMTMpXG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIGFycmF5VHJhcHMuc2V0IS5jYWxsKHRoaXMsIHN0YXRlLCBwcm9wLCB1bmRlZmluZWQpXG59XG5hcnJheVRyYXBzLnNldCA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wLCB2YWx1ZSkge1xuXHRpZiAoX19ERVZfXyAmJiBwcm9wICE9PSBcImxlbmd0aFwiICYmIGlzTmFOKHBhcnNlSW50KHByb3AgYXMgYW55KSkpIGRpZSgxNClcblx0cmV0dXJuIG9iamVjdFRyYXBzLnNldCEuY2FsbCh0aGlzLCBzdGF0ZVswXSwgcHJvcCwgdmFsdWUsIHN0YXRlWzBdKVxufVxuXG4vLyBBY2Nlc3MgYSBwcm9wZXJ0eSB3aXRob3V0IGNyZWF0aW5nIGFuIEltbWVyIGRyYWZ0LlxuZnVuY3Rpb24gcGVlayhkcmFmdDogRHJhZnRlZCwgcHJvcDogUHJvcGVydHlLZXkpIHtcblx0Y29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV1cblx0Y29uc3Qgc291cmNlID0gc3RhdGUgPyBsYXRlc3Qoc3RhdGUpIDogZHJhZnRcblx0cmV0dXJuIHNvdXJjZVtwcm9wXVxufVxuXG5mdW5jdGlvbiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZTogSW1tZXJTdGF0ZSwgc291cmNlOiBhbnksIHByb3A6IFByb3BlcnR5S2V5KSB7XG5cdGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcClcblx0cmV0dXJuIGRlc2Ncblx0XHQ/IGB2YWx1ZWAgaW4gZGVzY1xuXHRcdFx0PyBkZXNjLnZhbHVlXG5cdFx0XHQ6IC8vIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWwgY2FzZSwgaWYgdGhlIHByb3AgaXMgYSBnZXR0ZXIgZGVmaW5lZCBieSB0aGVcblx0XHRcdCAgLy8gcHJvdG90eXBlLCB3ZSBzaG91bGQgaW52b2tlIGl0IHdpdGggdGhlIGRyYWZ0IGFzIGNvbnRleHQhXG5cdFx0XHQgIGRlc2MuZ2V0Py5jYWxsKHN0YXRlLmRyYWZ0Xylcblx0XHQ6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yRnJvbVByb3RvKFxuXHRzb3VyY2U6IGFueSxcblx0cHJvcDogUHJvcGVydHlLZXlcbik6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG5cdC8vICdpbicgY2hlY2tzIHByb3RvIVxuXHRpZiAoIShwcm9wIGluIHNvdXJjZSkpIHJldHVybiB1bmRlZmluZWRcblx0bGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSlcblx0d2hpbGUgKHByb3RvKSB7XG5cdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3ApXG5cdFx0aWYgKGRlc2MpIHJldHVybiBkZXNjXG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pXG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NoYW5nZWQoc3RhdGU6IEltbWVyU3RhdGUpIHtcblx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRzdGF0ZS5tb2RpZmllZF8gPSB0cnVlXG5cdFx0aWYgKHN0YXRlLnBhcmVudF8pIHtcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlLnBhcmVudF8pXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQ29weShzdGF0ZToge2Jhc2VfOiBhbnk7IGNvcHlfOiBhbnl9KSB7XG5cdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRzdGF0ZS5jb3B5XyA9IHNoYWxsb3dDb3B5KHN0YXRlLmJhc2VfKVxuXHR9XG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2VXaXRoUGF0Y2hlcyxcblx0SVByb2R1Y2UsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdGlzRHJhZnRhYmxlLFxuXHRwcm9jZXNzUmVzdWx0LFxuXHRQYXRjaCxcblx0T2JqZWN0aXNoLFxuXHREUkFGVF9TVEFURSxcblx0RHJhZnQsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdGlzRHJhZnQsXG5cdGlzTWFwLFxuXHRpc1NldCxcblx0Y3JlYXRlUHJveHlQcm94eSxcblx0Z2V0UGx1Z2luLFxuXHRkaWUsXG5cdGhhc1Byb3hpZXMsXG5cdGVudGVyU2NvcGUsXG5cdHJldm9rZVNjb3BlLFxuXHRsZWF2ZVNjb3BlLFxuXHR1c2VQYXRjaGVzSW5TY29wZSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHROT1RISU5HLFxuXHRmcmVlemUsXG5cdGN1cnJlbnRcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuaW50ZXJmYWNlIFByb2R1Y2Vyc0ZucyB7XG5cdHByb2R1Y2U6IElQcm9kdWNlXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlc1xufVxuXG5leHBvcnQgY2xhc3MgSW1tZXIgaW1wbGVtZW50cyBQcm9kdWNlcnNGbnMge1xuXHR1c2VQcm94aWVzXzogYm9vbGVhbiA9IGhhc1Byb3hpZXNcblxuXHRhdXRvRnJlZXplXzogYm9vbGVhbiA9IHRydWVcblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiB7dXNlUHJveGllcz86IGJvb2xlYW47IGF1dG9GcmVlemU/OiBib29sZWFufSkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnPy51c2VQcm94aWVzID09PSBcImJvb2xlYW5cIilcblx0XHRcdHRoaXMuc2V0VXNlUHJveGllcyhjb25maWchLnVzZVByb3hpZXMpXG5cdFx0aWYgKHR5cGVvZiBjb25maWc/LmF1dG9GcmVlemUgPT09IFwiYm9vbGVhblwiKVxuXHRcdFx0dGhpcy5zZXRBdXRvRnJlZXplKGNvbmZpZyEuYXV0b0ZyZWV6ZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2Vcblx0ICogcmV0dXJuIHZhbHVlIG9mdGVuIGRlcGVuZHMgb24gdGhlIGJhc2Ugc3RhdGUpLiBUaGUgcmVjaXBlIGZ1bmN0aW9uIGlzXG5cdCAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuXHQgKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuXHQgKlxuXHQgKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3Vcblx0ICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cblx0ICpcblx0ICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG5cdCAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cblx0ICpcblx0ICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7YW55fSBiYXNlIC0gdGhlIGluaXRpYWwgc3RhdGVcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcmVjaXBlIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcblx0ICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG5cdCAqL1xuXHRwcm9kdWNlOiBJUHJvZHVjZSA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSwgcGF0Y2hMaXN0ZW5lcj86IGFueSkgPT4ge1xuXHRcdC8vIGN1cnJpZWQgaW52b2NhdGlvblxuXHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEJhc2UgPSByZWNpcGVcblx0XHRcdHJlY2lwZSA9IGJhc2VcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXNcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShcblx0XHRcdFx0dGhpczogYW55LFxuXHRcdFx0XHRiYXNlID0gZGVmYXVsdEJhc2UsXG5cdFx0XHRcdC4uLmFyZ3M6IGFueVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYucHJvZHVjZShiYXNlLCAoZHJhZnQ6IERyYWZ0ZWQpID0+IHJlY2lwZS5jYWxsKHRoaXMsIGRyYWZ0LCAuLi5hcmdzKSkgLy8gcHJldHRpZXItaWdub3JlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikgZGllKDYpXG5cdFx0aWYgKHBhdGNoTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdFx0ZGllKDcpXG5cblx0XHRsZXQgcmVzdWx0XG5cblx0XHQvLyBPbmx5IHBsYWluIG9iamVjdHMsIGFycmF5cywgYW5kIFwiaW1tZXJhYmxlIGNsYXNzZXNcIiBhcmUgZHJhZnRlZC5cblx0XHRpZiAoaXNEcmFmdGFibGUoYmFzZSkpIHtcblx0XHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdFx0Y29uc3QgcHJveHkgPSBjcmVhdGVQcm94eSh0aGlzLCBiYXNlLCB1bmRlZmluZWQpXG5cdFx0XHRsZXQgaGFzRXJyb3IgPSB0cnVlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXN1bHQgPSByZWNpcGUocHJveHkpXG5cdFx0XHRcdGhhc0Vycm9yID0gZmFsc2Vcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGZpbmFsbHkgaW5zdGVhZCBvZiBjYXRjaCArIHJldGhyb3cgYmV0dGVyIHByZXNlcnZlcyBvcmlnaW5hbCBzdGFja1xuXHRcdFx0XHRpZiAoaGFzRXJyb3IpIHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRlbHNlIGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LnRoZW4oXG5cdFx0XHRcdFx0cmVzdWx0ID0+IHtcblx0XHRcdFx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHR9IGVsc2UgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRyZXN1bHQgPSByZWNpcGUoYmFzZSlcblx0XHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gYmFzZVxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gTk9USElORykgcmVzdWx0ID0gdW5kZWZpbmVkXG5cdFx0XHRpZiAodGhpcy5hdXRvRnJlZXplXykgZnJlZXplKHJlc3VsdCwgdHJ1ZSlcblx0XHRcdGlmIChwYXRjaExpc3RlbmVyKSB7XG5cdFx0XHRcdGNvbnN0IHA6IFBhdGNoW10gPSBbXVxuXHRcdFx0XHRjb25zdCBpcDogUGF0Y2hbXSA9IFtdXG5cdFx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApXG5cdFx0XHRcdHBhdGNoTGlzdGVuZXIocCwgaXApXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0fSBlbHNlIGRpZSgyMSwgYmFzZSlcblx0fVxuXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSk6IGFueSA9PiB7XG5cdFx0Ly8gY3VycmllZCBpbnZvY2F0aW9uXG5cdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiAoc3RhdGU6IGFueSwgLi4uYXJnczogYW55W10pID0+XG5cdFx0XHRcdHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzKHN0YXRlLCAoZHJhZnQ6IGFueSkgPT4gYmFzZShkcmFmdCwgLi4uYXJncykpXG5cdFx0fVxuXG5cdFx0bGV0IHBhdGNoZXM6IFBhdGNoW10sIGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9kdWNlKGJhc2UsIHJlY2lwZSwgKHA6IFBhdGNoW10sIGlwOiBQYXRjaFtdKSA9PiB7XG5cdFx0XHRwYXRjaGVzID0gcFxuXHRcdFx0aW52ZXJzZVBhdGNoZXMgPSBpcFxuXHRcdH0pXG5cblx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50aGVuKG5leHRTdGF0ZSA9PiBbbmV4dFN0YXRlLCBwYXRjaGVzISwgaW52ZXJzZVBhdGNoZXMhXSlcblx0XHR9XG5cdFx0cmV0dXJuIFtyZXN1bHQsIHBhdGNoZXMhLCBpbnZlcnNlUGF0Y2hlcyFdXG5cdH1cblxuXHRjcmVhdGVEcmFmdDxUIGV4dGVuZHMgT2JqZWN0aXNoPihiYXNlOiBUKTogRHJhZnQ8VD4ge1xuXHRcdGlmICghaXNEcmFmdGFibGUoYmFzZSkpIGRpZSg4KVxuXHRcdGlmIChpc0RyYWZ0KGJhc2UpKSBiYXNlID0gY3VycmVudChiYXNlKVxuXHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkodGhpcywgYmFzZSwgdW5kZWZpbmVkKVxuXHRcdHByb3h5W0RSQUZUX1NUQVRFXS5pc01hbnVhbF8gPSB0cnVlXG5cdFx0bGVhdmVTY29wZShzY29wZSlcblx0XHRyZXR1cm4gcHJveHkgYXMgYW55XG5cdH1cblxuXHRmaW5pc2hEcmFmdDxEIGV4dGVuZHMgRHJhZnQ8YW55Pj4oXG5cdFx0ZHJhZnQ6IEQsXG5cdFx0cGF0Y2hMaXN0ZW5lcj86IFBhdGNoTGlzdGVuZXJcblx0KTogRCBleHRlbmRzIERyYWZ0PGluZmVyIFQ+ID8gVCA6IG5ldmVyIHtcblx0XHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0ICYmIChkcmFmdCBhcyBhbnkpW0RSQUZUX1NUQVRFXVxuXHRcdGlmIChfX0RFVl9fKSB7XG5cdFx0XHRpZiAoIXN0YXRlIHx8ICFzdGF0ZS5pc01hbnVhbF8pIGRpZSg5KVxuXHRcdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8pIGRpZSgxMClcblx0XHR9XG5cdFx0Y29uc3Qge3Njb3BlXzogc2NvcGV9ID0gc3RhdGVcblx0XHR1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcilcblx0XHRyZXR1cm4gcHJvY2Vzc1Jlc3VsdCh1bmRlZmluZWQsIHNjb3BlKVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG5cdCAqXG5cdCAqIEJ5IGRlZmF1bHQsIGF1dG8tZnJlZXppbmcgaXMgZW5hYmxlZC5cblx0ICovXG5cdHNldEF1dG9GcmVlemUodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmF1dG9GcmVlemVfID0gdmFsdWVcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcblx0ICogYWx3YXlzIGZhc3RlciB0aGFuIHVzaW5nIEVTNSBwcm94aWVzLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cblx0ICovXG5cdHNldFVzZVByb3hpZXModmFsdWU6IGJvb2xlYW4pIHtcblx0XHRpZiAodmFsdWUgJiYgIWhhc1Byb3hpZXMpIHtcblx0XHRcdGRpZSgyMClcblx0XHR9XG5cdFx0dGhpcy51c2VQcm94aWVzXyA9IHZhbHVlXG5cdH1cblxuXHRhcHBseVBhdGNoZXM8VCBleHRlbmRzIE9iamVjdGlzaD4oYmFzZTogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFQge1xuXHRcdC8vIElmIGEgcGF0Y2ggcmVwbGFjZXMgdGhlIGVudGlyZSBzdGF0ZSwgdGFrZSB0aGF0IHJlcGxhY2VtZW50IGFzIGJhc2Vcblx0XHQvLyBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlc1xuXHRcdGxldCBpOiBudW1iZXJcblx0XHRmb3IgKGkgPSBwYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBwYXRjaCA9IHBhdGNoZXNbaV1cblx0XHRcdGlmIChwYXRjaC5wYXRoLmxlbmd0aCA9PT0gMCAmJiBwYXRjaC5vcCA9PT0gXCJyZXBsYWNlXCIpIHtcblx0XHRcdFx0YmFzZSA9IHBhdGNoLnZhbHVlXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlIHdhcyBhIHBhdGNoIHRoYXQgcmVwbGFjZWQgdGhlIGVudGlyZSBzdGF0ZSwgc3RhcnQgZnJvbSB0aGVcblx0XHQvLyBwYXRjaCBhZnRlciB0aGF0LlxuXHRcdGlmIChpID4gLTEpIHtcblx0XHRcdHBhdGNoZXMgPSBwYXRjaGVzLnNsaWNlKGkgKyAxKVxuXHRcdH1cblxuXHRcdGNvbnN0IGFwcGx5UGF0Y2hlc0ltcGwgPSBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmFwcGx5UGF0Y2hlc19cblx0XHRpZiAoaXNEcmFmdChiYXNlKSkge1xuXHRcdFx0Ly8gTi5COiBuZXZlciBoaXRzIGlmIHNvbWUgcGF0Y2ggYSByZXBsYWNlbWVudCwgcGF0Y2hlcyBhcmUgbmV2ZXIgZHJhZnRzXG5cdFx0XHRyZXR1cm4gYXBwbHlQYXRjaGVzSW1wbChiYXNlLCBwYXRjaGVzKVxuXHRcdH1cblx0XHQvLyBPdGhlcndpc2UsIHByb2R1Y2UgYSBjb3B5IG9mIHRoZSBiYXNlIHN0YXRlLlxuXHRcdHJldHVybiB0aGlzLnByb2R1Y2UoYmFzZSwgKGRyYWZ0OiBEcmFmdGVkKSA9PlxuXHRcdFx0YXBwbHlQYXRjaGVzSW1wbChkcmFmdCwgcGF0Y2hlcylcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5PFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRpbW1lcjogSW1tZXIsXG5cdHZhbHVlOiBULFxuXHRwYXJlbnQ/OiBJbW1lclN0YXRlXG4pOiBEcmFmdGVkPFQsIEltbWVyU3RhdGU+IHtcblx0Ly8gcHJlY29uZGl0aW9uOiBjcmVhdGVQcm94eSBzaG91bGQgYmUgZ3VhcmRlZCBieSBpc0RyYWZ0YWJsZSwgc28gd2Uga25vdyB3ZSBjYW4gc2FmZWx5IGRyYWZ0XG5cdGNvbnN0IGRyYWZ0OiBEcmFmdGVkID0gaXNNYXAodmFsdWUpXG5cdFx0PyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlNYXBfKHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBpc1NldCh2YWx1ZSlcblx0XHQ/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eVNldF8odmFsdWUsIHBhcmVudClcblx0XHQ6IGltbWVyLnVzZVByb3hpZXNfXG5cdFx0PyBjcmVhdGVQcm94eVByb3h5KHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBnZXRQbHVnaW4oXCJFUzVcIikuY3JlYXRlRVM1UHJveHlfKHZhbHVlLCBwYXJlbnQpXG5cblx0Y29uc3Qgc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKClcblx0c2NvcGUuZHJhZnRzXy5wdXNoKGRyYWZ0KVxuXHRyZXR1cm4gZHJhZnRcbn1cbiIsICJpbXBvcnQge1xuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdHNoYWxsb3dDb3B5LFxuXHRlYWNoLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0LFxuXHRzZXQsXG5cdEltbWVyU3RhdGUsXG5cdGlzRHJhZnRhYmxlLFxuXHRBcmNodHlwZSxcblx0Z2V0QXJjaHR5cGUsXG5cdGdldFBsdWdpblxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGRyYWZ0IGFuZCBmaW5hbGl6ZXMgaXQgKGJ1dCB3aXRob3V0IGZyZWV6aW5nKS4gVGhpcyBpcyBhIGdyZWF0IHV0aWxpdHkgdG8gcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUgZHVyaW5nIGRlYnVnZ2luZyAobm8gUHJveGllcyBpbiB0aGUgd2F5KS4gVGhlIG91dHB1dCBvZiBjdXJyZW50IGNhbiBhbHNvIGJlIHNhZmVseSBsZWFrZWQgb3V0c2lkZSB0aGUgcHJvZHVjZXIuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudDxUPih2YWx1ZTogVCk6IFRcbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50KHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjIsIHZhbHVlKVxuXHRyZXR1cm4gY3VycmVudEltcGwodmFsdWUpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRJbXBsKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnRhYmxlKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlIHwgdW5kZWZpbmVkID0gdmFsdWVbRFJBRlRfU1RBVEVdXG5cdGxldCBjb3B5OiBhbnlcblx0Y29uc3QgYXJjaFR5cGUgPSBnZXRBcmNodHlwZSh2YWx1ZSlcblx0aWYgKHN0YXRlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IXN0YXRlLm1vZGlmaWVkXyAmJlxuXHRcdFx0KHN0YXRlLnR5cGVfIDwgNCB8fCAhZ2V0UGx1Z2luKFwiRVM1XCIpLmhhc0NoYW5nZXNfKHN0YXRlIGFzIGFueSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdFx0Ly8gT3B0aW1pemF0aW9uOiBhdm9pZCBnZW5lcmF0aW5nIG5ldyBkcmFmdHMgZHVyaW5nIGNvcHlpbmdcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZVxuXHRcdGNvcHkgPSBjb3B5SGVscGVyKHZhbHVlLCBhcmNoVHlwZSlcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gZmFsc2Vcblx0fSBlbHNlIHtcblx0XHRjb3B5ID0gY29weUhlbHBlcih2YWx1ZSwgYXJjaFR5cGUpXG5cdH1cblxuXHRlYWNoKGNvcHksIChrZXksIGNoaWxkVmFsdWUpID0+IHtcblx0XHRpZiAoc3RhdGUgJiYgZ2V0KHN0YXRlLmJhc2VfLCBrZXkpID09PSBjaGlsZFZhbHVlKSByZXR1cm4gLy8gbm8gbmVlZCB0byBjb3B5IG9yIHNlYXJjaCBpbiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QgY2hhbmdlXG5cdFx0c2V0KGNvcHksIGtleSwgY3VycmVudEltcGwoY2hpbGRWYWx1ZSkpXG5cdH0pXG5cdC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGNvbnNpZGVyIGZyZWV6aW5nIGhlcmUsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNldHRpbmdzXG5cdHJldHVybiBhcmNoVHlwZSA9PT0gQXJjaHR5cGUuU2V0ID8gbmV3IFNldChjb3B5KSA6IGNvcHlcbn1cblxuZnVuY3Rpb24gY29weUhlbHBlcih2YWx1ZTogYW55LCBhcmNoVHlwZTogbnVtYmVyKTogYW55IHtcblx0Ly8gY3JlYXRlcyBhIHNoYWxsb3cgY29weSwgZXZlbiBpZiBpdCBpcyBhIG1hcCBvciBzZXRcblx0c3dpdGNoIChhcmNoVHlwZSkge1xuXHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0cmV0dXJuIG5ldyBNYXAodmFsdWUpXG5cdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHQvLyBTZXQgd2lsbCBiZSBjbG9uZWQgYXMgYXJyYXkgdGVtcG9yYXJpbHksIHNvIHRoYXQgd2UgY2FuIHJlcGxhY2UgaW5kaXZpZHVhbCBpdGVtc1xuXHRcdFx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpXG5cdH1cblx0cmV0dXJuIHNoYWxsb3dDb3B5KHZhbHVlKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEVTNUFycmF5U3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRlYWNoLFxuXHRoYXMsXG5cdGlzRHJhZnQsXG5cdGxhdGVzdCxcblx0RFJBRlRfU1RBVEUsXG5cdGlzLFxuXHRsb2FkUGx1Z2luLFxuXHRJbW1lclNjb3BlLFxuXHRQcm94eVR5cGUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0ZGllLFxuXHRtYXJrQ2hhbmdlZCxcblx0b2JqZWN0VHJhcHMsXG5cdG93bktleXMsXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcnNcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxudHlwZSBFUzVTdGF0ZSA9IEVTNUFycmF5U3RhdGUgfCBFUzVPYmplY3RTdGF0ZVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRVM1KCkge1xuXHRmdW5jdGlvbiB3aWxsRmluYWxpemVFUzVfKFxuXHRcdHNjb3BlOiBJbW1lclNjb3BlLFxuXHRcdHJlc3VsdDogYW55LFxuXHRcdGlzUmVwbGFjZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0aWYgKCFpc1JlcGxhY2VkKSB7XG5cdFx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdFx0bWFya0NoYW5nZXNSZWN1cnNpdmVseShzY29wZS5kcmFmdHNfIVswXSlcblx0XHRcdH1cblx0XHRcdC8vIFRoaXMgaXMgZmFzdGVyIHdoZW4gd2UgZG9uJ3QgY2FyZSBhYm91dCB3aGljaCBhdHRyaWJ1dGVzIGNoYW5nZWQuXG5cdFx0XHRtYXJrQ2hhbmdlc1N3ZWVwKHNjb3BlLmRyYWZ0c18pXG5cdFx0fVxuXHRcdC8vIFdoZW4gYSBjaGlsZCBkcmFmdCBpcyByZXR1cm5lZCwgbG9vayBmb3IgY2hhbmdlcy5cblx0XHRlbHNlIGlmIChcblx0XHRcdGlzRHJhZnQocmVzdWx0KSAmJlxuXHRcdFx0KHJlc3VsdFtEUkFGVF9TVEFURV0gYXMgRVM1U3RhdGUpLnNjb3BlXyA9PT0gc2NvcGVcblx0XHQpIHtcblx0XHRcdG1hcmtDaGFuZ2VzU3dlZXAoc2NvcGUuZHJhZnRzXylcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVFUzVEcmFmdChpc0FycmF5OiBib29sZWFuLCBiYXNlOiBhbnkpIHtcblx0XHRpZiAoaXNBcnJheSkge1xuXHRcdFx0Y29uc3QgZHJhZnQgPSBuZXcgQXJyYXkoYmFzZS5sZW5ndGgpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2UubGVuZ3RoOyBpKyspXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcmFmdCwgXCJcIiArIGksIHByb3h5UHJvcGVydHkoaSwgdHJ1ZSkpXG5cdFx0XHRyZXR1cm4gZHJhZnRcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdFx0XHRkZWxldGUgZGVzY3JpcHRvcnNbRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRcdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZGVzY3JpcHRvcnMpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSBwcm94eVByb3BlcnR5KFxuXHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRpc0FycmF5IHx8ICEhZGVzY3JpcHRvcnNba2V5XS5lbnVtZXJhYmxlXG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlKSwgZGVzY3JpcHRvcnMpXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdGJhc2U6IFQsXG5cdFx0cGFyZW50PzogSW1tZXJTdGF0ZVxuXHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVFUzVEcmFmdChpc0FycmF5LCBiYXNlKVxuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZSA9IHtcblx0XHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLkVTNUFycmF5IDogKFByb3h5VHlwZS5FUzVPYmplY3QgYXMgYW55KSxcblx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuXHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdFx0YXNzaWduZWRfOiB7fSxcblx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdC8vIGJhc2UgaXMgdGhlIG9iamVjdCB3ZSBhcmUgZHJhZnRpbmdcblx0XHRcdGJhc2VfOiBiYXNlLFxuXHRcdFx0Ly8gZHJhZnQgaXMgdGhlIGRyYWZ0IG9iamVjdCBpdHNlbGYsIHRoYXQgdHJhcHMgYWxsIHJlYWRzIGFuZCByZWFkcyBmcm9tIGVpdGhlciB0aGUgYmFzZSAoaWYgdW5tb2RpZmllZCkgb3IgY29weSAoaWYgbW9kaWZpZWQpXG5cdFx0XHRkcmFmdF86IGRyYWZ0LFxuXHRcdFx0Y29weV86IG51bGwsXG5cdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRpc01hbnVhbF86IGZhbHNlXG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRyYWZ0LCBEUkFGVF9TVEFURSwge1xuXHRcdFx0dmFsdWU6IHN0YXRlLFxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UgPC0gdGhlIGRlZmF1bHRcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSlcblx0XHRyZXR1cm4gZHJhZnRcblx0fVxuXG5cdC8vIHByb3BlcnR5IGRlc2NyaXB0b3JzIGFyZSByZWN5Y2xlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY3JlYXRlIGEgZ2V0IGFuZCBzZXQgY2xvc3VyZSBwZXIgcHJvcGVydHksXG5cdC8vIGJ1dCBzaGFyZSB0aGVtIGFsbCBpbnN0ZWFkXG5cdGNvbnN0IGRlc2NyaXB0b3JzOiB7W3Byb3A6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcn0gPSB7fVxuXG5cdGZ1bmN0aW9uIHByb3h5UHJvcGVydHkoXG5cdFx0cHJvcDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGVudW1lcmFibGU6IGJvb2xlYW5cblx0KTogUHJvcGVydHlEZXNjcmlwdG9yIHtcblx0XHRsZXQgZGVzYyA9IGRlc2NyaXB0b3JzW3Byb3BdXG5cdFx0aWYgKGRlc2MpIHtcblx0XHRcdGRlc2MuZW51bWVyYWJsZSA9IGVudW1lcmFibGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvcnNbcHJvcF0gPSBkZXNjID0ge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGUsXG5cdFx0XHRcdGdldCh0aGlzOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmV0dXJuIG9iamVjdFRyYXBzLmdldChzdGF0ZSwgcHJvcClcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHRoaXM6IGFueSwgdmFsdWUpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b2JqZWN0VHJhcHMuc2V0KHN0YXRlLCBwcm9wLCB2YWx1ZSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVzY1xuXHR9XG5cblx0Ly8gVGhpcyBsb29rcyBleHBlbnNpdmUsIGJ1dCBvbmx5IHByb3hpZXMgYXJlIHZpc2l0ZWQsIGFuZCBvbmx5IG9iamVjdHMgd2l0aG91dCBrbm93biBjaGFuZ2VzIGFyZSBzY2FubmVkLlxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1N3ZWVwKGRyYWZ0czogRHJhZnRlZDxhbnksIEltbWVyU3RhdGU+W10pIHtcblx0XHQvLyBUaGUgbmF0dXJhbCBvcmRlciBvZiBkcmFmdHMgaW4gdGhlIGBzY29wZWAgYXJyYXkgaXMgYmFzZWQgb24gd2hlbiB0aGV5XG5cdFx0Ly8gd2VyZSBhY2Nlc3NlZC4gQnkgcHJvY2Vzc2luZyBkcmFmdHMgaW4gcmV2ZXJzZSBuYXR1cmFsIG9yZGVyLCB3ZSBoYXZlIGFcblx0XHQvLyBiZXR0ZXIgY2hhbmNlIG9mIHByb2Nlc3NpbmcgbGVhZiBub2RlcyBmaXJzdC4gV2hlbiBhIGxlYWYgbm9kZSBpcyBrbm93biB0b1xuXHRcdC8vIGhhdmUgY2hhbmdlZCwgd2UgY2FuIGF2b2lkIGFueSB0cmF2ZXJzYWwgb2YgaXRzIGFuY2VzdG9yIG5vZGVzLlxuXHRcdGZvciAobGV0IGkgPSBkcmFmdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBFUzVTdGF0ZSA9IGRyYWZ0c1tpXVtEUkFGVF9TVEFURV1cblx0XHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHRcdHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcblx0XHRcdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdFx0XHRcdGlmIChoYXNBcnJheUNoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1T2JqZWN0OlxuXHRcdFx0XHRcdFx0aWYgKGhhc09iamVjdENoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KG9iamVjdDogYW55KSB7XG5cdFx0aWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNVN0YXRlIHwgdW5kZWZpbmVkID0gb2JqZWN0W0RSQUZUX1NUQVRFXVxuXHRcdGlmICghc3RhdGUpIHJldHVyblxuXHRcdGNvbnN0IHtiYXNlXywgZHJhZnRfLCBhc3NpZ25lZF8sIHR5cGVffSA9IHN0YXRlXG5cdFx0aWYgKHR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0KSB7XG5cdFx0XHQvLyBMb29rIGZvciBhZGRlZCBrZXlzLlxuXHRcdFx0Ly8gcHJvYmFibHkgdGhlcmUgaXMgYSBmYXN0ZXIgd2F5IHRvIGRldGVjdCBjaGFuZ2VzLCBhcyBzd2VlcCArIHJlY3Vyc2Ugc2VlbXMgdG8gZG8gc29tZVxuXHRcdFx0Ly8gdW5uZWNlc3Nhcnkgd29yay5cblx0XHRcdC8vIGFsc286IHByb2JhYmx5IHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24gd2UgZGV0ZWN0IGhlcmUsIHRvIHNwZWVkIHVwIHRyZWUgZmluYWxpemF0aW9uIVxuXHRcdFx0ZWFjaChkcmFmdF8sIGtleSA9PiB7XG5cdFx0XHRcdGlmICgoa2V5IGFzIGFueSkgPT09IERSQUZUX1NUQVRFKSByZXR1cm5cblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKChiYXNlXyBhcyBhbnkpW2tleV0gPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2tleV0gPSB0cnVlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFzc2lnbmVkX1trZXldKSB7XG5cdFx0XHRcdFx0Ly8gT25seSB1bnRvdWNoZWQgcHJvcGVydGllcyB0cmlnZ2VyIHJlY3Vyc2lvbi5cblx0XHRcdFx0XHRtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KGRyYWZ0X1trZXldKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Ly8gTG9vayBmb3IgcmVtb3ZlZCBrZXlzLlxuXHRcdFx0ZWFjaChiYXNlXywga2V5ID0+IHtcblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKGRyYWZ0X1trZXldID09PSB1bmRlZmluZWQgJiYgIWhhcyhkcmFmdF8sIGtleSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9ba2V5XSA9IGZhbHNlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSBlbHNlIGlmICh0eXBlXyA9PT0gUHJveHlUeXBlLkVTNUFycmF5KSB7XG5cdFx0XHRpZiAoaGFzQXJyYXlDaGFuZ2VzKHN0YXRlIGFzIEVTNUFycmF5U3RhdGUpKSB7XG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRhc3NpZ25lZF8ubGVuZ3RoID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZHJhZnRfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gZHJhZnRfLmxlbmd0aDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSBhc3NpZ25lZF9baV0gPSBmYWxzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGRyYWZ0Xy5sZW5ndGg7IGkrKykgYXNzaWduZWRfW2ldID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBNaW5pbXVtIGNvdW50IGlzIGVub3VnaCwgdGhlIG90aGVyIHBhcnRzIGhhcyBiZWVuIHByb2Nlc3NlZC5cblx0XHRcdGNvbnN0IG1pbiA9IE1hdGgubWluKGRyYWZ0Xy5sZW5ndGgsIGJhc2VfLmxlbmd0aClcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuXHRcdFx0XHQvLyBPbmx5IHVudG91Y2hlZCBpbmRpY2VzIHRyaWdnZXIgcmVjdXJzaW9uLlxuXHRcdFx0XHRpZiAoIWRyYWZ0Xy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1tpXSA9IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYXNzaWduZWRfW2ldID09PSB1bmRlZmluZWQpIG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoZHJhZnRfW2ldKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGhhc09iamVjdENoYW5nZXMoc3RhdGU6IEVTNU9iamVjdFN0YXRlKSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBkcmFmdF99ID0gc3RhdGVcblxuXHRcdC8vIFNlYXJjaCBmb3IgYWRkZWQga2V5cyBhbmQgY2hhbmdlZCBrZXlzLiBTdGFydCBhdCB0aGUgYmFjaywgYmVjYXVzZVxuXHRcdC8vIG5vbi1udW1lcmljIGtleXMgYXJlIG9yZGVyZWQgYnkgdGltZSBvZiBkZWZpbml0aW9uIG9uIHRoZSBvYmplY3QuXG5cdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZHJhZnRfKVxuXHRcdGZvciAobGV0IGkgPSBrZXlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBrZXk6IGFueSA9IGtleXNbaV1cblx0XHRcdGlmIChrZXkgPT09IERSQUZUX1NUQVRFKSBjb250aW51ZVxuXHRcdFx0Y29uc3QgYmFzZVZhbHVlID0gYmFzZV9ba2V5XVxuXHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdGlmIChiYXNlVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHQvLyBPbmNlIGEgYmFzZSBrZXkgaXMgZGVsZXRlZCwgZnV0dXJlIGNoYW5nZXMgZ28gdW5kZXRlY3RlZCwgYmVjYXVzZSBpdHNcblx0XHRcdC8vIGRlc2NyaXB0b3IgaXMgZXJhc2VkLiBUaGlzIGJyYW5jaCBkZXRlY3RzIGFueSBtaXNzZWQgY2hhbmdlcy5cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGRyYWZ0X1trZXldXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gdmFsdWUgJiYgdmFsdWVbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdGlmIChzdGF0ZSA/IHN0YXRlLmJhc2VfICE9PSBiYXNlVmFsdWUgOiAhaXModmFsdWUsIGJhc2VWYWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgbm8ga2V5cyB3ZXJlIGFkZGVkIG9yIGNoYW5nZWQuXG5cdFx0Ly8gQ29tcGFyZSBrZXkgY291bnQgdG8gZGV0ZXJtaW5lIGlmIGtleXMgd2VyZSBkZWxldGVkLlxuXHRcdGNvbnN0IGJhc2VJc0RyYWZ0ID0gISFiYXNlX1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdFx0cmV0dXJuIGtleXMubGVuZ3RoICE9PSBvd25LZXlzKGJhc2VfKS5sZW5ndGggKyAoYmFzZUlzRHJhZnQgPyAwIDogMSkgLy8gKyAxIHRvIGNvcnJlY3QgZm9yIERSQUZUX1NUQVRFXG5cdH1cblxuXHRmdW5jdGlvbiBoYXNBcnJheUNoYW5nZXMoc3RhdGU6IEVTNUFycmF5U3RhdGUpIHtcblx0XHRjb25zdCB7ZHJhZnRffSA9IHN0YXRlXG5cdFx0aWYgKGRyYWZ0Xy5sZW5ndGggIT09IHN0YXRlLmJhc2VfLmxlbmd0aCkgcmV0dXJuIHRydWVcblx0XHQvLyBTZWUgIzExNlxuXHRcdC8vIElmIHdlIGZpcnN0IHNob3J0ZW4gdGhlIGxlbmd0aCwgb3VyIGFycmF5IGludGVyY2VwdG9ycyB3aWxsIGJlIHJlbW92ZWQuXG5cdFx0Ly8gSWYgYWZ0ZXIgdGhhdCBuZXcgaXRlbXMgYXJlIGFkZGVkLCByZXN1bHQgaW4gdGhlIHNhbWUgb3JpZ2luYWwgbGVuZ3RoLFxuXHRcdC8vIHRob3NlIGxhc3QgaXRlbXMgd2lsbCBoYXZlIG5vIGludGVyY2VwdGluZyBwcm9wZXJ0eS5cblx0XHQvLyBTbyBpZiB0aGVyZSBpcyBubyBvd24gZGVzY3JpcHRvciBvbiB0aGUgbGFzdCBwb3NpdGlvbiwgd2Uga25vdyB0aGF0IGl0ZW1zIHdlcmUgcmVtb3ZlZCBhbmQgYWRkZWRcblx0XHQvLyBOLkIuOiBzcGxpY2UsIHVuc2hpZnQsIGV0YyBvbmx5IHNoaWZ0IHZhbHVlcyBhcm91bmQsIGJ1dCBub3QgcHJvcCBkZXNjcmlwdG9ycywgc28gd2Ugb25seSBoYXZlIHRvIGNoZWNrXG5cdFx0Ly8gdGhlIGxhc3Qgb25lXG5cdFx0Ly8gbGFzdCBkZXNjcmlwdG9yIGNhbiBiZSBub3QgYSB0cmFwLCBpZiB0aGUgYXJyYXkgd2FzIGV4dGVuZGVkXG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRkcmFmdF8sXG5cdFx0XHRkcmFmdF8ubGVuZ3RoIC0gMVxuXHRcdClcblx0XHQvLyBkZXNjcmlwdG9yIGNhbiBiZSBudWxsLCBidXQgb25seSBmb3IgbmV3bHkgY3JlYXRlZCBzcGFyc2UgYXJyYXlzLCBlZy4gbmV3IEFycmF5KDEwKVxuXHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmdldCkgcmV0dXJuIHRydWVcblx0XHQvLyBpZiB3ZSBtaXNzIGEgcHJvcGVydHksIGl0IGhhcyBiZWVuIGRlbGV0ZWQsIHNvIGFycmF5IHByb2JvYmFseSBjaGFuZ2VkXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkcmFmdF8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICghZHJhZnRfLmhhc093blByb3BlcnR5KGkpKSByZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCB3ZSBkb24ndCBoYXZlIHRvIGNvbXBhcmUsIGFzIHRoZXkgd291bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBieSB0aGUgaW5kZXggc2V0dGVyc1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQ2hhbmdlc18oc3RhdGU6IEVTNVN0YXRlKSB7XG5cdFx0cmV0dXJuIHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdFx0XHQ/IGhhc09iamVjdENoYW5nZXMoc3RhdGUpXG5cdFx0XHQ6IGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSlcblx0fVxuXG5cdGZ1bmN0aW9uIGFzc2VydFVucmV2b2tlZChzdGF0ZTogYW55IC8qRVM1U3RhdGUgfCBNYXBTdGF0ZSB8IFNldFN0YXRlKi8pIHtcblx0XHRpZiAoc3RhdGUucmV2b2tlZF8pIGRpZSgzLCBKU09OLnN0cmluZ2lmeShsYXRlc3Qoc3RhdGUpKSlcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJFUzVcIiwge1xuXHRcdGNyZWF0ZUVTNVByb3h5Xyxcblx0XHR3aWxsRmluYWxpemVFUzVfLFxuXHRcdGhhc0NoYW5nZXNfXG5cdH0pXG59XG4iLCAiaW1wb3J0IHtpbW1lcmFibGV9IGZyb20gXCIuLi9pbW1lclwiXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRQYXRjaCxcblx0U2V0U3RhdGUsXG5cdEVTNUFycmF5U3RhdGUsXG5cdFByb3h5QXJyYXlTdGF0ZSxcblx0TWFwU3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRQcm94eU9iamVjdFN0YXRlLFxuXHRQYXRjaFBhdGgsXG5cdGdldCxcblx0ZWFjaCxcblx0aGFzLFxuXHRnZXRBcmNodHlwZSxcblx0aXNTZXQsXG5cdGlzTWFwLFxuXHRsb2FkUGx1Z2luLFxuXHRQcm94eVR5cGUsXG5cdEFyY2h0eXBlLFxuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVQYXRjaGVzKCkge1xuXHRjb25zdCBSRVBMQUNFID0gXCJyZXBsYWNlXCJcblx0Y29uc3QgQUREID0gXCJhZGRcIlxuXHRjb25zdCBSRU1PVkUgPSBcInJlbW92ZVwiXG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzXyhcblx0XHRzdGF0ZTogSW1tZXJTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0c3dpdGNoIChzdGF0ZS50eXBlXykge1xuXHRcdFx0Y2FzZSBQcm94eVR5cGUuUHJveHlPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5NYXA6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoXG5cdFx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRcdFx0cGF0Y2hlcyxcblx0XHRcdFx0XHRpbnZlcnNlUGF0Y2hlc1xuXHRcdFx0XHQpXG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdGNhc2UgUHJveHlUeXBlLlByb3h5QXJyYXk6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKVxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuU2V0OlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdFx0XHRcdChzdGF0ZSBhcyBhbnkpIGFzIFNldFN0YXRlLFxuXHRcdFx0XHRcdGJhc2VQYXRoLFxuXHRcdFx0XHRcdHBhdGNoZXMsXG5cdFx0XHRcdFx0aW52ZXJzZVBhdGNoZXNcblx0XHRcdFx0KVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlQYXRjaGVzKFxuXHRcdHN0YXRlOiBFUzVBcnJheVN0YXRlIHwgUHJveHlBcnJheVN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpIHtcblx0XHRsZXQge2Jhc2VfLCBhc3NpZ25lZF99ID0gc3RhdGVcblx0XHRsZXQgY29weV8gPSBzdGF0ZS5jb3B5XyFcblxuXHRcdC8vIFJlZHVjZSBjb21wbGV4aXR5IGJ5IGVuc3VyaW5nIGBiYXNlYCBpcyBuZXZlciBsb25nZXIuXG5cdFx0aWYgKGNvcHlfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0O1tiYXNlXywgY29weV9dID0gW2NvcHlfLCBiYXNlX11cblx0XHRcdDtbcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdID0gW2ludmVyc2VQYXRjaGVzLCBwYXRjaGVzXVxuXHRcdH1cblxuXHRcdC8vIFByb2Nlc3MgcmVwbGFjZWQgaW5kaWNlcy5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXNzaWduZWRfW2ldICYmIGNvcHlfW2ldICE9PSBiYXNlX1tpXSkge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuXHRcdFx0XHRcdC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuXHRcdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdFx0fSlcblx0XHRcdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoYmFzZV9baV0pXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvY2VzcyBhZGRlZCBpbmRpY2VzLlxuXHRcdGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBjb3B5Xy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHQvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcblx0XHRcdFx0Ly8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG5cdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdH0pXG5cdFx0fVxuXHRcdGlmIChiYXNlXy5sZW5ndGggPCBjb3B5Xy5sZW5ndGgpIHtcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0cGF0aDogYmFzZVBhdGguY29uY2F0KFtcImxlbmd0aFwiXSksXG5cdFx0XHRcdHZhbHVlOiBiYXNlXy5sZW5ndGhcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBpcyB1c2VkIGZvciBib3RoIE1hcCBvYmplY3RzIGFuZCBub3JtYWwgb2JqZWN0cy5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuXHRcdHN0YXRlOiBNYXBTdGF0ZSB8IEVTNU9iamVjdFN0YXRlIHwgUHJveHlPYmplY3RTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBjb3B5X30gPSBzdGF0ZVxuXHRcdGVhY2goc3RhdGUuYXNzaWduZWRfISwgKGtleSwgYXNzaWduZWRWYWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ1ZhbHVlID0gZ2V0KGJhc2VfLCBrZXkpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldChjb3B5XyEsIGtleSlcblx0XHRcdGNvbnN0IG9wID0gIWFzc2lnbmVkVmFsdWUgPyBSRU1PVkUgOiBoYXMoYmFzZV8sIGtleSkgPyBSRVBMQUNFIDogQUREXG5cdFx0XHRpZiAob3JpZ1ZhbHVlID09PSB2YWx1ZSAmJiBvcCA9PT0gUkVQTEFDRSkgcmV0dXJuXG5cdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KGtleSBhcyBhbnkpXG5cdFx0XHRwYXRjaGVzLnB1c2gob3AgPT09IFJFTU9WRSA/IHtvcCwgcGF0aH0gOiB7b3AsIHBhdGgsIHZhbHVlfSlcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goXG5cdFx0XHRcdG9wID09PSBBRERcblx0XHRcdFx0XHQ/IHtvcDogUkVNT1ZFLCBwYXRofVxuXHRcdFx0XHRcdDogb3AgPT09IFJFTU9WRVxuXHRcdFx0XHRcdD8ge29wOiBBREQsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpfVxuXHRcdFx0XHRcdDoge29wOiBSRVBMQUNFLCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKX1cblx0XHRcdClcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdHN0YXRlOiBTZXRTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0bGV0IHtiYXNlXywgY29weV99ID0gc3RhdGVcblxuXHRcdGxldCBpID0gMFxuXHRcdGJhc2VfLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdGlmICghY29weV8hLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFTU9WRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0XHRpID0gMFxuXHRcdGNvcHlfIS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWJhc2VfLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBSRU1PVkUsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRiYXNlVmFsdWU6IGFueSxcblx0XHRyZXBsYWNlbWVudDogYW55LFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0cGF0aDogW10sXG5cdFx0XHR2YWx1ZTogcmVwbGFjZW1lbnQgPT09IE5PVEhJTkcgPyB1bmRlZmluZWQgOiByZXBsYWNlbWVudFxuXHRcdH0pXG5cdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdHBhdGg6IFtdLFxuXHRcdFx0dmFsdWU6IGJhc2VWYWx1ZVxuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseVBhdGNoZXNfPFQ+KGRyYWZ0OiBULCBwYXRjaGVzOiBQYXRjaFtdKTogVCB7XG5cdFx0cGF0Y2hlcy5mb3JFYWNoKHBhdGNoID0+IHtcblx0XHRcdGNvbnN0IHtwYXRoLCBvcH0gPSBwYXRjaFxuXG5cdFx0XHRsZXQgYmFzZTogYW55ID0gZHJhZnRcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpXG5cdFx0XHRcdGxldCBwID0gcGF0aFtpXVxuXHRcdFx0XHRpZiAodHlwZW9mIHAgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHAgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRwID0gXCJcIiArIHBcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNlZSAjNzM4LCBhdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocGFyZW50VHlwZSA9PT0gQXJjaHR5cGUuT2JqZWN0IHx8IHBhcmVudFR5cGUgPT09IEFyY2h0eXBlLkFycmF5KSAmJlxuXHRcdFx0XHRcdChwID09PSBcIl9fcHJvdG9fX1wiIHx8IHAgPT09IFwiY29uc3RydWN0b3JcIilcblx0XHRcdFx0KVxuXHRcdFx0XHRcdGRpZSgyNClcblx0XHRcdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgcCA9PT0gXCJwcm90b3R5cGVcIikgZGllKDI0KVxuXHRcdFx0XHRiYXNlID0gZ2V0KGJhc2UsIHApXG5cdFx0XHRcdGlmICh0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIikgZGllKDE1LCBwYXRoLmpvaW4oXCIvXCIpKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlID0gZ2V0QXJjaHR5cGUoYmFzZSlcblx0XHRcdGNvbnN0IHZhbHVlID0gZGVlcENsb25lUGF0Y2hWYWx1ZShwYXRjaC52YWx1ZSkgLy8gdXNlZCB0byBjbG9uZSBwYXRjaCB0byBlbnN1cmUgb3JpZ2luYWwgcGF0Y2ggaXMgbm90IG1vZGlmaWVkLCBzZWUgIzQxMVxuXHRcdFx0Y29uc3Qga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG5cdFx0XHRzd2l0Y2ggKG9wKSB7XG5cdFx0XHRcdGNhc2UgUkVQTEFDRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0ZGllKDE2KVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdmFsdWUgaXMgYW4gb2JqZWN0LCB0aGVuIGl0J3MgYXNzaWduZWQgYnkgcmVmZXJlbmNlXG5cdFx0XHRcdFx0XHRcdC8vIGluIHRoZSBmb2xsb3dpbmcgYWRkIG9yIHJlbW92ZSBvcHMsIHRoZSB2YWx1ZSBmaWVsZCBpbnNpZGUgdGhlIHBhdGNoIHdpbGwgYWxzbyBiZSBtb2RpZnllZFxuXHRcdFx0XHRcdFx0XHQvLyBzbyB3ZSB1c2UgdmFsdWUgZnJvbSB0aGUgY2xvbmVkIHBhdGNoXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChiYXNlW2tleV0gPSB2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgQUREOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5BcnJheTpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleSA9PT0gXCItXCJcblx0XHRcdFx0XHRcdFx0XHQ/IGJhc2UucHVzaCh2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHQ6IGJhc2Uuc3BsaWNlKGtleSBhcyBhbnksIDAsIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmFkZCh2YWx1ZSlcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoYmFzZVtrZXldID0gdmFsdWUpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFJFTU9WRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuQXJyYXk6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNwbGljZShrZXkgYXMgYW55LCAxKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmRlbGV0ZShrZXkpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuZGVsZXRlKHBhdGNoLnZhbHVlKVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRlbGV0ZSBiYXNlW2tleV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0ZGllKDE3LCBvcClcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0cmV0dXJuIGRyYWZ0XG5cdH1cblxuXHQvLyBvcHRpbWl6ZTogdGhpcyBpcyBxdWl0ZSBhIHBlcmZvcm1hbmNlIGhpdCwgY2FuIHdlIGRldGVjdCBpbnRlbGxpZ2VudGx5IHdoZW4gaXQgaXMgbmVlZGVkP1xuXHQvLyBFLmcuIGF1dG8tZHJhZnQgd2hlbiBuZXcgb2JqZWN0cyBmcm9tIG91dHNpZGUgYXJlIGFzc2lnbmVkIGFuZCBtb2RpZmllZD9cblx0Ly8gKFNlZSBmYWlsaW5nIHRlc3Qgd2hlbiBkZWVwQ2xvbmUganVzdCByZXR1cm5zIG9iailcblx0ZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZTxUPihvYmo6IFQpOiBUXG5cdGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqOiBhbnkpIHtcblx0XHRpZiAoIWlzRHJhZnRhYmxlKG9iaikpIHJldHVybiBvYmpcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKVxuXHRcdGlmIChpc01hcChvYmopKVxuXHRcdFx0cmV0dXJuIG5ldyBNYXAoXG5cdFx0XHRcdEFycmF5LmZyb20ob2JqLmVudHJpZXMoKSkubWFwKChbaywgdl0pID0+IFtrLCBkZWVwQ2xvbmVQYXRjaFZhbHVlKHYpXSlcblx0XHRcdClcblx0XHRpZiAoaXNTZXQob2JqKSkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShvYmopLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKSlcblx0XHRjb25zdCBjbG9uZWQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuXHRcdGZvciAoY29uc3Qga2V5IGluIG9iaikgY2xvbmVkW2tleV0gPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9ialtrZXldKVxuXHRcdGlmIChoYXMob2JqLCBpbW1lcmFibGUpKSBjbG9uZWRbaW1tZXJhYmxlXSA9IG9ialtpbW1lcmFibGVdXG5cdFx0cmV0dXJuIGNsb25lZFxuXHR9XG5cblx0ZnVuY3Rpb24gY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQ8VD4ob2JqOiBUKTogVCB7XG5cdFx0aWYgKGlzRHJhZnQob2JqKSkge1xuXHRcdFx0cmV0dXJuIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKVxuXHRcdH0gZWxzZSByZXR1cm4gb2JqXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiUGF0Y2hlc1wiLCB7XG5cdFx0YXBwbHlQYXRjaGVzXyxcblx0XHRnZW5lcmF0ZVBhdGNoZXNfLFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzX1xuXHR9KVxufVxuIiwgIi8vIHR5cGVzIG9ubHkhXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0TWFwU3RhdGUsXG5cdFNldFN0YXRlLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHRsYXRlc3QsXG5cdGl0ZXJhdG9yU3ltYm9sLFxuXHRpc0RyYWZ0YWJsZSxcblx0Y3JlYXRlUHJveHksXG5cdGxvYWRQbHVnaW4sXG5cdG1hcmtDaGFuZ2VkLFxuXHRQcm94eVR5cGUsXG5cdGRpZSxcblx0ZWFjaFxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTWFwU2V0KCkge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHR2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzID1cblx0XHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuXHRcdFx0KHtfX3Byb3RvX186IFtdfSBpbnN0YW5jZW9mIEFycmF5ICYmXG5cdFx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0XHRkLl9fcHJvdG9fXyA9IGJcblx0XHRcdFx0fSkgfHxcblx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0Zm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF1cblx0XHRcdH1cblx0XHRyZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKVxuXHR9XG5cblx0Ly8gVWdseSBoYWNrIHRvIHJlc29sdmUgIzUwMiBhbmQgaW5oZXJpdCBidWlsdCBpbiBNYXAgLyBTZXRcblx0ZnVuY3Rpb24gX19leHRlbmRzKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzKGQsIGIpXG5cdFx0ZnVuY3Rpb24gX18odGhpczogYW55KTogYW55IHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3IgPSBkXG5cdFx0fVxuXHRcdGQucHJvdG90eXBlID1cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdCgoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUpLCBuZXcgX18oKSlcblx0fVxuXG5cdGNvbnN0IERyYWZ0TWFwID0gKGZ1bmN0aW9uKF9zdXBlcikge1xuXHRcdF9fZXh0ZW5kcyhEcmFmdE1hcCwgX3N1cGVyKVxuXHRcdC8vIENyZWF0ZSBjbGFzcyBtYW51YWxseSwgY2F1c2UgIzUwMlxuXHRcdGZ1bmN0aW9uIERyYWZ0TWFwKHRoaXM6IGFueSwgdGFyZ2V0OiBBbnlNYXAsIHBhcmVudD86IEltbWVyU3RhdGUpOiBhbnkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuTWFwLFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFzc2lnbmVkXzogdW5kZWZpbmVkLFxuXHRcdFx0XHRiYXNlXzogdGFyZ2V0LFxuXHRcdFx0XHRkcmFmdF86IHRoaXMgYXMgYW55LFxuXHRcdFx0XHRpc01hbnVhbF86IGZhbHNlLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2Vcblx0XHRcdH0gYXMgTWFwU3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdE1hcC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHQvLyBjb25maWd1cmFibGU6IHRydWVcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuaGFzKGtleSlcblx0XHR9XG5cblx0XHRwLnNldCA9IGZ1bmN0aW9uKGtleTogYW55LCB2YWx1ZTogYW55KSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKCFsYXRlc3Qoc3RhdGUpLmhhcyhrZXkpIHx8IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCB0cnVlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgdHJ1ZSlcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXG5cdFx0cC5kZWxldGUgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKCF0aGlzLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdGlmIChzdGF0ZS5iYXNlXy5oYXMoa2V5KSkge1xuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIGZhbHNlKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5kZWxldGUoa2V5KVxuXHRcdFx0fVxuXHRcdFx0c3RhdGUuY29weV8hLmRlbGV0ZShrZXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRcdGVhY2goc3RhdGUuYmFzZV8sIGtleSA9PiB7XG5cdFx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCBmYWxzZSlcblx0XHRcdFx0fSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLmZvckVhY2ggPSBmdW5jdGlvbihcblx0XHRcdGNiOiAodmFsdWU6IGFueSwga2V5OiBhbnksIHNlbGY6IGFueSkgPT4gdm9pZCxcblx0XHRcdHRoaXNBcmc/OiBhbnlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRsYXRlc3Qoc3RhdGUpLmZvckVhY2goKF92YWx1ZTogYW55LCBrZXk6IGFueSwgX21hcDogYW55KSA9PiB7XG5cdFx0XHRcdGNiLmNhbGwodGhpc0FyZywgdGhpcy5nZXQoa2V5KSwga2V5LCB0aGlzKVxuXHRcdFx0fSlcblx0XHR9XG5cblx0XHRwLmdldCA9IGZ1bmN0aW9uKGtleTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSlcblx0XHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT09IHN0YXRlLmJhc2VfLmdldChrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvLyBlaXRoZXIgYWxyZWFkeSBkcmFmdGVkIG9yIHJlYXNzaWduZWRcblx0XHRcdH1cblx0XHRcdC8vIGRlc3BpdGUgd2hhdCBpdCBsb29rcywgdGhpcyBjcmVhdGVzIGEgZHJhZnQgb25seSBvbmNlLCBzZWUgYWJvdmUgY29uZGl0aW9uXG5cdFx0XHRjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHN0YXRlLnNjb3BlXy5pbW1lcl8sIHZhbHVlLCBzdGF0ZSlcblx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0c3RhdGUuY29weV8hLnNldChrZXksIGRyYWZ0KVxuXHRcdFx0cmV0dXJuIGRyYWZ0XG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmtleXMoKVxuXHRcdH1cblxuXHRcdHAudmFsdWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMudmFsdWVzKCksXG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRpZiAoci5kb25lKSByZXR1cm4gclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBhbnlcblx0XHR9XG5cblx0XHRwLmVudHJpZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMuZW50cmllcygpLFxuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0aWYgKHIuZG9uZSkgcmV0dXJuIHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRvbmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IFtyLnZhbHVlLCB2YWx1ZV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgYW55XG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmVudHJpZXMoKVxuXHRcdH1cblxuXHRcdHJldHVybiBEcmFmdE1hcFxuXHR9KShNYXApXG5cblx0ZnVuY3Rpb24gcHJveHlNYXBfPFQgZXh0ZW5kcyBBbnlNYXA+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFQge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gbmV3IERyYWZ0TWFwKHRhcmdldCwgcGFyZW50KVxuXHR9XG5cblx0ZnVuY3Rpb24gcHJlcGFyZU1hcENvcHkoc3RhdGU6IE1hcFN0YXRlKSB7XG5cdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRzdGF0ZS5jb3B5XyA9IG5ldyBNYXAoc3RhdGUuYmFzZV8pXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgRHJhZnRTZXQgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG5cdFx0X19leHRlbmRzKERyYWZ0U2V0LCBfc3VwZXIpXG5cdFx0Ly8gQ3JlYXRlIGNsYXNzIG1hbnVhbGx5LCBjYXVzZSAjNTAyXG5cdFx0ZnVuY3Rpb24gRHJhZnRTZXQodGhpczogYW55LCB0YXJnZXQ6IEFueVNldCwgcGFyZW50PzogSW1tZXJTdGF0ZSkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuU2V0LFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJhc2VfOiB0YXJnZXQsXG5cdFx0XHRcdGRyYWZ0XzogdGhpcyxcblx0XHRcdFx0ZHJhZnRzXzogbmV3IE1hcCgpLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRcdGlzTWFudWFsXzogZmFsc2Vcblx0XHRcdH0gYXMgU2V0U3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdFNldC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogdHJ1ZSxcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0Ly8gYml0IG9mIHRyaWNrZXJ5IGhlcmUsIHRvIGJlIGFibGUgdG8gcmVjb2duaXplIGJvdGggdGhlIHZhbHVlLCBhbmQgdGhlIGRyYWZ0IG9mIGl0cyB2YWx1ZVxuXHRcdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGUuYmFzZV8uaGFzKHZhbHVlKVxuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXRlLmNvcHlfLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlXG5cdFx0XHRpZiAoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpICYmIHN0YXRlLmNvcHlfLmhhcyhzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0cC5hZGQgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblxuXHRcdHAuZGVsZXRlID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuZGVsZXRlKHZhbHVlKSB8fFxuXHRcdFx0XHQoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpXG5cdFx0XHRcdFx0PyBzdGF0ZS5jb3B5XyEuZGVsZXRlKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSlcblx0XHRcdFx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZhbHNlKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLnZhbHVlcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRyZXR1cm4gc3RhdGUuY29weV8hLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5lbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdHJldHVybiBzdGF0ZS5jb3B5XyEuZW50cmllcygpXG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChjYjogYW55LCB0aGlzQXJnPzogYW55KSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IHRoaXMudmFsdWVzKClcblx0XHRcdGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0Y2IuY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcylcblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIERyYWZ0U2V0XG5cdH0pKFNldClcblxuXHRmdW5jdGlvbiBwcm94eVNldF88VCBleHRlbmRzIEFueVNldD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVCB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBuZXcgRHJhZnRTZXQodGFyZ2V0LCBwYXJlbnQpXG5cdH1cblxuXHRmdW5jdGlvbiBwcmVwYXJlU2V0Q29weShzdGF0ZTogU2V0U3RhdGUpIHtcblx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHQvLyBjcmVhdGUgZHJhZnRzIGZvciBhbGwgZW50cmllcyB0byBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXJcblx0XHRcdHN0YXRlLmNvcHlfID0gbmV3IFNldCgpXG5cdFx0XHRzdGF0ZS5iYXNlXy5mb3JFYWNoKHZhbHVlID0+IHtcblx0XHRcdFx0aWYgKGlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkoc3RhdGUuc2NvcGVfLmltbWVyXywgdmFsdWUsIHN0YXRlKVxuXHRcdFx0XHRcdHN0YXRlLmRyYWZ0c18uc2V0KHZhbHVlLCBkcmFmdClcblx0XHRcdFx0XHRzdGF0ZS5jb3B5XyEuYWRkKGRyYWZ0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXNzZXJ0VW5yZXZva2VkKHN0YXRlOiBhbnkgLypFUzVTdGF0ZSB8IE1hcFN0YXRlIHwgU2V0U3RhdGUqLykge1xuXHRcdGlmIChzdGF0ZS5yZXZva2VkXykgZGllKDMsIEpTT04uc3RyaW5naWZ5KGxhdGVzdChzdGF0ZSkpKVxuXHR9XG5cblx0bG9hZFBsdWdpbihcIk1hcFNldFwiLCB7cHJveHlNYXBfLCBwcm94eVNldF99KVxufVxuIiwgImltcG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9lczVcIlxuaW1wb3J0IHtlbmFibGVNYXBTZXR9IGZyb20gXCIuL21hcHNldFwiXG5pbXBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BhdGNoZXNcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQWxsUGx1Z2lucygpIHtcblx0ZW5hYmxlRVM1KClcblx0ZW5hYmxlTWFwU2V0KClcblx0ZW5hYmxlUGF0Y2hlcygpXG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2UsXG5cdElQcm9kdWNlV2l0aFBhdGNoZXMsXG5cdEltbWVyLFxuXHREcmFmdCxcblx0SW1tdXRhYmxlXG59IGZyb20gXCIuL2ludGVybmFsXCJcblxuZXhwb3J0IHtcblx0RHJhZnQsXG5cdEltbXV0YWJsZSxcblx0UGF0Y2gsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdG9yaWdpbmFsLFxuXHRjdXJyZW50LFxuXHRpc0RyYWZ0LFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElORyBhcyBub3RoaW5nLFxuXHREUkFGVEFCTEUgYXMgaW1tZXJhYmxlLFxuXHRmcmVlemVcbn0gZnJvbSBcIi4vaW50ZXJuYWxcIlxuXG5jb25zdCBpbW1lciA9IG5ldyBJbW1lcigpXG5cbi8qKlxuICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG4gKiByZXR1cm4gdmFsdWUgb2Z0ZW4gZGVwZW5kcyBvbiB0aGUgYmFzZSBzdGF0ZSkuIFRoZSByZWNpcGUgZnVuY3Rpb24gaXNcbiAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cbiAqXG4gKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3VcbiAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG4gKlxuICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG4gKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHthbnl9IGJhc2UgLSB0aGUgaW5pdGlhbCBzdGF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvZHVjZXIgLSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcHJveHkgb2YgdGhlIGJhc2Ugc3RhdGUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHdoaWNoIGNhbiBiZSBmcmVlbHkgbW9kaWZpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcbiAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuICovXG5leHBvcnQgY29uc3QgcHJvZHVjZTogSVByb2R1Y2UgPSBpbW1lci5wcm9kdWNlXG5leHBvcnQgZGVmYXVsdCBwcm9kdWNlXG5cbi8qKlxuICogTGlrZSBgcHJvZHVjZWAsIGJ1dCBgcHJvZHVjZVdpdGhQYXRjaGVzYCBhbHdheXMgcmV0dXJucyBhIHR1cGxlXG4gKiBbbmV4dFN0YXRlLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc10gKGluc3RlYWQgb2YganVzdCB0aGUgbmV4dCBzdGF0ZSlcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IGltbWVyLnByb2R1Y2VXaXRoUGF0Y2hlcy5iaW5kKFxuXHRpbW1lclxuKVxuXG4vKipcbiAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG4gKlxuICogQWx3YXlzIGZyZWV6ZSBieSBkZWZhdWx0LCBldmVuIGluIHByb2R1Y3Rpb24gbW9kZVxuICovXG5leHBvcnQgY29uc3Qgc2V0QXV0b0ZyZWV6ZSA9IGltbWVyLnNldEF1dG9GcmVlemUuYmluZChpbW1lcilcblxuLyoqXG4gKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcbiAqIGFsd2F5cyBmYXN0ZXIgdGhhbiB1c2luZyBFUzUgcHJveGllcy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZVByb3hpZXMgPSBpbW1lci5zZXRVc2VQcm94aWVzLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogQXBwbHkgYW4gYXJyYXkgb2YgSW1tZXIgcGF0Y2hlcyB0byB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIHByb2R1Y2VyLCB3aGljaCBtZWFucyBjb3B5LW9uLXdyaXRlIGlzIGluIGVmZmVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UGF0Y2hlcyA9IGltbWVyLmFwcGx5UGF0Y2hlcy5iaW5kKGltbWVyKVxuXG4vKipcbiAqIENyZWF0ZSBhbiBJbW1lciBkcmFmdCBmcm9tIHRoZSBnaXZlbiBiYXNlIHN0YXRlLCB3aGljaCBtYXkgYmUgYSBkcmFmdCBpdHNlbGYuXG4gKiBUaGUgZHJhZnQgY2FuIGJlIG1vZGlmaWVkIHVudGlsIHlvdSBmaW5hbGl6ZSBpdCB3aXRoIHRoZSBgZmluaXNoRHJhZnRgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnQgPSBpbW1lci5jcmVhdGVEcmFmdC5iaW5kKGltbWVyKVxuXG4vKipcbiAqIEZpbmFsaXplIGFuIEltbWVyIGRyYWZ0IGZyb20gYSBgY3JlYXRlRHJhZnRgIGNhbGwsIHJldHVybmluZyB0aGUgYmFzZSBzdGF0ZVxuICogKGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlKSBvciBhIG1vZGlmaWVkIGNvcHkuIFRoZSBkcmFmdCBtdXN0ICpub3QqIGJlXG4gKiBtdXRhdGVkIGFmdGVyd2FyZHMuXG4gKlxuICogUGFzcyBhIGZ1bmN0aW9uIGFzIHRoZSAybmQgYXJndW1lbnQgdG8gZ2VuZXJhdGUgSW1tZXIgcGF0Y2hlcyBiYXNlZCBvbiB0aGVcbiAqIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBmaW5pc2hEcmFmdCA9IGltbWVyLmZpbmlzaERyYWZ0LmJpbmQoaW1tZXIpXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBhIG5vLW9wLCBidXQgY2FuIGJlIHVzZWQgdG8gY2FzdCBhbiBpbW11dGFibGUgdHlwZVxuICogdG8gYW4gZHJhZnQgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXN0RHJhZnQ8VD4odmFsdWU6IFQpOiBEcmFmdDxUPiB7XG5cdHJldHVybiB2YWx1ZSBhcyBhbnlcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbm8tb3AsIGJ1dCBjYW4gYmUgdXNlZCB0byBjYXN0IGEgbXV0YWJsZSB0eXBlXG4gKiB0byBhbiBpbW11dGFibGUgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RJbW11dGFibGU8VD4odmFsdWU6IFQpOiBJbW11dGFibGU8VD4ge1xuXHRyZXR1cm4gdmFsdWUgYXMgYW55XG59XG5cbmV4cG9ydCB7SW1tZXJ9XG5cbmV4cG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9wbHVnaW5zL2VzNVwiXG5leHBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BsdWdpbnMvcGF0Y2hlc1wiXG5leHBvcnQge2VuYWJsZU1hcFNldH0gZnJvbSBcIi4vcGx1Z2lucy9tYXBzZXRcIlxuZXhwb3J0IHtlbmFibGVBbGxQbHVnaW5zfSBmcm9tIFwiLi9wbHVnaW5zL2FsbFwiXG4iLCAiLy8gU2hvdWxkIGJlIG5vIGltcG9ydHMgaGVyZSFcblxuLy8gU29tZSB0aGluZ3MgdGhhdCBzaG91bGQgYmUgZXZhbHVhdGVkIGJlZm9yZSBhbGwgZWxzZS4uLlxuXG4vLyBXZSBvbmx5IHdhbnQgdG8ga25vdyBpZiBub24tcG9seWZpbGxlZCBzeW1ib2xzIGFyZSBhdmFpbGFibGVcbmNvbnN0IGhhc1N5bWJvbCA9XG5cdHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFN5bWJvbChcInhcIikgPT09IFwic3ltYm9sXCJcbmV4cG9ydCBjb25zdCBoYXNNYXAgPSB0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiXG5leHBvcnQgY29uc3QgaGFzU2V0ID0gdHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIlxuZXhwb3J0IGNvbnN0IGhhc1Byb3hpZXMgPVxuXHR0eXBlb2YgUHJveHkgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0dHlwZW9mIFByb3h5LnJldm9jYWJsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIlxuXG4vKipcbiAqIFRoZSBzZW50aW5lbCB2YWx1ZSByZXR1cm5lZCBieSBwcm9kdWNlcnMgdG8gcmVwbGFjZSB0aGUgZHJhZnQgd2l0aCB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLW5vdGhpbmdcIilcblx0OiAoe1tcImltbWVyLW5vdGhpbmdcIl06IHRydWV9IGFzIGFueSlcblxuLyoqXG4gKiBUbyBsZXQgSW1tZXIgdHJlYXQgeW91ciBjbGFzcyBpbnN0YW5jZXMgYXMgcGxhaW4gaW1tdXRhYmxlIG9iamVjdHNcbiAqIChhbGJlaXQgd2l0aCBhIGN1c3RvbSBwcm90b3R5cGUpLCB5b3UgbXVzdCBkZWZpbmUgZWl0aGVyIGFuIGluc3RhbmNlIHByb3BlcnR5XG4gKiBvciBhIHN0YXRpYyBwcm9wZXJ0eSBvbiBlYWNoIG9mIHlvdXIgY3VzdG9tIGNsYXNzZXMuXG4gKlxuICogT3RoZXJ3aXNlLCB5b3VyIGNsYXNzIGluc3RhbmNlIHdpbGwgbmV2ZXIgYmUgZHJhZnRlZCwgd2hpY2ggbWVhbnMgaXQgd29uJ3QgYmVcbiAqIHNhZmUgdG8gbXV0YXRlIGluIGEgcHJvZHVjZSBjYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IERSQUZUQUJMRTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIilcblx0OiAoXCJfXyRpbW1lcl9kcmFmdGFibGVcIiBhcyBhbnkpXG5cbmV4cG9ydCBjb25zdCBEUkFGVF9TVEFURTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1zdGF0ZVwiKVxuXHQ6IChcIl9fJGltbWVyX3N0YXRlXCIgYXMgYW55KVxuXG4vLyBFdmVuIGEgcG9seWZpbGxlZCBTeW1ib2wgbWlnaHQgcHJvdmlkZSBTeW1ib2wuaXRlcmF0b3JcbmV4cG9ydCBjb25zdCBpdGVyYXRvclN5bWJvbDogdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9XG5cdCh0eXBlb2YgU3ltYm9sICE9IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yKSB8fCAoXCJAQGl0ZXJhdG9yXCIgYXMgYW55KVxuXG4vKiogVXNlIGEgY2xhc3MgdHlwZSBmb3IgYG5vdGhpbmdgIHNvIGl0cyB0eXBlIGlzIHVuaXF1ZSAqL1xuZXhwb3J0IGNsYXNzIE5vdGhpbmcge1xuXHQvLyBUaGlzIGxldHMgdXMgZG8gYEV4Y2x1ZGU8VCwgTm90aGluZz5gXG5cdC8vIEB0cy1pZ25vcmVcblx0cHJpdmF0ZSBfITogdW5pcXVlIHN5bWJvbFxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufSIsICJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gUmVhY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21hc3Rlci9wYWNrYWdlcy9zaGFyZWQvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS5qc1xuICpcbiAqIERvIG5vdCByZXF1aXJlIHRoaXMgbW9kdWxlIGRpcmVjdGx5ISBVc2Ugbm9ybWFsIHRocm93IGVycm9yIGNhbGxzLiBUaGVzZSBtZXNzYWdlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggZXJyb3IgY29kZXNcbiAqIGR1cmluZyBidWlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gXCJNaW5pZmllZCBSZWR1eCBlcnJvciAjXCIgKyBjb2RlICsgXCI7IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPVwiICsgY29kZSArIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIFwiICsgJ3VzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuICc7XG59XG5cbi8vIElubGluZWQgdmVyc2lvbiBvZiB0aGUgYHN5bWJvbC1vYnNlcnZhYmxlYCBwb2x5ZmlsbFxudmFyICQkb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICdAQG9ic2VydmFibGUnO1xufSkoKTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbnZhciByYW5kb21TdHJpbmcgPSBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbn07XG5cbnZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogXCJAQHJlZHV4L0lOSVRcIiArIHJhbmRvbVN0cmluZygpLFxuICBSRVBMQUNFOiBcIkBAcmVkdXgvUkVQTEFDRVwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiBmdW5jdGlvbiBQUk9CRV9VTktOT1dOX0FDVElPTigpIHtcbiAgICByZXR1cm4gXCJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXCIgKyByYW5kb21TdHJpbmcoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBwcm90byA9IG9iajtcblxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG87XG59XG5cbi8vIElubGluZWQgLyBzaG9ydGVuZWQgdmVyc2lvbiBvZiBga2luZE9mYCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2tpbmQtb2ZcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnYXJyYXknO1xuICBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiAnZGF0ZSc7XG4gIGlmIChpc0Vycm9yKHZhbCkpIHJldHVybiAnZXJyb3InO1xuICB2YXIgY29uc3RydWN0b3JOYW1lID0gY3Rvck5hbWUodmFsKTtcblxuICBzd2l0Y2ggKGNvbnN0cnVjdG9yTmFtZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbiAgfSAvLyBvdGhlclxuXG5cbiAgcmV0dXJuIHR5cGUuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csICcnKTtcbn1cblxuZnVuY3Rpb24gY3Rvck5hbWUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gdmFsLmNvbnN0cnVjdG9yLm5hbWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIHZhbC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiB2YWwuY29uc3RydWN0b3IgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuZ2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLnNldERhdGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgdmFyIHR5cGVPZlZhbCA9IHR5cGVvZiB2YWw7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB0eXBlT2ZWYWwgPSBtaW5pS2luZE9mKHZhbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGBjb25maWd1cmVTdG9yZWAgbWV0aG9kXG4gKiBvZiB0aGUgYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYC5cbiAqXG4gKiBSZWR1eCBUb29sa2l0IGlzIG91ciByZWNvbW1lbmRlZCBhcHByb2FjaCBmb3Igd3JpdGluZyBSZWR1eCBsb2dpYyB0b2RheSxcbiAqIGluY2x1ZGluZyBzdG9yZSBzZXR1cCwgcmVkdWNlcnMsIGRhdGEgZmV0Y2hpbmcsIGFuZCBtb3JlLlxuICpcbiAqICoqRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIHJlYWQgdGhpcyBSZWR1eCBkb2NzIHBhZ2U6KipcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIGBjb25maWd1cmVTdG9yZWAgZnJvbSBSZWR1eCBUb29sa2l0IGlzIGFuIGltcHJvdmVkIHZlcnNpb24gb2YgYGNyZWF0ZVN0b3JlYCB0aGF0XG4gKiBzaW1wbGlmaWVzIHNldHVwIGFuZCBoZWxwcyBhdm9pZCBjb21tb24gYnVncy5cbiAqXG4gKiBZb3Ugc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgYHJlZHV4YCBjb3JlIHBhY2thZ2UgYnkgaXRzZWxmIHRvZGF5LCBleGNlcHQgZm9yIGxlYXJuaW5nIHB1cnBvc2VzLlxuICogVGhlIGBjcmVhdGVTdG9yZWAgbWV0aG9kIGZyb20gdGhlIGNvcmUgYHJlZHV4YCBwYWNrYWdlIHdpbGwgbm90IGJlIHJlbW92ZWQsIGJ1dCB3ZSBlbmNvdXJhZ2VcbiAqIGFsbCB1c2VycyB0byBtaWdyYXRlIHRvIHVzaW5nIFJlZHV4IFRvb2xraXQgZm9yIGFsbCBSZWR1eCBjb2RlLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBgY3JlYXRlU3RvcmVgIHdpdGhvdXQgdGhpcyB2aXN1YWwgZGVwcmVjYXRpb24gd2FybmluZywgdXNlXG4gKiB0aGUgYGxlZ2FjeV9jcmVhdGVTdG9yZWAgaW1wb3J0IGluc3RlYWQ6XG4gKlxuICogYGltcG9ydCB7IGxlZ2FjeV9jcmVhdGVTdG9yZSBhcyBjcmVhdGVTdG9yZX0gZnJvbSAncmVkdXgnYFxuICpcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbmhhbmNlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiAnSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gJyArICdjcmVhdGVTdG9yZSgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEluc3RlYWQsIGNvbXBvc2UgdGhlbSAnICsgJ3RvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogXCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihlbmhhbmNlcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IFwiRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKHJlZHVjZXIpICsgXCInXCIpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XG4gIHZhciBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGlzIG1ha2VzIGEgc2hhbGxvdyBjb3B5IG9mIGN1cnJlbnRMaXN0ZW5lcnMgc28gd2UgY2FuIHVzZVxuICAgKiBuZXh0TGlzdGVuZXJzIGFzIGEgdGVtcG9yYXJ5IGxpc3Qgd2hpbGUgZGlzcGF0Y2hpbmcuXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgYW55IGJ1Z3MgYXJvdW5kIGNvbnN1bWVycyBjYWxsaW5nXG4gICAqIHN1YnNjcmliZS91bnN1YnNjcmliZSBpbiB0aGUgbWlkZGxlIG9mIGEgZGlzcGF0Y2guXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6ICdZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1RoZSByZWR1Y2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdGF0ZSBhcyBhbiBhcmd1bWVudC4gJyArICdQYXNzIGl0IGRvd24gZnJvbSB0aGUgdG9wIHJlZHVjZXIgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gdGhlIHN0b3JlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBoYXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlvbnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhvd2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3QsIHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8gc2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNwYXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogXCJFeHBlY3RlZCB0aGUgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihsaXN0ZW5lcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ0lmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIG5vdGlmaWVkIGFmdGVyIHRoZSBzdG9yZSBoYXMgYmVlbiB1cGRhdGVkLCBzdWJzY3JpYmUgZnJvbSBhICcgKyAnY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuICcgKyAnU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiAnWW91IG1heSBub3QgdW5zdWJzY3JpYmUgZnJvbSBhIHN0b3JlIGxpc3RlbmVyIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMgPSBudWxsO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIFx1MjAxQ3doYXQgY2hhbmdlZFx1MjAxRC4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBcIkFjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnXCIgKyBraW5kT2YoYWN0aW9uKSArIFwiJy4gWW91IG1heSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHlvdXIgc3RvcmUgc2V0dXAgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIG90aGVyIHZhbHVlcywgc3VjaCBhcyAncmVkdXgtdGh1bmsnIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBmdW5jdGlvbnMuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNtaWRkbGV3YXJlIGFuZCBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNi1hc3luYy1sb2dpYyN1c2luZy10aGUtcmVkdXgtdGh1bmstbWlkZGxld2FyZSBmb3IgZXhhbXBsZXMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOSkgOiAnUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEwKSA6IFwiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YobmV4dFJlZHVjZXIpKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyOyAvLyBUaGlzIGFjdGlvbiBoYXMgYSBzaW1pbGlhciBlZmZlY3QgdG8gQWN0aW9uVHlwZXMuSU5JVC5cbiAgICAvLyBBbnkgcmVkdWNlcnMgdGhhdCBleGlzdGVkIGluIGJvdGggdGhlIG5ldyBhbmQgb2xkIHJvb3RSZWR1Y2VyXG4gICAgLy8gd2lsbCByZWNlaXZlIHRoZSBwcmV2aW91cyBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgICAvLyB0aGUgbmV3IHN0YXRlIHRyZWUgd2l0aCBhbnkgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBvbGQgb25lLlxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNlcnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiBfcmVmID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKG9ic2VydmVyKSArIFwiJ1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChnZXRTdGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCBfcmVmWyQkb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVmO1xuICB9IC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcIklOSVRcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XG4gIC8vIHJlZHVjZXIgcmV0dXJucyB0aGVpciBpbml0aWFsIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxuXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLklOSVRcbiAgfSk7XG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICpcbiAqICoqV2UgcmVjb21tZW5kIHVzaW5nIGBjb25maWd1cmVTdG9yZWAgZnJvbSB0aGVcbiAqIGBAcmVkdXhqcy90b29sa2l0YCBwYWNrYWdlKiosIHdoaWNoIHJlcGxhY2VzIGBjcmVhdGVTdG9yZWA6XG4gKiAqKmh0dHBzOi8vcmVkdXguanMub3JnL2ludHJvZHVjdGlvbi93aHktcnRrLWlzLXJlZHV4LXRvZGF5KipcbiAqXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXG4gKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxuICpcbiAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXG4gKi9cblxudmFyIGxlZ2FjeV9jcmVhdGVTdG9yZSA9IGNyZWF0ZVN0b3JlO1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbn1cblxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlIHJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIFwiVGhlIFwiICsgYXJndW1lbnROYW1lICsgXCIgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiXCIgKyBraW5kT2YoaW5wdXRTdGF0ZSkgKyBcIlxcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgXCIgKyAoXCJrZXlzOiBcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLlJFUExBQ0UpIHJldHVybjtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBcIlVuZXhwZWN0ZWQgXCIgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArIFwiIFwiICsgKFwiXFxcIlwiICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIgZm91bmQgaW4gXCIgKyBhcmd1bWVudE5hbWUgKyBcIi4gXCIpICsgXCJFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiICsgKFwiXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFwiICsgXCJJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgXCIgKyBcImV4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgXCIgKyBcIm5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIFwiICsgXCJ5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5QUk9CRV9VTktOT1dOX0FDVElPTigpXG4gICAgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIFwiICsgKFwiRG9uJ3QgdHJ5IHRvIGhhbmRsZSAnXCIgKyBBY3Rpb25UeXBlcy5JTklUICsgXCInIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiIFwiKSArIFwibmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgXCIgKyBcImN1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsIFwiICsgXCJpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgXCIgKyBcImFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLlwiKTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcbiAqIGludG8gYSBzaW5nbGUgc3RhdGUgb2JqZWN0LCB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIGtleXMgb2YgdGhlIHBhc3NlZFxuICogcmVkdWNlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlZHVjZXJzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXG4gKiB1bmRlZmluZWQgZm9yIGFueSBhY3Rpb24uIEluc3RlYWQsIHRoZXkgc2hvdWxkIHJldHVybiB0aGVpciBpbml0aWFsIHN0YXRlXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICovXG5cblxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2FybmluZyhcIk5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7IC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgd2FybiBhYm91dCB0aGUgc2FtZVxuICAvLyBrZXlzIG11bHRpcGxlIHRpbWVzLlxuXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yO1xuXG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hhcGVBc3NlcnRpb25FcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUsIGFjdGlvbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XG5cbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICB3YXJuaW5nKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IFwiV2hlbiBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgdHlwZSBcIiArIChhY3Rpb25UeXBlID8gXCJcXFwiXCIgKyBTdHJpbmcoYWN0aW9uVHlwZSkgKyBcIlxcXCJcIiA6ICcodW5rbm93biB0eXBlKScpICsgXCIsIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsgX2tleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQuIFwiICsgXCJUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuIFwiICsgXCJJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5cIik7XG4gICAgICB9XG5cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAqIGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2VsZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBhY3Rpb24gY3JlYXRvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZGlzcGF0Y2ggd3JhcHBlZCBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgYnV0IGluc3RlYWQgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihhY3Rpb25DcmVhdG9ycykgKyBcIicuIFwiICsgXCJEaWQgeW91IHdyaXRlIFxcXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCIgaW5zdGVhZCBvZiBcXFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCI/XCIpO1xuICB9XG5cbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcbiAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMgaWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZS5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG5cbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogJ0Rpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuICcgKyAnT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLicpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICAgIHJldHVybiBfZGlzcGF0Y2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGNoYWluID0gbWlkZGxld2FyZXMubWFwKGZ1bmN0aW9uIChtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgfSk7XG4gICAgICBfZGlzcGF0Y2ggPSBjb21wb3NlLmFwcGx5KHZvaWQgMCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgQWN0aW9uVHlwZXMgYXMgX19ET19OT1RfVVNFX19BY3Rpb25UeXBlcywgYXBwbHlNaWRkbGV3YXJlLCBiaW5kQWN0aW9uQ3JlYXRvcnMsIGNvbWJpbmVSZWR1Y2VycywgY29tcG9zZSwgY3JlYXRlU3RvcmUsIGxlZ2FjeV9jcmVhdGVTdG9yZSB9O1xuIiwgIi8qKiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIHBvdGVudGlhbCBcImV4dHJhIGFyZ3VtZW50XCIgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgbGF0ZXIsXHJcbiAqIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSB0aHVuayBtaWRkbGV3YXJlIHRoYXQgdXNlcyB0aGF0IHZhbHVlXHJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgLy8gU3RhbmRhcmQgUmVkdXggbWlkZGxld2FyZSBkZWZpbml0aW9uIHBhdHRlcm46XG4gIC8vIFNlZTogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjd3JpdGluZy1jdXN0b20tbWlkZGxld2FyZVxuICB2YXIgbWlkZGxld2FyZSA9IGZ1bmN0aW9uIG1pZGRsZXdhcmUoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXG4gICAgICAgIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIFRoZSB0aHVuayBtaWRkbGV3YXJlIGxvb2tzIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gYHN0b3JlLmRpc3BhdGNoYC5cbiAgICAgICAgLy8gSWYgdGhpcyBcImFjdGlvblwiIGlzIHJlYWxseSBhIGZ1bmN0aW9uLCBjYWxsIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJbmplY3QgdGhlIHN0b3JlJ3MgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGFueSBcImV4dHJhIGFyZ1wiXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcGFzcyB0aGUgYWN0aW9uIGRvd24gdGhlIG1pZGRsZXdhcmUgY2hhaW4gYXMgdXN1YWxcblxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1pZGRsZXdhcmU7XG59XG5cbnZhciB0aHVuayA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZSgpOyAvLyBBdHRhY2ggdGhlIGZhY3RvcnkgZnVuY3Rpb24gc28gdXNlcnMgY2FuIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgdmVyc2lvblxuLy8gd2l0aCB3aGF0ZXZlciBcImV4dHJhIGFyZ1wiIHRoZXkgd2FudCB0byBpbmplY3QgaW50byB0aGVpciB0aHVua3NcblxudGh1bmsud2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQgZGVmYXVsdCB0aHVuazsiLCAiaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCAqIGZyb20gJ3JlZHV4J1xyXG5leHBvcnQge1xyXG4gIGRlZmF1bHQgYXMgY3JlYXRlTmV4dFN0YXRlLFxyXG4gIGN1cnJlbnQsXHJcbiAgZnJlZXplLFxyXG4gIG9yaWdpbmFsLFxyXG4gIGlzRHJhZnQsXHJcbn0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCB0eXBlIHsgRHJhZnQgfSBmcm9tICdpbW1lcidcclxuZXhwb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCdcclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlbGVjdG9yLFxyXG4gIE91dHB1dFBhcmFtZXRyaWNTZWxlY3RvcixcclxuICBPdXRwdXRTZWxlY3RvcixcclxuICBQYXJhbWV0cmljU2VsZWN0b3IsXHJcbn0gZnJvbSAncmVzZWxlY3QnXHJcbmV4cG9ydCB7IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yIH0gZnJvbSAnLi9jcmVhdGVEcmFmdFNhZmVTZWxlY3RvcidcclxuZXhwb3J0IHR5cGUgeyBUaHVua0FjdGlvbiwgVGh1bmtEaXNwYXRjaCwgVGh1bmtNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcblxyXG4vLyBXZSBkZWxpYmVyYXRlbHkgZW5hYmxlIEltbWVyJ3MgRVM1IHN1cHBvcnQsIG9uIHRoZSBncm91bmRzIHRoYXRcclxuLy8gd2UgYXNzdW1lIFJUSyB3aWxsIGJlIHVzZWQgd2l0aCBSZWFjdCBOYXRpdmUgYW5kIG90aGVyIFByb3h5LWxlc3NcclxuLy8gZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24sIHRoYXQncyBob3cgSW1tZXIgNCBiZWhhdmVkLCBhbmQgc2luY2VcclxuLy8gd2Ugd2FudCB0byBzaGlwIHRoaXMgaW4gYW4gUlRLIG1pbm9yLCB3ZSBzaG91bGQga2VlcCB0aGUgc2FtZSBiZWhhdmlvci5cclxuZW5hYmxlRVM1KClcclxuXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjb25maWd1cmVTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjayxcclxuICBDb25maWd1cmVTdG9yZU9wdGlvbnMsXHJcbiAgRW5oYW5jZWRTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIH0gZnJvbSAnLi9kZXZ0b29sc0V4dGVuc2lvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBnZXRUeXBlLFxyXG4gIGlzQWN0aW9uLFxyXG4gIGlzQWN0aW9uQ3JlYXRvcixcclxuICBpc0ZTQSBhcyBpc0ZsdXhTdGFuZGFyZEFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBBY3Rpb25DcmVhdG9yV2l0aE5vbkluZmVycmFibGVQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbiAgUHJlcGFyZUFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVJlZHVjZXIsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25zLFxyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVTbGljZSxcclxufSBmcm9tICcuL2NyZWF0ZVNsaWNlJ1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQ3JlYXRlU2xpY2VPcHRpb25zLFxyXG4gIFNsaWNlLFxyXG4gIENhc2VSZWR1Y2VyQWN0aW9ucyxcclxuICBTbGljZUNhc2VSZWR1Y2VycyxcclxuICBWYWxpZGF0ZVNsaWNlQ2FzZVJlZHVjZXJzLFxyXG4gIENhc2VSZWR1Y2VyV2l0aFByZXBhcmUsXHJcbiAgU2xpY2VBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlU2xpY2UnXHJcbmV4cG9ydCB0eXBlIHsgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHsgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLFxyXG4gIGlzSW1tdXRhYmxlRGVmYXVsdCxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcclxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXHJcbiAgaXNQbGFpbixcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGdldERlZmF1bHRNaWRkbGV3YXJlLFxyXG59IGZyb20gJy4vZ2V0RGVmYXVsdE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyLFxyXG59IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmV4cG9ydCB7IE1pZGRsZXdhcmVBcnJheSwgRW5oYW5jZXJBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlBZGFwdGVyIH0gZnJvbSAnLi9lbnRpdGllcy9jcmVhdGVfYWRhcHRlcidcclxuZXhwb3J0IHR5cGUge1xyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5QWRhcHRlcixcclxuICBFbnRpdHlTZWxlY3RvcnMsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIEVudGl0eUlkLFxyXG4gIFVwZGF0ZSxcclxuICBJZFNlbGVjdG9yLFxyXG4gIENvbXBhcmVyLFxyXG59IGZyb20gJy4vZW50aXRpZXMvbW9kZWxzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVBc3luY1RodW5rLFxyXG4gIHVud3JhcFJlc3VsdCxcclxuICBtaW5pU2VyaWFsaXplRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgQXN5bmNUaHVuayxcclxuICBBc3luY1RodW5rT3B0aW9ucyxcclxuICBBc3luY1RodW5rQWN0aW9uLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcixcclxuICBTZXJpYWxpemVkRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5cclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGlzQWxsT2YsXHJcbiAgaXNBbnlPZixcclxuICBpc1BlbmRpbmcsXHJcbiAgaXNSZWplY3RlZCxcclxuICBpc0Z1bGZpbGxlZCxcclxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXHJcbiAgaXNSZWplY3RlZFdpdGhWYWx1ZSxcclxufSBmcm9tICcuL21hdGNoZXJzJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25NYXRjaGluZ0FsbE9mLFxyXG4gIEFjdGlvbk1hdGNoaW5nQW55T2YsXHJcbn0gZnJvbSAnLi9tYXRjaGVycydcclxuXHJcbmV4cG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkJ1xyXG5cclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIExpc3RlbmVyRWZmZWN0LFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZSxcclxuICBMaXN0ZW5lckVmZmVjdEFQSSxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZSxcclxuICBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zLFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFR5cGVkU3RhcnRMaXN0ZW5pbmcsXHJcbiAgVHlwZWRBZGRMaXN0ZW5lcixcclxuICBUeXBlZFN0b3BMaXN0ZW5pbmcsXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zLFxyXG4gIEZvcmtlZFRhc2tFeGVjdXRvcixcclxuICBGb3JrZWRUYXNrLFxyXG4gIEZvcmtlZFRhc2tBUEksXHJcbiAgQXN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgU3luY1Rhc2tFeGVjdXRvcixcclxuICBUYXNrQ2FuY2VsbGVkLFxyXG4gIFRhc2tSZWplY3RlZCxcclxuICBUYXNrUmVzb2x2ZWQsXHJcbiAgVGFza1Jlc3VsdCxcclxufSBmcm9tICcuL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleCdcclxuZXhwb3J0IHR5cGUgeyBBbnlMaXN0ZW5lclByZWRpY2F0ZSB9IGZyb20gJy4vbGlzdGVuZXJNaWRkbGV3YXJlL3R5cGVzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgYWRkTGlzdGVuZXIsXHJcbiAgcmVtb3ZlTGlzdGVuZXIsXHJcbiAgY2xlYXJBbGxMaXN0ZW5lcnMsXHJcbiAgVGFza0Fib3J0RXJyb3IsXHJcbn0gZnJvbSAnLi9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgnXHJcblxyXG5leHBvcnQge1xyXG4gIFNIT1VMRF9BVVRPQkFUQ0gsXHJcbiAgcHJlcGFyZUF1dG9CYXRjaGVkLFxyXG4gIGF1dG9CYXRjaEVuaGFuY2VyLFxyXG59IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcbmV4cG9ydCB0eXBlIHsgQXV0b0JhdGNoT3B0aW9ucyB9IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcblxyXG5leHBvcnQgdHlwZSB7IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnMgYXMgVFNIZWxwZXJzRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG4iLCAiaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5cclxuLyoqXHJcbiAqIFwiRHJhZnQtU2FmZVwiIHZlcnNpb24gb2YgYHJlc2VsZWN0YCdzIGBjcmVhdGVTZWxlY3RvcmA6XHJcbiAqIElmIGFuIGBpbW1lcmAtZHJhZnRlZCBvYmplY3QgaXMgcGFzc2VkIGludG8gdGhlIHJlc3VsdGluZyBzZWxlY3RvcidzIGZpcnN0IGFyZ3VtZW50LFxyXG4gKiB0aGUgc2VsZWN0b3Igd2lsbCBhY3Qgb24gdGhlIGN1cnJlbnQgZHJhZnQgdmFsdWUsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgY2FjaGVkIHZhbHVlXHJcbiAqIHRoYXQgbWlnaHQgYmUgcG9zc2libHkgb3V0ZGF0ZWQgaWYgdGhlIGRyYWZ0IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3I6IHR5cGVvZiBjcmVhdGVTZWxlY3RvciA9IChcclxuICAuLi5hcmdzOiB1bmtub3duW11cclxuKSA9PiB7XHJcbiAgY29uc3Qgc2VsZWN0b3IgPSAoY3JlYXRlU2VsZWN0b3IgYXMgYW55KSguLi5hcmdzKVxyXG4gIGNvbnN0IHdyYXBwZWRTZWxlY3RvciA9ICh2YWx1ZTogdW5rbm93biwgLi4ucmVzdDogdW5rbm93bltdKSA9PlxyXG4gICAgc2VsZWN0b3IoaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlLCAuLi5yZXN0KVxyXG4gIHJldHVybiB3cmFwcGVkU2VsZWN0b3IgYXMgYW55XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBSZWR1Y2VyLFxyXG4gIFJlZHVjZXJzTWFwT2JqZWN0LFxyXG4gIE1pZGRsZXdhcmUsXHJcbiAgQWN0aW9uLFxyXG4gIEFueUFjdGlvbixcclxuICBTdG9yZUVuaGFuY2VyLFxyXG4gIFN0b3JlLFxyXG4gIERpc3BhdGNoLFxyXG4gIFByZWxvYWRlZFN0YXRlLFxyXG4gIENvbWJpbmVkU3RhdGUsXHJcbn0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21wb3NlLCBhcHBseU1pZGRsZXdhcmUsIGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIGFzIERldlRvb2xzT3B0aW9ucyB9IGZyb20gJy4vZGV2dG9vbHNFeHRlbnNpb24nXHJcbmltcG9ydCB7IGNvbXBvc2VXaXRoRGV2VG9vbHMgfSBmcm9tICcuL2RldnRvb2xzRXh0ZW5zaW9uJ1xyXG5cclxuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgVGh1bmtNaWRkbGV3YXJlRm9yLFxyXG4gIEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSxcclxufSBmcm9tICcuL2dldERlZmF1bHRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIH0gZnJvbSAnLi9nZXREZWZhdWx0TWlkZGxld2FyZSdcclxuaW1wb3J0IHR5cGUge1xyXG4gIE5vSW5mZXIsXHJcbiAgRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyxcclxuICBFeHRyYWN0U3RvcmVFeHRlbnNpb25zLFxyXG4gIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IEVuaGFuY2VyQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlLCB0byBiZSB1c2VkIGluIGBDb25maWd1cmVTdG9yZU9wdGlvbnMuZW5oYW5jZXJzYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjazxFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzPiA9IChcclxuICBkZWZhdWx0RW5oYW5jZXJzOiBFbmhhbmNlckFycmF5PFtTdG9yZUVuaGFuY2VyPHt9LCB7fT5dPlxyXG4pID0+IEVcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY29uZmlndXJlU3RvcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJlU3RvcmVPcHRpb25zPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBNaWRkbGV3YXJlczxTPixcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIEEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3QgcmVkdWNlciwgb3IgYW5cclxuICAgKiBvYmplY3Qgb2Ygc2xpY2UgcmVkdWNlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBgY29tYmluZVJlZHVjZXJzKClgLlxyXG4gICAqL1xyXG4gIHJlZHVjZXI6IFJlZHVjZXI8UywgQT4gfCBSZWR1Y2Vyc01hcE9iamVjdDxTLCBBPlxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBSZWR1eCBtaWRkbGV3YXJlIHRvIGluc3RhbGwuIElmIG5vdCBzdXBwbGllZCwgZGVmYXVsdHMgdG9cclxuICAgKiB0aGUgc2V0IG9mIG1pZGRsZXdhcmUgcmV0dXJuZWQgYnkgYGdldERlZmF1bHRNaWRkbGV3YXJlKClgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgYG1pZGRsZXdhcmU6IChnRE0pID0+IGdETSgpLmNvbmNhdChsb2dnZXIsIGFwaU1pZGRsZXdhcmUsIHlvdXJDdXN0b21NaWRkbGV3YXJlKWBcclxuICAgKiBAc2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlI2ludGVuZGVkLXVzYWdlXHJcbiAgICovXHJcbiAgbWlkZGxld2FyZT86ICgoZ2V0RGVmYXVsdE1pZGRsZXdhcmU6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPikgPT4gTSkgfCBNXHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIFJlZHV4IERldlRvb2xzIGludGVncmF0aW9uLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGRvbmUgYnkgcGFzc2luZyBSZWR1eCBEZXZUb29scyBvcHRpb25zXHJcbiAgICovXHJcbiAgZGV2VG9vbHM/OiBib29sZWFuIHwgRGV2VG9vbHNPcHRpb25zXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlLCBzYW1lIGFzIFJlZHV4J3MgY3JlYXRlU3RvcmUuXHJcbiAgICogWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXQgdG8gaHlkcmF0ZSB0aGUgc3RhdGVcclxuICAgKiBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWRcclxuICAgKiB1c2VyIHNlc3Npb24uIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2VycygpYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXJcclxuICAgKiBmdW5jdGlvbiAoZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgcGFzc2luZyBhbiBvYmplY3QgYXMgYHJlZHVjZXJgKSxcclxuICAgKiB0aGlzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgdGhlIHJlZHVjZXIgbWFwIGtleXMuXHJcbiAgICovXHJcbiAgLypcclxuICBOb3QgMTAwJSBjb3JyZWN0IGJ1dCB0aGUgYmVzdCBhcHByb3hpbWF0aW9uIHdlIGNhbiBnZXQ6XHJcbiAgLSBpZiBTIGlzIGEgYENvbWJpbmVkU3RhdGVgIGFwcGx5aW5nIGEgc2Vjb25kIGBDb21iaW5lZFN0YXRlYCBvbiBpdCBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcuXHJcbiAgLSBpZiBpdCBpcyBub3QsIHRoZXJlIGNvdWxkIGJlIHR3byBjYXNlczpcclxuICAgIC0gYFJlZHVjZXJzTWFwT2JqZWN0PFMsIEE+YCBpcyBiZWluZyBwYXNzZWQgaW4uIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBjYWxsIGBjb21iaW5lUmVkdWNlcnNgIG9uIGl0IGFuZCBgQ29tYmluZWRTdGF0ZTxTPmAgaXMgY29ycmVjdFxyXG4gICAgLSBgUmVkdWNlcjxTLCBBPmAgaXMgYmVpbmcgcGFzc2VkIGluLiBJbiB0aGlzIGNhc2UsIGFjdHVhbGx5IGBDb21iaW5lZFN0YXRlPFM+YCBpcyB3cm9uZyBhbmQgYFNgIHdvdWxkIGJlIGNvcnJlY3QuXHJcbiAgICBBcyB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMgd2l0aG91dCBhZGRpbmcgYW5vdGhlciBnZW5lcmljIHBhcmFtZXRlcixcclxuICAgIHdlIGp1c3QgbWFrZSB0aGUgcHJhZ21hdGljIGFzc3VtcHRpb24gdGhhdCB0aGUgbGF0dGVyIGFsbW9zdCBuZXZlciBoYXBwZW5zLlxyXG4gICovXHJcbiAgcHJlbG9hZGVkU3RhdGU/OiBQcmVsb2FkZWRTdGF0ZTxDb21iaW5lZFN0YXRlPE5vSW5mZXI8Uz4+PlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RvcmUgZW5oYW5jZXJzIHRvIGFwcGx5LiBTZWUgUmVkdXgncyBgY3JlYXRlU3RvcmUoKWAuXHJcbiAgICogQWxsIGVuaGFuY2VycyB3aWxsIGJlIGluY2x1ZGVkIGJlZm9yZSB0aGUgRGV2VG9vbHMgRXh0ZW5zaW9uIGVuaGFuY2VyLlxyXG4gICAqIElmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgb3JkZXIgb2YgZW5oYW5jZXJzLCBzdXBwbHkgYSBjYWxsYmFja1xyXG4gICAqIGZ1bmN0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBvcmlnaW5hbCBhcnJheSAoaWUsIGBbYXBwbHlNaWRkbGV3YXJlXWApLFxyXG4gICAqIGFuZCBzaG91bGQgcmV0dXJuIGEgbmV3IGFycmF5IChzdWNoIGFzIGBbYXBwbHlNaWRkbGV3YXJlLCBvZmZsaW5lXWApLlxyXG4gICAqIElmIHlvdSBvbmx5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUsIHlvdSBjYW4gdXNlIHRoZSBgbWlkZGxld2FyZWAgcGFyYW1ldGVyIGluc3RlYWQuXHJcbiAgICovXHJcbiAgZW5oYW5jZXJzPzogRSB8IENvbmZpZ3VyZUVuaGFuY2Vyc0NhbGxiYWNrPEU+XHJcbn1cclxuXHJcbnR5cGUgTWlkZGxld2FyZXM8Uz4gPSBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8e30sIFM+PlxyXG5cclxudHlwZSBFbmhhbmNlcnMgPSBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRTdG9yZTxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gTWlkZGxld2FyZXM8Uz5cclxuPiBleHRlbmRzIFN0b3JlPFMsIEE+IHtcclxuICAvKipcclxuICAgKiBUaGUgYGRpc3BhdGNoYCBtZXRob2Qgb2YgeW91ciBzdG9yZSwgZW5oYW5jZWQgYnkgYWxsIGl0cyBtaWRkbGV3YXJlcy5cclxuICAgKlxyXG4gICAqIEBpbmhlcml0ZG9jXHJcbiAgICovXHJcbiAgZGlzcGF0Y2g6IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gJiBEaXNwYXRjaDxBPlxyXG59XHJcblxyXG4vKipcclxuICogQSBSZWR1eCBzdG9yZSByZXR1cm5lZCBieSBgY29uZmlndXJlU3RvcmUoKWAuIFN1cHBvcnRzIGRpc3BhdGNoaW5nXHJcbiAqIHNpZGUtZWZmZWN0ZnVsIF90aHVua3NfIGluIGFkZGl0aW9uIHRvIHBsYWluIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3RvcmU8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IE1pZGRsZXdhcmVzPFM+LFxyXG4gIEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBFbmhhbmNlcnNcclxuPiA9IFRvb2xraXRTdG9yZTxTICYgRXh0cmFjdFN0YXRlRXh0ZW5zaW9uczxFPiwgQSwgTT4gJlxyXG4gIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnM8RT5cclxuXHJcbi8qKlxyXG4gKiBBIGZyaWVuZGx5IGFic3RyYWN0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIFJlZHV4IGBjcmVhdGVTdG9yZSgpYCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHN0b3JlIGNvbmZpZ3VyYXRpb24uXHJcbiAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBSZWR1eCBzdG9yZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVN0b3JlPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBbVGh1bmtNaWRkbGV3YXJlRm9yPFM+XSxcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gW1N0b3JlRW5oYW5jZXJdXHJcbj4ob3B0aW9uczogQ29uZmlndXJlU3RvcmVPcHRpb25zPFMsIEEsIE0sIEU+KTogRW5oYW5jZWRTdG9yZTxTLCBBLCBNLCBFPiB7XHJcbiAgY29uc3QgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZTxTPigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHJlZHVjZXIgPSB1bmRlZmluZWQsXHJcbiAgICBtaWRkbGV3YXJlID0gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCksXHJcbiAgICBkZXZUb29scyA9IHRydWUsXHJcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZCxcclxuICAgIGVuaGFuY2VycyA9IHVuZGVmaW5lZCxcclxuICB9ID0gb3B0aW9ucyB8fCB7fVxyXG5cclxuICBsZXQgcm9vdFJlZHVjZXI6IFJlZHVjZXI8UywgQT5cclxuXHJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByb290UmVkdWNlciA9IHJlZHVjZXJcclxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpIGFzIHVua25vd24gYXMgUmVkdWNlcjxTLCBBPlxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycydcclxuICAgIClcclxuICB9XHJcblxyXG4gIGxldCBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlXHJcbiAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpXHJcblxyXG4gICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICd3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWQnXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKFxyXG4gICAgIUlTX1BST0RVQ1RJT04gJiZcclxuICAgIGZpbmFsTWlkZGxld2FyZS5zb21lKChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKVxyXG4gICkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmVFbmhhbmNlcjogU3RvcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZSguLi5maW5hbE1pZGRsZXdhcmUpXHJcblxyXG4gIGxldCBmaW5hbENvbXBvc2UgPSBjb21wb3NlXHJcblxyXG4gIGlmIChkZXZUb29scykge1xyXG4gICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyh7XHJcbiAgICAgIC8vIEVuYWJsZSBjYXB0dXJlIG9mIHN0YWNrIHRyYWNlcyBmb3IgZGlzcGF0Y2hlZCBSZWR1eCBhY3Rpb25zXHJcbiAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTixcclxuICAgICAgLi4uKHR5cGVvZiBkZXZUb29scyA9PT0gJ29iamVjdCcgJiYgZGV2VG9vbHMpLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0IGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpXHJcbiAgbGV0IHN0b3JlRW5oYW5jZXJzOiBFbmhhbmNlcnMgPSBkZWZhdWx0RW5oYW5jZXJzXHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgIHN0b3JlRW5oYW5jZXJzID0gW21pZGRsZXdhcmVFbmhhbmNlciwgLi4uZW5oYW5jZXJzXVxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuaGFuY2VycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgc3RvcmVFbmhhbmNlcnMgPSBlbmhhbmNlcnMoZGVmYXVsdEVuaGFuY2VycylcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UoLi4uc3RvcmVFbmhhbmNlcnMpIGFzIFN0b3JlRW5oYW5jZXI8YW55PlxyXG5cclxuICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uQ3JlYXRvciwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAncmVkdXgnXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogdGhlIGluc3RhbmNlIG5hbWUgdG8gYmUgc2hvd2VkIG9uIHRoZSBtb25pdG9yIHBhZ2UuIERlZmF1bHQgdmFsdWUgaXMgYGRvY3VtZW50LnRpdGxlYC5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkIGFuZCB0aGVyZSdzIG5vIGRvY3VtZW50IHRpdGxlLCBpdCB3aWxsIGNvbnNpc3Qgb2YgYHRhYklkYCBhbmQgYGluc3RhbmNlSWRgLlxyXG4gICAqL1xyXG4gIG5hbWU/OiBzdHJpbmdcclxuICAvKipcclxuICAgKiBhY3Rpb24gY3JlYXRvcnMgZnVuY3Rpb25zIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgRGlzcGF0Y2hlci5cclxuICAgKi9cclxuICBhY3Rpb25DcmVhdG9ycz86IEFjdGlvbkNyZWF0b3I8YW55PltdIHwgeyBba2V5OiBzdHJpbmddOiBBY3Rpb25DcmVhdG9yPGFueT4gfVxyXG4gIC8qKlxyXG4gICAqIGlmIG1vcmUgdGhhbiBvbmUgYWN0aW9uIGlzIGRpc3BhdGNoZWQgaW4gdGhlIGluZGljYXRlZCBpbnRlcnZhbCwgYWxsIG5ldyBhY3Rpb25zIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBzZW50IGF0IG9uY2UuXHJcbiAgICogSXQgaXMgdGhlIGpvaW50IGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIHNwZWVkLiBXaGVuIHNldCB0byBgMGAsIGFsbCBhY3Rpb25zIHdpbGwgYmUgc2VudCBpbnN0YW50bHkuXHJcbiAgICogU2V0IGl0IHRvIGEgaGlnaGVyIHZhbHVlIHdoZW4gZXhwZXJpZW5jaW5nIHBlcmYgaXNzdWVzIChhbHNvIGBtYXhBZ2VgIHRvIGEgbG93ZXIgdmFsdWUpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgNTAwIG1zLlxyXG4gICAqL1xyXG4gIGxhdGVuY3k/OiBudW1iZXJcclxuICAvKipcclxuICAgKiAoPiAxKSAtIG1heGltdW0gYWxsb3dlZCBhY3Rpb25zIHRvIGJlIHN0b3JlZCBpbiB0aGUgaGlzdG9yeSB0cmVlLiBUaGUgb2xkZXN0IGFjdGlvbnMgYXJlIHJlbW92ZWQgb25jZSBtYXhBZ2UgaXMgcmVhY2hlZC4gSXQncyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCA1MFxyXG4gICAqL1xyXG4gIG1heEFnZT86IG51bWJlclxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbWl6ZXMgaG93IGFjdGlvbnMgYW5kIHN0YXRlIGFyZSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQuIENhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0LiBJZiBnaXZlbiBhIGJvb2xlYW4sIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBpZiB5b3VcclxuICAgKiB3ZXJlIHRvIHBhc3MgYW4gb2JqZWN0IGFuZCBzcGVjaWZ5IGBvcHRpb25zYCBhcyBhIGJvb2xlYW4uIEdpdmluZyBhbiBvYmplY3QgYWxsb3dzIGZpbmUtZ3JhaW5lZCBjdXN0b21pemF0aW9uIHVzaW5nIHRoZSBgcmVwbGFjZXJgIGFuZCBgcmV2aXZlcmBcclxuICAgKiBmdW5jdGlvbnMuXHJcbiAgICovXHJcbiAgc2VyaWFsaXplPzpcclxuICAgIHwgYm9vbGVhblxyXG4gICAgfCB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogLSBgdW5kZWZpbmVkYCAtIHdpbGwgdXNlIHJlZ3VsYXIgYEpTT04uc3RyaW5naWZ5YCB0byBzZW5kIGRhdGEgKGl0J3MgdGhlIGZhc3QgbW9kZSkuXHJcbiAgICAgICAgICogLSBgZmFsc2VgIC0gd2lsbCBoYW5kbGUgYWxzbyBjaXJjdWxhciByZWZlcmVuY2VzLlxyXG4gICAgICAgICAqIC0gYHRydWVgIC0gd2lsbCBoYW5kbGUgYWxzbyBkYXRlLCByZWdleCwgdW5kZWZpbmVkLCBlcnJvciBvYmplY3RzLCBzeW1ib2xzLCBtYXBzLCBzZXRzIGFuZCBmdW5jdGlvbnMuXHJcbiAgICAgICAgICogLSBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIGBkYXRlYCwgYHJlZ2V4YCwgYHVuZGVmaW5lZGAsIGBlcnJvcmAsIGBzeW1ib2xgLCBgbWFwYCwgYHNldGAgYW5kIGBmdW5jdGlvbmAga2V5cy5cclxuICAgICAgICAgKiAgIEZvciBlYWNoIG9mIHRoZW0geW91IGNhbiBpbmRpY2F0ZSBpZiB0byBpbmNsdWRlIChieSBzZXR0aW5nIGFzIGB0cnVlYCkuXHJcbiAgICAgICAgICogICBGb3IgYGZ1bmN0aW9uYCBrZXkgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyBzZXJpYWxpemF0aW9uLlxyXG4gICAgICAgICAqICAgU2VlIFtganNhbmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9rb2xvZG55L2pzYW4pIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3B0aW9ucz86XHJcbiAgICAgICAgICB8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfCBib29sZWFuXHJcbiAgICAgICAgICB8IHtcclxuICAgICAgICAgICAgICBkYXRlPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHJlZ2V4PzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHVuZGVmaW5lZD86IHRydWVcclxuICAgICAgICAgICAgICBlcnJvcj86IHRydWVcclxuICAgICAgICAgICAgICBzeW1ib2w/OiB0cnVlXHJcbiAgICAgICAgICAgICAgbWFwPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHNldD86IHRydWVcclxuICAgICAgICAgICAgICBmdW5jdGlvbj86IHRydWUgfCAoKGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSkgPT4gc3RyaW5nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW0pTT04gcmVwbGFjZXIgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5I1RoZV9yZXBsYWNlcl9wYXJhbWV0ZXIpIHVzZWQgZm9yIGJvdGggYWN0aW9ucyBhbmQgc3RhdGVzIHN0cmluZ2lmeS5cclxuICAgICAgICAgKiBJbiBhZGRpdGlvbiwgeW91IGNhbiBzcGVjaWZ5IGEgZGF0YSB0eXBlIGJ5IGFkZGluZyBhIFtgX19zZXJpYWxpemVkVHlwZV9fYF0oaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVtb3RlZGV2LXNlcmlhbGl6ZS9ibG9iL21hc3Rlci9oZWxwZXJzL2luZGV4LmpzI0w0KVxyXG4gICAgICAgICAqIGtleS4gU28geW91IGNhbiBkZXNlcmlhbGl6ZSBpdCBiYWNrIHdoaWxlIGltcG9ydGluZyBvciBwZXJzaXN0aW5nIGRhdGEuXHJcbiAgICAgICAgICogTW9yZW92ZXIsIGl0IHdpbGwgYWxzbyBbc2hvdyBhIG5pY2UgcHJldmlldyBzaG93aW5nIHRoZSBwcm92aWRlZCBjdXN0b20gdHlwZV0oaHR0cHM6Ly9jbG91ZC5naXRodWJ1c2VyY29udGVudC5jb20vYXNzZXRzLzc5NTc4NTkvMjE4MTQzMzAvYTE3ZDU1NmEtZDc2MS0xMWU2LTg1ZWYtMTU5ZGQxMmYzNmM1LnBuZyk6XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVwbGFjZXI/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBhbnlcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbSlNPTiBgcmV2aXZlcmAgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vcGFyc2UjVXNpbmdfdGhlX3Jldml2ZXJfcGFyYW1ldGVyKVxyXG4gICAgICAgICAqIHVzZWQgZm9yIHBhcnNpbmcgdGhlIGltcG9ydGVkIGFjdGlvbnMgYW5kIHN0YXRlcy4gU2VlIFtgcmVtb3RlZGV2LXNlcmlhbGl6ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS96YWxtb3hpc3VzL3JlbW90ZWRldi1zZXJpYWxpemUvYmxvYi9tYXN0ZXIvaW1tdXRhYmxlL3NlcmlhbGl6ZS5qcyNMOC1MNDEpXHJcbiAgICAgICAgICogYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gc2VyaWFsaXplIHNwZWNpYWwgZGF0YSB0eXBlcyBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZXZpdmVyPzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gYW55XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBzZXJpYWxpemUvZGVzZXJpYWxpemUgaW1tdXRhYmxlanMgdmlhIFtyZW1vdGVkZXYtc2VyaWFsaXplXShodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZW1vdGVkZXYtc2VyaWFsaXplKS5cclxuICAgICAgICAgKiBKdXN0IHBhc3MgdGhlIEltbXV0YWJsZSBsaWJyYXJ5LiBJdCB3aWxsIHN1cHBvcnQgYWxsIEltbXV0YWJsZUpTIHN0cnVjdHVyZXMuIFlvdSBjYW4gZXZlbiBleHBvcnQgdGhlbSBpbnRvIGEgZmlsZSBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKiBUaGUgb25seSBleGNlcHRpb24gaXMgYFJlY29yZGAgY2xhc3MsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHBhc3MgdGhpcyBpbiBhZGRpdGlvbiB0aGUgcmVmZXJlbmNlcyB0byB5b3VyIGNsYXNzZXMgaW4gYHJlZnNgLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltbXV0YWJsZT86IGFueVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEltbXV0YWJsZUpTIGBSZWNvcmRgIGNsYXNzZXMgdXNlZCB0byBtYWtlIHBvc3NpYmxlIHJlc3RvcmUgaXRzIGluc3RhbmNlcyBiYWNrIHdoZW4gaW1wb3J0aW5nLCBwZXJzaXN0aW5nLi4uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVmcz86IGFueVxyXG4gICAgICB9XHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYGFjdGlvbmAgb2JqZWN0IGFuZCBpZCBudW1iZXIgYXMgYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBgYWN0aW9uYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBhY3Rpb25TYW5pdGl6ZXI/OiA8QSBleHRlbmRzIEFjdGlvbj4oYWN0aW9uOiBBLCBpZDogbnVtYmVyKSA9PiBBXHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYHN0YXRlYCBvYmplY3QgYW5kIGluZGV4IGFzIGFyZ3VtZW50cywgYW5kIHNob3VsZCByZXR1cm4gYHN0YXRlYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBzdGF0ZVNhbml0aXplcj86IDxTPihzdGF0ZTogUywgaW5kZXg6IG51bWJlcikgPT4gU1xyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNEZW55bGlzdCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNCbGFja2xpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNBbGxvd2xpc3QgaW5zdGVhZC5cclxuICAgKi9cclxuICBhY3Rpb25zV2hpdGVsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0RlbnlsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0FsbG93bGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogY2FsbGVkIGZvciBldmVyeSBhY3Rpb24gYmVmb3JlIHNlbmRpbmcsIHRha2VzIGBzdGF0ZWAgYW5kIGBhY3Rpb25gIG9iamVjdCwgYW5kIHJldHVybnMgYHRydWVgIGluIGNhc2UgaXQgYWxsb3dzIHNlbmRpbmcgdGhlIGN1cnJlbnQgZGF0YSB0byB0aGUgbW9uaXRvci5cclxuICAgKiBVc2UgaXQgYXMgYSBtb3JlIGFkdmFuY2VkIHZlcnNpb24gb2YgYGFjdGlvbnNEZW55bGlzdGAvYGFjdGlvbnNBbGxvd2xpc3RgIHBhcmFtZXRlcnMuXHJcbiAgICovXHJcbiAgcHJlZGljYXRlPzogPFMsIEEgZXh0ZW5kcyBBY3Rpb24+KHN0YXRlOiBTLCBhY3Rpb246IEEpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYGZhbHNlYCwgaXQgd2lsbCBub3QgcmVjb3JkIHRoZSBjaGFuZ2VzIHRpbGwgY2xpY2tpbmcgb24gYFN0YXJ0IHJlY29yZGluZ2AgYnV0dG9uLlxyXG4gICAqIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlciwgZm9yIG90aGVycyB1c2UgYGF1dG9QYXVzZWAuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkUmVjb3JkQ2hhbmdlcz86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQsIHdoZW5ldmVyIGNsaWNraW5nIG9uIGBQYXVzZSByZWNvcmRpbmdgIGJ1dHRvbiBhbmQgdGhlcmUgYXJlIGFjdGlvbnMgaW4gdGhlIGhpc3RvcnkgbG9nLCB3aWxsIGFkZCB0aGlzIGFjdGlvbiB0eXBlLlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgY29tbWl0IHdoZW4gcGF1c2VkLiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBcIkBAUEFVU0VEXCJcIlxyXG4gICAqL1xyXG4gIHBhdXNlQWN0aW9uVHlwZT86IHN0cmluZ1xyXG4gIC8qKlxyXG4gICAqIGF1dG8gcGF1c2VzIHdoZW4gdGhlIGV4dGVuc2lvbuKAmXMgd2luZG93IGlzIG5vdCBvcGVuZWQsIGFuZCBzbyBoYXMgemVybyBpbXBhY3Qgb24geW91ciBhcHAgd2hlbiBub3QgaW4gdXNlLlxyXG4gICAqIE5vdCBhdmFpbGFibGUgZm9yIFJlZHV4IGVuaGFuY2VyIChhcyBpdCBhbHJlYWR5IGRvZXMgaXQgYnV0IHN0b3JpbmcgdGhlIGRhdGEgdG8gYmUgc2VudCkuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGF1dG9QYXVzZT86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYHRydWVgLCBpdCB3aWxsIG5vdCBhbGxvdyBhbnkgbm9uLW1vbml0b3IgYWN0aW9ucyB0byBiZSBkaXNwYXRjaGVkIHRpbGwgY2xpY2tpbmcgb24gYFVubG9jayBjaGFuZ2VzYCBidXR0b24uXHJcbiAgICogQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBzaG91bGRTdGFydExvY2tlZD86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzZXQgdG8gYGZhbHNlYCwgd2lsbCBub3QgcmVjb21wdXRlIHRoZSBzdGF0ZXMgb24gaG90IHJlbG9hZGluZyAob3Igb24gcmVwbGFjaW5nIHRoZSByZWR1Y2VycykuIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlci5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzaG91bGRIb3RSZWxvYWQ/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkIGFzIGB0cnVlYCwgd2hlbmV2ZXIgdGhlcmUncyBhbiBleGNlcHRpb24gaW4gcmVkdWNlcnMsIHRoZSBtb25pdG9ycyB3aWxsIHNob3cgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCBuZXh0IGFjdGlvbnMgd2lsbCBub3QgYmUgZGlzcGF0Y2hlZC5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgc2hvdWxkQ2F0Y2hFcnJvcnM/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgdGhlIGV4dGVuc2lvbiwgc3BlY2lmeSB0aGUgZmVhdHVyZXMgeW91IGFsbG93LlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFdoZW4gc2V0IGFzIGFuIG9iamVjdCwgb25seSB0aG9zZSBpbmNsdWRlZCBhcyBgdHJ1ZWAgd2lsbCBiZSBhbGxvd2VkLlxyXG4gICAqIE5vdGUgdGhhdCBleGNlcHQgYHRydWVgL2BmYWxzZWAsIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBjYW4gYmUgc2V0IGFzIGBjdXN0b21gICh3aGljaCBpcyBieSBkZWZhdWx0IGZvciBSZWR1eCBlbmhhbmNlciksIG1lYW5pbmcgdGhhdCB0aGUgaW1wb3J0aW5nL2V4cG9ydGluZyBvY2N1cnMgb24gdGhlIGNsaWVudCBzaWRlLlxyXG4gICAqIE90aGVyd2lzZSwgeW91J2xsIGdldC9zZXQgdGhlIGRhdGEgcmlnaHQgZnJvbSB0aGUgbW9uaXRvciBwYXJ0LlxyXG4gICAqL1xyXG4gIGZlYXR1cmVzPzoge1xyXG4gICAgLyoqXHJcbiAgICAgKiBzdGFydC9wYXVzZSByZWNvcmRpbmcgb2YgZGlzcGF0Y2hlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHBhdXNlPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBsb2NrL3VubG9jayBkaXNwYXRjaGluZyBhY3Rpb25zIGFuZCBzaWRlIGVmZmVjdHNcclxuICAgICAqL1xyXG4gICAgbG9jaz86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogcGVyc2lzdCBzdGF0ZXMgb24gcGFnZSByZWxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgcGVyc2lzdD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZXhwb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBpbiBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgZXhwb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGltcG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgZnJvbSBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgaW1wb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGp1bXAgYmFjayBhbmQgZm9ydGggKHRpbWUgdHJhdmVsbGluZylcclxuICAgICAqL1xyXG4gICAganVtcD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogc2tpcCAoY2FuY2VsKSBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHNraXA/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRyYWcgYW5kIGRyb3AgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHJlb3JkZXI/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BhdGNoIGN1c3RvbSBhY3Rpb25zIG9yIGFjdGlvbiBjcmVhdG9yc1xyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZ2VuZXJhdGUgdGVzdHMgZm9yIHRoZSBzZWxlY3RlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHRlc3Q/OiBib29sZWFuXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIG9yIGEgc3RhY2t0cmFjZS1yZXR1cm5pbmcgZnVuY3Rpb24gdG8gcmVjb3JkIGNhbGwgc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIGFjdGlvbnMuXHJcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICovXHJcbiAgdHJhY2U/OiBib29sZWFuIHwgKDxBIGV4dGVuZHMgQWN0aW9uPihhY3Rpb246IEEpID0+IHN0cmluZylcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sgdHJhY2UgZW50cmllcyB0byByZWNvcmQgcGVyIGFjdGlvbi4gRGVmYXVsdHMgdG8gMTAuXHJcbiAgICovXHJcbiAgdHJhY2VMaW1pdD86IG51bWJlclxyXG59XHJcblxyXG50eXBlIENvbXBvc2UgPSB0eXBlb2YgY29tcG9zZVxyXG5cclxuaW50ZXJmYWNlIENvbXBvc2VXaXRoRGV2VG9vbHMge1xyXG4gIChvcHRpb25zOiBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyk6IENvbXBvc2VcclxuICA8U3RvcmVFeHQ+KC4uLmZ1bmNzOiBTdG9yZUVuaGFuY2VyPFN0b3JlRXh0PltdKTogU3RvcmVFbmhhbmNlcjxTdG9yZUV4dD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb21wb3NlV2l0aERldlRvb2xzOiBDb21wb3NlV2l0aERldlRvb2xzID1cclxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfX1xyXG4gICAgOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHJldHVybiBjb21wb3NlXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzIGFzIGFueSBhcyBGdW5jdGlvbltdKVxyXG4gICAgICB9XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRldlRvb2xzRW5oYW5jZXI6IHtcclxuICAob3B0aW9uczogRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMpOiBTdG9yZUVuaGFuY2VyPGFueT5cclxufSA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9vcCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5vb3BcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuIiwgIi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBcInBsYWluXCIgb2JqZWN0LCBpLmUuIGFuIG9iamVjdCB3aG9zZVxyXG4gKiBwcm90b3R5cGUgaXMgdGhlIHJvb3QgYE9iamVjdC5wcm90b3R5cGVgLiBUaGlzIGluY2x1ZGVzIG9iamVjdHMgY3JlYXRlZFxyXG4gKiB1c2luZyBvYmplY3QgbGl0ZXJhbHMsIGJ1dCBub3QgZm9yIGluc3RhbmNlIGZvciBjbGFzcyBpbnN0YW5jZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBvYmplY3Qge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxyXG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWVcclxuXHJcbiAgbGV0IGJhc2VQcm90byA9IHByb3RvXHJcbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3RvID09PSBiYXNlUHJvdG9cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua01pZGRsZXdhcmUgfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4vKiBQUk9EX1NUQVJUX1JFTU9WRV9VTUQgKi9cclxuaW1wb3J0IHsgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbi8qIFBST0RfU1RPUF9SRU1PVkVfVU1EICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUZyb21UdXBsZSB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBNaWRkbGV3YXJlQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZnVuY3Rpb24gaXNCb29sZWFuKHg6IGFueSk6IHggaXMgYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnYm9vbGVhbidcclxufVxyXG5cclxuaW50ZXJmYWNlIFRodW5rT3B0aW9uczxFID0gYW55PiB7XHJcbiAgZXh0cmFBcmd1bWVudDogRVxyXG59XHJcblxyXG5pbnRlcmZhY2UgR2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICB0aHVuaz86IGJvb2xlYW4gfCBUaHVua09wdGlvbnNcclxuICBpbW11dGFibGVDaGVjaz86IGJvb2xlYW4gfCBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zXHJcbiAgc2VyaWFsaXphYmxlQ2hlY2s/OiBib29sZWFuIHwgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9uc1xyXG4gIGFjdGlvbkNyZWF0b3JDaGVjaz86IGJvb2xlYW4gfCBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVGh1bmtNaWRkbGV3YXJlRm9yPFxyXG4gIFMsXHJcbiAgTyBleHRlbmRzIEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbj4gPSBPIGV4dGVuZHMge1xyXG4gIHRodW5rOiBmYWxzZVxyXG59XHJcbiAgPyBuZXZlclxyXG4gIDogTyBleHRlbmRzIHsgdGh1bms6IHsgZXh0cmFBcmd1bWVudDogaW5mZXIgRSB9IH1cclxuICA/IFRodW5rTWlkZGxld2FyZTxTLCBBbnlBY3Rpb24sIEU+XHJcbiAgOiBUaHVua01pZGRsZXdhcmU8UywgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlPFMgPSBhbnk+ID0gPFxyXG4gIE8gZXh0ZW5kcyBQYXJ0aWFsPEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucz4gPSB7XHJcbiAgICB0aHVuazogdHJ1ZVxyXG4gICAgaW1tdXRhYmxlQ2hlY2s6IHRydWVcclxuICAgIHNlcmlhbGl6YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2s6IHRydWVcclxuICB9XHJcbj4oXHJcbiAgb3B0aW9ucz86IE9cclxuKSA9PiBNaWRkbGV3YXJlQXJyYXk8RXhjbHVkZUZyb21UdXBsZTxbVGh1bmtNaWRkbGV3YXJlRm9yPFMsIE8+XSwgbmV2ZXI+PlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueVxyXG4+KCk6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPiB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFueSBhcnJheSBjb250YWluaW5nIHRoZSBkZWZhdWx0IG1pZGRsZXdhcmUgaW5zdGFsbGVkIGJ5XHJcbiAqIGBjb25maWd1cmVTdG9yZSgpYC4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSB5b3VyIHN0b3JlIHdpdGggYSBjdXN0b21cclxuICogYG1pZGRsZXdhcmVgIGFycmF5IGJ1dCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IHNldC5cclxuICpcclxuICogQHJldHVybiBUaGUgZGVmYXVsdCBtaWRkbGV3YXJlIHVzZWQgYnkgYGNvbmZpZ3VyZVN0b3JlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFByZWZlciB0byB1c2UgdGhlIGNhbGxiYWNrIG5vdGF0aW9uIGZvciB0aGUgYG1pZGRsZXdhcmVgIG9wdGlvbiBpbiBgY29uZmlndXJlU3RvcmVgXHJcbiAqIHRvIGFjY2VzcyBhIHByZS10eXBlZCBgZ2V0RGVmYXVsdE1pZGRsZXdhcmVgIGluc3RlYWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueSxcclxuICBPIGV4dGVuZHMgUGFydGlhbDxHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnM+ID0ge1xyXG4gICAgdGh1bms6IHRydWVcclxuICAgIGltbXV0YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBzZXJpYWxpemFibGVDaGVjazogdHJ1ZVxyXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrOiB0cnVlXHJcbiAgfVxyXG4+KFxyXG4gIG9wdGlvbnM6IE8gPSB7fSBhcyBPXHJcbik6IE1pZGRsZXdhcmVBcnJheTxFeGNsdWRlRnJvbVR1cGxlPFtUaHVua01pZGRsZXdhcmVGb3I8UywgTz5dLCBuZXZlcj4+IHtcclxuICBjb25zdCB7XHJcbiAgICB0aHVuayA9IHRydWUsXHJcbiAgICBpbW11dGFibGVDaGVjayA9IHRydWUsXHJcbiAgICBzZXJpYWxpemFibGVDaGVjayA9IHRydWUsXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2sgPSB0cnVlLFxyXG4gIH0gPSBvcHRpb25zXHJcblxyXG4gIGxldCBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5PE1pZGRsZXdhcmVbXT4oKVxyXG5cclxuICBpZiAodGh1bmspIHtcclxuICAgIGlmIChpc0Jvb2xlYW4odGh1bmspKSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgIC8qIFBST0RfU1RBUlRfUkVNT1ZFX1VNRCAqL1xyXG4gICAgICBsZXQgaW1tdXRhYmxlT3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcblxyXG4gICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2tcclxuICAgICAgfVxyXG5cclxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoXHJcbiAgICAgICAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKGltbXV0YWJsZU9wdGlvbnMpXHJcbiAgICAgIClcclxuICAgICAgLyogUFJPRF9TVE9QX1JFTU9WRV9VTUQgKi9cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgbGV0IHNlcmlhbGl6YWJsZU9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG5cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShzZXJpYWxpemFibGVPcHRpb25zKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uQ3JlYXRvckNoZWNrKSB7XHJcbiAgICAgIGxldCBhY3Rpb25DcmVhdG9yT3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuXHJcbiAgICAgIGlmICghaXNCb29sZWFuKGFjdGlvbkNyZWF0b3JDaGVjaykpIHtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IGFjdGlvbkNyZWF0b3JDaGVja1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChcclxuICAgICAgICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShhY3Rpb25DcmVhdG9yT3B0aW9ucylcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgRW5oYW5jZXJBcnJheSwgTWlkZGxld2FyZUFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGBhbnlgLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlXHJcbiAqIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvb25ob2Noby90c2RlZlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzQW55PFQsIFRydWUsIEZhbHNlID0gbmV2ZXI+ID1cclxuICAvLyB0ZXN0IGlmIHdlIGFyZSBnb2luZyB0aGUgbGVmdCBBTkQgcmlnaHQgcGF0aCBpbiB0aGUgY29uZGl0aW9uXHJcbiAgdHJ1ZSB8IGZhbHNlIGV4dGVuZHMgKFQgZXh0ZW5kcyBuZXZlciA/IHRydWUgOiBmYWxzZSkgPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGB1bmtub3duYCwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZVxyXG4gKiB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb29uaG9jaG8vdHNkZWZcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd248VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSB1bmtub3duIGV4dGVuZHMgVFxyXG4gID8gSXNBbnk8VCwgRmFsc2UsIFRydWU+XHJcbiAgOiBGYWxzZVxyXG5cclxuZXhwb3J0IHR5cGUgRmFsbGJhY2tJZlVua25vd248VCwgRmFsbGJhY2s+ID0gSXNVbmtub3duPFQsIEZhbGxiYWNrLCBUPlxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSWZNYXliZVVuZGVmaW5lZDxQLCBUcnVlLCBGYWxzZT4gPSBbdW5kZWZpbmVkXSBleHRlbmRzIFtQXVxyXG4gID8gVHJ1ZVxyXG4gIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElmVm9pZDxQLCBUcnVlLCBGYWxzZT4gPSBbdm9pZF0gZXh0ZW5kcyBbUF0gPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzRW1wdHlPYmo8VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSBUIGV4dGVuZHMgYW55XHJcbiAgPyBrZXlvZiBUIGV4dGVuZHMgbmV2ZXJcclxuICAgID8gSXNVbmtub3duPFQsIEZhbHNlLCBJZk1heWJlVW5kZWZpbmVkPFQsIEZhbHNlLCBJZlZvaWQ8VCwgRmFsc2UsIFRydWU+Pj5cclxuICAgIDogRmFsc2VcclxuICA6IG5ldmVyXHJcblxyXG4vKipcclxuICogcmV0dXJucyBUcnVlIGlmIFRTIHZlcnNpb24gaXMgYWJvdmUgMy41LCBGYWxzZSBpZiBiZWxvdy5cclxuICogdXNlcyBmZWF0dXJlIGRldGVjdGlvbiB0byBkZXRlY3QgVFMgdmVyc2lvbiA+PSAzLjVcclxuICogKiB2ZXJzaW9ucyBiZWxvdyAzLjUgd2lsbCByZXR1cm4gYHt9YCBmb3IgdW5yZXNvbHZhYmxlIGludGVyZmVyZW5jZVxyXG4gKiAqIHZlcnNpb25zIGFib3ZlIHdpbGwgcmV0dXJuIGB1bmtub3duYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIEF0TGVhc3RUUzM1PFRydWUsIEZhbHNlPiA9IFtUcnVlLCBGYWxzZV1bSXNVbmtub3duPFxyXG4gIFJldHVyblR5cGU8PFQ+KCkgPT4gVD4sXHJcbiAgMCxcclxuICAxXHJcbj5dXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd25Pck5vbkluZmVycmFibGU8VCwgVHJ1ZSwgRmFsc2U+ID0gQXRMZWFzdFRTMzU8XHJcbiAgSXNVbmtub3duPFQsIFRydWUsIEZhbHNlPixcclxuICBJc0VtcHR5T2JqPFQsIFRydWUsIElzVW5rbm93bjxULCBUcnVlLCBGYWxzZT4+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGEgVW5pb24gdHlwZSBgKEF8QilgIHRvIGFuIGludGVyc2VjdGlvbiB0eXBlIGAoQSZCKWBcclxuICovXHJcbmV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoXHJcbiAgVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXJcclxuKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXHJcbiAgPyBJXHJcbiAgOiBuZXZlclxyXG5cclxuLy8gQXBwZWFycyB0byBoYXZlIGEgY29udmVuaWVudCBzaWRlIGVmZmVjdCBvZiBpZ25vcmluZyBgbmV2ZXJgIGV2ZW4gaWYgdGhhdCdzIG5vdCB3aGF0IHlvdSBzcGVjaWZpZWRcclxuZXhwb3J0IHR5cGUgRXhjbHVkZUZyb21UdXBsZTxULCBFLCBBY2MgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgW1xyXG4gIGluZmVyIEhlYWQsXHJcbiAgLi4uaW5mZXIgVGFpbFxyXG5dXHJcbiAgPyBFeGNsdWRlRnJvbVR1cGxlPFRhaWwsIEUsIFsuLi5BY2MsIC4uLihbSGVhZF0gZXh0ZW5kcyBbRV0gPyBbXSA6IFtIZWFkXSldPlxyXG4gIDogQWNjXHJcblxyXG50eXBlIEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8XHJcbiAgTWlkZGxld2FyZVR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IE1pZGRsZXdhcmVUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICYgKEhlYWQgZXh0ZW5kcyBNaWRkbGV3YXJlPGluZmVyIEQ+ID8gSXNBbnk8RCwge30sIEQ+IDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gPSBNIGV4dGVuZHMgTWlkZGxld2FyZUFycmF5PFxyXG4gIGluZmVyIE1pZGRsZXdhcmVUdXBsZVxyXG4+XHJcbiAgPyBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPE1pZGRsZXdhcmVUdXBsZSwge30+XHJcbiAgOiBNIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPlxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxbLi4uTV0sIHt9PlxyXG4gIDogbmV2ZXJcclxuXHJcbnR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gIEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBhbnlbXSxcclxuICBBY2MgZXh0ZW5kcyB7fVxyXG4+ID0gRW5oYW5jZXJUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gICAgICBUYWlsLFxyXG4gICAgICBBY2MgJiAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PiA/IElzQW55PEV4dCwge30sIEV4dD4gOiB7fSlcclxuICAgID5cclxuICA6IEFjY1xyXG5cclxuZXhwb3J0IHR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uczxFPiA9IEUgZXh0ZW5kcyBFbmhhbmNlckFycmF5PFxyXG4gIGluZmVyIEVuaGFuY2VyVHVwbGVcclxuPlxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPEVuaGFuY2VyVHVwbGUsIHt9PlxyXG4gIDogRSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcj5cclxuICA/IFVuaW9uVG9JbnRlcnNlY3Rpb248XHJcbiAgICAgIEVbbnVtYmVyXSBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PlxyXG4gICAgICAgID8gRXh0IGV4dGVuZHMge31cclxuICAgICAgICAgID8gSXNBbnk8RXh0LCB7fSwgRXh0PlxyXG4gICAgICAgICAgOiB7fVxyXG4gICAgICAgIDoge31cclxuICAgID5cclxuICA6IG5ldmVyXHJcblxyXG50eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICBFbmhhbmNlclR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBbaW5mZXIgSGVhZCwgLi4uaW5mZXIgVGFpbF1cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICZcclxuICAgICAgICAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBpbmZlciBTdGF0ZUV4dD5cclxuICAgICAgICAgID8gSXNBbnk8U3RhdGVFeHQsIHt9LCBTdGF0ZUV4dD5cclxuICAgICAgICAgIDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnM8RT4gPSBFIGV4dGVuZHMgRW5oYW5jZXJBcnJheTxcclxuICBpbmZlciBFbmhhbmNlclR1cGxlXHJcbj5cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxFbmhhbmNlclR1cGxlLCB7fT5cclxuICA6IEUgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcbiAgPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxyXG4gICAgICBFW251bWJlcl0gZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGFueSwgaW5mZXIgU3RhdGVFeHQ+XHJcbiAgICAgICAgPyBTdGF0ZUV4dCBleHRlbmRzIHt9XHJcbiAgICAgICAgICA/IElzQW55PFN0YXRlRXh0LCB7fSwgU3RhdGVFeHQ+XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICAgOiB7fVxyXG4gICAgPlxyXG4gIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZS4gUGFzc2VzIFQgb3V0IGFnYWluLCBidXQgYm94ZXMgaXQgaW4gYSB3YXkgdGhhdCBpdCBjYW5ub3RcclxuICogXCJ3aWRlblwiIHRoZSB0eXBlIGJ5IGFjY2lkZW50IGlmIGl0IGlzIGEgZ2VuZXJpYyB0aGF0IHNob3VsZCBiZSBpbmZlcnJlZFxyXG4gKiBmcm9tIGVsc2V3aGVyZS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBOb0luZmVyPFQ+ID0gW1RdW1QgZXh0ZW5kcyBhbnkgPyAwIDogbmV2ZXJdXHJcblxyXG5leHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gUGljazxULCBFeGNsdWRlPGtleW9mIFQsIEs+PlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3VhcmQ8VD4ge1xyXG4gICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc01hdGNoRnVuY3Rpb248VD4ge1xyXG4gIG1hdGNoOiBUeXBlR3VhcmQ8VD5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGhhc01hdGNoRnVuY3Rpb24gPSA8VD4oXHJcbiAgdjogTWF0Y2hlcjxUPlxyXG4pOiB2IGlzIEhhc01hdGNoRnVuY3Rpb248VD4gPT4ge1xyXG4gIHJldHVybiB2ICYmIHR5cGVvZiAodiBhcyBIYXNNYXRjaEZ1bmN0aW9uPFQ+KS5tYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBNYXRjaGVyPFQ+ID0gSGFzTWF0Y2hGdW5jdGlvbjxUPiB8IFR5cGVHdWFyZDxUPlxyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uRnJvbU1hdGNoZXI8TSBleHRlbmRzIE1hdGNoZXI8YW55Pj4gPSBNIGV4dGVuZHMgTWF0Y2hlcjxcclxuICBpbmZlciBUXHJcbj5cclxuICA/IFRcclxuICA6IG5ldmVyXHJcblxyXG5leHBvcnQgdHlwZSBJZDxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfSAmIHt9XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSXNVbmtub3duT3JOb25JbmZlcnJhYmxlLFxyXG4gIElmTWF5YmVVbmRlZmluZWQsXHJcbiAgSWZWb2lkLFxyXG4gIElzQW55LFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gd2l0aCBhIHN0cmluZyB0eXBlIGFuZCBhbiBhc3NvY2lhdGVkIHBheWxvYWQuIFRoaXMgaXMgdGhlXHJcbiAqIHR5cGUgb2YgYWN0aW9uIHJldHVybmVkIGJ5IGBjcmVhdGVBY3Rpb24oKWAgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgUCBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgcGF5bG9hZC5cclxuICogQHRlbXBsYXRlIFQgdGhlIHR5cGUgdXNlZCBmb3IgdGhlIGFjdGlvbiB0eXBlLlxyXG4gKiBAdGVtcGxhdGUgTSBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgbWV0YSAob3B0aW9uYWwpXHJcbiAqIEB0ZW1wbGF0ZSBFIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24ncyBlcnJvciAob3B0aW9uYWwpXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFBheWxvYWRBY3Rpb248XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBNID0gbmV2ZXIsXHJcbiAgRSA9IG5ldmVyXHJcbj4gPSB7XHJcbiAgcGF5bG9hZDogUFxyXG4gIHR5cGU6IFRcclxufSAmIChbTV0gZXh0ZW5kcyBbbmV2ZXJdXHJcbiAgPyB7fVxyXG4gIDoge1xyXG4gICAgICBtZXRhOiBNXHJcbiAgICB9KSAmXHJcbiAgKFtFXSBleHRlbmRzIFtuZXZlcl1cclxuICAgID8ge31cclxuICAgIDoge1xyXG4gICAgICAgIGVycm9yOiBFXHJcbiAgICAgIH0pXHJcblxyXG4vKipcclxuICogQSBcInByZXBhcmVcIiBtZXRob2QgdG8gYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBgY3JlYXRlQWN0aW9uYC5cclxuICogVGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBGbHV4IFN0YW5kYXJkIEFjdGlvbiB3aXRob3V0XHJcbiAqIHR5cGUgKHdpbGwgYmUgYWRkZWQgbGF0ZXIpIHRoYXQgKm11c3QqIGNvbnRhaW4gYSBwYXlsb2FkIChtaWdodCBiZSB1bmRlZmluZWQpLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQcmVwYXJlQWN0aW9uPFA+ID1cclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUCB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnkgfSlcclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUDsgZXJyb3I6IGFueSB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnk7IGVycm9yOiBhbnkgfSlcclxuXHJcbi8qKlxyXG4gKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZGAuIE5vdCB0byBiZSB1c2VkIGV4dGVybmFsbHkuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4gPSBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248aW5mZXIgUD5cclxuICA/IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gICAgICBQYXJhbWV0ZXJzPFBBPixcclxuICAgICAgUCxcclxuICAgICAgVCxcclxuICAgICAgUmV0dXJuVHlwZTxQQT4gZXh0ZW5kcyB7XHJcbiAgICAgICAgZXJyb3I6IGluZmVyIEVcclxuICAgICAgfVxyXG4gICAgICAgID8gRVxyXG4gICAgICAgIDogbmV2ZXIsXHJcbiAgICAgIFJldHVyblR5cGU8UEE+IGV4dGVuZHMge1xyXG4gICAgICAgIG1ldGE6IGluZmVyIE1cclxuICAgICAgfVxyXG4gICAgICAgID8gTVxyXG4gICAgICAgIDogbmV2ZXJcclxuICAgID5cclxuICA6IHZvaWRcclxuXHJcbi8qKlxyXG4gKiBCYXNpYyB0eXBlIGZvciBhbGwgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVCBleHRlbmRzIHN0cmluZywgTSA9IG5ldmVyLCBFID0gbmV2ZXI+IHtcclxuICB0eXBlOiBUXHJcbiAgbWF0Y2g6IChhY3Rpb246IEFjdGlvbjx1bmtub3duPikgPT4gYWN0aW9uIGlzIFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIHRoYXQgdGFrZXMgbXVsdGlwbGUgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZFxyXG4gKiB0byBhIGBQcmVwYXJlQWN0aW9uYCBtZXRob2QgdG8gY3JlYXRlIHRoZSBmaW5hbCBBY3Rpb24uXHJcbiAqIEB0eXBlUGFyYW0gQXJncyBhcmd1bWVudHMgZm9yIHRoZSBhY3Rpb24gY3JlYXRvciBmdW5jdGlvblxyXG4gKiBAdHlwZVBhcmFtIFAgYHBheWxvYWRgIHR5cGVcclxuICogQHR5cGVQYXJhbSBUIGB0eXBlYCBuYW1lXHJcbiAqIEB0eXBlUGFyYW0gRSBvcHRpb25hbCBgZXJyb3JgIHR5cGVcclxuICogQHR5cGVQYXJhbSBNIG9wdGlvbmFsIGBtZXRhYCB0eXBlXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sXHJcbiAgUCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxyXG4gIEUgPSBuZXZlcixcclxuICBNID0gbmV2ZXJcclxuPiBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQsIE0sIEU+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYEFyZ3NgIHdpbGwgcmV0dXJuXHJcbiAgICogYW4gQWN0aW9uIHdpdGggYSBwYXlsb2FkIG9mIHR5cGUgYFBgIGFuZCAoZGVwZW5kaW5nIG9uIHRoZSBgUHJlcGFyZUFjdGlvbmBcclxuICAgKiBtZXRob2QgdXNlZCkgYSBgbWV0YWAtIGFuZCBgZXJyb3JgIHByb3BlcnR5IG9mIHR5cGVzIGBNYCBhbmQgYEVgIHJlc3BlY3RpdmVseS5cclxuICAgKi9cclxuICAoLi4uYXJnczogQXJncyk6IFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgdGFrZXMgYW4gb3B0aW9uYWwgcGF5bG9hZCBvZiB0eXBlIGBQYC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhPcHRpb25hbFBheWxvYWQ8UCwgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz5cclxuICBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYW4gYXJndW1lbnQgd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZCBvZiBgUGAuXHJcbiAgICogQ2FsbGluZyBpdCB3aXRob3V0IGFuIGFyZ3VtZW50IHdpbGwgcmV0dXJuIGEgUGF5bG9hZEFjdGlvbiB3aXRoIGEgcGF5bG9hZCBvZiBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICAocGF5bG9hZD86IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB0aGF0IHRha2VzIG5vIHBheWxvYWQuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5kZWZpbmVkLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkIG9mIGB1bmRlZmluZWRgXHJcbiAgICovXHJcbiAgKG5vQXJndW1lbnQ6IHZvaWQpOiBQYXlsb2FkQWN0aW9uPHVuZGVmaW5lZCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgcmVxdWlyZXMgYSBwYXlsb2FkIG9mIHR5cGUgUC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGFuIGFyZ3VtZW50IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWQgb2YgYFBgXHJcbiAgICovXHJcbiAgKHBheWxvYWQ6IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB3aG9zZSBgcGF5bG9hZGAgdHlwZSBjb3VsZCBub3QgYmUgaW5mZXJyZWQuIEFjY2VwdHMgZXZlcnl0aGluZyBhcyBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8XHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBhbiBhcmd1bWVudCB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkXHJcbiAgICogb2YgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnQuXHJcbiAgICovXHJcbiAgPFBUIGV4dGVuZHMgdW5rbm93bj4ocGF5bG9hZDogUFQpOiBQYXlsb2FkQWN0aW9uPFBULCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgdGhhdCBwcm9kdWNlcyBhY3Rpb25zIHdpdGggYSBgcGF5bG9hZGAgYXR0cmlidXRlLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFAgdGhlIGBwYXlsb2FkYCB0eXBlXHJcbiAqIEB0eXBlUGFyYW0gVCB0aGUgYHR5cGVgIG9mIHRoZSByZXN1bHRpbmcgYWN0aW9uXHJcbiAqIEB0eXBlUGFyYW0gUEEgaWYgdGhlIHJlc3VsdGluZyBhY3Rpb24gaXMgcHJlcHJvY2Vzc2VkIGJ5IGEgYHByZXBhcmVgIG1ldGhvZCwgdGhlIHNpZ25hdHVyZSBvZiBzYWlkIG1ldGhvZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgUGF5bG9hZEFjdGlvbkNyZWF0b3I8XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248UD4gfCB2b2lkID0gdm9pZFxyXG4+ID0gSWZQcmVwYXJlQWN0aW9uTWV0aG9kUHJvdmlkZWQ8XHJcbiAgUEEsXHJcbiAgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFBBLCBUPixcclxuICAvLyBlbHNlXHJcbiAgSXNBbnk8XHJcbiAgICBQLFxyXG4gICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPGFueSwgVD4sXHJcbiAgICBJc1Vua25vd25Pck5vbkluZmVycmFibGU8XHJcbiAgICAgIFAsXHJcbiAgICAgIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8VD4sXHJcbiAgICAgIC8vIGVsc2VcclxuICAgICAgSWZWb2lkPFxyXG4gICAgICAgIFAsXHJcbiAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFQ+LFxyXG4gICAgICAgIC8vIGVsc2VcclxuICAgICAgICBJZk1heWJlVW5kZWZpbmVkPFxyXG4gICAgICAgICAgUCxcclxuICAgICAgICAgIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkPFAsIFQ+LFxyXG4gICAgICAgICAgLy8gZWxzZVxyXG4gICAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQ+XHJcbiAgICAgICAgPlxyXG4gICAgICA+XHJcbiAgICA+XHJcbiAgPlxyXG4+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFAgPSB2b2lkLCBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcclxuICB0eXBlOiBUXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFQ+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+LFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICB0eXBlOiBULFxyXG4gIHByZXBhcmVBY3Rpb246IFBBXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFJldHVyblR5cGU8UEE+WydwYXlsb2FkJ10sIFQsIFBBPlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlOiBzdHJpbmcsIHByZXBhcmVBY3Rpb24/OiBGdW5jdGlvbik6IGFueSB7XHJcbiAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgaWYgKHByZXBhcmVBY3Rpb24pIHtcclxuICAgICAgbGV0IHByZXBhcmVkID0gcHJlcGFyZUFjdGlvbiguLi5hcmdzKVxyXG4gICAgICBpZiAoIXByZXBhcmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVwYXJlQWN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCcpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkLFxyXG4gICAgICAgIC4uLignbWV0YScgaW4gcHJlcGFyZWQgJiYgeyBtZXRhOiBwcmVwYXJlZC5tZXRhIH0pLFxyXG4gICAgICAgIC4uLignZXJyb3InIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSAoKSA9PiBgJHt0eXBlfWBcclxuXHJcbiAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZVxyXG5cclxuICBhY3Rpb25DcmVhdG9yLm1hdGNoID0gKGFjdGlvbjogQWN0aW9uPHVua25vd24+KTogYWN0aW9uIGlzIFBheWxvYWRBY3Rpb24gPT5cclxuICAgIGFjdGlvbi50eXBlID09PSB0eXBlXHJcblxyXG4gIHJldHVybiBhY3Rpb25DcmVhdG9yXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihhY3Rpb246IHVua25vd24pOiBhY3Rpb24gaXMgQWN0aW9uPHVua25vd24+IHtcclxuICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmICd0eXBlJyBpbiBhY3Rpb25cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBSVEstbGlrZSBhY3Rpb24gY3JlYXRvciwgd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKFxyXG4gIGFjdGlvbjogdW5rbm93blxyXG4pOiBhY3Rpb24gaXMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgc3RyaW5nPiAmIEZ1bmN0aW9uIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgJ3R5cGUnIGluIGFjdGlvbiAmJlxyXG4gICAgLy8gaGFzTWF0Y2hGdW5jdGlvbiBvbmx5IHdhbnRzIE1hdGNoZXJzIGJ1dCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgaW4gcmV3cml0aW5nIGl0XHJcbiAgICBoYXNNYXRjaEZ1bmN0aW9uKGFjdGlvbiBhcyBhbnkpXHJcbiAgKVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGFjdGlvbiB3aXRoIGEgc3RyaW5nIHR5cGUgYW5kIHZhbGlkIEZsdXggU3RhbmRhcmQgQWN0aW9uIGtleXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGU0EoYWN0aW9uOiB1bmtub3duKTogYWN0aW9uIGlzIHtcclxuICB0eXBlOiBzdHJpbmdcclxuICBwYXlsb2FkPzogdW5rbm93blxyXG4gIGVycm9yPzogdW5rbm93blxyXG4gIG1ldGE/OiB1bmtub3duXHJcbn0ge1xyXG4gIHJldHVybiAoXHJcbiAgICBpc0FjdGlvbihhY3Rpb24pICYmXHJcbiAgICB0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICdzdHJpbmcnICYmXHJcbiAgICBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIFsndHlwZScsICdwYXlsb2FkJywgJ2Vycm9yJywgJ21ldGEnXS5pbmRleE9mKGtleSkgPiAtMVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYWN0aW9uIHR5cGUgb2YgdGhlIGFjdGlvbnMgY3JlYXRlZCBieSB0aGUgcGFzc2VkXHJcbiAqIGBjcmVhdGVBY3Rpb24oKWAtZ2VuZXJhdGVkIGFjdGlvbiBjcmVhdG9yIChhcmJpdHJhcnkgYWN0aW9uIGNyZWF0b3JzXHJcbiAqIGFyZSBub3Qgc3VwcG9ydGVkKS5cclxuICpcclxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIGNyZWF0b3Igd2hvc2UgYWN0aW9uIHR5cGUgdG8gZ2V0LlxyXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHR5cGUgdXNlZCBieSB0aGUgYWN0aW9uIGNyZWF0b3IuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlPFQgZXh0ZW5kcyBzdHJpbmc+KFxyXG4gIGFjdGlvbkNyZWF0b3I6IFBheWxvYWRBY3Rpb25DcmVhdG9yPGFueSwgVD5cclxuKTogVCB7XHJcbiAgcmV0dXJuIGAke2FjdGlvbkNyZWF0b3J9YCBhcyBUXHJcbn1cclxuXHJcbi8vIGhlbHBlciB0eXBlcyBmb3IgbW9yZSByZWFkYWJsZSB0eXBpbmdzXHJcblxyXG50eXBlIElmUHJlcGFyZUFjdGlvbk1ldGhvZFByb3ZpZGVkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUcnVlLFxyXG4gIEZhbHNlXHJcbj4gPSBQQSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gVHJ1ZSA6IEZhbHNlXHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgaXNBY3Rpb25DcmVhdG9yIGFzIGlzUlRLQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBhY3Rpb24gY3JlYXRvci5cclxuICAgKiBUaGUgZGVmYXVsdCBjaGVja3MgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAgICovXHJcbiAgaXNBY3Rpb25DcmVhdG9yPzogKGFjdGlvbjogdW5rbm93bikgPT4gYWN0aW9uIGlzIEZ1bmN0aW9uICYgeyB0eXBlPzogdW5rbm93biB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlKHR5cGU/OiB1bmtub3duKSB7XHJcbiAgY29uc3Qgc3BsaXRUeXBlID0gdHlwZSA/IGAke3R5cGV9YC5zcGxpdCgnLycpIDogW11cclxuICBjb25zdCBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCAnYWN0aW9uQ3JlYXRvcidcclxuICByZXR1cm4gYERldGVjdGVkIGFuIGFjdGlvbiBjcmVhdG9yIHdpdGggdHlwZSBcIiR7XHJcbiAgICB0eXBlIHx8ICd1bmtub3duJ1xyXG4gIH1cIiBiZWluZyBkaXNwYXRjaGVkLiBcclxuTWFrZSBzdXJlIHlvdSdyZSBjYWxsaW5nIHRoZSBhY3Rpb24gY3JlYXRvciBiZWZvcmUgZGlzcGF0Y2hpbmcsIGkuZS4gXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSgpKVxcYCBpbnN0ZWFkIG9mIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0pXFxgLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIHRoZSBhY3Rpb24gaGFzIG5vIHBheWxvYWQuYFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuKTogTWlkZGxld2FyZSB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG4gIGNvbnN0IHsgaXNBY3Rpb25DcmVhdG9yID0gaXNSVEtBY3Rpb24gfSA9IG9wdGlvbnNcclxuICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGlmIChpc0FjdGlvbkNyZWF0b3IoYWN0aW9uKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnRhYmxlIH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXk6IG51bWJlciwgZm5OYW1lOiBzdHJpbmcpIHtcclxuICBsZXQgZWxhcHNlZCA9IDBcclxuICByZXR1cm4ge1xyXG4gICAgbWVhc3VyZVRpbWU8VD4oZm46ICgpID0+IFQpOiBUIHtcclxuICAgICAgY29uc3Qgc3RhcnRlZCA9IERhdGUubm93KClcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZm4oKVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXJuSWZFeGNlZWRlZCgpIHtcclxuICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgJHtmbk5hbWV9IHRvb2sgJHtlbGFwc2VkfW1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mICR7bWF4RGVsYXl9bXMuIFxyXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXHJcbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LmApXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWlkZGxld2FyZUFycmF5PFxyXG4gIE1pZGRsZXdhcmVzIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXVxyXG4+IGV4dGVuZHMgQXJyYXk8TWlkZGxld2FyZXNbbnVtYmVyXT4ge1xyXG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zOiBNaWRkbGV3YXJlcylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xyXG4gICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxuICB9XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5NaWRkbGV3YXJlcywgLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzXT5cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLk1pZGRsZXdhcmVzLCAuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTWlkZGxld2FyZUFycmF5KC4uLmFyclswXS5jb25jYXQodGhpcykpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IE1pZGRsZXdhcmVBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbmhhbmNlckFycmF5PFxyXG4gIEVuaGFuY2VycyBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+W11cclxuPiBleHRlbmRzIEFycmF5PEVuaGFuY2Vyc1tudW1iZXJdPiB7XHJcbiAgY29uc3RydWN0b3IoLi4uaXRlbXM6IEVuaGFuY2VycylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFbmhhbmNlckFycmF5LnByb3RvdHlwZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcclxuICAgIHJldHVybiBFbmhhbmNlckFycmF5IGFzIGFueVxyXG4gIH1cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkVuaGFuY2VycywgLi4uQWRkaXRpb25hbEVuaGFuY2Vyc10+XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5FbmhhbmNlcnMsIC4uLkFkZGl0aW9uYWxFbmhhbmNlcnNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uQWRkaXRpb25hbEVuaGFuY2VycywgLi4uRW5oYW5jZXJzXT5cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5BZGRpdGlvbmFsRW5oYW5jZXJzLCAuLi5FbmhhbmNlcnNdPlxyXG5cclxuICBwcmVwZW5kKC4uLmFycjogYW55W10pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEVuaGFuY2VyQXJyYXkoLi4uYXJyWzBdLmNvbmNhdCh0aGlzKSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRW5oYW5jZXJBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZTxUPih2YWw6IFQpIHtcclxuICByZXR1cm4gaXNEcmFmdGFibGUodmFsKSA/IGNyZWF0ZU5leHRTdGF0ZSh2YWwsICgpID0+IHt9KSA6IHZhbFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG50eXBlIEVudHJ5UHJvY2Vzc29yID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnlcclxuXHJcbmNvbnN0IGlzUHJvZHVjdGlvbjogYm9vbGVhbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuY29uc3QgcHJlZml4OiBzdHJpbmcgPSAnSW52YXJpYW50IGZhaWxlZCdcclxuXHJcbi8vIFRocm93IGFuIGVycm9yIGlmIHRoZSBjb25kaXRpb24gZmFpbHNcclxuLy8gU3RyaXAgb3V0IGVycm9yIG1lc3NhZ2VzIGZvciBwcm9kdWN0aW9uXHJcbi8vID4gTm90IHByb3ZpZGluZyBhbiBpbmxpbmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgbWVzc2FnZSBhcyB0aGUgcmVzdWx0IGlzIHNtYWxsZXJcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbjogYW55LCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIC8vIENvbmRpdGlvbiBub3QgcGFzc2VkXHJcblxyXG4gIC8vIEluIHByb2R1Y3Rpb24gd2Ugc3RyaXAgdGhlIG1lc3NhZ2UgYnV0IHN0aWxsIHRocm93XHJcbiAgaWYgKGlzUHJvZHVjdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeClcclxuICB9XHJcblxyXG4gIC8vIFdoZW4gbm90IGluIHByb2R1Y3Rpb24gd2UgYWxsb3cgdGhlIG1lc3NhZ2UgdG8gcGFzcyB0aHJvdWdoXHJcbiAgLy8gKlRoaXMgYmxvY2sgd2lsbCBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24gYnVpbGRzKlxyXG4gIHRocm93IG5ldyBFcnJvcihgJHtwcmVmaXh9OiAke21lc3NhZ2UgfHwgJyd9YClcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaW5naWZ5KFxyXG4gIG9iajogYW55LFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBpbmRlbnQ/OiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgZGVjeWNsZXI/OiBFbnRyeVByb2Nlc3NvclxyXG4pOiBzdHJpbmcge1xyXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudClcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplKFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBkZWN5Y2xlcj86IEVudHJ5UHJvY2Vzc29yXHJcbik6IEVudHJ5UHJvY2Vzc29yIHtcclxuICBsZXQgc3RhY2s6IGFueVtdID0gW10sXHJcbiAgICBrZXlzOiBhbnlbXSA9IFtdXHJcblxyXG4gIGlmICghZGVjeWNsZXIpXHJcbiAgICBkZWN5Y2xlciA9IGZ1bmN0aW9uIChfOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSkgcmV0dXJuICdbQ2lyY3VsYXIgfl0nXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgJ1tDaXJjdWxhciB+LicgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKCcuJykgKyAnXSdcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKVxyXG4gICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpXHJcbiAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KVxyXG4gICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB2YWx1ZSA9IGRlY3ljbGVyIS5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXHJcbiAgICB9IGVsc2Ugc3RhY2sucHVzaCh2YWx1ZSlcclxuXHJcbiAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgZGVmYXVsdCBgaXNJbW11dGFibGVgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhcclxuICBpc0ltbXV0YWJsZTogSXNJbW11dGFibGVGdW5jLFxyXG4gIGlnbm9yZVBhdGhzOiBJZ25vcmVQYXRocyB8IHVuZGVmaW5lZCxcclxuICBvYmo6IGFueVxyXG4pIHtcclxuICBjb25zdCB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iailcclxuICByZXR1cm4ge1xyXG4gICAgZGV0ZWN0TXV0YXRpb25zKCkge1xyXG4gICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iailcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgVHJhY2tlZFByb3BlcnR5IHtcclxuICB2YWx1ZTogYW55XHJcbiAgY2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIGFueT5cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlUGF0aHM6IElnbm9yZVBhdGhzID0gW10sXHJcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gIGNoZWNrZWRPYmplY3RzOiBTZXQ8UmVjb3JkPHN0cmluZywgYW55Pj4gPSBuZXcgU2V0KClcclxuKSB7XHJcbiAgY29uc3QgdHJhY2tlZDogUGFydGlhbDxUcmFja2VkUHJvcGVydHk+ID0geyB2YWx1ZTogb2JqIH1cclxuXHJcbiAgaWYgKCFpc0ltbXV0YWJsZShvYmopICYmICFjaGVja2VkT2JqZWN0cy5oYXMob2JqKSkge1xyXG4gICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XHJcbiAgICB0cmFja2VkLmNoaWxkcmVuID0ge31cclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gICAgICAgIGlzSW1tdXRhYmxlLFxyXG4gICAgICAgIGlnbm9yZVBhdGhzLFxyXG4gICAgICAgIG9ialtrZXldLFxyXG4gICAgICAgIGNoaWxkUGF0aFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0cmFja2VkIGFzIFRyYWNrZWRQcm9wZXJ0eVxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlZFBhdGhzOiBJZ25vcmVQYXRocyA9IFtdLFxyXG4gIHRyYWNrZWRQcm9wZXJ0eTogVHJhY2tlZFByb3BlcnR5LFxyXG4gIG9iajogYW55LFxyXG4gIHNhbWVQYXJlbnRSZWY6IGJvb2xlYW4gPSBmYWxzZSxcclxuICBwYXRoOiBzdHJpbmcgPSAnJ1xyXG4pOiB7IHdhc011dGF0ZWQ6IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfSB7XHJcbiAgY29uc3QgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHVuZGVmaW5lZFxyXG5cclxuICBjb25zdCBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqXHJcblxyXG4gIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogdHJ1ZSwgcGF0aCB9XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2F0aGVyIGFsbCBrZXlzIGZyb20gcHJldiAodHJhY2tlZCkgYW5kIGFmdGVyIG9ianNcclxuICBjb25zdCBrZXlzVG9EZXRlY3Q6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge31cclxuICBmb3IgKGxldCBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWVcclxuICB9XHJcbiAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlXHJcbiAgfVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGxldCBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhcclxuICAgICAgaXNJbW11dGFibGUsXHJcbiAgICAgIGlnbm9yZWRQYXRocyxcclxuICAgICAgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sXHJcbiAgICAgIG9ialtrZXldLFxyXG4gICAgICBzYW1lUmVmLFxyXG4gICAgICBuZXN0ZWRQYXRoXHJcbiAgICApXHJcblxyXG4gICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG59XHJcblxyXG50eXBlIElzSW1tdXRhYmxlRnVuYyA9ICh2YWx1ZTogYW55KSA9PiBib29sZWFuXHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAvKipcclxuICAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBpbW11dGFibGUuXHJcbiAgICBUaGlzIGZ1bmN0aW9uIGlzIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gZXZlcnkgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzdGF0ZS5cclxuICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgcmV0dXJuIHRydWUgZm9yIHByaW1pdGl2ZSB0eXBlcyBcclxuICAgIChsaWtlIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zLCBudWxsIGFuZCB1bmRlZmluZWQpLlxyXG4gICAqL1xyXG4gIGlzSW1tdXRhYmxlPzogSXNJbW11dGFibGVGdW5jXHJcbiAgLyoqIFxyXG4gICAgQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3MgdGhhdCBtYXRjaCBuYW1lZCBub2RlcyBmcm9tIFxyXG4gICAgdGhlIHJvb3Qgc3RhdGUgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIGltbXV0YWJpbGl0eS5cclxuICAgIERlZmF1bHRzIHRvIHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIGlnbm9yZWRQYXRocz86IElnbm9yZVBhdGhzXHJcbiAgLyoqIFByaW50IGEgd2FybmluZyBpZiBjaGVja3MgdGFrZSBsb25nZXIgdGhhbiBOIG1zLiBEZWZhdWx0OiAzMm1zICovXHJcbiAgd2FybkFmdGVyPzogbnVtYmVyXHJcbiAgLy8gQGRlcHJlY2F0ZWQuIFVzZSBpZ25vcmVkUGF0aHNcclxuICBpZ25vcmU/OiBzdHJpbmdbXVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1pZGRsZXdhcmUgdGhhdCBjaGVja3Mgd2hldGhlciBhbnkgc3RhdGUgd2FzIG11dGF0ZWQgaW4gYmV0d2VlblxyXG4gKiBkaXNwYXRjaGVzIG9yIGR1cmluZyBhIGRpc3BhdGNoLiBJZiBhbnkgbXV0YXRpb25zIGFyZSBkZXRlY3RlZCwgYW4gZXJyb3IgaXNcclxuICogdGhyb3duLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBNaWRkbGV3YXJlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbik6IE1pZGRsZXdhcmUge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgbGV0IHtcclxuICAgIGlzSW1tdXRhYmxlID0gaXNJbW11dGFibGVEZWZhdWx0LFxyXG4gICAgaWdub3JlZFBhdGhzLFxyXG4gICAgd2FybkFmdGVyID0gMzIsXHJcbiAgICBpZ25vcmUsXHJcbiAgfSA9IG9wdGlvbnNcclxuXHJcbiAgLy8gQWxpYXMgaWdub3JlLT5pZ25vcmVkUGF0aHMsIGJ1dCBwcmVmZXIgaWdub3JlZFBhdGhzIGlmIHByZXNlbnRcclxuICBpZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMgfHwgaWdub3JlXHJcblxyXG4gIGNvbnN0IHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKVxyXG5cclxuICByZXR1cm4gKHsgZ2V0U3RhdGUgfSkgPT4ge1xyXG4gICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKVxyXG4gICAgbGV0IHRyYWNrZXIgPSB0cmFjayhzdGF0ZSlcclxuXHJcbiAgICBsZXQgcmVzdWx0XHJcbiAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyhcclxuICAgICAgICB3YXJuQWZ0ZXIsXHJcbiAgICAgICAgJ0ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgICAgKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICBpbnZhcmlhbnQoXHJcbiAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnJHtcclxuICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgIH0nLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICByZXN1bHQud2FzTXV0YXRlZCAmJlxyXG4gICAgICAgICAgaW52YXJpYW50KFxyXG4gICAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICAgIGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6ICR7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgICAgfS4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiAke3N0cmluZ2lmeShcclxuICAgICAgICAgICAgICBhY3Rpb25cclxuICAgICAgICAgICAgKX0uIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWBcclxuICAgICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpXHJcblxyXG4gICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgXCJwbGFpblwiLCBpLmUuIGEgdmFsdWUgdGhhdCBpcyBlaXRoZXJcclxuICogZGlyZWN0bHkgSlNPTi1zZXJpYWxpemFibGUgKGJvb2xlYW4sIG51bWJlciwgc3RyaW5nLCBhcnJheSwgcGxhaW4gb2JqZWN0KVxyXG4gKiBvciBgdW5kZWZpbmVkYC5cclxuICpcclxuICogQHBhcmFtIHZhbCBUaGUgdmFsdWUgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluKHZhbDogYW55KSB7XHJcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWxcclxuICByZXR1cm4gKFxyXG4gICAgdmFsID09IG51bGwgfHxcclxuICAgIHR5cGUgPT09ICdzdHJpbmcnIHx8XHJcbiAgICB0eXBlID09PSAnYm9vbGVhbicgfHxcclxuICAgIHR5cGUgPT09ICdudW1iZXInIHx8XHJcbiAgICBBcnJheS5pc0FycmF5KHZhbCkgfHxcclxuICAgIGlzUGxhaW5PYmplY3QodmFsKVxyXG4gIClcclxufVxyXG5cclxuaW50ZXJmYWNlIE5vblNlcmlhbGl6YWJsZVZhbHVlIHtcclxuICBrZXlQYXRoOiBzdHJpbmdcclxuICB2YWx1ZTogdW5rbm93blxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgdmFsdWU6IHVua25vd24sXHJcbiAgcGF0aDogc3RyaW5nID0gJycsXHJcbiAgaXNTZXJpYWxpemFibGU6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbiA9IGlzUGxhaW4sXHJcbiAgZ2V0RW50cmllcz86ICh2YWx1ZTogdW5rbm93bikgPT4gW3N0cmluZywgYW55XVtdLFxyXG4gIGlnbm9yZWRQYXRoczogSWdub3JlUGF0aHMgPSBbXSxcclxuICBjYWNoZT86IFdlYWtTZXQ8b2JqZWN0PlxyXG4pOiBOb25TZXJpYWxpemFibGVWYWx1ZSB8IGZhbHNlIHtcclxuICBsZXQgZm91bmROZXN0ZWRTZXJpYWxpemFibGU6IE5vblNlcmlhbGl6YWJsZVZhbHVlIHwgZmFsc2VcclxuXHJcbiAgaWYgKCFpc1NlcmlhbGl6YWJsZSh2YWx1ZSkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleVBhdGg6IHBhdGggfHwgJzxyb290PicsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmIChjYWNoZT8uaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIG5lc3RlZFZhbHVlXSBvZiBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICAgICAgICBuZXN0ZWRWYWx1ZSxcclxuICAgICAgICBuZXN0ZWRQYXRoLFxyXG4gICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgIGdldEVudHJpZXMsXHJcbiAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgIGNhY2hlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKSBjYWNoZS5hZGQodmFsdWUpXHJcblxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWU6IG9iamVjdCkge1xyXG4gIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGZvciAoY29uc3QgbmVzdGVkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcclxuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09ICdvYmplY3QnIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKSBjb250aW51ZVxyXG5cclxuICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKSByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGNvbnNpZGVyZWQgc2VyaWFsaXphYmxlLiBUaGlzXHJcbiAgICogZnVuY3Rpb24gaXMgYXBwbGllZCByZWN1cnNpdmVseSB0byBldmVyeSB2YWx1ZSBjb250YWluZWQgaW4gdGhlXHJcbiAgICogc3RhdGUuIERlZmF1bHRzIHRvIGBpc1BsYWluKClgLlxyXG4gICAqL1xyXG4gIGlzU2VyaWFsaXphYmxlPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgZW50cmllcyBmcm9tIGVhY2hcclxuICAgKiB2YWx1ZS4gIElmIHVuc3BlY2lmaWVkLCBgT2JqZWN0LmVudHJpZXNgIHdpbGwgYmUgdXNlZC4gRGVmYXVsdHNcclxuICAgKiB0byBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICBnZXRFbnRyaWVzPzogKHZhbHVlOiBhbnkpID0+IFtzdHJpbmcsIGFueV1bXVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBhY3Rpb24gdHlwZXMgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIHNlcmlhbGl6YWJpbGl0eS5cclxuICAgKiBEZWZhdWx0cyB0byBbXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25zPzogc3RyaW5nW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvXHJcbiAgICogWydtZXRhLmFyZycsICdtZXRhLmJhc2VRdWVyeU1ldGEnXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25QYXRocz86IChzdHJpbmcgfCBSZWdFeHApW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvIFtdXHJcbiAgICovXHJcbiAgaWdub3JlZFBhdGhzPzogKHN0cmluZyB8IFJlZ0V4cClbXVxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGlvbiB0aW1lIHdhcm5pbmcgdGhyZXNob2xkLiBJZiB0aGUgbWlkZGxld2FyZSB0YWtlcyBsb25nZXJcclxuICAgKiB0aGFuIGB3YXJuQWZ0ZXJgIG1zLCBhIHdhcm5pbmcgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGUuXHJcbiAgICogRGVmYXVsdHMgdG8gMzJtcy5cclxuICAgKi9cclxuICB3YXJuQWZ0ZXI/OiBudW1iZXJcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0IG91dCBvZiBjaGVja2luZyBzdGF0ZS4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBzdGF0ZS1yZWxhdGVkIHBhcmFtcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgaWdub3JlU3RhdGU/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2hlY2tpbmcgYWN0aW9ucy4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBhY3Rpb24tcmVsYXRlZCBwYXJhbXMgd2lsbCBiZSBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGlnbm9yZUFjdGlvbnM/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2FjaGluZyB0aGUgcmVzdWx0cy4gVGhlIGNhY2hlIHVzZXMgYSBXZWFrU2V0IGFuZCBzcGVlZHMgdXAgcmVwZWF0ZWQgY2hlY2tpbmcgcHJvY2Vzc2VzLlxyXG4gICAqIFRoZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIG5vIGJyb3dzZXIgc3VwcG9ydCBmb3IgV2Vha1NldCBpcyBwcmVzZW50LlxyXG4gICAqL1xyXG4gIGRpc2FibGVDYWNoZT86IGJvb2xlYW5cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtaWRkbGV3YXJlIHRoYXQsIGFmdGVyIGV2ZXJ5IHN0YXRlIGNoYW5nZSwgY2hlY2tzIGlmIHRoZSBuZXdcclxuICogc3RhdGUgaXMgc2VyaWFsaXphYmxlLiBJZiBhIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgaXMgZm91bmQgd2l0aGluIHRoZVxyXG4gKiBzdGF0ZSwgYW4gZXJyb3IgaXMgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgTWlkZGxld2FyZSBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKFxyXG4gIG9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4pOiBNaWRkbGV3YXJlIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbilcclxuICB9XHJcbiAgY29uc3Qge1xyXG4gICAgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLFxyXG4gICAgZ2V0RW50cmllcyxcclxuICAgIGlnbm9yZWRBY3Rpb25zID0gW10sXHJcbiAgICBpZ25vcmVkQWN0aW9uUGF0aHMgPSBbJ21ldGEuYXJnJywgJ21ldGEuYmFzZVF1ZXJ5TWV0YSddLFxyXG4gICAgaWdub3JlZFBhdGhzID0gW10sXHJcbiAgICB3YXJuQWZ0ZXIgPSAzMixcclxuICAgIGlnbm9yZVN0YXRlID0gZmFsc2UsXHJcbiAgICBpZ25vcmVBY3Rpb25zID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlQ2FjaGUgPSBmYWxzZSxcclxuICB9ID0gb3B0aW9uc1xyXG5cclxuICBjb25zdCBjYWNoZTogV2Vha1NldDxvYmplY3Q+IHwgdW5kZWZpbmVkID1cclxuICAgICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiB1bmRlZmluZWRcclxuXHJcbiAgcmV0dXJuIChzdG9yZUFQSSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMoXHJcbiAgICAgIHdhcm5BZnRlcixcclxuICAgICAgJ1NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgIClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFpZ25vcmVBY3Rpb25zICYmXHJcbiAgICAgICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSlcclxuICAgICkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgICAgZ2V0RW50cmllcyxcclxuICAgICAgICAgIGlnbm9yZWRBY3Rpb25QYXRocyxcclxuICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgeyBrZXlQYXRoLCB2YWx1ZSB9ID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAnXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogJyxcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAnXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cyknLFxyXG4gICAgICAgICAgICAnXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKSdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgICBjb25zdCBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgaXNTZXJpYWxpemFibGUsXHJcbiAgICAgICAgICBnZXRFbnRyaWVzLFxyXG4gICAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgICAgY2FjaGVcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IHsga2V5UGF0aCwgdmFsdWUgfSA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBgXHJcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9LlxyXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlgXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdCwgaXNEcmFmdGFibGUgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBBbnlBY3Rpb24sIEFjdGlvbiwgUmVkdWNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHsgZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgdHlwZSB7IE5vSW5mZXIgfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgZnJlZXplRHJhZnRhYmxlIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIGEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBjb3JyZXNwb25kaW5nIGFjdGlvbiBvYmplY3Qgc2hhcGVzLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBtYW51YWxseSAtIGl0IGlzIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWxcclxuICogICAgICAgICAgICAgaW5mZXJlbmNlIHB1cnBvc2VzIGFuZCBzaG91bGQgbm90IGhhdmUgYW55IGZ1cnRoZXIgdmFsdWUuXHJcbiAqICAgICAgICAgICAgIEl0IG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uczxUIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPiA9IFJlY29yZDxULCBBY3Rpb24+XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgdXNlIGBUeXBlR3VhcmRgIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uTWF0Y2hlcjxBIGV4dGVuZHMgQW55QWN0aW9uPiB7XHJcbiAgKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIEFcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uPFMsIEEgZXh0ZW5kcyBBbnlBY3Rpb24+ID0ge1xyXG4gIG1hdGNoZXI6IEFjdGlvbk1hdGNoZXI8QT5cclxuICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBOb0luZmVyPEE+PlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBSZWFkb25seUFycmF5PFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbjxTLCBhbnk+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBBcnJheTxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb248UywgYW55PlxyXG4+XHJcblxyXG4vKipcclxuICogQSAqY2FzZSByZWR1Y2VyKiBpcyBhIHJlZHVjZXIgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgYWN0aW9uIHR5cGUuIENhc2VcclxuICogcmVkdWNlcnMgY2FuIGJlIGNvbXBvc2VkIHRvIGZ1bGwgcmVkdWNlcnMgdXNpbmcgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIFVubGlrZSBhIG5vcm1hbCBSZWR1eCByZWR1Y2VyLCBhIGNhc2UgcmVkdWNlciBpcyBuZXZlciBjYWxsZWQgd2l0aCBhblxyXG4gKiBgdW5kZWZpbmVkYCBzdGF0ZSB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgc3RhdGUuIEluc3RlYWQsIHRoZSBpbml0aWFsXHJcbiAqIHN0YXRlIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBJbiBhZGRpdGlvbiwgYSBjYXNlIHJlZHVjZXIgY2FuIGNob29zZSB0byBtdXRhdGUgdGhlIHBhc3NlZC1pbiBgc3RhdGVgXHJcbiAqIHZhbHVlIGRpcmVjdGx5IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbmV3IHN0YXRlLiBUaGlzIGRvZXMgbm90IGFjdHVhbGx5XHJcbiAqIGNhdXNlIHRoZSBzdG9yZSBzdGF0ZSB0byBiZSBtdXRhdGVkIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGFua3MgdG9cclxuICogW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpLCB0aGUgbXV0YXRpb25zIGFyZVxyXG4gKiB0cmFuc2xhdGVkIHRvIGNvcHkgb3BlcmF0aW9ucyB0aGF0IHJlc3VsdCBpbiBhIG5ldyBzdGF0ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXI8UyA9IGFueSwgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbj4gPSAoXHJcbiAgc3RhdGU6IERyYWZ0PFM+LFxyXG4gIGFjdGlvbjogQVxyXG4pID0+IE5vSW5mZXI8Uz4gfCB2b2lkIHwgRHJhZnQ8Tm9JbmZlcjxTPj5cclxuXHJcbi8qKlxyXG4gKiBBIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gY2FzZSByZWR1Y2VycyBmb3IgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG1hbnVhbGx5IC0gaXQgaXMgb25seSB1c2VkXHJcbiAqICAgICAgICAgICAgIGZvciBpbnRlcm5hbCBpbmZlcmVuY2UgcHVycG9zZXMgYW5kIHVzaW5nIGl0IG1hbnVhbGx5XHJcbiAqICAgICAgICAgICAgIHdvdWxkIGxlYWQgdG8gdHlwZSBlcmFzdXJlLlxyXG4gKiAgICAgICAgICAgICBJdCBtaWdodCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyczxTLCBBUyBleHRlbmRzIEFjdGlvbnM+ID0ge1xyXG4gIFtUIGluIGtleW9mIEFTXTogQVNbVF0gZXh0ZW5kcyBBY3Rpb24gPyBDYXNlUmVkdWNlcjxTLCBBU1tUXT4gOiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE5vdEZ1bmN0aW9uPFQ+ID0gVCBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBUXHJcblxyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb248Uz4oeDogdW5rbm93bik6IHggaXMgKCkgPT4gUyB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PiA9IFJlZHVjZXI8Uz4gJiB7XHJcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoKSA9PiBTXHJcbn1cclxuXHJcbmxldCBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gZmFsc2VcclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSByZWR1Y2VyIGFzIGEgbWFwcGluZyBmcm9tIGFjdGlvblxyXG4gKiB0eXBlIHRvICpjYXNlIHJlZHVjZXIqIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBhY3Rpb24gdHlwZXMuIFRoZVxyXG4gKiByZWR1Y2VyJ3MgaW5pdGlhbCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgYm9keSBvZiBldmVyeSBjYXNlIHJlZHVjZXIgaXMgaW1wbGljaXRseSB3cmFwcGVkIHdpdGggYSBjYWxsIHRvXHJcbiAqIGBwcm9kdWNlKClgIGZyb20gdGhlIFtpbW1lcl0oaHR0cHM6Ly9naXRodWIuY29tL213ZXN0c3RyYXRlL2ltbWVyKSBsaWJyYXJ5LlxyXG4gKiBUaGlzIG1lYW5zIHRoYXQgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGEgbmV3IHN0YXRlIG9iamVjdCwgeW91IGNhbiBhbHNvXHJcbiAqIG11dGF0ZSB0aGUgcGFzc2VkLWluIHN0YXRlIG9iamVjdCBkaXJlY3RseTsgdGhlc2UgbXV0YXRpb25zIHdpbGwgdGhlbiBiZVxyXG4gKiBhdXRvbWF0aWNhbGx5IGFuZCBlZmZpY2llbnRseSB0cmFuc2xhdGVkIGludG8gY29waWVzLCBnaXZpbmcgeW91IGJvdGhcclxuICogY29udmVuaWVuY2UgYW5kIGltbXV0YWJpbGl0eS5cclxuICpcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgYGJ1aWxkZXJgIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuXHJcbiAqIFRoYXQgYnVpbGRlciBwcm92aWRlcyBgYWRkQ2FzZWAsIGBhZGRNYXRjaGVyYCBhbmQgYGFkZERlZmF1bHRDYXNlYCBmdW5jdGlvbnMgdGhhdCBtYXkgYmVcclxuICogY2FsbGVkIHRvIGRlZmluZSB3aGF0IGFjdGlvbnMgdGhpcyByZWR1Y2VyIHdpbGwgaGFuZGxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYnVpbGRlckNhbGxiYWNrIC0gYChidWlsZGVyOiBCdWlsZGVyKSA9PiB2b2lkYCBBIGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgYSAqYnVpbGRlciogb2JqZWN0IHRvIGRlZmluZVxyXG4gKiAgIGNhc2UgcmVkdWNlcnMgdmlhIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2UoYWN0aW9uQ3JlYXRvck9yVHlwZSwgcmVkdWNlcilgLlxyXG4gKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBjcmVhdGVSZWR1Y2VyLFxyXG4gIEFueUFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uLFxyXG59IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcblxyXG5jb25zdCBpbmNyZW1lbnQgPSBjcmVhdGVBY3Rpb248bnVtYmVyPihcImluY3JlbWVudFwiKTtcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uPG51bWJlcj4oXCJkZWNyZW1lbnRcIik7XHJcblxyXG5mdW5jdGlvbiBpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkKFxyXG4gIGFjdGlvbjogQW55QWN0aW9uXHJcbik6IGFjdGlvbiBpcyBQYXlsb2FkQWN0aW9uPG51bWJlcj4ge1xyXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uLnBheWxvYWQgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxyXG4gIHtcclxuICAgIGNvdW50ZXI6IDAsXHJcbiAgICBzdW1PZk51bWJlclBheWxvYWRzOiAwLFxyXG4gICAgdW5oYW5kbGVkQWN0aW9uczogMCxcclxuICB9LFxyXG4gIChidWlsZGVyKSA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKGluY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmVcclxuICAgICAgICBzdGF0ZS5jb3VudGVyICs9IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGNoYWluIGNhbGxzLCBvciBoYXZlIHNlcGFyYXRlIGBidWlsZGVyLmFkZENhc2UoKWAgbGluZXMgZWFjaCB0aW1lXHJcbiAgICAgIC5hZGRDYXNlKGRlY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5jb3VudGVyIC09IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGFwcGx5IGEgXCJtYXRjaGVyIGZ1bmN0aW9uXCIgdG8gaW5jb21pbmcgYWN0aW9uc1xyXG4gICAgICAuYWRkTWF0Y2hlcihpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkLCAoc3RhdGUsIGFjdGlvbikgPT4ge30pXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSk7XHJcbiAgfVxyXG4pO1xyXG5gYGBcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXI8UyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBidWlsZGVyQ2FsbGJhY2s6IChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTPikgPT4gdm9pZFxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPlxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHJlZHVjZXIgYXMgYSBtYXBwaW5nIGZyb20gYWN0aW9uXHJcbiAqIHR5cGUgdG8gKmNhc2UgcmVkdWNlciogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGFjdGlvbiB0eXBlcy4gVGhlXHJcbiAqIHJlZHVjZXIncyBpbml0aWFsIHN0YXRlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAqXHJcbiAqIFRoZSBib2R5IG9mIGV2ZXJ5IGNhc2UgcmVkdWNlciBpcyBpbXBsaWNpdGx5IHdyYXBwZWQgd2l0aCBhIGNhbGwgdG9cclxuICogYHByb2R1Y2UoKWAgZnJvbSB0aGUgW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpIGxpYnJhcnkuXHJcbiAqIFRoaXMgbWVhbnMgdGhhdCByYXRoZXIgdGhhbiByZXR1cm5pbmcgYSBuZXcgc3RhdGUgb2JqZWN0LCB5b3UgY2FuIGFsc29cclxuICogbXV0YXRlIHRoZSBwYXNzZWQtaW4gc3RhdGUgb2JqZWN0IGRpcmVjdGx5OyB0aGVzZSBtdXRhdGlvbnMgd2lsbCB0aGVuIGJlXHJcbiAqIGF1dG9tYXRpY2FsbHkgYW5kIGVmZmljaWVudGx5IHRyYW5zbGF0ZWQgaW50byBjb3BpZXMsIGdpdmluZyB5b3UgYm90aFxyXG4gKiBjb252ZW5pZW5jZSBhbmQgaW1tdXRhYmlsaXR5LlxyXG4gKiBcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYW4gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSBzdHJpbmcgYWN0aW9uIHR5cGVzLCBhbmQgdGhlIHZhbHVlc1xyXG4gKiBhcmUgY2FzZSByZWR1Y2VyIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhvc2UgYWN0aW9uIHR5cGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYWN0aW9uc01hcCAtIEFuIG9iamVjdCBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIF9jYXNlIHJlZHVjZXJzXywgZWFjaCBvZiB3aGljaCBoYW5kbGVzIG9uZSBzcGVjaWZpYyBhY3Rpb24gdHlwZS5cclxuICogQHBhcmFtIGFjdGlvbk1hdGNoZXJzIC0gQW4gYXJyYXkgb2YgbWF0Y2hlciBkZWZpbml0aW9ucyBpbiB0aGUgZm9ybSBge21hdGNoZXIsIHJlZHVjZXJ9YC5cclxuICogICBBbGwgbWF0Y2hpbmcgcmVkdWNlcnMgd2lsbCBiZSBleGVjdXRlZCBpbiBvcmRlciwgaW5kZXBlbmRlbnRseSBpZiBhIGNhc2UgcmVkdWNlciBtYXRjaGVkIG9yIG5vdC5cclxuICogQHBhcmFtIGRlZmF1bHRDYXNlUmVkdWNlciAtIEEgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIHRoYXQgaXMgZXhlY3V0ZWQgaWYgbm8gY2FzZSByZWR1Y2VyIGFuZCBubyBtYXRjaGVyXHJcbiAqICAgcmVkdWNlciB3YXMgZXhlY3V0ZWQgZm9yIHRoaXMgYWN0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG5gYGBqc1xyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoMCwge1xyXG4gIGluY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgZGVjcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgLSBhY3Rpb24ucGF5bG9hZFxyXG59KVxyXG5cclxuLy8gQWx0ZXJuYXRlbHksIHVzZSBhIFwibGF6eSBpbml0aWFsaXplclwiIHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgc3RhdGVcclxuLy8gKHdvcmtzIHdpdGggZWl0aGVyIGZvcm0gb2YgY3JlYXRlUmVkdWNlcilcclxuY29uc3QgaW5pdGlhbFN0YXRlID0gKCkgPT4gMFxyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCB7XHJcbiAgaW5jcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgKyBhY3Rpb24ucGF5bG9hZCxcclxuICBkZWNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSAtIGFjdGlvbi5wYXlsb2FkXHJcbn0pXHJcbmBgYFxyXG4gXHJcbiAqIEFjdGlvbiBjcmVhdG9ycyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHVzaW5nIFtgY3JlYXRlQWN0aW9uYF0oLi9jcmVhdGVBY3Rpb24pIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBrZXlzIGhlcmUsIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5IHN5bnRheDpcclxuXHJcbmBgYGpzXHJcbmNvbnN0IGluY3JlbWVudCA9IGNyZWF0ZUFjdGlvbignaW5jcmVtZW50JylcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uKCdkZWNyZW1lbnQnKVxyXG5cclxuY29uc3QgY291bnRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKDAsIHtcclxuICBbaW5jcmVtZW50XTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgW2RlY3JlbWVudC50eXBlXTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlIC0gYWN0aW9uLnBheWxvYWRcclxufSlcclxuYGBgXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFxyXG4gIFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+LFxyXG4gIENSIGV4dGVuZHMgQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSBDYXNlUmVkdWNlcnM8UywgYW55PlxyXG4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBhY3Rpb25zTWFwOiBDUixcclxuICBhY3Rpb25NYXRjaGVycz86IEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4sXHJcbiAgZGVmYXVsdENhc2VSZWR1Y2VyPzogQ2FzZVJlZHVjZXI8Uz5cclxuKTogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PihcclxuICBpbml0aWFsU3RhdGU6IFMgfCAoKCkgPT4gUyksXHJcbiAgbWFwT3JCdWlsZGVyQ2FsbGJhY2s6XHJcbiAgICB8IENhc2VSZWR1Y2VyczxTLCBhbnk+XHJcbiAgICB8ICgoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Uz4pID0+IHZvaWQpLFxyXG4gIGFjdGlvbk1hdGNoZXJzOiBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBbXSxcclxuICBkZWZhdWx0Q2FzZVJlZHVjZXI/OiBDYXNlUmVkdWNlcjxTPlxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPiB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIGlmICh0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgW2FjdGlvbnNNYXAsIGZpbmFsQWN0aW9uTWF0Y2hlcnMsIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXSA9XHJcbiAgICB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhtYXBPckJ1aWxkZXJDYWxsYmFjaylcclxuICAgICAgOiBbbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcblxyXG4gIC8vIEVuc3VyZSB0aGUgaW5pdGlhbCBzdGF0ZSBnZXRzIGZyb3plbiBlaXRoZXIgd2F5IChpZiBkcmFmdGFibGUpXHJcbiAgbGV0IGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU1xyXG4gIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBmcm96ZW5Jbml0aWFsU3RhdGUgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKVxyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJvemVuSW5pdGlhbFN0YXRlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCksIGFjdGlvbjogYW55KTogUyB7XHJcbiAgICBsZXQgY2FzZVJlZHVjZXJzID0gW1xyXG4gICAgICBhY3Rpb25zTWFwW2FjdGlvbi50eXBlXSxcclxuICAgICAgLi4uZmluYWxBY3Rpb25NYXRjaGVyc1xyXG4gICAgICAgIC5maWx0ZXIoKHsgbWF0Y2hlciB9KSA9PiBtYXRjaGVyKGFjdGlvbikpXHJcbiAgICAgICAgLm1hcCgoeyByZWR1Y2VyIH0pID0+IHJlZHVjZXIpLFxyXG4gICAgXVxyXG4gICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoKGNyKSA9PiAhIWNyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcik6IFMgPT4ge1xyXG4gICAgICBpZiAoY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICBpZiAoaXNEcmFmdChwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgZHJhZnQsIHdlIG11c3QgYWxyZWFkeSBiZSBpbnNpZGUgYSBgY3JlYXRlTmV4dFN0YXRlYCBjYWxsLFxyXG4gICAgICAgICAgLy8gbGlrZWx5IGJlY2F1c2UgdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCwgYGNyZWF0ZVNsaWNlYCwgb3IgbmVzdGVkXHJcbiAgICAgICAgICAvLyBpbnNpZGUgYW4gZXhpc3RpbmcgZHJhZnQuIEl0J3Mgc2FmZSB0byBqdXN0IHBhc3MgdGhlIGRyYWZ0IHRvIHRoZSBtdXRhdG9yLlxyXG4gICAgICAgICAgY29uc3QgZHJhZnQgPSBwcmV2aW91c1N0YXRlIGFzIERyYWZ0PFM+IC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBpcyBhbHJlYWR5IGEgZHJhZnRcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pXHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNEcmFmdGFibGUocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgIC8vIElmIHN0YXRlIGlzIG5vdCBkcmFmdGFibGUgKGV4OiBhIHByaW1pdGl2ZSwgc3VjaCBhcyAwKSwgd2Ugd2FudCB0byBkaXJlY3RseVxyXG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSBjYXNlUmVkdWNlciBmdW5jIGFuZCBub3Qgd3JhcCBpdCB3aXRoIHByb2R1Y2UuXHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlIGFzIGFueSwgYWN0aW9uKVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0EgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgY3JlYXRlTmV4dFN0YXRlKCkgcHJvZHVjZXMgYW4gSW1tdXRhYmxlPERyYWZ0PFM+PiByYXRoZXJcclxuICAgICAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAgICAgLy8gdGhlc2UgdHdvIHR5cGVzLlxyXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZShwcmV2aW91c1N0YXRlLCAoZHJhZnQ6IERyYWZ0PFM+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICB9LCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlXHJcblxyXG4gIHJldHVybiByZWR1Y2VyIGFzIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBUeXBlR3VhcmQgfSBmcm9tICcuL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRBY3Rpb25DcmVhdG9yPFR5cGUgZXh0ZW5kcyBzdHJpbmc+IHtcclxuICAoLi4uYXJnczogYW55W10pOiBBY3Rpb248VHlwZT5cclxuICB0eXBlOiBUeXBlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGJ1aWxkZXIgZm9yIGFuIGFjdGlvbiA8LT4gcmVkdWNlciBtYXAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+IHtcclxuICAvKipcclxuICAgKiBBZGRzIGEgY2FzZSByZWR1Y2VyIHRvIGhhbmRsZSBhIHNpbmdsZSBleGFjdCBhY3Rpb24gdHlwZS5cclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlYCBtdXN0IGNvbWUgYmVmb3JlIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBvciBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAuXHJcbiAgICogQHBhcmFtIGFjdGlvbkNyZWF0b3IgLSBFaXRoZXIgYSBwbGFpbiBhY3Rpb24gdHlwZSBzdHJpbmcsIG9yIGFuIGFjdGlvbiBjcmVhdG9yIGdlbmVyYXRlZCBieSBbYGNyZWF0ZUFjdGlvbmBdKC4vY3JlYXRlQWN0aW9uKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYWN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgYWN0dWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBhZGRDYXNlPEFjdGlvbkNyZWF0b3IgZXh0ZW5kcyBUeXBlZEFjdGlvbkNyZWF0b3I8c3RyaW5nPj4oXHJcbiAgICBhY3Rpb25DcmVhdG9yOiBBY3Rpb25DcmVhdG9yLFxyXG4gICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIFJldHVyblR5cGU8QWN0aW9uQ3JlYXRvcj4+XHJcbiAgKTogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+XHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIGNhc2UgcmVkdWNlciB0byBoYW5kbGUgYSBzaW5nbGUgZXhhY3QgYWN0aW9uIHR5cGUuXHJcbiAgICogQHJlbWFya3NcclxuICAgKiBBbGwgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZWAgbXVzdCBjb21lIGJlZm9yZSBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgb3IgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgLlxyXG4gICAqIEBwYXJhbSBhY3Rpb25DcmVhdG9yIC0gRWl0aGVyIGEgcGxhaW4gYWN0aW9uIHR5cGUgc3RyaW5nLCBvciBhbiBhY3Rpb24gY3JlYXRvciBnZW5lcmF0ZWQgYnkgW2BjcmVhdGVBY3Rpb25gXSguL2NyZWF0ZUFjdGlvbikgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGFjdHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgYWRkQ2FzZTxUeXBlIGV4dGVuZHMgc3RyaW5nLCBBIGV4dGVuZHMgQWN0aW9uPFR5cGU+PihcclxuICAgIHR5cGU6IFR5cGUsXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQT5cclxuICApOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT5cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHlvdSB0byBtYXRjaCB5b3VyIGluY29taW5nIGFjdGlvbnMgYWdhaW5zdCB5b3VyIG93biBmaWx0ZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBvbmx5IHRoZSBgYWN0aW9uLnR5cGVgIHByb3BlcnR5LlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogSWYgbXVsdGlwbGUgbWF0Y2hlciByZWR1Y2VycyBtYXRjaCwgYWxsIG9mIHRoZW0gd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcclxuICAgKiB0aGV5IHdlcmUgZGVmaW5lZCBpbiAtIGV2ZW4gaWYgYSBjYXNlIHJlZHVjZXIgYWxyZWFkeSBtYXRjaGVkLlxyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBtdXN0IGNvbWUgYWZ0ZXIgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2VgIGFuZCBiZWZvcmUgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYC5cclxuICAgKiBAcGFyYW0gbWF0Y2hlciAtIEEgbWF0Y2hlciBmdW5jdGlvbi4gSW4gVHlwZVNjcmlwdCwgdGhpcyBzaG91bGQgYmUgYSBbdHlwZSBwcmVkaWNhdGVdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzKVxyXG4gICAqICAgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBhY3R1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHtcclxuICBjcmVhdGVBY3Rpb24sXHJcbiAgY3JlYXRlUmVkdWNlcixcclxuICBBc3luY1RodW5rLFxyXG4gIEFueUFjdGlvbixcclxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5cclxudHlwZSBHZW5lcmljQXN5bmNUaHVuayA9IEFzeW5jVGh1bms8dW5rbm93biwgdW5rbm93biwgYW55PjtcclxuXHJcbnR5cGUgUGVuZGluZ0FjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJwZW5kaW5nXCJdPjtcclxudHlwZSBSZWplY3RlZEFjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJyZWplY3RlZFwiXT47XHJcbnR5cGUgRnVsZmlsbGVkQWN0aW9uID0gUmV0dXJuVHlwZTxHZW5lcmljQXN5bmNUaHVua1tcImZ1bGZpbGxlZFwiXT47XHJcblxyXG5jb25zdCBpbml0aWFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuY29uc3QgcmVzZXRBY3Rpb24gPSBjcmVhdGVBY3Rpb24oXCJyZXNldC10cmFja2VkLWxvYWRpbmctc3RhdGVcIik7XHJcblxyXG5mdW5jdGlvbiBpc1BlbmRpbmdBY3Rpb24oYWN0aW9uOiBBbnlBY3Rpb24pOiBhY3Rpb24gaXMgUGVuZGluZ0FjdGlvbiB7XHJcbiAgcmV0dXJuIGFjdGlvbi50eXBlLmVuZHNXaXRoKFwiL3BlbmRpbmdcIik7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgKGJ1aWxkZXIpID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAuYWRkQ2FzZShyZXNldEFjdGlvbiwgKCkgPT4gaW5pdGlhbFN0YXRlKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4gYmUgZGVmaW5lZCBvdXRzaWRlIGFzIGEgdHlwZSBwcmVkaWNhdGUgZnVuY3Rpb25cclxuICAgIC5hZGRNYXRjaGVyKGlzUGVuZGluZ0FjdGlvbiwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicGVuZGluZ1wiO1xyXG4gICAgfSlcclxuICAgIC5hZGRNYXRjaGVyKFxyXG4gICAgICAvLyBtYXRjaGVyIGNhbiBiZSBkZWZpbmVkIGlubGluZSBhcyBhIHR5cGUgcHJlZGljYXRlIGZ1bmN0aW9uXHJcbiAgICAgIChhY3Rpb24pOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb24gPT4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoXCIvcmVqZWN0ZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicmVqZWN0ZWRcIjtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4ganVzdCByZXR1cm4gYm9vbGVhbiBhbmQgdGhlIG1hdGNoZXIgY2FuIHJlY2VpdmUgYSBnZW5lcmljIGFyZ3VtZW50XHJcbiAgICAuYWRkTWF0Y2hlcjxGdWxmaWxsZWRBY3Rpb24+KFxyXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZS5lbmRzV2l0aChcIi9mdWxmaWxsZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwiZnVsZmlsbGVkXCI7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbn0pO1xyXG5gYGBcclxuICAgKi9cclxuICBhZGRNYXRjaGVyPEE+KFxyXG4gICAgbWF0Y2hlcjogVHlwZUd1YXJkPEE+IHwgKChhY3Rpb246IGFueSkgPT4gYm9vbGVhbiksXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICk6IE9taXQ8QWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+LCAnYWRkQ2FzZSc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBcImRlZmF1bHQgY2FzZVwiIHJlZHVjZXIgdGhhdCBpcyBleGVjdXRlZCBpZiBubyBjYXNlIHJlZHVjZXIgYW5kIG5vIG1hdGNoZXJcclxuICAgKiByZWR1Y2VyIHdhcyBleGVjdXRlZCBmb3IgdGhpcyBhY3Rpb24uXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgZmFsbGJhY2sgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnXHJcbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHsgb3RoZXJBY3Rpb25zOiAwIH1cclxuY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBidWlsZGVyID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAvLyAuYWRkQ2FzZSguLi4pXHJcbiAgICAvLyAuYWRkTWF0Y2hlciguLi4pXHJcbiAgICAuYWRkRGVmYXVsdENhc2UoKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUub3RoZXJBY3Rpb25zKytcclxuICAgIH0pXHJcbn0pXHJcbmBgYFxyXG4gICAqL1xyXG4gIGFkZERlZmF1bHRDYXNlKHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBbnlBY3Rpb24+KToge31cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrPFM+KFxyXG4gIGJ1aWxkZXJDYWxsYmFjazogKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFM+KSA9PiB2b2lkXHJcbik6IFtcclxuICBDYXNlUmVkdWNlcnM8UywgYW55PixcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+LFxyXG4gIENhc2VSZWR1Y2VyPFMsIEFueUFjdGlvbj4gfCB1bmRlZmluZWRcclxuXSB7XHJcbiAgY29uc3QgYWN0aW9uc01hcDogQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSB7fVxyXG4gIGNvbnN0IGFjdGlvbk1hdGNoZXJzOiBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gW11cclxuICBsZXQgZGVmYXVsdENhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+IHwgdW5kZWZpbmVkXHJcbiAgY29uc3QgYnVpbGRlciA9IHtcclxuICAgIGFkZENhc2UoXHJcbiAgICAgIHR5cGVPckFjdGlvbkNyZWF0b3I6IHN0cmluZyB8IFR5cGVkQWN0aW9uQ3JlYXRvcjxhbnk+LFxyXG4gICAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgdG8ga2VlcCB0aGUgZGVmaW5pdGlvbiBieSB0aGUgdXNlciBpbiBsaW5lIHdpdGggYWN0dWFsIGJlaGF2aW9yLFxyXG4gICAgICAgICB3ZSBlbmZvcmNlIGBhZGRDYXNlYCB0byBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBhZGRNYXRjaGVyYFxyXG4gICAgICAgICBhcyBtYXRjaGluZyBjYXNlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBtYXRjaGVyc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChhY3Rpb25NYXRjaGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHR5cGUgPVxyXG4gICAgICAgIHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyB0eXBlT3JBY3Rpb25DcmVhdG9yXHJcbiAgICAgICAgICA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZVxyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlclxyXG4gICAgICByZXR1cm4gYnVpbGRlclxyXG4gICAgfSxcclxuICAgIGFkZE1hdGNoZXI8QT4oXHJcbiAgICAgIG1hdGNoZXI6IFR5cGVHdWFyZDxBPixcclxuICAgICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYWN0aW9uTWF0Y2hlcnMucHVzaCh7IG1hdGNoZXIsIHJlZHVjZXIgfSlcclxuICAgICAgcmV0dXJuIGJ1aWxkZXJcclxuICAgIH0sXHJcbiAgICBhZGREZWZhdWx0Q2FzZShyZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+KSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyXHJcbiAgICAgIHJldHVybiBidWlsZGVyXHJcbiAgICB9LFxyXG4gIH1cclxuICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcilcclxuICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQW55QWN0aW9uLCBSZWR1Y2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZU5leHRTdGF0ZSB9IGZyb20gJy4nXHJcbmltcG9ydCB0eXBlIHtcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBQcmVwYXJlQWN0aW9uLFxyXG4gIF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZCxcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB0eXBlIHtcclxuICBDYXNlUmVkdWNlcixcclxuICBDYXNlUmVkdWNlcnMsXHJcbiAgUmVkdWNlcldpdGhJbml0aWFsU3RhdGUsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBOb3RGdW5jdGlvbiB9IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlciB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB7IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHR5cGUgeyBOb0luZmVyIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGZyZWV6ZURyYWZ0YWJsZSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5sZXQgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlXHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgYXR0YWNoZWQgdG8gYSBzbGljZS5cclxuICpcclxuICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBQYXlsb2FkQWN0aW9uQ3JlYXRvciBkaXJlY3RseVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUFjdGlvbkNyZWF0b3I8UD4gPSBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxQPlxyXG5cclxuLyoqXHJcbiAqIFRoZSByZXR1cm4gdmFsdWUgb2YgYGNyZWF0ZVNsaWNlYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlPFxyXG4gIFN0YXRlID0gYW55LFxyXG4gIENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPiA9IFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPixcclxuICBOYW1lIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzbGljZSBuYW1lLlxyXG4gICAqL1xyXG4gIG5hbWU6IE5hbWVcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNsaWNlJ3MgcmVkdWNlci5cclxuICAgKi9cclxuICByZWR1Y2VyOiBSZWR1Y2VyPFN0YXRlPlxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gY3JlYXRvcnMgZm9yIHRoZSB0eXBlcyBvZiBhY3Rpb25zIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhlIHNsaWNlXHJcbiAgICogcmVkdWNlci5cclxuICAgKi9cclxuICBhY3Rpb25zOiBDYXNlUmVkdWNlckFjdGlvbnM8Q2FzZVJlZHVjZXJzLCBOYW1lPlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW5kaXZpZHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgaW4gdGhlIGByZWR1Y2Vyc2AgcGFyYW1ldGVyLlxyXG4gICAqIFRoaXMgZW5hYmxlcyByZXVzZSBhbmQgdGVzdGluZyBpZiB0aGV5IHdlcmUgZGVmaW5lZCBpbmxpbmUgd2hlbiBjYWxsaW5nIGBjcmVhdGVTbGljZWAuXHJcbiAgICovXHJcbiAgY2FzZVJlZHVjZXJzOiBTbGljZURlZmluZWRDYXNlUmVkdWNlcnM8Q2FzZVJlZHVjZXJzPlxyXG5cclxuICAvKipcclxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGluaXRpYWwgc3RhdGUgdmFsdWUgZ2l2ZW4gdG8gdGhlIHNsaWNlLlxyXG4gICAqIElmIGEgbGF6eSBzdGF0ZSBpbml0aWFsaXplciB3YXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgY2FsbGVkIGFuZCBhIGZyZXNoIHZhbHVlIHJldHVybmVkLlxyXG4gICAqL1xyXG4gIGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU3RhdGVcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjcmVhdGVTbGljZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTbGljZU9wdGlvbnM8XHJcbiAgU3RhdGUgPSBhbnksXHJcbiAgQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4sXHJcbiAgTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IHtcclxuICAvKipcclxuICAgKiBUaGUgc2xpY2UncyBuYW1lLiBVc2VkIHRvIG5hbWVzcGFjZSB0aGUgZ2VuZXJhdGVkIGFjdGlvbiB0eXBlcy5cclxuICAgKi9cclxuICBuYW1lOiBOYW1lXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gICAqL1xyXG4gIGluaXRpYWxTdGF0ZTogU3RhdGUgfCAoKCkgPT4gU3RhdGUpXHJcblxyXG4gIC8qKlxyXG4gICAqIEEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBhY3Rpb24tdHlwZS1zcGVjaWZpYyAqY2FzZSByZWR1Y2VyKlxyXG4gICAqIGZ1bmN0aW9ucy4gRm9yIGV2ZXJ5IGFjdGlvbiB0eXBlLCBhIG1hdGNoaW5nIGFjdGlvbiBjcmVhdG9yIHdpbGwgYmVcclxuICAgKiBnZW5lcmF0ZWQgdXNpbmcgYGNyZWF0ZUFjdGlvbigpYC5cclxuICAgKi9cclxuICByZWR1Y2VyczogVmFsaWRhdGVTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZSwgQ1I+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyBhICpidWlsZGVyKiBvYmplY3QgdG8gZGVmaW5lXHJcbiAgICogY2FzZSByZWR1Y2VycyB2aWEgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZShhY3Rpb25DcmVhdG9yT3JUeXBlLCByZWR1Y2VyKWAuXHJcbiAgICogXHJcbiAgICogQWx0ZXJuYXRpdmVseSwgYSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGFjdGlvbi10eXBlLXNwZWNpZmljICpjYXNlIHJlZHVjZXIqXHJcbiAgICogZnVuY3Rpb25zLiBUaGVzZSByZWR1Y2VycyBzaG91bGQgaGF2ZSBleGlzdGluZyBhY3Rpb24gdHlwZXMgdXNlZFxyXG4gICAqIGFzIHRoZSBrZXlzLCBhbmQgYWN0aW9uIGNyZWF0b3JzIHdpbGwgX25vdF8gYmUgZ2VuZXJhdGVkLlxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgY3JlYXRlU2xpY2UsIEFjdGlvbiwgQW55QWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuY29uc3QgaW5jcmVtZW50QnkgPSBjcmVhdGVBY3Rpb248bnVtYmVyPignaW5jcmVtZW50QnknKVxyXG5jb25zdCBkZWNyZW1lbnQgPSBjcmVhdGVBY3Rpb24oJ2RlY3JlbWVudCcpXHJcblxyXG5pbnRlcmZhY2UgUmVqZWN0ZWRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xyXG4gIGVycm9yOiBFcnJvclxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JlamVjdGVkQWN0aW9uKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uIHtcclxuICByZXR1cm4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoJ3JlamVjdGVkJylcclxufVxyXG5cclxuY3JlYXRlU2xpY2Uoe1xyXG4gIG5hbWU6ICdjb3VudGVyJyxcclxuICBpbml0aWFsU3RhdGU6IDAsXHJcbiAgcmVkdWNlcnM6IHt9LFxyXG4gIGV4dHJhUmVkdWNlcnM6IGJ1aWxkZXIgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShpbmNyZW1lbnRCeSwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmUgaWYgdXNpbmcgVFNcclxuICAgICAgfSlcclxuICAgICAgLy8gWW91IGNhbiBjaGFpbiBjYWxscywgb3IgaGF2ZSBzZXBhcmF0ZSBgYnVpbGRlci5hZGRDYXNlKClgIGxpbmVzIGVhY2ggdGltZVxyXG4gICAgICAuYWRkQ2FzZShkZWNyZW1lbnQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgICAgLy8gWW91IGNhbiBtYXRjaCBhIHJhbmdlIG9mIGFjdGlvbiB0eXBlc1xyXG4gICAgICAuYWRkTWF0Y2hlcihcclxuICAgICAgICBpc1JlamVjdGVkQWN0aW9uLFxyXG4gICAgICAgIC8vIGBhY3Rpb25gIHdpbGwgYmUgaW5mZXJyZWQgYXMgYSBSZWplY3RlZEFjdGlvbiBkdWUgdG8gaXNSZWplY3RlZEFjdGlvbiBiZWluZyBkZWZpbmVkIGFzIGEgdHlwZSBndWFyZFxyXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7fVxyXG4gICAgICApXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgIH1cclxufSlcclxuYGBgXHJcbiAgICovXHJcbiAgZXh0cmFSZWR1Y2Vycz86XHJcbiAgICB8IENhc2VSZWR1Y2VyczxOb0luZmVyPFN0YXRlPiwgYW55PlxyXG4gICAgfCAoKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPE5vSW5mZXI8U3RhdGU+PikgPT4gdm9pZClcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgQ2FzZVJlZHVjZXIgd2l0aCBhIGBwcmVwYXJlYCBtZXRob2QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIEFjdGlvbiBleHRlbmRzIFBheWxvYWRBY3Rpb24+ID0ge1xyXG4gIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBY3Rpb24+XHJcbiAgcHJlcGFyZTogUHJlcGFyZUFjdGlvbjxBY3Rpb25bJ3BheWxvYWQnXT5cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSB0eXBlIGRlc2NyaWJpbmcgYSBzbGljZSdzIGByZWR1Y2Vyc2Agb3B0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSB7XHJcbiAgW0s6IHN0cmluZ106XHJcbiAgICB8IENhc2VSZWR1Y2VyPFN0YXRlLCBQYXlsb2FkQWN0aW9uPGFueT4+XHJcbiAgICB8IENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIFBheWxvYWRBY3Rpb248YW55LCBzdHJpbmcsIGFueSwgYW55Pj5cclxufVxyXG5cclxudHlwZSBTbGljZUFjdGlvblR5cGU8XHJcbiAgU2xpY2VOYW1lIGV4dGVuZHMgc3RyaW5nLFxyXG4gIEFjdGlvbk5hbWUgZXh0ZW5kcyBrZXlvZiBhbnlcclxuPiA9IEFjdGlvbk5hbWUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPyBgJHtTbGljZU5hbWV9LyR7QWN0aW9uTmFtZX1gIDogc3RyaW5nXHJcblxyXG4vKipcclxuICogRGVyaXZlcyB0aGUgc2xpY2UncyBgYWN0aW9uc2AgcHJvcGVydHkgZnJvbSB0aGUgYHJlZHVjZXJzYCBvcHRpb25zXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyQWN0aW9uczxcclxuICBDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+LFxyXG4gIFNsaWNlTmFtZSBleHRlbmRzIHN0cmluZ1xyXG4+ID0ge1xyXG4gIFtUeXBlIGluIGtleW9mIENhc2VSZWR1Y2Vyc106IENhc2VSZWR1Y2Vyc1tUeXBlXSBleHRlbmRzIHsgcHJlcGFyZTogYW55IH1cclxuICAgID8gQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgICAgICAgQ2FzZVJlZHVjZXJzW1R5cGVdLFxyXG4gICAgICAgIFNsaWNlQWN0aW9uVHlwZTxTbGljZU5hbWUsIFR5cGU+XHJcbiAgICAgID5cclxuICAgIDogQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPFxyXG4gICAgICAgIENhc2VSZWR1Y2Vyc1tUeXBlXSxcclxuICAgICAgICBTbGljZUFjdGlvblR5cGU8U2xpY2VOYW1lLCBUeXBlPlxyXG4gICAgICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBgUGF5bG9hZEFjdGlvbkNyZWF0b3JgIHR5cGUgZm9yIGEgcGFzc2VkIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgQ1IgZXh0ZW5kcyB7IHByZXBhcmU6IGFueSB9LFxyXG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmdcclxuPiA9IF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxDUlsncHJlcGFyZSddLCBUeXBlPlxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGBQYXlsb2FkQWN0aW9uQ3JlYXRvcmAgdHlwZSBmb3IgYSBwYXNzZWQgYENhc2VSZWR1Y2VyYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPENSLCBUeXBlIGV4dGVuZHMgc3RyaW5nPiA9IENSIGV4dGVuZHMgKFxyXG4gIHN0YXRlOiBhbnksXHJcbiAgYWN0aW9uOiBpbmZlciBBY3Rpb25cclxuKSA9PiBhbnlcclxuICA/IEFjdGlvbiBleHRlbmRzIHsgcGF5bG9hZDogaW5mZXIgUCB9XHJcbiAgICA/IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFR5cGU+XHJcbiAgICA6IEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUeXBlPlxyXG4gIDogQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFR5cGU+XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIENhc2VSZWR1Y2VycyBvdXQgb2YgYSBgcmVkdWNlcnNgIG9iamVjdCwgZXZlbiBpZiB0aGV5IGFyZVxyXG4gKiB0ZXN0ZWQgaW50byBhIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIFNsaWNlRGVmaW5lZENhc2VSZWR1Y2VyczxDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+PiA9IHtcclxuICBbVHlwZSBpbiBrZXlvZiBDYXNlUmVkdWNlcnNdOiBDYXNlUmVkdWNlcnNbVHlwZV0gZXh0ZW5kcyB7XHJcbiAgICByZWR1Y2VyOiBpbmZlciBSZWR1Y2VyXHJcbiAgfVxyXG4gICAgPyBSZWR1Y2VyXHJcbiAgICA6IENhc2VSZWR1Y2Vyc1tUeXBlXVxyXG59XHJcblxyXG4vKipcclxuICogVXNlZCBvbiBhIFNsaWNlQ2FzZVJlZHVjZXJzIG9iamVjdC5cclxuICogRW5zdXJlcyB0aGF0IGlmIGEgQ2FzZVJlZHVjZXIgaXMgYSBgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZWAsIHRoYXRcclxuICogdGhlIGByZWR1Y2VyYCBhbmQgdGhlIGBwcmVwYXJlYCBmdW5jdGlvbiB1c2UgdGhlIHNhbWUgdHlwZSBvZiBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIE1pZ2h0IGRvIGFkZGl0aW9uYWwgc3VjaCBjaGVja3MgaW4gdGhlIGZ1dHVyZS5cclxuICpcclxuICogVGhpcyB0eXBlIGlzIG9ubHkgZXZlciB1c2VmdWwgaWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gd3JhcHBlciBhcm91bmRcclxuICogYGNyZWF0ZVNsaWNlYC4gUGxlYXNlIGRvbid0IHVzZSBpdCBvdGhlcndpc2UhXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFZhbGlkYXRlU2xpY2VDYXNlUmVkdWNlcnM8XHJcbiAgUyxcclxuICBBQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTPlxyXG4+ID0gQUNSICZcclxuICB7XHJcbiAgICBbVCBpbiBrZXlvZiBBQ1JdOiBBQ1JbVF0gZXh0ZW5kcyB7XHJcbiAgICAgIHJlZHVjZXIoczogUywgYWN0aW9uPzogaW5mZXIgQSk6IGFueVxyXG4gICAgfVxyXG4gICAgICA/IHtcclxuICAgICAgICAgIHByZXBhcmUoLi4uYTogbmV2ZXJbXSk6IE9taXQ8QSwgJ3R5cGUnPlxyXG4gICAgICAgIH1cclxuICAgICAgOiB7fVxyXG4gIH1cclxuXHJcbmZ1bmN0aW9uIGdldFR5cGUoc2xpY2U6IHN0cmluZywgYWN0aW9uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtzbGljZX0vJHthY3Rpb25LZXl9YFxyXG59XHJcblxyXG4vKipcclxuICogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gaW5pdGlhbCBzdGF0ZSwgYW4gb2JqZWN0IGZ1bGwgb2YgcmVkdWNlclxyXG4gKiBmdW5jdGlvbnMsIGFuZCBhIFwic2xpY2UgbmFtZVwiLCBhbmQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXNcclxuICogYWN0aW9uIGNyZWF0b3JzIGFuZCBhY3Rpb24gdHlwZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZVxyXG4gKiByZWR1Y2VycyBhbmQgc3RhdGUuXHJcbiAqXHJcbiAqIFRoZSBgcmVkdWNlcmAgYXJndW1lbnQgaXMgcGFzc2VkIHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xpY2U8XHJcbiAgU3RhdGUsXHJcbiAgQ2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+LFxyXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICBvcHRpb25zOiBDcmVhdGVTbGljZU9wdGlvbnM8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT5cclxuKTogU2xpY2U8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT4ge1xyXG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9uc1xyXG4gIGlmICghbmFtZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlJylcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxuICApIHtcclxuICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgJ1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBpbml0aWFsU3RhdGUgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnMuaW5pdGlhbFN0YXRlID09ICdmdW5jdGlvbidcclxuICAgICAgPyBvcHRpb25zLmluaXRpYWxTdGF0ZVxyXG4gICAgICA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSlcclxuXHJcbiAgY29uc3QgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9XHJcblxyXG4gIGNvbnN0IHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKVxyXG5cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBhY3Rpb25DcmVhdG9yczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+ID0ge31cclxuXHJcbiAgcmVkdWNlck5hbWVzLmZvckVhY2goKHJlZHVjZXJOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXVxyXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUobmFtZSwgcmVkdWNlck5hbWUpXHJcblxyXG4gICAgbGV0IGNhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgYW55PlxyXG4gICAgbGV0IHByZXBhcmVDYWxsYmFjazogUHJlcGFyZUFjdGlvbjxhbnk+IHwgdW5kZWZpbmVkXHJcblxyXG4gICAgaWYgKCdyZWR1Y2VyJyBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xyXG4gICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXJcclxuICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZVxyXG4gICAgfVxyXG5cclxuICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2tcclxuICAgICAgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKVxyXG4gICAgICA6IGNyZWF0ZUFjdGlvbih0eXBlKVxyXG4gIH0pXHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWVcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlU2xpY2UuZXh0cmFSZWR1Y2Vyc2AgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgW1xyXG4gICAgICBleHRyYVJlZHVjZXJzID0ge30sXHJcbiAgICAgIGFjdGlvbk1hdGNoZXJzID0gW10sXHJcbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHVuZGVmaW5lZCxcclxuICAgIF0gPVxyXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpXHJcbiAgICAgICAgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXVxyXG5cclxuICAgIGNvbnN0IGZpbmFsQ2FzZVJlZHVjZXJzID0geyAuLi5leHRyYVJlZHVjZXJzLCAuLi5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSB9XHJcblxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcclxuICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldIGFzIENhc2VSZWR1Y2VyPGFueT4pXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBhY3Rpb25NYXRjaGVycykge1xyXG4gICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcilcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsZXQgX3JlZHVjZXI6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFN0YXRlPlxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZSxcclxuICAgIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpXHJcblxyXG4gICAgICByZXR1cm4gX3JlZHVjZXIoc3RhdGUsIGFjdGlvbilcclxuICAgIH0sXHJcbiAgICBhY3Rpb25zOiBhY3Rpb25DcmVhdG9ycyBhcyBhbnksXHJcbiAgICBjYXNlUmVkdWNlcnM6IHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIGFzIGFueSxcclxuICAgIGdldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKVxyXG5cclxuICAgICAgcmV0dXJuIF9yZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSgpXHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZTxWPigpOiBFbnRpdHlTdGF0ZTxWPiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGlkczogW10sXHJcbiAgICBlbnRpdGllczoge30sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeTxWPigpIHtcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKTogRW50aXR5U3RhdGU8Vj5cclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGU8UyBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBhZGRpdGlvbmFsU3RhdGU6IFNcclxuICApOiBFbnRpdHlTdGF0ZTxWPiAmIFNcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlOiBhbnkgPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5pbXBvcnQgeyBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciB9IGZyb20gJy4uL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U2VsZWN0b3JzLFxyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5SWQsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpIHtcclxuICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoKTogRW50aXR5U2VsZWN0b3JzPFQsIEVudGl0eVN0YXRlPFQ+PlxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9yczxWPihcclxuICAgIHNlbGVjdFN0YXRlOiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIFY+XHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzPFY+KFxyXG4gICAgc2VsZWN0U3RhdGU/OiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIGFueT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlOiBFbnRpdHlTdGF0ZTxUPikgPT4gc3RhdGUuaWRzXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGU6IEVudGl0eVN0YXRlPFQ+KSA9PiBzdGF0ZS5lbnRpdGllc1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RJZHMsXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAoaWRzLCBlbnRpdGllcyk6IFRbXSA9PiBpZHMubWFwKChpZCkgPT4gZW50aXRpZXNbaWRdISlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBzZWxlY3RJZCA9IChfOiB1bmtub3duLCBpZDogRW50aXR5SWQpID0+IGlkXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0QnlJZCA9IChlbnRpdGllczogRGljdGlvbmFyeTxUPiwgaWQ6IEVudGl0eUlkKSA9PiBlbnRpdGllc1tpZF1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoIXNlbGVjdFN0YXRlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VsZWN0SWRzLFxyXG4gICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgIHNlbGVjdEFsbCxcclxuICAgICAgICBzZWxlY3RUb3RhbCxcclxuICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgc2VsZWN0SWQsXHJcbiAgICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICAgKSxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RTdGF0ZSBhcyBTZWxlY3RvcjxWLCBFbnRpdHlTdGF0ZTxUPj4sXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICAgIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICBzZWxlY3RJZCxcclxuICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICksXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBnZXRTZWxlY3RvcnMgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnQgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSwgUHJldmVudEFueSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGlzRlNBIH0gZnJvbSAnLi4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBJc0FueSB9IGZyb20gJy4uL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3I8Vj4oXHJcbiAgbXV0YXRvcjogKHN0YXRlOiBFbnRpdHlTdGF0ZTxWPikgPT4gdm9pZFxyXG4pIHtcclxuICBjb25zdCBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoKF86IHVuZGVmaW5lZCwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PlxyXG4gICAgbXV0YXRvcihzdGF0ZSlcclxuICApXHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBQcmV2ZW50QW55PFMsIFY+XHJcbiAgKTogUyB7XHJcbiAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUgYXMgUywgdW5kZWZpbmVkKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3I8ViwgUj4oXHJcbiAgbXV0YXRvcjogKGFyZzogUiwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PiB2b2lkXHJcbikge1xyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBTLFxyXG4gICAgYXJnOiBSIHwgUGF5bG9hZEFjdGlvbjxSPlxyXG4gICk6IFMge1xyXG4gICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoXHJcbiAgICAgIGFyZzogUiB8IFBheWxvYWRBY3Rpb248Uj5cclxuICAgICk6IGFyZyBpcyBQYXlsb2FkQWN0aW9uPFI+IHtcclxuICAgICAgcmV0dXJuIGlzRlNBKGFyZylcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBydW5NdXRhdG9yID0gKGRyYWZ0OiBFbnRpdHlTdGF0ZTxWPikgPT4ge1xyXG4gICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLnBheWxvYWQsIGRyYWZ0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLCBkcmFmdClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RyYWZ0KHN0YXRlKSkge1xyXG4gICAgICAvLyB3ZSBtdXN0IGFscmVhZHkgYmUgaW5zaWRlIGEgYGNyZWF0ZU5leHRTdGF0ZWAgY2FsbCwgbGlrZWx5IGJlY2F1c2VcclxuICAgICAgLy8gdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCBvciBgY3JlYXRlU2xpY2VgLlxyXG4gICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBwYXNzIHRoZSBkcmFmdCB0byB0aGUgbXV0YXRvci5cclxuICAgICAgcnVuTXV0YXRvcihzdGF0ZSlcclxuXHJcbiAgICAgIC8vIHNpbmNlIGl0J3MgYSBkcmFmdCwgd2UnbGwganVzdCByZXR1cm4gaXRcclxuICAgICAgcmV0dXJuIHN0YXRlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBAdHMtaWdub3JlIGNyZWF0ZU5leHRTdGF0ZSgpIHByb2R1Y2VzIGFuIEltbXV0YWJsZTxEcmFmdDxTPj4gcmF0aGVyXHJcbiAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAvLyB0aGVzZSB0d28gdHlwZXMuXHJcbiAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUoc3RhdGUsIHJ1bk11dGF0b3IpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEVudGl0eVN0YXRlLCBJZFNlbGVjdG9yLCBVcGRhdGUsIEVudGl0eUlkIH0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZTxUPihlbnRpdHk6IFQsIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+KSB7XHJcbiAgY29uc3Qga2V5ID0gc2VsZWN0SWQoZW50aXR5KVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc29sZS53YXJuKFxyXG4gICAgICAnVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLicsXHJcbiAgICAgICdZb3Ugc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgeW91ciBvd24gYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbi4nLFxyXG4gICAgICAnVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6JyxcclxuICAgICAgZW50aXR5LFxyXG4gICAgICAnVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246JyxcclxuICAgICAgc2VsZWN0SWQudG9TdHJpbmcoKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGtleVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW50aXRpZXNBcnJheTxUPihcclxuICBlbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPlxyXG4pOiByZWFkb25seSBUW10ge1xyXG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgIGVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhlbnRpdGllcylcclxuICB9XHJcblxyXG4gIHJldHVybiBlbnRpdGllc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllczxUPihcclxuICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzdGF0ZTogRW50aXR5U3RhdGU8VD5cclxuKTogW1RbXSwgVXBkYXRlPFQ+W11dIHtcclxuICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gIGNvbnN0IGFkZGVkOiBUW10gPSBbXVxyXG4gIGNvbnN0IHVwZGF0ZWQ6IFVwZGF0ZTxUPltdID0gW11cclxuXHJcbiAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcclxuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKVxyXG4gICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgIHVwZGF0ZWQucHVzaCh7IGlkLCBjaGFuZ2VzOiBlbnRpdHkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZVN0YXRlT3BlcmF0b3IsXHJcbiAgY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yLFxyXG59IGZyb20gJy4vc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyPFQ+KFxyXG4gIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+XHJcbik6IEVudGl0eVN0YXRlQWRhcHRlcjxUPiB7XHJcbiAgdHlwZSBSID0gRW50aXR5U3RhdGU8VD5cclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpXHJcblxyXG4gICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZS5pZHMucHVzaChrZXkpXHJcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZClcclxuICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KVxyXG4gICAgfVxyXG4gICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcbiAgICBzdGF0ZS5lbnRpdGllcyA9IHt9XHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlT25lTXV0YWJseShrZXk6IEVudGl0eUlkLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHJlbW92ZU1hbnlNdXRhYmx5KFtrZXldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXM6IHJlYWRvbmx5IEVudGl0eUlkW10sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBsZXQgZGlkTXV0YXRlID0gZmFsc2VcclxuXHJcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV1cclxuICAgICAgICBkaWRNdXRhdGUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgIGlkczogW10sXHJcbiAgICAgIGVudGl0aWVzOiB7fSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0YWtlTmV3S2V5KFxyXG4gICAga2V5czogeyBbaWQ6IHN0cmluZ106IEVudGl0eUlkIH0sXHJcbiAgICB1cGRhdGU6IFVwZGF0ZTxUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgIGNvbnN0IHVwZGF0ZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbCwgdXBkYXRlLmNoYW5nZXMpXHJcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKVxyXG4gICAgY29uc3QgaGFzTmV3S2V5ID0gbmV3S2V5ICE9PSB1cGRhdGUuaWRcclxuXHJcbiAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleVxyXG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkXHJcblxyXG4gICAgcmV0dXJuIGhhc05ld0tleVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdLZXlzOiB7IFtpZDogc3RyaW5nXTogRW50aXR5SWQgfSA9IHt9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eTogeyBbaWQ6IHN0cmluZ106IFVwZGF0ZTxUPiB9ID0ge31cclxuXHJcbiAgICB1cGRhdGVzLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xyXG4gICAgICAvLyBPbmx5IGFwcGx5IHVwZGF0ZXMgdG8gZW50aXRpZXMgdGhhdCBjdXJyZW50bHkgZXhpc3RcclxuICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB1cGRhdGVzIHRvIG9uZSBlbnRpdHksIG1lcmdlIHRoZW0gdG9nZXRoZXJcclxuICAgICAgICB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPSB7XHJcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgLy8gU3ByZWFkcyBpZ25vcmUgZmFsc3kgdmFsdWVzLCBzbyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUgaXNuJ3RcclxuICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHVwZGF0ZSBhbHJlYWR5IGF0IHRoaXMga2V5XHJcbiAgICAgICAgICBjaGFuZ2VzOiB7XHJcbiAgICAgICAgICAgIC4uLih1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF1cclxuICAgICAgICAgICAgICA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzXHJcbiAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgLi4udXBkYXRlLmNoYW5nZXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KVxyXG5cclxuICAgIGNvbnN0IGRpZE11dGF0ZUVudGl0aWVzID0gdXBkYXRlcy5sZW5ndGggPiAwXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9XHJcbiAgICAgICAgdXBkYXRlcy5maWx0ZXIoKHVwZGF0ZSkgPT4gdGFrZU5ld0tleShuZXdLZXlzLCB1cGRhdGUsIHN0YXRlKSkubGVuZ3RoID5cclxuICAgICAgICAwXHJcblxyXG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgc3RhdGUuaWRzID0gT2JqZWN0LmtleXMoc3RhdGUuZW50aXRpZXMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxyXG4gICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgSWRTZWxlY3RvcixcclxuICBDb21wYXJlcixcclxuICBFbnRpdHlTdGF0ZUFkYXB0ZXIsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTdGF0ZU9wZXJhdG9yIH0gZnJvbSAnLi9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcjxUPihcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzb3J0OiBDb21wYXJlcjxUPlxyXG4pOiBFbnRpdHlTdGF0ZUFkYXB0ZXI8VD4ge1xyXG4gIHR5cGUgUiA9IEVudGl0eVN0YXRlPFQ+XHJcblxyXG4gIGNvbnN0IHsgcmVtb3ZlT25lLCByZW1vdmVNYW55LCByZW1vdmVBbGwgfSA9XHJcbiAgICBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gICAgY29uc3QgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKFxyXG4gICAgICAobW9kZWwpID0+ICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKVxyXG4gICAgKVxyXG5cclxuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIG1lcmdlKG1vZGVscywgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiBzZXRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIHN0YXRlLmVudGl0aWVzID0ge31cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBsZXQgYXBwbGllZFVwZGF0ZXMgPSBmYWxzZVxyXG5cclxuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWVcclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5LCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpXHJcbiAgICAgIGlmICh1cGRhdGUuaWQgIT09IG5ld0lkKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGE6IHJlYWRvbmx5IHVua25vd25bXSwgYjogcmVhZG9ubHkgdW5rbm93bltdKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1lcmdlKG1vZGVsczogcmVhZG9ubHkgVFtdLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgLy8gSW5zZXJ0L292ZXJ3cml0ZSBhbGwgbmV3L3VwZGF0ZWRcclxuICAgIG1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xyXG4gICAgICBzdGF0ZS5lbnRpdGllc1tzZWxlY3RJZChtb2RlbCldID0gbW9kZWxcclxuICAgIH0pXHJcblxyXG4gICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZTogUikge1xyXG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVudGl0aWVzKSBhcyBUW11cclxuICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydClcclxuXHJcbiAgICBjb25zdCBuZXdTb3J0ZWRJZHMgPSBhbGxFbnRpdGllcy5tYXAoc2VsZWN0SWQpXHJcbiAgICBjb25zdCB7IGlkcyB9ID0gc3RhdGVcclxuXHJcbiAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVPbmUsXHJcbiAgICByZW1vdmVNYW55LFxyXG4gICAgcmVtb3ZlQWxsLFxyXG4gICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5RGVmaW5pdGlvbixcclxuICBDb21wYXJlcixcclxuICBJZFNlbGVjdG9yLFxyXG4gIEVudGl0eUFkYXB0ZXIsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB7IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkgfSBmcm9tICcuL2VudGl0eV9zdGF0ZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSB9IGZyb20gJy4vc3RhdGVfc2VsZWN0b3JzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIgfSBmcm9tICcuL3NvcnRlZF9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9uc1xyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcjxUPihcclxuICBvcHRpb25zOiB7XHJcbiAgICBzZWxlY3RJZD86IElkU2VsZWN0b3I8VD5cclxuICAgIHNvcnRDb21wYXJlcj86IGZhbHNlIHwgQ29tcGFyZXI8VD5cclxuICB9ID0ge31cclxuKTogRW50aXR5QWRhcHRlcjxUPiB7XHJcbiAgY29uc3QgeyBzZWxlY3RJZCwgc29ydENvbXBhcmVyIH06IEVudGl0eURlZmluaXRpb248VD4gPSB7XHJcbiAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZTogYW55KSA9PiBpbnN0YW5jZS5pZCxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZUZhY3RvcnkgPSBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5PFQ+KClcclxuICBjb25zdCBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpXHJcbiAgY29uc3Qgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyXHJcbiAgICA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKVxyXG4gICAgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHNlbGVjdElkLFxyXG4gICAgc29ydENvbXBhcmVyLFxyXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxyXG4gICAgLi4uc2VsZWN0b3JzRmFjdG9yeSxcclxuICAgIC4uLnN0YXRlQWRhcHRlcixcclxuICB9XHJcbn1cclxuIiwgIi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FpL25hbm9pZC9ibG9iLzMuMC4yL25vbi1zZWN1cmUvaW5kZXguanNcclxuLy8gVGhpcyBhbHBoYWJldCB1c2VzIGBBLVphLXowLTlfLWAgc3ltYm9scy4gQSBnZW5ldGljIGFsZ29yaXRobSBoZWxwZWRcclxuLy8gb3B0aW1pemUgdGhlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoaXMgYWxwaGFiZXQuXHJcbmxldCB1cmxBbHBoYWJldCA9XHJcbiAgJ01vZHVsZVN5bWJoYXNPd25Qci0wMTIzNDU2Nzg5QUJDREVGR0hOUlZmZ2N0aVV2el9LcVlUSmtMeHBaWElqUVcnXHJcblxyXG4vKipcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PiB7XHJcbiAgbGV0IGlkID0gJydcclxuICAvLyBBIGNvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgLlxyXG4gIGxldCBpID0gc2l6ZVxyXG4gIHdoaWxlIChpLS0pIHtcclxuICAgIC8vIGB8IDBgIGlzIG1vcmUgY29tcGFjdCBhbmQgZmFzdGVyIHRoYW4gYE1hdGguZmxvb3IoKWAuXHJcbiAgICBpZCArPSB1cmxBbHBoYWJldFsoTWF0aC5yYW5kb20oKSAqIDY0KSB8IDBdXHJcbiAgfVxyXG4gIHJldHVybiBpZFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIFBheWxvYWRBY3Rpb24sXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiB9IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgdHlwZSB7IFRodW5rRGlzcGF0Y2ggfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBGYWxsYmFja0lmVW5rbm93biwgSWQsIElzQW55LCBJc1Vua25vd24gfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnLi9uYW5vaWQnXHJcblxyXG4vLyBAdHMtaWdub3JlIHdlIG5lZWQgdGhlIGltcG9ydCBvZiB0aGVzZSB0eXBlcyBkdWUgdG8gYSBidW5kbGluZyBpc3N1ZS5cclxudHlwZSBfS2VlcCA9IFBheWxvYWRBY3Rpb24gfCBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxhbnksIHVua25vd24+XHJcblxyXG5leHBvcnQgdHlwZSBCYXNlVGh1bmtBUEk8XHJcbiAgUyxcclxuICBFLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaCA9IERpc3BhdGNoLFxyXG4gIFJlamVjdGVkVmFsdWUgPSB1bmtub3duLFxyXG4gIFJlamVjdGVkTWV0YSA9IHVua25vd24sXHJcbiAgRnVsZmlsbGVkTWV0YSA9IHVua25vd25cclxuPiA9IHtcclxuICBkaXNwYXRjaDogRFxyXG4gIGdldFN0YXRlOiAoKSA9PiBTXHJcbiAgZXh0cmE6IEVcclxuICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuICBhYm9ydDogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZFxyXG4gIHJlamVjdFdpdGhWYWx1ZTogSXNVbmtub3duPFxyXG4gICAgUmVqZWN0ZWRNZXRhLFxyXG4gICAgKHZhbHVlOiBSZWplY3RlZFZhbHVlKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPixcclxuICAgIChcclxuICAgICAgdmFsdWU6IFJlamVjdGVkVmFsdWUsXHJcbiAgICAgIG1ldGE6IFJlamVjdGVkTWV0YVxyXG4gICAgKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPlxyXG4gID5cclxuICBmdWxmaWxsV2l0aFZhbHVlOiBJc1Vua25vd248XHJcbiAgICBGdWxmaWxsZWRNZXRhLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPih2YWx1ZTogRnVsZmlsbGVkVmFsdWUpID0+IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPihcclxuICAgICAgdmFsdWU6IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgICBtZXRhOiBGdWxmaWxsZWRNZXRhXHJcbiAgICApID0+IEZ1bGZpbGxXaXRoTWV0YTxGdWxmaWxsZWRWYWx1ZSwgRnVsZmlsbGVkTWV0YT5cclxuICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRFcnJvciB7XHJcbiAgbmFtZT86IHN0cmluZ1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmdcclxuICBzdGFjaz86IHN0cmluZ1xyXG4gIGNvZGU/OiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgY29tbW9uUHJvcGVydGllczogQXJyYXk8a2V5b2YgU2VyaWFsaXplZEVycm9yPiA9IFtcclxuICAnbmFtZScsXHJcbiAgJ21lc3NhZ2UnLFxyXG4gICdzdGFjaycsXHJcbiAgJ2NvZGUnLFxyXG5dXHJcblxyXG5jbGFzcyBSZWplY3RXaXRoVmFsdWU8UGF5bG9hZCwgUmVqZWN0ZWRNZXRhPiB7XHJcbiAgLypcclxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxyXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcclxuICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3R5cGUhOiAnUmVqZWN0V2l0aFZhbHVlJ1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHBheWxvYWQ6IFBheWxvYWQsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWV0YTogUmVqZWN0ZWRNZXRhXHJcbiAgKSB7fVxyXG59XHJcblxyXG5jbGFzcyBGdWxmaWxsV2l0aE1ldGE8UGF5bG9hZCwgRnVsZmlsbGVkTWV0YT4ge1xyXG4gIC8qXHJcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcclxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXHJcbiAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlITogJ0Z1bGZpbGxXaXRoTWV0YSdcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSBwYXlsb2FkOiBQYXlsb2FkLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGE6IEZ1bGZpbGxlZE1ldGFcclxuICApIHt9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJpYWxpemVzIGFuIGVycm9yIGludG8gYSBwbGFpbiBvYmplY3QuXHJcbiAqIFJld29ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9zZXJpYWxpemUtZXJyb3JcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1pbmlTZXJpYWxpemVFcnJvciA9ICh2YWx1ZTogYW55KTogU2VyaWFsaXplZEVycm9yID0+IHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2ltcGxlRXJyb3I6IFNlcmlhbGl6ZWRFcnJvciA9IHt9XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGNvbW1vblByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2ltcGxlRXJyb3JcclxuICB9XHJcblxyXG4gIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfVxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtDb25maWcgPSB7XHJcbiAgc3RhdGU/OiB1bmtub3duXHJcbiAgZGlzcGF0Y2g/OiBEaXNwYXRjaFxyXG4gIGV4dHJhPzogdW5rbm93blxyXG4gIHJlamVjdFZhbHVlPzogdW5rbm93blxyXG4gIHNlcmlhbGl6ZWRFcnJvclR5cGU/OiB1bmtub3duXHJcbiAgcGVuZGluZ01ldGE/OiB1bmtub3duXHJcbiAgZnVsZmlsbGVkTWV0YT86IHVua25vd25cclxuICByZWplY3RlZE1ldGE/OiB1bmtub3duXHJcbn1cclxuXHJcbnR5cGUgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc3RhdGU6IGluZmVyIFN0YXRlXHJcbn1cclxuICA/IFN0YXRlXHJcbiAgOiB1bmtub3duXHJcbnR5cGUgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7IGV4dHJhOiBpbmZlciBFeHRyYSB9XHJcbiAgPyBFeHRyYVxyXG4gIDogdW5rbm93blxyXG50eXBlIEdldERpc3BhdGNoPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGRpc3BhdGNoOiBpbmZlciBEaXNwYXRjaFxyXG59XHJcbiAgPyBGYWxsYmFja0lmVW5rbm93bjxcclxuICAgICAgRGlzcGF0Y2gsXHJcbiAgICAgIFRodW5rRGlzcGF0Y2g8XHJcbiAgICAgICAgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICBBbnlBY3Rpb25cclxuICAgICAgPlxyXG4gICAgPlxyXG4gIDogVGh1bmtEaXNwYXRjaDxHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPiwgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgR2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+ID0gQmFzZVRodW5rQVBJPFxyXG4gIEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0RGlzcGF0Y2g8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbnR5cGUgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0VmFsdWU6IGluZmVyIFJlamVjdFZhbHVlXHJcbn1cclxuICA/IFJlamVjdFZhbHVlXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHBlbmRpbmdNZXRhOiBpbmZlciBQZW5kaW5nTWV0YVxyXG59XHJcbiAgPyBQZW5kaW5nTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGZ1bGZpbGxlZE1ldGE6IGluZmVyIEZ1bGZpbGxlZE1ldGFcclxufVxyXG4gID8gRnVsZmlsbGVkTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0ZWRNZXRhOiBpbmZlciBSZWplY3RlZE1ldGFcclxufVxyXG4gID8gUmVqZWN0ZWRNZXRhXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc2VyaWFsaXplZEVycm9yVHlwZTogaW5mZXIgR2V0U2VyaWFsaXplZEVycm9yVHlwZVxyXG59XHJcbiAgPyBHZXRTZXJpYWxpemVkRXJyb3JUeXBlXHJcbiAgOiBTZXJpYWxpemVkRXJyb3JcclxuXHJcbnR5cGUgTWF5YmVQcm9taXNlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoVCBleHRlbmRzIGFueSA/IFByb21pc2U8VD4gOiBuZXZlcilcclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yUmV0dXJuVmFsdWU8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSBNYXliZVByb21pc2U8XHJcbiAgfCBJc1Vua25vd248XHJcbiAgICAgIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgRnVsZmlsbFdpdGhNZXRhPFJldHVybmVkLCBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPj5cclxuICAgID5cclxuICB8IFJlamVjdFdpdGhWYWx1ZTxcclxuICAgICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICA+XHJcbj5cclxuLyoqXHJcbiAqIEEgdHlwZSBkZXNjcmliaW5nIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnID0gdm9pZCxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWcgPSB7fVxyXG4+ID0gKFxyXG4gIGFyZzogVGh1bmtBcmcsXHJcbiAgdGh1bmtBUEk6IEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPlxyXG4pID0+IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlPFJldHVybmVkLCBUaHVua0FwaUNvbmZpZz5cclxuXHJcbi8qKlxyXG4gKiBBIFRodW5rQWN0aW9uIGNyZWF0ZWQgYnkgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBEaXNwYXRjaGluZyBpdCByZXR1cm5zIGEgUHJvbWlzZSBmb3IgZWl0aGVyIGFcclxuICogZnVsZmlsbGVkIG9yIHJlamVjdGVkIGFjdGlvbi5cclxuICogQWxzbywgdGhlIHJldHVybmVkIHZhbHVlIGNvbnRhaW5zIGFuIGBhYm9ydCgpYCBtZXRob2RcclxuICogdGhhdCBhbGxvd3MgdGhlIGFzeW5jQWN0aW9uIHRvIGJlIGNhbmNlbGxlZCBmcm9tIHRoZSBvdXRzaWRlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rQWN0aW9uPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gKFxyXG4gIGRpc3BhdGNoOiBHZXREaXNwYXRjaDxUaHVua0FwaUNvbmZpZz4sXHJcbiAgZ2V0U3RhdGU6ICgpID0+IEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBleHRyYTogR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+XHJcbikgPT4gUHJvbWlzZTxcclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8UmV0dXJuZWQsIFRodW5rQXJnPj5cclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+PlxyXG4+ICYge1xyXG4gIGFib3J0OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkXHJcbiAgcmVxdWVzdElkOiBzdHJpbmdcclxuICBhcmc6IFRodW5rQXJnXHJcbiAgdW53cmFwOiAoKSA9PiBQcm9taXNlPFJldHVybmVkPlxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gSXNBbnk8XHJcbiAgVGh1bmtBcmcsXHJcbiAgLy8gYW55IGhhbmRsaW5nXHJcbiAgKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgLy8gdW5rbm93biBoYW5kbGluZ1xyXG4gIHVua25vd24gZXh0ZW5kcyBUaHVua0FyZ1xyXG4gICAgPyAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBub3Qgc3BlY2lmaWVkIG9yIHNwZWNpZmllZCBhcyB2b2lkIG9yIHVuZGVmaW5lZFxyXG4gICAgOiBbVGh1bmtBcmddIGV4dGVuZHMgW3ZvaWRdIHwgW3VuZGVmaW5lZF1cclxuICAgID8gKCkgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBjb250YWlucyB2b2lkXHJcbiAgICA6IFt2b2lkXSBleHRlbmRzIFtUaHVua0FyZ10gLy8gbWFrZSBvcHRpb25hbFxyXG4gICAgPyAoYXJnPzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gLy8gYXJndW1lbnQgY29udGFpbnMgdW5kZWZpbmVkXHJcbiAgICA6IFt1bmRlZmluZWRdIGV4dGVuZHMgW1RodW5rQXJnXVxyXG4gICAgPyBXaXRoU3RyaWN0TnVsbENoZWNrczxcclxuICAgICAgICAvLyB3aXRoIHN0cmljdCBudWxsQ2hlY2tzOiBtYWtlIG9wdGlvbmFsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYXJnPzogVGh1bmtBcmdcclxuICAgICAgICApID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgLy8gd2l0aG91dCBzdHJpY3QgbnVsbCBjaGVja3MgdGhpcyB3aWxsIG1hdGNoIGV2ZXJ5dGhpbmcsIHNvIGRvbid0IG1ha2UgaXQgb3B0aW9uYWxcclxuICAgICAgICAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgICA+IC8vIGRlZmF1bHQgY2FzZTogbm9ybWFsIGFyZ3VtZW50XHJcbiAgICA6IChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIG9iamVjdCBmb3IgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rT3B0aW9uczxcclxuICBUaHVua0FyZyA9IHZvaWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnID0ge31cclxuPiA9IHtcclxuICAvKipcclxuICAgKiBBIG1ldGhvZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIGFzeW5jVGh1bmsgc2hvdWxkIGJlIGV4ZWN1dGVkLiBIYXMgYWNjZXNzIHRvIHRoZVxyXG4gICAqIGBhcmdgLCBgYXBpLmdldFN0YXRlKClgIGFuZCBgYXBpLmV4dHJhYCBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGlmIGl0IHNob3VsZCBiZSBza2lwcGVkXHJcbiAgICovXHJcbiAgY29uZGl0aW9uPyhcclxuICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICApOiBNYXliZVByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD5cclxuICAvKipcclxuICAgKiBJZiBgY29uZGl0aW9uYCByZXR1cm5zIGBmYWxzZWAsIHRoZSBhc3luY1RodW5rIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hldGhlciBhIGByZWplY3RlZGAgYWN0aW9uIHdpdGggYG1ldGEuY29uZGl0aW9uID09IGZhbHNlYFxyXG4gICAqIHdpbGwgYmUgZGlzcGF0Y2hlZCBvciBub3QuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXHJcbiAgICovXHJcbiAgZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24/OiBib29sZWFuXHJcblxyXG4gIHNlcmlhbGl6ZUVycm9yPzogKHg6IHVua25vd24pID0+IEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgYHJlcXVlc3RJZGAgZm9yIHRoZSByZXF1ZXN0IHNlcXVlbmNlLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYG5hbm9pZGBcclxuICAgKi9cclxuICBpZEdlbmVyYXRvcj86IChhcmc6IFRodW5rQXJnKSA9PiBzdHJpbmdcclxufSAmIElzVW5rbm93bjxcclxuICBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz4sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBVc2luZyB0aGlzIG9wdGlvbmFsIG92ZXJsb2FkIHdpbGwgbm90IG1vZGlmeSB0aGUgdHlwZXMgY29ycmVjdGx5LCB0aGlzIG92ZXJsb2FkIGlzIG9ubHkgaW4gcGxhY2UgdG8gc3VwcG9ydCBKYXZhU2NyaXB0IHVzZXJzLlxyXG4gICAgICogUGxlYXNlIHVzZSB0aGUgYFRodW5rQXBpQ29uZmlnYCBwYXJhbWV0ZXIgYHBlbmRpbmdNZXRhYCB0byBnZXQgYWNjZXNzIHRvIGEgY29ycmVjdGx5IHR5cGVkIG92ZXJsb2FkXHJcbiAgICAgKi9cclxuICAgIGdldFBlbmRpbmdNZXRhPyhcclxuICAgICAgYmFzZToge1xyXG4gICAgICAgIGFyZzogVGh1bmtBcmdcclxuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgICB9LFxyXG4gICAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICAgICk6IEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gIH0sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVuZGluZ01ldGEoXHJcbiAgICAgIGJhc2U6IHtcclxuICAgICAgICBhcmc6IFRodW5rQXJnXHJcbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgICAgfSxcclxuICAgICAgYXBpOiBQaWNrPEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiwgJ2dldFN0YXRlJyB8ICdleHRyYSc+XHJcbiAgICApOiBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICB9XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyA9IHt9XHJcbj4gPSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBbc3RyaW5nLCBUaHVua0FyZywgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+P10sXHJcbiAgdW5kZWZpbmVkLFxyXG4gIHN0cmluZyxcclxuICBuZXZlcixcclxuICB7XHJcbiAgICBhcmc6IFRodW5rQXJnXHJcbiAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnXHJcbiAgfSAmIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtcclxuICAgIEVycm9yIHwgbnVsbCxcclxuICAgIHN0cmluZyxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+PyxcclxuICAgIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XHJcbiAgXSxcclxuICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4gfCB1bmRlZmluZWQsXHJcbiAgc3RyaW5nLFxyXG4gIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+LFxyXG4gIHtcclxuICAgIGFyZzogVGh1bmtBcmdcclxuICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICByZXF1ZXN0U3RhdHVzOiAncmVqZWN0ZWQnXHJcbiAgICBhYm9ydGVkOiBib29sZWFuXHJcbiAgICBjb25kaXRpb246IGJvb2xlYW5cclxuICB9ICYgKFxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogZmFsc2UgfSAmIHtcclxuICAgICAgICBbSyBpbiBrZXlvZiBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XT86IHVuZGVmaW5lZFxyXG4gICAgICB9KVxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogdHJ1ZSB9ICYgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPilcclxuICApXHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtSZXR1cm5lZCwgc3RyaW5nLCBUaHVua0FyZywgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XSxcclxuICBSZXR1cm5lZCxcclxuICBzdHJpbmcsXHJcbiAgbmV2ZXIsXHJcbiAge1xyXG4gICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgIHJlcXVlc3RTdGF0dXM6ICdmdWxmaWxsZWQnXHJcbiAgfSAmIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVuazxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+ICYge1xyXG4gIHBlbmRpbmc6IEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gIGZ1bGZpbGxlZDogQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWdcclxuICA+XHJcbiAgdHlwZVByZWZpeDogc3RyaW5nXHJcbn1cclxuXHJcbnR5cGUgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8T2xkQ29uZmlnLCBOZXdDb25maWc+ID0gSWQ8XHJcbiAgTmV3Q29uZmlnICYgT21pdDxPbGRDb25maWcsIGtleW9mIE5ld0NvbmZpZz5cclxuPlxyXG5cclxudHlwZSBDcmVhdGVBc3luY1RodW5rPEN1cnJpZWRUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+ID0ge1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR5cGVQcmVmaXhcclxuICAgKiBAcGFyYW0gcGF5bG9hZENyZWF0b3JcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIC8vIHNlcGFyYXRlIHNpZ25hdHVyZSB3aXRob3V0IGBBc3luY1RodW5rQ29uZmlnYCBmb3IgYmV0dGVyIGluZmVyZW5jZVxyXG4gIDxSZXR1cm5lZCwgVGh1bmtBcmcgPSB2b2lkPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgQ3VycmllZFRodW5rQXBpQ29uZmlnXHJcbiAgICA+LFxyXG4gICAgb3B0aW9ucz86IEFzeW5jVGh1bmtPcHRpb25zPFRodW5rQXJnLCBDdXJyaWVkVGh1bmtBcGlDb25maWc+XHJcbiAgKTogQXN5bmNUaHVuazxSZXR1cm5lZCwgVGh1bmtBcmcsIEN1cnJpZWRUaHVua0FwaUNvbmZpZz5cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZVByZWZpeFxyXG4gICAqIEBwYXJhbSBwYXlsb2FkQ3JlYXRvclxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8XHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgPlxyXG4gICk6IEFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICA+XHJcblxyXG4gIHdpdGhUeXBlczxUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+KCk6IENyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gID5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFzeW5jVGh1bmsgPSAoKCkgPT4ge1xyXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbiAgPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgVGh1bmtBcGlDb25maWdcclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICk6IEFzeW5jVGh1bms8UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4ge1xyXG4gICAgdHlwZSBSZWplY3RlZFZhbHVlID0gR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIFBlbmRpbmdNZXRhID0gR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIEZ1bGZpbGxlZE1ldGEgPSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgdHlwZSBSZWplY3RlZE1ldGEgPSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gICAgY29uc3QgZnVsZmlsbGVkOiBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgPiA9IGNyZWF0ZUFjdGlvbihcclxuICAgICAgdHlwZVByZWZpeCArICcvZnVsZmlsbGVkJyxcclxuICAgICAgKFxyXG4gICAgICAgIHBheWxvYWQ6IFJldHVybmVkLFxyXG4gICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICAgICAgbWV0YT86IEZ1bGZpbGxlZE1ldGFcclxuICAgICAgKSA9PiAoe1xyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgcmVxdWVzdFN0YXR1czogJ2Z1bGZpbGxlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBwZW5kaW5nOiBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9wZW5kaW5nJyxcclxuICAgICAgICAocmVxdWVzdElkOiBzdHJpbmcsIGFyZzogVGh1bmtBcmcsIG1ldGE/OiBQZW5kaW5nTWV0YSkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnIGFzIGNvbnN0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgY29uc3QgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9yZWplY3RlZCcsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgZXJyb3I6IEVycm9yIHwgbnVsbCxcclxuICAgICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgICAgYXJnOiBUaHVua0FyZyxcclxuICAgICAgICAgIHBheWxvYWQ/OiBSZWplY3RlZFZhbHVlLFxyXG4gICAgICAgICAgbWV0YT86IFJlamVjdGVkTWV0YVxyXG4gICAgICAgICkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgICBlcnJvcjogKChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IpIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoXHJcbiAgICAgICAgICAgIGVycm9yIHx8ICdSZWplY3RlZCdcclxuICAgICAgICAgICkgYXMgR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAgIC4uLigobWV0YSBhcyBhbnkpIHx8IHt9KSxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6ICdyZWplY3RlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgICAgIGFib3J0ZWQ6IGVycm9yPy5uYW1lID09PSAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogZXJyb3I/Lm5hbWUgPT09ICdDb25kaXRpb25FcnJvcicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICBsZXQgZGlzcGxheWVkV2FybmluZyA9IGZhbHNlXHJcblxyXG4gICAgY29uc3QgQUMgPVxyXG4gICAgICB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gQWJvcnRDb250cm9sbGVyXHJcbiAgICAgICAgOiBjbGFzcyBpbXBsZW1lbnRzIEFib3J0Q29udHJvbGxlciB7XHJcbiAgICAgICAgICAgIHNpZ25hbCA9IHtcclxuICAgICAgICAgICAgICBhYm9ydGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKCkge30sXHJcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb25hYm9ydCgpIHt9LFxyXG4gICAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcclxuICAgICAgICAgICAgICByZWFzb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZCgpIHt9LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFib3J0KCkge1xyXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXllZFdhcm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgIGBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IGltcGxlbWVudCBBYm9ydENvbnRyb2xsZXIuIFxyXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBcXGBhYm9ydFxcYCBldmVudHMsIHBsZWFzZSBjb25zaWRlciBpbXBvcnRpbmcgYSBwb2x5ZmlsbCBsaWtlICdhYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwtb25seScuYFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihcclxuICAgICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgKTogQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiB7XHJcbiAgICAgIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnM/LmlkR2VuZXJhdG9yXHJcbiAgICAgICAgICA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKVxyXG4gICAgICAgICAgOiBuYW5vaWQoKVxyXG5cclxuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQUMoKVxyXG4gICAgICAgIGxldCBhYm9ydFJlYXNvbjogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIGxldCBzdGFydGVkID0gZmFsc2VcclxuICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24/OiBzdHJpbmcpIHtcclxuICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uXHJcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgZmluYWxBY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIGZ1bGZpbGxlZCB8IHR5cGVvZiByZWplY3RlZD5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBvcHRpb25zPy5jb25kaXRpb24/LihhcmcsIHsgZ2V0U3RhdGUsIGV4dHJhIH0pXHJcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBhd2FpdCBjb25kaXRpb25SZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcclxuICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZGl0aW9uRXJyb3InLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Fib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuJyxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhcnRlZCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFib3J0ZWRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+XHJcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+XHJcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8ICdBYm9ydGVkJyxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgIHBlbmRpbmcoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zPy5nZXRQZW5kaW5nTWV0YT8uKFxyXG4gICAgICAgICAgICAgICAgICB7IHJlcXVlc3RJZCwgYXJnIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgZ2V0U3RhdGUsIGV4dHJhIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgIGFib3J0ZWRQcm9taXNlLFxyXG4gICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcclxuICAgICAgICAgICAgICAgIHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCxcclxuICAgICAgICAgICAgICAgICAgZ2V0U3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogKChcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogUmVqZWN0ZWRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRhPzogUmVqZWN0ZWRNZXRhXHJcbiAgICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKVxyXG4gICAgICAgICAgICAgICAgICB9KSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6ICgodmFsdWU6IHVua25vd24sIG1ldGE/OiBGdWxmaWxsZWRNZXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpXHJcbiAgICAgICAgICAgICAgICAgIH0pIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0IGFzIGFueSwgcmVxdWVzdElkLCBhcmcpXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPVxyXG4gICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZVxyXG4gICAgICAgICAgICAgICAgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyLnBheWxvYWQsIGVyci5tZXRhKVxyXG4gICAgICAgICAgICAgICAgOiByZWplY3RlZChlcnIgYXMgYW55LCByZXF1ZXN0SWQsIGFyZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFdlIGRpc3BhdGNoIHRoZSByZXN1bHQgYWN0aW9uIF9hZnRlcl8gdGhlIGNhdGNoLCB0byBhdm9pZCBoYXZpbmcgYW55IGVycm9yc1xyXG4gICAgICAgICAgLy8gaGVyZSBnZXQgc3dhbGxvd2VkIGJ5IHRoZSB0cnkvY2F0Y2ggYmxvY2ssXHJcbiAgICAgICAgICAvLyBwZXIgaHR0cHM6Ly90d2l0dGVyLmNvbS9kYW5fYWJyYW1vdi9zdGF0dXMvNzcwOTE0MjIxNjM4OTQyNzIwXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtdG9vbGtpdC9ibG9iL2U4NWViMTdiMzlhMjExOGQ4NTlmN2I3NzQ2ZTBmM2ZlZTUyM2UwODkvZG9jcy90dXRvcmlhbHMvYWR2YW5jZWQtdHV0b3JpYWwubWQjYXN5bmMtZXJyb3ItaGFuZGxpbmctbG9naWMtaW4tdGh1bmtzXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2tpcERpc3BhdGNoID1cclxuICAgICAgICAgICAgb3B0aW9ucyAmJlxyXG4gICAgICAgICAgICAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJlxyXG4gICAgICAgICAgICByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiZcclxuICAgICAgICAgICAgKGZpbmFsQWN0aW9uIGFzIGFueSkubWV0YS5jb25kaXRpb25cclxuXHJcbiAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaW5hbEFjdGlvblxyXG4gICAgICAgIH0pKClcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlIGFzIFByb21pc2U8YW55Piwge1xyXG4gICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICB1bndyYXAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW48YW55Pih1bndyYXBSZXN1bHQpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgYWN0aW9uQ3JlYXRvciBhcyBBc3luY1RodW5rQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgICBSZXR1cm5lZCxcclxuICAgICAgICBUaHVua0FyZyxcclxuICAgICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgICA+LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGVuZGluZyxcclxuICAgICAgICByZWplY3RlZCxcclxuICAgICAgICBmdWxmaWxsZWQsXHJcbiAgICAgICAgdHlwZVByZWZpeCxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuICBjcmVhdGVBc3luY1RodW5rLndpdGhUeXBlcyA9ICgpID0+IGNyZWF0ZUFzeW5jVGh1bmtcclxuXHJcbiAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsgYXMgQ3JlYXRlQXN5bmNUaHVuazxBc3luY1RodW5rQ29uZmlnPlxyXG59KSgpXHJcblxyXG5pbnRlcmZhY2UgVW53cmFwcGFibGVBY3Rpb24ge1xyXG4gIHBheWxvYWQ6IGFueVxyXG4gIG1ldGE/OiBhbnlcclxuICBlcnJvcj86IGFueVxyXG59XHJcblxyXG50eXBlIFVud3JhcHBlZEFjdGlvblBheWxvYWQ8VCBleHRlbmRzIFVud3JhcHBhYmxlQWN0aW9uPiA9IEV4Y2x1ZGU8XHJcbiAgVCxcclxuICB7IGVycm9yOiBhbnkgfVxyXG4+WydwYXlsb2FkJ11cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwUmVzdWx0PFIgZXh0ZW5kcyBVbndyYXBwYWJsZUFjdGlvbj4oXHJcbiAgYWN0aW9uOiBSXHJcbik6IFVud3JhcHBlZEFjdGlvblBheWxvYWQ8Uj4ge1xyXG4gIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xyXG4gICAgdGhyb3cgYWN0aW9uLnBheWxvYWRcclxuICB9XHJcbiAgaWYgKGFjdGlvbi5lcnJvcikge1xyXG4gICAgdGhyb3cgYWN0aW9uLmVycm9yXHJcbiAgfVxyXG4gIHJldHVybiBhY3Rpb24ucGF5bG9hZFxyXG59XHJcblxyXG50eXBlIFdpdGhTdHJpY3ROdWxsQ2hlY2tzPFRydWUsIEZhbHNlPiA9IHVuZGVmaW5lZCBleHRlbmRzIGJvb2xlYW5cclxuICA/IEZhbHNlXHJcbiAgOiBUcnVlXHJcblxyXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxhbnk+IHtcclxuICByZXR1cm4gKFxyXG4gICAgdmFsdWUgIT09IG51bGwgJiZcclxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nXHJcbiAgKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXIsXHJcbiAgTWF0Y2hlcixcclxuICBVbmlvblRvSW50ZXJzZWN0aW9uLFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB0eXBlIHtcclxuICBBc3luY1RodW5rLFxyXG4gIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yLFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcixcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlQXN5bmNUaHVuaydcclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8TWF0Y2hlcnNbbnVtYmVyXT5cclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgVW5pb25Ub0ludGVyc2VjdGlvbjxBY3Rpb25NYXRjaGluZ0FueU9mPE1hdGNoZXJzPj5cclxuXHJcbmNvbnN0IG1hdGNoZXMgPSAobWF0Y2hlcjogTWF0Y2hlcjxhbnk+LCBhY3Rpb246IGFueSkgPT4ge1xyXG4gIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XHJcbiAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIG1hdGNoZXMgYW55IG9uZSBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5zb21lKChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBtYXRjaGVzIGFsbCBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbGxPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5ldmVyeSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBhY3Rpb24gQSByZWR1eCBhY3Rpb25cclxuICogQHBhcmFtIHZhbGlkU3RhdHVzIEFuIGFycmF5IG9mIHZhbGlkIG1ldGEucmVxdWVzdFN0YXR1cyB2YWx1ZXNcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoXHJcbiAgYWN0aW9uOiBhbnksXHJcbiAgdmFsaWRTdGF0dXM6IHJlYWRvbmx5IHN0cmluZ1tdXHJcbikge1xyXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gJ3N0cmluZydcclxuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPVxyXG4gICAgdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xXHJcblxyXG4gIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXNcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYTogW2FueV0gfCBBbnlBc3luY1RodW5rW10pOiBhIGlzIEFueUFzeW5jVGh1bmtbXSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBhWzBdID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAncGVuZGluZycgaW4gYVswXSAmJlxyXG4gICAgJ2Z1bGZpbGxlZCcgaW4gYVswXSAmJlxyXG4gICAgJ3JlamVjdGVkJyBpbiBhWzBdXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjx1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmc8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcGVuZGluZyB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZyhhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZzxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncGVuZGluZyddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5wZW5kaW5nXHJcbiAgICApIGFzIGFueVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPHVua25vd24sIHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydyZWplY3RlZCddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHJlamVjdGVkIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncmVqZWN0ZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5yZWplY3RlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjx1bmtub3duLCB1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsncmVqZWN0ZWQnXT4gJlxyXG4gICAgKFQgZXh0ZW5kcyBBc3luY1RodW5rPGFueSwgYW55LCB7IHJlamVjdFZhbHVlOiBpbmZlciBSZWplY3RlZFZhbHVlIH0+XHJcbiAgICAgID8geyBwYXlsb2FkOiBSZWplY3RlZFZhbHVlIH1cclxuICAgICAgOiB1bmtub3duKVxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyByZWplY3RlZCB3aXRoIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFJlamVjdGVkV2l0aFZhbHVlQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcmVqZWN0ZWQgdGh1bmsgYWN0aW9uIHdpdGggdmFsdWVcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWU8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgY29uc3QgaGFzRmxhZyA9IChhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBhbnkgPT4ge1xyXG4gICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZVxyXG4gIH1cclxuXHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKVxyXG5cclxuICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8dW5rbm93biwgdW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgRnVsZmlsbGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSBmdWxmaWxsZWQgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydmdWxmaWxsZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBhc3luY1RodW5rcy5tYXAoXHJcbiAgICAgIChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLmZ1bGZpbGxlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb24gPVxyXG4gIHwgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG5cclxuZXhwb3J0IHR5cGUgQW55QXN5bmNUaHVuayA9IHtcclxuICBwZW5kaW5nOiB7IG1hdGNoOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBhbnkgfVxyXG4gIGZ1bGZpbGxlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxuICByZWplY3RlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc0Zyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuICB8IEFjdGlvbkZyb21NYXRjaGVyPFRbJ3JlamVjdGVkJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvci5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycy5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgQWN0aW9uc0Zyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0FjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+XHJcbiAgICAgIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydwZW5kaW5nJywgJ2Z1bGZpbGxlZCcsICdyZWplY3RlZCddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBBY3Rpb25zRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gW10gYXMgYW55XHJcblxyXG4gICAgZm9yIChjb25zdCBhc3luY1RodW5rIG9mIGFzeW5jVGh1bmtzKSB7XHJcbiAgICAgIG1hdGNoZXJzLnB1c2goXHJcbiAgICAgICAgYXN5bmNUaHVuay5wZW5kaW5nLFxyXG4gICAgICAgIGFzeW5jVGh1bmsucmVqZWN0ZWQsXHJcbiAgICAgICAgYXN5bmNUaHVuay5mdWxmaWxsZWRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiB9IGZyb20gJy4vdHlwZXMnXHJcblxyXG5leHBvcnQgY29uc3QgYXNzZXJ0RnVuY3Rpb246IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiBhc3NlcnRzIGZ1bmMgaXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHt9XHJcblxyXG5leHBvcnQgY29uc3QgY2F0Y2hSZWplY3Rpb24gPSA8VD4oXHJcbiAgcHJvbWlzZTogUHJvbWlzZTxUPixcclxuICBvbkVycm9yID0gbm9vcFxyXG4pOiBQcm9taXNlPFQ+ID0+IHtcclxuICBwcm9taXNlLmNhdGNoKG9uRXJyb3IpXHJcblxyXG4gIHJldHVybiBwcm9taXNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gKFxyXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcclxuICBjYWxsYmFjazogKGV2dDogRXZlbnQpID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pXHJcbiAgcmV0dXJuICgpID0+IGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxscyBgYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbilgIGFuZCBwYXRjaGVzIGBzaWduYWwucmVhc29uYC5cclxuICogaWYgaXQgaXMgbm90IHN1cHBvcnRlZC5cclxuICpcclxuICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBgc2lnbmFsLnJlYXNvbmAgaXMgYXZhaWxhYmxlIGluIEZGIGNocm9tZSwgZWRnZSBub2RlIDE3IGFuZCBkZW5vLlxyXG4gKiBAcGFyYW0gYWJvcnRDb250cm9sbGVyXHJcbiAqIEBwYXJhbSByZWFzb25cclxuICogQHJldHVybnNcclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRTaWduYWwvcmVhc29uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IDxUPihcclxuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcclxuICByZWFzb246IFRcclxuKTogdm9pZCA9PiB7XHJcbiAgdHlwZSBDb25zdW1lcjxUPiA9ICh2YWw6IFQpID0+IHZvaWRcclxuXHJcbiAgY29uc3Qgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbFdpdGhSZWFzb248VD5cclxuXHJcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIC8vIFBhdGNoIGByZWFzb25gIGlmIG5lY2Vzc2FyeS5cclxuICAvLyAtIFdlIHVzZSBkZWZpbmVQcm9wZXJ0eSBoZXJlIGJlY2F1c2UgcmVhc29uIGlzIGEgZ2V0dGVyIG9mIGBBYm9ydFNpZ25hbC5fX3Byb3RvX19gLlxyXG4gIC8vIC0gV2UgbmVlZCB0byBwYXRjaCAncmVhc29uJyBiZWZvcmUgY2FsbGluZyBgLmFib3J0KClgIGJlY2F1c2UgbGlzdGVuZXJzIHRvIHRoZSAnYWJvcnQnXHJcbiAgLy8gZXZlbnQgYXJlIGFyZSBub3RpZmllZCBpbW1lZGlhdGVseS5cclxuICBpZiAoISgncmVhc29uJyBpbiBzaWduYWwpKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCAncmVhc29uJywge1xyXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIDsoYWJvcnRDb250cm9sbGVyLmFib3J0IGFzIENvbnN1bWVyPHR5cGVvZiByZWFzb24+KShyZWFzb24pXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgU2VyaWFsaXplZEVycm9yIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuXHJcbmNvbnN0IHRhc2sgPSAndGFzaydcclxuY29uc3QgbGlzdGVuZXIgPSAnbGlzdGVuZXInXHJcbmNvbnN0IGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnXHJcbmNvbnN0IGNhbmNlbGxlZCA9ICdjYW5jZWxsZWQnXHJcblxyXG4vKiBUYXNrQWJvcnRFcnJvciBlcnJvciBjb2RlcyAgKi9cclxuZXhwb3J0IGNvbnN0IHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gIGFzIGNvbnN0XHJcbmV4cG9ydCBjb25zdCB0YXNrQ29tcGxldGVkID0gYHRhc2stJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDYW5jZWxsZWQgPSBgJHtsaXN0ZW5lcn0tJHtjYW5jZWxsZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5cclxuZXhwb3J0IGNsYXNzIFRhc2tBYm9ydEVycm9yIGltcGxlbWVudHMgU2VyaWFsaXplZEVycm9yIHtcclxuICBuYW1lID0gJ1Rhc2tBYm9ydEVycm9yJ1xyXG4gIG1lc3NhZ2U6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IGAke3Rhc2t9ICR7Y2FuY2VsbGVkfSAocmVhc29uOiAke2NvZGV9KWBcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5pbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiwgVGFza1Jlc3VsdCB9IGZyb20gJy4vdHlwZXMnXHJcbmltcG9ydCB7IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIsIGNhdGNoUmVqZWN0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBTeW5jaHJvbm91c2x5IHJhaXNlcyB7QGxpbmsgVGFza0Fib3J0RXJyb3J9IGlmIHRoZSB0YXNrIHRpZWQgdG8gdGhlIGlucHV0IGBzaWduYWxgIGhhcyBiZWVuIGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcGFyYW0gcmVhc29uXHJcbiAqIEBzZWUge1Rhc2tBYm9ydEVycm9yfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbDogQWJvcnRTaWduYWwpOiB2b2lkID0+IHtcclxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcigoc2lnbmFsIGFzIEFib3J0U2lnbmFsV2l0aFJlYXNvbjxzdHJpbmc+KS5yZWFzb24pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFjZSBiZXR3ZWVuIHRoZSBwcm9taXNlKHMpIGFuZCB0aGUgQWJvcnRTaWduYWxcclxuICogVGhpcyBhdm9pZHMgYFByb21pc2UucmFjZSgpYC1yZWxhdGVkIG1lbW9yeSBsZWFrczpcclxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xNzQ2OSNpc3N1ZWNvbW1lbnQtMzQ5Nzk0OTA5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmFjZVdpdGhTaWduYWw8VD4oXHJcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbFdpdGhSZWFzb248c3RyaW5nPixcclxuICBwcm9taXNlOiBQcm9taXNlPFQ+XHJcbik6IFByb21pc2U8VD4ge1xyXG4gIGxldCBjbGVhbnVwID0gbm9vcFxyXG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCBub3RpZnlSZWplY3Rpb24gPSAoKSA9PiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKVxyXG5cclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICBub3RpZnlSZWplY3Rpb24oKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhbnVwID0gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihzaWduYWwsIG5vdGlmeVJlamVjdGlvbilcclxuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KVxyXG4gIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgLy8gYWZ0ZXIgdGhpcyBwb2ludCwgcmVwbGFjZSBgY2xlYW51cGAgd2l0aCBhIG5vb3AsIHNvIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSB0byBgc2lnbmFsYCBhbnkgbW9yZVxyXG4gICAgY2xlYW51cCA9IG5vb3BcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICogUnVucyBhIHRhc2sgYW5kIHJldHVybnMgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBUYXNrUmVzdWx0fS5cclxuICogU2Vjb25kIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGBjbGVhblVwYCBmdW5jdGlvbiB0aGF0IGFsd2F5cyBydW5zIGFmdGVyIHRhc2suXHJcbiAqXHJcbiAqICoqTm90ZToqKiBgcnVuVGFza2AgcnVucyB0aGUgZXhlY3V0b3IgaW4gdGhlIG5leHQgbWljcm90YXNrLlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJ1blRhc2sgPSBhc3luYyA8VD4oXHJcbiAgdGFzazogKCkgPT4gUHJvbWlzZTxUPixcclxuICBjbGVhblVwPzogKCkgPT4gdm9pZFxyXG4pOiBQcm9taXNlPFRhc2tSZXN1bHQ8VD4+ID0+IHtcclxuICB0cnkge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcclxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGFzaygpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0dXM6ICdvaycsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/ICdjYW5jZWxsZWQnIDogJ3JlamVjdGVkJyxcclxuICAgICAgZXJyb3IsXHJcbiAgICB9XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGNsZWFuVXA/LigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYW4gaW5wdXQgYEFib3J0U2lnbmFsYCBhbmQgYSBwcm9taXNlIHJldHVybnMgYW5vdGhlciBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcclxuICogYXMgc29vbiB0aGUgaW5wdXQgcHJvbWlzZSBpcyBwcm92aWRlZCBvciByZWplY3RzIGFzIHNvb24gYXNcclxuICogYEFib3J0U2lnbmFsLmFib3J0YCBpcyBgdHJ1ZWAuXHJcbiAqIEBwYXJhbSBzaWduYWxcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVQYXVzZSA9IDxUPihzaWduYWw6IEFib3J0U2lnbmFsKSA9PiB7XHJcbiAgcmV0dXJuIChwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24oXHJcbiAgICAgIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBpbnB1dCBgQWJvcnRTaWduYWxgIGFuZCBgdGltZW91dE1zYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAqIGFmdGVyIGB0aW1lb3V0TXNgIG9yIHJlamVjdHMgYXMgc29vbiBhcyBgQWJvcnRTaWduYWwuYWJvcnRgIGlzIGB0cnVlYC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlbGF5ID0gKHNpZ25hbDogQWJvcnRTaWduYWwpID0+IHtcclxuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlPHZvaWQ+KHNpZ25hbClcclxuICByZXR1cm4gKHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICByZXR1cm4gcGF1c2UobmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKSkpXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24sIE1pZGRsZXdhcmVBUEkgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua0Rpc3BhdGNoIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgaXNBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4uL25hbm9pZCdcclxuXHJcbmltcG9ydCB0eXBlIHtcclxuICBMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2UsXHJcbiAgQWRkTGlzdGVuZXJPdmVybG9hZHMsXHJcbiAgQW55TGlzdGVuZXJQcmVkaWNhdGUsXHJcbiAgQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9ucyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkQ3JlYXRlTGlzdGVuZXJFbnRyeSxcclxuICBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucyxcclxuICBMaXN0ZW5lckVudHJ5LFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVGFrZVBhdHRlcm4sXHJcbiAgTGlzdGVuZXJFcnJvckluZm8sXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBUYXNrUmVzdWx0LFxyXG4gIEFib3J0U2lnbmFsV2l0aFJlYXNvbixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucyxcclxuICBGb3JrT3B0aW9ucyxcclxufSBmcm9tICcuL3R5cGVzJ1xyXG5pbXBvcnQge1xyXG4gIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24sXHJcbiAgYWRkQWJvcnRTaWduYWxMaXN0ZW5lcixcclxuICBhc3NlcnRGdW5jdGlvbixcclxuICBjYXRjaFJlamVjdGlvbixcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5pbXBvcnQge1xyXG4gIGxpc3RlbmVyQ2FuY2VsbGVkLFxyXG4gIGxpc3RlbmVyQ29tcGxldGVkLFxyXG4gIFRhc2tBYm9ydEVycm9yLFxyXG4gIHRhc2tDYW5jZWxsZWQsXHJcbiAgdGFza0NvbXBsZXRlZCxcclxufSBmcm9tICcuL2V4Y2VwdGlvbnMnXHJcbmltcG9ydCB7XHJcbiAgcnVuVGFzayxcclxuICB2YWxpZGF0ZUFjdGl2ZSxcclxuICBjcmVhdGVQYXVzZSxcclxuICBjcmVhdGVEZWxheSxcclxuICByYWNlV2l0aFNpZ25hbCxcclxufSBmcm9tICcuL3Rhc2snXHJcbmV4cG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgTGlzdGVuZXJFZmZlY3QsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIExpc3RlbmVyRWZmZWN0QVBJLFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlLFxyXG4gIENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnMsXHJcbiAgTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgVHlwZWRTdGFydExpc3RlbmluZyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkU3RvcExpc3RlbmluZyxcclxuICBUeXBlZFJlbW92ZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMsXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgRm9ya2VkVGFza0FQSSxcclxuICBBc3luY1Rhc2tFeGVjdXRvcixcclxuICBTeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFRhc2tDYW5jZWxsZWQsXHJcbiAgVGFza1JlamVjdGVkLFxyXG4gIFRhc2tSZXNvbHZlZCxcclxuICBUYXNrUmVzdWx0LFxyXG59IGZyb20gJy4vdHlwZXMnXHJcblxyXG4vL092ZXJseS1hZ2dyZXNzaXZlIGJ5dGUtc2hhdmluZ1xyXG5jb25zdCB7IGFzc2lnbiB9ID0gT2JqZWN0XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IElOVEVSTkFMX05JTF9UT0tFTiA9IHt9IGFzIGNvbnN0XHJcblxyXG5jb25zdCBhbG0gPSAnbGlzdGVuZXJNaWRkbGV3YXJlJyBhcyBjb25zdFxyXG5cclxuY29uc3QgY3JlYXRlRm9yayA9IChcclxuICBwYXJlbnRBYm9ydFNpZ25hbDogQWJvcnRTaWduYWxXaXRoUmVhc29uPHVua25vd24+LFxyXG4gIHBhcmVudEJsb2NraW5nUHJvbWlzZXM6IFByb21pc2U8YW55PltdXHJcbikgPT4ge1xyXG4gIGNvbnN0IGxpbmtDb250cm9sbGVycyA9IChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpID0+XHJcbiAgICBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCAoKSA9PlxyXG4gICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbilcclxuICAgIClcclxuXHJcbiAgcmV0dXJuIDxUPihcclxuICAgIHRhc2tFeGVjdXRvcjogRm9ya2VkVGFza0V4ZWN1dG9yPFQ+LFxyXG4gICAgb3B0cz86IEZvcmtPcHRpb25zXHJcbiAgKTogRm9ya2VkVGFzazxUPiA9PiB7XHJcbiAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsICd0YXNrRXhlY3V0b3InKVxyXG4gICAgY29uc3QgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcclxuXHJcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuVGFzazxUPihcclxuICAgICAgYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKVxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGFza0V4ZWN1dG9yKHtcclxuICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICB9KSkgYXMgVFxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpXHJcbiAgICApXHJcblxyXG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XHJcbiAgICAgIHBhcmVudEJsb2NraW5nUHJvbWlzZXMucHVzaChyZXN1bHQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZTxUYXNrUmVzdWx0PFQ+PihwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgY2FuY2VsKCkge1xyXG4gICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDYW5jZWxsZWQpXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVUYWtlUGF0dGVybiA9IDxTPihcclxuICBzdGFydExpc3RlbmluZzogQWRkTGlzdGVuZXJPdmVybG9hZHM8XHJcbiAgICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gICAgUyxcclxuICAgIERpc3BhdGNoPEFueUFjdGlvbj5cclxuICA+LFxyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuKTogVGFrZVBhdHRlcm48Uz4gPT4ge1xyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIExpc3RlbmVyUHJlZGljYXRlIGFuZCBhbiBvcHRpb25hbCB0aW1lb3V0LFxyXG4gICAqIGFuZCByZXNvbHZlcyB3aGVuIGVpdGhlciB0aGUgcHJlZGljYXRlIHJldHVybnMgYHRydWVgIGJhc2VkIG9uIGFuIGFjdGlvblxyXG4gICAqIHN0YXRlIGNvbWJpbmF0aW9uIG9yIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy5cclxuICAgKiBJZiB0aGUgcGFyZW50IGxpc3RlbmVyIGlzIGNhbmNlbGVkIHdoaWxlIHdhaXRpbmcsIHRoaXMgd2lsbCB0aHJvdyBhXHJcbiAgICogVGFza0Fib3J0RXJyb3IuXHJcbiAgICovXHJcbiAgY29uc3QgdGFrZSA9IGFzeW5jIDxQIGV4dGVuZHMgQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4+KFxyXG4gICAgcHJlZGljYXRlOiBQLFxyXG4gICAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkXHJcbiAgKSA9PiB7XHJcbiAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpXHJcblxyXG4gICAgLy8gUGxhY2Vob2xkZXIgdW5zdWJzY3JpYmUgZnVuY3Rpb24gdW50aWwgdGhlIGxpc3RlbmVyIGlzIGFkZGVkXHJcbiAgICBsZXQgdW5zdWJzY3JpYmU6IFVuc3Vic2NyaWJlTGlzdGVuZXIgPSAoKSA9PiB7fVxyXG5cclxuICAgIGNvbnN0IHR1cGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlPFtBbnlBY3Rpb24sIFMsIFNdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIEluc2lkZSB0aGUgUHJvbWlzZSwgd2Ugc3luY2hyb25vdXNseSBhZGQgdGhlIGxpc3RlbmVyLlxyXG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcclxuICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSBhcyBhbnksXHJcbiAgICAgICAgZWZmZWN0OiAoYWN0aW9uLCBsaXN0ZW5lckFwaSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgLy8gT25lLXNob3QgbGlzdGVuZXIgdGhhdCBjbGVhbnMgdXAgYXMgc29vbiBhcyB0aGUgcHJlZGljYXRlIHBhc3Nlc1xyXG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyB0aGUgcHJlZGljYXRlIHNhd1xyXG4gICAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0T3JpZ2luYWxTdGF0ZSgpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICB1bnN1YnNjcmliZSA9ICgpID0+IHtcclxuICAgICAgICBzdG9wTGlzdGVuaW5nKClcclxuICAgICAgICByZWplY3QoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzOiAoUHJvbWlzZTxudWxsPiB8IFByb21pc2U8W0FueUFjdGlvbiwgUywgU10+KVtdID0gW1xyXG4gICAgICB0dXBsZVByb21pc2UsXHJcbiAgICBdXHJcblxyXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKFxyXG4gICAgICAgIG5ldyBQcm9taXNlPG51bGw+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBQcm9taXNlLnJhY2UocHJvbWlzZXMpKVxyXG5cclxuICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBBbHdheXMgY2xlYW4gdXAgdGhlIGxpc3RlbmVyXHJcbiAgICAgIHVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiAoKHByZWRpY2F0ZTogQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4sIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZCkgPT5cclxuICAgIGNhdGNoUmVqZWN0aW9uKHRha2UocHJlZGljYXRlLCB0aW1lb3V0KSkpIGFzIFRha2VQYXR0ZXJuPFM+XHJcbn1cclxuXHJcbmNvbnN0IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20gPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICBsZXQgeyB0eXBlLCBhY3Rpb25DcmVhdG9yLCBtYXRjaGVyLCBwcmVkaWNhdGUsIGVmZmVjdCB9ID0gb3B0aW9uc1xyXG5cclxuICBpZiAodHlwZSkge1xyXG4gICAgcHJlZGljYXRlID0gY3JlYXRlQWN0aW9uKHR5cGUpLm1hdGNoXHJcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICB0eXBlID0gYWN0aW9uQ3JlYXRvciEudHlwZVxyXG4gICAgcHJlZGljYXRlID0gYWN0aW9uQ3JlYXRvci5tYXRjaFxyXG4gIH0gZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgcHJlZGljYXRlID0gbWF0Y2hlclxyXG4gIH0gZWxzZSBpZiAocHJlZGljYXRlKSB7XHJcbiAgICAvLyBwYXNzXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ0NyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgJ29wdGlvbnMubGlzdGVuZXInKVxyXG5cclxuICByZXR1cm4geyBwcmVkaWNhdGUsIHR5cGUsIGVmZmVjdCB9XHJcbn1cclxuXHJcbi8qKiBBY2NlcHRzIHRoZSBwb3NzaWJsZSBvcHRpb25zIGZvciBjcmVhdGluZyBhIGxpc3RlbmVyLCBhbmQgcmV0dXJucyBhIGZvcm1hdHRlZCBsaXN0ZW5lciBlbnRyeSAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlTGlzdGVuZXJFbnRyeTogVHlwZWRDcmVhdGVMaXN0ZW5lckVudHJ5PHVua25vd24+ID0gKFxyXG4gIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgdHlwZSwgcHJlZGljYXRlLCBlZmZlY3QgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgY29uc3QgaWQgPSBuYW5vaWQoKVxyXG4gIGNvbnN0IGVudHJ5OiBMaXN0ZW5lckVudHJ5PHVua25vd24+ID0ge1xyXG4gICAgaWQsXHJcbiAgICBlZmZlY3QsXHJcbiAgICB0eXBlLFxyXG4gICAgcHJlZGljYXRlLFxyXG4gICAgcGVuZGluZzogbmV3IFNldDxBYm9ydENvbnRyb2xsZXI+KCksXHJcbiAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZCcpXHJcbiAgICB9LFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGVudHJ5XHJcbn1cclxuXHJcbmNvbnN0IGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IChcclxuICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PlxyXG4pID0+IHtcclxuICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcclxuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAoXHJcbiAgbGlzdGVuZXJNYXA6IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+XHJcbikgPT4ge1xyXG4gIHJldHVybiAoKSA9PiB7XHJcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycylcclxuXHJcbiAgICBsaXN0ZW5lck1hcC5jbGVhcigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2FmZWx5IHJlcG9ydHMgZXJyb3JzIHRvIHRoZSBgZXJyb3JIYW5kbGVyYCBwcm92aWRlZC5cclxuICogRXJyb3JzIHRoYXQgb2NjdXIgaW5zaWRlIGBlcnJvckhhbmRsZXJgIGFyZSBub3RpZmllZCBpbiBhIG5ldyB0YXNrLlxyXG4gKiBJbnNwaXJlZCBieSBbcnhqcyByZXBvcnRVbmhhbmRsZWRFcnJvcl0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvNmZhZmNmNTNkYzllNTU3NDM5YjI1ZGViYWVhZGZkMjI0YjI0NWE2Ni9zcmMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci50cylcclxuICogQHBhcmFtIGVycm9ySGFuZGxlclxyXG4gKiBAcGFyYW0gZXJyb3JUb05vdGlmeVxyXG4gKi9cclxuY29uc3Qgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoXHJcbiAgZXJyb3JIYW5kbGVyOiBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBlcnJvclRvTm90aWZ5OiB1bmtub3duLFxyXG4gIGVycm9ySW5mbzogTGlzdGVuZXJFcnJvckluZm9cclxuKTogdm9pZCA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pXHJcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcclxuICAgIC8vIFdlIGNhbm5vdCBsZXQgYW4gZXJyb3IgcmFpc2VkIGhlcmUgYmxvY2sgdGhlIGxpc3RlbmVyIHF1ZXVlLlxyXG4gICAgLy8gVGhlIGVycm9yIHJhaXNlZCBoZXJlIHdpbGwgYmUgcGlja2VkIHVwIGJ5IGB3aW5kb3cub25lcnJvcmAsIGBwcm9jZXNzLm9uKCdlcnJvcicpYCBldGMuLi5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aHJvdyBlcnJvckhhbmRsZXJFcnJvclxyXG4gICAgfSwgMClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oXHJcbiAgYCR7YWxtfS9hZGRgXHJcbikgYXMgVHlwZWRBZGRMaXN0ZW5lcjx1bmtub3duPlxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjbGVhckFsbExpc3RlbmVycyA9IGNyZWF0ZUFjdGlvbihgJHthbG19L3JlbW92ZUFsbGApXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gY3JlYXRlQWN0aW9uKFxyXG4gIGAke2FsbX0vcmVtb3ZlYFxyXG4pIGFzIFR5cGVkUmVtb3ZlTGlzdGVuZXI8dW5rbm93bj5cclxuXHJcbmNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXI6IExpc3RlbmVyRXJyb3JIYW5kbGVyID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xyXG4gIGNvbnNvbGUuZXJyb3IoYCR7YWxtfS9lcnJvcmAsIC4uLmFyZ3MpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlPFxyXG4gIFMgPSB1bmtub3duLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaDxBbnlBY3Rpb24+ID0gVGh1bmtEaXNwYXRjaDxTLCB1bmtub3duLCBBbnlBY3Rpb24+LFxyXG4gIEV4dHJhQXJndW1lbnQgPSB1bmtub3duXHJcbj4obWlkZGxld2FyZU9wdGlvbnM6IENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnM8RXh0cmFBcmd1bWVudD4gPSB7fSkge1xyXG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+KClcclxuICBjb25zdCB7IGV4dHJhLCBvbkVycm9yID0gZGVmYXVsdEVycm9ySGFuZGxlciB9ID0gbWlkZGxld2FyZU9wdGlvbnNcclxuXHJcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgJ29uRXJyb3InKVxyXG5cclxuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeTogTGlzdGVuZXJFbnRyeSkgPT4ge1xyXG4gICAgZW50cnkudW5zdWJzY3JpYmUgPSAoKSA9PiBsaXN0ZW5lck1hcC5kZWxldGUoZW50cnkhLmlkKVxyXG5cclxuICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpXHJcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnM/OiBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucykgPT4ge1xyXG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpXHJcbiAgICAgIGlmIChjYW5jZWxPcHRpb25zPy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGZpbmRMaXN0ZW5lckVudHJ5ID0gKFxyXG4gICAgY29tcGFyYXRvcjogKGVudHJ5OiBMaXN0ZW5lckVudHJ5KSA9PiBib29sZWFuXHJcbiAgKTogTGlzdGVuZXJFbnRyeSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpKSB7XHJcbiAgICAgIGlmIChjb21wYXJhdG9yKGVudHJ5KSkge1xyXG4gICAgICAgIHJldHVybiBlbnRyeVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICAgIGxldCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KFxyXG4gICAgICAoZXhpc3RpbmdFbnRyeSkgPT4gZXhpc3RpbmdFbnRyeS5lZmZlY3QgPT09IG9wdGlvbnMuZWZmZWN0XHJcbiAgICApXHJcblxyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICBlbnRyeSA9IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyBhcyBhbnkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChcclxuICAgIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zICYgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnNcclxuICApOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IHsgdHlwZSwgZWZmZWN0LCBwcmVkaWNhdGUgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgICBjb25zdCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KChlbnRyeSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9XHJcbiAgICAgICAgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IGVudHJ5LnR5cGUgPT09IHR5cGVcclxuICAgICAgICAgIDogZW50cnkucHJlZGljYXRlID09PSBwcmVkaWNhdGVcclxuXHJcbiAgICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeS5lZmZlY3QgPT09IGVmZmVjdFxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoZW50cnkpIHtcclxuICAgICAgZW50cnkudW5zdWJzY3JpYmUoKVxyXG4gICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gISFlbnRyeVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgbm90aWZ5TGlzdGVuZXIgPSBhc3luYyAoXHJcbiAgICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PixcclxuICAgIGFjdGlvbjogQW55QWN0aW9uLFxyXG4gICAgYXBpOiBNaWRkbGV3YXJlQVBJLFxyXG4gICAgZ2V0T3JpZ2luYWxTdGF0ZTogKCkgPT4gU1xyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxyXG4gICAgY29uc3QgdGFrZSA9IGNyZWF0ZVRha2VQYXR0ZXJuKFxyXG4gICAgICBzdGFydExpc3RlbmluZyxcclxuICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWxcclxuICAgIClcclxuICAgIGNvbnN0IGF1dG9Kb2luUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW11cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKVxyXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgZW50cnkuZWZmZWN0KFxyXG4gICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgLy8gVXNlIGFzc2lnbigpIHJhdGhlciB0aGFuIC4uLiB0byBhdm9pZCBleHRyYSBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIHRvIGJ1bmRsZVxyXG4gICAgICAgICAgYXNzaWduKHt9LCBhcGksIHtcclxuICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiAoXHJcbiAgICAgICAgICAgICAgcHJlZGljYXRlOiBBbnlMaXN0ZW5lclByZWRpY2F0ZTxhbnk+LFxyXG4gICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXJcclxuICAgICAgICAgICAgKSA9PiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKSxcclxuICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlPGFueT4oaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICBleHRyYSxcclxuICAgICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgc3Vic2NyaWJlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKChjb250cm9sbGVyLCBfLCBzZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGxpc3RlbmVyRXJyb3IpIHtcclxuICAgICAgaWYgKCEobGlzdGVuZXJFcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xyXG4gICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3IsIHtcclxuICAgICAgICAgIHJhaXNlZEJ5OiAnZWZmZWN0JyxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcylcclxuXHJcbiAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDb21wbGV0ZWQpIC8vIE5vdGlmeSB0aGF0IHRoZSB0YXNrIGhhcyBjb21wbGV0ZWRcclxuICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApXHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmU6IExpc3RlbmVyTWlkZGxld2FyZTxTLCBELCBFeHRyYUFyZ3VtZW50PiA9XHJcbiAgICAoYXBpKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIWlzQWN0aW9uKGFjdGlvbikpIHtcclxuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gbm90aWZ5IGxpc3RlbmVycyBmb3IgYWN0aW9uIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZClcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmVlZCB0byBnZXQgdGhpcyBzdGF0ZSBfYmVmb3JlXyB0aGUgcmVkdWNlciBwcm9jZXNzZXMgdGhlIGFjdGlvblxyXG4gICAgICBsZXQgb3JpZ2luYWxTdGF0ZTogUyB8IHR5cGVvZiBJTlRFUk5BTF9OSUxfVE9LRU4gPSBhcGkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgLy8gYGdldE9yaWdpbmFsU3RhdGVgIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxyXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LXRvb2xraXQvZGlzY3Vzc2lvbnMvMTY0OCNkaXNjdXNzaW9uY29tbWVudC0xOTMyODIwXHJcbiAgICAgIGNvbnN0IGdldE9yaWdpbmFsU3RhdGUgPSAoKTogUyA9PiB7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHthbG19OiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5YFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGUgYXMgU1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcmVzdWx0OiB1bmtub3duXHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIEFjdHVhbGx5IGZvcndhcmQgdGhlIGFjdGlvbiB0byB0aGUgcmVkdWNlciBiZWZvcmUgd2UgaGFuZGxlIGxpc3RlbmVyc1xyXG4gICAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSBhcGkuZ2V0U3RhdGUoKVxyXG4gICAgICAgICAgLy8gV29yayBhcm91bmQgRVNCdWlsZCtUUyB0cmFuc3BpbGF0aW9uIGlzc3VlXHJcbiAgICAgICAgICBjb25zdCBsaXN0ZW5lckVudHJpZXMgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKVxyXG4gICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgbGlzdGVuZXJFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBydW5MaXN0ZW5lciA9IGZhbHNlXHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZW50cnkucHJlZGljYXRlKGFjdGlvbiwgY3VycmVudFN0YXRlLCBvcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgICB9IGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiAncHJlZGljYXRlJyxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAvLyBSZW1vdmUgYG9yaWdpbmFsU3RhdGVgIHN0b3JlIGZyb20gdGhpcyBzY29wZS5cclxuICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG1pZGRsZXdhcmUsXHJcbiAgICBzdGFydExpc3RlbmluZyxcclxuICAgIHN0b3BMaXN0ZW5pbmcsXHJcbiAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgfSBhcyBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZTxTLCBELCBFeHRyYUFyZ3VtZW50PlxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuXHJcbmV4cG9ydCBjb25zdCBTSE9VTERfQVVUT0JBVENIID0gJ1JUS19hdXRvQmF0Y2gnXHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZUF1dG9CYXRjaGVkID1cclxuICA8VD4oKSA9PlxyXG4gIChwYXlsb2FkOiBUKTogeyBwYXlsb2FkOiBUOyBtZXRhOiB1bmtub3duIH0gPT4gKHtcclxuICAgIHBheWxvYWQsXHJcbiAgICBtZXRhOiB7IFtTSE9VTERfQVVUT0JBVENIXTogdHJ1ZSB9LFxyXG4gIH0pXHJcblxyXG4vLyBUT0RPIFJlbW92ZSB0aGlzIGluIDIuMFxyXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL3F1ZXVlLW1pY3JvdGFza1xyXG5sZXQgcHJvbWlzZTogUHJvbWlzZTxhbnk+XHJcbmNvbnN0IHF1ZXVlTWljcm90YXNrU2hpbSA9XHJcbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXHJcbiAgICA/IHF1ZXVlTWljcm90YXNrLmJpbmQoXHJcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgID8gd2luZG93XHJcbiAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICA/IGdsb2JhbFxyXG4gICAgICAgICAgOiBnbG9iYWxUaGlzXHJcbiAgICAgIClcclxuICAgIDogLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxyXG4gICAgICAoY2I6ICgpID0+IHZvaWQpID0+XHJcbiAgICAgICAgKHByb21pc2UgfHwgKHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKSkpLnRoZW4oY2IpLmNhdGNoKChlcnI6IGFueSkgPT5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgKVxyXG5cclxuY29uc3QgY3JlYXRlUXVldWVXaXRoVGltZXIgPSAodGltZW91dDogbnVtYmVyKSA9PiB7XHJcbiAgcmV0dXJuIChub3RpZnk6ICgpID0+IHZvaWQpID0+IHtcclxuICAgIHNldFRpbWVvdXQobm90aWZ5LCB0aW1lb3V0KVxyXG4gIH1cclxufVxyXG5cclxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdvbid0IGV4aXN0IGluIFNTUiBlbnZpcm9ubWVudHMuXHJcbi8vIEZhbGwgYmFjayB0byBhIHZhZ3VlIGFwcHJveGltYXRpb24ganVzdCB0byBrZWVwIGZyb20gZXJyb3JpbmcuXHJcbmNvbnN0IHJBRiA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKDEwKVxyXG5cclxuZXhwb3J0IHR5cGUgQXV0b0JhdGNoT3B0aW9ucyA9XHJcbiAgfCB7IHR5cGU6ICd0aWNrJyB9XHJcbiAgfCB7IHR5cGU6ICd0aW1lcic7IHRpbWVvdXQ6IG51bWJlciB9XHJcbiAgfCB7IHR5cGU6ICdyYWYnIH1cclxuICB8IHsgdHlwZTogJ2NhbGxiYWNrJzsgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWQgfVxyXG5cclxuLyoqXHJcbiAqIEEgUmVkdXggc3RvcmUgZW5oYW5jZXIgdGhhdCB3YXRjaGVzIGZvciBcImxvdy1wcmlvcml0eVwiIGFjdGlvbnMsIGFuZCBkZWxheXNcclxuICogbm90aWZ5aW5nIHN1YnNjcmliZXJzIHVudGlsIGVpdGhlciB0aGUgcXVldWVkIGNhbGxiYWNrIGV4ZWN1dGVzIG9yIHRoZVxyXG4gKiBuZXh0IFwic3RhbmRhcmQtcHJpb3JpdHlcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cclxuICpcclxuICogVGhpcyBhbGxvd3MgZGlzcGF0Y2hpbmcgbXVsdGlwbGUgXCJsb3ctcHJpb3JpdHlcIiBhY3Rpb25zIGluIGEgcm93IHdpdGggb25seVxyXG4gKiBhIHNpbmdsZSBzdWJzY3JpYmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgVUkgYWZ0ZXIgdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnNcclxuICogaXMgZmluaXNoZWQsIHRodXMgaW1wcm92aW5nIFVJIHJlLXJlbmRlciBwZXJmb3JtYW5jZS5cclxuICpcclxuICogV2F0Y2hlcyBmb3IgYWN0aW9ucyB3aXRoIHRoZSBgYWN0aW9uLm1ldGFbU0hPVUxEX0FVVE9CQVRDSF1gIGF0dHJpYnV0ZS5cclxuICogVGhpcyBjYW4gYmUgYWRkZWQgdG8gYGFjdGlvbi5tZXRhYCBtYW51YWxseSwgb3IgYnkgdXNpbmcgdGhlXHJcbiAqIGBwcmVwYXJlQXV0b0JhdGNoZWRgIGhlbHBlci5cclxuICpcclxuICogQnkgZGVmYXVsdCwgaXQgd2lsbCBxdWV1ZSBhIG5vdGlmaWNhdGlvbiBmb3IgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCB0aWNrLlxyXG4gKiBIb3dldmVyLCB5b3UgY2FuIHBhc3Mgc2V2ZXJhbCBvdGhlciBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3I6XHJcbiAqIC0gYHt0eXBlOiAndGljayd9OiBxdWV1ZXMgdXNpbmcgYHF1ZXVlTWljcm90YXNrYCAoZGVmYXVsdClcclxuICogLSBge3R5cGU6ICd0aW1lciwgdGltZW91dDogbnVtYmVyfWA6IHF1ZXVlcyB1c2luZyBgc2V0VGltZW91dGBcclxuICogLSBge3R5cGU6ICdyYWYnfWA6IHF1ZXVlcyB1c2luZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYFxyXG4gKiAtIGB7dHlwZTogJ2NhbGxiYWNrJywgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWR9OiBsZXRzIHlvdSBwcm92aWRlIHlvdXIgb3duIGNhbGxiYWNrXHJcbiAqXHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYXV0b0JhdGNoRW5oYW5jZXIgPVxyXG4gIChvcHRpb25zOiBBdXRvQmF0Y2hPcHRpb25zID0geyB0eXBlOiAncmFmJyB9KTogU3RvcmVFbmhhbmNlciA9PlxyXG4gIChuZXh0KSA9PlxyXG4gICguLi5hcmdzKSA9PiB7XHJcbiAgICBjb25zdCBzdG9yZSA9IG5leHQoLi4uYXJncylcclxuXHJcbiAgICBsZXQgbm90aWZ5aW5nID0gdHJ1ZVxyXG4gICAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2VcclxuICAgIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKVxyXG5cclxuICAgIGNvbnN0IHF1ZXVlQ2FsbGJhY2sgPVxyXG4gICAgICBvcHRpb25zLnR5cGUgPT09ICd0aWNrJ1xyXG4gICAgICAgID8gcXVldWVNaWNyb3Rhc2tTaGltXHJcbiAgICAgICAgOiBvcHRpb25zLnR5cGUgPT09ICdyYWYnXHJcbiAgICAgICAgPyByQUZcclxuICAgICAgICA6IG9wdGlvbnMudHlwZSA9PT0gJ2NhbGxiYWNrJ1xyXG4gICAgICAgID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvblxyXG4gICAgICAgIDogY3JlYXRlUXVldWVXaXRoVGltZXIob3B0aW9ucy50aW1lb3V0KVxyXG5cclxuICAgIGNvbnN0IG5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcclxuICAgICAgLy8gV2UncmUgcnVubmluZyBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHRpY2suXHJcbiAgICAgIC8vIFJ1biB0aGUgcmVhbCBsaXN0ZW5lciBjYWxsYmFja3MgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBVSS5cclxuICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2VcclxuICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZVxyXG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsKSA9PiBsKCkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLnN1YnNjcmliZWAgbWV0aG9kIHRvIGtlZXAgb3JpZ2luYWwgbGlzdGVuZXJzXHJcbiAgICAgIC8vIGZyb20gcnVubmluZyBpZiB3ZSdyZSBkZWxheWluZyBub3RpZmljYXRpb25zXHJcbiAgICAgIHN1YnNjcmliZShsaXN0ZW5lcjogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIC8vIEVhY2ggd3JhcHBlZCBsaXN0ZW5lciB3aWxsIG9ubHkgY2FsbCB0aGUgcmVhbCBsaXN0ZW5lciBpZlxyXG4gICAgICAgIC8vIHRoZSBgbm90aWZ5aW5nYCBmbGFnIGlzIGN1cnJlbnRseSBhY3RpdmUgd2hlbiBpdCdzIGNhbGxlZC5cclxuICAgICAgICAvLyBUaGlzIGxldHMgdGhlIGJhc2Ugc3RvcmUgd29yayBhcyBub3JtYWwsIHdoaWxlIHRoZSBhY3R1YWwgVUlcclxuICAgICAgICAvLyB1cGRhdGUgYmVjb21lcyBjb250cm9sbGVkIGJ5IHRoaXMgZW5oYW5jZXIuXHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyOiB0eXBlb2YgbGlzdGVuZXIgPSAoKSA9PiBub3RpZnlpbmcgJiYgbGlzdGVuZXIoKVxyXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcilcclxuICAgICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKVxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICB1bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLmRpc3BhdGNoYCBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgYWN0aW9uc1xyXG4gICAgICAvLyBmb3IgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcgYW5kIGRldGVybWluZSBpZiBiYXRjaGluZyBpcyBhY3RpdmVcclxuICAgICAgZGlzcGF0Y2goYWN0aW9uOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBkb2VzIF9ub3RfIGhhdmUgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcsXHJcbiAgICAgICAgICAvLyB3ZSByZXN1bWUvY29udGludWUgbm9ybWFsIG5vdGlmeS1hZnRlci1lYWNoLWRpc3BhdGNoIGJlaGF2aW9yXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSAhYWN0aW9uPy5tZXRhPy5bU0hPVUxEX0FVVE9CQVRDSF1cclxuICAgICAgICAgIC8vIElmIGEgYG5vdGlmeUxpc3RlbmVyc2AgbWljcm90YXNrIHdhcyBxdWV1ZWQsIHlvdSBjYW4ndCBjYW5jZWwgaXQuXHJcbiAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBzZXQgYSBmbGFnIHNvIHRoYXQgaXQncyBhIG5vLW9wIHdoZW4gaXQgZG9lcyBydW5cclxuICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZ1xyXG4gICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gYXQgbGVhc3QgMSBhY3Rpb24gd2l0aCBgU0hPVUxEX0FVVE9CQVRDSGAuIFRyeSB0byBxdWV1ZVxyXG4gICAgICAgICAgICAvLyBhIG1pY3JvdGFzayB0byBub3RpZnkgbGlzdGVuZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3AgdGljay5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgZW5xdWV1ZSB0aGlzIF9vbmNlXyBwZXIgdGljay5cclxuICAgICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcclxuICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBhY3Rpb24gYXMgdXN1YWwsIGluY2x1ZGluZyByZWR1Y2Vycy5cclxuICAgICAgICAgIC8vIElmIG5vcm1hbCBub3RpZmljYXRpb24gYmVoYXZpb3IgaXMgZW5hYmxlZCwgdGhlIHN0b3JlIHdpbGwgbm90aWZ5XHJcbiAgICAgICAgICAvLyBhbGwgb2YgaXRzIG93biBsaXN0ZW5lcnMsIGFuZCB0aGUgd3JhcHBlciBjYWxsYmFja3MgYWJvdmUgd2lsbFxyXG4gICAgICAgICAgLy8gc2VlIGBub3RpZnlpbmdgIGlzIHRydWUgYW5kIHBhc3Mgb24gdG8gdGhlIHJlYWwgbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAgICAgICAgLy8gSWYgd2UncmUgXCJiYXRjaGluZ1wiIGJlaGF2aW9yLCB0aGVuIHRoZSB3cmFwcGVkIGNhbGxiYWNrcyB3aWxsXHJcbiAgICAgICAgICAvLyBiYWlsIG91dCwgY2F1c2luZyB0aGUgYmFzZSBzdG9yZSBub3RpZmljYXRpb24gYmVoYXZpb3IgdG8gYmUgbm8tb3BzLlxyXG4gICAgICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKGFjdGlvbilcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgLy8gQXNzdW1lIHdlJ3JlIGJhY2sgdG8gbm9ybWFsIGJlaGF2aW9yIGFmdGVyIGVhY2ggYWN0aW9uXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcbiIsICJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59O1xyXG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn07XHJcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XHJcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcclxudmFyIF9fZGVmTm9ybWFsUHJvcCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHsgcmV0dXJuIGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTsgfTtcclxudmFyIF9fc3ByZWFkVmFsdWVzID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcclxuICAgICAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBfX2dldE93blByb3BTeW1ib2xzKGIpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59O1xyXG52YXIgX19zcHJlYWRQcm9wcyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTsgfTtcclxudmFyIF9fYXN5bmMgPSBmdW5jdGlvbiAoX190aGlzLCBfX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBmdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLnRocm93KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5kb25lID8gcmVzb2x2ZSh4LnZhbHVlKSA6IFByb21pc2UucmVzb2x2ZSh4LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9O1xyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseShfX3RoaXMsIF9fYXJndW1lbnRzKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG4vLyBzcmMvaW5kZXgudHNcclxuaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSBcImltbWVyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGRlZmF1bHQyLCBjdXJyZW50IGFzIGN1cnJlbnQyLCBmcmVlemUsIG9yaWdpbmFsLCBpc0RyYWZ0IGFzIGlzRHJhZnQ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIGFzIGNyZWF0ZVNlbGVjdG9yMiB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG4vLyBzcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHNcclxuaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgdmFyIHdyYXBwZWRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgcmVzdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlXSwgcmVzdCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB3cmFwcGVkU2VsZWN0b3I7XHJcbn07XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgYXBwbHlNaWRkbGV3YXJlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcclxuLy8gc3JjL2RldnRvb2xzRXh0ZW5zaW9uLnRzXHJcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tIFwicmVkdXhcIjtcclxudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgIHJldHVybiBjb21wb3NlO1xyXG4gICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vb3AyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vb3AyO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2lzUGxhaW5PYmplY3QudHNcclxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG4gICAgaWYgKHByb3RvID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgdmFyIGJhc2VQcm90byA9IHByb3RvO1xyXG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgYmFzZVByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvdG8gPT09IGJhc2VQcm90bztcclxufVxyXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tIFwicmVkdXgtdGh1bmtcIjtcclxuLy8gc3JjL3RzSGVscGVycy50c1xyXG52YXIgaGFzTWF0Y2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICByZXR1cm4gdiAmJiB0eXBlb2Ygdi5tYXRjaCA9PT0gXCJmdW5jdGlvblwiO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJlcGFyZUFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICAgICAgICAgIGlmICghcHJlcGFyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZFxyXG4gICAgICAgICAgICB9LCBcIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7IG1ldGE6IHByZXBhcmVkLm1ldGEgfSksIFwiZXJyb3JcIiBpbiBwcmVwYXJlZCAmJiB7IGVycm9yOiBwcmVwYXJlZC5lcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogYXJnc1swXSB9O1xyXG4gICAgfVxyXG4gICAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiXCIgKyB0eXBlOyB9O1xyXG4gICAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZTtcclxuICAgIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24udHlwZSA9PT0gdHlwZTsgfTtcclxuICAgIHJldHVybiBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbmZ1bmN0aW9uIGlzQWN0aW9uKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiBcInR5cGVcIiBpbiBhY3Rpb247XHJcbn1cclxuZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09IFwiZnVuY3Rpb25cIiAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgaGFzTWF0Y2hGdW5jdGlvbihhY3Rpb24pO1xyXG59XHJcbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgJiYgdHlwZW9mIGFjdGlvbi50eXBlID09PSBcInN0cmluZ1wiICYmIE9iamVjdC5rZXlzKGFjdGlvbikuZXZlcnkoaXNWYWxpZEtleSk7XHJcbn1cclxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcclxuICAgIHJldHVybiBbXCJ0eXBlXCIsIFwicGF5bG9hZFwiLCBcImVycm9yXCIsIFwibWV0YVwiXS5pbmRleE9mKGtleSkgPiAtMTtcclxufVxyXG5mdW5jdGlvbiBnZXRUeXBlKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgIHJldHVybiBcIlwiICsgYWN0aW9uQ3JlYXRvcjtcclxufVxyXG4vLyBzcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gZ2V0TWVzc2FnZSh0eXBlKSB7XHJcbiAgICB2YXIgc3BsaXRUeXBlID0gdHlwZSA/IChcIlwiICsgdHlwZSkuc3BsaXQoXCIvXCIpIDogW107XHJcbiAgICB2YXIgYWN0aW9uTmFtZSA9IHNwbGl0VHlwZVtzcGxpdFR5cGUubGVuZ3RoIC0gMV0gfHwgXCJhY3Rpb25DcmVhdG9yXCI7XHJcbiAgICByZXR1cm4gXCJEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXFxcIlwiICsgKHR5cGUgfHwgXCJ1bmtub3duXCIpICsgXCJcXFwiIGJlaW5nIGRpc3BhdGNoZWQuIFxcbk1ha2Ugc3VyZSB5b3UncmUgY2FsbGluZyB0aGUgYWN0aW9uIGNyZWF0b3IgYmVmb3JlIGRpc3BhdGNoaW5nLCBpLmUuIGBkaXNwYXRjaChcIiArIGFjdGlvbk5hbWUgKyBcIigpKWAgaW5zdGVhZCBvZiBgZGlzcGF0Y2goXCIgKyBhY3Rpb25OYW1lICsgXCIpYC4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiB0aGUgYWN0aW9uIGhhcyBubyBwYXlsb2FkLlwiO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzQWN0aW9uQ3JlYXRvciwgaXNBY3Rpb25DcmVhdG9yMiA9IF9jID09PSB2b2lkIDAgPyBpc0FjdGlvbkNyZWF0b3IgOiBfYztcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmIChpc0FjdGlvbkNyZWF0b3IyKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGdldE1lc3NhZ2UoYWN0aW9uLnR5cGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL3V0aWxzLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdGFibGUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XHJcbiAgICB2YXIgZWxhcHNlZCA9IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1lYXN1cmVUaW1lOiBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhcm5JZkV4Y2VlZGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihmbk5hbWUgKyBcIiB0b29rIFwiICsgZWxhcHNlZCArIFwibXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgXCIgKyBtYXhEZWxheSArIFwibXMuIFxcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbnZhciBNaWRkbGV3YXJlQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoTWlkZGxld2FyZUFycmF5LCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gTWlkZGxld2FyZUFycmF5KCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcztcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaWRkbGV3YXJlQXJyYXksIFN5bWJvbC5zcGVjaWVzLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxudmFyIEVuaGFuY2VyQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoRW5oYW5jZXJBcnJheSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEVuaGFuY2VyQXJyYXkoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmhhbmNlckFycmF5LCBTeW1ib2wuc3BlY2llcywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRW5oYW5jZXJBcnJheTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnIuY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEVuaGFuY2VyQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxuZnVuY3Rpb24gZnJlZXplRHJhZnRhYmxlKHZhbCkge1xyXG4gICAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB9KSA6IHZhbDtcclxufVxyXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbnZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XHJcbnZhciBwcmVmaXggPSBcIkludmFyaWFudCBmYWlsZWRcIjtcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXggKyBcIjogXCIgKyAobWVzc2FnZSB8fCBcIlwiKSk7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KTtcclxufVxyXG5mdW5jdGlvbiBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpIHtcclxuICAgIHZhciBzdGFjayA9IFtdLCBrZXlzID0gW107XHJcbiAgICBpZiAoIWRlY3ljbGVyKVxyXG4gICAgICAgIGRlY3ljbGVyID0gZnVuY3Rpb24gKF8sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcclxuICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopIHtcclxuICAgIHZhciB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldGVjdE11dGF0aW9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmosIHBhdGgsIGNoZWNrZWRPYmplY3RzKSB7XHJcbiAgICBpZiAoaWdub3JlUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICBpZiAoY2hlY2tlZE9iamVjdHMgPT09IHZvaWQgMCkgeyBjaGVja2VkT2JqZWN0cyA9IG5ldyBTZXQoKTsgfVxyXG4gICAgdmFyIHRyYWNrZWQgPSB7IHZhbHVlOiBvYmogfTtcclxuICAgIGlmICghaXNJbW11dGFibGUob2JqKSAmJiAhY2hlY2tlZE9iamVjdHMuaGFzKG9iaikpIHtcclxuICAgICAgICBjaGVja2VkT2JqZWN0cy5hZGQob2JqKTtcclxuICAgICAgICB0cmFja2VkLmNoaWxkcmVuID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmpba2V5XSwgY2hpbGRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhY2tlZDtcclxufVxyXG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocywgdHJhY2tlZFByb3BlcnR5LCBvYmosIHNhbWVQYXJlbnRSZWYsIHBhdGgpIHtcclxuICAgIGlmIChpZ25vcmVkUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVkUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgPT09IHZvaWQgMCkgeyBzYW1lUGFyZW50UmVmID0gZmFsc2U7IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIHZhciBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdm9pZCAwO1xyXG4gICAgdmFyIHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiB0cnVlLCBwYXRoOiBwYXRoIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbiAgICB9XHJcbiAgICB2YXIga2V5c1RvRGV0ZWN0ID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSwgb2JqW2tleV0sIHNhbWVSZWYsIG5lc3RlZFBhdGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcclxuICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzEoa2V5KTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlXzEgPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8xLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNJbW11dGFibGUsIGlzSW1tdXRhYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzSW1tdXRhYmxlRGVmYXVsdCA6IF9jLCBpZ25vcmVkUGF0aHMgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgX2QgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2QgPT09IHZvaWQgMCA/IDMyIDogX2QsIGlnbm9yZSA9IG9wdGlvbnMuaWdub3JlO1xyXG4gICAgaWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzIHx8IGlnbm9yZTtcclxuICAgIHZhciB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgdmFyIGdldFN0YXRlID0gX2MuZ2V0U3RhdGU7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJ1wiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCInLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lndhc011dGF0ZWQgJiYgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6IFwiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCIuIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gXCIgKyBzdHJpbmdpZnkoYWN0aW9uKSArIFwiLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XHJcbiAgICAgICAgfTsgfTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xyXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xyXG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSh2YWx1ZSwgcGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpIHtcclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIGlmIChpc1NlcmlhbGl6YWJsZSA9PT0gdm9pZCAwKSB7IGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbjsgfVxyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICB2YXIgZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XHJcbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleVBhdGg6IHBhdGggfHwgXCI8cm9vdD5cIixcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgPT0gbnVsbCA/IHZvaWQgMCA6IGNhY2hlLmhhcyh2YWx1ZSkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKGtleSwgbmVzdGVkVmFsdWUpIHtcclxuICAgICAgICB2YXIgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICAgICAgICB2YXIgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKGZ1bmN0aW9uIChpZ25vcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWVcclxuICAgICAgICAgICAgICAgIH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShuZXN0ZWRWYWx1ZSwgbmVzdGVkUGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgZW50cmllc18xID0gZW50cmllczsgX2kgPCBlbnRyaWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIF9jID0gZW50cmllc18xW19pXSwga2V5ID0gX2NbMF0sIG5lc3RlZFZhbHVlID0gX2NbMV07XHJcbiAgICAgICAgdmFyIHN0YXRlXzIgPSBfbG9vcF8yKGtleSwgbmVzdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMiA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzIudmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKVxyXG4gICAgICAgIGNhY2hlLmFkZCh2YWx1ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWUpIHtcclxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFZhbHVlID0gX2NbX2ldO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgbmVzdGVkVmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNTZXJpYWxpemFibGUsIGlzU2VyaWFsaXphYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzUGxhaW4gOiBfYywgZ2V0RW50cmllcyA9IG9wdGlvbnMuZ2V0RW50cmllcywgX2QgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25zLCBpZ25vcmVkQWN0aW9ucyA9IF9kID09PSB2b2lkIDAgPyBbXSA6IF9kLCBfZSA9IG9wdGlvbnMuaWdub3JlZEFjdGlvblBhdGhzLCBpZ25vcmVkQWN0aW9uUGF0aHMgPSBfZSA9PT0gdm9pZCAwID8gW1wibWV0YS5hcmdcIiwgXCJtZXRhLmJhc2VRdWVyeU1ldGFcIl0gOiBfZSwgX2YgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgaWdub3JlZFBhdGhzID0gX2YgPT09IHZvaWQgMCA/IFtdIDogX2YsIF9nID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9nID09PSB2b2lkIDAgPyAzMiA6IF9nLCBfaCA9IG9wdGlvbnMuaWdub3JlU3RhdGUsIGlnbm9yZVN0YXRlID0gX2ggPT09IHZvaWQgMCA/IGZhbHNlIDogX2gsIF9qID0gb3B0aW9ucy5pZ25vcmVBY3Rpb25zLCBpZ25vcmVBY3Rpb25zID0gX2ogPT09IHZvaWQgMCA/IGZhbHNlIDogX2osIF9rID0gb3B0aW9ucy5kaXNhYmxlQ2FjaGUsIGRpc2FibGVDYWNoZSA9IF9rID09PSB2b2lkIDAgPyBmYWxzZSA6IF9rO1xyXG4gICAgdmFyIGNhY2hlID0gIWRpc2FibGVDYWNoZSAmJiBXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IHZvaWQgMDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RvcmVBUEkpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgIGlmICghaWdub3JlQWN0aW9ucyAmJiAhKGlnbm9yZWRBY3Rpb25zLmxlbmd0aCAmJiBpZ25vcmVkQWN0aW9ucy5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShhY3Rpb24sIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkQWN0aW9uUGF0aHMsIGNhY2hlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBgXCIgKyBrZXlQYXRoICsgXCJgLiBWYWx1ZTpcIiwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogXCIsIGFjdGlvbiwgXCJcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKVwiLCBcIlxcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShzdGF0ZSwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiBcIiArIGFjdGlvbi50eXBlICsgXCIuXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5mdW5jdGlvbiBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy50aHVuaywgdGh1bmsgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuaW1tdXRhYmxlQ2hlY2ssIGltbXV0YWJsZUNoZWNrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBvcHRpb25zLnNlcmlhbGl6YWJsZUNoZWNrLCBzZXJpYWxpemFibGVDaGVjayA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIF9mID0gb3B0aW9ucy5hY3Rpb25DcmVhdG9yQ2hlY2ssIGFjdGlvbkNyZWF0b3JDaGVjayA9IF9mID09PSB2b2lkIDAgPyB0cnVlIDogX2Y7XHJcbiAgICB2YXIgbWlkZGxld2FyZUFycmF5ID0gbmV3IE1pZGRsZXdhcmVBcnJheSgpO1xyXG4gICAgaWYgKHRodW5rKSB7XHJcbiAgICAgICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmIChpbW11dGFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgaW1tdXRhYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oYWN0aW9uQ3JlYXRvckNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSBhY3Rpb25DcmVhdG9yQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWlkZGxld2FyZUFycmF5O1xyXG59XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG52YXIgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xyXG4gICAgdmFyIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSA9IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcclxuICAgIHZhciBfYyA9IG9wdGlvbnMgfHwge30sIF9kID0gX2MucmVkdWNlciwgcmVkdWNlciA9IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZCwgX2UgPSBfYy5taWRkbGV3YXJlLCBtaWRkbGV3YXJlID0gX2UgPT09IHZvaWQgMCA/IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSgpIDogX2UsIF9mID0gX2MuZGV2VG9vbHMsIGRldlRvb2xzID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZiwgX2cgPSBfYy5wcmVsb2FkZWRTdGF0ZSwgcHJlbG9hZGVkU3RhdGUgPSBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2csIF9oID0gX2MuZW5oYW5jZXJzLCBlbmhhbmNlcnMgPSBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2g7XHJcbiAgICB2YXIgcm9vdFJlZHVjZXI7XHJcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgICAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZWR1Y2VyXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMnKTtcclxuICAgIH1cclxuICAgIHZhciBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlO1xyXG4gICAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpO1xyXG4gICAgICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndoZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgZmluYWxNaWRkbGV3YXJlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCI7IH0pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxuICAgIHZhciBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUuYXBwbHkodm9pZCAwLCBmaW5hbE1pZGRsZXdhcmUpO1xyXG4gICAgdmFyIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2UyO1xyXG4gICAgaWYgKGRldlRvb2xzKSB7XHJcbiAgICAgICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTlxyXG4gICAgICAgIH0sIHR5cGVvZiBkZXZUb29scyA9PT0gXCJvYmplY3RcIiAmJiBkZXZUb29scykpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpO1xyXG4gICAgdmFyIHN0b3JlRW5oYW5jZXJzID0gZGVmYXVsdEVuaGFuY2VycztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IF9fc3ByZWFkQXJyYXkoW21pZGRsZXdhcmVFbmhhbmNlcl0sIGVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhkZWZhdWx0RW5oYW5jZXJzKTtcclxuICAgIH1cclxuICAgIHZhciBjb21wb3NlZEVuaGFuY2VyID0gZmluYWxDb21wb3NlLmFwcGx5KHZvaWQgMCwgc3RvcmVFbmhhbmNlcnMpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJvb3RSZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgY29tcG9zZWRFbmhhbmNlcik7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTIsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XHJcbi8vIHNyYy9tYXBCdWlsZGVycy50c1xyXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcclxuICAgIHZhciBhY3Rpb25zTWFwID0ge307XHJcbiAgICB2YXIgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcclxuICAgIHZhciBkZWZhdWx0Q2FzZVJlZHVjZXI7XHJcbiAgICB2YXIgYnVpbGRlciA9IHtcclxuICAgICAgICBhZGRDYXNlOiBmdW5jdGlvbiAodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGRNYXRjaGVyOiBmdW5jdGlvbiAobWF0Y2hlciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHsgbWF0Y2hlcjogbWF0Y2hlciwgcmVkdWNlcjogcmVkdWNlciB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGREZWZhdWx0Q2FzZTogZnVuY3Rpb24gKHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpO1xyXG4gICAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcclxufVxyXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb24oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSBmYWxzZTtcclxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICBpZiAoYWN0aW9uTWF0Y2hlcnMgPT09IHZvaWQgMCkgeyBhY3Rpb25NYXRjaGVycyA9IFtdOyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVJlZHVjZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKSA6IFttYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl0sIGFjdGlvbnNNYXAgPSBfY1swXSwgZmluYWxBY3Rpb25NYXRjaGVycyA9IF9jWzFdLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlciA9IF9jWzJdO1xyXG4gICAgdmFyIGdldEluaXRpYWxTdGF0ZTtcclxuICAgIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSk7IH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZnJvemVuSW5pdGlhbFN0YXRlXzEgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm96ZW5Jbml0aWFsU3RhdGVfMTsgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7IHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7IH1cclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXJzID0gX19zcHJlYWRBcnJheShbXHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbYWN0aW9uLnR5cGVdXHJcbiAgICAgICAgXSwgZmluYWxBY3Rpb25NYXRjaGVycy5maWx0ZXIoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaGVyID0gX2MubWF0Y2hlcjtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciByZWR1Y2VyMiA9IF9jLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VyMjtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoZnVuY3Rpb24gKGNyKSB7IHJldHVybiAhIWNyOyB9KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZnQyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRHJhZnRhYmxlMihwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XHJcbiAgICByZXR1cm4gcmVkdWNlcjtcclxufVxyXG4vLyBzcmMvY3JlYXRlU2xpY2UudHNcclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGdldFR5cGUyKHNsaWNlLCBhY3Rpb25LZXkpIHtcclxuICAgIHJldHVybiBzbGljZSArIFwiL1wiICsgYWN0aW9uS2V5O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNsaWNlKG9wdGlvbnMpIHtcclxuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lO1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYG5hbWVgIGlzIGEgcmVxdWlyZWQgb3B0aW9uIGZvciBjcmVhdGVTbGljZVwiKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBpbml0aWFsU3RhdGUgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsU3RhdGUgPT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsU3RhdGUgOiBmcmVlemVEcmFmdGFibGUob3B0aW9ucy5pbml0aWFsU3RhdGUpO1xyXG4gICAgdmFyIHJlZHVjZXJzID0gb3B0aW9ucy5yZWR1Y2VycyB8fCB7fTtcclxuICAgIHZhciByZWR1Y2VyTmFtZXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XHJcbiAgICB2YXIgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUgPSB7fTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSA9IHt9O1xyXG4gICAgdmFyIGFjdGlvbkNyZWF0b3JzID0ge307XHJcbiAgICByZWR1Y2VyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocmVkdWNlck5hbWUpIHtcclxuICAgICAgICB2YXIgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUgPSByZWR1Y2Vyc1tyZWR1Y2VyTmFtZV07XHJcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlMihuYW1lLCByZWR1Y2VyTmFtZSk7XHJcbiAgICAgICAgdmFyIGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHZhciBwcmVwYXJlQ2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKFwicmVkdWNlclwiIGluIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlKSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucmVkdWNlcjtcclxuICAgICAgICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgYWN0aW9uQ3JlYXRvcnNbcmVkdWNlck5hbWVdID0gcHJlcGFyZUNhbGxiYWNrID8gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVDYWxsYmFjaykgOiBjcmVhdGVBY3Rpb24odHlwZSk7XHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVTbGljZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2MgPSB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc10sIF9kID0gX2NbMF0sIGV4dHJhUmVkdWNlcnMgPSBfZCA9PT0gdm9pZCAwID8ge30gOiBfZCwgX2UgPSBfY1sxXSwgYWN0aW9uTWF0Y2hlcnMgPSBfZSA9PT0gdm9pZCAwID8gW10gOiBfZSwgX2YgPSBfY1syXSwgZGVmYXVsdENhc2VSZWR1Y2VyID0gX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mO1xyXG4gICAgICAgIHZhciBmaW5hbENhc2VSZWR1Y2VycyA9IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBleHRyYVJlZHVjZXJzKSwgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUpO1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgZnVuY3Rpb24gKGJ1aWxkZXIpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZpbmFsQ2FzZVJlZHVjZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGFjdGlvbk1hdGNoZXJzXzEgPSBhY3Rpb25NYXRjaGVyczsgX2kgPCBhY3Rpb25NYXRjaGVyc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG0gPSBhY3Rpb25NYXRjaGVyc18xW19pXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB2YXIgX3JlZHVjZXI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgcmVkdWNlcjogZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjdGlvbnM6IGFjdGlvbkNyZWF0b3JzLFxyXG4gICAgICAgIGNhc2VSZWR1Y2Vyczogc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUsXHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3JlZHVjZXIpXHJcbiAgICAgICAgICAgICAgICBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvZW50aXR5X3N0YXRlLnRzXHJcbmZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaWRzOiBbXSxcclxuICAgICAgICBlbnRpdGllczoge31cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpIHtcclxuICAgIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGUpIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0YXRlID09PSB2b2lkIDApIHsgYWRkaXRpb25hbFN0YXRlID0ge307IH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldEluaXRpYWxTdGF0ZTogZ2V0SW5pdGlhbFN0YXRlIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50c1xyXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKHNlbGVjdFN0YXRlKSB7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuaWRzOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RFbnRpdGllcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuZW50aXRpZXM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgc2VsZWN0RW50aXRpZXMsIGZ1bmN0aW9uIChpZHMsIGVudGl0aWVzKSB7IHJldHVybiBpZHMubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkID0gZnVuY3Rpb24gKF8sIGlkKSB7IHJldHVybiBpZDsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QnlJZCA9IGZ1bmN0aW9uIChlbnRpdGllcywgaWQpIHsgcmV0dXJuIGVudGl0aWVzW2lkXTsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0VG90YWwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIGZ1bmN0aW9uIChpZHMpIHsgcmV0dXJuIGlkcy5sZW5ndGg7IH0pO1xyXG4gICAgICAgIGlmICghc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdElkczogc2VsZWN0SWRzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBzZWxlY3RBbGwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RUb3RhbDogc2VsZWN0VG90YWwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlbGVjdElkczogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdElkcyksXHJcbiAgICAgICAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEFsbCksXHJcbiAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxyXG4gICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBnZXRTZWxlY3RvcnM6IGdldFNlbGVjdG9ycyB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUzLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDMgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHZhciBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoZnVuY3Rpb24gKF8sIHN0YXRlKSB7IHJldHVybiBtdXRhdG9yKHN0YXRlKTsgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzRlNBKGFyZzIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcnVuTXV0YXRvciA9IGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGlzRHJhZnQzKHN0YXRlKSkge1xyXG4gICAgICAgICAgICBydW5NdXRhdG9yKHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3V0aWxzLnRzXHJcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xyXG4gICAgdmFyIGtleSA9IHNlbGVjdElkKGVudGl0eSk7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XHJcbiAgICAgICAgZW50aXRpZXMgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdGllcztcclxufVxyXG5mdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICB2YXIgYWRkZWQgPSBbXTtcclxuICAgIHZhciB1cGRhdGVkID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzEgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18xW19pXTtcclxuICAgICAgICB2YXIgaWQgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmIChpZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2goeyBpZDogaWQsIGNoYW5nZXM6IGVudGl0eSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xyXG4gICAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18yID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMi5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzJbX2ldO1xyXG4gICAgICAgICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18zID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzNbX2ldO1xyXG4gICAgICAgICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGRpZE11dGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1trZXldO1xyXG4gICAgICAgICAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkaWRNdXRhdGUpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGlkIGluIHN0YXRlLmVudGl0aWVzOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xyXG4gICAgICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgICAgICBlbnRpdGllczoge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbDIgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgIHZhciB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwyLCB1cGRhdGUuY2hhbmdlcyk7XHJcbiAgICAgICAgdmFyIG5ld0tleSA9IHNlbGVjdElkVmFsdWUodXBkYXRlZCwgc2VsZWN0SWQpO1xyXG4gICAgICAgIHZhciBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcclxuICAgICAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgICAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleTtcclxuICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xyXG4gICAgICAgIHJldHVybiBoYXNOZXdLZXk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG5ld0tleXMgPSB7fTtcclxuICAgICAgICB2YXIgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xyXG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUuaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXM6IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPyB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0uY2hhbmdlcyA6IG51bGwpLCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWRNdXRhdGVJZHMgPSB1cGRhdGVzLmZpbHRlcihmdW5jdGlvbiAodXBkYXRlKSB7IHJldHVybiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpOyB9KS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3Qua2V5cyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVtb3ZlQWxsOiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IocmVtb3ZlQWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlT25lTXV0YWJseSksXHJcbiAgICAgICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydCkge1xyXG4gICAgdmFyIF9jID0gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpLCByZW1vdmVPbmUgPSBfYy5yZW1vdmVPbmUsIHJlbW92ZU1hbnkgPSBfYy5yZW1vdmVNYW55LCByZW1vdmVBbGwgPSBfYy5yZW1vdmVBbGw7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgdmFyIG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAobW9kZWwpIHsgcmV0dXJuICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKTsgfSk7XHJcbiAgICAgICAgaWYgKG1vZGVscy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobW9kZWxzLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgdXBkYXRlc18xID0gdXBkYXRlczsgX2kgPCB1cGRhdGVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzXzFbX2ldO1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwcGxpZWRVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICAgICAgdmFyIG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3SWRdID0gZW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgX2MgPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpLCBhZGRlZCA9IF9jWzBdLCB1cGRhdGVkID0gX2NbMV07XHJcbiAgICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBtZXJnZShtb2RlbHMsIHN0YXRlKSB7XHJcbiAgICAgICAgbW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKG1vZGVsKV0gPSBtb2RlbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhbGxFbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpO1xyXG4gICAgICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydCk7XHJcbiAgICAgICAgdmFyIG5ld1NvcnRlZElkcyA9IGFsbEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGlkcyA9IHN0YXRlLmlkcztcclxuICAgICAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVPbmU6IHJlbW92ZU9uZSxcclxuICAgICAgICByZW1vdmVNYW55OiByZW1vdmVNYW55LFxyXG4gICAgICAgIHJlbW92ZUFsbDogcmVtb3ZlQWxsLFxyXG4gICAgICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXIob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBfYyA9IF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgICAgIHNlbGVjdElkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuIGluc3RhbmNlLmlkOyB9XHJcbiAgICB9LCBvcHRpb25zKSwgc2VsZWN0SWQgPSBfYy5zZWxlY3RJZCwgc29ydENvbXBhcmVyID0gX2Muc29ydENvbXBhcmVyO1xyXG4gICAgdmFyIHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkoKTtcclxuICAgIHZhciBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpO1xyXG4gICAgdmFyIHN0YXRlQWRhcHRlciA9IHNvcnRDb21wYXJlciA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKSA6IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcclxuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgc2VsZWN0SWQ6IHNlbGVjdElkLFxyXG4gICAgICAgIHNvcnRDb21wYXJlcjogc29ydENvbXBhcmVyXHJcbiAgICB9LCBzdGF0ZUZhY3RvcnkpLCBzZWxlY3RvcnNGYWN0b3J5KSwgc3RhdGVBZGFwdGVyKTtcclxufVxyXG4vLyBzcmMvbmFub2lkLnRzXHJcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xyXG52YXIgbmFub2lkID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIGlmIChzaXplID09PSB2b2lkIDApIHsgc2l6ZSA9IDIxOyB9XHJcbiAgICB2YXIgaWQgPSBcIlwiO1xyXG4gICAgdmFyIGkgPSBzaXplO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlkICs9IHVybEFscGhhYmV0W01hdGgucmFuZG9tKCkgKiA2NCB8IDBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQXN5bmNUaHVuay50c1xyXG52YXIgY29tbW9uUHJvcGVydGllcyA9IFtcclxuICAgIFwibmFtZVwiLFxyXG4gICAgXCJtZXNzYWdlXCIsXHJcbiAgICBcInN0YWNrXCIsXHJcbiAgICBcImNvZGVcIlxyXG5dO1xyXG52YXIgUmVqZWN0V2l0aFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVqZWN0V2l0aFZhbHVlKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVqZWN0V2l0aFZhbHVlO1xyXG59KCkpO1xyXG52YXIgRnVsZmlsbFdpdGhNZXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRnVsZmlsbFdpdGhNZXRhKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRnVsZmlsbFdpdGhNZXRhO1xyXG59KCkpO1xyXG52YXIgbWluaVNlcmlhbGl6ZUVycm9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHNpbXBsZUVycm9yID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjb21tb25Qcm9wZXJ0aWVzXzEgPSBjb21tb25Qcm9wZXJ0aWVzOyBfaSA8IGNvbW1vblByb3BlcnRpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29tbW9uUHJvcGVydGllc18xW19pXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2ltcGxlRXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcodmFsdWUpIH07XHJcbn07XHJcbnZhciBjcmVhdGVBc3luY1RodW5rID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bmsyKHR5cGVQcmVmaXgsIHBheWxvYWRDcmVhdG9yLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIGZ1bmN0aW9uIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgbWV0YTogX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgbWV0YSB8fCB7fSksIHtcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcImZ1bGZpbGxlZFwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBwZW5kaW5nID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9wZW5kaW5nXCIsIGZ1bmN0aW9uIChyZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogdm9pZCAwLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciByZWplY3RlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcmVqZWN0ZWRcIiwgZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0SWQsIGFyZywgcGF5bG9hZCwgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJDb25kaXRpb25FcnJvclwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBkaXNwbGF5ZWRXYXJuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIEFDID0gdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIiA/IEFib3J0Q29udHJvbGxlciA6IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmFsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25hYm9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiB2b2lkIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dJZkFib3J0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBpbXBsZW1lbnQgQWJvcnRDb250cm9sbGVyLiBcXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBgYWJvcnRgIGV2ZW50cywgcGxlYXNlIGNvbnNpZGVyIGltcG9ydGluZyBhIHBvbHlmaWxsIGxpa2UgJ2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC1vbmx5Jy5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NfMTtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoYXJnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RJZCA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmlkR2VuZXJhdG9yKSA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKSA6IG5hbm9pZCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IG5ldyBBQygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0UmVhc29uO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uO1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2UyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2FzeW5jKHRoaXMsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgZmluYWxBY3Rpb24sIGNvbmRpdGlvblJlc3VsdCwgYWJvcnRlZFByb21pc2UsIGVycl8xLCBza2lwRGlzcGF0Y2g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgNCwgLCA1XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBhcmcsIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgY29uZGl0aW9uUmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXywgcmVqZWN0KSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBYm9ydEVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChwZW5kaW5nKHJlcXVlc3RJZCwgYXJnLCAoX2IgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFBlbmRpbmdNZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChvcHRpb25zLCB7IHJlcXVlc3RJZDogcmVxdWVzdElkLCBhcmc6IGFyZyB9LCB7IGdldFN0YXRlOiBnZXRTdGF0ZSwgZXh0cmE6IGV4dHJhIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmFjZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgbWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEZ1bGZpbGxXaXRoTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdCwgcmVxdWVzdElkLCBhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnJfMSBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnJfMS5wYXlsb2FkLCBlcnJfMS5tZXRhKSA6IHJlamVjdGVkKGVycl8xLCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcERpc3BhdGNoID0gb3B0aW9ucyAmJiAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJiByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiYgZmluYWxBY3Rpb24ubWV0YS5jb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZpbmFsQWN0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlMiwge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgICAgICB1bndyYXA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UyLnRoZW4odW53cmFwUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWN0aW9uQ3JlYXRvciwge1xyXG4gICAgICAgICAgICBwZW5kaW5nOiBwZW5kaW5nLFxyXG4gICAgICAgICAgICByZWplY3RlZDogcmVqZWN0ZWQsXHJcbiAgICAgICAgICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxyXG4gICAgICAgICAgICB0eXBlUHJlZml4OiB0eXBlUHJlZml4XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVBc3luY1RodW5rMi53aXRoVHlwZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBc3luY1RodW5rMjsgfTtcclxuICAgIHJldHVybiBjcmVhdGVBc3luY1RodW5rMjtcclxufSkoKTtcclxuZnVuY3Rpb24gdW53cmFwUmVzdWx0KGFjdGlvbikge1xyXG4gICAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uLmVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLmVycm9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG4vLyBzcmMvbWF0Y2hlcnMudHNcclxudmFyIG1hdGNoZXMgPSBmdW5jdGlvbiAobWF0Y2hlciwgYWN0aW9uKSB7XHJcbiAgICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBpc0FueU9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5zb21lKGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FsbE9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5ldmVyeShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCB2YWxpZFN0YXR1cykge1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID0gdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xO1xyXG4gICAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGFbMF0gPT09IFwiZnVuY3Rpb25cIiAmJiBcInBlbmRpbmdcIiBpbiBhWzBdICYmIFwiZnVsZmlsbGVkXCIgaW4gYVswXSAmJiBcInJlamVjdGVkXCIgaW4gYVswXTtcclxufVxyXG5mdW5jdGlvbiBpc1BlbmRpbmcoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnBlbmRpbmc7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5yZWplY3RlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgaGFzRmxhZyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlO1xyXG4gICAgfTtcclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wiZnVsZmlsbGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsuZnVsZmlsbGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIiwgXCJmdWxmaWxsZWRcIiwgXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgYXN5bmNUaHVua3NfMSA9IGFzeW5jVGh1bmtzOyBfaSA8IGFzeW5jVGh1bmtzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhc3luY1RodW5rID0gYXN5bmNUaHVua3NfMVtfaV07XHJcbiAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goYXN5bmNUaHVuay5wZW5kaW5nLCBhc3luY1RodW5rLnJlamVjdGVkLCBhc3luY1RodW5rLmZ1bGZpbGxlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xyXG52YXIgYXNzZXJ0RnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYywgZXhwZWN0ZWQpIHtcclxuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihleHBlY3RlZCArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG59O1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHtcclxufTtcclxudmFyIGNhdGNoUmVqZWN0aW9uID0gZnVuY3Rpb24gKHByb21pc2UyLCBvbkVycm9yKSB7XHJcbiAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBub29wOyB9XHJcbiAgICBwcm9taXNlMi5jYXRjaChvbkVycm9yKTtcclxuICAgIHJldHVybiBwcm9taXNlMjtcclxufTtcclxudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSBmdW5jdGlvbiAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSB7XHJcbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2ssIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spOyB9O1xyXG59O1xyXG52YXIgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IGZ1bmN0aW9uIChhYm9ydENvbnRyb2xsZXIsIHJlYXNvbikge1xyXG4gICAgdmFyIHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiByZWFzb24sXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pO1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcclxudmFyIHRhc2sgPSBcInRhc2tcIjtcclxudmFyIGxpc3RlbmVyID0gXCJsaXN0ZW5lclwiO1xyXG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcclxudmFyIGNhbmNlbGxlZCA9IFwiY2FuY2VsbGVkXCI7XHJcbnZhciB0YXNrQ2FuY2VsbGVkID0gXCJ0YXNrLVwiICsgY2FuY2VsbGVkO1xyXG52YXIgdGFza0NvbXBsZXRlZCA9IFwidGFzay1cIiArIGNvbXBsZXRlZDtcclxudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNhbmNlbGxlZDtcclxudmFyIGxpc3RlbmVyQ29tcGxldGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNvbXBsZXRlZDtcclxudmFyIFRhc2tBYm9ydEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFza0Fib3J0RXJyb3IoY29kZSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHRhc2sgKyBcIiBcIiArIGNhbmNlbGxlZCArIFwiIChyZWFzb246IFwiICsgY29kZSArIFwiKVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRhc2tBYm9ydEVycm9yO1xyXG59KCkpO1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHNcclxudmFyIHZhbGlkYXRlQWN0aXZlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiByYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UyKSB7XHJcbiAgICB2YXIgY2xlYW51cCA9IG5vb3A7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBub3RpZnlSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKTsgfTtcclxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgbm90aWZ5UmVqZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xyXG4gICAgICAgIHByb21pc2UyLmZpbmFsbHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xlYW51cCgpOyB9KS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjbGVhbnVwID0gbm9vcDtcclxuICAgIH0pO1xyXG59XHJcbnZhciBydW5UYXNrID0gZnVuY3Rpb24gKHRhc2syLCBjbGVhblVwKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHZhbHVlLCBlcnJvcl8xO1xyXG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoKV07XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2syKCldO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJva1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzFcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgY2xlYW5VcCA9PSBudWxsID8gdm9pZCAwIDogY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pOyB9O1xyXG52YXIgY3JlYXRlUGF1c2UgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb21pc2UyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZTIpLnRoZW4oZnVuY3Rpb24gKG91dHB1dCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVEZWxheSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIHZhciBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRpbWVvdXRNcykge1xyXG4gICAgICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpOyB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXHJcbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xyXG52YXIgSU5URVJOQUxfTklMX1RPS0VOID0ge307XHJcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xyXG52YXIgY3JlYXRlRm9yayA9IGZ1bmN0aW9uIChwYXJlbnRBYm9ydFNpZ25hbCwgcGFyZW50QmxvY2tpbmdQcm9taXNlcykge1xyXG4gICAgdmFyIGxpbmtDb250cm9sbGVycyA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7IHJldHVybiBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbik7IH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXNrRXhlY3V0b3IsIG9wdHMpIHtcclxuICAgICAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsIFwidGFza0V4ZWN1dG9yXCIpO1xyXG4gICAgICAgIHZhciBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBydW5UYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQyO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShwYXJlbnRBYm9ydFNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2tFeGVjdXRvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHQyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpOyB9KTtcclxuICAgICAgICBpZiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5hdXRvSm9pbikge1xyXG4gICAgICAgICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZShwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlVGFrZVBhdHRlcm4gPSBmdW5jdGlvbiAoc3RhcnRMaXN0ZW5pbmcsIHNpZ25hbCkge1xyXG4gICAgdmFyIHRha2UgPSBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSwgdHVwbGVQcm9taXNlLCBwcm9taXNlcywgb3V0cHV0O1xyXG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wTGlzdGVuaW5nID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IGZ1bmN0aW9uIChhY3Rpb24sIGxpc3RlbmVyQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsICwgMywgNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvdXRwdXRdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpOyB9O1xyXG59O1xyXG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSwgYWN0aW9uQ3JlYXRvciA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciA9IG9wdGlvbnMubWF0Y2hlciwgcHJlZGljYXRlID0gb3B0aW9ucy5wcmVkaWNhdGUsIGVmZmVjdCA9IG9wdGlvbnMuZWZmZWN0O1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICAgICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IG1hdGNoZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcclxuICAgIH1cclxuICAgIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xyXG4gICAgcmV0dXJuIHsgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHR5cGU6IHR5cGUsIGVmZmVjdDogZWZmZWN0IH07XHJcbn07XHJcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGUsIGVmZmVjdCA9IF9jLmVmZmVjdDtcclxuICAgIHZhciBpZCA9IG5hbm9pZCgpO1xyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBlZmZlY3Q6IGVmZmVjdCxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgIHBlbmRpbmc6IG5ldyBTZXQoKSxcclxuICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGxpc3RlbmVyTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHNhZmVseU5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59O1xyXG52YXIgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvYWRkXCIpO1xyXG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlQWxsXCIpO1xyXG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlXCIpO1xyXG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgX19zcHJlYWRBcnJheShbYWxtICsgXCIvZXJyb3JcIl0sIGFyZ3MpKTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlKG1pZGRsZXdhcmVPcHRpb25zKSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKG1pZGRsZXdhcmVPcHRpb25zID09PSB2b2lkIDApIHsgbWlkZGxld2FyZU9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGxpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdmFyIGV4dHJhID0gbWlkZGxld2FyZU9wdGlvbnMuZXh0cmEsIF9jID0gbWlkZGxld2FyZU9wdGlvbnMub25FcnJvciwgb25FcnJvciA9IF9jID09PSB2b2lkIDAgPyBkZWZhdWx0RXJyb3JIYW5kbGVyIDogX2M7XHJcbiAgICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCBcIm9uRXJyb3JcIik7XHJcbiAgICB2YXIgaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICBlbnRyeS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7IH07XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxPcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKGNvbXBhcmF0b3IpIHtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH07XHJcbiAgICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChleGlzdGluZ0VudHJ5KSB7IHJldHVybiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3Q7IH0pO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgfTtcclxuICAgIHZhciBzdG9wTGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgZWZmZWN0ID0gX2MuZWZmZWN0LCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGU7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGVudHJ5Mikge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkyLmVmZmVjdCA9PT0gZWZmZWN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG5vdGlmeUxpc3RlbmVyID0gZnVuY3Rpb24gKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgeyByZXR1cm4gX19hc3luYyhfdGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnRlcm5hbFRhc2tDb250cm9sbGVyLCB0YWtlLCBhdXRvSm9pblByb21pc2VzLCBsaXN0ZW5lckVycm9yXzE7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBhdXRvSm9pblByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgMywgNCwgNl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmVzb2x2ZShlbnRyeS5lZmZlY3QoYWN0aW9uLCBhc3NpZ24oe30sIGFwaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZTogZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gdGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpLnRoZW4oQm9vbGVhbik7IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiB0YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZTogZW50cnkudW5zdWJzY3JpYmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIsIF8sIHNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gaW50ZXJuYWxUYXNrQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA2XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEobGlzdGVuZXJFcnJvcl8xIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3JfMSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkQnk6IFwiZWZmZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcyldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgdmFyIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xyXG4gICAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoYXBpKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmICghaXNBY3Rpb24oYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgZ2V0T3JpZ2luYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsbSArIFwiOiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaXN0ZW5lckVudHJpZXNfMSA9IGxpc3RlbmVyRW50cmllczsgX2kgPCBsaXN0ZW5lckVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsaXN0ZW5lckVudHJpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZSxcclxuICAgICAgICBzdGFydExpc3RlbmluZzogc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgICAgc3RvcExpc3RlbmluZzogc3RvcExpc3RlbmluZyxcclxuICAgICAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2F1dG9CYXRjaEVuaGFuY2VyLnRzXHJcbnZhciBTSE9VTERfQVVUT0JBVENIID0gXCJSVEtfYXV0b0JhdGNoXCI7XHJcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAocGF5bG9hZCkge1xyXG4gICAgdmFyIF9jO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiAoX2MgPSB7fSwgX2NbU0hPVUxEX0FVVE9CQVRDSF0gPSB0cnVlLCBfYylcclxuICAgIH0pO1xyXG59OyB9O1xyXG52YXIgcHJvbWlzZTtcclxudmFyIHF1ZXVlTWljcm90YXNrU2hpbSA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gXCJmdW5jdGlvblwiID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IGdsb2JhbFRoaXMpIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSkudGhlbihjYikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICB0aHJvdyBlcnI7XHJcbn0sIDApOyB9KTsgfTtcclxudmFyIGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm90aWZ5KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHJBRiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMCk7XHJcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHR5cGU6IFwicmFmXCIgfTsgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdG9yZSA9IG5leHQuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICB2YXIgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcclxuICAgICAgICB2YXIgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFza1NoaW0gOiBvcHRpb25zLnR5cGUgPT09IFwicmFmXCIgPyByQUYgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIHZhciBub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobCkgeyByZXR1cm4gbCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLCB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGxpc3RlbmVyMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZWRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTsgfTtcclxuICAgICAgICAgICAgICAgIHZhciB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh3cmFwcGVkTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcjIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyA9ICEoKF9hID0gYWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb24ubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hW1NIT1VMRF9BVVRPQkFUQ0hdKTtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTsgfTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmVuYWJsZUVTNSgpO1xyXG5leHBvcnQgeyBFbmhhbmNlckFycmF5LCBNaWRkbGV3YXJlQXJyYXksIFNIT1VMRF9BVVRPQkFUQ0gsIFRhc2tBYm9ydEVycm9yLCBhZGRMaXN0ZW5lciwgYXV0b0JhdGNoRW5oYW5jZXIsIGNsZWFyQWxsTGlzdGVuZXJzLCBjb25maWd1cmVTdG9yZSwgY3JlYXRlQWN0aW9uLCBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsIGNyZWF0ZUVudGl0eUFkYXB0ZXIsIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLCBkZWZhdWx0MiBhcyBjcmVhdGVOZXh0U3RhdGUsIGNyZWF0ZVJlZHVjZXIsIGNyZWF0ZVNlbGVjdG9yMiBhcyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVTbGljZSwgY3VycmVudDIgYXMgY3VycmVudCwgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLCBmcmVlemUsIGdldERlZmF1bHRNaWRkbGV3YXJlLCBnZXRUeXBlLCBpc0FjdGlvbiwgaXNBY3Rpb25DcmVhdG9yLCBpc0FsbE9mLCBpc0FueU9mLCBpc0FzeW5jVGh1bmtBY3Rpb24sIGlzRHJhZnQ0IGFzIGlzRHJhZnQsIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLCBpc0Z1bGZpbGxlZCwgaXNJbW11dGFibGVEZWZhdWx0LCBpc1BlbmRpbmcsIGlzUGxhaW4sIGlzUGxhaW5PYmplY3QsIGlzUmVqZWN0ZWQsIGlzUmVqZWN0ZWRXaXRoVmFsdWUsIG1pbmlTZXJpYWxpemVFcnJvciwgbmFub2lkLCBvcmlnaW5hbCwgcHJlcGFyZUF1dG9CYXRjaGVkLCByZW1vdmVMaXN0ZW5lciwgdW53cmFwUmVzdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4LXRvb2xraXQuZXNtLmpzLm1hcCIsICJcbnR5cGUgUmVxUGFyYW1zID0ge1trOnN0cmluZ106c3RyaW5nfXx1bmRlZmluZWQgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczpSZXFQYXJhbXMsXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCB8IHVuZGVmaW5lZCxcbiAgYXBpVXJsPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCB1cmwgPSAoYXBpVXJsIHx8IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9BUElVUkwpICsgcGF0aDtcbiAgLy9jb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCBcIiQxXCIpLCB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCArIChyZXFQYXJhbXMgPyAoJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhyZXFQYXJhbXMpKS50b1N0cmluZygpKSA6ICcnKSwge1xuICAgIC4uLihpbml0ID8gaW5pdCA6IHt9KSxcbiAgICAvL2hlYWRlcnM6IHsgLi4uKGluaXQ/LmhlYWRlcnMgfHwge30pLCAuLi5nZXRBdXRoSGVhZGVycygpIH1cbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsdXJlIGxvYWRpbmcgJHtyZXMudXJsfSB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICgke3Jlcy5zdGF0dXNUZXh0fSlgO1xuICAgIGNvbnNvbGUuZGlyKG1lc3NhZ2UpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpXG4gIH1cbiAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcixcbiAgICBwdWJsaWMgbnVtRWxlbWVudHM6IG51bWJlcixcbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyLFxuICAgIHB1YmxpYyB0b3RhbEVsZW1lbnRzOiBudW1iZXIsXG4gICAgcHVibGljIGVsZW1lbnRzOiBUW10sXG4gICAgcHVibGljIGZhY2V0RmllbGRzVG9Db3VudHM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIG51bWJlcj4+XG4gICkge31cblxuICBtYXA8TmV3VHlwZT4oZm46IChUKSA9PiBOZXdUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlPE5ld1R5cGU+KFxuICAgICAgdGhpcy5wYWdlLFxuICAgICAgdGhpcy5udW1FbGVtZW50cyxcbiAgICAgIHRoaXMudG90YWxQYWdlcyxcbiAgICAgIHRoaXMudG90YWxFbGVtZW50cyxcbiAgICAgIHRoaXMuZWxlbWVudHMubWFwKGZuKSxcbiAgICAgIHRoaXMuZmFjZXRGaWVsZHNUb0NvdW50c1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2luYXRlZDxSZXNUeXBlPihcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM/OiBSZXFQYXJhbXMsXG4gIGFwaVVybD86IHN0cmluZ1xuKTogUHJvbWlzZTxQYWdlPFJlc1R5cGU+PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHJlcVBhcmFtcywgYXBpVXJsKTtcblxuICByZXR1cm4gbmV3IFBhZ2U8UmVzVHlwZT4oXG5cdHJlcy5wYWdlIHx8IDAsXG5cdHJlcy5udW1FbGVtZW50cyB8fCAwLFxuXHRyZXMudG90YWxQYWdlcyB8fCAwLFxuXHRyZXMudG90YWxFbGVtZW50cyB8fCAwLFxuXHRyZXMuZWxlbWVudHMgfHwgW10sXG5cdHJlcy5mYWNldEZpZWxkc1RvQ291bnRzIHx8IG5ldyBNYXAoKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0PFJlc1R5cGU+KHBhdGg6IHN0cmluZywgcmVxUGFyYW1zPzpSZXFQYXJhbXMsIGFwaVVybD86IHN0cmluZyk6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHVuZGVmaW5lZCwgYXBpVXJsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvc3Q8UmVxVHlwZSwgUmVzVHlwZSA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zOiBSZXFQYXJhbXMsXG4gIGJvZHk6IFJlcVR5cGVcbik6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHV0PFJlcVR5cGUsIFJlc1R5cGUgPSBhbnk+KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczogUmVxUGFyYW1zLFxuICBib2R5OiBSZXFUeXBlXG4pOiBQcm9taXNlPFJlc1R5cGU+IHtcbiAgcmV0dXJuIHJlcXVlc3QocGF0aCwgcmVxUGFyYW1zLCB7XG4gICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuIiwgImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gIH1cblxuICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgIGlmIChpID4gMCkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICB9XG5cbiAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgfVxuXG4gIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXJsSm9pbigpIHtcbiAgdmFyIGlucHV0O1xuXG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB1cmxKb2luIGZyb20gXCJ1cmwtam9pblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvbWVTdGF0ZSB7XG4gIGJhbm5lclRleHQ6IHN0cmluZztcbiAgc3RhdHM6IFN0YXRzIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBTdGF0cyB7XG4gIG51bWJlck9mT250b2xvZ2llczogbnVtYmVyO1xuICBudW1iZXJPZkNsYXNzZXM6IG51bWJlcjtcbiAgbnVtYmVyT2ZQcm9wZXJ0aWVzOiBudW1iZXI7XG4gIG51bWJlck9mSW5kaXZpZHVhbHM6IG51bWJlcjtcbiAgbGFzdE1vZGlmaWVkOiBzdHJpbmc7XG59XG5jb25zdCBpbml0aWFsU3RhdGU6IEhvbWVTdGF0ZSA9IHtcbiAgc3RhdHM6IHVuZGVmaW5lZCxcbiAgYmFubmVyVGV4dDogXCJcIixcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdGF0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwiaG9tZV9zdGF0c1wiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXQ8U3RhdHM+KGBhcGkvdjIvc3RhdHNgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRCYW5uZXJUZXh0ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJob21lX2Jhbm5lclwiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiYmFubmVyLnR4dFwiKSk7XG4gICAgICByZXR1cm4gcmVzLnRleHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgaG9tZVNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcImhvbWVcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge30sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0U3RhdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxTdGF0cz4pID0+IHtcbiAgICAgICAgc3RhdGUuc3RhdHMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTdGF0cy5yZWplY3RlZCwgKHN0YXRlOiBIb21lU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnN0YXRzID0gaW5pdGlhbFN0YXRlLnN0YXRzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEJhbm5lclRleHQuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmJhbm5lclRleHQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRCYW5uZXJUZXh0LnJlamVjdGVkLCAoc3RhdGU6IEhvbWVTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuYmFubmVyVGV4dCA9IGluaXRpYWxTdGF0ZS5iYW5uZXJUZXh0O1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvbWVTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ2xhc3MgZnJvbSBcIi4uL21vZGVsL0NsYXNzXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBJbmRpdmlkdWFsIGZyb20gXCIuLi9tb2RlbC9JbmRpdmlkdWFsXCI7XG5pbXBvcnQgUHJvcGVydHkgZnJvbSBcIi4uL21vZGVsL1Byb3BlcnR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KG9iajogVCB8IFRbXSk6IFRbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9IGVsc2UgaWYgKG9iaikge1xuICAgIHJldHVybiBbb2JqXTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDU0KSkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5S2V5cyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCBrZXlBID0gYS5rZXkudG9VcHBlckNhc2UoKTtcbiAgY29uc3Qga2V5QiA9IGIua2V5LnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiBrZXlBID09PSBrZXlCID8gMCA6IGtleUEgPiBrZXlCID8gMSA6IC0xO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICBpZiAoXCJjbGlwYm9hcmRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiLCB0cnVlLCB0ZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWU6IGFueSkge1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSk6IEVudGl0eSB7XG4gIGNvbnN0IHR5cGVzID0gcHJvcGVydGllc1tcInR5cGVcIl0gfHwgW107XG4gIGlmICh0eXBlcy5pbmRleE9mKFwiY2xhc3NcIikgIT09IC0xKSByZXR1cm4gbmV3IENsYXNzKHByb3BlcnRpZXMpO1xuICBpZiAodHlwZXMuaW5kZXhPZihcInByb3BlcnR5XCIpICE9PSAtMSkgcmV0dXJuIG5ldyBQcm9wZXJ0eShwcm9wZXJ0aWVzKTtcbiAgaWYgKHR5cGVzLmluZGV4T2YoXCJpbmRpdmlkdWFsXCIpICE9PSAtMSkgcmV0dXJuIG5ldyBJbmRpdmlkdWFsKHByb3BlcnRpZXMpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVudGl0eSB0eXBlOiBcIiArIEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtc0NvcHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGxldCBuZXdLZXkgPSBrZXkuaW5jbHVkZXMoXCJfXCIpID8gdG9DYW1lbChrZXkpIDoga2V5O1xuICAgIC8vIHNwZWNpYWwgY2FzZXNcbiAgICBpZiAobmV3S2V5ID09PSBcIm9ib0lkXCIpIG5ld0tleSA9IFwiY3VyaWVcIjtcbiAgICBzZWFyY2hQYXJhbXNDb3B5LmFwcGVuZChuZXdLZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBzZWFyY2hQYXJhbXNDb3B5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbChzdHI6IHN0cmluZykge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLV9dW2Etel0pL2dpLCAoJDEpID0+IHtcbiAgICByZXR1cm4gJDEudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiLVwiLCBcIlwiKS5yZXBsYWNlKFwiX1wiLCBcIlwiKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVpZmllZDxUPiB7XG4gIHZhbHVlOiBUO1xuICBheGlvbXM6IGFueVtdIHwgbnVsbDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBheGlvbXM6IGFueVtdIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb248VD4oanNvbk5vZGU6IGFueSk6IFJlaWZpZWQ8VD5bXSB7XG4gICAgaWYgKCFqc29uTm9kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uTm9kZSkpIHtcbiAgICAgIGpzb25Ob2RlID0gW2pzb25Ob2RlXTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbk5vZGUubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlLnR5cGUpICYmXG4gICAgICAgIHZhbHVlLnR5cGUuaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZS52YWx1ZSwgdmFsdWUuYXhpb21zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXNNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5heGlvbXMgIT0gbnVsbDtcbiAgfVxuXG4gIC8vIENvbWJpbmUgYWxsIG9mIHRoZSBheGlvbXMgaW50byBvbmUgbWV0YWRhdGEgb2JqZWN0IGZvciB0aGUgcHJvcGVydHkuXG4gIC8vXG4gIC8vIG5vdGU6IFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgc2FtZSBwcm9wZXJ0eSBpcyByZWlmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhcbiAgLy8gZGlmZmVyZW50IG1ldGFkYXRhLCBpdCB3aWxsIGFsbCBiZSBjb21iaW5lZCBpbiB0aGUgVUkuIFdoZXRoZXIgdGhpcyBpc1xuICAvLyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgaXMgVEJELlxuICAvL1xuICBnZXRNZXRhZGF0YSgpOiBhbnkgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuYXhpb21zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGxldCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhheGlvbSkpIHtcbiAgICAgICAgbGV0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgbGV0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXG5cdFx0bGV0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRsZXQgbGFiZWwgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0eS5sYWJlbCApXG5cdFx0XHRpZihsYWJlbCAmJiBsYWJlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBsYWJlbFswXS52YWx1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldChpcmk6c3RyaW5nKTpMaW5rZWRFbnRpdHl8dW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cdH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCIge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBbXCJvbnRvbG9neVwiLCBcImNsYXNzXCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJdLmluZGV4T2YodHlwZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIlxuICAgIF0pXG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG5cdHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl1cbiAgICApO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKGxhYmVsID0+IGxhYmVsLnZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOlJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbaWRdKSlcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBUaGluZyBmcm9tIFwiLi9UaGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkgZXh0ZW5kcyBUaGluZyB7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc0RlZmluaW5nT250b2xvZ3lcIl0gPT09IHRydWU7XG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICB9XG5cbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGxldCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBsZXQgaGllcmFyY2hpY2FsUHJvcGVydGllcyA9IGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQcm9wZXJ0eVwiXVxuICAgICk7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcblxuICAgICAgbGV0IGxpbmtlZEVudGl0eSA9IHRoaXMuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQocHJlZGljYXRlKVxuICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIC8vcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCJcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGxldCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFzcyBleHRlbmRzIEVudGl0eSB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRpdmlkdWFsIGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSlcbiAgfVxuXG4gIGdldERpZmZlcmVudEZyb20oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaWZmZXJlbnRGcm9tXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldFNhbWVBcygpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzYW1lQXNcIl0pO1xuICB9XG5cbiAgZ2V0SW5kaXZpZHVhbFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZGZUeXBlczogYW55ID0gdGhpcy5nZXRSZGZUeXBlcygpO1xuXG4gICAgaWYgKCFyZGZUeXBlcyB8fCAhQXJyYXkuaXNBcnJheShyZGZUeXBlcykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmRmVHlwZXMuZmlsdGVyKFxuICAgICAgKHQ6IGFueSkgPT5cbiAgICAgICAgdCAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJlxuXHRcdCggKCEgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykgfHwgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpKVxuICAgICk7XG4gIH1cblxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4vRW50aXR5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb3BlcnR5IGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgVGhpbmcgZnJvbSBcIi4vVGhpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT250b2xvZ3kgZXh0ZW5kcyBUaGluZyB7XG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgbGV0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXSB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0T250b2xvZ3lQdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X3B1cmxcIl07XG4gIH1cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibWFpbGluZ19saXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSW5mb1wiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPVxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDcwMFwiKSB7XG4gICAgICAgIC8vIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGNvbnNpZGVyZWQgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmd1YWdlXCJdKTtcbiAgfVxuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW1wb3J0c0Zyb21cIl0pO1xuICB9XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IE11bHRpbWFwIGZyb20gXCJtdWx0aW1hcFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5cbi8qIFVuZmxhdHRlbnMgYSBsaXN0IG9mIGVudGl0aWVzIGludG86XG4gKlx0LSBBIGxpc3Qgb2Ygcm9vdCBlbnRpdGllc1xuICogXHQtIEEgbWFwcGluZyBvZiBVUkkgdG8gbGlzdCBvZiBjaGlsZCBlbnRpdGllc1xuICpcbiAqIFVzZWQgYnkgRW50aXR5VHJlZSBhbmQgRW50aXR5R3JhcGhcbiAqL1xuXG4gaW50ZXJmYWNlIFBhcmVudENoaWxkUmVsYXRpb24ge1xuXHRwYXJlbnQ6RW50aXR5LFxuXHRjaGlsZDpFbnRpdHlcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbFxuIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXh0cmFjdEVudGl0eUhpZXJhcmNoeShlbnRpdGllczogRW50aXR5W10pOiB7XG4gIHJvb3RFbnRpdGllczogRW50aXR5W107XG4gIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj47XG59IHtcbiAgbGV0IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj4gPSBuZXcgTXVsdGltYXAoKTtcblxuICBsZXQgdXJpVG9Ob2RlOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICB1cmlUb05vZGUuc2V0KGVudGl0eS5nZXRJcmkoKSwgZW50aXR5KTtcbiAgfVxuXG4gIGZvciAobGV0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgIGlmIChpc1RvcChlbnRpdHkuZ2V0SXJpKCkpKSBjb250aW51ZTtcblxuICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIGVudGl0eS5nZXRQYXJlbnRzKCkpIHtcblxuICAgICAgbGV0IHBhcmVudElyaSA9IHBhcmVudFJlbGF0aW9uLnZhbHVlO1xuICAgICAgbGV0IHBhcmVudEVudGl0eSA9IHVyaVRvTm9kZS5nZXQocGFyZW50SXJpKTtcblxuICAgICAgaWYgKGlzVG9wKHBhcmVudElyaSkpIGNvbnRpbnVlO1xuXG4gICAgICBpZighIChwYXJlbnRFbnRpdHkgaW5zdGFuY2VvZiBFbnRpdHkpKSB7XG5cdGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50UmVsYXRpb25Ub0NoaWxkLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnRcblxuICAgICAgaWYoZW50aXR5LmdldFR5cGUoKSA9PT0gJ2luZGl2aWR1YWwnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgaW5kaXZpZHVhbHMsIHRoZSBjaGlsZC0+cGFyZW50IHJlbGF0aW9uc2hpcCBpcyBhbHdheXNcblx0Ly8gcmRmOnR5cGUgYW5kIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHBhcmVudC0+Y2hpbGQgcmVsYXRpb25zaGlwLlxuXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZSdcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkID0gbnVsbFxuXG4gICAgICB9IGVsc2UgaWYoZW50aXR5LmdldFR5cGUoKSA9PSAnY2xhc3MnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgY2xhc3NlcywgdGhlIHJlbGF0aW9ucyBhcmUgcHJvdmlkZWQgaW4gdGhlIG1ldGFkYXRhLlxuXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCA9IFxuXHRcdHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ3BhcmVudFJlbGF0aW9uVG9DaGlsZCddIFxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsncGFyZW50UmVsYXRpb25Ub0NoaWxkJ11bMF07XG5cblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50ID0gXG5cdFx0cGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsnY2hpbGRSZWxhdGlvblRvUGFyZW50J10gXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydjaGlsZFJlbGF0aW9uVG9QYXJlbnQnXVswXTtcblxuICAgICAgfSBlbHNlIHtcblxuXHQvLyBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzLCB0aGVyZSBhcmUgbm8gcmVsYXRpb25zIHRvIHNob3cuXG5cdC8vIChpdCB3b3VsZCBhbHdheXMgYmUganVzdCBzdWJQcm9wZXJ0eU9mKVxuXHQvL1xuXG4gICAgICB9XG5cbiAgICAgIGxldCByZWxhdGlvbiA9IHtcblx0cGFyZW50OiBwYXJlbnRFbnRpdHksXG5cdGNoaWxkOiBlbnRpdHksXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCxcblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuc2V0KGVudGl0eS5nZXRJcmkoKSwgcmVsYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBicmVha0N5Y2xlcyA9IGZ1bmN0aW9uIChjdXJyZW50SXJpOnN0cmluZywgdmlzaXRlZElyaXM6IFNldDxzdHJpbmc+KSB7XG4gICAgdmlzaXRlZElyaXMuYWRkKGN1cnJlbnRJcmkpO1xuXG4gICAgbGV0IHBhcmVudFJlbGF0aW9ucyA9IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KGN1cnJlbnRJcmkpO1xuICAgIGlmIChwYXJlbnRSZWxhdGlvbnMpIHtcbiAgICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIHBhcmVudFJlbGF0aW9ucykge1xuICAgICAgICBpZiAodmlzaXRlZElyaXMuaGFzKHBhcmVudFJlbGF0aW9uLnBhcmVudC5nZXRJcmkoKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHNhdyB0aGlzIHBhcmVudCwgcmVtb3ZlIGl0XG5cdCAgY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5kZWxldGUoY3VycmVudElyaSwgcGFyZW50UmVsYXRpb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtDeWNsZXMocGFyZW50UmVsYXRpb24ucGFyZW50LmdldElyaSgpLCBuZXcgU2V0KHZpc2l0ZWRJcmlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gYnJlYWsgY3ljbGVzIHN0YXJ0aW5nIGZyb20gbGVhZiBlbnRpdGllc1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICBicmVha0N5Y2xlcyhlbnRpdHkuZ2V0SXJpKCksIG5ldyBTZXQoKSk7XG4gIH1cblxuICBsZXQgcGFyZW50VG9DaGlsZFJlbGF0aW9uczogTXVsdGltYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uPiA9IG5ldyBNdWx0aW1hcCgpO1xuXG4gIGZvcihsZXQgY2hpbGRJcmkgb2YgQXJyYXkuZnJvbShjaGlsZFRvUGFyZW50UmVsYXRpb25zLmtleXMoKSkpIHtcbiAgXHRsZXQgcmVsYXRpb25zID0gY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5nZXQoY2hpbGRJcmkpO1xuXHRmb3IobGV0IHIgb2YgcmVsYXRpb25zKSB7XG5cdFx0cGFyZW50VG9DaGlsZFJlbGF0aW9ucy5zZXQoci5wYXJlbnQuZ2V0SXJpKCksIHIpXG5cdH1cbiAgfVxuXG4gIGxldCByb290RW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICBpZiAoaXNUb3Aobm9kZS5nZXRJcmkoKSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KG5vZGUuZ2V0SXJpKCkpIHx8IFtdKS5sZW5ndGggPT09IDA7XG4gIH0pO1xuXG4gIHJldHVybiB7IHJvb3RFbnRpdGllcywgcGFyZW50VG9DaGlsZFJlbGF0aW9ucyB9O1xufVxuXG5mdW5jdGlvbiBpc1RvcChpcmkpIHtcbiAgcmV0dXJuIChcbiAgICBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUb3BPYmplY3RQcm9wZXJ0eVwiXG4gICk7XG59XG4iLCAiaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSBcIi4uLy4uLy4uL21vZGVsL09udG9sb2d5XCI7XG5pbXBvcnQgZXh0cmFjdEVudGl0eUhpZXJhcmNoeSBmcm9tIFwiLi9leHRyYWN0RW50aXR5SGllcmFyY2h5XCI7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJlZUZyb21FbnRpdGllcyhcbiAgZW50aXRpZXM6IEVudGl0eVtdLFxuICBwcmVmZXJyZWRSb290czogYm9vbGVhbixcbiAgb250b2xvZ3k6IE9udG9sb2d5XG4pOiB7IGFsbE5vZGVzOlRyZWVOb2RlW10sIHJvb3ROb2RlczogVHJlZU5vZGVbXTsgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6U2V0PHN0cmluZz4sIG5vZGVDaGlsZHJlbjogYW55IH0ge1xuICBsZXQgeyByb290RW50aXRpZXMsIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMgfSA9IGV4dHJhY3RFbnRpdHlIaWVyYXJjaHkoZW50aXRpZXMpO1xuXG4gIGNvbnNvbGUubG9nKCdyb290RW50aXRpZXMnKVxuICBjb25zb2xlLmRpcihyb290RW50aXRpZXMpXG4gIGNvbnNvbGUubG9nKCdwYXJlbnRUb0NoaWxkUmVsYXRpb25zJylcbiAgY29uc29sZS5kaXIocGFyZW50VG9DaGlsZFJlbGF0aW9ucylcblxuICBpZiAocHJlZmVycmVkUm9vdHMpIHtcbiAgICBsZXQgcHJlZmVycmVkID0gb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKTtcbiAgICBpZiAocHJlZmVycmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSBwcmVmZXJyZWQubWFwKFxuICAgICAgICAoaXJpKSA9PiBlbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmdldElyaSgpID09PSBpcmkpWzBdXG4gICAgICApO1xuICAgICAgcm9vdEVudGl0aWVzID0gcHJlZmVycmVkUm9vdEVudGl0aWVzLmZpbHRlcigoZW50aXR5KSA9PiAhIWVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFsbE5vZGVzOlRyZWVOb2RlW10gPSBbXVxuICBsZXQgbm9kZUNoaWxkcmVuOiBhbnkgPSB7fTtcbiAgbGV0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOlNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGxOb2RlczogYWxsTm9kZXMsXG4gICAgcm9vdE5vZGVzOiByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUocm9vdEVudGl0eSwgdW5kZWZpbmVkLCAwLCBudWxsLCBudWxsKVxuICAgICksXG4gICAgbm9kZUNoaWxkcmVuLFxuICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoXG4gICAgbm9kZTogRW50aXR5LFxuICAgIHBhcmVudDogVHJlZU5vZGUgfCB1bmRlZmluZWQsXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXIsXG4gICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsLFxuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbCxcbiAgKTogVHJlZU5vZGUge1xuICAgIGlmIChkZWJ1Z051bUl0ZXJhdGlvbnMgPiAxMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb2JhYmxlIGN5Y2xpYyB0cmVlIChjcmVhdGVUcmVlTm9kZSlcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBwYXJlbnRUb0NoaWxkUmVsYXRpb25zLmdldChub2RlLmdldElyaSgpKSB8fCBbXTtcblxuICAgIGNvbnN0IHRyZWVOb2RlOiBUcmVlTm9kZSA9IHtcbiAgICAgIGFic29sdXRlSWRlbnRpdHk6IHBhcmVudFxuICAgICAgICA/IHBhcmVudC5hYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyBub2RlLmdldElyaSgpXG4gICAgICAgIDogbm9kZS5nZXRJcmkoKSxcbiAgICAgIGlyaTogbm9kZS5nZXRJcmkoKSxcbiAgICAgIHRpdGxlOiBub2RlLmdldE5hbWUoKSxcbiAgICAgIGV4cGFuZGFibGU6IG5vZGUuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIGVudGl0eTogbm9kZSxcbiAgICAgIG51bURlc2NlbmRhbnRzOlxuICAgICAgICBub2RlLmdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCkgfHwgbm9kZS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkLFxuICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgfTtcblxuICAgIGFsbE5vZGVzLnB1c2godHJlZU5vZGUpXG5cbiAgICBub2RlQ2hpbGRyZW5bdHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eV0gPSBjaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUoY2hpbGROb2RlLmNoaWxkLCB0cmVlTm9kZSwgZGVidWdOdW1JdGVyYXRpb25zICsgMSwgY2hpbGROb2RlLnBhcmVudFJlbGF0aW9uVG9DaGlsZCwgY2hpbGROb2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudClcbiAgICApO1xuXG4gICAgaWYobm9kZS5oYXNDaGlsZHJlbigpICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuXHRhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5hZGQodHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJlZU5vZGU7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBjcmVhdGVBY3Rpb24sXG4gIGNyZWF0ZUFzeW5jVGh1bmssXG4gIGNyZWF0ZVNsaWNlLFxuICBQYXlsb2FkQWN0aW9uLFxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0LCBnZXRQYWdpbmF0ZWQsIFBhZ2UgfSBmcm9tIFwiLi4vLi4vYXBwL2FwaVwiO1xuaW1wb3J0IHsgbWFwVG9BcGlQYXJhbXMsIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tIFwiLi4vLi4vbW9kZWwvT250b2xvZ3lcIjtcbmltcG9ydCBjcmVhdGVUcmVlRnJvbUVudGl0aWVzIGZyb20gXCIuL2VudGl0aWVzL2NyZWF0ZVRyZWVGcm9tRW50aXRpZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPbnRvbG9naWVzU3RhdGUge1xuICBvbnRvbG9neTogT250b2xvZ3kgfCB1bmRlZmluZWQ7XG4gIGVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkO1xuICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZDogc3RyaW5nW107XG4gIG5vZGVDaGlsZHJlbjogYW55O1xuICByb290Tm9kZXM6IFRyZWVOb2RlW107XG4gIG9udG9sb2dpZXM6IE9udG9sb2d5W107XG4gIHRvdGFsT250b2xvZ2llczogbnVtYmVyO1xuICBlbnRpdGllczogRW50aXR5W107XG4gIHRvdGFsRW50aXRpZXM6IG51bWJlcjtcbiAgbG9hZGluZ09udG9sb2dpZXM6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdGllczogYm9vbGVhbjtcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogbnVtYmVyO1xuICBsb2FkaW5nT250b2xvZ3k6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdHk6IGJvb2xlYW47XG4gIGNsYXNzSW5zdGFuY2VzOiBQYWdlPEVudGl0eT4gfCBudWxsO1xuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgbWFudWFsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUm9vdHM6IGJvb2xlYW47XG4gIGRpc3BsYXlPYnNvbGV0ZTogYm9vbGVhbjtcbiAgZGlzcGxheVNpYmxpbmdzOiBib29sZWFuO1xuICBkaXNwbGF5Q291bnRzOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICBhYnNvbHV0ZUlkZW50aXR5OiBzdHJpbmc7IC8vIHRoZSBJUklzIG9mIHRoaXMgbm9kZSBhbmQgaXRzIGFuY2VzdG9ycyBkZWxpbWl0ZWQgYnkgYSA7XG4gIGlyaTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBlbnRpdHk6IEVudGl0eTtcbiAgbnVtRGVzY2VuZGFudHM6IG51bWJlcjtcbiAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOiBzdHJpbmcgfCBudWxsOyAvLyBpZiBhcHBsaWNhYmxlLCByZWxhdGlvbiBmcm9tIHRoZSBwYXJlbnQgbm9kZSB0byB0aGlzIG5vZGUgKGUuZy4gaGFzX3BhcnQpXG4gIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogc3RyaW5nIHwgbnVsbDsgLy8gaWYgYXBwbGljYWJsZSwgcmVsYXRpb24gZnJvbSB0aGlzIG5vZGUgdG8gdGhlIHBhcmVudCBub2RlIChlLmcuIHBhcnRfb2YpXG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogT250b2xvZ2llc1N0YXRlID0ge1xuICBvbnRvbG9neTogdW5kZWZpbmVkLFxuICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQ6IFtdLFxuICBub2RlQ2hpbGRyZW46IHt9LFxuICByb290Tm9kZXM6IFtdLFxuICBvbnRvbG9naWVzOiBbXSxcbiAgdG90YWxPbnRvbG9naWVzOiAwLFxuICBlbnRpdGllczogW10sXG4gIHRvdGFsRW50aXRpZXM6IDAsXG4gIGxvYWRpbmdPbnRvbG9naWVzOiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0aWVzOiBmYWxzZSxcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogMCxcbiAgbG9hZGluZ09udG9sb2d5OiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0eTogZmFsc2UsXG4gIGNsYXNzSW5zdGFuY2VzOiBudWxsLFxuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGZhbHNlLFxuICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIG1hbnVhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIHByZWZlcnJlZFJvb3RzOiBmYWxzZSxcbiAgZGlzcGxheU9ic29sZXRlOiBmYWxzZSxcbiAgZGlzcGxheVNpYmxpbmdzOiBmYWxzZSxcbiAgZGlzcGxheUNvdW50czogdHJ1ZSxcbiAgZXJyb3JNZXNzYWdlOiBcIlwiLFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0VHJlZUNvbnRlbnQgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3RyZWVfcmVzZXRfY29udGVudFwiKTtcbmV4cG9ydCBjb25zdCByZXNldFRyZWVTZXR0aW5ncyA9IGNyZWF0ZUFjdGlvbjx7XG4gIGVudGl0eVR5cGU6IHN0cmluZztcbiAgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHk7XG59PihcIm9udG9sb2dpZXNfdHJlZV9yZXNldF9zZXR0aW5nc1wiKTtcblxuZXhwb3J0IGNvbnN0IGVuYWJsZVByZWZlcnJlZFJvb3RzID0gY3JlYXRlQWN0aW9uKFxuICBcIm9udG9sb2dpZXNfcHJlZmVycmVkX2VuYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBkaXNhYmxlUHJlZmVycmVkUm9vdHMgPSBjcmVhdGVBY3Rpb24oXG4gIFwib250b2xvZ2llc19wcmVmZXJyZWRfZGlzYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBvcGVuTm9kZSA9IGNyZWF0ZUFjdGlvbjxUcmVlTm9kZT4oXCJvbnRvbG9naWVzX25vZGVfb3BlblwiKTtcbmV4cG9ydCBjb25zdCBjbG9zZU5vZGUgPSBjcmVhdGVBY3Rpb248VHJlZU5vZGU+KFwib250b2xvZ2llc19ub2RlX2Nsb3NlXCIpO1xuXG5leHBvcnQgY29uc3Qgc2hvd09ic29sZXRlID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X29ic29sZXRlXCIpO1xuZXhwb3J0IGNvbnN0IGhpZGVPYnNvbGV0ZSA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfaGlkZV9vYnNvbGV0ZVwiKTtcblxuZXhwb3J0IGNvbnN0IHNob3dTaWJsaW5ncyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfc2hvd19zaWJsaW5nc1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlU2libGluZ3MgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX2hpZGVfc2libGluZ3NcIik7XG5cbmV4cG9ydCBjb25zdCBzaG93Q291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X2NvdW50c1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlQ291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19oaWRlX2NvdW50c1wiKTtcblxuZXhwb3J0IGNvbnN0IGdldE9udG9sb2d5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX29udG9sb2d5XCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgbGFuZyxcbiAgICAgIGFwaVVybCxcbiAgICB9OiB7IG9udG9sb2d5SWQ6IHN0cmluZzsgbGFuZzogc3RyaW5nOyBhcGlVcmw/OiBzdHJpbmcgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9udG9sb2d5UHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHsgbGFuZyB9LCBhcGlVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBPbnRvbG9neShvbnRvbG9neVByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlXaXRoVHlwZSA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdHlfdHlwZVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBlbnRpdHlJcmksXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfToge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5VHlwZTogc3RyaW5nO1xuICAgICAgZW50aXR5SXJpOiBzdHJpbmc7XG4gICAgICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgYXBpU2VhcmNoUGFyYW1zID0gbWFwVG9BcGlQYXJhbXMoc2VhcmNoUGFyYW1zKTtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybVVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpXG4gICAgKTtcbiAgICBsZXQgcGF0aCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBlbnRpdHlKc29uUHJvcGVydGllcyA9IG51bGw7XG4gICAgICBpZiAoZW50aXR5SXJpKSB7XG4gICAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFRlcm1Vcml9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBlbnRpdHlKc29uUHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIGFwaVNlYXJjaFBhcmFtc1xuICAgICAgICApfWA7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdHMuZWxlbWVudHMubGVuZ3RoID09PSAxICYmIHJlc3VsdHMudG90YWxFbGVtZW50cyA9PT0gMSkge1xuICAgICAgICAgIGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gcmVzdWx0cy5lbGVtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKFxuICAgICAgICAgICAgYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgUmV0cmlldmVkIG5vbmRpc3RpbmN0IGVudGl0eTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGVudGl0eUpzb25Qcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0RW50aXR5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eUlyaSxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBlbnRpdHlJcmk6IHN0cmluZztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFRlcm1VcmkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKVxuICAgICk7XG4gICAgbGV0IHBhdGggPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vZW50aXRpZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX1gO1xuICAgICAgY29uc3QgZW50aXR5SnNvblByb3BlcnRpZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoKTtcbiAgICAgIHJldHVybiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlbnRpdHlKc29uUHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldENsYXNzSW5zdGFuY2VzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eV9jbGFzc19pbnN0YW5jZXNcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBjbGFzc0lyaSxcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBjbGFzc0lyaTogc3RyaW5nO1xuICAgICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gICAgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgaWYgKGNsYXNzSXJpKSB7XG4gICAgICAgIGNvbnN0IGFwaVNlYXJjaFBhcmFtcyA9IG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc0lyaSlcbiAgICAgICAgKTtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX0vaW5zdGFuY2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBjb25zdCBpbnN0YW5jZXMgPSAoYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCkpLm1hcCgoaSkgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhpKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShcbiAgICAgICAgICBgV2FybmluZyBhY2Nlc3Npbmc6ICR7cGF0aH07IENsYXNzIElSSSBub3QgcHJvdmlkZWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldE9udG9sb2dpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfb250b2xvZ2llc1wiLFxuICBhc3luYyAoeyBwYWdlLCByb3dzUGVyUGFnZSwgc2VhcmNoIH06IGFueSwgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIGlmIChzZWFyY2gubGVuZ3RoID4gMSAmJiAhc2VhcmNoLmluY2x1ZGVzKFwiIFwiKSkgc2VhcmNoID0gXCIqXCIgKyBzZWFyY2ggKyBcIipcIjtcbiAgICBjb25zdCBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzP3BhZ2U9JHtwYWdlfSZzaXplPSR7cm93c1BlclBhZ2V9JHtcbiAgICAgIHNlYXJjaCA/IFwiJnNlYXJjaD1cIiArIHNlYXJjaCA6IFwiXCJcbiAgICB9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKSkubWFwKChvKSA9PiBuZXcgT250b2xvZ3kobykpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEVudGl0aWVzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0aWVzXCIsXG4gIGFzeW5jIChcbiAgICB7IG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhZ2UsIHJvd3NQZXJQYWdlLCBzZWFyY2ggfTogYW55LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/cGFnZT0ke3BhZ2V9JnNpemU9JHtyb3dzUGVyUGFnZX0ke1xuICAgICAgc2VhcmNoID8gXCImc2VhcmNoPVwiICsgc2VhcmNoIDogXCJcIlxuICAgIH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpKS5tYXAoKGUpID0+XG4gICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGUpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEFuY2VzdG9ycyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19hbmNlc3RvcnNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgZW50aXR5SXJpLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBhcGlVcmwsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBhbmNlc3RvcnNQYWdlOiBhbnk7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiKSB7XG4gICAgICBhbmNlc3RvcnNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHsgc2l6ZTogXCIxMDAwXCIsIGxhbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5jZXN0b3JzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFVyaX0vYW5jZXN0b3JzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7IHNpemU6IFwiMTAwMFwiLCBsYW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcnNQYWdlLmVsZW1lbnRzLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgKTtcbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRSb290RW50aXRpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfcm9vdHNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIGFwaVVybCxcbiAgfTogYW55KSA9PiB7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY29uc3QgW2NsYXNzZXNXaXRoSW5kaXZpZHVhbHMsIG9ycGhhbmVkSW5kaXZpZHVhbHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICBoYXNJbmRpdmlkdWFsczogXCJ0cnVlXCIsXG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9KX1gLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhcGlVcmxcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vaW5kaXZpZHVhbHM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfSl9YCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgYXBpVXJsXG4gICAgICAgICksXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIHJvb3RUZXJtczogbnVsbCxcbiAgICAgICAgY2xhc3Nlc1dpdGhJbmRpdmlkdWFsczogY2xhc3Nlc1dpdGhJbmRpdmlkdWFscy5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG9ycGhhbmVkSW5kaXZpZHVhbHMuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmIHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGlzUHJlZmVycmVkUm9vdDogXCJ0cnVlXCIsXG4gICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgfSl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICByb290VGVybXM6IHJvb3RzUGFnZS5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgIH0pfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcm9vdFRlcm1zOiByb290c1BhZ2UuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgICBjbGFzc2VzV2l0aEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgICBvcnBoYW5lZEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0Tm9kZUNoaWxkcmVuID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX25vZGVfY2hpbGRyZW5cIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGVQbHVyYWwsXG4gICAgZW50aXR5SXJpLFxuICAgIGFic29sdXRlSWRlbnRpdHksXG4gICAgbGFuZyxcbiAgICBhcGlVcmwsXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBjaGlsZHJlblBhZ2U6IGFueTtcbiAgICBpZiAoZW50aXR5VHlwZVBsdXJhbCA9PT0gXCJjbGFzc2VzXCIpIHtcbiAgICAgIGNoaWxkcmVuUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFVyaX0vaGllcmFyY2hpY2FsQ2hpbGRyZW4/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGVQbHVyYWwgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9pbnN0YW5jZXM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZVBsdXJhbH0vJHtkb3VibGVFbmNvZGVkVXJpfS9jaGlsZHJlbj8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWJzb2x1dGVJZGVudGl0eSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblBhZ2UuZWxlbWVudHNcbiAgICAgICAgLm1hcCgob2JqOiBhbnkpID0+IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iaikpXG4gICAgICAgIC5tYXAoKHRlcm06IEVudGl0eSkgPT4ge1xuICAgICAgICAgIGxldCBwYXJlbnRob29kTWV0YWRhdGEgPVxuICAgICAgICAgICAgdGVybS5nZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhlbnRpdHlJcmkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IHRlcm0uZ2V0SXJpKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyB0ZXJtLmdldElyaSgpLFxuICAgICAgICAgICAgdGl0bGU6IHRlcm0uZ2V0TmFtZSgpLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdGVybS5oYXNDaGlsZHJlbigpLFxuICAgICAgICAgICAgZW50aXR5OiB0ZXJtLFxuICAgICAgICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgICAgICAgIHRlcm0uZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCB0ZXJtLmdldE51bURlc2NlbmRhbnRzKCksXG4gICAgICAgICAgICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6XG4gICAgICAgICAgICAgIChwYXJlbnRob29kTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnRob29kTWV0YWRhdGFbXCJwYXJlbnRSZWxhdGlvblRvQ2hpbGRcIl0/LlswXSkgfHxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpcbiAgICAgICAgICAgICAgKHBhcmVudGhvb2RNZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudGhvb2RNZXRhZGF0YVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXT8uWzBdKSB8fFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH1cbik7XG5cbmNvbnN0IG9udG9sb2dpZXNTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJvbnRvbG9naWVzXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2d5LmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248T250b2xvZ3k+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9neSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE9udG9sb2d5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9neS5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gaW5pdGlhbFN0YXRlLm9udG9sb2d5O1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eVdpdGhUeXBlLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RW50aXR5PikgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0eVdpdGhUeXBlLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5V2l0aFR5cGUucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGluaXRpYWxTdGF0ZS5lbnRpdHk7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHkuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHk+KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0RW50aXR5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5LnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBpbml0aWFsU3RhdGUuZW50aXR5O1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPEVudGl0eT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLmNsYXNzSW5zdGFuY2VzID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldENsYXNzSW5zdGFuY2VzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRDbGFzc0luc3RhbmNlcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5jbGFzc0luc3RhbmNlcyA9IGluaXRpYWxTdGF0ZS5jbGFzc0luc3RhbmNlcztcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRBbmNlc3RvcnMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRBbmNlc3RvcnMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHlbXT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbc3RhdGUuZW50aXR5ISwgLi4uYWN0aW9uLnBheWxvYWRdLFxuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgICBzdGF0ZS5vbnRvbG9neSFcbiAgICAgICAgICApO1xuICAgICAgICBzdGF0ZS5yb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IG5vZGVDaGlsZHJlbjtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMsXG4gICAgICAgICAgICAuLi5BcnJheS5mcm9tKGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0QW5jZXN0b3JzLnJlamVjdGVkLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXROb2RlQ2hpbGRyZW4uZnVsZmlsbGVkLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248e1xuICAgICAgICAgIGFic29sdXRlSWRlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBjaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICAgICAgfT5cbiAgICAgICkgPT4ge1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4uc3RhdGUubm9kZUNoaWxkcmVuLFxuICAgICAgICAgIFthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTogYWN0aW9uLnBheWxvYWQuY2hpbGRyZW4sXG4gICAgICAgIH07XG4gICAgICAgIHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLnB1c2goYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eSk7XG4gICAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucmVqZWN0ZWQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgKytzdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFJvb3RFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPGFueT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdFRlcm1zLCBjbGFzc2VzV2l0aEluZGl2aWR1YWxzLCBvcnBoYW5lZEluZGl2aWR1YWxzIH0gPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJvb3RUZXJtc1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5kaXIocm9vdFRlcm1zKTtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLihyb290VGVybXMgfHwgW10pLFxuICAgICAgICAgICAgICAuLi4oY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyB8fCBbXSksXG4gICAgICAgICAgICAgIC4uLihvcnBoYW5lZEluZGl2aWR1YWxzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgIHN0YXRlLm9udG9sb2d5IVxuICAgICAgICAgICk7XG5cbiAgICAgICAgc3RhdGUucm9vdE5vZGVzID0gcm9vdE5vZGVzO1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSBub2RlQ2hpbGRyZW47XG4gICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLFxuICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5yZWplY3RlZCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9naWVzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxPbnRvbG9neT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2dpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxPbnRvbG9naWVzID0gYWN0aW9uLnBheWxvYWQudG90YWxFbGVtZW50cztcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2dpZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRPbnRvbG9naWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ2llcyA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2dpZXMucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9naWVzID0gaW5pdGlhbFN0YXRlLm9udG9sb2dpZXM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9naWVzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxFbnRpdGllcyA9IGFjdGlvbi5wYXlsb2FkLnRvdGFsRWxlbWVudHM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdGllcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0aWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0gaW5pdGlhbFN0YXRlLmVudGl0aWVzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShyZXNldFRyZWVDb250ZW50LCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBbXTtcbiAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IHt9O1xuICAgICAgc3RhdGUucm9vdE5vZGVzID0gW107XG4gICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IFtdO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIHJlc2V0VHJlZVNldHRpbmdzLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBlbnRpdHlUeXBlOiBzdHJpbmc7IHNlbGVjdGVkRW50aXR5PzogRW50aXR5IH0+XG4gICAgICApID0+IHtcbiAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmXG4gICAgICAgICAgc3RhdGUub250b2xvZ3khLmdldFByZWZlcnJlZFJvb3RzKCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQuc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChsZXQgcm9vdCBvZiBzdGF0ZS5vbnRvbG9neSEuZ2V0UHJlZmVycmVkUm9vdHMoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5zZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgICAgIC5nZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKHJvb3QpICE9PSAtMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cykge1xuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZGlzcGxheU9ic29sZXRlID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmRpc3BsYXlTaWJsaW5ncyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5kaXNwbGF5Q291bnRzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gW107XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZW5hYmxlUHJlZmVycmVkUm9vdHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGRpc2FibGVQcmVmZXJyZWRSb290cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHNob3dPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGhpZGVPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShzaG93U2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlU2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2Uoc2hvd0NvdW50cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlDb3VudHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlQ291bnRzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheUNvdW50cyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIG9wZW5Ob2RlLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxUcmVlTm9kZT4pID0+IHtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyxcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGNsb3NlTm9kZSxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248VHJlZU5vZGU+KSA9PiB7XG4gICAgICAgIHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHlcbiAgICAgICAgKTtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPVxuICAgICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlICE9PSBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgZGVsZXRlIHN0YXRlLm5vZGVDaGlsZHJlblthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTtcbiAgICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5maWx0ZXIoXG4gICAgICAgICAgKGFic0lkKSA9PiBhYnNJZCAhPT0gYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgb250b2xvZ2llc1NsaWNlLnJlZHVjZXI7XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0UGFnaW5hdGVkLCBQYWdlIH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB7IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hTdGF0ZSB7XG4gIHNlYXJjaFJlc3VsdHM6IEVudGl0eVtdO1xuICBsb2FkaW5nU2VhcmNoUmVzdWx0czogYm9vbGVhbjtcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiBudW1iZXI7XG4gIGZhY2V0czogT2JqZWN0O1xufVxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWFyY2hTdGF0ZSA9IHtcbiAgc2VhcmNoUmVzdWx0czogW10sXG4gIGxvYWRpbmdTZWFyY2hSZXN1bHRzOiBmYWxzZSxcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiAwLFxuICBmYWNldHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUmVzdWx0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwic2VhcmNoX3Jlc3VsdHNcIixcbiAgYXN5bmMgKFxuICAgIHsgcGFnZSwgcm93c1BlclBhZ2UsIHNlYXJjaCwgb250b2xvZ3lJZCwgdHlwZSwgc2VhcmNoUGFyYW1zIH06IGFueSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnkgPSB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoLFxuICAgICAgICBzaXplOiByb3dzUGVyUGFnZSxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgZmFjZXRGaWVsZHM6IFwib250b2xvZ3lJZCB0eXBlXCIsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQubGVuZ3RoID4gMCA/IG9udG9sb2d5SWRbMF0gOiBudWxsLFxuICAgICAgICB0eXBlOiB0eXBlLmxlbmd0aCA+IDAgPyB0eXBlWzBdIDogbnVsbCxcbiAgICAgICAgLy8gbGFuZzogXCJhbGxcIixcblxuICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoc2VhcmNoUGFyYW1zIGFzIFVSTFNlYXJjaFBhcmFtcyksXG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBxdWVyeSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcXVlcnlbcGFyYW1dID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IG51bGwgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IFwiXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5W3BhcmFtXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgcGFyYW1ldGVyc1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSkge1xuICAgICAgICBwYXJzZWRRdWVyeS5zZXQoXCJvbnRvbG9neUlkXCIsIHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSk7XG4gICAgICAgIHBhcnNlZFF1ZXJ5LmRlbGV0ZShcIm9udG9sb2d5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJxXCIpKSBwYXJzZWRRdWVyeS5kZWxldGUoXCJxXCIpO1xuXG4gICAgICBjb25zdCBkYXRhID0gKFxuICAgICAgICBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihgYXBpL3YyL2VudGl0aWVzPyR7cGFyc2VkUXVlcnl9YClcbiAgICAgICkubWFwKChlKSA9PiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlKSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3Qgc2VhcmNoU2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6IFwic2VhcmNoXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFNlYXJjaFJlc3VsdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBTZWFyY2hTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGFjdGlvbi5wYXlsb2FkLmVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS50b3RhbFNlYXJjaFJlc3VsdHMgPSBhY3Rpb24ucGF5bG9hZC50b3RhbEVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS5mYWNldHMgPSBhY3Rpb24ucGF5bG9hZC5mYWNldEZpZWxkc1RvQ291bnRzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFNlYXJjaFJlc3VsdHMucGVuZGluZywgKHN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTZWFyY2hSZXN1bHRzLnJlamVjdGVkLCAoc3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGluaXRpYWxTdGF0ZS5zZWFyY2hSZXN1bHRzO1xuICAgICAgc3RhdGUuZmFjZXRzID0gaW5pdGlhbFN0YXRlLmZhY2V0cztcbiAgICB9KTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWFyY2hTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IGNvbmZpZ3VyZVN0b3JlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCBob21lUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvaG9tZS9ob21lU2xpY2VcIjtcbmltcG9ydCBvbnRvbG9naWVzUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2VcIjtcbmltcG9ydCBzZWFyY2hSZWR1Y2VyIGZyb20gJy4uL3BhZ2VzL3NlYXJjaC9zZWFyY2hTbGljZSc7XG5cbmV4cG9ydCBjb25zdCBzdG9yZSA9IGNvbmZpZ3VyZVN0b3JlKHtcbiAgcmVkdWNlcjoge1xuICAgIGhvbWU6IGhvbWVSZWR1Y2VyLFxuICAgIHNlYXJjaDogc2VhcmNoUmVkdWNlcixcbiAgICBvbnRvbG9naWVzOiBvbnRvbG9naWVzUmVkdWNlcixcbiAgfSxcbiAgbWlkZGxld2FyZTogKGdldERlZmF1bHRNaWRkbGV3YXJlKSA9PlxuICAgIGdldERlZmF1bHRNaWRkbGV3YXJlKHtcbiAgICAgIHNlcmlhbGl6YWJsZUNoZWNrOiBmYWxzZSxcbiAgICB9KSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSb290U3RhdGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzdG9yZS5nZXRTdGF0ZT47XG5leHBvcnQgdHlwZSBBcHBEaXNwYXRjaCA9IHR5cGVvZiBzdG9yZS5kaXNwYXRjaDtcbiIsICJpbXBvcnQgeyBUaGVtZVByb3ZpZGVyIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIFJhZGlvLFxuICBSYWRpb0dyb3VwLFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL2hvb2tzXCI7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvbXVpXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL05vZGVcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uLy4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9PbnRvbG9neVwiO1xuaW1wb3J0IHtcbiAgVHJlZU5vZGUsXG4gIGNsb3NlTm9kZSxcbiAgZGlzYWJsZVByZWZlcnJlZFJvb3RzLFxuICBlbmFibGVQcmVmZXJyZWRSb290cyxcbiAgZ2V0QW5jZXN0b3JzLFxuICBnZXROb2RlQ2hpbGRyZW4sXG4gIGdldFJvb3RFbnRpdGllcyxcbiAgaGlkZUNvdW50cyxcbiAgaGlkZU9ic29sZXRlLFxuICBoaWRlU2libGluZ3MsXG4gIG9wZW5Ob2RlLFxuICByZXNldFRyZWVDb250ZW50LFxuICByZXNldFRyZWVTZXR0aW5ncyxcbiAgc2hvd0NvdW50cyxcbiAgc2hvd09ic29sZXRlLFxuICBzaG93U2libGluZ3MsXG59IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRW50aXR5VHJlZSh7XG4gIG9udG9sb2d5LFxuICBlbnRpdHlUeXBlLFxuICBzZWxlY3RlZEVudGl0eSxcbiAgbGFuZyxcbiAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgYXBpVXJsLFxufToge1xuICBvbnRvbG9neTogT250b2xvZ3k7XG4gIHNlbGVjdGVkRW50aXR5PzogRW50aXR5O1xuICBlbnRpdHlUeXBlOiBcImVudGl0aWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiO1xuICBsYW5nOiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eTogKG9udG9sb2d5OiBPbnRvbG9neSwgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGVUb09udG9sb2d5OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgYXBpVXJsPzogc3RyaW5nO1xufSkge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkXG4gICk7XG4gIGNvbnN0IG5vZGVDaGlsZHJlbiA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5ub2RlQ2hpbGRyZW4pO1xuICBjb25zdCByb290Tm9kZXMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMucm9vdE5vZGVzKTtcbiAgY29uc3QgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5udW1QZW5kaW5nVHJlZVJlcXVlc3RzXG4gICk7XG4gIGNvbnN0IHByZWZlcnJlZFJvb3RzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLnByZWZlcnJlZFJvb3RzXG4gICk7XG4gIGNvbnN0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gICk7XG4gIGNvbnN0IG1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5tYW51YWxseUV4cGFuZGVkTm9kZXNcbiAgKTtcblxuICBjb25zdCBzaG93T2Jzb2xldGVFbmFibGVkID0gc2VsZWN0ZWRFbnRpdHlcbiAgICA/IHNlbGVjdGVkRW50aXR5LmlzRGVwcmVjYXRlZCgpXG4gICAgOiB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheU9ic29sZXRlKTtcbiAgY29uc3Qgc2hvd1NpYmxpbmdzRW5hYmxlZCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5kaXNwbGF5U2libGluZ3NcbiAgKTtcbiAgY29uc3Qgc2hvd0NvdW50c0VuYWJsZWQgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheUNvdW50c1xuICApO1xuXG4gIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjayhcbiAgICAobm9kZTogYW55KSA9PiB7XG4gICAgICBsZXQgaXNFeHBhbmRlZCA9XG4gICAgICAgIG1hbnVhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKG5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09IC0xIHx8XG4gICAgICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2Yobm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT0gLTE7XG5cbiAgICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICAgIGRpc3BhdGNoKGNsb3NlTm9kZShub2RlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaChvcGVuTm9kZShub2RlKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBkaXNwYXRjaCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KG1hbnVhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgXVxuICApO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSBJUkksIG9yIGxhbmcgY2hhbmdlLCByZXNldCB0aGUgdHJlZSBzZXR0aW5ncyAoaW5jbHVkaW5nIHNob3dvYnNvbGV0ZS9wcmVmZXJyZWQgcm9vdHMpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVzZXRUcmVlU2V0dGluZ3MoeyBlbnRpdHlUeXBlLCBzZWxlY3RlZEVudGl0eSB9KSk7XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgZW50aXR5VHlwZSxcbiAgICBzZWxlY3RlZEVudGl0eT8uZ2V0SXJpKCksXG4gIF0pO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSwgbGFuZyBPUiB0aGUgc2hvd09ic29sZXRlRW5hYmxlZC9wcmVmZXJyZWRSb290cyBjaGFuZ2UsIHJlc2V0IHRoZSB0cmVlIGNvbnRlbnQgYnV0IG5vdCB0aGUgc2V0dGluZ3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChyZXNldFRyZWVDb250ZW50KCkpO1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIGVudGl0eVR5cGUsXG4gICAgSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRFbnRpdHkpLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlyaSA9IHNlbGVjdGVkRW50aXR5LmdldElyaSgpO1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0QW5jZXN0b3JzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZTogc2VsZWN0ZWRFbnRpdHkuZ2V0VHlwZVBsdXJhbCgpLFxuICAgICAgICAgIGVudGl0eUlyaSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0Um9vdEVudGl0aWVzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgYXBpVXJsLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiBwcm9taXNlLmFib3J0KCk7IC8vIGNvbXBvbmVudCB3YXMgdW5tb3VudGVkXG4gICAgfVxuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgZW50aXR5VHlwZSxcbiAgICBKU09OLnN0cmluZ2lmeShzZWxlY3RlZEVudGl0eSksXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgbm9kZXNNaXNzaW5nQ2hpbGRyZW46IHN0cmluZ1tdID0gbWFudWFsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgIChhYnNvbHV0ZUlkZW50aXR5KSA9PlxuICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICk7XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzRW5hYmxlZCkge1xuICAgICAgbm9kZXNNaXNzaW5nQ2hpbGRyZW4gPSBbXG4gICAgICAgIC4uLm5vZGVzTWlzc2luZ0NoaWxkcmVuLFxuICAgICAgICAuLi5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKGFic29sdXRlSWRlbnRpdHkpID0+XG4gICAgICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICBcIiEhISEgR2V0dGluZyBtaXNzaW5nIG5vZGUgY2hpbGRyZW46IFwiICtcbiAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkobm9kZXNNaXNzaW5nQ2hpbGRyZW4pXG4gICAgLy8gKTtcblxuICAgIGxldCBwcm9taXNlczogYW55ID0gW107XG4gICAgZm9yIChsZXQgYWJzSWQgb2Ygbm9kZXNNaXNzaW5nQ2hpbGRyZW4pIHtcbiAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGdldE5vZGVDaGlsZHJlbih7XG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICBlbnRpdHlUeXBlUGx1cmFsOiBzZWxlY3RlZEVudGl0eT8uZ2V0VHlwZVBsdXJhbCgpIHx8IGVudGl0eVR5cGUsIC8vIFRPRE86IHNob3VsZCBhY3R1YWxseSBiZSB0eXBlIG9mIGN1cnJlbnQgZW50aXR5IHdpdGggaXJpIGFic0lkLCBub3QgdHlwZSBvZiBzZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgZW50aXR5SXJpOiBhYnNJZC5zcGxpdChcIjtcIikucG9wKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNJZCxcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgICAgYXBpVXJsLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgcHJvbWlzZXMpIHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9O1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgbGFuZyxcbiAgICBKU09OLnN0cmluZ2lmeShtYW51YWxseUV4cGFuZGVkTm9kZXMpLFxuICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICBKU09OLnN0cmluZ2lmeShub2RlQ2hpbGRyZW4pLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgXSk7XG5cbiAgbGV0IHRvZ2dsZVNob3dPYnNvbGV0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvd09ic29sZXRlRW5hYmxlZCkgZGlzcGF0Y2goaGlkZU9ic29sZXRlKCkpO1xuICAgIGVsc2UgZGlzcGF0Y2goc2hvd09ic29sZXRlKCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNob3dPYnNvbGV0ZUVuYWJsZWRdKTtcblxuICBsZXQgdG9nZ2xlU2hvd1NpYmxpbmdzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93U2libGluZ3NFbmFibGVkKSBkaXNwYXRjaChoaWRlU2libGluZ3MoKSk7XG4gICAgZWxzZSBkaXNwYXRjaChzaG93U2libGluZ3MoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd1NpYmxpbmdzRW5hYmxlZF0pO1xuXG4gIGxldCB0b2dnbGVTaG93Q291bnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93Q291bnRzRW5hYmxlZCkgZGlzcGF0Y2goaGlkZUNvdW50cygpKTtcbiAgICBlbHNlIGRpc3BhdGNoKHNob3dDb3VudHMoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd0NvdW50c0VuYWJsZWRdKTtcblxuICBmdW5jdGlvbiByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgY2hpbGRyZW46IFRyZWVOb2RlW10sXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXJcbiAgKSB7XG4gICAgaWYgKGRlYnVnTnVtSXRlcmF0aW9ucyA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmFibGUgY3ljbGljIHRyZWUgKHJlbmRlck5vZGVDaGlsZHJlbilcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkcmVuQ29weSA9IFsuLi5jaGlsZHJlbl07XG4gICAgY2hpbGRyZW5Db3B5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlQSA9IGE/LnRpdGxlID8gYS50aXRsZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgY29uc3QgdGl0bGVCID0gYj8udGl0bGUgPyBiLnRpdGxlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA6IFwiXCI7XG4gICAgICByZXR1cm4gdGl0bGVBID09PSB0aXRsZUIgPyAwIDogdGl0bGVBID4gdGl0bGVCID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIGNvbnN0IGNoaWxkcmVuU29ydGVkID0gY2hpbGRyZW5Db3B5LmZpbHRlcihcbiAgICAgIChjaGlsZCwgaSwgYXJyKSA9PlxuICAgICAgICAhaSB8fCBjaGlsZC5hYnNvbHV0ZUlkZW50aXR5ICE9PSBhcnJbaSAtIDFdLmFic29sdXRlSWRlbnRpdHlcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8dWxcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgY2xhc3NOYW1lPVwianN0cmVlLWNvbnRhaW5lci11bCBqc3RyZWUtY2hpbGRyZW4ganN0cmVlLW5vLWljb25zXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVuU29ydGVkLm1hcCgoY2hpbGROb2RlOiBUcmVlTm9kZSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPVxuICAgICAgICAgICAgbWFudWFsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2YoY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHkpICE9PSAtMSB8fFxuICAgICAgICAgICAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihjaGlsZE5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09XG4gICAgICAgICAgICAgIC0xO1xuICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IGNoaWxkcmVuU29ydGVkIS5sZW5ndGggLSAxO1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9XG4gICAgICAgICAgICAoc2VsZWN0ZWRFbnRpdHkgJiYgY2hpbGROb2RlLmlyaSA9PT0gc2VsZWN0ZWRFbnRpdHkuZ2V0SXJpKCkpIHx8XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE5vZGVcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZT17Y2hpbGROb2RlLmV4cGFuZGFibGV9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtpc0V4cGFuZGVkfVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGVOb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTFcIlxuICAgICAgICAgICAgICAgICAgc3JjPXt1cmxKb2luKHByb2Nlc3MuZW52LlBVQkxJQ19VUkwhLCBcIi9wYXJ0LnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMVwiXG4gICAgICAgICAgICAgICAgICBzcmM9e3VybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiL2luc3RhbmNlLnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUcmVlTGlua1xuICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICBlbnRpdHk9e2NoaWxkTm9kZS5lbnRpdHl9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2NoaWxkTm9kZS50aXRsZX1cbiAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17b25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgeyFzaG93T2Jzb2xldGVFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgc2hvd0NvdW50c0VuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUubnVtRGVzY2VuZGFudHMgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAge1wiIChcIiArIGNoaWxkTm9kZS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpICsgXCIpXCJ9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzRXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBub2RlQ2hpbGRyZW5bY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHldIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgZGVidWdOdW1JdGVyYXRpb25zICsgMVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L05vZGU+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sLXJldmVyc2UgbGc6Z3JpZCBsZzpncmlkLWNvbHMtMyBsZzpnYXAtNFwiPlxuICAgICAgICB7cm9vdE5vZGVzID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGc6Y29sLXNwYW4tMiByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHBiLTMganN0cmVlIGpzdHJlZS0xIGpzdHJlZS1wcm90b24gb3ZlcmZsb3cteC1hdXRvXCJcbiAgICAgICAgICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cmVuZGVyTm9kZUNoaWxkcmVuKHJvb3ROb2RlcywgMCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtudW1QZW5kaW5nVHJlZVJlcXVlc3RzID4gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBzcGlubmVyLWRlZmF1bHQgdy03IGgtNyAtdG9wLTEgLWxlZnQtNCB6LWF1dG9cIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxnOmNvbC1zcGFuLTEgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSBweC0yIG1iLTIgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIHtlbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIiAmJlxuICAgICAgICAgICAgb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgPEZvcm1Db250cm9sPlxuICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJhZGlvLWJ1dHRvbnMtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJlZmVycmVkUm9vdHMgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKGVuYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByZWZlcnJlZCByb290c1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZGlzYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFsbCBjbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICA8L0Zvcm1Db250cm9sPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd09ic29sZXRlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXshc2hvd09ic29sZXRlRW5hYmxlZCAmJiBzaG93Q291bnRzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93Q291bnRzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IGNvdW50c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlU2hvd09ic29sZXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IG9ic29sZXRlIHRlcm1zXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzZWxlY3RlZEVudGl0eSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dTaWJsaW5nc0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93U2libGluZ3N9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD1cIlNob3cgYWxsIHNpYmxpbmdzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRyZWVMaW5rKHtcbiAgb250b2xvZ3ksXG4gIGVudGl0eSxcbiAgdGl0bGUsXG4gIGxhbmcsXG4gIG9uTmF2aWdhdGVUb0VudGl0eSxcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG59OiB7XG4gIG9udG9sb2d5OiBPbnRvbG9neTtcbiAgZW50aXR5OiBFbnRpdHk7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGxhbmc6IHN0cmluZztcbiAgb25OYXZpZ2F0ZVRvRW50aXR5OiAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xufSkge1xuICBsZXQgZGVmaW5lZEJ5OiBzdHJpbmdbXSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcblxuICBpZiAoZGVmaW5lZEJ5LmluZGV4T2Yob250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpKSAhPT0gLTEpIGRlZmluZWRCeSA9IFtdOyAvLyBkb24ndCBzaG93IGRlZmluZWRCeSBsaW5rcyBmb3IgdGVybXMgaW4gY3VycmVudCBvbnRvbG9neVxuXG4gIHJldHVybiAoXG4gICAgPHNwYW4+XG4gICAgICA8YVxuICAgICAgICB0aXRsZT17ZW50aXR5LmdldElyaSgpfVxuICAgICAgICBjbGFzc05hbWU9e1wibGluay1kZWZhdWx0XCJ9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neSwgZW50aXR5KX1cbiAgICAgID5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9hPlxuICAgICAge2RlZmluZWRCeS5sZW5ndGggPiAwICYmXG4gICAgICAgIGRlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25OYXZpZ2F0ZVRvT250b2xvZ3koZGVmaW5pbmdPbnRvbG9neSwgZW50aXR5KX1cbiAgICAgICAgICAgICAgdGl0bGU9e2RlZmluaW5nT250b2xvZ3kudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXgtMSBsaW5rLW9udG9sb2d5IHB4LTIgcHktMC41IHJvdW5kZWQtbWQgdGV4dC1zbSB0ZXh0LXdoaXRlIHVwcGVyY2FzZSBtbC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2RlZmluaW5nT250b2xvZ3l9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwgImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCAiY29uc3QgcmVkID0ge1xuICA1MDogJyNmZmViZWUnLFxuICAxMDA6ICcjZmZjZGQyJyxcbiAgMjAwOiAnI2VmOWE5YScsXG4gIDMwMDogJyNlNTczNzMnLFxuICA0MDA6ICcjZWY1MzUwJyxcbiAgNTAwOiAnI2Y0NDMzNicsXG4gIDYwMDogJyNlNTM5MzUnLFxuICA3MDA6ICcjZDMyZjJmJyxcbiAgODAwOiAnI2M2MjgyOCcsXG4gIDkwMDogJyNiNzFjMWMnLFxuICBBMTAwOiAnI2ZmOGE4MCcsXG4gIEEyMDA6ICcjZmY1MjUyJyxcbiAgQTQwMDogJyNmZjE3NDQnLFxuICBBNzAwOiAnI2Q1MDAwMCdcbn07XG5leHBvcnQgZGVmYXVsdCByZWQ7IiwgImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsICJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsICJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCAiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsICJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCAiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCAiZXhwb3J0IGRlZmF1bHQgJyQkbWF0ZXJpYWwnOyIsICJpbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmV4cG9ydCB7IGNzcywga2V5ZnJhbWVzLCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYm9yZGVycyB9IGZyb20gJy4vYm9yZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2JvcmRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBicmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyLCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wb3NlIH0gZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGlzcGxheSB9IGZyb20gJy4vZGlzcGxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsZXhib3ggfSBmcm9tICcuL2ZsZXhib3gnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGV4Ym94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ3JpZCB9IGZyb20gJy4vY3NzR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2Nzc0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYWxldHRlIH0gZnJvbSAnLi9wYWxldHRlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFsZXR0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvc2l0aW9ucyB9IGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhZG93cyB9IGZyb20gJy4vc2hhZG93cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNpemluZyB9IGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BhY2luZyB9IGZyb20gJy4vc3BhY2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3NwYWNpbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZSwgZ2V0UGF0aCwgZ2V0U3R5bGVWYWx1ZSB9IGZyb20gJy4vc3R5bGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBvZ3JhcGh5IH0gZnJvbSAnLi90eXBvZ3JhcGh5JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwb2dyYXBoeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCwgdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4LCBleHRlbmRTeFByb3AgYXMgdW5zdGFibGVfZXh0ZW5kU3hQcm9wLCB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiBpbiB2NlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGBleHBlcmltZW50YWxfc3hcXGAgaGFzIGJlZW4gbW92ZWQgdG8gXFxgdGhlbWUudW5zdGFibGVfc3hcXGAuRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNTE1MC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyMCkpO1xufVxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9nZXRUaGVtZVZhbHVlIH0gZnJvbSAnLi9nZXRUaGVtZVZhbHVlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm94IH0gZnJvbSAnLi9Cb3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCb3ggfSBmcm9tICcuL2NyZWF0ZUJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN0eWxlZCB9IGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVkIH0gZnJvbSAnLi9zdHlsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVUaGVtZSB9IGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCcmVha3BvaW50cyB9IGZyb20gJy4vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTcGFjaW5nIH0gZnJvbSAnLi9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhcGUgfSBmcm9tICcuL2NyZWF0ZVRoZW1lL3NoYXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVGhlbWVQcm9wcywgZ2V0VGhlbWVQcm9wcyB9IGZyb20gJy4vdXNlVGhlbWVQcm9wcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lIH0gZnJvbSAnLi91c2VUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lV2l0aG91dERlZmF1bHQgfSBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VNZWRpYVF1ZXJ5IH0gZnJvbSAnLi91c2VNZWRpYVF1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3JNYW5pcHVsYXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRoZW1lUHJvdmlkZXIgfSBmcm9tICcuL1RoZW1lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jcmVhdGVDc3NWYXJzUHJvdmlkZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3JlYXRlQ3NzVmFyc1Byb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlR2V0Q3NzVmFyIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUdldENzc1Zhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2Nzc1ZhcnNQYXJzZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3NzVmFyc1BhcnNlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3ByZXBhcmVDc3NWYXJzIH0gZnJvbSAnLi9jc3NWYXJzL3ByZXBhcmVDc3NWYXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlQ3NzVmFyc1RoZW1lIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUNzc1ZhcnNUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3BvbnNpdmVQcm9wVHlwZSB9IGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnRsUHJvdmlkZXIgfSBmcm9tICcuL1J0bFByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUnRsUHJvdmlkZXInO1xuXG4vKiogLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qKiBMYXlvdXQgY29tcG9uZW50cyAqL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lci9jcmVhdGVDb250YWluZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVuc3RhYmxlX0dyaWQgfSBmcm9tICcuL1Vuc3RhYmxlX0dyaWQvR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3RhYmxlX0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFjayB9IGZyb20gJy4vU3RhY2svU3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9TdGFjayc7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL2FwcGx5U3R5bGVzJztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBhcHBseVN0eWxlcztcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZXNcIiwgXCJ1bml0XCIsIFwic3RlcFwiXTtcbi8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbi8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbmV4cG9ydCBjb25zdCBicmVha3BvaW50S2V5cyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXTtcbmNvbnN0IHNvcnRCcmVha3BvaW50c1ZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzQXNBcnJheSA9IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKGtleSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWw6IHZhbHVlc1trZXldXG4gIH0pKSB8fCBbXTtcbiAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgYnJlYWtwb2ludHNBc0FycmF5LnNvcnQoKGJyZWFrcG9pbnQxLCBicmVha3BvaW50MikgPT4gYnJlYWtwb2ludDEudmFsIC0gYnJlYWtwb2ludDIudmFsKTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzQXNBcnJheS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoYnJlYWtwb2ludHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNvcnRlZFZhbHVlcyA9IHNvcnRCcmVha3BvaW50c1ZhbHVlcyh2YWx1ZXMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc29ydGVkVmFsdWVzKTtcbiAgZnVuY3Rpb24gdXAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBkb3duKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtYXgtd2lkdGg6JHt2YWx1ZSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0ga2V5cy5pbmRleE9mKGVuZCk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3R5cGVvZiB2YWx1ZXNbc3RhcnRdID09PSAnbnVtYmVyJyA/IHZhbHVlc1tzdGFydF0gOiBzdGFydH0ke3VuaXR9KSBhbmQgYCArIGAobWF4LXdpZHRoOiR7KGVuZEluZGV4ICE9PSAtMSAmJiB0eXBlb2YgdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5c1tlbmRJbmRleF1dIDogZW5kKSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIG9ubHkoa2V5KSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpICsgMSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiB1cChrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIG5vdChrZXkpIHtcbiAgICAvLyBoYW5kbGUgZmlyc3QgYW5kIGxhc3Qga2V5IHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICBjb25zdCBrZXlJbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChrZXlJbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVwKGtleXNbMV0pO1xuICAgIH1cbiAgICBpZiAoa2V5SW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGRvd24oa2V5c1trZXlJbmRleF0pO1xuICAgIH1cbiAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSkucmVwbGFjZSgnQG1lZGlhJywgJ0BtZWRpYSBub3QgYWxsIGFuZCcpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAga2V5cyxcbiAgICB2YWx1ZXM6IHNvcnRlZFZhbHVlcyxcbiAgICB1cCxcbiAgICBkb3duLFxuICAgIGJldHdlZW4sXG4gICAgb25seSxcbiAgICBub3QsXG4gICAgdW5pdFxuICB9LCBvdGhlcik7XG59IiwgImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiLCAiaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuICByZXR1cm4gZGVlcG1lcmdlKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBtZXJnZTsiLCAiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmltcG9ydCBtZW1vaXplIGZyb20gJy4vbWVtb2l6ZSc7XG5jb25zdCBwcm9wZXJ0aWVzID0ge1xuICBtOiAnbWFyZ2luJyxcbiAgcDogJ3BhZGRpbmcnXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgdDogJ1RvcCcsXG4gIHI6ICdSaWdodCcsXG4gIGI6ICdCb3R0b20nLFxuICBsOiAnTGVmdCcsXG4gIHg6IFsnTGVmdCcsICdSaWdodCddLFxuICB5OiBbJ1RvcCcsICdCb3R0b20nXVxufTtcbmNvbnN0IGFsaWFzZXMgPSB7XG4gIG1hcmdpblg6ICdteCcsXG4gIG1hcmdpblk6ICdteScsXG4gIHBhZGRpbmdYOiAncHgnLFxuICBwYWRkaW5nWTogJ3B5J1xufTtcblxuLy8gbWVtb2l6ZSgpIGltcGFjdDpcbi8vIEZyb20gMzAwLDAwMCBvcHMvc2VjXG4vLyBUbyAzNTAsMDAwIG9wcy9zZWNcbmNvbnN0IGdldENzc1Byb3BlcnRpZXMgPSBtZW1vaXplKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmV4cG9ydCBjb25zdCBtYXJnaW5LZXlzID0gWydtJywgJ210JywgJ21yJywgJ21iJywgJ21sJywgJ214JywgJ215JywgJ21hcmdpbicsICdtYXJnaW5Ub3AnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luWCcsICdtYXJnaW5ZJywgJ21hcmdpbklubGluZScsICdtYXJnaW5JbmxpbmVTdGFydCcsICdtYXJnaW5JbmxpbmVFbmQnLCAnbWFyZ2luQmxvY2snLCAnbWFyZ2luQmxvY2tTdGFydCcsICdtYXJnaW5CbG9ja0VuZCddO1xuZXhwb3J0IGNvbnN0IHBhZGRpbmdLZXlzID0gWydwJywgJ3B0JywgJ3ByJywgJ3BiJywgJ3BsJywgJ3B4JywgJ3B5JywgJ3BhZGRpbmcnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nWCcsICdwYWRkaW5nWScsICdwYWRkaW5nSW5saW5lJywgJ3BhZGRpbmdJbmxpbmVTdGFydCcsICdwYWRkaW5nSW5saW5lRW5kJywgJ3BhZGRpbmdCbG9jaycsICdwYWRkaW5nQmxvY2tTdGFydCcsICdwYWRkaW5nQmxvY2tFbmQnXTtcbmNvbnN0IHNwYWNpbmdLZXlzID0gWy4uLm1hcmdpbktleXMsIC4uLnBhZGRpbmdLZXlzXTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsIHRoZW1lS2V5LCBkZWZhdWx0VmFsdWUsIHByb3BOYW1lKSB7XG4gIHZhciBfZ2V0UGF0aDtcbiAgY29uc3QgdGhlbWVTcGFjaW5nID0gKF9nZXRQYXRoID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXksIGZhbHNlKSkgIT0gbnVsbCA/IF9nZXRQYXRoIDogZGVmYXVsdFZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhYnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBFeHBlY3RlZCAke3Byb3BOYW1lfSBhcmd1bWVudCB0byBiZSBhIG51bWJlciBvciBhIHN0cmluZywgZ290ICR7YWJzfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZyAqIGFicztcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRoZW1lU3BhY2luZykpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFicykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXJyYXkgdHlwZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBub24gaW50ZWdlciB2YWx1ZXMuYCArIGBZb3Ugc2hvdWxkIGVpdGhlciB1c2UgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGluZGV4LCBvciBkZWZpbmUgdGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFzIGEgbnVtYmVyLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiB0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAoJHthYnN9KSBvdmVyZmxvd3MuYCwgYFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeSh0aGVtZVNwYWNpbmcpfS5gLCBgJHthYnN9ID4gJHt0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMX0sIHlvdSBuZWVkIHRvIGFkZCB0aGUgbWlzc2luZyB2YWx1ZXMuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nW2Fic107XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGVtZVNwYWNpbmc7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgdmFsdWUgKCR7dGhlbWVTcGFjaW5nfSkgaXMgaW52YWxpZC5gLCAnSXQgc2hvdWxkIGJlIGEgbnVtYmVyLCBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiddLmpvaW4oJ1xcbicpKTtcbiAgfVxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSkge1xuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgcHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xuICB9XG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKHByb3BWYWx1ZSk7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtZXIoYWJzKTtcbiAgaWYgKHByb3BWYWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtZWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIC10cmFuc2Zvcm1lZDtcbiAgfVxuICByZXR1cm4gYC0ke3RyYW5zZm9ybWVkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKSB7XG4gIHJldHVybiBwcm9wVmFsdWUgPT4gY3NzUHJvcGVydGllcy5yZWR1Y2UoKGFjYywgY3NzUHJvcGVydHkpID0+IHtcbiAgICBhY2NbY3NzUHJvcGVydHldID0gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikge1xuICAvLyBVc2luZyBhIGhhc2ggY29tcHV0YXRpb24gb3ZlciBhbiBhcnJheSBpdGVyYXRpb24gY291bGQgYmUgZmFzdGVyLCBidXQgd2l0aCBvbmx5IDI4IGl0ZW1zLFxuICAvLyBpdCdzIGRvZXNuJ3Qgd29ydGggdGhlIGJ1bmRsZSBzaXplLlxuICBpZiAoa2V5cy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNzc1Byb3BlcnRpZXMgPSBnZXRDc3NQcm9wZXJ0aWVzKHByb3ApO1xuICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpO1xuICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG59XG5mdW5jdGlvbiBzdHlsZShwcm9wcywga2V5cykge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyhwcm9wcy50aGVtZSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKHByb3AgPT4gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikpLnJlZHVjZShtZXJnZSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHBhZGRpbmdLZXlzKTtcbn1cbnBhZGRpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHBhZGRpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnBhZGRpbmcuZmlsdGVyUHJvcHMgPSBwYWRkaW5nS2V5cztcbmZ1bmN0aW9uIHNwYWNpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBzcGFjaW5nS2V5cyk7XG59XG5zcGFjaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzcGFjaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5zcGFjaW5nLmZpbHRlclByb3BzID0gc3BhY2luZ0tleXM7XG5leHBvcnQgZGVmYXVsdCBzcGFjaW5nOyIsICJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwgImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCAiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGJvcmRlclRyYW5zZm9ybSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuZnVuY3Rpb24gY3JlYXRlQm9yZGVyU3R5bGUocHJvcCwgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBzdHlsZSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmV4cG9ydCBjb25zdCBib3JkZXIgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3AgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdENvbG9yJyk7XG5leHBvcnQgY29uc3Qgb3V0bGluZSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZUNvbG9yJyk7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gY29tcG9zZShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBib3JkZXJzOyIsICJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBnYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5nYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5nYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5nYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZ2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5nYXAuZmlsdGVyUHJvcHMgPSBbJ2dhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2NvbHVtbkdhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgY29sdW1uR2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuY29sdW1uR2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IHJvd0dhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLnJvd0dhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJvd0dhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdyb3dHYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIHJvd0dhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5yb3dHYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgcm93R2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbnJvd0dhcC5maWx0ZXJQcm9wcyA9IFsncm93R2FwJ107XG5leHBvcnQgY29uc3QgZ3JpZENvbHVtbiA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmV4cG9ydCBjb25zdCBncmlkUm93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFJvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvRmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvRmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVDb2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVBcmVhcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUFyZWFzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEFyZWEgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXJlYSdcbn0pO1xuY29uc3QgZ3JpZCA9IGNvbXBvc2UoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWQ7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdmFsdWVzIGFzIGJyZWFrcG9pbnRzVmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCB3aWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUyO1xuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZVtwcm9wVmFsdWVdKSB8fCBicmVha3BvaW50c1ZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5leHBvcnQgY29uc3QgbWluV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4SGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1pbkhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJveFNpemluZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gY29tcG9zZSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xuZXhwb3J0IGRlZmF1bHQgc2l6aW5nOyIsICJpbXBvcnQgeyBwYWRkaW5nLCBtYXJnaW4gfSBmcm9tICcuLi9zcGFjaW5nJztcbmltcG9ydCB7IGJvcmRlclJhZGl1cywgYm9yZGVyVHJhbnNmb3JtIH0gZnJvbSAnLi4vYm9yZGVycyc7XG5pbXBvcnQgeyBnYXAsIHJvd0dhcCwgY29sdW1uR2FwIH0gZnJvbSAnLi4vY3NzR3JpZCc7XG5pbXBvcnQgeyBwYWxldHRlVHJhbnNmb3JtIH0gZnJvbSAnLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBtYXhXaWR0aCwgc2l6aW5nVHJhbnNmb3JtIH0gZnJvbSAnLi4vc2l6aW5nJztcbmNvbnN0IGRlZmF1bHRTeENvbmZpZyA9IHtcbiAgLy8gYm9yZGVyc1xuICBib3JkZXI6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclRvcENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSaWdodENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyTGVmdENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBvdXRsaW5lQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJhZGl1czoge1xuICAgIHRoZW1lS2V5OiAnc2hhcGUuYm9yZGVyUmFkaXVzJyxcbiAgICBzdHlsZTogYm9yZGVyUmFkaXVzXG4gIH0sXG4gIC8vIHBhbGV0dGVcbiAgY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiZ2NvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIC8vIHNwYWNpbmdcbiAgcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYjoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBsOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHg6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBweToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmc6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nVG9wOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1JpZ2h0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0JvdHRvbToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdMZWZ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1g6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmU6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBtOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXI6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1iOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtbDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG15OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW46IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblRvcDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luUmlnaHQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJvdHRvbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luTGVmdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9jazoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIC8vIGRpc3BsYXlcbiAgZGlzcGxheVByaW50OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRyYW5zZm9ybTogdmFsdWUgPT4gKHtcbiAgICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICAgIGRpc3BsYXk6IHZhbHVlXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgZGlzcGxheToge30sXG4gIG92ZXJmbG93OiB7fSxcbiAgdGV4dE92ZXJmbG93OiB7fSxcbiAgdmlzaWJpbGl0eToge30sXG4gIHdoaXRlU3BhY2U6IHt9LFxuICAvLyBmbGV4Ym94XG4gIGZsZXhCYXNpczoge30sXG4gIGZsZXhEaXJlY3Rpb246IHt9LFxuICBmbGV4V3JhcDoge30sXG4gIGp1c3RpZnlDb250ZW50OiB7fSxcbiAgYWxpZ25JdGVtczoge30sXG4gIGFsaWduQ29udGVudDoge30sXG4gIG9yZGVyOiB7fSxcbiAgZmxleDoge30sXG4gIGZsZXhHcm93OiB7fSxcbiAgZmxleFNocmluazoge30sXG4gIGFsaWduU2VsZjoge30sXG4gIGp1c3RpZnlJdGVtczoge30sXG4gIGp1c3RpZnlTZWxmOiB7fSxcbiAgLy8gZ3JpZFxuICBnYXA6IHtcbiAgICBzdHlsZTogZ2FwXG4gIH0sXG4gIHJvd0dhcDoge1xuICAgIHN0eWxlOiByb3dHYXBcbiAgfSxcbiAgY29sdW1uR2FwOiB7XG4gICAgc3R5bGU6IGNvbHVtbkdhcFxuICB9LFxuICBncmlkQ29sdW1uOiB7fSxcbiAgZ3JpZFJvdzoge30sXG4gIGdyaWRBdXRvRmxvdzoge30sXG4gIGdyaWRBdXRvQ29sdW1uczoge30sXG4gIGdyaWRBdXRvUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHt9LFxuICBncmlkVGVtcGxhdGVSb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQXJlYXM6IHt9LFxuICBncmlkQXJlYToge30sXG4gIC8vIHBvc2l0aW9uc1xuICBwb3NpdGlvbjoge30sXG4gIHpJbmRleDoge1xuICAgIHRoZW1lS2V5OiAnekluZGV4J1xuICB9LFxuICB0b3A6IHt9LFxuICByaWdodDoge30sXG4gIGJvdHRvbToge30sXG4gIGxlZnQ6IHt9LFxuICAvLyBzaGFkb3dzXG4gIGJveFNoYWRvdzoge1xuICAgIHRoZW1lS2V5OiAnc2hhZG93cydcbiAgfSxcbiAgLy8gc2l6aW5nXG4gIHdpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogbWF4V2lkdGhcbiAgfSxcbiAgbWluV2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtaW5IZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBib3hTaXppbmc6IHt9LFxuICAvLyB0eXBvZ3JhcGh5XG4gIGZvbnRGYW1pbHk6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U3R5bGU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRXZWlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGxldHRlclNwYWNpbmc6IHt9LFxuICB0ZXh0VHJhbnNmb3JtOiB7fSxcbiAgbGluZUhlaWdodDoge30sXG4gIHRleHRBbGlnbjoge30sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFN4Q29uZmlnOyIsICIvKipcbiAqIEEgdW5pdmVyc2FsIHV0aWxpdHkgdG8gc3R5bGUgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIGNvbG9yIG1vZGVzLiBBbHdheXMgdXNlIGl0IGZyb20gdGhlIHRoZW1lIG9iamVjdC5cbiAqIEl0IHdvcmtzIHdpdGg6XG4gKiAgLSBbQmFzaWMgdGhlbWVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL2RhcmstbW9kZS8pXG4gKiAgLSBbQ1NTIHRoZW1lIHZhcmlhYmxlc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2V4cGVyaW1lbnRhbC1hcGkvY3NzLXRoZW1lLXZhcmlhYmxlcy9vdmVydmlldy8pXG4gKiAgLSBaZXJvLXJ1bnRpbWUgZW5naW5lXG4gKlxuICogVGlwczogVXNlIGFuIGFycmF5IG92ZXIgb2JqZWN0IHNwcmVhZCBhbmQgcGxhY2UgYHRoZW1lLmFwcGx5U3R5bGVzKClgIGxhc3QuXG4gKlxuICogXHUyNzA1IFt7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pXVxuICpcbiAqIFx1RDgzRFx1REVBQiB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JywgLi4udGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KX1cbiAqXG4gKiBAZXhhbXBsZVxuICogMS4gdXNpbmcgd2l0aCBgc3R5bGVkYDpcbiAqIGBgYGpzeFxuICogICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICB9KSxcbiAqICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMi4gdXNpbmcgd2l0aCBgc3hgIHByb3A6XG4gKiBgYGBqc3hcbiAqICAgPEJveCBzeD17dGhlbWUgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgIH0pLFxuICogICAgIF19XG4gKiAgIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMy4gdGhlbWluZyBhIGNvbXBvbmVudDpcbiAqIGBgYGpzeFxuICogICBleHRlbmRUaGVtZSh7XG4gKiAgICAgY29tcG9uZW50czoge1xuICogICAgICAgTXVpQnV0dG9uOiB7XG4gKiAgICAgICAgIHN0eWxlT3ZlcnJpZGVzOiB7XG4gKiAgICAgICAgICAgcm9vdDogKHsgdGhlbWUgfSkgPT4gW1xuICogICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICAgICAgICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgICAgICAgICB9KSxcbiAqICAgICAgICAgICBdLFxuICogICAgICAgICB9LFxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfSlcbiAqYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5U3R5bGVzKGtleSwgc3R5bGVzKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyAnYW55JyB0eXBlXG4gIGNvbnN0IHRoZW1lID0gdGhpcztcbiAgaWYgKHRoZW1lLnZhcnMgJiYgdHlwZW9mIHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBDc3NWYXJzUHJvdmlkZXIgaXMgdXNlZCBhcyBhIHByb3ZpZGVyLFxuICAgIC8vIHJldHVybnMgJyogOndoZXJlKFtkYXRhLW11aS1jb2xvci1zY2hlbWU9XCJsaWdodHxkYXJrXCJdKSAmJ1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcihrZXkpLnJlcGxhY2UoLyhcXFtbXlxcXV0rXFxdKS8sICcqOndoZXJlKCQxKScpO1xuICAgIHJldHVybiB7XG4gICAgICBbc2VsZWN0b3JdOiBzdHlsZXNcbiAgICB9O1xuICB9XG4gIGlmICh0aGVtZS5wYWxldHRlLm1vZGUgPT09IGtleSkge1xuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBudWxsKSB7XG4gIGNvbnN0IGNvbnRleHRUaGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInN4XCJdO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgdmFyIF9wcm9wcyR0aGVtZSR1bnN0YWJsZSwgX3Byb3BzJHRoZW1lO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc3lzdGVtUHJvcHM6IHt9LFxuICAgIG90aGVyUHJvcHM6IHt9XG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IChfcHJvcHMkdGhlbWUkdW5zdGFibGUgPSBwcm9wcyA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA6IGRlZmF1bHRTeENvbmZpZztcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGNvbmZpZ1twcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgc3g6IGluU3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIHN5c3RlbVByb3BzLFxuICAgIG90aGVyUHJvcHNcbiAgfSA9IHNwbGl0UHJvcHMob3RoZXIpO1xuICBsZXQgZmluYWxTeDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIHJlc3VsdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmaW5hbFN4ID0gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCAiY29uc3QgZGVmYXVsdEdlbmVyYXRvciA9IGNvbXBvbmVudE5hbWUgPT4gY29tcG9uZW50TmFtZTtcbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiLCAiZnVuY3Rpb24gcihlKXt2YXIgdCxmLG49XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpbis9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBvPWUubGVuZ3RoO2Zvcih0PTA7dDxvO3QrKyllW3RdJiYoZj1yKGVbdF0pKSYmKG4mJihuKz1cIiBcIiksbis9Zil9ZWxzZSBmb3IoZiBpbiBlKWVbZl0mJihuJiYobis9XCIgXCIpLG4rPWYpO3JldHVybiBufWV4cG9ydCBmdW5jdGlvbiBjbHN4KCl7Zm9yKHZhciBlLHQsZj0wLG49XCJcIixvPWFyZ3VtZW50cy5sZW5ndGg7ZjxvO2YrKykoZT1hcmd1bWVudHNbZl0pJiYodD1yKGUpKSYmKG4mJihuKz1cIiBcIiksbis9dCk7cmV0dXJuIG59ZXhwb3J0IGRlZmF1bHQgY2xzeDsiLCAiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3NlcyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgcmVhZE9ubHk6ICdyZWFkT25seScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgPyBgJHtnbG9iYWxTdGF0ZVByZWZpeH0tJHtnbG9iYWxTdGF0ZUNsYXNzfWAgOiBgJHtDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGUoY29tcG9uZW50TmFtZSl9LSR7c2xvdH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYmFsU3RhdGUoc2xvdCkge1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdICE9PSB1bmRlZmluZWQ7XG59IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKGNvbXBvbmVudE5hbWUsIHNsb3RzLCBnbG9iYWxTdGF0ZVByZWZpeCA9ICdNdWknKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBzbG90cy5mb3JFYWNoKHNsb3QgPT4ge1xuICAgIHJlc3VsdFtzbG90XSA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZ2V0RGlzcGxheU5hbWUgZnJvbSAnQG11aS91dGlscy9nZXREaXNwbGF5TmFtZSc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8IGlzUGxhaW5PYmplY3Qoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NhcGl0YWxpemUoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCgpO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzfHNsb3RzKSQvKSkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdLCBvdXRwdXRbcHJvcE5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c1Byb3BzfHNsb3RQcm9wcykkLykpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTbG90UHJvcHMgPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdIHx8IHt9O1xuICAgICAgY29uc3Qgc2xvdFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgaWYgKCFzbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKHNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRTbG90UHJvcHM7XG4gICAgICB9IGVsc2UgaWYgKCFkZWZhdWx0U2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgZGVmYXVsdCBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBzbG90UHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIHNsb3RQcm9wcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpLmZvckVhY2goc2xvdFByb3BOYW1lID0+IHtcbiAgICAgICAgICBvdXRwdXRbcHJvcE5hbWVdW3Nsb3RQcm9wTmFtZV0gPSByZXNvbHZlUHJvcHMoZGVmYXVsdFNsb3RQcm9wc1tzbG90UHJvcE5hbWVdLCBzbG90UHJvcHNbc2xvdFByb3BOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSIsICJpbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZW1lUHJvcHMocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghdGhlbWUgfHwgIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIHJldHVybiByZXNvbHZlUHJvcHModGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMsIHByb3BzKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgZ2V0VGhlbWVQcm9wcyBmcm9tICcuL2dldFRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZSxcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIGxldCB0aGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGlmICh0aGVtZUlkKSB7XG4gICAgdGhlbWUgPSB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbiAgfVxuICBjb25zdCBtZXJnZWRQcm9wcyA9IGdldFRoZW1lUHJvcHMoe1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uIG9mIGBSZWFjdC51c2VMYXlvdXRFZmZlY3RgIHRoYXQgZG9lcyBub3Qgc2hvdyBhIHdhcm5pbmcgd2hlbiBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZWZmZWN0cyB0aGF0IGFyZSBvbmx5IG5lZWRlZCBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIGJ1dCBub3QgZm9yIFNTUi5cbiAqXG4gKiBCZWZvcmUgeW91IHVzZSB0aGlzIGhvb2ssIG1ha2Ugc3VyZSB0byByZWFkIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dhZWFyb24vZTdkOTdjZGYzOGEyOTA3OTI0ZWExMmU0ZWJkZjNjODVcbiAqIGFuZCBjb25maXJtIGl0IGRvZXNuJ3QgYXBwbHkgdG8geW91ciB1c2UtY2FzZS5cbiAqL1xuY29uc3QgdXNlRW5oYW5jZWRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsICIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICB2YXIgX211aU5hbWUsIF9lbGVtZW50JHR5cGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZiggLy8gRm9yIHNlcnZlciBjb21wb25lbnRzIGBtdWlOYW1lYCBpcyBhdmFpYWxibGUgaW4gZWxlbWVudC50eXBlLl9wYXlsb2FkLnZhbHVlLm11aU5hbWVcbiAgLy8gcmVsZXZhbnQgaW5mbyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzI4MDdkNzgxYTA4ZGI4ZTk4NzM2ODdmY2NjMjVjMGYxMmI0ZmIzZDQvcGFja2FnZXMvcmVhY3Qvc3JjL1JlYWN0TGF6eS5qcyNMNDVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gIChfbXVpTmFtZSA9IGVsZW1lbnQudHlwZS5tdWlOYW1lKSAhPSBudWxsID8gX211aU5hbWUgOiAoX2VsZW1lbnQkdHlwZSA9IGVsZW1lbnQudHlwZSkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUuX3BheWxvYWQpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkdHlwZS5tdWlOYW1lKSAhPT0gLTE7XG59IiwgIi8qKlxuICogVE9ETyB2NTogY29uc2lkZXIgbWFraW5nIGl0IHByaXZhdGVcbiAqXG4gKiBwYXNzZXMge3ZhbHVlfSB0byB7cmVmfVxuICpcbiAqIFdBUk5JTkc6IEJlIHN1cmUgdG8gb25seSBjYWxsIHRoaXMgaW5zaWRlIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgYXMgYSByZWYuXG4gKiBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cyB7cmVmfSBpZiBpdCBjaGFuZ2VzLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNTM5XG4gKlxuICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgcmVmIG9mIGFuIGlubmVyIGNvbXBvbmVudCB0byB0aGUgcHVibGljIEFQSVxuICogd2hpbGUgc3RpbGwgdXNpbmcgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0gcmVmIEEgcmVmIGNhbGxiYWNrIG9yIHJlZiBvYmplY3QuIElmIGFueXRoaW5nIGZhbHN5LCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFJlZihyZWYsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59XG5cbi8vIGRvd25zdHJlYW0gYnVuZGxlcnMgbWF5IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb25jYXRlbmF0aW9uLCBidXQgd29uJ3QgcmVtb3ZlIHRvU3RyaW5nIGNhbGwgLS0gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTQ4MTRcbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcudG9TdHJpbmcoKV07XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlkKGlkT3ZlcnJpZGUpIHtcbiAgaWYgKG1heWJlUmVhY3RVc2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVhY3RJZCA9IG1heWJlUmVhY3RVc2VJZCgpO1xuICAgIHJldHVybiBpZE92ZXJyaWRlICE9IG51bGwgPyBpZE92ZXJyaWRlIDogcmVhY3RJZDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgLS0gYFJlYWN0LnVzZUlkYCBpcyBpbnZhcmlhbnQgYXQgcnVudGltZS5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzLCByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWQoe1xuICBjb250cm9sbGVkLFxuICBkZWZhdWx0OiBkZWZhdWx0UHJvcCxcbiAgbmFtZSxcbiAgc3RhdGUgPSAndmFsdWUnXG59KSB7XG4gIC8vIGlzQ29udHJvbGxlZCBpcyBpZ25vcmVkIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdHMgYXMgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt2YWx1ZVN0YXRlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZCA6IHZhbHVlU3RhdGU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0NvbnRyb2xsZWQgIT09IChjb250cm9sbGVkICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSAke2lzQ29udHJvbGxlZCA/ICcnIDogJ3VuJ31jb250cm9sbGVkICR7c3RhdGV9IHN0YXRlIG9mICR7bmFtZX0gdG8gYmUgJHtpc0NvbnRyb2xsZWQgPyAndW4nIDogJyd9Y29udHJvbGxlZC5gLCAnRWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuJywgYERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJHtuYW1lfSBgICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LicsIFwiVGhlIG5hdHVyZSBvZiB0aGUgc3RhdGUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gSXQncyBjb25zaWRlcmVkIGNvbnRyb2xsZWQgaWYgdGhlIHZhbHVlIGlzIG5vdCBgdW5kZWZpbmVkYC5cIiwgJ01vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW3N0YXRlLCBuYW1lLCBjb250cm9sbGVkXSk7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gICAgfSA9IFJlYWN0LnVzZVJlZihkZWZhdWx0UHJvcCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNDb250cm9sbGVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gZGVmYXVsdFByb3ApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgJHtzdGF0ZX0gc3RhdGUgb2YgYW4gdW5jb250cm9sbGVkICR7bmFtZX0gYWZ0ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIGAgKyBgVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIG9wdCB0byB1c2UgYSBjb250cm9sbGVkICR7bmFtZX0uYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtKU09OLnN0cmluZ2lmeShkZWZhdWx0UHJvcCldKTtcbiAgfVxuICBjb25zdCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkID0gUmVhY3QudXNlQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlSWZVbmNvbnRyb2xsZWRdO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91c2VFbmhhbmNlZEVmZmVjdCc7XG5cbi8qKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDA5OSNpc3N1ZWNvbW1lbnQtNDQwMDEzODkyXG4gKiBTZWUgUkZDIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8yMjBcbiAqL1xuXG5mdW5jdGlvbiB1c2VFdmVudENhbGxiYWNrKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihmbik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IGZuO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZVJlZigoLi4uYXJncykgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBoaWRlIGB0aGlzYFxuICAoMCwgcmVmLmN1cnJlbnQpKC4uLmFyZ3MpKS5jdXJyZW50O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2V0UmVmIGZyb20gJy4uL3NldFJlZic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JrUmVmKC4uLnJlZnMpIHtcbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gaWYgdGhlIHJlZnMgcGFzc2VkIHRvIHRoaXMgaG9vayBjaGFuZ2UgYW5kIGFyZSBhbGwgZGVmaW5lZC5cbiAgICogVGhpcyBtZWFucyByZWFjdCB3aWxsIGNhbGwgdGhlIG9sZCBmb3JrUmVmIHdpdGggYG51bGxgIGFuZCB0aGUgbmV3IGZvcmtSZWZcbiAgICogd2l0aCB0aGUgcmVmLiBDbGVhbnVwIG5hdHVyYWxseSBlbWVyZ2VzIGZyb20gdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmcy5ldmVyeShyZWYgPT4gcmVmID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlID0+IHtcbiAgICAgIHJlZnMuZm9yRWFjaChyZWYgPT4ge1xuICAgICAgICBzZXRSZWYocmVmLCBpbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgcmVmcyk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgd2l0aCBhIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgYWNjZXB0cyBhbiBvcHRpb25hbFxuICogaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gaW5saW5lIGNsb3N1cmUuXG4gKlxuICogQHVzYWdlXG4gKiAgIGNvbnN0IHJlZiA9IHVzZUxhenlSZWYoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxhenlSZWYoaW5pdCwgaW5pdEFyZykge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoVU5JTklUSUFMSVpFRCk7XG4gIGlmIChyZWYuY3VycmVudCA9PT0gVU5JTklUSUFMSVpFRCkge1xuICAgIHJlZi5jdXJyZW50ID0gaW5pdChpbml0QXJnKTtcbiAgfVxuICByZXR1cm4gcmVmO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IEVNUFRZID0gW107XG5cbi8qKlxuICogQSBSZWFjdC51c2VFZmZlY3QgZXF1aXZhbGVudCB0aGF0IHJ1bnMgb25jZSwgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU9uTW91bnQoZm4pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG4gIFJlYWN0LnVzZUVmZmVjdChmbiwgRU1QVFkpO1xuICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VMYXp5UmVmIGZyb20gJy4uL3VzZUxhenlSZWYvdXNlTGF6eVJlZic7XG5pbXBvcnQgdXNlT25Nb3VudCBmcm9tICcuLi91c2VPbk1vdW50L3VzZU9uTW91bnQnO1xuZXhwb3J0IGNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgdGhpcy5jbGVhciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRpc3Bvc2VFZmZlY3QgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcjtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBUaW1lb3V0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGBmbmAgYWZ0ZXIgYGRlbGF5YCwgY2xlYXJpbmcgYW55IHByZXZpb3VzbHkgc2NoZWR1bGVkIGNhbGwuXG4gICAqL1xuICBzdGFydChkZWxheSwgZm4pIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudElkID0gbnVsbDtcbiAgICAgIGZuKCk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gdXNlTGF6eVJlZihUaW1lb3V0LmNyZWF0ZSkuY3VycmVudDtcbiAgdXNlT25Nb3VudCh0aW1lb3V0LmRpc3Bvc2VFZmZlY3QpO1xuICByZXR1cm4gdGltZW91dDtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvdjQuMS41L3NyYy9mb2N1cy12aXNpYmxlLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vdXNlVGltZW91dC91c2VUaW1lb3V0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuY29uc3QgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG4gIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNXaGl0ZWxpc3RbdHlwZV0gJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG5cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKCkge1xuICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bihkb2MpIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH1cblxuICAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cbiAgcmV0dXJuIGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkodGFyZ2V0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQuc3RhcnQoMTAwLCAoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZlxuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaChcbiAgLy8gYE9iamVjdC5rZXlzKHNsb3RzKWAgY2FuJ3QgYmUgd2lkZXIgdGhhbiBgVGAgYmVjYXVzZSB3ZSBpbmZlciBgVGAgZnJvbSBgc2xvdHNgLlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9wdWxsLzEyMjUzI2lzc3VlY29tbWVudC0yNjMxMzIyMDhcbiAgc2xvdCA9PiB7XG4gICAgb3V0cHV0W3Nsb3RdID0gc2xvdHNbc2xvdF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB1dGlsaXR5Q2xhc3MgPSBnZXRVdGlsaXR5Q2xhc3Moa2V5KTtcbiAgICAgICAgaWYgKHV0aWxpdHlDbGFzcyAhPT0gJycpIHtcbiAgICAgICAgICBhY2MucHVzaCh1dGlsaXR5Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJzcGFjaW5nXCIsIFwiZGl2aWRlclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidXNlRmxleEdhcFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN5c3RlbVN0eWxlZCBmcm9tICcuLi9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHNTeXN0ZW0gZnJvbSAnLi4vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4uL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcsIGdldFZhbHVlIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbi8vIHdpZGVuaW5nIFRoZW1lIHRvIGFueSBzbyB0aGF0IHRoZSBjb25zdW1lciBjYW4gb3duIHRoZSB0aGVtZSBzdHJ1Y3R1cmUuXG5jb25zdCBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gc3lzdGVtU3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTdGFjaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSk7XG5mdW5jdGlvbiB1c2VUaGVtZVByb3BzRGVmYXVsdChwcm9wcykge1xuICByZXR1cm4gdXNlVGhlbWVQcm9wc1N5c3RlbSh7XG4gICAgcHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBkZWZhdWx0VGhlbWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIHNlcGFyYXRvciBSZWFjdCBlbGVtZW50IGludGVyc3BlcnNlZCBiZXR3ZWVuXG4gKiBlYWNoIFJlYWN0IG5vZGUgb2YgdGhlIGlucHV0IGNoaWxkcmVuLlxuICpcbiAqID4gam9pbkNoaWxkcmVuKFsxLDIsM10sIDApXG4gKiBbMSwwLDIsMCwzXVxuICovXG5mdW5jdGlvbiBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIHNlcGFyYXRvcikge1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY2hpbGRyZW5BcnJheS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuICAgIGlmIChpbmRleCA8IGNoaWxkcmVuQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgb3V0cHV0LnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoc2VwYXJhdG9yLCB7XG4gICAgICAgIGtleTogYHNlcGFyYXRvci0ke2luZGV4fWBcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW10pO1xufVxuY29uc3QgZ2V0U2lkZUZyb21EaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogJ0xlZnQnLFxuICAgICdyb3ctcmV2ZXJzZSc6ICdSaWdodCcsXG4gICAgY29sdW1uOiAnVG9wJyxcbiAgICAnY29sdW1uLXJldmVyc2UnOiAnQm90dG9tJ1xuICB9W2RpcmVjdGlvbl07XG59O1xuZXhwb3J0IGNvbnN0IHN0eWxlID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgbGV0IHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgfSwgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSksIHByb3BWYWx1ZSA9PiAoe1xuICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICB9KSkpO1xuICBpZiAob3duZXJTdGF0ZS5zcGFjaW5nKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpO1xuICAgIGNvbnN0IGJhc2UgPSBPYmplY3Qua2V5cyh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG93bmVyU3RhdGUuc3BhY2luZyA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5zcGFjaW5nW2JyZWFrcG9pbnRdICE9IG51bGwgfHwgdHlwZW9mIG93bmVyU3RhdGUuZGlyZWN0aW9uID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLmRpcmVjdGlvblticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGFjY1ticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuc3BhY2luZyxcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvblZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRpcmVjdGlvblZhbHVlcykuZm9yRWFjaCgoYnJlYWtwb2ludCwgaW5kZXgsIGJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlID0gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdO1xuICAgICAgICBpZiAoIWRpcmVjdGlvblZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNEaXJlY3Rpb25WYWx1ZSA9IGluZGV4ID4gMCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50c1tpbmRleCAtIDFdXSA6ICdjb2x1bW4nO1xuICAgICAgICAgIGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA9IHByZXZpb3VzRGlyZWN0aW9uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAob3duZXJTdGF0ZS51c2VGbGV4R2FwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVGhlIHVzZUZsZXhHYXA9e2ZhbHNlfSBpbXBsZW1lbnQgcmVsaWVzIG9uIGVhY2ggY2hpbGQgdG8gZ2l2ZSB1cCBjb250cm9sIG9mIHRoZSBtYXJnaW4uXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIG1hcmdpbiB0byBhdm9pZCBkb3VibGUgc3BhY2luZy5cbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKTpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9LFxuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpIH4gOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgW2BtYXJnaW4ke2dldFNpZGVGcm9tRGlyZWN0aW9uKGJyZWFrcG9pbnQgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gOiBvd25lclN0YXRlLmRpcmVjdGlvbil9YF06IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBzdHlsZXMgPSBkZWVwbWVyZ2Uoc3R5bGVzLCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHNwYWNpbmdWYWx1ZXMsIHN0eWxlRnJvbVByb3BWYWx1ZSkpO1xuICB9XG4gIHN0eWxlcyA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKHRoZW1lLmJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICByZXR1cm4gc3R5bGVzO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0YWNrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IGFkZGluZyBjdXN0b20gc3R5bGVkIGZuIChmb3IgZXhhbXBsZSBmb3IgY3VzdG9tIHN4IHN0eWxlIGZ1bmN0aW9uKVxuICAgIGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IGRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQsXG4gICAgdXNlVGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHNEZWZhdWx0LFxuICAgIGNvbXBvbmVudE5hbWUgPSAnTXVpU3RhY2snXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9ICgpID0+IHtcbiAgICBjb25zdCBzbG90cyA9IHtcbiAgICAgIHJvb3Q6IFsncm9vdCddXG4gICAgfTtcbiAgICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIHNsb3QgPT4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCksIHt9KTtcbiAgfTtcbiAgY29uc3QgU3RhY2tSb290ID0gY3JlYXRlU3R5bGVkQ29tcG9uZW50KHN0eWxlKTtcbiAgY29uc3QgU3RhY2sgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKGluUHJvcHMpO1xuICAgIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpOyAvLyBgY29sb3JgIHR5cGUgY29uZmxpY3RzIHdpdGggaHRtbCBjb2xvciBhdHRyaWJ1dGUuXG4gICAgY29uc3Qge1xuICAgICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgICAgZGlyZWN0aW9uID0gJ2NvbHVtbicsXG4gICAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgICBkaXZpZGVyLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB1c2VGbGV4R2FwID0gZmFsc2VcbiAgICAgIH0gPSBwcm9wcyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gICAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHNwYWNpbmcsXG4gICAgICB1c2VGbGV4R2FwXG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMoKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3RhY2tSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogZGl2aWRlciA/IGpvaW5DaGlsZHJlbihjaGlsZHJlbiwgZGl2aWRlcikgOiBjaGlsZHJlblxuICAgIH0pKTtcbiAgfSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSA6IHZvaWQgMDtcbiAgcmV0dXJuIFN0YWNrO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAgICdAbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJzoge1xuICAgICAgICAgIG1pbkhlaWdodDogNDhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFticmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgICAgbWluSGVpZ2h0OiA2NFxuICAgICAgfVxuICAgIH1cbiAgfSwgbWl4aW5zKTtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCAiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59XG5cbi8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCAiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIGZhYjogMTA1MCxcbiAgc3BlZWREaWFsOiAxMDUwLFxuICBhcHBCYXI6IDExMDAsXG4gIGRyYXdlcjogMTIwMCxcbiAgbW9kYWw6IDEzMDAsXG4gIHNuYWNrYmFyOiAxNDAwLFxuICB0b29sdGlwOiAxNTAwXG59O1xuZXhwb3J0IGRlZmF1bHQgekluZGV4OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHN5c3RlbVVzZVRoZW1lUHJvcHMgZnJvbSAnQG11aS9zeXN0ZW0vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlU3R5bGVkLCB7IHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCAiaW1wb3J0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbiBmcm9tICdAbXVpL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDaGFpbmVkRnVuY3Rpb247IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwiaW5oZXJpdFZpZXdCb3hcIiwgXCJ0aXRsZUFjY2Vzc1wiLCBcInZpZXdCb3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRTdmdJY29uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zdmdJY29uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0eXBvZ3JhcGh5LCBfdGhlbWUkdHlwb2dyYXBoeSRweFQsIF90aGVtZSR0eXBvZ3JhcGh5MiwgX3RoZW1lJHR5cG9ncmFwaHkyJHB4LCBfdGhlbWUkdHlwb2dyYXBoeTMsIF90aGVtZSR0eXBvZ3JhcGh5MyRweCwgX3BhbGV0dGUkb3duZXJTdGF0ZSRjLCBfcGFsZXR0ZSwgX3BhbGV0dGUyLCBfcGFsZXR0ZTM7XG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIC8vIHRoZSA8c3ZnPiB3aWxsIGRlZmluZSB0aGUgcHJvcGVydHkgdGhhdCBoYXMgYGN1cnJlbnRDb2xvcmBcbiAgICAvLyBlLmcuIGhlcm9pY29ucyB1c2VzIGZpbGw9XCJub25lXCIgYW5kIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgZmlsbDogb3duZXJTdGF0ZS5oYXNTdmdBc0NoaWxkID8gdW5kZWZpbmVkIDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9uczIgPSBfdGhlbWUkdHJhbnNpdGlvbnMyLmR1cmF0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zMi5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTIkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTIucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MiRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MiwgMjQpKSB8fCAnMS41cmVtJyxcbiAgICAgIGxhcmdlOiAoKF90aGVtZSR0eXBvZ3JhcGh5MyA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzVyZW0nXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlID0gX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIuYWN0aXZlLFxuICAgICAgZGlzYWJsZWQ6IChfcGFsZXR0ZTMgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUzID0gX3BhbGV0dGUzLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMy5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgaHRtbENvbG9yLFxuICAgICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICAgIHRpdGxlQWNjZXNzLFxuICAgICAgdmlld0JveCA9ICcwIDAgMjQgMjQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGhhc1N2Z0FzQ2hpbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNoaWxkcmVuLnR5cGUgPT09ICdzdmcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvbnRTaXplLFxuICAgIGluc3RhbmNlRm9udFNpemU6IGluUHJvcHMuZm9udFNpemUsXG4gICAgaW5oZXJpdFZpZXdCb3gsXG4gICAgdmlld0JveCxcbiAgICBoYXNTdmdBc0NoaWxkXG4gIH0pO1xuICBjb25zdCBtb3JlID0ge307XG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjb2xvcjogaHRtbENvbG9yLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdGl0bGVBY2Nlc3MgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgIHJvbGU6IHRpdGxlQWNjZXNzID8gJ2ltZycgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgbW9yZSwgb3RoZXIsIGhhc1N2Z0FzQ2hpbGQgJiYgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbaGFzU3ZnQXNDaGlsZCA/IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuIDogY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGh0bWxDb2xvcmAgcHJvcCB0byBhcHBseSBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUtcmVuZGVyaW5nIGF0dHJpYnV0ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWQgb24gdGhlXG4gICAqIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc2hhcGUtcmVuZGVyaW5nKS5cbiAgICogSWYgeW91IGFyZSBoYXZpbmcgaXNzdWVzIHdpdGggYmx1cnJ5IGljb25zIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyBwcm9wLlxuICAgKi9cbiAgc2hhcGVSZW5kZXJpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsICJpbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNNdWlFbGVtZW50JztcbmV4cG9ydCBkZWZhdWx0IGlzTXVpRWxlbWVudDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSWQgZnJvbSAnQG11aS91dGlscy91c2VJZCc7XG5leHBvcnQgZGVmYXVsdCB1c2VJZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAbXVpL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwgImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uXCIsIFwiY2VudGVyUmlwcGxlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVSaXBwbGVcIiwgXCJkaXNhYmxlVG91Y2hSaXBwbGVcIiwgXCJmb2N1c1JpcHBsZVwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcIkxpbmtDb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiLCBcIm9uRHJhZ0xlYXZlXCIsIFwib25Gb2N1c1wiLCBcIm9uRm9jdXNWaXNpYmxlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uTW91c2VEb3duXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25Nb3VzZVVwXCIsIFwib25Ub3VjaEVuZFwiLCBcIm9uVG91Y2hNb3ZlXCIsIFwib25Ub3VjaFN0YXJ0XCIsIFwidGFiSW5kZXhcIiwgXCJUb3VjaFJpcHBsZVByb3BzXCIsIFwidG91Y2hSaXBwbGVSZWZcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJy4uL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCBUb3VjaFJpcHBsZSBmcm9tICcuL1RvdWNoUmlwcGxlJztcbmltcG9ydCBidXR0b25CYXNlQ2xhc3NlcywgeyBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25CYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSB7XG4gICAgY29tcG9zZWRDbGFzc2VzLnJvb3QgKz0gYCAke2ZvY3VzVmlzaWJsZUNsYXNzTmFtZX1gO1xuICB9XG4gIHJldHVybiBjb21wb3NlZENsYXNzZXM7XG59O1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICB9LFxuICBbYCYuJHtidXR0b25CYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAvLyBEaXNhYmxlIGxpbmsgaW50ZXJhY3Rpb25zXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBjb2xvckFkanVzdDogJ2V4YWN0J1xuICB9XG59KTtcblxuLyoqXG4gKiBgQnV0dG9uQmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgYnV0dG9uLlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIGZvY3VzL3JpcHBsZSBsb2dpYy5cbiAqL1xuY29uc3QgQnV0dG9uQmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbkJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgICBmb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkNvbnRleHRNZW51LFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25Gb2N1c1Zpc2libGUsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlVXAsXG4gICAgICBvblRvdWNoRW5kLFxuICAgICAgb25Ub3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICB0YWJJbmRleCA9IDAsXG4gICAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgICAgdG91Y2hSaXBwbGVSZWYsXG4gICAgICB0eXBlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiAoe1xuICAgIGZvY3VzVmlzaWJsZTogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IFttb3VudGVkU3RhdGUsIHNldE1vdW50ZWRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZFN0YXRlKHRydWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGVuYWJsZVRvdWNoUmlwcGxlID0gbW91bnRlZFN0YXRlICYmICFkaXNhYmxlUmlwcGxlICYmICFkaXNhYmxlZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlICYmIG1vdW50ZWRTdGF0ZSkge1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZSgpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVSaXBwbGUsIGZvY3VzUmlwcGxlLCBmb2N1c1Zpc2libGUsIG1vdW50ZWRTdGF0ZV0pO1xuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWdub3JlID0gc2tpcFJpcHBsZUFjdGlvbjtcbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvbk1vdXNlRG93bik7XG4gIGNvbnN0IGhhbmRsZUNvbnRleHRNZW51ID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uQ29udGV4dE1lbnUpO1xuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25EcmFnTGVhdmUpO1xuICBjb25zdCBoYW5kbGVNb3VzZVVwID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uTW91c2VVcCk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICBpZiAoIWJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBidXR0b25SZWYuY3VycmVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGlmIChvbkZvY3VzVmlzaWJsZSkge1xuICAgICAgICBvbkZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcblxuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG4gIGNvbnN0IGtleWRvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgZG93biB0byBhdm9pZCByZXBlYXRzIGJlaW5nIGNvdW50ZWQgYXMgbXVsdGlwbGUgYWN0aXZhdGlvbnNcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgIWtleWRvd25SZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0YXJ0KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAvLyBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBcdTI2QTBcdUZFMEYgV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNlbnRlclwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbkdyb3VwIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICAgIGNsYXNzZXMgPSB7fSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7XG5cbiAgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuICBjb25zdCBzdGFydFRpbWVyID0gdXNlVGltZW91dCgpO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRDb21taXQgPSBSZWFjdC51c2VDYWxsYmFjayhwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUsXG4gICAgICByaXBwbGVYLFxuICAgICAgcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemUsXG4gICAgICBjYlxuICAgIH0gPSBwYXJhbXM7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IFsuLi5vbGRSaXBwbGVzLCAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJpcHBsZSwge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICByaXBwbGU6IGNsc3goY2xhc3Nlcy5yaXBwbGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGUpLFxuICAgICAgICByaXBwbGVWaXNpYmxlOiBjbHN4KGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUpLFxuICAgICAgICByaXBwbGVQdWxzYXRlOiBjbHN4KGNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUpLFxuICAgICAgICBjaGlsZDogY2xzeChjbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQpLFxuICAgICAgICBjaGlsZExlYXZpbmc6IGNsc3goY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcpLFxuICAgICAgICBjaGlsZFB1bHNhdGU6IGNsc3goY2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUpXG4gICAgICB9LFxuICAgICAgdGltZW91dDogRFVSQVRJT04sXG4gICAgICBwdWxzYXRlOiBwdWxzYXRlLFxuICAgICAgcmlwcGxlWDogcmlwcGxlWCxcbiAgICAgIHJpcHBsZVk6IHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplOiByaXBwbGVTaXplXG4gICAgfSwgbmV4dEtleS5jdXJyZW50KV0pO1xuICAgIG5leHRLZXkuY3VycmVudCArPSAxO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW2NsYXNzZXNdKTtcbiAgY29uc3Qgc3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9LCBjYiA9ICgpID0+IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgICAgY2VudGVyID0gY2VudGVyUHJvcCB8fCBvcHRpb25zLnB1bHNhdGUsXG4gICAgICBmYWtlRWxlbWVudCA9IGZhbHNlIC8vIEZvciB0ZXN0IHB1cnBvc2VzXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdtb3VzZWRvd24nICYmIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBmYWtlRWxlbWVudCA/IG51bGwgOiBjb250YWluZXIuY3VycmVudDtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSByaXBwbGVcbiAgICBsZXQgcmlwcGxlWDtcbiAgICBsZXQgcmlwcGxlWTtcbiAgICBsZXQgcmlwcGxlU2l6ZTtcbiAgICBpZiAoY2VudGVyIHx8IGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCA/IGV2ZW50LnRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKGNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQoY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydCgoMiAqIHJlY3Qud2lkdGggKiogMiArIHJlY3QuaGVpZ2h0ICoqIDIpIC8gMyk7XG5cbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYW5pbWF0aW9uIGlzIGJyb2tlbiBvbiBNb2JpbGUgQ2hyb21lIGlmIHRoZSBzaXplIGlzIGV2ZW4uXG4gICAgICBpZiAocmlwcGxlU2l6ZSAlIDIgPT09IDApIHtcbiAgICAgICAgcmlwcGxlU2l6ZSArPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplWCA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRXaWR0aCA6IDApIC0gcmlwcGxlWCksIHJpcHBsZVgpICogMiArIDI7XG4gICAgICBjb25zdCBzaXplWSA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgOiAwKSAtIHJpcHBsZVkpLCByaXBwbGVZKSAqIDIgKyAyO1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydChzaXplWCAqKiAyICsgc2l6ZVkgKiogMik7XG4gICAgfVxuXG4gICAgLy8gVG91Y2hlIGRldmljZXNcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICAvLyBjaGVjayB0aGF0IHRoaXMgaXNuJ3QgYW5vdGhlciB0b3VjaHN0YXJ0IGR1ZSB0byBtdWx0aXRvdWNoXG4gICAgICAvLyBvdGhlcndpc2Ugd2Ugd2lsbCBvbmx5IGNsZWFyIGEgc2luZ2xlIHRpbWVyIHdoZW4gdW5tb3VudGluZyB3aGlsZSB0d29cbiAgICAgIC8vIGFyZSBydW5uaW5nXG4gICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgICAgICBwdWxzYXRlLFxuICAgICAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgICAgIHJpcHBsZVksXG4gICAgICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRGVsYXkgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgLy8gV2UgaGF2ZSB0byBtYWtlIGEgdHJhZGVvZmYgd2l0aCB0aGlzIGRlbGF5IHZhbHVlLlxuICAgICAgICBzdGFydFRpbWVyLnN0YXJ0KERFTEFZX1JJUFBMRSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgIHB1bHNhdGUsXG4gICAgICAgIHJpcHBsZVgsXG4gICAgICAgIHJpcHBsZVksXG4gICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgIGNiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjZW50ZXJQcm9wLCBzdGFydENvbW1pdCwgc3RhcnRUaW1lcl0pO1xuICBjb25zdCBwdWxzYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0YXJ0KHt9LCB7XG4gICAgICBwdWxzYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sIFtzdGFydF0pO1xuICBjb25zdCBzdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50LCBjYikgPT4ge1xuICAgIHN0YXJ0VGltZXIuY2xlYXIoKTtcblxuICAgIC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IHtcbiAgICAgIGlmIChvbGRSaXBwbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sZFJpcHBsZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtzdGFydFRpbWVyXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb3VjaFJpcHBsZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluUHJvcCAmJiBvbkV4aXRlZCAhPSBudWxsKSB7XG4gICAgICAvLyByZWFjdC10cmFuc2l0aW9uLWdyb3VwI29uRXhpdGVkXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KG9uRXhpdGVkLCB0aW1lb3V0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmhlcml0JyAmJiB7XG4gIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgPGJ1dHRvbj4gb24gQ2hyb21lIGhhdmUgZGVmYXVsdCBmb250IHRoYXQgZG9lc24ndCBpbmhlcml0LCByZXNldCB0aGlzLlxuICBmb250OiAnaW5oZXJpdCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCAhPT0gJ2luaGVyaXQnICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTtcblxuLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2JvZHkxJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgbWFwcyB0aGUgdmFyaWFudCBwcm9wIHRvIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IEhUTUwgZWxlbWVudCB0eXBlcy5cbiAgICogRm9yIGluc3RhbmNlLCBzdWJ0aXRsZTEgdG8gYDxoNj5gLlxuICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhhdCBtYXBwaW5nLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24uXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgaDE6ICdoMScsXG4gICAqICAgaDI6ICdoMicsXG4gICAqICAgaDM6ICdoMycsXG4gICAqICAgaDQ6ICdoNCcsXG4gICAqICAgaDU6ICdoNScsXG4gICAqICAgaDY6ICdoNicsXG4gICAqICAgc3VidGl0bGUxOiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMjogJ2g2JyxcbiAgICogICBib2R5MTogJ3AnLFxuICAgKiAgIGJvZHkyOiAncCcsXG4gICAqICAgaW5oZXJpdDogJ3AnLFxuICAgKiB9XG4gICAqL1xuICB2YXJpYW50TWFwcGluZzogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCAiLy8gU3VwcG9ydHMgZGV0ZXJtaW5hdGlvbiBvZiBpc0NvbnRyb2xsZWQoKS5cbi8vIENvbnRyb2xsZWQgaW5wdXQgYWNjZXB0cyBpdHMgY3VycmVudCB2YWx1ZSBhcyBhIHByb3AuXG4vL1xuLy8gQHNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Zvcm1zLmh0bWwjY29udHJvbGxlZC1jb21wb25lbnRzXG4vLyBAcGFyYW0gdmFsdWVcbi8vIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0cmluZyAoaW5jbHVkaW5nICcnKSBvciBudW1iZXIgKGluY2x1ZGluZyB6ZXJvKVxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVtcHR5IG9yIGZpbGxlZC5cbi8vIFJlc3BvbnNlIGRldGVybWluZXMgaWYgbGFiZWwgaXMgcHJlc2VudGVkIGFib3ZlIGZpZWxkIG9yIGFzIHBsYWNlaG9sZGVyLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEBwYXJhbSBTU1Jcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vdCBwcmVzZW50IG9yIGVtcHR5IHN0cmluZy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYW55IG51bWJlciBvciBzdHJpbmcgd2l0aCBsZW5ndGguXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRJY29uXCIsIFwiY29sb3JcIiwgXCJpY29uXCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImluZGV0ZXJtaW5hdGVJY29uXCIsIFwiaW5wdXRQcm9wc1wiLCBcInNpemVcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBTd2l0Y2hCYXNlIGZyb20gJy4uL2ludGVybmFsL1N3aXRjaEJhc2UnO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsnO1xuaW1wb3J0IENoZWNrQm94SWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3gnO1xuaW1wb3J0IEluZGV0ZXJtaW5hdGVDaGVja0JveEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0luZGV0ZXJtaW5hdGVDaGVja0JveCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2hlY2tib3hDbGFzc2VzLCB7IGdldENoZWNrYm94VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaGVja2JveENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgaW5kZXRlcm1pbmF0ZSAmJiAnaW5kZXRlcm1pbmF0ZScsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENoZWNrYm94VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IENoZWNrYm94Um9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlDaGVja2JveCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmluZGV0ZXJtaW5hdGUgJiYgc3R5bGVzLmluZGV0ZXJtaW5hdGUsIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7b3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5hY3RpdmVDaGFubmVsIDogdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYShvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUgOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gIFtgJi4ke2NoZWNrYm94Q2xhc3Nlcy5jaGVja2VkfSwgJi4ke2NoZWNrYm94Q2xhc3Nlcy5pbmRldGVybWluYXRlfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Y2hlY2tib3hDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59KSk7XG5jb25zdCBkZWZhdWx0Q2hlY2tlZEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChDaGVja0JveEljb24sIHt9KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uLCB7fSk7XG5jb25zdCBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24gPSAvKiNfX1BVUkVfXyovX2pzeChJbmRldGVybWluYXRlQ2hlY2tCb3hJY29uLCB7fSk7XG5jb25zdCBDaGVja2JveCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENoZWNrYm94KGluUHJvcHMsIHJlZikge1xuICB2YXIgX2ljb24kcHJvcHMkZm9udFNpemUsIF9pbmRldGVybWluYXRlSWNvbiRwcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2hlY2tib3gnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbjogaWNvblByb3AgPSBkZWZhdWx0SWNvbixcbiAgICAgIGluZGV0ZXJtaW5hdGUgPSBmYWxzZSxcbiAgICAgIGluZGV0ZXJtaW5hdGVJY29uOiBpbmRldGVybWluYXRlSWNvblByb3AgPSBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24sXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGljb24gPSBpbmRldGVybWluYXRlID8gaW5kZXRlcm1pbmF0ZUljb25Qcm9wIDogaWNvblByb3A7XG4gIGNvbnN0IGluZGV0ZXJtaW5hdGVJY29uID0gaW5kZXRlcm1pbmF0ZSA/IGluZGV0ZXJtaW5hdGVJY29uUHJvcCA6IGNoZWNrZWRJY29uO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgaW5kZXRlcm1pbmF0ZSxcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaGVja2JveFJvb3QsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgJ2RhdGEtaW5kZXRlcm1pbmF0ZSc6IGluZGV0ZXJtaW5hdGVcbiAgICB9LCBpbnB1dFByb3BzKSxcbiAgICBpY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2ljb24kcHJvcHMkZm9udFNpemUgPSBpY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2ljb24kcHJvcHMkZm9udFNpemUgOiBzaXplXG4gICAgfSksXG4gICAgY2hlY2tlZEljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaW5kZXRlcm1pbmF0ZUljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2luZGV0ZXJtaW5hdGVJY29uJHByID0gaW5kZXRlcm1pbmF0ZUljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfaW5kZXRlcm1pbmF0ZUljb24kcHIgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENoZWNrYm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hJY29uIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjaGVja2VkIHN0YXRlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIC8+XG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgYXBwZWFycyBpbmRldGVybWluYXRlLlxuICAgKiBUaGlzIGRvZXMgbm90IHNldCB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgdG8gaW5kZXRlcm1pbmF0ZSBkdWVcbiAgICogdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBicm93c2Vycy5cbiAgICogSG93ZXZlciwgd2Ugc2V0IGEgYGRhdGEtaW5kZXRlcm1pbmF0ZWAgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbmRldGVybWluYXRlLlxuICAgKiBAZGVmYXVsdCA8SW5kZXRlcm1pbmF0ZUNoZWNrQm94SWNvbiAvPlxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZUljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSBjaGVja2JveCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKiBUaGUgYnJvd3NlciB1c2VzIFwib25cIiBhcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Gb2N1c1wiLCBcImNoZWNrZWRcIiwgXCJjaGVja2VkSWNvblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRDaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRm9jdXNSaXBwbGVcIiwgXCJlZGdlXCIsIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInJlYWRPbmx5XCIsIFwicmVxdWlyZWRcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB7IGdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N3aXRjaEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjaGVja2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVkZ2VcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlZGdlICYmIGBlZGdlJHtjYXBpdGFsaXplKGVkZ2UpfWBdLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBTd2l0Y2hCYXNlUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlKSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6IDksXG4gIGJvcmRlclJhZGl1czogJzUwJSdcbn0sIG93bmVyU3RhdGUuZWRnZSA9PT0gJ3N0YXJ0JyAmJiB7XG4gIG1hcmdpbkxlZnQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdlbmQnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59KSk7XG5jb25zdCBTd2l0Y2hCYXNlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIGN1cnNvcjogJ2luaGVyaXQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICB6SW5kZXg6IDFcbn0pO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFN3aXRjaEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTd2l0Y2hCYXNlKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZWRnZSA9IGZhbHNlLFxuICAgICAgaWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdDogQm9vbGVhbihkZWZhdWx0Q2hlY2tlZCksXG4gICAgbmFtZTogJ1N3aXRjaEJhc2UnLFxuICAgIHN0YXRlOiAnY2hlY2tlZCdcbiAgfSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25Gb2N1cykge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkJsdXIpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzkwMjNcbiAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgc2V0Q2hlY2tlZFN0YXRlKG5ld0NoZWNrZWQpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICBvbkNoYW5nZShldmVudCwgbmV3Q2hlY2tlZCk7XG4gICAgfVxuICB9O1xuICBsZXQgZGlzYWJsZWQgPSBkaXNhYmxlZFByb3A7XG4gIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgIGlmICh0eXBlb2YgZGlzYWJsZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkaXNhYmxlZCA9IG11aUZvcm1Db250cm9sLmRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYXNMYWJlbEZvciA9IHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGVkZ2VcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTd2l0Y2hCYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudDogXCJzcGFuXCIsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjZW50ZXJSaXBwbGU6IHRydWUsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHRhYkluZGV4OiBudWxsLFxuICAgIHJvbGU6IHVuZGVmaW5lZCxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU3dpdGNoQmFzZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWRQcm9wLFxuICAgICAgZGVmYXVsdENoZWNrZWQ6IGRlZmF1bHRDaGVja2VkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmlucHV0LFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgaWQ6IGhhc0xhYmVsRm9yID8gaWQgOiB1bmRlZmluZWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICB0eXBlOiB0eXBlXG4gICAgfSwgdHlwZSA9PT0gJ2NoZWNrYm94JyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7XG4gICAgICB2YWx1ZVxuICAgIH0sIGlucHV0UHJvcHMpKSwgY2hlY2tlZCA/IGNoZWNrZWRJY29uIDogaWNvbl1cbiAgfSkpO1xufSk7XG5cbi8vIE5COiBJZiBjaGFuZ2VkLCBwbGVhc2UgdXBkYXRlIENoZWNrYm94LCBTd2l0Y2ggYW5kIFJhZGlvXG4vLyBzbyB0aGF0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBpcyB1cGRhdGVkLlxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3dpdGNoQmFzZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZEljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBnaXZlbiwgdXNlcyBhIG5lZ2F0aXZlIG1hcmdpbiB0byBjb3VudGVyYWN0IHRoZSBwYWRkaW5nIG9uIG9uZVxuICAgKiBzaWRlICh0aGlzIGlzIG9mdGVuIGhlbHBmdWwgZm9yIGFsaWduaW5nIHRoZSBsZWZ0IG9yIHJpZ2h0XG4gICAqIHNpZGUgb2YgdGhlIGljb24gd2l0aCBjb250ZW50IGFib3ZlIG9yIGJlbG93LCB3aXRob3V0IHJ1aW5pbmcgdGhlIGJvcmRlclxuICAgKiBzaXplIGFuZCBzaGFwZSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlZGdlOiBQcm9wVHlwZXMub25lT2YoWydlbmQnLCAnc3RhcnQnLCBmYWxzZV0pLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLypcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBjb21wb25lbnQgcHJvcCBgdHlwZWAuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoQmFzZTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdQcml2YXRlU3dpdGNoQmFzZScsIHNsb3QpO1xufVxuY29uc3Qgc3dpdGNoQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdQcml2YXRlU3dpdGNoQmFzZScsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2lucHV0JywgJ2VkZ2VTdGFydCcsICdlZGdlRW5kJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3dpdGNoQmFzZUNsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6XCJcbn0pLCAnQ2hlY2tCb3hPdXRsaW5lQmxhbmsnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5elwiXG59KSwgJ0NoZWNrQm94Jyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMEg3di0yaDEwdjJ6XCJcbn0pLCAnSW5kZXRlcm1pbmF0ZUNoZWNrQm94Jyk7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNoZWNrYm94Jywgc2xvdCk7XG59XG5jb25zdCBjaGVja2JveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaGVja2JveCcsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2hlY2tib3hDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVTaHJpbmtcIiwgXCJzaXplXCIsIFwic3R5bGVcIiwgXCJ0aGlja25lc3NcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTSVpFID0gNDQ7XG5jb25zdCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbmApKTtcbmNvbnN0IGNpcmN1bGFyRGFzaEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDFweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTE1cHg7XG4gIH1cblxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjVweDtcbiAgfVxuYCkpO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdLFxuICAgIHN2ZzogWydzdmcnXSxcbiAgICBjaXJjbGU6IFsnY2lyY2xlJywgYGNpcmNsZSR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBkaXNhYmxlU2hyaW5rICYmICdjaXJjbGVEaXNhYmxlU2hyaW5rJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBDaXJjdWxhclByb2dyZXNzUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nKVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiBjc3MoX3QzIHx8IChfdDMgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgbGluZWFyIGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lKSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzU1ZHID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1N2ZycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnN2Z1xufSkoe1xuICBkaXNwbGF5OiAnYmxvY2snIC8vIEtlZXBzIHRoZSBwcm9ncmVzcyBjZW50ZXJlZFxufSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzQ2lyY2xlID0gc3R5bGVkKCdjaXJjbGUnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ0NpcmNsZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY2lyY2xlLCBzdHlsZXNbYGNpcmNsZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgc3R5bGVzLmNpcmNsZURpc2FibGVTaHJpbmtdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBzdHJva2U6ICdjdXJyZW50Q29sb3InXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jylcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIHtcbiAgLy8gU29tZSBkZWZhdWx0IHZhbHVlIHRoYXQgbG9va3MgZmluZSB3YWl0aW5nIGZvciB0aGUgYW5pbWF0aW9uIHRvIGtpY2tzIGluLlxuICBzdHJva2VEYXNoYXJyYXk6ICc4MHB4LCAyMDBweCcsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDAgLy8gQWRkIHRoZSB1bml0IHRvIGZpeCBhIEVkZ2UgMTYgYW5kIGJlbG93IGJ1Zy5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiAhb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIGNzcyhfdDQgfHwgKF90NCA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJEYXNoS2V5ZnJhbWUpKTtcblxuLyoqXG4gKiAjIyBBUklBXG4gKlxuICogSWYgdGhlIHByb2dyZXNzIGJhciBpcyBkZXNjcmliaW5nIHRoZSBsb2FkaW5nIHByb2dyZXNzIG9mIGEgcGFydGljdWxhciByZWdpb24gb2YgYSBwYWdlLFxuICogeW91IHNob3VsZCB1c2UgYGFyaWEtZGVzY3JpYmVkYnlgIHRvIHBvaW50IHRvIHRoZSBwcm9ncmVzcyBiYXIsIGFuZCBzZXQgdGhlIGBhcmlhLWJ1c3lgXG4gKiBhdHRyaWJ1dGUgdG8gYHRydWVgIG9uIHRoYXQgcmVnaW9uIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLlxuICovXG5jb25zdCBDaXJjdWxhclByb2dyZXNzID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2lyY3VsYXJQcm9ncmVzcyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGlzYWJsZVNocmluayA9IGZhbHNlLFxuICAgICAgc2l6ZSA9IDQwLFxuICAgICAgc3R5bGUsXG4gICAgICB0aGlja25lc3MgPSAzLjYsXG4gICAgICB2YWx1ZSA9IDAsXG4gICAgICB2YXJpYW50ID0gJ2luZGV0ZXJtaW5hdGUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rLFxuICAgIHNpemUsXG4gICAgdGhpY2tuZXNzLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2lyY2xlU3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ2RldGVybWluYXRlJykge1xuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqICgoU0laRSAtIHRoaWNrbmVzcykgLyAyKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlLnRvRml4ZWQoMyk7XG4gICAgcm9vdFByb3BzWydhcmlhLXZhbHVlbm93J10gPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gYCR7KCgxMDAgLSB2YWx1ZSkgLyAxMDAgKiBjaXJjdW1mZXJlbmNlKS50b0ZpeGVkKDMpfXB4YDtcbiAgICByb290U3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgtOTBkZWcpJztcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogc2l6ZSxcbiAgICAgIGhlaWdodDogc2l6ZVxuICAgIH0sIHJvb3RTdHlsZSwgc3R5bGUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiXG4gIH0sIHJvb3RQcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1NWRywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN2ZyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB2aWV3Qm94OiBgJHtTSVpFIC8gMn0gJHtTSVpFIC8gMn0gJHtTSVpFfSAke1NJWkV9YCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzQ2lyY2xlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5jaXJjbGUsXG4gICAgICAgIHN0eWxlOiBjaXJjbGVTdHlsZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY3g6IFNJWkUsXG4gICAgICAgIGN5OiBTSVpFLFxuICAgICAgICByOiAoU0laRSAtIHRoaWNrbmVzcykgLyAyLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaWNrbmVzc1xuICAgICAgfSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENpcmN1bGFyUHJvZ3Jlc3MucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2hyaW5rIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogVGhpcyBvbmx5IHdvcmtzIGlmIHZhcmlhbnQgaXMgYGluZGV0ZXJtaW5hdGVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNocmluazogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLmJvb2wsIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVNocmluayAmJiBwcm9wcy52YXJpYW50ICYmIHByb3BzLnZhcmlhbnQgIT09ICdpbmRldGVybWluYXRlJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCB0aGUgYGRpc2FibGVTaHJpbmtgIHByb3AgJyArICd3aXRoIGEgdmFyaWFudCBvdGhlciB0aGFuIGBpbmRldGVybWluYXRlYC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJZiB1c2luZyBhIG51bWJlciwgdGhlIHBpeGVsIHVuaXQgaXMgYXNzdW1lZC5cbiAgICogSWYgdXNpbmcgYSBzdHJpbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIENTUyB1bml0LCBlLmcuICczcmVtJy5cbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHRoaWNrbmVzcyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAZGVmYXVsdCAzLjZcbiAgICovXG4gIHRoaWNrbmVzczogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGZvciB0aGUgZGV0ZXJtaW5hdGUgdmFyaWFudC5cbiAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBVc2UgaW5kZXRlcm1pbmF0ZSB3aGVuIHRoZXJlIGlzIG5vIHByb2dyZXNzIHZhbHVlLlxuICAgKiBAZGVmYXVsdCAnaW5kZXRlcm1pbmF0ZSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhclByb2dyZXNzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLCBzbG90KTtcbn1cbmNvbnN0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIFsncm9vdCcsICdkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzdmcnLCAnY2lyY2xlJywgJ2NpcmNsZURldGVybWluYXRlJywgJ2NpcmNsZUluZGV0ZXJtaW5hdGUnLCAnY2lyY2xlRGlzYWJsZVNocmluayddKTtcbmV4cG9ydCBkZWZhdWx0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiBcdTI2QTBcdUZFMEYgT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjb250cm9sXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlVHlwb2dyYXBoeVwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJsYWJlbFBsYWNlbWVudFwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInJlcXVpcmVkXCIsIFwic2xvdFByb3BzXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgU3RhY2sgZnJvbSAnLi4vU3RhY2snO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMsIHsgZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbFBsYWNlbWVudCxcbiAgICBlcnJvcixcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYGxhYmVsUGxhY2VtZW50JHtjYXBpdGFsaXplKGxhYmVsUGxhY2VtZW50KX1gLCBlcnJvciAmJiAnZXJyb3InLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBsYWJlbDogWydsYWJlbCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtQ29udHJvbExhYmVsUm9vdCA9IHN0eWxlZCgnbGFiZWwnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbExhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiBzdHlsZXMubGFiZWxcbiAgICB9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BsYWJlbFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50KX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgLy8gRm9yIGNvcnJlY3QgYWxpZ25tZW50IHdpdGggdGhlIHRleHQuXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgbWFyZ2luTGVmdDogLTExLFxuICBtYXJnaW5SaWdodDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50ID09PSAnc3RhcnQnICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ3Jvdy1yZXZlcnNlJyxcbiAgbWFyZ2luTGVmdDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgbWFyZ2luUmlnaHQ6IC0xMVxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ3RvcCcgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uLXJldmVyc2UnLFxuICBtYXJnaW5MZWZ0OiAxNlxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgbWFyZ2luTGVmdDogMTZcbn0sIHtcbiAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiB7XG4gICAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gICAgfVxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuXG4vKipcbiAqIERyb3AtaW4gcmVwbGFjZW1lbnQgb2YgdGhlIGBSYWRpb2AsIGBTd2l0Y2hgIGFuZCBgQ2hlY2tib3hgIGNvbXBvbmVudC5cbiAqIFVzZSB0aGlzIGNvbXBvbmVudCBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGFuIGV4dHJhIGxhYmVsLlxuICovXG5jb25zdCBGb3JtQ29udHJvbExhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2xMYWJlbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90UHJvcHMkdHlwb2dyYXBoeTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2xMYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgY29udHJvbCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFByb3AsXG4gICAgICBkaXNhYmxlVHlwb2dyYXBoeSxcbiAgICAgIGxhYmVsOiBsYWJlbFByb3AsXG4gICAgICBsYWJlbFBsYWNlbWVudCA9ICdlbmQnLFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcCxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZGlzYWJsZWQgPSAoX3JlZiA9IGRpc2FibGVkUHJvcCAhPSBudWxsID8gZGlzYWJsZWRQcm9wIDogY29udHJvbC5wcm9wcy5kaXNhYmxlZCkgIT0gbnVsbCA/IF9yZWYgOiBtdWlGb3JtQ29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogbXVpRm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVxdWlyZWRQcm9wICE9IG51bGwgPyByZXF1aXJlZFByb3AgOiBjb250cm9sLnByb3BzLnJlcXVpcmVkO1xuICBjb25zdCBjb250cm9sUHJvcHMgPSB7XG4gICAgZGlzYWJsZWQsXG4gICAgcmVxdWlyZWRcbiAgfTtcbiAgWydjaGVja2VkJywgJ25hbWUnLCAnb25DaGFuZ2UnLCAndmFsdWUnLCAnaW5wdXRSZWYnXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb250cm9sLnByb3BzW2tleV0gPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9wc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29udHJvbFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxQbGFjZW1lbnQsXG4gICAgcmVxdWlyZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB0eXBvZ3JhcGh5U2xvdFByb3BzID0gKF9zbG90UHJvcHMkdHlwb2dyYXBoeSA9IHNsb3RQcm9wcy50eXBvZ3JhcGh5KSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5IDogY29tcG9uZW50c1Byb3BzLnR5cG9ncmFwaHk7XG4gIGxldCBsYWJlbCA9IGxhYmVsUHJvcDtcbiAgaWYgKGxhYmVsICE9IG51bGwgJiYgbGFiZWwudHlwZSAhPT0gVHlwb2dyYXBoeSAmJiAhZGlzYWJsZVR5cG9ncmFwaHkpIHtcbiAgICBsYWJlbCA9IC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHksIF9leHRlbmRzKHtcbiAgICAgIGNvbXBvbmVudDogXCJzcGFuXCJcbiAgICB9LCB0eXBvZ3JhcGh5U2xvdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5sYWJlbCwgdHlwb2dyYXBoeVNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogdHlwb2dyYXBoeVNsb3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUNvbnRyb2xMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY29udHJvbCwgY29udHJvbFByb3BzKSwgcmVxdWlyZWQgPyAvKiNfX1BVUkVfXyovX2pzeHMoU3RhY2ssIHtcbiAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgICAgY2hpbGRyZW46IFtcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSldXG4gICAgfSkgOiBsYWJlbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBhcHBlYXJzIHNlbGVjdGVkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwb2dyYXBoeTogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIEEgY29udHJvbCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSBhIGBSYWRpb2AsIGEgYFN3aXRjaGAgb3IgYSBgQ2hlY2tib3hgLlxuICAgKi9cbiAgY29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyByZW5kZXJlZCBhcyBpdCBpcyBwYXNzZWQgd2l0aG91dCBhbiBhZGRpdGlvbmFsIHR5cG9ncmFwaHkgbm9kZS5cbiAgICovXG4gIGRpc2FibGVUeXBvZ3JhcGh5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQSB0ZXh0IG9yIGFuIGVsZW1lbnQgdG8gYmUgdXNlZCBpbiBhbiBlbmNsb3NpbmcgbGFiZWwgZWxlbWVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGFiZWwuXG4gICAqIEBkZWZhdWx0ICdlbmQnXG4gICAqL1xuICBsYWJlbFBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2VuZCcsICdzdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cG9ncmFwaHk6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xMYWJlbDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU3RhY2sgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgU3RhY2sgPSBjcmVhdGVTdGFjayh7XG4gIGNyZWF0ZVN0eWxlZENvbXBvbmVudDogc3R5bGVkKCdkaXYnLCB7XG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxuICB9KSxcbiAgdXNlVGhlbWVQcm9wczogaW5Qcm9wcyA9PiB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdjb2x1bW4nXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gaW1tZWRpYXRlIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AsIHdoaWNoIGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIENTUyBmbGV4Ym94IGBnYXBgIGlzIHVzZWQgaW5zdGVhZCBvZiBhcHBseWluZyBgbWFyZ2luYCB0byBjaGlsZHJlbi5cbiAgICpcbiAgICogV2hpbGUgQ1NTIGBnYXBgIHJlbW92ZXMgdGhlIFtrbm93biBsaW1pdGF0aW9uc10oaHR0cHM6Ly9tdWkuY29tL2pveS11aS9yZWFjdC1zdGFjay8jbGltaXRhdGlvbnMpLFxuICAgKiBpdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHNvbWUgYnJvd3NlcnMuIFdlIHJlY29tbWVuZCBjaGVja2luZyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9ZmxleCUyMGdhcCBiZWZvcmUgdXNpbmcgdGhpcyBmbGFnLlxuICAgKlxuICAgKiBUbyBlbmFibGUgdGhpcyBmbGFnIGdsb2JhbGx5LCBmb2xsb3cgdGhlIFt0aGVtZSdzIGRlZmF1bHQgcHJvcHNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3RoZW1lLWNvbXBvbmVudHMvI2RlZmF1bHQtcHJvcHMpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VGbGV4R2FwOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN0YWNrOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2xMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbExhYmVsJywgWydyb290JywgJ2xhYmVsUGxhY2VtZW50U3RhcnQnLCAnbGFiZWxQbGFjZW1lbnRUb3AnLCAnbGFiZWxQbGFjZW1lbnRCb3R0b20nLCAnZGlzYWJsZWQnLCAnbGFiZWwnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbExhYmVsQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicm93XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZm9ybUdyb3VwQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgcm93LFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCByb3cgJiYgJ3JvdycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtR3JvdXBSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtR3JvdXAnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5yb3cgJiYgc3R5bGVzLnJvd107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgZmxleFdyYXA6ICd3cmFwJ1xufSwgb3duZXJTdGF0ZS5yb3cgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAncm93J1xufSkpO1xuXG4vKipcbiAqIGBGb3JtR3JvdXBgIHdyYXBzIGNvbnRyb2xzIHN1Y2ggYXMgYENoZWNrYm94YCBhbmQgYFN3aXRjaGAuXG4gKiBJdCBwcm92aWRlcyBjb21wYWN0IHJvdyBsYXlvdXQuXG4gKiBGb3IgdGhlIGBSYWRpb2AsIHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIGBSYWRpb0dyb3VwYCBjb21wb25lbnQgaW5zdGVhZCBvZiB0aGlzIG9uZS5cbiAqL1xuY29uc3QgRm9ybUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUdyb3VwKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtR3JvdXAnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICByb3cgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgcm93LFxuICAgIGVycm9yOiBmY3MuZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Hcm91cFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUdyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogRGlzcGxheSBncm91cCBvZiBlbGVtZW50cyBpbiBhIGNvbXBhY3Qgcm93LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Hcm91cDsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Hcm91cCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUdyb3VwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Hcm91cCcsIFsncm9vdCcsICdyb3cnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtR3JvdXBDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGVja2VkXCIsIFwiY2hlY2tlZEljb25cIiwgXCJjb2xvclwiLCBcImljb25cIiwgXCJuYW1lXCIsIFwib25DaGFuZ2VcIiwgXCJzaXplXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgU3dpdGNoQmFzZSBmcm9tICcuLi9pbnRlcm5hbC9Td2l0Y2hCYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSYWRpb0J1dHRvbkljb24gZnJvbSAnLi9SYWRpb0J1dHRvbkljb24nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5pbXBvcnQgdXNlUmFkaW9Hcm91cCBmcm9tICcuLi9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAnO1xuaW1wb3J0IHJhZGlvQ2xhc3NlcywgeyBnZXRSYWRpb1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vcmFkaW9DbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRSYWRpb1V0aWxpdHlDbGFzcywgY2xhc3NlcykpO1xufTtcbmNvbnN0IFJhZGlvUm9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlSYWRpbycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgIT09ICdtZWRpdW0nICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUmlwcGxlICYmIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHtvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZUNoYW5uZWwgOiB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSA6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHtcbiAgW2AmLiR7cmFkaW9DbGFzc2VzLmNoZWNrZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9XG59LCB7XG4gIFtgJi4ke3JhZGlvQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSkpO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmNvbnN0IGRlZmF1bHRDaGVja2VkSWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbiwge1xuICBjaGVja2VkOiB0cnVlXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uLCB7fSk7XG5jb25zdCBSYWRpbyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFJhZGlvKGluUHJvcHMsIHJlZikge1xuICB2YXIgX2RlZmF1bHRJY29uJHByb3BzJGZvLCBfZGVmYXVsdENoZWNrZWRJY29uJHA7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVJhZGlvJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbiA9IGRlZmF1bHRJY29uLFxuICAgICAgbmFtZTogbmFtZVByb3AsXG4gICAgICBvbkNoYW5nZTogb25DaGFuZ2VQcm9wLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHJhZGlvR3JvdXAgPSB1c2VSYWRpb0dyb3VwKCk7XG4gIGxldCBjaGVja2VkID0gY2hlY2tlZFByb3A7XG4gIGNvbnN0IG9uQ2hhbmdlID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uQ2hhbmdlUHJvcCwgcmFkaW9Hcm91cCAmJiByYWRpb0dyb3VwLm9uQ2hhbmdlKTtcbiAgbGV0IG5hbWUgPSBuYW1lUHJvcDtcbiAgaWYgKHJhZGlvR3JvdXApIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjaGVja2VkID0gYXJlRXF1YWxWYWx1ZXMocmFkaW9Hcm91cC52YWx1ZSwgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuYW1lID0gcmFkaW9Hcm91cC5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Sb290LCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIGljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdEljb24kcHJvcHMkZm8gPSBkZWZhdWx0SWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9kZWZhdWx0SWNvbiRwcm9wcyRmbyA6IHNpemVcbiAgICB9KSxcbiAgICBjaGVja2VkSWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGVja2VkSWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdENoZWNrZWRJY29uJHAgPSBkZWZhdWx0Q2hlY2tlZEljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfZGVmYXVsdENoZWNrZWRJY29uJHAgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpby5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPFJhZGlvQnV0dG9uSWNvbiBjaGVja2VkIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxSYWRpb0J1dHRvbkljb24gLz5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSYWRpbzsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvblVuY2hlY2tlZCc7XG5pbXBvcnQgUmFkaW9CdXR0b25DaGVja2VkSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25DaGVja2VkJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUmFkaW9CdXR0b25JY29uUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnXG59KTtcbmNvbnN0IFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQgPSBzdHlsZWQoUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uKSh7XG4gIC8vIFNjYWxlIGFwcGxpZWQgdG8gcHJldmVudCBkb3QgbWlzYWxpZ25tZW50IGluIFNhZmFyaVxuICB0cmFuc2Zvcm06ICdzY2FsZSgxKSdcbn0pO1xuY29uc3QgUmFkaW9CdXR0b25JY29uRG90ID0gc3R5bGVkKFJhZGlvQnV0dG9uQ2hlY2tlZEljb24pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxlZnQ6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbixcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0sIG93bmVyU3RhdGUuY2hlY2tlZCAmJiB7XG4gIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0pKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSYWRpb0J1dHRvbkljb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZWQgPSBmYWxzZSxcbiAgICBjbGFzc2VzID0ge30sXG4gICAgZm9udFNpemVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2hlY2tlZFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSYWRpb0J1dHRvbkljb25Sb290LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnJvb3QsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5iYWNrZ3JvdW5kLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb25Eb3QsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5kb3QsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSldXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmFkaW9CdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvQnV0dG9uSWNvbjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6XCJcbn0pLCAnUmFkaW9CdXR0b25VbmNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNOC40NjUgOC40NjVDOS4zNyA3LjU2IDEwLjYyIDcgMTIgN0MxNC43NiA3IDE3IDkuMjQgMTcgMTJDMTcgMTMuMzggMTYuNDQgMTQuNjMgMTUuNTM1IDE1LjUzNUMxNC42MyAxNi40NCAxMy4zOCAxNyAxMiAxN0M5LjI0IDE3IDcgMTQuNzYgNyAxMkM3IDEwLjYyIDcuNTYgOS4zNyA4LjQ2NSA4LjQ2NVpcIlxufSksICdSYWRpb0J1dHRvbkNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSYWRpb0dyb3VwKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChSYWRpb0dyb3VwQ29udGV4dCk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgUmFkaW9Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmFkaW9Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmFkaW9Hcm91cENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmFkaW9Hcm91cENvbnRleHQ7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFkaW9VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVJhZGlvJywgc2xvdCk7XG59XG5jb25zdCByYWRpb0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlSYWRpbycsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzaXplU21hbGwnXSk7XG5leHBvcnQgZGVmYXVsdCByYWRpb0NsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJjaGlsZHJlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnLi4vRm9ybUdyb3VwJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5pbXBvcnQgdXNlSWQgZnJvbSAnLi4vdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJhZGlvR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBSYWRpb0dyb3VwKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gcHJpdmF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIGFjdGlvbnMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdSYWRpb0dyb3VwJ1xuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICBsZXQgaW5wdXQgPSByb290UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCcpO1xuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IHJvb3RSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoOmRpc2FibGVkKScpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgcm9vdFJlZik7XG4gIGNvbnN0IG5hbWUgPSB1c2VJZChuYW1lUHJvcCk7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBuYW1lLFxuICAgIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoZXZlbnQsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZVxuICB9KSwgW25hbWUsIG9uQ2hhbmdlLCBzZXRWYWx1ZVN0YXRlLCB2YWx1ZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtR3JvdXAsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwicmFkaW9ncm91cFwiLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpb0dyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLCBpdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIG5hbWUuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIHJhZGlvIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbi5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBzZWxlY3RlZCByYWRpbyBidXR0b24uIFRoZSBET00gQVBJIGNhc3RzIHRoaXMgdG8gYSBzdHJpbmcuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvR3JvdXA7IiwgImltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuZXhwb3J0IGNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoe1xuICBwYWxldHRlOiB7XG4gICAgcHJpbWFyeToge1xuICAgICAgbWFpbjogXCIjMDA4MjdjXCIsXG4gICAgfSxcbiAgfSxcbn0pO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vZGUoe1xuICBleHBhbmRhYmxlLFxuICBleHBhbmRlZCxcbiAgaGlnaGxpZ2h0LFxuICBpc0xhc3QsXG4gIGNoaWxkcmVuLFxuICBvbkNsaWNrLFxufToge1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgaGlnaGxpZ2h0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBhbnk7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW1wianN0cmVlLW5vZGVcIl07XG5cbiAgaWYgKGV4cGFuZGVkKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLW9wZW5cIik7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLWNsb3NlZFwiKTtcbiAgfVxuXG4gIGlmICghZXhwYW5kYWJsZSkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sZWFmXCIpO1xuICB9XG5cbiAgaWYgKGlzTGFzdCkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sYXN0XCIpO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodCkge1xuICAgIGNoaWxkcmVuID0gPHNwYW4gY2xhc3NOYW1lPVwianN0cmVlLWNsaWNrZWRcIj57Y2hpbGRyZW59PC9zcGFuPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIHJvbGU9XCJ0cmVlaXRlbVwiIGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICA8aVxuICAgICAgICBjbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtb2NsXCJcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG4iLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIsIGZ1bmN0aW9uYWxVcGRhdGUsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCB0aW1lVW50aWxTdGFsZSwgZW5zdXJlUXVlcnlLZXlBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeShjb25maWcpIHtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhhZE9ic2VydmVycyA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy5pbml0aWFsU3RhdGUgPSBjb25maWcuc3RhdGUgfHwgdGhpcy5nZXREZWZhdWx0U3RhdGUodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGU7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnkucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkY2FjaGVUaTtcblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLm1ldGEgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1ldGE7IC8vIERlZmF1bHQgdG8gNSBtaW51dGVzIGlmIG5vdCBjYWNoZSB0aW1lIGlzIHNldFxuXG4gICAgdGhpcy5jYWNoZVRpbWUgPSBNYXRoLm1heCh0aGlzLmNhY2hlVGltZSB8fCAwLCAoX3RoaXMkb3B0aW9ucyRjYWNoZVRpID0gdGhpcy5vcHRpb25zLmNhY2hlVGltZSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkY2FjaGVUaSA6IDUgKiA2MCAqIDEwMDApO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGVHYyA9IGZ1bmN0aW9uIHNjaGVkdWxlR2MoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcblxuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmNhY2hlVGltZSkpIHtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmNhY2hlVGltZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdjVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLmdjVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ2NUaW1lb3V0KTtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub3B0aW9uYWxSZW1vdmUgPSBmdW5jdGlvbiBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgICBpZiAodGhpcy5oYWRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkaXNEYXRhRSwgX3RoaXMkb3B0aW9ucztcblxuICAgIHZhciBwcmV2RGF0YSA9IHRoaXMuc3RhdGUuZGF0YTsgLy8gR2V0IHRoZSBuZXcgZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTsgLy8gVXNlIHByZXYgZGF0YSBpZiBhbiBpc0RhdGFFcXVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIGB0cnVlYFxuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGlzRGF0YUUgPSAoX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucykuaXNEYXRhRXF1YWwpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGlzRGF0YUUuY2FsbChfdGhpcyRvcHRpb25zLCBwcmV2RGF0YSwgZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBwcmV2RGF0YTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgfSAvLyBTZXQgZGF0YSBhbmQgbWFyayBpdCBhcyBjYWNoZWRcblxuXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy51cGRhdGVkQXRcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgc2V0U3RhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0U3RhdGVPcHRpb25zOiBzZXRTdGF0ZU9wdGlvbnNcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIChfdGhpcyRyZXRyeWVyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllci5jYW5jZWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmV0Y2hpbmc7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGUgPSBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlQnlUaW1lID0gZnVuY3Rpb24gaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUpIHtcbiAgICBpZiAoc3RhbGVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIHN0YWxlVGltZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMjtcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMiA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIyLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIzO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMyA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIzLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gdHJ1ZTsgLy8gU3RvcCB0aGUgcXVlcnkgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlckFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLnJldHJ5ZXIuaXNUcmFuc3BvcnRDYW5jZWxhYmxlIHx8IHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCh7XG4gICAgICAgICAgICAgIHJldmVydDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlVGltZSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T2JzZXJ2ZXJzQ291bnQgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdpbnZhbGlkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJGJlaGF2aW8sXG4gICAgICAgIF9jb250ZXh0JGZldGNoT3B0aW9ucyxcbiAgICAgICAgX2Fib3J0Q29udHJvbGxlciRhYm9yO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCkpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hlc1xuICAgICAgICB0aGlzLmNhbmNlbCh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb21pc2UpIHtcbiAgICAgICAgdmFyIF90aGlzJHJldHJ5ZXI0O1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJldHJpZXMgdGhhdCB3ZXJlIHBvdGVudGlhbGx5IGNhbmNlbGxlZCBkdWUgdG8gdW5tb3VudHMgY2FuIGNvbnRpbnVlXG4gICAgICAgIChfdGhpcyRyZXRyeWVyNCA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXI0LmNvbnRpbnVlUmV0cnkoKTsgLy8gUmV0dXJuIGN1cnJlbnQgcHJvbWlzZSBpZiB3ZSBhcmUgYWxyZWFkeSBmZXRjaGluZ1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICB9XG4gICAgfSAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuXG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0gLy8gVXNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGZpcnN0IG9ic2VydmVyIHdpdGggYSBxdWVyeSBmdW5jdGlvbiBpZiBubyBmdW5jdGlvbiBpcyBmb3VuZC5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgcXVlcnkgaXMgaHlkcmF0ZWQgb3IgY3JlYXRlZCB3aXRoIHNldFF1ZXJ5RGF0YS5cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5vcHRpb25zLnF1ZXJ5Rm47XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHRoaXMucXVlcnlLZXkpO1xuICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTsgLy8gQ3JlYXRlIHF1ZXJ5IGZ1bmN0aW9uIGNvbnRleHRcblxuICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHBhZ2VQYXJhbTogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlGbkNvbnRleHQsICdzaWduYWwnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cblxuICAgIHZhciBmZXRjaEZuID0gZnVuY3Rpb24gZmV0Y2hGbigpIHtcbiAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgIH07IC8vIFRyaWdnZXIgYmVoYXZpb3IgaG9va1xuXG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBmZXRjaEZuOiBmZXRjaEZuLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRiZWhhdmlvID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvLm9uRmV0Y2gpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zJGJlaGF2aW8yO1xuXG4gICAgICAoX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpbzIub25GZXRjaChjb250ZXh0KTtcbiAgICB9IC8vIFN0b3JlIHN0YXRlIGluIGNhc2UgdGhlIGN1cnJlbnQgZmV0Y2ggbmVlZHMgdG8gYmUgcmV2ZXJ0ZWRcblxuXG4gICAgdGhpcy5yZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7IC8vIFNldCB0byBmZXRjaGluZyBzdGF0ZSBpZiBub3QgYWxyZWFkeSBpbiBpdFxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRmV0Y2hpbmcgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09ICgoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkpIHtcbiAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMyO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgICAgbWV0YTogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIubWV0YVxuICAgICAgfSk7XG4gICAgfSAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRhdGFcblxuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGNvbnRleHQuZmV0Y2hGbixcbiAgICAgIGFib3J0OiBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfYWJvcnRDb250cm9sbGVyJGFib3IgPSBhYm9ydENvbnRyb2xsZXIuYWJvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYWJvcnRDb250cm9sbGVyJGFib3IuYmluZChhYm9ydENvbnRyb2xsZXIpLFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBfdGhpczIuc2V0RGF0YShkYXRhKTsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cblxuICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMyKTsgLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIE9wdGltaXN0aWNhbGx5IHVwZGF0ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKCEoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3Iuc2lsZW50KSkge1xuICAgICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzMik7IC8vIExvZyBlcnJvclxuXG4gICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5yZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IF90aGlzMyxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5VXBkYXRlZCcsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgICB2YXIgaGFzSW5pdGlhbERhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGluaXRpYWxEYXRhVXBkYXRlZEF0ID0gaGFzSW5pdGlhbERhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICAgIHZhciBoYXNEYXRhID0gdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ICE9IG51bGwgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCkgOiAwLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICBzdGF0dXM6IGhhc0RhdGEgPyAnc3VjY2VzcycgOiAnaWRsZSdcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgdmFyIF9hY3Rpb24kbWV0YSwgX2FjdGlvbiRkYXRhVXBkYXRlZEF0O1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDFcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGZldGNoTWV0YTogKF9hY3Rpb24kbWV0YSA9IGFjdGlvbi5tZXRhKSAhPSBudWxsID8gX2FjdGlvbiRtZXRhIDogbnVsbCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9LCAhc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiAnbG9hZGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IChfYWN0aW9uJGRhdGFVcGRhdGVkQXQgPSBhY3Rpb24uZGF0YVVwZGF0ZWRBdCkgIT0gbnVsbCA/IF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnJvciA9IGFjdGlvbi5lcnJvcjtcblxuICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMucmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMucmV2ZXJ0U3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ludmFsaWRhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBRdWVyeTtcbn0oKTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5leHBvcnQgdmFyIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM7IiwgImltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAnLi9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbm5vdGlmeU1hbmFnZXIuc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbih1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyk7IiwgImV4cG9ydCB2YXIgbG9nZ2VyID0gY29uc29sZTsiLCAiaW1wb3J0IHsgc2V0TG9nZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5zZXRMb2dnZXIobG9nZ2VyKTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBkZWZhdWx0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG52YXIgUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGZhbHNlKTsgLy8gaWYgY29udGV4dFNoYXJpbmcgaXMgb24sIHdlIHNoYXJlIHRoZSBmaXJzdCBhbmQgYXQgbGVhc3Qgb25lXG4vLyBpbnN0YW5jZSBvZiB0aGUgY29udGV4dCBhY3Jvc3MgdGhlIHdpbmRvd1xuLy8gdG8gZW5zdXJlIHRoYXQgaWYgUmVhY3QgUXVlcnkgaXMgdXNlZCBhY3Jvc3Ncbi8vIGRpZmZlcmVudCBidW5kbGVzIG9yIG1pY3JvZnJvbnRlbmRzIHRoZXkgd2lsbFxuLy8gYWxsIHVzZSB0aGUgc2FtZSAqKmluc3RhbmNlKiogb2YgY29udGV4dCwgcmVnYXJkbGVzc1xuLy8gb2YgbW9kdWxlIHNjb3BpbmcuXG5cbmZ1bmN0aW9uIGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZykge1xuICBpZiAoY29udGV4dFNoYXJpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCkge1xuICAgICAgd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0ID0gZGVmYXVsdENvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Q29udGV4dDtcbn1cblxuZXhwb3J0IHZhciB1c2VRdWVyeUNsaWVudCA9IGZ1bmN0aW9uIHVzZVF1ZXJ5Q2xpZW50KCkge1xuICB2YXIgcXVlcnlDbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KGdldFF1ZXJ5Q2xpZW50Q29udGV4dChSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQpKSk7XG5cbiAgaWYgKCFxdWVyeUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJyk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDbGllbnQ7XG59O1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gZnVuY3Rpb24gUXVlcnlDbGllbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjbGllbnQgPSBfcmVmLmNsaWVudCxcbiAgICAgIF9yZWYkY29udGV4dFNoYXJpbmcgPSBfcmVmLmNvbnRleHRTaGFyaW5nLFxuICAgICAgY29udGV4dFNoYXJpbmcgPSBfcmVmJGNvbnRleHRTaGFyaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29udGV4dFNoYXJpbmcsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICB2YXIgQ29udGV4dCA9IGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRTaGFyaW5nXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2xpZW50XG4gIH0sIGNoaWxkcmVuKSk7XG59OyIsICJcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVRyZWUgfSBmcm9tIFwiLi9FbnRpdHlUcmVlV2lkZ2V0XCJcblxud2luZG93WydPTFNXaWRnZXRzJ10gPSB7XG4gICAgY3JlYXRlRW50aXR5VHJlZVxufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlUcmVlIH1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uKHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKCkge1xuICAgIGlmIChwcm9wcy5zeW5vbnltcyAmJiBwcm9wcy5zeW5vbnltcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJvcHMuc3lub255bXMubWFwKCh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e3ZhbHVlICsgaW5kZXh9Pnt2YWx1ZX08L0V1aUZsZXhJdGVtPlxuICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiA8RXVpVGV4dD5ObyBhbHRlcm5hdGl2ZSBuYW1lcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVpZmljYXRpb24vcGFzc2luZyB0aGUgRW50aXR5IGNsYXNzIGNvdWxkIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvblxuICAvLyBmdW5jdGlvbiByZW5kZXJBbHRMYWJlbChlbnRpdHk6IEVudGl0eSkge1xuICAvLyAgIGlmIChlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAwKSB7XG4gIC8vICAgICByZXR1cm4gZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChyZjogUmVpZmllZDxhbnk+LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gIC8vICAgICAgIDxwIGtleT17cmYudmFsdWUgKyBpbmRleH0+e2dldFJlaWZpZWRKU1goZW50aXR5LCByZiwgYXBpKX08L3A+XG4gIC8vICAgICApKTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIC8vIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogMTAgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIHtyZW5kZXJBbHRMYWJlbCgpfVxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpUGFuZWwsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0Nyb3NzUmVmUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24ocHJvcHM6IENyb3NzUmVmUHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICBmdW5jdGlvbiByZW5kZXJDcm9zc1JlZnMoY3Jvc3NyZWZzOiBhbnkpIHtcbiAgICBpZiAoY3Jvc3NyZWZzICYmIGNyb3NzcmVmcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3Jvc3NyZWZzPy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4gKFxuICAgICAgICA8RXVpRmxleEl0ZW0ga2V5PXtpbmRleH0+XG4gICAgICAgICAge2l0ZW19XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGNyb3NzIHJlZmVyZW5jZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAgPD5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBzdHlsZT17eyBwYWRkaW5nOiA3IH19IGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIHtyZW5kZXJDcm9zc1JlZnMocHJvcHMuY3Jvc3NyZWZzKX1cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCB7RXVpUGFuZWwsIEV1aVByb3ZpZGVyLCBFdWlUcmVlVmlld30gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlld1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBmZXRjaF9kYXRhLCBnZXRfdXJsX3ByZWZpeCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvaGllcmFyY2h5X3dpZGdldF9kZXByZWNhdGVkXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbi8qKlxuICogUmVzcG9uc2UgZnJvbSBPTFNcbiAqL1xuaW50ZXJmYWNlIFNlbWFudGljUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBwYXJlbnQ6IHN0cmluZztcbiAgaXJpOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgLyogc3RhdGU6IHtcbiAgICBvcGVuZWQ6IGJvb2xlYW47XG4gIH07ICovXG4gIGNoaWxkcmVuOiBib29sZWFuO1xuICAvKiBhX2F0dHI6IHtcbiAgICBpcmk6IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBjbGFzczogc3RyaW5nO1xuICB9OyAqL1xuICAvLyBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG59XG5jbGFzcyBIaWVyYXJjaHlUcmVlIGltcGxlbWVudHMgTm9kZSB7XG4gIHVybDogc3RyaW5nO1xuICBpcmk6IHN0cmluZztcbiAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaWQ6IHN0cmluZztcbiAgaXNFeHBhbmRlZD86IGJvb2xlYW4gPSB0cnVlO1xuICBjaGlsZHJlbjogQXJyYXk8SGllcmFyY2h5VHJlZT4gPSBbXTtcbiAgaWNvbjogUmVhY3QuUmVhY3RFbGVtZW50ID0gKDw+KzwvPik7XG4gIGljb25XaGVuRXhwYW5kZWQ6IFJlYWN0LlJlYWN0RWxlbWVudCA9ICg8Pi08Lz4pO1xuICBjb25zdHJ1Y3RvcihsYWJlbDogUmVhY3QuUmVhY3ROb2RlLCBpZDogc3RyaW5nLCB1cmw6IHN0cmluZywgaXJpOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuaXJpID0gaXJpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICB9XG4gIHNldGNoaWxkKGNoaWxkOiBIaWVyYXJjaHlUcmVlKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmljb24gPSA8Pis8Lz47XG4gICAgfVxuICB9XG4gIGlzX3Jvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWQgPT09IFwiI1wiO1xuICB9XG4gIHRvX3N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxhYmVsICsgXCJbIFwiICsgdGhpcy5jaGlsZHJlbi5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b19zdHJpbmcoKSkgKyBcIiBdXCJcbiAgICApO1xuICB9XG4gIGNhbGxiYWNrKCkgeyAvL1RPRE8gaGFuZGxlIHZpYSBPbHNBcGkuZ2V0VGVybVRyZWUgd2l0aCBjaGlsZCBwYXJhbVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGFwaV9kYXRhX29uY2xpY2sgPVxuICAgICAgdGhpcy51cmwgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlyaSkpICtcbiAgICAgIFwiL2pzdHJlZS9jaGlsZHJlbi9cIiArXG4gICAgICB0aGlzLmlkO1xuICAgIGZldGNoX2RhdGEoYXBpX2RhdGFfb25jbGljaykudGhlbigocmVzKSA9PiB7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICBjcmVhdGVfdHJlZSh0aGlzLCByZXMsIHRoaXMudXJsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuY29uc3QgY3JlYXRlX3RyZWUgPSAoXG4gIHRyZWU6IEhpZXJhcmNoeVRyZWUsXG4gIGFycjogQXJyYXk8U2VtYW50aWNSZXNwb25zZT4sXG4gIHVybDogc3RyaW5nXG4pID0+IHtcbiAgYXJyXG4gICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnBhcmVudCA9PT0gdHJlZS5pZClcbiAgICAuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIHRyZWUuc2V0Y2hpbGQoXG4gICAgICAgIG5ldyBIaWVyYXJjaHlUcmVlKHZhbHVlLnRleHQsIHZhbHVlLmlkLCB1cmwsIHZhbHVlLmlyaSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdHJlZS5jaGlsZHJlbi5tYXAoKHZhbHVlKSA9PiBjcmVhdGVfdHJlZSh2YWx1ZSwgYXJyLCB1cmwpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFByb3BzIHtcbiAgaXJpPzogc3RyaW5nO1xuICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gIGFwaTogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRUcmVlKG9sc0FwaTogT2xzQXBpLCBvbnRvbG9neUlEOiBzdHJpbmcsIGlyaT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlELCB0ZXJtSXJpOiBpcml9LCB7dmlld01vZGU6IFwiQWxsXCIsIHNpYmxpbmdzOiBmYWxzZX0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gIGlmIChpcmkpIHJldHVybiByZXNwb25zZVxuICBlbHNlIHsgLy9yb290cyBoYXZlIGJlZW4gcXVlcmllZCwgYW5kIHRoZSByZXNwb25zZSBuZWVkcyByZXN0cnVjdHVyaW5nIHRvIGJlY29tZSBTZW1hbnRpY1Jlc3BvbnNlXG4gICAgcmV0dXJuIHJlc3BvbnNlLl9lbWJlZGRlZC50ZXJtcy5tYXAoXG4gICAgICAoeDogeyBpcmk6IHN0cmluZywgbGFiZWw6IHN0cmluZywgaGFzX2NoaWxkcmVuOiBib29sZWFuIH0sIGk6IG51bWJlcikgPT5cbiAgICAgICAgKHtpZDogKCsraSkudG9TdHJpbmcoKSwgcGFyZW50OiAnIycsIGlyaTogeC5pcmksIHRleHQ6IHgubGFiZWwsIGNoaWxkcmVuOiB4Lmhhc19jaGlsZHJlbn0pXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMpID0+IHtcbiAgY29uc3QgeyBpcmksIG9udG9sb2d5SWQsIGFwaSB9ID0gcHJvcHM7XG4gIGNvbnN0IFt0cmVlSXRlbXMsIHNldFRyZWVJdGVtc10gPSB1c2VTdGF0ZTxIaWVyYXJjaHlUcmVlW10+KCk7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcbiAgY29uc3QgbGlua1RvU2VsZiA9IGFwaStcIm9udG9sb2dpZXMvXCIrb250b2xvZ3lJZCtcIi90ZXJtcy9cIlxuXG4gIGNvbnN0IGZldGNoQ2hpbGRyZW4gPSBhc3luYyAoY2hpbGQ6IEhpZXJhcmNoeVRyZWUpID0+IHsgLy9jb3VsZCBiZSBnaXZlbiB0byBIaWVyYXJjaHlUcmVlIG5vZGVzIGZvciBvbkNsaWNrIGNhbGxiYWNrc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCB7Y2hpbGQ6IGNoaWxkLmlkfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmxvZyhlcnJvcikpO1xuICAgIGNoaWxkLmNoaWxkcmVuID0gW107XG4gICAgY3JlYXRlX3RyZWUoY2hpbGQsIHJlc3BvbnNlLCBnZXRfdXJsX3ByZWZpeChsaW5rVG9TZWxmKSk7XG4gIH1cblxuICAvL2luaXRpYWwgdHJlZSBxdWVyeVxuICB1c2VRdWVyeTxBcnJheTxTZW1hbnRpY1Jlc3BvbnNlPj4oW2FwaSwgXCJnZXRUZXJtVHJlZVwiLCBvbnRvbG9neUlkLCBpcmldLCAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFRyZWUob2xzQXBpLCBvbnRvbG9neUlkLCBpcmkpXG4gICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgSGllcmFyY2h5VHJlZShcIiNcIiwgXCIjXCIsIFwiXCIsIFwiXCIpO1xuICAgICAgICBpZiAocmVzKSBjcmVhdGVfdHJlZShyb290LCByZXMsIGdldF91cmxfcHJlZml4KGxpbmtUb1NlbGYpKTtcbiAgICAgICAgc2V0VHJlZUl0ZW1zKHJvb3QuY2hpbGRyZW4pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gIH0pO1xuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIHt0cmVlSXRlbXMgJiYgKFxuICAgICAgICA8RXVpVHJlZVZpZXdcbiAgICAgICAgICBleHBhbmRCeURlZmF1bHQ9e3RydWV9XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkhpZXJhcmNoeVRhYlwiXG4gICAgICAgICAgaXRlbXM9e3RyZWVJdGVtc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkKHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkKHByb3BzOiBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLCBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkIH07IiwgImV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc05hbWUoY2xhc3NpZDogc3RyaW5nKSB7XG4gIHJldHVybiBmZXRjaChcbiAgICBcImh0dHBzOi8vc2VtYW50aWNsb29rdXAuemJtZWQuZGUvb2xzL2FwaS9vbnRvbG9naWVzL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc2lkKSxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNsYXNzSUQ6IGNsYXNzaWQsIHByZWZMYWJlbDogcy5jb25maWc/LnRpdGxlIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNsYXNzSUQ6IGNsYXNzaWQsIHByZWZMYWJlbDogdW5kZWZpbmVkIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaENvbmNlcHRCeUlkKGlkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL3Rlcm1zL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNvbmNlcHRJZDogaWQsIGNvbmNlcHQ6IHM/Ll9lbWJlZGRlZD8udGVybXNbMF0gfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG9jb21wbGV0ZUNvbmNlcHQoXG4gIHRleHQ6IHN0cmluZyxcbiAgb250b2xvZ3k6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG4gIGxldCBxdWVydCA9IFwiXCI7XG4gIGlmIChvbnRvbG9neSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlcnQgPSBcIiZvbnRvbG9neT1cIiArIG9udG9sb2d5O1xuICB9XG4gIHJldHVybiBmZXRjaChcbiAgICBcImh0dHBzOi8vc2VtYW50aWNsb29rdXAuemJtZWQuZGUvb2xzL2FwaS9zZWxlY3Q/cXVlcnlGaWVsZHM9bGFiZWwsc3lub255bSxzaG9ydF9mb3JtLG9ib19pZCZncm91cEZpZWxkPXRydWUmdHlwZT1jbGFzcyZxPVwiICtcbiAgICAgIHRleHQgK1xuICAgICAgcXVlcnQsXG4gICAge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHMpID0+IHMuanNvbigpKVxuICAgIC50aGVuKChzKSA9PiB7XG4gICAgICByZXR1cm4gcz8ucmVzcG9uc2U/LmRvY3MubWFwKChwOiBhbnkpID0+IG1hcE9sc1RvSXJpQW5kTmFtZVR1cGxlKHApKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbWFwT2xzVG9JcmlBbmROYW1lVHVwbGUoaXRlbTogYW55KSB7XG4gIHJldHVybiB7IGlyaTogaXRlbT8uaXJpLCBsYWJlbDogaXRlbT8ubGFiZWwgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoX2RhdGEgPSAodXJsOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIChcbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB1cmwgR2V0IHVybCB3aXRoIGh0dHAgb3IgaHR0cHMgcHJvdG9jb2xcbiAqIEByZXR1cm5zIGNvbmNhdGluYXRlIHMgdG8gaHR0cFxuICovXG5leHBvcnQgY29uc3QgZml4X3VybCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBpZiAodXJsLnN1YnN0cigwLCA1KSA9PT0gXCJodHRwOlwiKSB7XG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKFwiaHR0cFwiLCBcImh0dHBzXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB1cmxcbiAqIEByZXR1cm5zIHJldHVybiB1cmwgZnJvbSBodHRwcyB0byAvdGVybXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldF91cmxfcHJlZml4ID0gKHVybDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICh1cmwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBmaXhfdXJsKHVybC5zdWJzdHJpbmcoMCwgdXJsLnNlYXJjaChcIi90ZXJtc1wiKSArIDcpKTtcbn07IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpJ1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5J1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0FsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcImFsdGVybmF0aXZlTmFtZVRhYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiBzeW5vbnltcz17ZGF0YS5nZXRTeW5vbnltcygpLm1hcChzeW5vbnltID0+IHN5bm9ueW0udmFsdWUpfSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJhbHRlcm5hdGl2ZSBuYW1lc1wiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldCwgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IENyb3NzUmVmV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcImNyb3NzUmVmVGFiXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8Q3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gY3Jvc3NyZWZzPXtSZWlmaWVkLmZyb21Kc29uKGRhdGEuZ2V0Q3Jvc3NSZWZlcmVuY2VzKCkpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pfSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJjcm9zcyByZWZlcmVuY2VzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNyb3NzUmVmVGFiKHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRDcm9zc1JlZlRhYldpZGdldChwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8Q3Jvc3NSZWZUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiV2lkZ2V0LCBjcmVhdGVDcm9zc1JlZlRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWR1Y2VyfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVRleHQsIEV1aUljb24sIEV1aVByb3ZpZGVyLCBFdWlDYXJkfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7SGllcmFyY2h5LCBUcmVlTm9kZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtTa29zQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL1Nrb3NBcGlcIjtcbmltcG9ydCB7SGllcmFyY2h5QnVpbGRlcn0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQge09udG9Qb3J0YWxBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT250b1BvcnRhbEFwaVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtyYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXRQcm9wcywgRW50aXR5RGF0YX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtpc0luZGl2aWR1YWxUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjb25zdCBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTID0ge1xuICAgIElOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGZhbHNlLFxuICAgIFBSRUZFUlJFRF9ST09UUzogZmFsc2UsXG4gICAgS0VFUF9FWFBBTlNJT05fU1RBVEVTOiBmYWxzZSxcbiAgICBTSE9XX1NJQkxJTkdTX09OX0lOSVQ6IGZhbHNlLFxuICAgIFVTRV9MRUdBQ1k6IGZhbHNlXG59IGFzIGNvbnN0O1xuXG4vLyBUT0RPOiB1c2Ugb2YgZW50aXR5VHlwZSBoYXMgdG8gYmUgcmV2aWV3ZWQuIEN1cnJlbnRseSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGVudGl0eVR5cGUgb2YgdGhlIGhpZXJhcmNoeSBhbmQgdGhlIHNwZWNpZmljIGVudGl0eSBpbnNpZGUgaXQgYWx3YXlzIG1hdGNoIChub3QgbmVjZXNzYXJpbHkgdHJ1ZSBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcywgYnV0IHRoZXNlIGhhdmUgdG8gYmUgcmV2aWV3ZWQgYW55d2F5cylcbmZ1bmN0aW9uIFRyZWVMaW5rKHByb3BzOiB7ZW50aXR5RGF0YTogRW50aXR5RGF0YSwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nLCBvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIG9uTmF2aWdhdGVUb0VudGl0eT86IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IEVudGl0eURhdGEpID0+IHZvaWQsIG9uTmF2aWdhdGVUb09udG9sb2d5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogRW50aXR5RGF0YSkgPT4gdm9pZCwgaGlnaGxpZ2h0OiBib29sZWFufSkge1xuICAgIGxldCBkZWZpbmVkQnk6IHN0cmluZ1tdID0gcHJvcHMuZW50aXR5RGF0YS5kZWZpbmVkQnkgfHwgW107XG4gICAgaWYoZGVmaW5lZEJ5LmluY2x1ZGVzKHByb3BzLm9udG9sb2d5SWQpKSBkZWZpbmVkQnkgPSBbXTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3Byb3BzLmhpZ2hsaWdodCA/IFwiaGlnaGxpZ2h0XCIgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPT0gXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQkZPXzAwMDAwNTBcIiAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5JbmxpbmVTdGFydDogXCIxLjVweFwiLCBtYXJnaW5Ub3A6IFwiMi41cHhcIn19IGNsYXNzTmFtZT1cInN1cnJvdW5kQ2lyY2xlXCI+Jm5ic3A7UCZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luSW5saW5lU3RhcnQ6IFwiMS41cHhcIiwgbWFyZ2luVG9wOiBcIjIuNXB4XCJ9fSBjbGFzc05hbWU9XCJzdXJyb3VuZENpcmNsZVwiPkk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSkgcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5KHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgcHJvcHMuZW50aXR5RGF0YSl9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHtwcm9wcy5lbnRpdHlEYXRhLmxhYmVsIHx8IHByb3BzLmVudGl0eURhdGEuaXJpfSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7ZGVmaW5lZEJ5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAge2RlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake3Byb3BzLmVudGl0eURhdGEuaXJpfToke2RlZmluaW5nT250b2xvZ3l9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShkZWZpbmluZ09udG9sb2d5LCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHByb3BzLmVudGl0eURhdGEpfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e2RlZmluaW5nT250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBIaWVyYXJjaHlXaWRnZXQocHJvcHM6IEhpZXJhcmNoeVdpZGdldFByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBhcGlVcmwsXG4gICAgICAgIGJhY2tlbmRUeXBlLFxuICAgICAgICBhcGlLZXksXG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eSxcbiAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG5cbiAgICAgICAgaXJpLFxuICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUyxcbiAgICAgICAgcHJlZmVycmVkUm9vdHMgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlBSRUZFUlJFRF9ST09UUyxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuS0VFUF9FWFBBTlNJT05fU1RBVEVTLFxuICAgICAgICBzaG93U2libGluZ3NPbkluaXQgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlNIT1dfU0lCTElOR1NfT05fSU5JVCxcbiAgICAgICAgdXNlTGVnYWN5ID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5VU0VfTEVHQUNZLFxuICAgIH0gPSBwcm9wcztcblxuICAgIC8vIHVzZWQgdG8gbWFudWFsbHkgcmVyZW5kZXIgdGhlIGNvbXBvbmVudCBvbiB1cGRhdGUgb2YgaGllcmFyY2h5IChhcyBoaWVyYXJjaHkgb2JqZWN0IGlzIG5lc3RlZCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgc3RhdGUgdmFyaWFibGUgaXRzZWxmKVxuICAgIGNvbnN0IFssIGZvcmNlVXBkYXRlXSA9IHVzZVJlZHVjZXIoeCA9PiB4ICsgMSAlIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAwKTtcblxuICAgIGNvbnN0IGFwaSA6IEhpZXJhcmNoeUJ1aWxkZXIgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGJhY2tlbmRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9sc1wiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9sc0FwaShhcGlVcmwpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJza29zbW9zXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2tvc0FwaShhcGlVcmwpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvbnRvcG9ydGFsXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT250b1BvcnRhbEFwaShhcGlVcmwsIGFwaUtleSB8fCBcIlwiKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9sc0FwaShhcGlVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbYXBpVXJsLCBiYWNrZW5kVHlwZSwgYXBpS2V5XVxuICAgICk7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IGhpZXJhcmNoeSxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NIaWVyYXJjaHksXG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgW1wiaGllcmFyY2h5U2VtTG9va1BcIiwgaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwcmVmZXJyZWRSb290cywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIGtlZXBFeHBhbnNpb25TdGF0ZXMsIHNob3dTaWJsaW5nc09uSW5pdCwgdXNlTGVnYWN5XSxcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGdldE5ld0hpZXJhcmNoeSgpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgYXBpLmJ1aWxkSGllcmFyY2h5V2l0aElyaSh7XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgICAgICAgIGlyaTogaXJpLFxuICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczoga2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgICAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB0b2dnbGVOb2RlID0gdXNlQ2FsbGJhY2soKG5vZGU6IFRyZWVOb2RlKSA9PiB7XG4gICAgICAgIGlmKCEoaGllcmFyY2h5IGluc3RhbmNlb2YgSGllcmFyY2h5KSkgdGhyb3cgRXJyb3IoXCJIaWVyYXJjaHkgb2JqZWN0IHdhcyB1bmRlZmluZWQgd2hpbGUgdHJ5aW5nIHRvIGV4cGFuZCBhIHRyZWUgbm9kZS4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLlwiKTtcblxuICAgICAgICAvLyBUT0RPOiBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGFyZSBmcm96ZW4gZm9yIG5vdyAoYmVmb3JlIHVuZG9pbmcsIGNvcnJlY3QgY2hpbGQgbG9hZGluZyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMpXG4gICAgICAgIGlmKGhpZXJhcmNoeS5lbnRpdHlUeXBlICYmIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGhpZXJhcmNoeS5lbnRpdHlUeXBlKSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIHRvZ2dsZSBleHBhbnNpb24gc3RhdGUgYW5kIGZvcmNlIGNvbXBvbmVudCB0byByZXJlbmRlciBhZnRlcndhcmRcbiAgICAgICAgbm9kZS5leHBhbmRlZCA9ICFub2RlLmV4cGFuZGVkO1xuXG4gICAgICAgIC8vIGZldGNoIG5lZWRlZCBpbmZvcm1hdGlvbiBhbmQgcmVyZW5kZXIgYWdhaW4gaWYgbmVlZGVkXG4gICAgICAgIGlmKG5vZGUuZXhwYW5kZWQpe1xuICAgICAgICAgICAgbm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGhpZXJhcmNoeS5mZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIGhpZXJhcmNoeS5jbG9zZU5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9LFtoaWVyYXJjaHldKVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyVHJlZU5vZGUoaGllcmFyY2h5OiBIaWVyYXJjaHksIG5vZGU6IFRyZWVOb2RlLCBkcmF3TGluZT86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgPEV1aVRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3toZWlnaHQ6IFwiMjRweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIGJvcmRlckxlZnQ6IFwiMXB4IGRvdHRlZCBibGFja1wiLCBib3JkZXJCb3R0b206IFwiMXB4IGRvdHRlZCBibGFja1wiLCB3aWR0aDogXCIxMnB4XCIsIGhlaWdodDogXCIxNnB4XCIsIGxlZnQ6IFwiNS41cHhcIiwgdG9wOiBcIi0xcHhcIn19PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBib3JkZXJMZWZ0OiBkcmF3TGluZSA/IFwiMXB4IGRvdHRlZCBibGFja1wiOlwiXCIsIHdpZHRoOiBcIjEycHhcIiwgaGVpZ2h0OiBcIjlweFwiLCBsZWZ0OiBcIjUuNXB4XCIsIHRvcDogXCIwcHhcIn19PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCB0b3A6IFwiLTIycHhcIn19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbm9kZS5lbnRpdHlEYXRhLmhhc0NoaWxkcmVuID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcImVtcHR5XCJ9Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3t9fSBvbkNsaWNrPXsoKSA9PiB7dG9nZ2xlTm9kZShub2RlKX19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtub2RlLmV4cGFuZGVkID8gXCJhcnJvd0Rvd25cIiA6IFwiYXJyb3dSaWdodFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJlZUxpbmsgZW50aXR5RGF0YT17bm9kZS5lbnRpdHlEYXRhfSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ9e25vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50fSBvbnRvbG9neUlkPXtoaWVyYXJjaHkub250b2xvZ3lJZH0gZW50aXR5VHlwZT17aGllcmFyY2h5LmVudGl0eVR5cGV9IG9uTmF2aWdhdGVUb0VudGl0eT17b25OYXZpZ2F0ZVRvRW50aXR5fSBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9IGhpZ2hsaWdodD17bm9kZS5lbnRpdHlEYXRhLmlyaSA9PSBoaWVyYXJjaHk/Lm1haW5FbnRpdHlJcml9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtub2RlLmVudGl0eURhdGEubnVtRGVzY2VuZGFudHMgIT0gdW5kZWZpbmVkICYmIG5vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cyA+IDAgJiYgPHNwYW4gc3R5bGU9e3tjb2xvcjogXCJncmF5XCJ9fT4oe25vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpfSk8L3NwYW4+fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIHtub2RlLmV4cGFuZGVkICYmXG4gICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT17e21hcmdpbkJsb2NrRW5kOiBcIjBcIiwgbWFyZ2luSW5saW5lU3RhcnQ6IFwiNS41cHhcIn19PlxuICAgICAgICAgICAgICAgICAgICAgICAge25vZGUubG9hZGluZyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgbGVmdDogXCIxM3B4XCIsIHRvcDogXCI1cHhcIn19Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubG9hZGVkQ2hpbGRyZW4ubWFwKChjaGlsZCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17cmFuZG9tU3RyaW5nKCl9IHN0eWxlPXt7Ym9yZGVyTGVmdDogZHJhd0xpbmUgPyBcIjFweCBkb3R0ZWQgYmxhY2tcIjpcIlwiLCBwYWRkaW5nTGVmdDogXCIxcmVtXCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJUcmVlTm9kZShoaWVyYXJjaHksIGNoaWxkLCBpZHggPCBub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCAtIDEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlDYXJkIHRpdGxlPXtcIlwifSBsYXlvdXQ9e1wiaG9yaXpvbnRhbFwifT5cbiAgICAgICAgICAgIHsoaXNTdWNjZXNzSGllcmFyY2h5ICYmIGhpZXJhcmNoeSAhPSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17e3doaXRlU3BhY2U6IFwibm93cmFwXCJ9fT4gey8qIC8vIFRPRE86IERvZXMgbm90IGdldCBkaXNwbGF5ZWQgY29ycmVjdGx5IG9uIHN0b3J5Ym9vayBtYWluIHBhZ2UgKi99XG4gICAgICAgICAgICAgICAgICAgIHtoaWVyYXJjaHkucm9vdHMubWFwKChyb290Tm9kZSwgaWR4KSA9PiByZW5kZXJUcmVlTm9kZShoaWVyYXJjaHksIHJvb3ROb2RlLCBpZHggPCBoaWVyYXJjaHkucm9vdHMubGVuZ3RoIC0gMSkpfVxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICA6IDxFdWlMb2FkaW5nU3Bpbm5lci8+fVxuICAgICAgICA8L0V1aUNhcmQ+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEhpZXJhcmNoeVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICAgICAgICAgICAgYXBpS2V5PXtwcm9wcy5hcGlLZXl9XG4gICAgICAgICAgICAgICAgICAgIGJhY2tlbmRUeXBlPXtwcm9wcy5iYWNrZW5kVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPXtwcm9wcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllc31cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzPXtwcm9wcy5wcmVmZXJyZWRSb290c31cbiAgICAgICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5zaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7SGllcmFyY2h5V2lkZ2V0LCBjcmVhdGVIaWVyYXJjaHl9OyIsICJpbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9tb2RlbC9SZWlmaWVkXCI7XG5cbnR5cGUgVG9wQ29uY2VwdCA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBsYWJlbD86IHN0cmluZyxcbiAgICB0b3BDb25jZXB0T2Y/OiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxudHlwZSBMYWJlbEFuZFVyaUFuZENoaWxkcmVuID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxudHlwZSBIaWVyYXJjaHlSZXN1bHQgPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcHJlZkxhYmVsOiBzdHJpbmc7XG4gICAgdG9wPzogc3RyaW5nLFxuICAgIGJyb2FkZXI/OiBzdHJpbmdbXSxcbiAgICBuYXJyb3dlcj86IExhYmVsQW5kVXJpQW5kQ2hpbGRyZW5bXVxufTtcblxudHlwZSBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4gPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcHJlZkxhYmVsOiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBub3RhdGlvbj86IHN0cmluZ1xufVxuXG5hYnN0cmFjdCBjbGFzcyBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIge1xuICAgIHN0YXRpYyBmcm9tVG9wQ29uY2VwdChvYmo6IFRvcENvbmNlcHQpIDogRW50aXR5RGF0YUZvckhpZXJhcmNoeSB7XG4gICAgICAgIHJldHVybiAge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5sYWJlbCxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiBvYmouaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICBwYXJlbnRzOiBbXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSGllcmFyY2h5UmVzdWx0KG9iajogSGllcmFyY2h5UmVzdWx0KSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLm5hcnJvd2VyICE9IHVuZGVmaW5lZCAmJiBvYmoubmFycm93ZXIubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ob2JqLmJyb2FkZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVByZWZBbmRVcmlBbmRDaGlsZHJlbihvYmo6IFByZWZBbmRVcmlBbmRDaGlsZHJlbiwgcGFyZW50cz86IHN0cmluZ1tdKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tTGFiZWxBbmRVcmlBbmRDaGlsZHJlbihvYmo6IExhYmVsQW5kVXJpQW5kQ2hpbGRyZW4sIHBhcmVudHM/OiBzdHJpbmdbXSkgOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2tvc0FwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gICAgY29uc3RydWN0b3IoYXBpOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8bmV2ZXI+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldCh1cmwsIGNvbmZpZykpLmRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgU0tPUyBBUEkuXCIpO1xuXG4gICAgICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXVxuICAgICAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICBjb25zdCBicm9hZGVyVHJhbnNpdGl2ZTogSGllcmFyY2h5UmVzdWx0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS9oaWVyYXJjaHlgLCB7cGFyYW1zOiB7dXJpOiBpcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KVxuICAgICAgICAgICAgICAgIC50aGVuKChvYmopID0+IE9iamVjdC5rZXlzKG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdKS5tYXAoKGtleSkgPT4gb2JqW1wiYnJvYWRlclRyYW5zaXRpdmVcIl1ba2V5XSkpXG5cbiAgICAgICAgICAgIC8vIHN0b3JlcyBhbGwgZW50aXRpZXMgYXBwZWFyaW5nIGluIGJyb2FkZXJUcmFuc2l0aXZlXG4gICAgICAgICAgICAvL2NvbnN0IGVudGl0aWVzOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpXG5cbiAgICAgICAgICAgIGZvcihjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkgPSBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIuZnJvbUhpZXJhcmNoeVJlc3VsdChub2RlKTtcblxuICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQobm9kZURhdGEuaXJpLCBub2RlRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYobm9kZS50b3ApIHJvb3RFbnRpdGllcy5wdXNoKG5vZGVEYXRhLmlyaSk7XG5cbiAgICAgICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSBvbkluaXRpYWxQYXRoLmFkZChub2RlRGF0YS5pcmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKGNvbnN0IG5vZGUgb2YgYnJvYWRlclRyYW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICBpZihub2RlLm5hcnJvd2VyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogRW50aXR5RGF0YUZvckhpZXJhcmNoeVtdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLm5hcnJvd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGROb2RlRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGROb2RlLnVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGVEYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZURhdGEgPSBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIuZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4oY2hpbGROb2RlLCBbbm9kZS51cmldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGROb2RlRGF0YS5pcmksIGNoaWxkTm9kZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNoaWxkTm9kZURhdGEucGFyZW50cy5tYXAoKHIpID0+IHIudmFsdWUpLmluY2x1ZGVzKG5vZGUudXJpKSkgY2hpbGROb2RlRGF0YS5wYXJlbnRzLnB1c2goLi4uUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KG5vZGUudXJpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc29ydCgoYSwgYikgPT4gKGEubGFiZWwgfHwgYS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCB8fCBiLmlyaSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChub2RlLnVyaSwgY2hpbGRyZW4ubWFwKChjKSA9PiB7cmV0dXJuIHtjaGlsZElyaTogYy5pcml9fSkpO1xuICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGUudXJpKTsgLy8gaW4gc2tvcywgYWxsIGNoaWxkcmVuIGFyZSBsb2FkZWQgaWYgYW55IGFyZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGNvbmNlcHRzOiBUb3BDb25jZXB0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS90b3BDb25jZXB0c2AsIHtwYXJhbXM6IHtsYW5nOiBcImVuXCIsIGZvcm1hdDogXCJhcHBsaWNhdGlvbi9qc29uXCJ9fSlcbiAgICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBvYmpbXCJ0b3Bjb25jZXB0c1wiXSlcblxuICAgICAgICAgICAgZm9yKGNvbnN0IGNvbmNlcHQgb2YgdG9wY29uY2VwdHMpIHtcbiAgICAgICAgICAgICAgICByb290RW50aXRpZXMucHVzaChjb25jZXB0LnVyaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPik6IFRyZWVOb2RlIHtcbiAgICAgICAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQoZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkICYmIG9uSW5pdGlhbFBhdGguaGFzKGNoaWxkLmNoaWxkSXJpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgU2tvc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgIG1haW5FbnRpdHlJcmk6IGlyaSxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRIaWVyYXJjaHlDaGlsZHJlbihwcm9wczogTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMpOiBQcm9taXNlPEVudGl0eURhdGFGb3JIaWVyYXJjaHlbXT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICBvbnRvbG9neUlkXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBjb25zdCBuYXJyb3dlcjogUHJlZkFuZFVyaUFuZENoaWxkcmVuW10gPSAoYXdhaXQgdGhpcy5tYWtlQ2FsbChgLyR7b250b2xvZ3lJZH0vY2hpbGRyZW5gLCB7cGFyYW1zOiB7dXJpOiBub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KSlbXCJuYXJyb3dlclwiXTtcblxuICAgICAgICByZXR1cm4gbmFycm93ZXIubWFwKChvYmopID0+IFNrb3NFbnRpdHlEYXRhRm9ySGllcmFyY2h5QnVpbGRlci5mcm9tUHJlZkFuZFVyaUFuZENoaWxkcmVuKG9iaiwgW25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaV0pKTtcbiAgICB9XG5cbn0iLCAiaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IGF4aW9zLCB7QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7RW50aXR5RGF0YUZvckhpZXJhcmNoeSwgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZX0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHt1c2VMZWdhY3lBcmdUeXBlfSBmcm9tIFwiLi4vc3Rvcmllcy9zdG9yeUFyZ3NcIjtcblxudHlwZSBIaWVyYXJjaHlOb2RlID0ge1xuICAgIHByZWZMYWJlbDogc3RyaW5nXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdXG4gICAgb2Jzb2xldGU6IGJvb2xlYW4gLy8gVE9ETzogdXNlIHRoaXMgdG8gZW5hYmxlIHNob3dpbmcgb2Jzb2xldGVUZXJtcz9cbiAgICBbXCJAaWRcIl06IHN0cmluZ1xuICAgIFtcIkB0eXBlXCJdOiBzdHJpbmdcbiAgICAvLyBsaW5rczogb2JqZWN0IC0gbm90IG5lZWRlZCBoZXJlXG4gICAgW1wiQGNvbnRleHRcIl06IHtcbiAgICAgICAgW1wiQHZvY2FiXCJdOiBzdHJpbmdcbiAgICAgICAgcHJlZkxhYmVsOiBzdHJpbmdcbiAgICAgICAgb2Jzb2xldGU6IHN0cmluZ1xuICAgICAgICBbXCJAbGFuZ3VhZ2VcIl06IHN0cmluZ1xuICAgIH1cbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShoaWVyYXJjaHlOb2RlOiBIaWVyYXJjaHlOb2RlKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlyaTogaGllcmFyY2h5Tm9kZVtcIkBpZFwiXSxcbiAgICAgICAgbGFiZWw6IGhpZXJhcmNoeU5vZGVbXCJwcmVmTGFiZWxcIl0sXG4gICAgICAgIGhhc0NoaWxkcmVuOiBoaWVyYXJjaHlOb2RlW1wiaGFzQ2hpbGRyZW5cIl0sXG4gICAgICAgIHBhcmVudHM6IFtdXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT250b1BvcnRhbEFwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuICAgIHByaXZhdGUgYXBpS2V5OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZywgYXBpS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSBjb25maWcucGFyYW1zIHx8IHt9O1xuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBhcmFtc1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImFwaWtleVwiXSA9IHRoaXMuYXBpS2V5O1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImZvcm1hdFwiXSA9IFwianNvblwiO1xuXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4pIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgT250b1BvcnRhbCBBUEkuXCIpO1xuICAgICAgICBpZighZW50aXR5VHlwZSkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcblxuICAgICAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgICAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IG9uSW5pdGlhbFBhdGg6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIG9ubHkgdXNlZCBpZiBzaG93U2libGluZ3NPbkluaXQgPT0gZmFsc2VcblxuICAgICAgICBmdW5jdGlvbiBidWlsZFJlbGF0aW9ucyhjdXJyTm9kZTogSGllcmFyY2h5Tm9kZSkge1xuICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShjdXJyTm9kZSkpXG4gICAgICAgICAgICBpZihjdXJyTm9kZS5oYXNDaGlsZHJlbiAmJiBjdXJyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGN1cnJOb2RlW1wiQGlkXCJdLCBjdXJyTm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHtyZXR1cm4ge2NoaWxkSXJpOiBjW1wiQGlkXCJdfX0pKTtcblxuICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGN1cnJOb2RlW1wiQGlkXCJdKTtcblxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjdXJyTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbGF0aW9ucyhjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9wZXJ0eSB3aGljaCBpcyBjaGlsZCBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9ubHkgaXMgcmV0dXJuZWQgaW4gb25lIHBhcmVudCBpbiAvdHJlZSBxdWVyeSAoLT4gZG8gaXQgcmlnaHQgbWFudWFsbHk/KSAoZS5nLjogaHR0cDovL3N3ZWV0b250b2xvZ3kubmV0L3JlbGFUaW1lL2hhc05IVGltZSAtPiBoYXMgbW9yZSB0aGFuIG9uZSBwYXJlbnQsIGJ1dCBpcyBvbmx5IHNob3duIGluIG9uZSBwYXJlbnQgaW4gL3RyZWUpXG4gICAgICAgICAgICBjb25zdCBhcGlfdHJlZTogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlyaSl9L3RyZWVgLCB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuLGNoaWxkcmVuXCJ9fSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCByb290Tm9kZSBvZiBhcGlfdHJlZSkge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnMocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQoaXJpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzIDogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9L3Jvb3RzYCxcbiAgICAgICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHJvb3ROb2RlIG9mIHJvb3RzKSB7XG4gICAgICAgICAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKGVudGl0eURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHksIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+KTogVHJlZU5vZGUge1xuICAgICAgICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob25Jbml0aWFsUGF0aC5oYXMoY2hpbGQuY2hpbGRJcmkpKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgT250b1BvcnRhbEFwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCksIHRoaXMuYXBpS2V5KSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpOiBpcmksXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YUZvckhpZXJhcmNoeVtdPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZihlbnRpdHlUeXBlID09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBwcm92aWRlZCB0byBsb2FkIGNoaWxkcmVuIGluIGFuIE9udG9Qb3J0YWwgaGllcmFyY2h5LlwiKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA6IEhpZXJhcmNoeU5vZGVbXSA9IChhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgZmFsc2UpfS8ke2VuY29kZVVSSUNvbXBvbmVudChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpfS9jaGlsZHJlbmAsXG4gICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICApKVtcImNvbGxlY3Rpb25cIl07XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoY2hpbGQpKTtcbiAgICB9XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgVGl0bGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzT250b2xvZ3kgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IE5PX1RJVExFID0gXCJObyB0aXRsZSBhdmFpbGFibGUuXCI7XG5cbmZ1bmN0aW9uIFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgb250b2xvZ3lJZCxcbiAgICBhcGksXG4gICAgdGl0bGVUZXh0LFxuICAgIHRoaW5nVHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiZGVmYXVsdC1jbGFzc1wiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcInRpdGxlRGF0YVwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0aXRsZVRleHQgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGVUZXh0PXt0aXRsZVRleHR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGU9e2lzT250b2xvZ3koZGF0YSkgPyBkYXRhLmdldE5hbWUoKSA6IGRhdGEuZ2V0TGFiZWwoKX0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNMb2FkaW5nICYmIChkZWZhdWx0VmFsdWUgPyAoXG4gICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPilcbiAgICAgICAgOiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPilcbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNFcnJvciAmJiAoZGVmYXVsdFZhbHVlID9cbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPiA6XG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwidGl0bGVcIil9PC9FdWlUZXh0Pil9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKHByb3BzOiBUaXRsZVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxUaXRsZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgdGl0bGVUZXh0PXtwcm9wcy50aXRsZVRleHR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXtwcm9wcy5kZWZhdWx0VmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGl0bGVXaWRnZXQsIGNyZWF0ZVRpdGxlIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7VGl0bGVQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBUaXRsZVByZXNlbnRhdGlvbihwcm9wczogVGl0bGVQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIHJldHVybiAoXG4gICAgPEV1aVRleHQgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9Pntwcm9wcy50aXRsZVRleHQgfHwgcHJvcHMudGl0bGV9PC9FdWlUZXh0PlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBJcmlXaWRnZXQgfSBmcm9tIFwiLi9JcmlXaWRnZXRcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtNZXRhZGF0YVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UaXRsZVdpZGdldC9UaXRsZVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lLCBpc0VudGl0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtjcmVhdGVNb2RlbE9iamVjdCwgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9ufSBmcm9tIFwiLi9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb259IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIlxuXG50eXBlIE1ldGFkYXRhSW5mbyA9IHtcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBvbnRvTGlzdDogc3RyaW5nW10sXG4gICAgZGVmaW5lZEJ5OiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvT250b2xvZ3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxNZXRhZGF0YUluZm8+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZW50aXR5OiBFbnRpdHksIG9udG9MaXN0OiBzdHJpbmdbXSwgZGVmaW5lZEJ5OiBzdHJpbmdbXTtcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBlbnRpdHkgPSBjcmVhdGVNb2RlbE9iamVjdCh7IFwiX2VtYmVkZGVkXCI6IHsgW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV06IGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLCB1c2VMZWdhY3ksIG9udG9sb2d5SWQpIH19KSBhcyBFbnRpdHk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSk7XG4gICAgICAgICAgICBkZWZpbmVkQnkgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVudGl0eS5nZXRBcHBlYXJzSW4oKTtcbiAgICAgICAgICAgIGRlZmluZWRCeSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcbiAgICAgICAgfVxuICAgICAgICBvbnRvTGlzdCA9IG9udG9MaXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG4gICAgICAgIGRlZmluZWRCeSA9IGRlZmluZWRCeS5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgb250b0xpc3Q6IG9udG9MaXN0LFxuICAgICAgICAgICAgZGVmaW5lZEJ5OiBkZWZpbmVkQnlcbiAgICAgICAgfSBhcyBNZXRhZGF0YUluZm87XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBNZXRhZGF0YUluZm8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkIHx8IGRhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lOYW1lPXtkYXRhLmVudGl0eS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgICAgIHNob3J0Rm9ybT17ZGF0YS5lbnRpdHkuZ2V0U2hvcnRGb3JtKCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlGbGV4R3JvdXAgZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvblxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17ZGF0YS5lbnRpdHkuZ2V0RGVzY3JpcHRpb24oKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMCAxMnB4IDBcIiwgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgICAgPEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uIGlyaT17cHJvcHMuaXJpfSBsYWJlbD17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwifSBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZW50aXR5VHlwZSB8fCBkYXRhLmVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWV9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX0gLz5cbiAgICAgICAgICAgICAgPEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiBpcmk9e3Byb3BzLmlyaX0gb250b2xpc3Q9e2RhdGEuZGVmaW5lZEJ5fSBsYWJlbD17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKSB8fCBcIlwifSBlbnRpdHlUeXBlPXtlbnRpdHlUeXBlIHx8IGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8VGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YS5lbnRpdHl9XG4gICAgICAgICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkID8gcHJvcHMub250b2xvZ3lJZCA6IGRhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwibWV0YWRhdGFcIil9PC9FdWlUZXh0Pn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8PlxuICAgICAgICAgIHtpc0VudGl0eShkYXRhLmVudGl0eSkgPyByZW5kZXIoZGF0YSkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGEocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkTWV0YWRhdGFXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxNZXRhZGF0YVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBNZXRhZGF0YVdpZGdldCwgY3JlYXRlTWV0YWRhdGEgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gICAgY29uc3QgW2FwcGVhcnNJbkV4cGFuZGVkLCBzZXRBcHBlYXJzSW5FeHBhbmRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5LCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHsgaXJpOiBwcm9wcy5pcmksIGxhYmVsOiBwcm9wcy5sYWJlbCB9KX19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZXMoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZICYmICFhcHBlYXJzSW5FeHBhbmRlZD9cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xpc3Quc2xpY2UoMCwgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSkubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCIgb25DbGljaz17KCkgPT4gc2V0QXBwZWFyc0luRXhwYW5kZWQodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKyB7cHJvcHMub250b2xpc3QubGVuZ3RoIC0gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC8+IDpcblxuICAgICAgICAgICAgICAgIHByb3BzLm9udG9saXN0Lm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiBcIm5vcm1hbFwifX0+XG4gICAgICAgICAgICAgICAgQWxzbyBhcHBlYXJzIGluJm5ic3A7XG4gICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZXMoKX1cbiAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24ocHJvcHM6IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICAgIGNvbnN0IFthcHBlYXJzSW5FeHBhbmRlZCwgc2V0QXBwZWFyc0luRXhwYW5kZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZShvbnRvbG9neTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCB7IGlyaTogcHJvcHMuaXJpLCBsYWJlbDogcHJvcHMubGFiZWwgfSl9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgcHJvcHMub250b2xpc3QubGVuZ3RoID4gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSAmJiAhYXBwZWFyc0luRXhwYW5kZWQ/XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xpc3Quc2xpY2UoMCwgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSkubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiZXhwYW5kLW9udG8tbGlzdFwiIG9uQ2xpY2s9eygpID0+IHNldEFwcGVhcnNJbkV4cGFuZGVkKHRydWUpfT5cbiAgICAgICAgICAgICAgICAgICAgICArIHtwcm9wcy5vbnRvbGlzdC5sZW5ndGggLSBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvPiA6XG5cbiAgICAgICAgICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIHtwcm9wcy5vbnRvbGlzdCAmJiBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogXCJub3JtYWxcIn19PlxuICAgICAgICAgICAgICAgIERlZmluZWQgYnkmbmJzcDtcbiAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgIDwvPlxuXG4gICk7XG59XG5cbmV4cG9ydCB7IEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVNwYWNlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7T250b2xvZ3ksIFRoaW5nfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtjYXBpdGFsaXplLCBkZUNhbWVsQ2FzZSwgZGVVbmRlcnNjb3JlLCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheX0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge09udG9sb2d5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBvbnRvbG9neUlkLCBhcGksIHBhcmFtZXRlciwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgdXNlTGVnYWN5LCBzaG93QmFkZ2VzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9neSxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ09udG9sb2d5LFxuICAgIGlzU3VjY2VzczogaXNTdWNjZXNzT250b2xvZ3ksXG4gICAgaXNFcnJvcjogaXNFcnJvck9udG9sb2d5LFxuICAgIGVycm9yOiBlcnJvck9udG9sb2d5LFxuICB9ID0gdXNlUXVlcnkoXG4gICAgICBbXG4gICAgICAgIFwib250b2xvZ3lJbmZvXCIsXG4gICAgICAgIHByb3BzXG4gICAgICBdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHsob250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCkpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5PbnRvbG9neSBJUkk6PC9iPlxuICAgICAgICAgICAgICAgIDxwPjxhIGlkPXtcIm9udG9sb2d5SXJpXCJ9IGhyZWY9e29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKX1cbiAgICAgICAgICAgICAgICA8L2E+PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcnNpb25JcmlTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb25JcmkoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+VmVyc2lvbiBJUkk6PC9iPlxuICAgICAgICAgICAgICAgIDxwPjxhIGlkPXtcInZlcnNpb25JcmlcIn0gaHJlZj17b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpfT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9XG4gICAgICAgICAgICAgICAgPC9hPjwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMYXN0TG9hZFNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5MYXN0IGxvYWRlZDo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e25ldyBEYXRlKG9udG9sb2d5LmdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKSkudG9TdHJpbmcoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0T250b2xvZ3lJZFNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5PbnRvbG9neSBJRDo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldE9udG9sb2d5SWQoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbigpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5WZXJzaW9uOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0VmVyc2lvbigpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk51bWJlciBvZiBjbGFzc2VzOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLnRvTG9jYWxlU3RyaW5nKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENyZWF0b3JzU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+Q3JlYXRvcnM6PC9iPlxuICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICA8dWw+e29udG9sb2d5LmdldENyZWF0b3JzKCkubWFwKChjcmVhdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2NyZWF0b3IgKyByYW5kb21TdHJpbmcoKX0+e2dldEVudGl0eUxpbmtKU1gob250b2xvZ3ksIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksIGNyZWF0b3IsIGFwaSwgc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICA8cD57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgb250b2xvZ3kuZ2V0Q3JlYXRvcnMoKVswXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjxFdWlTcGFjZXIvPjwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICAgICAgICBpZihhbm5vcy5sZW5ndGggPT0gMCkgcmV0dXJuIDw+PC8+O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyBcIk9udG9sb2d5IEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgID5cblxuICAgICAgICAgIHtpc0xvYWRpbmdPbnRvbG9neSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgIHtpc1N1Y2Nlc3NPbnRvbG9neSAmJiBvbnRvbG9neSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cblxuICAgICAgICAgICAgICAgIHtnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAge2dldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgey8qIFRPRE86IERvIHdlIHdhbnQgdGhlIGZvbGxvd2luZyBvbiB0aGUgaW5mb3JtYXRpb24gd2lkZ2V0P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWJpIGRvZXMgbm90IGhhdmUgdGhlbSB0aGVyZSwgYnV0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBlbnRpdHkgcGFnZSAqL1xuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAge2dldFZlcnNpb25TZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAge2dldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgey8qe2dldENyZWF0b3JzU2VjdGlvbihlbnRpdHlJbmZvKX0qLyAvKiByZWR1bmRhbnQgYXMgaXQncyBsaXN0ZWQgaW4gYW5ub3RhdGlvbnMgYW55d2F5ICovfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgICB7aXNFcnJvck9udG9sb2d5ICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3JPbnRvbG9neSwgXCJpbmZvcm1hdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICA8Lz5cbiAgKTtcblxufVxuXG5mdW5jdGlvbiBjcmVhdGVPbnRvbG9neUluZm8ocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRPbnRvbG9neUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8T250b2xvZ3lJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IE9udG9sb2d5SW5mb1dpZGdldCwgY3JlYXRlT250b2xvZ3lJbmZvIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBDb21wYXJhdG9ycyxcbiAgQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbixcbiAgRXVpQmFzaWNUYWJsZSxcbiAgRXVpQnV0dG9uSWNvbixcbiAgRXVpSG9yaXpvbnRhbFJ1bGUsXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlMaW5rLFxuICBFdWlTcGFjZXIsXG4gIEV1aVRleHRcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGNzcywgU2VyaWFsaXplZFN0eWxlcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgRXVpQmFzaWNUYWJsZUNvbHVtbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYmFzaWNfdGFibGVcIjtcbmltcG9ydCB7IE9sc1Jlc291cmNlLCBSZXNvdXJjZXNXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9udG9sb2dpZXMgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9JTklUSUFMX0VOVFJJRVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxEID0gXCJjb25maWcucHJlZmVycmVkUHJlZml4XCI7XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9ESVIgPSBcImFzY1wiIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBSZXNvdXJjZXNXaWRnZXQocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgaW5pdGlhbEVudHJpZXNQZXJQYWdlID0gREVGQVVMVF9JTklUSUFMX0VOVFJJRVNfUEVSX1BBR0UsXG4gICAgcGFnZVNpemVPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICBpbml0aWFsU29ydEZpZWxkID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRklFTEQsXG4gICAgaW5pdGlhbFNvcnREaXIgPSBERUZBVUxUX0lOSVRJQUxfU09SVF9ESVIsXG4gICAgdGFyZ2V0TGluayxcbiAgICBwYXJhbWV0ZXIsXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IFtwYWdlSW5kZXgsIHNldFBhZ2VJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3BhZ2VTaXplLCBzZXRQYWdlU2l6ZV0gPSB1c2VTdGF0ZShpbml0aWFsRW50cmllc1BlclBhZ2UpO1xuICBjb25zdCBbc29ydEZpZWxkLCBzZXRTb3J0RmllbGRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVtYmVyPihpbml0aWFsU29ydEZpZWxkKTtcbiAgY29uc3QgW3NvcnREaXJlY3Rpb24sIHNldFNvcnREaXJlY3Rpb25dID0gdXNlU3RhdGUoaW5pdGlhbFNvcnREaXIpO1xuXG5cbiAgY29uc3QgY29sdW1uczogQXJyYXk8RXVpQmFzaWNUYWJsZUNvbHVtbjxPbHNSZXNvdXJjZT4gJiB7IGNzcz86IFNlcmlhbGl6ZWRTdHlsZXMgfT4gPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJSZXNvdXJjZSBOYW1lXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcudGl0bGVcIixcbiAgICAgIHdpZHRoOiBcIjE1JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiU2hvcnQgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwib250b2xvZ3lJZFwiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IHN0cmluZykgPT4gKFxuICAgICAgICB0YXJnZXRMaW5rID8gPEV1aUxpbmsgaHJlZj17dGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHZhbHVlICsgXCIvXCJ9Pnt2YWx1ZX08L0V1aUxpbms+IDogdmFsdWVcbiAgICAgICksXG4gICAgICB3aWR0aDogXCIxMCVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkRlc2NyaXB0aW9uXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcuZGVzY3JpcHRpb25cIixcbiAgICAgIHdpZHRoOiBcIjMwJVwiLFxuICAgICAgY3NzOiBjc3NgXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBgXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlZlcnNpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy52ZXJzaW9uXCIsXG4gICAgICB3aWR0aDogXCI3LjUlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiTG9hZGVkIG9uXCIsXG4gICAgICBmaWVsZDogXCJsb2FkZWRcIixcbiAgICAgIHdpZHRoOiBcIjEwJVwiLFxuICAgICAgZGF0YVR5cGU6IFwiZGF0ZVwiIGFzIGNvbnN0LFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVGVybXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mVGVybXNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZQcm9wZXJ0aWVzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkluZGl2aWR1YWxzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZkluZGl2aWR1YWxzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICB3aWR0aDogXCI1JVwiLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAuLi4ocHJvcHMuYWN0aW9ucyB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICByZW5kZXI6IChpdGVtOiBPbHNSZXNvdXJjZSkgPT4gKFxuICAgICAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICAgICAgaHJlZj17aXRlbS5jb25maWcuZmlsZUxvY2F0aW9ufVxuICAgICAgICAgICAgICBpY29uVHlwZT1cImRvd25sb2FkXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRvd25sb2FkXCJcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgIWl0ZW0uY29uZmlnLmFsbG93RG93bmxvYWQgfHxcbiAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24uc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgY29uc3Qgb25UYWJsZUNoYW5nZSA9ICh7XG4gICAgcGFnZSxcbiAgICBzb3J0LFxuICB9OiBDcml0ZXJpYVdpdGhQYWdpbmF0aW9uPE9sc1Jlc291cmNlPikgPT4ge1xuICAgIGNvbnN0IHsgaW5kZXg6IHBhZ2VJbmRleCwgc2l6ZTogcGFnZVNpemUgfSA9IHBhZ2U7XG4gICAgc2V0UGFnZUluZGV4KHBhZ2VJbmRleCk7XG4gICAgc2V0UGFnZVNpemUocGFnZVNpemUpO1xuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIGNvbnN0IHsgZmllbGQ6IHNvcnRGaWVsZCwgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIH0gPSBzb3J0O1xuICAgICAgc2V0U29ydEZpZWxkKHNvcnRGaWVsZCk7XG4gICAgICBzZXRTb3J0RGlyZWN0aW9uKHNvcnREaXJlY3Rpb24pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ2llc0RhdGEsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgaXNMb2FkaW5nXG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cblxuICBjb25zdCBvbnRvcyA9IG9udG9sb2dpZXNEYXRhPy5wcm9wZXJ0aWVzLm1hcChvbnRvbG9neSA9PiAoe1xuICAgIC4uLm9udG9sb2d5LnByb3BlcnRpZXNcbiAgfSkpIHx8IFtdO1xuY29uc29sZS5sb2cob250b3MpXG4gIGNvbnN0IGZpbmRPbnRvbG9naWVzID0gKFxuICAgIG9udG9sb2dpZXM6IGFueVtdLFxuICAgIHBhZ2VJbmRleDogbnVtYmVyLFxuICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICAgc29ydEZpZWxkOiBhbnksXG4gICAgc29ydERpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiXG4gICkgPT4ge1xuICAgIGxldCBpdGVtcztcblxuICAgIGlmIChzb3J0RmllbGQpIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llc1xuICAgICAgICAuc2xpY2UoMClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgQ29tcGFyYXRvcnMucHJvcGVydHkoc29ydEZpZWxkLCBDb21wYXJhdG9ycy5kZWZhdWx0KHNvcnREaXJlY3Rpb24pKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IG9udG9sb2dpZXM7XG4gICAgfVxuXG4gICAgbGV0IHBhZ2VPZkl0ZW1zO1xuXG4gICAgaWYgKCFwYWdlSW5kZXggJiYgIXBhZ2VTaXplKSB7XG4gICAgICBwYWdlT2ZJdGVtcyA9IGl0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZUluZGV4ICogcGFnZVNpemU7XG4gICAgICBwYWdlT2ZJdGVtcyA9IGl0ZW1zLnNsaWNlKFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIG9udG9sb2dpZXMubGVuZ3RoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZU9mSXRlbXMsXG4gICAgICB0b3RhbEl0ZW1Db3VudDogb250b2xvZ2llcy5sZW5ndGhcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHsgcGFnZU9mSXRlbXMsIHRvdGFsSXRlbUNvdW50IH0gPSBmaW5kT250b2xvZ2llcyhcbiAgICBvbnRvcyxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnREaXJlY3Rpb25cbiAgKTtcblxuICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICB0b3RhbEl0ZW1Db3VudCxcbiAgICBwYWdlU2l6ZU9wdGlvbnNcbiAgfTtcblxuICBjb25zdCByZXN1bHRzQ291bnQgPVxuICAgIHBhZ2VTaXplID09PSAwID8gKFxuICAgICAgPHN0cm9uZz5BbGw8L3N0cm9uZz5cbiAgICApIDogKFxuICAgICAgPD5cbiAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICB7cGFnZVNpemUgKiBwYWdlSW5kZXggKyAxfS17cGFnZVNpemUgKiBwYWdlSW5kZXggKyBwYWdlU2l6ZX1cbiAgICAgICAgPC9zdHJvbmc+e1wiIFwifVxuICAgICAgICBvZiB7dG90YWxJdGVtQ291bnR9XG4gICAgICA8Lz5cbiAgICApO1xuXG5cbiAgY29uc3Qgc29ydGluZyA9IHtcbiAgICBzb3J0OiB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uXG4gICAgfVxuICB9O1xuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICA8PlxuICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAgU2hvd2luZyB7cmVzdWx0c0NvdW50fSA8c3Ryb25nPk9udG9sb2dpZXM8L3N0cm9uZz5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgbG9hZGluZ1xuICAgICAgICAvPlxuXG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJlxuICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcInJlc291cmNlc1wiKX1cbiAgICAgICAgICAqL1xuICAgICAgICAvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRSZXNvdXJjZXNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8UmVzb3VyY2VzV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpbml0aWFsRW50cmllc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxFbnRyaWVzUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zPXtwcm9wcy5wYWdlU2l6ZU9wdGlvbnN9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RmllbGQ9e3Byb3BzLmluaXRpYWxTb3J0RmllbGR9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RGlyPXtwcm9wcy5pbml0aWFsU29ydERpcn1cbiAgICAgICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgICAgICAgYWN0aW9ucz17cHJvcHMuYWN0aW9uc31cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBSZXNvdXJjZXNXaWRnZXQsIGNyZWF0ZVJlc291cmNlcyB9O1xuIiwgImltcG9ydCB7IEV1aUNvbWJvQm94LCBFdWlQcm92aWRlciwgRXVpU3VnZ2VzdCwgRXVpU3VnZ2VzdGlvblByb3BzIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IFNlYXJjaEJhcldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcblxuZnVuY3Rpb24gU2VhcmNoQmFyV2lkZ2V0KHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIHF1ZXJ5LFxuICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudCxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIC8qKlxuICAgKiBzdWdnZXN0aW9uc1xuICAgKi9cbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KCk7XG5cbiAgLyoqXG4gICAqIHNlbGVjdGVkIHN1Z2dlc3Rpb24gKG9uIGNsaWNrKVxuICAgKi9cbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvKipcbiAgICogY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICovXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nPihxdWVyeSk7XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSAoc2VsZWN0ZWRPcHRpb246IEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+KSA9PiB7XG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWRPcHRpb24pO1xuICB9O1xuXG4gIGNvbnN0IG9uQ3JlYXRlT3B0aW9uID0gKHNlYXJjaFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3T3B0aW9uOiBBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+PiA9IFt7XG4gICAgICBsYWJlbDogc2VhcmNoVmFsdWVcbiAgICB9XTtcblxuICAgIHNldFNlbGVjdGVkKG5ld09wdGlvbik7XG4gIH07XG5cblxuICAvKipcbiAgICogZmV0Y2hlcyBzdWdnZXN0aW9ucyB3aGVuIHNlYXJjaFZhbHVlIGNoYW5nZXNcbiAgICovXG4gIGNvbnN0IHtcbiAgICBpc0xvYWRpbmdcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcbiAgICAgIFwic3VnZ2VzdGlvbnNcIixcbiAgICAgIHNlYXJjaFZhbHVlXG4gICAgXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNlYXJjaFZhbHVlLnRyaW0oKSkge1xuICAgICAgICByZXR1cm47IC8vIEV4aXQgZWFybHkgaWYgc2VhcmNoVmFsdWUgaXMgZW1wdHlcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbHNBcGkuc3VnZ2VzdChcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5OiBzZWFyY2hWYWx1ZVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZSAmJiByZXNwb25zZS5yZXNwb25zZS5kb2NzKSB7XG4gICAgICAgICAgc2V0T3B0aW9ucyhyZXNwb25zZS5yZXNwb25zZS5kb2NzLm1hcCgoc3VnZ2VzdGlvbjogYW55KSA9PiAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiBzdWdnZXN0aW9uLmF1dG9zdWdnZXN0LFxuICAgICAgICAgICAgICB0eXBlOiB7IGNvbG9yOiBcInRpbnQxXCIsIGljb25UeXBlOiBcIlwiIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogT25jZSB0aGUgc2VsZWN0ZWQgb3B0aW9uIGNoYW5nZXMsIHBhc3MgdGhlIGV2ZW50IGJ5IGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5tYXAoKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFiZWw6IHNlbGVjdGVkT3B0aW9uLmxhYmVsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ29tYm9Cb3hcbiAgICAgICAgaWQ9e1wic3VnZ2VzdFwifVxuICAgICAgICBpc0NsZWFyYWJsZVxuICAgICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgICBhc3luYz17dHJ1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e1wiU2VhcmNoXCJ9XG4gICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3RydWV9XG4gICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBvbkNyZWF0ZU9wdGlvbj17b25DcmVhdGVPcHRpb259XG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlPXsoaXRlbSkgPT4ge1xuICAgICAgICAgIHNldFNlYXJjaFZhbHVlKGl0ZW0pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoQmFyKHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaEJhcldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzOiBTZWFyY2hCYXJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxTZWFyY2hCYXJXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBxdWVyeT17cHJvcHMucXVlcnl9XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXtwcm9wcy5zZWxlY3Rpb25DaGFuZ2VkRXZlbnR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgU2VhcmNoQmFyV2lkZ2V0LCBjcmVhdGVTZWFyY2hCYXIgfTtcbiIsICJpbXBvcnQge1xuICBFdWlCdXR0b25FbXB0eSxcbiAgRXVpRmxleEdyb3VwLFxuICBFdWlGbGV4SXRlbSxcbiAgRXVpRm9ybVJvdyxcbiAgRXVpSG9yaXpvbnRhbFJ1bGUsXG4gIEV1aUxvYWRpbmdTcGlubmVyLFxuICBFdWlQYW5lbCwgRXVpUHJvdmlkZXIsXG4gIEV1aVNlbGVjdGFibGUsXG4gIEV1aVNlbGVjdGFibGVPcHRpb24sXG4gIEV1aVNwYWNlcixcbiAgRXVpU3dpdGNoLFxuICBFdWlUYWJsZVBhZ2luYXRpb24sXG4gIEV1aVRleHRcbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IE1ldGFkYXRhQ29tcGFjdCB9IGZyb20gXCIuL01ldGFkYXRhQ29tcGFjdFwiO1xuaW1wb3J0IHsgU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEF1dG9jb21wbGV0ZVdpZGdldCB9IGZyb20gXCIuLi9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJXaWRnZXQgfSBmcm9tIFwiLi4vU2VhcmNoQmFyV2lkZ2V0XCI7XG5cbmNvbnN0IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSA9IDEwO1xuY29uc3QgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyA9IFsxMCwgMjUsIDUwLCAxMDBdO1xuXG5mdW5jdGlvbiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIHF1ZXJ5LFxuICAgIHBhcmFtZXRlcixcbiAgICBpbml0aWFsSXRlbXNQZXJQYWdlID0gREVGQVVMVF9JTklUSUFMX0lURU1TX1BFUl9QQUdFLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICAgIHRhcmdldExpbmssXG4gICAgcHJlc2VsZWN0ZWQsXG4gICAgdXNlTGVnYWN5ID0gdHJ1ZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUocXVlcnkpO1xuICBjb25zdCBbYWN0aXZlUGFnZSwgc2V0QWN0aXZlUGFnZV0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3BhZ2VDb3VudCwgc2V0UGFnZUNvdW50XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbaXRlbXNQZXJQYWdlLCBzZXRJdGVtc1BlclBhZ2VdID0gdXNlU3RhdGUoaW5pdGlhbEl0ZW1zUGVyUGFnZSk7XG4gIGNvbnN0IFt0b3RhbEl0ZW1zLCBzZXRUb3RhbEl0ZW1zXSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbZXhhY3RNYXRjaCwgc2V0RXhhY3RNYXRjaF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93T2Jzb2xldGVUZXJtcywgc2V0U2hvd09ic29sZXRlVGVybXNdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZmlsdGVyQnlUeXBlT3B0aW9ucywgc2V0RmlsdGVyQnlUeXBlT3B0aW9uc10gPSB1c2VTdGF0ZTxFdWlTZWxlY3RhYmxlT3B0aW9uW10+KFtdKTtcbiAgY29uc3QgW2ZpbHRlckJ5T250b2xvZ3lPcHRpb25zLCBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc10gPSB1c2VTdGF0ZTxFdWlTZWxlY3RhYmxlT3B0aW9uW10+KFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKHF1ZXJ5KTtcbiAgfSwgW3F1ZXJ5XSk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmlsdGVyT3B0aW9ucyhjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLCBvcHRpb25Db3VudHM6IGFueVtdLCBzZXRPcHRpb25zOiBGdW5jdGlvbiwgcmVuZGVyPzogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgIGlmIChjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgc2V0T3B0aW9ucyhvcHRpb25Db3VudHMucmVkdWNlKChhY2N1bXVsYXRvcjogYW55W10sIGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogcmVuZGVyID8gcmVuZGVyKGN1cnJlbnRWYWx1ZSkgOiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBrZXk6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGFwcGVuZDogXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXSArIFwiKVwiLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGFycmF5W2N1cnJlbnRJbmRleCArIDFdID09IDAsXG4gICAgICAgICAgICBkYXRhOiB7IHRvdGFsQ291bnQ6IGFycmF5W2N1cnJlbnRJbmRleCArIDFdIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9LCBbXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3T3B0aW9ucy5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRPcHRpb25zW2ldKSk7IC8vIHVzaW5nIE9iamVjdC5hc3NpZ24gdG8gcGFzcyBieSB2YWx1ZSwgbm90IGJ5IHJlZmVyZW5jZVxuICAgICAgfVxuXG4gICAgICBvcHRpb25Db3VudHMuZm9yRWFjaCgoY3VycmVudFZhbHVlOiBzdHJpbmcsIGN1cnJlbnRJbmRleDogbnVtYmVyLCBhcnJheTogYW55W10pID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSBuZXdPcHRpb25zLmZpbmQoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSA9PSBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgPSBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdO1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5kYXRhICYmIGFycmF5W2N1cnJlbnRJbmRleCArIDFdIDwgb3B0aW9uLmRhdGEudG90YWxDb3VudCkge1xuICAgICAgICAgICAgICBvcHRpb24uYXBwZW5kICs9IFwiL1wiICsgb3B0aW9uLmRhdGEudG90YWxDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgKz0gXCIpXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldE9wdGlvbnMobmV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmlsdGVyU2VsZWN0ZWRPcHRpb25zID0gKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmNoZWNrZWQgPT09IFwib25cIjtcblxuICBjb25zdCB7XG4gICAgZGF0YTogc2VhcmNoUmVzdWx0cyxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcbiAgICAgIFwic2VhcmNoUmVzdWx0c1wiLFxuICAgICAgYXBpLFxuICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICBleGFjdE1hdGNoLFxuICAgICAgc2hvd09ic29sZXRlVGVybXMsXG4gICAgICBhY3RpdmVQYWdlLFxuICAgICAgaXRlbXNQZXJQYWdlLFxuICAgICAgZmlsdGVyQnlUeXBlT3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSksXG4gICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSksXG4gICAgICBwYXJhbWV0ZXJcbiAgICBdLFxuICAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLnNlYXJjaChcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5OiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBleGFjdE1hdGNoOiBleGFjdE1hdGNoLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZVRlcm1zOiBzaG93T2Jzb2xldGVUZXJtcyxcbiAgICAgICAgICB0eXBlczogZmlsdGVyQnlUeXBlT3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSkuam9pbihcIixcIiksXG4gICAgICAgICAgb250b2xvZ3k6IGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KS5qb2luKFwiLFwiKSxcbiAgICAgICAgICBncm91cEJ5SXJpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYWdlOiBhY3RpdmVQYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgc2l6ZTogaXRlbXNQZXJQYWdlLnRvU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXIsXG4gICAgICAgIHNpZ25hbFxuICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2VbXCJyZXNwb25zZVwiXSAmJiByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wiZG9jc1wiXSAhPSBudWxsICYmIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdICYmIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgZmlsdGVyQnlUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcInR5cGVcIl0sXG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGAke2N1cnJlbnRWYWx1ZVswXS50b1VwcGVyQ2FzZSgpfSR7Y3VycmVudFZhbHVlLnNsaWNlKDEpfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lfbmFtZVwiXSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lfbmFtZVwiXSxcbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBjdXJyZW50VmFsdWUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5SWRcIl0pIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5SWRcIl0sXG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gY3VycmVudFZhbHVlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VG90YWxJdGVtcyhyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0pO1xuICAgICAgICAgIGNvbnN0IG5ld1BhZ2VDb3VudCA9IE1hdGguY2VpbChyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gLyBpdGVtc1BlclBhZ2UpO1xuICAgICAgICAgIHNldFBhZ2VDb3VudChuZXdQYWdlQ291bnQpO1xuICAgICAgICAgIGlmIChhY3RpdmVQYWdlID49IG5ld1BhZ2VDb3VudCkge1xuICAgICAgICAgICAgc2V0QWN0aXZlUGFnZSgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2UuZG9jcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIEFQSSByZXNwb25zZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB7XG4gICAgICBrZWVwUHJldmlvdXNEYXRhOiB0cnVlXG4gICAgfSAvLyBTZWU6IGh0dHBzOi8vcmVhY3QtcXVlcnktdjMudGFuc3RhY2suY29tL2d1aWRlcy9wYWdpbmF0ZWQtcXVlcmllc1xuICApO1xuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZTogbnVtYmVyKSB7XG4gICAgc2V0QWN0aXZlUGFnZShNYXRoLmZsb29yKChhY3RpdmVQYWdlICogaXRlbXNQZXJQYWdlICsgMSkgLyBuZXdJdGVtc1BlclBhZ2UpKTtcbiAgICBzZXRJdGVtc1BlclBhZ2UobmV3SXRlbXNQZXJQYWdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZUV4YWN0TWF0Y2goKSB7XG4gICAgc2V0RXhhY3RNYXRjaCghZXhhY3RNYXRjaCk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVTaG93T2Jzb2xldGVUZXJtcygpIHtcbiAgICBzZXRTaG93T2Jzb2xldGVUZXJtcyghc2hvd09ic29sZXRlVGVybXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJGaWx0ZXIoY3VycmVudE9wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSwgc2V0T3B0aW9uczogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLmN1cnJlbnRPcHRpb25zXTtcbiAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+ICh7IC4uLm9wdGlvbiwgY2hlY2tlZDogdW5kZWZpbmVkIH0pKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlUeXBlT3B0aW9ucywgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyk7XG4gICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybV90b19zZWFyY2hWYWx1ZShzZWxlY3RlZE9wdGlvbjoge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgaXJpPzogc3RyaW5nO1xuICAgIG9udG9sb2d5X25hbWU/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZ1xuICB9W10pIHtcbiAgICBzZXRTZWFyY2hWYWx1ZShzZWxlY3RlZE9wdGlvblswXSA/IHNlbGVjdGVkT3B0aW9uWzBdLmxhYmVsIDogXCJcIik7XG4gIH1cblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTZWFyY2hCYXJXaWRnZXRcbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIHF1ZXJ5PXtcIlwifVxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9eyhzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgICAgIHRyYW5zZm9ybV90b19zZWFyY2hWYWx1ZShzZWxlY3RlZE9wdGlvbik7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXszfSBzdHlsZT17eyBtaW5XaWR0aDogMjUwIH19PlxuICAgICAgICAgIDxFdWlQYW5lbD5cbiAgICAgICAgICAgIHtpc1N1Y2Nlc3MgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtmaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aXNFcnJvciAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtpc1N1Y2Nlc3MgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aXNFcnJvciAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCwgc2VhcmNoKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAge3NlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgICB7bGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8RXVpQnV0dG9uRW1wdHlcbiAgICAgICAgICAgICAgb25DbGljaz17Y2xlYXJBbGxGaWx0ZXJzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDbGVhciBhbGwgZmlsdGVyc1xuICAgICAgICAgICAgPC9FdWlCdXR0b25FbXB0eT5cbiAgICAgICAgICA8L0V1aVBhbmVsPlxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuXG4gICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXs3fT5cbiAgICAgICAgICA8RXVpUGFuZWwgY29sb3I9XCJ0cmFuc3BhcmVudFwiIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgPEV1aVN3aXRjaCBsYWJlbD1cIkV4YWN0IG1hdGNoXCIgY2hlY2tlZD17ZXhhY3RNYXRjaH0gb25DaGFuZ2U9e3RvZ2dsZUV4YWN0TWF0Y2h9IC8+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RXVpU3dpdGNoIGxhYmVsPVwiU2hvdyBvbmx5IG9ic29sZXRlIHRlcm1zXCIgY2hlY2tlZD17c2hvd09ic29sZXRlVGVybXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dG9nZ2xlU2hvd09ic29sZXRlVGVybXN9IC8+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwibVwiIC8+XG5cbiAgICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiIHN0eWxlPXt7IHBhZGRpbmc6IFwiMCA4cHhcIiB9fT5cbiAgICAgICAgICAgICAgU2hvd2luZyB7TWF0aC5taW4oYWN0aXZlUGFnZSAqIGl0ZW1zUGVyUGFnZSArIDEsIHRvdGFsSXRlbXMpfSB0byB7TWF0aC5taW4oKGFjdGl2ZVBhZ2UgKyAxKSAqIGl0ZW1zUGVyUGFnZSwgdG90YWxJdGVtcyl9IG9mIHt0b3RhbEl0ZW1zfSByZXN1bHRzXG4gICAgICAgICAgICA8L0V1aVRleHQ+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICAgICAgICA8RXVpSG9yaXpvbnRhbFJ1bGUgbWFyZ2luPVwibm9uZVwiIHN0eWxlPXt7IGhlaWdodDogMiB9fSAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAgPEV1aVRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VhcmNoIHJlc3VsdCBwYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgcGFnZUNvdW50PXtwYWdlQ291bnR9XG4gICAgICAgICAgICAgIGFjdGl2ZVBhZ2U9e2FjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlUGFnZT17c2V0QWN0aXZlUGFnZX1cbiAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlPXtpdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlPXtvbkNoYW5nZUl0ZW1zUGVyUGFnZX1cbiAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucz17aXRlbXNQZXJQYWdlT3B0aW9uc31cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICAgICAgICB7c2VhcmNoUmVzdWx0cyAmJiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0OiBhbnkpID0+IChcbiAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17cmVzdWx0LmlkfT5cbiAgICAgICAgICAgICAgICA8TWV0YWRhdGFDb21wYWN0IGFwaT17YXBpfSByZXN1bHQ9e3Jlc3VsdH0gdGFyZ2V0TGluaz17dGFyZ2V0TGlua30gLz5cbiAgICAgICAgICAgICAgICA8RXVpU3BhY2VyIC8+XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0V1aVBhbmVsPlxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0KHByb3BzOiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzOiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIGluaXRpYWxJdGVtc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucz17cHJvcHMuaXRlbXNQZXJQYWdlT3B0aW9uc31cbiAgICAgICAgICB0YXJnZXRMaW5rPXtwcm9wcy50YXJnZXRMaW5rfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0LCBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9O1xuIiwgImltcG9ydCB7IEV1aUNhcmQsIEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aVNwYWNlciwgRXVpVGl0bGUgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBEZXNjcmlwdGlvbldpZGdldCwgSXJpV2lkZ2V0IH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0XCI7XG5pbXBvcnQge01ldGFkYXRhQ29tcGFjdFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuXG5mdW5jdGlvbiBNZXRhZGF0YUNvbXBhY3QocHJvcHM6IE1ldGFkYXRhQ29tcGFjdFByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBhcGksXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdGFyZ2V0TGluayxcbiAgICAgICAgLi4ucmVzdFxuICAgIH0gPSBwcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0ZXh0QWxpZ249XCJsZWZ0XCJcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgaHJlZj17dGFyZ2V0TGluayA/XG4gICAgICAgICAgICAgICAgKHJlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiA/XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyByZXN1bHQub250b2xvZ3lfbmFtZSArIFwiL1wiICsgcGx1cmFsaXplVHlwZShyZXN1bHQudHlwZSwgdHJ1ZSkgKyBcIj9pcmk9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocmVzdWx0LmlyaSlcbiAgICAgICAgICAgICAgICAgICAgOiB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWUpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlUaXRsZT48aDI+e3Jlc3VsdC5sYWJlbH08L2gyPjwvRXVpVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgJiYgPEJyZWFkY3J1bWJXaWRnZXQgYXBpPXthcGl9IGlyaT17cmVzdWx0LmlyaX0gZW50aXR5VHlwZT17cmVzdWx0LnR5cGV9IG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfS8+fVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiID8gPElyaVdpZGdldCBpcmk9e3Jlc3VsdC5pcml9Lz4gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIvPlxuICAgICAgICAgICAgPERlc2NyaXB0aW9uV2lkZ2V0IGFwaT17YXBpfSBvbnRvbG9neUlkPXtyZXN1bHQub250b2xvZ3lfbmFtZX0gaXJpPXtyZXN1bHQuaXJpfSB0aGluZ1R5cGU9e3Jlc3VsdC50eXBlfS8+XG4gICAgICAgIDwvRXVpQ2FyZD5cblxuICAgICk7XG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhQ29tcGFjdCB9O1xuIiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0NsYXNzLCBFbnRpdHksIEluZGl2aWR1YWwsIFByb3BlcnR5LCBUaGluZ30gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRTZWN0aW9uTGlzdEpTWH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZ1wiO1xuaW1wb3J0IHtpc0NsYXNzLCBpc0luZGl2aWR1YWwsIGlzUHJvcGVydHl9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSB0eXBlIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsVHlwZXNTZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmRpdmlkdWFsLmdldFJkZlR5cGVzKCkuZmlsdGVyKChlbGVtOiBzdHJpbmcpID0+IGVsZW0gIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiYgIWVsZW0uc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpO1xuXG4gICAgaWYoaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICg8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Yj5UeXBlPC9iPlxuICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdHlwZXMsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICA8L0V1aUZsZXhJdGVtPik7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBhcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzYW1lQXMgPSBpbmRpdmlkdWFsLmdldFNhbWVBcygpO1xuXG4gICAgaWYoc2FtZUFzLmxlbmd0aCA+IDApe1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlNhbWUgQXM8L2I+XG4gICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgc2FtZUFzLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZGlmZmVyZW50IGZyb20gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBpbmRpdmlkdWFsXG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRpZmZlcmVudEZyb20gPSBpbmRpdmlkdWFsLmdldERpZmZlcmVudEZyb20oKTtcblxuICAgIGlmKGRpZmZlcmVudEZyb20ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkRpZmZlcmVudCBmcm9tPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGRpZmZlcmVudEZyb20sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaXNqb2ludCB3aXRoIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRpc2pvaW50V2l0aCA9IGVudGl0eS5nZXREaXNqb2ludFdpdGgoKTtcblxuICAgIGlmKGRpc2pvaW50V2l0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RGlzam9pbnQgd2l0aDwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZGlzam9pbnRXaXRoLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgaW52ZXJzZSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW52ZXJzZU9mcyA9IHByb3BlcnR5LmdldEludmVyc2VPZigpO1xuXG4gICAgaWYoaW52ZXJzZU9mcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+SW52ZXJzZSBvZjwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGludmVyc2VPZnMsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIG9uZSBwcm9wZXJ0eSBjaGFpbiBKU1ggZWxlbWVudC4gSXMgdXNlZCBmb3Ige0BsaW5rIGdldFByb3BlcnR5Q2hhaW5TZWN0aW9uSlNYfS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYWluIHRoZSBwcm9wZXJ0eSBjaGFpblxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgICAgIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudFtdfSB0aGUgY2hhaW5zIEpTWCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbjogYW55W10sIHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHByb3BlcnR5Q2hhaW4pLnNsaWNlKCkucmV2ZXJzZSgpLm1hcCgocHJvcGVydHlFeHByLCBpKSA9PiB7IC8vIHVzaW5nIC5zbGljZSgpIGhlcmUgaXMgaW1wb3J0YW50IGJlY2F1c2UgYSBtdXRhdGlvbiBvZiBwcm9wZXJ0eUNoYWluIHdvdWxkIHRyaWdnZXIgYSB1c2VRdWVyeSgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3Byb3BlcnR5RXhwcn0+XG4gICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgcHJvcGVydHlFeHByLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7aSA8IGFzQXJyYXkocHJvcGVydHlDaGFpbikubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mbmJzcDsmIzk2NjY7Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgcHJvcGVydHkgY2hhaW5zIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1gocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3BlcnR5Q2hhaW5zID0gcHJvcGVydHkuZ2V0UHJvcGVydHlDaGFpbnMoKS5tYXAoKHJlaWZpZWQgOiBSZWlmaWVkPGFueT4pID0+IHJlaWZpZWQudmFsdWUpO1xuXG4gICAgY29uc3QgaGFzTXVsdGlwbGVDaGFpbnMgPSBwcm9wZXJ0eUNoYWlucy5maWx0ZXIoKGVsZW06IGFueSkgPT4gQXJyYXkuaXNBcnJheShlbGVtKSkubGVuZ3RoID4gMDtcblxuICAgIGlmKHByb3BlcnR5Q2hhaW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj57IWhhc011bHRpcGxlQ2hhaW5zID8gXCJQcm9wZXJ0eSBjaGFpblwiIDogXCJQcm9wZXJ0eSBjaGFpbnNcIn08L2I+XG4gICAgICAgICAgICAgICAgeyFoYXNNdWx0aXBsZUNoYWlucyA/XG4gICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRQcm9wZXJ0eUNoYWluSlNYKHByb3BlcnR5Q2hhaW5zLCBwcm9wZXJ0eSwgcHJvcHMpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUNoYWlucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UHJvcGVydHlDaGFpbkpTWChpdGVtLCBwcm9wZXJ0eSwgcHJvcHMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZXF1aXZhbGVudCB0byBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uSlNYKGVudGl0eTogUHJvcGVydHkgfCBDbGFzcywgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcXVpdmFsZW50cyA9IGVudGl0eS5nZXRFcXVpdmFsZW50cygpO1xuXG4gICAgaWYoZXF1aXZhbGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkVxdWl2YWxlbnQgdG88L2I+XG4gICAgICAgICAgICAgICAge2VxdWl2YWxlbnRzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgZXF1aXZhbGVudHNbMF0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVpdmFsZW50cy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBpdGVtLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHN1YmVudGl0eSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN1cGVyRW50aXRpZXMgPSBlbnRpdHkuZ2V0U3VwZXJFbnRpdGllcygpO1xuXG4gICAgaWYoc3VwZXJFbnRpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+U3Vie2VudGl0eS5nZXRUeXBlKCl9IG9mPC9iPlxuICAgICAgICAgICAgICAgIHtzdXBlckVudGl0aWVzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgc3VwZXJFbnRpdGllc1swXSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyRW50aXRpZXMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBpdGVtLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHJlbGF0ZWQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlbGF0ZWRGcm9tcyA9IGVudGl0eS5nZXRSZWxhdGVkRnJvbSgpO1xuICAgIGNvbnN0IHByZWRpY2F0ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlbGF0ZWRGcm9tcy5tYXAoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl19KSkpO1xuXG4gICAgaWYocmVsYXRlZEZyb21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5SZWxhdGVkIGZyb208L2I+XG4gICAgICAgICAgICAgICAge3ByZWRpY2F0ZXMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCkuZ2V0TGFiZWxGb3JJcmkocCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cC50b1N0cmluZygpICsgcmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHN0eWxlPXt7Y29sb3I6IFwiYmxhY2tcIn19IGhyZWY9e3B9PjxpPntsYWJlbCB8fCBwfTwvaT48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZWxhdGVkRnJvbXMuZmlsdGVyKChlbGVtOiBhbnkpID0+IHtyZXR1cm4gZWxlbS52YWx1ZVtcInByb3BlcnR5XCJdID09PSBwfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGVudGl0eSwgZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGVsZW0udmFsdWVbXCJ2YWx1ZVwiXSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjwvcD4gey8qIFdvcmtzIGFzIGVtcHR5IHNwYWNlIGxlZnQgdG8gbmV4dCBzZWN0aW9uICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICk7fSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHRlcm1cbiAqIEBwYXJhbSBpbnN0YW5jZXMgYW4gYXJyYXkgb2YgdGhlIGNsYXNzZXMnIGluc3RhbmNlc1xuICogQHBhcmFtIHByb3BzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldENsYXNzSW5zdGFuY2VzU2VjdGlvbkpTWCh0ZXJtOiBDbGFzcywgaW5zdGFuY2VzOiBUaGluZ1tdLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGlmKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICA8Yj5JbnN0YW5jZXM8L2I+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzLm1hcCgoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBpbnN0YW5jZS5nZXRJcmkoKSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gRW50aXR5UmVsYXRpb25zV2lkZ2V0KHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCBzaG93QmFkZ2VzLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIG9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlLCBvbk5hdmlnYXRlVG9PbnRvbG9neSwgLi4ucmVzdCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGZldGNoIGFuIGVudGl0aWVzJyBkYXRhIHRvIGJlIHNob3duIGluIGRpZmZlcmVudCBzZWN0aW9uc1xuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0VudGl0eVJlbGF0aW9uLFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uLFxuICAgICAgICBpc0Vycm9yOiBpc0Vycm9yRW50aXR5UmVsYXRpb24sXG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcImVudGl0eUpzb25cIixcbiAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgICAgc2hvd0JhZGdlc1xuICAgICAgICBdLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgIGZhbHNlKTsgLy8gYWx3YXlzIHVzZSB2Mi8gQVBJXG4gICAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZmV0Y2ggYSBjbGFzc2VzIGluc3RhbmNlcyB0byBiZSBzaG93biBpbiBjbGFzcyBpbnN0YW5jZXMgc2VjdGlvblxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogaW5zdGFuY2VzLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0luc3RhbmNlcyxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NJbnN0YW5jZXMsXG4gICAgfSA9IHVzZVF1ZXJ5KHtcbiAgICAgICAgcXVlcnlLZXk6IFtcbiAgICAgICAgICAgIFwiaW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBlbnRpdHlcbiAgICAgICAgXSxcbiAgICAgICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChlbnRpdHkgJiYgaXNDbGFzcyhlbnRpdHkpICYmIGVudGl0eS5oYXNEaXJlY3RDaGlsZHJlbigpKSA/IG9sc0FwaS5nZXRDbGFzc0luc3RhbmNlcyhlbnRpdHkuZ2V0SXJpKCksIGVudGl0eS5nZXRPbnRvbG9neUlkKCkpIDogW107XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZWQ6ICEhZW50aXR5XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiByZW5kZXJTZWN0aW9ucyhlbnRpdHk6IEVudGl0eSwgaW5zdGFuY2VzOiBJbmRpdmlkdWFsW10pIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkxpc3QgOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIGlmKGlzSW5kaXZpZHVhbChlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsVHlwZXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGluZGl2aWR1YWxUeXBlc1NlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGluZGl2aWR1YWxUeXBlc1NlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiA9IGdldEluZGl2aWR1YWxTYW1lQXNTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGluZGl2aWR1YWxTYW1lQXNTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgaW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uID0gZ2V0SW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoaW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGlzUHJvcGVydHkoZW50aXR5KSB8fCBpc0NsYXNzKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2pvaW50V2l0aFNlY3Rpb24gPSBnZXREaXNqb2ludFdpdGhTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoZGlzam9pbnRXaXRoU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goZGlzam9pbnRXaXRoU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUludmVyc2VPZlNlY3Rpb24gPSBnZXRQcm9wZXJ0eUludmVyc2VPZlNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihwcm9wZXJ0eUludmVyc2VPZlNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5Q2hhaW5TZWN0aW9uID0gZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihwcm9wZXJ0eUNoYWluU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2gocHJvcGVydHlDaGFpblNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGlzUHJvcGVydHkoZW50aXR5KSB8fCBpc0NsYXNzKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb24gPSBnZXRFbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoZW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goZW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YkVudGl0eU9mU2VjdGlvbiA9IGdldFN1YkVudGl0eU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHN1YkVudGl0eU9mU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goc3ViRW50aXR5T2ZTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgZW50aXR5UmVsYXRlZEZyb21TZWN0aW9uID0gZ2V0RW50aXR5UmVsYXRlZEZyb21TZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoZW50aXR5UmVsYXRlZEZyb21TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NJbnN0YW5jZXNTZWN0aW9uID0gZ2V0Q2xhc3NJbnN0YW5jZXNTZWN0aW9uSlNYKGVudGl0eSwgaW5zdGFuY2VzLCBwcm9wcyk7XG4gICAgICAgICAgICBpZihjbGFzc0luc3RhbmNlc1NlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGNsYXNzSW5zdGFuY2VzU2VjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZihzZWN0aW9uTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICAgICAgICAgICAge3NlY3Rpb25MaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICBObyByZWxhdGlvbnMgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyAoZW50aXR5VHlwZSA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpIDogKGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGVudGl0eSkgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpIDogXCJcIikgKyBcIiBSZWxhdGlvbnNcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyhpc0xvYWRpbmdFbnRpdHlSZWxhdGlvbiB8fCBpc0xvYWRpbmdJbnN0YW5jZXMpICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAgICAgICAge2lzRXJyb3JFbnRpdHlSZWxhdGlvbiAmJiA8RXVpVGV4dD5SZXF1ZXN0ZWQgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAgICAgICAgeyhpc1N1Y2Nlc3NFbnRpdHlSZWxhdGlvbiAmJiBpc1N1Y2Nlc3NJbnN0YW5jZXMpICYmIGVudGl0eSAhPT0gdW5kZWZpbmVkICYmIGluc3RhbmNlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclNlY3Rpb25zKGVudGl0eSwgaW5zdGFuY2VzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpQ2FyZD5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5UmVsYXRpb25zKHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eVJlbGF0aW9uc1dpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17cHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsIEVudGl0eVJlbGF0aW9uc1dpZGdldCB9OyIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgVGVybURlcGljdGlvbldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5LCBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dCwgRXVpSW1hZ2V9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuXG5cbmZ1bmN0aW9uIFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHM6VGVybURlcGljdGlvbldpZGdldFByb3BzKXtcbiAgICBjb25zdCB7YXBpLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeX0gPSBwcm9wcztcbiAgICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGlzTG9hZGluZyxcbiAgICAgICAgaXNTdWNjZXNzLFxuICAgICAgICBpc0Vycm9yLFxuICAgICAgICBlcnJvclxuICAgICAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICAgICAgW1widGVybURlcGljdGlvblwiLCBhcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGhpbmdPYmplY3QoaXJpLCBcImNsYXNzXCIsIG9udG9sb2d5SWQsIFwiXCIsIHVzZUxlZ2FjeSk7ICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgXG4gICAgXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGRhdGEuZ2V0RGVwaWN0aW9uVXJsKCkgJiZcbiAgICAgICAgICAgICAgPD4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8RXVpSW1hZ2VcbiAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgaGFzU2hhZG93XG4gICAgICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGFsdD17ZGF0YS5nZXREZXBpY3Rpb25VcmwoKX1cbiAgICAgICAgICAgICAgICBzcmM9e2RhdGEuZ2V0RGVwaWN0aW9uVXJsKCl9ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8cD48c21hbGw+Q2xpY2sgdG8gZXhwYW5kLjwvc21hbGw+PC9wPlxuICAgICAgICAgICAgICA8Lz4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlcGljdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZURlcGljdGlvbihwcm9wczogVGVybURlcGljdGlvbldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUZXJtRGVwaWN0aW9uV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUZXJtRGVwaWN0aW9uV2lkZ2V0KHByb3BzOiBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICA8VGVybURlcGljdGlvbldpZGdldFxuICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9ICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9ICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7Y3JlYXRlRGVwaWN0aW9uLCBUZXJtRGVwaWN0aW9uV2lkZ2V0fTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaS9PbHNBcGknXG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknXG5pbXBvcnQge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheSwgc2luZ3VsYXJpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5T250b0xpc3RXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBcIi4uLy4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PHtvbnRvTGlzdDogc3RyaW5nW10sIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBsYWJlbDogc3RyaW5nfT4oXG4gICAgW1wiZW50aXR5T250b0xpc3RcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBvbnRvbGlzdCA6IHN0cmluZ1tdO1xuICAgICAgICBsZXQgcmVhbEVudGl0eVR5cGUgOiBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgbGV0IGxhYmVsIDogc3RyaW5nO1xuICAgICAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkZGVkID0gKGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpKVtcIl9lbWJlZGRlZFwiXTtcbiAgICAgICAgICAgIG9udG9saXN0ID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXS5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCBzaW5ndWxhcml6ZVR5cGUoT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVswXVtcImxhYmVsXCJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgICAgIG9udG9saXN0ID0gZW50aXR5LmdldEFwcGVhcnNJbigpO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IGVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWU7XG4gICAgICAgICAgICBsYWJlbCA9IGVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgb250b2xpc3QgPSBvbnRvbGlzdC5maWx0ZXIoKG9udG8gOiBzdHJpbmcpID0+IG9udG8gIT0gb250b2xvZ3lJZCkuc29ydCgpO1xuICAgICAgICByZXR1cm4ge29udG9MaXN0OiBvbnRvbGlzdCwgZW50aXR5VHlwZTogcmVhbEVudGl0eVR5cGUsIGxhYmVsOiBsYWJlbH07XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gb250b2xpc3Q9e2RhdGEub250b0xpc3R9IGVudGl0eVR5cGU9e2RhdGEuZW50aXR5VHlwZX0gbGFiZWw9e2RhdGEubGFiZWx9IGlyaT17aXJpfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5IGxpc3RcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5T250b0xpc3QocHJvcHM6IEVudGl0eU9udG9MaXN0V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXR5T250b0xpc3RXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlPbnRvTGlzdFdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlPbnRvTGlzdFdpZGdldCwgY3JlYXRlRW50aXR5T250b0xpc3QgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LCBzaW5ndWxhcml6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmZ1bmN0aW9uIEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTx7b250b0xpc3Q6IHN0cmluZ1tdLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgbGFiZWw6IHN0cmluZ30+KFxuICAgIFtcImVudGl0eURlZmluZWRCeVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG9udG9saXN0IDogc3RyaW5nW107XG4gICAgICAgIGxldCByZWFsRW50aXR5VHlwZSA6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgICBsZXQgbGFiZWwgOiBzdHJpbmc7XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgICAgIHJlYWxFbnRpdHlUeXBlID0gZW50aXR5VHlwZSB8fCBzaW5ndWxhcml6ZVR5cGUoT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVswXVtcImxhYmVsXCJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgICAgIG9udG9saXN0ID0gZW50aXR5LmdldERlZmluZWRCeSgpLmZpbHRlcigob250b2xvZ3kpID0+IG9udG9sb2d5ICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkpO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IGVudGl0eS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWU7XG4gICAgICAgICAgICBsYWJlbCA9IGVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgb250b2xpc3QgPSBvbnRvbGlzdC5zb3J0KCk7XG4gICAgICAgIHJldHVybiB7b250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gb250b2xpc3Q9e2RhdGEub250b0xpc3R9IGVudGl0eVR5cGU9e2RhdGEuZW50aXR5VHlwZX0gbGFiZWw9e2RhdGEubGFiZWx9IGlyaT17aXJpfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5IGxpc3RcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5RGVmaW5lZEJ5KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlEZWZpbmVkQnlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wczogRW50aXR5RGVmaW5lZEJ5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eURlZmluZWRCeVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlEZWZpbmVkQnlXaWRnZXQsIGNyZWF0ZUVudGl0eURlZmluZWRCeSB9O1xuIiwgImltcG9ydCB7IGNyZWF0ZUF1dG9jb21wbGV0ZSB9IGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURhdGFDb250ZW50IH0gZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlRW50aXR5SW5mbyB9IGZyb20gXCIuL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSnNvbkFwaX0gZnJvbSBcIi4vSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVCcmVhZGNydW1iIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXNjcmlwdGlvbiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUlyaSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVDcm9zc1JlZlRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5T0xTIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXRPTFNcIjtcbmltcG9ydCB7IGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXCI7XG5pbXBvcnQgeyBjcmVhdGVIaWVyYXJjaHkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0U2VtTG9va1AvSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVUaXRsZX0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU9udG9sb2d5SW5mbyB9IGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlcyB9IGZyb20gXCIuL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaEJhciB9IGZyb20gXCIuL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH0gZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7Y3JlYXRlRW50aXR5UmVsYXRpb25zfSBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXQvRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXBpY3Rpb24gfSBmcm9tIFwiLi9UZXJtRGVwaWN0aW9uV2lkZ2V0L1Rlcm1EZXBpY3Rpb25XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eU9udG9MaXN0IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eURlZmluZWRCeSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXRcIlxuXG4od2luZG93IGFzIGFueSlbJ1NlbUxvb2tQV2lkZ2V0cyddID0ge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5LFxuICAgIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGEsXG4gICAgY3JlYXRlRGVwaWN0aW9uLFxuICAgIGNyZWF0ZUhpZXJhcmNoeU9MUyxcbiAgICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgICBjcmVhdGVFbnRpdHlEZWZpbmVkQnlcbn1cblxuZXhwb3J0IHtcbiAgICBjcmVhdGVBdXRvY29tcGxldGUsXG4gICAgY3JlYXRlRGF0YUNvbnRlbnQsXG4gICAgY3JlYXRlRW50aXR5SW5mbyxcbiAgICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gICAgY3JlYXRlSnNvbkFwaSxcbiAgICBjcmVhdGVCcmVhZGNydW1iLFxuICAgIGNyZWF0ZURlc2NyaXB0aW9uLFxuICAgIGNyZWF0ZUlyaSxcbiAgICBjcmVhdGVUYWIsXG4gICAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICAgIGNyZWF0ZUNyb3NzUmVmVGFiLFxuICAgIGNyZWF0ZUhpZXJhcmNoeU9MUyxcbiAgICBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLFxuICAgIGNyZWF0ZVRpdGxlLFxuICAgIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgICBjcmVhdGVSZXNvdXJjZXMsXG4gICAgY3JlYXRlU2VhcmNoQmFyLFxuICAgIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICAgIGNyZWF0ZU1ldGFkYXRhLFxuICAgIGNyZWF0ZURlcGljdGlvbixcbiAgICBjcmVhdGVIaWVyYXJjaHksXG4gICAgY3JlYXRlRW50aXR5T250b0xpc3QsXG4gICAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5XG59XG5cbmV4cG9ydCAqIGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0pzb25BcGlXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RhdGFDb250ZW50V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VhcmNoQmFyV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9UZXJtRGVwaWN0aW9uV2lkZ2V0XCI7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQUksd0JBQXdCLE9BQU87QUFDbkMsVUFBSUEsa0JBQWlCLE9BQU8sVUFBVTtBQUN0QyxVQUFJLG1CQUFtQixPQUFPLFVBQVU7QUFFeEMsZUFBUyxTQUFTLEtBQUs7QUFDdEIsWUFBSSxRQUFRLFFBQVEsUUFBUSxRQUFXO0FBQ3RDLGdCQUFNLElBQUksVUFBVSx1REFBdUQ7QUFBQSxRQUM1RTtBQUVBLGVBQU8sT0FBTyxHQUFHO0FBQUEsTUFDbEI7QUFFQSxlQUFTLGtCQUFrQjtBQUMxQixZQUFJO0FBQ0gsY0FBSSxDQUFDLE9BQU8sUUFBUTtBQUNuQixtQkFBTztBQUFBLFVBQ1I7QUFLQSxjQUFJLFFBQVEsSUFBSSxPQUFPLEtBQUs7QUFDNUIsZ0JBQU0sQ0FBQyxJQUFJO0FBQ1gsY0FBSSxPQUFPLG9CQUFvQixLQUFLLEVBQUUsQ0FBQyxNQUFNLEtBQUs7QUFDakQsbUJBQU87QUFBQSxVQUNSO0FBR0EsY0FBSSxRQUFRLENBQUM7QUFDYixtQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUs7QUFDNUIsa0JBQU0sTUFBTSxPQUFPLGFBQWEsQ0FBQyxDQUFDLElBQUk7QUFBQSxVQUN2QztBQUNBLGNBQUksU0FBUyxPQUFPLG9CQUFvQixLQUFLLEVBQUUsSUFBSSxTQUFVLEdBQUc7QUFDL0QsbUJBQU8sTUFBTSxDQUFDO0FBQUEsVUFDZixDQUFDO0FBQ0QsY0FBSSxPQUFPLEtBQUssRUFBRSxNQUFNLGNBQWM7QUFDckMsbUJBQU87QUFBQSxVQUNSO0FBR0EsY0FBSSxRQUFRLENBQUM7QUFDYixpQ0FBdUIsTUFBTSxFQUFFLEVBQUUsUUFBUSxTQUFVLFFBQVE7QUFDMUQsa0JBQU0sTUFBTSxJQUFJO0FBQUEsVUFDakIsQ0FBQztBQUNELGNBQUksT0FBTyxLQUFLLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQy9DLHdCQUF3QjtBQUN6QixtQkFBTztBQUFBLFVBQ1I7QUFFQSxpQkFBTztBQUFBLFFBQ1IsU0FBUyxLQUFLO0FBRWIsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUVBLGFBQU8sVUFBVSxnQkFBZ0IsSUFBSSxPQUFPLFNBQVMsU0FBVSxRQUFRLFFBQVE7QUFDOUUsWUFBSUM7QUFDSixZQUFJLEtBQUssU0FBUyxNQUFNO0FBQ3hCLFlBQUk7QUFFSixpQkFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUMxQyxVQUFBQSxRQUFPLE9BQU8sVUFBVSxDQUFDLENBQUM7QUFFMUIsbUJBQVMsT0FBT0EsT0FBTTtBQUNyQixnQkFBSUQsZ0JBQWUsS0FBS0MsT0FBTSxHQUFHLEdBQUc7QUFDbkMsaUJBQUcsR0FBRyxJQUFJQSxNQUFLLEdBQUc7QUFBQSxZQUNuQjtBQUFBLFVBQ0Q7QUFFQSxjQUFJLHVCQUF1QjtBQUMxQixzQkFBVSxzQkFBc0JBLEtBQUk7QUFDcEMscUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDeEMsa0JBQUksaUJBQWlCLEtBQUtBLE9BQU0sUUFBUSxDQUFDLENBQUMsR0FBRztBQUM1QyxtQkFBRyxRQUFRLENBQUMsQ0FBQyxJQUFJQSxNQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQUEsY0FDakM7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFFQSxlQUFPO0FBQUEsTUFDUjtBQUFBO0FBQUE7OztBQ3pGQTtBQUFBO0FBQUE7QUFXQSxVQUFJLE1BQXVDO0FBQ3pDLFNBQUMsV0FBVztBQUNkO0FBRUEsY0FBSSxVQUFVO0FBR2QsY0FBSSxlQUFlO0FBT25CLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksb0JBQW9CO0FBQ3hCLGtCQUFRLFdBQVc7QUFDbkIsa0JBQVEsYUFBYTtBQUNyQixrQkFBUSxXQUFXO0FBQ25CLGNBQUksc0JBQXNCO0FBQzFCLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUkseUJBQXlCO0FBQzdCLGtCQUFRLFdBQVc7QUFDbkIsY0FBSSwyQkFBMkI7QUFDL0IsY0FBSSxrQkFBa0I7QUFDdEIsY0FBSSxrQkFBa0I7QUFDdEIsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSwwQkFBMEI7QUFDOUIsY0FBSSx5QkFBeUI7QUFDN0IsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxnQ0FBZ0M7QUFDcEMsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSwyQkFBMkI7QUFFL0IsY0FBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFDOUMsZ0JBQUksWUFBWSxPQUFPO0FBQ3ZCLGlDQUFxQixVQUFVLGVBQWU7QUFDOUMsZ0NBQW9CLFVBQVUsY0FBYztBQUM1QyxvQkFBUSxXQUFXLFVBQVUsZ0JBQWdCO0FBQzdDLG9CQUFRLGFBQWEsVUFBVSxtQkFBbUI7QUFDbEQsb0JBQVEsV0FBVyxVQUFVLGdCQUFnQjtBQUM3QyxrQ0FBc0IsVUFBVSxnQkFBZ0I7QUFDaEQsaUNBQXFCLFVBQVUsZUFBZTtBQUM5QyxxQ0FBeUIsVUFBVSxtQkFBbUI7QUFDdEQsb0JBQVEsV0FBVyxVQUFVLGdCQUFnQjtBQUM3Qyx1Q0FBMkIsVUFBVSxxQkFBcUI7QUFDMUQsOEJBQWtCLFVBQVUsWUFBWTtBQUN4Qyw4QkFBa0IsVUFBVSxZQUFZO0FBQ3hDLCtCQUFtQixVQUFVLGFBQWE7QUFDMUMsc0NBQTBCLFVBQVUsb0JBQW9CO0FBQ3hELHFDQUF5QixVQUFVLG1CQUFtQjtBQUN0RCwrQkFBbUIsVUFBVSxhQUFhO0FBQzFDLG1DQUF1QixVQUFVLGlCQUFpQjtBQUNsRCw0Q0FBZ0MsVUFBVSx3QkFBd0I7QUFDbEUsbUNBQXVCLFVBQVUsaUJBQWlCO0FBQ2xELHVDQUEyQixVQUFVLHFCQUFxQjtBQUFBLFVBQzVEO0FBRUEsY0FBSSx3QkFBd0IsT0FBTyxXQUFXLGNBQWMsT0FBTztBQUNuRSxjQUFJLHVCQUF1QjtBQUMzQixtQkFBUyxjQUFjLGVBQWU7QUFDcEMsZ0JBQUksa0JBQWtCLFFBQVEsT0FBTyxrQkFBa0IsVUFBVTtBQUMvRCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxnQkFBZ0IseUJBQXlCLGNBQWMscUJBQXFCLEtBQUssY0FBYyxvQkFBb0I7QUFFdkgsZ0JBQUksT0FBTyxrQkFBa0IsWUFBWTtBQUN2QyxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFLQSxjQUFJLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFLM0IsU0FBUztBQUFBLFVBQ1g7QUFNQSxjQUFJLDBCQUEwQjtBQUFBLFlBQzVCLFlBQVk7QUFBQSxVQUNkO0FBUUEsY0FBSSxvQkFBb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBS3RCLFNBQVM7QUFBQSxVQUNYO0FBRUEsY0FBSSx5QkFBeUIsQ0FBQztBQUM5QixjQUFJLHlCQUF5QjtBQUM3QixtQkFBUyxtQkFBbUIsT0FBTztBQUNqQztBQUNFLHVDQUF5QjtBQUFBLFlBQzNCO0FBQUEsVUFDRjtBQUVBO0FBQ0UsbUNBQXVCLHFCQUFxQixTQUFVLE9BQU87QUFDM0Q7QUFDRSx5Q0FBeUI7QUFBQSxjQUMzQjtBQUFBLFlBQ0Y7QUFHQSxtQ0FBdUIsa0JBQWtCO0FBRXpDLG1DQUF1QixtQkFBbUIsV0FBWTtBQUNwRCxrQkFBSSxRQUFRO0FBRVosa0JBQUksd0JBQXdCO0FBQzFCLHlCQUFTO0FBQUEsY0FDWDtBQUdBLGtCQUFJLE9BQU8sdUJBQXVCO0FBRWxDLGtCQUFJLE1BQU07QUFDUix5QkFBUyxLQUFLLEtBQUs7QUFBQSxjQUNyQjtBQUVBLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFLQSxjQUFJLHVCQUF1QjtBQUFBLFlBQ3pCLFNBQVM7QUFBQSxVQUNYO0FBRUEsY0FBSSx1QkFBdUI7QUFBQSxZQUN6QjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBO0FBQUEsWUFFQSxRQUFRO0FBQUEsVUFDVjtBQUVBO0FBQ0UsaUNBQXFCLHlCQUF5QjtBQUFBLFVBQ2hEO0FBT0EsbUJBQVMsS0FBSyxRQUFRO0FBQ3BCO0FBQ0UsdUJBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sT0FBTyxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQzFHLHFCQUFLLE9BQU8sQ0FBQyxJQUFJLFVBQVUsSUFBSTtBQUFBLGNBQ2pDO0FBRUEsMkJBQWEsUUFBUSxRQUFRLElBQUk7QUFBQSxZQUNuQztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxNQUFNLFFBQVE7QUFDckI7QUFDRSx1QkFBUyxRQUFRLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxRQUFRLElBQUksUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsUUFBUSxPQUFPLFNBQVM7QUFDakgscUJBQUssUUFBUSxDQUFDLElBQUksVUFBVSxLQUFLO0FBQUEsY0FDbkM7QUFFQSwyQkFBYSxTQUFTLFFBQVEsSUFBSTtBQUFBLFlBQ3BDO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGFBQWEsT0FBTyxRQUFRLE1BQU07QUFHekM7QUFDRSxrQkFBSUMsMEJBQXlCLHFCQUFxQjtBQUNsRCxrQkFBSSxRQUFRQSx3QkFBdUIsaUJBQWlCO0FBRXBELGtCQUFJLFVBQVUsSUFBSTtBQUNoQiwwQkFBVTtBQUNWLHVCQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQztBQUFBLGNBQzVCO0FBRUEsa0JBQUksaUJBQWlCLEtBQUssSUFBSSxTQUFVLE1BQU07QUFDNUMsdUJBQU8sS0FBSztBQUFBLGNBQ2QsQ0FBQztBQUVELDZCQUFlLFFBQVEsY0FBYyxNQUFNO0FBSTNDLHVCQUFTLFVBQVUsTUFBTSxLQUFLLFFBQVEsS0FBSyxHQUFHLFNBQVMsY0FBYztBQUFBLFlBQ3ZFO0FBQUEsVUFDRjtBQUVBLGNBQUksMENBQTBDLENBQUM7QUFFL0MsbUJBQVMsU0FBUyxnQkFBZ0IsWUFBWTtBQUM1QztBQUNFLGtCQUFJLGVBQWUsZUFBZTtBQUNsQyxrQkFBSSxnQkFBZ0IsaUJBQWlCLGFBQWEsZUFBZSxhQUFhLFNBQVM7QUFDdkYsa0JBQUksYUFBYSxnQkFBZ0IsTUFBTTtBQUV2QyxrQkFBSSx3Q0FBd0MsVUFBVSxHQUFHO0FBQ3ZEO0FBQUEsY0FDRjtBQUVBLG9CQUFNLHlQQUF3USxZQUFZLGFBQWE7QUFFdlMsc0RBQXdDLFVBQVUsSUFBSTtBQUFBLFlBQ3hEO0FBQUEsVUFDRjtBQU1BLGNBQUksdUJBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQVF6QixXQUFXLFNBQVUsZ0JBQWdCO0FBQ25DLHFCQUFPO0FBQUEsWUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBaUJBLG9CQUFvQixTQUFVLGdCQUFnQixVQUFVLFlBQVk7QUFDbEUsdUJBQVMsZ0JBQWdCLGFBQWE7QUFBQSxZQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFlQSxxQkFBcUIsU0FBVSxnQkFBZ0IsZUFBZSxVQUFVLFlBQVk7QUFDbEYsdUJBQVMsZ0JBQWdCLGNBQWM7QUFBQSxZQUN6QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBY0EsaUJBQWlCLFNBQVUsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZO0FBQzdFLHVCQUFTLGdCQUFnQixVQUFVO0FBQUEsWUFDckM7QUFBQSxVQUNGO0FBRUEsY0FBSSxjQUFjLENBQUM7QUFFbkI7QUFDRSxtQkFBTyxPQUFPLFdBQVc7QUFBQSxVQUMzQjtBQU1BLG1CQUFTQyxZQUFVLE9BQU8sU0FBUyxTQUFTO0FBQzFDLGlCQUFLLFFBQVE7QUFDYixpQkFBSyxVQUFVO0FBRWYsaUJBQUssT0FBTztBQUdaLGlCQUFLLFVBQVUsV0FBVztBQUFBLFVBQzVCO0FBRUEsVUFBQUEsWUFBVSxVQUFVLG1CQUFtQixDQUFDO0FBMkJ4QyxVQUFBQSxZQUFVLFVBQVUsV0FBVyxTQUFVLGNBQWMsVUFBVTtBQUMvRCxnQkFBSSxFQUFFLE9BQU8saUJBQWlCLFlBQVksT0FBTyxpQkFBaUIsY0FBYyxnQkFBZ0IsT0FBTztBQUNyRztBQUNFLHNCQUFNLE1BQU8sdUhBQXdIO0FBQUEsY0FDdkk7QUFBQSxZQUNGO0FBRUEsaUJBQUssUUFBUSxnQkFBZ0IsTUFBTSxjQUFjLFVBQVUsVUFBVTtBQUFBLFVBQ3ZFO0FBaUJBLFVBQUFBLFlBQVUsVUFBVSxjQUFjLFNBQVUsVUFBVTtBQUNwRCxpQkFBSyxRQUFRLG1CQUFtQixNQUFNLFVBQVUsYUFBYTtBQUFBLFVBQy9EO0FBUUE7QUFDRSxnQkFBSSxpQkFBaUI7QUFBQSxjQUNuQixXQUFXLENBQUMsYUFBYSxvSEFBeUg7QUFBQSxjQUNsSixjQUFjLENBQUMsZ0JBQWdCLGlHQUFzRztBQUFBLFlBQ3ZJO0FBRUEsZ0JBQUksMkJBQTJCLFNBQVUsWUFBWSxNQUFNO0FBQ3pELHFCQUFPLGVBQWVBLFlBQVUsV0FBVyxZQUFZO0FBQUEsZ0JBQ3JELEtBQUssV0FBWTtBQUNmLHVCQUFLLCtEQUErRCxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUVwRix5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUVBLHFCQUFTLFVBQVUsZ0JBQWdCO0FBQ2pDLGtCQUFJLGVBQWUsZUFBZSxNQUFNLEdBQUc7QUFDekMseUNBQXlCLFFBQVEsZUFBZSxNQUFNLENBQUM7QUFBQSxjQUN6RDtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsaUJBQWlCO0FBQUEsVUFBQztBQUUzQix5QkFBZSxZQUFZQSxZQUFVO0FBS3JDLG1CQUFTQyxlQUFjLE9BQU8sU0FBUyxTQUFTO0FBQzlDLGlCQUFLLFFBQVE7QUFDYixpQkFBSyxVQUFVO0FBRWYsaUJBQUssT0FBTztBQUNaLGlCQUFLLFVBQVUsV0FBVztBQUFBLFVBQzVCO0FBRUEsY0FBSSx5QkFBeUJBLGVBQWMsWUFBWSxJQUFJLGVBQWU7QUFDMUUsaUNBQXVCLGNBQWNBO0FBRXJDLGtCQUFRLHdCQUF3QkQsWUFBVSxTQUFTO0FBRW5ELGlDQUF1Qix1QkFBdUI7QUFHOUMsbUJBQVNFLGFBQVk7QUFDbkIsZ0JBQUksWUFBWTtBQUFBLGNBQ2QsU0FBUztBQUFBLFlBQ1g7QUFFQTtBQUNFLHFCQUFPLEtBQUssU0FBUztBQUFBLFlBQ3ZCO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsZUFBZSxXQUFXLFdBQVcsYUFBYTtBQUN6RCxnQkFBSSxlQUFlLFVBQVUsZUFBZSxVQUFVLFFBQVE7QUFDOUQsbUJBQU8sVUFBVSxnQkFBZ0IsaUJBQWlCLEtBQUssY0FBYyxNQUFNLGVBQWUsTUFBTTtBQUFBLFVBQ2xHO0FBRUEsbUJBQVMsZUFBZSxNQUFNO0FBQzVCLG1CQUFPLEtBQUssZUFBZTtBQUFBLFVBQzdCO0FBRUEsbUJBQVMsaUJBQWlCLE1BQU07QUFDOUIsZ0JBQUksUUFBUSxNQUFNO0FBRWhCLHFCQUFPO0FBQUEsWUFDVDtBQUVBO0FBQ0Usa0JBQUksT0FBTyxLQUFLLFFBQVEsVUFBVTtBQUNoQyxzQkFBTSwyR0FBZ0g7QUFBQSxjQUN4SDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixxQkFBTyxLQUFLLGVBQWUsS0FBSyxRQUFRO0FBQUEsWUFDMUM7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLLFFBQVE7QUFDWCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLLFFBQVE7QUFDWCx1QkFBTztBQUFBLGNBRVQsS0FBSyxRQUFRO0FBQ1gsdUJBQU87QUFBQSxjQUVULEtBQUssUUFBUTtBQUNYLHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxZQUNYO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsc0JBQVEsS0FBSyxVQUFVO0FBQUEsZ0JBQ3JCLEtBQUs7QUFDSCxzQkFBSSxVQUFVO0FBQ2QseUJBQU8sZUFBZSxPQUFPLElBQUk7QUFBQSxnQkFFbkMsS0FBSztBQUNILHNCQUFJLFdBQVc7QUFDZix5QkFBTyxlQUFlLFNBQVMsUUFBUSxJQUFJO0FBQUEsZ0JBRTdDLEtBQUs7QUFDSCx5QkFBTyxlQUFlLE1BQU0sS0FBSyxRQUFRLFlBQVk7QUFBQSxnQkFFdkQsS0FBSztBQUNILHlCQUFPLGlCQUFpQixLQUFLLElBQUk7QUFBQSxnQkFFbkMsS0FBSztBQUNILHlCQUFPLGlCQUFpQixLQUFLLE9BQU87QUFBQSxnQkFFdEMsS0FBSyxpQkFDSDtBQUNFLHNCQUFJLGdCQUFnQjtBQUNwQixzQkFBSSxVQUFVLGNBQWM7QUFDNUIsc0JBQUksT0FBTyxjQUFjO0FBRXpCLHNCQUFJO0FBQ0YsMkJBQU8saUJBQWlCLEtBQUssT0FBTyxDQUFDO0FBQUEsa0JBQ3ZDLFNBQVNDLElBQUc7QUFDViwyQkFBTztBQUFBLGtCQUNUO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLGNBQUlDLGtCQUFpQixPQUFPLFVBQVU7QUFDdEMsY0FBSSxpQkFBaUI7QUFBQSxZQUNuQixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsVUFDWjtBQUNBLGNBQUksNEJBQTRCLDRCQUE0QjtBQUU1RDtBQUNFLHFDQUF5QixDQUFDO0FBQUEsVUFDNUI7QUFFQSxtQkFBUyxZQUFZLFFBQVE7QUFDM0I7QUFDRSxrQkFBSUEsZ0JBQWUsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN0QyxvQkFBSSxTQUFTLE9BQU8seUJBQXlCLFFBQVEsS0FBSyxFQUFFO0FBRTVELG9CQUFJLFVBQVUsT0FBTyxnQkFBZ0I7QUFDbkMseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU8sT0FBTyxRQUFRO0FBQUEsVUFDeEI7QUFFQSxtQkFBUyxZQUFZLFFBQVE7QUFDM0I7QUFDRSxrQkFBSUEsZ0JBQWUsS0FBSyxRQUFRLEtBQUssR0FBRztBQUN0QyxvQkFBSSxTQUFTLE9BQU8seUJBQXlCLFFBQVEsS0FBSyxFQUFFO0FBRTVELG9CQUFJLFVBQVUsT0FBTyxnQkFBZ0I7QUFDbkMseUJBQU87QUFBQSxnQkFDVDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU8sT0FBTyxRQUFRO0FBQUEsVUFDeEI7QUFFQSxtQkFBUywyQkFBMkIsT0FBTyxhQUFhO0FBQ3RELGdCQUFJLHdCQUF3QixXQUFZO0FBQ3RDO0FBQ0Usb0JBQUksQ0FBQyw0QkFBNEI7QUFDL0IsK0NBQTZCO0FBRTdCLHdCQUFNLDZPQUE0UCxXQUFXO0FBQUEsZ0JBQy9RO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxrQ0FBc0IsaUJBQWlCO0FBQ3ZDLG1CQUFPLGVBQWUsT0FBTyxPQUFPO0FBQUEsY0FDbEMsS0FBSztBQUFBLGNBQ0wsY0FBYztBQUFBLFlBQ2hCLENBQUM7QUFBQSxVQUNIO0FBRUEsbUJBQVMsMkJBQTJCLE9BQU8sYUFBYTtBQUN0RCxnQkFBSSx3QkFBd0IsV0FBWTtBQUN0QztBQUNFLG9CQUFJLENBQUMsNEJBQTRCO0FBQy9CLCtDQUE2QjtBQUU3Qix3QkFBTSw2T0FBNFAsV0FBVztBQUFBLGdCQUMvUTtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsa0NBQXNCLGlCQUFpQjtBQUN2QyxtQkFBTyxlQUFlLE9BQU8sT0FBTztBQUFBLGNBQ2xDLEtBQUs7QUFBQSxjQUNMLGNBQWM7QUFBQSxZQUNoQixDQUFDO0FBQUEsVUFDSDtBQUVBLG1CQUFTLHFDQUFxQyxRQUFRO0FBQ3BEO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFFBQVEsWUFBWSxrQkFBa0IsV0FBVyxPQUFPLFVBQVUsa0JBQWtCLFFBQVEsY0FBYyxPQUFPLFFBQVE7QUFDekksb0JBQUksZ0JBQWdCLGlCQUFpQixrQkFBa0IsUUFBUSxJQUFJO0FBRW5FLG9CQUFJLENBQUMsdUJBQXVCLGFBQWEsR0FBRztBQUMxQyx3QkFBTSw2VkFBc1gsZUFBZSxPQUFPLEdBQUc7QUFFcloseUNBQXVCLGFBQWEsSUFBSTtBQUFBLGdCQUMxQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQXVCQSxjQUFJQyxnQkFBZSxTQUFVLE1BQU0sS0FBSyxLQUFLQyxPQUFNLFFBQVEsT0FBTyxPQUFPO0FBQ3ZFLGdCQUFJLFVBQVU7QUFBQTtBQUFBLGNBRVosVUFBVTtBQUFBO0FBQUEsY0FFVjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FFQSxRQUFRO0FBQUEsWUFDVjtBQUVBO0FBS0Usc0JBQVEsU0FBUyxDQUFDO0FBS2xCLHFCQUFPLGVBQWUsUUFBUSxRQUFRLGFBQWE7QUFBQSxnQkFDakQsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUVELHFCQUFPLGVBQWUsU0FBUyxTQUFTO0FBQUEsZ0JBQ3RDLGNBQWM7QUFBQSxnQkFDZCxZQUFZO0FBQUEsZ0JBQ1osVUFBVTtBQUFBLGdCQUNWLE9BQU9BO0FBQUEsY0FDVCxDQUFDO0FBR0QscUJBQU8sZUFBZSxTQUFTLFdBQVc7QUFBQSxnQkFDeEMsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGNBQ1QsQ0FBQztBQUVELGtCQUFJLE9BQU8sUUFBUTtBQUNqQix1QkFBTyxPQUFPLFFBQVEsS0FBSztBQUMzQix1QkFBTyxPQUFPLE9BQU87QUFBQSxjQUN2QjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU0MsZ0JBQWMsTUFBTSxRQUFRLFVBQVU7QUFDN0MsZ0JBQUk7QUFFSixnQkFBSSxRQUFRLENBQUM7QUFDYixnQkFBSSxNQUFNO0FBQ1YsZ0JBQUksTUFBTTtBQUNWLGdCQUFJRCxRQUFPO0FBQ1gsZ0JBQUksU0FBUztBQUViLGdCQUFJLFVBQVUsTUFBTTtBQUNsQixrQkFBSSxZQUFZLE1BQU0sR0FBRztBQUN2QixzQkFBTSxPQUFPO0FBRWI7QUFDRSx1REFBcUMsTUFBTTtBQUFBLGdCQUM3QztBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxZQUFZLE1BQU0sR0FBRztBQUN2QixzQkFBTSxLQUFLLE9BQU87QUFBQSxjQUNwQjtBQUVBLGNBQUFBLFFBQU8sT0FBTyxXQUFXLFNBQVksT0FBTyxPQUFPO0FBQ25ELHVCQUFTLE9BQU8sYUFBYSxTQUFZLE9BQU8sT0FBTztBQUV2RCxtQkFBSyxZQUFZLFFBQVE7QUFDdkIsb0JBQUlGLGdCQUFlLEtBQUssUUFBUSxRQUFRLEtBQUssQ0FBQyxlQUFlLGVBQWUsUUFBUSxHQUFHO0FBQ3JGLHdCQUFNLFFBQVEsSUFBSSxPQUFPLFFBQVE7QUFBQSxnQkFDbkM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUlBLGdCQUFJLGlCQUFpQixVQUFVLFNBQVM7QUFFeEMsZ0JBQUksbUJBQW1CLEdBQUc7QUFDeEIsb0JBQU0sV0FBVztBQUFBLFlBQ25CLFdBQVcsaUJBQWlCLEdBQUc7QUFDN0Isa0JBQUksYUFBYSxNQUFNLGNBQWM7QUFFckMsdUJBQVMsSUFBSSxHQUFHLElBQUksZ0JBQWdCLEtBQUs7QUFDdkMsMkJBQVcsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDO0FBQUEsY0FDakM7QUFFQTtBQUNFLG9CQUFJLE9BQU8sUUFBUTtBQUNqQix5QkFBTyxPQUFPLFVBQVU7QUFBQSxnQkFDMUI7QUFBQSxjQUNGO0FBRUEsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBR0EsZ0JBQUksUUFBUSxLQUFLLGNBQWM7QUFDN0Isa0JBQUksZUFBZSxLQUFLO0FBRXhCLG1CQUFLLFlBQVksY0FBYztBQUM3QixvQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFXO0FBQ2pDLHdCQUFNLFFBQVEsSUFBSSxhQUFhLFFBQVE7QUFBQSxnQkFDekM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBO0FBQ0Usa0JBQUksT0FBTyxLQUFLO0FBQ2Qsb0JBQUksY0FBYyxPQUFPLFNBQVMsYUFBYSxLQUFLLGVBQWUsS0FBSyxRQUFRLFlBQVk7QUFFNUYsb0JBQUksS0FBSztBQUNQLDZDQUEyQixPQUFPLFdBQVc7QUFBQSxnQkFDL0M7QUFFQSxvQkFBSSxLQUFLO0FBQ1AsNkNBQTJCLE9BQU8sV0FBVztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsbUJBQU9DLGNBQWEsTUFBTSxLQUFLLEtBQUtDLE9BQU0sUUFBUSxrQkFBa0IsU0FBUyxLQUFLO0FBQUEsVUFDcEY7QUFDQSxtQkFBUyxtQkFBbUIsWUFBWSxRQUFRO0FBQzlDLGdCQUFJLGFBQWFELGNBQWEsV0FBVyxNQUFNLFFBQVEsV0FBVyxLQUFLLFdBQVcsT0FBTyxXQUFXLFNBQVMsV0FBVyxRQUFRLFdBQVcsS0FBSztBQUNoSixtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU0csZUFBYSxTQUFTLFFBQVEsVUFBVTtBQUMvQyxnQkFBSSxDQUFDLEVBQUUsWUFBWSxRQUFRLFlBQVksU0FBWTtBQUNqRDtBQUNFLHNCQUFNLE1BQU8sbUZBQW1GLFVBQVUsR0FBSTtBQUFBLGNBQ2hIO0FBQUEsWUFDRjtBQUVBLGdCQUFJO0FBRUosZ0JBQUksUUFBUSxRQUFRLENBQUMsR0FBRyxRQUFRLEtBQUs7QUFHckMsZ0JBQUksTUFBTSxRQUFRO0FBQ2xCLGdCQUFJLE1BQU0sUUFBUTtBQUVsQixnQkFBSUYsUUFBTyxRQUFRO0FBSW5CLGdCQUFJLFNBQVMsUUFBUTtBQUVyQixnQkFBSSxRQUFRLFFBQVE7QUFFcEIsZ0JBQUksVUFBVSxNQUFNO0FBQ2xCLGtCQUFJLFlBQVksTUFBTSxHQUFHO0FBRXZCLHNCQUFNLE9BQU87QUFDYix3QkFBUSxrQkFBa0I7QUFBQSxjQUM1QjtBQUVBLGtCQUFJLFlBQVksTUFBTSxHQUFHO0FBQ3ZCLHNCQUFNLEtBQUssT0FBTztBQUFBLGNBQ3BCO0FBR0Esa0JBQUk7QUFFSixrQkFBSSxRQUFRLFFBQVEsUUFBUSxLQUFLLGNBQWM7QUFDN0MsK0JBQWUsUUFBUSxLQUFLO0FBQUEsY0FDOUI7QUFFQSxtQkFBSyxZQUFZLFFBQVE7QUFDdkIsb0JBQUlGLGdCQUFlLEtBQUssUUFBUSxRQUFRLEtBQUssQ0FBQyxlQUFlLGVBQWUsUUFBUSxHQUFHO0FBQ3JGLHNCQUFJLE9BQU8sUUFBUSxNQUFNLFVBQWEsaUJBQWlCLFFBQVc7QUFFaEUsMEJBQU0sUUFBUSxJQUFJLGFBQWEsUUFBUTtBQUFBLGtCQUN6QyxPQUFPO0FBQ0wsMEJBQU0sUUFBUSxJQUFJLE9BQU8sUUFBUTtBQUFBLGtCQUNuQztBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFJQSxnQkFBSSxpQkFBaUIsVUFBVSxTQUFTO0FBRXhDLGdCQUFJLG1CQUFtQixHQUFHO0FBQ3hCLG9CQUFNLFdBQVc7QUFBQSxZQUNuQixXQUFXLGlCQUFpQixHQUFHO0FBQzdCLGtCQUFJLGFBQWEsTUFBTSxjQUFjO0FBRXJDLHVCQUFTLElBQUksR0FBRyxJQUFJLGdCQUFnQixLQUFLO0FBQ3ZDLDJCQUFXLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQztBQUFBLGNBQ2pDO0FBRUEsb0JBQU0sV0FBVztBQUFBLFlBQ25CO0FBRUEsbUJBQU9DLGNBQWEsUUFBUSxNQUFNLEtBQUssS0FBS0MsT0FBTSxRQUFRLE9BQU8sS0FBSztBQUFBLFVBQ3hFO0FBU0EsbUJBQVNHLGdCQUFlQyxTQUFRO0FBQzlCLG1CQUFPLE9BQU9BLFlBQVcsWUFBWUEsWUFBVyxRQUFRQSxRQUFPLGFBQWE7QUFBQSxVQUM5RTtBQUVBLGNBQUksWUFBWTtBQUNoQixjQUFJLGVBQWU7QUFRbkIsbUJBQVMsT0FBTyxLQUFLO0FBQ25CLGdCQUFJLGNBQWM7QUFDbEIsZ0JBQUksZ0JBQWdCO0FBQUEsY0FDbEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLFlBQ1A7QUFDQSxnQkFBSSxnQkFBZ0IsSUFBSSxRQUFRLGFBQWEsU0FBVUMsUUFBTztBQUM1RCxxQkFBTyxjQUFjQSxNQUFLO0FBQUEsWUFDNUIsQ0FBQztBQUNELG1CQUFPLE1BQU07QUFBQSxVQUNmO0FBT0EsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSw2QkFBNkI7QUFFakMsbUJBQVMsc0JBQXNCLE1BQU07QUFDbkMsbUJBQU8sS0FBSyxRQUFRLDRCQUE0QixLQUFLO0FBQUEsVUFDdkQ7QUFVQSxtQkFBUyxjQUFjLFNBQVMsT0FBTztBQUdyQyxnQkFBSSxPQUFPLFlBQVksWUFBWSxZQUFZLFFBQVEsUUFBUSxPQUFPLE1BQU07QUFFMUUscUJBQU8sT0FBTyxLQUFLLFFBQVEsR0FBRztBQUFBLFlBQ2hDO0FBR0EsbUJBQU8sTUFBTSxTQUFTLEVBQUU7QUFBQSxVQUMxQjtBQUVBLG1CQUFTLGFBQWEsVUFBVSxPQUFPLGVBQWUsV0FBVyxVQUFVO0FBQ3pFLGdCQUFJLE9BQU8sT0FBTztBQUVsQixnQkFBSSxTQUFTLGVBQWUsU0FBUyxXQUFXO0FBRTlDLHlCQUFXO0FBQUEsWUFDYjtBQUVBLGdCQUFJLGlCQUFpQjtBQUVyQixnQkFBSSxhQUFhLE1BQU07QUFDckIsK0JBQWlCO0FBQUEsWUFDbkIsT0FBTztBQUNMLHNCQUFRLE1BQU07QUFBQSxnQkFDWixLQUFLO0FBQUEsZ0JBQ0wsS0FBSztBQUNILG1DQUFpQjtBQUNqQjtBQUFBLGdCQUVGLEtBQUs7QUFDSCwwQkFBUSxTQUFTLFVBQVU7QUFBQSxvQkFDekIsS0FBSztBQUFBLG9CQUNMLEtBQUs7QUFDSCx1Q0FBaUI7QUFBQSxrQkFDckI7QUFBQSxjQUVKO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGdCQUFnQjtBQUNsQixrQkFBSSxTQUFTO0FBQ2Isa0JBQUksY0FBYyxTQUFTLE1BQU07QUFHakMsa0JBQUksV0FBVyxjQUFjLEtBQUssWUFBWSxjQUFjLFFBQVEsQ0FBQyxJQUFJO0FBRXpFLGtCQUFJLE1BQU0sUUFBUSxXQUFXLEdBQUc7QUFDOUIsb0JBQUksa0JBQWtCO0FBRXRCLG9CQUFJLFlBQVksTUFBTTtBQUNwQixvQ0FBa0Isc0JBQXNCLFFBQVEsSUFBSTtBQUFBLGdCQUN0RDtBQUVBLDZCQUFhLGFBQWEsT0FBTyxpQkFBaUIsSUFBSSxTQUFVLEdBQUc7QUFDakUseUJBQU87QUFBQSxnQkFDVCxDQUFDO0FBQUEsY0FDSCxXQUFXLGVBQWUsTUFBTTtBQUM5QixvQkFBSUYsZ0JBQWUsV0FBVyxHQUFHO0FBQy9CLGdDQUFjO0FBQUEsb0JBQW1CO0FBQUE7QUFBQTtBQUFBLG9CQUVqQztBQUFBLHFCQUNBLFlBQVksUUFBUSxDQUFDLFVBQVUsT0FBTyxRQUFRLFlBQVk7QUFBQTtBQUFBLHNCQUMxRCxzQkFBc0IsS0FBSyxZQUFZLEdBQUcsSUFBSTtBQUFBLHdCQUFNLE1BQU07QUFBQSxrQkFBUTtBQUFBLGdCQUNwRTtBQUVBLHNCQUFNLEtBQUssV0FBVztBQUFBLGNBQ3hCO0FBRUEscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUk7QUFDSixnQkFBSTtBQUNKLGdCQUFJLGVBQWU7QUFFbkIsZ0JBQUksaUJBQWlCLGNBQWMsS0FBSyxZQUFZLFlBQVk7QUFFaEUsZ0JBQUksTUFBTSxRQUFRLFFBQVEsR0FBRztBQUMzQix1QkFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN4Qyx3QkFBUSxTQUFTLENBQUM7QUFDbEIsMkJBQVcsaUJBQWlCLGNBQWMsT0FBTyxDQUFDO0FBQ2xELGdDQUFnQixhQUFhLE9BQU8sT0FBTyxlQUFlLFVBQVUsUUFBUTtBQUFBLGNBQzlFO0FBQUEsWUFDRixPQUFPO0FBQ0wsa0JBQUksYUFBYSxjQUFjLFFBQVE7QUFFdkMsa0JBQUksT0FBTyxlQUFlLFlBQVk7QUFDcEMsb0JBQUksbUJBQW1CO0FBRXZCO0FBRUUsc0JBQUksZUFBZSxpQkFBaUIsU0FBUztBQUMzQyx3QkFBSSxDQUFDLGtCQUFrQjtBQUNyQiwyQkFBSyx1RkFBNEY7QUFBQSxvQkFDbkc7QUFFQSx1Q0FBbUI7QUFBQSxrQkFDckI7QUFBQSxnQkFDRjtBQUVBLG9CQUFJLFdBQVcsV0FBVyxLQUFLLGdCQUFnQjtBQUMvQyxvQkFBSTtBQUNKLG9CQUFJLEtBQUs7QUFFVCx1QkFBTyxFQUFFLE9BQU8sU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUNyQywwQkFBUSxLQUFLO0FBQ2IsNkJBQVcsaUJBQWlCLGNBQWMsT0FBTyxJQUFJO0FBQ3JELGtDQUFnQixhQUFhLE9BQU8sT0FBTyxlQUFlLFVBQVUsUUFBUTtBQUFBLGdCQUM5RTtBQUFBLGNBQ0YsV0FBVyxTQUFTLFVBQVU7QUFDNUIsb0JBQUksaUJBQWlCLEtBQUs7QUFFMUI7QUFDRTtBQUNFLDBCQUFNLE1BQU8scURBQXFELG1CQUFtQixvQkFBb0IsdUJBQXVCLE9BQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUksTUFBTSxrQkFBa0IsMkVBQTRFO0FBQUEsa0JBQ3pRO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQWVBLG1CQUFTLFlBQVksVUFBVUcsT0FBTSxTQUFTO0FBQzVDLGdCQUFJLFlBQVksTUFBTTtBQUNwQixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxTQUFTLENBQUM7QUFDZCxnQkFBSSxRQUFRO0FBQ1oseUJBQWEsVUFBVSxRQUFRLElBQUksSUFBSSxTQUFVLE9BQU87QUFDdEQscUJBQU9BLE1BQUssS0FBSyxTQUFTLE9BQU8sT0FBTztBQUFBLFlBQzFDLENBQUM7QUFDRCxtQkFBTztBQUFBLFVBQ1Q7QUFZQSxtQkFBUyxjQUFjLFVBQVU7QUFDL0IsZ0JBQUksSUFBSTtBQUNSLHdCQUFZLFVBQVUsV0FBWTtBQUNoQztBQUFBLFlBQ0YsQ0FBQztBQUNELG1CQUFPO0FBQUEsVUFDVDtBQWNBLG1CQUFTLGdCQUFnQixVQUFVLGFBQWEsZ0JBQWdCO0FBQzlELHdCQUFZLFVBQVUsV0FBWTtBQUNoQywwQkFBWSxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQ25DLEdBQUcsY0FBYztBQUFBLFVBQ25CO0FBU0EsbUJBQVNDLFNBQVEsVUFBVTtBQUN6QixtQkFBTyxZQUFZLFVBQVUsU0FBVSxPQUFPO0FBQzVDLHFCQUFPO0FBQUEsWUFDVCxDQUFDLEtBQUssQ0FBQztBQUFBLFVBQ1Q7QUFpQkEsbUJBQVMsVUFBVSxVQUFVO0FBQzNCLGdCQUFJLENBQUNKLGdCQUFlLFFBQVEsR0FBRztBQUM3QjtBQUNFLHNCQUFNLE1BQU8sdUVBQXdFO0FBQUEsY0FDdkY7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVNLLGVBQWMsY0FBYyxzQkFBc0I7QUFDekQsZ0JBQUkseUJBQXlCLFFBQVc7QUFDdEMscUNBQXVCO0FBQUEsWUFDekIsT0FBTztBQUNMO0FBQ0Usb0JBQUkseUJBQXlCLFFBQVEsT0FBTyx5QkFBeUIsWUFBWTtBQUMvRSx3QkFBTSwrRkFBb0csb0JBQW9CO0FBQUEsZ0JBQ2hJO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxVQUFVO0FBQUEsY0FDWixVQUFVO0FBQUEsY0FDVix1QkFBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FNdkIsZUFBZTtBQUFBLGNBQ2YsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLGNBR2hCLGNBQWM7QUFBQTtBQUFBLGNBRWQsVUFBVTtBQUFBLGNBQ1YsVUFBVTtBQUFBLFlBQ1o7QUFDQSxvQkFBUSxXQUFXO0FBQUEsY0FDakIsVUFBVTtBQUFBLGNBQ1YsVUFBVTtBQUFBLFlBQ1o7QUFDQSxnQkFBSSw0Q0FBNEM7QUFDaEQsZ0JBQUksc0NBQXNDO0FBQzFDLGdCQUFJLHNDQUFzQztBQUUxQztBQUlFLGtCQUFJLFdBQVc7QUFBQSxnQkFDYixVQUFVO0FBQUEsZ0JBQ1YsVUFBVTtBQUFBLGdCQUNWLHVCQUF1QixRQUFRO0FBQUEsY0FDakM7QUFFQSxxQkFBTyxpQkFBaUIsVUFBVTtBQUFBLGdCQUNoQyxVQUFVO0FBQUEsa0JBQ1IsS0FBSyxXQUFZO0FBQ2Ysd0JBQUksQ0FBQyxxQ0FBcUM7QUFDeEMsNERBQXNDO0FBRXRDLDRCQUFNLDBKQUErSjtBQUFBLG9CQUN2SztBQUVBLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsV0FBVztBQUN4Qiw0QkFBUSxXQUFXO0FBQUEsa0JBQ3JCO0FBQUEsZ0JBQ0Y7QUFBQSxnQkFDQSxlQUFlO0FBQUEsa0JBQ2IsS0FBSyxXQUFZO0FBQ2YsMkJBQU8sUUFBUTtBQUFBLGtCQUNqQjtBQUFBLGtCQUNBLEtBQUssU0FBVSxlQUFlO0FBQzVCLDRCQUFRLGdCQUFnQjtBQUFBLGtCQUMxQjtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsZ0JBQWdCO0FBQUEsa0JBQ2QsS0FBSyxXQUFZO0FBQ2YsMkJBQU8sUUFBUTtBQUFBLGtCQUNqQjtBQUFBLGtCQUNBLEtBQUssU0FBVSxnQkFBZ0I7QUFDN0IsNEJBQVEsaUJBQWlCO0FBQUEsa0JBQzNCO0FBQUEsZ0JBQ0Y7QUFBQSxnQkFDQSxjQUFjO0FBQUEsa0JBQ1osS0FBSyxXQUFZO0FBQ2YsMkJBQU8sUUFBUTtBQUFBLGtCQUNqQjtBQUFBLGtCQUNBLEtBQUssU0FBVSxjQUFjO0FBQzNCLDRCQUFRLGVBQWU7QUFBQSxrQkFDekI7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLFVBQVU7QUFBQSxrQkFDUixLQUFLLFdBQVk7QUFDZix3QkFBSSxDQUFDLDJDQUEyQztBQUM5QyxrRUFBNEM7QUFFNUMsNEJBQU0sMEpBQStKO0FBQUEsb0JBQ3ZLO0FBRUEsMkJBQU8sUUFBUTtBQUFBLGtCQUNqQjtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsYUFBYTtBQUFBLGtCQUNYLEtBQUssV0FBWTtBQUNmLDJCQUFPLFFBQVE7QUFBQSxrQkFDakI7QUFBQSxrQkFDQSxLQUFLLFNBQVUsYUFBYTtBQUMxQix3QkFBSSxDQUFDLHFDQUFxQztBQUN4QywyQkFBSyx1SUFBNEksV0FBVztBQUU1Siw0REFBc0M7QUFBQSxvQkFDeEM7QUFBQSxrQkFDRjtBQUFBLGdCQUNGO0FBQUEsY0FDRixDQUFDO0FBRUQsc0JBQVEsV0FBVztBQUFBLFlBQ3JCO0FBRUE7QUFDRSxzQkFBUSxtQkFBbUI7QUFDM0Isc0JBQVEsb0JBQW9CO0FBQUEsWUFDOUI7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGdCQUFnQjtBQUNwQixjQUFJLFVBQVU7QUFDZCxjQUFJLFdBQVc7QUFDZixjQUFJLFdBQVc7QUFFZixtQkFBUyxnQkFBZ0IsU0FBUztBQUNoQyxnQkFBSSxRQUFRLFlBQVksZUFBZTtBQUNyQyxrQkFBSSxPQUFPLFFBQVE7QUFDbkIsa0JBQUksV0FBVyxLQUFLO0FBRXBCLGtCQUFJLFVBQVU7QUFDZCxzQkFBUSxVQUFVO0FBQ2xCLHNCQUFRLFVBQVU7QUFDbEIsdUJBQVMsS0FBSyxTQUFVLGNBQWM7QUFDcEMsb0JBQUksUUFBUSxZQUFZLFNBQVM7QUFDL0Isc0JBQUksZ0JBQWdCLGFBQWE7QUFFakM7QUFDRSx3QkFBSSxrQkFBa0IsUUFBVztBQUMvQiw0QkFBTSx5S0FDMEQsWUFBWTtBQUFBLG9CQUM5RTtBQUFBLGtCQUNGO0FBR0Esc0JBQUksV0FBVztBQUNmLDJCQUFTLFVBQVU7QUFDbkIsMkJBQVMsVUFBVTtBQUFBLGdCQUNyQjtBQUFBLGNBQ0YsR0FBRyxTQUFVQyxRQUFPO0FBQ2xCLG9CQUFJLFFBQVEsWUFBWSxTQUFTO0FBRS9CLHNCQUFJLFdBQVc7QUFDZiwyQkFBUyxVQUFVO0FBQ25CLDJCQUFTLFVBQVVBO0FBQUEsZ0JBQ3JCO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUVBLGdCQUFJLFFBQVEsWUFBWSxVQUFVO0FBQ2hDLHFCQUFPLFFBQVE7QUFBQSxZQUNqQixPQUFPO0FBQ0wsb0JBQU0sUUFBUTtBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUVBLG1CQUFTLEtBQUssTUFBTTtBQUNsQixnQkFBSSxVQUFVO0FBQUE7QUFBQSxjQUVaLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxZQUNYO0FBQ0EsZ0JBQUksV0FBVztBQUFBLGNBQ2IsVUFBVTtBQUFBLGNBQ1YsVUFBVTtBQUFBLGNBQ1YsT0FBTztBQUFBLFlBQ1Q7QUFFQTtBQUVFLGtCQUFJO0FBQ0osa0JBQUk7QUFFSixxQkFBTyxpQkFBaUIsVUFBVTtBQUFBLGdCQUNoQyxjQUFjO0FBQUEsa0JBQ1osY0FBYztBQUFBLGtCQUNkLEtBQUssV0FBWTtBQUNmLDJCQUFPO0FBQUEsa0JBQ1Q7QUFBQSxrQkFDQSxLQUFLLFNBQVUsaUJBQWlCO0FBQzlCLDBCQUFNLHlMQUFtTTtBQUV6TSxtQ0FBZTtBQUdmLDJCQUFPLGVBQWUsVUFBVSxnQkFBZ0I7QUFBQSxzQkFDOUMsWUFBWTtBQUFBLG9CQUNkLENBQUM7QUFBQSxrQkFDSDtBQUFBLGdCQUNGO0FBQUEsZ0JBQ0EsV0FBVztBQUFBLGtCQUNULGNBQWM7QUFBQSxrQkFDZCxLQUFLLFdBQVk7QUFDZiwyQkFBTztBQUFBLGtCQUNUO0FBQUEsa0JBQ0EsS0FBSyxTQUFVLGNBQWM7QUFDM0IsMEJBQU0sc0xBQWdNO0FBRXRNLGdDQUFZO0FBR1osMkJBQU8sZUFBZSxVQUFVLGFBQWE7QUFBQSxzQkFDM0MsWUFBWTtBQUFBLG9CQUNkLENBQUM7QUFBQSxrQkFDSDtBQUFBLGdCQUNGO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTQyxhQUFXQyxTQUFRO0FBQzFCO0FBQ0Usa0JBQUlBLFdBQVUsUUFBUUEsUUFBTyxhQUFhLGlCQUFpQjtBQUN6RCxzQkFBTSxxSUFBK0k7QUFBQSxjQUN2SixXQUFXLE9BQU9BLFlBQVcsWUFBWTtBQUN2QyxzQkFBTSwyREFBMkRBLFlBQVcsT0FBTyxTQUFTLE9BQU9BLE9BQU07QUFBQSxjQUMzRyxPQUFPO0FBQ0wsb0JBQUlBLFFBQU8sV0FBVyxLQUFLQSxRQUFPLFdBQVcsR0FBRztBQUM5Qyx3QkFBTSxnRkFBZ0ZBLFFBQU8sV0FBVyxJQUFJLDZDQUE2Qyw2Q0FBNkM7QUFBQSxnQkFDeE07QUFBQSxjQUNGO0FBRUEsa0JBQUlBLFdBQVUsTUFBTTtBQUNsQixvQkFBSUEsUUFBTyxnQkFBZ0IsUUFBUUEsUUFBTyxhQUFhLE1BQU07QUFDM0Qsd0JBQU0sb0hBQXlIO0FBQUEsZ0JBQ2pJO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxjQUFjO0FBQUEsY0FDaEIsVUFBVTtBQUFBLGNBQ1YsUUFBUUE7QUFBQSxZQUNWO0FBRUE7QUFDRSxrQkFBSTtBQUNKLHFCQUFPLGVBQWUsYUFBYSxlQUFlO0FBQUEsZ0JBQ2hELFlBQVk7QUFBQSxnQkFDWixjQUFjO0FBQUEsZ0JBQ2QsS0FBSyxXQUFZO0FBQ2YseUJBQU87QUFBQSxnQkFDVDtBQUFBLGdCQUNBLEtBQUssU0FBVSxNQUFNO0FBQ25CLDRCQUFVO0FBRVYsc0JBQUlBLFFBQU8sZUFBZSxNQUFNO0FBQzlCLG9CQUFBQSxRQUFPLGNBQWM7QUFBQSxrQkFDdkI7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0g7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFJQSxjQUFJLGlCQUFpQjtBQUVyQixtQkFBUyxtQkFBbUIsTUFBTTtBQUNoQyxnQkFBSSxPQUFPLFNBQVMsWUFBWSxPQUFPLFNBQVMsWUFBWTtBQUMxRCxxQkFBTztBQUFBLFlBQ1Q7QUFHQSxnQkFBSSxTQUFTLFFBQVEsWUFBWSxTQUFTLFFBQVEsWUFBWSxTQUFTLGlDQUFpQyxTQUFTLFFBQVEsY0FBYyxTQUFTLFFBQVEsWUFBWSxTQUFTLDRCQUE0QixTQUFTLDRCQUE0QixnQkFBaUI7QUFDN1AscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFlBQVksU0FBUyxNQUFNO0FBQzdDLGtCQUFJLEtBQUssYUFBYSxtQkFBbUIsS0FBSyxhQUFhLG1CQUFtQixLQUFLLGFBQWEsdUJBQXVCLEtBQUssYUFBYSxzQkFBc0IsS0FBSyxhQUFhLDBCQUEwQixLQUFLLGFBQWEsMEJBQTBCLEtBQUssYUFBYSxvQkFBb0IsS0FBSyxDQUFDLE1BQU0seUJBQXlCO0FBQ2hVLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBU0MsTUFBSyxNQUFNLFNBQVM7QUFDM0I7QUFDRSxrQkFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUc7QUFDN0Isc0JBQU0sc0VBQTJFLFNBQVMsT0FBTyxTQUFTLE9BQU8sSUFBSTtBQUFBLGNBQ3ZIO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGNBQWM7QUFBQSxjQUNoQixVQUFVO0FBQUEsY0FDVjtBQUFBLGNBQ0EsU0FBUyxZQUFZLFNBQVksT0FBTztBQUFBLFlBQzFDO0FBRUE7QUFDRSxrQkFBSTtBQUNKLHFCQUFPLGVBQWUsYUFBYSxlQUFlO0FBQUEsZ0JBQ2hELFlBQVk7QUFBQSxnQkFDWixjQUFjO0FBQUEsZ0JBQ2QsS0FBSyxXQUFZO0FBQ2YseUJBQU87QUFBQSxnQkFDVDtBQUFBLGdCQUNBLEtBQUssU0FBVSxNQUFNO0FBQ25CLDRCQUFVO0FBRVYsc0JBQUksS0FBSyxlQUFlLE1BQU07QUFDNUIseUJBQUssY0FBYztBQUFBLGtCQUNyQjtBQUFBLGdCQUNGO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLG9CQUFvQjtBQUMzQixnQkFBSSxhQUFhLHVCQUF1QjtBQUV4QyxnQkFBSSxFQUFFLGVBQWUsT0FBTztBQUMxQjtBQUNFLHNCQUFNLE1BQU8saWJBQWtiO0FBQUEsY0FDamM7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVNDLFlBQVcsU0FBUyx1QkFBdUI7QUFDbEQsZ0JBQUksYUFBYSxrQkFBa0I7QUFFbkM7QUFDRSxrQkFBSSwwQkFBMEIsUUFBVztBQUN2QyxzQkFBTSxvSEFBOEgsdUJBQXVCLE9BQU8sMEJBQTBCLFlBQVksTUFBTSxRQUFRLFVBQVUsQ0FBQyxDQUFDLElBQUksZ0pBQTBKLEVBQUU7QUFBQSxjQUNwWTtBQUdBLGtCQUFJLFFBQVEsYUFBYSxRQUFXO0FBQ2xDLG9CQUFJLGNBQWMsUUFBUTtBQUcxQixvQkFBSSxZQUFZLGFBQWEsU0FBUztBQUNwQyx3QkFBTSx5S0FBOEs7QUFBQSxnQkFDdEwsV0FBVyxZQUFZLGFBQWEsU0FBUztBQUMzQyx3QkFBTSwwR0FBK0c7QUFBQSxnQkFDdkg7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG1CQUFPLFdBQVcsV0FBVyxTQUFTLHFCQUFxQjtBQUFBLFVBQzdEO0FBQ0EsbUJBQVNDLFdBQVMsY0FBYztBQUM5QixnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLFNBQVMsWUFBWTtBQUFBLFVBQ3pDO0FBQ0EsbUJBQVNDLFlBQVdDLFVBQVMsWUFBWSxNQUFNO0FBQzdDLGdCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLG1CQUFPLFdBQVcsV0FBV0EsVUFBUyxZQUFZLElBQUk7QUFBQSxVQUN4RDtBQUNBLG1CQUFTQyxTQUFPLGNBQWM7QUFDNUIsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxPQUFPLFlBQVk7QUFBQSxVQUN2QztBQUNBLG1CQUFTQyxZQUFVLFFBQVEsTUFBTTtBQUMvQixnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLFVBQVUsUUFBUSxJQUFJO0FBQUEsVUFDMUM7QUFDQSxtQkFBU0MsaUJBQWdCLFFBQVEsTUFBTTtBQUNyQyxnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLGdCQUFnQixRQUFRLElBQUk7QUFBQSxVQUNoRDtBQUNBLG1CQUFTQyxjQUFZLFVBQVUsTUFBTTtBQUNuQyxnQkFBSSxhQUFhLGtCQUFrQjtBQUNuQyxtQkFBTyxXQUFXLFlBQVksVUFBVSxJQUFJO0FBQUEsVUFDOUM7QUFDQSxtQkFBU0MsU0FBUSxRQUFRLE1BQU07QUFDN0IsZ0JBQUksYUFBYSxrQkFBa0I7QUFDbkMsbUJBQU8sV0FBVyxRQUFRLFFBQVEsSUFBSTtBQUFBLFVBQ3hDO0FBQ0EsbUJBQVMsb0JBQW9CLEtBQUssUUFBUSxNQUFNO0FBQzlDLGdCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLG1CQUFPLFdBQVcsb0JBQW9CLEtBQUssUUFBUSxJQUFJO0FBQUEsVUFDekQ7QUFDQSxtQkFBUyxjQUFjLE9BQU8sYUFBYTtBQUN6QztBQUNFLGtCQUFJLGFBQWEsa0JBQWtCO0FBQ25DLHFCQUFPLFdBQVcsY0FBYyxPQUFPLFdBQVc7QUFBQSxZQUNwRDtBQUFBLFVBQ0Y7QUFNQSxjQUFJLGdCQUFnQjtBQUNwQixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBRUosbUJBQVMsY0FBYztBQUFBLFVBQUM7QUFFeEIsc0JBQVkscUJBQXFCO0FBQ2pDLG1CQUFTLGNBQWM7QUFDckI7QUFDRSxrQkFBSSxrQkFBa0IsR0FBRztBQUV2QiwwQkFBVSxRQUFRO0FBQ2xCLDJCQUFXLFFBQVE7QUFDbkIsMkJBQVcsUUFBUTtBQUNuQiw0QkFBWSxRQUFRO0FBQ3BCLDRCQUFZLFFBQVE7QUFDcEIscUNBQXFCLFFBQVE7QUFDN0IsK0JBQWUsUUFBUTtBQUV2QixvQkFBSSxRQUFRO0FBQUEsa0JBQ1YsY0FBYztBQUFBLGtCQUNkLFlBQVk7QUFBQSxrQkFDWixPQUFPO0FBQUEsa0JBQ1AsVUFBVTtBQUFBLGdCQUNaO0FBRUEsdUJBQU8saUJBQWlCLFNBQVM7QUFBQSxrQkFDL0IsTUFBTTtBQUFBLGtCQUNOLEtBQUs7QUFBQSxrQkFDTCxNQUFNO0FBQUEsa0JBQ04sT0FBTztBQUFBLGtCQUNQLE9BQU87QUFBQSxrQkFDUCxnQkFBZ0I7QUFBQSxrQkFDaEIsVUFBVTtBQUFBLGdCQUNaLENBQUM7QUFBQSxjQUVIO0FBRUE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWU7QUFDdEI7QUFDRTtBQUVBLGtCQUFJLGtCQUFrQixHQUFHO0FBRXZCLG9CQUFJLFFBQVE7QUFBQSxrQkFDVixjQUFjO0FBQUEsa0JBQ2QsWUFBWTtBQUFBLGtCQUNaLFVBQVU7QUFBQSxnQkFDWjtBQUVBLHVCQUFPLGlCQUFpQixTQUFTO0FBQUEsa0JBQy9CLEtBQUssUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN0QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELGdCQUFnQixRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQ2pDLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsa0JBQ0QsVUFBVSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQzNCLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsZ0JBQ0gsQ0FBQztBQUFBLGNBRUg7QUFFQSxrQkFBSSxnQkFBZ0IsR0FBRztBQUNyQixzQkFBTSw4RUFBbUY7QUFBQSxjQUMzRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSwyQkFBMkIscUJBQXFCO0FBQ3BELGNBQUlDO0FBQ0osbUJBQVMsOEJBQThCLE1BQU0sUUFBUSxTQUFTO0FBQzVEO0FBQ0Usa0JBQUlBLFlBQVcsUUFBVztBQUV4QixvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSxnQkFDZCxTQUFTekIsSUFBRztBQUNWLHNCQUFJUSxTQUFRUixHQUFFLE1BQU0sS0FBSyxFQUFFLE1BQU0sY0FBYztBQUMvQyxrQkFBQXlCLFVBQVNqQixVQUFTQSxPQUFNLENBQUMsS0FBSztBQUFBLGdCQUNoQztBQUFBLGNBQ0Y7QUFHQSxxQkFBTyxPQUFPaUIsVUFBUztBQUFBLFlBQ3pCO0FBQUEsVUFDRjtBQUNBLGNBQUksVUFBVTtBQUNkLGNBQUk7QUFFSjtBQUNFLGdCQUFJLGtCQUFrQixPQUFPLFlBQVksYUFBYSxVQUFVO0FBQ2hFLGtDQUFzQixJQUFJLGdCQUFnQjtBQUFBLFVBQzVDO0FBRUEsbUJBQVMsNkJBQTZCLElBQUksV0FBVztBQUVuRCxnQkFBSSxDQUFDLE1BQU0sU0FBUztBQUNsQixxQkFBTztBQUFBLFlBQ1Q7QUFFQTtBQUNFLGtCQUFJLFFBQVEsb0JBQW9CLElBQUksRUFBRTtBQUV0QyxrQkFBSSxVQUFVLFFBQVc7QUFDdkIsdUJBQU87QUFBQSxjQUNUO0FBQUEsWUFDRjtBQUVBLGdCQUFJO0FBQ0osc0JBQVU7QUFDVixnQkFBSSw0QkFBNEIsTUFBTTtBQUV0QyxrQkFBTSxvQkFBb0I7QUFDMUIsZ0JBQUk7QUFFSjtBQUNFLG1DQUFxQix5QkFBeUI7QUFHOUMsdUNBQXlCLFVBQVU7QUFDbkMsMEJBQVk7QUFBQSxZQUNkO0FBRUEsZ0JBQUk7QUFFRixrQkFBSSxXQUFXO0FBRWIsb0JBQUksT0FBTyxXQUFZO0FBQ3JCLHdCQUFNLE1BQU07QUFBQSxnQkFDZDtBQUdBLHVCQUFPLGVBQWUsS0FBSyxXQUFXLFNBQVM7QUFBQSxrQkFDN0MsS0FBSyxXQUFZO0FBR2YsMEJBQU0sTUFBTTtBQUFBLGtCQUNkO0FBQUEsZ0JBQ0YsQ0FBQztBQUVELG9CQUFJLE9BQU8sWUFBWSxZQUFZLFFBQVEsV0FBVztBQUdwRCxzQkFBSTtBQUNGLDRCQUFRLFVBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxrQkFDNUIsU0FBU3pCLElBQUc7QUFDViw4QkFBVUE7QUFBQSxrQkFDWjtBQUVBLDBCQUFRLFVBQVUsSUFBSSxDQUFDLEdBQUcsSUFBSTtBQUFBLGdCQUNoQyxPQUFPO0FBQ0wsc0JBQUk7QUFDRix5QkFBSyxLQUFLO0FBQUEsa0JBQ1osU0FBU0EsSUFBRztBQUNWLDhCQUFVQTtBQUFBLGtCQUNaO0FBRUEscUJBQUcsS0FBSyxLQUFLLFNBQVM7QUFBQSxnQkFDeEI7QUFBQSxjQUNGLE9BQU87QUFDTCxvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSxnQkFDZCxTQUFTQSxJQUFHO0FBQ1YsNEJBQVVBO0FBQUEsZ0JBQ1o7QUFFQSxtQkFBRztBQUFBLGNBQ0w7QUFBQSxZQUNGLFNBQVMsUUFBUTtBQUVmLGtCQUFJLFVBQVUsV0FBVyxPQUFPLE9BQU8sVUFBVSxVQUFVO0FBR3pELG9CQUFJLGNBQWMsT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUN6QyxvQkFBSSxlQUFlLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDM0Msb0JBQUksSUFBSSxZQUFZLFNBQVM7QUFDN0Isb0JBQUksSUFBSSxhQUFhLFNBQVM7QUFFOUIsdUJBQU8sS0FBSyxLQUFLLEtBQUssS0FBSyxZQUFZLENBQUMsTUFBTSxhQUFhLENBQUMsR0FBRztBQU83RDtBQUFBLGdCQUNGO0FBRUEsdUJBQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFHakMsc0JBQUksWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFNdEMsd0JBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN0Qix5QkFBRztBQUNEO0FBQ0E7QUFHQSw0QkFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFFL0MsOEJBQUksU0FBUyxPQUFPLFlBQVksQ0FBQyxFQUFFLFFBQVEsWUFBWSxNQUFNO0FBRTdEO0FBQ0UsZ0NBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsa0RBQW9CLElBQUksSUFBSSxNQUFNO0FBQUEsNEJBQ3BDO0FBQUEsMEJBQ0Y7QUFHQSxpQ0FBTztBQUFBLHdCQUNUO0FBQUEsc0JBQ0YsU0FBUyxLQUFLLEtBQUssS0FBSztBQUFBLG9CQUMxQjtBQUVBO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLFVBQUU7QUFDQSx3QkFBVTtBQUVWO0FBQ0UseUNBQXlCLFVBQVU7QUFDbkMsNkJBQWE7QUFBQSxjQUNmO0FBRUEsb0JBQU0sb0JBQW9CO0FBQUEsWUFDNUI7QUFHQSxnQkFBSSxPQUFPLEtBQUssR0FBRyxlQUFlLEdBQUcsT0FBTztBQUM1QyxnQkFBSSxpQkFBaUIsT0FBTyw4QkFBOEIsSUFBSSxJQUFJO0FBRWxFO0FBQ0Usa0JBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsb0NBQW9CLElBQUksSUFBSSxjQUFjO0FBQUEsY0FDNUM7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsK0JBQStCLElBQUksUUFBUSxTQUFTO0FBQzNEO0FBQ0UscUJBQU8sNkJBQTZCLElBQUksS0FBSztBQUFBLFlBQy9DO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdCQUFnQkgsYUFBVztBQUNsQyxnQkFBSTZCLGFBQVk3QixZQUFVO0FBQzFCLG1CQUFPLENBQUMsRUFBRTZCLGNBQWFBLFdBQVU7QUFBQSxVQUNuQztBQUVBLG1CQUFTLHFDQUFxQyxNQUFNLFFBQVEsU0FBUztBQUVuRSxnQkFBSSxRQUFRLE1BQU07QUFDaEIscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUI7QUFDRSx1QkFBTyw2QkFBNkIsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDO0FBQUEsY0FDakU7QUFBQSxZQUNGO0FBRUEsZ0JBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIscUJBQU8sOEJBQThCLElBQUk7QUFBQSxZQUMzQztBQUVBLG9CQUFRLE1BQU07QUFBQSxjQUNaLEtBQUssUUFBUTtBQUNYLHVCQUFPLDhCQUE4QixVQUFVO0FBQUEsY0FFakQsS0FBSztBQUNILHVCQUFPLDhCQUE4QixjQUFjO0FBQUEsWUFDdkQ7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixzQkFBUSxLQUFLLFVBQVU7QUFBQSxnQkFDckIsS0FBSztBQUNILHlCQUFPLCtCQUErQixLQUFLLE1BQU07QUFBQSxnQkFFbkQsS0FBSztBQUVILHlCQUFPLHFDQUFxQyxLQUFLLE1BQU0sUUFBUSxPQUFPO0FBQUEsZ0JBRXhFLEtBQUs7QUFDSCx5QkFBTywrQkFBK0IsS0FBSyxPQUFPO0FBQUEsZ0JBRXBELEtBQUssaUJBQ0g7QUFDRSxzQkFBSSxnQkFBZ0I7QUFDcEIsc0JBQUksVUFBVSxjQUFjO0FBQzVCLHNCQUFJLE9BQU8sY0FBYztBQUV6QixzQkFBSTtBQUVGLDJCQUFPLHFDQUFxQyxLQUFLLE9BQU8sR0FBRyxRQUFRLE9BQU87QUFBQSxrQkFDNUUsU0FBUzFCLElBQUc7QUFBQSxrQkFBQztBQUFBLGdCQUNmO0FBQUEsY0FDSjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLHFCQUFxQixDQUFDO0FBQzFCLGNBQUksMkJBQTJCLHFCQUFxQjtBQUVwRCxtQkFBUyw4QkFBOEIsU0FBUztBQUM5QztBQUNFLGtCQUFJLFNBQVM7QUFDWCxvQkFBSSxRQUFRLFFBQVE7QUFDcEIsb0JBQUksUUFBUSxxQ0FBcUMsUUFBUSxNQUFNLFFBQVEsU0FBUyxRQUFRLE1BQU0sT0FBTyxJQUFJO0FBQ3pHLHlDQUF5QixtQkFBbUIsS0FBSztBQUFBLGNBQ25ELE9BQU87QUFDTCx5Q0FBeUIsbUJBQW1CLElBQUk7QUFBQSxjQUNsRDtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZUFBZSxXQUFXLFFBQVEsVUFBVSxlQUFlLFNBQVM7QUFDM0U7QUFFRSxrQkFBSSxNQUFNLFNBQVMsS0FBSyxLQUFLLE9BQU8sVUFBVSxjQUFjO0FBRTVELHVCQUFTLGdCQUFnQixXQUFXO0FBQ2xDLG9CQUFJLElBQUksV0FBVyxZQUFZLEdBQUc7QUFDaEMsc0JBQUksVUFBVTtBQUlkLHNCQUFJO0FBR0Ysd0JBQUksT0FBTyxVQUFVLFlBQVksTUFBTSxZQUFZO0FBQ2pELDBCQUFJLE1BQU0sT0FBTyxpQkFBaUIsaUJBQWlCLE9BQU8sV0FBVyxZQUFZLGVBQWUsK0ZBQW9HLE9BQU8sVUFBVSxZQUFZLElBQUksaUdBQXNHO0FBQzNVLDBCQUFJLE9BQU87QUFDWCw0QkFBTTtBQUFBLG9CQUNSO0FBRUEsOEJBQVUsVUFBVSxZQUFZLEVBQUUsUUFBUSxjQUFjLGVBQWUsVUFBVSxNQUFNLDhDQUE4QztBQUFBLGtCQUN2SSxTQUFTLElBQUk7QUFDWCw4QkFBVTtBQUFBLGtCQUNaO0FBRUEsc0JBQUksV0FBVyxFQUFFLG1CQUFtQixRQUFRO0FBQzFDLGtEQUE4QixPQUFPO0FBRXJDLDBCQUFNLDRSQUFxVCxpQkFBaUIsZUFBZSxVQUFVLGNBQWMsT0FBTyxPQUFPO0FBRWpZLGtEQUE4QixJQUFJO0FBQUEsa0JBQ3BDO0FBRUEsc0JBQUksbUJBQW1CLFNBQVMsRUFBRSxRQUFRLFdBQVcscUJBQXFCO0FBR3hFLHVDQUFtQixRQUFRLE9BQU8sSUFBSTtBQUN0QyxrREFBOEIsT0FBTztBQUVyQywwQkFBTSxzQkFBc0IsVUFBVSxRQUFRLE9BQU87QUFFckQsa0RBQThCLElBQUk7QUFBQSxrQkFDcEM7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdDQUFnQyxTQUFTO0FBQ2hEO0FBQ0Usa0JBQUksU0FBUztBQUNYLG9CQUFJLFFBQVEsUUFBUTtBQUNwQixvQkFBSSxRQUFRLHFDQUFxQyxRQUFRLE1BQU0sUUFBUSxTQUFTLFFBQVEsTUFBTSxPQUFPLElBQUk7QUFDekcsbUNBQW1CLEtBQUs7QUFBQSxjQUMxQixPQUFPO0FBQ0wsbUNBQW1CLElBQUk7QUFBQSxjQUN6QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSTtBQUVKO0FBQ0UsNENBQWdDO0FBQUEsVUFDbEM7QUFFQSxtQkFBUyw4QkFBOEI7QUFDckMsZ0JBQUksa0JBQWtCLFNBQVM7QUFDN0Isa0JBQUksT0FBTyxpQkFBaUIsa0JBQWtCLFFBQVEsSUFBSTtBQUUxRCxrQkFBSSxNQUFNO0FBQ1IsdUJBQU8scUNBQXFDLE9BQU87QUFBQSxjQUNyRDtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUywyQkFBMkIsUUFBUTtBQUMxQyxnQkFBSSxXQUFXLFFBQVc7QUFDeEIsa0JBQUksV0FBVyxPQUFPLFNBQVMsUUFBUSxhQUFhLEVBQUU7QUFDdEQsa0JBQUksYUFBYSxPQUFPO0FBQ3hCLHFCQUFPLDRCQUE0QixXQUFXLE1BQU0sYUFBYTtBQUFBLFlBQ25FO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsbUNBQW1DLGNBQWM7QUFDeEQsZ0JBQUksaUJBQWlCLFFBQVEsaUJBQWlCLFFBQVc7QUFDdkQscUJBQU8sMkJBQTJCLGFBQWEsUUFBUTtBQUFBLFlBQ3pEO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBUUEsY0FBSSx3QkFBd0IsQ0FBQztBQUU3QixtQkFBUyw2QkFBNkIsWUFBWTtBQUNoRCxnQkFBSSxPQUFPLDRCQUE0QjtBQUV2QyxnQkFBSSxDQUFDLE1BQU07QUFDVCxrQkFBSSxhQUFhLE9BQU8sZUFBZSxXQUFXLGFBQWEsV0FBVyxlQUFlLFdBQVc7QUFFcEcsa0JBQUksWUFBWTtBQUNkLHVCQUFPLGdEQUFnRCxhQUFhO0FBQUEsY0FDdEU7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBY0EsbUJBQVMsb0JBQW9CLFNBQVMsWUFBWTtBQUNoRCxnQkFBSSxDQUFDLFFBQVEsVUFBVSxRQUFRLE9BQU8sYUFBYSxRQUFRLE9BQU8sTUFBTTtBQUN0RTtBQUFBLFlBQ0Y7QUFFQSxvQkFBUSxPQUFPLFlBQVk7QUFDM0IsZ0JBQUksNEJBQTRCLDZCQUE2QixVQUFVO0FBRXZFLGdCQUFJLHNCQUFzQix5QkFBeUIsR0FBRztBQUNwRDtBQUFBLFlBQ0Y7QUFFQSxrQ0FBc0IseUJBQXlCLElBQUk7QUFJbkQsZ0JBQUksYUFBYTtBQUVqQixnQkFBSSxXQUFXLFFBQVEsVUFBVSxRQUFRLFdBQVcsa0JBQWtCLFNBQVM7QUFFN0UsMkJBQWEsaUNBQWlDLGlCQUFpQixRQUFRLE9BQU8sSUFBSSxJQUFJO0FBQUEsWUFDeEY7QUFFQTtBQUNFLDhDQUFnQyxPQUFPO0FBRXZDLG9CQUFNLDZIQUFrSSwyQkFBMkIsVUFBVTtBQUU3Syw4Q0FBZ0MsSUFBSTtBQUFBLFlBQ3RDO0FBQUEsVUFDRjtBQVlBLG1CQUFTLGtCQUFrQjJCLE9BQU0sWUFBWTtBQUMzQyxnQkFBSSxPQUFPQSxVQUFTLFVBQVU7QUFDNUI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksTUFBTSxRQUFRQSxLQUFJLEdBQUc7QUFDdkIsdUJBQVMsSUFBSSxHQUFHLElBQUlBLE1BQUssUUFBUSxLQUFLO0FBQ3BDLG9CQUFJLFFBQVFBLE1BQUssQ0FBQztBQUVsQixvQkFBSXJCLGdCQUFlLEtBQUssR0FBRztBQUN6QixzQ0FBb0IsT0FBTyxVQUFVO0FBQUEsZ0JBQ3ZDO0FBQUEsY0FDRjtBQUFBLFlBQ0YsV0FBV0EsZ0JBQWVxQixLQUFJLEdBQUc7QUFFL0Isa0JBQUlBLE1BQUssUUFBUTtBQUNmLGdCQUFBQSxNQUFLLE9BQU8sWUFBWTtBQUFBLGNBQzFCO0FBQUEsWUFDRixXQUFXQSxPQUFNO0FBQ2Ysa0JBQUksYUFBYSxjQUFjQSxLQUFJO0FBRW5DLGtCQUFJLE9BQU8sZUFBZSxZQUFZO0FBR3BDLG9CQUFJLGVBQWVBLE1BQUssU0FBUztBQUMvQixzQkFBSSxXQUFXLFdBQVcsS0FBS0EsS0FBSTtBQUNuQyxzQkFBSTtBQUVKLHlCQUFPLEVBQUUsT0FBTyxTQUFTLEtBQUssR0FBRyxNQUFNO0FBQ3JDLHdCQUFJckIsZ0JBQWUsS0FBSyxLQUFLLEdBQUc7QUFDOUIsMENBQW9CLEtBQUssT0FBTyxVQUFVO0FBQUEsb0JBQzVDO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQVNBLG1CQUFTLGtCQUFrQixTQUFTO0FBQ2xDO0FBQ0Usa0JBQUksT0FBTyxRQUFRO0FBRW5CLGtCQUFJLFNBQVMsUUFBUSxTQUFTLFVBQWEsT0FBTyxTQUFTLFVBQVU7QUFDbkU7QUFBQSxjQUNGO0FBRUEsa0JBQUk7QUFFSixrQkFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5Qiw0QkFBWSxLQUFLO0FBQUEsY0FDbkIsV0FBVyxPQUFPLFNBQVMsYUFBYSxLQUFLLGFBQWE7QUFBQTtBQUFBLGNBRTFELEtBQUssYUFBYSxrQkFBa0I7QUFDbEMsNEJBQVksS0FBSztBQUFBLGNBQ25CLE9BQU87QUFDTDtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxXQUFXO0FBRWIsb0JBQUksT0FBTyxpQkFBaUIsSUFBSTtBQUNoQywrQkFBZSxXQUFXLFFBQVEsT0FBTyxRQUFRLE1BQU0sT0FBTztBQUFBLGNBQ2hFLFdBQVcsS0FBSyxjQUFjLFVBQWEsQ0FBQywrQkFBK0I7QUFDekUsZ0RBQWdDO0FBRWhDLG9CQUFJLFFBQVEsaUJBQWlCLElBQUk7QUFFakMsc0JBQU0sdUdBQXVHLFNBQVMsU0FBUztBQUFBLGNBQ2pJO0FBRUEsa0JBQUksT0FBTyxLQUFLLG9CQUFvQixjQUFjLENBQUMsS0FBSyxnQkFBZ0Isc0JBQXNCO0FBQzVGLHNCQUFNLDRIQUFpSTtBQUFBLGNBQ3pJO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFPQSxtQkFBUyxzQkFBc0IsVUFBVTtBQUN2QztBQUNFLGtCQUFJc0IsUUFBTyxPQUFPLEtBQUssU0FBUyxLQUFLO0FBRXJDLHVCQUFTLElBQUksR0FBRyxJQUFJQSxNQUFLLFFBQVEsS0FBSztBQUNwQyxvQkFBSSxNQUFNQSxNQUFLLENBQUM7QUFFaEIsb0JBQUksUUFBUSxjQUFjLFFBQVEsT0FBTztBQUN2QyxrREFBZ0MsUUFBUTtBQUV4Qyx3QkFBTSw0R0FBaUgsR0FBRztBQUUxSCxrREFBZ0MsSUFBSTtBQUNwQztBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUVBLGtCQUFJLFNBQVMsUUFBUSxNQUFNO0FBQ3pCLGdEQUFnQyxRQUFRO0FBRXhDLHNCQUFNLHVEQUF1RDtBQUU3RCxnREFBZ0MsSUFBSTtBQUFBLGNBQ3RDO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyw0QkFBNEIsTUFBTSxPQUFPLFVBQVU7QUFDMUQsZ0JBQUksWUFBWSxtQkFBbUIsSUFBSTtBQUd2QyxnQkFBSSxDQUFDLFdBQVc7QUFDZCxrQkFBSSxPQUFPO0FBRVgsa0JBQUksU0FBUyxVQUFhLE9BQU8sU0FBUyxZQUFZLFNBQVMsUUFBUSxPQUFPLEtBQUssSUFBSSxFQUFFLFdBQVcsR0FBRztBQUNyRyx3QkFBUTtBQUFBLGNBQ1Y7QUFFQSxrQkFBSSxhQUFhLG1DQUFtQyxLQUFLO0FBRXpELGtCQUFJLFlBQVk7QUFDZCx3QkFBUTtBQUFBLGNBQ1YsT0FBTztBQUNMLHdCQUFRLDRCQUE0QjtBQUFBLGNBQ3RDO0FBRUEsa0JBQUk7QUFFSixrQkFBSSxTQUFTLE1BQU07QUFDakIsNkJBQWE7QUFBQSxjQUNmLFdBQVcsTUFBTSxRQUFRLElBQUksR0FBRztBQUM5Qiw2QkFBYTtBQUFBLGNBQ2YsV0FBVyxTQUFTLFVBQWEsS0FBSyxhQUFhLG9CQUFvQjtBQUNyRSw2QkFBYSxPQUFPLGlCQUFpQixLQUFLLElBQUksS0FBSyxhQUFhO0FBQ2hFLHVCQUFPO0FBQUEsY0FDVCxPQUFPO0FBQ0wsNkJBQWEsT0FBTztBQUFBLGNBQ3RCO0FBRUE7QUFDRSxzQkFBTSxxSkFBK0osWUFBWSxJQUFJO0FBQUEsY0FDdkw7QUFBQSxZQUNGO0FBRUEsZ0JBQUksVUFBVXhCLGdCQUFjLE1BQU0sTUFBTSxTQUFTO0FBR2pELGdCQUFJLFdBQVcsTUFBTTtBQUNuQixxQkFBTztBQUFBLFlBQ1Q7QUFPQSxnQkFBSSxXQUFXO0FBQ2IsdUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDekMsa0NBQWtCLFVBQVUsQ0FBQyxHQUFHLElBQUk7QUFBQSxjQUN0QztBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxTQUFTLFFBQVEsVUFBVTtBQUM3QixvQ0FBc0IsT0FBTztBQUFBLFlBQy9CLE9BQU87QUFDTCxnQ0FBa0IsT0FBTztBQUFBLFlBQzNCO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsY0FBSSxzQ0FBc0M7QUFDMUMsbUJBQVMsNEJBQTRCLE1BQU07QUFDekMsZ0JBQUksbUJBQW1CLDRCQUE0QixLQUFLLE1BQU0sSUFBSTtBQUNsRSw2QkFBaUIsT0FBTztBQUV4QjtBQUNFLGtCQUFJLENBQUMscUNBQXFDO0FBQ3hDLHNEQUFzQztBQUV0QyxxQkFBSyxzSkFBZ0s7QUFBQSxjQUN2SztBQUdBLHFCQUFPLGVBQWUsa0JBQWtCLFFBQVE7QUFBQSxnQkFDOUMsWUFBWTtBQUFBLGdCQUNaLEtBQUssV0FBWTtBQUNmLHVCQUFLLDJGQUFnRztBQUVyRyx5QkFBTyxlQUFlLE1BQU0sUUFBUTtBQUFBLG9CQUNsQyxPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUNELHlCQUFPO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsMkJBQTJCLFNBQVMsT0FBTyxVQUFVO0FBQzVELGdCQUFJLGFBQWFDLGVBQWEsTUFBTSxNQUFNLFNBQVM7QUFFbkQscUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDekMsZ0NBQWtCLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSTtBQUFBLFlBQ2pEO0FBRUEsOEJBQWtCLFVBQVU7QUFDNUIsbUJBQU87QUFBQSxVQUNUO0FBRUE7QUFFRSxnQkFBSTtBQUNGLGtCQUFJLGVBQWUsT0FBTyxPQUFPLENBQUMsQ0FBQztBQUduQyxrQ0FBSSxJQUFJLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO0FBQzlCLGtDQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7QUFBQSxZQUV4QixTQUFTLEdBQUc7QUFBQSxZQUNaO0FBQUEsVUFDRjtBQUVBLGNBQUksa0JBQW1CO0FBQ3ZCLGNBQUksaUJBQWtCO0FBQ3RCLGNBQUksZ0JBQWlCO0FBQ3JCLGNBQUl3QixZQUFXO0FBQUEsWUFDYixLQUFLO0FBQUEsWUFDTCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxTQUFTbkI7QUFBQSxZQUNULE1BQU07QUFBQSxVQUNSO0FBRUEsa0JBQVEsV0FBV21CO0FBQ25CLGtCQUFRLFlBQVloQztBQUNwQixrQkFBUSxnQkFBZ0JDO0FBQ3hCLGtCQUFRLHFEQUFxRDtBQUM3RCxrQkFBUSxlQUFlO0FBQ3ZCLGtCQUFRLGdCQUFnQmE7QUFDeEIsa0JBQVEsZ0JBQWdCO0FBQ3hCLGtCQUFRLGdCQUFnQjtBQUN4QixrQkFBUSxZQUFZWjtBQUNwQixrQkFBUSxhQUFhYztBQUNyQixrQkFBUSxpQkFBaUJQO0FBQ3pCLGtCQUFRLE9BQU87QUFDZixrQkFBUSxPQUFPUztBQUNmLGtCQUFRLGNBQWNRO0FBQ3RCLGtCQUFRLGFBQWFQO0FBQ3JCLGtCQUFRLGdCQUFnQjtBQUN4QixrQkFBUSxZQUFZSztBQUNwQixrQkFBUSxzQkFBc0I7QUFDOUIsa0JBQVEsa0JBQWtCQztBQUMxQixrQkFBUSxVQUFVRTtBQUNsQixrQkFBUSxhQUFhTjtBQUNyQixrQkFBUSxTQUFTRTtBQUNqQixrQkFBUSxXQUFXSDtBQUNuQixrQkFBUSxVQUFVO0FBQUEsUUFDaEIsR0FBRztBQUFBLE1BQ0w7QUFBQTtBQUFBOzs7QUM1eEVBO0FBQUE7QUFBQTtBQUVBLFVBQUksT0FBdUM7QUFDekMsZUFBTyxVQUFVO0FBQUEsTUFDbkIsT0FBTztBQUNMLGVBQU8sVUFBVTtBQUFBLE1BQ25CO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBV0EsVUFBSSxNQUF1QztBQUN6QyxTQUFDLFdBQVc7QUFDZDtBQUVBLGNBQUksMkJBQTJCO0FBQy9CLGNBQUksa0JBQWtCO0FBRXRCLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJLG9CQUFvQixPQUFPLGdCQUFnQixZQUFZLE9BQU8sWUFBWSxRQUFRO0FBRXRGLGNBQUksbUJBQW1CO0FBQ3JCLGdCQUFJLG1CQUFtQjtBQUV2QixvQkFBUSxlQUFlLFdBQVk7QUFDakMscUJBQU8saUJBQWlCLElBQUk7QUFBQSxZQUM5QjtBQUFBLFVBQ0YsT0FBTztBQUNMLGdCQUFJLFlBQVk7QUFDaEIsZ0JBQUksY0FBYyxVQUFVLElBQUk7QUFFaEMsb0JBQVEsZUFBZSxXQUFZO0FBQ2pDLHFCQUFPLFVBQVUsSUFBSSxJQUFJO0FBQUEsWUFDM0I7QUFBQSxVQUNGO0FBRUE7QUFBQTtBQUFBO0FBQUEsWUFFQSxPQUFPLFdBQVc7QUFBQSxZQUNsQixPQUFPLG1CQUFtQjtBQUFBLFlBQVk7QUFHcEMsZ0JBQUksWUFBWTtBQUNoQixnQkFBSSxhQUFhO0FBRWpCLGdCQUFJLGlCQUFpQixXQUFZO0FBQy9CLGtCQUFJLGNBQWMsTUFBTTtBQUN0QixvQkFBSTtBQUNGLHNCQUFJLGNBQWMsUUFBUSxhQUFhO0FBQ3ZDLHNCQUFJLG1CQUFtQjtBQUV2Qiw0QkFBVSxrQkFBa0IsV0FBVztBQUV2Qyw4QkFBWTtBQUFBLGdCQUNkLFNBQVMsR0FBRztBQUNWLDZCQUFXLGdCQUFnQixDQUFDO0FBQzVCLHdCQUFNO0FBQUEsZ0JBQ1I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLGtDQUFzQixTQUFVLElBQUk7QUFDbEMsa0JBQUksY0FBYyxNQUFNO0FBRXRCLDJCQUFXLHFCQUFxQixHQUFHLEVBQUU7QUFBQSxjQUN2QyxPQUFPO0FBQ0wsNEJBQVk7QUFDWiwyQkFBVyxnQkFBZ0IsQ0FBQztBQUFBLGNBQzlCO0FBQUEsWUFDRjtBQUVBLGlDQUFxQixTQUFVLElBQUksSUFBSTtBQUNyQywyQkFBYSxXQUFXLElBQUksRUFBRTtBQUFBLFlBQ2hDO0FBRUEsZ0NBQW9CLFdBQVk7QUFDOUIsMkJBQWEsVUFBVTtBQUFBLFlBQ3pCO0FBRUEsb0JBQVEsdUJBQXVCLFdBQVk7QUFDekMscUJBQU87QUFBQSxZQUNUO0FBRUEsMkJBQWUsUUFBUSwwQkFBMEIsV0FBWTtBQUFBLFlBQUM7QUFBQSxVQUNoRSxPQUFPO0FBRUwsZ0JBQUksY0FBYyxPQUFPO0FBQ3pCLGdCQUFJLGdCQUFnQixPQUFPO0FBRTNCLGdCQUFJLE9BQU8sWUFBWSxhQUFhO0FBSWxDLGtCQUFJYSx5QkFBd0IsT0FBTztBQUNuQyxrQkFBSUMsd0JBQXVCLE9BQU87QUFFbEMsa0JBQUksT0FBT0QsMkJBQTBCLFlBQVk7QUFFL0Msd0JBQVEsT0FBTyxFQUFFLG9KQUE4SjtBQUFBLGNBQ2pMO0FBRUEsa0JBQUksT0FBT0MsMEJBQXlCLFlBQVk7QUFFOUMsd0JBQVEsT0FBTyxFQUFFLG1KQUE2SjtBQUFBLGNBQ2hMO0FBQUEsWUFDRjtBQUVBLGdCQUFJLHVCQUF1QjtBQUMzQixnQkFBSSx3QkFBd0I7QUFDNUIsZ0JBQUksZ0JBQWdCO0FBS3BCLGdCQUFJLGdCQUFnQjtBQUNwQixnQkFBSSxXQUFXO0FBRWY7QUFHRSxzQkFBUSx1QkFBdUIsV0FBWTtBQUN6Qyx1QkFBTyxRQUFRLGFBQWEsS0FBSztBQUFBLGNBQ25DO0FBR0EsNkJBQWUsV0FBWTtBQUFBLGNBQUM7QUFBQSxZQUM5QjtBQUVBLG9CQUFRLDBCQUEwQixTQUFVLEtBQUs7QUFDL0Msa0JBQUksTUFBTSxLQUFLLE1BQU0sS0FBSztBQUV4Qix3QkFBUSxPQUFPLEVBQUUsaUhBQXNIO0FBQ3ZJO0FBQUEsY0FDRjtBQUVBLGtCQUFJLE1BQU0sR0FBRztBQUNYLGdDQUFnQixLQUFLLE1BQU0sTUFBTyxHQUFHO0FBQUEsY0FDdkMsT0FBTztBQUVMLGdDQUFnQjtBQUFBLGNBQ2xCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLDJCQUEyQixXQUFZO0FBQ3pDLGtCQUFJLDBCQUEwQixNQUFNO0FBQ2xDLG9CQUFJLGNBQWMsUUFBUSxhQUFhO0FBSXZDLDJCQUFXLGNBQWM7QUFDekIsb0JBQUksbUJBQW1CO0FBRXZCLG9CQUFJO0FBQ0Ysc0JBQUksY0FBYyxzQkFBc0Isa0JBQWtCLFdBQVc7QUFFckUsc0JBQUksQ0FBQyxhQUFhO0FBQ2hCLDJDQUF1QjtBQUN2Qiw0Q0FBd0I7QUFBQSxrQkFDMUIsT0FBTztBQUdMLHlCQUFLLFlBQVksSUFBSTtBQUFBLGtCQUN2QjtBQUFBLGdCQUNGLFNBQVMsT0FBTztBQUdkLHVCQUFLLFlBQVksSUFBSTtBQUNyQix3QkFBTTtBQUFBLGdCQUNSO0FBQUEsY0FDRixPQUFPO0FBQ0wsdUNBQXVCO0FBQUEsY0FDekI7QUFBQSxZQUNGO0FBRUEsZ0JBQUksVUFBVSxJQUFJLGVBQWU7QUFDakMsZ0JBQUksT0FBTyxRQUFRO0FBQ25CLG9CQUFRLE1BQU0sWUFBWTtBQUUxQixrQ0FBc0IsU0FBVSxVQUFVO0FBQ3hDLHNDQUF3QjtBQUV4QixrQkFBSSxDQUFDLHNCQUFzQjtBQUN6Qix1Q0FBdUI7QUFDdkIscUJBQUssWUFBWSxJQUFJO0FBQUEsY0FDdkI7QUFBQSxZQUNGO0FBRUEsaUNBQXFCLFNBQVUsVUFBVSxJQUFJO0FBQzNDLDhCQUFnQixZQUFZLFdBQVk7QUFDdEMseUJBQVMsUUFBUSxhQUFhLENBQUM7QUFBQSxjQUNqQyxHQUFHLEVBQUU7QUFBQSxZQUNQO0FBRUEsZ0NBQW9CLFdBQVk7QUFDOUIsNEJBQWMsYUFBYTtBQUUzQiw4QkFBZ0I7QUFBQSxZQUNsQjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxLQUFLLE1BQU1DLE9BQU07QUFDeEIsZ0JBQUksUUFBUSxLQUFLO0FBQ2pCLGlCQUFLLEtBQUtBLEtBQUk7QUFDZCxtQkFBTyxNQUFNQSxPQUFNLEtBQUs7QUFBQSxVQUMxQjtBQUNBLG1CQUFTQyxNQUFLLE1BQU07QUFDbEIsZ0JBQUksUUFBUSxLQUFLLENBQUM7QUFDbEIsbUJBQU8sVUFBVSxTQUFZLE9BQU87QUFBQSxVQUN0QztBQUNBLG1CQUFTLElBQUksTUFBTTtBQUNqQixnQkFBSSxRQUFRLEtBQUssQ0FBQztBQUVsQixnQkFBSSxVQUFVLFFBQVc7QUFDdkIsa0JBQUksT0FBTyxLQUFLLElBQUk7QUFFcEIsa0JBQUksU0FBUyxPQUFPO0FBQ2xCLHFCQUFLLENBQUMsSUFBSTtBQUNWLHlCQUFTLE1BQU0sTUFBTSxDQUFDO0FBQUEsY0FDeEI7QUFFQSxxQkFBTztBQUFBLFlBQ1QsT0FBTztBQUNMLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxPQUFPLE1BQU1ELE9BQU0sR0FBRztBQUM3QixnQkFBSSxRQUFRO0FBRVosbUJBQU8sTUFBTTtBQUNYLGtCQUFJLGNBQWMsUUFBUSxNQUFNO0FBQ2hDLGtCQUFJLFNBQVMsS0FBSyxXQUFXO0FBRTdCLGtCQUFJLFdBQVcsVUFBYSxRQUFRLFFBQVFBLEtBQUksSUFBSSxHQUFHO0FBRXJELHFCQUFLLFdBQVcsSUFBSUE7QUFDcEIscUJBQUssS0FBSyxJQUFJO0FBQ2Qsd0JBQVE7QUFBQSxjQUNWLE9BQU87QUFFTDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLFNBQVMsTUFBTUEsT0FBTSxHQUFHO0FBQy9CLGdCQUFJLFFBQVE7QUFDWixnQkFBSUUsVUFBUyxLQUFLO0FBRWxCLG1CQUFPLFFBQVFBLFNBQVE7QUFDckIsa0JBQUksYUFBYSxRQUFRLEtBQUssSUFBSTtBQUNsQyxrQkFBSSxPQUFPLEtBQUssU0FBUztBQUN6QixrQkFBSSxhQUFhLFlBQVk7QUFDN0Isa0JBQUksUUFBUSxLQUFLLFVBQVU7QUFFM0Isa0JBQUksU0FBUyxVQUFhLFFBQVEsTUFBTUYsS0FBSSxJQUFJLEdBQUc7QUFDakQsb0JBQUksVUFBVSxVQUFhLFFBQVEsT0FBTyxJQUFJLElBQUksR0FBRztBQUNuRCx1QkFBSyxLQUFLLElBQUk7QUFDZCx1QkFBSyxVQUFVLElBQUlBO0FBQ25CLDBCQUFRO0FBQUEsZ0JBQ1YsT0FBTztBQUNMLHVCQUFLLEtBQUssSUFBSTtBQUNkLHVCQUFLLFNBQVMsSUFBSUE7QUFDbEIsMEJBQVE7QUFBQSxnQkFDVjtBQUFBLGNBQ0YsV0FBVyxVQUFVLFVBQWEsUUFBUSxPQUFPQSxLQUFJLElBQUksR0FBRztBQUMxRCxxQkFBSyxLQUFLLElBQUk7QUFDZCxxQkFBSyxVQUFVLElBQUlBO0FBQ25CLHdCQUFRO0FBQUEsY0FDVixPQUFPO0FBRUw7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxRQUFRLEdBQUdHLElBQUc7QUFFckIsZ0JBQUksT0FBTyxFQUFFLFlBQVlBLEdBQUU7QUFDM0IsbUJBQU8sU0FBUyxJQUFJLE9BQU8sRUFBRSxLQUFLQSxHQUFFO0FBQUEsVUFDdEM7QUFHQSxjQUFJLG9CQUFvQjtBQUN4QixjQUFJLHVCQUF1QjtBQUMzQixjQUFJLGlCQUFpQjtBQUNyQixjQUFJLGNBQWM7QUFDbEIsY0FBSSxlQUFlO0FBRW5CLG1CQUFTLGdCQUFnQixNQUFNLElBQUk7QUFBQSxVQUNuQztBQU1BLGNBQUksb0JBQW9CO0FBRXhCLGNBQUksNkJBQTZCO0FBRWpDLGNBQUksaUNBQWlDO0FBQ3JDLGNBQUksMEJBQTBCO0FBQzlCLGNBQUksdUJBQXVCO0FBRTNCLGNBQUksd0JBQXdCO0FBRTVCLGNBQUksWUFBWSxDQUFDO0FBQ2pCLGNBQUksYUFBYSxDQUFDO0FBRWxCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksY0FBYztBQUNsQixjQUFJLHVCQUF1QjtBQUUzQixjQUFJLG1CQUFtQjtBQUN2QixjQUFJLDBCQUEwQjtBQUM5QixjQUFJLHlCQUF5QjtBQUU3QixtQkFBUyxjQUFjLGFBQWE7QUFFbEMsZ0JBQUksUUFBUUYsTUFBSyxVQUFVO0FBRTNCLG1CQUFPLFVBQVUsTUFBTTtBQUNyQixrQkFBSSxNQUFNLGFBQWEsTUFBTTtBQUUzQixvQkFBSSxVQUFVO0FBQUEsY0FDaEIsV0FBVyxNQUFNLGFBQWEsYUFBYTtBQUV6QyxvQkFBSSxVQUFVO0FBQ2Qsc0JBQU0sWUFBWSxNQUFNO0FBQ3hCLHFCQUFLLFdBQVcsS0FBSztBQUFBLGNBQ3ZCLE9BQU87QUFFTDtBQUFBLGNBQ0Y7QUFFQSxzQkFBUUEsTUFBSyxVQUFVO0FBQUEsWUFDekI7QUFBQSxVQUNGO0FBRUEsbUJBQVMsY0FBYyxhQUFhO0FBQ2xDLHFDQUF5QjtBQUN6QiwwQkFBYyxXQUFXO0FBRXpCLGdCQUFJLENBQUMseUJBQXlCO0FBQzVCLGtCQUFJQSxNQUFLLFNBQVMsTUFBTSxNQUFNO0FBQzVCLDBDQUEwQjtBQUMxQixvQ0FBb0IsU0FBUztBQUFBLGNBQy9CLE9BQU87QUFDTCxvQkFBSSxhQUFhQSxNQUFLLFVBQVU7QUFFaEMsb0JBQUksZUFBZSxNQUFNO0FBQ3ZCLHFDQUFtQixlQUFlLFdBQVcsWUFBWSxXQUFXO0FBQUEsZ0JBQ3RFO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsVUFBVSxrQkFBa0JHLGNBQWE7QUFHaEQsc0NBQTBCO0FBRTFCLGdCQUFJLHdCQUF3QjtBQUUxQix1Q0FBeUI7QUFDekIsZ0NBQWtCO0FBQUEsWUFDcEI7QUFFQSwrQkFBbUI7QUFDbkIsZ0JBQUksd0JBQXdCO0FBRTVCLGdCQUFJO0FBQ0Ysa0JBQUksaUJBQWlCO0FBQ25CLG9CQUFJO0FBQ0YseUJBQU8sU0FBUyxrQkFBa0JBLFlBQVc7QUFBQSxnQkFDL0MsU0FBUyxPQUFPO0FBQ2Qsc0JBQUksZ0JBQWdCLE1BQU07QUFDeEIsd0JBQUksY0FBYyxRQUFRLGFBQWE7QUFDdkMsb0NBQWdCLGFBQWEsV0FBVztBQUN4QyxnQ0FBWSxXQUFXO0FBQUEsa0JBQ3pCO0FBRUEsd0JBQU07QUFBQSxnQkFDUjtBQUFBLGNBQ0YsT0FBTztBQUVMLHVCQUFPLFNBQVMsa0JBQWtCQSxZQUFXO0FBQUEsY0FDL0M7QUFBQSxZQUNGLFVBQUU7QUFDQSw0QkFBYztBQUNkLHFDQUF1QjtBQUN2QixpQ0FBbUI7QUFBQSxZQUNyQjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxTQUFTLGtCQUFrQkEsY0FBYTtBQUMvQyxnQkFBSSxjQUFjQTtBQUNsQiwwQkFBYyxXQUFXO0FBQ3pCLDBCQUFjSCxNQUFLLFNBQVM7QUFFNUIsbUJBQU8sZ0JBQWdCLFFBQVEsQ0FBRSwwQkFBNEI7QUFDM0Qsa0JBQUksWUFBWSxpQkFBaUIsZ0JBQWdCLENBQUMsb0JBQW9CLFFBQVEscUJBQXFCLElBQUk7QUFFckc7QUFBQSxjQUNGO0FBRUEsa0JBQUksV0FBVyxZQUFZO0FBRTNCLGtCQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLDRCQUFZLFdBQVc7QUFDdkIsdUNBQXVCLFlBQVk7QUFDbkMsb0JBQUkseUJBQXlCLFlBQVksa0JBQWtCO0FBRTNELG9CQUFJLHVCQUF1QixTQUFTLHNCQUFzQjtBQUMxRCw4QkFBYyxRQUFRLGFBQWE7QUFFbkMsb0JBQUksT0FBTyx5QkFBeUIsWUFBWTtBQUM5Qyw4QkFBWSxXQUFXO0FBQUEsZ0JBQ3pCLE9BQU87QUFFTCxzQkFBSSxnQkFBZ0JBLE1BQUssU0FBUyxHQUFHO0FBQ25DLHdCQUFJLFNBQVM7QUFBQSxrQkFDZjtBQUFBLGdCQUNGO0FBRUEsOEJBQWMsV0FBVztBQUFBLGNBQzNCLE9BQU87QUFDTCxvQkFBSSxTQUFTO0FBQUEsY0FDZjtBQUVBLDRCQUFjQSxNQUFLLFNBQVM7QUFBQSxZQUM5QjtBQUdBLGdCQUFJLGdCQUFnQixNQUFNO0FBQ3hCLHFCQUFPO0FBQUEsWUFDVCxPQUFPO0FBQ0wsa0JBQUksYUFBYUEsTUFBSyxVQUFVO0FBRWhDLGtCQUFJLGVBQWUsTUFBTTtBQUN2QixtQ0FBbUIsZUFBZSxXQUFXLFlBQVksV0FBVztBQUFBLGNBQ3RFO0FBRUEscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUVBLG1CQUFTLHlCQUF5QixlQUFlLGNBQWM7QUFDN0Qsb0JBQVEsZUFBZTtBQUFBLGNBQ3JCLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFDSDtBQUFBLGNBRUY7QUFDRSxnQ0FBZ0I7QUFBQSxZQUNwQjtBQUVBLGdCQUFJLHdCQUF3QjtBQUM1QixtQ0FBdUI7QUFFdkIsZ0JBQUk7QUFDRixxQkFBTyxhQUFhO0FBQUEsWUFDdEIsVUFBRTtBQUNBLHFDQUF1QjtBQUFBLFlBQ3pCO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGNBQWMsY0FBYztBQUNuQyxnQkFBSTtBQUVKLG9CQUFRLHNCQUFzQjtBQUFBLGNBQzVCLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFFSCxnQ0FBZ0I7QUFDaEI7QUFBQSxjQUVGO0FBRUUsZ0NBQWdCO0FBQ2hCO0FBQUEsWUFDSjtBQUVBLGdCQUFJLHdCQUF3QjtBQUM1QixtQ0FBdUI7QUFFdkIsZ0JBQUk7QUFDRixxQkFBTyxhQUFhO0FBQUEsWUFDdEIsVUFBRTtBQUNBLHFDQUF1QjtBQUFBLFlBQ3pCO0FBQUEsVUFDRjtBQUVBLG1CQUFTLHNCQUFzQixVQUFVO0FBQ3ZDLGdCQUFJLHNCQUFzQjtBQUMxQixtQkFBTyxXQUFZO0FBRWpCLGtCQUFJLHdCQUF3QjtBQUM1QixxQ0FBdUI7QUFFdkIsa0JBQUk7QUFDRix1QkFBTyxTQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsY0FDdkMsVUFBRTtBQUNBLHVDQUF1QjtBQUFBLGNBQ3pCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUywwQkFBMEIsZUFBZSxVQUFVLFNBQVM7QUFDbkUsZ0JBQUksY0FBYyxRQUFRLGFBQWE7QUFDdkMsZ0JBQUk7QUFFSixnQkFBSSxPQUFPLFlBQVksWUFBWSxZQUFZLE1BQU07QUFDbkQsa0JBQUksUUFBUSxRQUFRO0FBRXBCLGtCQUFJLE9BQU8sVUFBVSxZQUFZLFFBQVEsR0FBRztBQUMxQyw0QkFBWSxjQUFjO0FBQUEsY0FDNUIsT0FBTztBQUNMLDRCQUFZO0FBQUEsY0FDZDtBQUFBLFlBQ0YsT0FBTztBQUNMLDBCQUFZO0FBQUEsWUFDZDtBQUVBLGdCQUFJO0FBRUosb0JBQVEsZUFBZTtBQUFBLGNBQ3JCLEtBQUs7QUFDSCwwQkFBVTtBQUNWO0FBQUEsY0FFRixLQUFLO0FBQ0gsMEJBQVU7QUFDVjtBQUFBLGNBRUYsS0FBSztBQUNILDBCQUFVO0FBQ1Y7QUFBQSxjQUVGLEtBQUs7QUFDSCwwQkFBVTtBQUNWO0FBQUEsY0FFRixLQUFLO0FBQUEsY0FDTDtBQUNFLDBCQUFVO0FBQ1Y7QUFBQSxZQUNKO0FBRUEsZ0JBQUksaUJBQWlCLFlBQVk7QUFDakMsZ0JBQUksVUFBVTtBQUFBLGNBQ1osSUFBSTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFdBQVc7QUFBQSxZQUNiO0FBRUEsZ0JBQUksWUFBWSxhQUFhO0FBRTNCLHNCQUFRLFlBQVk7QUFDcEIsbUJBQUssWUFBWSxPQUFPO0FBRXhCLGtCQUFJQSxNQUFLLFNBQVMsTUFBTSxRQUFRLFlBQVlBLE1BQUssVUFBVSxHQUFHO0FBRTVELG9CQUFJLHdCQUF3QjtBQUUxQixvQ0FBa0I7QUFBQSxnQkFDcEIsT0FBTztBQUNMLDJDQUF5QjtBQUFBLGdCQUMzQjtBQUdBLG1DQUFtQixlQUFlLFlBQVksV0FBVztBQUFBLGNBQzNEO0FBQUEsWUFDRixPQUFPO0FBQ0wsc0JBQVEsWUFBWTtBQUNwQixtQkFBSyxXQUFXLE9BQU87QUFJdkIsa0JBQUksQ0FBQywyQkFBMkIsQ0FBQyxrQkFBa0I7QUFDakQsMENBQTBCO0FBQzFCLG9DQUFvQixTQUFTO0FBQUEsY0FDL0I7QUFBQSxZQUNGO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsMEJBQTBCO0FBQUEsVUFDbkM7QUFFQSxtQkFBUyw2QkFBNkI7QUFFcEMsZ0JBQUksQ0FBQywyQkFBMkIsQ0FBQyxrQkFBa0I7QUFDakQsd0NBQTBCO0FBQzFCLGtDQUFvQixTQUFTO0FBQUEsWUFDL0I7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZ0NBQWdDO0FBQ3ZDLG1CQUFPQSxNQUFLLFNBQVM7QUFBQSxVQUN2QjtBQUVBLG1CQUFTLHdCQUF3QixNQUFNO0FBS3JDLGlCQUFLLFdBQVc7QUFBQSxVQUNsQjtBQUVBLG1CQUFTLG1DQUFtQztBQUMxQyxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLHdCQUF3QjtBQUM1QixjQUFJLHFCQUFzQjtBQUUxQixrQkFBUSx3QkFBd0I7QUFDaEMsa0JBQVEsNkJBQTZCO0FBQ3JDLGtCQUFRLHVCQUF1QjtBQUMvQixrQkFBUSwwQkFBMEI7QUFDbEMsa0JBQVEscUJBQXFCO0FBQzdCLGtCQUFRLGdDQUFnQztBQUN4QyxrQkFBUSwwQkFBMEI7QUFDbEMsa0JBQVEsNkJBQTZCO0FBQ3JDLGtCQUFRLG1DQUFtQztBQUMzQyxrQkFBUSxnQ0FBZ0M7QUFDeEMsa0JBQVEsZ0JBQWdCO0FBQ3hCLGtCQUFRLDBCQUEwQjtBQUNsQyxrQkFBUSx3QkFBd0I7QUFDaEMsa0JBQVEsMkJBQTJCO0FBQ25DLGtCQUFRLDRCQUE0QjtBQUNwQyxrQkFBUSx3QkFBd0I7QUFBQSxRQUM5QixHQUFHO0FBQUEsTUFDTDtBQUFBO0FBQUE7OztBQ3JvQkE7QUFBQTtBQUFBO0FBRUEsVUFBSSxPQUF1QztBQUN6QyxlQUFPLFVBQVU7QUFBQSxNQUNuQixPQUFPO0FBQ0wsZUFBTyxVQUFVO0FBQUEsTUFDbkI7QUFBQTtBQUFBOzs7QUNOQTtBQUFBO0FBQUE7QUFXQSxVQUFJLE1BQXVDO0FBQ3pDLFNBQUMsV0FBVztBQUNkO0FBRUEsY0FBSSxvQkFBb0I7QUFFeEIsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxrQkFBa0I7QUFLdEIsa0JBQVEsb0JBQW9CO0FBRTVCLGtCQUFRLGtCQUFrQjtBQUUxQjtBQUNFLG9CQUFRLG9CQUFvQjtBQUFBLGNBQzFCLFNBQVMsb0JBQUksSUFBSTtBQUFBLFlBQ25CO0FBQ0Esb0JBQVEsa0JBQWtCO0FBQUEsY0FDeEIsU0FBUztBQUFBLFlBQ1g7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsZUFBZSxVQUFVO0FBRWhDLGdCQUFJLG1CQUFtQixRQUFRLGtCQUFrQjtBQUNqRCxvQkFBUSxrQkFBa0IsVUFBVSxvQkFBSSxJQUFJO0FBRTVDLGdCQUFJO0FBQ0YscUJBQU8sU0FBUztBQUFBLFlBQ2xCLFVBQUU7QUFDQSxzQkFBUSxrQkFBa0IsVUFBVTtBQUFBLFlBQ3RDO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHNCQUFzQjtBQUM3QjtBQUNFLHFCQUFPLFFBQVEsa0JBQWtCO0FBQUEsWUFDbkM7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsdUJBQXVCO0FBQzlCLG1CQUFPLEVBQUU7QUFBQSxVQUNYO0FBQ0EsbUJBQVMsZUFBZSxNQUFNLFdBQVcsVUFBVTtBQUNqRCxnQkFBSSxXQUFXLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFFbkYsZ0JBQUksY0FBYztBQUFBLGNBQ2hCLFNBQVM7QUFBQSxjQUNULElBQUk7QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFDQSxnQkFBSSxtQkFBbUIsUUFBUSxrQkFBa0I7QUFJakQsZ0JBQUksZUFBZSxJQUFJLElBQUksZ0JBQWdCO0FBQzNDLHlCQUFhLElBQUksV0FBVztBQUM1QixvQkFBUSxrQkFBa0IsVUFBVTtBQUNwQyxnQkFBSSxhQUFhLFFBQVEsZ0JBQWdCO0FBQ3pDLGdCQUFJO0FBRUosZ0JBQUk7QUFDRixrQkFBSSxlQUFlLE1BQU07QUFDdkIsMkJBQVcsb0JBQW9CLFdBQVc7QUFBQSxjQUM1QztBQUFBLFlBQ0YsVUFBRTtBQUNBLGtCQUFJO0FBQ0Ysb0JBQUksZUFBZSxNQUFNO0FBQ3ZCLDZCQUFXLGNBQWMsY0FBYyxRQUFRO0FBQUEsZ0JBQ2pEO0FBQUEsY0FDRixVQUFFO0FBQ0Esb0JBQUk7QUFDRixnQ0FBYyxTQUFTO0FBQUEsZ0JBQ3pCLFVBQUU7QUFDQSwwQkFBUSxrQkFBa0IsVUFBVTtBQUVwQyxzQkFBSTtBQUNGLHdCQUFJLGVBQWUsTUFBTTtBQUN2QixpQ0FBVyxjQUFjLGNBQWMsUUFBUTtBQUFBLG9CQUNqRDtBQUFBLGtCQUNGLFVBQUU7QUFDQSxnQ0FBWTtBQUdaLHdCQUFJLGVBQWUsUUFBUSxZQUFZLFlBQVksR0FBRztBQUNwRCxpQ0FBVyxvQ0FBb0MsV0FBVztBQUFBLG9CQUM1RDtBQUFBLGtCQUNGO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGNBQWMsVUFBVTtBQUMvQixnQkFBSSxXQUFXLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFFbkYsZ0JBQUksc0JBQXNCLFFBQVEsa0JBQWtCO0FBQ3BELGdCQUFJLGFBQWEsUUFBUSxnQkFBZ0I7QUFFekMsZ0JBQUksZUFBZSxNQUFNO0FBQ3ZCLHlCQUFXLGdCQUFnQixxQkFBcUIsUUFBUTtBQUFBLFlBQzFEO0FBSUEsZ0NBQW9CLFFBQVEsU0FBVSxhQUFhO0FBQ2pELDBCQUFZO0FBQUEsWUFDZCxDQUFDO0FBQ0QsZ0JBQUksU0FBUztBQUViLHFCQUFTLFVBQVU7QUFDakIsa0JBQUksbUJBQW1CLFFBQVEsa0JBQWtCO0FBQ2pELHNCQUFRLGtCQUFrQixVQUFVO0FBQ3BDLDJCQUFhLFFBQVEsZ0JBQWdCO0FBRXJDLGtCQUFJO0FBQ0Ysb0JBQUk7QUFFSixvQkFBSTtBQUNGLHNCQUFJLGVBQWUsTUFBTTtBQUN2QiwrQkFBVyxjQUFjLHFCQUFxQixRQUFRO0FBQUEsa0JBQ3hEO0FBQUEsZ0JBQ0YsVUFBRTtBQUNBLHNCQUFJO0FBQ0Ysa0NBQWMsU0FBUyxNQUFNLFFBQVcsU0FBUztBQUFBLGtCQUNuRCxVQUFFO0FBQ0EsNEJBQVEsa0JBQWtCLFVBQVU7QUFFcEMsd0JBQUksZUFBZSxNQUFNO0FBQ3ZCLGlDQUFXLGNBQWMscUJBQXFCLFFBQVE7QUFBQSxvQkFDeEQ7QUFBQSxrQkFDRjtBQUFBLGdCQUNGO0FBRUEsdUJBQU87QUFBQSxjQUNULFVBQUU7QUFDQSxvQkFBSSxDQUFDLFFBQVE7QUFJWCwyQkFBUztBQUlULHNDQUFvQixRQUFRLFNBQVUsYUFBYTtBQUNqRCxnQ0FBWTtBQUVaLHdCQUFJLGVBQWUsUUFBUSxZQUFZLFlBQVksR0FBRztBQUNwRCxpQ0FBVyxvQ0FBb0MsV0FBVztBQUFBLG9CQUM1RDtBQUFBLGtCQUNGLENBQUM7QUFBQSxnQkFDSDtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsb0JBQVEsU0FBUyxTQUFTLFNBQVM7QUFDakMsMkJBQWEsUUFBUSxnQkFBZ0I7QUFFckMsa0JBQUk7QUFDRixvQkFBSSxlQUFlLE1BQU07QUFDdkIsNkJBQVcsZUFBZSxxQkFBcUIsUUFBUTtBQUFBLGdCQUN6RDtBQUFBLGNBQ0YsVUFBRTtBQUlBLG9DQUFvQixRQUFRLFNBQVUsYUFBYTtBQUNqRCw4QkFBWTtBQUVaLHNCQUFJLGNBQWMsWUFBWSxZQUFZLEdBQUc7QUFDM0MsK0JBQVcsb0NBQW9DLFdBQVc7QUFBQSxrQkFDNUQ7QUFBQSxnQkFDRixDQUFDO0FBQUEsY0FDSDtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGNBQWM7QUFFbEI7QUFDRSwwQkFBYyxvQkFBSSxJQUFJO0FBQUEsVUFDeEI7QUFFQSxtQkFBUyxtQkFBbUIsWUFBWTtBQUN0QztBQUNFLDBCQUFZLElBQUksVUFBVTtBQUUxQixrQkFBSSxZQUFZLFNBQVMsR0FBRztBQUMxQix3QkFBUSxnQkFBZ0IsVUFBVTtBQUFBLGtCQUNoQztBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxnQkFDRjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHFCQUFxQixZQUFZO0FBQ3hDO0FBQ0UsMEJBQVksT0FBTyxVQUFVO0FBRTdCLGtCQUFJLFlBQVksU0FBUyxHQUFHO0FBQzFCLHdCQUFRLGdCQUFnQixVQUFVO0FBQUEsY0FDcEM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLG9CQUFvQixhQUFhO0FBQ3hDLGdCQUFJLGdCQUFnQjtBQUNwQixnQkFBSSxjQUFjO0FBQ2xCLHdCQUFZLFFBQVEsU0FBVSxZQUFZO0FBQ3hDLGtCQUFJO0FBQ0YsMkJBQVcsb0JBQW9CLFdBQVc7QUFBQSxjQUM1QyxTQUFTLE9BQU87QUFDZCxvQkFBSSxDQUFDLGVBQWU7QUFDbEIsa0NBQWdCO0FBQ2hCLGdDQUFjO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRjtBQUFBLFlBQ0YsQ0FBQztBQUVELGdCQUFJLGVBQWU7QUFDakIsb0JBQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUVBLG1CQUFTLG9DQUFvQyxhQUFhO0FBQ3hELGdCQUFJLGdCQUFnQjtBQUNwQixnQkFBSSxjQUFjO0FBQ2xCLHdCQUFZLFFBQVEsU0FBVSxZQUFZO0FBQ3hDLGtCQUFJO0FBQ0YsMkJBQVcsb0NBQW9DLFdBQVc7QUFBQSxjQUM1RCxTQUFTLE9BQU87QUFDZCxvQkFBSSxDQUFDLGVBQWU7QUFDbEIsa0NBQWdCO0FBQ2hCLGdDQUFjO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRjtBQUFBLFlBQ0YsQ0FBQztBQUVELGdCQUFJLGVBQWU7QUFDakIsb0JBQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGdCQUFnQixjQUFjLFVBQVU7QUFDL0MsZ0JBQUksZ0JBQWdCO0FBQ3BCLGdCQUFJLGNBQWM7QUFDbEIsd0JBQVksUUFBUSxTQUFVLFlBQVk7QUFDeEMsa0JBQUk7QUFDRiwyQkFBVyxnQkFBZ0IsY0FBYyxRQUFRO0FBQUEsY0FDbkQsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxjQUFjLGNBQWMsVUFBVTtBQUM3QyxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLGNBQWMsY0FBYyxRQUFRO0FBQUEsY0FDakQsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxjQUFjLGNBQWMsVUFBVTtBQUM3QyxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLGNBQWMsY0FBYyxRQUFRO0FBQUEsY0FDakQsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxlQUFlLGNBQWMsVUFBVTtBQUM5QyxnQkFBSSxnQkFBZ0I7QUFDcEIsZ0JBQUksY0FBYztBQUNsQix3QkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN4QyxrQkFBSTtBQUNGLDJCQUFXLGVBQWUsY0FBYyxRQUFRO0FBQUEsY0FDbEQsU0FBUyxPQUFPO0FBQ2Qsb0JBQUksQ0FBQyxlQUFlO0FBQ2xCLGtDQUFnQjtBQUNoQixnQ0FBYztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFFRCxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFFQSxrQkFBUSxpQkFBaUI7QUFDekIsa0JBQVEsc0JBQXNCO0FBQzlCLGtCQUFRLHVCQUF1QjtBQUMvQixrQkFBUSxxQkFBcUI7QUFDN0Isa0JBQVEsaUJBQWlCO0FBQ3pCLGtCQUFRLHVCQUF1QjtBQUMvQixrQkFBUSxnQkFBZ0I7QUFBQSxRQUN0QixHQUFHO0FBQUEsTUFDTDtBQUFBO0FBQUE7OztBQzFWQTtBQUFBO0FBQUE7QUFFQSxVQUFJLE9BQXVDO0FBQ3pDLGVBQU8sVUFBVTtBQUFBLE1BQ25CLE9BQU87QUFDTCxlQUFPLFVBQVU7QUFBQSxNQUNuQjtBQUFBO0FBQUE7OztBQ05BO0FBQUE7QUFBQTtBQVdBLFVBQUksTUFBdUM7QUFDekMsU0FBQyxXQUFXO0FBQ2Q7QUFFQSxjQUFJSSxXQUFRO0FBQ1osY0FBSSxVQUFVO0FBQ2QsY0FBSSxZQUFZO0FBQ2hCLGNBQUksVUFBVTtBQUVkLGNBQUksdUJBQXVCQSxTQUFNO0FBT2pDLG1CQUFTLEtBQUssUUFBUTtBQUNwQjtBQUNFLHVCQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUMxRyxxQkFBSyxPQUFPLENBQUMsSUFBSSxVQUFVLElBQUk7QUFBQSxjQUNqQztBQUVBLDJCQUFhLFFBQVEsUUFBUSxJQUFJO0FBQUEsWUFDbkM7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsTUFBTSxRQUFRO0FBQ3JCO0FBQ0UsdUJBQVMsUUFBUSxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxHQUFHLFFBQVEsT0FBTyxTQUFTO0FBQ2pILHFCQUFLLFFBQVEsQ0FBQyxJQUFJLFVBQVUsS0FBSztBQUFBLGNBQ25DO0FBRUEsMkJBQWEsU0FBUyxRQUFRLElBQUk7QUFBQSxZQUNwQztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxhQUFhLE9BQU8sUUFBUSxNQUFNO0FBR3pDO0FBQ0Usa0JBQUlDLDBCQUF5QixxQkFBcUI7QUFDbEQsa0JBQUksUUFBUUEsd0JBQXVCLGlCQUFpQjtBQUVwRCxrQkFBSSxVQUFVLElBQUk7QUFDaEIsMEJBQVU7QUFDVix1QkFBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFBQSxjQUM1QjtBQUVBLGtCQUFJLGlCQUFpQixLQUFLLElBQUksU0FBVSxNQUFNO0FBQzVDLHVCQUFPLEtBQUs7QUFBQSxjQUNkLENBQUM7QUFFRCw2QkFBZSxRQUFRLGNBQWMsTUFBTTtBQUkzQyx1QkFBUyxVQUFVLE1BQU0sS0FBSyxRQUFRLEtBQUssR0FBRyxTQUFTLGNBQWM7QUFBQSxZQUN2RTtBQUFBLFVBQ0Y7QUFFQSxjQUFJLENBQUNELFVBQU87QUFDVjtBQUNFLG9CQUFNLE1BQU8saUdBQWtHO0FBQUEsWUFDakg7QUFBQSxVQUNGO0FBRUEsY0FBSSxvQkFBb0I7QUFDeEIsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSx5QkFBeUI7QUFFN0IsY0FBSSxXQUFXO0FBRWYsY0FBSSxhQUFhO0FBRWpCLGNBQUksZ0JBQWdCO0FBQ3BCLGNBQUksV0FBVztBQUNmLGNBQUlFLGFBQVc7QUFDZixjQUFJLE9BQU87QUFDWCxjQUFJLGtCQUFrQjtBQUN0QixjQUFJLGtCQUFrQjtBQUN0QixjQUFJLGFBQWE7QUFDakIsY0FBSSxXQUFXO0FBQ2YsY0FBSSxvQkFBb0I7QUFDeEIsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSSxzQkFBc0I7QUFDMUIsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSSwyQkFBMkI7QUFDL0IsY0FBSSxxQkFBcUI7QUFDekIsY0FBSSx3QkFBd0I7QUFDNUIsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxRQUFRO0FBQ1osY0FBSSxxQkFBcUI7QUFDekIsY0FBSSx3QkFBd0I7QUFJNUIsY0FBSSxzQkFBc0I7QUFFMUIsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxzQkFBc0I7QUFDMUIsY0FBSSxzQkFBc0I7QUFFMUIsY0FBSSxrQkFBa0Isb0JBQUksSUFBSTtBQU05QixjQUFJLCtCQUErQixDQUFDO0FBUXBDLGNBQUksNEJBQTZCLENBQUM7QUFFbEMsbUJBQVMsc0JBQXNCLGtCQUFrQixjQUFjO0FBQzdELGdDQUFvQixrQkFBa0IsWUFBWTtBQUNsRCxnQ0FBb0IsbUJBQW1CLFdBQVcsWUFBWTtBQUFBLFVBQ2hFO0FBQ0EsbUJBQVMsb0JBQW9CLGtCQUFrQixjQUFjO0FBQzNEO0FBQ0Usa0JBQUksNkJBQTZCLGdCQUFnQixHQUFHO0FBQ2xELHNCQUFNLDhGQUFtRyxnQkFBZ0I7QUFBQSxjQUMzSDtBQUFBLFlBQ0Y7QUFFQSx5Q0FBNkIsZ0JBQWdCLElBQUk7QUFFakQ7QUFDRSxrQkFBSSxpQkFBaUIsaUJBQWlCLFlBQVk7QUFDbEQsd0NBQTBCLGNBQWMsSUFBSTtBQUU1QyxrQkFBSSxxQkFBcUIsaUJBQWlCO0FBQ3hDLDBDQUEwQixhQUFhO0FBQUEsY0FDekM7QUFBQSxZQUNGO0FBRUEscUJBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxRQUFRLEtBQUs7QUFDNUMsOEJBQWdCLElBQUksYUFBYSxDQUFDLENBQUM7QUFBQSxZQUNyQztBQUFBLFVBQ0Y7QUFFQSxjQUFJLFlBQVksQ0FBQyxFQUFFLE9BQU8sV0FBVyxlQUFlLE9BQU8sT0FBTyxhQUFhLGVBQWUsT0FBTyxPQUFPLFNBQVMsa0JBQWtCO0FBSXZJLGNBQUksV0FBVztBQUdmLGNBQUksU0FBUztBQUtiLGNBQUksb0JBQW9CO0FBSXhCLGNBQUksVUFBVTtBQUtkLGNBQUkscUJBQXFCO0FBR3pCLGNBQUksVUFBVTtBQUdkLGNBQUksbUJBQW1CO0FBR3ZCLGNBQUksNEJBQTRCO0FBR2hDLGNBQUksc0JBQXNCLDRCQUE0QjtBQUN0RCxjQUFJLHNCQUFzQjtBQUMxQixjQUFJLDZCQUE2QixJQUFJLE9BQU8sT0FBTyw0QkFBNEIsT0FBTyxzQkFBc0IsS0FBSztBQUNqSCxjQUFJQyxrQkFBaUIsT0FBTyxVQUFVO0FBQ3RDLGNBQUksNEJBQTRCLENBQUM7QUFDakMsY0FBSSw4QkFBOEIsQ0FBQztBQUNuQyxtQkFBUyxvQkFBb0IsZUFBZTtBQUMxQyxnQkFBSUEsZ0JBQWUsS0FBSyw2QkFBNkIsYUFBYSxHQUFHO0FBQ25FLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJQSxnQkFBZSxLQUFLLDJCQUEyQixhQUFhLEdBQUc7QUFDakUscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksMkJBQTJCLEtBQUssYUFBYSxHQUFHO0FBQ2xELDBDQUE0QixhQUFhLElBQUk7QUFDN0MscUJBQU87QUFBQSxZQUNUO0FBRUEsc0NBQTBCLGFBQWEsSUFBSTtBQUUzQztBQUNFLG9CQUFNLGdDQUFnQyxhQUFhO0FBQUEsWUFDckQ7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxzQkFBc0IsTUFBTSxjQUFjLHNCQUFzQjtBQUN2RSxnQkFBSSxpQkFBaUIsTUFBTTtBQUN6QixxQkFBTyxhQUFhLFNBQVM7QUFBQSxZQUMvQjtBQUVBLGdCQUFJLHNCQUFzQjtBQUN4QixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxLQUFLLFNBQVMsTUFBTSxLQUFLLENBQUMsTUFBTSxPQUFPLEtBQUssQ0FBQyxNQUFNLFNBQVMsS0FBSyxDQUFDLE1BQU0sT0FBTyxLQUFLLENBQUMsTUFBTSxNQUFNO0FBQ25HLHFCQUFPO0FBQUEsWUFDVDtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGlDQUFpQyxNQUFNLE9BQU8sY0FBYyxzQkFBc0I7QUFDekYsZ0JBQUksaUJBQWlCLFFBQVEsYUFBYSxTQUFTLFVBQVU7QUFDM0QscUJBQU87QUFBQSxZQUNUO0FBRUEsb0JBQVEsT0FBTyxPQUFPO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBRUwsS0FBSztBQUVILHVCQUFPO0FBQUEsY0FFVCxLQUFLLFdBQ0g7QUFDRSxvQkFBSSxzQkFBc0I7QUFDeEIseUJBQU87QUFBQSxnQkFDVDtBQUVBLG9CQUFJLGlCQUFpQixNQUFNO0FBQ3pCLHlCQUFPLENBQUMsYUFBYTtBQUFBLGdCQUN2QixPQUFPO0FBQ0wsc0JBQUlDLFVBQVMsS0FBSyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFDMUMseUJBQU9BLFlBQVcsV0FBV0EsWUFBVztBQUFBLGdCQUMxQztBQUFBLGNBQ0Y7QUFBQSxjQUVGO0FBQ0UsdUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHNCQUFzQixNQUFNLE9BQU8sY0FBYyxzQkFBc0I7QUFDOUUsZ0JBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQ2xELHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLGlDQUFpQyxNQUFNLE9BQU8sY0FBYyxvQkFBb0IsR0FBRztBQUNyRixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxzQkFBc0I7QUFDeEIscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksaUJBQWlCLE1BQU07QUFFekIsc0JBQVEsYUFBYSxNQUFNO0FBQUEsZ0JBQ3pCLEtBQUs7QUFDSCx5QkFBTyxDQUFDO0FBQUEsZ0JBRVYsS0FBSztBQUNILHlCQUFPLFVBQVU7QUFBQSxnQkFFbkIsS0FBSztBQUNILHlCQUFPLE1BQU0sS0FBSztBQUFBLGdCQUVwQixLQUFLO0FBQ0gseUJBQU8sTUFBTSxLQUFLLEtBQUssUUFBUTtBQUFBLGNBQ25DO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUNBLG1CQUFTLGdCQUFnQixNQUFNO0FBQzdCLG1CQUFPLFdBQVcsZUFBZSxJQUFJLElBQUksV0FBVyxJQUFJLElBQUk7QUFBQSxVQUM5RDtBQUVBLG1CQUFTLG1CQUFtQixNQUFNLE1BQU0saUJBQWlCLGVBQWUsb0JBQW9CQyxjQUFhLG1CQUFtQjtBQUMxSCxpQkFBSyxrQkFBa0IsU0FBUyxxQkFBcUIsU0FBUyxXQUFXLFNBQVM7QUFDbEYsaUJBQUssZ0JBQWdCO0FBQ3JCLGlCQUFLLHFCQUFxQjtBQUMxQixpQkFBSyxrQkFBa0I7QUFDdkIsaUJBQUssZUFBZTtBQUNwQixpQkFBSyxPQUFPO0FBQ1osaUJBQUssY0FBY0E7QUFDbkIsaUJBQUssb0JBQW9CO0FBQUEsVUFDM0I7QUFLQSxjQUFJLGFBQWEsQ0FBQztBQUVsQixjQUFJLGdCQUFnQjtBQUFBLFlBQUM7QUFBQSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFHakM7QUFBQSxZQUFnQjtBQUFBLFlBQWtCO0FBQUEsWUFBYTtBQUFBLFlBQWtDO0FBQUEsWUFBNEI7QUFBQSxVQUFPO0FBQ3BILHdCQUFjLFFBQVEsU0FBVSxNQUFNO0FBQ3BDLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBVTtBQUFBO0FBQUEsY0FDMUQ7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFLO0FBQUEsVUFDUCxDQUFDO0FBR0QsV0FBQyxDQUFDLGlCQUFpQixnQkFBZ0IsR0FBRyxDQUFDLGFBQWEsT0FBTyxHQUFHLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxhQUFhLFlBQVksQ0FBQyxFQUFFLFFBQVEsU0FBVUMsUUFBTTtBQUNySSxnQkFBSSxPQUFPQSxPQUFLLENBQUMsR0FDYixnQkFBZ0JBLE9BQUssQ0FBQztBQUMxQix1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQ3hEO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUlELFdBQUMsbUJBQW1CLGFBQWEsY0FBYyxPQUFPLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDOUUsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFtQjtBQUFBO0FBQUEsY0FDbkUsS0FBSyxZQUFZO0FBQUE7QUFBQSxjQUNqQjtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFLRCxXQUFDLGVBQWUsNkJBQTZCLGFBQWEsZUFBZSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ2pHLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBbUI7QUFBQTtBQUFBLGNBQ25FO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVEO0FBQUEsWUFBQztBQUFBLFlBQW1CO0FBQUE7QUFBQTtBQUFBLFlBRXBCO0FBQUEsWUFBYTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBVztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBMkI7QUFBQSxZQUF5QjtBQUFBLFlBQWtCO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBO0FBQUEsWUFDNVA7QUFBQSxVQUFXLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDbkMsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFTO0FBQUE7QUFBQSxjQUN6RCxLQUFLLFlBQVk7QUFBQTtBQUFBLGNBQ2pCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUdEO0FBQUEsWUFBQztBQUFBO0FBQUE7QUFBQSxZQUVEO0FBQUEsWUFBWTtBQUFBLFlBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUdyQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ3hCLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUztBQUFBO0FBQUEsY0FDekQ7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFLO0FBQUEsVUFDUCxDQUFDO0FBR0Q7QUFBQSxZQUFDO0FBQUEsWUFBVztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBR1osRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUN4Qix1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQW9CO0FBQUE7QUFBQSxjQUNwRTtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFFRDtBQUFBLFlBQUM7QUFBQSxZQUFRO0FBQUEsWUFBUTtBQUFBLFlBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUd6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQ3hCLHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBa0I7QUFBQTtBQUFBLGNBQ2xFO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVELFdBQUMsV0FBVyxPQUFPLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDM0MsdUJBQVcsSUFBSSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQU07QUFBQSxjQUFTO0FBQUE7QUFBQSxjQUN6RCxLQUFLLFlBQVk7QUFBQTtBQUFBLGNBQ2pCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUNELGNBQUksV0FBVztBQUVmLGNBQUlDLGNBQWEsU0FBVUMsUUFBTztBQUNoQyxtQkFBT0EsT0FBTSxDQUFDLEVBQUUsWUFBWTtBQUFBLFVBQzlCO0FBT0E7QUFBQSxZQUFDO0FBQUEsWUFBaUI7QUFBQSxZQUFzQjtBQUFBLFlBQWU7QUFBQSxZQUFrQjtBQUFBLFlBQWM7QUFBQSxZQUFhO0FBQUEsWUFBYTtBQUFBLFlBQXVCO0FBQUEsWUFBK0I7QUFBQSxZQUFpQjtBQUFBLFlBQW1CO0FBQUEsWUFBcUI7QUFBQSxZQUFxQjtBQUFBLFlBQWdCO0FBQUEsWUFBYTtBQUFBLFlBQWU7QUFBQSxZQUFpQjtBQUFBLFlBQWU7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxZQUFnQjtBQUFBLFlBQWM7QUFBQSxZQUFnQjtBQUFBLFlBQWU7QUFBQSxZQUFjO0FBQUEsWUFBZ0M7QUFBQSxZQUE4QjtBQUFBLFlBQWU7QUFBQSxZQUFrQjtBQUFBLFlBQW1CO0FBQUEsWUFBa0I7QUFBQSxZQUFrQjtBQUFBLFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBZ0I7QUFBQSxZQUFxQjtBQUFBLFlBQXNCO0FBQUEsWUFBZTtBQUFBLFlBQVk7QUFBQSxZQUFrQjtBQUFBLFlBQW9CO0FBQUEsWUFBbUI7QUFBQSxZQUFjO0FBQUEsWUFBZ0I7QUFBQSxZQUEwQjtBQUFBLFlBQTJCO0FBQUEsWUFBb0I7QUFBQSxZQUFxQjtBQUFBLFlBQWtCO0FBQUEsWUFBbUI7QUFBQSxZQUFxQjtBQUFBLFlBQWtCO0FBQUEsWUFBZ0I7QUFBQSxZQUFlO0FBQUEsWUFBbUI7QUFBQSxZQUFrQjtBQUFBLFlBQXNCO0FBQUEsWUFBdUI7QUFBQSxZQUFnQjtBQUFBLFlBQWlCO0FBQUEsWUFBZ0I7QUFBQSxZQUFnQjtBQUFBLFlBQWE7QUFBQSxZQUFpQjtBQUFBLFlBQWtCO0FBQUEsWUFBaUI7QUFBQSxZQUFjO0FBQUEsWUFBaUI7QUFBQSxZQUFpQjtBQUFBLFlBQWdCO0FBQUEsWUFBZ0I7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHeHdDLEVBQUUsUUFBUSxTQUFVLGVBQWU7QUFDakMsZ0JBQUksT0FBTyxjQUFjLFFBQVEsVUFBVUQsV0FBVTtBQUNyRCx1QkFBVyxJQUFJLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBTTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQ3hEO0FBQUEsY0FBZTtBQUFBO0FBQUEsY0FDZjtBQUFBO0FBQUEsY0FDQTtBQUFBLFlBQUs7QUFBQSxVQUNQLENBQUM7QUFFRDtBQUFBLFlBQUM7QUFBQSxZQUFpQjtBQUFBLFlBQWlCO0FBQUEsWUFBYztBQUFBLFlBQWM7QUFBQSxZQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHOUUsRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUNqQyxnQkFBSSxPQUFPLGNBQWMsUUFBUSxVQUFVQSxXQUFVO0FBQ3JELHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUTtBQUFBO0FBQUEsY0FDeEQ7QUFBQSxjQUFlO0FBQUEsY0FBZ0M7QUFBQTtBQUFBLGNBQy9DO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUVEO0FBQUEsWUFBQztBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFHekIsRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUNqQyxnQkFBSSxPQUFPLGNBQWMsUUFBUSxVQUFVQSxXQUFVO0FBQ3JELHVCQUFXLElBQUksSUFBSSxJQUFJO0FBQUEsY0FBbUI7QUFBQSxjQUFNO0FBQUEsY0FBUTtBQUFBO0FBQUEsY0FDeEQ7QUFBQSxjQUFlO0FBQUEsY0FBd0M7QUFBQTtBQUFBLGNBQ3ZEO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUlELFdBQUMsWUFBWSxhQUFhLEVBQUUsUUFBUSxTQUFVLGVBQWU7QUFDM0QsdUJBQVcsYUFBYSxJQUFJLElBQUk7QUFBQSxjQUFtQjtBQUFBLGNBQWU7QUFBQSxjQUFRO0FBQUE7QUFBQSxjQUMxRSxjQUFjLFlBQVk7QUFBQTtBQUFBLGNBQzFCO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQSxjQUNBO0FBQUEsWUFBSztBQUFBLFVBQ1AsQ0FBQztBQUdELGNBQUksWUFBWTtBQUNoQixxQkFBVyxTQUFTLElBQUksSUFBSTtBQUFBLFlBQW1CO0FBQUEsWUFBYTtBQUFBLFlBQVE7QUFBQTtBQUFBLFlBQ3BFO0FBQUEsWUFBYztBQUFBLFlBQWdDO0FBQUE7QUFBQSxZQUM5QztBQUFBLFVBQUs7QUFDTCxXQUFDLE9BQU8sUUFBUSxVQUFVLFlBQVksRUFBRSxRQUFRLFNBQVUsZUFBZTtBQUN2RSx1QkFBVyxhQUFhLElBQUksSUFBSTtBQUFBLGNBQW1CO0FBQUEsY0FBZTtBQUFBLGNBQVE7QUFBQTtBQUFBLGNBQzFFLGNBQWMsWUFBWTtBQUFBO0FBQUEsY0FDMUI7QUFBQTtBQUFBLGNBQ0E7QUFBQTtBQUFBLGNBQ0E7QUFBQSxZQUFJO0FBQUEsVUFDTixDQUFDO0FBWUQsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSSxVQUFVO0FBRWQsbUJBQVMsWUFBWSxLQUFLO0FBQ3hCO0FBQ0Usa0JBQUksQ0FBQyxXQUFXLHFCQUFxQixLQUFLLEdBQUcsR0FBRztBQUM5QywwQkFBVTtBQUVWLHNCQUFNLDhOQUF3TyxLQUFLLFVBQVUsR0FBRyxDQUFDO0FBQUEsY0FDblE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQU9BLG1CQUFTLG9CQUFvQkUsT0FBTSxNQUFNLFVBQVUsY0FBYztBQUMvRDtBQUNFLGtCQUFJLGFBQWEsaUJBQWlCO0FBQ2hDLG9CQUFJLGVBQWUsYUFBYTtBQUNoQyx1QkFBT0EsTUFBSyxZQUFZO0FBQUEsY0FDMUIsT0FBTztBQUNMLG9CQUFLLGFBQWEsYUFBYTtBQUk3Qiw4QkFBWSxLQUFLLFFBQVE7QUFBQSxnQkFDM0I7QUFFQSxvQkFBSSxnQkFBZ0IsYUFBYTtBQUNqQyxvQkFBSSxjQUFjO0FBRWxCLG9CQUFJLGFBQWEsU0FBUyxvQkFBb0I7QUFDNUMsc0JBQUlBLE1BQUssYUFBYSxhQUFhLEdBQUc7QUFDcEMsd0JBQUksUUFBUUEsTUFBSyxhQUFhLGFBQWE7QUFFM0Msd0JBQUksVUFBVSxJQUFJO0FBQ2hCLDZCQUFPO0FBQUEsb0JBQ1Q7QUFFQSx3QkFBSSxzQkFBc0IsTUFBTSxVQUFVLGNBQWMsS0FBSyxHQUFHO0FBQzlELDZCQUFPO0FBQUEsb0JBQ1Q7QUFFQSx3QkFBSSxVQUFVLEtBQUssVUFBVTtBQUMzQiw2QkFBTztBQUFBLG9CQUNUO0FBRUEsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGdCQUNGLFdBQVdBLE1BQUssYUFBYSxhQUFhLEdBQUc7QUFDM0Msc0JBQUksc0JBQXNCLE1BQU0sVUFBVSxjQUFjLEtBQUssR0FBRztBQUc5RCwyQkFBT0EsTUFBSyxhQUFhLGFBQWE7QUFBQSxrQkFDeEM7QUFFQSxzQkFBSSxhQUFhLFNBQVMsU0FBUztBQUdqQywyQkFBTztBQUFBLGtCQUNUO0FBTUEsZ0NBQWNBLE1BQUssYUFBYSxhQUFhO0FBQUEsZ0JBQy9DO0FBRUEsb0JBQUksc0JBQXNCLE1BQU0sVUFBVSxjQUFjLEtBQUssR0FBRztBQUM5RCx5QkFBTyxnQkFBZ0IsT0FBTyxXQUFXO0FBQUEsZ0JBQzNDLFdBQVcsZ0JBQWdCLEtBQUssVUFBVTtBQUN4Qyx5QkFBTztBQUFBLGdCQUNULE9BQU87QUFDTCx5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBT0EsbUJBQVMscUJBQXFCQSxPQUFNLE1BQU0sVUFBVTtBQUNsRDtBQUNFLGtCQUFJLENBQUMsb0JBQW9CLElBQUksR0FBRztBQUM5QjtBQUFBLGNBQ0Y7QUFLQSxrQkFBSSx3QkFBd0IsUUFBUSxHQUFHO0FBQ3JDLHVCQUFPO0FBQUEsY0FDVDtBQUVBLGtCQUFJLENBQUNBLE1BQUssYUFBYSxJQUFJLEdBQUc7QUFDNUIsdUJBQU8sYUFBYSxTQUFZLFNBQVk7QUFBQSxjQUM5QztBQUVBLGtCQUFJLFFBQVFBLE1BQUssYUFBYSxJQUFJO0FBRWxDLGtCQUFJLFVBQVUsS0FBSyxVQUFVO0FBQzNCLHVCQUFPO0FBQUEsY0FDVDtBQUVBLHFCQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFTQSxtQkFBUyxvQkFBb0JBLE9BQU0sTUFBTSxPQUFPLHNCQUFzQjtBQUNwRSxnQkFBSSxlQUFlLGdCQUFnQixJQUFJO0FBRXZDLGdCQUFJLHNCQUFzQixNQUFNLGNBQWMsb0JBQW9CLEdBQUc7QUFDbkU7QUFBQSxZQUNGO0FBRUEsZ0JBQUksc0JBQXNCLE1BQU0sT0FBTyxjQUFjLG9CQUFvQixHQUFHO0FBQzFFLHNCQUFRO0FBQUEsWUFDVjtBQUdBLGdCQUFJLHdCQUF3QixpQkFBaUIsTUFBTTtBQUNqRCxrQkFBSSxvQkFBb0IsSUFBSSxHQUFHO0FBQzdCLG9CQUFJLGlCQUFpQjtBQUVyQixvQkFBSSxVQUFVLE1BQU07QUFDbEIsa0JBQUFBLE1BQUssZ0JBQWdCLGNBQWM7QUFBQSxnQkFDckMsT0FBTztBQUNMLGtCQUFBQSxNQUFLLGFBQWEsZ0JBQWlCLEtBQUssS0FBSztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFFQTtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxrQkFBa0IsYUFBYTtBQUVuQyxnQkFBSSxpQkFBaUI7QUFDbkIsa0JBQUksZUFBZSxhQUFhO0FBRWhDLGtCQUFJLFVBQVUsTUFBTTtBQUNsQixvQkFBSSxPQUFPLGFBQWE7QUFDeEIsZ0JBQUFBLE1BQUssWUFBWSxJQUFJLFNBQVMsVUFBVSxRQUFRO0FBQUEsY0FDbEQsT0FBTztBQUdMLGdCQUFBQSxNQUFLLFlBQVksSUFBSTtBQUFBLGNBQ3ZCO0FBRUE7QUFBQSxZQUNGO0FBR0EsZ0JBQUksZ0JBQWdCLGFBQWEsZUFDN0IscUJBQXFCLGFBQWE7QUFFdEMsZ0JBQUksVUFBVSxNQUFNO0FBQ2xCLGNBQUFBLE1BQUssZ0JBQWdCLGFBQWE7QUFBQSxZQUNwQyxPQUFPO0FBQ0wsa0JBQUksUUFBUSxhQUFhO0FBQ3pCLGtCQUFJO0FBRUosa0JBQUksVUFBVSxXQUFXLFVBQVUsc0JBQXNCLFVBQVUsTUFBTTtBQUd2RSxpQ0FBaUI7QUFBQSxjQUNuQixPQUFPO0FBR0w7QUFDRSxtQ0FBaUIsS0FBSztBQUFBLGdCQUN4QjtBQUVBLG9CQUFJLGFBQWEsYUFBYTtBQUM1Qiw4QkFBWSxlQUFlLFNBQVMsQ0FBQztBQUFBLGdCQUN2QztBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxvQkFBb0I7QUFDdEIsZ0JBQUFBLE1BQUssZUFBZSxvQkFBb0IsZUFBZSxjQUFjO0FBQUEsY0FDdkUsT0FBTztBQUNMLGdCQUFBQSxNQUFLLGFBQWEsZUFBZSxjQUFjO0FBQUEsY0FDakQ7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQU9BLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUksb0JBQW9CO0FBQ3hCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUkseUJBQXlCO0FBQzdCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUkscUJBQXFCO0FBQ3pCLGNBQUkseUJBQXlCO0FBQzdCLGNBQUksc0JBQXNCO0FBQzFCLGNBQUksMkJBQTJCO0FBQy9CLGNBQUksa0JBQWtCO0FBQ3RCLGNBQUksa0JBQWtCO0FBQ3RCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksMEJBQTBCO0FBQzlCLGNBQUkseUJBQXlCO0FBQzdCLGNBQUksbUJBQW1CO0FBQ3ZCLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksZ0NBQWdDO0FBQ3BDLGNBQUksdUJBQXVCO0FBQzNCLGNBQUksMkJBQTJCO0FBRS9CLGNBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBQzlDLGdCQUFJLFlBQVksT0FBTztBQUN2QixpQ0FBcUIsVUFBVSxlQUFlO0FBQzlDLGdDQUFvQixVQUFVLGNBQWM7QUFDNUMsa0NBQXNCLFVBQVUsZ0JBQWdCO0FBQ2hELHFDQUF5QixVQUFVLG1CQUFtQjtBQUN0RCxrQ0FBc0IsVUFBVSxnQkFBZ0I7QUFDaEQsa0NBQXNCLFVBQVUsZ0JBQWdCO0FBQ2hELGlDQUFxQixVQUFVLGVBQWU7QUFDOUMscUNBQXlCLFVBQVUsbUJBQW1CO0FBQ3RELGtDQUFzQixVQUFVLGdCQUFnQjtBQUNoRCx1Q0FBMkIsVUFBVSxxQkFBcUI7QUFDMUQsOEJBQWtCLFVBQVUsWUFBWTtBQUN4Qyw4QkFBa0IsVUFBVSxZQUFZO0FBQ3hDLCtCQUFtQixVQUFVLGFBQWE7QUFDMUMsc0NBQTBCLFVBQVUsb0JBQW9CO0FBQ3hELHFDQUF5QixVQUFVLG1CQUFtQjtBQUN0RCwrQkFBbUIsVUFBVSxhQUFhO0FBQzFDLG1DQUF1QixVQUFVLGlCQUFpQjtBQUNsRCw0Q0FBZ0MsVUFBVSx3QkFBd0I7QUFDbEUsbUNBQXVCLFVBQVUsaUJBQWlCO0FBQ2xELHVDQUEyQixVQUFVLHFCQUFxQjtBQUFBLFVBQzVEO0FBRUEsY0FBSSx3QkFBd0IsT0FBTyxXQUFXLGNBQWMsT0FBTztBQUNuRSxjQUFJLHVCQUF1QjtBQUMzQixtQkFBUyxjQUFjLGVBQWU7QUFDcEMsZ0JBQUksa0JBQWtCLFFBQVEsT0FBTyxrQkFBa0IsVUFBVTtBQUMvRCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxnQkFBZ0IseUJBQXlCLGNBQWMscUJBQXFCLEtBQUssY0FBYyxvQkFBb0I7QUFFdkgsZ0JBQUksT0FBTyxrQkFBa0IsWUFBWTtBQUN2QyxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFNQSxjQUFJLGdCQUFnQjtBQUNwQixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBRUosbUJBQVMsY0FBYztBQUFBLFVBQUM7QUFFeEIsc0JBQVkscUJBQXFCO0FBQ2pDLG1CQUFTLGNBQWM7QUFDckI7QUFDRSxrQkFBSSxrQkFBa0IsR0FBRztBQUV2QiwwQkFBVSxRQUFRO0FBQ2xCLDJCQUFXLFFBQVE7QUFDbkIsMkJBQVcsUUFBUTtBQUNuQiw0QkFBWSxRQUFRO0FBQ3BCLDRCQUFZLFFBQVE7QUFDcEIscUNBQXFCLFFBQVE7QUFDN0IsK0JBQWUsUUFBUTtBQUV2QixvQkFBSSxRQUFRO0FBQUEsa0JBQ1YsY0FBYztBQUFBLGtCQUNkLFlBQVk7QUFBQSxrQkFDWixPQUFPO0FBQUEsa0JBQ1AsVUFBVTtBQUFBLGdCQUNaO0FBRUEsdUJBQU8saUJBQWlCLFNBQVM7QUFBQSxrQkFDL0IsTUFBTTtBQUFBLGtCQUNOLEtBQUs7QUFBQSxrQkFDTCxNQUFNO0FBQUEsa0JBQ04sT0FBTztBQUFBLGtCQUNQLE9BQU87QUFBQSxrQkFDUCxnQkFBZ0I7QUFBQSxrQkFDaEIsVUFBVTtBQUFBLGdCQUNaLENBQUM7QUFBQSxjQUVIO0FBRUE7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWU7QUFDdEI7QUFDRTtBQUVBLGtCQUFJLGtCQUFrQixHQUFHO0FBRXZCLG9CQUFJLFFBQVE7QUFBQSxrQkFDVixjQUFjO0FBQUEsa0JBQ2QsWUFBWTtBQUFBLGtCQUNaLFVBQVU7QUFBQSxnQkFDWjtBQUVBLHVCQUFPLGlCQUFpQixTQUFTO0FBQUEsa0JBQy9CLEtBQUssUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN0QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE1BQU0sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN2QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLG9CQUN4QixPQUFPO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGtCQUNELGdCQUFnQixRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQ2pDLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsa0JBQ0QsVUFBVSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsb0JBQzNCLE9BQU87QUFBQSxrQkFDVCxDQUFDO0FBQUEsZ0JBQ0gsQ0FBQztBQUFBLGNBRUg7QUFFQSxrQkFBSSxnQkFBZ0IsR0FBRztBQUNyQixzQkFBTSw4RUFBbUY7QUFBQSxjQUMzRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSx5QkFBeUIscUJBQXFCO0FBQ2xELGNBQUlMO0FBQ0osbUJBQVMsOEJBQThCLE1BQU0sUUFBUSxTQUFTO0FBQzVEO0FBQ0Usa0JBQUlBLFlBQVcsUUFBVztBQUV4QixvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSxnQkFDZCxTQUFTTSxJQUFHO0FBQ1Ysc0JBQUlDLFNBQVFELEdBQUUsTUFBTSxLQUFLLEVBQUUsTUFBTSxjQUFjO0FBQy9DLGtCQUFBTixVQUFTTyxVQUFTQSxPQUFNLENBQUMsS0FBSztBQUFBLGdCQUNoQztBQUFBLGNBQ0Y7QUFHQSxxQkFBTyxPQUFPUCxVQUFTO0FBQUEsWUFDekI7QUFBQSxVQUNGO0FBQ0EsY0FBSSxVQUFVO0FBQ2QsY0FBSTtBQUVKO0FBQ0UsZ0JBQUksa0JBQWtCLE9BQU8sWUFBWSxhQUFhLFVBQVU7QUFDaEUsa0NBQXNCLElBQUksZ0JBQWdCO0FBQUEsVUFDNUM7QUFFQSxtQkFBUyw2QkFBNkIsSUFBSSxXQUFXO0FBRW5ELGdCQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLHFCQUFPO0FBQUEsWUFDVDtBQUVBO0FBQ0Usa0JBQUksUUFBUSxvQkFBb0IsSUFBSSxFQUFFO0FBRXRDLGtCQUFJLFVBQVUsUUFBVztBQUN2Qix1QkFBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGO0FBRUEsZ0JBQUk7QUFDSixzQkFBVTtBQUNWLGdCQUFJLDRCQUE0QixNQUFNO0FBRXRDLGtCQUFNLG9CQUFvQjtBQUMxQixnQkFBSTtBQUVKO0FBQ0UsbUNBQXFCLHVCQUF1QjtBQUc1QyxxQ0FBdUIsVUFBVTtBQUNqQywwQkFBWTtBQUFBLFlBQ2Q7QUFFQSxnQkFBSTtBQUVGLGtCQUFJLFdBQVc7QUFFYixvQkFBSSxPQUFPLFdBQVk7QUFDckIsd0JBQU0sTUFBTTtBQUFBLGdCQUNkO0FBR0EsdUJBQU8sZUFBZSxLQUFLLFdBQVcsU0FBUztBQUFBLGtCQUM3QyxLQUFLLFdBQVk7QUFHZiwwQkFBTSxNQUFNO0FBQUEsa0JBQ2Q7QUFBQSxnQkFDRixDQUFDO0FBRUQsb0JBQUksT0FBTyxZQUFZLFlBQVksUUFBUSxXQUFXO0FBR3BELHNCQUFJO0FBQ0YsNEJBQVEsVUFBVSxNQUFNLENBQUMsQ0FBQztBQUFBLGtCQUM1QixTQUFTTSxJQUFHO0FBQ1YsOEJBQVVBO0FBQUEsa0JBQ1o7QUFFQSwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLGtCQUNaLFNBQVNBLElBQUc7QUFDViw4QkFBVUE7QUFBQSxrQkFDWjtBQUVBLHFCQUFHLEtBQUssS0FBSyxTQUFTO0FBQUEsZ0JBQ3hCO0FBQUEsY0FDRixPQUFPO0FBQ0wsb0JBQUk7QUFDRix3QkFBTSxNQUFNO0FBQUEsZ0JBQ2QsU0FBU0EsSUFBRztBQUNWLDRCQUFVQTtBQUFBLGdCQUNaO0FBRUEsbUJBQUc7QUFBQSxjQUNMO0FBQUEsWUFDRixTQUFTLFFBQVE7QUFFZixrQkFBSSxVQUFVLFdBQVcsT0FBTyxPQUFPLFVBQVUsVUFBVTtBQUd6RCxvQkFBSSxjQUFjLE9BQU8sTUFBTSxNQUFNLElBQUk7QUFDekMsb0JBQUksZUFBZSxRQUFRLE1BQU0sTUFBTSxJQUFJO0FBQzNDLG9CQUFJLElBQUksWUFBWSxTQUFTO0FBQzdCLG9CQUFJLElBQUksYUFBYSxTQUFTO0FBRTlCLHVCQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssWUFBWSxDQUFDLE1BQU0sYUFBYSxDQUFDLEdBQUc7QUFPN0Q7QUFBQSxnQkFDRjtBQUVBLHVCQUFPLEtBQUssS0FBSyxLQUFLLEdBQUcsS0FBSyxLQUFLO0FBR2pDLHNCQUFJLFlBQVksQ0FBQyxNQUFNLGFBQWEsQ0FBQyxHQUFHO0FBTXRDLHdCQUFJLE1BQU0sS0FBSyxNQUFNLEdBQUc7QUFDdEIseUJBQUc7QUFDRDtBQUNBO0FBR0EsNEJBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxNQUFNLGFBQWEsQ0FBQyxHQUFHO0FBRS9DLDhCQUFJLFNBQVMsT0FBTyxZQUFZLENBQUMsRUFBRSxRQUFRLFlBQVksTUFBTTtBQUU3RDtBQUNFLGdDQUFJLE9BQU8sT0FBTyxZQUFZO0FBQzVCLGtEQUFvQixJQUFJLElBQUksTUFBTTtBQUFBLDRCQUNwQztBQUFBLDBCQUNGO0FBR0EsaUNBQU87QUFBQSx3QkFDVDtBQUFBLHNCQUNGLFNBQVMsS0FBSyxLQUFLLEtBQUs7QUFBQSxvQkFDMUI7QUFFQTtBQUFBLGtCQUNGO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRixVQUFFO0FBQ0Esd0JBQVU7QUFFVjtBQUNFLHVDQUF1QixVQUFVO0FBQ2pDLDZCQUFhO0FBQUEsY0FDZjtBQUVBLG9CQUFNLG9CQUFvQjtBQUFBLFlBQzVCO0FBR0EsZ0JBQUksT0FBTyxLQUFLLEdBQUcsZUFBZSxHQUFHLE9BQU87QUFDNUMsZ0JBQUksaUJBQWlCLE9BQU8sOEJBQThCLElBQUksSUFBSTtBQUVsRTtBQUNFLGtCQUFJLE9BQU8sT0FBTyxZQUFZO0FBQzVCLG9DQUFvQixJQUFJLElBQUksY0FBYztBQUFBLGNBQzVDO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLDRCQUE0QixNQUFNLFFBQVEsU0FBUztBQUMxRDtBQUNFLHFCQUFPLDZCQUE2QixNQUFNLElBQUk7QUFBQSxZQUNoRDtBQUFBLFVBQ0Y7QUFDQSxtQkFBUywrQkFBK0IsSUFBSSxRQUFRLFNBQVM7QUFDM0Q7QUFDRSxxQkFBTyw2QkFBNkIsSUFBSSxLQUFLO0FBQUEsWUFDL0M7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZ0JBQWdCRSxhQUFXO0FBQ2xDLGdCQUFJQyxhQUFZRCxZQUFVO0FBQzFCLG1CQUFPLENBQUMsRUFBRUMsY0FBYUEsV0FBVTtBQUFBLFVBQ25DO0FBRUEsbUJBQVMscUNBQXFDLE1BQU0sUUFBUSxTQUFTO0FBRW5FLGdCQUFJLFFBQVEsTUFBTTtBQUNoQixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QjtBQUNFLHVCQUFPLDZCQUE2QixNQUFNLGdCQUFnQixJQUFJLENBQUM7QUFBQSxjQUNqRTtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixxQkFBTyw4QkFBOEIsSUFBSTtBQUFBLFlBQzNDO0FBRUEsb0JBQVEsTUFBTTtBQUFBLGNBQ1osS0FBSztBQUNILHVCQUFPLDhCQUE4QixVQUFVO0FBQUEsY0FFakQsS0FBSztBQUNILHVCQUFPLDhCQUE4QixjQUFjO0FBQUEsWUFDdkQ7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixzQkFBUSxLQUFLLFVBQVU7QUFBQSxnQkFDckIsS0FBSztBQUNILHlCQUFPLCtCQUErQixLQUFLLE1BQU07QUFBQSxnQkFFbkQsS0FBSztBQUVILHlCQUFPLHFDQUFxQyxLQUFLLE1BQU0sUUFBUSxPQUFPO0FBQUEsZ0JBRXhFLEtBQUs7QUFDSCx5QkFBTywrQkFBK0IsS0FBSyxPQUFPO0FBQUEsZ0JBRXBELEtBQUssaUJBQ0g7QUFDRSxzQkFBSSxnQkFBZ0I7QUFDcEIsc0JBQUksVUFBVSxjQUFjO0FBQzVCLHNCQUFJLE9BQU8sY0FBYztBQUV6QixzQkFBSTtBQUVGLDJCQUFPLHFDQUFxQyxLQUFLLE9BQU8sR0FBRyxRQUFRLE9BQU87QUFBQSxrQkFDNUUsU0FBU0gsSUFBRztBQUFBLGtCQUFDO0FBQUEsZ0JBQ2Y7QUFBQSxjQUNKO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLGNBQWMsT0FBTztBQUM1QixnQkFBSSxRQUFTLE1BQU0sY0FBYyxNQUFNLFlBQVksT0FBTztBQUMxRCxnQkFBSSxTQUFVLE1BQU07QUFFcEIsb0JBQVEsTUFBTSxLQUFLO0FBQUEsY0FDakIsS0FBSztBQUNILHVCQUFPLDhCQUE4QixNQUFNLElBQUk7QUFBQSxjQUVqRCxLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLE1BQU07QUFBQSxjQUU3QyxLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLFVBQVU7QUFBQSxjQUVqRCxLQUFLO0FBQ0gsdUJBQU8sOEJBQThCLGNBQWM7QUFBQSxjQUVyRCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQ0gsdUJBQU8sK0JBQStCLE1BQU0sSUFBSTtBQUFBLGNBRWxELEtBQUs7QUFDSCx1QkFBTywrQkFBK0IsTUFBTSxLQUFLLE1BQU07QUFBQSxjQUV6RCxLQUFLO0FBQ0gsdUJBQU8sK0JBQStCLE1BQU0sS0FBSyxPQUFPO0FBQUEsY0FFMUQsS0FBSztBQUNILHVCQUFPLDRCQUE0QixNQUFNLElBQUk7QUFBQSxjQUUvQztBQUNFLHVCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyw0QkFBNEJJLGlCQUFnQjtBQUNuRCxnQkFBSTtBQUNGLGtCQUFJLE9BQU87QUFDWCxrQkFBSUwsUUFBT0s7QUFFWCxpQkFBRztBQUNELHdCQUFRLGNBQWNMLEtBQUk7QUFDMUIsZ0JBQUFBLFFBQU9BLE1BQUs7QUFBQSxjQUNkLFNBQVNBO0FBRVQscUJBQU87QUFBQSxZQUNULFNBQVNDLElBQUc7QUFDVixxQkFBTywrQkFBK0JBLEdBQUUsVUFBVSxPQUFPQSxHQUFFO0FBQUEsWUFDN0Q7QUFBQSxVQUNGO0FBRUEsbUJBQVMsZUFBZSxXQUFXLFdBQVcsYUFBYTtBQUN6RCxnQkFBSSxlQUFlLFVBQVUsZUFBZSxVQUFVLFFBQVE7QUFDOUQsbUJBQU8sVUFBVSxnQkFBZ0IsaUJBQWlCLEtBQUssY0FBYyxNQUFNLGVBQWUsTUFBTTtBQUFBLFVBQ2xHO0FBRUEsbUJBQVMsZUFBZSxNQUFNO0FBQzVCLG1CQUFPLEtBQUssZUFBZTtBQUFBLFVBQzdCO0FBRUEsbUJBQVMsaUJBQWlCLE1BQU07QUFDOUIsZ0JBQUksUUFBUSxNQUFNO0FBRWhCLHFCQUFPO0FBQUEsWUFDVDtBQUVBO0FBQ0Usa0JBQUksT0FBTyxLQUFLLFFBQVEsVUFBVTtBQUNoQyxzQkFBTSwyR0FBZ0g7QUFBQSxjQUN4SDtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixxQkFBTyxLQUFLLGVBQWUsS0FBSyxRQUFRO0FBQUEsWUFDMUM7QUFFQSxnQkFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxvQkFBUSxNQUFNO0FBQUEsY0FDWixLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVULEtBQUs7QUFDSCx1QkFBTztBQUFBLGNBRVQsS0FBSztBQUNILHVCQUFPO0FBQUEsWUFDWDtBQUVBLGdCQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLHNCQUFRLEtBQUssVUFBVTtBQUFBLGdCQUNyQixLQUFLO0FBQ0gsc0JBQUksVUFBVTtBQUNkLHlCQUFPLGVBQWUsT0FBTyxJQUFJO0FBQUEsZ0JBRW5DLEtBQUs7QUFDSCxzQkFBSSxXQUFXO0FBQ2YseUJBQU8sZUFBZSxTQUFTLFFBQVEsSUFBSTtBQUFBLGdCQUU3QyxLQUFLO0FBQ0gseUJBQU8sZUFBZSxNQUFNLEtBQUssUUFBUSxZQUFZO0FBQUEsZ0JBRXZELEtBQUs7QUFDSCx5QkFBTyxpQkFBaUIsS0FBSyxJQUFJO0FBQUEsZ0JBRW5DLEtBQUs7QUFDSCx5QkFBTyxpQkFBaUIsS0FBSyxPQUFPO0FBQUEsZ0JBRXRDLEtBQUssaUJBQ0g7QUFDRSxzQkFBSSxnQkFBZ0I7QUFDcEIsc0JBQUksVUFBVSxjQUFjO0FBQzVCLHNCQUFJLE9BQU8sY0FBYztBQUV6QixzQkFBSTtBQUNGLDJCQUFPLGlCQUFpQixLQUFLLE9BQU8sQ0FBQztBQUFBLGtCQUN2QyxTQUFTQSxJQUFHO0FBQ1YsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGdCQUNGO0FBQUEsY0FDSjtBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLHlCQUF5QixxQkFBcUI7QUFDbEQsY0FBSSxVQUFVO0FBQ2QsY0FBSSxjQUFjO0FBQ2xCLG1CQUFTLHNDQUFzQztBQUM3QztBQUNFLGtCQUFJLFlBQVksTUFBTTtBQUNwQix1QkFBTztBQUFBLGNBQ1Q7QUFFQSxrQkFBSSxRQUFRLFFBQVE7QUFFcEIsa0JBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQ2xELHVCQUFPLGlCQUFpQixNQUFNLElBQUk7QUFBQSxjQUNwQztBQUFBLFlBQ0Y7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBUyw0QkFBNEI7QUFDbkM7QUFDRSxrQkFBSSxZQUFZLE1BQU07QUFDcEIsdUJBQU87QUFBQSxjQUNUO0FBSUEscUJBQU8sNEJBQTRCLE9BQU87QUFBQSxZQUM1QztBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxvQkFBb0I7QUFDM0I7QUFDRSxxQ0FBdUIsa0JBQWtCO0FBQ3pDLHdCQUFVO0FBQ1YsNEJBQWM7QUFBQSxZQUNoQjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxnQkFBZ0IsT0FBTztBQUM5QjtBQUNFLHFDQUF1QixrQkFBa0I7QUFDekMsd0JBQVU7QUFDViw0QkFBYztBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWUsV0FBVztBQUNqQztBQUNFLDRCQUFjO0FBQUEsWUFDaEI7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsaUJBQWlCO0FBQ3hCO0FBQ0UscUJBQU87QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUtBLG1CQUFTSyxVQUFTLE9BQU87QUFDdkIsbUJBQU8sS0FBSztBQUFBLFVBQ2Q7QUFDQSxtQkFBUyxpQkFBaUIsT0FBTztBQUMvQixvQkFBUSxPQUFPLE9BQU87QUFBQSxjQUNwQixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVUO0FBRUUsdUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUVBLGNBQUksbUJBQW1CO0FBQUEsWUFDckIsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFVBQ1Y7QUFDQSxtQkFBUywwQkFBMEIsU0FBUyxPQUFPO0FBQ2pEO0FBQ0Usa0JBQUksRUFBRSxpQkFBaUIsTUFBTSxJQUFJLEtBQUssTUFBTSxZQUFZLE1BQU0sV0FBVyxNQUFNLFlBQVksTUFBTSxZQUFZLE1BQU0sU0FBUyxPQUFPO0FBQ2pJLHNCQUFNLG1OQUFrTztBQUFBLGNBQzFPO0FBRUEsa0JBQUksRUFBRSxNQUFNLFlBQVksTUFBTSxZQUFZLE1BQU0sWUFBWSxNQUFNLFdBQVcsT0FBTztBQUNsRixzQkFBTSx1TkFBc087QUFBQSxjQUM5TztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsbUJBQVMsWUFBWSxNQUFNO0FBQ3pCLGdCQUFJLE9BQU8sS0FBSztBQUNoQixnQkFBSSxXQUFXLEtBQUs7QUFDcEIsbUJBQU8sWUFBWSxTQUFTLFlBQVksTUFBTSxZQUFZLFNBQVMsY0FBYyxTQUFTO0FBQUEsVUFDNUY7QUFFQSxtQkFBUyxXQUFXTixPQUFNO0FBQ3hCLG1CQUFPQSxNQUFLO0FBQUEsVUFDZDtBQUVBLG1CQUFTLGNBQWNBLE9BQU07QUFDM0IsWUFBQUEsTUFBSyxnQkFBZ0I7QUFBQSxVQUN2QjtBQUVBLG1CQUFTLGlCQUFpQkEsT0FBTTtBQUM5QixnQkFBSSxRQUFRO0FBRVosZ0JBQUksQ0FBQ0EsT0FBTTtBQUNULHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJLFlBQVlBLEtBQUksR0FBRztBQUNyQixzQkFBUUEsTUFBSyxVQUFVLFNBQVM7QUFBQSxZQUNsQyxPQUFPO0FBQ0wsc0JBQVFBLE1BQUs7QUFBQSxZQUNmO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsaUJBQWlCQSxPQUFNO0FBQzlCLGdCQUFJLGFBQWEsWUFBWUEsS0FBSSxJQUFJLFlBQVk7QUFDakQsZ0JBQUksYUFBYSxPQUFPLHlCQUF5QkEsTUFBSyxZQUFZLFdBQVcsVUFBVTtBQUN2RixnQkFBSSxlQUFlLEtBQUtBLE1BQUssVUFBVTtBQUt2QyxnQkFBSUEsTUFBSyxlQUFlLFVBQVUsS0FBSyxPQUFPLGVBQWUsZUFBZSxPQUFPLFdBQVcsUUFBUSxjQUFjLE9BQU8sV0FBVyxRQUFRLFlBQVk7QUFDeEo7QUFBQSxZQUNGO0FBRUEsZ0JBQUlPLE9BQU0sV0FBVyxLQUNqQkMsT0FBTSxXQUFXO0FBQ3JCLG1CQUFPLGVBQWVSLE9BQU0sWUFBWTtBQUFBLGNBQ3RDLGNBQWM7QUFBQSxjQUNkLEtBQUssV0FBWTtBQUNmLHVCQUFPTyxLQUFJLEtBQUssSUFBSTtBQUFBLGNBQ3RCO0FBQUEsY0FDQSxLQUFLLFNBQVUsT0FBTztBQUNwQiwrQkFBZSxLQUFLO0FBQ3BCLGdCQUFBQyxLQUFJLEtBQUssTUFBTSxLQUFLO0FBQUEsY0FDdEI7QUFBQSxZQUNGLENBQUM7QUFLRCxtQkFBTyxlQUFlUixPQUFNLFlBQVk7QUFBQSxjQUN0QyxZQUFZLFdBQVc7QUFBQSxZQUN6QixDQUFDO0FBQ0QsZ0JBQUksVUFBVTtBQUFBLGNBQ1osVUFBVSxXQUFZO0FBQ3BCLHVCQUFPO0FBQUEsY0FDVDtBQUFBLGNBQ0EsVUFBVSxTQUFVLE9BQU87QUFDekIsK0JBQWUsS0FBSztBQUFBLGNBQ3RCO0FBQUEsY0FDQSxjQUFjLFdBQVk7QUFDeEIsOEJBQWNBLEtBQUk7QUFDbEIsdUJBQU9BLE1BQUssVUFBVTtBQUFBLGNBQ3hCO0FBQUEsWUFDRjtBQUNBLG1CQUFPO0FBQUEsVUFDVDtBQUVBLG1CQUFTLE1BQU1BLE9BQU07QUFDbkIsZ0JBQUksV0FBV0EsS0FBSSxHQUFHO0FBQ3BCO0FBQUEsWUFDRjtBQUdBLFlBQUFBLE1BQUssZ0JBQWdCLGlCQUFpQkEsS0FBSTtBQUFBLFVBQzVDO0FBQ0EsbUJBQVMscUJBQXFCQSxPQUFNO0FBQ2xDLGdCQUFJLENBQUNBLE9BQU07QUFDVCxxQkFBTztBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxVQUFVLFdBQVdBLEtBQUk7QUFHN0IsZ0JBQUksQ0FBQyxTQUFTO0FBQ1oscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksWUFBWSxRQUFRLFNBQVM7QUFDakMsZ0JBQUksWUFBWSxpQkFBaUJBLEtBQUk7QUFFckMsZ0JBQUksY0FBYyxXQUFXO0FBQzNCLHNCQUFRLFNBQVMsU0FBUztBQUMxQixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxtQkFBU1Msa0JBQWlCLEtBQUs7QUFDN0Isa0JBQU0sUUFBUSxPQUFPLGFBQWEsY0FBYyxXQUFXO0FBRTNELGdCQUFJLE9BQU8sUUFBUSxhQUFhO0FBQzlCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLGdCQUFJO0FBQ0YscUJBQU8sSUFBSSxpQkFBaUIsSUFBSTtBQUFBLFlBQ2xDLFNBQVMsR0FBRztBQUNWLHFCQUFPLElBQUk7QUFBQSxZQUNiO0FBQUEsVUFDRjtBQUVBLGNBQUksMkJBQTJCO0FBQy9CLGNBQUksK0JBQStCO0FBQ25DLGNBQUksa0NBQWtDO0FBQ3RDLGNBQUksa0NBQWtDO0FBRXRDLG1CQUFTLGFBQWEsT0FBTztBQUMzQixnQkFBSSxjQUFjLE1BQU0sU0FBUyxjQUFjLE1BQU0sU0FBUztBQUM5RCxtQkFBTyxjQUFjLE1BQU0sV0FBVyxPQUFPLE1BQU0sU0FBUztBQUFBLFVBQzlEO0FBbUJBLG1CQUFTLGFBQWEsU0FBUyxPQUFPO0FBQ3BDLGdCQUFJVCxRQUFPO0FBQ1gsZ0JBQUksVUFBVSxNQUFNO0FBRXBCLGdCQUFJLFlBQVksUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLGNBQ2pDLGdCQUFnQjtBQUFBLGNBQ2hCLGNBQWM7QUFBQSxjQUNkLE9BQU87QUFBQSxjQUNQLFNBQVMsV0FBVyxPQUFPLFVBQVVBLE1BQUssY0FBYztBQUFBLFlBQzFELENBQUM7QUFFRCxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxtQkFBUyxpQkFBaUIsU0FBUyxPQUFPO0FBQ3hDO0FBQ0Usd0NBQTBCLFNBQVMsS0FBSztBQUV4QyxrQkFBSSxNQUFNLFlBQVksVUFBYSxNQUFNLG1CQUFtQixVQUFhLENBQUMsOEJBQThCO0FBQ3RHLHNCQUFNLDhXQUF1WSxvQ0FBb0MsS0FBSyxlQUFlLE1BQU0sSUFBSTtBQUUvYywrQ0FBK0I7QUFBQSxjQUNqQztBQUVBLGtCQUFJLE1BQU0sVUFBVSxVQUFhLE1BQU0saUJBQWlCLFVBQWEsQ0FBQywwQkFBMEI7QUFDOUYsc0JBQU0sc1dBQStYLG9DQUFvQyxLQUFLLGVBQWUsTUFBTSxJQUFJO0FBRXZjLDJDQUEyQjtBQUFBLGNBQzdCO0FBQUEsWUFDRjtBQUVBLGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksZUFBZSxNQUFNLGdCQUFnQixPQUFPLEtBQUssTUFBTTtBQUMzRCxZQUFBQSxNQUFLLGdCQUFnQjtBQUFBLGNBQ25CLGdCQUFnQixNQUFNLFdBQVcsT0FBTyxNQUFNLFVBQVUsTUFBTTtBQUFBLGNBQzlELGNBQWMsaUJBQWlCLE1BQU0sU0FBUyxPQUFPLE1BQU0sUUFBUSxZQUFZO0FBQUEsY0FDL0UsWUFBWSxhQUFhLEtBQUs7QUFBQSxZQUNoQztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxjQUFjLFNBQVMsT0FBTztBQUNyQyxnQkFBSUEsUUFBTztBQUNYLGdCQUFJLFVBQVUsTUFBTTtBQUVwQixnQkFBSSxXQUFXLE1BQU07QUFDbkIsa0NBQW9CQSxPQUFNLFdBQVcsU0FBUyxLQUFLO0FBQUEsWUFDckQ7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsY0FBYyxTQUFTLE9BQU87QUFDckMsZ0JBQUlBLFFBQU87QUFFWDtBQUNFLGtCQUFJLGFBQWEsYUFBYSxLQUFLO0FBRW5DLGtCQUFJLENBQUNBLE1BQUssY0FBYyxjQUFjLGNBQWMsQ0FBQyxpQ0FBaUM7QUFDcEYsc0JBQU0sc1VBQTBWO0FBRWhXLGtEQUFrQztBQUFBLGNBQ3BDO0FBRUEsa0JBQUlBLE1BQUssY0FBYyxjQUFjLENBQUMsY0FBYyxDQUFDLGlDQUFpQztBQUNwRixzQkFBTSwrVEFBbVY7QUFFelYsa0RBQWtDO0FBQUEsY0FDcEM7QUFBQSxZQUNGO0FBRUEsMEJBQWMsU0FBUyxLQUFLO0FBQzVCLGdCQUFJLFFBQVEsaUJBQWlCLE1BQU0sS0FBSztBQUN4QyxnQkFBSSxPQUFPLE1BQU07QUFFakIsZ0JBQUksU0FBUyxNQUFNO0FBQ2pCLGtCQUFJLFNBQVMsVUFBVTtBQUNyQixvQkFBSSxVQUFVLEtBQUtBLE1BQUssVUFBVTtBQUFBO0FBQUEsZ0JBRWxDQSxNQUFLLFNBQVMsT0FBTztBQUNuQixrQkFBQUEsTUFBSyxRQUFRTSxVQUFTLEtBQUs7QUFBQSxnQkFDN0I7QUFBQSxjQUNGLFdBQVdOLE1BQUssVUFBVU0sVUFBUyxLQUFLLEdBQUc7QUFDekMsZ0JBQUFOLE1BQUssUUFBUU0sVUFBUyxLQUFLO0FBQUEsY0FDN0I7QUFBQSxZQUNGLFdBQVcsU0FBUyxZQUFZLFNBQVMsU0FBUztBQUdoRCxjQUFBTixNQUFLLGdCQUFnQixPQUFPO0FBQzVCO0FBQUEsWUFDRjtBQUVBO0FBTUUsa0JBQUksTUFBTSxlQUFlLE9BQU8sR0FBRztBQUNqQyxnQ0FBZ0JBLE9BQU0sTUFBTSxNQUFNLEtBQUs7QUFBQSxjQUN6QyxXQUFXLE1BQU0sZUFBZSxjQUFjLEdBQUc7QUFDL0MsZ0NBQWdCQSxPQUFNLE1BQU0sTUFBTSxpQkFBaUIsTUFBTSxZQUFZLENBQUM7QUFBQSxjQUN4RTtBQUFBLFlBQ0Y7QUFFQTtBQUdFLGtCQUFJLE1BQU0sV0FBVyxRQUFRLE1BQU0sa0JBQWtCLE1BQU07QUFDekQsZ0JBQUFBLE1BQUssaUJBQWlCLENBQUMsQ0FBQyxNQUFNO0FBQUEsY0FDaEM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGlCQUFpQixTQUFTLE9BQU9VLGNBQWE7QUFDckQsZ0JBQUlWLFFBQU87QUFHWCxnQkFBSSxNQUFNLGVBQWUsT0FBTyxLQUFLLE1BQU0sZUFBZSxjQUFjLEdBQUc7QUFDekUsa0JBQUksT0FBTyxNQUFNO0FBQ2pCLGtCQUFJLFdBQVcsU0FBUyxZQUFZLFNBQVM7QUFHN0Msa0JBQUksYUFBYSxNQUFNLFVBQVUsVUFBYSxNQUFNLFVBQVUsT0FBTztBQUNuRTtBQUFBLGNBQ0Y7QUFFQSxrQkFBSSxlQUFlTSxVQUFTTixNQUFLLGNBQWMsWUFBWTtBQUczRCxrQkFBSSxDQUFDVSxjQUFhO0FBQ2hCO0FBT0Usc0JBQUksaUJBQWlCVixNQUFLLE9BQU87QUFDL0Isb0JBQUFBLE1BQUssUUFBUTtBQUFBLGtCQUNmO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBRUE7QUFJRSxnQkFBQUEsTUFBSyxlQUFlO0FBQUEsY0FDdEI7QUFBQSxZQUNGO0FBT0EsZ0JBQUksT0FBT0EsTUFBSztBQUVoQixnQkFBSSxTQUFTLElBQUk7QUFDZixjQUFBQSxNQUFLLE9BQU87QUFBQSxZQUNkO0FBRUE7QUFPRSxjQUFBQSxNQUFLLGlCQUFpQixDQUFDQSxNQUFLO0FBQzVCLGNBQUFBLE1BQUssaUJBQWlCLENBQUMsQ0FBQ0EsTUFBSyxjQUFjO0FBQUEsWUFDN0M7QUFFQSxnQkFBSSxTQUFTLElBQUk7QUFDZixjQUFBQSxNQUFLLE9BQU87QUFBQSxZQUNkO0FBQUEsVUFDRjtBQUNBLG1CQUFTLHVCQUF1QixTQUFTLE9BQU87QUFDOUMsZ0JBQUlBLFFBQU87QUFDWCwwQkFBY0EsT0FBTSxLQUFLO0FBQ3pCLCtCQUFtQkEsT0FBTSxLQUFLO0FBQUEsVUFDaEM7QUFFQSxtQkFBUyxtQkFBbUIsVUFBVSxPQUFPO0FBQzNDLGdCQUFJLE9BQU8sTUFBTTtBQUVqQixnQkFBSSxNQUFNLFNBQVMsV0FBVyxRQUFRLE1BQU07QUFDMUMsa0JBQUksWUFBWTtBQUVoQixxQkFBTyxVQUFVLFlBQVk7QUFDM0IsNEJBQVksVUFBVTtBQUFBLGNBQ3hCO0FBU0Esa0JBQUksUUFBUSxVQUFVLGlCQUFpQixnQkFBZ0IsS0FBSyxVQUFVLEtBQUssSUFBSSxJQUFJLGlCQUFpQjtBQUVwRyx1QkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNyQyxvQkFBSSxZQUFZLE1BQU0sQ0FBQztBQUV2QixvQkFBSSxjQUFjLFlBQVksVUFBVSxTQUFTLFNBQVMsTUFBTTtBQUM5RDtBQUFBLGdCQUNGO0FBTUEsb0JBQUksYUFBYSw2QkFBNkIsU0FBUztBQUV2RCxvQkFBSSxDQUFDLFlBQVk7QUFDZjtBQUNFLDBCQUFNLE1BQU8sK0ZBQWdHO0FBQUEsa0JBQy9HO0FBQUEsZ0JBQ0Y7QUFJQSxxQ0FBcUIsU0FBUztBQUk5Qiw4QkFBYyxXQUFXLFVBQVU7QUFBQSxjQUNyQztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBVUEsbUJBQVMsZ0JBQWdCQSxPQUFNLE1BQU0sT0FBTztBQUMxQztBQUFBO0FBQUEsY0FDQSxTQUFTLFlBQVlTLGtCQUFpQlQsTUFBSyxhQUFhLE1BQU1BO0FBQUEsY0FBTTtBQUNsRSxrQkFBSSxTQUFTLE1BQU07QUFDakIsZ0JBQUFBLE1BQUssZUFBZU0sVUFBU04sTUFBSyxjQUFjLFlBQVk7QUFBQSxjQUM5RCxXQUFXQSxNQUFLLGlCQUFpQk0sVUFBUyxLQUFLLEdBQUc7QUFDaEQsZ0JBQUFOLE1BQUssZUFBZU0sVUFBUyxLQUFLO0FBQUEsY0FDcEM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLGNBQUksNkJBQTZCO0FBQ2pDLGNBQUksc0JBQXNCO0FBRTFCLG1CQUFTLGdCQUFnQixVQUFVO0FBQ2pDLGdCQUFJLFVBQVU7QUFNZCxZQUFBZixTQUFNLFNBQVMsUUFBUSxVQUFVLFNBQVUsT0FBTztBQUNoRCxrQkFBSSxTQUFTLE1BQU07QUFDakI7QUFBQSxjQUNGO0FBRUEseUJBQVc7QUFBQSxZQUdiLENBQUM7QUFDRCxtQkFBTztBQUFBLFVBQ1Q7QUFNQSxtQkFBU29CLGVBQWMsU0FBUyxPQUFPO0FBQ3JDO0FBS0Usa0JBQUksT0FBTyxNQUFNLGFBQWEsWUFBWSxNQUFNLGFBQWEsTUFBTTtBQUNqRSxnQkFBQXBCLFNBQU0sU0FBUyxRQUFRLE1BQU0sVUFBVSxTQUFVLE9BQU87QUFDdEQsc0JBQUksU0FBUyxNQUFNO0FBQ2pCO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsVUFBVTtBQUMxRDtBQUFBLGtCQUNGO0FBRUEsc0JBQUksT0FBTyxNQUFNLFNBQVMsVUFBVTtBQUNsQztBQUFBLGtCQUNGO0FBRUEsc0JBQUksQ0FBQyxxQkFBcUI7QUFDeEIsMENBQXNCO0FBRXRCLDBCQUFNLDhEQUE4RDtBQUFBLGtCQUN0RTtBQUFBLGdCQUNGLENBQUM7QUFBQSxjQUNIO0FBR0Esa0JBQUksTUFBTSxZQUFZLFFBQVEsQ0FBQyw0QkFBNEI7QUFDekQsc0JBQU0sZ0dBQXFHO0FBRTNHLDZDQUE2QjtBQUFBLGNBQy9CO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxtQkFBbUIsU0FBUyxPQUFPO0FBRTFDLGdCQUFJLE1BQU0sU0FBUyxNQUFNO0FBQ3ZCLHNCQUFRLGFBQWEsU0FBU2UsVUFBUyxpQkFBaUIsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUFBLFlBQ3ZFO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGVBQWUsU0FBUyxPQUFPO0FBQ3RDLGdCQUFJLFlBQVksUUFBUTtBQUFBLGNBQ3RCLFVBQVU7QUFBQSxZQUNaLEdBQUcsS0FBSztBQUVSLGdCQUFJLFVBQVUsZ0JBQWdCLE1BQU0sUUFBUTtBQUU1QyxnQkFBSSxTQUFTO0FBQ1gsd0JBQVUsV0FBVztBQUFBLFlBQ3ZCO0FBRUEsbUJBQU87QUFBQSxVQUNUO0FBRUEsY0FBSTtBQUVKO0FBQ0UseUNBQTZCO0FBQUEsVUFDL0I7QUFFQSxtQkFBUyw4QkFBOEI7QUFDckMsZ0JBQUksWUFBWSxvQ0FBb0M7QUFFcEQsZ0JBQUksV0FBVztBQUNiLHFCQUFPLHFDQUFxQyxZQUFZO0FBQUEsWUFDMUQ7QUFFQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGlCQUFpQixDQUFDLFNBQVMsY0FBYztBQUs3QyxtQkFBUyxxQkFBcUIsT0FBTztBQUNuQztBQUNFLHdDQUEwQixVQUFVLEtBQUs7QUFFekMsdUJBQVMsSUFBSSxHQUFHLElBQUksZUFBZSxRQUFRLEtBQUs7QUFDOUMsb0JBQUksV0FBVyxlQUFlLENBQUM7QUFFL0Isb0JBQUksTUFBTSxRQUFRLEtBQUssTUFBTTtBQUMzQjtBQUFBLGdCQUNGO0FBRUEsb0JBQUlNLFdBQVUsTUFBTSxRQUFRLE1BQU0sUUFBUSxDQUFDO0FBRTNDLG9CQUFJLE1BQU0sWUFBWSxDQUFDQSxVQUFTO0FBQzlCLHdCQUFNLGdGQUFxRixVQUFVLDRCQUE0QixDQUFDO0FBQUEsZ0JBQ3BJLFdBQVcsQ0FBQyxNQUFNLFlBQVlBLFVBQVM7QUFDckMsd0JBQU0sdUZBQTRGLFVBQVUsNEJBQTRCLENBQUM7QUFBQSxnQkFDM0k7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSxtQkFBUyxjQUFjWixPQUFNLFVBQVUsV0FBVyxvQkFBb0I7QUFDcEUsZ0JBQUlhLFdBQVViLE1BQUs7QUFFbkIsZ0JBQUksVUFBVTtBQUNaLGtCQUFJLGlCQUFpQjtBQUNyQixrQkFBSSxnQkFBZ0IsQ0FBQztBQUVyQix1QkFBUyxJQUFJLEdBQUcsSUFBSSxlQUFlLFFBQVEsS0FBSztBQUU5Qyw4QkFBYyxNQUFNLGVBQWUsQ0FBQyxDQUFDLElBQUk7QUFBQSxjQUMzQztBQUVBLHVCQUFTLEtBQUssR0FBRyxLQUFLYSxTQUFRLFFBQVEsTUFBTTtBQUMxQyxvQkFBSSxXQUFXLGNBQWMsZUFBZSxNQUFNQSxTQUFRLEVBQUUsRUFBRSxLQUFLO0FBRW5FLG9CQUFJQSxTQUFRLEVBQUUsRUFBRSxhQUFhLFVBQVU7QUFDckMsa0JBQUFBLFNBQVEsRUFBRSxFQUFFLFdBQVc7QUFBQSxnQkFDekI7QUFFQSxvQkFBSSxZQUFZLG9CQUFvQjtBQUNsQyxrQkFBQUEsU0FBUSxFQUFFLEVBQUUsa0JBQWtCO0FBQUEsZ0JBQ2hDO0FBQUEsY0FDRjtBQUFBLFlBQ0YsT0FBTztBQUdMLGtCQUFJLGlCQUFpQlAsVUFBUyxpQkFBaUIsU0FBUyxDQUFDO0FBRXpELGtCQUFJLGtCQUFrQjtBQUV0Qix1QkFBUyxNQUFNLEdBQUcsTUFBTU8sU0FBUSxRQUFRLE9BQU87QUFDN0Msb0JBQUlBLFNBQVEsR0FBRyxFQUFFLFVBQVUsZ0JBQWdCO0FBQ3pDLGtCQUFBQSxTQUFRLEdBQUcsRUFBRSxXQUFXO0FBRXhCLHNCQUFJLG9CQUFvQjtBQUN0QixvQkFBQUEsU0FBUSxHQUFHLEVBQUUsa0JBQWtCO0FBQUEsa0JBQ2pDO0FBRUE7QUFBQSxnQkFDRjtBQUVBLG9CQUFJLG9CQUFvQixRQUFRLENBQUNBLFNBQVEsR0FBRyxFQUFFLFVBQVU7QUFDdEQsb0NBQWtCQSxTQUFRLEdBQUc7QUFBQSxnQkFDL0I7QUFBQSxjQUNGO0FBRUEsa0JBQUksb0JBQW9CLE1BQU07QUFDNUIsZ0NBQWdCLFdBQVc7QUFBQSxjQUM3QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBa0JBLG1CQUFTLGVBQWUsU0FBUyxPQUFPO0FBQ3RDLG1CQUFPLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFBQSxjQUN4QixPQUFPO0FBQUEsWUFDVCxDQUFDO0FBQUEsVUFDSDtBQUNBLG1CQUFTLG1CQUFtQixTQUFTLE9BQU87QUFDMUMsZ0JBQUliLFFBQU87QUFFWDtBQUNFLG1DQUFxQixLQUFLO0FBQUEsWUFDNUI7QUFFQSxZQUFBQSxNQUFLLGdCQUFnQjtBQUFBLGNBQ25CLGFBQWEsQ0FBQyxDQUFDLE1BQU07QUFBQSxZQUN2QjtBQUVBO0FBQ0Usa0JBQUksTUFBTSxVQUFVLFVBQWEsTUFBTSxpQkFBaUIsVUFBYSxDQUFDLDRCQUE0QjtBQUNoRyxzQkFBTSw4UkFBa1Q7QUFFeFQsNkNBQTZCO0FBQUEsY0FDL0I7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUNBLG1CQUFTLG1CQUFtQixTQUFTLE9BQU87QUFDMUMsZ0JBQUlBLFFBQU87QUFDWCxZQUFBQSxNQUFLLFdBQVcsQ0FBQyxDQUFDLE1BQU07QUFDeEIsZ0JBQUksUUFBUSxNQUFNO0FBRWxCLGdCQUFJLFNBQVMsTUFBTTtBQUNqQiw0QkFBY0EsT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUFBLFlBQ3BELFdBQVcsTUFBTSxnQkFBZ0IsTUFBTTtBQUNyQyw0QkFBY0EsT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVLE1BQU0sY0FBYyxJQUFJO0FBQUEsWUFDaEU7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsa0JBQWtCLFNBQVMsT0FBTztBQUN6QyxnQkFBSUEsUUFBTztBQUNYLGdCQUFJLGNBQWNBLE1BQUssY0FBYztBQUNyQyxZQUFBQSxNQUFLLGNBQWMsY0FBYyxDQUFDLENBQUMsTUFBTTtBQUN6QyxnQkFBSSxRQUFRLE1BQU07QUFFbEIsZ0JBQUksU0FBUyxNQUFNO0FBQ2pCLDRCQUFjQSxPQUFNLENBQUMsQ0FBQyxNQUFNLFVBQVUsT0FBTyxLQUFLO0FBQUEsWUFDcEQsV0FBVyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sVUFBVTtBQUUzQyxrQkFBSSxNQUFNLGdCQUFnQixNQUFNO0FBQzlCLDhCQUFjQSxPQUFNLENBQUMsQ0FBQyxNQUFNLFVBQVUsTUFBTSxjQUFjLElBQUk7QUFBQSxjQUNoRSxPQUFPO0FBRUwsOEJBQWNBLE9BQU0sQ0FBQyxDQUFDLE1BQU0sVUFBVSxNQUFNLFdBQVcsQ0FBQyxJQUFJLElBQUksS0FBSztBQUFBLGNBQ3ZFO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyx5QkFBeUIsU0FBUyxPQUFPO0FBQ2hELGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksUUFBUSxNQUFNO0FBRWxCLGdCQUFJLFNBQVMsTUFBTTtBQUNqQiw0QkFBY0EsT0FBTSxDQUFDLENBQUMsTUFBTSxVQUFVLE9BQU8sS0FBSztBQUFBLFlBQ3BEO0FBQUEsVUFDRjtBQUVBLGNBQUksdUJBQXVCO0FBaUIzQixtQkFBUyxlQUFlLFNBQVMsT0FBTztBQUN0QyxnQkFBSUEsUUFBTztBQUVYLGdCQUFJLEVBQUUsTUFBTSwyQkFBMkIsT0FBTztBQUM1QztBQUNFLHNCQUFNLE1BQU8sOERBQStEO0FBQUEsY0FDOUU7QUFBQSxZQUNGO0FBUUEsZ0JBQUksWUFBWSxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQUEsY0FDakMsT0FBTztBQUFBLGNBQ1AsY0FBYztBQUFBLGNBQ2QsVUFBVU0sVUFBU04sTUFBSyxjQUFjLFlBQVk7QUFBQSxZQUNwRCxDQUFDO0FBRUQsbUJBQU87QUFBQSxVQUNUO0FBQ0EsbUJBQVMsbUJBQW1CLFNBQVMsT0FBTztBQUMxQyxnQkFBSUEsUUFBTztBQUVYO0FBQ0Usd0NBQTBCLFlBQVksS0FBSztBQUUzQyxrQkFBSSxNQUFNLFVBQVUsVUFBYSxNQUFNLGlCQUFpQixVQUFhLENBQUMsc0JBQXNCO0FBQzFGLHNCQUFNLDJWQUFvWCxvQ0FBb0MsS0FBSyxhQUFhO0FBRWhiLHVDQUF1QjtBQUFBLGNBQ3pCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGVBQWUsTUFBTTtBQUV6QixnQkFBSSxnQkFBZ0IsTUFBTTtBQUN4QixrQkFBSSxXQUFXLE1BQU0sVUFDakIsZUFBZSxNQUFNO0FBRXpCLGtCQUFJLFlBQVksTUFBTTtBQUNwQjtBQUNFLHdCQUFNLG9GQUF5RjtBQUFBLGdCQUNqRztBQUVBO0FBQ0Usc0JBQUksRUFBRSxnQkFBZ0IsT0FBTztBQUMzQjtBQUNFLDRCQUFNLE1BQU8scUVBQXNFO0FBQUEsb0JBQ3JGO0FBQUEsa0JBQ0Y7QUFFQSxzQkFBSSxNQUFNLFFBQVEsUUFBUSxHQUFHO0FBQzNCLHdCQUFJLEVBQUUsU0FBUyxVQUFVLElBQUk7QUFDM0I7QUFDRSw4QkFBTSxNQUFPLDZDQUE4QztBQUFBLHNCQUM3RDtBQUFBLG9CQUNGO0FBRUEsK0JBQVcsU0FBUyxDQUFDO0FBQUEsa0JBQ3ZCO0FBRUEsaUNBQWU7QUFBQSxnQkFDakI7QUFBQSxjQUNGO0FBRUEsa0JBQUksZ0JBQWdCLE1BQU07QUFDeEIsK0JBQWU7QUFBQSxjQUNqQjtBQUVBLDZCQUFlO0FBQUEsWUFDakI7QUFFQSxZQUFBQSxNQUFLLGdCQUFnQjtBQUFBLGNBQ25CLGNBQWMsaUJBQWlCLFlBQVk7QUFBQSxZQUM3QztBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxnQkFBZ0IsU0FBUyxPQUFPO0FBQ3ZDLGdCQUFJQSxRQUFPO0FBQ1gsZ0JBQUksUUFBUSxpQkFBaUIsTUFBTSxLQUFLO0FBQ3hDLGdCQUFJLGVBQWUsaUJBQWlCLE1BQU0sWUFBWTtBQUV0RCxnQkFBSSxTQUFTLE1BQU07QUFHakIsa0JBQUksV0FBV00sVUFBUyxLQUFLO0FBRTdCLGtCQUFJLGFBQWFOLE1BQUssT0FBTztBQUMzQixnQkFBQUEsTUFBSyxRQUFRO0FBQUEsY0FDZjtBQUVBLGtCQUFJLE1BQU0sZ0JBQWdCLFFBQVFBLE1BQUssaUJBQWlCLFVBQVU7QUFDaEUsZ0JBQUFBLE1BQUssZUFBZTtBQUFBLGNBQ3RCO0FBQUEsWUFDRjtBQUVBLGdCQUFJLGdCQUFnQixNQUFNO0FBQ3hCLGNBQUFBLE1BQUssZUFBZU0sVUFBUyxZQUFZO0FBQUEsWUFDM0M7QUFBQSxVQUNGO0FBQ0EsbUJBQVMsbUJBQW1CLFNBQVMsT0FBTztBQUMxQyxnQkFBSU4sUUFBTztBQUdYLGdCQUFJLGNBQWNBLE1BQUs7QUFLdkIsZ0JBQUksZ0JBQWdCQSxNQUFLLGNBQWMsY0FBYztBQUNuRCxrQkFBSSxnQkFBZ0IsTUFBTSxnQkFBZ0IsTUFBTTtBQUM5QyxnQkFBQUEsTUFBSyxRQUFRO0FBQUEsY0FDZjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0EsbUJBQVMseUJBQXlCLFNBQVMsT0FBTztBQUVoRCw0QkFBZ0IsU0FBUyxLQUFLO0FBQUEsVUFDaEM7QUFFQSxjQUFJLGlCQUFpQjtBQUNyQixjQUFJLGlCQUFpQjtBQUNyQixjQUFJLGdCQUFnQjtBQUNwQixjQUFJLGFBQWE7QUFBQSxZQUNmLE1BQU07QUFBQSxZQUNOLFFBQVE7QUFBQSxZQUNSLEtBQUs7QUFBQSxVQUNQO0FBRUEsbUJBQVMsc0JBQXNCLE1BQU07QUFDbkMsb0JBQVEsTUFBTTtBQUFBLGNBQ1osS0FBSztBQUNILHVCQUFPO0FBQUEsY0FFVCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVUO0FBQ0UsdUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUNBLG1CQUFTLGtCQUFrQixpQkFBaUIsTUFBTTtBQUNoRCxnQkFBSSxtQkFBbUIsUUFBUSxvQkFBb0IsZ0JBQWdCO0FBRWpFLHFCQUFPLHNCQUFzQixJQUFJO0FBQUEsWUFDbkM7QUFFQSxnQkFBSSxvQkFBb0IsaUJBQWlCLFNBQVMsaUJBQWlCO0FBRWpFLHFCQUFPO0FBQUEsWUFDVDtBQUdBLG1CQUFPO0FBQUEsVUFDVDtBQU9BLGNBQUkscUNBQXFDLFNBQVVjLE9BQU07QUFDdkQsZ0JBQUksT0FBTyxVQUFVLGVBQWUsTUFBTSx5QkFBeUI7QUFDakUscUJBQU8sU0FBVSxNQUFNLE1BQU0sTUFBTSxNQUFNO0FBQ3ZDLHNCQUFNLHdCQUF3QixXQUFZO0FBQ3hDLHlCQUFPQSxNQUFLLE1BQU0sTUFBTSxNQUFNLElBQUk7QUFBQSxnQkFDcEMsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNGLE9BQU87QUFDTCxxQkFBT0E7QUFBQSxZQUNUO0FBQUEsVUFDRjtBQUVBLGNBQUk7QUFTSixjQUFJLGVBQWUsbUNBQW1DLFNBQVVkLE9BQU0sTUFBTTtBQUMxRSxnQkFBSUEsTUFBSyxpQkFBaUIsV0FBVyxLQUFLO0FBRXhDLGtCQUFJLEVBQUUsZUFBZUEsUUFBTztBQUkxQix1Q0FBdUIsd0JBQXdCLFNBQVMsY0FBYyxLQUFLO0FBQzNFLHFDQUFxQixZQUFZLFVBQVUsS0FBSyxRQUFRLEVBQUUsU0FBUyxJQUFJO0FBQ3ZFLG9CQUFJLFVBQVUscUJBQXFCO0FBRW5DLHVCQUFPQSxNQUFLLFlBQVk7QUFDdEIsa0JBQUFBLE1BQUssWUFBWUEsTUFBSyxVQUFVO0FBQUEsZ0JBQ2xDO0FBRUEsdUJBQU8sUUFBUSxZQUFZO0FBQ3pCLGtCQUFBQSxNQUFLLFlBQVksUUFBUSxVQUFVO0FBQUEsZ0JBQ3JDO0FBRUE7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLFlBQUFBLE1BQUssWUFBWTtBQUFBLFVBQ25CLENBQUM7QUFLRCxjQUFJLGVBQWU7QUFDbkIsY0FBSSxZQUFZO0FBQ2hCLGNBQUksZUFBZTtBQUNuQixjQUFJLGdCQUFnQjtBQUNwQixjQUFJLHlCQUF5QjtBQVk3QixjQUFJLGlCQUFpQixTQUFVQSxPQUFNLE1BQU07QUFDekMsZ0JBQUksTUFBTTtBQUNSLGtCQUFJLGFBQWFBLE1BQUs7QUFFdEIsa0JBQUksY0FBYyxlQUFlQSxNQUFLLGFBQWEsV0FBVyxhQUFhLFdBQVc7QUFDcEYsMkJBQVcsWUFBWTtBQUN2QjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUEsWUFBQUEsTUFBSyxjQUFjO0FBQUEsVUFDckI7QUFJQSxjQUFJLHNCQUFzQjtBQUFBLFlBQ3hCLFdBQVcsQ0FBQyxrQkFBa0Isc0JBQXNCLHFCQUFxQixxQkFBcUIsMkJBQTJCLGlCQUFpQixzQkFBc0IseUJBQXlCO0FBQUEsWUFDekwsWUFBWSxDQUFDLHdCQUF3QixrQkFBa0IsbUJBQW1CLG1CQUFtQixvQkFBb0IsdUJBQXVCLHVCQUF1QixvQkFBb0IsZ0JBQWdCO0FBQUEsWUFDbk0sb0JBQW9CLENBQUMsdUJBQXVCLHFCQUFxQjtBQUFBLFlBQ2pFLFFBQVEsQ0FBQyxxQkFBcUIscUJBQXFCLHFCQUFxQixxQkFBcUIscUJBQXFCLG9CQUFvQixxQkFBcUIsb0JBQW9CLG1CQUFtQixtQkFBbUIsbUJBQW1CLG9CQUFvQixvQkFBb0Isb0JBQW9CLGtCQUFrQixrQkFBa0IsZ0JBQWdCO0FBQUEsWUFDeFYsZ0JBQWdCLENBQUMsdUJBQXVCLHVCQUF1QixxQkFBcUI7QUFBQSxZQUNwRixrQkFBa0IsQ0FBQyx5QkFBeUIseUJBQXlCLHVCQUF1QjtBQUFBLFlBQzVGLGNBQWMsQ0FBQyxxQkFBcUIscUJBQXFCLG1CQUFtQjtBQUFBLFlBQzVFLGFBQWEsQ0FBQyxxQkFBcUIsbUJBQW1CLG9CQUFvQixnQkFBZ0I7QUFBQSxZQUMxRixhQUFhLENBQUMscUJBQXFCLHFCQUFxQixvQkFBb0IscUJBQXFCLGtCQUFrQjtBQUFBLFlBQ25ILGlCQUFpQixDQUFDLHdCQUF3Qix3QkFBd0Isc0JBQXNCO0FBQUEsWUFDeEYsbUJBQW1CLENBQUMsMEJBQTBCLDBCQUEwQix3QkFBd0I7QUFBQSxZQUNoRyxZQUFZLENBQUMsbUJBQW1CLG1CQUFtQixpQkFBaUI7QUFBQSxZQUNwRSxjQUFjLENBQUMsMEJBQTBCLDJCQUEyQix1QkFBdUIsc0JBQXNCO0FBQUEsWUFDakgsYUFBYSxDQUFDLG9CQUFvQixvQkFBb0Isa0JBQWtCO0FBQUEsWUFDeEUsYUFBYSxDQUFDLHFCQUFxQixtQkFBbUIsb0JBQW9CLGdCQUFnQjtBQUFBLFlBQzFGLFdBQVcsQ0FBQyxrQkFBa0Isa0JBQWtCLGdCQUFnQjtBQUFBLFlBQ2hFLGFBQWEsQ0FBQyxxQkFBcUIsbUJBQW1CLG9CQUFvQixnQkFBZ0I7QUFBQSxZQUMxRixZQUFZLENBQUMsbUJBQW1CLG1CQUFtQixpQkFBaUI7QUFBQSxZQUNwRSxTQUFTLENBQUMsZUFBZSxhQUFhO0FBQUEsWUFDdEMsTUFBTSxDQUFDLGFBQWEsWUFBWSxZQUFZO0FBQUEsWUFDNUMsVUFBVSxDQUFDLGlCQUFpQixVQUFVO0FBQUEsWUFDdEMsTUFBTSxDQUFDLGNBQWMsdUJBQXVCLGVBQWUsd0JBQXdCLFlBQVksa0JBQWtCLGVBQWUsYUFBYSxlQUFlLHlCQUF5QixtQkFBbUIsd0JBQXdCLHdCQUF3QixzQkFBc0IsdUJBQXVCLGNBQWMsWUFBWTtBQUFBLFlBQy9ULGFBQWEsQ0FBQyx5QkFBeUIsbUJBQW1CLHdCQUF3Qix3QkFBd0Isc0JBQXNCLHFCQUFxQjtBQUFBLFlBQ3JKLEtBQUssQ0FBQyxhQUFhLFFBQVE7QUFBQSxZQUMzQixNQUFNLENBQUMsbUJBQW1CLGdCQUFnQixnQkFBZ0IscUJBQXFCLHVCQUF1QixrQkFBa0I7QUFBQSxZQUN4SCxVQUFVLENBQUMsaUJBQWlCLG1CQUFtQixjQUFjLGNBQWM7QUFBQSxZQUMzRSxZQUFZLENBQUMsaUJBQWlCLGlCQUFpQjtBQUFBLFlBQy9DLGVBQWUsQ0FBQyxXQUFXO0FBQUEsWUFDM0IsU0FBUyxDQUFDLGFBQWEsUUFBUTtBQUFBLFlBQy9CLFNBQVMsQ0FBQyxjQUFjLGNBQWM7QUFBQSxZQUN0QyxZQUFZLENBQUMsUUFBUTtBQUFBLFlBQ3JCLGNBQWMsQ0FBQyxxQkFBcUIsdUJBQXVCLGtCQUFrQjtBQUFBLFlBQzdFLFdBQVcsQ0FBQyxrQkFBa0IscUJBQXFCLGVBQWU7QUFBQSxZQUNsRSxRQUFRLENBQUMsZ0JBQWdCLGNBQWMsZUFBZSxXQUFXO0FBQUEsWUFDakUsUUFBUSxDQUFDLGFBQWEsYUFBYSxhQUFhO0FBQUEsWUFDaEQsTUFBTSxDQUFDLFlBQVksaUJBQWlCLGFBQWEsWUFBWSxjQUFjLGlCQUFpQixpQkFBaUIsY0FBYyxVQUFVO0FBQUEsWUFDckksY0FBYyxDQUFDLGlCQUFpQixlQUFlO0FBQUEsWUFDL0MsU0FBUyxDQUFDLGdCQUFnQixnQkFBZ0IsY0FBYztBQUFBLFlBQ3hELFVBQVUsQ0FBQyxhQUFhLFdBQVc7QUFBQSxZQUNuQyxTQUFTLENBQUMsaUJBQWlCLGVBQWUsZ0JBQWdCLFlBQVk7QUFBQSxZQUN0RSxjQUFjLENBQUMsZ0JBQWdCLGdCQUFnQjtBQUFBLFlBQy9DLFlBQVksQ0FBQyxjQUFjLGNBQWM7QUFBQSxZQUN6QyxXQUFXLENBQUMsYUFBYSxhQUFhO0FBQUEsWUFDdEMsZ0JBQWdCLENBQUMsdUJBQXVCLHNCQUFzQixxQkFBcUI7QUFBQSxZQUNuRixjQUFjLENBQUMscUJBQXFCLG1CQUFtQjtBQUFBLFlBQ3ZELFlBQVksQ0FBQyxtQkFBbUIsc0JBQXNCLHNCQUFzQiwwQkFBMEI7QUFBQSxZQUN0RyxVQUFVLENBQUMsY0FBYztBQUFBLFVBQzNCO0FBS0EsY0FBSSxtQkFBbUI7QUFBQSxZQUNyQix5QkFBeUI7QUFBQSxZQUN6QixtQkFBbUI7QUFBQSxZQUNuQixrQkFBa0I7QUFBQSxZQUNsQixrQkFBa0I7QUFBQSxZQUNsQixTQUFTO0FBQUEsWUFDVCxjQUFjO0FBQUEsWUFDZCxpQkFBaUI7QUFBQSxZQUNqQixhQUFhO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixjQUFjO0FBQUEsWUFDZCxZQUFZO0FBQUEsWUFDWixjQUFjO0FBQUEsWUFDZCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixjQUFjO0FBQUEsWUFDZCxZQUFZO0FBQUEsWUFDWixlQUFlO0FBQUEsWUFDZixnQkFBZ0I7QUFBQSxZQUNoQixpQkFBaUI7QUFBQSxZQUNqQixZQUFZO0FBQUEsWUFDWixXQUFXO0FBQUEsWUFDWCxZQUFZO0FBQUEsWUFDWixTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUE7QUFBQSxZQUVOLGFBQWE7QUFBQSxZQUNiLGNBQWM7QUFBQSxZQUNkLGFBQWE7QUFBQSxZQUNiLGlCQUFpQjtBQUFBLFlBQ2pCLGtCQUFrQjtBQUFBLFlBQ2xCLGtCQUFrQjtBQUFBLFlBQ2xCLGVBQWU7QUFBQSxZQUNmLGFBQWE7QUFBQSxVQUNmO0FBUUEsbUJBQVMsVUFBVUwsU0FBUSxLQUFLO0FBQzlCLG1CQUFPQSxVQUFTLElBQUksT0FBTyxDQUFDLEVBQUUsWUFBWSxJQUFJLElBQUksVUFBVSxDQUFDO0FBQUEsVUFDL0Q7QUFPQSxjQUFJLFdBQVcsQ0FBQyxVQUFVLE1BQU0sT0FBTyxHQUFHO0FBRzFDLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDcEQscUJBQVMsUUFBUSxTQUFVQSxTQUFRO0FBQ2pDLCtCQUFpQixVQUFVQSxTQUFRLElBQUksQ0FBQyxJQUFJLGlCQUFpQixJQUFJO0FBQUEsWUFDbkUsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQVlELG1CQUFTLG9CQUFvQixNQUFNLE9BQU9vQixtQkFBa0I7QUFVMUQsZ0JBQUksVUFBVSxTQUFTLFFBQVEsT0FBTyxVQUFVLGFBQWEsVUFBVTtBQUV2RSxnQkFBSSxTQUFTO0FBQ1gscUJBQU87QUFBQSxZQUNUO0FBRUEsZ0JBQUksQ0FBQ0EscUJBQW9CLE9BQU8sVUFBVSxZQUFZLFVBQVUsS0FBSyxFQUFFLGlCQUFpQixlQUFlLElBQUksS0FBSyxpQkFBaUIsSUFBSSxJQUFJO0FBQ3ZJLHFCQUFPLFFBQVE7QUFBQSxZQUNqQjtBQUVBLG9CQUFRLEtBQUssT0FBTyxLQUFLO0FBQUEsVUFDM0I7QUFFQSxjQUFJLG1CQUFtQjtBQUN2QixjQUFJLFlBQVk7QUFlaEIsbUJBQVMsbUJBQW1CLE1BQU07QUFDaEMsbUJBQU8sS0FBSyxRQUFRLGtCQUFrQixLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsV0FBVyxNQUFNO0FBQUEsVUFDdEY7QUFFQSxjQUFJLGlCQUFpQixXQUFZO0FBQUEsVUFBQztBQUVsQztBQUVFLGdCQUFJLDhCQUE4QjtBQUNsQyxnQkFBSSxjQUFjO0FBQ2xCLGdCQUFJLGdCQUFnQjtBQUVwQixnQkFBSSxvQ0FBb0M7QUFDeEMsZ0JBQUksbUJBQW1CLENBQUM7QUFDeEIsZ0JBQUksb0JBQW9CLENBQUM7QUFDekIsZ0JBQUksb0JBQW9CO0FBQ3hCLGdCQUFJLHlCQUF5QjtBQUU3QixnQkFBSSxXQUFXLFNBQVVDLFNBQVE7QUFDL0IscUJBQU9BLFFBQU8sUUFBUSxlQUFlLFNBQVUsR0FBR0MsWUFBVztBQUMzRCx1QkFBT0EsV0FBVSxZQUFZO0FBQUEsY0FDL0IsQ0FBQztBQUFBLFlBQ0g7QUFFQSxnQkFBSSwwQkFBMEIsU0FBVSxNQUFNO0FBQzVDLGtCQUFJLGlCQUFpQixlQUFlLElBQUksS0FBSyxpQkFBaUIsSUFBSSxHQUFHO0FBQ25FO0FBQUEsY0FDRjtBQUVBLCtCQUFpQixJQUFJLElBQUk7QUFFekI7QUFBQSxnQkFBTTtBQUFBLGdCQUFtRDtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUd6RCxTQUFTLEtBQUssUUFBUSxhQUFhLEtBQUssQ0FBQztBQUFBLGNBQUM7QUFBQSxZQUM1QztBQUVBLGdCQUFJLDJCQUEyQixTQUFVLE1BQU07QUFDN0Msa0JBQUksaUJBQWlCLGVBQWUsSUFBSSxLQUFLLGlCQUFpQixJQUFJLEdBQUc7QUFDbkU7QUFBQSxjQUNGO0FBRUEsK0JBQWlCLElBQUksSUFBSTtBQUV6QixvQkFBTSxtRUFBbUUsTUFBTSxLQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQUEsWUFDN0g7QUFFQSxnQkFBSSw4QkFBOEIsU0FBVSxNQUFNLE9BQU87QUFDdkQsa0JBQUksa0JBQWtCLGVBQWUsS0FBSyxLQUFLLGtCQUFrQixLQUFLLEdBQUc7QUFDdkU7QUFBQSxjQUNGO0FBRUEsZ0NBQWtCLEtBQUssSUFBSTtBQUUzQixvQkFBTSw4RUFBbUYsTUFBTSxNQUFNLFFBQVEsbUNBQW1DLEVBQUUsQ0FBQztBQUFBLFlBQ3JKO0FBRUEsZ0JBQUksc0JBQXNCLFNBQVUsTUFBTSxPQUFPO0FBQy9DLGtCQUFJLG1CQUFtQjtBQUNyQjtBQUFBLGNBQ0Y7QUFFQSxrQ0FBb0I7QUFFcEIsb0JBQU0sOERBQThELElBQUk7QUFBQSxZQUMxRTtBQUVBLGdCQUFJLDJCQUEyQixTQUFVLE1BQU0sT0FBTztBQUNwRCxrQkFBSSx3QkFBd0I7QUFDMUI7QUFBQSxjQUNGO0FBRUEsdUNBQXlCO0FBRXpCLG9CQUFNLG1FQUFtRSxJQUFJO0FBQUEsWUFDL0U7QUFFQSw2QkFBaUIsU0FBVSxNQUFNLE9BQU87QUFDdEMsa0JBQUksS0FBSyxRQUFRLEdBQUcsSUFBSSxJQUFJO0FBQzFCLHdDQUF3QixJQUFJO0FBQUEsY0FDOUIsV0FBVyw0QkFBNEIsS0FBSyxJQUFJLEdBQUc7QUFDakQseUNBQXlCLElBQUk7QUFBQSxjQUMvQixXQUFXLGtDQUFrQyxLQUFLLEtBQUssR0FBRztBQUN4RCw0Q0FBNEIsTUFBTSxLQUFLO0FBQUEsY0FDekM7QUFFQSxrQkFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixvQkFBSSxNQUFNLEtBQUssR0FBRztBQUNoQixzQ0FBb0IsTUFBTSxLQUFLO0FBQUEsZ0JBQ2pDLFdBQVcsQ0FBQyxTQUFTLEtBQUssR0FBRztBQUMzQiwyQ0FBeUIsTUFBTSxLQUFLO0FBQUEsZ0JBQ3RDO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxtQkFBbUI7QUFhdkIsbUJBQVMsK0JBQStCQyxTQUFRO0FBQzlDO0FBQ0Usa0JBQUksYUFBYTtBQUNqQixrQkFBSUMsYUFBWTtBQUVoQix1QkFBUyxhQUFhRCxTQUFRO0FBQzVCLG9CQUFJLENBQUNBLFFBQU8sZUFBZSxTQUFTLEdBQUc7QUFDckM7QUFBQSxnQkFDRjtBQUVBLG9CQUFJLGFBQWFBLFFBQU8sU0FBUztBQUVqQyxvQkFBSSxjQUFjLE1BQU07QUFDdEIsc0JBQUlILG9CQUFtQixVQUFVLFFBQVEsSUFBSSxNQUFNO0FBQ25ELGdDQUFjSSxjQUFhSixvQkFBbUIsWUFBWSxtQkFBbUIsU0FBUyxLQUFLO0FBQzNGLGdDQUFjLG9CQUFvQixXQUFXLFlBQVlBLGlCQUFnQjtBQUN6RSxrQkFBQUksYUFBWTtBQUFBLGdCQUNkO0FBQUEsY0FDRjtBQUVBLHFCQUFPLGNBQWM7QUFBQSxZQUN2QjtBQUFBLFVBQ0Y7QUFTQSxtQkFBUyxrQkFBa0JuQixPQUFNa0IsU0FBUTtBQUN2QyxnQkFBSUUsU0FBUXBCLE1BQUs7QUFFakIscUJBQVMsYUFBYWtCLFNBQVE7QUFDNUIsa0JBQUksQ0FBQ0EsUUFBTyxlQUFlLFNBQVMsR0FBRztBQUNyQztBQUFBLGNBQ0Y7QUFFQSxrQkFBSUgsb0JBQW1CLFVBQVUsUUFBUSxJQUFJLE1BQU07QUFFbkQ7QUFDRSxvQkFBSSxDQUFDQSxtQkFBa0I7QUFDckIsbUNBQWlCLFdBQVdHLFFBQU8sU0FBUyxDQUFDO0FBQUEsZ0JBQy9DO0FBQUEsY0FDRjtBQUVBLGtCQUFJLGFBQWEsb0JBQW9CLFdBQVdBLFFBQU8sU0FBUyxHQUFHSCxpQkFBZ0I7QUFFbkYsa0JBQUksY0FBYyxTQUFTO0FBQ3pCLDRCQUFZO0FBQUEsY0FDZDtBQUVBLGtCQUFJQSxtQkFBa0I7QUFDcEIsZ0JBQUFLLE9BQU0sWUFBWSxXQUFXLFVBQVU7QUFBQSxjQUN6QyxPQUFPO0FBQ0wsZ0JBQUFBLE9BQU0sU0FBUyxJQUFJO0FBQUEsY0FDckI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGFBQWEsT0FBTztBQUMzQixtQkFBTyxTQUFTLFFBQVEsT0FBTyxVQUFVLGFBQWEsVUFBVTtBQUFBLFVBQ2xFO0FBV0EsbUJBQVMsbUJBQW1CRixTQUFRO0FBQ2xDLGdCQUFJLFdBQVcsQ0FBQztBQUVoQixxQkFBUyxPQUFPQSxTQUFRO0FBQ3RCLGtCQUFJLFlBQVksb0JBQW9CLEdBQUcsS0FBSyxDQUFDLEdBQUc7QUFFaEQsdUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDekMseUJBQVMsVUFBVSxDQUFDLENBQUMsSUFBSTtBQUFBLGNBQzNCO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsVUFDVDtBQWlCQSxtQkFBUyx3Q0FBd0MsY0FBYyxZQUFZO0FBQ3pFO0FBQ0Usa0JBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFBQSxjQUNGO0FBRUEsa0JBQUksa0JBQWtCLG1CQUFtQixZQUFZO0FBQ3JELGtCQUFJLGlCQUFpQixtQkFBbUIsVUFBVTtBQUNsRCxrQkFBSSxjQUFjLENBQUM7QUFFbkIsdUJBQVMsT0FBTyxpQkFBaUI7QUFDL0Isb0JBQUksY0FBYyxnQkFBZ0IsR0FBRztBQUNyQyxvQkFBSSxxQkFBcUIsZUFBZSxHQUFHO0FBRTNDLG9CQUFJLHNCQUFzQixnQkFBZ0Isb0JBQW9CO0FBQzVELHNCQUFJLGFBQWEsY0FBYyxNQUFNO0FBRXJDLHNCQUFJLFlBQVksVUFBVSxHQUFHO0FBQzNCO0FBQUEsa0JBQ0Y7QUFFQSw4QkFBWSxVQUFVLElBQUk7QUFFMUIsd0JBQU0sdVBBQTJRLGFBQWEsYUFBYSxXQUFXLENBQUMsSUFBSSxhQUFhLFlBQVksYUFBYSxrQkFBa0I7QUFBQSxnQkFDclg7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFJQSxjQUFJLG1CQUFtQjtBQUFBLFlBQ3JCLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLElBQUk7QUFBQSxZQUNKLEtBQUs7QUFBQSxZQUNMLE9BQU87QUFBQSxZQUNQLElBQUk7QUFBQSxZQUNKLEtBQUs7QUFBQSxZQUNMLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxZQUNSLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLEtBQUs7QUFBQTtBQUFBLFVBRVA7QUFJQSxjQUFJLGtCQUFrQixRQUFRO0FBQUEsWUFDNUIsVUFBVTtBQUFBLFVBQ1osR0FBRyxnQkFBZ0I7QUFFbkIsY0FBSSxPQUFPO0FBRVgsbUJBQVMsaUJBQWlCLEtBQUssT0FBTztBQUNwQyxnQkFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLFlBQ0Y7QUFHQSxnQkFBSSxnQkFBZ0IsR0FBRyxHQUFHO0FBQ3hCLGtCQUFJLEVBQUUsTUFBTSxZQUFZLFFBQVEsTUFBTSwyQkFBMkIsT0FBTztBQUN0RTtBQUNFLHdCQUFNLE1BQU8sTUFBTSw0RkFBNkY7QUFBQSxnQkFDbEg7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLGdCQUFJLE1BQU0sMkJBQTJCLE1BQU07QUFDekMsa0JBQUksRUFBRSxNQUFNLFlBQVksT0FBTztBQUM3QjtBQUNFLHdCQUFNLE1BQU8sb0VBQXFFO0FBQUEsZ0JBQ3BGO0FBQUEsY0FDRjtBQUVBLGtCQUFJLEVBQUUsT0FBTyxNQUFNLDRCQUE0QixZQUFZLFFBQVEsTUFBTSwwQkFBMEI7QUFDakc7QUFDRSx3QkFBTSxNQUFPLDZKQUE4SjtBQUFBLGdCQUM3SztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBRUE7QUFDRSxrQkFBSSxDQUFDLE1BQU0sa0NBQWtDLE1BQU0sbUJBQW1CLE1BQU0sWUFBWSxNQUFNO0FBQzVGLHNCQUFNLDJOQUEwTztBQUFBLGNBQ2xQO0FBQUEsWUFDRjtBQUVBLGdCQUFJLEVBQUUsTUFBTSxTQUFTLFFBQVEsT0FBTyxNQUFNLFVBQVUsV0FBVztBQUM3RDtBQUNFLHNCQUFNLE1BQU8sc0pBQXVKO0FBQUEsY0FDdEs7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLG1CQUFTLGtCQUFrQixTQUFTLE9BQU87QUFDekMsZ0JBQUksUUFBUSxRQUFRLEdBQUcsTUFBTSxJQUFJO0FBQy9CLHFCQUFPLE9BQU8sTUFBTSxPQUFPO0FBQUEsWUFDN0I7QUFFQSxvQkFBUSxTQUFTO0FBQUEsY0FLZixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQ0gsdUJBQU87QUFBQSxjQUVUO0FBQ0UsdUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDRjtBQUtBLGNBQUksd0JBQXdCO0FBQUE7QUFBQSxZQUUxQixRQUFRO0FBQUEsWUFDUixlQUFlO0FBQUEsWUFDZixrQkFBa0I7QUFBQSxZQUNsQixXQUFXO0FBQUEsWUFDWCxRQUFRO0FBQUEsWUFDUixpQkFBaUI7QUFBQSxZQUNqQixLQUFLO0FBQUEsWUFDTCxJQUFJO0FBQUEsWUFDSixPQUFPO0FBQUEsWUFDUCxnQkFBZ0I7QUFBQSxZQUNoQixjQUFjO0FBQUEsWUFDZCxhQUFhO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxhQUFhO0FBQUEsWUFDYixhQUFhO0FBQUEsWUFDYixXQUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxVQUFVO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxpQkFBaUI7QUFBQSxZQUNqQixhQUFhO0FBQUEsWUFDYixVQUFVO0FBQUEsWUFDVixjQUFjO0FBQUEsWUFDZCxRQUFRO0FBQUEsWUFDUixhQUFhO0FBQUEsWUFDYix5QkFBeUI7QUFBQSxZQUN6QixNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxnQkFBZ0I7QUFBQSxZQUNoQixjQUFjO0FBQUEsWUFDZCxPQUFPO0FBQUEsWUFDUCxLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVix5QkFBeUI7QUFBQSxZQUN6Qix1QkFBdUI7QUFBQSxZQUN2QixVQUFVO0FBQUEsWUFDVixXQUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxNQUFNO0FBQUEsWUFDTixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixnQkFBZ0I7QUFBQSxZQUNoQixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxNQUFNO0FBQUEsWUFDTixJQUFJO0FBQUEsWUFDSixXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxJQUFJO0FBQUEsWUFDSixRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixXQUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVixhQUFhO0FBQUEsWUFDYixjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxhQUFhO0FBQUEsWUFDYixhQUFhO0FBQUEsWUFDYixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixVQUFVO0FBQUEsWUFDVixnQkFBZ0I7QUFBQSxZQUNoQixLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxR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QSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7OztBQ0dBLE1BQU0sY0FBYztBQUFBO0FBQUEsSUFFaEIsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxJQUczRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoSSxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcs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R0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixD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QUFBLGtCQUFBQSxFQUFBQSxXQUFBQSxDQUFBQSxFQUFBQSxhQUFBQSxTQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxZQUFBQSxZQUFBQTtRQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLFVBQUFBLGVBQUFBLEtBQUFBLEdBQUFBLENBQUFBLE1BQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBO1FBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLENBQUFBO01BQUFBO0FBQUFBLGFBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLFlBQUFBLE9BQUFBLEtBQUFBLGNBQUFBLE1BQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxVQUFBQSx5QkFBQUEsT0FBQUEsQ0FBQUEsSUFBQUEsK0JBQUFBO0FBQUFBLFVBQUFBLEdBQUFBLENBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQTtBQUFBQSxlQUFBQSxjQUFBQTtRQUFBQTtBQUFBQSxVQUFBQSxZQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxPQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxZQUFBQSxFQUFBQSxXQUFBQSxJQUFBQTtNQUFBQTtJQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxVQUFBQSxJQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxNQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsZUFBQUEsRUFBQUEsQ0FBQUE7TUFBQUEsR0FBQUEsTUFBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsQ0FBQUEsRUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsSUFBQUEsRUFBQUEsTUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsR0FBQUEsT0FBQUEsVUFBQUEsZUFBQUEsRUFBQUEsT0FBQUEsUUFBQUEsSUFBQUEsV0FBQUE7QUFBQUEsZUFBQUE7TUFBQUEsSUFBQUE7QUFBQUEsZUFBQUEsRUFBQUEsR0FBQUE7QUFBQUEsZUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLENBQUFBLEdBQUFBLENBQUFBLENBQUFBO1FBQUFBO01BQUFBO0FBQUFBLGVBQUFBLEVBQUFBLEdBQUFBO0FBQUFBLFlBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxVQUFBQSxpQ0FBQUE7QUFBQUEsZUFBQUE7QUFBQUEsY0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEdBQUFBLE1BQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBLElBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLFdBQUFBLElBQUFBLEVBQUFBLFdBQUFBLEVBQUFBLEtBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLElBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBLEdBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxvQkFBQUEsSUFBQUEsR0FBQUEsTUFBQUEsSUFBQUEsQ0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUE7Y0FBQUEsS0FBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsb0JBQUFBO0FBQUFBO2NBQUFBLEtBQUFBO0FBQUFBLHVCQUFBQSxFQUFBQSxTQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxNQUFBQSxNQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsU0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUE7QUFBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsb0JBQUFBLEVBQUFBLElBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLElBQUFBO0FBQUFBO2NBQUFBO0FBQUFBLG9CQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxFQUFBQSxJQUFBQSxFQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxFQUFBQSxTQUFBQSxDQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLG9CQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxNQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxvQkFBQUEsUUFBQUEsRUFBQUEsQ0FBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLG9CQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxLQUFBQSxFQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQTtBQUFBQSxvQkFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsSUFBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLG9CQUFBQSxLQUFBQSxFQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQTtBQUFBQSxvQkFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsRUFBQUEsSUFBQUEsS0FBQUEsQ0FBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxJQUFBQTtBQUFBQTtZQUFBQTtBQUFBQSxnQkFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUE7VUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsZ0JBQUFBLENBQUFBLEdBQUFBLENBQUFBLEdBQUFBLElBQUFBO1VBQUFBLFVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtVQUFBQTtBQUFBQSxZQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsZUFBQUEsRUFBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsUUFBQUEsTUFBQUEsS0FBQUE7TUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsZUFBQUEsSUFBQUEsR0FBQUEsSUFBQUEsRUFBQUEsUUFBQUEsSUFBQUEsRUFBQUEsUUFBQUEsSUFBQUEsR0FBQUEsS0FBQUE7QUFBQUEsVUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsYUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsT0FBQUEsZ0JBQUFBLEtBQUFBLE9BQUFBLGtCQUFBQSxLQUFBQSxPQUFBQSwyQkFBQUEsS0FBQUEsT0FBQUEsdUJBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLGdCQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxzQkFBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFBQUEsWUFBQUEsTUFBQUEsY0FBQUEsTUFBQUEsVUFBQUEsTUFBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsZUFBQUEsS0FBQUEsTUFBQUEsSUFBQUEsQ0FBQUE7QUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUE7QUFBQUEsVUFBQUE7QUFBQUEsaUJBQUFBLElBQUFBLEdBQUFBLElBQUFBLEdBQUFBLENBQUFBLEdBQUFBLElBQUFBLEVBQUFBLFFBQUFBLEtBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGFBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBO1FBQUFBO0FBQUFBLGFBQUFBO0lBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGFBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLENBQUFBLENBQUFBO0lBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBLEdB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QUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxNQUFNLFdBQ04sTUFBTSxXQUNOLE1BQU0sV0FDTixNQUFNLFVBQ1IsR0FDT0MsS0FBUUQ7QUNoQmYsUUFBTUUsS0FBUyxFQUNiLElBQUksV0FDSixLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxNQUFNLFdBQ04sTUFBTSxXQUNOLE1BQU0sV0FDTixNQUFNLFVBQ1IsR0FDT0MsS0FBUUQ7QUNoQmYsUUFBTUUsS0FBTyxFQUNYLElBQUksV0FDSixLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxNQUFNLFdBQ04sTUFBTSxXQUNOLE1BQU0sV0FDTixNQUFNLFVBQ1IsR0FDT0MsS0FBUUQ7QUNoQmYsUUFBTUUsS0FBWSxFQUNoQixJQUFJLFdBQ0osS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsTUFBTSxXQUNOLE1BQU0sV0FDTixNQUFNLFdBQ04sTUFBTSxVQUNSLEdBQ09DLEtBQVFEO0FDaEJmLFFBQU1FLEtBQVEsRUFDWixJQUFJLFdBQ0osS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsTUFBTSxXQUNOLE1BQU0sV0FDTixNQUFNLFdBQ04sTUFBTSxVQUNSLEdBQ09DLEtBQVFEO0FDaEJmLFFBQU1FLEtBQVMsRUFDYixJQUFJLFdBQ0osS0FBSyxXQUNMLEtBQUssV0FDTCxLQUFLLFdBQ0wsS0FBSyxXQUNMLEtBQUssV0FDTCxL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QUFHLENBQUMsQ0FBQyxNQUFNQSxFQUFHLENBQUMsQ0FBQyxNQUFNQSxFQUFHLENBQUMsQ0FBQyxNQUFNQSxFQUFHLENBQUMsQ0FBQyxpQkFBaUIsSUFBd0IsS0FBSyxHQUFHQSxFQUFHLENBQUMsQ0FBQyxNQUFNQSxFQUFHLENBQUMsQ0FBQyxNQUFNQSxFQUFHLEVBQUUsQ0FBQyxNQUFNQSxFQUFHLEVBQUUsQ0FBQyxpQkFBaUIsSUFBMEIsR0FBRyxFQUFFLEtBQUssR0FBRztJQUN4UjtBQUdBLFFBQU1DLEtBQVUsQ0FBQyxRQUFRRixHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFD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QUUsQ0FDekU7QUFBQSxFQUVKO0FBRUEsV0FBUyxzQkFBc0IsT0FBbUMsV0FBb0IsVUFBcUI7QUFDdkcsdUJBQUFDLFFBQVMsT0FBTyw2QkFBNkIsS0FBSyxHQUFHLFdBQVcsUUFBUTtBQUFBLEVBQzVFO0FBRUEsV0FBUyw2QkFBNkIsT0FBbUM7QUFDckUsVUFBTSxjQUFjLElBQUksWUFBWTtBQUNwQyxXQUNJLGdDQUFBRCxRQUFBLGNBQUMsZUFBWSxXQUFVLFdBQ25CLGdDQUFBQSxRQUFBLGNBQUMsdUJBQW9CLFFBQVEsZUFDekIsZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLEtBQUssTUFBTTtBQUFBLFFBQ1gsS0FBSyxNQUFNO0FBQUEsUUFDWCxZQUFZLE1BQU07QUFBQSxRQUNsQixZQUFZLE1BQU07QUFBQSxRQUNsQixXQUFXLE1BQU07QUFBQSxRQUNqQixXQUFXLE1BQU07QUFBQSxRQUNqQixzQkFBc0IsTUFBTTtBQUFBO0FBQUEsSUFDaEMsQ0FDSixDQUNKO0FBQUEsRUFFUjs7O0FDckRBLEVBQUMsT0FBZSxpQkFBaUIsSUFBSTtBQUFBLElBQ2pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0o7IiwKICAibmFtZXMiOiBbImhhc093blByb3BlcnR5IiwgImZyb20iLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJDb21wb25lbnQiLCAiUHVyZUNvbXBvbmVudCIsICJjcmVhdGVSZWYiLCAieCIsICJoYXNPd25Qcm9wZXJ0eSIsICJSZWFjdEVsZW1lbnQiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImNsb25lRWxlbWVudCIsICJpc1ZhbGlkRWxlbWVudCIsICJvYmplY3QiLCAibWF0Y2giLCAiZnVuYyIsICJ0b0FycmF5IiwgImNyZWF0ZUNvbnRleHQiLCAiZXJyb3IiLCAiZm9yd2FyZFJlZiIsICJyZW5kZXIiLCAibWVtbyIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZVJlZHVjZXIiLCAicmVkdWNlciIsICJ1c2VSZWYiLCAidXNlRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJ1c2VDYWxsYmFjayIsICJ1c2VNZW1vIiwgInByZWZpeCIsICJwcm90b3R5cGUiLCAibm9kZSIsICJrZXlzIiwgIkNoaWxkcmVuIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJub2RlIiwgInBlZWsiLCAibGVuZ3RoIiwgImIiLCAiaW5pdGlhbFRpbWUiLCAiUmVhY3QiLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJGcmFnbWVudCIsICJoYXNPd25Qcm9wZXJ0eSIsICJwcmVmaXgiLCAic2FuaXRpemVVUkwiLCAiX3JlZiIsICJjYXBpdGFsaXplIiwgInRva2VuIiwgIm5vZGUiLCAieCIsICJtYXRjaCIsICJDb21wb25lbnQiLCAicHJvdG90eXBlIiwgIndvcmtJblByb2dyZXNzIiwgInRvU3RyaW5nIiwgImdldCIsICJzZXQiLCAiZ2V0QWN0aXZlRWxlbWVudCIsICJpc0h5ZHJhdGluZyIsICJ2YWxpZGF0ZVByb3BzIiwgImlzQXJyYXkiLCAib3B0aW9ucyIsICJmdW5jIiwgImlzQ3VzdG9tUHJvcGVydHkiLCAic3RyaW5nIiwgImNoYXJhY3RlciIsICJzdHlsZXMiLCAiZGVsaW1pdGVyIiwgInN0eWxlIiwgInJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMiLCAicG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyIsICJiIiwgImVycm9yIiwgImNhbGxDYWxsYmFjayIsICJjdXJyZW50IiwgInJvb3QiLCAicXVldWVkRXZlbnQiLCAicHJlZml4ZXMiLCAiaW5kZXgiLCAibG9nIiwgImlzRXZlbnRTdXBwb3J0ZWQiLCAiZnJvbSIsICJsZW5ndGgiLCAibmV4dCIsICJub29wIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlSW5zdGFuY2UiLCAiY2FuY2VsVGltZW91dCIsICJoYXMiLCAiY3Vyc29yIiwgIm5vdyIsICJfcXVldWUiLCAicmVuZGVyTGFuZXMiLCAidXBkYXRlRnJhZ21lbnQiLCAiY2hpbGQiLCAicmVjb25jaWxlQ2hpbGRGaWJlcnMiLCAiaXNPYmplY3QiLCAidmVyc2lvbiIsICJyZWR1Y2VyIiwgInJlbmRlciIsICJzdWJ0cmVlUmVuZGVyTGFuZXMiLCAiaXNIaWRkZW4iLCAiZXJyb3IkMSIsICJjb21taXRUaW1lIiwgImh5ZHJhdGUiLCAiY3JlYXRlUG9ydGFsIiwgImN1cnJlbnRIb29rIiwgIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgIngiLCAiYXNzaWduIiwgIngiLCAiaXNWYWxpZEVsZW1lbnQiLCAidmFsaWRhdGUiLCAiaSIsICJjaGVja2VyIiwgImhhc093biIsICJjbGFzc05hbWVzIiwgInJlcXVpcmVfcmVhY3RfaXNfZGV2ZWxvcG1lbnQiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgInJlcXVpcmVfcmVhY3RfaXMiLCAiZ2V0UHJvdG90eXBlT2YiLCAia2V5cyIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIlN5bWJvbCIsICJTeW1ib2wiLCAiaGFzT3duUHJvcGVydHkiLCAiU3ltYm9sIiwgImlzT2JqZWN0IiwgImlzT2JqZWN0IiwgImlzRnVuY3Rpb24iLCAiZnVuYyIsICJmdW5jIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJNYXAiLCAiaGFzT3duUHJvcGVydHkiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgIk1hcCIsICJzaXplIiwgImxlbmd0aCIsICJNYXAiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvdGhWYWx1ZSIsICJVaW50OEFycmF5IiwgIlN5bWJvbCIsICJVaW50OEFycmF5IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiaXNBcnJheSIsICJpc0FycmF5IiwgIm9iamVjdCIsICJsZW5ndGgiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIkJ1ZmZlciIsICJpc0J1ZmZlciIsICJsZW5ndGgiLCAiZnVuYyIsICJpc1R5cGVkQXJyYXkiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc1R5cGVkQXJyYXkiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgImZ1bmMiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIlByb21pc2UiLCAiU2V0IiwgIldlYWtNYXAiLCAiTWFwIiwgIlByb21pc2UiLCAiU2V0IiwgIldlYWtNYXAiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc1R5cGVkQXJyYXkiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgImlzRXF1YWwiLCAiZ2xvYmFsIiwgImlzQXJyYXkiLCAiaXNPYmplY3QiLCAiYiIsICJpc1VuZGVmaW5lZCIsICJpc051bWJlciIsICJpc0RhdGUiLCAiZXh0ZW5kIiwgImZvcm1hdCIsICJsb2NhbGUiLCAidG8iLCAiZnJvbSIsICJpc0Z1bmN0aW9uIiwgImtleXMiLCAiY2FsZW5kYXIiLCAibm93IiwgInNpZ24iLCAidG9rZW4iLCAib3JkaW5hbCIsICJmdW5jIiwgImxlbmd0aCIsICJpIiwgInN0cmluZyIsICJkaWZmIiwgImxvY2FsZURhdGEiLCAiZ2V0IiwgIngiLCAiaG91cnMiLCAibWludXRlcyIsICJuZXh0IiwgIm1hdGNoIiwgImRlZmF1bHRzIiwgInRva2VucyIsICJtZXJpZGllbSIsICJtaW4iLCAibWF4IiwgInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIiwgIm9mZnNldCIsICJtYXRjaGVzIiwgImJhc2UiLCAiaXNTdHJpbmciLCAicHJvcGVydHkiLCAidG9TdHJpbmciLCAicHJlZml4IiwgInRvQXJyYXkiLCAidG9KU09OIiwgImFicyIsICJyb3VuZCIsICJ0aHJlc2hvbGRzIiwgImlzQXJyYXkiLCAiaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgImdsb2JhbCIsICJudW1lcmFsIiwgIlZFUlNJT04iLCAiZGVmYXVsdHMiLCAiYWJzIiwgIm1pbiIsICJtYXgiLCAic3RyaW5nIiwgIngiLCAibmV4dCIsICJwcm9wZXJ0eSIsICJiIiwgIm51bSIsICJtZW1vaXplIiwgImZ1bmMiLCAiaXNBcnJheSIsICJvYmplY3QiLCAibWVtb2l6ZSIsICJmdW5jIiwgInN0cmluZyIsICJtYXRjaCIsICJsZW5ndGgiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAidG9TdHJpbmciLCAiaXNBcnJheSIsICJ0b1N0cmluZyIsICJvYmplY3QiLCAib2JqZWN0IiwgImxlbmd0aCIsICJnZXQiLCAib2JqZWN0IiwgImxlbmd0aCIsICJmdW5jIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgImxlbmd0aCIsICJrZXlzIiwgIm9iamVjdCIsICJvYmplY3QiLCAiaXNPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiQnVmZmVyIiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImxlbmd0aCIsICJVaW50OEFycmF5IiwgIlN5bWJvbCIsICJvYmplY3QiLCAiaXNPYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzT2JqZWN0IiwgImtleXMiLCAib2JqZWN0IiwgImtleSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiaXNQbGFpbk9iamVjdCIsICJpc1BsYWluT2JqZWN0IiwgIlN5bWJvbCIsICJpc0FycmF5IiwgImxlbmd0aCIsICJmbGF0dGVuIiwgImxlbmd0aCIsICJmdW5jIiwgImZ1bmMiLCAibGVuZ3RoIiwgImZ1bmMiLCAic3RyaW5nIiwgImZ1bmMiLCAiZmxhdHRlbiIsICJmdW5jIiwgIm9iamVjdCIsICJsZW5ndGgiLCAicmVxdWlyZV9yZWFjdF9pc19kZXZlbG9wbWVudCIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAicmVxdWlyZV9yZWFjdF9pcyIsICJlbmNvZGUiLCAicHJlZml4IiwgIm1hdGNoIiwgImJhc2UiLCAicGFyc2UiLCAiY2hhciIsICJ0b1N0cmluZyIsICJzdHJpbmdpZnkiLCAiX2V4dGVuZHMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJrZXlzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9pbmhlcml0cyIsICJjbGVhbklucHV0UHJvcHMiLCAiY29weVN0eWxlcyIsICJzdHlsZXMiLCAibm9kZSIsICJnZW5lcmF0ZUlkIiwgIkF1dG9zaXplSW5wdXQiLCAiZm9jdXMiLCAiaW5qZWN0U3R5bGVzIiwgInJlbmRlciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJwcm90b3R5cGUiLCAia2V5cyIsICJiIiwgImRlc2NyaXB0b3JzIiwgImZpbHRlciIsICJwb3NpdGlvbiIsICJtYXRjaGVzIiwgImhhc093blByb3BlcnR5IiwgInJlZHVjZXIiLCAiZGVsaW1pdGVyIiwgImRlZmluZSIsICJzaXplIiwgImxlbmd0aCIsICJmaWx0ZXIiLCAiZWFjaCIsICJ0b2tlbiIsICJtYXRjaCIsICJwcm90b3R5cGUiLCAidG9TdHJpbmciLCAiZWFjaCIsICJlbmNvZGUiLCAibWF0Y2giLCAia2V5cyIsICJpc0Zvcm1EYXRhIiwgImlzRmlsZUxpc3QiLCAidHJhbnNpdGlvbmFsIiwgImxpbmUiLCAibWF0Y2giLCAiZmlsdGVyIiwgImNoYXIiLCAic2VsZiIsICJrZXlzIiwgImNvbXB1dGVkIiwgInByb3RvdHlwZSIsICJ2YWxpZGF0ZVN0YXR1cyIsICJtYXRjaCIsICJtaW4iLCAibm93IiwgIm5vdyIsICJtYXRjaCIsICJiIiwgIm1lcmdlIiwgInRva2VuIiwgInRyYW5zaXRpb25hbCIsICJzaWduYWwiLCAiZW5jb2RlIiwgInJlcyIsICJsZW5ndGgiLCAibGVuZ3RoIiwgInZlcnNpb24iLCAia2V5cyIsICJ2YWxpZGF0b3JzIiwgInRyYW5zaXRpb25hbCIsICJ0b2tlbiIsICJBeGlvcyIsICJBeGlvc0Vycm9yIiwgIkNhbmNlbGVkRXJyb3IiLCAiaXNDYW5jZWwiLCAiQ2FuY2VsVG9rZW4iLCAiVkVSU0lPTiIsICJhbGwiLCAiaXNBeGlvc0Vycm9yIiwgInNwcmVhZCIsICJ0b0Zvcm1EYXRhIiwgIkF4aW9zSGVhZGVycyIsICJIdHRwU3RhdHVzQ29kZSIsICJtZXJnZUNvbmZpZyIsICJ2IiwgImlMb2FkZWRDaGlsZHJlbiIsICJiIiwgImIiLCAiY3ljbGVDaGVjayIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJSZWFjdCIsICJTdHlsZVNoZWV0IiwgImxlbmd0aCIsICJ0cmltIiwgImFwcGVuZCIsICJsZW5ndGgiLCAidHJpbSIsICJsZW5ndGgiLCAicHJvcGVydHkiLCAiY2hhcmFjdGVyIiwgImNoYXJhY3RlcnMiLCAiYXBwZW5kIiwgInNpemUiLCAieCIsICJ0cmltIiwgImxlbmd0aCIsICJsZW5ndGgiLCAiaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nIiwgImNoYXJhY3RlciIsICJ0b1J1bGVzIiwgImdldFJ1bGVzIiwgImNvbXBhdCIsICJyZW1vdmVMYWJlbCIsICJsZW5ndGgiLCAicHJlZml4ZXIiLCAiY3JlYXRlQ2FjaGUiLCAibm9kZSIsICJzdHlsaXMiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAicmVnaXN0ZXJTdHlsZXMiLCAiaW5zZXJ0U3R5bGVzIiwgImlzRGV2ZWxvcG1lbnQiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJpc1Byb2Nlc3NhYmxlVmFsdWUiLCAicHJvY2Vzc1N0eWxlVmFsdWUiLCAibWF0Y2giLCAia2V5ZnJhbWVzIiwgIm5leHQiLCAic3R5bGVzIiwgInN0cmluZyIsICJzeW5jRmFsbGJhY2siLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgImlzRGV2ZWxvcG1lbnQiLCAid2l0aEVtb3Rpb25DYWNoZSIsICJmdW5jIiwgImNyZWF0ZUVtb3Rpb25Qcm9wcyIsICJJbnNlcnRpb24iLCAiX3JlZiIsICJpc0RldmVsb3BtZW50IiwgIlJlYWN0IiwgImpzeCIsICJzdHlsZXMiLCAibm9kZSIsICJrZXlmcmFtZXMiLCAidG9TdHJpbmciLCAib2JqZWN0IiwgImtleXMiLCAiY2xvbmVFbGVtZW50V2l0aENzcyIsICJldWlTY3JlZW5SZWFkZXJPbmx5IiwgImV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMiLCAiRXVpU2NyZWVuUmVhZGVyT25seSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJFdWlTY3JlZW5SZWFkZXJMaXZlIiwgIl9yZWYiLCAidG9nZ2xlIiwgIlByb3BUeXBlcyIsICJjYW5kaWRhdGVTZWxlY3RvcnMiLCAiY2FuZGlkYXRlU2VsZWN0b3IiLCAiam9pbiIsICJOb0VsZW1lbnQiLCAiRWxlbWVudCIsICJtYXRjaGVzIiwgInByb3RvdHlwZSIsICJtc01hdGNoZXNTZWxlY3RvciIsICJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCAiZ2V0Um9vdE5vZGUiLCAiZWxlbWVudCIsICJvd25lckRvY3VtZW50IiwgImdldENhbmRpZGF0ZXMiLCAiZWwiLCAiaW5jbHVkZUNvbnRhaW5lciIsICJmaWx0ZXIiLCAiY2FuZGlkYXRlcyIsICJBcnJheSIsICJzbGljZSIsICJhcHBseSIsICJxdWVyeVNlbGVjdG9yQWxsIiwgImNhbGwiLCAidW5zaGlmdCIsICJnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkiLCAiZWxlbWVudHMiLCAib3B0aW9ucyIsICJlbGVtZW50c1RvQ2hlY2siLCAiZnJvbSIsICJsZW5ndGgiLCAic2hpZnQiLCAidGFnTmFtZSIsICJhc3NpZ25lZCIsICJhc3NpZ25lZEVsZW1lbnRzIiwgImNvbnRlbnQiLCAiY2hpbGRyZW4iLCAibmVzdGVkQ2FuZGlkYXRlcyIsICJmbGF0dGVuIiwgInB1c2giLCAic2NvcGUiLCAidmFsaWRDYW5kaWRhdGUiLCAiaW5jbHVkZXMiLCAic2hhZG93Um9vdCIsICJnZXRTaGFkb3dSb290IiwgInZhbGlkU2hhZG93Um9vdCIsICJzaGFkb3dSb290RmlsdGVyIiwgImdldFRhYmluZGV4IiwgIm5vZGUiLCAiaXNTY29wZSIsICJ0YWJJbmRleCIsICJ0ZXN0IiwgImlzQ29udGVudEVkaXRhYmxlIiwgImlzTmFOIiwgInBhcnNlSW50IiwgImdldEF0dHJpYnV0ZSIsICJzb3J0T3JkZXJlZFRhYmJhYmxlcyIsICJhIiwgImIiLCAiZG9jdW1lbnRPcmRlciIsICJpc0lucHV0IiwgImlzSGlkZGVuSW5wdXQiLCAidHlwZSIsICJpc0RldGFpbHNXaXRoU3VtbWFyeSIsICJyIiwgInNvbWUiLCAiY2hpbGQiLCAiZ2V0Q2hlY2tlZFJhZGlvIiwgIm5vZGVzIiwgImZvcm0iLCAiaSIsICJjaGVja2VkIiwgImlzVGFiYmFibGVSYWRpbyIsICJuYW1lIiwgInJhZGlvU2NvcGUiLCAicXVlcnlSYWRpb3MiLCAicmFkaW9TZXQiLCAid2luZG93IiwgIkNTUyIsICJlc2NhcGUiLCAiZXJyIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAibWVzc2FnZSIsICJpc1JhZGlvIiwgImlzTm9uVGFiYmFibGVSYWRpbyIsICJpc1plcm9BcmVhIiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJ3aWR0aCIsICJoZWlnaHQiLCAiaXNIaWRkZW4iLCAiX3JlZiIsICJkaXNwbGF5Q2hlY2siLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ2aXNpYmlsaXR5IiwgImlzRGlyZWN0U3VtbWFyeSIsICJub2RlVW5kZXJEZXRhaWxzIiwgInBhcmVudEVsZW1lbnQiLCAibm9kZVJvb3RIb3N0IiwgImhvc3QiLCAibm9kZUlzQXR0YWNoZWQiLCAiY29udGFpbnMiLCAib3JpZ2luYWxOb2RlIiwgInJvb3ROb2RlIiwgImFzc2lnbmVkU2xvdCIsICJnZXRDbGllbnRSZWN0cyIsICJpc0Rpc2FibGVkRnJvbUZpZWxkc2V0IiwgInBhcmVudE5vZGUiLCAiZGlzYWJsZWQiLCAiaXRlbSIsICJpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSIsICJpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlIiwgInNoYWRvd0hvc3ROb2RlIiwgInNvcnRCeU9yZGVyIiwgInJlZ3VsYXJUYWJiYWJsZXMiLCAib3JkZXJlZFRhYmJhYmxlcyIsICJmb3JFYWNoIiwgImNhbmRpZGF0ZVRhYmluZGV4IiwgInNvcnQiLCAicmVkdWNlIiwgImFjYyIsICJzb3J0YWJsZSIsICJjb25jYXQiLCAidGFiYmFibGUiLCAiYmluZCIsICJmb2N1c2FibGUiLCAia2V5cyIsICJzdHJpbmdpZnkiLCAiYiIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJwcmVmaXgiLCAidXNlR2VuZXJhdGVkSHRtbElkIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfdHlwZW9mIiwgIm9iaiIsICJpc09iamVjdCIsICJpc0ludmVyc2VDb2xvck1vZGUiLCAiZ2V0Q29sb3JNb2RlIiwgImdldE9uIiwgIm5vZGUiLCAic2V0T24iLCAiQ29tcHV0ZWQiLCAiYmFzZSIsICJfcmVmIiwgIl9yZWYyIiwgImdldENvbXB1dGVkIiwgIm92ZXIiLCAiYnVpbGRUaGVtZSIsICJnZXRQcm90b3R5cGVPZiIsICJwcm90b3R5cGUiLCAia2V5IiwgInByb3BlcnR5IiwgImdldCIsICJtZXJnZURlZXAiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJiIiwgIngiLCAicmdiIiwgImIiLCAicmdiIiwgIm1heCIsICJiIiwgImIiLCAicm91bmQiLCAiYiIsICJyb3VuZCIsICJjc3MiLCAicmdiIiwgImhzbCIsICJyZ2IiLCAiYiIsICJ2IiwgImIiLCAiYiIsICJyb3VuZCIsICJiIiwgImIiLCAibWluIiwgImIiLCAiZmxvb3IiLCAidiIsICJiIiwgIm1pbiIsICJtYXgiLCAicmdiMmhzbCIsICJiIiwgInYiLCAiYiIsICJ4IiwgInBvdyIsICJiIiwgIngiLCAiY29zIiwgImIiLCAic3FydCIsICJyb3VuZCIsICJiIiwgImIiLCAibnVtIiwgImIiLCAiYiIsICJyb3VuZCIsICJybmQiLCAidiIsICJiIiwgInJvdW5kIiwgInJnYiIsICJiIiwgInBvdyIsICJiIiwgImFicyIsICJwb3ciLCAic2lnbiIsICJiIiwgImFicyIsICJiIiwgImIiLCAibGFiIiwgInBvdyIsICJyZ2IiLCAiYiIsICJ4IiwgInJnYiIsICJsY2giLCAic3FydCIsICJwb3ciLCAicG93IiwgInNxcnQiLCAiUEkiLCAiY29zIiwgInNpbiIsICJhdGFuMiIsICJjb2xvcnMiLCAiYiIsICJyZ2IiLCAicG93IiwgImNvbG9ycyIsICJ2IiwgImYiLCAiX3BvcyIsICJjb2xvcnMiLCAibGFiIiwgImIiLCAicG93IiwgInNpbiIsICJjb3MiLCAibGlnaHRuZXNzIiwgImIiLCAiZmxvb3IiLCAibG9nIiwgInBvdyIsICJmbG9vciIsICJhYnMiLCAibnVtIiwgIm1pbiIsICJtYXgiLCAiYiIsICJsaW1pdHMiLCAidiIsICJiIiwgInNxcnQiLCAicG93IiwgIm1pbiIsICJtYXgiLCAiYXRhbjIiLCAiYWJzIiwgImNvcyIsICJzaW4iLCAiUEkiLCAiYiIsICJiMiIsICJiIiwgImNvbG9ycyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJmbGF0dGVuIiwgIl9yZWYiLCAiZXVpUGFsZXR0ZUNvbG9yQmxpbmQiLCAiX3JlZjIiLCAiY29sb3JzIiwgImJhc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImIiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJ0aW50IiwgInNoYWRlIiwgImxpZ2h0bmVzcyIsICJfdHlwZW9mIiwgIm9iaiIsICJtYWtlSGlnaENvbnRyYXN0Q29sb3IiLCAibGlnaHRuZXNzIiwgIm1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiY29sb3JzIiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAibG9naWNhbENTUyIsICJwcm9wZXJ0eSIsICJsb2dpY2FsU2l6ZUNTUyIsICJsb2dpY2FsVGV4dEFsaWduQ1NTIiwgIl90eXBlb2YiLCAib2JqIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiaW1wb3J0X3JlYWN0IiwgIl9leHRlbmRzIiwgInVzZUV1aVRoZW1lIiwgIndpdGhFdWlUaGVtZSIsICJDb21wb25lbnQiLCAiUmVuZGVyIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJpc0VxdWFsIiwgInRocm90dGxlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgInRocm90dGxlIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJ1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImZvcm1hdEJvb2xlYW4iLCAiX3JlZiIsICJpbXBvcnRfbW9tZW50IiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiY2FsZW5kYXIiLCAibW9tZW50IiwgIngiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJyb3VuZCIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAiZm9ybWF0QXV0byIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiaXNEb21haW5TZWN1cmUiLCAiZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IiwgIl9yZWYiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9nZXQiLCAiZ2V0IiwgIm9iamVjdCIsICJfZ2V0IiwgInYxIiwgInJldmVyc2UiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZ2V0QnVmZmVyVmFsdWVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9yZWY0IiwgIl9yZWY1IiwgIm5vZGUiLCAiZ2V0VHJhbnNpdGlvblRpbWluZ3MiLCAiZ2V0V2FpdER1cmF0aW9uIiwgInBlcmZvcm1PbkZyYW1lIiwgIm9uRnJhbWUiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUNvbWJpbmVkUmVmcyIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiUmVhY3QiLCAiX2V4dGVuZHMiLCAiRXVpSWNvbkFjY2Vzc2liaWxpdHkiLCAiX3JlZiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFnZ3JlZ2F0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbGVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbmFseXplRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFubm90YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBtVHJhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWRkRGF0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFnZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXVkaXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhbnZhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYXNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGFzaGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERldnRvb2xzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERpc2NvdmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEVtcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGaWxlYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGbGVldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JhcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JvayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBIZWFydGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4UGF0dGVybiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFJvbGx1cCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMZW5zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExvZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTW9uaXRvcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBOb3RlYm9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQYWNrZXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBpcGVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlcG9ydGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTYXZlZE9iamVjdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVc2Vyc1JvbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFZpc3VhbGl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXYXRjaGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93U3RhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXN0ZXJpc2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVha2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJlbGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbFNsYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJvbHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm94ZXNIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJhbmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaFVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJvb20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJ1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnVnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1bGxzZXllIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNhbGVuZGFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWREcml6emxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3Rvcm15IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3VubnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2x1c3RlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db2xvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db21wdXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGFpbmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QmVsb3ciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eVdpdGhpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udHJvbHNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db3B5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHlDbGlwYm9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NoYWlycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXJyZW5jeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGF0YWJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGVza3RvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvd25sb2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JCb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNoZWNrbGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb2RlQmxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29tbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JIZWFkaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0YWxpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JMaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclJlZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yU3RyaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZGVybGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVyYXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeHBhbmRNaW5pIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXllQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VIYXBweSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlTmV1dHJhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlU2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GbGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlck9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVOZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZyYW1lUHJldmlvdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HZWFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdsYXNzZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xvYmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmlkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlYXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlYXRtYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVscCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ib21lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbWFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbXBvcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhDbG9zZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhGbHVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleE1hcHBpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4UnVudGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklucHV0T3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluc3BlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW52ZXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktleWJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbEZpZWxkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbEZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbE9wZXJhbmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsU2VsZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsVmFsdWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3ViZXJuZXRlc05vZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3ViZXJuZXRlc1BvZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MYXllcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGV0dGVyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVEYXNoZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURvdHRlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lU29saWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3RBZGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQWVyb3NwaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BcGFjaGUiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBwU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F3c01vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F6dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZU1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0JlYXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2VwaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkRWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db2Rlc2FuZGJveCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ291Y2hiYXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Eb2NrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Ryb3B3aXphcmQiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY1N0YWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FdGNkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HY3AiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2l0aHViIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HbWFpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29sYW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Hb29nbGVHIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0hhcHJveHkiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSWJtIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libU1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0thZmthIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LaWJhbmEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0t1YmVybmV0ZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0xvZ2dpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0xvZ3N0YXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NYXBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NZW1jYWNoZWQiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWV0cmljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTW9uZ29kYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTXlzcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb05naW54IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Pc3F1ZXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29QaHAiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUG9zdGdyZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Byb21ldGhldXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1JhYmJpdG1xIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SZWRpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NpdGVTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NrZXRjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2xhY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1VwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2ViaG9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2luZG93cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoRmlsdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoSWYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaFF1ZXVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25ldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhQbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hcE1hcmtlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW1vcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudVVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lcmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbmltaXplIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxEYXRhVmlzdWFsaXplciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxSZWdyZXNzaW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1vYmlsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb29uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uT2ZmbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PbmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWdlU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VzU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhaW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhcGVyQ2xpcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXJ0aWFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhdXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBheW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGVuY2lsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlcmNlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbkZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsYXlGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBvcG91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVvdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXBvcnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXR1cm5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2F2ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TY2FsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlc3Npb25WaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU25vd2ZsYWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5U3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkU3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcEZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcmFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VibW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Td2F0Y2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TeW1saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlT2ZDb250ZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZW1wZXJhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lc2xpZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQWxpYXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQXJyYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5CaW5hcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Cb29sZWFuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ2xhc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29uc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGVuc2VWZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbGVtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRW51bSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW1NZW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkV4Y2VwdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpZWxkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmlsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZsYXR0ZW5lZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuR2VvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSGlzdG9ncmFtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSVAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5JbnRlcmZhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Kb2luIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuS2V5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuS2V5d29yZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldGhvZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1vZHVsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk5lc3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk51bGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5PYmplY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5PcGVyYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBhY2thZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYXJhbWV0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QZXJjb2xhdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5nZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmVwbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNlYXJjaFR5cGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TaGFwZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN0cmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN0cnVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN5bWJvbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRhZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRleHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Ub2tlbkNvdW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmFyaWFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhaW5pbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5mb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVubGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXJBdmF0YXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpZGVvUGxheWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0FyZWEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYVN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFySG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR29hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNMaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01hcENvb3JkaW5hdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwUmVnaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01ldHJpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNQaWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFnQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNWZWdhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXBEaXNhYmxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XcmVuY2giLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiZXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYiLCAiX3JlZjIiLCAidGludE9yU2hhZGUiLCAiY29sb3IiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYzIiwgInVzZUV1aUJhY2tncm91bmRDb2xvckNTUyIsICJldWlTY3JvbGxCYXJTdHlsZXMiLCAiX3JlZiIsICJjb2xvcnMiLCAic2l6ZSIsICJfcmVmMiIsICJldWlQYWRkaW5nU2l6ZSIsICJfcmVmIiwgInNpemUiLCAidXNlRXVpUGFkZGluZ1NpemUiLCAidXNlRXVpUGFkZGluZ0NTUyIsICJwcm9wZXJ0eSIsICJldWlGb2N1c1JpbmciLCAiZXVpRm9udFNpemUiLCAiX3JlZiIsICJldWlUZXh0QnJlYWtXb3JkIiwgIkV1aUdsb2JhbFN0eWxlcyIsICJfcmVmIiwgImJhc2UiLCAiY29sb3JzIiwgImZvbnQiLCAic3R5bGVzIiwgImljb25TaXplIiwgInNpemUiLCAiZXVpSWNvblN0eWxlcyIsICJfcmVmMyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgInNlbGYiLCAiX2dldFByb3RvdHlwZU9mIiwgImdldElzQXBwSWNvbiIsICJ4IiwgImljb24iLCAiRXVpSWNvbkNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RTcHJlYWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiZm9jdXNhYmxlIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aUNvbnRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgImlzQm9vbGVhbiIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc1VuZGVmaW5lZCIsICJjaGFyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAidG9rZW4iLCAicmVuZGVyIiwgIkNvbXBvbmVudCIsICJSZWFjdCIsICJ4IiwgIkV1aUkxOG4iLCAiX3JlZiIsICJfcmVmMiIsICJ1c2VMb2FkaW5nQXJpYUxhYmVsIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJzcGlubmVyQ29sb3JzQ1NTIiwgImJvcmRlciIsICJoaWdobGlnaHQiLCAiZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUxvYWRpbmdTcGlubmVyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkIiwgIl9yZWYiLCAiaWNvblNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiVVJMIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJTSVpFUyIsICJFdWlCdXR0b24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZjIiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlPYnNlcnZlciIsICJyZW5kZXIiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl90eXBlb2YiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpUmVzaXplT2JzZXJ2ZXIiLCAibWFrZVJlc2l6ZU9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9jb2xvckNTUyIsICJldWlMaW5rSG92ZXJDU1MiLCAiZXVpTGlua0ZvY3VzQ1NTIiwgImV1aUxpbmtDU1MiLCAiX3JlZiIsICJldWlMaW5rU3R5bGVzIiwgIl9yZWYyIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVGl0bGUiLCAiX3JlZiIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZVN0eWxlcyIsICJldWlUZXh0IiwgImV1aVNjYWxlVGV4dCIsICJldWlUZXh0U3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVRleHRDb2xvclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIkV1aVRleHRDb2xvciIsICJfcmVmIiwgImNsb25lRWxlbWVudCIsICJpc05hbWVkQ29sb3IiLCAic3R5bGVzIiwgIkNvbXBvbmVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVRleHRBbGlnblN0eWxlcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dEFsaWduIiwgIl9yZWYiLCAiY2xvbmVFbGVtZW50IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dCIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJjb2xvclRvQ2xhc3NOYW1lTWFwIiwgIkNPTE9SUyIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpQnV0dG9uRW1wdHkiLCAiX3JlZiIsICJpY29uU2l6ZSIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImNvbG9yVG9DbGFzc05hbWVNYXAiLCAiQ09MT1JTIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlCdXR0b25JY29uIiwgIl9yZWYiLCAiaWNvblNpemUiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJub2RlIiwgIkV1aUlubmVyVGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiY2FuY2VsRnJhbWUiLCAiYW5pbWF0aW9uIiwgImNzcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlBdXRvU2l6ZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgInBhcnNlQ29sb3IiLCAicmdiIiwgImNocm9tYVZhbGlkIiwgIl90eXBlb2YiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJpY29uU2lkZVRvQ2xhc3NOYW1lTWFwIiwgIklDT05fU0lERVMiLCAiRXVpQmFkZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImlzTmFtZWRDb2xvciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpUG9ydGFsIiwgInBvc2l0aW9uIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUb29sVGlwUG9wb3ZlciIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRXVpVG9vbFRpcCIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJhbmNob3IiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaXAiLCAiX3JlZiIsICJzaXplIiwgInBvc2l0aW9uIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJTSVpFUyIsICJFdWlCZXRhQmFkZ2UiLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJFbGVtZW50IiwgIlByb3BUeXBlcyIsICJnZXRTaGFkb3dDb2xvciIsICJldWlTaGFkb3dYU21hbGwiLCAiX3JlZiIsICJfcmVmMiIsICJldWlTaGFkb3dTbWFsbCIsICJfcmVmMyIsICJfcmVmNCIsICJldWlTaGFkb3dNZWRpdW0iLCAiX3JlZjUiLCAiX3JlZjYiLCAicHJvcGVydHkiLCAidiIsICJldWlTaGFkb3dMYXJnZSIsICJfcmVmNyIsICJfcmVmOCIsICJldWlTaGFkb3dYTGFyZ2UiLCAiX3JlZjkiLCAiX3JlZjEwIiwgInJldmVyc2UiLCAiZXVpU2hhZG93RmxhdCIsICJldWlTaGFkb3ciLCAic2l6ZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX19hc3NpZ24iLCAiZnJvbSIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiX19hc3NpZ24iLCAiX19yZXN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAieCIsICJjYnMiLCAiZmlsdGVyIiwgIl9fYXNzaWduIiwgIlJlYWN0IiwgIl9fcmVzdCIsICJfX2Fzc2lnbiIsICJTaWRlQ2FyIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkluRm9jdXNHdWFyZCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kczIiLCAiU2lkZUNhciIsICJfcmVmIiwgImNhcHR1cmVGb2N1c1Jlc3RvcmUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiZXh0cmFjdFJlZiIsICJlZmZlY3RDYXIiLCAiU2lkZUNhciIsICJlZmZlY3RDYXIiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3NldFByb3RvdHlwZU9mIiwgInQiLCAiZSIsICJfc2V0UHJvdG90eXBlT2YiLCAiX3R5cGVvZiIsICJvIiwgIl90eXBlb2YiLCAiX3R5cGVvZiIsICJfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3JlYWN0IiwgInJlZHVjZVByb3BzVG9TdGF0ZSIsICJoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IiwgIlNpZGVFZmZlY3QiLCAicGVlayIsICJyZW5kZXIiLCAiUmVhY3QiLCAiX2RlZmluZVByb3BlcnR5IiwgInRvQXJyYXkiLCAiYXNBcnJheSIsICJub2RlIiwgIngiLCAiYiIsICJub2RlIiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJwb3NpdGlvbiIsICJub2RlIiwgImFzQXJyYXkiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJmb2N1c2FibGUiLCAibGluZSIsICJmb2N1c2FibGUiLCAiYXNBcnJheSIsICJub2RlIiwgIm5leHQiLCAicHJldiIsICJmb2N1c09uQm9keSIsICJpc0ZyZWVGb2N1cyIsICJkZWZhdWx0V2hpdGVsaXN0IiwgImZvY3VzV2hpdGVsaXN0ZWQiLCAicmVjb3JkUG9ydGFsIiwgImZvY3VzSXNQb3J0YWxlZFBhaXIiLCAiZm9jdXNXYXNPdXRzaWRlIiwgImNoZWNrSW5Ib3N0IiwgIndpdGhpbkhvc3QiLCAiYWN0aXZhdGVUcmFwIiwgIl9yZWYiLCAibm9kZSIsICJfcmVmMiIsICJfcmVmMyIsICJvblRyYXAiLCAib25CbHVyIiwgIm9uRm9jdXMiLCAiRm9jdXNXYXRjaGVyIiwgIkZvY3VzVHJhcCIsICJfcmVmNCIsICJQcm9wVHlwZXMiLCAib25XaW5kb3dCbHVyIiwgImF0dGFjaEhhbmRsZXIiLCAiZGV0YWNoSGFuZGxlciIsICJfcmVmNSIsICJfcmVmNiIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJjc3MiLCAic3R5bGVzIiwgInN0eWxlcyIsICJwYXJzZSIsICJ4IiwgIm5vZGUiLCAic3R5bGVzIiwgInBvc2l0aW9uIiwgImV4dHJhY3RSZWYiLCAieCIsICJTdHlsZSIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJSZWFjdCIsICJub2RlIiwgIngiLCAiUmVhY3QiLCAiU3R5bGUiLCAiaW1wb3J0X3JlYWN0IiwgImV4dHJhY3RSZWYiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiZWZmZWN0Q2FyIiwgInNpZGVjYXJfZGVmYXVsdCIsICJGb2N1c09uIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpRm9jdXNUcmFwIiwgIm5vZGUiLCAicmVuZGVyIiwgIkZvY3VzT24iLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlNdXRhdGlvbk9ic2VydmVyIiwgIm1ha2VNdXRhdGlvbk9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aU91dHNpZGVDbGlja0RldGVjdG9yIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVBvcG92ZXJBcnJvd1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJBcnJvdyIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlQYW5lbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYW5lbCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyUGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyUGFuZWwiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3JlZiIsICJfcmVmMiIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmMyIsICJfcmVmNCIsICJfaW5oZXJpdHMiLCAiRXVpUG9wb3ZlciIsICJfY3JlYXRlU3VwZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfcmVmNSIsICJkdXJhdGlvbk1hdGNoIiwgImRlbGF5TWF0Y2giLCAiX3JlZjYiLCAicG9zaXRpb24iLCAiX29iamVjdFNwcmVhZCIsICJub2RlIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpbml0aWFsRm9jdXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZFNlbGVjdCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZCIsICJfcmVmIiwgImljb24iLCAib3V0ZXJPbkNsaWNrIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJUWVBFUyIsICJFdWlDaGVja2JveCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaXNWYWxpZEVsZW1lbnQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRmxleEl0ZW0iLCAiX3JlZiIsICJDb21wb25lbnQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpY29uIiwgIl9pbmhlcml0cyIsICJFdWlGb3JtQ29udHJvbExheW91dEljb25zIiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtTGFiZWwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlGb3JtQ29udHJvbExheW91dCIsICJyZW5kZXIiLCAiaWNvbiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJzdHJpbmciLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aVZhbGlkYXRhYmxlQ29udHJvbCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlGaWVsZFNlYXJjaCIsICJvblNlYXJjaCIsICJvbkNoYW5nZSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1FcnJvclRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtSGVscFRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRElTUExBWVMiLCAiRXVpRm9ybVJvdyIsICJfcmVmIiwgInJlbmRlciIsICJfcmVmMiIsICJjbGFzc05hbWVzIiwgImhlbHBUZXh0IiwgImVycm9yIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlDb250ZXh0TWVudUl0ZW0iLCAicmVuZGVyIiwgImljb24iLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiU0laRVMiLCAiRXVpQ29udGV4dE1lbnVQYW5lbCIsICJub2RlIiwgInJlbmRlciIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlIb3Jpem9udGFsUnVsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhvcml6b250YWxSdWxlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3dpdGNoIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpc0VxdWFsIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhhc05hdGl2ZVBlcmZvcm1hbmNlTm93IiwgInBlcmZvcm1hbmNlIiwgIm5vdyIsICJEYXRlIiwgImNhbmNlbFRpbWVvdXQiLCAidGltZW91dElEIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImlkIiwgInJlcXVlc3RUaW1lb3V0IiwgImNhbGxiYWNrIiwgImRlbGF5IiwgInN0YXJ0IiwgInRpY2siLCAiY2FsbCIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAic2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgInJlY2FsY3VsYXRlIiwgImRpdiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgInN0eWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyIsICJib2R5IiwgImFwcGVuZENoaWxkIiwgIm9mZnNldFdpZHRoIiwgImNsaWVudFdpZHRoIiwgInJlbW92ZUNoaWxkIiwgImNhY2hlZFJUTFJlc3VsdCIsICJnZXRSVExPZmZzZXRUeXBlIiwgIm91dGVyRGl2IiwgIm91dGVyU3R5bGUiLCAiZGlyZWN0aW9uIiwgImlubmVyRGl2IiwgImlubmVyU3R5bGUiLCAic2Nyb2xsTGVmdCIsICJkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQiLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwgImRlZmF1bHRJdGVtS2V5IiwgImluZGV4IiwgImRhdGEiLCAiZGV2V2FybmluZ3NEaXJlY3Rpb24iLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJfcmVmIiwgImdldEl0ZW1PZmZzZXQiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgImdldEl0ZW1TaXplIiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAicHJvcHMiLCAiX2luc3RhbmNlUHJvcHMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfb3V0ZXJSZWYiLCAiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCAic3RhdGUiLCAiaW5zdGFuY2UiLCAiaXNTY3JvbGxpbmciLCAic2Nyb2xsRGlyZWN0aW9uIiwgInNjcm9sbE9mZnNldCIsICJpbml0aWFsU2Nyb2xsT2Zmc2V0IiwgInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsICJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsICJtZW1vaXplT25lIiwgIm92ZXJzY2FuU3RhcnRJbmRleCIsICJvdmVyc2NhblN0b3BJbmRleCIsICJ2aXNpYmxlU3RhcnRJbmRleCIsICJ2aXNpYmxlU3RvcEluZGV4IiwgIm9uSXRlbXNSZW5kZXJlZCIsICJfY2FsbE9uU2Nyb2xsIiwgIm9uU2Nyb2xsIiwgIl9nZXRJdGVtU3R5bGUiLCAiZGlyZWN0aW9uIiwgIml0ZW1TaXplIiwgImxheW91dCIsICJpdGVtU3R5bGVDYWNoZSIsICJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCAic3R5bGUiLCAiaGFzT3duUHJvcGVydHkiLCAib2Zmc2V0IiwgInNpemUiLCAiaXNIb3Jpem9udGFsIiwgImlzUnRsIiwgIm9mZnNldEhvcml6b250YWwiLCAicG9zaXRpb24iLCAibGVmdCIsICJ1bmRlZmluZWQiLCAicmlnaHQiLCAidG9wIiwgImhlaWdodCIsICJ3aWR0aCIsICJfIiwgIl9fIiwgIl9fXyIsICJfb25TY3JvbGxIb3Jpem9udGFsIiwgImV2ZW50IiwgImN1cnJlbnRUYXJnZXQiLCAiY2xpZW50V2lkdGgiLCAic2Nyb2xsTGVmdCIsICJzY3JvbGxXaWR0aCIsICJzZXRTdGF0ZSIsICJwcmV2U3RhdGUiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJNYXRoIiwgIm1heCIsICJtaW4iLCAiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCAiX29uU2Nyb2xsVmVydGljYWwiLCAiY2xpZW50SGVpZ2h0IiwgInNjcm9sbEhlaWdodCIsICJzY3JvbGxUb3AiLCAiX291dGVyUmVmU2V0dGVyIiwgInJlZiIsICJvdXRlclJlZiIsICJjdXJyZW50IiwgImNhbmNlbFRpbWVvdXQiLCAicmVxdWVzdFRpbWVvdXQiLCAiX3Jlc2V0SXNTY3JvbGxpbmciLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwgIm5leHRQcm9wcyIsICJ2YWxpZGF0ZVNoYXJlZFByb3BzIiwgInNjcm9sbFRvIiwgInNjcm9sbFRvSXRlbSIsICJhbGlnbiIsICJpdGVtQ291bnQiLCAic2Nyb2xsYmFyU2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgImNvbXBvbmVudERpZE1vdW50IiwgIl9jYWxsUHJvcHNDYWxsYmFja3MiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgInJlbmRlciIsICJjaGlsZHJlbiIsICJjbGFzc05hbWUiLCAiaW5uZXJSZWYiLCAiaW5uZXJFbGVtZW50VHlwZSIsICJpbm5lclRhZ05hbWUiLCAiaXRlbURhdGEiLCAiaXRlbUtleSIsICJvdXRlckVsZW1lbnRUeXBlIiwgIm91dGVyVGFnTmFtZSIsICJ1c2VJc1Njcm9sbGluZyIsICJfZ2V0UmFuZ2VUb1JlbmRlciIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJpdGVtcyIsICJwdXNoIiwgImNyZWF0ZUVsZW1lbnQiLCAia2V5IiwgImVzdGltYXRlZFRvdGFsU2l6ZSIsICJvdmVyZmxvdyIsICJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsICJ3aWxsQ2hhbmdlIiwgInBvaW50ZXJFdmVudHMiLCAib3ZlcnNjYW5Db3VudCIsICJvdmVyc2NhbkJhY2t3YXJkIiwgIm92ZXJzY2FuRm9yd2FyZCIsICJQdXJlQ29tcG9uZW50IiwgImRlZmF1bHRQcm9wcyIsICJfcmVmMiIsICJfcmVmMyIsICJoYXMiLCAiYWRkIiwgImNvbnNvbGUiLCAid2FybiIsICJFcnJvciIsICJGaXhlZFNpemVMaXN0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiZ2V0SXRlbU9mZnNldCIsICJfcmVmIiwgImluZGV4IiwgIml0ZW1TaXplIiwgImdldEl0ZW1TaXplIiwgIl9yZWYyIiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJfcmVmMyIsICJpdGVtQ291bnQiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiX3JlZjQiLCAiYWxpZ24iLCAic2Nyb2xsT2Zmc2V0IiwgImluc3RhbmNlUHJvcHMiLCAic2Nyb2xsYmFyU2l6ZSIsICJkaXJlY3Rpb24iLCAiaGVpZ2h0IiwgImxheW91dCIsICJ3aWR0aCIsICJpc0hvcml6b250YWwiLCAic2l6ZSIsICJsYXN0SXRlbU9mZnNldCIsICJNYXRoIiwgIm1heCIsICJtYXhPZmZzZXQiLCAibWluIiwgIm1pbk9mZnNldCIsICJtaWRkbGVPZmZzZXQiLCAicm91bmQiLCAiY2VpbCIsICJmbG9vciIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgIl9yZWY1IiwgIm9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgIl9yZWY2IiwgInN0YXJ0SW5kZXgiLCAibnVtVmlzaWJsZUl0ZW1zIiwgImluaXRJbnN0YW5jZVByb3BzIiwgInByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJfcmVmNyIsICJwcm9jZXNzIiwgIkVycm9yIiwgInNoYWxsb3dEaWZmZXJzIiwgInByZXYiLCAibmV4dCIsICJhdHRyaWJ1dGUiLCAiYXJlRXF1YWwiLCAicHJldlByb3BzIiwgIm5leHRQcm9wcyIsICJwcmV2U3R5bGUiLCAic3R5bGUiLCAicHJldlJlc3QiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2V4Y2x1ZGVkIiwgIm5leHRTdHlsZSIsICJuZXh0UmVzdCIsICJfZXhjbHVkZWQyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlPdmVybGF5TWFzayIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAibGlzdGVuZXIiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVNwYWNlclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTcGFjZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpTWFya1N0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTWFyayIsICJfcmVmIiwgInVzZVRoZW1lIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhpZ2hsaWdodCIsICJtYXRjaCIsICJnZXRIaWdodGxpZ2h0V29yZHMiLCAibWF0Y2hlcyIsICJmaWxsSW5DaHVua3MiLCAiYXBwZW5kIiwgIkV1aUhpZ2hsaWdodCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ29tYm9Cb3hUaXRsZSIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlGaWx0ZXJTZWxlY3RJdGVtIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgImljb24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94T3B0aW9uc0xpc3QiLCAiX3JlZiIsICJyZW5kZXIiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJwb3NpdGlvbiIsICJkZWxpbWl0ZXIiLCAiaGlnaGxpZ2h0U2VhcmNoVmFsdWUiLCAic2VhcmNoVmFsdWUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZmxhdHRlbk9wdGlvbkdyb3VwcyIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAib2JqZWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94UGlsbCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94SW5wdXQiLCAicmVuZGVyIiwgImFwcGVuZCIsICJvbkNsaWNrIiwgImljb24iLCAiY2xhc3NOYW1lcyIsICJBdXRvc2l6ZUlucHV0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiZGVsaW1pdGVyIiwgInJlbmRlciIsICJvbkJsdXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uQnV0dG9uIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leHRlbmRzIiwgIlRZUEVTIiwgIkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uIiwgIl9yZWYiLCAic2FmZUNsaWNrIiwgImNsYXNzTmFtZXMiLCAiYWNjZXNzaWJsZVBhZ2VTdHJpbmciLCAiUHJvcFR5cGVzIiwgIlBhZ2luYXRpb25CdXR0b25XcmFwcGVyIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVBhZ2luYXRpb24iLCAiX3JlZiIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFiIiwgIl9yZWYiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9pbmhlcml0cyIsICJFdWlUYWJiZWRDb250ZW50IiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX3JlZiIsICJfZXh0ZW5kcyIsICJfZXhjbHVkZWQyIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aURlbGF5UmVuZGVyIiwgIl9yZWYiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlIZWFsdGhTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIZWFsdGgiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlJbWFnZUJ1dHRvblN0eWxlcyIsICJfcmVmIiwgImV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlQnV0dG9uIiwgIl9yZWYiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlJbWFnZUNhcHRpb25TdHlsZXMiLCAiX3JlZiIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiRXVpSW1hZ2VXcmFwcGVyIiwgIl9yZWYiLCAib3BlbkZ1bGxTY3JlZW4iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImV1aUltYWdlU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzIiwgImV1aUltYWdlRnVsbFNjcmVlbiIsICJzaXplIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJjbG9zZUZ1bGxTY3JlZW4iLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIlNJWkVTIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlIiwgIl9yZWYiLCAic2l6ZSIsICJTSVpFUyIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJFdWlVdGlsaXR5Q2xhc3NlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ2FjaGVQcm92aWRlciIsICJfcmVmIiwgIlJlYWN0IiwgImlzRW1vdGlvbkNhY2hlT2JqZWN0IiwgIkV1aVByb3ZpZGVyIiwgIl9yZWYiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ4IiwgImRpc3BsYXlUb0NsYXNzTmFtZU1hcCIsICJFdWlUcmVlVmlldyIsICJfcmVmIiwgIl9yZWYyIiwgIm5vZGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAicmVmIiwgIl9yZWYzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImdldFNlYXJjaGFibGVMYWJlbCIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlU2VhcmNoIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZU1lc3NhZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAicGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCIsICJQQURESU5HX1NJWkVTIiwgIkV1aVNlbGVjdGFibGVMaXN0SXRlbSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpU2VsZWN0YWJsZUxpc3QiLCAiX3JlZiIsICJhcHBlbmQiLCAib3B0aW9uIiwgIl9yZWYyIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIl9yZWYzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aVNlbGVjdGFibGUiLCAiX3JlZiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiaW5pdGlhbFNlYXJjaFZhbHVlIiwgInJlbmRlciIsICJfcmVmMiIsICJfcmVmMyIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImdldEFjY2Vzc2libGVOYW1lIiwgImlucHV0UmVmIiwgIm5vZGUiLCAiX2RlZmF1bHQiLCAiX3JlZjQiLCAicmVzdWx0c0xlbmd0aCIsICJfcmVmNSIsICJfcmVmNiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUJvZHkiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyZXNvbHZlV2lkdGhBc1N0eWxlIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXJDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ2VsbENvbnRlbnRzIiwgIl9yZWYiLCAiRXVpVGFibGVIZWFkZXJDZWxsIiwgIl9yZWYyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJNb2JpbGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVTb3J0TW9iaWxlSXRlbSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUYWJsZVNvcnRNb2JpbGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAib25LZXlVcCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgImNoaWxkcmVuIiwgIlJlYWN0IiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkNvbGxhcHNlZEl0ZW1BY3Rpb25zIiwgInJlbmRlciIsICJvbkZvY3VzIiwgImNvbnRyb2xzIiwgImljb24iLCAiaXNTdHJpbmciLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiRGVmYXVsdEl0ZW1BY3Rpb24iLCAiX3JlZiIsICJpc1N0cmluZyIsICJpY29uIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkN1c3RvbUl0ZW1BY3Rpb24iLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpc0N1c3RvbUl0ZW1BY3Rpb24iLCAiRXhwYW5kZWRJdGVtQWN0aW9ucyIsICJfcmVmIiwgIlJlYWN0IiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImRlZmF1bHRzIiwgIlBhZ2luYXRpb25CYXIiLCAiX3JlZiIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAicmVuZGVyIiwgImlzRnVuY3Rpb24iLCAiY29sdW1uIiwgIl9yZWYiLCAiX3JlZjIiLCAieCIsICJFdWlCYXNpY1RhYmxlIiwgImxpc3RlbmVyIiwgIm9uQ2hhbmdlIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJudW0iLCAic2VsZWN0aW9uIiwgImFjdGlvbkVuYWJsZWQiLCAiaXRlbSIsICJfcmVmOCIsICJQcm9wVHlwZXMiLCAiU3Vic2NyaWJhYmxlIiwgIngiLCAibm9vcCIsICJhc0FycmF5IiwgImlzUGxhaW5PYmplY3QiLCAiYiIsICJjb3B5IiwgIkZvY3VzTWFuYWdlciIsICJvbkZvY3VzIiwgImxpc3RlbmVyIiwgIk9ubGluZU1hbmFnZXIiLCAibGlzdGVuZXIiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJwYXVzZSIsICJydW4iLCAiY2FuY2VsRm4iLCAiTm90aWZ5TWFuYWdlciIsICJRdWVyeSIsICJub29wIiwgImlzU3RhbGUiLCAib25Gb2N1cyIsICJ4IiwgImZldGNoIiwgImdldCIsICJmZXRjaEZuIiwgImdldERlZmF1bHRTdGF0ZSIsICJyZWR1Y2VyIiwgIlF1ZXJ5Q2FjaGUiLCAieCIsICJnZXQiLCAib25Gb2N1cyIsICJNdXRhdGlvbiIsICJ4IiwgIm5vb3AiLCAiTXV0YXRpb25DYWNoZSIsICJ4IiwgIm9uRm9jdXMiLCAibm9vcCIsICJidWlsZE5ld1BhZ2VzIiwgInBhcmFtIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicHJvbWlzZSIsICJfbG9vcCIsICJpIiwgIlF1ZXJ5Q2xpZW50IiwgIl9yZWYiLCAiX3JlZjIiLCAibm9vcCIsICJfcmVmMyIsICJ4IiwgIlF1ZXJ5T2JzZXJ2ZXIiLCAidHJhY2tQcm9wIiwgImdldCIsICJmZXRjaCIsICJub29wIiwgIngiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJSZWFjdERPTSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJsb2dnZXIiLCAibG9nZ2VyIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUNsaWVudCIsICJRdWVyeUNsaWVudFByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ4IiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInZpc0NvbG9ycyIsICJzZWFyY2hWYWx1ZSIsICJSZWFjdCIsICJ4IiwgIm9wdGlvbnMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJuIiwgIm1hdGNoIiwgImIiLCAibjIiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJlbnRpdHkiLCAiUmVhY3QiLCAia2V5cyIsICJwcm9wZXJ0eSIsICJkb21haW5zIiwgInJhbmdlcyIsICJpcmkiLCAidiIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAicmVxdWlyZV9vYmplY3RfYXNzaWduIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgImhhc093blByb3BlcnR5IiwgInByb3BJc0VudW1lcmFibGUiLCAidG9PYmplY3QiLCAidmFsIiwgInNob3VsZFVzZU5hdGl2ZSIsICJ0ZXN0MSIsICJ0ZXN0MiIsICJpIiwgIm9yZGVyMiIsICJuIiwgInRlc3QzIiwgImxldHRlciIsICJ0YXJnZXQiLCAic291cmNlIiwgImZyb20iLCAidG8iLCAic3ltYm9scyIsICJzIiwgImtleSIsICJyZXF1aXJlX3JlYWN0X3Byb2R1Y3Rpb25fbWluIiwgImwiLCAicCIsICJxIiwgInIiLCAidCIsICJ1IiwgInYiLCAidyIsICJ4IiwgInkiLCAiYSIsICJ6IiwgImIiLCAiYyIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsICJKIiwgImUiLCAiZCIsICJrIiwgImgiLCAiZyIsICJmIiwgIm0iLCAiSyIsICJMIiwgImVzY2FwZSIsICJNIiwgIk4iLCAiTyIsICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAicmVxdWlyZV9yZWFjdCIsICJyZXF1aXJlX3NjaGVkdWxlcl9wcm9kdWN0aW9uX21pbiIsICJVIiwgIlYiLCAiVyIsICJyZXF1aXJlX3NjaGVkdWxlciIsICJyZXF1aXJlX3JlYWN0X2RvbV9wcm9kdWN0aW9uX21pbiIsICJhYSIsICJiYSIsICJjYSIsICJkYSIsICJlYSIsICJmYSIsICJoYSIsICJpYSIsICJqYSIsICJrYSIsICJsYSIsICJtYSIsICJuYSIsICJvYSIsICJwYSIsICJxYSIsICJyYSIsICJzYSIsICJ0YSIsICJ1YSIsICJ3YSIsICJ4YSIsICJ5YSIsICJ6YSIsICJBYSIsICJCYSIsICJDYSIsICJEYSIsICJFYSIsICJGYSIsICJHYSIsICJIYSIsICJJYSIsICJKYSIsICJLYSIsICJMYSIsICJNYSIsICJOYSIsICJPYSIsICJQYSIsICJRYSIsICJSYSIsICJTYSIsICJUYSIsICJVYSIsICJWYSIsICJXYSIsICJYYSIsICJZYSIsICJaYSIsICIkYSIsICJhYiIsICJiYiIsICJjYiIsICJkYiIsICJlYiIsICJmYiIsICJnYiIsICJoYiIsICJpYiIsICJqYiIsICJrYiIsICJsYiIsICJtYiIsICJuYiIsICJvYiIsICJwYiIsICJxYiIsICJyYiIsICJzYiIsICJ0YiIsICJ1YiIsICJ2YiIsICJ3YiIsICJ4YiIsICJ5YiIsICJ6YiIsICJBYiIsICJCYiIsICJDYiIsICJEYiIsICJFYiIsICJGYiIsICJHYiIsICJIYiIsICJJYiIsICJKYiIsICJLYiIsICJMYiIsICJNYiIsICJOYiIsICJPYiIsICJQYiIsICJRYiIsICJSYiIsICJTYiIsICJUYiIsICJVYiIsICJWYiIsICJXYiIsICJYYiIsICJZYiIsICJaYiIsICIkYiIsICJhYyIsICJiYyIsICJjYyIsICJkYyIsICJlYyIsICJmYyIsICJnYyIsICJoYyIsICJpYyIsICJqYyIsICJrYyIsICJsYyIsICJtYyIsICJuYyIsICJvYyIsICJwYyIsICJxYyIsICJyYyIsICJzYyIsICJ0YyIsICJ1YyIsICJ2YyIsICJ3YyIsICJ4YyIsICJ5YyIsICJ6YyIsICJBYyIsICJCYyIsICJDYyIsICJEYyIsICJFYyIsICJGYyIsICJHYyIsICJIYyIsICJJYyIsICJKYyIsICJLYyIsICJMYyIsICJNYyIsICJOYyIsICJPYyIsICJQYyIsICJRYyIsICJSYyIsICJTYyIsICJUYyIsICJVYyIsICJWYyIsICJXYyIsICJYYyIsICJZYyIsICJaYyIsICIkYyIsICJhZCIsICJiZCIsICJjZCIsICJkZCIsICJlZCIsICJmZCIsICJnZCIsICJoZCIsICJpZCIsICJqZCIsICJrZCIsICJsZCIsICJtZCIsICJuZCIsICJvZCIsICJwZCIsICJxZCIsICJyZCIsICJzZCIsICJ0ZCIsICJ1ZCIsICJ2ZCIsICJ3ZCIsICJ4ZCIsICJ5ZCIsICJBZCIsICJ6ZCIsICJCZCIsICJDZCIsICJEZCIsICJFZCIsICJGZCIsICJHZCIsICJIZCIsICJJZCIsICJKZCIsICJLZCIsICJMZCIsICJNZCIsICJOZCIsICJPZCIsICJQZCIsICJRZCIsICJSZCIsICJTZCIsICJUZCIsICJVZCIsICJWZCIsICJXZCIsICJYZCIsICJZZCIsICJaZCIsICIkZCIsICJhZSIsICJiZSIsICJjZSIsICJkZSIsICJlZSIsICJmZSIsICJnZSIsICJoZSIsICJpZSIsICJqZSIsICJrZSIsICJsZSIsICJtZSIsICJuZSIsICJvZSIsICJwZSIsICJxZSIsICJyZSIsICJzZSIsICJ0ZSIsICJ1ZSIsICJ2ZSIsICJ3ZSIsICJ5ZSIsICJ6ZSIsICJ4ZSIsICJBZSIsICJCZSIsICJDZSIsICJEZSIsICJFZSIsICJGZSIsICJHZSIsICJIZSIsICJJZSIsICJKZSIsICJLZSIsICJMZSIsICJNZSIsICJOZSIsICJPZSIsICJQZSIsICJRZSIsICJSZSIsICJTZSIsICJUZSIsICJVZSIsICJWZSIsICJXZSIsICJYZSIsICJZZSIsICJaZSIsICIkZSIsICJhZiIsICJiZiIsICJjZiIsICJkZiIsICJlZiIsICJmZiIsICJnZiIsICJoZiIsICJqZiIsICJrZiIsICJsZiIsICJtZiIsICJuZiIsICJvZiIsICJwZiIsICJxZiIsICJyZiIsICJzZiIsICJ0ZiIsICJ1ZiIsICJ2ZiIsICJ3ZiIsICJ4ZiIsICJ5ZiIsICJ6ZiIsICJBZiIsICJCZiIsICJDZiIsICJEZiIsICJFZiIsICJGZiIsICJHZiIsICJIZiIsICJJZiIsICJKZiIsICJLZiIsICJMZiIsICJNZiIsICJOZiIsICJPZiIsICJQZiIsICJRZiIsICJSZiIsICJTZiIsICJUZiIsICJVZiIsICJWZiIsICJXZiIsICJYZiIsICJZZiIsICJaZiIsICIkZiIsICJhZyIsICJiZyIsICJjZyIsICJkZyIsICJlZyIsICJmZyIsICJnZyIsICJoZyIsICJpZyIsICJqZyIsICJrZyIsICJsZyIsICJtZyIsICJuZyIsICJvZyIsICJwZyIsICJxZyIsICJyZyIsICJzZyIsICJ0ZyIsICJ1ZyIsICJ2ZyIsICJ3ZyIsICJ4ZyIsICJ5ZyIsICJ6ZyIsICJBZyIsICJCZyIsICJDZyIsICJEZyIsICJFZyIsICJGZyIsICJHZyIsICJLZyIsICJIZyIsICJJZyIsICJKZyIsICJMZyIsICJNZyIsICJOZyIsICJPZyIsICJQZyIsICJRZyIsICJSZyIsICJTZyIsICJUZyIsICJVZyIsICJWZyIsICJXZyIsICJYZyIsICJZZyIsICJaZyIsICIkZyIsICJhaCIsICJiaCIsICJjaCIsICJkaCIsICJlaCIsICJmaCIsICJnaCIsICJoaCIsICJpaCIsICJqaCIsICJraCIsICJsaCIsICJtaCIsICJuaCIsICJvaCIsICJwaCIsICJxaCIsICJyaCIsICJzaCIsICJ0aCIsICJ1aCIsICJ2aCIsICJ3aCIsICJ4aCIsICJ5aCIsICJ6aCIsICJBaCIsICJCaCIsICJDaCIsICJEaCIsICJFaCIsICJGaCIsICJHaCIsICJIaCIsICJJaCIsICJKaCIsICJLaCIsICJMaCIsICJNaCIsICJOaCIsICJPaCIsICJQaCIsICJRaCIsICJSaCIsICJTaCIsICJUaCIsICJVaCIsICJWaCIsICJXaCIsICJYaCIsICJZaCIsICJaaCIsICIkaCIsICJhaSIsICJiaSIsICJjaSIsICJkaSIsICJlaSIsICJmaSIsICJnaSIsICJoaSIsICJpaSIsICJqaSIsICJraSIsICJsaSIsICJtaSIsICJuaSIsICJvaSIsICJwaSIsICJxaSIsICJyaSIsICJzaSIsICJ0aSIsICJ1aSIsICJ2aSIsICJ3aSIsICJ4aSIsICJ5aSIsICJ6aSIsICJBaSIsICJCaSIsICJDaSIsICJEaSIsICJFaSIsICJGaSIsICJHaSIsICJIaSIsICJJaSIsICJKaSIsICJLaSIsICJMaSIsICJNaSIsICJOaSIsICJPaSIsICJQaSIsICJRaSIsICJSaSIsICJTaSIsICJUaSIsICJVaSIsICJWaSIsICJXaSIsICJYaSIsICJZaSIsICJaaSIsICIkaSIsICJhaiIsICJiaiIsICJjaiIsICJkaiIsICJlaiIsICJmaiIsICJnaiIsICJoaiIsICJpaiIsICJqaiIsICJraiIsICJsaiIsICJtaiIsICJuaiIsICJvaiIsICJwaiIsICJYIiwgIlkiLCAicWoiLCAicmoiLCAic2oiLCAidGoiLCAidWoiLCAidmoiLCAid2oiLCAiWiIsICJ4aiIsICJ5aiIsICJ6aiIsICJBaiIsICJCaiIsICJDaiIsICJEaiIsICJFaiIsICJGaiIsICJHaiIsICJIaiIsICJJaiIsICJKaiIsICJLaiIsICJMaiIsICJNaiIsICJOaiIsICJPaiIsICJQaiIsICJRaiIsICJSaiIsICJTaiIsICJUaiIsICJVaiIsICJWaiIsICJXaiIsICJYaiIsICJZaiIsICJaaiIsICJ2YSIsICJhayIsICJiayIsICJjayIsICJkayIsICJlayIsICJmayIsICJnayIsICJoayIsICJpayIsICJqayIsICJrayIsICJsayIsICJtayIsICJuayIsICJvayIsICJwayIsICJxayIsICJyayIsICJzayIsICJ0ayIsICJ1ayIsICJ2ayIsICJ3ayIsICJ4ayIsICJ5ayIsICJyZXF1aXJlX3JlYWN0X2RvbSIsICJjaGVja0RDRSIsICJlcnIiLCAicmVxdWlyZV91c2Vfc3luY19leHRlcm5hbF9zdG9yZV9zaGltX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfc2hpbSIsICJyZXF1aXJlX3dpdGhfc2VsZWN0b3JfcHJvZHVjdGlvbl9taW4iLCAicmVxdWlyZV93aXRoX3NlbGVjdG9yIiwgIl9leHRlbmRzIiwgImluaXRfZXh0ZW5kcyIsICJfX2VzbU1pbiIsICJyZXF1aXJlX3JlYWN0X2lzX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfcmVhY3RfaXMiLCAicmVxdWlyZV9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19janMiLCAicmVhY3RJcyIsICJSRUFDVF9TVEFUSUNTIiwgIktOT1dOX1NUQVRJQ1MiLCAiRk9SV0FSRF9SRUZfU1RBVElDUyIsICJNRU1PX1NUQVRJQ1MiLCAiVFlQRV9TVEFUSUNTIiwgImdldFN0YXRpY3MiLCAiY29tcG9uZW50IiwgImRlZmluZVByb3BlcnR5IiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgImdldFByb3RvdHlwZU9mIiwgIm9iamVjdFByb3RvdHlwZSIsICJob2lzdE5vblJlYWN0U3RhdGljcyIsICJ0YXJnZXRDb21wb25lbnQiLCAic291cmNlQ29tcG9uZW50IiwgImJsYWNrbGlzdCIsICJpbmhlcml0ZWRDb21wb25lbnQiLCAia2V5cyIsICJ0YXJnZXRTdGF0aWNzIiwgInNvdXJjZVN0YXRpY3MiLCAiZGVzY3JpcHRvciIsICJyZXF1aXJlX211bHRpbWFwIiwgIm1hcEVhY2giLCAibWFwIiwgIm9wZXJhdGlvbiIsICJuZXh0IiwgIk11bHRpbWFwIiwgIm1hcEN0b3IiLCAiaXRlbSIsICJpdGVyYWJsZSIsICJzZWxmIiwgImFyZ3MiLCAiZW50cnkiLCAiaWR4IiwgImhhc0tleSIsICJtYWtlSXRlcmF0b3IiLCAidmFscyIsICJpdGVyIiwgInRvdGFsIiwgInZhbHVlIiwgInNhZmFyaU5leHQiLCAiaXRlcmF0b3IiLCAibmV4dEluZGV4IiwgInNoZWV0Rm9yVGFnIiwgInRhZyIsICJjcmVhdGVTdHlsZUVsZW1lbnQiLCAib3B0aW9ucyIsICJTdHlsZVNoZWV0IiwgImluaXRfZW1vdGlvbl9zaGVldF9icm93c2VyX2VzbSIsICJfdGhpcyIsICJiZWZvcmUiLCAiX3Byb3RvIiwgIm5vZGVzIiwgInJ1bGUiLCAiaXNJbXBvcnRSdWxlIiwgInNoZWV0IiwgIk1TIiwgIk1PWiIsICJXRUJLSVQiLCAiQ09NTUVOVCIsICJSVUxFU0VUIiwgIkRFQ0xBUkFUSU9OIiwgIklNUE9SVCIsICJLRVlGUkFNRVMiLCAiTEFZRVIiLCAiaW5pdF9FbnVtIiwgImhhc2giLCAibGVuZ3RoIiwgImNoYXJhdCIsICJ0cmltIiwgIm1hdGNoIiwgInBhdHRlcm4iLCAicmVwbGFjZSIsICJyZXBsYWNlbWVudCIsICJpbmRleG9mIiwgInNlYXJjaCIsICJpbmRleCIsICJzdWJzdHIiLCAiYmVnaW4iLCAiZW5kIiwgInN0cmxlbiIsICJzaXplb2YiLCAiYXBwZW5kIiwgImFycmF5IiwgImNvbWJpbmUiLCAiY2FsbGJhY2siLCAiYWJzIiwgImFzc2lnbiIsICJpbml0X1V0aWxpdHkiLCAibm9kZSIsICJyb290IiwgInBhcmVudCIsICJ0eXBlIiwgInByb3BzIiwgImNoaWxkcmVuIiwgImxpbmUiLCAiY29sdW1uIiwgImNvcHkiLCAiY2hhciIsICJjaGFyYWN0ZXIiLCAicHJldiIsICJwb3NpdGlvbiIsICJjaGFyYWN0ZXJzIiwgInBlZWsiLCAiY2FyZXQiLCAic2xpY2UiLCAidG9rZW4iLCAiYWxsb2MiLCAiZGVhbGxvYyIsICJkZWxpbWl0IiwgImRlbGltaXRlciIsICJ3aGl0ZXNwYWNlIiwgImVzY2FwaW5nIiwgImNvdW50IiwgImNvbW1lbnRlciIsICJpZGVudGlmaWVyIiwgImluaXRfVG9rZW5pemVyIiwgImNvbXBpbGUiLCAicGFyc2UiLCAicnVsZXMiLCAicnVsZXNldHMiLCAicHNldWRvIiwgInBvaW50cyIsICJkZWNsYXJhdGlvbnMiLCAib2Zmc2V0IiwgImF0cnVsZSIsICJwcm9wZXJ0eSIsICJwcmV2aW91cyIsICJ2YXJpYWJsZSIsICJzY2FubmluZyIsICJhbXBlcnNhbmQiLCAicmVmZXJlbmNlIiwgImNvbW1lbnQiLCAiZGVjbGFyYXRpb24iLCAicnVsZXNldCIsICJwb3N0IiwgInNpemUiLCAiaiIsICJpbml0X1BhcnNlciIsICJpbml0X1ByZWZpeGVyIiwgInNlcmlhbGl6ZSIsICJvdXRwdXQiLCAic3RyaW5naWZ5IiwgImVsZW1lbnQiLCAiaW5pdF9TZXJpYWxpemVyIiwgIm1pZGRsZXdhcmUiLCAiY29sbGVjdGlvbiIsICJydWxlc2hlZXQiLCAiaW5pdF9NaWRkbGV3YXJlIiwgImluaXRfc3R5bGlzIiwgIndlYWtNZW1vaXplIiwgImluaXRfZW1vdGlvbl93ZWFrX21lbW9pemVfZXNtIiwgImZ1bmMiLCAiY2FjaGUiLCAiYXJnIiwgInJldCIsICJtZW1vaXplIiwgImZuIiwgImluaXRfZW1vdGlvbl9tZW1vaXplX2VzbSIsICJlbW90aW9uX2NhY2hlX2Jyb3dzZXJfZXNtX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiY3JlYXRlQ2FjaGUiLCAicHJlZml4IiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJ0b1J1bGVzIiwgImdldFJ1bGVzIiwgImZpeGVkRWxlbWVudHMiLCAiY29tcGF0IiwgInJlbW92ZUxhYmVsIiwgInByZWZpeGVyIiwgImRlZmF1bHRTdHlsaXNQbHVnaW5zIiwgImluaXRfZW1vdGlvbl9jYWNoZV9icm93c2VyX2VzbSIsICJwYXJzZWQiLCAiaXNJbXBsaWNpdFJ1bGUiLCAicGFyZW50UnVsZXMiLCAic3NyU3R5bGVzIiwgImRhdGFFbW90aW9uQXR0cmlidXRlIiwgInN0eWxpc1BsdWdpbnMiLCAiaW5zZXJ0ZWQiLCAiY29udGFpbmVyIiwgIm5vZGVzVG9IeWRyYXRlIiwgImF0dHJpYiIsICJfaW5zZXJ0IiwgIm9tbmlwcmVzZW50UGx1Z2lucyIsICJjdXJyZW50U2hlZXQiLCAiZmluYWxpemluZ1BsdWdpbnMiLCAic2VyaWFsaXplciIsICJzdHlsaXMiLCAic3R5bGVzIiwgInNlbGVjdG9yIiwgInNlcmlhbGl6ZWQiLCAic2hvdWxkQ2FjaGUiLCAiaW1wb3J0X2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzIiwgImluaXRfZW1vdGlvbl9yZWFjdF9pc29sYXRlZF9obnJzX2Jyb3dzZXJfZXNtIiwgImhvaXN0Tm9uUmVhY3RTdGF0aWNzJDEiLCAiZ2V0UmVnaXN0ZXJlZFN0eWxlcyIsICJyZWdpc3RlcmVkIiwgInJlZ2lzdGVyZWRTdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJyYXdDbGFzc05hbWUiLCAiY2xhc3NOYW1lIiwgImlzQnJvd3NlciIsICJyZWdpc3RlclN0eWxlcyIsICJpbnNlcnRTdHlsZXMiLCAiaW5pdF9lbW90aW9uX3V0aWxzX2Jyb3dzZXJfZXNtIiwgImlzU3RyaW5nVGFnIiwgImN1cnJlbnQiLCAibXVybXVyMiIsICJzdHIiLCAibGVuIiwgImluaXRfZW1vdGlvbl9oYXNoX2VzbSIsICJ1bml0bGVzc0tleXMiLCAiaW5pdF9lbW90aW9uX3VuaXRsZXNzX2VzbSIsICJoYW5kbGVJbnRlcnBvbGF0aW9uIiwgIm1lcmdlZFByb3BzIiwgImludGVycG9sYXRpb24iLCAiY3Vyc29yIiwgImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCAicHJldmlvdXNDdXJzb3IiLCAicmVzdWx0IiwgIm1hdGNoZWQiLCAicmVwbGFjZWQiLCAiY2FjaGVkIiwgIm9iaiIsICJzdHJpbmciLCAiX2tleSIsICJpc1Byb2Nlc3NhYmxlVmFsdWUiLCAicHJvY2Vzc1N0eWxlTmFtZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJfaSIsICJpbnRlcnBvbGF0ZWQiLCAiaHlwaGVuYXRlUmVnZXgiLCAiYW5pbWF0aW9uUmVnZXgiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJsYWJlbFBhdHRlcm4iLCAic2VyaWFsaXplU3R5bGVzIiwgImluaXRfZW1vdGlvbl9zZXJpYWxpemVfYnJvd3Nlcl9lc20iLCAic3R5bGVOYW1lIiwgInAxIiwgInAyIiwgInN0cmluZ01vZGUiLCAic3RyaW5ncyIsICJzb3VyY2VNYXAiLCAiaWRlbnRpZmllck5hbWUiLCAibmFtZSIsICJSZWFjdCIsICJzeW5jRmFsbGJhY2siLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgInVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2siLCAidXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIiwgImluaXRfZW1vdGlvbl91c2VfaW5zZXJ0aW9uX2VmZmVjdF93aXRoX2ZhbGxiYWNrc19icm93c2VyX2VzbSIsICJjcmVhdGUiLCAid2l0aFRoZW1lIiwgIkNvbXBvbmVudCIsICJjb21wb25lbnROYW1lIiwgInJlbmRlciIsICJyZWYiLCAidGhlbWUiLCAiVGhlbWVDb250ZXh0IiwgIldpdGhUaGVtZSIsICJpbXBvcnRfcmVhY3QiLCAiaGFzT3duIiwgIkVtb3Rpb25DYWNoZUNvbnRleHQiLCAiQ2FjaGVQcm92aWRlciIsICJfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUiLCAid2l0aEVtb3Rpb25DYWNoZSIsICJ1c2VUaGVtZSIsICJnZXRUaGVtZSIsICJjcmVhdGVDYWNoZVdpdGhUaGVtZSIsICJUaGVtZVByb3ZpZGVyIiwgInR5cGVQcm9wTmFtZSIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIkVtb3Rpb24iLCAiRW1vdGlvbiQxIiwgImluaXRfZW1vdGlvbl9lbGVtZW50XzQzYzZmZWEwX2Jyb3dzZXJfZXNtIiwgIm91dGVyVGhlbWUiLCAibWVyZ2VkVGhlbWUiLCAibmV3UHJvcHMiLCAibGFiZWwiLCAiX3JlZiIsICJjc3NQcm9wIiwgIldyYXBwZWRDb21wb25lbnQiLCAibGFiZWxGcm9tU3RhY2siLCAiZW1vdGlvbl9yZWFjdF9icm93c2VyX2VzbV9leHBvcnRzIiwgIkNsYXNzTmFtZXMiLCAiR2xvYmFsIiwgImpzeCIsICJjc3MiLCAia2V5ZnJhbWVzIiwgIl9sZW4iLCAibWVyZ2UiLCAiY2xhc3NuYW1lcyIsICJpbml0X2Vtb3Rpb25fcmVhY3RfYnJvd3Nlcl9lc20iLCAiYXJnc0xlbmd0aCIsICJjcmVhdGVFbGVtZW50QXJnQXJyYXkiLCAic2VyaWFsaXplZE5hbWVzIiwgInNlcmlhbGl6ZWRTdHlsZXMiLCAic2hlZXRSZWYiLCAicmVoeWRyYXRpbmciLCAic2hlZXRSZWZDdXJyZW50IiwgImluc2VydGFibGUiLCAiY2xzIiwgInRvQWRkIiwgInNlcmlhbGl6ZWRBcnIiLCAiaGFzUmVuZGVyZWQiLCAiY3giLCAiX2xlbjIiLCAiX2tleTIiLCAiY29udGVudCIsICJlbGUiLCAicmVxdWlyZV9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCAiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsICJyZXF1aXJlX2Zvcm1hdE11aUVycm9yTWVzc2FnZSIsICJmb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiY29kZSIsICJ1cmwiLCAiX2Zvcm1hdE11aUVycm9yTWVzc2FnZSIsICJyZWFjdFByb3BzUmVnZXgiLCAiaXNQcm9wVmFsaWQiLCAiaW5pdF9lbW90aW9uX2lzX3Byb3BfdmFsaWRfZXNtIiwgInByb3AiLCAidGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIiwgInRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCIsICJnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AiLCAiY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyIsICJjcmVhdGVTdHlsZWQiLCAiaW5pdF9lbW90aW9uX3N0eWxlZF9iYXNlX2Jyb3dzZXJfZXNtIiwgImlzUmVhbCIsICJzaG91bGRGb3J3YXJkUHJvcCIsICJvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AiLCAicHJvcE5hbWUiLCAiYmFzZVRhZyIsICJ0YXJnZXRDbGFzc05hbWUiLCAiZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wIiwgInNob3VsZFVzZUFzIiwgIlN0eWxlZCIsICJGaW5hbFRhZyIsICJjbGFzc0ludGVycG9sYXRpb25zIiwgImZpbmFsU2hvdWxkRm9yd2FyZFByb3AiLCAibmV4dFRhZyIsICJuZXh0T3B0aW9ucyIsICJlbW90aW9uX3N0eWxlZF9icm93c2VyX2VzbV9leHBvcnRzIiwgIm5ld1N0eWxlZCIsICJ0YWdzIiwgImluaXRfZW1vdGlvbl9zdHlsZWRfYnJvd3Nlcl9lc20iLCAidGFnTmFtZSIsICJyZXF1aXJlX1JlYWN0UHJvcFR5cGVzU2VjcmV0IiwgIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwgInJlcXVpcmVfZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zIiwgImVtcHR5RnVuY3Rpb24iLCAiZW1wdHlGdW5jdGlvbldpdGhSZXNldCIsICJzaGltIiwgImxvY2F0aW9uIiwgInByb3BGdWxsTmFtZSIsICJzZWNyZXQiLCAiZ2V0U2hpbSIsICJSZWFjdFByb3BUeXBlcyIsICJyZXF1aXJlX3Byb3BfdHlwZXMiLCAiUmVhY3RJcyIsICJ0aHJvd09uRGlyZWN0QWNjZXNzIiwgInJlcXVpcmVfcmVhY3RfanN4X3J1bnRpbWVfcHJvZHVjdGlvbl9taW4iLCAicmVxdWlyZV9qc3hfcnVudGltZSIsICJyZXF1aXJlX1N0eWxlZEVuZ2luZVByb3ZpZGVyIiwgIlN0eWxlZEVuZ2luZVByb3ZpZGVyIiwgIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwgIl9wcm9wVHlwZXMiLCAiX3JlYWN0MiIsICJfY2FjaGUiLCAiX2pzeFJ1bnRpbWUiLCAiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwgImluamVjdEZpcnN0IiwgIl9TdHlsZWRFbmdpbmVQcm92aWRlciIsICJyZXF1aXJlX0dsb2JhbFN0eWxlcyIsICJHbG9iYWxTdHlsZXMiLCAiaXNFbXB0eSIsICJkZWZhdWx0VGhlbWUiLCAiZ2xvYmFsU3R5bGVzIiwgInRoZW1lSW5wdXQiLCAiX0dsb2JhbFN0eWxlcyIsICJyZXF1aXJlX25vZGUiLCAiX3JlYWN0IiwgInN0eWxlZCIsICJfc3R5bGVkIiwgImludGVybmFsX3Byb2Nlc3NTdHlsZXMiLCAicHJvY2Vzc29yIiwgInJlcXVpcmVfZXh0ZW5kcyIsICJyZXF1aXJlX2RlZXBtZXJnZSIsICJkZWVwbWVyZ2UiLCAiaXNQbGFpbk9iamVjdCIsICJfZXh0ZW5kczIiLCAicHJvdG90eXBlIiwgImRlZXBDbG9uZSIsICJfZXhwb3J0TmFtZXMiLCAiX2RlZXBtZXJnZSIsICJ2MSIsICJyZXF1aXJlX2NhcGl0YWxpemUiLCAiY2FwaXRhbGl6ZSIsICJfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiIsICJfY2FwaXRhbGl6ZSIsICJyZXF1aXJlX2dldERpc3BsYXlOYW1lIiwgImdldERpc3BsYXlOYW1lIiwgImdldEZ1bmN0aW9uTmFtZSIsICJfcmVhY3RJcyIsICJmbk5hbWVNYXRjaFJlZ2V4IiwgImdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZSIsICJmYWxsYmFjayIsICJnZXRXcmFwcGVkTmFtZSIsICJvdXRlclR5cGUiLCAiaW5uZXJUeXBlIiwgIndyYXBwZXJOYW1lIiwgImZ1bmN0aW9uTmFtZSIsICJfZ2V0RGlzcGxheU5hbWUiLCAicmVxdWlyZV9jbGFtcCIsICJjbGFtcCIsICJtaW4iLCAibWF4IiwgIl9kZWZhdWx0IiwgIl9jbGFtcCIsICJyZXF1aXJlX21lcmdlIiwgImFjYyIsICJyZXF1aXJlX3Jlc3BvbnNpdmVQcm9wVHlwZSIsICJyZXNwb25zaXZlUHJvcFR5cGUiLCAicmVxdWlyZV9icmVha3BvaW50cyIsICJjb21wdXRlQnJlYWtwb2ludHNCYXNlIiwgImNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCIsICJoYW5kbGVCcmVha3BvaW50cyIsICJtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciIsICJyZW1vdmVVbnVzZWRCcmVha3BvaW50cyIsICJyZXNvbHZlQnJlYWtwb2ludFZhbHVlcyIsICJfbWVyZ2UiLCAidmFsdWVzIiwgImRlZmF1bHRCcmVha3BvaW50cyIsICJwcm9wVmFsdWUiLCAic3R5bGVGcm9tUHJvcFZhbHVlIiwgInRoZW1lQnJlYWtwb2ludHMiLCAiYnJlYWtwb2ludCIsICJtZWRpYUtleSIsICJjc3NLZXkiLCAiYnJlYWtwb2ludHMiLCAic3R5bGVGdW5jdGlvbiIsICJuZXdTdHlsZUZ1bmN0aW9uIiwgImJhc2UiLCAiZXh0ZW5kZWQiLCAiYnJlYWtwb2ludHNJbnB1dCIsICJfYnJlYWtwb2ludHNJbnB1dCRrZXkiLCAiYnJlYWtwb2ludFN0eWxlS2V5IiwgImJyZWFrcG9pbnRLZXlzIiwgInN0eWxlIiwgImJyZWFrcG9pbnRPdXRwdXQiLCAiZW1wdHlCcmVha3BvaW50cyIsICJtZXJnZWRPdXRwdXQiLCAiYnJlYWtwb2ludFZhbHVlcyIsICJicmVha3BvaW50c0tleXMiLCAiY3VzdG9tQmFzZSIsICJyZXF1aXJlX3N0eWxlIiwgImdldFBhdGgiLCAiZ2V0U3R5bGVWYWx1ZSIsICJfcmVzcG9uc2l2ZVByb3BUeXBlIiwgIl9icmVha3BvaW50cyIsICJwYXRoIiwgImNoZWNrVmFycyIsICJ0aGVtZU1hcHBpbmciLCAidHJhbnNmb3JtIiwgInByb3BWYWx1ZUZpbmFsIiwgInVzZXJWYWx1ZSIsICJjc3NQcm9wZXJ0eSIsICJ0aGVtZUtleSIsICJyZXF1aXJlX21lbW9pemUiLCAicmVxdWlyZV9zcGFjaW5nIiwgImNyZWF0ZVVuYXJ5U3BhY2luZyIsICJjcmVhdGVVbmFyeVVuaXQiLCAiZ2V0U3R5bGVGcm9tUHJvcFZhbHVlIiwgImdldFZhbHVlIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgIl9zdHlsZSIsICJfbWVtb2l6ZSIsICJwcm9wZXJ0aWVzIiwgImRpcmVjdGlvbnMiLCAiYWxpYXNlcyIsICJnZXRDc3NQcm9wZXJ0aWVzIiwgImRpcmVjdGlvbiIsICJkaXIiLCAibWFyZ2luS2V5cyIsICJwYWRkaW5nS2V5cyIsICJzcGFjaW5nS2V5cyIsICJkZWZhdWx0VmFsdWUiLCAiX2dldFBhdGgiLCAidGhlbWVTcGFjaW5nIiwgInRyYW5zZm9ybWVyIiwgInRyYW5zZm9ybWVkIiwgImNzc1Byb3BlcnRpZXMiLCAicmVzb2x2ZUNzc1Byb3BlcnR5IiwgInNwYWNpbmciLCAicmVxdWlyZV9jb21wb3NlIiwgImNvbXBvc2UiLCAiaGFuZGxlcnMiLCAicmVxdWlyZV9ib3JkZXJzIiwgImJvcmRlclRyYW5zZm9ybSIsICJfY29tcG9zZSIsICJfc3BhY2luZyIsICJjcmVhdGVCb3JkZXJTdHlsZSIsICJib3JkZXIiLCAiYm9yZGVyVG9wIiwgImJvcmRlclJpZ2h0IiwgImJvcmRlckJvdHRvbSIsICJib3JkZXJMZWZ0IiwgImJvcmRlckNvbG9yIiwgImJvcmRlclRvcENvbG9yIiwgImJvcmRlclJpZ2h0Q29sb3IiLCAiYm9yZGVyQm90dG9tQ29sb3IiLCAiYm9yZGVyTGVmdENvbG9yIiwgIm91dGxpbmUiLCAib3V0bGluZUNvbG9yIiwgImJvcmRlclJhZGl1cyIsICJib3JkZXJzIiwgInJlcXVpcmVfY3NzR3JpZCIsICJnYXAiLCAiY29sdW1uR2FwIiwgInJvd0dhcCIsICJncmlkQ29sdW1uIiwgImdyaWRSb3ciLCAiZ3JpZEF1dG9GbG93IiwgImdyaWRBdXRvQ29sdW1ucyIsICJncmlkQXV0b1Jvd3MiLCAiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsICJncmlkVGVtcGxhdGVSb3dzIiwgImdyaWRUZW1wbGF0ZUFyZWFzIiwgImdyaWRBcmVhIiwgImdyaWQiLCAicmVxdWlyZV9wYWxldHRlIiwgInBhbGV0dGVUcmFuc2Zvcm0iLCAiY29sb3IiLCAiYmdjb2xvciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAicGFsZXR0ZSIsICJyZXF1aXJlX3NpemluZyIsICJzaXppbmdUcmFuc2Zvcm0iLCAid2lkdGgiLCAibWF4V2lkdGgiLCAiX3Byb3BzJHRoZW1lIiwgIl9wcm9wcyR0aGVtZTIiLCAibWluV2lkdGgiLCAiaGVpZ2h0IiwgIm1heEhlaWdodCIsICJtaW5IZWlnaHQiLCAic2l6ZVdpZHRoIiwgInNpemVIZWlnaHQiLCAiYm94U2l6aW5nIiwgInNpemluZyIsICJyZXF1aXJlX2RlZmF1bHRTeENvbmZpZyIsICJfYm9yZGVycyIsICJfY3NzR3JpZCIsICJfcGFsZXR0ZSIsICJfc2l6aW5nIiwgImRlZmF1bHRTeENvbmZpZyIsICJyZXF1aXJlX3N0eWxlRnVuY3Rpb25TeCIsICJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3giLCAiX2RlZmF1bHRTeENvbmZpZyIsICJvYmplY3RzSGF2ZVNhbWVLZXlzIiwgIm9iamVjdHMiLCAiYWxsS2V5cyIsICJvYmplY3QiLCAidW5pb24iLCAiY2FsbElmRm4iLCAibWF5YmVGbiIsICJnZXRUaGVtZVZhbHVlIiwgImNvbmZpZyIsICJzdHlsZUZ1bmN0aW9uU3giLCAiX3RoZW1lJHVuc3RhYmxlX3N4Q29uIiwgInN4IiwgInRyYXZlcnNlIiwgInN4SW5wdXQiLCAic3hPYmplY3QiLCAic3R5bGVLZXkiLCAiYnJlYWtwb2ludHNWYWx1ZXMiLCAicmVxdWlyZV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImV4Y2x1ZGVkIiwgInNvdXJjZUtleXMiLCAicmVxdWlyZV9leHRlbmRTeFByb3AiLCAiZXh0ZW5kU3hQcm9wIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiIsICJfZXhjbHVkZWQiLCAic3BsaXRQcm9wcyIsICJfcHJvcHMkdGhlbWUkdW5zdGFibGUiLCAiaW5TeCIsICJvdGhlciIsICJzeXN0ZW1Qcm9wcyIsICJvdGhlclByb3BzIiwgImZpbmFsU3giLCAiX3N0eWxlRnVuY3Rpb25TeCIsICJfZXh0ZW5kU3hQcm9wIiwgInJlcXVpcmVfY3JlYXRlQnJlYWtwb2ludHMiLCAiY3JlYXRlQnJlYWtwb2ludHMiLCAic29ydEJyZWFrcG9pbnRzVmFsdWVzIiwgImJyZWFrcG9pbnRzQXNBcnJheSIsICJicmVha3BvaW50MSIsICJicmVha3BvaW50MiIsICJ1bml0IiwgInN0ZXAiLCAic29ydGVkVmFsdWVzIiwgInVwIiwgImRvd24iLCAiYmV0d2VlbiIsICJzdGFydCIsICJlbmRJbmRleCIsICJvbmx5IiwgIm5vdCIsICJrZXlJbmRleCIsICJyZXF1aXJlX3NoYXBlIiwgInNoYXBlIiwgInJlcXVpcmVfY3JlYXRlU3BhY2luZyIsICJjcmVhdGVTcGFjaW5nIiwgInNwYWNpbmdJbnB1dCIsICJhcmdzSW5wdXQiLCAiYXJndW1lbnQiLCAicmVxdWlyZV9hcHBseVN0eWxlcyIsICJhcHBseVN0eWxlcyIsICJyZXF1aXJlX2NyZWF0ZVRoZW1lIiwgIl9jcmVhdGVCcmVha3BvaW50cyIsICJfc2hhcGUiLCAiX2NyZWF0ZVNwYWNpbmciLCAiX2FwcGx5U3R5bGVzIiwgImNyZWF0ZVRoZW1lIiwgInBhbGV0dGVJbnB1dCIsICJzaGFwZUlucHV0IiwgIm11aVRoZW1lIiwgIl9jcmVhdGVUaGVtZSIsICJyZXF1aXJlX2NvbG9yTWFuaXB1bGF0b3IiLCAiYWxwaGEiLCAiYmxlbmQiLCAiZGFya2VuIiwgImRlY29tcG9zZUNvbG9yIiwgImVtcGhhc2l6ZSIsICJnZXRDb250cmFzdFJhdGlvIiwgImdldEx1bWluYW5jZSIsICJoZXhUb1JnYiIsICJoc2xUb1JnYiIsICJsaWdodGVuIiwgInByaXZhdGVfc2FmZUFscGhhIiwgInByaXZhdGVfc2FmZURhcmtlbiIsICJwcml2YXRlX3NhZmVFbXBoYXNpemUiLCAicHJpdmF0ZV9zYWZlTGlnaHRlbiIsICJyZWNvbXBvc2VDb2xvciIsICJyZ2JUb0hleCIsICJjbGFtcFdyYXBwZXIiLCAiY29sb3JzIiwgImludFRvSGV4IiwgImludCIsICJoZXgiLCAibWFya2VyIiwgImNvbG9yU3BhY2UiLCAiY29sb3JDaGFubmVsIiwgImRlY29tcG9zZWRDb2xvciIsICJwcml2YXRlX3NhZmVDb2xvckNoYW5uZWwiLCAid2FybmluZyIsICJyZ2IiLCAiZm9yZWdyb3VuZCIsICJiYWNrZ3JvdW5kIiwgImx1bUEiLCAibHVtQiIsICJjb2VmZmljaWVudCIsICJvdmVybGF5IiwgIm9wYWNpdHkiLCAiZ2FtbWEiLCAiYmxlbmRDaGFubmVsIiwgIm8iLCAib3ZlcmxheUNvbG9yIiwgInJlcXVpcmVfY3JlYXRlU3R5bGVkIiwgIl9zdHlsZWRFbmdpbmUiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgInN5c3RlbURlZmF1bHRUaGVtZSIsICJsb3dlcmNhc2VGaXJzdExldHRlciIsICJyZXNvbHZlVGhlbWUiLCAidGhlbWVJZCIsICJkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIiLCAic2xvdCIsICJwcm9jZXNzU3R5bGVBcmciLCAiY2FsbGFibGVTdHlsZSIsICJvd25lclN0YXRlIiwgInJlc29sdmVkU3R5bGVzQXJnIiwgInJlc29sdmVkU3R5bGUiLCAidmFyaWFudHMiLCAidmFyaWFudCIsICJpc01hdGNoIiwgImlucHV0IiwgInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsICJzbG90U2hvdWxkRm9yd2FyZFByb3AiLCAic3lzdGVtU3giLCAiaW5wdXRPcHRpb25zIiwgImNvbXBvbmVudFNsb3QiLCAiaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciIsICJpbnB1dFNraXBTeCIsICJvdmVycmlkZXNSZXNvbHZlciIsICJza2lwVmFyaWFudHNSZXNvbHZlciIsICJza2lwU3giLCAic2hvdWxkRm9yd2FyZFByb3BPcHRpb24iLCAiZGVmYXVsdFN0eWxlZFJlc29sdmVyIiwgInRyYW5zZm9ybVN0eWxlQXJnIiwgInN0eWxlc0FyZyIsICJtdWlTdHlsZWRSZXNvbHZlciIsICJzdHlsZUFyZyIsICJleHByZXNzaW9ucyIsICJ0cmFuc2Zvcm1lZFN0eWxlQXJnIiwgImV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSIsICJzdHlsZU92ZXJyaWRlcyIsICJyZXNvbHZlZFN0eWxlT3ZlcnJpZGVzIiwgInNsb3RLZXkiLCAic2xvdFN0eWxlIiwgIl90aGVtZSRjb21wb25lbnRzIiwgInRoZW1lVmFyaWFudHMiLCAibnVtT2ZDdXN0b21GbnNBcHBsaWVkIiwgInBsYWNlaG9sZGVycyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9zaGltIiwgImltcG9ydF93aXRoX3NlbGVjdG9yIiwgImRlZmF1bHROb29wQmF0Y2giLCAiYmF0Y2giLCAic2V0QmF0Y2giLCAibmV3QmF0Y2giLCAiZ2V0QmF0Y2giLCAiQ29udGV4dEtleSIsICJnVCIsICJnZXRDb250ZXh0IiwgIl9nVCRDb250ZXh0S2V5IiwgImNvbnRleHRNYXAiLCAicmVhbENvbnRleHQiLCAiUmVhY3RSZWR1eENvbnRleHQiLCAiY3JlYXRlUmVkdXhDb250ZXh0SG9vayIsICJjb250ZXh0IiwgInVzZVJlZHV4Q29udGV4dCIsICJub3RJbml0aWFsaXplZCIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciIsICJpbml0aWFsaXplVXNlU2VsZWN0b3IiLCAicmVmRXF1YWxpdHkiLCAiY3JlYXRlU2VsZWN0b3JIb29rIiwgImVxdWFsaXR5Rm5Pck9wdGlvbnMiLCAiZXF1YWxpdHlGbiIsICJzdGFiaWxpdHlDaGVjayIsICJub29wQ2hlY2siLCAic3RvcmUiLCAic3Vic2NyaXB0aW9uIiwgImdldFNlcnZlclN0YXRlIiwgImdsb2JhbFN0YWJpbGl0eUNoZWNrIiwgImdsb2JhbE5vb3BDaGVjayIsICJmaXJzdFJ1biIsICJ3cmFwcGVkU2VsZWN0b3IiLCAic3RhdGUiLCAic2VsZWN0ZWQiLCAiZmluYWxTdGFiaWxpdHlDaGVjayIsICJ0b0NvbXBhcmUiLCAiZmluYWxOb29wQ2hlY2siLCAic2VsZWN0ZWRTdGF0ZSIsICJ1c2VTZWxlY3RvciIsICJpbXBvcnRfcmVhY3RfaXMiLCAiY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uIiwgImZpcnN0IiwgImxhc3QiLCAibGlzdGVuZXIiLCAibGlzdGVuZXJzIiwgImlzU3Vic2NyaWJlZCIsICJudWxsTGlzdGVuZXJzIiwgImNyZWF0ZVN1YnNjcmlwdGlvbiIsICJwYXJlbnRTdWIiLCAidW5zdWJzY3JpYmUiLCAic3Vic2NyaXB0aW9uc0Ftb3VudCIsICJzZWxmU3Vic2NyaWJlZCIsICJhZGROZXN0ZWRTdWIiLCAidHJ5U3Vic2NyaWJlIiwgImNsZWFudXBMaXN0ZW5lciIsICJyZW1vdmVkIiwgInRyeVVuc3Vic2NyaWJlIiwgIm5vdGlmeU5lc3RlZFN1YnMiLCAiaGFuZGxlQ2hhbmdlV3JhcHBlciIsICJ0cnlTdWJzY3JpYmVTZWxmIiwgInRyeVVuc3Vic2NyaWJlU2VsZiIsICJjYW5Vc2VET00iLCAidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsICJpbml0aWFsaXplQ29ubmVjdCIsICJQcm92aWRlciIsICJzZXJ2ZXJTdGF0ZSIsICJjb250ZXh0VmFsdWUiLCAicHJldmlvdXNTdGF0ZSIsICJQcm92aWRlcl9kZWZhdWx0IiwgImNyZWF0ZVN0b3JlSG9vayIsICJ1c2VTdG9yZSIsICJjcmVhdGVEaXNwYXRjaEhvb2siLCAidXNlRGlzcGF0Y2giLCAidXNlQXBwRGlzcGF0Y2giLCAidXNlQXBwU2VsZWN0b3IiLCAiZGllIiwgImVycm9yIiwgIm1zZyIsICJFcnJvciIsICJqb2luIiwgImlzRHJhZnQiLCAiRFJBRlRfU1RBVEUiLCAiaXNEcmFmdGFibGUiLCAicHJvdG8iLCAiT2JqZWN0IiwgIkN0b3IiLCAiY2FsbCIsICJjb25zdHJ1Y3RvciIsICJGdW5jdGlvbiIsICJ0b1N0cmluZyIsICJvYmplY3RDdG9yU3RyaW5nIiwgIkFycmF5IiwgImlzQXJyYXkiLCAiRFJBRlRBQkxFIiwgIl92YWx1ZSRjb25zdHJ1Y3RvciIsICJpc01hcCIsICJpc1NldCIsICJlYWNoIiwgImVudW1lcmFibGVPbmx5IiwgImdldEFyY2h0eXBlIiwgIm93bktleXMiLCAiZm9yRWFjaCIsICJ0aGluZyIsICJ0eXBlXyIsICJoYXMiLCAiZ2V0IiwgInNldCIsICJwcm9wT3JPbGRWYWx1ZSIsICJhZGQiLCAiaXMiLCAiaGFzTWFwIiwgIk1hcCIsICJoYXNTZXQiLCAiU2V0IiwgImxhdGVzdCIsICJjb3B5XyIsICJiYXNlXyIsICJzaGFsbG93Q29weSIsICJkZXNjcmlwdG9ycyIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwgImRlc2MiLCAid3JpdGFibGUiLCAiY29uZmlndXJhYmxlIiwgImVudW1lcmFibGUiLCAiZnJlZXplIiwgImRlZXAiLCAiaXNGcm96ZW4iLCAiY2xlYXIiLCAiZGVsZXRlIiwgImRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucyIsICJnZXRQbHVnaW4iLCAicGx1Z2luS2V5IiwgInBsdWdpbiIsICJwbHVnaW5zIiwgImxvYWRQbHVnaW4iLCAiaW1wbGVtZW50YXRpb24iLCAiZ2V0Q3VycmVudFNjb3BlIiwgImN1cnJlbnRTY29wZSIsICJ1c2VQYXRjaGVzSW5TY29wZSIsICJzY29wZSIsICJwYXRjaExpc3RlbmVyIiwgInBhdGNoZXNfIiwgImludmVyc2VQYXRjaGVzXyIsICJwYXRjaExpc3RlbmVyXyIsICJyZXZva2VTY29wZSIsICJsZWF2ZVNjb3BlIiwgImRyYWZ0c18iLCAicmV2b2tlRHJhZnQiLCAicGFyZW50XyIsICJlbnRlclNjb3BlIiwgImltbWVyIiwgImltbWVyXyIsICJjYW5BdXRvRnJlZXplXyIsICJ1bmZpbmFsaXplZERyYWZ0c18iLCAiZHJhZnQiLCAicmV2b2tlXyIsICJyZXZva2VkXyIsICJwcm9jZXNzUmVzdWx0IiwgImJhc2VEcmFmdCIsICJpc1JlcGxhY2VkIiwgInVzZVByb3hpZXNfIiwgIndpbGxGaW5hbGl6ZUVTNV8iLCAibW9kaWZpZWRfIiwgImZpbmFsaXplIiwgIm1heWJlRnJlZXplIiwgImdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyIsICJOT1RISU5HIiwgInVuZGVmaW5lZCIsICJyb290U2NvcGUiLCAiY2hpbGRWYWx1ZSIsICJmaW5hbGl6ZVByb3BlcnR5IiwgInNjb3BlXyIsICJmaW5hbGl6ZWRfIiwgImRyYWZ0XyIsICJyZXN1bHRFYWNoIiwgImdlbmVyYXRlUGF0Y2hlc18iLCAicGFyZW50U3RhdGUiLCAidGFyZ2V0T2JqZWN0IiwgInJvb3RQYXRoIiwgInRhcmdldElzU2V0IiwgInJlcyIsICJhc3NpZ25lZF8iLCAiY29uY2F0IiwgImF1dG9GcmVlemVfIiwgImdldERlc2NyaXB0b3JGcm9tUHJvdG8iLCAibWFya0NoYW5nZWQiLCAicHJlcGFyZUNvcHkiLCAiY3JlYXRlUHJveHkiLCAicHJveHlNYXBfIiwgInByb3h5U2V0XyIsICJpc01hbnVhbF8iLCAidHJhcHMiLCAib2JqZWN0VHJhcHMiLCAiYXJyYXlUcmFwcyIsICJQcm94eSIsICJyZXZvY2FibGUiLCAicmV2b2tlIiwgInByb3h5IiwgImNyZWF0ZUVTNVByb3h5XyIsICJwdXNoIiwgImN1cnJlbnRJbXBsIiwgImFyY2hUeXBlIiwgImhhc0NoYW5nZXNfIiwgImNvcHlIZWxwZXIiLCAiZW5hYmxlRVM1IiwgInByb3h5UHJvcGVydHkiLCAidGhpcyIsICJtYXJrQ2hhbmdlc1N3ZWVwIiwgImRyYWZ0cyIsICJoYXNBcnJheUNoYW5nZXMiLCAiaGFzT2JqZWN0Q2hhbmdlcyIsICJiYXNlVmFsdWUiLCAiYmFzZUlzRHJhZnQiLCAiYXNzZXJ0VW5yZXZva2VkIiwgIkpTT04iLCAibWFya0NoYW5nZXNSZWN1cnNpdmVseSIsICJNYXRoIiwgImhhc1N5bWJvbCIsICJTeW1ib2wiLCAiaGFzUHJveGllcyIsICJSZWZsZWN0IiwgImZvciIsICJfZGVzYyRnZXQiLCAiY3VycmVudFN0YXRlIiwgIk51bWJlciIsICJpc05hTiIsICJkZWxldGVQcm9wZXJ0eSIsICJvd25lciIsICJzZXRQcm90b3R5cGVPZiIsICJhcmd1bWVudHMiLCAiYXBwbHkiLCAiSW1tZXIiLCAicmVjaXBlIiwgImRlZmF1bHRCYXNlIiwgInByb2R1Y2UiLCAiX3RoaXMyIiwgImhhc0Vycm9yIiwgIlByb21pc2UiLCAidGhlbiIsICJpcCIsICJwcm9kdWNlV2l0aFBhdGNoZXMiLCAicGF0Y2hlcyIsICJpbnZlcnNlUGF0Y2hlcyIsICJuZXh0U3RhdGUiLCAidXNlUHJveGllcyIsICJzZXRVc2VQcm94aWVzIiwgImF1dG9GcmVlemUiLCAic2V0QXV0b0ZyZWV6ZSIsICJjcmVhdGVEcmFmdCIsICJmaW5pc2hEcmFmdCIsICJhcHBseVBhdGNoZXMiLCAicGF0Y2giLCAib3AiLCAiYXBwbHlQYXRjaGVzSW1wbCIsICJhcHBseVBhdGNoZXNfIiwgImJpbmQiLCAiX3R5cGVvZiIsICJ0b1ByaW1pdGl2ZSIsICJ0b1Byb3BlcnR5S2V5IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0U3ByZWFkMiIsICJmb3JtYXRQcm9kRXJyb3JNZXNzYWdlIiwgIiQkb2JzZXJ2YWJsZSIsICJyYW5kb21TdHJpbmciLCAiQWN0aW9uVHlwZXMiLCAiY3JlYXRlU3RvcmUiLCAicmVkdWNlciIsICJwcmVsb2FkZWRTdGF0ZSIsICJlbmhhbmNlciIsICJfcmVmMiIsICJjdXJyZW50UmVkdWNlciIsICJjdXJyZW50TGlzdGVuZXJzIiwgIm5leHRMaXN0ZW5lcnMiLCAiaXNEaXNwYXRjaGluZyIsICJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwgImdldFN0YXRlIiwgInN1YnNjcmliZSIsICJkaXNwYXRjaCIsICJhY3Rpb24iLCAicmVwbGFjZVJlZHVjZXIiLCAibmV4dFJlZHVjZXIiLCAib2JzZXJ2YWJsZSIsICJvdXRlclN1YnNjcmliZSIsICJvYnNlcnZlciIsICJvYnNlcnZlU3RhdGUiLCAiYXNzZXJ0UmVkdWNlclNoYXBlIiwgInJlZHVjZXJzIiwgImluaXRpYWxTdGF0ZSIsICJjb21iaW5lUmVkdWNlcnMiLCAicmVkdWNlcktleXMiLCAiZmluYWxSZWR1Y2VycyIsICJmaW5hbFJlZHVjZXJLZXlzIiwgInVuZXhwZWN0ZWRLZXlDYWNoZSIsICJzaGFwZUFzc2VydGlvbkVycm9yIiwgIndhcm5pbmdNZXNzYWdlIiwgImhhc0NoYW5nZWQiLCAicHJldmlvdXNTdGF0ZUZvcktleSIsICJuZXh0U3RhdGVGb3JLZXkiLCAiYWN0aW9uVHlwZSIsICJmdW5jcyIsICJhcHBseU1pZGRsZXdhcmUiLCAibWlkZGxld2FyZXMiLCAiX2Rpc3BhdGNoIiwgIm1pZGRsZXdhcmVBUEkiLCAiY2hhaW4iLCAiY3JlYXRlVGh1bmtNaWRkbGV3YXJlIiwgImV4dHJhQXJndW1lbnQiLCAidGh1bmsiLCAiZXNfZGVmYXVsdCIsICJjb21wb3NlV2l0aERldlRvb2xzIiwgImRldlRvb2xzRW5oYW5jZXIiLCAibm9vcDIiLCAiYmFzZVByb3RvIiwgImNyZWF0ZUFjdGlvbiIsICJwcmVwYXJlQWN0aW9uIiwgImFjdGlvbkNyZWF0b3IiLCAicHJlcGFyZWQiLCAiX19zcHJlYWRWYWx1ZXMiLCAiTWlkZGxld2FyZUFycmF5IiwgIl9zdXBlciIsICJfX2V4dGVuZHMiLCAiYXJyIiwgIl9fc3ByZWFkQXJyYXkiLCAiRW5oYW5jZXJBcnJheSIsICJmcmVlemVEcmFmdGFibGUiLCAiaW1tZXJfZXNtX2RlZmF1bHQiLCAiaXNCb29sZWFuIiwgImN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUiLCAiZ2V0RGVmYXVsdE1pZGRsZXdhcmUiLCAiX2MiLCAiX2QiLCAiaW1tdXRhYmxlQ2hlY2siLCAiX2UiLCAic2VyaWFsaXphYmxlQ2hlY2siLCAiX2YiLCAiYWN0aW9uQ3JlYXRvckNoZWNrIiwgIm1pZGRsZXdhcmVBcnJheSIsICJpbW11dGFibGVPcHRpb25zIiwgInNlcmlhbGl6YWJsZU9wdGlvbnMiLCAiYWN0aW9uQ3JlYXRvck9wdGlvbnMiLCAiSVNfUFJPRFVDVElPTiIsICJjb25maWd1cmVTdG9yZSIsICJjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUiLCAiZGV2VG9vbHMiLCAiX2ciLCAiX2giLCAiZW5oYW5jZXJzIiwgInJvb3RSZWR1Y2VyIiwgImZpbmFsTWlkZGxld2FyZSIsICJtaWRkbGV3YXJlRW5oYW5jZXIiLCAiZmluYWxDb21wb3NlIiwgImRlZmF1bHRFbmhhbmNlcnMiLCAic3RvcmVFbmhhbmNlcnMiLCAiY29tcG9zZWRFbmhhbmNlciIsICJleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayIsICJidWlsZGVyQ2FsbGJhY2siLCAiYWN0aW9uc01hcCIsICJhY3Rpb25NYXRjaGVycyIsICJkZWZhdWx0Q2FzZVJlZHVjZXIiLCAiYnVpbGRlciIsICJ0eXBlT3JBY3Rpb25DcmVhdG9yIiwgIm1hdGNoZXIiLCAiaXNTdGF0ZUZ1bmN0aW9uIiwgImNyZWF0ZVJlZHVjZXIiLCAibWFwT3JCdWlsZGVyQ2FsbGJhY2siLCAiZmluYWxBY3Rpb25NYXRjaGVycyIsICJmaW5hbERlZmF1bHRDYXNlUmVkdWNlciIsICJnZXRJbml0aWFsU3RhdGUiLCAiZnJvemVuSW5pdGlhbFN0YXRlXzEiLCAiY2FzZVJlZHVjZXJzIiwgInJlZHVjZXIyIiwgImNyIiwgImNhc2VSZWR1Y2VyIiwgImdldFR5cGUyIiwgImFjdGlvbktleSIsICJjcmVhdGVTbGljZSIsICJyZWR1Y2VyTmFtZXMiLCAic2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUiLCAic2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUiLCAiYWN0aW9uQ3JlYXRvcnMiLCAicmVkdWNlck5hbWUiLCAibWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUiLCAicHJlcGFyZUNhbGxiYWNrIiwgImJ1aWxkUmVkdWNlciIsICJleHRyYVJlZHVjZXJzIiwgImZpbmFsQ2FzZVJlZHVjZXJzIiwgImFjdGlvbk1hdGNoZXJzXzEiLCAiX3JlZHVjZXIiLCAidXJsQWxwaGFiZXQiLCAibmFub2lkIiwgImNvbW1vblByb3BlcnRpZXMiLCAiUmVqZWN0V2l0aFZhbHVlIiwgInBheWxvYWQiLCAibWV0YSIsICJGdWxmaWxsV2l0aE1ldGEiLCAibWluaVNlcmlhbGl6ZUVycm9yIiwgInNpbXBsZUVycm9yIiwgImNvbW1vblByb3BlcnRpZXNfMSIsICJjcmVhdGVBc3luY1RodW5rIiwgImNyZWF0ZUFzeW5jVGh1bmsyIiwgInR5cGVQcmVmaXgiLCAicGF5bG9hZENyZWF0b3IiLCAiZnVsZmlsbGVkIiwgInJlcXVlc3RJZCIsICJfX3NwcmVhZFByb3BzIiwgInBlbmRpbmciLCAicmVqZWN0ZWQiLCAiZGlzcGxheWVkV2FybmluZyIsICJBQyIsICJjbGFzc18xIiwgImV4dHJhIiwgImFib3J0Q29udHJvbGxlciIsICJhYm9ydFJlYXNvbiIsICJzdGFydGVkIiwgImFib3J0IiwgInJlYXNvbiIsICJwcm9taXNlMiIsICJfX2FzeW5jIiwgImNvbmRpdGlvblJlc3VsdCIsICJfYSIsICJpc1RoZW5hYmxlIiwgImFib3J0ZWRQcm9taXNlIiwgIl8iLCAicmVqZWN0IiwgIl9iIiwgImZpbmFsQWN0aW9uIiwgImVycl8xIiwgInNraXBEaXNwYXRjaCIsICJ1bndyYXBSZXN1bHQiLCAidGFzayIsICJjb21wbGV0ZWQiLCAiY2FuY2VsbGVkIiwgInRhc2tDYW5jZWxsZWQiLCAidGFza0NvbXBsZXRlZCIsICJsaXN0ZW5lckNhbmNlbGxlZCIsICJsaXN0ZW5lckNvbXBsZXRlZCIsICJUYXNrQWJvcnRFcnJvciIsICJhbG0iLCAiYWRkTGlzdGVuZXIiLCAiY2xlYXJBbGxMaXN0ZW5lcnMiLCAicmVtb3ZlTGlzdGVuZXIiLCAicHJvbWlzZSIsICJxdWV1ZU1pY3JvdGFza1NoaW0iLCAiY3JlYXRlUXVldWVXaXRoVGltZXIiLCAidGltZW91dCIsICJub3RpZnkiLCAickFGIiwgInJlcXVlc3QiLCAicmVxUGFyYW1zIiwgImluaXQiLCAiYXBpVXJsIiwgIm1lc3NhZ2UiLCAiUGFnZSIsICJfUGFnZSIsICJwYWdlIiwgIm51bUVsZW1lbnRzIiwgInRvdGFsUGFnZXMiLCAidG90YWxFbGVtZW50cyIsICJlbGVtZW50cyIsICJmYWNldEZpZWxkc1RvQ291bnRzIiwgImdldFBhZ2luYXRlZCIsICJub3JtYWxpemUiLCAic3RyQXJyYXkiLCAicmVzdWx0QXJyYXkiLCAicGFydHMiLCAidXJsSm9pbiIsICJnZXRTdGF0cyIsICJyZWplY3RXaXRoVmFsdWUiLCAiZ2V0QmFubmVyVGV4dCIsICJob21lU2xpY2UiLCAiaG9tZVNsaWNlX2RlZmF1bHQiLCAiUmVpZmllZCIsICJfUmVpZmllZCIsICJheGlvbXMiLCAianNvbk5vZGUiLCAiYXhpb20iLCAiZXhpc3RpbmciLCAiTGlua2VkRW50aXRpZXMiLCAiX0xpbmtlZEVudGl0aWVzIiwgImxpbmtlZEVudGl0aWVzIiwgImlyaSIsICJsaW5rZWRFbnRpdHkiLCAiVGhpbmciLCAidHlwZXMiLCAiYXNBcnJheSIsICJsYWJlbHMiLCAiZGVmaW5pdGlvbiIsICJkZWYiLCAiRW50aXR5IiwgImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwgInN5bm9ueW1Qcm9wZXJ0aWVzIiwgImhpZXJhcmNoaWNhbFByb3BlcnRpZXMiLCAiYW5ub3RhdGlvblByZWRpY2F0ZXMiLCAicHJlZGljYXRlIiwgInBhcmVudElyaSIsICJoaWVyYXJjaGljYWxQYXJlbnRzIiwgIkNsYXNzIiwgIkluZGl2aWR1YWwiLCAicmRmVHlwZXMiLCAiUHJvcGVydHkiLCAidGhpbmdGcm9tSnNvblByb3BlcnRpZXMiLCAibWFwVG9BcGlQYXJhbXMiLCAic2VhcmNoUGFyYW1zIiwgInNlYXJjaFBhcmFtc0NvcHkiLCAibmV3S2V5IiwgInRvQ2FtZWwiLCAiJDEiLCAiT250b2xvZ3kiLCAibmFtZXMiLCAiZGVzY3JpcHRpb25zIiwgInZlcnNpb25JcmkiLCAidmVyc2lvbkZyb21EYXRlIiwgInZlcnNpb25Gcm9tTnVtYmVyIiwgImltcG9ydF9tdWx0aW1hcCIsICJleHRyYWN0RW50aXR5SGllcmFyY2h5IiwgImVudGl0aWVzIiwgImNoaWxkVG9QYXJlbnRSZWxhdGlvbnMiLCAidXJpVG9Ob2RlIiwgImVudGl0eSIsICJpc1RvcCIsICJwYXJlbnRSZWxhdGlvbiIsICJwYXJlbnRFbnRpdHkiLCAicGFyZW50UmVsYXRpb25Ub0NoaWxkIiwgImNoaWxkUmVsYXRpb25Ub1BhcmVudCIsICJyZWxhdGlvbiIsICJicmVha0N5Y2xlcyIsICJjdXJyZW50SXJpIiwgInZpc2l0ZWRJcmlzIiwgInBhcmVudFJlbGF0aW9ucyIsICJwYXJlbnRUb0NoaWxkUmVsYXRpb25zIiwgImNoaWxkSXJpIiwgInJlbGF0aW9ucyIsICJjcmVhdGVUcmVlRnJvbUVudGl0aWVzIiwgInByZWZlcnJlZFJvb3RzIiwgIm9udG9sb2d5IiwgInJvb3RFbnRpdGllcyIsICJwcmVmZXJyZWQiLCAiYWxsTm9kZXMiLCAibm9kZUNoaWxkcmVuIiwgImF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIiwgInJvb3RFbnRpdHkiLCAiY3JlYXRlVHJlZU5vZGUiLCAiZGVidWdOdW1JdGVyYXRpb25zIiwgImNoaWxkTm9kZXMiLCAidHJlZU5vZGUiLCAiY2hpbGROb2RlIiwgInJlc2V0VHJlZUNvbnRlbnQiLCAicmVzZXRUcmVlU2V0dGluZ3MiLCAiZW5hYmxlUHJlZmVycmVkUm9vdHMiLCAiZGlzYWJsZVByZWZlcnJlZFJvb3RzIiwgIm9wZW5Ob2RlIiwgImNsb3NlTm9kZSIsICJzaG93T2Jzb2xldGUiLCAiaGlkZU9ic29sZXRlIiwgInNob3dTaWJsaW5ncyIsICJoaWRlU2libGluZ3MiLCAic2hvd0NvdW50cyIsICJoaWRlQ291bnRzIiwgImdldE9udG9sb2d5IiwgIm9udG9sb2d5SWQiLCAibGFuZyIsICJvbnRvbG9neVByb3BlcnRpZXMiLCAiZ2V0RW50aXR5V2l0aFR5cGUiLCAiZW50aXR5VHlwZSIsICJlbnRpdHlJcmkiLCAiYXBpU2VhcmNoUGFyYW1zIiwgImRvdWJsZUVuY29kZWRUZXJtVXJpIiwgImVudGl0eUpzb25Qcm9wZXJ0aWVzIiwgInJlc3VsdHMiLCAiZ2V0RW50aXR5IiwgImdldENsYXNzSW5zdGFuY2VzIiwgImNsYXNzSXJpIiwgImdldE9udG9sb2dpZXMiLCAicm93c1BlclBhZ2UiLCAiZ2V0RW50aXRpZXMiLCAiZ2V0QW5jZXN0b3JzIiwgInNob3dPYnNvbGV0ZUVuYWJsZWQiLCAiZG91YmxlRW5jb2RlZFVyaSIsICJhbmNlc3RvcnNQYWdlIiwgImdldFJvb3RFbnRpdGllcyIsICJjbGFzc2VzV2l0aEluZGl2aWR1YWxzIiwgIm9ycGhhbmVkSW5kaXZpZHVhbHMiLCAicm9vdHNQYWdlIiwgImdldE5vZGVDaGlsZHJlbiIsICJlbnRpdHlUeXBlUGx1cmFsIiwgImFic29sdXRlSWRlbnRpdHkiLCAiY2hpbGRyZW5QYWdlIiwgInRlcm0iLCAicGFyZW50aG9vZE1ldGFkYXRhIiwgIm9udG9sb2dpZXNTbGljZSIsICJyb290Tm9kZXMiLCAicm9vdFRlcm1zIiwgInNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyIsICJhYnNJZCIsICJvbnRvbG9naWVzU2xpY2VfZGVmYXVsdCIsICJnZXRTZWFyY2hSZXN1bHRzIiwgInF1ZXJ5IiwgInBhcmFtIiwgInBhcnNlZFF1ZXJ5IiwgInNlYXJjaFNsaWNlIiwgInNlYXJjaFNsaWNlX2RlZmF1bHQiLCAiY29tbW9uIiwgImNvbW1vbl9kZWZhdWx0IiwgInJlZCIsICJyZWRfZGVmYXVsdCIsICJwdXJwbGUiLCAicHVycGxlX2RlZmF1bHQiLCAiYmx1ZSIsICJibHVlX2RlZmF1bHQiLCAibGlnaHRCbHVlIiwgImxpZ2h0Qmx1ZV9kZWZhdWx0IiwgImdyZWVuIiwgImdyZWVuX2RlZmF1bHQiLCAib3JhbmdlIiwgIm9yYW5nZV9kZWZhdWx0IiwgImdyZXkiLCAiZ3JleV9kZWZhdWx0IiwgImlkZW50aWZpZXJfZGVmYXVsdCIsICJpbXBvcnRfc3R5bGVkX2VuZ2luZSIsICJpbXBvcnRfZGVlcG1lcmdlIiwgInNoYXBlX2RlZmF1bHQiLCAibWVyZ2VfZGVmYXVsdCIsICJpbXBvcnRfY2FwaXRhbGl6ZSIsICJzdHlsZV9kZWZhdWx0IiwgImNvbXBvc2VfZGVmYXVsdCIsICJkZWZhdWx0U3hDb25maWdfZGVmYXVsdCIsICJzdHlsZUZ1bmN0aW9uU3hfZGVmYXVsdCIsICJjcmVhdGVUaGVtZV9kZWZhdWx0IiwgImlzT2JqZWN0RW1wdHkiLCAiY29udGV4dFRoZW1lIiwgInVzZVRoZW1lV2l0aG91dERlZmF1bHRfZGVmYXVsdCIsICJ1c2VUaGVtZV9kZWZhdWx0IiwgImRlZmF1bHRHZW5lcmF0b3IiLCAiY3JlYXRlQ2xhc3NOYW1lR2VuZXJhdG9yIiwgImdlbmVyYXRlIiwgImdlbmVyYXRvciIsICJDbGFzc05hbWVHZW5lcmF0b3IiLCAiQ2xhc3NOYW1lR2VuZXJhdG9yX2RlZmF1bHQiLCAiY2xzeCIsICJjbHN4X2RlZmF1bHQiLCAiZ2xvYmFsU3RhdGVDbGFzc2VzIiwgImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwgImdsb2JhbFN0YXRlUHJlZml4IiwgImdsb2JhbFN0YXRlQ2xhc3MiLCAiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsICJzbG90cyIsICJwcm9jZXNzU3R5bGVzIiwgInN0eWxlZEVuZ2luZVN0eWxlZCIsICJzdHlsZWRfZGVmYXVsdCIsICJyZXNvbHZlUHJvcHMiLCAiZGVmYXVsdFByb3BzIiwgImRlZmF1bHRTbG90UHJvcHMiLCAic2xvdFByb3BzIiwgInNsb3RQcm9wTmFtZSIsICJnZXRUaGVtZVByb3BzIiwgInBhcmFtcyIsICJ1c2VUaGVtZVByb3BzIiwgInVzZUVuaGFuY2VkRWZmZWN0IiwgInVzZUVuaGFuY2VkRWZmZWN0X2RlZmF1bHQiLCAiY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIiwgImlzTXVpRWxlbWVudCIsICJtdWlOYW1lcyIsICJfbXVpTmFtZSIsICJfZWxlbWVudCR0eXBlIiwgInNldFJlZiIsICJnbG9iYWxJZCIsICJ1c2VHbG9iYWxJZCIsICJpZE92ZXJyaWRlIiwgImRlZmF1bHRJZCIsICJzZXREZWZhdWx0SWQiLCAibWF5YmVSZWFjdFVzZUlkIiwgInVzZUlkIiwgInJlYWN0SWQiLCAidXNlQ29udHJvbGxlZCIsICJjb250cm9sbGVkIiwgImRlZmF1bHRQcm9wIiwgImlzQ29udHJvbGxlZCIsICJ2YWx1ZVN0YXRlIiwgInNldFZhbHVlIiwgInNldFZhbHVlSWZVbmNvbnRyb2xsZWQiLCAibmV3VmFsdWUiLCAidXNlRXZlbnRDYWxsYmFjayIsICJ1c2VFdmVudENhbGxiYWNrX2RlZmF1bHQiLCAidXNlRm9ya1JlZiIsICJyZWZzIiwgImluc3RhbmNlIiwgIlVOSU5JVElBTElaRUQiLCAidXNlTGF6eVJlZiIsICJpbml0QXJnIiwgIkVNUFRZIiwgInVzZU9uTW91bnQiLCAiVGltZW91dCIsICJfVGltZW91dCIsICJkZWxheSIsICJ1c2VUaW1lb3V0IiwgImhhZEtleWJvYXJkRXZlbnQiLCAiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkiLCAiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwgImlucHV0VHlwZXNXaGl0ZWxpc3QiLCAiZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkiLCAiaGFuZGxlS2V5RG93biIsICJldmVudCIsICJoYW5kbGVQb2ludGVyRG93biIsICJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwgInByZXBhcmUiLCAiZG9jIiwgImlzRm9jdXNWaXNpYmxlIiwgInVzZUlzRm9jdXNWaXNpYmxlIiwgImlzRm9jdXNWaXNpYmxlUmVmIiwgImhhbmRsZUJsdXJWaXNpYmxlIiwgImhhbmRsZUZvY3VzVmlzaWJsZSIsICJjb21wb3NlQ2xhc3NlcyIsICJnZXRVdGlsaXR5Q2xhc3MiLCAiY2xhc3NlcyIsICJ1dGlsaXR5Q2xhc3MiLCAiaW1wb3J0X2pzeF9ydW50aW1lIiwgImRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQiLCAidXNlVGhlbWVQcm9wc0RlZmF1bHQiLCAiam9pbkNoaWxkcmVuIiwgInNlcGFyYXRvciIsICJjaGlsZHJlbkFycmF5IiwgImNoaWxkIiwgImdldFNpZGVGcm9tRGlyZWN0aW9uIiwgImRpcmVjdGlvblZhbHVlcyIsICJzcGFjaW5nVmFsdWVzIiwgInByZXZpb3VzRGlyZWN0aW9uVmFsdWUiLCAiY3JlYXRlU3RhY2siLCAiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgInVzZVV0aWxpdHlDbGFzc2VzIiwgIlN0YWNrUm9vdCIsICJpblByb3BzIiwgInRoZW1lUHJvcHMiLCAiZGl2aWRlciIsICJ1c2VGbGV4R2FwIiwgIl9qc3giLCAiaW1wb3J0X2Zvcm1hdE11aUVycm9yTWVzc2FnZSIsICJpbXBvcnRfc3R5bGVGdW5jdGlvblN4IiwgImltcG9ydF9jcmVhdGVUaGVtZSIsICJjcmVhdGVNaXhpbnMiLCAibWl4aW5zIiwgImltcG9ydF9jb2xvck1hbmlwdWxhdG9yIiwgImxpZ2h0IiwgImRhcmsiLCAiYWRkTGlnaHRPckRhcmsiLCAiaW50ZW50IiwgInNoYWRlIiwgInRvbmFsT2Zmc2V0IiwgInRvbmFsT2Zmc2V0TGlnaHQiLCAidG9uYWxPZmZzZXREYXJrIiwgImdldERlZmF1bHRQcmltYXJ5IiwgIm1vZGUiLCAiZ2V0RGVmYXVsdFNlY29uZGFyeSIsICJnZXREZWZhdWx0RXJyb3IiLCAiZ2V0RGVmYXVsdEluZm8iLCAiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCAiZ2V0RGVmYXVsdFdhcm5pbmciLCAiY3JlYXRlUGFsZXR0ZSIsICJjb250cmFzdFRocmVzaG9sZCIsICJwcmltYXJ5IiwgInNlY29uZGFyeSIsICJpbmZvIiwgInN1Y2Nlc3MiLCAiZ2V0Q29udHJhc3RUZXh0IiwgImF1Z21lbnRDb2xvciIsICJtYWluU2hhZGUiLCAibGlnaHRTaGFkZSIsICJkYXJrU2hhZGUiLCAibW9kZXMiLCAicm91bmQiLCAiY2FzZUFsbENhcHMiLCAiZGVmYXVsdEZvbnRGYW1pbHkiLCAiY3JlYXRlVHlwb2dyYXBoeSIsICJ0eXBvZ3JhcGh5IiwgImZvbnRGYW1pbHkiLCAiZm9udFNpemUiLCAiZm9udFdlaWdodExpZ2h0IiwgImZvbnRXZWlnaHRSZWd1bGFyIiwgImZvbnRXZWlnaHRNZWRpdW0iLCAiZm9udFdlaWdodEJvbGQiLCAiaHRtbEZvbnRTaXplIiwgImFsbFZhcmlhbnRzIiwgInB4VG9SZW0yIiwgImNvZWYiLCAicHhUb1JlbSIsICJidWlsZFZhcmlhbnQiLCAiZm9udFdlaWdodCIsICJsaW5lSGVpZ2h0IiwgImxldHRlclNwYWNpbmciLCAiY2FzaW5nIiwgImNyZWF0ZVNoYWRvdyIsICJweCIsICJzaGFkb3dzIiwgInNoYWRvd3NfZGVmYXVsdCIsICJlYXNpbmciLCAiZHVyYXRpb24iLCAiZm9ybWF0TXMiLCAibWlsbGlzZWNvbmRzIiwgImdldEF1dG9IZWlnaHREdXJhdGlvbiIsICJjb25zdGFudCIsICJjcmVhdGVUcmFuc2l0aW9ucyIsICJpbnB1dFRyYW5zaXRpb25zIiwgIm1lcmdlZEVhc2luZyIsICJtZXJnZWREdXJhdGlvbiIsICJkdXJhdGlvbk9wdGlvbiIsICJlYXNpbmdPcHRpb24iLCAiYW5pbWF0ZWRQcm9wIiwgInpJbmRleCIsICJ6SW5kZXhfZGVmYXVsdCIsICJtaXhpbnNJbnB1dCIsICJ0cmFuc2l0aW9uc0lucHV0IiwgInR5cG9ncmFwaHlJbnB1dCIsICJzeXN0ZW1UaGVtZSIsICJzeXN0ZW1DcmVhdGVUaGVtZSIsICJkZWZhdWx0VGhlbWVfZGVmYXVsdCIsICJpbXBvcnRfY3JlYXRlU3R5bGVkIiwgImNhcGl0YWxpemVfZGVmYXVsdCIsICJjcmVhdGVDaGFpbmVkRnVuY3Rpb25fZGVmYXVsdCIsICJnZXRTdmdJY29uVXRpbGl0eUNsYXNzIiwgInN2Z0ljb25DbGFzc2VzIiwgIlN2Z0ljb25Sb290IiwgIl90aGVtZSR0cmFuc2l0aW9ucyIsICJfdGhlbWUkdHJhbnNpdGlvbnMkY3IiLCAiX3RoZW1lJHRyYW5zaXRpb25zMiIsICJfdGhlbWUkdHlwb2dyYXBoeSIsICJfdGhlbWUkdHlwb2dyYXBoeSRweFQiLCAiX3RoZW1lJHR5cG9ncmFwaHkyIiwgIl90aGVtZSR0eXBvZ3JhcGh5MiRweCIsICJfdGhlbWUkdHlwb2dyYXBoeTMiLCAiX3RoZW1lJHR5cG9ncmFwaHkzJHB4IiwgIl9wYWxldHRlJG93bmVyU3RhdGUkYyIsICJfcGFsZXR0ZTIiLCAiX3BhbGV0dGUzIiwgIlN2Z0ljb24iLCAiaHRtbENvbG9yIiwgImluaGVyaXRWaWV3Qm94IiwgInRpdGxlQWNjZXNzIiwgInZpZXdCb3giLCAiaGFzU3ZnQXNDaGlsZCIsICJtb3JlIiwgIl9qc3hzIiwgIlN2Z0ljb25fZGVmYXVsdCIsICJjcmVhdGVTdmdJY29uIiwgImRpc3BsYXlOYW1lIiwgImlzTXVpRWxlbWVudF9kZWZhdWx0IiwgInVzZUlkX2RlZmF1bHQiLCAidXNlQ29udHJvbGxlZF9kZWZhdWx0IiwgInVzZUZvcmtSZWZfZGVmYXVsdCIsICJ1c2VJc0ZvY3VzVmlzaWJsZV9kZWZhdWx0IiwgIl9zZXRQcm90b3R5cGVPZiIsICJfaW5oZXJpdHNMb29zZSIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgIlRyYW5zaXRpb25Hcm91cENvbnRleHRfZGVmYXVsdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgImdldENoaWxkTWFwcGluZyIsICJtYXBGbiIsICJtYXBwZXIiLCAibWVyZ2VDaGlsZE1hcHBpbmdzIiwgImdldFZhbHVlRm9yS2V5IiwgIm5leHRLZXlzUGVuZGluZyIsICJwZW5kaW5nS2V5cyIsICJwcmV2S2V5IiwgImNoaWxkTWFwcGluZyIsICJuZXh0S2V5IiwgInBlbmRpbmdOZXh0S2V5IiwgImdldFByb3AiLCAiZ2V0SW5pdGlhbENoaWxkTWFwcGluZyIsICJvbkV4aXRlZCIsICJnZXROZXh0Q2hpbGRNYXBwaW5nIiwgIm5leHRQcm9wcyIsICJwcmV2Q2hpbGRNYXBwaW5nIiwgIm5leHRDaGlsZE1hcHBpbmciLCAiaGFzUHJldiIsICJoYXNOZXh0IiwgInByZXZDaGlsZCIsICJpc0xlYXZpbmciLCAiVHJhbnNpdGlvbkdyb3VwIiwgIl9SZWFjdCRDb21wb25lbnQiLCAiaGFuZGxlRXhpdGVkIiwgImZpcnN0UmVuZGVyIiwgImN1cnJlbnRDaGlsZE1hcHBpbmciLCAiX3RoaXMkcHJvcHMiLCAiY2hpbGRGYWN0b3J5IiwgIlRyYW5zaXRpb25Hcm91cF9kZWZhdWx0IiwgIlJpcHBsZSIsICJwdWxzYXRlIiwgInJpcHBsZVgiLCAicmlwcGxlWSIsICJyaXBwbGVTaXplIiwgImluUHJvcCIsICJsZWF2aW5nIiwgInNldExlYXZpbmciLCAicmlwcGxlQ2xhc3NOYW1lIiwgInJpcHBsZVN0eWxlcyIsICJjaGlsZENsYXNzTmFtZSIsICJ0aW1lb3V0SWQiLCAiUmlwcGxlX2RlZmF1bHQiLCAidG91Y2hSaXBwbGVDbGFzc2VzIiwgInRvdWNoUmlwcGxlQ2xhc3Nlc19kZWZhdWx0IiwgIl90IiwgIl90MiIsICJfdDMiLCAiX3Q0IiwgIkRVUkFUSU9OIiwgIkRFTEFZX1JJUFBMRSIsICJlbnRlcktleWZyYW1lIiwgImV4aXRLZXlmcmFtZSIsICJwdWxzYXRlS2V5ZnJhbWUiLCAiVG91Y2hSaXBwbGVSb290IiwgIlRvdWNoUmlwcGxlUmlwcGxlIiwgIlRvdWNoUmlwcGxlIiwgImNlbnRlclByb3AiLCAicmlwcGxlcyIsICJzZXRSaXBwbGVzIiwgInJpcHBsZUNhbGxiYWNrIiwgImlnbm9yaW5nTW91c2VEb3duIiwgInN0YXJ0VGltZXIiLCAic3RhcnRUaW1lckNvbW1pdCIsICJzdGFydENvbW1pdCIsICJvbGRSaXBwbGVzIiwgImNlbnRlciIsICJmYWtlRWxlbWVudCIsICJyZWN0IiwgImNsaWVudFgiLCAiY2xpZW50WSIsICJzaXplWCIsICJzaXplWSIsICJzdG9wIiwgIlRvdWNoUmlwcGxlX2RlZmF1bHQiLCAiZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyIsICJidXR0b25CYXNlQ2xhc3NlcyIsICJidXR0b25CYXNlQ2xhc3Nlc19kZWZhdWx0IiwgImRpc2FibGVkIiwgImZvY3VzVmlzaWJsZSIsICJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCAiY29tcG9zZWRDbGFzc2VzIiwgIkJ1dHRvbkJhc2VSb290IiwgIkJ1dHRvbkJhc2UiLCAiY2VudGVyUmlwcGxlIiwgImRpc2FibGVSaXBwbGUiLCAiZGlzYWJsZVRvdWNoUmlwcGxlIiwgImZvY3VzUmlwcGxlIiwgIkxpbmtDb21wb25lbnQiLCAib25CbHVyIiwgIm9uQ2xpY2siLCAib25Db250ZXh0TWVudSIsICJvbkRyYWdMZWF2ZSIsICJvbkZvY3VzIiwgIm9uRm9jdXNWaXNpYmxlIiwgIm9uS2V5RG93biIsICJvbktleVVwIiwgIm9uTW91c2VEb3duIiwgIm9uTW91c2VMZWF2ZSIsICJvbk1vdXNlVXAiLCAib25Ub3VjaEVuZCIsICJvblRvdWNoTW92ZSIsICJvblRvdWNoU3RhcnQiLCAidGFiSW5kZXgiLCAiVG91Y2hSaXBwbGVQcm9wcyIsICJ0b3VjaFJpcHBsZVJlZiIsICJidXR0b25SZWYiLCAicmlwcGxlUmVmIiwgImhhbmRsZVJpcHBsZVJlZiIsICJmb2N1c1Zpc2libGVSZWYiLCAic2V0Rm9jdXNWaXNpYmxlIiwgIm1vdW50ZWRTdGF0ZSIsICJzZXRNb3VudGVkU3RhdGUiLCAiZW5hYmxlVG91Y2hSaXBwbGUiLCAidXNlUmlwcGxlSGFuZGxlciIsICJyaXBwbGVBY3Rpb24iLCAiZXZlbnRDYWxsYmFjayIsICJza2lwUmlwcGxlQWN0aW9uIiwgImhhbmRsZU1vdXNlRG93biIsICJoYW5kbGVDb250ZXh0TWVudSIsICJoYW5kbGVEcmFnTGVhdmUiLCAiaGFuZGxlTW91c2VVcCIsICJoYW5kbGVNb3VzZUxlYXZlIiwgImhhbmRsZVRvdWNoU3RhcnQiLCAiaGFuZGxlVG91Y2hFbmQiLCAiaGFuZGxlVG91Y2hNb3ZlIiwgImhhbmRsZUJsdXIiLCAiaGFuZGxlRm9jdXMiLCAiaXNOb25OYXRpdmVCdXR0b24iLCAiYnV0dG9uIiwgImtleWRvd25SZWYiLCAiaGFuZGxlS2V5VXAiLCAiQ29tcG9uZW50UHJvcCIsICJidXR0b25Qcm9wcyIsICJoYW5kbGVSZWYiLCAiQnV0dG9uQmFzZV9kZWZhdWx0IiwgImdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MiLCAidHlwb2dyYXBoeUNsYXNzZXMiLCAiYWxpZ24iLCAiZ3V0dGVyQm90dG9tIiwgIm5vV3JhcCIsICJwYXJhZ3JhcGgiLCAiVHlwb2dyYXBoeVJvb3QiLCAiZGVmYXVsdFZhcmlhbnRNYXBwaW5nIiwgImNvbG9yVHJhbnNmb3JtYXRpb25zIiwgInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCAiVHlwb2dyYXBoeSIsICJ2YXJpYW50TWFwcGluZyIsICJUeXBvZ3JhcGh5X2RlZmF1bHQiLCAiZm9ybUNvbnRyb2xTdGF0ZSIsICJzdGF0ZXMiLCAibXVpRm9ybUNvbnRyb2wiLCAiRm9ybUNvbnRyb2xDb250ZXh0IiwgIkZvcm1Db250cm9sQ29udGV4dF9kZWZhdWx0IiwgInVzZUZvcm1Db250cm9sIiwgImhhc1ZhbHVlIiwgImlzRmlsbGVkIiwgIlNTUiIsICJpc0Fkb3JuZWRTdGFydCIsICJnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzIiwgInN3aXRjaEJhc2VDbGFzc2VzIiwgImNoZWNrZWQiLCAiZWRnZSIsICJTd2l0Y2hCYXNlUm9vdCIsICJTd2l0Y2hCYXNlSW5wdXQiLCAiU3dpdGNoQmFzZSIsICJhdXRvRm9jdXMiLCAiY2hlY2tlZFByb3AiLCAiY2hlY2tlZEljb24iLCAiZGVmYXVsdENoZWNrZWQiLCAiZGlzYWJsZWRQcm9wIiwgImRpc2FibGVGb2N1c1JpcHBsZSIsICJpY29uIiwgImlucHV0UHJvcHMiLCAiaW5wdXRSZWYiLCAib25DaGFuZ2UiLCAicmVhZE9ubHkiLCAicmVxdWlyZWQiLCAic2V0Q2hlY2tlZFN0YXRlIiwgImhhbmRsZUlucHV0Q2hhbmdlIiwgIm5ld0NoZWNrZWQiLCAiaGFzTGFiZWxGb3IiLCAiU3dpdGNoQmFzZV9kZWZhdWx0IiwgIkNoZWNrQm94T3V0bGluZUJsYW5rX2RlZmF1bHQiLCAiQ2hlY2tCb3hfZGVmYXVsdCIsICJJbmRldGVybWluYXRlQ2hlY2tCb3hfZGVmYXVsdCIsICJnZXRDaGVja2JveFV0aWxpdHlDbGFzcyIsICJjaGVja2JveENsYXNzZXMiLCAiY2hlY2tib3hDbGFzc2VzX2RlZmF1bHQiLCAiaW5kZXRlcm1pbmF0ZSIsICJDaGVja2JveFJvb3QiLCAiZGVmYXVsdENoZWNrZWRJY29uIiwgImRlZmF1bHRJY29uIiwgImRlZmF1bHRJbmRldGVybWluYXRlSWNvbiIsICJDaGVja2JveCIsICJfaWNvbiRwcm9wcyRmb250U2l6ZSIsICJfaW5kZXRlcm1pbmF0ZUljb24kcHIiLCAiaWNvblByb3AiLCAiaW5kZXRlcm1pbmF0ZUljb25Qcm9wIiwgImluZGV0ZXJtaW5hdGVJY29uIiwgIkNoZWNrYm94X2RlZmF1bHQiLCAiZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyIsICJjaXJjdWxhclByb2dyZXNzQ2xhc3NlcyIsICJTSVpFIiwgImNpcmN1bGFyUm90YXRlS2V5ZnJhbWUiLCAiY2lyY3VsYXJEYXNoS2V5ZnJhbWUiLCAiZGlzYWJsZVNocmluayIsICJDaXJjdWxhclByb2dyZXNzUm9vdCIsICJDaXJjdWxhclByb2dyZXNzU1ZHIiwgIkNpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUiLCAiQ2lyY3VsYXJQcm9ncmVzcyIsICJ0aGlja25lc3MiLCAiY2lyY2xlU3R5bGUiLCAicm9vdFN0eWxlIiwgInJvb3RQcm9wcyIsICJjaXJjdW1mZXJlbmNlIiwgIkNpcmN1bGFyUHJvZ3Jlc3NfZGVmYXVsdCIsICJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwgImZvcm1Db250cm9sQ2xhc3NlcyIsICJmdWxsV2lkdGgiLCAiRm9ybUNvbnRyb2xSb290IiwgIkZvcm1Db250cm9sIiwgInZpc3VhbGx5Rm9jdXNlZCIsICJoaWRkZW5MYWJlbCIsICJhZG9ybmVkU3RhcnQiLCAic2V0QWRvcm5lZFN0YXJ0IiwgImluaXRpYWxBZG9ybmVkU3RhcnQiLCAiZmlsbGVkIiwgInNldEZpbGxlZCIsICJpbml0aWFsRmlsbGVkIiwgImZvY3VzZWRTdGF0ZSIsICJzZXRGb2N1c2VkIiwgImZvY3VzZWQiLCAicmVnaXN0ZXJFZmZlY3QiLCAiY2hpbGRDb250ZXh0IiwgIkZvcm1Db250cm9sX2RlZmF1bHQiLCAiU3RhY2siLCAiU3RhY2tfZGVmYXVsdCIsICJnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMiLCAiZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMiLCAiZm9ybUNvbnRyb2xMYWJlbENsYXNzZXNfZGVmYXVsdCIsICJsYWJlbFBsYWNlbWVudCIsICJGb3JtQ29udHJvbExhYmVsUm9vdCIsICJBc3Rlcmlza0NvbXBvbmVudCIsICJGb3JtQ29udHJvbExhYmVsIiwgIl9zbG90UHJvcHMkdHlwb2dyYXBoeSIsICJjb21wb25lbnRzUHJvcHMiLCAiY29udHJvbCIsICJkaXNhYmxlVHlwb2dyYXBoeSIsICJsYWJlbFByb3AiLCAicmVxdWlyZWRQcm9wIiwgImNvbnRyb2xQcm9wcyIsICJmY3MiLCAidHlwb2dyYXBoeVNsb3RQcm9wcyIsICJGb3JtQ29udHJvbExhYmVsX2RlZmF1bHQiLCAiZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzIiwgImZvcm1Hcm91cENsYXNzZXMiLCAicm93IiwgIkZvcm1Hcm91cFJvb3QiLCAiRm9ybUdyb3VwIiwgIkZvcm1Hcm91cF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uVW5jaGVja2VkX2RlZmF1bHQiLCAiUmFkaW9CdXR0b25DaGVja2VkX2RlZmF1bHQiLCAiUmFkaW9CdXR0b25JY29uUm9vdCIsICJSYWRpb0J1dHRvbkljb25CYWNrZ3JvdW5kIiwgIlJhZGlvQnV0dG9uSWNvbkRvdCIsICJSYWRpb0J1dHRvbkljb24iLCAiUmFkaW9CdXR0b25JY29uX2RlZmF1bHQiLCAiUmFkaW9Hcm91cENvbnRleHQiLCAiUmFkaW9Hcm91cENvbnRleHRfZGVmYXVsdCIsICJ1c2VSYWRpb0dyb3VwIiwgImdldFJhZGlvVXRpbGl0eUNsYXNzIiwgInJhZGlvQ2xhc3NlcyIsICJyYWRpb0NsYXNzZXNfZGVmYXVsdCIsICJSYWRpb1Jvb3QiLCAiYXJlRXF1YWxWYWx1ZXMiLCAiUmFkaW8iLCAiX2RlZmF1bHRJY29uJHByb3BzJGZvIiwgIl9kZWZhdWx0Q2hlY2tlZEljb24kcCIsICJuYW1lUHJvcCIsICJvbkNoYW5nZVByb3AiLCAicmFkaW9Hcm91cCIsICJSYWRpb19kZWZhdWx0IiwgIlJhZGlvR3JvdXAiLCAiYWN0aW9ucyIsICJ2YWx1ZVByb3AiLCAicm9vdFJlZiIsICJzZXRWYWx1ZVN0YXRlIiwgIlJhZGlvR3JvdXBfZGVmYXVsdCIsICJOb2RlIiwgImV4cGFuZGFibGUiLCAiZXhwYW5kZWQiLCAiaGlnaGxpZ2h0IiwgImlzTGFzdCIsICJFbnRpdHlUcmVlIiwgInNlbGVjdGVkRW50aXR5IiwgIm9uTmF2aWdhdGVUb0VudGl0eSIsICJvbk5hdmlnYXRlVG9PbnRvbG9neSIsICJub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZCIsICJudW1QZW5kaW5nVHJlZVJlcXVlc3RzIiwgIm1hbnVhbGx5RXhwYW5kZWROb2RlcyIsICJzaG93U2libGluZ3NFbmFibGVkIiwgInNob3dDb3VudHNFbmFibGVkIiwgInRvZ2dsZU5vZGUiLCAiaXNFeHBhbmRlZCIsICJub2Rlc01pc3NpbmdDaGlsZHJlbiIsICJwcm9taXNlcyIsICJ0b2dnbGVTaG93T2Jzb2xldGUiLCAidG9nZ2xlU2hvd1NpYmxpbmdzIiwgInRvZ2dsZVNob3dDb3VudHMiLCAicmVuZGVyTm9kZUNoaWxkcmVuIiwgImNoaWxkcmVuQ29weSIsICJ0aXRsZUEiLCAidGl0bGVCIiwgImNoaWxkcmVuU29ydGVkIiwgIlRyZWVMaW5rIiwgInRpdGxlIiwgImRlZmluZWRCeSIsICJkZWZpbmluZ09udG9sb2d5IiwgIlN1YnNjcmliYWJsZSIsICJpc1NlcnZlciIsICJub29wIiwgImZ1bmN0aW9uYWxVcGRhdGUiLCAidXBkYXRlciIsICJpc1ZhbGlkVGltZW91dCIsICJlbnN1cmVRdWVyeUtleUFycmF5IiwgInRpbWVVbnRpbFN0YWxlIiwgInVwZGF0ZWRBdCIsICJzdGFsZVRpbWUiLCAicGFyc2VRdWVyeUFyZ3MiLCAiYXJnMSIsICJhcmcyIiwgImFyZzMiLCAiaXNRdWVyeUtleSIsICJwYXJzZUZpbHRlckFyZ3MiLCAibWFwUXVlcnlTdGF0dXNGaWx0ZXIiLCAiYWN0aXZlIiwgImluYWN0aXZlIiwgImlzQWN0aXZlIiwgIm1hdGNoUXVlcnkiLCAiZmlsdGVycyIsICJleGFjdCIsICJmZXRjaGluZyIsICJxdWVyeUtleSIsICJzdGFsZSIsICJoYXNoUXVlcnlLZXlCeU9wdGlvbnMiLCAicGFydGlhbE1hdGNoS2V5IiwgInF1ZXJ5U3RhdHVzRmlsdGVyIiwgIm1hdGNoTXV0YXRpb24iLCAibXV0YXRpb24iLCAibXV0YXRpb25LZXkiLCAiaGFzaFF1ZXJ5S2V5IiwgImhhc2hGbiIsICJzdGFibGVWYWx1ZUhhc2giLCAicGFydGlhbERlZXBFcXVhbCIsICJyZXBsYWNlRXF1YWxEZWVwIiwgImFTaXplIiwgImJJdGVtcyIsICJiU2l6ZSIsICJlcXVhbEl0ZW1zIiwgImhhc09iamVjdFByb3RvdHlwZSIsICJjdG9yIiwgInByb3QiLCAic2xlZXAiLCAicmVzb2x2ZSIsICJzY2hlZHVsZU1pY3JvdGFzayIsICJnZXRBYm9ydENvbnRyb2xsZXIiLCAiRm9jdXNNYW5hZ2VyIiwgIl9TdWJzY3JpYmFibGUiLCAiX3dpbmRvdyIsICJfdGhpcyRjbGVhbnVwIiwgInNldHVwIiwgIl90aGlzJGNsZWFudXAyIiwgImZvY3VzTWFuYWdlciIsICJPbmxpbmVNYW5hZ2VyIiwgIm9uT25saW5lIiwgIm9ubGluZSIsICJvbmxpbmVNYW5hZ2VyIiwgImRlZmF1bHRSZXRyeURlbGF5IiwgImZhaWx1cmVDb3VudCIsICJpc0NhbmNlbGFibGUiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiaXNDYW5jZWxsZWRFcnJvciIsICJSZXRyeWVyIiwgImNhbmNlbFJldHJ5IiwgImNhbmNlbEZuIiwgImNvbnRpbnVlRm4iLCAicHJvbWlzZVJlc29sdmUiLCAicHJvbWlzZVJlamVjdCIsICJjYW5jZWxPcHRpb25zIiwgIm91dGVyUmVzb2x2ZSIsICJvdXRlclJlamVjdCIsICJwYXVzZSIsICJjb250aW51ZVJlc29sdmUiLCAicnVuIiwgInByb21pc2VPclZhbHVlIiwgIl9jb25maWckcmV0cnkiLCAiX2NvbmZpZyRyZXRyeURlbGF5IiwgInJldHJ5IiwgInJldHJ5RGVsYXkiLCAic2hvdWxkUmV0cnkiLCAiTm90aWZ5TWFuYWdlciIsICJfdGhpczMiLCAicXVldWUiLCAibm90aWZ5TWFuYWdlciIsICJsb2dnZXIiLCAiZ2V0TG9nZ2VyIiwgInNldExvZ2dlciIsICJuZXdMb2dnZXIiLCAiUXVlcnkiLCAiX3RoaXMkb3B0aW9ucyRjYWNoZVRpIiwgIl90aGlzJG9wdGlvbnMkaXNEYXRhRSIsICJfdGhpcyRvcHRpb25zIiwgInByZXZEYXRhIiwgImRhdGEiLCAic2V0U3RhdGVPcHRpb25zIiwgIl90aGlzJHJldHJ5ZXIiLCAiX3RoaXMkcmV0cnllcjIiLCAiX3RoaXMkcmV0cnllcjMiLCAiZmV0Y2hPcHRpb25zIiwgIl90aGlzJG9wdGlvbnMkYmVoYXZpbyIsICJfY29udGV4dCRmZXRjaE9wdGlvbnMiLCAiX2Fib3J0Q29udHJvbGxlciRhYm9yIiwgIl90aGlzJHJldHJ5ZXI0IiwgInF1ZXJ5Rm5Db250ZXh0IiwgImZldGNoRm4iLCAiX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiIsICJfY29udGV4dCRmZXRjaE9wdGlvbnMyIiwgImhhc0luaXRpYWxEYXRhIiwgImluaXRpYWxEYXRhVXBkYXRlZEF0IiwgImhhc0RhdGEiLCAiX2FjdGlvbiRtZXRhIiwgIl9hY3Rpb24kZGF0YVVwZGF0ZWRBdCIsICJRdWVyeUNhY2hlIiwgImNsaWVudCIsICJfb3B0aW9ucyRxdWVyeUhhc2giLCAicXVlcnlIYXNoIiwgInF1ZXJ5SW5NYXAiLCAiX3BhcnNlRmlsdGVyQXJncyIsICJfcGFyc2VGaWx0ZXJBcmdzMiIsICJfdGhpczQiLCAiX3RoaXM1IiwgIk11dGF0aW9uIiwgImdldERlZmF1bHRTdGF0ZSIsICJyZXN0b3JlZCIsICJfdGhpcyRvcHRpb25zJHJldHJ5IiwgIk11dGF0aW9uQ2FjaGUiLCAicGF1c2VkTXV0YXRpb25zIiwgImluZmluaXRlUXVlcnlCZWhhdmlvciIsICJfY29udGV4dCRmZXRjaE9wdGlvbnMzIiwgIl9jb250ZXh0JGZldGNoT3B0aW9uczQiLCAiX2NvbnRleHQkc3RhdGUkZGF0YSIsICJfY29udGV4dCRzdGF0ZSRkYXRhMiIsICJyZWZldGNoUGFnZSIsICJmZXRjaE1vcmUiLCAicGFnZVBhcmFtIiwgImlzRmV0Y2hpbmdOZXh0UGFnZSIsICJpc0ZldGNoaW5nUHJldmlvdXNQYWdlIiwgIm9sZFBhZ2VzIiwgIm9sZFBhZ2VQYXJhbXMiLCAiYWJvcnRTaWduYWwiLCAibmV3UGFnZVBhcmFtcyIsICJxdWVyeUZuIiwgImJ1aWxkTmV3UGFnZXMiLCAicGFnZXMiLCAiZmV0Y2hQYWdlIiwgIm1hbnVhbCIsICJxdWVyeUZuUmVzdWx0IiwgInByb21pc2VBc0FueSIsICJnZXROZXh0UGFnZVBhcmFtIiwgIl9tYW51YWwiLCAiX3BhcmFtIiwgImdldFByZXZpb3VzUGFnZVBhcmFtIiwgInNob3VsZEZldGNoRmlyc3RQYWdlIiwgIl9sb29wIiwgInNob3VsZEZldGNoTmV4dFBhZ2UiLCAiX3BhcmFtMiIsICJmaW5hbFByb21pc2UiLCAiZmluYWxQcm9taXNlQXNBbnkiLCAiUXVlcnlDbGllbnQiLCAiX3RoaXMkdW5zdWJzY3JpYmVGb2N1IiwgIl90aGlzJHVuc3Vic2NyaWJlT25saSIsICJfdGhpcyRxdWVyeUNhY2hlJGZpbmQiLCAicXVlcnlLZXlPckZpbHRlcnMiLCAicGFyc2VkT3B0aW9ucyIsICJkZWZhdWx0ZWRPcHRpb25zIiwgIl90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIiLCAicXVlcnlDYWNoZSIsICJfcGFyc2VGaWx0ZXJBcmdzMyIsICJyZWZldGNoRmlsdGVycyIsICJfcGFyc2VGaWx0ZXJBcmdzNCIsICJfcGFyc2VGaWx0ZXJBcmdzNCQiLCAiX3JlZjMiLCAiX2ZpbHRlcnMkcmVmZXRjaEFjdGl2IiwgIl9maWx0ZXJzJHJlZmV0Y2hJbmFjdCIsICJfcGFyc2VGaWx0ZXJBcmdzNSIsICJfdGhpczYiLCAiX3BhcnNlRmlsdGVyQXJnczYiLCAiX3RoaXM3IiwgIl90aGlzJHF1ZXJ5RGVmYXVsdHMkZiIsICJfdGhpcyRtdXRhdGlvbkRlZmF1bHQiLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAiUmVhY3RET00iLCAiZGVmYXVsdENvbnRleHQiLCAiUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCIsICJnZXRRdWVyeUNsaWVudENvbnRleHQiLCAiY29udGV4dFNoYXJpbmciLCAiUXVlcnlDbGllbnRQcm92aWRlciIsICJfcmVmJGNvbnRleHRTaGFyaW5nIiwgIkNvbnRleHQiLCAiY3JlYXRlRW50aXR5VHJlZSIsICJFbnRpdHlUcmVlV2lkZ2V0IiwgInF1ZXJ5Q2xpZW50IiwgIkVudGl0eVRyZWVXaWRnZXRJbm5lciIsICJsb2FkaW5nT250b2xvZ3kiLCAibG9hZGluZ0VudGl0eSIsICJsb2FkaW5nQ2xhc3NJbnN0YW5jZXMiLCAiaGFuZGxlTmF2aWdhdGVUb0VudGl0eSIsICJoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3kiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIngiLCAiUmVhY3RET00iLCAicmVuZGVyIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAicmVuZGVyIiwgImRhdGEiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAibm9kZSIsICJiIiwgImN5Y2xlQ2hlY2siLCAiY3ljbGVDaGVjayIsICJub2RlIiwgImIiLCAiUmVhY3QiLCAieCIsICJub2RlIiwgImhpZXJhcmNoeSIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZIiwgIlJlYWN0IiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIm9udG9sb2d5IiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0RmllbGQiLCAic29ydERpcmVjdGlvbiIsICJwYWdlT2ZJdGVtcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJzZWFyY2hWYWx1ZSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyIsICJyZW5kZXIiLCAib3B0aW9uIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIlJlYWN0IiwgInByb3BlcnR5IiwgInByZWRpY2F0ZXMiLCAiZW50aXR5IiwgImluc3RhbmNlcyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaW5wdXQtYXV0b3NpemUvbGliL0F1dG9zaXplSW5wdXQuanMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9BdXRvY29tcGxldGVXaWRnZXQvQXV0b2NvbXBsZXRlV2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvQmxvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvZmV0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsICIuLi9zcmMvbW9kZWwvTW9kZWxUeXBlQ2hlY2sudHMiLCAiLi4vc3JjL2FwcC91dGlsLnRzIiwgIi4uL3NyYy9tb2RlbC9SZWlmaWVkLnRzIiwgIi4uL3NyYy9tb2RlbC9MaW5rZWRFbnRpdGllcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzVGhpbmcudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0VudGl0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzQ2xhc3MudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM1Byb3BlcnR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNJbmRpdmlkdWFsLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNPbnRvbG9neS50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzT250b2xvZ2llcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0VGhpbmcudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNEVudGl0eS50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0Q2xhc3MudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNFByb3BlcnR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRJbmRpdmlkdWFsLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRPbnRvbG9neS50cyIsICIuLi9zcmMvbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yLnRzIiwgIi4uL3NyYy9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeS50cyIsICIuLi9zcmMvbW9kZWwvb2xzLW1vZGVsL09MU1NlbGVjdC50cyIsICIuLi9zcmMvbW9kZWwvb2xzLW1vZGVsL09MU1NlbGVjdFJlc3VsdC50cyIsICIuLi9zcmMvbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0LnRzIiwgIi4uL3NyYy9hcGkvT2xzQXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfbGl2ZS9zY3JlZW5fcmVhZGVyX2xpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtNTQ4NmM1MWMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzL2Rpc3QvZW1vdGlvbi11c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdGFiYmFibGUvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvY2FzY2FkaW5nX21lbnVfa2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JlZ2V4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92MS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvaHRtbF9pZF9nZW5lcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hbGlnbm1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX2NvbG9yX2RhcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc192YWxpZF9oZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvbGltaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvY2xpcF9yZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy91bnBhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvbGFzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9Db2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2Nocm9tYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL2NteWsycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvcmdiMmNteWsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jc3MvaHNsMmNzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2wvcmdiMmhzbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jc3MvcmdiMmNzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2wvaHNsMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jc3MvY3NzMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jc3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vZ2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGNnL2hjZzJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGNnL3JnYjJoY2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGNnL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hleC9oZXgycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hleC9yZ2IyaGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hleC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2kvaHNpMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2kvcmdiMmhzaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHNsL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzdi9oc3YycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzdi9yZ2IyaHN2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzdi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sYWIvbGFiLWNvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sYWIvbGFiMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sYWIvcmdiMmxhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sYWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL2xjaDJsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL2xjaDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL2hjbDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL2xhYjJsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL3JnYjJsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2NvbG9ycy93M2N4MTEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbmFtZWQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbnVtL251bTJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbnVtL3JnYjJudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vbnVtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3JnYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby90ZW1wL3RlbXBlcmF0dXJlMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby90ZW1wL3JnYjJ0ZW1wZXJhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby90ZW1wL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL29rbGFiMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9yZ2Iyb2tsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvb2tsY2gycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL3JnYjJva2xjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvYWxwaGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2NsaXBwZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2Rhcmtlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9sdW1pbmFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9taXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL21peC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvcHJlbXVsdGlwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3NhdHVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3NoYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9yZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2xhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvX2hzeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9udW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hjZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzdi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL29rbGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9hdmVyYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9zY2FsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvYmV6aWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9ibGVuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9nZW5lcmF0b3IvY3ViZWhlbGl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9yYW5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvYW5hbHl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9jb250cmFzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9kZWx0YS1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2Rpc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3ZhbGlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3NjYWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9jb2xvcnMvY29sb3JicmV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2NvbG9yX3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9ldWlfcGFsZXR0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9tYW5pcHVsYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9jb250cmFzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYW5pbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL2xvZ2ljYWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JvcmRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fbGV2ZWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc3RhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS90aGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL2hvb2tzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvY3VycmVudF9icmVha3BvaW50X2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L3VzZUlzV2l0aGluQnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9maW5kRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3ByZWRpY2F0ZS9jb21tb25fcHJlZGljYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3ByZWRpY2F0ZS9sb2Rhc2hfcHJlZGljYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Zvcm1hdC9mb3JtYXRfYm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Zvcm1hdC9mb3JtYXRfZGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Zvcm1hdC9mb3JtYXRfbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9hdXRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdXJsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc2VjdXJpdHkvZ2V0X3NlY3VyZV9yZWxfZm9yX3RhcmdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3NvcnQvc29ydF9kaXJlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9vYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9jb21wYXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3BvcG92ZXIvcG9wb3Zlcl9wb3NpdGlvbmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2hvb2tzL3VzZUNvbWJpbmVkUmVmcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL19idXR0b25fY29udGVudF9kZXByZWNhdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hZ2dyZWdhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FsZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hbmFseXplRXZlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwbV90cmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYW52YXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jYXNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2RldnRvb2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9lbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZsZWV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3JhcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncm9rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sZW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbG9ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX25vdGVib29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93RW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd19yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FzdGVyaXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWFrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlbGxTbGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYm9sdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJhbmNoVXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJvb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JydXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2J1bGxzZXllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jYWxlbmRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvdWREcml6emxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvdWRTdW5ueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2x1c3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbXB1dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnNvbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRhaW5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGludWl0eUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29weS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NoYWlycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3VycmVuY3kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGF0YWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rlc2t0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvdWJsZUFycm93UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Rvd25sb2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduVG9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX2xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2JvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jaGVja2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2hlYWRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3Jfb3JkZXJlZF9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3Vub3JkZXJlZF9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbWFpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VxbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXJhc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cGFuZE1pbmkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leWVfY2xvc2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX2hhcHB5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX25ldXRyYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2Vfc2FkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZsYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVOZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbF9zY3JlZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9nZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9nbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9nbG9iZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JhYl9ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaGVhdG1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaG9tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaUluQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW1wb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9jbG9zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfZWRpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfZmx1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X21hcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X3NldHRpbmdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5zcGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW52ZXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva2V5Ym9hcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9maWVsZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX3NlbGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfdmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rdWJlcm5ldGVzUG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sYXllcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xldHRlcmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluZURhc2hlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluZURvdHRlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluZVNvbGlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saXN0X2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9ja09wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3NfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2JlYXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jZXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGVzYW5kYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kb2NrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZHJvcHdpemFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19ldGNkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19naXRodWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ21haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29sYW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2hhcHJveHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2thZmthLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ2dpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWFwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZW1jYWNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tb25nb2RiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX215c3FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX25naW54LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb3NxdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19waHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcHJvbWV0aGV1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19yZWRpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19za2V0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2xhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd2luZG93cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2lmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduaWZ5V2l0aE1pbnVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hcF9tYXJrZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbW9yeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudURvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVVcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVyZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbmltaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9hZHZhbmNlZF9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX3JlZ3Jlc3Npb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL29mZmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL29ubGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFnZVNlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFnZXNTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXBlcl9jbGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXJ0aWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXVzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF5bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVuY2lsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wZXJjZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpbl9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsYXlGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXNfaW5fY2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BvcG91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdW90ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmVwb3J0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3JldHVybl9rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NhdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZXNzaW9uVmlld2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2hhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nub3dmbGFrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF9kb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0X3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhclBsdXNFbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZW1wdHlfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9taW51c19lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9zbGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcmFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdWJtb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N1bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3dhdGNoX2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zeW1saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZU9mQ29udGVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9ub3JtYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGVtcGVyYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVSZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZXNsaWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5BbGlhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkNsYXNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FeGNlcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GbGF0dGVuZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuR2VvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkhpc3RvZ3JhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JUC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSm9pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Nb2R1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT3BlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGVyY29sYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmVwby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TZWFyY2hUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYWluaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdW5mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmxpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VzZXJBdmF0YXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VzZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZpZGVvUGxheWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfZ2F1Z2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nb2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX21hcF9jb29yZGluYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX21ldHJpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3BpZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmVnYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3Zpc3VhbF9idWlsZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvd3JlbmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbl9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9yZWFjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9uYW1lZF9jb2xvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9yZXNldC9nbG9iYWxfc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9faGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fcGFkZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fc3RhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL190eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL2FuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9yZXNldC9yZXNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0L2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bl91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL19sb2FkaW5nX3N0cmluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb2JzZXJ2ZXIvb2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9lbXB0eS9idXR0b25fZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25faWNvbi9idXR0b25faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW5uZXJfdGV4dC9pbm5lcl90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2Rpc3QvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2F1dG9fc2l6ZXIvYXV0b19zaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbG9yX3BpY2tlci91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFkZ2UvYmV0YV9iYWRnZS9iZXRhX2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9ydGFsL3BvcnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXBfcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvaWNvbl90aXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy9zaGFkb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMvc2hhZG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0NvbWJpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS9hc3NpZ25SZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZU1lcmdlUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9leHBvcnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvTG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvRm9jdXNHdWFyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2NvcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtY2xpZW50c2lkZS1lZmZlY3QvbGliL2luZGV4LmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2lzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYk9yZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYmJhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJVdGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9ET011dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hbGwtYWZmZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvc2FmZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9nZXRBY3RpdmVFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzSXNIaWRkZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvY29ycmVjdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2ZpcnN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2F1dG8tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvcGFyZW50aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2ZvY3VzYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29tbWFuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvbW92ZUZvY3VzSW5zaWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3JldHVybi1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWJsaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1NpZGVFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2hvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1ub25jZS9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L3NpbmdsZXRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtc3R5bGUtc2luZ2xldG9uL2Rpc3QvZXMyMDE1L2NvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2FnZ3Jlc2l2ZUNhcHR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L2hhbmRsZVNjcm9sbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hcmlhLWhpZGRlbi9kaXN0L2VzMjAxNS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvSW50ZXJhY3Rpdml0eURpc2FibGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyL211dGF0aW9uX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdXRzaWRlX2NsaWNrX2RldGVjdG9yL291dHNpZGVfY2xpY2tfZGV0ZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuc3R5bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9wYW5lbC9fcG9wb3Zlcl9wYW5lbC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RpdGxlL3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYXJkL2NhcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZF9zZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vY2hlY2tib3gvY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9ncm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2xhYmVsL2Zvcm1fbGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vdmFsaWRhdGFibGVfY29udHJvbC92YWxpZGF0YWJsZV9jb250cm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvX251bV9pY29ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9maWVsZF9zZWFyY2gvZmllbGRfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJvd3Nlci9icm93c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fZXJyb3JfdGV4dC9mb3JtX2Vycm9yX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9oZWxwX3RleHQvZm9ybV9oZWxwX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9yb3cvZm9ybV9yb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHRfbWVudS9jb250ZXh0X21lbnVfcGFuZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHRfbWVudS9jb250ZXh0X21lbnVfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaG9yaXpvbnRhbF9ydWxlL2hvcml6b250YWxfcnVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaG9yaXpvbnRhbF9ydWxlL2hvcml6b250YWxfcnVsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vc3dpdGNoL3N3aXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy90aW1lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9kb21IZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUdyaWRDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9jcmVhdGVMaXN0Q29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL1ZhcmlhYmxlU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvRml4ZWRTaXplR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3NoYWxsb3dEaWZmZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2FyZUVxdWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3Nob3VsZENvbXBvbmVudFVwZGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3ZlcmxheV9tYXNrL292ZXJsYXlfbWFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3BhY2VyL3NwYWNlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF9vcHRpb25zX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hpZ2hsaWdodC9oaWdobGlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL21hcmsvbWFyay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X3RpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9maWx0ZXJfZ3JvdXAvZmlsdGVyX3NlbGVjdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X3BpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3BhZ2luYXRpb24vdGFibGVfcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb25fYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb25fYnV0dG9uX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYmJlZF9jb250ZW50L3RhYmJlZF9jb250ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9kZWxheV9yZW5kZXIvZGVsYXlfcmVuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oZWFsdGgvaGVhbHRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oZWFsdGgvaGVhbHRoLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX3dyYXBwZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX3dyYXBwZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2J1dHRvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2NhcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2NhcHRpb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2Z1bGxzY3JlZW5fd3JhcHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9jYWNoZS9jYWNoZV9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfc2VhcmNoL3NlbGVjdGFibGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL21hdGNoaW5nX29wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9tZXNzYWdlL3NlbGVjdGFibGVfbWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3RfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2JvZHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX2hlYWRlcl9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9zb3J0X21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvd19jZWxsX2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvY29sbGFwc2VkX2l0ZW1fYWN0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZXhwYW5kZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9kZWZhdWx0X2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jdXN0b21faXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2FjdGlvbl90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvcGFnaW5hdGlvbl9iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvc3Vic2NyaWJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2ZvY3VzTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9vbmxpbmVNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3JldHJ5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbm90aWZ5TWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbkNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2luZmluaXRlUXVlcnlCZWhhdmlvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeU9ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlQmFzZVF1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VRdWVyeS5qcyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9EYXRhQ29udGVudFdpZGdldC9EYXRhQ29udGVudFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmcudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvbldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9JcmlXaWRnZXQvSXJpV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0L0hpZXJhcmNoeVdpZGdldE9MUy50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL211bHRpbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9VdGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1Rva2VuaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvUHJlZml4ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3dlYWstbWVtb2l6ZS9kaXN0L2Vtb3Rpb24td2Vhay1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vbWVtb2l6ZS9kaXN0L2Vtb3Rpb24tbWVtb2l6ZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2NhY2hlL2Rpc3QvZW1vdGlvbi1jYWNoZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2hhc2gvZGlzdC9lbW90aW9uLWhhc2guZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2lzLXByb3AtdmFsaWQvZGlzdC9lbW90aW9uLWlzLXByb3AtdmFsaWQuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zdHlsZWQvYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9kaXN0L2Vtb3Rpb24tc3R5bGVkLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL1N0eWxlZEVuZ2luZVByb3ZpZGVyL1N0eWxlZEVuZ2luZVByb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9TdHlsZWRFbmdpbmVQcm92aWRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvR2xvYmFsU3R5bGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZGVlcG1lcmdlL2RlZXBtZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2RlZXBtZXJnZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NhcGl0YWxpemUvY2FwaXRhbGl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NhcGl0YWxpemUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9nZXREaXNwbGF5TmFtZS9nZXREaXNwbGF5TmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2dldERpc3BsYXlOYW1lL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2xhbXAvY2xhbXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9jbGFtcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vbWVyZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3Jlc3BvbnNpdmVQcm9wVHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vYnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3N0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9tZW1vaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9ib3JkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jc3NHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zaXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeC9kZWZhdWx0U3hDb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2V4dGVuZFN4UHJvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvc2hhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZVNwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2FwcGx5U3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvd2lkZ2V0cy9FbnRpdHlUcmVlV2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL2JhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaG9va3MvdXNlUmVkdXhDb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL0NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvU3Vic2NyaXB0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL1Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTdG9yZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvaG9va3MvdXNlRGlzcGF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL2FwcC9ob29rcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2Vycm9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2NvbW1vbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL3BsdWdpbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL3Njb3BlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9maW5hbGl6ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvcHJveHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2ltbWVyQ2xhc3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2N1cnJlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2VzNS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvcGF0Y2hlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvbWFwc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9hbGwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9pbW1lci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2Vudi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlZHV4L2VzL3JlZHV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWR1eC10aHVuay9lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jb25maWd1cmVTdG9yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZGV2dG9vbHNFeHRlbnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2lzUGxhaW5PYmplY3QudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy90c0hlbHBlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZUFjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlUmVkdWNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbWFwQnVpbGRlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZVNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9lbnRpdHlfc3RhdGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc3RhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL3Vuc29ydGVkX3N0YXRlX2FkYXB0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9jcmVhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbmFub2lkLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jcmVhdGVBc3luY1RodW5rLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9tYXRjaGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvZXhjZXB0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvYXV0b0JhdGNoRW5oYW5jZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvZGlzdC9yZWR1eC10b29sa2l0LmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL2FwaS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9ob21lL2hvbWVTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL3V0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL1JlaWZpZWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL0xpbmtlZEVudGl0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9UaGluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvRW50aXR5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9DbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvSW5kaXZpZHVhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvUHJvcGVydHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL09udG9sb2d5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL2VudGl0aWVzL2V4dHJhY3RFbnRpdHlIaWVyYXJjaHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvY3JlYXRlVHJlZUZyb21FbnRpdGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL3NlYXJjaC9zZWFyY2hTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL3N0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL2VudGl0aWVzL0VudGl0eVRyZWUudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3JlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcHVycGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ibHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9saWdodEJsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9vcmFuZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2lkZW50aWZpZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2JyZWFrcG9pbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVyZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jb21wb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Nzc0dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9wYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc2l6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2FwcGx5U3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWVXaXRob3V0RGVmYXVsdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2V4dGVuZFN4UHJvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9DbGFzc05hbWVHZW5lcmF0b3IvQ2xhc3NOYW1lR2VuZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9jbHN4L2Rpc3QvY2xzeC5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlU3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3Jlc29sdmVQcm9wcy9yZXNvbHZlUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL2dldFRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVByb3BzL3VzZVRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QvdXNlRW5oYW5jZWRFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9pc011aUVsZW1lbnQvaXNNdWlFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3NldFJlZi9zZXRSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlSWQvdXNlSWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlQ29udHJvbGxlZC91c2VDb250cm9sbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2svdXNlRXZlbnRDYWxsYmFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VGb3JrUmVmL3VzZUZvcmtSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlTGF6eVJlZi91c2VMYXp5UmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZU9uTW91bnQvdXNlT25Nb3VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VUaW1lb3V0L3VzZVRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUvdXNlSXNGb2N1c1Zpc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMvY29tcG9zZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9TdGFjay9jcmVhdGVTdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc2hhZG93cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3pJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy91c2VUaGVtZVByb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY2FwaXRhbGl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL1N2Z0ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9pc011aUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlQ29udHJvbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VFdmVudENhbGxiYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUZvcmtSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvQnV0dG9uQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvdG91Y2hSaXBwbGVDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvdHlwb2dyYXBoeUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NoZWNrYm94L0NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL1N3aXRjaEJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3dpdGNoQmFzZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94T3V0bGluZUJsYW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9DaGVja0JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvSW5kZXRlcm1pbmF0ZUNoZWNrQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NoZWNrYm94L2NoZWNrYm94Q2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL0NpcmN1bGFyUHJvZ3Jlc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2lyY3VsYXJQcm9ncmVzcy9jaXJjdWxhclByb2dyZXNzQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbENsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbC9Gb3JtQ29udHJvbExhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N0YWNrL1N0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sTGFiZWwvZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUdyb3VwL0Zvcm1Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtR3JvdXAvZm9ybUdyb3VwQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9SYWRpby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9SYWRpb0J1dHRvbkljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uVW5jaGVja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvbkNoZWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC91c2VSYWRpb0dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvR3JvdXAvUmFkaW9Hcm91cENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW8vcmFkaW9DbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvR3JvdXAvUmFkaW9Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL211aS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvY29tcG9uZW50cy9Ob2RlLnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9zdWJzY3JpYmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvZm9jdXNNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL29ubGluZU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcmV0cnllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9ub3RpZnlNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3dpZGdldHMvaW5kZXgudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC50c3giLCAiLi4vc3JjL2FwaS9oaWVyYXJjaHlfd2lkZ2V0X2RlcHJlY2F0ZWQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldFNlbUxvb2tQL0hpZXJhcmNoeVdpZGdldC50c3giLCAiLi4vc3JjL2FwaS9Ta29zQXBpLnRzIiwgIi4uL3NyYy9hcGkvT250b1BvcnRhbEFwaS50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24udHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvTWV0YWRhdGFDb21wYWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvVGVybURlcGljdGlvbldpZGdldC9UZXJtRGVwaWN0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG5cbnZhciByZXF1ZXN0SG9zdENhbGxiYWNrO1xudmFyIHJlcXVlc3RIb3N0VGltZW91dDtcbnZhciBjYW5jZWxIb3N0VGltZW91dDtcbnZhciByZXF1ZXN0UGFpbnQ7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG5cbmlmICggLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAvLyBDaGVjayBpZiBNZXNzYWdlQ2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRvby5cbnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAvLyBJZiB0aGlzIGFjY2lkZW50YWxseSBnZXRzIGltcG9ydGVkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIGUuZy4gSmF2YVNjcmlwdENvcmUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgbmFpdmUgaW1wbGVtZW50YXRpb24uXG4gIHZhciBfY2FsbGJhY2sgPSBudWxsO1xuICB2YXIgX3RpbWVvdXRJRCA9IG51bGw7XG5cbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHZhciBoYXNSZW1haW5pbmdUaW1lID0gdHJ1ZTtcblxuICAgICAgICBfY2FsbGJhY2soaGFzUmVtYWluaW5nVGltZSwgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIF9jYWxsYmFjayA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXF1ZXN0UGFpbnQgPSBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKCkge307XG59IGVsc2Uge1xuICAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cbiAgdmFyIF9zZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG4gIHZhciBfY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dDtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gVE9ETzogU2NoZWR1bGVyIG5vIGxvbmdlciByZXF1aXJlcyB0aGVzZSBtZXRob2RzIHRvIGJlIHBvbHlmaWxsZWQuIEJ1dFxuICAgIC8vIG1heWJlIHdlIHdhbnQgdG8gY29udGludWUgd2FybmluZyBpZiB0aGV5IGRvbid0IGV4aXN0LCB0byBwcmVzZXJ2ZSB0aGVcbiAgICAvLyBvcHRpb24gdG8gcmVseSBvbiBpdCBpbiB0aGUgZnV0dXJlP1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcblxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuXG4gIHtcbiAgICAvLyBgaXNJbnB1dFBlbmRpbmdgIGlzIG5vdCBhdmFpbGFibGUuIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWZcbiAgICAvLyB0aGVyZSdzIHBlbmRpbmcgaW5wdXQsIGFsd2F5cyB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfTsgLy8gU2luY2Ugd2UgeWllbGQgZXZlcnkgZnJhbWUgcmVnYXJkbGVzcywgYHJlcXVlc3RQYWludGAgaGFzIG5vIGVmZmVjdC5cblxuXG4gICAgcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmcHMgPiAwKSB7XG4gICAgICB5aWVsZEludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzZXQgdGhlIGZyYW1lcmF0ZVxuICAgICAgeWllbGRJbnRlcnZhbCA9IDU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTsgLy8gWWllbGQgYWZ0ZXIgYHlpZWxkSW50ZXJ2YWxgIG1zLCByZWdhcmRsZXNzIG9mIHdoZXJlIHdlIGFyZSBpbiB0aGUgdnN5bmNcbiAgICAgIC8vIGN5Y2xlLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYWx3YXlzIHRpbWUgcmVtYWluaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2ZcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGV2ZW50LlxuXG4gICAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1lICsgeWllbGRJbnRlcnZhbDtcbiAgICAgIHZhciBoYXNUaW1lUmVtYWluaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrKGhhc1RpbWVSZW1haW5pbmcsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoIWhhc01vcmVXb3JrKSB7XG4gICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxuICB9O1xuXG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBtcykge1xuICAgIHRhc2tUaW1lb3V0SUQgPSBfc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICB9LCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NsZWFyVGltZW91dCh0YXNrVGltZW91dElEKTtcblxuICAgIHRhc2tUaW1lb3V0SUQgPSAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcbiAgcmV0dXJuIGZpcnN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlyc3Q7XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuXG4gIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGxhc3QgPSBoZWFwLnBvcCgpO1xuXG4gICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgIHNpZnREb3duKGhlYXAsIGxhc3QsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJzdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0VXAoaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGxlZnRJbmRleCA9IChpbmRleCArIDEpICogMiAtIDE7XG4gICAgdmFyIGxlZnQgPSBoZWFwW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxO1xuICAgIHZhciByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07IC8vIElmIHRoZSBsZWZ0IG9yIHJpZ2h0IG5vZGUgaXMgc21hbGxlciwgc3dhcCB3aXRoIHRoZSBzbWFsbGVyIG9mIHRob3NlLlxuXG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKGxlZnQsIG5vZGUpIDwgMCkge1xuICAgICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbGVmdCkgPCAwKSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFwW2luZGV4XSA9IGxlZnQ7XG4gICAgICAgIGhlYXBbbGVmdEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gbGVmdEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBub2RlKSA8IDApIHtcbiAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBjaGlsZCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgLy8gQ29tcGFyZSBzb3J0IGluZGV4IGZpcnN0LCB0aGVuIHRhc2sgaWQuXG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIGRpZmYgIT09IDAgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5cbi8vIFRPRE86IFVzZSBzeW1ib2xzP1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSAzO1xudmFyIExvd1ByaW9yaXR5ID0gNDtcbnZhciBJZGxlUHJpb3JpdHkgPSA1O1xuXG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY3kuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgbWFya1Rhc2tFcnJvcmVkKGN1cnJlbnRUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgY3VycmVudFRhc2suaXNRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjYXRjaCBpbiBwcm9kIGNvZGUgcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gaW5pdGlhbFRpbWU7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcblxuICB3aGlsZSAoY3VycmVudFRhc2sgIT09IG51bGwgJiYgIShlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgKSkge1xuICAgIGlmIChjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmICghaGFzVGltZVJlbWFpbmluZyB8fCBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIHVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbnZhciB1bnN0YWJsZV9Qcm9maWxpbmcgPSAgbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHVuc3RhYmxlX3JlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfVEhSRUFEX0lEID0gMDsgLy8gQ291bnRlcnMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLlxuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7IC8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCJcdTIwMTNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cblxuZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IG51bGw7IC8vIExpc3RlbmVyKHMpIHRvIG5vdGlmeSB3aGVuIGludGVyYWN0aW9ucyBiZWdpbiBhbmQgZW5kLlxuXG5leHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IG51bGw7XG5cbntcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gdW5zdGFibGVfY2xlYXIoY2FsbGJhY2spIHtcblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gbmV3IFNldCgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudCgpIHtcbiAge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDsgLy8gVHJhY2VkIGludGVyYWN0aW9ucyBzaG91bGQgc3RhY2svYWNjdW11bGF0ZS5cbiAgLy8gVG8gZG8gdGhhdCwgY2xvbmUgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBUaGUgcHJldmlvdXMgc2V0IHdpbGwgYmUgcmVzdG9yZWQgdXBvbiBjb21wbGV0aW9uLlxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KHByZXZJbnRlcmFjdGlvbnMpO1xuICBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gaW50ZXJhY3Rpb25zO1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIHZhciByZXR1cm5WYWx1ZTtcblxuICB0cnkge1xuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tOyAvLyBJZiBubyBhc3luYyB3b3JrIHdhcyBzY2hlZHVsZWQgZm9yIHRoaXMgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgLy8gTm90aWZ5IHN1YnNjcmliZXJzIHRoYXQgaXQncyBjb21wbGV0ZWQuXG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwKGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIHdyYXBwZWRJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgfSAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBVcGRhdGUgYWZ0ZXIgY2FsbGluZyBzdWJzY3JpYmVycyBpbiBjYXNlIG9mIGVycm9yLlxuXG5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG4gIHZhciBoYXNSdW4gPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3cmFwcGVkKCkge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHdyYXBwZWRJbnRlcmFjdGlvbnM7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghaGFzUnVuKSB7XG4gICAgICAgIC8vIFdlIG9ubHkgZXhwZWN0IGEgd3JhcHBlZCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlLFxuICAgICAgICAvLyBCdXQgaW4gdGhlIGV2ZW50IHRoYXQgaXQncyBleGVjdXRlZCBtb3JlIHRoYW4gb25jZVx1MjAxM1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgaW50ZXJhY3Rpb24gY291bnRzIG9uY2UuXG4gICAgICAgIGhhc1J1biA9IHRydWU7IC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG5cbiAgICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlZC5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cbiAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgIGlmIChzdWJzY3JpYmVyICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG52YXIgc3Vic2NyaWJlcnMgPSBudWxsO1xuXG57XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkOiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZCxcbiAgICAgICAgb25JbnRlcmFjdGlvblRyYWNlZDogb25JbnRlcmFjdGlvblRyYWNlZCxcbiAgICAgICAgb25Xb3JrQ2FuY2VsZWQ6IG9uV29ya0NhbmNlbGVkLFxuICAgICAgICBvbldvcmtTY2hlZHVsZWQ6IG9uV29ya1NjaGVkdWxlZCxcbiAgICAgICAgb25Xb3JrU3RhcnRlZDogb25Xb3JrU3RhcnRlZCxcbiAgICAgICAgb25Xb3JrU3RvcHBlZDogb25Xb3JrU3RvcHBlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAwKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0cy51bnN0YWJsZV9jbGVhciA9IHVuc3RhYmxlX2NsZWFyO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50ID0gdW5zdGFibGVfZ2V0Q3VycmVudDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0VGhyZWFkSUQgPSB1bnN0YWJsZV9nZXRUaHJlYWRJRDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NIHdhcyBsb2FkZWQgYmVmb3JlIFJlYWN0LiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIFJlYWN0IHBhY2thZ2UgYmVmb3JlIGxvYWRpbmcgUmVhY3RET00uXCIgKTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgRnVuZGFtZW50YWxDb21wb25lbnQgPSAyMDtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIEJsb2NrID0gMjI7XG52YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjM7XG52YXIgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gMjQ7XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7IC8vIFJlY29yZCBkdXJhdGlvbnMgZm9yIGNvbW1pdCBhbmQgcGFzc2l2ZSBlZmZlY3RzIHBoYXNlcy5cblxudmFyIGVuYWJsZUZ1bmRhbWVudGFsQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBTY29wZSBzdXBwb3J0LlxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biB3aGlsZSB1bm1vdW50aW5nIChvciBhZnRlciBpbiB0aGUgY2FzZSBvZiBwYXNzaXZlIGVmZmVjdHMpXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlO1xuXG52YXIgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG5cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gIHt9IDsgLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIHRydWVcblxuZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArICdDYXB0dXJlJywgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHtcbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgZXJyb3IoJ0V2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgKyAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tpXSk7XG4gIH1cbn1cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSBmaWx0ZXIgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBST09UX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtcmVhY3Ryb290JztcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cbiAge1xuICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgKG5hbWVbMF0gPT09ICdvJyB8fCBuYW1lWzBdID09PSAnTycpICYmIChuYW1lWzFdID09PSAnbicgfHwgbmFtZVsxXSA9PT0gJ04nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogLy8gJEZsb3dJc3N1ZSBzeW1ib2wgaXMgcGVyZmVjdGx5IHZhbGlkIGhlcmVcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICFwcm9wZXJ0eUluZm8uYWNjZXB0c0Jvb2xlYW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgYXR0cmlidXRlTmFtZSA9IF9yZWZbMV07XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIFNWRyBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuLy8gU2luY2UgdGhlc2UgYXJlIFNWRyBhdHRyaWJ1dGVzLCB0aGVpciBhdHRyaWJ1dGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuXG5bJ2FsbG93RnVsbFNjcmVlbicsICdhc3luYycsIC8vIE5vdGU6IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgcHJldmVudHMgaXQgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBET01cbi8vIG9uIHRoZSBjbGllbnQgc2lkZSBiZWNhdXNlIHRoZSBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50LiBJbnN0ZWFkIHdlIGNhbGwgZm9jdXMoKS5cbidhdXRvRm9jdXMnLCAnYXV0b1BsYXknLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIHRoZSBmZXcgUmVhY3QgcHJvcHMgdGhhdCB3ZSBzZXQgYXMgRE9NIHByb3BlcnRpZXNcbi8vIHJhdGhlciB0aGFuIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbnMuXG5cblsnY2hlY2tlZCcsIC8vIE5vdGU6IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlzXG4vLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLiBXZSBoYXZlIHNwZWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoaXMuXG4nbXVsdGlwbGUnLCAnbXV0ZWQnLCAnc2VsZWN0ZWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIHRydWUsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhcmUgXCJvdmVybG9hZGVkIGJvb2xlYW5zXCI6IHRoZXkgYmVoYXZlIGxpa2Vcbi8vIGJvb2xlYW5zLCBidXQgY2FuIGFsc28gYWNjZXB0IGEgc3RyaW5nIHZhbHVlLlxuXG5bJ2NhcHR1cmUnLCAnZG93bmxvYWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE9WRVJMT0FERURfQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbicgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5cblsncm93U3BhbicsICdzdGFydCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTtcbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAge1xuICAgIGlmICghZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkodXJsKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIFwiZXhwZWN0ZWRcIiBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy5cbiAqIFNvbWUgcHJvcGVydGllcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8pIHtcbiAge1xuICAgIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcbiAgICAgIHJldHVybiBub2RlW3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggcHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZnVsbHkgZGlzYWJsZWQgamF2YXNjcmlwdDogVVJMcywgYW5kIGlmXG4gICAgICAgIC8vIHRoZSBoeWRyYXRpb24gaXMgc3VjY2Vzc2Z1bCBvZiBhIGphdmFzY3JpcHQ6IFVSTCwgd2VcbiAgICAgICAgLy8gc3RpbGwgd2FudCB0byB3YXJuIG9uIHRoZSBjbGllbnQuXG4gICAgICAgIHNhbml0aXplVVJMKCcnICsgZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgdmFyIHN0cmluZ1ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBib29sZWFuLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBpc1xuICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICB9IC8vIEV2ZW4gaWYgdGhpcyBwcm9wZXJ0eSB1c2VzIGEgbmFtZXNwYWNlIHdlIHVzZSBnZXRBdHRyaWJ1dGVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhc3N1bWUgaXRzIG5hbWVzcGFjZWQgbmFtZSBpcyB0aGUgc2FtZSBhcyBvdXIgY29uZmlnLlxuICAgICAgICAvLyBUbyB1c2UgZ2V0QXR0cmlidXRlTlMgd2UgbmVlZCB0aGUgbG9jYWwgbmFtZSB3aGljaCB3ZSBkb24ndCBoYXZlXG4gICAgICAgIC8vIGluIG91ciBjb25maWcgYXRtLlxuXG5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIG9iamVjdCBpcyBhbiBvcGFxdWUgcmVmZXJlbmNlIElELCBpdCdzIGV4cGVjdGVkIHRoYXRcbiAgICAvLyB0aGUgbmV4dCBwcm9wIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzZXJ2ZXIgdmFsdWUsIHNvIGp1c3QgcmV0dXJuXG4gICAgLy8gZXhwZWN0ZWRcblxuXG4gICAgaWYgKGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG5cbiAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9IC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cblxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCBwcm9wZXJ0eUluZm8gPT09IG51bGwpIHtcbiAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgdmFyIF9hdHRyaWJ1dGVOYW1lID0gbmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG11c3RVc2VQcm9wZXJ0eSA9IHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHk7XG5cbiAgaWYgKG11c3RVc2VQcm9wZXJ0eSkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YXIgdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBUaGUgcmVzdCBhcmUgdHJlYXRlZCBhcyBhdHRyaWJ1dGVzIHdpdGggc3BlY2lhbCBjYXNlcy5cblxuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgIHZhciBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBhdHRyaWJ1dGUgdHlwZSBpcyBib29sZWFuLCB3ZSBrbm93IGZvciBzdXJlIGl0IHdvbid0IGJlIGFuIGV4ZWN1dGlvbiBzaW5rXG4gICAgICAvLyBhbmQgd2Ugd29uJ3QgcmVxdWlyZSBUcnVzdGVkIFR5cGUgaGVyZS5cbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgdmFyIG93bmVyID0gIGZpYmVyLl9kZWJ1Z093bmVyID8gZmliZXIuX2RlYnVnT3duZXIudHlwZSA6IG51bGwgO1xuICB2YXIgc291cmNlID0gIGZpYmVyLl9kZWJ1Z1NvdXJjZSA7XG5cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ0xhenknKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlcik7XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLl9yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIHR5cGVvZiBvd25lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzUmVuZGVyaW5nKHJlbmRlcmluZykge1xuICB7XG4gICAgaXNSZW5kZXJpbmcgPSByZW5kZXJpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElzUmVuZGVyaW5nKCkge1xuICB7XG4gICAgcmV0dXJuIGlzUmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBmdW5jdGlvbiwgc3ltYm9sIGFyZSBhc3NpZ25lZCBhcyBlbXB0eSBzdHJpbmdzXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIShwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5jaGVja2VkID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuXG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuXG4gICAgICBpZiAob3RoZXJOb2RlID09PSByb290Tm9kZSB8fCBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG5cblxuICAgICAgdmFyIG90aGVyUHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG90aGVyTm9kZSk7XG5cbiAgICAgIGlmICghb3RoZXJQcm9wcykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBjb250ZW50ID0gJyc7IC8vIEZsYXR0ZW4gY2hpbGRyZW4uIFdlJ2xsIHdhcm4gaWYgdGhleSBhcmUgaW52YWxpZFxuICAvLyBkdXJpbmcgdmFsaWRhdGVQcm9wcygpIHdoaWNoIHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHRocm93IG9uIG5vbi1lbGVtZW50IG9iamVjdHMuXG4gIC8vIEVsZW1lbnRzIGFyZSBzdHJpbmdpZmllZCAod2hpY2ggaXMgbm9ybWFsbHkgaXJyZWxldmFudFxuICAvLyBidXQgbWF0dGVycyBmb3IgPGZidD4pLlxuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGVudCArPSBjaGlsZDsgLy8gTm90ZTogd2UgZG9uJ3Qgd2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gSW5zdGVhZCwgdGhpcyBpcyBkb25lIHNlcGFyYXRlbHkgYmVsb3cgc28gdGhhdFxuICAgIC8vIGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBoeWRyYXRpb24gY29kZSBwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZSBwYXRoIGFib3ZlLCBidXQgcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgICAvLyBXYXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZSBzbyB0aGF0IGNsaWVudCBhbmQgaHlkcmF0aW9uIGFyZSBjb25zaXN0ZW50LlxuICAgIC8vIFRPRE86IHRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBjYXVzZSBhIERFVi1vbmx5IHRocm93IGZvciBoeWRyYXRpb25cbiAgICAvLyBpZiBjaGlsZHJlbiBjb250YWlucyBhIG5vbi1lbGVtZW50IG9iamVjdC4gV2Ugc2hvdWxkIHRyeSB0byBhdm9pZCB0aGF0LlxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGFzIDxvcHRpb24+IGNoaWxkcmVuLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHtcbiAgICBjaGlsZHJlbjogdW5kZWZpbmVkXG4gIH0sIHByb3BzKTtcblxuICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBob3N0UHJvcHMuY2hpbGRyZW4gPSBjb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxO1xuXG57XG4gIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgdmFsdWVQcm9wTmFtZXMgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddO1xuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG5cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByZWZpeCB0byBhdm9pZCBjaGFvcyB3aXRoIHNwZWNpYWwga2V5cy5cbiAgICAgIHNlbGVjdGVkVmFsdWVbJyQnICsgc2VsZWN0ZWRWYWx1ZXNbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3B0aW9ucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWUuaGFzT3duUHJvcGVydHkoJyQnICsgb3B0aW9uc1tfaV0udmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKSk7XG5cbiAgICB2YXIgZGVmYXVsdFNlbGVjdGVkID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgICAgb3B0aW9uc1tfaTJdLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFNlbGVjdGVkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICB3YXNNdWx0aXBsZTogISFwcm9wcy5tdWx0aXBsZVxuICB9O1xuXG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdFVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgd2FzTXVsdGlwbGUgPSBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSAhIXByb3BzLm11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLm11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAgaWYgKCEocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIiApO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcblxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsVmFsdWUgPSBwcm9wcy52YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICghKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIklmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmICghKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpOyAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgLy8gYXZhaWxhYmxlIHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG5cbiAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsgLy8gT25seSBzZXQgbm9kZS52YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEgYnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG5cbiAgaWYgKHRleHRDb250ZW50ID09PSBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59OyAvLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5cbmZ1bmN0aW9uIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N2Zyc6XG4gICAgICByZXR1cm4gU1ZHX05BTUVTUEFDRTtcblxuICAgIGNhc2UgJ21hdGgnOlxuICAgICAgcmV0dXJuIE1BVEhfTkFNRVNQQUNFO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT0gbnVsbCB8fCBwYXJlbnROYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH0gLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG5cblxuICByZXR1cm4gcGFyZW50TmFtZXNwYWNlO1xufVxuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlcy5zdmcpIHtcblxuICAgIGlmICghKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0ZWFkIHdlIGluamVjdCB0aGVcbiAgICAgIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgICAgIC8vIHRoZSB0YXJnZXQgbm9kZVxuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sLnZhbHVlT2YoKS50b1N0cmluZygpICsgJzwvc3ZnPic7XG4gICAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn0pO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuLy8gTGlzdCBkZXJpdmVkIGZyb20gR2Vja28gc291cmNlIGNvZGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi80ZTYzOGVmYzcxL2xheW91dC9zdHlsZS90ZXN0L3Byb3BlcnR5X2RhdGFiYXNlLmpzXG52YXIgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgYW5pbWF0aW9uOiBbJ2FuaW1hdGlvbkRlbGF5JywgJ2FuaW1hdGlvbkRpcmVjdGlvbicsICdhbmltYXRpb25EdXJhdGlvbicsICdhbmltYXRpb25GaWxsTW9kZScsICdhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhbmltYXRpb25OYW1lJywgJ2FuaW1hdGlvblBsYXlTdGF0ZScsICdhbmltYXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICBiYWNrZ3JvdW5kOiBbJ2JhY2tncm91bmRBdHRhY2htZW50JywgJ2JhY2tncm91bmRDbGlwJywgJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZE9yaWdpbicsICdiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknLCAnYmFja2dyb3VuZFJlcGVhdCcsICdiYWNrZ3JvdW5kU2l6ZSddLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IFsnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJ10sXG4gIGJvcmRlcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tFbmQ6IFsnYm9yZGVyQmxvY2tFbmRDb2xvcicsICdib3JkZXJCbG9ja0VuZFN0eWxlJywgJ2JvcmRlckJsb2NrRW5kV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tTdGFydDogWydib3JkZXJCbG9ja1N0YXJ0Q29sb3InLCAnYm9yZGVyQmxvY2tTdGFydFN0eWxlJywgJ2JvcmRlckJsb2NrU3RhcnRXaWR0aCddLFxuICBib3JkZXJCb3R0b206IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcbiAgYm9yZGVyQ29sb3I6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InXSxcbiAgYm9yZGVySW1hZ2U6IFsnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJ10sXG4gIGJvcmRlcklubGluZUVuZDogWydib3JkZXJJbmxpbmVFbmRDb2xvcicsICdib3JkZXJJbmxpbmVFbmRTdHlsZScsICdib3JkZXJJbmxpbmVFbmRXaWR0aCddLFxuICBib3JkZXJJbmxpbmVTdGFydDogWydib3JkZXJJbmxpbmVTdGFydENvbG9yJywgJ2JvcmRlcklubGluZVN0YXJ0U3R5bGUnLCAnYm9yZGVySW5saW5lU3RhcnRXaWR0aCddLFxuICBib3JkZXJMZWZ0OiBbJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJ10sXG4gIGJvcmRlclJhZGl1czogWydib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnXSxcbiAgYm9yZGVyUmlnaHQ6IFsnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnXSxcbiAgYm9yZGVyU3R5bGU6IFsnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyVG9wU3R5bGUnXSxcbiAgYm9yZGVyVG9wOiBbJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlcldpZHRoOiBbJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGNvbHVtblJ1bGU6IFsnY29sdW1uUnVsZUNvbG9yJywgJ2NvbHVtblJ1bGVTdHlsZScsICdjb2x1bW5SdWxlV2lkdGgnXSxcbiAgY29sdW1uczogWydjb2x1bW5Db3VudCcsICdjb2x1bW5XaWR0aCddLFxuICBmbGV4OiBbJ2ZsZXhCYXNpcycsICdmbGV4R3JvdycsICdmbGV4U2hyaW5rJ10sXG4gIGZsZXhGbG93OiBbJ2ZsZXhEaXJlY3Rpb24nLCAnZmxleFdyYXAnXSxcbiAgZm9udDogWydmb250RmFtaWx5JywgJ2ZvbnRGZWF0dXJlU2V0dGluZ3MnLCAnZm9udEtlcm5pbmcnLCAnZm9udExhbmd1YWdlT3ZlcnJpZGUnLCAnZm9udFNpemUnLCAnZm9udFNpemVBZGp1c3QnLCAnZm9udFN0cmV0Y2gnLCAnZm9udFN0eWxlJywgJ2ZvbnRWYXJpYW50JywgJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nLCAnZm9udFdlaWdodCcsICdsaW5lSGVpZ2h0J10sXG4gIGZvbnRWYXJpYW50OiBbJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nXSxcbiAgZ2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZDogWydncmlkQXV0b0NvbHVtbnMnLCAnZ3JpZEF1dG9GbG93JywgJ2dyaWRBdXRvUm93cycsICdncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgZ3JpZEFyZWE6IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZENvbHVtbjogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCddLFxuICBncmlkQ29sdW1uR2FwOiBbJ2NvbHVtbkdhcCddLFxuICBncmlkR2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZFJvdzogWydncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkUm93R2FwOiBbJ3Jvd0dhcCddLFxuICBncmlkVGVtcGxhdGU6IFsnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGxpc3RTdHlsZTogWydsaXN0U3R5bGVJbWFnZScsICdsaXN0U3R5bGVQb3NpdGlvbicsICdsaXN0U3R5bGVUeXBlJ10sXG4gIG1hcmdpbjogWydtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Ub3AnXSxcbiAgbWFya2VyOiBbJ21hcmtlckVuZCcsICdtYXJrZXJNaWQnLCAnbWFya2VyU3RhcnQnXSxcbiAgbWFzazogWydtYXNrQ2xpcCcsICdtYXNrQ29tcG9zaXRlJywgJ21hc2tJbWFnZScsICdtYXNrTW9kZScsICdtYXNrT3JpZ2luJywgJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWScsICdtYXNrUmVwZWF0JywgJ21hc2tTaXplJ10sXG4gIG1hc2tQb3NpdGlvbjogWydtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknXSxcbiAgb3V0bGluZTogWydvdXRsaW5lQ29sb3InLCAnb3V0bGluZVN0eWxlJywgJ291dGxpbmVXaWR0aCddLFxuICBvdmVyZmxvdzogWydvdmVyZmxvd1gnLCAnb3ZlcmZsb3dZJ10sXG4gIHBhZGRpbmc6IFsncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCddLFxuICBwbGFjZUNvbnRlbnQ6IFsnYWxpZ25Db250ZW50JywgJ2p1c3RpZnlDb250ZW50J10sXG4gIHBsYWNlSXRlbXM6IFsnYWxpZ25JdGVtcycsICdqdXN0aWZ5SXRlbXMnXSxcbiAgcGxhY2VTZWxmOiBbJ2FsaWduU2VsZicsICdqdXN0aWZ5U2VsZiddLFxuICB0ZXh0RGVjb3JhdGlvbjogWyd0ZXh0RGVjb3JhdGlvbkNvbG9yJywgJ3RleHREZWNvcmF0aW9uTGluZScsICd0ZXh0RGVjb3JhdGlvblN0eWxlJ10sXG4gIHRleHRFbXBoYXNpczogWyd0ZXh0RW1waGFzaXNDb2xvcicsICd0ZXh0RW1waGFzaXNTdHlsZSddLFxuICB0cmFuc2l0aW9uOiBbJ3RyYW5zaXRpb25EZWxheScsICd0cmFuc2l0aW9uRHVyYXRpb24nLCAndHJhbnNpdGlvblByb3BlcnR5JywgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICB3b3JkV3JhcDogWydvdmVyZmxvd1dyYXAnXVxufTtcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgY29sdW1uczogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRBcmVhOiB0cnVlLFxuICBncmlkUm93OiB0cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJvd1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddOyAvLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cblxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cblxuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuXG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKi9cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7IC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuICB2YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgLy8gQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICAgIC8vIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAgICAvLyBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gICAgY2FtZWxpemUobmFtZS5yZXBsYWNlKG1zUGF0dGVybiQxLCAnbXMtJykpKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG5cbiAgICBlcnJvcihcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gXCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JJbmZpbml0eVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eShuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUkMSA9IHdhcm5WYWxpZFN0eWxlO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHN0eWxlXG4gKiBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGJ5IHNlcnZlci1zaWRlIHJlbmRlcmluZy4gSXQgYnktcGFzc2VzIHdhcm5pbmdzIGFuZFxuICogc2VjdXJpdHkgY2hlY2tzIHNvIGl0J3Mgbm90IHNhZmUgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW5cbiAqIGNvbXBhcmlzb24uIEl0IGlzIG9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhzdHlsZXMpIHtcbiAge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICcnO1xuXG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIChpc0N1c3RvbVByb3BlcnR5ID8gc3R5bGVOYW1lIDogaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KTtcbiAgICAgICAgZGVsaW1pdGVyID0gJzsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzKSB7XG4gIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG5cbiAgICB7XG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUkMShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG5cbiAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICBzdHlsZU5hbWUgPSAnY3NzRmxvYXQnO1xuICAgIH1cblxuICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbn1cbi8qKlxuICogR2l2ZW4ge2NvbG9yOiAncmVkJywgb3ZlcmZsb3c6ICdoaWRkZW4nfSByZXR1cm5zIHtcbiAqICAgY29sb3I6ICdjb2xvcicsXG4gKiAgIG92ZXJmbG93WDogJ292ZXJmbG93JyxcbiAqICAgb3ZlcmZsb3dZOiAnb3ZlcmZsb3cnLFxuICogfS4gVGhpcyBjYW4gYmUgcmVhZCBhcyBcInRoZSBvdmVyZmxvd1kgcHJvcGVydHkgd2FzIHNldCBieSB0aGUgb3ZlcmZsb3dcbiAqIHNob3J0aGFuZFwiLiBUaGF0IGlzLCB0aGUgdmFsdWVzIGFyZSB0aGUgcHJvcGVydHkgdGhhdCBlYWNoIHdhcyBkZXJpdmVkIGZyb20uXG4gKi9cblxuXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGFuZGVkW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuLyoqXG4gKiBXaGVuIG1peGluZyBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLCB3ZSB3YXJuIGR1cmluZyB1cGRhdGVzIGlmXG4gKiB3ZSBleHBlY3QgYW4gaW5jb3JyZWN0IHJlc3VsdCB0byBvY2N1ci4gSW4gcGFydGljdWxhciwgd2Ugd2FybiBmb3I6XG4gKlxuICogVXBkYXRpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgb3ZlcndyaXR0ZW4pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdiYXonLCBmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnYmF6J1xuICogUmVtb3ZpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgbG9zdCB0b28pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICcnXG4gKiBSZW1vdmluZyBhIGxvbmdoYW5kIHByb3BlcnR5IChzaG91bGQgcmV2ZXJ0IHRvIHNob3J0aGFuZDsgZG9lc24ndCk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2Zvbyd9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnRWYXJpYW50ID0gJydcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRTdHlsZXMpIHtcbiAge1xuICAgIGlmICghbmV4dFN0eWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVVcGRhdGVzKTtcbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXhwYW5kZWRVcGRhdGVzKSB7XG4gICAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShzdHlsZVVwZGF0ZXNbb3JpZ2luYWxLZXldKSA/ICdSZW1vdmluZycgOiAnVXBkYXRpbmcnLCBvcmlnaW5hbEtleSwgY29ycmVjdE9yaWdpbmFsS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSBsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmICghcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhlIEhUTUwgb3IgU1ZHIGFsbG93ZWQgYXR0cmlidXRlIGxpc3QsIGJlIHN1cmUgdG9cbi8vIGFsc28gYWRkIHRoZW0gdG8gdGhpcyBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0IG5hbWVcbi8vIHdhcm5pbmdzLlxudmFyIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgLy8gSFRNTFxuICBhY2NlcHQ6ICdhY2NlcHQnLFxuICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0Q2hhcnNldCcsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNza2V5OiAnYWNjZXNzS2V5JyxcbiAgYWN0aW9uOiAnYWN0aW9uJyxcbiAgYWxsb3dmdWxsc2NyZWVuOiAnYWxsb3dGdWxsU2NyZWVuJyxcbiAgYWx0OiAnYWx0JyxcbiAgYXM6ICdhcycsXG4gIGFzeW5jOiAnYXN5bmMnLFxuICBhdXRvY2FwaXRhbGl6ZTogJ2F1dG9DYXBpdGFsaXplJyxcbiAgYXV0b2NvbXBsZXRlOiAnYXV0b0NvbXBsZXRlJyxcbiAgYXV0b2NvcnJlY3Q6ICdhdXRvQ29ycmVjdCcsXG4gIGF1dG9mb2N1czogJ2F1dG9Gb2N1cycsXG4gIGF1dG9wbGF5OiAnYXV0b1BsYXknLFxuICBhdXRvc2F2ZTogJ2F1dG9TYXZlJyxcbiAgY2FwdHVyZTogJ2NhcHR1cmUnLFxuICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNoYWxsZW5nZTogJ2NoYWxsZW5nZScsXG4gIGNoYXJzZXQ6ICdjaGFyU2V0JyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzaWQ6ICdjbGFzc0lEJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3NOYW1lJyxcbiAgY29sczogJ2NvbHMnLFxuICBjb2xzcGFuOiAnY29sU3BhbicsXG4gIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJyxcbiAgY29udGV4dG1lbnU6ICdjb250ZXh0TWVudScsXG4gIGNvbnRyb2xzOiAnY29udHJvbHMnLFxuICBjb250cm9sc2xpc3Q6ICdjb250cm9sc0xpc3QnLFxuICBjb29yZHM6ICdjb29yZHMnLFxuICBjcm9zc29yaWdpbjogJ2Nyb3NzT3JpZ2luJyxcbiAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0ZXRpbWU6ICdkYXRlVGltZScsXG4gIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgZGVmYXVsdGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gIGRlZmF1bHR2YWx1ZTogJ2RlZmF1bHRWYWx1ZScsXG4gIGRlZmVyOiAnZGVmZXInLFxuICBkaXI6ICdkaXInLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6ICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsXG4gIGRpc2FibGVyZW1vdGVwbGF5YmFjazogJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGVudGVya2V5aGludDogJ2VudGVyS2V5SGludCcsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcbiAgLy8gU1ZHXG4gIGFib3V0OiAnYWJvdXQnLFxuICBhY2NlbnRoZWlnaHQ6ICdhY2NlbnRIZWlnaHQnLFxuICAnYWNjZW50LWhlaWdodCc6ICdhY2NlbnRIZWlnaHQnLFxuICBhY2N1bXVsYXRlOiAnYWNjdW11bGF0ZScsXG4gIGFkZGl0aXZlOiAnYWRkaXRpdmUnLFxuICBhbGlnbm1lbnRiYXNlbGluZTogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZSc6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gIGFsbG93cmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6ICdhbHBoYWJldGljJyxcbiAgYW1wbGl0dWRlOiAnYW1wbGl0dWRlJyxcbiAgYXJhYmljZm9ybTogJ2FyYWJpY0Zvcm0nLFxuICAnYXJhYmljLWZvcm0nOiAnYXJhYmljRm9ybScsXG4gIGFzY2VudDogJ2FzY2VudCcsXG4gIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRldHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvcmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogJ2F6aW11dGgnLFxuICBiYXNlZnJlcXVlbmN5OiAnYmFzZUZyZXF1ZW5jeScsXG4gIGJhc2VsaW5lc2hpZnQ6ICdiYXNlbGluZVNoaWZ0JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlcHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmJveDogJ2Jib3gnLFxuICBiZWdpbjogJ2JlZ2luJyxcbiAgYmlhczogJ2JpYXMnLFxuICBieTogJ2J5JyxcbiAgY2FsY21vZGU6ICdjYWxjTW9kZScsXG4gIGNhcGhlaWdodDogJ2NhcEhlaWdodCcsXG4gICdjYXAtaGVpZ2h0JzogJ2NhcEhlaWdodCcsXG4gIGNsaXA6ICdjbGlwJyxcbiAgY2xpcHBhdGg6ICdjbGlwUGF0aCcsXG4gICdjbGlwLXBhdGgnOiAnY2xpcFBhdGgnLFxuICBjbGlwcGF0aHVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNsaXBydWxlOiAnY2xpcFJ1bGUnLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbjogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3Jwcm9maWxlOiAnY29sb3JQcm9maWxlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAnY29sb3JQcm9maWxlJyxcbiAgY29sb3JyZW5kZXJpbmc6ICdjb2xvclJlbmRlcmluZycsXG4gICdjb2xvci1yZW5kZXJpbmcnOiAnY29sb3JSZW5kZXJpbmcnLFxuICBjb250ZW50c2NyaXB0dHlwZTogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcbiAgY29udGVudHN0eWxldHlwZTogJ2NvbnRlbnRTdHlsZVR5cGUnLFxuICBjdXJzb3I6ICdjdXJzb3InLFxuICBjeDogJ2N4JyxcbiAgY3k6ICdjeScsXG4gIGQ6ICdkJyxcbiAgZGF0YXR5cGU6ICdkYXRhdHlwZScsXG4gIGRlY2VsZXJhdGU6ICdkZWNlbGVyYXRlJyxcbiAgZGVzY2VudDogJ2Rlc2NlbnQnLFxuICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICBkaXJlY3Rpb246ICdkaXJlY3Rpb24nLFxuICBkaXNwbGF5OiAnZGlzcGxheScsXG4gIGRpdmlzb3I6ICdkaXZpc29yJyxcbiAgZG9taW5hbnRiYXNlbGluZTogJ2RvbWluYW50QmFzZWxpbmUnLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogJ2R1cicsXG4gIGR4OiAnZHgnLFxuICBkeTogJ2R5JyxcbiAgZWRnZW1vZGU6ICdlZGdlTW9kZScsXG4gIGVsZXZhdGlvbjogJ2VsZXZhdGlvbicsXG4gIGVuYWJsZWJhY2tncm91bmQ6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogJ2VuYWJsZUJhY2tncm91bmQnLFxuICBlbmQ6ICdlbmQnLFxuICBleHBvbmVudDogJ2V4cG9uZW50JyxcbiAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxuICBmaWxsOiAnZmlsbCcsXG4gIGZpbGxvcGFjaXR5OiAnZmlsbE9wYWNpdHknLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbHJ1bGU6ICdmaWxsUnVsZScsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJyZXM6ICdmaWx0ZXJSZXMnLFxuICBmaWx0ZXJ1bml0czogJ2ZpbHRlclVuaXRzJyxcbiAgZmxvb2RvcGFjaXR5OiAnZmxvb2RPcGFjaXR5JyxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2Rjb2xvcjogJ2Zsb29kQ29sb3InLFxuICAnZmxvb2QtY29sb3InOiAnZmxvb2RDb2xvcicsXG4gIGZvY3VzYWJsZTogJ2ZvY3VzYWJsZScsXG4gIGZvbnRmYW1pbHk6ICdmb250RmFtaWx5JyxcbiAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICBmb250c2l6ZTogJ2ZvbnRTaXplJyxcbiAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gIGZvbnRzaXplYWRqdXN0OiAnZm9udFNpemVBZGp1c3QnLFxuICAnZm9udC1zaXplLWFkanVzdCc6ICdmb250U2l6ZUFkanVzdCcsXG4gIGZvbnRzdHJldGNoOiAnZm9udFN0cmV0Y2gnLFxuICAnZm9udC1zdHJldGNoJzogJ2ZvbnRTdHJldGNoJyxcbiAgZm9udHN0eWxlOiAnZm9udFN0eWxlJyxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udHZhcmlhbnQ6ICdmb250VmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250d2VpZ2h0OiAnZm9udFdlaWdodCcsXG4gICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgZm9ybWF0OiAnZm9ybWF0JyxcbiAgZnJvbTogJ2Zyb20nLFxuICBmeDogJ2Z4JyxcbiAgZnk6ICdmeScsXG4gIGcxOiAnZzEnLFxuICBnMjogJ2cyJyxcbiAgZ2x5cGhuYW1lOiAnZ2x5cGhOYW1lJyxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICBncmFkaWVudHRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgZ3JhZGllbnR1bml0czogJ2dyYWRpZW50VW5pdHMnLFxuICBoYW5naW5nOiAnaGFuZ2luZycsXG4gIGhvcml6YWR2eDogJ2hvcml6QWR2WCcsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpem9yaWdpbng6ICdob3Jpek9yaWdpblgnLFxuICAnaG9yaXotb3JpZ2luLXgnOiAnaG9yaXpPcmlnaW5YJyxcbiAgaWRlb2dyYXBoaWM6ICdpZGVvZ3JhcGhpYycsXG4gIGltYWdlcmVuZGVyaW5nOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgaW4yOiAnaW4yJyxcbiAgaW46ICdpbicsXG4gIGlubGlzdDogJ2lubGlzdCcsXG4gIGludGVyY2VwdDogJ2ludGVyY2VwdCcsXG4gIGsxOiAnazEnLFxuICBrMjogJ2syJyxcbiAgazM6ICdrMycsXG4gIGs0OiAnazQnLFxuICBrOiAnaycsXG4gIGtlcm5lbG1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4gIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogJ2tlcm5pbmcnLFxuICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlzcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleXRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJzcGFjaW5nOiAnbGV0dGVyU3BhY2luZycsXG4gICdsZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgbGlnaHRpbmdjb2xvcjogJ2xpZ2h0aW5nQ29sb3InLFxuICAnbGlnaHRpbmctY29sb3InOiAnbGlnaHRpbmdDb2xvcicsXG4gIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbWFya2VyZW5kOiAnbWFya2VyRW5kJyxcbiAgJ21hcmtlci1lbmQnOiAnbWFya2VyRW5kJyxcbiAgbWFya2VyaGVpZ2h0OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VybWlkOiAnbWFya2VyTWlkJyxcbiAgJ21hcmtlci1taWQnOiAnbWFya2VyTWlkJyxcbiAgbWFya2Vyc3RhcnQ6ICdtYXJrZXJTdGFydCcsXG4gICdtYXJrZXItc3RhcnQnOiAnbWFya2VyU3RhcnQnLFxuICBtYXJrZXJ1bml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICBtYXNrdW5pdHM6ICdtYXNrVW5pdHMnLFxuICBtYXRoZW1hdGljYWw6ICdtYXRoZW1hdGljYWwnLFxuICBtb2RlOiAnbW9kZScsXG4gIG51bW9jdGF2ZXM6ICdudW1PY3RhdmVzJyxcbiAgb2Zmc2V0OiAnb2Zmc2V0JyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBvcGVyYXRvcjogJ29wZXJhdG9yJyxcbiAgb3JkZXI6ICdvcmRlcicsXG4gIG9yaWVudDogJ29yaWVudCcsXG4gIG9yaWVudGF0aW9uOiAnb3JpZW50YXRpb24nLFxuICBvcmlnaW46ICdvcmlnaW4nLFxuICBvdmVyZmxvdzogJ292ZXJmbG93JyxcbiAgb3ZlcmxpbmVwb3NpdGlvbjogJ292ZXJsaW5lUG9zaXRpb24nLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5ldGhpY2tuZXNzOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRvcmRlcjogJ3BhaW50T3JkZXInLFxuICAncGFpbnQtb3JkZXInOiAncGFpbnRPcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UxJyxcbiAgJ3Bhbm9zZS0xJzogJ3Bhbm9zZTEnLFxuICBwYXRobGVuZ3RoOiAncGF0aExlbmd0aCcsXG4gIHBhdHRlcm5jb250ZW50dW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJudW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICBwb2ludGVyZXZlbnRzOiAncG9pbnRlckV2ZW50cycsXG4gICdwb2ludGVyLWV2ZW50cyc6ICdwb2ludGVyRXZlbnRzJyxcbiAgcG9pbnRzOiAncG9pbnRzJyxcbiAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzYXR5OiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzYXR6OiAncG9pbnRzQXRaJyxcbiAgcHJlZml4OiAncHJlZml4JyxcbiAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZXVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICBwcm9wZXJ0eTogJ3Byb3BlcnR5JyxcbiAgcjogJ3InLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuICByZWZ4OiAncmVmWCcsXG4gIHJlZnk6ICdyZWZZJyxcbiAgcmVuZGVyaW5naW50ZW50OiAncmVuZGVyaW5nSW50ZW50JyxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Y291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkZXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkZmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzb3VyY2U6ICdyZXNvdXJjZScsXG4gIHJlc3RhcnQ6ICdyZXN0YXJ0JyxcbiAgcmVzdWx0OiAncmVzdWx0JyxcbiAgcmVzdWx0czogJ3Jlc3VsdHMnLFxuICByb3RhdGU6ICdyb3RhdGUnLFxuICByeDogJ3J4JyxcbiAgcnk6ICdyeScsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgc2VlZDogJ3NlZWQnLFxuICBzaGFwZXJlbmRlcmluZzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAnc2xvcGUnLFxuICBzcGFjaW5nOiAnc3BhY2luZycsXG4gIHNwZWN1bGFyY29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJleHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogJ3NwZWVkJyxcbiAgc3ByZWFkbWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRvZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAnc3RlbWgnLFxuICBzdGVtdjogJ3N0ZW12JyxcbiAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3Bjb2xvcjogJ3N0b3BDb2xvcicsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BvcGFjaXR5OiAnc3RvcE9wYWNpdHknLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN0cm9rZTogJ3N0cm9rZScsXG4gIHN0cm9rZWRhc2hhcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZWRhc2hvZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICBzdHJva2VsaW5lY2FwOiAnc3Ryb2tlTGluZWNhcCcsXG4gICdzdHJva2UtbGluZWNhcCc6ICdzdHJva2VMaW5lY2FwJyxcbiAgc3Ryb2tlbGluZWpvaW46ICdzdHJva2VMaW5lam9pbicsXG4gICdzdHJva2UtbGluZWpvaW4nOiAnc3Ryb2tlTGluZWpvaW4nLFxuICBzdHJva2VtaXRlcmxpbWl0OiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tld2lkdGg6ICdzdHJva2VXaWR0aCcsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VvcGFjaXR5OiAnc3Ryb2tlT3BhY2l0eScsXG4gICdzdHJva2Utb3BhY2l0eSc6ICdzdHJva2VPcGFjaXR5JyxcbiAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJyxcbiAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJyxcbiAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtbGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFnZScsXG4gIHRhYmxldmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gIHRhcmdldHk6ICd0YXJnZXRZJyxcbiAgdGV4dGFuY2hvcjogJ3RleHRBbmNob3InLFxuICAndGV4dC1hbmNob3InOiAndGV4dEFuY2hvcicsXG4gIHRleHRkZWNvcmF0aW9uOiAndGV4dERlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uJzogJ3RleHREZWNvcmF0aW9uJyxcbiAgdGV4dGxlbmd0aDogJ3RleHRMZW5ndGgnLFxuICB0ZXh0cmVuZGVyaW5nOiAndGV4dFJlbmRlcmluZycsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86ICd0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zZm9ybScsXG4gIHR5cGVvZjogJ3R5cGVvZicsXG4gIHUxOiAndTEnLFxuICB1MjogJ3UyJyxcbiAgdW5kZXJsaW5lcG9zaXRpb246ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gICd1bmRlcmxpbmUtcG9zaXRpb24nOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICB1bmRlcmxpbmV0aGlja25lc3M6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAndW5pY29kZScsXG4gIHVuaWNvZGViaWRpOiAndW5pY29kZUJpZGknLFxuICAndW5pY29kZS1iaWRpJzogJ3VuaWNvZGVCaWRpJyxcbiAgdW5pY29kZXJhbmdlOiAndW5pY29kZVJhbmdlJyxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNwZXJlbTogJ3VuaXRzUGVyRW0nLFxuICAndW5pdHMtcGVyLWVtJzogJ3VuaXRzUGVyRW0nLFxuICB1bnNlbGVjdGFibGU6ICd1bnNlbGVjdGFibGUnLFxuICB2YWxwaGFiZXRpYzogJ3ZBbHBoYWJldGljJyxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogJ3ZhbHVlcycsXG4gIHZlY3RvcmVmZmVjdDogJ3ZlY3RvckVmZmVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JzogJ3ZlY3RvckVmZmVjdCcsXG4gIHZlcnNpb246ICd2ZXJzaW9uJyxcbiAgdmVydGFkdnk6ICd2ZXJ0QWR2WScsXG4gICd2ZXJ0LWFkdi15JzogJ3ZlcnRBZHZZJyxcbiAgdmVydG9yaWdpbng6ICd2ZXJ0T3JpZ2luWCcsXG4gICd2ZXJ0LW9yaWdpbi14JzogJ3ZlcnRPcmlnaW5YJyxcbiAgdmVydG9yaWdpbnk6ICd2ZXJ0T3JpZ2luWScsXG4gICd2ZXJ0LW9yaWdpbi15JzogJ3ZlcnRPcmlnaW5ZJyxcbiAgdmhhbmdpbmc6ICd2SGFuZ2luZycsXG4gICd2LWhhbmdpbmcnOiAndkhhbmdpbmcnLFxuICB2aWRlb2dyYXBoaWM6ICd2SWRlb2dyYXBoaWMnLFxuICAndi1pZGVvZ3JhcGhpYyc6ICd2SWRlb2dyYXBoaWMnLFxuICB2aWV3Ym94OiAndmlld0JveCcsXG4gIHZpZXd0YXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogJ3Zpc2liaWxpdHknLFxuICB2bWF0aGVtYXRpY2FsOiAndk1hdGhlbWF0aWNhbCcsXG4gICd2LW1hdGhlbWF0aWNhbCc6ICd2TWF0aGVtYXRpY2FsJyxcbiAgdm9jYWI6ICd2b2NhYicsXG4gIHdpZHRoczogJ3dpZHRocycsXG4gIHdvcmRzcGFjaW5nOiAnd29yZFNwYWNpbmcnLFxuICAnd29yZC1zcGFjaW5nJzogJ3dvcmRTcGFjaW5nJyxcbiAgd3JpdGluZ21vZGU6ICd3cml0aW5nTW9kZScsXG4gICd3cml0aW5nLW1vZGUnOiAnd3JpdGluZ01vZGUnLFxuICB4MTogJ3gxJyxcbiAgeDI6ICd4MicsXG4gIHg6ICd4JyxcbiAgeGNoYW5uZWxzZWxlY3RvcjogJ3hDaGFubmVsU2VsZWN0b3InLFxuICB4aGVpZ2h0OiAneEhlaWdodCcsXG4gICd4LWhlaWdodCc6ICd4SGVpZ2h0JyxcbiAgeGxpbmthY3R1YXRlOiAneGxpbmtBY3R1YXRlJyxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmthcmNyb2xlOiAneGxpbmtBcmNyb2xlJyxcbiAgJ3hsaW5rOmFyY3JvbGUnOiAneGxpbmtBcmNyb2xlJyxcbiAgeGxpbmtocmVmOiAneGxpbmtIcmVmJyxcbiAgJ3hsaW5rOmhyZWYnOiAneGxpbmtIcmVmJyxcbiAgeGxpbmtyb2xlOiAneGxpbmtSb2xlJyxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtzaG93OiAneGxpbmtTaG93JyxcbiAgJ3hsaW5rOnNob3cnOiAneGxpbmtTaG93JyxcbiAgeGxpbmt0aXRsZTogJ3hsaW5rVGl0bGUnLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rdHlwZTogJ3hsaW5rVHlwZScsXG4gICd4bGluazp0eXBlJzogJ3hsaW5rVHlwZScsXG4gIHhtbGJhc2U6ICd4bWxCYXNlJyxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxsYW5nOiAneG1sTGFuZycsXG4gICd4bWw6bGFuZyc6ICd4bWxMYW5nJyxcbiAgeG1sbnM6ICd4bWxucycsXG4gICd4bWw6c3BhY2UnOiAneG1sU3BhY2UnLFxuICB4bWxuc3hsaW5rOiAneG1sbnNYbGluaycsXG4gICd4bWxuczp4bGluayc6ICd4bWxuc1hsaW5rJyxcbiAgeG1sc3BhY2U6ICd4bWxTcGFjZScsXG4gIHkxOiAneTEnLFxuICB5MjogJ3kyJyxcbiAgeTogJ3knLFxuICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gIHo6ICd6JyxcbiAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG52YXIgYXJpYVByb3BlcnRpZXMgPSB7XG4gICdhcmlhLWN1cnJlbnQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBzdGFuZGFyZE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YXIgaW52YWxpZFByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh0eXBlICE9PSAnaW5wdXQnICYmIHR5cGUgIT09ICd0ZXh0YXJlYScgJiYgdHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNpbicgfHwgbG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3Vzb3V0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuXG5cbiAgICBpZiAoZXZlbnRSZWdpc3RyeSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBJZiBubyBldmVudCBwbHVnaW5zIGhhdmUgYmVlbiBpbmplY3RlZCwgd2UgYXJlIGluIGEgc2VydmVyIGVudmlyb25tZW50LlxuICAgICAgLy8gU28gd2UgY2FuJ3QgdGVsbCBpZiB0aGUgZXZlbnQgbmFtZSBpcyBjb3JyZWN0IGZvciBzdXJlLCBidXQgd2UgY2FuIGZpbHRlclxuICAgICAgLy8gb3V0IGtub3duIGJhZCBvbmVzIGxpa2UgYG9uY2xpY2tgLiBXZSBjYW4ndCBzdWdnZXN0IGEgc3BlY2lmaWMgcmVwbGFjZW1lbnQgdGhvdWdoLlxuICAgICAgaWYgKElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gJyArICdSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuXG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpbm5lcmh0bWwnKSB7XG4gICAgICBlcnJvcignRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnYXJpYScpIHtcbiAgICAgIGVycm9yKCdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICAgIHZhciBpc1Jlc2VydmVkID0gcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDsgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkICYmIG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTm93IHRoYXQgd2UndmUgdmFsaWRhdGVkIGNhc2luZywgZG8gbm90IHZhbGlkYXRlXG4gICAgLy8gZGF0YSB0eXBlcyBmb3IgcmVzZXJ2ZWQgcHJvcHNcblxuXG4gICAgaWYgKGlzUmVzZXJ2ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2FybiB3aGVuIGEga25vd24gYXR0cmlidXRlIGlzIGEgYmFkIHR5cGVcblxuXG4gICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBwYXNzaW5nIHRoZSBzdHJpbmdzICdmYWxzZScgb3IgJ3RydWUnIGludG8gYSBib29sZWFuIHByb3BcblxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSAmJiBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNDtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRmFsbGJhY2sgdG8gbmF0aXZlRXZlbnQuc3JjRWxlbWVudCBmb3IgSUU5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDZcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdzsgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuXG4gIGlmICh0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XG4gIH0gLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblxuXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG52YXIgcmVzdG9yZUltcGwgPSBudWxsO1xudmFyIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xudmFyIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAvLyBXZSBwZXJmb3JtIHRoaXMgdHJhbnNsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlXG4gIC8vIGFsd2F5cyByZWNlaXZlIHRoZSBjb3JyZWN0IGZpYmVyIGhlcmVcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgLy8gVW5tb3VudGVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIHJlc3RvcmVJbXBsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlTm9kZSA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZC5cblxuICBpZiAoc3RhdGVOb2RlKSB7XG4gICAgdmFyIF9wcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICAgIHJlc3RvcmVJbXBsKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIF9wcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKGltcGwpIHtcbiAgcmVzdG9yZUltcGwgPSBpbXBsO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZHNTdGF0ZVJlc3RvcmUoKSB7XG4gIHJldHVybiByZXN0b3JlVGFyZ2V0ICE9PSBudWxsIHx8IHJlc3RvcmVRdWV1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCkge1xuICBpZiAoIXJlc3RvcmVUYXJnZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gcmVzdG9yZVRhcmdldDtcbiAgdmFyIHF1ZXVlZFRhcmdldHMgPSByZXN0b3JlUXVldWU7XG4gIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xuICByZXN0b3JlUXVldWUgPSBudWxsO1xuICByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChxdWV1ZWRUYXJnZXRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChxdWV1ZWRUYXJnZXRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4vLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuLy8gZXZlcnl0aGluZyBpcyBiYXRjaGVkIGJ5IGRlZmF1bHQuIFdlJ2xsIHRoZW4gaGF2ZSBhIHNpbWlsYXIgQVBJIHRvIG9wdC1vdXQgb2Zcbi8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4vLyBEZWZhdWx0c1xuXG52YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcblxudmFyIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGZuKGEsIGIsIGMsIGQpO1xufTtcblxudmFyIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBiYXRjaGVkVXBkYXRlc0ltcGw7XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbnZhciBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgcmVzdG9yZVN0YXRlSWZOZWVkZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYm9va2tlZXBpbmcpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0JhdGNoaW5nRXZlbnRVcGRhdGVzKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMsIGQpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICB7XG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKF9iYXRjaGVkVXBkYXRlc0ltcGwsIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZGlzY3JldGVVcGRhdGVzSW1wbCA9IF9kaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbDtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZUVudGVyJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gIGlmIChzdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGBcIiArIHJlZ2lzdHJhdGlvbk5hbWUgKyBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgKyB0eXBlb2YgbGlzdGVuZXIgKyBcImAgdHlwZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxudmFyIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7IC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydCBldmVudHMgd2l0aCBwYXNzaXZlIGxpc3RlbmVyc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTsgLy8gJEZsb3dGaXhNZTogSWdub3JlIEZsb3cgY29tcGxhaW5pbmcgYWJvdXQgbmVlZGluZyBhIHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZDtcblxue1xuICAvLyBJbiBERVYgbW9kZSwgd2Ugc3dhcCBvdXQgaW52b2tlR3VhcmRlZENhbGxiYWNrIGZvciBhIHNwZWNpYWwgdmVyc2lvblxuICAvLyB0aGF0IHBsYXlzIG1vcmUgbmljZWx5IHdpdGggdGhlIGJyb3dzZXIncyBEZXZUb29scy4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmVcbiAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgLy8gZnVuY3Rpb25zIGluIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYW5kIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24gb2ZcbiAgLy8gaW52b2tlR3VhcmRlZENhbGxiYWNrIHVzZXMgYSB0cnktY2F0Y2gsIGFsbCB1c2VyIGV4Y2VwdGlvbnMgYXJlIHRyZWF0ZWRcbiAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAvLyB0YWtlcyB0aGUgZXh0cmEgc3RlcCBvZiBlbmFibGluZyBwYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9ucy4gVGhpcyBpc1xuICAvLyB1bmludHVpdGl2ZSwgdGhvdWdoLCBiZWNhdXNlIGV2ZW4gdGhvdWdoIFJlYWN0IGhhcyBjYXVnaHQgdGhlIGVycm9yLCBmcm9tXG4gIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAvL1xuICAvLyBUbyBwcmVzZXJ2ZSB0aGUgZXhwZWN0ZWQgXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IsIHdlIGRvbid0IHVzZSBhXG4gIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAvLyBET00gbm9kZSwgYW5kIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnJvbSBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlclxuICAvLyBmb3IgdGhhdCBmYWtlIGV2ZW50LiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzLCB0aGUgZXJyb3IgaXMgXCJjYXB0dXJlZFwiIHVzaW5nXG4gIC8vIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIuIEJ1dCBiZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5zIGluIGEgZGlmZmVyZW50XG4gIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAvLyBFZmZlY3RpdmVseSwgdGhpcyBnaXZlcyB1cyB0cnktY2F0Y2ggYmVoYXZpb3Igd2l0aG91dCBhY3R1YWxseSB1c2luZ1xuICAvLyB0cnktY2F0Y2guIE5lYXQhXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0RldihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIHZhciBkaWRDYWxsID0gZmFsc2U7IC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuIFdlXG4gICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAvLyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGVycm9ycywgYGRpZEVycm9yYCB3aWxsIG5ldmVyIGJlXG4gICAgICAvLyBzZXQgdG8gZmFsc2UuIFRoaXMgc3RyYXRlZ3kgd29ya3MgZXZlbiBpZiB0aGUgYnJvd3NlciBpcyBmbGFreSBhbmRcbiAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgLy8gdGhlIGVycm9yIGV2ZW50IGF0IGFsbC5cblxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG5cbiAgICAgIHZhciB3aW5kb3dFdmVudCA9IHdpbmRvdy5ldmVudDsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIGRlc2NyaXB0b3Igb2Ygd2luZG93LmV2ZW50IHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZXZlbnRcbiAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgIHZhciB3aW5kb3dFdmVudERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2V2ZW50Jyk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlc3RvcmVBZnRlckRpc3BhdGNoKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuXG5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjaygpIHtcbiAgICAgICAgZGlkQ2FsbCA9IHRydWU7XG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZENhbGwgJiYgZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbi8vIERvbid0IGNoYW5nZSB0aGVzZSB0d28gdmFsdWVzLiBUaGV5J3JlIHVzZWQgYnkgUmVhY3QgRGV2IFRvb2xzLlxudmFyIE5vRmxhZ3MgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG52YXIgUGxhY2VtZW50QW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG44O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyOyAvLyBUT0RPIChlZmZlY3RzKSBSZW1vdmUgdGhpcyBiaXQgb25jZSB0aGUgbmV3IHJlY29uY2lsZXIgaXMgc3luY2VkIHRvIHRoZSBvbGQuXG5cbnZhciBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYgPVxuLyogICAgICovXG44MTkyO1xudmFyIEh5ZHJhdGluZyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgSHlkcmF0aW5nQW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgKi9cbjkzMjsgLy8gVW5pb24gb2YgYWxsIGhvc3QgZWZmZWN0c1xuXG52YXIgSG9zdEVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgICAgICAqL1xuMjA0NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbi8qICovXG4xNjM4NDsgLy8gU3RhdGljIHRhZ3MgZGVzY3JpYmUgYXNwZWN0cyBvZiBhIGZpYmVyIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlcixcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHROb2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChub2RlLnJldHVybikge1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgIC8vIHJlbmRlckNvbnRhaW5lckludG9TdWJ0cmVlLlxuICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgLy8gdGhhdCBoYXMgYmVlbiB1bm1vdW50ZWQuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJGcm9tRmliZXIoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgPyBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoIShnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoIShuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoYS5hbHRlcm5hdGUgPT09IGIpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAmJiBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICB2YXIgcGFyZW50RmliZXJBbHRlcm5hdGUgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChldmVudFR5cGUpIHtcbiAgcmV0dXJuIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGV2ZW50VHlwZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgcXVldWVkRGlzY3JldGVFdmVudHMucHVzaChxdWV1ZWRFdmVudCk7XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKF9wb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KGV4aXN0aW5nUXVldWVkRXZlbnQsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBfZmliZXIyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncywgYW5kIHRoZSB0YXJnZXRDb250YWluZXJzLCBhbmRcbiAgLy8gc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgaWYgKHRhcmdldENvbnRhaW5lciAhPT0gbnVsbCAmJiB0YXJnZXRDb250YWluZXJzLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSA9PT0gLTEpIHtcbiAgICB0YXJnZXRDb250YWluZXJzLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBmb2N1c0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgZHJhZ0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZERyYWcsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGRyYWdFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZE1vdXNlLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgX3BvaW50ZXJJZDIgPSBfcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChfcG9pbnRlcklkMiwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KF9wb2ludGVySWQyKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHF1ZXVlZFRhcmdldC5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIEZpcnN0IHJlcGxheSBkaXNjcmV0ZSBldmVudHMuXG5cbiAgd2hpbGUgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dERpc2NyZXRlRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXTtcblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyBib3VuZGFyeSB0byB1bmJsb2NrXG4gICAgICAvLyB0aGUgbmV4dCBkaXNjcmV0ZSBldmVudC5cbiAgICAgIHZhciBfZmliZXI0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKF9maWJlcjQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IG5leHREaXNjcmV0ZUV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChuZXh0RGlzY3JldGVFdmVudC5kb21FdmVudE5hbWUsIG5leHREaXNjcmV0ZUV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBEaXNjcmV0ZUV2ZW50ID0gMDtcbnZhciBVc2VyQmxvY2tpbmdFdmVudCA9IDE7XG52YXIgQ29udGludW91c0V2ZW50ID0gMjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgdmVuZG9yUHJlZml4ZXMgPSB7XG4gIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLFxuICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSxcbiAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25TdGFydCcpLFxuICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxufTtcbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICovXG5cbnZhciBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fTtcbi8qKlxuICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cblxudmFyIHN0eWxlID0ge307XG4vKipcbiAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cblxuaWYgKGNhblVzZURPTSkge1xuICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOyAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG5cbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjtcbiAgfSAvLyBTYW1lIGFzIGFib3ZlXG5cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuLyoqXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xuICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudE5hbWU7XG59XG5cbnZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9uJyk7XG52YXIgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0Jyk7XG52YXIgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCk7XG52YXIgZXZlbnRQcmlvcml0aWVzID0gbmV3IE1hcCgpOyAvLyBXZSBzdG9yZSBtb3N0IG9mIHRoZSBldmVudHMgaW4gdGhpcyBtb2R1bGUgaW4gcGFpcnMgb2YgdHdvIHN0cmluZ3Mgc28gd2UgY2FuIHJlLXVzZVxuLy8gdGhlIGNvZGUgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHNhbWUgbG9naWMgZm9yIGV2ZW50IHByaW9yaXRpemF0aW9uIGFuZCB0aGF0IG9mIHRoZVxuLy8gU2ltcGxlRXZlbnRQbHVnaW4uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgdGhlIGFpbSBpcyB0byByZWR1Y2UgY29kZVxuLy8gZHVwbGljYXRpb24gKGZvciB3aGljaCB0aGVyZSB3b3VsZCBiZSBxdWl0ZSBhIGJpdCkuIEZvciB0aGUgZXZlbnRzIHRoYXQgYXJlIG5vdCBuZWVkZWRcbi8vIGZvciB0aGUgU2ltcGxlRXZlbnRQbHVnaW4gKG90aGVyRGlzY3JldGVFdmVudHMpIHdlIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5IGFzIGFuXG4vLyBhcnJheSBvZiB0b3AgbGV2ZWwgZXZlbnRzLlxuLy8gTGFzdGx5LCB3ZSBpZ25vcmUgcHJldHRpZXIgc28gd2UgY2FuIGtlZXAgdGhlIGZvcm1hdHRpbmcgc2FuZS5cbi8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2NhbmNlbCcsICdjYW5jZWwnLCAnY2xpY2snLCAnY2xpY2snLCAnY2xvc2UnLCAnY2xvc2UnLCAnY29udGV4dG1lbnUnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjb3B5JywgJ2N1dCcsICdjdXQnLCAnYXV4Y2xpY2snLCAnYXV4Q2xpY2snLCAnZGJsY2xpY2snLCAnZG91YmxlQ2xpY2snLCAvLyBDYXJlZnVsIVxuJ2RyYWdlbmQnLCAnZHJhZ0VuZCcsICdkcmFnc3RhcnQnLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHJvcCcsICdmb2N1c2luJywgJ2ZvY3VzJywgLy8gQ2FyZWZ1bCFcbidmb2N1c291dCcsICdibHVyJywgLy8gQ2FyZWZ1bCFcbidpbnB1dCcsICdpbnB1dCcsICdpbnZhbGlkJywgJ2ludmFsaWQnLCAna2V5ZG93bicsICdrZXlEb3duJywgJ2tleXByZXNzJywgJ2tleVByZXNzJywgJ2tleXVwJywgJ2tleVVwJywgJ21vdXNlZG93bicsICdtb3VzZURvd24nLCAnbW91c2V1cCcsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxheScsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlckRvd24nLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJVcCcsICdyYXRlY2hhbmdlJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAncmVzZXQnLCAnc2Vla2VkJywgJ3NlZWtlZCcsICdzdWJtaXQnLCAnc3VibWl0JywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoRW5kJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVjaGFuZ2UnLCAndm9sdW1lQ2hhbmdlJ107XG52YXIgb3RoZXJEaXNjcmV0ZUV2ZW50cyA9IFsnY2hhbmdlJywgJ3NlbGVjdGlvbmNoYW5nZScsICd0ZXh0SW5wdXQnLCAnY29tcG9zaXRpb25zdGFydCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnVwZGF0ZSddO1xuXG5cbnZhciB1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydkcmFnJywgJ2RyYWcnLCAnZHJhZ2VudGVyJywgJ2RyYWdFbnRlcicsICdkcmFnZXhpdCcsICdkcmFnRXhpdCcsICdkcmFnbGVhdmUnLCAnZHJhZ0xlYXZlJywgJ2RyYWdvdmVyJywgJ2RyYWdPdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZU1vdmUnLCAnbW91c2VvdXQnLCAnbW91c2VPdXQnLCAnbW91c2VvdmVyJywgJ21vdXNlT3ZlcicsICdwb2ludGVybW92ZScsICdwb2ludGVyTW92ZScsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJPdXQnLCAncG9pbnRlcm92ZXInLCAncG9pbnRlck92ZXInLCAnc2Nyb2xsJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG9nZ2xlJywgJ3RvdWNobW92ZScsICd0b3VjaE1vdmUnLCAnd2hlZWwnLCAnd2hlZWwnXTsgLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnYWJvcnQnLCAnYWJvcnQnLCBBTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQU5JTUFUSU9OX0lURVJBVElPTiwgJ2FuaW1hdGlvbkl0ZXJhdGlvbicsIEFOSU1BVElPTl9TVEFSVCwgJ2FuaW1hdGlvblN0YXJ0JywgJ2NhbnBsYXknLCAnY2FuUGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdjYW5QbGF5VGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlbmRlZCcsICdlcnJvcicsICdlcnJvcicsICdnb3Rwb2ludGVyY2FwdHVyZScsICdnb3RQb2ludGVyQ2FwdHVyZScsICdsb2FkJywgJ2xvYWQnLCAnbG9hZGVkZGF0YScsICdsb2FkZWREYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdsb2FkU3RhcnQnLCAnbG9zdHBvaW50ZXJjYXB0dXJlJywgJ2xvc3RQb2ludGVyQ2FwdHVyZScsICdwbGF5aW5nJywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncHJvZ3Jlc3MnLCAnc2Vla2luZycsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd0aW1lVXBkYXRlJywgVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgJ3dhaXRpbmcnLCAnd2FpdGluZyddO1xuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqXG4gKiBpbnRvXG4gKlxuICogdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKFtcbiAqICAgWydhYm9ydCcsICdvbkFib3J0J10sXG4gKiBdKTtcbiAqXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0uXG4gKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgLy8gQXMgdGhlIGV2ZW50IHR5cGVzIGFyZSBpbiBwYWlycyBvZiB0d28sIHdlIG5lZWQgdG8gaXRlcmF0ZVxuICAvLyB0aHJvdWdoIGluIHR3b3MuIFRoZSBldmVudHMgYXJlIGluIHBhaXJzIG9mIHR3byB0byBzYXZlIGNvZGVcbiAgLy8gYW5kIGltcHJvdmUgaW5pdCBwZXJmIG9mIHByb2Nlc3NpbmcgdGhpcyBhcnJheSwgYXMgaXQgd2lsbFxuICAvLyByZXN1bHQgaW4gZmFyIGZld2VyIG9iamVjdCBhbGxvY2F0aW9ucyBhbmQgcHJvcGVydHkgYWNjZXNzZXNcbiAgLy8gaWYgd2Ugb25seSB1c2UgdGhyZWUgYXJyYXlzIHRvIHByb2Nlc3MgYWxsIHRoZSBjYXRlZ29yaWVzIG9mXG4gIC8vIGluc3RlYWQgb2YgdHVwbGVzLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdG9wRXZlbnQgPSBldmVudFR5cGVzW2ldO1xuICAgIHZhciBldmVudCA9IGV2ZW50VHlwZXNbaSArIDFdO1xuICAgIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICAgIHZhciByZWFjdE5hbWUgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KHRvcEV2ZW50LCBwcmlvcml0eSk7XG4gICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KHRvcEV2ZW50LCByZWFjdE5hbWUpO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFt0b3BFdmVudF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEV2ZW50UHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KGV2ZW50VHlwZXNbaV0sIHByaW9yaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSkge1xuICB2YXIgcHJpb3JpdHkgPSBldmVudFByaW9yaXRpZXMuZ2V0KGRvbUV2ZW50TmFtZSk7IC8vIERlZmF1bHQgdG8gYSBDb250aW51b3VzRXZlbnQuIE5vdGU6IHdlIG1pZ2h0XG4gIC8vIHdhbnQgdG8gd2FybiBpZiB3ZSBjYW4ndCBkZXRlY3QgdGhlIHByaW9yaXR5XG4gIC8vIGZvciB0aGUgZXZlbnQuXG5cbiAgcmV0dXJuIHByaW9yaXR5ID09PSB1bmRlZmluZWQgPyBDb250aW51b3VzRXZlbnQgOiBwcmlvcml0eTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgRGlzY3JldGVFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIFVzZXJCbG9ja2luZ0V2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIENvbnRpbnVvdXNFdmVudCk7XG4gIHNldEV2ZW50UHJpb3JpdGllcyhvdGhlckRpc2NyZXRlRXZlbnRzLCBEaXNjcmV0ZUV2ZW50KTtcbn1cblxudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG5cbnZhciBTeW5jTGFuZVByaW9yaXR5ID0gMTU7XG52YXIgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkgPSAxNDtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTM7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSA9IDEyO1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDExO1xudmFyIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSA9IDEwO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA5O1xudmFyIERlZmF1bHRMYW5lUHJpb3JpdHkgPSA4O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eSA9IDc7XG52YXIgVHJhbnNpdGlvblByaW9yaXR5ID0gNjtcbnZhciBSZXRyeUxhbmVQcmlvcml0eSA9IDU7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gNDtcbnZhciBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMztcbnZhciBJZGxlTGFuZVByaW9yaXR5ID0gMjtcbnZhciBPZmZzY3JlZW5MYW5lUHJpb3JpdHkgPSAxO1xudmFyIE5vTGFuZVByaW9yaXR5ID0gMDtcbnZhciBUb3RhbExhbmVzID0gMzE7XG52YXIgTm9MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIE5vTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBTeW5jQmF0Y2hlZExhbmUgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgKi9cbjQ7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjQ7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgKi9cbjMyO1xudmFyIElucHV0Q29udGludW91c0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjE5MjtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgRGVmYXVsdExhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4zNTg0O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxODYxMTI7XG52YXIgUmV0cnlMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNjI5MTQ1NjA7XG52YXIgU29tZVJldHJ5TGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4zMzU1NDQzMjtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBOb25JZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44MDUzMDYzNjg7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDtcbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShuZXdMYW5lUHJpb3JpdHkpIHtcbn0gLy8gXCJSZWdpc3RlcnNcIiB1c2VkIHRvIFwicmV0dXJuXCIgbXVsdGlwbGUgdmFsdWVzXG4vLyBVc2VkIGJ5IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIGFuZCBnZXROZXh0TGFuZXM6XG5cbnZhciByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIGlmICgoU3luY0xhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9XG5cbiAgaWYgKChTeW5jQmF0Y2hlZExhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG4gIH1cblxuICBpZiAoKElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dERpc2NyZXRlTGFuZXMgPSBJbnB1dERpc2NyZXRlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXREaXNjcmV0ZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dERpc2NyZXRlTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dENvbnRpbnVvdXNMYW5lcyA9IElucHV0Q29udGludW91c0xhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0Q29udGludW91c0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0Q29udGludW91c0xhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgZGVmYXVsdExhbmVzID0gRGVmYXVsdExhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGRlZmF1bHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gZGVmYXVsdExhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5O1xuICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uTGFuZXMgPSBUcmFuc2l0aW9uTGFuZXMgJiBsYW5lcztcblxuICBpZiAodHJhbnNpdGlvbkxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25MYW5lcztcbiAgfVxuXG4gIHZhciByZXRyeUxhbmVzID0gUmV0cnlMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChyZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBSZXRyeUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gcmV0cnlMYW5lcztcbiAgfVxuXG4gIGlmIChsYW5lcyAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJZGxlSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlkbGVMYW5lcyA9IElkbGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpZGxlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlkbGVMYW5lcztcbiAgfVxuXG4gIGlmICgoT2Zmc2NyZWVuTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gT2Zmc2NyZWVuTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG5cbiAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICByZXR1cm4gbGFuZXM7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVMYW5lUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vTGFuZVByaW9yaXR5O1xuICB9XG59XG5mdW5jdGlvbiBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KGxhbmVQcmlvcml0eSkge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb1ByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgaWYgKHBlbmRpbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIG5leHRMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdmFyIGV4cGlyZWRMYW5lcyA9IHJvb3QuZXhwaXJlZExhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBDaGVjayBpZiBhbnkgd29yayBoYXMgZXhwaXJlZC5cblxuICBpZiAoZXhwaXJlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbmV4dExhbmVzID0gZXhwaXJlZExhbmVzO1xuICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGFibGUgaWYgd2UncmUgc3VzcGVuZGVkXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBoaWdoZXIgcHJpb3JpdHkgbGFuZXMsIHdlJ2xsIGluY2x1ZGUgdGhlbSBldmVuIGlmIHRoZXlcbiAgLy8gYXJlIHN1c3BlbmRlZC5cblxuXG4gIG5leHRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKG5leHRMYW5lcyk7IC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciwgc3dpdGNoaW5nIGxhbmVzIHdpbGwgaW50ZXJydXB0XG4gIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2lwTGFuZXMpO1xuICAgIHZhciB3aXBMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICAgIGlmIChuZXh0TGFuZVByaW9yaXR5IDw9IHdpcExhbmVQcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IG5leHRMYW5lUHJpb3JpdHk7XG4gICAgfVxuICB9IC8vIENoZWNrIGZvciBlbnRhbmdsZWQgbGFuZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYXRjaC5cbiAgLy9cbiAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gIC8vIGluIGEgYmF0Y2ggdGhhdCBkb2VzIG5vdCBhbHNvIGluY2x1ZGUgdGhlIG90aGVyIGxhbmUuIFR5cGljYWxseSB3ZSBkbyB0aGlzXG4gIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAvLyBpdCdzIGFscmVhZHkgcmVuZGVyaW5nLCB3ZSB3b24ndCBpbnRlcnJ1cHQgaXQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNpbmNlXG4gIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gIC8vIGNvbXBsZXRlZCB3b3JrIGluIG9yZGVyIHRvIGRvIGl0LlxuICAvL1xuICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCwgbGlrZVxuICAvLyB1c2VNdXRhYmxlU291cmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGFydGlhbCB3b3JrIGF0IHRoZVxuICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cblxuICB2YXIgZW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuXG4gIGlmIChlbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgIHZhciBsYW5lcyA9IG5leHRMYW5lcyAmIGVudGFuZ2xlZExhbmVzO1xuXG4gICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICBuZXh0TGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcykge1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBldmVudFRpbWUgPSBldmVudFRpbWVzW2luZGV4XTtcblxuICAgIGlmIChldmVudFRpbWUgPiBtb3N0UmVjZW50RXZlbnRUaW1lKSB7XG4gICAgICBtb3N0UmVjZW50RXZlbnRUaW1lID0gZXZlbnRUaW1lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgcmV0dXJuIG1vc3RSZWNlbnRFdmVudFRpbWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBFeHBpcmF0aW9uIGhldXJpc3RpYyBpcyBjb25zdGFudCBwZXIgbGFuZSwgc28gY291bGQgdXNlIGEgbWFwLlxuICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lKTtcbiAgdmFyIHByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgaWYgKHByaW9yaXR5ID49IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLiBXaGVuXG4gICAgLy8gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZyB0aGVyZSdzXG4gICAgLy8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mIHN5bmNocm9ub3VzXG4gICAgLy8gdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlXG4gICAgLy8gc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IGV4cGlyYXRpb25cbiAgICAvLyB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb24gZG9lcyBoYXBwZW4uXG4gICAgLy9cbiAgICAvLyBBbHNvIG5vdGUgdGhhdCwgaW4gdGhlIGNhc2Ugb2YgdXNlciBpbnB1dCBzcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBzb29uIG5vXG4gICAgLy8gbG9uZ2VyIGJlIGFuIGlzc3VlIGJlY2F1c2Ugd2UgcGxhbiB0byBtYWtlIHVzZXIgaW5wdXQgc3luY2hyb25vdXMgYnlcbiAgICAvLyBkZWZhdWx0ICh1bnRpbCB5b3UgZW50ZXIgYHN0YXJ0VHJhbnNpdGlvbmAsIG9mIGNvdXJzZS4pXG4gICAgLy9cbiAgICAvLyBJZiB3ZXJlbid0IHBsYW5uaW5nIHRvIG1ha2UgdGhlc2UgdXBkYXRlcyBzeW5jaHJvbm91cyBzb29uIGFueXdheSwgSVxuICAgIC8vIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBudW1iZXIgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyLlxuICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgfSBlbHNlIGlmIChwcmlvcml0eSA+PSBUcmFuc2l0aW9uUHJpb3JpdHkpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1MDAwO1xuICB9IGVsc2Uge1xuICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG5cbiAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpIHtcbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKSB7XG4gIHJldHVybiByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIGEgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRVcGRhdGVMYW5lKGxhbmVQcmlvcml0eSwgd2lwTGFuZXMpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTIgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dENvbnRpbnVvdXNMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMiA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoRGVmYXVsdExhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIHRoZSBkZWZhdWx0IGxhbmVzIGFyZSBhbHJlYWR5IGJlaW5nIHdvcmtlZCBvbiwgbG9vayBmb3IgYVxuICAgICAgICAgIC8vIGxhbmUgaW4gdGhlIHRyYW5zaXRpb24gcmFuZ2UuXG4gICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgICAgLy8gQWxsIHRoZSB0cmFuc2l0aW9uIGxhbmVzIGFyZSB0YWtlbiwgdG9vLiBUaGlzIHNob3VsZCBiZSB2ZXJ5XG4gICAgICAgICAgICAvLyByYXJlLCBidXQgYXMgYSBsYXN0IHJlc29ydCwgcGljayBhIGRlZmF1bHQgbGFuZS4gVGhpcyB3aWxsIGhhdmVcbiAgICAgICAgICAgIC8vIHRoZSBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUzO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6IC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRUcmFuc2l0aW9uTGFuZSBpbnN0ZWFkXG5cbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFJldHJ5TGFuZSBpbnN0ZWFkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICB9XG4gIH1cbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRUcmFuc2l0aW9uTGFuZSh3aXBMYW5lcywgcGVuZGluZ0xhbmVzKSB7XG4gIC8vIEZpcnN0IGxvb2sgZm9yIGxhbmVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5jbGFpbWVkLCBpLmUuIGhhdmUgbm9cbiAgLy8gcGVuZGluZyB3b3JrLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH5wZW5kaW5nTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiBhbGwgbGFuZXMgaGF2ZSBwZW5kaW5nIHdvcmssIGxvb2sgZm9yIGEgbGFuZSB0aGF0IGlzbid0IGN1cnJlbnRseVxuICAgIC8vIGJlaW5nIHdvcmtlZCBvbi5cbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgd29ya2VkIG9uLCBwaWNrIGFueSBsYW5lLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFJldHJ5TGFuZSh3aXBMYW5lcykge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgZmluZFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgZmluZHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbm9uLXplcm8gYml0LlxuICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IE5vTGFuZXMgOiAxIDw8IGluZGV4O1xufVxuXG5mdW5jdGlvbiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykgPDwgMSkgLSAxO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gIC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGJpdCBpcyBzZWxlY3RlZDsgeW91IGNhbiBwaWNrIGFueSBiaXQgd2l0aG91dFxuICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICByZXR1cm4gMzEgLSBjbHozMihsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgcmV0dXJuIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICByZXR1cm4gKGEgJiBiKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gKHNldCAmIHN1YnNldCkgPT09IHN1YnNldDtcbn1cbmZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICByZXR1cm4gYSB8IGI7XG59XG5mdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gc2V0ICYgfnN1YnNldDtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gVE9ETzogVGhlb3JldGljYWxseSwgYW55IHVwZGF0ZSB0byBhbnkgbGFuZSBjYW4gdW5ibG9jayBhbnkgb3RoZXIgbGFuZS4gQnV0XG4gIC8vIGl0J3Mgbm90IHByYWN0aWNhbCB0byB0cnkgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIGNvbWJpbmF0aW9uLiBXZSBuZWVkIGFcbiAgLy8gaGV1cmlzdGljIHRvIGRlY2lkZSB3aGljaCBsYW5lcyB0byBhdHRlbXB0IHRvIHJlbmRlciwgYW5kIGluIHdoaWNoIGJhdGNoZXMuXG4gIC8vIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSBoZXVyaXN0aWMgYXMgaW4gdGhlIG9sZCBFeHBpcmF0aW9uVGltZXMgbW9kZWw6XG4gIC8vIHJldHJ5IGFueSBsYW5lIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LCBidXQgZG9uJ3QgdHJ5IHVwZGF0ZXMgYXQgaGlnaGVyXG4gIC8vIHByaW9yaXR5IHdpdGhvdXQgYWxzbyBpbmNsdWRpbmcgdGhlIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMuIFRoaXMgd29ya3Mgd2VsbFxuICAvLyB3aGVuIGNvbnNpZGVyaW5nIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbHMsIGJ1dCBpc24ndFxuICAvLyBzdWZmaWNpZW50IGZvciB1cGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSwgc2luY2Ugd2Ugd2FudCB0byB0cmVhdFxuICAvLyB0aG9zZSB1cGRhdGVzIGFzIHBhcmFsbGVsLlxuICAvLyBVbnN1c3BlbmQgYW55IHVwZGF0ZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eS5cblxuICB2YXIgaGlnaGVyUHJpb3JpdHlMYW5lcyA9IHVwZGF0ZUxhbmUgLSAxOyAvLyBUdXJucyAwYjEwMDAgaW50byAwYjAxMTFcblxuICByb290LnN1c3BlbmRlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KHVwZGF0ZUxhbmUpOyAvLyBXZSBjYW4gYWx3YXlzIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0aW1lc3RhbXAgYmVjYXVzZSB3ZSBwcmVmZXIgdGhlIG1vc3RcbiAgLy8gcmVjZW50IGV2ZW50LCBhbmQgd2UgYXNzdW1lIHRpbWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuXG4gIGV2ZW50VGltZXNbaW5kZXhdID0gZXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7IC8vIFRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBDUFUtYm91bmQuIENsZWFyIHRoZWlyIGV4cGlyYXRpb24gdGltZXMuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMsIGV2ZW50VGltZSkge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpIHtcbiAgcm9vdC5leHBpcmVkTGFuZXMgfD0gSW5wdXREaXNjcmV0ZUxhbmVzICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBoYXNEaXNjcmV0ZUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBJbnB1dERpc2NyZXRlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyB8PSB1cGRhdGVMYW5lICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxudmFyIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrOyAvLyBDb3VudCBsZWFkaW5nIHplcm9zLiBPbmx5IHVzZWQgb24gbGFuZXMsIHNvIGFzc3VtZSBpbnB1dCBpcyBhbiBpbnRlZ2VyLlxuLy8gQmFzZWQgb246XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxuZnVuY3Rpb24gY2x6MzJGYWxsYmFjayhsYW5lcykge1xuICBpZiAobGFuZXMgPT09IDApIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICByZXR1cm4gMzEgLSAobG9nKGxhbmVzKSAvIExOMiB8IDApIHwgMDtcbn1cblxuLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZCB1c2UgZHluYW1pYyBkaXNwYXRjaCBmb3JcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7IC8vIFRPRE86IGNhbiB3ZSBzdG9wIGV4cG9ydGluZyB0aGVzZT9cblxudmFyIF9lbmFibGVkID0gdHJ1ZTsgLy8gVGhpcyBpcyBleHBvcnRlZCBpbiBGQiBidWlsZHMgZm9yIHVzZSBieSBsZWdhY3kgRkIgbGF5ZXIgaW5mcmEuXG4vLyBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYnV0IGl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2FmZS5cblxuZnVuY3Rpb24gc2V0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9lbmFibGVkID0gISFlbmFibGVkO1xufVxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICByZXR1cm4gX2VuYWJsZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKTtcbiAgdmFyIGxpc3RlbmVyV3JhcHBlcjtcblxuICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICBjYXNlIERpc2NyZXRlRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcldyYXBwZXIuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcik7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgfVxuXG4gIGRpc2NyZXRlVXBkYXRlcyhkaXNwYXRjaEV2ZW50LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eShVc2VyQmxvY2tpbmdQcmlvcml0eSQxLCBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhbGxvd1JlcGxheSA9IHRydWU7XG5cbiAge1xuICAgIC8vIFRPRE86IHJlcGxheWluZyBjYXB0dXJlIHBoYXNlIGV2ZW50cyBpcyBjdXJyZW50bHkgYnJva2VuXG4gICAgLy8gYmVjYXVzZSB3ZSB1c2VkIHRvIGRvIGl0IGR1cmluZyB0b3AtbGV2ZWwgbmF0aXZlIGJ1YmJsZSBoYW5kbGVyc1xuICAgIC8vIGJ1dCBub3cgd2UgdXNlIGRpZmZlcmVudCBidWJibGUgYW5kIGNhcHR1cmUgaGFuZGxlcnMuXG4gICAgLy8gSW4gZWFnZXIgbW9kZSwgd2UgYXR0YWNoIGNhcHR1cmUgbGlzdGVuZXJzIGVhcmx5LCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gZmlsdGVyIHRoZW0gb3V0IHVudGlsIHdlIGZpeCB0aGUgbG9naWMgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LlxuICAgIC8vIFRoaXMgY291bGQndmUgYmVlbiBvdXRzaWRlIHRoZSBmbGFnIGJ1dCBJIHB1dCBpdCBpbnNpZGUgdG8gcmVkdWNlIHJpc2suXG4gICAgYWxsb3dSZXBsYXkgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpID09PSAwO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5ICYmIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkgJiYgaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzLCBhbmQgdGhpcyBpcyBhbm90aGVyIGRpc2NyZXRlXG4gICAgLy8gZXZlbnQsIHRoZW4gd2UgY2FuJ3QgZGlzcGF0Y2ggaXQgcmVnYXJkbGVzcyBvZiBpdHMgdGFyZ2V0LCBzaW5jZSB0aGV5XG4gICAgLy8gbmVlZCB0byBkaXNwYXRjaCBpbiBvcmRlci5cbiAgICBxdWV1ZURpc2NyZXRlRXZlbnQobnVsbCwgLy8gRmxhZ3MgdGhhdCB3ZSdyZSBub3QgYWN0dWFsbHkgYmxvY2tlZCBvbiBhbnl0aGluZyBhcyBmYXIgYXMgd2Uga25vdy5cbiAgICBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSkge1xuICAgIGlmIChpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgdGhpcyB0byBiZSByZXBsYXllZCBsYXRlciBvbmNlIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLlxuICAgICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAgIC8vIHF1ZXVlaW5nIGlzIGFjY3VtbXVsYXRpdmUuXG5cblxuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufSAvLyBBdHRlbXB0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LiBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xudmFyIHJvb3QgPSBudWxsO1xudmFyIHN0YXJ0VGV4dCA9IG51bGw7XG52YXIgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICBzdGFydFRleHQgPSBnZXRUZXh0KCk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgaWYgKGZhbGxiYWNrVGV4dCkge1xuICAgIHJldHVybiBmYWxsYmFja1RleHQ7XG4gIH1cblxuICB2YXIgc3RhcnQ7XG4gIHZhciBzdGFydFZhbHVlID0gc3RhcnRUZXh0O1xuICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgdmFyIGVuZDtcbiAgdmFyIGVuZFZhbHVlID0gZ2V0VGV4dCgpO1xuICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuXG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0KCkge1xuICBpZiAoJ3ZhbHVlJyBpbiByb290KSB7XG4gICAgcmV0dXJuIHJvb3QudmFsdWU7XG4gIH1cblxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGEgZmFjdG9yeSBzbyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHJldHVybmVkIGNvbnN0cnVjdG9ycy5cbi8vIElmIHdlIGhhZCBhIHNpbmdsZSBjb25zdHJ1Y3RvciwgaXQgd291bGQgYmUgbWVnYW1vcnBoaWMgYW5kIGVuZ2luZXMgd291bGQgZGVvcHQuXG5cblxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIC8qKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtfcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtfcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2Fzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG5cbiAgcmV0dXJuIFN5bnRoZXRpY0Jhc2VFdmVudDtcbn1cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGV2ZW50UGhhc2U6IDAsXG4gIGJ1YmJsZXM6IDAsXG4gIGNhbmNlbGFibGU6IDAsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICBpc1RydXN0ZWQ6IDBcbn07XG52YXIgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSk7XG5cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGFUcmFuc2ZlcjogMFxufSk7XG5cbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cblxudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgY29kZTogMCxcbiAgbG9jYXRpb246IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIHJlcGVhdDogMCxcbiAgbG9jYWxlOiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cblxudmFyIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgcG9pbnRlcklkOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICB0aWx0WDogMCxcbiAgdGlsdFk6IDAsXG4gIHR3aXN0OiAwLFxuICBwb2ludGVyVHlwZTogMCxcbiAgaXNQcmltYXJ5OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgcHJvcGVydHlOYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IDAsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcblxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93O1xudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5cbmlmIChjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufSAvLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxuXG5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZTsgLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cblxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gY2FuVXNlRE9NICYmICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpO1xudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG5cbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAnY29tcG9zaXRpb25lbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gZ2V0RGF0YSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsICdvbkJlZm9yZUlucHV0Jyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoJ29uQmVmb3JlSW5wdXQnLCAnYmVmb3JlaW5wdXQnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGRvY3VtZW50KTtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQxKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ2hhbmdlJywgWydjaGFuZ2UnLCAnY2xpY2snLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgLy8gRmxhZyB0aGlzIGV2ZW50IGxvb3AgYXMgbmVlZGluZyBzdGF0ZSByZXN0b3JlLlxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgJ29uQ2hhbmdlJyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvbkNoYW5nZScsICdjaGFuZ2UnLCBudWxsLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xuXG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTsgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xuXG5cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcblxuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnaW5wdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgJ251bWJlcicsIG5vZGUudmFsdWUpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9XG5cbiAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpO1xuXG4gICAgaWYgKGluc3QpIHtcbiAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgfSAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMigpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUVudGVyJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VMZWF2ZScsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJFbnRlcicsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyTGVhdmUnLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG59XG4vKipcbiAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgaXNPdmVyRXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW92ZXInIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJztcbiAgdmFyIGlzT3V0RXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCc7XG5cbiAgaWYgKGlzT3ZlckV2ZW50ICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfUkVQTEFZRUQpID09PSAwKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhbiBvdmVyIGV2ZW50IHdpdGggYSB0YXJnZXQsIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkaXNwYXRjaGVkXG4gICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAvLyB0aGVuIGl0J3MgYmVjYXVzZSB3ZSBjb3VsZG4ndCBkaXNwYXRjaCBhZ2FpbnN0IHRoaXMgdGFyZ2V0IHByZXZpb3VzbHlcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG5vdyBpbnN0ZWFkLlxuICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudDtcblxuICAgIGlmIChyZWxhdGVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRlZCBub2RlIGlzIG1hbmFnZWQgYnkgUmVhY3QsIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlXG4gICAgICAvLyBhbHJlYWR5IGRpc3BhdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnRzIGR1cmluZyBpdHMgbW91c2VvdXQuXG4gICAgICBpZiAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVsYXRlZCkgfHwgaXNDb250YWluZXJNYXJrZWRBc1Jvb3QocmVsYXRlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHdpbjsgLy8gVE9ETzogd2h5IGlzIHRoaXMgbnVsbGFibGUgaW4gdGhlIHR5cGVzIGJ1dCB3ZSByZWFkIGZyb20gaXQ/XG5cbiAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jKSB7XG4gICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgfVxuXG4gIHZhciBmcm9tO1xuICB2YXIgdG87XG5cbiAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICB2YXIgX3JlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcblxuICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgIHRvID0gX3JlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShfcmVsYXRlZCkgOiBudWxsO1xuXG4gICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRvKTtcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0by50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdG8udGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgZnJvbSA9IG51bGw7XG4gICAgdG8gPSB0YXJnZXRJbnN0O1xuICB9XG5cbiAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICB2YXIgbGVhdmVFdmVudFR5cGUgPSAnb25Nb3VzZUxlYXZlJztcbiAgdmFyIGVudGVyRXZlbnRUeXBlID0gJ29uTW91c2VFbnRlcic7XG4gIHZhciBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3ZlcicpIHtcbiAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgbGVhdmVFdmVudFR5cGUgPSAnb25Qb2ludGVyTGVhdmUnO1xuICAgIGVudGVyRXZlbnRUeXBlID0gJ29uUG9pbnRlckVudGVyJztcbiAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gIH1cblxuICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICB2YXIgdG9Ob2RlID0gdG8gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UodG8pO1xuICB2YXIgbGVhdmUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGxlYXZlRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnbGVhdmUnLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcbiAgdmFyIGVudGVyID0gbnVsbDsgLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyB0aGlzIG5hdGl2ZUV2ZW50IGlmIHdlIGFyZSBwcm9jZXNzaW5nXG4gIC8vIHRoZSBmaXJzdCBhbmNlc3Rvci4gTmV4dCB0aW1lLCB3ZSB3aWxsIGlnbm9yZSB0aGUgZXZlbnQuXG5cbiAgdmFyIG5hdGl2ZVRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG5hdGl2ZVRhcmdldEluc3QgPT09IHRhcmdldEluc3QpIHtcbiAgICB2YXIgZW50ZXJFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdlbnRlcicsIHRvLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGVudGVyRXZlbnQudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyRXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuICAgIGVudGVyID0gZW50ZXJFdmVudDtcbiAgfVxuXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIW9iamVjdElzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG91dGVyTm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuICB2YXIgd2luID0gb3duZXJEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24gJiYgd2luLmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDsgLy8gSW4gRmlyZWZveCwgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGNhbiBiZSBcImFub255bW91cyBkaXZzXCIsIGUuZy4gdGhlXG4gIC8vIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQgdHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzIGRpdnMgZG8gbm90IHNlZW0gdG9cbiAgLy8gZXhwb3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkIGVycm9yXCIgaWYgYW55IG9mIGl0c1xuICAvLyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2VlbWluZ2x5IHBvc3NpYmxlIHdheSB0byBhdm9pZCBlcnJvcmluZ1xuICAvLyBpcyB0byBhY2Nlc3MgYSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3Igbm9uLWFub255bW91cyBkaXZzIGFuZFxuICAvLyBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICBhbmNob3JOb2RlLm5vZGVUeXBlO1xuICAgIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICB9O1xufVxuLyoqXG4gKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gKi9cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuXG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9IC8vIEZvY3VzaW5nIGEgbm9kZSBjYW4gY2hhbmdlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdoaWNoIGlzIHVuZGVzaXJhYmxlXG5cblxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGFuY2VzdG9yLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnQ6IGFuY2VzdG9yLFxuICAgICAgICAgIGxlZnQ6IGFuY2VzdG9yLnNjcm9sbExlZnQsXG4gICAgICAgICAgdG9wOiBhbmNlc3Rvci5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gYW5jZXN0b3JzW2ldO1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbExlZnQgPSBpbmZvLmxlZnQ7XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb247XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwge1xuICAgIHN0YXJ0OiAwLFxuICAgIGVuZDogMFxuICB9O1xufVxuLyoqXG4gKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAqIHRoZSBpbnB1dC5cbiAqIC1AaW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgfVxufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvblNlbGVjdCcsIFsnZm9jdXNvdXQnLCAnY29udGV4dG1lbnUnLCAnZHJhZ2VuZCcsICdmb2N1c2luJywgJ2tleWRvd24nLCAna2V5dXAnLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChldmVudFRhcmdldCkge1xuICByZXR1cm4gZXZlbnRUYXJnZXQud2luZG93ID09PSBldmVudFRhcmdldCA/IGV2ZW50VGFyZ2V0LmRvY3VtZW50IDogZXZlbnRUYXJnZXQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyBldmVudFRhcmdldCA6IGV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG59XG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5cblxuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobW91c2VEb3duIHx8IGFjdGl2ZUVsZW1lbnQkMSA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQkMSAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cblxuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uJDEoYWN0aXZlRWxlbWVudCQxKTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QkMSwgJ29uU2VsZWN0Jyk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25TZWxlY3QnLCAnc2VsZWN0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgICAgZXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcblxuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAgICAvL1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG5cbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuXG4gIGlmIChyZWFjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgdmFyIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd3aGVlbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICBjYXNlICdwb2ludGVyZG93bic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIHtcbiAgICAvLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gSW4gdGhlIHBhc3QsIFJlYWN0IGhhcyBhbHdheXMgYnViYmxlZCB0aGVtLCBidXQgdGhpcyBjYW4gYmUgc3VycHJpc2luZy5cbiAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgYWxpZ25pbmcgY2xvc2VyIHRvIHRoZSBicm93c2VyIGJlaGF2aW9yIGJ5IG5vdCBidWJibGluZ1xuICAgIC8vIHRoZW0gaW4gUmVhY3QgZWl0aGVyLiBXZSdsbCBzdGFydCBieSBub3QgYnViYmxpbmcgb25TY3JvbGwsIGFuZCB0aGVuIGV4cGFuZC5cbiAgICB2YXIgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSAhaW5DYXB0dXJlUGhhc2UgJiYgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFkZCBhbGwgZXZlbnRzIGZyb21cbiAgICAvLyBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdCBpbiBET01QbHVnaW5FdmVudFN5c3RlbS5cbiAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGxpc3QuXG4gICAgLy8gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGNhbiB3YWl0IHVudGlsIFJlYWN0IDE4LlxuICAgIGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbCc7XG5cbiAgICB2YXIgX2xpc3RlbmVycyA9IGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50LnR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSk7XG5cbiAgICBpZiAoX2xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBldmVudCBsYXppbHkuXG4gICAgICB2YXIgX2V2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogX2V2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiByZW1vdmUgdG9wLWxldmVsIHNpZGUgZWZmZWN0LlxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDMoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvbmNlcHQgb2YgYSBcIlNpbXBsZUV2ZW50UGx1Z2luXCIuXG4gIC8vIFRoaXMgaXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV2ZW50IHN5c3RlbS4gQWxsXG4gIC8vIHRoZSBvdGhlciBwbHVnaW5zIGFyZSBlc3NlbnRpYWxseSBwb2x5ZmlsbHMuIFNvIHRoZSBwbHVnaW5cbiAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIGlubGluZWQgc29tZXdoZXJlIGFuZCBoYXZlIGl0cyBsb2dpY1xuICAvLyBiZSBjb3JlIHRoZSB0byBldmVudCBzeXN0ZW0uIFRoaXMgd291bGQgcG90ZW50aWFsbHkgYWxsb3dcbiAgLy8gdXMgdG8gc2hpcCBidWlsZHMgb2YgUmVhY3Qgd2l0aG91dCB0aGUgcG9seWZpbGxlZCBwbHVnaW5zIGJlbG93LlxuICBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICB2YXIgc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucyA9IChldmVudFN5c3RlbUZsYWdzICYgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMpID09PSAwOyAvLyBXZSBkb24ndCBwcm9jZXNzIHRoZXNlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIHRoZVxuICAvLyBldmVudCdzIG5hdGl2ZSBcImJ1YmJsZVwiIHBoYXNlLCB3aGljaCBtZWFucyB0aGF0IHdlJ3JlXG4gIC8vIG5vdCBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVGhhdCdzIGJlY2F1c2Ugd2UgZW11bGF0ZVxuICAvLyB0aGUgY2FwdHVyZSBwaGFzZSBoZXJlIHN0aWxsLiBUaGlzIGlzIGEgdHJhZGUtb2ZmLFxuICAvLyBiZWNhdXNlIGluIGFuIGlkZWFsIHdvcmxkIHdlIHdvdWxkIG5vdCBlbXVsYXRlIGFuZCB1c2VcbiAgLy8gdGhlIHBoYXNlcyBwcm9wZXJseSwgbGlrZSB3ZSBkbyB3aXRoIHRoZSBTaW1wbGVFdmVudFxuICAvLyBwbHVnaW4uIEhvd2V2ZXIsIHRoZSBwbHVnaW5zIGJlbG93IGVpdGhlciBleHBlY3RcbiAgLy8gZW11bGF0aW9uIChFbnRlckxlYXZlKSBvciB1c2Ugc3RhdGUgbG9jYWxpemVkIHRvIHRoYXRcbiAgLy8gcGx1Z2luIChCZWZvcmVJbnB1dCwgQ2hhbmdlLCBTZWxlY3QpLiBUaGUgc3RhdGUgaW5cbiAgLy8gdGhlc2UgbW9kdWxlcyBjb21wbGljYXRlcyB0aGluZ3MsIGFzIHlvdSdsbCBlc3NlbnRpYWxseVxuICAvLyBnZXQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhcHR1cmUgcGhhc2UgZXZlbnQgbWlnaHQgY2hhbmdlXG4gIC8vIHN0YXRlLCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGJ1YmJsZSBldmVudCB0byBjb21lIGluXG4gIC8vIGxhdGVyIGFuZCBub3QgdHJpZ2dlciBhbnl0aGluZyBhcyB0aGUgc3RhdGUgbm93XG4gIC8vIGludmFsaWRhdGVzIHRoZSBoZXVyaXN0aWNzIG9mIHRoZSBldmVudCBwbHVnaW4uIFdlXG4gIC8vIGNvdWxkIGFsdGVyIGFsbCB0aGVzZSBwbHVnaW5zIHRvIHdvcmsgaW4gc3VjaCB3YXlzLCBidXRcbiAgLy8gdGhhdCBtaWdodCBjYXVzZSBvdGhlciB1bmtub3duIHNpZGUtZWZmZWN0cyB0aGF0IHdlXG4gIC8vIGNhbid0IGZvcnNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndm9sdW1lY2hhbmdlJywgJ3dhaXRpbmcnXTsgLy8gV2Ugc2hvdWxkIG5vdCBkZWxlZ2F0ZSB0aGVzZSBldmVudHMgdG8gdGhlIGNvbnRhaW5lciwgYnV0IHJhdGhlclxuLy8gc2V0IHRoZW0gb24gdGhlIGFjdHVhbCB0YXJnZXQgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgcHJpbWFyaWx5XG4vLyBiZWNhdXNlIHRoZXNlIGV2ZW50cyBkbyBub3QgY29uc2lzdGVudGx5IGJ1YmJsZSBpbiB0aGUgRE9NLlxuXG52YXIgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChbJ2NhbmNlbCcsICdjbG9zZScsICdpbnZhbGlkJywgJ2xvYWQnLCAnc2Nyb2xsJywgJ3RvZ2dsZSddLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpKTtcblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHByZXZpb3VzSW5zdGFuY2U7XG5cbiAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgZm9yICh2YXIgaSA9IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBkaXNwYXRjaExpc3RlbmVyc1tpXSxcbiAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlLFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIGxpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kgPSBkaXNwYXRjaExpc3RlbmVyc1tfaV0sXG4gICAgICAgICAgX2luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmluc3RhbmNlLFxuICAgICAgICAgIF9jdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgX2xpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9saXN0ZW5lciwgX2N1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXSxcbiAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnMgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgbGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSk7IC8vICBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuXG4gIHJldGhyb3dDYXVnaHRFcnJvcigpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkb24ndCBpdGVyYXRlIHRocm91Z2ggZXZlbnRzXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcG9ydGFsIGNvbnRhaW5lciBvciByb290IG5vZGUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICAvLyBUT0RPOiBvbmNlIHdlIHJlbW92ZSB0aGUgZmxhZywgd2UgbWF5IGJlIGFibGUgdG8gYWxzb1xuICAgICAgLy8gcmVtb3ZlIHNvbWUgb2YgdGhlIGJvb2trZWVwaW5nIG1hcHMgdXNlZCBmb3IgbGF6aW5lc3MuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCByb290Q29udGFpbmVyRWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMDtcbiAgdmFyIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50OyAvLyBzZWxlY3Rpb25jaGFuZ2UgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50XG4gIC8vIG90aGVyd2lzZSBpdCB3b24ndCBjYXB0dXJlIGluY29taW5nIGV2ZW50cyB0aGF0IGFyZSBvbmx5XG4gIC8vIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgZGlyZWN0bHkuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgJiYgcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgIT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9IC8vIElmIHRoZSBldmVudCBjYW4gYmUgZGVsZWdhdGVkIChvciBpcyBjYXB0dXJlIHBoYXNlKSwgd2UgY2FuXG4gIC8vIHJlZ2lzdGVyIGl0IHRvIHRoZSByb290IGNvbnRhaW5lci4gT3RoZXJ3aXNlLCB3ZSBzaG91bGRcbiAgLy8gcmVnaXN0ZXIgdGhlIGV2ZW50IHRvIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgbWFyayBpdCBhc1xuICAvLyBhIG5vbi1kZWxlZ2F0ZWQgZXZlbnQuXG5cblxuICBpZiAodGFyZ2V0RWxlbWVudCAhPT0gbnVsbCAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJiBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBGb3IgYWxsIG5vbi1kZWxlZ2F0ZWQgZXZlbnRzLCBhcGFydCBmcm9tIHNjcm9sbCwgd2UgYXR0YWNoXG4gICAgLy8gdGhlaXIgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSByZXNwZWN0aXZlIGVsZW1lbnRzIHRoYXQgdGhlaXJcbiAgICAvLyBldmVudHMgZmlyZSBvbi4gVGhhdCBtZWFucyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGFzIGV2ZW50XG4gICAgLy8gbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCBwcmV2aW91c2x5LiBIb3dldmVyLCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSB0aGUgc2Nyb2xsIGV2ZW50IGJlY2F1c2UgdGhlIHJlYWxpdHkgaXMgdGhhdCBhbnlcbiAgICAvLyBlbGVtZW50IGNhbiBzY3JvbGwuXG4gICAgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbFxuICAgIC8vIGV2ZW50cyBmcm9tIHRoZSBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlXG4gICAgLy8gdGhpcyBzcGVjaWFsIGNhc2UgYW5kIHVzZSB0aGUgc2FtZSBsb2dpYyBmb3IgYWxsIGV2ZW50cy5cbiAgICBpZiAoZG9tRXZlbnROYW1lICE9PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfTk9OX0RFTEVHQVRFRDtcbiAgICB0YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZW50cnkgaXMgZW1wdHkgb3Igd2Ugc2hvdWxkIHVwZ3JhZGUsIHRoZW5cbiAgLy8gd2UgbmVlZCB0byB0cmFwIGFuIGV2ZW50IGxpc3RlbmVyIG9udG8gdGhlIHRhcmdldC5cblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICAgIH1cblxuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSAhPT0gbnVsbCA/IHJlYWN0TmFtZSArICdDYXB0dXJlJyA6IG51bGw7XG4gIHZhciByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlID8gY2FwdHVyZU5hbWUgOiByZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7XG4gIHZhciBsYXN0SG9zdENvbXBvbmVudCA9IG51bGw7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMi50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBzdGF0ZU5vZGU7IC8vIGNyZWF0ZUV2ZW50SGFuZGxlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChyZWFjdEV2ZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGxhc3RIb3N0Q29tcG9uZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGFyZSBvbmx5IGFjY3VtdWxhdGluZyBldmVudHMgZm9yIHRoZSB0YXJnZXQsIHRoZW4gd2UgZG9uJ3RcbiAgICAvLyBjb250aW51ZSB0byBwcm9wYWdhdGUgdGhyb3VnaCB0aGUgUmVhY3QgZmliZXIgdHJlZSB0byBmaW5kIG90aGVyXG4gICAgLy8gbGlzdGVuZXJzLlxuXG5cbiAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4vLyAtIENoYW5nZUV2ZW50UGx1Z2luXG4vLyAtIFNlbGVjdEV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoZXNlIHBsdWdpbnNcbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycyAodmlhIGVtdWxhdGlvbikuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArICdDYXB0dXJlJztcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UzID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UzLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggIT09IDApIHtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEVudGVyTGVhdmVFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGlzIHBsdWdpblxuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzLlxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZW50ZXJFdmVudCwgZnJvbSwgdG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dlc3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuXG4gIGlmIChmcm9tICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBmcm9tLCBjb21tb24sIGZhbHNlKTtcbiAgfVxuXG4gIGlmICh0byAhPT0gbnVsbCAmJiBlbnRlckV2ZW50ICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBlbnRlckV2ZW50LCB0bywgY29tbW9uLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBjYXB0dXJlKSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgKyBcIl9fXCIgKyAoY2FwdHVyZSA/ICdjYXB0dXJlJyA6ICdidWJibGUnKTtcbn1cblxudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xudmFyIFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyA9ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnO1xudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBIVE1MJDEgPSAnX19odG1sJztcbnZhciBIVE1MX05BTUVTUEFDRSQxID0gTmFtZXNwYWNlcy5odG1sO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZztcbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50O1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2U7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcztcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXI7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZztcbnZhciBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGU7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlOyAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cblxuICB2YXIgTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYID0gL1xcclxcbj8vZztcbiAgdmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobWFya3VwKSB7XG4gICAgdmFyIG1hcmt1cFN0cmluZyA9IHR5cGVvZiBtYXJrdXAgPT09ICdzdHJpbmcnID8gbWFya3VwIDogJycgKyBtYXJrdXA7XG4gICAgcmV0dXJuIG1hcmt1cFN0cmluZy5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgJ1xcbicpLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCAnJyk7XG4gIH07XG5cbiAgd2FybkZvclRleHREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCInLCBub3JtYWxpemVkU2VydmVyVGV4dCwgbm9ybWFsaXplZENsaWVudFRleHQpO1xuICB9O1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAgLy8gSnVzdCBzZXQgaXQgdXNpbmcgdGhlIG9uY2xpY2sgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1hbmFnZSBhbnlcbiAgLy8gYm9va2tlZXBpbmcgZm9yIGl0LiBOb3Qgc3VyZSBpZiB3ZSBuZWVkIHRvIGNsZWFyIGl0IHdoZW4gdGhlIGxpc3RlbmVyIGlzXG4gIC8vIHJlbW92ZWQuXG4gIC8vIFRPRE86IE9ubHkgZG8gdGhpcyBmb3IgdGhlIHJlbGV2YW50IFNhZmFyaXMgbWF5YmU/XG4gIG5vZGUub25jbGljayA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG5leHRQcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cblxuXG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEF2b2lkIHNldHRpbmcgaW5pdGlhbCB0ZXh0Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAvLyBzaG93IHdpdGhpbiB0aGUgPHRleHRhcmVhPiB1bnRpbCBpdCBoYXMgYmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xuICAgICAgICB2YXIgY2FuU2V0VGV4dENvbnRlbnQgPSB0YWcgIT09ICd0ZXh0YXJlYScgfHwgbmV4dFByb3AgIT09ICcnO1xuXG4gICAgICAgIGlmIChjYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wVmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQsIHBhcmVudE5hbWVzcGFjZSkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7IC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgdmFyIGRvbUVsZW1lbnQ7XG4gIHZhciBuYW1lc3BhY2VVUkkgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICB7XG4gICAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKTsgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuXG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBlcnJvcignPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAkRmxvd0lzc3VlIGBjcmVhdGVFbGVtZW50YCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgV2ViIENvbXBvbmVudHNcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSwge1xuICAgICAgICBpczogcHJvcHMuaXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXBhcmF0ZSBlbHNlIGJyYW5jaCBpbnN0ZWFkIG9mIHVzaW5nIGBwcm9wcy5pcyB8fCB1bmRlZmluZWRgIGFib3ZlIGJlY2F1c2Ugb2YgYSBGaXJlZm94IGJ1Zy5cbiAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vIE5vcm1hbGx5IGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIGluIGBzZXRJbml0aWFsRE9NUHJvcGVydGllc2AsIGhvd2V2ZXIgdGhlIGBtdWx0aXBsZWAgYW5kIGBzaXplYFxuICAgICAgLy8gYXR0cmlidXRlcyBvbiBgc2VsZWN0YHMgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGBvcHRpb25gcyBhcmUgaW5zZXJ0ZWQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzOlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgZG9lcyBub3Qgc2Nyb2xsIHRvIHRoZSBjb3JyZWN0IG9wdGlvbiBiZWNhdXNlIHNpbmd1bGFyXG4gICAgICAvLyAgYHNlbGVjdGAgZWxlbWVudHMgYXV0b21hdGljYWxseSBwaWNrIHRoZSBmaXJzdCBpdGVtICMxMzIyMlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHNlbGVjdGVkIGRlc3BpdGUgdGhlIGBzaXplYCBhdHRyaWJ1dGUgIzE0MjM5XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzIyMlxuICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQyMzlcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcblxuICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgICBub2RlLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDEgY2F1c2VzIGEgc2VsZWN0IHRvIGJlaGF2ZSBsaWtlIGBtdWx0aXBsZT10cnVlYCwgd2hlcmVcbiAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBhIHNlbGVjdCBpbiBcInNpbmdsZSBzZWxlY3Rpb24gbW9kZVwiLlxuICAgICAgICAgIG5vZGUuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdHlwZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG4gIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCBmYWxzZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxufSAvLyBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgdmFyIGxhc3RQcm9wcztcbiAgdmFyIG5leHRQcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnb2JqZWN0JyAmJiBuZXh0UHJvcCAhPT0gbnVsbCAmJiBuZXh0UHJvcC4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEUpIHtcbiAgICAgIC8vIElmIHdlIGVuY291bnRlciB1c2VPcGFxdWVSZWZlcmVuY2UncyBvcGFxdWUgb2JqZWN0LCB0aGlzIG1lYW5zIHdlIGFyZSBoeWRyYXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGNhbGwgdGhlIG9wYXF1ZSBvYmplY3QncyB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgYSBuZXcgY2xpZW50XG4gICAgICAvLyBJRCBzbyBjbGllbnQgYW5kIHNlcnZlciBJRHMgbWF0Y2ggYW5kIHRocm93cyB0byByZXJlbmRlci5cbiAgICAgIG5leHRQcm9wLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRV0pO1xuICAgIH1cblxuICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChTVFlMRSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufSAvLyBBcHBseSB0aGUgZGlmZi5cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzKSB7XG4gIC8vIFVwZGF0ZSBjaGVja2VkICpiZWZvcmUqIG5hbWUuXG4gIC8vIEluIHRoZSBtaWRkbGUgb2YgYW4gdXBkYXRlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNoZWNrZWQuXG4gIC8vIFdoZW4gYSBjaGVja2VkIHJhZGlvIHRyaWVzIHRvIGNoYW5nZSBuYW1lLCBicm93c2VyIG1ha2VzIGFub3RoZXIgcmFkaW8ncyBjaGVja2VkIGZhbHNlLlxuICBpZiAodGFnID09PSAnaW5wdXQnICYmIG5leHRSYXdQcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5leHRSYXdQcm9wcy5uYW1lICE9IG51bGwpIHtcbiAgICB1cGRhdGVDaGVja2VkKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgd2FzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBsYXN0UmF3UHJvcHMpO1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIG5leHRSYXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7IC8vIFRPRE86IEVuc3VyZSB0aGF0IGFuIHVwZGF0ZSBnZXRzIHNjaGVkdWxlZCBpZiBhbnkgb2YgdGhlIHNwZWNpYWwgcHJvcHNcbiAgLy8gY2hhbmdlZC5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdXBkYXRlV3JhcHBlciQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAvLyA8c2VsZWN0PiB2YWx1ZSB1cGRhdGUgbmVlZHMgdG8gb2NjdXIgYWZ0ZXIgPG9wdGlvbj4gY2hpbGRyZW5cbiAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICBwb3N0VXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCBwYXJlbnROYW1lc3BhY2UsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZztcbiAgdmFyIGV4dHJhQXR0cmlidXRlTmFtZXM7XG5cbiAge1xuICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIGFsbG93ZWRcbiAgICAgICAgY2FzZSAnZGF0YS1yZWFjdHJvb3QnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuYWRkKGF0dHJpYnV0ZXNbX2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gcmF3UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgY2hpbGRyZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRleHRDb250ZW50LiBUaGlzXG4gICAgICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gICAgICAvLyB0ZXh0Q29udGVudC4gRS5nLiBcImZvb1wiIHdpbGwgbWF0Y2ggXCJmPHNwYW4+b288L3NwYW4+XCIgYnV0IHRoYXQgc3RpbGxcbiAgICAgIC8vIHNhdGlzZmllcyBvdXIgcmVxdWlyZW1lbnQuIE91ciByZXF1aXJlbWVudCBpcyBub3QgdG8gcHJvZHVjZSBwZXJmZWN0XG4gICAgICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgICAgIC8vIG9rIG5vdCB0byBpZiB0aGUgdmlzaWJsZSBjb250ZW50IGlzIHN0aWxsIGVub3VnaCB0byBpbmRpY2F0ZSB3aGF0XG4gICAgICAvLyBldmVuIGxpc3RlbmVycyB0aGVzZSBub2RlcyBtaWdodCBiZSB3aXJlZCB1cCB0by5cbiAgICAgIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdXNlIGRvbUVsZW1lbnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgdG8gY29tcGFyZT9cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuXG4gICAgICBpZiAoc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyB8fCAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRIVE1MICE9PSBzZXJ2ZXJIVE1MKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcblxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbnVsbCAmJiBzdGFuZGFyZE5hbWUgIT09IHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYW4gU1ZHIHByb3AgaXMgc3VwcGxpZWQgd2l0aCBiYWQgY2FzaW5nLCBpdCB3aWxsXG4gICAgICAgICAgICAgIC8vIGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJvbSBIVE1MLCBidXQgd2lsbCBwcm9kdWNlIGEgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgLy8gKGFuZCB3b3VsZCBiZSBpbmNvcnJlY3RseSByZW5kZXJlZCBvbiB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSB3YXJuIGFib3V0IGJhZCBjYXNpbmcgZWxzZXdoZXJlLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBza2lwIHRoZSBtaXNsZWFkaW5nIGV4dHJhIG1pc21hdGNoIHdhcm5pbmcgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSB0cnVlOyAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3NwZWNpYWxcbiAgdmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG4gIHZhciBpblNjb3BlVGFncyA9IFsnYXBwbGV0JywgJ2NhcHRpb24nLCAnaHRtbCcsICd0YWJsZScsICd0ZCcsICd0aCcsICdtYXJxdWVlJywgJ29iamVjdCcsICd0ZW1wbGF0ZScsIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwtaW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhlcmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcblxuICB2YXIgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcbiAgICBmb3JtVGFnOiBudWxsLFxuICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxuICB9O1xuXG4gIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAob2xkSW5mbywgdGFnKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMTtcblxue1xuICBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xudmFyIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcblxuZnVuY3Rpb24gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwYXJlbnRIb3N0Q29udGV4dERldiA9IHBhcmVudEhvc3RDb250ZXh0O1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBpZiAoc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBuZXdQcm9wcykpIHtcbiAgICBkb21FbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gVXBkYXRlIHRoZSBwcm9wcyBoYW5kbGUgc28gdGhhdCB3ZSBrbm93IHdoaWNoIHByb3BzIGFyZSB0aGUgb25lcyB3aXRoXG4gIC8vIHdpdGggY3VycmVudCBldmVudCBoYW5kbGVycy5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBET00gbm9kZS5cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTtcblxuICBpZiAodHlwZW9mIHN0eWxlLnNldFByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5mdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlUHJvcCA9IHByb3BzW1NUWUxFJDFdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59XG5mdW5jdGlvbiBjbGVhckNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdmFyIGJvZHkgPSBjb250YWluZXIuYm9keTtcblxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgIT09IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGFuIGVsZW1lbnQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gIC8vIFNraXAgbm9uLWh5ZHJhdGFibGUgbm9kZXMuXG4gIGZvciAoOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcblxuICAgIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBwYXJlbnROYW1lc3BhY2UpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTtcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gIH0gLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuXG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIFJldHVybnMgdGhlIFN1c3BlbnNlSW5zdGFuY2UgaWYgdGhpcyBub2RlIGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFcbi8vIFN1c3BlbnNlSW5zdGFuY2UuIEkuZS4gaWYgaXRzIHByZXZpb3VzIHNpYmxpbmcgaXMgYSBDb21tZW50IHdpdGhcbi8vIFNVU1BFTlNFX3hfU1RBUlRfREFUQS4gT3RoZXJ3aXNlLCBudWxsLlxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkgO1xufVxudmFyIGNsaWVudElkID0gMDtcbmZ1bmN0aW9uIG1ha2VDbGllbnRJZEluREVWKHdhcm5PbkFjY2Vzc0luREVWKSB7XG4gIHZhciBpZCA9ICdyOicgKyAoY2xpZW50SWQrKykudG9TdHJpbmcoMzYpO1xuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0sXG4gICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBpc09wYXF1ZUh5ZHJhdGluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEU7XG59XG5mdW5jdGlvbiBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGF0dGVtcHRUb1JlYWRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9PUEFRVUVfSURfVFlQRSxcbiAgICB0b1N0cmluZzogYXR0ZW1wdFRvUmVhZFZhbHVlLFxuICAgIHZhbHVlT2Y6IGF0dGVtcHRUb1JlYWRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIHtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG4gIH1cbn1cblxudmFyIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEZpYmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxQcm9wc0tleSA9ICdfX3JlYWN0UHJvcHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gJ19fcmVhY3RDb250YWluZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSAnX19yZWFjdEV2ZW50cyQnICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZpYmVyUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgbm9kZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRMaXN0ZW5lclNldChub2RlKSB7XG4gIHZhciBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG5cbiAgaWYgKGVsZW1lbnRMaXN0ZW5lclNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID0gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRMaXN0ZW5lclNldDtcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgaWYgKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4XSkge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gbnVsbDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBudWxsO1xuICB9XG5cbiAgaW5kZXgtLTtcbn1cblxuZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICBpbmRleCsrO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IGN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIEJsb2NraW5nUm9vdCA9IDE7XG52YXIgQ29uY3VycmVudFJvb3QgPSAyO1xuXG52YXIgcmVuZGVyZXJJRCA9IG51bGw7XG52YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xudmFyIGlzRGV2VG9vbHNQcmVzZW50ID0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gIGlmICh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIERldlRvb2xzXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgIHtcbiAgICAgIGVycm9yKCdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnKTtcbiAgICB9IC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSAocm9vdC5jdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IERpZENhcHR1cmU7XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgdW5kZWZpbmVkLCBkaWRFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgIFNjaGVkdWxlcl9ub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Mb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTtcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5JDEgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IDk3O1xudmFyIExvd1ByaW9yaXR5JDEgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkkMSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5JDEgPSA5MDtcbnZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlcl9zaG91bGRZaWVsZDtcbnZhciByZXF1ZXN0UGFpbnQgPSAvLyBGYWxsIGJhY2sgZ3JhY2VmdWxseSBpZiB3ZSdyZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgU2NoZWR1bGVyLlxuU2NoZWR1bGVyX3JlcXVlc3RQYWludCAhPT0gdW5kZWZpbmVkID8gU2NoZWR1bGVyX3JlcXVlc3RQYWludCA6IGZ1bmN0aW9uICgpIHt9O1xudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xudmFyIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbnZhciBpbml0aWFsVGltZU1zJDEgPSBTY2hlZHVsZXJfbm93JDEoKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cbi8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgbW9kZXJuIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgcGVyZm9ybWFuY2Uubm93YC4gSW5cbi8vIG9sZGVyIGJyb3dzZXJzLCBTY2hlZHVsZXIgZmFsbHMgYmFjayB0byBgRGF0ZS5ub3dgLCB3aGljaCByZXR1cm5zIGEgVW5peFxuLy8gdGltZXN0YW1wLiBJbiB0aGF0IGNhc2UsIHN1YnRyYWN0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB0byBzaW11bGF0ZVxuLy8gdGhlIGJlaGF2aW9yIG9mIHBlcmZvcm1hbmNlLm5vdyBhbmQga2VlcCBvdXIgdGltZXMgc21hbGwgZW5vdWdoIHRvIGZpdFxuLy8gd2l0aGluIDMyIGJpdHMuXG4vLyBUT0RPOiBDb25zaWRlciBsaWZ0aW5nIHRoaXMgaW50byBTY2hlZHVsZXIuXG5cbnZhciBub3cgPSBpbml0aWFsVGltZU1zJDEgPCAxMDAwMCA/IFNjaGVkdWxlcl9ub3ckMSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3ckMSgpIC0gaW5pdGlhbFRpbWVNcyQxO1xufTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICBzd2l0Y2ggKFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgY2FzZSBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gTG93UHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0lkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHkkMTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTG93UHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMShyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfaXNTeW5jMiA9IHRydWU7XG4gICAgICAgIHZhciBfcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICAgIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gX3F1ZXVlW2ldO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soX2lzU3luYzIpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN5bmNRdWV1ZSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIGlmIChzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBzeW5jUXVldWUgPSBzeW5jUXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWUpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG52YXIgRGVidWdUcmFjaW5nTW9kZSA9IDE2O1xuXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSAwO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmlyc3RGaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dCcsIHNvcnRlZE5hbWVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgbmV4dFZhbHVlKSB7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgIGlmICgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpICE9PSBjaGFuZ2VkQml0cykge1xuICAgICAgICBlcnJvcignY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBhbHRlcm5hdGUgd2FzIHVwZGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gYW5jZXN0b3IgcGF0aCBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dEZpYmVyID0gdm9pZCAwOyAvLyBWaXNpdCB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuXG4gICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtYXRjaGVzLlxuICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0ICYmIChkZXBlbmRlbmN5Lm9ic2VydmVkQml0cyAmIGNoYW5nZWRCaXRzKSAhPT0gMCkge1xuICAgICAgICAgIC8vIE1hdGNoISBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhpcyBmaWJlci5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcykpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgIGlmIChpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKSB7XG4gICAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgOyBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgOyBlbHNlIHtcbiAgICB2YXIgcmVzb2x2ZWRPYnNlcnZlZEJpdHM7IC8vIEF2b2lkIGRlb3B0aW5nIG9uIG9ic2VydmFibGUgYXJndW1lbnRzIG9yIGhldGVyb2dlbmVvdXMgdHlwZXMuXG5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpIHtcbiAgICAgIC8vIE9ic2VydmUgYWxsIHVwZGF0ZXMuXG4gICAgICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBjb250ZXh0O1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBvYnNlcnZlZEJpdHM6IHJlc29sdmVkT2JzZXJ2ZWRCaXRzLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbSxcbiAgICAgICAgcmVzcG9uZGVyczogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xufVxuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBzaGFyZWQ6IHtcbiAgICAgIHBlbmRpbmc6IG51bGxcbiAgICB9LFxuICAgIGVmZmVjdHM6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgfTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXZlbnRUaW1lOiBldmVudFRpbWUsXG4gICAgbGFuZTogbGFuZSxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAvLyBDYXB0dXJlZCB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgYXJlIHRocm93biBieSBhIGNoaWxkIGR1cmluZyB0aGUgcmVuZGVyXG4gIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gIC8vIHdlIHNob3VsZCBvbmx5IHB1dCB0aGVtIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBub3QgdGhlIGN1cnJlbnQgb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTsgLy8gQ2hlY2sgaWYgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgYSBjbG9uZS5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgIC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuXG4gICAgICAvLyB3ZSBiYWlsIG91dCBvbiBhIHBhcmVudCBmaWJlciB0aGF0IHRoZW4gY2FwdHVyZXMgYW4gZXJyb3IgdGhyb3duIGJ5XG4gICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgIC8vIC1wcm9ncmVzcyBxdWV1ZSwgd2UgbmVlZCB0byBjbG9uZSB0aGUgdXBkYXRlcy4gV2UgdXN1YWxseSBjbG9uZSBkdXJpbmdcbiAgICAgIC8vIHByb2Nlc3NVcGRhdGVRdWV1ZSwgYnV0IHRoYXQgZGlkbid0IGhhcHBlbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZVxuICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbDtcbiAgICAgIHZhciBuZXdMYXN0ID0gbnVsbDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB1cGRhdGVzIGFuZCBjbG9uZSB0aGVtLlxuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZS5ldmVudFRpbWUsXG4gICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMsIGluc3RhbmNlKSB7XG4gIHN3aXRjaCAodXBkYXRlLnRhZykge1xuICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgfVxuICAgIC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZTtcblxuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBwcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgfVxuXG4gIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlOyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyB1cGRhdGVzLiBJZiBzbywgdHJhbnNmZXIgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDsgLy8gVGhlIHBlbmRpbmcgcXVldWUgaXMgY2lyY3VsYXIuIERpc2Nvbm5lY3QgdGhlIHBvaW50ZXIgYmV0d2VlbiBmaXJzdFxuICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfVxuXG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgLy8gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgdXBkYXRlcyB0byB0aGF0IHF1ZXVlLCB0b28uIEJlY2F1c2UgdGhlIGJhc2VcbiAgICAvLyBxdWV1ZSBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB3aXRoIG5vIGN5Y2xlcywgd2UgY2FuIGFwcGVuZCB0byBib3RoXG4gICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudFxuXG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlICE9PSBsYXN0QmFzZVVwZGF0ZSkge1xuICAgICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZSByZW5kZXJMYW5lc1xuICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgdmFyIG5ld0xhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgbmV3TGFzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuICAgICAgdmFyIHVwZGF0ZUV2ZW50VGltZSA9IHVwZGF0ZS5ldmVudFRpbWU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2sgKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UpIHtcbiAgLy8gQ29tbWl0IHRoZSBlZmZlY3RzXG4gIHZhciBlZmZlY3RzID0gZmluaXNoZWRRdWV1ZS5lZmZlY3RzO1xuICBmaW5pc2hlZFF1ZXVlLmVmZmVjdHMgPSBudWxsO1xuXG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWZmZWN0ID0gZWZmZWN0c1tpXTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGVmZmVjdC5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsgLy8gUmVhY3QuQ29tcG9uZW50IHVzZXMgYSBzaGFyZWQgZnJvemVuIG9iamVjdCBieSBkZWZhdWx0LlxuLy8gV2UnbGwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBsZWdhY3kgcmVmcy5cblxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xudmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xudmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2s7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG5cbiAgICBpZiAoIWRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSkge1xuICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gZnVuY3Rpb24gKHR5cGUsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiAnICsgJ1lvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QgKGFuZCBpZGVhbGx5LCBzd2l0Y2ggdG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gICAgaWYgKF9zdGF0ZSAmJiAodHlwZW9mIF9zdGF0ZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShfc3RhdGUpKSkge1xuICAgICAgZXJyb3IoJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICBzZXQoaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKTtcblxuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGZhbHNlO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICB7XG4gICAgaWYgKCdjb250ZXh0VHlwZScgaW4gY3Rvcikge1xuICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcbiAgICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSAvLyBJbnN0YW50aWF0ZSB0d2ljZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG5cblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGVycm9yKCdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcycsIF9jb21wb25lbnROYW1lLCBuZXdBcGlOYW1lLCBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxNb3VudE5hbWUgOiAnJywgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuXG5cbiAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0gZW1wdHlSZWZzT2JqZWN0O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPT09IG5ld1Byb3BzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufSAvLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPyB1bnJlc29sdmVkT2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciB1bnJlc29sdmVkTmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gdW5yZXNvbHZlZE5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgPT09IHVucmVzb2x2ZWROZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSQxID0gQXJyYXkuaXNBcnJheTtcblxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHZhciBtaXhlZFJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIGlmIChtaXhlZFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgb25jZSB3ZSB0dXJuIG9uIHRoZSBzdHJpbmcgcmVmIHdhcm5pbmcgZm9yXG4gICAgICAvLyBldmVyeW9uZSwgYmVjYXVzZSB0aGUgc3RyaWN0IG1vZGUgY2FzZSB3aWxsIG5vIGxvbmdlciBiZSByZWxldmFudFxuICAgICAgaWYgKChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSAmJiAvLyBXZSB3YXJuIGluIFJlYWN0RWxlbWVudC5qcyBpZiBvd25lciBhbmQgc2VsZiBhcmUgZXF1YWwgZm9yIHN0cmluZyByZWZzXG4gICAgICAvLyBiZWNhdXNlIHRoZXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvblxuICAgICAgLy8gdXNpbmcgYSBjb2RlbW9kLiBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd2FybiBhYm91dCBzdHJpbmcgcmVmcyBhZ2Fpbi5cbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fc2VsZiAmJiBlbGVtZW50Ll9vd25lci5zdGF0ZU5vZGUgIT09IGVsZW1lbnQuX3NlbGYpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmICghKG93bmVyRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IGluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgcmVmc1tzdHJpbmdSZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiByZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHR5cGVvZiBtaXhlZFJlZiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5fb3duZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICsgbWl4ZWRSZWYgKyBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4ZWRSZWY7XG59XG5cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgaWYgKHJldHVybkZpYmVyLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogbmV3Q2hpbGQpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbiAgfVxufSAvLyBXZSBhdm9pZCBpbmxpbmluZyB0aGlzIHRvIGF2b2lkIHBvdGVudGlhbCBkZW9wdHMgZnJvbSB1c2luZyB0cnkvY2F0Y2guXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVsZXRpb25zIGFyZSBhZGRlZCBpbiByZXZlcnNlZCBvcmRlciBzbyB3ZSBhZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByZXR1cm4gZmliZXIncyBlZmZlY3QgbGlzdCBpcyBlbXB0eSBleGNlcHQgZm9yXG4gICAgLy8gZGVsZXRpb25zLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdGhlIGRlbGV0aW9uIHRvIHRoZSBsaXN0LiBUaGUgcmVtYWluaW5nXG4gICAgLy8gZWZmZWN0cyBhcmVuJ3QgYWRkZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBPbmNlIHdlIGltcGxlbWVudFxuICAgIC8vIHJlc3VtaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9XG5cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSApKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGZpYmVyIGlmIHRoZSBrZXlzIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIGtleSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKG5ld0NoaWxkcmVuICE9IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZykge1xuICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGZhbGx0aHJvdWdoIGhlcmUgaWYgZW5hYmxlQmxvY2tzQVBJIGlzIG5vdCBvbi5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGNoaWxkLCBlbGVtZW50KSApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leGlzdGluZzMgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nMztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIERpZG4ndCBtYXRjaC5cblxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGVsZW1lbnQua2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiYgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfSAvLyBUaGlzIEFQSSB3aWxsIHRhZyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIHJlY29uY2lsaWF0aW9uXG4gIC8vIGl0c2VsZi4gVGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCBsaXN0IGFzIHdlIHBhc3MgdGhyb3VnaCB0aGVcbiAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsO1xuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBsYW5lcykpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIEludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UsIHdoaWNoIGhhbmRsZXMgYm90aFxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIGNsYXNzZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgQmxvY2s6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuZnVuY3Rpb24gY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoIShjdXJyZW50ID09PSBudWxsIHx8IHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBjdXJyZW50LmNoaWxkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmICghKGMgIT09IE5PX0NPTlRFWFQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGFpbmVyKCkge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICByZXR1cm4gcm9vdEluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAvLyBQdXNoIGN1cnJlbnQgcm9vdCBpbnN0YW5jZSBvbnRvIHRoZSBzdGFjaztcbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgcm9vdCB3aGVuIHBvcnRhbHMgYXJlIHBvcHBlZC5cbiAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpOyAvLyBGaW5hbGx5LCB3ZSBuZWVkIHRvIHB1c2ggdGhlIGhvc3QgY29udGV4dCB0byB0aGUgc3RhY2suXG4gIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gIC8vIHdlJ2QgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyBvbiB0aGUgc3RhY2sgZGVwZW5kaW5nIG9uXG4gIC8vIHdoZXRoZXIgZ2V0Um9vdEhvc3RDb250ZXh0KCkgdGhyb3dzIHNvbWV3aGVyZSBpbiByZW5kZXJlciBjb2RlIG9yIG5vdC5cbiAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTsgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dChjb250ZXh0LCBmaWJlci50eXBlKTsgLy8gRG9uJ3QgcHVzaCB0aGlzIEZpYmVyJ3MgY29udGV4dCB1bmxlc3MgaXQncyB1bmlxdWUuXG5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgaWYgKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGZpYmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG52YXIgRGVmYXVsdFN1c3BlbnNlQ29udGV4dCA9IDA7IC8vIFRoZSBTdXNwZW5zZSBDb250ZXh0IGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLiBUaGUgbG93ZXIgYml0cyBpc1xuLy8gaW5oZXJpdGVkIGRlZXBseSBkb3duIHRoZSBzdWJ0cmVlLiBUaGUgdXBwZXIgYml0cyBvbmx5IGFmZmVjdFxuLy8gdGhpcyBpbW1lZGlhdGUgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGdldHMgcmVzZXQgZWFjaCBuZXdcbi8vIGJvdW5kYXJ5IG9yIHN1c3BlbnNlIGxpc3QuXG5cbnZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIFN1YnRyZWUgRmxhZ3M6XG4vLyBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIG91ciBwYXJlbnQgU3VzcGVuc2Vcbi8vIGJvdW5kYXJpZXMgaXMgbm90IGN1cnJlbnRseSBzaG93aW5nIHZpc2libGUgbWFpbiBjb250ZW50LlxuLy8gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgb3IgaXMgbm90IG1vdW50ZWQgYXQgYWxsLlxuLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBkZXNpcmFibGUgdG8gdHJpZ2dlciBhIGZhbGxiYWNrIGF0XG4vLyB0aGUgcGFyZW50LiBJZiBub3QsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0cmlnZ2VyIHVuZGVzaXJhYmxlIGJvdW5kYXJpZXNcbi8vIGFuZC9vciBzdXNwZW5kIHRoZSBjb21taXQgdG8gYXZvaWQgaGlkaW5nIHRoZSBwYXJlbnQgY29udGVudC5cblxudmFyIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCA9IDE7IC8vIFNoYWxsb3cgRmxhZ3M6XG4vLyBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgY2FuIGJlIHVzZWQgYnkgU3VzcGVuc2VMaXN0IHRvIGZvcmNlIG5ld2x5IGFkZGVkXG4vLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbnZhciBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyO1xudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoRGVmYXVsdFN1c3BlbnNlQ29udGV4dCk7XG5mdW5jdGlvbiBoYXNTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgZmxhZykge1xuICByZXR1cm4gKHBhcmVudENvbnRleHQgJiBmbGFnKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayB8IHNoYWxsb3dDb250ZXh0O1xufVxuZnVuY3Rpb24gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzdWJ0cmVlQ29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCB8IHN1YnRyZWVDb250ZXh0O1xufVxuZnVuY3Rpb24gcHVzaFN1c3BlbnNlQ29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld0NvbnRleHQsIGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlQ29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uod29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAvLyBJZiBpdCB3YXMgdGhlIHByaW1hcnkgY2hpbGRyZW4gdGhhdCBqdXN0IHN1c3BlbmRlZCwgY2FwdHVyZSBhbmQgcmVuZGVyIHRoZVxuICAvLyBmYWxsYmFjay4gT3RoZXJ3aXNlLCBkb24ndCBjYXB0dXJlIGFuZCBidWJibGUgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbHdheXMgY2FwdHVyZXMuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzOyAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG5cbiAgaWYgKHByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG5cbiAgaWYgKHByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaXQncyBhIGJvdW5kYXJ5IHdlIHNob3VsZCBhdm9pZCwgdGhlbiB3ZSBwcmVmZXIgdG8gYnViYmxlIHVwIHRvIHRoZVxuICAvLyBwYXJlbnQgYm91bmRhcnkgaWYgaXQgaXMgY3VycmVudGx5IGludmlzaWJsZS5cblxuXG4gIGlmIChoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIHBhcmVudCBpcyBub3QgYWJsZSB0byBoYW5kbGUgaXQsIHdlIG11c3QgaGFuZGxlIGl0LlxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgKi9cbjA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbnZhciBIYXNFZmZlY3QgPVxuLyogKi9cbjE7IC8vIFJlcHJlc2VudHMgdGhlIHBoYXNlIGluIHdoaWNoIHRoZSBlZmZlY3QgKG5vdCB0aGUgY2xlYW4tdXApIGZpcmVzLlxuXG52YXIgTGF5b3V0ID1cbi8qICAgICovXG4yO1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG40O1xuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVudGVySHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uOyAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG5cbiAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAgZmliZXIuZmxhZ3MgPSBmaWJlci5mbGFncyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcblxuICAgICAgICBpZiAodGV4dEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gdGV4dEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICBpZiAoIW5leHRJbnN0YW5jZSkge1xuICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcblxuICBpZiAoIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAvLyBJZiB3ZSBjYW4ndCBoeWRyYXRlIHRoaXMgaW5zdGFuY2UgbGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYy4gSXQncyBiYXNlZCBvbiBpbnR1aXRpb24gYW5kIG5vdCBkYXRhIHNvIGl0XG4gICAgLy8gbWlnaHQgYmUgZmxhd2VkIG9yIHVubmVjZXNzYXJ5LlxuICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKG5leHRJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcblxuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlcik7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLlxuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHRleHRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHRleHRDb250ZW50ID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7IC8vIElmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBoeWRyYXRhYmxlIG5vZGVzLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGVtIG5vdy5cbiAgLy8gV2Ugb25seSBkbyB0aGlzIGRlZXBlciB0aGFuIGhlYWQgYW5kIGJvZHkgc2luY2UgdGhleSB0ZW5kIHRvIGhhdmUgcmFuZG9tXG4gIC8vIG90aGVyIG5vZGVzIGluIHRoZW0uIFdlIGFsc28gaWdub3JlIGNvbXBvbmVudHMgd2l0aCBwdXJlIHRleHQgY29udGVudCBpblxuICAvLyBzaWRlIG9mIHRoZW0uXG4gIC8vIFRPRE86IEJldHRlciBoZXVyaXN0aWMuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpO1xuICAgICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5leHRJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID8gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpYmVyLnN0YXRlTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuLy8gYW5kIHNob3VsZCBiZSByZXNldCBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgcmVuZGVyLlxuLy8gVGhpcyB0cmFja3Mgd2hpY2ggbXV0YWJsZSBzb3VyY2VzIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMgPSBbXTtcbnZhciByZW5kZXJlclNpZ2lsJDE7XG5cbntcbiAgLy8gVXNlZCB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIG11dGFibGUgc291cmNlLlxuICByZW5kZXJlclNpZ2lsJDEgPSB7fTtcbn1cblxuZnVuY3Rpb24gbWFya1NvdXJjZUFzRGlydHkobXV0YWJsZVNvdXJjZSkge1xuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IHdvcmtJblByb2dyZXNzU291cmNlc1tpXTtcblxuICAgIHtcbiAgICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGggPSAwO1xufVxuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHJldHVybiBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O1xuICB9XG59XG5mdW5jdGlvbiBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbikge1xuICB7XG4gICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IHZlcnNpb247XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHtcbiAgICAgIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgbXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWwkMTtcbiAgICAgIH0gZWxzZSBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCQxKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIG11dGFibGUgc291cmNlLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRWFnZXIgcmVhZHMgdGhlIHZlcnNpb24gb2YgYSBtdXRhYmxlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IG9uIHRoZSByb290LlxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXI7XG5cbntcbiAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllciA9IHt9O1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG52YXIgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsOyAvLyBJbiBERVYsIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgaG9va3MgYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlciBiZXR3ZWVuIHJlbmRlcnMuXG4vLyBUaGUgbGlzdCBzdG9yZXMgdGhlIG9yZGVyIG9mIGhvb2tzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlciAobW91bnQpLlxuLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG52YXIgaG9va1R5cGVzRGV2ID0gbnVsbDtcbnZhciBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBJbiBERVYsIHRoaXMgdHJhY2tzIHdoZXRoZXIgY3VycmVudGx5IHJlbmRlcmluZyBjb21wb25lbnQgbmVlZHMgdG8gaWdub3JlXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4vLyBXaGVuIHRydWUsIHN1Y2ggSG9va3Mgd2lsbCBhbHdheXMgYmUgXCJyZW1vdW50ZWRcIi4gT25seSB1c2VkIGR1cmluZyBob3QgcmVsb2FkLlxuXG52YXIgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldisrO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgd2Fybk9uSG9va01pc21hdGNoSW5EZXYoaG9va05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gIHtcbiAgICBpZiAoZGVwcyAhPT0gdW5kZWZpbmVkICYmIGRlcHMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoZWlyIHR5cGUgd291bGQgY2hhbmdlIGFzIHVzdWFsbHkgeW91IGRlZmluZSB0aGVtIGlubGluZS5cbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuICcgKyAnVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG1lbW9pemVkU3RhdGUgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG1lbW9pemVkU3RhdGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgIH0gZWxzZSBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgaGFuZGxlcyBhbiBlZGdlIGNhc2Ugd2hlcmUgYSBjb21wb25lbnQgaXMgdXBkYXRpbmcsXG4gICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBwcm9kdWN0aW9uIGNvZGUgYmVoYXZpb3IgKHdoaWNoIHdpbGwgdXNlIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpLFxuICAgICAgLy8gYnV0IHdpdGggdGhlIGV4dHJhIERFViB2YWxpZGF0aW9uIHRvIGVuc3VyZSBob29rcyBvcmRlcmluZyBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTsgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZVxuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICAgZG8ge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG5cbiAgICAgIGlmICghKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIDtcbiAgICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9IC8vIFRoaXMgY2hlY2sgdXNlcyBjdXJyZW50SG9vayBzbyB0aGF0IGl0IHdvcmtzIHRoZSBzYW1lIGluIERFViBhbmQgcHJvZCBidW5kbGVzLlxuICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcblxuICBpZiAoISFkaWRSZW5kZXJUb29GZXdIb29rcykge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcbiAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NBZnRlclRocm93KCkge1xuICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaG9vayA9IGhvb2submV4dDtcbiAgICB9XG5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gIH1cblxuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIH1cblxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICBpZiAoIShuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50ID0gY3VycmVudEhvb2s7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVF1ZXVlID0gY3VycmVudC5iYXNlUXVldWU7IC8vIFRoZSBsYXN0IHBlbmRpbmcgdXBkYXRlIHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBuZXcgdXBkYXRlcyB0aGF0IGhhdmVuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuICAgIC8vIFdlJ2xsIGFkZCB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgIC8vIE1lcmdlIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgYmFzZSBxdWV1ZS5cbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ0ZpcnN0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUgaWYgd2UgaW1wbGVtZW50IHJlc3VtaW5nLCBvciBzb21lIGZvcm0gb2YgdGhhdC5cbiAgICAgICAgZXJyb3IoJ0ludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgcXVldWUgdG8gcHJvY2Vzcy5cbiAgICB2YXIgZmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3U3RhdGUgPSBjdXJyZW50LmJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZS5lYWdlclJlZHVjZXIgPT09IHJlZHVjZXIpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksIGFuZCBpdHMgcmVkdWNlciBtYXRjaGVzIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgcmVkdWNlciwgd2UgY2FuIHVzZSB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZS5cbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gIC8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobGFzdFJlbmRlclBoYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIFByb2Nlc3MgdGhpcyByZW5kZXIgcGhhc2UgdXBkYXRlLiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSk7IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLCBidXQgaXQncyB3aGF0IHdlXG4gICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KSB7XG4gIHtcbiAgICB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7IC8vIElzIGl0IHNhZmUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyP1xuXG4gIHZhciBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gZmFsc2U7IC8vIENoZWNrIHRoZSB2ZXJzaW9uIGZpcnN0LlxuICAvLyBJZiB0aGlzIHJlbmRlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgd2l0aCBhIHNwZWNpZmljIHZlcnNpb24sXG4gIC8vIHdlIGNhbiB1c2UgaXQgYWxvbmUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBzb3VyY2UuXG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJWZXJzaW9uID0gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSk7XG5cbiAgaWYgKGN1cnJlbnRSZW5kZXJWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgLy8gSXQncyBzYWZlIHRvIHJlYWQgaWYgdGhlIHN0b3JlIGhhc24ndCBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgIC8vIHdlIHJlYWQgc29tZXRoaW5nLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBjdXJyZW50UmVuZGVyVmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHZlcnNpb24sIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSByZWFkIGZyb20gdGhlXG4gICAgLy8gc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcywgc28gd2UgbmVlZCB0byBkbyBhIGJpdCBtb3JlIHdvcmsuXG4gICAgLy8gV2hhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpcyBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIHRoYXQgYWxyZWFkeVxuICAgIC8vIHN1YnNjcmliZWQgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcGVuZGluZ1xuICAgIC8vIG11dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgeWV0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgbXV0YXRpb25zLCB0aGVuIGByb290Lm11dGFibGVSZWFkTGFuZXNgIHdpbGwgYmVcbiAgICAvLyBlbXB0eSwgYW5kIHdlIGtub3cgd2UgY2FuIHNhZmVseSByZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgKmFyZSogcGVuZGluZyBtdXRhdGlvbnMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHNhZmVseSByZWFkXG4gICAgLy8gaWYgdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgbGFuZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGUgcGVuZGluZyBtdXRhdGlvblxuICAgIC8vIGxhbmVzLCBzaW5jZSB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgdmFsdWUgd2UncmUgYWJvdXQgdG8gcmVhZCBmcm9tXG4gICAgLy8gdGhlIHNvdXJjZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZHVyaW5nIHRoZSBtb3N0XG4gICAgLy8gcmVjZW50IG11dGF0aW9uLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG5cbiAgICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgICAgLy8gSWYgaXQncyBzYWZlIHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgLy8gc3RvcmUgdGhlIHZlcnNpb24gaW4gY2FzZSBvdGhlciBjb21wb25lbnRzIHJlYWQgZnJvbSBpdC5cbiAgICAgIC8vIEEgY2hhbmdlZCB2ZXJzaW9uIG51bWJlciB3aWxsIGxldCB0aG9zZSBjb21wb25lbnRzIGtub3cgdG8gdGhyb3cgYW5kIHJlc3RhcnQgdGhlIHJlbmRlci5cbiAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UsIHZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgdmFyIHNuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBzbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG11dGFibGUgc291cmNlIGJlaW5nIHNoYXJlZCBiZXR3ZWVuIHJlbmRlcmVycy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIGlmIHRoZSBzb3VyY2UgaXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJlbmRlcmVyLFxuICAgIC8vIFRoZSBzZWNvbmQgcmVuZGVyZXIgZG9uJ3Qga25vdyB0aGF0IGl0IG5lZWRzIHRvIHJlc2V0IHRoZSBXSVAgdmVyc2lvbiBkdXJpbmcgdW53aW5kLFxuICAgIC8vIChiZWNhdXNlIHRoZSBob29rIG9ubHkgbWFya3Mgc291cmNlcyBhcyBkaXJ0eSBpZiBpdCdzIHdyaXR0ZW4gdG8gdGhlaXIgV0lQIHZlcnNpb24pLlxuICAgIC8vIFRoYXQgd291bGQgY2F1c2UgdGhpcyB0ZWFyIGNoZWNrIHRvIHRocm93IGFnYWluIGFuZCBldmVudHVhbGx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2UgY2FuIGF2b2lkIHRoaXMgaW5maW5pdGUgbG9vcCBieSBleHBsaWNpdGx5IG1hcmtpbmcgdGhlIHNvdXJjZSBhcyBkaXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gdGVhcmluZyBpbiB0aGUgZmlyc3QgcmVuZGVyZXIgd2hlbiBpdCByZXN1bWVzLFxuICAgIC8vIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoYXQgKHNob3J0IG9mIHRocm93aW5nIGhlcmUgYW5kIHJlZnVzaW5nIHRvIGNvbnRpbnVlIHRoZSByZW5kZXIpLlxuICAgIG1hcmtTb3VyY2VBc0RpcnR5KHNvdXJjZSk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCByZWFkIGZyb20gbXV0YWJsZSBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHRlYXJpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgaWYgKCEocm9vdCAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG4gIHZhciBfZGlzcGF0Y2hlciR1c2VTdGF0ZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgfSksXG4gICAgICBjdXJyZW50U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVswXSxcbiAgICAgIHNldFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90OyAvLyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBzdGF0ZSBob29rIGFzIHdlbGwuXG4gIC8vIFdlIHVzZSBpdCB0byBjbGVhciB0aGUgcGVuZGluZyB1cGRhdGUgcXVldWUgaWYgd2UgaGF2ZSBhIG5ldyBzb3VyY2UuXG5cbiAgdmFyIHN0YXRlSG9vayA9IHdvcmtJblByb2dyZXNzSG9vaztcbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciByZWZzID0gbWVtb2l6ZWRTdGF0ZS5yZWZzO1xuICB2YXIgcHJldkdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZTb3VyY2UgPSBtZW1vaXplZFN0YXRlLnNvdXJjZTtcbiAgdmFyIHByZXZTdWJzY3JpYmUgPSBtZW1vaXplZFN0YXRlLnN1YnNjcmliZTtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHJlZnMsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTsgLy8gU3luYyB0aGUgdmFsdWVzIG5lZWRlZCBieSBvdXIgc3Vic2NyaXB0aW9uIGhhbmRsZXIgYWZ0ZXIgZWFjaCBjb21taXQuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnMuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gTm9ybWFsbHkgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBhIHN0YXRlIGhvb2sgbmV2ZXIgY2hhbmdlcyxcbiAgICAvLyBidXQgdGhpcyBob29rIHJlY3JlYXRlcyB0aGUgcXVldWUgaW4gY2VydGFpbiBjYXNlcyAgdG8gYXZvaWQgdXBkYXRlcyBmcm9tIHN0YWxlIHNvdXJjZXMuXG4gICAgLy8gaGFuZGxlQ2hhbmdlKCkgYmVsb3cgbmVlZHMgdG8gcmVmZXJlbmNlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiB3aXRob3V0IHJlLXN1YnNjcmliaW5nLFxuICAgIC8vIHNvIHdlIHVzZSBhIHJlZiB0byBlbnN1cmUgdGhhdCBpdCBhbHdheXMgaGFzIHRoZSBsYXRlc3QgdmVyc2lvbi5cblxuICAgIHJlZnMuc2V0U25hcHNob3QgPSBzZXRTbmFwc2hvdDsgLy8gQ2hlY2sgZm9yIGEgcG9zc2libGUgY2hhbmdlIGJldHdlZW4gd2hlbiB3ZSBsYXN0IHJlbmRlcmVkIG5vdy5cblxuICAgIHZhciBtYXliZU5ld1ZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcblxuICAgIGlmICghb2JqZWN0SXModmVyc2lvbiwgbWF5YmVOZXdWZXJzaW9uKSkge1xuICAgICAgdmFyIG1heWJlTmV3U25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5ld1NuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdElzKHNuYXBzaG90LCBtYXliZU5ld1NuYXBzaG90KSkge1xuICAgICAgICBzZXRTbmFwc2hvdChtYXliZU5ld1NuYXBzaG90KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IC8vIElmIHRoZSBzb3VyY2UgbXV0YXRlZCBiZXR3ZWVuIHJlbmRlciBhbmQgbm93LFxuICAgICAgLy8gdGhlcmUgbWF5IGJlIHN0YXRlIHVwZGF0ZXMgYWxyZWFkeSBzY2hlZHVsZWQgZnJvbSB0aGUgb2xkIHNvdXJjZS5cbiAgICAgIC8vIEVudGFuZ2xlIHRoZSB1cGRhdGVzIHNvIHRoYXQgdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guXG5cblxuICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcbiAgICB9XG4gIH0sIFtnZXRTbmFwc2hvdCwgc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgd2UgZ290IGEgbmV3IHNvdXJjZSBvciBzdWJzY3JpYmUgZnVuY3Rpb24sIHJlLXN1YnNjcmliZSBpbiBhIHBhc3NpdmUgZWZmZWN0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBsYXRlc3RTZXRTbmFwc2hvdCA9IHJlZnMuc2V0U25hcHNob3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGxhdGVzdEdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKSk7IC8vIFJlY29yZCBhIHBlbmRpbmcgbXV0YWJsZSBzb3VyY2UgdXBkYXRlIHdpdGggdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLlxuXG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQSBzZWxlY3RvciBtaWdodCB0aHJvdyBhZnRlciBhIHNvdXJjZSBtdXRhdGlvbi5cbiAgICAgICAgLy8gZS5nLiBpdCBtaWdodCB0cnkgdG8gcmVhZCBmcm9tIGEgcGFydCBvZiB0aGUgc3RvcmUgdGhhdCBubyBsb25nZXIgZXhpc3RzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHN0aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB3aXRoIFJlYWN0LlxuICAgICAgICAvLyBXb3JzdCBjYXNlIHRoZSBzZWxlY3RvciB3aWxsIHRocm93IGFnYWluIGFuZCB0aGVuIGFuIGVycm9yIGJvdW5kYXJ5IHdpbGwgaGFuZGxlIGl0LlxuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoc291cmNlLl9zb3VyY2UsIGhhbmRsZUNoYW5nZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzdWJzY3JpYmUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgYW55IG9mIHRoZSBpbnB1dHMgdG8gdXNlTXV0YWJsZVNvdXJjZSBjaGFuZ2UsIHJlYWRpbmcgaXMgcG90ZW50aWFsbHkgdW5zYWZlLlxuICAvL1xuICAvLyBJZiBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgc3Vic2NyaXB0aW9uIGhhdmUgY2hhbmdlZCB3ZSBjYW4ndCBjYW4ndCB0cnVzdCB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBNYXliZSB0aGUgc291cmNlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGUgb2xkIHN1YnNjcmlwdGlvbiBpZ25vcmVkIGJ1dCB0aGUgbmV3IG9uZSBkZXBlbmRzIG9uLlxuICAvL1xuICAvLyBJZiB0aGUgZ2V0U25hcHNob3QgZnVuY3Rpb24gY2hhbmdlZCwgd2UgYWxzbyBzaG91bGRuJ3QgcmVseSBvbiB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgc291cmNlIHdhcyBtdXRhdGVkIGJldHdlZW4gdGhlIHdoZW4gdGhlIGxhc3QgXCJjaGFuZ2VcIiBldmVudCBmaXJlZCxcbiAgLy8gYW5kIHdoZW4gdGhlIGN1cnJlbnQgcmVuZGVyICh3aXRoIHRoZSBuZXcgZ2V0U25hcHNob3QgZnVuY3Rpb24pIGlzIHByb2Nlc3NlZC5cbiAgLy9cbiAgLy8gSW4gYm90aCBjYXNlcywgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHBlbmRpbmcgdXBkYXRlcyAoc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50KVxuICAvLyBhbmQgdHJlYXQgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYXMgd2UgZG8gaW4gdGhlIG1vdW50IGNhc2UuXG5cbiAgaWYgKCFvYmplY3RJcyhwcmV2R2V0U25hcHNob3QsIGdldFNuYXBzaG90KSB8fCAhb2JqZWN0SXMocHJldlNvdXJjZSwgc291cmNlKSB8fCAhb2JqZWN0SXMocHJldlN1YnNjcmliZSwgc3Vic2NyaWJlKSkge1xuICAgIC8vIENyZWF0ZSBhIG5ldyBxdWV1ZSBhbmQgc2V0U3RhdGUgbWV0aG9kLFxuICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBpbnRlcmxlYXZlZCB1cGRhdGVzLCB0aGV5IGdldCBwdXNoZWQgdG8gdGhlIG9sZGVyIHF1ZXVlLlxuICAgIC8vIFdoZW4gdGhpcyBiZWNvbWVzIGN1cnJlbnQsIHRoZSBwcmV2aW91cyBxdWV1ZSBhbmQgZGlzcGF0Y2ggbWV0aG9kIHdpbGwgYmUgZGlzY2FyZGVkLFxuICAgIC8vIGluY2x1ZGluZyBhbnkgaW50ZXJsZWF2aW5nIHVwZGF0ZXMgdGhhdCBvY2N1ci5cbiAgICB2YXIgbmV3UXVldWUgPSB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBzbmFwc2hvdFxuICAgIH07XG4gICAgbmV3UXVldWUuZGlzcGF0Y2ggPSBzZXRTbmFwc2hvdCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgbmV3UXVldWUpO1xuICAgIHN0YXRlSG9vay5xdWV1ZSA9IG5ld1F1ZXVlO1xuICAgIHN0YXRlSG9vay5iYXNlUXVldWUgPSBudWxsO1xuICAgIHNuYXBzaG90ID0gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gICAgc3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2suYmFzZVN0YXRlID0gc25hcHNob3Q7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczoge1xuICAgICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LFxuICAgICAgc2V0U25hcHNob3Q6IG51bGxcbiAgICB9LFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcblxuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBsYXN0RWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgICBlZmZlY3QubmV4dCA9IGZpcnN0RWZmZWN0O1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWZmZWN0O1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmID0ge1xuICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWYpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcmVmO1xuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiBob29rLm1lbW9pemVkU3RhdGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldkVmZmVjdCA9IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgZGVzdHJveSA9IHByZXZFZmZlY3QuZGVzdHJveTtcblxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuXG4gICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICByZWZDYWxsYmFjayhfaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QyID0gY3JlYXRlKCk7XG5cbiAgICByZWZPYmplY3QuY3VycmVudCA9IF9pbnN0MjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHsvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfdXBkYXRlU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF91cGRhdGVTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNldFBlbmRpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA8IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPyBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0UGVuZGluZyh0cnVlKTtcbiAgICB9KTtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlMiA9IG1vdW50U3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX21vdW50U3RhdGUyWzBdLFxuICAgICAgc2V0UGVuZGluZyA9IF9tb3VudFN0YXRlMlsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIGNhbiBiZSBzdG9yZWQgb24gYSByZWYsIHNpbmNlIGBzZXRQZW5kaW5nYFxuICAvLyBuZXZlciBjaGFuZ2VzLlxuXG5cbiAgdmFyIHN0YXJ0ID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQobnVsbCwgc2V0UGVuZGluZyk7XG4gIG1vdW50UmVmKHN0YXJ0KTtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZTIgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUyID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3JlcmVuZGVyU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG52YXIgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkge1xuICB7XG4gICAgcmV0dXJuIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2FybiBpbiBlZmZlY3RzIGFuZCBjYWxsYmFja3MsIHRvb1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoZ2V0SXNSZW5kZXJpbmcoKSAmJiAhZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSkge1xuICAgICAgZXJyb3IoJ1RoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlICcgKyAncGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgJyArICd2YWx1ZSBkaXJlY3RseS4nKTtcblxuICAgICAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50T3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIG1ha2VJZCA9ICBtYWtlQ2xpZW50SWRJbkRFVi5iaW5kKG51bGwsIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpKSA7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgZGlkVXBncmFkZSA9IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG5cbiAgICB2YXIgcmVhZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFkaWRVcGdyYWRlKSB7XG4gICAgICAgIC8vIE9ubHkgdXBncmFkZSBvbmNlLiBUaGlzIHdvcmtzIGV2ZW4gaW5zaWRlIHRoZSByZW5kZXIgcGhhc2UgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgdXBkYXRlIGlzIGFkZGVkIHRvIGEgc2hhcmVkIHF1ZXVlLCB3aGljaCBvdXRsYXN0cyB0aGVcbiAgICAgICAgLy8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICBkaWRVcGdyYWRlID0gdHJ1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IHRydWU7XG4gICAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgICAgICAgICB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlIHZhbHVlIGRpcmVjdGx5LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlkID0gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChyZWFkVmFsdWUpO1xuICAgIHZhciBzZXRJZCA9IG1vdW50U3RhdGUoaWQpWzFdO1xuXG4gICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gVXBkYXRlIHwgUGFzc2l2ZTtcbiAgICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHZhciBfaWQgPSBtYWtlSWQoKTtcblxuICAgIG1vdW50U3RhdGUoX2lkKTtcbiAgICByZXR1cm4gX2lkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHVwZGF0ZVN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSByZXJlbmRlclN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcihcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIFwiICsgJ3NlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyICcgKyAncmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9OyAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFN0YXNoIGl0IGluIGEgbGF6aWx5LWNyZWF0ZWQgbWFwIG9mXG4gICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuZWFnZXJSZWR1Y2VyID0gbGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG5cbiAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU11dGFibGVTb3VyY2U6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlT3BhcXVlSWRlbnRpZmllcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcblxue1xuICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG5cbiAgY29tbWl0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3ckMSgpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG5cbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cblxuICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gIC8vIGFmdGVyIHdlIHJlcmVuZGVyLiBUaGlzIGlzIHVzZWQgYXMgYSBoZWxwZXIgaW4gc3BlY2lhbCBjYXNlc1xuICAvLyB3aGVyZSB3ZSBzaG91bGQgY291bnQgdGhlIHdvcmsgb2YgbXVsdGlwbGUgcGFzc2VzLlxuICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0QmFkQ2xhc3M7XG52YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG52YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcztcbnZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcjtcbnZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgLy8gSWYgd2UgaGFkIGFueSBwcm9ncmVzc2VkIHdvcmsgYWxyZWFkeSwgdGhhdCBpcyBpbnZhbGlkIGF0IHRoaXMgcG9pbnQgc29cbiAgICAvLyBsZXQncyB0aHJvdyBpdCBvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvcmsgb2YgcmVjb25jaWxlQ2hpbGRyZW4uIEl0J3MgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZVxuICAvLyB3YW50IHRvIHJlY29uY2lsZSB3aXRob3V0IG1hdGNoaW5nIGFnYWluc3QgdGhlIGV4aXN0aW5nIHNldC4gVGhpcyBoYXMgdGhlXG4gIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAvLyBhcmUgdGhlIHNhbWUsIHRoZSBvbGQgY2hpbGQgaXMgdW5tb3VudGVkIGFuZCBhIG5ldyBjaGlsZCBpcyBjcmVhdGVkLlxuICAvL1xuICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAvLyB0aGUgZmlyc3QgcGFzcywgd2Ugc2NoZWR1bGUgYSBkZWxldGlvbiBmb3IgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuIGJ5XG4gIC8vIHBhc3NpbmcgbnVsbC5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgLy8gcGFzcyBudWxsIGluIHBsYWNlIG9mIHdoZXJlIHdlIHVzdWFsbHkgcGFzcyB0aGUgY3VycmVudCBjaGlsZCBzZXQuIFRoaXMgaGFzXG4gIC8vIHRoZSBlZmZlY3Qgb2YgcmVtb3VudGluZyBhbGwgY2hpbGRyZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZWlyXG4gIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKG91dGVyTWVtb1R5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKCAvLyBQcmV2ZW50IGJhaWxvdXQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQuXG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtbGF0ZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgLy8gd2UncmUgYmFpbGluZyBvdXQgZWFybHkgKndpdGhvdXQqIGV2YWx1YXRpbmcgdGhlIGNvbXBvbmVudCwgd2UgbmVlZFxuICAgICAgICAvLyB0byBhY2NvdW50IGZvciBpdCBoZXJlLCB0b28uIFJlc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBmaWJlci5cbiAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgIC8vIGJlY2F1c2UgYSBNZW1vQ29tcG9uZW50IGZpYmVyIGRvZXMgbm90IGhhdmUgaG9va3Mgb3IgYW4gdXBkYXRlIHF1ZXVlO1xuICAgICAgICAvLyByYXRoZXIsIGl0IHdyYXBzIGFyb3VuZCBhbiBpbm5lciBjb21wb25lbnQsIHdoaWNoIG1heSBvciBtYXkgbm90XG4gICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSByZXNldCBhdCBpbiBiZWdpbldvcmsgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBzbyB0aGF0XG4gICAgICAgIC8vIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICBpZiAobmV4dFByb3BzLm1vZGUgPT09ICdoaWRkZW4nIHx8IG5leHRQcm9wcy5tb2RlID09PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IHdlIHNob3VsZCBkbyBpbiBCbG9ja2luZyBtb2RlLlxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgbmV4dEJhc2VMYW5lcztcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkJhc2VMYW5lcyA9IHByZXZTdGF0ZS5iYXNlTGFuZXM7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZCYXNlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlOyAvLyBXZSdyZSBhYm91dCB0byBiYWlsIG91dCwgYnV0IHdlIG5lZWQgdG8gcHVzaCB0aGlzIHRvIHRoZSBzdGFjayBhbnl3YXlcbiAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIG5leHRCYXNlTGFuZXMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlcmluZyBhdCBvZmZzY3JlZW4sIHNvIHdlIGNhbiBjbGVhciB0aGUgYmFzZSBsYW5lcy5cbiAgICAgIHZhciBfbmV4dFN0YXRlMiA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGUyOyAvLyBQdXNoIHRoZSBsYW5lcyB0aGF0IHdlcmUgc2tpcHBlZCB3aGVuIHdlIGJhaWxlZCBvdXQuXG5cbiAgICAgIHZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIDogcmVuZGVyTGFuZXM7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfc3VidHJlZVJlbmRlckxhbmVzO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSdyZSBub3QgaGlkZGVuIGFueW1vcmUsIHJlc2V0IHRoZSBzdGF0ZVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcbi8vIG91cnNlbHZlcyB0byB0aGlzIGNvbnN0cmFpbnQsIHRob3VnaC4gSWYgdGhlIGJlaGF2aW9yIGRpdmVyZ2VzLCB3ZSBzaG91bGRcbi8vIGZvcmsgdGhlIGZ1bmN0aW9uLlxuXG5cbnZhciB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQgPSB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlOyAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgcmVmICE9PSBudWxsIHx8IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZikge1xuICAgIC8vIFNjaGVkdWxlIGEgUmVmIGVmZmVjdFxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLWNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKCEoY3VycmVudCAhPT0gbnVsbCAmJiB1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJZiB0aGUgcm9vdCBkb2VzIG5vdCBoYXZlIGFuIHVwZGF0ZVF1ZXVlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJhaWxlZCBvdXQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG5cbiAgaWYgKG5leHRDaGlsZHJlbiA9PT0gcHJldkNoaWxkcmVuKSB7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO1xuXG4gICAgICBpZiAobXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpXTtcbiAgICAgICAgICB2YXIgdmVyc2lvbiA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaSArIDFdO1xuICAgICAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZmxhZ3MgPSBub2RlLmZsYWdzICYgflBsYWNlbWVudCB8IEh5ZHJhdGluZztcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSByZXNldCBoeWRyYXRpb24gc3RhdGUgaW4gY2FzZSB3ZSBhYm9ydGVkIGFuZCByZXN1bWVkIGFub3RoZXJcbiAgICAvLyByb290LlxuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGlzRGlyZWN0VGV4dENoaWxkID0gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgbmV4dFByb3BzKTtcblxuICBpZiAoaXNEaXJlY3RUZXh0Q2hpbGQpIHtcbiAgICAvLyBXZSBzcGVjaWFsIGNhc2UgYSBkaXJlY3QgdGV4dCBjaGlsZCBvZiBhIGhvc3Qgbm9kZS4gVGhpcyBpcyBhIGNvbW1vblxuICAgIC8vIGNhc2UuIFdlIHdvbid0IGhhbmRsZSBpdCBhcyBhIHJlaWZpZWQgY2hpbGQuIFdlIHdpbGwgaW5zdGVhZCBoYW5kbGVcbiAgICAvLyB0aGlzIGluIHRoZSBob3N0IGVudmlyb25tZW50IHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEEgbGF6eSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbGF6eUNvbXBvbmVudCA9IGVsZW1lbnRUeXBlO1xuICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcbiAgdmFyIENvbXBvbmVudCA9IGluaXQocGF5bG9hZCk7IC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuXG4gIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gIHZhciByZXNvbHZlZFRhZyA9IHdvcmtJblByb2dyZXNzLnRhZyA9IHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gIH1cblxuICB2YXIgaGludCA9ICcnO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgfVxuICB9IC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgKyBDb21wb25lbnQgKyBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50ICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfSAvLyBQcm9tb3RlIHRoZSBmaWJlciB0byBhIGNsYXNzIGFuZCB0cnkgcmVuZGVyaW5nIGFnYWluLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3JrIG9mIGB1cGRhdGVDbGFzc0NvbXBvbmVudGBcbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICggLy8gUnVuIHRoZXNlIGNoZWNrcyBpbiBwcm9kdWN0aW9uIG9ubHkgaWYgdGhlIGZsYWcgaXMgb2ZmLlxuICAvLyBFdmVudHVhbGx5IHdlJ2xsIGRlbGV0ZSB0aGlzIGJyYW5jaCBhbHRvZ2V0aGVyLlxuICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAge1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4obnVsbCwgd29ya0luUHJvZ3Jlc3MsIHZhbHVlLCByZW5kZXJMYW5lcyk7XG5cbiAgICB7XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIHtcbiAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICBpZiAoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICB9XG5cbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgICAgdmFyIGRlYnVnU291cmNlID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlO1xuXG4gICAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKVxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gIC8vIHJlbWFpbiBvbiB0aGF0IGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY29udGVudCBoYXMgcmVzb2x2ZWQuXG4gIC8vIEZvciBleGFtcGxlLCBTdXNwZW5zZUxpc3QgY29vcmRpbmF0ZXMgd2hlbiBuZXN0ZWQgY29udGVudCBhcHBlYXJzLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgcmV0dXJuIGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IFNob3VsZCBub3QgcmVtb3ZlIHJlbmRlciBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIGR1cmluZyB0aGlzIHJlbmRlclxuICByZXR1cm4gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3dGYWxsYmFjayA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50KSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxhdGlvbiBsb2dpYy4gVHdvXG4gIC8vIG1haW4gcmVhc29ucyB0aGlzIGlzIHNvIGNvbXBsaWNhdGVkLlxuICAvL1xuICAvLyBGaXJzdCwgTGVnYWN5IE1vZGUgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVcbiAgLy8gcHJpbWFyeSB0cmVlIHdpbGwgY29tbWl0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gd2hlbiB3ZSBkbyB0aGVcbiAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAvLyBoYWNrcyB0byBtYWtlIHRoYXQgbm90IHRvdGFsbHkgYnJlYWsuIExpa2UgdHJhbnNmZXJyaW5nIGVmZmVjdHMgYW5kXG4gIC8vIGRlbGV0aW9ucyBmcm9tIGhpZGRlbiB0cmVlLiBJbiBDb25jdXJyZW50IE1vZGUsIGl0J3MgbXVjaCBzaW1wbGVyLFxuICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gIC8vIHN0YXRlLCBubyBlZmZlY3RzLiBTYW1lIGFzIHdoYXQgd2UgZG8gZm9yIE9mZnNjcmVlbiAoZXhjZXB0IHRoYXRcbiAgLy8gT2Zmc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0aGUgZmlyc3QgcmVuZGVyIHBhc3MpLlxuICAvL1xuICAvLyBTZWNvbmQgaXMgaHlkcmF0aW9uLiBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgU3VzcGVuc2UgZmliZXIgaGFzIGEgc2xpZ2h0bHlcbiAgLy8gZGlmZmVyZW50IGxheW91dCwgd2hlcmUgdGhlIGNoaWxkIHBvaW50cyB0byBhIGRlaHlkcmF0ZWQgZnJhZ21lbnQsIHdoaWNoXG4gIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgLy9cbiAgLy8gVGhpcmQsIGV2ZW4gaWYgeW91IHNldCBhbGwgdGhhdCBhc2lkZSwgU3VzcGVuc2UgaXMgbGlrZSBlcnJvciBib3VuZGFyaWVzIGluXG4gIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAvLyBhbmQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRyZWUuIExpa2UgYSB0cnkvY2F0Y2ggYmxvY2suIFNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcuIElkZWFsbHkgd2Ugd291bGQgbW9kZWwgdGhpcyB1c2luZ1xuICAvLyBhIHN0YWNrLlxuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgLy8gQnV0IG9ubHkgaWYgdGhpcyBoYXMgYSBmYWxsYmFjay5cbiAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQuXG4gICAgfVxuXG4gICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgdmFyIGZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wcy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGhpcyBpcyBhIENQVS1ib3VuZCB0cmVlLiBTa2lwIHRoaXMgdHJlZSBhbmQgc2hvdyBhIHBsYWNlaG9sZGVyIHRvXG4gICAgICAvLyB1bmJsb2NrIHRoZSBzdXJyb3VuZGluZyBjb250ZW50LiBUaGVuIGltbWVkaWF0ZWx5IHJldHJ5IGFmdGVyIHRoZVxuICAgICAgLy8gaW5pdGlhbCBjb21taXQuXG4gICAgICB2YXIgX2ZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzIHRvXG4gICAgICAvLyBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlciwgaXQnc1xuICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhcyBjb21taXR0ZWQuIElmXG4gICAgICAvLyBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmUgcGFpbnRlZC5cbiAgICAgIC8vIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy4gV2UgY2FuIHVzZSBhbnlcbiAgICAgIC8vIFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nIHNpbmNlIHdlJ3JlIGxlYXZpbmdcbiAgICAgIC8vIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZmliZXIgaGFzIGEgU3VzcGVuc2VTdGF0ZSwgdGhhdCBtZWFucyBpdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgIC8vIGEgZmFsbGJhY2suXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcblxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4yLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NCA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyZWUgaXMgbm90IGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICAvLyBUaW1lZCBvdXQuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW40ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW40LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIF9wcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUubWVtb2l6ZWRTdGF0ZSA9IF9wcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShfcHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTsgLy8gU2tpcCB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgYW5kIGNvbnRpbnVlIHdvcmtpbmcgb24gdGhlXG4gICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NiA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjUsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIE5vTGFuZXMsIG51bGwpO1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpIHtcbiAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gRGVsZXRlIHRoZSBmYWxsYmFjayBjaGlsZCBmcmFnbWVudFxuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gIChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZWZmZWN0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBIb3dldmVyLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZW1haW4gb24gdGhlIGZhbGxiYWNrLCB3ZSBubyBsb25nZXIgd2FudFxuICAgIC8vIHRvIGRlbGV0ZSBpdC4gU28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gRGVsZXRpb25zIGFyZSBzdG9yZWRcbiAgICAvLyBvbiB0aGUgc2FtZSBsaXN0IGFzIGVmZmVjdHMuIFdlIHdhbnQgdG8ga2VlcCB0aGUgZWZmZWN0cyBmcm9tIHRoZSBwcmltYXJ5XG4gICAgLy8gdHJlZS4gU28gd2UgY29weSB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCdzIGVmZmVjdCBsaXN0LCB3aGljaCBkb2VzIG5vdFxuICAgIC8vIGluY2x1ZGUgdGhlIGZhbGxiYWNrIGRlbGV0aW9uIGVmZmVjdC5cblxuXG4gICAgdmFyIHByb2dyZXNzZWRMYXN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFzdEVmZmVjdDtcblxuICAgIGlmIChwcm9ncmVzc2VkTGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5maXJzdEVmZmVjdDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBwcm9ncmVzc2VkTGFzdEVmZmVjdDtcbiAgICAgIHByb2dyZXNzZWRMYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBSZXNldCB0aGlzIHNvbWV3aGVyZSBlbHNlPyBMb2wgbGVnYWN5IG1vZGUgaXMgc28gd2VpcmQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCBwcmltYXJ5Q2hpbGRQcm9wcyk7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzKSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgaWYgKHRhaWxNb2RlICE9PSAnY29sbGFwc2VkJyAmJiB0YWlsTW9kZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzICcgKyAnXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsIHRhaWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZFNsb3QsIGluZGV4KSB7XG4gIHtcbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRTbG90KTtcbiAgICB2YXIgaXNJdGVyYWJsZSA9ICFpc0FycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICB2YXIgdHlwZSA9IGlzQXJyYXkgPyAnYXJyYXknIDogJ2l0ZXJhYmxlJztcblxuICAgICAgZXJyb3IoJ0EgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluICcgKyAnYW4gYWRkaXRpb25hbCBTdXNwZW5zZUxpc3QgdG8gY29uZmlndXJlIGl0cyByZXZlYWxPcmRlcjogJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gJyArICc8L1N1c3BlbnNlTGlzdD4nLCB0eXBlLCBpbmRleCwgdHlwZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgKyAnVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgaXNCYWNrd2FyZHMsIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZykge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWw6IHRhaWwsXG4gICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICBsYXN0RWZmZWN0OiBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCBTdXNwZW5zZUxpc3QgZG9lc24ndCB3b3JrIHNvIHdlIGp1c3RcbiAgICAvLyB1c2UgbWFrZSBpdCBhIG5vb3AgYnkgdHJlYXRpbmcgaXQgYXMgdGhlIGRlZmF1bHQgcmV2ZWFsT3JkZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gZmluZExhc3RDb250ZW50Um93KHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgIGlmIChsYXN0Q29udGVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgaXMgcGFydCBvZiB0aGUgdGFpbC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICB0YWlsID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHRhaWwgcm93cyBhZnRlciB0aGUgY29udGVudCByb3cuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byByZW5kZXIgdGhlbSBzZXBhcmF0ZWx5IGxhdGVyLlxuICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICBsYXN0Q29udGVudFJvdy5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IGhhcyBleGlzdGluZyBjb250ZW50LlxuICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgLy8gd2UgcGFzcyBpbiB0aGUgbWVhbnRpbWUuIFRoYXQncyBnb2luZyB0byBiZSBvdXIgdGFpbCBpbiByZXZlcnNlXG4gICAgICAgICAgLy8gb3JkZXIuXG4gICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByb3c7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV4dFJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgcm93LnNpYmxpbmcgPSBfdGFpbDtcbiAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgcm93ID0gbmV4dFJvdztcbiAgICAgICAgICB9IC8vIFRPRE86IElmIHdvcmtJblByb2dyZXNzLmNoaWxkIGlzIG51bGwsIHdlIGNhbiBjb250aW51ZSBvbiB0aGUgdGFpbCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCB0cnVlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIF90YWlsLCBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgbnVsbCwgLy8gdGFpbFxuICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB1bmRlZmluZWQsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgZGVmYXVsdCByZXZlYWwgb3JkZXIgaXMgdGhlIHNhbWUgYXMgbm90IGhhdmluZ1xuICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIGlmICghKCd2YWx1ZScgaW4gbmV3UHJvcHMpKSB7XG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0PycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0LCBuZXdQcm9wcy51bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xuICB2YXIgbmV3Q2hpbGRyZW47XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKSB7XG4gIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgLy8gZmliZXJzIGFuZCBjb250aW51ZS5cbiAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLicpO1xuICAgIH0gLy8gRGlzY29ubmVjdCBmcm9tIHRoZSBvbGQgY3VycmVudC5cbiAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG5cbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5pbmRleCA9IG9sZFdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBvbGRXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZWYgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFJlcGxhY2UgdGhlIGNoaWxkL3NpYmxpbmcgcG9pbnRlcnMgYWJvdmUgaXQuXG5cbiAgICBpZiAob2xkV29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKSB7XG4gICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcblxuICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC4nKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IG9sZFdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZztcblxuICAgICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY3VycmVudDtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciB1cGRhdGVMYW5lcyA9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfSAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG5cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgICAvLyBnbyBzdHJhaWdodCB0byB0aGUgZmFsbGJhY2suIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgcHJpbWFyeVxuICAgICAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkTGFuZXMgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IGRvZXMgbm90IGhhdmUgcGVuZGluZyB3b3JrIG1hcmtlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGRvIG5vdCBoYXZlIHBlbmRpbmcgd29yayB3aXRoIHN1ZmZpY2llbnRcbiAgICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cblxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIHRyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZGVmZXJyZWQuIFRoaXMgaXNcbiAgICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAgICAgLy8gYXQgdGhlIG5leHQgbGV2ZWwgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2hpbGQgcHJvcHNcbiAgICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgICAgIC8vIHBhdGggZnJvbSB0aGUgbm9ybWFsIHBhdGguIEknbSB0ZW1wdGVkIHRvIGRvIGEgbGFiZWxlZCBicmVhayBoZXJlXG4gICAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQyID8gX3VucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDMsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG59XG5cbnZhciBhcHBlbmRBbGxDaGlsZHJlbjtcbnZhciB1cGRhdGVIb3N0Q29udGFpbmVyO1xudmFyIHVwZGF0ZUhvc3RDb21wb25lbnQkMTtcbnZhciB1cGRhdGVIb3N0VGV4dCQxO1xuXG57XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWQgdG9cbiAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBnZXQgdXBkYXRlZCBiZWNhdXNlIG9uZSBvZiBvdXIgY2hpbGRyZW4gdXBkYXRlZCwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIG5ld1Byb3BzIHNvIHdlJ2xsIGhhdmUgdG8gcmV1c2UgdGhlbS5cbiAgICAvLyBUT0RPOiBTcGxpdCB0aGUgdXBkYXRlIEFQSSBhcyBzZXBhcmF0ZSBmb3IgdGhlIHByb3BzIHZzLiBjaGlsZHJlbi5cbiAgICAvLyBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiBjaGlsZHJlbiB3ZXJlbid0IHNwZWNpYWwgY2FzZWQgYXQgYWxsIHRoby5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBFeHBlcmllbmNpbmcgYW4gZXJyb3Igd2hlcmUgb2xkUHJvcHMgaXMgbnVsbC4gU3VnZ2VzdHMgYSBob3N0XG4gICAgLy8gY29tcG9uZW50IGlzIGhpdHRpbmcgdGhlIHJlc3VtZSBwYXRoLiBGaWd1cmUgb3V0IHdoeS4gUG9zc2libHlcbiAgICAvLyByZWxhdGVkIHRvIGBoaWRkZW5gLlxuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAgIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiBjb21taXRXb3JrLlxuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgLy8gSWYgdGhlIHRleHQgZGlmZmVycywgbWFyayBpdCBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpbiBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghZmliZXJSb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0LlxuICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIFJlYWN0IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gc2FmZSB0byBkbyBmb3IgdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSB0aGUgY29udGFpbmVyIHdvdWxkIGFscmVhZHkgYmUgZW1wdHkpLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIb3N0Q29tcG9uZW50JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHByZXZEaWRUaW1lb3V0ID0gcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBPbmx5IHNjaGVkdWxlIHVwZGF0ZXMgaWYgdGhlc2UgdmFsdWVzIGFyZSBub24gZXF1YWwsIGkuZS4gaXQgY2hhbmdlZC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgfHwgcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uIEluIG11dGF0aW9uIG1vZGUsIHdlIGFsc28gbmVlZCB0aGUgZmxhZyB0b1xuICAgICAgICAgICAgLy8gKnVuaGlkZSogY2hpbGRyZW4gdGhhdCB3ZXJlIHByZXZpb3VzbHkgaGlkZGVuLCBzbyBjaGVjayBpZiB0aGlzXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBwcmVwYXJlUG9ydGFsTW91bnQod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbm5hYmxlcy4gSW5zdGVhZCwgd2UnbGwgdHJhbnNmZXIgaXRzIHRoZW5uYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgbmV3VGhlbm5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBuZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3coKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgLy8gdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJiByZW5kZXJTdGF0ZS50YWlsTW9kZSA9PT0gJ2hpZGRlbicgJiYgIXJlbmRlcmVkVGFpbC5hbHRlcm5hdGUgJiYgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcm93IHdlIGp1c3QgcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIHJlbmRlcmVkIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVtb3ZlIGFueSBlZmZlY3RzIHRoYXQgd2VyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50LlxuXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSdyZSBkb25lLlxuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93KCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZC4gVGhpcyBicmVha3MgdGhlIGd1YXJhbnRlZSB0aGF0IGxpZmUtY3ljbGVzIGZpcmUgaW5cbiAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcuc2libGluZyA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgIC8vIFBvcCBhIHJvdy5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbmV4dC5zaWJsaW5nO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuICYmIG5ld1Byb3BzLm1vZGUgIT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmICghKChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgcm9vdCBmYWlsZWQgdG8gdW5tb3VudCBhZnRlciBhbiBlcnJvci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpOyAvLyBTdXNwZW5zZUxpc3QgZG9lc24ndCBhY3R1YWxseSBjYXRjaCBhbnl0aGluZy4gSXQgc2hvdWxkJ3ZlIGJlZW5cbiAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG4vLyBUaGlzIG1vZHVsZSBpcyBmb3JrZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cbi8vIEJ5IGRlZmF1bHQsIHJldHVybiBgdHJ1ZWAgdG8gbG9nIGVycm9ycyB0byB0aGUgY29uc29sZS5cbi8vIEZvcmtzIGNhbiByZXR1cm4gYGZhbHNlYCBpZiB0aGlzIGlzbid0IGRlc2lyYWJsZS5cbmZ1bmN0aW9uIHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2dDYXB0dXJlZEVycm9yKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gICAgaWYgKGxvZ0Vycm9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIGlmICh0cnVlKSB7XG4gICAgICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJzsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gYXMgYW4gZXhwYW5kbyBvbiB0aGUgZXJyb3IuXG5cbiAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIHdhcyBzaWxlbmNlZC5cbiAgICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgd291bGQgaGF2ZSBzaWxlbmNlZCB0aGUgb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzMzg0XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gc291cmNlID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcblxuICAgICAgaWYgKGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gY29tcG9uZW50TmFtZU1lc3NhZ2UgKyBcIlxcblwiICsgY29tcG9uZW50U3RhY2sgKyBcIlxcblxcblwiICsgKFwiXCIgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7IC8vIEluIGRldmVsb3BtZW50LCB3ZSBwcm92aWRlIG91ciBvd24gbWVzc2FnZSB3aXRoIGp1c3QgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAgIC8vIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciB0aGFua3MgdG8gdGhlIERFVi1vbmx5IGZha2UgZXZlbnQgdHJpY2sgaW4gUmVhY3RFcnJvclV0aWxzLlxuXG4gICAgICBjb25zb2xlWydlcnJvciddKGNvbWJpbmVkTWVzc2FnZSk7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCB3ZSBwcmludCB0aGUgZXJyb3IgZGlyZWN0bHkuXG4gICAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgbWVzc2FnZSwgdGhlIEpTIHN0YWNrLCBhbmQgYW55dGhpbmcgdGhlIGJyb3dzZXIgd2FudHMgdG8gc2hvdy5cbiAgICAgIC8vIFdlIHBhc3MgdGhlIGVycm9yIG9iamVjdCBpbnN0ZWFkIG9mIGN1c3RvbSBtZXNzYWdlIHNvIHRoYXQgdGhlIGJyb3dzZXIgZGlzcGxheXMgdGhlIGVycm9yIG5hdGl2ZWx5LlxuICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qgbm90IHRocm93LCBvciBSZWFjdCBpbnRlcm5hbCBzdGF0ZSB3aWxsIGdldCBtZXNzZWQgdXAuXG4gICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgLy8gd2Ugd2FudCB0byByZXBvcnQgdGhpcyBlcnJvciBvdXRzaWRlIG9mIHRoZSBub3JtYWwgc3RhY2sgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMTg4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IG51bGxcbiAgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIC8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlIHRvIFwicGluZ1wiIHRoZSByb290IGFuZCByZXRyeS4gQnV0IG9ubHkgaWZcbiAgLy8gb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lcyB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nICh3aGljaFxuICAvLyBhY3RzIGxpa2UgYSBcInRocmVhZCBJRFwiIGhlcmUpLlxuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gIHZhciB0aHJlYWRJRHM7XG5cbiAgaWYgKHBpbmdDYWNoZSA9PT0gbnVsbCkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCQxKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlOyAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHNvdXJjZUZpYmVyLmZpcnN0RWZmZWN0ID0gc291cmNlRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGEgd2FrZWFibGUuXG4gICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoKHNvdXJjZUZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBtZW1vaXplZFN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSBhdHRlbXB0ZWRcbiAgICAgIC8vIHRvIHJlbmRlciBpdC5cbiAgICAgIHZhciBjdXJyZW50U291cmNlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50U291cmNlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5ID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTsgLy8gU2NoZWR1bGUgdGhlIG5lYXJlc3QgU3VzcGVuc2UgdG8gcmUtcmVuZGVyIHRoZSB0aW1lZCBvdXQgdmlldy5cblxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIGlmIChfd29ya0luUHJvZ3Jlc3MudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2UoX3dvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSkpIHtcbiAgICAgICAgLy8gRm91bmQgdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgLy8gYXR0YWNoIGFub3RoZXIgbGlzdGVuZXIgdG8gZmxpcCB0aGUgYm91bmRhcnkgYmFjayB0byBpdHMgbm9ybWFsIHN0YXRlLlxuICAgICAgICB2YXIgd2FrZWFibGVzID0gX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YWtlYWJsZXMuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgfSAvLyBJZiB0aGUgYm91bmRhcnkgaXMgb3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYmxvY2tpbmcgbW9kZSB0cmVlLiBJZiB0aGUgU3VzcGVuc2UgaXMgb3V0c2lkZSBvZiBpdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkICpub3QqIHN1c3BlbmQgdGhlIGNvbW1pdC5cblxuXG4gICAgICAgIGlmICgoX3dvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyAmPSB+KExpZmVjeWNsZUVmZmVjdE1hc2sgfCBJbmNvbXBsZXRlKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNvdXJjZUZpYmVyID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNvdXJjZUZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBjbGFzcyBjb21wb25lbnQuIEZvciBleGFtcGxlLCB3ZSBzaG91bGQgbm90IGNhbGxcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgaWYgaXQgaXMgZGVsZXRlZC5cbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSB0cnkgcmVuZGVyaW5nIGFnYWluLCB3ZSBzaG91bGQgbm90IHJldXNlIHRoZSBjdXJyZW50IGZpYmVyLFxuICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgICAgIC8vIHByZXZlbnQgYSBiYWlsIG91dC5cbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgICAgIGVucXVldWVVcGRhdGUoc291cmNlRmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAgIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgICAgICAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgICAgICAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgICAgICAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGJvdW5kYXJ5IGFscmVhZHkgY2FwdHVyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBDb250aW51ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gYm91bmRhcnkuXG5cblxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIEZhbGx0aHJvdWdoIHRvIGVycm9yIG1vZGUuXG4gICAgLy8gVE9ETzogVXNlIGludmFyaWFudCBzbyB0aGUgbWVzc2FnZSBpcyBzdHJpcHBlZCBpbiBwcm9kP1xuXG5cbiAgICB2YWx1ZSA9IG5ldyBFcnJvcigoZ2V0Q29tcG9uZW50TmFtZShzb3VyY2VGaWJlci50eXBlKSB8fCAnQSBSZWFjdCBjb21wb25lbnQnKSArICcgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuJyArICdcXG4nICsgJ0FkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gJyArICdwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS4nKTtcbiAgfSAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyAmJiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIF9sYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZTIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtTZXQgOiBTZXQ7XG5cbnZhciBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIgPSBmdW5jdGlvbiAoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciwgbnVsbCwgY3VycmVudCwgaW5zdGFuY2UpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciB1bm1vdW50RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCB1bm1vdW50RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgdmFyIHJlZkVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHJlZkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBkaWRXYXJuU2V0ID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgIGVycm9yKCclcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSAnICsgJ211c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2VmZmVjdCA9IGVmZmVjdCxcbiAgICAgICAgICBuZXh0ID0gX2VmZmVjdC5uZXh0LFxuICAgICAgICAgIHRhZyA9IF9lZmZlY3QudGFnO1xuXG4gICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSAmJiAodGFnICYgSGFzRWZmZWN0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gbmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMaWZlQ3ljbGVzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgZWZmZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgKGR1cmluZyBtdXRhdGlvbiBwaGFzZSkuXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG5cblxuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgY29tbWl0VGltZSwgZmluaXNoZWRSb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gJyArICdVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgY3VycmVudFJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChjdXJyZW50UmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50UmVmKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufSAvLyBVc2VyLW9yaWdpbmF0aW5nIGVycm9ycyAobGlmZWN5Y2xlcyBhbmQgcmVmcykgc2hvdWxkIG5vdCBpbnRlcnJ1cHRcbi8vIGRlbGV0aW9uLCBzbyBkb24ndCBsZXQgdGhlbSB0aHJvdy4gSG9zdC1vcmlnaW5hdGluZyBlcnJvcnMgc2hvdWxkXG4vLyBpbnRlcnJ1cHQgZGVsZXRpb24sIHNvIGl0J3Mgb2theVxuXG5cbmZ1bmN0aW9uIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIG9uQ29tbWl0VW5tb3VudChjdXJyZW50KTtcblxuICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIF9lZmZlY3QyID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZGVzdHJveSA9IF9lZmZlY3QyLmRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0Mi50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChjdXJyZW50LCBlZmZlY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgLy8gd2UgZG8gYW4gaW5uZXIgbG9vcCB3aGlsZSB3ZSdyZSBzdGlsbCBpbnNpZGUgdGhlIGhvc3Qgbm9kZS5cbiAgdmFyIG5vZGUgPSByb290O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gbW9yZSBjb21wb3NpdGUgb3IgaG9zdCBub2Rlcy5cbiAgICAvLyBTa2lwIHBvcnRhbHMgYmVjYXVzZSBjb21taXRVbm1vdW50KCkgY3VycmVudGx5IHZpc2l0cyB0aGVtIHJlY3Vyc2l2ZWx5LlxuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwgJiYgKCAvLyBJZiB3ZSB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgdXNpbmcgY29tbWl0VW5tb3VudCBhYm92ZS5cbiAgICAvLyBJZiB3ZSBkb24ndCB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgaGVyZSBpbnN0ZWFkLlxuICAgICBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJNdXRhdGlvbihmaWJlcikge1xuICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlcnMgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLiBJZGVhbGx5LCB3ZVxuICAvLyBzaG91bGQgY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC4gVGhpcyBjaGlsZFxuICAvLyBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgbnVsbCBvdXQgc2libGluZyBoZXJlLCBvdGhlcndpc2UgaXQgY2FuIGNhdXNlIGlzc3Vlc1xuICAvLyB3aXRoIGZpbmRET01Ob2RlIGFuZCBob3cgaXQgcmVxdWlyZXMgdGhlIHNpYmxpbmcgZmllbGQgdG8gY2Fycnkgb3V0XG4gIC8vIHRyYXZlcnNhbCBpbiBhIGxhdGVyIGVmZmVjdC4gU2VlIFBSICMxNjgyMC4gV2Ugbm93IGNsZWFyIHRoZSBzaWJsaW5nXG4gIC8vIGZpZWxkIGFmdGVyIGVmZmVjdHMsIHNlZTogZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vXG4gIC8vIERvbid0IGRpc2Nvbm5lY3Qgc3RhdGVOb2RlIG5vdzsgaXQgd2lsbCBiZSBkZXRhY2hlZCBpbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy8gSXQgbWF5IGJlIHJlcXVpcmVkIGlmIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgLy8gYW5kIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgdGhyb3dzIHdoaWxlIHVubW91bnRpbmcgYSBwYXNzaXZlIGVmZmVjdC5cbiAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5maXJzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCBmaWJlci50YWcgPT09IEhvc3RQb3J0YWw7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAvLyBub2RlLiBVbmZvcnR1bmF0ZWx5LCBpZiBtdWx0aXBsZSBpbnNlcnRpb25zIGFyZSBkb25lIGluIGEgcm93IHdlIGhhdmUgdG9cbiAgLy8gc2VhcmNoIHBhc3QgdGhlbS4gVGhpcyBsZWFkcyB0byBleHBvbmVudGlhbCBzZWFyY2ggZm9yIHRoZSBuZXh0IHNpYmxpbmcuXG4gIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICBzaWJsaW5nczogd2hpbGUgKHRydWUpIHtcbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IGlzSG9zdFBhcmVudChub2RlLnJldHVybikpIHtcbiAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAvLyBsYXN0IHNpYmxpbmcuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGl0IGlzIG5vdCBob3N0IG5vZGUgYW5kLCB3ZSBtaWdodCBoYXZlIGEgaG9zdCBub2RlIGluc2lkZSBpdC5cbiAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgIGlmIChub2RlLmZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkID09PSBudWxsIHx8IG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoaXMgaG9zdCBub2RlIGlzIHN0YWJsZSBvciBhYm91dCB0byBiZSBwbGFjZWQuXG5cblxuICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBwYXJlbnQ7XG4gIHZhciBpc0NvbnRhaW5lcjtcbiAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gY3VycmVudDsgLy8gRWFjaCBpdGVyYXRpb24sIGN1cnJlbnRQYXJlbnQgaXMgcG9wdWxhdGVkIHdpdGggbm9kZSdzIGhvc3QgcGFyZW50IGlmIG5vdFxuICAvLyBjdXJyZW50UGFyZW50SXNWYWxpZC5cblxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICghKHBhcmVudCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gLy8gRG9uJ3QgdmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS5cblxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBvdXQgb2YgdGhlIHBvcnRhbCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGtlZXAgYSBzdGFjayBvZiB0aGVtLCB3ZSB3aWxsIHNlYXJjaCBmb3IgaXQuXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIGRldGFjaEZpYmVyTXV0YXRpb24oY3VycmVudCk7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGRldGFjaEZpYmVyTXV0YXRpb24oYWx0ZXJuYXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRXb3JrKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgIC8vIGRlc3Ryb3kgZnVuY3Rpb25zIGZvciBhbGwgZmliZXJzIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBjcmVhdGUgZnVuY3Rpb25zLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgIHZhciBuZXdQcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0VXBkYXRlKGluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIGlmICghKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcbiAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChfcm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IGh5ZHJhdGVkLiBObyBuZWVkIHRvIGh5ZHJhdGUgYWdhaW4uXG4gICAgICAgICAgICBfcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihfcm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspO1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSAhPT0gbnVsbCkge1xuICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuXG4gICAge1xuICAgICAgLy8gSGlkZSB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBwcmltYXJ5IGNoaWxkcmVuLiBUT0RPOlxuICAgICAgLy8gSWRlYWxseSwgdGhpcyBlZmZlY3Qgd291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgT2Zmc2NyZWVuIGZpYmVyXG4gICAgICAvLyBpdHNlbGYuIFRoYXQncyBob3cgdW5oaWRpbmcgd29ya3M6IHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHNjaGVkdWxlcyBhblxuICAgICAgLy8gZWZmZWN0IG9uIGl0c2VsZi4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgY29tcG9uZW50IGRpZG4ndCBjb21wbGV0ZSxcbiAgICAgIC8vIHNvIHRoZSBmaWJlciB3YXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBub3JtYWwgcGF0aC4gV2VcbiAgICAgIC8vIGNvdWxkIGhhdmUgYXBwZW5kZWQgaXQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBTdXNwZW5zZSBjb21wb25lbnQnc1xuICAgICAgLy8gc2Vjb25kIHBhc3MsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBpcyBsZXNzIGNvbXBsaWNhdGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAvLyBzaW1wbGVyIGlmIHdlIGdvdCByaWQgb2YgdGhlIGVmZmVjdCBsaXN0IGFuZCB0cmF2ZXJzZWQgdGhlIHRyZWUsIGxpa2VcbiAgICAgIC8vIHdlJ3JlIHBsYW5uaW5nIHRvIGRvLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IGZpbmlzaGVkV29yay5jaGlsZDtcbiAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKHByaW1hcnlDaGlsZFBhcmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaykge1xuICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gIC8vIEZvciBlYWNoIHdha2VhYmxlLCBhdHRhY2ggYSBsaXN0ZW5lciBzbyB0aGF0IHdoZW4gaXQgcmVzb2x2ZXMsIFJlYWN0XG4gIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgdmFyIHdha2VhYmxlcyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdha2VhYmxlLl9fcmVhY3REb05vdFRyYWNlSW50ZXJhY3Rpb25zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXRyeSA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChyZXRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4vLyBJdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBib3VuZGFyeSBpcyBhbHJlYWR5IGhpZGRlbi5cbi8vIFRPRE86IFVzZSBhbiBlZmZlY3QgdGFnLlxuXG5cbmZ1bmN0aW9uIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCBvbGRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZSAhPT0gbnVsbCAmJiBuZXdTdGF0ZS5kZWh5ZHJhdGVkID09PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50KSB7XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50LnN0YXRlTm9kZSk7XG59XG5cbnZhciBDT01QT05FTlRfVFlQRSA9IDA7XG52YXIgSEFTX1BTRVVET19DTEFTU19UWVBFID0gMTtcbnZhciBST0xFX1RZUEUgPSAyO1xudmFyIFRFU1RfTkFNRV9UWVBFID0gMztcbnZhciBURVhUX1RZUEUgPSA0O1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IkMSA9IFN5bWJvbC5mb3I7XG4gIENPTVBPTkVOVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzcycpO1xuICBST0xFX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3Iucm9sZScpO1xuICBURVNUX05BTUVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCQxKCkge1xuICB7XG4gICAgY29tbWl0SG9va3MuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0SG9vaykge1xuICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAqL1xuMDtcbnZhciBCYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICovXG4xO1xudmFyIEV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgRGlzY3JldGVFdmVudENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBMZWdhY3lVbmJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICovXG44O1xudmFyIFJlbmRlckNvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFJldHJ5QWZ0ZXJFcnJvciA9XG4vKiAgICAgICAqL1xuNjQ7XG52YXIgUm9vdEluY29tcGxldGUgPSAwO1xudmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xudmFyIFJvb3RFcnJvcmVkID0gMjtcbnZhciBSb290U3VzcGVuZGVkID0gMztcbnZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbnZhciBSb290Q29tcGxldGVkID0gNTsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbnZhciBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IG51bGw7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgUkVOREVSX1RJTUVPVVRfTVM7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lO1xufVxudmFyIG5leHRFZmZlY3QgPSBudWxsO1xudmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbnZhciBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xudmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcbnZhciByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDsgLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xuXG52YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7IC8vIE1hcmtzIHRoZSBuZWVkIHRvIHJlc2NoZWR1bGUgcGVuZGluZyBpbnRlcmFjdGlvbnMgYXQgdGhlc2UgbGFuZXNcbi8vIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSB0cmFjZWQgYWNyb3NzIGNvbXBvbmVudHNcbi8vIHRoYXQgc3Bhd24gbmV3IHdvcmsgZHVyaW5nIHJlbmRlci4gRS5nLiBoaWRkZW4gYm91bmRhcmllcywgc3VzcGVuZGVkIFNTUlxuLy8gaHlkcmF0aW9uIG9yIFN1c3BlbnNlTGlzdC5cbi8vIFRPRE86IENhbiB1c2UgYSBiaXRtYXNrIGluc3RlYWQgb2YgYW4gYXJyYXlcblxudmFyIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDsgLy8gSWYgdHdvIHVwZGF0ZXMgYXJlIHNjaGVkdWxlZCB3aXRoaW4gdGhlIHNhbWUgZXZlbnQsIHdlIHNob3VsZCB0cmVhdCB0aGVpclxuLy8gZXZlbnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2sgdGltZSBoYXMgYWR2YW5jZWRcbi8vIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbC5cblxudmFyIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbnZhciBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG52YXIgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lczsgLy8gRGV2IG9ubHkgZmxhZyB0aGF0IHRyYWNrcyBpZiBwYXNzaXZlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBiZWluZyBmbHVzaGVkLlxuLy8gV2Ugd2FybiBhYm91dCBzdGF0ZSB1cGRhdGVzIGZvciB1bm1vdW50ZWQgY29tcG9uZW50cyBkaWZmZXJlbnRseSBpbiB0aGlzIGNhc2UuXG5cbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGUgaW5wdXRzXG4gIC8vIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIHdlIHVzZSB0aGUgYHJlbmRlckxhbmVzYFxuICAvLyB0byBhdm9pZCBjaG9vc2luZyBhIGxhbmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLlxuICAvL1xuICAvLyBIb3dldmVyLCB0aGUgXCJpbmNsdWRlZFwiIGxhbmVzIGNvdWxkIGJlIG11dGF0ZWQgaW4gYmV0d2VlbiB1cGRhdGVzIGluIHRoZVxuICAvLyBzYW1lIGV2ZW50LCBsaWtlIGlmIHlvdSBwZXJmb3JtIGFuIHVwZGF0ZSBpbnNpZGUgYGZsdXNoU3luY2AuIE9yIGFueSBvdGhlclxuICAvLyBjb2RlIHBhdGggdGhhdCBtaWdodCBjYWxsIGBwcmVwYXJlRnJlc2hTdGFja2AuXG4gIC8vXG4gIC8vIFRoZSB0cmljayB3ZSB1c2UgaXMgdG8gY2FjaGUgdGhlIGZpcnN0IG9mIGVhY2ggb2YgdGhlc2UgaW5wdXRzIHdpdGhpbiBhblxuICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpcyBvdmVyLlxuICAvLyBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gIC8vXG4gIC8vIFdlJ2xsIGRvIHRoZSBzYW1lIGZvciBgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzYCBiZWxvdy5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHZhciBpc1RyYW5zaXRpb24gPSByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSAhPT0gTm9UcmFuc2l0aW9uO1xuXG4gIGlmIChpc1RyYW5zaXRpb24pIHtcbiAgICBpZiAoY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCAhPT0gbnVsbCA/IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290LnBlbmRpbmdMYW5lcyA6IE5vTGFuZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmRUcmFuc2l0aW9uTGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcywgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzKTtcbiAgfSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBTY2hlZHVsZXIgcHJpb3JpdHkuXG4gIC8vIFRvIGRvIHRoYXQsIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGFuIHVwZGF0ZSBsYW5lIHByaW9yaXR5LlxuXG5cbiAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTsgLy8gVGhlIG9sZCBiZWhhdmlvciB3YXMgdXNpbmcgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBTY2hlZHVsZXIuXG4gIC8vIFRoaXMgY291cGxlcyBSZWFjdCB0byB0aGUgU2NoZWR1bGVyIGludGVybmFscywgc28gd2UncmUgcmVwbGFjaW5nIGl0XG4gIC8vIHdpdGggdGhlIGN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkgYWJvdmUuIEFzIGFuIGV4YW1wbGUgb2YgaG93IHRoaXNcbiAgLy8gY291bGQgYmUgcHJvYmxlbWF0aWMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYFNjaGVkdWxlci5ydW5XaXRoUHJpb3JpdHlgLFxuICAvLyB0aGVuIHdlJ2xsIGdldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnVubmluZyBTY2hlZHVsZXIgdGFzayxcbiAgLy8gd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgd2Ugd2FudC5cblxuICB2YXIgbGFuZTtcblxuICBpZiAoIC8vIFRPRE86IFRlbXBvcmFyeS4gV2UncmUgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgZGlzY3JldGUgdXBkYXRlcy5cbiAgKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiBzY2hlZHVsZXJQcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMikge1xuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlckxhbmVQcmlvcml0eSA9IHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHkpO1xuXG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKHNjaGVkdWxlckxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gU2VlIGByZXF1ZXN0VXBkYXRlTGFuZWAgZm9yIGV4cGxhbmF0aW9uIG9mIGBjdXJyZW50RXZlbnRXaXBMYW5lc2BcblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmaW5kUmV0cnlMYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG4gIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgIC8vIGBkZWZlclJlbmRlclBoYXNlVXBkYXRlVG9OZXh0QmF0Y2hgIGZsYWcgaXMgb2ZmIGFuZCB0aGlzIGlzIGEgcmVuZGVyXG4gICAgLy8gcGhhc2UgdXBkYXRlLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHRyZWF0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGFzIGlmXG4gICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcmVxdWVzdFVwZGF0ZUxhbmVQcmlvcml0eSBhbHNvIHJlYWRzIHRoZSBwcmlvcml0eS4gUGFzcyB0aGVcbiAgLy8gcHJpb3JpdHkgYXMgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhpcyBvbmUuXG5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGxhbmUgPT09IFN5bmNMYW5lKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTsgLy8gVGhpcyBpcyBhIGxlZ2FjeSBlZGdlIGNhc2UuIFRoZSBpbml0aWFsIG1vdW50IG9mIGEgUmVhY3RET00ucmVuZGVyLWVkXG4gICAgICAvLyByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcyBzaG91bGQgYmUgc3luY2hyb25vdXMsIGJ1dCBsYXlvdXQgdXBkYXRlc1xuICAgICAgLy8gc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoLlxuXG4gICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTY2hlZHVsZSBhIGRpc2NyZXRlIHVwZGF0ZSBidXQgb25seSBpZiBpdCdzIG5vdCBTeW5jLlxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICggLy8gT25seSB1cGRhdGVzIGF0IHVzZXItYmxvY2tpbmcgcHJpb3JpdHkgb3IgZ3JlYXRlciBhcmUgY29uc2lkZXJlZFxuICAgIC8vIGRpc2NyZXRlLCBldmVuIGluc2lkZSBhIGRpc2NyZXRlIGV2ZW50LlxuICAgIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIGV2ZW50LiBUcmFjayB0aGUgbG93ZXN0IHByaW9yaXR5XG4gICAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICAgIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID09PSBudWxsKSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBuZXcgU2V0KFtyb290XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmFkZChyb290KTtcbiAgICAgIH1cbiAgICB9IC8vIFNjaGVkdWxlIG90aGVyIHVwZGF0ZXMgYWZ0ZXIgaW4gY2FzZSB0aGUgY2FsbGJhY2sgaXMgc3luYy5cblxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuICB9IC8vIFdlIHVzZSB0aGlzIHdoZW4gYXNzaWduaW5nIGEgbGFuZSBmb3IgYSB0cmFuc2l0aW9uIGluc2lkZVxuICAvLyBgcmVxdWVzdFVwZGF0ZUxhbmVgLiBXZSBhc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBiZWluZyB1cGRhdGVkLFxuICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgcm9vdCBhcHAgaXQgcHJvYmFibHkgaXMuIElmIGl0J3Mgbm90XG4gIC8vIHRoZSBzYW1lIHJvb3QsIHRoZW4gaXQncyBub3QgYSBodWdlIGRlYWwsIHdlIGp1c3QgbWlnaHQgYmF0Y2ggbW9yZSBzdHVmZlxuICAvLyB0b2dldGhlciBtb3JlIHRoYW4gbmVjZXNzYXJ5LlxuXG5cbiAgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSByb290O1xufSAvLyBUaGlzIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB3ZSBjYW4gbWFyayBhIGZpYmVyIHdpdGggcGVuZGluZ1xuLy8gd29yayB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgdHlwaWNhbCB1cGRhdGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gYW4gZXZlbnQ7XG4vLyBlLmcuIHJldHJ5aW5nIGEgU3VzcGVuc2UgYm91bmRhcnkgaXNuJ3QgYW4gdXBkYXRlLCBidXQgaXQgZG9lcyBzY2hlZHVsZSB3b3JrXG4vLyBvbiBhIGZpYmVyLlxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIHBhcmVudC5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnQuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlOyAvLyBDaGVjayBpZiBhbnkgbGFuZXMgYXJlIGJlaW5nIHN0YXJ2ZWQgYnkgb3RoZXIgd29yay4gSWYgc28sIG1hcmsgdGhlbSBhc1xuICAvLyBleHBpcmVkIHNvIHdlIGtub3cgdG8gd29yayBvbiB0aG9zZSBuZXh0LlxuXG4gIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpOyAvLyBEZXRlcm1pbmUgdGhlIG5leHQgbGFuZXMgdG8gd29yayBvbiwgYW5kIHRoZWlyIHByaW9yaXR5LlxuXG4gIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTsgLy8gVGhpcyByZXR1cm5zIHRoZSBwcmlvcml0eSBsZXZlbCBjb21wdXRlZCBkdXJpbmcgdGhlIGBnZXROZXh0TGFuZXNgIGNhbGwuXG5cbiAgdmFyIG5ld0NhbGxiYWNrUHJpb3JpdHkgPSByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpO1xuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdGFzay4gV2UgbWF5IGJlIGFibGUgdG8gcmV1c2UgaXQuXG5cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSkge1xuICAgICAgLy8gVGhlIHByaW9yaXR5IGhhc24ndCBjaGFuZ2VkLiBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHRhc2suIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgcHJpb3JpdHkgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBjYWxsYmFjay4gV2UnbGwgc2NoZWR1bGUgYSBuZXdcbiAgICAvLyBvbmUgYmVsb3cuXG5cblxuICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFN5bmMgUmVhY3QgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgb24gYSBzcGVjaWFsXG4gICAgLy8gaW50ZXJuYWwgcXVldWVcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkpIHtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobmV3Q2FsbGJhY2tQcmlvcml0eSk7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH1cblxuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5IGNvbmN1cnJlbnQgdGFzaywgaS5lLiBhbnl0aGluZyB0aGF0XG4vLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290KSB7XG4gIC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cbiAgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgdG8gd29yayBvbiwgdXNpbmcgdGhlIGZpZWxkcyBzdG9yZWRcbiAgLy8gb24gdGhlIHJvb3QuXG5cblxuICB2YXIgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTtcblxuICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgLy9cbiAgICAvLyBTbyB3ZSdsbCB0aHJvdyBvdXQgdGhlIGN1cnJlbnQgd29yayBhbmQgcmVzdGFydC5cbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgfSBlbHNlIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5jb21wbGV0ZSkge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhlIHRhc2sgbm9kZSBzY2hlZHVsZWQgZm9yIHRoaXMgcm9vdCBpcyB0aGUgc2FtZSBvbmUgdGhhdCdzXG4gICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJbmNvbXBsZXRlOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJldHJ5IHRoaXMgdHJlZS4gSWYgd2UgcmVhY2hlZFxuICAgICAgICAvLyB0aGlzIHBvaW50LCBpdCBlcnJvcmVkIGFnYWluLiBDb21taXQgaXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgLy8gcGxhY2Vob2xkZXIgYW5kIHdpdGhvdXQgc2NoZWR1bGluZyBhIHRpbWVvdXQuIERlbGF5IGluZGVmaW5pdGVseVxuICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdHJhbnNpdGlvbiwgYnV0IHdlIGRpZCB0cmlnZ2VyIGFuIGF2b2lkZWQgc3RhdGUuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBwbGFjZWhvbGRlciB0byBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXksIHVzaW5nIHRoZSBKdXN0XG4gICAgICAgICAgLy8gTm90aWNlYWJsZSBEaWZmZXJlbmNlLlxuICAgICAgICAgIC8vIFRPRE86IElzIHRoZSBKTkQgb3B0aW1pemF0aW9uIHdvcnRoIHRoZSBhZGRlZCBjb21wbGV4aXR5PyBJZiB0aGlzIGlzXG4gICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIHRyYWNrIHRoZSBldmVudCB0aW1lLCB0aGVuIHByb2JhYmx5IG5vdC5cbiAgICAgICAgICAvLyBDb25zaWRlciByZW1vdmluZy5cbiAgICAgICAgICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIHZhciBldmVudFRpbWVNcyA9IG1vc3RSZWNlbnRFdmVudFRpbWU7XG4gICAgICAgICAgdmFyIHRpbWVFbGFwc2VkTXMgPSBub3coKSAtIGV2ZW50VGltZU1zO1xuXG4gICAgICAgICAgdmFyIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZE1zKSAtIHRpbWVFbGFwc2VkTXM7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2sgaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYXJyaXZlLlxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZSB3b3JrIGNvbXBsZXRlZC4gUmVhZHkgdG8gY29tbWl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgLy8gcmFyZWx5LCBzaW5jZSB3ZSB0cnkgdG8gYXZvaWQgaXQpIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMpO1xuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgdmFyIGxhbmVzO1xuICB2YXIgZXhpdFN0YXR1cztcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGluY2x1ZGVzU29tZUxhbmUocm9vdC5leHBpcmVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoZXJlJ3MgYSBwYXJ0aWFsIHRyZWUsIGFuZCBhdCBsZWFzdCBvbmUgb2YgaXRzIGxhbmVzIGhhcyBleHBpcmVkLiBGaW5pc2hcbiAgICAvLyByZW5kZXJpbmcgaXQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcmVzdCBvZiB0aGUgZXhwaXJlZCB3b3JrLlxuICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBwYXJ0IG9mIHRoZSB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBjb25jdXJyZW50bHkuIElmIHRoZSB3aG9sZSB0cmVlIGlzIHJlbmRlcmVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBubyBpbnRlcmxlYXZlZCBldmVudHMuXG4gICAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB0aHJvdyBmYXRhbEVycm9yO1xuICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgLy8gd2lsbCBjb21taXQgaXQgZXZlbiBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLlxuXG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgY29tbWl0Um9vdChyb290KTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ3Vuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzICcgKyAnYWxyZWFkeSByZW5kZXJpbmcuJyk7XG4gICAgICB9XG4gICAgfSAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZywgc28gd2UgY2FuJ3Qgc3luY2hyb25vdXNseSBmbHVzaCBwZW5kaW5nIHdvcmsuXG4gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBhIG5lc3RlZCBldmVudCBkaXNwYXRjaCB0cmlnZ2VyZWQgYnkgYSBsaWZlY3ljbGUvZWZmZWN0LFxuICAgIC8vIGxpa2UgYGVsLmZvY3VzKClgLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKTsgLy8gSWYgdGhlIGRpc2NyZXRlIHVwZGF0ZXMgc2NoZWR1bGVkIHBhc3NpdmUgZWZmZWN0cywgZmx1c2ggdGhlbSBub3cgc28gdGhhdFxuICAvLyB0aGV5IGZpcmUgYmVmb3JlIHRoZSBuZXh0IHNlcmlhbCBldmVudC5cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpIHtcbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICAvLyBGb3IgZWFjaCByb290IHdpdGggcGVuZGluZyBkaXNjcmV0ZSB1cGRhdGVzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvXG4gICAgLy8gaW1tZWRpYXRlbHkgZmx1c2ggdGhlbS5cbiAgICB2YXIgcm9vdHMgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzO1xuICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsO1xuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB9KTtcbiAgfSAvLyBOb3cgZmx1c2ggdGhlIGltbWVkaWF0ZSBxdWV1ZS5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMkMShmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IERpc2NyZXRlRXZlbnRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYywgZCkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcblxuICBpZiAoKHByZXZFeGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGEpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZm4uYmluZChudWxsLCBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGRvIHtcbiAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogSSBmb3VuZCBhbmQgYWRkZWQgdGhpcyBtaXNzaW5nIGxpbmUgd2hpbGUgaW52ZXN0aWdhdGluZyBhXG4gICAgICAvLyBzZXBhcmF0ZSBpc3N1ZS4gV3JpdGUgYSByZWdyZXNzaW9uIHRlc3QgdXNpbmcgc3RyaW5nIHJlZnMuXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCB8fCBlcnJvcmVkV29yay5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgdG8gYmUgd29ya2luZyBvbiBhIG5vbi1yb290IGZpYmVyLiBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGFuY2VzdG9yIHRoYXQgY2FuIGhhbmRsZSBpdDsgdGhlIHJvb3QgaXNcbiAgICAgICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAgICAgLy8gYm91bmRhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIGVycm9yZWRXb3JrLnJldHVybiwgZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBjb21wbGV0ZVVuaXRPZldvcmsoZXJyb3JlZFdvcmspO1xuICAgIH0gY2F0Y2ggKHlldEFub3RoZXJUaHJvd25WYWx1ZSkge1xuICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSByZXR1cm4gcGF0aCBhbHNvIHRocmV3LlxuICAgICAgdGhyb3duVmFsdWUgPSB5ZXRBbm90aGVyVGhyb3duVmFsdWU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gZXJyb3JlZFdvcmsgJiYgZXJyb3JlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBoYXMgYWxyZWFkeSBlcnJvcmVkLCB0aGVuIHdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gdGhlIGVycm9yLiBCdWJibGUgaXQgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gICAgICAgIGVycm9yZWRXb3JrID0gZXJyb3JlZFdvcmsucmV0dXJuO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGVycm9yZWRXb3JrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICAgIHJldHVybjtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgIC8vIEluc3RlYWQgdGhlIGZpcnN0IHJlbmRlcmVyIHdpbGwgbGF6aWx5IGF0dGFjaCBvbmUsIGluIG9yZGVyIHRvIGdpdmVcbiAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHB1c2hJbnRlcmFjdGlvbnMocm9vdCkge1xuICB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAvLyBwaGFzZSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIG1pc3Rha2Ugd2hlcmUgd2Ugc3VzcGVuZCBsYW5lcyB0aGF0IHdlcmVcbiAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRFcnJvcigpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RDb21wbGV0ZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gQWxyZWFkeSB0aW1lZCBvdXQsIHNvIHBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcblxuICAgIHJldHVybiBSb290SW5jb21wbGV0ZTtcbiAgfSBlbHNlIHtcblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgZWZmZWN0cyBvZiB0aGUgc3VidHJlZSBhbmQgdGhpcyBmaWJlciBvbnRvIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdCBvZiB0aGUgcGFyZW50LiBUaGUgY29tcGxldGlvbiBvcmRlciBvZiB0aGUgY2hpbGRyZW4gYWZmZWN0cyB0aGVcbiAgICAgICAgLy8gc2lkZS1lZmZlY3Qgb3JkZXIuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yay5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZmxhZ3MgPSBjb21wbGV0ZWRXb3JrLmZsYWdzOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChfbmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiBjb21wbGV0aW5nIHRoaXMgd29yayBzcGF3bmVkIG5ldyB3b3JrLCBkbyB0aGF0IG5leHQuIFdlJ2xsIGNvbWVcbiAgICAgICAgLy8gYmFjayBoZXJlIGFnYWluLlxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICBfbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBfbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7IC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG5cbiAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIGVmZmVjdCBsaXN0LlxuICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKSB7XG4gIGlmICggLy8gVE9ETzogTW92ZSB0aGlzIGNoZWNrIG91dCBvZiB0aGUgaG90IHBhdGggYnkgbW92aW5nIGByZXNldENoaWxkTGFuZXNgXG4gIC8vIHRvIHN3aXRjaCBzdGF0ZW1lbnQgaW4gYGNvbXBsZXRlV29ya2AuXG4gIChjb21wbGV0ZWRXb3JrLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50IHx8IGNvbXBsZXRlZFdvcmsudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiAhaW5jbHVkZXNTb21lTGFuZShzdWJ0cmVlUmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICB2YXIgdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjsgLy8gV2hlbiBhIGZpYmVyIGlzIGNsb25lZCwgaXRzIGFjdHVhbER1cmF0aW9uIGlzIHJlc2V0IHRvIDAuIFRoaXMgdmFsdWUgd2lsbFxuICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgLy8gV2hlbiB3b3JrIGlzIGRvbmUsIGl0IHNob3VsZCBidWJibGUgdG8gdGhlIHBhcmVudCdzIGFjdHVhbER1cmF0aW9uLiBJZlxuICAgIC8vIHRoZSBmaWJlciBoYXMgbm90IGJlZW4gY2xvbmVkIHRob3VnaCwgKG1lYW5pbmcgbm8gd29yayB3YXMgZG9uZSksIHRoZW5cbiAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBidWJibGUuIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhc1xuICAgIC8vIGNsb25lZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkIHBvaW50ZXIuXG5cbiAgICB2YXIgc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgfHwgY29tcGxldGVkV29yay5jaGlsZCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQ7XG4gICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhjaGlsZC5sYW5lcywgY2hpbGQuY2hpbGRMYW5lcykpO1xuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGNvbXBsZXRlZFdvcmsudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uIC09IHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCkge1xuICB2YXIgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGNvbW1pdFJvb3RJbXBsLmJpbmQobnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKGZpbmlzaGVkV29yay5sYW5lcywgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXMpO1xuICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTsgLy8gQ2xlYXIgYWxyZWFkeSBmaW5pc2hlZCBkaXNjcmV0ZSB1cGRhdGVzIGluIGNhc2UgdGhhdCBhIGxhdGVyIGNhbGwgb2ZcbiAgLy8gYGZsdXNoRGlzY3JldGVVcGRhdGVzYCBzdGFydHMgYSB1c2VsZXNzIHJlbmRlciBwYXNzIHdoaWNoIG1heSBjYW5jZWxzXG4gIC8vIGEgc2NoZWR1bGVkIHRpbWVvdXQuXG5cbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoIWhhc0Rpc2NyZXRlTGFuZXMocmVtYWluaW5nTGFuZXMpICYmIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuaGFzKHJvb3QpKSB7XG4gICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmRlbGV0ZShyb290KTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgfSAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgIC8vIEEgZmliZXIncyBlZmZlY3QgbGlzdCBjb25zaXN0cyBvbmx5IG9mIGl0cyBjaGlsZHJlbiwgbm90IGl0c2VsZi4gU28gaWZcbiAgICAvLyB0aGUgcm9vdCBoYXMgYW4gZWZmZWN0LCB3ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGVcbiAgICAvLyByZXN1bHRpbmcgbGlzdCBpcyB0aGUgc2V0IHRoYXQgd291bGQgYmVsb25nIHRvIHRoZSByb290J3MgcGFyZW50LCBpZiBpdFxuICAgIC8vIGhhZCBvbmU7IHRoYXQgaXMsIGFsbCB0aGUgZWZmZWN0cyBpbiB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHJvb3QuXG4gICAgaWYgKGZpbmlzaGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFdvcmsubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb24gdGhlIHJvb3QuXG4gICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gIH1cblxuICBpZiAoZmlyc3RFZmZlY3QgIT09IG51bGwpIHtcblxuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7IC8vIFRoZSBjb21taXQgcGhhc2UgaXMgYnJva2VuIGludG8gc2V2ZXJhbCBzdWItcGhhc2VzLiBXZSBkbyBhIHNlcGFyYXRlIHBhc3NcbiAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgLy8gVGhlIGZpcnN0IHBoYXNlIGEgXCJiZWZvcmUgbXV0YXRpb25cIiBwaGFzZS4gV2UgdXNlIHRoaXMgcGhhc2UgdG8gcmVhZCB0aGVcbiAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpOyAvLyBXZSBubyBsb25nZXIgbmVlZCB0byB0cmFjayB0aGUgYWN0aXZlIGluc3RhbmNlIGZpYmVyXG5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH0gLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIG11dGF0aW9uIHBoYXNlLCB3aGVyZSB3ZSBtdXRhdGUgdGhlIGhvc3QgdHJlZS5cblxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TXV0YXRpb25FZmZlY3RzLCBudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgdHJlZSBpcyBub3cgdGhlIGN1cnJlbnQgdHJlZS4gVGhpcyBtdXN0IGNvbWUgYWZ0ZXJcbiAgICAvLyB0aGUgbXV0YXRpb24gcGhhc2UsIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRyZWUgaXMgc3RpbGwgY3VycmVudCBkdXJpbmdcbiAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbGF5b3V0IHBoYXNlLCB3aGVyZSB3ZSBjYWxsIGVmZmVjdHMgdGhhdCByZWFkXG4gICAgLy8gdGhlIGhvc3QgdHJlZSBhZnRlciBpdCdzIGJlZW4gbXV0YXRlZC4gVGhlIGlkaW9tYXRpYyB1c2UgY2FzZSBmb3IgdGhpcyBpc1xuICAgIC8vIGxheW91dCwgYnV0IGNsYXNzIGNvbXBvbmVudCBsaWZlY3ljbGVzIGFsc28gZmlyZSBoZXJlIGZvciBsZWdhY3kgcmVhc29ucy5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdExheW91dEVmZmVjdHMsIG51bGwsIHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAge1xuICAgICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIH1cblxuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBlZmZlY3RzLlxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gTWVhc3VyZSB0aGVzZSBhbnl3YXkgc28gdGhlIGZsYW1lZ3JhcGggZXhwbGljaXRseSBzaG93cyB0aGF0IHRoZXJlIHdlcmVcbiAgICAvLyBubyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAge1xuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gVGhpcyBjb21taXQgaGFzIHBhc3NpdmUgZWZmZWN0cy4gU3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlbS4gQnV0IGRvbid0XG4gICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdDtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBlZmZlY3QgY2hhaW4gYXQgdGhpcyBwb2ludCBzbyBsZXQncyBjbGVhciB0aGVcbiAgICAvLyBuZXh0RWZmZWN0IHBvaW50ZXJzIHRvIGFzc2lzdCB3aXRoIEdDLiBJZiB3ZSBoYXZlIHBhc3NpdmUgZWZmZWN0cywgd2UnbGxcbiAgICAvLyBjbGVhciB0aGlzIGluIGZsdXNoUGFzc2l2ZUVmZmVjdHMuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIG5leHRFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICAgIGlmIChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMobmV4dEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRFZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHRoZW4gd2UgY2FuIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgd2FpdCB1bnRpbCBhZnRlciB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSBmbHVzaGVkLlxuICAgICAgLy8gV2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIHJlbWFpbmluZyB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCxcbiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcHJlbWF0dXJlbHkgc2lnbmFsIGNvbXBsZXRlIGZvciBpbnRlcmFjdGlvbnMgd2hlbiB0aGVyZSdzIGUuZy4gaGlkZGVuIHdvcmsuXG4gICAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVtYWluaW5nTGFuZXMgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IzID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgX2Vycm9yMztcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBhIFJlYWN0RE9NLnJlbmRlci1lZCByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcy4gVGhlIGNvbW1pdCBmaXJlZFxuICAgIC8vIHN5bmNocm9ub3VzbHksIGJ1dCBsYXlvdXQgdXBkYXRlcyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBiYXRjaC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgIGlmICghc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyICYmIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIGlmIChkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSBob3QgcGF0aCB1c2luZyBhIGRlZGljYXRlZCBlZmZlY3QgdGFnLlxuICAgICAgICBpZiAobmV4dEVmZmVjdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIG5leHRFZmZlY3QpICYmIGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICBjb21taXRSZXNldFRleHRDb250ZW50KG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIGZvbGxvd2luZyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHBsYWNlbWVudCxcbiAgICAvLyB1cGRhdGVzLCBhbmQgZGVsZXRpb25zLiBUbyBhdm9pZCBuZWVkaW5nIHRvIGFkZCBhIGNhc2UgZm9yIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gYml0bWFwIHZhbHVlLCB3ZSByZW1vdmUgdGhlIHNlY29uZGFyeSBlZmZlY3RzIGZyb20gdGhlIGVmZmVjdCB0YWcgYW5kXG4gICAgLy8gc3dpdGNoIG9uIHRoYXQgdmFsdWUuXG5cblxuICAgIHZhciBwcmltYXJ5RmxhZ3MgPSBmbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUgfCBEZWxldGlvbiB8IEh5ZHJhdGluZyk7XG5cbiAgICBzd2l0Y2ggKHByaW1hcnlGbGFncykge1xuICAgICAgY2FzZSBQbGFjZW1lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50OyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nQW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cblxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMocm9vdCwgY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihuZXh0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgLy8gUmV0dXJucyB3aGV0aGVyIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQuXG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSQxKSB7XG4gICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG5cbiAgICB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCwgZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUoZWZmZWN0KSB7XG4gIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBBTEwgcGVuZGluZyBwYXNzaXZlIGVmZmVjdCBkZXN0cm95IGZ1bmN0aW9ucyBhcmUgY2FsbGVkXG4gIC8vIGJlZm9yZSBBTlkgcGFzc2l2ZSBlZmZlY3QgY3JlYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAvLyBPdGhlcndpc2UgZWZmZWN0cyBpbiBzaWJsaW5nIGNvbXBvbmVudHMgbWlnaHQgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci5cbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBtYXkgdW5pbnRlbnRpb25hbGx5IG92ZXJyaWRlIGEgcmVmXG4gIC8vIHZhbHVlIHNldCBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudC5cbiAgLy8gTGF5b3V0IGVmZmVjdHMgaGF2ZSB0aGUgc2FtZSBjb25zdHJhaW50LlxuICAvLyBGaXJzdCBwYXNzOiBEZXN0cm95IHN0YWxlIHBhc3NpdmUgZWZmZWN0cy5cblxuICB2YXIgdW5tb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRFZmZlY3RzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QgPSB1bm1vdW50RWZmZWN0c1tpXTtcbiAgICB2YXIgZmliZXIgPSB1bm1vdW50RWZmZWN0c1tpICsgMV07XG4gICAgdmFyIGRlc3Ryb3kgPSBfZWZmZWN0LmRlc3Ryb3k7XG4gICAgX2VmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAge1xuICAgICAgZmliZXIuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAge1xuICAgICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEoZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU2Vjb25kIHBhc3M6IENyZWF0ZSBuZXcgcGFzc2l2ZSBlZmZlY3RzLlxuXG5cbiAgdmFyIG1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vdW50RWZmZWN0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdDIgPSBtb3VudEVmZmVjdHNbX2ldO1xuICAgIHZhciBfZmliZXIgPSBtb3VudEVmZmVjdHNbX2kgKyAxXTtcblxuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihfZmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlLCBudWxsLCBfZWZmZWN0Mik7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKF9maWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2Vycm9yNCA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihfZmliZXIsIF9lcnJvcjQpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cbiAgfSAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3QgZmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgcm9vdCBpcyBub3QgcGFydCBvZiBpdHMgb3duIGVmZmVjdCBsaXN0LlxuICAvLyBUaGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5cbiAgdmFyIGVmZmVjdCA9IHJvb3QuY3VycmVudC5maXJzdEVmZmVjdDtcblxuICB3aGlsZSAoZWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHROZXh0RWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7IC8vIFJlbW92ZSBuZXh0RWZmZWN0IHBvaW50ZXIgdG8gYXNzaXN0IEdDXG5cbiAgICBlZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgZWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSk7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qocm9vdEZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLlxuICAgICAgICAgIC8vIFdlIGNhbid0IHNjaGVkdWxlIGFueSBmb2xsb3cgdXAgd29yayBmb3IgdGhlIHJvb3QgYmVjYXVzZSB0aGUgZmliZXIgaXMgYWxyZWFkeSB1bm1vdW50ZWQsXG4gICAgICAgICAgLy8gYnV0IHdlIGNhbiBzdGlsbCBjYWxsIHRoZSBsb2ctb25seSBib3VuZGFyeSBzbyB0aGUgZXJyb3IgaXNuJ3Qgc3dhbGxvd2VkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYmFuZGFpZCBmb3IgdGhlIG9sZCByZWNvbmNpbGVyIGZvcmsuXG4gICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNwZWNpYWwgY2FzZSBvbmNlIHRoZSBuZXcgZm9yayBpcyBtZXJnZWQuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3JUb0lnbm9yZSkgey8vIFRPRE8gSWdub3JlIHRoaXMgZXJyb3I/IFJldGhyb3cgaXQ/XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBhbiBlZGdlIGNhc2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBwaW5nZWRMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiAoQmxvY2tpbmdNb2RlIHwgQ29uY3VycmVudE1vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyB1bm1vdW50cyBmb3IgdGhpcyBGaWJlcixcbiAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhleSB3b3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzIHVwZGF0ZS5cblxuXG4gICAgaWYgKChmaWJlci5mbGFncyAmIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIDsgZWxzZSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgXCIgKyAnaXMgYSBuby1vcCwgYnV0IGl0IGluZGljYXRlcyBhIG1lbW9yeSBsZWFrIGluIHlvdXIgYXBwbGljYXRpb24uIFRvICcgKyAnZml4LCBjYW5jZWwgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIGFzeW5jaHJvbm91cyB0YXNrcyBpbiAlcy4nLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBiZWdpbldvcmskMTtcblxue1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJDEgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCB0aHJvd3MgYW4gZXJyb3IsIHdlIHJlcGxheSBpdCBhZ2FpbiBpbiBhIHN5bmNocm9ub3VzbHlcbiAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjb3B5IHRoZSB3b3JrLWluLXByb2dyZXNzIG9udG8gYSBkdW1teVxuICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZHVtbXlGaWJlciwgdW5pdE9mV29yayk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTsgLy8gRG9uJ3QgcmVzZXQgY3VycmVudCBkZWJ1ZyBmaWJlciwgc2luY2Ugd2UncmUgYWJvdXQgdG8gd29yayBvbiB0aGVcbiAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsodW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgIGlmICggdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yaywgbnVsbCwgY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7IC8vIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIHNvbWV0aW1lcyBzZXRzIGFuIGV4cGFuZG8gYF9zdXBwcmVzc0xvZ2dpbmdgLlxuICAgICAgICAvLyBSZXRocm93IHRoaXMgZXJyb3IgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLlxuXG4gICAgICAgIHRocm93IHJlcGxheUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hhYmxlIGlmIHRoZSByZW5kZXIgcGhhc2UgaXMgaW1wdXJlLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG57XG4gIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ1Vua25vd24nOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgdmFyIGRlZHVwZUtleSA9IHJlbmRlcmluZ0NvbXBvbmVudE5hbWU7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSAnICsgJ2RpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsICcgKyAnZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlcicsIHNldFN0YXRlQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlICcgKyAnZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBhICdzaGFyZWQnIHZhcmlhYmxlIHRoYXQgY2hhbmdlcyB3aGVuIGFjdCgpIG9wZW5zL2Nsb3NlcyBpbiB0ZXN0cy5cblxuXG52YXIgSXNUaGlzUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IHRydWUgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQge2FjdH0gZnInICsgXCJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xcblwiICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtdGVzdC1yZW5kZXJlcjpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCBUZXN0UmVuZGVyZXIgZnInICsgXCJvbSByZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7Jyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkgIT09IE5vTW9kZSAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldiA9IHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVjsgLy8gSW4gdGVzdHMsIHdlIHdhbnQgdG8gZW5mb3JjZSBhIG1vY2tlZCBzY2hlZHVsZXIuXG5cbnZhciBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IGZhbHNlOyAvLyBUT0RPIEJlZm9yZSB3ZSByZWxlYXNlIGNvbmN1cnJlbnQgbW9kZSwgcmV2aXNpdCB0aGlzIGFuZCBkZWNpZGUgd2hldGhlciBhIG1vY2tlZFxuLy8gc2NoZWR1bGVyIGlzIHRoZSBhY3R1YWwgcmVjb21tZW5kYXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBjb3VsZCBiZSBhIHRlc3RpbmcgYnVpbGQsXG4vLyBhIG5ldyBsaWIsIG9yIHdoYXRldmVyOyB3ZSBkdW5ubyBqdXN0IHlldC4gVGhpcyBtZXNzYWdlIGlzIGZvciBlYXJseSBhZG9wdGVyc1xuLy8gdG8gZ2V0IHRoZWlyIHRlc3RzIHJpZ2h0LlxuXG5mdW5jdGlvbiB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihmaWJlcikge1xuICB7XG4gICAgaWYgKGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSBmYWxzZSAmJiBTY2hlZHVsZXIudW5zdGFibGVfZmx1c2hBbGxXaXRob3V0QXNzZXJ0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlIHx8IGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0luIENvbmN1cnJlbnQgb3IgU3luYyBtb2RlcywgdGhlIFwic2NoZWR1bGVyXCIgbW9kdWxlIG5lZWRzIHRvIGJlIG1vY2tlZCAnICsgJ3RvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgdGVzdHMgYW5kIGJyb3dzZXJzLiAnICsgJ0ZvciBleGFtcGxlLCB3aXRoIGplc3Q6IFxcbicgKyAvLyBCcmVhayB1cCByZXF1aXJlcyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgXCJqZXN0Lm1vY2soJ3NjaGVkdWxlcicsICgpID0+IHJlcXVpcmVcIiArIFwiKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbW9jay1zY2hlZHVsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIC8vIE5PVEU6IEludGVudGlvbmFsbHkgdW5zb3VuZCBjYXN0LiBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgaXQncyBhIG51bWJlclxuICAvLyBhbmQgaXQgcmVwcmVzZW50cyBhIGJhdGNoIG9mIHdvcmsuIENvdWxkIG1ha2UgYSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZCxcbiAgLy8gYnV0IG1laCB0aGlzIGlzIGZpbmUgZm9yIG5vdy5cbiAgcmV0dXJuIGxhbmUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsobGFuZSkge1xuXG4gIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9PT0gbnVsbCkge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gW2xhbmVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2gobGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgaW50ZXJhY3Rpb25zKSB7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQobGFuZSk7XG5cbiAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nSW50ZXJhY3Rpb25zLmhhcyhpbnRlcmFjdGlvbikpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChsYW5lLCBuZXcgU2V0KGludGVyYWN0aW9ucykpOyAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuXG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSkge1xuXG4gIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcykge1xuICAvLyB3ZSBjYW4gYWNjdXJhdGVseSBhdHRyaWJ1dGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGl0LCBBbmQgc28gdGhhdCBjYXNjYWRpbmdcbiAgLy8gd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZExhbmUpIHtcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShsYW5lcywgc2NoZWR1bGVkTGFuZSkpIHtcbiAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pOyAvLyBTdG9yZSB0aGUgY3VycmVudCBzZXQgb2YgaW50ZXJhY3Rpb25zIG9uIHRoZSBGaWJlclJvb3QgZm9yIGEgZmV3IHJlYXNvbnM6XG4gIC8vIFdlIGNhbiByZS11c2UgaXQgaW4gaG90IGZ1bmN0aW9ucyBsaWtlIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCgpXG4gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LiBXZSB3aWxsIGFsc28gdXNlIGl0IGluIGNvbW1pdFdvcmsoKSB0b1xuICAvLyBwYXNzIHRvIGFueSBQcm9maWxlciBvblJlbmRlcigpIGhvb2tzLiBUaGlzIGFsc28gcHJvdmlkZXMgRGV2VG9vbHMgd2l0aCBhXG4gIC8vIHdheSB0byBhY2Nlc3MgaXQgd2hlbiB0aGUgb25Db21taXRSb290KCkgaG9vayBpcyBjYWxsZWQuXG5cbiAgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyA9IGludGVyYWN0aW9ucztcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIEZJWE1FOiBNb3JlIHRoYW4gb25lIGxhbmUgY2FuIGZpbmlzaCBpbiBhIHNpbmdsZSBjb21taXQuXG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZVx1MjAxMyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIGxhbmUpIHtcbiAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGludGVyYWN0aW9uIGNvdW50IGlmIHdlJ3JlIGRvbmUuXG4gICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAvLyBUaGF0IGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBzdXNwZW5zZSBkYXRhLlxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQsIGxhbmUpKSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUobGFuZSk7XG4gICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBgYWN0YCB0ZXN0aW5nIEFQSVxuXG5mdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gIHJldHVybiAgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPiAwO1xufVxuLy8gc28gd2UgY2FuIHRlbGwgaWYgYW55IGFzeW5jIGFjdCgpIGNhbGxzIHRyeSB0byBydW4gaW4gcGFyYWxsZWwuXG5cblxudmFyIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID0gMDtcblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG59XG5cbnZhciByZXNvbHZlRmFtaWx5ID0gbnVsbDsgLy8gJEZsb3dGaXhNZSBGbG93IGdldHMgY29uZnVzZWQgYnkgYSBXZWFrU2V0IGZlYXR1cmUgY2hlY2sgYmVsb3cuXG5cbnZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbnZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIHtcbiAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcmVhbCBmb3J3YXJkUmVmLiBEb24ndCB3YW50IHRvIGNyYXNoIGVhcmx5LlxuICAgICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAvLyBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIG9ubHkgaGF2ZSBpdHMgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGluIHRoZSBtYXAuXG4gICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgaWYgKHR5cGUucmVuZGVyICE9PSBjdXJyZW50UmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgIHJlbmRlcjogY3VycmVudFJlbmRlclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW50aGV0aWNUeXBlLmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgdmFyIG5leHRUeXBlID0gZWxlbWVudC50eXBlOyAvLyBJZiB3ZSBnb3QgaGVyZSwgd2Uga25vdyB0eXBlcyBhcmVuJ3QgPT09IGVxdWFsLlxuXG4gICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPSB0eXBlb2YgbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIG5leHRUeXBlICE9PSBudWxsID8gbmV4dFR5cGUuJCR0eXBlb2YgOiBudWxsO1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaW5uZXIgdHlwZSB5ZXQuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gdW53cmFwIG9yIGFjdHVhbGx5IHVzZSB0aGUgbmV3IGxhenkgdHlwZS5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cblxuICAgIGlmIChuZWVkc0NvbXBhcmVGYW1pbGllcykge1xuICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgLy8gSWYgd2UgdW53cmFwcGVkIGFuZCBjb21wYXJlZCB0aGUgaW5uZXIgdHlwZXMgZm9yIHdyYXBwZXJzIGluc3RlYWQsXG4gICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgdmFyIHByZXZGYW1pbHkgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKTtcblxuICAgICAgaWYgKHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJiBwcmV2RmFtaWx5ID09PSByZXNvbHZlRmFtaWx5KG5leHRUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyA9PT0gbnVsbCkge1xuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpO1xuICB9XG59XG52YXIgc2NoZWR1bGVSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIHVwZGF0ZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcyxcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpO1xuXG4gICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50KSB7XG4gICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQgfHwgbmVlZHNSZW5kZXIpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxudmFyIGRlYnVnQ291bnRlciA9IDE7XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLm5leHRFZmZlY3QgPSBudWxsO1xuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCQxKHR5cGUpICYmIHR5cGUuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHtcbiAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgLy8gbm9kZSB0aGF0IHdlJ3JlIGZyZWUgdG8gcmV1c2UuIFRoaXMgaXMgbGF6aWx5IGNyZWF0ZWQgdG8gYXZvaWQgYWxsb2NhdGluZ1xuICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKGN1cnJlbnQudGFnLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnQua2V5LCBjdXJyZW50Lm1vZGUpO1xuICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgLy8gREVWLW9ubHkgZmllbGRzXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCA9IGN1cnJlbnQuX2RlYnVnSUQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2UgPSBjdXJyZW50Ll9kZWJ1Z1NvdXJjZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzOyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGNsb25lZCB2YWx1ZXMgdGhhdCBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZCd2ZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICAgIH07XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gQmxvY2tpbmdSb290KSB7XG4gICAgbW9kZSA9IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmICggaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnRcdTIwMTNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCQxKHR5cGUpKSB7XG4gICAgICBmaWJlclRhZyA9IENsYXNzQ29tcG9uZW50O1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBEZWJ1Z1RyYWNpbmdNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0Q29uc3VtZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBCbG9jaztcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArICh0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUpICsgXCIuXCIgKyBpbmZvICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIGFzIGEgcHJvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBPZmZzY3JlZW5Db21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoTGVnYWN5SGlkZGVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBMZWdhY3lIaWRkZW4gZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpOyAvLyBUT0RPOiBUaGVzZSBzaG91bGQgbm90IG5lZWQgYSB0eXBlLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gJ0RFTEVURUQnO1xuICBmaWJlci50eXBlID0gJ0RFTEVURUQnO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5uZXh0RWZmZWN0ID0gc291cmNlLm5leHRFZmZlY3Q7XG4gIHRhcmdldC5maXJzdEVmZmVjdCA9IHNvdXJjZS5maXJzdEVmZmVjdDtcbiAgdGFyZ2V0Lmxhc3RFZmZlY3QgPSBzb3VyY2UubGFzdEVmZmVjdDtcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdJRCA9IHNvdXJjZS5fZGVidWdJRDtcbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdGhpcy5ldmVudFRpbWVzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vVGltZXN0YW1wKTtcbiAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5tdXRhYmxlUmVhZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG5cbiAge1xuICAgIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgdGhpcy5pbnRlcmFjdGlvblRocmVhZElEID0gdHJhY2luZy51bnN0YWJsZV9nZXRUaHJlYWRJRCgpO1xuICAgIHRoaXMubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQmxvY2tpbmdSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUJsb2NraW5nUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29uY3VycmVudFJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVMZWdhY3lSb290KCknO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcnNpb24gdXNlZCBmb3Igc2VydmVyIHJlbmRlcmluZyBtYXRjaGVzIHRoZSBvbmVcbi8vIHRoYXQgaXMgZXZlbnR1YWxseSByZWFkIGR1cmluZyBoeWRyYXRpb24uXG4vLyBJZiB0aGV5IGRvbid0IG1hdGNoIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdGVhciBhbmQgYSBmdWxsIGRlb3B0IHJlbmRlciBpcyByZXF1aXJlZC5cblxuZnVuY3Rpb24gcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpIHtcbiAgdmFyIGdldFZlcnNpb24gPSBtdXRhYmxlU291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24obXV0YWJsZVNvdXJjZS5fc291cmNlKTsgLy8gVE9ETyBDbGVhciB0aGlzIGRhdGEgb25jZSBhbGwgcGVuZGluZyBoeWRyYXRpb24gd29yayBpcyBmaW5pc2hlZC5cbiAgLy8gUmV0YWluaW5nIGl0IGZvcmV2ZXIgbWF5IGludGVyZmVyZSB3aXRoIEdDLlxuXG4gIGlmIChyb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPT0gbnVsbCkge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFttdXRhYmxlU291cmNlLCB2ZXJzaW9uXTtcbiAgfSBlbHNlIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIC8vIFRPRE86IGZpZ3VyZSBvdXQgdGhlIEFQSSBmb3IgY3Jvc3MtcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uXG5pbXBsZW1lbnRhdGlvbikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKGZpYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBPYmplY3Qua2V5cyhjb21wb25lbnQpICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChob3N0RmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXIoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB7XG4gICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGN1cnJlbnQkMSk7XG4gICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoY3VycmVudCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5jb250ZXh0ID0gY29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ1JlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyAnICsgJ3RyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiAnICsgJ0lmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuJyArICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBnZXRDb21wb25lbnROYW1lKGN1cnJlbnQudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeUxhbmVJbXBsKGFsdGVybmF0ZSwgcmV0cnlMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eSwgZm4pIHtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICB9XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaG9zdEZpYmVyLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6ICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUmVmcmVzaDogIHNjaGVkdWxlUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSb290OiAgc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogIHNldFJlZnJlc2hIYW5kbGVyICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGFwcGVuZCBvd25lciBzdGFja3MgdG8gZXJyb3IgbWVzc2FnZXMgaW4gREVWIG1vZGUuXG4gICAgZ2V0Q3VycmVudEZpYmVyOiAgZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMgXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgQ29uY3VycmVudFJvb3QsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucyk7XG59XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cblxuICAgIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhyb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoZSAnICsgJ3Jvb3QgY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgXCJyb290LnVubW91bnQoKSB0byBlbXB0eSBhIHJvb3QncyBjb250YWluZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICAvLyBUYWcgaXMgZWl0aGVyIExlZ2FjeVJvb3Qgb3IgQ29uY3VycmVudCBSb290XG4gIHZhciBoeWRyYXRlID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZSA9PT0gdHJ1ZTtcbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgfHwgbnVsbDtcbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlcyB8fCBudWxsO1xuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIHRhZywgaHlkcmF0ZSk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgY29udGFpbmVyTm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAge1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKG11dGFibGVTb3VyY2VzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlc1tpXTtcbiAgICAgIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBMZWdhY3lSb290LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICByZXR1cm4gISEobm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgJykpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIHRvcExldmVsVXBkYXRlV2FybmluZ3M7XG52YXIgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gZmFsc2U7XG5cbntcbiAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lci5faW50ZXJuYWxSb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gISEocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290RWxlbWVudC5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSkge1xuICB2YXIgc2hvdWxkSHlkcmF0ZSA9IGZvcmNlSHlkcmF0ZSB8fCBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKTsgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG5cbiAgaWYgKCFzaG91bGRIeWRyYXRlKSB7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdFNpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkSHlkcmF0ZSAmJiAhZm9yY2VIeWRyYXRlICYmICF3YXJuZWRBYm91dEh5ZHJhdGVBUEkpIHtcbiAgICAgIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ3JlbmRlcigpOiBDYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIHRvIGh5ZHJhdGUgc2VydmVyLXJlbmRlcmVkIG1hcmt1cCAnICsgJ3dpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IHYxOC4gUmVwbGFjZSB0aGUgUmVhY3RET00ucmVuZGVyKCkgY2FsbCAnICsgJ3dpdGggUmVhY3RET00uaHlkcmF0ZSgpIGlmIHlvdSB3YW50IFJlYWN0IHRvIGF0dGFjaCB0byB0aGUgc2VydmVyIEhUTUwuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBzaG91bGRIeWRyYXRlID8ge1xuICAgIGh5ZHJhdGU6IHRydWVcbiAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogdGhyb3cgb3Igd2FybiBpZiB3ZSBjb3VsZG4ndCBoeWRyYXRlP1xuXG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gcmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lck5vZGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYmIGhhcyhwYXJlbnRDb21wb25lbnQpKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInBhcmVudENvbXBvbmVudCBtdXN0IGJlIGEgdmFsaWQgUmVhY3QgQ29tcG9uZW50XCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbnVsbCwgY29udGFpbmVyLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIucGFyZW50Tm9kZSkgJiYgISFjb250YWluZXIucGFyZW50Tm9kZS5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gICAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocnVuV2l0aFByaW9yaXR5JDIpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvcignUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyk7XG5zZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKGJhdGNoZWRVcGRhdGVzJDEsIGRpc2NyZXRlVXBkYXRlcyQxLCBmbHVzaERpc2NyZXRlVXBkYXRlcywgYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKTtcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcblxuICByZXR1cm4gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwpIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gdHJ1ZTtcblxuICAgICAgd2FybignVGhlIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RET00uY3JlYXRlUG9ydGFsKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSSwgJyArICdidXQgd2l0aG91dCB0aGUgXCJ1bnN0YWJsZV9cIiBwcmVmaXguJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIGtleSk7XG59XG5cbnZhciBJbnRlcm5hbHMgPSB7XG4gIC8vIEtlZXAgaW4gc3luYyB3aXRoIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuXG4gIC8vIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUsIGdldE5vZGVGcm9tSW5zdGFuY2UsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBmbHVzaFBhc3NpdmVFZmZlY3RzLCAvLyBUT0RPOiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGFjdGAsIG5vdCBldmVudHMuIE1vdmUgdG8gc2VwYXJhdGUga2V5P1xuICBJc1RoaXNSZW5kZXJlckFjdGluZ11cbn07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYztcbmV4cG9ydHMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsID0gdW5zdGFibGVfY3JlYXRlUG9ydGFsO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7IC8qKi8gfVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArXG4gICAgICAgICAgICAgICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCAiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCAidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsICJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCAidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsICJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsICIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCAiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsICJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsICIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsICJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCAidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCAidmFyIEhhc2ggPSByZXF1aXJlKCcuL19IYXNoJyksXG4gICAgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX19kYXRhX18gPSB7XG4gICAgJ2hhc2gnOiBuZXcgSGFzaCxcbiAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCAidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsICJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwgInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCAiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwgInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsICIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCAidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJBcnJheTtcbiIsICJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsICJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsICJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwgInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsICJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwgInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsICJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmVcbiAqIGVxdWl2YWxlbnQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGNvbXBhcmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLFxuICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAqIGJ5IHRoZWlyIG93biwgbm90IGluaGVyaXRlZCwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLiBGdW5jdGlvbnMgYW5kIERPTVxuICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5pc0VxdWFsKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIG9iamVjdCA9PT0gb3RoZXI7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VxdWFsO1xuIiwgIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBib29sZWFuLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCb29sZWFuKGZhbHNlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQm9vbGVhbihudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCb29sZWFuO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiAqKk5vdGU6KiogVG8gZXhjbHVkZSBgSW5maW5pdHlgLCBgLUluZmluaXR5YCwgYW5kIGBOYU5gLCB3aGljaCBhcmVcbiAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOdW1iZXIoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc051bWJlcjtcbiIsICJ2YXIgaXNOdW1iZXIgPSByZXF1aXJlKCcuL2lzTnVtYmVyJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICogZ2xvYmFsIFtgaXNOYU5gXShodHRwczovL21kbi5pby9pc05hTikgd2hpY2ggcmV0dXJucyBgdHJ1ZWAgZm9yXG4gKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hTihOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBpc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIC8vIEFuIGBOYU5gIHByaW1pdGl2ZSBpcyB0aGUgb25seSB2YWx1ZSB0aGF0IGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuXG4gIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gIHJldHVybiBpc051bWJlcih2YWx1ZSkgJiYgdmFsdWUgIT0gK3ZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmFOO1xuIiwgIi8qISBAcHJlc2VydmVcbiAqIG51bWVyYWwuanNcbiAqIHZlcnNpb24gOiAyLjAuNlxuICogYXV0aG9yIDogQWRhbSBEcmFwZXJcbiAqIGxpY2Vuc2UgOiBNSVRcbiAqIGh0dHA6Ly9hZGFtd2RyYXBlci5naXRodWIuY29tL051bWVyYWwtanMvXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsb2JhbC5udW1lcmFsID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgVmFyaWFibGVzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdmFyIG51bWVyYWwsXG4gICAgICAgIF8sXG4gICAgICAgIFZFUlNJT04gPSAnMi4wLjYnLFxuICAgICAgICBmb3JtYXRzID0ge30sXG4gICAgICAgIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiAnZW4nLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogbnVsbCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiAnMCwwJyxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjdXJyZW50TG9jYWxlOiBkZWZhdWx0cy5jdXJyZW50TG9jYWxlLFxuICAgICAgICAgICAgemVyb0Zvcm1hdDogZGVmYXVsdHMuemVyb0Zvcm1hdCxcbiAgICAgICAgICAgIG51bGxGb3JtYXQ6IGRlZmF1bHRzLm51bGxGb3JtYXQsXG4gICAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiBkZWZhdWx0cy5kZWZhdWx0Rm9ybWF0LFxuICAgICAgICAgICAgc2NhbGVQZXJjZW50QnkxMDA6IGRlZmF1bHRzLnNjYWxlUGVyY2VudEJ5MTAwXG4gICAgICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgQ29uc3RydWN0b3JzXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLy8gTnVtZXJhbCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTnVtZXJhbChpbnB1dCwgbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudW1iZXI7XG4gICAgfVxuXG4gICAgbnVtZXJhbCA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uLFxuICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgIGlmIChudW1lcmFsLmlzTnVtZXJhbChpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaW5wdXQudmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gMCB8fCB0eXBlb2YgaW5wdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IG51bGwgfHwgXy5pc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIGlucHV0ID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy5udWxsRm9ybWF0IHx8ICFpbnB1dC5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHR5cGVvZiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQgPT09ICdmdW5jdGlvbicgPyBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQoKSA6IGZvcm1hdHNba2luZF0ucmVnZXhwcy51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXhwICYmIGlucHV0Lm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLnVuZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVuZm9ybWF0RnVuY3Rpb24gPSB1bmZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcjtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdW5mb3JtYXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihpbnB1dCl8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1lcmFsKGlucHV0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIC8vIHZlcnNpb24gbnVtYmVyXG4gICAgbnVtZXJhbC52ZXJzaW9uID0gVkVSU0lPTjtcblxuICAgIC8vIGNvbXBhcmUgbnVtZXJhbCBvYmplY3RcbiAgICBudW1lcmFsLmlzTnVtZXJhbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTnVtZXJhbDtcbiAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uc1xuICAgIG51bWVyYWwuXyA9IF8gPSB7XG4gICAgICAgIC8vIGZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIG51bWJlclRvRm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgbmVnUCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9wdERlYyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IDAsXG4gICAgICAgICAgICAgICAgYWJiciA9ICcnLFxuICAgICAgICAgICAgICAgIHRyaWxsaW9uID0gMTAwMDAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBiaWxsaW9uID0gMTAwMDAwMDAwMCxcbiAgICAgICAgICAgICAgICBtaWxsaW9uID0gMTAwMDAwMCxcbiAgICAgICAgICAgICAgICB0aG91c2FuZCA9IDEwMDAsXG4gICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnLFxuICAgICAgICAgICAgICAgIG5lZyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSwgLy8gZm9yY2UgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgYWJzLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgaW50LFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBzaWduZWQsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmRzLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIG5ldmVyIGZvcm1hdCBhIG51bGwgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgMDtcblxuICAgICAgICAgICAgYWJzID0gTWF0aC5hYnModmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBzZWUgaWYgd2Ugc2hvdWxkIHVzZSBwYXJlbnRoZXNlcyBmb3IgbmVnYXRpdmUgbnVtYmVyIG9yIGlmIHdlIHNob3VsZCBwcmVmaXggd2l0aCBhIHNpZ25cbiAgICAgICAgICAgIC8vIGlmIGJvdGggYXJlIHByZXNlbnQgd2UgZGVmYXVsdCB0byBwYXJlbnRoZXNlc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcoJykpIHtcbiAgICAgICAgICAgICAgICBuZWdQID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvW1xcKHxcXCldL2csICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgc2lnbmVkID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJysnKSA/IGZvcm1hdC5pbmRleE9mKCcrJykgOiB2YWx1ZSA8IDAgPyBmb3JtYXQuaW5kZXhPZignLScpIDogLTE7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCt8XFwtXS9nLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNlZSBpZiBhYmJyZXZpYXRpb24gaXMgd2FudGVkXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2EnKSkge1xuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGZvcm1hdC5tYXRjaCgvYShrfG18Ynx0KT8vKTtcblxuICAgICAgICAgICAgICAgIGFiYnJGb3JjZSA9IGFiYnJGb3JjZSA/IGFiYnJGb3JjZVsxXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSBhYmJyZXZpYXRpb25cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJiciA9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuZXcgUmVnRXhwKGFiYnIgKyAnYVtrbWJ0XT8nKSwgJycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFicyA+PSB0cmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0cmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IHRyaWxsaW9uICYmIGFicyA+PSBiaWxsaW9uICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnYicpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBiaWxsaW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzIDwgYmlsbGlvbiAmJiBhYnMgPj0gbWlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1pbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IG1pbGxpb24gJiYgYWJzID49IHRob3VzYW5kICYmICFhYmJyRm9yY2UgfHwgYWJickZvcmNlID09PSAnaycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhvdXNhbmRcbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIHRob3VzYW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9wdGlvbmFsIGRlY2ltYWxzXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ1suXScpKSB7XG4gICAgICAgICAgICAgICAgb3B0RGVjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnWy5dJywgJy4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYnJlYWsgbnVtYmVyIGFuZCBmb3JtYXRcbiAgICAgICAgICAgIGludCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIHByZWNpc2lvbiA9IGZvcm1hdC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgdGhvdXNhbmRzID0gZm9ybWF0LmluZGV4T2YoJywnKTtcbiAgICAgICAgICAgIGxlYWRpbmdDb3VudCA9IChmb3JtYXQuc3BsaXQoJy4nKVswXS5zcGxpdCgnLCcpWzBdLm1hdGNoKC8wL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChwcmVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHByZWNpc2lvbiwgJ1snKSkge1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24ucmVwbGFjZSgnXScsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnNwbGl0KCdbJyk7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgKHByZWNpc2lvblswXS5sZW5ndGggKyBwcmVjaXNpb25bMV0ubGVuZ3RoKSwgcm91bmRpbmdGdW5jdGlvbiwgcHJlY2lzaW9uWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24ubGVuZ3RoLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpbnQgPSBkZWNpbWFsLnNwbGl0KCcuJylbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGRlY2ltYWwsICcuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgKyBkZWNpbWFsLnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcHREZWMgJiYgTnVtYmVyKGRlY2ltYWwuc2xpY2UoMSkpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludCA9IG51bWVyYWwuXy50b0ZpeGVkKHZhbHVlLCAwLCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgYWJicmV2aWF0aW9uIGFnYWluIGFmdGVyIHJvdW5kaW5nXG4gICAgICAgICAgICBpZiAoYWJiciAmJiAhYWJickZvcmNlICYmIE51bWJlcihpbnQpID49IDEwMDAgJiYgYWJiciAhPT0gbG9jYWxlLmFiYnJldmlhdGlvbnMudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBTdHJpbmcoTnVtYmVyKGludCkgLyAxMDAwKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWJicikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIGxvY2FsZS5hYmJyZXZpYXRpb25zLnRob3VzYW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLm1pbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLmJpbGxpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWJiciA9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCBudW1iZXJcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoaW50LCAnLScpKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIG5lZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnQubGVuZ3RoIDwgbGVhZGluZ0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGxlYWRpbmdDb3VudCAtIGludC5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ID0gJzAnICsgaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRob3VzYW5kcyA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gaW50LnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnJDEnICsgbG9jYWxlLmRlbGltaXRlcnMudGhvdXNhbmRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCcuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbnQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0ID0gaW50ICsgZGVjaW1hbCArIChhYmJyID8gYWJiciA6ICcnKTtcblxuICAgICAgICAgICAgaWYgKG5lZ1ApIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAobmVnUCAmJiBuZWcgPyAnKCcgOiAnJykgKyBvdXRwdXQgKyAobmVnUCAmJiBuZWcgPyAnKScgOiAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzaWduZWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzaWduZWQgPT09IDAgPyAobmVnID8gJy0nIDogJysnKSArIG91dHB1dCA6IG91dHB1dCArIChuZWcgPyAnLScgOiAnKycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVnKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICctJyArIG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHVuZm9ybWF0cyBudW1iZXJzIHNlcGFyYXRvcnMsIGRlY2ltYWxzIHBsYWNlcywgc2lnbnMsIGFiYnJldmlhdGlvbnNcbiAgICAgICAgc3RyaW5nVG9OdW1iZXI6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzdHJpbmdPcmlnaW5hbCA9IHN0cmluZyxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB0aG91c2FuZDogMyxcbiAgICAgICAgICAgICAgICAgICAgbWlsbGlvbjogNixcbiAgICAgICAgICAgICAgICAgICAgYmlsbGlvbjogOSxcbiAgICAgICAgICAgICAgICAgICAgdHJpbGxpb246IDEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYmJyZXZpYXRpb24sXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICByZWdleHA7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnplcm9Gb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLnplcm9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMubnVsbEZvcm1hdCAmJiBzdHJpbmcgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhc3RyaW5nLnJlcGxhY2UoL1teMC05XSsvZywgJycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwgIT09ICcuJykge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKGxvY2FsZS5kZWxpbWl0ZXJzLmRlY2ltYWwsICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChhYmJyZXZpYXRpb24gaW4gYWJicmV2aWF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSBuZXcgUmVnRXhwKCdbXmEtekEtWl0nICsgbG9jYWxlLmFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSArICcoPzpcXFxcKXwoXFxcXCcgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sICsgJyk/KD86XFxcXCkpPyk/JCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdPcmlnaW5hbC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAqPSBNYXRoLnBvdygxMCwgYWJicmV2aWF0aW9uc1thYmJyZXZpYXRpb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIG51bWJlclxuICAgICAgICAgICAgICAgIHZhbHVlICo9IChzdHJpbmcuc3BsaXQoJy0nKS5sZW5ndGggKyBNYXRoLm1pbihzdHJpbmcuc3BsaXQoJygnKS5sZW5ndGggLSAxLCBzdHJpbmcuc3BsaXQoJyknKS5sZW5ndGggLSAxKSkgJSAyID8gMSA6IC0xO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG5vbiBudW1iZXJzXG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1teMC05XFwuXSsvZywgJycpO1xuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNOYU46IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzOiBmdW5jdGlvbihzdHJpbmcsIHNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5pbmRleE9mKHNlYXJjaCkgIT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uKHN0cmluZywgc3ViU3RyaW5nLCBzdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyBzdWJTdHJpbmcgKyBzdHJpbmcuc2xpY2Uoc3RhcnQpO1xuICAgICAgICB9LFxuICAgICAgICByZWR1Y2U6IGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjayAvKiwgaW5pdGlhbFZhbHVlKi8pIHtcbiAgICAgICAgICAgIGlmICh0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KGFycmF5KSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBrID0gMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGsgPCBsZW4gJiYgIShrIGluIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoayA+PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdFtrKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChrIGluIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgdFtrXSwgaywgdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZXMgdGhlIG11bHRpcGxpZXIgbmVjZXNzYXJ5IHRvIG1ha2UgeCA+PSAxLFxuICAgICAgICAgKiBlZmZlY3RpdmVseSBlbGltaW5hdGluZyBtaXNjYWxjdWxhdGlvbnMgY2F1c2VkIGJ5XG4gICAgICAgICAqIGZpbml0ZSBwcmVjaXNpb24uXG4gICAgICAgICAqL1xuICAgICAgICBtdWx0aXBsaWVyOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0geC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPCAyID8gMSA6IE1hdGgucG93KDEwLCBwYXJ0c1sxXS5sZW5ndGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCByZXR1cm5zIHRoZSBtYXhpbXVtXG4gICAgICAgICAqIG11bHRpcGxpZXIgdGhhdCBtdXN0IGJlIHVzZWQgdG8gbm9ybWFsaXplIGFuIG9wZXJhdGlvbiBpbnZvbHZpbmdcbiAgICAgICAgICogYWxsIG9mIHRoZW0uXG4gICAgICAgICAqL1xuICAgICAgICBjb3JyZWN0aW9uRmFjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbihhY2N1bSwgbmV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBtbiA9IF8ubXVsdGlwbGllcihuZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gPiBtbiA/IGFjY3VtIDogbW47XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRvRml4ZWQoKSB0aGF0IHRyZWF0cyBmbG9hdHMgbW9yZSBsaWtlIGRlY2ltYWxzXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpeGVzIGJpbmFyeSByb3VuZGluZyBpc3N1ZXMgKGVnLiAoMC42MTUpLnRvRml4ZWQoMikgPT09ICcwLjYxJykgdGhhdCBwcmVzZW50XG4gICAgICAgICAqIHByb2JsZW1zIGZvciBhY2NvdW50aW5nLSBhbmQgZmluYW5jZS1yZWxhdGVkIHNvZnR3YXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdG9GaXhlZDogZnVuY3Rpb24odmFsdWUsIG1heERlY2ltYWxzLCByb3VuZGluZ0Z1bmN0aW9uLCBvcHRpb25hbHMpIHtcbiAgICAgICAgICAgIHZhciBzcGxpdFZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpLFxuICAgICAgICAgICAgICAgIG1pbkRlY2ltYWxzID0gbWF4RGVjaW1hbHMgLSAob3B0aW9uYWxzIHx8IDApLFxuICAgICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBzbWFsbGVzdCBwcmVjaXNpb24gdmFsdWUgcG9zc2libGUgdG8gYXZvaWQgZXJyb3JzIGZyb20gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25cbiAgICAgICAgICAgIGlmIChzcGxpdFZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uID0gTWF0aC5taW4oTWF0aC5tYXgoc3BsaXRWYWx1ZVsxXS5sZW5ndGgsIG1pbkRlY2ltYWxzKSwgbWF4RGVjaW1hbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IG1pbkRlY2ltYWxzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3dlciA9IE1hdGgucG93KDEwLCBib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgLy8gTXVsdGlwbHkgdXAgYnkgcHJlY2lzaW9uLCByb3VuZCBhY2N1cmF0ZWx5LCB0aGVuIGRpdmlkZSBhbmQgdXNlIG5hdGl2ZSB0b0ZpeGVkKCk6XG4gICAgICAgICAgICBvdXRwdXQgPSAocm91bmRpbmdGdW5jdGlvbih2YWx1ZSArICdlKycgKyBib3VuZGVkUHJlY2lzaW9uKSAvIHBvd2VyKS50b0ZpeGVkKGJvdW5kZWRQcmVjaXNpb24pO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzID4gbWF4RGVjaW1hbHMgLSBib3VuZGVkUHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uYWxzUmVnRXhwID0gbmV3IFJlZ0V4cCgnXFxcXC4/MHsxLCcgKyAob3B0aW9uYWxzIC0gKG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikpICsgJ30kJyk7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2Uob3B0aW9uYWxzUmVnRXhwLCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXZhbGlhYmxlIG9wdGlvbnNcbiAgICBudW1lcmFsLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmZvcm1hdHMgPSBmb3JtYXRzO1xuXG4gICAgLy8gYXZhbGlhYmxlIGZvcm1hdHNcbiAgICBudW1lcmFsLmxvY2FsZXMgPSBsb2NhbGVzO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIG51bWVyYWwubG9jYWxlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuY3VycmVudExvY2FsZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY3VycmVudExvY2FsZTtcbiAgICB9O1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGxvYWRlZCBsb2NhbGUgZGF0YS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudFxuICAgIC8vIGdsb2JhbCBsb2NhbGUgb2JqZWN0LlxuICAgIG51bWVyYWwubG9jYWxlRGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbb3B0aW9ucy5jdXJyZW50TG9jYWxlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmICghbG9jYWxlc1trZXldKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbG9jYWxlIDogJyArIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlc1trZXldO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgICBvcHRpb25zW3Byb3BlcnR5XSA9IGRlZmF1bHRzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBudW1lcmFsLnplcm9Gb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy56ZXJvRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5udWxsRm9ybWF0ID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICBvcHRpb25zLm51bGxGb3JtYXQgPSB0eXBlb2YoZm9ybWF0KSA9PT0gJ3N0cmluZycgPyBmb3JtYXQgOiBudWxsO1xuICAgIH07XG5cbiAgICBudW1lcmFsLmRlZmF1bHRGb3JtYXQgPSBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0Rm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogJzAuMCc7XG4gICAgfTtcblxuICAgIG51bWVyYWwucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAodGhpc1t0eXBlICsgJ3MnXVtuYW1lXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihuYW1lICsgJyAnICsgdHlwZSArICcgYWxyZWFkeSByZWdpc3RlcmVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1t0eXBlICsgJ3MnXVtuYW1lXSA9IGZvcm1hdDtcblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH07XG5cblxuICAgIG51bWVyYWwudmFsaWRhdGUgPSBmdW5jdGlvbih2YWwsIGN1bHR1cmUpIHtcbiAgICAgICAgdmFyIF9kZWNpbWFsU2VwLFxuICAgICAgICAgICAgX3Rob3VzYW5kU2VwLFxuICAgICAgICAgICAgX2N1cnJTeW1ib2wsXG4gICAgICAgICAgICBfdmFsQXJyYXksXG4gICAgICAgICAgICBfYWJick9iaixcbiAgICAgICAgICAgIF90aG91c2FuZFJlZ0V4LFxuICAgICAgICAgICAgbG9jYWxlRGF0YSxcbiAgICAgICAgICAgIHRlbXA7XG5cbiAgICAgICAgLy9jb2VyY2UgdmFsIHRvIHN0cmluZ1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbCArPSAnJztcblxuICAgICAgICAgICAgaWYgKGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTnVtZXJhbC5qczogVmFsdWUgaXMgbm90IHN0cmluZy4gSXQgaGFzIGJlZW4gY28tZXJjZWQgdG86ICcsIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3RyaW0gd2hpdGVzcGFjZXMgZnJvbSBlaXRoZXIgc2lkZXNcbiAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcblxuICAgICAgICAvL2lmIHZhbCBpcyBqdXN0IGRpZ2l0cyByZXR1cm4gdHJ1ZVxuICAgICAgICBpZiAoISF2YWwubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdmFsIGlzIGVtcHR5IHJldHVybiBmYWxzZVxuICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9nZXQgdGhlIGRlY2ltYWwgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3IgZnJvbSBudW1lcmFsLmxvY2FsZURhdGFcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vY2hlY2sgaWYgdGhlIGN1bHR1cmUgaXMgdW5kZXJzdG9vZCBieSBudW1lcmFsLiBpZiBub3QsIGRlZmF1bHQgaXQgdG8gY3VycmVudCBsb2NhbGVcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEoY3VsdHVyZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvY2FsZURhdGEgPSBudW1lcmFsLmxvY2FsZURhdGEobnVtZXJhbC5sb2NhbGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL3NldHVwIHRoZSBkZWxpbWl0ZXJzIGFuZCBjdXJyZW5jeSBzeW1ib2wgYmFzZWQgb24gY3VsdHVyZS9sb2NhbGVcbiAgICAgICAgX2N1cnJTeW1ib2wgPSBsb2NhbGVEYXRhLmN1cnJlbmN5LnN5bWJvbDtcbiAgICAgICAgX2FiYnJPYmogPSBsb2NhbGVEYXRhLmFiYnJldmlhdGlvbnM7XG4gICAgICAgIF9kZWNpbWFsU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLmRlY2ltYWw7XG4gICAgICAgIGlmIChsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzID09PSAnLicpIHtcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCA9ICdcXFxcLic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSBsb2NhbGVEYXRhLmRlbGltaXRlcnMudGhvdXNhbmRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGluZyBjdXJyZW5jeSBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvXlteXFxkXSsvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2N1cnJTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL3ZhbGlkYXRpbmcgYWJicmV2aWF0aW9uIHN5bWJvbFxuICAgICAgICB0ZW1wID0gdmFsLm1hdGNoKC9bXlxcZF0rJC8pO1xuICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzBdICE9PSBfYWJick9iai50aG91c2FuZCAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5taWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLmJpbGxpb24gJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoudHJpbGxpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfdGhvdXNhbmRSZWdFeCA9IG5ldyBSZWdFeHAoX3Rob3VzYW5kU2VwICsgJ3syfScpO1xuXG4gICAgICAgIGlmICghdmFsLm1hdGNoKC9bXlxcZC4sXS9nKSkge1xuICAgICAgICAgICAgX3ZhbEFycmF5ID0gdmFsLnNwbGl0KF9kZWNpbWFsU2VwKTtcbiAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCsuKlxcZCQvKSAmJiAhX3ZhbEFycmF5WzBdLm1hdGNoKF90aG91c2FuZFJlZ0V4KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF92YWxBcnJheVswXS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICEhIF92YWxBcnJheVswXS5tYXRjaCgvXlxcZCskLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkgJiYgISEgX3ZhbEFycmF5WzFdLm1hdGNoKC9eXFxkKyQvKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBOdW1lcmFsIFByb3RvdHlwZVxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIG51bWVyYWwuZm4gPSBOdW1lcmFsLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24oaW5wdXRTdHJpbmcsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGlucHV0U3RyaW5nIHx8IG9wdGlvbnMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbjtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYSByb3VuZGluZ0Z1bmN0aW9uXG4gICAgICAgICAgICByb3VuZGluZ0Z1bmN0aW9uID0gcm91bmRpbmdGdW5jdGlvbiB8fCBNYXRoLnJvdW5kO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvcHRpb25zLnplcm9Gb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLnplcm9Gb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsICYmIG9wdGlvbnMubnVsbEZvcm1hdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wdGlvbnMubnVsbEZvcm1hdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChraW5kIGluIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5tYXRjaChmb3JtYXRzW2tpbmRdLnJlZ2V4cHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRzW2tpbmRdLmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtYXRGdW5jdGlvbiA9IGZvcm1hdEZ1bmN0aW9uIHx8IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdDtcblxuICAgICAgICAgICAgICAgIG91dHB1dCA9IGZvcm1hdEZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gKyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDApIC8gY29yckZhY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHN1YnRyYWN0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IuY2FsbChudWxsLCB0aGlzLl92YWx1ZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW0gLSBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjdXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdmFsdWVdLCBjYmFjaywgTWF0aC5yb3VuZCh0aGlzLl92YWx1ZSAqIGNvcnJGYWN0b3IpKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpICogTWF0aC5yb3VuZChjdXJyICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGNvcnJGYWN0b3IgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2ssIDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGl2aWRlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBfLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGFjY3VtICogY29yckZhY3RvcikgLyBNYXRoLnJvdW5kKGN1cnIgKiBjb3JyRmFjdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBfLnJlZHVjZShbdGhpcy5fdmFsdWUsIHZhbHVlXSwgY2JhY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgZGlmZmVyZW5jZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhudW1lcmFsKHRoaXMuX3ZhbHVlKS5zdWJ0cmFjdCh2YWx1ZSkudmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICBEZWZhdWx0IExvY2FsZSAmJiBGb3JtYXRcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdsb2NhbGUnLCAnZW4nLCB7XG4gICAgICAgIGRlbGltaXRlcnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kczogJywnLFxuICAgICAgICAgICAgZGVjaW1hbDogJy4nXG4gICAgICAgIH0sXG4gICAgICAgIGFiYnJldmlhdGlvbnM6IHtcbiAgICAgICAgICAgIHRob3VzYW5kOiAnaycsXG4gICAgICAgICAgICBtaWxsaW9uOiAnbScsXG4gICAgICAgICAgICBiaWxsaW9uOiAnYicsXG4gICAgICAgICAgICB0cmlsbGlvbjogJ3QnXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMDtcbiAgICAgICAgICAgIHJldHVybiAofn4obnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICB9LFxuICAgICAgICBjdXJyZW5jeToge1xuICAgICAgICAgICAgc3ltYm9sOiAnJCdcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2JwcycsIHtcbiAgICAgICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IC8oQlBTKS8sXG4gICAgICAgICAgICAgICAgdW5mb3JtYXQ6IC8oQlBTKS9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIEJQUycpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDAwMDtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgQlBTXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9CUFMvLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5zcGxpY2UoLTEsIDAsIHNwYWNlICsgJ0JQUycpO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICdCUFMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiArKG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpICogMC4wMDAxKS50b0ZpeGVkKDE1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRlY2ltYWwgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDAwLFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddXG4gICAgICAgIH0sXG4gICAgICAgIGJpbmFyeSA9IHtcbiAgICAgICAgICAgIGJhc2U6IDEwMjQsXG4gICAgICAgICAgICBzdWZmaXhlczogWydCJywgJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicsICdQaUInLCAnRWlCJywgJ1ppQicsICdZaUInXVxuICAgICAgICB9O1xuXG4gICAgdmFyIGFsbFN1ZmZpeGVzID0gIGRlY2ltYWwuc3VmZml4ZXMuY29uY2F0KGJpbmFyeS5zdWZmaXhlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsLnN1ZmZpeGVzLmluZGV4T2YoaXRlbSkgPCAwO1xuICAgICAgICB9KSk7XG4gICAgICAgIHZhciB1bmZvcm1hdFJlZ2V4ID0gYWxsU3VmZml4ZXMuam9pbignfCcpO1xuICAgICAgICAvLyBBbGxvdyBzdXBwb3J0IGZvciBCUFMgKGh0dHA6Ly93d3cuaW52ZXN0b3BlZGlhLmNvbS90ZXJtcy9iL2Jhc2lzcG9pbnQuYXNwKVxuICAgICAgICB1bmZvcm1hdFJlZ2V4ID0gJygnICsgdW5mb3JtYXRSZWdleC5yZXBsYWNlKCdCJywgJ0IoPyFQUyknKSArICcpJztcblxuICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdieXRlcycsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKFswXFxzXWk/YikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IG5ldyBSZWdFeHAodW5mb3JtYXRSZWdleClcbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGJ5dGVzID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJ2liJykgPyBiaW5hcnkgOiBkZWNpbWFsLFxuICAgICAgICAgICAgICAgIHN1ZmZpeCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYicpIHx8IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgaWInKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXg7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/aT9iLywgJycpO1xuXG4gICAgICAgICAgICBmb3IgKHBvd2VyID0gMDsgcG93ZXIgPD0gYnl0ZXMuc3VmZml4ZXMubGVuZ3RoOyBwb3dlcisrKSB7XG4gICAgICAgICAgICAgICAgbWluID0gTWF0aC5wb3coYnl0ZXMuYmFzZSwgcG93ZXIpO1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyICsgMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IDAgfHwgdmFsdWUgPj0gbWluICYmIHZhbHVlIDwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZmZpeCArPSBieXRlcy5zdWZmaXhlc1twb3dlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyBtaW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIHN1ZmZpeDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyksXG4gICAgICAgICAgICAgICAgcG93ZXIsXG4gICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHBvd2VyID0gZGVjaW1hbC5zdWZmaXhlcy5sZW5ndGggLSAxOyBwb3dlciA+PSAwOyBwb3dlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBkZWNpbWFsLnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGRlY2ltYWwuYmFzZSwgcG93ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCBiaW5hcnkuc3VmZml4ZXNbcG93ZXJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNNdWx0aXBsaWVyID0gTWF0aC5wb3coYmluYXJ5LmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoYnl0ZXNNdWx0aXBsaWVyIHx8IDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnY3VycmVuY3knLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhcXCQpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBudW1lcmFsLmxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIHN5bWJvbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZTogZm9ybWF0Lm1hdGNoKC9eKFtcXCt8XFwtfFxcKHxcXHN8XFwkXSopLylbMF0sXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyOiBmb3JtYXQubWF0Y2goLyhbXFwrfFxcLXxcXCl8XFxzfFxcJF0qKSQvKVswXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHN5bWJvbCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAvLyBzdHJpcCBmb3JtYXQgb2Ygc3BhY2VzIGFuZCAkXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJFxccz8vLCAnJyk7XG5cbiAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgbnVtYmVyXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYmVmb3JlIGFuZCBhZnRlciBiYXNlZCBvbiB2YWx1ZVxuICAgICAgICAgICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9IHN5bWJvbHMuYmVmb3JlLnJlcGxhY2UoL1tcXC1cXChdLywgJycpO1xuICAgICAgICAgICAgICAgIHN5bWJvbHMuYWZ0ZXIgPSBzeW1ib2xzLmFmdGVyLnJlcGxhY2UoL1tcXC1cXCldLywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAgJiYgKCFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICctJykgJiYgIW51bWVyYWwuXy5pbmNsdWRlcyhzeW1ib2xzLmJlZm9yZSwgJygnKSkpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmJlZm9yZSA9ICctJyArIHN5bWJvbHMuYmVmb3JlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBiZWZvcmUgc3ltYm9sXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ltYm9scy5iZWZvcmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmJlZm9yZVtpXTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLmluc2VydChvdXRwdXQsICcgJywgaSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIGFmdGVyIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gc3ltYm9scy5hZnRlci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHN5bWJvbHMuYWZ0ZXJbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCwgLShzeW1ib2xzLmFmdGVyLmxlbmd0aCAtICgxICsgaSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGkgPT09IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMSA/IG91dHB1dCArICcgJyA6IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbC5sZW5ndGggLSAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdleHBvbmVudGlhbCcsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKGVcXCt8ZS0pLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKGVcXCt8ZS0pL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFudW1lcmFsLl8uaXNOYU4odmFsdWUpID8gdmFsdWUudG9FeHBvbmVudGlhbCgpIDogJzBlKzAnLFxuICAgICAgICAgICAgICAgIHBhcnRzID0gZXhwb25lbnRpYWwuc3BsaXQoJ2UnKTtcblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL2VbXFwrfFxcLV17MX0wLywgJycpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQoTnVtYmVyKHBhcnRzWzBdKSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArICdlJyArIHBhcnRzWzFdO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZSsnKSA/IHN0cmluZy5zcGxpdCgnZSsnKSA6IHN0cmluZy5zcGxpdCgnZS0nKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcihwYXJ0c1swXSksXG4gICAgICAgICAgICAgICAgcG93ZXIgPSBOdW1iZXIocGFydHNbMV0pO1xuXG4gICAgICAgICAgICBwb3dlciA9IG51bWVyYWwuXy5pbmNsdWRlcyhzdHJpbmcsICdlLScpID8gcG93ZXIgKj0gLTEgOiBwb3dlcjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvcnJGYWN0b3IgPSBudW1lcmFsLl8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3VyciksXG4gICAgICAgICAgICAgICAgICAgIG51bSA9IChhY2N1bSAqIGNvcnJGYWN0b3IpICogKGN1cnIgKiBjb3JyRmFjdG9yKSAvIChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bWVyYWwuXy5yZWR1Y2UoW3ZhbHVlLCBNYXRoLnBvdygxMCwgcG93ZXIpXSwgY2JhY2ssIDEpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ29yZGluYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhvKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgb3JkaW5hbCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgbycpID8gJyAnIDogJyc7XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmVcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/by8sICcnKTtcblxuICAgICAgICAgICAgb3JkaW5hbCArPSBsb2NhbGUub3JkaW5hbCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIG9yZGluYWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAncGVyY2VudGFnZScsIHtcbiAgICAgICAgcmVnZXhwczoge1xuICAgICAgICAgICAgZm9ybWF0OiAvKCUpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiAvKCUpL1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGFjZSA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgJScpID8gJyAnIDogJycsXG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHNwYWNlIGJlZm9yZSAlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP1xcJS8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKG91dHB1dCwgJyknKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICclJyk7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArIHNwYWNlICsgJyUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gbnVtZXJhbC5fLnN0cmluZ1RvTnVtYmVyKHN0cmluZyk7XG4gICAgICAgICAgICBpZiAobnVtZXJhbC5vcHRpb25zLnNjYWxlUGVyY2VudEJ5MTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAqIDAuMDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3RpbWUnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyg6KS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyg6KS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIC8gNjAgLyA2MCksXG4gICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGguZmxvb3IoKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkpIC8gNjApLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLnJvdW5kKHZhbHVlIC0gKGhvdXJzICogNjAgKiA2MCkgLSAobWludXRlcyAqIDYwKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBob3VycyArICc6JyArIChtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcykgKyAnOicgKyAoc2Vjb25kcyA8IDEwID8gJzAnICsgc2Vjb25kcyA6IHNlY29uZHMpO1xuICAgICAgICB9LFxuICAgICAgICB1bmZvcm1hdDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgICB2YXIgdGltZUFycmF5ID0gc3RyaW5nLnNwbGl0KCc6JyksXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHR1cm4gaG91cnMgYW5kIG1pbnV0ZXMgaW50byBzZWNvbmRzIGFuZCBhZGQgdGhlbSBhbGwgdXBcbiAgICAgICAgICAgIGlmICh0aW1lQXJyYXkubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gaG91cnNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwICogNjApO1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzFdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzJdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIC8vIG1pbnV0ZXNcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2Vjb25kcyArIChOdW1iZXIodGltZUFycmF5WzBdKSAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyBOdW1iZXIodGltZUFycmF5WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cbnJldHVybiBudW1lcmFsO1xufSkpO1xuIiwgInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsICJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCAidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCAidmFyIG1lbW9pemVDYXBwZWQgPSByZXF1aXJlKCcuL19tZW1vaXplQ2FwcGVkJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG52YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb1BhdGg7XG4iLCAiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCAidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCAidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUVhY2g7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsICJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsICJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduVmFsdWU7XG4iLCAidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuIiwgIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCAiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9sc0luO1xuIiwgInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsICJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCAidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCAiLyoqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGAgZmxhZ3MgZnJvbSB0aGVpciBjb2VyY2VkIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xuICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVJlZ0V4cDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgYHN5bWJvbGAgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3ltYm9sIFRoZSBzeW1ib2wgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lU3ltYm9sKHN5bWJvbCkge1xuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVN5bWJvbDtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsICJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsICJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCAidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsICJ2YXIgYmFzZUlzTWFwID0gcmVxdWlyZSgnLi9fYmFzZUlzTWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc01hcChuZXcgTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCAidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsICJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGFzdDtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwgInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgbGFzdCA9IHJlcXVpcmUoJy4vbGFzdCcpLFxuICAgIHBhcmVudCA9IHJlcXVpcmUoJy4vX3BhcmVudCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsICJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0ZsYXR0ZW5hYmxlID0gcmVxdWlyZSgnLi9faXNGbGF0dGVuYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsICJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwgIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsICJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwgIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCAidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwgIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsICJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwgInZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi9mbGF0dGVuJyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCBmbGF0dGVucyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBmbGF0UmVzdChmdW5jKSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXRSZXN0O1xuIiwgInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyksXG4gICAgYmFzZVVuc2V0ID0gcmVxdWlyZSgnLi9fYmFzZVVuc2V0JyksXG4gICAgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgY3VzdG9tT21pdENsb25lID0gcmVxdWlyZSgnLi9fY3VzdG9tT21pdENsb25lJyksXG4gICAgZmxhdFJlc3QgPSByZXF1aXJlKCcuL19mbGF0UmVzdCcpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG52YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24ocGF0aCkge1xuICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSk7XG4gIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gb21pdDtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDaGVjayBpZiB3ZSdyZSByZXF1aXJlZCB0byBhZGQgYSBwb3J0IG51bWJlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZGVmYXVsdC1wb3J0XG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHBvcnQgUG9ydCBudW1iZXIgd2UgbmVlZCB0byBjaGVja1xuICogQHBhcmFtIHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBJcyBpdCBhIGRlZmF1bHQgcG9ydCBmb3IgdGhlIGdpdmVuIHByb3RvY29sXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXF1aXJlZChwb3J0LCBwcm90b2NvbCkge1xuICBwcm90b2NvbCA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gIHBvcnQgPSArcG9ydDtcblxuICBpZiAoIXBvcnQpIHJldHVybiBmYWxzZTtcblxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAnaHR0cCc6XG4gICAgY2FzZSAnd3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA4MDtcblxuICAgIGNhc2UgJ2h0dHBzJzpcbiAgICBjYXNlICd3c3MnOlxuICAgIHJldHVybiBwb3J0ICE9PSA0NDM7XG5cbiAgICBjYXNlICdmdHAnOlxuICAgIHJldHVybiBwb3J0ICE9PSAyMTtcblxuICAgIGNhc2UgJ2dvcGhlcic6XG4gICAgcmV0dXJuIHBvcnQgIT09IDcwO1xuXG4gICAgY2FzZSAnZmlsZSc6XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQgIT09IDA7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCB1bmRlZjtcblxuLyoqXG4gKiBEZWNvZGUgYSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBVUkkgZW5jb2RlZCBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBkZWNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZW5jb2RlIGEgZ2l2ZW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFNpbXBsZSBxdWVyeSBzdHJpbmcgcGFyc2VyLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybnMge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHF1ZXJ5KSB7XG4gIHZhciBwYXJzZXIgPSAvKFtePT8jJl0rKT0/KFteJl0qKS9nXG4gICAgLCByZXN1bHQgPSB7fVxuICAgICwgcGFydDtcblxuICB3aGlsZSAocGFydCA9IHBhcnNlci5leGVjKHF1ZXJ5KSkge1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydFsxXSlcbiAgICAgICwgdmFsdWUgPSBkZWNvZGUocGFydFsyXSk7XG5cbiAgICAvL1xuICAgIC8vIFByZXZlbnQgb3ZlcnJpZGluZyBvZiBleGlzdGluZyBwcm9wZXJ0aWVzLiBUaGlzIGVuc3VyZXMgdGhhdCBidWlsZC1pblxuICAgIC8vIG1ldGhvZHMgbGlrZSBgdG9TdHJpbmdgIG9yIF9fcHJvdG9fXyBhcmUgbm90IG92ZXJyaWRlbiBieSBtYWxpY2lvdXNcbiAgICAvLyBxdWVyeXN0cmluZ3MuXG4gICAgLy9cbiAgICAvLyBJbiB0aGUgY2FzZSBpZiBmYWlsZWQgZGVjb2RpbmcsIHdlIHdhbnQgdG8gb21pdCB0aGUga2V5L3ZhbHVlIHBhaXJzXG4gICAgLy8gZnJvbSB0aGUgcmVzdWx0LlxuICAgIC8vXG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBrZXkgaW4gcmVzdWx0KSBjb250aW51ZTtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBxdWVyeSBzdHJpbmcgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRoYXQgc2hvdWxkIGJlIHRyYW5zZm9ybWVkLlxuICogQHBhcmFtIHtTdHJpbmd9IHByZWZpeCBPcHRpb25hbCBwcmVmaXguXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmdpZnkob2JqLCBwcmVmaXgpIHtcbiAgcHJlZml4ID0gcHJlZml4IHx8ICcnO1xuXG4gIHZhciBwYWlycyA9IFtdXG4gICAgLCB2YWx1ZVxuICAgICwga2V5O1xuXG4gIC8vXG4gIC8vIE9wdGlvbmFsbHkgcHJlZml4IHdpdGggYSAnPycgaWYgbmVlZGVkXG4gIC8vXG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIHByZWZpeCkgcHJlZml4ID0gJz8nO1xuXG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIC8vXG4gICAgICAvLyBFZGdlIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG8gZW5jb2RlIHRoZSB2YWx1ZSB0byBhbiBlbXB0eVxuICAgICAgLy8gc3RyaW5nIGluc3RlYWQgb2YgdGhlIHN0cmluZ2lmaWVkIHZhbHVlLlxuICAgICAgLy9cbiAgICAgIGlmICghdmFsdWUgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZiB8fCBpc05hTih2YWx1ZSkpKSB7XG4gICAgICAgIHZhbHVlID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGtleSA9IGVuY29kZShrZXkpO1xuICAgICAgdmFsdWUgPSBlbmNvZGUodmFsdWUpO1xuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGVuY29kZSB0aGUgc3RyaW5ncywgd2Ugc2hvdWxkIGJhaWwgb3V0IGFzIHdlIGRvbid0XG4gICAgICAvLyB3YW50IHRvIGFkZCBpbnZhbGlkIHN0cmluZ3MgdG8gdGhlIHF1ZXJ5LlxuICAgICAgLy9cbiAgICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgcGFpcnMucHVzaChrZXkgKyc9JysgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYWlycy5sZW5ndGggPyBwcmVmaXggKyBwYWlycy5qb2luKCcmJykgOiAnJztcbn1cblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmV4cG9ydHMuc3RyaW5naWZ5ID0gcXVlcnlzdHJpbmdpZnk7XG5leHBvcnRzLnBhcnNlID0gcXVlcnlzdHJpbmc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5naWZ5JylcbiAgLCBjb250cm9sT3JXaGl0ZXNwYWNlID0gL15bXFx4MDAtXFx4MjBcXHUwMGEwXFx1MTY4MFxcdTIwMDAtXFx1MjAwYVxcdTIwMjhcXHUyMDI5XFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZl0rL1xuICAsIENSSFRMRiA9IC9bXFxuXFxyXFx0XS9nXG4gICwgc2xhc2hlcyA9IC9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XFwvXFwvL1xuICAsIHBvcnQgPSAvOlxcZCskL1xuICAsIHByb3RvY29scmUgPSAvXihbYS16XVthLXowLTkuKy1dKjopPyhcXC9cXC8pPyhbXFxcXC9dKyk/KFtcXFNcXHNdKikvaVxuICAsIHdpbmRvd3NEcml2ZUxldHRlciA9IC9eW2EtekEtWl06LztcblxuLyoqXG4gKiBSZW1vdmUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHN0ciBTdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IEEgbmV3IHN0cmluZyByZXByZXNlbnRpbmcgYHN0cmAgc3RyaXBwZWQgb2YgY29udHJvbFxuICogICAgIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgZnJvbSBpdHMgYmVnaW5uaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0cmltTGVmdChzdHIpIHtcbiAgcmV0dXJuIChzdHIgPyBzdHIgOiAnJykudG9TdHJpbmcoKS5yZXBsYWNlKGNvbnRyb2xPcldoaXRlc3BhY2UsICcnKTtcbn1cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIHBhcnNlIHJ1bGVzIGZvciB0aGUgVVJMIHBhcnNlciwgaXQgaW5mb3JtcyB0aGUgcGFyc2VyXG4gKiBhYm91dDpcbiAqXG4gKiAwLiBUaGUgY2hhciBpdCBOZWVkcyB0byBwYXJzZSwgaWYgaXQncyBhIHN0cmluZyBpdCBzaG91bGQgYmUgZG9uZSB1c2luZ1xuICogICAgaW5kZXhPZiwgUmVnRXhwIHVzaW5nIGV4ZWMgYW5kIE5hTiBtZWFucyBzZXQgYXMgY3VycmVudCB2YWx1ZS5cbiAqIDEuIFRoZSBwcm9wZXJ0eSB3ZSBzaG91bGQgc2V0IHdoZW4gcGFyc2luZyB0aGlzIHZhbHVlLlxuICogMi4gSW5kaWNhdGlvbiBpZiBpdCdzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHBhcnNpbmcsIHdoZW4gc2V0IGFzIG51bWJlciBpdCdzXG4gKiAgICB0aGUgdmFsdWUgb2YgZXh0cmEgY2hhcnMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb2ZmLlxuICogMy4gSW5oZXJpdCBmcm9tIGxvY2F0aW9uIGlmIG5vbiBleGlzdGluZyBpbiB0aGUgcGFyc2VyLlxuICogNC4gYHRvTG93ZXJDYXNlYCB0aGUgcmVzdWx0aW5nIHZhbHVlLlxuICovXG52YXIgcnVsZXMgPSBbXG4gIFsnIycsICdoYXNoJ10sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJz8nLCAncXVlcnknXSwgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgZnVuY3Rpb24gc2FuaXRpemUoYWRkcmVzcywgdXJsKSB7ICAgICAvLyBTYW5pdGl6ZSB3aGF0IGlzIGxlZnQgb2YgdGhlIGFkZHJlc3NcbiAgICByZXR1cm4gaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyBhZGRyZXNzLnJlcGxhY2UoL1xcXFwvZywgJy8nKSA6IGFkZHJlc3M7XG4gIH0sXG4gIFsnLycsICdwYXRobmFtZSddLCAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBbJ0AnLCAnYXV0aCcsIDFdLCAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgZnJvbnQuXG4gIFtOYU4sICdob3N0JywgdW5kZWZpbmVkLCAxLCAxXSwgICAgICAgLy8gU2V0IGxlZnQgb3ZlciB2YWx1ZS5cbiAgWy86KFxcZCopJC8sICdwb3J0JywgdW5kZWZpbmVkLCAxXSwgICAgLy8gUmVnRXhwIHRoZSBiYWNrLlxuICBbTmFOLCAnaG9zdG5hbWUnLCB1bmRlZmluZWQsIDEsIDFdICAgIC8vIFNldCBsZWZ0IG92ZXIuXG5dO1xuXG4vKipcbiAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBjb3BpZWQgb3IgaW5oZXJpdGVkIGZyb20uIFRoaXMgaXMgb25seSBuZWVkZWRcbiAqIGZvciBhbGwgbm9uIGJsb2IgVVJMJ3MgYXMgYSBibG9iIFVSTCBkb2VzIG5vdCBpbmNsdWRlIGEgaGFzaCwgb25seSB0aGVcbiAqIG9yaWdpbi5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xudmFyIGlnbm9yZSA9IHsgaGFzaDogMSwgcXVlcnk6IDEgfTtcblxuLyoqXG4gKiBUaGUgbG9jYXRpb24gb2JqZWN0IGRpZmZlcnMgd2hlbiB5b3VyIGNvZGUgaXMgbG9hZGVkIHRocm91Z2ggYSBub3JtYWwgcGFnZSxcbiAqIFdvcmtlciBvciB0aHJvdWdoIGEgd29ya2VyIHVzaW5nIGEgYmxvYi4gQW5kIHdpdGggdGhlIGJsb2JibGUgYmVnaW5zIHRoZVxuICogdHJvdWJsZSBhcyB0aGUgbG9jYXRpb24gb2JqZWN0IHdpbGwgY29udGFpbiB0aGUgVVJMIG9mIHRoZSBibG9iLCBub3QgdGhlXG4gKiBsb2NhdGlvbiBvZiB0aGUgcGFnZSB3aGVyZSBvdXIgY29kZSBpcyBsb2FkZWQgaW4uIFRoZSBhY3R1YWwgb3JpZ2luIGlzXG4gKiBlbmNvZGVkIGluIHRoZSBgcGF0aG5hbWVgIHNvIHdlIGNhbiB0aGFua2Z1bGx5IGdlbmVyYXRlIGEgZ29vZCBcImRlZmF1bHRcIlxuICogbG9jYXRpb24gZnJvbSBpdCBzbyB3ZSBjYW4gZ2VuZXJhdGUgcHJvcGVyIHJlbGF0aXZlIFVSTCdzIGFnYWluLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gbG9jIE9wdGlvbmFsIGRlZmF1bHQgbG9jYXRpb24gb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gbG9sY2F0aW9uIG9iamVjdC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gbG9sY2F0aW9uKGxvYykge1xuICB2YXIgZ2xvYmFsVmFyO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gd2luZG93O1xuICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgZ2xvYmFsVmFyID0gZ2xvYmFsO1xuICBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHNlbGY7XG4gIGVsc2UgZ2xvYmFsVmFyID0ge307XG5cbiAgdmFyIGxvY2F0aW9uID0gZ2xvYmFsVmFyLmxvY2F0aW9uIHx8IHt9O1xuICBsb2MgPSBsb2MgfHwgbG9jYXRpb247XG5cbiAgdmFyIGZpbmFsZGVzdGluYXRpb24gPSB7fVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NcbiAgICAsIGtleTtcblxuICBpZiAoJ2Jsb2I6JyA9PT0gbG9jLnByb3RvY29sKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwodW5lc2NhcGUobG9jLnBhdGhuYW1lKSwge30pO1xuICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlKSB7XG4gICAgZmluYWxkZXN0aW5hdGlvbiA9IG5ldyBVcmwobG9jLCB7fSk7XG4gICAgZm9yIChrZXkgaW4gaWdub3JlKSBkZWxldGUgZmluYWxkZXN0aW5hdGlvbltrZXldO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlKSB7XG4gICAgZm9yIChrZXkgaW4gbG9jKSB7XG4gICAgICBpZiAoa2V5IGluIGlnbm9yZSkgY29udGludWU7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uW2tleV0gPSBsb2Nba2V5XTtcbiAgICB9XG5cbiAgICBpZiAoZmluYWxkZXN0aW5hdGlvbi5zbGFzaGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9IHNsYXNoZXMudGVzdChsb2MuaHJlZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbmFsZGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBUaGUgcHJvdG9jb2wgc2NoZW1lIG9mIHRoZSBVUkxcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvdG9jb2wgc2NoZW1lIGlzIHNwZWNpYWwsIGVsc2UgYGZhbHNlYFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNTcGVjaWFsKHNjaGVtZSkge1xuICByZXR1cm4gKFxuICAgIHNjaGVtZSA9PT0gJ2ZpbGU6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2Z0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cDonIHx8XG4gICAgc2NoZW1lID09PSAnaHR0cHM6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ3dzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3c3M6J1xuICApO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFByb3RvY29sRXh0cmFjdFxuICogQHR5cGUgT2JqZWN0XG4gKiBAcHJvcGVydHkge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgbWF0Y2hlZCBpbiB0aGUgVVJMLCBpbiBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHNsYXNoZXMgYHRydWVgIGlmIHByb3RvY29sIGlzIGZvbGxvd2VkIGJ5IFwiLy9cIiwgZWxzZSBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHJlc3QgUmVzdCBvZiB0aGUgVVJMIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBmcm9tIGEgVVJMIHdpdGgvd2l0aG91dCBkb3VibGUgc2xhc2ggKFwiLy9cIikuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IGxvY2F0aW9uXG4gKiBAcmV0dXJuIHtQcm90b2NvbEV4dHJhY3R9IEV4dHJhY3RlZCBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQcm90b2NvbChhZGRyZXNzLCBsb2NhdGlvbikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG4gIGxvY2F0aW9uID0gbG9jYXRpb24gfHwge307XG5cbiAgdmFyIG1hdGNoID0gcHJvdG9jb2xyZS5leGVjKGFkZHJlc3MpO1xuICB2YXIgcHJvdG9jb2wgPSBtYXRjaFsxXSA/IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgdmFyIGZvcndhcmRTbGFzaGVzID0gISFtYXRjaFsyXTtcbiAgdmFyIG90aGVyU2xhc2hlcyA9ICEhbWF0Y2hbM107XG4gIHZhciBzbGFzaGVzQ291bnQgPSAwO1xuICB2YXIgcmVzdDtcblxuICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICBpZiAob3RoZXJTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbMl0ubGVuZ3RoICsgbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbMl0gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzNdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFszXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3QgPSBtYXRjaFs0XVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm90b2NvbCA9PT0gJ2ZpbGU6Jykge1xuICAgIGlmIChzbGFzaGVzQ291bnQgPj0gMikge1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoMik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3BlY2lhbChwcm90b2NvbCkpIHtcbiAgICByZXN0ID0gbWF0Y2hbNF07XG4gIH0gZWxzZSBpZiAocHJvdG9jb2wpIHtcbiAgICBpZiAoZm9yd2FyZFNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzbGFzaGVzQ291bnQgPj0gMiAmJiBpc1NwZWNpYWwobG9jYXRpb24ucHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgc2xhc2hlczogZm9yd2FyZFNsYXNoZXMgfHwgaXNTcGVjaWFsKHByb3RvY29sKSxcbiAgICBzbGFzaGVzQ291bnQ6IHNsYXNoZXNDb3VudCxcbiAgICByZXN0OiByZXN0XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHJlbGF0aXZlIFVSTCBwYXRobmFtZSBhZ2FpbnN0IGEgYmFzZSBVUkwgcGF0aG5hbWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlbGF0aXZlIFBhdGhuYW1lIG9mIHRoZSByZWxhdGl2ZSBVUkwuXG4gKiBAcGFyYW0ge1N0cmluZ30gYmFzZSBQYXRobmFtZSBvZiB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlc29sdmVkIHBhdGhuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShyZWxhdGl2ZSwgYmFzZSkge1xuICBpZiAocmVsYXRpdmUgPT09ICcnKSByZXR1cm4gYmFzZTtcblxuICB2YXIgcGF0aCA9IChiYXNlIHx8ICcvJykuc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuY29uY2F0KHJlbGF0aXZlLnNwbGl0KCcvJykpXG4gICAgLCBpID0gcGF0aC5sZW5ndGhcbiAgICAsIGxhc3QgPSBwYXRoW2kgLSAxXVxuICAgICwgdW5zaGlmdCA9IGZhbHNlXG4gICAgLCB1cCA9IDA7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChwYXRoW2ldID09PSAnLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGF0aFtpXSA9PT0gJy4uJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIGlmIChpID09PSAwKSB1bnNoaWZ0ID0gdHJ1ZTtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICBpZiAodW5zaGlmdCkgcGF0aC51bnNoaWZ0KCcnKTtcbiAgaWYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSBwYXRoLnB1c2goJycpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4oJy8nKTtcbn1cblxuLyoqXG4gKiBUaGUgYWN0dWFsIFVSTCBpbnN0YW5jZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gb2JqZWN0IHdlJ3ZlIG9wdGVkLWluIHRvXG4gKiBjcmVhdGUgYW4gYWN0dWFsIGNvbnN0cnVjdG9yIGFzIGl0J3MgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQgYW5kXG4gKiBmYXN0ZXIgYW5kIGl0IHBsZWFzZXMgbXkgT0NELlxuICpcbiAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHdlIHNob3VsZCBub3QgdXNlIGBVUkxgIGFzIGNsYXNzIG5hbWUgdG8gcHJldmVudFxuICogY2xhc2hlcyB3aXRoIHRoZSBnbG9iYWwgVVJMIGluc3RhbmNlIHRoYXQgZ290IGludHJvZHVjZWQgaW4gYnJvd3NlcnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gW2xvY2F0aW9uXSBMb2NhdGlvbiBkZWZhdWx0cyBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IFtwYXJzZXJdIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcbiAgYWRkcmVzcyA9IGFkZHJlc3MucmVwbGFjZShDUkhUTEYsICcnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVXJsKSkge1xuICAgIHJldHVybiBuZXcgVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpO1xuICB9XG5cbiAgdmFyIHJlbGF0aXZlLCBleHRyYWN0ZWQsIHBhcnNlLCBpbnN0cnVjdGlvbiwgaW5kZXgsIGtleVxuICAgICwgaW5zdHJ1Y3Rpb25zID0gcnVsZXMuc2xpY2UoKVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NhdGlvblxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaSA9IDA7XG5cbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnRzIGFsbG93cyB0aGlzIG1vZHVsZSB0d28gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gMiBkaWZmZXJlbnQgQVBJOlxuICAvL1xuICAvLyAxLiBOb2RlLmpzJ3MgYHVybC5wYXJzZWAgYXBpIHdoaWNoIGFjY2VwdHMgYSBVUkwsIGJvb2xlYW4gYXMgYXJndW1lbnRzXG4gIC8vICAgIHdoZXJlIHRoZSBib29sZWFuIGluZGljYXRlcyB0aGF0IHRoZSBxdWVyeSBzdHJpbmcgc2hvdWxkIGFsc28gYmUgcGFyc2VkLlxuICAvL1xuICAvLyAyLiBUaGUgYFVSTGAgaW50ZXJmYWNlIG9mIHRoZSBicm93c2VyIHdoaWNoIGFjY2VwdHMgYSBVUkwsIG9iamVjdCBhc1xuICAvLyAgICBhcmd1bWVudHMuIFRoZSBzdXBwbGllZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgdmFsdWVzIC8gZmFsbC1iYWNrXG4gIC8vICAgIGZvciByZWxhdGl2ZSBwYXRocy5cbiAgLy9cbiAgaWYgKCdvYmplY3QnICE9PSB0eXBlICYmICdzdHJpbmcnICE9PSB0eXBlKSB7XG4gICAgcGFyc2VyID0gbG9jYXRpb247XG4gICAgbG9jYXRpb24gPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlciAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgcGFyc2VyKSBwYXJzZXIgPSBxcy5wYXJzZTtcblxuICBsb2NhdGlvbiA9IGxvbGNhdGlvbihsb2NhdGlvbik7XG5cbiAgLy9cbiAgLy8gRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuICAvL1xuICBleHRyYWN0ZWQgPSBleHRyYWN0UHJvdG9jb2woYWRkcmVzcyB8fCAnJywgbG9jYXRpb24pO1xuICByZWxhdGl2ZSA9ICFleHRyYWN0ZWQucHJvdG9jb2wgJiYgIWV4dHJhY3RlZC5zbGFzaGVzO1xuICB1cmwuc2xhc2hlcyA9IGV4dHJhY3RlZC5zbGFzaGVzIHx8IHJlbGF0aXZlICYmIGxvY2F0aW9uLnNsYXNoZXM7XG4gIHVybC5wcm90b2NvbCA9IGV4dHJhY3RlZC5wcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCB8fCAnJztcbiAgYWRkcmVzcyA9IGV4dHJhY3RlZC5yZXN0O1xuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIGF1dGhvcml0eSBjb21wb25lbnQgaXMgYWJzZW50IHRoZSBVUkwgc3RhcnRzIHdpdGggYSBwYXRoXG4gIC8vIGNvbXBvbmVudC5cbiAgLy9cbiAgaWYgKFxuICAgIGV4dHJhY3RlZC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyAmJiAoXG4gICAgICBleHRyYWN0ZWQuc2xhc2hlc0NvdW50ICE9PSAyIHx8IHdpbmRvd3NEcml2ZUxldHRlci50ZXN0KGFkZHJlc3MpKSB8fFxuICAgICghZXh0cmFjdGVkLnNsYXNoZXMgJiZcbiAgICAgIChleHRyYWN0ZWQucHJvdG9jb2wgfHxcbiAgICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCA8IDIgfHxcbiAgICAgICAgIWlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSlcbiAgKSB7XG4gICAgaW5zdHJ1Y3Rpb25zWzNdID0gWy8oLiopLywgJ3BhdGhuYW1lJ107XG4gIH1cblxuICBmb3IgKDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYWRkcmVzcyA9IGluc3RydWN0aW9uKGFkZHJlc3MsIHVybCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwYXJzZSA9IGluc3RydWN0aW9uWzBdO1xuICAgIGtleSA9IGluc3RydWN0aW9uWzFdO1xuXG4gICAgaWYgKHBhcnNlICE9PSBwYXJzZSkge1xuICAgICAgdXJsW2tleV0gPSBhZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXJzZSkge1xuICAgICAgaW5kZXggPSBwYXJzZSA9PT0gJ0AnXG4gICAgICAgID8gYWRkcmVzcy5sYXN0SW5kZXhPZihwYXJzZSlcbiAgICAgICAgOiBhZGRyZXNzLmluZGV4T2YocGFyc2UpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGluc3RydWN0aW9uWzJdKSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZShpbmRleCArIGluc3RydWN0aW9uWzJdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGluZGV4ID0gcGFyc2UuZXhlYyhhZGRyZXNzKSkpIHtcbiAgICAgIHVybFtrZXldID0gaW5kZXhbMV07XG4gICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleC5pbmRleCk7XG4gICAgfVxuXG4gICAgdXJsW2tleV0gPSB1cmxba2V5XSB8fCAoXG4gICAgICByZWxhdGl2ZSAmJiBpbnN0cnVjdGlvblszXSA/IGxvY2F0aW9uW2tleV0gfHwgJycgOiAnJ1xuICAgICk7XG5cbiAgICAvL1xuICAgIC8vIEhvc3RuYW1lLCBob3N0IGFuZCBwcm90b2NvbCBzaG91bGQgYmUgbG93ZXJjYXNlZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvXG4gICAgLy8gY3JlYXRlIGEgcHJvcGVyIGBvcmlnaW5gLlxuICAgIC8vXG4gICAgaWYgKGluc3RydWN0aW9uWzRdKSB1cmxba2V5XSA9IHVybFtrZXldLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvL1xuICAvLyBBbHNvIHBhcnNlIHRoZSBzdXBwbGllZCBxdWVyeSBzdHJpbmcgaW4gdG8gYW4gb2JqZWN0LiBJZiB3ZSdyZSBzdXBwbGllZFxuICAvLyB3aXRoIGEgY3VzdG9tIHBhcnNlciBhcyBmdW5jdGlvbiB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJ1aWxkLWluXG4gIC8vIHBhcnNlci5cbiAgLy9cbiAgaWYgKHBhcnNlcikgdXJsLnF1ZXJ5ID0gcGFyc2VyKHVybC5xdWVyeSk7XG5cbiAgLy9cbiAgLy8gSWYgdGhlIFVSTCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSB0aGUgcGF0aG5hbWUgYWdhaW5zdCB0aGUgYmFzZSBVUkwuXG4gIC8vXG4gIGlmIChcbiAgICAgIHJlbGF0aXZlXG4gICAgJiYgbG9jYXRpb24uc2xhc2hlc1xuICAgICYmIHVybC5wYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJ1xuICAgICYmICh1cmwucGF0aG5hbWUgIT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lICE9PSAnJylcbiAgKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gcmVzb2x2ZSh1cmwucGF0aG5hbWUsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgfVxuXG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYSAvIGZvciBwYXRobmFtZSBpZiBub25lIGV4aXN0cy4gVGhpcyBub3JtYWxpemVzIHRoZSBVUkxcbiAgLy8gdG8gYWx3YXlzIGhhdmUgYSAvXG4gIC8vXG4gIGlmICh1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwucGF0aG5hbWUgPSAnLycgKyB1cmwucGF0aG5hbWU7XG4gIH1cblxuICAvL1xuICAvLyBXZSBzaG91bGQgbm90IGFkZCBwb3J0IG51bWJlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlclxuICAvLyBmb3IgYSBnaXZlbiBwcm90b2NvbC4gQXMgdGhlIGhvc3QgYWxzbyBjb250YWlucyB0aGUgcG9ydCBudW1iZXIgd2UncmUgZ29pbmdcbiAgLy8gb3ZlcnJpZGUgaXQgd2l0aCB0aGUgaG9zdG5hbWUgd2hpY2ggY29udGFpbnMgbm8gcG9ydCBudW1iZXIuXG4gIC8vXG4gIGlmICghcmVxdWlyZWQodXJsLnBvcnQsIHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICB1cmwucG9ydCA9ICcnO1xuICB9XG5cbiAgLy9cbiAgLy8gUGFyc2UgZG93biB0aGUgYGF1dGhgIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAvL1xuICB1cmwudXNlcm5hbWUgPSB1cmwucGFzc3dvcmQgPSAnJztcblxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBpbmRleCA9IHVybC5hdXRoLmluZGV4T2YoJzonKTtcblxuICAgIGlmICh+aW5kZXgpIHtcbiAgICAgIHVybC51c2VybmFtZSA9IHVybC5hdXRoLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSk7XG5cbiAgICAgIHVybC5wYXNzd29yZCA9IHVybC5hdXRoLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHVybC51c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLmF1dGgpKTtcbiAgICB9XG5cbiAgICB1cmwuYXV0aCA9IHVybC5wYXNzd29yZCA/IHVybC51c2VybmFtZSArJzonKyB1cmwucGFzc3dvcmQgOiB1cmwudXNlcm5hbWU7XG4gIH1cblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9IFVSTCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmIChwb3J0LnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgdXJsLnBvcnQgPSB2YWx1ZS5wb3AoKTtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWUuam9pbignOicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLmhvc3RuYW1lID0gdmFsdWU7XG4gICAgICAgIHVybC5wb3J0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncHJvdG9jb2wnOlxuICAgICAgdXJsLnByb3RvY29sID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVybC5zbGFzaGVzID0gIWZuO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwYXRobmFtZSc6XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGNoYXIgPSBwYXJ0ID09PSAncGF0aG5hbWUnID8gJy8nIDogJyMnO1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZS5jaGFyQXQoMCkgIT09IGNoYXIgPyBjaGFyICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd1c2VybmFtZSc6XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdXJsW3BhcnRdID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYXV0aCc6XG4gICAgICB2YXIgaW5kZXggPSB2YWx1ZS5pbmRleE9mKCc6Jyk7XG5cbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gdmFsdWUuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICAgIHVybC5wYXNzd29yZCA9IHZhbHVlLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIHVybC5wYXNzd29yZCA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlucyA9IHJ1bGVzW2ldO1xuXG4gICAgaWYgKGluc1s0XSkgdXJsW2luc1sxXV0gPSB1cmxbaW5zWzFdXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiYgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgJiYgdXJsLmhvc3RcbiAgICA/IHVybC5wcm90b2NvbCArJy8vJysgdXJsLmhvc3RcbiAgICA6ICdudWxsJztcblxuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGJhY2sgaW4gdG8gYSB2YWxpZCBhbmQgZnVsbCBVUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZ2lmeSBPcHRpb25hbCBxdWVyeSBzdHJpbmdpZnkgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBDb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBVUkwuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHN0cmluZ2lmeSkge1xuICBpZiAoIXN0cmluZ2lmeSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2Ygc3RyaW5naWZ5KSBzdHJpbmdpZnkgPSBxcy5zdHJpbmdpZnk7XG5cbiAgdmFyIHF1ZXJ5XG4gICAgLCB1cmwgPSB0aGlzXG4gICAgLCBob3N0ID0gdXJsLmhvc3RcbiAgICAsIHByb3RvY29sID0gdXJsLnByb3RvY29sO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5jaGFyQXQocHJvdG9jb2wubGVuZ3RoIC0gMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIHZhciByZXN1bHQgPVxuICAgIHByb3RvY29sICtcbiAgICAoKHVybC5wcm90b2NvbCAmJiB1cmwuc2xhc2hlcykgfHwgaXNTcGVjaWFsKHVybC5wcm90b2NvbCkgPyAnLy8nIDogJycpO1xuXG4gIGlmICh1cmwudXNlcm5hbWUpIHtcbiAgICByZXN1bHQgKz0gdXJsLnVzZXJuYW1lO1xuICAgIGlmICh1cmwucGFzc3dvcmQpIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKHVybC5wYXNzd29yZCkge1xuICAgIHJlc3VsdCArPSAnOicrIHVybC5wYXNzd29yZDtcbiAgICByZXN1bHQgKz0gJ0AnO1xuICB9IGVsc2UgaWYgKFxuICAgIHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmXG4gICAgIWhvc3QgJiZcbiAgICB1cmwucGF0aG5hbWUgIT09ICcvJ1xuICApIHtcbiAgICAvL1xuICAgIC8vIEFkZCBiYWNrIHRoZSBlbXB0eSB1c2VyaW5mbywgb3RoZXJ3aXNlIHRoZSBvcmlnaW5hbCBpbnZhbGlkIFVSTFxuICAgIC8vIG1pZ2h0IGJlIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUgd2l0aCBgdXJsLnBhdGhuYW1lYCBhcyBob3N0LlxuICAgIC8vXG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIC8vXG4gIC8vIFRyYWlsaW5nIGNvbG9uIGlzIHJlbW92ZWQgZnJvbSBgdXJsLmhvc3RgIHdoZW4gaXQgaXMgcGFyc2VkLiBJZiBpdCBzdGlsbFxuICAvLyBlbmRzIHdpdGggYSBjb2xvbiwgdGhlbiBhZGQgYmFjayB0aGUgdHJhaWxpbmcgY29sb24gdGhhdCB3YXMgcmVtb3ZlZC4gVGhpc1xuICAvLyBwcmV2ZW50cyBhbiBpbnZhbGlkIFVSTCBmcm9tIGJlaW5nIHRyYW5zZm9ybWVkIGludG8gYSB2YWxpZCBvbmUuXG4gIC8vXG4gIGlmIChob3N0W2hvc3QubGVuZ3RoIC0gMV0gPT09ICc6JyB8fCAocG9ydC50ZXN0KHVybC5ob3N0bmFtZSkgJiYgIXVybC5wb3J0KSkge1xuICAgIGhvc3QgKz0gJzonO1xuICB9XG5cbiAgcmVzdWx0ICs9IGhvc3QgKyB1cmwucGF0aG5hbWU7XG5cbiAgcXVlcnkgPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHVybC5xdWVyeSA/IHN0cmluZ2lmeSh1cmwucXVlcnkpIDogdXJsLnF1ZXJ5O1xuICBpZiAocXVlcnkpIHJlc3VsdCArPSAnPycgIT09IHF1ZXJ5LmNoYXJBdCgwKSA/ICc/JysgcXVlcnkgOiBxdWVyeTtcblxuICBpZiAodXJsLmhhc2gpIHJlc3VsdCArPSB1cmwuaGFzaDtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5VcmwucHJvdG90eXBlID0geyBzZXQ6IHNldCwgdG9TdHJpbmc6IHRvU3RyaW5nIH07XG5cbi8vXG4vLyBFeHBvc2UgdGhlIFVSTCBwYXJzZXIgYW5kIHNvbWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgYmUgdXNlZnVsIGZvclxuLy8gb3RoZXJzIG9yIHRlc3RpbmcuXG4vL1xuVXJsLmV4dHJhY3RQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbDtcblVybC5sb2NhdGlvbiA9IGxvbGNhdGlvbjtcblVybC50cmltTGVmdCA9IHRyaW1MZWZ0O1xuVXJsLnFzID0gcXM7XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG5cdHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBzaXplclN0eWxlID0ge1xuXHRwb3NpdGlvbjogJ2Fic29sdXRlJyxcblx0dG9wOiAwLFxuXHRsZWZ0OiAwLFxuXHR2aXNpYmlsaXR5OiAnaGlkZGVuJyxcblx0aGVpZ2h0OiAwLFxuXHRvdmVyZmxvdzogJ3Njcm9sbCcsXG5cdHdoaXRlU3BhY2U6ICdwcmUnXG59O1xuXG52YXIgSU5QVVRfUFJPUFNfQkxBQ0tMSVNUID0gWydleHRyYVdpZHRoJywgJ2luamVjdFN0eWxlcycsICdpbnB1dENsYXNzTmFtZScsICdpbnB1dFJlZicsICdpbnB1dFN0eWxlJywgJ21pbldpZHRoJywgJ29uQXV0b3NpemUnLCAncGxhY2Vob2xkZXJJc01pbldpZHRoJ107XG5cbnZhciBjbGVhbklucHV0UHJvcHMgPSBmdW5jdGlvbiBjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcykge1xuXHRJTlBVVF9QUk9QU19CTEFDS0xJU1QuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcblx0XHRyZXR1cm4gZGVsZXRlIGlucHV0UHJvcHNbZmllbGRdO1xuXHR9KTtcblx0cmV0dXJuIGlucHV0UHJvcHM7XG59O1xuXG52YXIgY29weVN0eWxlcyA9IGZ1bmN0aW9uIGNvcHlTdHlsZXMoc3R5bGVzLCBub2RlKSB7XG5cdG5vZGUuc3R5bGUuZm9udFNpemUgPSBzdHlsZXMuZm9udFNpemU7XG5cdG5vZGUuc3R5bGUuZm9udEZhbWlseSA9IHN0eWxlcy5mb250RmFtaWx5O1xuXHRub2RlLnN0eWxlLmZvbnRXZWlnaHQgPSBzdHlsZXMuZm9udFdlaWdodDtcblx0bm9kZS5zdHlsZS5mb250U3R5bGUgPSBzdHlsZXMuZm9udFN0eWxlO1xuXHRub2RlLnN0eWxlLmxldHRlclNwYWNpbmcgPSBzdHlsZXMubGV0dGVyU3BhY2luZztcblx0bm9kZS5zdHlsZS50ZXh0VHJhbnNmb3JtID0gc3R5bGVzLnRleHRUcmFuc2Zvcm07XG59O1xuXG52YXIgaXNJRSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyAvTVNJRSB8VHJpZGVudFxcL3xFZGdlXFwvLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSA6IGZhbHNlO1xuXG52YXIgZ2VuZXJhdGVJZCA9IGZ1bmN0aW9uIGdlbmVyYXRlSWQoKSB7XG5cdC8vIHdlIG9ubHkgbmVlZCBhbiBhdXRvLWdlbmVyYXRlZCBJRCBmb3Igc3R5bGVzaGVldCBpbmplY3Rpb24sIHdoaWNoIGlzIG9ubHlcblx0Ly8gdXNlZCBmb3IgSUUuIHNvIGlmIHRoZSBicm93c2VyIGlzIG5vdCBJRSwgdGhpcyBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZC5cblx0cmV0dXJuIGlzSUUgPyAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgMTIpIDogdW5kZWZpbmVkO1xufTtcblxudmFyIEF1dG9zaXplSW5wdXQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfaW5oZXJpdHMoQXV0b3NpemVJbnB1dCwgX0NvbXBvbmVudCk7XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIG51bGwsIFt7XG5cdFx0a2V5OiAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuXHRcdFx0dmFyIGlkID0gcHJvcHMuaWQ7XG5cblx0XHRcdHJldHVybiBpZCAhPT0gc3RhdGUucHJldklkID8geyBpbnB1dElkOiBpZCB8fCBnZW5lcmF0ZUlkKCksIHByZXZJZDogaWQgfSA6IG51bGw7XG5cdFx0fVxuXHR9XSk7XG5cblx0ZnVuY3Rpb24gQXV0b3NpemVJbnB1dChwcm9wcykge1xuXHRcdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBdXRvc2l6ZUlucHV0KTtcblxuXHRcdHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChBdXRvc2l6ZUlucHV0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQXV0b3NpemVJbnB1dCkpLmNhbGwodGhpcywgcHJvcHMpKTtcblxuXHRcdF90aGlzLmlucHV0UmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5pbnB1dCA9IGVsO1xuXHRcdFx0aWYgKHR5cGVvZiBfdGhpcy5wcm9wcy5pbnB1dFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRfdGhpcy5wcm9wcy5pbnB1dFJlZihlbCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdF90aGlzLnBsYWNlSG9sZGVyU2l6ZXJSZWYgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdF90aGlzLnBsYWNlSG9sZGVyU2l6ZXIgPSBlbDtcblx0XHR9O1xuXG5cdFx0X3RoaXMuc2l6ZXJSZWYgPSBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdF90aGlzLnNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnN0YXRlID0ge1xuXHRcdFx0aW5wdXRXaWR0aDogcHJvcHMubWluV2lkdGgsXG5cdFx0XHRpbnB1dElkOiBwcm9wcy5pZCB8fCBnZW5lcmF0ZUlkKCksXG5cdFx0XHRwcmV2SWQ6IHByb3BzLmlkXG5cdFx0fTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRfY3JlYXRlQ2xhc3MoQXV0b3NpemVJbnB1dCwgW3tcblx0XHRrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuY29weUlucHV0U3R5bGVzKCk7XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnREaWRVcGRhdGUnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcblx0XHRcdGlmIChwcmV2U3RhdGUuaW5wdXRXaWR0aCAhPT0gdGhpcy5zdGF0ZS5pbnB1dFdpZHRoKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkF1dG9zaXplID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9wcy5vbkF1dG9zaXplKHRoaXMuc3RhdGUuaW5wdXRXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMudXBkYXRlSW5wdXRXaWR0aCgpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG5cdFx0XHR0aGlzLm1vdW50ZWQgPSBmYWxzZTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb3B5SW5wdXRTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb3B5SW5wdXRTdHlsZXMoKSB7XG5cdFx0XHRpZiAoIXRoaXMubW91bnRlZCB8fCAhd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGlucHV0U3R5bGVzID0gdGhpcy5pbnB1dCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmlucHV0KTtcblx0XHRcdGlmICghaW5wdXRTdHlsZXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29weVN0eWxlcyhpbnB1dFN0eWxlcywgdGhpcy5zaXplcik7XG5cdFx0XHRpZiAodGhpcy5wbGFjZUhvbGRlclNpemVyKSB7XG5cdFx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMucGxhY2VIb2xkZXJTaXplcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAndXBkYXRlSW5wdXRXaWR0aCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUlucHV0V2lkdGgoKSB7XG5cdFx0XHRpZiAoIXRoaXMubW91bnRlZCB8fCAhdGhpcy5zaXplciB8fCB0eXBlb2YgdGhpcy5zaXplci5zY3JvbGxXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIG5ld0lucHV0V2lkdGggPSB2b2lkIDA7XG5cdFx0XHRpZiAodGhpcy5wcm9wcy5wbGFjZWhvbGRlciAmJiAoIXRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy52YWx1ZSAmJiB0aGlzLnByb3BzLnBsYWNlaG9sZGVySXNNaW5XaWR0aCkpIHtcblx0XHRcdFx0bmV3SW5wdXRXaWR0aCA9IE1hdGgubWF4KHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGgsIHRoaXMucGxhY2VIb2xkZXJTaXplci5zY3JvbGxXaWR0aCkgKyAyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3SW5wdXRXaWR0aCA9IHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggKyAyO1xuXHRcdFx0fVxuXHRcdFx0Ly8gYWRkIGV4dHJhV2lkdGggdG8gdGhlIGRldGVjdGVkIHdpZHRoLiBmb3IgbnVtYmVyIHR5cGVzLCB0aGlzIGRlZmF1bHRzIHRvIDE2IHRvIGFsbG93IGZvciB0aGUgc3RlcHBlciBVSVxuXHRcdFx0dmFyIGV4dHJhV2lkdGggPSB0aGlzLnByb3BzLnR5cGUgPT09ICdudW1iZXInICYmIHRoaXMucHJvcHMuZXh0cmFXaWR0aCA9PT0gdW5kZWZpbmVkID8gMTYgOiBwYXJzZUludCh0aGlzLnByb3BzLmV4dHJhV2lkdGgpIHx8IDA7XG5cdFx0XHRuZXdJbnB1dFdpZHRoICs9IGV4dHJhV2lkdGg7XG5cdFx0XHRpZiAobmV3SW5wdXRXaWR0aCA8IHRoaXMucHJvcHMubWluV2lkdGgpIHtcblx0XHRcdFx0bmV3SW5wdXRXaWR0aCA9IHRoaXMucHJvcHMubWluV2lkdGg7XG5cdFx0XHR9XG5cdFx0XHRpZiAobmV3SW5wdXRXaWR0aCAhPT0gdGhpcy5zdGF0ZS5pbnB1dFdpZHRoKSB7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdGlucHV0V2lkdGg6IG5ld0lucHV0V2lkdGhcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnZ2V0SW5wdXQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRJbnB1dCgpIHtcblx0XHRcdHJldHVybiB0aGlzLmlucHV0O1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2ZvY3VzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZm9jdXMoKSB7XG5cdFx0XHR0aGlzLmlucHV0LmZvY3VzKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnYmx1cicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGJsdXIoKSB7XG5cdFx0XHR0aGlzLmlucHV0LmJsdXIoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdzZWxlY3QnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBzZWxlY3QoKSB7XG5cdFx0XHR0aGlzLmlucHV0LnNlbGVjdCgpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3JlbmRlclN0eWxlcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcblx0XHRcdC8vIHRoaXMgbWV0aG9kIGluamVjdHMgc3R5bGVzIHRvIGhpZGUgSUUncyBjbGVhciBpbmRpY2F0b3IsIHdoaWNoIG1lc3Nlc1xuXHRcdFx0Ly8gd2l0aCBpbnB1dCBzaXplIGRldGVjdGlvbi4gdGhlIHN0eWxlc2hlZXQgaXMgb25seSBpbmplY3RlZCB3aGVuIHRoZVxuXHRcdFx0Ly8gYnJvd3NlciBpcyBJRSwgYW5kIGNhbiBhbHNvIGJlIGRpc2FibGVkIGJ5IHRoZSBgaW5qZWN0U3R5bGVzYCBwcm9wLlxuXHRcdFx0dmFyIGluamVjdFN0eWxlcyA9IHRoaXMucHJvcHMuaW5qZWN0U3R5bGVzO1xuXG5cdFx0XHRyZXR1cm4gaXNJRSAmJiBpbmplY3RTdHlsZXMgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnc3R5bGUnLCB7IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7XG5cdFx0XHRcdFx0X19odG1sOiAnaW5wdXQjJyArIHRoaXMuc3RhdGUuaW5wdXRJZCArICc6Oi1tcy1jbGVhciB7ZGlzcGxheTogbm9uZTt9J1xuXHRcdFx0XHR9IH0pIDogbnVsbDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgc2l6ZXJWYWx1ZSA9IFt0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSwgdGhpcy5wcm9wcy52YWx1ZSwgJyddLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdGlmIChwcmV2aW91c1ZhbHVlICE9PSBudWxsICYmIHByZXZpb3VzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjdXJyZW50VmFsdWU7XG5cdFx0XHR9KTtcblxuXHRcdFx0dmFyIHdyYXBwZXJTdHlsZSA9IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLnN0eWxlKTtcblx0XHRcdGlmICghd3JhcHBlclN0eWxlLmRpc3BsYXkpIHdyYXBwZXJTdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cblx0XHRcdHZhciBpbnB1dFN0eWxlID0gX2V4dGVuZHMoe1xuXHRcdFx0XHRib3hTaXppbmc6ICdjb250ZW50LWJveCcsXG5cdFx0XHRcdHdpZHRoOiB0aGlzLnN0YXRlLmlucHV0V2lkdGggKyAncHgnXG5cdFx0XHR9LCB0aGlzLnByb3BzLmlucHV0U3R5bGUpO1xuXG5cdFx0XHR2YXIgaW5wdXRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyh0aGlzLnByb3BzLCBbXSk7XG5cblx0XHRcdGNsZWFuSW5wdXRQcm9wcyhpbnB1dFByb3BzKTtcblx0XHRcdGlucHV0UHJvcHMuY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZTtcblx0XHRcdGlucHV0UHJvcHMuaWQgPSB0aGlzLnN0YXRlLmlucHV0SWQ7XG5cdFx0XHRpbnB1dFByb3BzLnN0eWxlID0gaW5wdXRTdHlsZTtcblxuXHRcdFx0cmV0dXJuIF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6IHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZTogd3JhcHBlclN0eWxlIH0sXG5cdFx0XHRcdHRoaXMucmVuZGVyU3R5bGVzKCksXG5cdFx0XHRcdF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCdpbnB1dCcsIF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCB7IHJlZjogdGhpcy5pbnB1dFJlZiB9KSksXG5cdFx0XHRcdF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgcmVmOiB0aGlzLnNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHNpemVyVmFsdWVcblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5wcm9wcy5wbGFjZWhvbGRlciA/IF9yZWFjdDIuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgcmVmOiB0aGlzLnBsYWNlSG9sZGVyU2l6ZXJSZWYsIHN0eWxlOiBzaXplclN0eWxlIH0sXG5cdFx0XHRcdFx0dGhpcy5wcm9wcy5wbGFjZWhvbGRlclxuXHRcdFx0XHQpIDogbnVsbFxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gQXV0b3NpemVJbnB1dDtcbn0oX3JlYWN0LkNvbXBvbmVudCk7XG5cbkF1dG9zaXplSW5wdXQucHJvcFR5cGVzID0ge1xuXHRjbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBjbGFzc05hbWUgZm9yIHRoZSBvdXRlciBlbGVtZW50XG5cdGRlZmF1bHRWYWx1ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5hbnksIC8vIGRlZmF1bHQgZmllbGQgdmFsdWVcblx0ZXh0cmFXaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIGFkZGl0aW9uYWwgd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdGlkOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gaWQgdG8gdXNlIGZvciB0aGUgaW5wdXQsIGNhbiBiZSBzZXQgZm9yIGNvbnNpc3RlbnQgc25hcHNob3RzXG5cdGluamVjdFN0eWxlczogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLCAvLyBpbmplY3QgdGhlIGN1c3RvbSBzdHlsZXNoZWV0IHRvIGhpZGUgY2xlYXIgVUksIGRlZmF1bHRzIHRvIHRydWVcblx0aW5wdXRDbGFzc05hbWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBjbGFzc05hbWUgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0UmVmOiBfcHJvcFR5cGVzMi5kZWZhdWx0LmZ1bmMsIC8vIHJlZiBjYWxsYmFjayBmb3IgdGhlIGlucHV0IGVsZW1lbnRcblx0aW5wdXRTdHlsZTogX3Byb3BUeXBlczIuZGVmYXVsdC5vYmplY3QsIC8vIGNzcyBzdHlsZXMgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdG1pbldpZHRoOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9uZU9mVHlwZShbLy8gbWluaW11bSB3aWR0aCBmb3IgaW5wdXQgZWxlbWVudFxuXHRfcHJvcFR5cGVzMi5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmddKSxcblx0b25BdXRvc2l6ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBvbkF1dG9zaXplIGhhbmRsZXI6IGZ1bmN0aW9uKG5ld1dpZHRoKSB7fVxuXHRvbkNoYW5nZTogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyBvbkNoYW5nZSBoYW5kbGVyOiBmdW5jdGlvbihldmVudCkge31cblx0cGxhY2Vob2xkZXI6IF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nLCAvLyBwbGFjZWhvbGRlciB0ZXh0XG5cdHBsYWNlaG9sZGVySXNNaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5ib29sLCAvLyBkb24ndCBjb2xsYXBzZSBzaXplIHRvIGxlc3MgdGhhbiB0aGUgcGxhY2Vob2xkZXJcblx0c3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHR2YWx1ZTogX3Byb3BUeXBlczIuZGVmYXVsdC5hbnkgLy8gZmllbGQgdmFsdWVcbn07XG5BdXRvc2l6ZUlucHV0LmRlZmF1bHRQcm9wcyA9IHtcblx0bWluV2lkdGg6IDEsXG5cdGluamVjdFN0eWxlczogdHJ1ZVxufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gQXV0b3NpemVJbnB1dDsiLCAiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5pbXBvcnQge1xuICBFdWlDb21ib0JveCxcbiAgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LFxuICBldWlQYWxldHRlQ29sb3JCbGluZCxcbiAgRXVpSGlnaGxpZ2h0LFxuICBFdWlIZWFsdGgsXG4gIEV1aVByb3ZpZGVyLFxuICBFdWlJY29uXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsLFxuICAgIGFsbG93Q3VzdG9tVGVybXMsXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNpbmdsZVNlbGVjdGlvbixcbiAgICBzaW5nbGVTdWdnZXN0aW9uUm93LFxuICAgIHRzNG5mZGlHYXRld2F5ID0gZmFsc2UsXG4gICAgc2hvd0FwaVNvdXJjZSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHZpc0NvbG9ycyA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKCk7XG4gIGNvbnN0IHZpc0NvbG9yc0JlaGluZFRleHQgPSBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc2VhcmNoIHZhbHVlXG4gICAqL1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgYXZhaWxhYmxlIG9wdGlvbnMuc1xuICAgKi9cbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvKipcbiAgICogU3RvcmUgY3VycmVudCBzZXQgb2Ygc2VsZWN0IE9wdGlvbnMuIEEgc3Vic2V0IG9mIG9wdGlvbnMuXG4gICAqL1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8QXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4+KFtdKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVuZGVyT3B0aW9uID0gKG9wdGlvbiwgc2VhcmNoVmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCB2YWx1ZSB9ID0gb3B0aW9uO1xuICAgIGNvbnN0IGRvdENvbG9ySW5kZXggPSB2aXNDb2xvcnNCZWhpbmRUZXh0LmluZGV4T2YodmFsdWUudHlwZSA9PT0gXCJjbGFzc1wiID8gdmlzQ29sb3JzQmVoaW5kVGV4dFs1XSA6XG4gICAgICB2YWx1ZS50eXBlID09PSBcImluZGl2aWR1YWxcIiA/IHZpc0NvbG9yc0JlaGluZFRleHRbM10gOlxuICAgICAgICB2YWx1ZS50eXBlID09PSBcInByb3BlcnR5XCIgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzFdIDogXCJcIik7XG4gICAgY29uc3QgZG90Q29sb3IgPSB2aXNDb2xvcnNbZG90Q29sb3JJbmRleF07XG5cbiAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB2YWx1ZS5pcmkgPT0gXCJcIikgey8vIGlmIHdlIGhhdmUgYSBjdXN0b20gdGVybSwganVzdCBzaG93IHRoZSBsYWJlbFxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cblxuICAgIGxldCBwcmVmaXggPSAodmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiKVxuICAgICAgPyBcIlByZWZpeDogXCIgKyB2YWx1ZS5vbnRvbG9neV9uYW1lIFxuICAgICAgOiBcIlByZWZpeCA+IFNob3J0IGZvcm06IFwiICsgdmFsdWUub250b2xvZ3lfbmFtZSArIFwiID4gXCIgKyB2YWx1ZS5zaG9ydF9mb3JtO1xuXG4gICAgbGV0IGhvdmVyVGV4dCA9IGBUeXBlOiAke3ZhbHVlLnR5cGV9XFxuXFxuTGFiZWw6ICR7dmFsdWUubGFiZWx9XFxuXFxuJHtwcmVmaXh9YDtcbiAgICBpZiAodmFsdWUuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICBob3ZlclRleHQgKz0gYFxcblxcbkRlc2NyaXB0aW9uOiAke3ZhbHVlLmRlc2NyaXB0aW9ufWA7XG4gICAgfVxuICAgIGlmIChzaG93QXBpU291cmNlICYmIHZhbHVlLnNvdXJjZV91cmwgJiYgdmFsdWUuc291cmNlX3VybCAhPT0gXCJcIil7XG4gICAgICBob3ZlclRleHQgKz0gXCJcXG5cXG5Tb3VyY2U6IFwiICsgdmFsdWUuc291cmNlO1xuICAgICAgaG92ZXJUZXh0ICs9IFwiXFxuXFxuU291cmNlIFVSTDogXCIgKyB2YWx1ZS5zb3VyY2VfdXJsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlck9udG9sb2d5ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUhlYWx0aFxuICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICB7dmFsdWUuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJFbnRpdHlXaXRoRGVzY3JpcHRpb24gPSAoKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBzdHlsZT17eyBoZWlnaHQ6IDIwMCArIFwicHhcIiB9fT5cbiAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgY29sb3I9e2RvdENvbG9yfT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDxCcmVhZGNydW1iUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5TmFtZT17dmFsdWUub250b2xvZ3lfbmFtZX1cbiAgICAgICAgICAgICAgICAgICAgc2hvcnRGb3JtPXt2YWx1ZS5zaG9ydF9mb3JtfVxuICAgICAgICAgICAgICAgICAgICBjb2xvckZpcnN0PXtcInByaW1hcnlcIn1cbiAgICAgICAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e1wic3VjY2Vzc1wifVxuICAgICAgICAgICAgICAgICAgLz4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDxFdWlJY29uICBcbiAgICAgICAgICAgICAgICAgICAgdHlwZT17XCJpSW5DaXJjbGVcIn0gXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDUgfX0gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17aG92ZXJUZXh0fVxuICAgICAgICAgICAgICAgICAgLz4gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICB7IXNpbmdsZVN1Z2dlc3Rpb25Sb3cgJiYgdmFsdWUuZGVzY3JpcHRpb24gJiYgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAge3ZhbHVlLmRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCA0MCkgKyBcIi4uLlwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiID8gcmVuZGVyT250b2xvZ3koKSA6IHJlbmRlckVudGl0eVdpdGhEZXNjcmlwdGlvbigpO1xuICB9O1xuXG4gICAgLyoqXG4gICAgICogb24gbW91bnQ6IGZldGNoZXMgdGVybSBmb3IgcHJlc2VsZWN0ZWRcbiAgICAgKiBzZXRzIGl0cyBsYWJlbCBvciBzZXRzIGEgZ2l2ZW4gbGFiZWwgaWYgbm8gaXJpIGlzIHByb3ZpZGVkL3RoZSBnaXZlbiBpcmkgY2Fubm90IGJlIHJlc29sdmVkXG4gICAgICogb25seSBpZiBhbGxvd0N1c3RvbVRlcm1zIGlzIHRydWVcbiAgICAgKi9cbiAgICBjb25zdCB7XG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nT25Nb3VudFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJvbk1vdW50XCIsXG4gICAgICAgICAgICBwcmVzZWxlY3RlZFxuICAgICAgICBdLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJlc2VsZWN0ZWRWYWx1ZXM6IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT5bXSA9IFtdO1xuXG4gICAgICBsZXQgdW5pcXVlVmFsdWVzID0gWy4uLm5ldyBTZXQocHJlc2VsZWN0ZWQpXVxuICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGFsbG93Q3VzdG9tVGVybXMgJiYgb3B0aW9uLmxhYmVsKSB8fCBvcHRpb24uaXJpO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHVuaXF1ZVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHVuaXF1ZVZhbHVlcyA9IFt1bmlxdWVWYWx1ZXNbMF1dO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdW5pcXVlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLmlyaSAmJiBvcHRpb24uaXJpLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgb2xzQXBpLmdldFNlbGVjdERhdGEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3F1ZXJ5OiBvcHRpb24uaXJpfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcixcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb3BlcnRpZXMubWFwKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pcmkgPT09IHNlbGVjdGlvbi5nZXRJcmkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbGVjdGVkVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24uZ2V0TGFiZWwoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLmdldFNob3J0Rm9ybSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5nZXREZXNjcmlwdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3VybDogc2VsZWN0aW9uLmdldEFwaVNvdXJjZUVuZHBvaW50KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgcHJlc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkgcHJlc2VsZWN0ZWRWYWx1ZXMgPSBbcHJlc2VsZWN0ZWRWYWx1ZXNbMF1dO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbiAmJiBvcHRpb24ubGFiZWwgJiYgYWxsb3dDdXN0b21UZXJtcykge1xuICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgIGtleTogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICAgICAgICAgICAgc291cmNlX3VybDogXCJcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgbmV3IG9wdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdUZXJtc1xuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJvblNlYXJjaENoYW5nZVwiLFxuICAgICAgc2VhcmNoVmFsdWVcbiAgICBdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICB7IHF1ZXJ5OiBzZWFyY2hWYWx1ZSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyLFxuICAgICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHNldE9wdGlvbnMocmVzcG9uc2UucHJvcGVydGllcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiAoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGxhYmVsOiBoYXNTaG9ydFNlbGVjdGVkTGFiZWwgPyBzZWxlY3Rpb24uZ2V0TGFiZWwoKSA6IGdlbmVyYXRlRGlzcGxheUxhYmVsKHNlbGVjdGlvbiksXG4gICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICBrZXk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgdG8gcGFzcyB0byBjbGllbnRzXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgIGlyaTogc2VsZWN0aW9uLmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGlvbi5nZXRUeXBlKCksXG4gICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uZ2V0U2hvcnRGb3JtKCksXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmdldERlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6IHNlbGVjdGlvbi5nZXRBcGlTb3VyY2VOYW1lKCksXG4gICAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlRW5kcG9pbnQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZXQgb2Ygc2VsZWN0ZWQgb3B0aW9ucyBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIC8vIHJldHVybiB0aGUgdmFsdWUgb2JqZWN0IHdpdGggdGhlIHJhdyB2YWx1ZXMgZnJvbSBPTFMgdG8gYSBjbGllbnRcbiAgICAgICAgaWYgKGFsbG93Q3VzdG9tVGVybXMgJiYgeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICBsYWJlbDogeC5sYWJlbCxcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHgudmFsdWUuc291cmNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICAgICAgICBzb3VyY2U6IFwiXCJcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IHgudmFsdWUuaXJpLFxuICAgICAgICAgICAgbGFiZWw6IHgudmFsdWUubGFiZWwsXG4gICAgICAgICAgICBvbnRvbG9neV9uYW1lOiB4LnZhbHVlLm9udG9sb2d5X25hbWUsXG4gICAgICAgICAgICB0eXBlOiB4LnZhbHVlLnR5cGUsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogeC52YWx1ZS5zb3VyY2VcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICBmdW5jdGlvbiBnZW5lcmF0ZURpc3BsYXlMYWJlbChpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbS5sYWJlbCArXG4gICAgICBcIiAoXCIgK1xuICAgICAgaXRlbS5vbnRvbG9neV9uYW1lLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgXCIgXCIgK1xuICAgICAgaXRlbS5zaG9ydF9mb3JtICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSGFuZGxlcihvcHRpb25zOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DcmVhdGVPcHRpb25IYW5kbGVyKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgc291cmNlOiBcIlwiXG4gICAgICB9XG4gICAgfTtcblxuICAgIHNldE9wdGlvbnMoWy4uLm9wdGlvbnMsIG5ld09wdGlvbl0pO1xuICAgIHNldFNlbGVjdGVkT3B0aW9ucyhzaW5nbGVTZWxlY3Rpb24gPyBbbmV3T3B0aW9uXSA6IFsuLi5zZWxlY3RlZE9wdGlvbnMsIG5ld09wdGlvbl0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQ29tYm9Cb3hcbiAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgIHsuLi5yZXN0fSAvLyBpdGVtcyBhYm92ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIGNsaWVudFxuICAgICAgYXN5bmM9e3RydWV9XG4gICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ1Rlcm1zIHx8IGlzTG9hZGluZ09uTW91bnR9XG4gICAgICBzaW5nbGVTZWxlY3Rpb249e3NpbmdsZVNlbGVjdGlvbiA/IHsgYXNQbGFpblRleHQ6IHRydWUgfSA6IGZhbHNlfVxuICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICBwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogXCJTZWFyY2ggZm9yIGEgQ29uY2VwdFwiXG4gICAgICB9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgc2VsZWN0ZWRPcHRpb25zPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICBvblNlYXJjaENoYW5nZT17c2V0U2VhcmNoVmFsdWV9XG4gICAgICBvbkNoYW5nZT17b25DaGFuZ2VIYW5kbGVyfVxuICAgICAgcmVuZGVyT3B0aW9uPXtyZW5kZXJPcHRpb259XG4gICAgICBvbkNyZWF0ZU9wdGlvbj17YWxsb3dDdXN0b21UZXJtcyA/IG9uQ3JlYXRlT3B0aW9uSGFuZGxlciA6IHVuZGVmaW5lZH1cbiAgICAgIHJvd0hlaWdodD17c2luZ2xlU3VnZ2VzdGlvblJvdyA/IDMwIDogNTB9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXV0b2NvbXBsZXRlKHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxBdXRvY29tcGxldGVXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9e3Byb3BzLnNlbGVjdGlvbkNoYW5nZWRFdmVudH1cbiAgICAgICAgICBwcmVzZWxlY3RlZD17cHJvcHMucHJlc2VsZWN0ZWR9XG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXtwcm9wcy5zaW5nbGVTZWxlY3Rpb259XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIGhhc1Nob3J0U2VsZWN0ZWRMYWJlbD17cHJvcHMuaGFzU2hvcnRTZWxlY3RlZExhYmVsfVxuICAgICAgICAgIGFsbG93Q3VzdG9tVGVybXM9e3Byb3BzLmFsbG93Q3VzdG9tVGVybXN9XG4gICAgICAgICAgdHM0bmZkaUdhdGV3YXk9e3Byb3BzLnRzNG5mZGlHYXRld2F5fVxuICAgICAgICAgIHNpbmdsZVN1Z2dlc3Rpb25Sb3c9e3Byb3BzLnNpbmdsZVN1Z2dlc3Rpb25Sb3d9XG4gICAgICAgICAgc2hvd0FwaVNvdXJjZT17cHJvcHMuc2hvd0FwaVNvdXJjZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQsIGNyZWF0ZUF1dG9jb21wbGV0ZSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKVxuKTtcblxuY29uc3QgYXNhcCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCcgP1xuICBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpIDogKCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljayB8fCBfc2V0SW1tZWRpYXRlKTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA/IHJlc3BvbnNlLnN0YXR1cyA6IG51bGw7XG4gIH1cbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsICJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCAiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luXG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwgIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfVxuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpXG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwgImltcG9ydCBzcGVlZG9tZXRlciBmcm9tIFwiLi9zcGVlZG9tZXRlci5qc1wiO1xuaW1wb3J0IHRocm90dGxlIGZyb20gXCIuL3Rocm90dGxlLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufVxuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn1cblxuZXhwb3J0IGNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSBwbGF0Zm9ybS5uYXZpZ2F0b3IgJiYgLyhtc2llfHRyaWRlbnQpL2kudGVzdChwbGF0Zm9ybS5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gXCIuL2lzVVJMU2FtZU9yaWdpbi5qc1wiO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSBcIi4vY29va2llcy5qc1wiO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSBcIi4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qc1wiO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gXCIuLi9jb3JlL21lcmdlQ29uZmlnLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gXCIuL2J1aWxkVVJMLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyfSBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gXCIuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCBhYm9ydGVkO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAoY2FuY2VsKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSBjYW5jZWwgaW5zdGFuY2VvZiBFcnJvciA/IGNhbmNlbCA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgIH1cbiAgfVxuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICB9LCB0aW1lb3V0KVxuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGlmIChzaWduYWxzKSB7XG4gICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgIHNpZ25hbCAmJlxuICAgICAgICAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSA6IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSk7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iLCAiXG5leHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IGJ5dGVzICs9IGxlbjtcbiAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tIFwiLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qc1wiO1xuaW1wb3J0IHt0cmFja1N0cmVhbX0gZnJvbSBcIi4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyLCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLCBhc3luY0RlY29yYXRvcn0gZnJvbSBcIi4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanNcIjtcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcbmltcG9ydCBzZXR0bGUgZnJvbSBcIi4uL2NvcmUvc2V0dGxlLmpzXCI7XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscy5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KVxuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IG5ldyBSZXF1ZXN0KGJvZHkpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW5dLCB0aW1lb3V0KSA6IFtdO1xuXG4gIGxldCBmaW5pc2hlZCwgcmVxdWVzdDtcblxuICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAhZmluaXNoZWQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gsIGVuY29kZVRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlOyBcbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID8gd2l0aENyZWRlbnRpYWxzIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IGlzU3RyZWFtUmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuICAgICAgICB9LCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcblxuICAgIHN0b3BUaW1lb3V0ICYmIHN0b3BUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cblxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNy41XCI7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwgImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCAiaW1wb3J0IGF4aW9zIGZyb20gJy4vbGliL2F4aW9zLmpzJztcblxuLy8gVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gdW53cmFwIEF4aW9zIGRlZmF1bHQgZXhwb3J0IGFzIG5hbWVkLlxuLy8gS2VlcCB0b3AtbGV2ZWwgZXhwb3J0IHNhbWUgd2l0aCBzdGF0aWMgcHJvcGVydGllc1xuLy8gc28gdGhhdCBpdCBjYW4ga2VlcCBzYW1lIHdpdGggZXMgbW9kdWxlIG9yIGNqc1xuY29uc3Qge1xuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59ID0gYXhpb3M7XG5cbmV4cG9ydCB7XG4gIGF4aW9zIGFzIGRlZmF1bHQsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn1cbiIsICJpbXBvcnQgeyBUaGluZywgRW50aXR5LCBDbGFzcywgUHJvcGVydHksIEluZGl2aWR1YWwsIE9udG9sb2d5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5leHBvcnQgY29uc3QgY2xhc3NUeXBlTmFtZXMgPSBbXCJjbGFzc1wiICwgXCJ0ZXJtXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1wicHJvcGVydHlcIiwgXCJhbm5vdGF0aW9uUHJvcGVydHlcIiwgXCJkYXRhUHJvcGVydHlcIiwgXCJvYmplY3RQcm9wZXJ0eVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFsuLi5jbGFzc1R5cGVOYW1lcywgLi4uaW5kaXZpZHVhbFR5cGVOYW1lcywgLi4ucHJvcGVydHlUeXBlTmFtZXNdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHRoaW5nVHlwZU5hbWVzID0gWy4uLmVudGl0eVR5cGVOYW1lcywgLi4ub250b2xvZ3lUeXBlTmFtZXNdIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIE9udG9sb2d5VHlwZU5hbWUge1xuICAgIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgRW50aXR5VHlwZU5hbWUge1xuICAgIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIENsYXNzIHtcbiAgICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgUHJvcGVydHkge1xuICAgIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEluZGl2aWR1YWwge1xuICAgIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBFbnRpdHkge1xuICAgIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgT250b2xvZ3kge1xuICAgIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn0iLCAiaW1wb3J0IHtFdWlMaW5rQ29sb3J9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5pbXBvcnQge1xuICAgIGlzQ2xhc3NUeXBlTmFtZSxcbiAgICBpc0luZGl2aWR1YWxUeXBlTmFtZSxcbiAgICBpc09udG9sb2d5VHlwZU5hbWUsXG4gICAgaXNQcm9wZXJ0eVR5cGVOYW1lLFxuICAgIGlzVGhpbmdUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZVxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7U3RvcnlDb250ZXh0fSBmcm9tIFwiQHN0b3J5Ym9vay9yZWFjdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gW29ial07XG4gICAgfVxuICAgIHJldHVybiBbXSBhcyBUW107XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX0xFR0FDWSA9IHRydWU7XG4vKipcbiAqIFJldHVybnMgYHVzZUxlZ2FjeWAgaWYgdW5kZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0IHZhbHVlIGZvciB1c2VMZWdhY3lcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3k/OiBib29sZWFuKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodXNlTGVnYWN5ICE9PSB1bmRlZmluZWQpID8gdXNlTGVnYWN5IDogREVGQVVMVF9VU0VfTEVHQUNZO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIHR5cGV9LiBJZiB7QGxpbmsgdHlwZX0gZXF1YWxzICd0ZXJtJywgJ2NsYXNzJyBnZXRzIHJldHVybmVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJ0ZXJtXCIgPyBcImNsYXNzXCIgOiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZUNhbWVsQ2FzZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikuc3BsaXQoLyg/PVtBLVpdW2Etel0pLykuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZVVuZGVyc2NvcmUoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnJlcGxhY2UoXCJfXCIsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyaW1tZWQgYXBpIChvbWl0cyAvYXBpL3YyIGF0IHRoZSBlbmQpXG4gKiBAcGFyYW0gYXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9udEVuZEFwaShhcGk6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBhcGkucmVwbGFjZSgvXFwvYXBpXFwvPyQvLCBcIi9cIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIm9udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfS97aXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gaXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCBpcmk/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYG9udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke3BsdXJhbGl6ZVR5cGUoYXNBcnJheShlbnRpdHlUeXBlQXJyYXkpLCB1c2VMZWdhY3kpfWAgKyAoaXJpICE9IHVuZGVmaW5lZCA/IGAvJHtlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkpfWAgOiBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBcInRlcm1zXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHwgXCJvbnRvbG9naWVzXCIge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBpZihpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgICAgICAgIGlmKGlzQ2xhc3NUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgICAgICAgICBpZihpc1Byb3BlcnR5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gcGx1cmFsaXplIGluIHByb3ZpZGVkIHR5cGVBcnJheS5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5ndWxhcml6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFRoaW5nVHlwZU5hbWUge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXJtc1wiOiBjYXNlIFwiY2xhc3Nlc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybVwiIDogXCJjbGFzc1wiO1xuICAgICAgICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjogY2FzZSBcImRhdGFQcm9wZXJ0aWVzXCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0aWVzXCI6IGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydGllc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbHNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gICAgICAgICAgICBjYXNlIFwib250b2xvZ2llc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9udG9sb2d5XCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gc2luZ3VsYXJpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gICAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpTGlua0NvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJwcmltYXJ5XCIsIFwic3ViZHVlZFwiLCBcInN1Y2Nlc3NcIiwgXCJhY2NlbnRcIiwgXCJkYW5nZXJcIiwgXCJ3YXJuaW5nXCIsIFwidGV4dFwiLCBcImdob3N0XCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3I6IGFueSwgbWVzc2FnZVBsYWNlaG9sZGVyID0gXCJpbmZvcm1hdGlvblwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcl9tc2cgOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmKGVycm9yX21zZyA9PT0gKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICAgIH1cbiAgICBlbHNlIHJldHVybiBgTm8gJHttZXNzYWdlUGxhY2Vob2xkZXJ9IGF2YWlsYWJsZWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHR5cGVzOiBzdHJpbmdbXSkge1xuICAgIGxldCByZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW0gOiBzdHJpbmcpID0+IGlzVGhpbmdUeXBlTmFtZShlbGVtKSk7IC8vIGZpbHRlciBub3QgbWF0Y2hpbmcgc3RyaW5nc1xuICAgIHJlcyA9IHJlcy5tYXAoaXRlbSA9PiBpdGVtID09PSBcImFubm90YXRpb25Qcm9wZXJ0eVwiIHx8IGl0ZW0gPT09IFwib2JqZWN0UHJvcGVydHlcIiB8fCBpdGVtID09PSBcImRhdGFQcm9wZXJ0eVwiID8gXCJwcm9wZXJ0eVwiIDogaXRlbSk7XG4gICAgcmVzID0gWy4uLm5ldyBTZXQ8c3RyaW5nPihyZXMpXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICAgIGlmKHJlcy5sZW5ndGggPT09IDEpIHJldHVybiByZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgICBlbHNlIGlmKHJlcy5sZW5ndGggPT09IDApIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTm8gc3VpdGFibGUgdHlwZSBmb3VuZCBpbiBhcnJheS5cIik7XG4gICAgZWxzZSB0aHJvdyBFcnJvcihgRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTXVsdGlwbGUgdHlwZXMgZm91bmQgaW4gYXJyYXksIG5vIGRlZmluaXRlIGNob2ljZSBwb3NzaWJsZSAtICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcbn1cblxuLyogVE9ETzogcGx1cmFsaXplVHlwZSBub3QgYXZhaWxhYmxlIGluIGh0bWwgdmVyc2lvbiwgcmVwbGFjZSB3aXRoIGxvY2FsIGZ1bmN0aW9uYWxpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW51YWxseUVtYmVkT25OYXZpZ2F0ZShjb2RlOiBzdHJpbmcsIHN0b3J5Q29udGV4dDogU3RvcnlDb250ZXh0KSB7XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0VudGl0eVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXsoKSA9PiB7fX1cIixcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0VudGl0eSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9FbnRpdHk9eygpID0+IHt9fVwiLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkICsgJy8nICsgbmV3IE1hcChbW1xcXCJ0ZXJtXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiY2xhc3NcXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJpbmRpdmlkdWFsXFxcIixcXFwiaW5kaXZpZHVhbHNcXFwiXSxbXFxcInByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiZGF0YVByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwib2JqZWN0UHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJhbm5vdGF0aW9uUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb09udG9sb2d5XCJdKSB7XG4gICAgICAgIGNhc2UgXCJDb25zb2xlIG1lc3NhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17KCkgPT4ge319XCIsXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb09udG9sb2d5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgYCBmb3Igb250b2xvZ3lJZCBcXFwiJHtvbnRvbG9neUlkfVxcXCIuYCk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17KCkgPT4ge319XCIsXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBpZihlbnRpdHkgJiYgZW50aXR5LmlyaSAmJiBlbnRpdHlUeXBlKSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCArICcvJyArIG5ldyBNYXAoW1tcXFwidGVybVxcXCIsXFxcImNsYXNzZXNcXFwiXSxbXFxcImNsYXNzXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiaW5kaXZpZHVhbFxcXCIsXFxcImluZGl2aWR1YWxzXFxcIl0sW1xcXCJwcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcImRhdGFQcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcIm9iamVjdFByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiYW5ub3RhdGlvblByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdXSkuZ2V0KGVudGl0eVR5cGUpICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHkuaXJpKSksIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvJyArIG9udG9sb2d5SWQsIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHN3aXRjaCAoc3RvcnlDb250ZXh0LmFyZ3NbXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGVcIl0pIHtcbiAgICAgICAgY2FzZSBcIkNvbnNvbGUgbWVzc2FnZVwiOlxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZT17KCkgPT4ge319XCIsXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9e1xcbiAgICAoZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSgpJyArIChlbnRpdHlUeXBlID8gYCBmb3IgJHtlbnRpdHlUeXBlIHx8IFxcXCJlbnRpdHlcXFwifWAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gYCBcXFwiJHtlbnRpdHkubGFiZWx9XFxcImAgOiAnJykgKyAoKGVudGl0eSAmJiBlbnRpdHkuaXJpKSA/IGAgKGlyaT1cXFwiJHtlbnRpdHkuaXJpfVxcXCIpYCA6ICcnKSArICcuJyk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9eygpID0+IHt9fVwiLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L3NlYXJjaD9xPScgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gZW50aXR5LmxhYmVsIDogXFxcIlxcXCIpICsgJyZleGFjdE1hdGNoPXRydWUmbGFuZz1lbicsIFxcXCJfdG9wXFxcIik7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjb2RlO1xufSIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBjb25zdCB2ID0gYXhpb21ba107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5pbXBvcnQge1RoaW5nVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50PyBcImlkXCIgb25seSBleGlzdHMgaW4gc3RhbmRhcmQ/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZTtcblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInRlcm1zXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZVR5cGUodGhpcy5nZXRUeXBlKCkpO1xuICB9XG5cbiAgLy8gbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCByZXNwb25zZXNcbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIC8vIGhhcyBhZGRpdGlvbmFsIGtleSBcInNob3J0aGFuZFwiPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXBwbGljYWJsZSAvIG5lY2Vzc2FyeSBpbiBzdGFuZGFyZCBhcyB0aGVyZSBhcmUgbm8gbGlua2VkIGVudGl0aWVzXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdO1xuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdICYmIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiZGVwaWN0aW9uXCJdWzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzVGhpbmd9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQge2FzQXJyYXksIGRlVW5kZXJzY29yZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNFbnRpdHkgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXVxuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0pKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlVW5kZXJzY29yZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpXG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldFR5cGUoKTogRW50aXR5VHlwZU5hbWU7XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0NsYXNzVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcblxuICBnZXRUeXBlKCk6IENsYXNzVHlwZU5hbWUge1xuICAgIHJldHVybiBcImNsYXNzXCJcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJwYXJlbnRzXCJcbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImluX3N1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UHJvcGVydHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzUHJvcGVydHkgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG5cbiAgZ2V0VHlwZSgpOiBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0luZGl2aWR1YWxUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzSW5kaXZpZHVhbCBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuXG4gIGdldFR5cGUoKTogSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVDYW1lbENhc2V9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ3lcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaWRcIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZih0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pIHtcbiAgICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSlcbiAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiXG4gICAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2d5fSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSwgMCk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBpc1RoaW5nVHlwZU5hbWUsIFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBpc1RoaW5nVHlwZU5hbWUodHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjogY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOiBjYXNlIFwiZGF0YVByb3BlcnR5XCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0RW50aXR5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgRW50aXR5e1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdXG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaGFzRGJYcmVmXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIikgY29udGludWU7XG5cbiAgICAgIC8vIE9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkYXRhIHByb3BlcnRpZXMgYXJlIG5vdCBhbm5vdGF0aW9uIHByb3BlcnRpZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBpbmZvcm1hbCB2b2NhYnVsYXJpZXMuXG4gICAgICBpZiAoIXRoaXMuaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZSkpIHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpXG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiIHx8XG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpZFwiXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQVBzXCIpO1xuICAgIC8vIGNvbnNvbGUuZGlyKEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7Q2xhc3N9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNENsYXNzIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pO1xuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0UHJvcGVydHkgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHtJbmRpdmlkdWFsfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRJbmRpdmlkdWFsIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWx7XG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG5cbn1cbiIsICJpbXBvcnQge09udG9sb2d5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ3kgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cblxuICBnZXRDcmVhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jcmVhdG9yXCJdKTtcbiAgfVxuXG4gIGdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlRmlsZVRpbWVzdGFtcFwiXTtcbiAgfVxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkVudGl0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mQ2xhc3Nlc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiZGVwaWN0ZWRfYnlcIl0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ3VhZ2VcIl0pO1xuICB9XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbXBvcnRzRnJvbVwiXSk7XG4gIH1cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtPTFMzT250b2xvZ3ksIE9MUzNDbGFzcywgT0xTM1Byb3BlcnR5LCBPTFMzSW5kaXZpZHVhbH0gZnJvbSBcIi4vb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtPTFM0T250b2xvZ3ksIE9MUzRDbGFzcywgT0xTNFByb3BlcnR5LCBPTFM0SW5kaXZpZHVhbH0gZnJvbSBcIi4vb2xzNC1tb2RlbFwiO1xuaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtUaGluZ1R5cGVOYW1lfSBmcm9tIFwiLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHthc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5fSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlOiBhbnkpIHtcbiAgICBsZXQgdXNlTGVnYWN5IDogYm9vbGVhbjtcbiAgICBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSB0cnVlO1xuICAgIGVsc2UgaWYocmVzcG9uc2VbXCJlbGVtZW50c1wiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZDbGFzc2VzXCJdICE9PSB1bmRlZmluZWQpIHVzZUxlZ2FjeSA9IGZhbHNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoYFJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG5cbiAgICBsZXQgZW50aXR5VHlwZSA6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInRlcm1zXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInRlcm1cIjtcbiAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBlbHNlIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihyZXNwb25zZVtcImVsZW1lbnRzXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xuXG4gICAgICAgICAgICBlbnRpdHlUeXBlID0gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdW1widHlwZVwiXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZihlbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZC5cIik7XG5cbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2UsIGVudGl0eVR5cGUsIHVzZUxlZ2FjeSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KHJlc3BvbnNlOiBhbnksIGVudGl0eVR5cGU6IHN0cmluZywgdXNlTGVnYWN5OiBib29sZWFuKTogVGhpbmcge1xuICAgIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKSA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgICAgIGNhc2UgXCJ0ZXJtXCIgOlxuICAgICAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgICAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0NsYXNzKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0Q2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzUHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNFByb3BlcnR5KGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpKTtcblxuICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzSW5kaXZpZHVhbChnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcImluZGl2aWR1YWxzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNEluZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgJ1wiLiBNdXN0IGJlIG9uZSBvZiB7XCJ0ZXJtXCIsIFwiY2xhc3NcIiwgXCJvbnRvbG9neVwiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBKU09OIG9mIHRoZSBlbnRpdHkgaW4gaXRzIGRlZmluaW5nIG9udG9sb2d5LCBvciwgaWYgbm90IGF2YWlsYWJsZSwganVzdCB0aGUgZmlyc3QgSlNPTiBpbiB0aGUgYXJyYXkuXG4gKiBJZiBvbnRvbG9neUlkIHdhcyBwcm92aWRlZCBpbiB0aGUgcmVzcG9uc2UgcmVxdWVzdCwgdGhlIGFycmF5IHNob3VsZCBvbmx5IGNvbnRhaW4gb25lIGVsZW1lbnQsIHRodXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgYXMgZXhwZWN0ZWQgYXMgd2VsbFxuICogQHBhcmFtIGVudGl0eUFycmF5UmVzcG9uc2UgdGhlIHN1Yi1yZXNwb25zZSBvZiB0aGUgaW5pdGlhbCBxdWVyeSByZXNwb25zZSBjb250YWluaW5nIGp1c3QgdGhlIGVudGl0eSBhcnJheVxuICogQHBhcmFtIHVzZUxlZ2FjeSBhcGkgdmVyc2lvbiAobmVlZGVkIGJlY2F1c2Uga2V5IGdpdmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBvbnRvbG9neSBoYXMgZGlmZmVyZW50IG5hbWVzIGluIGJvdGggdmVyc2lvbnMpXG4gKiBAcGFyYW0gb250b2xvZ3lJZCBpZiBzcGVjaWZpZWQsIHJldHVybnMgdGhlIGVudGl0eSBpbiB0aGlzIG9udG9sb2d5IGlmIGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGVudGl0eUFycmF5UmVzcG9uc2U6IGFueVtdLCB1c2VMZWdhY3k6IGJvb2xlYW4sIG9udG9sb2d5SWQ/OiBzdHJpbmcpIHtcbiAgICBpZihvbnRvbG9neUlkKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUluT250b2xvZ3kgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiAodXNlTGVnYWN5ID8gZW50aXR5W1wib250b2xvZ3lfbmFtZVwiXSA6IGVudGl0eVtcIm9udG9sb2d5SWRcIl0pID09IG9udG9sb2d5SWQpO1xuICAgICAgICBpZihlbnRpdHlJbk9udG9sb2d5Lmxlbmd0aCA+IDApIHJldHVybiBlbnRpdHlJbk9udG9sb2d5WzBdO1xuICAgICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgb250b2xvZ3lJZCAke29udG9sb2d5SWR9IGZvciBnaXZlbiBlbnRpdHlBcnJheVJlc3BvbnNlLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaW5nT250b2xvZ3lBcnIgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiB1c2VMZWdhY3kgPyBlbnRpdHlbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA6IGVudGl0eVtcImlzRGVmaW5pbmdPbnRvbG9neVwiXSk7XG4gICAgaWYoZGVmaW5pbmdPbnRvbG9neUFyci5sZW5ndGggPiAwKSByZXR1cm4gZGVmaW5pbmdPbnRvbG9neUFyclswXTtcbiAgICBlbHNlIGlmKGVudGl0eUFycmF5UmVzcG9uc2UubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUFycmF5UmVzcG9uc2VbMF07XG4gICAgZWxzZSB0aHJvdyBFcnJvcihcIkVtcHR5IHJlc3BvbnNlLlwiKTtcbn0iLCAiaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge0hpZXJhcmNoeUJ1aWxkZXJ9IGZyb20gXCIuLi8uLi9hcGkvSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhRm9ySGllcmFyY2h5fSBmcm9tIFwiLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFBhcmVudENoaWxkUmVsYXRpb24gPSB7XG4gICAgY2hpbGRJcmk6IHN0cmluZyxcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlIHtcbiAgICBlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5O1xuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZztcbiAgICBsb2FkZWRDaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICBleHBhbmRlZDogYm9vbGVhbjtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGVudGl0eURhdGFcbiAgICAgKiBAcGFyYW0gY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZW50aXR5RGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeSwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW50aXR5RGF0YSA9IGVudGl0eURhdGE7XG4gICAgICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ7XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIHRoaXMubG9hZGVkQ2hpbGRyZW4ucHVzaChjaGlsZClcbiAgICB9XG59XG5cbmNvbnN0IERFRkFVTFRfSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUzogYm9vbGVhbiA9IGZhbHNlIGFzIGNvbnN0O1xuY29uc3QgREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTogYm9vbGVhbiA9IHRydWUgYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBIaWVyYXJjaHkge1xuICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+O1xuICAgIGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT47XG4gICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPjtcbiAgICByb290czogVHJlZU5vZGVbXTsgLy8gc3RvcmVzIHRoZSB0cmVlIGhpZXJhcmNoeVxuICAgIHByb3RlY3RlZCBhcGk6IEhpZXJhcmNoeUJ1aWxkZXI7XG4gICAgb250b2xvZ3lJZDogc3RyaW5nO1xuXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGJvb2xlYW4gPSBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM7XG4gICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lO1xuICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGJvb2xlYW4gPSBERUZBVUxUX0tFRVBfRVhQQU5TSU9OX1NUQVRFO1xuICAgIHByb3RlY3RlZCB1c2VMZWdhY3k/OiBib29sZWFuO1xuXG4gICAgbWFpbkVudGl0eUlyaT86IHN0cmluZzsgLy8gdG8gaGlnaGxpZ2h0IGl0IGluIHRoZSBoaWVyYXJjaHlcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiB7XG4gICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+LFxuICAgICAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+LFxuICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+LFxuICAgICAgICByb290czogVHJlZU5vZGVbXSxcbiAgICAgICAgYXBpOiBIaWVyYXJjaHlCdWlsZGVyLFxuICAgICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPzogYm9vbGVhbixcbiAgICAgICAgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lLFxuICAgICAgICBtYWluRW50aXR5SXJpPzogc3RyaW5nLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPzogYm9vbGVhbixcbiAgICAgICAgdXNlTGVnYWN5PzogYm9vbGVhbixcbiAgICB9KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgICAgICAgZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LFxuICAgICAgICAgICAgcm9vdHMsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICB1c2VMZWdhY3ksXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zID0gcGFyZW50Q2hpbGRSZWxhdGlvbnM7XG4gICAgICAgIHRoaXMuZW50aXRpZXNEYXRhID0gZW50aXRpZXNEYXRhO1xuICAgICAgICB0aGlzLmFsbENoaWxkcmVuUHJlc2VudCA9IGFsbENoaWxkcmVuUHJlc2VudDtcbiAgICAgICAgdGhpcy5yb290cyA9IHJvb3RzO1xuICAgICAgICBpZihpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyAhPSB1bmRlZmluZWQpIHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcztcbiAgICAgICAgaWYoa2VlcEV4cGFuc2lvblN0YXRlcyAhPSB1bmRlZmluZWQpIHRoaXMua2VlcEV4cGFuc2lvblN0YXRlcyA9IGtlZXBFeHBhbnNpb25TdGF0ZXM7XG4gICAgICAgIHRoaXMuYXBpID0gYXBpO1xuICAgICAgICB0aGlzLm1haW5FbnRpdHlJcmkgPSBtYWluRW50aXR5SXJpO1xuICAgICAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xuICAgICAgICB0aGlzLm9udG9sb2d5SWQgPSBvbnRvbG9neUlkO1xuICAgICAgICBpZih1c2VMZWdhY3kgIT0gdW5kZWZpbmVkKSB0aGlzLnVzZUxlZ2FjeSA9IHVzZUxlZ2FjeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdGhlIGVudHJpZXMgb2YgYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKWAgaW50byBgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuYC4gSGVyZSxcbiAgICAgKiBvbmx5IG5vdCBhbHJlYWR5IHByZXNlbnQgY2hpbGRyZW4gYXJlIGFkZGVkIHRvIGtlZXAgdGhlIGV4cGFuc2lvbiBzdGF0ZSBvZiB0aGUgYWxyZWFkeSBsb2FkZWQgY2hpbGRyZW4uXG4gICAgICogYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAgaXMgc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IGRpc3BsYXllZCBsYWJlbHMgYWZ0ZXJ3YXJkLlxuICAgICAqXG4gICAgICogQVNTVU1QVElPTlM6XG4gICAgICogMS4gYHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZClgIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVRvRXhwYW5kIHRoZSBub2RlIGluc2lkZSB0aGUgaGllcmFyY2h5IChgdGhpcy5yb290c2ApIHRvIG1lcmdlIHRoZSBjaGlsZHJlbiBpbnRvXG4gICAgICovXG4gICAgcHJpdmF0ZSBtZXJnZUNoaWxkcmVuSW50b0xvYWRlZENoaWxkcmVuKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICBpZihjaGlsZHJlbiA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKGBwYXJlbnRDaGlsZFJlbGF0aW9ucyBoYXMgbm8gZW50cnkgZm9yIGtleSBcIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGFsdGhvdWdoIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5gKTtcblxuICAgICAgICBsZXQgaUxvYWRlZENoaWxkcmVuID0gMDtcbiAgICAgICAgY29uc3QgbnVtTG9hZGVkQ2hpbGRyZW4gPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoOyAvLyBpbml0aWFsIGxlbmd0aFxuICAgICAgICBsZXQgaUNoaWxkcmVuID0gMDtcblxuICAgICAgICB3aGlsZShpQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGggJiYgaUxvYWRlZENoaWxkcmVuIDwgbnVtTG9hZGVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmKG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltpTG9hZGVkQ2hpbGRyZW5dLmVudGl0eURhdGEuaXJpID09IGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpIHtcbiAgICAgICAgICAgICAgICBpTG9hZGVkQ2hpbGRyZW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmFkZENoaWxkKG5ldyBUcmVlTm9kZSh0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLCBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaUNoaWxkcmVuKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmFkZENoaWxkKG5ldyBUcmVlTm9kZSh0aGlzLmVudGl0aWVzRGF0YS5nZXQoY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZElyaSkhLCBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkUmVsYXRpb25Ub1BhcmVudCkpO1xuICAgICAgICAgICAgaUNoaWxkcmVuKys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb3J0IGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuIGluIGNvcnJlY3RseVxuICAgICAgICBmb3IobGV0IGlMb2FkZWRDaGlsZHJlbiA9IG51bUxvYWRlZENoaWxkcmVuIC0gMTsgaUxvYWRlZENoaWxkcmVuID49IDA7IGlMb2FkZWRDaGlsZHJlbi0tKSB7XG4gICAgICAgICAgICBmb3IobGV0IGN1cnJJZHggPSBpTG9hZGVkQ2hpbGRyZW4gKyAxOyBjdXJySWR4IDwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDsgY3VycklkeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3Vyck5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF07XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgaWYoKGN1cnJOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgY3Vyck5vZGUuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUocHJldk5vZGUuZW50aXR5RGF0YS5sYWJlbCB8fCBwcmV2Tm9kZS5lbnRpdHlEYXRhLmlyaSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbltjdXJySWR4XSA9IHByZXZOb2RlO1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeCAtIDFdID0gY3Vyck5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU5vZGUobm9kZVRvQ2xvc2U6IFRyZWVOb2RlKSB7XG4gICAgICAgIGlmKCF0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMpIHtcbiAgICAgICAgICAgIG5vZGVUb0Nsb3NlLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGV4cGFuc2lvbiBvZiBgbm9kZVRvRXhwYW5kYCBpcyBhdmFpbGFibGUgKGkuZS4gdGhlcmUgYXJlIGFscmVhZHkgY2hpbGRyZW4gbG9hZGVkKSBhbmQgZmV0Y2hlcyBpdCBpZiBub3QuXG4gICAgICogQHJldHVybiBib29sZWFuIGB0cnVlYCBpZiBpbmZvcm1hdGlvbiBoYWQgdG8gYmUgZmV0Y2hlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBhc3luYyBmZXRjaEluZm9ybWF0aW9uRm9yRXhwYW5zaW9uKG5vZGVUb0V4cGFuZDogVHJlZU5vZGUpIHtcbiAgICAgICAgaWYoIW5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmhhc0NoaWxkcmVuKSB0aHJvdyBFcnJvcihgTm9kZSBjb250YWluaW5nIGlyaT1cIiR7bm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpfVwiIGNvdWxkIG5vdCBiZSBleHBhbmRlZDogRW50aXR5IGlzIG5vdCBleHBhbmRhYmxlLmApXG5cbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50ID0gdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuaGFzKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgIGNvbnN0IG5vZGVQYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSkgfHwgW107XG4gICAgICAgIGlmKCFhbGxDaGlsZHJlblByZXNlbnQgfHwgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA8PSBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZighYWxsQ2hpbGRyZW5QcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gZHluYW1pY2FsbHkgbG9hZCBjaGlsZHJlbiBmcm9tIGFwaVxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10gPSAoYXdhaXQgdGhpcy5hcGkubG9hZEhpZXJhcmNoeUNoaWxkcmVuKHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kOiBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogdGhpcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogdGhpcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5OiB0aGlzLnVzZUxlZ2FjeSxcbiAgICAgICAgICAgICAgICB9KSkuc29ydChcbiAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IChhLmxhYmVsIHx8IGEuaXJpKS5sb2NhbGVDb21wYXJlKGIubGFiZWwgfHwgYi5pcmkpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBjaGlsZHJlbiB0byBwYXJlbnRDaGlsZFJlbGF0aW9ucyBmb3IgaXJpIG9mIG5vZGVUb0V4cGFuZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhclJlbGF0aW9uID0gY2hpbGQucGFyZW50cy5maWx0ZXIoKHBhcikgPT4gcGFyLnZhbHVlID09IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7Y2hpbGRJcmk6IGNoaWxkLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBwYXJSZWxhdGlvbi5sZW5ndGggPiAwICYmIHBhclJlbGF0aW9uWzBdLmdldE1ldGFkYXRhKCkgPyBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpW1wiY2hpbGRSZWxhdGlvblRvUGFyZW50XCJdIDogdW5kZWZpbmVkfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1lcmdlQ2hpbGRyZW5JbnRvTG9hZGVkQ2hpbGRyZW4obm9kZVRvRXhwYW5kKTtcblxuICAgICAgICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICB9XG59IiwgImltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3QgaW1wbGVtZW50cyBTZWxlY3Qge1xuICBwcm9wZXJ0aWVzOiBTZWxlY3RSZXN1bHRbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBTZWxlY3RSZXN1bHRbXSkge1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICB9XG5cbiAgZ2V0VG90YWxTZWFyY2hSZXN1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5sZW5ndGg7XG4gIH1cblxuXG4gIH0iLCAiaW1wb3J0IHsgU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU2VsZWN0UmVzdWx0XCI7XG5pbXBvcnQgeyBUaGluZ1R5cGVOYW1lIH0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFNTZWxlY3RSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG59IiwgImltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgVHM0bmZkaVNlYXJjaFJlc3VsdCBpbXBsZW1lbnRzIFNlbGVjdFJlc3VsdCB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb24uam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldExhYmVsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInR5cGVcIl07XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwidGVybXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydF9mb3JtXCJdO1xuICB9XG5cbiAgZ2V0QXBpU291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VfbmFtZVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZVwiXTtcbiAgfVxufSIsICJpbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHthc0FycmF5LCBnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4LCBnZXRVc2VMZWdhY3ksIHBsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtjcmVhdGVNb2RlbE9iamVjdH0gZnJvbSBcIi4uL21vZGVsL01vZGVsT2JqZWN0Q3JlYXRvclwiO1xuaW1wb3J0IHtPbnRvbG9neSwgT250b2xvZ2llcywgRW50aXR5LCBUaGluZywgSW5kaXZpZHVhbH0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2dpZXMsIE9MUzNPbnRvbG9neX0gZnJvbSBcIi4uL21vZGVsL29sczMtbW9kZWxcIjtcbmltcG9ydCB7XG4gIGNsYXNzVHlwZU5hbWVzLCBlbnRpdHlUeXBlTmFtZXMsIG9udG9sb2d5VHlwZU5hbWVzLCB0aGluZ1R5cGVOYW1lcyxcbiAgRW50aXR5VHlwZU5hbWUsIFRoaW5nVHlwZU5hbWUsXG4gIGlzQ2xhc3NUeXBlTmFtZSwgaXNFbnRpdHlUeXBlTmFtZSwgaXNJbmRpdmlkdWFsVHlwZU5hbWUsIGlzT250b2xvZ3lUeXBlTmFtZVxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7RW50aXR5RGF0YUZvckhpZXJhcmNoeSwgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZX0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRzNG5mZGlTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0XCI7XG5cbi8vIHVzZWQgdG8gZmlsdGVyIGVudGl0aWVzIG5vdCBiZSBzaG93biBpbiBoaWVyYXJjaHlcbmZ1bmN0aW9uIGlzVG9wKGlyaTogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICByZXR1cm4gaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RoaW5nXCIgfHwgaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RvcE9iamVjdFByb3BlcnR5XCI7XG59XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgc2l6ZT86IHN0cmluZztcbiAgcGFnZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvcnRpbmdQYXJhbXMge1xuICBzb3J0RmllbGQ6IHN0cmluZyB8IG51bWJlcjtcbiAgc29ydERpcj86IFwiYXNjXCIgfCBcImRlc2NcIjtcbn1cblxuaW50ZXJmYWNlIENvbnRlbnRQYXJhbXMge1xuICBvbnRvbG9neUlkPzogc3RyaW5nO1xuICB0ZXJtSXJpPzogc3RyaW5nO1xuICBwcm9wZXJ0eUlyaT86IHN0cmluZztcbiAgaW5kaXZpZHVhbElyaT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG5cbn1cblxuZXhwb3J0IHR5cGUgYXBpQ2FsbEZuID0gKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+O1xuXG5pbnRlcmZhY2UgU2VhcmNoUXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xuICBleGFjdE1hdGNoPzogYm9vbGVhbjtcbiAgc2hvd09ic29sZXRlVGVybXM/OiBib29sZWFuO1xuICB0eXBlcz86IHN0cmluZztcbiAgb250b2xvZ3k/OiBzdHJpbmc7XG4gIGdyb3VwQnlJcmk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3VnZ2VzdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEpzVHJlZVBhcmFtcyB7XG4gIHZpZXdNb2RlPzogc3RyaW5nO1xuICBzaWJsaW5ncz86IGJvb2xlYW47XG4gIGNoaWxkPzogc3RyaW5nO1xufVxuXG50eXBlIEpTVHJlZU5vZGUgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcGFyZW50OiBzdHJpbmdcbiAgaXJpOiBzdHJpbmdcbiAgdGV4dDogc3RyaW5nXG4gIHN0YXRlOiB7XG4gICAgb3BlbmVkOiBib29sZWFuXG4gIH1cbiAgY2hpbGRyZW46IGJvb2xlYW5cbiAgYV9hdHRyOiB7XG4gICAgaXJpOiBzdHJpbmdcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmdcbiAgICB0aXRsZTogc3RyaW5nXG4gICAgY2xhc3M6IHN0cmluZ1xuICB9XG4gIG9udG9sb2d5X25hbWU6IHN0cmluZ1xufVxuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBPbHNBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVye1xuICBwcml2YXRlIGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2U7XG5cbiAgY29uc3RydWN0b3IoYXBpOiBzdHJpbmcpIHtcbiAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogYXBpLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKSB7XG4gICAgaWYgKHNvcnRpbmdQYXJhbXMpIHtcbiAgICAgIHJldHVybiB7IC4uLnBhZ2luYXRpb25QYXJhbXMsIHNvcnQ6IGAke3NvcnRpbmdQYXJhbXMuc29ydEZpZWxkfSwke3NvcnRpbmdQYXJhbXMuc29ydERpcn1gLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKX07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhZ2luYXRpb25QYXJhbXMsIC4uLmNvbnRlbnRQYXJhbXMsIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcm93czogcGFnaW5hdGlvblBhcmFtcz8uc2l6ZSxcbiAgICB9O1xuXG4gICAgaWYgKHBhZ2luYXRpb25QYXJhbXM/LnBhZ2UpIHtcbiAgICAgIGlmIChwYWdpbmF0aW9uUGFyYW1zLnNpemUpIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKCtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiArcGFnaW5hdGlvblBhcmFtcy5zaXplKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKCtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbikge1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBleGFjdDogcXVlcnlQYXJhbXMuZXhhY3RNYXRjaCxcbiAgICAgIG9ic29sZXRlczogcXVlcnlQYXJhbXMuc2hvd09ic29sZXRlVGVybXMsXG4gICAgfTtcblxuICAgIGlmICh0czRuZmRpR2F0ZXdheSl7XG4gICAgICBwYXJhbXMucXVlcnkgPSBxdWVyeVBhcmFtcy5xdWVyeVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucSA9IHF1ZXJ5UGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmkpIHtcbiAgICAgIHBhcmFtcy5ncm91cEZpZWxkID0gcXVlcnlQYXJhbXMuZ3JvdXBCeUlyaTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMudHlwZXMpIHtcbiAgICAgIHBhcmFtcy50eXBlID0gcXVlcnlQYXJhbXMudHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLm9udG9sb2d5KSB7XG4gICAgICBwYXJhbXMub250b2xvZ3kgPSBxdWVyeVBhcmFtcy5vbnRvbG9neTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbiBvYmplY3QgZnJvbSBzdHJpbmcgb2YgcGFyYW1ldGVycyBmb3IgYXhpb3MgaW5wdXQgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXI/OiBzdHJpbmcpe1xuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHBhcmFtZXRlcikge1xuICAgICAgY29uc3QgcGFyYW1zU3BsaXR0ZWQgPSBwYXJhbWV0ZXIuc3BsaXQoXCImXCIpXG5cbiAgICAgIHBhcmFtc1NwbGl0dGVkLmZvckVhY2goKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gcGFyYW0uc3BsaXQoXCI9XCIpWzBdXG4gICAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gcGFyYW0uc3BsaXQoXCI9XCIpWzFdXG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlbGVjdChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcnM/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVycz86IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcTogcXVlcnlQYXJhbXMucXVlcnksXG4gICAgfTtcblxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgLi4udGhpcy5idWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcyksIC4uLmNvbnRlbnRQYXJhbXMsICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycykgfTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIHRoaXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQgKGVzcGVjaWFsbHkgdGhyb3dpbmcgZXJyb3IgZm9yIGVtcHR5IHJlc3BvbnNlKT9cbiAgcHJpdmF0ZSBjaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlOiBhbnkpOiBhbnkge1xuICAgIC8vIHJlc291cmNlIG5vdCBmb3VuZC9pbGxlZ2FsIGFyZ3VtZW50IGV4Y2VwdGlvbiBpbiBzZW1hbnRpY2xvb2t1cFxuICAgIGlmKHJlc3BvbnNlW1wiZXJyb3JcIl0pIHtcbiAgICAgIHRocm93IEVycm9yKHJlc3BvbnNlW1wic3RhdHVzXCJdICsgXCIgXCIgKyByZXNwb25zZVtcImVycm9yXCJdICsgXCIgLSBcIiArIHJlc3BvbnNlW1wibWVzc2FnZVwiXSArIFwiIC0gXCIgKyByZXNwb25zZVtcImV4Y2VwdGlvblwiXSArIFwiIGF0IFwiICsgcmVzcG9uc2VbXCJwYXRoXCJdKTtcbiAgICB9XG4gICAgLy8gZW1wdHkgcmVzcG9uc2UgLSBjYW4gYmUgY2F1Z2h0IGlmIHRoaXMgaXMgZXhwZWN0ZWQsIGUuZy4gZm9yIGZldGNoaW5nIGluc3RhbmNlc1xuICAgIGlmKHJlc3BvbnNlW1wicGFnZVwiXSAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0gPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiB8IHVuZGVmaW5lZCwgdXNlTGVnYWN5OiBib29sZWFuKSB7XG4gICAgY29uc3QgYXBpVmVyc2lvblByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJcIiA6IFwidjIvXCI7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChhcGlWZXJzaW9uUHJlZml4ICsgdXJsLCBjb25maWcpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLmNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2dpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgb250b2xvZ2llcy4gQ3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciB1c2VMZWdhY3kgc2luY2UgcGFyYW1ldGVycyBhcmVuJ3QgYWxsb3dlZCBpbiB0aGUgT0xTIHYyIEFQSSBvbnRvbG9naWVzIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9naWVzRGF0YShwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPE9udG9sb2dpZXM+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IG9udG9sb2dpZXNEYXRhOiBPTFMzT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgZG8ge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2dpZXMoeyBzaXplOiBwYWdlU2l6ZS50b1N0cmluZygpLCBwYWdlOiBwYWdlTnVtLnRvU3RyaW5nKCkgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBhcmFtZXRlcik7IC8vIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gNTAwIG9udG9sb2dpZXNcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3Qob250b2xvZ3lEYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBwYWdlTnVtICs9IDE7XG4gICAgfSB3aGlsZShwYWdlTnVtIDwgcmVzcG9uc2VbXCJwYWdlXCJdW1widG90YWxQYWdlc1wiXSk7XG5cbiAgICByZXR1cm4gbmV3IE9MUzNPbnRvbG9naWVzKG9udG9sb2dpZXNEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFsbCB0ZXJtcyBmcm9tIHRoZSBhcGlcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIHNvcnRpbmdQYXJhbXNcbiAgICogQHBhcmFtIGNvbnRlbnRQYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gYHVzZUxlZ2FjeWAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBgdXNlTGVnYWN5YCwgYFwidGVybXNcImAgKGB1c2VMZWdhY3kgPT0gdHJ1ZWApIG9yIGBcImNsYXNzZXNcImAgKGB1c2VMZWdhY3kgPT0gZmFsc2VgKSB3aWxsIGJlIHVzZWQgaW4gdGhlIHF1ZXJ5IHVybFxuICAgKi9cbiAgcHVibGljIGdldFRlcm1zOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgdHlwZVByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwodHlwZVByZWZpeCwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldFByb3BlcnRpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInByb3BlcnRpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldEluZGl2aWR1YWxzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJpbmRpdmlkdWFsc1wiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zKSB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T250b2xvZ3k6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQsIHBhcmFtcywgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gZW50aXR5IGZyb20gdGhlIC9lbnRpdGllcyBlbmRwb2ludCBpbiB0aGUgYXBpIGluIG9sczQuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEVudGl0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8udGVybUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCtcImVudGl0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSB0ZXJtIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gYGNvbnRlbnRQYXJhbXNgIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGBjb250ZW50UGFyYW1zYCB0byBiZSBzZXQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3kuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL1wiIDogXCJcIlxuICAgIGNvbnN0IHR5cGVQcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8udGVybUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChvbnRvbG9neVByZWZpeCArIHR5cGVQcmVmaXgsIHsgcGFyYW1zOiBwYXJhbXMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSBwcm9wZXJ0eSBmcm9tIHRoZSBhcGkgaW4gb2xzMy5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvcGVydHk6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnByb3BlcnR5SXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHF1ZXJ5UHJlZml4K1wicHJvcGVydGllc1wiLCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGluZGl2aWR1YWwgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEluZGl2aWR1YWw6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LmluZGl2aWR1YWxJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXgrXCJpbmRpdmlkdWFsc1wiLCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2ggPSBhc3luYyAocXVlcnlQYXJhbXM6IFNlYXJjaFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zOiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInNlYXJjaFwiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlYXJjaChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSwgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QgPSBhc3luYyhxdWVyeVBhcmFtczogU2VsZWN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInNlbGVjdFwiLCB7cGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VsZWN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaFRzNG5mZGlHYXRld2F5ID0gYXN5bmMocXVlcnlQYXJhbXM6IFNlbGVjdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInNlYXJjaFwiLCB7cGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHRzNG5mZGlHYXRld2F5KSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBzZWxlY3QgZGF0YS5cbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3REYXRhKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbik6IFByb21pc2U8U2VsZWN0PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBzZWxlY3REYXRhOiBPTFNTZWxlY3RSZXN1bHRbXSA9IFtdO1xuICAgIGxldCByZXN1bHROdW0gPSAwO1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVHM0bmZkaUdhdGV3YXkoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgIHRzNG5mZGlHYXRld2F5XG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQocmVzcG9uc2UubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFRzNG5mZGlTZWFyY2hSZXN1bHQoZGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VsZWN0KFxuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcGFnaW5hdGlvblBhcmFtcyxcbiAgICAgICAgY29udGVudFBhcmFtcyxcbiAgICAgICAgcGFyYW1ldGVyXG4gICAgICApO1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGRhdGEgbm90IGZvdW5kXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0RGF0YSA9IHNlbGVjdERhdGEuY29uY2F0KHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdLm1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPTFNTZWxlY3RSZXN1bHQoZGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9MU1NlbGVjdChzZWxlY3REYXRhKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgc3VnZ2VzdCA9IGFzeW5jKHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInN1Z2dlc3RcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldFRlcm1UcmVlOlxuICAgKiBUaGlzIG1ldGhvZCBhbHdheXMgcmVxdWlyZXMgYW4gb250b2xvZ3lJZCBpbiBjb250ZW50UGFyYW1zXG4gICAqIDEpIElmIG5vIHRlcm1JcmkgaXMgZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb250b2xvZ3kgcm9vdHMgd2lsbCBiZSBxdWVyaWVkXG4gICAqIDIpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGJ1dCBubyBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBoaWVyYXJjaHkgY29udGFpbmluZyB0aGF0IHRlcm0gd2lsbCBiZSBxdWVyaWVkXG4gICAqIDMpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGFuZCBhbHNvIGEgY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgc3ViaGllcmFyY2h5IG9mIHRoYXQgY2hpbGQgd2lsbCBiZSBxdWVyaWVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybVRyZWUgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgdHJlZVBhcmFtczogSnNUcmVlUGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMgKSA9PiB7XG4gICAgbGV0IGJhc2VSZXF1ZXN0ID0gXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQrXCIvdGVybXNcIlxuICAgIGlmICghY29udGVudFBhcmFtcy50ZXJtSXJpKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QrXCIvcm9vdHNcIikpLmRhdGE7IC8vMSlcbiAgICBiYXNlUmVxdWVzdCA9IGJhc2VSZXF1ZXN0K1wiL1wiK2VuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpK1wiL2pzdHJlZVwiXG4gICAgaWYgKHRyZWVQYXJhbXMuY2hpbGQpIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCtcIi9jaGlsZHJlbi9cIit0cmVlUGFyYW1zLmNoaWxkKSkuZGF0YTsgLy8zKVxuICAgIGVsc2UgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0LCB7IHBhcmFtczogdHJlZVBhcmFtcyB9KSkuZGF0YTsgLy8yKVxuICB9XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zICkgPT4ge1xuICAgIGxldCBiYXNlUmVxdWVzdCA9IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0K1wiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgYmFzZVJlcXVlc3QgPSBiYXNlUmVxdWVzdCtcIi9cIitlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKStcIi9ncmFwaFwiXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2hvbGUgZW50aXR5IHJlc3BvbnNlIGpzb24gd2l0aCBhIGNvbWZvcnRhYmxlIHdyYXBwZXIgaGFuZGxpbmcgZW50aXR5VHlwZSwgb250b2xvZ3lJZCBhbmQgdXNlTGVnYWN5XG4gICAqIEBwYXJhbSBpcmlcbiAgICogQHBhcmFtIGVudGl0eVR5cGUgcXVlcmllcyBzcGVjaWZpYyByb3V0ZXMgaWYgcHJvdmlkZWQgYW5kIGluZmVycyB0eXBlIGlmIG5vdFxuICAgKiBAcGFyYW0gb250b2xvZ3lJZCBxdWVyaWVzIG9udG9sb2d5IHJvdXRlcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIG5vdFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3kgYWZmZWN0cyBob3cgZW50aXR5VHlwZSBpcyBpbmZlcnJlZCBpZiBub3QgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlSZXNwb25zZShpcmk6IHN0cmluZywgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogUHJvbWlzZTxhbnk+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgaWYoIWlyaSkgdGhyb3cgRXJyb3IoJ05vIElSSSBwcm92aWRlZCcpO1xuXG4gICAgaWYoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhJbmZlcnJlZEVudGl0eVR5cGUoaXJpLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gRW50aXR5IG9iamVjdCAoaW1wbGVtZW50aW5nICdDbGFzcycsICdQcm9wZXJ0eScgb3IgJ0luZGl2aWR1YWwnKS5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGVcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlPYmplY3QoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFByb21pc2U8RW50aXR5PiB7XG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KGF3YWl0IHRoaXMuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpIGFzIEVudGl0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIE9udG9sb2d5IG9iamVjdC5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIG9udG9sb2d5SWQsIHBhcmFtZXRlciBhbmQgQVBJIHZlcnNpb24gKHVzZUxlZ2FjeSkuXG4gICAqXG4gICAqIEBwYXJhbSBvbnRvbG9neUlkXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQ6IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFByb21pc2U8T250b2xvZ3k+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T250b2xvZ3kodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChpcmk/OiBzdHJpbmcsIHRoaW5nVHlwZT86IFRoaW5nVHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBQcm9taXNlPFRoaW5nPiB7XG4gICAgaWYodGhpbmdUeXBlKSB7XG4gICAgICBpZihpc09udG9sb2d5VHlwZU5hbWUodGhpbmdUeXBlKSkge1xuICAgICAgICBpZighb250b2xvZ3lJZCkgdGhyb3cgbmV3IEVycm9yKGBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtvbnRvbG9neVR5cGVOYW1lcy5qb2luKCdcIiwgXCInKX1cIn0uYCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihpc0VudGl0eVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYoIWlyaSkgdGhyb3cgbmV3IEVycm9yKGBpcmkgaGFzIHRvIGJlIHByb3ZpZGVkIGlmIHRoaW5nVHlwZSBpbiB7XCIke2VudGl0eVR5cGVOYW1lcy5qb2luKCdcIiwgXCInKX1cIn0uYCk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW50aXR5T2JqZWN0KGlyaSwgdGhpbmdUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdGhpbmdUeXBlIFwiJHt0aGluZ1R5cGV9XCIgcHJvdmlkZWQuIE11c3QgYmUgaW4ge1wiJHt0aGluZ1R5cGVOYW1lcy5qb2luKCdcIiwgXCInKX1cIn0uYCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoIWlyaSAmJiBvbnRvbG9neUlkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXJpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEVudGl0eVR5cGVQcm92aWRlZChpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBQcm9taXNlPGFueT4ge1xuICAgIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgICAgY2FzZSAndGVybSc6IGNhc2UgJ2NsYXNzJzogLy8gYWxzbyBhbGxvdyBcImNsYXNzXCIgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0VGVybSh1bmRlZmluZWQsIHVuZGVmaW5lZCwge29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaX0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAncHJvcGVydHknOiBjYXNlICdhbm5vdGF0aW9uUHJvcGVydHknOiBjYXNlICdkYXRhUHJvcGVydHknOiBjYXNlICdvYmplY3RQcm9wZXJ0eSc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFByb3BlcnR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaX0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArIGVudGl0eVR5cGUgKyBgXCIuIE11c3QgYmUgb25lIG9mIHske2VudGl0eVR5cGVOYW1lcy5tYXAoKGVsZW0pID0+IGBcIiR7ZWxlbX1cImApLmpvaW4oXCIsIFwiKX19LmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEluZmVycmVkRW50aXR5VHlwZShpcmk6IHN0cmluZywgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nKSA6IFByb21pc2U8YW55PiB7XG4gICAgLypcbiAgICAgICAgICAgIFRlc3QgYWxsIHR5cGVzIG9mIGVudGl0aWVzICh0ZXJtLCBwcm9wZXJ0eSwgaW5kaXZpZHVhbCkgbWFudWFsbHkgd2l0aCBzZXBhcmF0ZSBxdWVyaWVzIChhcyAvZW50aXRpZXMgZG9lcyBub3QgZXhpc3QgZm9yIGxlZ2FjeSBBUEkpXG4gICAgICAgICAgICAtPiByZXR1cm4gdGhlIHJlc3BvbnNlIG9iamVjdCB3aGljaCByZXNvbHZlcyB3aXRoIGEgY29udGFpbmVkIGVudGl0eVxuICAgICAgICAgICAgLT4gdGhyb3cgZXJyb3IgaWYgbm9uZSBvZiB0aGUgdHlwZXMgY29udGFpbnMgYW4gZW50aXR5XG4gICAgICAgICAgKi9cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuXG4gICAgbGV0IHJlc3BvbnNlOyAvLyBzdG9yZXMgdGhlIGVudGl0eSB0byBiZSByZXR1cm5lZCBpbiB0aGUgZW5kXG5cbiAgICBmdW5jdGlvbiBzZXRBbmRTdG9wKHJlczogYW55KSB7XG4gICAgICBpZiAocmVzW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzcG9uc2UgPSByZXM7XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsgLy8gYWJvcnQgcXVlcmllcyBmb3Igb3RoZXIgZW50aXR5VHlwZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIFtcbiAgICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7c2V0QW5kU3RvcChyZXMpfSksXG4gICAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwge29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHByb3BlcnR5SXJpOiBpcml9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7c2V0QW5kU3RvcChyZXMpfSksXG4gICAgICAgICAgdGhpcy5nZXRJbmRpdmlkdWFsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpfSwgcGFyYW1ldGVyLCB0cnVlLCBzaWduYWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge3NldEFuZFN0b3AocmVzKX0pXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgaWYocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3BvbnNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoXCJJcmkgXCIgKyBpcmkgKyBcIiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFuY2VzdG9ycyhpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSkgOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGFuY2VzdG9yczogYW55O1xuICAgIGlmKGlzQ2xhc3NUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgYW5jZXN0b3JzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSwgZmFsc2UpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnNgLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllc319LCBmYWxzZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYW5jZXN0b3JzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSwgZmFsc2UpfS9hbmNlc3RvcnNgLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllc319LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yc1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICBjcmVhdGVNb2RlbE9iamVjdCh7ZWxlbWVudHM6IFtvYmpdfSkgYXMgRW50aXR5XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRKU1RyZWUoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcpIDogUHJvbWlzZTxKU1RyZWVOb2RlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSwgdHJ1ZSl9L2pzdHJlZWAsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIn19LCB0cnVlKTtcbiAgfVxuXG4gIC8vIFRPRE86IERvIHdlIHdhbnQgdGhlIHNhbWUgYmVoYXZpb3IgYXMgRU1CTCBFQkkgKGUuZy4gbm90IGdldHRpbmcgaW5zdGFuY2VzIGZvciBjbGFzc2VzIGlmIGVudGl0eVR5cGUgIT0gXCJpbmRpdmlkdWFsXCIpP1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hpbGRyZW4oaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsIHVzZUxlZ2FjeSA9IGZhbHNlKSA6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBsZXQgY2hpbGRyZW46IGFueTtcbiAgICBpZihpc0NsYXNzVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIHVzZUxlZ2FjeSl9L2hpZXJhcmNoaWNhbENoaWxkcmVuYCwge3BhcmFtczoge3NpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXN9fSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSBpZihpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgLy8gZW50aXR5VHlwZSBkb2VzIE5PVCBpbmRpY2F0ZSB3aGljaCB0eXBlIHRoZSBlbnRpdHkgb2YgdGhlIHByb3ZpZGVkIGlyaSBoYXMsIGJ1dCB3aGljaCB0eXBlIG9mIGhpZXJhcmNoeSBpcyBkZXNpcmVkXG4gICAgICAvLyAtPiBcImNsYXNzXCIgaGFzIHRvIGJlIHByb3ZpZGVkIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoeSBhcyB3ZWxsLCBhcyBpbmRpdmlkdWFscyBhcmUgYWx3YXlzIGNoaWxkcmVuIG9mIGNsYXNzZXNcbiAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAvLyBUT0RPOiBEb2VzIGRlc2NlbmRhbnRzIGFsd2F5cyB3b3JrIGZvciB0aGlzIChvciBhcmUgdGhlcmUgY2xhc3NlcyB3aXRoIGJvdGggaW5kaXZpZHVhbHMgYW5kIGNsYXNzZXMgYXMgZGVzY2VuZGFudHMpP1xuICAgICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCB1c2VMZWdhY3kpfS9kZXNjZW5kYW50c2AsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIn19LCB1c2VMZWdhY3kpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaW5zdGFuY2VzYCwge3BhcmFtczoge3NpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXN9fSwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGlsZHJlbiA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIHVzZUxlZ2FjeSl9L2NoaWxkcmVuYCwge3BhcmFtczoge3NpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXN9fSwgdXNlTGVnYWN5KTtcbiAgICB9XG5cbiAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcIl9lbWJlZGRlZFwiXVtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3Qoe1tcIl9lbWJlZGRlZFwiXToge1tpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUpXTogW29ial19fSkgYXMgRW50aXR5XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3Qoe2VsZW1lbnRzOiBbb2JqXX0pIGFzIEVudGl0eVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Um9vdEVudGl0aWVzKGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIHByZWZlcnJlZFJvb3RzID0gZmFsc2UsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsIHVzZUxlZ2FjeSA9IGZhbHNlKSA6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpKXtcbiAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbHNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IC9wcmVmZXJyZWRSb290cyByb3V0ZSBzaG91bGQgZXhpc3QgaW4gbGVnYWN5IGFwaSwgYnV0IGRvZXMgbm90IHdvcmtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpfS9yb290c2AsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfX0sIHVzZUxlZ2FjeSk7XG5cbiAgICAgICAgcmV0dXJuIHJvb3RzW1wiX2VtYmVkZGVkXCJdW3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgdXNlTGVnYWN5KV0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHtbXCJfZW1iZWRkZWRcIl06IHtbcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCB1c2VMZWdhY3kpXTogW29ial19fSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpe1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpfWAsIHtwYXJhbXM6IHtzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLCBoYXNEaXJlY3RQYXJlbnQ6IHByZWZlcnJlZFJvb3RzID8gdW5kZWZpbmVkIDogXCJmYWxzZVwiLCBpc1ByZWZlcnJlZFJvb3Q6IHByZWZlcnJlZFJvb3RzID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9fSwgdXNlTGVnYWN5KTtcblxuICAgICAgICByZXR1cm4gcm9vdHNbXCJlbGVtZW50c1wiXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3Qoe2VsZW1lbnRzOiBbb2JqXX0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDbGFzc0luc3RhbmNlcyhpcmk6IHN0cmluZywgb250b2xvZ3lJZDogc3RyaW5nKSA6IFByb21pc2U8SW5kaXZpZHVhbFtdPiB7XG4gICAgY29uc3QgaW5zdGFuY2VzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIGZhbHNlKX0vaW5kaXZpZHVhbHNgLCB7cGFyYW1zOiB7c2l6ZTogXCIxMDAwXCJ9fSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlc1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICBjcmVhdGVNb2RlbE9iamVjdCh7ZWxlbWVudHM6IFtvYmpdfSkgYXMgSW5kaXZpZHVhbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXJpLFxuICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBwcmVmZXJyZWRSb290cz0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPSBmYWxzZSxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcyA9IHRydWUsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IGZhbHNlLFxuICAgICAgICB1c2VMZWdhY3kgPSBmYWxzZSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZihpcmkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIFwiXCIsIHVzZUxlZ2FjeSkudGhlbigoZW50aXR5KSA9PiB0aGlzLmJ1aWxkSGllcmFyY2h5V2l0aEVudGl0eSh7XG4gICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZSxcbiAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCB8fCBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIHByZWZlcnJlZFJvb3RzOiBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgbWFpbkVudGl0eTogZW50aXR5LFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICBzaG93U2libGluZ3NPbkluaXQ6IHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBpZihlbnRpdHlUeXBlID09IHVuZGVmaW5lZCB8fCBvbnRvbG9neUlkID09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFaXRoZXIgaXJpIG9yIG9udG9sb2d5SWQgYW5kIGVudGl0eVR5cGUgaGF2ZSB0byBiZSBwcm92aWRlZC5cIik7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZFJvb3RIaWVyYXJjaHkoe1xuICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgIHByZWZlcnJlZFJvb3RzOiBwcmVmZXJyZWRSb290cyxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczoga2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0OiBzaG93U2libGluZ3NPbkluaXQsXG4gICAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGpzVHJlZU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoanNUcmVlTm9kZTogSlNUcmVlTm9kZSk6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IGpzVHJlZU5vZGUuaXJpLFxuICAgICAgbGFiZWw6IGpzVHJlZU5vZGUudGV4dCxcbiAgICAgIGhhc0NoaWxkcmVuOiBqc1RyZWVOb2RlLmNoaWxkcmVuIHx8IGpzVHJlZU5vZGUuc3RhdGUub3BlbmVkLFxuICAgICAgcGFyZW50czogW11cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVudGl0eVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShlbnRpdHk6IEVudGl0eSk6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgIHJldHVybiB7XG4gICAgICBpcmk6IGVudGl0eS5nZXRJcmkoKSxcbiAgICAgIGxhYmVsOiBhc0FycmF5KGVudGl0eS5nZXRMYWJlbCgpKVswXSxcbiAgICAgIGRlZmluZWRCeTogZW50aXR5LmdldERlZmluZWRCeSgpLFxuICAgICAgaGFzQ2hpbGRyZW46IGVudGl0eS5oYXNDaGlsZHJlbigpLFxuICAgICAgbnVtRGVzY2VuZGFudHM6IGVudGl0eS5nZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpIHx8IGVudGl0eS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50czogZW50aXR5LmdldFBhcmVudHMoKVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRSb290SGllcmFyY2h5KFxuICAgIHByb3BzOiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICB9ICYgQnVpbGRIaWVyYXJjaHlQcm9wc1xuICApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIFFVRVJZIHJvb3QgZW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXNEYXRhID0gKGF3YWl0IHRoaXMuZ2V0Um9vdEVudGl0aWVzKGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgdXNlTGVnYWN5KSlcbiAgICAgICAgLm1hcCgoZW50aXR5KSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShlbnRpdHkpKVxuICAgICAgICAuZmlsdGVyKChyb290KSA9PiAhaXNUb3Aocm9vdC5pcmkpKTtcbiAgICAvKiAtLS0gKi9cblxuICAgIC8qIElOSVRJQUxJWkUgZW50aXRpZXNEYXRhLCBwYXJlbnRDaGlsZFJlbGF0aW9ucyAqL1xuICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4oKTtcbiAgICBjb25zdCBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+KCk7XG4gICAgZm9yKGNvbnN0IGVudGl0eURhdGEgb2Ygcm9vdEVudGl0aWVzRGF0YSkge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuICAgIC8qIC0tLSAqL1xuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IG5ldyBTZXQoKSxcbiAgICAgIHJvb3RzOiByb290RW50aXRpZXNEYXRhLm1hcCgocm9vdCkgPT4gbmV3IFRyZWVOb2RlKHJvb3QpKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpLFxuICAgICAgYXBpOiBuZXcgT2xzQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhFbnRpdHkoXG4gICAgcHJvcHM6IHtcbiAgICAgIG1haW5FbnRpdHk6IEVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZyxcbiAgICAgIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLFxuICAgIH0gJiBCdWlsZEhpZXJhcmNoeVByb3BzXG4gICkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuXG4gICAgY29uc3Qge1xuICAgICAgbWFpbkVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIExPQUQgYW5jZXN0b3JzICovXG4gICAgbGV0IGVudGl0aWVzOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10gPSBbXTtcblxuICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgLy8gVE9ETzogSlNUcmVlIHNvbWV0aW1lcyByZXR1cm5zIHNtYWxsZXIgdHJlZXMgdGhhbiB3b3VsZCBiZSBwb3NzaWJsZSB2aWEgcXVlcnlpbmcgaGllcmFyY2hpY2FsIGFuY2VzdG9ycyBhbmQgYWxsIGNoaWxkcmVuIG9mIHRob3NlIChlLmcuIGh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9VQkVST05fMjAwMTc0NyAtPiBzdHJhbmdlIGFuZCBub3QgcmVhbGx5IHVzZWZ1bCBoaWVyYXJjaHkgYmVjYXVzZSBtYW55IGVudGl0aWVzIGFyZSBib3RoIHNpYmxpbmcgYW5kIGNoaWxkcmVuIG9mIG90aGVyIGVudGl0aWVzIChpcyBpdCB3cm9uZyB0byB0YWtlIGhpZXJhcmNoaWNhbFBhcmVudCBpbnN0ZWFkIG9mIGRpcmVjdFBhcmVudCBpbiBlbnRpdHlUb0VudGl0eURhdGFUb0hpZXJhcmNoeT8gRU1CTC1FQkkgZG9lcyBpdCBsaWtlIHRoYXQgYXMgd2VsbCkpXG4gICAgICAvLyAgICAgICBRdWVzdGlvbjogU2hvdWxkIHdlIHByZWZlciBjb21wbGV0ZSBoaWVyYXJjaGllcyAocXVlcnkgL2hpZXJhcmNoaWNhbEFuY2VzdG9ycyArIC9jaGlsZHJlbiBmb3IgZWFjaCkgb3Igc2xpbSBxdWVyaWVzIChxdWVyeSAvanN0cmVlKT9cbiAgICAgIGNvbnN0IGpzVHJlZSA9IGF3YWl0IHRoaXMuZ2V0SlNUcmVlKG1haW5FbnRpdHkuZ2V0SXJpKCksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQpO1xuICAgICAgY29uc3QgaWRUb0lyaSA6IE1hcDxzdHJpbmcsc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLHN0cmluZz4oKTtcbiAgICAgIGNvbnN0IHBhcmVudHMgOiBNYXA8c3RyaW5nLFNldDxzdHJpbmc+PiA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICAgICAgZm9yKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGlkVG9Jcmkuc2V0KGpzVHJlZU5vZGUuaWQsIGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgcGFyZW50cy5zZXQoanNUcmVlTm9kZS5pcmksIG5ldyBTZXQ8c3RyaW5nPigpKTtcbiAgICAgIH1cblxuICAgICAgZm9yKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGNvbnN0IHBhckFyciA9IHBhcmVudHMuZ2V0KGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgY29uc3QgcGFySXJpID0gaWRUb0lyaS5nZXQoanNUcmVlTm9kZS5wYXJlbnQpO1xuICAgICAgICBpZihwYXJBcnIgIT0gdW5kZWZpbmVkICYmIHBhcklyaSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJBcnIuYWRkKHBhcklyaSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZW50aXRpZXMgPSBbXTtcbiAgICAgIGNvbnN0IGluQXJyID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvcihjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZighaW5BcnIuaGFzKGpzVHJlZU5vZGUuaXJpKSkge1xuICAgICAgICAgIGluQXJyLmFkZChqc1RyZWVOb2RlLmlyaSk7XG5cbiAgICAgICAgICBlbnRpdGllcy5wdXNoKHRoaXMuanNUcmVlTm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShqc1RyZWVOb2RlKSk7XG4gICAgICAgICAgY29uc3QgcGFyID0gcGFyZW50cy5nZXQoanNUcmVlTm9kZS5pcmkpO1xuICAgICAgICAgIGlmKHBhciAhPSB1bmRlZmluZWQpIGVudGl0aWVzW2VudGl0aWVzLmxlbmd0aCAtIDFdLnBhcmVudHMgPSBSZWlmaWVkLmZyb21Kc29uKEFycmF5LmZyb20ocGFyLnZhbHVlcygpKSkgfHwgW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLmdldEFuY2VzdG9ycyhtYWluRW50aXR5LmdldElyaSgpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkIHx8IG1haW5FbnRpdHkuZ2V0T250b2xvZ3lJZCgpLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyk7XG4gICAgICBlbnRpdGllcyA9IFt0aGlzLmVudGl0eVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShtYWluRW50aXR5KSwgLi4uYW5jZXN0b3JzLm1hcCgoZW50aXR5KSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShlbnRpdHkpKV1cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgdG9wIGVudGl0aWVzXG4gICAgZW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoKGUpID0+ICFpc1RvcChlLmlyaSkpO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogQlVJTEQgcGFyZW50Q2hpbGRSZWxhdGlvbnMgKi9cbiAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcblxuICAgIC8vIGluaXRpYWxpemUgcGFyZW50Q2hpbGRSZWxhdGlvbnMgJiBlbnRpdGllc0RhdGFcbiAgICBmb3IoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuXG4gICAgaWYoc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsbHkgbG9hZCBzaWJsaW5ncyBmcm9tIGFwaVxuICAgICAgY29uc3QgcmVhbEVudGl0eVR5cGUgPSAoZW50aXR5VHlwZSB8fCBtYWluRW50aXR5LmdldFR5cGUoKSk7XG4gICAgICBjb25zdCBlbnRpdHlUeXBlRm9yUXVlcnkgPSByZWFsRW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiA/IFwiY2xhc3NcIiA6IHJlYWxFbnRpdHlUeXBlOyAvLyBUT0RPOiBvbmx5IHJlbGV2YW50IGZvciBlbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiIChtYXliZSB3ZSBkb24ndCBldmVuIG5lZWQgdGhpcyBhcyBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMgaXMgbm90IHlldCBkZXRlcm1pbmVkKVxuXG4gICAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gICAgICBmb3IoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgICBpZihlbnRpdHlEYXRhLmlyaSAhPSBtYWluRW50aXR5LmdldElyaSgpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbihlbnRpdHlEYXRhLmlyaSwgZW50aXR5VHlwZUZvclF1ZXJ5LCBvbnRvbG9neUlkLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgdXNlTGVnYWN5KS50aGVuKChjaGlsZHJlbikgPT4gY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoY2hpbGQpKSkudGhlbigoY2hpbGRyZW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJSZWxhdGlvbiA9IGNoaWxkLnBhcmVudHMuZmlsdGVyKChwYXIpID0+IHBhci52YWx1ZSA9PSBlbnRpdHlEYXRhLmlyaSk7IC8vIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe2NoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgICB9KS50aGVuKHJlc29sdmUpXG4gICAgICAgICAgKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuXG4gICAgICAvLyBUT0RPOiBvbmx5IHJlbGV2YW50IGZvciBlbnRpdHlUeXBlID09IFwiaW5kaXZpZHVhbFwiIChtYXliZSB3ZSBkb24ndCBldmVuIG5lZWQgdGhpcyBhcyBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWwgaGllcmFyY2hpZXMgaXMgbm90IHlldCBkZXRlcm1pbmVkKVxuICAgICAgaWYocmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIpIHtcbiAgICAgICAgZm9yKGNvbnN0IHBhcmVudFJlaWZpZWQgb2YgbWFpbkVudGl0eS5nZXRQYXJlbnRzKCkpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IChhd2FpdCB0aGlzLmdldENoaWxkcmVuKHBhcmVudFJlaWZpZWQudmFsdWUsIHJlYWxFbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcykpXG4gICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB0aGlzLmVudGl0eVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShjaGlsZCkpXG5cbiAgICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKXtcbiAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe2NoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwifSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChwYXJlbnRSZWlmaWVkLnZhbHVlLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gZW50aXR5RGF0YS5wYXJlbnRzLmZpbHRlcigocGFyZW50UmVpZmllZDogUmVpZmllZDxzdHJpbmc+KSA9PiAhaXNUb3AocGFyZW50UmVpZmllZC52YWx1ZSkpO1xuICAgICAgICBpZihlbnRpdHlEYXRhLmlyaSA9PSBtYWluRW50aXR5Py5nZXRJcmkoKSAmJiBpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlIHx8IG1haW5FbnRpdHkuZ2V0VHlwZSgpKSkge1xuICAgICAgICAgIGZvcihjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHtjaGlsZElyaTogZW50aXR5RGF0YS5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwifSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyZW50UmVpZmllZCBvZiBwYXJlbnRzKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Q2hpbGRSZWxhdGlvbnMuaGFzKHBhcmVudFJlaWZpZWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLmdldChwYXJlbnRSZWlmaWVkLnZhbHVlKT8ucHVzaCh7Y2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKSA/IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNvcnQgcGFyZW50Q2hpbGRSZWxhdGlvbnNcbiAgICBmb3IoY29uc3QgcmVsIG9mIHBhcmVudENoaWxkUmVsYXRpb25zLnZhbHVlcygpKSByZWwuc29ydCgoYSwgYikgPT4gKGVudGl0aWVzRGF0YS5nZXQoYS5jaGlsZElyaSk/LmxhYmVsIHx8IGEuY2hpbGRJcmkpLmxvY2FsZUNvbXBhcmUoZW50aXRpZXNEYXRhLmdldChiLmNoaWxkSXJpKT8ubGFiZWwgfHwgYi5jaGlsZElyaSkpO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogQlVJTEQgcm9vdEVudGl0aWVzICovXG4gICAgY29uc3Qgcm9vdEVudGl0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmKHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSAoYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCB1bmRlZmluZWQsIHVzZUxlZ2FjeSkpLmdldFByZWZlcnJlZFJvb3RzKCk7XG4gICAgICBmb3IoY29uc3QgZSBvZiBwcmVmZXJyZWRSb290RW50aXRpZXMpIHtcbiAgICAgICAgaWYoZW50aXRpZXNEYXRhLmhhcyhlKSkgcm9vdEVudGl0aWVzLnB1c2goZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID09IDApIHJvb3RFbnRpdGllcy5wdXNoKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKTogVHJlZU5vZGUge1xuICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICBub2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9IGNoaWxkUmVsYXRpb25Ub1BhcmVudDtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KGVudGl0eURhdGEuaXJpKSB8fCBbXTtcblxuICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaywgY2hpbGQuY2hpbGRSZWxhdGlvblRvUGFyZW50KSk7XG4gICAgICB9XG5cbiAgICAgIGlmKG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkgbm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAgIGN5Y2xlQ2hlY2suZGVsZXRlKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByb290czogcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpLFxuICAgICAgYXBpOiBuZXcgT2xzQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgIG1haW5FbnRpdHlJcmk6IG1haW5FbnRpdHk/LmdldElyaSgpLFxuICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlcyxcbiAgICAgIHVzZUxlZ2FjeTogdXNlTGVnYWN5LFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YUZvckhpZXJhcmNoeVtdPiB7XG4gICAgaWYocHJvcHMuZW50aXR5VHlwZSA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBPTFMuXCIpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENoaWxkcmVuKHByb3BzLm5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHByb3BzLnVzZUxlZ2FjeSkpXG4gICAgICAgIC5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5KSlcbiAgfVxufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL3NjcmVlbl9yZWFkZXJfb25seSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJMaXZlID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyTGl2ZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIGlzQWN0aXZlID0gX3JlZiRpc0FjdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaXNBY3RpdmUsXG4gICAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAnc3RhdHVzJyA6IF9yZWYkcm9sZSxcbiAgICAgIF9yZWYkYXJpYUxpdmUgPSBfcmVmWydhcmlhLWxpdmUnXSxcbiAgICAgIGFyaWFMaXZlID0gX3JlZiRhcmlhTGl2ZSA9PT0gdm9pZCAwID8gJ3BvbGl0ZScgOiBfcmVmJGFyaWFMaXZlLFxuICAgICAgX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID0gX3JlZi5mb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSxcbiAgICAgIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID0gX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZm9jdXNSZWdpb25PblRleDtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICB0b2dnbGUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0VG9nZ2xlID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgZm9jdXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0VG9nZ2xlKGZ1bmN0aW9uICh0b2dnbGUpIHtcbiAgICAgIHJldHVybiAhdG9nZ2xlO1xuICAgIH0pO1xuICB9LCBbY2hpbGRyZW5dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9jdXNSZWYuY3VycmVudCAhPT0gbnVsbCAmJiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSkge1xuICAgICAgZm9jdXNSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW3RvZ2dsZSwgZm9jdXNSZWdpb25PblRleHRDaGFuZ2VdKTtcbiAgcmV0dXJuIChcbiAgICAvKipcbiAgICAgKiBJbnRlbnRpb25hbGx5IHVzZXMgdHdvIHBlcnNpc3RlbnQgbGl2ZSByZWdpb25zIHdpdGggb3NjaWxsYXRpbmcgY29udGVudCB1cGRhdGVzLlxuICAgICAqIFRoaXMgcmVzb2x2ZXMgdGhlIHByb2JsZW0gb2YgZHVwbGljYXRlIHNjcmVlbiByZWFkZXIgYW5ub3VuY2VtZW50cyBpbiByYXBpZCBzdWNjZXNzaW9uXG4gICAgICogY2F1c2VkIGJ5IFJlYWN0J3MgdmlydHVhbCBET00gYmVoYXZpb3VyIChodHRwczovL2dpdGh1Yi5jb20vbnZhY2Nlc3MvbnZkYS9pc3N1ZXMvNzk5NiNpc3N1ZWNvbW1lbnQtNDEzNjQxNzA5KVxuICAgICAqXG4gICAgICogQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZS9ibG9iL2E3MTA2ZjAzMTUwOTQxZmMxNWU2YzFjZWIwYTkwZTg4NzJmYTg2ZWYvc3JjL3N0YXR1cy5qc1xuICAgICAqIERlYm91bmNpbmcgd2FzIG5vdCBuZWVkZWQgZm9yIHRoaXMgY2FzZSwgYnV0IGNvdWxkIHByb3ZlIHRvIGJlIHVzZWZ1bCBmb3IgZnV0dXJlIHVzZSBjYXNlcy5cbiAgICAgKiBTZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vQWxtZXJvU3RleW4vcmVhY3QtYXJpYS1saXZlIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGVxdWVsYWJzL25nQTExeVxuICAgICAqIGZvciBtb3JlIGV4YW1wbGVzIG9mIHRoZSBkb3VibGUgcmVnaW9uIGFwcHJvYWNoLlxuICAgICAqL1xuICAgIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByZWY6IGZvY3VzUmVmLFxuICAgICAgdGFiSW5kZXg6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gLTEgOiB1bmRlZmluZWRcbiAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiIC8vIFNldHRpbmcgYGFyaWEtaGlkZGVuYCBhbmQgc2V0dGluZyBgYXJpYS1saXZlYCB0byBcIm9mZlwiIHByZXZlbnRzXG4gICAgICAvLyBkb3VibGUgYW5ub3VuY2VtZW50cyBmcm9tIFZPIHdoZW4gYGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlYCBpcyB0cnVlXG4gICAgICAsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmIHRvZ2dsZSA/IGNoaWxkcmVuIDogJycpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiAhdG9nZ2xlID8gdW5kZWZpbmVkIDogJ3RydWUnLFxuICAgICAgXCJhcmlhLWxpdmVcIjogZm9jdXNSZWdpb25PblRleHRDaGFuZ2UgPyAnb2ZmJyA6IGFyaWFMaXZlXG4gICAgfSwgaXNBY3RpdmUgJiYgIXRvZ2dsZSA/IGNoaWxkcmVuIDogJycpKSlcbiAgKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJMaXZlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogV2hldGhlciB0byBtYWtlIHNjcmVlbiByZWFkZXJzIGF3YXJlIG9mIHRoZSBjb250ZW50XG4gICAgICovXG4gIGlzQWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciBzY3JlZW4gcmVhZGVycyB0byBhbm5vdW5jZVxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogYHJvbGVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnMuXG4gICAgICpcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQVJJQV9MaXZlX1JlZ2lvbnMjcm9sZXNfd2l0aF9pbXBsaWNpdF9saXZlX3JlZ2lvbl9hdHRyaWJ1dGVzXG4gICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogYGFyaWEtbGl2ZWAgYXR0cmlidXRlIGZvciBib3RoIGxpdmUgcmVnaW9uc1xuICAgICAqL1xuICBcImFyaWEtbGl2ZVwiOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9uIGBjaGlsZHJlbmAvdGV4dCBjaGFuZ2UsIHRoZSByZWdpb24gd2lsbCBhdXRvLWZvY3VzIGl0c2VsZiwgY2F1c2luZyBzY3JlZW4gcmVhZGVyc1xuICAgICAqIHRvIGF1dG9tYXRpY2FsbHkgcmVhZCBvdXQgdGhlIHRleHQgY29udGVudC4gVGhpcyBwcm9wIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBmb3JcbiAgICAgKiBuYXZpZ2F0aW9uIG9yIHBhZ2UgY2hhbmdlcywgd2hlcmUgcHJvZ3JhbW1hdGljYWxseSByZXNldHRpbmcgZm9jdXMgbG9jYXRpb24gYmFjayB0b1xuICAgICAqIGEgY2VydGFpbiBwYXJ0IG9mIHRoZSBwYWdlIGlzIGRlc2lyZWQuXG4gICAgICovXG4gIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyB9IGZyb20gJy4vc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcyc7XG5leHBvcnQgdmFyIEV1aVNjcmVlblJlYWRlck9ubHkgPSBmdW5jdGlvbiBFdWlTY3JlZW5SZWFkZXJPbmx5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2hvd09uRm9jdXMgPSBfcmVmLnNob3dPbkZvY3VzO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyhzaG93T25Gb2N1cyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNjcmVlblJlYWRlck9ubHldO1xuICB2YXIgcHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLmxlbmd0aCA/IGNsYXNzZXMgOiB1bmRlZmluZWQsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfTtcbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJPbmx5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRm9yIGtleWJvYXJkIG5hdmlnYXRpb24sIGZvcmNlIGNvbnRlbnQgdG8gZGlzcGxheSB2aXN1YWxseSB1cG9uIGZvY3VzLlxuICAgICAqL1xuICBzaG93T25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKiBpbXBvcnQgeyB0eXBlIEVtb3Rpb25DYWNoZSB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJyAqL1xudmFyIEVtb3Rpb25DYWNoZUNvbnRleHRcbi8qOiBSZWFjdC5Db250ZXh0PEVtb3Rpb25DYWNoZSB8IG51bGw+ICovXG49IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpXG4vKjogRW1vdGlvbkNhY2hlIHwgbnVsbCovXG57XG4gIHJldHVybiB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xufTtcblxudmFyIHdpdGhFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB3aXRoRW1vdGlvbkNhY2hlXG4vKiA8UHJvcHMsIFJlZjogUmVhY3QuUmVmPCo+PiAqL1xuKGZ1bmNcbi8qOiAocHJvcHM6IFByb3BzLCBjYWNoZTogRW1vdGlvbkNhY2hlLCByZWY6IFJlZikgPT4gUmVhY3QuTm9kZSAqL1xuKVxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFByb3BzPiAqL1xue1xuICByZXR1cm4gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzXG4gIC8qOiBQcm9wcyAqL1xuICAsIHJlZlxuICAvKjogUmVmICovXG4gICkge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZVxuLyo6IE9iamVjdCAqL1xuLCB0aGVtZVxuLyo6IE9iamVjdCB8IChPYmplY3QgPT4gT2JqZWN0KSAqL1xuKSB7XG4gIGlmICh0eXBlb2YgdGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgbWVyZ2VkVGhlbWUgPSB0aGVtZShvdXRlclRoZW1lKTtcblxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG4vKlxudHlwZSBUaGVtZVByb3ZpZGVyUHJvcHMgPSB7XG4gIHRoZW1lOiBPYmplY3QgfCAoT2JqZWN0ID0+IE9iamVjdCksXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlXG59XG4qL1xuXG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHNcbi8qOiBUaGVtZVByb3ZpZGVyUHJvcHMgKi9cbikge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZVxuLyogPENvbmZpZzoge30+ICovXG4oQ29tcG9uZW50XG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8Q29uZmlnPiAqL1xuKVxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PCREaWZmPENvbmZpZywgeyB0aGVtZTogT2JqZWN0IH0+PiAqL1xue1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlXG4vKjogUmVhY3QuRWxlbWVudFR5cGUgKi9cbiwgcHJvcHNcbi8qOiBPYmplY3QgKi9cbikge1xuXG4gIHZhciBuZXdQcm9wc1xuICAvKjogYW55ICovXG4gID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gUnVudGltZSBsYWJlbGluZyBpcyBhbiBvcHQtaW4gZmVhdHVyZSBiZWNhdXNlOlxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShcbi8qIDxhbnksIGFueT4gKi9cbmZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpICYmIGtleSAhPT0gJ2NzcycgJiYga2V5ICE9PSB0eXBlUHJvcE5hbWUgJiYgKCFpc0RldmVsb3BtZW50ICkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsICJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvblxuICAvKjogRW1vdGlvbkNhY2hlICovXG5jcmVhdGVDYWNoZShvcHRpb25zXG4vKjogT3B0aW9ucyAqL1xuKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGVcbiAgICAvKjogSFRNTFN0eWxlRWxlbWVudCAqL1xuICAgICkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIC8qIDogTm9kZSAqL1xuXG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgKi9cbiAgICApIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuICAvKjogKFxuICBzZWxlY3Rvcjogc3RyaW5nLFxuICBzZXJpYWxpemVkOiBTZXJpYWxpemVkU3R5bGVzLFxuICBzaGVldDogU3R5bGVTaGVldCxcbiAgc2hvdWxkQ2FjaGU6IGJvb2xlYW5cbiAgKSA9PiBzdHJpbmcgfCB2b2lkICovXG5cblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvblxuICAgICAgLyo6IHZvaWQgKi9cbiAgICBpbnNlcnQoc2VsZWN0b3JcbiAgICAvKjogc3RyaW5nICovXG4gICAgLCBzZXJpYWxpemVkXG4gICAgLyo6IFNlcmlhbGl6ZWRTdHlsZXMgKi9cbiAgICAsIHNoZWV0XG4gICAgLyo6IFN0eWxlU2hlZXQgKi9cbiAgICAsIHNob3VsZENhY2hlXG4gICAgLyo6IGJvb2xlYW4gKi9cbiAgICApIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGVcbiAgLyo6IEVtb3Rpb25DYWNoZSAqL1xuICA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsICJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCAidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9XG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTU0ODZjNTFjLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuPSBmdW5jdGlvbiBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG5HbG9iYWxQcm9wc1xuPiAqL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wc1xuLyo6IEdsb2JhbFByb3BzICovXG4sIGNhY2hlKSB7XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIHZhciBub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsKi9cbiAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vKiBpbXBvcnQgdHlwZSB7IEludGVycG9sYXRpb24sIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cblxuZnVuY3Rpb24gY3NzKClcbi8qOiBTZXJpYWxpemVkU3R5bGVzICovXG57XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG4vKlxudHlwZSBLZXlmcmFtZXMgPSB7fFxuICBuYW1lOiBzdHJpbmcsXG4gIHN0eWxlczogc3RyaW5nLFxuICBhbmltOiAxLFxuICB0b1N0cmluZzogKCkgPT4gc3RyaW5nXG58fSAmIHN0cmluZ1xuKi9cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBLZXlmcmFtZXMgKi9cbmtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxuLypcbnR5cGUgQ2xhc3NOYW1lQXJnID1cbiAgfCBzdHJpbmdcbiAgfCBib29sZWFuXG4gIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cbiAgfCBBcnJheTxDbGFzc05hbWVBcmc+XG4gIHwgbnVsbFxuICB8IHZvaWRcbiovXG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb25cbiAgLyo6IHN0cmluZyAqL1xuY2xhc3NuYW1lcyhhcmdzXG4vKjogQXJyYXk8Q2xhc3NOYW1lQXJnPiAqL1xuKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkXG4vKjogT2JqZWN0ICovXG4sIGNzc1xuLyo6ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBzdHJpbmcgKi9cbiwgY2xhc3NOYW1lXG4vKjogc3RyaW5nICovXG4pIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLypcbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAoe1xuICAgIGNzczogKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nLFxuICAgIGN4OiAoLi4uYXJnczogQXJyYXk8Q2xhc3NOYW1lQXJnPikgPT4gc3RyaW5nLFxuICAgIHRoZW1lOiBPYmplY3RcbiAgfSkgPT4gUmVhY3QuTm9kZVxufSAqL1xuXG5cbnZhciBDbGFzc05hbWVzXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+Ki9cbj0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLyoqXG4gKiBSZWFjdC5jbG9uZUVsZW1lbnQgZG9lcyBub3Qgd29yayBpZiB0aGUgY2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHRoZVxuICogYGNzc2AgcHJvcCAtIGFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIHVzZSBganN4KClgIHRvIG1hbnVhbGx5IGNsb25lIHRoZSBlbGVtZW50XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMTQwNFxuICpcbiAqIE5PVEU6IFdlJ3JlIHN0aWxsIHVzaW5nL3Rlc3RpbmcgdGhpcyB1dGlsaXR5IGludGVybmFsbHksIHNvIHRoaXMgaXMgbm90IHlldCBhIHB1YmxpYyBBUElcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lRWxlbWVudFdpdGhDc3MgPSBmdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5wcm9wcy5fX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fIHx8IGVsZW1lbnQudHlwZTsgLy8gRU1PVElPTl9UWVBFIGhhbmRsZXMgbm9uLVJlYWN0IGVsZW1lbnRzIChuYXRpdmUgSlNYL0hUTUwgbm9kZXMpXG5cbiAgdmFyIGNsb25lZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgIHJlZjogZWxlbWVudC5yZWZcbiAgfSwgZWxlbWVudC5wcm9wcyksIHByb3BzKTtcblxuICBpZiAocHJvcHMuY3NzIHx8IGVsZW1lbnQucHJvcHMuY3NzKSB7XG4gICAgY2xvbmVkUHJvcHMuY3NzID0gW2VsZW1lbnQucHJvcHMuY3NzLCBwcm9wcy5jc3NdO1xuICB9XG5cbiAgcmV0dXJuIGpzeChjbG9uZWRFbGVtZW50LCBjbG9uZWRQcm9wcyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLypcbiAqIE1peGluIHRoYXQgaGlkZXMgZWxlbWVudHMgb2Zmc2NyZWVuIHRvIG9ubHkgYmUgcmVhZCBieSBzY3JlZW4gcmVhZGVyXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTEzMCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTE1MiBmb3IgbW9yZSBpbmZvXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seSgpIHtcbiAgcmV0dXJuIFwiXFxuICAvLyBUYWtlIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgbGF5b3V0XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvLyBLZWVwIGl0IHZlcnRpY2FsbHkgaW5saW5lXFxuICB0b3A6IGF1dG87XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgYSBsZWZ0IHZhbHVlLCBhbmQgU2VsZW5pdW0gKHVzZWQgYnkgS2liYW5hJ3MgRlRSKSByZXF1aXJlcyBhbiBvZmYtc2NyZWVuIHBvc2l0aW9uIGZvciBpdHMgLmdldFZpc2libGVUZXh0KCkgdG8gbm90IHJlZ2lzdGVyIFNSLW9ubHkgdGV4dFxcbiAgbGVmdDogLTEwMDAwcHg7XFxuICAvLyBUaGUgZWxlbWVudCBtdXN0IGhhdmUgYSBzaXplIChmb3Igc29tZSBzY3JlZW4gcmVhZGVycylcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIC8vIEJ1dCByZWR1Y2UgdGhlIHZpc2libGUgc2l6ZSB0byBub3RoaW5nXFxuICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgY2xpcC1wYXRoOiBpbnNldCg1MCUpO1xcbiAgLy8gQW5kIGVuc3VyZSBubyBvdmVyZmxvd3Mgb2NjdXJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgdGhlIG5lZ2F0aXZlIG1hcmdpbiB0byBub3QgY2F1c2Ugb3ZlcmZsb3dzIG9mIHBhcmVudCBjb250YWluZXJzXFxuICBtYXJnaW46IC0xcHg7XFxuXCI7XG59O1xuLypcbiAqIFN0eWxlc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlTY3JlZW5SZWFkZXJPbmx5OiBzaG93T25Gb2N1cyA/IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6Zm9jdXMpOm5vdCg6YWN0aXZlKXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpIDogLyojX19QVVJFX18qL2NzcyhldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpXG4gIH07XG59OyIsICJjb25zdCBjYW5kaWRhdGVTZWxlY3RvcnMgPSBbXG4gICdpbnB1dCcsXG4gICdzZWxlY3QnLFxuICAndGV4dGFyZWEnLFxuICAnYVtocmVmXScsXG4gICdidXR0b24nLFxuICAnW3RhYmluZGV4XTpub3Qoc2xvdCknLFxuICAnYXVkaW9bY29udHJvbHNdJyxcbiAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKScsXG4gICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScsXG4gICdkZXRhaWxzJyxcbl07XG5jb25zdCBjYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnMuam9pbignLCcpO1xuXG5jb25zdCBOb0VsZW1lbnQgPSB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IG1hdGNoZXMgPSBOb0VsZW1lbnRcbiAgPyBmdW5jdGlvbiAoKSB7fVxuICA6IEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcblxuY29uc3QgZ2V0Um9vdE5vZGUgPVxuICAhTm9FbGVtZW50ICYmIEVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlXG4gICAgPyAoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgOiAoZWxlbWVudCkgPT4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgY29udGFpbmVyIHRvIGNoZWNrIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciB0byBjaGVja1xuICogQHBhcmFtIHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzID0gZnVuY3Rpb24gKGVsLCBpbmNsdWRlQ29udGFpbmVyLCBmaWx0ZXIpIHtcbiAgbGV0IGNhbmRpZGF0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoXG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVTZWxlY3RvcilcbiAgKTtcbiAgaWYgKGluY2x1ZGVDb250YWluZXIgJiYgbWF0Y2hlcy5jYWxsKGVsLCBjYW5kaWRhdGVTZWxlY3RvcikpIHtcbiAgICBjYW5kaWRhdGVzLnVuc2hpZnQoZWwpO1xuICB9XG4gIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcihmaWx0ZXIpO1xuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIEdldFNoYWRvd1Jvb3RcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0byBjaGVjayBmb3Igc2hhZG93IHJvb3RcbiAqIEByZXR1cm5zIHtTaGFkb3dSb290fGJvb2xlYW59IFNoYWRvd1Jvb3QgaWYgYXZhaWxhYmxlIG9yIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhIHNoYWRvd1Jvb3QgaXMgYXR0YWNoZWQgYnV0IG5vdCBhdmFpbGFibGUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2hhZG93Um9vdEZpbHRlclxuICogQHBhcmFtIHtFbGVtZW50fSBzaGFkb3dIb3N0Tm9kZSB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBzaGFkb3cgY29udGVudFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYSBzaGFkb3cgcm9vdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW5kaWRhdGVzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gc2NvcGUgY29udGFpbnMgaW5uZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtFbGVtZW50W119IGNhbmRpZGF0ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEl0ZXJhdGl2ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7R2V0U2hhZG93Um9vdHxib29sZWFufSBnZXRTaGFkb3dSb290IHRydWUgaWYgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZDsgZmFsc3kgaWYgbm90O1xuICogIGlmIGEgZnVuY3Rpb24sIGltcGxpZXMgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZCBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHNoYWRvdyByb290IG9mIGFuIGVsZW1lbnRcbiAqICBvciBhIGJvb2xlYW4gc3RhdGluZyBpZiBpdCBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHJvb3RcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IEVsZW1lbnQpID0+IGJvb2xlYW59IGZpbHRlciBmaWx0ZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmbGF0dGVuIGlmIHRydWUgdGhlbiByZXN1bHQgd2lsbCBmbGF0dGVuIGFueSBDYW5kaWRhdGVzU2NvcGUgaW50byB0aGUgcmV0dXJuZWQgbGlzdFxuICogQHByb3BlcnR5IHtTaGFkb3dSb290RmlsdGVyfSBzaGFkb3dSb290RmlsdGVyIGZpbHRlciBzaGFkb3cgcm9vdHM7XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHMgbGlzdCBvZiBlbGVtZW50IGNvbnRhaW5lcnMgdG8gbWF0Y2ggY2FuZGlkYXRlcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciBsaXN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge0l0ZXJhdGl2ZU9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtBcnJheS48RWxlbWVudHxDYW5kaWRhdGVzU2NvcGU+fVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkgPSBmdW5jdGlvbiAoXG4gIGVsZW1lbnRzLFxuICBpbmNsdWRlQ29udGFpbmVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICBjb25zdCBlbGVtZW50c1RvQ2hlY2sgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgd2hpbGUgKGVsZW1lbnRzVG9DaGVjay5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NMT1QnKSB7XG4gICAgICAvLyBhZGQgc2hhZG93IGRvbSBzbG90IHNjb3BlIChzbG90IGl0c2VsZiBjYW5ub3QgYmUgZm9jdXNhYmxlKVxuICAgICAgY29uc3QgYXNzaWduZWQgPSBlbGVtZW50LmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhc3NpZ25lZC5sZW5ndGggPyBhc3NpZ25lZCA6IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KGNvbnRlbnQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMuZmxhdHRlbikge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaGVjayBjYW5kaWRhdGUgZWxlbWVudFxuICAgICAgY29uc3QgdmFsaWRDYW5kaWRhdGUgPSBtYXRjaGVzLmNhbGwoZWxlbWVudCwgY2FuZGlkYXRlU2VsZWN0b3IpO1xuICAgICAgaWYgKFxuICAgICAgICB2YWxpZENhbmRpZGF0ZSAmJlxuICAgICAgICBvcHRpb25zLmZpbHRlcihlbGVtZW50KSAmJlxuICAgICAgICAoaW5jbHVkZUNvbnRhaW5lciB8fCAhZWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpXG4gICAgICApIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgc2hhZG93IGNvbnRlbnQgaWYgcG9zc2libGVcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPVxuICAgICAgICBlbGVtZW50LnNoYWRvd1Jvb3QgfHxcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICAodHlwZW9mIG9wdGlvbnMuZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIG9wdGlvbnMuZ2V0U2hhZG93Um9vdChlbGVtZW50KSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkU2hhZG93Um9vdCA9XG4gICAgICAgICFvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIgfHwgb3B0aW9ucy5zaGFkb3dSb290RmlsdGVyKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2hhZG93Um9vdCAmJiB2YWxpZFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gYWRkIHNoYWRvdyBkb20gc2NvcGUgSUlGIGEgc2hhZG93IHJvb3Qgbm9kZSB3YXMgZ2l2ZW47IG90aGVyd2lzZSwgYW4gdW5kaXNjbG9zZWRcbiAgICAgICAgLy8gIHNoYWRvdyBleGlzdHMsIHNvIGxvb2sgYXQgbGlnaHQgZG9tIGNoaWxkcmVuIGFzIGZhbGxiYWNrIEJVVCBjcmVhdGUgYSBzY29wZSBmb3IgYW55XG4gICAgICAgIC8vICBjaGlsZCBjYW5kaWRhdGVzIGZvdW5kIGJlY2F1c2UgdGhleSdyZSBsaWtlbHkgc2xvdHRlZCBlbGVtZW50cyAoZWxlbWVudHMgdGhhdCBhcmVcbiAgICAgICAgLy8gIGNoaWxkcmVuIG9mIHRoZSB3ZWIgY29tcG9uZW50IGVsZW1lbnQgKHdoaWNoIGhhcyB0aGUgc2hhZG93KSwgaW4gdGhlIGxpZ2h0IGRvbSwgYnV0XG4gICAgICAgIC8vICBzbG90dGVkIHNvbWV3aGVyZSBfaW5zaWRlXyB0aGUgdW5kaXNjbG9zZWQgc2hhZG93KSAtLSB0aGUgc2NvcGUgaXMgY3JlYXRlZCBiZWxvdyxcbiAgICAgICAgLy8gIF9hZnRlcl8gd2UgcmV0dXJuIGZyb20gdGhpcyByZWN1cnNpdmUgY2FsbFxuICAgICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFxuICAgICAgICAgIHNoYWRvd1Jvb3QgPT09IHRydWUgPyBlbGVtZW50LmNoaWxkcmVuIDogc2hhZG93Um9vdC5jaGlsZHJlbixcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKC4uLm5lc3RlZENhbmRpZGF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBzY29wZTogZWxlbWVudCxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm90IHNoYWRvdyBzbyBqdXN0IGRpZyBpbnRvIHRoZSBlbGVtZW50J3MgKGxpZ2h0IGRvbSkgY2hpbGRyZW5cbiAgICAgICAgLy8gIF9fd2l0aG91dF9fIGdpdmluZyB0aGUgZWxlbWVudCBzcGVjaWFsIHNjb3BlIHRyZWF0bWVudFxuICAgICAgICBlbGVtZW50c1RvQ2hlY2sudW5zaGlmdCguLi5lbGVtZW50LmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUYWJpbmRleCA9IGZ1bmN0aW9uIChub2RlLCBpc1Njb3BlKSB7XG4gIGlmIChub2RlLnRhYkluZGV4IDwgMCkge1xuICAgIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgICAvLyBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAgIC8vIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gICAgLy8gb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICAgIC8vIEFsc28gYnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAgIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAgIC8vXG4gICAgLy8gaXNTY29wZSBpcyBwb3NpdGl2ZSBmb3IgY3VzdG9tIGVsZW1lbnQgd2l0aCBzaGFkb3cgcm9vdCBvciBzbG90IHRoYXQgYnkgZGVmYXVsdFxuICAgIC8vIGhhdmUgdGFiSW5kZXggLTEsIGJ1dCBuZWVkIHRvIGJlIHNvcnRlZCBieSBkb2N1bWVudCBvcmRlciBpbiBvcmRlciBmb3IgdGhlaXJcbiAgICAvLyBjb250ZW50IHRvIGJlIGluc2VydGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKFxuICAgICAgKGlzU2NvcGUgfHxcbiAgICAgICAgL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KG5vZGUudGFnTmFtZSkgfHxcbiAgICAgICAgbm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkgJiZcbiAgICAgIGlzTmFOKHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5cbmNvbnN0IHNvcnRPcmRlcmVkVGFiYmFibGVzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIGEudGFiSW5kZXggPT09IGIudGFiSW5kZXhcbiAgICA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlclxuICAgIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXg7XG59O1xuXG5jb25zdCBpc0lucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJztcbn07XG5cbmNvbnN0IGlzSGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nO1xufTtcblxuY29uc3QgaXNEZXRhaWxzV2l0aFN1bW1hcnkgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCByID1cbiAgICBub2RlLnRhZ05hbWUgPT09ICdERVRBSUxTJyAmJlxuICAgIEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgLmFwcGx5KG5vZGUuY2hpbGRyZW4pXG4gICAgICAuc29tZSgoY2hpbGQpID0+IGNoaWxkLnRhZ05hbWUgPT09ICdTVU1NQVJZJyk7XG4gIHJldHVybiByO1xufTtcblxuY29uc3QgZ2V0Q2hlY2tlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGVzLCBmb3JtKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobm9kZXNbaV0uY2hlY2tlZCAmJiBub2Rlc1tpXS5mb3JtID09PSBmb3JtKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc1RhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoIW5vZGUubmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHJhZGlvU2NvcGUgPSBub2RlLmZvcm0gfHwgZ2V0Um9vdE5vZGUobm9kZSk7XG4gIGNvbnN0IHF1ZXJ5UmFkaW9zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gcmFkaW9TY29wZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIG5hbWUgKyAnXCJdJ1xuICAgICk7XG4gIH07XG5cbiAgbGV0IHJhZGlvU2V0O1xuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyh3aW5kb3cuQ1NTLmVzY2FwZShub2RlLm5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyhub2RlLm5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzJyxcbiAgICAgICAgZXJyLm1lc3NhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tlZCA9IGdldENoZWNrZWRSYWRpbyhyYWRpb1NldCwgbm9kZS5mb3JtKTtcbiAgcmV0dXJuICFjaGVja2VkIHx8IGNoZWNrZWQgPT09IG5vZGU7XG59O1xuXG5jb25zdCBpc1JhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzSW5wdXQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcblxuY29uc3QgaXNOb25UYWJiYWJsZVJhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzUmFkaW8obm9kZSkgJiYgIWlzVGFiYmFibGVSYWRpbyhub2RlKTtcbn07XG5cbmNvbnN0IGlzWmVyb0FyZWEgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDA7XG59O1xuY29uc3QgaXNIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSwgeyBkaXNwbGF5Q2hlY2ssIGdldFNoYWRvd1Jvb3QgfSkge1xuICAvLyBOT1RFOiB2aXNpYmlsaXR5IHdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgbm9kZSBpcyBkZXRhY2hlZCBmcm9tIHRoZSBkb2N1bWVudFxuICAvLyAgKHNlZSBub3RlcyBhYm91dCB0aGlzIGZ1cnRoZXIgZG93biksIHdoaWNoIG1lYW5zIHdlIHdpbGwgY29uc2lkZXIgaXQgdmlzaWJsZVxuICAvLyAgKHRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIGZyb20gYSB2ZXJ5IGxvbmcgd2F5IGJhY2spXG4gIC8vIE5PVEU6IHdlIGNoZWNrIHRoaXMgcmVnYXJkbGVzcyBvZiBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBiZWNhdXNlIHRoaXMgaXMgYVxuICAvLyAgX3Zpc2liaWxpdHlfIGNoZWNrLCBub3QgYSBfZGlzcGxheV8gY2hlY2tcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUobm9kZSkudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlyZWN0U3VtbWFyeSA9IG1hdGNoZXMuY2FsbChub2RlLCAnZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGUnKTtcbiAgY29uc3Qgbm9kZVVuZGVyRGV0YWlscyA9IGlzRGlyZWN0U3VtbWFyeSA/IG5vZGUucGFyZW50RWxlbWVudCA6IG5vZGU7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZVVuZGVyRGV0YWlscywgJ2RldGFpbHM6bm90KFtvcGVuXSkgKicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUaGUgcm9vdCBub2RlIGlzIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGUgbm9kZSBpcyBpbiBhIHNoYWRvdyBET007IHNvbWUgZG9jdW1lbnQgb3RoZXJ3aXNlXG4gIC8vICAoYnV0IE5PVCBfdGhlXyBkb2N1bWVudDsgc2VlIHNlY29uZCAnSWYnIGNvbW1lbnQgYmVsb3cgZm9yIG1vcmUpLlxuICAvLyBJZiByb290Tm9kZSBpcyBzaGFkb3cgcm9vdCwgaXQnbGwgaGF2ZSBhIGhvc3QsIHdoaWNoIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dcbiAgLy8gIGlzIGF0dGFjaGVkLCBhbmQgdGhlIG9uZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50IG9yIG5vdCAoYmVjYXVzZSB0aGVcbiAgLy8gIHNoYWRvdywgYW5kIGFsbCBub2RlcyBpdCBjb250YWlucywgaXMgbmV2ZXIgY29uc2lkZXJlZCBpbiB0aGUgZG9jdW1lbnQgc2luY2Ugc2hhZG93c1xuICAvLyAgYmVoYXZlIGxpa2Ugc2VsZi1jb250YWluZWQgRE9NczsgYnV0IGlmIHRoZSBzaGFkb3cncyBIT1NULCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudCxcbiAgLy8gIGlzIGhpZGRlbiwgb3IgaXMgbm90IGluIHRoZSBkb2N1bWVudCBpdHNlbGYgYnV0IGlzIGRldGFjaGVkLCBpdCB3aWxsIGFmZmVjdCB0aGUgc2hhZG93J3NcbiAgLy8gIHZpc2liaWxpdHksIGluY2x1ZGluZyBhbGwgdGhlIG5vZGVzIGl0IGNvbnRhaW5zKS4gVGhlIGhvc3QgY291bGQgYmUgYW55IG5vcm1hbCBub2RlLFxuICAvLyAgb3IgYSBjdXN0b20gZWxlbWVudCAoaS5lLiB3ZWIgY29tcG9uZW50KS4gRWl0aGVyIHdheSwgdGhhdCdzIHRoZSBvbmUgdGhhdCBpcyBjb25zaWRlcmVkXG4gIC8vICBwYXJ0IG9mIHRoZSBkb2N1bWVudCwgbm90IHRoZSBzaGFkb3cgcm9vdCwgbm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gKGkuZS4gdGhlIG5vZGUgYmVpbmdcbiAgLy8gIHRlc3RlZCkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIG5vdCBhIHNoYWRvdyByb290LCBpdCB3b24ndCBoYXZlIGEgaG9zdCwgYW5kIHNvIHJvb3ROb2RlIHNob3VsZCBiZSB0aGVcbiAgLy8gIGRvY3VtZW50IChwZXIgdGhlIGRvY3MpIGFuZCB3aGlsZSBpdCdzIGEgRG9jdW1lbnQtdHlwZSBvYmplY3QsIHRoYXQgZG9jdW1lbnQgZG9lcyBub3RcbiAgLy8gIGFwcGVhciB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbm9kZSdzIGBvd25lckRvY3VtZW50YCBmb3Igc29tZSByZWFzb24sIHNvIGl0J3Mgc2FmZXJcbiAgLy8gIHRvIGlnbm9yZSB0aGUgcm9vdE5vZGUgYXQgdGhpcyBwb2ludCwgYW5kIHVzZSBgbm9kZS5vd25lckRvY3VtZW50YC4gT3RoZXJ3aXNlLFxuICAvLyAgdXNpbmcgYHJvb3ROb2RlLmNvbnRhaW5zKG5vZGUpYCB3aWxsIF9hbHdheXNfIGJlIHRydWUgd2UnbGwgZ2V0IGZhbHNlLXBvc2l0aXZlcyB3aGVuXG4gIC8vICBub2RlIGlzIGFjdHVhbGx5IGRldGFjaGVkLlxuICBjb25zdCBub2RlUm9vdEhvc3QgPSBnZXRSb290Tm9kZShub2RlKS5ob3N0O1xuICBjb25zdCBub2RlSXNBdHRhY2hlZCA9XG4gICAgbm9kZVJvb3RIb3N0Py5vd25lckRvY3VtZW50LmNvbnRhaW5zKG5vZGVSb290SG9zdCkgfHxcbiAgICBub2RlLm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZSk7XG5cbiAgaWYgKCFkaXNwbGF5Q2hlY2sgfHwgZGlzcGxheUNoZWNrID09PSAnZnVsbCcpIHtcbiAgICBpZiAodHlwZW9mIGdldFNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBub2RlIHRvIGJlIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyBhbmQgdXNlIHRoZVxuICAgICAgLy8gICdub24temVyby1hcmVhJyBmYWxsYmFja1xuICAgICAgY29uc3Qgb3JpZ2luYWxOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZ2V0Um9vdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRFbGVtZW50ICYmXG4gICAgICAgICAgIXBhcmVudEVsZW1lbnQuc2hhZG93Um9vdCAmJlxuICAgICAgICAgIGdldFNoYWRvd1Jvb3QocGFyZW50RWxlbWVudCkgPT09IHRydWUgLy8gY2hlY2sgaWYgdGhlcmUncyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbm9kZSBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHdoaWNoIG1lYW5zIHdlIGNhbiBvbmx5IHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94LCBzbyB3ZVxuICAgICAgICAgIC8vICBmYWxsIGJhY2sgdG8gYSBub24temVyby1hcmVhIHRlc3RcbiAgICAgICAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmFzc2lnbmVkU2xvdCkge1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdXAgc2xvdFxuICAgICAgICAgIG5vZGUgPSBub2RlLmFzc2lnbmVkU2xvdDtcbiAgICAgICAgfSBlbHNlIGlmICghcGFyZW50RWxlbWVudCAmJiByb290Tm9kZSAhPT0gbm9kZS5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgLy8gY3Jvc3Mgc2hhZG93IGJvdW5kYXJ5XG4gICAgICAgICAgbm9kZSA9IHJvb3ROb2RlLmhvc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBub3JtYWwgZG9tXG4gICAgICAgICAgbm9kZSA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG9yaWdpbmFsTm9kZTtcbiAgICB9XG4gICAgLy8gZWxzZSwgYGdldFNoYWRvd1Jvb3RgIG1pZ2h0IGJlIHRydWUsIGJ1dCBhbGwgdGhhdCBkb2VzIGlzIGVuYWJsZSBzaGFkb3cgRE9NIHN1cHBvcnRcbiAgICAvLyAgKGkuZS4gaXQgZG9lcyBub3QgYWxzbyBwcmVzdW1lIHRoYXQgYWxsIG5vZGVzIG1pZ2h0IGhhdmUgdW5kaXNjbG9zZWQgc2hhZG93cyk7IG9yXG4gICAgLy8gIGl0IG1pZ2h0IGJlIGEgZmFsc3kgdmFsdWUsIHdoaWNoIG1lYW5zIHNoYWRvdyBET00gc3VwcG9ydCBpcyBkaXNhYmxlZFxuXG4gICAgLy8gU2luY2Ugd2UgZGlkbid0IGZpbmQgaXQgc2l0dGluZyBpbiBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgKG9yIHNoYWRvd3MgYXJlIGRpc2FibGVkKVxuICAgIC8vICBub3cgd2UgY2FuIGp1c3QgdGVzdCB0byBzZWUgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgdmlzaWJsZSBvciBub3QsIHByb3ZpZGVkIGl0J3NcbiAgICAvLyAgYXR0YWNoZWQgdG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAgLy8gTk9URTogV2UgbXVzdCBjb25zaWRlciBjYXNlIHdoZXJlIG5vZGUgaXMgaW5zaWRlIGEgc2hhZG93IERPTSBhbmQgZ2l2ZW4gZGlyZWN0bHkgdG9cbiAgICAvLyAgYGlzVGFiYmFibGUoKWAgb3IgYGlzRm9jdXNhYmxlKClgIC0tIHJlZ2FyZGxlc3Mgb2YgYGdldFNoYWRvd1Jvb3RgIG9wdGlvbiBzZXR0aW5nLlxuXG4gICAgaWYgKG5vZGVJc0F0dGFjaGVkKSB7XG4gICAgICAvLyB0aGlzIHdvcmtzIHdoZXJldmVyIHRoZSBub2RlIGlzOiBpZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjbGllbnQgcmVjdCwgaXQnc1xuICAgICAgLy8gIHNvbWVob3cgZGlzcGxheWVkOyBpdCBhbHNvIGNvdmVycyB0aGUgQ1NTICdkaXNwbGF5OiBjb250ZW50cycgY2FzZSB3aGVyZSB0aGVcbiAgICAgIC8vICBub2RlIGl0c2VsZiBpcyBoaWRkZW4gaW4gcGxhY2Ugb2YgaXRzIGNvbnRlbnRzOyBhbmQgdGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaFxuICAgICAgLy8gIHVwIHRoZSBoaWVyYXJjaHkgZWl0aGVyXG4gICAgICByZXR1cm4gIW5vZGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdGhlIG5vZGUgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50LCB3aGljaCBtZWFucyB0aGUgYGdldENsaWVudFJlY3RzKClgXG4gICAgLy8gIEFQSSB3aWxsIF9fYWx3YXlzX18gcmV0dXJuIHplcm8gcmVjdHMgKHRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIFJlYWN0XG4gICAgLy8gIGlzIHVzZWQgdG8gcmVuZGVyIG5vZGVzIG9udG8gYSBkZXRhY2hlZCB0cmVlLCBhcyBjb25maXJtZWQgaW4gdGhpcyB0aHJlYWQ6XG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTExNyNpc3N1ZWNvbW1lbnQtMjg0MjI4ODcwKVxuICAgIC8vXG4gICAgLy8gSXQgYWxzbyBtZWFucyB0aGF0IGV2ZW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZGlzcGxheSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYFxuICAgIC8vICBiZWNhdXNlIHN0eWxlcyBhcmUgb25seSBjb21wdXRlZCBmb3Igbm9kZXMgdGhhdCBhcmUgaW4gdGhlIGRvY3VtZW50LlxuICAgIC8vXG4gICAgLy8gTk9URTogVEhJUyBIQVMgQkVFTiBUSEUgQ0FTRSBGT1IgWUVBUlMuIEl0IGlzIG5vdCBuZXcsIG5vciBpcyBpdCBjYXVzZWQgYnkgdGFiYmFibGVcbiAgICAvLyAgc29tZWhvdy4gVGhvdWdoIGl0IHdhcyBuZXZlciBzdGF0ZWQgb2ZmaWNpYWxseSwgYW55b25lIHdobyBoYXMgZXZlciB1c2VkIHRhYmJhYmxlXG4gICAgLy8gIEFQSXMgb24gbm9kZXMgaW4gZGV0YWNoZWQgY29udGFpbmVycyBoYXMgYWN0dWFsbHkgaW1wbGljaXRseSB1c2VkIHRhYmJhYmxlIGluIHdoYXRcbiAgICAvLyAgd2FzIGxhdGVyIChhcyBvZiB2NS4yLjAgb24gQXByIDksIDIwMjEpIGNhbGxlZCBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBtb2RlIC0tIGVzc2VudGlhbGx5XG4gICAgLy8gIGNvbnNpZGVyaW5nIF9fZXZlcnl0aGluZ19fIHRvIGJlIHZpc2libGUgYmVjYXVzZSBvZiB0aGUgaW5uYWJpbGl0eSB0byBkZXRlcm1pbmUgc3R5bGVzLlxuICB9IGVsc2UgaWYgKGRpc3BsYXlDaGVjayA9PT0gJ25vbi16ZXJvLWFyZWEnKSB7XG4gICAgLy8gTk9URTogRXZlbiB0aG91Z2ggdGhpcyB0ZXN0cyB0aGF0IHRoZSBub2RlJ3MgY2xpZW50IHJlY3QgaXMgbm9uLXplcm8gdG8gZGV0ZXJtaW5lXG4gICAgLy8gIHdoZXRoZXIgaXQncyBkaXNwbGF5ZWQsIGFuZCB0aGF0IGEgZGV0YWNoZWQgbm9kZSB3aWxsIF9fYWx3YXlzX18gaGF2ZSBhIHplcm8tYXJlYVxuICAgIC8vICBjbGllbnQgcmVjdCwgd2UgZG9uJ3Qgc3BlY2lhbC1jYXNlIGZvciB3aGV0aGVyIHRoZSBub2RlIGlzIGF0dGFjaGVkIG9yIG5vdC4gSW5cbiAgICAvLyAgdGhpcyBtb2RlLCB3ZSBkbyB3YW50IHRvIGNvbnNpZGVyIG5vZGVzIHRoYXQgaGF2ZSBhIHplcm8gYXJlYSB0byBiZSBoaWRkZW4gYXQgYWxsXG4gICAgLy8gIHRpbWVzLCBhbmQgdGhhdCBpbmNsdWRlcyBhdHRhY2hlZCBvciBub3QuXG4gICAgcmV0dXJuIGlzWmVyb0FyZWEobm9kZSk7XG4gIH1cblxuICAvLyB2aXNpYmxlLCBhcyBmYXIgYXMgd2UgY2FuIHRlbGwsIG9yIHBlciBjdXJyZW50IGBkaXNwbGF5Q2hlY2tgIG1vZGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gZm9ybSBmaWVsZHMgKG5lc3RlZCkgaW5zaWRlIGEgZGlzYWJsZWQgZmllbGRzZXQgYXJlIG5vdCBmb2N1c2FibGUvdGFiYmFibGVcbi8vICB1bmxlc3MgdGhleSBhcmUgaW4gdGhlIF9maXJzdF8gPGxlZ2VuZD4gZWxlbWVudCBvZiB0aGUgdG9wLW1vc3QgZGlzYWJsZWRcbi8vICBmaWVsZHNldFxuY29uc3QgaXNEaXNhYmxlZEZyb21GaWVsZHNldCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICgvXihJTlBVVHxCVVRUT058U0VMRUNUfFRFWFRBUkVBKSQvLnRlc3Qobm9kZS50YWdOYW1lKSkge1xuICAgIGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIC8vIGNoZWNrIGlmIGBub2RlYCBpcyBjb250YWluZWQgaW4gYSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlLnRhZ05hbWUgPT09ICdGSUVMRFNFVCcgJiYgcGFyZW50Tm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAvLyBsb29rIGZvciB0aGUgZmlyc3QgPGxlZ2VuZD4gYW1vbmcgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IDxsZWdlbmQ+IChpbiBkb2N1bWVudCBvcmRlcikgaXMgZm91bmRcbiAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gJ0xFR0VORCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0cyBwYXJlbnQgPGZpZWxkc2V0PiBpcyBub3QgbmVzdGVkIGluIGFub3RoZXIgZGlzYWJsZWQgPGZpZWxkc2V0PixcbiAgICAgICAgICAgIC8vIHJldHVybiB3aGV0aGVyIGBub2RlYCBpcyBhIGRlc2NlbmRhbnQgb2YgaXRzIGZpcnN0IDxsZWdlbmQ+XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5jYWxsKHBhcmVudE5vZGUsICdmaWVsZHNldFtkaXNhYmxlZF0gKicpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6ICFjaGlsZC5jb250YWlucyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhlIGRpc2FibGVkIDxmaWVsZHNldD4gY29udGFpbmluZyBgbm9kZWAgaGFzIG5vIDxsZWdlbmQ+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICAvLyBlbHNlLCBub2RlJ3MgdGFiYmFibGUvZm9jdXNhYmxlIHN0YXRlIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgYSBmaWVsZHNldCdzXG4gIC8vICBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgbm9kZS5kaXNhYmxlZCB8fFxuICAgIGlzSGlkZGVuSW5wdXQobm9kZSkgfHxcbiAgICBpc0hpZGRlbihub2RlLCBvcHRpb25zKSB8fFxuICAgIC8vIEZvciBhIGRldGFpbHMgZWxlbWVudCB3aXRoIGEgc3VtbWFyeSwgdGhlIHN1bW1hcnkgZWxlbWVudCBnZXRzIHRoZSBmb2N1c1xuICAgIGlzRGV0YWlsc1dpdGhTdW1tYXJ5KG5vZGUpIHx8XG4gICAgaXNEaXNhYmxlZEZyb21GaWVsZHNldChub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHx8XG4gICAgZ2V0VGFiaW5kZXgobm9kZSkgPCAwIHx8XG4gICAgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSA9IGZ1bmN0aW9uIChzaGFkb3dIb3N0Tm9kZSkge1xuICBjb25zdCB0YWJJbmRleCA9IHBhcnNlSW50KHNoYWRvd0hvc3ROb2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuICBpZiAoaXNOYU4odGFiSW5kZXgpIHx8IHRhYkluZGV4ID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJZiBhIGN1c3RvbSBlbGVtZW50IGhhcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSB0YWJpbmRleCxcbiAgLy8gYnJvd3NlcnMgd2lsbCBub3QgYWxsb3cgdGFiIHRhcmdldGluZyBzYWlkIGVsZW1lbnQncyBjaGlsZHJlbi5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIEVsZW1lbnRbXVxuICovXG5jb25zdCBzb3J0QnlPcmRlciA9IGZ1bmN0aW9uIChjYW5kaWRhdGVzKSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJiYWJsZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYmJhYmxlcyA9IFtdO1xuICBjYW5kaWRhdGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICBjb25zdCBpc1Njb3BlID0gISFpdGVtLnNjb3BlO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBpc1Njb3BlID8gaXRlbS5zY29wZSA6IGl0ZW07XG4gICAgY29uc3QgY2FuZGlkYXRlVGFiaW5kZXggPSBnZXRUYWJpbmRleChlbGVtZW50LCBpc1Njb3BlKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGlzU2NvcGUgPyBzb3J0QnlPcmRlcihpdGVtLmNhbmRpZGF0ZXMpIDogZWxlbWVudDtcbiAgICBpZiAoY2FuZGlkYXRlVGFiaW5kZXggPT09IDApIHtcbiAgICAgIGlzU2NvcGVcbiAgICAgICAgPyByZWd1bGFyVGFiYmFibGVzLnB1c2goLi4uZWxlbWVudHMpXG4gICAgICAgIDogcmVndWxhclRhYmJhYmxlcy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiYmFibGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogY2FuZGlkYXRlVGFiaW5kZXgsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGlzU2NvcGU6IGlzU2NvcGUsXG4gICAgICAgIGNvbnRlbnQ6IGVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3JkZXJlZFRhYmJhYmxlc1xuICAgIC5zb3J0KHNvcnRPcmRlcmVkVGFiYmFibGVzKVxuICAgIC5yZWR1Y2UoKGFjYywgc29ydGFibGUpID0+IHtcbiAgICAgIHNvcnRhYmxlLmlzU2NvcGVcbiAgICAgICAgPyBhY2MucHVzaCguLi5zb3J0YWJsZS5jb250ZW50KVxuICAgICAgICA6IGFjYy5wdXNoKHNvcnRhYmxlLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAuY29uY2F0KHJlZ3VsYXJUYWJiYWJsZXMpO1xufTtcblxuY29uc3QgdGFiYmFibGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGNhbmRpZGF0ZXM7XG4gIGlmIChvcHRpb25zLmdldFNoYWRvd1Jvb3QpIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFtlbF0sIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lciwge1xuICAgICAgZmlsdGVyOiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgICAgZ2V0U2hhZG93Um9vdDogb3B0aW9ucy5nZXRTaGFkb3dSb290LFxuICAgICAgc2hhZG93Um9vdEZpbHRlcjogaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlLmJpbmQobnVsbCwgb3B0aW9ucylcbiAgICApO1xuICB9XG4gIHJldHVybiBzb3J0QnlPcmRlcihjYW5kaWRhdGVzKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IHRydWUsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXMoXG4gICAgICBlbCxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcixcbiAgICAgIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGlzVGFiYmFibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBjYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5jb25zdCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnNcbiAgLmNvbmNhdCgnaWZyYW1lJylcbiAgLmpvaW4oJywnKTtcblxuY29uc3QgaXNGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG9wdGlvbnMsIG5vZGUpO1xufTtcblxuZXhwb3J0IHsgdGFiYmFibGUsIGZvY3VzYWJsZSwgaXNUYWJiYWJsZSwgaXNGb2N1c2FibGUgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBFTlRFUiA9ICdFbnRlcic7XG5leHBvcnQgdmFyIFNQQUNFID0gJyAnO1xuZXhwb3J0IHZhciBFU0NBUEUgPSAnRXNjYXBlJztcbmV4cG9ydCB2YXIgVEFCID0gJ1RhYic7XG5leHBvcnQgdmFyIEJBQ0tTUEFDRSA9ICdCYWNrc3BhY2UnO1xuZXhwb3J0IHZhciBGMiA9ICdGMic7XG5leHBvcnQgdmFyIEFMVCA9ICdBbHQnO1xuZXhwb3J0IHZhciBTSElGVCA9ICdTaGlmdCc7XG5leHBvcnQgdmFyIENUUkwgPSAnQ29udHJvbCc7XG5leHBvcnQgdmFyIE1FVEEgPSAnTWV0YSc7IC8vIFdpbmRvd3MsIENvbW1hbmQsIE9wdGlvblxuXG5leHBvcnQgdmFyIEFSUk9XX0RPV04gPSAnQXJyb3dEb3duJztcbmV4cG9ydCB2YXIgQVJST1dfVVAgPSAnQXJyb3dVcCc7XG5leHBvcnQgdmFyIEFSUk9XX0xFRlQgPSAnQXJyb3dMZWZ0JztcbmV4cG9ydCB2YXIgQVJST1dfUklHSFQgPSAnQXJyb3dSaWdodCc7XG5leHBvcnQgdmFyIFBBR0VfVVAgPSAnUGFnZVVwJztcbmV4cG9ydCB2YXIgUEFHRV9ET1dOID0gJ1BhZ2VEb3duJztcbmV4cG9ydCB2YXIgRU5EID0gJ0VuZCc7XG5leHBvcnQgdmFyIEhPTUUgPSAnSG9tZSc7XG5leHBvcnQgdmFyIGtleXM7XG5cbihmdW5jdGlvbiAoa2V5cykge1xuICBrZXlzW1wiRU5URVJcIl0gPSBcIkVudGVyXCI7XG4gIGtleXNbXCJTUEFDRVwiXSA9IFwiIFwiO1xuICBrZXlzW1wiRVNDQVBFXCJdID0gXCJFc2NhcGVcIjtcbiAga2V5c1tcIlRBQlwiXSA9IFwiVGFiXCI7XG4gIGtleXNbXCJCQUNLU1BBQ0VcIl0gPSBcIkJhY2tzcGFjZVwiO1xuICBrZXlzW1wiRjJcIl0gPSBcIkYyXCI7XG4gIGtleXNbXCJBTFRcIl0gPSBcIkFsdFwiO1xuICBrZXlzW1wiU0hJRlRcIl0gPSBcIlNoaWZ0XCI7XG4gIGtleXNbXCJDVFJMXCJdID0gXCJDb250cm9sXCI7XG4gIGtleXNbXCJNRVRBXCJdID0gXCJNZXRhXCI7XG4gIGtleXNbXCJBUlJPV19ET1dOXCJdID0gXCJBcnJvd0Rvd25cIjtcbiAga2V5c1tcIkFSUk9XX1VQXCJdID0gXCJBcnJvd1VwXCI7XG4gIGtleXNbXCJBUlJPV19MRUZUXCJdID0gXCJBcnJvd0xlZnRcIjtcbiAga2V5c1tcIkFSUk9XX1JJR0hUXCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIGtleXNbXCJQQUdFX1VQXCJdID0gXCJQYWdlVXBcIjtcbiAga2V5c1tcIlBBR0VfRE9XTlwiXSA9IFwiUGFnZURvd25cIjtcbiAga2V5c1tcIkVORFwiXSA9IFwiRW5kXCI7XG4gIGtleXNbXCJIT01FXCJdID0gXCJIb21lXCI7XG59KShrZXlzIHx8IChrZXlzID0ge30pKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBrZXlzIGFyZSB1c2VkIGZvciBuYXZpZ2F0aW5nIGNhc2NhZGluZyBtZW51IFVJIGNvbXBvbmVudHMuXG4gKlxuICogQVJST1dfRE9XTjogU2VsZWN0IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gKiBBUlJPV19MRUZUOiBTaG93IHRoZSBwcmV2aW91cyBtZW51LlxuICogQVJST1dfUklHSFQ6IFNob3cgdGhlIG5leHQgbWVudSBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gKiBBUlJPV19VUDogU2VsZWN0IHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBsaXN0LlxuICogRVNDOiBEZXNlbGVjdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gYW5kIGhpZGUgdGhlIGxpc3QuXG4gKiBUQUI6IE5vcm1hbCB0YWJiaW5nIG5hdmlnYXRpb24gaXMgc3RpbGwgc3VwcG9ydGVkLlxuICovXG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEVTQ0FQRSwgVEFCIH0gZnJvbSAnLi4va2V5cyc7XG5leHBvcnQgdmFyIGNhc2NhZGluZ01lbnVLZXlzID0ge1xuICBBUlJPV19ET1dOOiBBUlJPV19ET1dOLFxuICBBUlJPV19MRUZUOiBBUlJPV19MRUZULFxuICBBUlJPV19SSUdIVDogQVJST1dfUklHSFQsXG4gIEFSUk9XX1VQOiBBUlJPV19VUCxcbiAgRVNDQVBFOiBFU0NBUEUsXG4gIFRBQjogVEFCXG59OyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLCAiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJpbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnLi9zdHJpbmdpZnkuanMnOyAvLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbnZhciBfbm9kZUlkO1xuXG52YXIgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG52YXIgX2xhc3RNU2VjcyA9IDA7XG52YXIgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgdmFyIHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIHZhciBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICB2YXIgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBzdHJpbmdpZnkoYik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHYxOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdjEgYXMgdXVpZHYxIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBpZHMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSwgYnV0IHByZWRpY3RhYmxlIGlkcyB0byBwYWlyIGxhYmVsc1xuICogd2l0aCB0aGVpciBpbnB1dHMuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHByZWZpeCBhcyBhIHBhcmFtZXRlci4gSWYgeW91IGRvbid0XG4gKiBzcGVjaWZ5IGl0LCBpdCBnZW5lcmF0ZXMgYSByYW5kb20gaWQgcHJlZml4LiBJZiB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBwcmVmaXhcbiAqIGl0IHNob3VsZCBiZWdpbiB3aXRoIGFuIGxldHRlciB0byBiZSBIVE1MNCBjb21wbGlhbnQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxJZEdlbmVyYXRvcigpIHtcbiAgdmFyIGlkUHJlZml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIHN0YXRpY1V1aWQgPSB1dWlkdjEoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWRTdWZmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICAgIHZhciBwcmVmaXggPSBcIlwiLmNvbmNhdChpZFByZWZpeCkuY29uY2F0KGlkUHJlZml4ICE9PSAnJyA/ICdfJyA6ICdpJyk7XG4gICAgdmFyIHN1ZmZpeCA9IGlkU3VmZml4ID8gXCJfXCIuY29uY2F0KGlkU3VmZml4KSA6ICcnO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChzdWZmaXggPyBzdGF0aWNVdWlkIDogdXVpZHYxKCkpLmNvbmNhdChzdWZmaXgpO1xuICB9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBtZW1vaXplZCBJRCB0aGF0IHJlbWFpbnMgc3RhdGljIHVudGlsIGNvbXBvbmVudCB1bm1vdW50LlxuICogVGhpcyBwcmV2ZW50cyBJRHMgZnJvbSBiZWluZyByZS1yYW5kb21pemVkIG9uIGV2ZXJ5IGNvbXBvbmVudCB1cGRhdGUuXG4gKi9cblxuZXhwb3J0IHZhciB1c2VHZW5lcmF0ZWRIdG1sSWQgPSBmdW5jdGlvbiB1c2VHZW5lcmF0ZWRIdG1sSWQoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIHByZWZpeCA9IF9yZWYucHJlZml4LFxuICAgICAgc3VmZml4ID0gX3JlZi5zdWZmaXgsXG4gICAgICBjb25kaXRpb25hbElkID0gX3JlZi5jb25kaXRpb25hbElkO1xuXG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBodG1sSWRHZW5lcmF0b3IocHJlZml4KShzdWZmaXgpO1xuICB9LCBbY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIExFRlRfQUxJR05NRU5UID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBSSUdIVF9BTElHTk1FTlQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBDRU5URVJfQUxJR05NRU5UID0gJ2NlbnRlcic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFzc2VydE5ldmVyID0gZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIFwiLmNvbmNhdCh4KSk7XG59OyAvLyB1dGlsaXR5IHR5cGVzOlxuXG4vKipcbiAqIFhPUiBmb3Igc29tZSBwcm9wZXJ0aWVzIGFwcGxpZWQgdG8gYSB0eXBlXG4gKiAoWE9SIGlzIG9uZSBvZiB0aGVzZSBidXQgbm90IGJvdGggb3IgbmVpdGhlcilcbiAqXG4gKiBVc2FnZTogT25lT2Y8dHlwZVRvRXh0ZW5kLCBvbmUgfCBidXQgfCBub3QgfCBtdWx0aXBsZSB8IG9mIHwgdGhlc2UgfCBhcmUgfCByZXF1aXJlZD5cbiAqXG4gKiBUbyByZXF1aXJlIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGJ1dCBub3QgYm90aFxuICogRXhhbXBsZTogT25lT2Y8VHlwZSwgJ2FyaWEtbGFiZWwnIHwgJ2FyaWEtbGFiZWxsZWRieSc+XG4gKi9cblxuLyoqXG4gKiBXcmFwcyBPYmplY3Qua2V5cyB3aXRoIHByb3BlciB0eXBlc2NyaXB0IGRlZmluaXRpb24gb2YgdGhlIHJlc3VsdGluZyBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c09mKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cbi8qKlxuICogTGlrZSBga2V5b2YgdHlwZW9mYCwgYnV0IGZvciBnZXR0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIGtleXNcbiAqIFZhbHVlT2Y8dHlwZW9mIHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9PlxuICogUmVzdWx0cyBpbiBgJ3ZhbHVlMScgfCAndmFsdWUyJ2BcbiAqLyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBicmVha3BvaW50ID0ge1xuICB4bDogMTIwMCxcbiAgbDogOTkyLFxuICBtOiA3NjgsXG4gIHM6IDU3NSxcbiAgeHM6IDBcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuZXhwb3J0IHZhciBCUkVBS1BPSU5UUyA9IGJyZWFrcG9pbnQ7XG5leHBvcnQgdmFyIEJSRUFLUE9JTlRfS0VZUyA9IGtleXNPZihCUkVBS1BPSU5UUyk7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIG9iamVjdCBvZiBgRXVpQnJlYWtwb2ludHNgLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBrZXlcbiAqIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aWR0aFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBOYW1lIG9mIHRoZSBicmVha3BvaW50IGtleSBvciBgdW5kZWZpbmVkYCBpZiBhIGtleSBkb2Vzbid0IGV4aXN0XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFrcG9pbnQod2lkdGgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBCUkVBS1BPSU5UUztcbiAgLy8gRmluZCB0aGUgYnJlYWtwb2ludCAoa2V5KSB3aG9zZSB2YWx1ZSBpcyA8PSB3aW5kb3dXaWR0aCBzdGFydGluZyB3aXRoIGxhcmdlc3QgZmlyc3RcbiAgcmV0dXJuIEJSRUFLUE9JTlRfS0VZUy5maW5kKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludHNba2V5XSA8PSB3aWR0aDtcbiAgfSk7XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWF4IGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtYXhcbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGJlbG93XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWF4IFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtYXhgIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NYXhCcmVha3BvaW50KHdpZHRoLCBtYXgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1heCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPD0gbWF4O1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPD0gYnJlYWtwb2ludHNbbWF4XSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWluIGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtaW5cbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGFib3ZlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWluIFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtaW5gIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NaW5CcmVha3BvaW50KHdpZHRoLCBtaW4pIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPj0gbWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPj0gYnJlYWtwb2ludHNbbWluXSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cyxcbiAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlIGlmIHRoZSBgd2lkdGhgIGZhbGxzIHdpdGhpblxuICogYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludFNpemVbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbkJyZWFrcG9pbnRzKHdpZHRoLCBzaXplcykge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSBnZXRCcmVha3BvaW50KHdpZHRoLCBicmVha3BvaW50cyk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vdGhlbWUnO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tICcuLi90aHJvdHRsZSc7XG5pbXBvcnQgeyBnZXRCcmVha3BvaW50IH0gZnJvbSAnLi9icmVha3BvaW50JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG4vKipcbiAqIFRvcCBsZXZlbCBwcm92aWRlciAobmVzdGVkIHdpdGhpbiBFdWlQcm92aWRlcikgd2hpY2ggcHJvdmlkZXMgYSBzaW5nbGVcbiAqIHJlc2l6ZSBsaXN0ZW5lciB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBiYXNlZCBvbiB3aW5kb3cgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgPSBmdW5jdGlvbiBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICAgIGJyZWFrcG9pbnRzID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpIDogdW5kZWZpbmVkKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgY3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uV2luZG93UmVzaXplID0gdGhyb3R0bGUoZnVuY3Rpb24gKCkge1xuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQoZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpKTtcbiAgICB9LCA1MCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2JyZWFrcG9pbnRzXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjdXJyZW50QnJlYWtwb2ludFxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS90aGVtZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX01PREUsIGdldENvbXB1dGVkIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChFdWlUaGVtZUFtc3RlcmRhbSk7XG5leHBvcnQgdmFyIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IHZhciBFdWlDb2xvck1vZGVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZ2V0Q29tcHV0ZWQoRXVpVGhlbWVBbXN0ZXJkYW0sIHt9LCBERUZBVUxUX0NPTE9SX01PREUpKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfU1RBTkRBUkQgPSB7XG4gIGxpZ2h0OiAnTElHSFQnLFxuICBkYXJrOiAnREFSSydcbn07XG5leHBvcnQgdmFyIENPTE9SX01PREVTX0lOVkVSU0UgPSAnSU5WRVJTRSc7IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJELCBDT0xPUl9NT0RFU19JTlZFUlNFIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdmFyIERFRkFVTFRfQ09MT1JfTU9ERSA9IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBhbiBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBvYmogLSBBbnl0aGluZ1xuICovXG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqICYmIF90eXBlb2Yob2JqKSA9PT0gJ29iamVjdCc7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNvbG9yIG1vZGUgaXMgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCwgYGRhcmtgLCBvciBgaW52ZXJzZWBcbiAqL1xuXG5cbmV4cG9ydCB2YXIgaXNJbnZlcnNlQ29sb3JNb2RlID0gZnVuY3Rpb24gaXNJbnZlcnNlQ29sb3JNb2RlKGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19JTlZFUlNFO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29sb3IgbW9kZSBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IEV1aVRoZW1lUHJvdmlkZXIuXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnQgY29sb3IgbW9kZSBpZiBub25lIGlzIGV4cGxpY2l0eSBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb01vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudENvbG9yTW9kZSAtIGBMSUdIVGAgb3IgYERBUktgOyB1c2VkIGFzIHRoZSBmYWxsYmFja1xuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29sb3JNb2RlID0gZnVuY3Rpb24gZ2V0Q29sb3JNb2RlKGNvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSB7XG4gIGlmIChjb2xvck1vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJlbnRDb2xvck1vZGUgfHwgREVGQVVMVF9DT0xPUl9NT0RFO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBjb2xvck1vZGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAoaXNJbnZlcnNlQ29sb3JNb2RlKG1vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayB8fCBwYXJlbnRDb2xvck1vZGUgPT09IHVuZGVmaW5lZCA/IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0IDogQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyaztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvbiBhbiBvYmplY3QuXG4gKiBJZiBgY29sb3JNb2RlYCBpcyBwcm92aWRlZCwgd2lsbCBzY29wZSB0aGUgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbG9yIG1vZGUga2V5IChMSUdIVFxcREFSSylcbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCBvciBgZGFya2BcbiAqL1xuXG5leHBvcnQgdmFyIGdldE9uID0gZnVuY3Rpb24gZ2V0T24obW9kZWwsIF9wYXRoLCBjb2xvck1vZGUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuXG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2xvck1vZGUgJiYgbm9kZS5oYXNPd25Qcm9wZXJ0eShjb2xvck1vZGUpID09PSB0cnVlICYmIG5vZGVbY29sb3JNb2RlXS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdIGluc3RhbmNlb2YgQ29tcHV0ZWQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbY29sb3JNb2RlXVtzZWdtZW50XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVbc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XS5nZXRWYWx1ZShudWxsLCBudWxsLCBub2RlLCBjb2xvck1vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gc3RyaW5nIC0gIFRoZSB2YWx1ZSB0byBzZXRcbiAqL1xuXG5leHBvcnQgdmFyIHNldE9uID0gZnVuY3Rpb24gc2V0T24obW9kZWwsIF9wYXRoLCB2YWx1ZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG5cbiAgdmFyIHByb3BlcnR5TmFtZSA9IHBhdGgucG9wKCk7XG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIG5vZGVbc2VnbWVudF0gPSB7fTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgfVxuXG4gIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBjbGFzcyB0byBzdG9yZSB0aGUgYGNvbXB1dGVyYCBtZXRob2QgYW5kIGl0cyBldmVudHVhbCBwYXJhbWV0ZXJzLlxuICogQWxsb3dzIGZvciBvbi1kZW1hbmQgY29tcHV0YXRpb24gd2l0aCB1cC10by1kYXRlIHBhcmFtZXRlcnMgdmlhIGBnZXRWYWx1ZWAgbWV0aG9kLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wdXRlciAtIEZ1bmN0aW9uIHRvIGJlIGNvbXB1dGVkXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBEZXBlbmRlbmNpZXMgcGFzc2VkIHRvIHRoZSBgY29tcHV0ZXJgIGFzIHBhcmFtZXRlcnNcbiAqL1xuXG5leHBvcnQgdmFyIENvbXB1dGVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcHV0ZWQoY29tcHV0ZXIpIHtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wdXRlZCk7XG5cbiAgICB0aGlzLmNvbXB1dGVyID0gY29tcHV0ZXI7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0aGVtZVxuICAgKiBieSB0YWtpbmcgaW50byBhY2NvdW50IHByZXZpb3VzbHkgY29tcHV0ZWQgdmFsdWVzIGFuZCBtb2RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBiYXNlIC0gQ29tcHV0ZWQgb3IgdW5jb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBtb2RpZmljYXRpb25zIC0gVGhlbWUgdmFsdWUgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB3b3JraW5nIC0gUGFydGlhbGx5IGNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhDb21wdXRlZCwgW3tcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoYmFzZSkge1xuICAgICAgdmFyIG1vZGlmaWNhdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHdvcmtpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBjb2xvck1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmRlcGVuZGVuY2llcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIod29ya2luZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRlcGVuZGVuY2llcykpIHtcbiAgICAgICAgdmFyIF9yZWYsIF9nZXRPbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcigoX3JlZiA9IChfZ2V0T24gPSBnZXRPbih3b3JraW5nLCB0aGlzLmRlcGVuZGVuY2llcykpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogZ2V0T24obW9kaWZpY2F0aW9ucywgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBnZXRPbihiYXNlLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKHRoaXMuZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgICB2YXIgX3JlZjIsIF9nZXRPbjI7XG5cbiAgICAgICAgcmV0dXJuIChfcmVmMiA9IChfZ2V0T24yID0gZ2V0T24od29ya2luZywgZGVwZW5kZW5jeSkpICE9PSBudWxsICYmIF9nZXRPbjIgIT09IHZvaWQgMCA/IF9nZXRPbjIgOiBnZXRPbihtb2RpZmljYXRpb25zLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBnZXRPbihiYXNlLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb21wdXRlZDtcbn0oKTtcbi8qKlxuICogUmV0dXJucyBhIENsYXNzIChgQ29tcHV0ZWRgKSB0aGF0IHN0b3JlcyB0aGUgYXJiaXRyYXJ5IGNvbXB1dGVyIG1ldGhvZFxuICogYW5kIHJlZmVyZW5jZXMgdG8gaXRzIG9wdGlvbmFsIGRlcGVuZGVjaWVzLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcHV0ZXIgLSBBcmJpdHJhcnkgbWV0aG9kIHRvIGJlIGNhbGxlZCBhdCBjb21wdXRlIHRpbWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBWYWx1ZXMgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGBjb21wdXRlcmAgYXQgY29tcHV0ZSB0aW1lLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChjb21wLCBkZXApIHtcbiAgcmV0dXJuIG5ldyBDb21wdXRlZChjb21wLCBkZXApO1xufVxuLyoqXG4gKiBUYWtlcyBhbiB1bmNvbXB1dGVkIHRoZW1lLCBhbmQgY29tcHV0ZXMgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB0YWtpbmdcbiAqIGludG8gY29uc2lkZXJhdGlvbiB2YWx1ZSBvdmVycmlkZXMgYW5kIGNvbmZpZ3VyZWQgY29sb3IgbW9kZS5cbiAqIE92ZXJyaWRlcyB0YWtlIHByZWNlZGVuY2UsIGFuZCBvbmx5IHZhbHVlcyBpbiB0aGUgY3VycmVudCBjb2xvciBtb2RlXG4gKiBhcmUgY29tcHV0ZWQgYW5kIHJldHVybmVkLlxuICogQHBhcmFtIHtQcm94eX0gYmFzZSAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gb3ZlciAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29tcHV0ZWQgPSBmdW5jdGlvbiBnZXRDb21wdXRlZChiYXNlLCBvdmVyLCBjb2xvck1vZGUpIHtcbiAgdmFyIG91dHB1dCA9IHtcbiAgICB0aGVtZU5hbWU6IGJhc2Uua2V5XG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcChiYXNlLCBvdmVyKSB7XG4gICAgdmFyIGNoZWNrRXhpc3RpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIHZhciBwYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgT2JqZWN0LmtleXMoYmFzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbmV3UGF0aCA9IHBhdGggPyBcIlwiLmNvbmNhdChwYXRoLCBcIi5cIikuY29uY2F0KGtleSkgOiBcIlwiLmNvbmNhdChrZXkpOyAvLyBAdHMtZXhwZWN0LWVycm9yIGBrZXlgIGlzIG5vdCBuZWNlc3NhcmlseSBhIGNvbG9yTW9kZSBrZXlcblxuICAgICAgaWYgKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LnZhbHVlcyhDT0xPUl9NT0RFU19TVEFOREFSRCkpLCBbY29sb3JNb2RlXSkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBjb2xvck1vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbG9yTW9kZVNlZ21lbnQgPSBuZXcgUmVnRXhwKFwiKFxcXFwuXCIuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcYil8KFxcXFxiXCIpLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXC4pXCIpKTtcbiAgICAgICAgICBuZXdQYXRoID0gbmV3UGF0aC5yZXBsYWNlKGNvbG9yTW9kZVNlZ21lbnQsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXhpc3RpbmcgPSBjaGVja0V4aXN0aW5nICYmIGdldE9uKG91dHB1dCwgbmV3UGF0aCk7XG5cbiAgICAgIGlmICghZXhpc3RpbmcgfHwgaXNPYmplY3QoZXhpc3RpbmcpKSB7XG4gICAgICAgIHZhciBiYXNlVmFsdWUgPSBiYXNlW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IGJhc2Vba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogYmFzZVtrZXldO1xuICAgICAgICB2YXIgb3ZlclZhbHVlID0gb3ZlcltrZXldIGluc3RhbmNlb2YgQ29tcHV0ZWQgPyBvdmVyW2tleV0uZ2V0VmFsdWUoYmFzZS5yb290LCBvdmVyLnJvb3QsIG91dHB1dCwgY29sb3JNb2RlKSA6IG92ZXJba2V5XTtcblxuICAgICAgICBpZiAoaXNPYmplY3QoYmFzZVZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheShiYXNlVmFsdWUpKSB7XG4gICAgICAgICAgbG9vcChiYXNlVmFsdWUsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IHt9LCBjaGVja0V4aXN0aW5nLCBuZXdQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRPbihvdXRwdXQsIG5ld1BhdGgsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IGJhc2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSAvLyBDb21wdXRlIHN0YW5kYXJkIHRoZW1lIHZhbHVlcyBhbmQgYXBwbHkgb3ZlcnJpZGVzXG5cblxuICBsb29wKGJhc2UsIG92ZXIpOyAvLyBDb21wdXRlIGFuZCBhcHBseSBleHRlbnNpb24gdmFsdWVzIG9ubHlcblxuICBsb29wKG92ZXIsIHt9LCB0cnVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIFByb3h5IHdpdGggYSBjdXN0b20gYGhhbmRsZXJgIGRlc2lnbmVkIHRvIHNlbGYtcmVmZXJlbmNlIHZhbHVlc1xuICogYW5kIHByZXZlbnQgYXJiaXRyYXJ5IHZhbHVlIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqL1xuXG5leHBvcnQgdmFyIGJ1aWxkVGhlbWUgPSBmdW5jdGlvbiBidWlsZFRoZW1lKG1vZGVsLCBrZXkpIHtcbiAgdmFyIGhhbmRsZXIgPSB7XG4gICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsLCBwcm90b3R5cGUpO1xuICAgIH0sXG4gICAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5tb2RlbCwga2V5KTtcbiAgICB9LFxuICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQubW9kZWwsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQubW9kZWwsIHByb3BlcnR5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KF90YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdrZXknKSB7XG4gICAgICAgIHJldHVybiBfdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH0gLy8gcHJldmVudCBTYWZhcmkgZnJvbSBsb2NraW5nIHVwIHdoZW4gdGhlIHByb3h5IGlzIHVzZWQgaW4gZGV2IHRvb2xzXG4gICAgICAvLyBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgZ2V0UHJvdG90eXBlT2ZcblxuXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4ge307XG4gICAgICB2YXIgdGFyZ2V0ID0gcHJvcGVydHkgPT09ICdyb290JyA/IF90YXJnZXQgOiBfdGFyZ2V0Lm1vZGVsIHx8IF90YXJnZXQ7IC8vIEB0cy1pZ25vcmUgYHN0cmluZ2AgaW5kZXggc2lnbmF0dXJlXG5cbiAgICAgIHZhciB2YWx1ZSA9IHRhcmdldFtwcm9wZXJ0eV07XG5cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoe1xuICAgICAgICAgIG1vZGVsOiB2YWx1ZSxcbiAgICAgICAgICByb290OiBfdGFyZ2V0LnJvb3QsXG4gICAgICAgICAga2V5OiBcIl9cIi5jb25jYXQoX3RhcmdldC5rZXkpXG4gICAgICAgIH0sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIG93bktleXM6IGZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfTtcbiAgdmFyIHRoZW1lUHJveHkgPSBuZXcgUHJveHkoe1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICByb290OiBtb2RlbCxcbiAgICBrZXk6IGtleVxuICB9LCBoYW5kbGVyKTtcbiAgcmV0dXJuIHRoZW1lUHJveHk7XG59O1xuLyoqXG4gKiBEZWVwbHkgbWVyZ2VzIHR3byBvYmplY3RzLCB1c2luZyBgc291cmNlYCB2YWx1ZXMgd2hlbmV2ZXIgcG9zc2libGUuXG4gKiBAcGFyYW0ge29iamVjdH0gX3RhcmdldCAtIE9iamVjdCB3aXRoIGZhbGxiYWNrIHZhbHVlc1xuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIE9iamVjdCB3aXRoIGRlc2lyZWQgdmFsdWVzXG4gKi9cblxuZXhwb3J0IHZhciBtZXJnZURlZXAgPSBmdW5jdGlvbiBtZXJnZURlZXAoX3RhcmdldCkge1xuICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgdGFyZ2V0ID0gX29iamVjdFNwcmVhZCh7fSwgX3RhcmdldCk7XG5cbiAgaWYgKCFpc09iamVjdCh0YXJnZXQpIHx8ICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICBpZiAoaXNPYmplY3QodGFyZ2V0VmFsdWUpICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0VmFsdWUpLCBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2VWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGlmIHRoZSBzcGVjaWZpZWQgY29sb3IgaXMgXCJkYXJrXCIsIHdoaWNoIHVzdWFsbHkgbWVhbnNcbiAqIHlvdSBuZWVkIGxpZ2h0IHRleHQgaWYgeW91IHVzZSBpdCBhcyBhIGJhY2tncm91bmQgY29sb3IgdG8gZnVsZmlsbCBXQ0FHIGNvbnRyYXN0XG4gKiByZXF1aXJlbWVudC5cbiAqIFRoZSBjb2xvciBtdXN0IGJlIHNwZWNpZmllZCB2aWEgaXRzIHJlZCwgZ3JlZW4gYW5kIGJsdWUgdmFsdWUgaW4gdGhlIHJhbmdlIG9mXG4gKiAwIHRvIDI1NS5cbiAqIFRoZSBmb3JtdWxhIGlzIGJhc2VkIG9uIHRoaXMgU3RhY2tvdmVyZmxvdyBhbnN3ZXI6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTQzMDIzXG4gKiB3aGljaCBpdHNlbGYgaXMgYmFzZWQgdXBvbiB0aGUgV0NBRyByZWNvbW1lbmRhdGlvbiBmb3IgY29sb3IgY29udHJhc3QuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJlZCBUaGUgcmVkIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiBUaGUgZ3JlZW4gY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgVGhlIGJsdWUgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbG9yIGlzIGRhcmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JEYXJrKHJlZCwgZ3JlZW4sIGJsdWUpIHtcbiAgdmFyIF9tYXAkbWFwID0gW3JlZCwgZ3JlZW4sIGJsdWVdLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIC8gMjU1LjA7XG4gIH0pLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIDw9IDAuMDM5MjggPyBjIC8gMTIuOTIgOiBNYXRoLnBvdygoYyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICB9KSxcbiAgICAgIF9tYXAkbWFwMiA9IF9zbGljZWRUb0FycmF5KF9tYXAkbWFwLCAzKSxcbiAgICAgIHIgPSBfbWFwJG1hcDJbMF0sXG4gICAgICBnID0gX21hcCRtYXAyWzFdLFxuICAgICAgYiA9IF9tYXAkbWFwMlsyXTtcblxuICB2YXIgbHVtaW5hbmNlID0gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICByZXR1cm4gbHVtaW5hbmNlIDw9IDAuMTc5O1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4KSB7XG4gIHJldHVybiAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xufSIsICJpbXBvcnQgeyBtaW4sIG1heCB9IGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoeCwgbG93ID0gMCwgaGlnaCA9IDEpID0+IHtcbiAgICByZXR1cm4gbWluKG1heChsb3csIHgpLCBoaWdoKTtcbn07XG4iLCAiaW1wb3J0IGxpbWl0IGZyb20gJy4vbGltaXQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAocmdiKSA9PiB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgMykge1xuICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJnYjtcbn07XG4iLCAiLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5jb25zdCBjbGFzc1RvVHlwZSA9IHt9O1xuZm9yIChsZXQgbmFtZSBvZiBbXG4gICAgJ0Jvb2xlYW4nLFxuICAgICdOdW1iZXInLFxuICAgICdTdHJpbmcnLFxuICAgICdGdW5jdGlvbicsXG4gICAgJ0FycmF5JyxcbiAgICAnRGF0ZScsXG4gICAgJ1JlZ0V4cCcsXG4gICAgJ1VuZGVmaW5lZCcsXG4gICAgJ051bGwnXG5dKSB7XG4gICAgY2xhc3NUb1R5cGVbYFtvYmplY3QgJHtuYW1lfV1gXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8ICdvYmplY3QnO1xufVxuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzLCBrZXlPcmRlciA9IG51bGwpID0+IHtcbiAgICAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcbiAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgIC8vIGFuZCB1c2UgdGhlIGtleU9yZGVyIHN0cmluZyB0byBleHRyYWN0IGFuZCBzb3J0IHByb3BlcnRpZXNcbiAgICBpZiAodHlwZShhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgICAgICByZXR1cm4ga2V5T3JkZXJcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGspID0+IGFyZ3NbMF1ba10gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5tYXAoKGspID0+IGFyZ3NbMF1ba10pO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICByZXR1cm4gYXJnc1swXTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgZnJvbSAnLi90eXBlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGFyZ3MpID0+IHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsID0gYXJncy5sZW5ndGggLSAxO1xuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBudWxsO1xufTtcbiIsICJjb25zdCB7IFBJLCBtaW4sIG1heCB9ID0gTWF0aDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGlwX3JnYiB9IGZyb20gJy4vY2xpcF9yZ2IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsaW1pdCB9IGZyb20gJy4vbGltaXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlIH0gZnJvbSAnLi90eXBlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5wYWNrIH0gZnJvbSAnLi91bnBhY2suanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsYXN0IH0gZnJvbSAnLi9sYXN0LmpzJztcblxuY29uc3QgVFdPUEkgPSBQSSAqIDI7XG5jb25zdCBQSVRISVJEID0gUEkgLyAzO1xuY29uc3QgREVHMlJBRCA9IFBJIC8gMTgwO1xuY29uc3QgUkFEMkRFRyA9IDE4MCAvIFBJO1xuXG5leHBvcnQgeyBQSSwgVFdPUEksIFBJVEhJUkQsIERFRzJSQUQsIFJBRDJERUcsIG1pbiwgbWF4IH07XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbn07XG4iLCAiaW1wb3J0IHsgbGFzdCwgY2xpcF9yZ2IsIHR5cGUgfSBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBfaW5wdXQgZnJvbSAnLi9pby9pbnB1dC5qcyc7XG5cbmNsYXNzIENvbG9yIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIGxldCBtb2RlID0gbGFzdChhcmdzKTtcbiAgICAgICAgbGV0IGF1dG9kZXRlY3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydCgoYSwgYikgPT4gYi5wIC0gYS5wKTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yIChsZXQgY2hrIG9mIF9pbnB1dC5hdXRvZGV0ZWN0KSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgY29uc3QgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGF1dG9kZXRlY3QgPyBhcmdzIDogYXJncy5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtZS5fcmdiID0gY2xpcF9yZ2IocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIG1lLl9yZ2IucHVzaCgxKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0eXBlKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLl9yZ2Iuam9pbignLCcpfV1gO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwgIi8vIHRoaXMgZ2V0cyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNi4wJztcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuY29uc3QgY2hyb21hID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gbmV3IGNocm9tYS5Db2xvciguLi5hcmdzKTtcbn07XG5cbmNocm9tYS5Db2xvciA9IENvbG9yO1xuY2hyb21hLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBjbXlrMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgIGNvbnN0IFtjLCBtLCB5LCBrXSA9IGFyZ3M7XG4gICAgY29uc3QgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICBpZiAoayA9PT0gMSkgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgcmV0dXJuIFtcbiAgICAgICAgYyA+PSAxID8gMCA6IDI1NSAqICgxIC0gYykgKiAoMSAtIGspLCAvLyByXG4gICAgICAgIG0gPj0gMSA/IDAgOiAyNTUgKiAoMSAtIG0pICogKDEgLSBrKSwgLy8gZ1xuICAgICAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICAgICAgYWxwaGFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY215azJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtYXggfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJjbXlrID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByID0gciAvIDI1NTtcbiAgICBnID0gZyAvIDI1NTtcbiAgICBiID0gYiAvIDI1NTtcbiAgICBjb25zdCBrID0gMSAtIG1heChyLCBtYXgoZywgYikpO1xuICAgIGNvbnN0IGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICBjb25zdCBjID0gKDEgLSByIC0gaykgKiBmO1xuICAgIGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAqIGY7XG4gICAgY29uc3QgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNteWs7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY215azJyZ2IgZnJvbSAnLi9jbXlrMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmNteWsgZnJvbSAnLi9yZ2IyY215ay5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmNteWsgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjbXlrJyk7XG5cbmlucHV0LmZvcm1hdC5jbXlrID0gY215azJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3Qgcm5kID0gKGEpID0+IE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSBoc2wyY3NzKGgscyxsKVxuICogLSBoc2wyY3NzKGgscyxsLGEpXG4gKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICovXG5jb25zdCBoc2wyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoc2xhID0gdW5wYWNrKGFyZ3MsICdoc2xhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdsc2EnO1xuICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICBoc2xhWzFdID0gcm5kKGhzbGFbMV0gKiAxMDApICsgJyUnO1xuICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSAqIDEwMCkgKyAnJSc7XG4gICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSkge1xuICAgICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHNsYS5sZW5ndGggPSAzO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtoc2xhLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBtaW4sIG1heCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc2wocixnLGIpXG4gKiAtIHJnYjJoc2wocixnLGIsYSlcbiAqIC0gcmdiMmhzbChbcixnLGJdKVxuICogLSByZ2IyaHNsKFtyLGcsYixhXSlcbiAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcblxuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuXG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcblxuICAgIGNvbnN0IGwgPSAobWF4UmdiICsgbWluUmdiKSAvIDI7XG4gICAgbGV0IHMsIGg7XG5cbiAgICBpZiAobWF4UmdiID09PSBtaW5SZ2IpIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPVxuICAgICAgICAgICAgbCA8IDAuNVxuICAgICAgICAgICAgICAgID8gKG1heFJnYiAtIG1pblJnYikgLyAobWF4UmdiICsgbWluUmdiKVxuICAgICAgICAgICAgICAgIDogKG1heFJnYiAtIG1pblJnYikgLyAoMiAtIG1heFJnYiAtIG1pblJnYik7XG4gICAgfVxuXG4gICAgaWYgKHIgPT0gbWF4UmdiKSBoID0gKGcgLSBiKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIGVsc2UgaWYgKGcgPT0gbWF4UmdiKSBoID0gMiArIChiIC0gcikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChiID09IG1heFJnYikgaCA9IDQgKyAociAtIGcpIC8gKG1heFJnYiAtIG1pblJnYik7XG5cbiAgICBoICo9IDYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGhzbDJjc3MgZnJvbSAnLi9oc2wyY3NzLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4uL2hzbC9yZ2IyaHNsLmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyY3NzKHIsZyxiKVxuICogLSByZ2IyY3NzKHIsZyxiLGEpXG4gKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gKiAtIHJnYjJjc3Moe3IsZyxiLGF9LCBtb2RlKVxuICovXG5jb25zdCByZ2IyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdyZ2InO1xuICAgIGlmIChtb2RlLnN1YnN0cigwLCAzKSA9PSAnaHNsJykge1xuICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsKHJnYmEpLCBtb2RlKTtcbiAgICB9XG4gICAgcmdiYVswXSA9IHJvdW5kKHJnYmFbMF0pO1xuICAgIHJnYmFbMV0gPSByb3VuZChyZ2JhWzFdKTtcbiAgICByZ2JhWzJdID0gcm91bmQocmdiYVsyXSk7XG4gICAgaWYgKG1vZGUgPT09ICdyZ2JhJyB8fCAocmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSkge1xuICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAncmdiYSc7XG4gICAgfVxuICAgIHJldHVybiBgJHttb2RlfSgke3JnYmEuc2xpY2UoMCwgbW9kZSA9PT0gJ3JnYicgPyAzIDogNCkuam9pbignLCcpfSlgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNzcztcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCBoc2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICBjb25zdCBbaCwgcywgbF0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdDMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgY29uc3QgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICBjb25zdCBoXyA9IGggLyAzNjA7XG4gICAgICAgIHQzWzBdID0gaF8gKyAxIC8gMztcbiAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgdDNbMl0gPSBoXyAtIDEgLyAzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgdDNbaV0gKz0gMTtcbiAgICAgICAgICAgIGlmICh0M1tpXSA+IDEpIHQzW2ldIC09IDE7XG4gICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQyO1xuICAgICAgICAgICAgZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDNbaV0pICogNjtcbiAgICAgICAgICAgIGVsc2UgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyb3VuZChjWzBdICogMjU1KSwgcm91bmQoY1sxXSAqIDI1NSksIHJvdW5kKGNbMl0gKiAyNTUpXTtcbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzWzNdXTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJyZ2I7XG4iLCAiaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi4vaHNsL2hzbDJyZ2IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcblxuY29uc3QgUkVfUkdCID0gL15yZ2JcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9SR0JfUENUID1cbiAgICAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbmNvbnN0IFJFX1JHQkFfUENUID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9IU0wgPVxuICAgIC9eaHNsXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9IU0xBID1cbiAgICAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcblxuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgY3NzMnJnYiA9IChjc3MpID0+IHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gcm91bmQocmdiW2ldICogMi41NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmdiWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYmEoMTAwJSwwJSwwJSwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA1KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9ICtyZ2JbM107XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTCkpKSB7XG4gICAgICAgIGNvbnN0IGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICBoc2xbMl0gKj0gMC4wMTtcbiAgICAgICAgY29uc3QgcmdiID0gaHNsMnJnYihoc2wpO1xuICAgICAgICByZ2JbM10gPSAxO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbGEoMCwxMDAlLDUwJSwwLjUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxufTtcblxuY3NzMnJnYi50ZXN0ID0gKHMpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICBSRV9SR0IudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQkFfUENULnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMQS50ZXN0KHMpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNzczJyZ2I7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgcmdiMmNzcyBmcm9tICcuL3JnYjJjc3MuanMnO1xuaW1wb3J0IGNzczJyZ2IgZnJvbSAnLi9jc3MycmdiLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5jc3MgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjc3MnKTtcblxuaW5wdXQuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoaCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmlucHV0LmZvcm1hdC5nbCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbn07XG5cbmNocm9tYS5nbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2dsJyk7XG5cbkNvbG9yLnByb3RvdHlwZS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xufTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG4vKlxuICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICpcbiAqIGh1ZS4uIFswLi4zNjBdXG4gKiBjaHJvbWEgLi4gWzAuLjFdXG4gKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAqL1xuXG5jb25zdCBoY2cycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICBsZXQgW2gsIGMsIF9nXSA9IGFyZ3M7XG4gICAgbGV0IHIsIGcsIGI7XG4gICAgX2cgPSBfZyAqIDI1NTtcbiAgICBjb25zdCBfYyA9IGMgKiAyNTU7XG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSBfZyAqICgxIC0gYyk7XG4gICAgICAgIGNvbnN0IHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICBjb25zdCB0ID0gcCArIF9jICogZjtcbiAgICAgICAgY29uc3QgdiA9IHAgKyBfYztcbiAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHQsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtxLCB2LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgdiwgdF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHEsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt0LCBwLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgcCwgcV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoY2cycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWF4LCBtaW4gfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJoY2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heFJnYiAtIG1pblJnYjtcbiAgICBjb25zdCBjID0gKGRlbHRhICogMTAwKSAvIDI1NTtcbiAgICBjb25zdCBfZyA9IChtaW5SZ2IgLyAoMjU1IC0gZGVsdGEpKSAqIDEwMDtcbiAgICBsZXQgaDtcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHIgPT09IG1heFJnYikgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIH1cbiAgICByZXR1cm4gW2gsIGMsIF9nXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoY2c7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGNnMnJnYiBmcm9tICcuL2hjZzJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoY2cgZnJvbSAnLi9yZ2IyaGNnLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhjZyA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjZycpO1xuXG5pbnB1dC5mb3JtYXQuaGNnID0gaGNnMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAxLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hjZycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiY29uc3QgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbmNvbnN0IFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG5jb25zdCBoZXgycmdiID0gKGhleCkgPT4ge1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYKSkge1xuICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9IHUgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSB1ICYgMHhmZjtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYQSkpIHtcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9XG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMF0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzFdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFsyXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdICtcbiAgICAgICAgICAgICAgICBoZXhbM107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICBjb25zdCByID0gKHUgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgY29uc3QgZyA9ICh1ID4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLnJvdW5kKCgodSAmIDB4ZmYpIC8gMHhmZikgKiAxMDApIC8gMTAwO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFdO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gaGV4IGNvbG9yOiAke2hleH1gKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhleDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhleCA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiLCBhXSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnYXV0byc7XG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgYSA9IDE7XG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICB9XG4gICAgciA9IHJvdW5kKHIpO1xuICAgIGcgPSByb3VuZChnKTtcbiAgICBiID0gcm91bmQoYik7XG4gICAgY29uc3QgdSA9IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjtcbiAgICBsZXQgc3RyID0gJzAwMDAwMCcgKyB1LnRvU3RyaW5nKDE2KTsgLy8jLnRvVXBwZXJDYXNlKCk7XG4gICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgbGV0IGh4YSA9ICcwJyArIHJvdW5kKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICBzd2l0Y2ggKG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfSR7aHhhfWA7XG4gICAgICAgIGNhc2UgJ2FyZ2InOlxuICAgICAgICAgICAgcmV0dXJuIGAjJHtoeGF9JHtzdHJ9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfWA7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhleDtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuL2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi9yZ2IyaGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXgodGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5oZXggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoZXgnKTtcblxuaW5wdXQuZm9ybWF0LmhleCA9IGhleDJyZ2I7XG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXJlc3QubGVuZ3RoICYmXG4gICAgICAgICAgICB0eXBlKGgpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgWzMsIDQsIDUsIDYsIDcsIDgsIDldLmluZGV4T2YoaC5sZW5ndGgpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIGxpbWl0LCBUV09QSSwgUElUSElSRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgY29zIH0gPSBNYXRoO1xuXG4vKlxuICogaHVlIFswLi4zNjBdXG4gKiBzYXR1cmF0aW9uIFswLi4xXVxuICogaW50ZW5zaXR5IFswLi4xXVxuICovXG5jb25zdCBoc2kycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvaHNpMnJnYi5jcHBcbiAgICAqL1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzaScpO1xuICAgIGxldCBbaCwgcywgaV0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuXG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBpZiAoaXNOYU4ocykpIHMgPSAwO1xuICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICBoIC89IDM2MDtcbiAgICBpZiAoaCA8IDEgLyAzKSB7XG4gICAgICAgIGIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgciA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICAgIGggLT0gMSAvIDM7XG4gICAgICAgIHIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgZyA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggLT0gMiAvIDM7XG4gICAgICAgIGcgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgYiA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cbiAgICByID0gbGltaXQoaSAqIHIgKiAzKTtcbiAgICBnID0gbGltaXQoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQoaSAqIGIgKiAzKTtcbiAgICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBUV09QSSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWluLCBzcXJ0LCBhY29zIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyaHNpID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAqL1xuICAgIGxldCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIGxldCBoO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgaSA9IChyICsgZyArIGIpIC8gMztcbiAgICBjb25zdCBzID0gaSA+IDAgPyAxIC0gbWluXyAvIGkgOiAwO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGggPSBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgICAgaCAvPSBzcXJ0KChyIC0gZykgKiAociAtIGcpICsgKHIgLSBiKSAqIChnIC0gYikpO1xuICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgaWYgKGIgPiBnKSB7XG4gICAgICAgICAgICBoID0gVFdPUEkgLSBoO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gVFdPUEk7XG4gICAgfVxuICAgIHJldHVybiBbaCAqIDM2MCwgcywgaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNpO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzaTJyZ2IgZnJvbSAnLi9oc2kycmdiLmpzJztcbmltcG9ydCByZ2IyaHNpIGZyb20gJy4vcmdiMmhzaS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2kgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2knKTtcblxuaW5wdXQuZm9ybWF0LmhzaSA9IGhzaTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi9oc2wycmdiLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4vcmdiMmhzbC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2wodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2wnKTtcblxuaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgZmxvb3IgfSA9IE1hdGg7XG5cbmNvbnN0IGhzdjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgIGxldCBbaCwgcywgdl0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICBjb25zdCBpID0gZmxvb3IoaCk7XG4gICAgICAgIGNvbnN0IGYgPSBoIC0gaTtcbiAgICAgICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICBjb25zdCBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgICBjb25zdCB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaHN2MnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgbWF4IH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmhzdihyLGcsYilcbiAqIC0gcmdiMmhzdihbcixnLGJdKVxuICogLSByZ2IyaHN2KHtyLGcsYn0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGxldCBbciwgZywgYl0gPSBhcmdzO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgbWF4XyA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIGxldCBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgaWYgKG1heF8gPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgIGlmIChyID09PSBtYXhfKSBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgICBpZiAoZyA9PT0gbWF4XykgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhfKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaHN2MnJnYiBmcm9tICcuL2hzdjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoc3YgZnJvbSAnLi9yZ2IyaHN2LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhzdiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hzdicpO1xuXG5pbnB1dC5mb3JtYXQuaHN2ID0gaHN2MnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgIEtuOiAxOCxcblxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3LFxuICAgIFluOiAxLFxuICAgIFpuOiAxLjA4ODgzLFxuXG4gICAgdDA6IDAuMTM3OTMxMDM0LCAvLyA0IC8gMjlcbiAgICB0MTogMC4yMDY4OTY1NTIsIC8vIDYgLyAyOVxuICAgIHQyOiAwLjEyODQxODU1LCAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcbn07XG4iLCAiaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi9sYWItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3QgbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gYXJncztcbiAgICBsZXQgeCwgeSwgeiwgciwgZywgYl87XG5cbiAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgeCA9IGlzTmFOKGEpID8geSA6IHkgKyBhIC8gNTAwO1xuICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgIHkgPSBMQUJfQ09OU1RBTlRTLlluICogbGFiX3h5eih5KTtcbiAgICB4ID0gTEFCX0NPTlNUQU5UUy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IExBQl9DT05TVEFOVFMuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcbiAgICBnID0geHl6X3JnYigtMC45NjkyNjYgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2ICogeik7XG4gICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICByZXR1cm4gW3IsIGcsIGJfLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5jb25zdCB4eXpfcmdiID0gKHIpID0+IHtcbiAgICByZXR1cm4gMjU1ICogKHIgPD0gMC4wMDMwNCA/IDEyLjkyICogciA6IDEuMDU1ICogcG93KHIsIDEgLyAyLjQpIC0gMC4wNTUpO1xufTtcblxuY29uc3QgbGFiX3h5eiA9ICh0KSA9PiB7XG4gICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTLnQxXG4gICAgICAgID8gdCAqIHQgKiB0XG4gICAgICAgIDogTEFCX0NPTlNUQU5UUy50MiAqICh0IC0gTEFCX0NPTlNUQU5UUy50MCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsYWIycmdiO1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmxhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbeCwgeSwgel0gPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIGNvbnN0IGwgPSAxMTYgKiB5IC0gMTY7XG4gICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbn07XG5cbmNvbnN0IHJnYl94eXogPSAocikgPT4ge1xuICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHJldHVybiByIC8gMTIuOTI7XG4gICAgcmV0dXJuIHBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufTtcblxuY29uc3QgeHl6X2xhYiA9ICh0KSA9PiB7XG4gICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTLnQzKSByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMudDIgKyBMQUJfQ09OU1RBTlRTLnQwO1xufTtcblxuY29uc3QgcmdiMnh5eiA9IChyLCBnLCBiKSA9PiB7XG4gICAgciA9IHJnYl94eXoocik7XG4gICAgZyA9IHJnYl94eXooZyk7XG4gICAgYiA9IHJnYl94eXooYik7XG4gICAgY29uc3QgeCA9IHh5el9sYWIoXG4gICAgICAgICgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5YblxuICAgICk7XG4gICAgY29uc3QgeSA9IHh5el9sYWIoXG4gICAgICAgICgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1ICogYikgLyBMQUJfQ09OU1RBTlRTLlluXG4gICAgKTtcbiAgICBjb25zdCB6ID0geHl6X2xhYihcbiAgICAgICAgKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MiAqIGcgKyAwLjk1MDMwNDEgKiBiKSAvIExBQl9DT05TVEFOVFMuWm5cbiAgICApO1xuICAgIHJldHVybiBbeCwgeSwgel07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGFiO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi9sYWIycmdiLmpzJztcbmltcG9ydCByZ2IybGFiIGZyb20gJy4vcmdiMmxhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsYWIodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5sYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsYWInKTtcblxuaW5wdXQuZm9ybWF0LmxhYiA9IGxhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGFiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgREVHMlJBRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmNvbnN0IGxjaDJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgKi9cbiAgICBsZXQgW2wsIGMsIGhdID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBpZiAoaXNOYU4oaCkpIGggPSAwO1xuICAgIGggPSBoICogREVHMlJBRDtcbiAgICByZXR1cm4gW2wsIGNvcyhoKSAqIGMsIHNpbihoKSAqIGNdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuL2xjaDJsYWIuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi4vbGFiL2xhYjJyZ2IuanMnO1xuXG5jb25zdCBsY2gycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBjb25zdCBbbCwgYywgaF0gPSBhcmdzO1xuICAgIGNvbnN0IFtMLCBhLCBiX10gPSBsY2gybGFiKGwsIGMsIGgpO1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IGxhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuXG5jb25zdCBoY2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoY2wgPSB1bnBhY2soYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYiguLi5oY2wpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNsMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIFJBRDJERUcgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNxcnQsIGF0YW4yLCByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgbGFiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBjID0gc3FydChhICogYSArIGIgKiBiKTtcbiAgICBsZXQgaCA9IChhdGFuMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgIGlmIChyb3VuZChjICogMTAwMDApID09PSAwKSBoID0gTnVtYmVyLk5hTjtcbiAgICByZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMmxjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuLi9sYWIvcmdiMmxhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuL2xhYjJsY2guanMnO1xuXG5jb25zdCByZ2IybGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2IybGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuaW1wb3J0IGhjbDJyZ2IgZnJvbSAnLi9oY2wycmdiLmpzJztcbmltcG9ydCByZ2IybGNoIGZyb20gJy4vcmdiMmxjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTtcbn07XG5Db2xvci5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xufTtcblxuY2hyb21hLmxjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2xjaCcpO1xuY2hyb21hLmhjbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjbCcpO1xuXG5pbnB1dC5mb3JtYXQubGNoID0gbGNoMnJnYjtcbmlucHV0LmZvcm1hdC5oY2wgPSBoY2wycmdiO1xuWydsY2gnLCAnaGNsJ10uZm9yRWFjaCgobSkgPT5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuKTtcbiIsICIvKipcblx0WDExIGNvbG9yIG5hbWVzXG5cblx0aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4qL1xuXG5jb25zdCB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgY3JpbXNvbjogJyNkYzE0M2MnLFxuICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgbGltZTogJyMwMGZmMDAnLFxuICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgcGVydTogJyNjZDg1M2YnLFxuICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICBwdXJwbGUzOiAnI2EwMjBmMCcsXG4gICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgIHJlZDogJyNmZjAwMDAnLFxuICAgIHJvc3licm93bjogJyNiYzhmOGYnLFxuICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgc2FsbW9uOiAnI2ZhODA3MicsXG4gICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgc2Vhc2hlbGw6ICcjZmZmNWVlJyxcbiAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICBza3libHVlOiAnIzg3Y2VlYicsXG4gICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gICAgc25vdzogJyNmZmZhZmEnLFxuICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgc3RlZWxibHVlOiAnIzQ2ODJiNCcsXG4gICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgdGVhbDogJyMwMDgwODAnLFxuICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICB2aW9sZXQ6ICcjZWU4MmVlJyxcbiAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgd2hpdGVzbW9rZTogJyNmNWY1ZjUnLFxuICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHczY3gxMTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB3M2N4MTEgZnJvbSAnLi4vLi4vY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuLi9oZXgvaGV4MnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhleCBmcm9tICcuLi9oZXgvcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgZm9yIChsZXQgbiBvZiBPYmplY3Qua2V5cyh3M2N4MTEpKSB7XG4gICAgICAgIGlmICh3M2N4MTFbbl0gPT09IGhleCkgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5cbmlucHV0LmZvcm1hdC5uYW1lZCA9IChuYW1lKSA9PiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodzNjeDExW25hbWVdKSByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pO1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBudW0ycmdiID0gKG51bSkgPT4ge1xuICAgIGlmICh0eXBlKG51bSkgPT0gJ251bWJlcicgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4ZmZmZmZmKSB7XG4gICAgICAgIGNvbnN0IHIgPSBudW0gPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAobnVtID4+IDgpICYgMHhmZjtcbiAgICAgICAgY29uc3QgYiA9IG51bSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBudW0gY29sb3I6ICcgKyBudW0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJudW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJudW07XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IG51bTJyZ2IgZnJvbSAnLi9udW0ycmdiLmpzJztcbmltcG9ydCByZ2IybnVtIGZyb20gJy4vcmdiMm51bS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5udW0gPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdudW0nKTtcblxuaW5wdXQuZm9ybWF0Lm51bSA9IG51bTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPj0gMCAmJlxuICAgICAgICAgICAgYXJnc1swXSA8PSAweGZmZmZmZlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuQ29sb3IucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQgPSB0cnVlKSB7XG4gICAgaWYgKHJuZCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMyk7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKS5tYXAocm91bmQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgNCkubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpIDwgMyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kKHYpKSA6IHY7XG4gICAgfSk7XG59O1xuXG5jaHJvbWEucmdiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAncmdiJyk7XG5cbmlucHV0LmZvcm1hdC5yZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYmEgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSByZ2JhWzNdID0gMTtcbiAgICByZXR1cm4gcmdiYTtcbn07XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJncykgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlKGFyZ3NbM10pID09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbM10gPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdIDw9IDEpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgIi8qXG4gKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gKi9cblxuY29uc3QgeyBsb2cgfSA9IE1hdGg7XG5cbmNvbnN0IHRlbXBlcmF0dXJlMnJnYiA9IChrZWx2aW4pID0+IHtcbiAgICBjb25zdCB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgciA9IDI1NTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICB0ZW1wIDwgNlxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtXG4gICAgICAgICAgICAgICAgICAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgK1xuICAgICAgICAgICAgICAgICAgMTA0LjQ5MjE2MTk5MzkzODg4ICogbG9nKGcpO1xuICAgICAgICBiID1cbiAgICAgICAgICAgIHRlbXAgPCAyMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTI1NC43NjkzNTE4NDEyMDkwMiArXG4gICAgICAgICAgICAgICAgICAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgK1xuICAgICAgICAgICAgICAgICAgMTE1LjY3OTk0NDAxMDY2MTQ3ICogbG9nKGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHIgPVxuICAgICAgICAgICAgMzUxLjk3NjkwNTY2ODA1NjkzICtcbiAgICAgICAgICAgIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wIC0gNTUpIC1cbiAgICAgICAgICAgIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgICBnID1cbiAgICAgICAgICAgIDMyNS40NDk0MTI1NzExOTc0ICtcbiAgICAgICAgICAgIDAuMDc5NDM0NTY1MzY2NjIzNDIgKiAoZyA9IHRlbXAgLSA1MCkgLVxuICAgICAgICAgICAgMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyhnKTtcbiAgICAgICAgYiA9IDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBlcmF0dXJlMnJnYjtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICoqL1xuXG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJ0ZW1wZXJhdHVyZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCByID0gcmdiWzBdLFxuICAgICAgICBiID0gcmdiWzJdO1xuICAgIGxldCBtaW5UZW1wID0gMTAwMDtcbiAgICBsZXQgbWF4VGVtcCA9IDQwMDAwO1xuICAgIGNvbnN0IGVwcyA9IDAuNDtcbiAgICBsZXQgdGVtcDtcbiAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgdGVtcCA9IChtYXhUZW1wICsgbWluVGVtcCkgKiAwLjU7XG4gICAgICAgIGNvbnN0IHJnYiA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgaWYgKHJnYlsyXSAvIHJnYlswXSA+PSBiIC8gcikge1xuICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm91bmQodGVtcCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IydGVtcGVyYXR1cmU7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCByZ2IydGVtcGVyYXR1cmUgZnJvbSAnLi9yZ2IydGVtcGVyYXR1cmUuanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IucHJvdG90eXBlLnRlbXBlcmF0dXJlID1cbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgICAgICB9O1xuXG5jaHJvbWEudGVtcCA9XG4gICAgY2hyb21hLmtlbHZpbiA9XG4gICAgY2hyb21hLnRlbXBlcmF0dXJlID1cbiAgICAgICAgKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAndGVtcCcpO1xuXG5pbnB1dC5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQuZm9ybWF0LmtlbHZpbiA9XG4gICAgaW5wdXQuZm9ybWF0LnRlbXBlcmF0dXJlID1cbiAgICAgICAgdGVtcGVyYXR1cmUycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93LCBzaWduIH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3Qgb2tsYWIycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBbTCwgYSwgYl0gPSBhcmdzO1xuXG4gICAgY29uc3QgbCA9IHBvdyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgIGNvbnN0IG0gPSBwb3coTCAtIDAuMTA1NTYxMzQ1OCAqIGEgLSAwLjA2Mzg1NDE3MjggKiBiLCAzKTtcbiAgICBjb25zdCBzID0gcG93KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKCs0LjA3Njc0MTY2MjEgKiBsIC0gMy4zMDc3MTE1OTEzICogbSArIDAuMjMwOTY5OTI5MiAqIHMpLFxuICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsYWIycmdiO1xuXG5mdW5jdGlvbiBscmdiMnJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA+IDAuMDAzMTMwOCkge1xuICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3coYWJzLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgICB9XG4gICAgcmV0dXJuIGMgKiAxMi45Mjtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNicnQsIHBvdywgc2lnbiB9ID0gTWF0aDtcblxuY29uc3QgcmdiMm9rbGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgLy8gaHR0cHM6Ly9ib3R0b3Nzb24uZ2l0aHViLmlvL3Bvc3RzL29rbGFiL1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW2xyLCBsZywgbGJdID0gW1xuICAgICAgICByZ2IybHJnYihyIC8gMjU1KSxcbiAgICAgICAgcmdiMmxyZ2IoZyAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGIgLyAyNTUpXG4gICAgXTtcbiAgICBjb25zdCBsID0gY2JydCgwLjQxMjIyMTQ3MDggKiBsciArIDAuNTM2MzMyNTM2MyAqIGxnICsgMC4wNTE0NDU5OTI5ICogbGIpO1xuICAgIGNvbnN0IG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgY29uc3QgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDAuMjEwNDU0MjU1MyAqIGwgKyAwLjc5MzYxNzc4NSAqIG0gLSAwLjAwNDA3MjA0NjggKiBzLFxuICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGFiO1xuXG5mdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICB9XG4gICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogcG93KChhYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xhYjJyZ2IgZnJvbSAnLi9va2xhYjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xhYiBmcm9tICcuL3JnYjJva2xhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xhYicpO1xuXG5pbnB1dC5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xhYicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuLi9sY2gvbGNoMmxhYi5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4uL29rbGFiL29rbGFiMnJnYi5qcyc7XG5cbmNvbnN0IG9rbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsY2gycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi4vb2tsYWIvcmdiMm9rbGFiLmpzJztcbmltcG9ydCBsYWIybGNoIGZyb20gJy4uL2xjaC9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMm9rbGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgcmV0dXJuIGxhYjJsY2gobCwgYSwgYl8pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IG9rbGNoMnJnYiBmcm9tICcuL29rbGNoMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm9rbGNoIGZyb20gJy4vcmdiMm9rbGNoLmpzJztcblxuQ29sb3IucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5va2xjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ29rbGNoJyk7XG5cbmlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAzLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JnYlszXSA9IGE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24gKGFtb3VudCA9IDEpIHtcbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3QgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuZGFya2VuKC1hbW91bnQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlciA9IENvbG9yLnByb3RvdHlwZS5kYXJrZW47XG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZXIgPSBDb2xvci5wcm90b3R5cGUuYnJpZ2h0ZW47XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChtYykge1xuICAgIGNvbnN0IFttb2RlLCBjaGFubmVsXSA9IG1jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgIGNvbnN0IGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgIGlmIChpID4gLTEpIHJldHVybiBzcmNbaV07XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IEVQUyA9IDFlLTc7XG5jb25zdCBNQVhfSVRFUiA9IDIwO1xuXG5Db2xvci5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24gKGx1bSwgbW9kZSA9ICdyZ2InKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHVtID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NSwgdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXB1dGUgbmV3IGNvbG9yIHVzaW5nLi4uXG4gICAgICAgIGxldCBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgbGV0IG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgICAgY29uc3QgdGVzdCA9IChsb3csIGhpZ2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgY29uc3QgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJnYiA9IChcbiAgICAgICAgICAgIGN1cl9sdW0gPiBsdW1cbiAgICAgICAgICAgICAgICA/IHRlc3QobmV3IENvbG9yKFswLCAwLCAwXSksIHRoaXMpXG4gICAgICAgICAgICAgICAgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NV0pKVxuICAgICAgICApLnJnYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsuLi5yZ2IsIHRoaXMuX3JnYlszXV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmdiMmx1bWluYW5jZSguLi50aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xufTtcblxuY29uc3QgcmdiMmx1bWluYW5jZSA9IChyLCBnLCBiKSA9PiB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xufTtcblxuY29uc3QgbHVtaW5hbmNlX3ggPSAoeCkgPT4ge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4IC8gMTIuOTIgOiBwb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQge307XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdG9yIGZyb20gJy4uL2ludGVycG9sYXRvci9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmID0gMC41LCAuLi5yZXN0KSA9PiB7XG4gICAgbGV0IG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSAmJiAhcmVzdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICB9XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnRlcnBvbGF0aW9uIG1vZGUgJHttb2RlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAodHlwZShjb2wxKSAhPT0gJ29iamVjdCcpIGNvbDEgPSBuZXcgQ29sb3IoY29sMSk7XG4gICAgaWYgKHR5cGUoY29sMikgIT09ICdvYmplY3QnKSBjb2wyID0gbmV3IENvbG9yKGNvbDIpO1xuICAgIHJldHVybiBpbnRlcnBvbGF0b3JbbW9kZV0oY29sMSwgY29sMiwgZikuYWxwaGEoXG4gICAgICAgIGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKVxuICAgICk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubWl4ID0gQ29sb3IucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKFxuICAgIGNvbDIsXG4gICAgZiA9IDAuNSxcbiAgICAuLi5yZXN0XG4pIHtcbiAgICByZXR1cm4gbWl4KHRoaXMsIGNvbDIsIGYsIC4uLnJlc3QpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUucHJlbXVsdGlwbHkgPSBmdW5jdGlvbiAobXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgY29uc3QgYSA9IHJnYlszXTtcbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JnYiA9IFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV0sICdyZ2InKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuLi9pby9sYWIvbGFiLWNvbnN0YW50cy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxjaCA9IG1lLmxjaCgpO1xuICAgIGxjaFsxXSArPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIGlmIChsY2hbMV0gPCAwKSBsY2hbMV0gPSAwO1xuICAgIHJldHVybiBuZXcgQ29sb3IobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0ID0gbmV3IENvbG9yKHNyYywgbW9kZSk7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiID0gb3V0Ll9yZ2I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGludCA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnd2hpdGUnLCBmLCAuLi5yZXN0KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5zaGFkZSA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnYmxhY2snLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgcmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5fcmdiO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5yZ2IgPSByZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3cgfSA9IE1hdGg7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxyZ2IgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IFt4MSwgeTEsIHoxXSA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCBbeDIsIHkyLCB6Ml0gPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgc3FydChwb3coeDEsIDIpICogKDEgLSBmKSArIHBvdyh4MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coeTEsIDIpICogKDEgLSBmKSArIHBvdyh5MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coejEsIDIpICogKDEgLSBmKSArIHBvdyh6MiwgMikgKiBmKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5scmdiID0gbHJnYjtcblxuZXhwb3J0IGRlZmF1bHQgbHJnYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBsYWIgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IHh5ejAgPSBjb2wxLmxhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdsYWInXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGFiID0gbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBsYWI7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGNvbDEsIGNvbDIsIGYsIG0pID0+IHtcbiAgICBsZXQgeHl6MCwgeHl6MTtcbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzdigpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzaSgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICB4eXowID0gY29sMS5oY2woKTtcbiAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBsZXQgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcbiAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIFtodWUwLCBzYXQwLCBsYnYwXSA9IHh5ejA7XG4gICAgICAgIFtodWUxLCBzYXQxLCBsYnYxXSA9IHh5ejE7XG4gICAgfVxuXG4gICAgbGV0IHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgaWYgKCFpc05hTihodWUwKSAmJiAhaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSAoaHVlMCArIDM2MCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICB9XG4gICAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgaWYgKChsYnYxID09IDEgfHwgbGJ2MSA9PSAwKSAmJiBtICE9ICdoc3YnKSBzYXQgPSBzYXQwO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTE7XG4gICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIGlmIChzYXQgPT09IHVuZGVmaW5lZCkgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApO1xuICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICByZXR1cm4gbSA9PT0gJ29rbGNoJ1xuICAgICAgICA/IG5ldyBDb2xvcihbbGJ2LCBzYXQsIGh1ZV0sIG0pXG4gICAgICAgIDogbmV3IENvbG9yKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGNoID0gbGNoO1xuaW5kZXguaGNsID0gbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBsY2g7XG4iLCAiaW1wb3J0ICcuLi9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBudW0gPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IGMxID0gY29sMS5udW0oKTtcbiAgICBjb25zdCBjMiA9IGNvbDIubnVtKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubnVtID0gbnVtO1xuXG5leHBvcnQgZGVmYXVsdCBudW07XG4iLCAiaW1wb3J0ICcuLi9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoY2cgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hjZycpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oY2cgPSBoY2c7XG5cbmV4cG9ydCBkZWZhdWx0IGhjZztcbiIsICJpbXBvcnQgJy4uL2lvL2hzaS9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzaSA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzaSA9IGhzaTtcblxuZXhwb3J0IGRlZmF1bHQgaHNpO1xuIiwgImltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHNsID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHNsID0gaHNsO1xuXG5leHBvcnQgZGVmYXVsdCBoc2w7XG4iLCAiaW1wb3J0ICcuLi9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc3YgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzdicpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc3YgPSBoc3Y7XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjtcbiIsICJpbXBvcnQgJy4uL2lvL29rbGFiL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmNvbnN0IG9rbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5va2xhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ29rbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGFiID0gb2tsYWI7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiO1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3Qgb2tsY2ggPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ29rbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGNoID0gb2tsY2g7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyBjbGlwX3JnYiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3csIHNxcnQsIFBJLCBjb3MsIHNpbiwgYXRhbjIgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMsIG1vZGUgPSAnbHJnYicsIHdlaWdodHMgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgaWYgKCF3ZWlnaHRzKSB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcCgoKSA9PiAxKTtcbiAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgIGNvbnN0IGsgPVxuICAgICAgICBsIC9cbiAgICAgICAgd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgfSk7XG4gICAgd2VpZ2h0cy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gICAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTtcbiAgICAvLyBjb252ZXJ0IGNvbG9ycyB0byBDb2xvciBvYmplY3RzXG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cyk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgY29uc3QgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIGNvbnN0IGNudCA9IFtdO1xuICAgIGxldCBkeCA9IDA7XG4gICAgbGV0IGR5ID0gMDtcbiAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeHl6W2ldID0gKHh5eltpXSB8fCAwKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gKHh5eltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgIGR4ICs9IGNvcyhBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goKGMsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IHh5ejIgPSBjLmdldChtb2RlKTtcbiAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc05hTih4eXoyW2ldKSkge1xuICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9ICh4eXoyW2ldIC8gMTgwKSAqIFBJO1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbihBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4eXpbaV0gKz0geHl6MltpXSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICBsZXQgQSA9IChhdGFuMihkeSAvIGNudFtpXSwgZHggLyBjbnRbaV0pIC8gUEkpICogMTgwO1xuICAgICAgICAgICAgd2hpbGUgKEEgPCAwKSBBICs9IDM2MDtcbiAgICAgICAgICAgIHdoaWxlIChBID49IDM2MCkgQSAtPSAzNjA7XG4gICAgICAgICAgICB4eXpbaV0gPSBBO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldID0geHl6W2ldIC8gY250W2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFscGhhIC89IGw7XG4gICAgcmV0dXJuIG5ldyBDb2xvcih4eXosIG1vZGUpLmFscGhhKGFscGhhID4gMC45OTk5OSA/IDEgOiBhbHBoYSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBfYXZlcmFnZV9scmdiID0gKGNvbG9ycywgd2VpZ2h0cykgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGNvbnN0IHh5eiA9IFswLCAwLCAwLCAwXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgICAgY29uc3QgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgIHh5elswXSArPSBwb3cocmdiWzBdLCAyKSAqIGY7XG4gICAgICAgIHh5elsxXSArPSBwb3cocmdiWzFdLCAyKSAqIGY7XG4gICAgICAgIHh5elsyXSArPSBwb3cocmdiWzJdLCAyKSAqIGY7XG4gICAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cbiAgICB4eXpbMF0gPSBzcXJ0KHh5elswXSk7XG4gICAgeHl6WzFdID0gc3FydCh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQoeHl6WzJdKTtcbiAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB4eXpbM10gPSAxO1xuICAgIHJldHVybiBuZXcgQ29sb3IoY2xpcF9yZ2IoeHl6KSk7XG59O1xuIiwgIi8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuLy8gQHJlcXVpcmVzIHV0aWxzIGNvbG9yIGFuYWx5emVcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCB7IGxpbWl0LCB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgbGV0IF9tb2RlID0gJ3JnYic7XG4gICAgbGV0IF9uYWNvbCA9IGNocm9tYSgnI2NjYycpO1xuICAgIGxldCBfc3ByZWFkID0gMDtcbiAgICAvLyBjb25zdCBfZml4ZWQgPSBmYWxzZTtcbiAgICBsZXQgX2RvbWFpbiA9IFswLCAxXTtcbiAgICBsZXQgX3BvcyA9IFtdO1xuICAgIGxldCBfcGFkZGluZyA9IFswLCAwXTtcbiAgICBsZXQgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9ycyA9IFtdO1xuICAgIGxldCBfb3V0ID0gZmFsc2U7XG4gICAgbGV0IF9taW4gPSAwO1xuICAgIGxldCBfbWF4ID0gMTtcbiAgICBsZXQgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICBsZXQgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICBsZXQgX2dhbW1hID0gMTtcblxuICAgIC8vIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgY29uc3Qgc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sb3JzICYmXG4gICAgICAgICAgICB0eXBlKGNvbG9ycykgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNocm9tYS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlKGNvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hKGNvbG9yc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWZpbGwgY29sb3IgcG9zaXRpb25cbiAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoY29sb3JzLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIHJldHVybiAoX2NvbG9ycyA9IGNvbG9ycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuXG4gICAgbGV0IHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICBsZXQgdE1hcERvbWFpbiA9ICh0KSA9PiB0O1xuXG4gICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGkgPSBnZXRDbGFzcyh2YWx1ZSk7XG4gICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIHZhbCA9IF9taW4gKyAoKCgoX2NsYXNzZXNbaV0gKyAoKF9jbGFzc2VzW2krMV0gLSBfY2xhc3Nlc1tpXSkgKiAwLjUpKSAtIG1pbmMpIC8gKG1heGMtbWluYykpICogKF9tYXggLSBfbWluKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAvLyB9O1xuXG4gICAgY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgbGV0IGNvbCwgdDtcbiAgICAgICAgaWYgKGJ5cGFzc01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgICBieXBhc3NNYXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICB0ID0gYyAvIChfY2xhc3Nlcy5sZW5ndGggLSAyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGUgYmV0d2VlbiBtaW4vbWF4XG4gICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkge1xuICAgICAgICAgICAgdCA9IHBvdyh0LCBfZ2FtbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgdCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSk7XG5cbiAgICAgICAgdCA9IGxpbWl0KHQsIDAsIDEpO1xuXG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgY29sID0gX2NvbG9yQ2FjaGVba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj0gcCAmJiBpID09PSBfcG9zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gY2hyb21hLmludGVycG9sYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9ICgpID0+IChfY29sb3JDYWNoZSA9IHt9KTtcblxuICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgY29uc3QgZiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjaHJvbWEoZ2V0Q29sb3IodikpO1xuICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jbGFzc2VzID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gY2hyb21hLmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBbZC5taW4sIGQubWF4XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYS5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdO1xuICAgICAgICBfcG9zID0gW107XG4gICAgICAgIGNvbnN0IGsgPSBfY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPT09IGsgJiYgX21pbiAhPT0gX21heCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgZCBvZiBBcnJheS5mcm9tKGRvbWFpbikpIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCB0T3V0ID0gZG9tYWluLm1hcCgoZCwgaSkgPT4gaSAvIChkb21haW4ubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRCcmVha3MgPSBkb21haW4ubWFwKChkKSA9PiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0QnJlYWtzLmV2ZXJ5KCh2YWwsIGkpID0+IHRPdXRbaV0gPT09IHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2kgKyAxXSkgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2kgKyAxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpICsgMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm1vZGUgPSBmdW5jdGlvbiAoX20pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgIH1cbiAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5yYW5nZSA9IGZ1bmN0aW9uIChjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm91dCA9IGZ1bmN0aW9uIChfbykge1xuICAgICAgICBfb3V0ID0gX287XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgICAgfVxuICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgdiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTDAgPSBnZXRDb2xvcigwLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgbGV0IExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTF9pZGVhbCA9IEwwICsgKEwxIC0gTDApICogdDtcbiAgICAgICAgICAgICAgICBsZXQgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgIGxldCB0MCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gMTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoTWF0aC5hYnMoTF9kaWZmKSA+IDFlLTIgJiYgbWF4X2l0ZXItLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2RpZmYgKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUocCkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcCA9IFtwLCBwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY29sb3JzID0gZnVuY3Rpb24gKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmKDAuNSldO1xuICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgIGNvbnN0IGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBmKGRtICsgKGkgLyAobnVtQ29sb3JzIC0gMSkpICogZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgbGV0IHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSsrIDogaS0tXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucHVzaCgoX2NsYXNzZXNbaSAtIDFdICsgX2NsYXNzZXNbaV0pICogMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoKHYpID0+IGYodikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNocm9tYVtvdXRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKChjKSA9PiBjW291dF0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdXNlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICAgIGlmIChnICE9IG51bGwpIHtcbiAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEoZCk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgbGV0IHJhbmdlID0gW107XG4gICAgbGV0IGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICBsZXQgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgIGZvciAobGV0IGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICAgIHJhbmdlLnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbiIsICIvL1xuLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuLy9cblxuLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NjYWxlLmpzJztcblxuLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG5jb25zdCBiaW5vbV9yb3cgPSBmdW5jdGlvbiAobikge1xuICAgIGxldCByb3cgPSBbMSwgMV07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgbGV0IG5ld3JvdyA9IFsxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG59O1xuXG5jb25zdCBiZXppZXIgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gICAgbGV0IEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMV0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PiBsYWIwW2ldICsgdCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIGxhYjJbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBsZXQgbGFiMztcbiAgICAgICAgW2xhYjAsIGxhYjEsIGxhYjIsIGxhYjNdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcChcbiAgICAgICAgICAgICAgICAoaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgMyAqICgxIC0gdCkgKiB0ICogdCAqIGxhYjJbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIHQgKiBsYWIzW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAvLyBnZW5lcmFsIGNhc2UgKGRlZ3JlZSBuIGJlemllcilcbiAgICAgICAgbGV0IGxhYnMsIHJvdywgbjtcbiAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBuID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gMSAtIHQ7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgIGxhYnMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoc3VtLCBlbCwgaikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArIHJvd1tqXSAqIHUgKiogKG4gLSBqKSAqIHQgKiogaiAqIGVsW2ldLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuJyk7XG4gICAgfVxuICAgIHJldHVybiBJO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbG9ycykgPT4ge1xuICAgIGNvbnN0IGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICBmLnNjYWxlID0gKCkgPT4gc2NhbGUoZik7XG4gICAgcmV0dXJuIGY7XG59O1xuIiwgIi8qXG4gKiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTgwMTEwMDE0OTQ2L2h0dHA6Ly93d3cudmVudHVyZS13YXJlLmNvbS9rZXZpbi9jb2RpbmcvbGV0cy1sZWFybi1tYXRoLXBob3Rvc2hvcC1ibGVuZC1tb2Rlcy9cbiAqL1xuXG5pbXBvcnQgJy4uL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5cbmNvbnN0IGJsZW5kID0gKGJvdHRvbSwgdG9wLCBtb2RlKSA9PiB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG59O1xuXG5jb25zdCBibGVuZF9mID0gKGYpID0+IChib3R0b20sIHRvcCkgPT4ge1xuICAgIGNvbnN0IGMwID0gY2hyb21hKHRvcCkucmdiKCk7XG4gICAgY29uc3QgYzEgPSBjaHJvbWEoYm90dG9tKS5yZ2IoKTtcbiAgICByZXR1cm4gY2hyb21hLnJnYihmKGMwLCBjMSkpO1xufTtcblxuY29uc3QgZWFjaCA9IChmKSA9PiAoYzAsIGMxKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICBvdXRbMl0gPSBmKGMwWzJdLCBjMVsyXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmNvbnN0IG5vcm1hbCA9IChhKSA9PiBhO1xuY29uc3QgbXVsdGlwbHkgPSAoYSwgYikgPT4gKGEgKiBiKSAvIDI1NTtcbmNvbnN0IGRhcmtlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBiIDogYSk7XG5jb25zdCBsaWdodGVuID0gKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKTtcbmNvbnN0IHNjcmVlbiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbmNvbnN0IG92ZXJsYXkgPSAoYSwgYikgPT5cbiAgICBiIDwgMTI4ID8gKDIgKiBhICogYikgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBidXJuID0gKGEsIGIpID0+IDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG5jb25zdCBkb2RnZSA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGEgPT09IDI1NSkgcmV0dXJuIDI1NTtcbiAgICBhID0gKDI1NSAqIChiIC8gMjU1KSkgLyAoMSAtIGEgLyAyNTUpO1xuICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYTtcbn07XG5cbi8vICMgYWRkID0gKGEsYikgLT5cbi8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5ibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG5ibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuYmxlbmQuc2NyZWVuID0gYmxlbmRfZihlYWNoKHNjcmVlbikpO1xuYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG5ibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG5ibGVuZC5saWdodGVuID0gYmxlbmRfZihlYWNoKGxpZ2h0ZW4pKTtcbmJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG5ibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbi8vIGJsZW5kLmFkZCA9IGJsZW5kX2YoZWFjaChhZGQpKTtcblxuZXhwb3J0IGRlZmF1bHQgYmxlbmQ7XG4iLCAiLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbi8vIGJhc2VkIG9uIEQuQS4gR3JlZW4gXCJBIGNvbG91ciBzY2hlbWUgZm9yIHRoZSBkaXNwbGF5IG9mIGFzdHJvbm9taWNhbCBpbnRlbnNpdHkgaW1hZ2VzXCJcbi8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5pbXBvcnQgeyB0eXBlLCBjbGlwX3JnYiwgVFdPUEkgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5jb25zdCB7IHBvdywgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChcbiAgICBzdGFydCA9IDMwMCxcbiAgICByb3RhdGlvbnMgPSAtMS41LFxuICAgIGh1ZSA9IDEsXG4gICAgZ2FtbWEgPSAxLFxuICAgIGxpZ2h0bmVzcyA9IFswLCAxXVxuKSB7XG4gICAgbGV0IGRoID0gMCxcbiAgICAgICAgZGw7XG4gICAgaWYgKHR5cGUobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkbCA9IDA7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAoZnJhY3QpIHtcbiAgICAgICAgY29uc3QgYSA9IFRXT1BJICogKChzdGFydCArIDEyMCkgLyAzNjAgKyByb3RhdGlvbnMgKiBmcmFjdCk7XG4gICAgICAgIGNvbnN0IGwgPSBwb3cobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgICBjb25zdCBoID0gZGggIT09IDAgPyBodWVbMF0gKyBmcmFjdCAqIGRoIDogaHVlO1xuICAgICAgICBjb25zdCBhbXAgPSAoaCAqIGwgKiAoMSAtIGwpKSAvIDI7XG4gICAgICAgIGNvbnN0IGNvc19hID0gY29zKGEpO1xuICAgICAgICBjb25zdCBzaW5fYSA9IHNpbihhKTtcbiAgICAgICAgY29uc3QgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICAgIGNvbnN0IGcgPSBsICsgYW1wICogKC0wLjI5MjI3ICogY29zX2EgLSAwLjkwNjQ5ICogc2luX2EpO1xuICAgICAgICBjb25zdCBiID0gbCArIGFtcCAqICgrMS45NzI5NCAqIGNvc19hKTtcbiAgICAgICAgcmV0dXJuIGNocm9tYShjbGlwX3JnYihbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuICAgIGYuc3RhcnQgPSBmdW5jdGlvbiAocykge1xuICAgICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2FtbWE7XG4gICAgICAgIH1cbiAgICAgICAgZ2FtbWEgPSBnO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuaHVlID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh1ZTtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBoO1xuICAgICAgICBpZiAodHlwZShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgIGlmIChkaCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGh1ZSA9IGh1ZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0bmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShoKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaWdodG5lc3MgPSBbaCwgaF07XG4gICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnNjYWxlID0gKCkgPT4gY2hyb21hLnNjYWxlKGYpO1xuICAgIGYuaHVlKGh1ZSk7XG4gICAgcmV0dXJuIGY7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuY29uc3QgeyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICAgbGV0IGNvZGUgPSAnIyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yKHJhbmRvbSgpICogMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjb2RlLCAnaGV4Jyk7XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmNvbnN0IHsgbG9nLCBwb3csIGZsb29yLCBhYnMgfSA9IE1hdGg7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplKGRhdGEsIGtleSA9IG51bGwpIHtcbiAgICBjb25zdCByID0ge1xuICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIG1heDogTnVtYmVyLk1BWF9WQUxVRSAqIC0xLFxuICAgICAgICBzdW06IDAsXG4gICAgICAgIHZhbHVlczogW10sXG4gICAgICAgIGNvdW50OiAwXG4gICAgfTtcbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgdmFsID0gdmFsW2tleV07XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgIGlmICh2YWwgPCByLm1pbikgci5taW4gPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHIubWF4ID0gdmFsO1xuICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSAobW9kZSwgbnVtKSA9PiBsaW1pdHMociwgbW9kZSwgbnVtKTtcblxuICAgIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGltaXRzKGRhdGEsIG1vZGUgPSAnZXF1YWwnLCBudW0gPSA3KSB7XG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gZGF0YTtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLnZhbHVlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgIHJldHVybiBbbWluLCBtYXhdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgICAgLy8gY29udGludW91c1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAgIC8vIGVxdWFsIGludGVydmFsXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgICAvLyBsb2cgc2NhbGVcbiAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluX2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1pbik7XG4gICAgICAgIGNvbnN0IG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChwb3coMTAsIG1pbl9sb2cgKyAoaSAvIG51bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAncScpIHtcbiAgICAgICAgLy8gcXVhbnRpbGUgc2NhbGVcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcCA9ICgodmFsdWVzLmxlbmd0aCAtIDEpICogaSkgLyBudW07XG4gICAgICAgICAgICBjb25zdCBwYiA9IGZsb29yKHApO1xuICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgIGNvbnN0IHByID0gcCAtIHBiO1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAgIC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvKlxuICAgICAgICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvblxuICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAqL1xuICAgICAgICBsZXQgY2x1c3RlcjtcbiAgICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBjb25zdCBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgbGV0IHJlcGVhdCA9IHRydWU7XG4gICAgICAgIGxldCBuYl9pdGVycyA9IDA7XG4gICAgICAgIGxldCBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICBjZW50cm9pZHMgPSBbXTtcbiAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKGkgLyBudW0pICogKG1heCAtIG1pbikpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgLy8gYXNzaWdubWVudCBzdGVwXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IGFicyhjZW50cm9pZHNbal0gLSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbYmVzdF0rKztcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaV0gPSBiZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIGNlbnRyb2lkcyBzdGVwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbal0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdICs9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdICo9IDEgLyBjbHVzdGVyU2l6ZXNbal07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGNvbnZlcmdlbmNlXG4gICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2pdICE9PSBjZW50cm9pZHNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICBuYl9pdGVycysrO1xuXG4gICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvLyB0aGUgbmV4dCBwYXJ0IGlzIGJvcnJvd2VkIGZyb20gZ2FicmllbGZsb3IuaXRcbiAgICAgICAgY29uc3Qga0NsdXN0ZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIGtDbHVzdGVyc1tqXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2pdWzBdKTtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVtrQ2x1c3RlcnNbal0ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdG1wS01lYW5zQnJlYWtzW2ldO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiBsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGltaXRzO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL29wcy9sdW1pbmFuY2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYSwgYikgPT4ge1xuICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgY29uc3QgbDIgPSBiLmx1bWluYW5jZSgpO1xuICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCB7IHNxcnQsIHBvdywgbWluLCBtYXgsIGF0YW4yLCBhYnMsIGNvcywgc2luLCBleHAsIFBJIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgS2wgPSAxLCBLYyA9IDEsIEtoID0gMSkge1xuICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9EZWx0YUVfQ0lFMjAwMC5odG1sXG4gICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHJldHVybiAoMzYwICogcmFkKSAvICgyICogUEkpO1xuICAgIH07XG4gICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbiAoZGVnKSB7XG4gICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICB9O1xuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBbTDEsIGExLCBiMV0gPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgIGNvbnN0IFtMMiwgYTIsIGIyXSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgY29uc3QgYXZnTCA9IChMMSArIEwyKSAvIDI7XG4gICAgY29uc3QgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICBjb25zdCBDMiA9IHNxcnQocG93KGEyLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0MgPSAoQzEgKyBDMikgLyAyO1xuICAgIGNvbnN0IEcgPSAwLjUgKiAoMSAtIHNxcnQocG93KGF2Z0MsIDcpIC8gKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgY29uc3QgYTFwID0gYTEgKiAoMSArIEcpO1xuICAgIGNvbnN0IGEycCA9IGEyICogKDEgKyBHKTtcbiAgICBjb25zdCBDMXAgPSBzcXJ0KHBvdyhhMXAsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0NwID0gKEMxcCArIEMycCkgLyAyO1xuICAgIGNvbnN0IGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICBjb25zdCBhcmN0YW4yID0gcmFkMmRlZyhhdGFuMihiMiwgYTJwKSk7XG4gICAgY29uc3QgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgY29uc3QgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgY29uc3QgYXZnSHAgPVxuICAgICAgICBhYnMoaDFwIC0gaDJwKSA+IDE4MCA/IChoMXAgKyBoMnAgKyAzNjApIC8gMiA6IChoMXAgKyBoMnApIC8gMjtcbiAgICBjb25zdCBUID1cbiAgICAgICAgMSAtXG4gICAgICAgIDAuMTcgKiBjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgK1xuICAgICAgICAwLjI0ICogY29zKGRlZzJyYWQoMiAqIGF2Z0hwKSkgK1xuICAgICAgICAwLjMyICogY29zKGRlZzJyYWQoMyAqIGF2Z0hwICsgNikpIC1cbiAgICAgICAgMC4yICogY29zKGRlZzJyYWQoNCAqIGF2Z0hwIC0gNjMpKTtcbiAgICBsZXQgZGVsdGFIcCA9IGgycCAtIGgxcDtcbiAgICBkZWx0YUhwID1cbiAgICAgICAgYWJzKGRlbHRhSHApIDw9IDE4MFxuICAgICAgICAgICAgPyBkZWx0YUhwXG4gICAgICAgICAgICA6IGgycCA8PSBoMXBcbiAgICAgICAgICAgICAgPyBkZWx0YUhwICsgMzYwXG4gICAgICAgICAgICAgIDogZGVsdGFIcCAtIDM2MDtcbiAgICBkZWx0YUhwID0gMiAqIHNxcnQoQzFwICogQzJwKSAqIHNpbihkZWcycmFkKGRlbHRhSHApIC8gMik7XG4gICAgY29uc3QgZGVsdGFMID0gTDIgLSBMMTtcbiAgICBjb25zdCBkZWx0YUNwID0gQzJwIC0gQzFwO1xuICAgIGNvbnN0IHNsID0gMSArICgwLjAxNSAqIHBvdyhhdmdMIC0gNTAsIDIpKSAvIHNxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgY29uc3Qgc2MgPSAxICsgMC4wNDUgKiBhdmdDcDtcbiAgICBjb25zdCBzaCA9IDEgKyAwLjAxNSAqIGF2Z0NwICogVDtcbiAgICBjb25zdCBkZWx0YVRoZXRhID0gMzAgKiBleHAoLXBvdygoYXZnSHAgLSAyNzUpIC8gMjUsIDIpKTtcbiAgICBjb25zdCBSYyA9IDIgKiBzcXJ0KHBvdyhhdmdDcCwgNykgLyAocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICBjb25zdCBSdCA9IC1SYyAqIHNpbigyICogZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gc3FydChcbiAgICAgICAgcG93KGRlbHRhTCAvIChLbCAqIHNsKSwgMikgK1xuICAgICAgICAgICAgcG93KGRlbHRhQ3AgLyAoS2MgKiBzYyksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUhwIC8gKEtoICogc2gpLCAyKSArXG4gICAgICAgICAgICBSdCAqIChkZWx0YUNwIC8gKEtjICogc2MpKSAqIChkZWx0YUhwIC8gKEtoICogc2gpKVxuICAgICk7XG4gICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG4vLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgbW9kZSA9ICdsYWInKSB7XG4gICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXF1YXRpb25zLmh0bWxcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmdldChtb2RlKTtcbiAgICBjb25zdCBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIGxldCBzdW1fc3EgPSAwO1xuICAgIGZvciAobGV0IGkgaW4gbDEpIHtcbiAgICAgICAgY29uc3QgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgc3VtX3NxICs9IGQgKiBkO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bV9zcSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgQ29sb3IoLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuIiwgIi8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuaW1wb3J0ICcuLi9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4uL2dlbmVyYXRvci9zY2FsZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb29sKCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYS5oc2woMTgwLCAxLCAwLjkpLCBjaHJvbWEuaHNsKDI1MCwgMC43LCAwLjQpXSk7XG4gICAgfSxcbiAgICBob3QoKSB7XG4gICAgICAgIHJldHVybiBzY2FsZShbJyMwMDAnLCAnI2YwMCcsICcjZmYwJywgJyNmZmYnXSwgWzAsIDAuMjUsIDAuNzUsIDFdKS5tb2RlKFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwgIi8qKlxuICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SXG4gICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuY29uc3QgY29sb3JicmV3ZXIgPSB7XG4gICAgLy8gc2VxdWVudGlhbFxuICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgQnVQdTogWycjZjdmY2ZkJywgJyNlMGVjZjQnLCAnI2JmZDNlNicsICcjOWViY2RhJywgJyM4Yzk2YzYnLCAnIzhjNmJiMScsICcjODg0MTlkJywgJyM4MTBmN2MnLCAnIzRkMDA0YiddLFxuICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxPckJyOiBbJyNmZmZmZTUnLCAnI2ZmZjdiYycsICcjZmVlMzkxJywgJyNmZWM0NGYnLCAnI2ZlOTkyOScsICcjZWM3MDE0JywgJyNjYzRjMDInLCAnIzk5MzQwNCcsICcjNjYyNTA2J10sXG4gICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICBSZFB1OiBbJyNmZmY3ZjMnLCAnI2ZkZTBkZCcsICcjZmNjNWMwJywgJyNmYTlmYjUnLCAnI2Y3NjhhMScsICcjZGQzNDk3JywgJyNhZTAxN2UnLCAnIzdhMDE3NycsICcjNDkwMDZhJ10sXG4gICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgUHVycGxlczogWycjZmNmYmZkJywgJyNlZmVkZjUnLCAnI2RhZGFlYicsICcjYmNiZGRjJywgJyM5ZTlhYzgnLCAnIzgwN2RiYScsICcjNmE1MWEzJywgJyM1NDI3OGYnLCAnIzNmMDA3ZCddLFxuICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgIFlsT3JSZDogWycjZmZmZmNjJywgJyNmZmVkYTAnLCAnI2ZlZDk3NicsICcjZmViMjRjJywgJyNmZDhkM2MnLCAnI2ZjNGUyYScsICcjZTMxYTFjJywgJyNiZDAwMjYnLCAnIzgwMDAyNiddLFxuICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgIFB1QnVHbjogWycjZmZmN2ZiJywgJyNlY2UyZjAnLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM2N2E5Y2YnLCAnIzM2OTBjMCcsICcjMDI4MThhJywgJyMwMTZjNTknLCAnIzAxNDYzNiddLFxuICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAvLyBxdWFsaXRhdGl2ZVxuICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgQWNjZW50OiBbJyM3ZmM5N2YnLCAnI2JlYWVkNCcsICcjZmRjMDg2JywgJyNmZmZmOTknLCAnIzM4NmNiMCcsICcjZjAwMjdmJywgJyNiZjViMTcnLCAnIzY2NjY2NiddLFxuICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgRGFyazI6IFsnIzFiOWU3NycsICcjZDk1ZjAyJywgJyM3NTcwYjMnLCAnI2U3Mjk4YScsICcjNjZhNjFlJywgJyNlNmFiMDInLCAnI2E2NzYxZCcsICcjNjY2NjY2J10sXG4gICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICBQYXN0ZWwxOiBbJyNmYmI0YWUnLCAnI2IzY2RlMycsICcjY2NlYmM1JywgJyNkZWNiZTQnLCAnI2ZlZDlhNicsICcjZmZmZmNjJywgJyNlNWQ4YmQnLCAnI2ZkZGFlYycsICcjZjJmMmYyJ11cbn07XG5cbi8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5mb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpKSB7XG4gICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JicmV3ZXI7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuL3NyYy9jaHJvbWEuanMnO1xuXG4vLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4vLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG5cbi8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuaW1wb3J0ICcuL3NyYy9pby9jbXlrL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vY3NzL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vZ2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oZXgvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sY2gvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9uYW1lZC9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL251bS9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3RlbXAvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL29rbGNoL2luZGV4LmpzJztcblxuLy8gb3BlcmF0b3JzIC0tPiBtb2RpZnkgZXhpc3RpbmcgQ29sb3JzXG5pbXBvcnQgJy4vc3JjL29wcy9hbHBoYS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9jbGlwcGVkLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2Rhcmtlbi5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9nZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvbHVtaW5hbmNlLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL21peC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9wcmVtdWx0aXBseS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zYXR1cmF0ZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2hhZGUuanMnO1xuXG4vLyBpbnRlcnBvbGF0b3JzXG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9yZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9sYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oY2cuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc3YuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMnO1xuXG4vLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbmltcG9ydCBhdmVyYWdlIGZyb20gJy4vc3JjL2dlbmVyYXRvci9hdmVyYWdlLmpzJztcbmltcG9ydCBiZXppZXIgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyc7XG5pbXBvcnQgYmxlbmQgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzJztcbmltcG9ydCBjdWJlaGVsaXggZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9taXguanMnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG4vLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbmltcG9ydCB7IGFuYWx5emUgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL3NyYy91dGlscy9jb250cmFzdC5qcyc7XG5pbXBvcnQgZGVsdGFFIGZyb20gJy4vc3JjL3V0aWxzL2RlbHRhLWUuanMnO1xuaW1wb3J0IGRpc3RhbmNlIGZyb20gJy4vc3JjL3V0aWxzL2Rpc3RhbmNlLmpzJztcbmltcG9ydCB7IGxpbWl0cyB9IGZyb20gJy4vc3JjL3V0aWxzL2FuYWx5emUuanMnO1xuaW1wb3J0IHZhbGlkIGZyb20gJy4vc3JjL3V0aWxzL3ZhbGlkLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuL3NyYy9pby9pbnB1dC5qcyc7XG5cbi8vIHNjYWxlXG5pbXBvcnQgc2NhbGVzIGZyb20gJy4vc3JjL3V0aWxzL3NjYWxlcy5qcyc7XG5cbi8vIGNvbG9yc1xuaW1wb3J0IGNvbG9ycyBmcm9tICcuL3NyYy9jb2xvcnMvdzNjeDExLmpzJztcbmltcG9ydCBicmV3ZXIgZnJvbSAnLi9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzJztcblxuT2JqZWN0LmFzc2lnbihjaHJvbWEsIHtcbiAgICBhdmVyYWdlLFxuICAgIGJlemllcixcbiAgICBibGVuZCxcbiAgICBjdWJlaGVsaXgsXG4gICAgbWl4LFxuICAgIGludGVycG9sYXRlOiBtaXgsXG4gICAgcmFuZG9tLFxuICAgIHNjYWxlLFxuICAgIGFuYWx5emUsXG4gICAgY29udHJhc3QsXG4gICAgZGVsdGFFLFxuICAgIGRpc3RhbmNlLFxuICAgIGxpbWl0cyxcbiAgICB2YWxpZCxcbiAgICBzY2FsZXMsXG4gICAgaW5wdXQsXG4gICAgY29sb3JzLFxuICAgIGJyZXdlclxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNocm9tYTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBNSURfQ09MT1JfU1RPUCA9ICcjRUJFRkY1Jztcbi8qKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBjb2xvcnMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaW50ZXJwb2xhdGVkXG4gKiBjb2xvcnMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBzdGVwcy9sZW4gbmVlZGVkIGZvciB1c2UgaW4gVUkgZWxlbWVudHMgc3VjaCBhcyBjaGFydHMuXG4gKiBEZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2drYS9wYWxldHRlcyAoVW5saWNlbnNlZClcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JQYWxldHRlKFxuLyoqXG4gKiBUaGUgbWFpbiBjb2xvciBjb2RlIG9yIGFycmF5IG9mIGNvZGVzXG4gKi9cbmNvbG9ycykge1xuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxMDtcbiAgdmFyIGRpdmVyZ2luZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gIHZhciBoZXhTdGFydCA9IGNvbG9ycy5zbGljZSgpO1xuICB2YXIgaGV4RW5kID0gW107XG4gIHZhciBldmVuID0gbGVuICUgMiA9PT0gMDtcbiAgdmFyIG51bUNvbG9yc0xlZnQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IGxlbjtcbiAgdmFyIG51bUNvbG9yc1JpZ2h0ID0gZGl2ZXJnaW5nID8gTWF0aC5jZWlsKGxlbiAvIDIpICsgKGV2ZW4gPyAxIDogMCkgOiAwOyAvLyBJZiBvbmx5IGEgc2luZ2xlIGNvbG9yIGlzIHByb3ZpZGVkIHByZXBlbmQgdGhlIG1pZC1wb2ludCBjb2xvclxuXG4gIGlmIChoZXhTdGFydC5sZW5ndGggPT09IDEpIHtcbiAgICBoZXhTdGFydC51bnNoaWZ0KE1JRF9DT0xPUl9TVE9QKTtcbiAgfSAvLyBJZiBkaXZlcmdpbmcsIHNwbGl0IHRoZSBzdGFydCBhcnJheSBhbmQgZHVwbGljYXRlIHRoZSBtaWQgY29sb3JcblxuXG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1pZHBvaW50LCBjcmVhdGUgb25lXG4gICAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIGhleFN0YXJ0WzJdID0gaGV4U3RhcnRbMV07XG4gICAgICBoZXhTdGFydFsxXSA9IE1JRF9DT0xPUl9TVE9QO1xuICAgIH1cblxuICAgIHZhciBudW1Db2xvcnNIYWxmID0gTWF0aC5jZWlsKGhleFN0YXJ0Lmxlbmd0aCAvIDIpO1xuICAgIHZhciBjb2xvcnNMZWZ0ID0gaGV4U3RhcnQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBjb2xvcnNSaWdodCA9IGhleFN0YXJ0LnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSkucmV2ZXJzZSgpO1xuICAgIGhleFN0YXJ0ID0gY29sb3JzTGVmdDtcbiAgICBoZXhFbmQgPSBjb2xvcnNSaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBzKGNvbG9ycywgc3RlcHMpIHtcbiAgICBpZiAoIWNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFjYXRlZ29yaWNhbCkge1xuICAgICAgcmV0dXJuIGNocm9tYS5iZXppZXIoY29sb3JzKS5zY2FsZSgpLmNvcnJlY3RMaWdodG5lc3MoKS5jb2xvcnMoc3RlcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hyb21hLnNjYWxlKGNvbG9ycykuY29sb3JzKHN0ZXBzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RlcHNMZWZ0ID0gY3JlYXRlU3RlcHMoaGV4U3RhcnQsIG51bUNvbG9yc0xlZnQpO1xuICB2YXIgc3RlcHNSaWdodCA9IGNyZWF0ZVN0ZXBzKGhleEVuZCwgbnVtQ29sb3JzUmlnaHQpO1xuICByZXR1cm4gKGV2ZW4gJiYgZGl2ZXJnaW5nID8gc3RlcHNMZWZ0LnNsaWNlKDAsIHN0ZXBzTGVmdC5sZW5ndGggLSAxKSA6IHN0ZXBzTGVmdCkuY29uY2F0KHN0ZXBzUmlnaHQuc2xpY2UoMSkpO1xufSIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBjb2xvclBhbGV0dGUgfSBmcm9tICcuL2NvbG9yX3BhbGV0dGUnO1xuXG52YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHZhciBfcmVmO1xuXG4gIHJldHVybiAoX3JlZiA9IFtdKS5jb25jYXQuYXBwbHkoX3JlZiwgX3RvQ29uc3VtYWJsZUFycmF5KGFycikpO1xufTtcblxudmFyIGV1aVBhbGV0dGUgPSBmdW5jdGlvbiBldWlQYWxldHRlKGNvbG9ycywgc3RlcHMpIHtcbiAgdmFyIGRpdmVyZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgY2F0ZWdvcmljYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHRydWU7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIHRyaW1zIHRoZSBmaXJzdCBjb2xvciBzbyB3aGl0ZS9ibGFjayBpcyBuZXZlciBhIGNvbG9yXG4gIGlmICghZGl2ZXJnZSAmJiBzdGVwcyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzICsgMSk7XG4gICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgIHJldHVybiBwYWxldHRlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzLCBkaXZlcmdlLCBjYXRlZ29yaWNhbCk7XG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb2xvckJsaW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICBfcmVmMiRyb3RhdGlvbnMgPSBfcmVmMi5yb3RhdGlvbnMsXG4gICAgICByb3RhdGlvbnMgPSBfcmVmMiRyb3RhdGlvbnMgPT09IHZvaWQgMCA/IDEgOiBfcmVmMiRyb3RhdGlvbnMsXG4gICAgICBfcmVmMiRvcmRlciA9IF9yZWYyLm9yZGVyLFxuICAgICAgb3JkZXIgPSBfcmVmMiRvcmRlciA9PT0gdm9pZCAwID8gJ2FwcGVuZCcgOiBfcmVmMiRvcmRlcixcbiAgICAgIF9yZWYyJGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ2xpZ2h0ZXInIDogX3JlZjIkZGlyZWN0aW9uLFxuICAgICAgX3JlZjIkc29ydEJ5ID0gX3JlZjIuc29ydEJ5LFxuICAgICAgc29ydEJ5ID0gX3JlZjIkc29ydEJ5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmMiRzb3J0QnksXG4gICAgICBfcmVmMiRzb3J0U2hpZnQgPSBfcmVmMi5zb3J0U2hpZnQsXG4gICAgICBzb3J0U2hpZnQgPSBfcmVmMiRzb3J0U2hpZnQgPT09IHZvaWQgMCA/ICctMTAwJyA6IF9yZWYyJHNvcnRTaGlmdDtcblxuICB2YXIgY29sb3JzID0gW107XG4gIHZhciBiYXNlID0gWycjNTRCMzk5JywgLy8gMCBncmVlblxuICAnIzYwOTJDMCcsIC8vIDEgYmx1ZVxuICAnI0QzNjA4NicsIC8vIDIgZGFyayBwaW5rXG4gICcjOTE3MEI4JywgLy8gMyBwdXJwbGVcbiAgJyNDQThFQUUnLCAvLyA0IGxpZ2h0IHBpbmtcbiAgJyNENkJGNTcnLCAvLyA1IHllbGxvd1xuICAnI0I5QTg4OCcsIC8vIDYgdGFuXG4gICcjREE4QjQ1JywgLy8gNyBvcmFuZ2VcbiAgJyNBQTY1NTYnLCAvLyA4IGJyb3duXG4gICcjRTc2NjRDJyAvLyA5IHJlZFxuICBdO1xuXG4gIGlmIChzb3J0QnkgPT09ICduYXR1cmFsJykge1xuICAgIC8vIFNvcnQgdGhlIGNvbG9ycyBiYXNlZCBvbiB0aGUgY29sb3Igd2hlZWwsIGJ1dCBzaGlmdGluZyB0aGUgdmFsdWVzIGJhc2VkIG9uIHNvcnRTaGlmdFxuICAgIGJhc2UgPSBfdG9Db25zdW1hYmxlQXJyYXkoYmFzZSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGNocm9tYShhKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXSAtIGNocm9tYShiKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyb3RhdGlvbnMgPiAxKSB7XG4gICAgdmFyIHBhbGV0dGVzID0gYmFzZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGRhcmtlc3QgYW5kIGxpZ2h0ZXN0IHZlcnNpb25zIG9mIGVhY2ggY29sb3IgdXNpbmcgYmxhY2sgYW5kIHdoaXRlXG4gICAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShbJ2JsYWNrJywgY29sb3IsICd3aGl0ZSddLCA1LCBmYWxzZSwgdHJ1ZSk7IC8vIFRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJlbWVzXG5cbiAgICAgIHBhbGV0dGUucG9wKCk7XG4gICAgICBwYWxldHRlLnNoaWZ0KCk7XG5cbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMl1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdkYXJrZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMF1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4gY29sb3JQYWxldHRlKHBhbGV0dGUsIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG9yZGVyID09PSAnZ3JvdXAnKSB7XG4gICAgICBjb2xvcnMgPSBmbGF0dGVuKHBhbGV0dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgX2NvbG9ycztcblxuICAgICAgICB2YXIgcm90YXRpb24gPSBwYWxldHRlcy5tYXAoZnVuY3Rpb24gKHBhbGV0dGUpIHtcbiAgICAgICAgICByZXR1cm4gcGFsZXR0ZVtpXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKF9jb2xvcnMgPSBjb2xvcnMpLnB1c2guYXBwbHkoX2NvbG9ycywgX3RvQ29uc3VtYWJsZUFycmF5KHJvdGF0aW9uKSk7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdGF0aW9uczsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb2xvcnMgPSBiYXNlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9ycztcbn07XG4vKipcbiAqIENvbG9yIGJsaW5kIHBhbGV0dGUgd2l0aCB0ZXh0IGlzIG1lYW50IGZvciB1c2Ugd2hlbiB0ZXh0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIEl0IGluY3JlYXNlcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgdG8gZ2l2ZSB0aGUgdGV4dCBtb3JlIGNvbnRyYXN0LlxuICovXG5cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCkge1xuICB2YXIgcGFsZXR0ZVByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIG9yaWdpbmFsUGFsZXR0ZSA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKHBhbGV0dGVQcm9wcyk7XG4gIHZhciBuZXdQYWxldHRlID0gb3JpZ2luYWxQYWxldHRlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbigwLjUpLmhleCgpO1xuICB9KTtcbiAgcmV0dXJuIG5ld1BhbGV0dGU7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzAwNkJCNCcsICcjMDE3RDczJywgJyNGNUE3MDAnLCAnI0JEMjcxRScsICcjREQwQTczJ107XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMxQkE5RjUnLCAnIzdERTJEMScsICcjRjk5MEMwJywgJyNGNjYnLCAnI0ZGQ0U3QSddO1xufTtcbnZhciBwb3NpdGl2ZUNvbG9yID0gJyMyMDkyODAnO1xudmFyIG5lZ2F0aXZlQ29sb3IgPSAnI0NDNTY0Mic7XG52YXIgbGlnaHROZWdhdGl2ZUNvbG9yID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XTtcbnZhciBjb29sQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgJyM2MDkyQzAnXTtcbnZhciB3YXJtQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XV07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JTdGF0dXMgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yU3RhdHVzKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbcG9zaXRpdmVDb2xvcl07XG4gIH1cblxuICBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtwb3NpdGl2ZUNvbG9yLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzVdLCBuZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW3Bvc2l0aXZlQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbMF0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIGxpZ2h0TmVnYXRpdmVDb2xvciwgbmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZShzdGVwcykge1xuICB2YXIgY29vbHMgPSBjb2xvclBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29sQXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkpLCBbJyNFQkVGRjUnXSksIDMpO1xuICB2YXIgd2FybXMgPSBjb2xvclBhbGV0dGUoWycjRjRGM0RCJ10uY29uY2F0KHdhcm1BcnJheSksIDMpO1xuXG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbHNbMF1dO1xuICB9IGVsc2UgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbY29vbHNbMF0sIGxpZ2h0TmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY29vbHMpLCBfdG9Db25zdW1hYmxlQXJyYXkod2FybXMpKSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbXBsaW1lbnRhcnkgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29tcGxpbWVudGFyeShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV1dO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbN11dLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlTmVnYXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlTmVnYXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIG5lZ2F0aXZlQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlUG9zaXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlUG9zaXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzBdXTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCBwb3NpdGl2ZUNvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvb2wgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29vbChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2Nvb2xBcnJheVsxXV07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJ10uY29uY2F0KGNvb2xBcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVXYXJtID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVdhcm0oc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWycjRkJGQkRDJ10uY29uY2F0KHdhcm1BcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmF5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyYXkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFsnIzk4YTJiMyddO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsICcjZDNkYWU2JywgJyM5OGEyYjMnLCAnIzY5NzA3ZCcsICcjMzQzNzQxJ10sIHN0ZXBzLCBmYWxzZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNWYWxpZEhleCB9IGZyb20gJy4vaXNfdmFsaWRfaGV4JztcblxudmFyIGluT3JpZ2luYWxGb3JtYXQgPSBmdW5jdGlvbiBpbk9yaWdpbmFsRm9ybWF0KG9yaWdpbmFsQ29sb3IsIG5ld0NvbG9yKSB7XG4gIHJldHVybiBpc1ZhbGlkSGV4KG9yaWdpbmFsQ29sb3IpID8gbmV3Q29sb3IuaGV4KCkgOiBuZXdDb2xvci5jc3MoKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgY29sb3IgbW9yZSB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbHBoYSAtIGFscGhhIGNoYW5uZWwgdmFsdWUuIEZyb20gMC0xLlxuICovXG5cblxuZXhwb3J0IHZhciB0cmFuc3BhcmVudGl6ZSA9IGZ1bmN0aW9uIHRyYW5zcGFyZW50aXplKGNvbG9yLCBhbHBoYSkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5hbHBoYShhbHBoYSkuY3NzKCk7XG59O1xuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggd2hpdGUuXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqL1xuXG5leHBvcnQgdmFyIHRpbnQgPSBmdW5jdGlvbiB0aW50KGNvbG9yLCByYXRpbykge1xuICB2YXIgdGludCA9IGNocm9tYS5taXgoY29sb3IsICcjZmZmJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHRpbnQpO1xufTtcbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIGJsYWNrLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggYmxhY2tcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgYmxhY2suXG4gKi9cblxuZXhwb3J0IHZhciBzaGFkZSA9IGZ1bmN0aW9uIHNoYWRlKGNvbG9yLCByYXRpbykge1xuICB2YXIgc2hhZGUgPSBjaHJvbWEubWl4KGNvbG9yLCAnIzAwMCcsIHJhdGlvLCAncmdiJyk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzaGFkZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB0aW50ZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHNoYWRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuXG5leHBvcnQgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IsIHJhdGlvLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIHJhdGlvKSA6IHRpbnQoY29sb3IsIHJhdGlvKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIHNoYWRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgdGludGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5cbmV4cG9ydCB2YXIgc2hhZGVPclRpbnQgPSBmdW5jdGlvbiBzaGFkZU9yVGludChjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGNvbG9yLCByYXRpbykgOiBzaGFkZShjb2xvciwgcmF0aW8pO1xufTtcbi8qKlxuICogSW5jcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBzYXR1cmF0ZSA9IGZ1bmN0aW9uIHNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIHNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCIrXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgc2F0dXJhdGUpO1xufTtcbi8qKlxuICogRGVjcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBkZXNhdHVyYXRlID0gZnVuY3Rpb24gZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gIHZhciBkZXNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCItXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgZGVzYXR1cmF0ZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWdodG5lc3MgdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvclxuICovXG5cbmV4cG9ydCB2YXIgbGlnaHRuZXNzID0gZnVuY3Rpb24gbGlnaHRuZXNzKGNvbG9yKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmdldCgnaHNsLmwnKSAqIDEwMDtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCBsaWdodG5lc3MgYXMgZ2V0TGlnaHRuZXNzIH0gZnJvbSAnLi9tYW5pcHVsYXRpb24nO1xuaW1wb3J0IHsgZ2V0T24gfSBmcm9tICcuLi90aGVtZS91dGlscyc7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgY29sb3IgdGhhdCBtZWV0cyBvciBleGNlZWRzIFdDQUcgbGV2ZWwgQUFcbiAqIEBwYXJhbSBmb3JlZ3JvdW5kIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIHJhdGlvIC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xMC5cbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFja2dyb3VuZCAtIENvbG9yIHRvIHVzZSBhcyB0aGUgY29udHJhc3QgYmFzaXMgb3IganVzdCBwYXNzIEV1aVRoZW1lXG4gKi9cblxuZXhwb3J0IHZhciBtYWtlSGlnaENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoX2ZvcmVncm91bmQpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0Ljg1O1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgdmFyIF9nZXRPbjtcblxuICAgIHZhciBmb3JlZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gKF9nZXRPbiA9IGdldE9uKHRoZW1lT3JCYWNrZ3JvdW5kLCBfZm9yZWdyb3VuZCkpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogX2ZvcmVncm91bmQgOiBfZm9yZWdyb3VuZDtcbiAgICB2YXIgYmFja2dyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYWNrZ3JvdW5kLmNvbG9ycy5ib2R5IDogdGhlbWVPckJhY2tncm91bmQ7XG5cbiAgICBpZiAoY2hyb21hKGZvcmVncm91bmQpLmFscGhhKCkgPCAxIHx8IGNocm9tYShiYWNrZ3JvdW5kKS5hbHBoYSgpIDwgMSkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ29udHJhc3QgY2Fubm90IGJlIGFjY3VyYXRlbHkgY2FsY3VsYXRlZCB3aGVuIGNvbG9ycyBoYXZlIGFscGhhIGNoYW5uZWwgb3BhY2l0eS4gTWFrZSBzdXJlIHRoZSBwcm92aWRlZCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBoYXZlIG5vIHRyYW5zcGFyZW5jeTpcXG5cXG5Gb3JlZ3JvdW5kOiBcIi5jb25jYXQoZm9yZWdyb3VuZCwgXCJcXG5CYWNrZ3JvdW5kOiBcIikuY29uY2F0KGJhY2tncm91bmQpKTtcbiAgICB9XG5cbiAgICB2YXIgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7IC8vIERldGVybWluZSB0aGUgbGlnaHRuZXNzIGZhY3RvciBvZiB0aGUgYmFja2dyb3VuZCBjb2xvciBmaXJzdCB0b1xuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRvIHNoYWRlIG9yIHRpbnQgdGhlIGZvcmVncm91bmQuXG5cbiAgICB2YXIgYnJpZ2h0bmVzcyA9IGdldExpZ2h0bmVzcyhiYWNrZ3JvdW5kKTtcbiAgICB2YXIgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gZm9yZWdyb3VuZDtcblxuICAgIHdoaWxlIChjb250cmFzdCA8IHJhdGlvKSB7XG4gICAgICBpZiAoYnJpZ2h0bmVzcyA+IDUwKSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHNoYWRlKGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSB0aW50KGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyYXN0ID0gY2hyb21hLmNvbnRyYXN0KGhpZ2hDb250cmFzdFRleHRDb2xvciwgYmFja2dyb3VuZCk7XG4gICAgICB2YXIgbGlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGhpZ2hDb250cmFzdFRleHRDb2xvcik7XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPCA1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGxpZ2h0IG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPiA5NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBkYXJrIG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNocm9tYShoaWdoQ29udHJhc3RUZXh0Q29sb3IpLmhleCgpO1xuICB9O1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB3aXRoIGluY3JlYXNlZCBjb250cmFzdFxuICogRGlzYWJsZWQgY29udGVudCBvbmx5IG5lZWRzIGEgY29udHJhc3Qgb2YgYXQgbGVhc3QgMiBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIGF2YWlsYWJsZVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpc1xuICovXG5cbmV4cG9ydCB2YXIgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoY29sb3IpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIG1ha2VIaWdoQ29udHJhc3RDb2xvcihjb2xvciwgcmF0aW8pKHRoZW1lT3JCYWNrZ3JvdW5kKTtcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0JztcblxuLypcbiAqIExJR0hUIFRIRU1FXG4gKiBPbmx5IHNwbGl0IHVwIGluIHRoZSBsaWdodCB0aGVtZSB0byBhY2Nlc3MgdGhlIGtleXMgYnkgc2VjdGlvbiBpbiB0aGUgZG9jc1xuICovXG5leHBvcnQgdmFyIGJyYW5kX2NvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMwN0MnLFxuICBhY2NlbnQ6ICcjRjA0RTk4JyxcbiAgc3VjY2VzczogJyMwMEJGQjMnLFxuICB3YXJuaW5nOiAnI0ZFQzUxNCcsXG4gIGRhbmdlcjogJyNCRDI3MUUnXG59O1xuZXhwb3J0IHZhciBicmFuZF90ZXh0X2NvbG9ycyA9IHtcbiAgcHJpbWFyeVRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnByaW1hcnknKSksXG4gIGFjY2VudFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmFjY2VudCcpKSxcbiAgc3VjY2Vzc1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnN1Y2Nlc3MnKSksXG4gIHdhcm5pbmdUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy53YXJuaW5nJykpLFxuICBkYW5nZXJUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYW5nZXInKSlcbn07XG5leHBvcnQgdmFyIHNoYWRlX2NvbG9ycyA9IHtcbiAgZW1wdHlTaGFkZTogJyNGRkYnLFxuICBsaWdodGVzdFNoYWRlOiAnI0YxRjRGQScsXG4gIGxpZ2h0U2hhZGU6ICcjRDNEQUU2JyxcbiAgbWVkaXVtU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya1NoYWRlOiAnIzY5NzA3RCcsXG4gIGRhcmtlc3RTaGFkZTogJyMzNDM3NDEnLFxuICBmdWxsU2hhZGU6ICcjMDAwJ1xufTtcbmV4cG9ydCB2YXIgc3BlY2lhbF9jb2xvcnMgPSB7XG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiB0aW50KGxpZ2h0ZXN0U2hhZGUsIDAuNCk7XG4gIH0sIFsnY29sb3JzLmxpZ2h0ZXN0U2hhZGUnXSksXG4gIGhpZ2hsaWdodDogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICB3YXJuaW5nID0gX3JlZjRbMF07XG5cbiAgICByZXR1cm4gdGludCh3YXJuaW5nLCAwLjkpO1xuICB9LCBbJ2NvbG9ycy53YXJuaW5nJ10pLFxuICBkaXNhYmxlZDogJyNBQkI0QzQnLFxuICBkaXNhYmxlZFRleHQ6IGNvbXB1dGVkKG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kaXNhYmxlZCcpKSxcbiAgc2hhZG93OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufTtcbmV4cG9ydCB2YXIgdGV4dF9jb2xvcnMgPSB7XG4gIHRleHQ6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBfcmVmNyA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAxKSxcbiAgICAgICAgZGFya2VzdFNoYWRlID0gX3JlZjdbMF07XG5cbiAgICByZXR1cm4gZGFya2VzdFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5kYXJrZXN0U2hhZGUnXSksXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmOCwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmOVswXTtcblxuICAgIHJldHVybiBzaGFkZSh0ZXh0LCAwLjUpO1xuICB9LCBbJ2NvbG9ycy50ZXh0J10pLFxuICBzdWJkdWVkVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuZGFya1NoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgdmFyIF9yZWYxMSA9IF9zbGljZWRUb0FycmF5KF9yZWYxMCwgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjExWzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufTtcbmV4cG9ydCB2YXIgbGlnaHRfY29sb3JzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBicmFuZF9jb2xvcnMpLCBzaGFkZV9jb2xvcnMpLCBzcGVjaWFsX2NvbG9ycyksIGJyYW5kX3RleHRfY29sb3JzKSwgdGV4dF9jb2xvcnMpO1xuLypcbiAqIERBUksgVEhFTUVcbiAqL1xuXG5leHBvcnQgdmFyIGRhcmtfc2hhZGVzID0ge1xuICBlbXB0eVNoYWRlOiAnIzFEMUUyNCcsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjMjUyNjJFJyxcbiAgbGlnaHRTaGFkZTogJyMzNDM3NDEnLFxuICBtZWRpdW1TaGFkZTogJyM1MzU5NjYnLFxuICBkYXJrU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya2VzdFNoYWRlOiAnI0Q0REFFNScsXG4gIGZ1bGxTaGFkZTogJyNGRkYnXG59O1xuZXhwb3J0IHZhciBkYXJrX2NvbG9yc19hbXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gIC8vIEJyYW5kXG4gIHByaW1hcnk6ICcjMzZBMkVGJyxcbiAgYWNjZW50OiAnI0Y2OEZCRScsXG4gIHN1Y2Nlc3M6ICcjN0RERUQ4JyxcbiAgd2FybmluZzogJyNGM0QzNzEnLFxuICBkYW5nZXI6ICcjRjg2QjYzJ1xufSwgZGFya19zaGFkZXMpLCB7fSwge1xuICAvLyBTcGVjaWFsXG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgX3JlZjEzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEyLCAxKSxcbiAgICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYxM1swXTtcblxuICAgIHJldHVybiBzaGFkZShsaWdodGVzdFNoYWRlLCAwLjQ1KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiAnIzJFMkQyNScsXG4gIGRpc2FibGVkOiAnIzUxNTc2MScsXG4gIGRpc2FibGVkVGV4dDogY29tcHV0ZWQobWFrZURpc2FibGVkQ29udHJhc3RDb2xvcignY29sb3JzLmRpc2FibGVkJykpLFxuICBzaGFkb3c6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTQpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjE0LmNvbG9ycztcbiAgICByZXR1cm4gY29sb3JzLmluaztcbiAgfSlcbn0sIGJyYW5kX3RleHRfY29sb3JzKSwge30sIHtcbiAgLy8gVGV4dFxuICB0ZXh0OiAnI0RGRTVFRicsXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE1KSB7XG4gICAgdmFyIF9yZWYxNiA9IF9zbGljZWRUb0FycmF5KF9yZWYxNSwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmMTZbMF07XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfSwgWydjb2xvcnMudGV4dCddKSxcbiAgc3ViZHVlZFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLm1lZGl1bVNoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE3KSB7XG4gICAgdmFyIF9yZWYxOCA9IF9zbGljZWRUb0FycmF5KF9yZWYxNywgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjE4WzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufSk7XG4vKlxuICogRlVMTFxuICovXG5cbmV4cG9ydCB2YXIgY29sb3JzID0ge1xuICBnaG9zdDogJyNGRkYnLFxuICBpbms6ICcjMDAwJyxcbiAgTElHSFQ6IGxpZ2h0X2NvbG9ycyxcbiAgREFSSzogZGFya19jb2xvcnNfYW1zXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFuaW1hdGlvbl9zcGVlZCA9IHtcbiAgZXh0cmFGYXN0OiAnOTBtcycsXG4gIGZhc3Q6ICcxNTBtcycsXG4gIG5vcm1hbDogJzI1MG1zJyxcbiAgc2xvdzogJzM1MG1zJyxcbiAgZXh0cmFTbG93OiAnNTAwbXMnXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb25fZWFzZSA9IHtcbiAgYm91bmNlOiAnY3ViaWMtYmV6aWVyKC4zNCwgMS42MSwgLjcsIDEpJyxcbiAgcmVzaXN0YW5jZTogJ2N1YmljLWJlemllciguNjk0LCAuMDQ4MiwgLjMzNSwgMSknXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvbl9zcGVlZCksIGFuaW1hdGlvbl9lYXNlKTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24nO1xuLyoqXG4gKiBFVUkgdXRpbGl6ZXMgbG9naWNhbCBDU1MgcHJvcGVydGllcyB0byBlbmFibGUgZGlyZWN0aW9uYWwgd3JpdGluZy1tb2Rlcy5cbiAqIFRvIGVuY291cmFnZSB1c2Ugb2YgbG9naWNhbCBwcm9wZXJ0aWVzLCB3ZSBwcm92aWRlIGEgZmV3IGhlbHBlciB1dGlsaXRpZXMgdG9cbiAqIGNvbnZlcnQgY2VydGFpbiBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIHRvIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfTG9naWNhbF9Qcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU2lkZSA9IHtcbiAgbGVmdDogJ2lubGluZS1zdGFydCcsXG4gIHJpZ2h0OiAnaW5saW5lLWVuZCcsXG4gIHRvcDogJ2Jsb2NrLXN0YXJ0JyxcbiAgYm90dG9tOiAnYmxvY2stZW5kJyxcbiAgaG9yaXpvbnRhbDogJ2lubGluZScsXG4gIHZlcnRpY2FsOiAnYmxvY2snXG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1NJREVTID0ga2V5c09mKGxvZ2ljYWxTaWRlKTtcbnZhciBsb2dpY2FsTWFyZ2lucyA9IHtcbiAgJ21hcmdpbi1sZWZ0JzogJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLXJpZ2h0JzogJ21hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ21hcmdpbi10b3AnOiAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nOiAnbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdtYXJnaW4taG9yaXpvbnRhbCc6ICdtYXJnaW4taW5saW5lJyxcbiAgJ21hcmdpbi12ZXJ0aWNhbCc6ICdtYXJnaW4tYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQYWRkaW5ncyA9IHtcbiAgJ3BhZGRpbmctbGVmdCc6ICdwYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctaW5saW5lLWVuZCcsXG4gICdwYWRkaW5nLXRvcCc6ICdwYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3BhZGRpbmctYm90dG9tJzogJ3BhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3BhZGRpbmctaG9yaXpvbnRhbCc6ICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLXZlcnRpY2FsJzogJ3BhZGRpbmctYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQb3NpdGlvbiA9IHtcbiAgdG9wOiAnaW5zZXQtYmxvY2stc3RhcnQnLFxuICByaWdodDogJ2luc2V0LWlubGluZS1lbmQnLFxuICBib3R0b206ICdpbnNldC1ibG9jay1lbmQnLFxuICBsZWZ0OiAnaW5zZXQtaW5saW5lLXN0YXJ0JyxcbiAgaG9yaXpvbnRhbDogJ2luc2V0LWJsb2NrJyxcbiAgdmVydGljYWw6ICdpbnNldC1pbmxpbmUnLFxuICBpbnNldDogJ2luc2V0J1xufTtcbnZhciBsb2dpY2FsU2l6ZSA9IHtcbiAgaGVpZ2h0OiAnYmxvY2stc2l6ZScsXG4gIHdpZHRoOiAnaW5saW5lLXNpemUnLFxuICAnbWF4LWhlaWdodCc6ICdtYXgtYmxvY2stc2l6ZScsXG4gICdtYXgtd2lkdGgnOiAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21pbi1oZWlnaHQnOiAnbWluLWJsb2NrLXNpemUnLFxuICAnbWluLXdpZHRoJzogJ21pbi1pbmxpbmUtc2l6ZSdcbn07XG52YXIgbG9naWNhbE92ZXJmbG93ID0ge1xuICAnb3ZlcmZsb3cteCc6ICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy15JzogJ292ZXJmbG93LWlubGluZSdcbn07XG52YXIgbG9naWNhbEJvcmRlcnMgPSB7XG4gICdib3JkZXItaG9yaXpvbnRhbCc6ICdib3JkZXItaW5saW5lJyxcbiAgJ2JvcmRlci1ob3Jpem9udGFsLWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtY29sb3InLFxuICAnYm9yZGVyLWhvcml6b250YWwtd2lkdGgnOiAnYm9yZGVyLWlubGluZS13aWR0aCcsXG4gICdib3JkZXItaG9yaXpvbnRhbC1zdHlsZSc6ICdib3JkZXItaW5saW5lLXN0eWxlJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbCc6ICdib3JkZXItYmxvY2snLFxuICAnYm9yZGVyLXZlcnRpY2FsLWNvbG9yJzogJ2JvcmRlci1ibG9jay1jb2xvcicsXG4gICdib3JkZXItdmVydGljYWwtd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXdpZHRoJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbC1zdHlsZSc6ICdib3JkZXItYmxvY2stc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbSc6ICdib3JkZXItYmxvY2stZW5kJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InOiAnYm9yZGVyLWJsb2NrLWVuZC1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJzogJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCc6ICdib3JkZXItYmxvY2stZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci10b3AnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0JyxcbiAgJ2JvcmRlci10b3AtY29sb3InOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yaWdodCc6ICdib3JkZXItaW5saW5lLWVuZCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InOiAnYm9yZGVyLWlubGluZS1lbmQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJzogJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCc6ICdib3JkZXItaW5saW5lLWVuZC13aWR0aCcsXG4gICdib3JkZXItbGVmdCc6ICdib3JkZXItaW5saW5lLXN0YXJ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnOiAnYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCc6ICdib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnOiAnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6ICdib3JkZXItc3RhcnQtZW5kLXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJzogJ2JvcmRlci1lbmQtc3RhcnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJzogJ2JvcmRlci1lbmQtZW5kLXJhZGl1cydcbn07XG5leHBvcnQgdmFyIGxvZ2ljYWxzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxNYXJnaW5zKSwgbG9naWNhbFBhZGRpbmdzKSwgbG9naWNhbFBvc2l0aW9uKSwgbG9naWNhbFNpemUpLCBsb2dpY2FsT3ZlcmZsb3cpLCBsb2dpY2FsQm9yZGVycyk7XG5leHBvcnQgdmFyIExPR0lDQUxfUFJPUEVSVElFUyA9IGtleXNPZihsb2dpY2Fscyk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTID0gZnVuY3Rpb24gbG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGxvZ2ljYWxzW3Byb3BlcnR5XSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGUocHJvcGVydHksIHZhbHVlKSB7XG4gIC8vIFN0cmlwIGh5cGhlbnMgYW5kIGNhbWVsQ2FzZSB0aGUgQ1NTIGxvZ2ljYWwgcHJvcGVydHkgc28gUmVhY3QgZG9lc24ndCB0aHJvdyBlcnJvcnNcbiAgdmFyIGNhbWVsQ2FzZWRQcm9wZXJ0eSA9IGxvZ2ljYWxzW3Byb3BlcnR5XS5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbiAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY2FtZWxDYXNlZFByb3BlcnR5LCBcIlwiLmNvbmNhdCh2YWx1ZSkpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNpemVDU1Mod2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxzLndpZHRoLCBcIjogXCIpLmNvbmNhdCh3aWR0aCwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbHMuaGVpZ2h0LCBcIjogXCIpLmNvbmNhdChoZWlnaHQsIFwiO1xcbiAgXCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZVN0eWxlKHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIHJldHVybiBfcmVmMiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3JlZjIsIGxvZ2ljYWxzLndpZHRoLCB3aWR0aCksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMiwgbG9naWNhbHMuaGVpZ2h0LCBoZWlnaHQpLCBfcmVmMjtcbn07IC8vIFRleHQgYWxpZ25tZW50IGlzIHNlcGFyYXRlIGJlY2F1c2UgaXRzIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZXMgbm90IHRoZSBwcm9wZXJ0eVxuXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0ID0ge1xuICAndGV4dC1hbGlnbic6IHtcbiAgICBsZWZ0OiAnc3RhcnQnLFxuICAgIGNlbnRlcjogJ2NlbnRlcicsXG4gICAgcmlnaHQ6ICdlbmQnXG4gIH1cbn07XG5leHBvcnQgdmFyIExPR0lDQUxfVEVYVF9BTElHTk1FTlQgPSBrZXlzT2YobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXSk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduQ1NTID0gZnVuY3Rpb24gbG9naWNhbFRleHRBbGlnbkNTUyh2YWx1ZSkge1xuICByZXR1cm4gXCJ0ZXh0LWFsaWduOiBcIi5jb25jYXQobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV0sIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduU3R5bGUodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0QWxpZ246IGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ11bdmFsdWVdXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYHB4YCB2YWx1ZSBiYXNlZCBvbiBhIHNjYWxlIG11bHRpcGxpZXJcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIG11bHRpcGxpZXJcbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFzZSAtIFRoZW1lIGJhc2UgdmFsdWVcbiAqICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIFJlbSB1bml0IGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuZXhwb3J0IHZhciBzaXplVG9QaXhlbCA9IGZ1bmN0aW9uIHNpemVUb1BpeGVsKCkge1xuICB2YXIgc2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDE7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhc2UpIHtcbiAgICB2YXIgYmFzZSA9IF90eXBlb2YodGhlbWVPckJhc2UpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYXNlLmJhc2UgOiB0aGVtZU9yQmFzZTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoYmFzZSAqIHNjYWxlLCBcInB4XCIpO1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBmb250LXNpemUgdmFsdWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxlIGtleVxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBmb250LXNpemUgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBfcmVmKSB7XG4gIHZhciBiYXNlID0gX3JlZi5iYXNlLFxuICAgICAgZm9udCA9IF9yZWYuZm9udDtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgX3JlZjIkbWVhc3VyZW1lbnQgPSBfcmVmMi5tZWFzdXJlbWVudCxcbiAgICAgIG1lYXN1cmVtZW50ID0gX3JlZjIkbWVhc3VyZW1lbnQgPT09IHZvaWQgMCA/ICdyZW0nIDogX3JlZjIkbWVhc3VyZW1lbnQsXG4gICAgICBjdXN0b21TY2FsZSA9IF9yZWYyLmN1c3RvbVNjYWxlO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChmb250LnNjYWxlW3NjYWxlXSwgXCJlbVwiKTtcbiAgfVxuXG4gIHZhciBudW1lcmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtzY2FsZV07XG4gIGlmIChjdXN0b21TY2FsZSkgbnVtZXJhdG9yICo9IGZvbnQuc2NhbGVbY3VzdG9tU2NhbGVdO1xuICB2YXIgZGVub21pbmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdO1xuICByZXR1cm4gbWVhc3VyZW1lbnQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChudW1lcmF0b3IsIFwicHhcIikgOiBcIlwiLmNvbmNhdCgobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lLWhlaWdodCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiB0aGUgYmFzZWxpbmVcbiAqIEVYOiBBIHByb3BlciBsaW5lLWhlaWdodCBmb3IgdGV4dCBpcyAxLjUgdGltZXMgdGhlIGZvbnQtc2l6ZS5cbiAqICAgICBJZiBvdXIgYmFzZSBmb250IHNpemUgKGV1aUZvbnRTaXplKSBpcyAxNiwgYW5kIG91ciBiYXNlbGluZSBpcyA0LiBUbyBlbnN1cmUgdGhlXG4gKiAgICAgdGV4dCBzdGF5cyBvbiB0aGUgYmFzZWxpbmUsIHdlIHBhc3MgYSBtdWx0aXBsaWVyIHRvIGNhbGN1bGF0ZSBhIGxpbmUtaGVpZ2h0LlxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBsaW5lLWhlaWdodCB2YWx1ZSBhbGlnbmVkIHRvIGJhc2VsaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIF9yZWYzKSB7XG4gIHZhciBiYXNlID0gX3JlZjMuYmFzZSxcbiAgICAgIGZvbnQgPSBfcmVmMy5mb250O1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBfcmVmNCRtZWFzdXJlbWVudCA9IF9yZWY0Lm1lYXN1cmVtZW50LFxuICAgICAgbWVhc3VyZW1lbnQgPSBfcmVmNCRtZWFzdXJlbWVudCA9PT0gdm9pZCAwID8gJ3JlbScgOiBfcmVmNCRtZWFzdXJlbWVudCxcbiAgICAgIGN1c3RvbVNjYWxlID0gX3JlZjQuY3VzdG9tU2NhbGU7XG5cbiAgdmFyIGJhc2VsaW5lID0gZm9udC5iYXNlbGluZSxcbiAgICAgIGxpbmVIZWlnaHRNdWx0aXBsaWVyID0gZm9udC5saW5lSGVpZ2h0TXVsdGlwbGllcjtcbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG5cbiAgdmFyIF9saW5lSGVpZ2h0TXVsdGlwbGllciA9IG51bWVyYXRvciA8PSBiYXNlID8gbGluZUhlaWdodE11bHRpcGxpZXIgOiBsaW5lSGVpZ2h0TXVsdGlwbGllciAqIDAuODMzO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBsaW5lLWhlaWdodCB2aWEgYGVtYCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhZ2FpbnN0IHRoZSBwaXhlbCBiYXNlbGluZSBncmlkO1xuICAgIC8vIHdlIHdpbGwgYXNzdW1lIHRoYXQgdHlwaWNhbGx5IGxhcmdlciBzY2FsZSBmb250LXNpemVzIHNob3VsZCBoYXZlIGEgc2hvcnRlciBsaW5lLWhlaWdodDtcbiAgICByZXR1cm4gX2xpbmVIZWlnaHRNdWx0aXBsaWVyLnRvRml4ZWQoNCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwaXhlbFZhbHVlID0gTWF0aC5mbG9vcihNYXRoLnJvdW5kKG51bWVyYXRvciAqIF9saW5lSGVpZ2h0TXVsdGlwbGllcikgLyBiYXNlbGluZSkgKiBiYXNlbGluZTtcbiAgcmV0dXJuIG1lYXN1cmVtZW50ID09PSAncHgnID8gXCJcIi5jb25jYXQocGl4ZWxWYWx1ZSwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChwaXhlbFZhbHVlIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBUZXh0IHdlaWdodCBzaGlmdGluZ1xuICpcbiAqIFdoZW4gY2hhbmdpbmcgdGhlIGZvbnQtd2VpZ2h0IGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LFxuICogdGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzaXppbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBib2xkZXN0XG4gKiB3ZWlnaHQgc28gaXQgZG9lc24ndCBzaGlmdCBzaWJsaW5nIGNvbnRlbnQuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0U2hpZnQgPSBmdW5jdGlvbiBldWlUZXh0U2hpZnQoKSB7XG4gIHZhciBmb250V2VpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYm9sZCc7XG4gIHZhciBhdHRyaWJ1dGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRhLXRleHQnO1xuICB2YXIgZXVpVGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFwiXFxuICAmOjphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBhdHRyKFwiLmNvbmNhdChhdHRyaWJ1dGUsIFwiKTtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHRbZm9udFdlaWdodF0sIFwiO1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJhc2UgPSAxNjtcbmV4cG9ydCB2YXIgc2l6ZSA9IHtcbiAgeHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICB4czogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpLFxuICBzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjUpKSxcbiAgbTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC43NSkpLFxuICBiYXNlOiBjb21wdXRlZChzaXplVG9QaXhlbCgpKSxcbiAgbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMS41KSksXG4gIHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyKSksXG4gIHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMi41KSksXG4gIHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDMpKSxcbiAgeHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDQpKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJvcmRlciA9IHtcbiAgY29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiBsaWdodFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5saWdodFNoYWRlJ10pLFxuICB3aWR0aDoge1xuICAgIHRoaW46ICcxcHgnLFxuICAgIHRoaWNrOiAnMnB4J1xuICB9LFxuICByYWRpdXM6IHtcbiAgICBtZWRpdW06IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMzc1KSksXG4gICAgc21hbGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMjUpKVxuICB9LFxuICB0aGluOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICAgIHdpZHRoID0gX3JlZjRbMF0sXG4gICAgICAgIGNvbG9yID0gX3JlZjRbMV07XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgdGhpY2s6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmNlswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmNlsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgZWRpdGFibGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmOFswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmOFsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgZG90dGVkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGxldmVscyA9IHtcbiAgdG9hc3Q6IDkwMDAsXG4gIG1vZGFsOiA4MDAwLFxuICBtYXNrOiA2MDAwLFxuICBuYXZpZ2F0aW9uOiA2MDAwLFxuICBtZW51OiAyMDAwLFxuICBoZWFkZXI6IDEwMDAsXG4gIGZseW91dDogMTAwMCxcbiAgbWFza0JlbG93SGVhZGVyOiAxMDAwLFxuICBjb250ZW50OiAwXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuLy8gVHlwb2dyYXBoaWMgc2NhbGUgLS0gbG9vc2VseSBiYXNlZCBvbiBNYWpvciBUaGlyZCAoMS4yNTApXG5leHBvcnQgdmFyIGZvbnRTY2FsZSA9IHtcbiAgeHh4czogMC41NjI1LFxuICB4eHM6IDAuNjg3NSxcbiAgeHM6IDAuNzUsXG4gIHM6IDAuODc1LFxuICBtOiAxLFxuICBsOiAxLjM3NSxcbiAgeGw6IDEuNjg3NSxcbiAgeHhsOiAyLjEyNVxufTsgLy8gRmFtaWxpZXMgJiBiYXNlIGZvbnQgc2V0dGluZ3NcblxuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgYmFzZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIGJhc2UgLyA0O1xuICB9LCBbJ2Jhc2UnXSksXG4gIGxpbmVIZWlnaHRNdWx0aXBsaWVyOiAxLjVcbn07XG5leHBvcnQgdmFyIGZvbnRXZWlnaHQgPSB7XG4gIGxpZ2h0OiAzMDAsXG4gIHJlZ3VsYXI6IDQwMCxcbiAgbWVkaXVtOiA1MDAsXG4gIHNlbWlCb2xkOiA2MDAsXG4gIGJvbGQ6IDcwMFxufTtcbmV4cG9ydCB2YXIgZm9udCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9udEJhc2UpLCB7fSwge1xuICBzY2FsZTogZm9udFNjYWxlLFxuICB3ZWlnaHQ6IGZvbnRXZWlnaHQsXG4gIGJvZHk6IHtcbiAgICBzY2FsZTogJ3MnLFxuICAgIHdlaWdodDogJ3JlZ3VsYXInXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgd2VpZ2h0OiAnYm9sZCdcbiAgfVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogTk9URTogVGhlc2Ugd2VyZSBxdWljayBjb252ZXJzaW9ucyBvZiB0aGVpciBTYXNzIGNvdW50ZXJwYXJ0cy5cbiAqICAgICAgIFRoZSBjb21tZW50ZWQgb3V0IGtleXMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZCBhcyBuZWNlc3NhcnkgeWV0LlxuICovXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IHNpemVUb1BpeGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUnO1xuZXhwb3J0IHZhciBmb2N1cyA9IHtcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSAvLyB0cmFuc3BhcmVuY3k6IHsgTElHSFQ6IDAuOSwgREFSSzogMC43IH0sXG4gIC8vIGJhY2tncm91bmRDb2xvcjogY29tcHV0ZWQoKHsgY29sb3JzLCBmb2N1cyB9KSA9PlxuICAvLyAgIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBmb2N1cyEudHJhbnNwYXJlbmN5KVxuICAvLyApLFxuICAvLyBPdXRsaW5lXG4gIC8vIG91dGxpbmU6IHtcbiAgLy8gICBvdXRsaW5lOiBjb21wdXRlZCgoeyBmb2N1cyB9KSA9PiBgJHtmb2N1cyEud2lkdGh9IHNvbGlkICR7Zm9jdXMhLmNvbG9yfWApLFxuICAvLyB9LFxuXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgYnVpbGRUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgYmFzZSwgc2l6ZSB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplJztcbmltcG9ydCB7IGJvcmRlciB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19ib3JkZXJzJztcbmltcG9ydCB7IGxldmVscyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMnO1xuaW1wb3J0IHsgZm9udCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL190eXBvZ3JhcGh5JztcbmltcG9ydCB7IGZvY3VzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3N0YXRlcyc7XG5leHBvcnQgdmFyIEFNU1RFUkRBTV9OQU1FX0tFWSA9ICdFVUlfVEhFTUVfQU1TVEVSREFNJztcbmV4cG9ydCB2YXIgZXVpVGhlbWVBbXN0ZXJkYW0gPSB7XG4gIGNvbG9yczogY29sb3JzLFxuICBiYXNlOiBiYXNlLFxuICBzaXplOiBzaXplLFxuICBib3JkZXI6IGJvcmRlcixcbiAgZm9udDogZm9udCxcbiAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gIGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsXG4gIGxldmVsczogbGV2ZWxzLFxuICBmb2N1czogZm9jdXNcbn07XG5leHBvcnQgdmFyIEV1aVRoZW1lQW1zdGVyZGFtID0gYnVpbGRUaGVtZShldWlUaGVtZUFtc3RlcmRhbSwgQU1TVEVSREFNX05BTUVfS0VZKTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciB1c2VFdWlUaGVtZSA9IGZ1bmN0aW9uIHVzZUV1aVRoZW1lKCkge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgbW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVRoZW1lOiB0aGVtZSxcbiAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSxcbiAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gIH07XG59O1xuLy8gUHJvdmlkZSB0aGUgY29tcG9uZW50IHByb3BzIGludGVyZmFjZSBhcyB0aGUgZ2VuZXJpYyB0byBhbGxvdyB0aGUgZG9jcyBwcm9wcyB0YWJsZSB0byBwb3B1bGF0ZS5cbi8vIGUuZy4sIGBjb25zdCBFdWlDb21wb25lbnQgPSB3aXRoRXVpVGhlbWU8RXVpQ29tcG9uZW50UHJvcHM+KF9FdWlDb21wb25lbnQpYFxuZXhwb3J0IHZhciB3aXRoRXVpVGhlbWUgPSBmdW5jdGlvbiB3aXRoRXVpVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoVGhlbWUnO1xuXG4gIHZhciBSZW5kZXIgPSBmdW5jdGlvbiBSZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZSxcbiAgICAgICAgY29sb3JNb2RlID0gX3VzZUV1aVRoZW1lLmNvbG9yTW9kZSxcbiAgICAgICAgbW9kaWZpY2F0aW9ucyA9IF91c2VFdWlUaGVtZS5tb2RpZmljYXRpb25zO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZToge1xuICAgICAgICBldWlUaGVtZTogZXVpVGhlbWUsXG4gICAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgICAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gICAgICB9LFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoRXVpVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihSZW5kZXIpO1xuICBXaXRoRXVpVGhlbWUuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuICByZXR1cm4gV2l0aEV1aVRoZW1lO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbnRleHQsIEV1aVRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgYnVpbGRUaGVtZSwgZ2V0Q29sb3JNb2RlLCBnZXRDb21wdXRlZCwgbWVyZ2VEZWVwIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfc3lzdGVtID0gX3JlZi50aGVtZSxcbiAgICAgIF9jb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICAgIF9tb2RpZmljYXRpb25zID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBwYXJlbnRTeXN0ZW0gPSB1c2VDb250ZXh0KEV1aVN5c3RlbUNvbnRleHQpO1xuICB2YXIgcGFyZW50TW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgcGFyZW50Q29sb3JNb2RlID0gdXNlQ29udGV4dChFdWlDb2xvck1vZGVDb250ZXh0KTtcbiAgdmFyIHBhcmVudFRoZW1lID0gdXNlQ29udGV4dChFdWlUaGVtZUNvbnRleHQpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShfc3lzdGVtIHx8IHBhcmVudFN5c3RlbSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHN5c3RlbSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRTeXN0ZW0gPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBwcmV2U3lzdGVtS2V5ID0gdXNlUmVmKHN5c3RlbS5rZXkpO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBtb2RpZmljYXRpb25zID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBwcmV2TW9kaWZpY2F0aW9ucyA9IHVzZVJlZihtb2RpZmljYXRpb25zKTtcblxuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpKSxcbiAgICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICAgIGNvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgICBzZXRDb2xvck1vZGUgPSBfdXNlU3RhdGU2WzFdO1xuXG4gIHZhciBwcmV2Q29sb3JNb2RlID0gdXNlUmVmKGNvbG9yTW9kZSk7XG4gIHZhciBpc1BhcmVudFRoZW1lID0gdXNlUmVmKHByZXZTeXN0ZW1LZXkuY3VycmVudCA9PT0gcGFyZW50U3lzdGVtLmtleSAmJiBjb2xvck1vZGUgPT09IHBhcmVudENvbG9yTW9kZSAmJiBpc0VxdWFsKHBhcmVudE1vZGlmaWNhdGlvbnMsIG1vZGlmaWNhdGlvbnMpKTtcblxuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKGlzUGFyZW50VGhlbWUuY3VycmVudCAmJiBPYmplY3Qua2V5cyhwYXJlbnRUaGVtZSkubGVuZ3RoID8gcGFyZW50VGhlbWUgOiBnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSksXG4gICAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgICB0aGVtZSA9IF91c2VTdGF0ZThbMF0sXG4gICAgICBzZXRUaGVtZSA9IF91c2VTdGF0ZThbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3U3lzdGVtID0gX3N5c3RlbSB8fCBwYXJlbnRTeXN0ZW07XG5cbiAgICBpZiAocHJldlN5c3RlbUtleS5jdXJyZW50ICE9PSBuZXdTeXN0ZW0ua2V5KSB7XG4gICAgICBzZXRTeXN0ZW0obmV3U3lzdGVtKTtcbiAgICAgIHByZXZTeXN0ZW1LZXkuY3VycmVudCA9IG5ld1N5c3RlbS5rZXk7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfc3lzdGVtLCBwYXJlbnRTeXN0ZW1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3TW9kaWZpY2F0aW9ucyA9IG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucyk7XG5cbiAgICBpZiAoIWlzRXF1YWwocHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCwgbmV3TW9kaWZpY2F0aW9ucykpIHtcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMobmV3TW9kaWZpY2F0aW9ucyk7XG4gICAgICBwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50ID0gbmV3TW9kaWZpY2F0aW9ucztcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19tb2RpZmljYXRpb25zLCBwYXJlbnRNb2RpZmljYXRpb25zXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld0NvbG9yTW9kZSA9IGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpO1xuXG4gICAgaWYgKCFpc0VxdWFsKG5ld0NvbG9yTW9kZSwgcHJldkNvbG9yTW9kZS5jdXJyZW50KSkge1xuICAgICAgc2V0Q29sb3JNb2RlKG5ld0NvbG9yTW9kZSk7XG4gICAgICBwcmV2Q29sb3JNb2RlLmN1cnJlbnQgPSBuZXdDb2xvck1vZGU7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzUGFyZW50VGhlbWUuY3VycmVudCkge1xuICAgICAgc2V0VGhlbWUoZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpO1xuICAgIH1cbiAgfSwgW2NvbG9yTW9kZSwgc3lzdGVtLCBtb2RpZmljYXRpb25zXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbG9yTW9kZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sb3JNb2RlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzeXN0ZW1cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlNb2RpZmljYXRpb25zQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBtb2RpZmljYXRpb25zXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIGNoaWxkcmVuKSkpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIHRocm90dGxlID0gZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcbiAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDUwO1xuICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRpbWUgKyB3YWl0IC0gRGF0ZS5ub3coKSA8IDApIHtcbiAgICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnQnO1xuLyoqXG4gKiBIb29rIHV0aWwgLyBzeW50YWN0aWNhbCBzdWdhciBmb3IgdXNlQ29udGV4dCgpXG4gKlxuICogVGhpcyBob29rIGlzIGluIGl0cyBvd24gc2VwYXJhdGUgZmlsZSB0byBtYWtlIG1vY2tpbmcgaXRcbiAqIGFzIGEgdGVzdGVudiBlYXN5IGZvciBKZXN0IHVuaXQgdGVzdHNcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUN1cnJlbnRFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKSB7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUNvbnRleHQoQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0KTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnRfaG9vayc7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IHdpbmRvdy5pbm5lcldpZHRoIGFuZCBhbiBhcnJheSBvZiBicmVha3BvaW50IGtleXMsXG4gKiB0aGlzIGhvb2sgc3RvcmVzIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIHdpbmRvdy5pbm5lcldpZHRoXG4gKiBmYWxscyB3aXRoaW4gYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50cy5cbiAqXG4gKiBAcGFyYW0ge19FdWlUaGVtZUJyZWFrcG9pbnRbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgRVVJIGJyZWFrcG9pbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVzcG9uc2l2ZSBTb21lIGNvbXBvbmVudHMgaGF2ZSB0aGUgb3B0aW9uIHRvIHR1cm4gb2ZmIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gKiAgIFNpbmNlIGhvb2tzIGNhbid0IGJlIGNhbGxlZCBjb25kaXRpb25hbGx5LCBpdCdzIGVhc2llciB0byBwYXNzIHRoZSBjb25kaXRpb24gaW50byB0aGUgaG9va1xuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lIGlzIGluY2x1ZGVkIGluIGBzaXplc2BcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgPSBmdW5jdGlvbiB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHNpemVzKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCAmJiBpc1Jlc3BvbnNpdmUgPyBzaXplcy5pbmNsdWRlcyhjdXJyZW50QnJlYWtwb2ludCkgOiBmYWxzZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBET00gbm9kZSwgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gKiBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpYCB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIERPTSBub2RlLlxuICovXG5leHBvcnQgdmFyIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmID0gZnVuY3Rpb24gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoZWxlbWVudFRhcmdldCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsZW1lbnRUYXJnZXQgOiBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50VGFyZ2V0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUgPSBlbGVtZW50VGFyZ2V0KCk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5leHBvcnQgdmFyIGFsd2F5cyA9IGZ1bmN0aW9uIGFsd2F5cyhfdmFsdWUpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IHZhciBuZXZlciA9IGZ1bmN0aW9uIG5ldmVyKF92YWx1ZSkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB2YXIgaXNOdWxsID0gZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn07XG5leHBvcnQgdmFyIGlzTmlsID0gZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNNb21lbnQgPSBmdW5jdGlvbiBpc01vbWVudCh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzTW9tZW50KHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzRGF0ZSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGVMaWtlID0gZnVuY3Rpb24gaXNEYXRlTGlrZSh2YWx1ZSkge1xuICByZXR1cm4gaXNNb21lbnQodmFsdWUpIHx8IGlzRGF0ZSh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IF9pc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC9pc0Z1bmN0aW9uJztcbmltcG9ydCBfaXNBcnJheSBmcm9tICdsb2Rhc2gvaXNBcnJheSc7XG5pbXBvcnQgX2lzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tICdsb2Rhc2gvaXNCb29sZWFuJztcbmltcG9ydCBfaXNOdW1iZXIgZnJvbSAnbG9kYXNoL2lzTnVtYmVyJztcbmltcG9ydCBfaXNOYU4gZnJvbSAnbG9kYXNoL2lzTmFOJztcbmltcG9ydCBfaXNPYmplY3QgZnJvbSAnbG9kYXNoL2lzT2JqZWN0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gX2lzQXJyYXkodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQm9vbGVhbiA9IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gX2lzQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOdW1iZXIodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOYU4gPSBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICByZXR1cm4gX2lzTmFOKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIF9pc09iamVjdCh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRCb29sZWFuID0gZnVuY3Rpb24gZm9ybWF0Qm9vbGVhbih2YWx1ZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfcmVmJHllcyA9IF9yZWYueWVzLFxuICAgICAgeWVzID0gX3JlZiR5ZXMgPT09IHZvaWQgMCA/ICdZZXMnIDogX3JlZiR5ZXMsXG4gICAgICBfcmVmJG5vID0gX3JlZi5ubyxcbiAgICAgIG5vID0gX3JlZiRubyA9PT0gdm9pZCAwID8gJ05vJyA6IF9yZWYkbm8sXG4gICAgICBfcmVmJG5pbCA9IF9yZWYubmlsLFxuICAgICAgbmlsID0gX3JlZiRuaWwgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRuaWw7XG5cbiAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgIHJldHVybiBuaWw7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPyB5ZXMgOiBubztcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwsIGlzRnVuY3Rpb24sIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxudmFyIGNhbGVuZGFyID0gZnVuY3Rpb24gY2FsZW5kYXIodmFsdWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgcmVmVGltZSA9IG9wdGlvbnMucmVmVGltZTtcbiAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuY2FsZW5kYXIocmVmVGltZSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgdmFyIGRhdGVGb3JtYXRBbGlhc2VzID0ge1xuICBkYXRlOiAnRCBNTU0gWVlZWScsXG4gIGxvbmdEYXRlOiAnREQgTU1NTSBZWVlZJyxcbiAgc2hvcnREYXRlOiAnRCBNTU0gWVknLFxuICBkYXRlVGltZTogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICBsb25nRGF0ZVRpbWU6ICdERCBNTU1NIFlZWVkgSEg6bW06c3MnLFxuICBzaG9ydERhdGVUaW1lOiAnRCBNTU0gWVkgSEg6bW0nLFxuICBkb2JTaG9ydDogJ0RvIE1NTSBZWScsXG4gIGRvYkxvbmc6ICdEbyBNTU1NIFlZWVknLFxuICBpc284NjAxOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyxcbiAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICBjYWxlbmRhckRhdGVUaW1lOiBmdW5jdGlvbiBjYWxlbmRhckRhdGVUaW1lKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIEg6bW1BJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIEg6bW1BJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBIOm1tQScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gSDptbUEnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSBbYXRdIEg6bW1BJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfSxcbiAgY2FsZW5kYXJEYXRlOiBmdW5jdGlvbiBjYWxlbmRhckRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheV0nLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvd10nLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5XScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVknXG4gICAgfSwgb3B0aW9ucykpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZ0FEYXRlRm9ybWF0KHgpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXRBbGlhc2VzLmhhc093blByb3BlcnR5KHgpO1xufVxuXG5mdW5jdGlvbiBpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyh4KSB7XG4gIHJldHVybiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiAoeC5oYXNPd25Qcm9wZXJ0eSgnZm9ybWF0JykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnbmlsJykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKTtcbn1cblxuZXhwb3J0IHZhciBmb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSkge1xuICB2YXIgZGF0ZUZvcm1hdEtleU9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnZGF0ZVRpbWUnO1xuXG4gIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBkYXRlRm9ybWF0U3RyT3JGdW5jID0gaXNTdHJpbmdBRGF0ZUZvcm1hdChkYXRlRm9ybWF0S2V5T3JDb25maWcpID8gZGF0ZUZvcm1hdEFsaWFzZXNbZGF0ZUZvcm1hdEtleU9yQ29uZmlnXSA6IGRhdGVGb3JtYXRLZXlPckNvbmZpZztcblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdFN0ck9yRnVuYyh2YWx1ZSwge30pO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0U3RyT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXRTdHJPckZ1bmMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgdmFyIF9kYXRlRm9ybWF0S2V5T3JDb25maSA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5mb3JtYXQsXG4gICAgICAgIGZvcm1hdCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maSA9PT0gdm9pZCAwID8gJ2RhdGVUaW1lJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maSxcbiAgICAgICAgX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5uaWwsXG4gICAgICAgIG5pbCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPT09IHZvaWQgMCA/ICcnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpMixcbiAgICAgICAgb3B0aW9ucyA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5vcHRpb25zO1xuICAgIHZhciBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG5cbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmlsO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZvcm1hdCB2YWx1ZSB1c2luZyBkYXRlRm9ybWF0S2V5T3JDb25maWc6IFwiLmNvbmNhdChkYXRlRm9ybWF0S2V5T3JDb25maWcpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbnVtZXJhbCBmcm9tICdudW1lcmFsJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG52YXIgbnVtYmVyRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGVjaW1hbDE6ICcwLDAuMCcsXG4gIGRlY2ltYWwyOiAnMCwwLjAwJyxcbiAgZGVjaW1hbDM6ICcwLDAuMDAwJyxcbiAgb3JkaW5hbDogJzBvJyxcbiAgaW50ZWdlcjogJzAsMCdcbn07XG5leHBvcnQgdmFyIGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICB2YXIgbnVtYmVyRm9ybWF0T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZm9ybWF0O1xuICB2YXIgbmlsID0gJyc7XG4gIHZhciByb3VuZDtcblxuICBpZiAoaXNTdHJpbmcobnVtYmVyRm9ybWF0T3JDb25maWcpKSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWc7XG4gIH0gZWxzZSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWcuZm9ybWF0O1xuICAgIG5pbCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLm5pbCB8fCAnJztcbiAgICByb3VuZCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLnJvdW5kO1xuICB9XG5cbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciByb3VuZGluZ0Z1bmMgPSByb3VuZCA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IG51bWVyYWwodmFsdWUpLmZvcm1hdChudW1iZXJGb3JtYXQsIHJvdW5kaW5nRnVuYyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRUZXh0ID0gZnVuY3Rpb24gZm9ybWF0VGV4dCh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIG5pbDogJydcbiAgfTtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG9wdGlvbnMubmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCwgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzTmFOLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZm9ybWF0Qm9vbGVhbiB9IGZyb20gJy4vZm9ybWF0X2Jvb2xlYW4nO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4vZm9ybWF0X2RhdGUnO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi9mb3JtYXRfbnVtYmVyJztcbmltcG9ydCB7IGZvcm1hdFRleHQgfSBmcm9tICcuL2Zvcm1hdF90ZXh0JztcbmV4cG9ydCB2YXIgZm9ybWF0QXV0byA9IGZ1bmN0aW9uIGZvcm1hdEF1dG8odmFsdWUpIHtcbiAgaWYgKGlzTmlsKHZhbHVlKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNCb29sZWFuKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8oaXRlbSk7XG4gICAgfSkuam9pbignLCAnKSA6IGZvcm1hdEF1dG8odmFsdWUpO1xuICB9IC8vIFRPRE8gbm90IHN1cmUgaWYgd2Ugd2FudCB0aGF0Li4gdGhlICgrKSBpcyB0aGF0IHdlIHNob3cgc29tZXRoaW5nLCB0aGUgKC0pIGlzIHRoYXQgaXQncyB2ZXJ5IHRlY2huaWNhbFxuXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG52YXIgaXNFbGFzdGljSG9zdCA9IC9eKFthLXpBLVowLTldK1xcLikqZWxhc3RpY1xcLmNvJC87IC8vIEluIG9yZGVyIGZvciB0aGUgZG9tYWluIHRvIGJlIHNlY3VyZSBpdCBuZWVkcyB0byBiZSBpbiBhIHBhcnNhYmxlIGZvcm1hdCxcbi8vIHdpdGggdGhlIHByb3RvY29sIG9mIGh0dHA6IG9yIGh0dHBzOiBhbmQgdGhlIGhvc3QgbWF0Y2hpbmcgZWxhc3RpYy5jbyBvclxuLy8gb2Ygb25lIGl0cyBzdWJkb21haW5zXG5cbmV4cG9ydCB2YXIgaXNEb21haW5TZWN1cmUgPSBmdW5jdGlvbiBpc0RvbWFpblNlY3VyZSgpIHtcbiAgdmFyIHVybCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG5cbiAgdHJ5IHtcbiAgICB2YXIgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHZhciBwcm90b2NvbE1hdGNoZXMgPSBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwOicgfHwgcGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICB2YXIgZG9tYWluTWF0Y2hlcyA9ICEhcGFyc2VkLmhvc3QubWF0Y2goaXNFbGFzdGljSG9zdCk7XG4gICAgcmV0dXJuIHByb3RvY29sTWF0Y2hlcyAmJiBkb21haW5NYXRjaGVzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFNlY3VyZXMgb3V0Ym91bmQgbGlua3MuIEZvciBtb3JlIGluZm86XG4gKiBodHRwczovL3d3dy5qaXRiaXQuY29tL2FsZXhibG9nLzI1Ni10YXJnZXRibGFuay0tLXRoZS1tb3N0LXVuZGVyZXN0aW1hdGVkLXZ1bG5lcmFiaWxpdHktZXZlci9cbiAqL1xuaW1wb3J0IHsgaXNEb21haW5TZWN1cmUgfSBmcm9tICcuLi91cmwnO1xuZXhwb3J0IHZhciBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgPSBmdW5jdGlvbiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoX3JlZikge1xuICB2YXIgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIF9yZWYkdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsO1xuICB2YXIgaXNFbGFzdGljSHJlZiA9ICEhaHJlZiAmJiBpc0RvbWFpblNlY3VyZShocmVmKTtcbiAgdmFyIHJlbFBhcnRzID0gISFyZWwgPyByZWwuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gISFwYXJ0Lmxlbmd0aCAmJiBwYXJ0ICE9PSAnbm9yZWZlcnJlcic7XG4gIH0pIDogW107XG5cbiAgaWYgKCFpc0VsYXN0aWNIcmVmKSB7XG4gICAgcmVsUGFydHMucHVzaCgnbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgaWYgKHRhcmdldC5pbmNsdWRlcygnX2JsYW5rJykgJiYgcmVsUGFydHMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub29wZW5lcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlbFBhcnRzLnNvcnQoKS5qb2luKCcgJykudHJpbSgpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQVNDID0gJ2FzYyc7XG52YXIgREVTQyA9ICdkZXNjJztcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBBU0M6IEFTQyxcbiAgREVTQzogREVTQyxcbiAgaXNBc2M6IGZ1bmN0aW9uIGlzQXNjKGRpcmVjdGlvbikge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IEFTQztcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0FzYyhkaXJlY3Rpb24pID8gREVTQyA6IEFTQztcbiAgfVxufSk7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb25UeXBlID0gUHJvcFR5cGVzLm9uZU9mKFtBU0MsIERFU0NdKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBfZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IF9vbWl0IGZyb20gJ2xvZGFzaC9vbWl0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gX2dldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG59O1xuZXhwb3J0IHZhciBvbWl0ID0gZnVuY3Rpb24gb21pdChvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBfb21pdChvYmplY3QsIHBhdGhzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi9zb3J0X2RpcmVjdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi9vYmplY3RzJztcbmV4cG9ydCB2YXIgQ29tcGFyYXRvcnMgPSBPYmplY3QuZnJlZXplKHtcbiAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogU29ydERpcmVjdGlvbi5BU0M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIC8vIEphdmFTY3JpcHQncyBjb21wYXJpc29uIG9mIG51bGwvdW5kZWZpbmVkIChhbmQgc29tZSBvdGhlcnMgbm90IGhhbmRsZWQgaGVyZSkgdmFsdWVzIGFsd2F5cyByZXR1cm5zIGBmYWxzZWBcbiAgICAgIC8vIChodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLyNzZWMtYWJzdHJhY3QtcmVsYXRpb25hbC1jb21wYXJpc29uKVxuICAgICAgLy8gcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHYxIDwgdjIgYW5kIHYxID4gdjIgYXJlIGJvdGggZmFsc2UuXG4gICAgICAvLyBUaGlzIGxlYWRzIHRvIHVucHJlZGljdGFibGUgc29ydGluZyByZXN1bHRzIGluIG11bHRpcGxlIEpTIGVuZ2luZSBzb3J0aW5nIGFsZ29yaXRobXNcbiAgICAgIC8vIHdoaWNoIGNhdXNlcyB1bnByZWRpY3RhYmxlIHVzZXIgZXhwZXJpZW5jZXMuXG4gICAgICAvLyBJbnN0ZWFkOlxuICAgICAgLy8gKiAxLiBwdXNoIHVuZGVmaW5lZC9udWxsIHZhbHVlcyB0byB0aGUgZW5kIG9mIHRoZSBzb3J0ZWQgbGlzdCwgX3JlZ2FyZGxlc3Mgb2Ygc29ydCBkaXJlY3Rpb25fXG4gICAgICAvLyAgICAobm9uLXNvcnRhYmxlIHZhbHVlcyBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQsIGFuZCBzb3J0YWJsZSB2YWx1ZXMgYXJlIHNvcnRlZCBhdCB0aGUgdG9wKVxuICAgICAgLy8gKiAyLiByZXBvcnQgdW5kZWZpbmVkL251bGwgdmFsdWVzIGFzIGVxdWFsXG4gICAgICAvLyAqIDMuIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGNvbXBhcmFibGUgdGhleSBhcmUgc29ydGVkIG5vcm1hbGx5XG4gICAgICB2YXIgdjFJc0NvbXBhcmFibGUgPSB2MSAhPSBudWxsO1xuICAgICAgdmFyIHYySXNDb21wYXJhYmxlID0gdjIgIT0gbnVsbDsgLy8gKiAxLlxuXG4gICAgICBpZiAodjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiB2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gLy8gKiAyLlxuXG5cbiAgICAgIGlmICghdjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyAqIDMuXG5cblxuICAgICAgaWYgKHYxID09PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHYxID4gdjIgPyAxIDogLTE7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5pc0FzYyhkaXJlY3Rpb24pID8gcmVzdWx0IDogLTEgKiByZXN1bHQ7XG4gICAgfTtcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHYyLCB2MSk7XG4gICAgfTtcbiAgfSxcbiAgdmFsdWU6IGZ1bmN0aW9uIChfdmFsdWUpIHtcbiAgICBmdW5jdGlvbiB2YWx1ZShfeCwgX3gyKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgdmFsdWUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfShmdW5jdGlvbiAodmFsdWVDYWxsYmFjaywgY29tcGFyYXRvcikge1xuICAgIGlmICghY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHRoaXMuZGVmYXVsdChTb3J0RGlyZWN0aW9uLkFTQyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHZhbHVlQ2FsbGJhY2sobzEpLCB2YWx1ZUNhbGxiYWNrKG8yKSk7XG4gICAgfTtcbiAgfSksXG4gIHByb3BlcnR5OiBmdW5jdGlvbiBwcm9wZXJ0eShwcm9wLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0KHZhbHVlLCBwcm9wKTtcbiAgICB9LCBjb21wYXJhdG9yKTtcbiAgfVxufSk7IiwgImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciByZWxhdGVkRGltZW5zaW9uID0ge1xuICB0b3A6ICdoZWlnaHQnLFxuICByaWdodDogJ3dpZHRoJyxcbiAgYm90dG9tOiAnaGVpZ2h0JyxcbiAgbGVmdDogJ3dpZHRoJ1xufTtcbnZhciBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZSA9IHtcbiAgaGVpZ2h0OiAndG9wJyxcbiAgd2lkdGg6ICdsZWZ0J1xufTtcbnZhciBwb3NpdGlvbkNvbXBsZW1lbnRzID0ge1xuICB0b3A6ICdib3R0b20nLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICBsZWZ0OiAncmlnaHQnXG59OyAvLyBhbHdheXMgcmVzb2x2aW5nIHRvIHRvcC9sZWZ0IGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSBrbm93aW5nIHRoZXkgYXJlIHRoZVxuLy8gbWluaW11bSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgYm94XG5cbnZhciBwb3NpdGlvblN1YnN0aXR1dGVzID0ge1xuICB0b3A6ICdsZWZ0JyxcbiAgcmlnaHQ6ICd0b3AnLFxuICBib3R0b206ICdsZWZ0JyxcbiAgbGVmdDogJ3RvcCdcbn07XG5cbnZhciBnZXRCdWZmZXJWYWx1ZXMgPSBmdW5jdGlvbiBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpIHtcbiAgICB2YXIgX2J1ZmZlciA9IF9zbGljZWRUb0FycmF5KGJ1ZmZlciwgNCksXG4gICAgICAgIHRvcEJ1ZmZlciA9IF9idWZmZXJbMF0sXG4gICAgICAgIHJpZ2h0QnVmZmVyID0gX2J1ZmZlclsxXSxcbiAgICAgICAgYm90dG9tQnVmZmVyID0gX2J1ZmZlclsyXSxcbiAgICAgICAgbGVmdEJ1ZmZlciA9IF9idWZmZXJbM107XG5cbiAgICByZXR1cm4gW3RvcEJ1ZmZlciwgcmlnaHRCdWZmZXIsIGJvdHRvbUJ1ZmZlciwgbGVmdEJ1ZmZlcl07XG4gIH1cblxuICByZXR1cm4gW2J1ZmZlciwgYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcl07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyAocmVsYXRpdmUgdG8gZG9jdW1lbnQuYm9keSkgdG8gcGxhY2UgYSBwb3BvdmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gYW5jaG9yIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0byBhbmNob3IgdGhlIHBvcG92ZXIgdG9cbiAqIEBwYXJhbSBwb3BvdmVyIHtIVE1MRWxlbWVudH0gRWxlbWVudCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSBQb3NpdGlvbiB0aGUgdXNlciB3YW50cy4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtmb3JjZVBvc2l0aW9uXSB7Ym9vbGVhbn0gSWYgdHJ1ZSwgdXNlIG9ubHkgdGhlIHByb3ZpZGVkIGBwb3NpdGlvbmAgdmFsdWUgYW5kIGRvbid0IHRyeSBhbnkgb3RoZXIgcG9zaXRpb25cbiAqIEBwYXJhbSBbYWxpZ25dIHtzdHJpbmd9IENyb3NzLWF4aXMgYWxpZ25tZW50LiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2J1ZmZlcj0xNl0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2FsbG93Q3Jvc3NBeGlzPXRydWVdIHtib29sZWFufSBXaGV0aGVyIHRvIGFsbG93IHRoZSBwb3BvdmVyIHRvIGJlIHBvc2l0aW9uZWQgb24gdGhlIGNyb3NzLWF4aXNcbiAqIEBwYXJhbSBbY29udGFpbmVyXSB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdGhlIHBvcG92ZXIgbXVzdCBiZSBjb25zdHJhaW5lZCB0byBmaXQgd2l0aGluXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmXG4gKiAgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICYgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGVcbiAqICBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW0gd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKlxuICogQHJldHVybnMge0ZpbmRQb3BvdmVyUG9zaXRpb25SZXN1bHR9IGFic29sdXRlIHBhZ2UgY29vcmRpbmF0ZXMgZm9yIHRoZVxuICogcG9wb3ZlciwgYW5kIHRoZSBwbGFjZW1lbnQncyByZWxhdGlvbiB0byB0aGUgYW5jaG9yIG9yIHVuZGVmaW5lZFxuICogdGhlcmUncyBubyByb29tLlxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3BvdmVyUG9zaXRpb24oX3JlZikge1xuICB2YXIgYW5jaG9yID0gX3JlZi5hbmNob3IsXG4gICAgICBwb3BvdmVyID0gX3JlZi5wb3BvdmVyLFxuICAgICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgZm9yY2VQb3NpdGlvbiA9IF9yZWYuZm9yY2VQb3NpdGlvbixcbiAgICAgIF9yZWYkYnVmZmVyID0gX3JlZi5idWZmZXIsXG4gICAgICBidWZmZXIgPSBfcmVmJGJ1ZmZlciA9PT0gdm9pZCAwID8gMTYgOiBfcmVmJGJ1ZmZlcixcbiAgICAgIF9yZWYkb2Zmc2V0ID0gX3JlZi5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfcmVmJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkb2Zmc2V0LFxuICAgICAgX3JlZiRhbGxvd0Nyb3NzQXhpcyA9IF9yZWYuYWxsb3dDcm9zc0F4aXMsXG4gICAgICBhbGxvd0Nyb3NzQXhpcyA9IF9yZWYkYWxsb3dDcm9zc0F4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGFsbG93Q3Jvc3NBeGlzLFxuICAgICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXIsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWYuYXJyb3dDb25maWcsXG4gICAgICByZXR1cm5Cb3VuZGluZ0JveCA9IF9yZWYucmV0dXJuQm91bmRpbmdCb3g7XG4gIC8vIGZpbmQgdGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZGluZyBib3hlcyBvZiB0aGUgYW5jaG9yLCBwb3BvdmVyLCBhbmQgY29udGFpbmVyXG4gIHZhciBhbmNob3JCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChhbmNob3IpO1xuICB2YXIgcG9wb3ZlckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KHBvcG92ZXIpOyAvLyBjYWxjdWxhdGUgdGhlIHdpbmRvdydzIGJvdW5kc1xuICAvLyB3aW5kb3cuKGlubmVyV2lkdGh8aW5uZXJIZWlnaHQpIGRvIG5vdCBhY2NvdW50IGZvciBzY3JvbGxiYXJzXG4gIC8vIHNvIHByZWZlciB0aGUgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IG9mIHRoZSBET00gaWYgYXZhaWxhYmxlXG5cbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gIHZhciBkb2N1bWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgd2luZG93Qm91bmRpbmdCb3ggPSB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiBkb2N1bWVudFdpZHRoLFxuICAgIGJvdHRvbTogZG9jdW1lbnRIZWlnaHQsXG4gICAgbGVmdDogMCxcbiAgICBoZWlnaHQ6IGRvY3VtZW50SGVpZ2h0LFxuICAgIHdpZHRoOiBkb2N1bWVudFdpZHRoXG4gIH07IC8vIGlmIG5vIGNvbnRhaW5lciBlbGVtZW50IGlzIGdpdmVuIGZhbGwgYmFjayB0byB1c2luZyB0aGUgd2luZG93IHZpZXdwb3J0XG5cbiAgdmFyIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gY29udGFpbmVyID8gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGNvbnRhaW5lcikgOiB3aW5kb3dCb3VuZGluZ0JveDtcbiAgLyoqXG4gICAqIGBwb3NpdGlvbmAgd2FzIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gY2FsbGVyIGFuZCBpcyBhIHN0cm9uZyBoaW50XG4gICAqIGFzIHRvIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvci5cbiAgICogSG93ZXZlciwgd2Ugc3Ryb25nbHkgcHJlZmVyIHNob3dpbmcgYWxsIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnQgd2l0aGluXG4gICAqIHRoZSB3aW5kb3crY29udGFpbmVyIGJvdW5kYXJ5IGFuZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgZm91clxuICAgKiBwb3NzaWJsZSBzaWRlcyB1bnRpbCBhIHBlcmZlY3QgZml0IGlzIGxvY2F0ZWQuIElmIG5vbmUgb2YgdGhlIGxvY2F0aW9uc1xuICAgKiBmdWxseSBjb250YWluIHBvcG92ZXIsIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBiZXN0IGZpdCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCBmaXJzdCBjaGVja3MgdGhlIHByZWZlcnJlZCBgcG9zaXRpb25gLCB0aGVuIGl0cyBvcHBvc2l0ZVxuICAgKiBhbG9uZyB0aGUgc2FtZSBheGlzLCBuZXh0IGEgbG9jYXRpb24gb24gdGhlIGNyb3NzLWF4aXMsIGFuZCBmaW5hbGx5IGl0XG4gICAqIHRlc3RzIHRoZSByZW1haW5pbmcgcG9zaXRpb24uXG4gICAqXG4gICAqIGUuZy5cbiAgICogaWYgcG9zaXRpb24gPSBcInRvcFwiIHRoZSBvcmRlciBpcyB0b3AsIGJvdHRvbSwgbGVmdCByaWdodFxuICAgKiBpZiBwb3NpdGlvbiA9IFwicmlnaHRcIiB0aGUgb3JkZXIgaXMgcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tXG4gICAqL1xuICAvLyBUcnkgdGhlIHVzZXItZGVzaXJlZCBwb3NpdGlvbiBmaXJzdC5cblxuICB2YXIgaXRlcmF0aW9uUG9zaXRpb25zID0gW3Bvc2l0aW9uXTsgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cbiAgdmFyIGl0ZXJhdGlvbkFsaWdubWVudHMgPSBbYWxpZ25dO1xuXG4gIGlmIChmb3JjZVBvc2l0aW9uICE9PSB0cnVlKSB7XG4gICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvbl0pOyAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2goYWxpZ24pOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpZiAoYWxsb3dDcm9zc0F4aXMpIHtcbiAgICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dLCAvLyBTd2l0Y2ggdG8gdGhlIGNyb3NzIGF4aXMuXG4gICAgICBwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dXSAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24gb24gdGhlIGNyb3NzIGF4aXMuXG4gICAgICApO1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50cy5wdXNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gZGlzY2FyZCBkZXNpcmVkIGFsaWdubWVudCBvbiBjcm9zcy1heGlzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBvc2l0aW9uIGlzIGZvcmNlZCwgaWYgaXQgY29uZmxpY3RzIHdpdGggdGhlIGFsaWdubWVudCB0aGVuIHJlc2V0IGFsaWduIHRvIGBudWxsYFxuICAgIC8vIGUuZy4gb3JpZ2luYWwgcGxhY2VtZW50IHJlcXVlc3QgZm9yIGBkb3duTGVmdGAgaXMgbW92ZWQgdG8gdGhlIGBsZWZ0YCBzaWRlLCBmdXR1cmUgY2FsbHNcbiAgICAvLyB3aWxsIHBvc2l0aW9uIGFuZCBhbGlnbiBgbGVmdGAsIGFuZCBgbGVmdExlZnRgIGlzIG5vdCBhIHZhbGlkIHBsYWNlbWVudFxuICAgIGlmIChwb3NpdGlvbiA9PT0gYWxpZ24gfHwgYWxpZ24gIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbiA9PT0gcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl0pIHtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHNbMF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJlc3RGaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBiZXN0UG9zaXRpb24gPSBudWxsO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGl0ZXJhdGlvblBvc2l0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGl0ZXJhdGlvblBvc2l0aW9uID0gaXRlcmF0aW9uUG9zaXRpb25zW2lkeF07IC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHBvc2l0aW9uIHdpdGggYSBiZXR0ZXIgZml0IHRoYW4gd2UndmUgZm91bmQgc28gZmFyLlxuXG4gICAgdmFyIHNjcmVlbkNvb3JkaW5hdGVzID0gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKHtcbiAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgIGFsaWduOiBpdGVyYXRpb25BbGlnbm1lbnRzW2lkeF0sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KTtcblxuICAgIGlmIChiZXN0Rml0ID09PSB1bmRlZmluZWQgfHwgc2NyZWVuQ29vcmRpbmF0ZXMuZml0ID4gYmVzdEZpdCkge1xuICAgICAgYmVzdEZpdCA9IHNjcmVlbkNvb3JkaW5hdGVzLmZpdDtcbiAgICAgIGJlc3RQb3NpdGlvbiA9IHtcbiAgICAgICAgZml0OiBzY3JlZW5Db29yZGluYXRlcy5maXQsXG4gICAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgICAgdG9wOiBzY3JlZW5Db29yZGluYXRlcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICAgIGxlZnQ6IHNjcmVlbkNvb3JkaW5hdGVzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGFycm93OiBzY3JlZW5Db29yZGluYXRlcy5hcnJvd1xuICAgICAgfTsgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgaWRlYWwgZml0LCB1c2UgdGhhdCBwb3NpdGlvbi5cblxuICAgICAgaWYgKGJlc3RGaXQgPT09IDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBoYXZlbid0IGltcHJvdmVkIHRoZSBmaXQsIHRoZW4gY29udGludWUgb24gYW5kIHRyeSBhIG5ldyBwb3NpdGlvbi5cblxuICB9XG5cbiAgaWYgKGJlc3RQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FsY3VsYXRlIGJlc3RQb3NpdGlvbicpO1xuICB9XG5cbiAgaWYgKHJldHVybkJvdW5kaW5nQm94KSB7XG4gICAgYmVzdFBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94ID0gYW5jaG9yQm91bmRpbmdCb3g7XG4gIH1cblxuICByZXR1cm4gYmVzdFBvc2l0aW9uO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgdGFyZ2V0IHBvc2l0aW9uIGFuZCB0aGUgcG9wb3ZlcidzIHN1cnJvdW5kaW5nIGNvbnRleHQsIHJldHVybnMgZWl0aGVyIGFuXG4gKiBvYmplY3Qgd2l0aCB7dG9wLCBsZWZ0fSBzY3JlZW4gY29vcmRpbmF0ZXMgb3IgYG51bGxgIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNob3dcbiAqIGNvbnRlbnQgaW4gdGhlIHRhcmdldCBwb3NpdGlvblxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IHRoZSB0YXJnZXQgcG9zaXRpb24sIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbGlnbiB7c3RyaW5nfSB0YXJnZXQgYWxpZ25tZW50IG9uIHRoZSBjcm9zcy1heGlzLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYW5jaG9yQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICogQHBhcmFtIHBvcG92ZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHBvcG92ZXIgZWxlbWVudFxuICogQHBhcmFtIHdpbmRvd0JvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgd2luZG93XG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWYgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICZcbiAqICBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW1cbiAqICB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYnVmZmVyPTBdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlcidzXG4gKiAgcGxhY2VtZW50IGFuZCB0aGUgY29udGFpbmVyIGVkZ2VcbiAqXG4gKiBAcmV0dXJucyB7R2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzUmVzdWx0fVxuICogIG9iamVjdCB3aXRoIHRvcC9sZWZ0IGNvb3JkaW5hdGVzLCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uIHRvIHRoZSBhbmNob3IsIGFuZCBob3cgd2VsbCB0aGVcbiAqICBwb3BvdmVyIGZpdHMgaW4gdGhlIGxvY2F0aW9uICgwLjAgLT4gMS4wKSBjb29yZGluYXRlcyBhbmQgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiwgaWZcbiAqICB0aGVyZSBpcyBubyByb29tIGluIHRoaXMgcGxhY2VtZW50IHRoZW4gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKF9yZWYyKSB7XG4gIHZhciBfcG9wb3ZlclBsYWNlbWVudCwgX3JlZjM7XG5cbiAgdmFyIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmMi5hbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWYyLnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjIud2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWYyLmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmMi5hcnJvd0NvbmZpZyxcbiAgICAgIF9yZWYyJG9mZnNldCA9IF9yZWYyLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYyJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJG9mZnNldCxcbiAgICAgIF9yZWYyJGJ1ZmZlciA9IF9yZWYyLmJ1ZmZlcixcbiAgICAgIGJ1ZmZlciA9IF9yZWYyJGJ1ZmZlciA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJGJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGdvYWwgaXMgdG8gZmluZCB0aGUgYmVzdCB3YXkgdG8gYWxpZ24gdGhlIHBvcG92ZXIgY29udGVudFxuICAgKiBvbiB0aGUgZ2l2ZW4gc2lkZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnQuIFRoZSBwb3BvdmVyIHByZWZlcnNcbiAgICogY2VudGVyaW5nIG9uIHRoZSBhbmNob3IgYnV0IGNhbiBzaGlmdCBhbG9uZyB0aGUgY3Jvc3MtYXhpcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdlIHJldHVybiB0aGUgdG9wL2xlZnQgY29vcmRpbmF0ZXMgdGhhdCBiZXN0IGZpdCB0aGUgcG9wb3ZlciBpbnNpZGVcbiAgICogdGhlIGdpdmVuIGJvdW5kYXJpZXMsIGFuZCBhbHNvIHJldHVybiB0aGUgYGZpdGAgdmFsdWUgd2hpY2ggaW5kaWNhdGVzXG4gICAqIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciBpcyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICpcbiAgICogZS5nLiBmaW5kaW5nIGEgbG9jYXRpb24gd2hlbiBwb3NpdGlvbj10b3BcbiAgICogdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBkaXJlY3RseSBvdmVyIHRoZSBhbmNob3JcbiAgICpcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKiBidXQgaWYgYW5jaG9yIGRvZXNuJ3QgaGF2ZSBtdWNoIChvciBhbnkpIHJvb20gb24gaXRzIHJpZGUgc2lkZVxuICAgKiB0aGUgcG9wb3ZlciB3aWxsIHNoaWZ0IHRvIHRoZSBsZWZ0XG4gICAqXG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICovXG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImxlZnRcIlxuXG4gIHZhciBjcm9zc0F4aXNTZWNvbmRTaWRlID0gcG9zaXRpb25Db21wbGVtZW50c1tjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcInJpZ2h0XCJcblxuICB2YXIgY3Jvc3NBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcIndpZHRoXCJcblxuICB2YXIgX2dldEJ1ZmZlclZhbHVlcyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzNdO1xuXG4gIHZhciBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24gPSBnZXRDcm9zc0F4aXNQb3NpdGlvbih7XG4gICAgY3Jvc3NBeGlzRmlyc3RTaWRlOiBjcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgY3Jvc3NBeGlzU2Vjb25kU2lkZTogY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICBjcm9zc0F4aXNEaW1lbnNpb246IGNyb3NzQXhpc0RpbWVuc2lvbixcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICBjb250YWluZXJCb3VuZGluZ0JveDogY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkgPSBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIHByaW1hcnlBeGlzUG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgdmFyIHBvcG92ZXJQbGFjZW1lbnQgPSAoX3BvcG92ZXJQbGFjZW1lbnQgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc1Bvc2l0aW9uKSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNQb3NpdGlvbiksIF9wb3BvdmVyUGxhY2VtZW50KTsgLy8gY2FsY3VsYXRlIHRoZSBmaXQgb2YgdGhlIHBvcG92ZXIgaW4gdGhpcyBsb2NhdGlvblxuICAvLyBmaXQgaXMgaW4gcmFuZ2UgMC4wIC0+IDEuMCBhbmQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGlzIGxvY2F0aW9uXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7IC8vIHNocmluayB0aGUgdmlzaWJsZSBib3VuZGluZyBib3ggYnkgYGJ1ZmZlcmBcbiAgLy8gdG8gY29tcHV0ZSBhIGZpdCB2YWx1ZVxuXG4gIGNvbWJpbmVkQm91bmRpbmdCb3gudG9wICs9IHRvcEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5yaWdodCAtPSByaWdodEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5ib3R0b20gLT0gYm90dG9tQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmxlZnQgKz0gbGVmdEJ1ZmZlcjtcbiAgdmFyIGZpdCA9IGdldFZpc2libGVGaXQoe1xuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgcmlnaHQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCArIHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBib3R0b206IHBvcG92ZXJQbGFjZW1lbnQudG9wICsgcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgd2lkdGg6IHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHRcbiAgfSwgY29tYmluZWRCb3VuZGluZ0JveCk7XG4gIHZhciBhcnJvdyA9IGFycm93Q29uZmlnID8gKF9yZWYzID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgY3Jvc3NBeGlzRmlyc3RTaWRlLCBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gcG9wb3ZlclBsYWNlbWVudFtjcm9zc0F4aXNGaXJzdFNpZGVdKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uKSwgX3JlZjMpIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGZpdDogZml0LFxuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIGFycm93OiBhcnJvdyA/IHtcbiAgICAgIGxlZnQ6IGFycm93LmxlZnQsXG4gICAgICB0b3A6IGFycm93LnRvcFxuICAgIH0gOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3Jvc3NBeGlzUG9zaXRpb24oX3JlZjQpIHtcbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IF9yZWY0LmNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICAgIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgICAgY3Jvc3NBeGlzRGltZW5zaW9uID0gX3JlZjQuY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmNC5wb3NpdGlvbixcbiAgICAgIGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICBidWZmZXIgPSBfcmVmNC5idWZmZXIsXG4gICAgICBvZmZzZXQgPSBfcmVmNC5vZmZzZXQsXG4gICAgICB3aW5kb3dCb3VuZGluZ0JveCA9IF9yZWY0LndpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmNC5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY0LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjQuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWY0LmFycm93Q29uZmlnO1xuICAvLyBob3cgbXVjaCBvZiB0aGUgcG9wb3ZlciBvdmVyZmxvd3MgcGFzdCBlaXRoZXIgc2lkZSBvZiB0aGUgYW5jaG9yIGlmIGl0cyBjZW50ZXJlZFxuICB2YXIgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvckhhbGZTaXplID0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzIC8gMjsgLy8gdGhlIHBvcG92ZXIncyBvcmlnaW5hbCBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcyBpcyBkZXRlcm1pbmVkIGJ5OlxuXG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIC8vIHdoZXJlIHRoZSBhbmNob3IgaXMgbG9jYXRlZFxuICBhbmNob3JIYWxmU2l6ZSAtIC8vIHBsdXMgaGFsZiBhbmNob3IgZGltZW5zaW9uXG4gIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyBsZXNzIGhhbGYgdGhlIHBvcG92ZXIgZGltZW5zaW9uXG4gIC8vIFRvIGZpdCB0aGUgY29udGVudCB3aXRoaW4gYm90aCB0aGUgd2luZG93IGFuZCBjb250YWluZXIsXG4gIC8vIGNvbXB1dGUgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBzcGFjZXMgYWxvbmcgZWFjaCBlZGdlXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIHZhciBhdmFpbGFibGVTcGFjZSA9IGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb21iaW5lZEJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgcG9zaXRpb24pO1xuICB2YXIgbWluaW11bVNwYWNlID0gYXJyb3dDb25maWcgPyBhcnJvd0NvbmZpZy5hcnJvd0J1ZmZlciA6IDA7XG4gIHZhciBjb250ZW50T3ZlcmZsb3dTaXplID0gKHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLSBhbmNob3JTaXplT25Dcm9zc0F4aXMpIC8gMjtcbiAgdmFyIGFsaWduQW1vdW50ID0gMDtcbiAgdmFyIGFsaWduRGlyZWN0aW9uID0gMTtcbiAgdmFyIGFtb3VudE9mU2hpZnROZWVkZWQgPSAwO1xuICB2YXIgc2hpZnREaXJlY3Rpb24gPSAxO1xuXG4gIGlmIChhbGlnbiAhPSBudWxsKSB7XG4gICAgLy8gbm8gYWxpZ25tZW50LCBmaW5kIGhvdyBtdWNoIHRoZSBjb250YWluZXIgYm91bmRhcnkgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdG8gc2hpZnRcbiAgICBhbGlnbkRpcmVjdGlvbiA9IGFsaWduID09PSAndG9wJyB8fCBhbGlnbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGFsaWduQW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZTtcbiAgICB2YXIgYWxpZ25lZE92ZXJmbG93QW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZSArIGFsaWduQW1vdW50O1xuICAgIHZhciBuZWVkc1NoaWZ0ID0gYWxpZ25lZE92ZXJmbG93QW1vdW50ID4gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dO1xuICAgIGFtb3VudE9mU2hpZnROZWVkZWQgPSBuZWVkc1NoaWZ0ID8gYWxpZ25lZE92ZXJmbG93QW1vdW50IC0gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dIDogMDtcbiAgICBzaGlmdERpcmVjdGlvbiA9IC0xICogYWxpZ25EaXJlY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gc2hpZnRpbmcgdGhlIHBvcG92ZXIgdG8gb25lIHNpZGUgbWF5IHlpZWxkIGEgYmV0dGVyIGZpdFxuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzRmlyc3RTaWRlXTtcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNTZWNvbmRTaWRlXTtcbiAgICB2YXIgaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA9IHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPiBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZTtcbiAgICBzaGlmdERpcmVjdGlvbiA9IGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPyAtMSA6IDE7IC8vIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gaGFzIG1vcmUgcm9vbSBhbmQgdGhlIHBvcG92ZXIgc2hvdWxkIHNoaWZ0IHRvXG5cbiAgICB2YXIgbGVhc3RBdmFpbGFibGVTcGFjZSA9IE1hdGgubWluKHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUsIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlKTtcblxuICAgIHZhciBfbmVlZHNTaGlmdCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgPiBsZWFzdEF2YWlsYWJsZVNwYWNlO1xuXG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IF9uZWVkc1NoaWZ0ID8gY29udGVudE92ZXJmbG93U2l6ZSAtIGxlYXN0QXZhaWxhYmxlU3BhY2UgOiAwO1xuICB9IC8vIHNoaWZ0IG92ZXIgdGhlIHBvcG92ZXIgaWYgbmVjZXNzYXJ5XG5cblxuICB2YXIgc2hpZnRBbW91bnQgPSBhbW91bnRPZlNoaWZ0TmVlZGVkICogc2hpZnREaXJlY3Rpb247XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbiA9IGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgKyBzaGlmdEFtb3VudCArIGFsaWduQW1vdW50ICogYWxpZ25EaXJlY3Rpb247IC8vIGlmIGFuIGBhcnJvd0NvbmZpZ2AgaXMgc3BlY2lmaWVkLCBmaW5kIHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBhcnJvd1xuXG4gIHZhciBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIGlmIChhcnJvd0NvbmZpZykge1xuICAgIHZhciBhcnJvd1dpZHRoID0gYXJyb3dDb25maWcuYXJyb3dXaWR0aDtcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIGFuY2hvckhhbGZTaXplIC0gYXJyb3dXaWR0aCAvIDI7IC8vIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBidWZmZXIgYXJvdW5kIHRoZSBhcnJvd1xuICAgIC8vIGJ5IGNhbGN1bGF0aW5nIGhvdyBob3cgbXVjaCB0aGUgYXJyb3cgd291bGQgbmVlZCB0byBtb3ZlXG4gICAgLy8gYnV0IGluc3RlYWQgb2YgbW92aW5nIHRoZSBhcnJvdywgc2hpZnQgdGhlIHBvcG92ZXIgY29udGVudFxuXG4gICAgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPCBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSkge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtaW5pbXVtIHNpZGVcbiAgICAgIHZhciBkaWZmZXJlbmNlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgLSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gLT0gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgKyBhcnJvd1dpZHRoID4gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gc2lkZVxuICAgICAgdmFyIGVkZ2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXM7XG5cbiAgICAgIHZhciBfZGlmZmVyZW5jZSA9IGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSAoZWRnZSAtIG1pbmltdW1TcGFjZSAtIGFycm93V2lkdGgpO1xuXG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiArPSBfZGlmZmVyZW5jZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyb3NzQXhpc1Bvc2l0aW9uOiBjcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uOiBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByaW1hcnlBeGlzUG9zaXRpb24oX3JlZjUpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZjUucG9zaXRpb24sXG4gICAgICBvZmZzZXQgPSBfcmVmNS5vZmZzZXQsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNS5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWY1LmFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmNS5hcnJvd0NvbmZpZztcbiAgLy8gaWYgcG9zaXRpb25pbmcgdG8gdGhlIHRvcCBvciBsZWZ0LCB0aGUgdGFyZ2V0IHBvc2l0aW9uIGRlY3JlYXNlc1xuICAvLyBmcm9tIHRoZSBhbmNob3IncyB0b3Agb3IgbGVmdCwgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbiBhZGRzIHRvIHRoZSBhbmNob3Inc1xuICB2YXIgaXNPZmZzZXREZWNyZWFzaW5nID0gcG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnbGVmdCc7XG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcG9wb3ZlclNpemVPblByaW1hcnlBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gc3RhcnQgYXQgdGhlIHRvcCBvciBsZWZ0IGVkZ2Ugb2YgdGhlIGFuY2hvciBlbGVtZW50XG5cbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcblxuICB2YXIgYW5jaG9yRWRnZU9yaWdpbiA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzUG9zaXRpb25OYW1lXTsgLy8gZmluZCB0aGUgcG9wb3ZlciBwb3NpdGlvbiBvbiB0aGUgcHJpbWFyeSBheGlzXG5cbiAgdmFyIGFuY2hvclNpemVPblByaW1hcnlBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dO1xuICB2YXIgcHJpbWFyeUF4aXNPZmZzZXQgPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiBhbmNob3JTaXplT25QcmltYXJ5QXhpcztcbiAgdmFyIGNvbnRlbnRPZmZzZXQgPSAob2Zmc2V0ICsgcHJpbWFyeUF4aXNPZmZzZXQpICogKGlzT2Zmc2V0RGVjcmVhc2luZyA/IC0xIDogMSk7XG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uID0gYW5jaG9yRWRnZU9yaWdpbiArIGNvbnRlbnRPZmZzZXQ7XG4gIHZhciBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbjogcHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb246IHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuLyoqXG4gKiBGaW5kcyB0aGUgY2xpZW50IHBpeGVsIGNvb3JkaW5hdGUgb2YgZWFjaCBlZGdlIGZvciB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGJveCxcbiAqIGFuZCB0aGUgYm91bmRpbmcgYm94J3Mgd2lkdGggJiBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcn19XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdC50b3AsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgY29udGVudCBzcGFjZSBiZXR3ZWVuIGFuY2hvciBhbmQgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuY2hvckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXIgTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZzZXRTaWRlIFNpZGUgdGhlIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvLCBvbmVcbiAqICBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShhbmNob3JCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXRTaWRlKSB7XG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzMyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczQgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzMywgNCksXG4gICAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFswXSxcbiAgICAgIHJpZ2h0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMV0sXG4gICAgICBib3R0b21CdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsyXSxcbiAgICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFszXTtcblxuICByZXR1cm4ge1xuICAgIHRvcDogYW5jaG9yQm91bmRpbmdCb3gudG9wIC0gY29udGFpbmVyQm91bmRpbmdCb3gudG9wIC0gdG9wQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICd0b3AnID8gb2Zmc2V0IDogMCksXG4gICAgcmlnaHQ6IGNvbnRhaW5lckJvdW5kaW5nQm94LnJpZ2h0IC0gYW5jaG9yQm91bmRpbmdCb3gucmlnaHQgLSByaWdodEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAncmlnaHQnID8gb2Zmc2V0IDogMCksXG4gICAgYm90dG9tOiBjb250YWluZXJCb3VuZGluZ0JveC5ib3R0b20gLSBhbmNob3JCb3VuZGluZ0JveC5ib3R0b20gLSBib3R0b21CdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2JvdHRvbScgPyBvZmZzZXQgOiAwKSxcbiAgICBsZWZ0OiBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IC0gY29udGFpbmVyQm91bmRpbmdCb3gubGVmdCAtIGxlZnRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2xlZnQnID8gb2Zmc2V0IDogMClcbiAgfTtcbn1cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGZpdCAob3ZlcmxhcCkgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBjb250YWluZXIsIGZpdCBpcyBpbiByYW5nZSAwLjAgPT4gMS4wXG4gKiBAcGFyYW0gY29udGVudEJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250ZW50IHRvIGNhbGN1bGF0ZSBmaXQgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRhaW5lclxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZUZpdChjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KSB7XG4gIHZhciBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24ubGVmdCA+IGludGVyc2VjdGlvbi5yaWdodCB8fCBpbnRlcnNlY3Rpb24udG9wID4gaW50ZXJzZWN0aW9uLnRvcCkge1xuICAgIC8vIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiwgdGhlIGJveGVzIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBvbiBhdCBsZWFzdCBvbmUgYXhpc1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSAoaW50ZXJzZWN0aW9uLnJpZ2h0IC0gaW50ZXJzZWN0aW9uLmxlZnQpICogKGludGVyc2VjdGlvbi5ib3R0b20gLSBpbnRlcnNlY3Rpb24udG9wKTtcbiAgdmFyIGNvbnRlbnRBcmVhID0gKGNvbnRlbnRCb3VuZGluZ0JveC5yaWdodCAtIGNvbnRlbnRCb3VuZGluZ0JveC5sZWZ0KSAqIChjb250ZW50Qm91bmRpbmdCb3guYm90dG9tIC0gY29udGVudEJvdW5kaW5nQm94LnRvcCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gY29udGVudEFyZWE7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBzcGFjZSBiZXR3ZWVuIHR3byBib3VuZGluZyBib3hlc1xuICpcbiAqIEBwYXJhbSBmaXJzdEJveFxuICogQHBhcmFtIHNlY29uZEJveFxuICogQHJldHVybnMge0V1aUNsaWVudFJlY3R9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEJvdW5kaW5nQm94ZXMoZmlyc3RCb3gsIHNlY29uZEJveCkge1xuICB2YXIgdG9wID0gTWF0aC5tYXgoZmlyc3RCb3gudG9wLCBzZWNvbmRCb3gudG9wKTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4oZmlyc3RCb3gucmlnaHQsIHNlY29uZEJveC5yaWdodCk7XG4gIHZhciBib3R0b20gPSBNYXRoLm1pbihmaXJzdEJveC5ib3R0b20sIHNlY29uZEJveC5ib3R0b20pO1xuICB2YXIgbGVmdCA9IE1hdGgubWF4KGZpcnN0Qm94LmxlZnQsIHNlY29uZEJveC5sZWZ0KTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHJpZ2h0IC0gbGVmdCwgMCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgd2lkdGg6IHdpZHRoXG4gIH07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHRvcC1tb3N0IGRlZmluZWQgei1pbmRleCBpbiB0aGUgZWxlbWVudCdzIGFuY2VzdG9yIGhpZXJhcmNoeVxuICogcmVsYXRpdmUgdG8gdGhlIGB0YXJnZXRgIGVsZW1lbnQ7IGlmIG5vIHotaW5kZXggaXMgZGVmaW5lZCwgcmV0dXJucyAwXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcGFyYW0gY291c2luIHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudCwgY291c2luKSB7XG4gIC8qKlxuICAgKiBmaW5kaW5nIHRoZSB6LWluZGV4IG9mIGBlbGVtZW50YCBpcyBub3QgdGhlIGZ1bGwgc3RvcnlcbiAgICogaXRzIHRoZSBDU1Mgc3RhY2tpbmcgY29udGV4dCB0aGF0IGlzIGltcG9ydGFudFxuICAgKiB0YWtlIHRoaXMgRE9NIGZvciBleGFtcGxlOlxuICAgKiBib2R5XG4gICAqICAgc2VjdGlvblt6LWluZGV4OiAxMDAwXVxuICAgKiAgICAgcFt6LWluZGV4OiA1MDBdXG4gICAqICAgICAgIGJ1dHRvblxuICAgKiAgIGRpdlxuICAgKlxuICAgKiB3aGF0IHotaW5kZXggZG9lcyB0aGUgYGRpdmAgbmVlZCB0byBkaXNwbGF5IG5leHQgdG8gYGJ1dHRvbmA/XG4gICAqIHRoZSBgZGl2YCBhbmQgYHNlY3Rpb25gIGFyZSB3aGVyZSB0aGUgc3RhY2tpbmcgY29udGV4dCBzcGxpdHNcbiAgICogc28gYGRpdmAgbmVlZHMgdG8gY29weSBgc2VjdGlvbmAncyB6LWluZGV4IGluIG9yZGVyIHRvXG4gICAqIGFwcGVhciBuZXh0IHRvIC8gb3ZlciBgYnV0dG9uYFxuICAgKlxuICAgKiBjYWxjdWxhdGUgdGhpcyBieSBzdGFydGluZyBhdCBgYnV0dG9uYCBhbmQgZmluZGluZyBpdHMgb2Zmc2V0UGFyZW50c1xuICAgKiB0aGVuIHdhbGsgdGhlIHBhcmVudHMgZnJvbSB0b3AgLT4gZG93biB1bnRpbCB0aGUgc3RhY2tpbmcgY29udGV4dFxuICAgKiBzcGxpdCBpcyBmb3VuZCwgb3IgaWYgdGhlcmUgaXMgbm8gc3BsaXQgdGhlbiBhIHNwZWNpZmljIHotaW5kZXggaXMgdW5pbXBvcnRhbnRcbiAgICovXG4gIC8vIGJ1aWxkIHRoZSBhcnJheSBvZiB0aGUgZWxlbWVudCArIGl0cyBvZmZzZXQgcGFyZW50c1xuICB2YXIgbm9kZXNUb0luc3BlY3QgPSBbXTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG5vZGVzVG9JbnNwZWN0LnB1c2goZWxlbWVudCk7IC8vIEFGQUlDVCB0aGlzIGlzIGEgdmFsaWQgY2FzdCAtIHRoZSBsaWJkZWZzIGFwcGVhciB3cm9uZ1xuXG4gICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OyAvLyBzdG9wIGlmIHRoZXJlIGlzIG5vIHBhcmVudFxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBzdG9wIGlmIHRoZSBwYXJlbnQgY29udGFpbnMgdGhlIHJlbGF0ZWQgZWxlbWVudFxuICAgIC8vIGFzIHRoaXMgaXMgdGhlIHotaW5kZXggYW5jZXN0b3JcblxuXG4gICAgaWYgKGVsZW1lbnQuY29udGFpbnMoY291c2luKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IC8vIHJldmVyc2UgdGhlIG5vZGVzIHRvIHdhbGsgZnJvbSB0b3AgLT4gZWxlbWVudFxuXG5cbiAgbm9kZXNUb0luc3BlY3QucmV2ZXJzZSgpO1xuXG4gIGZvciAodmFyIF9pMiA9IDAsIF9ub2Rlc1RvSW5zcGVjdCA9IG5vZGVzVG9JbnNwZWN0OyBfaTIgPCBfbm9kZXNUb0luc3BlY3QubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBub2RlID0gX25vZGVzVG9JbnNwZWN0W19pMl07XG4gICAgLy8gZ2V0IHRoaXMgbm9kZSdzIHotaW5kZXggY3NzIHZhbHVlXG4gICAgdmFyIHpJbmRleCA9IHdpbmRvdy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmdldFByb3BlcnR5VmFsdWUoJ3otaW5kZXgnKTsgLy8gaWYgdGhlIHotaW5kZXggaXMgbm90IGEgbnVtYmVyIChlLmcuIFwiYXV0b1wiKSByZXR1cm4gbnVsbCwgZWxzZSB0aGUgdmFsdWVcblxuICAgIHZhciBwYXJzZWRaSW5kZXggPSBwYXJzZUludCh6SW5kZXgsIDEwKTtcblxuICAgIGlmICghaXNOYU4ocGFyc2VkWkluZGV4KSkge1xuICAgICAgcmV0dXJuIHBhcnNlZFpJbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBHUk9VUF9OVU1FUklDID0gL14oW1xcZC5dKykoc3xtcykvO1xuXG5mdW5jdGlvbiBnZXRNaWxsaXNlY29uZHModmFsdWUsIHVuaXQpIHtcbiAgLy8gR2l2ZW4gdGhlIHJlZ2V4IG1hdGNoIGFuZCBjYXB0dXJlIGdyb3Vwcywgd2UgY2FuIGFzc3VtZSBgdW5pdGAgdG8gYmUgZWl0aGVyICdzJyBvciAnbXMnXG4gIHZhciBtdWx0aXBsaWVyID0gdW5pdCA9PT0gJ3MnID8gMTAwMCA6IDE7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIG11bHRpcGxpZXI7XG59IC8vIEZpbmQgQ1NTIGB0cmFuc2l0aW9uLWR1cmF0aW9uYCBhbmQgYHRyYW5zaXRpb24tZGVsYXlgIGludGVydmFsc1xuLy8gYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBpbiAnbXMnXG5cblxuZXhwb3J0IHZhciBnZXRUcmFuc2l0aW9uVGltaW5ncyA9IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpIHtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2hBcnJheSA9IGNvbXB1dGVkRHVyYXRpb24ubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoID0gZHVyYXRpb25NYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGR1cmF0aW9uTWF0Y2hBcnJheVsxXSwgZHVyYXRpb25NYXRjaEFycmF5WzJdKSA6IDA7XG4gIHZhciBjb21wdXRlZERlbGF5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gIHZhciBkZWxheU1hdGNoQXJyYXkgPSBjb21wdXRlZERlbGF5Lm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZGVsYXlNYXRjaCA9IGRlbGF5TWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkZWxheU1hdGNoQXJyYXlbMV0sIGRlbGF5TWF0Y2hBcnJheVsyXSkgOiAwO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uTWF0Y2g6IGR1cmF0aW9uTWF0Y2gsXG4gICAgZGVsYXlNYXRjaDogZGVsYXlNYXRjaFxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09PSBkb2N1bWVudC5FTEVNRU5UX05PREU7XG59IC8vIFVzZXMgYGdldFRyYW5zaXRpb25UaW1pbmdzYCB0byBmaW5kIHRoZSB0b3RhbCB0cmFuc2l0aW9uIHRpbWUgZm9yXG4vLyBhbGwgZWxlbWVudHMgdGFyZ2V0ZWQgYnkgYSBNdXRhdGlvbk9ic2VydmVyIGNhbGxiYWNrXG5cblxuZXhwb3J0IHZhciBnZXRXYWl0RHVyYXRpb24gPSBmdW5jdGlvbiBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcykge1xuICByZXR1cm4gcmVjb3Jkcy5yZWR1Y2UoZnVuY3Rpb24gKHdhaXREdXJhdGlvbiwgcmVjb3JkKSB7XG4gICAgLy8gb25seSBjaGVjayBmb3IgQ1NTIHRyYW5zaXRpb24gdmFsdWVzIGZvciBFTEVNRU5UIG5vZGVzXG4gICAgaWYgKGlzRWxlbWVudE5vZGUocmVjb3JkLnRhcmdldCkpIHtcbiAgICAgIHZhciBfZ2V0VHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhyZWNvcmQudGFyZ2V0KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoO1xuXG4gICAgICB3YWl0RHVyYXRpb24gPSBNYXRoLm1heCh3YWl0RHVyYXRpb24sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FpdER1cmF0aW9uO1xuICB9LCAwKTtcbn07IC8vIFVzZXMgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdG8gcGVyZm9ybSBhIGdpdmVuIGNhbGxiYWNrIGFmdGVyIGEgc3BlY2lmaWVkIHdhaXRpbmcgcGVyaW9kXG5cbmV4cG9ydCB2YXIgcGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIHRvUGVyZm9ybSkge1xuICBpZiAod2FpdER1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBlbmRUaW1lID0gc3RhcnRUaW1lICsgd2FpdER1cmF0aW9uO1xuXG4gICAgdmFyIG9uRnJhbWUgPSBmdW5jdGlvbiBvbkZyYW1lKCkge1xuICAgICAgdG9QZXJmb3JtKCk7XG5cbiAgICAgIGlmIChlbmRUaW1lID4gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgfVxufTsgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21iaW5pbmcgdGhlIHJlc3VsdCBvZiAnZ2V0V2FpdER1cmF0aW9uJyBkaXJlY3RseSB3aXRoICdwZXJmb3JtT25GcmFtZSdcblxuZXhwb3J0IHZhciBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lID0gZnVuY3Rpb24gZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZShyZWNvcmRzLCB0b1BlcmZvcm0pIHtcbiAgcGVyZm9ybU9uRnJhbWUoZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpLCB0b1BlcmZvcm0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuLypcbiAqIEZvciB1c2Ugd2hlbiBhIGNvbXBvbmVudCBuZWVkcyB0byBzZXQgYHJlZmAgb2JqZWN0cyBmcm9tIG11bHRpcGxlIHNvdXJjZXMuXG4gKiBGb3IgaW5zdGFuY2UsIGlmIGEgY29tcG9uZW50IGFjY2VwdHMgYSBgcmVmYCBwcm9wIGJ1dCBhbHNvIG5lZWRzIGl0cyBvd25cbiAqIGxvY2FsIHJlZmVyZW5jZSBmb3IgY2FsY3VsYXRpb25zLCBldGMuXG4gKiBUaGlzIGhvb2sgaGFuZGxlcyBzZXR0aW5nIG11bHRpcGxlIGByZWZgcyBvZiBhbnkgYXZhaWxhYmxlIGByZWZgIHR5cGVcbiAqIGluIGEgc2luZ2xlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCB2YXIgdXNlQ29tYmluZWRSZWZzID0gZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKHJlZnMpIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoIXJlZikgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtyZWZzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImVsZW1lbnRcIiwgXCJiYXNlQ2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmlsbFwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc1NlbGVjdGVkXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwibWluV2lkdGhcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCBhcyBFdWlCdXR0b25Db250ZW50IH0gZnJvbSAnLi9fYnV0dG9uX2NvbnRlbnRfZGVwcmVjYXRlZCc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBjb2xvclRvQ2xhc3NOYW1lTWFwID0ge1xuICBwcmltYXJ5OiAnLS1wcmltYXJ5JyxcbiAgYWNjZW50OiAnLS1hY2NlbnQnLFxuICBzdWNjZXNzOiAnLS1zdWNjZXNzJyxcbiAgd2FybmluZzogJy0td2FybmluZycsXG4gIGRhbmdlcjogJy0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICctLWdob3N0JyxcbiAgdGV4dDogJy0tdGV4dCdcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uQ29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG4vKipcbiAqIEV1aUJ1dHRvbiBpcyBsYXJnZWx5IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgcmVsZXZhbnQgcHJvcHNcbiAqIGFuZCB0aGUgbG9naWMgZm9yIGVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuICovXG5leHBvcnQgdmFyIEV1aUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbihfcmVmKSB7XG4gIHZhciBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGJ1dHRvbklzRGlzYWJsZWQgPSByZXN0LmlzTG9hZGluZyB8fCBpc0Rpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgZWxlbWVudCA9IGhyZWYgJiYgIWlzRGlzYWJsZWQgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIGVsZW1lbnRQcm9wcyA9IHt9OyAvLyBQcm9wcyBmb3IgYWxsIGVsZW1lbnRzXG5cbiAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgIGlzRGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWRcbiAgfSk7IC8vIEVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuXG4gIGlmIChlbGVtZW50ID09PSAnYnV0dG9uJykge1xuICAgIGVsZW1lbnRQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudFByb3BzKSwge30sIHtcbiAgICAgIGRpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkXG4gICAgfSk7XG4gIH1cblxuICB2YXIgcmVsT2JqID0ge307XG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmVsT2JqLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcmV0dXJuICgvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXBhc2NhbC1jYXNlXG4gICAgX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZCwgX2V4dGVuZHMoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwiZXVpQnV0dG9uXCIsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIGVsZW1lbnRQcm9wcywgcmVsT2JqLCByZXN0KSlcbiAgKTtcbn07XG5FdWlCdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSksXG5cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpQnV0dG9uLmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbic7XG5cbi8qKlxuICogKkRFUFJFQ0FURUQqXG4gKiBFdWlCdXR0b25EaXNwbGF5IGlzIGFuIGludGVybmFsLW9ubHkgY29tcG9uZW50IHVzZWQgZm9yIGRpc3BsYXlpbmdcbiAqIGFueSBlbGVtZW50IGFzIGEgYnV0dG9uLlxuICogTk9URTogVGhpcyBjb21wb25lbnQgKm11c3QqIGJlIGJlbG93IEV1aUJ1dHRvbiBpbiB0aGUgZmlsZSBhbmRcbiAqIEV1aUJ1dHRvbiBtdXN0IGFsc28gc2V0IGEgZGlzcGxheU5hbWUgZm9yIHJlYWN0LWRvY2dlbi10eXBlc2NyaXB0XG4gKiB0byBjb3JyZWN0bHkgc2V0IEV1aUJ1dHRvbidzIGRvY2dlbkluZm8gYW5kIGRpc3BsYXkgYSBwcm9wcyB0YWJsZS5cbiAqIFRoaXMgY29tcG9uZW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBFdWlCdXR0b25EaXNwbGF5XG4gKiB0aGF0IGNhbiBiZSBmb3VuZCBpbiBgc3JjL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS50c3hgXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheURlcHJlY2F0ZWQgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjIsIHJlZikge1xuICB2YXIgX3JlZjIkZWxlbWVudCA9IF9yZWYyLmVsZW1lbnQsXG4gICAgICBlbGVtZW50ID0gX3JlZjIkZWxlbWVudCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiRlbGVtZW50LFxuICAgICAgYmFzZUNsYXNzTmFtZSA9IF9yZWYyLmJhc2VDbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmMi5pY29uVHlwZSxcbiAgICAgIF9yZWYyJGljb25TaWRlID0gX3JlZjIuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYyJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmMiRpY29uU2lkZSxcbiAgICAgIF9yZWYyJGNvbG9yID0gX3JlZjIuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYyJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmMiRjb2xvcixcbiAgICAgIF9yZWYyJHNpemUgPSBfcmVmMi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYyJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYyJHNpemUsXG4gICAgICBfcmVmMiRmaWxsID0gX3JlZjIuZmlsbCxcbiAgICAgIGZpbGwgPSBfcmVmMiRmaWxsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGZpbGwsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYyLmlzTG9hZGluZyxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgICAgY29udGVudFByb3BzID0gX3JlZjIuY29udGVudFByb3BzLFxuICAgICAgdGV4dFByb3BzID0gX3JlZjIudGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gX3JlZjIuZnVsbFdpZHRoLFxuICAgICAgbWluV2lkdGggPSBfcmVmMi5taW5XaWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcblxuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzTG9hZGluZyB8fCBpc0Rpc2FibGVkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoYmFzZUNsYXNzTmFtZSwgY29sb3IgJiYgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0gPyBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0pIDogXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KGNvbG9yVG9DbGFzc05hbWVNYXAucHJpbWFyeSksIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdID8gXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSkgOiBudWxsLCBmaWxsICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLS1maWxsXCIpLCBmdWxsV2lkdGggJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWZ1bGxXaWR0aFwiKSwgYnV0dG9uSXNEaXNhYmxlZCAmJiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIi1pc0Rpc2FibGVkXCIpLCBjbGFzc05hbWUpO1xuICAvKipcbiAgICogTm90IGNoYW5naW5nIHRoZSBjb250ZW50IG9yIHRleHQgY2xhc3MgbmFtZXMgdG8gbWF0Y2ggYmFzZUNsYXNzTmFtZSB5ZXQsXG4gICAqIGFzIGl0IGlzIGEgbWFqb3IgYnJlYWtpbmcgY2hhbmdlLlxuICAgKi9cblxuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25fX2NvbnRlbnQnLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbl9fdGV4dCcsIHRleHRQcm9wcyAmJiB0ZXh0UHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25Db250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xuXG4gIHZhciBjYWxjdWxhdGVkU3R5bGUgPSBzdHlsZTtcblxuICBpZiAobWluV2lkdGggIT09IHVuZGVmaW5lZCB8fCBtaW5XaWR0aCAhPT0gbnVsbCkge1xuICAgIGNhbGN1bGF0ZWRTdHlsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2FsY3VsYXRlZFN0eWxlKSwge30sIHtcbiAgICAgIG1pbldpZHRoOiBtaW5XaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogY2FsY3VsYXRlZFN0eWxlLFxuICAgIGRpc2FibGVkOiBlbGVtZW50ID09PSAnYnV0dG9uJyAmJiBidXR0b25Jc0Rpc2FibGVkLFxuICAgICdhcmlhLXByZXNzZWQnOiBlbGVtZW50ID09PSAnYnV0dG9uJyA/IGlzU2VsZWN0ZWQgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG59KTtcbkV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcblxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZSBhIHZhbGlkIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBlbGVtZW50IGFzXG4gICAgICAgKi9cbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCIsIFwibGFiZWxcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQcm92aWRlIHRoZSBjb21wb25lbnQncyBiYXNlIGNsYXNzIG5hbWUgdG8gYnVpbGQgdGhlIGNsYXNzIGxpc3Qgb25cbiAgICAgICAqL1xuICBiYXNlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5FdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZC5kaXNwbGF5TmFtZSA9ICdFdWlCdXR0b25EaXNwbGF5JzsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dFByb3BzXCIsIFwiaXNMb2FkaW5nXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImljb25TaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGljb25TaWRlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6IG51bGwsXG4gIHJpZ2h0OiAnZXVpQnV0dG9uQ29udGVudC0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgPSBmdW5jdGlvbiBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICAgIF9yZWYkaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmJGlzTG9hZGluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTG9hZGluZyxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBjb250ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkNvbnRlbnRfX3NwaW5uZXJcIixcbiAgICAgIHNpemU6IGljb25TaXplXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaWNvblR5cGUpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uQ29udGVudF9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkNvbnRlbnQnLCBpY29uU2lkZSA/IGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdIDogbnVsbCwgY29udGVudFByb3BzICYmIGNvbnRlbnRQcm9wcy5jbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGNvbnRlbnRQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSksIGJ1dHRvbkljb24sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHRleHRQcm9wcywgY2hpbGRyZW4pKTtcbn07XG5FdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BY2Nlc3NpYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFjY2Vzc2liaWxpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDBhOCA4IDAgMTEwIDE2QTggOCAwIDAxOCAwem0wIDFhNyA3IDAgMTAwIDE0QTcgNyAwIDAwOCAxem0zLjk3NCA0LjM0MmEuNS41IDAgMDEtLjIzMy41OTZsLS4wODMuMDM2TDkgNi44NnYyLjU1OWwuOTc0IDIuOTIzYS41LjUgMCAwMS0uMjMzLjU5NmwtLjA4My4wMzZhLjUuNSAwIDAxLS41OTYtLjIzM2wtLjAzNi0uMDgzLTEtM0w4IDkuNWwtLjAyNi4xNTgtMSAzYS41LjUgMCAwMS0uOTctLjIyOGwuMDIyLS4wODhMNyA5LjQxNlY2Ljg2bC0yLjY1OC0uODg2YS41LjUgMCAwMS4yMjgtLjk3bC4wODguMDIyTDcuNTgzIDZoLjgzM2wyLjkyNi0uOTc0YS41LjUgMCAwMS42MzIuMzE2ek04IDNhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFjY2Vzc2liaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIEV1aUljb25BZ2dyZWdhdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi41IDJhLjUuNSAwIDEwMCAxIC41LjUgMCAwMDAtMXptMC0xYTEuNSAxLjUgMCAwMTEuNDE1IDFoMS45MDhhMS41IDEuNSAwIDAxMS4zOTMuOTQzTDguODM5IDdIMTIuNWEuNS41IDAgMDEwIDFIOC44MzlsLTEuNjIzIDQuMDU3QTEuNSAxLjUgMCAwMTUuODIzIDEzSDMuOTE1YTEuNSAxLjUgMCAxMTAtMWgxLjkwOGEuNS41IDAgMDAuNDY0LS4zMTRMNy43NjEgOEgzLjkxNWExLjUgMS41IDAgMTEwLTFINy43Nkw2LjI4NyAzLjMxNEEuNS41IDAgMDA1LjgyMyAzSDMuOTE1QTEuNSAxLjUgMCAxMTIuNSAxem0wIDExYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTMgNy41YS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwem05LjM1NC0zLjM1NGEuNS41IDAgMDAtLjcwOC43MDhMMTMuNzkzIDdhLjcwNy43MDcgMCAwMTAgMWwtMi4xNDcgMi4xNDZhLjUuNSAwIDAwLjcwOC43MDhMMTQuNSA4LjcwN2ExLjcwNyAxLjcwNyAwIDAwMC0yLjQxNGwtMi4xNDYtMi4xNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFnZ3JlZ2F0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQWxlcnQgPSBmdW5jdGlvbiBFdWlJY29uQWxlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41OSAxMC4wNTlMNy4zNSA1LjE4aDEuM0w4LjQgMTAuMDZoLS44MXptLjM5NCAxLjkwMWEuNjEuNjEgMCAwMS0uNDQ4LS4xODYuNjA2LjYwNiAwIDAxLS4xODYtLjQ0NGMwLS4xNzQuMDYyLS4zMjMuMTg2LS40NDZhLjYxNC42MTQgMCAwMS40NDgtLjE4NGMuMTY5IDAgLjMxNS4wNi40NC4xODIuMTI0LjEyMi4xODYuMjcuMTg2LjQ0OGEuNi42IDAgMDEtLjE4OS40NDYuNjA3LjYwNyAwIDAxLS40MzcuMTg0ek0yIDE0YTEgMSAwIDAxLS44NzgtMS40NzlsNi0xMWExIDEgMCAwMTEuNzU2IDBsNiAxMUExIDEgMCAwMTE0IDE0SDJ6bTAtMWgxMkw4IDIgMiAxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWxlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggOS4xNjlMMiA1LjI1djYuMTdsNiAzLjQyOCA2LTMuNDI4VjUuMjVMOCA5LjE3ek0xNSA0djhsLTcgNC03LTRWNGw3LTQgNyA0em0tMS40MjguMzM2TDggMS4xNTIgMi40MjggNC4zMzYgOCA3Ljk3NGw1LjU3Mi0zLjYzOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BbmFseXplRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uQW5hbHl6ZUV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNCxcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjkyNCA0LjAxM2EuNjA1LjYwNSAwIDAwLS4yMjgtLjIzNkw3LjMwNC4wODJhLjYwNy42MDcgMCAwMC0uNjA4IDBMLjMwNCAzLjc3N0EuNjIuNjIgMCAwMDAgNC4zMDR2Ny4zOTJjMCAuMjE3LjExNi40MTguMzA0LjUyN2w2LjM5MiAzLjY5NWMuMTg4LjExLjQyLjExLjYwOCAwbDYuMzkyLTMuNjk1YS42MDkuNjA5IDAgMDAuMzA0LS41MjdWNC4zMDRhLjYwNy42MDcgMCAwMC0uMDc2LS4yOTF6TTEgNS4wNzl2Ni4zOTFsNiAzLjQ3IDYtMy40N1Y1LjA4TDcuMjUyIDguNDMyIDcgOC41NzlsLS4yNTItLjE0N0wxIDUuMDc5em0xMS40NzYtLjg1Mkw3IDEuMDYgMS41MjQgNC4yMjcgNyA3LjQybDUuNDc2LTMuMTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFubm90YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi41YTQuNSA0LjUgMCAxMTUgNC40NzNWMTZIN3YtNS4wMjdBNC41IDQuNSAwIDAxMyA2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwbVRyYWNlID0gZnVuY3Rpb24gRXVpSWNvbkFwbVRyYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bS41IDJoMTBhLjUuNSAwIDExMCAxaC0xMGEuNS41IDAgMDEwLTF6bTEgM2g2YS41LjUgMCAwMTAgMWgtNmEuNS41IDAgMDEwLTF6bTIgM2g0YS41LjUgMCAwMTAgMWgtNGEuNS41IDAgMDEwLTF6bTMgM2g1YS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwbVRyYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBBZGREYXRhID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkZERhdGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMEgwVjNoMTIuNTdsMyA1SDMydjIyek0yIDI4aDI4VjEwSDE0LjQzbC0zLTVIMnYyM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMThoLTR2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkZERhdGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMi45MDkgMjYuMTgyaDEuOTM5djQuODQ4SDIuOTA5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NDggMTYuNjJWMEgyLjkxdjE2LjYyYTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg3OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTQuNTQ1IDE2LjQ4NWgxLjkzOVYzMS4wM2gtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi40ODUgNi45MjRWMGgtMS45NHY2LjkyNGEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgyYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjYuMTgyIDI2LjE4MmgxLjkzOXY0Ljg0OGgtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC4xMjEgMTYuNjJWMGgtMS45NHYxNi42MmEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgzYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44Nzl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFnZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFnZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAyLjgyTDE2IC4wMzggMTEgMi44MnYyLjI4OWw1LTIuNzgyIDUgMi43ODJ2LTIuMjl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIxIDcuMjgyTDE2IDQuNWwtNSAyLjc4MlY5LjU3bDUtMi43ODEgNSAyLjc4MVY3LjI4MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNS4wNDVMMiA3LjgyN3YxNS41NzdsMTQgNy43ODggMTQtNy43ODhWNy44MjdsLTUtMi43ODJ2Mi4yODlsMyAxLjY2OXYxMy4yMjVsLTEyIDYuNjc2LTEyLTYuNjc2VjkuMDAzbDMtMS42NjlWNS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIgMTIuNUwxNiA5bC02IDMuNXY3bDYgMy41IDYtMy41di03em0tOS45NzQgMS4yMDVMMTYgMTEuMzg3bDMuOTc0IDIuMzE4djQuNTlMMTYgMjAuNjEzbC0zLjk3NC0yLjMxOHYtNC41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWdlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFwbSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcG0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2MkgxVjFoMzB2NmgtMlYzSDN2N3ptMjYgMTl2LTZoMnY4SDE4di04aDJ2Nmg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zMSAxMEg5djExaDEyYzUuNTIzIDAgMTAtNC40NzcgMTAtMTB2LTF6bS0xMCA5SDExdi03aDE3LjkzOEE4LjAwMSA4LjAwMSAwIDAxMjEgMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNS41IDExLjkxNUwyNyA1LjI3OSAxOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAwLTcgMGwtOCA0LjYyQTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2MWw3LjUgNC4zM1YxNy45OGE3IDcgMCAwMTMuNS02LjA2M3pNMTAgMjcuNzg1di05LjgwOGE5IDkgMCAwMTQuNS03Ljc5M2w4LjUwMy00LjkxTDE4LjUgMi42NzJhNS4wMDMgNS4wMDMgMCAwMC01IDBsLTggNC42MTlBNSA1IDAgMDAzIDExLjYydjkuMjM4YTUgNSAwIDAwMi41IDQuMzNsNC41IDIuNTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTguNDA5IDEzLjU1YTcuMDg5IDcuMDg5IDAgMDExLjAzNSAxLjcxMUE2LjkzIDYuOTMgMCAwMTIwIDE3Ljk4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAwMy41LTYuMDYxdi05LjIzOWE2Ljk5MiA2Ljk5MiAwIDAwLTEuNTg3LTQuNDIxTDE4LjQwOSAxMy41NXptMi43NzcuNzA1QTguOTMzIDguOTMzIDAgMDEyMiAxNy45Nzl2OS44MDdsNC41LTIuNTk4YTUgNSAwIDAwMi41LTQuMzNWMTEuNjJjMC0uNTg4LS4xMDYtMS4xNjEtLjMwMy0xLjdsLTcuNTExIDQuMzM1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEF1ZGl0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBdWRpdGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE1IDBoMnYzMmgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMzJoMTN2LTJIMlYyaDExVjBIMHpNMTkgMHYyaDExdjI4SDE5djJoMTNWMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXVkaXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDYW52YXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FudmFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk03IDE3aDJ2N0g3ek0xMiAxNGgydjEwaC0yek0xNyAxNmgydjhoLTJ6TTIyIDE0aDN2MmgtM3pNMjIgMThoM3YyaC0zek0yMiAyMmgzdjJoLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC43MyAyNGE2LjQ3IDYuNDcgMCAwMS40NS0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTguNTUgOC41NSAwIDAwLS41NC0yLjgxIDYuNDcgNi40NyAwIDAxLS40NS0yLjE5IDkuMiA5LjIgMCAwMS42Mi0yLjQ5Yy41My0xLjU3IDEuMDgtMy4xOS4wOC00LjItMS0xLjAxLTIuNDEtLjQ0LTMuNTIuMDVhNS41OSA1LjU5IDAgMDEtMi4wOS42NCA1LjMgNS4zIDAgMDEtLjU5IDBMMTYgLjI4IDYuNzcgOGE1LjMgNS4zIDAgMDEtLjU5IDAgNS41OSA1LjU5IDAgMDEtMi4wOS0uNjVDMyA2Ljg3IDEuNiA2LjI1LjU3IDcuMzFjLTEuMDMgMS4wNi0uNDUgMi42My4wOCA0LjJBOS4yIDkuMiAwIDAxMS4yNyAxNGE2LjQ3IDYuNDcgMCAwMS0uNDUgMi4xOUE4LjU1IDguNTUgMCAwMC4yOCAxOWMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MUE2LjQ3IDYuNDcgMCAwMTEuMjcgMjRhOS4yIDkuMiAwIDAxLS42MiAyLjQ5Yy0uNTMgMS41Ny0xLjA4IDMuMTktLjA4IDQuMi4zNTMuMzguODUyLjU5IDEuMzcuNThhNS42NyA1LjY3IDAgMDAyLjE1LS42M0E1LjU5IDUuNTkgMCAwMTYuMTggMzBhNy4xMyA3LjEzIDAgMDEyLjI5LjQ3IDggOCAwIDAwMi42Mi41MyA3LjM3IDcuMzcgMCAwMDIuNDctLjUxQTcuMTQgNy4xNCAwIDAxMTYgMzBhNi4yNCA2LjI0IDAgMDEyLjE0LjQ1IDggOCAwIDAwMi43Ny41NSA4LjA4IDguMDggMCAwMDIuNzctLjU1IDYuMjQgNi4yNCAwIDAxMi4xNC0uNDUgNS41OSA1LjU5IDAgMDEyLjA5LjY1YzEuMTEuNDkgMi40OSAxLjExIDMuNTIuMDUgMS4wMy0xLjA2LjQ1LTIuNjMtLjA4LTQuMmE5LjIgOS4yIDAgMDEtLjYyLTIuNXpNMjEuMTcgN2gtLjI2YTggOCAwIDAwLTIuNzcuNTVBNi4yNCA2LjI0IDAgMDExNiA4YTYuMjQgNi4yNCAwIDAxLTIuMTQtLjQ1QTggOCAwIDAwMTEuMDkgN2gtLjI2TDE2IDIuNzIgMjEuMTcgN3ptOC44OSAyMi4yN2E0LjQyIDQuNDIgMCAwMS0xLjM0LS40NiA3LjA4IDcuMDggMCAwMC0yLjktLjgyIDguMTQgOC4xNCAwIDAwLTIuNzguNTUgNi4xMyA2LjEzIDAgMDEtMi4xMy40NSA2LjI0IDYuMjQgMCAwMS0yLjE0LS40NUE4IDggMCAwMDE2IDI4YTkgOSAwIDAwLTMuMDguNiA1Ljc0IDUuNzQgMCAwMS0xLjgzLjQgNi4zNiA2LjM2IDAgMDEtMi0uNDNBOC43MiA4LjcyIDAgMDA2LjE4IDI4YTcuMDggNy4wOCAwIDAwLTIuOS44MiA5LjY1IDkuNjUgMCAwMS0xLjI4LjUyIDYuMDggNi4wOCAwIDAxLjUyLTIuMjFjLjQwMy0xIC42NS0yLjA1NS43My0zLjEzYTguNTUgOC41NSAwIDAwLS41NC0yLjgxQTYuNDcgNi40NyAwIDAxMi4yNyAxOWE2LjQ3IDYuNDcgMCAwMS40NC0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTEwLjQ4IDEwLjQ4IDAgMDAtLjcyLTMuMTMgOSA5IDAgMDEtLjU5LTIuMTZIMmMuNDQ3LjEuODguMjU1IDEuMjkuNDZhNy4wOCA3LjA4IDAgMDAyLjkuODJBOC4xNCA4LjE0IDAgMDA5IDkuNDQgNi4xMyA2LjEzIDAgMDExMS4wOSA5YTYuMTMgNi4xMyAwIDAxMi4xMy40NUE4LjE0IDguMTQgMCAwMDE2IDEwYTguMTQgOC4xNCAwIDAwMi43OC0uNTVBNi4xMyA2LjEzIDAgMDEyMC45MSA5YTYuMTMgNi4xMyAwIDAxMi4wOS40NCA4LjE0IDguMTQgMCAwMDIuNzguNTUgNy4wOCA3LjA4IDAgMDAyLjktLjgyQTkuNjUgOS42NSAwIDAxMzAgOC42NmE2LjA4IDYuMDggMCAwMS0uNTIgMi4yMWMtLjQwMyAxLS42NSAyLjA1NS0uNzMgMy4xMy4wMi45Ni4yMDMgMS45MS41NCAyLjgxYTYuNDcgNi40NyAwIDAxLjQ0IDIuMTkgNi40NyA2LjQ3IDAgMDEtLjQ0IDIuMTkgOC41NSA4LjU1IDAgMDAtLjU0IDIuODFjLjA3OCAxLjA3NC4zMiAyLjEzLjcyIDMuMTNhOSA5IDAgMDEuNTkgMi4xNnYtLjAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYW52YXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENhc2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjUgMjRhNS41IDUuNSAwIDEwMC0xMSA1LjUgNS41IDAgMDAwIDExem0wIDJhNy41IDcuNSAwIDEwMC0xNSA3LjUgNy41IDAgMDAwIDE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMjkzIDI3LjcwN2wtNC00IDEuNDE0LTEuNDE0IDQgNC0xLjQxNCAxLjQxNHpNNiA0SDJ2MjdoMjV2LTNoLTJ2MUg0VjZoMlY0em0xOSA2aDJWNGgtNHYyaDJ2NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNi4zODEgMy4wMjRsLjUzOCAxLjE1OGgyLjI3NGwuNjM2IDIuNTQ1SDkuNjhsLjYzNy0yLjU0NWgyLjU1OGwuNTM4LTEuMTU4Yy4yOTItLjYzLjk1NS0xLjAyNCAxLjQ4NC0xLjAyNC41MyAwIDEuMTkzLjM5NCAxLjQ4NSAxLjAyNHptNi4wMSA1LjcwM2wtMS42MzYtNi41NDVoLTIuNTZDMTcuNi44OTggMTYuMjYyIDAgMTQuODk3IDBjLTEuMzY0IDAtMi43MDMuODk4LTMuMjk5IDIuMTgySDguNzU1TDcuMTE4IDguNzI3aDE1LjI3M3pNNyAxNWg2di0ySDd2MnptNiA1SDd2LTJoNnYyem0tNiA1aDZ2LTJIN3YyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYXNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjc2IDI5bC41OTQgMkgwbDcuNjIxLTE0LjI5LjgxMSAyLjczTDMuMzMzIDI5aDcuOTQzek0yOC45MiAzMWwtNC45ODctMTYuNTk4QTE2IDE2IDAgMDA4LjY4OCAzbDEuOCA2SDguNEw2IDFoMi42MDdhMTggMTggMCAwMTE3LjI0MSAxMi44MjhMMzEgMzFoLTIuMDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEyLjAzNyAxNC4wMkwxNi40OTIgMjloNi44MjdsLTIuMzMzLTcuODQ5YTEwIDEwIDAgMDAtOC45NDktNy4xM3pNOS4zNSAxMmgyLjA1YTEyIDEyIDAgMDExMS41MDMgOC41ODFMMjYgMzFIMTVMOS4zNSAxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MTVhMyAzIDAgMDEtMyAzek0zIDEzYTEgMSAwIDAwLTEgMXYxNWExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYxNGExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkgMTcuNzFsMy4zIDMuMjktMy4zIDMuMjkgMS40MiAxLjQyIDQuNy00LjcxLTQuNy00Ljcxek0xNSAyNGg5djJoLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwdjE2aDguN2w1LjMtNlYwSDB6bTIgMmgxMHY3SDd2NUgyVjJ6bTguNDUgOUw5IDEyLjY0VjExaDEuNDV6TTE4IDE2djE2aDguN2w1LjMtNlYxNkgxOHptMiAyaDEwdjdoLTV2NWgtNVYxOHptOC40NSA5TDI3IDI4LjY0VjI3aDEuNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTUgMThIM2MwIDYuMDc1IDQuOTI1IDExIDExIDExaDJ2LTJoLTJhOSA5IDAgMDEtOS05ek0xOCAzaC0ydjJoMmE5IDkgMCAwMTkgOWgyYzAtNi4wNzUtNC45MjUtMTEtMTEtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEYXNoYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGFzaGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTIgMjBIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMzFIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOSAzMWgtOWEzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YxNGEzIDMgMCAwMS0zIDN6bS05LTE4YTEgMSAwIDAwLTEgMXYxNGExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xVjE0YTEgMSAwIDAwLTEtMWgtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGFzaGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEZXZ0b29scyA9IGZ1bmN0aW9uIEV1aUljb25BcHBEZXZ0b29scyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDI4aC0ydi04LjQ5bC42LS4yNkE5IDkgMCAwMDIxIDMuNTJWMTFIMTFWMy41MmE5IDkgMCAwMDEuNCAxNS43M2wuNi4yNlYyOGgtMnYtNy4yMUExMSAxMSAwIDAxMTEuNi45MkwxMyAuMzFWOWg2Vi4zMWwxLjQuNjFhMTEgMTEgMCAwMS42IDE5Ljg3VjI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMSAzMGgxMHYySDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEZXZ0b29sczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRGlzY292ZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGlzY292ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTguMzMgMjMuNjdsNC43OS0xMC41NSAxMC41NS00Ljc5LTQuNzkgMTAuNTUtMTAuNTUgNC43OXptNi4zLTlsLTIuMjggNSA1LTIuMjggMi4yOC01LTUgMi4yOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjMgMCAwIDcuMTYzIDAgMTZzNy4xNjMgMTYgMTYgMTYgMTYtNy4xNjMgMTYtMTZBMTYgMTYgMCAwMDE2IDB6bTEgMjkuOTVWMjhoLTJ2MS45NUExNCAxNCAwIDAxMi4wNSAxN0g0di0ySDIuMDVBMTQgMTQgMCAwMTE1IDIuMDVWNGgyVjIuMDVBMTQgMTQgMCAwMTI5Ljk1IDE1SDI4djJoMS45NUExNCAxNCAwIDAxMTcgMjkuOTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERpc2NvdmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBFbXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwRW1zKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zIDIyaDN2MkgxVjFoMjN2NWgtMlYzSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4yMjggMjljMS40OTItMS42NzggMS4zNTMtMi44NTkuMDA5LTUuNjU0LS4wNDktLjEtLjA0OS0uMS0uMDk3LS4yMDMtMS4zNjktMi44NTUtMS42MjYtNC40OTEtLjMyNS02LjU4MiAyLjc5Ni00LjQ5OCA5LjUxNC0yLjY0MiAxNC4xODUgMi4zMTdWMTBIMTB2MTloNS4yMjh6bTIuNDcgMEgyOXYtNi45ODNjLTMuODgtNS40MDYtMTAuMzc2LTcuNzk1LTEyLjQ4Ny00LjQtLjgzIDEuMzM2LS42NjkgMi4zNy40MyA0LjY2MmwuMDk3LjJjMS4zNTIgMi44MTQgMS43MzEgNC42My42NTkgNi41MjF6TTMxIDh2MjNIOFY4aDIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBFbXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZpbGViZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZpbGViZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04IDE4aDE2djJIOHpNOCAxM2g5djJIOHpNOCAyM2gxNnYySDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40MSAwSDVhMyAzIDAgMDAtMyAzdjI2YTMgMyAwIDAwMyAzaDIyYTMgMyAwIDAwMy0zVjguNTlMMjEuNDEgMHpNMjIgMy40MUwyNi41OSA4SDIyVjMuNDF6TTI3IDMwSDVhMSAxIDAgMDEtMS0xVjNhMSAxIDAgMDExLTFoMTV2OGg4djE5YTEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmlsZWJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZsZWV0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZsZWV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45OTYgMTguNjM2TDAgMjAuNDM0djYuMTMybDYgMy42IDUtMyA1IDMgNS0zIDUgMyA2LTMuNnYtNi4xMzJsLTUtM3YtNWwtNS0zdi01bC02LTMuNi02IDMuNnYyLjgzMmwyIC4wMzNWNS41NjZsNC0yLjQgNCAyLjR2My44NjhsLTEuOTk2IDEuMTk3IDEgMS43MzNMMjEgMTEuMTY2bDQgMi40djMuODY4bC00IDIuNC0yLjI1Ny0xLjM1NC0uOTcxIDEuNzVMMjAgMjEuNTY1djMuODY4bC00IDIuNC00LTIuNHYtMS43bC0yLS4wMzN2MS43MzNsLTQgMi40LTQtMi40di0zLjg2OGwxLjk5Ni0xLjE5Ny0xLTEuNzMzek0yMiAyNS40MzR2LTMuODY4bDQtMi40IDQgMi40djMuODY4bC00IDIuNC00LTIuNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTEgMjIuMTY2bC02LTMuNnYtNi4xMzJsNi0zLjYgNiAzLjZ2Ni4xMzJsLTYgMy42em00LTQuNzMydi0zLjg2OGwtNC0yLjQtNCAyLjR2My44NjhsNCAyLjQgNC0yLjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEZsZWV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHaXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwR2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOS4wMTQgMjMuODlsMi4yOTYgMS4xNDVMMTYgMzIuMTAxLjUzIDI0Ljk2MWwyLjQ5LTEuMDU2IDIuNDUzIDEuMTMyLS4wMDMuMDAyTDE2IDI5Ljg5OWwxMC42OS00LjkzNC0uMDAzLS4wMDEgMi4zMjctMS4wNzR6bS00Ljk3Mi03LjQ4Mmw3LjI2OCAzLjYyN0wxNiAyNy4xMDEuNTMgMTkuOTYxbDcuNjY4LTMuMjUyYy4zOTIuNDg2LjgzOCAxLjAyIDEuMzQgMS42MDRMNS40NyAyMC4wMzkgMTYgMjQuODk5bDEwLjY5LTQuOTM0LTMuOTU0LTEuOTczYy40OTMtLjU4LjkyOC0xLjEwNyAxLjMwNi0xLjU4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDlhMiAyIDAgMTAtNCAwIDIgMiAwIDAwNCAwem0yIDBhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMy4yNjggMTIuNjgxbC0uNzMyLjc4Ny0uNzMyLS43ODdjLTMuNTU3LTMuODI0LTUuODE3LTYuNDYyLTYuODEtNy45NkE4Ljc0NiA4Ljc0NiAwIDAxNyA4Ljg3NUM3IDMuOTcgMTEuMDMzIDAgMTYgMHM5IDMuOTcgOSA4Ljg3NWE4Ljc0NiA4Ljc0NiAwIDAxLTEuNDU5IDQuODQ2Yy0uOTkyIDEuNDk4LTMuMjUyIDQuMTM2LTYuODA5IDcuOTZ6bTUuMTQyLTkuMDY0QTYuNzQ3IDYuNzQ3IDAgMDAyMyA4Ljg3NUMyMyA1LjA4MSAxOS44NyAyIDE2IDJTOSA1LjA4MSA5IDguODc1YzAgMS4zNDkuMzk0IDIuNjM2IDEuMTI2IDMuNzQyLjg0NiAxLjI3NyAyLjgxMiAzLjU5MyA1Ljg3NCA2LjkxMiAzLjA2Mi0zLjMyIDUuMDI4LTUuNjM1IDUuODc0LTYuOTEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdyYXBoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyYXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNCAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0tOC4yLTUuNjJBNCA0IDAgMTExOCAxLjA2YTQgNCAwIDAxLTIuMiA3LjMyem0wLTZhMiAyIDAgMTAuMDEgMGgtLjAxem0uMDEgMjkuMjRhNCA0IDAgMTEtLjA4My04IDQgNCAwIDAxLjA4MyA4em0wLTZhMiAyIDAgMTAuMzkgMCAyIDIgMCAwMC0uNCAwaC4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDE3di0yaC02LjE0YTQgNCAwIDAwLS44Ni0xLjY0bDIuMzEtMy40NC0xLjY4LTEuMTItMi4zMSAzLjQ0QTQgNCAwIDAwOCAxMmE0IDQgMCAxMDAgOCA0IDQgMCAwMDEuMzItLjI0bDIuMzEgMy40NCAxLjY2LTEuMTJMMTEgMTguNjRhNCA0IDAgMDAuODYtMS42NEgxOHpNNiAxNmEyIDIgMCAxMTQgMCAyIDIgMCAwMS00IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyYXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHcm9rID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjcyNyAyLjkxVi45N2MtMS4zNTcgMC00LjE4IDAtNS44MTggMS45NC0uOTcgMS4xODItMS4zMjggMi45MDgtLjk3IDQuOTgzLjU2MyAzLjMwNy45NyA2LjMzMi4zMDEgNy4xNTctLjMuMzEtLjk3LjQ2NS0yLjI0LjQ2NXYxLjk0YzEuMjcgMCAxLjk0LjE1NSAyLjI1LjQ5NC42OTguODI0LjI2MiAzLjg3OS0uMyA3LjE1Ni0uMzUgMi4xMjQtLjAxIDMuODAyLjk2IDQuOTU2QzUuNTI3IDMyIDguMzUgMzIgOS43MjYgMzJ2LTEuOTRjLTEuMTQ0IDAtMy4yODcgMC00LjMxNS0xLjIyMWE0LjExMiA0LjExMiAwIDAxLS41MzMtMy40MTRjLjg0My01LjA0Mi45Ny03LjM3LS4xMzYtOC43MjctLjA2OC0uMDc3LS4xNDUtLjEzNi0uMjEzLS4yMDMtLjA2OC0uMDY4LjE0NS0uMTI3LjIxMy0uMjA0IDEuMTQ0LTEuMzY3Ljk3LTMuNjk1LjEzNi04LjcyN2E0LjExMiA0LjExMiAwIDAxLjU0My0zLjQxNEM2LjQ0IDIuOTEgOC41ODMgMi45MSA5LjcyNyAyLjkxek0zMi4wMyAxNy40NTR2LTEuOTRjLTEuMjcgMC0xLjk0LS4xNTUtMi4yNS0uNDk0LS42OTgtLjgyNS0uMjYxLTMuODguMzAxLTcuMTU3LjM1LTIuMTIzIDAtMy44MDEtLjk3LTQuOTg0QzI3LjQ5My45NCAyNC42NzIuOTQgMjMuMjk0Ljk0djEuOTdjMS4xNDUgMCAzLjI4OCAwIDQuMzE1IDEuMjJhNC4xMTIgNC4xMTIgMCAwMS41NDQgMy40MTRjLS44NDQgNS4wNDMtLjk3IDcuMzcuMTM1IDguNzI4LjA2OC4wNzcuMTQ2LjEzNS4yMTQuMjAzLjA2Ny4wNjgtLjE0Ni4xMjYtLjIxNC4yMDQtMS4xNDQgMS4zNjctLjk3IDMuNjk0LS4xMzUgOC43MjcuMzI5IDEuMTYyLjEzIDIuNDEtLjU0NCAzLjQxMy0xLjAxOCAxLjI0Mi0zLjE2IDEuMjQyLTQuMzA1IDEuMjQyVjMyYzEuMzU4IDAgNC4xOCAwIDUuODE4LTEuOTQuOTctMS4xODIgMS4zMjktMi45MDguOTctNC45ODQtLjU2My0zLjMwNi0uOTctNi4zMzItLjMtNy4xNTYuMy0uMzEuOTY5LS40NjUgMi4yNC0uNDY1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi4yMTIgMTUuNTE1aC0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzItNi43MlY2Ljc4OGgtMS45NHYyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzIgNi43Mkg2LjgxOHYxLjk0aDIuMDA3YTcuNzU4IDcuNzU4IDAgMDA2LjcyIDYuNzJ2Mi4wMDdoMS45NHYtMi4wMDdhNy43NTggNy43NTggMCAwMDYuNzItNi43MmgyLjAwN3YtMS45NHptLTguNzI3IDYuN3YtMS44NTFoLTEuOTR2MS44NTJhNS44MTggNS44MTggMCAwMS00Ljc2LTQuNzYxaDEuODUxdi0xLjk0aC0xLjg1MmE1LjgxOCA1LjgxOCAwIDAxNC43NjEtNC43NjF2MS44NTJoMS45NHYtMS44NTJhNS44MTggNS44MTggMCAwMTQuNzYxIDQuNzYxaC0xLjg1MnYxLjk0aDEuODUyYTUuODE4IDUuODE4IDAgMDEtNC43NjEgNC43NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JvazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSGVhcnRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEhlYXJ0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNC4xNCAxNS4zOWE4LjA1OCA4LjA1OCAwIDAxLTIuMi00LjA0M0E2Ljc4OCA2Ljc4OCAwIDAxNC4xOTggNS40N2E2LjczIDYuNzMgMCAwMTguNzI3LS4yMTNsMS4yNi0xLjQ2NGE4LjY1IDguNjUgMCAwMC0xMS4yNzcuMjMyQTguNzI3IDguNzI3IDAgMDAuMDY4IDExLjZhMTAuMTcyIDEwLjE3MiAwIDAwMi43OTMgNS4yNzVsMS4yOC0xLjQ4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUxNSAzMS4yNzRMNC41NDggMTguNDU0IDE1Ljg1NSA0Ljc2M2E4LjY3IDguNjcgMCAwMTEyLjI2Ni0uNzQ2IDguNzI3IDguNzI3IDAgMDEyLjkxIDcuMjA1Yy0uMjQzIDIuNjk1LTIuMDM3IDQuNzMyLTMuNDgyIDYuMzdMMTUuNTE1IDMxLjI3NXptLTguNDI3LTEyLjgybDguNDI3IDkuODYyIDEwLjU1LTExLjk5NWMxLjMyLTEuNTAzIDIuODIyLTMuMjEgMy4wMDctNS4yNjVhNi43ODggNi43ODggMCAwMC0yLjI0LTUuNTg2IDYuNzMgNi43MyAwIDAwLTkuNTA0LjU2M0w3LjA4OCAxOC40NTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEhlYXJ0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAzMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNMjMgOFY2aC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDItMS40Mi0xLjQ5IDEuNDlBNSA1IDAgMDAxNyAyLjFWMGgtMnYyLjFhNSA1IDAgMDAtMS43NS43M2wtMS40OS0xLjQ5LTEuNDIgMS40MiAxLjQ5IDEuNDlBNSA1IDAgMDAxMS4xIDZIOXYyaDIuMWE1IDUgMCAwMC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwMDEuNzYuNzRWMTRoMnYtMi4xYTUgNSAwIDAwMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ4LTEuNUE1IDUgMCAwMDIwLjkgOEgyM3ptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhMSAxIDAgMDEtMS0xIDEuMzkgMS4zOSAwIDAxMC0uMi42NS42NSAwIDAxLjA2LS4xOC43NC43NCAwIDAxLjA5LS4xOCAxLjYxIDEuNjEgMCAwMS4xMi0uMTUuOTMuOTMgMCAwMS4zMy0uMjEgMSAxIDAgMDExLjA5LjIxbC4xMi4xNWEuNzguNzggMCAwMS4wOS4xOC42Mi42MiAwIDAxLjEuMTggMS4yNyAxLjI3IDAgMDEwIC4yIDEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFBhdHRlcm4gPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTRoLThhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoOGEzIDMgMCAwMTMgM3Y4YTMgMyAwIDAxLTMgM3pNMTIgMmExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xaC04ek0xNyAxOHYtMmgtMnYySDN2Nmgydi00aDEwdjRoMnYtNGgxMHY0aDJ2LTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQgMzJhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMTIgNGEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6TTEzIDRoNnYyaC02ek0xMyA4aDZ2MmgtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFJvbGx1cCA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFJvbGx1cChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDI2di0yaC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDEtMS40MS0xLjQ5IDEuNDlBNSA1IDAgMDAyNiAyMC4xVjE4aC0ydjIuMWE1IDUgMCAwMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MSAxLjQxIDEuNDkgMS40OUE1IDUgMCAwMDIwLjEgMjRIMTh2MmgyLjFhNSA1IDAgMDAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMDAxLjc2Ljc0VjMyaDJ2LTIuMWE1IDUgMCAwMDEuNzUtLjczbDEuNDkgMS40OSAxLjQxLTEuNDEtMS40OS0xLjQ5QTUgNSAwIDAwMjkuOSAyNkgzMnptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1LjcxIDI0LjI5YTEgMSAwIDAwLTEuMDktLjIxIDEuMTUgMS4xNSAwIDAwLS4zMy4yMS45My45MyAwIDAwLS4yMS4zMyAxIDEgMCAwMDEuMyAxLjMgMS4xNSAxLjE1IDAgMDAuMzMtLjIxIDEgMSAwIDAwLjIxLTEuMDkuOTQuOTQgMCAwMC0uMjEtLjMzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk01IDZoMTZ2Mkg1ek01IDEyaDE2djJINXpNNSAxOGgxMHYySDV6TTUgMjRoOHYySDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDIwYTMgMyAwIDAxMyAzdjEzaC0yVjNhMSAxIDAgMDAtMS0xSDNhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDEzdjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4Um9sbHVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBMZW5zID0gZnVuY3Rpb24gRXVpSWNvbkFwcExlbnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzLjc5MyAxNC4yOTNsMS40MTQgMS40MTQtNi40MDggNi40MDktMy43NS0zLjI1LTQuMzQyIDQuMzQxLTEuNDE0LTEuNDE0IDUuNjU4LTUuNjU5IDMuNzUgMy4yNSA1LjA5Mi01LjA5MXpNMTIgMTF2NWwtMiAydi03aDJ6bTEwLTZ2OGwtMiAyVjVoMnptLTUgM3Y3bC0yLTJWOGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMGM4LjI4NCAwIDE1IDYuNzE2IDE1IDE1IDAgOC4yODQtNi43MTYgMTUtMTUgMTUtMy43ODIgMC03LjIzOC0xLjQtOS44NzYtMy43MWwtNS40MTcgNS40MTctMS40MTQtMS40MTQgNS40MTctNS40MTdBMTQuOTQzIDE0Ljk0MyAwIDAxMiAxNWMwLTEuMDUuMTA4LTIuMDc0LjMxMy0zLjA2MmwxLjkwNi42NzJDNC4wNzUgMTMuMzg1IDQgMTQuMTg0IDQgMTVjMCA3LjE4IDUuODIgMTMgMTMgMTNzMTMtNS44MiAxMy0xM1MyNC4xOCAyIDE3IDJjLTEuMDAyIDAtMS45NzguMTEzLTIuOTE1LjMyOGwtLjc1LTEuODc3QTE1LjAzMSAxNS4wMzEgMCAwMTE3IDB6TTkuNjIxIDEuOTM3bC43NSAxLjg3N2ExMy4wNjIgMTMuMDYyIDAgMDAtNC44MiA1LjAyNGwtMS45MDctLjY3M2ExNS4wNjggMTUuMDY4IDAgMDE1Ljk3Ny02LjIyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTGVuczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTG9ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMb2dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA4YzMuOTgzIDAgNy43MzIgMS4wMTMgMTEuMDAxIDIuNzk3djIuMzEyQTIwLjg4NyAyMC44ODcgMCAwMDIgMTAuMDIzdjExLjAyNWM0Ljg1LjQ2MiA5LjI3IDQuMTgzIDkuOTU1IDguNjkxbC4wMzUuMjYxSDEydjJoLTEuOTM4bC0uMDE4LTEuMjM2Yy0uMTE2LTQuMDE1LTQuMzM2LTcuNjMxLTguNzkzLTcuNzZMMCAyMi45ODZWOGgxem0xMy04aDFjOS4yOCAwIDE2LjgyNSA3LjQzNyAxNi45OTcgMTYuNjc3TDMyIDE3djE1aC0yVjE3YzAtNy44NC02LjAxNC0xNC4yNzQtMTMuNjgtMTQuOTQzTDE2IDIuMDMzdjcuNjgxbC0yLTEuMTQzVjBoMS0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi45OTcgMzAuNjM2TDI3LjAwOSAzMkgxNFYxMS4zMDVsMS40ODMuODJjNi45OTQgMy44NjEgMTEuMzgyIDEwLjczNSAxMS41MTQgMTguNTF6bS0yLjA0OC0xLjA0QzI0LjUwNSAyMy41NTYgMjEuMjA1IDE4LjIgMTYgMTQuNzcxVjMwaDguOTc0bC0uMDI1LS40MDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExvZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMzJoLTh2LTQuMDZhMSAxIDAgMDAtMS42MS0uNjdsLTIuODggMi44Ny01LjY1LTUuNjUgMi44Ny0yLjg3YS45Mi45MiAwIDAwLjItMSAuOTMuOTMgMCAwMC0uODYtLjZIMFYxMmg0LjA2YS45Mi45MiAwIDAwLjg1LS41OC45NC45NCAwIDAwLS4xOS0xTDEuODYgNy41MWw1LjY1LTUuNjUgMi44NyAyLjg3QTEgMSAwIDAwMTIgNC4wNlYwaDh2NC4wNmExIDEgMCAwMDEuNjEuNjdsMi44Ny0yLjg3IDUuNjYgNS42Ni0yLjg3IDIuODdhLjkyLjkyIDAgMDAtLjIgMSAuOTMuOTMgMCAwMC44Ni42SDMydjhoLTQuMDZhLjkyLjkyIDAgMDAtLjg1LjU4Ljk0Ljk0IDAgMDAuMTkgMWwyLjg3IDIuODctNS42NiA1LjY2LTIuODctMi44N2ExIDEgMCAwMC0xLjYxLjY3TDIwIDMyem0tNi0yaDR2LTIuMDZhMyAzIDAgMDE1LTIuMDhsMS40NiAxLjQ2IDIuODMtMi44M0wyNS44NiAyM2EzIDMgMCAwMTIuMDgtNUgzMHYtNGgtMi4wNmEzIDMgMCAwMS0yLjA4LTVsMS40Ni0xLjQ2LTIuODMtMi44NUwyMyA2LjE0YTMgMyAwIDAxLTUtMi4wOFYyaC00djIuMDZhMyAzIDAgMDEtNSAyLjA4TDcuNTEgNC42OSA0LjY5IDcuNTEgNi4xNCA5YTMgMyAwIDAxLTIuMDggNUgydjRoMi4wNmEzIDMgMCAwMTIuMDggNWwtMS40NSAxLjQ5IDIuODMgMi44M0w5IDI1Ljg2YTMgMyAwIDAxNSAyLjA4VjMwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY2JlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOCAxNmgtMmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZINEM0IDkuMzczIDkuMzczIDQgMTYgNHMxMiA1LjM3MyAxMiAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjcxIDExLjcxTDIwLjMgMTAuMyAxOCAxMi41N2E0IDQgMCAwMC0yLS41NyA0IDQgMCAxMDQgNCA0IDQgMCAwMC0uNTctMmwyLjI4LTIuMjl6TTE2IDE4YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMCAxOS4wOTJ2MTIuODhIMnYtNS4zODZsNi43NDctNi43NDcuNzA4LjcwOGMuMjM2LjIzNi40OC40NjMuNzMzLjY4TDQgMjcuNDE0djIuNTU4aDI0di04LjkxYy4xODYtLjE2Ni4zNjktLjMzOS41NDYtLjUxNkwzMCAxOS4wOTJ6bS0yMC44NS0zLjE5QTEwLjk1NSAxMC45NTUgMCAwMTggMTFDOCA0LjkyNSAxMi45MjUgMCAxOSAwczExIDQuOTI1IDExIDExYzAgMS43Ni0uNDE0IDMuNDI1LTEuMTUgNC45bC0xLjUxLTEuNTFBOC45NzMgOC45NzMgMCAwMDI4IDExYTkgOSAwIDEwLTE3LjM0IDMuMzkxbC0xLjUxIDEuNTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE5IDIwYTguOTYgOC45NiAwIDAwNS42MTgtMS45NjhsLTQuMjAyLTQuMjA0YTIgMiAwIDAwLTIuODI4IDBsLTQuMjA1IDQuMjA1QTguOTYgOC45NiAwIDAwMTkgMjB6bS0yLjgyNi03LjU4NmE0IDQgMCAwMTUuNjU2IDBsNS42NTYgNS42NTctLjcwNy43MDdBMTAuOTY3IDEwLjk2NyAwIDAxMTkgMjJhMTAuOTY3IDEwLjk2NyAwIDAxLTcuNzc4LTMuMjIxbC0uNzA3LS43MDcgNS42NTktNS42NTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1sID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMCAxOHYuNTZhMSAxIDAgMDEtLjY4Ljk1TDMgMjEuNjFWMTBhMSAxIDAgMDEuNC0uOGwzLjItMi40LTEuMi0xLjYtMy4yIDIuNEEzIDMgMCAwMDEgMTB2MTJhMyAzIDAgMDAxLjIgMi40bDMuMiAyLjQgMS4yLTEuNi0yLjQ3LTEuODUgNS44Mi0xLjk1QTMgMyAwIDAwMTIgMTguNTZWMThoLTJ6TTI5LjggNy42bC0zLjItMi40LTEuMiAxLjYgMy4yIDIuNGExIDEgMCAwMS40Ljh2MTEuNjFsLTYuMzItMi4xMWExIDEgMCAwMS0uNjgtLjk1VjE4aC0ydi41NmEzIDMgMCAwMDIuMDUgMi44NWw1LjgyIDEuOTQtMi40NyAxLjg1IDEuMiAxLjYgMy4yLTIuNEEzIDMgMCAwMDMxIDIyVjEwYTMgMyAwIDAwLTEuMi0yLjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA2QTMgMyAwIDAxOC44OC44OGEzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAyem0wIDMwYTMgMyAwIDAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDMyem0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMTEgMjh6bTAtMTJhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgMTZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAxMnptMTAtNkEzIDMgMCAwMTE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDJ6bTAgMzBhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgMzJ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAyMSAyOHptMC0xMmEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSAxNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTW9uaXRvcmluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBNb25pdG9yaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS44MSAxNS4xOUE4Ljk0IDguOTQgMCAwMTE1LjYyIDMuODZsLjM4LjQyLjM4LS40MmE4Ljk0IDguOTQgMCAwMTE0LjI2IDEwLjY4bC0xLjctMS4wN2E2Ljk0IDYuOTQgMCAwMC0xMS4wNy04LjI4TDE2IDcuMjlsLTEuODctMi4xQTYuOTQgNi45NCAwIDAwMy40MSAxNGwtMS42IDEuMTl6TTE2IDMxLjE4bC03Ljc0LTguNTEgMS40OC0xLjM0TDE2IDI4LjIxbDYuMjYtNi44OCAxLjQ4IDEuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2LjE2IDIzLjI5bC00LjEtNy4xN0wxMC42MiAxOUgwdi0yaDkuMzhsMi41Ni01LjEyIDMuOSA2LjgzIDQuMTMtMTAuMzJMMjMuNjYgMTdIMzJ2MmgtOS42NmwtMi4zMS01LjM5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNb25pdG9yaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBOb3RlYm9vayA9IGZ1bmN0aW9uIEV1aUljb25BcHBOb3RlYm9vayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDJoLTVWMGgtMnYyaC0zVjBoLTJ2MmgtM1YwSDh2MkgzdjI2aDIyVjJ6bS0yIDI0SDVWNGgzdjJoMlY0aDN2MmgyVjRoM3YyaDJWNGgzdjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgN3YyM0g4djJoMjFWN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOCAxMmgxMnYySDh6TTggMTdoMTJ2Mkg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBOb3RlYm9vazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGFja2V0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBQYWNrZXRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTQgNCAwIDEwLTQgNCA0IDQgMCAwMDItLjU3bDUuMjcgNS4yNyAxLjQxLTEuNDFMNy40MyA2QTQgNCAwIDAwOCA0ek00IDZhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTE2LjcxIDYuNzFMMjYgNy40M0E0IDQgMCAwMDI4IDhhNCA0IDAgMTAtNC00IDQgNCAwIDAwLjU3IDJsLTUuMjcgNS4yNyAxLjQxIDEuNDR6TTI4IDJhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6TTExLjI5IDE5LjI5TDYgMjQuNTdBNCA0IDAgMDA0IDI0YTQgNCAwIDEwNCA0IDQgNCAwIDAwLS41Ny0ybDUuMjctNS4yNy0xLjQxLTEuNDR6TTQgMzBhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTI0LTZhNCA0IDAgMDAtMiAuNTdsLTUuMjctNS4yNy0xLjQxIDEuNDFMMjQuNTcgMjZhNCA0IDAgMDAtLjU3IDIgNCA0IDAgMTA0LTR6bTAgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGFja2V0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGlwZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGlwZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxMmEzIDMgMCAwMC0zIDNoLTRhMyAzIDAgMDAtMy0zaC02YTMgMyAwIDAwLTMgM0g2YTMgMyAwIDAwLTMtM0gwdjE0aDNhMyAzIDAgMDAzLTNoNGEzIDMgMCAwMDMgM2g2YTMgMyAwIDAwMy0zaDRhMyAzIDAgMDAzIDNoM1YxMmgtM3pNMyAyNEgyVjE0aDFhMSAxIDAgMDExIDF2OGExIDEgMCAwMS0xIDF6bTE3LTN2MmExIDEgMCAwMS0xIDFoLTZhMSAxIDAgMDEtMS0xdi0ySDZ2LTRoNnYtMmExIDEgMCAwMTEtMWg2YTEgMSAwIDAxMSAxdjJoNnY0aC02em0xMCAzaC0xYTEgMSAwIDAxLTEtMXYtOGExIDEgMCAwMTEtMWgxdjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiA2SDEwdjJoNXYyaDJWOGg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQaXBlbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNSA0aDJ2OS4xN0EzLjAwOSAzLjAwOSAwIDAxMTguODMgMTVIMjZ2MmgtNy4xN0EzLjAwMSAzLjAwMSAwIDExMTUgMTMuMTdWNHptMSAxM2ExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFJlcG9ydGluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZXBvcnRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSA1aC0uMTd2MkgyNWExIDEgMCAwMTEgMXYyMGExIDEgMCAwMS0xIDFIN2ExIDEgMCAwMS0xLTFWOGExIDEgMCAwMTEtMWguMTdWNUg3YTMgMyAwIDAwLTMgM3YyMGEzIDMgMCAwMDMgM2gxOGEzIDMgMCAwMDMtM1Y4YTMgMyAwIDAwLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNoLTNWMGgtOHYzSDl2NmgxNFYzem0tMiA0SDExVjVoM1YyaDR2M2gzdjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEwIDEzaDEydjJIMTB6TTEwIDE4aDEydjJIMTB6TTEwIDIzaDEydjJIMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFJlcG9ydGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU2F2ZWRPYmplY3RzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjAuMzggNy4wMDFMMTcgOS42MTlWMGgtMnY5LjYxOWwtMy4zNy0yLjYxOC0xLjI1IDEuNTEzTDE2IDEyLjg3OGw1LjYzLTQuMzY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuMDYuMTY1bC0xLjExIDEuNjEgOS4yNSA1Ljk4M0wxNiAxNi4yOSAyLjggNy43NThsOS4yNS01Ljk4My0xLjEtMS42MUwwIDcuMjM0djEzLjY1M2wxNiAxMC4zMzcgMTYtMTAuMzM3VjcuMjM0TDIxLjA2LjE2NHpNMiA5LjU3bDEzIDguNDA3djEwLjI3OUwyIDE5Ljg0VjkuNTd6bTE1IDE4LjY3NlYxNy45NzhsMTMtOC40MDdWMTkuODVsLTEzIDguMzk3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTYXZlZE9iamVjdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMS42MyA4aDcuMzh2MmgtNy4zOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgOGgzLjE5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNyAxNmg3LjM4djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjgxIDE2SDE5djJoLTMuMTl6TTcgMTJoOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAwQzUuODIgMCAwIDUuODIgMCAxM3M1LjgyIDEzIDEzIDEzIDEzLTUuODIgMTMtMTNBMTMgMTMgMCAwMDEzIDB6bTAgMjRDNi45MjUgMjQgMiAxOS4wNzUgMiAxM1M2LjkyNSAyIDEzIDJzMTEgNC45MjUgMTEgMTEtNC45MjUgMTEtMTEgMTF6TTIyLjU4MSAyMy45OTNsMS40MTQtMS40MTQgNy43MDggNy43MDgtMS40MTQgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDMybC0uMzYtLjE0QTIxLjA3IDIxLjA3IDAgMDEwIDEyLjA3VjUuNDRMMTQgLjA2bDE0IDUuMzh2Ni42M2EyMS4wNyAyMS4wNyAwIDAxLTEzLjY0IDE5Ljc4TDE0IDMyek0yIDYuODJ2NS4yNWExOS4wOCAxOS4wOCAwIDAwMTIgMTcuNzcgMTkuMDggMTkuMDggMCAwMDEyLTE3Ljc3VjYuODJMMTQgMi4yIDIgNi44MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOSAxNy44M2gyVjIzSDl6TTExIDEwLjE4VjdIOXYzLjE4YTMgMyAwIDEwMiAwek0xMCAxNGExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnpNMTcgN2gydjUuMTdoLTJ6TTIxIDE3YTMgMyAwIDEwLTQgMi44MlYyM2gydi0zLjE4QTMgMyAwIDAwMjEgMTd6bS0zIDFhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDV2Ny45MjhjMCAxLjI5OS44MDggMi43OTUgMi44OCA0LjQ4IDEuODMgMS40ODkgNC41MjQgMy4wMiA4LjEyIDQuNTg0VjI2aDJ2NS45OTJsLTEuMzgtLjU2N2MtNC4zNzItMS43OTctNy43MjQtMy42MTMtMTAtNS40NjVDNC4zNTggMjQuMTIyIDMgMjIuMTE0IDMgMTkuOTI4VjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk05IDEwaDl2MTRsLTEuMjcyLS40NThjLTEuMzY3LS40OTQtMy4yMy0xLjMxNC00Ljc2OC0yLjM5QzEwLjQ4NCAyMC4xMTggOSAxOC42MzYgOSAxNi43NjFWMTB6bTEuODk1IDEuODc2djQuODg3YzAgLjg3Ny43NDQgMS44NjcgMi4xNTggMi44NTYuOTM3LjY1NiAyLjAzOCAxLjIxOSAzLjA1MiAxLjY1N3YtOS40aC01LjIxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMUg5djdoMlYyLjk2NmgxNlYxNi43M2MwIC41NTgtLjI0NSAxLjEyOC0uNzU2IDEuNzItLjUxNS41OTYtMS4yNTYgMS4xNTgtMi4xMiAxLjY2OC0xLjM4MS44MTgtMi45NjEgMS40MzQtNC4xMjQgMS44MTdWMjRjMS4yNi0uMzc4IDMuMzM0LTEuMTIgNS4xNTUtMi4xOTcuOTY1LS41NyAxLjkwNS0xLjI2MSAyLjYxMi0yLjA4LjcxMi0uODIyIDEuMjMzLTEuODI3IDEuMjMzLTIuOTkyVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDRoNnYySDR6TTIyIDRoNnYyaC02ek00IDIyaDZ2Mkg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxNGgxNFYwSDB2MTR6TTIgMmgxMHYxMEgyVjJ6bTE2LTJ2MTRoMTRWMEgxOHptMTIgMTJIMjBWMmgxMHYxMHpNMCAzMmgxNFYxOEgwdjE0em0yLTEyaDEwdjEwSDJWMjB6bTE2IDEyaDE0VjE4SDE4djE0em0yLTEyaDEwdjEwSDIwVjIwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAyMmg2djJoLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU3FsID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTggNmg5djJoLTl6TTUgNmg5djJINXpNNSAxMmg5djJINXpNMTggMTJoOXYyaC05ek01IDE4aDl2Mkg1ek0xOCAxOGg5djJoLTl6TTE4IDI0aDl2MmgtOXpNNSAyNGg5djJINXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MjZhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDI2YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2MjAuMzRMMTYgMzJsMTItNy42NFY0SDR6bTIyIDJ2NGgtNGEzIDMgMCAwMC0zIDN2NWgtNnYtNWEzIDMgMCAwMC0zLTNINlY2aDIwem0tNy44NyAxNEwxNiAyMi41MiAxMy44NyAyMGg0LjI2ek02IDEyaDRhMSAxIDAgMDExIDF2Ni43bDMuNjkgNC4zNy0yLjU4IDMuMDZMNiAyMy4yNFYxMnptNy44MSAxNi4yMmwyLjE5LTIuNiAyLjE5IDIuNkwxNiAyOS42MWwtMi4xOS0xLjM5em02LjA4LTEuMDlsLTIuNTgtMy4wNkwyMSAxOS43VjEzYTEgMSAwIDAxMS0xaDR2MTEuMjRsLTYuMTEgMy44OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAwaDI0djJINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuNDIgMTkuNjlhMTIgMTIgMCAwMS0yMy4xMS0xbDIuMjctLjQ1LTQuMzItNC40N0wwIDE5LjU1bDIuMzktLjQ3YTE0IDE0IDAgMDAyNyAxLjIzbC0xLjk3LS42MnptMi4yMy02Ljc3YTE0IDE0IDAgMDAtMjctMS4yM2wxLjkuNjJhMTIgMTIgMCAwMTIzLjExIDFsLTIuMjcuNDUgNC4zMiA0LjQ2TDMyIDEyLjQ1bC0yLjM1LjQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBVcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00LjIxNiAxMi4zNzdBMTAuOTQ4IDEwLjk0OCAwIDAwMi4xODEgMTdILjE1M2ExMi45NDEgMTIuOTQxIDAgMDEyLjY5My02LjExOGwxLjM3IDEuNDk1em0yLjk0OC0yLjcwM2wtMS4zNy0xLjQ5NUExMi45NCAxMi45NCAwIDAxMTMgNnYyYy0yLjE0NCAwLTQuMTQ0LjYxMy01LjgzNiAxLjY3NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2IDQuNDE0VjE5YzAgNy4xOC01LjgyIDEzLTEzIDEzQzYuNSAzMiAxLjExNSAyNy4yMy4xNTMgMjFIMi4xOGMuOTQgNS4xMiA1LjQyNyA5IDEwLjgxOSA5IDYuMDc1IDAgMTEtNC45MjUgMTEtMTFWNC40MTRsLTQuMjkzIDQuMjkzLTEuNDE0LTEuNDE0TDI1IC41ODZsNi43MDcgNi43MDctMS40MTQgMS40MTRMMjYgNC40MTR6bS03LjgzNiA5LjkwOWwxLjQ3MiAxLjM1NC03LjU3NyA4LjIzNS00LjgzNS00LjQ0MiAxLjM1My0xLjQ3MyAzLjM2NCAzLjA5IDYuMjIzLTYuNzY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVzZXJzUm9sZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXNlcnNSb2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjMwNyAzLjIxYTIuOTEgMi45MSAwIDEwLS4yMjMgMS45NCAxMS42MzYgMTEuNjM2IDAgMDE4LjIzMiA3LjA0OWwxLjc3NS0uNjk4YTEzLjU3NiAxMy41NzYgMCAwMC05Ljc4NC04LjI5MXptLTIuODIyIDEuNjM4YS45Ny45NyAwIDExMC0xLjkzOS45Ny45NyAwIDAxMCAxLjk0em0tNC4yNjcuODA1bC0uNzE3LTEuNzc0YTEzLjU3NiAxMy41NzYgMCAwMC04LjI5MSA5Ljc4NCAyLjkxIDIuOTEgMCAxMDEuOTQuMjIzIDExLjYzNiAxMS42MzYgMCAwMTcuMDY4LTguMjMzem0tOC4zNCAxMS44MDJhLjk3Ljk3IDAgMTEwLTEuOTQuOTcuOTcgMCAwMTAgMS45NHptMTIuNjA3IDguNzI3YTIuOTEgMi45MSAwIDAwLTIuNTk5IDEuNjIgMTEuNjM2IDExLjYzNiAwIDAxLTguMjMzLTcuMDVsLTEuNzc0LjcxN2ExMy41NzYgMTMuNTc2IDAgMDA5LjgxMyA4LjI5MSAyLjkxIDIuOTEgMCAxMDIuNzkzLTMuNTc4em0wIDMuODc5YS45Ny45NyAwIDExMC0xLjk0Ljk3Ljk3IDAgMDEwIDEuOTR6TTMyIDE2LjQ4NWEyLjkxIDIuOTEgMCAxMC00LjE5OSAyLjU5OSAxMS42MzYgMTEuNjM2IDAgMDEtNy4wNSA4LjIzMmwuNzE4IDEuNzc1YTEzLjU3NiAxMy41NzYgMCAwMDguMjkxLTkuODEzQTIuOTEgMi45MSAwIDAwMzIgMTYuNDg1em0tMi45MS45N2EuOTcuOTcgMCAxMTAtMS45NC45Ny45NyAwIDAxMCAxLjk0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOS4xOSAxNi4zNWEzLjg3OSAzLjg3OSAwIDEwLTUuNDIgMCA0Ljg0OCA0Ljg0OCAwIDAwLTIuMTM0IDQuMDE0djEuOTM5aDkuNjk3di0xLjk0YTQuODQ4IDQuODQ4IDAgMDAtMi4xNDMtNC4wMTR6bS00LjY0NS0yLjc3NGExLjk0IDEuOTQgMCAxMTMuODggMCAxLjk0IDEuOTQgMCAwMS0zLjg4IDB6bS0uOTcgNi43ODhhMi45MSAyLjkxIDAgMTE1LjgxOSAwaC01LjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXNlcnNSb2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVmlzdWFsaXplID0gZnVuY3Rpb24gRXVpSWNvbkFwcFZpc3VhbGl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMzIgMzJINGE0IDQgMCAwMS00LTRWMGgydjI4YTIgMiAwIDAwMiAyaDI4djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIwaDJ2N0g2ek0xNiAxMmgydjE1aC0yek0yNiAxN2gydjEwaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgNmEzIDMgMCAwMC0yLjA4Ljg0TDIwIDQuMzZBMi4yIDIuMiAwIDAwMjAgNGEzIDMgMCAwMC02IDBjLjAwMS4zNDEuMDYyLjY4LjE4IDFsLTUuNiA0LjQ2QTMgMyAwIDAwNyA5YTMgMyAwIDEwMyAzIDIuOTMgMi45MyAwIDAwLS4xOC0xbDUuNi00LjQ4QTMgMyAwIDAwMTcgN2EzIDMgMCAwMDIuMDgtLjg0bDUgMi40OEEyLjIgMi4yIDAgMDAyNCA5YTMgMyAwIDEwMy0zek03IDEzYTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMC04YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMCA1YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBWaXN1YWxpemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdhdGNoZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwV2F0Y2hlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzQgNy43M2wtMS41LTEuMzJhMTMgMTMgMCAwMDAgMTcuMTlsMS41LTEuMzJhMTEgMTEgMCAwMTAtMTQuNTR2LS4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTEgMy42Nkw1IDIuMzRjLTYuMzc3IDcuMjQtNi4zNzcgMTguMDkgMCAyNS4zM2wxLjUtMS4zMkMuNzkyIDE5Ljg2Ny43OTIgMTAuMTUzIDYuNSAzLjY3bC4wMS0uMDF6bTE3LjI1IDIuNzVsLTEuNSAxLjMyYTExIDExIDAgMDEwIDE0LjU0bDEuNSAxLjMyYTEzIDEzIDAgMDAwLTE3LjE5di4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDIuMzRsLTEuNSAxLjMyYzUuNzA4IDYuNDgzIDUuNzA4IDE2LjE5NyAwIDIyLjY4bDEuNSAxLjMzYzYuMzc3LTcuMjQgNi4zNzctMTguMDkgMC0yNS4zM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMTVhNSA1IDAgMTAtNiA0LjlWMzFoMlYxOS45YTUgNSAwIDAwNC00Ljl6bS01IDNhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFdhdGNoZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MSAxSDJ2MzBoNS44MTVjMS43MDUgMCAzLjM0My0uNzgzIDQuMzgtMi4wOTRsMy4xODItNC4wMjMuMDA2LjAwNiAyLjYwNy0zLjEzNy4wMS0uMDE0YTkuNDIgOS40MiAwIDAwMS45NTMtNC44MjYgOS4xMTIgOS4xMTIgMCAwMC0xLjg5MS02LjUyMmwtLjAxLS4wMTItMi42MDMtMy4xNTZMMTIuMTk3IDMuMUMxMS4xNiAxLjc4NiA5LjUyIDEgNy44MSAxem02LjExOCA3LjUyM2wtMy4zMS00LjE5NUM5Ljk2OCAzLjUxMiA4LjkxNyAzIDcuODEgM0g0djI2aDMuODE1YzEuMSAwIDIuMTUtLjUwOCAyLjgtMS4zMmwzLjMzLTQuMjEtMS43OTYtMS43Ny0uMDI3LS4wMzNjLTIuODQtMy4zMTctMi44My04LjE5NS4wMjgtMTEuMjg3bC4wMDQtLjAwNGE5OC44OTMgOTguODkzIDAgMDExLjc3NC0xLjg1M3ptNC4wNDMgOC4wOTljLS4xMiAxLjI3OS0uNjE2IDIuNTM3LTEuNDkgMy42NGwtMS4yODggMS42My0xLjU3OC0xLjU1NmMtMi4xOS0yLjU5LTIuMTE4LTYuMy4wMDEtOC41OTYuNi0uNjQgMS4xMTktMS4xODMgMS41NjEtMS42MzVsMS4yOTMgMS42Mzh2LjAwMmwuMDE0LjAxNmMuOTQyIDEuMTkyIDEuNDQ2IDIuNTY0IDEuNTEgMy45NDlhNy4wOSA3LjA5IDAgMDEtLjAyMy45MTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMy44MDEgM2MtLjM4MiAwLTEuMDUyLjIzMS0xLjkyNS44MTItLjYzNi40MjItMS4yMjguOTI4LTEuNjc3IDEuMzU3bDEuNzcxIDIuMjQ1LjAwNS4wMDcuMDI0LjAzLjAwOC4wMWM0LjAwMyA1LjA5OSAzLjk5IDEyLjA1Ny0uMDM1IDE3LjE0NWwtMS43OTMgMi4yNjdhOC4yMDYgOC4yMDYgMCAwMDEuNzY5IDEuNDk4Yy42OTguNDI3IDEuMzM3LjYyOSAxLjg1Mi42MjlIMjhWM2gtNC4xOTl6bS02LjE0OCAyMy44NDJsLjc2NSAxLjA1My4wMjMuMDI3Yy43MTcuODUxIDEuNTY2IDEuNjA3IDIuNDY0IDIuMTU2Ljg5LjU0NCAxLjg5LjkyMiAyLjg5NS45MjJIMzBWMWgtNi4xOTljLS45ODcgMC0yLjA2Ni41MDUtMy4wMzIgMS4xNDZhMTQuOTM0IDE0LjkzNCAwIDAwLTIuMzUyIDEuOTc0bC0uMjc2LjI4OC0uNTk1LjYyOCAyLjg1NSAzLjYxOS4wMDYuMDA2YzMuNDU5IDQuMzc1IDMuNDU3IDEwLjMyOS0uMDA0IDE0LjcwNGwtMi43NSAzLjQ3N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBzID0gZnVuY3Rpb24gRXVpSWNvbkFwcHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWMmgydjJIMnptNSAwVjJoMnYySDd6bTUgMFYyaDJ2MmgtMnpNMiA5VjdoMnYySDJ6bTUgMFY3aDJ2Mkg3em01IDBWN2gydjJoLTJ6TTIgMTR2LTJoMnYySDJ6bTUgMHYtMmgydjJIN3ptNSAwdi0yaDJ2MmgtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dFbmQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dFbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODU3IDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0VuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dTdGFydCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1N0YXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy4xMzUgMTQuMDQzYS43NS43NSAwIDAwLjAyNS0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93U3RhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93RG93biA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0Rvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDQuOTgyYS43NS43NSAwIDAxMS4wNi0uMDI1bDQuODEgNC41OTFhLjI1LjI1IDAgMDAuMzQ2IDBsNC44MS00LjU5YS43NS43NSAwIDAxMS4wMzUgMS4wODVsLTQuODEgNC41OWExLjc1IDEuNzUgMCAwMS0yLjQxNiAwbC00LjgxLTQuNTlhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0Rvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjAxOCAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI0LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwMDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43NjEuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljk4MiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dVcCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1VwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xLjk1NyAxMS4wMThjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNGw0LjgxLTQuNTlhLjI1LjI1IDAgMDEuMzQ2IDBsNC44MSA0LjU5YS43NS43NSAwIDAwMS4wMzUtMS4wODVsLTQuODEtNC41OWExLjc1IDEuNzUgMCAwMC0yLjQxNiAwbC00LjgxIDQuNTlhLjc1Ljc1IDAgMDAtLjAyNSAxLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1VwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Bc3RlcmlzayA9IGZ1bmN0aW9uIEV1aUljb25Bc3RlcmlzayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTI4IDguNDY4TDQgNy42MThsLjQ0Ni0xLjQyN0w3LjM3NSA3LjI1IDcuMjg3IDRoMS40ODRsLS4wOTcgMy4yOTYgMi44OC0xLjAzOUwxMiA3LjY5M2wtMi45NzcuODYgMS45MiAyLjU2TDkuNzQxIDEyIDcuOTM3IDkuMjhsLTEuNzQ1IDIuNjU0LTEuMjEzLS44NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXN0ZXJpc2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJlYWtlciA9IGZ1bmN0aW9uIEV1aUljb25CZWFrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI3NyAxMC4wODhjLjAyLjAxNC4wNC4wMy4wNTcuMDQ3LjU4Mi41NSAxLjEzNC44MTIgMS42NjYuODEyLjU4NiAwIDEuODQtLjI5MyAzLjcxMy0uODhMOSA2LjIxMlYySDd2NC4yMTJsLTEuNzIzIDMuODc2em0tLjQzOC45ODdMMy41MzkgMTRoOC45MjJsLTEuMzItMi45NjlDOS4wOTYgMTEuNjc3IDcuNzMzIDEyIDcgMTJjLS43NCAwLTEuNDYzLS4zMTUtMi4xNjEtLjkyNXpNNiAySDVWMWg2djFoLTF2NGwzLjM3NSA3LjU5NEExIDEgMCAwMTEyLjQ2MSAxNUgzLjU0YTEgMSAwIDAxLS45MTQtMS40MDZMNiA2VjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlYWtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQmVsbCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMzE2IDEyaDEwLjM2OGMtLjE4OC0uNzA0LS4yOC0xLjY5MS0uMzQ4LTMuMDM3LS4wNy0xLjM4Mi0uMTAzLTEuODg4LS4xOS0yLjYxMi0uMDI4LS4yMzYtLjA2LS40NjItLjA5Ni0uNjgtLjMxLTEuODkyLTEuNTA2LTIuOTIzLTMuNzA4LTMuMTMxYTEgMSAwIDEwLTEuNjg0IDBjLTIuMjAyLjIwOC0zLjM5NyAxLjI0LTMuNzA4IDMuMTNhMTYuMDEgMTYuMDEgMCAwMC0uMDk2LjY4Yy0uMDg3LjcyNS0uMTIgMS4yMy0uMTkgMi42MTMtLjA2OCAxLjM0Ni0uMTYgMi4zMzMtLjM0OCAzLjAzN3ptMTAuODQzIDFIMS44NGMtLjMwOC4zNTMtLjczNy41LTEuMzQxLjVhLjUuNSAwIDExMC0xYy43ODYgMCAxLjAyNC0uNzgzIDEuMTY2LTMuNTg3LjA3LTEuNDA3LjEwNS0xLjkyNi4xOTYtMi42ODEuMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQxIDEuNTQ2LTMuMzEzIDMuNTU2LTMuNzkyYTIgMiAwIDAxMy45NiAwYzIuMDEuNDc5IDMuMjIyIDEuNzUgMy41NTcgMy43OTJhMTcgMTcgMCAwMS4xMDIuNzI0Yy4wOS43NTUuMTI1IDEuMjc0LjE5NiAyLjY4MS4xNCAyLjgwNC4zNzkgMy41ODcgMS4xNjUgMy41ODdhLjUuNSAwIDExMCAxYy0uNjA0IDAtMS4wMzMtLjE0Ny0xLjM0MS0uNXpNNS41IDE0aDRhMiAyIDAgMTEtNCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CZWxsU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uQmVsbFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDE0bC0uMDA1LjE1YTIgMiAwIDAxLTMuOTcyLjE1M2wtLjAxOC0uMTU0TDUuNSAxNGg0em01LjM4LTEyLjgyNWEuNS41IDAgMDEuMDA4LjY0bC0uMDYzLjA2NS0xNCAxMmEuNS41IDAgMDEtLjcxMy0uNjk1bC4wNjMtLjA2NSAxNC0xMmEuNS41IDAgMDEuNzA1LjA1NXpNMTMuMDM2IDUuNTFsLjA1NS4zNTMuMDQ4LjM2OGMuMDY2LjU1NC4xMDMuOTguMTQ1IDEuNzI0bC4wOCAxLjQ5MWMuMTQ2IDIuMzcxLjQwMiAzLjA1MyAxLjEzNiAzLjA1M2EuNS41IDAgMTEwIDFjLS42MDMgMC0xLjAzMS0uMTQ2LTEuMzQtLjQ5OUg0LjE4NWwxLjE4Mi0xaDcuMzE3Yy0uMTcyLS42NDQtLjI2NC0xLjUyOC0uMzMtMi43MDhsLS4wOS0xLjYzOGMtLjAzMy0uNTE0LS4wNjYtLjg3LS4xMTgtMS4zMDRsLS4wMTEtLjA3Ny45MDEtLjc2M3pNNy41IDBhMiAyIDAgMDExLjk4IDEuNzE3Yy40NzYuMTEzLjkwNy4yNyAxLjI5Mi40NzJsLS44MzguNzFhNS43MjggNS43MjggMCAwMC0xLjU5MS0uMzYgMSAxIDAgMTAtMS42ODQgMEM0LjQ1NSAyLjc1IDMuMjYgMy43OCAyLjk1IDUuNjcxbC0uMDUuMzM0LS4wNDYuMzQ3Yy0uMDguNjc2LS4xMTUgMS4xNjEtLjE3NiAyLjM0N2wtLjAxNC4yNjUtLjAwNS4wOS0xLjA1OC44OTdjLjAxOC0uMjM0LjAzNS0uNDg4LjA1LS43NjNsLjA3Ny0xLjQyN2MuMDM4LS42MjYuMDczLTEuMDI1LjEzNC0xLjUyOC4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNCAxLjU0Ni0zLjMxMyAzLjU1NS0zLjc5MmwuMDA0LS4wMTlBMiAyIDAgMDE3LjUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVsbFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb2x0ID0gZnVuY3Rpb24gRXVpSWNvbkJvbHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA0IDEzLjI3NGEuNS41IDAgMTAuODkyLjQ1M2wzLjAxNC01LjkzMWEuNS41IDAgMDAtLjQ0NS0uNzI3SDUuMzE2TDguMDMgMS43MjdhLjUuNSAwIDEwLS44OTItLjQ1M0w0LjA1NSA3LjM0M2EuNS41IDAgMDAuNDQ2LjcyNmg1LjE4NUw3LjA0IDEzLjI3NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm9sdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQm94ZXNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNmg0djRIMFY2em0xIDF2MmgyVjdIMXptNS0xaDR2NEg2VjZ6bTEgMXYyaDJWN0g3em01LTFoNHY0aC00VjZ6bTEgM2gyVjdoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm94ZXNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb3hlc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDF2MmgyVjFIN3pNNiAwaDR2NEg2VjB6bTAgNmg0djRINlY2em0xIDF2MmgyVjdIN3ptLTEgNWg0djRINnYtNHptMSAxdjJoMnYtMkg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CcmFuY2ggPSBmdW5jdGlvbiBFdWlJY29uQnJhbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMC4wMzhhMy40OSAzLjQ5IDAgMDEyLjUtMS4wNWgyYTIuNSAyLjUgMCAwMDIuNDYyLTIuMDYxIDIgMiAwIDExMS4wMDguMDE3QTMuNSAzLjUgMCAwMTkuNSA5Ljk4N2gtMmEyLjUgMi41IDAgMDAtMi40NjYgMi4wODVBMiAyIDAgMTE0IDEyLjA2M1YzLjkzN2EyIDIgMCAxMTEgMHY2LjF6TTQuNSAzYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0wIDEyYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem04LTlhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJhbmNoVXNlciA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2hVc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgNy45ODdhMy40OSAzLjQ5IDAgMDAtMi41IDEuMDV2LTQuMWEyIDIgMCAxMC0xIDB2Ni4xMjZhMiAyIDAgMTAxLjAzNC4wMUEyLjUgMi41IDAgMDE2IDguOTg2aDFhMy41IDMuNSAwIDAwMy40Ny0zLjA0MyAyIDIgMCAxMC0xLjAwOS0uMDE3QTIuNSAyLjUgMCAwMTcgNy45ODdINnpNNCAzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptMCAxMGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bTctOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAxMC41YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwek05IDE1Yy4yODQtMS4yMjMgMS41MTktMi4xNDMgMy0yLjE0M3MyLjcxNi45MiAzIDIuMTQzSDl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaFVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJyb29tID0gZnVuY3Rpb24gRXVpSWNvbkJyb29tKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43MzIgMTMuMDk2bC0uMTk3LS4xOTcgMi44My0yLjgyOC43MDYuNzA3LTIuODI5IDIuODI4LjcwOC43MDggMi44MjgtMi44MjhhMSAxIDAgMDAwLTEuNDE0TDUuNjU4IDcuOTVhLjk5My45OTMgMCAwMC0uNzA4LS4yOTMuOTk0Ljk5NCAwIDAwLS43MDguMjkzbC0yLjgyOCAyLjgyOS43MDcuNzA3IDIuODI5LTIuODMuNzA3LjcwOC0yLjgyOSAyLjgyOS45MDQuOTAzem0xLjIxOC02LjQ0Yy41MTIgMCAxLjAyMy4xOTYgMS40MTQuNTg3bDIuMTIxIDIuMTJhMiAyIDAgMDEwIDIuODNMNC45NSAxNS43MjggMCAxMC43NzhsMy41MzUtMy41MzVhMS45OTMgMS45OTMgMCAwMTEuNDE1LS41ODZ6TTE0LjAyIDFsLjcwOC43MDctNi45NSA2Ljk1LS43MDctLjcwN0wxNC4wMjEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJvb207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJydXNoID0gZnVuY3Rpb24gRXVpSWNvbkJydXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAxMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3em0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZ6TTQgNS42NThWMS4wMDVoMS4yNjJ2NC42NTNINHptMi4yNjEgMFYxLjAwNWgxLjI0NHY0LjY1M0g2LjI2em0yLjI0NCAwVjEuMDA1aDEuMjM1djQuNjUzSDguNTA0em0yLjIzNCAwVjEuMDA1aDEuMjU0djQuNjUzaC0xLjI1NHpNMy4wMDggMEwzIDguMTdhMi41MDkgMi41MDkgMCAwMDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAwMi40OTgtMi41MTJMMTMgMEgzLjAwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJ1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJ1ZyA9IGZ1bmN0aW9uIEV1aUljb25CdWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42NTEgNS4xMjZsLjkyMi0uNDU1Ljg4NC0yLjM0M2EuNS41IDAgMDEuOTM5LjM0NEwxMi4zNzQgNS4zOWwtMS40NS43MTdBNS4zIDUuMyAwIDAxMTEgN2gxLjA0M2wyLjMgMi4xOThhLjUuNSAwIDAxLS42OTIuNzIzTDExLjY0MiA4aC0uNzM3Yy0uMDkuNDY2LS4yNC44OTktLjQ0MSAxLjI4M2wuODkyLjQ5IDEuMjc4IDMuNTU0YS41LjUgMCAwMS0uOTQuMzQybC0xLjE1LTMuMi0uNjU1LS4zNkM5LjM3MyAxMC42NjUgOC43MTYgMTEgOCAxMXMtMS4zNzQtLjMzNS0xLjg5LS44OTNsLS42NTguMzYxLTEuMTUgMy4yMDFhLjUuNSAwIDExLS45NC0uMzQybDEuMjc5LTMuNTU0Ljg5NS0uNDkxQTQuNyA0LjcgMCAwMTUuMDk1IDhoLS43NGwtMi4wMSAxLjkyYS41LjUgMCAwMS0uNjktLjcyMkwzLjk1MiA3SDVhNS4zIDUuMyAwIDAxLjA3NS0uODkyTDMuNjIzIDUuMzkgMi42IDIuNjcyYS41LjUgMCAxMS45MzktLjM0NGwuODg0IDIuMzQzLjkyNC40NTdjLjE3LS40MjguMzk3LS44MS42NjgtMS4xMjhoLjU3YTEuNSAxLjUgMCAxMTIuODMgMGguNTY4Yy4yNy4zMTguNDk3LjY5OS42NjcgMS4xMjZ6TTggNGEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0xLjc1MSAxLjU3MUEzLjMyNiAzLjMyNiAwIDAwOS40NzYgNUg2LjUyNGMtLjEwNy4xNzUtLjIuMzY3LS4yNzYuNTczLS4xMS4yOTUtLjE4Ni42MTgtLjIyMy45NTdhNC4zNTQgNC4zNTQgMCAwMC4wOSAxLjQ2NWMuMDcxLjI5NC4xNzIuNTY1LjI5NS44MDYuMTY4LjMyOC4zOC42MDEuNjE2LjgwMy4yOTUuMjUzLjYzMS4zOTYuOTc0LjM5Ni4zNDIgMCAuNjc4LS4xNDIuOTczLS4zOTQuMjM3LS4yMDMuNDQ4LS40NzYuNjE2LS44MDNhMy42MiAzLjYyIDAgMDAuMjk2LS44MDcgNC4yNjMgNC4yNjMgMCAwMC4wOS0xLjQ2NiAzLjk4OCAzLjk4OCAwIDAwLS4yMjQtLjk1OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnVnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CdWxsc2V5ZSA9IGZ1bmN0aW9uIEV1aUljb25CdWxsc2V5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMTA4IDJhNiA2IDAgMDAwIDEyem0wIDFBNyA3IDAgMTE4IDFhNyA3IDAgMDEwIDE0em0wLTNhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAtMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0yYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWxsc2V5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2FsZW5kYXIgPSBmdW5jdGlvbiBFdWlJY29uQ2FsZW5kYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCA0di0uOTk0QzE0IDIuNDUgMTMuNTUgMiAxMi45OTQgMkgxMXYxaC0xVjJINnYxSDVWMkgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0aDkuOTg4QzEzLjU1IDE0IDE0IDEzLjU1IDE0IDEyLjk5NFY1SDJWNGgxMnptLTMtM2gxLjk5NEMxNC4xMDIgMSAxNSAxLjg5NyAxNSAzLjAwNnY5Ljk4OEEyLjAwNSAyLjAwNSAwIDAxMTIuOTk0IDE1SDMuMDA2QTIuMDA1IDIuMDA1IDAgMDExIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1VjBoMXYxaDRWMGgxdjF6TTQgN2gydjFINFY3em0zIDBoMnYxSDdWN3ptMyAwaDJ2MWgtMlY3ek00IDloMnYxSDRWOXptMyAwaDJ2MUg3Vjl6bTMgMGgydjFoLTJWOXptLTYgMmgydjFINHYtMXptMyAwaDJ2MUg3di0xem0zIDBoMnYxaC0ydi0xelwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2FsZW5kYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNSAxMmEuNTAyLjUwMiAwIDAxLS4zNTQtLjE0NmwtNC00YS41MDIuNTAyIDAgMDEuNzA4LS43MDhMNi41IDEwLjc5M2w2LjY0Ni02LjY0N2EuNTAyLjUwMiAwIDAxLjcwOC43MDhsLTcgN0EuNTAyLjUwMiAwIDAxNi41IDEyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTMuNjUtMTAuODU3TDYuOTEgOS44IDQuMzUgNy4yODZhLjUuNSAwIDAwLS43LjcxNGwyLjkwOSAyLjg1N2EuNS41IDAgMDAuNyAwbDUuMDkxLTVhLjUuNSAwIDEwLS43LS43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWVyID0gZnVuY3Rpb24gRXVpSWNvbkNoZWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MzQgMy4wNjNhMS41IDEuNSAwIDAxLjU0Ny4zMjFsLjExMi4xMTUgNi4wNyA2LjkxNWExLjUgMS41IDAgMDEtLjY0NiAyLjQxbC0uMTQyLjA0LTkuMDMxIDIuMDk3QTEuNSAxLjUgMCAwMS4wMzcgMTMuMTlsLjA0My0uMTU5TDMuMDQgNC4wMmExLjUgMS41IDAgMDExLjg5My0uOTU3ek00LjAyNyA0LjI1bC0uMDM2LjA4My0yLjk2MSA5LjAxMWEuNS41IDAgMDAuNDk4LjY1NmwuMDktLjAxMyAyLjkzNy0uNjgxLTEuMzk5LTEuNTA4YS41LjUgMCAwMS42NjYtLjc0bC4wNjcuMDYgMS43ODggMS45MjcgMi42MzQtLjYxMS0zLjE5OC0zLjYwMWEuNS41IDAgMDEuNjgyLS43MjZsLjA2Ni4wNjIgMy41NTkgNC4wMDcgMS4yMjktLjI4NGEuNS41IDAgMDAuMTUtLjA2M2wuMDY3LS4wNDlhLjUuNSAwIDAwLjA5OS0uNjMybC0uMDUzLS4wNzMtNi4wNy02LjkxNmEuNS41IDAgMDAtLjEzOC0uMTFsLS4wODItLjAzNS0uMDg4LS4wMmEuNS41IDAgMDAtLjUwNy4yNTZ6bTExLjY2IDUuMDM5YTIuNSAyLjUgMCAwMS0uOTc1IDMuMzk5LjUuNSAwIDAxLS40ODUtLjg3NSAxLjUgMS41IDAgMDAtMS40NTQtMi42MjQuNS41IDAgMDEtLjQ4NS0uODc1IDIuNSAyLjUgMCAwMTMuMzk5Ljk3NXptLTUuMDMtNi4yMDZhLjUuNSAwIDAxLjMzOC41NDRsLS4wMi4wODgtLjY3NyAyLjAzNSAyLjA2OC0uNzIxYS41LjUgMCAwMS42LjIyNWwuMDM2LjA4MmEuNS41IDAgMDEtLjIyNS42bC0uMDgyLjAzN0w5LjY3IDcuMDI4YS41LjUgMCAwMS0uNjU5LS41NWwuMDItLjA4Ljk5NS0zYS41LjUgMCAwMS42MzItLjMxNnpNMTQuNSA0YS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTcuODYyLjQwM2EyLjUgMi41IDAgMDEuNzM1IDMuNDU5LjUuNSAwIDAxLS44MzktLjU0NSAxLjUgMS41IDAgMTAtMi41MTYtMS42MzQuNS41IDAgMDEtLjgzOS0uNTQ1QTIuNSAyLjUgMCAwMTcuODYyLjQwM3pNMTMuNSAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0zLTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptNC0xYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG9jayA9IGZ1bmN0aW9uIEV1aUljb25DbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTNBNS41MDYgNS41MDYgMCAwMTIgNy41QzIgNC40NjcgNC40NjcgMiA3LjUgMlMxMyA0LjQ2NyAxMyA3LjUgMTAuNTMzIDEzIDcuNSAxM20wLTEyYTYuNSA2LjUgMCAxMDAgMTMgNi41IDYuNSAwIDAwMC0xM20zIDZIOFYzLjVhLjUuNSAwIDAwLTEgMHY0YS41LjUgMCAwMC41LjVoM2EuNS41IDAgMDAwLTFcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb3VkRHJpenpsZSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZERyaXp6bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjM0OCAzLjc2MUEzLjk5NSAzLjk5NSAwIDAxOCA3YS41LjUgMCAwMS0xIDAgMyAzIDAgMTAtNC44NzggMi4zNC41LjUgMCAwMS0uNjI3Ljc3OSA0IDQgMCAwMTMuOTczLTYuODQgNS41MDIgNS41MDIgMCAwMTEwLjA5NiA0LjM3LjUuNSAwIDExLS45Mi0uMzkgNC41IDQuNSAwIDEwLTguMjk2LTMuNDk3em0tMS42MSA0LjkzNWEuNS41IDAgMTEuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDExLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MnptLTMuMTIgMy42NDdhLjUuNSAwIDAxLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAxLS43NzQtLjYzNGwxLjUwNS0xLjg0em03LjYyLTMuNjQ3YS41LjUgMCAwMS43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMTEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyem0tMy4xMiAzLjY0N2EuNS41IDAgMDEuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMDEtLjc3NC0uNjM0bDEuNTA1LTEuODR6bTcuNjItMy42NDdhLjUuNSAwIDExLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxMS0uNzc0LS42MzNsMS40NjYtMS43OTJ6bS0zLjEyIDMuNjQ3YS41LjUgMCAwMS43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwMS0uNzc0LS42MzRsMS41MDUtMS44NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWREcml6emxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG91ZFN0b3JteSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN0b3JteShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDIxIDQuOTNhLjUuNSAwIDExLS44Ny40OSAzIDMgMCAxMC00LjQzIDMuOTE4LjUuNSAwIDAxLS42MjYuNzggNCA0IDAgMDEzLjk3My02Ljg0bC4wMzIuMDE4VjMuMjhhNS41IDUuNSAwIDExNy4wMDMgNy4zNTcuNS41IDAgMTEtLjM2LS45MzQgNC41IDQuNSAwIDEwLTUuNzctNS45MjNjLjQyLjMxLjc3OC43MDEgMS4wNSAxLjE1aC0uMDAyek05LjYgMTFjLjY2OS4wMDIuNzk0LjY3LjM2IDEuMDAzbC00LjY4IDMuODgyYy0uNDU3LjM3OC0xLjA1My0uMjYtLjY0My0uNjg5bDMuMDgtMy4xOTNBNTQxMS43IDU0MTEuNyAwIDAxNS4xMTMgMTJjLS42NjgtLjAwMS0uNzkzLS42NjktLjM2LTEuMDAzbDQuNjgtMy44ODFjLjQ1OC0uMzc5IDEuMDUzLjI2LjY0My42ODhsLTMuMDggMy4xOTNMOS42IDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN0b3JteTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2xvdWRTdW5ueSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN1bm55KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzQ2IDUuMDA1QTUuNSA1LjUgMCAwMTEwLjUgMTZINGE0IDQgMCAwMS0xLjYxLTcuNjYzQTQuNDczIDQuNDczIDAgMDEyLjAyOSA3SC41YS41LjUgMCAwMTAtMWgxLjUyN2E0LjQ3OSA0LjQ3OSAwIDAxLjk1Ny0yLjMwOUwxLjY0NiAyLjM1NGEuNS41IDAgMTEuNzA4LS43MDhMMy42OSAyLjk4NEE0LjQ3OSA0LjQ3OSAwIDAxNiAyLjAyN1YuNWEuNS41IDAgMDExIDB2MS41MjhhNC40OTMgNC40OTMgMCAwMTIuMzA5Ljk1NmwxLjMzNy0xLjMzOGEuNS41IDAgMDEuNzA4LjcwOEwxMC4wMTYgMy42OWMuMzExLjM4OC41Ni44MzEuNzMgMS4zMTR6TTQgMTVoNi41YTQuNSA0LjUgMCAxMC00LjE1Mi02LjIzOUEzLjk5NSAzLjk5NSAwIDAxOCAxMmEuNS41IDAgMTEtMSAwIDMgMyAwIDEwLTMgM3ptNS42OTEtOS45NGEzLjUgMy41IDAgMTAtNi4zMyAyLjk5MSA0LjAyOSA0LjAyOSAwIDAxMi4xMDYuMjI3IDUuNTA1IDUuNTA1IDAgMDE0LjIyNC0zLjIxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWRTdW5ueTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2x1c3RlciA9IGZ1bmN0aW9uIEV1aUljb25DbHVzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgN2EyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em0wLTZhMy41IDMuNSAwIDAxMy40NjUgM2gzLjEyYTEuNSAxLjUgMCAxMTAgMWgtMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLS42NjIgMS41OTZsMi4xIDIuMUEzLjUgMy41IDAgMTE4LjAzNiAxMmgtMy4xMmExLjUgMS41IDAgMTEwLS45OTloMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLjY2Mi0xLjU5NmwtMi4xLTIuMUEzLjUgMy41IDAgMTE0LjUgMXpNMTIgNC41YS41LjUgMCAxMDEgMCAuNS41IDAgMDAtMSAwem0tLjUgOS41YTIuNSAyLjUgMCAxMTAtNSAyLjUgMi41IDAgMDEwIDV6TTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2x1c3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29sb3IgPSBmdW5jdGlvbiBFdWlJY29uQ29sb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxMWMxLjMzNCAxLjM5MyAyIDIuNDM1IDIgMy4xMjVDMTUgMTUuMTYxIDE0LjEwNSAxNiAxMyAxNmMtMS4xMDQgMC0yLS44NC0yLTEuODc1IDAtLjY5LjY2Ny0xLjczMiAyLTMuMTI1ek01Ljg1Ny4xNWw2LjM0IDYuNDUuMDE2LjAyLjMyNC4zMjFhMS41IDEuNSAwIDAxLjExIDIuMDA2bC0uMTAzLjExNC00LjQ3NCA0LjUxM2ExLjUgMS41IDAgMDEtMi4xMjMuMDA4TDEuNDY0IDkuMDZhMS41IDEuNSAwIDAxLjAwNy0yLjEybDQuNDcyLTQuNDVjLjE0NS0uMTQ2LjMxMy0uMjU0LjQ5Mi0uMzI3TDUuMTQ0Ljg1YS41LjUgMCAwMS43MTMtLjd6bTEuNDk2IDMuMDQ5YS41LjUgMCAwMC0uNzA1IDBMMi4xNzcgNy42NWEuNDk4LjQ5OCAwIDAwLS4xNDguMzVoOS45NWEuNDk4LjQ5OCAwIDAwLS4xNDgtLjM1TDcuMzUzIDMuMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29sb3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbXB1dGUgPSBmdW5jdGlvbiBFdWlJY29uQ29tcHV0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgM2ExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjRhMSAxIDAgMDAtMS0xSDR6bTEwIDh2MWEyIDIgMCAwMS0yIDJoLTF2MmgtMXYtMkg4LjV2MmgtMXYtMkg2djJINXYtMkg0YTIgMiAwIDAxLTItMnYtMUgwdi0xaDJWOC41SDB2LTFoMlY2SDBWNWgyVjRhMiAyIDAgMDEyLTJoMVYwaDF2MmgxLjVWMGgxdjJIMTBWMGgxdjJoMWEyIDIgMCAwMTIgMnYxaDJ2MWgtMnYxLjVoMnYxaC0yVjEwaDJ2MWgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiA2LFxuICAgIGhlaWdodDogNixcbiAgICB4OiA1LFxuICAgIHk6IDUsXG4gICAgcng6IDFcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbXB1dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnNvbGUgPSBmdW5jdGlvbiBFdWlJY29uQ29uc29sZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTU3IDEyLjIyNEw1Ljc2OCA4LjMyYS40MDQuNDA0IDAgMDAwLS42NGwtNC42MS0zLjkwNGEuNDA3LjQwNyAwIDAxMC0uNjQzLjYwOC42MDggMCAwMS43NTkgMGw0LjYxIDMuOTA0Yy42MzEuNTM0LjYzIDEuMzkzIDAgMS45MjZsLTQuNjEgMy45MDRhLjYwOC42MDggMCAwMS0uNzYgMCAuNDA3LjQwNyAwIDAxMC0uNjQzek05IDEyaDZ2MUg5di0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db25zb2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250YWluZXIgPSBmdW5jdGlvbiBFdWlJY29uQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDIuNUEuNS41IDAgMDEuNSAyaDE1YS41LjUgMCAwMTAgMUgxNXYxMGguNWEuNS41IDAgMDEwIDFILjVhLjUuNSAwIDAxMC0xSDFWM0guNWEuNS41IDAgMDEtLjUtLjV6TTIgM2gxMnYxMEgyVjN6bTMgMmEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA1IDV6bTUuNS41YS41LjUgMCAwMTEgMHY1YS41LjUgMCAwMS0xIDB2LTV6TTggNWEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA4IDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRhaW5lcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05YS41LjUgMCAwMC0uNS0uNXptMyAwYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwVjloNnYxLjVhLjUuNSAwIDAwLjgyLjM4NGwzLTIuNWEuNS41IDAgMDAwLS43NjhsLTMtMi41QS41LjUgMCAwMDExIDUuNVY3SDVWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAzYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtMSAwVjlINHYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE0IDUuNVY3aDJWMy41YS41LjUgMCAwMS41LS41em0zIDBhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDBWOWgydjEuNWEuNS41IDAgMDAuODIuMzg0bDMtMi41YS41LjUgMCAwMDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAwMTIgNS41VjdoLTJWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS41IDNhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0xIDBWOUg1djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTUgNS41VjdoNlYzLjVhLjUuNSAwIDAxLjUtLjV6bTMgMGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDAxLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5V2l0aGluID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05QS41LjUgMCAwMC41IDN6bTE0LjUuNWEuNS41IDAgMDExIDB2OWEuNS41IDAgMDEtMSAwdi05em0tNC43MTIgMS41NDdhLjUuNSAwIDAxLjUzMi4wNjlsMyAyLjVhLjUuNSAwIDAxMCAuNzY4bC0zIDIuNUEuNS41IDAgMDExMCAxMC41VjlINnYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE2IDUuNVY3aDRWNS41YS41LjUgMCAwMS4yODgtLjQ1M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eVdpdGhpbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA1IDEwYTIuNSAyLjUgMCAwMTQuOSAwaDEuNTVhLjUuNSAwIDExMCAxaC0xLjU1YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDExMC0xaDYuNTV6bS0uMS00YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDAxMC0xaDEuNTVhMi41IDIuNSAwIDAxNC45IDBoNi41NWEuNS41IDAgMTEwIDFINy45NXpNNCA1LjVhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6bTggNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250cm9sc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNy45NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDExMSAwdjEuNTVhMi41IDIuNSAwIDAxMCA0Ljl2Ni41NWEuNS41IDAgMTEtMSAwVjcuOTV6bS00IC4xYTIuNSAyLjUgMCAwMTAgNC45djEuNTVhLjUuNSAwIDExLTEgMHYtMS41NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDAxMSAwdjYuNTV6TTUuNSAxMmExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem01LThhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29weSA9IGZ1bmN0aW9uIEV1aUljb25Db3B5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNCAwYy4yMzUgMCAuNDYuMDk5LjYyMi4yNzNsMi43NDMgM2MuMTUxLjE2Mi4yMzUuMzc4LjIzNS42MDJ2OS4yNWEuODY3Ljg2NyAwIDAxLS44NTcuODc1SDMuODU3QS44NjcuODY3IDAgMDEzIDEzLjEyNVYuODc1QzMgLjM5MiAzLjM4NCAwIDMuODU3IDBIMTEuNHpNMTQgNGgtMi42YS40LjQgMCAwMS0uNC0uNFYxSDR2MTJoMTBWNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMUgyYTEgMSAwIDAwLTEgMXYxM2ExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMXYtMWgtMXYxSDJWMmgxVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvcHlDbGlwYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQ29weUNsaXBib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi43MjlWMmExIDEgMCAwMTEtMWgydjFIM3YxMmg0djFIM2ExIDEgMCAwMS0xLTFWMi43Mjl6TTE0IDVWMmExIDEgMCAwMC0xLTFoLTJ2MWgydjNoMXptLTEgMWgydjlIOFY2aDVWNUg4YTEgMSAwIDAwLTEgMXY5YTEgMSAwIDAwMSAxaDdhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFoLTJ2MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoNVY5SDl2MXptMC0yaDVWN0g5djF6bTAgNGg1di0xSDl2MXptMCAyaDV2LTFIOXYxem0yLTEyVjFhMSAxIDAgMDAtMS0xSDZhMSAxIDAgMDAtMSAxdjFoMVYxaDR2MWgxek01IDNoNlYySDV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weUNsaXBib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3MgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI5MyA4TDMuMTQ2IDMuODU0YS41LjUgMCAxMS43MDgtLjcwOEw4IDcuMjkzbDQuMTQ2LTQuMTQ3YS41LjUgMCAwMS43MDguNzA4TDguNzA3IDhsNC4xNDcgNC4xNDZhLjUuNSAwIDAxLS43MDguNzA4TDggOC43MDdsLTQuMTQ2IDQuMTQ3YS41LjUgMCAwMS0uNzA4LS43MDhMNy4yOTMgOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43NDYgOGwzLjEtMy4xYS41MjcuNTI3IDAgMTAtLjc0Ni0uNzQ2TDggNy4yNTRsLTMuMS0zLjFhLjUyNy41MjcgMCAxMC0uNzQ2Ljc0NmwzLjEgMy4xLTMuMSAzLjFhLjUyNy41MjcgMCAxMC43NDYuNzQ2bDMuMS0zLjEgMy4xIDMuMWEuNTI3LjUyNyAwIDEwLjc0Ni0uNzQ2TDguNzQ2IDh6TTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQUNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3NoYWlycyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc2hhaXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44MjIgMS44NzRhLjUuNSAwIDExLjMzNS45NDIgNS41MTcgNS41MTcgMCAwMC0zLjM0IDMuMzQxLjUuNSAwIDExLS45NDMtLjMzNSA2LjUxNyA2LjUxNyAwIDAxMy45NDgtMy45NDh6TTEuODY0IDEwLjE1YS41LjUgMCAxMS45NDQtLjMzIDUuNTE3IDUuNTE3IDAgMDAzLjM2NSAzLjM3LjUuNSAwIDAxLS4zMzMuOTQzIDYuNTE3IDYuNTE3IDAgMDEtMy45NzYtMy45ODN6bTguMzAyIDMuOTgxYS41LjUgMCAxMS0uMzMzLS45NDMgNS41MTcgNS41MTcgMCAwMDMuMzQ3LTMuMzMyLjUuNSAwIDExLjk0MS4zMzcgNi41MTcgNi41MTcgMCAwMS0zLjk1NSAzLjkzOHptMy45NjgtOC4yODVhLjUuNSAwIDExLS45NDMuMzMxQTUuNTE3IDUuNTE3IDAgMDA5Ljg1IDIuODJhLjUuNSAwIDAxLjMzNy0uOTQyIDYuNTE3IDYuNTE3IDAgMDEzLjk0NiAzLjk2OHpNOC41IDMuNWEuNS41IDAgMDEtMSAwVi45OTdhLjUuNSAwIDAxMSAwVjMuNXptLTQuOTk3IDRhLjUuNSAwIDAxMCAxSDFhLjUuNSAwIDAxMC0xaDIuNTAzek03LjUgMTIuNDk3YS41LjUgMCAwMTEgMFYxNWEuNS41IDAgMTEtMSAwdi0yLjUwM3pNMTIuNDk3IDguNWEuNS41IDAgMDEwLTFIMTVhLjUuNSAwIDExMCAxaC0yLjUwM3pNOCA5YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc2hhaXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DdXJyZW5jeSA9IGZ1bmN0aW9uIEV1aUljb25DdXJyZW5jeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk1IDEuNjM2bDEuNDE0IDEuNDE0LTIuMTkyIDIuMTkzQzEyLjY5NSA2LjAzMyAxMyA2Ljk4IDEzIDhjMCAxLjAyLS4zMDUgMS45NjctLjgyOCAyLjc1N2wyLjE5MiAyLjE5My0xLjQxNCAxLjQxNC0yLjE5My0yLjE5MkE0Ljk3NyA0Ljk3NyAwIDAxOCAxM2E0Ljk3NyA0Ljk3NyAwIDAxLTIuNzU3LS44MjhMMy4wNSAxNC4zNjQgMS42MzYgMTIuOTVsMi4xOTItMi4xOTNBNC45NzcgNC45NzcgMCAwMTMgOGMwLTEuMDIuMzA1LTEuOTY3LjgyOC0yLjc1N0wxLjYzNiAzLjA1IDMuMDUgMS42MzZsMi4xOTMgMi4xOTJBNC45NzcgNC45NzcgMCAwMTggM2MxLjAyIDAgMS45NjcuMzA1IDIuNzU3LjgyOGwyLjE5My0yLjE5MnpNOCA1YTIuOTkgMi45OSAwIDAwLTEuMTY4LjIzNmwtLjEyNi4wNTctLjIxOC4xMTYtLjEzMi4wODEtLjA3My4wNWEzLjAxMyAzLjAxMyAwIDAwLS4yNDEuMTg3bC0uMTEzLjEwMy0uMTQ3LjE1Yy0uMDUuMDU0LS4wOTcuMTEtLjE0Mi4xNjhsLS4xLjEzNS0uMDUuMDczLS4wNi4wOTdjLS4wNS4wODItLjA5Ni4xNjYtLjEzNy4yNTNsLS4wNTcuMTI2QTIuOTkgMi45OSAwIDAwNSA4YzAgLjQxNC4wODQuODA5LjIzNiAxLjE2OGwuMDU3LjEyNi4xMTYuMjE4LjA4MS4xMzJjLjA1OS4wODkuMTIxLjE3NS4xODkuMjU3bC4xNS4xNy4xNTEuMTQ3Yy4wNTYuMDUxLjExNC4xLjE3NC4xNDdsLjE0Mi4xMDVjLjA1NC4wMzcuMTA5LjA3Mi4xNjUuMTA2bC0uMTI0LS4wNzkuMDkyLjA2LjA5NC4wNTVjLjQzNi4yNDcuOTQuMzg4IDEuNDc3LjM4OGEyLjk5IDIuOTkgMCAwMDEuMTY4LS4yMzZsLjEyNS0uMDU2LjIxMy0uMTEzLjE1MS0uMDk0LjA1LS4wMzRhMy4wMTEgMy4wMTEgMCAwMC4zMjMtLjI1OGwtLjE1LjEyOS4wOS0uMDc1LjE2OC0uMTU5LjA4LS4wODRjLjA1MS0uMDU2LjEtLjExNC4xNDctLjE3NGwuMTA1LS4xNDIuMTA2LS4xNjVjLjA0Ny0uMDguMDkxLS4xNjEuMTMxLS4yNDVsLjA1Ny0uMTI2QTIuOTkgMi45OSAwIDAwMTEgOGEyLjk5IDIuOTkgMCAwMC0uMjM2LTEuMTY4bC0uMDU2LS4xMjUtLjExMi0uMjExLS4wOTYtLjE1NS0uMDMzLS4wNDlhMy4wMTEgMy4wMTEgMCAwMC0uMjU4LS4zMjJsLjEyOS4xNS0uMDc1LS4wOS0uMTU5LS4xNjgtLjA4NC0uMDhhMy4wMTUgMy4wMTUgMCAwMC0uMTc0LS4xNDdsLS4xODMtLjEzMi0uMTI0LS4wNzlhMi45OTMgMi45OTMgMCAwMC0uMjQ1LS4xMzFsLS4xMjYtLjA1N0EyLjk5IDIuOTkgMCAwMDggNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3VycmVuY3k7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkN1dCA9IGZ1bmN0aW9uIEV1aUljb25DdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4xNDIgMTEuMDc0bC0xLjkxMi41NDhhMi41MzIgMi41MzIgMCAxMS0xLjM5NS00Ljg2N2wxLjk0Ny0uNTU5YTIuNTMyIDIuNTMyIDAgMDEyLjU1NS43MTNsMS41My01LjMzNWMuMTM5LS40ODUuNi0uODk3IDEuMTU5LTEuMjM4LjI3LS4xNjQuNTItLjI3OC43NzktLjMyLjgxNC0uMTMyIDEuNTAzLjU1OCAxLjI2MSAxLjQyMkw5LjU3NCA2LjY0M2w0Ljk4OC0xLjQzYy44NjQtLjI0MiAxLjU1NC40NDcgMS40MjIgMS4yNi0uMDQyLjI2LS4xNTYuNTEtLjMyLjc4LS4zNDEuNTYtLjc1MyAxLjAyLTEuMjM4IDEuMTZMOS41MjMgOS44MTdhMi41MyAyLjUzIDAgMDEuNTYgMi40bC0uNTYgMS45NDdhMi41MzIgMi41MzIgMCAxMS00Ljg2Ny0xLjM5NWwuNDg2LTEuNjk2em0uMzMtMS4xNDhsLjQ4LTEuNjczYTEuNTIgMS41MiAwIDAwLTEuODktMS4wODNsLTEuOTQ4LjU1OGExLjUyIDEuNTIgMCAwMC44MzcgMi45MmwyLjUyLS43MjJ6bTMuNzczLTIuMTM1bC0uMzMgMS4xNDggNS4yMzItMS41Yy4zMjQtLjA5MyAxLjE4Mi0xLjM5LjY5NC0xLjI1M0w5LjI0NSA3Ljc5MXpNNS42MyAxMy4wNDlhMS41MiAxLjUyIDAgMDAyLjkyLjgzN2wuNTU5LTEuOTQ3YTEuNTIgMS41MiAwIDAwLTEuNTUzLTEuOTM1bDIuNTM3LTguODQ1Yy4xMzYtLjQ4OC0xLjE2LjM3LTEuMjUzLjY5NEw1LjYzIDEzLjA1em0uOTczLjI3OWwuNTU5LTEuOTQ3YS41MDYuNTA2IDAgMTEuOTczLjI3OWwtLjU1OCAxLjk0N2EuNTA2LjUwNiAwIDExLS45NzQtLjI4em0tMy45My0zLjY1M2EuNTA2LjUwNiAwIDExLS4yOC0uOTczbDEuOTQ3LS41NThhLjUwNi41MDYgMCAwMS4yOC45NzNsLTEuOTQ4LjU1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25EYXRhYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25EYXRhYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTJoMTJ2LTEuOTdjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1YxMnptLTEgMFYzYzAtMS4xMDUgMy4xMzQtMiA3LTJzNyAuODk1IDcgMnY5YzAgMS4xMDUtMy4xMzQgMi03IDJzLTctLjg5NS03LTJ6bTEtM2gxMlY3LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdWOXptMC00Ljk3VjZoMTJWNC4wM2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3em0xMC42NzUtMS40ODNDMTEuNDY3IDIuMjAyIDkuNzk1IDIgOCAyYy0xLjc5NCAwLTMuNDY3LjIwMi00LjY3NS41NDctLjQ5Mi4xNC0uODguMjk4LTEuMTM2LjQ1My4yNTYuMTU1LjY0NC4zMTIgMS4xMzYuNDUzQzQuNTMzIDMuNzk4IDYuMjA1IDQgOCA0YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQuODgtLjI5OCAxLjEzNi0uNDUzLS4yNTYtLjE1NS0uNjQ0LS4zMTItMS4xMzYtLjQ1M3pNMiA2Yy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDYuNzk4IDYuMjA1IDcgOCA3YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMnptMCAzYy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDkuNzk4IDYuMjA1IDEwIDggMTBjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyem0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgMTIuNzk4IDYuMjA1IDEzIDggMTNjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EYXRhYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRGVza3RvcCA9IGZ1bmN0aW9uIEV1aUljb25EZXNrdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMmExIDEgMCAwMC0xIDF2N2ExIDEgMCAwMDEgMWg0bC0xIDNIMy41YS41LjUgMCAwMDAgMWg5YS41LjUgMCAwMDAtMUgxMWwtMS0zaDRhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIMnptMCA4VjNoMTJ2N0gyem01IDFoMmwxIDNINmwxLTN6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0zIDBhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0yLjUuNWEuNS41IDAgMDEuNS0uNWgxYS41LjUgMCAwMTAgMWgtMWEuNS41IDAgMDEtLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRlc2t0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvY3VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuOCAwYy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDMuMiAzLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWMTVhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjFhMSAxIDAgMDExLTFoOC44ek0xNCA1aC0zLjVhLjUuNSAwIDAxLS41LS41VjFIMnYxNGgxMlY1em0tOC41IDdhLjUuNSAwIDExMC0xaDVhLjUuNSAwIDExMCAxaC01em0wLTNhLjUuNSAwIDAxMC0xaDVhLjUuNSAwIDExMCAxaC01elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDguOTk1bDYuNDUzLTYuNDQtMS41LTEuNS02LjQ1MyA2LjQ0IDEuNSAxLjV6TTEyLjk2OC4xOWMuMjU4LS4yMzguNjU3LS4yNi45MSAwbDEuOTI4IDEuOTI5YS42NDIuNjQyIDAgMDEwIC45MDlsLTYuNzggNi43ODRBLjY0MS42NDEgMCAwMTguNTcgMTBINi42NDNBLjY0My42NDMgMCAwMTYgOS4zNTdWNy40M2MwLS4xNy4wNjctLjMzNS4xODgtLjQ1NUwxMi45NjguMTl6TTQuNSAxM2EuNS41IDAgMTEwLTFoN2EuNS41IDAgMTEwIDFoLTd6bTQtMTJhLjUuNSAwIDAxMCAxSDJ2MTNoMTJWNy41YS41LjUgMCAxMTEgMFYxNWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50RWRpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAzLjVhLjUuNSAwIDExLTEgMCAuNS41IDAgMDExIDB6TTkgNXYzaDF2MUg4VjZIN1Y1aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy44NTUgMTQuMTQ3YTEuMzQgMS4zNCAwIDAxLS4xNTgtLjI0NkExLjk5OCAxLjk5OCAwIDAxMTMuNSAxM2MwLS40MTQuMTAzLS43MTMuMTk3LS45MDFhMS4zNCAxLjM0IDAgMDEuMTU4LS4yNDZsLjAwMy0uMDA1QS41LjUgMCAwMDE0IDExLjVWLjVhLjUuNSAwIDAwLS41LS41SDMuNDYxbC0uMDgzLjAwNWEyLjk1NyAyLjk1NyAwIDAwLTEuMTAyLjI5OCAyLjI1NyAyLjI1NyAwIDAwLS44OC43NjNDMS4xNDggMS40NCAxIDEuOTEzIDEgMi41VjEzYzAgLjQ2My4xMTcuODQzLjMxOCAxLjE0NS4yLjI5OC40NjIuNDkxLjcwOC42MTVhMi4zNDQgMi4zNDQgMCAwMC45NC4yNEgzdi0xYy0uMDA1IDAtLjAxNSAwLS4wMjktLjAwMmExLjM0NCAxLjM0NCAwIDAxLS40OTgtLjEzMy44MTcuODE3IDAgMDEtLjMyMy0uMjc1QzIuMDcgMTMuNDcgMiAxMy4yODcgMiAxM3MuMDctLjQ3LjE1LS41OWEuODE3LjgxNyAwIDAxLjMyNC0uMjc1QTEuMzQ0IDEuMzQ0IDAgMDEzIDEyaDkuNjU4Yy0uMDkxLjI3LS4xNTguNjA1LS4xNTggMXMuMDY3LjczLjE1OCAxSDh2MWg1LjVhLjUuNSAwIDAwLjM1OS0uODQ4bC0uMDA0LS4wMDV6bS0uMDAxIDBsLjAwMi4wMDItLjAwMi0uMDAyek0yLjcyNCAxLjE5N2MuMDkyLS4wNDYuMTg2LS4wODIuMjc2LS4xMUMzIDIuOTE4IDMuMDAxIDExIDIuOTk5IDExaC0uMDMzYTEuOTc3IDEuOTc3IDAgMDAtLjI4My4wMyAyLjM0NCAyLjM0NCAwIDAwLS42NTcuMjFMMiAxMS4yNTRWMi41YzAtLjQxMy4xMDItLjY4OS4yMjktLjg3OS4xMjgtLjE5My4zMDQtLjMyOC40OTUtLjQyNHpNNCAxMVYxaDl2MTBINHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTNINHYyLjVhLjUuNSAwIDAwLjg1NC4zNTRsLjY0Ni0uNjQ3LjY0Ni42NDdBLjUuNSAwIDAwNyAxNS41VjEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudHMgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxM2ExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMWExIDEgMCAwMTEtMWg2Ljh6TTEyIDVIOC41YS41LjUgMCAwMS0uNS0uNVYxSDJ2MTJoMTBWNXptLTcuNSA2YS41LjUgMCAxMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMC0zYS41LjUgMCAwMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMSA4YS41LjUgMCAxMTAtMUgxNFY2LjVhLjUuNSAwIDExMSAwVjE1YTEgMSAwIDAxLTEgMUg1LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG90ID0gZnVuY3Rpb24gRXVpSWNvbkRvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDgsXG4gICAgY3k6IDgsXG4gICAgcjogNFxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3VibGVBcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG91YmxlQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjIzMiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4yMzIgMTQuMDQzYS43NS43NSAwIDAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAwMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMDExLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMDEwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMDEtMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvd25sb2FkID0gZnVuY3Rpb24gRXVpSWNvbkRvd25sb2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA5LjExNGwxLjg1LTEuOTQzYS41Mi41MiAwIDAxLjc3IDBjLjIxNC4yMjguMjE0LjYgMCAuODI5bC0xLjk1IDIuMDVhMS41NTIgMS41NTIgMCAwMS0yLjMxIDBMNS40MSA4YS42MTcuNjE3IDAgMDEwLS44MjkuNTIuNTIgMCAwMS43NyAwTDggOS4wODJWLjU1NkM4IC4yNDkgOC4yMjQgMCA4LjUgMHMuNS4yNDkuNS41NTZ2OC41NTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMy4wMDZWMTBoLTF2My4wMDZhLjk5NS45OTUgMCAwMS0uOTk0Ljk5NEgzLjAxYS45OTUuOTk1IDAgMDEtLjk5NC0uOTk0VjEwaC0xdjMuMDA2YzAgMS4xLjg5MiAxLjk5NCAxLjk5NCAxLjk5NGgxMC45OTZjMS4xIDAgMS45OTQtLjg5MyAxLjk5NC0xLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG93bmxvYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAyaDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXptMTMgMGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xem0wIDEzaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDFoMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yek0xLjUgMTRoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEg3VjEuNWEuNS41IDAgMDExIDBWNHptMCA4djIuNWEuNS41IDAgMTEtMSAwVjEyaDF6TTMgNWg5YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgN3YxSDEuNWEuNS41IDAgMDEwLTFINHptOCAwaDIuNWEuNS41IDAgMTEwIDFIMTJWN3pNNyAxaDJhMiAyIDAgMDEyIDJ2OWEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6bTExLjUtNGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgM2gyYTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDhoNWExIDEgMCAwMTEgMXY1SDNhMSAxIDAgMDEtMS0xVjh6bTEtN2gxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGg1djVhMSAxIDAgMDEtMSAxSDhWOWExIDEgMCAwMTEtMXpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJoNXY1YTEgMSAwIDAxLTEgMUgyVjNhMSAxIDAgMDExLTF6bTAtMWgxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmg1YTEgMSAwIDAxMSAxdjVIOWExIDEgMCAwMS0xLTFWMnpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA0VjNoNnYxSDV6TTMgN1Y2aDEwdjFIM3ptMiAzVjloNnYxSDV6bS0yIDN2LTFoMTB2MUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDZ2MUgyem0wIDNWNmgxMHYxSDJ6bTAgM1Y5aDZ2MUgyem0wIDN2LTFoMTB2MUgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNFYzaDZ2MUg4ek00IDdWNmgxMHYxSDR6bTQgM1Y5aDZ2MUg4em0tNCAzdi0xaDEwdjFINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQm9sZCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JCb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xOTMgMTNINFYzaDQuMTUxYzEuODE2IDAgMi45ODcuOTc3IDIuOTg3IDIuNDk1IDAgMS4wNzQtLjc5NyAyLjAxLTEuODIzIDIuMTc2di4wNTVjMS4zNTkuMTMyIDIuMzA4IDEuMTEgMi4zMDggMi40MzMgMCAxLjc2LTEuMjk2IDIuODQxLTMuNDMgMi44NDF6TTUuNzg4IDQuMzkzdjIuODJoMS42MzVjMS4yNDggMCAxLjk0OC0uNTI2IDEuOTQ4LTEuNDU1IDAtLjg3My0uNjAzLTEuMzY1LTEuNjctMS4zNjVINS43ODh6bTAgNy4yMTRoMS45OTZjMS4zMTYgMCAyLjAxNi0uNTQ3IDIuMDE2LTEuNTczIDAtMS4wMTktLjcyLTEuNTUyLTIuMDkyLTEuNTUyaC0xLjkydjMuMTI1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JCb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JDaGVja2xpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41OTcgM2EuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40Mi40MiAwIDAwLS4yOTIuMDk4LjMzMy4zMzMgMCAwMC0uMTIuMjU3LjMzNS4zMzUgMCAwMC4xMjcuMjU0bDEuMDY0Ljk4MkEuNDE4LjQxOCAwIDAwMi40ODggNmEuNDExLjQxMSAwIDAwLjI4OC0uMTI2TDQuOTA0IDMuNThhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzhBLjQyMS40MjEgMCAwMDQuNTk3IDN6bS0uMjk5IDQuMTMyQS40MTEuNDExIDAgMDE0LjU5NyA3YS40MjEuNDIxIDAgMDEuMjc2LjA5M2MuMDc2LjA2Mi4xMi4xNDcuMTI2LjIzOGEuMzI4LjMyOCAwIDAxLS4wOTUuMjVMMi43NzYgOS44NzRhLjQxMS40MTEgMCAwMS0uMjg4LjEyNi40MTguNDE4IDAgMDEtLjI5Ny0uMTA4TDEuMTI3IDguOTFBLjMzNS4zMzUgMCAwMTEgOC42NTZhLjMzMy4zMzMgMCAwMS4xMi0uMjU3LjQyLjQyIDAgMDEuMjkyLS4wOThjLjEwOC4wMDUuMjEuMDUuMjguMTIzbC43NTcuNzAxIDEuODQ5LTEuOTkzek00LjU5NyAxMWEuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40MjEuNDIxIDAgMDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAwLS4xMi4yNTcuMzM1LjMzNSAwIDAwLjEyNy4yNTRsMS4wNjQuOTgyYS40MTguNDE4IDAgMDAuMjk3LjEwOC40MTEuNDExIDAgMDAuMjg4LS4xMjZsMi4xMjgtMi4yOTNhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzguNDIxLjQyMSAwIDAwLS4yNzYtLjA5M3pNNi41IDRhLjUuNSAwIDAwMCAxaDdhLjUuNSAwIDAwMC0xaC03ek02IDguNWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEtLjUtLjV6bS41IDMuNWEuNS41IDAgMDAwIDFoN2EuNS41IDAgMDAwLTFoLTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNoZWNrbGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQ29kZUJsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNvZGVCbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNDE0IDguMDM2TDQuODkgMTAuNTFhLjUuNSAwIDAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwMTAtLjcwN2wyLjgyOC0yLjgyOGEuNS41IDAgMTEuNzA3LjcwN0wyLjQxNCA4LjAzNnptOC43NjggMi40NzRsMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAxLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwMTAgLjcwN2wtMi44MjkgMi44MjlhLjUuNSAwIDExLS43MDctLjcwOHpNOC41NTkgMi41MDZhLjUuNSAwIDAxLjk4MS4xOUw3LjQ0MSAxMy40OTRhLjUuNSAwIDAxLS45ODEtLjE5TDguNTU5IDIuNTA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb2RlQmxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckNvbW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29tbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTExIDEwSDEyYTEgMSAwIDAwMS0xVjVhMSAxIDAgMDAtMS0xSDRhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMDAxIDFoMXYxLjI5N0w2LjExMSAxMHptLjQ2IDFMNCAxNHYtM2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjRhMiAyIDAgMDEtMiAySDYuNTcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb21tZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JIZWFkaW5nID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckhlYWRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDExYTEgMSAwIDAxMCAySDRhMSAxIDAgMDEwLTJWNWExIDEgMCAxMTAtMmgyYTEgMSAwIDExMCAydjJoNFY1YTEgMSAwIDExMC0yaDJhMSAxIDAgMDEwIDJ2NmExIDEgMCAwMTAgMmgtMmExIDEgMCAwMTAtMlY5SDZ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySGVhZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRhbGljID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0YWxpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTYgMTJIOS41YS41LjUgMCAxMTAgMWgtNGEuNS41IDAgMTEwLTFoMS42MzlsMS43LThINy41YS41LjUgMCAwMTAtMWg0YS41LjUgMCAxMTAgMUg5Ljg2MWwtMS43IDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0YWxpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yTGluayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JMaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTYgNS4wNTFhLjQ1LjQ1IDAgMDAuNjM3LjYzN2wxLjUwMy0xLjUwNGMuNDMyLS40MzEgMS4yNzgtLjM4MiAxLjg5LjIzLjYxMi42MTIuNjYyIDEuNDU4LjIzIDEuODlMOS41MTkgOC42Yy0uNDMyLjQzMi0xLjI3OC4zODMtMS44OS0uMjNhLjQ1LjQ1IDAgMTAtLjYzNi42MzdjLjkxNC45MTQgMi4zMyAxLjA2MyAzLjE2Mi4yM2wyLjI5Ny0yLjI5N2MuODMzLS44MzMuNjg0LTIuMjQ4LS4yMy0zLjE2Mi0uOTE0LS45MTUtMi4zMy0xLjA2My0zLjE2Mi0uMjNMNy41NTYgNS4wNTF6bS44ODggNS4yNjFhLjQ1LjQ1IDAgMDAtLjYzNyAwbC0xLjUwMyAxLjUwNGMtLjQzMi40MzEtMS4yNzguMzgyLTEuODktLjIzLS42MTItLjYxMi0uNjYxLTEuNDU4LS4yMy0xLjg5TDYuNDgxIDcuNGMuNDMyLS40MzIgMS4yNzgtLjM4MyAxLjg5LjIzYS40NS40NSAwIDAwLjYzNi0uNjM3Yy0uOTE0LS45MTQtMi4zMy0xLjA2My0zLjE2Mi0uMjNMMy41NDggOS4wNmMtLjgzMy44MzMtLjY4NSAyLjI0OC4yMyAzLjE2Mi45MTQuOTE1IDIuMzMgMS4wNjMgMy4xNjIuMjNsMS41MDQtMS41MDNhLjQ1LjQ1IDAgMDAwLS42Mzd6TTcuODc3IDUuNzZhLjM5LjM5IDAgMDAuMjc0LS4xMTRsMS41MDMtMS41MDQtMS41MDMgMS41MDRhLjM5LjM5IDAgMDEtLjI3NC4xMTR6bS45MTIgMy4xODNjLS40LjAwMy0uODQzLS4xNzItMS4yMDItLjUzLjM1OS4zNTguODAyLjUzMyAxLjIwMi41M3pNMTIuMTggMy44MmMtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2LjYxOC0uMDA2IDEuMjcuMjU3IDEuNzczLjc2Ljg5OC44OTggMS4wMzQgMi4yNzUuMjMgMy4wNzhsLTIuMjk3IDIuMjk3IDIuMjk3LTIuMjk3Yy44MDQtLjgwMy42NjgtMi4xOC0uMjMtMy4wNzh6bS00LjA2MiA2LjQyYS4zOS4zOSAwIDAxLjI4NC42NjdMNi44OTggMTIuNDFsMS41MDQtMS41MDNhLjM5LjM5IDAgMDAtLjI4NC0uNjY3em0tLjkyNi0zLjk2NWMuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2ek01LjQxNCAxMi4xNWExLjc2MiAxLjc2MiAwIDAxLTEuMDQyLS41MjJjLS42MjYtLjYyNy0uNjkyLTEuNTExLS4yMy0xLjk3NEw2LjQ0IDcuMzU4IDQuMTQyIDkuNjU0Yy0uNDYyLjQ2My0uMzk2IDEuMzQ4LjIzIDEuOTc0LjMxMS4zMTEuNjg3LjQ4NCAxLjA0Mi41MjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA4djFoMXYxSDFWOWgxVjhIMVY3aDN2MUgzem0xIDR2Mkgxdi0xaDF2LTFIMXYtMWgzdjF6TTMgNWgxdjFIMVY1aDFWNEgxVjNoMnYyem0yLjUtMWg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JSZWRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclJlZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA2SDVDMy4wNTcgNiAyIDcuMDU3IDIgOXMxLjA1NyAzIDMgM2gxLjV2LTFINWMtMS4zOSAwLTItLjYxLTItMiAwLTEuMzkuNjEtMiAyLTJoNXYzbDMuNS0zLjVMMTAgM3YzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JSZWRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JTdHJpa2UgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yU3RyaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDIzIDEwaDEuMjc0Yy4wMDYuMDguMDEuMTY0LjAxLjI1YTIuNTU3IDIuNTU3IDAgMDEtLjg4MyAxLjk0OWMtLjI4NC4yNS0uNjI3LjQ0Ni0xLjAzLjU4OEE0LjA4NyA0LjA4NyAwIDAxOC4wMjggMTNhNC42MTYgNC42MTYgMCAwMS0zLjM4Mi0xLjQyNmMtLjE5My0uMjU5LS4xOTMtLjUgMC0uNzI0LjE5My0uMjIzLjQzOC0uMjY2LjczNS0uMTMuMzQzLjM2My43NDguNjU1IDEuMjEzLjg3Ni40NjYuMjIuOTQ5LjMzIDEuNDQ5LjMzLjYzNyAwIDEuMTMyLS4xNDQgMS40ODUtLjQzMy4zNTMtLjI5LjUzLS42Ny41My0xLjE0YTEuNzIgMS43MiAwIDAwLS4wMzQtLjM1M3pNNS41ODYgN2EyLjQ5IDIuNDkgMCAwMS0uMjk0LS41MDcgMi4zMTYgMi4zMTYgMCAwMS0uMTc3LS45MzRjMC0uMzYzLjA3Ni0uNzAxLjIyOC0xLjAxNS4xNTItLjMxNC4zNjMtLjU4Ni42MzMtLjgxNi4yNy0uMjMuNTg4LS40MS45NTUtLjUzN0EzLjY4MyAzLjY4MyAwIDAxOC4xNDUgM2MuNTc4IDAgMS4xMTIuMTEgMS42MDMuMzMuNDkuMjIxLjkwNy41MDggMS4yNS44NjEuMTYuMjgyLjE2LjUxMiAwIC42OTItLjE2LjE4LS4zOC4yMTQtLjY2Mi4xMDJhMy40MzggMy40MzggMCAwMC0uOTc4LS42NjkgMi45MTQgMi45MTQgMCAwMC0xLjIxMy0uMjQyYy0uNTQgMC0uOTczLjEyNS0xLjMwMi4zNzUtLjMyOC4yNS0uNDkyLjU5NS0uNDkyIDEuMDM2IDAgLjIzNi4wNDYuNDM0LjE0LjU5Ni4wOTIuMTYyLjIxNy4zMDQuMzc0LjQyNi4xNTcuMTIzLjMyOS4yMy41MTUuMzI0LjExOS4wNi4yNC4xMTYuMzYyLjE2OUg1LjU4NnpNMi41IDhoMTFhLjUuNSAwIDExMCAxaC0xMWEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclN0cmlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzdjJIMlYzdjEwaDEyVjN6TTIgMmgxMmMuNTUyIDAgMSAuNDEzIDEgLjkyM3YxMC4xNTRjMCAuNTEtLjQ0OC45MjMtMSAuOTIzSDJjLS41NTIgMC0xLS40MTMtMS0uOTIzVjIuOTIzQzEgMi40MTMgMS40NDggMiAyIDJ6bTAgNWgxMnYxSDJWN3ptMCAzaDEydjFIMnYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZGVybGluZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRlcmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDMuNTM2VjcuOGMwIDEuNjI4IDEuMjI0IDIuNiAzIDIuNiAxLjc4MyAwIDMtLjk3MiAzLTIuNlYzLjUzNmMwLS4zNTcuMTY3LS41MzYuNS0uNTM2LjMzMyAwIC41LjE3OS41LjUzNnY0LjMxOGMwIDIuMDkzLTEuNjY1IDMuNTQ2LTQgMy41NDZTNCA5Ljg5MyA0IDcuOFYzLjUzNkM0IDMuMTc5IDQuMTY3IDMgNC41IDNjLjMzMyAwIC41LjE3OS41LjUzNnpNMi41IDEzaDExYS41LjUgMCAxMTAgMWgtMTFhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRlcmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5kbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2aDVjMS45NDMgMCAzIDEuMDU3IDMgM3MtMS4wNTcgMy0zIDNIOXYtMWgxLjVjMS4zOSAwIDItLjYxIDItMiAwLTEuMzktLjYxLTItMi0yaC01djNMMiA2LjUgNS41IDN2M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5kbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDExMC0xem0tMy03YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTAgNGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0wIDRhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRW1haWwgPSBmdW5jdGlvbiBFdWlJY29uRW1haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuOTUgMy42ODRMOC42MzcgOC45MTJhMSAxIDAgMDEtMS4yNzYgMEwxLjA1MSAzLjY4NEEuOTk5Ljk5OSAwIDAwMSA0djhhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNGEuOTk5Ljk5OSAwIDAwLS4wNS0uMzE2ek0yIDJoMTJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptLS4yMSAxbDUuNTc2IDQuNjAzYTEgMSAwIDAwMS4yNy4wMDNMMTQuMjY4IDNIMS43OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcykpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FcWwgPSBmdW5jdGlvbiBFdWlJY29uRXFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODYyIDE0LjE4di4wMDFhLjQ4Mi40ODIgMCAwMS4xLjUyMS41LjUgMCAwMS0uNDQ3LjI5OWgtMy4xNDljLS4wNyAwLS4xMzYgMC0uMi0uMDAzYS42NjQuNjY0IDAgMDEtLjQxNC0uMTRjLS4zNS0uMzEtLjY4NC0uNjM3LTEuMDAxLS45ODFsLTEuNzcyLTEuNzM4YTUuOTQxIDUuOTQxIDAgMDEtMy44MDIuMTRsLS4wNDUtLjAxMmE1Ljg5IDUuODkgMCAwMS0yLjY4Mi0xLjcxMkE1LjcxNSA1LjcxNSAwIDAxMS4wOCA3LjcyYTUuNjYgNS42NiAwIDAxLjM0OC0zLjExOEE1Ljc4IDUuNzggMCAwMTMuMzkgMi4xMjRhNS45NzkgNS45NzkgMCAwMTYuMTM2LS41MDUgNS44MzYgNS44MzYgMCAwMTIuMzU2IDIuMTIzIDUuNjcgNS42NyAwIDAxLjg3MyAzLjAxN2wuMDAxLjAwM2MwIC4xMjgtLjA1MS4yNS0uMTQzLjM0YS40OTUuNDk1IDAgMDEtLjY5NCAwIC40NzYuNDc2IDAgMDEtLjE0My0uMzRjMC0uOTUtLjI4OC0xLjg3OC0uODI2LTIuNjY4YTQuODggNC44OCAwIDAwLTIuMTk4LTEuNzY5IDQuOTkgNC45OSAwIDAwLTIuODMtLjI3MyA0LjkzIDQuOTMgMCAwMC0yLjUwOSAxLjMxNCA0Ljc3NCA0Ljc3NCAwIDAwLTEuMzQgMi40NkE0LjcxNSA0LjcxNSAwIDAwMi4zNTIgOC42YTQuODIgNC44MiAwIDAwMS44MDQgMi4xNTVjLjgwNS41MjggMS43NTIuODEgMi43MjEuODFhNC44OTkgNC44OTkgMCAwMDEuMjk2LS4xOTRsLjAzMi0uMDA5LjcxNy0uMjExYS41MDYuNTA2IDAgMDEuNDgzLjExMWwxLjExIDEuMDI2IDEuNzg4IDEuNzUyaDIuMDNsLTMuNjU3LTMuNTgzYS40NzUuNDc1IDAgMDEuMDE0LS42NjYuNDk1LjQ5NSAwIDAxLjY3OS0uMDEzbDQuNDkzIDQuNDAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wOTcgMy40NjhMOS42NzkgNC45M2EuNDMzLjQzMyAwIDAxLjIxOC4zN3YyLjkyNGEuNDIyLjQyMiAwIDAxLS4yMTguMzdsLTIuNTgyIDEuNDYxYS40MzguNDM4IDAgMDEtLjQzNyAwTDQuMDc3IDguNTk0YS40MzMuNDMzIDAgMDEtLjIxOC0uMzdWNS4zYS40MjIuNDIyIDAgMDEuMjE4LS4zN0w2LjY2IDMuNDY3YS40NDYuNDQ2IDAgMDEuNDM3IDB6bTEuODQ1IDQuMjdWNS43ODRhLjMyOC4zMjggMCAwMC0uMTctLjI4N0w3LjA0NyA0LjUyYS4zNDIuMzQyIDAgMDAtLjMzOCAwbC0xLjcyNi45NzdhLjMzNi4zMzYgMCAwMC0uMTY4LjI4N3YxLjk1M2EuMzI2LjMyNiAwIDAwLjE3LjI4N2wxLjcyNC45NzdhLjM0Mi4zNDIgMCAwMC4zMzggMGwxLjcyNi0uOTc4YS4zMzQuMzM0IDAgMDAuMTY5LS4yODd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXJhc2VyID0gZnVuY3Rpb24gRXVpSWNvbkVyYXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNjQ4IDkuOTM3bDcuMjktNy4yODhhMi4yMSAyLjIxIDAgMDEzLjEyNCAwbDIuMjkgMi4yODhhMi4yMSAyLjIxIDAgMDEwIDMuMTI2TDEwLjQxMyAxM0gxMi41YS41LjUgMCAwMTAgMUg0LjUwMWEyLjIxIDIuMjEgMCAwMS0xLjU2My0uNjQ3bC43MDctLjcwN2MuMjI3LjIyNi41MzUuMzU0Ljg1Ni4zNTRoNC4wMDVhMS4yMSAxLjIxIDAgMDAuODQ4LS4zNTRsMS4yOTItMS4yOTMtNC00LTMuMjkgMy4yOTFhMS4yMSAxLjIxIDAgMDAwIDEuNzEybC4yOS4yOS0uNzA4LjcwNy0uMjktLjI5YTIuMjEgMi4yMSAwIDAxMC0zLjEyNnpNOCA2aDYuODlhMS4yMDggMS4yMDggMCAwMC0uMjQ2LS4zNTZMMTQgNUg5TDggNnptMi0yaDNsLS42NDUtLjY0NGExLjIxIDEuMjEgMCAwMC0xLjcxIDBMMTAgNHptNC44OSAzSDcuNzA4bDEgMUgxNGwuNjQ0LS42NDRBMS4yMiAxLjIyIDAgMDAxNC44OTEgN3pNOS43MDggOWwxLjY0NiAxLjY0NkwxMyA5SDkuNzA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMS41LS41YS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bS0xIDJhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcmFzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41MzUgMTIuNDkzYS40Ny40NyAwIDAxLjQ2OC40Njh2Mi41NjRhLjQ3My40NzMgMCAwMS0uNDY2LjQ3NUgzVjBIMTIuNTk1YS40NS40NSAwIDAxLjM5OC40NjN2Mi41NjVhLjQ2OS40NjkgMCAwMS0uNDY4LjQ2N2gtLjA2NWEuNDY4LjQ2OCAwIDAxLS40NjctLjQ2N1YxSDR2MTRoOC4wMWwtLjAwNy0yLjA0YzAtLjI1Ny4yMS0uNDY3LjQ2Ny0uNDY3aC4wNjV6bS0xLjA5Ni03LjU5bDIuMTIxIDIuMTIyYTEuNSAxLjUgMCAwMTAgMi4xMjFsLTIuMTIgMi4xMjJhLjUuNSAwIDExLS43MDgtLjcwOGwyLjEyMS0yLjEyYS41LjUgMCAwMDAtLjcwOGwtMi4xMjEtMi4xMjFhLjUuNSAwIDAxLjcwNy0uNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBhbmQgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzU0IDEyLjM1NGw4LThhLjUuNSAwIDAwLS43MDgtLjcwOGwtOCA4YS41LjUgMCAwMC43MDguNzA4ek0xIDEwLjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDExIDEzLjV2LTN6bTE0LTVhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDExMC0xaDNBMS41IDEuNSAwIDAxMTUgMi41djN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwYW5kTWluaSA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmRNaW5pKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNzA3IDEwTDEwIDYuNzA3QS41LjUgMCAwMDkuMjkzIDZMNiA5LjI5M2EuNS41IDAgMTAuNzA3LjcwN3pNNCA5LjVhLjUuNSAwIDAxMSAwdjFhLjUuNSAwIDAwLjUuNWgxYS41LjUgMCAxMTAgMWgtMUExLjUgMS41IDAgMDE0IDEwLjV2LTF6bTgtM2EuNS41IDAgMTEtMSAwdi0xYS41LjUgMCAwMC0uNS0uNWgtMWEuNS41IDAgMDEwLTFoMUExLjUgMS41IDAgMDExMiA1LjV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kTWluaTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkV4cG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDFjLjQyMi0uMDAzLjg0NC4xNyAxLjE2Ni41MTZsMS45NSAyLjA1Yy4yMTMuMjI4LjIxMy42IDAgLjgyOGEuNTIuNTIgMCAwMS0uNzcxIDBMOSAyLjQ1MXY3Ljk5M2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZ2LTcuOTZsLTEuODIgMS45MWEuNTIuNTIgMCAwMS0uNzcgMCAuNjE3LjYxNyAwIDAxMC0uODI5bDEuOTUtMi4wNUExLjU3NSAxLjU3NSAwIDAxOC41IDFoLjAwNXpNNC4xOCA3Yy0uNDczIDAtLjg4LjI5NC0uOTcyLjcwM2wtMS4xODkgNS4yNWEuNzc2Ljc3NiAwIDAwLS4wMTkuMTcyYzAgLjQ4My40NDQuODc1Ljk5Ljg3NUgxNC4wMWMuMDY1IDAgLjEzLS4wMDYuMTk0LS4wMTcuNTM3LS4wOTUuODg1LS41NTYuNzc4LTEuMDNsLTEuMTktNS4yNUMxMy43IDcuMjk0IDEzLjI5MyA3IDEyLjgyMiA3SDQuMTh6TTYgNnYxaDVWNmgxLjgyNWMuOTQ2IDAgMS43Ni42MDYgMS45NDYgMS40NDdsMS4xOSA1LjRjLjIxNS45NzUtLjQ4MiAxLjkyMy0xLjU1NiAyLjExOGEyLjE4IDIuMTggMCAwMS0uMzkuMDM1SDIuOTg1QzEuODg4IDE1IDEgMTQuMTk0IDEgMTMuMmMwLS4xMTkuMDEzLS4yMzcuMDM5LS4zNTNsMS4xOS01LjRDMi40MTQgNi42MDYgMy4yMjkgNiA0LjE3NCA2SDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllID0gZnVuY3Rpb24gRXVpSWNvbkV5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljk4IDcuODczYy4wMTMuMDMuMDIuMDY0LjAyLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRTLjA0NyA4LjE4OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyczcuOTUzIDUuODEzIDcuOTggNS44NzN6bS0xLjM3LS40MjRhMTIuMDk3IDEyLjA5NyAwIDAwLTEuMzg1LTEuODYyQzExLjczOSAzLjk1NiA5Ljk5OSAzIDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4wOTUgMTIuMDk1IDAgMDAxLjcgMi40MTNDNC4yNiAxMi4wNDMgNi4wMDIgMTMgOCAxM3MzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhjLS4wOC0uMTUtLjE4OS0uMzQzLS4zMTUtLjU1MXpNOCA0Ljc1QTMuMjUzIDMuMjUzIDAgMDExMS4yNSA4IDMuMjU0IDMuMjU0IDAgMDE4IDExLjI1IDMuMjUzIDMuMjUzIDAgMDE0Ljc1IDggMy4yNTIgMy4yNTIgMCAwMTggNC43NXptMCAxQzYuNzYgNS43NSA1Ljc1IDYuNzYgNS43NSA4UzYuNzYgMTAuMjUgOCAxMC4yNSAxMC4yNSA5LjI0IDEwLjI1IDggOS4yNCA1Ljc1IDggNS43NXptMCAxLjVhLjc1Ljc1IDAgMTAwIDEuNS43NS43NSAwIDAwMC0xLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllQ2xvc2VkID0gZnVuY3Rpb24gRXVpSWNvbkV5ZUNsb3NlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzE4IDEzLjQ3bC43NzYtLjc3NkE2LjA0IDYuMDQgMCAwMDggMTNjMS45OTkgMCAzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhhMTIuMDk3IDEyLjA5NyAwIDAwLTEuNzAxLTIuNDEzbC0uMDExLS4wMTIuNzA3LS43MDhjMS4zNTkgMS40NzYgMi4wNDUgMi45NzYgMi4wNTggMy4wMDYuMDE0LjAzLjAyMS4wNjQuMDIxLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRhNy4wMyA3LjAzIDAgMDEtMi42ODItLjUzek0yLjA0IDExLjA5MkMuNzA3IDkuNjI5LjAzNCA4LjE1OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyYy45NjIgMCAxLjgzNy4xOTIgMi42MjUuNTA3bC0uNzguNzhBNi4wMzkgNi4wMzkgMCAwMDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4xMSAxMi4xMSAwIDAwMS42NzQgMi4zODNsLS43MDguNzA4ek04LjM2MiA0Ljc3TDcuMjU1IDUuODc3YTIuMjYyIDIuMjYyIDAgMDAtMS4zNzggMS4zNzhMNC43NyA4LjM2MkEzLjI1MiAzLjI1MiAwIDAxOC4zNjIgNC43N3ptMi44NiAyLjc5N2EzLjI1NCAzLjI1NCAwIDAxLTMuNjU0IDMuNjU0bDEuMDYtMS4wNmEyLjI2MiAyLjI2MiAwIDAwMS41MzMtMS41MzNsMS4wNi0xLjA2em0tOS4zNjggNy4yODdhLjUuNSAwIDAxLS43MDgtLjcwOGwxMy0xM2EuNS41IDAgMDEuNzA4LjcwOGwtMTMgMTN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZUNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZUhhcHB5ID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VIYXBweShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0yLjczOSA4LjgwMmEuNTMzLjUzMyAwIDAxLjkyMi0uNTM3QzQuODE1IDEwLjI0NSA2LjI0OSAxMS4yIDggMTEuMmMxLjc1IDAgMy4xODUtLjk1NiA0LjM0LTIuOTM1YS41MzMuNTMzIDAgMDEuOTIuNTM3Yy0xLjMzMyAyLjI4Ny0zLjEgMy40NjUtNS4yNiAzLjQ2NS0yLjE2IDAtMy45MjctMS4xNzgtNS4yNi0zLjQ2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZUhhcHB5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlTmV1dHJhbCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlTmV1dHJhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0zLjIgMTAuNjY3YS41MzMuNTMzIDAgMDEwLTEuMDY3aDkuNmEuNTMzLjUzMyAwIDExMCAxLjA2N0gzLjJ6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlTmV1dHJhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZVNhZCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlU2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTIuNDg3IDMuODY4YS41MzMuNTMzIDAgMTEtLjcwOC43OTdDMTAuOTM2IDkuNzI1IDkuNDU4IDkuMDY3IDggOS4wNjdjLTEuNDU4IDAtMi45MzcuNjU3LTQuNDQ2IDEuOTk4YS41MzMuNTMzIDAgMTEtLjcwOC0uNzk3QzQuNTM2IDguNzY1IDYuMjU4IDggOCA4czMuNDYzLjc2NSA1LjE1NCAyLjI2OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZVNhZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljk5OSAxNS45OTlhOCA4IDAgMTEwLTE2IDggOCAwIDAxMCAxNnpNOCAxNUE3IDcgMCAxMDggMWE3IDcgMCAwMDAgMTR6TTMuNSA1aDlhLjUuNSAwIDExMCAxaC05YS41LjUgMCAwMTAtMXptMiAzaDVhLjUuNSAwIDExMCAxaC01YS41LjUgMCAwMTAtMXptMiAzaDFhLjUuNSAwIDExMCAxaC0xYS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GbGFnID0gZnVuY3Rpb24gRXVpSWNvbkZsYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY4NiA4LjQ2NGMxLjU0Ny0uNjE5IDMuMDgtLjYxOSA0LjYyOCAwQS41LjUgMCAwMDEzIDhWMmEuNS41IDAgMDAtLjI3Ni0uNDQ3QzExLjI1OS44MiA5LjQ1OC44MiA3LjM0MiAxLjUyNmMtMS44ODQuNjI4LTMuNDE3LjYyOC00LjYxOC4wMjdBLjUuNSAwIDAwMiAydjEyLjVhLjUuNSAwIDEwMSAwVjguNTUzYzEuNDExLjYyNyAyLjk4My41OTIgNC42ODYtLjA4OXpNMyAyLjc0MWMxLjMyMi40MiAyLjg3OC4zMjcgNC42NTgtLjI2N0M5LjQgMS44OTQgMTAuODQzIDEuODUgMTIgMi4zMjJ2NC45NzVjLTEuNTYtLjQ2NC0zLjEyOC0uMzg0LTQuNjg2LjIzOS0xLjU0LjYxNi0yLjg5Mi42MTYtNC4wOS4wMTdBLjQ5OC40OTggMCAwMDMgNy41VjIuNzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZsYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQuMTkyTDcuNTMgMi40OWEuNjcuNjcgMCAwMC45NDIgMEwxMC44Ni4xOTJhLjY3Ny42NzcgMCAwMS45NDQgMCAuNjUuNjUgMCAwMTAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAxMC0uOTMuNjc3LjY3NyAwIDAxLjk0NCAwem0wIDE1LjYxNmwyLjM5LTIuMjk4YS42Ny42NyAwIDAxLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwMDAtLjkzbC0yLjM4OC0yLjNhMi4wMiAyLjAyIDAgMDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAwMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjExaDYuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2My40MTZhNC45NjIgNC45NjIgMCAwMC0xLS4zMTZWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAxNiAyLjg3NVYyem0xMCAxMGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAySDJ2MTFoMTJWNEg4LjEyNUExLjEyNSAxLjEyNSAwIDAxNyAyLjg3NVYyem0uMjUtMWEuNzUuNzUgMCAwMS43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDE0YTEgMSAwIDAxMSAxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDkuNWwuODI2LTMuNzE3QTEgMSAwIDAxMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMDE2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41SDcuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtLjQ0NyAyLjAxMWE1LjAxNSA1LjAxNSAwIDAwLS44ODctLjYxOEwxNC43NTMgNkgyLjgwM2wtMS41NTYgN3pNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAxLS41Ny0uNDk1bC0uMjktMi4wMTVhLjg2Ny44NjcgMCAxMTEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwMS0uNTcuNDk1em0wIDIuNWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlck9wZW4gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgOS41bC44MjYtMy43MTdBMSAxIDAgMDEyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwMTYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVoMTEuOTVsMS41NTYtN0gyLjgwM2wtMS41NTYgN3pNMTMgMTRIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtMS41NTYgN2ExIDEgMCAwMS0uOTc2Ljc4M0gxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVOZXh0ID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lTmV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTUuMTQ2LjIybDcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAxMCAyLjM5OGwtNy4yIDQuNTgxQzcuMjEgMTQuMzc1IDYgMTMuNjkyIDYgMTIuNTgxVjMuNDJjMC0xLjExMiAxLjIxLTEuNzk1IDIuMTQ2LTEuMnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lTmV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVQcmV2aW91cyA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZVByZXZpb3VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMmExIDEgMCAwMTEgMXYxMGExIDEgMCAxMS0yIDBWM2ExIDEgMCAwMTEtMXptLTUuMTQ2LjIybC03LjIgNC41ODFhMS40MjUgMS40MjUgMCAwMDAgMi4zOThsNy4yIDQuNTgxYy45MzYuNTk1IDIuMTQ2LS4wODggMi4xNDYtMS4xOTlWMy40MmMwLTEuMTExLTEuMjEtMS43OTQtMi4xNDYtMS4xOTl6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GcmFtZVByZXZpb3VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdWxsU2NyZWVuRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgN1YzaDF2M2gzdjFIOXpNNyA3SDNWNmgzVjNoMXY0em0yIDJoNHYxaC0zdjNIOVY5ek03IDl2NEg2di0zSDNWOWg0ek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDN2NGgtMVY0SDlWM2g0ek0zIDNoNHYxSDR2M0gzVjN6bTEwIDEwSDl2LTFoM1Y5aDF2NHpNMyAxM1Y5aDF2M2gzdjFIM3pNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwMTE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAxMCAxNC4wMDZWMS45OTR6bTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwMC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAwMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwMDEgMS45OTR6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDIuMjI2djIuMjE4Yy0uMzU5LS4xNDMtLjg0NS0uMjE4LTEuMzE1LS4yMTgtMS4wNTkgMC0xLjYzMS41MTktMS44MDIgMS41NjVsLS4xNjguOTM3aDIuNzk4djIuMTU5SDkuNDFsLS4zMTMgMS42NzRDOC42OTYgMTIuOTg3IDcuMjYxIDE0IDQuNzg1IDE0Yy0uNzE4IDAtMS4zNS0uMDkyLTEuNzg1LS4yNTF2LTIuMjQzYy40MTguMTc2LjkwNS4yNjggMS4zODMuMjY4IDEuMDA4IDAgMS41NDYtLjQzNSAxLjcyNS0xLjUyM2wuMjQtMS4zNjRIMy43ODdWNi43MjhoMi44MTJsLjI4OC0xLjI2NEM3LjI4NiAzLjA3MSA4LjY2MiAyIDExLjM1MiAyYy41OTggMCAxLjMwNi4xIDEuNjQ4LjIyNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdlYXIgPSBmdW5jdGlvbiBFdWlJY29uR2VhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4xNjQgMTAuMzI5TDEuODcgOCAuMTYzIDUuNjdjLjE4LS42MDEuNDMtMS4xOS43NTgtMS43NTdhOC4xOTcgOC4xOTcgMCAwMTEuMTQyLTEuNTM1bDIuODcyLjMxM0w2LjA5OS4wNWE4LjE2NiA4LjE2NiAwIDAxMy44LS4wMDNsMS4xNjYgMi42NDQgMi44NzItLjMxM2E4LjE2NiA4LjE2NiAwIDAxMS44OTkgMy4yOTNMMTQuMTMgOGwxLjcwNiAyLjMzYy0uMTguNjAxLS40MyAxLjE5LS43NTggMS43NTdhOC4xOTcgOC4xOTcgMCAwMS0xLjE0MiAxLjUzNWwtMi44NzItLjMxMy0xLjE2NCAyLjY0MWE4LjE2NiA4LjE2NiAwIDAxLTMuOC4wMDNsLTEuMTY2LTIuNjQ0LTIuODcyLjMxM2E4LjE2NiA4LjE2NiAwIDAxLTEuODk5LTMuMjkzem00LjY2MyAxLjk4NmExIDEgMCAwMTEuMDIzLjU5MWwuOTU3IDIuMTdjLjc5LjEzNCAxLjU5Ny4xMzIgMi4zODctLjAwMWwuOTU2LTIuMTY5YTEgMSAwIDAxMS4wMjMtLjU5bDIuMzU4LjI1NmE3LjIzIDcuMjMgMCAwMDEuMTk0LTIuMDY4bC0xLjQwMS0xLjkxM2ExIDEgMCAwMTAtMS4xODJsMS40LTEuOTEyYTcuMTY1IDcuMTY1IDAgMDAtMS4xOTItMi4wNjlsLTIuMzU5LjI1N2ExIDEgMCAwMS0xLjAyMy0uNTkxTDkuMTkzLjkyNGE3LjE2NSA3LjE2NSAwIDAwLTIuMzg3LjAwMUw1Ljg1IDMuMDk0YTEgMSAwIDAxLTEuMDIzLjU5bC0yLjM1OC0uMjU2YTcuMjMgNy4yMyAwIDAwLTEuMTk0IDIuMDY4bDEuNDAxIDEuOTEzYTEgMSAwIDAxMCAxLjE4MmwtMS40IDEuOTEyYy4yOC43NTEuNjgxIDEuNDUgMS4xOTIgMi4wNjlsMi4zNTktLjI1N3pNOCAxMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0xYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HbGFzc2VzID0gZnVuY3Rpb24gRXVpSWNvbkdsYXNzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAzNSA5QTMuNSAzLjUgMCAwMTE1IDcuMDVWNC41YzAtMS4wNzItLjY0OC0xLjcyLTIuMDk4LTIuMDFhLjUuNSAwIDAxLjE5Ni0uOThDMTQuOTgxIDEuODg2IDE2IDIuOTA1IDE2IDQuNXY0LjI1YzAgLjA3Mi0uMDE1LjE0LS4wNDMuMjAyQTMuNSAzLjUgMCAxMTkuMDM1IDEwaC0yLjA3QTMuNSAzLjUgMCAxMS4wNDMgOC45NTIuNDk4LjQ5OCAwIDAxMCA4Ljc1VjQuNWMwLTEuNTk1IDEuMDE5LTIuNjE0IDIuOTAyLTIuOTlhLjUuNSAwIDAxLjE5Ni45OEMxLjY0OCAyLjc4IDEgMy40MjggMSA0LjV2Mi41NUEzLjUgMy41IDAgMDE2Ljk2NSA5aDIuMDd6TTMuNSAxMmEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em05IDBhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xhc3NlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uR2xvYmUgPSBmdW5jdGlvbiBFdWlJY29uR2xvYmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxOSA4YTYuNDYyIDYuNDYyIDAgMDAxLjAwMyAzaDIuMzgyYTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2LTNoLTIuOTl6bTAtMWgyLjk4OWMuMDMzLTEuMDc4LjE3Mi0yLjA5NC4zOTYtM0gyLjAyMmE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzIDN6TTEzLjk4IDhoLTIuOTg5YTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2IDNoMi4zODJhNi40NjIgNi40NjIgMCAwMDEuMDAzLTN6bTAtMWE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzLTNoLTIuMzgyYy4yMjQuOTA2LjM2MyAxLjkyMi4zOTYgM2gyLjk5ek01LjAwOCA4Yy4wMzcgMS4xMDcuMTk1IDIuMTI3LjQyOSAzaDQuMTI2Yy4yMzQtLjg3My4zOTItMS44OTMuNDI5LTNINS4wMDh6bTAtMWg0Ljk4NGExMy40MjIgMTMuNDIyIDAgMDAtLjQyOS0zSDUuNDM3YTEzLjQyMiAxMy40MjIgMCAwMC0uNDI5IDN6TS4wMTYgOEgwVjdoLjAxNmE3LjUgNy41IDAgMDExNC45NjggMEgxNXYxaC0uMDE2QTcuNSA3LjUgMCAwMS4wMTYgOHptMi43OTQgNGE2LjUwMSA2LjUwMSAwIDAwMi43MTcgMS42OTVBNy4zMTUgNy4zMTUgMCAwMTQuNyAxMkgyLjgxem05LjM4IDBIMTAuM2MtLjIzLjY1Ny0uNTEgMS4yMy0uODI3IDEuNjk1QTYuNTAxIDYuNTAxIDAgMDAxMi4xOSAxMnptLTYuNDI4IDBjLjQ4NCAxLjI0IDEuMTMyIDIgMS43MzggMiAuNjA2IDAgMS4yNTQtLjc2IDEuNzM4LTJINS43NjJ6TTIuODEgM0g0LjdjLjIzLS42NTcuNTEtMS4yMy44MjctMS42OTVBNi41MDEgNi41MDEgMCAwMDIuODEgM3ptOS4zOCAwYTYuNTAxIDYuNTAxIDAgMDAtMi43MTctMS42OTVjLjMxNy40NjUuNTk3IDEuMDM4LjgyNyAxLjY5NWgxLjg5ek01Ljc2MiAzaDMuNDc2QzguNzU0IDEuNzYgOC4xMDYgMSA3LjUgMWMtLjYwNiAwLTEuMjU0Ljc2LTEuNzM4IDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsb2JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiID0gZnVuY3Rpb24gRXVpSWNvbkdyYWIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNSA2Yy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTF6bTAgM2MuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjc2LjIyOS0uNS41LS41aDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDIuNWMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6bTMgMGMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmlkID0gZnVuY3Rpb24gRXVpSWNvbkdyaWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMXptMy0xVjJIMnYyaDJ6bTIgMVYxaDR2NEg2em0zLTFWMkg3djJoMnptMiAxVjFoNHY0aC00em0xLTFoMlYyaC0ydjJ6TTEgMTBWNmg0djRIMXptMy0xVjdIMnYyaDJ6bTIgMVY2aDR2NEg2em0zLTFWN0g3djJoMnptMiAxVjZoNHY0aC00em0zLTFWN2gtMnYyaDJ6TTEgMTV2LTRoNHY0SDF6bTEtMWgydi0ySDJ2MnptNCAxdi00aDR2NEg2em0xLTFoMnYtMkg3djJ6bTQgMXYtNGg0djRoLTR6bTEtMWgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyaWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkhlYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MDIgMy4wOThhMy43NSAzLjc1IDAgMDAtNS4zMDQgNS4zMDRsNS41NTggNS4yN0w4IDE0bDUuODkyLTUuNTg4YTMuNzUgMy43NSAwIDEwLTUuMjk0LTUuMzEzTDggMy42OTdsLS41OTgtLjU5OXpNMi43OTYgNy42ODVhMi43NDcgMi43NDcgMCAwMS4wMS0zLjg4IDIuNzUgMi43NSAwIDAxMy44ODkgMEw4IDUuMTExbDEuMzA1LTEuMzA2YTIuNzUgMi43NSAwIDExMy44OSAzLjg5TDggMTIuNjIgMi43OTYgNy42ODV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25IZWF0bWFwID0gZnVuY3Rpb24gRXVpSWNvbkhlYXRtYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA5YTMgMyAwIDExMCA2IDMgMyAwIDAxMC02em0wIDFhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTQgMmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptMCAxYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0wIDVhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMWEzIDMgMCAxMDAgNiAzIDMgMCAwMDAtNnptOC05YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0wIDFhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXRtYXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlbHAgPSBmdW5jdGlvbiBFdWlJY29uSGVscChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42IDEyLjE4NmwtMS4zNTctMS4zNThjLS4wMjUtLjAyNS0uMDU4LS4wMzQtLjA4NC0uMDU2LjUzLS43OTQuODQtMS43NDYuODQtMi43NzNhNC45NzcgNC45NzcgMCAwMC0uODQtMi43NzJjLjAyNi0uMDIuMDU5LS4wMy4wODQtLjA1NkwxMy42IDMuODEzYTYuOTYgNi45NiAwIDAxMCA4LjM3M3pNOCAxNUE2Ljk1NiA2Ljk1NiAwIDAxMy44MTQgMTMuNmwxLjM1OC0xLjM1OGMuMDI1LS4wMjUuMDM0LS4wNTcuMDU1LS4wODRDNi4wMiAxMi42ODggNi45NzQgMTMgOCAxM2E0Ljk3OCA0Ljk3OCAwIDAwMi43NzMtLjg0Yy4wMi4wMjYuMDMuMDU4LjA1Ni4wODNsMS4zNTcgMS4zNThBNi45NTYgNi45NTYgMCAwMTggMTV6bS01LjYwMS0yLjgxM2E2Ljk2MyA2Ljk2MyAwIDAxMC04LjM3M2wxLjM1OSAxLjM1OGMuMDI0LjAyNS4wNTcuMDM1LjA4NC4wNTZBNC45NyA0Ljk3IDAgMDAzIDhjMCAxLjAyNy4zMSAxLjk4Ljg0MiAyLjc3My0uMDI3LjAyMi0uMDYuMDMxLS4wODQuMDU2bC0xLjM2IDEuMzU4em01LjYtLjE4N0E0IDQgMCAxMTggNGE0IDQgMCAwMTAgOHpNOCAxYzEuNTczIDAgMy4wMTkuNTI1IDQuMTg3IDEuNGwtMS4zNTcgMS4zNThjLS4wMjUuMDI1LS4wMzUuMDU3LS4wNTYuMDg0QTQuOTc5IDQuOTc5IDAgMDA4IDNhNC45NzkgNC45NzkgMCAwMC0yLjc3My44NDJjLS4wMjEtLjAyNy0uMDMtLjA1OS0uMDU1LS4wODRMMy44MTQgMi40QTYuOTU3IDYuOTU3IDAgMDE4IDF6bTAtMWE4LjAwMSA4LjAwMSAwIDEwLjAwMyAxNi4wMDJBOC4wMDEgOC4wMDEgMCAwMDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVscDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSG9tZSA9IGZ1bmN0aW9uIEV1aUljb25Ib21lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xMyAxLjIyOWw1LjUgNC40N2ExIDEgMCAwMS4zNy43NzdWMTRhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjYuNDc2YTEgMSAwIDAxLjM3LS43NzZsNS41LTQuNDcxYTEgMSAwIDAxMS4yNiAwek0xMyA2LjQ3Nkw3LjUgMi4wMDUgMiA2LjQ3NVYxNGgxMVY2LjQ3NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSG9tZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSUluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbklJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTEuNTA4TDcuNDY4IDhINi4yNVY3aDIuNDAxbC4wMyAzLjUwOEg5Ljh2MUg3LjV6bS0uMjUtNi4yMDJhLjgzLjgzIDAgMDEuMjA3LS41NzdjLjEzNy0uMTUzLjMzNC0uMjI5LjU5LS4yMjkuMjU2IDAgLjQ1NC4wNzYuNTk0LjIzLjE0LjE1Mi4yMDkuMzQ1LjIwOS41NzYgMCAuMjI4LS4wNy40MTctLjIxLjU2OC0uMTQuMTUtLjMzNy4yMjYtLjU5My4yMjYtLjI1NiAwLS40NTMtLjA3NS0uNTktLjIyNmEuODEuODEgMCAwMS0uMjA3LS41Njh6TTggMTNBNSA1IDAgMTA4IDNhNSA1IDAgMDAwIDEwem0wIDFBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkltYWdlID0gZnVuY3Rpb24gRXVpSWNvbkltYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTIgMiAwIDExLTQgMCAyIDIgMCAwMTQgMHptOS00YTEgMSAwIDAxMSAxdjEyYTEgMSAwIDAxLTEgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xem0tMy40NDggNi4xMzRsLTMuNzYgMi43NjlhLjUuNSAwIDAxLS40MzYuMDc3bC0uMDg3LS4wMzQtMS43MTMtLjg3TDEgMTEuOFYxNGgxNFY5Ljc1MWwtMy40NDgtMi42MTd6TTE1IDJIMXY4LjYzNWw0LjI4LTIuNTU4YS41LjUgMCAwMS4zODktLjA1NGwuMDk0LjAzNyAxLjY4NC44NTUgMy44MTMtMi44MDdhLjUuNSAwIDAxLjUyLS4wNDVsLjA3OS4wNUwxNSA4LjQ5NVYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbWFnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW1wb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkltcG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTAuMTE0bDEuODUtMS45NDNhLjUyLjUyIDAgMDEuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAxLTIuMzEgMEw1LjQxIDlhLjYxNy42MTcgMCAwMTAtLjgyOS41Mi41MiAwIDAxLjc3IDBMOCAxMC4wODJWMS41NTZDOCAxLjI0OSA4LjIyNCAxIDguNSAxcy41LjI0OS41LjU1NnY4LjU1OHpNNC4xOCA2YS45OTMuOTkzIDAgMDAtLjk3Mi44MDRsLTEuMTg5IDZBLjk5NS45OTUgMCAwMDIuOTkxIDE0aDExLjAxOGExIDEgMCAwMC45NzItMS4xOTZsLTEuMTktNmEuOTkzLjk5MyAwIDAwLS45Ny0uODA0SDQuMTh6TTYgNXYxaDVWNWgxLjgyNWMuOTQ2IDAgMS43Ni42NzMgMS45NDYgMS42MDhsMS4xOSA2QTIgMiAwIDAxMTQuMDE2IDE1SDIuOTg0YTEuOTkyIDEuOTkyIDAgMDEtMS45NDUtMi4zOTJsMS4xOS02QzIuNDE0IDUuNjczIDMuMjI5IDUgNC4xNzQgNUg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbXBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4Q2xvc2UgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhDbG9zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUuNS0xLjIwN0w5LjA4NiA4LjM3OWwtLjcwNy43MDdMOS43OTMgMTAuNWwtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNC0xLjQxNCAxLjQxNCAxLjQxNC43MDctLjcwNy0xLjQxNC0xLjQxNCAxLjQxNC0xLjQxNC0uNzA3LS43MDdMMTAuNSA5Ljc5M3pNMyAxMXYtMWgxdjFIM3ptNy41LTVhNC41IDQuNSAwIDExMCA5IDQuNSA0LjUgMCAwMTAtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhDbG9zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg0djFIMVYxaDEydjVoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoNnYxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoM3YxSDV6bS0yIDB2LTFoMXYxSDN6bTQuNTAyIDEuNDFMMTIuOTEzIDcgMTUgOS4wODdsLTUuNDEgNS40MUw3IDE1bC41MDItMi41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleEZsdXNoID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Rmx1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuNTE2IDlIMTAuNWEuNS41IDAgMDEwLTFoNC4wMTZMMTMuMTEgNS45NDhjLS4xNzEtLjI1Mi0uMTM3LS42Mi4wNzktLjgyMS4yMTctLjIuNTMxLS4xNTkuNzAzLjA5MmwyIDIuOTE2YS42NDguNjQ4IDAgMDEuMTA4LjM5Ny42NDMuNjQzIDAgMDEtLjEwOC4zMzJsLTIgMi45MThBLjQ3OC40NzggMCAwMTEzLjUgMTJhLjQ1Ny40NTcgMCAwMS0uMzEyLS4xMjdjLS4yMTYtLjIwMi0uMjUtLjU3LS4wNzktLjgyTDE0LjUxNiA5ek0zIDE1SDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNy44Yy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDIuMiAyLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWN2gtMVY1SDguNWEuNS41IDAgMDEtLjUtLjVWMkgzdjEyaDh2LTRoMXY0YTEgMSAwIDAxLTEgMUgzem0tMS0xVjJIMXYxMmgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEZsdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleE1hcHBpbmcgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhNYXBwaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA4SDQuOTE1YTEuNSAxLjUgMCAxMTAtMUg4VjIuNUExLjUgMS41IDAgMDE5LjUgMWgyLjU4NWExLjUgMS41IDAgMTEwIDFIOS41YS41LjUgMCAwMC0uNS41djEwYS41LjUgMCAwMC41LjVoMi41ODVhMS41IDEuNSAwIDExMCAxSDkuNUExLjUgMS41IDAgMDE4IDEyLjVWOHpNMy41IDNhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3ptMCAxMmExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzem0xMC02YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4TWFwcGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4T3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUtMUg4djFoMnYyaDF2LTJoMnYtMWgtMlY4aC0xdjJ6bS03IDF2LTFoMXYxSDN6bTcuNS01YTQuNSA0LjUgMCAxMTAgOSA0LjUgNC41IDAgMDEwLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4T3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhSdW50aW1lID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4UnVudGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjYuODM5bC0xLS43MDdWMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTF2LTFINXYxaDN6bTAtMy4wNTVjMC0uMzQyLjA4Mi0uNjY0LjIzLS45NDVINXYxaDN2LS4wNTV6TTUgNWg1Ljk5OVY0SDV2MXpNMyA0djFoMVY0SDN6bTAgM3YxaDFWN0gzem0wIDN2MWgxdi0xSDN6bTExLjYwNy4ybC00LjMyLTMuMDU1QzkuNzI3IDYuNzUgOSA3LjIwNCA5IDcuOTQ1djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4UnVudGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDUuOTk5VjRINXYxek0zIDVoMVY0SDN2MXptMCAzaDFWN0gzdjF6bTYuMDIyLTFsLS4xNS4zMzMtLjczNy0uMDc4LS40NjctLjA1LS4zMy4zNDJBNS4xMyA1LjEzIDAgMDA2Ljk0OCA4SDVWN2g0LjAyMnptLTMuMDA1IDNMNiAxMC4wNTZsLjMwNi40MTEuMzk5LjUzM0g1di0xaDEuMDE3ek0zIDExaDF2LTFIM3YxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNy4wNWwtLjE2Mi0uMzU5LS4yLS40NDctLjQ3LS4xMUE1LjAxOSA1LjAxOSAwIDAwMTIgNi4wOThWMkgydjExaDQuMzZjLjE1Ny4zNTQuMzU1LjY5LjU5IDFIMVYxaDEydjYuMDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4wMDQgN2MuMzIyIDAgLjY0Ni4wMzYuOTY2LjEwOWwuNTk1IDEuMjkzIDEuNDY1LS4xNTJjLjQ1Ny40NjIuNzg2IDEuMDE2Ljk2OSAxLjYxbC0uODcgMS4xNC44NzEgMS4xNDFhMy45NCAzLjk0IDAgMDEtLjM4Ny44NTkgNC4wNTggNC4wNTggMCAwMS0uNTgzLjc1bC0xLjQ2NS0uMTUyLS41OTQgMS4yOTJhNC4zNyA0LjM3IDAgMDEtMS45NDEuMDAxbC0uNTk0LTEuMjkzLTEuNDY2LjE1MmEzLjk1NCAzLjk1NCAwIDAxLS45NjktMS42MWwuODctMS4xNEw3IDkuODZhMy45NDcgMy45NDcgMCAwMS45Ny0xLjYxbDEuNDY2LjE1Mi41OTMtMS4yOTJhNC4zNyA0LjM3IDAgMDEuOTc1LS4xMXpNMTEgMTJhMSAxIDAgMTAuMDAyLTEuOTk4QTEgMSAwIDAwMTEgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4U2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbklucHV0T3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbklucHV0T3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTMuOTk5di0yLjk5aDFWMTVIMFYxaDExdjMuOTk5aC0xVjIuMDAxSDF2MTEuOTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEwVjlIMTF2MXpNMTMgOS41bDMtMy0zLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNi41djZsLTMtM3pNNyA3VjZoNi41djF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklucHV0T3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbnNwZWN0ID0gZnVuY3Rpb24gRXVpSWNvbkluc3BlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zNjMgMTQuNjU4YS41LjUgMCAxMS0uNzEzLjdsLTIuOTctMy4wMjNhLjUuNSAwIDAxLjAwMS0uN0EzLjkgMy45IDAgMTA4LjkgMTIuOGEuNS41IDAgMTEwIC45OTkgNC45IDQuOSAwIDExMy44MjEtMS44MzNsMi42NDIgMi42OTF6TTMuMDk0IDEzYS41LjUgMCAxMTAgMUgyLjVBMi41IDIuNSAwIDAxMCAxMS41di05QTIuNSAyLjUgMCAwMTIuNSAwaDlBMi41IDIuNSAwIDAxMTQgMi41di41OTlhLjUuNSAwIDExLTEgMFYyLjVBMS41IDEuNSAwIDAwMTEuNSAxaC05QTEuNSAxLjUgMCAwMDEgMi41djlBMS41IDEuNSAwIDAwMi41IDEzaC41OTR6TTIuNSAzYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTQgMmEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTIgMWEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDNhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptNi02YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tOCA4YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluc3BlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkludmVydCA9IGZ1bmN0aW9uIEV1aUljb25JbnZlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEzLjI1YTUuMjUgNS4yNSAwIDEwMC0xMC41IDUuMjUgNS4yNSAwIDAwMCAxMC41ek04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmE2IDYgMCAxMDAgMTJWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW52ZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JcCA9IGZ1bmN0aW9uIEV1aUljb25JcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMmg4em0tMiAzSDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1ek02IDVINXY2aDFWNXptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LZXlib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25LZXlib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAzaDE2djExSDBWM3ptMTUgMTBWNEgxdjloMTR6TTIgNWgydjFIMlY1em0yIDd2LTFIMnYxaDJ6bTEwLTF2MWgtMnYtMWgyem0tMyAxdi0xSDV2MWg2ek01IDVoMXYxSDVWNXpNMyA3SDJ2MWgxVjd6bTMgMGgxdjFINlY3ek0zIDlIMnYxaDFWOXptMyAwaDF2MUg2Vjl6bTItNEg3djFoMVY1ek00IDdoMXYxSDRWN3ptNSAwSDh2MWgxVjd6bTEgMGgxdjFoLTFWN3pNNSA5SDR2MWgxVjl6bTMgMGgxdjFIOFY5em0zIDBoLTF2MWgxVjl6TTkgNWgxdjFIOVY1em0zIDBoLTF2MWgxVjV6bTEgMGgxdjFoLTFWNXptMSAyaC0ydjNoMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXlib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsRmllbGQgPSBmdW5jdGlvbiBFdWlJY29uS3FsRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTAsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTBcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDlhNSA1IDAgMTEwLTggNSA1IDAgMTEwIDh6bS43NS0uNjkyYTQgNCAwIDEwMC02LjYxNUE0Ljk4MSA0Ljk4MSAwIDAxMTAgNWE0Ljk4MSA0Ljk4MSAwIDAxLTEuMjUgMy4zMDh6TTQuMTMzIDhWNS41NTloMi40OTZ2LS42MjVINC4xMzNWMi45OTZoMi43MTl2LS42MzNIMy40M1Y4aC43MDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LcWxGdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25LcWxGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgN0gzdjJoNHYybDMtMy0zLTN2MnpNNiA2VjVhMSAxIDAgMDExLjcwNy0uNzA3bDMgM2ExIDEgMCAwMTAgMS40MTRsLTMgM0ExIDEgMCAwMTYgMTF2LTFIM2ExIDEgMCAwMS0xLTFWN2ExIDEgMCAwMTEtMWgzem03LjUtM2EuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbE9wZXJhbmQgPSBmdW5jdGlvbiBFdWlJY29uS3FsT3BlcmFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjE5MiAxMC4xNDVsMi4yOTgtMS43OTJjLjI1OS0uMTk2LjI1OS0uNTA5IDAtLjcwNmwtMi4yOTgtMS43OTJjLS4yNTYtLjE5Ni0uMjU2LS41MTMgMC0uNzA4YS44MS44MSAwIDAxLjkzIDBsMi4zIDEuNzkxYy43NzIuNTkuNzcgMS41MzcgMCAyLjEyNGwtMi4zIDEuNzkxYS44MS44MSAwIDAxLS45MyAwYy0uMjU2LS4xOTUtLjI1Ni0uNTEyIDAtLjcwOHptLTYuMzg0LTQuMjlMMi41MSA3LjY0N2MtLjI1OS4xOTYtLjI1OS41MDkgMCAuNzA2bDIuMjk4IDEuNzkyYy4yNTYuMTk2LjI1Ni41MTMgMCAuNzA4YS44MS44MSAwIDAxLS45MyAwbC0yLjMtMS43OTFjLS43NzItLjU5LS43Ny0xLjUzNyAwLTIuMTI0bDIuMy0xLjc5MWEuODEuODEgMCAwMS45MyAwYy4yNTYuMTk1LjI1Ni41MTIgMCAuNzA4ek02LjUgNmgzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6bTAgM2gzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbE9wZXJhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFNlbGVjdG9yID0gZnVuY3Rpb24gRXVpSWNvbktxbFNlbGVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMmE0IDQgMCAxMDAtOCA0IDQgMCAwMDAgOHptMCAxQTUgNSAwIDExNSAzYTUgNSAwIDAxMCAxMHptNi0xYTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wIDFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsU2VsZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFZhbHVlID0gZnVuY3Rpb24gRXVpSWNvbktxbFZhbHVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTUgNSAwIDExMCA4IDUgNSAwIDExMC04em0tLjc1LjY5MmE0IDQgMCAxMDAgNi42MTVBNC45ODEgNC45ODEgMCAwMTYgOGMwLTEuMjY4LjQ3Mi0yLjQyNiAxLjI1LTMuMzA4ek0xMS4zNDggMTFsMi4wNzgtNS42MzdoLS43MzlsLTEuNjU2IDQuNzI3aC0uMDYyTDkuMzEzIDUuMzYzaC0uNzM5TDEwLjY1MiAxMWguNjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxWYWx1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3ViZXJuZXRlc05vZGUgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc05vZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDExLjQyVjQuNThMOCAxLjE1MiAyIDQuNTh2Ni44NGw2IDMuNDI4IDYtMy40Mjh6TTggMTZsNy00VjRMOCAwIDEgNHY4bDcgNHpNOCA0LjYwN2wzIDEuNzE0VjkuNjhsLTMgMS43MTQtMy0xLjcxNFY2LjMybDMtMS43MTR6bTQgMS4xMzR2NC41MThsLTQgMi4yODYtNC0yLjI4NlY1Ljc0MWw0LTIuMjg2IDQgMi4yODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNOb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LdWJlcm5ldGVzUG9kID0gZnVuY3Rpb24gRXVpSWNvbkt1YmVybmV0ZXNQb2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDUuMTUxdjYuMjY5bC01LjUgMy4xNDJWOC4yOUwxNCA1LjE1MXptLS41MDgtLjg2MUw4IDEuMTUyIDIuNTA4IDQuMjkgOCA3LjQyNGw1LjQ5Mi0zLjEzNHpNMiA1LjE1MWw1LjUgMy4xNHY2LjI3MkwyIDExLjQyVjUuMTV6TTE1IDEybC03IDQtNy00VjRsNy00IDcgNHY4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzUG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MYXllcnMgPSBmdW5jdGlvbiBFdWlJY29uTGF5ZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzYgMS4wNTNhLjUuNSAwIDAxLjQ0OCAwbDYgM2EuNS41IDAgMDEwIC44OTRsLTYgM2EuNS41IDAgMDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAxMC0uODk0bDYtM3pNMi42MTggNC41TDcuNSA2Ljk0MSAxMi4zODIgNC41IDcuNSAyLjA1OSAyLjYxOCA0LjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjA1MyA3LjI3NmEuNS41IDAgMDEuNjctLjIyM0w3LjUgOS45NGw1Ljc3Ni0yLjg4OGEuNS41IDAgMTEuNDQ4Ljg5NGwtNiAzYS41LjUgMCAwMS0uNDQ4IDBsLTYtM2EuNS41IDAgMDEtLjIyMy0uNjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjcyNCAxMC4wNTNhLjUuNSAwIDEwLS40NDguODk0bDYgM2EuNS41IDAgMDAuNDQ4IDBsNi0zYS41LjUgMCAxMC0uNDQ4LS44OTRMNy41IDEyLjk0bC01Ljc3Ni0yLjg4OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGF5ZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MZXR0ZXJpbmcgPSBmdW5jdGlvbiBFdWlJY29uTGV0dGVyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUgM2wzIDlIN0w2IDlIM2wtMSAzSDFsMy05aDF6bS0uNSAxLjVMNS42NjcgOEgzLjMzM0w0LjUgNC41em03Ljk5IDEuNjQ3QzEyLjE2IDYuMDA1IDExLjc2IDYgMTEuNSA2Yy0uMzU5IDAtMS4wMjIuMTc1LTEuNjMyLjgzOGwtLjczNi0uNjc2QzkuOTI5IDUuMjk0IDEwLjg1OSA1IDExLjUgNWguMDE2Yy4yNSAwIC44MzYgMCAxLjM2OS4yMjguMjgxLjEyLjU2OC4zMTMuNzgyLjYxNy4yMTYuMzA3LjMzMy42OTMuMzMzIDEuMTU1djVoLTF2LS4zNTRhMi4xMDEgMi4xMDEgMCAwMS0uMDY0LjAzOGMtLjU1NC4zMTctMS4xNjYuMzE2LTEuNDIuMzE2aC0uMDMyYy0uMjUgMC0uODM2IDAtMS4zNjgtLjIyOGExLjgxIDEuODEgMCAwMS0uNzgzLS42MTdDOS4xMTcgMTAuODQ4IDkgMTAuNDYyIDkgMTBjMC0uNDYyLjExNy0uODQ4LjMzMy0xLjE1NS4yMTQtLjMwNC41LS40OTYuNzgzLS42MTdDMTAuNjQ4IDggMTEuMjMzIDggMTEuNDg0IDhoLjAxNmMuMjU4IDAgLjY5LS4wMDMgMS4wNS0uMTA2YS44ODkuODg5IDAgMDAuMzY0LS4xNzljLjA1My0uMDUuMDg2LS4xMDguMDg2LS4yMTVWN2MwLS4yODgtLjA3LS40NjUtLjE1MS0uNThhLjgxNC44MTQgMCAwMC0uMzU4LS4yNzN6TTEzIDguOGMtLjA2LjAyMi0uMTE4LjA0LS4xNzUuMDU3QzEyLjMyIDkgMTEuNzYyIDkgMTEuNTEzIDlIMTEuNWMtLjI1OSAwLS42Ni4wMDUtLjk5LjE0N2EuODE0LjgxNCAwIDAwLS4zNTkuMjc0Yy0uMDguMTE0LS4xNTEuMjkxLS4xNTEuNTc5cy4wNy40NjUuMTUxLjU4YS44MTMuODEzIDAgMDAuMzU4LjI3M2MuMzMxLjE0Mi43MzIuMTQ3Ljk5MS4xNDcuMjU3IDAgLjYzLS4wMDguOTQtLjE4NC4yNTUtLjE0Ni41Ni0uNDYzLjU2LTEuMzE2di0uNzAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MZXR0ZXJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEYXNoZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURhc2hlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjcwNyA0LjcwN2ExIDEgMCAxMS0xLjQxNC0xLjQxNGwyLTJhMSAxIDAgMTExLjQxNCAxLjQxNGwtMiAyem0tNi40MTQgNWExIDEgMCAwMDEuNDE0IDBsMi0yYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMDAwIDEuNDE0em0tNSA1YTEgMSAwIDAwMS40MTQgMGwyLTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEYXNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEb3R0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURvdHRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgM2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzek0xMSA1LjVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTUuNSAxMWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0tNCA0YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEb3R0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVTb2xpZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lU29saWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjI5MyAxNC43MDdhMSAxIDAgMDAxLjQxNCAwbDEyLTEyYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0xMiAxMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVTb2xpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluayA9IGZ1bmN0aW9uIEV1aUljb25MaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42NiAzLjgwM2EuNS41IDAgMTEtLjcwNi0uNzA3TDkuMjY4Ljc4YzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0czEuNTQgMy40MDkuMzU0IDQuNTk2bC0zLjUzNiAzLjUzNmMtMS4xODcgMS4xODctMy4yNDIgMS00LjU5Ni0uMzU0YS41LjUgMCAxMS43MDctLjcwN2MuOTkuOTkgMi40MTcgMS4xMTkgMy4xODIuMzU0bDMuNTM2LTMuNTM2Yy43NjUtLjc2NS42MzUtMi4xOTMtLjM1NC0zLjE4Mi0uOTktLjk5LTIuNDE3LTEuMTE5LTMuMTgyLS4zNTRMNy42NjEgMy44MDN6bS0uMzIgNy4zOTJhLjUuNSAwIDExLjcwNy43MDdsLTIuMzE1IDIuMzE0Yy0xLjE4NyAxLjE4OC0zLjI0MiAxLTQuNTk2LS4zNTMtMS4zNTQtMS4zNTQtMS41NC0zLjQxLS4zNTMtNC41OTZMNC4zMTggNS43M2MxLjE4Ny0xLjE4NyAzLjI0Mi0xIDQuNTk2LjM1NGEuNS41IDAgMDEtLjcwNy43MDdjLS45ODktLjk5LTIuNDE2LTEuMTItMy4xODItLjM1NEwxLjQ5IDkuOTc0Yy0uNzY2Ljc2NS0uNjM2IDIuMTkzLjM1MyAzLjE4Mi45OS45ODkgMi40MTcgMS4xMTkgMy4xODIuMzUzbDIuMzE1LTIuMzE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkxpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2gydjFIMnptNCAwVjNoOHYxSDZ6bTAgM1Y2aDh2MUg2em0wIDNWOWg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem00IDN2LTFoOHYxSDZ6bS00IDB2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpc3RBZGQgPSBmdW5jdGlvbiBFdWlJY29uTGlzdEFkZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDExSDl2MWgydjJoMXYtMmgydi0xaC0yVjloLTF2MnpNNy43NTggOWE0LjUgNC41IDAgMTEtLjUwMiA0SDZ2LTFoMS4wMjdhNC41NDggNC41NDggMCAwMS4yMy0ySDZWOWgxLjc1OHpNMiA0VjNoMnYxSDJ6bTQgMFYzaDh2MUg2em0wIDNWNmg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem0wIDN2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3RBZGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNXYtLjhDNCAxLjg4IDUuNzkgMCA4IDBzNCAxLjg4IDQgNC4yVjVoMS4xNDNjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFIMi44NTdDMi4zODQgMTYgMiAxNS41NTIgMiAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFINHpNMyAxNWgxMFY2SDN2OXptNS45OTgtMy43MDZMOS41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNi41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6TTExIDQuMzZDMTEgMi41MDQgOS42NTcgMSA4IDFTNSAyLjUwNCA1IDQuMzZWNWg2di0uNjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2tPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkxvY2tPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTQzIDVjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFILjg1N0MuMzg0IDE2IDAgMTUuNTUyIDAgMTVWNmMwLS41NTIuMzg0LTEgLjg1Ny0xSDh2LS44QzggMS44OCA5Ljc5IDAgMTIgMHM0IDEuODggNCA0LjJWNWgtMXYtLjY0QzE1IDIuNTA0IDEzLjY1NyAxIDEyIDFTOSAyLjUwNCA5IDQuMzZWNWgyLjE0M3pNMSAxNWgxMFY2SDF2OXptNS45OTgtMy43MDZMNy41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNC41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2tPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQWVyb3NwaWtlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BZXJvc3Bpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzQzNzNBXCIsXG4gICAgZDogXCJNMCAzMS44MDZoMzJWLjc3NkgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTkuNDQ4IDEyLjUwOGwtOC45ODYgMy44NiA4Ljk4NiAzLjg4M3YtNy43NDN6bS0xMS4zMDQgNC43M2wtMi4wOTQtLjg2MyAyLjA5NC0uOTMxIDE3Ljc0OS03Ljc0MXYyLjA2MmwtNC42NTQgMS45OXY5LjI1bDQuNjU0IDIuMDF2MS45NjhMOC4xNDMgMTcuMjR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQWVyb3NwaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXBhY2hlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcGFjaGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fYXBhY2hlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiMjEuOTAyJVwiLFxuICAgIHgyOiBcIjE0MS44NzklXCIsXG4gICAgeTE6IFwiNjMuOTA1JVwiLFxuICAgIHkyOiBcIjIwLjIxMyVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNjk5MjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMS4yMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y3OUEyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjgzLjgzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiLTIxNy42NTElXCIsXG4gICAgeDI6IFwiNzQuNzQzJVwiLFxuICAgIHkxOiBcIjE3Ny4xMjclXCIsXG4gICAgeTI6IFwiMzYuNjY1JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiLTgwLjA0NCVcIixcbiAgICB4MjogXCIxNDYuMjQlXCIsXG4gICAgeTE6IFwiNzMuNTc0JVwiLFxuICAgIHkyOiBcIjMxLjUzOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIi0xOC4zMTYlXCIsXG4gICAgeDI6IFwiMTY1LjAwMiVcIixcbiAgICB5MTogXCI1Mi40OTclXCIsXG4gICAgeTI6IFwiNDEuNjU2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIi0xMDkuNzAxJVwiLFxuICAgIHgyOiBcIjY0LjYxNyVcIixcbiAgICB5MTogXCI0NjMuNzE1JVwiLFxuICAgIHkyOiBcIjE3LjE5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgeDE6IFwiLTM0Ljg4JVwiLFxuICAgIHgyOiBcIjExMC41OTklXCIsXG4gICAgeTE6IFwiMTMwLjUyMiVcIixcbiAgICB5MjogXCItOS4xMTglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICB4MTogXCItMTMuNjczJVwiLFxuICAgIHgyOiBcIjExNy44NTglXCIsXG4gICAgeTE6IFwiMTkyLjU2NCVcIixcbiAgICB5MjogXCItMTM2LjkwNiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMTMuNjI4LjE4Yy0uNDk4LjI5My0xLjMzMiAxLjEzNC0yLjMyOCAyLjM0OHYuMDc0bC44NzEgMS42MTMuMDQ0LjAzYy42NDEtLjkxNCAxLjI4OS0xLjc0MiAxLjk0OC0yLjQ0Ni4wNS0uMDU2LjA3NS0uMDguMDc1LS4wOC0uMDI1LjAyNC0uMDUuMDU1LS4wNzUuMDgtLjIxMS4yMzctLjg1OS45ODQtMS44MyAyLjQ3OGwuMTEyLjAyNXMyLjI3My0uMjI0IDMuMzY4LS40MWwuMDYyLS4wNTdjLjM1LTEuOTU1LS4zNDItMi44NTEtLjM0Mi0yLjg1MVMxNC42NjEtLjQyMyAxMy42MjguMTh6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjUyNSA4LjY5N2MuMjgtLjUxNi41Ni0xLjAyNy44NC0xLjUxOS4yOTMtLjUxLjU5Mi0xLjAwOC44OTctMS40ODhhLjM5Ny4zOTcgMCAwMC4wNS0uMDg3Yy4yOTktLjQ3My41OTgtLjkyMS45MDMtMS4zNTdMMTEuMyAyLjUyYy0uMDY5LjA4MS0uMTM3LjE2OC0uMjA2LjI1Ni0uMjYxLjMzLS41MzUuNjc4LS44MTUgMS4wNTJhNTEuNzgzIDUxLjc4MyAwIDAwLTEuODkzIDIuNzA4Yy0uMjYxLjQwNS0uNTMuODE2LS43OSAxLjI0NWwtLjAzMi4wNVY3LjlsMS4xNCAyLjI2LjA1LjAxOWMuMjU1LS40OTguNTEtLjk5Ni43NzEtMS40ODJ6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjU2MyAxOS43NmMuMjA2LS41MzUuNDI0LTEuMDc3LjY0Mi0xLjYyNS4yMTEtLjUyMy40MjMtMS4wNTIuNjQ3LTEuNTguMjE4LS41My40NDgtMS4wNi42NzktMS41OTUuMjM2LS41NDEuNDczLTEuMDgzLjcxNi0xLjYxOC4yNDItLjUzLjQ4NS0xLjA1OS43MzQtMS41ODIuMDg3LS4xODYuMTgtLjM4LjI3NC0uNTY2LjE1Ni0uMzI0LjMxOC0uNjQ4LjQ3My0uOTY1LjAwNy0uMDE5LjAyLS4wMzEuMDI1LS4wNUw3LjU2NCA3LjgzMmwtLjA1Ni4wOTNjLS4yNzQuNDU1LS41NTQuOTE1LS44MjIgMS4zODlhNTQuNTM1IDU0LjUzNSAwIDAwLTEuNDUgMi43MTRjLS4wNDQuMDg3LS4wODEuMTY4LS4xMjUuMjU1YTMyLjE1IDMyLjE1IDAgMDAtLjcwMyAxLjU0NGMtLjIzNy41Ni0uNDQ4IDEuMDk2LS42MzUgMS42MDYtLjEyNS4zMzctLjIzLjY1NC0uMzM2Ljk2NS0uMDgxLjI2Mi0uMTYyLjUzLS4yMzcuNzkxLS4xOC42MjMtLjMzIDEuMjM5LS40NTQgMS44NjJsLjAxOC4wNzQgMS4xNCAyLjI2Ni4wMzcuMDJjLjE1NS0uNDI0LjMxNy0uODQ4LjQ4NS0xLjI4My4wNDQtLjEyNS4wOTQtLjI0My4xMzctLjM2OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIuNzMzIDE5LjEzMmExOC44NCAxOC44NCAwIDAwLS4zMTEgMi4yNTNjMCAuMDI1LS4wMDYuMDUtLjAwNi4wODEtLjM3NC0uNTk4LTEuMzctMS4xNzctMS4zNy0xLjE3Ny43MTYgMS4wMzQgMS4yNTggMi4wNjEgMS4zMzggMy4wNy0uMzguMDgtLjkwMi0uMDM4LTEuNTEyLS4yNTUuNjI4LjU3OCAxLjEwMi43NCAxLjI4OC43ODQtLjU3OS4wMzctMS4xODMuNDM2LTEuNzkzLjg5Ljg5LS4zNiAxLjYwNy0uNTA0IDIuMTIzLS4zOTItLjgxNSAyLjMxLTEuNjMgNC44NjItMi40NTMgNy41NjQuMjUtLjA3NS4zOTktLjI0My40ODYtLjQ3My4xNDMtLjQ5MiAxLjExNC0zLjcwNCAyLjYyNy03LjkzMS4wNDQtLjExOS4wODctLjI0My4xMy0uMzYyLjAxMy0uMDMuMDI2LS4wNjguMDM4LS4xLjE2Mi0uNDQxLjMyNC0uODk2LjQ5OC0xLjM1Ni4wMzgtLjEwNi4wODEtLjIxMi4xMTktLjMxOHYtLjAwNmwtMS4xOS0yLjM1M2MwIC4wMy0uMDA2LjA1Ni0uMDEyLjA4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMTIuMzMzIDQuMjgzYy0uMjY4LjQxMS0uNTYuODc4LS44NzggMS40MDctLjAxOC4wMjUtLjAzLjA1Ni0uMDUuMDgxYTYyLjUzOCA2Mi41MzggMCAwMC0xLjY4NyAzLjA1Yy0uMjQ5LjQ4LS41MDQuOTg0LS43NjUgMS41MjZsLjA1Ni4wMjUgMi44OTUtLjMxMS4wNjgtLjA1Yy44NzgtLjQwNSAxLjI3LS43NzIgMS42NS0xLjMwMS4xLS4xNDMuMjA1LS4zLjMwNS0uNDU1LjMxMS0uNDg1LjYxNi0xLjAxNS44ODQtMS41NDQuMjYxLS41MS40OTItMS4wMi42NzItMS40NzVhNi41NiA2LjU2IDAgMDAuMzk4LTEuMzk1Yy0xLjE3LjIwNi0yLjYwOC4zOTktMy41NDguNDQyelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIiksXG4gICAgZDogXCJNOC44NCAxMC41OWMtLjEuMjEyLS4yMDUuNDMtLjMxLjY0Ny0uMTEzLjIzNy0uMjMxLjQ4Ni0uMzQzLjczNS0uMDU2LjEyNC0uMTE5LjI1NS0uMTc1LjM4LS4xOC4zODYtLjM1NC43ODQtLjU0MSAxLjE5NWExMDcuMDM1IDEwNy4wMzUgMCAwMC0xLjM1NyAzLjE5NGMtLjIxOC41MjktLjQzNiAxLjA3Ny0uNjU0IDEuNjM3LS4yLjUwNC0uMzk5IDEuMDE1LS41OTggMS41NS0uMDEyLjAyNS0uMDE4LjA1LS4wMy4wNzUtLjIuNTMtLjM5NCAxLjA2OC0uNiAxLjYyMi0uMDA2LjAxMi0uMDE3LjA0NS0uMDIzLjA1N2wuMDQzLjAxLjg2Ni0uMDk0LjA0OC0uMDJjLS4wMTgtLjAwNi0uMDMtLjAzLS4wNDgtLjAzNyAxLjE0NS0uMTQzIDIuNjctMS4wMDIgMy42Ni0yLjA2LjQ1NS0uNDg2Ljg2Ni0xLjA2NSAxLjI1Mi0xLjczOC4yODYtLjUwNC41NDctMS4wNTguODAzLTEuNjc1LjIyNC0uNTM1LjQzNS0xLjEyLjY0LTEuNzQ5YTMuNDU3IDMuNDU3IDAgMDEtLjg5Ni4zMTEgOC45NzcgOC45NzcgMCAwMS0uMTguMDM4Yy0uMDYyLjAxMi0uMTI1LjAxOC0uMTguMDMgMS4wNy0uNDEgMS43NDMtMS4yMDcgMi4yMzQtMi4xNzgtLjI4LjE5My0uNzQuNDQyLTEuMjg4LjU2NmEyLjUyIDIuNTIgMCAwMS0uMjMuMDQ0Yy0uMDIgMC0uMDM4LjAwNi0uMDU3LjAwNi4zNzQtLjE1NS42ODUtLjMzLjk1OS0uNTM1LjA1Ni0uMDQ0LjExMi0uMDg3LjE2OC0uMTM3LjA4MS0uMDc1LjE2Mi0uMTUuMjM3LS4yMjQuMDUtLjA1LjA5My0uMS4xNDMtLjE1Ni4xMDYtLjEyNC4yMDUtLjI2MS4yOTktLjQxLjAzLS4wNDQuMDU2LS4wOTQuMDg3LS4xMzguMDM3LS4wNjguMDY4LS4xMzcuMS0uMjA1LjE0OS0uMy4yNjctLjU2Ny4zNi0uODAzLjA1LS4xMTkuMDg4LS4yMjQuMTI1LS4zMy4wMTMtLjAzOC4wMjUtLjA4MS4wNDQtLjExOS4wMzctLjExMi4wNjgtLjIxMS4wOTMtLjMwNS4wMzctLjEzLjA1Ni0uMjM2LjA2OS0uMzExYTEuMDc3IDEuMDc3IDAgMDEtLjEyNS4wODdjLS4zMjQuMTkzLS44NzguMzY4LTEuMzI2LjQ0OGwuODg0LS4xLS44ODQuMWMtLjA2Mi4wMTMtLjEwNi4wMi0uMTU2LjAzMi4wMDQtLjAwNS0uOTk0LjEwMS0yLjk5NS4zMTZhMi4zMTMgMi4zMTMgMCAwMC0uMTE4LjI0NHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuMTE1IDIxLjkxNGMtLjE1NS40My0uMzE3Ljg3Mi0uNDczIDEuMzIgMCAuMDA2LS4wMDYuMDEzLS4wMDYuMDE5LS4wMjUuMDYyLS4wNDQuMTI0LS4wNjkuMTkzLS4xMDYuMzA1LS4xOTkuNTczLS40MSAxLjE5NS4zNDguMTYyLjYyOC41OC44OTYgMS4wNTlhMS44NzYgMS44NzYgMCAwMC0uNjIzLTEuMzE0YzEuNzI1LjA3NSAzLjIxMy0uMzYxIDMuOTc5LTEuNjE5LjA2OC0uMTEyLjEzLS4yMy4xODYtLjM1NS0uMzQ4LjQ0Mi0uNzg0LjYzLTEuNTkzLjU4NmgtLjAwNy4wMDdjMS4yMDEtLjUzNiAxLjc5OS0xLjA1MiAyLjMzNC0xLjkwNS4xMjUtLjIwNi4yNS0uNDI0LjM3NC0uNjY3LTEuMDUyIDEuMDc4LTIuMjY2IDEuMzgzLTMuNTQzIDEuMTUybC0uOTU4LjEwNmMtLjAzMi4wNjktLjA2My4xNS0uMDk0LjIzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcGFjaGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMDAtNyAwbC04IDQuNjE5QTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2Mmw3LjUgNC4zM1YxNy45NzlhNyA3IDAgMDEzLjUtNi4wNjJMMjcgNS4yNzYgMTkuNS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwMC03IDBMNSA1LjI3N2wxMSA2LjM1IDExLTYuMzUtNy41LTQuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yOC40MzUgNy43NmwtMTAuMDI2IDUuNzlhNi45OTQgNi45OTQgMCAwMTEuNTkgNC40Mjh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMDAzLjUtNi4wNjF2LTkuMjM4YTYuOTkyIDYuOTkyIDAgMDAtMS41ODYtNC40MjJsLS45NzguNTY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXdzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwMS4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMDEuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwMTEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJ6bS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMDAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOXptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTV6bTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMDEuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAwLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAxMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMDEuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjRjkwXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Bd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Bd3NNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3NNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMDEuMDc1LjI0MmMwIC4xMDUtLjA2NC4yMS0uMjAyLjMxNWwtLjY3LjQ0MmEuNTE0LjUxNCAwIDAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMDEtLjMzLS42MmMtLjgzLjk2Ny0xLjg3MyAxLjQ1LTMuMTI4IDEuNDUtLjg5NCAwLTEuNjA3LS4yNTItMi4xMjktLjc1Ni0uNTIxLS41MDUtLjc4Ny0xLjE3OC0uNzg3LTIuMDIgMC0uODk0LjMxOS0xLjYyLjk2OC0yLjE2Ni42NS0uNTQ3IDEuNTExLS44MiAyLjYwNy0uODIuMzYyIDAgLjczNS4wMyAxLjEyOC4wODMuMzk0LjA1My43OTkuMTM3IDEuMjI0LjIzMnYtLjc2OGMwLS44LS4xNy0xLjM1Ny0uNS0xLjY4My0uMzQtLjMyNi0uOTE1LS40ODQtMS43MzUtLjQ4NC0uMzcyIDAtLjc1NS4wNDMtMS4xNDkuMTM3LS4zOTQuMDk1LS43NzcuMjEtMS4xNS4zNTgtLjE3LjA3My0uMjk3LjExNS0uMzcyLjEzNmEuNjYuNjYgMCAwMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAxLjI5OC0uMjIxYy4zNzMtLjE5LjgyLS4zNDcgMS4zNC0uNDc0YTYuNTI0IDYuNTI0IDAgMDExLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyem0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAwMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAwLTEtLjA2M2MtLjcxMyAwLTEuMjM0LjEzNy0xLjU4Ni40Mi0uMzUuMjg1LS41MjEuNjg0LS41MjEgMS4yMSAwIC40OTQuMTI4Ljg2Mi4zOTQgMS4xMTUuMjU1LjI2My42MjguMzkgMS4xMTcuMzl6bTguNTQ1IDEuMTM1Yy0uMTkyIDAtLjMyLS4wMzItLjQwNS0uMTA1LS4wODUtLjA2My0uMTYtLjIxLS4yMjMtLjQxbC0yLjUwMS04LjEzYy0uMDY0LS4yMS0uMDk2LS4zNDctLjA5Ni0uNDIxIDAtLjE2OC4wODUtLjI2My4yNTYtLjI2M2gxLjA0M2MuMjAyIDAgLjM0LjAzMi40MTUuMTA1LjA4NS4wNjMuMTQ5LjIxLjIxMi40MWwxLjc4OCA2Ljk2MyAxLjY2LTYuOTYzYy4wNTQtLjIxLjExNy0uMzQ3LjIwMy0uNDEuMDg1LS4wNjMuMjM0LS4xMDUuNDI1LS4xMDVoLjg1MmMuMjAyIDAgLjM0LjAzMi40MjUuMTA1LjA4NS4wNjMuMTYuMjEuMjAzLjQxbDEuNjgxIDcuMDQ3IDEuODQxLTcuMDQ3Yy4wNjQtLjIxLjEzOC0uMzQ3LjIxMy0uNDEuMDg1LS4wNjMuMjIzLS4xMDUuNDE1LS4xMDVoLjk5Yy4xNyAwIC4yNjYuMDg0LjI2Ni4yNjMgMCAuMDUyLS4wMTEuMTA1LS4wMjIuMTY4LS4wMS4wNjMtLjAzMi4xNDctLjA3NC4yNjNsLTIuNTY1IDguMTNjLS4wNjQuMjEtLjEzOC4zNDctLjIyMy40MS0uMDg1LjA2My0uMjI0LjEwNS0uNDA1LjEwNWgtLjkxNWMtLjIwMiAwLS4zNC0uMDMxLS40MjYtLjEwNS0uMDg1LS4wNzMtLjE2LS4yMS0uMjAyLS40MmwtMS42NS02Ljc4NC0xLjYzOCA2Ljc3M2MtLjA1My4yMS0uMTE3LjM0Ny0uMjAyLjQyLS4wODYuMDc0LS4yMzUuMTA2LS40MjYuMTA2aC0uOTE1em0xMy42NzUuMjg0YTcuMTIyIDcuMTIyIDAgMDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAxLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwMC41NTQtLjk5OWMwLS4yOTQtLjA5Ni0uNTM2LS4yODgtLjczNi0uMTkxLS4yLS41NTMtLjM3OS0xLjA3NC0uNTQ3bC0xLjU0NC0uNDczYy0uNzc2LS4yNDItMS4zNTEtLjYtMS43MDItMS4wNzNhMi40ODcgMi40ODcgMCAwMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwMTEuMzQtLjE3OGMuMjM1IDAgLjQ4LjAxLjcxNC4wNDIuMjQ1LjAzMS40NjguMDczLjY5Mi4xMTUuMjEyLjA1My40MTUuMTA1LjYwNi4xNjkuMTkyLjA2My4zNC4xMjYuNDQ3LjE4OWEuOTE4LjkxOCAwIDAxLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMDEtLjc3Ny45MjVjLS4zMy4yNjMtLjcyNC40NTItMS4xODIuNTktLjQ3OC4xNDYtLjk3OS4yMi0xLjUyMS4yMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3c01vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BenVyZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDcyQzZcIixcbiAgICBkOiBcIk0xNy40NDggNGwtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNHpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F6dXJlTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmVNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNDQ4IDRsLTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDR6TTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXp1cmVNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQmVhdHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0JlYXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTUgMjBINFYwaDExYzUuNTIyIDAgMTAgNC40NzggMTAgMTBzLTQuNDc4IDEwLTEwIDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEMyQjNcIixcbiAgICBkOiBcIk0yNi43MDIgMTUuNjI0QzI0LjYgMTkuOTc5IDIwLjE1MiAyMyAxNSAyM0g0djloMTVjNS41MjIgMCAxMC00LjQ3OCAxMC0xMGE5Ljk1MiA5Ljk1MiAwIDAwLTIuMjk4LTYuMzc2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMjQuMzM4IDEzLjU1NEE5Ljk0MiA5Ljk0MiAwIDAwMTkgMTJINHY4aDExYzQuMjcgMCA3LjkwMy0yLjY4IDkuMzM4LTYuNDQ2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CZWF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMmMwIDUuNTIyIDQuNDc4IDEwIDEwIDEwVjEyQzQuNDc4IDEyIDAgMTYuNDc4IDAgMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMCAxMnYxMGgxMGMwLTUuNTIyLTQuNDc4LTEwLTEwLTEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAwdjljNy4xNjggMCAxMyA1LjgzMiAxMyAxM2g5QzMyIDkuODUgMjIuMTUgMCAxMCAwXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DZXBoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DZXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNDcxIDI3LjU2Yy0xLjA2LS41NjctMS42NzYtMS4yMDYtMS44MTEtMS45MDItLjEzLS42NzMuMTctMS40MjEuOTE4LTIuMjg4YTExLjI5IDExLjI5IDAgMDAyLjc3My03LjQyQTExLjMyNCAxMS4zMjQgMCAwMDE2LjA0MiA0LjY0bC0uMDUuMDAxaC0uMDVBMTEuMzI0IDExLjMyNCAwIDAwNC42MzIgMTUuOTQ5YTExLjI5MSAxMS4yOTEgMCAwMDIuNzc0IDcuNDIyYy43NTMuODcyIDEuMDQ3IDEuNTkxLjkyOCAyLjI1Ny0uMTMuNjk0LS43NCAxLjM0Mi0xLjgxNyAxLjkzLTEuNjU3LTEuMzc1LTMuMTE2LTMuMjEyLTQuMDEtNS4wNTZhMTQuOTQzIDE0Ljk0MyAwIDAxLTEuMTE3LTMuMTM5QTE0Ljk5NyAxNC45OTcgMCAwMTEgMTUuOTVhMTQuOTAxIDE0LjkwMSAwIDAxNC4zNzgtMTAuNTcgMTQuOTI0IDE0LjkyNCAwIDAxNC43NTItMy4yMDRDMTEuOTcgMS4zOTUgMTMuOTUuOTk2IDE1Ljk0OCAxaC4xMDFhMTQuODg4IDE0Ljg4OCAwIDAxMTAuNTcgNC4zNzggMTQuOTEyIDE0LjkxMiAwIDAxMy45ODIgMTMuOTg1IDE0Ljg3MSAxNC44NzEgMCAwMS0xLjExOCAzLjE0Yy0uOSAxLjg0My0yLjM1OCAzLjY4MS00LjAxIDUuMDU3aC0uMDAzem0tNS41MjMgMi43OThjLS4xNzMtLjExLS43NjctLjU1LTEuMzQ1LTEuMzUzYTYuMTIyIDYuMTIyIDAgMDEtMS4xNzQtMy43MzggOC4yNiA4LjI2IDAgMDEuNjExLTIuOTY0IDguNDIgOC40MiAwIDAxMS42MjctMi41NGwuMDA0LS4wMDguMTU0LS4xNzhjLjI2My0uMzA1LjUzNi0uNjIyLjc1My0uOTkuMjY4LS40NTQuNDYyLS45MzEuNTc4LTEuNDIuMTc4LS43NTguMTg4LTEuNTQ3LjAyOS0yLjMxYTUuMyA1LjMgMCAwMC0uODU4LTEuOTU2IDUuMjY0IDUuMjY0IDAgMDAtNC4yOS0yLjIxN2gtLjEwOGE1LjI1IDUuMjUgMCAwMC00LjI5IDIuMjE2IDUuMzEgNS4zMSAwIDAwLS44NTYgMS45NTZjLS4xNi43NjMtLjE1IDEuNTUyLjAzIDIuMzExLjExNS40ODguMzEuOTY1LjU3NiAxLjQxOS4yMTkuMzcuNDkuNjg0Ljc1My45OWwuMTU1LjE3OS4wMDMuMDA3YTguMzg0IDguMzg0IDAgMDExLjYyOCAyLjU0IDguMjQgOC4yNCAwIDAxLjYxIDIuOTY0IDYuMTIzIDYuMTIzIDAgMDEtMS4xNzMgMy43MzhjLS41OC43OTUtMS4xNzQgMS4yNDMtMS4zNDYgMS4zNTJsLS44NjctLjI2YTE1LjQzNCAxNS40MzQgMCAwMS0yLjQ5LTEuMDk4IDQuMjQ1IDQuMjQ1IDAgMDAyLjIzNC0zLjczNmMwLTEuMDM0LS40MDMtMi4wMjgtMS4xOTUtMi45NWwtLjAzNC0uMDM0LS4yMzctLjI2LS42MzYtLjc0NmE4LjkyNCA4LjkyNCAwIDAxLTEuNTI1LTMuMjYgOC45ODMgOC45ODMgMCAwMS0uMDUtMy45MDUgOC45MDYgOC45MDYgMCAwMTEuNDYtMy4zMTNBOC45OTMgOC45OTMgMCAwMTExLjIzIDguMzlhOC45MzcgOC45MzcgMCAwMTQuNzAyLTEuMzQ0aC4xMTJjLjQyIDAgLjg0LjAyOSAxLjI1NS4wODhhOC45MzggOC45MzggMCAwMTMuNDQ4IDEuMjU2IDkuMDAzIDkuMDAzIDAgMDEyLjU1NCAyLjQwNCA5LjA5MyA5LjA5MyAwIDAxMS40NTkgMy4zMTMgOS4wNDMgOS4wNDMgMCAwMS0uMDUgMy45MTIgOC45MjUgOC45MjUgMCAwMS0xLjUyNiAzLjI2Yy0uMi4yNjUtLjQwOS40OTUtLjYzNy43NDVsLS4yMy4yNTRjLS4wMTcuMDE2LS4wMy4wMjctLjA0LjA0My0uODA0Ljk2MS0xLjE5NSAxLjkyNy0xLjE5NSAyLjk0OGE0LjI1IDQuMjUgMCAwMDIuMjM3IDMuNzM1Yy0uNzk1LjQ0MS0xLjYzLjgwOS0yLjQ5MSAxLjA5OGwtLjg2Mi4yNi0uMDE4LS4wMDR6bS0zLjk1Ni0xMS4zMTRhMi45NTcgMi45NTcgMCAwMS0yLjk1Mi0yLjk1MiAyLjk1NyAyLjk1NyAwIDAxMi45NTItMi45NTIgMi45NTYgMi45NTYgMCAwMTIuOTUgMi45NTIgMi45NTcgMi45NTcgMCAwMS0yLjk1IDIuOTUyXCIsXG4gICAgZmlsbDogXCIjRjA1QzU2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DZXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTIuMzcgMTguMzUyYy4wMzItLjAxLjA2Ni0uMDE0LjEtLjAyM0E2IDYgMCAwMTE4IDEwVjBDOS4xNjMgMCAyIDcuMTY0IDIgMTZjMCAyLjc5My43MiA1LjQxNyAxLjk3NiA3LjcwMmExOC45NDcgMTguOTQ3IDAgMDE4LjM5My01LjM0OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMDA1LjcxNyA1Ljc1YTE2LjAwNiAxNi4wMDYgMCAwMDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwMTE4IDEwYTUuOTQgNS45NCAwIDAxMi41OTYuNTk0Yy42NjkuMzIzIDEuNDM2LjQwOCAyLjE0Ni4xODhhMTYuMDEgMTYuMDEgMCAwMDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwMDE4IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIyLjc0MiAyMS4yMThjLS43MS0uMjItMS40NzgtLjEzNS0yLjE0Ni4xODhBNS45NDcgNS45NDcgMCAwMTE4IDIyYTUuOTQgNS45NCAwIDAxLTIuNTk2LS41OTRjLS42NjktLjMyMy0xLjQzNi0uNDA4LTIuMTQ2LS4xODhhMTYuMDA2IDE2LjAwNiAwIDAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMzJjNC45MzYgMCA5LjM0OC0yLjIzNiAxMi4yODMtNS43NWExNi4wMTYgMTYuMDE2IDAgMDAtNy41NC01LjAzMlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWRFY2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkRWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTE4IDB2MTBhNiA2IDAgMDAtNS41MyA4LjMzYy0uMDM0LjAwOS0uMDY4LjAxMi0uMS4wMjNBMTguOTQ3IDE4Ljk0NyAwIDAwMy45NzUgMjMuNyAxNS45MzQgMTUuOTM0IDAgMDEyIDE2QzIgNy4xNjQgOS4xNjMgMCAxOCAwem0wIDEzYTMgMyAwIDExMCA2IDMgMyAwIDAxMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBRUZBXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAxMTggMjJhNS45NCA1Ljk0IDAgMDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwMC03LjU0LTUuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwMDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAwNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAxMTggMTBhNS45NCA1Ljk0IDAgMDEyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAwNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWRFY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Db2RlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTkuNzUgMTJMMTYgMzJoMTBsLTMuNC0xMC44OEExMyAxMyAwIDAwMTAuMTkgMTJoLS40NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjcyNSAxMS45M0ExNyAxNyAwIDAwOS41IDBINmwzLjc1IDEyaC40NGExMyAxMyAwIDAxMTIuNDEgOS4xMkwyNiAzMmg2bC02LjI3NS0yMC4wN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzNzdDQVwiLFxuICAgIGQ6IFwiTTcuOTEgMTYuMTc1TDAgMzJoMTIuODU1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvZGVzYW5kYm94ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjczOCAyOC4wNDRWMTYuNjgxTDMuMTcyIDEwLjkxOXY2LjQ2bDUuMzIgMi42N3Y0Ljg4OWw2LjI0NiAzLjEwNnptMi4zNDQuMDY2bDYuMzU3LTMuMTd2LTUuMDAybDUuMzUzLTIuNjg2VjEwLjg3bC0xMS43MSA1Ljg1NFYyOC4xMXpNMjcuMzA2IDguOTkzbC02LjAwMy0zLjAxMi01LjI4NiAyLjY1Ni01LjMyNS0yLjY1OUw0LjYzNyA5LjAzbDExLjMxNyA1LjYzOCAxMS4zNTItNS42NzV6TS44MjggMjMuNzQ0VjguMzI0TDE1Ljk4MS42ODlsMTUuMTU1IDcuNjA0VjIzLjcyTDE1Ljk4IDMxLjI4LjgyOCAyMy43NDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvdWNoYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ291Y2hiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUQyMjI2XCIsXG4gICAgZDogXCJNMTYuMDcyLjAyNEM3LjI5LjAyNC4xNDQgNy4xNDYuMTQ0IDE1Ljk1MmMwIDguNzgyIDcuMTIyIDE1LjkyOCAxNS45MjggMTUuOTI4QzI0Ljg1NCAzMS44OCAzMiAyNC43NTggMzIgMTUuOTUyIDMyIDcuMTQ2IDI0Ljg1NC4wMjQgMTYuMDcyLjAyNHptMTAuNzU1IDE4LjcxOWMwIC45NjItLjU1MyAxLjgwNC0xLjYzNiAxLjk5Ny0xLjg3Ny4zMzYtNS44MjMuNTMtOS4xMTkuNTMtMy4yOTYgMC03LjI0Mi0uMTk0LTkuMTE5LS41My0xLjA4Mi0uMTkzLTEuNjM2LTEuMDM1LTEuNjM2LTEuOTk3di02LjIwOGMwLS45NjIuNzQ2LTEuODUyIDEuNjM2LTEuOTk3LjU1NC0uMDk2IDEuODUzLS4xOTIgMi44NjQtLjE5Mi4zODUgMCAuNjk3LjI4OS42OTcuNzQ2djQuMzU1bDUuNTgyLS4xMiA1LjU4Mi4xMnYtNC4zNTVjMC0uNDU3LjMxMy0uNzQ2LjY5OC0uNzQ2IDEuMDEgMCAyLjMxLjA5NiAyLjg2My4xOTIuOTE0LjE0NSAxLjYzNiAxLjAzNSAxLjYzNiAxLjk5Ny0uMDQ4IDIuMDQ1LS4wNDggNC4xMzktLjA0OCA2LjIwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvdWNoYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0RvY2tlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRG9ja2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguMDk5IDE1LjEwOGgzLjMwNHYtMi45NzNIMTguMXYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczaC0zLjMwNHYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczSDEwLjI5djIuOTczem0tMy45MDUgMEg5LjY5di0yLjk3M0g2LjM4NHYyLjk3M3ptLTMuOTA0IDBoMy4zMDR2LTIuOTczSDIuNDh2Mi45NzN6bTMuOTA0LTMuNTY4SDkuNjlWOC41NjhINi4zODR2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhIMTAuMjl2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhoLTMuMzA0djIuOTcyem0wLTMuNTY3aDMuMzA0VjVoLTMuMzA0djIuOTczem0xNy4xMzkgNS40MDJjLS43MjItLjQ3OC0yLjM4LS42NTMtMy42NTYtLjQxNS0uMTY0LTEuMTktLjgzNC0yLjIyMS0yLjA1Mi0zLjE1M2wtLjctLjQ2My0uNDY4LjY5NGMtLjU5OC44OTMtLjg5NyAyLjEzLS44IDMuMzE3LjA0NS40MTguMTgzIDEuMTY0LjYxNyAxLjgyLS40MzMuMjMxLTEuMjkuNTQ5LTIuNDIuNTI4SC4xMjRsLS4wNDMuMjQ3Yy0uMjA0IDEuMTkzLS4yIDQuOTE0IDIuMjQgNy43NzRDNC4xNzggMjUuODk4IDYuOTYgMjcgMTAuNTkgMjdjNy44NyAwIDEzLjY5My0zLjU4NiAxNi40Mi0xMC4xMDQgMS4wNzMuMDIgMy4zODEuMDA2IDQuNTY3LTIuMjM3LjAzMS0uMDUxLjEwMi0uMTg2LjMxLS42MWwuMTEzLS4yMzQtLjY2Ny0uNDR6XCIsXG4gICAgZmlsbDogXCIjMTM2RUEzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRG9ja2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRHJvcHdpemFyZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRHJvcHdpemFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19kcm9wd2l6YXJkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyOS42MXM5LjU1IDQuNzQgMTYuODU2LS44OTNjLTEuOTA1LTUuMTE0LTUuMjUtMTkuODY3LTcuMjI2LTI2LjM4My0uNDIyLTEuMzg5LS40OS0xLjUyNy0uNjYzLTEuOTA5LS45NjQtMi4xMzQtMS45NzggNC4xNDItMy42MjggMTAuNDU5QzEyLjc0OSAxMy4xNDggOCAyOS42MSA4IDI5LjYxXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuOTI2IDI4LjU2M3M4LjE3IDQuNzk0IDE0LjkzLjE1NGMtLjE4LS44MDctLjY0Mi0yLjEwMy0uOTU1LTMuMzExLTEuNjY0LTYuNDE2LTQuNjc2LTE3LjI0OC02LjE0NC0yMi42MjYtMS41OS01LjgyMi0yLjEwNS45ODYtMy45NjEgOC4yMy0uNTY0IDIuMjA0LTMuODcgMTcuNTUzLTMuODcgMTcuNTUzXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0IDI0LjQxbC44NS0xLjQ2Ni43OTMgMS41NDQtLjkwOCAxLjk5LS43MzUtMi4wNjl6bTYuOTM0LTUuNTQ1bC44NS0xLjQ2NS43OTMgMS41NDMtLjkwOCAxLjk5LS43MzUtMi4wNjh6bS00Ljc0Ny01Ljg1MWwuODUtMS40NjUuNzkyIDEuNTQzLS45MDggMS45OS0uNzM0LTIuMDY4XCIsXG4gICAgZmlsbDogXCIjRjlBNzJCXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4xNCAyNC40MWwuODUtMS43MTYuNzkzIDEuNzk0LS45MDcgMS40NjgtLjczNi0xLjU0NnptNi45MzQtNS41NDVsLjg1MS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM3LTEuNTQ2em0tNC43NDctNS44NTFsLjg1LTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzYtMS41NDZcIixcbiAgICBmaWxsOiBcIiNGRkYyMDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk4NyAyOC40MjJzNi4wODIgMS4wMTUgMTAuMDg2LTEuNTQ5Yy0uNTAyIDEuNTUtNC45OTEgMy4zMTQtMTAuMDg2IDEuNTVcIixcbiAgICBmaWxsOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiAzMy40NzMsXG4gICAgeTE6IDcuNjc0LFxuICAgIHgyOiA3Ljc1MSxcbiAgICB5MjogMjEuMzMxLFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiAyMS4wMjgsXG4gICAgeTE6IDE0LjkyOCxcbiAgICB4MjogNi4wMTcsXG4gICAgeTI6IDE4Ljg0NCxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRHJvcHdpemFyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10eXBlXCI6IFwibG9nb0VsYXN0aWNcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm91dGxpbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMwLjg2IDEzLjEyOUE2LjMzMyA2LjMzMyAwIDAxMzIgMTYuNzdhNi40MTkgNi40MTkgMCAwMS0xLjE2MiAzLjY1MiA2LjM4MiA2LjM4MiAwIDAxLTMuMDMyIDIuMzMxIDQuODMzIDQuODMzIDAgMDEtMS42NzIgNS41NDIgNC43ODkgNC43ODkgMCAwMS01Ljc3LS4wNzQgOS4wMTYgOS4wMTYgMCAwMS00LjUgMy4zMjIgOC45ODIgOC45ODIgMCAwMS01LjU4Ny4wMjMgOS4wMTQgOS4wMTQgMCAwMS00LjUyNi0zLjI4NyA5LjA2NyA5LjA2NyAwIDAxLTEuNzI3LTUuMzMzYzAtLjU3OS4wNTMtMS4xNTYuMTYtMS43MjVBNi4zMDUgNi4zMDUgMCAwMTEuMTQ1IDE4LjkgNi4zNDEgNi4zNDEgMCAwMTAgMTUuMjQyYTYuNDIgNi40MiAwIDAxMS4xNjMtMy42NTIgNi4zODQgNi4zODQgMCAwMTMuMDM1LTIuMzMgNC44MzMgNC44MzMgMCAwMTEuNjU4LTUuNTU3IDQuNzg5IDQuNzg5IDAgMDE1Ljc4LjA3IDkuMDM3IDkuMDM3IDAgMDE0LjkzLTMuNDQ2IDkuMDA3IDkuMDA3IDAgMDE1Ljk5NC40MTkgOS4wNSA5LjA1IDAgMDE0LjQwNyA0LjA5OCA5LjA5NyA5LjA5NyAwIDAxLjg3MyA1Ljk2NSA2LjI5OCA2LjI5OCAwIDAxMy4wMiAyLjMyem0tMTguMjguNjU4bDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODUgNy44NSAwIDAwLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwMC00LjkzMi4wODYgNy45IDcuOSAwIDAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDF6bS03LjI0NyA3LjQ0MUE3Ljk2NCA3Ljk2NCAwIDAwNi43MiAyNy41M2E3LjkxOCA3LjkxOCAwIDAwNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwMDQuOTUtLjA5NyA3LjkyIDcuOTIgMCAwMDMuOTI2LTMuMDNsMS4xNjYtNi4xMDItMS41NTUtMi45ODUtNy4wMy0zLjIxMS02Ljg4NSA2LjI0OC4wMDEuMDAxem00Ljc1NS0xMS4wMjRsLTQuOC0xLjEzNy4wMDItLjAwMmEzLjgyIDMuODIgMCAwMTEuMzEyLTQuMzU4IDMuNzg1IDMuNzg1IDAgMDE0LjUzOC4wMjNsLTEuMDUyIDUuNDc0em0tNS4yMTYuMDFhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXptMTguMjg2IDE3Ljg0OGEzLjczNyAzLjczNyAwIDAxLTIuMjg1LS43ODVsMS4wMzctNS40NTQgNC44IDEuMTI1YTMuODEyIDMuODEyIDAgMDEtMS44MDEgNC42OGMtLjU0LjI4My0xLjE0LjQzMi0xLjc1MS40MzR6bS0xLjMxLTcuNDk5bDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMDAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwMDEuMDEzLTMuMTA2IDUuMzExIDUuMzExIDAgMDAtLjkzNi0zLjAxIDUuMjgyIDUuMjgyIDAgMDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjl6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41OCAxMy43ODdsNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NDkgNy44NDkgMCAwMC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAwLTQuMDItMi44NjkgNy44NyA3Ljg3IDAgMDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxelwiLFxuICAgIGZpbGw6IFwiI0ZFQzUxNFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zMzMgMjEuMjI4QTcuOTY0IDcuOTY0IDAgMDA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMDA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAwNC45NS0uMDk3IDcuOTIgNy45MiAwIDAwMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDF6XCIsXG4gICAgZmlsbDogXCIjMDBCRkIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI4OCA5LjA2N2w0LjggMS4xMzdMMTEuMTQgNC43M2EzLjc4NSAzLjc4NSAwIDAwLTUuOTE0IDEuOTQgMy44MiAzLjgyIDAgMDAuMDY0IDIuMzk1XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg3MiAxMC4yMTRhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXpcIixcbiAgICBmaWxsOiBcIiMxQkE5RjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjg3MyAyNy4yNzdhMy43MzYgMy43MzYgMCAwMDIuMjg1Ljc4NSAzLjc4MyAzLjc4MyAwIDAwMy4xMDEtMS42MyAzLjgxMiAzLjgxMiAwIDAwLjQ1MS0zLjQ4NGwtNC44LTEuMTI1LTEuMDM3IDUuNDU0elwiLFxuICAgIGZpbGw6IFwiIzkzQzkwRVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuODQ4IDIwLjU2M2w1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAwMi42MjItMS45MzggNS4zNyA1LjM3IDAgMDAxLjAxMy0zLjEwNiA1LjMxMiA1LjMxMiAwIDAwLS45MzYtMy4wMSA1LjI4MyA1LjI4MyAwIDAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5elwiLFxuICAgIGZpbGw6IFwiIzA3Q1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0zMiA5VjIuNUEyLjUgMi41IDAgMDAyOS41IDBoLTI3QTIuNSAyLjUgMCAwMDAgMi41VjloMzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIwaDMydi04SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNC41IDIzSDB2Ni41QTIuNSAyLjUgMCAwMDIuNSAzMmgxMnYtOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE3LjUgMjN2OWgxMmEyLjUgMi41IDAgMDAyLjUtMi41VjIzSDE3LjV6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTIgMTZjMCAxLjM4NC4xOTQgMi43Mi41MjQgNEgyMmE0IDQgMCAwMDAtOEgyLjUyNEExNS45ODQgMTUuOTg0IDAgMDAyIDE2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0yOC45MjQgNy42NjJBMTUuMzgxIDE1LjM4MSAwIDAwMzAuNDggNkMyNy41NDcgMi4zNDYgMjMuMDUgMCAxOCAwIDExLjY3OSAwIDYuMjM5IDMuNjc4IDMuNjQ0IDlIMjUuNTFhNS4wMzkgNS4wMzkgMCAwMDMuNDEzLTEuMzM4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yNS41MSAyM0gzLjY0NUM2LjI0IDI4LjMyMyAxMS42NzkgMzIgMTggMzJjNS4wNSAwIDkuNTQ3LTIuMzQ2IDEyLjQ4LTZhMTUuMzgxIDE1LjM4MSAwIDAwLTEuNTU2LTEuNjYyQTUuMDM0IDUuMDM0IDAgMDAyNS41MSAyM1wiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDBjLTIuOTE4IDAtNS42NDUuNzk0LTggMi4xNTggNC43NzcgMi43NjggOCA3LjkyMyA4IDEzLjg0MiAwIDUuOTE5LTMuMjIzIDExLjA3NC04IDEzLjg0MkExNS45MDcgMTUuOTA3IDAgMDAxNiAzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2UzI0LjgzNyAwIDE2IDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMjRoMi4yMjJBMTIuOTk2IDEyLjk5NiAwIDAwMTMgMTZjMC0yLjkzNS0xLjAxMi01Ljc0NC0yLjc3OC04SDhhOCA4IDAgMDAwIDE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgOGgtMi4xNTJBMTUuODc3IDE1Ljg3NyAwIDAxMTYgMTZjMCAyLjkxOC0uNzg2IDUuNjQ3LTIuMTUyIDhIMTZhOCA4IDAgMDAwLTE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FdGNkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FdGNkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjNDE5RURBXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjY1IDE0LjE2NGMwIDEuMTg5LS45MzMgMi4xNS0yLjA4MyAyLjE1LTEuMTUyIDAtMi4wODItLjk2MS0yLjA4Mi0yLjE1IDAtMS4xODUuOTMtMi4xNSAyLjA4Mi0yLjE1IDEuMTUgMCAyLjA4My45NjUgMi4wODMgMi4xNXptMi42OTMgMGMwIDEuMTg5LjkzNCAyLjE1IDIuMDg0IDIuMTVzMi4wODMtLjk2MSAyLjA4My0yLjE1YzAtMS4xODUtLjkzMy0yLjE1LTIuMDgzLTIuMTUtMS4xNSAwLTIuMDg0Ljk2NS0yLjA4NCAyLjE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEuNTIyIDE2LjQ5NWE1Ljg0NSA1Ljg0NSAwIDAxLTMuMTA1LS42MThjLjI3Mi0xLjYwMy4zODctMy4yMTguMzU3LTQuODI3YTI0Ljg5NiAyNC44OTYgMCAwMC0zLjAyNy0zLjcwMyA2LjEzNyA2LjEzNyAwIDAxMi4xMzMtMi4zNmwuMzkxLS4yNS0uMzA0LS4zNTRjLTEuNTctMS44MjUtMy40NDQtMy4yMzUtNS41NjgtNC4xOTNMMjEuOTc1IDBsLS4xMDcuNDYyYTYuMjQ4IDYuMjQ4IDAgMDEtMS41MSAyLjgyOSAyMy43NyAyMy43NyAwIDAwLTQuMzYyLTEuODU1IDIzLjc5IDIzLjc5IDAgMDAtNC4zNTUgMS44NTFBNi4yNDYgNi4yNDYgMCAwMTEwLjEzNy40NjVsLS4xMDgtLjQ2Mi0uNDIzLjE4OWMtMi4wOTcuOTQzLTQuMDIyIDIuMzkyLTUuNTY2IDQuMTlsLS4zMDYuMzU1LjM5LjI1YTYuMTI1IDYuMTI1IDAgMDEyLjEyOSAyLjM0NyAyNS4wMDEgMjUuMDAxIDAgMDAtMy4wMjIgMy42ODkgMjYuMDY4IDI2LjA2OCAwIDAwLjM0NyA0Ljg2IDUuODMyIDUuODMyIDAgMDEtMy4wOS42MTJMLjAzIDE2LjQ2bC4wNDMuNDczYTE2LjcyMyAxNi43MjMgMCAwMDIuMTQgNi43NjVsLjIzNC40MS4zNS0uMzA4YTUuOTE0IDUuOTE0IDAgMDEyLjgzNy0xLjM3MiAyNS4yNTUgMjUuMjU1IDAgMDAyLjQyOSA0LjA4M2MxLjQ3NS41MzMgMy4wMTMuOTMgNC42MDEgMS4xNjdhNi4zNTkgNi4zNTkgMCAwMS0uMzgzIDMuMjQzbC0uMTc1LjQzOS40NS4xMDJjMS4xNS4yNjEgMi4zMS4zOTQgMy40NDcuMzk0bDMuNDQ3LS4zOTQuNDUtLjEwMi0uMTc1LS40NGE2LjM3NiA2LjM3NiAwIDAxLS4zODMtMy4yNDQgMjMuOTA1IDIzLjkwNSAwIDAwNC41ODUtMS4xNjUgMjUuMjg2IDI1LjI4NiAwIDAwMi40My00LjA4NiA1Ljk0IDUuOTQgMCAwMTIuODUxIDEuMzczbC4zNS4zMDYuMjMzLS40MDhhMTYuNjYxIDE2LjY2MSAwIDAwMi4xNC02Ljc2NGwuMDQyLS40NzItLjQ1LjAzNnpNMjAuOTMgMjIuMjc4Yy0xLjYzLjQ1OC0zLjI4Ny42ODktNC45MzMuNjg5LTEuNjUgMC0zLjMwNC0uMjMxLTQuOTM2LS42OWEyMC4wMjggMjAuMDI4IDAgMDEtMi4xMTMtNC41OTQgMjAuMDcyIDIwLjA3MiAwIDAxLS44OS01LjA0IDE5LjA3NiAxOS4wNzYgMCAwMTMuNTc2LTMuNTE2IDE4Ljg2NyAxOC44NjcgMCAwMTQuMzYzLTIuNDQ4IDE4Ljk0NCAxOC45NDQgMCAwMTQuMzU1IDIuNDQzIDE5LjE5IDE5LjE5IDAgMDEzLjU5MiAzLjUzOGMtLjA5IDEuNzMtLjM5IDMuNDEtLjg5OSA1LjAxOWExOS45NjUgMTkuOTY1IDAgMDEtMi4xMTUgNC41OTl6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRXRjZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2djcCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjA4NS4xaDQuNTQ5djYuMjkxSC4wODV6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEQjQ0MzdcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMjIuNTcgMjkuOTgyaC01Ljc0OWMuNTI3IDAgLjk4Ny0uMjgyIDEuMjMzLS43TDI1Ljg1NyAxNiAyMC45MyA3LjYxbDUuNzQ4LjAwMWMuNDkyIDAgLjk3LjI1MSAxLjIzMi43bDMuNjk4IDYuMjkxYy40OS44MzcuNTI2IDEuOSAwIDIuNzk3bC02LjU3MiAxMS4xODVhMi44NTMgMi44NTMgMCAwMS0yLjQ2NCAxLjM5OHptLS43MS0yLjc5NmMwIC4zODYuMzE4LjcuNzEuN2EuNzA1LjcwNSAwIDAwLjcxMi0uN2MwLS4zODYtLjMxOC0uNy0uNzExLS43YS43MDUuNzA1IDAgMDAtLjcxMi43em02LjkyNy0xMC41OGMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwMC0uMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3Mi4yNTYuNjkyLjY5MiAwIDAwLjI2Ljk1NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yNS4wMzYgMy40MTZsMi44NzMgNC44OTRhMS40MjcgMS40MjcgMCAwMC0xLjIzMi0uNjk5SDExLjA3MWwtNC45MjggOC4zODgtMi44NzQtNC44OTJhMS4zNzcgMS4zNzcgMCAwMTAtMS4zOTlsMy42OTYtNi4yOTJhMi44NTMgMi44NTMgMCAwMTIuNDY0LTEuMzk4aDEzLjE0M2MuOTgyIDAgMS45MzcuNTAyIDIuNDY0IDEuMzk4ek0xMC4xNCA0LjgxNGMwLS4zODYtLjMxOC0uNy0uNzEtLjdhLjcwNS43MDUgMCAwMC0uNzEyLjdjMCAuMzg2LjMxOC43LjcxMS43YS43MDUuNzA1IDAgMDAuNzExLS43em0xMi43ODcuNjA2YS42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2LjY5Mi42OTIgMCAwMC0uMjYuOTU1LjcxOC43MTggMCAwMC45NzEuMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjRCNDAwXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4zOTQgMTQuNjAxbDIuODc1LTQuODkzYy0uMjYzLjQ0OS0uMjQ1Ljk4IDAgMS4zOTlMMTEuMDcgMjQuMzloOS44NTdsLTIuODc0IDQuODkyYy0uMjQ2LjQxOC0uNzA2LjctMS4yMzMuN0g5LjQyOGEyLjg1NCAyLjg1NCAwIDAxLTIuNDY0LTEuMzk4TC4zOTQgMTcuMzk4YTIuNzU0IDIuNzU0IDAgMDEwLTIuNzk3em0yLjgyLjc5M2EuNzE4LjcxOCAwIDAwLS45NzIuMjU2LjY5My42OTMgMCAwMC4yNi45NTVjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMDAtLjI2LS45NTV6TTkuMDcyIDI2LjU4YS42OTIuNjkyIDAgMDAtLjI2Ljk1NS43MTguNzE4IDAgMDAuOTcxLjI1Ni42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMTguMDU0IDI5LjI4MmwyLjg3NS00Ljg5MkgxNy45NmwtMS4xMzggNS41OTFjLjUyNiAwIC45ODYtLjI4IDEuMjMyLS42OTlNMjYuNjc4IDcuNjExaC01Ljc0OWwxLjQ4NCAyLjUyN0wyNy45MSA4LjMxYTEuNDI3IDEuNDI3IDAgMDAtMS4yMzItLjdcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBvcGFjaXR5OiAwLjEsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjk5NCA5LjYwOSlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTS4yNzUgMS40OThMMy4xNSA2LjM5MWwxLjQ4NS0yLjUyN0wuMjc1LjFjLS4yNjMuNDQ4LS4yNDUuOTggMCAxLjM5OFwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQ0NDXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjA3MSAyNC4zOUw2LjE0MyAxNmw0LjkyOC04LjM5aDkuODU4TDI1Ljg1NyAxNmwtNC45MjggOC4zOUgxMS4wN3pNMjAuMjY4IDE2YzAtMi4zMTctMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc3LTQuMjY4IDQuMTk0IDAgMi4zMTYgMS45MSA0LjE5NCA0LjI2OCA0LjE5NCAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcE1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcE1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNTYgMTUuOTgyYzAtMi4zMTYtMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc4LTQuMjY4IDQuMTk0IDAgMi4zMTcgMS45MTEgNC4xOTUgNC4yNjggNC4xOTUgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuODcgMTYuNTQzYS44NjIuODYyIDAgMDEtMS4xNjcuMzA4LjgzMi44MzIgMCAwMS0uMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMiAxLjE0N00yMi41NiAyOC4xNWEuODQ3Ljg0NyAwIDAxLS44NTUtLjg0YzAtLjQ2NC4zODMtLjg0Ljg1NS0uODRzLjg1NC4zNzYuODU0Ljg0YzAgLjQ2NC0uMzgyLjg0LS44NTQuODRtLTEyLjcxNS0uMTEzYS44NjMuODYzIDAgMDEtMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LjMwOC44MzIuODMyIDAgMDEtLjMxMiAxLjE0N00zLjU4NiAxNi41NDJhLjg2My44NjMgMCAwMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAxLS4zMTMtMS4xNDcuODYyLjg2MiAwIDAxMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEzIDEuMTQ3TTIyLjk4NyA1LjY2NWEuODYyLjg2MiAwIDAxLTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMi0xLjE0Ny44NjMuODYzIDAgMDExLjE2OC4zMDguODMyLjgzMiAwIDAxLS4zMTMgMS4xNDdtLTEzLjU3LjExMmEuODQ3Ljg0NyAwIDAxLS44NTQtLjg0YzAtLjQ2NC4zODItLjg0Ljg1NC0uODRzLjg1NS4zNzYuODU1Ljg0YzAgLjQ2NC0uMzgzLjg0LS44NTUuODRtMjIuMTc4IDguNzk3bC0zLjY5Ny02LjI5MmMtLjAxNC0uMDIzLS4wMy0uMDQzLS4wNDUtLjA2NWwtMi44My00LjgxOEEyLjg1NCAyLjg1NCAwIDAwMjIuNTYgMkg5LjQxN2EyLjg1MyAyLjg1MyAwIDAwLTIuNDY0IDEuMzk4TDMuMjU3IDkuNjlsMy4yODQgNS41OSA0LjUxOS03LjY5aDE1LjYwNWMuNDkxIDAgLjk2OS4yNTEgMS4yMzIuNjk5aC02LjU2NWw0LjUxMyA3LjY4Mi00LjkzNSA4LjQtMi44NyA0Ljg4M2ExLjQyNiAxLjQyNiAwIDAxLTEuMjMuNjk5bDMuMjc5LTUuNTgyaC05LjAzbC00LjU0NC03LjczOC0uMzg0LS42NTMtMi44NzQtNC44OTNhMS4zNzcgMS4zNzcgMCAwMS0uMDAzLTEuMzkxTC4zODIgMTQuNTg0YTIuNzU0IDIuNzU0IDAgMDAwIDIuNzk2bDYuNTcgMTEuMTg2YTIuODU0IDIuODU0IDAgMDAyLjQ2NSAxLjM5OGg3LjM5MmMuMDU0IDAgLjEwNy0uMDA1LjE2LS4wMTFoNS41OWEyLjg1MyAyLjg1MyAwIDAwMi40NjQtMS4zOTdsNi41NzItMTEuMTg2Yy41MjYtLjg5Ni40OS0xLjk2IDAtMi43OTZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcE1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HaXRodWIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dpdGh1YihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjQgMCAwIDcuMzQzIDAgMTYuNGMwIDcuMjQ4IDQuNTg0IDEzLjM5NCAxMC45NDIgMTUuNTYyLjguMTUgMS4wOTItLjM1NiAxLjA5Mi0uNzg5IDAtLjM5LS4wMTQtMS42ODQtLjAyMi0zLjA1My00LjQ1Ljk5MS01LjM5LTEuOTM0LTUuMzktMS45MzQtLjcyOC0xLjg5NC0xLjc3Ni0yLjM5OC0xLjc3Ni0yLjM5OC0xLjQ1NC0xLjAxNy4xMS0uOTk3LjExLS45OTcgMS42MDYuMTE0IDIuNDUyIDEuNjkgMi40NTIgMS42OSAxLjQyOCAyLjUwNiAzLjc0NiAxLjc4MSA0LjY1NiAxLjM2LjE0Ni0xLjA1Ni41Ni0xLjc4IDEuMDE2LTIuMTktMy41NTItLjQxNC03LjI4OC0xLjgyMS03LjI4OC04LjEwNSAwLTEuNzkyLjYyNC0zLjI1NCAxLjY0Ni00LjQwMi0uMTY0LS40MTYtLjcxNC0yLjA4NS4xNTgtNC4zNDIgMCAwIDEuMzQxLS40NCA0LjQgMS42ODFBMTQuODgyIDE0Ljg4MiAwIDAxMTYgNy45MzJjMS4zNi4wMDYgMi43MjguMTg4IDQuMDA2LjU1MyAzLjA1My0yLjEyNCA0LjM5Ni0xLjY4MSA0LjM5Ni0xLjY4MS44NzUgMi4yNTkuMzI1IDMuOTI2LjE2IDQuMzQgMS4wMjYgMS4xNDggMS42NDUgMi42MSAxLjY0NSA0LjQwMiAwIDYuMy0zLjc0MiA3LjY4Ny03LjMwNyA4LjA5NC41NzcuNTA4IDEuMDg2IDEuNTA1IDEuMDg2IDMuMDM1IDAgMi4xOTItLjAyMSAzLjk2LS4wMjEgNC41IDAgLjQzNy4yOS45NDcgMS4xMDEuNzg3QzI3LjQyIDI5Ljc5IDMyIDIzLjY0NCAzMiAxNi40IDMyIDcuMzQzIDI0LjgzNiAwIDE2IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HaXRodWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR21haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTY1QTREXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy4yOS0uMTc1LjU4OC0uMDc4Ljg3MyAwYTIuNjE2IDIuNjE2IDAgMDExLjkwNyAyLjQ3NmMuMDA2LjI5LS4wMDcuNTgxLS4wMDcuODY2LS4wODQgMC0uMTM1LjA1Mi0uMi4wOTctLjgxNS41ODItMS42NDIgMS4xNjQtMi40NSAxLjc1Mi0uMzMuMjM5LS42OTIuNDI2LS45Ny43My0uMTE2IDAtLjIuMDc4LS4yODQuMTM2LTIuNjkgMS44NTUtNS4zNzkgMy43MDQtOC4wNjIgNS41Ni0xLjMzMS45MTgtMi42NjMgMS44NDktMy45OTUgMi43NzNoLS4xMWMtLjA1OC0uMDQ1LS4xMS0uMTAzLS4xNjgtLjE0Mkw1Ljg2MyAxMS41NWMtLjY3Mi0uNDY2LTEuMzQ0LS45MzgtMi4wMTctMS40MDMtLjA3Ny0uMDUyLS4xNDgtLjE2Mi0uMjQ1LS4xMDQtLjA5LjA1Mi0uMDMzLjE3NS0uMDQ1LjI3Mi0uMDA3LjAzMiAwIC4wNjUgMCAuMDk3djE2LjE5NGMwIC4xMTYuMDA2LjI0LjAxMi4zNTUgMCAuMDY1LS4wMDYuMTIzLS4wMDYuMTg4LTEuMjI4LjE0OS0yLjM0Ny0uMDItMy4xMTYtMS4xMzFhMi4zODEgMi4zODEgMCAwMS0uNDQtMS4zNjRjMC02LjAzMi0uMDA2LTEyLjA1Ny4wMDctMTguMDg5IDAtMS4yMjguOTk1LTIuMzE0IDIuMjE3LTIuNDg4LjE5NC0uMDI2LjM4OC0uMDUyLjU1Ni4wNzcuMDQuMDM5LjA3MS4wNzguMTE3LjExIDQuMjczIDMuMTY4IDguNTQ2IDYuMzM1IDEyLjgxOSA5LjUxLjE2OC4xMjIuMjc4LjExNi40NDYtLjAwNyAzLjQxMy0yLjUyMSA2LjgzMy01LjAzNiAxMC4yNDctNy41NS45MDUtLjY5MiAxLjgyMy0xLjM4NCAyLjc0Ny0yLjA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZGNEVDXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy0uOTI0LjY4NS0xLjg0MiAxLjM3Ny0yLjc2NyAyLjA2Mi0zLjQxMyAyLjUyMS02LjgzMyA1LjAzLTEwLjI0NiA3LjU1LS4xNjguMTIzLS4yNzIuMTMtLjQ0Ni4wMDctNC4yNjctMy4xNzQtOC41NC02LjMzNS0xMi44MTMtOS41MS0uMDQ2LS4wMzItLjA3OC0uMDctLjExNy0uMTEuMDc4LS4xMjkuMjE0LS4wODMuMzI0LS4wODNoMjUuNzQyYy4xMSAwIC4yMzktLjA0Ni4zMjMuMDg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNMy41NTYgMjYuOTVhNi41MzMgNi41MzMgMCAwMS0uMDEzLS4zNTZWMTAuNGMwLS4wMzItLjAwNy0uMDY1IDAtLjA5Ny4wMTMtLjA5LS4wNDYtLjIxMy4wNDUtLjI3MS4wOTctLjA1OS4xNzQuMDUxLjI0Ni4xMDMuNjcyLjQ2NSAxLjM0NC45MzcgMi4wMTcgMS40MDNsOS44MzIgNi44NDZjLjA1OC4wNDUuMTE3LjA5Ny4xNjguMTQyLS4wMjYuMDI2LS4wNTguMDQ1LS4wODQuMDcxbC0uMDY0LjA2NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDA3LjAxMy0uMDIuMDItLjAyNi4wMzIuMDEzLS4wMDYuMDItLjAxOS4wMzItLjAyNWwuMDY1LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAxOC0uMDIuMDQ0LS4wNDUuMDY0LS4wNjQuMDY0IDAgLjEyOS0uMDA3LjE5NC0uMDA3Ljg5OC42MjcgMS44MDMgMS4yNDggMi43MDIgMS44NzUgMi42NzYgMS44NTUgNS4zNTMgMy43MDQgOC4wMjMgNS41NzIuNDc4LjMzNyAxLjAwMi42MjggMS40MjggMS4wMzUtLjExNi4xMS0uMjU4LjAzOS0uMzg4LjA1OC4wMDctLjE0OS0uMTIyLS4xODgtLjIyLS4yNTItLjQ5LS4zNDMtLjk5NS0uNjcyLTEuNDczLTEuMDI4LS44MDItLjU4OC0xLjYxNy0xLjE1LTIuNDMxLTEuNzItLjY3OS0uNDcyLTEuMzUxLS45NjMtMi4wNS0xLjQwOS0uNjA3LS4zODgtMS4xNy0uODUzLTEuNzc3LTEuMjQ4LS42ODUtLjQ0LTEuMzMyLS45My0yLjAxLTEuMzc3LS41NjMtLjM2OC0xLjExMy0uNzYyLTEuNjYyLTEuMTUtLjExLS4wNzgtLjIwNy0uMTEtLjMyMy0uMDMzLS4yMzMuMTY4LS41My4yNzgtLjcyNC40Ni0uNTU2LjUxLTEuMjM1Ljg0LTEuODE3IDEuMzA1LS43NDMuNTg5LTEuNTQ1IDEuMTEyLTIuMzQgMS42MzYtMS4zMTkuODczLTIuNTk5IDEuODE2LTMuOTExIDIuNjk2YTQzLjY5NyA0My42OTcgMCAwMC0yLjMwOCAxLjYyOWMtLjIwNy4xNTUtLjQ4NS4yMjYtLjYxNC40ODUtLjEzLS4wMTMtLjI3Mi4wMzgtLjM5NS0uMDQ2IDIuMzE1LTEuNjE2IDQuNjMtMy4yMjYgNi45MzctNC44NDIuMzA0LS4yMTMuNjQ2LS4zODEuODk5LS42NjYuMDQ1LS4wMTMuMTAzLS4wMTkuMDk3LS4wODQgMC0uMDA2LS4wMTMtLjAyLS4wMi0uMDItLjA2NS0uMDA2LS4wNzcuMDQ2LS4wOS4wOTEtLjIzMy4wMTMtLjM3NS4xOTQtLjU1LjMxLTIuNDYzIDEuNy00LjkzMiAzLjM4OC03LjM5NSA1LjA3NXptMTEuMTE5LTcuNTY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAyLjAyNS0uMDMyLS4wMTIuMDA2LS4wMTkuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDE4LjAyNi0uMDM4LjA0NS0uMDU3LjA3LS4wMTMuMDA3LS4wMjYuMDE0LS4wMzMuMDI3LjAxMy0uMDA3LjAyNi0uMDEzLjAzMy0uMDI2em0tLjg0LjU3NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjUtLjAzOS4wMDYtLjA5LjAwNi0uMDk3LjA2NSAwIC4wMTIuMDI2LjAzOC4wMzkuMDM4LjA1Mi0uMDA2LjA1OC0uMDUxLjA2NS0uMDkuMDUxLS4wMDcuMDk2LS4wMTMuMTIyLS4wNzhhLjMxMS4zMTEgMCAwMC4wNzEtLjA1OGMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjVsLjA2NC0uMDY0Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMi0uMDIuMDI2LS4wMzItLjAxMy4wMDYtLjAyLjAyLS4wMzMuMDI2LS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY0LS4wMTguMDItLjA0NC4wNDYtLjA2NC4wNjUtLjA1MSAwLS4xMDMuMDEzLS4xMjkuMDY1bC0uMDY1LjA2NHptLS44NDEuNTg4Yy0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDUxLjAwNy0uMTAzLjAxMy0uMDk2LjA4NCAwIC4wMDcuMDEzLjAyLjAyLjAyLjA3LjAwNi4wNzctLjA0Ni4wODMtLjA5Ny4wNTItLjAwNy4wOTctLjAyLjEyMy0uMDcyLjAyNi0uMDEyLjA0NS0uMDM4LjA3MS0uMDU4LjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDE5LS4wMTkuMDI1LS4wMzItLjAxMy4wMDctLjAyLjAyLS4wMzIuMDI2LS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1bC0uMDY0LjA2NGMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVhLjMwNi4zMDYgMCAwMC0uMDY0LjA2NHptLS42NDcuNDZjLjA1Mi0uMDA3LjEwNC0uMDEzLjA5Ny0uMDg1IDAtLjAwNi0uMDEyLS4wMTktLjAxOS0uMDE5LS4wNzEtLjAwNi0uMDc4LjA0NS0uMDg0LjA5Ny0uMDUyIDAtLjA5Ny4wMTMtLjEzLjA2NWEuMjIzLjIyMyAwIDAwLS4xOTMuMTI5Yy0uMDQ1LjAxMy0uMTA0LjAxMy0uMDk3LjA4NCAwIC4wMDYuMDEzLjAyLjAyLjAyLjA2NC4wMDYuMDc3LS4wNDYuMDgzLS4wOTguMDkgMCAuMTgxLS4wMDYuMTk0LS4xMjkuMDU4LS4wMDYuMTA0LS4wMi4xMy0uMDY1em0yLjEyOC0xLjUzM2MtLjAwOC4wMjctLjAyNS4wNTQtLjAzMy4wNzIuMDI1LjAwOS4wNS4wMzUuMDY3LjAyNy4wMTYtLjAxLjAyNS0uMDQ1LjAzMy0uMDcyYS41NS41NSAwIDAxLS4wNjctLjAyN3ptLTEuODEgMS4zNWMtLjAwOC0uMDI0LS4wMTUtLjA1Ni0uMDMtLjA1Ni0uMDE1LS4wMDgtLjA1Mi4wMDgtLjA2LjAyNC0uMDIyLjAzMy0uMDA3LjA3NC4wMy4wNzQuMDIyIDAgLjAzNy0uMDI1LjA2LS4wNDF6TTE1LjM1NSAxOWEuMTg1LjE4NSAwIDAxLjAzNC0uMDcyYy0uMDI1LS4wMDktLjA1LS4wMzUtLjA2Ny0uMDI2LS4wMTYuMDA4LS4wMjUuMDQ0LS4wMzMuMDcuMDE3LjAxLjA0Mi4wMTkuMDY3LjAyOHptLTMuNTI2IDIuNDAyYy0uMDE2LS4wMjQtLjAzMS0uMDUtLjA0LS4wNTctLjAxNSAwLS4wNTUuMDE2LS4wNTUuMDMzLS4wMTYuMDQuMDA4LjA3NC4wNDguMDY1LjAxNiAwIC4wMzEtLjAyNC4wNDctLjA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQjZCNUFDXCIsXG4gICAgZDogXCJNMjguMTIxIDI3LjA4NWMtLjQyNi0uNDEzLS45NDQtLjY5OC0xLjQyOC0xLjAzNC0yLjY3LTEuODYyLTUuMzQ3LTMuNzE3LTguMDIzLTUuNTczLS44OTktLjYyNy0xLjgwNC0xLjI0Ny0yLjcwMi0xLjg3NCAwLS4wMi0uMDA3LS4wNDYtLjAwNy0uMDY1bDMuOTk1LTIuNzczYzIuNjktMS44NTYgNS4zNzktMy43MDUgOC4wNjItNS41Ni4wODQtLjA1OC4xNjgtLjEzNi4yODQtLjEzNnYxNy4wNzNjLS4wNTEtLjAxOS0uMTE2LS4wMzgtLjE4LS4wNTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk00LjA3MyAyNy4xNDNjLjEyMy0uMjU4LjQwNy0uMzMuNjE0LS40ODRhNDcuODQ1IDQ3Ljg0NSAwIDAxMi4zMDgtMS42M2MxLjMxMi0uODg1IDIuNTkyLTEuODIzIDMuOTEtMi42OTUuNzk2LS41MjQgMS41OTgtMS4wNDggMi4zNDEtMS42MzYuNTg4LS40NjUgMS4yNi0uNzk1IDEuODE3LTEuMzA2LjItLjE4LjQ5LS4yOS43MjQtLjQ1OS4xMS0uMDg0LjIwNy0uMDUxLjMyMy4wMzMuNTUuMzg4IDEuMDk5Ljc4MiAxLjY2MSAxLjE1LjY4LjQ0NiAxLjMyNi45NDQgMi4wMSAxLjM3Ny42MDguMzg4IDEuMTcuODU0IDEuNzc5IDEuMjQ4LjY5OC40NDYgMS4zNy45MzcgMi4wNDkgMS40MS44MTQuNTY4IDEuNjM1IDEuMTMgMi40MyAxLjcxOS40ODUuMzU1Ljk4My42ODUgMS40NzUgMS4wMjguMDkuMDY0LjIyNi4xMDMuMjIuMjUyLTcuODg4LS4wMDctMTUuNzc0LS4wMDctMjMuNjYxLS4wMDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCMTM5MkZcIixcbiAgICBkOiBcIk0yOC4zMTUgMjcuMTQzVjEwLjA3Yy4yNzgtLjMwNC42NC0uNDkxLjk3LS43My44MTQtLjU5NSAxLjYzNS0xLjE3IDIuNDUtMS43NTIuMDU4LS4wNDUuMTE2LS4wOTcuMi0uMDk3LjAwNy4xMS4wMTMuMjEzLjAxMy4zMjMgMCA1LjUwMiAwIDExLjAxLjAwNyAxNi41MSAwIC4zNzYtLjAxMy43NS0uMTA0IDEuMTI2LS4xNjEuNjkxLS41NzUgMS4xNy0xLjI0NyAxLjQwOS0uNzQ0LjI1OS0xLjUxMy4zMy0yLjI4OS4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCRUJEQjNcIixcbiAgICBkOiBcIk0xMS41MTQgMjEuNTljLS4yNTMuMjg1LS41OTUuNDUzLS45LjY2NmEyNjUwLjA3OCAyNjUwLjA3OCAwIDAxLTYuOTM2IDQuODQybC0uMTI5LjAzOWMwLS4wNjUuMDA3LS4xMjMuMDA3LS4xODggMi40Ny0xLjY4NyA0LjkzMi0zLjM3NCA3LjQwMi01LjA2MS4xNzQtLjExNy4zMS0uMzA0LjU1LS4zMWwuMDA2LjAxMnpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dvbGFuZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29sYW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzAxYy4wNDUuOTQ2IDEgLjUgMS40MTYuMjEuNDE1LS4yOS41LS4wNDUuNTYtLjZhOS4wNyA5LjA3IDAgMDAuMDQ1LTEuMDkgMi42NzYgMi42NzYgMCAwMC0xLjc4Ni40NTVjLS4yNi4xOS0uNzQ1Ljc5LS4yNCAxXCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjgwNSAxNy45ODdhLjYuNiAwIDAxLS4yNy0uMDYuNjIuNjIgMCAwMS0uMzEtLjU1QS40MS40MSAwIDAxNCAxNy4wNWExLjE1IDEuMTUgMCAwMS41LS44MyAyLjc1MiAyLjc1MiAwIDAxMS44NDYtLjQ3aC4wNzV2LjA3NGMuMDEuMjg2LjAwMy41NzItLjAyNS44NTZ2LjI1Yy0uMDI1LjM5LS4xLjQ1LS4zLjVhMS4xMTggMS4xMTggMCAwMC0uMy4xNDVjLS4yODguMjIzLS42My4zNjQtLjk5LjQxem0xLjI3MS0yLjA2N2EyLjUwMiAyLjUwMiAwIDAwLTEuNDcuNDUgMSAxIDAgMDAtLjQyLjY3MS4yNS4yNSAwIDAwLjE3LjIwNWguMDV2LjA1NWEuNS41IDAgMDAuMjEuNDUgMS4zMSAxLjMxIDAgMDAxLjA2NS0uMzEgMS4yOSAxLjI5IDAgMDEuMzQtLjE3Yy4xMy0uMDQ1LjE2LS4wNTUuMTgtLjM2NXYtLjI1Yy4wMjQtLjI1LjAzNC0uNS4wMy0uNzVoLS4xNTV2LjAxNHpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMzE1IDE3LjNhLjc0NS43NDUgMCAwMC4zNzYtLjIxelwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzkxYS4wOTIuMDkyIDAgMTEtLjA1NS0uMTc1aC4wNmEuNTQuNTQgMCAwMC4yNzUtLjE2LjA5Mi4wOTIgMCAwMS4wNi0uMDM1LjA5LjA5IDAgMDEuMDY4LjAxNy4wOS4wOSAwIDAxLjAzNS4wNi4wOTEuMDkxIDAgMDEtLjAxOC4wNjguNy43IDAgMDEtLjM2LjIyaC0uMDY1di4wMDV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjQ5NiA2LjA1QzIuODggNS4wNDkgNS41NzEuNDMgOC40OTggMi4zMjJMNi40OTYgNi4wNXpcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTQxIDYuMTU0aC0uMDdjLTEuMDMtLjI5LTEuNjY2LS45LTEuNzg2LTEuNzE2YTIuMzk2IDIuMzk2IDAgMDExLjExNi0yLjI2IDIuNDIxIDIuNDIxIDAgMDEyLjcyMi4wOWwuMDcuMDQ0TDYuNTQgNi4xNTR6bS41LTQuMTkyYy0uNDEgMC0uODExLjEyLTEuMTU1LjM0NUEyLjIxMSAyLjIxMSAwIDAwNC44NSA0LjM5M2MuMTEuNzI2LjY3IDEuMjc2IDEuNTg2IDEuNTUxbDEuOTAxLTMuNTg3YTIuNTAxIDIuNTAxIDAgMDAtMS4yOC0uMzhsLS4wMTUtLjAxNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjU2NiAxLjk3N2MyLjg2Mi0yLjAwMSA1LjQ0OCAyLjUwMiAyLjEyMSAzLjY2N2wtMi4xMjEtMy42Njd6XCIsXG4gICAgZmlsbDogXCIjNzRDREREXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNC42NDcgNS43NTRsLTIuMjAxLTMuODAyLjA2NS0uMDQ1YTIuMzYyIDIuMzYyIDAgMDEyLjYyNi0uMjIgMi40MjcgMi40MjcgMCAwMTEuMTk2IDIuMjQxYy0uMDUuNS0uMzIgMS4zNTYtMS42MTYgMS44MDFsLS4wNy4wMjV6bS0xLjk2MS0zLjc1MmwyLjA0MSAzLjUzMmExLjk1NiAxLjk1NiAwIDAwMS40MjYtMS42MiAyLjI0IDIuMjQgMCAwMC0xLjEwNi0yLjA3NyAyLjEyNiAyLjEyNiAwIDAwLTIuMzYxLjE2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzLjE4MSAyOC45MjhjLjcyNi40NSAyLjA1NiAxLjgxMS45NjYgMi40NzEtMS4wNDYuOTYxLTEuNjM2LTEuMDU1LTIuNTU3LTEuMzNhMi41NDkgMi41NDkgMCAwMTEuNTkxLTEuMTQxelwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMuNTkyIDMxLjc0NWgtLjA0Yy0uNDE2LS4wMjUtLjc1Ni0uNDMtMS4wODYtLjgxNmEyLjMzIDIuMzMgMCAwMC0uOS0uNzc1bC0uMTItLjAzNS4wNzQtLjEyNWEyLjY1NiAyLjY1NiAwIDAxMS42NDYtMS4xNzZoLjA2NWMuNDY2LjI5IDEuNDI2IDEuMTMgMS40MjEgMS44OTFhLjgzNS44MzUgMCAwMS0uNDUuNzI1LjkwNS45MDUgMCAwMS0uNjEuMzF6bS0xLjg2MS0xLjcyMWMuMzM5LjIuNjMzLjQ2Ny44NjUuNzg1LjIxOS4zNi41Ni42MjguOTYuNzU1YS43MTYuNzE2IDAgMDAuNS0uMjM1LjY2MS42NjEgMCAwMC4zNzEtLjU4YzAtLjYxLS43Ny0xLjM3Ni0xLjMwNi0xLjcyMWEyLjM1MSAyLjM1MSAwIDAwLTEuMzg2Ljk5NmgtLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjE0NyAzMS40OTRhLjA5LjA5IDAgMDEtLjA4LS4wNWMtLjA1My0uMTEtLjEtLjIyNC0uMTQtLjM0YTEuNSAxLjUgMCAwMC0uMzMtLjYxLjA5MS4wOTEgMCAwMS0uMDIyLS4wOTguMDkuMDkgMCAwMS4xNDctLjAzMmMuMTcyLjE4OC4zLjQxNC4zNy42Ni4wMzkuMTEuMDg0LjIxNi4xMzUuMzJhLjA5LjA5IDAgMDEtLjA0LjEybC0uMDQuMDN6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4xODkgMzAuNDY0Yy0uODU2LjEzLTEuMzM2LjktMi4wNDYgMS4yOWEuNjIuNjIgMCAwMS0xLjAwMS0uMjM1LjMyNS4zMjUgMCAwMS0uMjYtLjEyYy0uNjItMSAuNjQ1LTEuNjk2IDEuMzEtMi4xODYuOTM2LS4xOCAxLjUxMS42MTUgMS45OTcgMS4yNXpcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjkyIDMxLjk5NWEuNjEzLjYxMyAwIDAxLS4xNiAwIC43NC43NCAwIDAxLS40MzUtLjM3NS4zMDEuMzAxIDAgMDEtLjI0NS0uMTNjLS42LS45NDYuNDItMS42NjIgMS4wOTYtMi4xMzdsLjIzNS0uMTdjLjk0NS0uMTkgMS41NDYuNTkgMi4wMjYgMS4yMmwuMTM1LjE4MWgtLjE1YTIuNTg2IDIuNTg2IDAgMDAtMS4yNjYuNzI1Yy0uMjMuMjEyLS40ODIuNC0uNzUuNTZhMS4wMDEgMS4wMDEgMCAwMS0uNDg2LjEyNnptLS42LS41OGEuMjQ1LjI0NSAwIDAxLjEwNSAwaC4wMjVsLjA0LjA4YS41OC41OCAwIDAwLjMzNS4zMDUuNjg2LjY4NiAwIDAwLjUtLjEyYy4yNi0uMTU1LjUwMy0uMzM3LjcyNi0uNTRhMyAzIDAgMDExLjIwNi0uNzM2Yy0uNDYtLjYtMS0xLjI1LTEuNzg2LTEuMWwtLjIyNS4xNmMtLjY5LjUtMS41NDYgMS4wOS0xLjA1MSAxLjg4NWEuMTQ2LjE0NiAwIDAwLjEwNS4wN2wuMDItLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTU3IDMxLjYxNGEuMDkuMDkgMCAwMS0uMDktLjEyYy4wMzctLjI0LjEzNy0uNDY2LjI5LS42NTUuMDcyLS4xLjEzNi0uMjA1LjE5LS4zMTVhLjA5LjA5IDAgMTEuMTY1LjA3NWMtLjA1OC4xMi0uMTI3LjIzNi0uMjA1LjM0NS0uMTMyLjE3LS4yMTcuMzcyLS4yNDUuNTg1YS4wOS4wOSAwIDAxLS4wNjcuMDg0LjA5LjA5IDAgMDEtLjAzOC4wMDJ6TTYuNjQ3IDQuNzhjLS41LS4yNS0uODI2LS41OTYtLjUzNi0xLjE0Ni4yOS0uNTUuNzctLjQ1NSAxLjI1MS0uMjA1bC0uNzE1IDEuMzV6bTE3LjI4NS0uNDhjLjUtLjI1LjgyNS0uNTk2LjUzNS0xLjE0Ni0uMjktLjU1LS43Ny0uNDU2LTEuMjUtLjIwNWwuNzE1IDEuMzV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTkgMTcuMTgxYy0uMDQ1Ljk0Ni0xLjAwMS41LTEuNDE2LjIxLS40MTYtLjI5LS41LS4wNDUtLjU2LS42YTkuMDY4IDkuMDY4IDAgMDEtLjA0Ni0xLjA5IDIuNjc3IDIuNjc3IDAgMDExLjc4Ny40NTRjLjI2LjE5Ljc0NS43OS4yNCAxLjAwMVwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNzI4IDE3Ljg0NmEyLjA0NiAyLjA0NiAwIDAxLS45NTUtLjM2IDEuMTE3IDEuMTE3IDAgMDAtLjMtLjE0NWMtLjItLjA3LS4yNzUtLjEzLS4zLS41di0uMjVhNi41MTYgNi41MTYgMCAwMS0uMDI2LS44NTZ2LS4xMmguMDc2YTIuNzUxIDIuNzUxIDAgMDExLjg0Ni40NyAxLjE1IDEuMTUgMCAwMS41LjgzLjQxMi40MTIgMCAwMS0uMjI1LjMyNi42Mi42MiAwIDAxLS4zMS41NS42MDUuNjA1IDAgMDEtLjMwNi4wNTV6bS0xLjQ1Ni0yLjA2Yy0uMDAzLjI1LjAwNy41LjAzLjc1di4yNWMwIC4zMDUuMDQ2LjMxNS4xOC4zNjUuMTIyLjA0LjIzNi4wOTcuMzQuMTdhMS4zMDcgMS4zMDcgMCAwMDEuMDY3LjMxLjUwMi41MDIgMCAwMC4yMS0uNDV2LS4wNmguMDVhLjI1LjI1IDAgMDAuMTctLjIwNSAxLjAwMiAxLjAwMiAwIDAwLS40Mi0uNjcgMi41NTIgMi41NTIgMCAwMC0xLjYyNy0uNDZ6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTggMTcuMTgxYS43NDYuNzQ2IDAgMDEtLjM3NS0uMTk1elwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuMjE5IDE3LjI3MWgtLjA5NWEuNy43IDAgMDEtLjM1LS4yNS4wOS4wOSAwIDAxLS4wMDctLjEwMS4wOTEuMDkxIDAgMDEuMTUyLS4wMS41NC41NCAwIDAwLjI3NS4xNmguMDZhLjEwMS4xMDEgMCAxMS0uMDM1LjIwMXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjQwNy4wNjZjMy42MjIgMCA3LjAwNC41IDguNzg1IDQuMDAyIDEuNTg2IDMuODk4IDEgOC4xMDUgMS4yNjYgMTIuMjIzLjIxIDMuNTM3LjY3IDcuNjI0LS45NyAxMC45MDYtMS43MTcgMy40NDItNi4wNSA0LjI5Ny05LjYwMSA0LjE4Mi0yLjc5Mi0uMS02LjE2NC0xLTcuNzQtMy41NjItMS44NTEtMy4wMDItLjk3Ni03LjQ0NC0uODQtMTAuNzcxLjE2LTMuOTQyLTEuMDcxLTcuOS4yMjUtMTEuNzYyQzcuODc3IDEuMjgyIDExLjUuMzc2IDE1LjQwMi4wNjZcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUwMiAzMS40OTRoLS42MmExMy4yMDIgMTMuMjAyIDAgMDEtNC4zNTgtLjg3IDYuOTY5IDYuOTY5IDAgMDEtMy40NTctMi43MzdjLTEuNTAxLTIuNDIxLTEuMjMtNS43NjMtMS04LjcxNS4wNi0uNzQuMTE0LTEuNDQ2LjE0LTIuMTA2LjAyNi0xLjQtLjAzNC0yLjgtLjE4LTQuMTkyLS4yMTEtMi41MDItLjQzMS01LjA4OS40MS03LjU5NWE2LjY0NCA2LjY0NCAwIDAxMy41MDEtNC4wNDdDMTEuMjkuNTcyIDEyLjk0LjE5IDE1LjM2NyAwYzMuNTcyLS4wMjUgNy4wOTQuNDc1IDguOTA1IDQuMDIyIDEuMTYgMi44NTIgMS4xNzYgNS45MTQgMS4xOTYgOC44NzYgMCAxLjExIDAgMi4yNTYuMDggMy4zNzcgMCAuMzQuMDQuNjg1LjA2NSAxLjAzLjIxIDMuMjQ3LjQ1IDYuOTM0LTEuMDQ2IDkuOTE2LTEuODcxIDMuNzMyLTYuNTc0IDQuMjcyLTkuMDY1IDQuMjcyek0xNS40MDcuMTU2Yy0zLjc2OC4zMi03LjQ0IDEuMTMtOC43OSA1LjE1OC0uODMxIDIuNDcxLS42MSA1LjAzOC0uNDA2IDcuNTA0LjE0NyAxLjQuMjA3IDIuODA2LjE4IDQuMjEzLS4wMjUuNjY1LS4wODUgMS4zNy0uMTQgMi4xMTYtLjIzIDIuOTIyLS41IDYuMjM5Ljk2NiA4LjYwNS42MTUgMSAyLjU5NiAzLjMzNyA3LjY3IDMuNTAyIDIuMTk2LjA4IDcuNTA0LS4xNyA5LjUwNS00LjE0MiAxLjQ3LTIuOTQyIDEuMjM2LTYuNTk5IDEuMDI2LTkuODI2IDAtLjM1LS4wNDUtLjY5NS0uMDY1LTEuMDNhNjcuNDUxIDY3LjQ1MSAwIDAxLS4wOC0zLjM1M2MwLTIuOTQxLS4wMy02LjAwMy0xLjE4MS04LjgwNUE2LjQzOCA2LjQzOCAwIDAwMjAuNDQ1Ljg0MWExNC45NiAxNC45NiAwIDAwLTUuMDM4LS42ODV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNDIgNC45MjRjLjY1IDMuNzc3IDYuODI0IDIuNzgxIDUuOTM4LTEuMDMtLjc5NS0zLjQxOC02LjE1My0yLjQ3Mi01LjkzOCAxLjAzelwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguOTc5IDcuMzlhMy40NTcgMy40NTcgMCAwMS0xLjEzLS4xODUgMi43OTcgMi43OTcgMCAwMS0xLjg5Mi0yLjI2NiAyLjg4MiAyLjg4MiAwIDAxLjc4LTIuMjIyIDMuNDA3IDMuNDA3IDAgMDEyLjAwMi0xIDMuMjAyIDMuMjAyIDAgMDEyLjAzMS4zNSAyLjcyNyAyLjcyNyAwIDAxMS4yOTYgMS44MDYgMi42NDMgMi42NDMgMCAwMS0uNzcgMi42ODIgMy41MDIgMy41MDIgMCAwMS0yLjMxNy44MzV6bS0yLjg0Ny0yLjQ3NmEyLjYyNiAyLjYyNiAwIDAwMS43NzYgMi4xMjYgMy40MTcgMy40MTcgMCAwMDMuMjc3LS42MiAyLjUwMiAyLjUwMiAwIDAwLjcxNi0yLjUwMiAyLjY3MiAyLjY3MiAwIDAwLTMuMTMyLTIuMDMxIDIuODg3IDIuODg3IDAgMDAtMi42MzcgMy4wMjd6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjY2MyA1LjUzOWMuODQgMy4yODcgNi4xMDMgMi40NDEgNS45MDgtLjg1NS0uMjM1LTMuOTUzLTYuNzE0LTMuMjA3LTUuOTA4Ljg1NXpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjQ3NCA3LjcwNWEzLjIzMiAzLjIzMiAwIDAxLTEuNTM2LS4zNzUgMi43MjcgMi43MjcgMCAwMS0xLjM1NS0xLjc3NiAyLjc1NyAyLjc1NyAwIDAxLjk0LTIuODI3IDMuNTUyIDMuNTUyIDAgMDEzLjUzMi0uNDUgMi42NzIgMi42NzIgMCAwMTEuNjAxIDIuNDAyYy4xMDUgMS43NS0xLjI4NiAyLjc3MS0yLjYxNyAzLjAwMWEzLjY1NyAzLjY1NyAwIDAxLS41NjUuMDI1ek04Ljc2MyA1LjUyQTIuNzMyIDIuNzMyIDAgMDAxMi4wMyA3LjUyYzEuMjYtLjIgMi41NzYtMS4xNiAyLjQ3Ni0yLjgwNmEyLjUwMSAyLjUwMSAwIDAwLTEuNS0yLjI2MiAzLjM3NyAzLjM3NyAwIDAwLTMuMzU4LjQzIDIuNTk3IDIuNTk3IDAgMDAtLjg4NSAyLjYzN3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2Ljc2NyA5LjQ4MWMuMDQ5LjUyMS4wNDkgMS4wNDYgMCAxLjU2NmExIDEgMCAwMS0uNTg1LjM2Ljg2MS44NjEgMCAwMS0uNjU1LS41Yy0uMDMyLS41OS0uMDE3LTEuMTgzLjA0NS0xLjc3bDEuMTk1LjM0NHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjIzNyAxMS40ODNoLS4wMjVhLjk0NC45NDQgMCAwMS0uNzI1LS41NjYgNS45NSA1Ljk1IDAgMDEwLTEuMjE1YzAtLjE4NS4wMy0uMzguMDM1LS41N3YtLjE1bDEuMzUuNDE0di4wODVjMCAuMTYgMCAuMzMuMDI2LjUuMDQ1LjM1OC4wNDUuNzIgMCAxLjA3NnYuMDI1YS43NS43NSAwIDAxLS40NzYuMzRsLS4xNTUuMDZoLS4wM3ptLS41OC0uNjNhLjc2Ni43NjYgMCAwMC41Ni40NDVsLjE0LS4wNTZhLjYuNiAwIDAwLjM2Ni0uMjZjLjA0LS4zMzIuMDQtLjY2OCAwLTEgMC0uMTU1IDAtLjMwNS0uMDI2LS40NTVsLTEtLjMwNmMwIC4xNTUgMCAuMzEtLjAzLjQ2LS4wNDQuMzg4LS4wNS43NzgtLjAxNSAxLjE2NmwuMDA1LjAwNXpNMTAuMTE0IDUuOTY0Yy40OTEgMCAuODktLjQzMi44OS0uOTY1IDAtLjUzNC0uMzk5LS45NjYtLjg5LS45NjYtLjQ5MiAwLS44OS40MzItLjg5Ljk2NiAwIC41MzMuMzk4Ljk2NS44OS45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41MTkgNS40NjRjLjExNiAwIC4yMS0uMTEuMjEtLjI0NXMtLjA5NC0uMjQ1LS4yMS0uMjQ1Yy0uMTE2IDAtLjIxLjExLS4yMS4yNDVzLjA5NC4yNDUuMjEuMjQ1elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNTY4IDUuNzI0Yy40ODMgMCAuODc1LS40MzIuODc1LS45NjUgMC0uNTMzLS4zOTItLjk2Ni0uODc1LS45NjYtLjQ4NCAwLS44NzYuNDMzLS44NzYuOTY2IDAgLjUzMy4zOTIuOTY1Ljg3Ni45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy45NjMgNS4yMjRjLjExNCAwIC4yMDYtLjExLjIwNi0uMjQ1IDAtLjEzNi0uMDkyLS4yNDUtLjIwNi0uMjQ1LS4xMTMgMC0uMjA1LjExLS4yMDUuMjQ1cy4wOTIuMjQ1LjIwNS4yNDV6TTE0LjI2NiA5LjQwNmMtLjM5Ljk0MS4yMTUgMi44MjIgMS4yNyAxLjQzNmExMS4xMiAxMS4xMiAwIDAxLjA0Ni0xLjc3bC0xLjMxNi4zMzR6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC44MTIgMTEuNDI4YS41LjUgMCAwMS0uMjYtLjA3Yy0uNDI2LS4yNDYtLjY5MS0xLjI1MS0uMzktMi4wMDJ2LS4wNGwxLjUtLjM4di4xMmMwIC4xOTUgMCAuMzktLjAzNS41NzVhNS43MSA1LjcxIDAgMDAwIDEuMTgxdi4wNjVhMS4wNTYgMS4wNTYgMCAwMS0uODE1LjU1em0tLjQ5Ni0xLjk0N2MtLjIxNS41ODYtLjA0NSAxLjUwMS4zMyAxLjcxNi4yNy4xNTUuNTctLjExNS43OC0uMzg1YTYuMTI4IDYuMTI4IDAgMDEwLTEuMThjMC0uMTQ2IDAtLjMuMDMxLS40NWwtMS4xNC4zelwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMzggNy41OTVhMS4xNDYgMS4xNDYgMCAwMC0uOTQgMS42MDFjLjUuOSAxLjYxMS0uMDggMi4zMDIgMCAuNzk1IDAgMS40NS44NCAyLjA5LjE1LjcxMS0uNzctLjMwNC0xLjUtMS4xLTEuODU2bC0yLjM1MS4xMDV6XCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy4yNjggOS43MjdhMiAyIDAgMDEtLjczLS4yMDYgMi4yMDcgMi4yMDcgMCAwMC0uNzkxLS4yMmMtLjI4NyAwLS41Ny4wNjItLjgzLjE4LS41NjEuMTk1LTEuMTk2LjQxNi0xLjU1Ny0uMjNhMS4wOCAxLjA4IDAgMDEwLTEuMDUgMS4yODEgMS4yODEgMCAwMTEuMDAxLS42ODZsMi40MDYtLjEwNWMuNTkuMjUgMS4yNjYuNzA2IDEuMzgxIDEuMjM2YS45NTUuOTU1IDAgMDEtLjg4IDEuMDh6bS0xLjUwMS0uNjA2Yy4yOTYuMDI0LjU4NC4xMDQuODUuMjM1LjQ1LjE5LjgwNi4zMzUgMS4xNjYtLjA1NWEuNjY0LjY2NCAwIDAwLjIwNS0uNjA1Yy0uMS0uNDYtLjczNS0uODgtMS4yNTYtMS4xbC0yLjMyNi4wOTRhMS4xMSAxLjExIDAgMDAtLjg1LjU5LjkwNi45MDYgMCAwMDAgLjg3NmMuMjg1LjUuNzk1LjMzNSAxLjM0LjE1LjI3NC0uMTIyLjU3LS4xODUuODctLjE4NXpcIixcbiAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjI2NiA3LjU2Yy0uMDU1LTEuMjUgMi4zMzYtMS40MSAyLjYxNy0uMzYuMjggMS4wNS0yLjUwMiAxLjI5LTIuNjE3LjM2elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29sYW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR29vZ2xlRyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29vZ2xlRyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nb29nbGVfZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNMTUuMzE5IDMuMjc4YzAtMS4xMzEtLjEwMi0yLjIyLS4yOS0zLjI2NEgwdjYuMTcyaDguNTg3Yy0uMzcgMS45OTUtMS40OTQgMy42ODUtMy4xODQgNC44MTZ2NC4wMDRoNS4xNTdjMy4wMTctMi43NzggNC43NTgtNi44NjkgNC43NTgtMTEuNzI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBkOiBcIk0xNC4zNDMgMTIuOTU2YzQuMzA4IDAgNy45Mi0xLjQzIDEwLjU2LTMuODY2bC01LjE1Ny00LjAwNGMtMS40MjkuOTU4LTMuMjU2IDEuNTIzLTUuNDAzIDEuNTIzLTQuMTU2IDAtNy42NzQtMi44MDYtOC45MjgtNi41NzhILjA4NHY0LjEzNGMyLjYyNSA1LjIxNSA4LjAyMSA4Ljc5IDE0LjI1OSA4Ljc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBkOiBcIk03LjAyOCAxMC4yNWE5LjU5IDkuNTkgMCAwMS0uNS0zLjAzMiA5LjU5IDkuNTkgMCAwMS41LTMuMDMyVi4wNTJoLTUuMzNBMTUuOTUgMTUuOTUgMCAwMDAgNy4yMThjMCAyLjU3NS42MTcgNS4wMTIgMS42OTcgNy4xNjZsNS4zMzEtNC4xMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGQ6IFwiTTE0LjM0MyA2LjM5MmMyLjM0MiAwIDQuNDQ2LjgwNSA2LjEgMi4zODZsNC41NzYtNC41NzZDMjIuMjU2IDEuNjI3IDE4LjY0NC4wNDYgMTQuMzQzLjA0NiA4LjEwNS4wNDYgMi43MDkgMy42MjIuMDgzIDguODM2bDUuMzMyIDQuMTM0YzEuMjU0LTMuNzcgNC43NzItNi41NzggOC45MjgtNi41Nzh6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE1Ljk1NSAxMy4wODcpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0Mjg1RjRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDAxIDE1LjAwNmgxNS4zMThWLjAxNEguMDAxelwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS42MTMgMTkuMDAzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzRBODUzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNLjA4NCAxMi45NTZoMjQuODE5Vi4wMzFILjA4NHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgOC43ODQpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQkJDMDRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDE0LjM4NGg3LjAyOFYuMDUySDB6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2gnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VBNDMzNVwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2gnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wODQgMTIuOTdoMjQuOTM1Vi4wNDZILjA4NHpcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29vZ2xlRzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0hhcHJveHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0hhcHJveHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faGFwcm94eScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2NsaXAwJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMDUgMTMuMjM3bC0zLjExLTMuNjEyXCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTE3IDEwLjUyOGwyLjUwOSAzLjUxMlwiLFxuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNSAxMy4yMzdsMy4xMS0zLjYxMk0xOS44NjMgMTcuMTVsMy43MTItMy4xMU0xOS44NjMgMTcuMTVsMy43MTIgMy4zMTFNMTkuMTYgMjQuNTc1bC0zLjExLTMuNTExTTEyLjk0IDI0LjU3NWwzLjExLTMuNTExTTguNjI1IDIwLjI2bDMuNTEyLTMuMTFNOC42MjUgMTQuMDRsMy41MTIgMy4xMU0xNi4wNSAxMy4yMzhsLTcuNDI1LjgwMk0xNi4wNSAxMy4yMzhsNy41MjUuODAyTTE5Ljg2MyAxNy4xNWwtLjcwMi03LjUyNU0xOS44NjMgMTcuMTVsLS43MDIgNy40MjVNMjMuNTc1IDIwLjQ2MWwtNy41MjUuNjAyTTguNjI1IDIwLjI2MWw3LjQyNS44MDNNMTIuOTQgMjQuNTc1bC0uODAzLTcuNDI1TTEyLjk0IDkuNjI1bC0uODAzIDcuNTI1XCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTE0IDE1LjA0M2wzLjUxMS0xLjAwM005LjMyOCA3LjExN2wzLjYxMiAyLjUwOU0xMy43NDMgNS41MTJsLS44MDMgNC4xMTNNMTMuNzQzIDUuNTEybDUuNDE4IDQuMTEzTTE4LjM1OCA1LjUxMmwuODAzIDQuMTEzTTIyLjc3MyA3LjExN0wxOS4xNiA5LjYyNk0yNS45ODMgMTAuNTI4bC02LjgyMi0uOTAzTTIzLjU3NSAxNC4wNGwyLjQwOC0zLjUxMk0yMy41NzUgMTQuMDRsMy40MTIgMS4wMDNNMjMuNTc1IDE0LjA0bDMuNDEyIDUuMjE3TTE4LjM1OCA1LjUxMkwxMi45NCA5LjYyNU0yMy41NzYgMTQuMDRsLS44MDMtNi45MjNNMjMuNTc1IDIwLjQ2MmwzLjQxMi0xLjIwNE0yMy41NzUgMjAuNDYybDMuNDEyLTUuNDE4TTIzLjU3NSAyMC40NjFsMi40MDggMy4zMTJNMjMuNTc2IDIwLjQ2MWwtLjgwMyA2LjcyM00xOS4xNiAyNC41NzVsMy42MTMgMi42MDlNMTkuMTYgMjQuNTc1bDYuODIzLS44MDJNMTkuMTYgMjQuNTc1bC0uODAyIDQuMjE0TTE5LjE2IDI0LjU3NWwtNS40MTcgNC4yMTRNMTIuOTQgMjQuNTc1bC44MDMgNC4yMTRNMTIuOTQgMjQuNTc1bDUuNDE4IDQuMjE0TTEyLjk0IDI0LjU3NWwtMy42MTIgMi42MDlNMTIuOTQgMjQuNTc1bC02LjgyMy0uODAyTTguNjI2IDIwLjI2MWwtMi41MDkgMy41MTJNOC42MjUgMjAuMjYxbC43MDMgNi45MjNNOC42MjUgMjAuMjZsLTMuNTExLTEuMDAyTTguNjI1IDE0LjA0bC0zLjUxMSA1LjIxN004LjYyNSAyMC4yNmwtMy41MTEtNS4yMTdNOS4zMjggNy4xMTdsLS43MDMgNi45MjNNNi4xMTcgMTAuNTI4bDYuODIzLS45MDNcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA2LFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4zMjcgNy4xMTdMNi43MiA1LjgxM005LjMyOCA3LjExN2wtLjIwMS0yLjkxTTEzLjc0MiA1LjUxMkw5LjEyNyA0LjIwN00xMy43NDIgNS41MTJsLTIuMDA2LTIuNTA5TTEzLjc0MyA1LjUxMmwuODAyLTIuOTFNOS4zMjggNy4xMTdsMi40MDgtNC4xMTRNMTguMzU4IDUuNTEybC0zLjgxMy0yLjkxTTE4LjM1OCA1LjUxMmwtLjgwMy0zLjAxTTEzLjc0MyA1LjUxMmwzLjgxMi0zLjAxTTE4LjM1OCA1LjUxMmwyLjAwNy0yLjUwOU0yMi43NzMgNy4xMTdsLTIuNDA4LTQuMTE0TTIyLjc3MyA3LjExN2wuMzAxLTIuOTFNMTguMzU4IDUuNTEybDQuNzE2LTEuMzA1TTIyLjc3MyA3LjExN2wyLjcwOS0xLjQwNU0yMi43NzMgNy4xMTdsNC43MTYuNzAzTTI1Ljk4MyAxMC41MjhsMS41MDUtMi43MDlNMjUuOTg0IDEwLjUyOGwtLjUwMi00LjgxNk0yNS45ODMgMTAuNTI4bDMuMTEtLjNNMjUuOTgzIDEwLjUyOGw0LjIxNCAyLjMwOE0yNi45ODcgMTUuMDQ0bDIuMTA3LTQuODE3TTI2Ljk4NyAxNS4wNDNsMy4yMS0yLjIwN00yNi45ODcgMTUuMDQzbDMuNjEyLjcwM00yNi45ODcgMTkuMjU4bDMuNjEyLTMuNTEyTTI2Ljk4NyAxOS4yNThsMy43MTItLjcwM00yNi45ODcgMTUuMDQzbDMuNzEyIDMuNTEyTTI2Ljk4NyAxOS4yNThsMy4xMSAyLjEwN00yNS45ODMgMjMuNzczbDQuMTE0LTIuNDA5TTI1Ljk4MyAyMy43NzNsMy4xMS4zTTI2Ljk4NyAxOS4yNThsMi4xMDcgNC44MTZNMjUuOTgzIDIzLjc3M2wxLjUwNSAyLjcwOU0yNS45ODQgMjMuNzczbC0uNTAyIDQuNzE1TTI1LjQ4MiAyOC40ODhsLTIuNzEtMS4zMDRNMjIuNzczIDI3LjE4NGwuMiAyLjkxTTIyLjc3MyAyNy4xODRsNC43MTYtLjcwM00yMi43NzMgMjcuMTg0bC0yLjQwOCA0LjExNE0xOC4zNTggMjguNzlsMi4wMDcgMi41MDhNMTguMzU4IDI4Ljc5bDQuNjE1IDEuMzA0TTE4LjM1OCAyOC43OWwtLjgwMyAzLjAxTTE4LjM1OCAyOC43OWwtMy44MTMgMy4wMU0xMy43NDMgMjguNzlsLjgwMiAzLjAxTTEzLjc0MyAyOC43OWwzLjgxMiAzLjAxTTEzLjc0MiAyOC43OWwtMi4wMDYgMi41MDhNOS4zMjggMjcuMTg0bDIuNDA4IDQuMTE0TTEzLjc0MiAyOC43OWwtNC42MTUgMS40MDRNOS4zMjggMjcuMTg0bC0uMjAxIDMuMDFNOS4zMjggMjcuMTg0bC0yLjcxIDEuNDA0TTYuMTE3IDIzLjc3M2wuNTAyIDQuODE2TTkuMzI4IDI3LjE4NGwtNC43MTYtLjcwM002LjExNyAyMy43NzNsLTEuNTA1IDIuNzA5TTYuMTE3IDIzLjc3M2wtMy4xMS4zTTYuMTE3IDIzLjc3M2wtNC4yMTQtMi40MDlNNS4xMTQgMTkuMjU4bC0zLjIxIDIuMTA3TTUuMTE0IDE5LjI1OEwxLjQgMTguNTU1TTUuMTE0IDE5LjI1OGwtMi4xMDcgNC44MTZNNS4xMTQgMTUuMDQzTDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4TDEuNCAxNS43NDZNNS4xMTQgMTUuMDQzbC0zLjExLTIuMTA2TTUuMTE0IDE1LjA0M2wtMy43MTMuNzAzTTUuMTE0IDE1LjA0NGwtMi4wMDctNC44MTdNNi4xMTcgMTAuNTI4bC0zLjAxLS4zTTYuMTE3IDEwLjUyOGwtNC4xMTQgMi40MDhNNi4xMTcgMTAuNTI4TDQuNzEyIDcuOTJNNi4xMTcgMTAuNTI4bC42MDItNC43MTVNOS4zMjggNy4xMTdsLTQuNjE2LjgwM1wiLFxuICAgIHN0cm9rZTogXCIjMDgzRDVGXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDUsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45NDMgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6TTE3Ljc1NiAxMS4zMzFoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpNMTcuNzU2IDE5LjE1N2gtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyek0yMS42NjkgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6XCIsXG4gICAgZmlsbDogXCIjMDA2REE4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4zNjUgOC40MjFoLTIuNTA5VjEwLjloMi41MDlWOC40MnpNMTQuMTQ0IDguMzIxaC0yLjUwOXYyLjQ3OGgyLjUwOVY4LjMyMXpNOS44MyAxMi44MzZINy4zMnYyLjQ3OEg5Ljgzdi0yLjQ3OHpNOS44MyAxOC45NTZINy4zMnYyLjQ3OUg5Ljgzdi0yLjQ3OXpNMjQuNjc5IDE4Ljk1NkgyMi4xN3YyLjQ3OWgyLjUwOXYtMi40Nzl6TTI0LjY3OSAxMi43MzZIMjIuMTd2Mi40NzhoMi41MDl2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MiA5LjYyNUg1LjMxNHYxLjY3Nkg2LjkyVjkuNjI1ek0xMC4xMyA2LjIxNEg4LjUyNnYxLjY3NWgxLjYwNlY2LjIxNHpNMTQuNDQ1IDQuNjA5aC0xLjYwNnYxLjY3NWgxLjYwNlY0LjYxek01LjkxNiAxNC4xNEg0LjMxMXYxLjY3NmgxLjYwNVYxNC4xNHpNMjYuNzg2IDkuODI2SDI1LjA4djEuNjQ2aDEuNzA2VjkuODI2ek0yMy41NzUgNi40MTVIMjEuODdWOC4wNmgxLjcwNVY2LjQxNXpNMTkuMjYgNC44MWgtMS43MDV2MS42NDVoMS43MDZWNC44MDl6TTI3LjY4OSAxNC40NDFoLTEuNjA1djEuNjQ2aDEuNjA1VjE0LjQ0elwiLFxuICAgIGZpbGw6IFwiIzEzOUJEN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMTQ0IDIzLjI3aC0yLjUwOXYyLjQ3OWgyLjUwOXYtMi40Nzh6TTIwLjI2NCAyMy4yN2gtMi41MDh2Mi40NzloMi41MDh2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNjg1IDIyLjc3SDI1LjA4djEuNjc1aDEuNjA1di0xLjY3NnpNMjMuMzc1IDI2LjA4SDIxLjc3djEuNjc2aDEuNjA1VjI2LjA4ek0xOS4wNiAyNy42ODZoLTEuNjA1djEuNjc1aDEuNjA1di0xLjY3NXpNMjcuNTg5IDE4LjI1NGgtMS42MDZ2MS42NzZoMS42MDZ2LTEuNjc2ek02LjkyIDIyLjk3SDUuMjE0djEuNjQ2SDYuOTJWMjIuOTd6TTEwLjAzIDI2LjM4MUg4LjMyNXYxLjY0NmgxLjcwNVYyNi4zOHpNMTQuNDQ1IDI3Ljk4N2gtMS43MDZ2MS42NDVoMS43MDZ2LTEuNjQ1ek01LjgxNiAxOC4zNTVINC4yMVYyMGgxLjYwNnYtMS42NDV6XCIsXG4gICAgZmlsbDogXCIjMTM5QkQ3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6XCIsXG4gICAgZmlsbDogXCIjMDNBOURBXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI1LjY4MiAyNy44ODZoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMSAxNy45NTNoLS45MDN2LjkzM0gzMXYtLjkzM3pNNy4xMiAyNy45ODdoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMC4zOTggMjAuNzYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjAuNjY1IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSAyMy4zNzFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yNy42OSAyNS43OGgtLjkwNHYuOTMyaC45MDN2LS45MzN6TTIzLjI3NCAyOS43OTNoLS45MDN2LjkwMmguOTAzdi0uOTAyek0xNy43NTYgMzEuNDk4aC0uOTAzdi45MDNoLjkwM3YtLjkwM3pNOS40MjggMjkuNDkyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggMjMuNDcyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMi4zMDQgMjAuODYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNNS4wMTMgMjUuODhINC4xMXYuOTMzaC45MDN2LS45MzN6TTEuOTAzIDE3Ljk1M0gxdi45MzNoLjkwM3YtLjkzM3pNMTQuOTQ3IDMxLjQ5OGgtLjkwM3YuOTMzaC45MDJ2LS45MzN6TTEyLjEzNyAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzelwiLFxuICAgIGZpbGw6IFwiIzAzQTlEQVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnY2xpcDAnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwaDMydjMySDBWMHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSGFwcm94eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2libScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjguMDA1JVwiLFxuICAgIHgyOiBcIjUzLjMzJVwiLFxuICAgIHkxOiBcIjc5LjMyMyVcIixcbiAgICB5MjogXCI3OS4zMjQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjM0JEQURFXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAuNDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMzZDRUUxXCIsXG4gICAgc3RvcE9wYWNpdHk6IDAuMzgzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTJFRlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjE5LjQ5NiVcIixcbiAgICB4MjogXCI3MS4zMDklXCIsXG4gICAgeTE6IFwiODMuMzQ0JVwiLFxuICAgIHkyOiBcIjE3LjYzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMDdGRkFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RUFGRjFcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCIyMS45MDklXCIsXG4gICAgeDI6IFwiMjEuOTA5JVwiLFxuICAgIHkxOiBcIjk2LjMxNCVcIixcbiAgICB5MjogXCIyOS40NTQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDJDMUU2XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNTcuMDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkZCOUVGXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODYuNzE2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjBDQkU3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNUNDRkU1XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiOTYuMjA1JVwiLFxuICAgIHgyOiBcIi0xLjE3MiVcIixcbiAgICB5MTogXCIxMi42NjclXCIsXG4gICAgeTI6IFwiLTIyLjI1MiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIyMi40MjclXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzOEQyRTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5MS4yMDMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2QUJGRUNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICB4MTogXCI5LjQwOCVcIixcbiAgICB4MjogXCI4MC41ODklXCIsXG4gICAgeTE6IFwiODcuNzY0JVwiLFxuICAgIHkyOiBcIjgzLjEzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMxMjZDRkRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMUExRUZcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzOEQyRTBcIixcbiAgICBkOiBcIk00LjI2MiAxMy4xMjJhLjYwNC42MDQgMCAwMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMDEtLjI5NS0uNzM0LjYwOC42MDggMCAwMS44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMDEtLjUzMy4zMnptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwMS0uNTIyLS4yOThMNy4wMTIgNS4xNDRhLjYxNS42MTUgMCAwMS4xMTUtLjc4Mi42MDYuNjA2IDAgMDEuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN3ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwMS41NzUtLjYzNC42MDUuNjA1IDAgMDEuNDQzLjE2NC41OTMuNTkzIDAgMDEuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAxLS4xODYuNDMuNjA1LjYwNSAwIDAxLS40NDMuMTY1LjYyNC42MjQgMCAwMS0uNTc1LS42MzR6bTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMDEtLjM0My0uMTA3LjYxNy42MTcgMCAwMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMDEuOTExLS4xNTdjLjIyMy4yLjI3MS41MjguMTE1Ljc4MkwyMy4xMTcgNy45NmEuNjAzLjYwMyAwIDAxLS41MjIuMjk4em00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAxLS41MzQtLjMxOS42MTYuNjE2IDAgMDEuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAxLjc4My4xMTIuNTkyLjU5MiAwIDAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAxLS4zLjA4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNi41MzYgMTkuNjQ1bC0xLjIwNC0uMDA5Yy4wMjYtMy4zNzcgMi4xNDYtNi4zOTEgNS4zMzctNy41ODVhOC4zMDggOC4zMDggMCAwMTkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAwLTcuNzQ1LTEuODc2Yy0yLjcyNiAxLjAxOS00LjUzNyAzLjU5My00LjU1OSA2LjQ3OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNLjAyOSAyMC45MDljLjAyMi0zLjM1NCAyLjQ3NS02LjIwOCA1LjgxNS02Ljc2NGwuMjAxIDEuMTc2Yy0yLjc2NC40Ni00Ljc5NCAyLjgyLTQuODEyIDUuNTk2TC4wMjkgMjAuOTF6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguMjQ2IDI0LjczN2ExMC42MjUgMTAuNjI1IDAgMDEwLTE1LjEzMWM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAxMS4zODQgMS42NzhsLTEuMDA0LjY1N2E5LjUxNyA5LjUxNyAwIDAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDQyIDkuNDQyIDAgMDAwIDEzLjQ0NWwtLjg1MS44NDN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTUuODM2IDEzLjIzNGMuNDA0LTEuMzMyIDEuMzMtMi41NiAyLjQxLTMuNjI4IDQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMDExLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NzQgOS40NzQgMCAwMC0yLjA3NCAzLjA2Yy0xLjQ1MiAzLjQ1LTIuMzU4IDMuNTkzLTEuMTg3LS4yNzV6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIzLjUyNCAyNy44N0g2Ljk2YTcuMDEyIDcuMDEyIDAgMDEtNC45MjItMi4wNTlBNi44NzYgNi44NzYgMCAwMS4wMjkgMjAuOTFsMS4yMDQuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4aC0uMDYzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNLjA0NyAyMi45MDlsMS4xODYuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4SDYuOTZhNy4wMTIgNy4wMTIgMCAwMS00LjkyMi0yLjA2QTYuODc2IDYuODc2IDAgMDEuMDI5IDIyLjkxaC4wMTgtLjAxOGMuMDE3LTIuNzEgMS42Mi01LjA5MSAzLjk5Ny02LjIuMTE0LS4wNTQuMzIuMjkuNjE5IDEuMDNhNS43MSA1LjcxIDAgMDAtMy40MTIgNS4xOGwtMS4xODYtLjAxem00LjIxNS05Ljc4N2EuNjA0LjYwNCAwIDAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAxLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwMS0uNTMzLjMyem00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAxLjExNS0uNzgyLjYwNi42MDYgMCAwMS45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3em02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAxLjU3NS0uNjM0LjYwNS42MDUgMCAwMS40NDMuMTY0LjU5My41OTMgMCAwMS4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMDEtLjE4Ni40My42MDUuNjA1IDAgMDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAxLS41NzUtLjYzNHptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwMS45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMDEtLjUyMi4yOTh6bTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwMS4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMDEuNzgzLjExMi41OTIuNTkyIDAgMDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMDEtLjMuMDh6TTE2LjM2NiAxOS43OEgxNmEyLjMyMiAyLjMyMiAwIDAxLS4zMDIgMGMtLjA5LS4wMTEtLjE1Mi4wNS0uMDg2LS4xOTZhOC4yMDQgOC4yMDQgMCAwMTUuMDU3LTUuNTMzIDguMzA4IDguMzA4IDAgMDE5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwMC03Ljc0NS0xLjg3NiA3LjAwOSA3LjAwOSAwIDAwLTQuMjg4IDQuNjEzYy0uMTE1LjM5OS0uMTE1LjM5OSAwIDBoLS40NHpNNi4xNTQgMjMuODI2YTEwLjYyNiAxMC42MjYgMCAwMTIuMDkyLTEyLjIyYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwbC0uODUxLjg0M2MtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMEE5LjQ0MiA5LjQ0MiAwIDAwNy4yNjQgMjMuMzZhNi45OSA2Ljk5IDAgMDAtLjQxOC4xNzJsLS4yMTIuMDk0LS4xNjIuMDc3LS4wOTQuMDMtLjA5LjAzOWMuNjQ4LS4yODIuOTY1LS40Mi45NS0uNDEyLS4wMjYuMDE1LTEuMDczLjQ4OS0xLjA4NC40NjZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm1Nb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2Fma2EgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0thZmthKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNTY1IDE3LjYyM2MtMS4xNzMgMC0yLjIyNS41Mi0yLjk0NSAxLjMzN2wtMS44NDUtMS4zMDZjLjE5Ni0uNTQuMzA5LTEuMTE4LjMwOS0xLjcyNCAwLS41OTYtLjEwOS0xLjE2NS0uMjk4LTEuNjk2bDEuODQtMS4yOTNhMy45MTQgMy45MTQgMCAwMDIuOTM5IDEuMzMxIDMuOTMgMy45MyAwIDAwMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYgMy45MjZjMCAuMzg3LjA1OC43NjEuMTYzIDEuMTE1bC0xLjg0MiAxLjI5M2E1LjA2OCA1LjA2OCAwIDAwLTMuMTQtMS44MjVWOC43MWEzLjkzMiAzLjkzMiAwIDAwMy4xMTktMy44NDJBMy45MyAzLjkzIDAgMDAxMi4wMTIuOTQxYTMuOTMgMy45MyAwIDAwLTMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAwMy4wNDggMy44MjR2Mi4yNDlhNS4wNzUgNS4wNzUgMCAwMC00LjE5MyA0Ljk5IDUuMDc1IDUuMDc1IDAgMDA0LjIyOSA0Ljk5NVYyMy4zYTMuOTMxIDMuOTMxIDAgMDAtMy4wODQgMy44MzMgMy45MyAzLjkzIDAgMDAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwMDMuOTI3LTMuOTI2IDMuOTMxIDMuOTMxIDAgMDAtMy4wODQtMy44MzN2LTIuMzc1YTUuMDcgNS4wNyAwIDAwMy4wODctMS43OTVsMS44NTcgMS4zMTRjLS4xMDMuMzUxLS4xNi43MjEtLjE2IDEuMTA1YTMuOTMgMy45MyAwIDAwMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMDAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNi0zLjkyNnptMC05LjE4YzEuMDUgMCAxLjkwMy44NTMgMS45MDMgMS45MDNzLS44NTQgMS45MDMtMS45MDMgMS45MDNhMS45MDYgMS45MDYgMCAwMS0xLjkwNC0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTA0LTEuOTA0ek0xMC4xMDkgNC44NjZjMC0xLjA1Ljg1NC0xLjkwMyAxLjkwMy0xLjkwMyAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTAzIDAgMS4wNS0uODU0IDEuOTA0LTEuOTA0IDEuOTA0YTEuOTA2IDEuOTA2IDAgMDEtMS45MDMtMS45MDR6bTMuODA3IDIyLjI2NmMwIDEuMDUtLjg1NCAxLjkwMy0xLjkwNCAxLjkwM2ExLjkwNiAxLjkwNiAwIDAxLTEuOTAzLTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDMtMS45MDQgMS4wNSAwIDEuOTA0Ljg1NCAxLjkwNCAxLjkwNHptLTEuOTA0LTguNTQ4YTIuNjU4IDIuNjU4IDAgMDEtMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwMTIuNjU1LTIuNjU1IDIuNjU4IDIuNjU4IDAgMDEyLjY1NSAyLjY1NSAyLjY1OCAyLjY1OCAwIDAxLTIuNjU1IDIuNjU1em05LjU1MyA0Ljg2N2ExLjkwNiAxLjkwNiAwIDAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDQgMS4wNSAwIDEuOTAzLjg1NCAxLjkwMyAxLjkwNCAwIDEuMDUtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0thZmthOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2liYW5hID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LaWJhbmEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTQgMHYyOC43ODlMMjguOTM1LjAxN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk00IDEydjE2Ljc4OWwxMS45MDYtMTMuNzM4QTI0LjcyMSAyNC43MjEgMCAwMDQgMTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE4LjQ3OSAxNi42NjRMNi4yNjggMzAuNzU0bC0xLjA3MyAxLjIzN2gyMy4xOTFjLTEuMjUyLTYuMjkyLTQuODgzLTExLjcxOS05LjkwOC0xNS4zMjdcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LaWJhbmE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LdWJlcm5ldGVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LdWJlcm5ldGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODkuMDAzYTIuMTQgMi4xNCAwIDAxMS4wMy4yMDZsMTEuMTI3IDUuMzA0YTIuMTEgMi4xMSAwIDAxMS4xNSAxLjQyOWwyLjc1IDExLjkyMWEyLjA5IDIuMDkgMCAwMS0uNDEyIDEuNzgzbC03LjY5NyA5LjU2Yy0uNDA0LjUtMS4wMTYuNzkyLTEuNjYzLjc5MUw5LjgyNyAzMWMtLjY0OCAwLTEuMjYtLjI5Mi0xLjY2NC0uNzkzbC03LjctOS41NThhMi4xMDcgMi4xMDcgMCAwMS0uNDEtMS43ODNMMi43OTggNi45NDVhMi4xMSAyLjExIDAgMDExLjE1MS0xLjQzTDE1LjA3NC4yMWMuMjU1LS4xMjIuNTMyLS4xOTIuODE1LS4yMDZ6TTE2IDQuMDZjLS4zNjggMC0uNjY3LjMzLS42NjcuNzM4bC4wMDIuMDE5YzAgLjA1NS0uMDAzLjEyMi0uMDAyLjE3LjAxLjIzNi4wNi40MTYuMDkxLjYzMi4wNTcuNDY0LjEwMy44NDkuMDc0IDEuMjA2LS4wMjguMTM1LS4xMjcuMjU4LS4yMTYuMzQ0bC0uMDE1LjI4MWE4LjU2OSA4LjU2OSAwIDAwLTUuNTU1IDIuNjY2IDkuOTggOS45OCAwIDAxLS4yNC0uMTdjLS4xMi4wMTYtLjI0LjA1My0uMzk2LS4wMzgtLjI5OC0uMi0uNTctLjQ3Ny0uODk4LS44MS0uMTUtLjE2LS4yNi0uMzEtLjQzOC0uNDY0LS4wNC0uMDM1LS4xMDMtLjA4Mi0uMTQ4LS4xMThhLjc5My43OTMgMCAwMC0uNDY0LS4xNzUuNjQyLjY0MiAwIDAwLS41My4yMzRjLS4yMy4yODgtLjE1Ni43MjYuMTYzLjk4bC4wMS4wMDhjLjA0NC4wMzUuMDk4LjA4LjEzOC4xMS4xOS4xNC4zNjMuMjEyLjU1Mi4zMjMuMzk4LjI0Ni43MjkuNDUuOTkuNjk1LjEwMy4xMDguMTIuMy4xMzQuMzgzbC4yMTQuMTlhOC41OTIgOC41OTIgMCAwMC0xLjM2IDUuOTk4bC0uMjc4LjA4Yy0uMDc0LjA5Ni0uMTc3LjI0NS0uMjg2LjI5LS4zNDMuMTA3LS43MjguMTQ3LTEuMTk0LjE5NS0uMjE4LjAxOC0uNDA3LjAwOC0uNjM5LjA1MS0uMDUuMDEtLjEyMi4wMjktLjE3Ny4wNDJsLS4wMDYuMDAxLS4wMS4wMDNjLS4zOTMuMDk1LS42NDUuNDU1LS41NjQuODEuMDgyLjM1NS40NjUuNTcuODYuNDg1bC4wMS0uMDAxLjAxMy0uMDA0Yy4wNTUtLjAxMi4xMjQtLjAyNi4xNzItLjAzOS4yMjgtLjA2LjM5My0uMTUuNTk3LS4yMjguNDQtLjE1OC44MDYtLjI5IDEuMTYxLS4zNDEuMTQ5LS4wMTIuMzA1LjA5MS4zODMuMTM1bC4yOS0uMDVhOC42NTQgOC42NTQgMCAwMDMuODQgNC43ODdsLS4xMi4yOWMuMDQzLjExMy4wOTEuMjY1LjA1OS4zNzYtLjEzLjMzNC0uMzUuNjg4LS42MDMgMS4wODEtLjEyMi4xODItLjI0Ny4zMjQtLjM1Ny41MzItLjAyNi4wNS0uMDYuMTI2LS4wODYuMTc5LS4xNy4zNjUtLjA0NS43ODYuMjg0Ljk0NC4zMy4xNi43NDEtLjAwOC45MTktLjM3NWwuMDAxLS4wMDF2LS4wMDJjLjAyNS0uMDUxLjA2MS0uMTIuMDgzLS4xNjkuMDk0LS4yMTUuMTI1LS40LjE5Mi0uNjA5LjE3Ni0uNDQyLjI3My0uOTA1LjUxNS0xLjE5NC4wNjctLjA4LjE3NS0uMTEuMjg3LS4xNGwuMTUxLS4yNzNhOC42MTYgOC42MTYgMCAwMDYuMTQ1LjAxNmwuMTQyLjI1NmMuMTE0LjAzNy4yMzkuMDU2LjM0LjIwNi4xODIuMzEuMzA2LjY3NS40NTcgMS4xMTguMDY2LjIwOC4xLjM5My4xOTQuNjEuMDIxLjA0OC4wNTcuMTE3LjA4Mi4xNy4xNzcuMzY3LjU5LjUzNS45Mi4zNzYuMzMtLjE1OC40NTUtLjU4LjI4NC0uOTQ1LS4wMjYtLjA1Mi0uMDYtLjEyOS0uMDg3LS4xNzktLjExLS4yMDgtLjIzNS0uMzQ4LS4zNTctLjUzLS4yNTItLjM5My0uNDYxLS43Mi0uNTktMS4wNTUtLjA1NS0uMTczLjAwOS0uMjguMDUtLjM5Mi0uMDI1LS4wMjktLjA3OS0uMTkyLS4xMS0uMjY4YTguNjU0IDguNjU0IDAgMDAzLjgzOC00LjgyMmMuMDg2LjAxNC4yMzYuMDQuMjg1LjA1LjEtLjA2Ni4xOTItLjE1Mi4zNzMtLjEzOC4zNTUuMDUyLjcyLjE4MyAxLjE2LjM0MS4yMDUuMDc4LjM3LjE3LjU5OC4yMy4wNDguMDEzLjExNy4wMjUuMTcyLjAzN2wuMDEzLjAwNC4wMS4wMDJjLjM5NS4wODUuNzc4LS4xMzEuODYtLjQ4Ni4wOC0uMzU1LS4xNzEtLjcxNS0uNTY0LS44MS0uMDU3LS4wMTMtLjEzOC0uMDM1LS4xOTMtLjA0NS0uMjMyLS4wNDQtLjQyLS4wMzMtLjY0LS4wNTEtLjQ2NS0uMDQ5LS44NS0uMDg5LTEuMTkzLS4xOTYtLjE0LS4wNTQtLjIzOS0uMjItLjI4Ny0uMjg5bC0uMjctLjA3OGE4LjU3MiA4LjU3MiAwIDAwLS4xMzktMy4xMDQgOC41OTkgOC41OTkgMCAwMC0xLjI0Ny0yLjg4Yy4wNjgtLjA2Mi4xOTktLjE3Ny4yMzYtLjIxLjAxLS4xMi4wMDEtLjI0NS4xMjUtLjM3Ny4yNjItLjI0Ni41OTItLjQ1Ljk5LS42OTUuMTktLjExLjM2NC0uMTgyLjU1NC0uMzIyLjA0My0uMDMyLjEwMS0uMDgyLjE0Ni0uMTE4LjMyLS4yNTUuMzkzLS42OTMuMTY0LS45OC0uMjMtLjI4Ny0uNjc0LS4zMTQtLjk5My0uMDYtLjA0Ni4wMzYtLjEwNy4wODMtLjE0OC4xMTgtLjE3OS4xNTMtLjI5LjMwNS0uNDQuNDY0LS4zMjguMzMzLS42LjYxMS0uODk4LjgxMi0uMTI5LjA3NS0uMzE4LjA0OS0uNDA0LjA0NGwtLjI1My4xOGE4LjczMiA4LjczMiAwIDAwLTUuNTI4LTIuNjY2IDE2LjAzNiAxNi4wMzYgMCAwMS0uMDE1LS4yOTdjLS4wODctLjA4My0uMTkyLS4xNTQtLjIxOC0uMzMzLS4wMjktLjM1Ny4wMi0uNzQyLjA3Ni0xLjIwNi4wMy0uMjE2LjA4Mi0uMzk2LjA5LS42MzIuMDAzLS4wNTMgMC0uMTMgMC0uMTg5IDAtLjQwOC0uMjk5LS43MzgtLjY2Ny0uNzM4em0tLjgzNCA1LjE1NmwtLjE5OCAzLjQ4OC0uMDE0LjAwN2EuNTg3LjU4NyAwIDAxLS45MzIuNDQ5bC0uMDA2LjAwMi0yLjg2NC0yLjAyN2E2Ljg2MiA2Ljg2MiAwIDAxNC4wMTQtMS45MTl6bTEuNjY4IDBhNi45MjIgNi45MjIgMCAwMTMuOTkgMS45MmwtMi44NDYgMi4wMTUtLjAxLS4wMDRhLjU4OC41ODggMCAwMS0uOTMzLS40NDhsLS4wMDMtLjAwMS0uMTk4LTMuNDgyem0tNi43MiAzLjIyMmwyLjYxNCAyLjMzNS0uMDAzLjAxNGEuNTg1LjU4NSAwIDAxLS4yMyAxLjAwOGwtLjAwMy4wMS0zLjM1Mi45NjdhNi44MzggNi44MzggMCAwMS45NzMtNC4zMzR6bTExLjc1My4wMDFjLjM4OC42My42ODMgMS4zMzEuODU4IDIuMDkzYTYuOTEgNi45MSAwIDAxLjE0NSAyLjIyOWwtMy4zNy0uOTctLjAwMi0uMDEzYS41ODYuNTg2IDAgMDEtLjIzLTEuMDA4bC0uMDAyLS4wMDcgMi42LTIuMzI0em0tNi40MDQgMi41MTVoMS4wNzFsLjY2Ni44My0uMjM5IDEuMDM4LS45NjIuNDYxLS45NjQtLjQ2My0uMjQtMS4wMzcuNjY4LS44M3ptMy40MzUgMi44NDRhLjU4NS41ODUgMCAwMS4xMzUuMDFsLjAwNS0uMDA4IDMuNDY4LjU4NmE2Ljg1OCA2Ljg1OCAwIDAxLTIuNzc2IDMuNDgxbC0xLjM0Ni0zLjI0Ni4wMDQtLjAwNWEuNTg2LjU4NiAwIDAxLjUxLS44MTh6bS01LjgyNC4wMTRhLjU4Ny41ODcgMCAwMS41My44MTdsLjAxLjAxMi0xLjMzMSAzLjIxNGE2Ljg4NiA2Ljg4NiAwIDAxLTIuNzY3LTMuNDU4bDMuNDM3LS41ODIuMDA2LjAwN2EuNTk1LjU5NSAwIDAxLjExNS0uMDF6bTIuOTA0IDEuNDA3YS41ODIuNTgyIDAgMDEuMjc1LjA1OS41ODMuNTgzIDAgMDEuMjYzLjI1aC4wMTNsMS42OTQgMy4wNTdjLS4yMi4wNzMtLjQ0Ni4xMzYtLjY3Ny4xODlhNi44OTYgNi44OTYgMCAwMS0zLjc1OC0uMTk0bDEuNjktMy4wNWguMDAzYS41ODguNTg4IDAgMDEuNDk3LS4zMXpcIixcbiAgICBmaWxsOiBcIiMzMjZDRTVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0t1YmVybmV0ZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Mb2dnaW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dnaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMiAxMHYxM2E5IDkgMCAwMTkgOWgxM2MwLTEyLjE1LTkuODUtMjItMjItMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNCAxMy41NjVWMzJoMTBjMC03LjcyMi0zLjk4MS0xNC41MS0xMC0xOC40MzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE0IDB2MTAuMjI2QzIxLjY2NiAxNC40NjggMjYuODY5IDIyLjYzNiAyNi44NjkgMzJIMzBWMTZjMC04LjgzNy03LjE2My0xNi0xNi0xNlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nZ2luZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0xvZ3N0YXNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dzdGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDMyaDExVjIwSDE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNNCAwSDN2MjBoMTN2LThDMTYgNS4zNzMgMTAuNjI3IDAgNCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMyAyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDFWMjBIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ3N0YXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWFwcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWFwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjUgOS41YzAgNi42NS05LjUgMTEuNDI1LTkuNSAxMS40MjVTNi41IDE2LjE1IDYuNSA5LjVBOS41IDkuNSAwIDAxMTYgMGE5LjUgOS41IDAgMDE5LjUgOS41XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYgMjAuOTI1czQuMzI2LTIuMTgzIDcuMTQxLTUuNjQ1bC0yLjUwNS0xLjg3OGE3LjcyNSA3LjcyNSAwIDAwLTkuMjcyIDBMOC44NTkgMTUuMjhDMTEuNjc0IDE4Ljc0MiAxNiAyMC45MjUgMTYgMjAuOTI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yNS41MyAxNy4wNzNhMjEuMTI0IDIxLjEyNCAwIDAxLTIuODM0IDIuOTE2Yy0yLjYyIDIuMjM1LTUuMjM5IDMuNTYxLTUuMzQ5IDMuNjE2TDE2IDI0LjI4MmwtMS4zNDgtLjY3N2MtLjEwOS0uMDU1LTIuNzI4LTEuMzgxLTUuMzQ5LTMuNjE2YTIxLjE4MiAyMS4xODIgMCAwMS0yLjgzNC0yLjkxNkwwIDIxLjkyNWwxMS4zNjQgOC41MjNhNy43MjQgNy43MjQgMCAwMDkuMjcxIDBMMzIgMjEuOTI1bC02LjQ3LTQuODUyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWFwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01lbWNhY2hlZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWVtY2FjaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX21lbWNhY2hlZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGN4OiBcIjQxLjQwNiVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQxLjQwNiVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgY3g6IFwiNDQuMjcxJVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDQuMjcxJVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI1MCVcIixcbiAgICB4MjogXCI1MCVcIixcbiAgICB5MTogXCIxMDAlXCIsXG4gICAgeTI6IFwiMCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1NzRDNEFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM4MDcxNkRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCI4OC43NzglXCIsXG4gICAgeDI6IFwiMzAuMTQ5JVwiLFxuICAgIHkxOiBcIjk4LjM0MiVcIixcbiAgICB5MjogXCItOC42OCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyNjhEODNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyRUExOUVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMCAyMS41NjdWMTAuMzUyQzAgMS4yOTQgMS4yOTMgMCAxMC4zNDIgMGgxMS4yMzZjOS4wNDkgMCAxMC4zNDEgMS4yOTQgMTAuMzQxIDEwLjM1MnYxMS4yMTVjMCA5LjA1OS0xLjI5MiAxMC4zNTItMTAuMzQxIDEwLjM1MkgxMC4zNDJDMS4yOTIgMzEuOTIgMCAzMC42MjYgMCAyMS41Njd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3aDQuOTA0Yy0uNDY2LTIuNDgzLTIuMTQtMTMuODI0LS43NDgtMTMuODYxLjc0Ni4xMTggNC4xNTYgOS42MjEgNC4xNTYgOS42MjFzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy40MS05LjUwMyA0LjE1Ny05LjYyMWMxLjM5Mi4wMzctLjI4MiAxMS4zNzgtLjc0OCAxMy44Nmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1M2gtNC41NGMtLjg2NS4wMS00LjE1MyA1Ljc3Ny00LjUzMSA1Ljc3Ny0uMzc4IDAtMy42NjYtNS43NjctNC41My01Ljc3N0g2Ljg4OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNMTQuOTkzIDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMTkuMjQ5IDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTI0LjggNi4zNDVjLjcwNyA0Ljc5Ljg3MyA5LjM4OC44NiAxMi44MTMtLjAxMyAzLjUwMy0uMjE0IDUuNzgtLjIxNCA1Ljc4aC00LjEyOGwtLjQ0My4zMzJoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTRsLS4yMzIuMzI5em0tMTIuOTk2LS4xMjFjMS4yODggMS40MzMgMy41MTYgNS4yMzcgMy44MjMgNS4yMzctLjgxNy0xLjA0NS0yLjgyMy00LjM3OC0zLjgyMy01LjIzN3ptLTEuODQgNC44NTJjLTEuMzkyLjAzOC4yODIgMTEuMzc5Ljc0OSAxMy44NjFINi40M2wtLjI5LjMzM2g0LjkwNGMtLjQ2NC0yLjQ3LTIuMTIzLTEzLjcxLS43NjktMTMuODYxLS4xMjYtLjE5LS4yMzUtLjMyLS4zMTEtLjMzM3ptMTEuMzI2IDBjLS43NDYuMTE5LTQuMTU2IDkuNjIyLTQuMTU2IDkuNjIycy0uNzUxLS4wOTQtMS41MDctLjA5NGMtLjQ0NyAwLS44MzIuMDI4LTEuMDkyLjA1MmwtLjA4Mi4zNzRzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy4zODUtOS40NCA0LjE0Ni05LjYyMWMtLjA4Mi0uMjA4LS4xODMtLjMzLS4zMjItLjMzM3pcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2wuMjg5LS4zMjVjLS4xNDgtMi4xOTctLjU0My0xMC4xNC43OTEtMTguNTk3aDQuNTQxYy4wOTYuMDAyLjIyNS4wOC4zNzQuMjA4LS4yOTctLjMzLS41NDQtLjUzOC0uNzA2LS41NEg2Ljg4OXptMTMuNjAxIDBjLS44NjQuMDEtNC4xNTIgNS43NzctNC41MyA1Ljc3Ny4xNTQuMTk3LjI3OS4zMzMuMzMyLjMzMy4zNzggMCAzLjY2Ni01Ljc2NyA0LjUzLTUuNzc3aDQuMDA4bC4yLS4zMzNoLTQuNTR6bS05Ljg4MSA1LjcyNWMxLjEwMyAxLjY1NyAzLjg0NCA5LjI5IDMuODQ0IDkuMjlsLjA4LS4zNzNjLS42NzYtMS44NTYtMy4yNTYtOC44MTQtMy45MDMtOC45MTdoLS4wMjF6bTExLjM0NiAwYy43NCAxLjg4Ny0uNjYgMTEuMjk1LTEuMDggMTMuNTI5bC40NDQtLjM0OGMuNTY4LTMuMzMxIDEuOTM2LTEzLjE0Ni42MzYtMTMuMTh6XCIsXG4gICAgb3BhY2l0eTogMC4zXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01lbWNhY2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzJoMjhWMjBsLTYuNDY1LTYuNDY1YTUgNSAwIDAwLTcuMDcgMEwyIDI4djR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYuNDY1IDEzLjUzNWwtMy41MzYgMy41MzZhOS45NjUgOS45NjUgMCAwMDcuMDcgMi45MyA5Ljk2NSA5Ljk2NSAwIDAwNy4wNzItMi45M2wtMy41MzYtMy41MzZhNSA1IDAgMDAtNy4wNyAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0xNC4zNDMgMTEuNDE0QTcuOTUxIDcuOTUxIDAgMDEyMCA5LjA3MWMyLjEzNyAwIDQuMTQ2LjgzMiA1LjY1NyAyLjM0M2wzLjIwNyAzLjIwN0E5Ljk1NSA5Ljk1NSAwIDAwMzAgMTAuMDAxYzAtNS41MjQtNC40NzctMTAtMTAtMTAtNS41MjIgMC0xMCA0LjQ3Ni0xMCAxMCAwIDEuNjY3LjQxNCAzLjIzNyAxLjEzNyA0LjYybDMuMjA2LTMuMjA3elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Nb25nb2RiID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Nb25nb2RiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE2Ljg0NCAzMS44NDdsLS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNkEzODVcIixcbiAgICBkOiBcIk0xNi44NDQgMzEuODQ3bC0uODQ3LS4yOXMuMTA0LTQuMzE1LTEuNDQ1LTQuNjI1Yy0xLjAzMi0xLjE5OC4xNjUtNTAuOCAzLjg4Mi0uMTY1IDAgMC0xLjI4LjY0LTEuNTA3IDEuNzM1LS4yNDggMS4wNzQtLjA4MyAzLjM0NS0uMDgzIDMuMzQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0OTlENEFcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM1OEFBNTBcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01vbmdvZGI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29NeXNxbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTXlzcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiMwMDU0NkJcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuNDU2IDI0LjI3NmMtMS43NC0uMDQzLTMuMDg4LjEzMS00LjIxOS42MS0uMzI2LjEzLS44NDguMTMtLjg5Mi41NDMuMTc0LjE3NC4xOTYuNDU3LjM0OC42OTYuMjYxLjQzNS43MTggMS4wMjIgMS4xMzEgMS4zMjcuNDU3LjM0OC45MTQuNjk2IDEuMzkyIDEgLjg0OC41MjIgMS44MDUuODI3IDIuNjMxIDEuMzQ5LjQ4LjMwNC45NTcuNjk1IDEuNDM2IDEuMDIyLjI0LjE3My4zOTEuNDU2LjY5Ni41NjV2LS4wNjVjLS4xNTMtLjE5Ni0uMTk2LS40NzktLjM0OC0uNjk2LS4yMTgtLjIxOC0uNDM1LS40MTMtLjY1My0uNjNhMTAuMzE2IDEwLjMxNiAwIDAwLTIuMjYxLTIuMTk3Yy0uNjk2LS40NzktMi4yMTktMS4xMzEtMi41MDEtMS45MzZsLS4wNDQtLjA0M2MuNDc5LS4wNDQgMS4wNDQtLjIxOCAxLjUtLjM0OC43NC0uMTk2IDEuNDE0LS4xNTMgMi4xNzUtLjM0OC4zNDgtLjA4Ny42OTYtLjE5NiAxLjA0NC0uMzA1di0uMTk1Yy0uMzkxLS4zOTItLjY3NC0uOTE0LTEuMDg3LTEuMjg0LTEuMTEtLjk1Ny0yLjMyNy0xLjg5Mi0zLjU4OC0yLjY3NC0uNjc1LS40MzUtMS41NDUtLjcxOC0yLjI2Mi0xLjA4OC0uMjYxLS4xMy0uNjk2LS4xOTYtLjg0OC0uNDEzLS4zOTItLjQ3OS0uNjEtMS4xMS0uODkyLTEuNjc1YTU0LjkyMiA1NC45MjIgMCAwMS0xLjc4My0zLjc4NGMtLjM5Mi0uODQ4LS42My0xLjY5Ni0xLjExLTIuNDc5LTIuMjQtMy42OTctNC42NzUtNS45MzctOC40MTYtOC4xMzQtLjgwNC0uNDU2LTEuNzYxLS42NTItMi43ODMtLjg5MS0uNTQ0LS4wMjItMS4wODgtLjA2NS0xLjYzMS0uMDg3LS4zNDgtLjE1Mi0uNjk2LS41NjYtMS0uNzYxLTEuMjQtLjc4My00LjQzNy0yLjQ4LTUuMzUtLjI0LS41ODggMS40MTQuODcgMi44MDYgMS4zNyAzLjUyNC4zNy41Ljg0OCAxLjA2NSAxLjEwOSAxLjYzLjE1Mi4zNy4xOTUuNzYyLjM0NyAxLjE1My4zNDguOTU3LjY3NSAyLjAyMyAxLjEzMSAyLjkxNC4yNC40NTcuNS45MzYuODA1IDEuMzQ5LjE3NC4yMzkuNDc4LjM0OC41NDQuNzQtLjMwNS40MzQtLjMyNyAxLjA4Ny0uNSAxLjYzLS43ODMgMi40NTgtLjQ3OSA1LjUwMi42MyA3LjMwNy4zNDguNTQ0IDEuMTc1IDEuNzQgMi4yODQgMS4yODQuOTc4LS4zOTIuNzYtMS42MzIgMS4wNDMtMi43MTkuMDY2LS4yNjEuMDIyLS40MzUuMTUzLS42MDl2LjA0NGMuMzA0LjYwOS42MDkgMS4xOTYuODkxIDEuODA1LjY3NSAxLjA2NSAxLjg0OSAyLjE3NCAyLjgyOCAyLjkxNC41MjIuMzkxLjkzNSAxLjA2NSAxLjU4NyAxLjMwNXYtLjA2NmgtLjA0M2MtLjEzLS4xOTUtLjMyNy0uMjgyLS41LS40MzUtLjM5Mi0uMzktLjgyNy0uODctMS4xMzEtMS4zMDQtLjkxNC0xLjIxOC0xLjcxOS0yLjU2Ny0yLjQzNi0zLjk1OC0uMzQ4LS42NzUtLjY1My0xLjQxNC0uOTM1LTIuMDg4LS4xMy0uMjYxLS4xMy0uNjUzLS4zNDgtLjc4My0uMzI3LjQ3OC0uODA1Ljg5Mi0xLjA0NCAxLjQ3OS0uNDEzLjkzNS0uNDU3IDIuMDg4LS42MSAzLjI4NC0uMDg2LjAyMS0uMDQzIDAtLjA4Ni4wNDMtLjY5Ni0uMTc0LS45MzUtLjg5MS0xLjE5Ni0xLjUtLjY1My0xLjU0NS0uNzYxLTQuMDI0LS4xOTYtNS44MDcuMTUyLS40NTcuODA1LTEuODkyLjU0NC0yLjMyNy0uMTMtLjQxMy0uNTY2LS42NTItLjgwNS0uOTc5YTguNzY0IDguNzY0IDAgMDEtLjc4My0xLjM5MmMtLjUyMi0xLjIxNy0uNzgzLTIuNTY2LTEuMzQ4LTMuNzg0LS4yNjEtLjU2NS0uNzE4LTEuMTUyLTEuMDg3LTEuNjc0LS40MTQtLjU4Ny0uODctMS0xLjE5Ny0xLjY5Ny0uMTA4LS4yMzktLjI2LS42My0uMDg3LS44OTEuMDQ0LS4xNzQuMTMtLjI0LjMwNS0uMjgzLjI4My0uMjQgMS4wODcuMDY1IDEuMzcuMTk2LjgwNS4zMjYgMS40NzkuNjMgMi4xNTMgMS4wODcuMzA0LjIxOC42My42MzEgMS4wMjIuNzRoLjQ1N2MuNjk2LjE1MiAxLjQ3OS4wNDMgMi4xMzEuMjM5IDEuMTUzLjM3IDIuMTk2LjkxMyAzLjEzMiAxLjVhMTkuMjk0IDE5LjI5NCAwIDAxNi43ODUgNy40MzhjLjI2MS41LjM3Ljk1Ny42MDkgMS40NzkuNDU3IDEuMDY2IDEuMDIyIDIuMTUzIDEuNDc5IDMuMTk3LjQ1NiAxLjAyMi44OTEgMi4wNjYgMS41NDQgMi45MTQuMzI2LjQ1NyAxLjYzLjY5NiAyLjIxOC45MzUuNDM1LjE5NiAxLjExLjM3IDEuNS42MS43NC40NTYgMS40OC45NzggMi4xNzUgMS40NzguMzQ4LjI2IDEuNDM2LjgwNSAxLjUwMSAxLjI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzMgNS4zNzhjLS4zNyAwLS42My4wNDMtLjg5MS4xMDl2LjA0M2guMDQzYy4xNzQuMzQ4LjQ3OS41ODcuNjk2Ljg5Mi4xNzQuMzQ4LjMyNi42OTYuNSAxLjA0NGwuMDQ0LS4wNDRjLjMwNC0uMjE3LjQ1Ny0uNTY1LjQ1Ny0xLjA4Ny0uMTMxLS4xNTItLjE1My0uMzA1LS4yNjEtLjQ1Ny0uMTMtLjIxOC0uNDE0LS4zMjYtLjU4OC0uNXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NeXNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb05naW54ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29OZ2lueChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTE5NjM5XCIsXG4gICAgZDogXCJNMTYgMGwxMy44NTYgOHYxNkwxNiAzMiAyLjE0NCAyNFY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjE3IDEzLjUxMnY4LjM3NmExLjYwNyAxLjYwNyAwIDExLTMuMjE1IDBWOS42MzJjMC0xLjQzMiAxLjczMS0yLjE0OSAyLjc0NC0xLjEzNmw5LjUxIDkuNTEyVjkuNjMyYTEuNjA3IDEuNjA3IDAgMDEzLjIxNSAwdjEyLjI1NmMwIDEuNDMyLTEuNzMxIDIuMTQ5LTIuNzQ0IDEuMTM2bC05LjUxLTkuNTEyelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb05naW54OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDMySDcuMjM4QzMuNzkzIDMyIDEgMjguODY1IDEgMjQuOTk4VjE1aDl2MTd6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTAgMzJoOVY4aC05elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEgMzJoLTlWMGwxLjk3My4wMjRDMjcuODY2LjA3MiAzMSAzLjczMSAzMSA4LjIyOFYzMnpcIixcbiAgICBmaWxsOiBcIiMwN0NcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09ic2VydmFiaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Pc3F1ZXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Pc3F1ZXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkwNy4wMzJ2Ny45NjlsLTcuOTUyIDcuOTUxVjcuOTY3TDMxLjkwNy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwMy4wMzJ2Ny45NjlsNy45NTIgNy45NTFWNy45NjdMMTYuMDAzLjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTIzIDMxLjg1NWgtNy45NjhsLTcuOTUyLTcuOTUxaDcuOTg1bDcuOTM1IDcuOTUxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0zMS45MjMgMTUuOTUyaC03Ljk2OGwtNy45NTIgNy45NTJoNy45ODVsNy45MzUtNy45NTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4xIDMxLjg3MnYtNy45NjhsNy45NTItNy45NTJ2Ny45ODVMLjEgMzEuODcyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDQgMzEuODcydi03Ljk2OGwtNy45NTItNy45NTJ2Ny45ODVsNy45NTIgNy45MzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4wODQuMDQ4aDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQuMDQ4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0uMDg0IDE1Ljk1Mmg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0IDE1Ljk1MlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09zcXVlcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29QaHAgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1BocChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19waHAnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGN4OiBcIjMwLjAyJVwiLFxuICAgIGN5OiBcIjgyLjQyMiVcIixcbiAgICByOiBcIjEyNC44MTQlXCIsXG4gICAgZng6IFwiMzAuMDIlXCIsXG4gICAgZnk6IFwiODIuNDIyJVwiLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBcIm1hdHJpeCguNTI2MDQgMCAwIDEgLjE0MiAwKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMSAwIDAgLTEgLjAyNiAyNS40MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjU5MiAuODYpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc3N0JCM1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xNS40OTQgMS40NzJjNy44OTQgMCAxNC4yOTMgMy4yNDMgMTQuMjkzIDcuMjQzcy02LjQgNy4yNDQtMTQuMjkzIDcuMjQ0Yy03Ljg5NCAwLTE0LjI5My0zLjI0My0xNC4yOTMtNy4yNDQgMC00IDYuNC03LjI0MyAxNC4yOTMtNy4yNDNcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTguNzAxIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZIOC40MzNsLS41NzUtMi45NTloLjg0M3pNNS4zMSA0LjE3MmEuMTYxLjE2MSAwIDAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4NiAzLjY4NiAwIDAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwMC0uMTU4LS4xM0g1LjMwOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTguNTY2IDEwLjYxNWguOTA1Yy43MjIgMCAuOTcyLS4xNTggMS4wNTgtLjI1My4xNDEtLjE1Ny4xNjgtLjQ4Ny4wNzctLjk1Ni0uMTAyLS41MjQtLjI5MS0uODk2LS41NjMtMS4xMDUtLjI3Ny0uMjE0LS43MjktLjMyMi0xLjM0MS0uMzIyaC0uNjQ4bC41MTIgMi42MzZ6bTEuNTUxIDEuODgzSDYuODMzYS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxTDQuOTkyIDQuMzk2YS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODh6TTcuNjYzIDcuNjU2aDEuMDM5Yy42ODggMCAxLjIwMS4xMyAxLjUzOC4zOS4zMzcuMjU5LjU2NS42OTIuNjgzIDEuMjk5LjExMy41ODMuMDYxLjk5NC0uMTU1IDEuMjMzLS4yMTYuMjQtLjY0OC4zNi0xLjI5Ny4zNkg4LjNsLS42MzgtMy4yODJ6bTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDUzLS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNINy40MjJsLS40MDUtMi4wODVINS4zMDlsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xNi43NjMgNi4yNTdhLjE2MS4xNjEgMCAwMC0uMTU5LjE5MmwuNjc0IDMuNDdjLjA2NC4zMy4wNDkuNTY2LS4wNDQuNjY2LS4wNTcuMDYxLS4yMjguMTY0LS43MzIuMTY0SDE1LjI4bC0uODQ3LTQuMzYxYS4xNjEuMTYxIDAgMDAtLjE1OS0uMTMxSDEyLjU4YS4xNjEuMTYxIDAgMDAtLjE1OS4xOTJsMS41MjQgNy44NDFjLjAxNS4wNzYuMDgyLjEzLjE1OS4xM2gxLjY5NGEuMTYxLjE2MSAwIDAwLjE1OS0uMTkxbC0uMzY4LTEuODkzaDEuMzE0YzEgMCAxLjY4LS4xNzYgMi4wNzUtLjU0LjQwMy0uMzcuNTI5LS45NjIuMzc0LTEuNzZsLS43MS0zLjY0OGEuMTYxLjE2MSAwIDAwLS4xNTgtLjEzMWgtMS43MjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS43OTkgMTQuNTgyaC0xLjY5NWEuMzIzLjMyMyAwIDAxLS4zMTctLjI2MUwxMi4yNjMgNi40OGEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNjk1Yy4xNTQgMCAuMjg3LjExLjMxNy4yNjJsLjgyMiA0LjIzaDEuMDg4Yy41MDQgMCAuNjEtLjEwNy42MTQtLjExMi4wMy0uMDMzLjA3LS4xODUuMDA0LS41MjZsLS42NzQtMy40N2EuMzIzLjMyMyAwIDAxLjMxNy0uMzg0aDEuNzIxYy4xNTUgMCAuMjg4LjExLjMxNy4yNjJsLjcxIDMuNjQ4Yy4xNjYuODU3LjAyMyAxLjUtLjQyNCAxLjkxLS40MjYuMzkyLTEuMTQuNTgyLTIuMTg0LjU4MmgtMS4xMThsLjMzIDEuN2EuMzIzLjMyMyAwIDAxLS4zMTYuMzg1bTAtLjMyM2wtLjQwNi0yLjA4NGgxLjUxYy45NSAwIDEuNjA1LS4xNjYgMS45NjYtLjQ5Ny4zNi0uMzMyLjQ2OC0uODY5LjMyNC0xLjYxMWwtLjcwOS0zLjY0OWgtMS43MjFsLjY3NCAzLjQ3Yy4wNzcuMzk0LjA0OC42NjMtLjA4NS44MDctLjEzMy4xNDMtLjQxNi4yMTUtLjg1LjIxNWgtMS4zNTRsLS44NzMtNC40OTJIMTIuNThsMS41MjQgNy44NDFoMS42OTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTIyLjAzMyA3LjgxN2MuNjUgMCAxLjEzNC4xMiAxLjQ0LjM1Ni4zMDQuMjMzLjUxMy42MzguNjIzIDEuMjAyLjEwMy41MjguMDY0Ljg5Ni0uMTE2IDEuMDk1LS4xODMuMjAzLS41OC4zMDYtMS4xNzcuMzA2aC0xLjAzOGwtLjU3NS0yLjk1OWguODQzem0tMy4zOTItMy42NDVhLjE2MS4xNjEgMCAwMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODkgMy42ODkgMCAwMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMDAtLjcyNy0uOTEgMy4xODkgMy4xODkgMCAwMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMDAtLjE1OC0uMTNIMTguNjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMS44OTggMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkyLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNnptMS41NTEgMS44ODNoLTMuMjg0YS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxbC0xLjUyNC03Ljg0MWEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4em0tMi40NTQtNC44NDJoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2aC0xLjE3bC0uNjM4LTMuMjgyem0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1NC0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAwLS4zNzgtMS4wNSAzLjUwMiAzLjUwMiAwIDAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzaC0xLjQ2M2wtLjQwNS0yLjA4NWgtMS43MDhsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1BocDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Bvc3RncmVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qb3N0Z3JlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0zMS44NzYgMTkuMTYyYy0uMTkyLS41NjQtLjY5NS0uOTU2LTEuMzQ1LTEuMDUtLjMwNi0uMDQ1LS42NTctLjAyNi0xLjA3Mi4wNTctLjcyNC4xNDUtMS4yNjEuMi0xLjY1NC4yMTEgMS40OC0yLjQyMiAyLjY4My01LjE4NSAzLjM3Ni03Ljc4NSAxLjEyLTQuMjA1LjUyMS02LjEyLS4xNzgtNi45ODctMS44NS0yLjI5My00LjU1MS0zLjUyNS03LjgwOS0zLjU2M2ExNC4yMzkgMTQuMjM5IDAgMDAtNC4wNi41NTEgMTUuNTczIDE1LjU3MyAwIDAwLTIuMzczLS4yMWMtMS41NjctLjAyNC0yLjk1Mi4zMDctNC4xMzUuOTg4YTE5LjMzNCAxOS4zMzQgMCAwMC0yLjkyLS43MTFDNi44NS4yMDggNC41NDkuNTYzIDIuODY2IDEuNzE2LjgyOCAzLjExMi0uMTE3IDUuNTM3LjA1OCA4LjkyNi4xMTMgMTAgLjczNCAxMy4yNzMgMS43MSAxNi4zNzZjLjU2MSAxLjc4NCAxLjE2IDMuMjY2IDEuNzggNC40MDQuODc4IDEuNjE0IDEuODE4IDIuNTY0IDIuODczIDIuOTA2LjU5MS4xOSAxLjY2Ni4zMjUgMi43OTYtLjU4OC4xNDMuMTY4LjMzNC4zMzUuNTg4LjQ5LjMyMi4xOTguNzE2LjM1OSAxLjEwOS40NTQgMS40MTguMzQ0IDIuNzQ1LjI1OCAzLjg3OC0uMjI0LjAwNy4xOTUuMDEzLjM4Mi4wMTcuNTQzLjAwOC4yNjIuMDE1LjUxOC4wMjUuNzU4LjA2NyAxLjYyLjE4MSAyLjg4MS41MTggMy43NjNsLjA3LjIwMWMuMTY4LjUuNDQ5IDEuMzM1IDEuMTY0IDEuOTkuNzQuNjc3IDEuNjM3Ljg4NSAyLjQ1Ny44ODUuNDEyIDAgLjgwNC0uMDUyIDEuMTQ5LS4xMjQgMS4yMjctLjI1NSAyLjYyMS0uNjQzIDMuNjMtMi4wMzYuOTUzLTEuMzE2IDEuNDE3LTMuMjk5IDEuNS02LjQyM2wuMDMxLS4yNTMuMDItLjE2NS4yMjUuMDE5LjA1OC4wMDRjMS4yNS4wNTUgMi43NzktLjIwMiAzLjcxOC0uNjI1Ljc0MS0uMzM0IDMuMTE5LTEuNTUgMi41NTktMy4xOTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzNjc5MVwiLFxuICAgIGQ6IFwiTTI5LjczOCAxOS40ODFjLTMuNzE3Ljc0NC0zLjk3My0uNDc2LTMuOTczLS40NzYgMy45MjUtNS42NDggNS41NjYtMTIuODE3IDQuMTUtMTQuNTcxQzI2LjA1Mi0uMzUyIDE5LjM2NSAxLjkxIDE5LjI1NCAxLjk3bC0uMDM2LjAwNmExMy42NTcgMTMuNjU3IDAgMDAtMi40OC0uMjVjLTEuNjgyLS4wMjctMi45NTguNDI3LTMuOTI3IDEuMTQgMCAwLTExLjkyOC00Ljc2Ni0xMS4zNzQgNS45OTIuMTE4IDIuMjg5IDMuMzgzIDE3LjMxOCA3LjI3OCAxMi43NzlhNzAuNDQzIDcwLjQ0MyAwIDAxMi43OTgtMy4wNjRjLjY4My40NCAxLjUwMS42NjUgMi4zNTguNTg0bC4wNjctLjA1NWMtLjAyLjIwNi0uMDExLjQwOC4wMjcuNjQ3LTEuMDA0IDEuMDg3LS43MDkgMS4yNzctMi43MTQgMS42NzgtMi4wMy40MDUtLjgzNyAxLjEyNy0uMDYgMS4zMTYuOTQ0LjIyOSAzLjEyNy41NTMgNC42MDItMS40NWwtLjA1OC4yM2MuMzkzLjMwNC42NjkgMS45ODUuNjIzIDMuNTA4LS4wNDcgMS41MjQtLjA3OCAyLjU3LjIzMiAzLjM4Ny4zMS44MTcuNjE5IDIuNjU1IDMuMjU1IDIuMTA3IDIuMjAzLS40NTggMy4zNDUtMS42NDQgMy41MDMtMy42MjMuMTEzLTEuNDA3LjM2OC0xLjE5OS4zODQtMi40NTdsLjIwNS0uNTk1Yy4yMzYtMS45MDcuMDM3LTIuNTIyIDEuMzk0LTIuMjM2bC4zMy4wMjhjMSAuMDQ0IDIuMzA3LS4xNTYgMy4wNzQtLjUwMiAxLjY1Mi0uNzQzIDIuNjMyLTEuOTg1IDEuMDAzLTEuNjU5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xMy41MSA5Ljg4MmMtLjMzNS0uMDQ1LS42MzktLjAwNC0uNzkyLjExYS4yOC4yOCAwIDAwLS4xMi4xODdjLS4wMi4xMzMuMDc3LjI4Mi4xMzYuMzU4LjE2OS4yMTYuNDE0LjM2NS42NTguMzk4LjAzNS4wMDQuMDcuMDA3LjEwNS4wMDcuNDA1IDAgLjc3NC0uMzA3LjgwNy0uNTMzLjA0LS4yODMtLjM4My0uNDcyLS43OTUtLjUyN20xMS4wOTkuMDA5Yy0uMDMyLS4yMjItLjQ0LS4yODUtLjgyNi0uMjMzLS4zODYuMDUyLS43Ni4yMi0uNzMuNDQzLjAyNi4xNzMuMzQ4LjQ2OC43My40NjhhLjcxOC43MTggMCAwMC4wOTctLjAwNi45NDcuOTQ3IDAgMDAuNTMtLjI4MWMuMTM1LS4xMzguMjEzLS4yOTEuMTk5LS4zOTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTMwLjk3NSAxOS4zOTdjLS4xNDItLjQxNi0uNTk4LS41NS0xLjM1Ni0uMzk4LTIuMjUuNDUtMy4wNTYuMTM5LTMuMzIxLS4wNSAxLjc1LTIuNTg0IDMuMTg5LTUuNzA4IDMuOTY1LTguNjIzLjM2OC0xLjM4LjU3LTIuNjYzLjU4Ny0zLjcwOC4wMTktMS4xNDctLjE4My0xLjk5LS41OTgtMi41MDUtMS42NzUtMi4wNzUtNC4xMzQtMy4xODktNy4xMS0zLjIyLTIuMDQ3LS4wMjItMy43NzUuNDg2LTQuMTEuNjI5YTEwLjU0OSAxMC41NDkgMCAwMC0yLjMxMy0uMjg4Yy0xLjUzNi0uMDI0LTIuODY0LjMzMi0zLjk2MyAxLjA2YTE4LjEzMSAxOC4xMzEgMCAwMC0zLjIyLS44MmMtMi42MS0uNDA3LTQuNjgzLS4wOTgtNi4xNjMuOTE4QzEuNjA4IDMuNjA1Ljc5MyA1Ljc3My45NTEgOC44MzZjLjA1MyAxLjAzLjY1OCA0LjIgMS42MTQgNy4yMzYgMS4yNTggMy45OTYgMi42MjUgNi4yNTcgNC4wNjMgNi43MjMuMTY5LjA1NC4zNjMuMDkyLjU3Ny4wOTIuNTI1IDAgMS4xNjgtLjIzIDEuODM4LTEuMDFhNjQuODk0IDY0Ljg5NCAwIDAxMi41MzItMi43NzggNC4xOCA0LjE4IDAgMDAxLjgyMi40NzVsLjAwNS4wNDhjLS4xMS4xMjctLjIxNy4yNTUtLjMyMS4zODUtLjQ0LjU0Mi0uNTMyLjY1NS0xLjk1LjkzOC0uNDAzLjA4LTEuNDczLjI5NC0xLjQ4OSAxLjAyMi0uMDE3Ljc5NSAxLjI2NiAxLjEzIDEuNDEyIDEuMTY1LjUwOS4xMjMgMSAuMTg0IDEuNDY3LjE4NCAxLjEzOCAwIDIuMTQtLjM2MyAyLjk0LTEuMDY0LS4wMjUgMi44MzQuMDk3IDUuNjI4LjQ0OCA2LjQ3OS4yODguNjk2Ljk5IDIuNCAzLjIwOCAyLjM5OWE1LjMgNS4zIDAgMDAxLjA3OC0uMTE5YzIuMzE1LS40OCAzLjMyLTEuNDczIDMuNzEtMy42Ni4yMDgtMS4xNy41NjUtMy45NjEuNzMzLTUuNDU5LjM1NC4xMDcuODEuMTU2IDEuMzA0LjE1NiAxLjAyOSAwIDIuMjE2LS4yMTIgMi45NjEtLjU0Ny44MzctLjM3NyAyLjM0Ni0xLjMgMi4wNzItMi4xMDR6TTI1LjQ2MiA5LjI3OGMtLjAwOC40NDItLjA3Ljg0NC0uMTM3IDEuMjYyLS4wNzIuNDUxLS4xNDUuOTE3LS4xNjQgMS40ODItLjAxOS41NS4wNTIgMS4xMjMuMTIgMS42NzYuMTQgMS4xMTguMjgyIDIuMjY4LS4yNjkgMy40MDNhNC4zNyA0LjM3IDAgMDEtLjI0My0uNDg1Yy0uMDY5LS4xNjEtLjIxNy0uNDItLjQyMy0uNzc3LS44LTEuMzktMi42NzMtNC42NDgtMS43MTQtNS45NzcuMjg2LS4zOTYgMS4wMS0uODAzIDIuODMtLjU4NHptLTIuMjA2LTcuNDljMi42NjcuMDU4IDQuNzc3IDEuMDI1IDYuMjcgMi44NzYgMS4xNDYgMS40Mi0uMTE2IDcuODc5LTMuNzY3IDEzLjQ1bC0uMTExLS4xMzUtLjA0Ni0uMDU2Yy45NDMtMS41MS43NTktMy4wMDYuNTk1LTQuMzMxLS4wNjgtLjU0NC0uMTMyLTEuMDU4LS4xMTUtMS41NDEuMDE2LS41MTEuMDg2LS45NS4xNTQtMS4zNzUuMDgyLS41MjIuMTY3LTEuMDYzLjE0NC0xLjcwMWEuNjg0LjY4NCAwIDAwLjAxNS0uMjRjLS4wNi0uNjExLS43OC0yLjQ0MS0yLjI0Ny00LjA5OGExMC4wOTQgMTAuMDk0IDAgMDAtMy41NzItMi42MDQgMTIuNDA3IDEyLjQwNyAwIDAxMi42OC0uMjQ0ek04LjMzNCAyMS4zMDdjLS43MzcuODYtMS4yNDYuNjk1LTEuNDE0LjY0MS0xLjA5MS0uMzUzLTIuMzU3LTIuNTktMy40NzQtNi4xMzYtLjk2Ni0zLjA2OS0xLjUzLTYuMTU1LTEuNTc1LTcuMDItLjE0MS0yLjczNy41NDMtNC42NDQgMi4wMzMtNS42NjkgMi40MjYtMS42NjggNi40MTQtLjY3IDguMDE2LS4xNjMtLjAyMy4wMjItLjA0Ny4wNDItLjA3LjA2NS0yLjYzIDIuNTc1LTIuNTY3IDYuOTc0LTIuNTYgNy4yNDMgMCAuMTA0LjAwOC4yNTEuMDIuNDUzLjA0Ni43NC4xMyAyLjExNy0uMDk1IDMuNjc3LS4yMDkgMS40NS4yNTIgMi44NjggMS4yNjQgMy44OTIuMTA0LjEwNS4yMTMuMjA1LjMyNy4zLS40NS40NjctMS40MyAxLjUwMi0yLjQ3MiAyLjcxN3ptMi44MS0zLjYzNWMtLjgxNi0uODI2LTEuMTg2LTEuOTc0LTEuMDE3LTMuMTUuMjM4LTEuNjQ4LjE1LTMuMDgzLjEwMy0zLjg1NGwtLjAxNi0uMjc3Yy4zODQtLjMzIDIuMTY1LTEuMjU1IDMuNDM0LS45NzMuNTguMTI5LjkzMi41MTEgMS4wOCAxLjE3Ljc1OSAzLjQwNi4xIDQuODI1LS40MyA1Ljk2Ni0uMTA5LjIzNS0uMjEyLjQ1OC0uMy42ODdsLS4wNjguMTc4Yy0uMTczLjQ1LS4zMzQuODY3LS40MzQgMS4yNjRhMy4zMjUgMy4zMjUgMCAwMS0yLjM1Mi0xLjAxMXptLjEzMyA0LjU5NGEyLjA3IDIuMDcgMCAwMS0uNjE0LS4yNTZjLjExMS0uMDUxLjMxLS4xMi42NTQtLjE5IDEuNjY4LS4zMzIgMS45MjUtLjU2NyAyLjQ4Ny0xLjI2LjEzLS4xNTguMjc1LS4zMzguNDc4LS41NTcuMzAxLS4zMjguNDQtLjI3Mi42OS0uMTcyLjIwMi4wODIuNC4zMjguNDguNTk5LjAzNy4xMjguMDguMzctLjA2LjU2LTEuMTc0IDEuNTk1LTIuODg2IDEuNTc0LTQuMTE1IDEuMjc2em04LjcyNSA3Ljg3M2MtMi4wNC40MjQtMi43NjEtLjU4Ni0zLjIzNy0xLjc0LS4zMDgtLjc0NC0uNDU5LTQuMTAyLS4zNTEtNy44MWEuNDM0LjQzNCAwIDAwLS4wMi0uMTQzIDEuODIzIDEuODIzIDAgMDAtLjA1Ny0uMjYyYy0uMTYtLjU0LS41NDgtLjk5LTEuMDEzLTEuMTc4LS4xODUtLjA3NC0uNTI1LS4yMS0uOTMzLS4xMS4wODctLjM0Ny4yMzgtLjc0LjQwMi0xLjE2NWwuMDY4LS4xNzhjLjA3OC0uMjAyLjE3NS0uNDEuMjc3LS42MzIuNTU0LTEuMTk0IDEuMzEzLTIuODI5LjQ5LTYuNTIyLS4zMDktMS4zODQtMS4zNC0yLjA2LTIuOTAxLTEuOTAzLS45MzYuMDk0LTEuNzkzLjQ2LTIuMjIuNjdhNy4yNTUgNy4yNTUgMCAwMC0uMjU1LjEzMmMuMTItMS4zOTQuNTctNCAyLjI1NS01LjY0NyAxLjA2Mi0xLjAzOCAyLjQ3NS0xLjU1IDQuMTk2LTEuNTIzIDMuMzkzLjA1NCA1LjU2OSAxLjc0MiA2Ljc5NiAzLjE1IDEuMDU4IDEuMjExIDEuNjMxIDIuNDMzIDEuODYgMy4wOTEtMS43Mi0uMTctMi44ODkuMTYtMy40ODIuOTgyLTEuMjkgMS43ODcuNzA2IDUuMjU3IDEuNjY1IDYuOTI0LjE3NS4zMDYuMzI3LjU3LjM3NS42ODIuMzEyLjczNC43MTYgMS4yMjQgMS4wMTIgMS41ODIuMDkuMTEuMTc4LjIxNS4yNDUuMzA4LS41MjEuMTQ2LTEuNDU2LjQ4Mi0xLjM3MSAyLjE2NC0uMDY5Ljg0My0uNTU4IDQuNzkzLS44MDYgNi4xODktLjMyOCAxLjg0My0xLjAyOCAyLjUzLTIuOTk1IDIuOTM5em04LjUxMy05LjQ0N2MtLjUzMi4yNC0xLjQyNC40Mi0yLjI3LjQ1OC0uOTM1LjA0My0xLjQxMS0uMTAxLTEuNTIzLS4xOS0uMDUzLTEuMDQ4LjM1LTEuMTU3Ljc3NS0xLjI3M2EzLjM1IDMuMzUgMCAwMC4xOTUtLjA1OGMuMDQuMDMxLjA4Mi4wNjIuMTMuMDkyLjc1LjQ4MSAyLjA5MS41MzMgMy45ODQuMTU0bC4wMi0uMDA0Yy0uMjU1LjIzMi0uNjkyLjU0Mi0xLjMxLjgyMXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qb3N0Z3JlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Byb21ldGhldXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Byb21ldGhldXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjUyMkNcIixcbiAgICBkOiBcIk0xNS45MDcuMTg3QzcuMTIyLjE4NyAwIDcuMzA4IDAgMTYuMDkzUzcuMTIyIDMyIDE1LjkwNyAzMmM4Ljc4NCAwIDE1LjkwNi03LjEyMSAxNS45MDYtMTUuOTA2UzI0LjY5LjE4NyAxNS45MDcuMTg3em0wIDI5Ljc3Yy0yLjUgMC00LjUyNi0xLjY3LTQuNTI2LTMuNzI5aDkuMDUxYzAgMi4wNi0yLjAyNiAzLjczLTQuNTI1IDMuNzN6bTcuNDc1LTQuOTYzSDguNDN2LTIuNzExaDE0Ljk1djIuNzF6bS0uMDU0LTQuMTA3SDguNDczYy0uMDUtLjA1Ny0uMS0uMTEzLS4xNDctLjE3LTEuNTMtMS44NTktMS44OTEtMi44MjktMi4yNDEtMy44MTgtLjAwNi0uMDMyIDEuODU1LjM4IDMuMTc2LjY3OCAwIDAgLjY3OS4xNTcgMS42NzIuMzM4LS45NTMtMS4xMTgtMS41Mi0yLjUzOS0xLjUyLTMuOTkxIDAtMy4xODkgMi40NDYtNS45NzUgMS41NjQtOC4yMjcuODU4LjA3IDEuNzc3IDEuODEyIDEuODM5IDQuNTM3LjkxMy0xLjI2MiAxLjI5NS0zLjU2NiAxLjI5NS00Ljk3OCAwLTEuNDYzLjk2My0zLjE2MSAxLjkyNy0zLjIyLS44NiAxLjQxNy4yMjMgMi42MyAxLjE4NCA1LjY0Mi4zNjEgMS4xMzIuMzE1IDMuMDM1LjU5NCA0LjI0My4wOTItMi41MDguNTIzLTYuMTY3IDIuMTE0LTcuNDMtLjcwMiAxLjU5MS4xMDQgMy41ODEuNjU1IDQuNTM4Ljg4OSAxLjU0NCAxLjQyOCAyLjcxNCAxLjQyOCA0LjkyNiAwIDEuNDgzLS41NDggMi44OC0xLjQ3MiAzLjk3MSAxLjA1LS4xOTcgMS43NzYtLjM3NCAxLjc3Ni0uMzc0bDMuNDExLS42NjZzLS40OTUgMi4wMzgtMi40IDQuMDAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUHJvbWV0aGV1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1JhYmJpdG1xID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29SYWJiaXRtcShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2MFwiLFxuICAgIGQ6IFwiTTMwLjA4MyAxMy4xOTdoLTkuODc4Yy0uNzktLjA4OC0xLjM5MS0uNzQtMS4zOTEtMS41MDhWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1aC0zLjQ1NmMtLjg4NSAwLTEuNTk1LjY3Mi0xLjU5NSAxLjQ5NXY5LjgyYy0uMDQzLjc0LS42OTYgMS4zMzgtMS40NzggMS40MDZIOC4xMDJjLS43Ni0uMDg4LTEuMzQ4LS42ODYtMS4zOTgtMS40MDZWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1SDEuNjUyQy43NjguNDc2LjA1OCAxLjE0OC4wNTggMS45N3YyOC4zNThjMCAuODMuNzE3IDEuNDk1IDEuNTk0IDEuNDk1aDI4LjQzOWMuODg0IDAgMS41OTQtLjY3MyAxLjU5NC0xLjQ5NVYxNC42OTJjLS4wMDctLjgyOS0uNzE4LTEuNDk1LTEuNjAyLTEuNDk1em0tNC41NSAxMC43MjRjMCAuODI5LS43MTggMS40OTUtMS41OTUgMS40OTVIMjAuNDhjLS44ODQgMC0xLjU5NS0uNjczLTEuNTk1LTEuNDk1di0zLjA1OGMwLS44My43MTgtMS40OTUgMS41OTUtMS40OTVoMy40NTdjLjg4NCAwIDEuNTk0LjY3MiAxLjU5NCAxLjQ5NXYzLjA1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JhYmJpdG1xOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUmVkaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JlZGlzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDMpXCIsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAyMC43OTFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM3LTEyLjQ2LTUuMjM0LS44MzgtLjM5OS0xLjI3OC0uNzM1LTEuMjc4LTEuMDUydi0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTEuNjIzIDIuMzkzIDEzLjI3IDIuOTkybC0uMDAxIDMuMTM1YzAgLjMxNC0uMzguNjU5LTEuMjQgMS4xMDR6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTcuNjFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU2LTEuNDcxLS42OTgtMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0LTEuNjc2LS43OTctMS43MTItMS4zNDUtLjA2NC0xLjk4NyAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MiAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTUuNjA2Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS43LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNS0uODM4LS4zOTgtMS4yNzgtLjczNC0xLjI3OC0xLjA1MXYtMy4xOFMxMi4zMDcgOS4xOSAxNC4yNjQgOC40OTJjMS45NTctLjY5OCAyLjYzNi0uNzIzIDQuMzAxLS4xMTcgMS42NjYuNjA2IDExLjYyMyAyLjM5MiAxMy4yNyAyLjk5MWwtLjAwMSAzLjEzNWMwIC4zMTUtLjM4LjY2LTEuMjQgMS4xMDV6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTIuNDI1Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LTEuNjc2LS43OTYtMS43MTItMS4zNDUtLjA2NC0xLjk4NiAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MyAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTAuMzYzIDQuMDQ3IDEyLjAwOSA0LjY0NiAxLjY0Ni42IDEuNzEgMS4wOTQuMDIgMS45Njl6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTAuMjI4Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNEMuNjI3IDEwLjI2OC4xODcgOS45MzIuMTg3IDkuNjE1di0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkxIDEzLjI3IDIuOTlsLS4wMDEgMy4xMzZjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCA3LjA0N2MtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTUtNC4zNy4yNTYtMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzRDLS4yMTEgNi42ODktLjI0NyA2LjE0IDEuNCA1LjQ5OVMxMi4zMDcgMS4yNDcgMTQuMjY0LjU1YzEuOTU3LS43IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMC4xNTcgMy45ODVsLTIuNzQyLjI4My0uNjE0IDEuNDY4LS45OTItMS42MzgtMy4xNjYtLjI4MyAyLjM2Mi0uODQ3LS43MDgtMS4zIDIuMjEyLjg2IDIuMDg1LS42OC0uNTYzIDEuMzQ1em0tMy41MiA3LjEyM2wtNS4xMTgtMi4xMSA3LjMzNC0xLjExOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImVsbGlwc2VcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGN4OiA5LjU0MSxcbiAgICBjeTogNi4zMTEsXG4gICAgcng6IDMuOTIsXG4gICAgcnk6IDEuNTFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3QTBDMDBcIixcbiAgICBkOiBcIk0yMy4zOTggNC4zODZsNC4zNCAxLjcwNS00LjMzNiAxLjcwM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0FEMjExNVwiLFxuICAgIGQ6IFwiTTE4LjU5NiA2LjI3NGw0LjgwMi0xLjg4OC4wMDQgMy40MDgtLjQ3MS4xODN6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmVkaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29TZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDcuMDA4VjBoMjB2MTYuNzQ0YzAgMy45MTMtNi4zNzggNi40NzctOS4wMTUgNy4yNTZWNy4wMDhIOXpcIixcbiAgICBmaWxsOiBcIiNGQTc0NEVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjAuMDczVjEwaDE0djIyQzcuNjY3IDI3Ljk4IDMgMjQuMDA0IDMgMjAuMDczelwiLFxuICAgIGZpbGw6IFwiIzFEQkFCMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg4djE0Yy0yLjk4My0xLjE0LTgtMy43NTYtOC03LjA0M1YxMHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1NpdGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NpdGVTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI3LjA1IDEwaC03LjM0bC0xMSAyMnMxNS42OTYtNC45NiAyMS44NTUtMTYuMDc2QzMyLjAzNyAxMy4yNjYgMzAuMDg4IDEwIDI3LjA1IDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMS4zNTUgMEg3LjUzM0wuNDI3IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDQgMjBoNy4zNTFsMTAtMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMi41MzMgMTBMLjQyOCAxNC4yMTFDLS45MDMgMTYuODcxIDEuMDMyIDIwIDQuMDA1IDIwaDcuMzVsNS0xMEgyLjUzM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TaXRlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2tldGNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ta2V0Y2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzJMMCAxMS40NTRsNi45MzEtMTAuMzhMMTYgMGw5LjA2OSAxLjA3NEwzMiAxMS40NTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQzZDMDBcIixcbiAgICBkOiBcIk0xNiAzMkwwIDExLjQ1NGgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkVGQjRcIixcbiAgICBkOiBcIk0xNiAwTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk02LjkzMiAxLjA3NEwzLjM2OSA2LjMuMDAxIDExLjQ1NGg2LjU0MnpNMjUuMDY5IDEuMDc0TDI4LjYzMiA2LjMgMzIgMTEuNDU0aC02LjU0MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFRDMwNVwiLFxuICAgIGQ6IFwiTTYuOTMxIDEuMDc0bC0uNDUzIDEwLjM4TDE2IDB6TTI1LjA2OSAxLjA3NGwuNDUzIDEwLjM4TDE2IDB6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2tldGNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2xhY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NsYWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0UwMUU1QVwiLFxuICAgIGQ6IFwiTTYuODEzIDIwLjE4YTMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjgtMy4zMyAzLjMzNyAzLjMzNyAwIDAxMy4zMjktMy4zMjloMy4zMjl2My4zM3ptMS42NzcgMGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMjggMy4zM3Y4LjMzNWEzLjMzNyAzLjMzNyAwIDAxLTMuMzI5IDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMjktMy4zM1YyMC4xOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM2QzVGMFwiLFxuICAgIGQ6IFwiTTExLjgyIDYuODEzYTMuMzM3IDMuMzM3IDAgMDEtMy4zMy0zLjMzQTMuMzM3IDMuMzM3IDAgMDExMS44Mi4xNTZhMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzI5djMuMzI5SDExLjgyem0wIDEuNjc3YTMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjhIMy40ODRhMy4zMzcgMy4zMzcgMCAwMS0zLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5aDguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkVCNjdEXCIsXG4gICAgZDogXCJNMjUuMTg3IDExLjgyYTMuMzM3IDMuMzM3IDAgMDEzLjMyOS0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOGgtMy4zMjhWMTEuODJ6bS0xLjY3OCAwYTMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjggMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOVYzLjQ4NGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzdjguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUNCMjJFXCIsXG4gICAgZDogXCJNMjAuMTggMjUuMTg3YTMuMzM3IDMuMzM3IDAgMDEzLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOSAzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzN2LTMuMzI4aDMuMzN6bTAtMS42NzhhMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOWg4LjMzNWEzLjMzNyAzLjMzNyAwIDAxMy4zMjkgMy4zMyAzLjMzNyAzLjMzNyAwIDAxLTMuMzMgMy4zMjhIMjAuMTh6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2xhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29VcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1VwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDE1YzAgNy4wNjItNC44ODggMTIuOTY5LTExLjQ2IDE0LjU2M0ExNS45MTQgMTUuOTE0IDAgMDAxNiAzMmM4LjgzNiAwIDE2LTcuMTYzIDE2LTE2di0zbC02LjUtNi02LjUgNnYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNNi44MzMgMjYuNjQ2YTExLjk1NCAxMS45NTQgMCAwMDguNTQ0LTcuODM0QTEyLjQzIDEyLjQzIDAgMDExMyAxMS41Vi4yOTJDNS42IDEuNjk2IDAgOC4xOSAwIDE2LjAwMmMwIDQuMzU4IDEuNzUgOC4zMDYgNC41NzcgMTEuMTkybDIuMjU2LS41NDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMzAuMzYyIDIzLjAyYy0xLjQ5NC42My0zLjEzNy45OC00Ljg2MS45OGExMi40NDMgMTIuNDQzIDAgMDEtNy44NTItMi43OCAxNS4wNDIgMTUuMDQyIDAgMDEtMTAuMTEgOC4zNDNBMTUuOTEgMTUuOTEgMCAwMDE2LjAwMiAzMmM2LjMxNCAwIDExLjc1OC0zLjY2OSAxNC4zNi04Ljk4XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29VcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29XZWJob29rID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XZWJob29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3M0E2M1wiLFxuICAgIGQ6IFwiTTE0Ljk0MyAxMy41NjNjLTEuMzI3IDIuMjMtMi41OTcgNC4zODgtMy44OTQgNi41MzEtLjMzNC41NS0uNDk4Ljk5OC0uMjMyIDEuNjk4LjczNCAxLjkzMS0uMzAyIDMuODExLTIuMjUgNC4zMjEtMS44MzcuNDgyLTMuNjI3LS43MjYtMy45OTItMi42OTItLjMyMy0xLjc0MSAxLjAyOC0zLjQ0OCAyLjk0OC0zLjcyLjE2LS4wMjMuMzI1LS4wMjYuNTk1LS4wNDZsMi45Mi00Ljg5NkM5LjIgMTIuOTMzIDguMTA4IDEwLjggOC4zNSA4LjE1NGMuMTcxLTEuODcuOTA3LTMuNDg2IDIuMjUtNC44MWE3LjYzOSA3LjYzOSAwIDAxOS41MzEtMWMyLjkxIDEuODcgNC4yNDQgNS41MTIgMy4xMDcgOC42MjlsLTIuNjY4LS43MjRjLjM1Ny0xLjczMy4wOTMtMy4yOS0xLjA3Ni00LjYyMy0uNzcyLS44OC0xLjc2My0xLjM0MS0yLjg5LTEuNTExLTIuMjU4LS4zNDEtNC40NzYgMS4xMS01LjEzNCAzLjMyNy0uNzQ4IDIuNTE2LjM4MyA0LjU3MiAzLjQ3MyA2LjEyMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRCNEI0QlwiLFxuICAgIGQ6IFwiTTE4LjczIDEwLjkyNmwyLjgyMyA0Ljk4YzQuNzUzLTEuNDcgOC4zMzYgMS4xNiA5LjYyMiAzLjk3NyAxLjU1MiAzLjQwMi40OTEgNy40MzItMi41NTggOS41MzEtMy4xMyAyLjE1NS03LjA4OSAxLjc4Ny05Ljg2Mi0uOTgxbDIuMTc2LTEuODIxYzIuNzM5IDEuNzc0IDUuMTM1IDEuNjkgNi45MTMtLjQxYTQuNzY2IDQuNzY2IDAgMDAtLjA3Ny02LjIxOWMtMS44LTIuMDI1LTQuMjEzLTIuMDg2LTcuMTMtLjE0My0xLjIwOS0yLjE0Ni0yLjQ0LTQuMjc1LTMuNjEtNi40MzYtLjM5Ni0uNzI5LS44MzItMS4xNTItMS43MjItMS4zMDYtMS40ODctLjI1Ny0yLjQ0Ni0xLjUzNC0yLjUwNC0yLjk2NGEzLjI1OCAzLjI1OCAwIDAxMi4wOC0zLjE5MiAzLjI0MyAzLjI0MyAwIDAxMy42NzEgMS4wMDJjLjcxLjg5Ni45MzUgMS45MDUuNTYyIDMuMDEtLjEwNC4zMDktLjIzOC42MDctLjM4NC45NzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QTRBNEFcIixcbiAgICBkOiBcIk0yMC45NjMgMjQuNDAxaC01LjcyYy0uNTUgMi4yNTYtMS43MzQgNC4wNzctMy43NzUgNS4yMzUtMS41ODYuOS0zLjI5NiAxLjIwNS01LjExNi45MTFDMyAzMC4wMDcuMjYgMjYuOTkuMDE5IDIzLjU5M2MtLjI3My0zLjg0OCAyLjM3Mi03LjI2OCA1Ljg5OC04LjAzNmwuNzMyIDIuNjU4Yy0zLjIzNCAxLjY1LTQuMzUzIDMuNzMtMy40NDggNi4zMy43OTcgMi4yODcgMy4wNiAzLjU0MSA1LjUxOCAzLjA1NiAyLjUxLS40OTUgMy43NzYtMi41ODEgMy42MjEtNS45MjkgMi4zOCAwIDQuNzYxLS4wMjQgNy4xNC4wMTIuOTMuMDE1IDEuNjQ4LS4wODEgMi4zNDgtLjkgMS4xNTItMS4zNDkgMy4yNzMtMS4yMjcgNC41MTUuMDQ2IDEuMjY4IDEuMzAxIDEuMjA3IDMuMzk1LS4xMzUgNC42NDFhMy4yMzYgMy4yMzYgMCAwMS00LjU1My0uMTU3Yy0uMjQ5LS4yNjctLjQ0NS0uNTg1LS42OTItLjkxM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XZWJob29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV2luZG93cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV2luZG93cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQURFRlwiLFxuICAgIGQ6IFwiTTAgNC41MWwxMi45NzctMS43NjguMDA2IDEyLjUxOC0xMi45NzEuMDc0TDAgNC41MXptMTIuOTcgMTIuMTkybC4wMTEgMTIuNTI5LTEyLjk3LTEuNzg0LS4wMDItMTAuODI5IDEyLjk2Mi4wODR6bTEuNTc0LTE0LjE5TDMxLjc1MSAwdjE1LjFsLTE3LjIwNy4xMzdWMi41MTF6bTE3LjIxIDE0LjMwOGwtLjAwMyAxNS4wMzMtMTcuMjA3LTIuNDI5LS4wMjQtMTIuNjMyIDE3LjIzNS4wMjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XaW5kb3dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy41NTcgNS4wNWMuMTctLjIwMi40NTctLjUxMi44Ni0uOTNDMTkuNDgzIDMuMDE3IDIxLjgyOCAxIDIzLjgwMSAxSDMwdjMwaC02LjJjLTEuOTcyIDAtMy45OTUtMS40NDktNS4zODMtMy4xMDZsLS43NjQtMS4wNTIgMi43NS0zLjQ3N2MzLjQ2Mi00LjM3NiAzLjQ2My0xMC4zMzIuMDAxLTE0LjcwN0wxNy41NTcgNS4wNXpcIixcbiAgICBmaWxsOiBcIiNGRUM1MTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMzFWMWg1LjgxYzEuNzEgMCAzLjM1Ljc4NiA0LjM4NyAyLjFsNS44NTUgNy40MmMyLjU5OCAzLjI4MyAyLjU5OCA3LjY5OC0uMDAyIDEwLjk4M2wtNS44NTUgNy40MDNDMTEuMTU4IDMwLjIxNyA5LjUyIDMxIDcuODE1IDMxSDJ6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zODQgMjQuODlMMTIuMTUgMjEuN2MtMi44NjgtMy4zMTgtMi44NjgtOC4yMi4wMDItMTEuMzIyIDEuNTM1LTEuNjM5IDIuNjExLTIuNzE4IDMuMjMtMy4yMzhsMi42NyAzLjIzOGMyLjYzNyAzLjM4NSAyLjU3NSA3Ljk4Ny0uMDYyIDExLjM3NGwtMi42MDcgMy4xMzd6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaEZpbHRlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaEZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOTE0IDFjLTMuNiAwLTUuODk3IDEuMTExLTUuODk3IDEuODc2IDAgLjc2NiAyLjI5NyAxLjg3NyA1Ljg5NyAxLjg3N3M1Ljg5Ny0xLjExMSA1Ljg5Ny0xLjg3N0MxMy44MTEgMi4xMTEgMTEuNTE0IDEgNy45MTQgMW0zLjk4IDcuOTg4Yy0xLjE4Ny4zMzEtMi42MDEuNTAyLTMuOTguNTAyLTEuMzgzIDAtMi44MDEtLjE3Mi0zLjk5MS0uNTA1bDIuODYzIDMuMjQydjIuNTE1Yy4xMzYuMDguNTE1LjIxNCAxLjEyOC4yMTQuNjEgMCAuOTg5LS4xMzMgMS4xMjYtLjIxM3YtMi41MTVsMi44NTQtMy4yNHptMi4zOTQtMS4yMDZsLTQuMjQ4IDQuODIzdjIuMjQ2aC4wMDRjMCAuNzYzLTEuMDY5IDEuMTA1LTIuMTMgMS4xMDUtMS4wNiAwLTIuMTMtLjM0Mi0yLjEzLTEuMTA1aC4wMDJ2LTIuMjQ1TDEuMzIxIDcuNTVsLjAxLS4wMDhBMS41MyAxLjUzIDAgMDExIDYuNjA3VjIuNzhoLjAyQzEuMTQuOTczIDQuNjI3IDAgNy45MTMgMGMzLjI4NiAwIDYuNzc0Ljk3MyA2Ljg5NCAyLjc4aC4wMnYzLjgyN2MwIC4zNDMtLjEyLjY1Ny0uMzM1Ljk0MWwtLjAwMy4wMDRjLS4wNi4wNzktLjEyOC4xNTUtLjIwMi4yM3ptLS41NzgtLjg1NmEuNTYuNTYgMCAwMC4xMTgtLjMxOVY0LjQxMWMtMS4yODguODc5LTMuNjQ5IDEuMzQyLTUuOTE0IDEuMzQyQzUuNjUgNS43NTMgMy4yODggNS4yOSAyIDQuNDExdjIuMTk2QzIgNy4zNzUgNC4zMDQgOC40OSA3LjkxNCA4LjQ5YzIuODc5IDAgNC45MjctLjcwOSA1LjYzOS0xLjM4NWwuMTU3LS4xOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hGaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSWYgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJZihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTE4IDkuNzk5bC00LjgyIDQuODE5IDIuODgtLjQzLjE0OC45ODdMMCAxNS45NDNsLjc2OC01LjEyNi45ODguMTQ4LS40NTMgMy4wMzMgNC45MzYtNC45MzVhMi4wMDMgMi4wMDMgMCAwMTEuMjY1LTIuODg1VjBoMXY2LjE3OGEyLjAwMyAyLjAwMyAwIDAxMS4yNjMgMi44ODRsNC44NjUgNC44NjYtLjQ0My0yLjk2My45ODgtLjE0Ny43NjggNS4xMjYtNS4xMjctLjc2OS4xNS0uOTg4IDIuOTUuNDQxLTQuODMtNC44M2MtLjMxMi4yMDMtLjY4NS4zMi0xLjA4NS4zMi0uNCAwLS43NzMtLjExNy0xLjA4NS0uMzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSWY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJbnB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzQ3IDEwLjk5MmgxMy4xYS4xMjMuMTIzIDAgMDAuMTIyLS4xMjNWOC41MWEuMTIyLjEyMiAwIDAwLS4xMjItLjEyMkgxLjEyMkEuMTIyLjEyMiAwIDAwMSA4LjUxdjIuMzZjMCAuMDY2LjA1NS4xMjIuMTIyLjEyMmguNjI1em0xMi4wMTEgMUgyLjIxVjE2aC0xdi00LjAwOGgtLjA4OEExLjEyNCAxLjEyNCAwIDAxMCAxMC44N1Y4LjUxYzAtLjYyLjUwMy0xLjEyMiAxLjEyMi0xLjEyMmgxMy43MjVjLjYyIDAgMS4xMjIuNTAyIDEuMTIyIDEuMTIydjIuMzZjMCAuNjE4LS41MDMgMS4xMjItMS4xMjIgMS4xMjJoLS4wODlWMTZoLTF2LTQuMDA4em0tNi4yNy03LjQ4N1YwaDF2NC41MjlsMi40MDctMi4yNjIuNjg1LjczTDggNi4zNTYgNC40MiAyLjk5NWwuNjg1LS43MjkgMi4zODMgMi4yNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjIxIDQuMDA4SDEzLjc2VjBoMXY0LjAwOGguMDg4Yy42MTkgMCAxLjEyMi41MDQgMS4xMjIgMS4xMjNWNy40OWMwIC42Mi0uNTAzIDEuMTIyLTEuMTIyIDEuMTIySDEuMTIyQTEuMTIyIDEuMTIyIDAgMDEwIDcuNDlWNS4xM2MwLS42MTguNTAzLTEuMTIyIDEuMTIyLTEuMTIyaC4wODlWMGgxdjQuMDA4em0xMS41NDkgMUgxLjEyQS4xMjMuMTIzIDAgMDAxIDUuMTNWNy40OWMwIC4wNjguMDU1LjEyMi4xMjIuMTIyaDEzLjcyNWEuMTIyLjEyMiAwIDAwLjEyMi0uMTIyVjUuMTNhLjEyMy4xMjMgMCAwMC0uMTIyLS4xMjJoLTEuMDg4em0tNS4zMDEgOS4wOTdsMi40MDUtMi4yNi42ODYuNzI4LTMuNTggMy4zNjMtMy41OC0zLjM2My42ODYtLjcyOCAyLjM4MyAyLjI0VjkuNTc3aDF2NC41Mjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoT3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaFF1ZXVlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoUXVldWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4zMzkgMTUuNDY0SDQuNzdhMy4yNDggMy4yNDggMCAwMS0zLjI0NS0zLjI0NFY0LjU0OUgwdi0xaDIuNTI2djguNjdhMi4yNDcgMi4yNDcgMCAwMDIuMjQ1IDIuMjQ1aDYuNTY4YTIuMjQ3IDIuMjQ3IDAgMDAyLjI0NC0yLjI0NFYzLjU0OWgyLjQ1NXYxaC0xLjQ1NXY3LjY3YTMuMjQ3IDMuMjQ3IDAgMDEtMy4yNDQgMy4yNDV6bS41MTMtNS45NjJ2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjkuNTAybDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY1LjI1bDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlYxbDMuODUgMS43MkwxMS44NTIgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hRdWV1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWFnbmV0ID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25ldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTUyIDEwLjcxYTMuMDA4IDMuMDA4IDAgMDA0LjE5LjczOGwxLjY0Mi0xLjE1IDEuMTUgMS42NDItMS42NDMgMS4xNWE1LjAxMyA1LjAxMyAwIDExLTUuNzUtOC4yMTJsMS42NDItMS4xNSAxLjE1IDEuNjQzLTEuNjQyIDEuMTVhMy4wMDcgMy4wMDcgMCAwMC0uNzM5IDQuMTg5em04LjI5Ni0yLjEzN2wxLjE1IDEuNjQzLTEuNjQzIDEuMTQ5LTEuMTUtMS42NDIgMS42NDMtMS4xNXptLTQuNi02LjU3MWwxLjE1IDEuNjQzLTEuNjQzIDEuMTUtMS4xNS0xLjY0MiAxLjY0Mi0xLjE1MXptMS45NyAxLjA2OEw5LjA3IDEuNDI4YTEuMDAzIDEuMDAzIDAgMDAtMS4zOTctLjI0NkwzLjU2NiA0LjA1N0E1Ljk5NSA1Ljk5NSAwIDAwMS4wOTIgNy45NGE1Ljk5MyA1Ljk5MyAwIDAwLjk5NiA0LjQ5NSA1Ljk5IDUuOTkgMCAwMDMuODgzIDIuNDczIDUuOTkxIDUuOTkxIDAgMDA0LjQ5NS0uOTk2bDQuMTA3LTIuODc1Yy40NTQtLjMxOC41NjMtLjk0My4yNDYtMS4zOTZsLTEuMTUtMS42NDNhMS4wMDIgMS4wMDIgMCAwMC0xLjM5Ni0uMjQ2bC00LjEwNyAyLjg3NWEyLjAwMiAyLjAwMiAwIDAxLTEuNDk4LjMzMiAyIDIgMCAwMS0xLjYyNy0yLjMyM2MuMDktLjUwNS4zNzEtLjk3Ni44MjQtMS4yOTRsNC4xMDctMi44NzZjLjQ1NC0uMzE3LjU2NC0uOTQyLjI0Ni0xLjM5NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4xNDMgMTUuODVsLTMuODcyLTMuODcyYS41LjUgMCAwMS0uMDM0LS43MzggNi4wMSA2LjAxIDAgMDAwLTguNDg2IDYuMDA0IDYuMDA0IDAgMDAtOC40ODQgMCA2LjAxIDYuMDEgMCAwMDAgOC40ODYgNS45NiA1Ljk2IDAgMDA0LjI0MiAxLjc1Ny41LjUgMCAwMTAgMSA2Ljk1NSA2Ljk1NSAwIDAxLTQuOTQ5LTIuMDVjLTIuNzI4LTIuNzMtMi43MjgtNy4xNzEgMC05LjkgMi43MjgtMi43MyA3LjE2OC0yLjczIDkuODk4IDAgMi42MDkgMi42MSAyLjcyMyA2Ljc4NS4zNDIgOS41MzJsMy41NjUgMy41NjRhLjUwMi41MDIgMCAwMS0uNzA4LjcwOHpNNi4yNTQgM2wuMjc3IDUuMDYzaC45MzVMNy43NTQgM2gtMS41em0uMjIyIDcuNTQ4YS43MjcuNzI3IDAgMDAuNTMzLjIyMi43MTcuNzE3IDAgMDAuNTItLjIyLjcxNS43MTUgMCAwMC4yMjUtLjUzLjcxNi43MTYgMCAwMC0uMjIyLS41MzQuNzI0LjcyNCAwIDAwLS41MjMtLjIxNi43MzEuNzMxIDAgMDAtLjUzMy4yMTkuNzE5LjcxOSAwIDAwLS4yMjIuNTNjMCAuMjA1LjA3NC4zOC4yMjIuNTI5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aE1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgNmEuNS41IDAgMDEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS43NCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwMDEyIDYuNSA1LjUgNS41IDAgMTA2LjUgMTJhLjUuNSAwIDExMCAxIDYuNSA2LjUgMCAxMTQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAxLS4xNC0uMzQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aE1pbnVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aFBsdXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhQbHVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA2aDIuNWEuNS41IDAgMDEwIDFIN3YyLjVhLjUuNSAwIDAxLTEgMFY3SDMuNWEuNS41IDAgMDEwLTFINlYzLjVhLjUuNSAwIDAxMSAwVjZ6bTMuMjQgNC43NGMwLS4xMTcuMDQtLjIyNS4xMDctLjMxQTUuNDc4IDUuNDc4IDAgMDAxMiA2LjUgNS41IDUuNSAwIDEwNi41IDEyYS41LjUgMCAxMTAgMSA2LjUgNi41IDAgMTE0LjkzNi0yLjI3bDQuNDE5IDQuNDE4YS41LjUgMCAwMS0uNzA3LjcwN2wtNC43NjgtNC43NjhhLjQ5OS40OTkgMCAwMS0uMTQtLjM0N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhQbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYXBNYXJrZXIgPSBmdW5jdGlvbiBFdWlJY29uTWFwTWFya2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NSAxNC4yMjRhLjUwMi41MDIgMCAwMC44OTcgMGw0LThhLjUuNSAwIDAwLjA1My0uMjM1IDQuNjcyIDQuNjcyIDAgMDAtLjA4NC0uNzA1IDUuNTM4IDUuNTM4IDAgMDAtLjUwNS0xLjUxMkMxMS4xODkgMi4zNjIgOS45MDYgMS41IDggMS41Yy0xLjkwNiAwLTMuMTkuODYyLTMuOTEgMi4yNzItLjI0OC40ODUtLjQxLjk5OC0uNTA2IDEuNTEyLS4wNTguMzEtLjA4LjU1NC0uMDg0LjcwNWEuNS41IDAgMDAuMDUzLjIzNWwzLjk5NyA4ek04IDVhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bS0zLjQ5My44OTVjLjAwOS0uMTA2LjAyNy0uMjUzLjA2LS40MjkuMDc5LS40MjQuMjEzLS44NDguNDEzLTEuMjM4QzUuNTM3IDMuMTM4IDYuNDg3IDIuNSA4IDIuNWMxLjUxMyAwIDIuNDYzLjYzOCAzLjAyIDEuNzI4LjIuMzkuMzM0LjgxNC40MTMgMS4yMzguMDMzLjE3Ni4wNTEuMzIzLjA2LjQzTDggMTIuODgxIDQuNTA3IDUuODk1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYXBNYXJrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbW9yeSA9IGZ1bmN0aW9uIEV1aUljb25NZW1vcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEwaDJWNkg3ek0zIDEwaDJWNkgzek0xMS4wMjUgMTBoMlY2aC0yek0zLjUgMTMuNzVoMXYtMi40aC0xek02LjE3NSAxMy43NWgxLjAwMXYtMi40SDYuMTc1ek04Ljg1IDEzLjc1aDF2LTIuNGgtMXpNMTEuNTI1IDEzLjc1aDF2LTIuNGgtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgM3Y3LjA1aDF2My42OThoMXYtMy42OTloMTJ2My42OTloMXYtMy42OTloMVYzSDB6bTEgNmgxNFY0SDF2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVtb3J5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDJoMTZ2MkgwVjJ6bTAgNWgxNnYySDBWN3ptMTYgNUgwdjJoMTZ2LTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVEb3duID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDcuNXpNMy41MSA0YS41MTMuNTEzIDAgMDEtLjUwMi0uNDEyTDMgMy41YzAtLjI3Ni4yMjgtLjUuNTEtLjVoOC45OGMuMjUgMCAuNDU5LjE4My41MDIuNDEyTDEzIDMuNWMwIC4yNzYtLjIyOC41LS41MS41SDguNDkzdjcuNzkybDIuMDYtMi4wNmEuNS41IDAgMTEuNzA3LjcwN0w5LjE0IDEyLjU2QTEuNDk2IDEuNDk2IDAgMDE4LjAyNiAxM0w3Ljk5MyAxM2EuNTAxLjUwMSAwIDAxLS4xMTgtLjAxNCAxLjQ5MyAxLjQ5MyAwIDAxLS44NTctLjQyNmwtMi4xMjItMi4xMmEuNS41IDAgMDEuNzA4LS43MDhsMS44ODkgMS44OVY0SDMuNTF6TTEzIDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwxMCA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkwxMyA3LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25NZW51TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE0IDcuMzgyYS41MDEuNTAxIDAgMDAtLjAxMy4xNTJjLS4wMTQuNC4xMzMuODA2LjQzOSAxLjExMmwyLjEyIDIuMTIyYS41LjUgMCAxMC43MDgtLjcwOEwyLjIwOCA4SDE0LjVhLjUuNSAwIDAwMC0xSDIuMzc5bDEuODg5LTEuODlhLjUuNSAwIDAwLS43MDctLjcwNkwxLjQ0IDYuNTI0Yy0uMjQxLjI0Mi0uMzgzLjU0NC0uNDI2Ljg1OHpNMTQuNSAzaC03YS41LjUgMCAwMDAgMWg3YS41LjUgMCAwMDAtMXptMCA4aC03YS41LjUgMCAxMDAgMWg3YS41LjUgMCAxMDAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25NZW51UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC45ODYgNy4zODJhLjUwMS41MDEgMCAwMS4wMTMuMTUyYy4wMTQuNC0uMTMzLjgwNi0uNDM5IDEuMTEybC0yLjEyIDIuMTIyYS41LjUgMCAxMS0uNzA4LS43MDhMMTMuNzkyIDhIMS41YS41LjUgMCAwMTAtMWgxMi4xMjFsLTEuODg5LTEuODlhLjUuNSAwIDAxLjcwNy0uNzA2bDIuMTIxIDIuMTJjLjI0MS4yNDIuMzgzLjU0NC40MjYuODU4ek0xLjUgM2g3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEwLTF6bTAgOGg3YS41LjUgMCAxMTAgMWgtN2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudVVwID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjAxIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMDEtLjQ4Ny0uNDEyTDEwLjAxIDguNXpNMTIuNSAxMmMuMjUgMCAuNDU5LjE4My41MDIuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjI4LjUtLjUxLjVIMy41MmEuNTEzLjUxMyAwIDAxLS41MDItLjQxMkwzLjAxIDEyLjVjMC0uMjc2LjIyOC0uNS41MS0uNWgzLjk4N1Y0LjIwOGwtMi4wNiAyLjA2YS41LjUgMCAxMS0uNzA3LS43MDdMNi44NiAzLjQ0QTEuNDk2IDEuNDk2IDAgMDE3Ljk3NCAzTDguMDA3IDNjLjA0IDAgLjA4LjAwNS4xMTguMDE0LjMxNC4wNDMuNjE2LjE4NS44NTcuNDI2bDIuMTIyIDIuMTJhLjUuNSAwIDAxLS43MDguNzA4bC0xLjg4OS0xLjg5VjEySDEyLjV6TTMgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA4LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA4LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVyZ2UgPSBmdW5jdGlvbiBFdWlJY29uTWVyZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjM1MiA2SDIuNWEuNS41IDAgMDEwLTFoNC44NTJMNS4xMiAyLjcyMWMtLjE4LS4xODMtLjE1NS0uNDYuMDU1LS42MTZhLjU1MS41NTEgMCAwMS43MDUuMDQ4bDMgMy4wNjJjLjE2LjE2NC4xNi40MDUgMCAuNTdsLTMgMy4wNjJBLjUzMi41MzIgMCAwMTUuNSA5YS41NC41NCAwIDAxLS4zMjUtLjEwNmMtLjIxLS4xNTctLjIzNS0uNDMzLS4wNTUtLjYxNkw3LjM1MiA2em0xLjI5NiA0SDEzLjVhLjUuNSAwIDAxMCAxSDguNjQ4bDIuMjMyIDIuMjc4Yy4xOC4xODMuMTU1LjQ2LS4wNTUuNjE3QS41NC41NCAwIDAxMTAuNSAxNGEuNTMyLjUzMiAwIDAxLS4zOC0uMTUzbC0zLTMuMDYzYS4zOTcuMzk3IDAgMDEwLS41NjhsMy0zLjA2M2EuNTUxLjU1MSAwIDAxLjcwNS0uMDQ3Yy4yMS4xNTYuMjM1LjQzMy4wNTUuNjE2TDguNjQ4IDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZXJnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWluaW1pemUgPSBmdW5jdGlvbiBFdWlJY29uTWluaW1pemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjE0NiAxNC4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6TTYuNSA4QTEuNSAxLjUgMCAwMTggOS41djNhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDAxMC0xaDN6bTItNWEuNS41IDAgMDEuNS41djNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDE4IDYuNXYtM2EuNS41IDAgMDEuNS0uNXptMS42NTEgMi4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbmltaXplOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NaW51cyA9IGZ1bmN0aW9uIEV1aUljb25NaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEuNSxcbiAgICB4OiAzLFxuICAgIHk6IDcuMjUsXG4gICAgcng6IDAuNVxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyek0zLjUgN2g4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0tNCA3YS41LjUgMCAwMDAgMWg4YS41LjUgMCAxMDAtMWgtOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxNnY1aDIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMDAgMkg3djVINXYtNUgwdi0yaDV2LTVoMnpNNyAwdjVoNXYySDd2NUg1VjdIMFY1aDVWMGgyem0xNiAwdjVoNXYyaC01djIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMC0yIDBWN2gtNVY1aDVWMGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAxMGMzLjA3MyAwIDUuODc3IDEuMTU1IDggMy4wNTZ2My4yNTJBOS44MiA5LjgyIDAgMTAxNi4zMDcgMzBoLTMuMjUxQTExLjk1NSAxMS45NTUgMCAwMTEwIDIyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6bTEgOHYzaDN2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZoLTJjMC03LjczMi02LjI2OC0xNC0xNC0xNFMyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTR2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjcgMjB2MTJoLTJWMjBoMnptLTUgNHY4aC0ydi04aDJ6bTEwLTJ2MTBoLTJWMjJoMnpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHpNNCAyNmEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6TTQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAyYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek00IDJhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNzggMjkuMDVjLjEwMi42NzcuMyAxLjMyMi41ODIgMS45MkExNS45NjMgMTUuOTYzIDAgMDExNiAzMmMtMS45OTMgMC0zLjktLjM2NC01LjY2LTEuMDMuMjgxLS41OTguNDgtMS4yNDMuNTgyLTEuOTIgMS41NzQuNjE0IDMuMjg3Ljk1IDUuMDc4Ljk1IDEuNzkxIDAgMy41MDQtLjMzNiA1LjA3OC0uOTV6bTkuODkyLTE4LjcxQTE1Ljk2MyAxNS45NjMgMCAwMTMyIDE2YzAgMS45OTMtLjM2NCAzLjktMS4wMyA1LjY2YTYuOTQ4IDYuOTQ4IDAgMDAtMS45Mi0uNTgyYy42MTQtMS41NzQuOTUtMy4yODcuOTUtNS4wNzggMC0xLjc5MS0uMzM2LTMuNTA0LS45NS01LjA3OGE2Ljk0OCA2Ljk0OCAwIDAwMS45Mi0uNTgyem0tMjkuOTQgMGMuNTk4LjI4MSAxLjI0My40OCAxLjkyLjU4MkExMy45NjUgMTMuOTY1IDAgMDAyIDE2YzAgMS43OTEuMzM2IDMuNTA0Ljk1IDUuMDc4LS42NzcuMTAyLTEuMzIyLjMtMS45Mi41ODJBMTUuOTY0IDE1Ljk2NCAwIDAxMCAxNmMwLTEuOTkzLjM2NC0zLjkgMS4wMy01LjY2ek0xNiAwYzEuOTkzIDAgMy45LjM2NCA1LjY2IDEuMDNhNi45NDggNi45NDggMCAwMC0uNTgyIDEuOTJBMTMuOTY1IDEzLjk2NSAwIDAwMTYgMmMtMS43OTEgMC0zLjUwNC4zMzYtNS4wNzguOTVhNi45NDggNi45NDggMCAwMC0uNTgyLTEuOTJBMTUuOTY0IDE1Ljk2NCAwIDAxMTYgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBjNS41MjMgMCAxMCA0LjQ3NyAxMCAxMHMtNC40NzcgMTAtMTAgMTBTNiAxNS41MjMgNiAxMCAxMC40NzcgMCAxNiAwem0wIDJhOCA4IDAgMTAwIDE2IDggOCAwIDAwMC0xNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOC40IDE5LjI4OGMuNDkyLjQwMiAxLjAxNS43NjYgMS41NjYgMS4wODdMNy4yNiAyMy42ODJhNCA0IDAgMTEtMS40MzctMS4yNDNsMi41NzgtMy4xNTF6bTE1LjIgMGwyLjU3NyAzLjE1YTQgNCAwIDExLTEuNDM3IDEuMjQzbC0yLjcwNi0zLjMwNmExMi4wMzIgMTIuMDMyIDAgMDAxLjU2NS0xLjA4N3pNNCAyNGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgNnYzaDN2MmgtM3YzaC0ydi0zaC0zVjloM1Y2aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMyAxNWgtNlY5aC0ydjZIOXYyaDZ2Nmgydi02aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbERhdGFWaXN1YWxpemVyID0gZnVuY3Rpb24gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIwdjEwaDEwdjJIMFYyMGgyem0zMCAwdjEySDIwdi0yaDEwVjIwaDJ6TTEyIDRhOCA4IDAgMTEwIDE2IDggOCAwIDAxMC0xNnptMCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6bTAtNnYySDJ2MTBIMFYwaDEyem0yMCAwdjEyaC0yVjJIMjBWMGgxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEuOTk3IDEyLjI1MWMtLjAxNy42ODktLjEwNCAxLjM2LS4yNTMgMi4wMDZhNiA2IDAgMTEtNy40ODcgNy40ODdjLS42NDYuMTUtMS4zMTcuMjM2LTIuMDA2LjI1M2E4IDggMCAxMDkuNzQ2LTkuNzQ2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbERhdGFWaXN1YWxpemVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMnY2aDZ2Mkgwdi04aDJ6bTE4IDB2OGgtOHYtMmg2di02aDJ6TTggMHYySDJ2NkgwVjBoOHptMTIgMHY4aC0yVjJoLTZWMGg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMTIgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptLTEyIDEuNzVhMi4yNSAyLjI1IDAgMTAwIDQuNSAyLjI1IDIuMjUgMCAwMDAtNC41em0xMiAwYTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpNMjggMTJhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6TTEwIDZhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxSZWdyZXNzaW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sUmVncmVzc2lvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDBhOCA4IDAgMTEtNC45MDYgMTQuMzJsLTQuNzc0IDQuNzc0YTggOCAwIDExLTEuNDE0LTEuNDE0bDQuNzc0LTQuNzc0QTggOCAwIDAxMjQgMHpNOCAxOGE2IDYgMCAxMDAgMTIgNiA2IDAgMDAwLTEyek0yNCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMyIDIwdjEySDIwVjIwaDEyem0tMiAyaC04djhoOHYtOHpNMTIgMHYxMkgwVjBoMTJ6bS0yIDJIMnY4aDhWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxSZWdyZXNzaW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Nb2JpbGUgPSBmdW5jdGlvbiBFdWlJY29uTW9iaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyLjVhLjUuNSAwIDAxLjUtLjVoM2EuNS41IDAgMDEwIDFoLTNhLjUuNSAwIDAxLS41LS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgMEExLjUgMS41IDAgMDAzIDEuNXYxM0ExLjUgMS41IDAgMDA0LjUgMTZoN2ExLjUgMS41IDAgMDAxLjUtMS41di0xM0ExLjUgMS41IDAgMDAxMS41IDBoLTd6TTQgMS41YS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxLjUuNVY0SDRWMS41ek00IDEzdjEuNWEuNS41IDAgMDAuNS41aDdhLjUuNSAwIDAwLjUtLjVWMTNINHptMC0xaDhWNUg0djd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vYmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTW9vbiA9IGZ1bmN0aW9uIEV1aUljb25Nb29uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43OTYgOS4wNDhjLTEuNTUyLTIuMjM4LTEuMTk5LTUuMzIzLjYxLTguMS0zLjQ3LS4xMi02LjYgMi4yMzItNy4yNjkgNS42NzItLjc0MiAzLjgyIDEuODMgNy41MzMgNS43NDkgOC4yOTRhNy4yMjYgNy4yMjYgMCAwMDcuNTI2LTMuMjE4Yy0yLjc5NC4xNzctNS4yNy0uNzExLTYuNjE2LTIuNjQ4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb29uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uTmFtZXNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDFoMTR2MTRIMVYxem0xMyAxMnYxSDJWMmgxMnYxMXpNNiA2aDR2NEg2VjZ6bS0xIDVWNWg2djZINXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDFhLjUuNSAwIDAxMCAxSDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRINS41YS41LjUgMCAxMTAgMUgzLjAwNkEyLjAwNSAyLjAwNSAwIDAxMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINS41em03LjQ5NCAwYzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXY5Ljk4OGEyLjAwNSAyLjAwNSAwIDAxLTEuODU2IDJsLS4xNS4wMDZIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxNGgyLjQ5NGMuNTE2IDAgLjk0MS0uMzg4IDEtLjg4OGwuMDA2LS4xMThWMy4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTIuOTk0IDJIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxaDIuNDk0ek01IDdhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6bTMgMGExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptMyAwYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5vZGUgPSBmdW5jdGlvbiBFdWlJY29uTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxLjQ0M2ExIDEgMCAwMC0xIDBMMi41NzIgNC4yOWExIDEgMCAwMC0uNS44NjZ2NS42OWExIDEgMCAwMC41Ljg2Nkw3LjUgMTQuNTU3YTEgMSAwIDAwMSAwbDQuOTI4LTIuODQ2YTEgMSAwIDAwLjUtLjg2NnYtNS42OWExIDEgMCAwMC0uNS0uODY2TDguNSAxLjQ0M3pNOSAuNTc3bDQuOTI4IDIuODQ2YTIgMiAwIDAxMSAxLjczMnY1LjY5YTIgMiAwIDAxLTEgMS43MzJMOSAxNS40MjNhMiAyIDAgMDEtMiAwbC00LjkyOC0yLjg0NmEyIDIgMCAwMS0xLTEuNzMydi01LjY5YTIgMiAwIDAxMS0xLjczMkw3IC41NzdhMiAyIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjgwOCAxMC4xOTdINi43OTZMNS44NTkgMTNINC40ODVsLjkzNy0yLjgwM0gzLjk2NmwuMjE5LTEuMjVoMS42NDdsLjYwOC0xLjgwNUg0Ljk5MWwuMjI2LTEuMjUxaDEuNjRsLjk1LTIuODQ0aDEuMzY4bC0uOTUgMi44NDRoMS4wMThsLjk1LTIuODQ0aDEuMzc0bC0uOTUgMi44NDRoMS41MWwtLjIxOCAxLjI1aC0xLjcwMmwtLjYwOCAxLjgwNWgxLjQ5N2wtLjIxOSAxLjI1MUg5LjE4Mkw4LjI1MiAxM0g2Ljg3OGwuOTMtMi44MDN6bS0uNjAyLTEuMjVoMS4wMTJsLjYxNS0xLjgwNUg3LjgxNGwtLjYwOCAxLjgwNHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uT2ZmbGluZSA9IGZ1bmN0aW9uIEV1aUljb25PZmZsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MTcgMTIuMjcxbDEuMjU0LTEuMjU0YTEuNSAxLjUgMCAxMS0xLjI1NCAxLjI1NHptMi45NDUtMi45NDRsLjc0LS43NGMuMzYxLjIwOC42OTQuNDY3Ljk4Ny43NzJhLjUuNSAwIDAxLS43MjEuNjkzIDMuNDI0IDMuNDI0IDAgMDAtMS4wMDYtLjcyNXptMi4xNjItMi4xNjNsLjcxNi0uNzE1Yy4zMDguMjMyLjU5OS40OS44Ny43NzJhLjUuNSAwIDExLS43MjIuNjkyIDYuMjYgNi4yNiAwIDAwLS44NjQtLjc0OXpNNy4wNjEgNi4wN0E2LjE5OCA2LjE5OCAwIDAwMy41NCA3Ljg4NWEuNS41IDAgMDEtLjcxNy0uNjk3IDcuMTk5IDcuMTk5IDAgMDE1LjMwOS0yLjE4N2wtMS4wNyAxLjA3em02LjY3Mi0xLjAxNGwuNzEtLjcxYy4yNzQuMjMuNTM2LjQ3Ni43ODYuNzM2YS41LjUgMCAwMS0uNzIxLjY5MiA5LjEgOS4xIDAgMDAtLjc3NS0uNzE4em0tMy44MDctMS44NUE5LjA2IDkuMDYgMCAwMDggM2E4Ljk5IDguOTkgMCAwMC02LjQ2OSAyLjczNC41LjUgMCAxMS0uNzE3LS42OTdBOS45OSA5Ljk5IDAgMDE4IDJjLjk0NCAwIDEuODY4LjEzMSAyLjc1LjM4MmwtLjgyNC44MjR6TTggMTNhLjUuNSAwIDEwMC0xIC41LjUgMCAwMDAgMXptLTUuNDI0IDFhLjUuNSAwIDAxLS43MDctLjcwN0wxNC4xNDYgMS4xNDZhLjUuNSAwIDAxLjcwOC43MDhMMi41NzYgMTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9mZmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk9ubGluZSA9IGZ1bmN0aW9uIEV1aUljb25PbmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6bTAtMWEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0zLjE4OS0zLjY0YS41LjUgMCAwMS0uNzIxLjY5MkEzLjQwOCAzLjQwOCAwIDAwOCA5Yy0uOTM3IDAtMS44MTMuMzc4LTIuNDUzIDEuMDM3YS41LjUgMCAwMS0uNzE3LS42OTdBNC40MDggNC40MDggMCAwMTggOGMxLjIyIDAgMi4zNjEuNDk3IDMuMTg5IDEuMzZ6bTIuMDItMi4xNGEuNS41IDAgMTEtLjcyMS42OTNBNi4yIDYuMiAwIDAwOCA2YTYuMTk5IDYuMTk5IDAgMDAtNC40NiAxLjg4NS41LjUgMCAwMS0uNzE4LS42OTdBNy4xOTkgNy4xOTkgMCAwMTggNWE3LjIgNy4yIDAgMDE1LjIxIDIuMjJ6bTIuMDItMi4xMzhhLjUuNSAwIDAxLS43MjEuNjkyQTguOTkgOC45OSAwIDAwOCAzYTguOTkgOC45OSAwIDAwLTYuNDY5IDIuNzM0LjUuNSAwIDExLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwMTggMmE5Ljk5IDkuOTkgMCAwMTcuMjMgMy4wODJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9ubGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNDQ3IDMuNzI0bC02LTNhMSAxIDAgMDAtLjg5NCAwbC02IDNBMSAxIDAgMDAxIDQuNjE4djYuNzY0YTEgMSAwIDAwLjU1My44OTRsNiAzYTEgMSAwIDAwLjg5NCAwbDYtM2ExIDEgMCAwMC41NTMtLjg5NFY0LjYxOGExIDEgMCAwMC0uNTUzLS44OTR6TTUuODcxIDUuODk3bDUuMzQzLTIuNjcyIDIuMTU4IDEuMDc5TDggNi45NDN6TTggMS42MThsMi4wOTYgMS4wNDgtNS4zNTMgMi42NzctMi4xMTUtMS4wMzl6TTIgNS4xMWwyLjI1IDEuMTA1VjlhLjUuNSAwIDAwMSAwVjYuNzA2TDcuNSA3LjgxMXY2LjMyMUwyIDExLjM4MnptNi41IDkuMDIydi02LjMyTDE0IDUuMTF2Ni4yNzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhZ2VTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZVNlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDVhNC45OTUgNC45OTUgMCAwMS0uNTg0LTFIM1YyaDd2MmExIDEgMCAwMDEgMWgydjIuMWMuMzQ4LjA3LjY4Mi4xNzcgMSAuMzE2VjRhMSAxIDAgMDAtLjI5My0uNzA3bC0yLTJBMSAxIDAgMDAxMSAxSDN6bTEzIDExYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZVNlbGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFnZXNTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZXNTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAxMS0xaDhhMSAxIDAgMDEuNzA3LjI5M2wyIDJBMSAxIDAgMDExNSAzdjVhNC45OTUgNC45OTUgMCAwMC0xLS41ODRWNGgtMmExIDEgMCAwMS0xLTFWMUg0djEyaDMuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFINGExIDEgMCAwMS0xLTFWMXptNSAxNEgyVjJhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDdhNS4wMjkgNS4wMjkgMCAwMS0xLTF6bTgtM2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VzU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWludCA9IGZ1bmN0aW9uIEV1aUljb25QYWludChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5MyA4LjE3YzAgLjgzLS42NzMgMS41MDctMS40OTkgMS41MDdINS40OThBMS41MDUgMS41MDUgMCAwMTMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN3ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2ek00IDUuNjU4aDEuMjYyVjEuMDA1SDR2NC42NTN6bTIuMjYxIDBoMS4yNDRWMS4wMDVINi4yNnY0LjY1M3ptMi4yNDQgMGgxLjIzNVYxLjAwNUg4LjUwNHY0LjY1M3ptMi4yMzQgMGgxLjI1NFYxLjAwNWgtMS4yNTR2NC42NTN6TTMuMDA4IDBMMyA4LjE3YTIuNTA5IDIuNTA5IDAgMDAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwMDIuNDk4LTIuNTEyTDEzIDBIMy4wMDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXBlckNsaXAgPSBmdW5jdGlvbiBFdWlJY29uUGFwZXJDbGlwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NCAyLjAxOUwzLjA0NiA4LjU3Yy0uOTg3Ljk1Mi0xLjEzMyAyLjUxNy0uMTk5IDMuNTE2Ljk1MSAxLjAyMSAyLjU4IDEuMTA2IDMuNjQuMTkuMDM0LS4wMy4wNjgtLjA2MS4xLS4wOTJsNS42NTUtNS40NTJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MjkgMEw1LjkyIDExLjQyMWMtLjU3Mi41NTEtMS41MDUuNjU3LTIuMTMxLjE2M2ExLjQ1NSAxLjQ1NSAwIDAxLS4xMTgtMi4yMTFsNi44OTktNi42NTFhMi42NDYgMi42NDYgMCAwMTMuNjQ0IDAgMi40MjIgMi40MjIgMCAwMTAgMy41MTNMNy4zIDEyLjkwMWMtMS4zMzMgMS4yODUtMy40OTcgMS40OTMtNC45NS4zMzYtMS41NC0xLjIyLTEuNzY0LTMuNDExLS41LTQuODk3YTMuMzMgMy4zMyAwIDAxLjIzOC0uMjUybDUuNzgtNS41NzJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MyAwbC01Ljc4IDUuNTcyYTQuMzYgNC4zNiAwIDAwMCA2LjMyNGMyLjE4OCAyLjEwOSA1LjIwMiAxLjMxIDYuNjYtLjA5NWw2LjkyNS02LjY3NmEzLjM5IDMuMzkgMCAwMDAtNC45MkMxMy41MzQuNjYgMTEuMjUuNjYgOS44NDEgMi4wMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcGVyQ2xpcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFydGlhbCA9IGZ1bmN0aW9uIEV1aUljb25QYXJ0aWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi42NjQgMTQuODcxYTcgNyAwIDAxLTIuNDItMTIuNzc4LjUuNSAwIDAxLjYxMi4wNmMuNDU2LjQzMSA4LjIxNiA4LjIxMiA4Ljk4IDkuMDAyYS41LjUgMCAwMS4wNjMuNjE4IDcuMDAyIDcuMDAyIDAgMDEtNy4yMzUgMy4wOTh6bTYuMTY4LTMuMzEyYTE5NjEuNzMzIDE5NjEuNzMzIDAgMDAtOC4zNzctOC40IDYgNiAwIDEwOC4zNzggOC40em0yLjA5NS0yLjU0OGEuNS41IDAgMTEtLjk5LS4xNDRjLjAxLS4wNjYuMDEtLjA2Ni4wMTgtLjEzM2E2LjAwNyA2LjAwNyAwIDAwLS4wMzQtMS43MTQuNS41IDAgMTEuOTg3LS4xNjNjLjEwOC42NTUuMTIyIDEuMzI2LjA0IDEuOTk5bC0uMDIxLjE1NXptLTEuMjczLTUuMTM4YS41LjUgMCAxMS0uODA4LjU5IDYuMDI2IDYuMDI2IDAgMDAtMS4zMDQtMS4zMDguNS41IDAgMDEuNTktLjgwNiA3LjAyNiA3LjAyNiAwIDAxMS41MjIgMS41MjR6TTkuMTY5IDEuMDk4YS41LjUgMCAxMS0uMTY2Ljk4NiA2LjEwNSA2LjEwNSAwIDAwLTEuODQ5LS4wMjYuNS41IDAgMDEtLjE0LS45OSA3LjAyIDcuMDIgMCAwMTIuMTU1LjAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXJ0aWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXVzZSA9IGZ1bmN0aW9uIEV1aUljb25QYXVzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTYgMGExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhdXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXltZW50ID0gZnVuY3Rpb24gRXVpSWNvblBheW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNTg2IDIuNTg2QTIgMiAwIDAwMCA0aDFhMSAxIDAgMDExLTFWMmEyIDIgMCAwMC0xLjQxNC41ODZ6TTIgMmgxMC41YS41LjUgMCAwMTAgMUgyVjJ6TTAgNGgxdjYuNWEuNS41IDAgMDEtMSAwVjR6bTIuNTg2LjU4NkEyIDIgMCAwMDIgNmgxYTEgMSAwIDAxMS0xVjRhMiAyIDAgMDAtMS40MTQuNTg2em0wIDguODI4QTIgMiAwIDAxMiAxMmgxYTEgMSAwIDAwMSAxdjFhMiAyIDAgMDEtMS40MTQtLjU4NnptMTIuODI4LTguODI4QTIgMiAwIDAxMTYgNmgtMWExIDEgMCAwMC0xLTFWNGEyIDIgMCAwMTEuNDE0LjU4NnptMCA4LjgyOEEyIDIgMCAwMDE2IDEyaC0xYTEgMSAwIDAxLTEgMXYxYTIgMiAwIDAwMS40MTQtLjU4NnpNNCA0aDEwdjFINHpNMyA3aDEydjFIM3ptMSA2aDEwdjFINHpNMiA2aDF2Nkgyem0xMyAwaDF2NmgtMXptLTUuNSA0YS41LjUgMCAwMTAgMUg3LjQ5NmEuNS41IDAgMDEwLTFIOS41em00IDBhLjUuNSAwIDAxMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF5bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGVuY2lsID0gZnVuY3Rpb24gRXVpSWNvblBlbmNpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0OCAzLjE0OEwxMSAybC05IDl2M2gzbDktOS0xLjE0NC0xLjE0NC04LjAwMiA3Ljk5OGEuNTAyLjUwMiAwIDAxLS43MDggMCAuNTAyLjUwMiAwIDAxMC0uNzA4bDguMDAyLTcuOTk4ek0xMSAxYy4yNTYgMCAuNTEyLjA5OC43MDcuMjkzbDMgM2EuOTk5Ljk5OSAwIDAxMCAxLjQxNGwtOSA5QS45OTcuOTk3IDAgMDE1IDE1SDJhMSAxIDAgMDEtMS0xdi0zYzAtLjI2NS4xMDUtLjUyLjI5My0uNzA3bDktOUEuOTk3Ljk5NyAwIDAxMTEgMXpNNSAxNEgydi0zbDMgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVuY2lsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QZXJjZW50ID0gZnVuY3Rpb24gRXVpSWNvblBlcmNlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSA4YzEuMTA1IDAgMi0xLjEyIDItMi41UzYuMTA1IDMgNSAzIDMgNC4xMiAzIDUuNSAzLjg5NSA4IDUgOHptMC0xYy4zNTYgMCAxLS40NTIgMS0xLjVTNS4zNTYgNCA1IDRzLTEgLjQ1Mi0xIDEuNVM0LjY0NCA3IDUgN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgM0gxMkw1LjUgMTNINGw2LjUtMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTAuNWMwIDEuMzgtLjg5NSAyLjUtMiAyLjVzLTItMS4xMi0yLTIuNVM5Ljg5NSA4IDExIDhzMiAxLjEyIDIgMi41em0tMSAwYzAgMS4wNDgtLjY0NCAxLjUtMSAxLjVzLTEtLjQ1Mi0xLTEuNS42NDQtMS41IDEtMS41IDEgLjQ1MiAxIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVyY2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGluID0gZnVuY3Rpb24gRXVpSWNvblBpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDExaDQuNWEuNS41IDAgMTAwLTFoLTEwYS41LjUgMCAwMDAgMUg3djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTF6TTQgNGgxdjZINFY0em02IDBoMXY2aC0xVjR6TTQuMjg2IDJDNC4wOCAyIDQgMi4wNjMgNCAydjFjMC0uMDYzLjA4IDAgLjI4NiAwaDYuNDI4QzEwLjkyIDMgMTEgMi45MzcgMTEgM1YyYzAgLjA2My0uMDggMC0uMjg2IDBINC4yODZ6bTAtMWg2LjQyOEMxMS40MjQgMSAxMiAxLjQ0OCAxMiAydjFjMCAuNTUyLS41NzYgMS0xLjI4NiAxSDQuMjg2QzMuNTc2IDQgMyAzLjU1MiAzIDNWMmMwLS41NTIuNTc2LTEgMS4yODYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QaW5GaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGluRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMWg0LjVhLjUuNSAwIDEwMC0xaC0xMGEuNS41IDAgMTAwIDFIOHY0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExek01IDRoN3Y2SDVWNHptLjI4Ni0zaDYuNDI4QzEyLjQyNCAxIDEzIDEuNDQ4IDEzIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINS4yODZDNC41NzYgNCA0IDMuNTUyIDQgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW5GaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsYXkgPSBmdW5jdGlvbiBFdWlJY29uUGxheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjA4IDMuMDYzQzQuMzQ1IDIuODk1IDQgMy4wODkgNCAzLjQxOHY5LjE2N2MwIC4zMjkuMzQ1LjUyMy42MDguMzU2bDcuMi00LjU4NGEuNDI2LjQyNiAwIDAwMC0uNzExbC03LjItNC41ODN6bS41MzgtLjg0NGw3LjIgNC41ODNhMS40MjYgMS40MjYgMCAwMTAgMi4zOTlsLTcuMiA0LjU4M0M0LjIxIDE0LjM4IDMgMTMuNjk2IDMgMTIuNTg1VjMuNDE4QzMgMi4zMDcgNC4yMSAxLjYyNCA1LjE0NiAyLjIyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbGF5RmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsYXlGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4zNDUgNi44MDFsLTcuMi00LjU4MUM0LjIxIDEuNjI1IDMgMi4zMDggMyAzLjQxOXY5LjE2MmMwIDEuMTExIDEuMjEgMS43OTQgMi4xNDYgMS4xOTlsNy4yLTQuNTgxYTEuNDI1IDEuNDI1IDAgMDAwLTIuMzk4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5RmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzID0gZnVuY3Rpb24gRXVpSWNvblBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjI1IDNhLjUuNSAwIDAxLjUuNXYzLjc1aDMuNzVhLjUuNSAwIDAxLjUuNXYuNWEuNS41IDAgMDEtLjUuNUg4Ljc1djMuNzVhLjUuNSAwIDAxLS41LjVoLS41YS41LjUgMCAwMS0uNS0uNVY4Ljc1SDMuNWEuNS41IDAgMDEtLjUtLjV2LS41YS41LjUgMCAwMS41LS41aDMuNzVWMy41YS41LjUgMCAwMS41LS41aC41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggN2gzLjVhLjUuNSAwIDExMCAxSDh2My41YS41LjUgMCAxMS0xIDBWOEgzLjVhLjUuNSAwIDAxMC0xSDdWMy41YS41LjUgMCAwMTEgMFY3em0tLjUtN0MxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDdWMy41YS41LjUgMCAwMC0xIDBWN0gzLjVhLjUuNSAwIDAwMCAxSDd2My41YS41LjUgMCAxMDEgMFY4aDMuNWEuNS41IDAgMTAwLTFIOHptLS41IDhhNy41IDcuNSAwIDExMC0xNSA3LjUgNy41IDAgMDEwIDE1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBvcG91dCA9IGZ1bmN0aW9uIEV1aUljb25Qb3BvdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA4LjVhLjUuNSAwIDExMSAwVjEyYTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yaDMuNWEuNS41IDAgMDEwIDFINGExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjguNXptLTUuMTIuMzM5YS41LjUgMCAxMS0uNzA2LS43MDdMMTMuMzA1IDJIMTAuNWEuNS41IDAgMTEwLTFIMTRhMSAxIDAgMDExIDF2My41YS41LjUgMCAxMS0xIDBWMi43Mkw3Ljg4IDguODM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Qb3BvdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblB1c2ggPSBmdW5jdGlvbiBFdWlJY29uUHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTcxIDUuMTVMMTAuMTE0IDdIMS41NTZDMS4yNDkgNyAxIDcuMjI0IDEgNy41cy4yNDkuNS41NTYuNWg4LjUyNmwtMS45MSAxLjgyYS41Mi41MiAwIDAwMCAuNzdjLjIyNy4yMTMuNi4yMTMuODI4IDBsMi4wNS0xLjk1YTEuNTUyIDEuNTUyIDAgMDAwLTIuMzFMOSA0LjM4YS42MTcuNjE3IDAgMDAtLjgyOSAwIC41Mi41MiAwIDAwMCAuNzd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjgwNCAxMi43OTJBLjk5My45OTMgMCAwMTYgMTEuODJWMTBINXYxLjgyNmMwIC45NDUuNjczIDEuNzYgMS42MDggMS45NDVsNiAxLjE5QTEuOTkyIDEuOTkyIDAgMDAxNSAxMy4wMTZWMS45ODRBMiAyIDAgMDAxMi42MDguMDRsLTYgMS4xOUM1LjY3MyAxLjQxNSA1IDIuMjMgNSAzLjE3NVY1aDFWMy4xOGMwLS40NzIuMzM2LS44NzkuODA0LS45NzJsNi0xLjE4OUExIDEgMCAwMTE0IDEuOTkxdjExLjAxOGEuOTk1Ljk5NSAwIDAxLTEuMTk2Ljk3MmwtNi0xLjE5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdWVzdGlvbkluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnptMC0xQTUgNSAwIDEwOCAzYTUgNSAwIDAwMCAxMHptLS4xODYtMS4wNjVBLjc4NS43ODUgMCAwMTcgMTEuMTJjMC0uNDguMzQtLjgyLjgxNC0uODIuNDc1IDAgLjgwOS4zNC44MDkuODIgMCAuNDc1LS4zMzQuODE1LS44MDkuODE1ek01LjkgNi4zMTdDNS45NiA1LjE2OCA2Ljc1NSA0LjQgOC4wNDggNC40YzEuMjE4IDAgMi4wOTEuNzU5IDIuMDkxIDEuOCAwIC43MzYtLjM2IDEuMzA0LTEuMDMgMS43MDctLjU2LjMzLS43MTcuNTYtLjcxNyAxLjAyMnYuMzA1bC0uMS4xSDcuNDdsLS4xLS4xdi0uNDMxYy0uMDA1LS42NDYuMzAyLTEuMTA0Ljk4Ny0xLjUxNC41MjctLjMyMi43MDgtLjU5LjcwOC0xLjA0NyAwLS41MzYtLjQxNi0uOTEtMS4wNS0uOTEtLjY1MiAwLTEuMDY0LjM3NC0xLjExMi45OThsLS4xLjA5Mkg2bC0uMS0uMTA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25RdWVzdGlvbkluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdW90ZSA9IGZ1bmN0aW9uIEV1aUljb25RdW90ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODQ4IDIuNDdhMSAxIDAgMDEtLjMxOCAxLjM3OEE3LjI4NCA3LjI4NCAwIDAwMy43NSA3LjAxIDMgMyAwIDExMSAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAxLjAxLS4yMzJjLjAwOS0uMTUuMDI3LS4zNi4wNjItLjYxOC4wNy0uNTEzLjIwNy0xLjIyLjQ4NC0yLjAxNC41NTItMS41OSAxLjY3LTMuNTU1IDMuOTE0LTQuOTU3YTEgMSAwIDAxMS4zNzguMzE4em03IDBhMSAxIDAgMDEtLjMxOCAxLjM3OCA3LjI4MyA3LjI4MyAwIDAwLTIuNzggMy4xNjJBMyAzIDAgMTE4IDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMDEuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMDExLjM3OC4zMTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1b3RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblJlZnJlc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yMjggMi45NDJhLjUuNSAwIDExLS41MzguODQyQTUgNSAwIDEwMTMgOGEuNS41IDAgMTExIDAgNiA2IDAgMTEtMi43NzItNS4wNTh6TTE0IDEuNXYzQTEuNSAxLjUgMCAwMTEyLjUgNmgtM2EuNS41IDAgMDEwLTFoM2EuNS41IDAgMDAuNS0uNXYtM2EuNS41IDAgMTExIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJlcG9ydGVyID0gZnVuY3Rpb24gRXVpSWNvblJlcG9ydGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNjg0Ljg5NUw2LjA3NC4zNThhMSAxIDAgMDAtMS4yOTYuNzUzTDQuMiA0SDIuNWEuNS41IDAgMDAwIDFoMS42MjZhNC4wMDcgNC4wMDcgMCAwMC4xMSAyLjM1OWwtMi4wNzItLjM0NUExIDEgMCAwMDEgOHYxYy4zNjQgMCAuNzA2LjA5NyAxIC4yNjhWOGwxIC4xNjcgMS44NTkuMzEgMi4xNjMuMzYuNDc4LjA4djZMMiAxNHYtMS4yNjhBMS45OSAxLjk5IDAgMDExIDEzdjFhMSAxIDAgMDAuODM2Ljk4Nmw2IDFjLjEwOC4wMTguMjIuMDE4LjMyOCAwbDYtMUExIDEgMCAwMDE1IDE0di0xYTEuOTkgMS45OSAwIDAxLTEtLjI2OFYxNGwtNS41LjkxN3YtNmwuNDc4LS4wOCAyLjE2My0uMzZMMTMgOC4xNjYgMTQgOHYxLjI2OEExLjk5IDEuOTkgMCAwMTE1IDlWOGExIDEgMCAwMC0xLjE2NC0uOTg2bC0yLjA3My4zNDVBMy45OTEgMy45OTEgMCAwMDExLjg3NCA1SDEzLjVhLjUuNSAwIDAwMC0xaC0xLjdsLS41NzgtMi44OUExIDEgMCAwMDkuOTI1LjM1OUw4LjMxNi44OTVhMSAxIDAgMDEtLjYzMiAwem0yLjg4IDYuNjY0QTMuMDEzIDMuMDEzIDAgMDAxMC44MyA1SDUuMTdhMy4wMTMgMy4wMTMgMCAwMC4yNjYgMi41NTlMOCA3Ljk4NmwyLjU2NC0uNDI3ek0xMC44IDRIOS4yTDkgM2wxLjUtLjUuMyAxLjV6TTEgMTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTE0IDBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlcG9ydGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZXR1cm5LZXkgPSBmdW5jdGlvbiBFdWlJY29uUmV0dXJuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk0IDRjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djEuOTg4YTIuMDA1IDIuMDA1IDAgMDEtMS44NTYgMkwxMiAxMEgzLjQ4NGwxLjkxIDEuODJhLjUyLjUyIDAgMDEwIC43Ny42MTYuNjE2IDAgMDEtLjgyOSAwbC0yLjA1LTEuOTVhMS41NTEgMS41NTEgMCAwMTAtMi4zMWwyLjA1LTEuOTVhLjYxNy42MTcgMCAwMS44MyAwIC41Mi41MiAwIDAxMCAuNzdMMy40NSA5SDEyYy41MTQtLjAwMy45MzUtLjM5Ljk5My0uODg4TDEzIDcuOTk0VjYuMDA2YzAtLjUxNi0uMzg4LS45NDEtLjg4OC0xTDExLjk5NCA1SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDRoMi40OTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJldHVybktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2F2ZSA9IGZ1bmN0aW9uIEV1aUljb25TYXZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4wMDggMkgyLjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzV2MTEuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gxMS40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjQuNjJjMC0uMTMtLjAwMS0uMTgtLjAwNC0uMjA0YTIuNjU0IDIuNjU0IDAgMDAtLjE0MS0uMTQ3TDExLjczIDIuMTQ1YTIuNjU0IDIuNjU0IDAgMDAtLjE0Ny0uMTQxQTIuNjU0IDIuNjU0IDAgMDAxMS4zOCAyaC0uMzg4Yy4wMDUuMDguMDA4LjE3Mi4wMDguMjgydjIuNDM2YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRINi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhDNS4wNDYgNS4zMjUgNSA1LjE2NCA1IDQuNzE4VjIuMjgyYzAtLjExLjAwMy0uMjAyLjAwOC0uMjgyek0yLjI4MiAxaDkuMDk4Yy4yNTkgMCAuMzQ4LjAxLjQ0Ny4wMzJhLjg3Ljg3IDAgMDEuMjczLjExM2MuMDg2LjA1NC4xNTYuMTEuMzM4LjI5M2wyLjEyNCAyLjEyNGMuMTgyLjE4Mi4yMzkuMjUyLjI5My4zMzhhLjg3Ljg3IDAgMDEuMTEzLjI3M2MuMDIzLjEuMDMyLjE4OC4wMzIuNDQ3djkuMDk4YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRIMi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhjLS4wODgtLjE2My0uMTM0LS4zMjQtLjEzNC0uNzdWMi4yODJjMC0uNDQ2LjA0Ni0uNjA3LjEzNC0uNzdhLjkwOS45MDkgMCAwMS4zNzgtLjM3OGMuMTYzLS4wODguMzI0LS4xMzQuNzctLjEzNHpNNiAyLjI4MnYyLjQzNmMwIC4xODEuMDAyLjI0NS4wMDcuMjc1LjAzLjAwNS4wOTQuMDA3LjI3NS4wMDdoMy40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjIuMjgyYzAtLjE4MS0uMDAyLS4yNDUtLjAwNy0uMjc1QTIuMjQ4IDIuMjQ4IDAgMDA5LjcxOCAySDYuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXpNOCAxMmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMC0xYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TYXZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TY2FsZSA9IGZ1bmN0aW9uIEV1aUljb25TY2FsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41IDEyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDBhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem00LTJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0yLTFhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMC0zYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTItMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem02LTZhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TY2FsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvblNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjI3MSAxMS45NzhsMy44NzIgMy44NzNhLjUwMi41MDIgMCAwMC43MDggMCAuNTAyLjUwMiAwIDAwMC0uNzA4bC0zLjU2NS0zLjU2NGMyLjM4LTIuNzQ3IDIuMjY3LTYuOTIzLS4zNDItOS41MzItMi43My0yLjczLTcuMTctMi43My05Ljg5OCAwLTIuNzI4IDIuNzI5LTIuNzI4IDcuMTcgMCA5LjlhNi45NTUgNi45NTUgMCAwMDQuOTQ5IDIuMDUuNS41IDAgMDAwLTEgNS45NiA1Ljk2IDAgMDEtNC4yNDItMS43NTcgNi4wMSA2LjAxIDAgMDEwLTguNDg2YzIuMzM3LTIuMzQgNi4xNDMtMi4zNCA4LjQ4NCAwYTYuMDEgNi4wMSAwIDAxMCA4LjQ4Ni41LjUgMCAwMC4wMzQuNzM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjg3NSAzLjQxOGE2IDYgMCAxMC43MDcuNzA3bC0yLjQ2IDIuNDYtMS4xNTYgMS4xNTZhMSAxIDAgMTEtLjcwNy0uNzA3bC43NTctLjc1N2EyIDIgMCAwMC0yLjQzIDMuMTM3LjUuNSAwIDExLS43MDcuNzA3IDMgMyAwIDAxMy44Ni00LjU2N2wuNzE0LS43MTRBNCA0IDAgMTA4IDEyYS41LjUgMCAxMTAgMSA1IDUgMCAxMTMuMTY0LTguODcxbC43MS0uNzF6bS43MDktLjcwOWE3IDcgMCAxMC43MDcuNzA3bC4zNjYtLjM2NmEuNS41IDAgMTAtLjcwNy0uNzA3bC0uMzY2LjM2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMDAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxMDggMTVhNC45OTQgNC45OTQgMCAwMS0uNTk3LTEuMDMgNiA2IDAgMTE0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxMC00LjA4IDguNzg4IDUuMDI3IDUuMDI3IDAgMDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAxOCA0YTMuOTggMy45OCAwIDAxMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAwLTMuODYgNC41NjcuNS41IDAgMTAuNzA4LS43MDcgMiAyIDAgMDEyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxMC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAxMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS00IC41YS41NzcuNTc3IDAgMDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDExMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDEwLS43MDctLjcwN2wtLjM2Ni4zNjZBNyA3IDAgMTA4IDE1YTQuOTk0IDQuOTk0IDAgMDEtLjU5Ny0xLjAzIDYgNiAwIDExNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMTAtNC4wOCA4Ljc4OCA1LjAyOCA1LjAyOCAwIDAxLS4wODItMS4wNDJBNC4wMDIgNC4wMDIgMCAwMTggNGEzLjk4IDMuOTggMCAwMTIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwMC0zLjg2IDQuNTY3LjUuNSAwIDEwLjcwOC0uNzA3IDIgMiAwIDAxMi40My0zLjEzN2wtLjc1Ny43NTdhMSAxIDAgMTAuNzA3LjcwN2wxLjE1NS0xLjE1NSAyLjQ2LTIuNDZhNS45NzIgNS45NzIgMCAwMTEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAxMCAuNzA3bC0yLjUgMi41YS41LjUgMCAwMS0uNzA4IDBsLTEtMWEuNS41IDAgMDEuNzA4LS43MDdsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAxLjcwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZXNzaW9uVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNlc3Npb25WaWV3ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDZoMXYxSDRWNnptMiAySDVWN2gxdjF6bTAgMVY4aDF2MUg2em0tMSAxVjloMXYxSDV6bTAgMHYxSDR2LTFoMXptMiAwaDR2MUg3di0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2ExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYxMGExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWM3ptMSAxaDEydjlIMlY0elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2Vzc2lvblZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2hhcmQgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjEzNCA3LjAzMUw4IDEyLjc2NGwyLjg2Ni01LjczM0w4IDIuMDE2IDUuMTM0IDcuMDN6TTggMGw0IDctNCA4LTQtOCA0LTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TaGFyZSA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi44MXY2LjM4YzAgLjQ5My40NDguOS45OTIuOWg3LjAxNmMuNTQzIDAgLjk5Mi0uNDA2Ljk5Mi0uOVY2LjgxYzAtLjQ5My0uNDQ4LS45LS45OTItLjlIMy45OTJjLS41NDMgMC0uOTkyLjQwNi0uOTkyLjl6TTYgNXYuOTFoM1Y1aDIuMDA4QzEyLjEwOCA1IDEzIDUuODE4IDEzIDYuODF2Ni4zOGMwIDEtLjkgMS44MS0xLjk5MiAxLjgxSDMuOTkyQzIuODkyIDE1IDIgMTQuMTgyIDIgMTMuMTlWNi44MUMyIDUuODEgMi45IDUgMy45OTIgNUg2em0xLjk5Ny0zLjU1MkEuNTA2LjUwNiAwIDAxOCAxLjV2OGEuNS41IDAgMDEtMSAwdi04YS41MS41MSAwIDAxMC0uMDE3TDUuMTggMy4zOTRhLjUyLjUyIDAgMDEtLjc3IDAgLjYxNy42MTcgMCAwMTAtLjgyOUw2LjM2LjUxNWExLjU1MiAxLjU1MiAwIDAxMi4zMSAwbDEuOTUgMi4wNWMuMjE0LjIyOS4yMTQuNjAxIDAgLjgzYS41Mi41MiAwIDAxLS43NyAwTDcuOTk3IDEuNDQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaGFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU25vd2ZsYWtlID0gZnVuY3Rpb24gRXVpSWNvblNub3dmbGFrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjAwNy41YS41LjUgMCAwMTEgMHYyLjAyNGEuOTk5Ljk5OSAwIDAwLjI2OC0uMjI3bDEuMDI3LTEuMjMzYS41LjUgMCAwMS43NjkuNjRMOC4yNzUgMy44NmEuOTk5Ljk5OSAwIDAxLS4yNjguMjI3djIuNTQ4bDIuMjA3LTEuMjc0YzAtLjExNC4wMi0uMjMxLjA2Mi0uMzQ2bC45NjgtMi42MzJhLjUuNSAwIDExLjkzOC4zNDVsLS41NTQgMS41MDZhLjk5OC45OTggMCAwMC0uMDYyLjM0NmwxLjc1My0xLjAxMmEuNS41IDAgMTEuNS44NjZsLTEuNzUzIDEuMDEyYy4xLjA1Ny4yMS4wOTguMzMuMTE5bDEuNTgyLjI3M2EuNS41IDAgMTEtLjE3Ljk4NmwtMi43NjQtLjQ3OGExIDEgMCAwMS0uMzMtLjEyTDguNTA2IDcuNWwyLjIwNyAxLjI3NGExIDEgMCAwMS4zMy0uMTE5bDIuNzY0LS40NzhhLjUuNSAwIDExLjE3Ljk4NmwtMS41ODIuMjczYS45OTkuOTk5IDAgMDAtLjMzLjEybDEuNzUzIDEuMDExYS41LjUgMCAxMS0uNS44NjZsLTEuNzUzLTEuMDEyYzAgLjExNS4wMi4yMzEuMDYyLjM0NmwuNTU0IDEuNTA2YS41LjUgMCAwMS0uOTM4LjM0NWwtLjk2OC0yLjYzMmEuOTk5Ljk5OSAwIDAxLS4wNjItLjM0Nkw4LjAwNyA4LjM2NnYyLjU0OGMuMDk4LjA1OC4xOS4xMzMuMjY4LjIyN2wxLjc5NiAyLjE1NWEuNS41IDAgMDEtLjc2OS42NGwtMS4wMjctMS4yMzNhLjk5OS45OTkgMCAwMC0uMjY4LS4yMjZWMTQuNWEuNS41IDAgMDEtMSAwdi0yLjAyNGEuOTk5Ljk5OSAwIDAwLS4yNjkuMjI3bC0xLjAyNyAxLjIzM2EuNS41IDAgMDEtLjc2OC0uNjRsMS43OTUtMi4xNTVhLjk5OS45OTkgMCAwMS4yNjktLjIyN1Y4LjM2Nkw0LjggOS42NGMwIC4xMTQtLjAyLjIzMS0uMDYyLjM0NmwtLjk2OSAyLjYzMmEuNS41IDAgMTEtLjkzOC0uMzQ1bC41NTQtMS41MDZhMSAxIDAgMDAuMDYyLS4zNDZsLTEuNzUzIDEuMDEyYS41LjUgMCAwMS0uNS0uODY2bDEuNzUzLTEuMDEyYS45OTkuOTk5IDAgMDAtLjMzLS4xMTlsLTEuNTgyLS4yNzNhLjUuNSAwIDAxLjE3LS45ODZsMi43NjQuNDc4Yy4xMi4wMi4yMzIuMDYyLjMzLjEyTDYuNTA4IDcuNSA0LjMgNi4yMjZhLjk5OS45OTkgMCAwMS0uMzMuMTE5bC0yLjc2NS40NzhhLjUuNSAwIDExLS4xNy0uOTg2bDEuNTgyLS4yNzNhLjk5OS45OTkgMCAwMC4zMy0uMTJMMS4xOTQgNC40MzRhLjUuNSAwIDExLjUtLjg2NmwxLjc1MyAxLjAxMmMwLS4xMTQtLjAyLS4yMzEtLjA2Mi0uMzQ2TDIuODMgMi43MjdhLjUuNSAwIDExLjkzOC0uMzQ1bC45NjkgMi42MzJhLjk5OS45OTkgMCAwMS4wNjIuMzQ2bDIuMjA3IDEuMjc0VjQuMDg2YTEgMSAwIDAxLS4yNjktLjIyN0w0Ljk0MyAxLjcwNGEuNS41IDAgMDEuNzY4LS42NGwxLjAyNyAxLjIzM2MuMDc5LjA5NC4xNy4xNy4yNjkuMjI3Vi41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tbm93Zmxha2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMDggN2g4LjEzNmMuMzA3IDAgLjU1Ni4yMjQuNTU2LjVzLS4yNDkuNS0uNTU2LjVINC4zMDhsNC4wOTYgNC4wOTZhLjUuNSAwIDAxLS43MDcuNzA3TDMuNDU0IDguNTYxYTEuNDk0IDEuNDk0IDAgMDEtLjQzMy0uOTI1LjQ1NC40NTQgMCAwMTAtLjI3MmMuMDMtLjMzOC4xNzUtLjY2Ni40MzMtLjkyNWw0LjI0My00LjI0MmEuNS41IDAgMTEuNzA3LjcwN0w0LjMwOCA3elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS42OTIgN0gzLjU1NkMzLjI0OSA3IDMgNy4yMjQgMyA3LjVzLjI0OS41LjU1Ni41aDguMTM2bC00LjA5NiA0LjA5NmEuNS41IDAgMDAuNzA3LjcwN2w0LjI0My00LjI0MmMuMjU4LS4yNTkuNDAzLS41ODcuNDMzLS45MjVhLjQ1NC40NTQgMCAwMDAtLjI3MiAxLjQ5NCAxLjQ5NCAwIDAwLS40MzMtLjkyNUw4LjMwMyAyLjE5N2EuNS41IDAgMTAtLjcwNy43MDdMMTEuNjkyIDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydERvd24gPSBmdW5jdGlvbiBFdWlJY29uU29ydERvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExLjY5MlYzLjU1NkM3IDMuMjQ5IDcuMjI0IDMgNy41IDNzLjUuMjQ5LjUuNTU2djguMTM2bDQuMDk2LTQuMDk2YS41LjUgMCAwMS43MDcuNzA3bC00LjI0MiA0LjI0M2ExLjQ5NCAxLjQ5NCAwIDAxLS45MjUuNDMzLjQ1NC40NTQgMCAwMS0uMjcyIDAgMS40OTQgMS40OTQgMCAwMS0uOTI1LS40MzNMMi4xOTcgOC4zMDNhLjUuNSAwIDExLjcwNy0uNzA3TDcgMTEuNjkyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydFVwID0gZnVuY3Rpb24gRXVpSWNvblNvcnRVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4yMDd2OC4yMzdjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2VjQuMjA3TDIuOTA0IDguMzAzYS41LjUgMCAwMS0uNzA3LS43MDdsNC4yNDItNC4yNDJhMS41IDEuNSAwIDAxMi4xMjIgMGw0LjI0MiA0LjI0MmEuNS41IDAgMTEtLjcwNy43MDdMOCA0LjIwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0YWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0YWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTIuNzg2VjMuMkwzLjYwNCA2LjU5NmEuNS41IDAgMDEtLjcwOC0uNzA3bDMuNTM2LTMuNTM1YTEuNSAxLjUgMCAwMTIuMTIxIDBsMy41MzYgMy41MzVhLjUuNSAwIDAxLS43MDcuNzA3TDggMy4yMTR2OS41NTdsMy4zODItMy4zODJhLjUuNSAwIDAxLjcwNy43MDdsLTMuNTM2IDMuNTM2YTEuNSAxLjUgMCAwMS0yLjEyMSAwbC0zLjUzNi0zLjUzNmEuNS41IDAgMDEuNzA4LS43MDdMNyAxMi43ODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm04IDhoMnYxaC0ydjJoLTF2LTJoLTJ2LTFoMlY4aDF2MnpNNiAzYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyUGx1c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyek02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA4IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZsLTIuMjAyIDIuMjI2LS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw4IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM3LjkwNSAzLjA1IDcuOTI3IDMgOCAzXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckVtcHR5U3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5U3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5U3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RhckZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwOCAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWRTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkU3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRmlsbGVkU3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA2IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzem0xMCA3djFoLTV2LTFoNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAxLjc5Mi41MTFsMS4zMyAyLjkyNCAzLjEyOC40NDZjLjcxLjEwMiAxLjAwMS45NzYuNDk2IDEuNDg3TDkuNDMzIDkuNzA0bC41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMTkuMTM2IDE0YS44NjIuODYyIDAgMDEtLjQyOS0uMTE2TDYgMTIuMzQybC0yLjcwNyAxLjU0MmEuODYyLjg2MiAwIDAxLS40My4xMTYuODc3Ljg3NyAwIDAxLS44NTktMS4wMjdsLjU2My0zLjI2OUwuMjU0IDcuMzY4Qy0uMjUgNi44NTcuMDQgNS45ODMuNzUgNS44OGwzLjEyOC0uNDQ2IDEuMzMtMi45MjNBLjg2Ljg2IDAgMDE2IDJ6bTEwIDh2MWgtNXYtMWg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXRzID0gZnVuY3Rpb24gRXVpSWNvblN0YXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTR2LTRoMXY0aDVWNWgxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xdi0yaDF2Mmg2em00Ljg1My0xMC4xNDZsLTIuOTk5IDNhMS41IDEuNSAwIDAxLTIuNTM4IDEuNTY4bC0yLjcxNC45MDRMNCA5LjUyN2ExLjUgMS41IDAgMTEtLjMxNi0uOTQ4TDcgNy40NzNhMS41IDEuNSAwIDAxMi4xNDYtMS4zMjdsMy0zYTEuNSAxLjUgMCAxMS43MDcuNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWNGExIDEgMCAwMC0xLTFINHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RvcEZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHg6IDIsXG4gICAgeTogMixcbiAgICByeDogMixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3BGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4yNTkgMy4wMzRBMS4wMDEgMS4wMDEgMCAwMDEyIDNINGExIDEgMCAwMC0xIDF2OGMwIC4wOS4wMTIuMTc2LjAzNC4yNTlsOS4yMjUtOS4yMjV6bS43MDcuNzA3bC05LjIyNSA5LjIyNWMuMDgzLjAyMi4xNy4wMzQuMjU5LjAzNGg4YTEgMSAwIDAwMS0xVjRjMC0uMDktLjAxMi0uMTc2LS4wMzQtLjI1OXpNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdG9yYWdlID0gZnVuY3Rpb24gRXVpSWNvblN0b3JhZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yIDZhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoMTJhMSAxIDAgMDExIDF2M2ExIDEgMCAwMS0xIDFIMnptMTMgMnYzYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVY4YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDAxMSAxem0xLTNWMmEyIDIgMCAwMC0yLTJIMmEyIDIgMCAwMC0yIDJ2M2MwIC42MDEuMjcxIDEuMTMzLjY5IDEuNUMuMjcxIDYuODY3IDAgNy4zOTkgMCA4djNhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWOGMwLS42MDEtLjI3MS0xLjEzMy0uNjg5LTEuNS40MTgtLjM2Ny42ODktLjg5OS42ODktMS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiA5LjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiAzLjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGgxdjNoLTF6TTEwIDhoMXYzaC0xek0xMiAyaDF2M2gtMXpNMTAgMmgxdjNoLTF6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9yYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdHJpbmcgPSBmdW5jdGlvbiBFdWlJY29uU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMjk3IDNMOC45MyA1LjEwMmgxLjM1MWwtLjMyIDEuODI4SDguNjA5bC0uNjU2IDMuODgzYy0uMDM2LjI2NS0uMDIuNDY2LjA1LjYwMS4wNzEuMTM1LjI0Ny4yMDguNTI4LjIxOS4xMS4wMDUuMzM0LS4wMDguNjcyLS4wNEw5LjAxNiAxMy41YTQuMTYgNC4xNiAwIDAxLTEuMzgzLjE5NWMtLjc5Ny0uMDEtMS4zOTMtLjI0NC0xLjc5LS43MDMtLjM5NS0uNDU4LS41NTctMS4wOC0uNDg0LTEuODY3bC42ODgtNC4xOTVINWwuMzEzLTEuODI4aDEuMDQ2TDYuNzI3IDNoMi41N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdWJtb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uU3VibW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJIMXYxMmgzVjdhMSAxIDAgMDExLTFoNWExIDEgMCAwMTEgMXYxaDRWNEg3Yy0uNjIxIDAtMS0uMzc5LTEtMVYyem0xMCA2djZhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNWEuNzUuNzUgMCAwMS43NS43NWwtLjAwNC4yMDZDNi45OSAyLjMxNyA2Ljk3NCAzIDcgM2g4YTEgMSAwIDAxMSAxdjR6bS0xIDFoLTRhMSAxIDAgMDEtMS0xVjdINXY3aDEwVjl6TTIgNC41YS41LjUgMCAwMS41LS41aDJhLjUuNSAwIDAxMCAxaC0yYS41LjUgMCAwMS0uNS0uNXpNNi41IDlhLjUuNSAwIDAwMCAxaDJhLjUuNSAwIDAwMC0xaC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdWJtb2R1bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN1biA9IGZ1bmN0aW9uIEV1aUljb25TdW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHpNNy4yNS43NWEuNzUuNzUgMCAwMTEuNSAwdjEuNWEuNzUuNzUgMCAxMS0xLjUgMFYuNzV6bTAgMTNhLjc1Ljc1IDAgMDExLjUgMHYxLjVhLjc1Ljc1IDAgMDEtMS41IDB2LTEuNXptNS4zNDYtMTEuNDA3YS43NS43NSAwIDAxMS4wNiAxLjA2bC0xLjA2IDEuMDYxYS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6bS05LjE5MiA5LjE5M2EuNzUuNzUgMCAxMTEuMDYgMS4wNmwtMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6TS43NSA4Ljc1YS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDExMCAxLjVILjc1em0xMyAwYS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDAxMCAxLjVoLTEuNXpNMi4zNDMgMy40MDRhLjc1Ljc1IDAgMTExLjA2LTEuMDZsMS4wNjEgMS4wNmEuNzUuNzUgMCAwMS0xLjA2IDEuMDZsLTEuMDYtMS4wNnptOS4xOTMgOS4xOTJhLjc1Ljc1IDAgMDExLjA2LTEuMDZsMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN3YXRjaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvblN3YXRjaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHJ4OiAzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3YXRjaElucHV0X19zdHJva2VcIixcbiAgICB4OiAyLjUsXG4gICAgeTogMi41LFxuICAgIHdpZHRoOiAxMSxcbiAgICBoZWlnaHQ6IDExLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Td2F0Y2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3ltbGluayA9IGZ1bmN0aW9uIEV1aUljb25TeW1saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMC44IDBIMmExIDEgMCAwMC0xIDF2OGwxLTFWMWg4djMuNWEuNS41IDAgMDAuNS41SDE0djEwSDJ2LTFhMy41IDMuNSAwIDAxMy41LTMuNUg4VjEzbDMtMy0zLTN2Mi41SDUuNUE0LjUgNC41IDAgMDAxIDE0djFhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOEExLjAwMiAxLjAwMiAwIDAwMTAuOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TeW1saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZU9mQ29udGVudHMgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVPZkNvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxdjE0aDE0VjFIMXpNMCAwaDE2djE2SDBWMHptOSAxdjE0aDFWMUg5ek0zIDMuNWg0di0xSDN2MXptMCAzaDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlT2ZDb250ZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNDk2IDdhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggOCA2IDcuNzc2IDYgNy41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjQ5NiA1YS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDYgNiA1Ljc3NiA2IDUuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC40OTYgOWEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMCA2IDkuNzc2IDYgOS41cy4xMjgtLjUuMjg2LS41aDMuNDI4em0tNS4yMTggMmEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMiA2IDExLjc3NiA2IDExLjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6bS01LjIxOCAyYS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTktNmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMC0yYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wIDRhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bTAgMmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMCAyYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0tMy43ODIgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTQgNiAxMy43NzYgNiAxMy41cy4xMjgtLjUuMjg2LS41aDMuNDI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJoMTJhMiAyIDAgMDEyIDJ2MXptLTEgMFYyYTEgMSAwIDAwLTEtMUgyYTEgMSAwIDAwLTEgMXYxaDE0em0wIDFIMXYxMGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0ek00LjUgN2EuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMDEwLTFoNnptLTkgNGEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMTEwLTFoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC41IDZhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDcgNiA2Ljc3NiA2IDYuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC41IDlhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6TTQuNSAxMmEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOS02YS41LjUgMCAxMTAgMWgtMi4wMDRhLjUuNSAwIDAxMC0xSDEzLjV6bTAgM2EuNS41IDAgMTEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41em0wIDNhLjUuNSAwIDExMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXptLTMuNzg2IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEzIDYgMTIuNzc2IDYgMTIuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWcgPSBmdW5jdGlvbiBFdWlJY29uVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNTQgMTQuOTdMLjk5NiA5LjcxMmMtLjMxNS0uMzE2LS4zOTctLjQ2My0uNDUtLjY0YS45MDkuOTA5IDAgMDEwLS41MzRjLjA1My0uMTc3LjEzNS0uMzI0LjQ1LS42NEw3LjQzIDEuNDY2Yy4xODItLjE4My4yNTItLjI0LjMzOC0uMjkzYS44Ny44NyAwIDAxLjI3My0uMTEzYy4wOTktLjAyMy4xODgtLjAzMi40NDYtLjAzMmg1LjE3M2MuNDQ1IDAgLjYwNy4wNDYuNzcuMTMzLjE2Mi4wODcuMjkuMjE0LjM3Ny4zNzcuMDg4LjE2Mi4xMzQuMzI0LjEzNi43NjlsLjAxNSA1LjE1YzAgLjI1OS0uMDA5LjM0OC0uMDMyLjQ0OGEuODcuODcgMCAwMS0uMTEyLjI3M2MtLjA1NC4wODctLjExMS4xNTctLjI5NC4zNEw4LjA2NyAxNC45N2MtLjMxNS4zMTUtLjQ2Mi4zOTYtLjYzOS40NWEuOTA5LjkwOSAwIDAxLS41MzUgMGMtLjE3Ni0uMDU0LS4zMjQtLjEzNS0uNjM5LS40NXptMS4xMDYtLjcwN2w2LjQ1My02LjQ1M2MuMDkyLS4wOTIuMTI2LS4xMjguMTQxLS4xNDcuMDAzLS4wMjUuMDA0LS4wNzQuMDA0LS4yMDRsLS4wMTUtNS4xNWMwLS4xODEtLjAwMy0uMjQ1LS4wMDktLjI3NWEyLjI0NyAyLjI0NyAwIDAwLS4yNzQtLjAwN0g4LjQ4N2MtLjEzIDAtLjE3OS4wMDEtLjIwMy4wMDQtLjAyLjAxNS0uMDU1LjA1LS4xNDcuMTQxTDEuNzAzIDguNjA2YTIuMjQ4IDIuMjQ4IDAgMDAtLjE4OS4yYy4wMTcuMDI0LjA2MS4wNy4xOS4xOThsNS4yNTcgNS4yNTljLjEyOC4xMjguMTc1LjE3MS4yLjE4OC4wMjQtLjAxNy4wNzEtLjA2LjItLjE4OHptNC45NzItMTAuNjA3YTIgMiAwIDExLTIuODI4IDIuODI4IDIgMiAwIDAxMi44MjgtMi44Mjh6bS0uNzA3LjcwN2ExIDEgMCAxMC0xLjQxNCAxLjQxNCAxIDEgMCAwMDEuNDE0LTEuNDE0ek02LjgwNyAxMS4yOEw0LjY4NiA5LjE1OWEuNS41IDAgMTEuNzA3LS43MDdsMi4xMjEgMi4xMmEuNS41IDAgMTEtLjcwNy43MDh6bTEuNDE0LTEuNDE0bC0yLjEyLTIuMTIyYS41LjUgMCAxMS43MDYtLjcwN0w4LjkyOCA5LjE2YS41LjUgMCAxMS0uNzA3LjcwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZWFyID0gZnVuY3Rpb24gRXVpSWNvblRlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1MyAxLjc3NmEuNS41IDAgMDEuODk0IDBsNCA4YS41LjUgMCAwMS4wNTMuMjM1Yy0uMDA0LjE1LS4wMjYuMzk2LS4wODQuNzA1YTUuNTM4IDUuNTM4IDAgMDEtLjUwNSAxLjUxMkMxMS4xODkgMTMuNjM4IDkuOTA2IDE0LjUgOCAxNC41Yy0xLjkwNiAwLTMuMTktLjg2Mi0zLjkxLTIuMjcyYTUuNTM4IDUuNTM4IDAgMDEtLjUwNi0xLjUxMiA0LjY3MiA0LjY3MiAwIDAxLS4wODQtLjcwNS41LjUgMCAwMS4wNTMtLjIzNWw0LTh6bS0zLjA0NiA4LjMyOWMuMDA5LjEwNi4wMjcuMjUzLjA2LjQyOS4wNzkuNDI0LjIxMy44NDguNDEzIDEuMjM4QzUuNTM3IDEyLjg2MiA2LjQ4NyAxMy41IDggMTMuNWMxLjUxMyAwIDIuNDYzLS42MzggMy4wMi0xLjcyOC4yLS4zOS4zMzQtLjgxNC40MTMtMS4yMzguMDMzLS4xNzYuMDUxLS4zMjMuMDYtLjQzTDggMy4xMTlsLTMuNDkzIDYuOTg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25UZW1wZXJhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxNWEzLjUgMy41IDAgMDEtMS43NS02LjUzMkw3IDguMzI0VjIuNUExLjQ5NiAxLjQ5NiAwIDAxOS45MDggMkg4LjV2MUgxMHYxSDguNXYxSDEwdjFIOC41djFIMTB2MS4zMjRsLjI1LjE0NEEzLjUgMy41IDAgMDE4LjUgMTVNMTEgNy43NThWMi41YTIuNSAyLjUgMCAxMC01IDB2NS4yNThhNC41IDQuNSAwIDEwNSAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgOWEyLjUgMi41IDAgMTEwIDUgMi41IDIuNSAwIDAxMC01XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlbXBlcmF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UaW1lUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25UaW1lUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuODA5IDguODA3YTQuNSA0LjUgMCAwMS01LjU3Mi01Ljc1QTUgNSAwIDAwMy4wNCA5LjMxYS41LjUgMCAwMS0uOTY2LjI1OSA2IDYgMCAwMTUuNjcyLTcuNTUzIDQuNSA0LjUgMCAxMTYuMTE3IDYuMzEzIDYuMDAyIDYuMDAyIDAgMDEtNy44MDMgNS40MDkuNS41IDAgMTEuMzAzLS45NTQgNS4wMDEgNS4wMDEgMCAwMDYuNDQ1LTMuOTc5ek0xMS44NTkgNUgxMy41YS41LjUgMCAwMDAtMUgxMlYxLjVhLjUuNSAwIDAwLTEgMHYzYS41LjUgMCAwMC41LjVoLjM2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43NTcgMTUuODQ4bC0uNzc2LTIuODk3YTEuNSAxLjUgMCAwMTEuMDYtMS44MzhsMi44OTgtLjc3NmEuNS41IDAgMTEuMjU5Ljk2NmwtMi44OTguNzc2YS41LjUgMCAwMC0uMzUzLjYxM2wuNzc2IDIuODk4YS41LjUgMCAwMS0uOTY2LjI1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZVJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRpbWVsaW5lID0gZnVuY3Rpb24gRXVpSWNvblRpbWVsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcgNC41YS41LjUgMCAwMDEgMFY0aDFhMSAxIDAgMDAxLTFWMWExIDEgMCAwMC0xLTFINmExIDEgMCAwMC0xIDF2MmExIDEgMCAwMDEgMWgxdi41ek05IDFINnYyaDNWMXpNMiA3LjVhLjUuNSAwIDExMSAwIC41LjUgMCAwMS0xIDB6TTIuNSA5YTEuNSAxLjUgMCAwMS0xLjQxNS0xSC41YS41LjUgMCAwMTAtMWguNTg1YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGguNTg1YS41LjUgMCAwMTAgMWgtLjU4NWExLjUgMS41IDAgMDEtMi44MyAwaC0yLjE3YTEuNSAxLjUgMCAwMS0yLjgzIDBoLTIuMTdBMS41IDEuNSAwIDAxMi41IDl6TTEzIDcuNWEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHptLTUgMGEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHpNMi41IDEwYS41LjUgMCAwMC0uNS41di41SDFhMSAxIDAgMDAtMSAxdjJhMSAxIDAgMDAxIDFoM2ExIDEgMCAwMDEtMXYtMmExIDEgMCAwMC0xLTFIM3YtLjVhLjUuNSAwIDAwLS41LS41ek00IDE0di0ySDF2Mmgzem04LTMuNWEuNS41IDAgMDExIDB2LjVoMWExIDEgMCAwMTEgMXYyYTEgMSAwIDAxLTEgMWgtM2ExIDEgMCAwMS0xLTF2LTJhMSAxIDAgMDExLTFoMXYtLjV6bTIgMi41djFoLTN2LTJoM3YxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGltZXNsaWRlciA9IGZ1bmN0aW9uIEV1aUljb25UaW1lc2xpZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuOTIzIDhBNS45MyA1LjkzIDAgMDA4IDIuMDc3IDUuOTMgNS45MyAwIDAwMi4wNzcgOGE1LjkzIDUuOTMgMCAwMDYuMjk2IDUuOTEyYy4zMjgtLjAyMS42MjUuMjI3LjYyNS41NTZhLjUwNC41MDQgMCAwMS0uNDU4LjUxMSA3IDcgMCAxMTYuNDMtNi4zMzNjLS4wMzYuMzk4LS40ODcuNTgtLjgxNy4zNTRhLjU5NS41OTUgMCAwMS0uMjQ4LS41NGMuMDEyLS4xNTIuMDE4LS4zMDUuMDE4LS40NnptMS42ODQgMy4ybC00LjMyLTMuMDU1Yy0uNTYtLjM5Ni0xLjI4Ny4wNTktMS4yODcuOHY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4ek03LjQ2MiA3LjQ2Mkg0Ljc2OWEuNTM5LjUzOSAwIDAwMCAxLjA3Nkg4QS41MzkuNTM5IDAgMDA4LjUzOCA4VjMuNjkyYS41MzkuNTM5IDAgMDAtMS4wNzYgMHYzLjc3elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZXNsaWRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5BbGlhcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFsaWFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMDc1IDYuOTUzYS41LjUgMCAxMS0uNzA3LjcwNyAxLjUgMS41IDAgMDAtMi4xMjIgMEw0LjEyNSA5Ljc4MmExLjUgMS41IDAgMTAyLjEyMSAyLjEyMWwxLjE0NS0xLjE0NGEuNS41IDAgMDEuNzA3LjcwN0w2Ljk1MyAxMi42MWEyLjUgMi41IDAgMTEtMy41MzUtMy41MzVsMi4xMjEtMi4xMjJhMi41IDIuNSAwIDAxMy41MzYgMHptMy41MzUtMy41MzVhMi41IDIuNSAwIDAxMCAzLjUzNUwxMC40OSA5LjA3NWEyLjUgMi41IDAgMDEtMy41MzYgMCAuNS41IDAgMTEuNzA3LS43MDggMS41IDEuNSAwIDAwMi4xMjIgMGwyLjEyMS0yLjEyYTEuNSAxLjUgMCAxMC0yLjEyMS0yLjEyMkw4LjYzNyA1LjI2OWEuNS41IDAgMTEtLjcwNy0uNzA3bDEuMTQ1LTEuMTQ0YTIuNSAyLjUgMCAwMTMuNTM1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQWxpYXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xNSAzLjM5MmMyLjc5NyAwIDQuNTI0IDEuNjQ0IDQuNTE3IDQuMjg5LjAwNyAxLjgxNi0uNzA4IDIuODkzLTIuMjEgMy4wMDQtLjkwOC4wNzYtMS4wODEtLjI4Ny0xLjE1Ny0uNzI1aC0uMDQxYy0uMTYzLjQyLS45NjQuNzMyLTEuNzQ0LjY4My0xLjA1My0uMDY1LTIuMDgyLS44NDItMi4wOS0yLjU3Mi4wMDgtMS43MiAxLjA3MS0yLjQ0MSAxLjk1OS0yLjU4Ni44MDQtLjEzNSAxLjU5OC4xNTggMS43MjMuNDYyaC4wNTF2LS4zODZoMS4xOTV2My40NTJjLjAwNy4zLjEyOC40MjUuMzA0LjQyNS40IDAgLjY3Ny0uNTgzLjY3My0xLjg2MS4wMDQtMi4zNzYtMS43MDUtMi45MTQtMy4xODctMi45MTQtMi4zNCAwLTMuNDE1IDEuNTIyLTMuNDIyIDMuMzg3LjAwNyAyLjEyNyAxLjIyIDMuMjc3IDMuNDMzIDMuMjc3LjgwOCAwIDEuNTk4LS4xNzYgMi4wMDYtLjM0OWwuMzkzIDEuMTIyYy0uNDM1LjI3LTEuNDE5LjUwOC0yLjQ5My41MDgtMi45OCAwLTQuNzIzLTEuNjYtNC43MjctNC40OTYuMDA0LTIuODA0IDEuNzQ4LTQuNzIgNC44MTctNC43MnpNNy45NjQgNi43OWMtLjc2IDAtMS4xODUuNDU5LTEuMTg4IDEuMjQuMDAzLjY4My4zIDEuMzMyIDEuMjAyIDEuMzMyLjgyMSAwIDEuMDk0LS40NzMgMS4wNzctMS4zNDMtLjAwNC0uNzE4LS4yMDQtMS4yMy0xLjA5MS0xLjIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQXJyYXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BcnJheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjM5MiAxMlY0aDIuNzEzdjEuMTRoLTEuMjF2NS43MmgxLjIxVjEySDQuMzkyem03LjY5Mi04djhIOS4zN3YtMS4xNGgxLjIwOVY1LjE0SDkuMzdWNGgyLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BcnJheTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5CaW5hcnkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5CaW5hcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgNEg0djhoOFY0ek04LjUgNS41aC0zdjVoM3YtNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5CaW5hcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQm9vbGVhbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJvb2xlYW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxM0E1IDUgMCAxMTggM2E1IDUgMCAwMTAgMTB6bS0yLjgyOC0yLjE3MmE0IDQgMCAwMTUuNjU2LTUuNjU2Yy4wMDQuMDEzLTUuNjQ1IDUuNjc0LTUuNjU2IDUuNjU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJvb2xlYW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ2xhc3MgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5DbGFzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zMzMgNy4wMjdIOS4zNzVjLS4wNTYtLjcwOC0uNDgtMS4xODctMS4yMjItMS4xODctLjk3MiAwLTEuNS44MDYtMS41IDIuMTYgMCAxLjQzLjU0NSAyLjE2IDEuNDg2IDIuMTYuNzA4IDAgMS4xMzktLjQxNSAxLjIzNi0xLjA4bDEuOTU4LjAxNUMxMS4yMzYgMTAuNDE4IDEwLjE4MSAxMiA4LjA5NyAxMmMtMS45NTggMC0zLjQzLTEuNDEtMy40My00IDAtMi42IDEuNTE0LTQgMy40My00IDEuNzkyIDAgMy4wODQgMS4wOTUgMy4yMzYgMy4wMjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ2xhc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA0YTEgMSAwIDAxMS0xaDhhMSAxIDAgMDExIDF2NS45OTZhMSAxIDAgMDEtMSAxaC0xLjY2MUw3LjQgMTMuMkEuMjUuMjUgMCAwMTcgMTN2LTIuMDA0SDRhMSAxIDAgMDEtMS0xVjR6bTEuNSAxYS41LjUgMCAwMS41LS41aDZhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41aC0uOUw4IDExVjkuNUg1YS41LjUgMCAwMS0uNS0uNVY1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNzUgNmExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMi41IDBhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Db25zdGFudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbnN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuNDE0IDMuNzU3bDIuODI5IDIuODI5YTIgMiAwIDAxMCAyLjgyOGwtMi44MjkgMi44MjlhMiAyIDAgMDEtMi44MjggMEwzLjc1NyA5LjQxNGEyIDIgMCAwMTAtMi44MjhsMi44MjktMi44MjlhMiAyIDAgMDEyLjgyOCAwem0tMS43NDcgMi45MWExIDEgMCAwMC0xIDF2LjY2NmExIDEgMCAwMDEgMWguNjY2YTEgMSAwIDAwMS0xdi0uNjY2YTEgMSAwIDAwLTEtMWgtLjY2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db25zdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5EYXRlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRGF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMS41NjdDMTMgMTIuMzYgMTIuMzYgMTMgMTEuNTY3IDEzSDQuNDMzQzMuNjQgMTMgMyAxMi4zNiAzIDExLjU2N1Y0LjQzM0MzIDMuNjQgMy42NCAzIDQuNDMzIDNINnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w2LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w5LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMS41NjdDMTIuMzYgMyAxMyAzLjY0IDEzIDQuNDMzdjcuMTM0ek00IDZ2NS4zM2MwIC4zNy4zLjY3LjY3LjY3aDYuNjZjLjM3IDAgLjY3LS4zLjY3LS42N1Y2SDR6bTEuNSA0Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSAxMHpNOCAxMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEybC4wMDguMDg4YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDEwem0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgMTB6bS01LTEuNWMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOS41QS41MDUuNTA1IDAgMDE1IDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDguNXptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDkuNWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggOC41em0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA5LjVBLjUwNS41MDUgMCAwMTEwIDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA4LjV6TTUuNSA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgN3pNOCA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDd6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgN3pNNCA1aDh2LS4zM2MwLS4zNy0uMy0uNjctLjY3LS42N0g0LjY3QzQuMyA0IDQgNC4zIDQgNC42N1Y1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRGVuc2VWZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EZW5zZVZlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMTU0IDEyVjRoMi43MTN2MS4xNEg1LjY1OHY1LjcyaDEuMjFWMTJINC4xNTN6bTcuNjkyLTh2OEg5LjEzM3YtMS4xNGgxLjIwOVY1LjE0aC0xLjIxVjRoMi43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGVuc2VWZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRWxlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVsZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy4zOSA5LjczNmwtMS4wNDEuOTRMMy4yNTggOGwzLjA5LTIuNjc3IDEuMDQxLjk0LTIuMDMyIDEuNzIydi4wM2wyLjAzMiAxLjcyMXptMi43NzcuOTRsLTEuMDQtLjk0IDIuMDMyLTEuNzIxdi0uMDNMOS4xMjYgNi4yNjRsMS4wNC0uOTRMMTMuMjU5IDhsLTMuMDkxIDIuNjc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVsZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yMTEgMTJWNGg1LjU3OHYxLjU3SDcuMTQ1djEuNjQxaDMuMzU5djEuNTc0SDcuMTQ1djEuNjQ1aDMuNjQ0VjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVudW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bU1lbWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW1NZW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODIgMTJWOS4yNDdsMS4wMjMtLjg2MWEuNS41IDAgMDAtLjAwMy0uNzY4bC0xLjAyLS44NDRWNGg1LjU3OHYxLjU3SDkuNjE1djEuNjRoMy4zNnYxLjU3NWgtMy4zNnYxLjY0NWgzLjY0NVYxMkg3LjY4MnptLjc0My00LjEwM2EuMTM4LjEzOCAwIDAxMCAuMjA2TDYuMTU4IDkuOTdhLjEzMy4xMzMgMCAwMS0uMjE4LS4xMDN2LS45MzRIMi44NzNBLjEzMy4xMzMgMCAwMTIuNzQgOC44VjcuMmMwLS4wNzQuMDYtLjEzMy4xMzMtLjEzM0g1Ljk0di0uOTM0YS4xMzMuMTMzIDAgMDEuMjE4LS4xMDNsMi4yNjcgMS44Njd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bU1lbWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FdmVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjIyNSA1LjY1NmMwIC40MjMtLjEwNi43OS0uMzE4IDEuMTAyLS4yMTEuMzExLS41MS41Ny0uODk4Ljc3NWE1LjQzNSA1LjQzNSAwIDAxLTEuMzkyLjQ4NWMtLjU0LjExNy0xLjE0LjE5My0xLjc5OC4yMjlhNi4wNDcgNi4wNDcgMCAwMC0uMDM1LjY3YzAgLjI1OC4wMi41MS4wNjIuNzU3LjA0LjI0Ny4xMTQuNDY0LjIyLjY1MnMuMjUuMzQuNDMyLjQ1OC40MTQuMTc2LjY5Ni4xNzZjLjIxMSAwIC40NjctLjA0NC43NjYtLjEzMi4zLS4wODguNjItLjI0NC45Ni0uNDY3LjEwNi0uMDcuMTkyLS4xMjkuMjU2LS4xNzZhLjM2NS4zNjUgMCAwMS4yMi0uMDdjLjExOCAwIC4xOTcuMDYxLjIzOC4xODVhLjk5Ljk5IDAgMDEuMDYyLjI1NSA3LjEgNy4xIDAgMDEtLjU3My40NjcgNC45MyA0LjkzIDAgMDEtLjc3NS40NjdjLS4yODguMTQxLS42LjI2MS0uOTM0LjM2MS0uMzM1LjEtLjY3OC4xNS0xLjAzLjE1LS41NDEgMC0uOTgyLS4wODgtMS4zMjItLjI2NGEyLjA3MiAyLjA3MiAwIDAxLS43OTMtLjY4OCAyLjYyNiAyLjYyNiAwIDAxLS4zODgtLjkzMyA0Ljk0OSA0Ljk0OSAwIDAxLS4xMDYtMS4wMDVjMC0uNjM0LjEwMy0xLjI1Ny4zMDktMS44NjguMjA1LS42MS40OTktMS4xNTcuODgtMS42MzguMzgzLS40ODIuODM4LS44NyAxLjM2Ni0xLjE2M0EzLjU2NyAzLjU2NyAwIDAxOS4wOTMgNGMuNTk5IDAgMS4xMDQuMTI2IDEuNTE1LjM3OS40MTEuMjUyLjYxNy42NzguNjE3IDEuMjc3em0tMi40NjctLjk1MWMtLjIyMyAwLS40MzUuMDgtLjYzNS4yMzgtLjIuMTU4LS4zODEuMzczLS41NDYuNjQzLS4xNjQuMjctLjMwNS41NzgtLjQyMy45MjVhNi40MiA2LjQyIDAgMDAtLjI2NCAxLjEwMWMuNDctLjA0Ny44NjMtLjEzNSAxLjE4LS4yNjQuMzE4LS4xMy41Ny0uMjg1Ljc1OC0uNDY3LjE4OC0uMTgyLjMyMy0uMzg4LjQwNS0uNjE3LjA4My0uMjI5LjEyNC0uNDY3LjEyNC0uNzEzIDAtLjI3LS4wNTYtLjQ3OS0uMTY4LS42MjZhLjUxOS41MTkgMCAwMC0uNDMxLS4yMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FeGNlcHRpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FeGNlcHRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQ2MSA3LjMxaDMuMDU1YS43NC43NCAwIDAxLjY2IDEuMDc0bC0yLjE0MSA0LjIxMWEuNzQuNzQgMCAxMS0xLjMxOS0uNjdMOS4zMSA4Ljc5SDYuMjU2YS43NC43NCAwIDAxLS42Ni0xLjA3NWwyLjE5LTQuMzFhLjc0Ljc0IDAgMDExLjMxOS42N0w3LjQ2MSA3LjMxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV4Y2VwdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuMjcgMTJWNGg1LjQ2djEuNTdINy4yMDN2MS42NDFoMy4xOHYxLjU3NGgtMy4xOFYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmlsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODY3IDIuNjY3SDRhLjY2Ny42NjcgMCAwMC0uNjY3LjY2NnY5LjMzNGMwIC4zNjguMjk5LjY2Ni42NjcuNjY2aDhhLjY2Ny42NjcgMCAwMC42NjctLjY2NlY1LjYxOWEuNjY5LjY2OSAwIDAwLS4xODMtLjQ1OWwtMi4xMzMtMi4yODVhLjY2OC42NjggMCAwMC0uNDg0LS4yMDhtMS40NjYgNFYxMkg0LjY2N1Y0aDR2Mi4zMzNjMCAuMTg0LjE0OS4zMzQuMzMzLjMzNGgyLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZsYXR0ZW5lZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZsYXR0ZW5lZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuMjUgM2EuMjUuMjUgMCAwMC0uMjUuMjV2MmMwIC4xMzguMTEyLjI1LjI1LjI1aDkuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTJhLjI1LjI1IDAgMDAtLjI1LS4yNWgtOS41em0wIDMuNzVBLjI1LjI1IDAgMDAzIDd2MmMwIC4xMzguMTEyLjI1LjI1LjI1SDUuNUEuMjUuMjUgMCAwMDUuNzUgOVY3YS4yNS4yNSAwIDAwLS4yNS0uMjVIMy4yNXptLS4yNSA0YS4yNS4yNSAwIDAxLjI1LS4yNUg1LjVhLjI1LjI1IDAgMDEuMjUuMjV2MmEuMjUuMjUgMCAwMS0uMjUuMjVIMy4yNWEuMjUuMjUgMCAwMS0uMjUtLjI1di0yem0zLjMxLS43MjdjLS4wODItLjA3My0uMDgyLS4yMjQgMC0uMjk2bDMuMDU0LTIuNjgzYS4xNy4xNyAwIDAxLjE5LS4wMjZjLjA2NC4wMzIuMTA0LjEuMTA0LjE3NHYxLjM0MWwzLjE2MS0uMDE2Yy4xIDAgLjE4LjA4Ni4xOC4xOTJ2Mi4zYzAgLjEwNS0uMDguMTkxLS4xOC4xOTFsLTMuMTYxLjAxN3YxLjM0MWMwIC4wNzQtLjA0LjE0Mi0uMTAzLjE3NGEuMTcuMTcgMCAwMS0uMTktLjAyNUw2LjMxIDEwLjAyM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GbGF0dGVuZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4yNjYgNC4xNVY1LjYzYTIuNDEgMi40MSAwIDAwLS44NTktLjE0NWMtLjY5MiAwLTEuMDY1LjM0Ni0xLjE3NyAxLjA0M2wtLjExLjYyNWgxLjgyOHYxLjQ0SDguOTIxbC0uMjA0IDEuMTE1QzguNDU1IDExLjMyNSA3LjUxNyAxMiA1LjkgMTJjLS40NjkgMC0uODgyLS4wNjEtMS4xNjYtLjE2N3YtMS40OTVjLjI3My4xMTcuNTkxLjE3OC45MDMuMTc4LjY1OSAwIDEuMDEtLjI5IDEuMTI3LTEuMDE1bC4xNTctLjkxSDUuMjQ3VjcuMTUyaDEuODM3bC4xODgtLjg0MkM3LjUzNCA0LjcxNCA4LjQzMiA0IDEwLjE5IDRjLjM5IDAgLjg1My4wNjcgMS4wNzYuMTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuR2VvID0gZnVuY3Rpb24gRXVpSWNvblRva2VuR2VvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2MxLjYzNiAwIDMuMDg4Ljc4NSA0IDIgLjYyOC44MzYgMSAxLjg3NSAxIDNhNC45NzggNC45NzggMCAwMS0uOTk5IDNIMTJhNC45OTIgNC45OTIgMCAwMS00IDIgNC45OTIgNC45OTIgMCAwMS00LTEuOTk5VjExYTUgNSAwIDAxNC04em0uOTQ4IDhINy4wNTJjLjI3Ny42MjYuNjIzIDEgLjk0OCAxIC4zMjUgMCAuNjctLjM3NC45NDgtMXpNNiAxMWwtLjY0NS4wMDFjLjI3NC4yNDIuNTgxLjQ0Ni45MTQuNjA2QTUuNDQ1IDUuNDQ1IDAgMDE2IDExLjAwMXptNC42NDUuMDAxSDEwYTUuNTEgNS41MSAwIDAxLS4yNjkuNjA2Yy4zMzMtLjE2LjY0LS4zNjQuOTE0LS42MDZ6bS01LjEzMy0yLjVINC4wMzFjLjA2OC41NC4yNDMgMS4wNDguNTA1IDEuNWgxLjE3MmE5LjE4NiA5LjE4NiAwIDAxLS4xOTYtMS41em0zLjk3NSAwSDYuNTEzYy4wMy41NDQuMTA0IDEuMDUuMjEgMS41aDIuNTUzYy4xMDctLjQ1LjE4Mi0uOTU2LjIxLTEuNXptMi40ODIgMGgtMS40ODFhOS4xODYgOS4xODYgMCAwMS0uMTk2IDEuNWgxLjE3MmMuMjYyLS40NTIuNDM3LS45Ni41MDUtMS41ek01LjcwOCA2TDQuNTM1IDZjLS4yNjEuNDUyLS40MzcuOTYtLjUwNCAxLjVoMS40ODFBOS4xODcgOS4xODcgMCAwMTUuNzA4IDZ6bTMuNTY4IDBINi43MjRjLS4xMDcuNDQ5LS4xODIuOTU1LS4yMSAxLjQ5OWgyLjk3M2E4LjQ3OSA4LjQ3OSAwIDAwLS4yMS0xLjV6TTExLjQ2NSA2aC0xLjE3M2MuMTAyLjQ2Ny4xNy45NzIuMTk2IDEuNWgxLjQ4MWEzLjk3NCAzLjk3NCAwIDAwLS41MDQtMS41ek02LjI2OSA0LjM5M2wtLjEyNC4wNjJjLS4yODYuMTUtLjU1MS4zMzMtLjc5LjU0NUg2YTUuNTEgNS41MSAwIDAxLjI2OS0uNjA3ek04IDRjLS4zMjYgMC0uNjcxLjM3NS0uOTQ4IDFoMS44OTZDOC42NzEgNC4zNzYgOC4zMjYgNCA4IDR6bTEuNzMuMzkzbC4wMzguMDcxYy4wODMuMTY4LjE2MS4zNDcuMjMyLjUzNmguNjQ2YTQuMDA2IDQuMDA2IDAgMDAtLjkxNS0uNjA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkdlbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5IaXN0b2dyYW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5IaXN0b2dyYW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNoNHY1aDJWNS41aDRWMTNIMy4wMDF2LTFIM1Yzem0xIDloMlY0SDR2OHptMyAwaDJWOUg3djN6bTMgMGgyVjYuNWgtMlYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5IaXN0b2dyYW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSVAgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JUChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMSAzYTIgMiAwIDAxMiAydjZhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNnptLTEgMkg4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNXpNNiA1SDV2NmgxVjV6bTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbklQOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkludGVyZmFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkludGVyZmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04Ljk2NyAxMC42NTNoMS43MjdWMTJINS4zMDZ2LTEuMzQ3aDEuNzI3VjUuMzQ3SDUuMzA2VjRoNS4zODh2MS4zNDdIOC45Njd2NS4zMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSW50ZXJmYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkpvaW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Kb2luKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgNC41djEuMDI1YzAgMS4yNjktMS4xODUgMS45MDgtMi4xMTIgMS43MzdhLjc1Ljc1IDAgMTAwIDEuNDc1Yy45MjctLjE3IDIuMTEyLjQ3IDIuMTEyIDEuNzM5djEuMDIzaDR2LTEuMDA1YTIuNSAyLjUgMCAwMTAtNC45ODhWNC41aC00ek0xMyA0YTEgMSAwIDAwLTEtMUg3YTEgMSAwIDAwLTEgMXYxLjUyNWMwIC4xNzItLjE3Mi4yOTMtLjM0MS4yNjJhMi4yNSAyLjI1IDAgMTAwIDQuNDI2Yy4xNy0uMDMxLjM0MS4wOS4zNDEuMjYyVjEyYTEgMSAwIDAwMSAxaDVhMSAxIDAgMDAxLTFWOS4wMDRhLjE2LjE2IDAgMDAtLjA0LS4xMDVjLS4xMDktLjEyNS0uNTk0LS4xNi0uNzMyLS4wNjhhMSAxIDAgMTEwLTEuNjYyYy4xMzguMDkyLjYyMy4wNTcuNzMyLS4wNjhhLjE2LjE2IDAgMDAuMDQtLjEwNVY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkpvaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjY2NyA2LjU0MkEzLjIwOCAzLjIwOCAwIDAxOC44NiA5LjY5NGwtLjQzOC40OTJhLjQzNy40MzcgMCAwMS0uMzI3LjE0N2gtLjY3OHYuNzNhLjQzNy40MzcgMCAwMS0uNDM4LjQzN0g2LjI1di43M2EuNDM3LjQzNyAwIDAxLS40MzguNDM3SDMuNzcyYS40MzcuNDM3IDAgMDEtLjQzOC0uNDM4di0xLjQyM2MwLS4xMTYuMDQ2LS4yMjcuMTI4LS4zMWwyLjk1LTIuOTQ5YTMuMjA4IDMuMjA4IDAgMDEzLjA0Ny00LjIxNCAzLjIwMiAzLjIwMiAwIDAxMy4yMDkgMy4yMDl6bS0zLjIwOS0uODc1YS44NzUuODc1IDAgMTAxLjc1IDAgLjg3NS44NzUgMCAwMC0xLjc1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbktleXdvcmQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXl3b3JkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzMgMTAuMjhjLS4xMi4wNC0uMjkuMDctLjQyLjA3LS4yMyAwLS40My0uMDgtLjUzLS4zbC0uNjMtMS4zNCAyLjMyLTIuODFIOS4zTDcuNzYgNy45M2gtLjA5TDguMjIgNEg2LjU5bC0xLjA1IDcuNWgxLjYzbC4yNy0xLjk0aC4xbC40MyAxLjEyYy4yNy43MS43NC45MiAxLjMzLjkyLjIzIDAgLjYtLjA0Ljg2LS4xMWwuMTctMS4yMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXl3b3JkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldGhvZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldGhvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zLjMzMyAxMS4wMjdWNS4wNWgyLjA1OXYxLjEzNmguMDYzYy4yNS0uNzQ3Ljg5MS0xLjIxNCAxLjcyOC0xLjIxNC44NDggMCAxLjUyNC40ODMgMS42NSAxLjIxNGguMDYzYy4yMDQtLjczMS45MjctMS4yMTQgMS44MjItMS4yMTQgMS4xNTUgMCAxLjk0OS43OTggMS45NDkgMi4wMjN2NC4wM2gtMi4xNjlWNy41NDJjMC0uNTIxLS4yOS0uODQtLjczOC0uODRzLS43MjMuMzE5LS43MjMuODR2My40ODZINi45NjNWNy41NGMwLS41MjEtLjI5LS44NC0uNzM5LS44NC0uNDQ3IDAtLjcyMi4zMTktLjcyMi44NHYzLjQ4NkgzLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRob2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0cmljQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzYTEgMSAwIDAwLTEgMXYxSDlhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwVjdoMWExIDEgMCAxMDAtMmgtMVY0YTEgMSAwIDAwLTEtMXpNNSA3YTEgMSAwIDAwLTEgMXYxSDNhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwdi0xaDFhMSAxIDAgMTAwLTJINlY4YTEgMSAwIDAwLTEtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRoLS41YS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtLjUuNWgtMWEuNS41IDAgMDEwLTFINXYtMmgtLjVhLjUuNSAwIDAxMC0xSDVWN2gtLjVhLjUuNSAwIDAxMC0xSDVWNHptMyAxYTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDJhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFIOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Nb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Nb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJsNS4xOTYgM3YuMTc4bC0uODY2LjQ2OFY1LjVMOCAzIDMuNjcgNS41djVMOCAxM2w0LjMzLTIuNVY1Ljc3bC44NjYtLjQ3NFYxMUw4IDE0bC01LjE5Ni0zVjVMOCAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4yNDMgNC40MjlMOS41OTcgNy4wNCA4IDcuOTI4IDMuNzQzIDUuNTYzYS41LjUgMCAxMC0uNDg2Ljg3NEw3LjUgOC43OTRWMTMuNWgxVjguNzk0bDQuMjQzLTIuMzU3YS41MDguNTA4IDAgMDAuMDYtLjA0bC4zOTItLjIwMlY1LjA0N2wtLjkxNy41MDVhLjU3My41NzMgMCAwMC0uMDIuMDFsLS4xMDYuMDYtLjE5MS4xMDUtMS4zNTUuNzUzLTQuODQ5LTIuOTA5LS41MTQuODU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA4LjQxNmwtLjgwNC0xLjY4aC0uMDM2djUuNjRINVY0aDEuOTkybDIuMjkyIDMuOTYuODA0IDEuNjhoLjAzNlY0aDEuNzE2djguMzc2SDkuODQ4bC0yLjI5Mi0zLjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5hbWVzcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNjMS4wNDQgMCAxLjkxMy43NTcgMS45OTQgMS43MzZsLjAwNi4xNDl2Ni4yM2MwIDEtLjgyIDEuODA1LTEuODQ1IDEuODhMMTEgMTNIOS41MDFhLjUuNSAwIDAxLS4wOS0uOTkybC4wOS0uMDA4SDExYy41MiAwIC45MzctLjM1Ljk5My0uNzgzbC4wMDctLjEwMnYtNi4yM2MwLS40NDUtLjM3OS0uODI3LS44ODItLjg3OUwxMSA0SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDNIMTF6TTYuNSAzYS41LjUgMCAwMS4wOS45OTJMNi41IDRINWMtLjUyIDAtLjkzNy4zNS0uOTkzLjc4M0w0IDQuODg1djYuMjNjMCAuNDQ1LjM3OS44MjcuODgyLjg3OUw1IDEyaDEuNWEuNS41IDAgMDEuMDkuOTkyTDYuNSAxM0g1Yy0xLjA0NCAwLTEuOTEzLS43NTctMS45OTQtMS43MzZMMyAxMS4xMTV2LTYuMjNjMC0xIC44Mi0xLjgwNSAxLjg0NS0xLjg4TDUgM2gxLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01Ljg2NCA3LjI1YS43MTQuNzE0IDAgMTEwIDEuNDI5LjcxNC43MTQgMCAwMTAtMS40Mjl6bTIuMTQzIDBhLjcxNC43MTQgMCAxMTAgMS40MjkuNzE0LjcxNCAwIDAxMC0xLjQyOXptMi4xNDMgMGEuNzE0LjcxNCAwIDExMCAxLjQyOS43MTQuNzE0IDAgMDEwLTEuNDI5elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTnVsbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwMiAxMi40MTJsLS45NjIuOTYyYTEgMSAwIDAxLTEuNDE0LTEuNDE0bC45NjItLjk2MmE1LjMzMyA1LjMzMyAwIDAxNy40MS03LjQxbC45NjItLjk2MmExIDEgMCAxMTEuNDE0IDEuNDE0bC0uOTYyLjk2MmE1LjMzMyA1LjMzMyAwIDAxLTcuNDEgNy40MXptLjk2Ni0uOTY2YTQgNCAwIDAwNS40NzgtNS40NzhsLTUuNDc4IDUuNDc4em0tMS40MTQtMS40MTRsNS40NzgtNS40NzhhNCA0IDAgMDAtNS40NzggNS40Nzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVsbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjggOS44MTJoLS44NDJsLS43OCAyLjMzNUg1LjAzMWwuNzgtMi4zMzVINC42bC4xODItMS4wNDNoMS4zNzNsLjUwNy0xLjUwNEg1LjQ1NGwuMTg4LTEuMDQyaDEuMzY3bC43OTItMi4zN0g4Ljk0bC0uNzkyIDIuMzdoLjg0OWwuNzkyLTIuMzdoMS4xNDVsLS43OTIgMi4zN0gxMS40bC0uMTgyIDEuMDQySDkuOEw5LjI5MyA4Ljc3aDEuMjQ4bC0uMTgzIDEuMDQzSDguOTQ2bC0uNzc1IDIuMzM1SDcuMDI2TDcuOCA5LjgxMnptLS41LTEuMDQzaC44NDJsLjUxMy0xLjUwNGgtLjg0OUw3LjMgOC43N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuT2JqZWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT2JqZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjMgMTJjLTEuMjk0IDAtMi4zODMtLjEwNS0yLjM4My0xLjgwMlY5LjZjMC0uNjM4LS4yNDctLjkxNC0uOTgtLjkxNHYtMS4zN2MuNzMzIDAgLjk4LS4yOC45OC0uOTE1di0uNkM0LjI0NyA0LjEwNSA1LjMzNiA0IDYuNjMxIDR2MS4xNGMtLjc1OSAwLS44ODYuMjcyLS44ODYuODQzdi44MTNjMCAuNDc5LS4yMjUuOTM2LTEuMjEyIDEuMTMzdi4xNDJjLjk4Ny4xOTcgMS4yMTIuNjU0IDEuMjEyIDEuMTMzdi44MTNjMCAuNTcuMTI3Ljg0NC44ODYuODQ0VjEyem0yLjI2Ni04YzEuMjk1IDAgMi4zODQuMTA1IDIuMzg0IDEuODAyVjYuNGMwIC42MzguMjQ3LjkxNC45OC45MTR2MS4zN2MtLjczMyAwLS45OC4yOC0uOTguOTE1di42QzExLjI4IDExLjg5NSAxMC4xOSAxMiA4Ljg5NiAxMnYtMS4xNGMuNzU5IDAgLjg4Ni0uMjcyLjg4Ni0uODQzdi0uODEzYzAtLjQ3OS4yMjUtLjkzNiAxLjIxMi0xLjEzM1Y3LjkzYy0uOTg3LS4xOTctMS4yMTItLjY1NC0xLjIxMi0xLjEzM3YtLjgxM2MwLS41Ny0uMTI3LS44NDQtLjg4Ni0uODQ0VjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT2JqZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk9wZXJhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT3BlcmF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi42NjcgOC4wMDJjMC0xLjUuMzk0LTIuNzQzIDEuMjQ4LTMuODIyaDEuNDM3Yy0uNjUyLjgtMS4xNCAyLjM4OC0xLjE0IDMuODIyIDAgMS40My40ODggMy4wMTggMS4xNCAzLjgxOEgzLjkxNWMtLjg1NC0xLjA4LTEuMjQ4LTIuMzIyLTEuMjQ4LTMuODE4ek02Ljc3IDkuOTk4bC0uODE4LS44MDMgMS4yMy0xLjE5Ny0xLjIzLTEuMjAzLjgzLS43OTMgMS4yMjEgMS4xOTNMOS4yMyA2LjAwMmwuODE4Ljc5My0xLjIyNyAxLjIgMS4yMjcgMS4yLS44MTguODAzTDggOC43OTUgNi43NyA5Ljk5OHptNi41NjMtMmMwIDEuNS0uMzk0IDIuNzQzLTEuMjQ4IDMuODIyaC0xLjQzN2MuNjUyLS44IDEuMTQtMi4zODggMS4xNC0zLjgyMiAwLTEuNDMtLjQ4OC0zLjAxOC0xLjE0LTMuODE4aDEuNDM3Yy44NTQgMS4wOCAxLjI0OCAyLjMyMiAxLjI0OCAzLjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PcGVyYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA0OSAzLjc4NWwzLjg1MiAxLjAwNi00LjA0OSAxLjEwM0w0IDQuNzkxbDMuOTUxLTEuMDA2YS4xOS4xOSAwIDAxLjA5OCAwem0uMDczIDIuNjU0bDQuNTQ1LTEuMzA2djUuNDVsLS4xMzEuMTg0LTQuNDE0IDEuNDU1VjYuNDM5em0tNC43ODkgNC4xNDVWNS4xODhMNy40OTggNi40MXY1LjgxbC00LjAzNC0xLjQ1My0uMTMtLjE4M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBhcmFtZXRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBhcmFtZXRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFyYW1ldGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBlcmNvbGF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QZXJjb2xhdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjUgN2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0wIDFhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpNMTEgOWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMCAxYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0tMi41IDEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBlcmNvbGF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUHJvcGVydHkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Qcm9wZXJ0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUHJvcGVydHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFuZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5nZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MiA1LjExNmEuNS41IDAgMDAtLjcwNC43MDRsLjA2NC4wNjRMMTEuNzE5IDhsLTIuNTQgMi4xMTZhLjUuNSAwIDAwLS4xMTQuNjNsLjA1LjA3NGEuNS41IDAgMDAuNjMuMTE1bC4wNzUtLjA1IDMtMi41YS41LjUgMCAwMC4wNzEtLjY5N2wtLjA3LS4wNzItMy0yLjV6TTYuMTggNS4xMTZhLjUuNSAwIDAxLjcwNC43MDRsLS4wNjQuMDY0TDQuMjgxIDhsMi41NCAyLjExNmEuNS41IDAgMDEuMTE0LjYzbC0uMDUuMDc0YS41LjUgMCAwMS0uNjMuMTE1bC0uMDc1LS4wNS0zLTIuNWEuNS41IDAgMDEtLjA3MS0uNjk3bC4wNy0uMDcyIDMtMi41elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5nZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblJlcG8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SZXBvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTMzIDkuMDY3Yy0xLjc5MiAwLTIuMzc4LjcyLTIuNTcgMS4xOTRhMS42MDEgMS42MDEgMCAxMS0xLjE2My0uMDM3VjUuNzc2YTEuNTk1IDEuNTk1IDAgMDEtMS4wNjctMS41MWMwLS44ODUuNzE1LTEuNiAxLjYtMS42Ljg4NiAwIDEuNi43MTUgMS42IDEuNiAwIC43LS40NDIgMS4yOTEtMS4wNjYgMS41MXYyLjgyMUM2LjMzNiA4LjI1MSA3LjAxOSA4IDggOGMxLjQyNCAwIDEuODk5LS43MTUgMi4wNTMtMS4xOWExLjYwMyAxLjYwMyAwIDAxLS45ODYtMS40NzdjMC0uODg1LjcxNC0xLjYgMS42LTEuNi44ODUgMCAxLjYuNzE1IDEuNiAxLjZhMS41OSAxLjU5IDAgMDEtMS4xMTUgMS41MjZjLS4xMzkuNzYyLS42NTYgMi4yMDgtMi42MTkgMi4yMDh6bS0zLjIgMi4xMzNhLjUzNS41MzUgMCAwMC0uNTMzLjUzM2MwIC4yOTQuMjQuNTM0LjUzMy41MzRhLjUzNS41MzUgMCAwMDAtMS4wNjd6bTAtNy40NjdhLjUzNS41MzUgMCAwMC0uNTMzLjUzNGMwIC4yOTMuMjQuNTMzLjUzMy41MzMuMjk0IDAgLjUzNC0uMjQuNTM0LS41MzNhLjUzNS41MzUgMCAwMC0uNTM0LS41MzR6TTEwLjY2NyA0LjhhLjUzNS41MzUgMCAwMC0uNTM0LjUzMy41MzUuNTM1IDAgMDAxLjA2NyAwIC41MzUuNTM1IDAgMDAtLjUzMy0uNTMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJlcG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU2VhcmNoVHlwZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlYXJjaFR5cGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI3IDcuNWExIDEgMCAxMTIgMCAxIDEgMCAwMS0yIDB6TTguNzcgNy41YTEgMSAwIDExMiAwIDEgMSAwIDAxLTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNzAyIDEwLjY4MmE0LjUwMSA0LjUwMSAwIDAxLTUuNzk2LjQ4Mkw0LjI4IDEyLjc4OWEuNzUuNzUgMCAwMS0xLjA2LTEuMDZMNC44NDcgMTAuMWE0LjUwMSA0LjUwMSAwIDExNi44NTUuNTgxem0tNS4zMDQtMS4wNmEzIDMgMCAxMDQuMjQzLTQuMjQzQTMgMyAwIDAwNi4zOTggOS42MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TZWFyY2hUeXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblNoYXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2hhcGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTB2M2gtM3YtMUg2djFIM3YtM2gxVjZIM1YzaDN2MWg0VjNoM3YzaC0xdjRoMXptLTggMUg0djFoMXYtMXptNyAwaC0xdjFoMXYtMXpNNSA0SDR2MWgxVjR6bTcgMGgtMXYxaDFWNHptLTEgMmgtMVY1SDZ2MUg1djRoMXYxaDR2LTFoMVY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNoYXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3RydWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RydWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNjY3IDQuNjY3aDIuNjY2djIuNjY2SDQuNjY3VjQuNjY3em0wIDRoMi42NjZ2Mi42NjZINC42NjdWOC42Njd6bTQtNGgyLjY2NnYyLjY2Nkg4LjY2N1Y0LjY2N3ptMCA0aDIuNjY2djIuNjY2SDguNjY3VjguNjY3ek0zLjMzMyAzLjMzM3Y5LjMzNGg5LjMzNFYzLjMzM0gzLjMzM3ptMC0xLjMzM2g5LjMzNEMxMy40MDMgMiAxNCAyLjU5NyAxNCAzLjMzM3Y5LjMzNGMwIC43MzYtLjU5NyAxLjMzMy0xLjMzMyAxLjMzM0gzLjMzM0ExLjMzMyAxLjMzMyAwIDAxMiAxMi42NjdWMy4zMzNDMiAyLjU5NyAyLjU5NyAyIDMuMzMzIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3RydWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN5bWJvbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN5bWJvbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMzE2IDE0YTYgNiAwIDExMC0xMiA2IDYgMCAwMTAgMTJ6bTAtMS4zMzNhNC42NjcgNC42NjcgMCAxMDAtOS4zMzQgNC42NjcgNC42NjcgMCAwMDAgOS4zMzR6bTIuMTktNS43MmgxLjE0M2MuMDE5IDEuNDQ4LS43OTMgMi4zMzgtMS45MjIgMi4zMzgtLjYzMiAwLTEuMTk0LS4yNjctMS43MDYtLjgxMS0uMzYtLjM5Ny0uNjM2LS41NzYtMS0uNTc2LS41MTcgMC0uODQ5LjM1NS0uODg1IDEuMDgzSDQuOTgzYy4wMTQtMS40Ny44NTgtMi4zMTQgMS45NS0yLjMxNC41OTUgMCAxLjEyNS4yNDkgMS42NzguODAyLjM5Mi4zODIuNjQxLjU5NSAxLjAzOC41OTUuNDg0IDAgLjg1Ny0uMzIzLjg1Ny0xLjExNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TeW1ib2w7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuVGFnID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgOGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCA0YTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDYuOTg5YTEgMSAwIDAwLjgyNS0uNDM2bDIuMDUtM2ExIDEgMCAwMDAtMS4xMjhsLTIuMDUtM0ExIDEgMCAwMDEwLjk5IDRINHptLjc1IDEuMjVhLjUuNSAwIDAwLS41LjV2NC41YS41LjUgMCAwMC41LjVoNS43NDVhLjUuNSAwIDAwLjQwNS0uMjA2bDEuNjM2LTIuMjVhLjUuNSAwIDAwMC0uNTg4TDEwLjkgNS40NTZhLjUuNSAwIDAwLS40MDUtLjIwNkg0Ljc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5UZXh0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5UZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblRva2VuQ291bnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Ub2tlbkNvdW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDN2M2g1VjR6TTEzIDlIOHYzaDVWOXpNMTAgNGgzdjNoLTNWNHpNNiA5SDN2M2gzVjl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVG9rZW5Db3VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5WYXJpYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZhcmlhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjQ5IDQuNjY3bDEuMzI2IDQuN2guMDVsMS4zMjYtNC43aDEuOTgybC0yLjEzNCA2LjY2Nkg2LjgwMUw0LjY2NyA0LjY2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WYXJpYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhaW5pbmcgPSBmdW5jdGlvbiBFdWlJY29uVHJhaW5pbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zODYgOS44MzZhMi41IDIuNSAwIDExMy42MTEuNjY3QzE1LjIxMiAxMS4xNzMgMTYgMTIuNDYgMTYgMTR2MS41YS41LjUgMCAxMS0xIDBWMTRjMC0xLjcyNC0xLjI3Ni0zLTMtMy0uOTEgMC0xLjI5OC0uMDItMS44MDUtLjEyMi0xLjI1LS4yNTQtMi4zMzMtMS0zLjU4NS0yLjU2NmEuNS41IDAgMTEuNzgtLjYyNGMuOSAxLjEyNCAxLjY1MyAxLjc0IDIuNDM0IDIuMDQzLjE1NS4wNTIuMzQ1LjA4My41NjIuMTA1em0xLjc4NS4xMjhjLjA4My4wMS4xNjcuMDIxLjI1MS4wMzRMMTIuNSAxMGExLjUgMS41IDAgMTAtLjMzLS4wMzZ6TTkuNzggMTEuOTdhLjUuNSAwIDAxLjUuNWMwIC4wNzYtLjA0Ny4yMjYtLjA1LjIzMS0uMTc5LjM4LS4yMy43NzQtLjIzIDEuMzAydjEuNWEuNS41IDAgMTEtMSAwdi0xLjVjMC0uNjU3LjA3Mi0xLjE4Ni4zMDctMS42OTZhLjUuNSAwIDAxLjQ3My0uMzM3ek01Ljk1OCA1Ljc3MmEuNS41IDAgMDEtLjc4LjYyNUwzLjExIDMuODEyYS41LjUgMCAxMS43OC0uNjI0bDIuMDY4IDIuNTg0ek0xIDExaDUuNWEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxLS41LS41Vi41QS41LjUgMCAwMS41IDBoMTJhLjUuNSAwIDAxLjUuNXYzYS41LjUgMCAxMS0xIDBWMUgxdjEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFpbmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhc2ggPSBmdW5jdGlvbiBFdWlJY29uVHJhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzaDV2MUgwVjNoNVYxYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2MnptLTcuMDU2IDhIN3YxSDQuMWwuMzkyIDIuNTE5Yy4wNDIuMjY5LjI1NC40NTguNDkzLjQ1OGg2LjAzYy4yMzkgMCAuNDUxLS4xODkuNDkzLS40NThsMS40OTgtOS41NzZIMTRsLTEuNTA0IDkuNzNjLS4xMTYuNzQ3LS43NCAxLjMwNC0xLjQ4MSAxLjMwNGgtNi4wM2MtLjc0MSAwLTEuMzY1LS41NTctMS40ODEtMS4zMDRsLTEuNTExLTkuNzNIOVY1Ljk1SDMuMTU3TDMuNDc2IDhIOHYxSDMuNjMybC4zMTIgMnpNNiAzaDRWMUg2djJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25VbmZvbGQgPSBmdW5jdGlvbiBFdWlJY29uVW5mb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNCAzLjgwOEw3LjUzIDEuNTFhLjY3LjY3IDAgMDEuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAwMC0uOTNMOS40MTYuNTc4YTIuMDIgMi4wMiAwIDAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwMDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHptMCA4LjM4NGwyLjM5IDIuMjk4YS42Ny42NyAwIDAwLjk0MiAwbDIuMzg5LTIuMjk4YS42NzcuNjc3IDAgMDEuOTQ0IDAgLjY1LjY1IDAgMDEwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwMTAtLjkzLjY3Ny42NzcgMCAwMS45NDQgMHpNMTYgNkgwdjRoMTZWNnpNMSA5VjdoMTR2MkgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25VbmZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVubGluayA9IGZ1bmN0aW9uIEV1aUljb25VbmxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU2NSAxMC44M2EuNS41IDAgMTEuODE5LjU3M2wtMS44NzcgMi42OGMtLjk2MyAxLjM3Ni0zLjAyIDEuNTUtNC41ODguNDVDLjM1IDEzLjQzNi0uMTkxIDExLjQ0NS43NzMgMTAuMDdMMy42NCA1Ljk3M2MuOTYzLTEuMzc1IDMuMDE5LTEuNTQ4IDQuNTg3LS40NWEuNS41IDAgMTEtLjU3My44MkM2LjUwOSA1LjU0IDUuMDggNS42NiA0LjQ2IDYuNTQ2bC0yLjg2OCA0LjA5NWMtLjYyMS44ODctLjI0NSAyLjI3LjkgMy4wNzMgMS4xNDYuODAyIDIuNTc1LjY4MiAzLjE5Ni0uMjA1bDEuODc3LTIuNjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03Ljg5MiAzLjQzYS41LjUgMCAxMS0uNTc0LS44MTlMMTAgLjczNGMxLjM3Ni0uOTYzIDMuMzY3LS40MjIgNC40NjUgMS4xNDYgMS4wOTggMS41NjkuOTI2IDMuNjI1LS40NSA0LjU4OEw5LjkxOCA5LjMzNmMtMS4zNzUuOTYzLTMuMzY2LjQyMi00LjQ2NC0xLjE0NmEuNS41IDAgMTEuODE5LS41NzRjLjgwMiAxLjE0NiAyLjE4NSAxLjUyMiAzLjA3Mi45TDEzLjQ0IDUuNjVjLjg4Ni0uNjIxIDEuMDA2LTIuMDUuMjA0LTMuMTk1LS44MDItMS4xNDYtMi4xODYtMS41MjItMy4wNzItLjlMNy44OTIgMy40M3pNNiAuNXYzYS41LjUgMCAwMS0xIDB2LTNhLjUuNSAwIDAxMSAwek0xLjA1OCAyLjIzbDIuNDU4IDEuNzJhLjUuNSAwIDAxLS41NzQuODJMLjQ4NCAzLjA1YS41LjUgMCAxMS41NzQtLjgyem0xMiA3LjA5M2wyLjQ1NyAxLjcyYS41LjUgMCAxMS0uNTczLjgybC0yLjQ1Ny0xLjcyYS41LjUgMCAxMS41NzMtLjgyem0tMi4wOTkgMS4xODF2M2EuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAxMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyID0gZnVuY3Rpb24gRXVpSWNvblVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5YTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wLTFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgMTQuMjkxQTkuMDUzIDkuMDUzIDAgMDA4IDExYTkuMDUzIDkuMDUzIDAgMDAtNyAzLjI5MWwuNzE1LjcxQTguMDQ3IDguMDQ3IDAgMDE4IDExLjk5NiA4LjA0NyA4LjA0NyAwIDAxMTQuMjg2IDE1bC43MTQtLjcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyQXZhdGFyID0gZnVuY3Rpb24gRXVpSWNvblVzZXJBdmF0YXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgdmlld0JveDogXCIwIDAgMTggMThcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjY4OSAxMS4xMzJjMS4xNTUgMS4yMjIgMS45NTMgMi44NzkgMi4xODMgNC43NDhhMS4wMDcgMS4wMDcgMCAwMS0xIDEuMTJIMy4wMDdhMS4wMDUgMS4wMDUgMCAwMS0xLTEuMTJjLjIzLTEuODcgMS4wMjgtMy41MjYgMi4xODMtNC43NDguMjQ3LjIyOC41MDUuNDQyLjc4Mi42MzMtMS4wMzggMS4wNjktMS43NjUgMi41NS0xLjk3MiA0LjIzN0wxNC44NzIgMTZjLS4yMDQtMS42ODYtLjkzLTMuMTY2LTEuOTY2LTQuMjM1YTcuMDEgNy4wMSAwIDAwLjc4My0uNjMzek04LjkzOSAxYzEuOSAwIDMgMiA0LjM4IDIuNjMzYTIuNDgzIDIuNDgzIDAgMDEtMS44OC44NjdjLS4yOTggMC0uNTc5LS4wNi0uODQ0LS4xNTdBMy43MjYgMy43MjYgMCAwMTcuNjkgNS43NWMtMS4zOTUgMC0zLjc1LjI1LTMuMjQ1LTEuOTAzQzUuOTQgMyA2Ljk1MiAxIDguOTQgMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTQgMmMyLjIwNSAwIDQgMS43OTQgNCA0cy0xLjc5NSA0LTQgNGMtMi4yMDcgMC00LTEuNzk0LTQtNHMxLjc5My00IDQtNG0wIDlBNSA1IDAgMTA4LjkzNy45OTkgNSA1IDAgMDA4Ljk0IDExXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyQXZhdGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VycyA9IGZ1bmN0aW9uIEV1aUljb25Vc2VycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjQ4MiA0LjM0NGEyIDIgMCAxMC0yLjk2MyAwYy0uMDguMDQyLS4xNTYuMDg3LS4yMy4xMzYtLjQ1Ny4zMDUtLjc1LjcwNC0uOTMzIDEuMDczQTMuNDU3IDMuNDU3IDAgMDAxIDYuOTc4VjlhMSAxIDAgMDAxIDFoMi41YTMuNjkgMy42OSAwIDAxLjY4NC0uOTYyTDUuMTcxIDlIMlY3czAtMiAyLTJjMS4wMDcgMCAxLjUwNy41MDcgMS43NTUgMS4wMS4yMjUtLjI1NC40OTMtLjQ3Ljc5My0uNjM2YTIuNzE3IDIuNzE3IDAgMDAtMS4wNjYtMS4wM3pNNCA0YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0xMCA2aC0yLjVhMy42ODQgMy42ODQgMCAwMC0uNjg0LS45NjJMMTAuODI5IDlIMTRWN3MwLTItMi0yYy0xLjAwNyAwLTEuNTA3LjUwNy0xLjc1NSAxLjAxYTMuMDEyIDMuMDEyIDAgMDAtLjc5My0uNjM2IDIuNzE2IDIuNzE2IDAgMDExLjA2Ni0xLjAzIDIgMiAwIDExMi45NjMgMGMuMDguMDQyLjE1Ni4wODcuMjMuMTM2LjQ1Ny4zMDUuNzUuNzA0LjkzMyAxLjA3M0EzLjQ1MyAzLjQ1MyAwIDAxMTUgNi45NDRWOWExIDEgMCAwMS0xIDF6bS0yLTZhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgOGMwIC41MTctLjE5Ni45ODktLjUxOCAxLjM0NGEyLjc1NSAyLjc1NSAwIDAxMS4xNjMgMS4yMUEzLjQ1MyAzLjQ1MyAwIDAxMTEgMTEuOTc3VjE0YTEgMSAwIDAxLTEgMUg2YTEgMSAwIDAxLTEtMXYtMi4wMjJhMi4wMDUgMi4wMDUgMCAwMS4wMDYtLjEzNSAzLjQ1NiAzLjQ1NiAwIDAxLjM1LTEuMjkgMi43NTUgMi43NTUgMCAwMTEuMTYyLTEuMjFBMiAyIDAgMTExMCA4em0tNCA0djJoNHYtMnMwLTItMi0yLTIgMi0yIDJ6bTMtNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNSAxMVY1SDExVjMuNUg1VjVIMy41djZINXYxLjVoNlYxMWgxLjV6bTEgMEgxNXY0aC00di0xLjVINVYxNUgxdi00aDEuNVY1SDFWMWg0djEuNWg2VjFoNHY0aC0xLjV2NnpNNCA0VjJIMnYyaDJ6bTggMGgyVjJoLTJ2MnpNMiAxNGgydi0ySDJ2MnptMTAgMGgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlkZW9QbGF5ZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlkZW9QbGF5ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpNMSA0aDE0djFIMVY0em0xLjUtMWEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTMgMGEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTQuOTQ3IDYuMTA2YTEgMSAwIDAxMCAxLjc4OGwtMyAyQTEgMSAwIDAxNiAxMlY4YTEgMSAwIDAxMS40NDctLjg5NGwzIDJ6TTEwIDEwTDcgOHY0bDMtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlkZW9QbGF5ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0FyZWEgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNoMTBWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxNyAzIDYuMTkxVjEzem01LjI5NS01LjM1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDFMOC4yOTUgNy42NXpNMSAxNWgxMy41YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMDEtLjUtLjV2LTE0YS41LjUgMCAwMTEgMFYxNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQXJlYVN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYVN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwMS41LjVWMTVoMTMuNWEuNS41IDAgMTEwIDFILjVhLjUuNSAwIDAxLS41LS41di0xNEEuNS41IDAgMDEuNSAxem00LjM0MiAyLjE5NEw4LjI5NSA3LjY1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDF6bS0uMzk0IDEuMTIzTDMgNi4xOTF2NC4xMDFsMS4xNDYtMS4xNDZhLjUuNSAwIDAxLjQ5My0uMTI2bC4wODUuMDMzTDguNSAxMC45NGwxLjc3Ni0uODg4YS41LjUgMCAwMS4zNi0uMDM0bC4wODguMDM0TDEzIDExLjE5VjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwMS0uNzI4LS4wNjdMNC40NDggNC4zMTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0FyZWFTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBoLTZhLjUuNSAwIDAxMC0xSDhWNkgyLjVhLjUuNSAwIDAxMC0xSDEzVjJIMi41YS41LjUgMCAwMTAtMWgxMWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVIOXYzaDIuNWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVoLTlhLjUuNSAwIDExMC0xSDExdi0zSDguNXpNMCAuNWEuNS41IDAgMTExIDB2MTRhLjUuNSAwIDExLTEgMFYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAwYS41LjUgMCAwMS41LjV2MTRhLjUuNSAwIDExLTEgMFYuNUEuNS41IDAgMDEuNSAwem0xMyAxYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNUg5djNoMi41YS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNWgtOWEuNS41IDAgMTEwLTFIOXYtM0gyLjVhLjUuNSAwIDAxMC0xSDZWNkgyLjVhLjUuNSAwIDAxMC0xSDEwVjJIMi41YS41LjUgMCAwMTAtMWgxMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNy41djZhLjUuNSAwIDExLTEgMFY4SDZ2NS41YS41LjUgMCAxMS0xIDBWM0gydjEwLjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41VjdoM1Y0LjVhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMFY1aC0zdjIuNXpNLjUgMTZhLjUuNSAwIDExMC0xaDE0YS41LjUgMCAxMTAgMUguNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE1YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMTEwLTFoMTR6bS05LTEzYS41LjUgMCAwMS41LjVMNS45OTkgN0g5VjQuNWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwVjdoLTN2Ni41YS41LjUgMCAwMS0uNDEuNDkyTDkuNSAxNGEuNS41IDAgMDEtLjUtLjVWMTBINnYzLjVhLjUuNSAwIDAxLS45OTIuMDlMNSAxMy41VjZIMnY3LjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjg3NyA1Ljg0N2wtMS4wMiAxLjAyYS41LjUgMCAwMS0uNzA4LS43MDdsMS4xLTEuMDk5Yy0uMDUtLjA1My0uMS0uMTA2LS4xNTItLjE1N0E2LjQ3MSA2LjQ3MSAwIDAwOCAzLjAxOVY0LjVhLjUuNSAwIDAxLTEgMFYzLjAxOWE2LjQ3IDYuNDcgMCAwMC00LjI2MSAyLjA1NWwxLjA3IDEuMDcxYS41LjUgMCAwMS0uNzA2LjcwN2wtLjk5LS45OUE2LjQ2IDYuNDYgMCAwMDEuMDE4IDEwSDIuNWEuNS41IDAgMTEwIDFIMS4xNzRjLjA4My4zNTMuMTk2LjY5Ny4zMzcgMS4wM2EuNS41IDAgMTEtLjkyMi4zOUE3LjQ4NyA3LjQ4NyAwIDAxMCA5LjVhNy40ODMgNy40ODMgMCAwMTIuMTk3LTUuMzA0QTcuNDg3IDcuNDg3IDAgMDE3LjUgMmE3LjQ4NyA3LjQ4NyAwIDAxNS4zMDQgMi4xOTdBNy40ODMgNy40ODMgMCAwMTE1IDkuNWE3LjQ4NyA3LjQ4NyAwIDAxLS41OSAyLjkyLjUuNSAwIDAxLS45Mi0uMzljLjE0LS4zMzMuMjUzLS42NzcuMzM2LTEuMDNIMTIuNWEuNS41IDAgMTEwLTFoMS40ODFhNi40ODMgNi40ODMgMCAwMC0xLjEwNC00LjE1M3ptLTYuMDQxIDUuMzE3YS45OTMuOTkzIDAgMDEtLjAxLTEuNDA0Yy4zODQtLjM4NSAyLjg4Mi0yLjAwMiAzLjE0OS0xLjczNS4yNjcuMjY3LTEuMzUgMi43NjUtMS43MzUgMy4xNWEuOTkzLjk5MyAwIDAxLTEuNDA0LS4wMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR2F1Z2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0dvYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzR29hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcyNSAzLjY1M2E2IDYgMCAwMTIuODQ3IDcuNTc2LjUuNSAwIDAxLS45MjgtLjM3MiA1IDUgMCAxMC05LjI5My0uMDE0LjUuNSAwIDAxLS4yMTguNjE5TDEuMzkgMTIuNDdhLjUuNSAwIDAxLS43MDgtLjIzQTcuOTkgNy45OSAwIDAxMCA5YTggOCAwIDAxMTEuMjEyLTcuMzI5LjUuNSAwIDAxLjIzNC43MDRsLS43MjEgMS4yNzh6bS0uOTMzLS4zOGwuNS0uODg5YTcgNyAwIDAwLTguOTAyIDguOTNsLjg4Ni0uNTExYTYgNiAwIDAxNy41MTYtNy41M3pNNi43MyA5LjQ2N2ExLjc1IDEuNzUgMCAxMTIuNTM5IDAgMiAyIDAgMTEtMi41MzkgMHpNOCAxMi4wMTNhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTAtM2EuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR29hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTGluZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNMaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNjU0IDMuNDhjLjI0OC4yMjUuNTUyLjM4OS44ODguNDY3TDExLjI0IDkuNDNhMS45OSAxLjk5IDAgMDAtLjkxNS0uNDA0bDIuMzMtNS41NDd6TTkuMTQ2IDkuMTlhMi4wMDggMi4wMDggMCAwMC0uNzY5LjY0bC0xLjU3Mi0yYy4zMTEtLjEzNi41ODEtLjM1Ljc4NS0uNjE4bDEuNTU2IDEuOTc4ek01LjU4MSA3Ljk1NmwtMi4xMzQgNC4yNjhhLjUuNSAwIDAxLS44OTQtLjQ0OGwyLjEzNC00LjI2OGMuMjUuMjIuNTU3LjM3Ni44OTQuNDQ4ek0xIDE1aDEzLjVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAwMS0uNS0uNXYtMTRhLjUuNSAwIDAxMSAwVjE1em01LThhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTQgNWExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnptNC05YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNMaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNNYXBDb29yZGluYXRlID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcENvb3JkaW5hdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgMTVDNS43NyAxNSAyIDkuOTcgMiA2LjU5NSAyIDMuNTA3IDQuNDYgMSA3LjUgMVMxMyAzLjUwNyAxMyA2LjU5NUMxMyA5Ljk3IDkuMjMgMTUgNy41IDE1em0wLTFjLjI4NiAwIDEuNDgtMS4wNDQgMi40NTktMi4zNUMxMS4yMTkgOS45NjkgMTIgOC4xNTMgMTIgNi41OTYgMTIgNC4wNTUgOS45ODMgMiA3LjUgMlMzIDQuMDU1IDMgNi41OTVjMCAxLjU1Ny43OCAzLjM3MyAyLjA0MSA1LjA1NkM2LjAyIDEyLjk1NiA3LjIxNCAxNCA3LjUgMTR6bTAtNC45OTZhMi41IDIuNSAwIDExMC01IDIuNSAyLjUgMCAwMTAgNXptMC0xYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcENvb3JkaW5hdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01hcFJlZ2lvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNNYXBSZWdpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMi4zMDl2OC42OWEuNDk5LjQ5OSAwIDAxLS4wMzIuMTc2TDkuNSAxMi42OTFWMy44MDlsLTMtMS41em0tMS0uMDRMMiAzLjgyNXY4LjkwNmwzLjUyNy0xLjU2OGEuNS41IDAgMDEtLjAyNy0uMTY0VjIuMjd6bS4yNzQtMS4yMTZhLjQ5OC40OTggMCAwMS40NzEuMDFsMy43NjggMS44ODQgNC4yODQtMS45MDRBLjUuNSAwIDAxMTUgMS41djEwYS41LjUgMCAwMS0uMjk3LjQ1N2wtNC41IDJhLjUuNSAwIDAxLS40MjctLjAxbC0zLjc4OS0xLjg5NC00LjI4MyAxLjkwNGEuNS41IDAgMDEtLjcwMy0uNDU3di0xMGEuNS41IDAgMDEuMjk3LS40NTdsNC40NzYtMS45OXpNMTAuNSAzLjgyNXY4LjkwNmwzLjUtMS41NTZWMi4yN2wtMy41IDEuNTU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNYXBSZWdpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01ldHJpYyA9IGZ1bmN0aW9uIEV1aUljb25WaXNNZXRyaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUzMiA3LjM0YTIuMTYxIDIuMTYxIDAgMTEyLjkzNiAwIDIuNzQ2IDIuNzQ2IDAgMTEtMi45MzYgMHpNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bTYgNS45MTVhMS4xNjEgMS4xNjEgMCAxMDAtMi4zMjIgMS4xNjEgMS4xNjEgMCAwMDAgMi4zMjJ6bTAgNC40OTJhMS43NDYgMS43NDYgMCAxMDAtMy40OTIgMS43NDYgMS43NDYgMCAwMDAgMy40OTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01ldHJpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzUGllID0gZnVuY3Rpb24gRXVpSWNvblZpc1BpZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSA5YS41LjUgMCAwMS0uNS0uNVYzLjAyM0E1LjUgNS41IDAgMTAxMS45NzggOUg2LjV6TTcgOGg1LjVhLjUuNSAwIDAxLjUuNUE2LjUgNi41IDAgMTE2LjUgMmEuNS41IDAgMDEuNS41Vjh6bTItNi45NzJWNmg0Ljk3MkMxMy42OTYgMy41NTIgMTEuNDQ4IDEuMzA0IDkgMS4wMjh6TTE0LjUgN2gtNmEuNS41IDAgMDEtLjUtLjV2LTZhLjUuNSAwIDAxLjUtLjVDMTEuODUzIDAgMTUgMy4xNDcgMTUgNi41YS41LjUgMCAwMS0uNS41ek02LjE0NiA4Ljg1NGEuNS41IDAgMTEuNzA4LS43MDhsNCA0YS41LjUgMCAwMS0uNzA4LjcwOGwtNC00elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNQaWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1RhYmxlID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNSA2YS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAxMTAtMWg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGFnQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFnQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgOS4wNDdhLjUuNSAwIDEwMCAxaDEzYS41LjUgMCAwMDAtMWgtMTN6bTAtMWgxM2ExLjUgMS41IDAgMDEwIDNoLTEzYTEuNSAxLjUgMCAwMTAtM3pNMTAgMTNhLjUuNSAwIDExMCAxSDRhLjUuNSAwIDExMC0xaDZ6TTguMDAxIDIuMDE1YS41LjUgMCAxMS0uMDAyIDFsLTUtLjAxNWEuNS41IDAgMTEuMDAzLTFsNSAuMDE1ek0xNCA1YS41LjUgMCAxMTAgMUg2YS41LjUgMCAwMTAtMWg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWdDbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDV2NmgyYS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTFoMlY1SDV2LjVhLjUuNSAwIDAxLTEgMHYtMWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMS41LjUxbC0uMDIxIDFhLjUuNSAwIDExLTEtLjAybC4wMS0uNDlIOC41ek0xIDE1aDEuNWEuNS41IDAgMTEwIDFoLTJhLjUuNSAwIDAxLS41LS41di0xLjk5NmEuNS41IDAgMDExIDBWMTV6TTEgMXYxLjQ5N2EuNS41IDAgMTEtMSAwVi41QS41LjUgMCAwMS41IDBoMmEuNS41IDAgMDEwIDFIMXptMTQgMGgtMS40OTVhLjUuNSAwIDAxMC0xSDE1LjVhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMXptMCAxNHYtMS41YS41LjUgMCAxMTEgMHYyYS41LjUgMCAwMS0uNS41aC0yYS41LjUgMCAxMTAtMUgxNXpNMCA2LjVhLjUuNSAwIDAxMSAwdjNhLjUuNSAwIDAxLTEgMHYtM3pNOS41IDBhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMWgzek0xNSA2LjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDExLTEgMHYtM3pNOS41IDE1YS41LjUgMCAxMTAgMWgtM2EuNS41IDAgMTEwLTFoM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uVmlzVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44ODQgMS44MDJjMS4xNzEtLjMwOSAyLjIyLS4yNCAzLjEwMy4wNy4yOTUuMTA0LjUwNy4yMTIuNjMxLjI5MmwuMTY0LjEwNi4wNDguMTg4Yy4yNzggMS4wNjYuMiAyLjE3NS0uMDkxIDMuMjNhNi43MjggNi43MjggMCAwMS0uMTk0LjU5OGMuMDM1LjEyLjA3NC4yNzMuMTEyLjQ1NC4yMjcgMS4wNjUuMjQ3IDIuMTkzLS4wOCAzLjI2N2E0Ljg1NSA0Ljg1NSAwIDAxLS41MzQgMS4xNzVjLS4zMjQuNTE0LS43Ljk1NC0xLjExNyAxLjMyMy0uODA2LjcxMi0xLjYxNiAxLjA3MS0yLjIzNSAxLjIwNi0uMTQuMTc5LS4zNDYuMzgxLS42MjkuNTc4LS42NDMuNDQ3LTEuNDkzLjcxMS0yLjU2MS43MTEtMS4wNyAwLTEuOTItLjI2NC0yLjU2My0uNzExYTIuODc0IDIuODc0IDAgMDEtLjYyOS0uNTc4Yy0uNjE4LS4xMzQtMS40MjgtLjQ5My0yLjIzMi0xLjIwMy0uNDE5LS4zNy0uNzk2LS44MS0xLjEyLTEuMzI2YTQuODU1IDQuODU1IDAgMDEtLjUzNC0xLjE3NUMuMDk2IDguOTMzLjExNiA3LjgwNS4zNDMgNi43NGE2Ljc0IDYuNzQgMCAwMS4xMTItLjQ1NCA2LjcyOCA2LjcyOCAwIDAxLS4xOTQtLjU5OEMtLjAzIDQuNjMzLS4xMDggMy41MjQuMTcgMi40NThsLjA0OC0uMTg4LjE2NC0uMTA2Yy4xMjQtLjA4LjMzNi0uMTg4LjYzLS4yOTEuODg1LS4zMSAxLjkzMy0uMzggMy4xMDQtLjA3LjE4NC0uMTA4LjQzNC0uMjMuNzQ4LS4zNDhDNS42MTYgMS4xNyA2LjQ5NyAxIDcuNTAxIDFjMS4wMDIgMCAxLjg4My4xNyAyLjYzNC40NTUuMzE1LjExOS41NjUuMjQuNzUuMzQ3em0zLjAyNyAxLjExNmEzLjEzIDMuMTMgMCAwMC0uMjU1LS4xMDJjLS43NDktLjI2My0xLjY2LS4zMDktMi43MDguMDA3bC0uMjM4LjA3Mi0uMjAxLS4xNDdjLS4xMS0uMDgtLjM1NC0uMjE3LS43MjgtLjM1OEM5LjE0IDIuMTQ3IDguMzggMiA3LjUwMSAyYy0uODggMC0xLjY0MS4xNDctMi4yODMuMzktLjM3My4xNDEtLjYxNy4yNzgtLjcyNy4zNThsLS4yLjE0Ny0uMjQtLjA3MmMtMS4wNDgtLjMxNi0xLjk1OC0uMjctMi43MDctLjAwN2EzLjEzIDMuMTMgMCAwMC0uMjU1LjEwMmMtLjE2Ny44MTItLjA5NCAxLjY3NC4xMzYgMi41MDMuMDg0LjMwMy4xNjYuNTI0LjIxNy42MzdsLjA4Mi4xODItLjA2Ni4xOWMtLjAzMi4wOS0uMDg0LjI3LS4xMzcuNTE4LS4xOTUuOTE0LS4yMTIgMS44OC4wNTkgMi43NjcuMS4zMzMuMjQxLjY0NS40MjMuOTM1LjI3My40MzQuNTg4LjgwMS45MzYgMS4xMDguNDM0LjM4My44OTguNjU1IDEuMzYuODM0LjI3LjEwNS40NzQuMTU1LjU3NS4xN2wuMjQ4LjAzNC4xMi4yMmMuMDUxLjA5MS4xOTkuMjY2LjQ2Ni40NTIuNDc2LjMzIDEuMTI3LjUzMiAxLjk5My41MzIuODY1IDAgMS41MTYtLjIwMiAxLjk5LS41MzIuMjY4LS4xODYuNDE2LS4zNi40NjYtLjQ1MmwuMTIxLS4yMi4yNDgtLjAzNGMuMTAxLS4wMTUuMzA1LS4wNjUuNTc2LS4xNy40NjItLjE4LjkyNy0uNDUyIDEuMzYyLS44MzYuMzQ3LS4zMDcuNjYtLjY3NC45MzMtMS4xMDcuMTgyLS4yOS4zMjItLjYwMS40MjMtLjkzNC4yNzEtLjg4Ny4yNTQtMS44NTMuMDYtMi43NjdhNC41OTcgNC41OTcgMCAwMC0uMTM4LS41MTlsLS4wNjYtLjE4OS4wODItLjE4MmMuMDUtLjExMy4xMzMtLjMzNC4yMTctLjYzNy4yMy0uODI5LjMwMy0xLjY5MS4xMzYtMi41MDN6TTUgNS4wMDhjLjAwNC4xODEtLjA0OC4zNjQtLjI2NC42MTYtLjQyOC40OTgtLjk4NS40ODgtMS40MzEuMDQ5LS4zMjYtLjMyMS0uMzI1LS43MzItLjI5LTEuMDQ3LjA4NS0uNzYuNzQ4LS43MjIgMS4yNjItLjQ0LjQ4Ni4yNy43MTcuNjE2LjcyMy44MjN6bTUgMGMuMDA2LS4yMDYuMjM3LS41NTMuNzI0LS44MjEuNTE0LS4yODMgMS4xNzYtLjMyMSAxLjI2LjQ0LjAzNi4zMTQuMDM4LjcyNS0uMjg4IDEuMDQ2LS40NDYuNDQtMS4wMDUuNDQ5LTEuNDMzLS4wNS0uMjE3LS4yNS0uMjY3LS40MzQtLjI2My0uNjE0ek03LjUgOGMtLjUwMyAwLS45NzYtLjI0LTEuMzc1LS42NzItLjM5OC0uNDMyLS41OTItMS4xMjYgMC0xLjUyOC4zODQtLjI1OSAxLjA4Mi0uMyAxLjM3NS0uMy4yOTQgMCAuOTkxLjA0MSAxLjM3NS4zLjU5My40MDIuMzk3IDEuMDk2IDAgMS41MjhDOC40NzcgNy43NiA4LjAwMiA4IDcuNSA4em0wIDFjLjgwOCAwIDIuNjU2Ljk5NCAyLjQ5IDIuMDc0LS4xNTMuOTkzLTIuMTE0LjkyNS0yLjQ5LjkyNS0uMzc0IDAtMi4zMzYuMDY4LTIuNDktLjkyNUM0Ljg0NSA5Ljk5NCA2LjY5MyA5IDcuNSA5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVmVnYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNWZWdhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzZMNC44OSAxMC41MWEuNS41IDAgMDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAxMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxMS43MDcuNzA3TDIuNDE0IDguMDM2em04Ljc2OCAyLjQ3NGwyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMDEuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAxMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMTEtLjcwNy0uNzA4ek04LjU1OSAyLjUwNmEuNS41IDAgMDEuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMDEtLjk4MS0uMTlMOC41NTkgMi41MDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1ZlZ2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODM3IDdjLjExLjkzLjE2NSAxLjg4Ni4xNjUgMi44NjlWMTMuNWEuNS41IDAgMTEtMSAwVjkuODY5QTIzLjMgMjMuMyAwIDAwOC44MyA3SDcuMjljLS4xOTUgMS4wNC0uMjkyIDEuOTg1LS4yOTIgMi44MzVWMTMuNWEuNS41IDAgMTEtMSAwVjkuODM1YzAtLjg2NC4wOTItMS44MDkuMjc2LTIuODM1SDIuNWEuNS41IDAgMDEtLjQ5NS0uNTdjLjI4NS0yLjAyMyAxLjYyNi0zLjM1OCAzLjkzMS0zLjk2IDEuOTY3LS41MTQgNC4yMi0uNjA2IDYuNzU2LS4yNzhBMS41IDEuNSAwIDAxMTQgMy42NzlWNS41QTEuNSAxLjUgMCAwMTEyLjUgN0g5LjgzN3ptLS41NjktMUgxMi41YS41LjUgMCAwMC41LS41VjMuNjhhLjUuNSAwIDAwLS40MzYtLjQ5N2MtMi40MTYtLjMxMS00LjU0LS4yMjUtNi4zNzUuMjU0QzQuNDk0IDMuODggMy40OTEgNC43MjQgMy4xMTcgNkg5LjI2OHpNMiAxMHYzLjVhLjUuNSAwIDExLTEgMHYtNGEuNS41IDAgMDEuNS0uNWgzYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMTEtMSAwVjEwSDJ6bTEwIDMuNWEuNS41IDAgMTEtMSAwdi0yYS41LjUgMCAwMS41LS41aDNhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMTJoLTJ2MS41ek0xLjAxNiAxNi4wMjZhLjUuNSAwIDAxMC0xSDE1YS41LjUgMCAxMTAgMUgxLjAxNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXAgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoMTJ2MUgyVjN6bTAgOGg2djFIMnYtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgN2g5LjV2LjVWN2guMDM5bC4wODMuMDA1YTIuOTU4IDIuOTU4IDAgMDExLjEwMi4yOThjLjMwOS4xNTQuNjMzLjM5NC44OC43NjMuMjQ4LjM3My4zOTYuODQ3LjM5NiAxLjQzNCAwIC41ODgtLjE0OCAxLjA2MS0uMzk2IDEuNDM0YTIuMjU3IDIuMjU3IDAgMDEtLjg4Ljc2MyAyLjk1NyAyLjk1NyAwIDAxLTEuMTg1LjMwMmgtLjAyNWwtLjAwOS4wMDFoLS4wMDNzLS4wMDIgMC0uMDAyLS41di41SDExdjFsLTItMS41IDItMS41djFoLjUwNmwuMDQ0LS4wMDNhMS45NTkgMS45NTkgMCAwMC43MjYtLjE5NWMuMTkxLS4wOTUuMzY3LS4yMy40OTUtLjQyMy4xMjctLjE5LjIyOS0uNDY2LjIyOS0uODc5cy0uMTAyLS42ODktLjIyOS0uODc5YTEuMjU2IDEuMjU2IDAgMDAtLjQ5NS0uNDI0IDEuOTU4IDEuOTU4IDAgMDAtLjc3LS4xOTdIMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXBEaXNhYmxlZCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcERpc2FibGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMy41TDEyIDJ2MUgydjFoMTB2MWwyLTEuNXpNMTIgOVY4SDJWN2gxMFY2bDIgMS41TDEyIDl6bTAgM3YxbDItMS41LTItMS41djFIMnYxaDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcERpc2FibGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25XcmVuY2ggPSBmdW5jdGlvbiBFdWlJY29uV3JlbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MTggOS43NDZsNC41MzcgNC41MzdhMiAyIDAgMTAyLjgyOC0yLjgyOWwtMy4xNTctMy4xNTZhLjUuNSAwIDAxLjcwOC0uNzA4bDMuMTU2IDMuMTU3YTMgMyAwIDExLTQuMjQzIDQuMjQzbC00Ljk0OS00Ljk1YTUuMDAxIDUuMDAxIDAgMDEtNS4yMi03LjEwNi41LjUgMCAwMS44MDUtLjEzOEwzLjY3NiA1LjA5YTEgMSAwIDEwMS40MTUtMS40MTRMMi43OTcgMS4zODJhLjUuNSAwIDAxLjEzOC0uODA1IDUuMDAxIDUuMDAxIDAgMTEzLjk4MyA5LjE2OXpNMS4yMjYgNC4wNTRhNC4wMDIgNC4wMDIgMCAwMDYuNjkzIDMuODY1IDQgNCAwIDAwLTMuODY1LTYuNjkzbDEuNzQ0IDEuNzQzYTIgMiAwIDExLTIuODI5IDIuODI4TDEuMjI2IDQuMDU0em0xMC4yMjkgOC44MTRhMSAxIDAgMTExLjQxNC0xLjQxNCAxIDEgMCAwMS0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV3JlbmNoOyIsICJpbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMiBmcm9tICcuL2Fzc2V0cy9hbGVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNiBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3IGZyb20gJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTggZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYgZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNyBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4IGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMCBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQgZnJvbSAnLi9hc3NldHMvYXBwX2dpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4IGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMCBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzIGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNSBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2IGZyb20gJy4vYXNzZXRzL2FwcF9tbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzggZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MCBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MSBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzIGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NyBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDggZnJvbSAnLi9hc3NldHMvYXBwX3NxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5IGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MyBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2IGZyb20gJy4vYXNzZXRzL2FwcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NyBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4IGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OSBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxIGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0IGZyb20gJy4vYXNzZXRzL2JlYWtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1IGZyb20gJy4vYXNzZXRzL2JlbGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NiBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NyBmcm9tICcuL2Fzc2V0cy9ib2x0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjggZnJvbSAnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5IGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAgZnJvbSAnLi9hc3NldHMvYnJhbmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEgZnJvbSAnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyIGZyb20gJy4vYXNzZXRzL2Jyb29tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMgZnJvbSAnLi9hc3NldHMvYnJ1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NCBmcm9tICcuL2Fzc2V0cy9idWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NSBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2IGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcgZnJvbSAnLi9hc3NldHMvY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OCBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkgZnJvbSAnLi9hc3NldHMvY2hlZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MCBmcm9tICcuL2Fzc2V0cy9jbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxIGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMgZnJvbSAnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NSBmcm9tICcuL2Fzc2V0cy9jb2xvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2IGZyb20gJy4vYXNzZXRzL2NvbXB1dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NyBmcm9tICcuL2Fzc2V0cy9jb25zb2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUgZnJvbSAnLi9hc3NldHMvY29weS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcgZnJvbSAnLi9hc3NldHMvY3Jvc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OCBmcm9tICcuL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5IGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAgZnJvbSAnLi9hc3NldHMvY3VycmVuY3kuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEgZnJvbSAnLi9hc3NldHMvY3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAyIGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAzIGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA2IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA4IGZyb20gJy4vYXNzZXRzL2RvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE1IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE3IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIxIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjIgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIzIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEgZnJvbSAnLi9hc3NldHMvZW1haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIgZnJvbSAnLi9hc3NldHMvZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDMgZnJvbSAnLi9hc3NldHMvZXFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0IGZyb20gJy4vYXNzZXRzL2VyYXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSBmcm9tICcuL2Fzc2V0cy9leGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2IGZyb20gJy4vYXNzZXRzL2V4cGFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NyBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4IGZyb20gJy4vYXNzZXRzL2V4cG9ydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0OSBmcm9tICcuL2Fzc2V0cy9leWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUyIGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MyBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCBmcm9tICcuL2Fzc2V0cy9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUgZnJvbSAnLi9hc3NldHMvZmxhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiBmcm9tICcuL2Fzc2V0cy9mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU3IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU5IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MyBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiBmcm9tICcuL2Fzc2V0cy9nZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY3IGZyb20gJy4vYXNzZXRzL2dsYXNzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjggZnJvbSAnLi9hc3NldHMvZ2xvYmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjkgZnJvbSAnLi9hc3NldHMvZ3JhYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MCBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEgZnJvbSAnLi9hc3NldHMvZ3JpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MiBmcm9tICcuL2Fzc2V0cy9oZWFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MyBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc0IGZyb20gJy4vYXNzZXRzL2hlbHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUgZnJvbSAnLi9hc3NldHMvaG9tZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NiBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcgZnJvbSAnLi9hc3NldHMvaW1hZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzggZnJvbSAnLi9hc3NldHMvaW1wb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc5IGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgwIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODEgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODIgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MyBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg0IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODUgZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODYgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODcgZnJvbSAnLi9hc3NldHMvaW5zcGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCBmcm9tICcuL2Fzc2V0cy9pbnZlcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODkgZnJvbSAnLi9hc3NldHMvaXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTggZnJvbSAnLi9hc3NldHMvbGF5ZXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk5IGZyb20gJy4vYXNzZXRzL2xldHRlcmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAxIGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAzIGZyb20gJy4vYXNzZXRzL2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQgZnJvbSAnLi9hc3NldHMvbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNSBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiBmcm9tICcuL2Fzc2V0cy9sb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA3IGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA4IGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA5IGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEwIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE1IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE4IGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTkgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIxIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI1IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI4IGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjkgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMwIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMxIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzIgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM2IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2libS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM5IGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQyIGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4IGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDkgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTEgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUyIGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUzIGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTQgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU1IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU4IGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTkgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjMgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjggZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY5IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcwIGZyb20gJy4vYXNzZXRzL21hZ25ldC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcyIGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc0IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUgZnJvbSAnLi9hc3NldHMvbWVtb3J5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc2IGZyb20gJy4vYXNzZXRzL21lbnUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzcgZnJvbSAnLi9hc3NldHMvbWVudURvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzggZnJvbSAnLi9hc3NldHMvbWVudUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzkgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgwIGZyb20gJy4vYXNzZXRzL21lbnVVcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSBmcm9tICcuL2Fzc2V0cy9tZXJnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MyBmcm9tICcuL2Fzc2V0cy9taW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODUgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODcgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkxIGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQgZnJvbSAnLi9hc3NldHMvbW9iaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk1IGZyb20gJy4vYXNzZXRzL21vb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk3IGZyb20gJy4vYXNzZXRzL25lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCBmcm9tICcuL2Fzc2V0cy9ub2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk5IGZyb20gJy4vYXNzZXRzL251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMCBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAxIGZyb20gJy4vYXNzZXRzL29ubGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAzIGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDQgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUgZnJvbSAnLi9hc3NldHMvcGFpbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNyBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA4IGZyb20gJy4vYXNzZXRzL3BhdXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA5IGZyb20gJy4vYXNzZXRzL3BheW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAgZnJvbSAnLi9hc3NldHMvcGVuY2lsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzExIGZyb20gJy4vYXNzZXRzL3BlcmNlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIgZnJvbSAnLi9hc3NldHMvcGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEzIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQgZnJvbSAnLi9hc3NldHMvcGxheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE2IGZyb20gJy4vYXNzZXRzL3BsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE5IGZyb20gJy4vYXNzZXRzL3BvcG91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCBmcm9tICcuL2Fzc2V0cy9wdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIxIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiBmcm9tICcuL2Fzc2V0cy9xdW90ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMyBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI0IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI1IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYgZnJvbSAnLi9hc3NldHMvc2F2ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNyBmcm9tICcuL2Fzc2V0cy9zY2FsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCBmcm9tICcuL2Fzc2V0cy9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjkgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMyIGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMgZnJvbSAnLi9hc3NldHMvc2hhcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQgZnJvbSAnLi9hc3NldHMvc2hhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUgZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM2IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM3IGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzkgZnJvbSAnLi9hc3NldHMvc29ydF91cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQyIGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQzIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NyBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5IGZyb20gJy4vYXNzZXRzL3N0YXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUwIGZyb20gJy4vYXNzZXRzL3N0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MyBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU0IGZyb20gJy4vYXNzZXRzL3N0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTYgZnJvbSAnLi9hc3NldHMvc3VuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU3IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCBmcm9tICcuL2Fzc2V0cy9zeW1saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU5IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MyBmcm9tICcuL2Fzc2V0cy90YWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQgZnJvbSAnLi9hc3NldHMvdGVhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NyBmcm9tICcuL2Fzc2V0cy90aW1lbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY5IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcxIGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc2IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc4IGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgwIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODIgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MyBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg1IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NyBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg4IGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg5IGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkwIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTIgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkzIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk0IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA4IGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDkgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDExIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEyIGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMyBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTQgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNyBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCBmcm9tICcuL2Fzc2V0cy90b2tlblRhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOSBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMgZnJvbSAnLi9hc3NldHMvdHJhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQgZnJvbSAnLi9hc3NldHMvdW5mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI1IGZyb20gJy4vYXNzZXRzL3VubGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNiBmcm9tICcuL2Fzc2V0cy91c2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI3IGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjggZnJvbSAnLi9hc3NldHMvdXNlcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjkgZnJvbSAnLi9hc3NldHMvdmVjdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMwIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMxIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMyIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM0IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM1IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM3IGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSBmcm9tICcuL2Fzc2V0cy92aXNfbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MyBmcm9tICcuL2Fzc2V0cy92aXNfcGllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3IGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OCBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OSBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MiBmcm9tICcuL2Fzc2V0cy93cmVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUgZnJvbSAnLi9hc3NldHMvYWxlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU3IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTggZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYxIGZyb20gJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMgZnJvbSAnLi9hc3NldHMvYXBwX2FwbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY2IGZyb20gJy4vYXNzZXRzL2FwcF9jYW52YXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY4IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY5IGZyb20gJy4vYXNzZXRzL2FwcF9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcwIGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcxIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIgZnJvbSAnLi9hc3NldHMvYXBwX2RldnRvb2xzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDczIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NCBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc1IGZyb20gJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcgZnJvbSAnLi9hc3NldHMvYXBwX2dpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3JhcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzkgZnJvbSAnLi9hc3NldHMvYXBwX2dyb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MyBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg0IGZyb20gJy4vYXNzZXRzL2FwcF9sZW5zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg1IGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg2IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg3IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg4IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg5IGZyb20gJy4vYXNzZXRzL2FwcF9tbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MCBmcm9tICcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMgZnJvbSAnLi9hc3NldHMvYXBwX3BpcGVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk0IGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTUgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiBmcm9tICcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NyBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAwIGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEgZnJvbSAnLi9hc3NldHMvYXBwX3NxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiBmcm9tICcuL2Fzc2V0cy9hcHBfdGltZWxpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDMgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA0IGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUgZnJvbSAnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA2IGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDkgZnJvbSAnLi9hc3NldHMvYXBwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEyIGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSBmcm9tICcuL2Fzc2V0cy9hcnJvd191cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNyBmcm9tICcuL2Fzc2V0cy9iZWFrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTggZnJvbSAnLi9hc3NldHMvYmVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAgZnJvbSAnLi9hc3NldHMvYm9sdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIyIGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIzIGZyb20gJy4vYXNzZXRzL2JyYW5jaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI1IGZyb20gJy4vYXNzZXRzL2Jyb29tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI2IGZyb20gJy4vYXNzZXRzL2JydXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI3IGZyb20gJy4vYXNzZXRzL2J1Zyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOSBmcm9tICcuL2Fzc2V0cy9jYWxlbmRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCBmcm9tICcuL2Fzc2V0cy9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMyIGZyb20gJy4vYXNzZXRzL2NoZWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMzIGZyb20gJy4vYXNzZXRzL2Nsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM0IGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNSBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM3IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzggZnJvbSAnLi9hc3NldHMvY29sb3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzkgZnJvbSAnLi9hc3NldHMvY29tcHV0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MCBmcm9tICcuL2Fzc2V0cy9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQxIGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUJlbG93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCBmcm9tICcuL2Fzc2V0cy9jb3B5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUwIGZyb20gJy4vYXNzZXRzL2Nyb3NzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUxIGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUyIGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMgZnJvbSAnLi9hc3NldHMvY3VycmVuY3knO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTQgZnJvbSAnLi9hc3NldHMvY3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU1IGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU2IGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYxIGZyb20gJy4vYXNzZXRzL2RvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcwIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc0IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc2IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQgZnJvbSAnLi9hc3NldHMvZW1haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUgZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTYgZnJvbSAnLi9hc3NldHMvZXFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk3IGZyb20gJy4vYXNzZXRzL2VyYXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCBmcm9tICcuL2Fzc2V0cy9leGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk5IGZyb20gJy4vYXNzZXRzL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAxIGZyb20gJy4vYXNzZXRzL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMiBmcm9tICcuL2Fzc2V0cy9leWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDMgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA1IGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNyBmcm9tICcuL2Fzc2V0cy9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDggZnJvbSAnLi9hc3NldHMvZmxhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOSBmcm9tICcuL2Fzc2V0cy9mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSBmcm9tICcuL2Fzc2V0cy9nZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEgZnJvbSAnLi9hc3NldHMvZ2xvYmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIgZnJvbSAnLi9hc3NldHMvZ3JhYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMyBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQgZnJvbSAnLi9hc3NldHMvZ3JpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSBmcm9tICcuL2Fzc2V0cy9oZWFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI3IGZyb20gJy4vYXNzZXRzL2hlbHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjggZnJvbSAnLi9hc3NldHMvaG9tZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOSBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAgZnJvbSAnLi9hc3NldHMvaW1hZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEgZnJvbSAnLi9hc3NldHMvaW1wb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMyIGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMzIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM3IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzggZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzkgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAgZnJvbSAnLi9hc3NldHMvaW5zcGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSBmcm9tICcuL2Fzc2V0cy9pbnZlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIgZnJvbSAnLi9hc3NldHMvaXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDMgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1IGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NyBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDggZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ5IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUwIGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEgZnJvbSAnLi9hc3NldHMvbGF5ZXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUyIGZyb20gJy4vYXNzZXRzL2xldHRlcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MyBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU0IGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU2IGZyb20gJy4vYXNzZXRzL2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcgZnJvbSAnLi9hc3NldHMvbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OCBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSBmcm9tICcuL2Fzc2V0cy9sb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYwIGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY2IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY4IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjkgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcxIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc0IGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzcgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc4IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgxIGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgzIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg5IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkyIGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk1IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk3IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAxIGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMyBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDQgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA1IGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA2IGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDcgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA4IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDkgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzExIGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE3IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIzIGZyb20gJy4vYXNzZXRzL21hZ25ldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI1IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI3IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjggZnJvbSAnLi9hc3NldHMvbWVtb3J5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI5IGZyb20gJy4vYXNzZXRzL21lbnUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAgZnJvbSAnLi9hc3NldHMvbWVudURvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEgZnJvbSAnLi9hc3NldHMvbWVudUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMzIGZyb20gJy4vYXNzZXRzL21lbnVVcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNCBmcm9tICcuL2Fzc2V0cy9tZXJnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNSBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNiBmcm9tICcuL2Fzc2V0cy9taW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNyBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOSBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDMgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0IGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcgZnJvbSAnLi9hc3NldHMvbW9iaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4IGZyb20gJy4vYXNzZXRzL21vb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDkgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUwIGZyb20gJy4vYXNzZXRzL25lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSBmcm9tICcuL2Fzc2V0cy9ub2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUyIGZyb20gJy4vYXNzZXRzL251bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MyBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU0IGZyb20gJy4vYXNzZXRzL29ubGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU2IGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTggZnJvbSAnLi9hc3NldHMvcGFpbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTkgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYxIGZyb20gJy4vYXNzZXRzL3BhdXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYyIGZyb20gJy4vYXNzZXRzL3BheW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMgZnJvbSAnLi9hc3NldHMvcGVuY2lsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY0IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUgZnJvbSAnLi9hc3NldHMvcGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY2IGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcgZnJvbSAnLi9hc3NldHMvcGxheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY5IGZyb20gJy4vYXNzZXRzL3BsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcyIGZyb20gJy4vYXNzZXRzL3BvcG91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MyBmcm9tICcuL2Fzc2V0cy9wdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc0IGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSBmcm9tICcuL2Fzc2V0cy9xdW90ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc3IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc4IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzkgZnJvbSAnLi9hc3NldHMvc2F2ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCBmcm9tICcuL2Fzc2V0cy9zY2FsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSBmcm9tICcuL2Fzc2V0cy9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg1IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYgZnJvbSAnLi9hc3NldHMvc2hhcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODcgZnJvbSAnLi9hc3NldHMvc2hhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg5IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkwIGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTIgZnJvbSAnLi9hc3NldHMvc29ydF91cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MyBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk1IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk2IGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAxIGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAyIGZyb20gJy4vYXNzZXRzL3N0YXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAzIGZyb20gJy4vYXNzZXRzL3N0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA3IGZyb20gJy4vYXNzZXRzL3N0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDkgZnJvbSAnLi9hc3NldHMvc3VuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEwIGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEyIGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiBmcm9tICcuL2Fzc2V0cy90YWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcgZnJvbSAnLi9hc3NldHMvdGVhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIyIGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI0IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI3IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjggZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI5IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMxIGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMzIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM4IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MCBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQxIGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQyIGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQzIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ2IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ3IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MyBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYxIGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MyBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY0IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY1IGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OCBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MSBmcm9tICcuL2Fzc2V0cy90b2tlblRhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc0IGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYgZnJvbSAnLi9hc3NldHMvdHJhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcgZnJvbSAnLi9hc3NldHMvdW5mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc4IGZyb20gJy4vYXNzZXRzL3VubGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSBmcm9tICcuL2Fzc2V0cy91c2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgwIGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEgZnJvbSAnLi9hc3NldHMvdXNlcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIgZnJvbSAnLi9hc3NldHMvdmVjdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgzIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg0IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg1IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg3IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg4IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkwIGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiBmcm9tICcuL2Fzc2V0cy92aXNfbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MyBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiBmcm9tICcuL2Fzc2V0cy92aXNfcGllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk3IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk5IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAwIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMSBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNSBmcm9tICcuL2Fzc2V0cy93cmVuY2gnO1xuY29uc3QgX0R5bmFtaWNJbXBvcnRNb2R1bGVNYXAgPSB7Jy4vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMCwnLi9hc3NldHMvYWdncmVnYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEsJy4vYXNzZXRzL2FsZXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzLCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQsJy4vYXNzZXRzL2Fubm90YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNSwnLi9hc3NldHMvYXBtX3RyYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYsJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3LCcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOCwnLi9hc3NldHMvYXBwX2FnZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTksJy4vYXNzZXRzL2FwcF9hcG0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyLCcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzLCcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQsJy4vYXNzZXRzL2FwcF9jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1LCcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNiwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcsJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgsJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwLCcuL2Fzc2V0cy9hcHBfZW1zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIsJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMywnLi9hc3NldHMvYXBwX2dpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNCwnLi9hc3NldHMvYXBwX2dyYXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1LCcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNiwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNywnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwLCcuL2Fzc2V0cy9hcHBfbGVucy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMSwnLi9hc3NldHMvYXBwX2xvZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzLCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNCwnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUsJy4vYXNzZXRzL2FwcF9tbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNiwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcsJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzksJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MCwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MSwnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MiwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQsJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NSwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NiwnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NywnLi9hc3NldHMvYXBwX3NxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5LCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAsJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MiwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MywnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1LCcuL2Fzc2V0cy9hcHBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2LCcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NywnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OCwnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OSwnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MCwnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEsJy4vYXNzZXRzL2Fycm93X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyLCcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MywnLi9hc3NldHMvYmVha2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0LCcuL2Fzc2V0cy9iZWxsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1LCcuL2Fzc2V0cy9iZWxsU2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYsJy4vYXNzZXRzL2JvbHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5LCcuL2Fzc2V0cy9icmFuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAsJy4vYXNzZXRzL2JyYW5jaFVzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEsJy4vYXNzZXRzL2Jyb29tLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyLCcuL2Fzc2V0cy9icnVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MywnLi9hc3NldHMvYnVnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0LCcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NSwnLi9hc3NldHMvY2FsZW5kYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYsJy4vYXNzZXRzL2NoZWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3LCcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4LCcuL2Fzc2V0cy9jaGVlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OSwnLi9hc3NldHMvY2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAsJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MSwnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIsJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMsJy4vYXNzZXRzL2NsdXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQsJy4vYXNzZXRzL2NvbG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1LCcuL2Fzc2V0cy9jb21wdXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2LCcuL2Fzc2V0cy9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3LCcuL2Fzc2V0cy9jb250YWluZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OSwnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MSwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MiwnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQsJy4vYXNzZXRzL2NvcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUsJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2LCcuL2Fzc2V0cy9jcm9zcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NywnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgsJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTksJy4vYXNzZXRzL2N1cnJlbmN5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCwnLi9hc3NldHMvY3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSwnLi9hc3NldHMvZGF0YWJhc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAyLCcuL2Fzc2V0cy9kZXNrdG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMywnLi9hc3NldHMvZG9jdW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA0LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA1LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNiwnLi9hc3NldHMvZG9jdW1lbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNywnLi9hc3NldHMvZG90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOCwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAsJy4vYXNzZXRzL2Rvd25sb2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEyLCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEzLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE0LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE1LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNiwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNywnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE5LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIwLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI0LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjUsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjYsJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNywnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjgsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMwLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzEsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMyLCcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM0LCcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM2LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM3LCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCwnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM5LCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQwLCcuL2Fzc2V0cy9lbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEsJy4vYXNzZXRzL2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiwnLi9hc3NldHMvZXFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MywnLi9hc3NldHMvZXJhc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCwnLi9hc3NldHMvZXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUsJy4vYXNzZXRzL2V4cGFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYsJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3LCcuL2Fzc2V0cy9leHBvcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4LCcuL2Fzc2V0cy9leWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5LCcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCwnLi9hc3NldHMvZmFjZV9oYXBweS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTEsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIsJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MywnLi9hc3NldHMvZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCwnLi9hc3NldHMvZmxhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUsJy4vYXNzZXRzL2ZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU2LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU3LCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OSwnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYwLCcuL2Fzc2V0cy9mcmFtZU5leHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYxLCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYzLCcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQsJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSwnLi9hc3NldHMvZ2Vhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYsJy4vYXNzZXRzL2dsYXNzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY3LCcuL2Fzc2V0cy9nbG9iZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjgsJy4vYXNzZXRzL2dyYWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY5LCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcwLCcuL2Fzc2V0cy9ncmlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSwnLi9hc3NldHMvaGVhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcyLCcuL2Fzc2V0cy9oZWF0bWFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MywnLi9hc3NldHMvaGVscC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQsJy4vYXNzZXRzL2hvbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc1LCcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc2LCcuL2Fzc2V0cy9pbWFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcsJy4vYXNzZXRzL2ltcG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzgsJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSwnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODAsJy4vYXNzZXRzL2luZGV4X2ZsdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSwnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODIsJy4vYXNzZXRzL2luZGV4X29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgzLCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCwnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg1LCcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODYsJy4vYXNzZXRzL2luc3BlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg3LCcuL2Fzc2V0cy9pbnZlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg4LCcuL2Fzc2V0cy9pcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODksJy4vYXNzZXRzL2tleWJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCwnLi9hc3NldHMva3FsX2ZpZWxkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSwnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MiwnLi9hc3NldHMva3FsX29wZXJhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkzLCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk0LCcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk1LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYsJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk3LCcuL2Fzc2V0cy9sYXllcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk4LCcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk5LCcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCwnLi9hc3NldHMvbGluZURvdHRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEsJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIsJy4vYXNzZXRzL2xpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAzLCcuL2Fzc2V0cy9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCwnLi9hc3NldHMvbGlzdF9hZGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA1LCcuL2Fzc2V0cy9sb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiwnLi9hc3NldHMvbG9ja09wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA3LCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDgsJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCwnLi9hc3NldHMvbG9nb19hd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjExLCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiwnLi9hc3NldHMvbG9nb19henVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQsJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE1LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYsJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcsJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE4LCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTksJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIxLCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIsJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMywnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCwnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNSwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNywnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjgsJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjksJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCwnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEsJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiwnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMsJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCwnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzUsJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYsJy4vYXNzZXRzL2xvZ29faWJtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNywnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzgsJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM5LCcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQzLCcuL2Fzc2V0cy9sb2dvX21hcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUsJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYsJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcsJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4LCcuL2Fzc2V0cy9sb2dvX25naW54LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCwnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSwnLi9hc3NldHMvbG9nb19waHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUyLCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MywnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCwnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUsJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU2LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NywnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTgsJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSwnLi9hc3NldHMvbG9nb19zbGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAsJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSwnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiwnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MywnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCwnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSwnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY2LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjgsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSwnLi9hc3NldHMvbWFnbmV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCwnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcyLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjczLCcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NCwnLi9hc3NldHMvbWVtb3J5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSwnLi9hc3NldHMvbWVudS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYsJy4vYXNzZXRzL21lbnVEb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NywnLi9hc3NldHMvbWVudUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc4LCcuL2Fzc2V0cy9tZW51UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc5LCcuL2Fzc2V0cy9tZW51VXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgwLCcuL2Fzc2V0cy9tZXJnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODEsJy4vYXNzZXRzL21pbmltaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiwnLi9hc3NldHMvbWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgzLCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg0LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODcsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCwnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkzLCcuL2Fzc2V0cy9tb2JpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk0LCcuL2Fzc2V0cy9tb29uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NSwnLi9hc3NldHMvbmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiwnLi9hc3NldHMvbmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NywnLi9hc3NldHMvbm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTgsJy4vYXNzZXRzL251bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTksJy4vYXNzZXRzL29mZmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAwLCcuL2Fzc2V0cy9vbmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAxLCcuL2Fzc2V0cy9wYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiwnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCwnLi9hc3NldHMvcGFpbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA1LCcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiwnLi9hc3NldHMvcGFydGlhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcsJy4vYXNzZXRzL3BhdXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCwnLi9hc3NldHMvcGF5bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDksJy4vYXNzZXRzL3BlbmNpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAsJy4vYXNzZXRzL3BlcmNlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzExLCcuL2Fzc2V0cy9waW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEyLCcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMywnLi9hc3NldHMvcGxheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQsJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE1LCcuL2Fzc2V0cy9wbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNiwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE3LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE4LCcuL2Fzc2V0cy9wb3BvdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE5LCcuL2Fzc2V0cy9wdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCwnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMSwnLi9hc3NldHMvcXVvdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIyLCcuL2Fzc2V0cy9yZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMywnLi9hc3NldHMvcmVwb3J0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI0LCcuL2Fzc2V0cy9yZXR1cm5fa2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSwnLi9hc3NldHMvc2F2ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYsJy4vYXNzZXRzL3NjYWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNywnLi9hc3NldHMvc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI5LCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzEsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMyLCcuL2Fzc2V0cy9zaGFyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMsJy4vYXNzZXRzL3NoYXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCwnLi9hc3NldHMvc25vd2ZsYWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSwnLi9hc3NldHMvc29ydExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM2LCcuL2Fzc2V0cy9zb3J0UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM3LCcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM4LCcuL2Fzc2V0cy9zb3J0X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSwnLi9hc3NldHMvc29ydGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQwLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQyLCcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MywnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQsJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NywnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4LCcuL2Fzc2V0cy9zdGF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDksJy4vYXNzZXRzL3N0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUwLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEsJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUyLCcuL2Fzc2V0cy9zdG9yYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MywnLi9hc3NldHMvc3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCwnLi9hc3NldHMvc3VibW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSwnLi9hc3NldHMvc3VuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiwnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NywnLi9hc3NldHMvc3ltbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTgsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTksJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYxLCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjIsJy4vYXNzZXRzL3RhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjMsJy4vYXNzZXRzL3RlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY0LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjUsJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiwnLi9hc3NldHMvdGltZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY3LCcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCwnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjksJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAsJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcxLCcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMsJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc0LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc1LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NiwnLi9hc3NldHMvdG9rZW5EYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NywnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzgsJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzksJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODAsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODEsJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgyLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODMsJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg0LCcuL2Fzc2V0cy90b2tlbkZpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg1LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODYsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg3LCcuL2Fzc2V0cy90b2tlbkdlby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODgsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OSwnLi9hc3NldHMvdG9rZW5JUC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSwnLi9hc3NldHMvdG9rZW5Kb2luLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiwnLi9hc3NldHMvdG9rZW5LZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkzLCcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk0LCcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTUsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk3LCcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTgsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSwnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAwLCcuL2Fzc2V0cy90b2tlbk51bGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAxLCcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIsJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMywnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQsJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNywnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDgsJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA5LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDExLCcuL2Fzc2V0cy90b2tlblJlcG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEyLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEzLCcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCwnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE1LCcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTYsJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNywnLi9hc3NldHMvdG9rZW5UYWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE4LCcuL2Fzc2V0cy90b2tlblRleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE5LCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIwLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSwnLi9hc3NldHMvdHJhaW5pbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIyLCcuL2Fzc2V0cy90cmFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMsJy4vYXNzZXRzL3VuZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQsJy4vYXNzZXRzL3VubGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUsJy4vYXNzZXRzL3VzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI2LCcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNywnLi9hc3NldHMvdXNlcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI4LCcuL2Fzc2V0cy92ZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI5LCcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAsJy4vYXNzZXRzL3Zpc19hcmVhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMSwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYsJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcsJy4vYXNzZXRzL3Zpc19nb2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCwnLi9hc3NldHMvdmlzX2xpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM5LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQwLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEsJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQyLCcuL2Fzc2V0cy92aXNfcGllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MywnLi9hc3NldHMvdmlzX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NCwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDUsJy4vYXNzZXRzL3Zpc190ZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NiwnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NywnLi9hc3NldHMvdmlzX3ZlZ2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4LCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5LCcuL2Fzc2V0cy93b3JkV3JhcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUxLCcuL2Fzc2V0cy93cmVuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUyLCcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MywnLi9hc3NldHMvYWdncmVnYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCwnLi9hc3NldHMvYWxlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU1LCcuL2Fzc2V0cy9hbmFseXplRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU2LCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NywnLi9hc3NldHMvYW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTgsJy4vYXNzZXRzL2FwbV90cmFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTksJy4vYXNzZXRzL2FwcF9hZGRfZGF0YSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAsJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEsJy4vYXNzZXRzL2FwcF9hZ2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIsJy4vYXNzZXRzL2FwcF9hcG0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYzLCcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY1LCcuL2Fzc2V0cy9hcHBfY2FudmFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NiwnLi9hc3NldHMvYXBwX2Nhc2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NywnLi9hc3NldHMvYXBwX2NvZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY4LCcuL2Fzc2V0cy9hcHBfY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjksJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCwnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEsJy4vYXNzZXRzL2FwcF9kZXZ0b29scyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIsJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMsJy4vYXNzZXRzL2FwcF9lbXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc0LCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc1LCcuL2Fzc2V0cy9hcHBfZmxlZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc2LCcuL2Fzc2V0cy9hcHBfZ2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NywnLi9hc3NldHMvYXBwX2dyYXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCwnLi9hc3NldHMvYXBwX2dyb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc5LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIsJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgzLCcuL2Fzc2V0cy9hcHBfbGVucyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQsJy4vYXNzZXRzL2FwcF9sb2dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NSwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg2LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcsJy4vYXNzZXRzL2FwcF9tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCwnLi9hc3NldHMvYXBwX21sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkwLCcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkxLCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIsJy4vYXNzZXRzL2FwcF9waXBlbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMsJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk0LCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk2LCcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTksJy4vYXNzZXRzL2FwcF9zcGFjZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAwLCcuL2Fzc2V0cy9hcHBfc3FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSwnLi9hc3NldHMvYXBwX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiwnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMywnLi9hc3NldHMvYXBwX3VwdGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUsJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCwnLi9hc3NldHMvYXBwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDksJy4vYXNzZXRzL2Fycm93RW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCwnLi9hc3NldHMvYXJyb3dTdGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTEsJy4vYXNzZXRzL2Fycm93X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMywnLi9hc3NldHMvYXJyb3dfcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE0LCcuL2Fzc2V0cy9hcnJvd191cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUsJy4vYXNzZXRzL2FzdGVyaXNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiwnLi9hc3NldHMvYmVha2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNywnLi9hc3NldHMvYmVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTgsJy4vYXNzZXRzL2JlbGxTbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTksJy4vYXNzZXRzL2JvbHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIwLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIyLCcuL2Fzc2V0cy9icmFuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIzLCcuL2Fzc2V0cy9icmFuY2hVc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCwnLi9hc3NldHMvYnJvb20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI1LCcuL2Fzc2V0cy9icnVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYsJy4vYXNzZXRzL2J1Zyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcsJy4vYXNzZXRzL2J1bGxzZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCwnLi9hc3NldHMvY2FsZW5kYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI5LCcuL2Fzc2V0cy9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMxLCcuL2Fzc2V0cy9jaGVlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIsJy4vYXNzZXRzL2Nsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMywnLi9hc3NldHMvY2xvdWREcml6emxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNCwnLi9hc3NldHMvY2xvdWRTdG9ybXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM1LCcuL2Fzc2V0cy9jbG91ZFN1bm55JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiwnLi9hc3NldHMvY2x1c3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcsJy4vYXNzZXRzL2NvbG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCwnLi9hc3NldHMvY29tcHV0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzksJy4vYXNzZXRzL2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQwLCcuL2Fzc2V0cy9jb250YWluZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQxLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQyLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1LCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiwnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3LCcuL2Fzc2V0cy9jb3B5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5LCcuL2Fzc2V0cy9jcm9zcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAsJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSwnLi9hc3NldHMvY3Jvc3NoYWlycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIsJy4vYXNzZXRzL2N1cnJlbmN5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MywnLi9hc3NldHMvY3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCwnLi9hc3NldHMvZGF0YWJhc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU1LCcuL2Fzc2V0cy9kZXNrdG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NiwnLi9hc3NldHMvZG9jdW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU3LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU4LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OSwnLi9hc3NldHMvZG9jdW1lbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCwnLi9hc3NldHMvZG90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MSwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMsJy4vYXNzZXRzL2Rvd25sb2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY1LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY2LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcxLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcyLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTczLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NCwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc3LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzgsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzksJy4vYXNzZXRzL2VkaXRvcl9ib2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgzLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg1LCcuL2Fzc2V0cy9lZGl0b3JfbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg3LCcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODgsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg5LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkwLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSwnLi9hc3NldHMvZWRpdG9yX3VuZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkyLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkzLCcuL2Fzc2V0cy9lbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQsJy4vYXNzZXRzL2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSwnLi9hc3NldHMvZXFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiwnLi9hc3NldHMvZXJhc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NywnLi9hc3NldHMvZXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTgsJy4vYXNzZXRzL2V4cGFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTksJy4vYXNzZXRzL2V4cGFuZE1pbmknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAwLCcuL2Fzc2V0cy9leHBvcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAxLCcuL2Fzc2V0cy9leWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAyLCcuL2Fzc2V0cy9leWVfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMywnLi9hc3NldHMvZmFjZV9oYXBweSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUsJy4vYXNzZXRzL2ZhY2Vfc2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiwnLi9hc3NldHMvZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNywnLi9hc3NldHMvZmxhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDgsJy4vYXNzZXRzL2ZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMiwnLi9hc3NldHMvZm9sZGVyX29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEzLCcuL2Fzc2V0cy9mcmFtZU5leHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcsJy4vYXNzZXRzL2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCwnLi9hc3NldHMvZ2Vhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTksJy4vYXNzZXRzL2dsYXNzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIwLCcuL2Fzc2V0cy9nbG9iZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEsJy4vYXNzZXRzL2dyYWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIyLCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIzLCcuL2Fzc2V0cy9ncmlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCwnLi9hc3NldHMvaGVhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI1LCcuL2Fzc2V0cy9oZWF0bWFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiwnLi9hc3NldHMvaGVscCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcsJy4vYXNzZXRzL2hvbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI4LCcuL2Fzc2V0cy9pSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI5LCcuL2Fzc2V0cy9pbWFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAsJy4vYXNzZXRzL2ltcG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEsJy4vYXNzZXRzL2luZGV4X2Nsb3NlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiwnLi9hc3NldHMvaW5kZXhfZWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMsJy4vYXNzZXRzL2luZGV4X2ZsdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCwnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUsJy4vYXNzZXRzL2luZGV4X29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM2LCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNywnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM4LCcuL2Fzc2V0cy9pbnB1dE91dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzksJy4vYXNzZXRzL2luc3BlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQwLCcuL2Fzc2V0cy9pbnZlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQxLCcuL2Fzc2V0cy9pcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIsJy4vYXNzZXRzL2tleWJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MywnLi9hc3NldHMva3FsX2ZpZWxkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCwnLi9hc3NldHMva3FsX2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSwnLi9hc3NldHMva3FsX29wZXJhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2LCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3LCcuL2Fzc2V0cy9rcWxfdmFsdWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDksJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUwLCcuL2Fzc2V0cy9sYXllcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUxLCcuL2Fzc2V0cy9sZXR0ZXJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUyLCcuL2Fzc2V0cy9saW5lRGFzaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MywnLi9hc3NldHMvbGluZURvdHRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQsJy4vYXNzZXRzL2xpbmVTb2xpZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUsJy4vYXNzZXRzL2xpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU2LCcuL2Fzc2V0cy9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NywnLi9hc3NldHMvbGlzdF9hZGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU4LCcuL2Fzc2V0cy9sb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSwnLi9hc3NldHMvbG9ja09wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MywnLi9hc3NldHMvbG9nb19hd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSwnLi9hc3NldHMvbG9nb19henVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcsJy4vYXNzZXRzL2xvZ29fYmVhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjksJy4vYXNzZXRzL2xvZ29fY2VwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAsJy4vYXNzZXRzL2xvZ29fY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIsJy4vYXNzZXRzL2xvZ29fY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NywnLi9hc3NldHMvbG9nb19lbGFzdGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEsJy4vYXNzZXRzL2xvZ29fZXRjZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIsJy4vYXNzZXRzL2xvZ29fZ2NwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MywnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSwnLi9hc3NldHMvbG9nb19nbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NywnLi9hc3NldHMvbG9nb19nb29nbGVfZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODgsJy4vYXNzZXRzL2xvZ29faGFwcm94eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODksJy4vYXNzZXRzL2xvZ29faWJtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCwnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTEsJy4vYXNzZXRzL2xvZ29fa2Fma2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk2LCcuL2Fzc2V0cy9sb2dvX21hcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAsJy4vYXNzZXRzL2xvZ29fbXlzcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAxLCcuL2Fzc2V0cy9sb2dvX25naW54JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCwnLi9hc3NldHMvbG9nb19waHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNywnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDgsJy4vYXNzZXRzL2xvZ29fcmVkaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEsJy4vYXNzZXRzL2xvZ29fc2tldGNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiwnLi9hc3NldHMvbG9nb19zbGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCwnLi9hc3NldHMvbG9nb193ZWJob29rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSwnLi9hc3NldHMvbG9nb193aW5kb3dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiwnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNywnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCwnLi9hc3NldHMvbG9nc3Rhc2hfaWYnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiwnLi9hc3NldHMvbWFnbmV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMywnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI1LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI2LCcuL2Fzc2V0cy9tYXBfbWFya2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNywnLi9hc3NldHMvbWVtb3J5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCwnLi9hc3NldHMvbWVudSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjksJy4vYXNzZXRzL21lbnVEb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMCwnLi9hc3NldHMvbWVudUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMxLCcuL2Fzc2V0cy9tZW51UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMyLCcuL2Fzc2V0cy9tZW51VXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMzLCcuL2Fzc2V0cy9tZXJnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQsJy4vYXNzZXRzL21pbmltaXplJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNSwnLi9hc3NldHMvbWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM2LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM3LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOCwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOSwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MywnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ2LCcuL2Fzc2V0cy9tb2JpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3LCcuL2Fzc2V0cy9tb29uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCwnLi9hc3NldHMvbmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSwnLi9hc3NldHMvbmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCwnLi9hc3NldHMvbm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEsJy4vYXNzZXRzL251bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIsJy4vYXNzZXRzL29mZmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUzLCcuL2Fzc2V0cy9vbmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU0LCcuL2Fzc2V0cy9wYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSwnLi9hc3NldHMvcGFnZVNlbGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NywnLi9hc3NldHMvcGFpbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU4LCcuL2Fzc2V0cy9wYXBlcl9jbGlwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSwnLi9hc3NldHMvcGFydGlhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAsJy4vYXNzZXRzL3BhdXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSwnLi9hc3NldHMvcGF5bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIsJy4vYXNzZXRzL3BlbmNpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMsJy4vYXNzZXRzL3BlcmNlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY0LCcuL2Fzc2V0cy9waW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY1LCcuL2Fzc2V0cy9waW5fZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiwnLi9hc3NldHMvcGxheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcsJy4vYXNzZXRzL3BsYXlGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY4LCcuL2Fzc2V0cy9wbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcwLCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcxLCcuL2Fzc2V0cy9wb3BvdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcyLCcuL2Fzc2V0cy9wdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MywnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCwnLi9hc3NldHMvcXVvdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc1LCcuL2Fzc2V0cy9yZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiwnLi9hc3NldHMvcmVwb3J0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc3LCcuL2Fzc2V0cy9yZXR1cm5fa2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OCwnLi9hc3NldHMvc2F2ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzksJy4vYXNzZXRzL3NjYWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCwnLi9hc3NldHMvc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MywnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg1LCcuL2Fzc2V0cy9zaGFyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYsJy4vYXNzZXRzL3NoYXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NywnLi9hc3NldHMvc25vd2ZsYWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCwnLi9hc3NldHMvc29ydExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg5LCcuL2Fzc2V0cy9zb3J0UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkwLCcuL2Fzc2V0cy9zb3J0X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkxLCcuL2Fzc2V0cy9zb3J0X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiwnLi9hc3NldHMvc29ydGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkzLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk1LCcuL2Fzc2V0cy9zdGFyX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcsJy4vYXNzZXRzL3N0YXJfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk5LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAxLCcuL2Fzc2V0cy9zdGF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIsJy4vYXNzZXRzL3N0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAzLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQsJy4vYXNzZXRzL3N0b3Bfc2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA1LCcuL2Fzc2V0cy9zdG9yYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiwnLi9hc3NldHMvc3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNywnLi9hc3NldHMvc3VibW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCwnLi9hc3NldHMvc3VuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSwnLi9hc3NldHMvc3dhdGNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMCwnLi9hc3NldHMvc3ltbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTEsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTMsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE0LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUsJy4vYXNzZXRzL3RhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYsJy4vYXNzZXRzL3RlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODE3LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTgsJy4vYXNzZXRzL3RpbWVSZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSwnLi9hc3NldHMvdGltZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIwLCcuL2Fzc2V0cy90aW1lc2xpZGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSwnLi9hc3NldHMvdG9rZW5BbGlhcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIsJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMsJy4vYXNzZXRzL3Rva2VuQXJyYXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODI0LCcuL2Fzc2V0cy90b2tlbkJpbmFyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYsJy4vYXNzZXRzL3Rva2VuQ2xhc3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI3LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODI4LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyOSwnLi9hc3NldHMvdG9rZW5EYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCwnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEsJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIsJy4vYXNzZXRzL3Rva2VuRW51bSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzQsJy4vYXNzZXRzL3Rva2VuRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM1LCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYsJy4vYXNzZXRzL3Rva2VuRmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM3LCcuL2Fzc2V0cy90b2tlbkZpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM4LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzksJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQwLCcuL2Fzc2V0cy90b2tlbkdlbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiwnLi9hc3NldHMvdG9rZW5JUCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCwnLi9hc3NldHMvdG9rZW5Kb2luJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSwnLi9hc3NldHMvdG9rZW5LZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ2LCcuL2Fzc2V0cy90b2tlbktleXdvcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ3LCcuL2Fzc2V0cy90b2tlbk1ldGhvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDgsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDksJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUwLCcuL2Fzc2V0cy90b2tlbk1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTEsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiwnLi9hc3NldHMvdG9rZW5OZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUzLCcuL2Fzc2V0cy90b2tlbk51bGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU0LCcuL2Fzc2V0cy90b2tlbk51bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUsJy4vYXNzZXRzL3Rva2VuT2JqZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiwnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcsJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTgsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEsJy4vYXNzZXRzL3Rva2VuUmFuZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYyLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MywnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY0LCcuL2Fzc2V0cy90b2tlblJlcG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlODY1LCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY2LCcuL2Fzc2V0cy90b2tlblNoYXBlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NywnLi9hc3NldHMvdG9rZW5TdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY4LCcuL2Fzc2V0cy90b2tlblN0cnVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjksJy4vYXNzZXRzL3Rva2VuU3ltYm9sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCwnLi9hc3NldHMvdG9rZW5UYWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcxLCcuL2Fzc2V0cy90b2tlblRleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcyLCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODczLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCwnLi9hc3NldHMvdHJhaW5pbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc1LCcuL2Fzc2V0cy90cmFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYsJy4vYXNzZXRzL3VuZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcsJy4vYXNzZXRzL3VubGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzgsJy4vYXNzZXRzL3VzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODc5LCcuL2Fzc2V0cy91c2VyQXZhdGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCwnLi9hc3NldHMvdXNlcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgxLCcuL2Fzc2V0cy92ZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlODgyLCcuL2Fzc2V0cy92aWRlb1BsYXllcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMsJy4vYXNzZXRzL3Zpc19hcmVhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NCwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NywnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODgsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODksJy4vYXNzZXRzL3Zpc19nYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAsJy4vYXNzZXRzL3Zpc19nb2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSwnLi9hc3NldHMvdmlzX2xpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkyLCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkzLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQsJy4vYXNzZXRzL3Zpc19tZXRyaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk1LCcuL2Fzc2V0cy92aXNfcGllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiwnLi9hc3NldHMvdmlzX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NywnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTgsJy4vYXNzZXRzL3Zpc190ZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCwnLi9hc3NldHMvdmlzX3ZlZ2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAxLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAyLCcuL2Fzc2V0cy93b3JkV3JhcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA0LCcuL2Fzc2V0cy93cmVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA1fTtcbmZ1bmN0aW9uIF9EeW5hbWljSW1wb3J0KHBhdGgpIHtjb25zdCBtb2Q9X0R5bmFtaWNJbXBvcnRNb2R1bGVNYXBbcGF0aF07bW9kW1N5bWJvbC50b1N0cmluZ1RhZ109J01vZHVsZSc7cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2QpOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwidGFiSW5kZXhcIiwgXCJ0aXRsZVwiLCBcIm9uSWNvbkxvYWRcIiwgXCJ0aGVtZVwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB0eXBlVG9QYXRoTWFwIH0gZnJvbSAnLi9pY29uX21hcCc7XG5pbXBvcnQgeyBpY29uIGFzIGVtcHR5IH0gZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yLCB3aXRoRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgeyBDT0xPUlMgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBpc05hbWVkQ29sb3IgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBldWlJY29uU3R5bGVzIH0gZnJvbSAnLi9pY29uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgZ2V0SXNBcHBJY29uID0gZnVuY3Rpb24gZ2V0SXNBcHBJY29uKGljb25UeXBlKSB7XG4gIGlmICh0eXBlb2YgaWNvblR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpY29uVHlwZSA9PT0gJ2RhdGFWaXN1YWxpemVyJykgcmV0dXJuIHRydWU7IC8vIFNwZWNpYWwgY2FzZVxuXG4gIGlmIChpY29uVHlwZS5pbmRleE9mKCdkYXRhOicpID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIElubGluZSBkYXRhIFVSSXMgc2hvdWxkIGJlIHNob3J0LWNpcmN1aXRlZCBmb3IgcGVyZm9ybWFuY2VcblxuICByZXR1cm4gaWNvblR5cGUuZW5kc1dpdGgoJ0FwcCcpIHx8IGljb25UeXBlLmVuZHNXaXRoKCdKb2InKTtcbn07XG5cbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvUGF0aE1hcCk7XG5leHBvcnQgdmFyIFNJWkVTID0gWydvcmlnaW5hbCcsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcblxuZnVuY3Rpb24gaXNFdWlJY29uVHlwZSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgdHlwZVRvUGF0aE1hcC5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5pdGlhbEljb24oaWNvbikge1xuICBpZiAoaWNvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChpc0V1aUljb25UeXBlKGljb24pKSB7XG4gICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uKSkge1xuICAgICAgcmV0dXJuIGljb25Db21wb25lbnRDYWNoZVtpY29uXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGljb247XG59XG5cbnZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCk7XG52YXIgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG5leHBvcnQgdmFyIGNsZWFySWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGUpIHtcbiAgaWYgKGljb25UeXBlICE9IG51bGwpIHtcbiAgICBkZWxldGUgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXTtcbiAgfSBlbHNlIHtcbiAgICBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gIGZvciAodmFyIF9pY29uVHlwZSBpbiBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICAgIGlmIChpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcC5oYXNPd25Qcm9wZXJ0eShfaWNvblR5cGUpKSB7XG4gICAgICBpY29uQ29tcG9uZW50Q2FjaGVbX2ljb25UeXBlXSA9IGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwW19pY29uVHlwZV07XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHZhciBFdWlJY29uQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlJY29uQ2xhc3MsIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUljb25DbGFzcyk7XG5cbiAgZnVuY3Rpb24gRXVpSWNvbkNsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUljb25DbGFzcyk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc01vdW50ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibG9hZEljb25Db21wb25lbnRcIiwgZnVuY3Rpb24gKGljb25UeXBlKSB7XG4gICAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgICAvLyBleGlzdHMgaW4gY2FjaGVcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaWNvbjogaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXVxuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpcy5vbkljb25Mb2FkKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfRHluYW1pY0ltcG9ydChgLi9hc3NldHMvJHt0eXBlVG9QYXRoTWFwW2ljb25UeXBlXX1gKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpY29uID0gX3JlZi5pY29uO1xuICAgICAgICBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdID0gaWNvbjtcbiAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuaXNNb3VudGVkICYmIF90aGlzLnByb3BzLnR5cGUgPT09IGljb25UeXBlKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgIGljb25UaXRsZTogaWNvblR5cGUsXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIF90aGlzLm9uSWNvbkxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkljb25Mb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkljb25Mb2FkID0gX3RoaXMucHJvcHMub25JY29uTG9hZDtcblxuICAgICAgaWYgKG9uSWNvbkxvYWQpIHtcbiAgICAgICAgb25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpbml0aWFsSWNvbiA9IGdldEluaXRpYWxJY29uKHR5cGUpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaWNvbjogaW5pdGlhbEljb24sXG4gICAgICBpY29uVGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUljb25DbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcblxuICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkgJiYgdGhpcy5zdGF0ZS5pY29uID09IG51bGwpIHtcbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLW1vdW50LXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG5cbiAgICAgIGlmICh0eXBlICE9PSBwcmV2UHJvcHMudHlwZSkge1xuICAgICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KHR5cGUpLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGljb246IHR5cGUsXG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdHlwZSA9IF90aGlzJHByb3BzLnR5cGUsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF90aGlzJHByb3BzJHNpemUsXG4gICAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wcy5jb2xvcixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgdGFiSW5kZXggPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIG9uSWNvbkxvYWQgPSBfdGhpcyRwcm9wcy5vbkljb25Mb2FkLFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHN0YXRlLmlzTG9hZGluZyxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nID0gX3RoaXMkc3RhdGUubmVlZGVkTG9hZGluZyxcbiAgICAgICAgICBpY29uVGl0bGUgPSBfdGhpcyRzdGF0ZS5pY29uVGl0bGU7XG4gICAgICB2YXIgaXNMb2FkZWQgPSAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmc7XG4gICAgICB2YXIgaXNDdXN0b21Db2xvciA9IGNvbG9yICYmICFpc05hbWVkQ29sb3IoY29sb3IpO1xuICAgICAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gaXNDdXN0b21Db2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0sIHN0eWxlKSA6IHN0eWxlOyAvLyBUaGVzZSBpY29ucyBhcmUgYSBsaXR0bGUgc3BlY2lhbCBhbmQgZ2V0IHNvbWUgZXh0cmEgQ1NTIGZsZXhpYmlsaXR5XG5cbiAgICAgIHZhciBpc0FwcEljb24gPSBnZXRJc0FwcEljb24odHlwZSk7IC8vIEFwcCBjb2xvciBzdHlsZXMgYXJlIG9ubHkgYXBwbGllZCBpZiBubyBjb2xvciBpcyBwYXNzZWQgb3IgaWYgY29sb3I9XCJkZWZhdWx0XCIgaXMgcGFzc2VkXG5cbiAgICAgIHZhciBhcHBJY29uSGFzQ29sb3IgPSBjb2xvciAmJiBjb2xvciAhPT0gJ2RlZmF1bHQnOyAvLyBUaGUgRWxhc3RpYyBsb2dvIHNob3VsZCBiZSBhbiBvdXRsaW5lIGluIHRleHQgYW5kIGdob3N0IG1vZGVcblxuICAgICAgdmFyIGlzRWxhc3RpY0xvZ29PdXRsaW5lID0gdHlwZSA9PT0gJ2xvZ29FbGFzdGljJyAmJiAoY29sb3IgPT09ICdnaG9zdCcgfHwgY29sb3IgPT09ICd0ZXh0Jyk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUljb24nLCBjbGFzc05hbWUpOyAvLyBFbW90aW9uIHN0eWxlc1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpSWNvblN0eWxlcyh0aGVtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJY29uLCBzdHlsZXNbc2l6ZV0sIGNvbG9yICYmIGlzTmFtZWRDb2xvcihjb2xvcikgJiYgc3R5bGVzW2NvbG9yXSwgaXNDdXN0b21Db2xvciAmJiBzdHlsZXMuY3VzdG9tQ29sb3IsIGlzRWxhc3RpY0xvZ29PdXRsaW5lICYmIHN0eWxlcy5sb2dvRWxhc3RpY091dGxpbmUsIGlzQXBwSWNvbiAmJiAhYXBwSWNvbkhhc0NvbG9yICYmIHN0eWxlcy5hcHAsIGlzTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkaW5nLCAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGVkXTtcbiAgICAgIHZhciBpY29uID0gdGhpcy5zdGF0ZS5pY29uIHx8IGVtcHR5OyAvLyBUaGlzIGlzIGEgZml4IGZvciBJRSBhbmQgRWRnZSwgd2hpY2ggaWdub3JlcyB0YWJpbmRleD1cIi0xXCIgb24gYW4gU1ZHLCBidXQgcmVzcGVjdHNcbiAgICAgIC8vIGZvY3VzYWJsZT1cImZhbHNlXCIuXG4gICAgICAvLyAgIC0gSWYgdGhlcmUncyBubyB0YWJpbmRleCBzcGVjaWZpZWQsIHdlJ2xsIGRlZmF1bHQgdGhlIGljb24gdG8gbm90IGJlIGZvY3VzYWJsZSxcbiAgICAgIC8vICAgICB3aGljaCBpcyBob3cgU1ZHcyBiZWhhdmUgaW4gQ2hyb21lLCBTYWZhcmksIGFuZCBGRi5cbiAgICAgIC8vICAgLSBJZiB0YWJpbmRleCBpcyAtMSwgdGhlbiB0aGUgY29uc3VtZXIgd2FudHMgdGhlIGljb24gdG8gYmUgZm9jdXNhYmxlIGJ5IEphdmFTY3JpcHQgb25seS5cbiAgICAgIC8vICAgLSBJZiB0aGUgdGFiaW5kZXggaXMgMCwgdGhlIGNvbnN1bWVyIHdhbnRzIHRoZSBpY29uIHRvIGJlIGtleWJvYXJkIGZvY3VzYWJsZS5cblxuICAgICAgdmFyIGZvY3VzYWJsZSA9IHRhYkluZGV4ID09IG51bGwgfHwgdGFiSW5kZXggPT09IC0xID8gJ2ZhbHNlJyA6ICd0cnVlJztcblxuICAgICAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgYWx0OiB0aXRsZSA/IHRpdGxlIDogJycsXG4gICAgICAgICAgc3JjOiBpY29uLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXhcbiAgICAgICAgfSwgcmVzdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIFN2ZyA9IGljb247IC8vIElmIGl0J3MgYW4gZW1wdHkgaWNvbiwgb3IgaWYgdGhlcmUgaXMgbm8gYXJpYS1sYWJlbCwgYXJpYS1sYWJlbGxlZGJ5LCBvciB0aXRsZSBpdCBnZXRzIGFyaWEtaGlkZGVuIHRydWVcblxuICAgICAgICB2YXIgaXNBcmlhSGlkZGVuID0gaWNvbiA9PT0gZW1wdHkgfHwgISh0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gfHwgdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgdGhpcy5wcm9wcy50aXRsZSk7XG4gICAgICAgIHZhciBoaWRlSWNvbkVtcHR5ID0gaXNBcmlhSGlkZGVuICYmIHtcbiAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aXRsZUlkOyAvLyBJZiBubyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBpcyBwcm92aWRlZCBidXQgdGhlcmUncyBhIHRpdGxlLCBhIHRpdGxlSWQgaXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vICBUaGUgc3ZnIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZ2V0cyB0aGlzIHRpdGxlSWRcbiAgICAgICAgLy8gIFRoZSBzdmcgdGl0bGUgZWxlbWVudCBnZXRzIHRoaXMgdGl0bGVJZCBhcyBhbiBpZFxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddICYmICF0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSAmJiB0aXRsZSkge1xuICAgICAgICAgIHRpdGxlSWQgPSB7XG4gICAgICAgICAgICB0aXRsZUlkOiBnZW5lcmF0ZUlkKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgZm9jdXNhYmxlOiBmb2N1c2FibGUsXG4gICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWljb24tdHlwZVwiOiBpY29uVGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRlZFwiOiBpc0xvYWRlZCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRpbmdcIjogaXNMb2FkaW5nIHx8IHVuZGVmaW5lZFxuICAgICAgICB9LCB0aXRsZUlkLCByZXN0LCBoaWRlSWNvbkVtcHR5KSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUljb25DbGFzcztcbn0oUHVyZUNvbXBvbmVudCk7XG5FdWlJY29uQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBgRW51bWAgaXMgYW55IG9mIHRoZSBuYW1lZCBpY29ucyBsaXN0ZWQgaW4gdGhlIGRvY3MsIGBzdHJpbmdgIGlzIHVzdWFsbHkgYSBVUkwgdG8gYW4gU1ZHIGZpbGUsIGFuZCBgZWxlbWVudFR5cGVgIGlzIGFueSBSZWFjdCBTVkcgY29tcG9uZW50XG4gICAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIE9uZSBvZiBFVUkncyBjb2xvciBwYWxldHRlIG9yIGEgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvcl92YWx1ZS5cbiAgICAgICAqIE5vdGUgdGhhdCBjb2xvcmluZyBvbmx5IHdvcmtzIGlmIHlvdXIgU1ZHIGlzIHJlbW92ZWQgb2YgZmlsbCBhdHRyaWJ1dGVzLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGV2ZXJ5IHNpemUgb3RoZXIgdGhhbiBgb3JpZ2luYWxgIGFzc3VtZXMgdGhlIHByb3ZpZGVkIFNWRyBzaXRzIG9uIGEgc3F1YXJlIHZpZXdib3guXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIERlc2NyaXB0aXZlIHRpdGxlIGZvciBuYW1pbmcgdGhlIGljb24gYmFzZWQgb24gaXRzIHVzZVxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRpdGxlIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogSXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEc1xuICAgICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBpY29uIGhhcyBiZWVuIGxvYWRlZCAmIHJlbmRlcmVkXG4gICAgICAgKi9cbiAgb25JY29uTG9hZDogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aUljb24gPSB3aXRoRXVpVGhlbWUoRXVpSWNvbkNsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgdHlwZVRvUGF0aE1hcCA9IHtcbiAgYWNjZXNzaWJpbGl0eTogJ2FjY2Vzc2liaWxpdHknLFxuICBhZGREYXRhQXBwOiAnYXBwX2FkZF9kYXRhJyxcbiAgYWR2YW5jZWRTZXR0aW5nc0FwcDogJ2FwcF9hZHZhbmNlZF9zZXR0aW5ncycsXG4gIGFnZW50QXBwOiAnYXBwX2ZsZWV0JyxcbiAgYWdncmVnYXRlOiAnYWdncmVnYXRlJyxcbiAgYWxlcnQ6ICdhbGVydCcsXG4gIGFuYWx5emVFdmVudDogJ2FuYWx5emVFdmVudCcsXG4gIGFubm90YXRpb246ICdhbm5vdGF0aW9uJyxcbiAgYXBtQXBwOiAnYXBwX2FwbScsXG4gIGFwbVRyYWNlOiAnYXBtX3RyYWNlJyxcbiAgYXBwU2VhcmNoQXBwOiAnYXBwX2FwcF9zZWFyY2gnLFxuICBhcHBzOiAnYXBwcycsXG4gIGFycm93RG93bjogJ2Fycm93X2Rvd24nLFxuICBhcnJvd0xlZnQ6ICdhcnJvd19sZWZ0JyxcbiAgYXJyb3dSaWdodDogJ2Fycm93X3JpZ2h0JyxcbiAgYXJyb3dVcDogJ2Fycm93X3VwJyxcbiAgYXJyb3dTdGFydDogJ2Fycm93U3RhcnQnLFxuICBhcnJvd0VuZDogJ2Fycm93RW5kJyxcbiAgYXN0ZXJpc2s6ICdhc3RlcmlzaycsXG4gIGF1ZGl0YmVhdEFwcDogJ2FwcF9hdWRpdGJlYXQnLFxuICBiZWFrZXI6ICdiZWFrZXInLFxuICBiZWxsOiAnYmVsbCcsXG4gIGJlbGxTbGFzaDogJ2JlbGxTbGFzaCcsXG4gIGJvbHQ6ICdib2x0JyxcbiAgYm94ZXNIb3Jpem9udGFsOiAnYm94ZXNfaG9yaXpvbnRhbCcsXG4gIGJveGVzVmVydGljYWw6ICdib3hlc192ZXJ0aWNhbCcsXG4gIGJyYW5jaDogJ2JyYW5jaCcsXG4gIGJyYW5jaFVzZXI6ICdicmFuY2hVc2VyJyxcbiAgYnJvb206ICdicm9vbScsXG4gIGJydXNoOiAnYnJ1c2gnLFxuICBidWc6ICdidWcnLFxuICBidWxsc2V5ZTogJ2J1bGxzZXllJyxcbiAgY2FsZW5kYXI6ICdjYWxlbmRhcicsXG4gIGNhbnZhc0FwcDogJ2FwcF9jYW52YXMnLFxuICBjYXNlc0FwcDogJ2FwcF9jYXNlcycsXG4gIGNoZWNrOiAnY2hlY2snLFxuICBjaGVja0luQ2lyY2xlRmlsbGVkOiAnY2hlY2tJbkNpcmNsZUZpbGxlZCcsXG4gIGNoZWVyOiAnY2hlZXInLFxuICBjbGFzc2lmaWNhdGlvbkpvYjogJ21sX2NsYXNzaWZpY2F0aW9uX2pvYicsXG4gIGNsb2NrOiAnY2xvY2snLFxuICBjbG91ZERyaXp6bGU6ICdjbG91ZERyaXp6bGUnLFxuICBjbG91ZFN0b3JteTogJ2Nsb3VkU3Rvcm15JyxcbiAgY2xvdWRTdW5ueTogJ2Nsb3VkU3VubnknLFxuICBjbHVzdGVyOiAnY2x1c3RlcicsXG4gIGNvZGVBcHA6ICdhcHBfY29kZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb21wdXRlOiAnY29tcHV0ZScsXG4gIGNvbnNvbGU6ICdjb25zb2xlJyxcbiAgY29uc29sZUFwcDogJ2FwcF9jb25zb2xlJyxcbiAgY29udGFpbmVyOiAnY29udGFpbmVyJyxcbiAgY29udGludWl0eUFib3ZlOiAnY29udGludWl0eUFib3ZlJyxcbiAgY29udGludWl0eUFib3ZlQmVsb3c6ICdjb250aW51aXR5QWJvdmVCZWxvdycsXG4gIGNvbnRpbnVpdHlCZWxvdzogJ2NvbnRpbnVpdHlCZWxvdycsXG4gIGNvbnRpbnVpdHlXaXRoaW46ICdjb250aW51aXR5V2l0aGluJyxcbiAgY29udHJvbHNIb3Jpem9udGFsOiAnY29udHJvbHNfaG9yaXpvbnRhbCcsXG4gIGNvbnRyb2xzVmVydGljYWw6ICdjb250cm9sc192ZXJ0aWNhbCcsXG4gIGNvcHk6ICdjb3B5JyxcbiAgY29weUNsaXBib2FyZDogJ2NvcHlfY2xpcGJvYXJkJyxcbiAgY3JlYXRlQWR2YW5jZWRKb2I6ICdtbF9jcmVhdGVfYWR2YW5jZWRfam9iJyxcbiAgY3JlYXRlTXVsdGlNZXRyaWNKb2I6ICdtbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYicsXG4gIGNyZWF0ZVBvcHVsYXRpb25Kb2I6ICdtbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InLFxuICBjcmVhdGVTaW5nbGVNZXRyaWNKb2I6ICdtbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InLFxuICBjcm9zczogJ2Nyb3NzJyxcbiAgY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHA6ICdhcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbicsXG4gIGNyb3NzSW5BQ2lyY2xlRmlsbGVkOiAnY3Jvc3NJbkFDaXJjbGVGaWxsZWQnLFxuICBjcm9zc2hhaXJzOiAnY3Jvc3NoYWlycycsXG4gIGN1cnJlbmN5OiAnY3VycmVuY3knLFxuICBjdXQ6ICdjdXQnLFxuICBkYXNoYm9hcmRBcHA6ICdhcHBfZGFzaGJvYXJkJyxcbiAgZGF0YVZpc3VhbGl6ZXI6ICdtbF9kYXRhX3Zpc3VhbGl6ZXInLFxuICBkYXRhYmFzZTogJ2RhdGFiYXNlJyxcbiAgZGVza3RvcDogJ2Rlc2t0b3AnLFxuICBkZXZUb29sc0FwcDogJ2FwcF9kZXZ0b29scycsXG4gIGRpc2NvdmVyQXBwOiAnYXBwX2Rpc2NvdmVyJyxcbiAgZG9jdW1lbnQ6ICdkb2N1bWVudCcsXG4gIGRvY3VtZW50RWRpdDogJ2RvY3VtZW50RWRpdCcsXG4gIGRvY3VtZW50YXRpb246ICdkb2N1bWVudGF0aW9uJyxcbiAgZG9jdW1lbnRzOiAnZG9jdW1lbnRzJyxcbiAgZG90OiAnZG90JyxcbiAgZG91YmxlQXJyb3dMZWZ0OiAnZG91YmxlQXJyb3dMZWZ0JyxcbiAgZG91YmxlQXJyb3dSaWdodDogJ2RvdWJsZUFycm93UmlnaHQnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZWRpdG9yQWxpZ25DZW50ZXI6ICdlZGl0b3JfYWxpZ25fY2VudGVyJyxcbiAgZWRpdG9yQWxpZ25MZWZ0OiAnZWRpdG9yX2FsaWduX2xlZnQnLFxuICBlZGl0b3JBbGlnblJpZ2h0OiAnZWRpdG9yX2FsaWduX3JpZ2h0JyxcbiAgZWRpdG9yQm9sZDogJ2VkaXRvcl9ib2xkJyxcbiAgZWRpdG9yQ2hlY2tsaXN0OiAnZWRpdG9yX2NoZWNrbGlzdCcsXG4gIGVkaXRvckNvZGVCbG9jazogJ2VkaXRvcl9jb2RlX2Jsb2NrJyxcbiAgZWRpdG9yQ29tbWVudDogJ2VkaXRvcl9jb21tZW50JyxcbiAgZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw6ICdlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDogJ2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCcsXG4gIGVkaXRvckhlYWRpbmc6ICdlZGl0b3JfaGVhZGluZycsXG4gIGVkaXRvckl0YWxpYzogJ2VkaXRvcl9pdGFsaWMnLFxuICBlZGl0b3JJdGVtQWxpZ25Cb3R0b206ICdlZGl0b3JJdGVtQWxpZ25Cb3R0b20nLFxuICBlZGl0b3JJdGVtQWxpZ25DZW50ZXI6ICdlZGl0b3JJdGVtQWxpZ25DZW50ZXInLFxuICBlZGl0b3JJdGVtQWxpZ25MZWZ0OiAnZWRpdG9ySXRlbUFsaWduTGVmdCcsXG4gIGVkaXRvckl0ZW1BbGlnbk1pZGRsZTogJ2VkaXRvckl0ZW1BbGlnbk1pZGRsZScsXG4gIGVkaXRvckl0ZW1BbGlnblJpZ2h0OiAnZWRpdG9ySXRlbUFsaWduUmlnaHQnLFxuICBlZGl0b3JJdGVtQWxpZ25Ub3A6ICdlZGl0b3JJdGVtQWxpZ25Ub3AnLFxuICBlZGl0b3JMaW5rOiAnZWRpdG9yX2xpbmsnLFxuICBlZGl0b3JPcmRlcmVkTGlzdDogJ2VkaXRvcl9vcmRlcmVkX2xpc3QnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wTGVmdDogJ2VkaXRvclBvc2l0aW9uVG9wTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wUmlnaHQ6ICdlZGl0b3JQb3NpdGlvblRvcFJpZ2h0JyxcbiAgZWRpdG9yUmVkbzogJ2VkaXRvcl9yZWRvJyxcbiAgZWRpdG9yU3RyaWtlOiAnZWRpdG9yX3N0cmlrZScsXG4gIGVkaXRvclRhYmxlOiAnZWRpdG9yX3RhYmxlJyxcbiAgZWRpdG9yVW5kZXJsaW5lOiAnZWRpdG9yX3VuZGVybGluZScsXG4gIGVkaXRvclVuZG86ICdlZGl0b3JfdW5kbycsXG4gIGVkaXRvclVub3JkZXJlZExpc3Q6ICdlZGl0b3JfdW5vcmRlcmVkX2xpc3QnLFxuICBlbWFpbDogJ2VtYWlsJyxcbiAgZW1wdHk6ICdlbXB0eScsXG4gIGVtc0FwcDogJ2FwcF9lbXMnLFxuICBlcWw6ICdlcWwnLFxuICBlcmFzZXI6ICdlcmFzZXInLFxuICBleGl0OiAnZXhpdCcsXG4gIGV4cGFuZDogJ2V4cGFuZCcsXG4gIGV4cGFuZE1pbmk6ICdleHBhbmRNaW5pJyxcbiAgZXhwb3J0QWN0aW9uOiAnZXhwb3J0JyxcbiAgZXllOiAnZXllJyxcbiAgZXllQ2xvc2VkOiAnZXllX2Nsb3NlZCcsXG4gIGZhY2VIYXBweTogJ2ZhY2VfaGFwcHknLFxuICBmYWNlTmV1dHJhbDogJ2ZhY2VfbmV1dHJhbCcsXG4gIGZhY2VTYWQ6ICdmYWNlX3NhZCcsXG4gIGZpbGViZWF0QXBwOiAnYXBwX2ZpbGViZWF0JyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmxhZzogJ2ZsYWcnLFxuICBmbGVldEFwcDogJ2FwcF9hZ2VudCcsXG4gIGZvbGQ6ICdmb2xkJyxcbiAgZm9sZGVyQ2hlY2s6ICdmb2xkZXJfY2hlY2snLFxuICBmb2xkZXJDbG9zZWQ6ICdmb2xkZXJfY2xvc2VkJyxcbiAgZm9sZGVyRXhjbGFtYXRpb246ICdmb2xkZXJfZXhjbGFtYXRpb24nLFxuICBmb2xkZXJPcGVuOiAnZm9sZGVyX29wZW4nLFxuICBmcmFtZU5leHQ6ICdmcmFtZU5leHQnLFxuICBmcmFtZVByZXZpb3VzOiAnZnJhbWVQcmV2aW91cycsXG4gIGZ1bGxTY3JlZW46ICdmdWxsX3NjcmVlbicsXG4gIGZ1bGxTY3JlZW5FeGl0OiAnZnVsbFNjcmVlbkV4aXQnLFxuICBmdW5jdGlvbjogJ2Z1bmN0aW9uJyxcbiAgZ2VhcjogJ2dlYXInLFxuICBnaXNBcHA6ICdhcHBfZ2lzJyxcbiAgZ2xhc3NlczogJ2dsYXNzZXMnLFxuICBnbG9iZTogJ2dsb2JlJyxcbiAgZ3JhYjogJ2dyYWInLFxuICBncmFiSG9yaXpvbnRhbDogJ2dyYWJfaG9yaXpvbnRhbCcsXG4gIGdyYXBoQXBwOiAnYXBwX2dyYXBoJyxcbiAgZ3JpZDogJ2dyaWQnLFxuICBncm9rQXBwOiAnYXBwX2dyb2snLFxuICBoZWFydDogJ2hlYXJ0JyxcbiAgaGVhcnRiZWF0QXBwOiAnYXBwX2hlYXJ0YmVhdCcsXG4gIGhlYXRtYXA6ICdoZWF0bWFwJyxcbiAgaGVscDogJ2hlbHAnLFxuICBob21lOiAnaG9tZScsXG4gIGlJbkNpcmNsZTogJ2lJbkNpcmNsZScsXG4gIGltYWdlOiAnaW1hZ2UnLFxuICBpbXBvcnRBY3Rpb246ICdpbXBvcnQnLFxuICBpbmRleENsb3NlOiAnaW5kZXhfY2xvc2UnLFxuICBpbmRleEVkaXQ6ICdpbmRleF9lZGl0JyxcbiAgaW5kZXhGbHVzaDogJ2luZGV4X2ZsdXNoJyxcbiAgaW5kZXhNYW5hZ2VtZW50QXBwOiAnYXBwX2luZGV4X21hbmFnZW1lbnQnLFxuICBpbmRleE1hcHBpbmc6ICdpbmRleF9tYXBwaW5nJyxcbiAgaW5kZXhPcGVuOiAnaW5kZXhfb3BlbicsXG4gIGluZGV4UGF0dGVybkFwcDogJ2FwcF9pbmRleF9wYXR0ZXJuJyxcbiAgaW5kZXhSb2xsdXBBcHA6ICdhcHBfaW5kZXhfcm9sbHVwJyxcbiAgaW5kZXhSdW50aW1lOiAnaW5kZXhfcnVudGltZScsXG4gIGluZGV4U2V0dGluZ3M6ICdpbmRleF9zZXR0aW5ncycsXG4gIGlucHV0T3V0cHV0OiAnaW5wdXRPdXRwdXQnLFxuICBpbnNwZWN0OiAnaW5zcGVjdCcsXG4gIGludmVydDogJ2ludmVydCcsXG4gIGlwOiAnaXAnLFxuICBrZXlib2FyZDogJ2tleWJvYXJkJyxcbiAga3FsRmllbGQ6ICdrcWxfZmllbGQnLFxuICBrcWxGdW5jdGlvbjogJ2txbF9mdW5jdGlvbicsXG4gIGtxbE9wZXJhbmQ6ICdrcWxfb3BlcmFuZCcsXG4gIGtxbFNlbGVjdG9yOiAna3FsX3NlbGVjdG9yJyxcbiAga3FsVmFsdWU6ICdrcWxfdmFsdWUnLFxuICBrdWJlcm5ldGVzTm9kZTogJ2t1YmVybmV0ZXNOb2RlJyxcbiAga3ViZXJuZXRlc1BvZDogJ2t1YmVybmV0ZXNQb2QnLFxuICBsYXllcnM6ICdsYXllcnMnLFxuICBsZW5zQXBwOiAnYXBwX2xlbnMnLFxuICBsZXR0ZXJpbmc6ICdsZXR0ZXJpbmcnLFxuICBsaW5lRGFzaGVkOiAnbGluZURhc2hlZCcsXG4gIGxpbmVEb3R0ZWQ6ICdsaW5lRG90dGVkJyxcbiAgbGluZVNvbGlkOiAnbGluZVNvbGlkJyxcbiAgbGluazogJ2xpbmsnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxpc3RBZGQ6ICdsaXN0X2FkZCcsXG4gIGxvY2s6ICdsb2NrJyxcbiAgbG9ja09wZW46ICdsb2NrT3BlbicsXG4gIGxvZ29BV1M6ICdsb2dvX2F3cycsXG4gIGxvZ29BV1NNb25vOiAnbG9nb19hd3NfbW9ubycsXG4gIGxvZ29BZXJvc3Bpa2U6ICdsb2dvX2Flcm9zcGlrZScsXG4gIGxvZ29BcGFjaGU6ICdsb2dvX2FwYWNoZScsXG4gIGxvZ29BcHBTZWFyY2g6ICdsb2dvX2FwcF9zZWFyY2gnLFxuICBsb2dvQXp1cmU6ICdsb2dvX2F6dXJlJyxcbiAgbG9nb0F6dXJlTW9ubzogJ2xvZ29fYXp1cmVfbW9ubycsXG4gIGxvZ29CZWF0czogJ2xvZ29fYmVhdHMnLFxuICBsb2dvQnVzaW5lc3NBbmFseXRpY3M6ICdsb2dvX2J1c2luZXNzX2FuYWx5dGljcycsXG4gIGxvZ29DZXBoOiAnbG9nb19jZXBoJyxcbiAgbG9nb0Nsb3VkOiAnbG9nb19jbG91ZCcsXG4gIGxvZ29DbG91ZEVudGVycHJpc2U6ICdsb2dvX2Nsb3VkX2VjZScsXG4gIGxvZ29Db2RlOiAnbG9nb19jb2RlJyxcbiAgbG9nb0NvZGVzYW5kYm94OiAnbG9nb19jb2Rlc2FuZGJveCcsXG4gIGxvZ29Db3VjaGJhc2U6ICdsb2dvX2NvdWNoYmFzZScsXG4gIGxvZ29Eb2NrZXI6ICdsb2dvX2RvY2tlcicsXG4gIGxvZ29Ecm9wd2l6YXJkOiAnbG9nb19kcm9wd2l6YXJkJyxcbiAgbG9nb0VsYXN0aWM6ICdsb2dvX2VsYXN0aWMnLFxuICBsb2dvRWxhc3RpY1N0YWNrOiAnbG9nb19lbGFzdGljX3N0YWNrJyxcbiAgbG9nb0VsYXN0aWNzZWFyY2g6ICdsb2dvX2VsYXN0aWNzZWFyY2gnLFxuICBsb2dvRW50ZXJwcmlzZVNlYXJjaDogJ2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnLFxuICBsb2dvRXRjZDogJ2xvZ29fZXRjZCcsXG4gIGxvZ29HQ1A6ICdsb2dvX2djcCcsXG4gIGxvZ29HQ1BNb25vOiAnbG9nb19nY3BfbW9ubycsXG4gIGxvZ29HaXRodWI6ICdsb2dvX2dpdGh1YicsXG4gIGxvZ29HbWFpbDogJ2xvZ29fZ21haWwnLFxuICBsb2dvR29sYW5nOiAnbG9nb19nb2xhbmcnLFxuICBsb2dvR29vZ2xlRzogJ2xvZ29fZ29vZ2xlX2cnLFxuICBsb2dvSEFwcm94eTogJ2xvZ29faGFwcm94eScsXG4gIGxvZ29JQk06ICdsb2dvX2libScsXG4gIGxvZ29JQk1Nb25vOiAnbG9nb19pYm1fbW9ubycsXG4gIGxvZ29LYWZrYTogJ2xvZ29fa2Fma2EnLFxuICBsb2dvS2liYW5hOiAnbG9nb19raWJhbmEnLFxuICBsb2dvS3ViZXJuZXRlczogJ2xvZ29fa3ViZXJuZXRlcycsXG4gIGxvZ29Mb2dnaW5nOiAnbG9nb19sb2dnaW5nJyxcbiAgbG9nb0xvZ3N0YXNoOiAnbG9nb19sb2dzdGFzaCcsXG4gIGxvZ29NYXBzOiAnbG9nb19tYXBzJyxcbiAgbG9nb01lbWNhY2hlZDogJ2xvZ29fbWVtY2FjaGVkJyxcbiAgbG9nb01ldHJpY3M6ICdsb2dvX21ldHJpY3MnLFxuICBsb2dvTW9uZ29kYjogJ2xvZ29fbW9uZ29kYicsXG4gIGxvZ29NeVNRTDogJ2xvZ29fbXlzcWwnLFxuICBsb2dvTmdpbng6ICdsb2dvX25naW54JyxcbiAgbG9nb09ic2VydmFiaWxpdHk6ICdsb2dvX29ic2VydmFiaWxpdHknLFxuICBsb2dvT3NxdWVyeTogJ2xvZ29fb3NxdWVyeScsXG4gIGxvZ29QaHA6ICdsb2dvX3BocCcsXG4gIGxvZ29Qb3N0Z3JlczogJ2xvZ29fcG9zdGdyZXMnLFxuICBsb2dvUHJvbWV0aGV1czogJ2xvZ29fcHJvbWV0aGV1cycsXG4gIGxvZ29SYWJiaXRtcTogJ2xvZ29fcmFiYml0bXEnLFxuICBsb2dvUmVkaXM6ICdsb2dvX3JlZGlzJyxcbiAgbG9nb1NlY3VyaXR5OiAnbG9nb19zZWN1cml0eScsXG4gIGxvZ29TaXRlU2VhcmNoOiAnbG9nb19zaXRlX3NlYXJjaCcsXG4gIGxvZ29Ta2V0Y2g6ICdsb2dvX3NrZXRjaCcsXG4gIGxvZ29TbGFjazogJ2xvZ29fc2xhY2snLFxuICBsb2dvVXB0aW1lOiAnbG9nb191cHRpbWUnLFxuICBsb2dvV2ViaG9vazogJ2xvZ29fd2ViaG9vaycsXG4gIGxvZ29XaW5kb3dzOiAnbG9nb193aW5kb3dzJyxcbiAgbG9nb1dvcmtwbGFjZVNlYXJjaDogJ2xvZ29fd29ya3BsYWNlX3NlYXJjaCcsXG4gIGxvZ3NBcHA6ICdhcHBfbG9ncycsXG4gIGxvZ3N0YXNoRmlsdGVyOiAnbG9nc3Rhc2hfZmlsdGVyJyxcbiAgbG9nc3Rhc2hJZjogJ2xvZ3N0YXNoX2lmJyxcbiAgbG9nc3Rhc2hJbnB1dDogJ2xvZ3N0YXNoX2lucHV0JyxcbiAgbG9nc3Rhc2hPdXRwdXQ6ICdsb2dzdGFzaF9vdXRwdXQnLFxuICBsb2dzdGFzaFF1ZXVlOiAnbG9nc3Rhc2hfcXVldWUnLFxuICBtYWNoaW5lTGVhcm5pbmdBcHA6ICdhcHBfbWwnLFxuICBtYWduZXQ6ICdtYWduZXQnLFxuICBtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOiAnbWFnbmlmeVdpdGhFeGNsYW1hdGlvbicsXG4gIG1hZ25pZnlXaXRoTWludXM6ICdtYWduaWZ5V2l0aE1pbnVzJyxcbiAgbWFnbmlmeVdpdGhQbHVzOiAnbWFnbmlmeVdpdGhQbHVzJyxcbiAgbWFuYWdlbWVudEFwcDogJ2FwcF9tYW5hZ2VtZW50JyxcbiAgbWFwTWFya2VyOiAnbWFwX21hcmtlcicsXG4gIG1lbW9yeTogJ21lbW9yeScsXG4gIG1lbnU6ICdtZW51JyxcbiAgbWVudURvd246ICdtZW51RG93bicsXG4gIG1lbnVMZWZ0OiAnbWVudUxlZnQnLFxuICBtZW51UmlnaHQ6ICdtZW51UmlnaHQnLFxuICBtZW51VXA6ICdtZW51VXAnLFxuICBtZXJnZTogJ21lcmdlJyxcbiAgbWV0cmljYmVhdEFwcDogJ2FwcF9tZXRyaWNiZWF0JyxcbiAgbWV0cmljc0FwcDogJ2FwcF9tZXRyaWNzJyxcbiAgbWluaW1pemU6ICdtaW5pbWl6ZScsXG4gIG1pbnVzOiAnbWludXMnLFxuICBtaW51c0luQ2lyY2xlOiAnbWludXNfaW5fY2lyY2xlJyxcbiAgbWludXNJbkNpcmNsZUZpbGxlZDogJ21pbnVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBtb2JpbGU6ICdtb2JpbGUnLFxuICBtb25pdG9yaW5nQXBwOiAnYXBwX21vbml0b3JpbmcnLFxuICBtb29uOiAnbW9vbicsXG4gIG5hbWVzcGFjZTogJ25hbWVzcGFjZScsXG4gIG5lc3RlZDogJ25lc3RlZCcsXG4gIG5vZGU6ICdub2RlJyxcbiAgbm90ZWJvb2tBcHA6ICdhcHBfbm90ZWJvb2snLFxuICBudW1iZXI6ICdudW1iZXInLFxuICBvZmZsaW5lOiAnb2ZmbGluZScsXG4gIG9ubGluZTogJ29ubGluZScsXG4gIG91dGxpZXJEZXRlY3Rpb25Kb2I6ICdtbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InLFxuICBwYWNrYWdlOiAncGFja2FnZScsXG4gIHBhY2tldGJlYXRBcHA6ICdhcHBfcGFja2V0YmVhdCcsXG4gIHBhZ2VTZWxlY3Q6ICdwYWdlU2VsZWN0JyxcbiAgcGFnZXNTZWxlY3Q6ICdwYWdlc1NlbGVjdCcsXG4gIHBhcGVyQ2xpcDogJ3BhcGVyX2NsaXAnLFxuICBwYXJ0aWFsOiAncGFydGlhbCcsXG4gIHBhdXNlOiAncGF1c2UnLFxuICBwYXltZW50OiAncGF5bWVudCcsXG4gIHBlbmNpbDogJ3BlbmNpbCcsXG4gIHBlcmNlbnQ6ICdwZXJjZW50JyxcbiAgcGluOiAncGluJyxcbiAgcGluRmlsbGVkOiAncGluX2ZpbGxlZCcsXG4gIHBpcGVsaW5lQXBwOiAnYXBwX3BpcGVsaW5lJyxcbiAgcGxheTogJ3BsYXknLFxuICBwbGF5RmlsbGVkOiAncGxheUZpbGxlZCcsXG4gIHBsdXM6ICdwbHVzJyxcbiAgcGx1c0luQ2lyY2xlOiAncGx1c19pbl9jaXJjbGUnLFxuICBwbHVzSW5DaXJjbGVGaWxsZWQ6ICdwbHVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBwb3BvdXQ6ICdwb3BvdXQnLFxuICBwdXNoOiAncHVzaCcsXG4gIHF1ZXN0aW9uSW5DaXJjbGU6ICdxdWVzdGlvbl9pbl9jaXJjbGUnLFxuICBxdW90ZTogJ3F1b3RlJyxcbiAgcmVjZW50bHlWaWV3ZWRBcHA6ICdhcHBfcmVjZW50bHlfdmlld2VkJyxcbiAgcmVmcmVzaDogJ3JlZnJlc2gnLFxuICByZWdyZXNzaW9uSm9iOiAnbWxfcmVncmVzc2lvbl9qb2InLFxuICByZXBvcnRlcjogJ3JlcG9ydGVyJyxcbiAgcmVwb3J0aW5nQXBwOiAnYXBwX3JlcG9ydGluZycsXG4gIHJldHVybktleTogJ3JldHVybl9rZXknLFxuICBzYXZlOiAnc2F2ZScsXG4gIHNhdmVkT2JqZWN0c0FwcDogJ2FwcF9zYXZlZF9vYmplY3RzJyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlYXJjaFByb2ZpbGVyQXBwOiAnYXBwX3NlYXJjaF9wcm9maWxlcicsXG4gIHNlY3VyaXR5QW5hbHl0aWNzQXBwOiAnYXBwX3NlY3VyaXR5X2FuYWx5dGljcycsXG4gIHNlY3VyaXR5QXBwOiAnYXBwX3NlY3VyaXR5JyxcbiAgc2VjdXJpdHlTaWduYWw6ICdzZWN1cml0eVNpZ25hbCcsXG4gIHNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ6ICdzZWN1cml0eVNpZ25hbERldGVjdGVkJyxcbiAgc2VjdXJpdHlTaWduYWxSZXNvbHZlZDogJ3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnLFxuICBzZXNzaW9uVmlld2VyOiAnc2Vzc2lvblZpZXdlcicsXG4gIHNoYXJkOiAnc2hhcmQnLFxuICBzaGFyZTogJ3NoYXJlJyxcbiAgc25vd2ZsYWtlOiAnc25vd2ZsYWtlJyxcbiAgc29ydERvd246ICdzb3J0X2Rvd24nLFxuICBzb3J0TGVmdDogJ3NvcnRMZWZ0JyxcbiAgc29ydFJpZ2h0OiAnc29ydFJpZ2h0JyxcbiAgc29ydFVwOiAnc29ydF91cCcsXG4gIHNvcnRhYmxlOiAnc29ydGFibGUnLFxuICBzcGFjZXNBcHA6ICdhcHBfc3BhY2VzJyxcbiAgc3FsQXBwOiAnYXBwX3NxbCcsXG4gIHN0YXJFbXB0eTogJ3N0YXJfZW1wdHknLFxuICBzdGFyRW1wdHlTcGFjZTogJ3N0YXJfZW1wdHlfc3BhY2UnLFxuICBzdGFyRmlsbGVkOiAnc3Rhcl9maWxsZWQnLFxuICBzdGFyRmlsbGVkU3BhY2U6ICdzdGFyX2ZpbGxlZF9zcGFjZScsXG4gIHN0YXJNaW51c0VtcHR5OiAnc3Rhcl9taW51c19lbXB0eScsXG4gIHN0YXJNaW51c0ZpbGxlZDogJ3N0YXJfbWludXNfZmlsbGVkJyxcbiAgc3RhclBsdXNFbXB0eTogJ3N0YXJQbHVzRW1wdHknLFxuICBzdGFyUGx1c0ZpbGxlZDogJ3N0YXJQbHVzRmlsbGVkJyxcbiAgc3RhdHM6ICdzdGF0cycsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3RvcEZpbGxlZDogJ3N0b3BfZmlsbGVkJyxcbiAgc3RvcFNsYXNoOiAnc3RvcF9zbGFzaCcsXG4gIHN0b3JhZ2U6ICdzdG9yYWdlJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3VibW9kdWxlOiAnc3VibW9kdWxlJyxcbiAgc3VuOiAnc3VuJyxcbiAgc3dhdGNoSW5wdXQ6ICdzd2F0Y2hfaW5wdXQnLFxuICAvLyBVbmRvY3VtZW50ZWQgb24gcHVycG9zZS4gSGFzIGFuIGV4dHJhIHN0cm9rZSBmb3IgRXVpQ29sb3JQaWNrZXJcbiAgc3ltbGluazogJ3N5bWxpbmsnLFxuICB0YWJsZURlbnNpdHlDb21wYWN0OiAndGFibGVfZGVuc2l0eV9jb21wYWN0JyxcbiAgdGFibGVEZW5zaXR5RXhwYW5kZWQ6ICd0YWJsZV9kZW5zaXR5X2V4cGFuZGVkJyxcbiAgdGFibGVEZW5zaXR5Tm9ybWFsOiAndGFibGVfZGVuc2l0eV9ub3JtYWwnLFxuICB0YWJsZU9mQ29udGVudHM6ICd0YWJsZU9mQ29udGVudHMnLFxuICB0YWc6ICd0YWcnLFxuICB0ZWFyOiAndGVhcicsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0aW1lbGluZTogJ3RpbWVsaW5lJyxcbiAgdGltZWxpb25BcHA6ICdhcHBfdGltZWxpb24nLFxuICB0aW1lUmVmcmVzaDogJ3RpbWVSZWZyZXNoJyxcbiAgdGltZXNsaWRlcjogJ3RpbWVzbGlkZXInLFxuICB0cmFpbmluZzogJ3RyYWluaW5nJyxcbiAgdHJhc2g6ICd0cmFzaCcsXG4gIHVuZm9sZDogJ3VuZm9sZCcsXG4gIHVubGluazogJ3VubGluaycsXG4gIHVwZ3JhZGVBc3Npc3RhbnRBcHA6ICdhcHBfdXBncmFkZV9hc3Npc3RhbnQnLFxuICB1cHRpbWVBcHA6ICdhcHBfdXB0aW1lJyxcbiAgdXNlcjogJ3VzZXInLFxuICB1c2VyQXZhdGFyOiAndXNlckF2YXRhcicsXG4gIHVzZXJzOiAndXNlcnMnLFxuICB1c2Vyc1JvbGVzQXBwOiAnYXBwX3VzZXJzX3JvbGVzJyxcbiAgdmVjdG9yOiAndmVjdG9yJyxcbiAgdmlkZW9QbGF5ZXI6ICd2aWRlb1BsYXllcicsXG4gIHZpc0FyZWE6ICd2aXNfYXJlYScsXG4gIHZpc0FyZWFTdGFja2VkOiAndmlzX2FyZWFfc3RhY2tlZCcsXG4gIHZpc0Jhckhvcml6b250YWw6ICd2aXNfYmFyX2hvcml6b250YWwnLFxuICB2aXNCYXJIb3Jpem9udGFsU3RhY2tlZDogJ3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJyxcbiAgdmlzQmFyVmVydGljYWw6ICd2aXNfYmFyX3ZlcnRpY2FsJyxcbiAgdmlzQmFyVmVydGljYWxTdGFja2VkOiAndmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJyxcbiAgdmlzR2F1Z2U6ICd2aXNfZ2F1Z2UnLFxuICB2aXNHb2FsOiAndmlzX2dvYWwnLFxuICB2aXNMaW5lOiAndmlzX2xpbmUnLFxuICB2aXNNYXBDb29yZGluYXRlOiAndmlzX21hcF9jb29yZGluYXRlJyxcbiAgdmlzTWFwUmVnaW9uOiAndmlzX21hcF9yZWdpb24nLFxuICB2aXNNZXRyaWM6ICd2aXNfbWV0cmljJyxcbiAgdmlzUGllOiAndmlzX3BpZScsXG4gIHZpc1RhYmxlOiAndmlzX3RhYmxlJyxcbiAgdmlzVGFnQ2xvdWQ6ICd2aXNfdGFnX2Nsb3VkJyxcbiAgdmlzVGV4dDogJ3Zpc190ZXh0JyxcbiAgdmlzVGltZWxpb246ICd2aXNfdGltZWxpb24nLFxuICB2aXNWZWdhOiAndmlzX3ZlZ2EnLFxuICB2aXNWaXN1YWxCdWlsZGVyOiAndmlzX3Zpc3VhbF9idWlsZGVyJyxcbiAgdmlzdWFsaXplQXBwOiAnYXBwX3Zpc3VhbGl6ZScsXG4gIHdhdGNoZXNBcHA6ICdhcHBfd2F0Y2hlcycsXG4gIHdvcmRXcmFwOiAnd29yZFdyYXAnLFxuICB3b3JkV3JhcERpc2FibGVkOiAnd29yZFdyYXBEaXNhYmxlZCcsXG4gIHdvcmtwbGFjZVNlYXJjaEFwcDogJ2FwcF93b3JrcGxhY2Vfc2VhcmNoJyxcbiAgd3JlbmNoOiAnd3JlbmNoJyxcbiAgLy8gVG9rZW4gSWNvbiBJbXBvcnRzXG4gIHRva2VuQWxpYXM6ICd0b2tlbkFsaWFzJyxcbiAgdG9rZW5Bbm5vdGF0aW9uOiAndG9rZW5Bbm5vdGF0aW9uJyxcbiAgdG9rZW5BcnJheTogJ3Rva2VuQXJyYXknLFxuICB0b2tlbkJpbmFyeTogJ3Rva2VuQmluYXJ5JyxcbiAgdG9rZW5Cb29sZWFuOiAndG9rZW5Cb29sZWFuJyxcbiAgdG9rZW5DbGFzczogJ3Rva2VuQ2xhc3MnLFxuICB0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXI6ICd0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInLFxuICB0b2tlbkNvbnN0YW50OiAndG9rZW5Db25zdGFudCcsXG4gIHRva2VuRGF0ZTogJ3Rva2VuRGF0ZScsXG4gIHRva2VuRGVuc2VWZWN0b3I6ICd0b2tlbkRlbnNlVmVjdG9yJyxcbiAgdG9rZW5FbGVtZW50OiAndG9rZW5FbGVtZW50JyxcbiAgdG9rZW5FbnVtOiAndG9rZW5FbnVtJyxcbiAgdG9rZW5FbnVtTWVtYmVyOiAndG9rZW5FbnVtTWVtYmVyJyxcbiAgdG9rZW5FdmVudDogJ3Rva2VuRXZlbnQnLFxuICB0b2tlbkV4Y2VwdGlvbjogJ3Rva2VuRXhjZXB0aW9uJyxcbiAgdG9rZW5GaWVsZDogJ3Rva2VuRmllbGQnLFxuICB0b2tlbkZpbGU6ICd0b2tlbkZpbGUnLFxuICB0b2tlbkZsYXR0ZW5lZDogJ3Rva2VuRmxhdHRlbmVkJyxcbiAgdG9rZW5GdW5jdGlvbjogJ3Rva2VuRnVuY3Rpb24nLFxuICB0b2tlbkdlbzogJ3Rva2VuR2VvJyxcbiAgdG9rZW5IaXN0b2dyYW06ICd0b2tlbkhpc3RvZ3JhbScsXG4gIHRva2VuSW50ZXJmYWNlOiAndG9rZW5JbnRlcmZhY2UnLFxuICB0b2tlbklQOiAndG9rZW5JUCcsXG4gIHRva2VuSm9pbjogJ3Rva2VuSm9pbicsXG4gIHRva2VuS2V5OiAndG9rZW5LZXknLFxuICB0b2tlbktleXdvcmQ6ICd0b2tlbktleXdvcmQnLFxuICB0b2tlbk1ldGhvZDogJ3Rva2VuTWV0aG9kJyxcbiAgdG9rZW5NZXRyaWNDb3VudGVyOiAndG9rZW5NZXRyaWNDb3VudGVyJyxcbiAgdG9rZW5NZXRyaWNHYXVnZTogJ3Rva2VuTWV0cmljR2F1Z2UnLFxuICB0b2tlbk1vZHVsZTogJ3Rva2VuTW9kdWxlJyxcbiAgdG9rZW5OYW1lc3BhY2U6ICd0b2tlbk5hbWVzcGFjZScsXG4gIHRva2VuTmVzdGVkOiAndG9rZW5OZXN0ZWQnLFxuICB0b2tlbk51bGw6ICd0b2tlbk51bGwnLFxuICB0b2tlbk51bWJlcjogJ3Rva2VuTnVtYmVyJyxcbiAgdG9rZW5PYmplY3Q6ICd0b2tlbk9iamVjdCcsXG4gIHRva2VuT3BlcmF0b3I6ICd0b2tlbk9wZXJhdG9yJyxcbiAgdG9rZW5QYWNrYWdlOiAndG9rZW5QYWNrYWdlJyxcbiAgdG9rZW5QYXJhbWV0ZXI6ICd0b2tlblBhcmFtZXRlcicsXG4gIHRva2VuUGVyY29sYXRvcjogJ3Rva2VuUGVyY29sYXRvcicsXG4gIHRva2VuUHJvcGVydHk6ICd0b2tlblByb3BlcnR5JyxcbiAgdG9rZW5SYW5nZTogJ3Rva2VuUmFuZ2UnLFxuICB0b2tlblJhbmtGZWF0dXJlOiAndG9rZW5SYW5rRmVhdHVyZScsXG4gIHRva2VuUmFua0ZlYXR1cmVzOiAndG9rZW5SYW5rRmVhdHVyZXMnLFxuICB0b2tlblJlcG86ICd0b2tlblJlcG8nLFxuICB0b2tlblNlYXJjaFR5cGU6ICd0b2tlblNlYXJjaFR5cGUnLFxuICB0b2tlblNoYXBlOiAndG9rZW5TaGFwZScsXG4gIHRva2VuU3RyaW5nOiAndG9rZW5TdHJpbmcnLFxuICB0b2tlblN0cnVjdDogJ3Rva2VuU3RydWN0JyxcbiAgdG9rZW5TeW1ib2w6ICd0b2tlblN5bWJvbCcsXG4gIHRva2VuVGFnOiAndG9rZW5UYWcnLFxuICB0b2tlblRleHQ6ICd0b2tlblRleHQnLFxuICB0b2tlblRva2VuQ291bnQ6ICd0b2tlblRva2VuQ291bnQnLFxuICB0b2tlblZhcmlhYmxlOiAndG9rZW5WYXJpYWJsZSdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7XG52YXIgX3F1ZXVlID0gW107XG5cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgLy8gdGhlIHF1ZXVlZCBmdW5jdGlvbnMgdHJpZ2dlciByZWFjdCBzZXRTdGF0ZXMgd2hpY2gsIGlmIHVuYmF0Y2hlZCxcbiAgLy8gZWFjaCBjYXVzZSBhIGZ1bGwgdXBkYXRlLT5yZW5kZXItPmRvbSBwYXNzIF9wZXIgZnVuY3Rpb25fXG4gIC8vIGluc3RlYWQsIHRlbGwgUmVhY3QgdG8gd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBhcmUgZmluaXNoZWQgYmVmb3JlIHJlLXJlbmRlcmluZ1xuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9xdWV1ZVtpXSgpO1xuICAgIH1cblxuICAgIF9xdWV1ZS5sZW5ndGggPSAwO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVTdGF0ZUNoYW5nZShmbikge1xuICBpZiAoX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHNldFRpbWVvdXQocHJvY2Vzc1F1ZXVlKTtcbiAgfVxuXG4gIF9xdWV1ZS5wdXNoKGZuKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInLCAndGV4dCcsICdzdWJkdWVkJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQ29sb3IobmFtZSkge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKG5hbWUpO1xufSIsICJmdW5jdGlvbiBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KG9iaikgeyBpZiAob2JqID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdW5kZWZpbmVkXCIpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVNjcm9sbEJhclN0eWxlcyB9IGZyb20gJy4uL21peGlucyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHJlc2V0U3R5bGVzIGFzIHJlc2V0IH0gZnJvbSAnLi9yZXNldCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlHbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBFdWlHbG9iYWxTdHlsZXMoX3JlZikge1xuICBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KF9yZWYpO1xuXG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYmFzZSA9IGV1aVRoZW1lLmJhc2UsXG4gICAgICBjb2xvcnMgPSBldWlUaGVtZS5jb2xvcnMsXG4gICAgICBmb250ID0gZXVpVGhlbWUuZm9udDtcbiAgLyoqXG4gICAqIERlY2xhcmluZyB0aGUgdG9wIGxldmVsIHNjcm9sbGJhciBjb2xvcnMgdG8gbWF0Y2ggdGhlIHRoZW1lIGFsc28gcmVxdWlyZXMgc2V0dGluZyB0aGUgc2l6ZXMgb24gQ2hyb21lXG4gICAqIHNvIHRoYXQgaXQga25vd3MgdG8gdXNlIGN1c3RvbSBzdHlsZXMuIFRoZXJlZm9yZSwgd2UganVzdCByZXVzZSB0aGUgc2FtZSBzY3JvbGxiYXIgbWl4aW4gd2l0aCB0aGljayBzaXplLlxuICAgKi9cblxuICB2YXIgc2Nyb2xsYmFyU3R5bGVzID0gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIHRyYWNrQ29sb3I6IGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IHNoYWRlKGNvbG9ycy5ib2R5LCAwLjAzKSA6IHRpbnQoY29sb3JzLmJvZHksIDAuMDcpLFxuICAgIHdpZHRoOiAnYXV0bydcbiAgfSk7XG4gIC8qKlxuICAgKiBUaGlzIGZvbnQgcmVzZXQgc2V0cyBhbGwgb3VyIGJhc2UgZm9udC90eXBvZ3JhcGh5IHJlbGF0ZWQgcHJvcGVydGllc1xuICAgKiB0aGF0IGFyZSBuZWVkZWQgdG8gb3ZlcnJpZGUgYnJvd3Nlci1zcGVjaWZpYyBlbGVtZW50IHNldHRpbmdzLlxuICAgKi9cblxuICB2YXIgZm9udFJlc2V0ID0gXCJcXG4gICAgZm9udC1mYW1pbHk6IFwiLmNvbmNhdChmb250LmZhbWlseSwgXCI7XFxuICAgIGZvbnQtc2l6ZTogXCIsIFwiXCIuY29uY2F0KGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UsIFwicHhcIiksIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChiYXNlIC8gKGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UpLCBcIjtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZm9udC53ZWlnaHRbZm9udC5ib2R5LndlaWdodF0sIFwiO1xcbiAgXCIpO1xuICAvKipcbiAgICogRmluYWwgc3R5bGVzXG4gICAqL1xuXG4gIHZhciBzdHlsZXMgPSAvKiNfX1BVUkVfXyovY3NzKHJlc2V0LCBcIiBodG1se1wiLCBzY3JvbGxiYXJTdHlsZXMsIFwiIFwiLCBmb250UmVzZXQsIFwiIHRleHQtc2l6ZS1hZGp1c3Q6MTAwJTtmb250LWtlcm5pbmc6bm9ybWFsO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5ib2R5LCBcIjtjb2xvcjpcIiwgY29sb3JzLnRleHQsIFwiO31jb2RlLHByZSxrYmQsc2FtcHtmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHlDb2RlLCBcIjt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e1wiLCBmb250UmVzZXQsIFwiO31idXR0b257Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5LCBcIjt9ZW17Zm9udC1zdHlsZTppdGFsaWM7fXN0cm9uZ3tmb250LXdlaWdodDpcIiwgZm9udC53ZWlnaHQuYm9sZCwgXCI7fSo6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZSksIFwiO306OnNlbGVjdGlvbntiYWNrZ3JvdW5kOlwiLCB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgY29sb3JNb2RlID09PSAnTElHSFQnID8gMC4xIDogMC4yKSwgXCI7fWF7Y29sb3I6XCIsIGNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7JiwmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fX0uZXVpQm9keS1oYXNQb3J0YWxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6c3R5bGVzO1wiKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgQkFDS0dST1VORF9DT0xPUlMgPSBbJ3RyYW5zcGFyZW50JywgJ3BsYWluJywgJ3N1YmR1ZWQnLCAnYWNjZW50JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBldWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBldWlCYWNrZ3JvdW5kQ29sb3IoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBtZXRob2QgPSBfcmVmMi5tZXRob2Q7XG5cbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gJ3RyYW5zcGFyZW50JztcblxuICBpZiAobWV0aG9kID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgaWYgKGNvbG9yID09PSAncGxhaW4nKSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmdob3N0LCAwLjIpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWJkdWVkJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC4xKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCAwLjgpIDogdGludChjb2xvciwgMC45KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoIChjb2xvcikge1xuICAgICAgY2FzZSAncGxhaW4nOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGU7XG5cbiAgICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmJvZHk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvcihjb2xvcikge1xuICB2YXIgX3JlZjMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgbWV0aG9kID0gX3JlZjMubWV0aG9kO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yLCB7XG4gICAgbWV0aG9kOiBtZXRob2RcbiAgfSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNwYXJlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3RyYW5zcGFyZW50JyksIFwiOztsYWJlbDp0cmFuc3BhcmVudDtcIiksXG4gICAgcGxhaW46IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3BsYWluJyksIFwiOztsYWJlbDpwbGFpbjtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3ViZHVlZCcpLCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdhY2NlbnQnKSwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcigncHJpbWFyeScpLCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3VjY2VzcycpLCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignd2FybmluZycpLCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdkYW5nZXInKSwgXCI7O2xhYmVsOmRhbmdlcjtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuLyoqXG4gKiBTZXQgc2Nyb2xsIGJhciBhcHBlYXJhbmNlIG9uIENocm9tZSAoYW5kIGZpcmVmb3gpLlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIHNwZWNpZmljIGdsb2JhbCBzZXR0aW5ncy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcm9sbEJhclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcm9sbEJhclN0eWxlcyhfcmVmKSB7XG4gIHZhciBfcmVmJGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9ycyA9IF9yZWYkZXVpVGhlbWUuY29sb3JzLFxuICAgICAgc2l6ZSA9IF9yZWYkZXVpVGhlbWUuc2l6ZTtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3RodW1iQ29sb3IgPSBfcmVmMi50aHVtYkNvbG9yLFxuICAgICAgX3JlZjIkdHJhY2tDb2xvciA9IF9yZWYyLnRyYWNrQ29sb3IsXG4gICAgICB0cmFja0NvbG9yID0gX3JlZjIkdHJhY2tDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYyJHRyYWNrQ29sb3IsXG4gICAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gJ3RoaW4nIDogX3JlZjIkd2lkdGgsXG4gICAgICBfc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBfY29ybmVyID0gX3JlZjIuY29ybmVyO1xuXG4gIC8vIFNldCBkZWZhdWx0cyBmcm9tIHRoZW1lXG4gIHZhciB0aHVtYkNvbG9yID0gX3RodW1iQ29sb3IgfHwgdHJhbnNwYXJlbnRpemUoY29sb3JzLmRhcmtTaGFkZSwgMC41KTtcblxuICB2YXIgc2Nyb2xsQmFyU2l6ZSA9IF9zaXplIHx8IHNpemUuYmFzZTtcbiAgdmFyIHNjcm9sbEJhckNvcm5lciA9IF9jb3JuZXIgfHwgd2lkdGggPT09ICd0aGluJyA/IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5zLCBcIiAqIDAuNzUpXCIpIDogc2l6ZS54czsgLy8gRmlyZWZveCdzIHNjcm9sbGJhciBjb2xvcmluZyBjYXNjYWRlcywgYnV0IHRoZSBzaXppbmcgZG9lcyBub3QsXG4gIC8vIHNvIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhpcyBtaXhpbiBmb3IgYWxsb3dpbmcgc3VwcG9ydCB3aGVyZXZlciBjdXN0b20gc2Nyb2xsYmFycyBhcmVcblxuICB2YXIgZmlyZWZveFN1cHBvcnQgPSBcInNjcm9sbGJhci1jb2xvcjogXCIuY29uY2F0KHRodW1iQ29sb3IsIFwiIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XCIpO1xuICByZXR1cm4gXCJzY3JvbGxiYXItd2lkdGg6IFwiLmNvbmNhdCh3aWR0aCwgXCI7XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICB3aWR0aDogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgICBoZWlnaHQ6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodGh1bWJDb2xvciwgXCI7XFxuICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChzY3JvbGxCYXJDb3JuZXIsIFwiIHNvbGlkIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLFxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICBcIikuY29uY2F0KGZpcmVmb3hTdXBwb3J0LCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2Nyb2xsQmFyID0gZnVuY3Rpb24gdXNlRXVpU2Nyb2xsQmFyKG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiAqSU5URVJOQUwqXG4gKiBPdmVyZmxvdyBzaGFkb3cgbWFza3MgZm9yIHVzZSBpbiBZU2Nyb2xsIGFuZCBYU2Nyb2xsIGhlbHBlcnNcbiAqL1xuXG52YXIgZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhfcmVmMykge1xuICB2YXIgc2l6ZSA9IF9yZWYzLmV1aVRoZW1lLnNpemU7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9kaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICBfc2lkZSA9IF9yZWY0LnNpZGU7XG5cbiAgdmFyIGRpcmVjdGlvbiA9IF9kaXJlY3Rpb24gfHwgJ3knO1xuICB2YXIgc2lkZSA9IF9zaWRlIHx8ICdib3RoJztcbiAgdmFyIGhpZGVIZWlnaHQgPSBcImNhbGMoXCIuY29uY2F0KHNpemUuYmFzZSwgXCIgKiAwLjc1ICogMS4yNSlcIik7XG4gIHZhciBncmFkaWVudFN0YXJ0ID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMCUsXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIlxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnRFbmQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgY2FsYygxMDAlIC0gXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIiksXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAxMDAlXFxuICBcIik7XG4gIHZhciBncmFkaWVudCA9ICcnO1xuXG4gIGlmIChzaWRlKSB7XG4gICAgaWYgKHNpZGUgPT09ICdib3RoJykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0LCBcIiwgXCIpLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfSBlbHNlIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH1cbn07XG4vKipcbiAqIDEuIEZvY3VzIHJpbmdzIHNob3VsZG4ndCBiZSB2aXNpYmxlIG9uIHNjcm9sbGFibGUgcmVnaW9ucywgYnV0IGExMXkgcmVxdWlyZXMgdGhlbSB0byBiZSBmb2N1c2FibGUuXG4gKiAgICBCcm93c2VyJ3Mgc3VwcG9ydGluZyBgOmZvY3VzLXZpc2libGVgIHdpbGwgc3RpbGwgc2hvdyBvdXRsaW5lIG9uIGtleWJvYXJkIGZvY3VzIG9ubHkuXG4gKiAgICBPdGhlcnMgbGlrZSBTYWZhcmksIHdvbid0IHNob3cgYW55dGhpbmcgYXQgYWxsLlxuICovXG4vLyBUT0RPOiBIb3cgZG8gd2UgdXNlIEVtb3Rpb24gdG8gb3V0cHV0IHRoZSBDU1MgY2xhc3MgdXRpbGl0aWVzIGluc3RlYWQ/XG5cblxuZXhwb3J0IHZhciBldWlZU2Nyb2xsID0gZnVuY3Rpb24gZXVpWVNjcm9sbChldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGwoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlZU2Nyb2xsKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd5J1xuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbCA9IGZ1bmN0aW9uIGV1aVhTY3JvbGwoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbChldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWFNjcm9sbChldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneCdcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIF9yZWY1JG1hc2sgPSBfcmVmNS5tYXNrLFxuICAgICAgbWFzayA9IF9yZWY1JG1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjUkbWFzaztcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWVNjcm9sbChldWlUaGVtZSk7XG5cbiAgICBjYXNlICd4JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBkaXJlY3Rpb24gb3B0aW9uIHRvIHVzZUV1aU92ZXJmbG93U2Nyb2xsJyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpT3ZlcmZsb3dTY3JvbGwoZGlyZWN0aW9uKSB7XG4gIHZhciBtYXNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgbWFzazogbWFza1xuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGxvZ2ljYWxTaWRlIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCddO1xuZXhwb3J0IHZhciBldWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIGV1aVBhZGRpbmdTaXplKF9yZWYsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZS5iYXNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplW3NpemVdO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdTaXplKHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdDU1MgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nQ1NTKHNpZGUpIHtcbiAgdmFyIHByb3BlcnR5ID0gc2lkZSA/IFwicGFkZGluZy1cIi5jb25jYXQobG9naWNhbFNpZGVbc2lkZV0pIDogJ3BhZGRpbmcnO1xuICByZXR1cm4ge1xuICAgIG5vbmU6IG51bGwsXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCdsJyksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCd4bCcpLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogSXQgaXMgYmVzdCBwcmFjdGljZSB0byB1dGlsaXplIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBgb3V0bGluZWAgcHJvcGVydHkgZm9yIGhhbmRsaW5nIGZvY3VzIHJpbmdzLlxuICogSG93ZXZlciwgc29tZSBjb21wb25lbnRzIG5lZWQgdG8gYmUgZm9yY2VkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIG9yIGFkanVzdCB0aGUgZGlzcGxheS5cbiAqIFRoaXMgZnVuY3Rpb24gcmUtYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0IG91dGxpbmUgd2l0aCBhIGNvdXBsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZXVpVGhlbWUgVXNlRXVpVGhlbWUuZXVpVGhlbWVcbiAqIEBwYXJhbSBvZmZzZXQgQWNjZXB0cyBhIHNwZWNpZmljIG1lYXN1cmVtZW50IG9yICdpbnNldCcsICdvdXRzZXQnIG9yICdjZW50ZXInIHRvIGFkanVzdCBvdXRsaW5lIHBvc2l0aW9uXG4gKiBAcGFyYW0gY29sb3IgQWNjZXB0cyBhbnkgQ1NTIGNvbG9yLCAqKk5vdGU6IG9ubHkgd29ya3MgaW4gLXdlYmtpdC0qKlxuICovXG5leHBvcnQgdmFyIGV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIGV1aUZvY3VzUmluZyhldWlUaGVtZSkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gV2lkdGggaXMgZW5mb3JjZWQgYXMgYSBjb25zdGFudCBhdCB0aGUgZ2xvYmFsIHRoZW1lIGxheWVyXG4gIHZhciBvdXRsaW5lV2lkdGggPSBldWlUaGVtZS5mb2N1cy53aWR0aDtcbiAgdmFyIG91dGxpbmVDb2xvciA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29sb3IpIHx8IGV1aVRoZW1lLmZvY3VzLmNvbG9yO1xuICB2YXIgb3V0bGluZU9mZnNldCA9IG9mZnNldDtcblxuICBpZiAob2Zmc2V0ID09PSAnaW5zZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiLVwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ291dHNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCJcIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdjZW50ZXInKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiY2FsYyhcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiAvIC0yKTtcIik7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgZm9jdXMtdmlzaWJsZWAgdG8gdHVybiBvbiBmb2N1cyBvdXRsaW5lcy5cbiAgLy8gQnV0IHRoaXMgaXMgYnJvd3Nlci1kZXBlbmRlbmQ6XG4gIC8vIFx1RDgzRFx1REM0OSBTYWZhcmkgYW5kIEZpcmVmb3ggaW5uYXRlbHkgcmVzcGVjdCBvbmx5IHNob3dpbmcgdGhlIG91dGxpbmUgd2l0aCBrZXlib2FyZCBvbmx5XG4gIC8vIFx1RDgzRFx1REM5NCBCdXQgdGhleSBkb24ndCBhbGxvdyBjb2xvcmluZyBvZiB0aGUgJ2F1dG8nL2RlZmF1bHQgb3V0bGluZSwgc28gY29udHJhc3QgaXMgbm8gZ29vZCBpbiBkYXJrIG1vZGUuXG4gIC8vIFx1RDgzRFx1REM0OSBGb3IgdGhlc2UgYnJvd3NlcnMgd2UgdXNlIHRoZSBzb2xpZCB0eXBlIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggYGN1cnJlbnRDb2xvci5cbiAgLy8gXHVEODNEXHVERTI2IFdoaWNoIGRvZXMgbWVhbnMgdGhlIG91dGxpbmUgd2lsbCBiZSBzcXVhcmVcblxuXG4gIHJldHVybiBcIlxcbiAgICBvdXRsaW5lOiBcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KG91dGxpbmVDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KG91dGxpbmVPZmZzZXQsIFwiO1xcblxcbiAgICAvLyBcXHVEODNEXFx1REM0MCBDaHJvbWUgcmVzcGVjdHMgOmZvY3VzLXZpc2libGUgYW5kIGFsbG93cyBjb2xvcmluZyB0aGUgYGF1dG9gIHN0eWxlXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZS1zdHlsZTogYXV0bztcXG4gICAgfVxcblxcbiAgICAvLyBcXHVEODNEXFx1REU0NVxcdTIwMERcXHUyNjQwXFx1RkUwRiBCdXQgQ2hyb21lIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgb3V0bGluZSBmb3JjZWZ1bGx5IHJlbW92ZWQgZnJvbSByZWd1bGFyIGA6Zm9jdXNgIHN0YXRlXFxuICAgICY6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gdXNlRXVpRm9jdXNSaW5nKG9mZnNldCwgY29sb3IpIHtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZTtcblxuICByZXR1cm4gZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCBvZmZzZXQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgZXVpTGluZUhlaWdodEZyb21CYXNlbGluZSwgZXVpRm9udFNpemVGcm9tU2NhbGUgfSBmcm9tICcuLi9mdW5jdGlvbnMvdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2hvb2tzJztcblxuLyoqXG4gKiBSZXR1cm5zIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHRcbiAqL1xuZXhwb3J0IHZhciBldWlGb250U2l6ZSA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplKF9yZWYsIHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZm9udFNpemU6IGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucyksXG4gICAgbGluZUhlaWdodDogZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpXG4gIH07XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb250U2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aUZvbnRTaXplKHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlGb250U2l6ZShldWlUaGVtZSwgc2NhbGUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogRm9yY2UgdGV4dCB0byB3cmFwIG9uIG5hdHVyYWwgd29yZCBicmVha3MgKGUuZy4gc3BhY2VzICYgaHlwaGVucylcbiAqIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL3ByZXZlbnQtbG9uZy11cmxzLWZyb20tYnJlYWtpbmctb3V0LW9mLWNvbnRhaW5lci9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRCcmVha1dvcmQgPSBmdW5jdGlvbiBldWlUZXh0QnJlYWtXb3JkKCkge1xuICByZXR1cm4gXCJcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gbWFrZXMgc3VyZSB0aGUgbG9uZyBzdHJpbmcgd2lsbCB3cmFwIGFuZCBub3QgYnVzdCBvdXQgb2YgdGhlIGNvbnRhaW5lclxcbiAgd29yZC13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IC8vIHNwZWMgc2F5cywgdGhleSBhcmUgbGl0ZXJhbGx5IGp1c3QgYWx0ZXJuYXRlIG5hbWVzIGZvciBlYWNoIG90aGVyIGJ1dCBzb21lIGJyb3dzZXJzIHN1cHBvcnQgb25lIGFuZCBub3QgdGhlIG90aGVyXFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkOyAvLyBJRSBkb2Vzbid0IHVuZGVyc3RhbmQgYnV0IHRoYXQncyBva1xcblwiO1xufTtcbi8qKlxuICogUHJldmVudCB0ZXh0IGZyb20gd3JhcHBpbmcgb250byBtdWx0aXBsZSBsaW5lcywgYW5kIHRydW5jYXRlIHdpdGggYW4gZWxsaXBzaXMuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBldWlUZXh0VHJ1bmNhdGUoKSB7XG4gIHZhciBtYXhXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJzEwMCUnO1xuICByZXR1cm4gXCJcXG4gIG1heC13aWR0aDogXCIuY29uY2F0KG1heFdpZHRoLCBcIjsgLy8gRW5zdXJlIHRoYXQgdGhlIG5vZGUgaGFzIGEgbWF4aW11bSB3aWR0aCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1clxcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG5cIik7XG59O1xuLyoqXG4gKiBGaXhlZC13aWR0aCBudW1iZXJzIGZvciB0YWJ1bGFyIGRhdGFcbiAqL1xuXG5leHBvcnQgdmFyIGV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGV1aU51bWJlckZvcm1hdChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZlYXR1cmVTZXR0aW5ncywgXCIsICd0bnVtJyAxO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIHVzZUV1aU51bWJlckZvcm1hdCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU51bWJlckZvcm1hdChldWlUaGVtZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5XG4gKiBzbyB0aGF0IHdoZW4gaXQgaXMgdHVybmVkIG9mZiwgYW5pbWF0aW9ucyBhcmUgbm90IHJ1bi5cbiAqL1xuZXhwb3J0IHZhciBldWlDYW5BbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSc7XG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbFxuICogb25seSBhcHBseSB0aGUgY29udGVudCBpZiB0aGUgc2V0dGluZyBpcyBvZmYgKHJlZHVjZSkuXG4gKi9cblxuZXhwb3J0IHZhciBldWlDYW50QW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSc7XG4vKipcbiAqIFNwZWVkcyAvIER1cmF0aW9ucyAvIERlbGF5c1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25TcGVlZHMgPSBbJ2V4dHJhRmFzdCcsICdmYXN0JywgJ25vcm1hbCcsICdzbG93JywgJ2V4dHJhU2xvdyddO1xuXG4vKipcbiAqIEVhc2luZ3MgLyBUaW1pbmcgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25FYXNpbmdzID0gWydib3VuY2UnLCAncmVzaXN0YW5jZSddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciByZXNldFN0eWxlcyA9IFwiXFxuLyogLy8gQWRhcHRlZCBmcm9tIEVyaWMgTWV5ZXIncyByZXNldCAoaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC8sIHYyLjAgfCAyMDExMDEyNikuICovXFxuXFxuXFxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsXFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxcbnRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLFxcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuYVtocmVmXSxcXG5idXR0b24sXFxuW3JvbGU9J2J1dHRvbiddIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5pbnB1dCB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5pbnB1dDpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAxOyAvKiByZXF1aXJlZCBvbiBpT1MgKi9cXG59XFxuXFxub2wsXFxudWwge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZSxcXG5xIHtcXG4gIHF1b3Rlczogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZTpiZWZvcmUsXFxuYmxvY2txdW90ZTphZnRlcixcXG5xOmJlZm9yZSxcXG5xOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG5cXG50YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuZmllbGRzZXQge1xcbiAgbWluLWlubGluZS1zaXplOiBhdXRvO1xcbn1cXG5cXG4vKiBDaHJvbWUgaGFzIGFuIGlzc3VlIGFyb3VuZCBSVEwgbGFuZ3VhZ2VzIGluIFNWR3Mgd2hlbiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZVxcbiAqIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTk2NjQ4MFxcbiAqL1xcbnN2ZyB0ZXh0IHtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDtcXG59XCI7IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBpY29uU2l6ZSA9IGZ1bmN0aW9uIGljb25TaXplKHNpemUpIHtcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIHNpemUpLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzaXplKSwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGljb25Mb2FkaW5nT3BhY2l0eSA9IDAuMDU7XG52YXIgaWNvbkxvYWRpbmcgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiBcIiwgXCI7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSwgaWNvbkxvYWRpbmdPcGFjaXR5KTtcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJY29uU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKTsuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGUsIFwiO307bGFiZWw6ZXVpSWNvbjtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmdob3N0O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOnRleHQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgaW5oZXJpdDogX3JlZjIsXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIiksXG4gICAgbG9nb0VsYXN0aWNPdXRsaW5lOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS5tKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUubCksIFwiO2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueGwpLCBcIjtsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueHhsKSwgXCI7bGFiZWw6eHhsO1wiKSxcbiAgICAvLyBWYXJpYW50c1xuICAgIC8vIEFwcCBpY29ucyBhcmUgdHdvLXRvbmVkLiBUaGlzIHByb3ZpZGVzIHRoZSBiYXNlIGNvbG9yLlxuICAgIGFwcDogLyojX19QVVJFX18qL2NzcyhcImZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjsuZXVpSWNvbl9fZmlsbFNlY29uZGFyeXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiO307bGFiZWw6YXBwO1wiKSxcbiAgICBsb2dvOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxvZ287XCIpLFxuICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgaXNMb2FkaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTpcIiwgaWNvbkxvYWRpbmdPcGFjaXR5LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6aXNMb2FkaW5nO1wiKSxcbiAgICBpc0xvYWRlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGljb25Mb2FkaW5nLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbiAwcyAxIGZvcndhcmRzO307bGFiZWw6aXNMb2FkZWQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlJMThuQ29uc3VtZXIgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9jb250ZXh0JztcbmltcG9ydCB7IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuIH0gZnJvbSAnLi9pMThuX3V0aWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiSTE4biBtYXBwaW5nIGZvciB0b2tlbiBcXFwiXCIuY29uY2F0KHRva2VuLCBcIlxcXCIgaXMgYSBmb3JtYXR0aW5nIGZ1bmN0aW9uIGJ1dCBubyB2YWx1ZXMgd2VyZSBwcm92aWRlZC5cIikpO1xufVxuXG5mdW5jdGlvbiBsb29rdXBUb2tlbihvcHRpb25zKSB7XG4gIHZhciB0b2tlbiA9IG9wdGlvbnMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZyA9IG9wdGlvbnMuaTE4bk1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQgPSBvcHRpb25zLnZhbHVlRGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYyA9IG9wdGlvbnMuaTE4bk1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgICByZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgdmFyIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZyAmJiBpMThuTWFwcGluZ1t0b2tlbl0gfHwgdmFsdWVEZWZhdWx0O1xuXG4gIGlmICh0eXBlb2YgcmVuZGVyYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgVHlwZVNjcmlwdCBjb21wbGFpbnMgdGhhdCBgREVGQVVMVGAgZG9lc24ndCBoYXZlIGEgY2FsbCBzaWduYXR1cmUgYnV0IHdlIHZlcmlmaWVkIGByZW5kZXJhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cblxuICAgIHZhciByZW5kZXJlZCA9IHJlbmRlcmFibGUodmFsdWVzKTtcbiAgICByZXR1cm4gaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiByZW5kZXJlZCA9PT0gJ3N0cmluZycgPyBpMThuTWFwcGluZ0Z1bmMocmVuZGVyZWQpIDogcmVuZGVyZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWVzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlbmRlcmFibGUgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgdmFsdWVEZWZhdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZURlZmF1bHQpO1xuICAgIH0gLy8gdGhlcmUncyBhIGhvbGUgaW4gdGhlIHR5cGluZ3MgaGVyZSBhcyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpMThuTWFwcGluZ0Z1bmNcbiAgICAvLyByZXR1cm5lZCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgd2UgbmVlZCB0byBrZWVwIHRoYXQgYXNzdW1wdGlvblxuXG5cbiAgICByZXR1cm4gcmVuZGVyYWJsZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKHJlbmRlcmFibGUsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKTtcblxuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgIC8vIGxpa2V3aXNlLCBgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW5gIHJldHVybnMgYSBzdHJpbmcgb3IgUmVhY3RDaGlsZFtdIGRlcGVuZGluZyBvblxuICAgIC8vIHRoZSB0eXBlIG9mIGB2YWx1ZXNgLCBzbyB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBjb3JyZWN0LlxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciBDb21wb25lbnQgPSByZW5kZXIgPyByZW5kZXIoY2hpbGRyZW4pIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH07IC8vIHNhbWUgcmVhc29ucyBhcyBhYm92ZSwgd2UgY2FuJ3QgcHJvbWlzZSB0aGUgdHJhbnNmb3JtcyBtYXRjaCB0aGUgZGVmYXVsdCdzIHR5cGVcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB2YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBpc0kxOG5Ub2tlbnNTaGFwZSh4KSB7XG4gIHJldHVybiB4LnRva2VucyAhPSBudWxsO1xufSAvLyBNdXN0IHVzZSB0aGUgZ2VuZXJpY3MgPFQgZXh0ZW5kcyB7fT5cbi8vIElmIGluc3RlYWQgdHlwZWQgd2l0aCBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCB0aGVyZSBpc24ndCBmZWVkYmFjayBnaXZlbiBiYWNrIHRvIHRoZSBkZXZcbi8vIHdoZW4gdXNpbmcgYSBgdmFsdWVzYCBvYmplY3Qgd2l0aCBhIHJlbmRlcmVyIGNhbGxiYWNrLlxuXG5cbnZhciBFdWlJMThuID0gZnVuY3Rpb24gRXVpSTE4bihwcm9wcykge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChpMThuQ29uZmlnKSB7XG4gICAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgICBpZiAoaXNJMThuVG9rZW5zU2hhcGUocHJvcHMpKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4ocHJvcHMudG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdHNbaWR4XSxcbiAgICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5WYWx1ZSA9IGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0LFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRva2VuVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgICB9XG4gIH0pO1xufTsgLy8gQSBzaW5nbGUgZGVmYXVsdCBjb3VsZCBiZSBhIHN0cmluZywgcmVhY3QgY2hpbGQsIG9yIHJlbmRlciBmdW5jdGlvblxuXG5cbmZ1bmN0aW9uIHVzZUV1aUkxOG4oKSB7XG4gIHZhciBpMThuQ29uZmlnID0gdXNlQ29udGV4dChJMThuQ29udGV4dCk7XG4gIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9wc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgX3Rva2VuID0gcHJvcHNbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWUgPSBwcm9wc1sxXSxcbiAgICAgICAgX3ZhbHVlcyA9IHByb3BzWzJdO1xuICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogX3Rva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWUsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBfdmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBfdG9rZW5zID0gX3JlZjJbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWVzID0gX3JlZjJbMV07XG5cbiAgICByZXR1cm4gX3Rva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZXNbaWR4XSxcbiAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJMThuQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBFdWlJMThuUHJvdmlkZXIgPSBJMThuQ29udGV4dC5Qcm92aWRlcixcbiAgICBFdWlJMThuQ29uc3VtZXIgPSBJMThuQ29udGV4dC5Db25zdW1lcjtcblxudmFyIEV1aUNvbnRleHQgPSBmdW5jdGlvbiBFdWlDb250ZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaTE4biA9IF9yZWYuaTE4bixcbiAgICAgIGkxOG4gPSBfcmVmJGkxOG4gPT09IHZvaWQgMCA/IHt9IDogX3JlZiRpMThuLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaTE4blxuICB9LCBjaGlsZHJlbik7XG59O1xuXG5FdWlDb250ZXh0LnByb3BUeXBlcyA9IHtcbiAgaTE4bjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtYXBwaW5nOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIG1hcHBpbmdGdW5jOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogU29tZSBicm93c2VycycgdHJhbnNsYXRpb24gZmVhdHVyZXMgZG9uJ3Qgd29yayB3aXRoIGEgcmVuZGVyZWQgYDxGcmFnbWVudD5gIGNvbXBvbmVudC5cbiAgICAgICAqIFRoZSBgcmVuZGVyYCBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHBhc3MgaW4gYW5vdGhlciBjb21wb25lbnQgaW5zdGVhZCwgZS5nLiBgPGRpdj5gXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdE51bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0RGF0ZVRpbWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHsgRXVpQ29udGV4dCwgRXVpSTE4bkNvbnN1bWVyLCBJMThuQ29udGV4dCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaGFzUHJvcE5hbWUoY2hpbGQpIHtcbiAgcmV0dXJuIGNoaWxkID8gX3R5cGVvZihjaGlsZCkgPT09ICdvYmplY3QnICYmIGNoaWxkLmhhc093blByb3BlcnR5KCdwcm9wTmFtZScpIDogZmFsc2U7XG59XG4vKipcbiAqIFJlcGxhY2VzIHBsYWNlaG9sZGVyIHZhbHVlcyBpbiBgaW5wdXRgIHdpdGggdGhlaXIgbWF0Y2hpbmcgdmFsdWUgaW4gYHZhbHVlc2BcbiAqIGUuZy4gaW5wdXQ6J0hlbGxvLCB7bmFtZX0nIHdpbGwgcmVwbGFjZSBge25hbWV9YCB3aXRoIGB2YWx1ZXNbbmFtZV1gXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7UmVuZGVyYWJsZVZhbHVlc30gdmFsdWVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpMThuTWFwcGluZ0Z1bmNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBSZWFjdC5SZWFjdENoaWxkW119XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4oaW5wdXQsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdO1xuICB2YXIgY2hpbGQ7XG5cbiAgZnVuY3Rpb24gYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcikge1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzdGFydGluZyBhIG5ldyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGFyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXhpc3Rpbmcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hpbGQgKyBjaGFyO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUoY2hpbGQpKSB7XG4gICAgICAvLyBhZGRpbmcgdG8gdGhlIHByb3BOYW1lIG9mIGEgdmFsdWVzIGxvb2t1cFxuICAgICAgY2hpbGQucHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZSArIGNoYXI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIC8vIGFuIGFycmF5IHdpdGggYW55IFJlYWN0RWxlbWVudHMgd2lsbCBiZSBrZXB0IGFzIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGV5IG5lZWQgdG8gYmUgYXNzaWduZWQgYSBrZXlcbiAgICAgIGNoaWxkcmVuLnB1c2goIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQodmFsdWUsIHtcbiAgICAgICAga2V5OiBjaGlsZHJlbi5sZW5ndGhcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKHZhbHVlKSkgey8vIHRoaXMgd29uJ3QgYmUgY2FsbGVkLCBwcm9wTmFtZSBjaGlsZHJlbiBhcmUgY29udmVydGVkIHRvIGEgUmVhY3RDaGlsZCBiZWZvcmUgY2FsbGluZyB0aGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gZ28gc3RyYWlnaHQgaW5cbiAgICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9IC8vIGlmIHdlIGRvbid0IGVuY291bnRlciBhIG5vbi1wcmltaXRpdmVcbiAgLy8gdGhlbiBgY2hpbGRyZW5gIGNhbiBiZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgYXQgdGhlIGVuZFxuXG5cbiAgdmFyIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFyID0gaW5wdXRbaV07XG5cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyBwZWVrIGF0IHRoZSBuZXh0IGNoYXJhY3RlciB0byBrbm93IGlmIHRoaXMgaXMgYW4gZXNjYXBlXG4gICAgICB2YXIgbmV4dENoYXIgPSBpbnB1dFtpICsgMV07XG4gICAgICB2YXIgY2hhclRvQWRkID0gY2hhcjsgLy8gaWYgdGhpcyBpc24ndCBhbiBlc2NhcGUgc2VxdWVuY2UgdGhlbiB3ZSB3aWxsIGFkZCB0aGUgYmFja3NsYXNoXG5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gJ3snIHx8IG5leHRDaGFyID09PSAnfScpIHtcbiAgICAgICAgLy8gZXNjYXBpbmcgYSBicmFjZVxuICAgICAgICBpICs9IDE7IC8vIGFkdmFuY2UgcGFzc2VkIHRoZSBicmFjZVxuXG4gICAgICAgIGNoYXJUb0FkZCA9IGlucHV0W2ldO1xuICAgICAgfVxuXG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyVG9BZGQpO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgY2hpbGQgPSB7XG4gICAgICAgIHByb3BOYW1lOiAnJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd9Jykge1xuICAgICAgdmFyIHByb3BOYW1lID0gY2hpbGQucHJvcE5hbWU7XG5cbiAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXkgXFxcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiIG5vdCBmb3VuZCBpbiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbHVlcywgbnVsbCwgMikpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGVuY291bnRlcmVkTm9uUHJpbWl0aXZlIHx8ICFpc1ByaW1pdGl2ZShwcm9wVmFsdWUpO1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHByb3BWYWx1ZSk7XG4gICAgICBjaGlsZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcik7XG4gICAgfVxuICB9IC8vIGluY2x1ZGUgYW55IHJlbWFpbmluZyBjaGlsZCB2YWx1ZVxuXG5cbiAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgcmV0dXJuIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID8gY2hpbGRyZW4gOiBjaGlsZHJlbi5qb2luKCcnKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmV4cG9ydCB2YXIgdXNlTG9hZGluZ0FyaWFMYWJlbCA9IGZ1bmN0aW9uIHVzZUxvYWRpbmdBcmlhTGFiZWwoKSB7XG4gIHJldHVybiB1c2VFdWlJMThuKCdldWlMb2FkaW5nU3RyaW5ncy5hcmlhTGFiZWwnLCAnTG9hZGluZycpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VMb2FkaW5nQXJpYUxhYmVsIH0gZnJvbSAnLi9fbG9hZGluZ19zdHJpbmdzJztcbmltcG9ydCB7IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzIH0gZnJvbSAnLi9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpTG9hZGluZ1NwaW5uZXIgPSBmdW5jdGlvbiBFdWlMb2FkaW5nU3Bpbm5lcihfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoZXVpVGhlbWUsIGNvbG9yKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTG9hZGluZ1NwaW5uZXIsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTG9hZGluZ1NwaW5uZXInLCBjbGFzc05hbWUpO1xuICB2YXIgZGVmYXVsdExhYmVsID0gdXNlTG9hZGluZ0FyaWFMYWJlbCgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0TGFiZWxcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUxvYWRpbmdTcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlciBhbmQgaGlnaGxpZ2h0LlxuICAgICAgICogRWFjaCBrZXkgYWNjZXB0cyBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqIFNlZSAjRXVpTG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJvcmRlcjogUHJvcFR5cGVzLmFueSxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX2xvYWRpbmdTcGlubmVyID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcXG4gIH1cXG5cIl0pKSk7XG5cbnZhciBzcGlubmVyU2l6ZXMgPSB7XG4gIHM6ICdtJyxcbiAgbTogJ2Jhc2UnLFxuICBsOiAnbCcsXG4gIHhsOiAneGwnLFxuICB4eGw6ICd4eGwnXG59O1xuXG52YXIgc3Bpbm5lckNvbG9yc0NTUyA9IGZ1bmN0aW9uIHNwaW5uZXJDb2xvcnNDU1MoYm9yZGVyLCBoaWdobGlnaHQpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGJvcmRlci1jb2xvcjogXCIuY29uY2F0KGhpZ2hsaWdodCwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMb2FkaW5nU3Bpbm5lcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpY2ssIFwiO1wiLCBzcGlubmVyQ29sb3JzQ1NTKChjb2xvciA9PT0gbnVsbCB8fCBjb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3IuYm9yZGVyKSB8fCBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgKGNvbG9yID09PSBudWxsIHx8IGNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb2xvci5oaWdobGlnaHQpIHx8IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5KSwgXCI7XCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgX2xvYWRpbmdTcGlubmVyLCBcIiAwLjZzIGluZmluaXRlIGxpbmVhcjt9O2xhYmVsOmV1aUxvYWRpbmdTcGlubmVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2JvcmRlci13aWR0aDpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgKiAxLjUpOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtib3JkZXItd2lkdGg6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiICogMS41KTs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0sIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgVVJMIGZyb20gJ3VybC1wYXJzZSc7XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIcmVmKGhyZWYpIHtcbiAgLy8gY2hlY2sgaHJlZiBhbmQgdHJlYXQgaXQgYXMgaW52YWxpZCBpZiBpdCB1c2VzIHRoZSBqYXZhc2NyaXB0OiBwcm90b2NvbFxuICB2YXIgcGFydHMgPSBuZXcgVVJMKGhyZWYpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuXG4gIHJldHVybiBwYXJ0cy5wcm90b2NvbCAhPT0gJ2phdmFzY3JpcHQ6Jztcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgaGFzUmVzaXplT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbmV4cG9ydCB2YXIgRXVpUmVzaXplT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBfaW5oZXJpdHMoRXVpUmVzaXplT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlSZXNpemVPYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVJlc2l6ZU9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpUmVzaXplT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGBlbnRyeS5jb250ZW50UmVjdGAgcHJvdmlkZXMgaW5jb21wbGV0ZSBgaGVpZ2h0YCBhbmQgYHdpZHRoYCBkYXRhLlxuICAgICAgLy8gVXNlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgYW5kIGJvcmRlci5cbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgIGlmICghX3RoaXMuY2hpbGROb2RlKSByZXR1cm47XG5cbiAgICAgIHZhciBfdGhpcyRjaGlsZE5vZGUkZ2V0Qm8gPSBfdGhpcy5jaGlsZE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkY2hpbGROb2RlJGdldEJvLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJGNoaWxkTm9kZSRnZXRCby53aWR0aDsgLy8gQ2hlY2sgZm9yIGFjdHVhbCByZXNpemUgZXZlbnRcblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuaGVpZ2h0ID09PSBoZWlnaHQgJiYgX3RoaXMuc3RhdGUud2lkdGggPT09IHdpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMucHJvcHMub25SZXNpemUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHN1cGVyY2xhc3MgY2hlY2tzIHRoYXQgY2hpbGROb2RlIGlzIG5vdCBudWxsIGJlZm9yZSBpbnZva2luZ1xuICAgICAgLy8gYmVnaW5PYnNlcnZlKClcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLm9uUmVzaXplKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBFdWlSZXNpemVPYnNlcnZlcjtcbn0oRXVpT2JzZXJ2ZXIpO1xuXG52YXIgbWFrZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gbWFrZVJlc2l6ZU9ic2VydmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIHZhciBvYnNlcnZlcjtcblxuICBpZiAoaGFzUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gIH1cblxuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuXG5leHBvcnQgdmFyIHVzZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBkaW1lbnNpb24pIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNpemUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgX3NldFNpemUgPSBfdXNlU3RhdGUyWzFdOyAvLyBfY3VycmVudERpbWVuc2lvbnMgYW5kIF9zZXRTaXplIGFyZSB1c2VkIHRvIG9ubHkgc3RvcmUgdGhlXG4gIC8vIG5ldyBzdGF0ZSAoYW5kIHRyaWdnZXIgYSByZS1yZW5kZXIpIHdoZW4gdGhlIG5ldyBkaW1lbnNpb25zIGFjdHVhbGx5IGRpZmZlclxuXG5cbiAgdmFyIF9jdXJyZW50RGltZW5zaW9ucyA9IHVzZVJlZihzaXplKTtcblxuICB2YXIgc2V0U2l6ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChkaW1lbnNpb25zKSB7XG4gICAgdmFyIGRvZXNXaWR0aE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ2hlaWdodCc7XG4gICAgdmFyIGRvZXNIZWlnaHRNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICd3aWR0aCc7XG5cbiAgICBpZiAoZG9lc1dpZHRoTWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LndpZHRoICE9PSBkaW1lbnNpb25zLndpZHRoIHx8IGRvZXNIZWlnaHRNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQuaGVpZ2h0ICE9PSBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQgPSBkaW1lbnNpb25zO1xuXG4gICAgICBfc2V0U2l6ZShkaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIFtkaW1lbnNpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFJlc2l6ZU9ic2VydmVyJ3MgZmlyc3QgY2FsbCB0byB0aGUgb2JzZXJ2YXRpb24gY2FsbGJhY2sgaXMgc2NoZWR1bGVkIGluIHRoZSBmdXR1cmVcbiAgICAgIC8vIHNvIGZpbmQgdGhlIGNvbnRhaW5lcidzIGluaXRpYWwgZGltZW5zaW9ucyBub3dcbiAgICAgIHZhciBib3VuZGluZ1JlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYGVudHJ5LmNvbnRlbnRSZWN0YCBwcm92aWRlcyBpbmNvbXBsZXRlIGBoZWlnaHRgIGFuZCBgd2lkdGhgIGRhdGEuXG4gICAgICAgIC8vIFVzZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGFuZCBib3JkZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgICAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGhlaWdodCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5oZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aDtcblxuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlciAmJiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBzZXRTaXplXSk7XG4gIHJldHVybiBzaXplO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU9ic2VydmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT2JzZXJ2ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJuYW1lXCIsICdFdWlPYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNoaWxkTm9kZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvYnNlcnZlclwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVDaGlsZE5vZGVcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSA9PT0gcmVmKSByZXR1cm47IC8vIG5vZGUgaGFzbid0IGNoYW5nZWRcbiAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcgb2JzZXJ2ZXIgZGlzY29ubmVjdCBpdFxuXG4gICAgICBpZiAoX3RoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jaGlsZE5vZGUgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlPYnNlcnZlciBoYXMgbm8gZGVmYXVsdCBvYnNlcnZhdGlvbiBtZXRob2QnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPYnNlcnZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZE5vZGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQodGhpcy5uYW1lLCBcIiBkaWQgbm90IHJlY2VpdmUgYSByZWZcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRoaXMudXBkYXRlQ2hpbGROb2RlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT2JzZXJ2ZXI7XG59KENvbXBvbmVudCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY29sb3JcIiwgXCJncm93XCIsIFwidGV4dEFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRTdHlsZXMgfSBmcm9tICcuL3RleHQuc3R5bGVzJztcbmltcG9ydCB7IEV1aVRleHRDb2xvciB9IGZyb20gJy4vdGV4dF9jb2xvcic7XG5pbXBvcnQgeyBFdWlUZXh0QWxpZ24gfSBmcm9tICcuL3RleHRfYWxpZ24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ3JlbGF0aXZlJ107XG5leHBvcnQgdmFyIEV1aVRleHQgPSBmdW5jdGlvbiBFdWlUZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICB0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUZXh0U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dCwgIWdyb3cgPyBzdHlsZXMuY29uc3RyYWluZWRXaWR0aCA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0JywgY2xhc3NOYW1lKTtcblxuICB2YXIgdGV4dCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuXG4gIGlmIChjb2xvcikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRDb2xvciwge1xuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICBpZiAodGV4dEFsaWduKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dEFsaWduLCB7XG4gICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuRXVpVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGV4dCBzaXplLiBDaG9vc2UgYHJlbGF0aXZlYCB0byBjb250cm9sIHRoZSBgZm9udC1zaXplYCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSBwYXJlbnQgY29udGFpbmVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfY29sb3JDU1MgPSBmdW5jdGlvbiBfY29sb3JDU1MoY29sb3IpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoY29sb3IsIFwiO1xcblxcbiAgICAmOmhvdmVyLFxcbiAgICAmOmZvY3VzLFxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgJjp0YXJnZXQge1xcbiAgICAgIGNvbG9yOiBkYXJrZW4oXCIpLmNvbmNhdChjb2xvciwgXCIsIDEwJSk7XFxuICAgIH1cXG4gIFwiKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua0hvdmVyQ1NTID0gZnVuY3Rpb24gZXVpTGlua0hvdmVyQ1NTKCkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICBcIjtcbn07XG5leHBvcnQgdmFyIGV1aUxpbmtGb2N1c0NTUyA9IGZ1bmN0aW9uIGV1aUxpbmtGb2N1c0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiICFpbXBvcnRhbnQ7XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlMaW5rQ1NTID0gZnVuY3Rpb24gZXVpTGlua0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBcIikuY29uY2F0KGV1aUxpbmtIb3ZlckNTUygpLCBcIlxcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChldWlMaW5rRm9jdXNDU1MoZXVpVGhlbWUpLCBcIlxcbiAgICB9XFxuICBcIik7XG59O1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUxpbmtTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTGluazogLyojX19QVVJFX18qL2NzcyhldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCIgdXNlci1zZWxlY3Q6dGV4dDsmW3RhcmdldD0nX2JsYW5rJ117cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpldWlMaW5rO1wiKSxcbiAgICBkaXNhYmxlZDogX3JlZixcbiAgICAvLyBDb2xvciBzdHlsZXNcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQpLCBcIjtsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQpLCBcIjtsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQpLCBcIjtsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KSwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0KSwgXCI7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQpLCBcIjtsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmdob3N0KSwgXCI7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy50ZXh0KSwgXCI7bGFiZWw6dGV4dDtcIiksXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMHB4JyksIFwiOztsYWJlbDpldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0O1wiKSxcbiAgICBldWlMaW5rX19leHRlcm5hbEljb246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUxpbmtfX2V4dGVybmFsSWNvbjtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0QnJlYWtXb3JkLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGl0bGUgPSBmdW5jdGlvbiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXAgPSB7XG4gICAgeHh4czogJ3hzJyxcbiAgICB4eHM6ICdzJyxcbiAgICB4czogJ20nLFxuICAgIHM6ICdsJyxcbiAgICBtOiAneGwnLFxuICAgIGw6ICd4eGwnXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcFtzY2FsZV0sIG9wdGlvbnMpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZVxuICB9KTtcbn07IC8vIEhvb2sgdmVyc2lvblxuXG5leHBvcnQgdmFyIHVzZUV1aVRpdGxlID0gZnVuY3Rpb24gdXNlRXVpVGl0bGUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVRpdGxlKGV1aVRoZW1lLCBzY2FsZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVRpdGxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIiAmKyZ7bWFyZ2luLXRvcDpcIiwgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubCwgXCI7fTtsYWJlbDpldWlUaXRsZTtcIiksXG4gICAgdXBwZXJjYXNlOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiOztsYWJlbDp4eHhzO1wiKSxcbiAgICB4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDp4eHM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjs7bGFiZWw6bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSwgZXVpQmFja2dyb3VuZENvbG9yIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpTGlua0NTUyB9IGZyb20gJy4uL2xpbmsvbGluay5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuLyoqXG4gKiBUT0RPOiBNYWtlIHRoaXMgYSBnbG9iYWwgdmFsdWUgc28gaXQgY2FuIGJlIHNldCBieSB0aGVtZT9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoID0gJ21heCg2NGNoLCA3NSUpJztcbi8qKlxuICogTWl4aW5zXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0ID0gZnVuY3Rpb24gZXVpVGV4dChldWlUaGVtZSkge1xuICB2YXIgaW5oZXJpdENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogaW5oZXJpdENvbG9yID8gJ2luaGVyaXQnIDogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHQucmVndWxhclxuICB9O1xufTsgLy8gSW50ZXJuYWwgdXRpbGl0eSBmb3IgRXVpVGV4dCBzY2FsZXMvc2l6ZXNcblxudmFyIGV1aVNjYWxlVGV4dCA9IGZ1bmN0aW9uIGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplLFxuICAgICAgbGluZUhlaWdodCA9IF9ldWlGb250U2l6ZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIG1lYXN1cmVtZW50ID0gb3B0aW9ucy5tZWFzdXJlbWVudCxcbiAgICAgIF9jdXN0b21TY2FsZSA9IG9wdGlvbnMuY3VzdG9tU2NhbGU7XG4gIHZhciBsaW5lSGVpZ2h0U2l6ZSA9IG1lYXN1cmVtZW50ID09PSAnZW0nID8gXCJcIi5jb25jYXQobGluZUhlaWdodCwgXCJlbVwiKSA6IGxpbmVIZWlnaHQ7XG4gIHZhciBoZWFkaW5ncyA9IHtcbiAgICBoMTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcsIG9wdGlvbnMpLFxuICAgIGgyOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgaDM6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKSxcbiAgICBoNDogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKSxcbiAgICBoNTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJywgb3B0aW9ucyksXG4gICAgaDY6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnLCBvcHRpb25zKVxuICB9OyAvLyBHZW5lcmF0ZSBtYXJnaW5zIGZvciBoZWFkaW5ncyBiYXNlZCBvbiBjdXN0b21TY2FsZSAobm90IG9uIGhlYWRpbmcgbGV2ZWwpXG5cbiAgdmFyIGN1c3RvbVNjYWxlID0gX2N1c3RvbVNjYWxlID09PSAneHh4cycgPyAneHhzJyA6IF9jdXN0b21TY2FsZSB8fCAnbSc7XG4gIHZhciBoZWFkaW5nTWFyZ2luVG9wID0gXCJcIi5jb25jYXQocGFyc2VGbG9hdChldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXSkgKiAyLCBcInB4XCIpO1xuICB2YXIgaGVhZGluZ01hcmdpbkJvdHRvbSA9IGV1aVRoZW1lLnNpemVbY3VzdG9tU2NhbGVdO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1zaXplOiBcIi5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgaDEge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEubGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG4gICAgaDE6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgIH1cXG5cXG4gICAgaDIge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoMyB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIHVsLFxcbiAgICBvbCxcXG4gICAgZGwsXFxuICAgIGJsb2NrcXVvdGUsXFxuICAgIGltZyxcXG4gICAgcHJlIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgdWwsXFxuICAgIG9sIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuICBcXG4gICAgYmxvY2txdW90ZSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBwYWRkaW5nOiBcIikuY29uY2F0KGxpbmVIZWlnaHRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBkZCArIGR0IHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBmb250U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgZHQsXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGRkIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGR0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgICAgY29sb3I6IFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIHNtYWxsIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkge1xcbiAgICAgIHBhZGRpbmc6IFwiKS5jb25jYXQobGluZUhlaWdodFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIGNvZGU6bm90KC5ldWlDb2RlKTpub3QoLmV1aUNvZGVCbG9ja19fY29kZSkgIHtcXG4gICAgICBmb250LXNpemU6IC45ZW07IC8vIDkwJSBvZiBwYXJlbnQgZm9udCBzaXplXFxuICAgIH1cXG4gICAgXCIpLmNvbmNhdCggLy8gd2hlbiB0ZXh0U2l6ZSBpcyAnbScsIHRoZSAna2JkJyBlbGVtZW50IGdldHMgYSBsaW5lIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoZSBib3JkZXItYm90dG9tXG4gIF9jdXN0b21TY2FsZSA9PT0gJ20nID8gXCJcXG4gICAga2JkIHtcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAvLyBlbnN1cmVzIHdoZW4gb25seSBvbmUgY2hhcmFjdGVyIHRoZSBzaGFwZSBsb29rcyBsaWtlIGEgc3F1YXJlXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBldWlUaGVtZS5zaXplLmwpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiXFxuICAgIH1cXG4gICAgXFxuICAgIGtiZDo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6ICcnO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0KSksIFwiXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbGVmdCcsIDApLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICB9XCIpIDogJycsIFwiXFxuICBcIik7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG5cbmV4cG9ydCB2YXIgZXVpVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHQoZXVpVGhlbWUsIHRydWUpLCBcIjtjbGVhcjpib3RoO2E6bm90KFtjbGFzc10pe1wiLCBldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCI7fWltZ3tkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjt9dWx7bGlzdC1zdHlsZTpkaXNjO31vbHtsaXN0LXN0eWxlOmRlY2ltYWw7fWJsb2NrcXVvdGU6bm90KC5ldWlNYXJrZG93bkZvcm1hdF9fYmxvY2txdW90ZSl7cG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIiBmb250LWZhbWlseTpcIiwgZXVpVGhlbWUuZm9udC5mYW1pbHlTZXJpZiwgXCI7Zm9udC1zdHlsZTppdGFsaWM7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3A6bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsICcwJyksIFwiO30mOmJlZm9yZSwmOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljayksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMjUlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsICcyNSUnKSwgXCIgYmFja2dyb3VuZDpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7fSY6YmVmb3Jle1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnMCcpLCBcIjt9JjphZnRlcntcIiwgbG9naWNhbENTUygnYm90dG9tJywgJzAnKSwgXCI7fX1oMXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt9aDJ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fWgze1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO31oNCxkdHtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7fWg1e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7fWg2e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt9aDEsaDIsaDMsaDQsaDUsaDYsZHR7Y29sb3I6aW5oZXJpdDt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpe3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQ6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWJkdWVkJyksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSxwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkgY29kZXtkaXNwbGF5OmJsb2NrO30+Omxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAnMCAhaW1wb3J0YW50JyksIFwiO31rYmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgbGluZS1oZWlnaHQ6MTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO2JvcmRlci1yYWRpdXM6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCIgLyAyKTt9O2xhYmVsOmV1aVRleHQ7XCIpLFxuICAgIGNvbnN0cmFpbmVkV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGgpLCBcIjs7bGFiZWw6Y29uc3RyYWluZWRXaWR0aDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAncmVtJyxcbiAgICAgIGN1c3RvbVNjYWxlOiAnbSdcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICdzJ1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICd4cydcbiAgICB9KSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICByZWxhdGl2ZTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ2VtJ1xuICAgIH0pLCBcIjs7bGFiZWw6cmVsYXRpdmU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsb25lRWxlbWVudFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRDb2xvclN0eWxlcyB9IGZyb20gJy4vdGV4dF9jb2xvci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBFdWlUZXh0Q29sb3IgPSBmdW5jdGlvbiBFdWlUZXh0Q29sb3IoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdzcGFuJyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc05hbWVkQ29sb3IgPSBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVGV4dENvbG9yU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dENvbG9yLCBpc05hbWVkQ29sb3IgPyBzdHlsZXNbY29sb3JdIDogc3R5bGVzLmN1c3RvbUNvbG9yXTsgLy8gV2UncmUgY2hlY2tpbmcgaWYgaXMgYSBjdXN0b20gY29sb3IuXG4gIC8vIElmIGl0IGlzIGEgY3VzdG9tIGNvbG9yIHdlIHNldCB0aGUgYGNvbG9yYCBvZiB0aGUgYC5ldWlUZXh0Q29sb3JgIGRpdiB0byB0aGF0IGN1c3RvbSBjb2xvci5cbiAgLy8gVGhpcyB3YXkgdGhlIGNoaWxkcmVuIHRleHQgZWxlbWVudHMgY2FuIGBpbmhlcml0YCB0aGF0IGNvbG9yIGFuZCBib3JkZXIgYW5kIGJhY2tncm91bmRzIGNhbiBnZXQgdGhhdCBgY3VycmVudENvbG9yYC5cblxuICB2YXIgZXVpVGV4dFN0eWxlID0gIWlzTmFtZWRDb2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbG9yOiBjb2xvclxuICB9LCBzdHlsZSkgOiBfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGV1aVRleHRTdHlsZVxuICB9LCByZXN0KTtcblxuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgZXVpVGV4dFN0eWxlKTtcblxuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIHN0eWxlOiBjaGlsZHJlblN0eWxlXG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dENvbG9yLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgcm9vdCBlbGVtZW50XG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBzcGFuYC9gZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpVGV4dENvbG9yU3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dENvbG9yU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHRDb2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0Q29sb3I7XCIpLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIiFpbXBvcnRhbnQ7O2xhYmVsOmdob3N0O1wiKSxcbiAgICBpbmhlcml0OiBfcmVmLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSAvLyBIYW5kbGVkIGJ5IGBzdHlsZWAgdGFnIC0gdGhpcyBpcyBqdXN0IGhlcmUgZm9yIGEgY2xhc3NOYW1lIGhvb2tcblxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dEFsaWduXCIsIFwiY2xvbmVFbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUZXh0QWxpZ25TdHlsZXMgfSBmcm9tICcuL3RleHRfYWxpZ24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG5leHBvcnQgdmFyIEV1aVRleHRBbGlnbiA9IGZ1bmN0aW9uIEV1aVRleHRBbGlnbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzdHlsZXMgPSBldWlUZXh0QWxpZ25TdHlsZXMoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dEFsaWduLCBzdHlsZXNbdGV4dEFsaWduXV07XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCk7XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRBbGlnbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlciBgZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUZXh0QWxpZ25TdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0QWxpZ25TdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dEFsaWduOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRBbGlnbjtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7O2xhYmVsOmNlbnRlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZsdXNoXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaXNMb2FkaW5nXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc1NlbGVjdGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgYXMgRXVpQnV0dG9uQ29udGVudCB9IGZyb20gJy4uL19idXR0b25fY29udGVudF9kZXByZWNhdGVkJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcHJpbWFyeTogJ2V1aUJ1dHRvbkVtcHR5LS1wcmltYXJ5JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uRW1wdHktLWRhbmdlcicsXG4gIHRleHQ6ICdldWlCdXR0b25FbXB0eS0tdGV4dCcsXG4gIGdob3N0OiAnZXVpQnV0dG9uRW1wdHktLWdob3N0JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkVtcHR5LS1zdWNjZXNzJyxcbiAgd2FybmluZzogJ2V1aUJ1dHRvbkVtcHR5LS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25FbXB0eS0teFNtYWxsJyxcbiAgczogJ2V1aUJ1dHRvbkVtcHR5LS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgZmx1c2hUeXBlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hMZWZ0JyxcbiAgcmlnaHQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hSaWdodCcsXG4gIGJvdGg6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hCb3RoJ1xufTtcbmV4cG9ydCB2YXIgRkxVU0hfVFlQRVMgPSBrZXlzT2YoZmx1c2hUeXBlVG9DbGFzc05hbWVNYXApO1xuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25FbXB0eSA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgZmx1c2ggPSBfcmVmLmZsdXNoLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICBjb250ZW50UHJvcHMgPSBfcmVmLmNvbnRlbnRQcm9wcyxcbiAgICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkOyAvLyBJZiBpbiB0aGUgbG9hZGluZyBzdGF0ZSwgZm9yY2UgZGlzYWJsZWQgdG8gdHJ1ZVxuXG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHknLCBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSwgc2l6ZSA/IHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSA6IG51bGwsIGZsdXNoID8gZmx1c2hUeXBlVG9DbGFzc05hbWVNYXBbZmx1c2hdIDogbnVsbCwge1xuICAgICdldWlCdXR0b25FbXB0eS1pc0Rpc2FibGVkJzogYnV0dG9uSXNEaXNhYmxlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fY29udGVudCcsIGNvbnRlbnRQcm9wcyAmJiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX3RleHQnLCB0ZXh0UHJvcHMgJiYgdGV4dFByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIGlubmVyTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uQ29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGljb25UeXBlOiBpY29uVHlwZSxcbiAgICBpY29uU2lkZTogaWNvblNpZGUsXG4gICAgaWNvblNpemU6IHNpemUgPT09ICd4cycgPyAncycgOiBpY29uU2l6ZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pOyAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBkaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkXG4gIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xufTtcbkV1aUJ1dHRvbkVtcHR5LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidHlwZVwiLCBcImRpc3BsYXlcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCIsIFwiYnV0dG9uUmVmXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzTG9hZGluZ1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGJhc2U6IG51bGwsXG4gIGVtcHR5OiAnZXVpQnV0dG9uSWNvbi0tZW1wdHknLFxuICBmaWxsOiAnZXVpQnV0dG9uSWNvbi0tZmlsbCdcbn07XG5leHBvcnQgdmFyIERJU1BMQVlTID0ga2V5c09mKGRpc3BsYXlUb0NsYXNzTmFtZU1hcCk7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgYWNjZW50OiAnZXVpQnV0dG9uSWNvbi0tYWNjZW50JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uSWNvbi0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICdldWlCdXR0b25JY29uLS1naG9zdCcsXG4gIHByaW1hcnk6ICdldWlCdXR0b25JY29uLS1wcmltYXJ5JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkljb24tLXN1Y2Nlc3MnLFxuICB0ZXh0OiAnZXVpQnV0dG9uSWNvbi0tdGV4dCcsXG4gIHdhcm5pbmc6ICdldWlCdXR0b25JY29uLS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25JY29uLS14U21hbGwnLFxuICBzOiAnZXVpQnV0dG9uSWNvbi0tc21hbGwnLFxuICBtOiAnZXVpQnV0dG9uSWNvbi0tbWVkaXVtJ1xufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uSWNvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZW1wdHknIDogX3JlZiRkaXNwbGF5LFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJHNpemUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkIHx8IGlzTG9hZGluZztcbiAgdmFyIGFyaWFIaWRkZW4gPSByZXN0WydhcmlhLWhpZGRlbiddO1xuICB2YXIgaXNBcmlhSGlkZGVuID0gYXJpYUhpZGRlbiA9PT0gJ3RydWUnIHx8IGFyaWFIaWRkZW4gPT09IHRydWU7XG5cbiAgaWYgKCFyZXN0WydhcmlhLWxhYmVsJ10gJiYgIXJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmICFpc0FyaWFIaWRkZW4pIHtcbiAgICBjb25zb2xlLndhcm4oXCJFdWlCdXR0b25JY29uIHJlcXVpcmVzIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IHRvIGJlIHNwZWNpZmllZCBiZWNhdXNlIGljb24tb25seVxcbiAgICAgIGJ1dHRvbnMgYXJlIHNjcmVlbi1yZWFkZXItaW5hY2Nlc3NpYmxlIHdpdGhvdXQgdGhlbS5cIik7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkljb24nLCB7XG4gICAgJ2V1aUJ1dHRvbkljb24taXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSwgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0sIGRpc3BsYXkgJiYgZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldLCBzaXplICYmIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTsgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpY29uVHlwZSAmJiAhaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkljb25fX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9IC8vIGBvcmlnaW5hbGAgc2l6ZSBkb2Vzbid0IGV4aXN0IGluIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gd2hlbiB0aGUgYGljb25TaXplYCBpcyBgb3JpZ2luYWxgIHdlIGRvbid0IHBhc3MgYW55IHNpemUgdG8gdGhlIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gc28gaXQgZ2V0cyB0aGUgZGVmYXVsdCBzaXplXG5cblxuICB2YXIgbG9hZGluZ1NpemUgPSBpY29uU2l6ZSA9PT0gJ29yaWdpbmFsJyA/IHVuZGVmaW5lZCA6IGljb25TaXplO1xuXG4gIGlmIChpY29uVHlwZSAmJiBpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgc2l6ZTogbG9hZGluZ1NpemVcbiAgICB9KTtcbiAgfSAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG4gIH1cblxuICB2YXIgYnV0dG9uVHlwZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmXG4gIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbn07XG5FdWlCdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mKFtcInN1Ym1pdFwiLCBcInJlc2V0XCIsIFwiYnV0dG9uXCJdKV0pLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgaWNvbiBvbmx5LlxuICAgICAqIFRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImJhc2VcIiwgXCJlbXB0eVwiLCBcImZpbGxcIl0pLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gdXNlSW5uZXJUZXh0KGlubmVyVGV4dEZhbGxiYWNrKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgcmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFJlZiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShpbm5lclRleHRGYWxsYmFjayksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpbm5lclRleHQgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0SW5uZXJUZXh0ID0gX3VzZVN0YXRlNFsxXTtcblxuICB2YXIgdXBkYXRlSW5uZXJUZXh0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICBzZXRJbm5lclRleHQoIC8vIENoZWNrIGZvciBgaW5uZXJUZXh0YCBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBhIHNpbXBsZSBPUiBjaGVja1xuICAgIC8vIGJlY2F1c2UgaW4gcmVhbCBjYXNlcyB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgIGNvdWxkIGNvcnJlY3RseSBiZSBgbnVsbGBcbiAgICAvLyB3aGlsZSB0aGUgcmVzdWx0IG9mIGB0ZXh0Q29udGVudGAgY291bGQgY29ycmVjdGx5IGJlIG5vbi1gbnVsbGAgZHVlIHRvXG4gICAgLy8gZGlmZmVyaW5nIHJlbGlhbmNlIG9uIGJyb3dzZXIgbGF5b3V0IGNhbGN1bGF0aW9ucy5cbiAgICAvLyBXZSBwcmVmZXIgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCwgaWYgYXZhaWxhYmxlLlxuICAgICdpbm5lclRleHQnIGluIG5vZGUgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUudGV4dENvbnRlbnQgfHwgaW5uZXJUZXh0RmFsbGJhY2spO1xuICB9LCBbaW5uZXJUZXh0RmFsbGJhY2tdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zTGlzdCkge1xuICAgICAgaWYgKG11dGF0aW9uc0xpc3QubGVuZ3RoKSB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICB9KTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYsIHtcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtyZWYsIHVwZGF0ZUlubmVyVGV4dF0pO1xuICByZXR1cm4gW3NldFJlZiwgaW5uZXJUZXh0XTtcbn1cbmV4cG9ydCB2YXIgRXVpSW5uZXJUZXh0ID0gZnVuY3Rpb24gRXVpSW5uZXJUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dChmYWxsYmFjayksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgcmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBpbm5lclRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcblxuICByZXR1cm4gY2hpbGRyZW4ocmVmLCBpbm5lclRleHQpO1xufTtcbkV1aUlubmVyVGV4dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBmYWxsYmFjazogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIERldGVjdCBFbGVtZW50IFJlc2l6ZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiBTZWJhc3RpYW4gRGVjaW1hXG4gKlxuICogRm9ya2VkIGZyb20gdmVyc2lvbiAwLjUuMzsgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxuICogMSkgR3VhcmQgYWdhaW5zdCB1bnNhZmUgJ3dpbmRvdycgYW5kICdkb2N1bWVudCcgcmVmZXJlbmNlcyAodG8gc3VwcG9ydCBTU1IpLlxuICogMikgRGVmZXIgaW5pdGlhbGl6YXRpb24gY29kZSB2aWEgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gd3JhcHBlciAodG8gc3VwcG9ydCBTU1IpLlxuICogMykgQXZvaWQgdW5uZWNlc3NhcnkgcmVmbG93cyBieSBub3QgbWVhc3VyaW5nIHNpemUgZm9yIHNjcm9sbCBldmVudHMgYnViYmxpbmcgZnJvbSBjaGlsZHJlbi5cbiAqIDQpIEFkZCBub25jZSBmb3Igc3R5bGUgZWxlbWVudC5cbiAqIDUpIFVzZSAnZXhwb3J0JyBzdGF0ZW1lbnQgb3ZlciAnbW9kdWxlLmV4cG9ydHMnIGFzc2lnbm1lbnRcbiAqKi9cblxuLy8gQ2hlY2sgYGRvY3VtZW50YCBhbmQgYHdpbmRvd2AgaW4gY2FzZSBvZiBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbmxldCB3aW5kb3dPYmplY3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3dPYmplY3QgPSB3aW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIHdpbmRvd09iamVjdCA9IHNlbGY7XG59IGVsc2Uge1xuICB3aW5kb3dPYmplY3QgPSBnbG9iYWw7XG59XG5sZXQgY2FuY2VsRnJhbWUgPSBudWxsO1xubGV0IHJlcXVlc3RGcmFtZSA9IG51bGw7XG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMjA7XG5jb25zdCBjbGVhclRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5jbGVhclRpbWVvdXQ7XG5jb25zdCBzZXRUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3Quc2V0VGltZW91dDtcbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5pZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID09IG51bGwpIHtcbiAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lLFxuICAvLyBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQgYmFzZWQgYXBwcm9hY2guXG4gIGNhbmNlbEZyYW1lID0gY2xlYXJUaW1lb3V0Rm47XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVZpYVNldFRpbWVvdXQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2V0VGltZW91dEZuKGNhbGxiYWNrLCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIENvdW50ZXIgaW50dWl0aXZlbHksIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lcyBjYW4gYmUgdHJpY2tpZXIuXG4gIC8vIENocm9tZSdzIFwiVGhyb3R0bGUgbm9uLXZpc2libGUgY3Jvc3Mtb3JpZ2luIGlmcmFtZXNcIiBmbGFnIGNhbiBwcmV2ZW50IHJBRnMgZnJvbSBiZWluZyBjYWxsZWQuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCgpIGltcGxlbWVudGF0aW9uLlxuICBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEZyYW1lKFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICB9O1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoU2V0VGltZW91dEZhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7XG4gICAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0Rm4oZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSwgVElNRU9VVF9EVVJBVElPTik7XG4gICAgcmV0dXJuIFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSkge1xuICBsZXQgYW5pbWF0aW9uS2V5ZnJhbWVzO1xuICBsZXQgYW5pbWF0aW9uTmFtZTtcbiAgbGV0IGFuaW1hdGlvblN0YXJ0RXZlbnQ7XG4gIGxldCBhbmltYXRpb25TdHlsZTtcbiAgbGV0IGNoZWNrVHJpZ2dlcnM7XG4gIGxldCByZXNldFRyaWdnZXJzO1xuICBsZXQgc2Nyb2xsTGlzdGVuZXI7XG4gIGNvbnN0IGF0dGFjaEV2ZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50O1xuICBpZiAoIWF0dGFjaEV2ZW50KSB7XG4gICAgcmVzZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLFxuICAgICAgICBleHBhbmQgPSB0cmlnZ2Vycy5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgY29udHJhY3QgPSB0cmlnZ2Vycy5sYXN0RWxlbWVudENoaWxkLFxuICAgICAgICBleHBhbmRDaGlsZCA9IGV4cGFuZC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbExlZnQgPSBjb250cmFjdC5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbFRvcCA9IGNvbnRyYWN0LnNjcm9sbEhlaWdodDtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gICAgICBleHBhbmQuc2Nyb2xsVG9wID0gZXhwYW5kLnNjcm9sbEhlaWdodDtcbiAgICB9O1xuICAgIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0O1xuICAgIH07XG4gICAgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gRG9uJ3QgbWVhc3VyZSAod2hpY2ggZm9yY2VzKSByZWZsb3cgZm9yIHNjcm9sbHMgdGhhdCBoYXBwZW4gaW5zaWRlIG9mIGNoaWxkcmVuIVxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAmJiB0eXBlb2YgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImNvbnRyYWN0LXRyaWdnZXJcIikgPCAwICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIikgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgcmVzZXRUcmlnZ2Vycyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLl9fcmVzaXplUkFGX18pIHtcbiAgICAgICAgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19yZXNpemVSQUZfXyA9IHJlcXVlc3RGcmFtZShmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpIHtcbiAgICAgICAgaWYgKGNoZWNrVHJpZ2dlcnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hSZXNpemVMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgZm4uY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIERldGVjdCBDU1MgQW5pbWF0aW9ucyBzdXBwb3J0IHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgbGV0IGFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIGxldCBrZXlmcmFtZXByZWZpeCA9IFwiXCI7XG4gICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IFwiYW5pbWF0aW9uc3RhcnRcIjtcbiAgICBjb25zdCBkb21QcmVmaXhlcyA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBzdGFydEV2ZW50cyA9IFwid2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQgb0FuaW1hdGlvblN0YXJ0IE1TQW5pbWF0aW9uU3RhcnRcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHBmeCA9IFwiXCI7XG4gICAge1xuICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO1xuICAgICAgaWYgKGVsbS5zdHlsZS5hbmltYXRpb25OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZWxtLnN0eWxlW2RvbVByZWZpeGVzW2ldICsgXCJBbmltYXRpb25OYW1lXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBmeCA9IGRvbVByZWZpeGVzW2ldO1xuICAgICAgICAgICAga2V5ZnJhbWVwcmVmaXggPSBcIi1cIiArIHBmeC50b0xvd2VyQ2FzZSgpICsgXCItXCI7XG4gICAgICAgICAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gc3RhcnRFdmVudHNbaV07XG4gICAgICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFuaW1hdGlvbk5hbWUgPSBcInJlc2l6ZWFuaW1cIjtcbiAgICBhbmltYXRpb25LZXlmcmFtZXMgPSBcIkBcIiArIGtleWZyYW1lcHJlZml4ICsgXCJrZXlmcmFtZXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSBcIjtcbiAgICBhbmltYXRpb25TdHlsZSA9IGtleWZyYW1lcHJlZml4ICsgXCJhbmltYXRpb246IDFtcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIjsgXCI7XG4gIH1cbiAgY29uc3QgY3JlYXRlU3R5bGVzID0gZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICghZG9jLmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSkge1xuICAgICAgLy9vcGFjaXR5OjAgd29ya3MgYXJvdW5kIGEgY2hyb21lIGJ1ZyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2MzYwXG4gICAgICBjb25zdCBjc3MgPSAoYW5pbWF0aW9uS2V5ZnJhbWVzID8gYW5pbWF0aW9uS2V5ZnJhbWVzIDogXCJcIikgKyBcIi5yZXNpemUtdHJpZ2dlcnMgeyBcIiArIChhbmltYXRpb25TdHlsZSA/IGFuaW1hdGlvblN0eWxlIDogXCJcIikgKyBcInZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfSBcIiArICcucmVzaXplLXRyaWdnZXJzLCAucmVzaXplLXRyaWdnZXJzID4gZGl2LCAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyBjb250ZW50OiBcIiBcIjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAtMTsgfSAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH0gLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScsXG4gICAgICAgIGhlYWQgPSBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICBzdHlsZS5pZCA9IFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiO1xuICAgICAgc3R5bGUudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICAgIGlmIChub25jZSAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50U3R5bGUgPSB3aW5kb3dPYmplY3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiBlbGVtZW50U3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVN0eWxlcyhkb2MpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fID0ge307XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuICAgICAgICAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuY2xhc3NOYW1lID0gXCJyZXNpemUtdHJpZ2dlcnNcIjtcbiAgICAgICAgY29uc3QgZXhwYW5kVHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiZXhwYW5kLXRyaWdnZXJcIjtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0VHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250cmFjdFRyaWdnZXIuY2xhc3NOYW1lID0gXCJjb250cmFjdC10cmlnZ2VyXCI7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGV4cGFuZFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChjb250cmFjdFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgICBpZiAoYW5pbWF0aW9uU3RhcnRFdmVudCkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IGZ1bmN0aW9uIGFuaW1hdGlvbkxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9ICFlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFByZWFjdCBjb21wYXQ7IHNlZSBkZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9pc3N1ZXMvMjI4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkUmVzaXplTGlzdGVuZXIsXG4gICAgcmVtb3ZlUmVzaXplTGlzdGVuZXJcbiAgfTtcbn1cblxuY2xhc3MgQXV0b1NpemVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkSGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZFdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDBcbiAgICB9O1xuICAgIHRoaXMuX2F1dG9TaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0LFxuICAgICAgICBkaXNhYmxlV2lkdGgsXG4gICAgICAgIG9uUmVzaXplXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgQXV0b1NpemVyIGNvbXBvbmVudCBiZWluZyByZW1vdmVkIGZyb20gdGhlIERPTSBpbW1lZGlhdGVseSBhZnRlciBiZWluZyBhZGRlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gcmVzdWx0IGluIGludmFsaWQgc3R5bGUgdmFsdWVzIHdoaWNoIGNhbiByZXN1bHQgaW4gTmFOIHZhbHVlcyBpZiB3ZSBkb24ndCBoYW5kbGUgdGhlbS5cbiAgICAgICAgLy8gU2VlIGlzc3VlICMxNTAgZm9yIG1vcmUgY29udGV4dC5cblxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3BhcmVudE5vZGUpIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3AgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX3BhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gcmVjdC53aWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgaWYgKCFkaXNhYmxlSGVpZ2h0ICYmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuc3RhdGUuc2NhbGVkSGVpZ2h0ICE9PSBzY2FsZWRIZWlnaHQpIHx8ICFkaXNhYmxlV2lkdGggJiYgKHRoaXMuc3RhdGUud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuc3RhdGUuc2NhbGVkV2lkdGggIT09IHNjYWxlZFdpZHRoKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICBzY2FsZWRXaWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZXNpemUoe1xuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICAgICAgICAgIHdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NldFJlZiA9IGF1dG9TaXplciA9PiB7XG4gICAgICB0aGlzLl9hdXRvU2l6ZXIgPSBhdXRvU2l6ZXI7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBub25jZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9hdXRvU2l6ZXIgPyB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSA6IG51bGw7XG4gICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIHBhcmVudE5vZGUgaW5zdGFuY2VvZiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIERlbGF5IGFjY2VzcyBvZiBwYXJlbnROb2RlIHVudGlsIG1vdW50LlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGVkZ2UtY2FzZXMgd2hlcmUgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCBiZWZvcmUgaXRzIHJlZiBoYXMgYmVlbiBzZXQsXG4gICAgICAvLyBBcyB3ZWxsIGFzIGxpYnJhcmllcyBsaWtlIHJlYWN0LWxpdGUgd2hpY2ggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBsaWZlY3ljbGUuXG4gICAgICB0aGlzLl9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aGVyZSBwYXJlbnROb2RlICh3aGljaCB3ZSB3aWxsIG9ic2VydmUpIHdhcyBkZWZpbmVkXG4gICAgICAvLyBVc2luZyBqdXN0IGdsb2JhbCBjYW4gcmVzdWx0IGludG8gb25SZXNpemUgZXZlbnRzIG5vdCBiZWluZyBlbWl0dGVkIGluIGNhc2VzIHdpdGggbXVsdGlwbGUgcmVhbG1zXG4gICAgICBjb25zdCBSZXNpemVPYnNlcnZlckluc3RhbmNlID0gcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LlJlc2l6ZU9ic2VydmVyO1xuICAgICAgaWYgKFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlckluc3RhbmNlKCgpID0+IHtcbiAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBsaW1pdCBleGNlZWRlZFwiIGVycm9yO1xuICAgICAgICAgIC8vIGNvdWxkIGJlIHRyaWdnZXJlZCBpZiB0aGUgc3RhdGUgdXBkYXRlIGNhdXNlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgaGFuZGxlciB0byBydW4gbG9uZy5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9pc3N1ZXMvNTVcbiAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX29uUmVzaXplLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZlciByZXF1aXJpbmcgcmVzaXplIGhhbmRsZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjNDFcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpO1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHBhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICBpZiAodGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0SGVpZ2h0LFxuICAgICAgZGVmYXVsdFdpZHRoLFxuICAgICAgZGlzYWJsZUhlaWdodCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVdpZHRoID0gZmFsc2UsXG4gICAgICBkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4gPSBmYWxzZSxcbiAgICAgIG5vbmNlLFxuICAgICAgb25SZXNpemUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgdGFnTmFtZSA9IFwiZGl2XCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICB3aWR0aFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gT3V0ZXIgZGl2IHNob3VsZCBub3QgZm9yY2Ugd2lkdGgvaGVpZ2h0IHNpbmNlIHRoYXQgbWF5IHByZXZlbnQgY29udGFpbmVycyBmcm9tIHNocmlua2luZy5cbiAgICAvLyBJbm5lciBjb21wb25lbnQgc2hvdWxkIG92ZXJmbG93IGFuZCB1c2UgY2FsY3VsYXRlZCB3aWR0aC9oZWlnaHQuXG4gICAgLy8gU2VlIGlzc3VlICM2OCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBvdXRlclN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZFBhcmFtcyA9IHt9O1xuXG4gICAgLy8gQXZvaWQgcmVuZGVyaW5nIGNoaWxkcmVuIGJlZm9yZSB0aGUgaW5pdGlhbCBtZWFzdXJlbWVudHMgaGF2ZSBiZWVuIGNvbGxlY3RlZC5cbiAgICAvLyBBdCBiZXN0IHRoaXMgd291bGQganVzdCBiZSB3YXN0aW5nIGN5Y2xlcy5cbiAgICBsZXQgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBpZiAoIWRpc2FibGVIZWlnaHQpIHtcbiAgICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgY2hpbGRQYXJhbXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkSGVpZ2h0ID0gc2NhbGVkSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoIWRpc2FibGVXaWR0aCkge1xuICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUud2lkdGggPSAwO1xuICAgICAgY2hpbGRQYXJhbXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZFdpZHRoID0gc2NhbGVkV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4pIHtcbiAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHtcbiAgICAgIHJlZjogdGhpcy5fc2V0UmVmLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4ub3V0ZXJTdHlsZSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH0sXG4gICAgICAuLi5yZXN0XG4gICAgfSwgIWJhaWxvdXRPbkNoaWxkcmVuICYmIGNoaWxkcmVuKGNoaWxkUGFyYW1zKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWlnaHRBbmRXaWR0aFByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGVpZ2h0T25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzV2lkdGhPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgPT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuXG5leHBvcnQgeyBBdXRvU2l6ZXIgYXMgZGVmYXVsdCwgaXNIZWlnaHRBbmRXaWR0aFByb3BzLCBpc0hlaWdodE9ubHlQcm9wcywgaXNXaWR0aE9ubHlQcm9wcyB9O1xuIiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IEF1dG9TaXplciBmcm9tICdyZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyJztcbmV4cG9ydCB2YXIgRXVpQXV0b1NpemVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXV0b1NpemVyKSB7XG4gIF9pbmhlcml0cyhFdWlBdXRvU2l6ZXIsIF9BdXRvU2l6ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQXV0b1NpemVyKTtcblxuICBmdW5jdGlvbiBFdWlBdXRvU2l6ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUF1dG9TaXplcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gRXVpQXV0b1NpemVyO1xufShBdXRvU2l6ZXIpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjbGFzc05hbWVcIiwgXCJpc0Rpc2FibGVkXCIsIFwib25DbGlja1wiLCBcImljb25PbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImljb25PbkNsaWNrQXJpYUxhYmVsXCIsIFwiY2xvc2VCdXR0b25Qcm9wc1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIGlzQ29sb3JEYXJrIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBjaHJvbWFWYWxpZCwgcGFyc2VDb2xvciB9IGZyb20gJy4uL2NvbG9yX3BpY2tlci91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZXMgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzI3MzEgaXMgY2xvc2VkXG52YXIgY29sb3JJbmsgPSAnIzAwMCc7XG52YXIgY29sb3JHaG9zdCA9ICcjZmZmJzsgLy8gVGhlIGNvbG9yIGJsaW5kIHBhbGV0dGUgaGFzIHNvbWUgc3RyaWN0ZXIgYWNjZXNzaWJpbGl0eSBuZWVkcyB3aXRoIHJlZ2FyZHMgdG9cbi8vIGNoYXJ0cyBhbmQgY29udHJhc3QuIFdlIHVzZSB0aGUgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0IHZhcmlhbnQgaGVyZSBzaW5jZSBvdXJcbi8vIGFjY2Vzc2liaWxpdHkgY29uY2VybnMgcGVydGFpbiB0byBmb3JlZ3JvdW5kICh0ZXh0KSBhbmQgYmFja2dyb3VuZCBjb250cmFzdFxuXG52YXIgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG52YXIgY29sb3JUb0hleE1hcCA9IHtcbiAgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcbiAgZGVmYXVsdDogJyNkM2RhZTYnLFxuICBwcmltYXJ5OiB2aXNDb2xvcnNbMV0sXG4gIHN1Y2Nlc3M6IHZpc0NvbG9yc1swXSxcbiAgYWNjZW50OiB2aXNDb2xvcnNbMl0sXG4gIHdhcm5pbmc6IHZpc0NvbG9yc1s1XSxcbiAgZGFuZ2VyOiB2aXNDb2xvcnNbOV1cbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvSGV4TWFwKTtcbnZhciBpY29uU2lkZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQmFkZ2UtLWljb25MZWZ0JyxcbiAgcmlnaHQ6ICdldWlCYWRnZS0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmFkZ2UgPSBmdW5jdGlvbiBFdWlCYWRnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBpY29uT25DbGljayA9IF9yZWYuaWNvbk9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLmljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY2xvc2VCdXR0b25Qcm9wcyA9IF9yZWYuY2xvc2VCdXR0b25Qcm9wcyxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IHN0eWxlO1xuICB2YXIgdGV4dENvbG9yID0gbnVsbDsgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcblxuICB2YXIgd2NhZ0NvbnRyYXN0QmFzZSA9IDQuNTsgLy8gV0NBRyBBQSBjb250cmFzdCBsZXZlbFxuXG4gIHZhciB3Y2FnQ29udHJhc3QgPSBudWxsO1xuICB2YXIgY29sb3JIZXggPSBudWxsOyAvLyBDaGVjayBpZiBhIHZhbGlkIGNvbG9yIG5hbWUgd2FzIHByb3ZpZGVkXG5cbiAgdHJ5IHtcbiAgICBpZiAoQ09MT1JTLmluZGV4T2YoY29sb3IpID4gLTEpIHtcbiAgICAgIC8vIEdldCB0aGUgaGV4IGVxdWl2YWxlbnQgZm9yIHRoZSBwcm92aWRlZCBjb2xvciBuYW1lXG4gICAgICBjb2xvckhleCA9IGNvbG9yVG9IZXhNYXBbY29sb3JdOyAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuXG4gICAgICB0ZXh0Q29sb3IgPSBzZXRUZXh0Q29sb3IoY29sb3JIZXgpO1xuICAgICAgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvckhleCxcbiAgICAgICAgY29sb3I6IHRleHRDb2xvclxuICAgICAgfSwgb3B0aW9uYWxDdXN0b21TdHlsZXMpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgIT09ICdob2xsb3cnKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY3VzdG9tIGNvbG9yIHRoYXQgaXMgbmVpdGhlciBmcm9tIHRoZSBiYXNlIHBhbGV0dGUgbm9yIGhvbGxvd1xuICAgICAgLy8gTGV0J3MgZG8gb3VyIGJlc3QgdG8gZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgc3VmZmljaWVudCBjb250cmFzdFxuICAgICAgLy8gU2V0IGRhcmsgb3IgbGlnaHQgdGV4dCBjb2xvciBiYXNlZCB1cG9uIGJlc3QgY29udHJhc3RcbiAgICAgIHRleHRDb2xvciA9IHNldFRleHRDb2xvcihjb2xvcik7IC8vIENoZWNrIHRoZSBjb250cmFzdFxuXG4gICAgICB3Y2FnQ29udHJhc3QgPSBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xuXG4gICAgICBpZiAod2NhZ0NvbnRyYXN0IDwgd2NhZ0NvbnRyYXN0QmFzZSkge1xuICAgICAgICAvLyBJdCdzIGxvdyBjb250cmFzdCwgc28gbGV0cyBzaG93IGEgd2FybmluZyBpbiB0aGUgY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6ICcsIGNvbG9yLCAnIGJhZGdlIGhhcyBsb3cgY29udHJhc3Qgb2YgJywgd2NhZ0NvbnRyYXN0LnRvRml4ZWQoMiksICcuIFNob3VsZCBiZSBhYm92ZSAnLCB3Y2FnQ29udHJhc3RCYXNlLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICBjb2xvcjogdGV4dENvbG9yXG4gICAgICB9LCBvcHRpb25hbEN1c3RvbVN0eWxlcyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBoYW5kbGVJbnZhbGlkQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZScsIHtcbiAgICAnZXVpQmFkZ2UtaXNDbGlja2FibGUnOiAob25DbGljayB8fCBocmVmKSAmJiAhaWNvbk9uQ2xpY2ssXG4gICAgJ2V1aUJhZGdlLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdldWlCYWRnZS0taG9sbG93JzogY29sb3IgPT09ICdob2xsb3cnXG4gIH0sIGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdLCBjbGFzc05hbWUpO1xuICB2YXIgY2xvc2VDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2VfX2ljb24nLCBjbG9zZUJ1dHRvblByb3BzICYmIGNsb3NlQnV0dG9uUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIEVsZW1lbnQgPSBocmVmICYmICFpc0Rpc2FibGVkID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsSWNvbiA9IG51bGw7XG5cbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgICBpZiAoIWljb25PbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIHRoZSBpY29uT25DbGljayBwcm9wcyB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIGljb25PbkNsaWNrQXJpYUxhYmVsJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25CdXR0b25cIixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdGl0bGU6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBpY29uT25DbGlja1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgICAgfSwgY2xvc2VCdXR0b25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsb3NlQ2xhc3NOYW1lc1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBjaGlsZHJlbiA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbkNsaWNrICYmICFvbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3Npbmcgb25DbGljayB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIG9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgfVxuXG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gIH0sIGNoaWxkcmVuICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX3RleHRcIlxuICB9LCBjaGlsZHJlbiksIG9wdGlvbmFsSWNvbik7XG5cbiAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgcmV0dXJuIG9uQ2xpY2sgfHwgaHJlZiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gICAgfSwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NoaWxkQnV0dG9uXCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICB9KSwgb3B0aW9uYWxJY29uKSkgOiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59O1xuRXVpQmFkZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICovXG4gIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICovXG4gIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5mdW5jdGlvbiBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpIHtcbiAgdmFyIGNvbnRyYXN0VmFsdWUgPSBjaHJvbWEuY29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG4gIHJldHVybiBjb250cmFzdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29sb3IoYmdDb2xvcikge1xuICB2YXIgdGV4dENvbG9yID0gaXNDb2xvckRhcmsuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hyb21hKGJnQ29sb3IpLnJnYigpKSkgPyBjb2xvckdob3N0IDogY29sb3JJbms7XG4gIHJldHVybiB0ZXh0Q29sb3I7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUludmFsaWRDb2xvcihjb2xvcikge1xuICB2YXIgaXNOYW1lZENvbG9yID0gY29sb3IgJiYgQ09MT1JTLmluY2x1ZGVzKGNvbG9yKSB8fCBjb2xvciA9PT0gJ2hvbGxvdyc7XG4gIHZhciBpc1ZhbGlkQ29sb3JTdHJpbmcgPSBjb2xvciAmJiBjaHJvbWFWYWxpZChwYXJzZUNvbG9yKGNvbG9yKSB8fCAnJyk7XG5cbiAgaWYgKCFpc05hbWVkQ29sb3IgJiYgIWlzVmFsaWRDb2xvclN0cmluZykge1xuICAgIGNvbnNvbGUud2FybignRXVpQmFkZ2UgZXhwZWN0cyBhIHZhbGlkIGNvbG9yLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSB0aHJlZSBvciBzaXggJyArIFwiY2hhcmFjdGVyIGhleCB2YWx1ZSwgcmdiKGEpIHZhbHVlLCBoc3YgdmFsdWUsIGhvbGxvdywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwiLmNvbmNhdChDT0xPUlMsIFwiLiBcIikgKyBcIkluc3RlYWQgZ290IFwiLmNvbmNhdChjb2xvciwgXCIuXCIpKTtcbiAgfVxufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIGdldEV2ZW50UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFdmVudFBvc2l0aW9uKGxvY2F0aW9uLCBjb250YWluZXIpIHtcbiAgdmFyIHggPSBsb2NhdGlvbi54LFxuICAgICAgeSA9IGxvY2F0aW9uLnk7XG5cbiAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpZHRoID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmhlaWdodCxcbiAgICAgIGxlZnQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4ubGVmdCxcbiAgICAgIHRvcCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi50b3A7XG5cbiAgdmFyIGxlZnRQb3MgPSB4IC0gKGxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQpO1xuICB2YXIgdG9wUG9zID0geSAtICh0b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXG4gIGlmIChsZWZ0UG9zIDwgMCkge1xuICAgIGxlZnRQb3MgPSAwO1xuICB9IGVsc2UgaWYgKGxlZnRQb3MgPiB3aWR0aCkge1xuICAgIGxlZnRQb3MgPSB3aWR0aDtcbiAgfVxuXG4gIGlmICh0b3BQb3MgPCAwKSB7XG4gICAgdG9wUG9zID0gMDtcbiAgfSBlbHNlIGlmICh0b3BQb3MgPiBoZWlnaHQpIHtcbiAgICB0b3BQb3MgPSBoZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGxlZnRQb3MsXG4gICAgdG9wOiB0b3BQb3MsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59O1xuZXhwb3J0IHZhciBIRVhfRkFMTEJBQ0sgPSAnJztcbmV4cG9ydCB2YXIgSFNWX0ZBTExCQUNLID0gWzAsIDAsIDBdO1xuZXhwb3J0IHZhciBSR0JfRkFMTEJBQ0sgPSBbTmFOLCBOYU4sIE5hTiwgMV07XG5leHBvcnQgdmFyIFJHQl9KT0lOID0gJywgJzsgLy8gR2l2ZW4gYSBzdHJpbmcsIHRoaXMgYXR0ZW1wdHMgdG8gcmV0dXJuIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IGNocm9tYS1qc1xuXG5leHBvcnQgdmFyIHBhcnNlQ29sb3IgPSBmdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gIGlmIChpbnB1dC5pbmRleE9mKCcsJykgPiAwKSB7XG4gICAgaWYgKCEvXltcXHMsLjAtOV0qJC8udGVzdChpbnB1dCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciByZ2IgPSBpbnB1dC50cmltKCkuc3BsaXQoJywnKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuICE9PSAnJztcbiAgICB9KS5tYXAoTnVtYmVyKTtcbiAgICBwYXJzZWQgPSByZ2IubGVuZ3RoID4gMiAmJiByZ2IubGVuZ3RoIDwgNSA/IHJnYiA6IEhFWF9GQUxMQkFDSztcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59OyAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IHdpbGwgcmV0dXJuIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdCB3aGVuIGRlc2lnbmF0ZWQgYXMgb25lIG9mXG4vLyB0aGUgYWNjZXB0YWJsZSBmb3JtYXRzOiBoZXgsIHJnYiwgcmdiYVxuXG5leHBvcnQgdmFyIGNocm9tYVZhbGlkID0gZnVuY3Rpb24gY2hyb21hVmFsaWQoY29sb3IpIHtcbiAgdmFyIHBhcnNlZCA9IGNvbG9yO1xuXG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyc2VkID0gcGFyc2VDb2xvcihjb2xvcik7XG4gIH1cblxuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2InKSB8fCBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiYScpO1xuICB9XG5cbiAgcmV0dXJuIGNocm9tYS52YWxpZChjb2xvciwgJ2hleCcpO1xufTsgLy8gR2l2ZW4gYW4gaW5wdXQgYW5kIG9wYWNpdHkgY29uZmlndXJhdGlvbiwgdGhpcyByZXR1cm5zIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdFxuXG5leHBvcnQgdmFyIGdldENocm9tYUNvbG9yID0gZnVuY3Rpb24gZ2V0Q2hyb21hQ29sb3IoaW5wdXQpIHtcbiAgdmFyIGFsbG93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGlucHV0KTtcblxuICBpZiAocGFyc2VkICYmIGNocm9tYVZhbGlkKHBhcnNlZCkpIHtcbiAgICAvLyB0eXBlIGd1YXJkIGZvciB0aGUgZnVuY3Rpb24gb3ZlcmxvYWRcbiAgICB2YXIgY2hyb21hQ29sb3IgPSBfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnID8gY2hyb21hKHBhcnNlZCkgOiBjaHJvbWEocGFyc2VkKTtcblxuICAgIGlmICghYWxsb3dPcGFjaXR5ICYmIGNocm9tYUNvbG9yLmFscGhhKCkgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hyb21hQ29sb3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07IC8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuLy8gT3IgZ2l2ZW4gYW4gYXJyYXkgb2YgaGV4IGNvbG9ycyByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuXG5leHBvcnQgdmFyIGdldExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0TGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gIHZhciBsaW5lYXJHcmFkaWVudDtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG5cbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFswXS5jb2xvciwgXCIgMCUsXCIpO1xuICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBpKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtpXS5jb2xvciwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKSwgXCIlLFwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLmNvbG9yLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZVswXSwgXCIgMCUsXCIpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBfaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbX2ldLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IoMTAwICogX2kgLyBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiksIFwiJSxcIik7XG4gICAgfVxuXG4gICAgdmFyIF9saW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0sIFwiIDEwMCUpXCIpO1xuXG4gICAgcmV0dXJuIF9saW5lYXJHcmFkaWVudFN0eWxlO1xuICB9XG59OyAvLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3Igb3IgYW4gYXJyYXkgb2YgaGV4IGNvbG9yc1xuLy8gcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIGNvbG9yL3dpZHRoXG5cbmV4cG9ydCB2YXIgZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldEZpeGVkTGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcblxuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzID0gcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGNvbG9yU3RvcCwgaW5kZXgpIHtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgICB2YXIgaXNGaXJzdENvbG9yU3RvcCA9IGluZGV4ID09PSAwO1xuICAgICAgdmFyIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG5cbiAgICAgIGlmIChpc0ZpcnN0Q29sb3JTdG9wKSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpbmRleCAtIDFdLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50Q29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKGNvbG9yU3RvcC5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgdmFyIGNvbG9yU3RvcFdpZHRoID0gY3VycmVudENvbG9yU3RvcFdpZHRoIC0gcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBjb2xvclN0b3AuY29sb3IsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChjb2xvclN0b3BXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIHBhbGV0dGVXaWR0aCA9IDEwMCAvIHBhbGV0dGUubGVuZ3RoO1xuXG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG8gPSBfcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGhleENvZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBoZXhDb2RlLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQocGFsZXR0ZVdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0bztcbiAgfVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJ0b29sdGlwQ29udGVudFwiLCBcInRvb2x0aXBQb3NpdGlvblwiLCBcInRpdGxlXCIsIFwiaWNvblR5cGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBjb2xvclRvQ2xhc3NNYXAgPSB7XG4gIGFjY2VudDogJ2V1aUJldGFCYWRnZS0tYWNjZW50JyxcbiAgc3ViZHVlZDogJ2V1aUJldGFCYWRnZS0tc3ViZHVlZCcsXG4gIGhvbGxvdzogJ2V1aUJldGFCYWRnZS0taG9sbG93J1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc01hcCk7XG5leHBvcnQgdmFyIHNpemVUb0NsYXNzTWFwID0ge1xuICBzOiAnZXVpQmV0YUJhZGdlLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmV0YUJhZGdlID0gZnVuY3Rpb24gRXVpQmV0YUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdob2xsb3cnIDogX3JlZiRjb2xvcixcbiAgICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICAgIF9yZWYkdG9vbHRpcFBvc2l0aW9uID0gX3JlZi50b29sdGlwUG9zaXRpb24sXG4gICAgICB0b29sdGlwUG9zaXRpb24gPSBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHRvb2x0aXBQb3NpdGlvbixcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHNpbmdsZUxldHRlciA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLmxlbmd0aCA9PT0gMSkge1xuICAgIHNpbmdsZUxldHRlciA9IHRydWU7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJldGFCYWRnZScsIHtcbiAgICAnZXVpQmV0YUJhZGdlLS1pY29uT25seSc6IGljb25UeXBlLFxuICAgICdldWlCZXRhQmFkZ2UtLXNpbmdsZUxldHRlcic6IHNpbmdsZUxldHRlcixcbiAgICAnZXVpQmV0YUJhZGdlLWlzQ2xpY2thYmxlJzogb25DbGljayB8fCBocmVmXG4gIH0sIGNvbG9yVG9DbGFzc01hcFtjb2xvcl0sIHNpemVUb0NsYXNzTWFwW3NpemVdLCBjbGFzc05hbWUpO1xuICB2YXIgaWNvbjtcblxuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IHNpemUgPT09ICdtJyA/ICdtJyA6ICdzJyxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgfSk7XG4gIH1cblxuICB2YXIgRWxlbWVudCA9IGhyZWYgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuXG4gIGlmIChocmVmKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cblxuICB2YXIgY29udGVudDtcblxuICBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0aXRsZTogdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGxhYmVsIDogdGl0bGVcbiAgICB9LCByZWxPYmosIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcblxuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsXG4gICAgICB9LCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNvbnRlbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICByb2xlOiBcImJ1dHRvblwiXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhblRpdGxlID0gdGl0bGUgfHwgbGFiZWw7XG5cbiAgICAgIGlmIChzcGFuVGl0bGUgJiYgdHlwZW9mIHNwYW5UaXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiT25seSBzdHJpbmcgdGl0bGVzIGFyZSBwZXJtaXR0ZWQgb24gYmFkZ2VzIHRoYXQgZG8gbm90IHVzZSB0b29sdGlwcy4gRm91bmQ6IFwiLmNvbmNhdChfdHlwZW9mKHNwYW5UaXRsZSkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICB0aXRsZTogc3BhblRpdGxlXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCk7XG4gICAgfVxuICB9XG59O1xuRXVpQmV0YUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogU3VwcGx5IGFuIGljb24gdHlwZSBpZiB0aGUgYmFkZ2Ugc2hvdWxkIGp1c3QgYmUgYW4gaWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcblxuICAvKipcbiAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSB3aWxsIGJlIHN1cHBsaWVkIGFzIHRvb2x0aXAgdGl0bGUgb3IgdGl0bGUgYXR0cmlidXRlXG4gICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJhY2NlbnRcIiwgXCJzdWJkdWVkXCIsIFwiaG9sbG93XCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbmNob3JDbGFzc05hbWVcIiwgXCJjb250ZW50XCIsIFwidGl0bGVcIiwgXCJkZWxheVwiLCBcImRpc3BsYXlcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aVRvb2xUaXBQb3BvdmVyIH0gZnJvbSAnLi90b29sX3RpcF9wb3BvdmVyJztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgcG9zaXRpb25zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHRvcDogJ2V1aVRvb2xUaXAtLXRvcCcsXG4gIHJpZ2h0OiAnZXVpVG9vbFRpcC0tcmlnaHQnLFxuICBib3R0b206ICdldWlUb29sVGlwLS1ib3R0b20nLFxuICBsZWZ0OiAnZXVpVG9vbFRpcC0tbGVmdCdcbn07XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IGtleXNPZihwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcCk7XG52YXIgZGVsYXlUb01zTWFwID0ge1xuICByZWd1bGFyOiAyNTAsXG4gIGxvbmc6IDI1MCAqIDVcbn07XG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbmxpbmVCbG9jazogdW5kZWZpbmVkLFxuICBibG9jazogJ2V1aVRvb2xUaXBBbmNob3ItLWRpc3BsYXlCbG9jaydcbn07XG52YXIgREVGQVVMVF9UT09MVElQX1NUWUxFUyA9IHtcbiAgLy8gcG9zaXRpb24gdGhlIHRvb2x0aXAgY29udGVudCBuZWFyIHRoZSB0b3AtbGVmdFxuICAvLyBjb3JuZXIgb2YgdGhlIHdpbmRvdyBzbyBpdCBjYW4ndCBjcmVhdGUgc2Nyb2xsYmFyc1xuICAvLyA1MCw1MCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IG5lZ2F0aXZlIG1hcmdpbnMsIHBhZGRpbmcsIGV0Y1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MCxcbiAgLy8ganVzdCBpbiBjYXNlLCBhdm9pZCBhbnkgcG90ZW50aWFsIGZsaWNrZXIgYnkgaGlkaW5nXG4gIC8vIHRoZSB0b29sdGlwIGJlZm9yZSBpdCBpcyBwb3NpdGlvbmVkXG4gIG9wYWNpdHk6IDAsXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCBtb3VzZSBpbnRlcmFjdGlvbiB3aGlsZSBwb3NpdGlvbmluZ1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufTtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVG9vbFRpcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUb29sVGlwKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUb29sVGlwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYW5jaG9yXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGltZW91dElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBjYWxjdWxhdGVkUG9zaXRpb246IF90aGlzLnByb3BzLnBvc2l0aW9uLFxuICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWQsXG4gICAgICBpZDogX3RoaXMucHJvcHMuaWQgfHwgaHRtbElkR2VuZXJhdG9yKCkoKVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQW5pbWF0aW9uVGltZW91dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRlc3RBbmNob3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gd2hlbiB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlLCB0aGlzIGNoZWNrcyBpZiB0aGUgYW5jaG9yIGlzIHN0aWxsIHBhcnQgb2YgZG9jdW1lbnRcbiAgICAgIC8vIHRoaXMgZml4ZXMgd2hlbiB0aGUgcmVhY3Qgcm9vdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvbSB3aXRob3V0IHVubW91bnRpbmdcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMTEwNVxuICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXMuYW5jaG9yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhlIGFuY2hvciBpcyBubyBsb25nZXIgcGFydCBvZiBgZG9jdW1lbnRgXG4gICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgIC8vIGlmIHN0aWxsIHZpc2libGUsIGtlZXAgY2hlY2tpbmdcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudGVzdEFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7IC8vIGlmIHRoZSBwb3BvdmVyIGhhcyBiZWVuIHVubW91bnRlZCwgY2xlYXJcbiAgICAgIC8vIGFueSBwcmV2aW91cyBrbm93bGVkZ2UgYWJvdXQgaXRzIHNpemVcblxuICAgICAgaWYgKHJlZiA9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2hvd1Rvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBkZWxheVRvTXNNYXBbX3RoaXMucHJvcHMuZGVsYXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcXVlc3RlZFBvc2l0aW9uID0gX3RoaXMucHJvcHMucG9zaXRpb247XG5cbiAgICAgIGlmICghX3RoaXMuYW5jaG9yIHx8ICFfdGhpcy5wb3BvdmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFuY2hvcjogX3RoaXMuYW5jaG9yLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wb3BvdmVyLFxuICAgICAgICBwb3NpdGlvbjogcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgIG9mZnNldDogMTYsXG4gICAgICAgIC8vIG9mZnNldCBwb3BvdmVyIDE2cHggZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgYXJyb3dXaWR0aDogMTIsXG4gICAgICAgICAgYXJyb3dCdWZmZXI6IDRcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgICAgcG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdzsgLy8gSWYgZW5jcm9hY2hpbmcgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdzpcbiAgICAgIC8vIFdoZW4gYHByb3BzLmNvbnRlbnRgIGNoYW5nZXMgYW5kIGlzIGxvbmdlciB0aGFuIGBwcmV2UHJvcHMuY29udGVudGAsIHRoZSB0b29sdGlwIHdpZHRoIHJlbWFpbnMgYW5kXG4gICAgICAvLyB0aGUgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBmaXJlIHR3aWNlIChvbmNlIGZvciB2ZXJ0aWNhbCByZXNpemUgY2F1c2VkIGJ5IHRleHQgbGluZSB3cmFwcGluZyxcbiAgICAgIC8vIG9uY2UgZm9yIGEgc3Vic2VxdWVudCBwb3NpdGlvbiBjb3JyZWN0aW9uKSBhbmQgY2F1c2UgYSBmbGFzaCByZXJlbmRlciBhbmQgcmVwb3NpdGlvbi5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgY2FuIG9yaWVudCBmcm9tIHRoZSByaWdodCBzbyB0aGF0IHRleHQgbGluZSB3cmFwcGluZyBkb2VzIG5vdCBvY2N1ciwgbmVnYXRpbmdcbiAgICAgIC8vIHRoZSBzZWNvbmQgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgY2FsbC5cblxuXG4gICAgICB2YXIgd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICB2YXIgdXNlUmlnaHRWYWx1ZSA9IHdpbmRvd1dpZHRoIC8gMiA8IGxlZnQ7XG4gICAgICB2YXIgdG9vbFRpcFN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IHVzZVJpZ2h0VmFsdWUgPyAnYXV0bycgOiBsZWZ0LFxuICAgICAgICByaWdodDogdXNlUmlnaHRWYWx1ZSA/IHdpbmRvd1dpZHRoIC0gbGVmdCAtIF90aGlzLnBvcG92ZXIub2Zmc2V0V2lkdGggOiAnYXV0bydcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgdG9vbFRpcFN0eWxlczogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoaWRlVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcblxuICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5zaG93VG9vbFRpcCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZU91dFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgbW91c2luZyBvdmVyIGNoaWxkcmVuIGZyb20gaGlkaW5nIHRoZSB0b29sdGlwIGJ5IHRlc3RpbmcgZm9yIHdoZXRoZXIgdGhlIG1vdXNlIGhhc1xuICAgICAgLy8gbGVmdCB0aGUgYW5jaG9yIGZvciBhIG5vbi1jaGlsZC5cbiAgICAgIGlmIChfdGhpcy5hbmNob3IgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgX3RoaXMuYW5jaG9yICE9IG51bGwgJiYgIV90aGlzLmFuY2hvci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICBpZiAoIV90aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZU91dCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnZpc2libGUgPT09IGZhbHNlICYmIHRoaXMuc3RhdGUudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgICBjb250ZW50ID0gX3RoaXMkcHJvcHMuY29udGVudCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMuZGVsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhcnJvd1N0eWxlcyA9IF90aGlzJHN0YXRlLmFycm93U3R5bGVzLFxuICAgICAgICAgIGlkID0gX3RoaXMkc3RhdGUuaWQsXG4gICAgICAgICAgdG9vbFRpcFN0eWxlcyA9IF90aGlzJHN0YXRlLnRvb2xUaXBTdHlsZXMsXG4gICAgICAgICAgdmlzaWJsZSA9IF90aGlzJHN0YXRlLnZpc2libGU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXAnLCBwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcFt0aGlzLnN0YXRlLmNhbGN1bGF0ZWRQb3NpdGlvbl0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBBbmNob3InLCBkaXNwbGF5ID8gZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldIDogbnVsbCwgYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICAgIHZhciB0b29sdGlwO1xuXG4gICAgICBpZiAodmlzaWJsZSAmJiAoY29udGVudCB8fCB0aXRsZSkpIHtcbiAgICAgICAgdG9vbHRpcCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcDogdGhpcy5wb3NpdGlvblRvb2xUaXAsXG4gICAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5zZXRQb3BvdmVyUmVmLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcm9sZTogXCJ0b29sdGlwXCJcbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHN0eWxlOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fYXJyb3dcIlxuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLnBvc2l0aW9uVG9vbFRpcFxuICAgICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgICAgfSkpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuY2hvciA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9tb3VzZS1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgICBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGFuY2hvcikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYW5jaG9yID0gYW5jaG9yO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgIG9uTW91c2VPdmVyOiB0aGlzLnNob3dUb29sVGlwLFxuICAgICAgICBvbk1vdXNlT3V0OiB0aGlzLm9uTW91c2VPdXRcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyAmJiBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzKGUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihlKSB7XG4gICAgICAgICAgX3RoaXMyLm9uQmx1cigpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyICYmIGNoaWxkcmVuLnByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdmlzaWJsZSAmJiB7XG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdGhpcy5zdGF0ZS5pZFxuICAgICAgfSkpKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGFuY2hvciwgdG9vbHRpcCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRvb2xUaXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUb29sVGlwLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHBvc2l0aW9uOiAndG9wJyxcbiAgZGVsYXk6ICdyZWd1bGFyJyxcbiAgZGlzcGxheTogJ2lubGluZUJsb2NrJ1xufSk7XG5cbkV1aVRvb2xUaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgaW4tdmlldyB0cmlnZ2VyIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJpbmxpbmVCbG9ja1wiLCBcImJsb2NrXCJdKSxcblxuICAvKipcbiAgICAgKiBEZWxheSBiZWZvcmUgc2hvd2luZyB0b29sdGlwLiBHb29kIGZvciByZXBlYXRhYmxlIGl0ZW1zLlxuICAgICAqL1xuICBkZWxheTogUHJvcFR5cGVzLm9uZU9mKFtcInJlZ3VsYXJcIiwgXCJsb25nXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTdWdnZXN0ZWQgcG9zaXRpb24uIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgaXQgdGhpcyB3aWxsIGJlIGNoYW5nZWQuXG4gICAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBXZSBjYW4ndCB0ZXN0IHRoaXMgY29tcG9uZW50IGJlY2F1c2UgRW56eW1lIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXJpbmdcbiAqIGludG8gcG9ydGFscy5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5leHBvcnQgdmFyIGluc2VydFBvc2l0aW9ucyA9IHtcbiAgYWZ0ZXI6ICdhZnRlcmVuZCcsXG4gIGJlZm9yZTogJ2JlZm9yZWJlZ2luJ1xufTtcbmV4cG9ydCB2YXIgSU5TRVJUX1BPU0lUSU9OUyA9IGtleXNPZihpbnNlcnRQb3NpdGlvbnMpO1xuZXhwb3J0IHZhciBFdWlQb3J0YWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVBvcnRhbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlQb3J0YWwpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcnRhbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3J0YWwpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9ydGFsTm9kZVwiLCBudWxsKTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTsgLy8gUHJldmVudCBTU1IgZXJyb3JzXG5cbiAgICB2YXIgaW5zZXJ0ID0gX3RoaXMucHJvcHMuaW5zZXJ0O1xuICAgIF90aGlzLnBvcnRhbE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpcy5wb3J0YWxOb2RlLmRhdGFzZXQuZXVpcG9ydGFsID0gJ3RydWUnO1xuXG4gICAgaWYgKGluc2VydCA9PSBudWxsKSB7XG4gICAgICAvLyBubyBpbnNlcnRpb24gZGVmaW5lZCwgYXBwZW5kIHRvIGJvZHlcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX3RoaXMucG9ydGFsTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydGluZyBiZWZvcmUgb3IgYWZ0ZXIgYW4gZWxlbWVudFxuICAgICAgdmFyIHNpYmxpbmcgPSBpbnNlcnQuc2libGluZyxcbiAgICAgICAgICBwb3NpdGlvbiA9IGluc2VydC5wb3NpdGlvbjtcbiAgICAgIHNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGluc2VydFBvc2l0aW9uc1twb3NpdGlvbl0sIF90aGlzLnBvcnRhbE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYodGhpcy5wb3J0YWxOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcG9ydGFsTm9kZTtcblxuICAgICAgaWYgKChfdGhpcyRwb3J0YWxOb2RlID0gdGhpcy5wb3J0YWxOb2RlKSAhPT0gbnVsbCAmJiBfdGhpcyRwb3J0YWxOb2RlICE9PSB2b2lkIDAgJiYgX3RoaXMkcG9ydGFsTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMucG9ydGFsTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9ydGFsTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKG51bGwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3J0YWxSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9ydGFsUmVmKHJlZikge1xuICAgICAgaWYgKHRoaXMucHJvcHMucG9ydGFsUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMucG9ydGFsUmVmKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3J0YWxOb2RlID8gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLCB0aGlzLnBvcnRhbE5vZGUpIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpUG9ydGFsO1xufShDb21wb25lbnQpO1xuRXVpUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgcG9ydGFsUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0aXRsZVwiLCBcImNsYXNzTmFtZVwiLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBcInBvcG92ZXJSZWZcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcFBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRvb2xUaXBQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRvb2xUaXBQb3BvdmVyKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwUG9wb3ZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVG9vbFRpcFBvcG92ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVyXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlRGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHRoaXMgZGVsYXksIHNvbWV0aW1lcyBgcG9zaXRpb25Ub29sVGlwYCBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgICAgICBpZiAoX3RoaXMucG9wb3Zlcikge1xuICAgICAgICAgIF90aGlzLnByb3BzLnBvc2l0aW9uVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5wb3BvdmVyUmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLnBvcG92ZXJSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlRGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcCA9IF90aGlzJHByb3BzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgb3B0aW9uYWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX190aXRsZVwiXG4gICAgICAgIH0sIHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHJlZjogdGhpcy5zZXRQb3BvdmVyUmVmXG4gICAgICB9LCByZXN0KSwgb3B0aW9uYWxUaXRsZSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUb29sVGlwUG9wb3Zlcjtcbn0oQ29tcG9uZW50KTtcbkV1aVRvb2xUaXBQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvblRvb2xUaXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiaWNvblByb3BzXCIsIFwicG9zaXRpb25cIiwgXCJkZWxheVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi90b29sX3RpcCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJY29uVGlwID0gZnVuY3Rpb24gRXVpSWNvblRpcChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAncXVlc3Rpb25JbkNpcmNsZScgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWYkYXJpYUxhYmVsID09PSB2b2lkIDAgPyAnSW5mbycgOiBfcmVmJGFyaWFMYWJlbCxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBpY29uUHJvcHMgPSBfcmVmLmljb25Qcm9wcyxcbiAgICAgIF9yZWYkcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmJHBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkcG9zaXRpb24sXG4gICAgICBfcmVmJGRlbGF5ID0gX3JlZi5kZWxheSxcbiAgICAgIGRlbGF5ID0gX3JlZiRkZWxheSA9PT0gdm9pZCAwID8gJ3JlZ3VsYXInIDogX3JlZiRkZWxheSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGRlbGF5OiBkZWxheVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0sIGljb25Qcm9wcykpKTtcbn07XG5FdWlJY29uVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImlubGluZUJsb2NrXCIsIFwiYmxvY2tcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogVGhlIGljb24gY29sb3IuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHR5cGUuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHNpemUuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRXhwbGFpbiB3aGF0IHRoaXMgaWNvbiBtZWFucyBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFBhc3MgY2VydGFpbiBwcm9wcyBkb3duIHRvIGBFdWlJY29uYFxuICAgICAqL1xuICAvLyBFdWlJY29uVGlwJ3MgYHR5cGVgIGlzIHBhc3NlZCB0byBFdWlJY29uLCBzbyB3ZSB3YW50IHRvIGV4Y2x1ZGUgYHR5cGVgIGZyb21cbiAgLy8gaWNvblByb3BzOyBob3dldmVyLCBkdWUgdG8gVFMncyBiaXZhcmlhbnQgZnVuY3Rpb24gYXJndW1lbnRzIGB0eXBlYCBjb3VsZCBiZVxuICAvLyBwYXNzZWQgd2l0aG91dCBhbnkgZXJyb3IvZmVlZGJhY2sgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYG5ldmVyYCB0eXBlXG4gIGljb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLy8gVGhpcyBhcmUgY29waWVkIGZyb20gRXVpVG9vbFRpcFByb3BzLCBidXQgbWFkZSBvcHRpb25hbC4gRGVmYXVsdHNcbiAgLy8gYXJlIGFwcGxpZWQgYmVsb3cuXG4gIGRlbGF5OiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJEIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdHlwZXMnOyAvLyBDcmVhdGUgYSBDU1MgY29sb3IgdmFsdWUgdXNpbmcgd2hvc2Ugb3BhY2l0eSBpcyBkZXRlcm1pbmVkIGJhc2VkXG4vLyBvbiBlaXRoZXIgYSBsaWdodCBvciBkYXJrIHRoZW1lLiBXZSB1c2UgYSBtdWx0aXBsaWVyXG4vLyBvZiAxIGZvciBsaWdodCB0aGVtZXMgYW5kIDIuNSBmb3IgZGFyayB0aGVtZXNcblxuZXhwb3J0IHZhciBnZXRTaGFkb3dDb2xvciA9IGZ1bmN0aW9uIGdldFNoYWRvd0NvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvck1vZGUpIHtcbiAgdmFyIHRoZW1lT3BhY2l0eSA9IGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IG9wYWNpdHkgKiAzLjUgOiBvcGFjaXR5ICogMTtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEodGhlbWVPcGFjaXR5KS5jc3MoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGdldFNoYWRvd0NvbG9yIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuLyoqXG4gKiBldWlTbGlnaHRTaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dYU21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dYU21hbGwoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuOHB4IC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMi4zcHggMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1NtYWxsXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1NtYWxsKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjMuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmNC5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjdweCAxLjRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAxLjlweCA0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDQuNXB4IDEwcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TWVkaXVtXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dNZWRpdW0gPSBmdW5jdGlvbiBldWlTaGFkb3dNZWRpdW0oX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmNS5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWY2LmNvbG9yLFxuICAgICAgcHJvcGVydHkgPSBfcmVmNi5wcm9wZXJ0eTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgdmFyIGFycmF5ID0gW1wiMCAuOXB4IDRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSkpLCBcIjAgMi42cHggOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSksIFwiMCA1LjdweCAxMnB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSksIFwiMCAxNXB4IDE1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpKV07XG5cbiAgaWYgKHByb3BlcnR5ID09PSAnZmlsdGVyJykge1xuICAgIHJldHVybiBcImZpbHRlcjogXCIuY29uY2F0KGFycmF5LnJlZHVjZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHYsIFwiIGRyb3Atc2hhZG93KFwiKS5jb25jYXQoaSwgXCIpXCIpO1xuICAgIH0sICcnKSwgXCI7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcImJveC1zaGFkb3c6IFwiLmNvbmNhdChhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH0pLCBcIjtcIik7XG4gIH1cbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93TGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dMYXJnZShfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY3LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjguY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TGFyZ2VcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hMYXJnZShfcmVmOSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmOS5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY5LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjEwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYxMC5jb2xvcixcbiAgICAgIHJldmVyc2UgPSBfcmVmMTAucmV2ZXJzZTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgXCIuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyLjdweCA5cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xMywgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjkuNHB4IDI0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIxLjhweCA0M3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIHNsaWdodFNoYWRvd0hvdmVyXG4gKiBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgb25seSB1c2VkIGJ5IHBhbmVscy9jYXJkcyBpbiB0aGUgQW1zdGVyZGFtIHRoZW1lLCBtb3ZlIHRoZXJlXG4gKi9cblxuZXhwb3J0IHZhciBldWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIGV1aVNsaWdodFNoYWRvd0hvdmVyKF9yZWYxMSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTEuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmMTEuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMTIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjEyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTbGlnaHRTaGFkb3dIb3ZlcihldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dGbGF0XG4gKlxuICogU2ltaWxhciB0byBzaGFkb3cgbWVkaXVtIGJ1dCB3aXRob3V0IHRoZSBib3R0b20gZGVwdGguXG4gKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgZHJvcCBVUCByYXRoZXIgdGhhbiBET1dOLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIGV1aVNoYWRvd0ZsYXQoX3JlZjEzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYxMy5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYxNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMTQuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDAgLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCA1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMTdweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93RmxhdChjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpU2hhZG93ID0gZnVuY3Rpb24gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2wnO1xuXG4gIHZhciBfcmVmMTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgY29sb3IgPSBfcmVmMTUuY29sb3I7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAneHMnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1NtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICd4bCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WExhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzaXplIG9wdGlvbiB0byB1c2VFdWlTaGFkb3cnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93KCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2wnO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCBzaXplLCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJocmVmXCIsIFwiZXh0ZXJuYWxcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwib25DbGlja1wiLCBcImRpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUxpbmtTdHlsZXMgfSBmcm9tICcuL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsncHJpbWFyeScsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ3RleHQnLCAnZ2hvc3QnXTtcbnZhciBFdWlMaW5rID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICBleHRlcm5hbCA9IF9yZWYuZXh0ZXJuYWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTGlua1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtdO1xuICB2YXIgY3NzU2NyZWVuUmVhZGVyVGV4dFN0eWxlcyA9IFtzdHlsZXMuZXVpTGlua19fc2NyZWVuUmVhZGVyVGV4dF07XG4gIHZhciBjc3NFeHRlcm5hbExpbmtJY29uU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rX19leHRlcm5hbEljb25dO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgdmFyIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIHtcbiAgICBjc3M6IGNzc1NjcmVlblJlYWRlclRleHRTdHlsZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpTGluay5uZXdUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihvcGVucyBpbiBhIG5ldyB0YWIgb3Igd2luZG93KVwiXG4gIH0pKSk7XG5cbiAgdmFyIGV4dGVybmFsTGlua0ljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBcImFyaWEtbGFiZWxcIjogdXNlRXVpSTE4bignZXVpTGluay5leHRlcm5hbC5hcmlhTGFiZWwnLCAnRXh0ZXJuYWwgbGluaycpLFxuICAgIHNpemU6IFwic1wiLFxuICAgIGNzczogY3NzRXh0ZXJuYWxMaW5rSWNvblN0eWxlcyxcbiAgICB0eXBlOiBcInBvcG91dFwiXG4gIH0pO1xuXG4gIGlmIChocmVmID09PSB1bmRlZmluZWQgfHwgIWlzSHJlZlZhbGlkKSB7XG4gICAgdmFyIGJ1dHRvblByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgICAgY3NzOiBbY3NzU3R5bGVzLCBkaXNhYmxlZCA/IFtzdHlsZXMuZGlzYWJsZWRdIDogc3R5bGVzW2NvbG9yXV0sXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0sIHJlc3QpO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiByZWZcbiAgICB9LCBidXR0b25Qcm9wcyksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiByZWxcbiAgfSk7XG5cbiAgdmFyIGFuY2hvclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICBjc3M6IFtjc3NTdHlsZXMsIHN0eWxlc1tjb2xvcl1dLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgb25DbGljazogb25DbGlja1xuICB9LCByZXN0KTtcblxuICB2YXIgc2hvd0V4dGVybmFsTGlua0ljb24gPSB0YXJnZXQgPT09ICdfYmxhbmsnICYmIGV4dGVybmFsICE9PSBmYWxzZSB8fCBleHRlcm5hbCA9PT0gdHJ1ZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBhbmNob3JQcm9wcyksIGNoaWxkcmVuLCBzaG93RXh0ZXJuYWxMaW5rSWNvbiAmJiBleHRlcm5hbExpbmtJY29uLCB0YXJnZXQgPT09ICdfYmxhbmsnICYmIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQpO1xufSk7XG5FdWlMaW5rLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJzdWJtaXRcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlMaW5rLmRpc3BsYXlOYW1lID0gJ0V1aUxpbmsnO1xuZXhwb3J0IHsgRXVpTGluayB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBGb2N1c09uIH0gZnJvbSAncmVhY3QtZm9jdXMtb24nO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb2N1c1RyYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvY3VzVHJhcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb2N1c1RyYXApO1xuXG4gIGZ1bmN0aW9uIEV1aUZvY3VzVHJhcCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9jdXNUcmFwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsYXN0SW50ZXJjZXB0ZWRFdmVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50Rm9jdXNFeGl0XCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRJbml0aWFsRm9jdXNcIiwgZnVuY3Rpb24gKGluaXRpYWxGb2N1cykge1xuICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHJldHVybjtcbiAgICAgIHZhciBub2RlID0gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoaW5pdGlhbEZvY3VzKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuOyAvLyBgZGF0YS1hdXRvZm9jdXNgIGlzIHBhcnQgb2YgdGhlICdyZWFjdC1mb2N1cy1vbicgQVBJXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZXVwT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7IC8vIFRpbWVvdXQgZ2l2ZXMgcHJlY2VkZW5jZSB0byB0aGUgY29uc3VtZXIgdG8gaW5pdGlhdGUgY2xvc2UgaWYgaXQgaGFzIHRvZ2dsZSBiZWhhdmlvci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIGV2ZW50IG1heSBvY2N1ciBmaXJzdCBhbmQgdGhlIGNvbnN1bWVyIHRvZ2dsZSB3aWxsIHJlb3BlbiB0aGUgZmx5b3V0LlxuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGlja091LCBfdGhpcyRwcm9wcztcblxuICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNsaWNrT3V0c2lkZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGlja091ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrT3UuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczIuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgY2xvc2VPbk1vdXNldXAgPSBfdGhpcyRwcm9wczIuY2xvc2VPbk1vdXNldXA7XG5cbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID8gX3RoaXMuYWRkTW91c2V1cExpc3RlbmVyKCkgOiBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9jdXNUcmFwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgfSAvLyBQcm9ncmFtbWF0aWNhbGx5IHNldHMgZm9jdXMgb24gYSBuZXN0ZWQgRE9NIG5vZGU7IG9wdGlvbmFsXG5cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgICAgcmV0dXJuRm9jdXMgPSBfdGhpcyRwcm9wczMucmV0dXJuRm9jdXMsXG4gICAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgICAgc2Nyb2xsTG9jayA9IF90aGlzJHByb3BzMy5zY3JvbGxMb2NrLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IGRpc2FibGVkIHx8IHRoaXMuc3RhdGUuaGFzQmVlbkRpc2FibGVkQnlDbGljaztcblxuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBzY3JvbGxMb2NrOiBzY3JvbGxMb2NrLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGlja1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZvY3VzT24sIGZvY3VzT25Qcm9wcywgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb2N1c1RyYXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb2N1c1RyYXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2Vcbn0pO1xuXG5FdWlGb2N1c1RyYXAucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvY3VzT24gYXMgUmVhY3RGb2N1c09uIH0gZnJvbSAnLi9VSSc7XG5pbXBvcnQgU2lkZUNhciBmcm9tICcuL3NpZGVjYXInO1xudmFyIFJlcXVpcmVTaWRlQ2FyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzT24sIF9fYXNzaWduKHt9LCBwcm9wcywgeyByZWY6IHJlZiwgc2lkZUNhcjogUmVxdWlyZVNpZGVDYXIgfSkpOyB9KTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsL1VJJztcbmltcG9ydCBSZWFjdEZvY3VzTG9jayBmcm9tICdyZWFjdC1mb2N1cy1sb2NrL1VJJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBQUkVWRU5UX1NDUk9MTCA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSwgbG9ja1Byb3BzID0gX2FbMF0sIHNldExvY2tQcm9wcyA9IF9hWzFdO1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgY3Jvc3NGcmFtZSA9IHByb3BzLmNyb3NzRnJhbWUsIF9iID0gcHJvcHMuZW5hYmxlZCwgZW5hYmxlZCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gcHJvcHMuc2Nyb2xsTG9jaywgc2Nyb2xsTG9jayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gcHJvcHMuZm9jdXNMb2NrLCBmb2N1c0xvY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IHByb3BzLnJldHVybkZvY3VzLCByZXR1cm5Gb2N1cyA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHNob3VsZElnbm9yZSA9IHByb3BzLnNob3VsZElnbm9yZSwgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBwcm9wcy5wcmV2ZW50U2Nyb2xsT25Gb2N1cywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgYXMgPSBwcm9wcy5hcywgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiYXV0b0ZvY3VzXCIsIFwic2hhcmRzXCIsIFwiY3Jvc3NGcmFtZVwiLCBcImVuYWJsZWRcIiwgXCJzY3JvbGxMb2NrXCIsIFwiZm9jdXNMb2NrXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwic2lkZUNhclwiLCBcImNsYXNzTmFtZVwiLCBcInNob3VsZElnbm9yZVwiLCBcInByZXZlbnRTY3JvbGxPbkZvY3VzXCIsIFwic3R5bGVcIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgb25BY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25EZWFjdGl2YXRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChsb2NrUHJvcHMsIFtcIm9uQWN0aXZhdGlvblwiLCBcIm9uRGVhY3RpdmF0aW9uXCJdKTtcbiAgICB2YXIgYXBwbGllZExvY2tQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0UHJvcHMpLCB7IGFzOiBhcyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaWRlQ2FyOiBzaWRlQ2FyLFxuICAgICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgICAgYWxsb3dQaW5jaFpvb206IGFsbG93UGluY2hab29tLFxuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlLFxuICAgICAgICBpbmVydDogaW5lcnQsIGVuYWJsZWQ6IGVuYWJsZWQgJiYgc2Nyb2xsTG9jayB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c0xvY2ssIHsgcmVmOiBwYXJlbnRSZWYsIHNpZGVDYXI6IHNpZGVDYXIsIGRpc2FibGVkOiAhKGxvY2tQcm9wcyAmJiBlbmFibGVkICYmIGZvY3VzTG9jayksIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cywgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsIHNoYXJkczogc2hhcmRzLCBjcm9zc0ZyYW1lOiBjcm9zc0ZyYW1lLCBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgd2hpdGVMaXN0OiBzaG91bGRJZ25vcmUsIGxvY2tQcm9wczogYXBwbGllZExvY2tQcm9wcywgZm9jdXNPcHRpb25zOiBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA/IFBSRVZFTlRfU0NST0xMIDogdW5kZWZpbmVkLCBhczogUmVtb3ZlU2Nyb2xsIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHNldExvY2tQcm9wczogc2V0TG9ja1Byb3BzLCBzaGFyZHM6IHNoYXJkcyB9KSkpKSk7XG59KTtcbmV4cG9ydCAqIGZyb20gJy4vcmVFeHBvcnRzJztcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmdWxsV2lkdGhDbGFzc05hbWUsIHplcm9SaWdodENsYXNzTmFtZSB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VNZXJnZVJlZnMgfSBmcm9tICd1c2UtY2FsbGJhY2stcmVmJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBub3RoaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybjtcbn07XG4vKipcbiAqIFJlbW92ZXMgc2Nyb2xsYmFyIGZyb20gdGhlIHBhZ2UgYW5kIGNvbnRhaW4gdGhlIHNjcm9sbCB3aXRoaW4gdGhlIExvY2tcbiAqL1xudmFyIFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvbldoZWVsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBub3RoaW5nLFxuICAgIH0pLCBjYWxsYmFja3MgPSBfYVswXSwgc2V0Q2FsbGJhY2tzID0gX2FbMV07XG4gICAgdmFyIGZvcndhcmRQcm9wcyA9IHByb3BzLmZvcndhcmRQcm9wcywgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGVuYWJsZWQgPSBwcm9wcy5lbmFibGVkLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBub0lzb2xhdGlvbiA9IHByb3BzLm5vSXNvbGF0aW9uLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBfYiA9IHByb3BzLmFzLCBDb250YWluZXIgPSBfYiA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYiwgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImZvcndhcmRQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVtb3ZlU2Nyb2xsQmFyXCIsIFwiZW5hYmxlZFwiLCBcInNoYXJkc1wiLCBcInNpZGVDYXJcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwgImV4cG9ydCB2YXIgemVyb1JpZ2h0Q2xhc3NOYW1lID0gJ3JpZ2h0LXNjcm9sbC1iYXItcG9zaXRpb24nO1xuZXhwb3J0IHZhciBmdWxsV2lkdGhDbGFzc05hbWUgPSAnd2lkdGgtYmVmb3JlLXNjcm9sbC1iYXInO1xuZXhwb3J0IHZhciBub1Njcm9sbGJhcnNDbGFzc05hbWUgPSAnd2l0aC1zY3JvbGwtYmFycy1oaWRkZW4nO1xuLyoqXG4gKiBOYW1lIG9mIGEgQ1NTIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGFtb3VudCBvZiBcImhpZGRlblwiIHNjcm9sbGJhclxuICogISBtaWdodCBiZSB1bmRlZmluZWQgISB1c2Ugd2lsbCBmYWxsYmFjayFcbiAqL1xuZXhwb3J0IHZhciByZW1vdmVkQmFyU2l6ZVZhcmlhYmxlID0gJy0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSc7XG4iLCAiLyoqXG4gKiBBc3NpZ25zIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVmLCBubyBtYXR0ZXIgb2YgdGhlIHJlZiBmb3JtYXRcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fSByZWYgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHJlZiBvYmplY3RcbiAqIEBwYXJhbSB2YWx1ZSAtIGEgbmV3IHZhbHVlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjYXNzaWducmVmXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmT2JqZWN0ID0gdXNlUmVmKCk7XG4gKiBjb25zdCByZWZGbiA9IChyZWYpID0+IHsuLi4ufVxuICpcbiAqIGFzc2lnblJlZihyZWZPYmplY3QsIFwicmVmVmFsdWVcIik7XG4gKiBhc3NpZ25SZWYocmVmRm4sIFwicmVmVmFsdWVcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25SZWYocmVmLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZih2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVmO1xufVxuIiwgImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduUmVmIH0gZnJvbSAnLi9hc3NpZ25SZWYnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tICcuL3VzZVJlZic7XG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xudmFyIGN1cnJlbnRWYWx1ZXMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNZXJnZXMgdHdvIG9yIG1vcmUgcmVmcyB0b2dldGhlciBwcm92aWRpbmcgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIHNldCB0aGVpciB2YWx1ZVxuICogQHBhcmFtIHtSZWZPYmplY3R8UmVmfSByZWZzXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH0gLSBhIG5ldyByZWYsIHdoaWNoIHRyYW5zbGF0ZXMgYWxsIGNoYW5nZXMgdG8ge3JlZnN9XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VSZWZzfSBhIHZlcnNpb24gd2l0aG91dCBidWl0LWluIG1lbW9pemF0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VtZXJnZXJlZnNcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gKiAgIGNvbnN0IG93blJlZiA9IHVzZVJlZigpO1xuICogICBjb25zdCBkb21SZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgb3duUmVmXSk7IC8vIFx1RDgzRFx1REM0OCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZnVuY3Rpb24gSXRvSShhKSB7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFzc2lnbmVkID0gZmFsc2U7XG4gICAgdmFyIG1lZGl1bSA9IHtcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lZGl1bTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gbWlkZGxld2FyZShkYXRhLCBhc3NpZ25lZCk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAhPT0gaXRlbTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25TeW5jTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGNiKHgpOyB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyOyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4ZWN1dGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY3ljbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGV4ZWN1dGVRdWV1ZSk7IH07XG4gICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZS5wdXNoKHgpO1xuICAgICAgICAgICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZWRpdW07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHJldHVybiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gX19hc3NpZ24oeyBhc3luYzogdHJ1ZSwgc3NyOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBTaWRlQ2FyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNpZGVDYXIgPSBfYS5zaWRlQ2FyLCByZXN0ID0gX19yZXN0KF9hLCBbXCJzaWRlQ2FyXCJdKTtcbiAgICBpZiAoIXNpZGVDYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBwbGVhc2UgcHJvdmlkZSBgc2lkZUNhcmAgcHJvcGVydHkgdG8gaW1wb3J0IHRoZSByaWdodCBjYXInKTtcbiAgICB9XG4gICAgdmFyIFRhcmdldCA9IHNpZGVDYXIucmVhZCgpO1xuICAgIGlmICghVGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhciBtZWRpdW0gbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhcmdldCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbn07XG5TaWRlQ2FyLmlzU2lkZUNhckV4cG9ydCA9IHRydWU7XG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0U2lkZWNhcihtZWRpdW0sIGV4cG9ydGVkKSB7XG4gICAgbWVkaXVtLnVzZU1lZGl1bShleHBvcnRlZCk7XG4gICAgcmV0dXJuIFNpZGVDYXI7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuIiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm9kZSwgYm9vbCwgc3RyaW5nLCBhbnksIGFycmF5T2YsIG9uZU9mVHlwZSwgb2JqZWN0LCBmdW5jIH0gZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnZm9jdXMtbG9jay9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBoaWRkZW5HdWFyZCB9IGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IGZvY3VzU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbnZhciBlbXB0eUFycmF5ID0gW107XG52YXIgRm9jdXNMb2NrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9jdXNMb2NrVUkocHJvcHMsIHBhcmVudFJlZikge1xuICB2YXIgX2V4dGVuZHMyO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoKSxcbiAgICByZWFsT2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMF0sXG4gICAgc2V0T2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG4gIHZhciBvYnNlcnZlZCA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgdXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgX3Byb3BzJGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcHJvcHMkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGRpc2FibGVkLFxuICAgIF9wcm9wcyRub0ZvY3VzR3VhcmRzID0gcHJvcHMubm9Gb2N1c0d1YXJkcyxcbiAgICBub0ZvY3VzR3VhcmRzID0gX3Byb3BzJG5vRm9jdXNHdWFyZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJG5vRm9jdXNHdWFyZHMsXG4gICAgX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID0gcHJvcHMucGVyc2lzdGVudEZvY3VzLFxuICAgIHBlcnNpc3RlbnRGb2N1cyA9IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcGVyc2lzdGVudEZvY3UsXG4gICAgX3Byb3BzJGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLFxuICAgIGNyb3NzRnJhbWUgPSBfcHJvcHMkY3Jvc3NGcmFtZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjcm9zc0ZyYW1lLFxuICAgIF9wcm9wcyRhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsXG4gICAgYXV0b0ZvY3VzID0gX3Byb3BzJGF1dG9Gb2N1cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRhdXRvRm9jdXMsXG4gICAgYWxsb3dUZXh0U2VsZWN0aW9uID0gcHJvcHMuYWxsb3dUZXh0U2VsZWN0aW9uLFxuICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHdoaXRlTGlzdCA9IHByb3BzLndoaXRlTGlzdCxcbiAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgX3Byb3BzJHNoYXJkcyA9IHByb3BzLnNoYXJkcyxcbiAgICBzaGFyZHMgPSBfcHJvcHMkc2hhcmRzID09PSB2b2lkIDAgPyBlbXB0eUFycmF5IDogX3Byb3BzJHNoYXJkcyxcbiAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICBDb250YWluZXIgPSBfcHJvcHMkYXMgPT09IHZvaWQgMCA/ICdkaXYnIDogX3Byb3BzJGFzLFxuICAgIF9wcm9wcyRsb2NrUHJvcHMgPSBwcm9wcy5sb2NrUHJvcHMsXG4gICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgU2lkZUNhciA9IHByb3BzLnNpZGVDYXIsXG4gICAgX3Byb3BzJHJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgc2hvdWxkUmV0dXJuRm9jdXMgPSBfcHJvcHMkcmV0dXJuRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9ucyA9IHByb3BzLmZvY3VzT3B0aW9ucyxcbiAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25EZWFjdGl2YXRpb247XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlM1swXTtcbiAgdmFyIG9uQWN0aXZhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBfcmVmLmNhcHR1cmVGb2N1c1Jlc3RvcmU7XG4gICAgaWYgKCFvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIHZhciBfZG9jdW1lbnQ7XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUoYWN0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICYmIG9uQWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IHRydWU7XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgb25EZWFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgZm9jdXNSZXN0b3JlID0gb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50O1xuICAgIGlmIChmb2N1c1Jlc3RvcmUpIHtcbiAgICAgIHZhciByZXR1cm5Gb2N1c1RvID0gKHR5cGVvZiBmb2N1c1Jlc3RvcmUgPT09ICdmdW5jdGlvbicgPyBmb2N1c1Jlc3RvcmUoKSA6IGZvY3VzUmVzdG9yZSkgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcbiAgICAgIGlmIChob3dUb1JldHVybkZvY3VzKSB7XG4gICAgICAgIHZhciByZXR1cm5Gb2N1c09wdGlvbnMgPSB0eXBlb2YgaG93VG9SZXR1cm5Gb2N1cyA9PT0gJ29iamVjdCcgPyBob3dUb1JldHVybkZvY3VzIDogdW5kZWZpbmVkO1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dEZWZlcikge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG91bGRSZXR1cm5Gb2N1c10pO1xuICB2YXIgb25Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07XG4gIHZhciBzZXRPYnNlcnZlTm9kZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdPYnNlcnZlZCkge1xuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICE9PSBuZXdPYnNlcnZlZCkge1xuICAgICAgb2JzZXJ2ZWQuY3VycmVudCA9IG5ld09ic2VydmVkO1xuICAgICAgc2V0T2JzZXJ2ZWQobmV3T2JzZXJ2ZWQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdSZWFjdC1Gb2N1cy1Mb2NrOiBhbGxvd1RleHRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQgJiYgdHlwZW9mIENvbnRhaW5lciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG4gIHZhciBsb2NrUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfRElTQUJMRURdID0gZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgX2V4dGVuZHMyW2NvbnN0YW50cy5GT0NVU19HUk9VUF0gPSBncm91cCwgX2V4dGVuZHMyKSwgY29udGFpbmVyUHJvcHMpO1xuICB2YXIgaGFzTGVhZGluZ0d1YXJkcyA9IG5vRm9jdXNHdWFyZHMgIT09IHRydWU7XG4gIHZhciBoYXNUYWlsaW5nR3VhcmRzID0gaGFzTGVhZGluZ0d1YXJkcyAmJiBub0ZvY3VzR3VhcmRzICE9PSAndGFpbCc7XG4gIHZhciBtZXJnZWRSZWYgPSB1c2VNZXJnZVJlZnMoW3BhcmVudFJlZiwgc2V0T2JzZXJ2ZU5vZGVdKTtcbiAgdmFyIGZvY3VzU2NvcGVWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvYnNlcnZlZDogb2JzZXJ2ZWQsXG4gICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgIGVuYWJsZWQ6ICFkaXNhYmxlZCxcbiAgICAgIGFjdGl2ZTogaXNBY3RpdmUuY3VycmVudFxuICAgIH07XG4gIH0sIFtkaXNhYmxlZCwgaXNBY3RpdmUuY3VycmVudCwgc2hhcmRzLCByZWFsT2JzZXJ2ZWRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBoYXNMZWFkaW5nR3VhcmRzICYmIFtcbiAgLyojX19QVVJFX18qL1xuICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBoYXNQb3NpdGl2ZUluZGljZXMgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLW5lYXJlc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDEsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pIDogbnVsbF0sICFkaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7XG4gICAgaWQ6IGlkLFxuICAgIHNpZGVDYXI6IG1lZGl1bVNpZGVjYXIsXG4gICAgb2JzZXJ2ZWQ6IHJlYWxPYnNlcnZlZCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcGVyc2lzdGVudEZvY3VzOiBwZXJzaXN0ZW50Rm9jdXMsXG4gICAgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICB3aGl0ZUxpc3Q6IHdoaXRlTGlzdCxcbiAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sXG4gICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9uczogZm9jdXNPcHRpb25zLFxuICAgIG5vRm9jdXNHdWFyZHM6IG5vRm9jdXNHdWFyZHNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgX2V4dGVuZHMoe1xuICAgIHJlZjogbWVyZ2VkUmVmXG4gIH0sIGxvY2tQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGZvY3VzU2NvcGUuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZm9jdXNTY29wZVZhbHVlXG4gIH0sIGNoaWxkcmVuKSksIGhhc1RhaWxpbmdHdWFyZHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMCxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufSk7XG5Gb2N1c0xvY2sucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogbm9kZSxcbiAgZGlzYWJsZWQ6IGJvb2wsXG4gIHJldHVybkZvY3VzOiBvbmVPZlR5cGUoW2Jvb2wsIG9iamVjdCwgZnVuY10pLFxuICBmb2N1c09wdGlvbnM6IG9iamVjdCxcbiAgbm9Gb2N1c0d1YXJkczogYm9vbCxcbiAgaGFzUG9zaXRpdmVJbmRpY2VzOiBib29sLFxuICBhbGxvd1RleHRTZWxlY3Rpb246IGJvb2wsXG4gIGF1dG9Gb2N1czogYm9vbCxcbiAgcGVyc2lzdGVudEZvY3VzOiBib29sLFxuICBjcm9zc0ZyYW1lOiBib29sLFxuICBncm91cDogc3RyaW5nLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgd2hpdGVMaXN0OiBmdW5jLFxuICBzaGFyZHM6IGFycmF5T2YoYW55KSxcbiAgYXM6IG9uZU9mVHlwZShbc3RyaW5nLCBmdW5jLCBvYmplY3RdKSxcbiAgbG9ja1Byb3BzOiBvYmplY3QsXG4gIG9uQWN0aXZhdGlvbjogZnVuYyxcbiAgb25EZWFjdGl2YXRpb246IGZ1bmMsXG4gIHNpZGVDYXI6IGFueS5pc1JlcXVpcmVkXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBGb2N1c0xvY2s7IiwgIi8qKlxuICogZGVmaW5lcyBhIGZvY3VzIGdyb3VwXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfR1JPVVAgPSAnZGF0YS1mb2N1cy1sb2NrJztcbi8qKlxuICogZGlzYWJsZXMgZWxlbWVudCBkaXNjb3ZlcnkgaW5zaWRlIGEgZ3JvdXAgbWFya2VkIGJ5IGtleVxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0RJU0FCTEVEID0gJ2RhdGEtZm9jdXMtbG9jay1kaXNhYmxlZCc7XG4vKipcbiAqIGFsbG93cyB1bmNvbnRyb2xsZWQgZm9jdXMgd2l0aGluIHRoZSBtYXJrZWQgYXJlYSwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIGZvY3VzIGxvY2sgZm9yIGl0J3MgY29udGVudFxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FMTE9XID0gJ2RhdGEtbm8tZm9jdXMtbG9jayc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgZW5naW5lIHRvIHBpY2sgZGVmYXVsdCBhdXRvZm9jdXMgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19BVVRPID0gJ2RhdGEtYXV0b2ZvY3VzLWluc2lkZSc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgdG8gaWdub3JlIGVsZW1lbnRzIHdpdGhpbiBhIGdpdmVuIG5vZGVcbiAqIGNhbiBiZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfTk9fQVVUT0ZPQ1VTID0gJ2RhdGEtbm8tYXV0b2ZvY3VzJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuZXhwb3J0IHZhciBoaWRkZW5HdWFyZCA9IHtcbiAgd2lkdGg6ICcxcHgnLFxuICBoZWlnaHQ6ICcwcHgnLFxuICBwYWRkaW5nOiAwLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6ICcxcHgnLFxuICBsZWZ0OiAnMXB4J1xufTtcbnZhciBJbkZvY3VzR3VhcmQgPSBmdW5jdGlvbiBJbkZvY3VzR3VhcmQoX3JlZikge1xuICB2YXIgX3JlZiRjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmJGNoaWxkcmVuID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRjaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSksIGNoaWxkcmVuLCBjaGlsZHJlbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWxhc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59O1xuSW5Gb2N1c0d1YXJkLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBJbkZvY3VzR3VhcmQ7IiwgImltcG9ydCB7IGNyZWF0ZU1lZGl1bSwgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgbWVkaXVtRm9jdXMgPSBjcmVhdGVNZWRpdW0oe30sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBjdXJyZW50VGFyZ2V0ID0gX3JlZi5jdXJyZW50VGFyZ2V0O1xuICByZXR1cm4ge1xuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn0pO1xuZXhwb3J0IHZhciBtZWRpdW1CbHVyID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bUVmZmVjdCA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1TaWRlY2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSh7XG4gIGFzeW5jOiB0cnVlLFxuICBzc3I6IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbn0pOyIsICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBmb2N1c1Njb3BlID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGRlZmVyQWN0aW9uKGFjdGlvbikge1xuICBzZXRUaW1lb3V0KGFjdGlvbiwgMSk7XG59XG5leHBvcnQgdmFyIGlubGluZVByb3AgPSBmdW5jdGlvbiBpbmxpbmVQcm9wKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqW25hbWVdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59O1xuZXhwb3J0IHZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gZXh0cmFjdFJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59OyIsICJpbXBvcnQgRm9jdXNMb2NrVUkgZnJvbSAnLi9Mb2NrJztcbmltcG9ydCBBdXRvRm9jdXNJbnNpZGUgZnJvbSAnLi9BdXRvRm9jdXNJbnNpZGUnO1xuaW1wb3J0IE1vdmVGb2N1c0luc2lkZSwgeyB1c2VGb2N1c0luc2lkZSB9IGZyb20gJy4vTW92ZUZvY3VzSW5zaWRlJztcbmltcG9ydCBGcmVlRm9jdXNJbnNpZGUgZnJvbSAnLi9GcmVlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEluRm9jdXNHdWFyZCBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgdXNlRm9jdXNDb250cm9sbGVyLCB1c2VGb2N1c1Njb3BlIH0gZnJvbSAnLi91c2UtZm9jdXMtc2NvcGUnO1xuaW1wb3J0IHsgdXNlRm9jdXNTdGF0ZSB9IGZyb20gJy4vdXNlLWZvY3VzLXN0YXRlJztcbmV4cG9ydCB7IEF1dG9Gb2N1c0luc2lkZSwgTW92ZUZvY3VzSW5zaWRlLCBGcmVlRm9jdXNJbnNpZGUsIEluRm9jdXNHdWFyZCwgRm9jdXNMb2NrVUksIHVzZUZvY3VzSW5zaWRlLCB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUsIHVzZUZvY3VzU3RhdGUgfTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9ja1VJOyIsICJpbXBvcnQgeyBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBlZmZlY3RDYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKCk7XG5leHBvcnQgdmFyIGZvY3VzSGlkZGVuTWFya2VyID0gJ2RhdGEtZm9jdXMtb24taGlkZGVuJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdpdGhTaWRlRWZmZWN0IGZyb20gJ3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0JztcbmltcG9ydCB7IG1vdmVGb2N1c0luc2lkZSwgZm9jdXNJbnNpZGUsIGZvY3VzSXNIaWRkZW4sIGV4cGFuZEZvY3VzYWJsZU5vZGVzLCBnZXRGb2N1c2FibGVOb2RlcywgZm9jdXNOZXh0RWxlbWVudCwgZm9jdXNQcmV2RWxlbWVudCwgZm9jdXNGaXJzdEVsZW1lbnQsIGZvY3VzTGFzdEVsZW1lbnQsIGNhcHR1cmVGb2N1c1Jlc3RvcmUgfSBmcm9tICdmb2N1cy1sb2NrJztcbmltcG9ydCB7IGRlZmVyQWN0aW9uLCBleHRyYWN0UmVmIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IG1lZGl1bUZvY3VzLCBtZWRpdW1CbHVyLCBtZWRpdW1FZmZlY3QgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgZm9jdXNPbkJvZHkgPSBmdW5jdGlvbiBmb2N1c09uQm9keSgpIHtcbiAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHk7XG59O1xudmFyIGlzRnJlZUZvY3VzID0gZnVuY3Rpb24gaXNGcmVlRm9jdXMoKSB7XG4gIHJldHVybiBmb2N1c09uQm9keSgpIHx8IGZvY3VzSXNIaWRkZW4oKTtcbn07XG52YXIgbGFzdEFjdGl2ZVRyYXAgPSBudWxsO1xudmFyIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG52YXIgdHJ5UmVzdG9yZUZvY3VzID0gZnVuY3Rpb24gdHJ5UmVzdG9yZUZvY3VzKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgbGFzdFBvcnRhbGVkRWxlbWVudCA9IG51bGw7XG52YXIgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG52YXIgd2luZG93Rm9jdXNlZCA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgZ2V0Tm9kZUZvY3VzYWJsZXMgPSBmdW5jdGlvbiBnZXROb2RlRm9jdXNhYmxlcyhub2Rlcykge1xuICByZXR1cm4gZ2V0Rm9jdXNhYmxlTm9kZXMobm9kZXMsIG5ldyBNYXAoKSk7XG59O1xudmFyIGlzTm90Rm9jdXNhYmxlID0gZnVuY3Rpb24gaXNOb3RGb2N1c2FibGUobm9kZSkge1xuICByZXR1cm4gIWdldE5vZGVGb2N1c2FibGVzKFtub2RlLnBhcmVudE5vZGVdKS5zb21lKGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5ub2RlID09PSBub2RlO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucyxcbiAgICAgIG5vRm9jdXNHdWFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAubm9Gb2N1c0d1YXJkcztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIGlmIChmb2N1c09uQm9keSgpICYmIGxhc3RBY3RpdmVGb2N1cykge1xuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGxhc3RBY3RpdmVGb2N1cykgfHwgaXNOb3RGb2N1c2FibGUobGFzdEFjdGl2ZUZvY3VzKSkge1xuICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gdHJ5UmVzdG9yZUZvY3VzKCk7XG4gICAgICAgIGlmIChuZXdUYXJnZXQpIHtcbiAgICAgICAgICBuZXdUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cygpIHtcbiAgICAgICAgaWYgKCFmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZSkgfHwgIW5vRm9jdXNHdWFyZHMgfHwgIWxhc3RBY3RpdmVGb2N1cyB8fCB3aW5kb3dGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlcyA9IGdldE5vZGVGb2N1c2FibGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IG5vZGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlID09PSBsYXN0QWN0aXZlRm9jdXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGFzdEluZGV4ID09PSAwIHx8IGxhc3RJbmRleCA9PT0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBpZiAocGVyc2lzdGVudEZvY3VzIHx8IHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkgfHwgIWlzRnJlZUZvY3VzKCkgfHwgIWxhc3RBY3RpdmVGb2N1cyAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICBpZiAod29ya2luZ05vZGUgJiYgIShmb2N1c0luc2lkZSh3b3JraW5nQXJlYSkgfHwgYWN0aXZlRWxlbWVudCAmJiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB8fCBmb2N1c0lzUG9ydGFsZWRQYWlyKGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdOb2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiAhbGFzdEFjdGl2ZUZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgJiYgIWF1dG9Gb2N1cykge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW92ZUZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhLCBsYXN0QWN0aXZlRm9jdXMsIHtcbiAgICAgICAgICAgICAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIHRyeVJlc3RvcmVGb2N1cyA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUobGFzdEFjdGl2ZUZvY3VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0pLmluZGV4T2YobmV3QWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgICAgIGFsbE5vZGVzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgIHZhciBndWFyZCA9IF9yZWYzLmd1YXJkLFxuICAgICAgICAgICAgICBub2RlID0gX3JlZjMubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBndWFyZCAmJiBub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQ7XG4gICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gX3JlZjQubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndGFiSW5kZXgnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhdXRvR3VhcmQoZm9jdXNlZEluZGV4LCBhbGxOb2Rlcy5sZW5ndGgsICsxLCBhbGxOb2Rlcyk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgLTEsIC0xLCBhbGxOb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgb25UcmFwID0gZnVuY3Rpb24gb25UcmFwKGV2ZW50KSB7XG4gIGlmIChhY3RpdmF0ZVRyYXAoKSAmJiBldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gZnVuY3Rpb24gb25CbHVyKCkge1xuICByZXR1cm4gZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbn07XG52YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgdmFyIHNvdXJjZSA9IGV2ZW50LnRhcmdldDtcbiAgdmFyIGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgaWYgKCFjdXJyZW50Tm9kZS5jb250YWlucyhzb3VyY2UpKSB7XG4gICAgcmVjb3JkUG9ydGFsKGN1cnJlbnROb2RlLCBzb3VyY2UpO1xuICB9XG59O1xudmFyIEZvY3VzV2F0Y2hlciA9IGZ1bmN0aW9uIEZvY3VzV2F0Y2hlcigpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xudmFyIEZvY3VzVHJhcCA9IGZ1bmN0aW9uIEZvY3VzVHJhcChfcmVmNSkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5Gb2N1c1RyYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufSA6IHt9O1xudmFyIG9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBvbldpbmRvd0ZvY3VzKCkge1xuICB3aW5kb3dGb2N1c2VkID0gdHJ1ZTtcbn07XG52YXIgb25XaW5kb3dCbHVyID0gZnVuY3Rpb24gb25XaW5kb3dCbHVyKCkge1xuICB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uV2luZG93Qmx1cik7XG59O1xudmFyIGRldGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBkZXRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcbmZ1bmN0aW9uIHJlZHVjZVByb3BzVG9TdGF0ZShwcm9wc0xpc3QpIHtcbiAgcmV0dXJuIHByb3BzTGlzdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgdmFyIGRpc2FibGVkID0gX3JlZjYuZGlzYWJsZWQ7XG4gICAgcmV0dXJuICFkaXNhYmxlZDtcbiAgfSk7XG59XG52YXIgZm9jdXNMb2NrQVBJID0ge1xuICBtb3ZlRm9jdXNJbnNpZGU6IG1vdmVGb2N1c0luc2lkZSxcbiAgZm9jdXNJbnNpZGU6IGZvY3VzSW5zaWRlLFxuICBmb2N1c05leHRFbGVtZW50OiBmb2N1c05leHRFbGVtZW50LFxuICBmb2N1c1ByZXZFbGVtZW50OiBmb2N1c1ByZXZFbGVtZW50LFxuICBmb2N1c0ZpcnN0RWxlbWVudDogZm9jdXNGaXJzdEVsZW1lbnQsXG4gIGZvY3VzTGFzdEVsZW1lbnQ6IGZvY3VzTGFzdEVsZW1lbnQsXG4gIGNhcHR1cmVGb2N1c1Jlc3RvcmU6IGNhcHR1cmVGb2N1c1Jlc3RvcmVcbn07XG5mdW5jdGlvbiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHRyYXBzKSB7XG4gIHZhciB0cmFwID0gdHJhcHMuc2xpY2UoLTEpWzBdO1xuICBpZiAodHJhcCAmJiAhbGFzdEFjdGl2ZVRyYXApIHtcbiAgICBhdHRhY2hIYW5kbGVyKCk7XG4gIH1cbiAgdmFyIGxhc3RUcmFwID0gbGFzdEFjdGl2ZVRyYXA7XG4gIHZhciBzYW1lVHJhcCA9IGxhc3RUcmFwICYmIHRyYXAgJiYgdHJhcC5pZCA9PT0gbGFzdFRyYXAuaWQ7XG4gIGxhc3RBY3RpdmVUcmFwID0gdHJhcDtcbiAgaWYgKGxhc3RUcmFwICYmICFzYW1lVHJhcCkge1xuICAgIGxhc3RUcmFwLm9uRGVhY3RpdmF0aW9uKCk7XG4gICAgaWYgKCF0cmFwcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmNy5pZDtcbiAgICAgIHJldHVybiBpZCA9PT0gbGFzdFRyYXAuaWQ7XG4gICAgfSkubGVuZ3RoKSB7XG4gICAgICBsYXN0VHJhcC5yZXR1cm5Gb2N1cyghdHJhcCk7XG4gICAgfVxuICB9XG4gIGlmICh0cmFwKSB7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgICBpZiAoIXNhbWVUcmFwIHx8IGxhc3RUcmFwLm9ic2VydmVkICE9PSB0cmFwLm9ic2VydmVkKSB7XG4gICAgICB0cmFwLm9uQWN0aXZhdGlvbihmb2N1c0xvY2tBUEkpO1xuICAgIH1cbiAgICBhY3RpdmF0ZVRyYXAodHJ1ZSk7XG4gICAgZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRhY2hIYW5kbGVyKCk7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgfVxufVxubWVkaXVtRm9jdXMuYXNzaWduU3luY01lZGl1bShvbkZvY3VzKTtcbm1lZGl1bUJsdXIuYXNzaWduTWVkaXVtKG9uQmx1cik7XG5tZWRpdW1FZmZlY3QuYXNzaWduTWVkaXVtKGZ1bmN0aW9uIChjYikge1xuICByZXR1cm4gY2IoZm9jdXNMb2NrQVBJKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgd2l0aFNpZGVFZmZlY3QocmVkdWNlUHJvcHNUb1N0YXRlLCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KShGb2N1c1dhdGNoZXIpOyIsICJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VQcm9wc1RvU3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVkdWNlUHJvcHNUb1N0YXRlIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vdW50ZWRJbnN0YW5jZXMgPSBbXTtcbiAgICB2YXIgc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgc3RhdGUgPSByZWR1Y2VQcm9wc1RvU3RhdGUobW91bnRlZEluc3RhbmNlcy5tYXAoZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0pKTtcbiAgICAgIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQoc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBTaWRlRWZmZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoU2lkZUVmZmVjdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaWRlRWZmZWN0KCkge1xuICAgICAgICByZXR1cm4gX1B1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gdXNlIGRpc3BsYXlOYW1lIG9mIHdyYXBwZWQgY29tcG9uZW50XG4gICAgICBTaWRlRWZmZWN0LnBlZWsgPSBmdW5jdGlvbiBwZWVrKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3Byb3RvID0gU2lkZUVmZmVjdC5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB2YXIgaW5kZXggPSBtb3VudGVkSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gICAgfShQdXJlQ29tcG9uZW50KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShTaWRlRWZmZWN0LCBcImRpc3BsYXlOYW1lXCIsIFwiU2lkZUVmZmVjdChcIiArIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpICsgXCIpXCIpO1xuXG4gICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0O1xuIiwgIi8qXG5JRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IHZhciB0b0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgcmV0ID0gQXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXRbaV0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbmV4cG9ydCB2YXIgYXNBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBbYV0pOyB9O1xuZXhwb3J0IHZhciBnZXRGaXJzdCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGFbMF0gOiBhKTsgfTtcbiIsICJpbXBvcnQgeyBGT0NVU19OT19BVVRPRk9DVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIGlzRWxlbWVudEhpZGRlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gd2UgY2FuIG1lYXN1cmUgb25seSBcImVsZW1lbnRzXCJcbiAgICAvLyBjb25zaWRlciBvdGhlcnMgYXMgXCJ2aXNpYmxlXCJcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgY2FuIGFsc28gcG9pbnQgb24gU2hhZG93Um9vdC4gSW4gdGhpcyBjYXNlIC5ob3N0IHdpbGwgcG9pbnQgb24gdGhlIG5leHQgbm9kZVxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgOiBub2RlLnBhcmVudE5vZGU7XG59O1xudmFyIGlzVG9wTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlID09PSBkb2N1bWVudCB8fCAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpO1xufTtcbnZhciBpc0luZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKCdpbmVydCcpOyB9O1xuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vYmxvYi9tYWluL3NyYy90by1iZS12aXNpYmxlLmpzXG4gKi9cbnZhciBpc1Zpc2libGVVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiAhbm9kZSB8fCBpc1RvcE5vZGUobm9kZSkgfHwgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiYgIWlzSW5lcnQobm9kZSkgJiYgY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAhaXNUb3BOb2RlKG5vZGUpID8gKGlzQXV0b0ZvY3VzQWxsb3dlZChub2RlKSA/IGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpIDogZmFsc2UpIDogdHJ1ZTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCA9IGZ1bmN0aW9uIChjYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZChub2RlLCBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQuYmluZCh1bmRlZmluZWQsIGNhY2hlKSk7XG4gICAgY2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0O1xufTtcbmV4cG9ydCB2YXIgaXNIVE1MQnV0dG9uRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdCVVRUT04nOyB9O1xuZXhwb3J0IHZhciBpc0hUTUxJbnB1dEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnOyB9O1xuZXhwb3J0IHZhciBpc1JhZGlvRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuZXhwb3J0IHZhciBub3RIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEoKGlzSFRNTElucHV0RWxlbWVudChub2RlKSB8fCBpc0hUTUxCdXR0b25FbGVtZW50KG5vZGUpKSAmJiAobm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBub2RlLmRpc2FibGVkKSk7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBhdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZShGT0NVU19OT19BVVRPRk9DVVMpO1xuICAgIHJldHVybiAhW3RydWUsICd0cnVlJywgJyddLmluY2x1ZGVzKGF0dHJpYnV0ZSk7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVRhYiA9IE1hdGgubWF4KDAsIGEudGFiSW5kZXgpO1xuICAgIHZhciBiVGFiID0gTWF0aC5tYXgoMCwgYi50YWJJbmRleCk7XG4gICAgdmFyIHRhYkRpZmYgPSBhVGFiIC0gYlRhYjtcbiAgICB2YXIgaW5kZXhEaWZmID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgaWYgKHRhYkRpZmYpIHtcbiAgICAgICAgaWYgKCFhVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiRGlmZiB8fCBpbmRleERpZmY7XG59O1xudmFyIGdldFRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gYWxsIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMgYXJlIGFscmVhZHkgcHJlc2VsZWN0ZWRcbiAgICAgICAgLy8gYnV0IHNvbWUgbWlnaHQgaGF2ZSBpbXBsaWNpdCBuZWdhdGl2ZSB0YWJJbmRleFxuICAgICAgICAvLyByZXR1cm4gMCBmb3IgPGF1ZGlvIHdpdGhvdXQgdGFiSW5kZXggYXR0cmlidXRlIC0gaXQgaXMgXCJ0YWJiYWJsZVwiXG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcbmV4cG9ydCB2YXIgb3JkZXJCeVRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGVzLCBmaWx0ZXJOZWdhdGl2ZSwga2VlcEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0YWJJbmRleDoga2VlcEd1YXJkcyAmJiB0YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiB0YWJJbmRleCxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCAiLyoqXG4gKiBsaXN0IG9mIHRoZSBvYmplY3QgdG8gYmUgY29uc2lkZXJlZCBhcyBmb2N1c2FibGVcbiAqL1xuZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgLy8gZWxlbWVudHMgd2l0aCBleHBsaWNpdCByb2xlcyB3aWxsIGFsc28gdXNlIGV4cGxpY2l0IHRhYmluZGV4XG4gICAgLy8gJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgICAnYVtocmVmXScsXG4gICAgJ2FyZWFbaHJlZl0nLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICdbYXV0b2ZvY3VzXScsXG5dO1xuIiwgImltcG9ydCB7IEZPQ1VTX0FVVE8gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgdGFiYmFibGVzIH0gZnJvbSAnLi90YWJiYWJsZXMnO1xudmFyIHF1ZXJ5VGFiYmFibGVzID0gdGFiYmFibGVzLmpvaW4oJywnKTtcbnZhciBxdWVyeUd1YXJkVGFiYmFibGVzID0gXCJcIi5jb25jYXQocXVlcnlUYWJiYWJsZXMsIFwiLCBbZGF0YS1mb2N1cy1ndWFyZF1cIik7XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20gPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkoKHBhcmVudC5zaGFkb3dSb290IHx8IHBhcmVudCkuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjaGlsZC5tYXRjaGVzKHdpdGhHdWFyZHMgPyBxdWVyeUd1YXJkVGFiYmFibGVzIDogcXVlcnlUYWJiYWJsZXMpID8gW2NoaWxkXSA6IFtdLCBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShjaGlsZCkpO1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUgPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIGNvbnRlbnREb2N1bWVudCBvZiBpZnJhbWUgd2lsbCBiZSBudWxsIGlmIGN1cnJlbnQgb3JpZ2luIGNhbm5vdCBhY2Nlc3MgaXRcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgKChfYSA9IHBhcmVudC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5KSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5XSwgd2l0aEd1YXJkcyk7XG4gICAgfVxuICAgIHJldHVybiBbcGFyZW50XTtcbn07XG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50cywgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbSA9IGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKHBhcmVudCwgd2l0aEd1YXJkcyk7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoSWZyYW1lcyA9IChfYSA9IFtdKS5jb25jYXQuYXBwbHkoX2EsIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20ubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzV2l0aElGcmFtZShub2RlLCB3aXRoR3VhcmRzKTsgfSkpO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgICAgLy8gYWRkIGFsbCB0YWJiYWJsZXMgaW5zaWRlIGFuZCB3aXRoaW4gc2hhZG93IERPTXMgaW4gRE9NIG9yZGVyXG4gICAgICAgIGZvY3VzYWJsZVdpdGhJZnJhbWVzLCBcbiAgICAgICAgLy8gYWRkIGlmIG5vZGUgaXMgdGFiYmFibGUgaXRzZWxmXG4gICAgICAgIHBhcmVudC5wYXJlbnROb2RlXG4gICAgICAgICAgICA/IHRvQXJyYXkocGFyZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeVRhYmJhYmxlcykpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZSA9PT0gcGFyZW50OyB9KVxuICAgICAgICAgICAgOiBbXSk7XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogcmV0dXJuIGEgbGlzdCBvZiBmb2N1c2FibGUgbm9kZXMgd2l0aGluIGFuIGFyZWEgbWFya2VkIGFzIFwiYXV0by1mb2N1c2FibGVcIlxuICogQHBhcmFtIHBhcmVudFxuICovXG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCwgaXNWaXNpYmxlQ2FjaGVkLCBub3RIaWRkZW5JbnB1dCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzLCBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vdGFiVXRpbHMnO1xuLyoqXG4gKiBnaXZlbiBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBrZWVwcyB0aGUgb25lcyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBmaWx0ZXJGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc1Zpc2libGVDYWNoZWQodmlzaWJpbGl0eUNhY2hlLCBub2RlKTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm90SGlkZGVuSW5wdXQobm9kZSk7IH0pO1xufTtcbmV4cG9ydCB2YXIgZmlsdGVyQXV0b0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgY2FjaGUpIHtcbiAgICBpZiAoY2FjaGUgPT09IHZvaWQgMCkgeyBjYWNoZSA9IG5ldyBNYXAoKTsgfVxuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZChjYWNoZSwgbm9kZSk7IH0pO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICogQHJldHVybnMgYWxsIHRhYmJhYmxlIG5vZGVzXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHRvIGdldCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0VGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2Rlcywgd2l0aEd1YXJkcyksIHZpc2liaWxpdHlDYWNoZSksIHRydWUsIHdpdGhHdWFyZHMpO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICpcbiAqIEByZXR1cm5zIGFueXRoaW5nIFwiZm9jdXNhYmxlXCIsIG5vdCBvbmx5IHRhYmJhYmxlLiBUaGUgZGlmZmVyZW5jZSBpcyBpbiBgdGFiSW5kZXg9LTFgXG4gKiAod2l0aG91dCBndWFyZHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGV2ZXIgZm9jdXNlZClcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRUYWJiYWJsZU5vZGVzfSB0byBnZXQgb25seSB0YWJibGUgbm9kZXMgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2RlcyksIHZpc2liaWxpdHlDYWNoZSksIGZhbHNlKTtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvLWZvY3VzZWRcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgcGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAodG9wTm9kZSwgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGZpbHRlckZvY3VzYWJsZShnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyh0b3BOb2RlKSwgdmlzaWJpbGl0eUNhY2hlKTtcbn07XG4vKlxuICogRGV0ZXJtaW5lcyBpZiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBzY29wZSwgaW5jbHVkaW5nIG5lc3RlZCBzaGFkb3cgRE9Nc1xuICovXG5leHBvcnQgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgaWYgKHNjb3BlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHNjb3BlLnNoYWRvd1Jvb3QsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucy5jYWxsKHNjb3BlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoc2NvcGUuY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gKF9hID0gY2hpbGQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keTtcbiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lQm9keSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoaWZyYW1lQm9keSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWlucyhjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5Jztcbi8qKlxuICogaW4gY2FzZSBvZiBtdWx0aXBsZSBub2RlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXJcbiAqIGtlZXBzIG9ubHkgdG9wIG9uZXNcbiAqIHRoaXMgaXMgTyhubG9nbilcbiAqIEBwYXJhbSBub2Rlc1xuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xuLyoqXG4gKiBmaW5kcyB0b3AgbW9zdCBwYXJlbnQgZm9yIGEgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZ2V0VG9wUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlID8gZ2V0VG9wUGFyZW50KG5vZGUucGFyZW50Tm9kZSkgOiBub2RlO1xufTtcbi8qKlxuICogcmV0dXJucyBhbGwgXCJmb2N1cyBjb250YWluZXJzXCIgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogQHBhcmFtIG5vZGUgLSBub2RlIG9yIG5vZGVzIHRvIGxvb2sgaW5zaWRlXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuZXhwb3J0IHZhciBnZXRBbGxBZmZlY3RlZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgbm9kZXMgPSBhc0FycmF5KG5vZGUpO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnROb2RlKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShGT0NVU19HUk9VUCk7XG4gICAgICAgIGFjYy5wdXNoLmFwcGx5KGFjYywgKGdyb3VwXG4gICAgICAgICAgICA/IGZpbHRlck5lc3RlZCh0b0FycmF5KGdldFRvcFBhcmVudChjdXJyZW50Tm9kZSkucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfR1JPVVAsIFwiPVxcXCJcIikuY29uY2F0KGdyb3VwLCBcIlxcXCJdOm5vdChbXCIpLmNvbmNhdChGT0NVU19ESVNBQkxFRCwgXCI9XFxcImRpc2FibGVkXFxcIl0pXCIpKSkpXG4gICAgICAgICAgICA6IFtjdXJyZW50Tm9kZV0pKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwgImV4cG9ydCB2YXIgc2FmZVByb2JlID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbiIsICIvKipcbiAqIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgZnJvbSBkb2N1bWVudCBvciBmcm9tIG5lc3RlZCBzaGFkb3dkb21zXG4gKi9cbmltcG9ydCB7IHNhZmVQcm9iZSB9IGZyb20gJy4vc2FmZSc7XG4vKipcbiAqIHJldHVybnMgY3VycmVudCBhY3RpdmUgZWxlbWVudC4gSWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIGEgXCJjb250YWluZXJcIiBpdHNlbGYoc2hhZG93Um9vdCBvciBpZnJhbWUpIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0XG4gKiBAcGFyYW0gW2luRG9jdW1lbnRdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICBpZiAoIWluRG9jdW1lbnQgfHwgIWluRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGluRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdFxuICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KVxuICAgICAgICA6IGFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiBzYWZlUHJvYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OyB9KVxuICAgICAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudClcbiAgICAgICAgICAgIDogYWN0aXZlRWxlbWVudCk7XG59O1xuIiwgImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3QsIHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xudmFyIGZvY3VzSW5GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZSwgYWN0aXZlRWxlbWVudCkgeyByZXR1cm4gZnJhbWUgPT09IGFjdGl2ZUVsZW1lbnQ7IH07XG52YXIgZm9jdXNJbnNpZGVJZnJhbWUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybiBCb29sZWFuKHRvQXJyYXkodG9wTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZm9jdXNJbkZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KSk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZm9jdXMgaXMgaW5zaWRlIGdpdmVuIG5vZGUgb3Igbm9kZXMuXG4gKiBTdXBwb3J0cyBub2RlcyBoaWRkZW4gaW5zaWRlIHNoYWRvd0RvbVxuICovXG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHsgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7IH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KSB8fCBmb2N1c0luc2lkZUlmcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQUxMT1cgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG4vKipcbiAqIGNoZWNrcyBpZiBmb2N1cyBpcyBoaWRkZW4gRlJPTSB0aGUgZm9jdXMtbG9ja1xuICogaWUgY29udGFpbmVkIGluc2lkZSBhIG5vZGUgZm9jdXMtbG9jayBzaGFsbCBpZ25vcmVcbiAqXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBjb3VwbGVkIHdpdGgge0BsaW5rIEZPQ1VTX0FMTE9XfSBjb25zdGFudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBmb2N1cyBpcyBjdXJyZW50bHkgaXMgaW4gXCJhbGxvd1wiIGFyZWFcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0lzSGlkZGVuID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChpbkRvY3VtZW50KTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0aGlzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBGT0NVU19BTExPVyB3aXRoaW4gc2hhZG93IGRvbVxuICAgIHJldHVybiB0b0FycmF5KGluRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgaXNSYWRpb0VsZW1lbnQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kU2VsZWN0ZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgICAuZmlsdGVyKGlzUmFkaW9FbGVtZW50KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubmFtZSA9PT0gbm9kZS5uYW1lOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2hlY2tlZDsgfSlbMF0gfHwgbm9kZTtcbn07XG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgaWYgKGlzUmFkaW9FbGVtZW50KG5vZGUpICYmIG5vZGUubmFtZSkge1xuICAgICAgICByZXR1cm4gZmluZFNlbGVjdGVkUmFkaW8obm9kZSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIGdpdmluZyBhIHNldCBvZiByYWRpbyBpbnB1dHMga2VlcHMgb25seSBzZWxlY3RlZCAodGFiYmFibGUpIG9uZXNcbiAqIEBwYXJhbSBub2Rlc1xuICovXG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIC8vIElFMTEgaGFzIG5vIFNldChhcnJheSkgY29uc3RydWN0b3JcbiAgICB2YXIgcmVzdWx0U2V0ID0gbmV3IFNldCgpO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5hZGQoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTsgfSk7XG4gICAgLy8gdXNpbmcgZmlsdGVyIHRvIHN1cHBvcnQgSUUxMVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZSB9IGZyb20gJy4vY29ycmVjdEZvY3VzJztcbmV4cG9ydCB2YXIgcGlja0ZpcnN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gY29ycmVjdE5vZGUobm9kZXNbMF0sIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzWzBdO1xufTtcbmV4cG9ydCB2YXIgcGlja0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2Rlcywgbm9kZSkge1xuICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbi8qKlxuICogTWFpbiBzb2x2ZXIgZm9yIHRoZSBcImZpbmQgbmV4dCBmb2N1c1wiIHF1ZXN0aW9uXG4gKiBAcGFyYW0gaW5uZXJOb2RlcyAtIHVzZWQgdG8gY29udHJvbCBcInJldHVybiBmb2N1c1wiXG4gKiBAcGFyYW0gaW5uZXJUYWJiYWJsZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJhdXRvZm9jdXNcIlxuICogQHBhcmFtIG91dGVyTm9kZXNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZHwqfVxuICovXG5leHBvcnQgdmFyIG5ld0ZvY3VzID0gZnVuY3Rpb24gKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSkge1xuICAgIHZhciBjbnQgPSBpbm5lck5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZmlyc3RGb2N1cyA9IGlubmVyTm9kZXNbMF07XG4gICAgdmFyIGxhc3RGb2N1cyA9IGlubmVyTm9kZXNbY250IC0gMV07XG4gICAgdmFyIGlzT25HdWFyZCA9IGlzR3VhcmQoYWN0aXZlRWxlbWVudCk7XG4gICAgLy8gZm9jdXMgaXMgaW5zaWRlXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgaW5uZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGxhc3RJbmRleCA9IGxhc3ROb2RlID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4O1xuICAgIHZhciBsYXN0Tm9kZUluc2lkZSA9IGxhc3ROb2RlID8gaW5uZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IC0xO1xuICAgIC8vIG5vIGFjdGl2ZSBmb2N1cyAob3IgZm9jdXMgaXMgb24gdGhlIGJvZHkpXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBrbm93biBmYWxsYmFja1xuICAgICAgICBpZiAobGFzdE5vZGVJbnNpZGUgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgLy8gbmV3IGZvY3VzLCBub3RoaW5nIHRvIGNhbGN1bGF0ZVxuICAgIGlmIChsYXN0Tm9kZUluc2lkZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgdmFyIGluZGV4RGlmZiA9IGFjdGl2ZUluZGV4IC0gbGFzdEluZGV4O1xuICAgIHZhciBmaXJzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihmaXJzdEZvY3VzKTtcbiAgICB2YXIgbGFzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Rm9jdXMpO1xuICAgIHZhciBjb3JyZWN0ZWROb2RlcyA9IGNvcnJlY3ROb2RlcyhvdXRlck5vZGVzKTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4RGlmZiA9IGNvcnJlY3RlZEluZGV4IC0gKGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleCk7XG4gICAgLy8gb2xkIGZvY3VzXG4gICAgaWYgKCFpbmRleERpZmYgJiYgbGFzdE5vZGVJbnNpZGUgPj0gMCkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzLCBhdXRvZm9jdXMgaXMgbm90IHBvc3NpYmxlXG4gICAgaWYgKGlubmVyVGFiYmFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2Ugd2l0aCBubyB0YWJiYWJsZSBlbGVtZW50c1xuICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgZm9jdXNhYmxlIG9uZVxuICAgICAgICAvLyB3aXRoIHNvbWUgcHJvYmFiaWxpdHkgdGhpcyB3aWxsIHByZXZlbnQgZm9jdXMgZnJvbSBjeWNsaW5nIGFjcm9zcyB0aGUgbG9jaywgYnV0IHRoZXJlIGlzIG5vIHRhYmJhbGUgZWxlbWVudHMgdG8gY3ljbGUgdG9cbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1swXSk7XG4gICAgdmFyIHJldHVybkxhc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1tpbm5lclRhYmJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgLy8gZmlyc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBsYXN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPj0gbGFzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8ganVtcCBvdXQsIGJ1dCBub3Qgb24gdGhlIGd1YXJkXG4gICAgaWYgKGluZGV4RGlmZiAmJiBNYXRoLmFicyhjb3JyZWN0ZWRJbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGFib3ZlIGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBiZWxvdyBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gbGFzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBpbmRleCBpcyBpbnNpZGUgdGFiIG9yZGVyLCBidXQgb3V0c2lkZSBMb2NrXG4gICAgaWYgKGluZGV4RGlmZikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNudCArIGxhc3ROb2RlSW5zaWRlICsgaW5kZXhEaWZmKSAlIGNudDtcbiAgICB9XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGZpbHRlckF1dG9Gb2N1c2FibGUgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IHBpY2tGaXJzdEZvY3VzIH0gZnJvbSAnLi9maXJzdEZvY3VzJztcbmltcG9ydCB7IGdldERhdGFzZXQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kQXV0b0ZvY3VzZWQgPSBmdW5jdGlvbiAoYXV0b0ZvY3VzYWJsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXV0b2ZvY3VzID0gKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF1dG9mb2N1cztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBub2RlLmF1dG9mb2N1cyB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIChhdXRvZm9jdXMgIT09IHVuZGVmaW5lZCAmJiBhdXRvZm9jdXMgIT09ICdmYWxzZScpIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgYXV0b0ZvY3VzYWJsZXMuaW5kZXhPZihub2RlKSA+PSAwKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcGlja0F1dG9mb2N1cyA9IGZ1bmN0aW9uIChub2Rlc0luZGV4ZXMsIG9yZGVyZWROb2RlcywgZ3JvdXBzKSB7XG4gICAgdmFyIG5vZGVzID0gbm9kZXNJbmRleGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgYXV0b0ZvY3VzYWJsZSA9IGZpbHRlckF1dG9Gb2N1c2FibGUobm9kZXMuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChncm91cHMpKSk7XG4gICAgaWYgKGF1dG9Gb2N1c2FibGUgJiYgYXV0b0ZvY3VzYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGF1dG9Gb2N1c2FibGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoZmlsdGVyQXV0b0ZvY3VzYWJsZShvcmRlcmVkTm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgcGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZS5ob3N0IHx8IG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbi8qKlxuICogZmluZHMgYSBwYXJlbnQgZm9yIGJvdGggbm9kZUEgYW5kIG5vZGVCXG4gKiBAcGFyYW0gbm9kZUFcbiAqIEBwYXJhbSBub2RlQlxuICogQHJldHVybnMge2Jvb2xlYW58Kn1cbiAqL1xuZXhwb3J0IHZhciBnZXRDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAobm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIHBhcmVudHNBID0gZ2V0UGFyZW50cyhub2RlQSk7XG4gICAgdmFyIHBhcmVudHNCID0gZ2V0UGFyZW50cyhub2RlQik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHNBLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50c0FbaV07XG4gICAgICAgIGlmIChwYXJlbnRzQi5pbmRleE9mKGN1cnJlbnRQYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGdldFRvcENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChiYXNlQWN0aXZlRWxlbWVudCwgbGVmdEVudHJ5LCByaWdodEVudHJpZXMpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBhc0FycmF5KGJhc2VBY3RpdmVFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVudHJpZXMgPSBhc0FycmF5KGxlZnRFbnRyeSk7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICB2YXIgdG9wQ29tbW9uID0gZmFsc2U7XG4gICAgbGVmdEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudCh0b3BDb21tb24gfHwgZW50cnksIGVudHJ5KSB8fCB0b3BDb21tb247XG4gICAgICAgIHJpZ2h0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW50cnkpIHtcbiAgICAgICAgICAgIHZhciBjb21tb24gPSBnZXRDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCwgc3ViRW50cnkpO1xuICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgIGlmICghdG9wQ29tbW9uIHx8IGNvbnRhaW5zKGNvbW1vbiwgdG9wQ29tbW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBjb21tb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQoY29tbW9uLCB0b3BDb21tb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogYWRkIGFzc2VydCBoZXJlP1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0b2ZvY3VzZWQgaW5zaWRlIGEgZ2l2ZW4gdG9wIG5vZGVzXG4gKiBAcGFyYW0gZW50cmllc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7IHJldHVybiBhY2MuY29uY2F0KHBhcmVudEF1dG9mb2N1c2FibGVzKG5vZGUsIHZpc2liaWxpdHlDYWNoZSkpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGFzQXJyYXksIGdldEZpcnN0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBwaWNrQXV0b2ZvY3VzIH0gZnJvbSAnLi91dGlscy9hdXRvLWZvY3VzJztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMsIGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbnZhciByZW9yZGVyTm9kZXMgPSBmdW5jdGlvbiAoc3JjTm9kZXMsIGRzdE5vZGVzKSB7XG4gICAgdmFyIHJlbWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIG5vIFNldChkc3ROb2RlcykgZm9yIElFMTEgOihcbiAgICBkc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHsgcmV0dXJuIHJlbWFwLnNldChlbnRpdHkubm9kZSwgZW50aXR5KTsgfSk7XG4gICAgLy8gcmVtYXAgdG8gZHN0Tm9kZXNcbiAgICByZXR1cm4gc3JjTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZW1hcC5nZXQobm9kZSk7IH0pLmZpbHRlcihpc0RlZmluZWQpO1xufTtcbi8qKlxuICogY29udGFpbnMgdGhlIG1haW4gbG9naWMgb2YgdGhlIGBmb2N1cy1sb2NrYCBwYWNrYWdlLlxuICpcbiAqICEgeW91IHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzIGZ1bmN0aW9uICFcbiAqXG4gKiBnaXZlbiB0b3Agbm9kZShzKSBhbmQgdGhlIGxhc3QgYWN0aXZlIGVsZW1lbnQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIG5leHRcbiAqIEByZXR1cm5zIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGZvY3VzZWQgdG8gbW92ZSBmb2N1cyBpbnNpZGVcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1NvbHZlciA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSkge1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChhc0FycmF5KHRvcE5vZGUpLmxlbmd0aCA+IDAgPyBkb2N1bWVudCA6IGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCB8fCB0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBhbnlGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVOb2RlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpbm5lckVsZW1lbnRzWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBvdXRlck5vZGVzID0gZ2V0Rm9jdXNhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBvcmRlcmVkSW5uZXJFbGVtZW50cyA9IHJlb3JkZXJOb2RlcyhvdXRlck5vZGVzLCBpbm5lckVsZW1lbnRzKTtcbiAgICAvLyBjb2xsZWN0IGlubmVyIGZvY3VzYWJsZSBhbmQgc2VwYXJhdGVseSB0YWJiYWJsZXNcbiAgICB2YXIgaW5uZXJGb2N1c2FibGVzID0gb3JkZXJlZElubmVyRWxlbWVudHMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBpbm5lclRhYmJhYmxlID0gb3JkZXJlZElubmVyRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBfYS50YWJJbmRleDtcbiAgICAgICAgcmV0dXJuIHRhYkluZGV4ID49IDA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBuZXdJZCA9IG5ld0ZvY3VzKGlubmVyRm9jdXNhYmxlcywgaW5uZXJUYWJiYWJsZSwgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBmb2N1c05vZGUgPSBcbiAgICAgICAgLy8gZmlyc3QgdHJ5IG9ubHkgdGFiYmFibGUsIGFuZCB0aGUgZmFsbGJhY2sgdG8gYWxsIGZvY3VzYWJsZSwgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCBzaG91bGQgYmUgcGlja2VkIGZvciBmb2N1c1xuICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJUYWJiYWJsZSwgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSkgfHxcbiAgICAgICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lckZvY3VzYWJsZXMsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBmb2N1c05vZGUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9jdXMtbG9jazogY2Fubm90IGZpbmQgYW55IG5vZGUgdG8gbW92ZSBmb2N1cyBpbnRvJyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWRJbm5lckVsZW1lbnRzW25ld0lkXTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGlzR3VhcmQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3V0aWxzL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuL3V0aWxzL3RhYlV0aWxzJztcbi8qKlxuICogdHJhdmVyc2VzIGFsbCByZWxhdGVkIG5vZGVzIChpbmNsdWRpbmcgZ3JvdXBzKSByZXR1cm5pbmcgYSBsaXN0IG9mIGFsbCBub2RlcyhvdXRlciBhbmQgaW50ZXJuYWwpIHdpdGggbWV0YSBpbmZvcm1hdGlvblxuICogVGhpcyBpcyBsb3ctbGV2ZWwgQVBJIVxuICogQHJldHVybnMgbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgZ2l2ZW4gdG9wKCEpIG5vZGUuXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gcHJvdmlkaW5nIGEgc2ltcGxlciBBUElcbiAqL1xuZXhwb3J0IHZhciBleHBhbmRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudCh0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IG9yZGVyQnlUYWJJbmRleChnZXRGb2N1c2FibGVzKFtjb21tb25QYXJlbnRdLCB0cnVlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVudHJpZXMsIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsICJleHBvcnQgdmFyIGZvY3VzT24gPSBmdW5jdGlvbiAodGFyZ2V0LCBmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAvLyBub3QgY2xlYXIgaG93LCBidXQgaXMgcG9zc2libGUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrL2lzc3Vlcy81M1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnZm9jdXMnIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCdjb250ZW50V2luZG93JyBpbiB0YXJnZXQgJiYgdGFyZ2V0LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0LmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGZvY3VzU29sdmVyIH0gZnJvbSAnLi9mb2N1c1NvbHZlcic7XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4vKipcbiAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvY3VzLWxvY2sgcGFja2FnZVxuICpcbiAqIENvbnRhaW5zIGZvY3VzIGF0IGEgZ2l2ZW4gbm9kZS5cbiAqIFRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoaWNoIGVsZW1lbnQoZmlyc3Qgb3IgbGFzdCkgc2hvdWxkIGJlIGZvY3VzZWQuXG4gKiBUaGUgZm91bmQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQuXG4gKlxuICogVGhpcyBpcyBvbmUgdGltZSBhY3Rpb24gKG1vdmUpLCBub3QgYSBwZXJzaXN0ZW50IGZvY3VzLWxvY2tcbiAqXG4gKiBIVE1MIG1hcmtlcnMgKHNlZSB7QGxpbmsgaW1wb3J0KCcuL2NvbnN0YW50cycpLkZPQ1VTX0FVVE99IGNvbnN0YW50cykgY2FuIGNvbnRyb2wgYXV0b2ZvY3VzXG4gKiBAc2VlIHtAbGluayBmb2N1c1NvbHZlcn0gZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhdXRvZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBtb3ZlRm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c1NvbHZlcih0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgLy8gZ2xvYmFsIGxvY2FsIHNpZGUgZWZmZWN0IHRvIGNvdW50YWluIHJlY3Vyc2l2ZSBsb2NrIGFjdGl2YXRpb24gYW5kIHJlc29sdmUgZm9jdXMtZmlnaHRpbmdcbiAgICBpZiAobG9ja0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAvKiogK0ZPQ1VTLUZJR0hUSU5HIHByZXZlbnRpb24gKiovXG4gICAgICAgIGlmIChndWFyZENvdW50ID4gMikge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWN1cnNpdmUgZW50ZXJlZCBiYWNrIHRoZSBsb2NrIGFjdGl2YXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogZm9jdXMtZmlnaHRpbmcgZGV0ZWN0ZWQuIE9ubHkgb25lIGZvY3VzIG1hbmFnZW1lbnQgc3lzdGVtIGNvdWxkIGJlIGFjdGl2ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svI2ZvY3VzLWZpZ2h0aW5nJyk7XG4gICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBndWFyZENvdW50Kys7XG4gICAgICAgIGZvY3VzT24oZm9jdXNhYmxlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICAgICAgZ3VhcmRDb3VudC0tO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuZnVuY3Rpb24gd2Vha1JlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICM2OCBTYWZhcmkgMTQuMSBkb250IGhhdmUgaXQgeWV0XG4gICAgLy8gRklYTUU6IHJlbW92ZSBpbiAyMDI1XG4gICAgaWYgKHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUgfHwgbnVsbDsgfTtcbiAgICB9XG4gICAgdmFyIHcgPSB2YWx1ZSA/IG5ldyBXZWFrUmVmKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh3ID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZGVyZWYoKSkgfHwgbnVsbDsgfTtcbn1cbmV4cG9ydCB2YXIgcmVjb3JkRWxlbWVudExvY2F0aW9uID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY3VycmVudDogd2Vha1JlZihjdXJyZW50RWxlbWVudCksXG4gICAgICAgICAgICBwYXJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICBsZWZ0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLFxuICAgICAgICAgICAgcmlnaHQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogd2Vha1JlZihlbGVtZW50KSxcbiAgICAgICAgc3RhY2s6IHN0YWNrLFxuICAgICAgICBvd25lckRvY3VtZW50OiBlbGVtZW50Lm93bmVyRG9jdW1lbnQsXG4gICAgfTtcbn07XG52YXIgcmVzdG9yZUZvY3VzVG8gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHN0YWNrID0gbG9jYXRpb24uc3RhY2ssIG93bmVyRG9jdW1lbnQgPSBsb2NhdGlvbi5vd25lckRvY3VtZW50O1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBzdGFja18xID0gc3RhY2s7IF9pIDwgc3RhY2tfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzdGFja18xW19pXTtcbiAgICAgICAgdmFyIHBhcmVudF8xID0gKF9hID0gbGluZS5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGxpbmUpO1xuICAgICAgICAvLyBpcyBpdCBzdGlsbCBoZXJlP1xuICAgICAgICBpZiAocGFyZW50XzEgJiYgb3duZXJEb2N1bWVudC5jb250YWlucyhwYXJlbnRfMSkpIHtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKF9iID0gbGluZS5sZWZ0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBzYXZlZEN1cnJlbnQgPSBsaW5lLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcGFyZW50XzEuY29udGFpbnMoc2F2ZWRDdXJyZW50KSA/IHNhdmVkQ3VycmVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciByaWdodCA9IChfYyA9IGxpbmUucmlnaHQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKGxpbmUpO1xuICAgICAgICAgICAgdmFyIGZvY3VzYWJsZXMgPSBnZXRUYWJiYWJsZU5vZGVzKFtwYXJlbnRfMV0sIHZpc2liaWxpdHlDYWNoZSk7XG4gICAgICAgICAgICB2YXIgYWltID0gXG4gICAgICAgICAgICAvLyB0aGF0IGlzIGVsZW1lbnQgaXRzZWxmXG4gICAgICAgICAgICAoX2UgPSAoX2QgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHZvaWQgMCA/IGN1cnJlbnQgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWV0aGluZyBpbiBpdCdzIHBsYWNlXG4gICAgICAgICAgICBsZWZ0ID09PSBudWxsIHx8IGxlZnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxlZnQubmV4dEVsZW1lbnRTaWJsaW5nKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWVib2R5IHRvIHRoZSByaWdodCwgc3RpbGwgY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICByaWdodCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgbGVmdCwgc29tZXRoaW5nP1xuICAgICAgICAgICAgbGVmdDtcbiAgICAgICAgICAgIHdoaWxlIChhaW0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZiA9IDAsIGZvY3VzYWJsZXNfMSA9IGZvY3VzYWJsZXM7IF9mIDwgZm9jdXNhYmxlc18xLmxlbmd0aDsgX2YrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNhYmxlc18xW19mXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFpbSA9PT0gbnVsbCB8fCBhaW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFpbS5jb250YWlucyhmb2N1c2FibGUubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhaW0gPSBhaW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvY3VzYWJsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgcGFyZW50IGNvbnRhaW5zIGEgZm9jdXNhYmxlIC0gbW92ZSB0aGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVzWzBdLm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90aGluZyBtYXRjaGVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENhcHR1cmVzIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCB0byByZXN0b3JlIGZvY3VzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmVcbiAqIEhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIG5vIGxvbmdlciBmb2N1c2FibGVcbiAqIG1vdmluZyBmb2N1cyB0byB0aGUgY2xvc2VzdCBmb2N1c2FibGUgZWxlbWVudFxuICogQHBhcmFtIHRhcmdldEVsZW1lbnQgLSBlbGVtZW50IHdoZXJlIGZvY3VzIHNob3VsZCBiZSByZXN0b3JlZFxuICogQHJldHVybnMgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBuZXcgZWxlbWVudCB0byBmb2N1c1xuICovXG5leHBvcnQgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCkge1xuICAgIHZhciBsb2NhdGlvbiA9IHJlY29yZEVsZW1lbnRMb2NhdGlvbih0YXJnZXRFbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUZvY3VzVG8obG9jYXRpb24pO1xuICAgIH07XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMsIGNvbnRhaW5zLCBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuLyoqXG4gKiBmb3IgYSBnaXZlbiBgZWxlbWVudGAgaW4gYSBnaXZlbiBgc2NvcGVgIHJldHVybnMgZm9jdXNhYmxlIHNpYmxpbmdzXG4gKiBAcGFyYW0gZWxlbWVudCAtIGJhc2UgZWxlbWVudFxuICogQHBhcmFtIHNjb3BlIC0gY29tbW9uIHBhcmVudC4gQ2FuIGJlIGRvY3VtZW50LCBidXQgYmV0dGVyIHRvIG5hcnJvdyBpdCBkb3duIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKiBAcmV0dXJucyB7cHJldixuZXh0fSAtIHJlZmVyZW5jZXMgdG8gYSBmb2N1c2FibGUgZWxlbWVudCBiZWZvcmUgYW5kIGFmdGVyXG4gKiBAcmV0dXJucyB1bmRlZmluZWQgLSBpZiBvcGVyYXRpb24gaXMgbm90IGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IHZhciBnZXRSZWxhdGl2ZUZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBzY29wZSwgdXNlVGFiYmFibGVzKSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFzY29wZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdubyBlbGVtZW50IG9yIHNjb3BlIGdpdmVuJyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHNoYXJkcyA9IGFzQXJyYXkoc2NvcGUpO1xuICAgIGlmIChzaGFyZHMuZXZlcnkoZnVuY3Rpb24gKHNoYXJkKSB7IHJldHVybiAhY29udGFpbnMoc2hhcmQsIGVsZW1lbnQpOyB9KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzY29wZScpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBmb2N1c2FibGVzID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSk7XG4gICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gZWxlbWVudDtcbiAgICB9KTtcbiAgICBpZiAoY3VycmVudCA9PT0gLTEpIHtcbiAgICAgICAgLy8gYW4gZWRnZSBjYXNlLCB3aGVuIGFuY2hvciBlbGVtZW50IGlzIG5vdCBmb3VuZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcmV2OiBmb2N1c2FibGVzW2N1cnJlbnQgLSAxXSxcbiAgICAgICAgbmV4dDogZm9jdXNhYmxlc1tjdXJyZW50ICsgMV0sXG4gICAgICAgIGZpcnN0OiBmb2N1c2FibGVzWzBdLFxuICAgICAgICBsYXN0OiBmb2N1c2FibGVzW2ZvY3VzYWJsZXMubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoc2hhcmRzLCB1c2VUYWJiYWJsZXMpIHtcbiAgICB2YXIgc2V0ID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlyc3Q6IHNldFswXSxcbiAgICAgICAgbGFzdDogc2V0W3NldC5sZW5ndGggLSAxXSxcbiAgICB9O1xufTtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBzY29wZTogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgY3ljbGU6IHRydWUsXG4gICAgICAgIG9ubHlUYWJiYWJsZTogdHJ1ZSxcbiAgICB9LCBvcHRpb25zKTtcbn07XG52YXIgbW92ZUZvY3VzID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zLCBjYikge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG5ld09wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc29sdXRpb24gPSBnZXRSZWxhdGl2ZUZvY3VzYWJsZShmcm9tRWxlbWVudCwgbmV3T3B0aW9ucy5zY29wZSwgbmV3T3B0aW9ucy5vbmx5VGFiYmFibGUpO1xuICAgIGlmICghc29sdXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gY2Ioc29sdXRpb24sIG5ld09wdGlvbnMuY3ljbGUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgZm9jdXNPbih0YXJnZXQubm9kZSwgbmV3T3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgbmV4dCBlbGVtZW50IGluIHRoZSB0YWItb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNOZXh0RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBuZXh0ID0gX2EubmV4dCwgZmlyc3QgPSBfYS5maXJzdDtcbiAgICAgICAgcmV0dXJuIG5leHQgfHwgKGN5Y2xlICYmIGZpcnN0KTtcbiAgICB9KTtcbn07XG4vKipcbiAqIGZvY3VzZXMgcHJldiBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNQcmV2RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBwcmV2ID0gX2EucHJldiwgbGFzdCA9IF9hLmxhc3Q7XG4gICAgICAgIHJldHVybiBwcmV2IHx8IChjeWNsZSAmJiBsYXN0KTtcbiAgICB9KTtcbn07XG52YXIgcGlja0JvdW5kYXJ5ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zLCB3aGF0KSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBib3VuZGFyeSA9IGdldEJvdW5kYXJ5KHNjb3BlLCAoX2EgPSBvcHRpb25zLm9ubHlUYWJiYWJsZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgdmFyIG5vZGUgPSBib3VuZGFyeVt3aGF0XTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBmb2N1c09uKG5vZGUubm9kZSwgb3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgZmlyc3QgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNGaXJzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2ZpcnN0Jyk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIGxhc3QgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNMYXN0RWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcGlja0JvdW5kYXJ5KHNjb3BlLCBvcHRpb25zLCAnbGFzdCcpO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL1RyYXAnO1xuaW1wb3J0IHsgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIobWVkaXVtU2lkZWNhciwgRm9jdXNUcmFwKTsiLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXInO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgbm9uUGFzc2l2ZSB9IGZyb20gJy4vYWdncmVzaXZlQ2FwdHVyZSc7XG5pbXBvcnQgeyBoYW5kbGVTY3JvbGwsIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkIH0gZnJvbSAnLi9oYW5kbGVTY3JvbGwnO1xuZXhwb3J0IHZhciBnZXRUb3VjaFhZID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgPyBbZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV0gOiBbMCwgMF07XG59O1xuZXhwb3J0IHZhciBnZXREZWx0YVhZID0gZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBbZXZlbnQuZGVsdGFYLCBldmVudC5kZWx0YVldOyB9O1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xudmFyIGRlbHRhQ29tcGFyZSA9IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4WzBdID09PSB5WzBdICYmIHhbMV0gPT09IHlbMV07IH07XG52YXIgZ2VuZXJhdGVTdHlsZSA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gXCJcXG4gIC5ibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBub25lO31cXG4gIC5hbGxvdy1pbnRlcmFjdGl2aXR5LVwiKS5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogYWxsO31cXG5cIik7IH07XG52YXIgaWRDb3VudGVyID0gMDtcbnZhciBsb2NrU3RhY2sgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBSZW1vdmVTY3JvbGxTaWRlQ2FyKHByb3BzKSB7XG4gICAgdmFyIHNob3VsZFByZXZlbnRRdWV1ZSA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgdmFyIHRvdWNoU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYoWzAsIDBdKTtcbiAgICB2YXIgYWN0aXZlQXhpcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgIHZhciBpZCA9IFJlYWN0LnVzZVN0YXRlKGlkQ291bnRlcisrKVswXTtcbiAgICB2YXIgU3R5bGUgPSBSZWFjdC51c2VTdGF0ZShzdHlsZVNpbmdsZXRvbilbMF07XG4gICAgdmFyIGxhc3RQcm9wcyA9IFJlYWN0LnVzZVJlZihwcm9wcyk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGFzdFByb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgICB9LCBbcHJvcHNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvcHMuaW5lcnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICB2YXIgYWxsb3dfMSA9IF9fc3ByZWFkQXJyYXkoW3Byb3BzLmxvY2tSZWYuY3VycmVudF0sIChwcm9wcy5zaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSwgdHJ1ZSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0sIFtwcm9wcy5pbmVydCwgcHJvcHMubG9ja1JlZi5jdXJyZW50LCBwcm9wcy5zaGFyZHNdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsRXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQsIHBhcmVudCkge1xuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxhc3RQcm9wcy5jdXJyZW50LmFsbG93UGluY2hab29tO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b3VjaCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgdG91Y2hTdGFydCA9IHRvdWNoU3RhcnRSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGRlbHRhWCA9ICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogdG91Y2hTdGFydFswXSAtIHRvdWNoWzBdO1xuICAgICAgICB2YXIgZGVsdGFZID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiB0b3VjaFN0YXJ0WzFdIC0gdG91Y2hbMV07XG4gICAgICAgIHZhciBjdXJyZW50QXhpcztcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSBNYXRoLmFicyhkZWx0YVgpID4gTWF0aC5hYnMoZGVsdGFZKSA/ICdoJyA6ICd2JztcbiAgICAgICAgLy8gYWxsb3cgaG9yaXpvbnRhbCB0b3VjaCBtb3ZlIG9uIFJhbmdlIGlucHV0cy4gVGhleSB3aWxsIG5vdCBjYXVzZSBhbnkgc2Nyb2xsXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZXZlbnQgJiYgbW92ZURpcmVjdGlvbiA9PT0gJ2gnICYmIHRhcmdldC50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb24gPT09ICd2JyA/ICdoJyA6ICd2JztcbiAgICAgICAgICAgIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gb3RoZXIgYXhpcyBtaWdodCBiZSBub3Qgc2Nyb2xsYWJsZVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWN0aXZlQXhpcy5jdXJyZW50ICYmICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgJiYgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lID09PSBldmVudC50eXBlICYmIChlLnRhcmdldCA9PT0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldCA9PT0gZS5zaGFkb3dQYXJlbnQpICYmIGRlbHRhQ29tcGFyZShlLmRlbHRhLCBkZWx0YSk7IH0pWzBdO1xuICAgICAgICAvLyBzZWxmIGV2ZW50LCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAgICAgIGlmIChzb3VyY2VFdmVudCAmJiBzb3VyY2VFdmVudC5zaG91bGQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXRzaWRlIG9yIHNoYXJkIGV2ZW50XG4gICAgICAgIGlmICghc291cmNlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBzaGFyZE5vZGVzID0gKGxhc3RQcm9wcy5jdXJyZW50LnNoYXJkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IHNoYXJkTm9kZXMubGVuZ3RoID4gMCA/IHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBzaGFyZE5vZGVzWzBdKSA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuYW1lLCBkZWx0YSwgdGFyZ2V0LCBzaG91bGQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0geyBuYW1lOiBuYW1lLCBkZWx0YTogZGVsdGEsIHRhcmdldDogdGFyZ2V0LCBzaG91bGQ6IHNob3VsZCwgc2hhZG93UGFyZW50OiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQodGFyZ2V0KSB9O1xuICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5wdXNoKGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAhPT0gZXZlbnQ7IH0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoU3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdG91Y2hTdGFydFJlZi5jdXJyZW50ID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFdoZWVsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXREZWx0YVhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaE1vdmUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldFRvdWNoWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9ja1N0YWNrLnB1c2goU3R5bGUpO1xuICAgICAgICBwcm9wcy5zZXRDYWxsYmFja3Moe1xuICAgICAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uV2hlZWxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogc2Nyb2xsVG91Y2hNb3ZlLFxuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2tTdGFjayA9IGxvY2tTdGFjay5maWx0ZXIoZnVuY3Rpb24gKGluc3QpIHsgcmV0dXJuIGluc3QgIT09IFN0eWxlOyB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgaW5lcnQgPSBwcm9wcy5pbmVydDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGluZXJ0ID8gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdlbmVyYXRlU3R5bGUoaWQpIH0pIDogbnVsbCxcbiAgICAgICAgcmVtb3ZlU2Nyb2xsQmFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChSZW1vdmVTY3JvbGxCYXIsIHsgZ2FwTW9kZTogcHJvcHMuZ2FwTW9kZSB9KSA6IG51bGwpKTtcbn1cbmZ1bmN0aW9uIGdldE91dGVybW9zdFNoYWRvd1BhcmVudChub2RlKSB7XG4gICAgdmFyIHNoYWRvd1BhcmVudCA9IG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBzaGFkb3dQYXJlbnQgPSBub2RlLmhvc3Q7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBzaGFkb3dQYXJlbnQ7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xuZXhwb3J0IHZhciBsb2NrQXR0cmlidXRlID0gJ2RhdGEtc2Nyb2xsLWxvY2tlZCc7XG4vLyBpbXBvcnRhbnQgdGlwIC0gb25jZSB3ZSBtZWFzdXJlIHNjcm9sbEJhciB3aWR0aCBhbmQgcmVtb3ZlIHRoZW1cbi8vIHdlIGNvdWxkIG5vdCByZXBlYXQgdGhpcyBvcGVyYXRpb25cbi8vIHRodXMgd2UgYXJlIHVzaW5nIHN0eWxlLXNpbmdsZXRvbiAtIG9ubHkgdGhlIGZpcnN0IFwieWV0IGNvcnJlY3RcIiBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24gKF9hLCBhbGxvd1JlbGF0aXZlLCBnYXBNb2RlLCBpbXBvcnRhbnQpIHtcbiAgICB2YXIgbGVmdCA9IF9hLmxlZnQsIHRvcCA9IF9hLnRvcCwgcmlnaHQgPSBfYS5yaWdodCwgZ2FwID0gX2EuZ2FwO1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgcmV0dXJuIFwiXFxuICAuXCIuY29uY2F0KG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgXCIge1xcbiAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcXG4gICAgXCIpLmNvbmNhdChbXG4gICAgICAgIGFsbG93UmVsYXRpdmUgJiYgXCJwb3NpdGlvbjogcmVsYXRpdmUgXCIuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJlxuICAgICAgICAgICAgXCJcXG4gICAgcGFkZGluZy1sZWZ0OiBcIi5jb25jYXQobGVmdCwgXCJweDtcXG4gICAgcGFkZGluZy10b3A6IFwiKS5jb25jYXQodG9wLCBcInB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KHJpZ2h0LCBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdwYWRkaW5nJyAmJiBcInBhZGRpbmctcmlnaHQ6IFwiLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJycpLCBcIlxcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBcIikuY29uY2F0KHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIFwiOiBcIikuY29uY2F0KGdhcCwgXCJweDtcXG4gIH1cXG5cIik7XG59O1xudmFyIGdldEN1cnJlbnRVc2VDb3VudGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gcGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSkgfHwgJzAnLCAxMCk7XG4gICAgcmV0dXJuIGlzRmluaXRlKGNvdW50ZXIpID8gY291bnRlciA6IDA7XG59O1xuZXhwb3J0IHZhciB1c2VMb2NrQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIChnZXRDdXJyZW50VXNlQ291bnRlcigpICsgMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q291bnRlciA9IGdldEN1cnJlbnRVc2VDb3VudGVyKCkgLSAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvdW50ZXIgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgbmV3Q291bnRlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHBhZ2Ugc2Nyb2xsYmFyIGFuZCBibG9ja3MgcGFnZSBzY3JvbGwgd2hlbiBtb3VudGVkXG4gKi9cbmV4cG9ydCB2YXIgUmVtb3ZlU2Nyb2xsQmFyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBfYS5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IF9hLm5vSW1wb3J0YW50LCBfYiA9IF9hLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICB1c2VMb2NrQXR0cmlidXRlKCk7XG4gICAgLypcbiAgICAgZ2FwIHdpbGwgYmUgbWVhc3VyZWQgb24gZXZlcnkgY29tcG9uZW50IG1vdW50XG4gICAgIGhvd2V2ZXIgaXQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgdGhlIFwiZmlyc3RcIiBpbnZvY2F0aW9uXG4gICAgIGR1ZSB0byBzaW5nbGV0b24gbmF0dXJlIG9mIDxTdHlsZVxuICAgICAqL1xuICAgIHZhciBnYXAgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEdhcFdpZHRoKGdhcE1vZGUpOyB9LCBbZ2FwTW9kZV0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2V0U3R5bGVzKGdhcCwgIW5vUmVsYXRpdmUsIGdhcE1vZGUsICFub0ltcG9ydGFudCA/ICchaW1wb3J0YW50JyA6ICcnKSB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gJy4vc2luZ2xldG9uJztcbi8qKlxuICogY3JlYXRlcyBhIGhvb2sgdG8gY29udHJvbCBzdHlsZSBzaW5nbGV0b25cbiAqIEBzZWUge0BsaW5rIHN0eWxlU2luZ2xldG9ufSBmb3IgYSBzYWZlciBjb21wb25lbnQgdmVyc2lvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAqIC8vL1xuICogdXNlU3R5bGUoJ2JvZHkgeyBvdmVyZmxvdzogaGlkZGVufScpO1xuICovXG5leHBvcnQgdmFyIHN0eWxlSG9va1NpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXQgPSBzdHlsZXNoZWV0U2luZ2xldG9uKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHlsZXMsIGlzRHluYW1pYykge1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hlZXQuYWRkKHN0eWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNoZWV0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW3N0eWxlcyAmJiBpc0R5bmFtaWNdKTtcbiAgICB9O1xufTtcbiIsICJ2YXIgY3VycmVudE5vbmNlO1xuZXhwb3J0IHZhciBzZXROb25jZSA9IGZ1bmN0aW9uIChub25jZSkge1xuICAgIGN1cnJlbnROb25jZSA9IG5vbmNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGN1cnJlbnROb25jZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGdldE5vbmNlIH0gZnJvbSAnZ2V0LW5vbmNlJztcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhZy5zdHlsZVNoZWV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoc3R5bGVzaGVldCA9IG1ha2VTdHlsZVRhZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTdHlsZXMoc3R5bGVzaGVldCwgc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdHlsZVRhZyhzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyICYmIHN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LnBhcmVudE5vZGUgJiYgc3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7IHN0eWxlSG9va1NpbmdsZXRvbiB9IGZyb20gJy4vaG9vayc7XG4vKipcbiAqIGNyZWF0ZSBhIENvbXBvbmVudCB0byBhZGQgc3R5bGVzIG9uIGRlbWFuZFxuICogLSBzdHlsZXMgYXJlIGFkZGVkIHdoZW4gZmlyc3QgaW5zdGFuY2UgaXMgbW91bnRlZFxuICogLSBzdHlsZXMgYXJlIHJlbW92ZWQgd2hlbiB0aGUgbGFzdCBpbnN0YW5jZSBpcyB1bm1vdW50ZWRcbiAqIC0gY2hhbmdpbmcgc3R5bGVzIGluIHJ1bnRpbWUgZG9lcyBub3RoaW5nIHVubGVzcyBkeW5hbWljIGlzIHNldC4gQnV0IHdpdGggbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IGNhbiBsZWFkIHRvIHRoZSB1bmRlZmluZWQgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcywgZHluYW1pYyA9IF9hLmR5bmFtaWM7XG4gICAgICAgIHVzZVN0eWxlKHN0eWxlcywgZHluYW1pYyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIFNoZWV0O1xufTtcbiIsICJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbcGFyc2UobGVmdCksIHBhcnNlKHRvcCksIHBhcnNlKHJpZ2h0KV07XG59O1xuZXhwb3J0IHZhciBnZXRHYXBXaWR0aCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHplcm9HYXA7XG4gICAgfVxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0KGdhcE1vZGUpO1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IG9mZnNldHNbMF0sXG4gICAgICAgIHRvcDogb2Zmc2V0c1sxXSxcbiAgICAgICAgcmlnaHQ6IG9mZnNldHNbMl0sXG4gICAgICAgIGdhcDogTWF0aC5tYXgoMCwgd2luZG93V2lkdGggLSBkb2N1bWVudFdpZHRoICsgb2Zmc2V0c1syXSAtIG9mZnNldHNbMF0pLFxuICAgIH07XG59O1xuIiwgInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHZhciBub25QYXNzaXZlID0gcGFzc2l2ZVN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IGZhbHNlO1xuIiwgInZhciBhbHdheXNDb250YWluc1Njcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gdGV4dGFyZWEgd2lsbCBhbHdheXMgX2NvbnRhaW5fIHNjcm9sbCBpbnNpZGUgc2VsZi4gSXQgb25seSBjYW4gYmUgaGlkZGVuXG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbn07XG52YXIgZWxlbWVudENhbkJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSwgb3ZlcmZsb3cpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIChcbiAgICAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICBzdHlsZXNbb3ZlcmZsb3ddICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAvLyBjb250YWlucyBzY3JvbGwgaW5zaWRlIHNlbGZcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmICFhbHdheXNDb250YWluc1Njcm9sbChub2RlKSAmJiBzdHlsZXNbb3ZlcmZsb3ddID09PSAndmlzaWJsZScpKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WScpOyB9O1xudmFyIGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1gnKTsgfTtcbmV4cG9ydCB2YXIgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIFNraXAgb3ZlciBzaGFkb3cgcm9vdFxuICAgICAgICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09ICd1bmRlZmluZWQnICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1Njcm9sbGFibGUgPSBlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIGN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgY3VycmVudCksIHNjcm9sbEhlaWdodCA9IF9hWzFdLCBjbGllbnRIZWlnaHQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gb3duZXJEb2N1bWVudC5ib2R5KTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFZTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gX2Euc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgPSBfYS5zY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCA9IF9hLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgIF07XG59O1xudmFyIGdldEhTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IF9hLnNjcm9sbExlZnQsIHNjcm9sbFdpZHRoID0gX2Euc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoID0gX2EuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIGNsaWVudFdpZHRoLFxuICAgIF07XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBlbGVtZW50Q291bGRCZVZTY3JvbGxlZChub2RlKSA6IGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkKG5vZGUpO1xufTtcbnZhciBnZXRTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBnZXRWU2Nyb2xsVmFyaWFibGVzKG5vZGUpIDogZ2V0SFNjcm9sbFZhcmlhYmxlcyhub2RlKTtcbn07XG52YXIgZ2V0RGlyZWN0aW9uRmFjdG9yID0gZnVuY3Rpb24gKGF4aXMsIGRpcmVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSBlbGVtZW50J3MgZGlyZWN0aW9uIGlzIHJ0bCAocmlnaHQtdG8tbGVmdCksIHRoZW4gc2Nyb2xsTGVmdCBpcyAwIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBhdCBpdHMgcmlnaHRtb3N0IHBvc2l0aW9uLFxuICAgICAqIGFuZCB0aGVuIGluY3JlYXNpbmdseSBuZWdhdGl2ZSBhcyB5b3Ugc2Nyb2xsIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3Njcm9sbExlZnRcbiAgICAgKi9cbiAgICByZXR1cm4gYXhpcyA9PT0gJ2gnICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAtMSA6IDE7XG59O1xuZXhwb3J0IHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoYXhpcywgZW5kVGFyZ2V0LCBldmVudCwgc291cmNlRGVsdGEsIG5vT3ZlcnNjcm9sbCkge1xuICAgIHZhciBkaXJlY3Rpb25GYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoYXhpcywgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZW5kVGFyZ2V0KS5kaXJlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGRpcmVjdGlvbkZhY3RvciAqIHNvdXJjZURlbHRhO1xuICAgIC8vIGZpbmQgc2Nyb2xsYWJsZSB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciB0YXJnZXRJbkxvY2sgPSBlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsVG9wID0gMDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBfYSA9IGdldFNjcm9sbFZhcmlhYmxlcyhheGlzLCB0YXJnZXQpLCBwb3NpdGlvbiA9IF9hWzBdLCBzY3JvbGxfMSA9IF9hWzFdLCBjYXBhY2l0eSA9IF9hWzJdO1xuICAgICAgICB2YXIgZWxlbWVudFNjcm9sbCA9IHNjcm9sbF8xIC0gY2FwYWNpdHkgLSBkaXJlY3Rpb25GYWN0b3IgKiBwb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvc2l0aW9uIHx8IGVsZW1lbnRTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGwgKz0gZWxlbWVudFNjcm9sbDtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGxUb3AgKz0gcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAvLyBwb3J0YWxlZCBjb250ZW50XG4gICAgKCF0YXJnZXRJbkxvY2sgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5KSB8fFxuICAgICAgICAvLyBzZWxmIGNvbnRlbnRcbiAgICAgICAgKHRhcmdldEluTG9jayAmJiAoZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkgfHwgZW5kVGFyZ2V0ID09PSB0YXJnZXQpKSk7XG4gICAgLy8gaGFuZGxlIGVwc2lsb24gYXJvdW5kIDAgKG5vbiBzdGFuZGFyZCB6b29tIGxldmVscylcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiBkZWx0YSA+IGF2YWlsYWJsZVNjcm9sbCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsVG9wKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIC1kZWx0YSA+IGF2YWlsYWJsZVNjcm9sbFRvcCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRDYW5jZWxTY3JvbGw7XG59O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxTaWRlQ2FyIH0gZnJvbSAnLi9TaWRlRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBSZW1vdmVTY3JvbGxTaWRlQ2FyKTtcbiIsICJpbXBvcnQgeyBfX3NwcmVhZEFycmF5cyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGlkZU90aGVycyB9IGZyb20gJ2FyaWEtaGlkZGVuJztcbmltcG9ydCB7IEludGVyYWN0aXZpdHlEaXNhYmxlciB9IGZyb20gJy4vSW50ZXJhY3Rpdml0eURpc2FibGVyJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG5leHBvcnQgZnVuY3Rpb24gRWZmZWN0KF9hKSB7XG4gICAgdmFyIHNldExvY2tQcm9wcyA9IF9hLnNldExvY2tQcm9wcywgb25Fc2NhcGVLZXkgPSBfYS5vbkVzY2FwZUtleSwgb25DbGlja091dHNpZGUgPSBfYS5vbkNsaWNrT3V0c2lkZSwgc2hhcmRzID0gX2Euc2hhcmRzLCBvbkFjdGl2YXRpb24gPSBfYS5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gX2Eub25EZWFjdGl2YXRpb24sIG5vSXNvbGF0aW9uID0gX2Eubm9Jc29sYXRpb247XG4gICAgdmFyIF9iID0gdXNlU3RhdGUodW5kZWZpbmVkKSwgYWN0aXZlTm9kZSA9IF9iWzBdLCBzZXRBY3RpdmVOb2RlID0gX2JbMV07XG4gICAgdmFyIGxhc3RFdmVudFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgICB2YXIgbW91c2VUb3VjaGVzID0gdXNlUmVmKDApO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIGlmICgoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXlDb2RlID09PSAyNykgJiZcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmRzICYmXG4gICAgICAgICAgICAgICAgc2hhcmRzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgb25Nb3VzZURvd24oZXZlbnQpO1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZU5vZGUsIG9uQ2xpY2tPdXRzaWRlLCBvbkVzY2FwZUtleV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBpZiAob25BY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25BY3RpdmF0aW9uKGFjdGl2ZU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAob25EZWFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWFjdGl2YXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgWyEhYWN0aXZlTm9kZV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdW5kbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgICAgIHZhciB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG9uTm9kZUFjdGl2YXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFub0lzb2xhdGlvbikge1xuICAgICAgICAgICAgICAgIF91bmRvID0gaGlkZU90aGVycyhfX3NwcmVhZEFycmF5cyhbbm9kZV0sIChzaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSksIGRvY3VtZW50LmJvZHksIGZvY3VzSGlkZGVuTWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk5vZGVEZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdW5kbygpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NrUHJvcHMoe1xuICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGl2YXRpb246IG9uTm9kZUFjdGl2YXRpb24sXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25Ob2RlRGVhY3RpdmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldExvY2tQcm9wcyhmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEludGVyYWN0aXZpdHlEaXNhYmxlciwgbnVsbCk7XG59XG4iLCAidmFyIGdldERlZmF1bHRQYXJlbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHNhbXBsZVRhcmdldCA9IEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXRbMF0gOiBvcmlnaW5hbFRhcmdldDtcbiAgICByZXR1cm4gc2FtcGxlVGFyZ2V0Lm93bmVyRG9jdW1lbnQuYm9keTtcbn07XG52YXIgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xudmFyIG1hcmtlck1hcCA9IHt9O1xudmFyIGxvY2tDb3VudCA9IDA7XG52YXIgdW53cmFwSG9zdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUuaG9zdCB8fCB1bndyYXBIb3N0KG5vZGUucGFyZW50Tm9kZSkpO1xufTtcbnZhciBjb3JyZWN0VGFyZ2V0cyA9IGZ1bmN0aW9uIChwYXJlbnQsIHRhcmdldHMpIHtcbiAgICByZXR1cm4gdGFyZ2V0c1xuICAgICAgICAubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb3JyZWN0ZWRUYXJnZXQgPSB1bndyYXBIb3N0KHRhcmdldCk7XG4gICAgICAgIGlmIChjb3JyZWN0ZWRUYXJnZXQgJiYgcGFyZW50LmNvbnRhaW5zKGNvcnJlY3RlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0ZWRUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW4nLCB0YXJnZXQsICdpbiBub3QgY29udGFpbmVkIGluc2lkZScsIHBhcmVudCwgJy4gRG9pbmcgbm90aGluZycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9KTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbY29udHJvbEF0dHJpYnV0ZV0gLSBodG1sIEF0dHJpYnV0ZSB0byBjb250cm9sXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xudmFyIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUsIGNvbnRyb2xBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0cyA9IGNvcnJlY3RUYXJnZXRzKHBhcmVudE5vZGUsIEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICBpZiAoIW1hcmtlck1hcFttYXJrZXJOYW1lXSkge1xuICAgICAgICBtYXJrZXJNYXBbbWFya2VyTmFtZV0gPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICB2YXIgbWFya2VyQ291bnRlciA9IG1hcmtlck1hcFttYXJrZXJOYW1lXTtcbiAgICB2YXIgaGlkZGVuTm9kZXMgPSBbXTtcbiAgICB2YXIgZWxlbWVudHNUb0tlZXAgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGVsZW1lbnRzVG9TdG9wID0gbmV3IFNldCh0YXJnZXRzKTtcbiAgICB2YXIga2VlcCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAoIWVsIHx8IGVsZW1lbnRzVG9LZWVwLmhhcyhlbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c1RvS2VlcC5hZGQoZWwpO1xuICAgICAgICBrZWVwKGVsLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgdGFyZ2V0cy5mb3JFYWNoKGtlZXApO1xuICAgIHZhciBkZWVwID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBpZiAoIXBhcmVudCB8fCBlbGVtZW50c1RvU3RvcC5oYXMocGFyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwocGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRzVG9LZWVwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgIGRlZXAobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhpZGRlbiA9IGF0dHIgIT09IG51bGwgJiYgYXR0ciAhPT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IChjb3VudGVyTWFwLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJWYWx1ZSA9PT0gMSAmJiBhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5zZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShtYXJrZXJOYW1lLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gJywgbm9kZSwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGRlZXAocGFyZW50Tm9kZSk7XG4gICAgZWxlbWVudHNUb0tlZXAuY2xlYXIoKTtcbiAgICBsb2NrQ291bnQrKztcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRkZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gY291bnRlck1hcC5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gbWFya2VyQ291bnRlci5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY291bnRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bmNvbnRyb2xsZWROb2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbWFya2VyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShtYXJrZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvY2tDb3VudC0tO1xuICAgICAgICBpZiAoIWxvY2tDb3VudCkge1xuICAgICAgICAgICAgLy8gY2xlYXJcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBtYXJrZXJNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBoaWRlT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtYXJpYS1oaWRkZW4nOyB9XG4gICAgdmFyIHRhcmdldHMgPSBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICAvLyB3ZSBzaG91bGQgbm90IGhpZGUgYXJpYUxpdmUgZWxlbWVudHMgLSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2FyaWEtaGlkZGVuL2lzc3Vlcy8xMFxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0nKSkpO1xuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKHRhcmdldHMsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdhcmlhLWhpZGRlbicpO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgaW5lcnRcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaW5lcnRPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1pbmVydC1lZCc7IH1cbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyhvcmlnaW5hbFRhcmdldCwgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyBpZiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgaW5lcnRcbiAqL1xuZXhwb3J0IHZhciBzdXBwb3J0c0luZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIEhUTUxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnaW5lcnQnKTtcbn07XG4vKipcbiAqIEF1dG9tYXRpYyBmdW5jdGlvbiB0byBcInN1cHByZXNzXCIgRE9NIGVsZW1lbnRzIC0gX2hpZGVfIG9yIF9pbmVydF8gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIHN1cHByZXNzT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtc3VwcHJlc3NlZCc7IH1cbiAgICByZXR1cm4gKHN1cHBvcnRzSW5lcnQoKSA/IGluZXJ0T3RoZXJzIDogaGlkZU90aGVycykob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpO1xufTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBTdHlsZSA9IHN0eWxlU2luZ2xldG9uKCk7XG52YXIgc3R5bGVzID0gXCJcXG4gW1wiICsgZm9jdXNIaWRkZW5NYXJrZXIgKyBcIl0ge1xcbiAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuIH1cXG5cIjtcbmV4cG9ydCB2YXIgSW50ZXJhY3Rpdml0eURpc2FibGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IHN0eWxlcyB9KTsgfTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1mb2N1cy1sb2NrL3NpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1yZW1vdmUtc2Nyb2xsL3NpZGVjYXInO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi9FZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIEVmZmVjdCk7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIF9leGNsdWRlZCA9IFtcImFuY2hvckNsYXNzTmFtZVwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYnV0dG9uXCIsIFwiYnV0dG9uUmVmXCIsIFwiaW5zZXJ0XCIsIFwiaXNPcGVuXCIsIFwib3duRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlUG9wb3ZlclwiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwicGFuZWxQYWRkaW5nU2l6ZVwiLCBcInBhbmVsUHJvcHNcIiwgXCJwYW5lbFJlZlwiLCBcInBhbmVsU3R5bGVcIiwgXCJwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dFwiLCBcInBvcG92ZXJSZWZcIiwgXCJoYXNBcnJvd1wiLCBcImFycm93Q2hpbGRyZW5cIiwgXCJyZXBvc2l0aW9uT25TY3JvbGxcIiwgXCJ6SW5kZXhcIiwgXCJhdHRhY2hUb0FuY2hvclwiLCBcImRpc3BsYXlcIiwgXCJvZmZzZXRcIiwgXCJvblRyYXBEZWFjdGl2YXRpb25cIiwgXCJidWZmZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiY29udGFpbmVyXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbml0aWFsRm9jdXNcIiwgXCJ0YWJJbmRleFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb2N1c2FibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IGNhc2NhZGluZ01lbnVLZXlzLCBnZXRUcmFuc2l0aW9uVGltaW5ncywgZ2V0V2FpdER1cmF0aW9uLCBwZXJmb3JtT25GcmFtZSwgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aU11dGF0aW9uT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlcic7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBnZXRFbGVtZW50WkluZGV4IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciB9IGZyb20gJy4uL291dHNpZGVfY2xpY2tfZGV0ZWN0b3InO1xuaW1wb3J0IHsgRXVpUG9wb3ZlckFycm93IH0gZnJvbSAnLi9wb3BvdmVyX2Fycm93JztcbmltcG9ydCB7IGV1aVBvcG92ZXJTdHlsZXMgfSBmcm9tICcuL3BvcG92ZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aVBvcG92ZXJQYW5lbCB9IGZyb20gJy4vcG9wb3Zlcl9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBwb3BvdmVyQW5jaG9yUG9zaXRpb24gPSBbJ3VwQ2VudGVyJywgJ3VwTGVmdCcsICd1cFJpZ2h0JywgJ2Rvd25DZW50ZXInLCAnZG93bkxlZnQnLCAnZG93blJpZ2h0JywgJ2xlZnRDZW50ZXInLCAnbGVmdFVwJywgJ2xlZnREb3duJywgJ3JpZ2h0Q2VudGVyJywgJ3JpZ2h0VXAnLCAncmlnaHREb3duJ107XG52YXIgYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcCA9IHtcbiAgdXA6ICd0b3AnLFxuICByaWdodDogJ3JpZ2h0JyxcbiAgZG93bjogJ2JvdHRvbScsXG4gIGxlZnQ6ICdsZWZ0J1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgYW5jaG9yIHBvc2l0aW9uIHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcInRvcFwiLCBcImRvd25SaWdodFwiIC0+IFwiYm90dG9tXCJcbiAgLy8gZXh0cmFjdCB0aGUgZmlyc3QgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIChcIiBeIFwiKSBvZiBhbmNob3JQb3NpdGlvbiBhbmRcbiAgLy8gY2FwdHVyZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIChcIiAoLio/KSBcIikgdW50aWwgdGhlXG4gIC8vIGZpcnN0IGNhcGl0YWwgbGV0dGVyIChcIiBbQS1aXSBcIikgaXMgZW5jb3VudGVyZWRcbiAgdmFyIF9yZWYgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvXiguKj8pW0EtWl0vKSxcbiAgICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBwcmltYXJ5UG9zaXRpb24gPSBfcmVmMlsxXTtcblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFtwcmltYXJ5UG9zaXRpb25dO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBncmF2aXR5IHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcImxlZnRcIiwgXCJyaWdodERvd25cIiAtPiBcImJvdHRvbVwiXG4gIC8vIGV4dHJhY3QgdGhlIHNlY29uZCBwb3NpdGlvbmFsIHdvcmQgZnJvbSBhbmNob3JQb3NpdGlvbjpcbiAgLy8gc3RhcnRzIGEgY2FwdHVyZSBncm91cCBhdCB0aGUgZmlyc3QgY2FwaXRhbCBsZXR0ZXJcbiAgLy8gYW5kIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXRcbiAgdmFyIF9yZWYzID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goLyhbQS1aXS4qKS8pLFxuICAgICAgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICBhbGlnbiA9IF9yZWY0WzFdOyAvLyB0aGlzIHBlcmZvcm1zIHR3byB0YXNrczpcbiAgLy8gMS4gbm9ybWFsaXplcyB0aGUgYWxpZ24gcG9zaXRpb24gYnkgbG93ZXJjYXNpbmcgaXRcbiAgLy8gMi4gYGNlbnRlcmAgZG9lc24ndCBleGlzdCBpbiB0aGUgbG9va3VwIG1hcCB3aGljaCBjb252ZXJ0cyBpdCB0byBgdW5kZWZpbmVkYCBtZWFuaW5nIG5vIGFsaWduXG5cblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFthbGlnbi50b0xvd2VyQ2FzZSgpXTtcbn1cbnZhciBERUZBVUxUX1BPUE9WRVJfU1RZTEVTID0ge1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MFxufTtcbnZhciByZXR1cm5Gb2N1c0NvbmZpZyA9IHtcbiAgcHJldmVudFNjcm9sbDogdHJ1ZVxufTtcbnZhciBjbG9zaW5nVHJhbnNpdGlvblRpbWUgPSAyNTA7IC8vIFRPRE86IERSWSBvdXQgdmFyIHdoZW4gY29udmVydGluZyB0byBDU1MtaW4tSlNcblxuZXhwb3J0IHZhciBFdWlQb3BvdmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVBvcG92ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcG92ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9wb3Zlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNwb3NpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdHJhbmRlZEZvY3VzVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NpbmdUcmFuc2l0aW9uVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWVcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25cIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGVzY3JpcHRpb25JZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBfdGhpcy5wcm9wcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkVzY2FwZUtleVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG5cbiAgICAgICAgX3RoaXMuaGFuZGxlU3RyYW5kZWRGb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVN0cmFuZGVkRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIGByZXR1cm5Gb2N1c2AgZmFpbGVkIGFuZCBmb2N1cyB3YXMgc3RyYW5kZWQgb24gdGhlIGJvZHksXG4gICAgICAgIC8vIGF0dGVtcHQgdG8gbWFudWFsbHkgcmVzdG9yZSBmb2N1cyB0byB0aGUgdG9nZ2xlIGJ1dHRvblxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgIGlmICghX3RoaXMuYnV0dG9uKSByZXR1cm47XG4gICAgICAgICAgdmFyIGZvY3VzYWJsZUl0ZW1zID0gZm9jdXNhYmxlKF90aGlzLmJ1dHRvbik7XG4gICAgICAgICAgaWYgKCFmb2N1c2FibGVJdGVtcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICB2YXIgdG9nZ2xlQnV0dG9uID0gZm9jdXNhYmxlSXRlbXNbMF07XG4gICAgICAgICAgdG9nZ2xlQnV0dG9uLmZvY3VzKHJldHVybkZvY3VzQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfSwgY2xvc2luZ1RyYW5zaXRpb25UaW1lKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5FU0NBUEUpIHtcbiAgICAgICAgX3RoaXMub25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gb25seSBjbG9zZSB0aGUgcG9wb3ZlciBpZiB0aGUgZXZlbnQgc291cmNlIGlzbid0IHRoZSBhbmNob3IgYnV0dG9uXG4gICAgICAvLyBvdGhlcndpc2UsIGl0IGlzIHVwIHRvIHRoZSBhbmNob3IgdG8gdG9nZ2xlIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0dXNcbiAgICAgIGlmIChfdGhpcy5idXR0b24gJiYgX3RoaXMuYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3BlblBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuXG4gICAgICBpZiAoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICAgIH0gLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBzdGF0ZSBhIGJlYXQgYWZ0ZXIgdGhlIHJlbmRlciB0YWtlcyBwbGFjZSwgc28gdGhhdCB0aGUgQ1NTXG4gICAgICAvLyB0cmFuc2l0aW9uIGNhbiB0YWtlIGVmZmVjdC5cblxuXG4gICAgICBfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTsgLy8gZm9yIGVhY2ggY2hpbGQgZWxlbWVudCBvZiBgdGhpcy5wYW5lbGAsIGZpbmQgYW55IHRyYW5zaXRpb24gZHVyYXRpb24gd2Ugc2hvdWxkIHdhaXQgZm9yIGJlZm9yZSBzdGFiaWxpemluZ1xuXG4gICAgICB2YXIgX0FycmF5JHByb3RvdHlwZSRzbGljID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoX3RoaXMucGFuZWwgPyBbX3RoaXMucGFuZWxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoQXJyYXkuZnJvbShfdGhpcy5wYW5lbC5jaGlsZHJlbikpKSA6IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWY1LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbk1hdGNoID0gX3JlZjUuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICAgIGRlbGF5TWF0Y2ggPSBfcmVmNS5kZWxheU1hdGNoO1xuICAgICAgICB2YXIgdHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoOiBNYXRoLm1heChkdXJhdGlvbk1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kdXJhdGlvbk1hdGNoKSxcbiAgICAgICAgICBkZWxheU1hdGNoOiBNYXRoLm1heChkZWxheU1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoKVxuICAgICAgICB9O1xuICAgICAgfSwge1xuICAgICAgICBkdXJhdGlvbk1hdGNoOiAwLFxuICAgICAgICBkZWxheU1hdGNoOiAwXG4gICAgICB9KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kZWxheU1hdGNoO1xuXG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlblN0YWJsZTogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkdXJhdGlvbk1hdGNoICsgZGVsYXlNYXRjaCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcykge1xuICAgICAgdmFyIHdhaXREdXJhdGlvbiA9IGdldFdhaXREdXJhdGlvbihyZWNvcmRzKTtcblxuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcblxuICAgICAgcGVyZm9ybU9uRnJhbWUod2FpdER1cmF0aW9uLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyXCIsIGZ1bmN0aW9uIChhbGxvd0VuZm9yY2VQb3NpdGlvbikge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiA9PSBudWxsIHx8IF90aGlzLnBhbmVsID09IG51bGwpIHJldHVybjtcbiAgICAgIHZhciBfcmVmNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3JlZjYuYW5jaG9yUG9zaXRpb247XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pO1xuICAgICAgdmFyIGZvcmNlUG9zaXRpb24gPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChhbGxvd0VuZm9yY2VQb3NpdGlvbiAmJiBfdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgJiYgX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcG9zaXRpb24gPSBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb247XG4gICAgICAgIGZvcmNlUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgY29udGFpbmVyOiBfdGhpcy5wcm9wcy5jb250YWluZXIsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgZm9yY2VQb3NpdGlvbjogZm9yY2VQb3NpdGlvbixcbiAgICAgICAgYWxpZ246IGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbiksXG4gICAgICAgIGFuY2hvcjogX3RoaXMuYnV0dG9uLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wYW5lbCxcbiAgICAgICAgb2Zmc2V0OiAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3cgPyAxNiArIChfdGhpcy5wcm9wcy5vZmZzZXQgfHwgMCkgOiA4ICsgKF90aGlzLnByb3BzLm9mZnNldCB8fCAwKSxcbiAgICAgICAgYXJyb3dDb25maWc6IHtcbiAgICAgICAgICBhcnJvd1dpZHRoOiAyNCxcbiAgICAgICAgICBhcnJvd0J1ZmZlcjogMTBcbiAgICAgICAgfSxcbiAgICAgICAgcmV0dXJuQm91bmRpbmdCb3g6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICBidWZmZXI6IF90aGlzLnByb3BzLmJ1ZmZlclxuICAgICAgfSksXG4gICAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICAgIGxlZnQgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgIGZvdW5kUG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93LFxuICAgICAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3g7IC8vIHRoZSBwb3BvdmVyJ3Mgei1pbmRleCBtdXN0IGluaGVyaXQgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAvLyB0aGlzIGtlZXBzIGEgYnV0dG9uJ3MgcG9wb3ZlciB1bmRlciBhIGZseW91dCB0aGF0IHdvdWxkIGNvdmVyIHRoZSBidXR0b25cbiAgICAgIC8vIGJ1dCBhIHBvcG92ZXIgdHJpZ2dlcmVkIGluc2lkZSBhIGZseW91dCB3aWxsIGFwcGVhciBvdmVyIHRoYXQgZmx5b3V0XG5cblxuICAgICAgdmFyIHpJbmRleFByb3AgPSBfdGhpcy5wcm9wcy56SW5kZXg7XG4gICAgICB2YXIgekluZGV4ID0gekluZGV4UHJvcCA9PSBudWxsID8gZ2V0RWxlbWVudFpJbmRleChfdGhpcy5idXR0b24sIF90aGlzLnBhbmVsKSArIDIwMDAgOiB6SW5kZXhQcm9wO1xuXG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMucGFuZWxTdHlsZSksIHt9LCB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciAmJiBhbmNob3JCb3VuZGluZ0JveCA/IGFuY2hvckJvdW5kaW5nQm94LmxlZnQgOiBsZWZ0LFxuICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIHZhciB3aWxsUmVuZGVyQXJyb3cgPSAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3c7XG4gICAgICB2YXIgYXJyb3dTdHlsZXMgPSB3aWxsUmVuZGVyQXJyb3cgPyBhcnJvdyA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhcnJvd1Bvc2l0aW9uID0gZm91bmRQb3NpdGlvbjtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3BvdmVyU3R5bGVzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dTdHlsZXMsXG4gICAgICAgIGFycm93UG9zaXRpb246IGFycm93UG9zaXRpb24sXG4gICAgICAgIG9wZW5Qb3NpdGlvbjogZm91bmRQb3NpdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyRml4ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyKHRydWUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlckZsdWlkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlcihmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLnBhbmVsID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLnBhbmVsUmVmICYmIF90aGlzLnByb3BzLnBhbmVsUmVmKG5vZGUpO1xuXG4gICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHBhbmVsIGhhcyB1bm1vdW50ZWQsIHJlc3RvcmUgdGhlIHN0YXRlIGRlZmF1bHRzXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBpc09wZW5TdGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYW5lbCBpcyBjb21pbmcgaW50byBleGlzdGVuY2VcbiAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMuYnV0dG9uID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLmJ1dHRvblJlZiAmJiBfdGhpcy5wcm9wcy5idXR0b25SZWYobm9kZSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpc09wZW46IHByb3BzLmlzT3BlblxuICAgICAgfSxcbiAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogcHJvcHMuaXNPcGVuLFxuICAgICAgLy8gb25seSBzdXBwcmVzcyBpZiBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWVcbiAgICAgIGlzQ2xvc2luZzogZmFsc2UsXG4gICAgICBpc09wZW5pbmc6IGZhbHNlLFxuICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAvLyBvbmNlIGEgc3RhYmxlIHBvc2l0aW9uIGhhcyBiZWVuIGZvdW5kLCBrZWVwIHRoZSBjb250ZW50cyBvbiB0aGF0IHNpZGVcbiAgICAgIGlzT3BlblN0YWJsZTogZmFsc2UgLy8gd2FpdCBmb3IgYW55IGluaXRpYWwgb3BlbmluZyB0cmFuc2l0aW9ucyB0byBmaW5pc2ggYmVmb3JlIG1hcmtpbmcgYXMgc3RhYmxlXG5cbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3BvdmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIpIHtcbiAgICAgICAgLy8gY29tcG9uZW50IHdhcyBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWU7IG5vdyB0aGF0IGl0J3MgbW91bnRlZFxuICAgICAgICAvLyBzdG9wIHN1cHByZXNzaW5nIGFuZCBzdGFydCBvcGVuaW5nXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtbW91bnQtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogZmFsc2UsXG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25PcGVuUG9wb3ZlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBvcGVuZWQuXG4gICAgICBpZiAoIXByZXZQcm9wcy5pc09wZW4gJiYgdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICB9IC8vIHVwZGF0ZSBzY3JvbGwgbGlzdGVuZXJcblxuXG4gICAgICBpZiAocHJldlByb3BzLnJlcG9zaXRpb25PblNjcm9sbCAhPT0gdGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBjbG9zZWQuXG5cblxuICAgICAgaWYgKHByZXZQcm9wcy5pc09wZW4gJiYgIXRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBqdXN0IGNsb3NlZCB0aGUgcG9wb3ZlciwgcXVldWUgdXAgdGhlIHJlbW92YWwgb2YgdGhlIGNvbnRlbnQgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgIHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc0Nsb3Npbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYW5jaG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYW5jaG9yQ2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgYnV0dG9uID0gX3RoaXMkcHJvcHMuYnV0dG9uLFxuICAgICAgICAgIGJ1dHRvblJlZiA9IF90aGlzJHByb3BzLmJ1dHRvblJlZixcbiAgICAgICAgICBpbnNlcnQgPSBfdGhpcyRwcm9wcy5pbnNlcnQsXG4gICAgICAgICAgaXNPcGVuID0gX3RoaXMkcHJvcHMuaXNPcGVuLFxuICAgICAgICAgIG93bkZvY3VzID0gX3RoaXMkcHJvcHMub3duRm9jdXMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgY2xvc2VQb3BvdmVyID0gX3RoaXMkcHJvcHMuY2xvc2VQb3BvdmVyLFxuICAgICAgICAgIHBhbmVsQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMucGFuZWxDbGFzc05hbWUsXG4gICAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzLnBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgICAgcGFuZWxQcm9wcyA9IF90aGlzJHByb3BzLnBhbmVsUHJvcHMsXG4gICAgICAgICAgcGFuZWxSZWYgPSBfdGhpcyRwcm9wcy5wYW5lbFJlZixcbiAgICAgICAgICBwYW5lbFN0eWxlID0gX3RoaXMkcHJvcHMucGFuZWxTdHlsZSxcbiAgICAgICAgICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCA9IF90aGlzJHByb3BzLnBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgICAgIHBvcG92ZXJSZWYgPSBfdGhpcyRwcm9wcy5wb3BvdmVyUmVmLFxuICAgICAgICAgIGhhc0Fycm93ID0gX3RoaXMkcHJvcHMuaGFzQXJyb3csXG4gICAgICAgICAgYXJyb3dDaGlsZHJlbiA9IF90aGlzJHByb3BzLmFycm93Q2hpbGRyZW4sXG4gICAgICAgICAgcmVwb3NpdGlvbk9uU2Nyb2xsID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsLFxuICAgICAgICAgIHpJbmRleCA9IF90aGlzJHByb3BzLnpJbmRleCxcbiAgICAgICAgICBhdHRhY2hUb0FuY2hvciA9IF90aGlzJHByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIG9mZnNldCA9IF90aGlzJHByb3BzLm9mZnNldCxcbiAgICAgICAgICBvblRyYXBEZWFjdGl2YXRpb24gPSBfdGhpcyRwcm9wcy5vblRyYXBEZWFjdGl2YXRpb24sXG4gICAgICAgICAgYnVmZmVyID0gX3RoaXMkcHJvcHMuYnVmZmVyLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgY29udGFpbmVyID0gX3RoaXMkcHJvcHMuY29udGFpbmVyLFxuICAgICAgICAgIGZvY3VzVHJhcFByb3BzID0gX3RoaXMkcHJvcHMuZm9jdXNUcmFwUHJvcHMsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzUHJvcCA9IF90aGlzJHByb3BzLmluaXRpYWxGb2N1cyxcbiAgICAgICAgICB0YWJJbmRleFByb3AgPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclN0eWxlcygpO1xuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXIsIHtcbiAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgfV07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXInLCB7XG4gICAgICAgICdldWlQb3BvdmVyLWlzT3Blbic6IHRoaXMuc3RhdGUuaXNPcGVuaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGFuY2hvckNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyX19hbmNob3InLCBhbmNob3JDbGFzc05hbWUpO1xuICAgICAgdmFyIHNob3dBcnJvdyA9IGhhc0Fycm93ICYmICFhdHRhY2hUb0FuY2hvcjtcbiAgICAgIHZhciBwYW5lbDtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3ZlciAmJiAoaXNPcGVuIHx8IHRoaXMuc3RhdGUuaXNDbG9zaW5nKSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSB0YWJJbmRleFByb3A7XG4gICAgICAgIHZhciBpbml0aWFsRm9jdXMgPSBpbml0aWFsRm9jdXNQcm9wO1xuICAgICAgICB2YXIgYXJpYURlc2NyaWJlZGJ5O1xuICAgICAgICB2YXIgYXJpYUxpdmU7XG4gICAgICAgIHZhciBwYW5lbEFyaWFNb2RhbCA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ2FyaWEtbW9kYWwnKSA/IHBhbmVsUHJvcHNbJ2FyaWEtbW9kYWwnXSA6ICd0cnVlJztcbiAgICAgICAgdmFyIHBhbmVsUm9sZSA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ3JvbGUnKSA/IHBhbmVsUHJvcHMucm9sZSA6ICdkaWFsb2cnO1xuXG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwYW5lbEFyaWFNb2RhbCAhPT0gJ3RydWUnKSB7XG4gICAgICAgICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3AgIT09IG51bGwgJiYgdGFiSW5kZXhQcm9wICE9PSB2b2lkIDAgPyB0YWJJbmRleFByb3AgOiAwO1xuICAgICAgICAgIGFyaWFMaXZlID0gJ29mZic7XG5cbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgaW5pdGlhbEZvY3VzID0gZnVuY3Rpb24gaW5pdGlhbEZvY3VzKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnBhbmVsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnYXNzZXJ0aXZlJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0O1xuXG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkge1xuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IHRoaXMuZGVzY3JpcHRpb25JZDtcbiAgICAgICAgICBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICBpZDogdGhpcy5kZXNjcmlwdGlvbklkXG4gICAgICAgICAgfSwgb3duRm9jdXMgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlQb3BvdmVyLnNjcmVlblJlYWRlckFubm91bmNlbWVudFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJZb3UgYXJlIGluIGEgZGlhbG9nLiBUbyBjbG9zZSB0aGlzIGRpYWxvZywgaGl0IGVzY2FwZS5cIlxuICAgICAgICAgIH0pLCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJldHVybkZvY3VzID0gdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyByZXR1cm5Gb2N1c0NvbmZpZyA6IGZhbHNlO1xuICAgICAgICBwYW5lbCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCB7XG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnRcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZVxuICAgICAgICB9LCBmb2N1c1RyYXBQcm9wcywge1xuICAgICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyAvLyBJZ25vcmUgdGVtcG9yYXJ5IHN0YXRlIG9mIGluZGVjaXNpdmUgZm9jdXNcbiAgICAgICAgICAsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzOiBpbml0aWFsRm9jdXMsXG4gICAgICAgICAgb25EZWFjdGl2YXRpb246IG9uVHJhcERlYWN0aXZhdGlvbixcbiAgICAgICAgICBvbkNsaWNrT3V0c2lkZTogdGhpcy5vbkNsaWNrT3V0c2lkZSxcbiAgICAgICAgICBvbkVzY2FwZUtleTogdGhpcy5vbkVzY2FwZUtleSxcbiAgICAgICAgICBkaXNhYmxlZDogIW93bkZvY3VzIHx8ICF0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZ1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHt9LCBwYW5lbFByb3BzLCB7XG4gICAgICAgICAgcGFuZWxSZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmlzT3BlbmluZyxcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uLFxuICAgICAgICAgIGlzQXR0YWNoZWQ6IGF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbENsYXNzTmFtZSwgcGFuZWxQcm9wcyA9PT0gbnVsbCB8fCBwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYW5lbFByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgaGFzU2hhZG93OiBmYWxzZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZTogcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgICAgICAgcm9sZTogcGFuZWxSb2xlLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkQnksXG4gICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IHBhbmVsQXJpYU1vZGFsLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5zdGF0ZS5wb3BvdmVyU3R5bGVzKSwge30sIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBgd2lsbC1jaGFuZ2VgIHRvIHJlZHVjZSByaXNrIG9mIGEgYmx1cnJ5IGFuaW1hdGlvbiBpbiBDaHJvbWUgODYrXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyAndHJhbnNmb3JtLCBvcGFjaXR5JyA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLCBzaG93QXJyb3cgJiYgdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlckFycm93LCB7XG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5hcnJvd1N0eWxlc1xuICAgICAgICB9LCBhcnJvd0NoaWxkcmVuKSwgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCwgX19fRW1vdGlvbkpTWChFdWlNdXRhdGlvbk9ic2VydmVyLCB7XG4gICAgICAgICAgb2JzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZWxlbWVudCBhdHRyaWJ1dGUgY2hhbmdlc1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgLy8gYWRkZWQvcmVtb3ZlZCBlbGVtZW50c1xuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIC8vIHRleHQgY2hhbmdlc1xuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSAvLyB3YXRjaCBhbGwgY2hpbGQgZWxlbWVudHNcblxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25NdXRhdGlvbjogdGhpcy5vbk11dGF0aW9uXG4gICAgICAgIH0sIGZ1bmN0aW9uIChtdXRhdGlvblJlZikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHJlZjogbXV0YXRpb25SZWZcbiAgICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgICAgIH0pKSkpO1xuICAgICAgfSAvLyByZWFjdC1mb2N1cy1vbiBhbmQgcmVsYXRlZCBkbyBub3QgcmVnaXN0ZXIgb3V0c2lkZSBjbGljayBkZXRlY3Rpb25cbiAgICAgIC8vIHdoZW4gZGlzYWJsZWQsIHNvIHdlIHN0aWxsIG5lZWQgdG8gY29uZGl0aW9uYWxseSBjaGVjayBmb3IgdGhhdCBvdXJzZWx2ZXNcblxuXG4gICAgICBpZiAob3duRm9jdXMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiBwb3BvdmVyUmVmXG4gICAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgICAgICB9LCBcIjtsYWJlbDpyZW5kZXI7XCIpLFxuICAgICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMuYnV0dG9uUmVmXG4gICAgICAgIH0sIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiksIHBhbmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCB7XG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2s6IHRoaXMuY2xvc2VQb3BvdmVyXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiBwb3BvdmVyUmVmLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd25cbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogLyojX19QVVJFX18qL19jc3Moe1xuICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgICAgIH0sIFwiO2xhYmVsOnJlbmRlcjtcIiksXG4gICAgICAgICAgY2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgICAgIHJlZjogdGhpcy5idXR0b25SZWZcbiAgICAgICAgfSwgYnV0dG9uIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBudWxsIDogYnV0dG9uKSwgcGFuZWwpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gJiYgIW5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNDbG9zaW5nOiB0cnVlLFxuICAgICAgICAgIGlzT3BlbmluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICE9PSBuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlQb3BvdmVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpUG9wb3ZlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpc09wZW46IGZhbHNlLFxuICBvd25Gb2N1czogdHJ1ZSxcbiAgYW5jaG9yUG9zaXRpb246ICdkb3duQ2VudGVyJyxcbiAgcGFuZWxQYWRkaW5nU2l6ZTogJ20nLFxuICBoYXNBcnJvdzogdHJ1ZSxcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0pO1xuXG5FdWlQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBwYXNzZWQgdG8gdGhlIGRpcmVjdCBwYXJlbnQgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIGFuZCBhcnJvdyByZWxhdGl2ZSB0byB0aGUgYnV0dG9uXG4gICAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFN0eWxlIGFuZCBwb3NpdGlvbiBhbHRlcmF0aW9uIGZvciBhcnJvdy1sZXNzLCBsZWZ0LWFsaWduZWRcbiAgICAgKiBhdHRhY2htZW50LiBJbnRlbmRlZCBmb3IgdXNlIHdpdGggaW5wdXRzIGFzIGFuY2hvcnMsIGUuZy5cbiAgICAgKiBFdWlJbnB1dFBvcG92ZXJcbiAgICAgKi9cbiAgYXR0YWNoVG9BbmNob3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFRyaWdnZXJpbmcgZWxlbWVudCBmb3Igd2hpY2ggdG8gYWxpZ24gdGhlIHBvcG92ZXIgdG9cbiAgICAgKi9cbiAgYnV0dG9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBoYW5kbGUgaGlkaW5nIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGNsb3NlUG9wb3ZlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZXN0cmljdCB0aGUgcG9wb3ZlcidzIHBvc2l0aW9uIHdpdGhpbiB0aGlzIGVsZW1lbnRcbiAgICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENTUyBkaXNwbGF5IHR5cGUgZm9yIGJvdGggdGhlIHBvcG92ZXIgYW5kIGFuY2hvclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gRXVpRm9jdXNUcmFwXG4gICAgICovXG4gIGZvY3VzVHJhcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3cgYXJyb3cgaW5kaWNhdGluZyB0byBvcmlnaW5hdGluZyBidXR0b25cbiAgICAgKi9cbiAgaGFzQXJyb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGF0IGVsZW1lbnQgc2hvdWxkIGluaXRpYWxseSBoYXZlIGZvY3VzOyBDYW4gYmUgYSBET01cbiAgICAgKiBub2RlLCBvciBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAgICAgKiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCkgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcGFzc2VkLCBpbml0aWFsIGZvY3VzIGRlZmF1bHRzIHRvIHRoZSBwb3BvdmVyIHBhbmVsLlxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogUGFzc2VkIGRpcmVjdGx5IHRvIEV1aVBvcnRhbCBmb3IgRE9NIHBvc2l0aW9uaW5nLiBCb3RoIHByb3BlcnRpZXMgYXJlXG4gICAgICogcmVxdWlyZWQgaWYgcHJvcCBpcyBzcGVjaWZpZWRcbiAgICAgKi9cbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImJlZm9yZVwiLCBcImFmdGVyXCJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIFZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHBvcG92ZXJcbiAgICAgKi9cbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBUcmFwcyB0YWIgZm9jdXMgd2l0aGluIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIG93bkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDdXN0b20gY2xhc3MgYWRkZWQgdG8gdGhlIEV1aVBhbmVsIGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudHNcbiAgICAgKi9cbiAgcGFuZWxDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXVpUGFuZWwgcGFkZGluZyBvbiBhbGwgc2lkZXNcbiAgICAgKi9cbiAgcGFuZWxQYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTdGFuZGFyZCBET00gYHN0eWxlYCBhdHRyaWJ1dGUuIFBhc3NlZCB0byB0aGUgRXVpUGFuZWxcbiAgICAgKi9cbiAgcGFuZWxTdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aVBhbmVsLiBTZWUgI0V1aVBvcG92ZXJQYW5lbFByb3BzXG4gICAgICovXG4gIHBhbmVsUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gcG9wb3ZlciBvcGVuLFxuICAgICAqIGluIGFkZGl0aW9uIHRvIEVVSSdzIGRlZmF1bHQgcG9wb3ZlciBpbnN0cnVjdGlvbnMgZm9yIEVzY2FwZSBvbiBjbG9zZS5cbiAgICAgKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCBrZXlib2FyZCBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICAgICAqIGFycm93IG5hdmlnYXRpb24uXG4gICAgICovXG4gIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLCB0aGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiBwb3BvdmVyIGFuY2hvcnMuIFdoZW4gbmVzdGluZ1xuICAgICAqIGFuIGBFdWlQb3BvdmVyYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgcG9wb3ZlciBjb250ZW50IGluaGVyaXRzIHRoZSB6LWluZGV4IG9mIHRoZSBhbmNob3JcbiAgICAgKiBjb21wb25lbnQ7IHBhc3MgYHpJbmRleGAgdG8gb3ZlcnJpZGVcbiAgICAgKi9cbiAgekluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEZ1bmN0aW9uIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBmb2N1cyB0cmFwIGlzIGRlYWN0aXZhdGVkXG4gICAgICovXG4gIG9uVHJhcERlYWN0aXZhdGlvbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBEaXN0YW5jZSBhd2F5IGZyb20gdGhlIGFuY2hvciB0aGF0IHRoZSBwb3BvdmVyIHdpbGwgcmVuZGVyXG4gICAgICovXG4gIG9mZnNldDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXI7XG4gICAgICogUGFzcyBhbiBhcnJheSBvZiA0IHZhbHVlcyB0byBhZGp1c3QgZWFjaCBzaWRlIGRpZmZlcmVudGx5OiBgW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF1gXG4gICAgICogRGVmYXVsdCBpcyAxNlxuICAgICAqL1xuICBidWZmZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogRWxlbWVudCB0byBwYXNzIGFzIHRoZSBjaGlsZCBlbGVtZW50IG9mIHRoZSBhcnJvdztcbiAgICAgKiBVc2UgY2FzZSBpcyB0eXBpY2FsbHkgbGltaXRlZCB0byBhbiBhY2NvbXBhbnlpbmcgYEV1aUJlYWNvbmBcbiAgICAgKi9cbiAgYXJyb3dDaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZSBhIG5hbWUgdG8gdGhlIHBvcG92ZXIgcGFuZWxcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQWx0ZXJuYXRpdmUgb3B0aW9uIHRvIGBhcmlhLWxhYmVsYCB0aGF0IHRha2VzIGFuIGBpZGAuXG4gICAgICogVXN1YWxseSB0YWtlcyB0aGUgYGlkYCBvZiB0aGUgcG9wb3ZlciB0aXRsZVxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBFdWlNdXRhdGlvbk9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgX2luaGVyaXRzKEV1aU11dGF0aW9uT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlNdXRhdGlvbk9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlNdXRhdGlvbk9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpTXV0YXRpb25PYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMsIG9ic2VydmVyKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbk11dGF0aW9uKHJlY29yZHMsIG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNoaWxkTm9kZSA9IF90aGlzLmNoaWxkTm9kZTtcbiAgICAgIF90aGlzLm9ic2VydmVyID0gbWFrZU11dGF0aW9uT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5wcm9wcy5vYnNlcnZlck9wdGlvbnMsIF90aGlzLm9uTXV0YXRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEV1aU11dGF0aW9uT2JzZXJ2ZXI7XG59KEV1aU9ic2VydmVyKTtcblxudmFyIG1ha2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gbWFrZU11dGF0aW9uT2JzZXJ2ZXIobm9kZSwgX29ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spIHtcbiAgLy8gSUUxMSBhbmQgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgcG9seWZpbGwgdXNlZCBpbiBLaWJhbmEgKGZvciBKZXN0KSBpbXBsZW1lbnRcbiAgLy8gYW4gb2xkZXIgc3BlYyBpbiB3aGljaCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmBcbiAgLy8gd2l0aG91dCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVzYCByZXN1bHRzIGluIGEgYFN5bnRheEVycm9yYC5cbiAgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBwYXRjaGVzIHRoZSBuZXdlciBzcGVjIGluIHdoaWNoIGBhdHRyaWJ1dGVzOiB0cnVlYCBjYW4gYmVcbiAgLy8gaW1wbGllZCB3aGVuIGFwcHJvcHJpYXRlIChgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgIGlzIHNwZWNpZmllZCkuXG4gIHZhciBvYnNlcnZlck9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBfb2JzZXJ2ZXJPcHRpb25zKTtcblxuICB2YXIgbmVlZHNBdHRyaWJ1dGVzID0gb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVPbGRWYWx1ZScpIHx8IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlRmlsdGVyJyk7XG5cbiAgaWYgKG5lZWRzQXR0cmlidXRlcyAmJiAhb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVzJykpIHtcbiAgICBvYnNlcnZlck9wdGlvbnMuYXR0cmlidXRlcyA9IHRydWU7XG4gIH1cblxuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgb2JzZXJ2ZXJPcHRpb25zKTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcblxuZXhwb3J0IHZhciB1c2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIGNhbGxiYWNrLCBvYnNlcnZlck9wdGlvbnMpIHtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNvbnRhaW5lciwgb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIC8vIGlnbm9yZSBjaGFuZ2luZyBvYnNlcnZlck9wdGlvbnNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFtjb250YWluZXIsIGNhbGxiYWNrXSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcblxuICAvLyBXZSBhcmUgd29ya2luZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBjbGljayBldmVudCBpc1xuICAvLyBlcXVpdmFsZW50IHRvIGEgc2VxdWVudGlhbCwgY29tcG91bmQgcHJlc3MgYW5kIHJlbGVhc2Ugb2ZcbiAgLy8gdGhlIHBvaW50aW5nIGRldmljZSAobW91c2UsIGZpbmdlciwgc3R5bHVzLCBldGMuKS5cbiAgLy8gQSBjbGljayBldmVudCdzIHRhcmdldCBjYW4gYmUgaW1wcmVjaXNlLCBhcyB0aGUgdmFsdWUgd2lsbCBiZVxuICAvLyB0aGUgY2xvc2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHByZXNzIChtb3VzZWRvd24sIHRvdWNoc3RhcnQpXG4gIC8vIGFuZCByZWxlYXNlIChtb3VzZXVwLCB0b3VjaGVuZCkgZXZlbnRzIChvZnRlbiA8Ym9keSAvPikgaWZcbiAgLy8gdGhlIHRoZSB0YXJnZXQgb2YgZWFjaCBldmVudCBkaWZmZXJzLlxuICAvLyBXZSBuZWVkIHRoZSBhY3R1YWwgZXZlbnQgdGFyZ2V0cyB0byBtYWtlIHRoZSBjb3JyZWN0IGRlY2lzaW9uc1xuICAvLyBhYm91dCB1c2VyIGludGVudGlvbi4gU28sIGNvbnNpZGVyIHRoZSBkb3duL3N0YXJ0IGFuZCB1cC9lbmRcbiAgLy8gaXRlbXMgYmVsb3cgYXMgdGhlIGRlY29uc3RydWN0aW9uIG9mIGEgY2xpY2sgZXZlbnQuXG4gIGZ1bmN0aW9uIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpOyAvLyB0aGUgaWQgaXMgdXNlZCB0byBpZGVudGlmeSB3aGljaCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvclxuICAgIC8vIGlzIHRoZSBzb3VyY2Ugb2YgYSBjbGljayBldmVudDsgYXMgdGhlIGNsaWNrIGV2ZW50IGJ1YmJsZXNcbiAgICAvLyB1cCBhbmQgcmVhY2hlcyB0aGUgY2xpY2sgZGV0ZWN0b3IncyBjaGlsZCBjb21wb25lbnQgdGhlXG4gICAgLy8gaWQgdmFsdWUgaXMgc3RhbXBlZCBvbiB0aGUgZXZlbnQuIFRoaXMgaWQgaXMgaW5zcGVjdGVkXG4gICAgLy8gaW4gdGhlIGRvY3VtZW50J3MgY2xpY2sgaGFuZGxlciwgYW5kIGlmIHRoZSBpZCBkb2Vzbid0XG4gICAgLy8gZXhpc3Qgb3IgZG9lc24ndCBtYXRjaCB0aGlzIGRldGVjdG9yJ3MgaWQsIHRoZW4gdHJpZ2dlclxuICAgIC8vIHRoZSBvdXRzaWRlQ2xpY2sgY2FsbGJhY2suXG4gICAgLy9cbiAgICAvLyBUYWtpbmcgdGhpcyBhcHByb2FjaCBpbnN0ZWFkIG9mIGNoZWNraW5nIGlmIHRoZSBldmVudCdzXG4gICAgLy8gdGFyZ2V0IGVsZW1lbnQgZXhpc3RzIGluIHRoaXMgY29tcG9uZW50J3MgRE9NIHN1Yi10cmVlIGlzXG4gICAgLy8gbmVjZXNzYXJ5IGZvciBoYW5kbGluZyBjbGlja3Mgb3JpZ2luYXRpbmcgZnJvbSBjaGlsZHJlblxuICAgIC8vIHJlbmRlcmVkIHRocm91Z2ggUmVhY3QncyBwb3J0YWxzIChFdWlQb3J0YWwpLiBUaGUgaWQgdHJhY2tpbmdcbiAgICAvLyB3b3JrcyBiZWNhdXNlIFJlYWN0IGd1YXJhbnRlZXMgdGhlIGV2ZW50IGJ1YmJsZXMgdGhyb3VnaCB0aGVcbiAgICAvLyB2aXJ0dWFsIERPTSBhbmQgZXhlY3V0ZXMgRXVpQ2xpY2tEZXRlY3RvcidzIG9uQ2xpY2sgaGFuZGxlcixcbiAgICAvLyBzdGFtcGluZyB0aGUgaWQgZXZlbiB0aG91Z2ggdGhlIGV2ZW50IG9yaWdpbmF0ZXMgb3V0c2lkZVxuICAgIC8vIHRoaXMgY29tcG9uZW50J3MgcmVpZmllZCBET00gdHJlZS5cblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNhcHR1cmVkRG93bklkc1wiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbk91dHNpZGVDbGljayA9IF90aGlzJHByb3BzLm9uT3V0c2lkZUNsaWNrO1xuXG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlbnQgPSBlO1xuXG4gICAgICBpZiAoZXZlbnQuZXVpR2VuZXJhdGVkQnkgJiYgZXZlbnQuZXVpR2VuZXJhdGVkQnkuaW5jbHVkZXMoX3RoaXMuaWQpIHx8IF90aGlzLmNhcHR1cmVkRG93bklkcy5pbmNsdWRlcyhfdGhpcy5pZCkpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICByZXR1cm4gb25PdXRzaWRlQ2xpY2soZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRDbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQsIGNiKSB7XG4gICAgICAvLyB0byBzdXBwb3J0IG5lc3RlZCBjbGljayBkZXRlY3RvcnMsIGJ1aWxkIGFuIGFycmF5XG4gICAgICAvLyBvZiBkZXRlY3RvciBpZHMgdGhhdCBoYXZlIGJlZW4gZW5jb3VudGVyZWQ7XG4gICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuaGFzT3duUHJvcGVydHkoJ2V1aUdlbmVyYXRlZEJ5JykpIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkucHVzaChfdGhpcy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5uYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeSA9IFtfdGhpcy5pZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChjYikgY2IoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBuYXRpdmVFdmVudCA9IGUubmF0aXZlRXZlbnQ7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IG5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5O1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZURvd24pIF90aGlzLnByb3BzLm9uTW91c2VEb3duKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KSBfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkTW91c2VVcFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uQ2hpbGRDbGljayhldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VVcCkgX3RoaXMucHJvcHMub25Nb3VzZVVwKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaEVuZCkgX3RoaXMucHJvcHMub25Ub3VjaEVuZChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuaWQgPSBodG1sSWRHZW5lcmF0b3IoKSgpO1xuICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMpLCB7XG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uQ2hpbGRNb3VzZURvd24sXG4gICAgICAgIG9uVG91Y2hTdGFydDogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvbk1vdXNlVXA6IHRoaXMub25DaGlsZE1vdXNlVXAsXG4gICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25DaGlsZE1vdXNlVXBcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHByb3BzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3I7XG59KENvbXBvbmVudCk7XG5FdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBvbk91dHNpZGVDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInBvc2l0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfYXJyb3cuc3R5bGVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nXTtcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlckFycm93ID0gZnVuY3Rpb24gRXVpUG9wb3ZlckFycm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3ZlckFycm93LCBzdHlsZXNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1wb3BvdmVyLWFycm93XCI6IHBvc2l0aW9uLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUG9wb3ZlckFycm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQmFja2dyb3VuZENvbG9yLCBsb2dpY2FscywgbG9naWNhbFNpemVDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIHBvcG92ZXJBcnJvd1NpemUgPSAnbSc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lOyAvLyBNYXRjaCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiBwYW5lbHNcblxuICB2YXIgYm9yZGVyQ29sb3IgPSBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncGxhaW4nKTtcbiAgdmFyIGFycm93U2l6ZSA9IGV1aVRoZW1lLnNpemVbcG9wb3ZlckFycm93U2l6ZV07XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJBcnJvdzogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCImOmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCI7fTtsYWJlbDpldWlQb3BvdmVyQXJyb3c7XCIpLFxuICAgIC8vIFBPU0lUSU9OU1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy5ib3R0b20sIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMucmlnaHQsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5sZWZ0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6cmlnaHQ7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZSBhbmNob3Igd3JhcHBlclxuICAgIGV1aVBvcG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpldWlQb3BvdmVyO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNPcGVuXCIsIFwiaXNBdHRhY2hlZFwiLCBcInBvc2l0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uLy4uL3BhbmVsL3BhbmVsJztcbmltcG9ydCB7IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfcGFuZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7XG4gIHBhZGRpbmdTaXplOiAnbCdcbn0pO1xuXG4vKipcbiAqICpJTlRFUk5BTCBPTkxZKlxuICogUHVyZWx5IGZvciByZS11c2Ugb2Ygc3R5bGluZ1xuICovXG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbCA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJQYW5lbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzT3BlbiA9IF9yZWYuaXNPcGVuLFxuICAgICAgaXNBdHRhY2hlZCA9IF9yZWYuaXNBdHRhY2hlZCxcbiAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgcGFuZWxDb250ZXh0ID0gdXNlQ29udGV4dChFdWlQb3BvdmVyUGFuZWxDb250ZXh0KTtcbiAgaWYgKHJlc3QucGFkZGluZ1NpemUpIHBhbmVsQ29udGV4dC5wYWRkaW5nU2l6ZSA9IHJlc3QucGFkZGluZ1NpemU7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpOyAvLyBVc2luZyBCRU0gY2hpbGQgY2xhc3MgZm9yIEJXQ1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fcGFuZWwnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBwYW5lbENTUyA9IFtzdHlsZXMuZXVpUG9wb3Zlcl9fcGFuZWwsIGlzT3BlbiAmJiBzdHlsZXMuaXNPcGVuLCBpc09wZW4gJiYgcG9zaXRpb24gJiYgc3R5bGVzW3Bvc2l0aW9uXV07XG5cbiAgaWYgKGlzQXR0YWNoZWQpIHtcbiAgICBwYW5lbENTUyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocGFuZWxDU1MpLCBbaXNPcGVuICYmIHN0eWxlcy5hdHRhY2hlZC5pc09wZW4sIHBvc2l0aW9uICYmIHN0eWxlcy5hdHRhY2hlZFtwb3NpdGlvbl1dKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGFuZWxDb250ZXh0XG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBwYW5lbENTUyxcbiAgICBcImRhdGEtcG9wb3Zlci1wYW5lbFwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb3BvdmVyLW9wZW5cIjogaXNPcGVuIHx8IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn07XG5FdWlQb3BvdmVyUGFuZWwucHJvcFR5cGVzID0ge1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKSxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNBdHRhY2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInBhZGRpbmdTaXplXCIsIFwiYm9yZGVyUmFkaXVzXCIsIFwiY29sb3JcIiwgXCJoYXNTaGFkb3dcIiwgXCJoYXNCb3JkZXJcIiwgXCJncm93XCIsIFwicGFuZWxSZWZcIiwgXCJlbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MsIHVzZUV1aVBhZGRpbmdDU1MsIEJBQ0tHUk9VTkRfQ09MT1JTLCBQQURESU5HX1NJWkVTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGV1aVBhbmVsU3R5bGVzIH0gZnJvbSAnLi9wYW5lbC5zdHlsZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFBBRERJTkdfU0laRVM7IC8vIEV4cG9ydGVkIHBhZGRpbmcgc2l6ZXMgYW5kIGNsYXNzIG5hbWVzIG5lY2Vzc2FyeSBmb3IgRXVpUG9wb3ZlciBhbmQgRXVpQ2FyZC5cbi8vIFdoaWNoIGN1cnJlbnRseSB3aWxsIG9ubHkgbWFpbnRhaW4gc3VwcG9ydCBmb3IgdGhlIG9yaWdpbmFsIHZhbHVlcyB1bnRpbCBjb252ZXJzaW9uLlxuXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ3BhZGRpbmdTbWFsbCcsXG4gIG06ICdwYWRkaW5nTWVkaXVtJyxcbiAgbDogJ3BhZGRpbmdMYXJnZSdcbn07XG5cbnZhciBfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG5cbmV4cG9ydCB2YXIgQk9SREVSX1JBRElJID0gWydub25lJywgJ20nXTtcbmV4cG9ydCB2YXIgQ09MT1JTID0gQkFDS0dST1VORF9DT0xPUlM7XG5leHBvcnQgdmFyIEV1aVBhbmVsID0gZnVuY3Rpb24gRXVpUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZiRwYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRwYWRkaW5nU2l6ZSxcbiAgICAgIF9yZWYkYm9yZGVyUmFkaXVzID0gX3JlZi5ib3JkZXJSYWRpdXMsXG4gICAgICBib3JkZXJSYWRpdXMgPSBfcmVmJGJvcmRlclJhZGl1cyA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRib3JkZXJSYWRpdXMsXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3BsYWluJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZiRoYXNTaGFkb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NoYWRvdyxcbiAgICAgIF9yZWYkaGFzQm9yZGVyID0gX3JlZi5oYXNCb3JkZXIsXG4gICAgICBoYXNCb3JkZXIgPSBfcmVmJGhhc0JvcmRlciA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhhc0JvcmRlcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICBwYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7IC8vIFNoYWRvd3MgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZXJlJ3MgYSB3aGl0ZSBiYWNrZ3JvdW5kIChwbGFpbilcblxuICB2YXIgY2FuSGF2ZVNoYWRvdyA9ICFoYXNCb3JkZXIgJiYgY29sb3IgPT09ICdwbGFpbic7XG4gIHZhciBjYW5IYXZlQm9yZGVyID0gY29sb3IgPT09ICdwbGFpbicgfHwgY29sb3IgPT09ICd0cmFuc3BhcmVudCc7XG4gIHZhciBzdHlsZXMgPSBldWlQYW5lbFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBhbmVsLCBncm93ICYmIHN0eWxlcy5ncm93LCBzdHlsZXMucmFkaXVzW2JvcmRlclJhZGl1c10sIHVzZUV1aVBhZGRpbmdDU1MoKVtwYWRkaW5nU2l6ZV0sIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpW2NvbG9yXSwgY2FuSGF2ZVNoYWRvdyAmJiBoYXNTaGFkb3cgPT09IHRydWUgJiYgc3R5bGVzLmhhc1NoYWRvdywgY2FuSGF2ZUJvcmRlciAmJiBoYXNCb3JkZXIgPT09IHRydWUgJiYgc3R5bGVzLmhhc0JvcmRlciwgcmVzdC5vbkNsaWNrICYmIHN0eWxlcy5pc0NsaWNrYWJsZV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFuZWwnLCBcImV1aVBhbmVsLS1cIi5jb25jYXQoY29sb3IpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpUGFuZWwtLVwiLmNvbmNhdChwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdKSwgY2xhc3NOYW1lKTtcblxuICBpZiAocmVzdC5vbkNsaWNrICYmIGVsZW1lbnQgIT09ICdkaXYnKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBwYW5lbFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHBhbmVsUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pXSksXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIlxufSA6IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUGFuZWw6IF9yZWYyLFxuICAgIGdyb3c6IF9yZWYsXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIGhhc0JvcmRlcjogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiOztsYWJlbDpoYXNCb3JkZXI7XCIpLFxuICAgIHJhZGl1czoge1xuICAgICAgbm9uZTogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpub25lO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICAvLyBTZXR1cCBpbnRlcmFjdGl2ZSBiZWhhdmlvclxuICAgIGlzQ2xpY2thYmxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246Ym94LXNoYWRvdyBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9JjplbmFibGVke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjt9Jjpob3ZlciwmOmZvY3Vze1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtjdXJzb3I6cG9pbnRlcjt9O2xhYmVsOmlzQ2xpY2thYmxlO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdywgZXVpU2hhZG93RmxhdCwgZXVpU2hhZG93TWVkaXVtIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciB0cmFuc2xhdGVEaXN0YW5jZSA9ICdzJztcbi8qKlxuICogMS4gQ2FuIGV4cGFuZCBmdXJ0aGVyLCBidXQgaXQgbG9va3Mgd2VpcmQgaWYgaXQncyBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmF0aW5nIGJ1dHRvbi5cbiAqIDIuIEFuaW1hdGlvbiBoYXBwZW5zIG9uIHRoZSBwYW5lbC4gQnV0IGRvbid0IGFuaW1hdGUgcG9zaXRpb24gd2hlbiB1c2luZyB0aGUgYXR0YWNoZWQgbW9kZSBsaWtlIGZvciBpbnB1dHNcbiAqIDMuIE1ha2Ugc3VyZSB0aGUgcGFuZWwgc3RheXMgd2l0aGluIHRoZSB3aW5kb3cuXG4gKi9cblxuZXhwb3J0IHZhciBldWlQb3BvdmVyUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUG9wb3Zlcl9fcGFuZWw6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDcsIFwicHhcIikpLCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgXCJjYWxjKDEwMHZ3IC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueGwsIFwiKVwiKSksIFwiO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWigwKTtcIiwgZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgcHJvcGVydHk6ICdmaWx0ZXInXG4gICAgfSksIFwiICY6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6MDt9O2xhYmVsOmV1aVBvcG92ZXJfX3BhbmVsO1wiKSxcbiAgICAvLyBJcyB2aXNpYmxlIC8gb3BlblxuICAgIGlzT3BlbjogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBjYWxjKFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgKyAxMDBtcyk7fTtsYWJlbDppc09wZW47XCIpLFxuICAgIC8vIFBvc2l0aW9uc1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKFwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoLVwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoLVwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAvLyBBdHRhY2hlZCB2ZXJzaW9uIG92ZXJyaWRlc1xuICAgIGF0dGFjaGVkOiB7XG4gICAgICBpc09wZW46IC8qI19fUFVSRV9fKi9jc3MoXCJmaWx0ZXI6bm9uZTtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiO307bGFiZWw6aXNPcGVuO1wiKSxcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3dGbGF0KGV1aVRoZW1lQ29udGV4dCksIFwiOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpib3R0b207XCIpLFxuICAgICAgLy8gU2F0aXNmaWVzIFRTXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRleHRUcmFuc2Zvcm1cIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUaXRsZVN0eWxlcyB9IGZyb20gJy4vdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgVElUTEVfU0laRVMgPSBbJ3h4eHMnLCAneHhzJywgJ3hzJywgJ3MnLCAnbScsICdsJ107XG5leHBvcnQgdmFyIFRFWFRfVFJBTlNGT1JNID0gWyd1cHBlcmNhc2UnXTtcbmV4cG9ydCB2YXIgRXVpVGl0bGUgPSBmdW5jdGlvbiBFdWlUaXRsZShfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRpdGxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGl0bGUsIHRleHRUcmFuc2Zvcm0gPyBzdHlsZXNbdGV4dFRyYW5zZm9ybV0gOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGl0bGUnLCBjbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpVGl0bGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIHRleHRUcmFuc2Zvcm06IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGl0bGVcIiwgXCJ0aXRsZUVsZW1lbnRcIiwgXCJ0aXRsZVNpemVcIiwgXCJpY29uXCIsIFwiaW1hZ2VcIiwgXCJjaGlsZHJlblwiLCBcImZvb3RlclwiLCBcIm9uQ2xpY2tcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwidGV4dEFsaWduXCIsIFwiYmV0YUJhZGdlUHJvcHNcIiwgXCJsYXlvdXRcIiwgXCJzZWxlY3RhYmxlXCIsIFwiZGlzcGxheVwiLCBcInBhZGRpbmdTaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZSc7XG5pbXBvcnQgeyBFdWlCZXRhQmFkZ2UgfSBmcm9tICcuLi9iYWRnZS9iZXRhX2JhZGdlJztcbmltcG9ydCB7IEV1aUNhcmRTZWxlY3QsIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IgfSBmcm9tICcuL2NhcmRfc2VsZWN0JztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQ2FyZC0tbGVmdEFsaWduZWQnLFxuICBjZW50ZXI6ICdldWlDYXJkLS1jZW50ZXJBbGlnbmVkJyxcbiAgcmlnaHQ6ICdldWlDYXJkLS1yaWdodEFsaWduZWQnXG59O1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0ga2V5c09mKHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwKTtcbnZhciBsYXlvdXRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgdmVydGljYWw6ICcnLFxuICBob3Jpem9udGFsOiAnZXVpQ2FyZC0taG9yaXpvbnRhbCdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTk1FTlRTID0ga2V5c09mKGxheW91dFRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogQ2VydGFpbiBwcm9wcyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlIGxheW91dCBpcyB2ZXJ0aWNhbFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ2FyZCA9IGZ1bmN0aW9uIEV1aUNhcmQoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIF9yZWYkdGl0bGVFbGVtZW50ID0gX3JlZi50aXRsZUVsZW1lbnQsXG4gICAgICB0aXRsZUVsZW1lbnQgPSBfcmVmJHRpdGxlRWxlbWVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiR0aXRsZUVsZW1lbnQsXG4gICAgICBfcmVmJHRpdGxlU2l6ZSA9IF9yZWYudGl0bGVTaXplLFxuICAgICAgdGl0bGVTaXplID0gX3JlZiR0aXRsZVNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGl0bGVTaXplLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIGltYWdlID0gX3JlZi5pbWFnZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZvb3RlciA9IF9yZWYuZm9vdGVyLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgYmV0YUJhZGdlUHJvcHMgPSBfcmVmLmJldGFCYWRnZVByb3BzLFxuICAgICAgX3JlZiRsYXlvdXQgPSBfcmVmLmxheW91dCxcbiAgICAgIGxheW91dCA9IF9yZWYkbGF5b3V0ID09PSB2b2lkIDAgPyAndmVydGljYWwnIDogX3JlZiRsYXlvdXQsXG4gICAgICBzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgICAgZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNDbGlja2FibGUgPSAhaXNEaXNhYmxlZCAmJiAob25DbGljayB8fCBocmVmIHx8IHNlbGVjdGFibGUgJiYgIXNlbGVjdGFibGUuaXNEaXNhYmxlZCk7XG4gIC8qKlxuICAgKiBGb3IgYTExeSwgd2Ugc2ltdWxhdGUgdGhlIHNhbWUgY2xpY2sgdGhhdCdzIHByb3ZpZGVkIG9uIHRoZSB0aXRsZSB3aGVuIGNsaWNraW5nIHRoZSB3aG9sZSBjYXJkXG4gICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHdob2xlIGNhcmQgYSBidXR0b24gb3IgYW5jaG9yIHRhZy5cbiAgICogKkNhcmQgQWNjZXNzaWJpbGl0eTogVGhlIHJlZHVuZGFudCBjbGljayBldmVudCBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy8qXG4gICAqL1xuXG4gIHZhciBsaW5rID0gbnVsbDtcblxuICB2YXIgb3V0ZXJPbkNsaWNrID0gZnVuY3Rpb24gb3V0ZXJPbkNsaWNrKGUpIHtcbiAgICBpZiAobGluayAmJiBsaW5rICE9PSBlLnRhcmdldCkge1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAobGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICBpZiAoaW1hZ2UgfHwgZm9vdGVyIHx8IHRleHRBbGlnbiAhPT0gJ2NlbnRlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpQ2FyZDogYGxheW91dD1cImhvcml6b250YWxcImAgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNlbGVjdGFibGVDb2xvckNsYXNzID0gc2VsZWN0YWJsZSA/IFwiZXVpQ2FyZC0taXNTZWxlY3RhYmxlLS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihzZWxlY3RhYmxlLmNvbG9yLCBzZWxlY3RhYmxlLmlzU2VsZWN0ZWQpKSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkJywgdGV4dEFsaWduVG9DbGFzc05hbWVNYXBbdGV4dEFsaWduXSwgbGF5b3V0VG9DbGFzc05hbWVNYXBbbGF5b3V0XSwge1xuICAgICdldWlDYXJkLS1pc0NsaWNrYWJsZSc6IGlzQ2xpY2thYmxlLFxuICAgICdldWlDYXJkLS1oYXNCZXRhQmFkZ2UnOiBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMubGFiZWwsXG4gICAgJ2V1aUNhcmQtLWhhc0ljb24nOiBpY29uLFxuICAgICdldWlDYXJkLS1pc1NlbGVjdGFibGUnOiBzZWxlY3RhYmxlLFxuICAgICdldWlDYXJkLWlzU2VsZWN0ZWQnOiBzZWxlY3RhYmxlID09PSBudWxsIHx8IHNlbGVjdGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGFibGUuaXNTZWxlY3RlZCxcbiAgICAnZXVpQ2FyZC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9LCBzZWxlY3RhYmxlQ29sb3JDbGFzcywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYURlc2MgPSBkZXNjcmlwdGlvbiA/IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJEZXNjcmlwdGlvblwiKSA6ICcnO1xuICAvKipcbiAgICogVG9wIGFyZWEgY29udGFpbmluZyBpbWFnZSwgaWNvbiBvciBib3RoXG4gICAqL1xuXG4gIHZhciBpbWFnZU5vZGU7XG5cbiAgaWYgKGltYWdlICYmIGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSB8fCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbWFnZU5vZGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2ltYWdlXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgPyBpbWFnZSA6IF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwge1xuICAgICAgICBzcmM6IGltYWdlLFxuICAgICAgICBhbHQ6IFwiXCJcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1hZ2VOb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgaWNvbk5vZGU7XG5cbiAgaWYgKGljb24pIHtcbiAgICBpY29uTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGljb24ucHJvcHMuY2xhc3NOYW1lLCAnZXVpQ2FyZF9faWNvbicpXG4gICAgfSk7XG4gIH1cblxuICB2YXIgb3B0aW9uYWxDYXJkVG9wO1xuXG4gIGlmIChpbWFnZU5vZGUgfHwgaWNvbk5vZGUpIHtcbiAgICBvcHRpb25hbENhcmRUb3AgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190b3BcIlxuICAgIH0sIGltYWdlTm9kZSwgaWNvbk5vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdWlCZXRhQmFkZ2VcbiAgICovXG5cblxuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2U7XG4gIHZhciBvcHRpb25hbEJldGFCYWRnZUlEID0gJyc7XG5cbiAgaWYgKGJldGFCYWRnZVByb3BzICE9PSBudWxsICYmIGJldGFCYWRnZVByb3BzICE9PSB2b2lkIDAgJiYgYmV0YUJhZGdlUHJvcHMubGFiZWwpIHtcbiAgICBvcHRpb25hbEJldGFCYWRnZUlEID0gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkJldGFCYWRnZVwiKTtcbiAgICBvcHRpb25hbEJldGFCYWRnZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19iZXRhQmFkZ2VXcmFwcGVyXCJcbiAgICB9LCBfX19FbW90aW9uSlNYKEV1aUJldGFCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IG9wdGlvbmFsQmV0YUJhZGdlSURcbiAgICB9LCBiZXRhQmFkZ2VQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlDYXJkX19iZXRhQmFkZ2UnLCBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMuY2xhc3NOYW1lKVxuICAgIH0pKSk7IC8vIEluY3JlYXNlIHBhZGRpbmcgc2l6ZSB3aGVuIHRoZXJlIGlzIGEgYmV0YSBiYWRnZSB1bmxlc3MgaXQncyBhbHJlYWR5IGRldGVybWluZWRcblxuICAgIHBhZGRpbmdTaXplID0gcGFkZGluZ1NpemUgfHwgJ2wnO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZWxlY3RhYmxlIGJ1dHRvblxuICAgKi9cblxuXG4gIGlmIChzZWxlY3RhYmxlICYmIGlzRGlzYWJsZWQgJiYgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsU2VsZWN0QnV0dG9uO1xuXG4gIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgb3B0aW9uYWxTZWxlY3RCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUNhcmRTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGUgXCIpLmNvbmNhdChhcmlhRGVzYylcbiAgICB9LCBzZWxlY3RhYmxlLCB7XG4gICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuICAvKipcbiAgICogV3JhcHMgdGhlIHRpdGxlIHdpdGggdGhlIGxpbmsgKDxhPikgb3IgYnV0dG9uLlxuICAgKiBUaGlzIG1ha2VzIHRoZSB0aXRsZSBlbGVtZW50IGExMXkgZnJpZW5kbHkgYW5kIGdldHMgZGVzY3JpYmVkIGJ5IGl0cyBjb250ZW50IGlmIGl0cyBpbnRlcmFjdGFibGUuXG4gICAqL1xuXG5cbiAgdmFyIHRoZVRpdGxlO1xuXG4gIGlmICghaXNEaXNhYmxlZCAmJiBocmVmKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVBbmNob3JcIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2MsXG4gICAgICByZWw6IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICByZWw6IHJlbFxuICAgICAgfSksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkIHx8IG9uQ2xpY2spIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQob3B0aW9uYWxCZXRhQmFkZ2VJRCwgXCIgXCIpLmNvbmNhdChhcmlhRGVzYyksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGVUaXRsZSA9IHRpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRpdGxlRWxlbWVudCB0byBhIGNhcGl0YWwgVGl0bGVFbGVtZW50XG4gICAqL1xuXG5cbiAgdmFyIFRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBpc0NsaWNrYWJsZSA/IG91dGVyT25DbGljayA6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/ICdzdWJkdWVkJyA6IGRpc3BsYXksXG4gICAgaGFzU2hhZG93OiBpc0Rpc2FibGVkIHx8IGRpc3BsYXkgPyBmYWxzZSA6IHRydWUsXG4gICAgaGFzQm9yZGVyOiBkaXNwbGF5ID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplXG4gIH0sIHJlc3QpLCBvcHRpb25hbENhcmRUb3AsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jb250ZW50XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaXRsZSwge1xuICAgIGlkOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGVcIiksXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlXCIsXG4gICAgc2l6ZTogdGl0bGVTaXplXG4gIH0sIF9fX0Vtb3Rpb25KU1goVGl0bGVFbGVtZW50LCBudWxsLCB0aGVUaXRsZSkpLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICBpZDogYXJpYURlc2MsXG4gICAgc2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Rlc2NyaXB0aW9uXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZGVzY3JpcHRpb24pKSwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2NoaWxkcmVuXCJcbiAgfSwgY2hpbGRyZW4pKSwgb3B0aW9uYWxCZXRhQmFkZ2UsIGxheW91dCA9PT0gJ3ZlcnRpY2FsJyAmJiBmb290ZXIgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Zvb3RlclwiXG4gIH0sIGZvb3RlciksIG9wdGlvbmFsU2VsZWN0QnV0dG9uKTtcbn07XG5FdWlDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2UgdG8gXCJob3Jpem9udGFsXCIgaWYgeW91IG5lZWQgdGhlIGljb24gdG8gYmUgbGVmdCBvZiB0aGUgY29udGVudC5cbiAgICAgICAqIEhvcml6b250YWwgbGF5b3V0cyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC5cbiAgICAgICAqL1xuICBsYXlvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJ2ZXJ0aWNhbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJob3Jpem9udGFsXCJdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIGFsaWdubWVudCBvZiB0aGUgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IGNvbWJpbmF0aW9uIG9mIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgZm9vdGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYSB1cmwgaW4gc3RyaW5nIGZvcm0gb3IgUmVhY3RFbGVtZW50IGZvciBhIGN1c3RvbSBpbWFnZSBjb21wb25lbnRcbiAgICAgICAqL1xuICBpbWFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDYXJkcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGFuZC9vciBjaGlsZHJlblxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIGhlYWRpbmcgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlRWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJzcGFuXCJdKSxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3Mgc2l6ZSwgbWF0Y2hpbmcgdGhhdCBvZiBFdWlUaXRsZS5cbiAgICAgICAqIFRob3VnaCwgY2FyZCB0aXRsZXMgY2FuJ3QgYmUgdG9vIGxhcmdlIG9yIHNtYWxsIHJlbGF0aXZlIHRvIHRoZSBkZXNjcmlwdGlvbiB0ZXh0LlxuICAgICAgICovXG4gIHRpdGxlU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJ4c1wiXSksXG4gIC8vIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkIGlmIGNoaWxkcmVuIGlzIG9taXR0ZWRcbiAgLy8gZGVzY3JpcHRpb24gYmVjb21lcyBvcHRpb25hbCB3aGVuIGNoaWxkcmVuIGlzIHByZXNlbnRcblxuICAvKipcbiAgICAgICAqIFBsYWNlZCB3aXRoaW4gYSBzbWFsbCBFdWlUZXh0IGA8cD5gIHRhZ1xuICAgICAgICovXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbiBgPEV1aUljb24+YCBub2RlIG9yIGBudWxsYFxuICAgICAgICovXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b20gY2hpbGRyZW5cbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBVc2Ugb25seSBpZiB5b3Ugd2FudCB0byBmb3JlZ28gYSBidXR0b24gaW4gdGhlIGZvb3RlciBhbmQgbWFrZSB0aGUgd2hvbGUgY2FyZCBjbGlja2FibGVcbiAgICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEFkZHMgYSBiYWRnZSB0byB0b3Agb2YgdGhlIGNhcmQgdG8gbGFiZWwgaXQgYXMgXCJCZXRhXCIgb3Igb3RoZXIgbm9uLUdBIHN0YXRlLlxuICAgICAgICogQWNjZXB0cyBhbGwgdGhlIHByb3BzIG9mIFtFdWlCZXRhQmFkZ2VdKCMvZGlzcGxheS9iYWRnZSNiZXRhLWJhZGdlLXR5cGUpLCB3aGVyZSBgbGFiZWxgIGlzIHJlcXVpcmVkLlxuICAgICAgICovXG4gIGJldGFCYWRnZVByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0byB0aGUgY29sb3IgcHJvcGVydHkgb2YgRXVpUGFuZWwuIElmIGRlZmluZWQsIHJlbW92ZXMgYW55IGJvcmRlciAmIHNoYWRvdy5cbiAgICAgICAqIExlYXZlIGFzIGB1bmRlZmluZWRgIHRvIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICogU2VsZWN0YWJsZSBjYXJkcyB3aWxsIGFsd2F5cyBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBhcHBsaWVkIGFyb3VuZCB0aGUgY29udGVudCBvZiB0aGUgY2FyZFxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJ1dHRvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBjYXJkIHRvIGFsbG93IGZvciBpbi1wbGFjZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICAgKi9cbiAgICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIElzIGluIHRoZSBzZWxlY3RlZCBzdGF0ZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgICAqL1xuICAgIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgYSBib3JkZXIgc3R5bGUgb2YgY2FyZCBpbnN0ZWFkIG9mIHNoYWRvd1xuICAgICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNvbG9yXCIsIFwiY2hpbGRyZW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FyZFNlbGVjdCA9IGZ1bmN0aW9uIEV1aUNhcmRTZWxlY3QoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZiRpc1NlbGVjdGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNTZWxlY3RlZCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNoaWxkID0gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQsIGNoaWxkcmVuKTtcbiAgdmFyIHNlbGVjdENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkU2VsZWN0JywgXCJldWlDYXJkU2VsZWN0LS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCkpLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3NlcyxcbiAgICBjb2xvcjogY29sb3IgfHwgJ3RleHQnLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGljb25UeXBlOiBpc1NlbGVjdGVkID8gJ2NoZWNrJyA6IHVuZGVmaW5lZCxcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGlzU2VsZWN0ZWRcbiAgfSwgcmVzdCksIGNoaWxkKTtcbn07XG5FdWlDYXJkU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJcyBpbiB0aGUgc2VsZWN0ZWQgc3RhdGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkLCBjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdGV4dDtcblxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0ZWRcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWRcIlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnVuYXZhaWxhYmxlXCIsXG4gICAgICBkZWZhdWx0OiBcIlVuYXZhaWxhYmxlXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RcIlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSB7XG4gIHZhciBjYWxjdWxhdGVkQ29sb3I7XG5cbiAgaWYgKGNvbG9yKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gY29sb3I7XG4gIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICdzdWNjZXNzJztcbiAgfSBlbHNlIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAndGV4dCc7XG4gIH1cblxuICByZXR1cm4gY2FsY3VsYXRlZENvbG9yO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCIsIFwidHlwZVwiLCBcImRpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsUHJvcHNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdHlwZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbkxpc3Q6ICdldWlDaGVja2JveC0taW5MaXN0J1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQ2hlY2tib3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNoZWNrYm94LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNoZWNrYm94KTtcblxuICBmdW5jdGlvbiBFdWlDaGVja2JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ2hlY2tib3gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCB1bmRlZmluZWQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldElucHV0UmVmXCIsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSBpbnB1dDtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDaGVja2JveCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGxhYmVsID0gX3RoaXMkcHJvcHMubGFiZWwsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMudHlwZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSBfdGhpcyRwcm9wcy5pbmRldGVybWluYXRlLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMuaW5wdXRSZWYsXG4gICAgICAgICAgbGFiZWxQcm9wcyA9IF90aGlzJHByb3BzLmxhYmVsUHJvcHMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveCcsIHR5cGUgJiYgdHlwZVRvQ2xhc3NOYW1lTWFwW3R5cGVdLCB7XG4gICAgICAgICdldWlDaGVja2JveC0tbm9MYWJlbCc6ICFsYWJlbCxcbiAgICAgICAgJ2V1aUNoZWNrYm94LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbExhYmVsO1xuXG4gICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgb3B0aW9uYWxMYWJlbCA9IF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgICAgICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgICAgICAgIGh0bWxGb3I6IGlkXG4gICAgICAgIH0pLCBsYWJlbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX2lucHV0XCIsXG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcmVmOiB0aGlzLnNldElucHV0UmVmXG4gICAgICB9LCByZXN0KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX3NxdWFyZVwiXG4gICAgICB9KSwgb3B0aW9uYWxMYWJlbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVJbmRldGVybWluYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludmFsaWRhdGVJbmRldGVybWluYXRlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRSZWYpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbmRldGVybWluYXRlID0gdGhpcy5wcm9wcy5pbmRldGVybWluYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDaGVja2JveDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNoZWNrYm94LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNoZWNrZWQ6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZVxufSk7XG5cbkV1aUNoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8vIG92ZXJyaWRpbmcgdG8gbWFrZSBpdCByZXF1aXJlZFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImluTGlzdFwiXSksXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiB3aGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgY2hlY2tib3ggcm93XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8bGFiZWwvPlxuICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZ3V0dGVyU2l6ZVwiLCBcImFsaWduSXRlbXNcIiwgXCJyZXNwb25zaXZlXCIsIFwianVzdGlmeUNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJ3cmFwXCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGd1dHRlclNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgeHM6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhU21hbGwnLFxuICBzOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJTbWFsbCcsXG4gIG06ICdldWlGbGV4R3JvdXAtLWd1dHRlck1lZGl1bScsXG4gIGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckxhcmdlJyxcbiAgeGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBHVVRURVJfU0laRVMgPSBrZXlzT2YoZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHN0cmV0Y2g6IG51bGwsXG4gIGZsZXhTdGFydDogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0ZsZXhTdGFydCcsXG4gIGZsZXhFbmQ6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNGbGV4RW5kJyxcbiAgY2VudGVyOiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zQ2VudGVyJyxcbiAgYmFzZWxpbmU6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNCYXNlbGluZSdcbn07XG5leHBvcnQgdmFyIEFMSUdOX0lURU1TID0ga2V5c09mKGFsaWduSXRlbXNUb0NsYXNzTmFtZU1hcCk7XG52YXIganVzdGlmeUNvbnRlbnRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZmxleFN0YXJ0OiBudWxsLFxuICBmbGV4RW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudEZsZXhFbmQnLFxuICBjZW50ZXI6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50Q2VudGVyJyxcbiAgc3BhY2VCZXR3ZWVuOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQmV0d2VlbicsXG4gIHNwYWNlQXJvdW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQXJvdW5kJyxcbiAgc3BhY2VFdmVubHk6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50U3BhY2VFdmVubHknXG59O1xuZXhwb3J0IHZhciBKVVNUSUZZX0NPTlRFTlRTID0ga2V5c09mKGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXApO1xudmFyIGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwID0ge1xuICByb3c6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvdycsXG4gIHJvd1JldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvd1JldmVyc2UnLFxuICBjb2x1bW46ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtbicsXG4gIGNvbHVtblJldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtblJldmVyc2UnXG59O1xuZXhwb3J0IHZhciBESVJFQ1RJT05TID0ga2V5c09mKGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwKTtcblxudmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBbJ2RpdicsICdzcGFuJ10uaW5jbHVkZXMoY29tcG9uZW50KTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmxleEdyb3VwID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGd1dHRlclNpemUgPSBfcmVmLmd1dHRlclNpemUsXG4gICAgICBndXR0ZXJTaXplID0gX3JlZiRndXR0ZXJTaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJGd1dHRlclNpemUsXG4gICAgICBfcmVmJGFsaWduSXRlbXMgPSBfcmVmLmFsaWduSXRlbXMsXG4gICAgICBhbGlnbkl0ZW1zID0gX3JlZiRhbGlnbkl0ZW1zID09PSB2b2lkIDAgPyAnc3RyZXRjaCcgOiBfcmVmJGFsaWduSXRlbXMsXG4gICAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgX3JlZiRqdXN0aWZ5Q29udGVudCA9IF9yZWYuanVzdGlmeUNvbnRlbnQsXG4gICAgICBqdXN0aWZ5Q29udGVudCA9IF9yZWYkanVzdGlmeUNvbnRlbnQgPT09IHZvaWQgMCA/ICdmbGV4U3RhcnQnIDogX3JlZiRqdXN0aWZ5Q29udGVudCxcbiAgICAgIF9yZWYkZGlyZWN0aW9uID0gX3JlZi5kaXJlY3Rpb24sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ3JvdycgOiBfcmVmJGRpcmVjdGlvbixcbiAgICAgIF9yZWYkd3JhcCA9IF9yZWYud3JhcCxcbiAgICAgIHdyYXAgPSBfcmVmJHdyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3cmFwLFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEdyb3VwJywgZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwW2d1dHRlclNpemVdLCBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXBbYWxpZ25JdGVtc10sIGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXBbanVzdGlmeUNvbnRlbnRdLCBkaXJlY3Rpb25Ub0NsYXNzTmFtZU1hcFtkaXJlY3Rpb25dLCB7XG4gICAgJ2V1aUZsZXhHcm91cC0tcmVzcG9uc2l2ZSc6IHJlc3BvbnNpdmUsXG4gICAgJ2V1aUZsZXhHcm91cC0td3JhcCc6IHdyYXBcbiAgfSwgY2xhc3NOYW1lKTtcblxuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNvbXBvbmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50LCBcIiBpcyBub3QgYSB2YWxpZCBlbGVtZW50IHR5cGUuIFVzZSBgZGl2YCBvciBgc3BhbmAuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnQgPT09ICdzcGFuJyA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufSk7XG5FdWlGbGV4R3JvdXAucHJvcFR5cGVzID0ge1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoW1wic3RyZXRjaFwiLCBcImZsZXhTdGFydFwiLCBcImZsZXhFbmRcIiwgXCJjZW50ZXJcIiwgXCJiYXNlbGluZVwiXSksXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIl0pLFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJyb3dcIiwgXCJyb3dSZXZlcnNlXCIsIFwiY29sdW1uXCIsIFwiY29sdW1uUmV2ZXJzZVwiXSksXG4gIGd1dHRlclNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwieHNcIiwgXCJzXCIsIFwibVwiLCBcImxcIiwgXCJ4bFwiXSksXG4gIGp1c3RpZnlDb250ZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZmxleFN0YXJ0XCIsIFwiZmxleEVuZFwiLCBcImNlbnRlclwiLCBcInNwYWNlQmV0d2VlblwiLCBcInNwYWNlQXJvdW5kXCIsIFwic3BhY2VFdmVubHlcIl0pLFxuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgd3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTtcbkV1aUZsZXhHcm91cC5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4R3JvdXAnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJncm93XCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgR1JPV19TSVpFUyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG5leHBvcnQgdmFyIEV1aUZsZXhJdGVtID0gZnVuY3Rpb24gRXVpRmxleEl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIENvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhbGlkYXRlR3Jvd1ZhbHVlKGdyb3cpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhJdGVtJywgX2RlZmluZVByb3BlcnR5KHtcbiAgICAnZXVpRmxleEl0ZW0tLWZsZXhHcm93WmVybyc6ICFncm93XG4gIH0sIFwiZXVpRmxleEl0ZW0tLWZsZXhHcm93XCIuY29uY2F0KGdyb3cpLCB0eXBlb2YgZ3JvdyA9PT0gJ251bWJlcicgPyBHUk9XX1NJWkVTLmluZGV4T2YoZ3JvdykgPj0gMCA6IHVuZGVmaW5lZCksIGNsYXNzTmFtZSk7XG4gIHJldHVybiAoLy8gQHRzLWlnbm9yZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IGByZXN0YCBhcHBsaWVzIHRvIGBDb21wb25lbnRgXG4gICAgX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbilcbiAgKTtcbn07XG5FdWlGbGV4SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ3JvdzogUHJvcFR5cGVzLm9uZU9mKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgdHJ1ZSwgZmFsc2UsIG51bGxdKSxcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyb3dWYWx1ZSh2YWx1ZSkge1xuICB2YXIgdmFsaWRWYWx1ZXMgPSBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZV0uY29uY2F0KEdST1dfU0laRVMpO1xuXG4gIGlmICh2YWxpZFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wIGBncm93YCBwYXNzZWQgdG8gYEV1aUZsZXhJdGVtYCBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAsIHJlY2VpdmVkIGBcIi5jb25jYXQodmFsdWUsIFwiYFwiKSk7XG4gIH1cbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJpY29uXCIsIFwiY2xlYXJcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImNsYXNzTmFtZVwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWFkT25seVwiLCBcImlzSW52YWxpZFwiLCBcImlzRHJvcGRvd25cIiwgXCJpbnB1dElkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgeyBJQ09OX1NJREVTIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Db250cm9sTGF5b3V0KTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wcy5pY29uLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHMuY2xlYXIsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMuZnVsbFdpZHRoLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzLmlzTG9hZGluZyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMuY29tcHJlc3NlZCxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMuYXBwZW5kLFxuICAgICAgICAgIHJlYWRPbmx5ID0gX3RoaXMkcHJvcHMucmVhZE9ubHksXG4gICAgICAgICAgaW52YWxpZCA9IF90aGlzJHByb3BzLmlzSW52YWxpZCxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMuaXNEcm9wZG93bixcbiAgICAgICAgICBpbnB1dElkID0gX3RoaXMkcHJvcHMuaW5wdXRJZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Jywge1xuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1yZWFkT25seSc6IHJlYWRPbmx5LFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBwcmVwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdwcmVwZW5kJywgcHJlcGVuZCwgaW5wdXRJZCk7XG4gICAgICB2YXIgYXBwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdhcHBlbmQnLCBhcHBlbmQsIGlucHV0SWQpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZXMsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiXG4gICAgICB9LCBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEljb25zLCB7XG4gICAgICAgIGljb246IGljb24sXG4gICAgICAgIGNsZWFyOiBjbGVhcixcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGlzSW52YWxpZDogaW52YWxpZCxcbiAgICAgICAgaXNEcm9wZG93bjogIXJlYWRPbmx5ICYmICFpc0Rpc2FibGVkICYmIGlzRHJvcGRvd25cbiAgICAgIH0pKSwgYXBwZW5kTm9kZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJTaWRlTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTaWRlTm9kZShzaWRlLCBub2RlcywgaW5wdXRJZCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygbm9kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvcm1MYWJlbChzaWRlLCBub2RlcywgaW5wdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChub2RlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBfdGhpcy5jcmVhdGVGb3JtTGFiZWwoc2lkZSwgaXRlbSwgaW5wdXRJZCkgOiBfdGhpcy5jcmVhdGVTaWRlTm9kZShzaWRlLCBpdGVtLCBpbmRleCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBlbmROb2RlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlRm9ybUxhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZvcm1MYWJlbChzaWRlLCBzdHJpbmcsIGlucHV0SWQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dElkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX1wiLmNvbmNhdChzaWRlKVxuICAgICAgfSwgc3RyaW5nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlU2lkZU5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU2lkZU5vZGUoc2lkZSwgbm9kZSwga2V5KSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChub2RlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcImV1aUZvcm1Db250cm9sTGF5b3V0X19cIi5jb25jYXQoc2lkZSksIG5vZGUucHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAga2V5OiBrZXlcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb3JtQ29udHJvbExheW91dDtcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9scyB0aGUgYWRkaW5nIG9mIGFuZCB2aXNpYmlsaXR5IG9mIGEgZG93biBhcnJvdyBpY29uXG4gICAgICAgKi9cbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb25uZWN0cyB0aGUgcHJlcGVuZCBhbmQgYXBwZW5kIGxhYmVscyB0byB0aGUgaW5wdXRcbiAgICAgICAqL1xuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJyZWZcIiwgXCJzaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5cbmZ1bmN0aW9uIGlzSWNvblNoYXBlKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpY29uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG59XG5cbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEljb25zKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMuaWNvbixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzLmlzRHJvcGRvd247XG4gICAgICB2YXIgaWNvblNpZGUgPSBpc0ljb25TaGFwZShpY29uKSAmJiBpY29uLnNpZGUgPyBpY29uLnNpZGUgOiAnbGVmdCc7XG4gICAgICB2YXIgY3VzdG9tSWNvbiA9IHRoaXMucmVuZGVyQ3VzdG9tSWNvbigpO1xuICAgICAgdmFyIGxvYWRpbmdTcGlubmVyID0gdGhpcy5yZW5kZXJMb2FkaW5nU3Bpbm5lcigpO1xuICAgICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpO1xuICAgICAgdmFyIGludmFsaWRJY29uID0gdGhpcy5yZW5kZXJJbnZhbGlkSWNvbigpO1xuICAgICAgdmFyIGRyb3Bkb3duSWNvbiA9IHRoaXMucmVuZGVyRHJvcGRvd25JY29uKCk7XG4gICAgICB2YXIgbGVmdEljb25zO1xuXG4gICAgICBpZiAoY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnRJY29ucyA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zXCJcbiAgICAgICAgfSwgY3VzdG9tSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodEljb25zOyAvLyBJZiB0aGUgaWNvbiBpcyBvbiB0aGUgcmlnaHQsIGl0IHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIGNsZWFyIGJ1dHRvbiBpbiB0aGUgRE9NLlxuXG4gICAgICBpZiAoY2xlYXJCdXR0b24gfHwgbG9hZGluZ1NwaW5uZXIgfHwgaXNJbnZhbGlkIHx8IGlzRHJvcGRvd24gfHwgY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByaWdodEljb25zID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucy0tcmlnaHRcIlxuICAgICAgICB9LCBjbGVhckJ1dHRvbiwgbG9hZGluZ1NwaW5uZXIsIGludmFsaWRJY29uLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyA/IGN1c3RvbUljb24gOiB1bmRlZmluZWQsIGRyb3Bkb3duSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBsZWZ0SWNvbnMsIHJpZ2h0SWNvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXN0b21JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1c3RvbUljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMyLmljb24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWljb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIE5vcm1hbGl6ZSB0aGUgaWNvbiB0byBhbiBvYmplY3QgaWYgaXQncyBhIHN0cmluZy5cblxuXG4gICAgICB2YXIgaWNvblByb3BzID0gaXNJY29uU2hhcGUoaWNvbikgPyBpY29uIDoge1xuICAgICAgICB0eXBlOiBpY29uXG4gICAgICB9O1xuXG4gICAgICB2YXIgaWNvblJlZiA9IGljb25Qcm9wcy5yZWYsXG4gICAgICAgICAgc2lkZSA9IGljb25Qcm9wcy5zaWRlLFxuICAgICAgICAgIGljb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGljb25Qcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGljb25SZWY6IGljb25SZWZcbiAgICAgIH0sIGljb25SZXN0KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEcm9wZG93bkljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMzLmlzRHJvcGRvd24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzRHJvcGRvd24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICB0eXBlOiBcImFycm93RG93blwiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ1NwaW5uZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ1NwaW5uZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczQuaXNMb2FkaW5nLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczQuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckJ1dHRvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckJ1dHRvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHM1LmNsZWFyLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFjbGVhcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nXG4gICAgICB9LCBjbGVhcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnZhbGlkSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnZhbGlkSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzNi5pc0ludmFsaWQsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIixcbiAgICAgICAgdHlwZTogXCJhbGVydFwiXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucztcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMucHJvcFR5cGVzID0ge1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaXplOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24tLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbicsIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ubGFiZWxcIixcbiAgICBkZWZhdWx0OiBcIkNsZWFyIGlucHV0XCJcbiAgfSwgZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBcImFyaWEtbGFiZWxcIjogbGFiZWxcbiAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvblwiLFxuICAgICAgdHlwZTogXCJjcm9zc1wiXG4gICAgfSkpO1xuICB9KTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInR5cGVcIiwgXCJpY29uUmVmXCIsIFwic2l6ZVwiLCBcImNvbG9yXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBpY29uUmVmID0gX3JlZi5pY29uUmVmLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbicsIGNsYXNzTmFtZSwge1xuICAgICdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24tLWNsaWNrYWJsZSc6IG9uQ2xpY2tcbiAgfSk7XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHJlZjogaWNvblJlZlxuICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogaWNvblJlZlxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBpY29uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBFdWlGb3JtTGFiZWwoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkdHlwZSxcbiAgICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtTGFiZWwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUxhYmVsLWlzRm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzSW52YWxpZCc6IGlzSW52YWxpZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pO1xuXG4gIGlmICh0eXBlID09PSAnbGVnZW5kJykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGVnZW5kXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpRm9ybUxhYmVsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pXSksXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIGlzTXV0YWJsZVJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAhPSBudWxsICYmIHJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpO1xufVxuXG5leHBvcnQgdmFyIEV1aVZhbGlkYXRhYmxlQ29udHJvbCA9IGZ1bmN0aW9uIEV1aVZhbGlkYXRhYmxlQ29udHJvbChfcmVmKSB7XG4gIHZhciBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGNvbnRyb2wgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRSZWYgPSBjaGlsZC5yZWY7XG4gIHZhciByZXBsYWNlZFJlZiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29udHJvbC5jdXJyZW50ID0gZWxlbWVudDsgLy8gQ2FsbCB0aGUgb3JpZ2luYWwgcmVmLCBpZiBhbnlcblxuICAgIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNoaWxkUmVmKGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNNdXRhYmxlUmVmKGNoaWxkUmVmKSkge1xuICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9LCBbY2hpbGRSZWZdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udHJvbC5jdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjsgLy8ganNkb20gZG9lc24ndCBwb2x5ZmlsbCB0aGlzIGZvciB0aGUgc2VydmVyLXNpZGVcbiAgICB9XG5cbiAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkoJ0ludmFsaWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5jdXJyZW50LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwge1xuICAgIHJlZjogcmVwbGFjZWRSZWYsXG4gICAgJ2FyaWEtaW52YWxpZCc6IGlzSW52YWxpZFxuICB9KTtcbn07XG5FdWlWYWxpZGF0YWJsZUNvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcmVmOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhlIGBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudGAgZnVuY3Rpb24gaGVscHMgc2V0dXAgdGhlIGNsYXNzTmFtZSBhcHBlbmR1bVxuICogZGVwZW5kaW5nIG9uIHRoZSBmb3JtIGNvbnRyb2wncyBjdXJyZW50IHNldHRpbmdzL3N0YXRlLlxuICpcbiAqIEBwYXJhbSBpY29uIHtib29sZWFufSBEb2VzIGl0IGNvbnRhaW4gYSBzdGF0aWMgaWNvbiBsaWtlIGFycm93RG93blxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBJcyBpdCBjdXJyZW50bHkgY2xlYXJhYmxlXG4gKiBAcGFyYW0gaXNMb2FkaW5nIHtib29sZWFufSBJcyBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICogQHBhcmFtIGlzSW52YWxpZCB7Ym9vbGVhbn0gSXQgaXMgY3VycmVudGx5IGludmFsaWRcbiAqIEBwYXJhbSBpc0Ryb3Bkb3duIHtib29sZWFufSBJdCBpcyBhcyBkcm9wZG93blxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gUmV0dXJucyB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBjbGFzc05hbWUgb2YgdGhlIGZvcm0gY29udHJvbDsgb3IgYHVuZGVmaW5lZGAgaWYgYWxsIGV2YWx1YXRlIHRvIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudChfcmVmKSB7XG4gIHZhciBpY29uID0gX3JlZi5pY29uLFxuICAgICAgY2xlYXIgPSBfcmVmLmNsZWFyLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGlzRHJvcGRvd24gPSBfcmVmLmlzRHJvcGRvd247XG4gIHZhciBudW1JY29ucyA9IFtpY29uLCBjbGVhciwgaXNJbnZhbGlkLCBpc0xvYWRpbmcsIGlzRHJvcGRvd25dLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtID09PSB0cnVlO1xuICB9KS5sZW5ndGg7IC8vIFRoaXMgY2xhc3NOYW1lIGlzIGFsc28gc3BlY2lmaWNhbGx5IHVzZWQgaW4gYHNyYy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2Zvcm0uc2Nzc2BcblxuICByZXR1cm4gbnVtSWNvbnMgPiAwID8gXCJldWlGb3JtQ29udHJvbExheW91dC0tXCIuY29uY2F0KG51bUljb25zLCBcImljb25zXCIpIDogdW5kZWZpbmVkO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcIm5hbWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzSW52YWxpZFwiLCBcImZ1bGxXaWR0aFwiLCBcImlzTG9hZGluZ1wiLCBcImlucHV0UmVmXCIsIFwiaW5jcmVtZW50YWxcIiwgXCJjb21wcmVzc2VkXCIsIFwib25TZWFyY2hcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImFwcGVuZFwiLCBcInByZXBlbmRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jyb3dzZXInO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgfSBmcm9tICcuLi92YWxpZGF0YWJsZV9jb250cm9sJztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dC9fbnVtX2ljb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNTZWFyY2hTdXBwb3J0ZWQgPSBmYWxzZTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZpZWxkU2VhcmNoLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZpZWxkU2VhcmNoKTtcblxuICBmdW5jdGlvbiBFdWlGaWVsZFNlYXJjaCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmllbGRTZWFyY2gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICB2YWx1ZTogX3RoaXMucHJvcHMudmFsdWUgfHwgU3RyaW5nKF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dEVsZW1lbnRcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYW51cHNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xlYXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gY2xlYXIgdGhlIGZpZWxkJ3MgdmFsdWVcbiAgICAgIC8vIDEuIFJlYWN0IGRvZXNuJ3QgbGlzdGVuIGZvciBgY2hhbmdlYCBldmVudHMsIGluc3RlYWQgaXQgbWFwcyBgaW5wdXRgIGV2ZW50cyB0byBgY2hhbmdlYFxuICAgICAgLy8gMi4gUmVhY3Qgb25seSBmaXJlcyB0aGUgbWFwcGVkIGBjaGFuZ2VgIGV2ZW50IGlmIHRoZSBlbGVtZW50J3MgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIC8vIDMuIEFuIGlucHV0J3MgdmFsdWUgaXMsIGluIGFkZGl0aW9uIHRvIG90aGVyIG1ldGhvZHMsIHRyYWNrZWQgYnkgaW50ZXJjZXB0aW5nIGVsZW1lbnQudmFsdWUgPSAnLi4uJ1xuICAgICAgLy9cbiAgICAgIC8vIFNvIHdlIGhhdmUgdG8gZ28gYmVsb3cgdGhlIGVsZW1lbnQncyB2YWx1ZSBzZXR0ZXIgdG8gYXZvaWQgUmVhY3QgaW50ZXJjZXB0aW5nIGl0LFxuICAgICAgLy8gb25seSB0aGVuIHdpbGwgUmVhY3QgdHJlYXQgdGhlIHZhbHVlIGFzIGRpZmZlcmVudCBhbmQgZmlyZSBpdHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzg5MjU0Ny93aGF0LWlzLXRoZS1iZXN0LXdheS10by10cmlnZ2VyLW9uY2hhbmdlLWV2ZW50LWluLXJlYWN0LWpzXG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpO1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIgPSBuYXRpdmVJbnB1dFZhbHVlID8gbmF0aXZlSW5wdXRWYWx1ZS5zZXQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuYXRpdmVJbnB1dFZhbHVlU2V0dGVyKSB7XG4gICAgICAgIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIuY2FsbChfdGhpcy5pbnB1dEVsZW1lbnQsICcnKTtcbiAgICAgIH0gLy8gZGlzcGF0Y2ggaW5wdXQgZXZlbnQsIHdpdGggSUUxMSBzdXBwb3J0L2ZhbGxiYWNrXG5cblxuICAgICAgdmFyIGV2ZW50O1xuXG4gICAgICBpZiAoJ0V2ZW50JyBpbiB3aW5kb3cgJiYgdHlwZW9mIEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSUUxMVxuICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgICBldmVudC5pbml0RXZlbnQoJ2lucHV0JywgdHJ1ZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSAvLyBzZXQgZm9jdXMgb24gdGhlIHNlYXJjaCBmaWVsZFxuXG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9KTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wcy5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzLm9uU2VhcmNoO1xuXG4gICAgICBpZiAob25TZWFyY2ggJiYgaW5jcmVtZW50YWwpIHtcbiAgICAgICAgb25TZWFyY2goJycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFJlZlwiLCBmdW5jdGlvbiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBfdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5pbnB1dFJlZihpbnB1dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5VXBcIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvblNlYXJjaCAmJiAoZXZlbnQua2V5ICE9PSBrZXlzLkVOVEVSICYmIGluY3JlbWVudGFsIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiAmJiAhaXNTZWFyY2hTdXBwb3J0ZWQpKSB7XG4gICAgICAgIG9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRmllbGRTZWFyY2gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgIGlzU2VhcmNoU3VwcG9ydGVkID0gQnJvd3Nlci5pc0V2ZW50U3VwcG9ydGVkKCdzZWFyY2gnLCB0aGlzLmlucHV0RWxlbWVudCk7XG5cbiAgICAgIGlmIChpc1NlYXJjaFN1cHBvcnRlZCkge1xuICAgICAgICB2YXIgb25TZWFyY2ggPSBmdW5jdGlvbiBvblNlYXJjaChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczIuaW5wdXRFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpczIuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlICE9PSBfdGhpczIuc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczIubmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczIuaXNJbnZhbGlkLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzMi5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wczIub25TZWFyY2gsXG4gICAgICAgICAgX2lzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMyLmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlOyAvLyBTZXQgYWN0dWFsIHZhbHVlIG9mIGlzQ2xlYXJhYmxlIGlmIHZhbHVlIGV4aXN0cyBhcyB3ZWxsXG5cbiAgICAgIHZhciBpc0NsZWFyYWJsZSA9IEJvb2xlYW4oX2lzQ2xlYXJhYmxlICYmIHZhbHVlICYmICFyZXN0LnJlYWRPbmx5ICYmICFyZXN0LmRpc2FibGVkKTtcbiAgICAgIHZhciBudW1JY29uc0NsYXNzID0gZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnQoe1xuICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUsXG4gICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICAgICAgfSk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpZWxkU2VhcmNoJywgbnVtSWNvbnNDbGFzcywge1xuICAgICAgICAnZXVpRmllbGRTZWFyY2gtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1pbkdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0xvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0NsZWFyYWJsZSc6IGlzQ2xlYXJhYmxlLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNJbnZhbGlkJzogaXNJbnZhbGlkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIHtcbiAgICAgICAgaWNvbjogXCJzZWFyY2hcIixcbiAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgY2xlYXI6IGlzQ2xlYXJhYmxlID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGVhcixcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY2xlYXJTZWFyY2hCdXR0b24nXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVZhbGlkYXRhYmxlQ29udHJvbCwge1xuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogXCJzZWFyY2hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlVcDogZnVuY3Rpb24gb25LZXlVcChlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5vbktleVVwKGUsIGluY3JlbWVudGFsLCBvblNlYXJjaCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogdGhpcy5zZXRSZWZcbiAgICAgIH0sIHJlc3QpKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGaWVsZFNlYXJjaDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUZpZWxkU2VhcmNoLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGluY3JlbWVudGFsOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlXG59KTtcblxuRXVpRmllbGRTZWFyY2gucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgW0VudGVyXSBPUiBvbiBjaGFuZ2UgaWYgdGhlIGluY3JlbWVudGFsIHByb3AgaXMgYHRydWVgLlxuICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRoZSBvbltFbnRlcl0gZnVuY3Rpb25hbGl0eSwgcHJlZmVyIHVzaW5nIG9uQ2hhbmdlXG4gICAgICovXG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgc2VhcmNoIHdpbGwgYmUgZXhlY3V0ZWQgKHRoYXQgaXMsIHRoZSBgb25TZWFyY2hgIHdpbGwgYmUgY2FsbGVkKSBhcyB0aGVcbiAgICAgKiB1c2VyIHR5cGVzLlxuICAgICAqL1xuICBpbmNyZW1lbnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogd2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXRcbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gV2UgZG9uJ3Qgbm9ybWFsbHkgdXNlICdJJyBwcmVmaXhlcywgdGhpcyBmaWxlIGlzIGFuIGV4Y2VwdGlvblxudmFyIEJyb3dzZXJJbXBsID0ge1xuICBpc0V2ZW50U3VwcG9ydGVkOiBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKG5hbWUsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJvblwiLmNvbmNhdChuYW1lKSBpbiBlbGVtZW50O1xuICB9XG59O1xuZXhwb3J0IHZhciBCcm93c2VyID0gT2JqZWN0LmZyZWV6ZShCcm93c2VySW1wbCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1FcnJvclRleHQgPSBmdW5jdGlvbiBFdWlGb3JtRXJyb3JUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUVycm9yVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1FcnJvclRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1IZWxwVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1IZWxwVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1IZWxwVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtSGVscFRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiaGVscFRleHRcIiwgXCJpc0ludmFsaWRcIiwgXCJlcnJvclwiLCBcImxhYmVsXCIsIFwibGFiZWxUeXBlXCIsIFwibGFiZWxBcHBlbmRcIiwgXCJoYXNFbXB0eUxhYmVsU3BhY2VcIiwgXCJmdWxsV2lkdGhcIiwgXCJjbGFzc05hbWVcIiwgXCJkZXNjcmliZWRCeUlkc1wiLCBcImRpc3BsYXlcIiwgXCJoYXNDaGlsZExhYmVsXCIsIFwiaWRcIiwgXCJpc0Rpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQsIENoaWxkcmVuIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlGb3JtSGVscFRleHQgfSBmcm9tICcuLi9mb3JtX2hlbHBfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtRXJyb3JUZXh0IH0gZnJvbSAnLi4vZm9ybV9lcnJvcl90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcm93OiBudWxsLFxuICByb3dDb21wcmVzc2VkOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCcsXG4gIGNvbHVtbkNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkIGV1aUZvcm1Sb3ctLWhvcml6b250YWwnLFxuICBjZW50ZXI6IG51bGwsXG4gIGNlbnRlckNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkJyxcbiAgY29sdW1uQ29tcHJlc3NlZFN3aXRjaDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQgZXVpRm9ybVJvdy0taG9yaXpvbnRhbCBldWlGb3JtUm93LS1oYXNTd2l0Y2gnXG59O1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IGtleXNPZihkaXNwbGF5VG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlGb3JtUm93ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb3JtUm93LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Sb3cpO1xuXG4gIGZ1bmN0aW9uIEV1aUZvcm1Sb3coKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Sb3cpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWQ6IF90aGlzLnByb3BzLmlkIHx8IGh0bWxJZEdlbmVyYXRvcigpKClcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvaW5nIHRoaXMgdG8gYWxsb3cgb25Gb2N1cyB0byBiZSBjYWxsZWQgY29ycmVjdGx5IGZyb20gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQgYXMgdGhpcyBjb21wb25lbnQgb3ZlcnJpZGVzIGl0XG4gICAgICB2YXIgb25DaGlsZEZvY3VzID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25Gb2N1cycpO1xuXG4gICAgICBpZiAob25DaGlsZEZvY3VzKSB7XG4gICAgICAgIG9uQ2hpbGRGb2N1cy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZDtcblxuICAgICAgICBpZiAoIWlzRm9jdXNlZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9pbmcgdGhpcyB0byBhbGxvdyBvbkJsdXIgdG8gYmUgY2FsbGVkIGNvcnJlY3RseSBmcm9tIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IGFzIHRoaXMgY29tcG9uZW50IG92ZXJyaWRlcyBpdFxuICAgICAgdmFyIG9uQ2hpbGRCbHVyID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25CbHVyJyk7XG5cbiAgICAgIGlmIChvbkNoaWxkQmx1cikge1xuICAgICAgICBvbkNoaWxkQmx1ci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9ybVJvdywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcmVmMiwgX2NoaWxkJHByb3BzJGRpc2FibGVkO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaGVscFRleHQgPSBfdGhpcyRwcm9wcy5oZWxwVGV4dCxcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wcy5lcnJvcixcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzLmxhYmVsLFxuICAgICAgICAgIGxhYmVsVHlwZSA9IF90aGlzJHByb3BzLmxhYmVsVHlwZSxcbiAgICAgICAgICBsYWJlbEFwcGVuZCA9IF90aGlzJHByb3BzLmxhYmVsQXBwZW5kLFxuICAgICAgICAgIGhhc0VtcHR5TGFiZWxTcGFjZSA9IF90aGlzJHByb3BzLmhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wcy5mdWxsV2lkdGgsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRlc2NyaWJlZEJ5SWRzID0gX3RoaXMkcHJvcHMuZGVzY3JpYmVkQnlJZHMsXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgaGFzQ2hpbGRMYWJlbCA9IF90aGlzJHByb3BzLmhhc0NoaWxkTGFiZWwsXG4gICAgICAgICAgcHJvcHNJZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBpZCA9IHRoaXMuc3RhdGUuaWQ7XG4gICAgICB2YXIgaGFzTGFiZWwgPSBsYWJlbCB8fCBsYWJlbEFwcGVuZDtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvdycsIHtcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0VtcHR5TGFiZWxTcGFjZSc6IGhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0xhYmVsJzogaGFzTGFiZWxcbiAgICAgIH0sIGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSwgLy8gU2FmZSB1c2Ugb2YgISBhcyBkZWZhdWx0IHByb3AgaXMgJ3JvdydcbiAgICAgIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb3B0aW9uYWxIZWxwVGV4dHM7XG5cbiAgICAgIGlmIChoZWxwVGV4dCkge1xuICAgICAgICB2YXIgaGVscFRleHRzID0gQXJyYXkuaXNBcnJheShoZWxwVGV4dCkgPyBoZWxwVGV4dCA6IFtoZWxwVGV4dF07XG4gICAgICAgIG9wdGlvbmFsSGVscFRleHRzID0gaGVscFRleHRzLm1hcChmdW5jdGlvbiAoaGVscFRleHQsIGkpIHtcbiAgICAgICAgICB2YXIga2V5ID0gdHlwZW9mIGhlbHBUZXh0ID09PSAnc3RyaW5nJyA/IGhlbHBUZXh0IDogaTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtSGVscFRleHQsIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1oZWxwLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgaGVscFRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsRXJyb3JzO1xuXG4gICAgICBpZiAoZXJyb3IgJiYgaXNJbnZhbGlkKSB7XG4gICAgICAgIHZhciBlcnJvclRleHRzID0gQXJyYXkuaXNBcnJheShlcnJvcikgPyBlcnJvciA6IFtlcnJvcl07XG4gICAgICAgIG9wdGlvbmFsRXJyb3JzID0gZXJyb3JUZXh0cy5tYXAoZnVuY3Rpb24gKGVycm9yLCBpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6IGk7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUVycm9yVGV4dCwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWVycm9yLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsTGFiZWw7XG4gICAgICB2YXIgaXNMZWdlbmQgPSBsYWJlbCAmJiBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdmFyIGxhYmVsSWQgPSBcIlwiLmNvbmNhdChpZCwgXCItbGFiZWxcIik7XG5cbiAgICAgIGlmIChoYXNMYWJlbCkge1xuICAgICAgICB2YXIgbGFiZWxQcm9wcyA9IHt9O1xuXG4gICAgICAgIGlmIChpc0xlZ2VuZCkge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSB7XG4gICAgICAgICAgICB0eXBlOiBsYWJlbFR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaHRtbEZvcjogaGFzQ2hpbGRMYWJlbCA/IGlkIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgIWlzRGlzYWJsZWQgJiYge1xuICAgICAgICAgICAgaXNGb2N1c2VkOiB0aGlzLnN0YXRlLmlzRm9jdXNlZFxuICAgICAgICAgIH0pLCB7fSwge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJvdyBpcyBkaXNhYmxlZCwgZG9uJ3QgcGFzcyB0aGUgaXNGb2N1c2VkIHN0YXRlLlxuICAgICAgICAgICAgdHlwZTogbGFiZWxUeXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25hbExhYmVsID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsXCIsXG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgICAgICAgaWQ6IGxhYmVsSWRcbiAgICAgICAgfSwgbGFiZWxQcm9wcyksIGxhYmVsKSwgbGFiZWxBcHBlbmQgJiYgJyAnLCBsYWJlbEFwcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25hbFByb3BzID0ge307XG4gICAgICAvKipcbiAgICAgICAqIFNhZmUgdXNlIG9mICEgYXMgZGVmYXVsdCBwcm9wIGlzIFtdXG4gICAgICAgKi9cblxuICAgICAgdmFyIGRlc2NyaWJpbmdJZHMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZGVzY3JpYmVkQnlJZHMpO1xuXG4gICAgICBpZiAob3B0aW9uYWxIZWxwVGV4dHMpIHtcbiAgICAgICAgb3B0aW9uYWxIZWxwVGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uYWxIZWxwVGV4dCkge1xuICAgICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2gob3B0aW9uYWxIZWxwVGV4dC5wcm9wcy5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uYWxFcnJvcnMpIHtcbiAgICAgICAgb3B0aW9uYWxFcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKGVycm9yLnByb3BzLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXNjcmliaW5nSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0aW9uYWxQcm9wc1snYXJpYS1kZXNjcmliZWRieSddID0gZGVzY3JpYmluZ0lkcy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICAgICAgdmFyIGZpZWxkID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgLy8gQWxsb3cgdGhlIGNoaWxkJ3MgZGlzYWJsZWQgb3IgaXNEaXNhYmxlZCBwcm9wIHRvIHN1cGVyY2VkZSB0aGUgYGlzRGlzYWJsZWRgXG4gICAgICAgIGRpc2FibGVkOiAoX3JlZjIgPSAoX2NoaWxkJHByb3BzJGRpc2FibGVkID0gY2hpbGQucHJvcHMuZGlzYWJsZWQpICE9PSBudWxsICYmIF9jaGlsZCRwcm9wcyRkaXNhYmxlZCAhPT0gdm9pZCAwID8gX2NoaWxkJHByb3BzJGRpc2FibGVkIDogY2hpbGQucHJvcHMuaXNEaXNhYmxlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogaXNEaXNhYmxlZCxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyXG4gICAgICB9LCBvcHRpb25hbFByb3BzKSk7XG4gICAgICB2YXIgZmllbGRXcmFwcGVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlcicsIHtcbiAgICAgICAgZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyRGlzcGxheU9ubHk6XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYWZlIHVzZSBvZiAhIGFzIGRlZmF1bHQgcHJvcCBpcyAncm93J1xuICAgICAgICAgKi9cbiAgICAgICAgZGlzcGxheS5zdGFydHNXaXRoKCdjZW50ZXInKVxuICAgICAgfSk7XG4gICAgICB2YXIgc2hhcmVkUHJvcHMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1yb3dcIilcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIG9wdGlvbmFsTGFiZWwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGZpZWxkV3JhcHBlckNsYXNzZXNcbiAgICAgIH0sIGZpZWxkLCBvcHRpb25hbEVycm9ycywgb3B0aW9uYWxIZWxwVGV4dHMpKTtcblxuICAgICAgcmV0dXJuIGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyBfX19FbW90aW9uSlNYKFwiZmllbGRzZXRcIiwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCByZXN0KSwgY29udGVudHMpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHJlc3QpLCBjb250ZW50cyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZvcm1Sb3c7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb3JtUm93LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRpc3BsYXk6ICdyb3cnLFxuICBoYXNFbXB0eUxhYmVsU3BhY2U6IGZhbHNlLFxuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBkZXNjcmliZWRCeUlkczogW10sXG4gIGxhYmVsVHlwZTogJ2xhYmVsJyxcbiAgaGFzQ2hpbGRMYWJlbDogdHJ1ZVxufSk7XG5cbkV1aUZvcm1Sb3cucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0cyB0byByZW5kZXJpbmcgYSBgPGxhYmVsPmAgYnV0IGlmIHBhc3NlZCBgJ2xlZ2VuZCdgIGZvciBsYWJlbFR5cGUsXG4gICAgICogd2lsbCByZW5kZXIgYm90aCBhIGA8bGVnZW5kPmAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250YWluZXIgYXMgYSBgPGZpZWxkc2V0PmBcbiAgICAgKi9cbiAgbGFiZWxUeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKV0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgcm93Q29tcHJlc3NlZGAsIGp1c3QgdGlnaHRlbnMgdXAgdGhlIHNwYWNpbmc7XG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkYCBpZiBjb21wcmVzc2VkXG4gICAgICogYW5kIGhvcml6b250YWwgbGF5b3V0IGlzIG5lZWRlZC5cbiAgICAgKiBTZXQgdG8gYGNlbnRlcmAgb3IgYGNlbnRlckNvbXByZXNzZWRgIHRvIGFsaWduIG5vbi1pbnB1dFxuICAgICAqIGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIHJvd3MuXG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCBpZiB0aGUgZm9ybSBjb250cm9sIGJlaW5nIHBhc3NlZFxuICAgICAqIGFzIHRoZSBjaGlsZCBpcyBhIHN3aXRjaC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIGByb3dDb21wcmVzc2VkYCwganVzdCB0aWdodGVucyB1cCB0aGUgc3BhY2luZztcbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRgIGlmIGNvbXByZXNzZWRcbiAgICAgKiBhbmQgaG9yaXpvbnRhbCBsYXlvdXQgaXMgbmVlZGVkLlxuICAgICAqIFNldCB0byBgY2VudGVyYCBvciBgY2VudGVyQ29tcHJlc3NlZGAgdG8gYWxpZ24gbm9uLWlucHV0XG4gICAgICogY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgcm93cy5cbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIGlmIHRoZSBmb3JtIGNvbnRyb2wgYmVpbmcgcGFzc2VkXG4gICAgICogYXMgdGhlIGNoaWxkIGlzIGEgc3dpdGNoLlxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wicm93XCIsIFwicm93Q29tcHJlc3NlZFwiLCBcImNvbHVtbkNvbXByZXNzZWRcIiwgXCJjZW50ZXJcIiwgXCJjZW50ZXJDb21wcmVzc2VkXCIsIFwiY29sdW1uQ29tcHJlc3NlZFN3aXRjaFwiXSksXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgZGVzY3JpYmVkQnlJZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuICBoYXNDaGlsZExhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgbGFiZWxBcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBlcnJvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaGVscFRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbG9zZVwiLCBcInRpdGxlXCIsIFwib25IZWlnaHRDaGFuZ2VcIiwgXCJ0cmFuc2l0aW9uVHlwZVwiLCBcInRyYW5zaXRpb25EaXJlY3Rpb25cIiwgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBcIm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlXCIsIFwiaXRlbXNcIiwgXCJpbml0aWFsRm9jdXNlZEl0ZW1JbmRleFwiLCBcInNob3dOZXh0UGFuZWxcIiwgXCJzaG93UHJldmlvdXNQYW5lbFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBjYXNjYWRpbmdNZW51S2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZih0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbmV4dDoge1xuICAgIGluOiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eEluTGVmdCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dExlZnQnXG4gIH0sXG4gIHByZXZpb3VzOiB7XG4gICAgaW46ICdldWlDb250ZXh0TWVudVBhbmVsLXR4SW5SaWdodCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dFJpZ2h0J1xuICB9XG59O1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudVBhbmVsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb250ZXh0TWVudVBhbmVsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbnRleHRNZW51UGFuZWwpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51UGFuZWwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVQYW5lbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiYWNrQnV0dG9uXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluaXRpYWxQb3BvdmVyUGFyZW50XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZpbmRNZW51SXRlbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGl0ZW1zO1xuXG4gICAgICBpZiAoIV90aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICBpZiAoISgoX3RoaXMkcHJvcHMkaXRlbXMgPSBfdGhpcy5wcm9wcy5pdGVtcykgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkaXRlbXMgIT09IHZvaWQgMCAmJiBfdGhpcyRwcm9wcyRpdGVtcy5sZW5ndGgpKSByZXR1cm47IC8vIFdlIG9ubHkgbmVlZCBtZW51IGl0ZW1zL2Fycm93IGtleSBuYXZpZ2F0aW9uIGZvciB0aGUgYGl0ZW1zYCBBUElcblxuICAgICAgaWYgKF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIG1lbnUgaXRlbXMsIG5vIG5lZWQgdG8gY29udGludWVcblxuICAgICAgdmFyIHRhYmJhYmxlSXRlbXMgPSB0YWJiYWJsZShfdGhpcy5wYW5lbCk7XG5cbiAgICAgIGlmICh0YWJiYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUl0ZW1zOiB0YWJiYWJsZUl0ZW1zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzTWVudUl0ZW1cIiwgZnVuY3Rpb24gKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJG1lbnVJdGVtcztcblxuICAgICAgdmFyIGluZGV4T2Zmc2V0ID0gZGlyZWN0aW9uID09PSAndXAnID8gLTEgOiAxO1xuICAgICAgdmFyIG5leHRGb2N1c2VkSXRlbUluZGV4O1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gZGlyZWN0aW9uID09PSAndXAnID8gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICsgaW5kZXhPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPT09IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBuZXh0Rm9jdXNlZEl0ZW1JbmRleFxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXNbbmV4dEZvY3VzZWRJdGVtSW5kZXhdKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0YXRlJG1lbnVJdGVtcy5mb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIElmIHRoaXMgcGFuZWwgY29udGFpbnMgaXRlbXMgeW91IGNhbiB1c2UgdGhlIGxlZnQgYXJyb3cga2V5IHRvIGdvIGJhY2sgYXQgYW55IHRpbWUuXG4gICAgICAvLyBCdXQgaWYgaXQgZG9lc24ndCBjb250YWluIGl0ZW1zLCB0aGVuIHlvdSBoYXZlIHRvIGZvY3VzIG9uIHRoZSBiYWNrIGJ1dHRvbiBzcGVjaWZpY2FsbHksXG4gICAgICAvLyBzaW5jZSB0aGVyZSBjb3VsZCBiZSBjb250ZW50IGluc2lkZSB0aGUgcGFuZWwgd2hpY2ggcmVxdWlyZXMgdXNlIG9mIHRoZSBsZWZ0IGFycm93IGtleSxcbiAgICAgIC8vIGUuZy4gdGV4dCBpbnB1dHMuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wcy5vbkNsb3NlLFxuICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMuc2hvd1ByZXZpb3VzUGFuZWw7XG5cbiAgICAgIGlmIChvbkNsb3NlICYmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5iYWNrQnV0dG9uIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgaWYgKHNob3dQcmV2aW91c1BhbmVsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCgpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5UQUI6XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBOT1RFOiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHN0YWxlIGlmIG5vdCB3cmFwcGVkIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpOyAvLyBXZSBuZWVkIHRvIHN5bmMgb3VyIGludGVybmFsIHN0YXRlIHdpdGggdGhlIHVzZXIgdGFiYmluZyB0aHJvdWdoIGl0ZW1zXG5cblxuICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogZm9jdXNlZEl0ZW1JbmRleCA+PSAwICYmIGZvY3VzZWRJdGVtSW5kZXggPCBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoID8gZm9jdXNlZEl0ZW1JbmRleCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1VQOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgndXAnKTtcblxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgnZG93bicpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1JJR0hUOlxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKG9uQ2xvc2UgJiYgX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA/IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggLSAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICAgICAgICAgIDogX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlY2xhaW1Qb3BvdmVyRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZUhlaWdodCgpO1xuXG4gICAgICBfdGhpcy5nZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpO1xuXG4gICAgICBfdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpdGVtczogX3RoaXMucHJvcHMuaXRlbXNcbiAgICAgIH0sXG4gICAgICBtZW51SXRlbXM6IFtdLFxuICAgICAgZm9jdXNlZEl0ZW1JbmRleDogcHJvcHMub25DbG9zZSAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsID8gcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggKyAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICA6IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgY3VycmVudEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZSxcbiAgICAgIHRvb2tJbml0aWFsRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH0gLy8gRmluZCBhbGwgdGFiYmFibGUgbWVudSBpdGVtcyBvbiBib3RoIHBhbmVsIGluaXQgYW5kXG4gIC8vIHdoZW5ldmVyIGBtZW51SXRlbXNgIHJlc2V0cyB3aGVuIGBwcm9wcy5pdGVtc2AgY2hhbmdlc1xuXG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbnRleHRNZW51UGFuZWwsIFt7XG4gICAga2V5OiBcInRha2VJbml0aWFsRm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFrZUluaXRpYWxGb2N1cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBHaXZlIHBvc2l0aW9uaW5nIHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBmb2N1cyBpcyBhcHBsaWVkLiBPdGhlcndpc2UgcGFnZSBqdW1wcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMyLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRG9uJ3QgdGFrZSBmb2N1cyB5ZXQgaWYgRXVpQ29udGV4dE1lbnUgaXMgaW4gYSBwb3BvdmVyXG4gICAgICAgIC8vIGFuZCB0aGUgcG9wb3ZlciBpcyBpbml0aWFsbHkgb3BlbmluZy90cmFuc2l0aW9uaW5nIGluXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmluaXRpYWxQb3BvdmVyUGFyZW50ICYmIF90aGlzMi5zdGF0ZS53YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU2V0dGluZyBmb2N1cyB3aGlsZSB0cmFuc2l0aW9uaW5nIGNhdXNlcyB0aGUgYW5pbWF0aW9uIHRvIGdsaXRjaCwgc28gd2UgaGF2ZSB0byB3YWl0XG4gICAgICAgIC8vIHVudGlsIGl0J3MgZmluaXNoZWQgYmVmb3JlIHdlIGZvY3VzIGFueXRoaW5nLlxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5wcm9wcy50cmFuc2l0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBfdGhpczIkcGFuZWw7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcGFuZWwgaXMgdHJhbnNpdGlvbmluZywgc2V0IGZvY3VzIHRvIHRoZSBwYW5lbCBzbyB0aGF0IHVzZXJzIHVzaW5nXG4gICAgICAgICAgLy8gYXJyb3cga2V5cyB0aGF0IGFyZSBmYXN0IGNsaWNrZXJzIGRvbid0IGFjY2lkZW50YWxseSBnZXQgc3RyYW5kZWQgZm9jdXNcbiAgICAgICAgICAvLyBvciB0cmlnZ2VyIGtleXN0cm9rZXMgd2hlbiBpdCBzaG91bGRuJ3RcbiAgICAgICAgICAoX3RoaXMyJHBhbmVsID0gX3RoaXMyLnBhbmVsKSA9PT0gbnVsbCB8fCBfdGhpczIkcGFuZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzMiRwYW5lbC5mb2N1cyh7XG4gICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEluaXRpYWwgZm9jdXMgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLCBubyBuZWVkIHRvIGNvbnRpbnVlIGFuZCBwb3RlbnRpYWxseSBoaWphY2svZm9jdXMgZmlnaHRcblxuXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUudG9va0luaXRpYWxGb2N1cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJZiBhbiBpdGVtIHNob3VsZCBiZSBmb2N1c2VkLCBmb2N1cyBpdCAoaWYgaXQgZXhpc3RzKVxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgJiYgX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW0gPSBfdGhpczIuc3RhdGUubWVudUl0ZW1zW190aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4XTtcblxuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiB0aGUgYmFjayBidXR0b24gcGFuZWwgdGl0bGUgaXMgcHJlc2VudCwgZm9jdXMgaXRcblxuXG4gICAgICAgIGlmIChfdGhpczIuYmFja0J1dHRvbikge1xuICAgICAgICAgIC8vIEZvY3VzIHRoZSBiYWNrIGJ1dHRvbiBmb3IgYm90aCBgaXRlbXNgIGFuZCBgY2hpbGRyZW5gIEFQSXNcbiAgICAgICAgICBfdGhpczIuYmFja0J1dHRvbi5mb2N1cygpOyAvLyBJZiBgaXRlbXNgLCBlbnN1cmUgb3VyIGZvY3VzZWQgaXRlbSBpbmRleCBpcyBjb3JyZWN0XG5cblxuICAgICAgICAgIGlmIChfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gRm9jdXMgb24gdGhlIHBhbmVsIGFzIGEgbGFzdCByZXNvcnQuXG5cblxuICAgICAgICBpZiAoX3RoaXMyLnBhbmVsICYmICFfdGhpczIucGFuZWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBfdGhpczIucGFuZWwuZm9jdXMoKTtcblxuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF8sIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5tZW51SXRlbXMgIT09IHRoaXMuc3RhdGUubWVudUl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgICAgfSAvLyBGb2N1cyBpc24ndCBhbHdheXMgcmVhZHkgdG8gYmUgdGFrZW4gb24gbW91bnQsIHNvIHdlIG5lZWQgdG8gY2FsbCBpdFxuICAgICAgLy8gb24gdXBkYXRlIGFzIHdlbGwganVzdCBpbiBjYXNlXG5cblxuICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSWYgRXVpQ29udGV4dE1lbnUgaXMgdXNlZCB3aXRoaW4gYW4gRXVpUG9wb3Zlciwgd2UgbmVlZCB0byB3YWl0IGZvciBFdWlQb3BvdmVyIHRvOlxuICAgICAgLy8gMS4gQ29ycmVjdGx5IHNldCBpdHMgYHJldHVybkZvY3VzYCB0byB0aGUgdG9nZ2xpbmcgYnV0dG9uLFxuICAgICAgLy8gICAgc28gZm9jdXMgaXMgY29ycmVjdGx5IHJlc3RvcmVkIHRvIHRoZSBwb3BvdmVyIHRvZ2dsZSBvbiBjbG9zZVxuICAgICAgLy8gMi4gRmluaXNoIGl0cyByZWFjdC1mb2N1cy1vbiBgYXV0b0ZvY3VzYCBiZWhhdmlvciBhZnRlciB0cmFuc2l0aW9uaW5nIGluLFxuICAgICAgLy8gICAgc28gdGhlIHBhbmVsIGNhbiBoYW5kbGUgaXRzIG93biBmb2N1cyB3aXRob3V0IGZvY3VzIGZpZ2h0aW5nXG4gICAgICBpZiAodGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzLCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRpbml0aWFsUG9wb3ZlclA7XG5cbiAgICAgIChfdGhpcyRpbml0aWFsUG9wb3ZlclAgPSB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRpbml0aWFsUG9wb3ZlclAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGluaXRpYWxQb3BvdmVyUC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cyk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlSGVpZ2h0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUhlaWdodCgpIHtcbiAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuY2xpZW50SGVpZ2h0IDogMDtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZShjdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxQb3BvdmVyUGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxQb3BvdmVyUGFyZW50KCkge1xuICAgICAgdmFyIF9wYXJlbnQkcGFyZW50Tm9kZTtcblxuICAgICAgLy8gSWYgYHRyYW5zaXRpb25UeXBlYCBleGlzdHMsIHRoYXQgbWVhbnMgd2UncmUgbmF2aWdhdGluZyBiZXR3ZWVuIHBhbmVsc1xuICAgICAgLy8gYW5kIHRoZSBpbml0aWFsIHBvcG92ZXIgaGFzIGFscmVhZHkgbG9hZGVkLCBzbyB3ZSBzaG91bGRuJ3QgbmVlZCB0aGlzIGxvZ2ljXG4gICAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uVHlwZSkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYW5lbC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA9IHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aUNvbnRleHRNZW51Jyk7IC8vIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIEV1aUNvbnRleHRNZW51UGFuZWwgZGlyZWN0bHkgaW4gYSBwb3BvdmVyIHdpdGhvdXRcbiAgICAgIC8vIGFuIEV1aUNvbnRleHRNZW51LCBzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgd2hlbiBzZWFyY2hpbmcgcGFyZW50IG5vZGVzXG5cbiAgICAgIHZhciBwb3BvdmVyUGFyZW50ID0gaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPyBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmVudCRwYXJlbnROb2RlID0gcGFyZW50LnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9wYXJlbnQkcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRwYXJlbnROb2RlLnBhcmVudE5vZGUgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc1BvcG92ZXJQYXJlbnQgPSAhIXBvcG92ZXJQYXJlbnQuZGF0YXNldC5wb3BvdmVyUGFuZWw7XG4gICAgICBpZiAoIWhhc1BvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQgPSBwb3BvdmVyUGFyZW50O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2UsXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczIudGl0bGUsXG4gICAgICAgICAgb25IZWlnaHRDaGFuZ2UgPSBfdGhpcyRwcm9wczIub25IZWlnaHRDaGFuZ2UsXG4gICAgICAgICAgdHJhbnNpdGlvblR5cGUgPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvblR5cGUsXG4gICAgICAgICAgdHJhbnNpdGlvbkRpcmVjdGlvbiA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uRGlyZWN0aW9uLFxuICAgICAgICAgIG9uVHJhbnNpdGlvbkNvbXBsZXRlID0gX3RoaXMkcHJvcHMyLm9uVHJhbnNpdGlvbkNvbXBsZXRlLFxuICAgICAgICAgIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlID0gX3RoaXMkcHJvcHMyLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgICAgIHNob3dOZXh0UGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd05leHRQYW5lbCxcbiAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93UHJldmlvdXNQYW5lbCxcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBwYW5lbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgdmFyIHRpdGxlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZScsIHNpemUgJiYgdGl0bGVTaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0pO1xuXG4gICAgICAgIGlmIChCb29sZWFuKG9uQ2xvc2UpKSB7XG4gICAgICAgICAgcGFuZWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aXRsZUNsYXNzZXMsXG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLmJhY2tCdXR0b24gPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb250ZXh0TWVudVBhbmVsVGl0bGVCdXR0b25cIlxuICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faXRlbUxheW91dFwiXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICB0eXBlOiBcImFycm93TGVmdFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2ljb25cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX3RleHRcIlxuICAgICAgICAgIH0sIHRpdGxlKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhbmVsVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGl0bGVDbGFzc2VzXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0XCJcbiAgICAgICAgICB9LCB0aXRsZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbCcsIGNsYXNzTmFtZSwgdHJhbnNpdGlvbkRpcmVjdGlvbiAmJiB0cmFuc2l0aW9uVHlwZSAmJiB0cmFuc2l0aW9uRGlyZWN0aW9uQW5kVHlwZVRvQ2xhc3NOYW1lTWFwW3RyYW5zaXRpb25EaXJlY3Rpb25dID8gdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcFt0cmFuc2l0aW9uRGlyZWN0aW9uXVt0cmFuc2l0aW9uVHlwZV0gOiB1bmRlZmluZWQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKE1lbnVJdGVtKSB7XG4gICAgICAgIHZhciBjbG9uZVByb3BzID0ge307XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLnNpemUgPSBzaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1lbnVJdGVtLnR5cGUgPT09IEV1aUNvbnRleHRNZW51SXRlbSA/IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoTWVudUl0ZW0sIGNsb25lUHJvcHMpIDogTWVudUl0ZW07XG4gICAgICB9KSA6IGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBvbkFuaW1hdGlvbkVuZDogdGhpcy5vblRyYW5zaXRpb25Db21wbGV0ZVxuICAgICAgfSwgcmVzdCksIHBhbmVsVGl0bGUsIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMudXBkYXRlSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHt9OyAvLyBDbGVhciByZWZzIHRvIG1lbnVJdGVtcyBpZiB3ZSdyZSBnZXR0aW5nIG5ldyBvbmVzLlxuXG4gICAgICBpZiAobmV4dFByb3BzLml0ZW1zICE9PSBwcmV2U3RhdGUucHJldlByb3BzLml0ZW1zKSB7XG4gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgbmV4dFN0YXRlLm1lbnVJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0U3RhdGUucHJldlByb3BzID0ge1xuICAgICAgICAgIGl0ZW1zOiBuZXh0UHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRzVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb250ZXh0TWVudVBhbmVsO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29udGV4dE1lbnVQYW5lbCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpdGVtczogW11cbn0pO1xuXG5FdWlDb250ZXh0TWVudVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQpLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25IZWlnaHRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25Db21wbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd05leHRQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dQcmV2aW91c1BhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICB0cmFuc2l0aW9uRGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wibmV4dFwiLCBcInByZXZpb3VzXCJdKSxcbiAgdHJhbnNpdGlvblR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJpblwiLCBcIm91dFwiXSksXG5cbiAgLyoqXG4gICAgICogQWx0ZXJzIHRoZSBzaXplIG9mIHRoZSBpdGVtcyBhbmQgdGhlIHRpdGxlXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1BhbmVsXCIsIFwiaWNvblwiLCBcImJ1dHRvblJlZlwiLCBcImRpc2FibGVkXCIsIFwibGF5b3V0QWxpZ25cIiwgXCJ0b29sVGlwVGl0bGVcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQb3NpdGlvblwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpQ29udGV4dE1lbnVJdGVtLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgbGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMgPSB7XG4gIGNlbnRlcjogbnVsbCxcbiAgdG9wOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLXRvcCcsXG4gIGJvdHRvbTogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS1ib3R0b20nXG59O1xuZXhwb3J0IHZhciBMQVlPVVRfQUxJR04gPSBrZXlzT2YobGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMpO1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbnRleHRNZW51SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb250ZXh0TWVudUl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51SXRlbSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVJdGVtKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudUl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGhhc1BhbmVsID0gX3RoaXMkcHJvcHMuaGFzUGFuZWwsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgYnV0dG9uUmVmID0gX3RoaXMkcHJvcHMuYnV0dG9uUmVmLFxuICAgICAgICAgIF9kaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIF90aGlzJHByb3BzJGxheW91dEFsaSA9IF90aGlzJHByb3BzLmxheW91dEFsaWduLFxuICAgICAgICAgIGxheW91dEFsaWduID0gX3RoaXMkcHJvcHMkbGF5b3V0QWxpID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF90aGlzJHByb3BzJGxheW91dEFsaSxcbiAgICAgICAgICB0b29sVGlwVGl0bGUgPSBfdGhpcyRwcm9wcy50b29sVGlwVGl0bGUsXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBfdGhpcyRwcm9wcy50b29sVGlwQ29udGVudCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyR0b29sVGlwUG8gPSBfdGhpcyRwcm9wcy50b29sVGlwUG9zaXRpb24sXG4gICAgICAgICAgdG9vbFRpcFBvc2l0aW9uID0gX3RoaXMkcHJvcHMkdG9vbFRpcFBvID09PSB2b2lkIDAgPyAncmlnaHQnIDogX3RoaXMkcHJvcHMkdG9vbFRpcFBvLFxuICAgICAgICAgIGhyZWYgPSBfdGhpcyRwcm9wcy5ocmVmLFxuICAgICAgICAgIHRhcmdldCA9IF90aGlzJHByb3BzLnRhcmdldCxcbiAgICAgICAgICByZWwgPSBfdGhpcyRwcm9wcy5yZWwsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGljb25JbnN0YW5jZTtcbiAgICAgIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgICAgIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgICAgIGlmIChpY29uKSB7XG4gICAgICAgIHN3aXRjaCAoX3R5cGVvZihpY29uKSkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpY29uSW5zdGFuY2UgPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgdHlwZTogaWNvbixcbiAgICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faWNvblwiLFxuICAgICAgICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEFzc3VtZSBpdCdzIGFscmVhZHkgYW4gaW5zdGFuY2Ugb2YgYW4gaWNvbi5cbiAgICAgICAgICAgIGljb25JbnN0YW5jZSA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdldWlDb250ZXh0TWVudV9faWNvbidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvdztcblxuICAgICAgaWYgKGhhc1BhbmVsKSB7XG4gICAgICAgIGFycm93ID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgdHlwZTogXCJhcnJvd1JpZ2h0XCIsXG4gICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19hcnJvd1wiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51SXRlbScsIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2V1aUNvbnRleHRNZW51SXRlbS1pc0Rpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH0pO1xuICAgICAgdmFyIGxheW91dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudV9faXRlbUxheW91dCcsIGxheW91dEFsaWduVG9DbGFzc05hbWVzW2xheW91dEFsaWduXSk7XG5cbiAgICAgIHZhciBidXR0b25Jbm5lciA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBsYXlvdXRDbGFzc2VzXG4gICAgICB9LCBpY29uSW5zdGFuY2UsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbiksIGFycm93KTtcblxuICAgICAgdmFyIGJ1dHRvbjsgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gICAgICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cbiAgICAgIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgICAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIHJlbDogcmVsXG4gICAgICAgIH0pO1xuICAgICAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICAgICAgcmVmOiBidXR0b25SZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbklubmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICByZWY6IGJ1dHRvblJlZlxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uSW5uZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9vbFRpcENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICAgIHRpdGxlOiB0b29sVGlwVGl0bGUgPyB0b29sVGlwVGl0bGUgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZTogXCJldWktZGlzcGxheUJsb2NrXCIsXG4gICAgICAgICAgcG9zaXRpb246IHRvb2xUaXBQb3NpdGlvblxuICAgICAgICB9LCBidXR0b24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29udGV4dE1lbnVJdGVtO1xufShDb21wb25lbnQpO1xuRXVpQ29udGV4dE1lbnVJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICBoYXNQYW5lbDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlZCBpZiB1c2luZyBhIHRvb2x0aXAuIEFkZCBhbiBvcHRpb25hbCB0b29sdGlwIG9uIGhvdmVyXG4gICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbFRpcFRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBEaWN0YXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAuXG4gICAgICovXG4gIHRvb2xUaXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEhvdyB0byBhbGlnbiBpY29uIHdpdGggY29udGVudCBvZiBidXR0b25cbiAgICAgKi9cbiAgbGF5b3V0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJjZW50ZXJcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuXG4gIC8qKlxuICAgICAqIFJlZHVjZSB0aGUgc2l6ZSB0byBgc2Agd2hlbiBpbiBuZWVkIG9mIGEgbW9yZSBjb21wcmVzc2VkIG1lbnVcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIiwgXCJtYXJnaW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhvcml6b250YWxSdWxlU3R5bGVzIH0gZnJvbSAnLi9ob3Jpem9udGFsX3J1bGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydmdWxsJywgJ2hhbGYnLCAncXVhcnRlciddO1xuZXhwb3J0IHZhciBNQVJHSU5TID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xudmFyIG1hcmdpblRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICB4czogJ21hcmdpblhTbWFsbCcsXG4gIHM6ICdtYXJnaW5TbWFsbCcsXG4gIG06ICdtYXJnaW5NZWRpdW0nLFxuICBsOiAnbWFyZ2luTGFyZ2UnLFxuICB4bDogJ21hcmdpblhMYXJnZScsXG4gIHh4bDogJ21hcmdpblhYTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBFdWlIb3Jpem9udGFsUnVsZSA9IGZ1bmN0aW9uIEV1aUhvcml6b250YWxSdWxlKF9yZWYpIHtcbiAgdmFyIF9jbGFzc05hbWVzO1xuXG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdmdWxsJyA6IF9yZWYkc2l6ZSxcbiAgICAgIF9yZWYkbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBtYXJnaW4gPSBfcmVmJG1hcmdpbiA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRtYXJnaW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhvcml6b250YWxSdWxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIb3Jpem9udGFsUnVsZScsIChfY2xhc3NOYW1lcyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzTmFtZXMsIFwiZXVpSG9yaXpvbnRhbFJ1bGUtLVwiLmNvbmNhdChzaXplKSwgc2l6ZSksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgXCJldWlIb3Jpem9udGFsUnVsZS0tXCIuY29uY2F0KG1hcmdpblRvQ2xhc3NOYW1lTWFwW21hcmdpbl0pLCBtYXJnaW4gJiYgbWFyZ2luICE9PSAnbm9uZScpLCBfY2xhc3NOYW1lcyksIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhvcml6b250YWxSdWxlLCBzdHlsZXNbc2l6ZV0sIHN0eWxlc1ttYXJnaW5dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJoclwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlIb3Jpem9udGFsUnVsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBIUi5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhvcml6b250YWxSdWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlIb3Jpem9udGFsUnVsZTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpub25lO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MDs7bGFiZWw6ZXVpSG9yaXpvbnRhbFJ1bGU7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsO1wiKSxcbiAgICBoYWxmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6aGFsZjtcIiksXG4gICAgcXVhcnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOnF1YXJ0ZXI7XCIpLFxuICAgIC8vIE1hcmdpbnNcbiAgICBub25lOiAnJyxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZVwiLCBcInNob3dMYWJlbFwiLCBcInR5cGVcIiwgXCJsYWJlbFByb3BzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVN3aXRjaCA9IGZ1bmN0aW9uIEV1aVN3aXRjaChfcmVmKSB7XG4gIHZhciBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzaG93TGFiZWwgPSBfcmVmLnNob3dMYWJlbCxcbiAgICAgIHNob3dMYWJlbCA9IF9yZWYkc2hvd0xhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93TGFiZWwsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHN3aXRjaElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBpZFxuICB9KTtcbiAgdmFyIGxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5pZFxuICB9KTtcbiAgdmFyIG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBldmVudCA9IGU7XG4gICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gIH0sIFtjaGVja2VkLCBkaXNhYmxlZCwgb25DaGFuZ2VdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2gnLCB7XG4gICAgJ2V1aVN3aXRjaC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcblxuICBpZiAoc2hvd0xhYmVsID09PSBmYWxzZSAmJiB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKCdFdWlTd2l0Y2ggYGxhYmVsYCBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gYHNob3dMYWJlbGAgaXMgZmFsc2UuJyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBzd2l0Y2hJZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkIHx8IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2J1dHRvblwiLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogc2hvd0xhYmVsID8gdW5kZWZpbmVkIDogbGFiZWwsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2hvd0xhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2JvZHlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdGh1bWJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX3RyYWNrXCJcbiAgfSwgIWNvbXByZXNzZWQgJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjcm9zc1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb25cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjaGVja1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb24gZXVpU3dpdGNoX19pY29uLS1jaGVja2VkXCJcbiAgfSkpKSkpLCBzaG93TGFiZWwgJiYgLy8gPGJ1dHRvbj4gKyA8bGFiZWw+IGhhcyBwb29yIHNjcmVlbiByZWFkZXIgc3VwcG9ydC5cbiAgLy8gQ2xpY2sgaGFuZGxlciBhZGRlZCB0byBzaW11bGF0ZSBuYXR1cmFsLCBzZWNvbmRhcnkgPGxhYmVsPiBpbnRlcmFjdGl2aXR5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnNcbiAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBpZDogbGFiZWxJZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCBsYWJlbCkpO1xufTtcbkV1aVN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSByZW5kZXIgdGhlIHRleHQgbGFiZWxcbiAgICAgICAqL1xuICBzaG93TGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogTXVzdCBiZSBhIHN0cmluZyBpZiBgc2hvd0xhYmVsYCBwcm9wIGlzIGZhbHNlXG4gICAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wic3VibWl0XCIsIFwicmVzZXRcIiwgXCJidXR0b25cIl0pLFxuXG4gIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgbGFiZWwncyA8c3Bhbi8+XG4gICAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG59OyIsICJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsICJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmIChlLmluY2x1ZGVzKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCAiLy8gQGZsb3dcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcblxuY29uc3QgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPVxuICB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93XG4gID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgOiAoKSA9PiBEYXRlLm5vdygpO1xuXG5leHBvcnQgdHlwZSBUaW1lb3V0SUQgPSB7fFxuICBpZDogQW5pbWF0aW9uRnJhbWVJRCxcbnx9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQ6IFRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKTogVGltZW91dElEIHtcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGltZW91dElEOiBUaW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKSxcbiAgfTtcblxuICByZXR1cm4gdGltZW91dElEO1xufVxuIiwgIi8vIEBmbG93XG5cbmxldCBzaXplOiBudW1iZXIgPSAtMTtcblxuLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCB0eXBlIFJUTE9mZnNldFR5cGUgPVxuICB8ICduZWdhdGl2ZSdcbiAgfCAncG9zaXRpdmUtZGVzY2VuZGluZydcbiAgfCAncG9zaXRpdmUtYXNjZW5kaW5nJztcblxubGV0IGNhY2hlZFJUTFJlc3VsdDogUlRMT2Zmc2V0VHlwZSB8IG51bGwgPSBudWxsO1xuXG4vLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogUlRMT2Zmc2V0VHlwZSB7XG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gIGRhdGE6IFQsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xuZXhwb3J0IHR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTxcbiAgJFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+PlxuPjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIE9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBba2V5OiBzdHJpbmddOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgY29sdW1uV2lkdGg6IGl0ZW1TaXplLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxMZWZ0PzogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsVG9wPzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChwYXJhbXM6IHt8XG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBkYXRhOiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gIHx9KSA9PiBhbnksXG4gIG9uSXRlbXNSZW5kZXJlZD86IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IE9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ29sdW1uQ291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uc0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Sb3dDb3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dzQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgcm93Q291bnQ6IG51bWJlcixcbiAgcm93SGVpZ2h0OiBpdGVtU2l6ZSxcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG58fTtcblxudHlwZSBnZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnksXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoeyBjb2x1bW5JbmRleCwgZGF0YSwgcm93SW5kZXggfSkgPT5cbiAgYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICBnZXRSb3dIZWlnaHQsXG4gIGdldFJvd09mZnNldCxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRDb2x1bW5PZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoOiBnZXRJdGVtU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0Um93T2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRSb3dIZWlnaHQ6IGdldEl0ZW1TaXplLFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgR3JpZDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxUb3A6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3BcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oe1xuICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICB9OiB7XG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbSh7XG4gICAgICBhbGlnbiA9ICdhdXRvJyxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgfToge1xuICAgICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIGhlaWdodCwgcm93Q291bnQsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICAgIGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsVG9wLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxMZWZ0LCBpbml0aWFsU2Nyb2xsVG9wIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBbXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleCxcbiAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgY29uc3QgW3Jvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDtcbiAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGtleTogaXRlbUtleSh7IGNvbHVtbkluZGV4LCBkYXRhOiBpdGVtRGF0YSwgcm93SW5kZXggfSksXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IE9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIG9uSXRlbXNSZW5kZXJlZCwgb25TY3JvbGwsIHJvd0NvdW50IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGgsIGRpcmVjdGlvbiwgcm93SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbixcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldENvbHVtbk9mZnNldChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXQsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgaXNTY3JvbGxpbmcsIHNjcm9sbExlZnQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICBsZXQgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgIG92ZXJzY2FuQ291bnQsXG4gICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmXG4gICAgICAgICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcbnR5cGUgSXRlbVR5cGUgPSAnY29sdW1uJyB8ICdyb3cnO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSXRlbU1ldGFkYXRhTWFwID0geyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgY29sdW1uTWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZFJvd0luZGV4OiBudW1iZXIsXG4gIHJvd01ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG58fTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSAoXG4gIHsgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgeyByb3dNZXRhZGF0YU1hcCwgZXN0aW1hdGVkUm93SGVpZ2h0LCBsYXN0TWVhc3VyZWRSb3dJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IChcbiAgeyBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7XG4gICAgY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gIH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMuY29sdW1uV2lkdGg6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMucm93SGVpZ2h0OiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gaXRlbVNpemUoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgbWlkZGxlLFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICkub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBpdGVtVHlwZSxcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9XG4gICAgaXRlbVR5cGUgPT09ICdjb2x1bW4nXG4gICAgICA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpXG4gICAgICA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICk7XG4gIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemVcbiAgKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuICB9XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGNvbHVtbkNvdW50LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgZ2V0Q29sdW1uV2lkdGg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRSb3dPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Um93SGVpZ2h0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQsIGhlaWdodCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7XG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCxcbiAgICB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge30sXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IChcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gKFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgcm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9ICh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlLFxuICAgIH06IHtcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZTogYm9vbGVhbixcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LFxuICAgICAgICAgIHJvd0luZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG4vLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb25zIFwiaG9yaXpvbnRhbFwiIGFuZCBcInZlcnRpY2FsXCJcbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG50eXBlIExheW91dCA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBkYXRhOiBULFxuICBpbmRleDogbnVtYmVyLFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbnR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTwkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+PjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIG9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcsXG4gIGluaXRpYWxTY3JvbGxPZmZzZXQ/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1Db3VudDogbnVtYmVyLFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChpbmRleDogbnVtYmVyLCBkYXRhOiBUKSA9PiBhbnksXG4gIGl0ZW1TaXplOiBpdGVtU2l6ZSxcbiAgbGF5b3V0OiBMYXlvdXQsXG4gIG9uSXRlbXNSZW5kZXJlZD86IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IG9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ6IG51bWJlcixcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG58fTtcblxudHlwZSBHZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpID0+IGluZGV4O1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldEl0ZW1PZmZzZXQ6IEdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogR2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZTogR2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIExpc3Q8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsT2Zmc2V0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKGluZGV4OiBudW1iZXIsIGFsaWduOiBTY3JvbGxUb0FsaWduID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuICAgICAgbGV0IHNjcm9sbGJhclNpemUgPSAwO1xuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaW5pdGlhbFNjcm9sbE9mZnNldCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbUNvdW50LFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBsYXlvdXQsXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgY29uc3Qgb25TY3JvbGwgPSBpc0hvcml6b250YWxcbiAgICAgICAgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWxcbiAgICAgICAgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICBjb25zdCBbc3RhcnRJbmRleCwgc3RvcEluZGV4XSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPD0gc3RvcEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleShpbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoaW5kZXgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IG9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChpbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChpbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpdGVtU2l6ZSwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGdldEl0ZW1TaXplKHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGNvbnN0IG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwLFxuICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0UmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgb3ZlcnNjYW5Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsSG9yaXpvbnRhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBsZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb25TY3JvbGxWZXJ0aWNhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbi8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgbGF5b3V0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7bGF5b3V0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBpdGVtTWV0YWRhdGFNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfSxcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkSW5kZXg6IG51bWJlcixcbnx9O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCB7IGl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSAoKGl0ZW1TaXplOiBhbnkpOiBpdGVtU2l6ZUdldHRlcikoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHByb3BzO1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAoXG4gIHsgaXRlbUNvdW50IH06IFByb3BzPGFueT4sXG4gIHsgaXRlbU1ldGFkYXRhTWFwLCBlc3RpbWF0ZWRJdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldEl0ZW1TaXplOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3QgeyBlc3RpbWF0ZWRJdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xLFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgICBpbmRleCAtIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IEZpeGVkU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldENvbHVtbldpZHRoOiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dPZmZzZXQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dIZWlnaHQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6ICh7IHJvd0NvdW50LCByb3dIZWlnaHQgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAqIHJvd0NvdW50LFxuXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6ICh7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgKiBjb2x1bW5Db3VudCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICB7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5Db3VudCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLSB3aWR0aFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Q29sdW1uT2Zmc2V0LFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLVxuICAgICAgICB3aWR0aCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICB7IHJvd0hlaWdodCwgaGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93Q291bnQgKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtIGhlaWdodFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Um93T2Zmc2V0LFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIGhlaWdodCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpKVxuICAgICAgKVxuICAgICksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gc3RhcnRJbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoXG4gICAgICAod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQsIGhlaWdodCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHRvcCA9IHN0YXJ0SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbChcbiAgICAgIChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbnR5cGUgSW5zdGFuY2VQcm9wcyA9IGFueTtcblxuY29uc3QgRml4ZWRTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEl0ZW1TaXplOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6ICh7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICogaXRlbUNvdW50LFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbUNvdW50ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtIHNpemVcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdEl0ZW1PZmZzZXQsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHNpemUgK1xuICAgICAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHtcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRJbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoXG4gICAgICAoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGl0ZW1Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2OiBPYmplY3QsIG5leHQ6IE9iamVjdCk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbYXR0cmlidXRlXSAhPT0gbmV4dFthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW8oKS5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVFcXVhbChcbiAgcHJldlByb3BzOiBPYmplY3QsXG4gIG5leHRQcm9wczogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBzdHlsZTogcHJldlN0eWxlLCAuLi5wcmV2UmVzdCB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7IHN0eWxlOiBuZXh0U3R5bGUsIC4uLm5leHRSZXN0IH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpXG4gICk7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGFyZUVxdWFsIGZyb20gJy4vYXJlRXF1YWwnO1xuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGZvciBjbGFzcyBjb21wb25lbnRzLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIG5leHRTdGF0ZTogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpXG4gICk7XG59XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcImhlYWRlclppbmRleExvY2F0aW9uXCIsIFwibWFza1JlZlwiXTtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIE5PVEU6IFdlIGNhbid0IHRlc3QgdGhpcyBjb21wb25lbnQgYmVjYXVzZSBFbnp5bWUgZG9lc24ndCBzdXBwb3J0IHJlbmRlcmluZ1xuICogaW50byBwb3J0YWxzLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHVzZUNvbWJpbmVkUmVmcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU92ZXJsYXlNYXNrID0gZnVuY3Rpb24gRXVpT3ZlcmxheU1hc2soX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRoZWFkZXJaaW5kZXhMb2NhID0gX3JlZi5oZWFkZXJaaW5kZXhMb2NhdGlvbixcbiAgICAgIGhlYWRlclppbmRleExvY2F0aW9uID0gX3JlZiRoZWFkZXJaaW5kZXhMb2NhID09PSB2b2lkIDAgPyAnYWJvdmUnIDogX3JlZiRoZWFkZXJaaW5kZXhMb2NhLFxuICAgICAgbWFza1JlZiA9IF9yZWYubWFza1JlZixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgb3ZlcmxheU1hc2tOb2RlID0gdXNlUmVmKCk7XG4gIHZhciBjb21iaW5lZE1hc2tSZWYgPSB1c2VDb21iaW5lZFJlZnMoW292ZXJsYXlNYXNrTm9kZSwgbWFza1JlZl0pO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzUG9ydGFsVGFyZ2V0UmVhZHkgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNQb3J0YWxUYXJnZXRSZWFkeSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzT3ZlcmxheU1hc2snKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc092ZXJsYXlNYXNrJyk7XG4gICAgfTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb21iaW5lZE1hc2tSZWYoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgIH1cbiAgfSwgW10pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnRhbFRhcmdldCA9IG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50O1xuXG4gICAgaWYgKHBvcnRhbFRhcmdldCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3J0YWxUYXJnZXQpO1xuICAgIH1cblxuICAgIHNldElzUG9ydGFsVGFyZ2V0UmVhZHkodHJ1ZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwb3J0YWxUYXJnZXQpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwb3J0YWxUYXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSByZXR1cm47XG4gICAga2V5c09mKHJlc3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKHR5cGVvZiByZXN0W2tleV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBwcm9wZXJ0eSB0eXBlLiBFdWlPdmVybGF5TWFzayBwcm9wZXJ0eSBcIi5jb25jYXQoa2V5LCBcIiBpcyBub3QgYSBzdHJpbmcuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSB7XG4gICAgICAgIG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50LnNldEF0dHJpYnV0ZShrZXksIHJlc3Rba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQpIHJldHVybjtcbiAgICBvdmVybGF5TWFza05vZGUuY3VycmVudC5jbGFzc05hbWUgPSBjbGFzc05hbWVzKCdldWlPdmVybGF5TWFzaycsIFwiZXVpT3ZlcmxheU1hc2stLVwiLmNvbmNhdChoZWFkZXJaaW5kZXhMb2NhdGlvbiwgXCJIZWFkZXJcIiksIGNsYXNzTmFtZSk7XG4gIH0sIFtjbGFzc05hbWUsIGhlYWRlclppbmRleExvY2F0aW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnRhbFRhcmdldCA9IG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50O1xuICAgIGlmICghcG9ydGFsVGFyZ2V0IHx8ICFvbkNsaWNrKSByZXR1cm47XG5cbiAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihlKSB7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IHBvcnRhbFRhcmdldCkge1xuICAgICAgICBvbkNsaWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBvcnRhbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcG9ydGFsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtvbkNsaWNrXSk7XG4gIHJldHVybiBpc1BvcnRhbFRhcmdldFJlYWR5ID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQpKSA6IG51bGw7XG59O1xuRXVpT3ZlcmxheU1hc2sucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCBhcHBsaWVzIHRvIGNsaWNraW5nIHRoZSBtYXNrIGl0c2VsZiBhbmQgbm90IHRoZSBjaGlsZHJlblxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBtYXNrIHZpc3VhbGx5IHNpdCBhYm92ZSBvciBiZWxvdyB0aGUgRXVpSGVhZGVyIChjb250cm9sbGVkIGJ5IHotaW5kZXgpXG4gICAgICovXG4gIGhlYWRlclppbmRleExvY2F0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJvdmVcIiwgXCJiZWxvd1wiXSksXG5cbiAgLyoqXG4gICAgICogUmVhY3QgcmVmIHRvIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBpbmcgY29udGFpbmVyXG4gICAgICovXG4gIG1hc2tSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTcGFjZXJTdHlsZXMgfSBmcm9tICcuL3NwYWNlci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlTcGFjZXIgPSBmdW5jdGlvbiBFdWlTcGFjZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNwYWNlclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3BhY2VyJywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNwYWNlci0tXCIuY29uY2F0KHNpemUpLCBzaXplKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU3BhY2VyLCBzdHlsZXNbc2l6ZV1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlTcGFjZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkxeGkxbi1ldWlTcGFjZXJcIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpU3BhY2VyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFzeW5jXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0UmVmXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNMb2FkaW5nXCIsIFwibm9TdWdnZXN0aW9uc1wiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvblNlYXJjaENoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlbmRlck9wdGlvblwiLCBcInJvd0hlaWdodFwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInByZXBlbmRcIiwgXCJzb3J0TWF0Y2hlc0J5XCIsIFwiZGVsaW1pdGVyXCIsIFwiYXBwZW5kXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBFbGVtZW50cyB3aXRoaW4gRXVpQ29tYm9Cb3ggd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgdGFiYmFibGUgKGlucHV0cywgYnV0dG9ucykgaGF2ZSBiZWVuIHJlbW92ZWRcbiAqIGZyb20gdGhlIHRhYiBvcmRlciB3aXRoIHRhYmluZGV4PXstMX0gc28gdGhhdCB3ZSBjYW4gY29udHJvbCB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbnRlcmZhY2UuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbnNMaXN0IH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0JztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucywgZmxhdHRlbk9wdGlvbkdyb3VwcywgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveElucHV0IH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0JztcbmltcG9ydCB7IGdldEVsZW1lbnRaSW5kZXggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gJyc7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3goKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaXN0T3BlbjogZmFsc2UsXG4gICAgICBsaXN0RWxlbWVudDogbnVsbCxcbiAgICAgIGxpc3RQb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgICBsaXN0WkluZGV4OiB1bmRlZmluZWQsXG4gICAgICBtYXRjaGluZ09wdGlvbnM6IGdldE1hdGNoaW5nT3B0aW9ucyhfdGhpcy5wcm9wcy5vcHRpb25zLCBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3RoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSwgX3RoaXMucHJvcHMuc29ydE1hdGNoZXNCeSksXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgd2lkdGg6IDBcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbWJvQm94UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29tYm9Cb3hSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYHJlbGF0ZWRUYXJnZXRgIGV2ZW50IHByb3BlcnR5IGZvciBibHVyIGV2ZW50c1xuICAgICAgLy8gYnV0IGRvZXMgYWRkIGl0IGZvciBmb2N1c291dC4gUmVhY3QgZG9lc24ndCBzdXBwb3J0IGBvbkZvY3VzT3V0YCBzbyBoZXJlIHdlIGFyZS5cbiAgICAgIGlmIChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBfdGhpcy5vbkNvbnRhaW5lckJsdXIpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlID0gcmVmO1xuXG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgX3RoaXMub25Db250YWluZXJCbHVyKTtcblxuICAgICAgICB2YXIgY29tYm9Cb3hCb3VuZHMgPSBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF1dG9TaXplSW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2VhcmNoSW5wdXRSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWFyY2hJbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIF90aGlzLnByb3BzLmlucHV0UmVmKHJlZik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyBmaW5kIHRoZSB6SW5kZXggb2YgdGhlIGNvbWJvYm94IHJlbGF0aXZlIHRvIHRoZSBwYWdlIGJvZHlcbiAgICAgICAgLy8gYW5kIHVzZSB0aGF0IHRvIGRlcHRoLXBvc2l0aW9uIHRoZSBsaXN0IGJveFxuICAgICAgICAvLyBhZGRzIGFuIGV4dHJhIGAxMDBgIHRvIHByb3ZpZGUgc29tZSBkZWZlbnNlIGFyb3VuZCBuZWlnaGJvcmluZyBlbGVtZW50cycgcG9zaXRpb25pbmdcbiAgICAgICAgdmFyIGxpc3RaSW5kZXggPSBnZXRFbGVtZW50WkluZGV4KF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UsIGRvY3VtZW50LmJvZHkpICsgMTAwO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBsaXN0WkluZGV4OiBsaXN0WkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMudG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc1JlZkluc3RhbmNlc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKGluZGV4LCByZWYpIHtcbiAgICAgIF90aGlzLm9wdGlvbnNSZWZJbnN0YW5jZXNbaW5kZXhdID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wZW5MaXN0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyByZWFsbHkgbG9uZyBzZWFyY2ggdmFsdWVzIC8gY3VzdG9tIGVudHJpZXMgdHJpZ2dlcnMgYSBzY3JvbGwgZXZlbnQgb24gdGhlIGlucHV0XG4gICAgICAgIC8vIHdoaWNoIHRoZSBFdWlDb21ib0JveE9wdGlvbnNMaXN0IHBhc3NlcyB0aHJvdWdoIGhlcmVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxpc3RaSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNMaXN0T3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuc3RhdGUubGlzdEVsZW1lbnQ7XG5cbiAgICAgIGlmICghX3RoaXMuX2lzTW91bnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbGlzdEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdXBkYXRlTGlzdFBvc2l0aW9uIGlzIGNhbGxlZCB3aGVuIGxpc3RFbGVtZW50IGlzIGJlY29taW5nIHZpc2libGUsIGJ1dCBpc24ndCB5ZXRcblxuXG4gICAgICB2YXIgbGlzdEVsZW1lbnRCb3VuZHMgPSBsaXN0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50Qm91bmRzLndpZHRoID09PSAwIHx8IGxpc3RFbGVtZW50Qm91bmRzLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21ib0JveEJvdW5kcyA9IF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHZhciBfcmVmID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFsbG93Q3Jvc3NBeGlzOiBmYWxzZSxcbiAgICAgICAgYW5jaG9yOiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLFxuICAgICAgICBwb3BvdmVyOiBsaXN0RWxlbWVudCxcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20nXG4gICAgICB9KSxcbiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICAgICAgdG9wID0gX3JlZi50b3A7XG5cbiAgICAgIGlmIChfdGhpcy5saXN0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlLnN0eWxlLnRvcCA9IFwiXCIuY29uY2F0KHRvcCwgXCJweFwiKTsgLy8gbGlzdEVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyB3aWR0aCBzZXQgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBvc2l0aW9uXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBwb3BvdmVyIHNlcnZpY2Ugd29uJ3Qga25vdyBhYm91dCB0aGUgY29ycmVjdCB3aWR0aFxuICAgICAgICAvLyBob3dldmVyLCB3ZSBhbHJlYWR5IGtub3cgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGVsZW1lbnRcblxuICAgICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2Uuc3R5bGUubGVmdCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsIFwicHhcIik7XG4gICAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLndpZHRoLCBcInB4XCIpO1xuICAgICAgfSAvLyBDYWNoZSBmb3IgZnV0dXJlIGNhbGxzLlxuXG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGlzdEVsZW1lbnQ6IGxpc3RFbGVtZW50LFxuICAgICAgICBsaXN0UG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF9yZWYyLm1hdGNoaW5nT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEdyb3VwIHRpdGxlcyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICAvLyBTa2lwIGdyb3VwIHRpdGxlIG9wdGlvbnNcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaGluZ09wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ID4gLTEgJiYgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPCBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhclNlYXJjaFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVMYXN0T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEJhY2tzcGFjZSB3aWxsIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBpbnB1dCwgbm90IGEgcGlsbC5cblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRGVsZXRlIGxhc3QgcGlsbC5cblxuXG4gICAgICBfdGhpcy5vblJlbW92ZU9wdGlvbihfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdKTtcblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiAhX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFkZEN1c3RvbU9wdGlvblwiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wcy5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucztcblxuICAgICAgaWYgKF90aGlzLmRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb24oKSkge1xuICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihtYXRjaGluZ09wdGlvbnNbMF0sIGlzQ29udGFpbmVyQmx1cik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9uQ3JlYXRlT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgYm90aGVyIHRyeWluZyB0byBjcmVhdGUgYW4gb3B0aW9uIGlmIHRoZSB1c2VyIGhhc24ndCB0eXBlZCBhbnl0aGluZy5cblxuXG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgY3JlYXRlIHRoZSB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC5cblxuXG4gICAgICBpZiAoZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEFkZCBuZXcgY3VzdG9tIHBpbGwgaWYgdGhpcyBpcyBjdXN0b20gaW5wdXQsIGV2ZW4gaWYgaXQgcGFydGlhbGx5IG1hdGNoZXMgYW4gb3B0aW9uLlxuXG5cbiAgICAgIHZhciBpc09wdGlvbkNyZWF0ZWQgPSBvbkNyZWF0ZU9wdGlvbihzZWFyY2hWYWx1ZSwgZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKSk7IC8vIEV4cGVjdCB0aGUgY29uc3VtZXIgdG8gYmUgZXhwbGljaXQgaW4gcmVqZWN0aW5nIGEgY3VzdG9tIG9wdGlvbi5cblxuICAgICAgaWYgKGlzT3B0aW9uQ3JlYXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG5cbiAgICAgIGlmIChCb29sZWFuKHNpbmdsZVNlbGVjdGlvbikpIHtcbiAgICAgICAgLy8gQWRkaW5nIGEgY3VzdG9tIG9wdGlvbiB0byBhIHNpbmdsZSBzZWxlY3QgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9uc1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbMF0ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMyLmFzeW5jOyAvLyBBc3N1bWUgaWYgdGhpcyBpcyBhc3luYyB0aGVuIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlIG9wdGlvbnMuXG5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBmbGF0dGVuT3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgPSAwO1xuICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYzLmxhYmVsO1xuICAgICAgICB2YXIgdHJpbW1lZExhYmVsID0gbGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmbGF0dGVuT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHRyaW1tZWRMYWJlbDtcbiAgICAgICAgfSkgIT09IC0xKSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyArPSAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmxhdHRlbk9wdGlvbnMubGVuZ3RoID09PSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbWJvQm94Rm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMub3Blbkxpc3QoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0Q3VzdG9tT3B0aW9uc1wiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBkZWxpbWl0ZXIgPSBfdGhpcy5wcm9wcy5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIpIHtcbiAgICAgICAgc2VhcmNoVmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLmxlbmd0aCA+IDApIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGNsb3NlIHRoZSBvcHRpb25zIGxpc3QsIHVubGVzcyB0aGUgdXNlciBjbGlja2VkIG9uIGFuIG9wdGlvblxuXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVGb3ggcmV0dXJucyBgcmVsYXRlZFRhcmdldGAgYXMgYG51bGxgIGZvciBzZWN1cml0eSByZWFzb25zLCBidXQgcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBgZXhwbGljaXRPcmlnaW5hbFRhcmdldGAuXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9leHBsaWNpdE9yaWdpbmFsVGFyZ2V0XG4gICAgICAgKi9cbiAgICAgIHZhciBmb2N1c0V2ZW50ID0gZXZlbnQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGZvY3VzRXZlbnQucmVsYXRlZFRhcmdldCB8fCBmb2N1c0V2ZW50LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG5cbiAgICAgIHZhciBmb2N1c2VkSW5PcHRpb25zTGlzdCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZvY3VzZWRJbklucHV0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG5cbiAgICAgIGlmICghZm9jdXNlZEluT3B0aW9uc0xpc3QgJiYgIWZvY3VzZWRJbklucHV0KSB7XG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuXG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTsgLy8gSWYgdGhlIHVzZXIgdGFicyBhd2F5IG9yIGNoYW5nZXMgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50LCB0YWtlIHdoYXRldmVyIGlucHV0IHRoZXkndmVcbiAgICAgICAgLy8gdHlwZWQgYW5kIGNvbnZlcnQgaXQgaW50byBhIHBpbGwsIHRvIHByZXZlbnQgdGhlIGNvbWJvIGJveCBmcm9tIGxvb2tpbmcgbGlrZSBhIHRleHQgaW5wdXQuXG5cblxuICAgICAgICBpZiAoIV90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb2N1c2VkSW5PcHRpb25zTGlzdCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzUxNzlcbiAgICAgICAgLy8gbmVlZCB0byByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dCBib3ggd2hlbiBjbGlja2luZyBub24taW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgY2FsbGluZyAuZm9jdXMoKSBkdXJpbmcgYSBibHVyIGV2ZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTc5XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTtcblxuICAgICAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHNlYXJjaElucHV0UmVmSS5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQkFDS1NQQUNFOlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkVTQ0FQRTpcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgX3RoaXMub25BZGRPcHRpb24oX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgLy8gRGlzYWxsb3cgdGFiYmluZyB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIG9wdGlvbnMuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleURvd24pIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25FbnRlcktleVwiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgaWYgKGFkZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uUHJvcCA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBjaGFuZ2VPcHRpb25zID0gc2luZ2xlU2VsZWN0aW9uID8gW2FkZGVkT3B0aW9uXSA6IHNlbGVjdGVkT3B0aW9ucy5jb25jYXQoYWRkZWRPcHRpb24pO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoY2hhbmdlT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcblxuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcblxuICAgICAgaWYgKCFpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5pbmRleE9mKGFkZGVkT3B0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM0Lm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNC5zZWxlY3RlZE9wdGlvbnM7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uICE9PSByZW1vdmVkT3B0aW9uO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJTZWxlY3RlZE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uQ2hhbmdlID0gX3RoaXMucHJvcHMub25DaGFuZ2U7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShbXSk7XG4gICAgICB9IC8vIENsaWNraW5nIHRoZSBjbGVhciBidXR0b24gd2lsbCBhbHNvIGNhdXNlIGl0IHRvIGRpc2FwcGVhci4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZm9jdXNcbiAgICAgIC8vIHNoaWZ0aW5nIHVuZXhwZWN0ZWRseSB0byB0aGUgYm9keSBlbGVtZW50IHNvIHdlIHNldCBpdCB0byB0aGUgaW5wdXQgd2hpY2ggaXMgbW9yZSByZWFzb25hYmxlLFxuXG5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db21ib0JveENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9uIHRoZSBib3gsIGVudGVyIHRoZSBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH0gLy8gSWYgdGhlIHVzZXIgZG9lcyB0aGlzIGZyb20gYSBzdGF0ZSBpbiB3aGljaCBhbiBvcHRpb24gaGFzIGZvY3VzLCB0aGVuIHdlIG5lZWQgdG8gcmVzZXQgaXQgb3IgY2xlYXIgaXQuXG5cblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkluZGV4ID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsICYmIG9wdGlvbi5rZXkgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5rZXk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogc2VsZWN0ZWRPcHRpb25JbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcGVuTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25MaXN0U2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsb3NlTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM1Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzNS5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChvblNlYXJjaENoYW5nZSkge1xuICAgICAgICB2YXIgX2hhc01hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlKHNlYXJjaFZhbHVlLCBfaGFzTWF0Y2hpbmdPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4gPT09IGZhbHNlKSBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuZW5kc1dpdGgoZGVsaW1pdGVyKSkge1xuICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVNYXRjaGluZ09wdGlvbnNJZkRpZmZlcmVudFwiLCBmdW5jdGlvbiAobmV3TWF0Y2hpbmdPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNi5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICB2YXIgYXJlT3B0aW9uc0RpZmZlcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc1tpXS5sYWJlbCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zW2ldLmxhYmVsKSB7XG4gICAgICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJlT3B0aW9uc0RpZmZlcmVudCkge1xuICAgICAgICBfdGhpcy5vcHRpb25zUmVmSW5zdGFuY2VzID0gW107XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleDsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgbWF0Y2hpbmdPcHRpb25zXG5cbiAgICAgICAgaWYgKEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKG5ld01hdGNoaW5nT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXdNYXRjaGluZ09wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG5ld01hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBzZXRTdGF0ZSAtPiBjb21wb25lbnRXaWxsVXBkYXRlIC0+IHNldFN0YXRlIGxvb3AuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlOyAvLyBUT0RPOiBUaGlzIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgb25jZSB0aGUgYWN0dWFsIHN0eWxlc2hlZXQgbG9hZHMuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLmF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAgIF90aGlzMi5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UuY29weUlucHV0U3R5bGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM3LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNvcnRNYXRjaGVzQnkgPSBfdGhpcyRwcm9wczcuc29ydE1hdGNoZXNCeTtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IHRoaXMuc3RhdGUuc2VhcmNoVmFsdWU7IC8vIFJlYWN0IDE2LjMgaGFzIGEgYnVnIChmaXhlZCBpbiAxNi40KSB3aGVyZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgIC8vIGlzbid0IGNhbGxlZCBhZnRlciBhIHN0YXRlIGNoYW5nZSwgYW5kIHdlIHRyYWNrIGBzZWFyY2hWYWx1ZWAgaW4gc3RhdGVcbiAgICAgIC8vIGluc3RlYWQgd2UgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZSBpbiBzZWFyY2hWYWx1ZSBoZXJlXG5cbiAgICAgIHRoaXMudXBkYXRlTWF0Y2hpbmdPcHRpb25zSWZEaWZmZXJlbnQoZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkT3B0aW9ucywgc2VhcmNoVmFsdWUsIHRoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzOFsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzOC5hc3luYyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczguY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczguY29tcHJlc3NlZCxcbiAgICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHM4LmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHM4LmZ1bGxXaWR0aCxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzOC5pZCxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzOC5pbnB1dFJlZixcbiAgICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzOC5pc0NsZWFyYWJsZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM4LmlzSW52YWxpZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczguaXNMb2FkaW5nLFxuICAgICAgICAgIG5vU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczgubm9TdWdnZXN0aW9ucyxcbiAgICAgICAgICBvbkJsdXIgPSBfdGhpcyRwcm9wczgub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uQ2hhbmdlLFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHM4Lm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczgub3B0aW9ucyxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOC5wbGFjZWhvbGRlcixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczgucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzOC5yb3dIZWlnaHQsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM4LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczguc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczgucHJlcGVuZCxcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gX3RoaXMkcHJvcHM4LnNvcnRNYXRjaGVzQnksXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHM4LmRlbGltaXRlcixcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczguYXBwZW5kLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzOC5hdXRvRm9jdXMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHM4WydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczhbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM4LCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBoYXNGb2N1cyA9IF90aGlzJHN0YXRlMi5oYXNGb2N1cyxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkc3RhdGUyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbGlzdFBvc2l0aW9uID0gX3RoaXMkc3RhdGUyLmxpc3RQb3NpdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHN0YXRlMi53aWR0aCxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZTIubWF0Y2hpbmdPcHRpb25zOyAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIElEIGlmIHVzZXJzIGRvbid0IHBhc3Mgb25lIGFzIGEgcHJvcFxuXG4gICAgICB2YXIgaW5wdXRJZCA9IGlkICE9PSBudWxsICYmIGlkICE9PSB2b2lkIDAgPyBpZCA6IHRoaXMucm9vdElkKCdfZXVpLWNvbWJvYm94LWlkJyk7IC8vIFZpc3VhbGx5IGluZGljYXRlIHRoZSBjb21ib2JveCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIGl0IGhhcyBsb3N0IGZvY3VzIGJ1dCB0aGVyZSBpcyB0ZXh0IGVudGVyZWQgaW4gdGhlIGlucHV0LlxuICAgICAgLy8gV2hlbiBjdXN0b20gb3B0aW9ucyBhcmUgZGlzYWJsZWQgYW5kIHRoZSB1c2VyIGxlYXZlcyB0aGUgY29tYm8gYm94IGFmdGVyIGVudGVyaW5nIHRleHQgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnlcbiAgICAgIC8vIG9wdGlvbnMsIHRoaXMgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGV5J3ZlIGVudGVyZWQgaW52YWxpZCBpbnB1dC5cblxuICAgICAgdmFyIG1hcmtBc0ludmFsaWQgPSBpc0ludmFsaWQgfHwgKGhhc0ZvY3VzID09PSBmYWxzZSB8fCBpc0xpc3RPcGVuID09PSBmYWxzZSkgJiYgc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94JywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb21ib0JveC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtLXByZXBlbmRlZCc6IHByZXBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC0tYXBwZW5kZWQnOiBhcHBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzSW52YWxpZCc6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc09wZW4nOiBpc0xpc3RPcGVuXG4gICAgICB9KTtcbiAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgICB2YXIgb3B0aW9uc0xpc3Q7XG5cbiAgICAgIGlmICghbm9TdWdnZXN0aW9ucyAmJiBpc0xpc3RPcGVuKSB7XG4gICAgICAgIHZhciBvcHRpb25zTGlzdERhdGFUZXN0U3ViaiA9IGRhdGFUZXN0U3ViaiA/IFwiXCIuY29uY2F0KGRhdGFUZXN0U3ViaiwgXCItb3B0aW9uc0xpc3RcIikgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9wdGlvbnNMaXN0ID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94Lmxpc3Rib3hBcmlhTGFiZWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0sIGZ1bmN0aW9uIChsaXN0Ym94QXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwge1xuICAgICAgICAgICAgekluZGV4OiBfdGhpczMuc3RhdGUubGlzdFpJbmRleCxcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpczMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IF90aGlzMy5hcmVBbGxPcHRpb25zU2VsZWN0ZWQoKSxcbiAgICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQ6IGN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIGxpc3RSZWY6IF90aGlzMy5saXN0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIG9uQ2xvc2VMaXN0OiBfdGhpczMuY2xvc2VMaXN0LFxuICAgICAgICAgICAgb25DcmVhdGVPcHRpb246IG9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMzLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5OiBfdGhpczMub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgICAgIG9uU2Nyb2xsOiBfdGhpczMub25PcHRpb25MaXN0U2Nyb2xsLFxuICAgICAgICAgICAgb3B0aW9uUmVmOiBfdGhpczMub3B0aW9uUmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgcG9zaXRpb246IGxpc3RQb3NpdGlvbixcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgICByb290SWQ6IF90aGlzMy5yb290SWQsXG4gICAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgICB1cGRhdGVQb3NpdGlvbjogX3RoaXMzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgbGlzdGJveEFyaWFMYWJlbDogbGlzdGJveEFyaWFMYWJlbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFdWlDb21ib0JveCBmb2xsb3dzIHRoZSBXQUktQVJJQSAxLjIgc3BlYyBmb3IgZWRpdGFibGUgY29tYm9ib3hlc1xuICAgICAgICAgKiB3aXRoIGxpc3QgYXV0b2NvbXBsZXRlLiBUaGlzIHBhdHRlcm4gaXMgYW4gaW1wcm92ZW1lbnQgb24gdGhlIHVzZXJcbiAgICAgICAgICogZXhwZXJpZW5jZSBmb3Igc2NyZWVuIHJlYWRlcnMgb3ZlciB0aGUgV0FJLUFSSUEgMS4xIHBhdHRlcm4uXG4gICAgICAgICAqXG4gICAgICAgICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yL2V4YW1wbGVzL2NvbWJvYm94L2NvbWJvYm94LWF1dG9jb21wbGV0ZS1saXN0Lmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgICByZWY6IHRoaXMuY29tYm9Cb3hSZWZDYWxsYmFja1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveElucHV0LCB7XG4gICAgICAgICAgYXV0b1NpemVJbnB1dFJlZjogdGhpcy5hdXRvU2l6ZUlucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IHRoaXMuaGFzQWN0aXZlT3B0aW9uKCkgPyB0aGlzLnJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgIGlucHV0UmVmOiB0aGlzLnNlYXJjaElucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuOiBpc0xpc3RPcGVuLFxuICAgICAgICAgIG5vSWNvbjogISFub1N1Z2dlc3Rpb25zLFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9uQ2xlYXI6IGlzQ2xlYXJhYmxlICYmICFpc0Rpc2FibGVkID8gdGhpcy5jbGVhclNlbGVjdGVkT3B0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ29tYm9Cb3hDbGljayxcbiAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrOiB0aGlzLm9uQ2xvc2VMaXN0Q2xpY2ssXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5vbkNvbWJvQm94Rm9jdXMsXG4gICAgICAgICAgb25PcGVuTGlzdENsaWNrOiB0aGlzLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICBvblJlbW92ZU9wdGlvbjogdGhpcy5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcm9vdElkOiB0aGlzLnJvb3RJZCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdG9nZ2xlQnV0dG9uUmVmOiB0aGlzLnRvZ2dsZUJ1dHRvblJlZkNhbGxiYWNrLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uOiB0aGlzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBhcHBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IGFwcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmVwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBwcmVwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgfSksIG9wdGlvbnNMaXN0KVxuICAgICAgKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IG5leHRQcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gbmV4dFByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gbmV4dFByb3BzLnNvcnRNYXRjaGVzQnk7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7IC8vIENhbGN1bGF0ZSBhbmQgY2FjaGUgdGhlIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIHNlYXJjaFZhbHVlLCBiZWNhdXNlIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAvLyBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIGl0IHdvdWxkIGJlIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgcmVwZWF0ZWRseS5cblxuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZE9wdGlvbnMsIHNlYXJjaFZhbHVlLCBuZXh0UHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXN5bmM6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBwcmVwZW5kOiB1bmRlZmluZWQsXG4gIGFwcGVuZDogdW5kZWZpbmVkLFxuICBzb3J0TWF0Y2hlc0J5OiAnbm9uZSdcbn0pO1xuXG5FdWlDb21ib0JveC5wcm9wVHlwZXMgPSB7XG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXN5bmNocm9ub3VzbHlcbiAgICAgKi9cbiAgYXN5bmM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBleHBhbmRzIHRvIHRoZSBlbnRpcmUgd2lkdGggYXZhaWxhYmxlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBpbnB1dFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTd2FwcyB0aGUgZHJvcGRvd24gb3B0aW9ucyBmb3IgYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBEb2Vzbid0IHNob3cgdGhlIHN1Z2dlc3Rpb25zIGxpc3QvZHJvcGRvd25cbiAgICAgKi9cbiAgbm9TdWdnZXN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgcXVlcnkgaW4gdGhlIGNvbWJvIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICBvbktleURvd246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHRleHQgcXVlcnkgaW4gdGhlIHNlYXJjaCBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uU2VhcmNoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXZlcnkgb3B0aW9uIG11c3QgYmUgdGhlIHNhbWUgaGVpZ2h0IGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IGlmIHVzaW5nIGEgY3VzdG9tIHJlbmRlclxuICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgb25seSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbi4gU2V0IHRvIGB7IGFzUGxhaW5UZXh0OiB0cnVlIH1gIHRvIG5vdCByZW5kZXIgaW5wdXQgc2VsZWN0aW9uIGFzIHBpbGxzXG4gICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRGlzcGxheSBtYXRjaGluZyBvcHRpb25zIGJ5OlxuICAgICAqIGBzdGFydHNXaXRoYDogbW92ZXMgaXRlbXMgdGhhdCBzdGFydCB3aXRoIHNlYXJjaCB2YWx1ZSB0byB0b3Agb2YgdGhlIGxpc3Q7XG4gICAgICogYG5vbmVgOiBkb24ndCBjaGFuZ2UgdGhlIHNvcnQgb3JkZXIgb2YgaW5pdGlhbCBvYmplY3RcbiAgICAgKi9cbiAgc29ydE1hdGNoZXNCeTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJzdGFydHNXaXRoXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHZhbHVlIHNlcGFyYXRvci4gVHlwaWNhbGx5IGEgY29tbWEgYCxgXG4gICAgICovXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgc2hvdWxkIGhhdmUgZm9jdXMgd2hlbiB0aGUgY29tcG9uZW50IGxvYWRzXG4gICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVxdWlyZWQgd2hlbiByZW5kZXJpbmcgd2l0aG91dCBhIHZpc2libGUgbGFiZWwgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIElEIG9mIGEgdGV4dCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHZpc2libGUgbGFiZWwgZm9yIHRoZSBjb21ibyBib3ggd2hlbiBub3RcbiAgICAgKiBzdXBwbGllZCBieSBgYXJpYS1sYWJlbGAgb3IgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwiaXNHcm91cExhYmVsT3B0aW9uXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFJlZlwiLCBcIm1hdGNoaW5nT3B0aW9uc1wiLCBcIm9uQ2xvc2VMaXN0XCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwib25PcHRpb25FbnRlcktleVwiLCBcIm9uU2Nyb2xsXCIsIFwib3B0aW9uUmVmXCIsIFwib3B0aW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm9vdElkXCIsIFwicm93SGVpZ2h0XCIsIFwic2Nyb2xsVG9JbmRleFwiLCBcInNlYXJjaFZhbHVlXCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidXBkYXRlUG9zaXRpb25cIiwgXCJ3aWR0aFwiLCBcImRlbGltaXRlclwiLCBcInpJbmRleFwiLCBcInN0eWxlXCIsIFwibGlzdGJveEFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFRpdGxlIH0gZnJvbSAnLi9jb21ib19ib3hfdGl0bGUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRmlsdGVyU2VsZWN0SXRlbSB9IGZyb20gJy4uLy4uL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0nO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZS8nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlclBhbmVsIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyX3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgT1BUSU9OX0NPTlRFTlRfQ0xBU1NOQU1FID0gJ2V1aUNvbWJvQm94T3B0aW9uX19jb250ZW50JztcblxudmFyIGhpdEVudGVyQmFkZ2UgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCB7XG4gIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW50ZXJCYWRnZVwiLFxuICBjb2xvcjogXCJob2xsb3dcIixcbiAgaWNvblR5cGU6IFwicmV0dXJuS2V5XCIsXG4gIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbn0pO1xuXG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlUG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2FpdCBhIGJlYXQgZm9yIHRoZSBET00gdG8gdXBkYXRlLCBzaW5jZSB3ZSBkZXBlbmQgb24gRE9NIGVsZW1lbnRzJyBib3VuZHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5wcm9wcy51cGRhdGVQb3NpdGlvbihfdGhpcy5saXN0UmVmSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0T25TY3JvbGxcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBDbG9zZSB0aGUgbGlzdCB3aGVuIGEgc2Nyb2xsIGV2ZW50IGhhcHBlbnMsIGJ1dCBub3QgaWYgdGhlIHNjcm9sbCBoYXBwZW5lZCBpbiB0aGUgb3B0aW9ucyBsaXN0LlxuICAgICAgLy8gVGhpcyBtaXJyb3JzIEZpcmVmb3gncyBhcHByb2FjaCBvZiBhdXRvLWNsb3NpbmcgYHNlbGVjdGAgZWxlbWVudHMgb25zY3JvbGwuXG4gICAgICBpZiAoX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIGV2ZW50LnRhcmdldCAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UuY29udGFpbnMoZXZlbnQudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DbG9zZUxpc3QoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5wcm9wcy5saXN0UmVmKHJlZik7XG5cbiAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBfdGhpcy5wcm9wcy5saXN0Ym94QXJpYUxhYmVsKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBfdGhpcy5wcm9wcy5yb290SWQoJ2xpc3Rib3gnKSk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICcwJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiTGlzdFJvd1wiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIF9vcHRpb24ka2V5O1xuXG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb24gPSBvcHRpb24uaXNHcm91cExhYmVsT3B0aW9uLFxuICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvblJlZiA9IF90aGlzJHByb3BzLm9wdGlvblJlZixcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzLnJvb3RJZDtcblxuICAgICAgaWYgKGlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94VGl0bGUsIG51bGwsIGxhYmVsKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGVja2VkID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsID09PSBsYWJlbCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICdvbic7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25Jc0ZvY3VzZWQgPSBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXg7XG4gICAgICB2YXIgb3B0aW9uSXNEaXNhYmxlZCA9IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBvcHRpb24uZGlzYWJsZWQgPT09IHRydWU7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWx0ZXJTZWxlY3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAga2V5OiAoX29wdGlvbiRrZXkgPSBvcHRpb24ua2V5KSAhPT0gbnVsbCAmJiBfb3B0aW9uJGtleSAhPT0gdm9pZCAwID8gX29wdGlvbiRrZXkgOiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBpZiAob25PcHRpb25DbGljaykge1xuICAgICAgICAgICAgb25PcHRpb25DbGljayhvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiBvcHRpb25SZWYuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgaW5kZXgpLFxuICAgICAgICBpc0ZvY3VzZWQ6IG9wdGlvbklzRm9jdXNlZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgc2hvd0ljb25zOiBzaW5nbGVTZWxlY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIGlkOiByb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChpbmRleCkpLFxuICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgfSwgcmVuZGVyT3B0aW9uID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IE9QVElPTl9DT05URU5UX0NMQVNTTkFNRVxuICAgICAgfSwgcmVuZGVyT3B0aW9uKG9wdGlvbiwgc2VhcmNoVmFsdWUsICdldWlDb21ib0JveE9wdGlvbl9fcmVuZGVyT3B0aW9uJykpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBPUFRJT05fQ09OVEVOVF9DTEFTU05BTUVcbiAgICAgIH0sIGxhYmVsKSwgb3B0aW9uSXNGb2N1c2VkICYmICFvcHRpb25Jc0Rpc2FibGVkID8gaGl0RW50ZXJCYWRnZSA6IG51bGwpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBXYWl0IGEgZnJhbWUsIG90aGVyd2lzZSBtb3ZpbmcgZm9jdXMgZnJvbSBvbmUgY29tYm8gYm94IHRvIGFub3RoZXIgd2lsbCByZXN1bHQgaW4gdGhlIGNsYXNzXG4gICAgICAvLyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGJvZHkuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7IC8vIEZpcmVmb3ggd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsIGV2ZW50IGluIG1hbnkgY29tbW9uIHNpdHVhdGlvbnMgd2hlbiB0aGUgb3B0aW9ucyBsaXN0IGRpdiBpcyBhcHBlbmRlZFxuICAgICAgLy8gdG8gdGhlIERPTTsgaW4gdGVzdGluZyBpdCB3YXMgYWx3YXlzIHdpdGhpbiAxMDBtcywgYnV0IHNldHRpbmcgYSB0aW1lb3V0IGhlcmUgZm9yIDUwMG1zIHRvIGJlIHNhZmVcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBfdGhpczIuY2xvc2VMaXN0T25TY3JvbGwsIHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIC8vIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgd2Ugd29uJ3QgY2FsbCBwcmV2ZW50RGVmYXVsdFxuICAgICAgICAgIGNhcHR1cmU6IHRydWUgLy8gc2Nyb2xsIGV2ZW50cyBkb24ndCBidWJibGUsIHRoZXkgbXVzdCBiZSBjYXB0dXJlZCBpbnN0ZWFkXG5cbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBwcmV2UHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBwcmV2UHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBkb24ndCBjb21wYXJlIG1hdGNoaW5nT3B0aW9ucyBiZWNhdXNlIHRoYXQgd2lsbCByZXN1bHQgaW4gYSBsb29wLlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUgfHwgb3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5vcHRpb25zIHx8IHNlbGVjdGVkT3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5jbG9zZUxpc3RPblNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMlsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQgPSBfdGhpcyRwcm9wczIuYXJlQWxsT3B0aW9uc1NlbGVjdGVkLFxuICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczIuY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RSZWYgPSBfdGhpcyRwcm9wczIubGlzdFJlZixcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRwcm9wczIubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0ID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2VMaXN0LFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5ID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczIub25TY3JvbGwsXG4gICAgICAgICAgb3B0aW9uUmVmID0gX3RoaXMkcHJvcHMyLm9wdGlvblJlZixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMyJHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnBvc2l0aW9uLFxuICAgICAgICAgIHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyJHBvc2l0aW9uID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF90aGlzJHByb3BzMiRwb3NpdGlvbixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMyLnJvd0hlaWdodCxcbiAgICAgICAgICBzY3JvbGxUb0luZGV4ID0gX3RoaXMkcHJvcHMyLnNjcm9sbFRvSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMi5kZWxpbWl0ZXIsXG4gICAgICAgICAgekluZGV4ID0gX3RoaXMkcHJvcHMyLnpJbmRleCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMi5zdHlsZSxcbiAgICAgICAgICBsaXN0Ym94QXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyLmxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgZW1wdHlTdGF0ZUNvbnRlbnQ7XG5cbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgfSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgbWF0Y2hpbmdPcHRpb25zICYmIG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG9uQ3JlYXRlT3B0aW9uICYmIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmRlbGltaXRlck1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQgZWFjaCBpdGVtIHNlcGFyYXRlZCBieSB7ZGVsaW1pdGVyfVwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgZGVsaW1pdGVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbkZvclZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIERpc2FsbG93IGR1cGxpY2F0ZSBjdXN0b20gb3B0aW9ucy5cbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFscmVhZHlBZGRlZFwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwie2xhYmVsfSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWxlY3RlZE9wdGlvbkZvclZhbHVlLmxhYmVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGhpZ2hsaWdodFNlYXJjaFZhbHVlID0gZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoVmFsdWUodGV4dCwgc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgvKFxce3NlYXJjaFZhbHVlfSkvLCAnZ2knKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0ZXh0LnNwbGl0KHJlZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICAgIH0sIHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFydC5tYXRjaChyZWcpID8gX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWR4XG4gICAgICAgICAgICAgICAgICB9LCBzZWFyY2hWYWx1ZSkgOiBwYXJ0O1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgICB9LCBjdXN0b21PcHRpb25UZXh0ID8gaGlnaGxpZ2h0U2VhcmNoVmFsdWUoY3VzdG9tT3B0aW9uVGV4dCwgc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmNyZWF0ZUN1c3RvbU9wdGlvblwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIHtzZWFyY2hWYWx1ZX0gYXMgYSBjdXN0b20gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVGhlcmUgYXJlbid0IGFueSBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJlQWxsT3B0aW9uc1NlbGVjdGVkKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbGxPcHRpb25zU2VsZWN0ZWRcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIllvdSd2ZSBzZWxlY3RlZCBhbGwgYXZhaWxhYmxlIG9wdGlvbnNcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbXB0eVN0YXRlID0gZW1wdHlTdGF0ZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJ4c1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHlcIlxuICAgICAgfSwgZW1wdHlTdGF0ZUNvbnRlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA8IDcgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDogNztcbiAgICAgIHZhciBoZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIChyb3dIZWlnaHQgKyAxKTsgLy8gQWRkIG9uZSBmb3IgdGhlIGJvcmRlclxuICAgICAgLy8gYm91bmRlZCBieSBtYXgtaGVpZ2h0IG9mIGV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcblxuICAgICAgdmFyIGJvdW5kZWRIZWlnaHQgPSBoZWlnaHQgPiAyMDAgPyAyMDAgOiBoZWlnaHQ7XG5cbiAgICAgIHZhciBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwge1xuICAgICAgICBoZWlnaHQ6IGJvdW5kZWRIZWlnaHQsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgaXRlbUNvdW50OiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoLFxuICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICBpdGVtRGF0YTogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICByZWY6IHRoaXMuc2V0TGlzdFJlZixcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuc2V0TGlzdEJveFJlZixcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9LCB0aGlzLkxpc3RSb3cpO1xuICAgICAgLyoqXG4gICAgICAgKiBSZXVzaW5nIHRoZSBFdWlQb3BvdmVyX19wYW5lbCBjbGFzc2VzIHRvIGhlbHAgd2l0aCBjb25zaXN0ZW5jeS9tYWludGVuYW5jZS5cbiAgICAgICAqIEJ1dCB0aGlzIHNob3VsZCByZWFsbHkgYmUgY29udmVydGVkIHRvIHVzZXIgdGhlIHBvcG92ZXIgY29tcG9uZW50LlxuICAgICAgICovXG5cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveE9wdGlvbnNMaXN0Jyk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHtcbiAgICAgICAgcGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBoYXNTaGFkb3c6IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHBhbmVsUmVmOiB0aGlzLmxpc3RSZWZDYWxsYmFjayxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94T3B0aW9uc0xpc3QgXCIuY29uY2F0KGRhdGFUZXN0U3ViaiksXG4gICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgICB9KSxcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBpc0F0dGFjaGVkOiB0cnVlLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcIlxuICAgICAgfSwgZW1wdHlTdGF0ZSB8fCBvcHRpb25zTGlzdCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveE9wdGlvbnNMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAnZGF0YS10ZXN0LXN1YmonOiAnJyxcbiAgcm93SGVpZ2h0OiAyOSAvLyByb3cgaGVpZ2h0IG9mIGRlZmF1bHQgb3B0aW9uIHJlbmRlcmVyXG5cbn0pO1xuXG5FdWlDb21ib0JveE9wdGlvbnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3Rib3hBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBjdXN0b20gdGV4dCBvcHRpb24uIFlvdSBjYW4gdXNlIGB7c2VhcmNoVmFsdWV9YCBpbnNpZGUgeW91ciBzdHJpbmcgdG8gYmV0dGVyIGN1c3RvbWl6ZSB5b3VyIHRleHQuXG4gICAgICAgKiBJdCB3b24ndCBzaG93IGlmIHRoZXJlJ3Mgbm8gb25DcmVhdGVPcHRpb24uXG4gICAgICAgKi9cbiAgY3VzdG9tT3B0aW9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3RSZWY6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgbWF0Y2hpbmdPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNyZWF0ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkVudGVyS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGw6IFByb3BUeXBlcy5hbnksXG4gIG9wdGlvblJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpQ29tYm9Cb3hPcHRpb25PcHRpb25cbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwiYm90dG9tXCJdKSxcbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzY3JvbGxUb0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgdXBkYXRlUG9zaXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2VhcmNoXCIsIFwic3RyaWN0XCIsIFwiaGlnaGxpZ2h0QWxsXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vbWFyayc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgaGlnaGxpZ2h0ID0gZnVuY3Rpb24gaGlnaGxpZ2h0KHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkge1xuICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHNlYXJjaFN1YmplY3Q7XG4gIH1cblxuICBpZiAoIXNlYXJjaFN1YmplY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChoaWdobGlnaHRBbGwpIHtcbiAgICB2YXIgY2h1bmtzID0gZ2V0SGlnaHRsaWdodFdvcmRzKHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNodW5rcy5tYXAoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICB2YXIgZW5kID0gY2h1bmsuZW5kLFxuICAgICAgICAgIGhpZ2hsaWdodCA9IGNodW5rLmhpZ2hsaWdodCxcbiAgICAgICAgICBzdGFydCA9IGNodW5rLnN0YXJ0O1xuICAgICAgdmFyIHZhbHVlID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcblxuICAgICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgICAgICAga2V5OiBzdGFydCxcbiAgICAgICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHRcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gaXNTdHJpY3QgPyBzZWFyY2hTdWJqZWN0IDogc2VhcmNoU3ViamVjdC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gaXNTdHJpY3QgPyBzZWFyY2hWYWx1ZSA6IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBpbmRleE9mTWF0Y2ggPSBub3JtYWxpemVkU2VhcmNoU3ViamVjdC5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKGluZGV4T2ZNYXRjaCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc2VhcmNoU3ViamVjdDtcbiAgfVxuXG4gIHZhciBwcmVNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKDAsIGluZGV4T2ZNYXRjaCk7XG4gIHZhciBtYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCwgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgdmFyIHBvc3RNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBwcmVNYXRjaCwgX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gIH0sIG1hdGNoKSwgcG9zdE1hdGNoKTtcbn07XG5cbnZhciBnZXRIaWdodGxpZ2h0V29yZHMgPSBmdW5jdGlvbiBnZXRIaWdodGxpZ2h0V29yZHMoc2VhcmNoU3ViamVjdCwgc2VhcmNoVmFsdWUsIGlzU3RyaWN0KSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoc2VhcmNoVmFsdWUsIGlzU3RyaWN0ID8gJ2cnIDogJ2dpJyk7XG4gIHZhciBtYXRjaGVzID0gW107XG4gIHZhciBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hTdWJqZWN0KSkgIT09IG51bGwpIHtcbiAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgZW5kOiAobWF0Y2guaW5kZXggfHwgMCkgKyBtYXRjaFswXS5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxsSW5DaHVua3MobWF0Y2hlcywgc2VhcmNoU3ViamVjdC5sZW5ndGgpO1xufTtcblxudmFyIGZpbGxJbkNodW5rcyA9IGZ1bmN0aW9uIGZpbGxJbkNodW5rcyhjaHVua3NUb0hpZ2hsaWdodCwgdG90YWxMZW5ndGgpIHtcbiAgdmFyIGFsbENodW5rcyA9IFtdO1xuXG4gIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoc3RhcnQsIGVuZCwgaGlnaGxpZ2h0KSB7XG4gICAgaWYgKGVuZCAtIHN0YXJ0ID4gMCkge1xuICAgICAgYWxsQ2h1bmtzLnB1c2goe1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kLFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChjaHVua3NUb0hpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmQoMCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICBjaHVua3NUb0hpZ2hsaWdodC5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgYXBwZW5kKGxhc3RJbmRleCwgY2h1bmsuc3RhcnQsIGZhbHNlKTtcbiAgICAgIGFwcGVuZChjaHVuay5zdGFydCwgY2h1bmsuZW5kLCB0cnVlKTtcbiAgICAgIGxhc3RJbmRleCA9IGNodW5rLmVuZDtcbiAgICB9KTtcbiAgICBhcHBlbmQobGFzdEluZGV4LCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENodW5rcztcbn07XG5cbmV4cG9ydCB2YXIgRXVpSGlnaGxpZ2h0ID0gZnVuY3Rpb24gRXVpSGlnaGxpZ2h0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2VhcmNoID0gX3JlZi5zZWFyY2gsXG4gICAgICBfcmVmJHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgc3RyaWN0ID0gX3JlZiRzdHJpY3QgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzdHJpY3QsXG4gICAgICBfcmVmJGhpZ2hsaWdodEFsbCA9IF9yZWYuaGlnaGxpZ2h0QWxsLFxuICAgICAgaGlnaGxpZ2h0QWxsID0gX3JlZiRoaWdobGlnaHRBbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoaWdobGlnaHRBbGwsXG4gICAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgaGlnaGxpZ2h0KGNoaWxkcmVuLCBzZWFyY2gsIHN0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkpO1xufTtcbkV1aUhpZ2hsaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIHN0cmluZyB0byBoaWdobGlnaHQgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFdoYXQgdG8gc2VhcmNoIGZvclxuICAgICAgICovXG4gIHNlYXJjaDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogU2hvdWxkIHRoZSBzZWFyY2ggYmUgc3RyaWN0IG9yIG5vdFxuICAgICAgICovXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG91bGQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzXG4gICAgICAgKi9cbiAgaGlnaGxpZ2h0QWxsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aU1hcmtTdHlsZXMgfSBmcm9tICcuL21hcmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU1hcmsgPSBmdW5jdGlvbiBFdWlNYXJrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciB1c2VUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBoaWdobGlnaHRTdGFydCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0U3RhcnQnLCAnaGlnaGxpZ2h0IHN0YXJ0Jyk7XG4gIHZhciBoaWdobGlnaHRFbmQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodEVuZCcsICdoaWdobGlnaHQgZW5kJyk7XG4gIHZhciBzdHlsZXMgPSBldWlNYXJrU3R5bGVzKHVzZVRoZW1lLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhpZ2hsaWdodFN0YXJ0OiBoaWdobGlnaHRTdGFydCxcbiAgICBoaWdobGlnaHRFbmQ6IGhpZ2hsaWdodEVuZFxuICB9KTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlNYXJrJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJtYXJrXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IFtzdHlsZXMsIFwiO2xhYmVsOkV1aU1hcms7XCJdLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aU1hcmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byByZW1vdmUgdGhlIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXJcbiAgICAgICAqIHNjcmVlbiByZWFkZXIgaGVscGVyIHRleHRcbiAgICAgICAqL1xuICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIGV1aU1hcmtTdHlsZXMgPSBmdW5jdGlvbiBldWlNYXJrU3R5bGVzKF9yZWYsIF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZjIuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgICBoaWdobGlnaHRTdGFydCA9IF9yZWYyLmhpZ2hsaWdodFN0YXJ0LFxuICAgICAgaGlnaGxpZ2h0RW5kID0gX3JlZjIuaGlnaGxpZ2h0RW5kO1xuICAvLyBUT0RPOiBXYXMgJGV1aUZvY3VzQmFja2dyb3VuZENvbG9yXG4gIHZhciB0cmFuc3BhcmVuY3kgPSB7XG4gICAgTElHSFQ6IDAuMSxcbiAgICBEQVJLOiAwLjNcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgdHJhbnNwYXJlbmN5W2NvbG9yTW9kZV0pLCBcIjtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcIiwgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPT09IHRydWUgJiYgXCJcXG4gICAgICAmOmJlZm9yZSxcXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIFwiLmNvbmNhdChldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6YmVmb3JlIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0U3RhcnQsIFwiXSAnO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0RW5kLCBcIl0gJztcXG4gICAgICB9XFxuICAgIFwiKSwgXCI7O2xhYmVsOmV1aU1hcmtTdHlsZXM7XCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFRpdGxlID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hUaXRsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hUaXRsZVwiXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5FdWlDb21ib0JveFRpdGxlLnByb3BUeXBlcyA9IHt9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgcmVzb2x2ZUljb25BbmRDb2xvciA9IGZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRmlsdGVyU2VsZWN0SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICBmdW5jdGlvbiBFdWlGaWx0ZXJTZWxlY3RJdGVtKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b25SZWYpIHtcbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZpbHRlclNlbGVjdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wcy5zaG93SWNvbnMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWx0ZXJTZWxlY3RJdGVtJywge1xuICAgICAgICAnZXVpRmlsdGVyU2VsZWN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaWNvbk5vZGU7XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBpY29uTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYnV0dG9uUmVmID0gX3JlZjtcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzRm9jdXNlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgfSwgaWNvbk5vZGUsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZpbHRlclNlbGVjdEl0ZW1fX2NvbnRlbnRcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIlxuICAgICAgfSwgY2hpbGRyZW4pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZpbHRlclNlbGVjdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWx0ZXJTZWxlY3RJdGVtLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZVxufSk7XG5cbkV1aUZpbHRlclNlbGVjdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIl0pLFxuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9uc09yR3JvdXBzKSB7XG4gIHJldHVybiBvcHRpb25zT3JHcm91cHMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zLCBvcHRpb25Pckdyb3VwKSB7XG4gICAgaWYgKG9wdGlvbk9yR3JvdXAub3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KG9wdGlvbk9yR3JvdXAub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChvcHRpb25Pckdyb3VwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwgW10pO1xufTtcbmV4cG9ydCB2YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucywgb3B0aW9uS2V5KSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlICYmICghb3B0aW9uS2V5IHx8IG9wdGlvbi5rZXkgPT09IG9wdGlvbktleSk7XG4gIH0pO1xufTtcblxudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihhY2N1bXVsYXRvciwgb3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCkge1xuICAvLyBPbmx5IHNob3cgb3B0aW9ucyB3aGljaCBoYXZlbid0IHlldCBiZWVuIHNlbGVjdGVkIHVubGVzcyByZXF1ZXN0ZWQuXG4gIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUob3B0aW9uLmxhYmVsLCBzZWxlY3RlZE9wdGlvbnMsIG9wdGlvbi5rZXkpO1xuXG4gIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhc2hvd1ByZXZTZWxlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmUtZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuXG5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBvcHRpb24ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRPcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCwgc29ydE1hdGNoZXNCeSkge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCA9IFtdO1xuICAgICAgb3B0aW9uLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBPcHRpb24pIHtcbiAgICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLCBncm91cE9wdGlvbiwgc2VsZWN0ZWRPcHRpb25zLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbnNGb3JHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBvcHRpb24gZm9yIGdyb3VwIGxhYmVsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBrZXk6IG9wdGlvbi5rZXksXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb246IHRydWVcbiAgICAgICAgfSk7IC8vIEFkZCBtYXRjaGluZyBvcHRpb25zIGZvciBncm91cFxuICAgICAgICAvLyB1c2UgY29uY2F0IG92ZXIgc3ByZWFkaW5nIHRvIHN1cHBvcnQgbGFyZ2UgYXJyYXlzIC0gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vamF2YXNjcmlwdC1hcmd1bWVudC1jb3VudFxuXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5jb25jYXQobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChzb3J0TWF0Y2hlc0J5ID09PSAnc3RhcnRzV2l0aCcpIHtcbiAgICB2YXIgcmVmT2JqID0ge1xuICAgICAgc3RhcnRXaXRoOiBbXSxcbiAgICAgIG90aGVyczogW11cbiAgICB9O1xuICAgIG1hdGNoaW5nT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmVmT2JqLnN0YXJ0V2l0aC5wdXNoKG9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZPYmoub3RoZXJzLnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZWZPYmouc3RhcnRXaXRoKSwgX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5vdGhlcnMpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3NpemVJbnB1dCBmcm9tICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFBpbGwgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94SW5wdXQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdhaXQgYSBiZWF0IGZvciB0aGUgRE9NIHRvIHVwZGF0ZSwgc2luY2Ugd2UgZGVwZW5kIG9uIERPTSBlbGVtZW50cycgYm91bmRzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMucHJvcHMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRPbkNoYW5nZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wcy5zZWFyY2hWYWx1ZTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICB2YXIgYXV0b1NpemVJbnB1dFJlZiA9IF90aGlzLnByb3BzLmF1dG9TaXplSW5wdXRSZWY7XG5cbiAgICAgIGlmIChhdXRvU2l6ZUlucHV0UmVmKSB7XG4gICAgICAgIGF1dG9TaXplSW5wdXRSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveElucHV0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgZXZlcnl0aGluZyBpZiB0aGUgdXNlciBlbnRlcnMgZW5vdWdoIGlucHV0IHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHNpemUgb2YgdGhlIGlucHV0LlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb25JZCA9IF90aGlzJHByb3BzMi5mb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMyLmlucHV0UmVmLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkcHJvcHMyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbm9JY29uID0gX3RoaXMkcHJvcHMyLm5vSWNvbixcbiAgICAgICAgICBvbkNsZWFyID0gX3RoaXMkcHJvcHMyLm9uQ2xlYXIsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB0b2dnbGVCdXR0b25SZWYgPSBfdGhpcyRwcm9wczIudG9nZ2xlQnV0dG9uUmVmLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMyLnZhbHVlLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczIucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczIuYXBwZW5kLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMyLmF1dG9Gb2N1cyxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMlsnYXJpYS1sYWJlbGxlZGJ5J107XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBhc1BsYWluVGV4dCA9IHNpbmdsZVNlbGVjdGlvblByb3AgJiYgX3R5cGVvZihzaW5nbGVTZWxlY3Rpb25Qcm9wKSA9PT0gJ29iamVjdCcgJiYgc2luZ2xlU2VsZWN0aW9uUHJvcC5hc1BsYWluVGV4dCB8fCBmYWxzZTtcbiAgICAgIHZhciBwaWxscyA9IHNlbGVjdGVkT3B0aW9ucyA/IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgY29sb3IgPSBvcHRpb24uY29sb3IsXG4gICAgICAgICAgICBvbkNsaWNrID0gb3B0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgICB2YXIgcGlsbE9uQ2xvc2UgPSBpc0Rpc2FibGVkIHx8IHNpbmdsZVNlbGVjdGlvbiB8fCBvbkNsaWNrID8gdW5kZWZpbmVkIDogb25SZW1vdmVPcHRpb247XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94UGlsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgIG9uQ2xvc2U6IHBpbGxPbkNsb3NlLFxuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrID8gJ0NoYW5nZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXNQbGFpblRleHQ6IGFzUGxhaW5UZXh0XG4gICAgICAgIH0sIHJlc3QpLCBsYWJlbCk7XG4gICAgICB9KSA6IG51bGw7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZTtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlSWQ7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgIHZhciByZWFkUGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IFwiXCIuY29uY2F0KHBsYWNlaG9sZGVyLCBcIi5cIikgOiAnJztcbiAgICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50ID0gXCJDb21ibyBib3guIFNlbGVjdGVkLiBcIi5jb25jYXQoc2VhcmNoVmFsdWUgPyBcIlwiLmNvbmNhdChzZWFyY2hWYWx1ZSwgXCIuIFNlbGVjdGVkLiBcIikgOiAnJykuY29uY2F0KHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCA/IFwiXCIuY29uY2F0KHZhbHVlLCBcIi4gUHJlc3MgQmFja3NwYWNlIHRvIGRlbGV0ZSBcIikuY29uY2F0KHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0ubGFiZWwsIFwiLiBcIikgOiAnJywgXCJDb21ibyBib3ggaW5wdXQuIFwiKS5jb25jYXQocmVhZFBsYWNlaG9sZGVyLCBcIiBUeXBlIHNvbWUgdGV4dCBvciwgdG8gZGlzcGxheSBhIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRG93biBBcnJvdy4gXCIpICsgJ1RvIGV4aXQgdGhlIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRXNjYXBlLic7XG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZCA9IHJvb3RJZCgncmVtb3ZlT3B0aW9uTWVzc2FnZScpOyAvLyBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiB3aWxsIHJlYWQgdGhpcyBtZXNzYWdlIGFsb3VkIGltbWVkaWF0ZWx5IG9uY2UgaXQgZW50ZXJzIHRoZSBET00uXG4gICAgICAgIC8vIFdlJ2xsIHJlbmRlciB0byB0aGUgRE9NIHdoZW4gdGhlIGlucHV0IGdhaW5zIGZvY3VzIGFuZCByZW1vdmUgaXQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICAgIC8vIFdlJ2xsIHVzZSBhcmlhLWhpZGRlbiB0byBwcmV2ZW50IGRlZmF1bHQgYXJpYSBpbmZvcm1hdGlvbiBmcm9tIGJlaW5nIHJlYWQgYnkgdGhlIHNjcmVlblxuICAgICAgICAvLyByZWFkZXIuXG5cbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZSA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsXG4gICAgICAgICAgaWQ6IHJlbW92ZU9wdGlvbk1lc3NhZ2VJZFxuICAgICAgICB9LCByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGxhY2Vob2xkZXJNZXNzYWdlO1xuXG4gICAgICBpZiAocGxhY2Vob2xkZXIgJiYgc2VsZWN0ZWRPcHRpb25zICYmICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmICFzZWFyY2hWYWx1ZSkge1xuICAgICAgICBwbGFjZWhvbGRlck1lc3NhZ2UgPSBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94UGxhY2Vob2xkZXJcIlxuICAgICAgICB9LCBwbGFjZWhvbGRlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGlja1Byb3BzID0ge307XG5cbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiBvbkNsZWFyICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICBjbGlja1Byb3BzLmNsZWFyID0ge1xuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveENsZWFyQnV0dG9uJyxcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsZWFyXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpY29uO1xuXG4gICAgICBpZiAoIW5vSWNvbikge1xuICAgICAgICBpY29uID0ge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogaXNMaXN0T3BlbiA/ICdDbG9zZSBsaXN0IG9mIG9wdGlvbnMnIDogJ09wZW4gbGlzdCBvZiBvcHRpb25zJyxcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hUb2dnbGVMaXN0QnV0dG9uJyxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBpc0xpc3RPcGVuICYmICFpc0Rpc2FibGVkID8gb25DbG9zZUxpc3RDbGljayA6IG9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICByZWY6IHRvZ2dsZUJ1dHRvblJlZixcbiAgICAgICAgICBzaWRlOiAncmlnaHQnLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICB0eXBlOiAnYXJyb3dEb3duJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgd3JhcENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveF9faW5wdXRXcmFwJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1ub1dyYXAnOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLWlzTG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtaXNDbGVhcmFibGUnOiBvbkNsZWFyLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0taW5Hcm91cCc6IHByZXBlbmQgfHwgYXBwZW5kXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfZXh0ZW5kcyh7XG4gICAgICAgIGljb246IGljb25cbiAgICAgIH0sIGNsaWNrUHJvcHMsIHtcbiAgICAgICAgaW5wdXRJZDogaWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmRcbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB3cmFwQ2xhc3NlcyxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94SW5wdXRcIixcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgdGFiSW5kZXg6IC0xIC8vIGJlY29tZXMgb25CbHVyIGV2ZW50J3MgcmVsYXRlZFRhcmdldCwgb3RoZXJ3aXNlIHJlbGF0ZWRUYXJnZXQgaXMgbnVsbCB3aGVuIGNsaWNraW5nIG9uIHRoaXMgZGl2XG5cbiAgICAgIH0sICFzaW5nbGVTZWxlY3Rpb24gfHwgIXNlYXJjaFZhbHVlID8gcGlsbHMgOiBudWxsLCBwbGFjZWhvbGRlck1lc3NhZ2UsIF9fX0Vtb3Rpb25KU1goQXV0b3NpemVJbnB1dCwge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBmb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBpc0xpc3RPcGVuID8gcm9vdElkKCdsaXN0Ym94JykgOiAnJyxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGlzTGlzdE9wZW4sXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5LFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hfX2lucHV0XCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveFNlYXJjaElucHV0XCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaW5wdXRPbkNoYW5nZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICByZWY6IHRoaXMuaW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZvbnRTaXplOiAxNFxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzXG4gICAgICB9KSwgcmVtb3ZlT3B0aW9uTWVzc2FnZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveElucHV0O1xufShDb21wb25lbnQpO1xuRXVpQ29tYm9Cb3hJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGF1dG9TaXplSW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvY3VzZWRPcHRpb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFzU2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0xpc3RPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBub0ljb246IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xvc2VMaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25PcGVuTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblJlbW92ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgdG9nZ2xlQnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICB1cGRhdGVQb3NpdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiYXNQbGFpblRleHRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJvbkNsb3NlXCIsIFwib3B0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hQaWxsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveFBpbGwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hQaWxsKTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveFBpbGwoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94UGlsbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xvc2VCdXR0b25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wcy5vcHRpb247XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2Uob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveFBpbGwsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXNQbGFpblRleHQgPSBfdGhpcyRwcm9wczIuYXNQbGFpblRleHQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzMi5jb2xvcixcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2ssXG4gICAgICAgICAgb25DbGlja0FyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wczIub3B0aW9uLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94UGlsbCcsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94UGlsbC0tcGxhaW5UZXh0JzogYXNQbGFpblRleHRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb25DbGlja1Byb3BzID0gb25DbGljayAmJiBvbkNsaWNrQXJpYUxhYmVsID8ge1xuICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrQXJpYUxhYmVsXG4gICAgICB9IDoge307XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveFBpbGwucmVtb3ZlU2VsZWN0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJSZW1vdmUge2NoaWxkcmVufSBmcm9tIHNlbGVjdGlvbiBpbiB0aGlzIGdyb3VwXCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZW1vdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgaWNvbk9uQ2xpY2s6IF90aGlzMi5vbkNsb3NlQnV0dG9uQ2xpY2ssXG4gICAgICAgICAgICBpY29uT25DbGlja0FyaWFMYWJlbDogcmVtb3ZlU2VsZWN0aW9uLFxuICAgICAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgICAgIGljb25UeXBlOiBcImNyb3NzXCIsXG4gICAgICAgICAgICB0aXRsZTogY2hpbGRyZW5cbiAgICAgICAgICB9LCBvbkNsaWNrUHJvcHMsIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNQbGFpblRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIHRpdGxlOiBjaGlsZHJlblxuICAgICAgfSwgcmVzdCwgb25DbGlja1Byb3BzKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveFBpbGw7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveFBpbGwsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY29sb3I6ICdob2xsb3cnXG59KTtcblxuRXVpQ29tYm9Cb3hQaWxsLnByb3BUeXBlcyA9IHtcbiAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvcHRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VPcHRpb25zXCIsIFwic2hvd1BlclBhZ2VPcHRpb25zXCIsIFwib25DaGFuZ2VJdGVtc1BlclBhZ2VcIiwgXCJvbkNoYW5nZVBhZ2VcIiwgXCJwYWdlQ291bnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpVGFibGVQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZSA9IF9yZWYuaXRlbXNQZXJQYWdlLFxuICAgICAgaXRlbXNQZXJQYWdlID0gX3JlZiRpdGVtc1BlclBhZ2UgPT09IHZvaWQgMCA/IDUwIDogX3JlZiRpdGVtc1BlclBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZU9wdGkgPSBfcmVmLml0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gX3JlZiRpdGVtc1BlclBhZ2VPcHRpID09PSB2b2lkIDAgPyBbMTAsIDIwLCA1MCwgMTAwXSA6IF9yZWYkaXRlbXNQZXJQYWdlT3B0aSxcbiAgICAgIF9yZWYkc2hvd1BlclBhZ2VPcHRpbyA9IF9yZWYuc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgICAgc2hvd1BlclBhZ2VPcHRpb25zID0gX3JlZiRzaG93UGVyUGFnZU9wdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93UGVyUGFnZU9wdGlvLFxuICAgICAgX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID0gX3JlZi5vbkNoYW5nZUl0ZW1zUGVyUGFnZSxcbiAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID0gX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25DaGFuZ2VJdGVtc1BlcixcbiAgICAgIG9uQ2hhbmdlUGFnZSA9IF9yZWYub25DaGFuZ2VQYWdlLFxuICAgICAgcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRJc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgdG9nZ2xlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZ1bmN0aW9uIChpc09wZW4pIHtcbiAgICAgIHJldHVybiAhaXNPcGVuO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgIHNpemU6IFwieHNcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uUG9wb3ZlckJ1dHRvblwiLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZVBvcG92ZXJcbiAgfSwgaXRlbXNQZXJQYWdlID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLmFsbFJvd3NcIixcbiAgICBkZWZhdWx0OiBcIlNob3dpbmcgYWxsIHJvd3NcIlxuICB9KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZVwiLFxuICAgIGRlZmF1bHQ6IFwiUm93cyBwZXIgcGFnZVwiXG4gIH0pLCBcIjogXCIsIGl0ZW1zUGVyUGFnZSkpO1xuXG4gIHZhciBpdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpdGVtc1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbXNQZXJQYWdlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAga2V5OiBpdGVtc1BlclBhZ2VPcHRpb24sXG4gICAgICAgIGljb246IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ2NoZWNrJyA6ICdlbXB0eScsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlT3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvbi1cIi5jb25jYXQoaXRlbXNQZXJQYWdlT3B0aW9uLCBcIi1yb3dzXCIpXG4gICAgICB9LCBpdGVtc1BlclBhZ2VPcHRpb24gPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uU2hvd0FsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTaG93IGFsbCByb3dzXCJcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByb3dzUGVyUGFnZTogaXRlbXNQZXJQYWdlT3B0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFwie3Jvd3NQZXJQYWdlfSByb3dzXCJcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSwgW2l0ZW1zUGVyUGFnZU9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgb25DaGFuZ2VJdGVtc1BlclBhZ2UsIGNsb3NlUG9wb3Zlcl0pO1xuXG4gIHZhciBpdGVtc1BlclBhZ2VQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgYnV0dG9uOiBidXR0b24sXG4gICAgaXNPcGVuOiBpc1BvcG92ZXJPcGVuLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgIGFuY2hvclBvc2l0aW9uOiBcInVwUmlnaHRcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICBpdGVtczogaXRlbXNcbiAgfSkpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlQmV0d2VlblwiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2UsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpLXhTY3JvbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgc2hvd1BlclBhZ2VPcHRpb25zICYmIGl0ZW1zUGVyUGFnZVBvcG92ZXIpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgaXRlbXNQZXJQYWdlID4gMCAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb24sIF9leHRlbmRzKHtcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgIG9uUGFnZUNsaWNrOiBvbkNoYW5nZVBhZ2VcbiAgfSwgcmVzdCkpKSk7XG59O1xuRXVpVGFibGVQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogT3B0aW9uIHRvIGNvbXBsZXRlbHkgaGlkZSB0aGUgXCJSb3dzIHBlciBwYWdlXCIgc2VsZWN0b3IuXG4gICAgICovXG4gIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3VycmVudCBzZWxlY3Rpb24gZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBDdXN0b20gYXJyYXkgb2Ygb3B0aW9ucyBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHNlbGVjdGVkIGBwYWdlU2l6ZWAgbnVtYmVyXG4gICAgICovXG4gIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlcyB0aGUgYGlkYCBvZiB0aGUgdGFibGUgYmVpbmcgY29udHJvbGxlZFxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJwYWdlQ291bnRcIiwgXCJhY3RpdmVQYWdlXCIsIFwib25QYWdlQ2xpY2tcIiwgXCJjb21wcmVzc2VkXCIsIFwiYXJpYS1jb250cm9sc1wiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b24gfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cnO1xuaW1wb3J0IHsgdXNlSXNXaXRoaW5CcmVha3BvaW50cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgTUFYX1ZJU0lCTEVfUEFHRVMgPSA1O1xudmFyIE5VTUJFUl9TVVJST1VORElOR19QQUdFUyA9IE1hdGguZmxvb3IoTUFYX1ZJU0lCTEVfUEFHRVMgKiAwLjUpO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICBwYWdlQ291bnQgPSBfcmVmJHBhZ2VDb3VudCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkcGFnZUNvdW50LFxuICAgICAgX3JlZiRhY3RpdmVQYWdlID0gX3JlZi5hY3RpdmVQYWdlLFxuICAgICAgYWN0aXZlUGFnZSA9IF9yZWYkYWN0aXZlUGFnZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYWN0aXZlUGFnZSxcbiAgICAgIF9yZWYkb25QYWdlQ2xpY2sgPSBfcmVmLm9uUGFnZUNsaWNrLFxuICAgICAgb25QYWdlQ2xpY2sgPSBfcmVmJG9uUGFnZUNsaWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25QYWdlQ2xpY2ssXG4gICAgICBfY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IFsneHMnLCAncyddIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHJlc3BvbnNpdmUsICEhcmVzcG9uc2l2ZSk7IC8vIEZvcmNlIHRvIGBjb21wcmVzc2VkYCB2ZXJzaW9uIGlmIHNwZWNpZmllZCBvciB3aXRoaW4gdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcblxuICB2YXIgY29tcHJlc3NlZCA9IF9jb21wcmVzc2VkIHx8IGlzUmVzcG9uc2l2ZTtcblxuICB2YXIgc2FmZUNsaWNrID0gZnVuY3Rpb24gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChhcmlhQ29udHJvbHMpIHtcbiAgICAgIHZhciBjb250cm9sbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyaWFDb250cm9scyk7XG5cbiAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudCkge1xuICAgICAgICBjb250cm9sbGVkRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZUNsaWNrKHBhZ2VJbmRleCk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uJywgY2xhc3NOYW1lKTtcblxuICB2YXIgZmlyc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwiZmlyc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgMCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcblxuICB2YXIgcHJldmlvdXNCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwicHJldmlvdXNcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSAtIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG5cbiAgdmFyIG5leHRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibmV4dFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlICsgMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgbGFzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJsYXN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VDb3VudCA/IHBhZ2VDb3VudCAtIDEgOiAtMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgY2VudGVyUGFnZUNvdW50O1xuXG4gIGlmIChwYWdlQ291bnQpIHtcbiAgICB2YXIgc2hhcmVkQnV0dG9uUHJvcHMgPSB7XG4gICAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2s6IHNhZmVDbGljayxcbiAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgfTtcblxuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dFwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5wYWdlT2ZUb3RhbENvbXByZXNzZWRcIixcbiAgICAgICAgZGVmYXVsdDogXCJ7cGFnZX0gb2Yge3RvdGFsfVwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBwYWdlOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBhY3RpdmVQYWdlICsgMSksXG4gICAgICAgICAgdG90YWw6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIHBhZ2VDb3VudClcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFnZXMgPSBbXTtcbiAgICAgIHZhciBmaXJzdFBhZ2VJblJhbmdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oYWN0aXZlUGFnZSAtIE5VTUJFUl9TVVJST1VORElOR19QQUdFUywgcGFnZUNvdW50IC0gTUFYX1ZJU0lCTEVfUEFHRVMpKTtcbiAgICAgIHZhciBsYXN0UGFnZUluUmFuZ2UgPSBNYXRoLm1pbihwYWdlQ291bnQsIGZpcnN0UGFnZUluUmFuZ2UgKyBNQVhfVklTSUJMRV9QQUdFUyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSBmaXJzdFBhZ2VJblJhbmdlLCBpbmRleCA9IDA7IGkgPCBsYXN0UGFnZUluUmFuZ2U7IGkrKywgaW5kZXgrKykge1xuICAgICAgICBwYWdlcy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IGksXG4gICAgICAgICAga2V5OiBpXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDApIHtcbiAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAga2V5OiAwXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuXG4gICAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMSAmJiBmaXJzdFBhZ2VJblJhbmdlICE9PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcInN0YXJ0aW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24uZmlyc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyAyIHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBsYXN0UGFnZTogZmlyc3RQYWdlSW5SYW5nZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChmaXJzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZpcnN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXIgZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxuICAgICAgICAgICAga2V5OiAxXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50KSB7XG4gICAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgKyAxID09PSBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiBsYXN0UGFnZUluUmFuZ2UsXG4gICAgICAgICAgICBrZXk6IGxhc3RQYWdlSW5SYW5nZVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJlbmRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5sYXN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMge2ZpcnN0UGFnZX0gdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGZpcnN0UGFnZTogbGFzdFBhZ2VJblJhbmdlICsgMSxcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAobGFzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGxhc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25CdXR0b24taXNQbGFjZWhvbGRlciBldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBwYWdlQ291bnQgLSAxLFxuICAgICAgICAgIGtleTogcGFnZUNvdW50IC0gMVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGFibGVQYWdlcyA9IHBhZ2VzO1xuXG4gICAgICB2YXIgYWNjZXNzaWJsZU5hbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RbJ2FyaWEtbGFiZWwnXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcmVzdFsnYXJpYS1sYWJlbCddXG4gICAgICB9KSwgcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J11cbiAgICAgIH0pO1xuXG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe30sIGFjY2Vzc2libGVOYW1lLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19saXN0XCJcbiAgICAgIH0pLCBmaXJzdFBhZ2VCdXR0b25zLCBzZWxlY3RhYmxlUGFnZXMsIGxhc3RQYWdlQnV0dG9ucyk7XG4gICAgfVxuICB9IC8vIEFsbCB0aGUgaTE4biBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHdob2xlIFNSLW9ubHkgdGV4dFxuXG5cbiAgdmFyIGxhc3RMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ubGFzdCcsICdMYXN0Jyk7XG4gIHZhciBwYWdlTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLnBhZ2UnLCAnUGFnZScpO1xuICB2YXIgb2ZMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ub2YnLCAnb2YnKTtcbiAgdmFyIGNvbGxlY3Rpb25MYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uY29sbGVjdGlvbicsICdjb2xsZWN0aW9uJyk7XG4gIHZhciBmcm9tRW5kTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmZyb21FbmRMYWJlbCcsICdmcm9tIGVuZCcpOyAvLyBCYXNlZCBvbiB0aGUgYGFjdGl2ZVBhZ2VgIGNvdW50LCBidWlsZCB0aGUgZnJvbnQgb2YgdGhlIFNSLW9ubHkgdGV4dFxuICAvLyBpLmUuIGBQYWdlIDFgLCBgUGFnZSAyIGZyb20gZW5kYCwgYExhc3QgUGFnZWBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VTdHJpbmcgPSBmdW5jdGlvbiBhY2Nlc3NpYmxlUGFnZVN0cmluZygpIHtcbiAgICBpZiAoYWN0aXZlUGFnZSA8IC0xKSByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KE1hdGguYWJzKGFjdGl2ZVBhZ2UpLCBcIiBcIikuY29uY2F0KGZyb21FbmRMYWJlbCk7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPT09IC0xKSByZXR1cm4gXCJcIi5jb25jYXQobGFzdExhYmVsLCBcIiBcIikuY29uY2F0KHBhZ2VMYWJlbCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChhY3RpdmVQYWdlICsgMSk7XG4gIH07IC8vIElmIGBwYWdlQ291bnRgIGlzIHVua25vd24gY2FsbCBpdCBgY29sbGVjdGlvbmBcblxuXG4gIHZhciBhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyA9IHBhZ2VDb3VudCA9PT0gMCA/IGNvbGxlY3Rpb25MYWJlbCA6IHBhZ2VDb3VudC50b1N0cmluZygpOyAvLyBDcmVhdGUgdGhlIHdob2xlIHN0cmluZyB3aXRoIHRvdGFsIHBhZ2VDb3VudCBvciBgY29sbGVjdGlvbmBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VDb3VudCA9IFwiXCIuY29uY2F0KGFjY2Vzc2libGVQYWdlU3RyaW5nKCksIFwiIFwiKS5jb25jYXQob2ZMYWJlbCwgXCIgXCIpLmNvbmNhdChhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibmF2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcInN0YXR1c1wiXG4gIH0sIGFjY2Vzc2libGVQYWdlQ291bnQpKSwgZmlyc3RCdXR0b24sIHByZXZpb3VzQnV0dG9uLCBjZW50ZXJQYWdlQ291bnQsIG5leHRCdXR0b24sIGxhc3RCdXR0b24pO1xufTtcbkV1aVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBQYXNzIGAwYCBpZiB0b3RhbCBjb3VudCBpcyB1bmtub3duLlxuICAgICAqL1xuICBwYWdlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZSB1c2luZyBhIHplcm8gYmFzZWQgaW5kZXguXG4gICAgICogU28gaWYgeW91IHNldCB0aGUgYWN0aXZlUGFnZSB0byAxLCBpdCB3aWxsIGFjdGl2YXRlIHRoZSBzZWNvbmQgcGFnZS5cbiAgICAgKiBQYXNzIGAtMWAgZm9yIGZvcmNpbmcgdG8gbGFzdCBwYWdlLlxuICAgICAqL1xuICBhY3RpdmVQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayB0aGUgaW50ZXJuYWxseSBjYWxjdWxhdGVkIGBhY3RpdmVQYWdlYCBpbmRleFxuICAgICAqL1xuICBvblBhZ2VDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHNob3cgbmV4dC9wcmV2IGFycm93cyBhbmQgc2ltcGxpZmllZCBudW1iZXIgc2V0LlxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJZiBwYXNzZWQgaW4sIHBhc3NlcyB2YWx1ZSB0aHJvdWdoIHRvIGVhY2ggYnV0dG9uIHRvIHNldCBhcmlhLWNvbnRyb2xzLlxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IHJlZHVjZXMgdG8gdGhlIGBjb21wcmVzc2VkYCB2ZXJzaW9uIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICAgKiBSZW1vdmUgY29tcGxldGVseSB3aXRoIGBmYWxzZWAgb3IgcHJvdmlkZSB5b3VyIG93biBsaXN0IG9mIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMuXG4gICAgICovXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSlcbn07XG5cbnZhciBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyKF9yZWYyKSB7XG4gIHZhciBwYWdlSW5kZXggPSBfcmVmMi5wYWdlSW5kZXgsXG4gICAgICBfcmVmMiRpbkxpc3QgPSBfcmVmMi5pbkxpc3QsXG4gICAgICBpbkxpc3QgPSBfcmVmMiRpbkxpc3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpbkxpc3QsXG4gICAgICBhY3RpdmVQYWdlID0gX3JlZjIuYWN0aXZlUGFnZSxcbiAgICAgIHBhZ2VDb3VudCA9IF9yZWYyLnBhZ2VDb3VudCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWYyLmFyaWFDb250cm9scyxcbiAgICAgIHNhZmVDbGljayA9IF9yZWYyLnNhZmVDbGljayxcbiAgICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG5cbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbiwge1xuICAgIGlzQWN0aXZlOiBwYWdlSW5kZXggPT09IGFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogcGFnZUNvdW50LFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpO1xuICAgIH0sXG4gICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSk7XG5cbiAgaWYgKGluTGlzdCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgIH0sIGJ1dHRvbik7XG4gIH1cblxuICByZXR1cm4gYnV0dG9uO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlzQWN0aXZlXCIsIFwiaXNQbGFjZWhvbGRlclwiLCBcInBhZ2VJbmRleFwiLCBcInRvdGFsUGFnZXNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgICAgaXNQbGFjZWhvbGRlciA9IF9yZWYuaXNQbGFjZWhvbGRlcixcbiAgICAgIHBhZ2VJbmRleCA9IF9yZWYucGFnZUluZGV4LFxuICAgICAgdG90YWxQYWdlcyA9IF9yZWYudG90YWxQYWdlcyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25CdXR0b24nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc0FjdGl2ZSc6IGlzQWN0aXZlLFxuICAgICdldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXInOiBpc1BsYWNlaG9sZGVyXG4gIH0pO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2l6ZTogJ3MnLFxuICAgIGNvbG9yOiAndGV4dCcsXG4gICAgJ2RhdGEtdGVzdC1zdWJqJzogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQocGFnZUluZGV4KSxcbiAgICBpc0Rpc2FibGVkOiBpc1BsYWNlaG9sZGVyIHx8IGlzQWN0aXZlXG4gIH0sIGlzQWN0aXZlICYmIHtcbiAgICAnYXJpYS1jdXJyZW50JzogdHJ1ZVxuICB9KSwgcmVzdFsnYXJpYS1jb250cm9scyddICYmIHtcbiAgICBocmVmOiBcIiNcIi5jb25jYXQocmVzdFsnYXJpYS1jb250cm9scyddKVxuICB9KSwgcmVzdCk7XG5cbiAgdmFyIHBhZ2VOdW1iZXIgPSBwYWdlSW5kZXggKyAxO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5sb25nUGFnZVN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX0gb2Yge3RvdGFsUGFnZXN9XCIsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgdG90YWxQYWdlczogdG90YWxQYWdlc1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKGxvbmdQYWdlU3RyaW5nKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5zaG9ydFBhZ2VTdHJpbmdcIixcbiAgICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBwYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHNob3J0UGFnZVN0cmluZykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRvdGFsUGFnZXMgPyBsb25nUGFnZVN0cmluZyA6IHNob3J0UGFnZVN0cmluZ1xuICAgICAgfSwgcHJvcHMpLCBwYWdlTnVtYmVyKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yIGVsbGlwc2lzIG9yIG90aGVyIG5vbi1jbGlja2FibGUgYnV0dG9ucy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3IgZWxsaXBzaXMgb3Igb3RoZXIgbm9uLWNsaWNrYWJsZSBidXR0b25zLlxuICAgICAqL1xuICBpc1BsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHRvdGFsUGFnZXM6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9pY29uJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0ljb25UeXBlTWFwID0ge1xuICBmaXJzdDogJ2Fycm93U3RhcnQnLFxuICBwcmV2aW91czogJ2Fycm93TGVmdCcsXG4gIG5leHQ6ICdhcnJvd1JpZ2h0JyxcbiAgbGFzdDogJ2Fycm93RW5kJ1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvSWNvblR5cGVNYXApO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZi5hcmlhQ29udHJvbHMsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrO1xuICB2YXIgbGFiZWxzID0ge1xuICAgIGZpcnN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cuZmlyc3RQYWdlJywgJ0ZpcnN0IHBhZ2UnKSxcbiAgICBwcmV2aW91czogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByZXZpb3VzUGFnZScsICdQcmV2aW91cyBwYWdlJyksXG4gICAgbmV4dDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lm5leHRQYWdlJywgJ05leHQgcGFnZScpLFxuICAgIGxhc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5sYXN0UGFnZScsICdMYXN0IHBhZ2UnKVxuICB9O1xuICB2YXIgYnV0dG9uUHJvcHMgPSB7fTtcblxuICBpZiAoYXJpYUNvbnRyb2xzICYmICFkaXNhYmxlZCkge1xuICAgIGJ1dHRvblByb3BzLmhyZWYgPSBcIiNcIi5jb25jYXQoYXJpYUNvbnRyb2xzKTtcbiAgICBidXR0b25Qcm9wc1snYXJpYS1jb250cm9scyddID0gYXJpYUNvbnRyb2xzO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkFycm93QnV0dG9uJywgY2xhc3NOYW1lKSxcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxhYmVsc1t0eXBlXSxcbiAgICB0aXRsZTogZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBsYWJlbHNbdHlwZV0sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHR5cGUpLFxuICAgIGljb25UeXBlOiB0eXBlVG9JY29uVHlwZU1hcFt0eXBlXVxuICB9LCBidXR0b25Qcm9wcykpO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhQ29udHJvbHM6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFiID0gZnVuY3Rpb24gRXVpVGFiKF9yZWYpIHtcbiAgdmFyIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFiJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYi1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFiLWlzRGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9KTtcblxuICB2YXIgcHJlcGVuZE5vZGUgPSBwcmVwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19wcmVwZW5kXCJcbiAgfSwgcHJlcGVuZCk7XG5cbiAgdmFyIGFwcGVuZE5vZGUgPSBhcHBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2FwcGVuZFwiXG4gIH0sIGFwcGVuZCk7IC8vICA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbFxuICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudFwiXG4gICAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcInRhYlwiLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xufTtcbkV1aVRhYi5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3R0b21Cb3JkZXJcIiwgXCJleHBhbmRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aVRhYnMtLXNtYWxsJyxcbiAgbTogbnVsbCxcbiAgbDogJ2V1aVRhYnMtLWxhcmdlJyxcbiAgeGw6ICdldWlUYWJzLS14bGFyZ2UnXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlUYWJzID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvdHRvbUJvcmRlciA9IF9yZWYuYm90dG9tQm9yZGVyLFxuICAgICAgYm90dG9tQm9yZGVyID0gX3JlZiRib3R0b21Cb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGJvdHRvbUJvcmRlcixcbiAgICAgIF9yZWYkZXhwYW5kID0gX3JlZi5leHBhbmQsXG4gICAgICBleHBhbmQgPSBfcmVmJGV4cGFuZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGV4cGFuZCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYnMnLCBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIHtcbiAgICAnZXVpVGFicy0tZXhwYW5kJzogZXhwYW5kLFxuICAgICdldWlUYWJzLS1ib3R0b21Cb3JkZXInOiBib3R0b21Cb3JkZXJcbiAgfSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBjaGlsZHJlbiAmJiB7XG4gICAgcm9sZTogJ3RhYmxpc3QnXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59KTtcbkV1aVRhYnMuZGlzcGxheU5hbWUgPSAnRXVpVGFicyc7IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImV4cGFuZFwiLCBcImluaXRpYWxTZWxlY3RlZFRhYlwiLCBcIm9uVGFiQ2xpY2tcIiwgXCJzZWxlY3RlZFRhYlwiLCBcInNpemVcIiwgXCJ0YWJzXCIsIFwiYXV0b0ZvY3VzXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJpZFwiLCBcIm5hbWVcIiwgXCJjb250ZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGFicyB9IGZyb20gJy4uL3RhYnMnO1xuaW1wb3J0IHsgRXVpVGFiIH0gZnJvbSAnLi4vdGFiJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbi8qKlxuICogTWFya2VkIGFzIGNvbnN0IHNvIHR5cGUgaXMgYFsnaW5pdGlhbCcsICdzZWxlY3RlZCddYCBpbnN0ZWFkIG9mIGBzdHJpbmdbXWBcbiAqL1xuZXhwb3J0IHZhciBBVVRPRk9DVVMgPSBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXTtcbmV4cG9ydCB2YXIgRXVpVGFiYmVkQ29udGVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFiYmVkQ29udGVudCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUYWJiZWRDb250ZW50KTtcblxuICBmdW5jdGlvbiBFdWlUYWJiZWRDb250ZW50KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmJlZENvbnRlbnQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRhYnNSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmb2N1c1RhYlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFyZ2V0VGFiID0gX3RoaXMudGFic1JlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIuY29uY2F0KF90aGlzLnN0YXRlLnNlbGVjdGVkVGFiSWQpKTtcblxuICAgICAgdGFyZ2V0VGFiLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5pdGlhbGl6ZUZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaW5Gb2N1cyAmJiBfdGhpcy5wcm9wcy5hdXRvRm9jdXMgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgLy8gTXVzdCB3YWl0IGZvciBzZXRTdGF0ZSB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgYC5mb2N1cygpYFxuICAgICAgICAvLyBhcyB0aGUgZm9jdXMgY2FsbCB0cmlnZ2VycyBhIGJsdXIgb24gdGhlIGZpcnN0IHRhYlxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlRm9jdXNcIiwgZnVuY3Rpb24gKGJsdXJFdmVudCkge1xuICAgICAgLy8gb25seSBzZXQgaW5Gb2N1cyB0byBmYWxzZSBpZiB0aGUgd3JhcHBpbmcgZGl2IGRvZXNuJ3QgY29udGFpbiB0aGUgbm93LWZvY3VzaW5nIGVsZW1lbnRcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGJsdXJFdmVudC5yZWxhdGVkVGFyZ2V0O1xuXG4gICAgICBpZiAoY3VycmVudFRhcmdldC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVGFiQ2xpY2tcIiwgZnVuY3Rpb24gKHNlbGVjdGVkVGFiKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMub25UYWJDbGljayxcbiAgICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRUYWI7XG5cbiAgICAgIGlmIChvblRhYkNsaWNrKSB7XG4gICAgICAgIG9uVGFiQ2xpY2soc2VsZWN0ZWRUYWIpO1xuICAgICAgfSAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG5cblxuICAgICAgaWYgKCFleHRlcm5hbFNlbGVjdGVkVGFiKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYi5pZFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5pdGlhbFNlbGVjdGVkVGFiID0gcHJvcHMuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgICBfc2VsZWN0ZWRUYWIgPSBwcm9wcy5zZWxlY3RlZFRhYixcbiAgICAgICAgdGFicyA9IHByb3BzLnRhYnM7IC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cblxuICAgIHZhciBzZWxlY3RlZFRhYklkO1xuXG4gICAgaWYgKCFfc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHNlbGVjdGVkVGFiSWQgPSBpbml0aWFsU2VsZWN0ZWRUYWIgJiYgaW5pdGlhbFNlbGVjdGVkVGFiLmlkIHx8IHRhYnNbMF0uaWQ7XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYklkLFxuICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUYWJiZWRDb250ZW50LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IHRoZSBgcmVsYXRlZFRhcmdldGAgZXZlbnQgcHJvcGVydHkgZm9yIGJsdXIgZXZlbnRzXG4gICAgICAvLyBidXQgZG9lcyBhZGQgaXQgZm9yIGZvY3Vzb3V0LiBSZWFjdCBkb2Vzbid0IHN1cHBvcnQgYG9uRm9jdXNPdXRgIHNvIGhlcmUgd2UgYXJlLlxuICAgICAgaWYgKHRoaXMudGFic1JlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2hvcnQtdGVybSBzb2x1dGlvbiBmb3IgZXZlbnQgbGlzdGVuZXIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC8yNzE3KVxuICAgICAgICB0aGlzLnRhYnNSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMucmVtb3ZlRm9jdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRhYnNSZWYuY3VycmVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNob3J0LXRlcm0gc29sdXRpb24gZm9yIGV2ZW50IGxpc3RlbmVyIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvMjcxNylcbiAgICAgICAgdGhpcy50YWJzUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLnJlbW92ZUZvY3VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGV4cGFuZCA9IF90aGlzJHByb3BzMi5leHBhbmQsXG4gICAgICAgICAgaW5pdGlhbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uVGFiQ2xpY2ssXG4gICAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5zZWxlY3RlZFRhYixcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgdGFicyA9IF90aGlzJHByb3BzMi50YWJzLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7IC8vIEFsbG93IHRoZSBjb25zdW1lciB0byBjb250cm9sIHRhYiBzZWxlY3Rpb24uXG5cblxuICAgICAgdmFyIHNlbGVjdGVkVGFiID0gZXh0ZXJuYWxTZWxlY3RlZFRhYiB8fCB0YWJzLmZpbmQoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmlkID09PSBfdGhpczIuc3RhdGUuc2VsZWN0ZWRUYWJJZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIF9yZWYgPSBzZWxlY3RlZFRhYixcbiAgICAgICAgICBzZWxlY3RlZFRhYkNvbnRlbnQgPSBfcmVmLmNvbnRlbnQsXG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZCA9IF9yZWYuaWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzLCB7XG4gICAgICAgIHJlZjogdGhpcy50YWJzUmVmLFxuICAgICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5pbml0aWFsaXplRm9jdXNcbiAgICAgIH0sIHRhYnMubWFwKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgdmFyIGlkID0gdGFiLmlkLFxuICAgICAgICAgICAgbmFtZSA9IHRhYi5uYW1lLFxuICAgICAgICAgICAgY29udGVudCA9IHRhYi5jb250ZW50LFxuICAgICAgICAgICAgdGFiUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGFiLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0sIHRhYlByb3BzKSwge30sIHtcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vblRhYkNsaWNrKHRhYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0YWIgPT09IHNlbGVjdGVkVGFiLFxuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogXCJcIi5jb25jYXQoX3RoaXMyLnJvb3RJZClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFiLCBwcm9wcywgbmFtZSk7XG4gICAgICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdCh0aGlzLnJvb3RJZCksXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNlbGVjdGVkVGFiSWRcbiAgICAgIH0sIHNlbGVjdGVkVGFiQ29udGVudCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJiZWRDb250ZW50O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVGFiYmVkQ29udGVudCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhdXRvRm9jdXM6ICdpbml0aWFsJ1xufSk7XG5cbkV1aVRhYmJlZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIHRhYmJpbmcgaW50byB0aGUgdGFicywgc2V0IHRoZSBmb2N1cyBvbiBgaW5pdGlhbGAgZm9yIHRoZSBmaXJzdCB0YWIsXG4gICAgICAgKiBvciBgc2VsZWN0ZWRgIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gQmVzdCB1c2UgY2FzZSBpcyBmb3IgaW5zaWRlIG9mXG4gICAgICAgKiBvdmVybGF5IGNvbnRlbnQgbGlrZSBwb3BvdmVycyBvciBmbHlvdXRzLlxuICAgICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLm9uZU9mKFtcImluaXRpYWxcIiwgXCJzZWxlY3RlZFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBFdmVubHkgc3RyZXRjaGVzIGVhY2ggdGFiIHRvIGZpbGwgdGhlIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCB0byBzZXQgdGhlIGluaXRpYWxseSBzZWxlY3RlZCB0YWIgd2hpbGUgbGV0dGluZyB0aGUgdGFiYmVkIGNvbnRlbnQgY29tcG9uZW50XG4gICAgICAgKiBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSBpbnRlcm5hbGx5XG4gICAgICAgKi9cbiAgaW5pdGlhbFNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBvblRhYkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgaWYgeW91IHdhbnQgdG8gY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgd2l0aGluIHRoZSBvd25lciBjb21wb25lbnRcbiAgICAgICAqL1xuICBzZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIiwgXCJsXCIsIFwieGxcIl0pLFxuXG4gIC8qKlxuICAgICAgICogRWFjaCB0YWIgbmVlZHMgaWQgYW5kIGNvbnRlbnQgcHJvcGVydGllcywgc28gd2UgY2FuIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyBwYW5lbCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgICAqIFRoZSBuYW1lIHByb3BlcnR5IChhIG5vZGUpIGlzIGFsc28gcmVxdWlyZWQgdG8gZGlzcGxheSB0byB0aGUgdXNlci5cbiAgICAgICAqL1xuICB0YWJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgRXVpRGVsYXlSZW5kZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aURlbGF5UmVuZGVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aURlbGF5UmVuZGVyKTtcblxuICBmdW5jdGlvbiBFdWlEZWxheVJlbmRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlEZWxheVJlbmRlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZWxheUlEXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9CZURlbGF5ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhcnREZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuZGVsYXlJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KF90aGlzLnN0b3BEZWxheWluZywgX3RoaXMucHJvcHMuZGVsYXkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3BEZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSBmYWxzZTtcblxuICAgICAgX3RoaXMuc2hvdWxkVXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlEZWxheVJlbmRlciwgW3tcbiAgICBrZXk6IFwic2hvdWxkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHRvZ2dsZSA9IF9yZWYudG9nZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvZ2dsZTogIXRvZ2dsZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy50b0JlRGVsYXllZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wRGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRvQmVEZWxheWVkID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aURlbGF5UmVuZGVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRGVsYXlSZW5kZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IDUwMFxufSk7XG5cbkV1aURlbGF5UmVuZGVyLnByb3BUeXBlcyA9IHtcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJ0ZXh0U2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSGVhbHRoU3R5bGVzIH0gZnJvbSAnLi9oZWFsdGguc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdpbmhlcml0J107XG5leHBvcnQgdmFyIEV1aUhlYWx0aCA9IGZ1bmN0aW9uIEV1aUhlYWx0aChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkdGV4dFNpemUgPSBfcmVmLnRleHRTaXplLFxuICAgICAgdGV4dFNpemUgPSBfcmVmJHRleHRTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRleHRTaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIZWFsdGgsIHN0eWxlc1t0ZXh0U2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhlYWx0aCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgZ3V0dGVyU2l6ZTogXCJ4c1wiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZG90XCIsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUhlYWx0aC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBkb3QgaWNvbi5cbiAgICAgICAqIEl0IGFjY2VwdHMgYW55IGBJY29uQ29sb3JgOiBgZGVmYXVsdGAsIGBwcmltYXJ5YCwgYHN1Y2Nlc3NgLCBgYWNjZW50YCwgYHdhcm5pbmdgLCBgZGFuZ2VyYCwgYHRleHRgLFxuICAgICAgICogYHN1YmR1ZWRgIG9yIGBnaG9zdGA7IG9yIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0aGUgdGV4dCBzY2FsZXMgb2YgRXVpVGV4dC5cbiAgICAgICAqIFRoZSBgaW5oZXJpdGAgc3R5bGUgd2lsbCBnZXQgaXRzIGZvbnQgc2l6ZSBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICovXG4gIHRleHRTaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiXG59IDoge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUhlYWx0aFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSkge1xuICByZXR1cm4ge1xuICAgIGV1aUhlYWx0aDogX3JlZjIsXG4gICAgLy8gVGV4dCBzaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGluaGVyaXQ6IF9yZWZcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbHRcIiwgXCJ1cmxcIiwgXCJzcmNcIiwgXCJzaXplXCIsIFwiaGFzU2hhZG93XCIsIFwic3R5bGVcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsU2NyZWVuSWNvbkNvbG9yXCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiY2FwdGlvblwiLCBcImZsb2F0XCIsIFwibWFyZ2luXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZVdyYXBwZXIgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXInO1xuaW1wb3J0IHsgZXVpSW1hZ2VTdHlsZXMgfSBmcm9tICcuL2ltYWdlLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyIH0gZnJvbSAnLi9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXInO1xuaW1wb3J0IHsgU0laRVMgfSBmcm9tICcuL2ltYWdlX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlID0gZnVuY3Rpb24gRXVpSW1hZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhbHQgPSBfcmVmLmFsdCxcbiAgICAgIHVybCA9IF9yZWYudXJsLFxuICAgICAgc3JjID0gX3JlZi5zcmMsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnb3JpZ2luYWwnIDogX3JlZiRzaXplLFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBmbG9hdCA9IF9yZWYuZmxvYXQsXG4gICAgICBtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc0Z1bGxTY3JlZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgaXNOYW1lZFNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycgJiYgU0laRVMuaW5jbHVkZXMoc2l6ZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZSwgaXNOYW1lZFNpemUgJiYgc3R5bGVzW3NpemVdLCAhaXNOYW1lZFNpemUgJiYgc3R5bGVzLmN1c3RvbVNpemUsIGhhc1NoYWRvdyAmJiBzdHlsZXMuaGFzU2hhZG93XTtcbiAgdmFyIGNzc0lzRnVsbFNjcmVlblN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIHN0eWxlcy5pc0Z1bGxTY3JlZW5dO1xuICB2YXIgaXNDdXN0b21TaXplID0gIWlzTmFtZWRTaXplICYmIHNpemUgIT09ICdvcmlnaW5hbCc7XG4gIHZhciBjdXN0b21TaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnID8gc2l6ZSA6IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIik7XG4gIHZhciBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemUgPSBpc0N1c3RvbVNpemUgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBtYXhXaWR0aDogY3VzdG9tU2l6ZSxcbiAgICBtYXhIZWlnaHQ6IGN1c3RvbVNpemVcbiAgfSkgOiBzdHlsZTtcbiAgdmFyIGlzRnVsbFdpZHRoID0gc2l6ZSA9PT0gJ2Z1bGxXaWR0aCc7XG4gIHZhciBjb21tb25XcmFwcGVyUHJvcHMgPSB7XG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgd3JhcHBlclByb3BzOiB3cmFwcGVyUHJvcHMsXG4gICAgc2V0SXNGdWxsU2NyZWVuOiBzZXRJc0Z1bGxTY3JlZW4sXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBhbGxvd0Z1bGxTY3JlZW4sXG4gICAgYWx0OiBhbHQsXG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICBmbG9hdDogZmxvYXQsXG4gICAgbWFyZ2luOiBtYXJnaW5cbiAgfTtcblxuICB2YXIgY29tbW9uSW1nUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc3JjOiBzcmMgfHwgdXJsXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUltYWdlV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogaW1hZ2VTdHlsZVdpdGhDdXN0b21TaXplXG4gIH0sIGNvbW1vbkltZ1Byb3BzKSkpLCBhbGxvd0Z1bGxTY3JlZW4gJiYgaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc0lzRnVsbFNjcmVlblN0eWxlcyxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgY29tbW9uSW1nUHJvcHMpKSkpO1xufTtcbkV1aUltYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUmVxdWlyZXMgZWl0aGVyIGBzcmNgIG9yIGB1cmxgIGJ1dCBkZWZhdWx0cyB0byB1c2luZyBgc3JjYCBpZiBib3RoIGFyZSBwcm92aWRlZFxuICAgICAgICovXG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQWx0IHRleHQgc2hvdWxkIGRlc2NyaWJlIHRoZSBpbWFnZSB0byBhaWQgc2NyZWVuIHJlYWRlciB1c2Vycy4gU2VlXG4gICAgICAgKiBodHRwczovL3dlYmFpbS5vcmcvdGVjaG5pcXVlcy9hbHR0ZXh0LyBmb3IgYSBndWlkZSBvbiB3cml0aW5nXG4gICAgICAgKiBlZmZlY3RpdmUgYWx0IHRleHQuXG4gICAgICAgKlxuICAgICAgICogSWYgbm8gbWVhbmluZ2Z1bCBkZXNjcmlwdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBpbWFnZSBpcyBhZGVxdWF0ZWx5XG4gICAgICAgKiBkZXNjcmliZWQgYnkgdGhlIHN1cnJvdW5kaW5nIHRleHQsIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICovXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZXMgYSB2aXNpYmxlIGNhcHRpb24gdG8gdGhlIGltYWdlXG4gICAgICAgKi9cbiAgY2FwdGlvbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGBzYCAvIGBtYCAvIGBsYCAvIGB4bGAgLyBgb3JpZ2luYWxgIC8gYGZ1bGxXaWR0aGAgLyBvciBhIENTUyBzaXplIG9mIGBudW1iZXJgIG9yIGBzdHJpbmdgLlxuICAgICAgICogYGZ1bGxXaWR0aGAgd2lsbCBzZXQgdGhlIGZpZ3VyZSB0byBzdHJldGNoIHRvIDEwMCUgb2YgaXRzIGNvbnRhaW5lci5cbiAgICAgICAqIGBzdHJpbmdgIGFuZCBgbnVtYmVyYCB0eXBlcyB3aWxsIG1heCBib3RoIHRoZSB3aWR0aCBvciBoZWlnaHQsIHdoaWNoZXZlciBpcyBncmVhdGVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEZsb2F0IHRoZSBpbWFnZSB0byB0aGUgbGVmdCBvciByaWdodC4gVXNlZnVsIGluIGxhcmdlIHRleHQgYmxvY2tzLlxuICAgICAgICovXG4gIGZsb2F0OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWFyZ2luIGFyb3VuZCB0aGUgaW1hZ2UuXG4gICAgICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSB3aWxsIGFwcGx5IGEgc2xpZ2h0IHNoYWRvdyB0byB0aGUgaW1hZ2VcbiAgICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIHdpbGwgbWFrZSB0aGUgaW1hZ2UgY2xpY2thYmxlIHRvIGEgbGFyZ2VyIHZlcnNpb25cbiAgICAgICAqL1xuICBhbGxvd0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyB0aGUgY29sb3Igb2YgdGhlIGljb24gdGhhdCBmbG9hdHMgYWJvdmUgdGhlIGltYWdlIHdoZW4gaXQgY2FuIGJlIGNsaWNrZWQgdG8gZnVsbHNjcmVlbi5cbiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBsaWdodGAgaXMgZmluZSB1bmxlc3MgeW91ciBpbWFnZSBoYXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2hhbmdlIGl0IHRvIGBkYXJrYC5cbiAgICAgICAqL1xuICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wibGlnaHRcIiwgXCJkYXJrXCJdKSxcblxuICAvKipcbiAgICAgICAqIFByb3BzIHRvIGFkZCB0byB0aGUgd3JhcHBpbmcgZmlndXJlIGVsZW1lbnRcbiAgICAgICAqL1xuICB3cmFwcGVyUHJvcHM6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBldWlJbWFnZVdyYXBwZXJTdHlsZXMgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlQnV0dG9uIH0gZnJvbSAnLi9pbWFnZV9idXR0b24nO1xuaW1wb3J0IHsgRXVpSW1hZ2VDYXB0aW9uIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlV3JhcHBlcihfcmVmKSB7XG4gIHZhciBhbHQgPSBfcmVmLmFsdCxcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGFsbG93RnVsbFNjcmVlbiA9IF9yZWYuYWxsb3dGdWxsU2NyZWVuLFxuICAgICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgICAgbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aDtcblxuICB2YXIgb3BlbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBvcGVuRnVsbFNjcmVlbigpIHtcbiAgICBzZXRJc0Z1bGxTY3JlZW4odHJ1ZSk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZVdyYXBwZXInLCB3cmFwcGVyUHJvcHMgJiYgd3JhcHBlclByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZVdyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzRmlndXJlU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZVdyYXBwZXIsIGZsb2F0ICYmIHN0eWxlc1tmbG9hdF0sIG1hcmdpbiAmJiBzdHlsZXNbbWFyZ2luXSwgYWxsb3dGdWxsU2NyZWVuICYmIHN0eWxlcy5hbGxvd0Z1bGxTY3JlZW4sIGlzRnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuXG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KCksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uUmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBvcHRpb25hbENhcHRpb25UZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc0ZpZ3VyZVN0eWxlc1xuICB9KSwgYWxsb3dGdWxsU2NyZWVuID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogb3BlbkZ1bGxTY3JlZW4sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSkgOiBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBjYXB0aW9uOiBjYXB0aW9uXG4gIH0pKTtcbn07XG5FdWlJbWFnZVdyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsU2lkZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZ2Fjbm1jLWFsbG93RnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwiJjpob3ZlciBbY2xhc3MqPSdldWlJbWFnZUNhcHRpb24nXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6YWxsb3dGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUltYWdlV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlV3JhcHBlclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZVdyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjtsaW5lLWhlaWdodDowO2ZsZXgtc2hyaW5rOjA7O2xhYmVsOmV1aUltYWdlV3JhcHBlcjtcIiksXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBfcmVmLFxuICAgIC8vIE1hcmdpbnNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICAvLyBGbG9hdHNcbiAgICAvLyAxOiBMb2dpY2FsIHByb3BlcnRpZXMvdmFsdWVzIGluIGBmbG9hdGAgaXMgY3VycmVudGx5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB3L28gZmxhZ3NcbiAgICAvLyBAc2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWNzc19wcm9wZXJ0aWVzX2Zsb2F0X2Zsb3dfcmVsYXRpdmVfdmFsdWVzIGZvciB3aGVuIHdlIGNhbiByZW1vdmUgbGVmdC9yaWdodCBmYWxsYmFja3NcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBcIiwgZXVpVGhlbWUuYnJlYWtwb2ludC5tLCBcInB4KXtmbG9hdDpsZWZ0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5sZWZ0LCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IFwiLCBldWlUaGVtZS5icmVha3BvaW50Lm0sIFwicHgpe2Zsb2F0OnJpZ2h0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5yaWdodCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsICcwJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgJzAnKSwgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImhhc0FsdFwiLCBcImhhc1NoYWRvd1wiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcIm9uS2V5RG93blwiLCBcImlzRnVsbFNjcmVlblwiLCBcImlzRnVsbFdpZHRoXCIsIFwiZnVsbFNjcmVlbkljb25Db2xvclwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uU3R5bGVzLCBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwID0ge1xuICBsaWdodDogJ2dob3N0JyxcbiAgZGFyazogJ2RlZmF1bHQnXG59O1xuZXhwb3J0IHZhciBFdWlJbWFnZUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUltYWdlQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGhhc0FsdCA9IF9yZWYuaGFzQWx0LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duID0gX3JlZi5vbktleURvd24sXG4gICAgICBpc0Z1bGxTY3JlZW4gPSBfcmVmLmlzRnVsbFNjcmVlbixcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICAgIF9yZWYkZnVsbFNjcmVlbkljb25DbyA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPT09IHZvaWQgMCA/ICdsaWdodCcgOiBfcmVmJGZ1bGxTY3JlZW5JY29uQ28sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGJ1dHRvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0J1dHRvblN0eWxlcyA9IFtidXR0b25TdHlsZXMuZXVpSW1hZ2VCdXR0b24sIGhhc1NoYWRvdyA/IGJ1dHRvblN0eWxlcy5oYXNTaGFkb3dIb3ZlciA6IGJ1dHRvblN0eWxlcy5zaGFkb3dIb3ZlciwgIWlzRnVsbFNjcmVlbiAmJiBpc0Z1bGxXaWR0aCAmJiBidXR0b25TdHlsZXMuZnVsbFdpZHRoXTtcbiAgdmFyIGljb25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzSWNvblN0eWxlcyA9IFtpY29uU3R5bGVzLmV1aUltYWdlQnV0dG9uX19pY29uLCBpY29uU3R5bGVzLm9wZW5GdWxsU2NyZWVuXTtcbiAgdmFyIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24ub3BlbkZ1bGxTY3JlZW4nLCAnQ2xpY2sgdG8gb3BlbiB0aGlzIGltYWdlIGluIGZ1bGxzY3JlZW4gbW9kZScpO1xuICB2YXIgY2xvc2VGdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24uY2xvc2VGdWxsU2NyZWVuJywgJ1ByZXNzIEVzY2FwZSBvciBjbGljayB0byBjbG9zZSBpbWFnZSBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGljb25Db2xvciA9IGZ1bGxTY3JlZW5JY29uQ29sb3JNYXBbZnVsbFNjcmVlbkljb25Db2xvcl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogY3NzQnV0dG9uU3R5bGVzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbktleURvd25cbiAgfSwgcmVzdCksIGlzRnVsbFNjcmVlbiAmJiAvLyBJbiBmdWxsc2NyZWVuIG1vZGUsIGluc3RydWN0aW9ucyBzaG91bGQgY29tZSBmaXJzdCB0byBhbGxvdyBzY3JlZW4gcmVhZGVyXG4gIC8vIHVzZXJzIHRvIHF1aWNrbHkgZXhpdCB2cy4gcG90ZW50aWFsbHkgcmVhZGluZyBvdXQgbG9uZy91bnNraXBwYWJsZSBhbHQgdGV4dFxuICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucywgaGFzQWx0ICYmICcgXHUyMDE0ICcpKSwgY2hpbGRyZW4sICFpc0Z1bGxTY3JlZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgaGFzQWx0ICYmICcgXHUyMDE0ICcsIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zKSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZnVsbFNjcmVlblwiLFxuICAgIGNvbG9yOiBpY29uQ29sb3JcbiAgfSkpKSk7XG59O1xuRXVpSW1hZ2VCdXR0b24ucHJvcFR5cGVzID0ge1xuICBoYXNBbHQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5leHBvcnQgdmFyIGV1aUltYWdlQnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOm1hdGNoLXBhcmVudDtsaW5lLWhlaWdodDowOyY6OmJlZm9yZXtvcGFjaXR5OjA7Y29udGVudDonJztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO319Jjpob3ZlciwmOmZvY3VzeyY6OmJlZm9yZXtvcGFjaXR5OjE7fVtjbGFzcyo9J2V1aUltYWdlQnV0dG9uX19pY29uJ117b3BhY2l0eToxO319Jjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiO307bGFiZWw6ZXVpSW1hZ2VCdXR0b247XCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIHNoYWRvd0hvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9O2xhYmVsOnNoYWRvd0hvdmVyO1wiKSxcbiAgICBoYXNTaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fTtsYWJlbDpoYXNTaGFkb3dIb3ZlcjtcIilcbiAgfTtcbn07XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUJ1dHRvbl9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtcIiwgbG9naWNhbENTUygncmlnaHQnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjs7bGFiZWw6ZXVpSW1hZ2VCdXR0b25fX2ljb247XCIpLFxuICAgIG9wZW5GdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTowO2N1cnNvcjpwb2ludGVyO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6b3BlbkZ1bGxTY3JlZW47XCIpLFxuICAgIGNsb3NlRnVsbFNjcmVlbjogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlJbWFnZUNhcHRpb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2NhcHRpb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlQ2FwdGlvbiA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBfcmVmJGlzT25PdmVybGF5TWFzayA9IF9yZWYuaXNPbk92ZXJsYXlNYXNrLFxuICAgICAgaXNPbk92ZXJsYXlNYXNrID0gX3JlZiRpc09uT3ZlcmxheU1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc09uT3ZlcmxheU1hc2s7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUNhcHRpb24sIGlzT25PdmVybGF5TWFzayAmJiBzdHlsZXMuaXNPbk92ZXJsYXlNYXNrXTtcbiAgcmV0dXJuIGNhcHRpb24gPyBfX19FbW90aW9uSlNYKFwiZmlnY2FwdGlvblwiLCB7XG4gICAgcmVmOiByZWYsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgY2FwdGlvbikgOiBudWxsO1xufSk7XG5FdWlJbWFnZUNhcHRpb24ucHJvcFR5cGVzID0ge1xuICBpc09uT3ZlcmxheU1hc2s6IFByb3BUeXBlcy5ib29sXG59O1xuRXVpSW1hZ2VDYXB0aW9uLmRpc3BsYXlOYW1lID0gJ0V1aUltYWdlQ2FwdGlvbic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUNhcHRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VDYXB0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUltYWdlQ2FwdGlvbjtcIiksXG4gICAgaXNPbk92ZXJsYXlNYXNrOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IFwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuaW5rLCAwLjYpLCBcIjtbY2xhc3MqPSdldWlMaW5rJ117Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7fTtsYWJlbDppc09uT3ZlcmxheU1hc2s7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlJbWFnZTogLyojX19QVVJFX18qL2NzcyhcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7JixbY2xhc3MqPSdldWlUZXh0J10gJntcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIDApLCBcIjt9O2xhYmVsOmV1aUltYWdlO1wiKSxcbiAgICAvLyBWYXJpYXRpb25zXG4gICAgaXNGdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCAnODB2aCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzgwdncnKSwgXCI7O2xhYmVsOmlzRnVsbFNjcmVlbjtcIiksXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgLy8gVGhlc2Ugc2l6ZXMgYXJlIG1vc3RseSBzdWdnZXN0aW9ucy4gRG9uJ3QgbG9vayB0b28gaGFyZCBmb3IgbWVhbmluZyBpbiB0aGVpciB2YWx1ZXMuXG4gICAgLy8gU2l6ZSBpcyBhcHBsaWVkIHRvIHRoZSBpbWFnZSwgcmF0aGVyIHRoYW4gdGhlIHdyYXBwZXIgZmlndXJlIHRvIHdvcmsgYmV0dGVyIHdpdGggZmxvYXRzXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDBweCcpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyMDBweCcpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICczNjBweCcpLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnNjAwcHgnKSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICBvcmlnaW5hbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpvcmlnaW5hbDtcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgY3VzdG9tU2l6ZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpjdXN0b21TaXplO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBFdWlPdmVybGF5TWFzayB9IGZyb20gJy4uL292ZXJsYXlfbWFzayc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcjtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBvbktleURvd24gPSBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY2xvc2VGdWxsU2NyZWVuKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBjbG9zZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBjbG9zZUZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKGZhbHNlKTtcbiAgfTtcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dCgpLFxuICAgICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuXG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5jbG9zZUZ1bGxTY3JlZW5dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdmVybGF5TWFzaywge1xuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsU2NyZWVuT3ZlcmxheU1hc2tcIixcbiAgICBvbkNsaWNrOiBjbG9zZUZ1bGxTY3JlZW5cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIHtcbiAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZVxuICB9LCBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZmlndXJlXCIsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtbGFiZWxcIjogb3B0aW9uYWxDYXB0aW9uVGV4dFxuICB9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VCdXR0b24sIHtcbiAgICBoYXNBbHQ6ICEhYWx0LFxuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIG9uQ2xpY2s6IGNsb3NlRnVsbFNjcmVlbixcbiAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZGVhY3RpdmF0ZUZ1bGxTY3JlZW5CdXR0b25cIixcbiAgICBpc0Z1bGxTY3JlZW46IHRydWUsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3JcbiAgfSwgY2hpbGRyZW4pLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQ2FwdGlvbiwge1xuICAgIGNhcHRpb246IGNhcHRpb24sXG4gICAgcmVmOiBvcHRpb25hbENhcHRpb25SZWYsXG4gICAgaXNPbk92ZXJsYXlNYXNrOiB0cnVlXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJmdWxsU2NyZWVuRXhpdFwiLFxuICAgIGNvbG9yOiBcImdob3N0XCIsXG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgJzgwdmgnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICc4MHZ3JyksIFwiO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7bGluZS1oZWlnaHQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlJbWFnZUZ1bGxTY3JlZW4oZXVpVGhlbWUuc2l6ZS54eHh4bCksIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZXh0cmFTbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCI7fSY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07XG5cbnZhciBldWlJbWFnZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBldWlJbWFnZUZ1bGxTY3JlZW4oc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKFwiLCBcIik7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgfVxcblwiXSkpLCBzaXplKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICdmdWxsV2lkdGgnLCAnb3JpZ2luYWwnXTtcbnZhciBGTE9BVFMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbnZhciBNQVJHSU5TID0gWydzJywgJ20nLCAnbCcsICd4bCddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUdsb2JhbFN0eWxlcyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHknO1xuaW1wb3J0IHsgRXVpVGhlbWVQcm92aWRlciwgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzJztcbmltcG9ydCB7IEV1aUNhY2hlUHJvdmlkZXIgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBpc0Vtb3Rpb25DYWNoZU9iamVjdCA9IGZ1bmN0aW9uIGlzRW1vdGlvbkNhY2hlT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KCdrZXknKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHRoZW1lID0gX3JlZiR0aGVtZSA9PT0gdm9pZCAwID8gRXVpVGhlbWVBbXN0ZXJkYW0gOiBfcmVmJHRoZW1lLFxuICAgICAgX3JlZiRnbG9iYWxTdHlsZXMgPSBfcmVmLmdsb2JhbFN0eWxlcyxcbiAgICAgIEdsb2JhbHMgPSBfcmVmJGdsb2JhbFN0eWxlcyA9PT0gdm9pZCAwID8gRXVpR2xvYmFsU3R5bGVzIDogX3JlZiRnbG9iYWxTdHlsZXMsXG4gICAgICBfcmVmJHV0aWxpdHlDbGFzc2VzID0gX3JlZi51dGlsaXR5Q2xhc3NlcyxcbiAgICAgIFV0aWxpdGllcyA9IF9yZWYkdXRpbGl0eUNsYXNzZXMgPT09IHZvaWQgMCA/IEV1aVV0aWxpdHlDbGFzc2VzIDogX3JlZiR1dGlsaXR5Q2xhc3NlcyxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgICAgbW9kaWZ5ID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBkZWZhdWx0Q2FjaGU7XG4gIHZhciBnbG9iYWxDYWNoZTtcbiAgdmFyIHV0aWxpdHlDYWNoZTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoaXNFbW90aW9uQ2FjaGVPYmplY3QoY2FjaGUpKSB7XG4gICAgICBkZWZhdWx0Q2FjaGUgPSBjYWNoZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGUuZGVmYXVsdDtcbiAgICAgIGdsb2JhbENhY2hlID0gY2FjaGUuZ2xvYmFsO1xuICAgICAgdXRpbGl0eUNhY2hlID0gY2FjaGUudXRpbGl0eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IGRlZmF1bHRDYWNoZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogdGhlbWUgIT09IG51bGwgJiYgdGhlbWUgIT09IHZvaWQgMCA/IHRoZW1lIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgIG1vZGlmeTogbW9kaWZ5XG4gIH0sIHRoZW1lICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiBnbG9iYWxDYWNoZSxcbiAgICBjaGlsZHJlbjogR2xvYmFscyAmJiBfX19FbW90aW9uSlNYKEdsb2JhbHMsIG51bGwpXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogdXRpbGl0eUNhY2hlLFxuICAgIGNoaWxkcmVuOiBVdGlsaXRpZXMgJiYgX19fRW1vdGlvbkpTWChVdGlsaXRpZXMsIG51bGwpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyLCBudWxsLCBjaGlsZHJlbikpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZ2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL2NzcyhcIi5ldWlTY3JlZW5SZWFkZXJPbmx5e1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6Z2xvYmFsU3R5bGVzO1wiKTtcbmV4cG9ydCB2YXIgRXVpVXRpbGl0eUNsYXNzZXMgPSBmdW5jdGlvbiBFdWlVdGlsaXR5Q2xhc3NlcygpIHtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYWNoZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpQ2FjaGVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiAmJiBjYWNoZSA/IF9fX0Vtb3Rpb25KU1goQ2FjaGVQcm92aWRlciwge1xuICAgIHZhbHVlOiBjYWNoZVxuICB9LCBjaGlsZHJlbikgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIml0ZW1zXCIsIFwiZGlzcGxheVwiLCBcImV4cGFuZEJ5RGVmYXVsdFwiLCBcInNob3dFeHBhbnNpb25BcnJvd3NcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpVHJlZVZpZXdDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoJycpO1xuXG5mdW5jdGlvbiBoYXNBcmlhTGFiZWwoeCkge1xuICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgnYXJpYS1sYWJlbCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmVlSWQocHJvcElkLCBjb250ZXh0SWQsIGlkR2VuZXJhdG9yKSB7XG4gIHJldHVybiBwcm9wSWQgIT09IG51bGwgJiYgcHJvcElkICE9PSB2b2lkIDAgPyBwcm9wSWQgOiBjb250ZXh0SWQgPT09ICcnID8gaWRHZW5lcmF0b3IoKSA6IGNvbnRleHRJZDtcbn1cblxudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZGVmYXVsdDogbnVsbCxcbiAgY29tcHJlc3NlZDogJ2V1aVRyZWVWaWV3LS1jb21wcmVzc2VkJ1xufTtcbmV4cG9ydCB2YXIgRXVpVHJlZVZpZXcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRyZWVWaWV3LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRyZWVWaWV3KTtcblxuICBmdW5jdGlvbiBFdWlUcmVlVmlldygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVHJlZVZpZXcpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0cmVlSWRHZW5lcmF0b3JcIiwgaHRtbElkR2VuZXJhdG9yKCdldWlUcmVlVmlldycpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc05lc3RlZFwiLCAhIV90aGlzLmNvbnRleHQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIG9wZW5JdGVtczogX3RoaXMucHJvcHMuZXhwYW5kQnlEZWZhdWx0ID8gX3RoaXMucHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiA/IGlkIDogbnVsbDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPSBudWxsO1xuICAgICAgfSkgOiBfdGhpcy5wcm9wcy5pdGVtcy5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBpZCA9IF9yZWYyLmlkLFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgICAgICAgIGlzRXhwYW5kZWQgPSBfcmVmMi5pc0V4cGFuZGVkO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgaXNFeHBhbmRlZCA/IGlkIDogbnVsbDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPSBudWxsO1xuICAgICAgfSksXG4gICAgICBhY3RpdmVJdGVtOiAnJyxcbiAgICAgIHRyZWVJRDogZ2V0VHJlZUlkKF90aGlzLnByb3BzLmlkLCBfdGhpcy5jb250ZXh0LCBfdGhpcy50cmVlSWRHZW5lcmF0b3IpLFxuICAgICAgZXhwYW5kQ2hpbGROb2RlczogX3RoaXMucHJvcHMuZXhwYW5kQnlEZWZhdWx0IHx8IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRCdXR0b25SZWZcIiwgZnVuY3Rpb24gKHJlZiwgaW5kZXgpIHtcbiAgICAgIF90aGlzLmJ1dHRvblJlZltpbmRleF0gPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTm9kZUNsaWNrXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgaWdub3JlQ2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICB2YXIgaW5kZXggPSBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuaW5kZXhPZihub2RlLmlkKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBleHBhbmRDaGlsZE5vZGVzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIG5vZGUuaXNFeHBhbmRlZCA9ICFub2RlLmlzRXhwYW5kZWQ7XG5cbiAgICAgIGlmICghaWdub3JlQ2FsbGJhY2sgJiYgbm9kZS5jYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG5vZGUgaXMgcGFydCBvZiBvcGVuSXRlbXNbXSB0aGVuIHJlbW92ZSBpdFxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgb3Blbkl0ZW1zOiBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gaSAhPT0gaW5kZXg7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgbm9kZSBpc24ndCBwYXJ0IG9mIG9wZW5JdGVtc1tdIHRoZW4gYWRkIGl0XG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3Blbkl0ZW1zOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZXZTdGF0ZS5vcGVuSXRlbXMpLCBbbm9kZS5pZF0pLFxuICAgICAgICAgICAgYWN0aXZlSXRlbTogbm9kZS5pZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlzTm9kZU9wZW5cIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuaW5jbHVkZXMobm9kZS5pZCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCwgbm9kZSkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5vZGVCdXR0b25zID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGVzdC1zdWJqPVxcXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMuc3RhdGUudHJlZUlELCBcIlxcXCJdXCIpKSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudEluZGV4ID0gbm9kZUJ1dHRvbnMuaW5kZXhPZihldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgIHZhciBuZXh0QnV0dG9uID0gbm9kZUJ1dHRvbnNbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgaWYgKG5leHRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIG5leHRCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbm9kZUJ1dHRvbnMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10ZXN0LXN1Ymo9XFxcImV1aVRyZWVWaWV3QnV0dG9uLVwiLmNvbmNhdChfdGhpcy5zdGF0ZS50cmVlSUQsIFwiXFxcIl1cIikpKTtcblxuICAgICAgICAgICAgdmFyIF9jdXJyZW50SW5kZXggPSBfbm9kZUJ1dHRvbnMuaW5kZXhPZihldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKF9jdXJyZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB2YXIgcHJldkJ1dHRvbiA9IF9ub2RlQnV0dG9uc1tfY3VycmVudEluZGV4ICsgLTFdO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBwcmV2QnV0dG9uLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19SSUdIVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlTm9kZUNsaWNrKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0xFRlQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlTm9kZUNsaWNrKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRyZW5LZXlkb3duXCIsIGZ1bmN0aW9uIChldmVudCwgaW5kZXgpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuQVJST1dfTEVGVCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpcy5idXR0b25SZWZbaW5kZXhdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVHJlZVZpZXcsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5pZCAhPT0gcHJldlByb3BzLmlkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0cmVlSUQ6IGdldFRyZWVJZCh0aGlzLnByb3BzLmlkLCB0aGlzLmNvbnRleHQsIHRoaXMudHJlZUlkR2VuZXJhdG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF90aGlzJHByb3BzJGRpc3BsYXksXG4gICAgICAgICAgZXhwYW5kQnlEZWZhdWx0ID0gX3RoaXMkcHJvcHMuZXhwYW5kQnlEZWZhdWx0LFxuICAgICAgICAgIHNob3dFeHBhbnNpb25BcnJvd3MgPSBfdGhpcyRwcm9wcy5zaG93RXhwYW5zaW9uQXJyb3dzLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7IC8vIENvbXB1dGVkIGNsYXNzTmFtZXNcblxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3JywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIHtcbiAgICAgICAgJ2V1aVRyZWVWaWV3LS13aXRoQXJyb3dzJzogc2hvd0V4cGFuc2lvbkFycm93c1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBpbnN0cnVjdGlvbnNJZCA9IFwiXCIuY29uY2F0KHRoaXMuc3RhdGUudHJlZUlELCBcIi0taW5zdHJ1Y3Rpb25cIik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUcmVlVmlld0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudHJlZUlEXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogZGlzcGxheSA9PT0gJ2NvbXByZXNzZWQnID8gJ3MnIDogJ20nLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX3dyYXBwZXJcIlxuICAgICAgfSwgIXRoaXMuaXNOZXN0ZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRyZWVWaWV3Lmxpc3ROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiWW91IGNhbiBxdWlja2x5IG5hdmlnYXRlIHRoaXMgbGlzdCB1c2luZyBhcnJvdyBrZXlzLlwiXG4gICAgICB9LCBmdW5jdGlvbiAobGlzdE5hdmlnYXRpb25JbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBpbnN0cnVjdGlvbnNJZFxuICAgICAgICB9LCBsaXN0TmF2aWdhdGlvbkluc3RydWN0aW9ucykpO1xuICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6ICF0aGlzLmlzTmVzdGVkID8gdGhpcy5zdGF0ZS50cmVlSUQgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiAhdGhpcy5pc05lc3RlZCA/IGluc3RydWN0aW9uc0lkIDogdW5kZWZpbmVkXG4gICAgICB9LCByZXN0KSwgaXRlbXMubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgYnV0dG9uSWQgPSBub2RlLmlkO1xuXG4gICAgICAgIHZhciB3cmFwcGluZ0lkID0gX3RoaXMyLnRyZWVJZEdlbmVyYXRvcihidXR0b25JZCk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCB7XG4gICAgICAgICAga2V5OiBub2RlLmlkICsgaW5kZXgsXG4gICAgICAgICAgZmFsbGJhY2s6IHR5cGVvZiBub2RlLmxhYmVsID09PSAnc3RyaW5nJyA/IG5vZGUubGFiZWwgOiAnJ1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IG5vZGUuaWQgKyBpbmRleCxcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVRyZWVWaWV3LmFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7bm9kZUxhYmVsfSBjaGlsZCBvZiB7YXJpYUxhYmVsfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIG5vZGVMYWJlbDogaW5uZXJUZXh0LFxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IGhhc0FyaWFMYWJlbChyZXN0KSA/IHJlc3RbJ2FyaWEtbGFiZWwnXSA6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGFyaWFMYWJlbCkge1xuICAgICAgICAgICAgdmFyIGxhYmVsID0gaGFzQXJpYUxhYmVsKHJlc3QpID8ge1xuICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IFwiXCIuY29uY2F0KGJ1dHRvbklkLCBcIiBcIikuY29uY2F0KHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBub2RlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3X19ub2RlJywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIHtcbiAgICAgICAgICAgICAgJ2V1aVRyZWVWaWV3X19ub2RlLS1leHBhbmRlZCc6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBub2RlQnV0dG9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3X19ub2RlSW5uZXInLCBzaG93RXhwYW5zaW9uQXJyb3dzICYmIG5vZGUuY2hpbGRyZW4gPyAnZXVpVHJlZVZpZXdfX25vZGVJbm5lci0td2l0aEFycm93cycgOiBudWxsLCBfdGhpczIuc3RhdGUuYWN0aXZlSXRlbSA9PT0gbm9kZS5pZCA/ICdldWlUcmVlVmlld19fbm9kZS0tYWN0aXZlJyA6IG51bGwsIG5vZGUuY2xhc3NOYW1lID8gbm9kZS5jbGFzc05hbWUgOiBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IG5vZGVDbGFzc2VzXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogd3JhcHBpbmdJZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpLFxuICAgICAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihfcmVmMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0QnV0dG9uUmVmKF9yZWYzLCBpbmRleCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMyLnN0YXRlLnRyZWVJRCksXG4gICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbktleURvd24oZXZlbnQsIG5vZGUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlTm9kZUNsaWNrKG5vZGUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IG5vZGVCdXR0b25DbGFzc2VzXG4gICAgICAgICAgICB9LCBzaG93RXhwYW5zaW9uQXJyb3dzICYmIG5vZGUuY2hpbGRyZW4gPyBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19leHBhbnNpb25BcnJvd1wiLFxuICAgICAgICAgICAgICBzaXplOiBkaXNwbGF5ID09PSAnY29tcHJlc3NlZCcgPyAncycgOiAnbScsXG4gICAgICAgICAgICAgIHR5cGU6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpID8gJ2Fycm93RG93bicgOiAnYXJyb3dSaWdodCdcbiAgICAgICAgICAgIH0pIDogbnVsbCwgbm9kZS5pY29uICYmICFub2RlLnVzZUVtcHR5SWNvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19pY29uV3JhcHBlclwiXG4gICAgICAgICAgICB9LCBfdGhpczIuaXNOb2RlT3Blbihub2RlKSAmJiBub2RlLmljb25XaGVuRXhwYW5kZWQgPyBub2RlLmljb25XaGVuRXhwYW5kZWQgOiBub2RlLmljb24pIDogbnVsbCwgbm9kZS51c2VFbXB0eUljb24gJiYgIW5vZGUuaWNvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19pY29uUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgfSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX25vZGVMYWJlbFwiXG4gICAgICAgICAgICB9LCBub2RlLmxhYmVsKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICBpZDogd3JhcHBpbmdJZCxcbiAgICAgICAgICAgICAgb25LZXlEb3duOiBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2hpbGRyZW5LZXlkb3duKGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG5vZGUuY2hpbGRyZW4gJiYgX3RoaXMyLmlzTm9kZU9wZW4obm9kZSkgPyBfX19FbW90aW9uSlNYKEV1aVRyZWVWaWV3LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICAgIGl0ZW1zOiBub2RlLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgICAgICAgICAgICBzaG93RXhwYW5zaW9uQXJyb3dzOiBzaG93RXhwYW5zaW9uQXJyb3dzLFxuICAgICAgICAgICAgICBleHBhbmRCeURlZmF1bHQ6IF90aGlzMi5zdGF0ZS5leHBhbmRDaGlsZE5vZGVzXG4gICAgICAgICAgICB9LCBsYWJlbCkpIDogbnVsbCkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVHJlZVZpZXc7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUcmVlVmlldywgXCJjb250ZXh0VHlwZVwiLCBFdWlUcmVlVmlld0NvbnRleHQpO1xuXG5FdWlUcmVlVmlldy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKiBBbiBhcnJheSBvZiBFdWlUcmVlVmlld05vZGVzXG4gICAgICAgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIEFuIGFycmF5IG9mIEV1aVRyZWVWaWV3Tm9kZXMgdG8gcmVuZGVyIGFzIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcblxuICAgIC8qKiBUaGUgcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKiBBIHVuaXF1ZSBJRFxuICAgICAgICovXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAgIC8qKiBBbiBpY29uIHRvIHVzZSBvbiB0aGUgbGVmdCBvZiB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIGljb246IFByb3BUeXBlcy5lbGVtZW50LFxuXG4gICAgLyoqIERpc3BsYXkgYSBkaWZmZXJlbnQgaWNvbiB3aGVuIHRoZSBpdGVtIGlzIGV4cGFuZGVkLlxuICAgICAgRm9yIGluc3RhbmNlLCBhbiBvcGVuIGZvbGRlciBvciBhIGRvd24gYXJyb3dcbiAgICAgICovXG4gICAgaWNvbldoZW5FeHBhbmRlZDogUHJvcFR5cGVzLmVsZW1lbnQsXG5cbiAgICAvKiogVXNlIGFuIGVtcHR5IGljb24gdG8ga2VlcCBpdGVtcyB3aXRob3V0IGFuIGljb25cbiAgICAgIGxpbmVkIHVwIHdpdGggdGhlaXIgc2libGluZ3NcbiAgICAgICovXG4gICAgdXNlRW1wdHlJY29uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgICAqL1xuICAgIGlzRXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqIE9wdGlvbmFsIGNsYXNzIHRvIHRocm93IG9uIHRoZSBub2RlXG4gICAgICAgKi9cbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBpdGVtIGlzIGNsaWNrZWQuXG4gICAgICAgVGhlIG9wZW4gc3RhdGUgb2YgdGhlIGl0ZW0gd2lsbCBhbHdheXMgYmUgdG9nZ2xlZC5cbiAgICAgICAqL1xuICAgIGNhbGxiYWNrOiBQcm9wVHlwZXMuZnVuY1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gIC8qKiBPcHRpb25hbGx5IHVzZSBhIHZhcmlhdGlvbiB3aXRoIHNtYWxsZXIgdGV4dCBhbmQgaWNvbiBzaXplc1xuICAgICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJkZWZhdWx0XCIsIFwiY29tcHJlc3NlZFwiXSksXG5cbiAgLyoqIFNldCBhbGwgaXRlbXMgdG8gb3BlbiBvbiBpbml0aWFsIGxvYWRcbiAgICAgICAqL1xuICBleHBhbmRCeURlZmF1bHQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKiBEaXNwbGF5IGV4cGFuc2lvbiBhcnJvd3MgbmV4dCB0byBhbGwgaXRlbXNcbiAgICAgICAqIHRoYXQgY29udGFpbiBjaGlsZHJlblxuICAgICAgICovXG4gIHNob3dFeHBhbnNpb25BcnJvd3M6IFByb3BUeXBlcy5ib29sLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwib25DaGFuZ2VcIiwgXCJvbkFjdGl2ZU9wdGlvbkNoYW5nZVwiLCBcInNlYXJjaGFibGVcIiwgXCJzZWFyY2hQcm9wc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcImlzTG9hZGluZ1wiLCBcImxpc3RQcm9wc1wiLCBcInJlbmRlck9wdGlvblwiLCBcImhlaWdodFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwibG9hZGluZ01lc3NhZ2VcIiwgXCJub01hdGNoZXNNZXNzYWdlXCIsIFwiZW1wdHlNZXNzYWdlXCIsIFwiZXJyb3JNZXNzYWdlXCIsIFwiaXNQcmVGaWx0ZXJlZFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJvbkNoYW5nZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImlucHV0UmVmXCJdLFxuICAgIF9leGNsdWRlZDMgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJyb3dIZWlnaHRcIl07XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZVNlYXJjaCB9IGZyb20gJy4vc2VsZWN0YWJsZV9zZWFyY2gnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgfSBmcm9tICcuL3NlbGVjdGFibGVfbWVzc2FnZSc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdCB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGtleXMsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlckxpdmUsIEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZSk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZShwcm9wcykge1xuICAgIHZhciBfc2VhcmNoUHJvcHMkb25DaGFuZ2U7XG5cbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250YWluZXJSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvcHRpb25zTGlzdFJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByZXZlbnRPbkZvY3VzXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtZXNzYWdlQ29udGVudElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnlwYXNzIG9uRm9jdXMgd2hlbiBhIGNsaWNrIGV2ZW50IG9yaWdpbmF0ZXMgZnJvbSB0aGlzLmNvbnRhaW5lclJlZi5cbiAgICAgIC8vIFByZXZlbnRzIG9uRm9jdXMgZnJvbSBzY3JvbGxpbmcgYXdheSBmcm9tIGEgY2xpY2tlZCBvcHRpb24gYW5kIG5lZ2F0aW5nIHRoZSBzZWxlY3Rpb24gZXZlbnQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzQxNDdcbiAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcmV2ZW50T25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoIHx8IF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RTZWxlY3RlZCA9IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZCAmJiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXJzdFNlbGVjdGVkID4gLTEpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBmaXJzdFNlbGVjdGVkLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgb3B0aW9uc0xpc3QgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50O1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KC0xKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3Igbm9uLXNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpbnRlcmFjdGlvbiBzaG91bGQgYWxpZ24gd2l0aFxuICAgICAgICAvLyB0aGUgdXNlciBleHBlY3RhdGlvbiBvZiBzZWxlY3Rpb24gdG9nZ2xpbmcgKGUuZy4sIGlucHV0W3R5cGU9Y2hlY2tib3hdKS5cbiAgICAgICAgLy8gRU5URVIgaXMgYWxzbyBhIHZhbGlkIHNlbGVjdGlvbiBtZWNoYW5pc20gaW4gdGhpcyBjYXNlLlxuXG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgY2FzZSBrZXlzLlNQQUNFOlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkb3B0aW9uc0xpc3RSZWYkLCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyO1xuXG4gICAgICAgICAgICAvLyBGb3Igc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGlzIHJlc2VydmVkIGFzIGEgY2hhcmFjdGVyIGZvciBmaWx0ZXJpbmdcbiAgICAgICAgICAgIC8vIHZpYSB0aGUgaW5wdXQgYm94LCBhbmQgYXMgc3VjaCBvbmx5IEVOVEVSIHdpbGwgdG9nZ2xlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLmlucHV0UmVmICYmIGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IC8vIENoZWNrIGlmIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGggc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlXG4gICAgICAgICAgICAvLyBzZWFyY2hib3ggb3Igc2VsZWN0aW9uIGxpc3QuIElmIG5vdCwgdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0b1xuICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCBhbiBpbnRlcm5hbCBidXR0b24gc3VjaCBhcyB0aGUgY2xlYXIgYnV0dG9uLFxuICAgICAgICAgICAgLy8gYW5kIHRoZSBldmVudCBzaG91bGQgbm90IGJlIGFsdGVyZWQuXG5cblxuICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZiB8fCBldmVudC50YXJnZXQgPT09ICgoX3RoaXMkb3B0aW9uc0xpc3RSZWYkID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJC5saXN0Qm94UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zTGlzdFJlZiQyLnBhcmVudEVsZW1lbnQpKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIG9wdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgICAgICAgb3B0aW9uc0xpc3Qub25BZGRPclJlbW92ZU9wdGlvbihfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQUxUOlxuICAgICAgICBjYXNlIGtleXMuU0hJRlQ6XG4gICAgICAgIGNhc2Uga2V5cy5DVFJMOlxuICAgICAgICBjYXNlIGtleXMuTUVUQTpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgICAgICB9LCBfdGhpcy5vbkZvY3VzKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3JlZi52aXNpYmxlT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBHcm91cCB0aXRsZXMgYW5kIGRpc2FibGVkIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlICh2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmlzR3JvdXBMYWJlbCB8fCB2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSwgdmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIF90aGlzJHByb3BzJHNlYXJjaFBybzI7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIF90aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRwcm9wcyRzZWFyY2hQcm8gPSBfdGhpcy5wcm9wcy5zZWFyY2hQcm9wcykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9IF90aGlzJHByb3BzJHNlYXJjaFByby5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkc2VhcmNoUHJvMi5jYWxsKF90aGlzJHByb3BzJHNlYXJjaFBybywgc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfZSRyZWxhdGVkVGFyZ2V0LCBfZSRyZWxhdGVkVGFyZ2V0JGZpcnM7XG5cbiAgICAgIC8vIElnbm9yZSBibHVyIGV2ZW50cyB3aGVuIG1vdmluZyBmcm9tIHNlYXJjaCB0byBvcHRpb24gdG8gYXZvaWQgYWN0aXZlT3B0aW9uSW5kZXggY29uZmxpY3RzXG4gICAgICBpZiAoKChfZSRyZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0KSA9PT0gbnVsbCB8fCBfZSRyZWxhdGVkVGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2UkcmVsYXRlZFRhcmdldCRmaXJzID0gX2UkcmVsYXRlZFRhcmdldC5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfZSRyZWxhdGVkVGFyZ2V0JGZpcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lJHJlbGF0ZWRUYXJnZXQkZmlycy5pZCkgPT09IF90aGlzLmxpc3RJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25DbGlja1wiLCBmdW5jdGlvbiAob3B0aW9ucywgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2U7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciB2aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKG9wdGlvbnMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzY3JvbGxUb0l0ZW1cIiwgZnVuY3Rpb24gKGluZGV4LCBhbGlnbikge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJDMsIF90aGlzJG9wdGlvbnNMaXN0UmVmJDQ7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zTGlzdFJlZiQzID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJG9wdGlvbnNMaXN0UmVmJDQgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQzLmxpc3RSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnNMaXN0UmVmJDQuc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibWFrZU9wdGlvbklkXCIsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBcIlwiLmNvbmNhdChfdGhpcy5saXN0SWQsIFwiX29wdGlvbi1cIikuY29uY2F0KGluZGV4KSA6ICcnO1xuICAgIH0pO1xuXG4gICAgX3RoaXMucm9vdElkID0gcHJvcHMuaWQgPyBmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQocHJvcHMuaWQpLmNvbmNhdChzdWZmaXggPyBcIl9cIi5jb25jYXQoc3VmZml4KSA6ICcnKTtcbiAgICB9IDogaHRtbElkR2VuZXJhdG9yKCk7XG4gICAgX3RoaXMubGlzdElkID0gX3RoaXMucm9vdElkKCdsaXN0Ym94Jyk7XG4gICAgX3RoaXMubWVzc2FnZUNvbnRlbnRJZCA9IF90aGlzLnJvb3RJZCgnbWVzc2FnZUNvbnRlbnQnKTtcbiAgICB2YXIgX29wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIF9pc1ByZUZpbHRlcmVkID0gcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBwcm9wcy5zZWFyY2hQcm9wcztcbiAgICB2YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgfHwgU3RyaW5nKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMuZGVmYXVsdFZhbHVlKSB8fCAnJyk7XG5cbiAgICB2YXIgX3Zpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKF9vcHRpb25zLCBpbml0aWFsU2VhcmNoVmFsdWUsIF9pc1ByZUZpbHRlcmVkKTtcblxuICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3NlYXJjaFByb3BzJG9uQ2hhbmdlID0gc2VhcmNoUHJvcHMub25DaGFuZ2UpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlYXJjaFByb3BzJG9uQ2hhbmdlLmNhbGwoc2VhcmNoUHJvcHMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3Zpc2libGVPcHRpb25zKTsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgdmlzaWJsZU9wdGlvbnNcblxuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBfb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkO1xuICAgIH0pO1xuXG4gICAgdmFyIF9hY3RpdmVPcHRpb25JbmRleDtcblxuICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKF92aXNpYmxlT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgIF9hY3RpdmVPcHRpb25JbmRleCA9IF92aXNpYmxlT3B0aW9ucy5pbmRleE9mKHNlbGVjdGVkT3B0aW9uc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogX2FjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIHZpc2libGVPcHRpb25zOiBfdmlzaWJsZU9wdGlvbnMsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPT0gdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25BY3RpdmVPLCBfdGhpcyRwcm9wczI7XG5cbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbiA9IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCA/IHRoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0gOiBudWxsO1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25BY3RpdmVPID0gKF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMpLm9uQWN0aXZlT3B0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQWN0aXZlTy5jYWxsKF90aGlzJHByb3BzMiwgYWN0aXZlT3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczMuY2xhc3NOYW1lLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkNoYW5nZSxcbiAgICAgICAgICBvbkFjdGl2ZU9wdGlvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkFjdGl2ZU9wdGlvbkNoYW5nZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMzLnNlYXJjaGFibGUsXG4gICAgICAgICAgc2VhcmNoUHJvcHMgPSBfdGhpcyRwcm9wczMuc2VhcmNoUHJvcHMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczMuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RQcm9wcyA9IF90aGlzJHByb3BzMy5saXN0UHJvcHMsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczMuaGVpZ2h0LFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHMzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgbG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubG9hZGluZ01lc3NhZ2UsXG4gICAgICAgICAgbm9NYXRjaGVzTWVzc2FnZSA9IF90aGlzJHByb3BzMy5ub01hdGNoZXNNZXNzYWdlLFxuICAgICAgICAgIGVtcHR5TWVzc2FnZSA9IF90aGlzJHByb3BzMy5lbXB0eU1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHN0YXRlLnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7IC8vIFNvbWUgbWVzc3kgZGVzdHJ1Y3R1cmluZyBoZXJlIHRvIHJlbW92ZSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5IGZyb20gc2VhcmNoUHJvcHMgYW5kIGxpc3RQcm9wc1xuICAgICAgLy8gTWFkZSBtZXNzaWVyIGJ5IHNvbWUgVFMgcmVxdWlyZW1lbnRzXG4gICAgICAvLyBUaGUgYXJpYSBhdHRyaWJ1dGVzIGFyZSB0aGVuIHVzZWQgaW4gZ2V0QWNjZXNzaWJsZU5hbWUoKSB0byBwbGFjZSB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnb1xuXG4gICAgICB2YXIgdW5rbm93bkFjY2Vzc2libGVOYW1lID0ge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHZhciBfcmVmMiA9IHNlYXJjaFByb3BzIHx8IHVua25vd25BY2Nlc3NpYmxlTmFtZSxcbiAgICAgICAgICBzZWFyY2hBcmlhTGFiZWwgPSBfcmVmMlsnYXJpYS1sYWJlbCddLFxuICAgICAgICAgIHNlYXJjaEFyaWFEZXNjcmliZWRieSA9IF9yZWYyWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYyLm9uQ2hhbmdlLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICBpbnB1dFJlZiA9IF9yZWYyLmlucHV0UmVmLFxuICAgICAgICAgIGNsZWFuZWRTZWFyY2hQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBfcmVmMyA9IGxpc3RQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgICAgbGlzdEFyaWFMYWJlbCA9IF9yZWYzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgbGlzdEFyaWFEZXNjcmliZWRieSA9IF9yZWYzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF9yZWYzLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0LFxuICAgICAgICAgIGNsZWFuZWRMaXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDMpO1xuXG4gICAgICB2YXIgdmlydHVhbGl6ZWRQcm9wcztcblxuICAgICAgaWYgKGlzVmlydHVhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHZpcnR1YWxpemVkUHJvcHMgPSB7XG4gICAgICAgICAgaXNWaXJ0dWFsaXplZDogaXNWaXJ0dWFsaXplZFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChyb3dIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZScsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGUtZnVsbEhlaWdodCc6IGhlaWdodCA9PT0gJ2Z1bGwnXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgLyoqIENyZWF0ZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCByZXBsYWNlcyB0aGUgbGlzdCBpZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHlldCkgKi9cblxuICAgICAgdmFyIG1lc3NhZ2VDb250ZW50O1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSB0eXBlb2YgZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVycm9yTWVzc2FnZSkgOiBlcnJvck1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBpZiAobG9hZGluZ01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbG9hZGluZ01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgICBzaXplOiBcIm1cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgICAgICAgICAgc2l6ZTogXCJ4c1wiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGxvYWRpbmdNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJMb2FkaW5nIG9wdGlvbnNcIlxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGxvYWRpbmdNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBsb2FkaW5nTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobm9NYXRjaGVzTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBub01hdGNoZXNNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbm9NYXRjaGVzTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9NYXRjaGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3NlYXJjaFZhbHVlfSBkb2Vzbid0IG1hdGNoIGFueSBvcHRpb25zXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChub01hdGNoZXNNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBub01hdGNoZXNNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChlbXB0eU1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgZW1wdHlNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZW1wdHlNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub0F2YWlsYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTm8gb3B0aW9ucyBhdmFpbGFibGVcIlxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoZW1wdHlNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBlbXB0eU1lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBUaGVyZSBhcmUgbG90cyBvZiB3YXlzIHRvIGFkZCBhbiBhY2Nlc3NpYmxlIG5hbWVcbiAgICAgICAqIFVzdWFsbHkgd2Ugd2FudCB0aGUgc2FtZSBuYW1lIGZvciB0aGUgaW5wdXQgYW5kIHRoZSBsaXN0Ym94ICh3aGljaCBpcyBhZGRlZCBieSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5KVxuICAgICAgICogQnV0IHlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIGl0IHVzaW5nIHNlYXJjaFByb3BzIG9yIGxpc3RQcm9wc1xuICAgICAgICogVGhpcyBmaW5kcyB0aGUgY29ycmVjdCBuYW1lIHRvIHVzZVxuICAgICAgICpcbiAgICAgICAqIFRPRE86IFRoaXMgZG9lc24ndCBoYW5kbGUgYmVpbmcgbGFiZWxsZWQgKDxsYWJlbCBmb3I9XCJpZE9mSW5wdXRcIj4pXG4gICAgICAgKi9cblxuXG4gICAgICB2YXIgZ2V0QWNjZXNzaWJsZU5hbWUgPSBmdW5jdGlvbiBnZXRBY2Nlc3NpYmxlTmFtZShwcm9wcywgbWVzc2FnZUNvbnRlbnRJZCkge1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3BzWydhcmlhLWxhYmVsJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1lc3NhZ2VDb250ZW50SWRTdHJpbmcgPSBtZXNzYWdlQ29udGVudElkID8gXCIgXCIuY29uY2F0KG1lc3NhZ2VDb250ZW50SWQpIDogJyc7XG5cbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBcIlwiLmNvbmNhdChwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJpYURlc2NyaWJlZGJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQoYXJpYURlc2NyaWJlZGJ5KS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfTtcblxuICAgICAgdmFyIHNlYXJjaEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUoc2VhcmNoUHJvcHMsIHRoaXMubWVzc2FnZUNvbnRlbnRJZCk7XG4gICAgICB2YXIgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKHNlYXJjaEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIHNlYXJjaCA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWVcIixcbiAgICAgICAgZGVmYXVsdDogXCJGaWx0ZXIgb3B0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAocGxhY2Vob2xkZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVTZWFyY2gsIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwibGlzdFNlYXJjaFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIub3B0aW9uc0xpc3RSZWYuY3VycmVudCA/IF90aGlzMi5saXN0SWQgOiB1bmRlZmluZWQgLy8gT25seSBwYXNzIHRoZSBsaXN0SWQgaWYgaXQgZXhpc3RzIG9uIHRoZSBwYWdlXG4gICAgICAgICAgLFxuICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF90aGlzMi5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpIC8vIHRoZSBjdXJyZW50IGZhdXgtZm9jdXNlZCBvcHRpb25cbiAgICAgICAgICAsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyTmFtZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkICE9PSBudWxsICYmIGlzUHJlRmlsdGVyZWQgIT09IHZvaWQgMCA/IGlzUHJlRmlsdGVyZWQgOiBmYWxzZSxcbiAgICAgICAgICBpbnB1dFJlZjogZnVuY3Rpb24gaW5wdXRSZWYobm9kZSkge1xuICAgICAgICAgICAgdmFyIF9zZWFyY2hQcm9wcyRpbnB1dFJlZjtcblxuICAgICAgICAgICAgX3RoaXMyLmlucHV0UmVmID0gbm9kZTtcbiAgICAgICAgICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3NlYXJjaFByb3BzJGlucHV0UmVmID0gc2VhcmNoUHJvcHMuaW5wdXRSZWYpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlYXJjaFByb3BzJGlucHV0UmVmLmNhbGwoc2VhcmNoUHJvcHMsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPyBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHBsYWNlaG9sZGVyTmFtZVxuICAgICAgICB9LCBjbGVhbmVkU2VhcmNoUHJvcHMpKTtcbiAgICAgIH0pIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSB2aXNpYmxlT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZDtcbiAgICAgIH0pLmxlbmd0aDtcblxuICAgICAgdmFyIGxpc3RTY3JlZW5SZWFkZXJTdGF0dXMgPSBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLnNlYXJjaFJlc3VsdHNcIixcbiAgICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoX3JlZjQpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0c0xlbmd0aCA9IF9yZWY0LnJlc3VsdHNMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdHNMZW5ndGgsIFwiIHJlc3VsdFwiKS5jb25jYXQocmVzdWx0c0xlbmd0aCA9PT0gMSA/ICcnIDogJ3MnLCBcIiBhdmFpbGFibGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHJlc3VsdHNMZW5ndGg6IHJlc3VsdHNMZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBsaXN0QXJpYURlc2NyaWJlZGJ5SWQgPSB0aGlzLnJvb3RJZCgnaW5zdHJ1Y3Rpb25zJyk7XG4gICAgICB2YXIgbGlzdEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUobGlzdFByb3BzLCBsaXN0QXJpYURlc2NyaWJlZGJ5SWQpO1xuICAgICAgdmFyIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMobGlzdEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuXG4gICAgICB2YXIgbGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbnM6IFsnZXVpU2VsZWN0YWJsZS5zY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMnLCAnZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWUnXSxcbiAgICAgICAgZGVmYXVsdHM6IFsnVXNlIHVwIGFuZCBkb3duIGFycm93cyB0byBtb3ZlIGZvY3VzIG92ZXIgb3B0aW9ucy4gRW50ZXIgdG8gc2VsZWN0LiBFc2NhcGUgdG8gY29sbGFwc2Ugb3B0aW9ucy4nLCAnRmlsdGVyIG9wdGlvbnMnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyTmFtZSA9IF9yZWY2WzBdLFxuICAgICAgICAgICAgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zID0gX3JlZjZbMV07XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJMaXZlLCB7XG4gICAgICAgICAgaXNBY3RpdmU6IG1lc3NhZ2VDb250ZW50ICE9IG51bGwgfHwgYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCB8fCBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzKSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgaWQ6IGxpc3RBcmlhRGVzY3JpYmVkYnlJZFxuICAgICAgICB9LCBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMpKSwgbWVzc2FnZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVNZXNzYWdlLCB7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVNZXNzYWdlXCIsXG4gICAgICAgICAgaWQ6IF90aGlzMi5tZXNzYWdlQ29udGVudElkLFxuICAgICAgICAgIGJvcmRlcmVkOiBsaXN0UHJvcHMgJiYgbGlzdFByb3BzLmJvcmRlcmVkXG4gICAgICAgIH0sIG1lc3NhZ2VDb250ZW50KSA6IF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpU2VsZWN0YWJsZUxpc3RcIixcbiAgICAgICAgICBrZXk6IFwibGlzdFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IGZ1bmN0aW9uIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4LCBjYikge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9LCBjYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICByZWY6IF90aGlzMi5vcHRpb25zTGlzdFJlZixcbiAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICAgIG1ha2VPcHRpb25JZDogX3RoaXMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5saXN0SWRcbiAgICAgICAgfSwgbGlzdEhhc0FjY2Vzc2libGVOYW1lID8gbGlzdEFjY2Vzc2libGVOYW1lIDogc2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZExpc3RQcm9wcywgdmlydHVhbGl6ZWRQcm9wcykpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy5jb250YWluZXJSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQ29udGFpbmVyQmx1cixcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93blxuICAgICAgfSwgcmVzdCksIGNoaWxkcmVuICYmIGNoaWxkcmVuKGxpc3QsIHNlYXJjaCkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IG5leHRQcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHNlYXJjaFByb3BzID0gbmV4dFByb3BzLnNlYXJjaFByb3BzO1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gcHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhY3RpdmVPcHRpb25JbmRleFxuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgIT0gbnVsbCAmJiBzZWFyY2hQcm9wcy52YWx1ZSAhPT0gc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuc2VhcmNoVmFsdWUgPSBzZWFyY2hQcm9wcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBvcHRpb25zOiBbXSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcbiAgc2VhcmNoYWJsZTogZmFsc2UsXG4gIGlzUHJlRmlsdGVyZWQ6IGZhbHNlXG59KTtcblxuRXVpU2VsZWN0YWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEhvb2tzIHVwIGEgc2VhcmNoIGJveCB0byBmaWx0ZXIgdGhlIGxpc3QgKGJvb2xlYW4pXG4gICAgICAgKi9cbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUGFzc2VzIHByb3BzIGRvd24gdG8gdGhlIGBFdWlGaWVsZFNlYXJjaGAuXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVTZWFyY2hQcm9wc1xuICAgICAgICovXG4gIHNlYXJjaFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgYGxpc3RgIG5vZGUgYW5kIHRoZW5cbiAgICAgICAqIHRoZSBgc2VhcmNoYCBub2RlIChpZiBgc2VhcmNoYWJsZWAgaXMgYXBwbGllZClcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBBcnJheSBvZiBFdWlTZWxlY3RhYmxlT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvblByb3BzXG4gICAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGBib29sZWFuYC5cbiAgICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaW5kaWNhdGUgb2JqZWN0IGlzIGp1c3QgYSBncm91cGluZyBsYWJlbCwgbm90IGEgc2VsZWN0YWJsZSBpdGVtXG4gICAgICAgKi9cbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFZpc2libGUgbGFiZWwgb2Ygb3B0aW9uLlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zIGlmIGBrZXlgIGlzIG5vdCBzdXBwbGllZFxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsbHkgY2hhbmdlIHRoZSBzZWFyY2hhYmxlIHRlcm0gYnkgcGFzc2luZyBhIGRpZmZlcmVudCBzdHJpbmcgb3RoZXIgdGhhbiB0aGUgYGxhYmVsYC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3VzdG9tIGBvcHRpb25SZW5kZXJgIHRvIHNlcGFyYXRlIHRoZSBsYWJlbCBmcm9tIG1ldGFkYXRhIGJ1dCBhbGxvd2luZyB0byBzZWFyY2ggb24gYm90aFxuICAgICAgICovXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTGVhdmUgYHVuZGVmaW5lZGAgdG8gaW5kaWNhdGUgbm90IHNlbGVjdGVkLFxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24gYW5kXG4gICAgICAgKiAnb2ZmJyB0byBpbmRpY2F0ZSBleGNsdXNpb25cbiAgICAgICAqL1xuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBpY29uIGFuZCB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCB0byB0aGUgZmFyIHJpZ2h0IG9mIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBhbHRlcmVkIGBvcHRpb25zYCBhcnJheSB3aXRoIHNlbGVjdGVkIG9wdGlvbnMgaGF2aW5nIGBjaGVja2VkOiAnb24nYC5cbiAgICAgICAqIEFsc28gcGFzc2VzIGJhY2sgdGhlIFJlYWN0IGNsaWNrL2tleWJvYXJkIGV2ZW50IGFzIGEgc2Vjb25kIGFyZ3VtZW50LlxuICAgICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IGFjdGl2ZSBvcHRpb24gd2hlbmV2ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgY3VycmVudGx5XG4gICAgICAgKiBoaWdobGlnaHRlZCBvcHRpb24gdmlhIGtleWJvYXJkIG5hdmlnYXRpb24gb3Igc2VhcmNoaW5nLlxuICAgICAgICovXG4gIG9uQWN0aXZlT3B0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gcG9saWN5IG9mXG4gICAgICAgKiBgZmFsc2VgOiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgKiBgdHJ1ZWA6IG9ubHkgYWxsb3dzIG9uZSBzZWxlY3Rpb25cbiAgICAgICAqIGBhbHdheXNgOiBjYW4gYW5kIG11c3QgaGF2ZSBvbmx5IG9uZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBbGxvd3MgbWFya2luZyBvcHRpb25zIGFzIGBjaGVja2VkPSdvZmYnYCBhcyB3ZWxsIGFzIGAnb24nYFxuICAgICAgICovXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93IGFuIGxvYWRpbmcgaW5kaWNhdG9yIHdoaWxlIHlvdSBsb2FkIGFuZCBob29rIHVwIHlvdXIgZGF0YVxuICAgICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcblxuICAvKipcbiAgICAgICAqIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvbnNMaXN0XG4gICAgICAgKi9cbiAgbGlzdFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlciBmdW5jdGlvbiBmb3IgZWFjaCBvcHRpb24uXG4gICAgICAgKiBSZXR1cm5zIGAob3B0aW9uLCBzZWFyY2hWYWx1ZSlgXG4gICAgICAgKi9cbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbG9hZGluZyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBsb2FkaW5nTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIG5vIG1hdGNoZXMgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbm9NYXRjaGVzTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGVtcHR5IG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIGVtcHR5TWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgICAqIFRoZSBtZXNzYWdlIHdpbGwgYmUgc2hvd24gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICAgICAqIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCwgb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKlxuICAgICAgICogYGVycm9yTWVzc2FnZT17aGFzRXJyb3JzID8gJ015IGVycm9yIG1lc3NhZ2UnIDogbnVsbH1gXG4gICAgICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9sIHdoZXRoZXIgb3Igbm90IG9wdGlvbnMgZ2V0IGZpbHRlcmVkIGludGVybmFsbHkgb3IgaWYgY29uc3VtZXIgd2lsbCBmaWx0ZXJcbiAgICAgICAqIERlZmF1bHQ6IGZhbHNlXG4gICAgICAgKi9cbiAgaXNQcmVGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJvbkNoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJ2YWx1ZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcImxpc3RJZFwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRmllbGRTZWFyY2ggfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4uL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVTZWFyY2goX3JlZikge1xuICB2YXIgb25DaGFuZ2VDYWxsYmFjayA9IF9yZWYub25DaGFuZ2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgcGxhY2Vob2xkZXIgPSBfcmVmLnBsYWNlaG9sZGVyLFxuICAgICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYuaXNQcmVGaWx0ZXJlZCxcbiAgICAgIGxpc3RJZCA9IF9yZWYubGlzdElkLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkKTtcbiAgICBvbkNoYW5nZUNhbGxiYWNrKHNlYXJjaFZhbHVlLCBtYXRjaGluZ09wdGlvbnMpO1xuICB9LCBbb3B0aW9ucywgaXNQcmVGaWx0ZXJlZCwgb25DaGFuZ2VDYWxsYmFja10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVTZWFyY2gnLCBjbGFzc05hbWUpO1xuICB2YXIgYXJpYVByb3BzSWZMaXN0SXNQcmVzZW50ID0gbGlzdElkID8ge1xuICAgIHJvbGU6ICdjb21ib2JveCcsXG4gICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ2xpc3QnLFxuICAgICdhcmlhLWV4cGFuZGVkJzogdHJ1ZSxcbiAgICAnYXJpYS1jb250cm9scyc6IGxpc3RJZCxcbiAgICAnYXJpYS1vd25zJzogbGlzdElkIC8vIGxlZ2FjeSBhdHRyaWJ1dGUgYnV0IHNoaW1zIHN1cHBvcnQgZm9yIG5lYXJseSBldmVyeXRoaW5nIGF0bVxuXG4gIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpZWxkU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGluY3JlbWVudGFsOiB0cnVlLFxuICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiXG4gIH0sIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCwgcmVzdCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBnZXRTZWFyY2hhYmxlTGFiZWwgPSBmdW5jdGlvbiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSB7XG4gIHZhciBub3JtYWxpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsIHx8IG9wdGlvbi5sYWJlbDtcbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IHNlYXJjaGFibGVMYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSA6IHNlYXJjaGFibGVMYWJlbDtcbn07XG5cbnZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICB9KTtcbn07XG5cbnZhciBjb2xsZWN0TWF0Y2hpbmdPcHRpb24gPSBmdW5jdGlvbiBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oYWNjdW11bGF0b3IsIG9wdGlvbiwgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgLy8gRG9uJ3Qgc2hvdyBvcHRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGlmXG4gIC8vIHRoZSBzZWxlY3RlZE9wdGlvbnMgbGlzdCBleGlzdHNcbiAgaWYgKHNlbGVjdGVkT3B0aW9ucykge1xuICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbiwgZmFsc2UpLCBzZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIElmIHRoZSBvcHRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHByZWZpbHRlcmVkIHRoZW4gd2UgY2FuIHNraXAgZmlsdGVyaW5nIGFnYWluc3QgdGhlIHNlYXJjaCB2YWx1ZS5cbiAgLy8gVE9ETzogSSBzdGlsbCBkb24ndCBxdWl0ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzIHdoZW4gaG9va2VkIHVwIHRvIGFzeW5jXG5cblxuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pO1xuXG4gIGlmIChub3JtYWxpemVkT3B0aW9uLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgZ2V0TWF0Y2hpbmdPcHRpb25zID0gZnVuY3Rpb24gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKTtcbiAgfSk7XG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3JkZXJlZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVNZXNzYWdlID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZU1lc3NhZ2UoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvcmRlcmVkID0gX3JlZi5ib3JkZXJlZCxcbiAgICAgIGJvcmRlcmVkID0gX3JlZiRib3JkZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGJvcmRlcmVkLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZU1lc3NhZ2UnLCB7XG4gICAgJ2V1aVNlbGVjdGFibGVNZXNzYWdlLS1ib3JkZXJlZCc6IGJvcmRlcmVkXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHQsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogXCJzdWJkdWVkXCIsXG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVNlbGVjdGFibGVNZXNzYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2ggdGhpcyB0byB0aGUgYGxpc3RQcm9wcy5ib3JkZXJlZGAgcHJvcGVydHkgb2YgeW91ciBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2VcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImRhdGFcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImxhYmVsXCIsIFwiaXNHcm91cExhYmVsXCIsIFwiY2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcInJlZlwiLCBcImtleVwiLCBcInNlYXJjaGFibGVMYWJlbFwiLCBcImRhdGFcIl0sXG4gICAgX2V4Y2x1ZGVkMyA9IFtcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJ3aW5kb3dQcm9wc1wiLCBcInJvd0hlaWdodFwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwibWFrZU9wdGlvbklkXCIsIFwic2hvd0ljb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidmlzaWJsZU9wdGlvbnNcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJib3JkZXJlZFwiLCBcInBhZGRpbmdTaXplXCIsIFwic2VhcmNoYWJsZVwiLCBcIm9uRm9jdXNCYWRnZVwiLCBcImxpc3RJZFwiLCBcInNldEFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJyb2xlXCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcInRleHRXcmFwXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgYXJlRXF1YWwgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpQXV0b1NpemVyIH0gZnJvbSAnLi4vLi4vYXV0b19zaXplcic7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3RJdGVtIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3RfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZUxpc3QpO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdEJveFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG5cbiAgICAgIGlmIChyZWYgJiYgX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgcmVmLnNjcm9sbFRvSXRlbShfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBGaXJlZm94IGFkZHMgYSB0YWIgc3RvcCBmb3Igc2Nyb2xsYWJsZSBjb250YWluZXJzXG4gICAgICAvLyBXZSBoYW5kbGUgdGhpcyBpbnNpZGUgc28gbmVlZCB0byBzdG9wIGZpcmVmb3ggZnJvbSBkb2luZyBpdHMgdGhpbmdcbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0Qm94UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RCb3hSZWYgPSByZWY7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wcy5saXN0SWQsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXTtcblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdpZCcsIGxpc3RJZCk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuXG4gICAgICAgIGlmIChzZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuXG4gICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycgJiYgc2luZ2xlU2VsZWN0aW9uICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyaWFMYWJlbGxlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFMYWJlbGxlZGJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJpYURlc2NyaWJlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFEZXNjcmliZWRieSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJMaXN0Um93XCIsIC8qI19fUFVSRV9fKi9tZW1vKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIgb3B0aW9uRGF0YSA9IG9wdGlvbi5kYXRhLFxuICAgICAgICAgIF9vcHRpb24gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgaXNHcm91cExhYmVsID0gb3B0aW9uLmlzR3JvdXBMYWJlbCxcbiAgICAgICAgICBjaGVja2VkID0gb3B0aW9uLmNoZWNrZWQsXG4gICAgICAgICAgZGlzYWJsZWQgPSBvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgICAgcmVmID0gb3B0aW9uLnJlZixcbiAgICAgICAgICBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwsXG4gICAgICAgICAgX2RhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgICBvcHRpb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczIuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMi5vbkZvY3VzQmFkZ2UsXG4gICAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczIucGFkZGluZ1NpemUsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMyLnNob3dJY29ucyxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczIubWFrZU9wdGlvbklkLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMi5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuc2V0QWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMi5zZWFyY2hhYmxlLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMyLnRleHRXcmFwO1xuXG4gICAgICBpZiAoaXNHcm91cExhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsXCIsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuXG4gICAgICAgIH0sIG9wdGlvblJlc3QpLCBwcmVwZW5kLCBsYWJlbCwgYXBwZW5kKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxhYmVsQ291bnQgPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgdmFyIGlkID0gbWFrZU9wdGlvbklkKGluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IGlkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgICAgX3RoaXMub25BZGRPclJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiByZWYgPyByZWYuYmluZChudWxsLCBpbmRleCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGlzRm9jdXNlZDogYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4LFxuICAgICAgICB0aXRsZTogc2VhcmNoYWJsZUxhYmVsIHx8IGxhYmVsLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBcImFyaWEtcG9zaW5zZXRcIjogaW5kZXggKyAxIC0gbGFiZWxDb3VudCxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogZGF0YS5sZW5ndGggLSBsYWJlbENvdW50LFxuICAgICAgICBvbkZvY3VzQmFkZ2U6IG9uRm9jdXNCYWRnZSxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29uczogc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemUsXG4gICAgICAgIHNlYXJjaGFibGU6IHNlYXJjaGFibGUsXG4gICAgICAgIHRleHRXcmFwOiB0ZXh0V3JhcFxuICAgICAgfSwgb3B0aW9uUmVzdCksIHJlbmRlck9wdGlvbiA/IHJlbmRlck9wdGlvbiggLy8gQHRzLWlnbm9yZSBjb21wbGV4XG4gICAgICBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF9vcHRpb24pLCBvcHRpb25EYXRhKSwgX3RoaXMucHJvcHMuc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZVxuICAgICAgfSwgbGFiZWwpKTtcbiAgICB9LCBhcmVFcXVhbCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3JSZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKG9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMzLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMzJHZpc2libGVPID0gX3RoaXMkcHJvcHMzLnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMzJHZpc2libGVPID09PSB2b2lkIDAgPyBvcHRpb25zIDogX3RoaXMkcHJvcHMzJHZpc2libGVPO1xuXG4gICAgICBfdGhpcy5wcm9wcy5zZXRBY3RpdmVPcHRpb25JbmRleCh2aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYyLmxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWwgPT09IG9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyAmJiBhbGxvd0V4Y2x1c2lvbnMpIHtcbiAgICAgICAgICBfdGhpcy5vbkV4Y2x1ZGVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgfHwgb3B0aW9uLmNoZWNrZWQgPT09ICdvZmYnKSB7XG4gICAgICAgICAgX3RoaXMub25SZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3B0aW9uXCIsIGZ1bmN0aW9uIChhZGRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM0Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNC5vcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNC5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIC8vIGlmIHNpbmdsZVNlbGVjdGlvbiBpcyBlbmFibGVkLCB1bmNoZWNrIGFueSBzZWxlY3RlZCBvcHRpb24ocylcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICB9IC8vIGlmIHRoaXMgaXMgdGhlIG5vdy1zZWxlY3RlZCBvcHRpb24sIGNoZWNrIGl0XG5cblxuICAgICAgICBpZiAob3B0aW9uID09PSBhZGRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvbic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChyZW1vdmVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczUub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczUuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczUub3B0aW9ucztcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24gPT09IHJlbW92ZWRPcHRpb24gJiYgc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJykge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRXhjbHVkZU9wdGlvblwiLCBmdW5jdGlvbiAoZXhjbHVkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczYub3B0aW9ucztcbiAgICAgIGV4Y2x1ZGVkT3B0aW9uLmNoZWNrZWQgPSAnb2ZmJztcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24gPT09IGV4Y2x1ZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29mZic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgaWYgKHRoaXMubGlzdEJveFJlZiAmJiB0aGlzLnByb3BzLnNlYXJjaGFibGUgIT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5saXN0Qm94UmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgXCJcIi5jb25jYXQodGhpcy5wcm9wcy5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpc3RSZWYgJiYgdHlwZW9mIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMubGlzdFJlZi5zY3JvbGxUb0l0ZW0odGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczcuY2xhc3NOYW1lLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM3Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHM3LnJlbmRlck9wdGlvbixcbiAgICAgICAgICBmb3JjZWRIZWlnaHQgPSBfdGhpcyRwcm9wczcuaGVpZ2h0LFxuICAgICAgICAgIHdpbmRvd1Byb3BzID0gX3RoaXMkcHJvcHM3LndpbmRvd1Byb3BzLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzNy5yb3dIZWlnaHQsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczcuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHM3Lm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczcuc2hvd0ljb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczcudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHM3LmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBib3JkZXJlZCA9IF90aGlzJHByb3BzNy5ib3JkZXJlZCxcbiAgICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzNy5wYWRkaW5nU2l6ZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM3LnNlYXJjaGFibGUsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHM3Lm9uRm9jdXNCYWRnZSxcbiAgICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wczcubGlzdElkLFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHM3LnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzN1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHM3WydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczdbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgICByb2xlID0gX3RoaXMkcHJvcHM3LnJvbGUsXG4gICAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF90aGlzJHByb3BzNy5pc1ZpcnR1YWxpemVkLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHM3LnRleHRXcmFwLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM3LCBfZXhjbHVkZWQzKTtcblxuICAgICAgdmFyIG9wdGlvbkFycmF5ID0gdmlzaWJsZU9wdGlvbnMgfHwgb3B0aW9ucztcbiAgICAgIHZhciBoZWlnaHRJc0Z1bGwgPSBmb3JjZWRIZWlnaHQgPT09ICdmdWxsJztcbiAgICAgIHZhciBjYWxjdWxhdGVkSGVpZ2h0ID0gaGVpZ2h0SXNGdWxsID8gZmFsc2UgOiBmb3JjZWRIZWlnaHQ7IC8vIElmIGNhbGN1bGF0ZWRIZWlnaHQgaXMgc3RpbGwgdW5kZWZpbmVkLCB0aGVuIGNhbGN1bGF0ZSBpdFxuXG4gICAgICBpZiAoY2FsY3VsYXRlZEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtYXhWaXNpYmxlT3B0aW9ucyA9IDc7XG4gICAgICAgIHZhciBudW1WaXNpYmxlT3B0aW9ucyA9IG9wdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgdmFyIG51bVZpc2libGVNb3JlVGhhbk1heCA9IG9wdGlvbkFycmF5Lmxlbmd0aCA+IG1heFZpc2libGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChudW1WaXNpYmxlTW9yZVRoYW5NYXgpIHtcbiAgICAgICAgICAvLyBTaG93IG9ubHkgaGFsZiBvZiB0aGUgbGFzdCBvbmUgdG8gaW5kaWNhdGUgdGhlcmUncyBtb3JlIHRvIHNjcm9sbCB0b1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSAobWF4VmlzaWJsZU9wdGlvbnMgLSAwLjUpICogcm93SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIHJvd0hlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0Jywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3QtZnVsbEhlaWdodCc6IGhlaWdodElzRnVsbCxcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0LWJvcmRlcmVkJzogYm9yZGVyZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIGlzVmlydHVhbGl6ZWQgPyBfX19FbW90aW9uSlNYKEV1aUF1dG9TaXplciwge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0OiAhaGVpZ2h0SXNGdWxsXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBfcmVmMy5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICByZWY6IF90aGlzMi5zZXRMaXN0UmVmLFxuICAgICAgICAgIG91dGVyUmVmOiBfdGhpczIucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3AsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19saXN0XCIsXG4gICAgICAgICAgXCJkYXRhLXNraXAtYXhlXCI6IFwic2Nyb2xsYWJsZS1yZWdpb24tZm9jdXNhYmxlXCIsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogY2FsY3VsYXRlZEhlaWdodCB8fCBoZWlnaHQsXG4gICAgICAgICAgaXRlbUNvdW50OiBvcHRpb25BcnJheS5sZW5ndGgsXG4gICAgICAgICAgaXRlbURhdGE6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZTogXCJ1bFwiLFxuICAgICAgICAgIGlubmVyUmVmOiBfdGhpczIuc2V0TGlzdEJveFJlZlxuICAgICAgICB9LCB3aW5kb3dQcm9wcyksIF90aGlzMi5MaXN0Um93KTtcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fbGlzdFwiLFxuICAgICAgICByZWY6IHRoaXMucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCB7XG4gICAgICAgIHJlZjogdGhpcy5zZXRMaXN0Qm94UmVmXG4gICAgICB9LCBvcHRpb25BcnJheS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChfdGhpczIuTGlzdFJvdywge1xuICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgZGF0YTogb3B0aW9uQXJyYXksXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0sIG51bGwpO1xuICAgICAgfSkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVNlbGVjdGFibGVMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZUxpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcm93SGVpZ2h0OiAzMixcbiAgc2VhcmNoVmFsdWU6ICcnLFxuICBpc1ZpcnR1YWxpemVkOiB0cnVlXG59KTtcblxuRXVpU2VsZWN0YWJsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBUaGUgaW5kZXggb2YgdGhlIG9wdGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyBwc2V1ZG8tZm9jdXNlZDtcbiAgICAgICAqIEdvb2QgZm9yIHVzZSB3aGVuIG9ubHkgb25lIHNlbGVjdGlvbiBpcyBhbGxvd2VkIGFuZCBuZWVkaW5nIHRvIG9wZW5cbiAgICAgICAqIGRpcmVjdGx5IHRvIHRoYXQgb3B0aW9uXG4gICAgICAgKi9cbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93IHRoZSBjaGVjay9jcm9zcyBzZWxlY3Rpb24gaW5kaWNhdG9yIGljb25zXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQW55IHByb3BzIHRvIHNlbmQgc3BlY2lmaWNhbGx5IHRvIHRoZSByZWFjdC13aW5kb3cgYEZpeGVkU2l6ZUxpc3RgXG4gICAgICAgKi9cbiAgd2luZG93UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYm9yZGVyIGFyb3VuZCB0aGUgbGlzdCB0byBpbmRpY2F0ZSB0aGUgYm91bmRzO1xuICAgICAgICogVXNlZnVsIHdoZW4gdGhlIGxpc3Qgc2Nyb2xscywgb3RoZXJ3aXNlIHVzZSB5b3VyIG93biBjb250YWluZXJcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIHRleHQsXG4gICAgICAgKiBzaG93cyBhIGhvbGxvdyBiYWRnZSBhcyBhbiBhcHBlbmQgKGZhciByaWdodCkgd2hlbiB0aGUgaXRlbSBpcyBmb2N1c2VkLlxuICAgICAgICogVGhlIGRlZmF1bHQgY29udGVudCB3aGVuIGB0cnVlYCBpcyBgXHUyMUE5IHRvIHNlbGVjdC9kZXNlbGVjdC9pbmNsdWRlL2V4Y2x1ZGVgXG4gICAgICAgKi9cbiAgb25Gb2N1c0JhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHZpcnR1YWxpemVkIHJlbmRlcmluZyBmb3IgbGlzdCBpdGVtcyB3aXRoIGByZWFjdC13aW5kb3dgLlxuICAgICAgICogU2V0cyBlYWNoIHJvdydzIGhlaWdodCB0byB0aGUgdmFsdWUgb2YgYHJvd0hlaWdodGAuXG4gICAgICAgKi9cbiAgaXNWaXJ0dWFsaXplZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSksIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiAgVGhlIGhlaWdodCBvZiBlYWNoIG9wdGlvbiBpbiBwaXhlbHMuIERlZmF1bHRzIHRvIGAzMmAuXG4gICAgICAgKiAgSGFzIG5vIGVmZmVjdCBpZiBgaXNWaXJ0dWFsaXplZD1mYWxzZWAuXG4gICAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEFsbCBwb3NzaWJsZSBvcHRpb25zXG4gICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZCxcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGFuZFxuICAgICAgICogJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRmlsdGVyZWQgb3B0aW9ucyBsaXN0IChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICB2aXNpYmxlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIFNlYXJjaCB2YWx1ZSB0byBoaWdobGlnaHQgb24gdGhlIG9wdGlvbiByZW5kZXJcbiAgICAgKi9cbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBvcHRpb25zIHdpdGggYWx0ZXJlZCBjaGVja2VkIHN0YXRlXG4gICAgICovXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIHJlbmRlciBmb3IgdGhlIGxhYmVsIHBvcnRpb24gb2YgdGhlIG9wdGlvbjtcbiAgICAgKiBUYWtlcyAob3B0aW9uLCBzZWFyY2hWYWx1ZSksIHJldHVybnMgUmVhY3ROb2RlXG4gICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgKiB0aGUgd2hvbGUgZ3JvdXAgdG8gZmlsbCB0aGUgaGVpZ2h0IG9mIGl0cyBjb250YWluZXIgYW5kXG4gICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG5cbiAgLyoqXG4gICAgICogQWxsb3cgY3ljbGluZyB0aHJvdWdoIHRoZSBvbiwgb2ZmIGFuZCB1bmRlZmluZWQgc3RhdGUgb2Ygb3B0aW9uLmNoZWNrZWRcbiAgICAgKiBhbmQgbm90IGp1c3Qgb24gYW5kIHVuZGVmaW5lZFxuICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgbWFrZU9wdGlvbklkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsaXN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJjaGVja2VkXCIsIFwiaXNGb2N1c2VkXCIsIFwic2hvd0ljb25zXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcIm9uRm9jdXNCYWRnZVwiLCBcInBhZGRpbmdTaXplXCIsIFwicm9sZVwiLCBcInNlYXJjaGFibGVcIiwgXCJ0ZXh0V3JhcFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIGlmICghY2hlY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiAnZW1wdHknXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjaGVja2VkID09PSAnb24nID8ge1xuICAgIGljb246ICdjaGVjaycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9IDoge1xuICAgIGljb246ICdjcm9zcycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9O1xufVxuXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ2V1aVNlbGVjdGFibGVMaXN0SXRlbS0tcGFkZGluZ1NtYWxsJ1xufTtcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IGtleXNPZihwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVMaXN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGVMaXN0SXRlbSk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3RJdGVtKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0SXRlbSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBjaGVja2VkID0gX3RoaXMkcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRwcm9wcy5pc0ZvY3VzZWQsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMuc2hvd0ljb25zLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wcy5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzLmFwcGVuZCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wcy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMub25Gb2N1c0JhZGdlLFxuICAgICAgICAgIF90aGlzJHByb3BzJHBhZGRpbmdTaSA9IF90aGlzJHByb3BzLnBhZGRpbmdTaXplLFxuICAgICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMkcGFkZGluZ1NpID09PSB2b2lkIDAgPyAncycgOiBfdGhpcyRwcm9wcyRwYWRkaW5nU2ksXG4gICAgICAgICAgX3RoaXMkcHJvcHMkcm9sZSA9IF90aGlzJHByb3BzLnJvbGUsXG4gICAgICAgICAgcm9sZSA9IF90aGlzJHByb3BzJHJvbGUgPT09IHZvaWQgMCA/ICdvcHRpb24nIDogX3RoaXMkcHJvcHMkcm9sZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMuc2VhcmNoYWJsZSxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzLnRleHRXcmFwLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtJywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZCc6IGlzRm9jdXNlZFxuICAgICAgfSwgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgdGV4dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQnLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0LS1cIi5jb25jYXQodGV4dFdyYXApLCB0ZXh0V3JhcCkpO1xuICAgICAgdmFyIG9wdGlvbkljb247XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBvcHRpb25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvblwiLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICB0eXBlOiBpY29uXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhdGU7XG4gICAgICB2YXIgaW5zdHJ1Y3Rpb247XG5cbiAgICAgIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgY2hlY2tlZCA9PT0gJ29uJykge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5pbmNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5pbmNsdWRlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiBjaGVja2VkID09PSAnb2ZmJykge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiRXhjbHVkZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiAhY2hlY2tlZCkge1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS51bmNrZWNrZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHNlbGVjdCB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0NoZWNrZWQgPSAhZGlzYWJsZWQgJiYgdHlwZW9mIGNoZWNrZWQgPT09ICdzdHJpbmcnO1xuXG4gICAgICBpZiAoIWFsbG93RXhjbHVzaW9ucyAmJiBpc0NoZWNrZWQpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ2hlY2tlZCBvcHRpb24uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydWN0aW9uID0gc2VhcmNoYWJsZSA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja2VkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBlbnRlci5cIlxuICAgICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXBlbmROb2RlO1xuXG4gICAgICBpZiAocHJlcGVuZCkge1xuICAgICAgICBwcmVwZW5kTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kXCJcbiAgICAgICAgfSwgcHJlcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlO1xuXG4gICAgICBpZiAoYXBwZW5kIHx8ICEhb25Gb2N1c0JhZGdlKSB7XG4gICAgICAgIHZhciBvbkZvY3VzQmFkZ2VOb2RlO1xuICAgICAgICB2YXIgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzID0ge1xuICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICAgaWNvblR5cGU6ICdyZXR1cm5LZXknLFxuICAgICAgICAgIGljb25TaWRlOiAnbGVmdCcsXG4gICAgICAgICAgY29sb3I6ICdob2xsb3cnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9uRm9jdXNCYWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG9uRm9jdXNCYWRnZU5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19vbkZvY3VzQmFkZ2VcIlxuICAgICAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcykpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhb25Gb2N1c0JhZGdlICYmIG9uRm9jdXNCYWRnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkcmVuID0gb25Gb2N1c0JhZGdlLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBfY2xhc3NOYW1lID0gb25Gb2N1c0JhZGdlLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgcmVzdEJhZGdlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob25Gb2N1c0JhZGdlLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICAgIG9uRm9jdXNCYWRnZU5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlJywgX2NsYXNzTmFtZSlcbiAgICAgICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMsIHJlc3RCYWRnZVByb3BzKSwgX2NoaWxkcmVuKTtcbiAgICAgICAgfSAvLyBPbmx5IGRpc3BsYXkgdGhlIGFwcGVuZCB3cmFwcGVyIGlmIGFwcGVuZCBleGlzdHMgb3IgaXNGb2N1c2VkXG5cblxuICAgICAgICBpZiAoYXBwZW5kIHx8IGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICBhcHBlbmROb2RlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kXCJcbiAgICAgICAgICB9LCBhcHBlbmQsIFwiIFwiLCBpc0ZvY3VzZWQgJiYgIWRpc2FibGVkID8gb25Gb2N1c0JhZGdlTm9kZSA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0cnVjdGlvbnMgPSAoaW5zdHJ1Y3Rpb24gfHwgc3RhdGUpICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBzdGF0ZSB8fCBpbnN0cnVjdGlvbiA/ICcgLSAnIDogbnVsbCwgc3RhdGUsIHN0YXRlICYmIGluc3RydWN0aW9uID8gJyAnIDogbnVsbCwgaW5zdHJ1Y3Rpb24pKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJvbGU6IHJvbGUsXG4gICAgICAgIFwiZGF0YS10ZXN0LXNlbGVjdGVkXCI6IGlzQ2hlY2tlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIGNoZWNrZWQvc2VsZWN0ZWRcbiAgICAgICAgLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiByb2xlID09PSAnb3B0aW9uJyA/IGlzQ2hlY2tlZCA6IHVuZGVmaW5lZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIFwiY2hlY2tlZFwiXG4gICAgICAgICxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6ICFkaXNhYmxlZCAmJiBpc0ZvY3VzZWQgLy8gV2hldGhlciB0aGUgaXRlbSBoYXMga2V5Ym9hcmQgZm9jdXMgcGVyIFczIHNwZWNcbiAgICAgICAgLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudFwiXG4gICAgICB9LCBvcHRpb25JY29uLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IHRleHRDbGFzc2VzXG4gICAgICB9LCBjaGlsZHJlbiwgaW5zdHJ1Y3Rpb25zKSwgYXBwZW5kTm9kZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlTGlzdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgc2hvd0ljb25zOiB0cnVlLFxuICBvbkZvY3VzQmFkZ2U6IHRydWUsXG4gIHRleHRXcmFwOiAndHJ1bmNhdGUnXG59KTtcblxuRXVpU2VsZWN0YWJsZUxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIGFuIGljb24gYW5kIHZpc3VhbCBzdHlsaW5nIHRvIGFjdGl2YXRlZCBpdGVtc1xuICAgICAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcblxuICAvKipcbiAgICAgICAqIFNob3dzIGljb25zIGJhc2VkIG9uIGBjaGVja2VkYCB0eXBlXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIEhpZ2hsaWdodHMgdGhlIGl0ZW0gZm9yIHBzZXVkbyBmb2N1c1xuICAgICAgICovXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIGEgY3VzdG9tIGJhZGdlLFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZSBpcyBzZWFyY2hhYmxlLlxuICAgICAgICogV2hlbiB0cnVlLCB0aGUgU3BhY2Uga2V5IHdpbGwgbm90IHRvZ2dsZSBzZWxlY3Rpb24sIGFzIGl0IHdpbGwgdHlwZSBpbnRvIHRoZSBzZWFyY2ggYm94IGluc3RlYWQuIFNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQgaW5zdHJ1Y3RpbmcgdXNlcnMgdG8gdXNlIHRoZSBFbnRlciBrZXkgdG8gc2VsZWN0IGl0ZW1zLlxuICAgICAgICogV2hlbiBmYWxzZSwgdGhlIFNwYWNlIGtleSB3aWxsIHRvZ2dsZSBpdGVtIHNlbGVjdGlvbi4gTm8gZXh0cmEgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCwgYXMgU3BhY2UgdG8gdG9nZ2xlIGlzIGEgZ2VuZXJhbGx5IHN0YW5kYXJkIGZvciBtb3N0IHNlbGVjdC9jaGVja2VkIGVsZW1lbnRzLlxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQXR0cmlidXRlIGFwcGxpZWQgdGhlIG9wdGlvbiBgPGxpPmAuXG4gICAgICAgKiBJZiBjb25maWd1cmVkIHRvIHNvbWV0aGluZyBiZXNpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBvcHRpb25gLFxuICAgICAgICogb3RoZXIgQVJJQSBhdHRyaWJ1dGVzIHN1Y2ggYXMgYGFyaWEtY2hlY2tlZGAgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkLlxuICAgICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJ0YWJsZUxheW91dFwiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRhYmxlTGF5b3V0VG9DbGFzc01hcCA9IHtcbiAgZml4ZWQ6IG51bGwsXG4gIGF1dG86ICdldWlUYWJsZS0tYXV0bydcbn07XG5leHBvcnQgdmFyIEV1aVRhYmxlID0gZnVuY3Rpb24gRXVpVGFibGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgICAgX3JlZiR0YWJsZUxheW91dCA9IF9yZWYudGFibGVMYXlvdXQsXG4gICAgICB0YWJsZUxheW91dCA9IF9yZWYkdGFibGVMYXlvdXQgPT09IHZvaWQgMCA/ICdmaXhlZCcgOiBfcmVmJHRhYmxlTGF5b3V0LFxuICAgICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAnZXVpVGFibGUtLXJlc3BvbnNpdmUnOiByZXNwb25zaXZlXG4gIH0sIHRhYmxlTGF5b3V0VG9DbGFzc01hcFt0YWJsZUxheW91dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRhYmxlXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGUucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eVxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9keVJlZlwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUJvZHkgPSBmdW5jdGlvbiBFdWlUYWJsZUJvZHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBib2R5UmVmID0gX3JlZi5ib2R5UmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGJvZHlcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogYm9keVJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYm9keVJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Zm9vdFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcIndpZHRoXCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBDRU5URVJfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXJDZWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlRm9vdGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlRcbiAgfSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHRcIlxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlUYWJsZUZvb3RlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBXQVJOSU5HX01FU1NBR0UgPSAnVHdvIGB3aWR0aGAgcHJvcGVydGllcyB3ZXJlIHByb3ZpZGVkLiBQcm92aWRlIG9ubHkgb25lIG9mIGBzdHlsZS53aWR0aGAgb3IgYHdpZHRoYCB0byBhdm9pZCBjb25mbGljdHMuJztcbmV4cG9ydCB2YXIgcmVzb2x2ZVdpZHRoQXNTdHlsZSA9IGZ1bmN0aW9uIHJlc29sdmVXaWR0aEFzU3R5bGUoKSB7XG4gIHZhciBzdHlsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciB3aWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gIHZhciBzdHlsZVdpZHRoID0gc3R5bGUud2lkdGgsXG4gICAgICBzdHlsZVJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc3R5bGUsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGF0dHJXaWR0aCA9IHdpZHRoO1xuXG4gIGlmIChhdHRyV2lkdGggIT0gbnVsbCAmJiAodHlwZW9mIGF0dHJXaWR0aCA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcihhdHRyV2lkdGgpKSkgLy8gdHJhbnNmb3JtIHtudW1iZXJ9IG9yIHVuaXRsZXNzICdudW1iZXInIHRvIHB4IHN0cmluZ1xuICApIHtcbiAgICBhdHRyV2lkdGggPSBcIlwiLmNvbmNhdChhdHRyV2lkdGgsIFwicHhcIik7XG4gIH1cblxuICBpZiAoc3R5bGVXaWR0aCAmJiBhdHRyV2lkdGgpIHtcbiAgICBjb25zb2xlLndhcm4oV0FSTklOR19NRVNTQUdFKTtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlUmVzdCksIHt9LCB7XG4gICAgd2lkdGg6IGF0dHJXaWR0aCB8fCBzdHlsZVdpZHRoXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcFdpdGhUYWJsZVJvd1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlciA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiR3cmFwV2l0aFRhYmxlUm93ID0gX3JlZi53cmFwV2l0aFRhYmxlUm93LFxuICAgICAgd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoZWFkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgd3JhcFdpdGhUYWJsZVJvdyA/IF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikgOiBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDaGlsZHJlbiBtdXN0IGJlIHZhbGlkIERPTSBzdHJ1Y3R1cmUgcmVzaWRpbmcgd2l0aGluIGA8dGhlYWQ+YC5cbiAgICAgICAqIFVzZSBgPHRkPiB8IDx0aD5gIGJ5IGRlZmF1bHQsIG9yIGA8dHI+PHRoLz48L3RyPmAgd2hlbiBgd3JhcFdpdGhUYWJsZVJvdz1mYWxzZWBcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBdXRvbWF0aWNhbGx5IGFkZHMgYSB3cmFwcGluZyBgPHRyPmAgZWxlbWVudCBhcm91bmQgdGhlIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgd3JhcFdpdGhUYWJsZVJvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcIm1vYmlsZU9wdGlvbnNcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCIsIFwicmVhZE9ubHlcIiwgXCJkZXNjcmlwdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgQ0VOVEVSX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBDZWxsQ29udGVudHMgPSBmdW5jdGlvbiBDZWxsQ29udGVudHMoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICAgIHNob3dTb3J0TXNnID0gX3JlZi5zaG93U29ydE1zZztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpVGFibGVIZWFkZXJDZWxsLnRpdGxlVGV4dFdpdGhEZXNjXCIsXG4gICAgICBkZWZhdWx0OiBcIntpbm5lclRleHR9OyB7ZGVzY3JpcHRpb259XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgaW5uZXJUZXh0OiBpbm5lclRleHQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICh0aXRsZVRleHRXaXRoRGVzYykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgdGl0bGU6IGRlc2NyaXB0aW9uID8gdGl0bGVUZXh0V2l0aERlc2MgOiBpbm5lclRleHQsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSk7XG4gIH0pLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIHNob3dTb3J0TXNnICYmIGlzU29ydGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVNvcnRJY29uXCIsXG4gICAgdHlwZTogaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nLFxuICAgIHNpemU6IFwibVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgX3JlZjIkYWxpZ24gPSBfcmVmMi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZjIkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZjIkYWxpZ24sXG4gICAgICBvblNvcnQgPSBfcmVmMi5vblNvcnQsXG4gICAgICBpc1NvcnRlZCA9IF9yZWYyLmlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZjIuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgc2NvcGUgPSBfcmVmMi5zY29wZSxcbiAgICAgIF9yZWYyJG1vYmlsZU9wdGlvbnMgPSBfcmVmMi5tb2JpbGVPcHRpb25zLFxuICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYyJG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHtcbiAgICBzaG93OiB0cnVlXG4gIH0gOiBfcmVmMiRtb2JpbGVPcHRpb25zLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZWFkT25seSA9IF9yZWYyLnJlYWRPbmx5LFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmMi5kZXNjcmlwdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yRGVza3RvcCc6IG1vYmlsZU9wdGlvbnMub25seSxcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yTW9iaWxlJzogIW1vYmlsZU9wdGlvbnMuc2hvd1xuICB9KTtcbiAgdmFyIGNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVFxuICB9KTtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgQ2VsbENvbXBvbmVudCA9IGNoaWxkcmVuID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBjZWxsU2NvcGUgPSBDZWxsQ29tcG9uZW50ID09PSAndGgnID8gc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogJ2NvbCcgOiB1bmRlZmluZWQ7IC8vIGBzY29wZWAgaXMgb25seSB2YWxpZCBvbiBgdGhgIGVsZW1lbnRzXG5cbiAgaWYgKG9uU29ydCB8fCBpc1NvcnRlZCkge1xuICAgIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJCdXR0b24nLCB7XG4gICAgICAnZXVpVGFibGVIZWFkZXJCdXR0b24taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICAgIH0pO1xuICAgIHZhciBhcmlhU29ydFZhbHVlID0gJ25vbmUnO1xuXG4gICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICBhcmlhU29ydFZhbHVlID0gaXNTb3J0QXNjZW5kaW5nID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gICAgfVxuXG4gICAgdmFyIGNlbGxDb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgc2hvd1NvcnRNc2c6IHRydWUsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICAgIHJvbGU6IFwiY29sdW1uaGVhZGVyXCIsXG4gICAgICBcImFyaWEtc29ydFwiOiBhcmlhU29ydFZhbHVlLFxuICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgIHN0eWxlOiBzdHlsZU9ialxuICAgIH0sIHJlc3QpLCBvblNvcnQgJiYgIXJlYWRPbmx5ID8gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgICAgb25DbGljazogb25Tb3J0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyU29ydEJ1dHRvblwiXG4gICAgfSwgY2VsbENvbnRlbnRzKSA6IGNlbGxDb250ZW50cyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChDZWxsQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBjZWxsU2NvcGUsXG4gICAgcm9sZTogXCJjb2x1bW5oZWFkZXJcIixcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NlcyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgc2hvd1NvcnRNc2c6IGZhbHNlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBpc1NvcnRBc2NlbmRpbmdcbiAgfSkpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zXG4gICAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICAgICAqIE9ubHkgc2hvdyBmb3IgbW9iaWxlPyBJZiB0cnVlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGxcbiAgICAgICAgICAgKiBmb3IgZGVza3RvcFxuICAgICAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBzY29wZTogUHJvcFR5cGVzLm9uZU9mKFtcImNvbFwiLCBcInJvd1wiLCBcImNvbGdyb3VwXCIsIFwicm93Z3JvdXBcIl0pLFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgYnV0IHJlbW92ZXMgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgc2NvcGUgPSBfcmVmJHNjb3BlID09PSB2b2lkIDAgPyAnY29sJyA6IF9yZWYkc2NvcGUsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIHNjb3BlOiBQcm9wVHlwZXMub25lT2YoW1wiY29sXCIsIFwicm93XCIsIFwiY29sZ3JvdXBcIiwgXCJyb3dncm91cFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyTW9iaWxlID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJNb2JpbGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlck1vYmlsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUhlYWRlck1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJpdGVtc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIH0gZnJvbSAnLi90YWJsZV9zb3J0X21vYmlsZV9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFibGVTb3J0TW9iaWxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRhYmxlU29ydE1vYmlsZSk7XG5cbiAgZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiAhX3RoaXMuc3RhdGUuaXNQb3BvdmVyT3BlblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRhYmxlU29ydE1vYmlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZScsIGNsYXNzTmFtZSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgb25DbGljazogdGhpcy5vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICAgIGZsdXNoOiBcInJpZ2h0XCIsXG4gICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlU29ydE1vYmlsZS5zb3J0aW5nXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU29ydGluZ1wiXG4gICAgICB9KSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0UG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICBidXR0b246IG1vYmlsZVNvcnRCdXR0b24sXG4gICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuLFxuICAgICAgICBjbG9zZVBvcG92ZXI6IHRoaXMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogYW5jaG9yUG9zaXRpb24gfHwgJ2Rvd25SaWdodCcsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgbWluV2lkdGg6IDIwMFxuICAgICAgICB9LFxuICAgICAgICBpdGVtczogaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlSXRlbSwge1xuICAgICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgIG9uU29ydDogaXRlbS5vblNvcnQsXG4gICAgICAgICAgICBpc1NvcnRlZDogaXRlbS5pc1NvcnRlZCxcbiAgICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogaXRlbS5pc1NvcnRBc2NlbmRpbmdcbiAgICAgICAgICB9LCBpdGVtLm5hbWUpO1xuICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgbW9iaWxlU29ydFBvcG92ZXIpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJsZVNvcnRNb2JpbGU7XG59KENvbXBvbmVudCk7XG5FdWlUYWJsZVNvcnRNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLmFueSxcbiAgICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWQpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcImFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtID0gZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlSXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvblNvcnQgPSBfcmVmLm9uU29ydCxcbiAgICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmLmFyaWFMYWJlbCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc29ydEljb24gPSAnZW1wdHknO1xuXG4gIGlmIChpc1NvcnRlZCkge1xuICAgIHNvcnRJY29uID0gaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nO1xuICB9XG5cbiAgdmFyIGJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGVJdGVtJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICB9KTtcbiAgdmFyIGNvbHVtblRpdGxlID0gYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogY2hpbGRyZW47XG4gIHZhciBzdGF0ZWZ1bEFyaWFMYWJlbCA9IFwiU29ydCBcIi5jb25jYXQoY29sdW1uVGl0bGUsIFwiIFwiKS5jb25jYXQoaXNTb3J0QXNjZW5kaW5nID8gJ2Rlc2NlbmRpbmcnIDogJ2FzY2VuZGluZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMsXG4gICAgaWNvbjogc29ydEljb24sXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzdGF0ZWZ1bEFyaWFMYWJlbFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBrbm93IHdoZW4gYW4gaXRlbSBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGN1cnJlbnQgb3B0aW9uIGlzIHRoZSBzb3J0ZWQgb24gY29sdW1uXG4gICAgICovXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzb3J0ZWQgb25cbiAgICAgKi9cbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc1NlbGVjdGFibGVcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlZFJvd1wiLCBcImlzRXhwYW5kYWJsZVwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3cgPSBmdW5jdGlvbiBFdWlUYWJsZVJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGFibGUgPSBfcmVmLmlzU2VsZWN0YWJsZSxcbiAgICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgICBpc0V4cGFuZGVkUm93ID0gX3JlZi5pc0V4cGFuZGVkUm93LFxuICAgICAgaXNFeHBhbmRhYmxlID0gX3JlZi5pc0V4cGFuZGFibGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3cnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RhYmxlJzogaXNTZWxlY3RhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFibGVSb3ctaGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3cnOiBpc0V4cGFuZGVkUm93LFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGFibGUnOiBpc0V4cGFuZGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzQ2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcblxuICBpZiAoIW9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cblxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gUHJldmVudCBhIHNjcm9sbCBmcm9tIG9jY3VycmluZyBpZiB0aGUgdXNlciBoYXMgaGl0IHNwYWNlLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGV2ZW50KSB7XG4gICAgLy8gU3VwcG9ydCBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGJ5IGVtdWxhdGluZyBtb3VzZSBjbGljayBvbiBFTlRFUiBvciBTUEFDRSBrZXlwcmVzcy5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdGFiSW5kZXg6IDBcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gb2YgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW5nXG4gICAgICogcm93cyAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgcm93IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgZGVkaWNhdGVkIGNvbHVtbiBmb3IgaWNvbi1vbmx5IGFjdGlvbnNcbiAgICAgKiAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBoYXZlIGFuIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgYmUgdGhlIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGVkUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJzZXRTY29wZVJvd1wiLCBcInNob3dPbkhvdmVyXCIsIFwidGV4dE9ubHlcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlclwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJ2YWxpZ25cIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIENFTlRFUl9BTElHTk1FTlQsIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGwoX3JlZikge1xuICB2YXIgX21vYmlsZU9wdGlvbnMkc2hvd09uLCBfbW9iaWxlT3B0aW9ucyR0cnVuY2E7XG5cbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgICAgc2V0U2NvcGVSb3cgPSBfcmVmLnNldFNjb3BlUm93LFxuICAgICAgc2hvd09uSG92ZXIgPSBfcmVmLnNob3dPbkhvdmVyLFxuICAgICAgX3JlZiR0ZXh0T25seSA9IF9yZWYudGV4dE9ubHksXG4gICAgICB0ZXh0T25seSA9IF9yZWYkdGV4dE9ubHkgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRleHRPbmx5LFxuICAgICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICAgIGlzRXhwYW5kZXIgPSBfcmVmLmlzRXhwYW5kZXIsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBfcmVmJHZhbGlnbiA9IF9yZWYudmFsaWduLFxuICAgICAgdmFsaWduID0gX3JlZiR2YWxpZ24gPT09IHZvaWQgMCA/ICdtaWRkbGUnIDogX3JlZiR2YWxpZ24sXG4gICAgICBfcmVmJG1vYmlsZU9wdGlvbnMgPSBfcmVmLm1vYmlsZU9wdGlvbnMsXG4gICAgICBtb2JpbGVPcHRpb25zID0gX3JlZiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB7XG4gICAgc2hvdzogdHJ1ZVxuICB9IDogX3JlZiRtb2JpbGVPcHRpb25zLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjZWxsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbCcsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taXNFeHBhbmRlcic6IGlzRXhwYW5kZXIsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnOiBtb2JpbGVPcHRpb25zLm9ubHksXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0tZW5sYXJnZUZvck1vYmlsZSc6IG1vYmlsZU9wdGlvbnMuZW5sYXJnZVxuICB9LCBcImV1aVRhYmxlUm93Q2VsbC0tXCIuY29uY2F0KHZhbGlnbiksIHZhbGlnbikpO1xuICB2YXIgY29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1zaG93T25Ib3Zlcic6IHNob3dPbkhvdmVyLFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS10cnVuY2F0ZVRleHQnOiB0cnVuY2F0ZVRleHQsXG4gICAgLy8gV2UncmUgZG9pbmcgdGhpcyByaWdhbWFyb2xlIGluc3RlYWQgb2YgY3JlYXRpbmcgYGV1aVRhYmxlQ2VsbENvbnRlbnQtLXRleHRPbmx5YCBmb3IgQldDXG4gICAgLy8gcHVycG9zZXMgZm9yIHRoZSB0aW1lLWJlaW5nLlxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1vdmVyZmxvd2luZ0NvbnRlbnQnOiB0ZXh0T25seSAhPT0gdHJ1ZVxuICB9KTtcbiAgdmFyIG1vYmlsZUNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gUklHSFRfQUxJR05NRU5UIHx8IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCB8fCBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tc2hvd09uSG92ZXInOiAoX21vYmlsZU9wdGlvbnMkc2hvd09uID0gbW9iaWxlT3B0aW9ucy5zaG93T25Ib3ZlcikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkc2hvd09uICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRzaG93T24gOiBzaG93T25Ib3ZlcixcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tdHJ1bmNhdGVUZXh0JzogKF9tb2JpbGVPcHRpb25zJHRydW5jYSA9IG1vYmlsZU9wdGlvbnMudHJ1bmNhdGVUZXh0KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRydW5jYSA6IHRydW5jYXRlVGV4dCxcbiAgICAvLyBXZSdyZSBkb2luZyB0aGlzIHJpZ2FtYXJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBgZXVpVGFibGVDZWxsQ29udGVudC0tdGV4dE9ubHlgIGZvciBCV0NcbiAgICAvLyBwdXJwb3NlcyBmb3IgdGhlIHRpbWUtYmVpbmcuXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLW92ZXJmbG93aW5nQ29udGVudCc6IG1vYmlsZU9wdGlvbnMudGV4dE9ubHkgIT09IHRydWUgfHwgdGV4dE9ubHkgIT09IHRydWVcbiAgfSk7XG4gIHZhciBjaGlsZENsYXNzZXMgPSBjbGFzc05hbWVzKHtcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X190ZXh0OiB0ZXh0T25seSA9PT0gdHJ1ZSxcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X19ob3Zlckl0ZW06IHNob3dPbkhvdmVyXG4gIH0pO1xuICB2YXIgd2lkdGhWYWx1ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMoWyd4cycsICdzJ10pICYmIG1vYmlsZU9wdGlvbnMud2lkdGggPyBtb2JpbGVPcHRpb25zLndpZHRoIDogd2lkdGg7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoVmFsdWUpO1xuXG4gIGZ1bmN0aW9uIG1vZGlmeUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgdmFyIG1vZGlmaWVkQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIGlmICh0ZXh0T25seSA9PT0gdHJ1ZSkge1xuICAgICAgbW9kaWZpZWRDaGlsZHJlbiA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjaGlsZENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2UgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICBtb2RpZmllZENoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY2hpbGQucHJvcHMuY2xhc3NOYW1lLCBjaGlsZENsYXNzZXMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkQ2hpbGRyZW47XG4gIH1cblxuICB2YXIgY2hpbGRyZW5Ob2RlID0gbW9kaWZ5Q2hpbGRyZW4oY2hpbGRyZW4pO1xuICB2YXIgaGlkZUZvck1vYmlsZUNsYXNzZXMgPSAnZXVpVGFibGVSb3dDZWxsLS1oaWRlRm9yTW9iaWxlJztcbiAgdmFyIHNob3dGb3JNb2JpbGVDbGFzc2VzID0gJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnO1xuICB2YXIgRWxlbWVudCA9IHNldFNjb3BlUm93ID8gJ3RoJyA6ICd0ZCc7XG5cbiAgdmFyIHNoYXJlZFByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgc2NvcGU6IHNldFNjb3BlUm93ID8gJ3JvdycgOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpO1xuXG4gIGlmIChtb2JpbGVPcHRpb25zLnNob3cgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjZWxsQ2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBzaGFyZWRQcm9wcyksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXNcbiAgICB9LCBzaGFyZWRQcm9wcyksIG1vYmlsZU9wdGlvbnMuaGVhZGVyICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyIFwiLmNvbmNhdChzaG93Rm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBtb2JpbGVPcHRpb25zLmhlYWRlciksIG1vYmlsZU9wdGlvbnMucmVuZGVyID8gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG1vYmlsZUNvbnRlbnRDbGFzc2VzLCBcIiBcIikuY29uY2F0KHNob3dGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIG1vZGlmeUNoaWxkcmVuKG1vYmlsZU9wdGlvbnMucmVuZGVyKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjb250ZW50Q2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBjaGlsZHJlbk5vZGUpKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9XG59O1xuRXVpVGFibGVSb3dDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFZlcnRpY2FsIGFsaWdubWVudCBvZiB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICB2YWxpZ246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNlbGwgc2hvdWxkIGJlIG1hcmtlZCBhcyB0aGUgaGVhZGluZyBmb3IgaXRzIHJvd1xuICAgICAqL1xuICBzZXRTY29wZVJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIHRvIGljb24tb25seSBhY3Rpb25zIChjdXJyZW50bHlcbiAgICAgKiBhZmZlY3RzIG1vYmlsZSBvbmx5KVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBkZWRpY2F0ZWQgYXMgdGhlIGV4cGFuZGFibGUgcm93IHRvZ2dsZVxuICAgICAqL1xuICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zO1xuICAgICAqIFNlZSAjRXVpVGFibGVSb3dDZWxsTW9iaWxlT3B0aW9uc1NoYXBlXG4gICAgICovXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjZWxsIGF0IGFsbCBmb3IgbW9iaWxlXG4gICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgZGVza3RvcFxuICAgICAgICovXG4gICAgb25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIvY2hpbGRyZW4gaWYgZGlmZmVyZW50IGZyb20gZGVza3RvcFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGNvbHVtbidzIGhlYWRlciBmb3IgdXNlIGluIG1vYmlsZSB2aWV3IChhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duXG4gICAgICAgKiB3aGVuIHVzaW5nIGBFdWlCYXNpY1RhYmxlYCkuXG4gICAgICAgKiBPciBwYXNzIGBmYWxzZWAgdG8gbm90IHNob3cgYSBoZWFkZXIgYXQgYWxsLlxuICAgICAgICovXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIEluY3JlYXNlIHRleHQgc2l6ZSBjb21wYXJlZCB0byByZXN0IG9mIGNlbGxzXG4gICAgICAgKi9cbiAgICBlbmxhcmdlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgdmFsdWUgdG8gdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIG1vYmlsZSB2aWV3ICh0eXBpY2FsbHkgNTAlKVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIF9TaG91bGQgb25seSBiZSB1c2VkIGZvciBhY3Rpb24gY2VsbHNfXG4gICAgICAgKi9cbiAgICBzaG93T25Ib3ZlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgICAqIElFLiAgVG8gY29tYmF0IHRoaXMgcHJvYmxlbSBvbiBGRiwgd3JhcCBjb250ZW50cyB3aXRoIHRoZSBjc3MgdXRpbGl0eVxuICAgICAgICogYC5ldWktdGV4dEJyZWFrV29yZGAuXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcblxuICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgLyoqXG4gICAgICogX1Nob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGFjdGlvbiBjZWxsc19cbiAgICAgKi9cbiAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgKiBJRS4gIFRvIGNvbWJhdCB0aGlzIHByb2JsZW0gb24gRkYsIHdyYXAgY29udGVudHMgd2l0aCB0aGUgY3NzIHV0aWxpdHlcbiAgICAgKiBgLmV1aS10ZXh0QnJlYWtXb3JkYC5cbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAqL1xuICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sLFxuICB3aWR0aDogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxvYWRpbmdcIiwgXCJpdGVtc1wiLCBcIml0ZW1JZFwiLCBcImNvbHVtbnNcIiwgXCJwYWdpbmF0aW9uXCIsIFwic29ydGluZ1wiLCBcInNlbGVjdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwiZXJyb3JcIiwgXCJub0l0ZW1zTWVzc2FnZVwiLCBcImNvbXByZXNzZWRcIiwgXCJpdGVtSWRUb0V4cGFuZGVkUm93TWFwXCIsIFwicmVzcG9uc2l2ZVwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImlzRXhwYW5kYWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJyb3dQcm9wc1wiLCBcImNlbGxQcm9wc1wiLCBcInRhYmxlQ2FwdGlvblwiLCBcInJvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJhbGlnblwiLCBcInJlbmRlclwiLCBcImRhdGFUeXBlXCIsIFwiaXNFeHBhbmRlclwiLCBcInRleHRPbmx5XCIsIFwibmFtZVwiLCBcImZpZWxkXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJzb3J0YWJsZVwiLCBcImZvb3RlclwiLCBcIm1vYmlsZU9wdGlvbnNcIl07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb3JtYXRBdXRvLCBmb3JtYXRCb29sZWFuLCBmb3JtYXREYXRlLCBmb3JtYXROdW1iZXIsIGZvcm1hdFRleHQsIExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdHMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpQ2hlY2tib3ggfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IEV1aVRhYmxlLCBFdWlUYWJsZUJvZHksIEV1aVRhYmxlRm9vdGVyLCBFdWlUYWJsZUZvb3RlckNlbGwsIEV1aVRhYmxlSGVhZGVyLCBFdWlUYWJsZUhlYWRlckNlbGwsIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCBFdWlUYWJsZUhlYWRlck1vYmlsZSwgRXVpVGFibGVSb3csIEV1aVRhYmxlUm93Q2VsbCwgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIEV1aVRhYmxlU29ydE1vYmlsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IENvbGxhcHNlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IEV4cGFuZGVkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQmFyIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2Jhcic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlEZWxheVJlbmRlciB9IGZyb20gJy4uL2RlbGF5X3JlbmRlcic7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGF0YVR5cGVzUHJvZmlsZXMgPSB7XG4gIGF1dG86IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHN0cmluZzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgYWxpZ246IFJJR0hUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xudmFyIERBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhkYXRhVHlwZXNQcm9maWxlcyk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkge1xuICBpZiAoaXRlbUlkKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaXRlbUlkKSkge1xuICAgICAgcmV0dXJuIGl0ZW1JZChpdGVtKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgbmV2ZXIgbWluZCBhYm91dCB0aGUgaW5kZXggc2lnbmF0dXJlXG5cblxuICAgIHJldHVybiBpdGVtW2l0ZW1JZF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHMpIHtcbiAgaWYgKHJvd1Byb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24ocm93UHJvcHMpKSB7XG4gICAgICByZXR1cm4gcm93UHJvcHMoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1Byb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHMpIHtcbiAgaWYgKGNlbGxQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNlbGxQcm9wcykpIHtcbiAgICAgIHJldHVybiBjZWxsUHJvcHMoaXRlbSwgY29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFByb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCBfcmVmKSB7XG4gIHZhciBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgICBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uO1xuICB2YXIgX3JlZjIgPSBjb2x1bW4sXG4gICAgICBmb290ZXIgPSBfcmVmMi5mb290ZXI7XG5cbiAgaWYgKGZvb3Rlcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvb3RlcikpIHtcbiAgICAgIHJldHVybiBmb290ZXIoe1xuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmb290ZXI7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNQYWdpbmF0aW9uKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ3BhZ2luYXRpb24nKSAmJiAhIXgucGFnaW5hdGlvbjtcbn1cblxuZXhwb3J0IHZhciBFdWlCYXNpY1RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlCYXNpY1RhYmxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUJhc2ljVGFibGUpO1xuXG4gIGZ1bmN0aW9uIEV1aUJhc2ljVGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQmFzaWNUYWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhbnVwc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGJvZHlcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0VGJvZHlcIiwgZnVuY3Rpb24gKHRib2R5KSB7XG4gICAgICAvLyByZW1vdmUgbGlzdGVuZXJzIGZyb20gYW4gZXhpc3RpbmcgZWxlbWVudFxuICAgICAgX3RoaXMucmVtb3ZlTG9hZGluZ0xpc3RlbmVycygpOyAvLyB1cGRhdGUgdGhlIHJlZlxuXG5cbiAgICAgIF90aGlzLnRib2R5ID0gdGJvZHk7IC8vIGlmIGxvYWRpbmcsIGFkZCBsaXN0ZW5lcnNcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmxvYWRpbmcgPT09IHRydWUgJiYgdGJvZHkpIHtcbiAgICAgICAgX3RoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0Ym9keSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkTG9hZGluZ0xpc3RlbmVyc1wiLCBmdW5jdGlvbiAodGJvZHkpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJywgJ2NsaWNrJywgJ2RibGNsaWNrJywgJ2tleWRvd24nLCAna2V5dXAnLCAna2V5cHJlc3MnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0Ym9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgX3RoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUxvYWRpbmdMaXN0ZW5lcnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYW51cHMuZm9yRWFjaChmdW5jdGlvbiAoY2xlYW51cCkge1xuICAgICAgICByZXR1cm4gY2xlYW51cCgpO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmNsZWFudXBzLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGFibGVJZFwiLCBodG1sSWRHZW5lcmF0b3IoJ19fdGFibGUnKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWxlY3RBbGxJZEdlbmVyYXRvclwiLCBodG1sSWRHZW5lcmF0b3IoJ19zZWxlY3Rpb25fY29sdW1uLWNoZWNrYm94JykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlclNlbGVjdEFsbFwiLCBmdW5jdGlvbiAoaXNNb2JpbGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3Rpb24uc2VsZWN0YWJsZSB8fCBzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoZWNrZWQgPSBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPT09IDA7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihzZWxlY3RhYmxlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5zZWxlY3RBbGxSb3dzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0IGFsbCByb3dzXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChzZWxlY3RBbGxSb3dzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IF90aGlzLnNlbGVjdEFsbElkR2VuZXJhdG9yKGlzTW9iaWxlID8gJ21vYmlsZScgOiAnZGVza3RvcCcpLFxuICAgICAgICAgIHR5cGU6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2luTGlzdCcsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlIC8vIE9ubHkgYWRkIGRhdGEtdGVzdC1zdWJqIHRvIG9uZSBvZiB0aGUgY2hlY2tib3hlc1xuICAgICAgICAgICxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2NoZWNrYm94U2VsZWN0QWxsJyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZWN0QWxsUm93cyxcbiAgICAgICAgICBsYWJlbDogaXNNb2JpbGUgPyBzZWxlY3RBbGxSb3dzIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uXCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmMyA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWYzLnNvcnRhYmxlLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjMuZmllbGQsXG4gICAgICAgICAgbmFtZSA9IF9yZWYzLm5hbWU7XG5cbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGluZy5zb3J0IHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3J0aW5nLnNvcnQuZmllbGQgPT09IGZpZWxkIHx8IHNvcnRpbmcuc29ydC5maWVsZCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gc29ydGluZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNvbHZlQ29sdW1uT25Tb3J0XCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNCA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY0LnNvcnRhYmxlLFxuICAgICAgICAgIG5hbWUgPSBfcmVmNC5uYW1lO1xuXG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXNpY1RhYmxlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgc29ydGFibGUgb24gY29sdW1uIFtcIi5jb25jYXQobmFtZSwgXCJdIGJ1dFxcbiAgICAgICAgICBbb25DaGFuZ2VdIGlzIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRoZSBzb3J0IHJlcXVlc3RzXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgLy8gdXNlZCBmb3IgY2hlY2tpbmcgaWYgIGluaXRpYWwgc2VsZWN0aW9uIGlzIHJlbmRlcmVkXG4gICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUJhc2ljVGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMubG9hZGluZyAmJiB0aGlzLnRib2R5KSB0aGlzLmFkZExvYWRpbmdMaXN0ZW5lcnModGhpcy50Ym9keSk7XG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubG9hZGluZyAhPT0gdGhpcy5wcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRpbmcgJiYgdGhpcy50Ym9keSkge1xuICAgICAgICAgIHRoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0aGlzLnRib2R5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uICYmIHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCAmJiAhdGhpcy5zdGF0ZS5pbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQgJiYgdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJidWlsZENyaXRlcmlhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkQ3JpdGVyaWEocHJvcHMpIHtcbiAgICAgIHZhciBjcml0ZXJpYSA9IHt9O1xuXG4gICAgICBpZiAoaGFzUGFnaW5hdGlvbihwcm9wcykpIHtcbiAgICAgICAgY3JpdGVyaWEucGFnZSA9IHtcbiAgICAgICAgICBpbmRleDogcHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgICAgICAgc2l6ZTogcHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc29ydGluZykge1xuICAgICAgICBjcml0ZXJpYS5zb3J0ID0gcHJvcHMuc29ydGluZy5zb3J0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYW5nZVNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VTaXplQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcblxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgLy8gd2hlbiBwYWdlIHNpemUgY2hhbmdlcywgd2UgdGFrZSB0aGUgdXNlciBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VDaGFuZ2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEucGFnZSksIHt9LCB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ29sdW1uU29ydENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24uQVNDO1xuXG4gICAgICBpZiAoY3VycmVudENyaXRlcmlhICYmIGN1cnJlbnRDcml0ZXJpYS5zb3J0ICYmIChjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLmZpZWxkIHx8IGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5yZXZlcnNlKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmRpcmVjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBwYWdlIGlmIHRoZSBjcml0ZXJpYSBoYXMgb25lXG4gICAgICAgIHBhZ2U6ICFjdXJyZW50Q3JpdGVyaWEucGFnZSA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBzaXplOiBjdXJyZW50Q3JpdGVyaWEucGFnZS5zaXplXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkIHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnaW5hdGlvbidzIGV4aXN0ZW5jZSBhbmQgY3JpdGVyaWEsIHRoZSBjb2RlIGxvZ2ljIGVuc3VyZXMgdGhpcyBpcyBjb3JyZWN0bHkgbWFpbnRhaW5lZFxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzMi5sb2FkaW5nLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzMi5pdGVtSWQsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzMi5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczIucGFnaW5hdGlvbixcbiAgICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHMyLnNvcnRpbmcsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNlbGVjdGlvbixcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZSxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMi5lcnJvcixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzMi5ub0l0ZW1zTWVzc2FnZSxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICAgIHJlc3BvbnNpdmUgPSBfdGhpcyRwcm9wczIucmVzcG9uc2l2ZSxcbiAgICAgICAgICBpc1NlbGVjdGFibGUgPSBfdGhpcyRwcm9wczIuaXNTZWxlY3RhYmxlLFxuICAgICAgICAgIGlzRXhwYW5kYWJsZSA9IF90aGlzJHByb3BzMi5pc0V4cGFuZGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzMi5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd1Byb3BzID0gX3RoaXMkcHJvcHMyLnJvd1Byb3BzLFxuICAgICAgICAgIGNlbGxQcm9wcyA9IF90aGlzJHByb3BzMi5jZWxsUHJvcHMsXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMyLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczIucm93SGVhZGVyLFxuICAgICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMyLnRhYmxlTGF5b3V0LFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhc2ljVGFibGUnLCB7XG4gICAgICAgICdldWlCYXNpY1RhYmxlLWxvYWRpbmcnOiBsb2FkaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICAgICAgdmFyIHBhZ2luYXRpb25CYXIgPSB0aGlzLnJlbmRlclBhZ2luYXRpb25CYXIoKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgdGFibGUsIHBhZ2luYXRpb25CYXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgICByZXNwb25zaXZlID0gX3RoaXMkcHJvcHMzLnJlc3BvbnNpdmUsXG4gICAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczMudGFibGVMYXlvdXQ7XG4gICAgICB2YXIgbW9iaWxlSGVhZGVyID0gcmVzcG9uc2l2ZSA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJNb2JpbGUsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICAgICAgYWxpZ25JdGVtczogXCJiYXNlbGluZVwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbCh0cnVlKSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgIH0sIHRoaXMucmVuZGVyVGFibGVNb2JpbGVTb3J0KCkpKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgY2FwdGlvbiA9IHRoaXMucmVuZGVyVGFibGVDYXB0aW9uKCk7XG4gICAgICB2YXIgaGVhZCA9IHRoaXMucmVuZGVyVGFibGVIZWFkKCk7XG4gICAgICB2YXIgYm9keSA9IHRoaXMucmVuZGVyVGFibGVCb2R5KCk7XG4gICAgICB2YXIgZm9vdGVyID0gdGhpcy5yZW5kZXJUYWJsZUZvb3RlcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgbW9iaWxlSGVhZGVyLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlLCB7XG4gICAgICAgIGlkOiB0aGlzLnRhYmxlSWQsXG4gICAgICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dCxcbiAgICAgICAgcmVzcG9uc2l2ZTogcmVzcG9uc2l2ZSxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICAgICAgfSwgY2FwdGlvbiwgaGVhZCwgYm9keSwgZm9vdGVyKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlTW9iaWxlU29ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNC5jb2x1bW5zLFxuICAgICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczQuc29ydGluZztcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoIXNvcnRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX2NvbHVtbiwgX2NvbHVtbiRtb2JpbGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgc29ydGluZy5zb3J0ICYmICEhc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29sdW1uLnNvcnRhYmxlIHx8ICgoX2NvbHVtbiA9IGNvbHVtbikgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jb2x1bW4kbW9iaWxlT3B0aW9ucyA9IF9jb2x1bW4ubW9iaWxlT3B0aW9ucykgPT09IG51bGwgfHwgX2NvbHVtbiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJG1vYmlsZU9wdGlvbnMuc2hvdykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczIucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfc19cIi5jb25jYXQoY29sdW1uLmZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBvblNvcnQ6IF90aGlzMi5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbiksXG4gICAgICAgICAgaXNTb3J0ZWQ6ICEhc29ydERpcmVjdGlvbixcbiAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXRlbXMubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGUsIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9KSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQ2FwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUNhcHRpb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNS5pdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM1LnBhZ2luYXRpb24sXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHM1LnRhYmxlQ2FwdGlvbjtcbiAgICAgIHZhciBpdGVtQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA6IGl0ZW1Db3VudDtcbiAgICAgIHZhciBwYWdlID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSA6IDE7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbiAhPT0gbnVsbCAmJiBwYWdpbmF0aW9uICE9PSB2b2lkIDAgJiYgcGFnaW5hdGlvbi5wYWdlU2l6ZSA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gcGFnaW5hdGlvbi5wYWdlU2l6ZSkgOiAxO1xuICAgICAgdmFyIGNhcHRpb25FbGVtZW50O1xuXG4gICAgICBpZiAodGFibGVDYXB0aW9uKSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVDYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3RhYmxlQ2FwdGlvbn07IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gdGFibGVDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGlmIChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3Mgb3V0IG9mIHt0b3RhbEl0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50OiB0b3RhbEl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlU2ltcGxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRob3V0UGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2FwdGlvblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNhcHRpb25cIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlEZWxheVJlbmRlciwgbnVsbCwgY2FwdGlvbkVsZW1lbnQpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlSGVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUhlYWQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNi5jb2x1bW5zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zZWxlY3Rpb247XG4gICAgICB2YXIgaGVhZGVycyA9IFtdO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2hcIlxuICAgICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbChmYWxzZSkpKTtcbiAgICAgIH1cblxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfcmVmNSA9IGNvbHVtbixcbiAgICAgICAgICAgIGZpZWxkID0gX3JlZjUuZmllbGQsXG4gICAgICAgICAgICB3aWR0aCA9IF9yZWY1LndpZHRoLFxuICAgICAgICAgICAgbmFtZSA9IF9yZWY1Lm5hbWUsXG4gICAgICAgICAgICBhbGlnbiA9IF9yZWY1LmFsaWduLFxuICAgICAgICAgICAgZGF0YVR5cGUgPSBfcmVmNS5kYXRhVHlwZSxcbiAgICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjUuc29ydGFibGUsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjUubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICAgIHJlYWRPbmx5ID0gX3JlZjUucmVhZE9ubHksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY1LmRlc2NyaXB0aW9uO1xuXG4gICAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IF90aGlzMy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTsgLy8gYWN0aW9ucyBjb2x1bW5cblxuXG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcIl9hY3Rpb25zX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zXG4gICAgICAgICAgfSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBjb21wdXRlZCBjb2x1bW5cblxuXG4gICAgICAgIGlmICghY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIF9zb3J0aW5nID0ge307IC8vIGNvbXB1dGVkIGNvbHVtbnMgYXJlIG9ubHkgc29ydGFibGUgaWYgdGhlaXIgYHNvcnRhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcgJiYgdHlwZW9mIHNvcnRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuXG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRlZCA9ICEhc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgX3NvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBrZXk6IFwiX2NvbXB1dGVkX2NvbHVtbl9oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gbmFtZSA6ICcnLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICAgIH0sIF9zb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBmaWVsZCBkYXRhIGNvbHVtblxuXG5cbiAgICAgICAgdmFyIHNvcnRpbmcgPSB7fTtcblxuICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcuc29ydCAmJiAhIV90aGlzMy5wcm9wcy5zb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcmVmNiA9IGNvbHVtbixcbiAgICAgICAgICAgICAgX3NvcnRhYmxlID0gX3JlZjYuc29ydGFibGU7XG5cbiAgICAgICAgICBpZiAoX3NvcnRhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRlZCA9ICEhX3NvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IF9zb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhfc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBcIl9kYXRhX2hfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICB9LCBzb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlciwgbnVsbCwgaGVhZGVycyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlRm9vdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlRm9vdGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczcuaXRlbXMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNy5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczcucGFnaW5hdGlvbixcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2VsZWN0aW9uO1xuICAgICAgdmFyIGZvb3RlcnMgPSBbXTtcbiAgICAgIHZhciBoYXNEZWZpbmVkRm9vdGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBzZWxlY3Rpb24gY29sdW1uXG4gICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9mXCJcbiAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBmb290ZXIgPSBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCB7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfcmVmNyA9IGNvbHVtbixcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmNy5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgZmllbGQgPSBfcmVmNy5maWVsZCxcbiAgICAgICAgICAgIGFsaWduID0gX3JlZjcuYWxpZ247XG5cbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhjbHVkZSBjb2x1bW5zIHRoYXQgb25seSBleGlzdCBmb3IgbW9iaWxlIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCBmb290ZXIpKTtcbiAgICAgICAgICBoYXNEZWZpbmVkRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb290ZXIgaXMgdW5kZWZpbmVkLCBzbyBjcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBwcmVzZXJ2ZSBsYXlvdXRcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfZW1wdHlfXCIuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9vdGVycy5sZW5ndGggJiYgaGFzRGVmaW5lZEZvb3RlciA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXIsIG51bGwsIGZvb3RlcnMpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQm9keSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5lcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvckJvZHkodGhpcy5wcm9wcy5lcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRW1wdHlCb2R5KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByb3dzID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIHBhZ2luYXRpb24gdGhlIGl0ZW0ncyBpbmRleCBtdXN0IGJlIGFkanVzdGVkIHRvIHRoZSB3aGVyZSBpdCBpcyBpbiB0aGUgd2hvbGUgZGF0YXNldFxuICAgICAgICB2YXIgdGFibGVJdGVtSW5kZXggPSBoYXNQYWdpbmF0aW9uKF90aGlzNC5wcm9wcykgJiYgX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPiAwID8gX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4ICogX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyBpbmRleCA6IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM0LnJlbmRlckl0ZW1Sb3coaXRlbSwgdGFibGVJdGVtSW5kZXgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIHtcbiAgICAgICAgYm9keVJlZjogdGhpcy5zZXRUYm9keVxuICAgICAgfSwgcm93cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVycm9yQm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFcnJvckJvZHkoZXJyb3IpIHtcbiAgICAgIHZhciBjb2xTcGFuID0gdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCArICh0aGlzLnByb3BzLnNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBcIm1pbnVzSW5DaXJjbGVcIixcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgICAgIH0pLCBcIiBcIiwgZXJyb3IpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVtcHR5Qm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFbXB0eUJvZHkoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM4LmNvbHVtbnMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM4LnNlbGVjdGlvbixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzOC5ub0l0ZW1zTWVzc2FnZTtcbiAgICAgIHZhciBjb2xTcGFuID0gY29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgbm9JdGVtc01lc3NhZ2UpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Sb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVJvdyhpdGVtLCByb3dJbmRleCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczkuY29sdW1ucyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczkuc2VsZWN0aW9uLFxuICAgICAgICAgIGlzU2VsZWN0YWJsZSA9IF90aGlzJHByb3BzOS5pc1NlbGVjdGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzOS5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzOS5yb3dIZWFkZXIsXG4gICAgICAgICAgX3RoaXMkcHJvcHM5JGl0ZW1JZFRvID0gX3RoaXMkcHJvcHM5Lml0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzOSRpdGVtSWRUbyA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczkkaXRlbUlkVG8sXG4gICAgICAgICAgaXNFeHBhbmRhYmxlID0gX3RoaXMkcHJvcHM5LmlzRXhwYW5kYWJsZTtcbiAgICAgIHZhciBjZWxscyA9IFtdO1xuICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gdGhpcy5wcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgaXRlbUlkID0gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPSBudWxsID8gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA6IHJvd0luZGV4O1xuICAgICAgdmFyIHNlbGVjdGVkID0gIXNlbGVjdGlvbiA/IGZhbHNlIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgISF0aGlzLnN0YXRlLnNlbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA9PT0gaXRlbUlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2FsY3VsYXRlZEhhc1NlbGVjdGlvbjtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjZWxscy5wdXNoKHRoaXMucmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCkpO1xuICAgICAgICBjYWxjdWxhdGVkSGFzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbGN1bGF0ZWRIYXNBY3Rpb25zO1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgICBjYWxjdWxhdGVkSGFzQWN0aW9ucyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIGZpZWxkRGF0YUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGZpZWxkRGF0YUNvbHVtbi5maWVsZCA9PT0gcm93SGVhZGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIE9jY3VweSBmdWxsIHdpZHRoIG9mIHRhYmxlLCB0YWtpbmcgY2hlY2tib3ggJiBtb2JpbGUgb25seSBjb2x1bW5zIGludG8gYWNjb3VudC5cblxuICAgICAgdmFyIGV4cGFuZGVkUm93Q29sU3BhbiA9IHNlbGVjdGlvbiA/IGNvbHVtbnMubGVuZ3RoICsgMSA6IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgdmFyIG1vYmlsZU9ubHlDb2xzID0gY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKG51bSwgY29sdW1uKSB7XG4gICAgICAgIHZhciBfbW9iaWxlT3B0aW9ucztcblxuICAgICAgICByZXR1cm4gY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdm9pZCAwICYmIChfbW9iaWxlT3B0aW9ucyA9IGNvbHVtbi5tb2JpbGVPcHRpb25zKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIF9tb2JpbGVPcHRpb25zLm9ubHkgPyBudW0gKyAxIDogbnVtICsgMDsgLy8gQldDIG9ubHlcbiAgICAgIH0sIDApO1xuICAgICAgZXhwYW5kZWRSb3dDb2xTcGFuID0gZXhwYW5kZWRSb3dDb2xTcGFuIC0gbW9iaWxlT25seUNvbHM7IC8vIFdlJ2xsIHVzZSB0aGUgSUQgdG8gYXNzb2NpYXRlIHRoZSBleHBhbmRlZCByb3cgd2l0aCB0aGUgb3JpZ2luYWwuXG5cbiAgICAgIHZhciBoYXNFeHBhbmRlZFJvdyA9IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAuaGFzT3duUHJvcGVydHkoaXRlbUlkKTtcbiAgICAgIHZhciBleHBhbmRlZFJvd0lkID0gaGFzRXhwYW5kZWRSb3cgPyBcInJvd19cIi5jb25jYXQoaXRlbUlkLCBcIl9leHBhbnNpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgZXhwYW5kZWRSb3cgPSBoYXNFeHBhbmRlZFJvdyA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIHtcbiAgICAgICAgaWQ6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGlzRXhwYW5kZWRSb3c6IHRydWUsXG4gICAgICAgIGlzU2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBjb2xTcGFuOiBleHBhbmRlZFJvd0NvbFNwYW4sXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZVxuICAgICAgfSwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFtpdGVtSWRdKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcm93UHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMucm93UHJvcHM7XG4gICAgICB2YXIgcm93UHJvcHMgPSBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wc0NhbGxiYWNrKTtcblxuICAgICAgdmFyIHJvdyA9IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLW93bnNcIjogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNTZWxlY3RhYmxlOiBpc1NlbGVjdGFibGUgPT0gbnVsbCA/IGNhbGN1bGF0ZWRIYXNTZWxlY3Rpb24gOiBpc1NlbGVjdGFibGUsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBoYXNBY3Rpb25zOiBoYXNBY3Rpb25zID09IG51bGwgPyBjYWxjdWxhdGVkSGFzQWN0aW9ucyA6IGhhc0FjdGlvbnMsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogaXNFeHBhbmRhYmxlXG4gICAgICB9LCByb3dQcm9wcyksIGNlbGxzKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIHtcbiAgICAgICAga2V5OiBcInJvd19cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgfSwgcm93LCBleHBhbmRlZFJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICB2YXIga2V5ID0gXCJfc2VsZWN0aW9uX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkKTtcbiAgICAgIHZhciBjaGVja2VkID0gc2VsZWN0ZWQ7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZSAmJiAhc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UgJiYgc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlKCFkaXNhYmxlZCwgaXRlbSk7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczYuc3RhdGUuc2VsZWN0aW9uKSwgW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gX3RoaXM2LnByb3BzLml0ZW1JZDtcblxuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oX3RoaXM2LnN0YXRlLnNlbGVjdGlvbi5yZWR1Y2UoZnVuY3Rpb24gKHNlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9PSBpdGVtSWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwge1xuICAgICAgICBrZXk6IGtleVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUuc2VsZWN0VGhpc1Jvd1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdCB0aGlzIHJvd1wiXG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0VGhpc1Jvdykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChfdGhpczYudGFibGVJZCkuY29uY2F0KGtleSwgXCItY2hlY2tib3hcIiksXG4gICAgICAgICAgdHlwZTogXCJpbkxpc3RcIixcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0Um93LVwiLmNvbmNhdChpdGVtSWQpXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQWN0aW9uc0NlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBhY3Rpb25FbmFibGVkID0gZnVuY3Rpb24gYWN0aW9uRW5hYmxlZChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID09PSAwICYmICghYWN0aW9uLmVuYWJsZWQgfHwgYWN0aW9uLmVuYWJsZWQoaXRlbSkpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGFjdHVhbEFjdGlvbnMgPSBjb2x1bW4uYWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5hdmFpbGFibGUgfHwgYWN0aW9uLmF2YWlsYWJsZShpdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0dWFsQWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGUgYWN0aW9ucyBgaXNQcmltYXJ5YCwgYWRkIHRoZW0gaW5saW5lIGFzIHdlbGwsIGJ1dCBvbmx5IHRoZSBmaXJzdCAyXG4gICAgICAgIHZhciBwcmltYXJ5QWN0aW9ucyA9IGFjdHVhbEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgcmV0dXJuIG8uaXNQcmltYXJ5O1xuICAgICAgICB9KTtcbiAgICAgICAgYWN0dWFsQWN0aW9ucyA9IHByaW1hcnlBY3Rpb25zLnNsaWNlKDAsIDIpOyAvLyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxIGFjdGlvbiwgd2UgZG9uJ3Qgc2hvdyB0aGVtIGFsbCBpbiB0aGUgY2VsbCwgaW5zdGVhZCB3ZVxuICAgICAgICAvLyBwdXQgdGhlbSBhbGwgaW4gYSBwb3BvdmVyIHRvb2wuIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgd2UgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW1cbiAgICAgICAgLy8gb2Ygb25lIHRvb2wgcGVyIHJvdyAoaXQncyBlaXRoZXIgYW5kIG5vcm1hbCBhY3Rpb24sIG9yIGl0J3MgYSBwb3BvdmVyIHRoYXQgc2hvd3MgbXVsdGlwbGUgYWN0aW9ucylcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaGVyZSB3ZSBjcmVhdGUgYSBzaW5nbGUgY3VzdG9tIGFjdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyIHdpdGggYWxsIHRoZSBjb25maWd1cmVkIGFjdGlvbnNcblxuICAgICAgICBhY3R1YWxBY3Rpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdBbGwgYWN0aW9ucycsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29sbGFwc2VkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgICAgICAgYWN0aW9uczogY29sdW1uLmFjdGlvbnMsXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICBhY3Rpb25FbmFibGVkOiBhY3Rpb25FbmFibGVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG9vbHMgPSBfX19FbW90aW9uSlNYKEV4cGFuZGVkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgYWN0aW9uczogYWN0dWFsQWN0aW9ucyxcbiAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGFjdGlvbkVuYWJsZWQ6IGFjdGlvbkVuYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIga2V5ID0gXCJyZWNvcmRfYWN0aW9uc19cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBzaG93T25Ib3ZlcjogdHJ1ZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uczogdHJ1ZVxuICAgICAgfSwgdG9vbHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtRmllbGREYXRhQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgZmllbGQgPSBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgcmVuZGVyID0gY29sdW1uLnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcbiAgICAgIHZhciBrZXkgPSBcIl9kYXRhX2NvbHVtbl9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciB2YWx1ZSA9IGdldChpdGVtLCBmaWVsZCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcih2YWx1ZSwgaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ29tcHV0ZWRDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgcmVuZGVyID0gY29sdW1uLnJlbmRlcjtcbiAgICAgIHZhciBrZXkgPSBcIl9jb21wdXRlZF9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIoaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgZmFsc2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBfcmVmOCA9IGNvbHVtbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY4LmFsaWduLFxuICAgICAgICAgIHJlbmRlciA9IF9yZWY4LnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IF9yZWY4LmRhdGFUeXBlLFxuICAgICAgICAgIGlzRXhwYW5kZXIgPSBfcmVmOC5pc0V4cGFuZGVyLFxuICAgICAgICAgIHRleHRPbmx5ID0gX3JlZjgudGV4dE9ubHksXG4gICAgICAgICAgbmFtZSA9IF9yZWY4Lm5hbWUsXG4gICAgICAgICAgZmllbGQgPSBfcmVmOC5maWVsZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjguc29ydGFibGUsXG4gICAgICAgICAgZm9vdGVyID0gX3JlZjguZm9vdGVyLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmOC5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjgsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCB0aGlzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIGNlbGxQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5jZWxsUHJvcHM7XG4gICAgICB2YXIgY2VsbFByb3BzID0gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgIGlzRXhwYW5kZXI6IGlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5OiB0ZXh0T25seSB8fCAhcmVuZGVyLFxuICAgICAgICBzZXRTY29wZVJvdzogc2V0U2NvcGVSb3csXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW9iaWxlT3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgcmVuZGVyOiBtb2JpbGVPcHRpb25zICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyKGl0ZW0pLFxuICAgICAgICAgIGhlYWRlcjogbW9iaWxlT3B0aW9ucyAmJiBtb2JpbGVPcHRpb25zLmhlYWRlciA9PT0gZmFsc2UgPyBmYWxzZSA6IG5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0sIGNlbGxQcm9wcywgcmVzdCksIGNvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZW5kZXJlckZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuXG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZmlsZS5yZW5kZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEFsaWduRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxpZ25Gb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG5cbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9maWxlLmFsaWduO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQYWdpbmF0aW9uQmFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRpb25CYXIoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMxMC5lcnJvcixcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMxMC5wYWdpbmF0aW9uLFxuICAgICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMTAudGFibGVDYXB0aW9uLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMC5vbkNoYW5nZTtcblxuICAgICAgaWYgKCFlcnJvciAmJiBwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGlmICghb25DaGFuZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQmFzaWMgVGFibGUgaXMgY29uZmlndXJlZCB3aXRoIHBhZ2luYXRpb24gYnV0IFtvbkNoYW5nZV0gaXNcXG4gICAgICAgIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHBhZ2luYXRpb24gY2hhbmdlc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlUGFnaW5hdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiUGFnaW5hdGlvbiBmb3IgdGFibGU6IHt0YWJsZUNhcHRpb259XCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHRhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CYXIsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlOiBfdGhpczgub25QYWdlU2l6ZUNoYW5nZS5iaW5kKF90aGlzOCksXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U6IF90aGlzOC5vblBhZ2VDaGFuZ2UuYmluZChfdGhpczgpLFxuICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF90aGlzOC50YWJsZUlkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAoIW5leHRQcm9wcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gbmV4dCBwcm9wcyBkb2Vzbid0IGhhdmUgYSBzZWxlY3Rpb24sIHJlc2V0IG91ciBzdGF0ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogW11cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1JZCA9IG5leHRQcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gcHJldlN0YXRlLnNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gbmV4dFByb3BzLml0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSA9PT0gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkKTtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoICE9PSBwcmV2U3RhdGUuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBpZiAobmV4dFByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkge1xuICAgICAgICAgIG5leHRQcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyB1c2VkIGZvciBtb3ZpbmcgaW4gJiBvdXQgb2YgYGxvYWRpbmdgIHN0YXRlXG5cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlCYXNpY1RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQmFzaWNUYWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByZXNwb25zaXZlOiB0cnVlLFxuICB0YWJsZUxheW91dDogJ2ZpeGVkJyxcbiAgbm9JdGVtc01lc3NhZ2U6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUubm9JdGVtc01lc3NhZ2VcIixcbiAgICBkZWZhdWx0OiBcIk5vIGl0ZW1zIGZvdW5kXCJcbiAgfSlcbn0pO1xuXG5FdWlCYXNpY1RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG4gIGl0ZW1JZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG4gIGNlbGxQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZpZWxkIG9mIHRoZSBpdGVtIChtYXkgYmUgYSBuZXN0ZWQgZmllbGQpXG4gICAgICAgKi9cbiAgICAvLyB0eXBlIGhhY2sgdXNlZCBmb3IgYmV0dGVyIGF1dG9jb21wbGV0ZSBzdXBwb3J0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOVxuICAgIGZpZWxkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLy8gc3VwcG9ydHMgb3V0ZXIuaW5uZXIga2V5IHBhdGhzXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXIpXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgKHNlcnZlcyBhcyBhIHJlbmRlcmluZyBoaW50IGZvciB0aGUgdGFibGUpXG4gICAgICAgKi9cbiAgICBkYXRhVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4gKGUuZy4gXCIzMCVcIiwgXCIxMDBweFwiLCBldGMuLilcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNvcnQgb24gdGhpcyBjb2x1bW4uIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0XG4gICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgaXRzIGNvbnRlbnQgd2hlbiBpdCBkb2Vzbid0IGZpdFxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZSBhIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyIGJlbmVhdGggdGhpcyBjb2x1bW5cbiAgICAgICAqL1xuICAgIGZvb3RlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUgZm9yIGVhY2ggaXRlbSBhbmQgcmVuZGVycyBpdFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIElmIHByb3ZpZGVkLCBhbGxvd3MgdGhpcyBjb2x1bW4gdG8gYmUgc29ydGVkIG9uLiBNdXN0IHJldHVybiB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0LlxuICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIGl0cyBjb250ZW50IHdoZW4gaXQgZG9lc24ndCBmaXRcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNEZWZhdWx0SXRlbUFjdGlvbiBvciAjQ3VzdG9tSXRlbUFjdGlvblxuICAgICAgICovXG4gICAgYWN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImljb25cIl0pLmlzUmVxdWlyZWRdKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAgICovXG4gICAgICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQXNzb2NpYXRlcyBhbiBpY29uIHdpdGggdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBhY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgbm9kZSBpcyBleHBlY3RlZCB0byBoYXZlIGBvbkZvY3VzYCBhbmQgYG9uQmx1cmAgZnVuY3Rpb25zXG4gICAgICAgICAqL1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICAgIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgdGFibGVDYXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuICByb3dIZWFkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuICBpc1NlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG4gIG5vSXRlbXNNZXNzYWdlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbmV2ZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGNoYW5nZXMgKHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiBlaXRoZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGlzIGNvbmZpZ3VyZWQpLiBTZWUgI0NyaXRlcmlhIG9yICNDcml0ZXJpYVdpdGhQYWdpbmF0aW9uXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNQYWdpbmF0aW9uXG4gICAgICovXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSksIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgY3VycmVudCBwYWdlICh6ZXJvLWJhc2VkKSBpbmRleFxuICAgICAgICovXG4gICAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzaG93biBpbiBhIHNpbmdsZSBwYWdlLlxuICAgICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhlIHBhZ2UgaXMgXCJzbGljZWRcIiBvZlxuICAgICAgICovXG4gICAgdG90YWxJdGVtQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQ29uZmlndXJlcyB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcblxuICAgIC8qKlxuICAgICAgICogSGlkZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93blxuICAgICAgICovXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbFxuICB9KV0pLFxuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgcm93UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICBzZWxlY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgICAqL1xuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGlzIHNlbGVjdGFibGVcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIHJldHJpZXZlIGEgbWVzc2FnZSBmb3IgaXRzIHNlbGVjdGFibGUgc3RhdGUuV2UgZGlzcGxheSB0aGVzZSBtZXNzYWdlcyBhcyBhIHRvb2x0aXAgb24gYW4gdW5zZWxlY3RhYmxlIGNoZWNrYm94XG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5pdGlhbFNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIHNvcnRpbmc6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgdGhlIHByb3BlcnR5L2ZpZWxkIHRvIHNvcnQgb25cbiAgICAgICAqL1xuICAgIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBmaWVsZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYXNjXCIsIFwiZGVzY1wiXSkuaXNSZXF1aXJlZFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHVuc29ydGluZyBvZiB0YWJsZSBjb2x1bW5zLiBTdXBwb3J0ZWQgYnkgRXVpSW5NZW1vcnlUYWJsZS5cbiAgICAgICAqL1xuICAgIGFsbG93TmV1dHJhbFNvcnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzIHRoZSBkZWZhdWx0IHNvcnRpbmcgYWJpbGl0eSBmb3IgZWFjaCBjb2x1bW4uXG4gICAgICAgKi9cbiAgICBlbmFibGVBbGxDb2x1bW5zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byB0YWJsZSBjZWxscyA9PiBBbnkgY2VsbCB1c2luZyByZW5kZXIgZnVuY3Rpb24gd2lsbCBzZXQgdGhpcyB0byBiZSBmYWxzZSwgbGVhZGluZyB0byB1bm5lY2Vzc2FyeSB3b3JkIGJyZWFrcy4gQXBwbHkgdGV4dE9ubHk6IHRydWUgaW4gb3JkZXIgdG8gZW5zdXJlIGl0IGJyZWFrcyBwcm9wZXJseVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gdGFibGUgY2VsbHMgPT4gQW55IGNlbGwgdXNpbmcgcmVuZGVyIGZ1bmN0aW9uIHdpbGwgc2V0IHRoaXMgdG8gYmUgZmFsc2UsIGxlYWRpbmcgdG8gdW5uZWNlc3Nhcnkgd29yZCBicmVha3MuIEFwcGx5IHRleHRPbmx5OiB0cnVlIGluIG9yZGVyIHRvIGVuc3VyZSBpdCBicmVha3MgcHJvcGVybHlcbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG5mdW5jdGlvbiBhY3Rpb25Jc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufVxuXG5leHBvcnQgdmFyIENvbGxhcHNlZEl0ZW1BY3Rpb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDb2xsYXBzZWRJdGVtQWN0aW9ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb2xsYXBzZWRJdGVtQWN0aW9ucyk7XG5cbiAgZnVuY3Rpb24gQ29sbGFwc2VkSXRlbUFjdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbGxhcHNlZEl0ZW1BY3Rpb25zKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlckRpdlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBwb3BvdmVyT3BlbjogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b2dnbGVQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3BvdmVyT3BlbjogIXByZXZTdGF0ZS5wb3BvdmVyT3BlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblBvcG92ZXJCbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHlvdSBtdXN0IGJlIGFza2luZy4uLiBXVEY/IEkga25vdy4uLiBidXQgdGhpcyB0aW1lb3V0IGlzXG4gICAgICAvLyByZXF1aXJlZCB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyB0aGUgb25CbHVyIGV2ZW50cyBhZnRlciB0aGUgaW5pdGlhbFxuICAgICAgLy8gZXZlbnQgY3ljbGUuIFJlZmVyZW5jZTpcbiAgICAgIC8vIGh0dHBzOi8vbWVkaXVtLmNvbS9AamVzc2ViZWFjaC9kZWFsaW5nLXdpdGgtZm9jdXMtYW5kLWJsdXItaW4tYS1jb21wb3NpdGUtd2lkZ2V0LWluLXJlYWN0LTkwZDNjM2I0OWE5YlxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMucG9wb3ZlckRpdi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJiBfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVnaXN0ZXJQb3BvdmVyRGl2XCIsIGZ1bmN0aW9uIChwb3BvdmVyRGl2KSB7XG4gICAgICBpZiAoIV90aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgX3RoaXMucG9wb3ZlckRpdiA9IHBvcG92ZXJEaXY7XG4gICAgICAgIF90aGlzLnBvcG92ZXJEaXYgJiYgX3RoaXMucG9wb3ZlckRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIF90aGlzLm9uUG9wb3ZlckJsdXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tJdGVtXCIsIGZ1bmN0aW9uIChvbkNsaWNrQWN0aW9uKSB7XG4gICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcblxuICAgICAgaWYgKG9uQ2xpY2tBY3Rpb24pIHtcbiAgICAgICAgb25DbGlja0FjdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCBbe1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5vblBvcG92ZXJCbHVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGlvbnMgPSBfdGhpcyRwcm9wcy5hY3Rpb25zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzLml0ZW1JZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHMuaXRlbSxcbiAgICAgICAgICBhY3Rpb25FbmFibGVkID0gX3RoaXMkcHJvcHMuYWN0aW9uRW5hYmxlZCxcbiAgICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHMub25Gb2N1cyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWU7XG4gICAgICB2YXIgaXNPcGVuID0gdGhpcy5zdGF0ZS5wb3BvdmVyT3BlbjtcbiAgICAgIHZhciBhbGxEaXNhYmxlZCA9IHRydWU7XG4gICAgICB2YXIgY29udHJvbHMgPSBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAoY29udHJvbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IFwiYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgICAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuXG4gICAgICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuYWJsZWQgPSBhY3Rpb25FbmFibGVkKGFjdGlvbik7XG4gICAgICAgIGFsbERpc2FibGVkID0gYWxsRGlzYWJsZWQgJiYgIWVuYWJsZWQ7XG5cbiAgICAgICAgaWYgKGFjdGlvbklzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAgICAgdmFyIGN1c3RvbUFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgICB2YXIgYWN0aW9uQ29udHJvbCA9IGN1c3RvbUFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCk7XG4gICAgICAgICAgdmFyIGFjdGlvbkNvbnRyb2xPbkNsaWNrID0gYWN0aW9uQ29udHJvbCAmJiBhY3Rpb25Db250cm9sLnByb3BzICYmIGFjdGlvbkNvbnRyb2wucHJvcHMub25DbGljaztcbiAgICAgICAgICBjb250cm9scy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25DbGlja0l0ZW0oYWN0aW9uQ29udHJvbE9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkNvbnRyb2xPbkNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBhY3Rpb25Db250cm9sKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICAgIG5hbWUgPSBhY3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgaHJlZiA9IGFjdGlvbi5ocmVmLFxuICAgICAgICAgICAgICB0YXJnZXQgPSBhY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgICBkYXRhVGVzdFN1YmogPSBhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ107XG4gICAgICAgICAgdmFyIGJ1dHRvbkljb24gPSBhY3Rpb24uaWNvbjtcbiAgICAgICAgICB2YXIgaWNvbjtcblxuICAgICAgICAgIGlmIChidXR0b25JY29uKSB7XG4gICAgICAgICAgICBpY29uID0gaXNTdHJpbmcoYnV0dG9uSWNvbikgPyBidXR0b25JY29uIDogYnV0dG9uSWNvbihpdGVtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYnV0dG9uQ29udGVudCA9IHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nID8gbmFtZShpdGVtKSA6IG5hbWU7XG4gICAgICAgICAgY29udHJvbHMucHVzaChfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBkaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2xpY2tJdGVtKF9vbkNsaWNrID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfb25DbGljayhpdGVtKTtcbiAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgYnV0dG9uQ29udGVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB2YXIgcG9wb3ZlckJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQWxsIGFjdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKGFsbEFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhbGxBY3Rpb25zLFxuICAgICAgICAgIGljb25UeXBlOiBcImJveGVzSG9yaXpvbnRhbFwiLFxuICAgICAgICAgIGNvbG9yOiBcInRleHRcIixcbiAgICAgICAgICBpc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpczIudG9nZ2xlUG9wb3Zlci5iaW5kKF90aGlzMiksXG4gICAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnNCdXR0b25cIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgd2l0aFRvb2x0aXAgPSAhYWxsRGlzYWJsZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJBbGwgYWN0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAoYWxsQWN0aW9ucykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgICAgY29udGVudDogYWxsQWN0aW9ucyxcbiAgICAgICAgICBkZWxheTogXCJsb25nXCJcbiAgICAgICAgfSwgcG9wb3ZlckJ1dHRvbik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5yZWdpc3RlclBvcG92ZXJEaXYsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpdGVtSWQsIFwiLWFjdGlvbnNcIiksXG4gICAgICAgIGlzT3BlbjogaXNPcGVuLFxuICAgICAgICBidXR0b246IHdpdGhUb29sdGlwIHx8IHBvcG92ZXJCdXR0b24sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogdGhpcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogXCJsZWZ0Q2VudGVyXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBpdGVtczogY29udHJvbHNcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGFwc2VkSXRlbUFjdGlvbnM7XG59KENvbXBvbmVudCk7XG5Db2xsYXBzZWRJdGVtQWN0aW9ucy5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAqL1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaWNvblwiXSkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciBvZiB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAqL1xuICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAqL1xuICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBBc3NvY2lhdGVzIGFuIGljb24gd2l0aCB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgYWN0aW9uLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIG5vZGUgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBgb25Gb2N1c2AgYW5kIGBvbkJsdXJgIGZ1bmN0aW9uc1xuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgKi9cbiAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICovXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgYWN0aW9uRW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERlZmF1bHRJdGVtQWN0aW9uIH0gZnJvbSAnLi9kZWZhdWx0X2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2N1c3RvbV9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFeHBhbmRlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gRXhwYW5kZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgICAgaXRlbUlkID0gX3JlZi5pdGVtSWQsXG4gICAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgICAgYWN0aW9uRW5hYmxlZCA9IF9yZWYuYWN0aW9uRW5hYmxlZCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgbW9yZVRoYW5UaHJlZSA9IGFjdGlvbnMubGVuZ3RoID4gMjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uICh0b29scywgYWN0aW9uLCBpbmRleCkge1xuICAgIHZhciBhdmFpbGFibGUgPSBhY3Rpb24uYXZhaWxhYmxlID8gYWN0aW9uLmF2YWlsYWJsZShpdGVtKSA6IHRydWU7XG5cbiAgICBpZiAoIWF2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHRvb2xzO1xuICAgIH1cblxuICAgIHZhciBlbmFibGVkID0gYWN0aW9uRW5hYmxlZChhY3Rpb24pO1xuICAgIHZhciBrZXkgPSBcIml0ZW1fYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsIHtcbiAgICAgIGV4cGFuZGVkSXRlbUFjdGlvbnNfX2NvbXBsZXRlbHlIaWRlOiBtb3JlVGhhblRocmVlICYmIGluZGV4IDwgMlxuICAgIH0pO1xuXG4gICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAvLyBjdXN0b20gYWN0aW9uIGhhcyBhIHJlbmRlciBmdW5jdGlvblxuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKEN1c3RvbUl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goRGVmYXVsdEl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9vbHM7XG4gIH0sIFtdKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5LCBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBJbiBvcmRlciB0byB1c2UgZ2VuZXJpY3Mgd2l0aCBhbiBhcnJvdyBmdW5jdGlvbiBpbnNpZGUgYSAudHN4IGZpbGUsIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZVxuLy8gdGhpcyBgZXh0ZW5kc2AgaGFjayBhbmQgZGVjbGFyZSB0aGUgdHlwZXMgYXMgc2hvd24sIGluc3RlYWQgb2YgZGVjbGFyaW5nIHRoZSBjb25zdCBhcyBhXG4vLyBGdW5jdGlvbkNvbXBvbmVudFxuZXhwb3J0IHZhciBEZWZhdWx0SXRlbUFjdGlvbiA9IGZ1bmN0aW9uIERlZmF1bHRJdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZCxcbiAgICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcblxuICBpZiAoIWFjdGlvbi5vbkNsaWNrICYmICFhY3Rpb24uaHJlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBNaXNzaW5nIHJlcXVpcmVkICdvbkNsaWNrJyBjYWxsYmFja1xcbiAgICAgIG9yICdocmVmJyBzdHJpbmcuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBjdXN0b20gYWN0aW9uIGNvbnRyb2wsIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhlICdyZW5kZXInIGNhbGxiYWNrXCIpKTtcbiAgfVxuXG4gIHZhciBvbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5vbkNsaWNrKGl0ZW0pO1xuICB9IDogdW5kZWZpbmVkO1xuICB2YXIgYnV0dG9uQ29sb3IgPSBhY3Rpb24uY29sb3I7XG4gIHZhciBjb2xvciA9ICdwcmltYXJ5JztcblxuICBpZiAoYnV0dG9uQ29sb3IpIHtcbiAgICBjb2xvciA9IGlzU3RyaW5nKGJ1dHRvbkNvbG9yKSA/IGJ1dHRvbkNvbG9yIDogYnV0dG9uQ29sb3IoaXRlbSk7XG4gIH1cblxuICB2YXIgYnV0dG9uSWNvbiA9IGFjdGlvbi5pY29uO1xuICB2YXIgaWNvbjtcblxuICBpZiAoYnV0dG9uSWNvbikge1xuICAgIGljb24gPSBpc1N0cmluZyhidXR0b25JY29uKSA/IGJ1dHRvbkljb24gOiBidXR0b25JY29uKGl0ZW0pO1xuICB9XG5cbiAgdmFyIGJ1dHRvbjtcbiAgdmFyIGFjdGlvbkNvbnRlbnQgPSB0eXBlb2YgYWN0aW9uLm5hbWUgPT09ICdmdW5jdGlvbicgPyBhY3Rpb24ubmFtZShpdGVtKSA6IGFjdGlvbi5uYW1lO1xuICB2YXIgYXJpYUxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcblxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdpY29uJykge1xuICAgIGlmICghaWNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIEl0IGlzIGNvbmZpZ3VyZWQgdG8gcmVuZGVyIGFzIGFuIGljb24gYnV0IG5vXFxuICAgICAgaWNvbiBpcyBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIHNldCB0aGUgJ2ljb24nIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cIikpO1xuICAgIH1cblxuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxJZCxcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXVxuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGlkOiBhcmlhTGFiZWxJZFxuICAgIH0sIGFjdGlvbkNvbnRlbnQpKSk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgIGZsdXNoOiBcInJpZ2h0XCJcbiAgICB9LCBhY3Rpb25Db250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbmFibGVkICYmIGFjdGlvbi5kZXNjcmlwdGlvbiA/IF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIGNvbnRlbnQ6IGFjdGlvbi5kZXNjcmlwdGlvbixcbiAgICBkZWxheTogXCJsb25nXCJcbiAgfSwgYnV0dG9uKSA6IGJ1dHRvbjtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDdXN0b21JdGVtQWN0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDdXN0b21JdGVtQWN0aW9uLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEN1c3RvbUl0ZW1BY3Rpb24pO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUl0ZW1BY3Rpb24ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ3VzdG9tSXRlbUFjdGlvbik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtb3VudGVkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMubW91bnRlZCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9OyAvLyB3aGlsZSBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbiBhbnRpLXBhdHRlcm4sIGhlcmUgd2UgcmVxdWlyZVxuICAgIC8vIHRvIGRvIHRoYXQgYXMgdGhlIG9uRm9jdXMvb25CbHVyIGV2ZW50cyBvZiB0aGUgYWN0aW9uIGNvbnRyb2xzXG4gICAgLy8gbWF5IHRyaWdnZXIgd2hpbGUgdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLiBBbiBhbHRlcm5hdGl2ZVxuICAgIC8vIChhdCBsZWFzdCB0aGUgd29ya2Fyb3VuZHMgc3VnZ2VzdGVkIGJ5IHJlYWN0IGlzIHRvIHVucmVnaXN0ZXJcbiAgICAvLyB0aGUgb25Gb2N1cy9vbkJsdXIgbGlzdGVuZXJzIGZyb20gdGhlIGFjdGlvbiBjb250cm9scy4uLiB0aGlzXG4gICAgLy8gdW5mb3J0dW5hdGVseSB3aWxsIGxlYWQgdG8gdW5uZWNlc3NhcmlseSBjb21wbGV4IGNvZGUuLi4gc28gd2UnbGxcbiAgICAvLyBzdGljayB0byB0aGlzIGFwcHJvYWNoIGZvciBub3cpXG5cbiAgICBfdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEN1c3RvbUl0ZW1BY3Rpb24sIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aW9uID0gX3RoaXMkcHJvcHMuYWN0aW9uLFxuICAgICAgICAgIGVuYWJsZWQgPSBfdGhpcyRwcm9wcy5lbmFibGVkLFxuICAgICAgICAgIGl0ZW0gPSBfdGhpcyRwcm9wcy5pdGVtLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZTtcbiAgICAgIHZhciB0b29sID0gYWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgIHZhciBjbG9uZWRUb29sID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh0b29sLCB7XG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1clxuICAgICAgfSk7XG4gICAgICB2YXIgc3R5bGUgPSB0aGlzLmhhc0ZvY3VzKCkgPyB7XG4gICAgICAgIG9wYWNpdHk6IDFcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgICAgIH0sIGNsb25lZFRvb2wpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDdXN0b21JdGVtQWN0aW9uO1xufShDb21wb25lbnQpO1xuQ3VzdG9tSXRlbUFjdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpdGVtOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgaXNDdXN0b21JdGVtQWN0aW9uID0gZnVuY3Rpb24gaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gYWN0aW9uLmhhc093blByb3BlcnR5KCdyZW5kZXInKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVRhYmxlUGFnaW5hdGlvbiB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGRlZmF1bHRzID0ge1xuICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMjUsIDUwXVxufTtcbmV4cG9ydCB2YXIgUGFnaW5hdGlvbkJhciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CYXIoX3JlZikge1xuICB2YXIgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbixcbiAgICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBfcmVmLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICBvblBhZ2VDaGFuZ2UgPSBfcmVmLm9uUGFnZUNoYW5nZSxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIHBhZ2VTaXplT3B0aW9ucyA9IHBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zID8gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMgOiBkZWZhdWx0cy5wYWdlU2l6ZU9wdGlvbnM7XG4gIHZhciBwYWdlQ291bnQgPSBwYWdpbmF0aW9uLnBhZ2VTaXplID8gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgLyBwYWdpbmF0aW9uLnBhZ2VTaXplKSA6IDE7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhZ2VDb3VudCA8IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSkge1xuICAgICAgb25QYWdlQ2hhbmdlID09PSBudWxsIHx8IG9uUGFnZUNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QYWdlQ2hhbmdlKHBhZ2VDb3VudCAtIDEpO1xuICAgIH1cbiAgfSwgW3BhZ2VDb3VudCwgb25QYWdlQ2hhbmdlLCBwYWdpbmF0aW9uXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVQYWdpbmF0aW9uLCB7XG4gICAgYWN0aXZlUGFnZTogcGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBwYWdpbmF0aW9uLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBpdGVtc1BlclBhZ2U6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9uczogcGFnZVNpemVPcHRpb25zLFxuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBvblBhZ2VTaXplQ2hhbmdlLFxuICAgIG9uQ2hhbmdlUGFnZTogb25QYWdlQ2hhbmdlLFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9KSk7XG59OyIsICJleHBvcnQgdmFyIFN1YnNjcmliYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmliYWJsZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNjcmliYWJsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBsaXN0ZW5lciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IGNhbGxiYWNrO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDA7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgcmV0dXJuIFN1YnNjcmliYWJsZTtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vLyBUWVBFU1xuLy8gVVRJTFNcbmV4cG9ydCB2YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lb3V0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5S2V5QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2UoYXJyYXkxLCBhcnJheTIpIHtcbiAgcmV0dXJuIGFycmF5MS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gYXJyYXkyLmluZGV4T2YoeCkgPT09IC0xO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQXQoYXJyYXksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY29weSA9IGFycmF5LnNsaWNlKDApO1xuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xuICByZXR1cm4gY29weTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQsIHN0YWxlVGltZSkge1xuICByZXR1cm4gTWF0aC5tYXgodXBkYXRlZEF0ICsgKHN0YWxlVGltZSB8fCAwKSAtIERhdGUubm93KCksIDApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKCFpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgIHF1ZXJ5S2V5OiBhcmcxLFxuICAgICAgcXVlcnlGbjogYXJnMlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoaXNRdWVyeUtleShhcmcxKSkge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICAgIG11dGF0aW9uS2V5OiBhcmcxLFxuICAgICAgICBtdXRhdGlvbkZuOiBhcmcyXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uRm46IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBbX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KSwgYXJnM10gOiBbYXJnMSB8fCB7fSwgYXJnMl07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkZpbHRlckFyZ3MoYXJnMSwgYXJnMikge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgfSkgOiBhcmcxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpIHtcbiAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSAmJiBpbmFjdGl2ZSA9PT0gdHJ1ZSB8fCBhY3RpdmUgPT0gbnVsbCAmJiBpbmFjdGl2ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICdhbGwnO1xuICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgaW5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdub25lJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhY3RpdmV8aW5hY3RpdmUgY2FuIG9ubHkgYmUgdHJ1ZXxmYWxzZSBvciBmYWxzZXx0cnVlXG4gICAgLy8gc28sIHdoZW4gb25seSBvbmUgdmFsdWUgaXMgcHJvdmlkZWQsIHRoZSBtaXNzaW5nIG9uZSBoYXMgdG8gYmUgdGhlIG5lZ2F0ZWQgdmFsdWVcbiAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmUgIT0gbnVsbCA/IGFjdGl2ZSA6ICFpbmFjdGl2ZTtcbiAgICByZXR1cm4gaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSc7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KSB7XG4gIHZhciBhY3RpdmUgPSBmaWx0ZXJzLmFjdGl2ZSxcbiAgICAgIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIGluYWN0aXZlID0gZmlsdGVycy5pbmFjdGl2ZSxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgcXVlcnlLZXkgPSBmaWx0ZXJzLnF1ZXJ5S2V5LFxuICAgICAgc3RhbGUgPSBmaWx0ZXJzLnN0YWxlO1xuXG4gIGlmIChpc1F1ZXJ5S2V5KHF1ZXJ5S2V5KSkge1xuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCAhPT0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBxdWVyeS5vcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KHF1ZXJ5LnF1ZXJ5S2V5LCBxdWVyeUtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnlTdGF0dXNGaWx0ZXIgPSBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKTtcblxuICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdub25lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChxdWVyeVN0YXR1c0ZpbHRlciAhPT0gJ2FsbCcpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnYWN0aXZlJyAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YWxlID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNTdGFsZSgpICE9PSBzdGFsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc0ZldGNoaW5nKCkgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgdmFyIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgbXV0YXRpb25LZXkgPSBmaWx0ZXJzLm11dGF0aW9uS2V5O1xuXG4gIGlmIChpc1F1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKGhhc2hRdWVyeUtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJyAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIHZhciBoYXNoRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleUhhc2hGbikgfHwgaGFzaFF1ZXJ5S2V5O1xuICByZXR1cm4gaGFzaEZuKHF1ZXJ5S2V5KTtcbn1cbi8qKlxuICogRGVmYXVsdCBxdWVyeSBrZXlzIGhhc2ggZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleShxdWVyeUtleSkge1xuICB2YXIgYXNBcnJheSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkocXVlcnlLZXkpO1xuICByZXR1cm4gc3RhYmxlVmFsdWVIYXNoKGFzQXJyYXkpO1xufVxuLyoqXG4gKiBIYXNoZXMgdGhlIHZhbHVlIGludG8gYSBzdGFibGUgaGFzaC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlVmFsdWVIYXNoKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24gKF8sIHZhbCkge1xuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWw7XG4gIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYga2V5IGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGtleSBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIHJldHVybiBwYXJ0aWFsRGVlcEVxdWFsKGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYSksIGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYikpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGggYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsRGVlcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICFwYXJ0aWFsRGVlcEVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGBhYCBpZiBgYmAgaXMgZGVlcGx5IGVxdWFsLlxuICogSWYgbm90LCBpdCB3aWxsIHJlcGxhY2UgYW55IGRlZXBseSBlcXVhbCBjaGlsZHJlbiBvZiBgYmAgd2l0aCB0aG9zZSBvZiBgYWAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmcgYmV0d2VlbiBKU09OIHZhbHVlcyBmb3IgZXhhbXBsZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYik7XG5cbiAgaWYgKGFycmF5IHx8IGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgIHZhciBhU2l6ZSA9IGFycmF5ID8gYS5sZW5ndGggOiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgdmFyIGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIHZhciBiU2l6ZSA9IGJJdGVtcy5sZW5ndGg7XG4gICAgdmFyIGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgdmFyIGVxdWFsSXRlbXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG5cbiAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSkge1xuICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZSBvYmplY3RzLiBPbmx5IHdvcmtzIHdpdGggb2JqZWN0cyB0aGF0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAoYSAmJiAhYiB8fCBiICYmICFhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0gLy8gQ29waWVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKG8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuXG5cbiAgdmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXG4gIGlmICh0eXBlb2YgY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG5cblxuICB2YXIgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuXG5cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2suXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gc2NoZWR1bGUgc3RhdGUgdXBkYXRlcyBhZnRlciByZW5kZXJpbmcuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlTWljcm90YXNrKGNhbGxiYWNrKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydENvbnRyb2xsZXIoKSB7XG4gIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEZvY3VzTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShGb2N1c01hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIEZvY3VzTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25Gb2N1cykge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25Gb2N1cygpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gdmlzaWJpbGxpdHljaGFuZ2UgYW5kIGZvY3VzXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZvY3VzTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAoZm9jdXNlZCkge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRGb2N1c2VkID0gZnVuY3Rpb24gc2V0Rm9jdXNlZChmb2N1c2VkKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZvY3VzZWQgPSBmdW5jdGlvbiBpc0ZvY3VzZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9IC8vIGRvY3VtZW50IGdsb2JhbCBjYW4gYmUgdW5hdmFpbGFibGUgaW4gcmVhY3QgbmF0aXZlXG5cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ3Zpc2libGUnLCAncHJlcmVuZGVyJ10uaW5jbHVkZXMoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gRm9jdXNNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgT25saW5lTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShPbmxpbmVNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBPbmxpbmVNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbk9ubGluZSkge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25PbmxpbmUoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIG9ubGluZVxuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ubGluZU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKG9ubGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBvbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0T25saW5lKG9ubGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T25saW5lID0gZnVuY3Rpb24gc2V0T25saW5lKG9ubGluZSkge1xuICAgIHRoaXMub25saW5lID0gb25saW5lO1xuXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgdGhpcy5vbk9ubGluZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNPbmxpbmUgPSBmdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubGluZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvci5vbkxpbmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZTtcbiAgfTtcblxuICByZXR1cm4gT25saW5lTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7IiwgImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgZmFpbHVyZUNvdW50KSwgMzAwMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgKHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5jYW5jZWwpID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IHZhciBDYW5jZWxsZWRFcnJvciA9IGZ1bmN0aW9uIENhbmNlbGxlZEVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5yZXZlcnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldmVydDtcbiAgdGhpcy5zaWxlbnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnNpbGVudDtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn0gLy8gQ0xBU1NcblxuZXhwb3J0IHZhciBSZXRyeWVyID0gZnVuY3Rpb24gUmV0cnllcihjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgdmFyIGNhbmNlbEZuO1xuICB2YXIgY29udGludWVGbjtcbiAgdmFyIHByb21pc2VSZXNvbHZlO1xuICB2YXIgcHJvbWlzZVJlamVjdDtcbiAgdGhpcy5hYm9ydCA9IGNvbmZpZy5hYm9ydDtcblxuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbmNlbEZuID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKTtcbiAgfTtcblxuICB0aGlzLmNhbmNlbFJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gdHJ1ZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gIH07XG5cbiAgdGhpcy5mYWlsdXJlQ291bnQgPSAwO1xuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGZhbHNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAob3V0ZXJSZXNvbHZlLCBvdXRlclJlamVjdCkge1xuICAgIHByb21pc2VSZXNvbHZlID0gb3V0ZXJSZXNvbHZlO1xuICAgIHByb21pc2VSZWplY3QgPSBvdXRlclJlamVjdDtcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblN1Y2Nlc3ModmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25FcnJvcih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChjb250aW51ZVJlc29sdmUpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSBjb250aW51ZVJlc29sdmU7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICBjb25maWcub25QYXVzZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uUGF1c2UoKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSB1bmRlZmluZWQ7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ29udGludWUgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkNvbnRpbnVlKCk7XG4gICAgfSk7XG4gIH07IC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG5cblxuICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VPclZhbHVlOyAvLyBFeGVjdXRlIHF1ZXJ5XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSAvLyBDcmVhdGUgY2FsbGJhY2sgdG8gY2FuY2VsIHRoaXMgZmV0Y2hcblxuXG4gICAgY2FuY2VsRm4gPSBmdW5jdGlvbiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKSB7XG4gICAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICAgIF90aGlzLmFib3J0ID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5hYm9ydCgpOyAvLyBDYW5jZWwgdHJhbnNwb3J0IGlmIHN1cHBvcnRlZFxuXG4gICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VPclZhbHVlLmNhbmNlbCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyAvLyBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGxheWVyIHN1cHBvcnQgY2FuY2VsbGF0aW9uXG5cblxuICAgIF90aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHByb21pc2VPclZhbHVlKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdmFyIF9jb25maWckcmV0cnksIF9jb25maWckcmV0cnlEZWxheTtcblxuICAgICAgLy8gU3RvcCBpZiB0aGUgZmV0Y2ggaXMgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuXG5cbiAgICAgIHZhciByZXRyeSA9IChfY29uZmlnJHJldHJ5ID0gY29uZmlnLnJldHJ5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeSA6IDM7XG4gICAgICB2YXIgcmV0cnlEZWxheSA9IChfY29uZmlnJHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnlEZWxheSA6IGRlZmF1bHRSZXRyeURlbGF5O1xuICAgICAgdmFyIGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09ICdmdW5jdGlvbicgPyByZXRyeURlbGF5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIHZhciBzaG91bGRSZXRyeSA9IHJldHJ5ID09PSB0cnVlIHx8IHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgX3RoaXMuZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSAnZnVuY3Rpb24nICYmIHJldHJ5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpO1xuXG4gICAgICBpZiAoY2FuY2VsUmV0cnkgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoZSBxdWVyeSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJldHJpZWRcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5mYWlsdXJlQ291bnQrKzsgLy8gTm90aWZ5IG9uIGZhaWxcblxuICAgICAgY29uZmlnLm9uRmFpbCA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRmFpbChfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTsgLy8gRGVsYXlcblxuICAgICAgc2xlZXAoZGVsYXkpIC8vIFBhdXNlIGlmIHRoZSBkb2N1bWVudCBpcyBub3QgdmlzaWJsZSBvciB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmbGluZVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSB8fCAhb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY2FuY2VsUmV0cnkpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gU3RhcnQgbG9vcFxuXG5cbiAgcnVuKCk7XG59OyIsICJpbXBvcnQgeyBzY2hlZHVsZU1pY3JvdGFzayB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBOb3RpZnlNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm90aWZ5TWFuYWdlcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG4gICAgdGhpcy5ub3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aWZ5TWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJhdGNoID0gZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHRoaXMudHJhbnNhY3Rpb25zKys7XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbnMtLTtcblxuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGUgPSBmdW5jdGlvbiBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5iYXRjaENhbGxzID0gZnVuY3Rpb24gYmF0Y2hDYWxscyhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuYmF0Y2hOb3RpZnlGbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVldWUuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF90aGlzMy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIG5vdGlmeSBmdW5jdGlvbi5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXROb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5ub3RpZnlGbiA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZm47XG4gIH07XG5cbiAgcmV0dXJuIE5vdGlmeU1hbmFnZXI7XG59KCk7IC8vIFNJTkdMRVRPTlxuXG5leHBvcnQgdmFyIG5vdGlmeU1hbmFnZXIgPSBuZXcgTm90aWZ5TWFuYWdlcigpOyIsICIvLyBUWVBFU1xuLy8gRlVOQ1RJT05TXG52YXIgbG9nZ2VyID0gY29uc29sZTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIHJldHVybiBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKG5ld0xvZ2dlcikge1xuICBsb2dnZXIgPSBuZXdMb2dnZXI7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyLCBmdW5jdGlvbmFsVXBkYXRlLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgdGltZVVudGlsU3RhbGUsIGVuc3VyZVF1ZXJ5S2V5QXJyYXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnkoY29uZmlnKSB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy5oYWRPYnNlcnZlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuaW5pdGlhbFN0YXRlID0gY29uZmlnLnN0YXRlIHx8IHRoaXMuZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGNhY2hlVGk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5tZXRhID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tZXRhOyAvLyBEZWZhdWx0IHRvIDUgbWludXRlcyBpZiBub3QgY2FjaGUgdGltZSBpcyBzZXRcblxuICAgIHRoaXMuY2FjaGVUaW1lID0gTWF0aC5tYXgodGhpcy5jYWNoZVRpbWUgfHwgMCwgKF90aGlzJG9wdGlvbnMkY2FjaGVUaSA9IHRoaXMub3B0aW9ucy5jYWNoZVRpbWUpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJGNhY2hlVGkgOiA1ICogNjAgKiAxMDAwKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlR2MgPSBmdW5jdGlvbiBzY2hlZHVsZUdjKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNWYWxpZFRpbWVvdXQodGhpcy5jYWNoZVRpbWUpKSB7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgfSwgdGhpcy5jYWNoZVRpbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJHY1RpbWVvdXQgPSBmdW5jdGlvbiBjbGVhckdjVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5nY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdjVGltZW91dCk7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9wdGlvbmFsUmVtb3ZlID0gZnVuY3Rpb24gb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFkT2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEodXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGlzRGF0YUUsIF90aGlzJG9wdGlvbnM7XG5cbiAgICB2YXIgcHJldkRhdGEgPSB0aGlzLnN0YXRlLmRhdGE7IC8vIEdldCB0aGUgbmV3IGRhdGFcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBwcmV2RGF0YSk7IC8vIFVzZSBwcmV2IGRhdGEgaWYgYW4gaXNEYXRhRXF1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgcmV0dXJucyBgdHJ1ZWBcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRpc0RhdGFFID0gKF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpLmlzRGF0YUVxdWFsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRpc0RhdGFFLmNhbGwoX3RoaXMkb3B0aW9ucywgcHJldkRhdGEsIGRhdGEpKSB7XG4gICAgICBkYXRhID0gcHJldkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsbHkgc2hhcmUgZGF0YSBiZXR3ZWVuIHByZXYgYW5kIG5ldyBkYXRhIGlmIG5lZWRlZFxuICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICAgIH0gLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG5cblxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudXBkYXRlZEF0XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldFN0YXRlT3B0aW9uczogc2V0U3RhdGVPcHRpb25zXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXI7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICAoX3RoaXMkcmV0cnllciA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIuY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICB0aGlzLmNhbmNlbCh7XG4gICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZldGNoaW5nO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlID0gZnVuY3Rpb24gaXNTdGFsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZUJ5VGltZSA9IGZ1bmN0aW9uIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lKSB7XG4gICAgaWYgKHN0YWxlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFsZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCAhdGltZVVudGlsU3RhbGUodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LCBzdGFsZVRpbWUpO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjI7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMi5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMztcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25SZWNvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjMgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMy5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmhhZE9ic2VydmVycyA9IHRydWU7IC8vIFN0b3AgdGhlIHF1ZXJ5IGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcblxuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGUgdHJhbnNwb3J0IGxheWVyIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIHdlJ2xsIGxldCB0aGUgcXVlcnkgY29udGludWUgc28gdGhlIHJlc3VsdCBjYW4gYmUgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXRyeWVyLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSB8fCB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoe1xuICAgICAgICAgICAgICByZXZlcnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsUmV0cnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWNoZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9ic2VydmVyc0NvdW50ID0gZnVuY3Rpb24gZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnaW52YWxpZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRiZWhhdmlvLFxuICAgICAgICBfY29udGV4dCRmZXRjaE9wdGlvbnMsXG4gICAgICAgIF9hYm9ydENvbnRyb2xsZXIkYWJvcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLmNhbmNlbFJlZmV0Y2gpKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGNhbmNlbCBjdXJyZW50IGZldGNoIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNhbmNlbCByZWZldGNoZXNcbiAgICAgICAgdGhpcy5jYW5jZWwoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9taXNlKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZXRyeWVyNDtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICAoX3RoaXMkcmV0cnllcjQgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyNC5jb250aW51ZVJldHJ5KCk7IC8vIFJldHVybiBjdXJyZW50IHByb21pc2UgaWYgd2UgYXJlIGFscmVhZHkgZmV0Y2hpbmdcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgfVxuICAgIH0gLy8gVXBkYXRlIGNvbmZpZyBpZiBwYXNzZWQsIG90aGVyd2lzZSB0aGUgY29uZmlnIGZyb20gdGhlIGxhc3QgZXhlY3V0aW9uIGlzIHVzZWRcblxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9IC8vIFVzZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSBmaXJzdCBvYnNlcnZlciB3aXRoIGEgcXVlcnkgZnVuY3Rpb24gaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQuXG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHF1ZXJ5IGlzIGh5ZHJhdGVkIG9yIGNyZWF0ZWQgd2l0aCBzZXRRdWVyeURhdGEuXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgub3B0aW9ucy5xdWVyeUZuO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMob2JzZXJ2ZXIub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gZW5zdXJlUXVlcnlLZXlBcnJheSh0aGlzLnF1ZXJ5S2V5KTtcbiAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7IC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG5cbiAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBwYWdlUGFyYW06IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0LCAnc2lnbmFsJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ3JlYXRlIGZldGNoIGZ1bmN0aW9uXG5cbiAgICB2YXIgZmV0Y2hGbiA9IGZ1bmN0aW9uIGZldGNoRm4oKSB7XG4gICAgICBpZiAoIV90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5xdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9OyAvLyBUcmlnZ2VyIGJlaGF2aW9yIGhvb2tcblxuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGbjogZmV0Y2hGbixcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkYmVoYXZpbyA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpby5vbkZldGNoKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9ucyRiZWhhdmlvMjtcblxuICAgICAgKF90aGlzJG9wdGlvbnMkYmVoYXZpbzIgPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8yLm9uRmV0Y2goY29udGV4dCk7XG4gICAgfSAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG5cblxuICAgIHRoaXMucmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlOyAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZldGNoaW5nIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSAoKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpKSB7XG4gICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zMjtcblxuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgIG1ldGE6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLm1ldGFcbiAgICAgIH0pO1xuICAgIH0gLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG5cblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiAoX2Fib3J0Q29udHJvbGxlciRhYm9yID0gYWJvcnRDb250cm9sbGVyLmFib3J0KSA9PSBudWxsID8gdm9pZCAwIDogX2Fib3J0Q29udHJvbGxlciRhYm9yLmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgX3RoaXMyLnNldERhdGEoZGF0YSk7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzMik7IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpczIpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICB0aGlzLnByb21pc2UgPSB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiBfdGhpczMsXG4gICAgICAgIHR5cGU6ICdxdWVyeVVwZGF0ZWQnLFxuICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGEoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGE7XG4gICAgdmFyIGhhc0luaXRpYWxEYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0luaXRpYWxEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0KCkgOiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0IDogMDtcbiAgICB2YXIgaGFzRGF0YSA9IHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVDb3VudDogMCxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCAhPSBudWxsID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpIDogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBoYXNEYXRhID8gJ3N1Y2Nlc3MnIDogJ2lkbGUnXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVkdWNlciA9IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfYWN0aW9uJG1ldGEsIF9hY3Rpb24kZGF0YVVwZGF0ZWRBdDtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwYXVzZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY29udGludWUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBmZXRjaE1ldGE6IChfYWN0aW9uJG1ldGEgPSBhY3Rpb24ubWV0YSkgIT0gbnVsbCA/IF9hY3Rpb24kbWV0YSA6IG51bGwsXG4gICAgICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSwgIXN0YXRlLmRhdGFVcGRhdGVkQXQgJiYge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBkYXRhVXBkYXRlZEF0OiAoX2FjdGlvbiRkYXRhVXBkYXRlZEF0ID0gYWN0aW9uLmRhdGFVcGRhdGVkQXQpICE9IG51bGwgPyBfYWN0aW9uJGRhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB2YXIgZXJyb3IgPSBhY3Rpb24uZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnJldmVydCAmJiB0aGlzLnJldmVydFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJldmVydFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUXVlcnk7XG59KCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5LCBwYXJzZUZpbHRlckFyZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlDYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlDYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5xdWVyaWVzID0gW107XG4gICAgX3RoaXMucXVlcmllc01hcCA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIF9vcHRpb25zJHF1ZXJ5SGFzaDtcblxuICAgIHZhciBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgdmFyIHF1ZXJ5SGFzaCA9IChfb3B0aW9ucyRxdWVyeUhhc2ggPSBvcHRpb25zLnF1ZXJ5SGFzaCkgIT0gbnVsbCA/IF9vcHRpb25zJHF1ZXJ5SGFzaCA6IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSksXG4gICAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSA9IHF1ZXJ5O1xuICAgICAgdGhpcy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocXVlcnkpIHtcbiAgICB2YXIgcXVlcnlJbk1hcCA9IHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuXG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucXVlcmllcyA9IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHF1ZXJ5O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5UmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBfdGhpczIucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc01hcFtxdWVyeUhhc2hdO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJpZXMuZmluZChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pIDogdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNdXRhdGlvbihjb25maWcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29uZmlnLmRlZmF1bHRPcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlIHx8IGdldERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29udGludWUgPSBmdW5jdGlvbiBfY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNvbnRpbnVlKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiB0aGlzLm9wdGlvbnMudmFyaWFibGVzXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBfdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHZhcmlhYmxlczogX3RoaXMuc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVNdXRhdGlvbigpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZGF0YSA9IHJlc3VsdDsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7IC8vIExvZyBlcnJvclxuXG4gICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRyZXRyeTtcblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBtdXRhdGlvbkZuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubXV0YXRpb25GbihfdGhpczIuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiAoX3RoaXMkb3B0aW9ucyRyZXRyeSA9IHRoaXMub3B0aW9ucy5yZXRyeSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmV0cnkgOiAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLm11dGF0aW9uQ2FjaGUubm90aWZ5KF90aGlzMyk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uO1xufSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDFcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncGF1c2UnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgY29udGV4dDogYWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlc1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbkNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE11dGF0aW9uQ2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE11dGF0aW9uQ2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMubXV0YXRpb25zID0gW107XG4gICAgX3RoaXMubXV0YXRpb25JZCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uQ2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy5tdXRhdGlvbklkLFxuICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9ucy5tdXRhdGlvbktleSA/IGNsaWVudC5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG11dGF0aW9uO1xuICAgIH0pO1xuICAgIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLm11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICBfdGhpczIucmVtb3ZlKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChmaWx0ZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbmQoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobXV0YXRpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgdmFyIHBhdXNlZE11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc3RhdGUuaXNQYXVzZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBhdXNlZE11dGF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2UsIG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtdXRhdGlvbi5jb250aW51ZSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb25DYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IHsgaXNDYW5jZWxhYmxlIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBvbkZldGNoOiBmdW5jdGlvbiBvbkZldGNoKGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9ucywgX2NvbnRleHQkZmV0Y2hPcHRpb25zMiwgX2NvbnRleHQkZmV0Y2hPcHRpb25zMywgX2NvbnRleHQkZmV0Y2hPcHRpb25zNCwgX2NvbnRleHQkc3RhdGUkZGF0YSwgX2NvbnRleHQkc3RhdGUkZGF0YTI7XG5cbiAgICAgICAgdmFyIHJlZmV0Y2hQYWdlID0gKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIucmVmZXRjaFBhZ2U7XG4gICAgICAgIHZhciBmZXRjaE1vcmUgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczQgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMzLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnM0LmZldGNoTW9yZTtcbiAgICAgICAgdmFyIHBhZ2VQYXJhbSA9IGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLnBhZ2VQYXJhbTtcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdOZXh0UGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnZm9yd2FyZCc7XG4gICAgICAgIHZhciBpc0ZldGNoaW5nUHJldmlvdXNQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdiYWNrd2FyZCc7XG4gICAgICAgIHZhciBvbGRQYWdlcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YSA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEucGFnZXMpIHx8IFtdO1xuICAgICAgICB2YXIgb2xkUGFnZVBhcmFtcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YTIgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhMi5wYWdlUGFyYW1zKSB8fCBbXTtcbiAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB2YXIgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIHZhciBuZXdQYWdlUGFyYW1zID0gb2xkUGFnZVBhcmFtcztcbiAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOyAvLyBHZXQgcXVlcnkgZnVuY3Rpb25cblxuICAgICAgICB2YXIgcXVlcnlGbiA9IGNvbnRleHQub3B0aW9ucy5xdWVyeUZuIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBidWlsZE5ld1BhZ2VzID0gZnVuY3Rpb24gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKSB7XG4gICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IHByZXZpb3VzID8gW3BhcmFtXS5jb25jYXQobmV3UGFnZVBhcmFtcykgOiBbXS5jb25jYXQobmV3UGFnZVBhcmFtcywgW3BhcmFtXSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzID8gW3BhZ2VdLmNvbmNhdChwYWdlcykgOiBbXS5jb25jYXQocGFnZXMsIFtwYWdlXSk7XG4gICAgICAgIH07IC8vIENyZWF0ZSBmdW5jdGlvbiB0byBmZXRjaCBhIHBhZ2VcblxuXG4gICAgICAgIHZhciBmZXRjaFBhZ2UgPSBmdW5jdGlvbiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgcGFyYW0sIHByZXZpb3VzKSB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdDYW5jZWxsZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAndW5kZWZpbmVkJyAmJiAhbWFudWFsICYmIHBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQubWV0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5SZXN1bHQgPSBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShxdWVyeUZuUmVzdWx0KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocXVlcnlGblJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNlQXNBbnkgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZUFzQW55LmNhbmNlbCA9IHF1ZXJ5Rm5SZXN1bHQuY2FuY2VsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBwcm9taXNlOyAvLyBGZXRjaCBmaXJzdCBwYWdlP1xuXG4gICAgICAgIGlmICghb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShbXSk7XG4gICAgICAgIH0gLy8gRmV0Y2ggbmV4dCBwYWdlP1xuICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIHZhciBwYXJhbSA9IG1hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG4gICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBtYW51YWwsIHBhcmFtKTtcbiAgICAgICAgICB9IC8vIEZldGNoIHByZXZpb3VzIHBhZ2U/XG4gICAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICB2YXIgX21hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgICAgICAgIHZhciBfcGFyYW0gPSBfbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0UHJldmlvdXNQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG5cbiAgICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgX21hbnVhbCwgX3BhcmFtLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gUmVmZXRjaCBwYWdlc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgY29udGV4dC5vcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoRmlyc3RQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbMF0gPyByZWZldGNoUGFnZShvbGRQYWdlc1swXSwgMCwgb2xkUGFnZXMpIDogdHJ1ZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZVxuXG4gICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPyBmZXRjaFBhZ2UoW10sIG1hbnVhbCwgb2xkUGFnZVBhcmFtc1swXSkgOiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhbXSwgb2xkUGFnZVBhcmFtc1swXSwgb2xkUGFnZXNbMF0pKTsgLy8gRmV0Y2ggcmVtYWluaW5nIHBhZ2VzXG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hOZXh0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzW2ldID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbaV0sIGksIG9sZFBhZ2VzKSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJhbTIgPSBtYW51YWwgPyBvbGRQYWdlUGFyYW1zW2ldIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIHBhZ2VzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBfcGFyYW0yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMocGFnZXMsIG9sZFBhZ2VQYXJhbXNbaV0sIG9sZFBhZ2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcChpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IHBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogbmV3UGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmluYWxQcm9taXNlQXNBbnkgPSBmaW5hbFByb21pc2U7XG5cbiAgICAgICAgZmluYWxQcm9taXNlQXNBbnkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb21pc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbShwYWdlc1twYWdlcy5sZW5ndGggLSAxXSwgcGFnZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKHBhZ2VzWzBdLCBwYWdlcyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIG5leHQgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05leHRQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgbmV4dFBhZ2VQYXJhbSA9IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgbmV4dFBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gbnVsbCAmJiBuZXh0UGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIHByZXZpb3VzUGFnZVBhcmFtID0gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgcHJldmlvdXNQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBudWxsICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCBzaGFsbG93RXF1YWxPYmplY3RzLCB0aW1lVW50aWxTdGFsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJztcbmV4cG9ydCB2YXIgUXVlcnlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeU9ic2VydmVyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeU9ic2VydmVyKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLnRyYWNrZWRQcm9wcyA9IFtdO1xuICAgIF90aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcblxuICAgIF90aGlzLmJpbmRNZXRob2RzKCk7XG5cbiAgICBfdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5T2JzZXJ2ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iaW5kTWV0aG9kcyA9IGZ1bmN0aW9uIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVtb3ZlID0gdGhpcy5yZW1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZmV0Y2ggPSB0aGlzLnJlZmV0Y2guYmluZCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcblxuICAgICAgaWYgKHNob3VsZEZldGNoT25Nb3VudCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPblJlY29ubmVjdCA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25SZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCk7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25XaW5kb3dGb2N1cyA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uV2luZG93Rm9jdXMpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4nKTtcbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgcXVlcnkga2V5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHN1cHBseSBvbmVcblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5xdWVyeUtleSA9IHByZXZPcHRpb25zLnF1ZXJ5S2V5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTtcbiAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7IC8vIEZldGNoIGlmIHRoZXJlIGFyZSBzdWJzY3JpYmVyc1xuXG4gICAgaWYgKG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHRoaXMuY3VycmVudFF1ZXJ5LCBwcmV2UXVlcnksIHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgIH0gLy8gVXBkYXRlIHJlc3VsdFxuXG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTsgLy8gVXBkYXRlIHN0YWxlIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSAhPT0gcHJldk9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFJlZmV0Y2hJbnRlcnZhbCA9IHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpOyAvLyBVcGRhdGUgcmVmZXRjaCBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T3B0aW1pc3RpY1Jlc3VsdCA9IGZ1bmN0aW9uIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFJlc3VsdCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8udHJhY2tSZXN1bHQgPSBmdW5jdGlvbiB0cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciB0cmFja2VkUmVzdWx0ID0ge307XG5cbiAgICB2YXIgdHJhY2tQcm9wID0gZnVuY3Rpb24gdHJhY2tQcm9wKGtleSkge1xuICAgICAgaWYgKCFfdGhpczIudHJhY2tlZFByb3BzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX3RoaXMyLnRyYWNrZWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlZFJlc3VsdCwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHRyYWNrUHJvcChrZXkpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5IHx8IGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAgIHRyYWNrUHJvcCgnZXJyb3InKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2tlZFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TmV4dFJlc3VsdCA9IGZ1bmN0aW9uIGdldE5leHRSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB1bnN1YnNjcmliZSA9IF90aGlzMy5zdWJzY3JpYmUoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBpZiAoIXJlc3VsdC5pc0ZldGNoaW5nKSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvciAmJiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRRdWVyeSA9IGZ1bmN0aW9uIGdldEN1cnJlbnRRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkucmVtb3ZlKHRoaXMuY3VycmVudFF1ZXJ5KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaCA9IGZ1bmN0aW9uIHJlZmV0Y2gob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBtZXRhOiB7XG4gICAgICAgIHJlZmV0Y2hQYWdlOiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlZmV0Y2hQYWdlXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaE9wdGltaXN0aWMgPSBmdW5jdGlvbiBmZXRjaE9wdGltaXN0aWMob3B0aW9ucykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnVwZGF0ZVJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LmN1cnJlbnRSZXN1bHQ7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVGZXRjaCA9IGZ1bmN0aW9uIGV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgcmVmZXJlbmNlIHRoZSBsYXRlc3QgcXVlcnkgYXMgdGhlIGN1cnJlbnQgb25lIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpOyAvLyBGZXRjaFxuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLmN1cnJlbnRRdWVyeS5mZXRjaCh0aGlzLm9wdGlvbnMsIGZldGNoT3B0aW9ucyk7XG5cbiAgICBpZiAoIShmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuY3VycmVudFJlc3VsdC5pc1N0YWxlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0aW1lID0gdGltZVVudGlsU3RhbGUodGhpcy5jdXJyZW50UmVzdWx0LmRhdGFVcGRhdGVkQXQsIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpOyAvLyBUaGUgdGltZW91dCBpcyBzb21ldGltZXMgdHJpZ2dlcmVkIDEgbXMgYmVmb3JlIHRoZSBzdGFsZSB0aW1lIGV4cGlyYXRpb24uXG4gICAgLy8gVG8gbWl0aWdhdGUgdGhpcyBpc3N1ZSB3ZSBhbHdheXMgYWRkIDEgbXMgdG8gdGhlIHRpbWVvdXQuXG5cbiAgICB2YXIgdGltZW91dCA9IHRpbWUgKyAxO1xuICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXM2LmN1cnJlbnRSZXN1bHQuaXNTdGFsZSkge1xuICAgICAgICBfdGhpczYudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjb21wdXRlUmVmZXRjaEludGVydmFsKCkge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJHJlZmV0Y2g7XG5cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhLCB0aGlzLmN1cnJlbnRRdWVyeSkgOiAoX3RoaXMkb3B0aW9ucyRyZWZldGNoID0gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmVmZXRjaCA6IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiB1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dEludGVydmFsKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID0gbmV4dEludGVydmFsO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSB8fCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzNy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fCBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgX3RoaXM3LmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVRpbWVycyA9IGZ1bmN0aW9uIHVwZGF0ZVRpbWVycygpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJUaW1lcnMgPSBmdW5jdGlvbiBjbGVhclRpbWVycygpIHtcbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyU3RhbGVUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnN0YWxlVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnN0YWxlVGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjbGVhclJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKTtcbiAgICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jcmVhdGVSZXN1bHQgPSBmdW5jdGlvbiBjcmVhdGVSZXN1bHQocXVlcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHZhciBwcmV2UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICB2YXIgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIHZhciBxdWVyeUNoYW5nZSA9IHF1ZXJ5ICE9PSBwcmV2UXVlcnk7XG4gICAgdmFyIHF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnlDaGFuZ2UgPyBxdWVyeS5zdGF0ZSA6IHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlO1xuICAgIHZhciBwcmV2UXVlcnlSZXN1bHQgPSBxdWVyeUNoYW5nZSA/IHRoaXMuY3VycmVudFJlc3VsdCA6IHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdDtcbiAgICB2YXIgc3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB2YXIgZGF0YVVwZGF0ZWRBdCA9IHN0YXRlLmRhdGFVcGRhdGVkQXQsXG4gICAgICAgIGVycm9yID0gc3RhdGUuZXJyb3IsXG4gICAgICAgIGVycm9yVXBkYXRlZEF0ID0gc3RhdGUuZXJyb3JVcGRhdGVkQXQsXG4gICAgICAgIGlzRmV0Y2hpbmcgPSBzdGF0ZS5pc0ZldGNoaW5nLFxuICAgICAgICBzdGF0dXMgPSBzdGF0ZS5zdGF0dXM7XG4gICAgdmFyIGlzUHJldmlvdXNEYXRhID0gZmFsc2U7XG4gICAgdmFyIGlzUGxhY2Vob2xkZXJEYXRhID0gZmFsc2U7XG4gICAgdmFyIGRhdGE7IC8vIE9wdGltaXN0aWNhbGx5IHNldCByZXN1bHQgaW4gZmV0Y2hpbmcgc3RhdGUgaWYgbmVlZGVkXG5cbiAgICBpZiAob3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgICAgdmFyIGZldGNoT25Nb3VudCA9ICFtb3VudGVkICYmIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucyk7XG4gICAgICB2YXIgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuXG4gICAgICBpZiAoZmV0Y2hPbk1vdW50IHx8IGZldGNoT3B0aW9uYWxseSkge1xuICAgICAgICBpc0ZldGNoaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWRhdGFVcGRhdGVkQXQpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKG9wdGlvbnMua2VlcFByZXZpb3VzRGF0YSAmJiAhc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICYmIChwcmV2UXVlcnlSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeVJlc3VsdC5pc1N1Y2Nlc3MpICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykge1xuICAgICAgZGF0YSA9IHByZXZRdWVyeVJlc3VsdC5kYXRhO1xuICAgICAgZGF0YVVwZGF0ZWRBdCA9IHByZXZRdWVyeVJlc3VsdC5kYXRhVXBkYXRlZEF0O1xuICAgICAgc3RhdHVzID0gcHJldlF1ZXJ5UmVzdWx0LnN0YXR1cztcbiAgICAgIGlzUHJldmlvdXNEYXRhID0gdHJ1ZTtcbiAgICB9IC8vIFNlbGVjdCBkYXRhIGlmIG5lZWRlZFxuICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBzdGF0ZS5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBNZW1vaXplIHNlbGVjdCByZXN1bHRcbiAgICAgICAgaWYgKHByZXZSZXN1bHQgJiYgc3RhdGUuZGF0YSA9PT0gKHByZXZSZXN1bHRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdFN0YXRlLmRhdGEpICYmIG9wdGlvbnMuc2VsZWN0ID09PSB0aGlzLnNlbGVjdEZuKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZuID0gb3B0aW9ucy5zZWxlY3Q7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3Qoc3RhdGUuZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBVc2UgcXVlcnkgZGF0YVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIH0gLy8gU2hvdyBwbGFjZWhvbGRlciBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnKSkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyRGF0YTsgLy8gTWVtb2l6ZSBwbGFjZWhvbGRlciBkYXRhXG5cbiAgICAgIGlmICgocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5pc1BsYWNlaG9sZGVyRGF0YSkgJiYgb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09IChwcmV2UmVzdWx0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdE9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKSkge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBwcmV2UmVzdWx0LmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSgpIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IG9wdGlvbnMuc2VsZWN0KHBsYWNlaG9sZGVyRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgcGxhY2Vob2xkZXJEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgZGF0YSA9IHBsYWNlaG9sZGVyRGF0YTtcbiAgICAgICAgaXNQbGFjZWhvbGRlckRhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdEVycm9yKSB7XG4gICAgICBlcnJvciA9IHRoaXMuc2VsZWN0RXJyb3I7XG4gICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIGlzTG9hZGluZzogc3RhdHVzID09PSAnbG9hZGluZycsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgaXNFcnJvcjogc3RhdHVzID09PSAnZXJyb3InLFxuICAgICAgaXNJZGxlOiBzdGF0dXMgPT09ICdpZGxlJyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBkYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IGVycm9yVXBkYXRlZEF0LFxuICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoZWQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IDAgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IDAsXG4gICAgICBpc0ZldGNoZWRBZnRlck1vdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5kYXRhVXBkYXRlQ291bnQgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoaW5nOiBpc0ZldGNoaW5nLFxuICAgICAgaXNSZWZldGNoaW5nOiBpc0ZldGNoaW5nICYmIHN0YXR1cyAhPT0gJ2xvYWRpbmcnLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ID09PSAwLFxuICAgICAgaXNQbGFjZWhvbGRlckRhdGE6IGlzUGxhY2Vob2xkZXJEYXRhLFxuICAgICAgaXNQcmV2aW91c0RhdGE6IGlzUHJldmlvdXNEYXRhLFxuICAgICAgaXNSZWZldGNoRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ICE9PSAwLFxuICAgICAgaXNTdGFsZTogaXNTdGFsZShxdWVyeSwgb3B0aW9ucyksXG4gICAgICByZWZldGNoOiB0aGlzLnJlZmV0Y2gsXG4gICAgICByZW1vdmU6IHRoaXMucmVtb3ZlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zaG91bGROb3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzaG91bGROb3RpZnlMaXN0ZW5lcnMocmVzdWx0LCBwcmV2UmVzdWx0KSB7XG4gICAgaWYgKCFwcmV2UmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wcyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zO1xuXG4gICAgaWYgKCFub3RpZnlPbkNoYW5nZVByb3BzICYmICFub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyAmJiAhdGhpcy50cmFja2VkUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW5jbHVkZWRQcm9wcyA9IG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyA/IHRoaXMudHJhY2tlZFByb3BzIDogbm90aWZ5T25DaGFuZ2VQcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzdWx0KS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB0eXBlZEtleSA9IGtleTtcbiAgICAgIHZhciBjaGFuZ2VkID0gcmVzdWx0W3R5cGVkS2V5XSAhPT0gcHJldlJlc3VsdFt0eXBlZEtleV07XG4gICAgICB2YXIgaXNJbmNsdWRlZCA9IGluY2x1ZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGluY2x1ZGVkUHJvcHMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICB2YXIgaXNFeGNsdWRlZCA9IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjaGFuZ2VkICYmICFpc0V4Y2x1ZGVkICYmICghaW5jbHVkZWRQcm9wcyB8fCBpc0luY2x1ZGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVzdWx0ID0gZnVuY3Rpb24gdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIE9ubHkgbm90aWZ5IGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZFxuXG4gICAgaWYgKHNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGV0ZXJtaW5lIHdoaWNoIGNhbGxiYWNrcyB0byB0cmlnZ2VyXG5cblxuICAgIHZhciBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHtcbiAgICAgIGNhY2hlOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICgobm90aWZ5T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpICE9PSBmYWxzZSAmJiB0aGlzLnNob3VsZE5vdGlmeUxpc3RlbmVycyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICBkZWZhdWx0Tm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KF9leHRlbmRzKHt9LCBkZWZhdWx0Tm90aWZ5T3B0aW9ucywgbm90aWZ5T3B0aW9ucykpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVRdWVyeSA9IGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChxdWVyeSA9PT0gdGhpcy5jdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICAgIHF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25RdWVyeVVwZGF0ZSA9IGZ1bmN0aW9uIG9uUXVlcnlVcGRhdGUoYWN0aW9uKSB7XG4gICAgdmFyIG5vdGlmeU9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uU3VjY2VzcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2Vycm9yJyAmJiAhaXNDYW5jZWxsZWRFcnJvcihhY3Rpb24uZXJyb3IpKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBGaXJzdCB0cmlnZ2VyIHRoZSBjb25maWd1cmF0aW9uIGNhbGxiYWNrc1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZChfdGhpczguY3VycmVudFJlc3VsdC5kYXRhLCBudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAobm90aWZ5T3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uRXJyb3IoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgIH0gLy8gVGhlbiB0cmlnZ2VyIHRoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpIHtcbiAgICAgICAgX3RoaXM4Lmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyKF90aGlzOC5jdXJyZW50UmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIFRoZW4gdGhlIGNhY2hlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmNhY2hlKSB7XG4gICAgICAgIF90aGlzOC5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgICAgcXVlcnk6IF90aGlzOC5jdXJyZW50UXVlcnksXG4gICAgICAgICAgdHlwZTogJ29ic2VydmVyUmVzdWx0c1VwZGF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeU9ic2VydmVyO1xufShTdWJzY3JpYmFibGUpO1xuXG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAhcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ID4gMCAmJiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBvcHRpb25zLnJlZmV0Y2hPbk1vdW50KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgZmllbGQpIHtcbiAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICB2YXIgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09ICdmdW5jdGlvbicgPyBmaWVsZChxdWVyeSkgOiBmaWVsZDtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdhbHdheXMnIHx8IHZhbHVlICE9PSBmYWxzZSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmIChxdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHByZXZPcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSAnZXJyb3InKSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShvcHRpb25zLnN0YWxlVGltZSk7XG59IiwgImltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuZXhwb3J0IHZhciB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOyIsICJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJy4vcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5ub3RpZnlNYW5hZ2VyLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24odW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMpOyIsICJleHBvcnQgdmFyIGxvZ2dlciA9IGNvbnNvbGU7IiwgImltcG9ydCB7IHNldExvZ2dlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuc2V0TG9nZ2VyKGxvZ2dlcik7IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgZGVmYXVsdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xudmFyIFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7IC8vIGlmIGNvbnRleHRTaGFyaW5nIGlzIG9uLCB3ZSBzaGFyZSB0aGUgZmlyc3QgYW5kIGF0IGxlYXN0IG9uZVxuLy8gaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHQgYWNyb3NzIHRoZSB3aW5kb3dcbi8vIHRvIGVuc3VyZSB0aGF0IGlmIFJlYWN0IFF1ZXJ5IGlzIHVzZWQgYWNyb3NzXG4vLyBkaWZmZXJlbnQgYnVuZGxlcyBvciBtaWNyb2Zyb250ZW5kcyB0aGV5IHdpbGxcbi8vIGFsbCB1c2UgdGhlIHNhbWUgKippbnN0YW5jZSoqIG9mIGNvbnRleHQsIHJlZ2FyZGxlc3Ncbi8vIG9mIG1vZHVsZSBzY29waW5nLlxuXG5mdW5jdGlvbiBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpIHtcbiAgaWYgKGNvbnRleHRTaGFyaW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCF3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQpIHtcbiAgICAgIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCA9IGRlZmF1bHRDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG59XG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlDbGllbnQgPSBmdW5jdGlvbiB1c2VRdWVyeUNsaWVudCgpIHtcbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChnZXRRdWVyeUNsaWVudENvbnRleHQoUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0KSkpO1xuXG4gIGlmICghcXVlcnlDbGllbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZScpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xufTtcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnRQcm92aWRlciA9IGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2xpZW50ID0gX3JlZi5jbGllbnQsXG4gICAgICBfcmVmJGNvbnRleHRTaGFyaW5nID0gX3JlZi5jb250ZXh0U2hhcmluZyxcbiAgICAgIGNvbnRleHRTaGFyaW5nID0gX3JlZiRjb250ZXh0U2hhcmluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbnRleHRTaGFyaW5nLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgdmFyIENvbnRleHQgPSBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0U2hhcmluZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNsaWVudFxuICB9LCBjaGlsZHJlbikpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gQ09OVEVYVFxuXG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgdmFyIF9pc1Jlc2V0ID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY2xlYXJSZXNldDogZnVuY3Rpb24gY2xlYXJSZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiBmdW5jdGlvbiBpc1Jlc2V0KCkge1xuICAgICAgcmV0dXJuIF9pc1Jlc2V0O1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGNyZWF0ZVZhbHVlKCkpOyAvLyBIT09LXG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbn07IC8vIENPTVBPTkVOVFxuXG5leHBvcnQgdmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgdmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY3JlYXRlVmFsdWUoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHZhbHVlXG4gIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHZhbHVlKSA6IGNoaWxkcmVuKTtcbn07IiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yKHN1c3BlbnNlLCBfdXNlRXJyb3JCb3VuZGFyeSwgcGFyYW1zKSB7XG4gIC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhyb3dpbmcgYmVoYXZpb3Igb24gYSBwZXItZXJyb3IgYmFzaXNcbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeS5hcHBseSh2b2lkIDAsIHBhcmFtcyk7XG4gIH0gLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSB0byBvdmVycmlkZSBzdXNwZW5zZSdzIHRocm93aW5nIGJlaGF2aW9yXG5cblxuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnYm9vbGVhbicpIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeTsgLy8gSWYgc3VzcGVuc2UgaXMgZW5hYmxlZCBkZWZhdWx0IHRvIHRocm93aW5nIGVycm9yc1xuXG4gIHJldHVybiAhIXN1c3BlbnNlO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gJy4vUXVlcnlFcnJvclJlc2V0Qm91bmRhcnknO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICcuL1F1ZXJ5Q2xpZW50UHJvdmlkZXInO1xuaW1wb3J0IHsgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeShvcHRpb25zLCBPYnNlcnZlcikge1xuICB2YXIgbW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgICAgZm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgdmFyIGVycm9yUmVzZXRCb3VuZGFyeSA9IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCk7XG4gIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gcXVlcnlDbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpOyAvLyBNYWtlIHN1cmUgcmVzdWx0cyBhcmUgb3B0aW1pc3RpY2FsbHkgc2V0IGluIGZldGNoaW5nIHN0YXRlIGJlZm9yZSBzdWJzY3JpYmluZyBvciB1cGRhdGluZyBvcHRpb25zXG5cbiAgZGVmYXVsdGVkT3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cyA9IHRydWU7IC8vIEluY2x1ZGUgY2FsbGJhY2tzIGluIGJhdGNoIHJlbmRlcnNcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcik7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcyk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIC8vIEFsd2F5cyBzZXQgc3RhbGUgdGltZSB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnRcbiAgICAvLyBmZXRjaGluZyBhZ2FpbiB3aGVuIGRpcmVjdGx5IG1vdW50aW5nIGFmdGVyIHN1c3BlbmRpbmdcbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgPSAxMDAwO1xuICAgIH0gLy8gU2V0IGNhY2hlIHRpbWUgdG8gMSBpZiB0aGUgb3B0aW9uIGhhcyBiZWVuIHNldCB0byAwXG4gICAgLy8gd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Agb2YgZmV0Y2hlc1xuXG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSB8fCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkpIHtcbiAgICAvLyBQcmV2ZW50IHJldHJ5aW5nIGZhaWxlZCBxdWVyeSBpZiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIG5vdCBiZWVuIHJlc2V0IHlldFxuICAgIGlmICghZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeU9uTW91bnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmVyKHF1ZXJ5Q2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfSksXG4gICAgICBvYnNlcnZlciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF07XG5cbiAgdmFyIHJlc3VsdCA9IG9ic2VydmVyLmdldE9wdGltaXN0aWNSZXN1bHQoZGVmYXVsdGVkT3B0aW9ucyk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgIHZhciB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZShmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpOyAvLyBVcGRhdGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IG1pc3MgYW55IHF1ZXJ5IHVwZGF0ZXNcbiAgICAvLyBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvYnNlcnZlciBhbmQgc3Vic2NyaWJpbmcgdG8gaXQuXG5cbiAgICBvYnNlcnZlci51cGRhdGVSZXN1bHQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH0sIFtlcnJvclJlc2V0Qm91bmRhcnksIG9ic2VydmVyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgIG9ic2VydmVyLnNldE9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucywge1xuICAgICAgbGlzdGVuZXJzOiBmYWxzZVxuICAgIH0pO1xuICB9LCBbZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXJdKTsgLy8gSGFuZGxlIHN1c3BlbnNlXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgJiYgcmVzdWx0LmlzTG9hZGluZykge1xuICAgIHRocm93IG9ic2VydmVyLmZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyhkYXRhKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfSk7XG4gIH0gLy8gSGFuZGxlIGVycm9yIGJvdW5kYXJ5XG5cblxuICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkgJiYgIXJlc3VsdC5pc0ZldGNoaW5nICYmIHNob3VsZFRocm93RXJyb3IoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5LCBbcmVzdWx0LmVycm9yLCBvYnNlcnZlci5nZXRDdXJyZW50UXVlcnkoKV0pKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9IC8vIEhhbmRsZSByZXN1bHQgcHJvcGVydHkgdXNhZ2UgdHJhY2tpbmdcblxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJykge1xuICAgIHJlc3VsdCA9IG9ic2VydmVyLnRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsICJpbXBvcnQgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBwYXJzZVF1ZXJ5QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSAnLi91c2VCYXNlUXVlcnknOyAvLyBIT09LXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkocGFyc2VkT3B0aW9ucywgUXVlcnlPYnNlcnZlcik7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJQcmVzZW50YXRpb24ocHJvcHM6IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KHByb3BzLm9udG9sb2d5SWQgfHwgXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpfX0+XG4gICAgICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT17cHJvcHMub250b2xvZ3lJZCA/IFwiYnJlYWRjcnVtYiBjbGlja2FibGUtYnJlYWRjcnVtYlwiIDogXCJicmVhZGNydW1iXCJ9IGNvbG9yPXtwcm9wcy5jb2xvckZpcnN0IHx8IFwicHJpbWFyeVwifT5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLm9udG9sb2d5TmFtZSA/IHByb3BzLm9udG9sb2d5TmFtZS50b1VwcGVyQ2FzZSgpIDogXCJObyBvbnRvbG9neSBuYW1lIGF2YWlsYWJsZVwifVxuICAgICAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICZuYnNwOzxFdWlJY29uIHR5cGU9XCJhcnJvd1JpZ2h0XCIvPiZuYnNwO1xuICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm0gPyBwcm9wcy5zaG9ydEZvcm0udG9VcHBlckNhc2UoKSA6IFwiTm8gc2hvcnQgZm9ybSBhdmFpbGFibGVcIn1cbiAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9naWVzfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEYXRhQ29udGVudFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBEYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBkYXRhVXBkYXRlZEF0XG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT1cIkRhdGEgQ29udGVudFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhVXBkYXRlZEF0ID8gYFVwZGF0ZWQgJHtuZXcgRGF0ZShkYXRhVXBkYXRlZEF0KS50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifVxuICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgID5cbiAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgIHsoaXNFcnJvcikgJiYgPEV1aVRleHQ+Tm8gZGF0YSBjb250ZW50IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAge2lzTG9hZGluZ1xuICAgICAgICAgICAgPyA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gb250b2xvZ2llcyBhbmQgdGVybWlub2xvZ2llczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19Pm9udG9sb2d5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1DbGFzc2VzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpLnRvTG9jYWxlU3RyaW5nKCl9IHByb3BlcnRpZXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5wcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKS50b0xvY2FsZVN0cmluZygpfSBpbmRpdmlkdWFsczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PmluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsvKiA8bGk+VmVyc2lvbiB7Tk9UX0FWQUlMQUJMRX08L2xpPiAqL30gey8qIFRPRE8gaG93IHRvIGdldCBBUEkgdmVyc2lvbj8gKi99XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGF0YUNvbnRlbnRXaWRnZXRcbiAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEYXRhQ29udGVudFdpZGdldCwgY3JlYXRlRGF0YUNvbnRlbnQgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlTcGFjZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZGVDYW1lbENhc2UsIGRlVW5kZXJzY29yZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZywgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRUb29sdGlwfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1Byb3BlcnR5LCBUaGluZywgQ2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNQcm9wZXJ0eSwgaXNJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7RW50aXR5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIEVudGl0eUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHNob3dCYWRnZXMgLCB1c2VMZWdhY3ksIG9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSAsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0VudGl0eSxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHksXG4gICAgICAgIGVycm9yOiBlcnJvckVudGl0eSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SW5mb1wiLFxuICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgXSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxTZWN0aW9uKGVudGl0eTogRW50aXR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKSAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48RXVpU3BhY2VyLz48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5TeW5vbnltczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3lub255bS52YWx1ZX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzeW5vbnltLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlbnRpdHkuZ2V0U3lub255bXMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEhhc0tleVNlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHRlcm0uZ2V0SGFzS2V5KCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5IYXMgS2V5OjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57a2V5cy5tYXAoKGtleXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwga2V5cywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGtleXNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdWJzZXRzU2VjdGlvbih0ZXJtOiBDbGFzcykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7IHRlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5JbiBTdWJzZXRzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0ZXJtLmdldFN1YnNldHMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e3Rlcm0uZ2V0U3Vic2V0cygpLm1hcCgoc3Vic2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e3N1YnNldCArIHJhbmRvbVN0cmluZygpfT57Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIHN1YnNldCwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCB0ZXJtLmdldFN1YnNldHMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyaXN0aWNzID0gcHJvcGVydHkuZ2V0UmRmVHlwZXMoKS5tYXAodHlwZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5JzogJ0Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJbnZlcnNlRnVuY3Rpb25hbFByb3BlcnR5JzogJ0ludmVyc2UgRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eSc6ICdUcmFuc2l0aXZlJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjU3ltbWV0cmljUHJvcGVydHknOiAnU3ltbWV0cmljJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjQXN5bW1ldHJpY1Byb3BlcnR5JzogJ0FzeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eSc6ICdSZWZsZXhpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJcnJlZmxleGl2ZVByb3BlcnR5JzogJ0lycmVmbGV4aXZlJyxcbiAgICAgICAgICAgIH0pW3R5cGVdO1xuICAgICAgICB9KS5maWx0ZXIoKHR5cGUpID0+ICEhdHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2hhcmFjdGVyaXN0aWNzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntjaGFyYWN0ZXJpc3RpY3MubWFwKChjaGFyYWN0ZXJpc3RpYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntjaGFyYWN0ZXJpc3RpY308L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntjaGFyYWN0ZXJpc3RpY3NbMF19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERvbWFpblNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBwcm9wZXJ0eS5nZXREb21haW4oKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2RvbWFpbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkRvbWFpbjo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZG9tYWlucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWlucywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWluc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJhbmdlU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gcHJvcGVydHkuZ2V0UmFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Jhbmdlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlJhbmdlOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntyYW5nZXMubWFwKChyYW5nZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXMsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHJhbmdlc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGluZGl2aWR1YWw6IEluZGl2aWR1YWwpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlJcmlzID0gT2JqZWN0LmtleXMoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmVQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKTtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpICYmIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xKVxuICAgICAgICBjb25zdCBkYXRhUHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpICYmIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSlcbiAgICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25zOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2Ygb2JqZWN0UHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUb29sdGlwKCh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2YgZGF0YVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHs8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPn1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGtleSBvZiBuZWdhdGl2ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlyaSA9IGtleS5zbGljZShcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoaXJpKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RhdGFQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IGhhc09iamVjdFByb3BlcnR5ID0gbGlua2VkRW50aXR5Py50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1trZXldKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+bm90PC9pPntcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT2JqZWN0UHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VG9vbHRpcCgodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgdi52YWx1ZSA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEYXRhUHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+UHJvcGVydHkgYXNzZXJ0aW9uczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57cHJvcGVydHlBc3NlcnRpb25zLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57cGF9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgpfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57cHJvcGVydHlBc3NlcnRpb25zWzBdfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uU2VjdGlvbih0aGluZzogVGhpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyAoZW50aXR5VHlwZSA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpIDogKGlzU3VjY2Vzc0VudGl0eSAmJiBlbnRpdHkpID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKSA6IFwiXCIpICArIFwiIEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAge2lzTG9hZGluZ0VudGl0eSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgICAgICAgIHtpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldExhYmVsU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAge2dldFN5bm9ueW1zU2VjdGlvbihlbnRpdHkpfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNDbGFzcyhlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFN1YnNldHNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRIYXNLZXlTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1Byb3BlcnR5KGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFyYWN0ZXJpc3RpY3NTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXREb21haW5TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSYW5nZVNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzSW5kaXZpZHVhbChlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRBbm5vdGF0aW9uU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtpc0Vycm9yRW50aXR5ICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3JFbnRpdHksIFwiaW5mb3JtYXRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgICAgIDwvRXVpQ2FyZD5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5SW5mbyhwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eUluZm9XaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eUluZm9XaWRnZXQsIGNyZWF0ZUVudGl0eUluZm8gfTtcbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlJY29uVGlwLCBFdWlJY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge2FzQXJyYXksIGluZmVyVHlwZUZyb21UeXBlQXJyYXksIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBcIi4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7T25OYXZpZ2F0ZXN9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxuY29uc3QgREVGQVVMVF9TSE9XX0JBREdFUyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwKHRleHQ6IHN0cmluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlJY29uVGlwIHR5cGU9e1wiaUluQ2lyY2xlXCJ9IGNvbG9yPXtcInN1YmR1ZWRcIn0gY29udGVudD17dGV4dH0vPlxuICAgICk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIFJlaWZpZWQgYXhpb21zIGFzIEpTWCBlbGVtZW50IChzaW1pbGFyIHRvIE1ldGFkYXRhVG9vbHRpcCBjb21wb25lbnQgaW4gb2xzNCBwcm9qZWN0KVxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgc3Vycm91bmRpbmcgZW50aXR5IG9mIHRoZSBheGlvbXMgYXJyYXkgKGZvciBldmVudHVhbCBsYWJlbCBmZXRjaGluZylcbiAqIEBwYXJhbSBheGlvbXNEaWN0IHRoZSBlbnRpdGllcyBheGlvbXMgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSBSZWlmaWVkOjpnZXRNZXRhZGF0YSgpXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGF4aW9tcyBpbiBKU1ggZm9ybWF0IHRvIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGF4aW9tc0RpY3Q6IGFueSB8IG51bGwpIDogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBheGlvbXNUZXh0ID0gT2JqZWN0LmtleXMoYXhpb21zRGljdClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKGtleSkgfHwga2V5O1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCIqXCIgKyBheGlvbXNEaWN0W2tleV0gKyBcIiAoXCIgKyBsYWJlbCArIFwiKVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpXG5cbiAgICByZXR1cm4gZ2V0VG9vbHRpcChheGlvbXNUZXh0KTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgYSBsYWJlbGVkIGVudGl0eSBsaW5rIGFzIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IGluIHdoaWNoIHRoZSBsaW5rZWQgZW50aXR5IGV4aXN0c1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBpcmkgICB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIHNob3dCYWRnZXMgICAgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGVudGl0eSBsaW5rIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGlyaTogc3RyaW5nLCBzaG93QmFkZ2VzIDogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgbGFiZWwgPSBsaW5rZWRFbnRpdGllcy5nZXRMYWJlbEZvcklyaShpcmkpIHx8IGlyaS5zcGxpdChcIi9cIikucG9wKCkgfHwgaXJpO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldChpcmkpO1xuICAgIGNvbnN0IGxvY2FsT250b2xvZ3kgPSBwYXJlbnRFbnRpdHkuZ2V0T250b2xvZ3lJZCgpO1xuXG4gICAgLy8gcmVmZXJlbmNlIHRvIHNlbGY6IGp1c3QgZGlzcGxheSBsYWJlbCBiZWNhdXNlIHdlIGFyZSBhbHJlYWR5IG9uIHRoYXQgcGFnZVxuICAgIGlmIChwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpICE9PSBcIm9udG9sb2d5XCIgJiYgaXJpID09PSBwYXJlbnRFbnRpdHk/LmdldElyaSgpKSB7XG4gICAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJoaWdobGlnaHRcIj57cGFyZW50RW50aXR5LmdldExhYmVsKCl9PC9zcGFuPlxuICAgIH1cblxuICAgIGlmICghbGlua2VkRW50aXR5KSB7XG4gICAgICAgIGlmKGlyaS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBTbyBmYXIgb25seSBrbm93biBvY2N1cnJlbmNlIG9mIHRoaXMgYnJhbmNoIGlzIGZvciBvd2wjVGhpbmdcbiAgICAgICAgICAgIHJldHVybiA8c3Bhbj57bGFiZWx9PC9zcGFuPjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG90aGVyRGVmaW5lZEJ5ID0gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdID8gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdLmZpbHRlcigoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0gIT09IGxvY2FsT250b2xvZ3l9KSA6IFtdO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eVR5cGUgPSBsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdID8gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdKSA6IHBhcmVudEVudGl0eS5nZXRUeXBlKCk7XG5cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRsYWIuemJtZWQuZGUva20vc2VtbG9va3Avb2xzNC8tL2Jsb2IvZGV2L2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL0VudGl0eUxpbmsudHN4IGZvciBvcmlnaW5hbCByZWZlcmVuY2VcbiAgICBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWQ+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IGxpbmtpbmcgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KG90aGVyRGVmaW5lZEJ5WzBdLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkMT4gPG9udG9sb2d5SWQyPiAuLi4gPG9udG9sb2d5SWROPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkST4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhhdCBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBrZXk9e3JhbmRvbVN0cmluZygpfSBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KGVsZW0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57ZWxlbS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIGtleT17cmFuZG9tU3RyaW5nKCl9IG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZShsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcInNlYXJjaFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnkubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XCJvbnRvbG9naWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKHBhcnNlSW50KGxpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIga2V5PXtyYW5kb21TdHJpbmcoKX0gb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcInNlYXJjaFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm9udG9sb2dpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIm9udG9sb2d5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgcmF3IGlyaVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtsaW5rZWRFbnRpdHlbXCJ1cmxcIl0gfHwgaXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIGVsZW1lbnQgb2YgYSBzZWN0aW9ucycgbGlzdCwgcG9zc2libHkgaW4gYSByZWN1cnNpdmUgZmFzaGlvbiBieSBwYXJzaW5nIHRoZSByZXNwb25zZSBvYmplY3QgYXQgdGhlIGN1cnJlbnRSZXNwb25zZVBhdGggdG8gc2hvdyBNYW5jaGVzdGVyIHN5bnRheC5cbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoZXhpc3RzIGFzIHBhcmFtIGJlY2F1c2UgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgdGhlIGVudGl0eSBoYXMgYSBsaW5rZWRFbnRpdGllcyBibG9jayBpbiBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIGN1cnJlbnRSZXNwb25zZVBhdGggdGhlIGN1cnJlbnQgc3ViLW9iamVjdCBvZiB0aGUgcGFyZW50RW50aXRpZXMgcmVzcG9uc2Ugb2JqZWN0IHBhcnNlZCBhcyBjbGFzcyBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqIEByZXR1cm5zIFJlYWN0RWxlbWVudCB0aGUgY2xhc3MgZXhwcmVzc2lvbiBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGg6IGFueSwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgbGV0IHJlc3VsdCA9IDw+PC8+O1xuXG4gICAgLy8gbWVyZ2UgbGlua2VkRW50aXRpZXMgb2YgY3VycmVudFJlc3BvbnNlUGF0aCBpZiBjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzIGlzIG5vdCB1bmRlZmluZWRcbiAgICBsaW5rZWRFbnRpdGllcyA9IGxpbmtlZEVudGl0aWVzLm1lcmdlV2l0aChjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzKTtcblxuICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3BvbnNlUGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXN1bHQgPSBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGgsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aCkgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1widHlwZVwiXSkgJiYgY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0uaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMSkgeyAvLyBUT0RPOiBDb25jYXQgd2l0aCBlbHNlIHBhcnQ/IFNlZSByZWxhdGVkRnJvbSAoTWFuY2hlc3RlciBzeW50YXggZG9lcyBub3QgZ2V0IGRpc3BsYXllZCwgYnV0IG5laXRoZXIgaW4gb2xzNClcbiAgICAgICAgLy8gY3VycmVudCByZXNwb25zZSBwYXRoIGlzIHJlaWZpY2F0aW9uXG4gICAgICAgIHJlc3VsdCA9IGdldFJlaWZpZWRKU1gocGFyZW50RW50aXR5LCBSZWlmaWVkLmZyb21Kc29uPGFueT4oY3VycmVudFJlc3BvbnNlUGF0aClbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIHR5cGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgY29uc3Qgc29tZVZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc29tZVZhbHVlc0Zyb21cIl07XG4gICAgICAgIGNvbnN0IGFsbFZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjYWxsVmFsdWVzRnJvbVwiXTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnRlcnNlY3Rpb25PZlwiXSk7XG4gICAgICAgIGNvbnN0IHVuaW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN1bmlvbk9mXCJdKTtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzVmFsdWVcIl07XG4gICAgICAgIGNvbnN0IG1pbkNhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pbkNhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtaW5RdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgbWF4Q2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWF4Q2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heFF1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNjYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IGhhc1NlbGYgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzU2VsZlwiXTtcbiAgICAgICAgY29uc3QgY29tcGxlbWVudE9mID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NvbXBsZW1lbnRPZlwiXTtcbiAgICAgICAgY29uc3Qgb25lT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbmVPZlwiXSk7XG4gICAgICAgIGNvbnN0IGludmVyc2VPZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl07XG4gICAgICAgIGNvbnN0IG9uUHJvcGVydHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25Qcm9wZXJ0eVwiXTtcbiAgICAgICAgY29uc3Qgb25EYXRhVHlwZSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbkRhdGF0eXBlXCJdO1xuXG4gICAgICAgIGlmKG9uRGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25EYXRhVHlwZSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBjb25zdCB3aXRoUmVzdHJpY3Rpb25zID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjd2l0aFJlc3RyaWN0aW9uc1wiXSk7XG4gICAgICAgICAgICBpZih3aXRoUmVzdHJpY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+WzwvPik7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IHJlc3RyaWN0aW9uIG9mIHdpdGhSZXN0cmljdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNGaXJzdCkgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGVsZW1lbnRzLnB1c2goPD4sJm5ic3A7PC8+KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5FeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21pbkV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluSW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5JbmNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEV4Y2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWF4RXhjbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhJbmNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEluY2x1c2l2ZVwiXTtcblxuICAgICAgICAgICAgICAgICAgICBpZihtaW5FeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ3Q7IHttaW5FeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtaW5JbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ2U7IHttaW5JbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhFeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbHQ7IHttYXhFeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhJbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbGU7IHttYXhJbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+XTwvPik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IDw+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC8+XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc29tZVZhbHVlc0Zyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBzb21lIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KHNvbWVWYWx1ZXNGcm9tKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGxWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gb25seSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShhbGxWYWx1ZXNGcm9tKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnRlcnNlY3Rpb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIGludGVyc2VjdGlvbk9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPiBhbmQgPC9pPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDxzcGFuPntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHVuaW9uT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+IG9yIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gdmFsdWUgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoaGFzVmFsdWUpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbkNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gbWluIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KG1pbkNhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXhDYXJkaW5hbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1heCA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtYXhDYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBleGFjdGx5IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGNhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNTZWxmKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gU2VsZiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShoYXNTZWxmKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21wbGVtZW50T2YpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aT5ub3QgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoY29tcGxlbWVudE9mKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbmVPZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjM7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBvbmVPZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQ0OyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjU7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGludmVyc2VPZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT5pbnZlcnNlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgaW52ZXJzZU9mLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHNlY3Rpb24gbGlzdCBlbGVtZW50cyBzcGVjaWZpZWQgYXQgYGN1cnJlbnRSZXNwb25zZVBhdGhgXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXNcbiAqIEBwYXJhbSBhcnJheVxuICogQHBhcmFtIHNob3dCYWRnZXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkxpc3RKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBhcnJheTogYW55W10sIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7YXJyYXkubGVuZ3RoID09PSAxID8gKFxuICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgYXJyYXlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L3A+XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBpdGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+fVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEluc2VydHMgbGlua3MgaW50byB0ZXh0IChwb3RlbnRpYWxseSB3aXRoIGxhYmVsIGluc3RlYWQgb2YgbGluayBkaXNwbGF5ZWQgaWYgbGluayBleGlzdHMgYXMga2V5IGluc2lkZSBsaW5rZWRFbnRpdGllcykgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBwb3NzZXNzaW5nIHRoZSB3aG9sZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIGluc2VydCBsaW5rcyBpbnRvXG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoaWYgdW5kZWZpbmVkLCBubyBsYWJlbHMgYXJlIGluZmVycmVkKVxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZExpbmtzVG9UZXh0KHBhcmVudEVudGl0eTogVGhpbmcsIHRleHQ6IHN0cmluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzIHwgdW5kZWZpbmVkLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKSB7XG4gICAgY29uc3QgbGlua3NUb1NwbGljZTogQXJyYXk8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgbGluazogUmVhY3RFbGVtZW50IH0+ID1cbiAgICAgICAgW107XG5cbiAgICBpZihsaW5rZWRFbnRpdGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIE9iamVjdC5rZXlzKGxpbmtlZEVudGl0aWVzLmxpbmtlZEVudGl0aWVzKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgMCk7XG4gICAgICAgICAgICAgICAgbiAhPT0gLTE7XG4gICAgICAgICAgICAgICAgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBuLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG4gKyBlbnRpdHlJZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZW50aXR5SWQsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG4gKz0gZW50aXR5SWQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsUmUgPSAvW0Etel0rOlxcL1xcL1teXFxzXSsvZztcbiAgICBmb3IgKGxldCBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCk7IG1hdGNoOyBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbWF0Y2hbMF07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZm91bmQgbWF0Y2ggXCIgKyB1cmwpO1xuXG4gICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgdXJsLmxlbmd0aCxcbiAgICAgICAgICAgIGxpbms6IChcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17dXJsfT57dXJsfTwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsaW5rc1RvU3BsaWNlLnNvcnQoKGEsYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gICAgcmVtb3ZlT3ZlcmxhcHBpbmc6IGZvciAobGV0IG4gPSAwOyBuIDwgbGlua3NUb1NwbGljZS5sZW5ndGg7ICkge1xuICAgICAgICBmb3IgKGxldCBuMiA9IG4gKyAxOyBuMiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyArK24yKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpY2VBID0gbGlua3NUb1NwbGljZVtuXTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGljZUIgPSBsaW5rc1RvU3BsaWNlW24yXTtcblxuICAgICAgICAgICAgaWYgKHNwbGljZUEgPT09IHNwbGljZUIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgc3BsaWNlcyBvdmVybGFwIGlmIG5laXRoZXIgZW5kcyBiZWZvcmUgdGhlIG90aGVyIHN0YXJ0c1xuICAgICAgICAgICAgaWYgKHNwbGljZUEuZW5kID49IHNwbGljZUIuc3RhcnQgJiYgc3BsaWNlQi5lbmQgPj0gc3BsaWNlQS5zdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiUmVtb3Zpbmcgb3ZlcmxhcHBpbmdcIik7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHNob3J0ZXIgbGluayBvZiBib3RoXG4gICAgICAgICAgICAgICAgaWYoc3BsaWNlQS5lbmQgLSBzcGxpY2VBLnN0YXJ0IDwgc3BsaWNlQi5lbmQgLSBzcGxpY2VCLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5zcGxpY2UobjIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZSByZW1vdmVPdmVybGFwcGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICArK247XG4gICAgfVxuXG4gICAgaWYgKGxpbmtzVG9TcGxpY2UubGVuZ3RoID09PSAwKSByZXR1cm4gPD57dGV4dH08Lz47XG5cbiAgICBjb25zdCByZXM6IFJlYWN0RWxlbWVudFtdID0gW107XG4gICAgbGV0IG4gPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzVG9TcGxpY2UpIHtcbiAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICB7dGV4dC5zdWJzdHJpbmcobiwgbGluay5zdGFydCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgICAgIHJlcy5wdXNoKGxpbmsubGluayk7XG4gICAgICAgIG4gPSBsaW5rLmVuZDtcbiAgICB9XG4gICAgcmVzLnB1c2goXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9Pnt0ZXh0LnNsaWNlKG4pfTwvc3Bhbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIDw+e3Jlc308Lz47XG59XG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZ2l2ZW4gUmVpZmllZFxuICogQHBhcmFtIGVudGl0eSB0aGUgZW50aXR5IHRoZSBSZWlmaWVkIGV4aXN0cyBpblxuICogQHBhcmFtIHJlaWZpZWQgdGhlIFJlaWZpZWRcbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVpZmllZEpTWChlbnRpdHk6IFRoaW5nLCByZWlmaWVkOiBSZWlmaWVkPGFueT4sIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGZ1bmN0aW9uIGdldFZhbHVlSlNYKHZhbHVlOiBSZWlmaWVkPGFueT4pOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpO1xuXG4gICAgICAgIC8vIGxpbmtlZEVudGl0aWVzIG5vdCBleGlzdGVudCBvbiBlbnRpdHkgKC0+IHByb2JhYmx5IGxlZ2FjeSBhcGkgdmVyc2lvbilcbiAgICAgICAgaWYoT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRMaW5rc1RvVGV4dChlbnRpdHksIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCksIHVuZGVmaW5lZCwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIG5vdCBoYXBwZW4sIHByb3ZlIHRoYXQgdGhpcyBpcyBuZXZlciB0aGUgY2FzZVxuICAgICAgICAgICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gbGlua2VkRW50aXRpZXMuZ2V0KHZhbHVlLnZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtlZEVudGl0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRFbnRpdHlMaW5rSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVudGl0eS5nZXRUeXBlKCkgPT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBsaW5rZWRFbnRpdGllcywgdmFsdWUudmFsdWUsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KGVudGl0eSwgdmFsdWUudmFsdWUudG9TdHJpbmcoKSwgbGlua2VkRW50aXRpZXMsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2dldFZhbHVlSlNYKHJlaWZpZWQpfVxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICB7cmVpZmllZC5oYXNNZXRhZGF0YSgpICYmIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKGVudGl0eSwgcmVpZmllZC5nZXRNZXRhZGF0YSgpKX1cbiAgICAgICAgPC8+XG4gICAgKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCdXR0b24sIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0pzb25BcGlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuXG5mdW5jdGlvbiBKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGlRdWVyeSwgYnV0dG9uVGV4dCwgYnV0dG9uU2l6ZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQnV0dG9uIGhyZWY9e2FwaVF1ZXJ5fSB0YXJnZXQ9XCJfYmxhbmtcIiBzaXplPXtidXR0b25TaXplIHx8IFwibVwifT57YnV0dG9uVGV4dH08L0V1aUJ1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSnNvbkFwaShwcm9wczogSnNvbkFwaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SnNvbkFwaVdpZGdldFxuICAgICAgICAgICAgICBhcGlRdWVyeT17cHJvcHMuYXBpUXVlcnl9XG4gICAgICAgICAgICAgIGJ1dHRvblRleHQ9e3Byb3BzLmJ1dHRvblRleHR9XG4gICAgICAgICAgICAgIGJ1dHRvblNpemU9e3Byb3BzLmJ1dHRvblNpemV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBKc29uQXBpV2lkZ2V0LCBjcmVhdGVKc29uQXBpIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZSwgRXVpSWNvbiwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtCcmVhZGNydW1iV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgb250b2xvZ3lJZCwgaXJpLCBlbnRpdHlUeXBlLCBjb2xvckZpcnN0LCBjb2xvclNlY29uZCwgcGFyYW1ldGVyICwgdXNlTGVnYWN5LCBvbk5hdmlnYXRlVG9PbnRvbG9neX0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1wiYnJlYWRjcnVtYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSAmJiBwcm9wcy5vbnRvbG9neUlkKSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShwcm9wcy5vbnRvbG9neUlkIHx8IFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKX19PlxuICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9e3Byb3BzLm9udG9sb2d5SWQgPyBcImJyZWFkY3J1bWIgY2xpY2thYmxlLWJyZWFkY3J1bWJcIiA6IFwiYnJlYWRjcnVtYlwifSBjb2xvcj17Y29sb3JGaXJzdCB8fCAoKHByb3BzLm9udG9sb2d5SWQpID8gXCJwcmltYXJ5XCIgOiBcIndhcm5pbmdcIil9Pntwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgJm5ic3A7PEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIi8+Jm5ic3A7XG4gICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPVwiYnJlYWRjcnVtYlwiIGNvbG9yPXtjb2xvclNlY29uZCB8fCBcIndhcm5pbmdcIn0+ezxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgY29sb3JGaXJzdD17Y29sb3JGaXJzdH1cbiAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmR9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3Byb3BzLm9udG9sb2d5SWQ/LnRvVXBwZXJDYXNlKCkgfHwgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkudG9VcHBlckNhc2UoKSkgfHwgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5XCIpfVxuICAgICAgICAgICAgICBzaG9ydEZvcm09eyhkYXRhICYmIGRhdGEuZ2V0U2hvcnRGb3JtKCkpID8gZGF0YS5nZXRTaG9ydEZvcm0oKS50b1VwcGVyQ2FzZSgpIDogXCJcIn1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCAoZGF0YSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpKSkgPyBcInByaW1hcnlcIiA6IFwiZGFuZ2VyXCIpfVxuICAgICAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmQgfHwgKChkYXRhICYmIGRhdGEuZ2V0U2hvcnRGb3JtKCkpID8gXCJzdWNjZXNzXCIgOiBcImRhbmdlclwiKX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICB9XG4gICAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnJlYWRjcnVtYihwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgY29sb3JGaXJzdD17cHJvcHMuY29sb3JGaXJzdH1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e3Byb3BzLmNvbG9yU2Vjb25kfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEJyZWFkY3J1bWJXaWRnZXQsIGNyZWF0ZUJyZWFkY3J1bWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtEZXNjcmlwdGlvbldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBOT19ERVNDUklQVElPTiA9IFwiTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLlwiO1xuXG5mdW5jdGlvbiBEZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgb250b2xvZ3lJZCwgaXJpLCBkZXNjVGV4dCwgdGhpbmdUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJkZXNjcmlwdGlvblwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvbiBkZXNjcmlwdGlvbj17ZGF0YS5nZXREZXNjcmlwdGlvbigpIHx8IE5PX0RFU0NSSVBUSU9OfSBkZXNjVGV4dD17ZGVzY1RleHR9IHsuLi5yZXN0fS8+XG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlc2NyaXB0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxEZXNjcmlwdGlvbldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGRlc2NUZXh0PXtwcm9wcy5kZXNjVGV4dH1cbiAgICAgICAgICAgICAgdGhpbmdUeXBlPXtwcm9wcy50aGluZ1R5cGV9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgRGVzY3JpcHRpb25XaWRnZXQsIGNyZWF0ZURlc2NyaXB0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7RGVzY3JpcHRpb25QcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBEZXNjcmlwdGlvblByZXNlbnRhdGlvbihwcm9wczogRGVzY3JpcHRpb25QcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCB7ZGVzY1RleHQsIGRlc2NyaXB0aW9uLCAuLi5yZXN0fSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT57ZGVzY1RleHQgfHwgZGVzY3JpcHRpb259PC9FdWlUZXh0PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEl0ZW0sIEV1aUxpbmssIEV1aVByb3ZpZGVyLCBFdWlCdXR0b25JY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0lyaVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzRXVpTGlua0NvbG9yLCBpc0hleENvbG9yLCBpc1JnYkNvbG9yfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcblxuZnVuY3Rpb24gSXJpV2lkZ2V0KHByb3BzOiBJcmlXaWRnZXRQcm9wcykgeyAgICAgICBcbiAgY29uc3QgeyBpcmksIGlyaVRleHQsIGNvbG9yLCBleHRlcm5hbEljb24sIHVybFByZWZpeCwgY29weUJ1dHRvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID0gdHlwZW9mKHVybFByZWZpeCkgIT09IFwidW5kZWZpbmVkXCIgJiYgdXJsUHJlZml4ICE9PSBcIlwiID8gdHJ1ZSA6IGZhbHNlO1xuICBjb25zdCBpcmlVcmwgPSB1cmxQcmVmaXhFeGlzdCA/IHVybFByZWZpeCArIGVuY29kZVVSSUNvbXBvbmVudChpcmkpIDogaXJpO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQnV0dG9uSWNvbiBcbiAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiXG4gICAgICAgICAgaWNvblR5cGU9XCJjb3B5XCIgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3NldENvcGllZChmYWxzZSk7fSwgMjAwMCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIH19XG4gICAgICAgICAgPiAgICAgICAgICAgIFxuICAgICAgICA8L0V1aUJ1dHRvbkljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUJ1dHRvbkljb24gXG4gICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSAgIFxuICAgICAgICBkaXNwbGF5PVwiYmFzZVwiIFxuICAgICAgICBpY29uVHlwZT1cImNoZWNrXCIgXG4gICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgID5cbiAgICAgIDwvRXVpQnV0dG9uSWNvbj5cbiAgICApOyAgICBcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8RXVpTGluayBcbiAgICAgICAgICBocmVmPXtpcmlVcmx9IFxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiIFxuICAgICAgICAgIHN0eWxlPXt7Y29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgZXh0ZXJuYWw9e2V4dGVybmFsSWNvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAge2lyaVRleHQgPyBpcmlUZXh0IDogaXJpfSAgICAgICAgICBcbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICB7Y29weUJ1dHRvbiAmJiA8Q29weUxpbmtCdXR0b24gLz59XG4gICAgICA8L2Rpdj5cbiAgICA8L0V1aUZsZXhJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJcmkocHJvcHM6IElyaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHsgICAgICAgXG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRJcmlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZElyaVdpZGdldChwcm9wczogSXJpV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpOyAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxJcmlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGlyaVRleHQ9e3Byb3BzLmlyaVRleHR9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxJY29uPXtwcm9wcy5leHRlcm5hbEljb259XG4gICAgICAgICAgICAgICAgICAgIHVybFByZWZpeD17cHJvcHMudXJsUHJlZml4fVxuICAgICAgICAgICAgICAgICAgICBjb3B5QnV0dG9uPXtwcm9wcy5jb3B5QnV0dG9ufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBJcmlXaWRnZXQsIGNyZWF0ZUlyaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7VGFiV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZSwgaXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PEVudGl0eT4oXG4gICAgW1widGFiZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogRW50aXR5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUYWJQcmVzZW50YXRpb24gey4uLnJlc3R9XG4gICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgIGlyaT17aXJpfVxuICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgdXNlTGVnYWN5PXt1c2VMZWdhY3l9XG4gICAgICAgIGVudGl0eVR5cGU9e2RhdGEuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlc2NyaXB0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YSkgPyByZW5kZXIoZGF0YSkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGFiKHByb3BzOiBUYWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUYWJXaWRnZXQocHJvcHM6IFRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFRhYldpZGdldFxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFRhYldpZGdldCwgY3JlYXRlVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEl0ZW0sIEV1aVRhYmJlZENvbnRlbnQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHlXaWRnZXRPTFMgfSBmcm9tIFwiLi9IaWVyYXJjaHlXaWRnZXRcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSwgaXNJbmRpdmlkdWFsLCBpc1Byb3BlcnR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkIH0gZnJvbSBcIi4vSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7VGFiUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gVGFiUHJlc2VudGF0aW9uKHByb3BzOiBUYWJQcmVzZW50YXRpb25Qcm9wcykge1xuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogRW50aXR5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgICAgPEV1aVRhYmJlZENvbnRlbnQgc2l6ZT1cInNcIiB0YWJzPXtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gc3lub255bXM9e2RhdGEuZ2V0U3lub255bXMoKS5tYXAoc3lub255bSA9PiBzeW5vbnltLnZhbHVlKX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGlkOiBcInRhYjFcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkFsdGVybmF0aXZlIE5hbWVzXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgb3ZlcmZsb3c6IFwiYXV0b1wifX0+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy51c2VMZWdhY3kgPT0gdW5kZWZpbmVkIHx8IHByb3BzLnVzZUxlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgID8gPEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgfHwgKChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpICE9PSB1bmRlZmluZWQpID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG5cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDogPEhpZXJhcmNoeVdpZGdldE9MU1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgfHwgKChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpICE9PSB1bmRlZmluZWQpID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaWQ6IFwidGFiMlwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSGllcmFyY2h5XCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6XG4gICAgICAgICAgICAgICAgICA8Q3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gY3Jvc3NyZWZzPXtSZWlmaWVkLmZyb21Kc29uKGRhdGEuZ2V0Q3Jvc3NSZWZlcmVuY2VzKCkpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgfSl9IC8+LFxuICAgICAgICAgICAgICAgIGlkOiBcInRhYjNcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNyb3NzIHJlZmVyZW5jZXNcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSAvPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0VudGl0eShwcm9wcy5kYXRhKSB8fCBpc1Byb3BlcnR5KHByb3BzLmRhdGEpIHx8IGlzSW5kaXZpZHVhbChwcm9wcy5kYXRhKSA/IHJlbmRlcihwcm9wcy5kYXRhKSA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCB7RXVpUGFuZWwsIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCJAemJtZWQvb2xzLXRyZWV2aWV3XCJcbmltcG9ydCBcIi4uLy4uLy4uLy4uLy4uL3N0eWxlL3RyZWVzdHlsZXMuY3NzXCI7XG5pbXBvcnQge0hpZXJhcmNoeVdpZGdldE9MU1Byb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBIaWVyYXJjaHlXaWRnZXRPTFMgPSAocHJvcHM6IEhpZXJhcmNoeVdpZGdldE9MU1Byb3BzKSA9PiB7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0cmVlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RyZWVfY29udGFpbmVyJyk7XG4gICAgKHdpbmRvdyBhcyBhbnkpW1wiT0xTV2lkZ2V0c1wiXS5jcmVhdGVFbnRpdHlUcmVlKHtcbiAgICAgIGlyaTogcHJvcHMuaXJpLFxuICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgIGFwaVVybDogcHJvcHMuYXBpLnN1YnN0cmluZygwLCBwcm9wcy5hcGkubGFzdEluZGV4T2YoXCJhcGlcIikpLFxuICAgICAgZW50aXR5VHlwZTogKHByb3BzLmVudGl0eVR5cGUgPyBwbHVyYWxpemVUeXBlKHByb3BzLmVudGl0eVR5cGUsIGZhbHNlKSA6IHVuZGVmaW5lZCkgfHwgXCJlbnRpdGllc1wiLFxuICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkgPyBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkgOiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBuYXZpZ2F0ZSB0byBlbnRpdHkgd2l0aCBvbnRvbG9neUlkOiAke29udG9sb2d5SWR9LCBlbnRpdHlUeXBlOiAke2VudGl0eVR5cGV9LCBpcmk6ICR7aXJpfWAsKTtcbiAgICAgIH0sXG4gICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgPyBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSA6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU6IHN0cmluZywgaXJpOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYG5hdmlnYXRlIHRvIG9udG9sb2d5IHdpdGggb250b2xvZ3lJZDogJHtvbnRvbG9neUlkfSwgZW50aXR5VHlwZTogJHtlbnRpdHlUeXBlfSwgaXJpOiAke2lyaX1gLCk7XG4gICAgICB9XG4gICAgfSwgdHJlZUNvbnRhaW5lcik7XG4gIH0sIFtwcm9wcy5hcGksIHByb3BzLmlyaSwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgXCJIaWVyYXJjaHlXaWRnZXRPTFNcIl0pO1xuXG4gIHJldHVybiAoXG4gICAgLy9taW5XaWR0aCByZXF1aXJlZCB3b3JrYXJvdW5kIHVudGlsIG92ZXJsYXBwaW5nIGNoZWNrYm94ZXMgYXJlIGZpeGVkIGluIG9sczQtd2lkZ2V0c1xuICAgIDxFdWlQYW5lbCBzdHlsZT17e21pbldpZHRoOiBcIjYwMHB4XCJ9fT5cbiAgICAgIDxkaXYgaWQ9XCJ0cmVlX2NvbnRhaW5lclwiLz5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5T0xTKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkSGllcmFyY2h5V2lkZ2V0T0xTKHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRIaWVyYXJjaHlXaWRnZXRPTFMocHJvcHM6IEhpZXJhcmNoeVdpZGdldE9MU1Byb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPEhpZXJhcmNoeVdpZGdldE9MU1xuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBIaWVyYXJjaHlXaWRnZXRPTFMsIGNyZWF0ZUhpZXJhcmNoeU9MUyB9O1xuIiwgIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgbD1yZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKSxuPTYwMTAzLHA9NjAxMDY7ZXhwb3J0cy5GcmFnbWVudD02MDEwNztleHBvcnRzLlN0cmljdE1vZGU9NjAxMDg7ZXhwb3J0cy5Qcm9maWxlcj02MDExNDt2YXIgcT02MDEwOSxyPTYwMTEwLHQ9NjAxMTI7ZXhwb3J0cy5TdXNwZW5zZT02MDExMzt2YXIgdT02MDExNSx2PTYwMTE2O1xuaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIHc9U3ltYm9sLmZvcjtuPXcoXCJyZWFjdC5lbGVtZW50XCIpO3A9dyhcInJlYWN0LnBvcnRhbFwiKTtleHBvcnRzLkZyYWdtZW50PXcoXCJyZWFjdC5mcmFnbWVudFwiKTtleHBvcnRzLlN0cmljdE1vZGU9dyhcInJlYWN0LnN0cmljdF9tb2RlXCIpO2V4cG9ydHMuUHJvZmlsZXI9dyhcInJlYWN0LnByb2ZpbGVyXCIpO3E9dyhcInJlYWN0LnByb3ZpZGVyXCIpO3I9dyhcInJlYWN0LmNvbnRleHRcIik7dD13KFwicmVhY3QuZm9yd2FyZF9yZWZcIik7ZXhwb3J0cy5TdXNwZW5zZT13KFwicmVhY3Quc3VzcGVuc2VcIik7dT13KFwicmVhY3QubWVtb1wiKTt2PXcoXCJyZWFjdC5sYXp5XCIpfXZhciB4PVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtcbmZ1bmN0aW9uIHkoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSlyZXR1cm4gbnVsbDthPXgmJmFbeF18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH1mdW5jdGlvbiB6KGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifVxudmFyIEE9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LEI9e307ZnVuY3Rpb24gQyhhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfUMucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e307Qy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYSxiKXtpZihcIm9iamVjdFwiIT09dHlwZW9mIGEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZudWxsIT1hKXRocm93IEVycm9yKHooODUpKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsYSxiLFwic2V0U3RhdGVcIil9O0MucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxhLFwiZm9yY2VVcGRhdGVcIil9O1xuZnVuY3Rpb24gRCgpe31ELnByb3RvdHlwZT1DLnByb3RvdHlwZTtmdW5jdGlvbiBFKGEsYixjKXt0aGlzLnByb3BzPWE7dGhpcy5jb250ZXh0PWI7dGhpcy5yZWZzPUI7dGhpcy51cGRhdGVyPWN8fEF9dmFyIEY9RS5wcm90b3R5cGU9bmV3IEQ7Ri5jb25zdHJ1Y3Rvcj1FO2woRixDLnByb3RvdHlwZSk7Ri5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgRz17Y3VycmVudDpudWxsfSxIPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksST17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gSihhLGIsYyl7dmFyIGUsZD17fSxrPW51bGwsaD1udWxsO2lmKG51bGwhPWIpZm9yKGUgaW4gdm9pZCAwIT09Yi5yZWYmJihoPWIucmVmKSx2b2lkIDAhPT1iLmtleSYmKGs9XCJcIitiLmtleSksYilILmNhbGwoYixlKSYmIUkuaGFzT3duUHJvcGVydHkoZSkmJihkW2VdPWJbZV0pO3ZhciBnPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09ZylkLmNoaWxkcmVuPWM7ZWxzZSBpZigxPGcpe2Zvcih2YXIgZj1BcnJheShnKSxtPTA7bTxnO20rKylmW21dPWFyZ3VtZW50c1ttKzJdO2QuY2hpbGRyZW49Zn1pZihhJiZhLmRlZmF1bHRQcm9wcylmb3IoZSBpbiBnPWEuZGVmYXVsdFByb3BzLGcpdm9pZCAwPT09ZFtlXSYmKGRbZV09Z1tlXSk7cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLGtleTprLHJlZjpoLHByb3BzOmQsX293bmVyOkcuY3VycmVudH19XG5mdW5jdGlvbiBLKGEsYil7cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsa2V5OmIscmVmOmEucmVmLHByb3BzOmEucHJvcHMsX293bmVyOmEuX293bmVyfX1mdW5jdGlvbiBMKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1ufWZ1bmN0aW9uIGVzY2FwZShhKXt2YXIgYj17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrYS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV19KX12YXIgTT0vXFwvKy9nO2Z1bmN0aW9uIE4oYSxiKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZudWxsIT1hLmtleT9lc2NhcGUoXCJcIithLmtleSk6Yi50b1N0cmluZygzNil9XG5mdW5jdGlvbiBPKGEsYixjLGUsZCl7dmFyIGs9dHlwZW9mIGE7aWYoXCJ1bmRlZmluZWRcIj09PWt8fFwiYm9vbGVhblwiPT09aylhPW51bGw7dmFyIGg9ITE7aWYobnVsbD09PWEpaD0hMDtlbHNlIHN3aXRjaChrKXtjYXNlIFwic3RyaW5nXCI6Y2FzZSBcIm51bWJlclwiOmg9ITA7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOnN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIG46Y2FzZSBwOmg9ITB9fWlmKGgpcmV0dXJuIGg9YSxkPWQoaCksYT1cIlwiPT09ZT9cIi5cIitOKGgsMCk6ZSxBcnJheS5pc0FycmF5KGQpPyhjPVwiXCIsbnVsbCE9YSYmKGM9YS5yZXBsYWNlKE0sXCIkJi9cIikrXCIvXCIpLE8oZCxiLGMsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYX0pKTpudWxsIT1kJiYoTChkKSYmKGQ9SyhkLGMrKCFkLmtleXx8aCYmaC5rZXk9PT1kLmtleT9cIlwiOihcIlwiK2Qua2V5KS5yZXBsYWNlKE0sXCIkJi9cIikrXCIvXCIpK2EpKSxiLnB1c2goZCkpLDE7aD0wO2U9XCJcIj09PWU/XCIuXCI6ZStcIjpcIjtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgZz1cbjA7ZzxhLmxlbmd0aDtnKyspe2s9YVtnXTt2YXIgZj1lK04oayxnKTtoKz1PKGssYixjLGYsZCl9ZWxzZSBpZihmPXkoYSksXCJmdW5jdGlvblwiPT09dHlwZW9mIGYpZm9yKGE9Zi5jYWxsKGEpLGc9MDshKGs9YS5uZXh0KCkpLmRvbmU7KWs9ay52YWx1ZSxmPWUrTihrLGcrKyksaCs9TyhrLGIsYyxmLGQpO2Vsc2UgaWYoXCJvYmplY3RcIj09PWspdGhyb3cgYj1cIlwiK2EsRXJyb3IoeigzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09Yj9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGEpLmpvaW4oXCIsIFwiKStcIn1cIjpiKSk7cmV0dXJuIGh9ZnVuY3Rpb24gUChhLGIsYyl7aWYobnVsbD09YSlyZXR1cm4gYTt2YXIgZT1bXSxkPTA7TyhhLGUsXCJcIixcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBiLmNhbGwoYyxhLGQrKyl9KTtyZXR1cm4gZX1cbmZ1bmN0aW9uIFEoYSl7aWYoLTE9PT1hLl9zdGF0dXMpe3ZhciBiPWEuX3Jlc3VsdDtiPWIoKTthLl9zdGF0dXM9MDthLl9yZXN1bHQ9YjtiLnRoZW4oZnVuY3Rpb24oYil7MD09PWEuX3N0YXR1cyYmKGI9Yi5kZWZhdWx0LGEuX3N0YXR1cz0xLGEuX3Jlc3VsdD1iKX0sZnVuY3Rpb24oYil7MD09PWEuX3N0YXR1cyYmKGEuX3N0YXR1cz0yLGEuX3Jlc3VsdD1iKX0pfWlmKDE9PT1hLl9zdGF0dXMpcmV0dXJuIGEuX3Jlc3VsdDt0aHJvdyBhLl9yZXN1bHQ7fXZhciBSPXtjdXJyZW50Om51bGx9O2Z1bmN0aW9uIFMoKXt2YXIgYT1SLmN1cnJlbnQ7aWYobnVsbD09PWEpdGhyb3cgRXJyb3IoeigzMjEpKTtyZXR1cm4gYX12YXIgVD17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpSLFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOnt0cmFuc2l0aW9uOjB9LFJlYWN0Q3VycmVudE93bmVyOkcsSXNTb21lUmVuZGVyZXJBY3Rpbmc6e2N1cnJlbnQ6ITF9LGFzc2lnbjpsfTtcbmV4cG9ydHMuQ2hpbGRyZW49e21hcDpQLGZvckVhY2g6ZnVuY3Rpb24oYSxiLGMpe1AoYSxmdW5jdGlvbigpe2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxjKX0sY291bnQ6ZnVuY3Rpb24oYSl7dmFyIGI9MDtQKGEsZnVuY3Rpb24oKXtiKyt9KTtyZXR1cm4gYn0sdG9BcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gUChhLGZ1bmN0aW9uKGEpe3JldHVybiBhfSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGEpe2lmKCFMKGEpKXRocm93IEVycm9yKHooMTQzKSk7cmV0dXJuIGF9fTtleHBvcnRzLkNvbXBvbmVudD1DO2V4cG9ydHMuUHVyZUNvbXBvbmVudD1FO2V4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9VDtcbmV4cG9ydHMuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGEsYixjKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl0aHJvdyBFcnJvcih6KDI2NyxhKSk7dmFyIGU9bCh7fSxhLnByb3BzKSxkPWEua2V5LGs9YS5yZWYsaD1hLl9vd25lcjtpZihudWxsIT1iKXt2b2lkIDAhPT1iLnJlZiYmKGs9Yi5yZWYsaD1HLmN1cnJlbnQpO3ZvaWQgMCE9PWIua2V5JiYoZD1cIlwiK2Iua2V5KTtpZihhLnR5cGUmJmEudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGc9YS50eXBlLmRlZmF1bHRQcm9wcztmb3IoZiBpbiBiKUguY2FsbChiLGYpJiYhSS5oYXNPd25Qcm9wZXJ0eShmKSYmKGVbZl09dm9pZCAwPT09YltmXSYmdm9pZCAwIT09Zz9nW2ZdOmJbZl0pfXZhciBmPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09ZillLmNoaWxkcmVuPWM7ZWxzZSBpZigxPGYpe2c9QXJyYXkoZik7Zm9yKHZhciBtPTA7bTxmO20rKylnW21dPWFyZ3VtZW50c1ttKzJdO2UuY2hpbGRyZW49Z31yZXR1cm57JCR0eXBlb2Y6bix0eXBlOmEudHlwZSxcbmtleTpkLHJlZjprLHByb3BzOmUsX293bmVyOmh9fTtleHBvcnRzLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1udWxsKTthPXskJHR5cGVvZjpyLF9jYWxjdWxhdGVDaGFuZ2VkQml0czpiLF9jdXJyZW50VmFsdWU6YSxfY3VycmVudFZhbHVlMjphLF90aHJlYWRDb3VudDowLFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbH07YS5Qcm92aWRlcj17JCR0eXBlb2Y6cSxfY29udGV4dDphfTtyZXR1cm4gYS5Db25zdW1lcj1hfTtleHBvcnRzLmNyZWF0ZUVsZW1lbnQ9SjtleHBvcnRzLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oYSl7dmFyIGI9Si5iaW5kKG51bGwsYSk7Yi50eXBlPWE7cmV0dXJuIGJ9O2V4cG9ydHMuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O2V4cG9ydHMuZm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6dCxyZW5kZXI6YX19O2V4cG9ydHMuaXNWYWxpZEVsZW1lbnQ9TDtcbmV4cG9ydHMubGF6eT1mdW5jdGlvbihhKXtyZXR1cm57JCR0eXBlb2Y6dixfcGF5bG9hZDp7X3N0YXR1czotMSxfcmVzdWx0OmF9LF9pbml0OlF9fTtleHBvcnRzLm1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm57JCR0eXBlb2Y6dSx0eXBlOmEsY29tcGFyZTp2b2lkIDA9PT1iP251bGw6Yn19O2V4cG9ydHMudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNhbGxiYWNrKGEsYil9O2V4cG9ydHMudXNlQ29udGV4dD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlQ29udGV4dChhLGIpfTtleHBvcnRzLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudXNlRWZmZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VFZmZlY3QoYSxiKX07ZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUygpLnVzZUltcGVyYXRpdmVIYW5kbGUoYSxiLGMpfTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VMYXlvdXRFZmZlY3QoYSxiKX07ZXhwb3J0cy51c2VNZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VNZW1vKGEsYil9O2V4cG9ydHMudXNlUmVkdWNlcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VSZWR1Y2VyKGEsYixjKX07ZXhwb3J0cy51c2VSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIFMoKS51c2VSZWYoYSl9O2V4cG9ydHMudXNlU3RhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIFMoKS51c2VTdGF0ZShhKX07ZXhwb3J0cy52ZXJzaW9uPVwiMTcuMC4yXCI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGYsZyxoLGs7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdyl7dmFyIGw9cGVyZm9ybWFuY2U7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gbC5ub3coKX19ZWxzZXt2YXIgcD1EYXRlLHE9cC5ub3coKTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBwLm5vdygpLXF9fVxuaWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIHQ9bnVsbCx1PW51bGwsdz1mdW5jdGlvbigpe2lmKG51bGwhPT10KXRyeXt2YXIgYT1leHBvcnRzLnVuc3RhYmxlX25vdygpO3QoITAsYSk7dD1udWxsfWNhdGNoKGIpe3Rocm93IHNldFRpbWVvdXQodywwKSxiO319O2Y9ZnVuY3Rpb24oYSl7bnVsbCE9PXQ/c2V0VGltZW91dChmLDAsYSk6KHQ9YSxzZXRUaW1lb3V0KHcsMCkpfTtnPWZ1bmN0aW9uKGEsYil7dT1zZXRUaW1lb3V0KGEsYil9O2g9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSl9O2V4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX07az1leHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKCl7fX1lbHNle3ZhciB4PXdpbmRvdy5zZXRUaW1lb3V0LHk9d2luZG93LmNsZWFyVGltZW91dDtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGNvbnNvbGUpe3ZhciB6PVxud2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lJiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHNcIik7XCJmdW5jdGlvblwiIT09dHlwZW9mIHomJmNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpfXZhciBBPSExLEI9bnVsbCxDPS0xLEQ9NSxFPTA7ZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1mdW5jdGlvbigpe3JldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpPj1cbkV9O2s9ZnVuY3Rpb24oKXt9O2V4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7MD5hfHwxMjU8YT9jb25zb2xlLmVycm9yKFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCIpOkQ9MDxhP01hdGguZmxvb3IoMUUzL2EpOjV9O3ZhciBGPW5ldyBNZXNzYWdlQ2hhbm5lbCxHPUYucG9ydDI7Ri5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtpZihudWxsIT09Qil7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtFPWErRDt0cnl7QighMCxhKT9HLnBvc3RNZXNzYWdlKG51bGwpOihBPSExLEI9bnVsbCl9Y2F0Y2goYil7dGhyb3cgRy5wb3N0TWVzc2FnZShudWxsKSxiO319ZWxzZSBBPSExfTtmPWZ1bmN0aW9uKGEpe0I9YTtBfHwoQT0hMCxHLnBvc3RNZXNzYWdlKG51bGwpKX07Zz1mdW5jdGlvbihhLGIpe0M9XG54KGZ1bmN0aW9uKCl7YShleHBvcnRzLnVuc3RhYmxlX25vdygpKX0sYil9O2g9ZnVuY3Rpb24oKXt5KEMpO0M9LTF9fWZ1bmN0aW9uIEgoYSxiKXt2YXIgYz1hLmxlbmd0aDthLnB1c2goYik7YTpmb3IoOzspe3ZhciBkPWMtMT4+PjEsZT1hW2RdO2lmKHZvaWQgMCE9PWUmJjA8SShlLGIpKWFbZF09YixhW2NdPWUsYz1kO2Vsc2UgYnJlYWsgYX19ZnVuY3Rpb24gSihhKXthPWFbMF07cmV0dXJuIHZvaWQgMD09PWE/bnVsbDphfVxuZnVuY3Rpb24gSyhhKXt2YXIgYj1hWzBdO2lmKHZvaWQgMCE9PWIpe3ZhciBjPWEucG9wKCk7aWYoYyE9PWIpe2FbMF09YzthOmZvcih2YXIgZD0wLGU9YS5sZW5ndGg7ZDxlOyl7dmFyIG09MiooZCsxKS0xLG49YVttXSx2PW0rMSxyPWFbdl07aWYodm9pZCAwIT09biYmMD5JKG4sYykpdm9pZCAwIT09ciYmMD5JKHIsbik/KGFbZF09cixhW3ZdPWMsZD12KTooYVtkXT1uLGFbbV09YyxkPW0pO2Vsc2UgaWYodm9pZCAwIT09ciYmMD5JKHIsYykpYVtkXT1yLGFbdl09YyxkPXY7ZWxzZSBicmVhayBhfX1yZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBJKGEsYil7dmFyIGM9YS5zb3J0SW5kZXgtYi5zb3J0SW5kZXg7cmV0dXJuIDAhPT1jP2M6YS5pZC1iLmlkfXZhciBMPVtdLE09W10sTj0xLE89bnVsbCxQPTMsUT0hMSxSPSExLFM9ITE7XG5mdW5jdGlvbiBUKGEpe2Zvcih2YXIgYj1KKE0pO251bGwhPT1iOyl7aWYobnVsbD09PWIuY2FsbGJhY2spSyhNKTtlbHNlIGlmKGIuc3RhcnRUaW1lPD1hKUsoTSksYi5zb3J0SW5kZXg9Yi5leHBpcmF0aW9uVGltZSxIKEwsYik7ZWxzZSBicmVhaztiPUooTSl9fWZ1bmN0aW9uIFUoYSl7Uz0hMTtUKGEpO2lmKCFSKWlmKG51bGwhPT1KKEwpKVI9ITAsZihWKTtlbHNle3ZhciBiPUooTSk7bnVsbCE9PWImJmcoVSxiLnN0YXJ0VGltZS1hKX19XG5mdW5jdGlvbiBWKGEsYil7Uj0hMTtTJiYoUz0hMSxoKCkpO1E9ITA7dmFyIGM9UDt0cnl7VChiKTtmb3IoTz1KKEwpO251bGwhPT1PJiYoIShPLmV4cGlyYXRpb25UaW1lPmIpfHxhJiYhZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCgpKTspe3ZhciBkPU8uY2FsbGJhY2s7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe08uY2FsbGJhY2s9bnVsbDtQPU8ucHJpb3JpdHlMZXZlbDt2YXIgZT1kKE8uZXhwaXJhdGlvblRpbWU8PWIpO2I9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZT9PLmNhbGxiYWNrPWU6Tz09PUooTCkmJksoTCk7VChiKX1lbHNlIEsoTCk7Tz1KKEwpfWlmKG51bGwhPT1PKXZhciBtPSEwO2Vsc2V7dmFyIG49SihNKTtudWxsIT09biYmZyhVLG4uc3RhcnRUaW1lLWIpO209ITF9cmV0dXJuIG19ZmluYWxseXtPPW51bGwsUD1jLFE9ITF9fXZhciBXPWs7ZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NTtcbmV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTtleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQ7ZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zO2V4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7ZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT0yO2V4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7YS5jYWxsYmFjaz1udWxsfTtleHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7Unx8UXx8KFI9ITAsZihWKSl9O2V4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gUH07ZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZT1mdW5jdGlvbigpe3JldHVybiBKKEwpfTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dD1mdW5jdGlvbihhKXtzd2l0Y2goUCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIGI9MzticmVhaztkZWZhdWx0OmI9UH12YXIgYz1QO1A9Yjt0cnl7cmV0dXJuIGEoKX1maW5hbGx5e1A9Y319O2V4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O2V4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50PVc7ZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0OmE9M312YXIgYz1QO1A9YTt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e1A9Y319O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1leHBvcnRzLnVuc3RhYmxlX25vdygpO1wib2JqZWN0XCI9PT10eXBlb2YgYyYmbnVsbCE9PWM/KGM9Yy5kZWxheSxjPVwibnVtYmVyXCI9PT10eXBlb2YgYyYmMDxjP2QrYzpkKTpjPWQ7c3dpdGNoKGEpe2Nhc2UgMTp2YXIgZT0tMTticmVhaztjYXNlIDI6ZT0yNTA7YnJlYWs7Y2FzZSA1OmU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6ZT0xRTQ7YnJlYWs7ZGVmYXVsdDplPTVFM31lPWMrZTthPXtpZDpOKyssY2FsbGJhY2s6Yixwcmlvcml0eUxldmVsOmEsc3RhcnRUaW1lOmMsZXhwaXJhdGlvblRpbWU6ZSxzb3J0SW5kZXg6LTF9O2M+ZD8oYS5zb3J0SW5kZXg9YyxIKE0sYSksbnVsbD09PUooTCkmJmE9PT1KKE0pJiYoUz9oKCk6Uz0hMCxnKFUsYy1kKSkpOihhLnNvcnRJbmRleD1lLEgoTCxhKSxSfHxRfHwoUj0hMCxmKFYpKSk7cmV0dXJuIGF9O1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9UDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1QO1A9Yjt0cnl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7UD1jfX19O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4vKlxuIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuKi9cbid1c2Ugc3RyaWN0Jzt2YXIgYWE9cmVxdWlyZShcInJlYWN0XCIpLG09cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIikscj1yZXF1aXJlKFwic2NoZWR1bGVyXCIpO2Z1bmN0aW9uIHkoYSl7Zm9yKHZhciBiPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrYStcIjsgdmlzaXQgXCIrYitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9aWYoIWFhKXRocm93IEVycm9yKHkoMjI3KSk7dmFyIGJhPW5ldyBTZXQsY2E9e307ZnVuY3Rpb24gZGEoYSxiKXtlYShhLGIpO2VhKGErXCJDYXB0dXJlXCIsYil9XG5mdW5jdGlvbiBlYShhLGIpe2NhW2FdPWI7Zm9yKGE9MDthPGIubGVuZ3RoO2ErKyliYS5hZGQoYlthXSl9XG52YXIgZmE9IShcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGhhPS9eWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXVs6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcLS4wLTlcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXSokLyxpYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuamE9e30sa2E9e307ZnVuY3Rpb24gbGEoYSl7aWYoaWEuY2FsbChrYSxhKSlyZXR1cm4hMDtpZihpYS5jYWxsKGphLGEpKXJldHVybiExO2lmKGhhLnRlc3QoYSkpcmV0dXJuIGthW2FdPSEwO2phW2FdPSEwO3JldHVybiExfWZ1bmN0aW9uIG1hKGEsYixjLGQpe2lmKG51bGwhPT1jJiYwPT09Yy50eXBlKXJldHVybiExO3N3aXRjaCh0eXBlb2YgYil7Y2FzZSBcImZ1bmN0aW9uXCI6Y2FzZSBcInN5bWJvbFwiOnJldHVybiEwO2Nhc2UgXCJib29sZWFuXCI6aWYoZClyZXR1cm4hMTtpZihudWxsIT09YylyZXR1cm4hYy5hY2NlcHRzQm9vbGVhbnM7YT1hLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw1KTtyZXR1cm5cImRhdGEtXCIhPT1hJiZcImFyaWEtXCIhPT1hO2RlZmF1bHQ6cmV0dXJuITF9fVxuZnVuY3Rpb24gbmEoYSxiLGMsZCl7aWYobnVsbD09PWJ8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYnx8bWEoYSxiLGMsZCkpcmV0dXJuITA7aWYoZClyZXR1cm4hMTtpZihudWxsIT09Yylzd2l0Y2goYy50eXBlKXtjYXNlIDM6cmV0dXJuIWI7Y2FzZSA0OnJldHVybiExPT09YjtjYXNlIDU6cmV0dXJuIGlzTmFOKGIpO2Nhc2UgNjpyZXR1cm4gaXNOYU4oYil8fDE+Yn1yZXR1cm4hMX1mdW5jdGlvbiBCKGEsYixjLGQsZSxmLGcpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT1ifHwzPT09Ynx8ND09PWI7dGhpcy5hdHRyaWJ1dGVOYW1lPWQ7dGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9ZTt0aGlzLm11c3RVc2VQcm9wZXJ0eT1jO3RoaXMucHJvcGVydHlOYW1lPWE7dGhpcy50eXBlPWI7dGhpcy5zYW5pdGl6ZVVSTD1mO3RoaXMucmVtb3ZlRW1wdHlTdHJpbmc9Z312YXIgRD17fTtcblwiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDAsITEsYSxudWxsLCExLCExKX0pO1tbXCJhY2NlcHRDaGFyc2V0XCIsXCJhY2NlcHQtY2hhcnNldFwiXSxbXCJjbGFzc05hbWVcIixcImNsYXNzXCJdLFtcImh0bWxGb3JcIixcImZvclwiXSxbXCJodHRwRXF1aXZcIixcImh0dHAtZXF1aXZcIl1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YVswXTtEW2JdPW5ldyBCKGIsMSwhMSxhWzFdLG51bGwsITEsITEpfSk7W1wiY29udGVudEVkaXRhYmxlXCIsXCJkcmFnZ2FibGVcIixcInNwZWxsQ2hlY2tcIixcInZhbHVlXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDIsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG5bXCJhdXRvUmV2ZXJzZVwiLFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFwiZm9jdXNhYmxlXCIsXCJwcmVzZXJ2ZUFscGhhXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDIsITEsYSxudWxsLCExLCExKX0pO1wiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwzLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiY2hlY2tlZFwiLFwibXVsdGlwbGVcIixcIm11dGVkXCIsXCJzZWxlY3RlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwzLCEwLGEsbnVsbCwhMSwhMSl9KTtbXCJjYXB0dXJlXCIsXCJkb3dubG9hZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw0LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJjb2xzXCIsXCJyb3dzXCIsXCJzaXplXCIsXCJzcGFuXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDYsITEsYSxudWxsLCExLCExKX0pO1tcInJvd1NwYW5cIixcInN0YXJ0XCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDUsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7dmFyIG9hPS9bXFwtOl0oW2Etel0pL2c7ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIGFbMV0udG9VcHBlckNhc2UoKX1cblwiYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHRcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uob2EsXG5wYSk7RFtiXT1uZXcgQihiLDEsITEsYSxudWxsLCExLCExKX0pO1wieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLHBhKTtEW2JdPW5ldyBCKGIsMSwhMSxhLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCExLCExKX0pO1tcInhtbDpiYXNlXCIsXCJ4bWw6bGFuZ1wiLFwieG1sOnNwYWNlXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLHBhKTtEW2JdPW5ldyBCKGIsMSwhMSxhLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsITEsITEpfSk7W1widGFiSW5kZXhcIixcImNyb3NzT3JpZ2luXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG5ELnhsaW5rSHJlZj1uZXcgQihcInhsaW5rSHJlZlwiLDEsITEsXCJ4bGluazpocmVmXCIsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsITAsITEpO1tcInNyY1wiLFwiaHJlZlwiLFwiYWN0aW9uXCIsXCJmb3JtQWN0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDEsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7XG5mdW5jdGlvbiBxYShhLGIsYyxkKXt2YXIgZT1ELmhhc093blByb3BlcnR5KGIpP0RbYl06bnVsbDt2YXIgZj1udWxsIT09ZT8wPT09ZS50eXBlOmQ/ITE6ISgyPGIubGVuZ3RoKXx8XCJvXCIhPT1iWzBdJiZcIk9cIiE9PWJbMF18fFwiblwiIT09YlsxXSYmXCJOXCIhPT1iWzFdPyExOiEwO2Z8fChuYShiLGMsZSxkKSYmKGM9bnVsbCksZHx8bnVsbD09PWU/bGEoYikmJihudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTphLnNldEF0dHJpYnV0ZShiLFwiXCIrYykpOmUubXVzdFVzZVByb3BlcnR5P2FbZS5wcm9wZXJ0eU5hbWVdPW51bGw9PT1jPzM9PT1lLnR5cGU/ITE6XCJcIjpjOihiPWUuYXR0cmlidXRlTmFtZSxkPWUuYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1jP2EucmVtb3ZlQXR0cmlidXRlKGIpOihlPWUudHlwZSxjPTM9PT1lfHw0PT09ZSYmITA9PT1jP1wiXCI6XCJcIitjLGQ/YS5zZXRBdHRyaWJ1dGVOUyhkLGIsYyk6YS5zZXRBdHRyaWJ1dGUoYixjKSkpKX1cbnZhciByYT1hYS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxzYT02MDEwMyx0YT02MDEwNix1YT02MDEwNyx3YT02MDEwOCx4YT02MDExNCx5YT02MDEwOSx6YT02MDExMCxBYT02MDExMixCYT02MDExMyxDYT02MDEyMCxEYT02MDExNSxFYT02MDExNixGYT02MDEyMSxHYT02MDEyOCxIYT02MDEyOSxJYT02MDEzMCxKYT02MDEzMTtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBFPVN5bWJvbC5mb3I7c2E9RShcInJlYWN0LmVsZW1lbnRcIik7dGE9RShcInJlYWN0LnBvcnRhbFwiKTt1YT1FKFwicmVhY3QuZnJhZ21lbnRcIik7d2E9RShcInJlYWN0LnN0cmljdF9tb2RlXCIpO3hhPUUoXCJyZWFjdC5wcm9maWxlclwiKTt5YT1FKFwicmVhY3QucHJvdmlkZXJcIik7emE9RShcInJlYWN0LmNvbnRleHRcIik7QWE9RShcInJlYWN0LmZvcndhcmRfcmVmXCIpO0JhPUUoXCJyZWFjdC5zdXNwZW5zZVwiKTtDYT1FKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTtEYT1FKFwicmVhY3QubWVtb1wiKTtFYT1FKFwicmVhY3QubGF6eVwiKTtGYT1FKFwicmVhY3QuYmxvY2tcIik7RShcInJlYWN0LnNjb3BlXCIpO0dhPUUoXCJyZWFjdC5vcGFxdWUuaWRcIik7SGE9RShcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIik7SWE9RShcInJlYWN0Lm9mZnNjcmVlblwiKTtKYT1FKFwicmVhY3QubGVnYWN5X2hpZGRlblwiKX1cbnZhciBLYT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gTGEoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSlyZXR1cm4gbnVsbDthPUthJiZhW0thXXx8YVtcIkBAaXRlcmF0b3JcIl07cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGE/YTpudWxsfXZhciBNYTtmdW5jdGlvbiBOYShhKXtpZih2b2lkIDA9PT1NYSl0cnl7dGhyb3cgRXJyb3IoKTt9Y2F0Y2goYyl7dmFyIGI9Yy5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtNYT1iJiZiWzFdfHxcIlwifXJldHVyblwiXFxuXCIrTWErYX12YXIgT2E9ITE7XG5mdW5jdGlvbiBQYShhLGIpe2lmKCFhfHxPYSlyZXR1cm5cIlwiO09hPSEwO3ZhciBjPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYoYilpZihiPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKTt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLnByb3RvdHlwZSxcInByb3BzXCIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fX0pLFwib2JqZWN0XCI9PT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5jb25zdHJ1Y3Qpe3RyeXtSZWZsZWN0LmNvbnN0cnVjdChiLFtdKX1jYXRjaChrKXt2YXIgZD1rfVJlZmxlY3QuY29uc3RydWN0KGEsW10sYil9ZWxzZXt0cnl7Yi5jYWxsKCl9Y2F0Y2goayl7ZD1rfWEuY2FsbChiLnByb3RvdHlwZSl9ZWxzZXt0cnl7dGhyb3cgRXJyb3IoKTt9Y2F0Y2goayl7ZD1rfWEoKX19Y2F0Y2goayl7aWYoayYmZCYmXCJzdHJpbmdcIj09PXR5cGVvZiBrLnN0YWNrKXtmb3IodmFyIGU9ay5zdGFjay5zcGxpdChcIlxcblwiKSxcbmY9ZC5zdGFjay5zcGxpdChcIlxcblwiKSxnPWUubGVuZ3RoLTEsaD1mLmxlbmd0aC0xOzE8PWcmJjA8PWgmJmVbZ10hPT1mW2hdOyloLS07Zm9yKDsxPD1nJiYwPD1oO2ctLSxoLS0paWYoZVtnXSE9PWZbaF0pe2lmKDEhPT1nfHwxIT09aCl7ZG8gaWYoZy0tLGgtLSwwPmh8fGVbZ10hPT1mW2hdKXJldHVyblwiXFxuXCIrZVtnXS5yZXBsYWNlKFwiIGF0IG5ldyBcIixcIiBhdCBcIik7d2hpbGUoMTw9ZyYmMDw9aCl9YnJlYWt9fX1maW5hbGx5e09hPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPWN9cmV0dXJuKGE9YT9hLmRpc3BsYXlOYW1lfHxhLm5hbWU6XCJcIik/TmEoYSk6XCJcIn1cbmZ1bmN0aW9uIFFhKGEpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnJldHVybiBOYShhLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIE5hKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBOYShcIlN1c3BlbnNlXCIpO2Nhc2UgMTk6cmV0dXJuIE5hKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gYT1QYShhLnR5cGUsITEpLGE7Y2FzZSAxMTpyZXR1cm4gYT1QYShhLnR5cGUucmVuZGVyLCExKSxhO2Nhc2UgMjI6cmV0dXJuIGE9UGEoYS50eXBlLl9yZW5kZXIsITEpLGE7Y2FzZSAxOnJldHVybiBhPVBhKGEudHlwZSwhMCksYTtkZWZhdWx0OnJldHVyblwiXCJ9fVxuZnVuY3Rpb24gUmEoYSl7aWYobnVsbD09YSlyZXR1cm4gbnVsbDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlyZXR1cm4gYS5kaXNwbGF5TmFtZXx8YS5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlyZXR1cm4gYTtzd2l0Y2goYSl7Y2FzZSB1YTpyZXR1cm5cIkZyYWdtZW50XCI7Y2FzZSB0YTpyZXR1cm5cIlBvcnRhbFwiO2Nhc2UgeGE6cmV0dXJuXCJQcm9maWxlclwiO2Nhc2Ugd2E6cmV0dXJuXCJTdHJpY3RNb2RlXCI7Y2FzZSBCYTpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSBDYTpyZXR1cm5cIlN1c3BlbnNlTGlzdFwifWlmKFwib2JqZWN0XCI9PT10eXBlb2YgYSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB6YTpyZXR1cm4oYS5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLkNvbnN1bWVyXCI7Y2FzZSB5YTpyZXR1cm4oYS5fY29udGV4dC5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCIpK1wiLlByb3ZpZGVyXCI7Y2FzZSBBYTp2YXIgYj1hLnJlbmRlcjtiPWIuZGlzcGxheU5hbWV8fGIubmFtZXx8XCJcIjtcbnJldHVybiBhLmRpc3BsYXlOYW1lfHwoXCJcIiE9PWI/XCJGb3J3YXJkUmVmKFwiK2IrXCIpXCI6XCJGb3J3YXJkUmVmXCIpO2Nhc2UgRGE6cmV0dXJuIFJhKGEudHlwZSk7Y2FzZSBGYTpyZXR1cm4gUmEoYS5fcmVuZGVyKTtjYXNlIEVhOmI9YS5fcGF5bG9hZDthPWEuX2luaXQ7dHJ5e3JldHVybiBSYShhKGIpKX1jYXRjaChjKXt9fXJldHVybiBudWxsfWZ1bmN0aW9uIFNhKGEpe3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcImJvb2xlYW5cIjpjYXNlIFwibnVtYmVyXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwidW5kZWZpbmVkXCI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1mdW5jdGlvbiBUYShhKXt2YXIgYj1hLnR5cGU7cmV0dXJuKGE9YS5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWEudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWJ8fFwicmFkaW9cIj09PWIpfVxuZnVuY3Rpb24gVWEoYSl7dmFyIGI9VGEoYSk/XCJjaGVja2VkXCI6XCJ2YWx1ZVwiLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxiKSxkPVwiXCIrYVtiXTtpZighYS5oYXNPd25Qcm9wZXJ0eShiKSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5nZXQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLnNldCl7dmFyIGU9Yy5nZXQsZj1jLnNldDtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGEpe2Q9XCJcIithO2YuY2FsbCh0aGlzLGEpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2VudW1lcmFibGU6Yy5lbnVtZXJhYmxlfSk7cmV0dXJue2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHNldFZhbHVlOmZ1bmN0aW9uKGEpe2Q9XCJcIithfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXthLl92YWx1ZVRyYWNrZXI9XG5udWxsO2RlbGV0ZSBhW2JdfX19fWZ1bmN0aW9uIFZhKGEpe2EuX3ZhbHVlVHJhY2tlcnx8KGEuX3ZhbHVlVHJhY2tlcj1VYShhKSl9ZnVuY3Rpb24gV2EoYSl7aWYoIWEpcmV0dXJuITE7dmFyIGI9YS5fdmFsdWVUcmFja2VyO2lmKCFiKXJldHVybiEwO3ZhciBjPWIuZ2V0VmFsdWUoKTt2YXIgZD1cIlwiO2EmJihkPVRhKGEpP2EuY2hlY2tlZD9cInRydWVcIjpcImZhbHNlXCI6YS52YWx1ZSk7YT1kO3JldHVybiBhIT09Yz8oYi5zZXRWYWx1ZShhKSwhMCk6ITF9ZnVuY3Rpb24gWGEoYSl7YT1hfHwoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudHx8YS5ib2R5fWNhdGNoKGIpe3JldHVybiBhLmJvZHl9fVxuZnVuY3Rpb24gWWEoYSxiKXt2YXIgYz1iLmNoZWNrZWQ7cmV0dXJuIG0oe30sYix7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9Yz9jOmEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIFphKGEsYil7dmFyIGM9bnVsbD09Yi5kZWZhdWx0VmFsdWU/XCJcIjpiLmRlZmF1bHRWYWx1ZSxkPW51bGwhPWIuY2hlY2tlZD9iLmNoZWNrZWQ6Yi5kZWZhdWx0Q2hlY2tlZDtjPVNhKG51bGwhPWIudmFsdWU/Yi52YWx1ZTpjKTthLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOmQsaW5pdGlhbFZhbHVlOmMsY29udHJvbGxlZDpcImNoZWNrYm94XCI9PT1iLnR5cGV8fFwicmFkaW9cIj09PWIudHlwZT9udWxsIT1iLmNoZWNrZWQ6bnVsbCE9Yi52YWx1ZX19ZnVuY3Rpb24gJGEoYSxiKXtiPWIuY2hlY2tlZDtudWxsIT1iJiZxYShhLFwiY2hlY2tlZFwiLGIsITEpfVxuZnVuY3Rpb24gYWIoYSxiKXskYShhLGIpO3ZhciBjPVNhKGIudmFsdWUpLGQ9Yi50eXBlO2lmKG51bGwhPWMpaWYoXCJudW1iZXJcIj09PWQpe2lmKDA9PT1jJiZcIlwiPT09YS52YWx1ZXx8YS52YWx1ZSE9YylhLnZhbHVlPVwiXCIrY31lbHNlIGEudmFsdWUhPT1cIlwiK2MmJihhLnZhbHVlPVwiXCIrYyk7ZWxzZSBpZihcInN1Ym1pdFwiPT09ZHx8XCJyZXNldFwiPT09ZCl7YS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtyZXR1cm59Yi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP2JiKGEsYi50eXBlLGMpOmIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikmJmJiKGEsYi50eXBlLFNhKGIuZGVmYXVsdFZhbHVlKSk7bnVsbD09Yi5jaGVja2VkJiZudWxsIT1iLmRlZmF1bHRDaGVja2VkJiYoYS5kZWZhdWx0Q2hlY2tlZD0hIWIuZGVmYXVsdENoZWNrZWQpfVxuZnVuY3Rpb24gY2IoYSxiLGMpe2lmKGIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKXx8Yi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSl7dmFyIGQ9Yi50eXBlO2lmKCEoXCJzdWJtaXRcIiE9PWQmJlwicmVzZXRcIiE9PWR8fHZvaWQgMCE9PWIudmFsdWUmJm51bGwhPT1iLnZhbHVlKSlyZXR1cm47Yj1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU7Y3x8Yj09PWEudmFsdWV8fChhLnZhbHVlPWIpO2EuZGVmYXVsdFZhbHVlPWJ9Yz1hLm5hbWU7XCJcIiE9PWMmJihhLm5hbWU9XCJcIik7YS5kZWZhdWx0Q2hlY2tlZD0hIWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcIlwiIT09YyYmKGEubmFtZT1jKX1cbmZ1bmN0aW9uIGJiKGEsYixjKXtpZihcIm51bWJlclwiIT09Ynx8WGEoYS5vd25lckRvY3VtZW50KSE9PWEpbnVsbD09Yz9hLmRlZmF1bHRWYWx1ZT1cIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU6YS5kZWZhdWx0VmFsdWUhPT1cIlwiK2MmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2MpfWZ1bmN0aW9uIGRiKGEpe3ZhciBiPVwiXCI7YWEuQ2hpbGRyZW4uZm9yRWFjaChhLGZ1bmN0aW9uKGEpe251bGwhPWEmJihiKz1hKX0pO3JldHVybiBifWZ1bmN0aW9uIGViKGEsYil7YT1tKHtjaGlsZHJlbjp2b2lkIDB9LGIpO2lmKGI9ZGIoYi5jaGlsZHJlbikpYS5jaGlsZHJlbj1iO3JldHVybiBhfVxuZnVuY3Rpb24gZmIoYSxiLGMsZCl7YT1hLm9wdGlvbnM7aWYoYil7Yj17fTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyliW1wiJFwiK2NbZV1dPSEwO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZT1iLmhhc093blByb3BlcnR5KFwiJFwiK2FbY10udmFsdWUpLGFbY10uc2VsZWN0ZWQhPT1lJiYoYVtjXS5zZWxlY3RlZD1lKSxlJiZkJiYoYVtjXS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Yz1cIlwiK1NhKGMpO2I9bnVsbDtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXtpZihhW2VdLnZhbHVlPT09Yyl7YVtlXS5zZWxlY3RlZD0hMDtkJiYoYVtlXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09Ynx8YVtlXS5kaXNhYmxlZHx8KGI9YVtlXSl9bnVsbCE9PWImJihiLnNlbGVjdGVkPSEwKX19XG5mdW5jdGlvbiBnYihhLGIpe2lmKG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpdGhyb3cgRXJyb3IoeSg5MSkpO3JldHVybiBtKHt9LGIse3ZhbHVlOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLGNoaWxkcmVuOlwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIGhiKGEsYil7dmFyIGM9Yi52YWx1ZTtpZihudWxsPT1jKXtjPWIuY2hpbGRyZW47Yj1iLmRlZmF1bHRWYWx1ZTtpZihudWxsIT1jKXtpZihudWxsIT1iKXRocm93IEVycm9yKHkoOTIpKTtpZihBcnJheS5pc0FycmF5KGMpKXtpZighKDE+PWMubGVuZ3RoKSl0aHJvdyBFcnJvcih5KDkzKSk7Yz1jWzBdfWI9Y31udWxsPT1iJiYoYj1cIlwiKTtjPWJ9YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6U2EoYyl9fVxuZnVuY3Rpb24gaWIoYSxiKXt2YXIgYz1TYShiLnZhbHVlKSxkPVNhKGIuZGVmYXVsdFZhbHVlKTtudWxsIT1jJiYoYz1cIlwiK2MsYyE9PWEudmFsdWUmJihhLnZhbHVlPWMpLG51bGw9PWIuZGVmYXVsdFZhbHVlJiZhLmRlZmF1bHRWYWx1ZSE9PWMmJihhLmRlZmF1bHRWYWx1ZT1jKSk7bnVsbCE9ZCYmKGEuZGVmYXVsdFZhbHVlPVwiXCIrZCl9ZnVuY3Rpb24gamIoYSl7dmFyIGI9YS50ZXh0Q29udGVudDtiPT09YS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmXCJcIiE9PWImJm51bGwhPT1iJiYoYS52YWx1ZT1iKX12YXIga2I9e2h0bWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsbWF0aG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLHN2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9O1xuZnVuY3Rpb24gbGIoYSl7c3dpdGNoKGEpe2Nhc2UgXCJzdmdcIjpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7Y2FzZSBcIm1hdGhcIjpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjtkZWZhdWx0OnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwifX1mdW5jdGlvbiBtYihhLGIpe3JldHVybiBudWxsPT1hfHxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj09PWE/bGIoYik6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09YSYmXCJmb3JlaWduT2JqZWN0XCI9PT1iP1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiOmF9XG52YXIgbmIsb2I9ZnVuY3Rpb24oYSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24oYixjLGQsZSl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gYShiLGMsZCxlKX0pfTphfShmdW5jdGlvbihhLGIpe2lmKGEubmFtZXNwYWNlVVJJIT09a2Iuc3ZnfHxcImlubmVySFRNTFwiaW4gYSlhLmlubmVySFRNTD1iO2Vsc2V7bmI9bmJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bmIuaW5uZXJIVE1MPVwiPHN2Zz5cIitiLnZhbHVlT2YoKS50b1N0cmluZygpK1wiPC9zdmc+XCI7Zm9yKGI9bmIuZmlyc3RDaGlsZDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IoO2IuZmlyc3RDaGlsZDspYS5hcHBlbmRDaGlsZChiLmZpcnN0Q2hpbGQpfX0pO1xuZnVuY3Rpb24gcGIoYSxiKXtpZihiKXt2YXIgYz1hLmZpcnN0Q2hpbGQ7aWYoYyYmYz09PWEubGFzdENoaWxkJiYzPT09Yy5ub2RlVHlwZSl7Yy5ub2RlVmFsdWU9YjtyZXR1cm59fWEudGV4dENvbnRlbnQ9Yn1cbnZhciBxYj17YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsYm9yZGVySW1hZ2VPdXRzZXQ6ITAsYm9yZGVySW1hZ2VTbGljZTohMCxib3JkZXJJbWFnZVdpZHRoOiEwLGJveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGJveE9yZGluYWxHcm91cDohMCxjb2x1bW5Db3VudDohMCxjb2x1bW5zOiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkQXJlYTohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1NwYW46ITAsZ3JpZFJvd1N0YXJ0OiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3BhbjohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZm9udFdlaWdodDohMCxsaW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsdGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmlsbE9wYWNpdHk6ITAsXG5mbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxyYj1bXCJXZWJraXRcIixcIm1zXCIsXCJNb3pcIixcIk9cIl07T2JqZWN0LmtleXMocWIpLmZvckVhY2goZnVuY3Rpb24oYSl7cmIuZm9yRWFjaChmdW5jdGlvbihiKXtiPWIrYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnN1YnN0cmluZygxKTtxYltiXT1xYlthXX0pfSk7ZnVuY3Rpb24gc2IoYSxiLGMpe3JldHVybiBudWxsPT1ifHxcImJvb2xlYW5cIj09PXR5cGVvZiBifHxcIlwiPT09Yj9cIlwiOmN8fFwibnVtYmVyXCIhPT10eXBlb2YgYnx8MD09PWJ8fHFiLmhhc093blByb3BlcnR5KGEpJiZxYlthXT8oXCJcIitiKS50cmltKCk6YitcInB4XCJ9XG5mdW5jdGlvbiB0YihhLGIpe2E9YS5zdHlsZTtmb3IodmFyIGMgaW4gYilpZihiLmhhc093blByb3BlcnR5KGMpKXt2YXIgZD0wPT09Yy5pbmRleE9mKFwiLS1cIiksZT1zYihjLGJbY10sZCk7XCJmbG9hdFwiPT09YyYmKGM9XCJjc3NGbG9hdFwiKTtkP2Euc2V0UHJvcGVydHkoYyxlKTphW2NdPWV9fXZhciB1Yj1tKHttZW51aXRlbTohMH0se2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0pO1xuZnVuY3Rpb24gdmIoYSxiKXtpZihiKXtpZih1YlthXSYmKG51bGwhPWIuY2hpbGRyZW58fG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHkoMTM3LGEpKTtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXtpZihudWxsIT1iLmNoaWxkcmVuKXRocm93IEVycm9yKHkoNjApKTtpZighKFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmXCJfX2h0bWxcImluIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKHkoNjEpKTt9aWYobnVsbCE9Yi5zdHlsZSYmXCJvYmplY3RcIiE9PXR5cGVvZiBiLnN0eWxlKXRocm93IEVycm9yKHkoNjIpKTt9fVxuZnVuY3Rpb24gd2IoYSxiKXtpZigtMT09PWEuaW5kZXhPZihcIi1cIikpcmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBiLmlzO3N3aXRjaChhKXtjYXNlIFwiYW5ub3RhdGlvbi14bWxcIjpjYXNlIFwiY29sb3ItcHJvZmlsZVwiOmNhc2UgXCJmb250LWZhY2VcIjpjYXNlIFwiZm9udC1mYWNlLXNyY1wiOmNhc2UgXCJmb250LWZhY2UtdXJpXCI6Y2FzZSBcImZvbnQtZmFjZS1mb3JtYXRcIjpjYXNlIFwiZm9udC1mYWNlLW5hbWVcIjpjYXNlIFwibWlzc2luZy1nbHlwaFwiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWZ1bmN0aW9uIHhiKGEpe2E9YS50YXJnZXR8fGEuc3JjRWxlbWVudHx8d2luZG93O2EuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJihhPWEuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpO3JldHVybiAzPT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGU6YX12YXIgeWI9bnVsbCx6Yj1udWxsLEFiPW51bGw7XG5mdW5jdGlvbiBCYihhKXtpZihhPUNiKGEpKXtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgeWIpdGhyb3cgRXJyb3IoeSgyODApKTt2YXIgYj1hLnN0YXRlTm9kZTtiJiYoYj1EYihiKSx5YihhLnN0YXRlTm9kZSxhLnR5cGUsYikpfX1mdW5jdGlvbiBFYihhKXt6Yj9BYj9BYi5wdXNoKGEpOkFiPVthXTp6Yj1hfWZ1bmN0aW9uIEZiKCl7aWYoemIpe3ZhciBhPXpiLGI9QWI7QWI9emI9bnVsbDtCYihhKTtpZihiKWZvcihhPTA7YTxiLmxlbmd0aDthKyspQmIoYlthXSl9fWZ1bmN0aW9uIEdiKGEsYil7cmV0dXJuIGEoYil9ZnVuY3Rpb24gSGIoYSxiLGMsZCxlKXtyZXR1cm4gYShiLGMsZCxlKX1mdW5jdGlvbiBJYigpe312YXIgSmI9R2IsS2I9ITEsTGI9ITE7ZnVuY3Rpb24gTWIoKXtpZihudWxsIT09emJ8fG51bGwhPT1BYilJYigpLEZiKCl9XG5mdW5jdGlvbiBOYihhLGIsYyl7aWYoTGIpcmV0dXJuIGEoYixjKTtMYj0hMDt0cnl7cmV0dXJuIEpiKGEsYixjKX1maW5hbGx5e0xiPSExLE1iKCl9fVxuZnVuY3Rpb24gT2IoYSxiKXt2YXIgYz1hLnN0YXRlTm9kZTtpZihudWxsPT09YylyZXR1cm4gbnVsbDt2YXIgZD1EYihjKTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtjPWRbYl07YTpzd2l0Y2goYil7Y2FzZSBcIm9uQ2xpY2tcIjpjYXNlIFwib25DbGlja0NhcHR1cmVcIjpjYXNlIFwib25Eb3VibGVDbGlja1wiOmNhc2UgXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRG93blwiOmNhc2UgXCJvbk1vdXNlRG93bkNhcHR1cmVcIjpjYXNlIFwib25Nb3VzZU1vdmVcIjpjYXNlIFwib25Nb3VzZU1vdmVDYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VVcFwiOmNhc2UgXCJvbk1vdXNlVXBDYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VFbnRlclwiOihkPSFkLmRpc2FibGVkKXx8KGE9YS50eXBlLGQ9IShcImJ1dHRvblwiPT09YXx8XCJpbnB1dFwiPT09YXx8XCJzZWxlY3RcIj09PWF8fFwidGV4dGFyZWFcIj09PWEpKTthPSFkO2JyZWFrIGE7ZGVmYXVsdDphPSExfWlmKGEpcmV0dXJuIG51bGw7aWYoYyYmXCJmdW5jdGlvblwiIT09XG50eXBlb2YgYyl0aHJvdyBFcnJvcih5KDIzMSxiLHR5cGVvZiBjKSk7cmV0dXJuIGN9dmFyIFBiPSExO2lmKGZhKXRyeXt2YXIgUWI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFFiLFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtQYj0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixRYixRYik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUWIsUWIpfWNhdGNoKGEpe1BiPSExfWZ1bmN0aW9uIFJiKGEsYixjLGQsZSxmLGcsaCxrKXt2YXIgbD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e2IuYXBwbHkoYyxsKX1jYXRjaChuKXt0aGlzLm9uRXJyb3Iobil9fXZhciBTYj0hMSxUYj1udWxsLFViPSExLFZiPW51bGwsV2I9e29uRXJyb3I6ZnVuY3Rpb24oYSl7U2I9ITA7VGI9YX19O2Z1bmN0aW9uIFhiKGEsYixjLGQsZSxmLGcsaCxrKXtTYj0hMTtUYj1udWxsO1JiLmFwcGx5KFdiLGFyZ3VtZW50cyl9XG5mdW5jdGlvbiBZYihhLGIsYyxkLGUsZixnLGgsayl7WGIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKFNiKXtpZihTYil7dmFyIGw9VGI7U2I9ITE7VGI9bnVsbH1lbHNlIHRocm93IEVycm9yKHkoMTk4KSk7VWJ8fChVYj0hMCxWYj1sKX19ZnVuY3Rpb24gWmIoYSl7dmFyIGI9YSxjPWE7aWYoYS5hbHRlcm5hdGUpZm9yKDtiLnJldHVybjspYj1iLnJldHVybjtlbHNle2E9YjtkbyBiPWEsMCE9PShiLmZsYWdzJjEwMjYpJiYoYz1iLnJldHVybiksYT1iLnJldHVybjt3aGlsZShhKX1yZXR1cm4gMz09PWIudGFnP2M6bnVsbH1mdW5jdGlvbiAkYihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWImJihhPWEuYWx0ZXJuYXRlLG51bGwhPT1hJiYoYj1hLm1lbW9pemVkU3RhdGUpKTtpZihudWxsIT09YilyZXR1cm4gYi5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGFjKGEpe2lmKFpiKGEpIT09YSl0aHJvdyBFcnJvcih5KDE4OCkpO31cbmZ1bmN0aW9uIGJjKGEpe3ZhciBiPWEuYWx0ZXJuYXRlO2lmKCFiKXtiPVpiKGEpO2lmKG51bGw9PT1iKXRocm93IEVycm9yKHkoMTg4KSk7cmV0dXJuIGIhPT1hP251bGw6YX1mb3IodmFyIGM9YSxkPWI7Oyl7dmFyIGU9Yy5yZXR1cm47aWYobnVsbD09PWUpYnJlYWs7dmFyIGY9ZS5hbHRlcm5hdGU7aWYobnVsbD09PWYpe2Q9ZS5yZXR1cm47aWYobnVsbCE9PWQpe2M9ZDtjb250aW51ZX1icmVha31pZihlLmNoaWxkPT09Zi5jaGlsZCl7Zm9yKGY9ZS5jaGlsZDtmOyl7aWYoZj09PWMpcmV0dXJuIGFjKGUpLGE7aWYoZj09PWQpcmV0dXJuIGFjKGUpLGI7Zj1mLnNpYmxpbmd9dGhyb3cgRXJyb3IoeSgxODgpKTt9aWYoYy5yZXR1cm4hPT1kLnJldHVybiljPWUsZD1mO2Vsc2V7Zm9yKHZhciBnPSExLGg9ZS5jaGlsZDtoOyl7aWYoaD09PWMpe2c9ITA7Yz1lO2Q9ZjticmVha31pZihoPT09ZCl7Zz0hMDtkPWU7Yz1mO2JyZWFrfWg9aC5zaWJsaW5nfWlmKCFnKXtmb3IoaD1mLmNoaWxkO2g7KXtpZihoPT09XG5jKXtnPSEwO2M9ZjtkPWU7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1mO2M9ZTticmVha31oPWguc2libGluZ31pZighZyl0aHJvdyBFcnJvcih5KDE4OSkpO319aWYoYy5hbHRlcm5hdGUhPT1kKXRocm93IEVycm9yKHkoMTkwKSk7fWlmKDMhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDE4OCkpO3JldHVybiBjLnN0YXRlTm9kZS5jdXJyZW50PT09Yz9hOmJ9ZnVuY3Rpb24gY2MoYSl7YT1iYyhhKTtpZighYSlyZXR1cm4gbnVsbDtmb3IodmFyIGI9YTs7KXtpZig1PT09Yi50YWd8fDY9PT1iLnRhZylyZXR1cm4gYjtpZihiLmNoaWxkKWIuY2hpbGQucmV0dXJuPWIsYj1iLmNoaWxkO2Vsc2V7aWYoYj09PWEpYnJlYWs7Zm9yKDshYi5zaWJsaW5nOyl7aWYoIWIucmV0dXJufHxiLnJldHVybj09PWEpcmV0dXJuIG51bGw7Yj1iLnJldHVybn1iLnNpYmxpbmcucmV0dXJuPWIucmV0dXJuO2I9Yi5zaWJsaW5nfX1yZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRjKGEsYil7Zm9yKHZhciBjPWEuYWx0ZXJuYXRlO251bGwhPT1iOyl7aWYoYj09PWF8fGI9PT1jKXJldHVybiEwO2I9Yi5yZXR1cm59cmV0dXJuITF9dmFyIGVjLGZjLGdjLGhjLGljPSExLGpjPVtdLGtjPW51bGwsbGM9bnVsbCxtYz1udWxsLG5jPW5ldyBNYXAsb2M9bmV3IE1hcCxwYz1bXSxxYz1cIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldCBzdWJtaXRcIi5zcGxpdChcIiBcIik7XG5mdW5jdGlvbiByYyhhLGIsYyxkLGUpe3JldHVybntibG9ja2VkT246YSxkb21FdmVudE5hbWU6YixldmVudFN5c3RlbUZsYWdzOmN8MTYsbmF0aXZlRXZlbnQ6ZSx0YXJnZXRDb250YWluZXJzOltkXX19ZnVuY3Rpb24gc2MoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImZvY3VzaW5cIjpjYXNlIFwiZm9jdXNvdXRcIjprYz1udWxsO2JyZWFrO2Nhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6bGM9bnVsbDticmVhaztjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcIm1vdXNlb3V0XCI6bWM9bnVsbDticmVhaztjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwicG9pbnRlcm91dFwiOm5jLmRlbGV0ZShiLnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOm9jLmRlbGV0ZShiLnBvaW50ZXJJZCl9fVxuZnVuY3Rpb24gdGMoYSxiLGMsZCxlLGYpe2lmKG51bGw9PT1hfHxhLm5hdGl2ZUV2ZW50IT09ZilyZXR1cm4gYT1yYyhiLGMsZCxlLGYpLG51bGwhPT1iJiYoYj1DYihiKSxudWxsIT09YiYmZmMoYikpLGE7YS5ldmVudFN5c3RlbUZsYWdzfD1kO2I9YS50YXJnZXRDb250YWluZXJzO251bGwhPT1lJiYtMT09PWIuaW5kZXhPZihlKSYmYi5wdXNoKGUpO3JldHVybiBhfVxuZnVuY3Rpb24gdWMoYSxiLGMsZCxlKXtzd2l0Y2goYil7Y2FzZSBcImZvY3VzaW5cIjpyZXR1cm4ga2M9dGMoa2MsYSxiLGMsZCxlKSwhMDtjYXNlIFwiZHJhZ2VudGVyXCI6cmV0dXJuIGxjPXRjKGxjLGEsYixjLGQsZSksITA7Y2FzZSBcIm1vdXNlb3ZlclwiOnJldHVybiBtYz10YyhtYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJwb2ludGVyb3ZlclwiOnZhciBmPWUucG9pbnRlcklkO25jLnNldChmLHRjKG5jLmdldChmKXx8bnVsbCxhLGIsYyxkLGUpKTtyZXR1cm4hMDtjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpyZXR1cm4gZj1lLnBvaW50ZXJJZCxvYy5zZXQoZix0YyhvYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSksITB9cmV0dXJuITF9XG5mdW5jdGlvbiB2YyhhKXt2YXIgYj13YyhhLnRhcmdldCk7aWYobnVsbCE9PWIpe3ZhciBjPVpiKGIpO2lmKG51bGwhPT1jKWlmKGI9Yy50YWcsMTM9PT1iKXtpZihiPSRiKGMpLG51bGwhPT1iKXthLmJsb2NrZWRPbj1iO2hjKGEubGFuZVByaW9yaXR5LGZ1bmN0aW9uKCl7ci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkoYS5wcmlvcml0eSxmdW5jdGlvbigpe2djKGMpfSl9KTtyZXR1cm59fWVsc2UgaWYoMz09PWImJmMuc3RhdGVOb2RlLmh5ZHJhdGUpe2EuYmxvY2tlZE9uPTM9PT1jLnRhZz9jLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX1hLmJsb2NrZWRPbj1udWxsfVxuZnVuY3Rpb24geGMoYSl7aWYobnVsbCE9PWEuYmxvY2tlZE9uKXJldHVybiExO2Zvcih2YXIgYj1hLnRhcmdldENvbnRhaW5lcnM7MDxiLmxlbmd0aDspe3ZhciBjPXljKGEuZG9tRXZlbnROYW1lLGEuZXZlbnRTeXN0ZW1GbGFncyxiWzBdLGEubmF0aXZlRXZlbnQpO2lmKG51bGwhPT1jKXJldHVybiBiPUNiKGMpLG51bGwhPT1iJiZmYyhiKSxhLmJsb2NrZWRPbj1jLCExO2Iuc2hpZnQoKX1yZXR1cm4hMH1mdW5jdGlvbiB6YyhhLGIsYyl7eGMoYSkmJmMuZGVsZXRlKGIpfVxuZnVuY3Rpb24gQWMoKXtmb3IoaWM9ITE7MDxqYy5sZW5ndGg7KXt2YXIgYT1qY1swXTtpZihudWxsIT09YS5ibG9ja2VkT24pe2E9Q2IoYS5ibG9ja2VkT24pO251bGwhPT1hJiZlYyhhKTticmVha31mb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz15YyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09Yyl7YS5ibG9ja2VkT249YzticmVha31iLnNoaWZ0KCl9bnVsbD09PWEuYmxvY2tlZE9uJiZqYy5zaGlmdCgpfW51bGwhPT1rYyYmeGMoa2MpJiYoa2M9bnVsbCk7bnVsbCE9PWxjJiZ4YyhsYykmJihsYz1udWxsKTtudWxsIT09bWMmJnhjKG1jKSYmKG1jPW51bGwpO25jLmZvckVhY2goemMpO29jLmZvckVhY2goemMpfVxuZnVuY3Rpb24gQmMoYSxiKXthLmJsb2NrZWRPbj09PWImJihhLmJsb2NrZWRPbj1udWxsLGljfHwoaWM9ITAsci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksQWMpKSl9XG5mdW5jdGlvbiBDYyhhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBCYyhiLGEpfWlmKDA8amMubGVuZ3RoKXtCYyhqY1swXSxhKTtmb3IodmFyIGM9MTtjPGpjLmxlbmd0aDtjKyspe3ZhciBkPWpjW2NdO2QuYmxvY2tlZE9uPT09YSYmKGQuYmxvY2tlZE9uPW51bGwpfX1udWxsIT09a2MmJkJjKGtjLGEpO251bGwhPT1sYyYmQmMobGMsYSk7bnVsbCE9PW1jJiZCYyhtYyxhKTtuYy5mb3JFYWNoKGIpO29jLmZvckVhY2goYik7Zm9yKGM9MDtjPHBjLmxlbmd0aDtjKyspZD1wY1tjXSxkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKTtmb3IoOzA8cGMubGVuZ3RoJiYoYz1wY1swXSxudWxsPT09Yy5ibG9ja2VkT24pOyl2YyhjKSxudWxsPT09Yy5ibG9ja2VkT24mJnBjLnNoaWZ0KCl9XG5mdW5jdGlvbiBEYyhhLGIpe3ZhciBjPXt9O2NbYS50b0xvd2VyQ2FzZSgpXT1iLnRvTG93ZXJDYXNlKCk7Y1tcIldlYmtpdFwiK2FdPVwid2Via2l0XCIrYjtjW1wiTW96XCIrYV09XCJtb3pcIitiO3JldHVybiBjfXZhciBFYz17YW5pbWF0aW9uZW5kOkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25FbmRcIiksYW5pbWF0aW9uaXRlcmF0aW9uOkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25JdGVyYXRpb25cIiksYW5pbWF0aW9uc3RhcnQ6RGMoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvblN0YXJ0XCIpLHRyYW5zaXRpb25lbmQ6RGMoXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uRW5kXCIpfSxGYz17fSxHYz17fTtcbmZhJiYoR2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSxcIkFuaW1hdGlvbkV2ZW50XCJpbiB3aW5kb3d8fChkZWxldGUgRWMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgRWMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgRWMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSxcIlRyYW5zaXRpb25FdmVudFwiaW4gd2luZG93fHxkZWxldGUgRWMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBIYyhhKXtpZihGY1thXSlyZXR1cm4gRmNbYV07aWYoIUVjW2FdKXJldHVybiBhO3ZhciBiPUVjW2FdLGM7Zm9yKGMgaW4gYilpZihiLmhhc093blByb3BlcnR5KGMpJiZjIGluIEdjKXJldHVybiBGY1thXT1iW2NdO3JldHVybiBhfVxudmFyIEljPUhjKFwiYW5pbWF0aW9uZW5kXCIpLEpjPUhjKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLEtjPUhjKFwiYW5pbWF0aW9uc3RhcnRcIiksTGM9SGMoXCJ0cmFuc2l0aW9uZW5kXCIpLE1jPW5ldyBNYXAsTmM9bmV3IE1hcCxPYz1bXCJhYm9ydFwiLFwiYWJvcnRcIixJYyxcImFuaW1hdGlvbkVuZFwiLEpjLFwiYW5pbWF0aW9uSXRlcmF0aW9uXCIsS2MsXCJhbmltYXRpb25TdGFydFwiLFwiY2FucGxheVwiLFwiY2FuUGxheVwiLFwiY2FucGxheXRocm91Z2hcIixcImNhblBsYXlUaHJvdWdoXCIsXCJkdXJhdGlvbmNoYW5nZVwiLFwiZHVyYXRpb25DaGFuZ2VcIixcImVtcHRpZWRcIixcImVtcHRpZWRcIixcImVuY3J5cHRlZFwiLFwiZW5jcnlwdGVkXCIsXCJlbmRlZFwiLFwiZW5kZWRcIixcImVycm9yXCIsXCJlcnJvclwiLFwiZ290cG9pbnRlcmNhcHR1cmVcIixcImdvdFBvaW50ZXJDYXB0dXJlXCIsXCJsb2FkXCIsXCJsb2FkXCIsXCJsb2FkZWRkYXRhXCIsXCJsb2FkZWREYXRhXCIsXCJsb2FkZWRtZXRhZGF0YVwiLFwibG9hZGVkTWV0YWRhdGFcIixcImxvYWRzdGFydFwiLFwibG9hZFN0YXJ0XCIsXG5cImxvc3Rwb2ludGVyY2FwdHVyZVwiLFwibG9zdFBvaW50ZXJDYXB0dXJlXCIsXCJwbGF5aW5nXCIsXCJwbGF5aW5nXCIsXCJwcm9ncmVzc1wiLFwicHJvZ3Jlc3NcIixcInNlZWtpbmdcIixcInNlZWtpbmdcIixcInN0YWxsZWRcIixcInN0YWxsZWRcIixcInN1c3BlbmRcIixcInN1c3BlbmRcIixcInRpbWV1cGRhdGVcIixcInRpbWVVcGRhdGVcIixMYyxcInRyYW5zaXRpb25FbmRcIixcIndhaXRpbmdcIixcIndhaXRpbmdcIl07ZnVuY3Rpb24gUGMoYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTIpe3ZhciBkPWFbY10sZT1hW2MrMV07ZT1cIm9uXCIrKGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKTtOYy5zZXQoZCxiKTtNYy5zZXQoZCxlKTtkYShlLFtkXSl9fXZhciBRYz1yLnVuc3RhYmxlX25vdztRYygpO3ZhciBGPTg7XG5mdW5jdGlvbiBSYyhhKXtpZigwIT09KDEmYSkpcmV0dXJuIEY9MTUsMTtpZigwIT09KDImYSkpcmV0dXJuIEY9MTQsMjtpZigwIT09KDQmYSkpcmV0dXJuIEY9MTMsNDt2YXIgYj0yNCZhO2lmKDAhPT1iKXJldHVybiBGPTEyLGI7aWYoMCE9PShhJjMyKSlyZXR1cm4gRj0xMSwzMjtiPTE5MiZhO2lmKDAhPT1iKXJldHVybiBGPTEwLGI7aWYoMCE9PShhJjI1NikpcmV0dXJuIEY9OSwyNTY7Yj0zNTg0JmE7aWYoMCE9PWIpcmV0dXJuIEY9OCxiO2lmKDAhPT0oYSY0MDk2KSlyZXR1cm4gRj03LDQwOTY7Yj00MTg2MTEyJmE7aWYoMCE9PWIpcmV0dXJuIEY9NixiO2I9NjI5MTQ1NjAmYTtpZigwIT09YilyZXR1cm4gRj01LGI7aWYoYSY2NzEwODg2NClyZXR1cm4gRj00LDY3MTA4ODY0O2lmKDAhPT0oYSYxMzQyMTc3MjgpKXJldHVybiBGPTMsMTM0MjE3NzI4O2I9ODA1MzA2MzY4JmE7aWYoMCE9PWIpcmV0dXJuIEY9MixiO2lmKDAhPT0oMTA3Mzc0MTgyNCZhKSlyZXR1cm4gRj0xLDEwNzM3NDE4MjQ7XG5GPTg7cmV0dXJuIGF9ZnVuY3Rpb24gU2MoYSl7c3dpdGNoKGEpe2Nhc2UgOTk6cmV0dXJuIDE1O2Nhc2UgOTg6cmV0dXJuIDEwO2Nhc2UgOTc6Y2FzZSA5NjpyZXR1cm4gODtjYXNlIDk1OnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFRjKGEpe3N3aXRjaChhKXtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIDk5O2Nhc2UgMTM6Y2FzZSAxMjpjYXNlIDExOmNhc2UgMTA6cmV0dXJuIDk4O2Nhc2UgOTpjYXNlIDg6Y2FzZSA3OmNhc2UgNjpjYXNlIDQ6Y2FzZSA1OnJldHVybiA5NztjYXNlIDM6Y2FzZSAyOmNhc2UgMTpyZXR1cm4gOTU7Y2FzZSAwOnJldHVybiA5MDtkZWZhdWx0OnRocm93IEVycm9yKHkoMzU4LGEpKTt9fVxuZnVuY3Rpb24gVWMoYSxiKXt2YXIgYz1hLnBlbmRpbmdMYW5lcztpZigwPT09YylyZXR1cm4gRj0wO3ZhciBkPTAsZT0wLGY9YS5leHBpcmVkTGFuZXMsZz1hLnN1c3BlbmRlZExhbmVzLGg9YS5waW5nZWRMYW5lcztpZigwIT09ZilkPWYsZT1GPTE1O2Vsc2UgaWYoZj1jJjEzNDIxNzcyNywwIT09Zil7dmFyIGs9ZiZ+ZzswIT09az8oZD1SYyhrKSxlPUYpOihoJj1mLDAhPT1oJiYoZD1SYyhoKSxlPUYpKX1lbHNlIGY9YyZ+ZywwIT09Zj8oZD1SYyhmKSxlPUYpOjAhPT1oJiYoZD1SYyhoKSxlPUYpO2lmKDA9PT1kKXJldHVybiAwO2Q9MzEtVmMoZCk7ZD1jJigoMD5kPzA6MTw8ZCk8PDEpLTE7aWYoMCE9PWImJmIhPT1kJiYwPT09KGImZykpe1JjKGIpO2lmKGU8PUYpcmV0dXJuIGI7Rj1lfWI9YS5lbnRhbmdsZWRMYW5lcztpZigwIT09Yilmb3IoYT1hLmVudGFuZ2xlbWVudHMsYiY9ZDswPGI7KWM9MzEtVmMoYiksZT0xPDxjLGR8PWFbY10sYiY9fmU7cmV0dXJuIGR9XG5mdW5jdGlvbiBXYyhhKXthPWEucGVuZGluZ0xhbmVzJi0xMDczNzQxODI1O3JldHVybiAwIT09YT9hOmEmMTA3Mzc0MTgyND8xMDczNzQxODI0OjB9ZnVuY3Rpb24gWGMoYSxiKXtzd2l0Y2goYSl7Y2FzZSAxNTpyZXR1cm4gMTtjYXNlIDE0OnJldHVybiAyO2Nhc2UgMTI6cmV0dXJuIGE9WWMoMjQmfmIpLDA9PT1hP1hjKDEwLGIpOmE7Y2FzZSAxMDpyZXR1cm4gYT1ZYygxOTImfmIpLDA9PT1hP1hjKDgsYik6YTtjYXNlIDg6cmV0dXJuIGE9WWMoMzU4NCZ+YiksMD09PWEmJihhPVljKDQxODYxMTImfmIpLDA9PT1hJiYoYT01MTIpKSxhO2Nhc2UgMjpyZXR1cm4gYj1ZYyg4MDUzMDYzNjgmfmIpLDA9PT1iJiYoYj0yNjg0MzU0NTYpLGJ9dGhyb3cgRXJyb3IoeSgzNTgsYSkpO31mdW5jdGlvbiBZYyhhKXtyZXR1cm4gYSYtYX1mdW5jdGlvbiBaYyhhKXtmb3IodmFyIGI9W10sYz0wOzMxPmM7YysrKWIucHVzaChhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uICRjKGEsYixjKXthLnBlbmRpbmdMYW5lc3w9Yjt2YXIgZD1iLTE7YS5zdXNwZW5kZWRMYW5lcyY9ZDthLnBpbmdlZExhbmVzJj1kO2E9YS5ldmVudFRpbWVzO2I9MzEtVmMoYik7YVtiXT1jfXZhciBWYz1NYXRoLmNsejMyP01hdGguY2x6MzI6YWQsYmQ9TWF0aC5sb2csY2Q9TWF0aC5MTjI7ZnVuY3Rpb24gYWQoYSl7cmV0dXJuIDA9PT1hPzMyOjMxLShiZChhKS9jZHwwKXwwfXZhciBkZD1yLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LGVkPXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LGZkPSEwO2Z1bmN0aW9uIGdkKGEsYixjLGQpe0tifHxJYigpO3ZhciBlPWhkLGY9S2I7S2I9ITA7dHJ5e0hiKGUsYSxiLGMsZCl9ZmluYWxseXsoS2I9Zil8fE1iKCl9fWZ1bmN0aW9uIGlkKGEsYixjLGQpe2VkKGRkLGhkLmJpbmQobnVsbCxhLGIsYyxkKSl9XG5mdW5jdGlvbiBoZChhLGIsYyxkKXtpZihmZCl7dmFyIGU7aWYoKGU9MD09PShiJjQpKSYmMDxqYy5sZW5ndGgmJi0xPHFjLmluZGV4T2YoYSkpYT1yYyhudWxsLGEsYixjLGQpLGpjLnB1c2goYSk7ZWxzZXt2YXIgZj15YyhhLGIsYyxkKTtpZihudWxsPT09ZillJiZzYyhhLGQpO2Vsc2V7aWYoZSl7aWYoLTE8cWMuaW5kZXhPZihhKSl7YT1yYyhmLGEsYixjLGQpO2pjLnB1c2goYSk7cmV0dXJufWlmKHVjKGYsYSxiLGMsZCkpcmV0dXJuO3NjKGEsZCl9amQoYSxiLGQsbnVsbCxjKX19fX1cbmZ1bmN0aW9uIHljKGEsYixjLGQpe3ZhciBlPXhiKGQpO2U9d2MoZSk7aWYobnVsbCE9PWUpe3ZhciBmPVpiKGUpO2lmKG51bGw9PT1mKWU9bnVsbDtlbHNle3ZhciBnPWYudGFnO2lmKDEzPT09Zyl7ZT0kYihmKTtpZihudWxsIT09ZSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09Zyl7aWYoZi5zdGF0ZU5vZGUuaHlkcmF0ZSlyZXR1cm4gMz09PWYudGFnP2Yuc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSBmIT09ZSYmKGU9bnVsbCl9fWpkKGEsYixkLGUsYyk7cmV0dXJuIG51bGx9dmFyIGtkPW51bGwsbGQ9bnVsbCxtZD1udWxsO1xuZnVuY3Rpb24gbmQoKXtpZihtZClyZXR1cm4gbWQ7dmFyIGEsYj1sZCxjPWIubGVuZ3RoLGQsZT1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxmPWUubGVuZ3RoO2ZvcihhPTA7YTxjJiZiW2FdPT09ZVthXTthKyspO3ZhciBnPWMtYTtmb3IoZD0xO2Q8PWcmJmJbYy1kXT09PWVbZi1kXTtkKyspO3JldHVybiBtZD1lLnNsaWNlKGEsMTxkPzEtZDp2b2lkIDApfWZ1bmN0aW9uIG9kKGEpe3ZhciBiPWEua2V5Q29kZTtcImNoYXJDb2RlXCJpbiBhPyhhPWEuY2hhckNvZGUsMD09PWEmJjEzPT09YiYmKGE9MTMpKTphPWI7MTA9PT1hJiYoYT0xMyk7cmV0dXJuIDMyPD1hfHwxMz09PWE/YTowfWZ1bmN0aW9uIHBkKCl7cmV0dXJuITB9ZnVuY3Rpb24gcWQoKXtyZXR1cm4hMX1cbmZ1bmN0aW9uIHJkKGEpe2Z1bmN0aW9uIGIoYixkLGUsZixnKXt0aGlzLl9yZWFjdE5hbWU9Yjt0aGlzLl90YXJnZXRJbnN0PWU7dGhpcy50eXBlPWQ7dGhpcy5uYXRpdmVFdmVudD1mO3RoaXMudGFyZ2V0PWc7dGhpcy5jdXJyZW50VGFyZ2V0PW51bGw7Zm9yKHZhciBjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmKGI9YVtjXSx0aGlzW2NdPWI/YihmKTpmW2NdKTt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0obnVsbCE9Zi5kZWZhdWx0UHJldmVudGVkP2YuZGVmYXVsdFByZXZlbnRlZDohMT09PWYucmV0dXJuVmFsdWUpP3BkOnFkO3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cWQ7cmV0dXJuIHRoaXN9bShiLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6XCJ1bmtub3duXCIhPT10eXBlb2YgYS5yZXR1cm5WYWx1ZSYmXG4oYS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cGQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnN0b3BQcm9wYWdhdGlvbj9hLnN0b3BQcm9wYWdhdGlvbigpOlwidW5rbm93blwiIT09dHlwZW9mIGEuY2FuY2VsQnViYmxlJiYoYS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cGQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7fSxpc1BlcnNpc3RlbnQ6cGR9KTtyZXR1cm4gYn1cbnZhciBzZD17ZXZlbnRQaGFzZTowLGJ1YmJsZXM6MCxjYW5jZWxhYmxlOjAsdGltZVN0YW1wOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDowLGlzVHJ1c3RlZDowfSx0ZD1yZChzZCksdWQ9bSh7fSxzZCx7dmlldzowLGRldGFpbDowfSksdmQ9cmQodWQpLHdkLHhkLHlkLEFkPW0oe30sdWQse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6emQsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWEucmVsYXRlZFRhcmdldD9hLmZyb21FbGVtZW50PT09YS5zcmNFbGVtZW50P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ6YS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oYSl7aWYoXCJtb3ZlbWVudFhcImluXG5hKXJldHVybiBhLm1vdmVtZW50WDthIT09eWQmJih5ZCYmXCJtb3VzZW1vdmVcIj09PWEudHlwZT8od2Q9YS5zY3JlZW5YLXlkLnNjcmVlblgseGQ9YS5zY3JlZW5ZLXlkLnNjcmVlblkpOnhkPXdkPTAseWQ9YSk7cmV0dXJuIHdkfSxtb3ZlbWVudFk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJtb3ZlbWVudFlcImluIGE/YS5tb3ZlbWVudFk6eGR9fSksQmQ9cmQoQWQpLENkPW0oe30sQWQse2RhdGFUcmFuc2ZlcjowfSksRGQ9cmQoQ2QpLEVkPW0oe30sdWQse3JlbGF0ZWRUYXJnZXQ6MH0pLEZkPXJkKEVkKSxHZD1tKHt9LHNkLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxIZD1yZChHZCksSWQ9bSh7fSxzZCx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihhKXtyZXR1cm5cImNsaXBib2FyZERhdGFcImluIGE/YS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pLEpkPXJkKElkKSxLZD1tKHt9LHNkLHtkYXRhOjB9KSxMZD1yZChLZCksTWQ9e0VzYzpcIkVzY2FwZVwiLFxuU3BhY2ViYXI6XCIgXCIsTGVmdDpcIkFycm93TGVmdFwiLFVwOlwiQXJyb3dVcFwiLFJpZ2h0OlwiQXJyb3dSaWdodFwiLERvd246XCJBcnJvd0Rvd25cIixEZWw6XCJEZWxldGVcIixXaW46XCJPU1wiLE1lbnU6XCJDb250ZXh0TWVudVwiLEFwcHM6XCJDb250ZXh0TWVudVwiLFNjcm9sbDpcIlNjcm9sbExvY2tcIixNb3pQcmludGFibGVLZXk6XCJVbmlkZW50aWZpZWRcIn0sTmQ9ezg6XCJCYWNrc3BhY2VcIiw5OlwiVGFiXCIsMTI6XCJDbGVhclwiLDEzOlwiRW50ZXJcIiwxNjpcIlNoaWZ0XCIsMTc6XCJDb250cm9sXCIsMTg6XCJBbHRcIiwxOTpcIlBhdXNlXCIsMjA6XCJDYXBzTG9ja1wiLDI3OlwiRXNjYXBlXCIsMzI6XCIgXCIsMzM6XCJQYWdlVXBcIiwzNDpcIlBhZ2VEb3duXCIsMzU6XCJFbmRcIiwzNjpcIkhvbWVcIiwzNzpcIkFycm93TGVmdFwiLDM4OlwiQXJyb3dVcFwiLDM5OlwiQXJyb3dSaWdodFwiLDQwOlwiQXJyb3dEb3duXCIsNDU6XCJJbnNlcnRcIiw0NjpcIkRlbGV0ZVwiLDExMjpcIkYxXCIsMTEzOlwiRjJcIiwxMTQ6XCJGM1wiLDExNTpcIkY0XCIsMTE2OlwiRjVcIiwxMTc6XCJGNlwiLDExODpcIkY3XCIsXG4xMTk6XCJGOFwiLDEyMDpcIkY5XCIsMTIxOlwiRjEwXCIsMTIyOlwiRjExXCIsMTIzOlwiRjEyXCIsMTQ0OlwiTnVtTG9ja1wiLDE0NTpcIlNjcm9sbExvY2tcIiwyMjQ6XCJNZXRhXCJ9LE9kPXtBbHQ6XCJhbHRLZXlcIixDb250cm9sOlwiY3RybEtleVwiLE1ldGE6XCJtZXRhS2V5XCIsU2hpZnQ6XCJzaGlmdEtleVwifTtmdW5jdGlvbiBQZChhKXt2YXIgYj10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiBiLmdldE1vZGlmaWVyU3RhdGU/Yi5nZXRNb2RpZmllclN0YXRlKGEpOihhPU9kW2FdKT8hIWJbYV06ITF9ZnVuY3Rpb24gemQoKXtyZXR1cm4gUGR9XG52YXIgUWQ9bSh7fSx1ZCx7a2V5OmZ1bmN0aW9uKGEpe2lmKGEua2V5KXt2YXIgYj1NZFthLmtleV18fGEua2V5O2lmKFwiVW5pZGVudGlmaWVkXCIhPT1iKXJldHVybiBifXJldHVyblwia2V5cHJlc3NcIj09PWEudHlwZT8oYT1vZChhKSwxMz09PWE/XCJFbnRlclwiOlN0cmluZy5mcm9tQ2hhckNvZGUoYSkpOlwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/TmRbYS5rZXlDb2RlXXx8XCJVbmlkZW50aWZpZWRcIjpcIlwifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZCxjaGFyQ29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/b2QoYSk6MH0sa2V5Q29kZTpmdW5jdGlvbihhKXtyZXR1cm5cImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihhKXtyZXR1cm5cImtleXByZXNzXCI9PT1cbmEudHlwZT9vZChhKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP2Eua2V5Q29kZTowfX0pLFJkPXJkKFFkKSxTZD1tKHt9LEFkLHtwb2ludGVySWQ6MCx3aWR0aDowLGhlaWdodDowLHByZXNzdXJlOjAsdGFuZ2VudGlhbFByZXNzdXJlOjAsdGlsdFg6MCx0aWx0WTowLHR3aXN0OjAscG9pbnRlclR5cGU6MCxpc1ByaW1hcnk6MH0pLFRkPXJkKFNkKSxVZD1tKHt9LHVkLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6emR9KSxWZD1yZChVZCksV2Q9bSh7fSxzZCx7cHJvcGVydHlOYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSxYZD1yZChXZCksWWQ9bSh7fSxBZCx7ZGVsdGFYOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFYXCJpbiBhP2EuZGVsdGFYOlwid2hlZWxEZWx0YVhcImluIGE/LWEud2hlZWxEZWx0YVg6MH0sXG5kZWx0YVk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJkZWx0YVlcImluIGE/YS5kZWx0YVk6XCJ3aGVlbERlbHRhWVwiaW4gYT8tYS53aGVlbERlbHRhWTpcIndoZWVsRGVsdGFcImluIGE/LWEud2hlZWxEZWx0YTowfSxkZWx0YVo6MCxkZWx0YU1vZGU6MH0pLFpkPXJkKFlkKSwkZD1bOSwxMywyNywzMl0sYWU9ZmEmJlwiQ29tcG9zaXRpb25FdmVudFwiaW4gd2luZG93LGJlPW51bGw7ZmEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmKGJlPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIGNlPWZhJiZcIlRleHRFdmVudFwiaW4gd2luZG93JiYhYmUsZGU9ZmEmJighYWV8fGJlJiY4PGJlJiYxMT49YmUpLGVlPVN0cmluZy5mcm9tQ2hhckNvZGUoMzIpLGZlPSExO1xuZnVuY3Rpb24gZ2UoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImtleXVwXCI6cmV0dXJuLTEhPT0kZC5pbmRleE9mKGIua2V5Q29kZSk7Y2FzZSBcImtleWRvd25cIjpyZXR1cm4gMjI5IT09Yi5rZXlDb2RlO2Nhc2UgXCJrZXlwcmVzc1wiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwiZm9jdXNvdXRcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBoZShhKXthPWEuZGV0YWlsO3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmXCJkYXRhXCJpbiBhP2EuZGF0YTpudWxsfXZhciBpZT0hMTtmdW5jdGlvbiBqZShhLGIpe3N3aXRjaChhKXtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gaGUoYik7Y2FzZSBcImtleXByZXNzXCI6aWYoMzIhPT1iLndoaWNoKXJldHVybiBudWxsO2ZlPSEwO3JldHVybiBlZTtjYXNlIFwidGV4dElucHV0XCI6cmV0dXJuIGE9Yi5kYXRhLGE9PT1lZSYmZmU/bnVsbDphO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24ga2UoYSxiKXtpZihpZSlyZXR1cm5cImNvbXBvc2l0aW9uZW5kXCI9PT1hfHwhYWUmJmdlKGEsYik/KGE9bmQoKSxtZD1sZD1rZD1udWxsLGllPSExLGEpOm51bGw7c3dpdGNoKGEpe2Nhc2UgXCJwYXN0ZVwiOnJldHVybiBudWxsO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKCEoYi5jdHJsS2V5fHxiLmFsdEtleXx8Yi5tZXRhS2V5KXx8Yi5jdHJsS2V5JiZiLmFsdEtleSl7aWYoYi5jaGFyJiYxPGIuY2hhci5sZW5ndGgpcmV0dXJuIGIuY2hhcjtpZihiLndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGIud2hpY2gpfXJldHVybiBudWxsO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBkZSYmXCJrb1wiIT09Yi5sb2NhbGU/bnVsbDpiLmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG52YXIgbGU9e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsXCJkYXRldGltZS1sb2NhbFwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gbWUoYSl7dmFyIGI9YSYmYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PWI/ISFsZVthLnR5cGVdOlwidGV4dGFyZWFcIj09PWI/ITA6ITF9ZnVuY3Rpb24gbmUoYSxiLGMsZCl7RWIoZCk7Yj1vZShiLFwib25DaGFuZ2VcIik7MDxiLmxlbmd0aCYmKGM9bmV3IHRkKFwib25DaGFuZ2VcIixcImNoYW5nZVwiLG51bGwsYyxkKSxhLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOmJ9KSl9dmFyIHBlPW51bGwscWU9bnVsbDtmdW5jdGlvbiByZShhKXtzZShhLDApfWZ1bmN0aW9uIHRlKGEpe3ZhciBiPXVlKGEpO2lmKFdhKGIpKXJldHVybiBhfVxuZnVuY3Rpb24gdmUoYSxiKXtpZihcImNoYW5nZVwiPT09YSlyZXR1cm4gYn12YXIgd2U9ITE7aWYoZmEpe3ZhciB4ZTtpZihmYSl7dmFyIHllPVwib25pbnB1dFwiaW4gZG9jdW1lbnQ7aWYoIXllKXt2YXIgemU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt6ZS5zZXRBdHRyaWJ1dGUoXCJvbmlucHV0XCIsXCJyZXR1cm47XCIpO3llPVwiZnVuY3Rpb25cIj09PXR5cGVvZiB6ZS5vbmlucHV0fXhlPXllfWVsc2UgeGU9ITE7d2U9eGUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSl9ZnVuY3Rpb24gQWUoKXtwZSYmKHBlLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLEJlKSxxZT1wZT1udWxsKX1mdW5jdGlvbiBCZShhKXtpZihcInZhbHVlXCI9PT1hLnByb3BlcnR5TmFtZSYmdGUocWUpKXt2YXIgYj1bXTtuZShiLHFlLGEseGIoYSkpO2E9cmU7aWYoS2IpYShiKTtlbHNle0tiPSEwO3RyeXtHYihhLGIpfWZpbmFsbHl7S2I9ITEsTWIoKX19fX1cbmZ1bmN0aW9uIENlKGEsYixjKXtcImZvY3VzaW5cIj09PWE/KEFlKCkscGU9YixxZT1jLHBlLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLEJlKSk6XCJmb2N1c291dFwiPT09YSYmQWUoKX1mdW5jdGlvbiBEZShhKXtpZihcInNlbGVjdGlvbmNoYW5nZVwiPT09YXx8XCJrZXl1cFwiPT09YXx8XCJrZXlkb3duXCI9PT1hKXJldHVybiB0ZShxZSl9ZnVuY3Rpb24gRWUoYSxiKXtpZihcImNsaWNrXCI9PT1hKXJldHVybiB0ZShiKX1mdW5jdGlvbiBGZShhLGIpe2lmKFwiaW5wdXRcIj09PWF8fFwiY2hhbmdlXCI9PT1hKXJldHVybiB0ZShiKX1mdW5jdGlvbiBHZShhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIEhlPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOkdlLEllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBKZShhLGIpe2lmKEhlKGEsYikpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhfHxudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBifHxudWxsPT09YilyZXR1cm4hMTt2YXIgYz1PYmplY3Qua2V5cyhhKSxkPU9iamVjdC5rZXlzKGIpO2lmKGMubGVuZ3RoIT09ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylpZighSWUuY2FsbChiLGNbZF0pfHwhSGUoYVtjW2RdXSxiW2NbZF1dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBLZShhKXtmb3IoO2EmJmEuZmlyc3RDaGlsZDspYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9XG5mdW5jdGlvbiBMZShhLGIpe3ZhciBjPUtlKGEpO2E9MDtmb3IodmFyIGQ7Yzspe2lmKDM9PT1jLm5vZGVUeXBlKXtkPWErYy50ZXh0Q29udGVudC5sZW5ndGg7aWYoYTw9YiYmZD49YilyZXR1cm57bm9kZTpjLG9mZnNldDpiLWF9O2E9ZH1hOntmb3IoO2M7KXtpZihjLm5leHRTaWJsaW5nKXtjPWMubmV4dFNpYmxpbmc7YnJlYWsgYX1jPWMucGFyZW50Tm9kZX1jPXZvaWQgMH1jPUtlKGMpfX1mdW5jdGlvbiBNZShhLGIpe3JldHVybiBhJiZiP2E9PT1iPyEwOmEmJjM9PT1hLm5vZGVUeXBlPyExOmImJjM9PT1iLm5vZGVUeXBlP01lKGEsYi5wYXJlbnROb2RlKTpcImNvbnRhaW5zXCJpbiBhP2EuY29udGFpbnMoYik6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KTohMTohMX1cbmZ1bmN0aW9uIE5lKCl7Zm9yKHZhciBhPXdpbmRvdyxiPVhhKCk7YiBpbnN0YW5jZW9mIGEuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIGM9XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChkKXtjPSExfWlmKGMpYT1iLmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhaztiPVhhKGEuZG9jdW1lbnQpfXJldHVybiBifWZ1bmN0aW9uIE9lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYiYmKFwiaW5wdXRcIj09PWImJihcInRleHRcIj09PWEudHlwZXx8XCJzZWFyY2hcIj09PWEudHlwZXx8XCJ0ZWxcIj09PWEudHlwZXx8XCJ1cmxcIj09PWEudHlwZXx8XCJwYXNzd29yZFwiPT09YS50eXBlKXx8XCJ0ZXh0YXJlYVwiPT09Ynx8XCJ0cnVlXCI9PT1hLmNvbnRlbnRFZGl0YWJsZSl9XG52YXIgUGU9ZmEmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxRZT1udWxsLFJlPW51bGwsU2U9bnVsbCxUZT0hMTtcbmZ1bmN0aW9uIFVlKGEsYixjKXt2YXIgZD1jLndpbmRvdz09PWM/Yy5kb2N1bWVudDo5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudDtUZXx8bnVsbD09UWV8fFFlIT09WGEoZCl8fChkPVFlLFwic2VsZWN0aW9uU3RhcnRcImluIGQmJk9lKGQpP2Q9e3N0YXJ0OmQuc2VsZWN0aW9uU3RhcnQsZW5kOmQuc2VsZWN0aW9uRW5kfTooZD0oZC5vd25lckRvY3VtZW50JiZkLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCksZD17YW5jaG9yTm9kZTpkLmFuY2hvck5vZGUsYW5jaG9yT2Zmc2V0OmQuYW5jaG9yT2Zmc2V0LGZvY3VzTm9kZTpkLmZvY3VzTm9kZSxmb2N1c09mZnNldDpkLmZvY3VzT2Zmc2V0fSksU2UmJkplKFNlLGQpfHwoU2U9ZCxkPW9lKFJlLFwib25TZWxlY3RcIiksMDxkLmxlbmd0aCYmKGI9bmV3IHRkKFwib25TZWxlY3RcIixcInNlbGVjdFwiLG51bGwsYixjKSxhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmR9KSxiLnRhcmdldD1RZSkpKX1cblBjKFwiY2FuY2VsIGNhbmNlbCBjbGljayBjbGljayBjbG9zZSBjbG9zZSBjb250ZXh0bWVudSBjb250ZXh0TWVudSBjb3B5IGNvcHkgY3V0IGN1dCBhdXhjbGljayBhdXhDbGljayBkYmxjbGljayBkb3VibGVDbGljayBkcmFnZW5kIGRyYWdFbmQgZHJhZ3N0YXJ0IGRyYWdTdGFydCBkcm9wIGRyb3AgZm9jdXNpbiBmb2N1cyBmb2N1c291dCBibHVyIGlucHV0IGlucHV0IGludmFsaWQgaW52YWxpZCBrZXlkb3duIGtleURvd24ga2V5cHJlc3Mga2V5UHJlc3Mga2V5dXAga2V5VXAgbW91c2Vkb3duIG1vdXNlRG93biBtb3VzZXVwIG1vdXNlVXAgcGFzdGUgcGFzdGUgcGF1c2UgcGF1c2UgcGxheSBwbGF5IHBvaW50ZXJjYW5jZWwgcG9pbnRlckNhbmNlbCBwb2ludGVyZG93biBwb2ludGVyRG93biBwb2ludGVydXAgcG9pbnRlclVwIHJhdGVjaGFuZ2UgcmF0ZUNoYW5nZSByZXNldCByZXNldCBzZWVrZWQgc2Vla2VkIHN1Ym1pdCBzdWJtaXQgdG91Y2hjYW5jZWwgdG91Y2hDYW5jZWwgdG91Y2hlbmQgdG91Y2hFbmQgdG91Y2hzdGFydCB0b3VjaFN0YXJ0IHZvbHVtZWNoYW5nZSB2b2x1bWVDaGFuZ2VcIi5zcGxpdChcIiBcIiksXG4wKTtQYyhcImRyYWcgZHJhZyBkcmFnZW50ZXIgZHJhZ0VudGVyIGRyYWdleGl0IGRyYWdFeGl0IGRyYWdsZWF2ZSBkcmFnTGVhdmUgZHJhZ292ZXIgZHJhZ092ZXIgbW91c2Vtb3ZlIG1vdXNlTW92ZSBtb3VzZW91dCBtb3VzZU91dCBtb3VzZW92ZXIgbW91c2VPdmVyIHBvaW50ZXJtb3ZlIHBvaW50ZXJNb3ZlIHBvaW50ZXJvdXQgcG9pbnRlck91dCBwb2ludGVyb3ZlciBwb2ludGVyT3ZlciBzY3JvbGwgc2Nyb2xsIHRvZ2dsZSB0b2dnbGUgdG91Y2htb3ZlIHRvdWNoTW92ZSB3aGVlbCB3aGVlbFwiLnNwbGl0KFwiIFwiKSwxKTtQYyhPYywyKTtmb3IodmFyIFZlPVwiY2hhbmdlIHNlbGVjdGlvbmNoYW5nZSB0ZXh0SW5wdXQgY29tcG9zaXRpb25zdGFydCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnVwZGF0ZVwiLnNwbGl0KFwiIFwiKSxXZT0wO1dlPFZlLmxlbmd0aDtXZSsrKU5jLnNldChWZVtXZV0sMCk7ZWEoXCJvbk1vdXNlRW50ZXJcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKTtcbmVhKFwib25Nb3VzZUxlYXZlXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7ZWEoXCJvblBvaW50ZXJFbnRlclwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtlYShcIm9uUG9pbnRlckxlYXZlXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pO2RhKFwib25DaGFuZ2VcIixcImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uU2VsZWN0XCIsXCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpO2RhKFwib25CZWZvcmVJbnB1dFwiLFtcImNvbXBvc2l0aW9uZW5kXCIsXCJrZXlwcmVzc1wiLFwidGV4dElucHV0XCIsXCJwYXN0ZVwiXSk7ZGEoXCJvbkNvbXBvc2l0aW9uRW5kXCIsXCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7XG5kYShcIm9uQ29tcG9zaXRpb25TdGFydFwiLFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7dmFyIFhlPVwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFwiIFwiKSxZZT1uZXcgU2V0KFwiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlXCIuc3BsaXQoXCIgXCIpLmNvbmNhdChYZSkpO1xuZnVuY3Rpb24gWmUoYSxiLGMpe3ZhciBkPWEudHlwZXx8XCJ1bmtub3duLWV2ZW50XCI7YS5jdXJyZW50VGFyZ2V0PWM7WWIoZCxiLHZvaWQgMCxhKTthLmN1cnJlbnRUYXJnZXQ9bnVsbH1cbmZ1bmN0aW9uIHNlKGEsYil7Yj0wIT09KGImNCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10sZT1kLmV2ZW50O2Q9ZC5saXN0ZW5lcnM7YTp7dmFyIGY9dm9pZCAwO2lmKGIpZm9yKHZhciBnPWQubGVuZ3RoLTE7MDw9ZztnLS0pe3ZhciBoPWRbZ10saz1oLmluc3RhbmNlLGw9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7WmUoZSxoLGwpO2Y9a31lbHNlIGZvcihnPTA7ZzxkLmxlbmd0aDtnKyspe2g9ZFtnXTtrPWguaW5zdGFuY2U7bD1oLmN1cnJlbnRUYXJnZXQ7aD1oLmxpc3RlbmVyO2lmKGshPT1mJiZlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTtaZShlLGgsbCk7Zj1rfX19aWYoVWIpdGhyb3cgYT1WYixVYj0hMSxWYj1udWxsLGE7fVxuZnVuY3Rpb24gRyhhLGIpe3ZhciBjPSRlKGIpLGQ9YStcIl9fYnViYmxlXCI7Yy5oYXMoZCl8fChhZihiLGEsMiwhMSksYy5hZGQoZCkpfXZhciBiZj1cIl9yZWFjdExpc3RlbmluZ1wiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIGNmKGEpe2FbYmZdfHwoYVtiZl09ITAsYmEuZm9yRWFjaChmdW5jdGlvbihiKXtZZS5oYXMoYil8fGRmKGIsITEsYSxudWxsKTtkZihiLCEwLGEsbnVsbCl9KSl9XG5mdW5jdGlvbiBkZihhLGIsYyxkKXt2YXIgZT00PGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06MCxmPWM7XCJzZWxlY3Rpb25jaGFuZ2VcIj09PWEmJjkhPT1jLm5vZGVUeXBlJiYoZj1jLm93bmVyRG9jdW1lbnQpO2lmKG51bGwhPT1kJiYhYiYmWWUuaGFzKGEpKXtpZihcInNjcm9sbFwiIT09YSlyZXR1cm47ZXw9MjtmPWR9dmFyIGc9JGUoZiksaD1hK1wiX19cIisoYj9cImNhcHR1cmVcIjpcImJ1YmJsZVwiKTtnLmhhcyhoKXx8KGImJihlfD00KSxhZihmLGEsZSxiKSxnLmFkZChoKSl9XG5mdW5jdGlvbiBhZihhLGIsYyxkKXt2YXIgZT1OYy5nZXQoYik7c3dpdGNoKHZvaWQgMD09PWU/MjplKXtjYXNlIDA6ZT1nZDticmVhaztjYXNlIDE6ZT1pZDticmVhaztkZWZhdWx0OmU9aGR9Yz1lLmJpbmQobnVsbCxiLGMsYSk7ZT12b2lkIDA7IVBifHxcInRvdWNoc3RhcnRcIiE9PWImJlwidG91Y2htb3ZlXCIhPT1iJiZcIndoZWVsXCIhPT1ifHwoZT0hMCk7ZD92b2lkIDAhPT1lP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMse2NhcHR1cmU6ITAscGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMCk6dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtwYXNzaXZlOmV9KTphLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKX1cbmZ1bmN0aW9uIGpkKGEsYixjLGQsZSl7dmFyIGY9ZDtpZigwPT09KGImMSkmJjA9PT0oYiYyKSYmbnVsbCE9PWQpYTpmb3IoOzspe2lmKG51bGw9PT1kKXJldHVybjt2YXIgZz1kLnRhZztpZigzPT09Z3x8ND09PWcpe3ZhciBoPWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYoaD09PWV8fDg9PT1oLm5vZGVUeXBlJiZoLnBhcmVudE5vZGU9PT1lKWJyZWFrO2lmKDQ9PT1nKWZvcihnPWQucmV0dXJuO251bGwhPT1nOyl7dmFyIGs9Zy50YWc7aWYoMz09PWt8fDQ9PT1rKWlmKGs9Zy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxrPT09ZXx8OD09PWsubm9kZVR5cGUmJmsucGFyZW50Tm9kZT09PWUpcmV0dXJuO2c9Zy5yZXR1cm59Zm9yKDtudWxsIT09aDspe2c9d2MoaCk7aWYobnVsbD09PWcpcmV0dXJuO2s9Zy50YWc7aWYoNT09PWt8fDY9PT1rKXtkPWY9Zztjb250aW51ZSBhfWg9aC5wYXJlbnROb2RlfX1kPWQucmV0dXJufU5iKGZ1bmN0aW9uKCl7dmFyIGQ9ZixlPXhiKGMpLGc9W107XG5hOnt2YXIgaD1NYy5nZXQoYSk7aWYodm9pZCAwIT09aCl7dmFyIGs9dGQseD1hO3N3aXRjaChhKXtjYXNlIFwia2V5cHJlc3NcIjppZigwPT09b2QoYykpYnJlYWsgYTtjYXNlIFwia2V5ZG93blwiOmNhc2UgXCJrZXl1cFwiOms9UmQ7YnJlYWs7Y2FzZSBcImZvY3VzaW5cIjp4PVwiZm9jdXNcIjtrPUZkO2JyZWFrO2Nhc2UgXCJmb2N1c291dFwiOng9XCJibHVyXCI7az1GZDticmVhaztjYXNlIFwiYmVmb3JlYmx1clwiOmNhc2UgXCJhZnRlcmJsdXJcIjprPUZkO2JyZWFrO2Nhc2UgXCJjbGlja1wiOmlmKDI9PT1jLmJ1dHRvbilicmVhayBhO2Nhc2UgXCJhdXhjbGlja1wiOmNhc2UgXCJkYmxjbGlja1wiOmNhc2UgXCJtb3VzZWRvd25cIjpjYXNlIFwibW91c2Vtb3ZlXCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwibW91c2VvdXRcIjpjYXNlIFwibW91c2VvdmVyXCI6Y2FzZSBcImNvbnRleHRtZW51XCI6az1CZDticmVhaztjYXNlIFwiZHJhZ1wiOmNhc2UgXCJkcmFnZW5kXCI6Y2FzZSBcImRyYWdlbnRlclwiOmNhc2UgXCJkcmFnZXhpdFwiOmNhc2UgXCJkcmFnbGVhdmVcIjpjYXNlIFwiZHJhZ292ZXJcIjpjYXNlIFwiZHJhZ3N0YXJ0XCI6Y2FzZSBcImRyb3BcIjprPVxuRGQ7YnJlYWs7Y2FzZSBcInRvdWNoY2FuY2VsXCI6Y2FzZSBcInRvdWNoZW5kXCI6Y2FzZSBcInRvdWNobW92ZVwiOmNhc2UgXCJ0b3VjaHN0YXJ0XCI6az1WZDticmVhaztjYXNlIEljOmNhc2UgSmM6Y2FzZSBLYzprPUhkO2JyZWFrO2Nhc2UgTGM6az1YZDticmVhaztjYXNlIFwic2Nyb2xsXCI6az12ZDticmVhaztjYXNlIFwid2hlZWxcIjprPVpkO2JyZWFrO2Nhc2UgXCJjb3B5XCI6Y2FzZSBcImN1dFwiOmNhc2UgXCJwYXN0ZVwiOms9SmQ7YnJlYWs7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJwb2ludGVyY2FuY2VsXCI6Y2FzZSBcInBvaW50ZXJkb3duXCI6Y2FzZSBcInBvaW50ZXJtb3ZlXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpjYXNlIFwicG9pbnRlcm92ZXJcIjpjYXNlIFwicG9pbnRlcnVwXCI6az1UZH12YXIgdz0wIT09KGImNCksej0hdyYmXCJzY3JvbGxcIj09PWEsdT13P251bGwhPT1oP2grXCJDYXB0dXJlXCI6bnVsbDpoO3c9W107Zm9yKHZhciB0PWQscTtudWxsIT09XG50Oyl7cT10O3ZhciB2PXEuc3RhdGVOb2RlOzU9PT1xLnRhZyYmbnVsbCE9PXYmJihxPXYsbnVsbCE9PXUmJih2PU9iKHQsdSksbnVsbCE9diYmdy5wdXNoKGVmKHQsdixxKSkpKTtpZih6KWJyZWFrO3Q9dC5yZXR1cm59MDx3Lmxlbmd0aCYmKGg9bmV3IGsoaCx4LG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmgsbGlzdGVuZXJzOnd9KSl9fWlmKDA9PT0oYiY3KSl7YTp7aD1cIm1vdXNlb3ZlclwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YTtrPVwibW91c2VvdXRcIj09PWF8fFwicG9pbnRlcm91dFwiPT09YTtpZihoJiYwPT09KGImMTYpJiYoeD1jLnJlbGF0ZWRUYXJnZXR8fGMuZnJvbUVsZW1lbnQpJiYod2MoeCl8fHhbZmZdKSlicmVhayBhO2lmKGt8fGgpe2g9ZS53aW5kb3c9PT1lP2U6KGg9ZS5vd25lckRvY3VtZW50KT9oLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvdzp3aW5kb3c7aWYoayl7aWYoeD1jLnJlbGF0ZWRUYXJnZXR8fGMudG9FbGVtZW50LGs9ZCx4PXg/d2MoeCk6bnVsbCxudWxsIT09XG54JiYoej1aYih4KSx4IT09enx8NSE9PXgudGFnJiY2IT09eC50YWcpKXg9bnVsbH1lbHNlIGs9bnVsbCx4PWQ7aWYoayE9PXgpe3c9QmQ7dj1cIm9uTW91c2VMZWF2ZVwiO3U9XCJvbk1vdXNlRW50ZXJcIjt0PVwibW91c2VcIjtpZihcInBvaW50ZXJvdXRcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWEpdz1UZCx2PVwib25Qb2ludGVyTGVhdmVcIix1PVwib25Qb2ludGVyRW50ZXJcIix0PVwicG9pbnRlclwiO3o9bnVsbD09az9oOnVlKGspO3E9bnVsbD09eD9oOnVlKHgpO2g9bmV3IHcodix0K1wibGVhdmVcIixrLGMsZSk7aC50YXJnZXQ9ejtoLnJlbGF0ZWRUYXJnZXQ9cTt2PW51bGw7d2MoZSk9PT1kJiYodz1uZXcgdyh1LHQrXCJlbnRlclwiLHgsYyxlKSx3LnRhcmdldD1xLHcucmVsYXRlZFRhcmdldD16LHY9dyk7ej12O2lmKGsmJngpYjp7dz1rO3U9eDt0PTA7Zm9yKHE9dztxO3E9Z2YocSkpdCsrO3E9MDtmb3Iodj11O3Y7dj1nZih2KSlxKys7Zm9yKDswPHQtcTspdz1nZih3KSx0LS07Zm9yKDswPHEtdDspdT1cbmdmKHUpLHEtLTtmb3IoO3QtLTspe2lmKHc9PT11fHxudWxsIT09dSYmdz09PXUuYWx0ZXJuYXRlKWJyZWFrIGI7dz1nZih3KTt1PWdmKHUpfXc9bnVsbH1lbHNlIHc9bnVsbDtudWxsIT09ayYmaGYoZyxoLGssdywhMSk7bnVsbCE9PXgmJm51bGwhPT16JiZoZihnLHoseCx3LCEwKX19fWE6e2g9ZD91ZShkKTp3aW5kb3c7az1oLm5vZGVOYW1lJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoXCJzZWxlY3RcIj09PWt8fFwiaW5wdXRcIj09PWsmJlwiZmlsZVwiPT09aC50eXBlKXZhciBKPXZlO2Vsc2UgaWYobWUoaCkpaWYod2UpSj1GZTtlbHNle0o9RGU7dmFyIEs9Q2V9ZWxzZShrPWgubm9kZU5hbWUpJiZcImlucHV0XCI9PT1rLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1oLnR5cGV8fFwicmFkaW9cIj09PWgudHlwZSkmJihKPUVlKTtpZihKJiYoSj1KKGEsZCkpKXtuZShnLEosYyxlKTticmVhayBhfUsmJksoYSxoLGQpO1wiZm9jdXNvdXRcIj09PWEmJihLPWguX3dyYXBwZXJTdGF0ZSkmJlxuSy5jb250cm9sbGVkJiZcIm51bWJlclwiPT09aC50eXBlJiZiYihoLFwibnVtYmVyXCIsaC52YWx1ZSl9Sz1kP3VlKGQpOndpbmRvdztzd2l0Y2goYSl7Y2FzZSBcImZvY3VzaW5cIjppZihtZShLKXx8XCJ0cnVlXCI9PT1LLmNvbnRlbnRFZGl0YWJsZSlRZT1LLFJlPWQsU2U9bnVsbDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjpTZT1SZT1RZT1udWxsO2JyZWFrO2Nhc2UgXCJtb3VzZWRvd25cIjpUZT0hMDticmVhaztjYXNlIFwiY29udGV4dG1lbnVcIjpjYXNlIFwibW91c2V1cFwiOmNhc2UgXCJkcmFnZW5kXCI6VGU9ITE7VWUoZyxjLGUpO2JyZWFrO2Nhc2UgXCJzZWxlY3Rpb25jaGFuZ2VcIjppZihQZSlicmVhaztjYXNlIFwia2V5ZG93blwiOmNhc2UgXCJrZXl1cFwiOlVlKGcsYyxlKX12YXIgUTtpZihhZSliOntzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjp2YXIgTD1cIm9uQ29tcG9zaXRpb25TdGFydFwiO2JyZWFrIGI7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6TD1cIm9uQ29tcG9zaXRpb25FbmRcIjticmVhayBiO1xuY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6TD1cIm9uQ29tcG9zaXRpb25VcGRhdGVcIjticmVhayBifUw9dm9pZCAwfWVsc2UgaWU/Z2UoYSxjKSYmKEw9XCJvbkNvbXBvc2l0aW9uRW5kXCIpOlwia2V5ZG93blwiPT09YSYmMjI5PT09Yy5rZXlDb2RlJiYoTD1cIm9uQ29tcG9zaXRpb25TdGFydFwiKTtMJiYoZGUmJlwia29cIiE9PWMubG9jYWxlJiYoaWV8fFwib25Db21wb3NpdGlvblN0YXJ0XCIhPT1MP1wib25Db21wb3NpdGlvbkVuZFwiPT09TCYmaWUmJihRPW5kKCkpOihrZD1lLGxkPVwidmFsdWVcImluIGtkP2tkLnZhbHVlOmtkLnRleHRDb250ZW50LGllPSEwKSksSz1vZShkLEwpLDA8Sy5sZW5ndGgmJihMPW5ldyBMZChMLGEsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6TCxsaXN0ZW5lcnM6S30pLFE/TC5kYXRhPVE6KFE9aGUoYyksbnVsbCE9PVEmJihMLmRhdGE9USkpKSk7aWYoUT1jZT9qZShhLGMpOmtlKGEsYykpZD1vZShkLFwib25CZWZvcmVJbnB1dFwiKSwwPGQubGVuZ3RoJiYoZT1uZXcgTGQoXCJvbkJlZm9yZUlucHV0XCIsXG5cImJlZm9yZWlucHV0XCIsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6ZSxsaXN0ZW5lcnM6ZH0pLGUuZGF0YT1RKX1zZShnLGIpfSl9ZnVuY3Rpb24gZWYoYSxiLGMpe3JldHVybntpbnN0YW5jZTphLGxpc3RlbmVyOmIsY3VycmVudFRhcmdldDpjfX1mdW5jdGlvbiBvZShhLGIpe2Zvcih2YXIgYz1iK1wiQ2FwdHVyZVwiLGQ9W107bnVsbCE9PWE7KXt2YXIgZT1hLGY9ZS5zdGF0ZU5vZGU7NT09PWUudGFnJiZudWxsIT09ZiYmKGU9ZixmPU9iKGEsYyksbnVsbCE9ZiYmZC51bnNoaWZ0KGVmKGEsZixlKSksZj1PYihhLGIpLG51bGwhPWYmJmQucHVzaChlZihhLGYsZSkpKTthPWEucmV0dXJufXJldHVybiBkfWZ1bmN0aW9uIGdmKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO2RvIGE9YS5yZXR1cm47d2hpbGUoYSYmNSE9PWEudGFnKTtyZXR1cm4gYT9hOm51bGx9XG5mdW5jdGlvbiBoZihhLGIsYyxkLGUpe2Zvcih2YXIgZj1iLl9yZWFjdE5hbWUsZz1bXTtudWxsIT09YyYmYyE9PWQ7KXt2YXIgaD1jLGs9aC5hbHRlcm5hdGUsbD1oLnN0YXRlTm9kZTtpZihudWxsIT09ayYmaz09PWQpYnJlYWs7NT09PWgudGFnJiZudWxsIT09bCYmKGg9bCxlPyhrPU9iKGMsZiksbnVsbCE9ayYmZy51bnNoaWZ0KGVmKGMsayxoKSkpOmV8fChrPU9iKGMsZiksbnVsbCE9ayYmZy5wdXNoKGVmKGMsayxoKSkpKTtjPWMucmV0dXJufTAhPT1nLmxlbmd0aCYmYS5wdXNoKHtldmVudDpiLGxpc3RlbmVyczpnfSl9ZnVuY3Rpb24gamYoKXt9dmFyIGtmPW51bGwsbGY9bnVsbDtmdW5jdGlvbiBtZihhLGIpe3N3aXRjaChhKXtjYXNlIFwiYnV0dG9uXCI6Y2FzZSBcImlucHV0XCI6Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJ0ZXh0YXJlYVwiOnJldHVybiEhYi5hdXRvRm9jdXN9cmV0dXJuITF9XG5mdW5jdGlvbiBuZihhLGIpe3JldHVyblwidGV4dGFyZWFcIj09PWF8fFwib3B0aW9uXCI9PT1hfHxcIm5vc2NyaXB0XCI9PT1hfHxcInN0cmluZ1wiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwibnVtYmVyXCI9PT10eXBlb2YgYi5jaGlsZHJlbnx8XCJvYmplY3RcIj09PXR5cGVvZiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT09Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWx9dmFyIG9mPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLHBmPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnZvaWQgMDtmdW5jdGlvbiBxZihhKXsxPT09YS5ub2RlVHlwZT9hLnRleHRDb250ZW50PVwiXCI6OT09PWEubm9kZVR5cGUmJihhPWEuYm9keSxudWxsIT1hJiYoYS50ZXh0Q29udGVudD1cIlwiKSl9XG5mdW5jdGlvbiByZihhKXtmb3IoO251bGwhPWE7YT1hLm5leHRTaWJsaW5nKXt2YXIgYj1hLm5vZGVUeXBlO2lmKDE9PT1ifHwzPT09YilicmVha31yZXR1cm4gYX1mdW5jdGlvbiBzZihhKXthPWEucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiJFwiPT09Y3x8XCIkIVwiPT09Y3x8XCIkP1wiPT09Yyl7aWYoMD09PWIpcmV0dXJuIGE7Yi0tfWVsc2VcIi8kXCI9PT1jJiZiKyt9YT1hLnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgdGY9MDtmdW5jdGlvbiB1ZihhKXtyZXR1cm57JCR0eXBlb2Y6R2EsdG9TdHJpbmc6YSx2YWx1ZU9mOmF9fXZhciB2Zj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSx3Zj1cIl9fcmVhY3RGaWJlciRcIit2Zix4Zj1cIl9fcmVhY3RQcm9wcyRcIit2ZixmZj1cIl9fcmVhY3RDb250YWluZXIkXCIrdmYseWY9XCJfX3JlYWN0RXZlbnRzJFwiK3ZmO1xuZnVuY3Rpb24gd2MoYSl7dmFyIGI9YVt3Zl07aWYoYilyZXR1cm4gYjtmb3IodmFyIGM9YS5wYXJlbnROb2RlO2M7KXtpZihiPWNbZmZdfHxjW3dmXSl7Yz1iLmFsdGVybmF0ZTtpZihudWxsIT09Yi5jaGlsZHx8bnVsbCE9PWMmJm51bGwhPT1jLmNoaWxkKWZvcihhPXNmKGEpO251bGwhPT1hOyl7aWYoYz1hW3dmXSlyZXR1cm4gYzthPXNmKGEpfXJldHVybiBifWE9YztjPWEucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDYihhKXthPWFbd2ZdfHxhW2ZmXTtyZXR1cm4hYXx8NSE9PWEudGFnJiY2IT09YS50YWcmJjEzIT09YS50YWcmJjMhPT1hLnRhZz9udWxsOmF9ZnVuY3Rpb24gdWUoYSl7aWYoNT09PWEudGFnfHw2PT09YS50YWcpcmV0dXJuIGEuc3RhdGVOb2RlO3Rocm93IEVycm9yKHkoMzMpKTt9ZnVuY3Rpb24gRGIoYSl7cmV0dXJuIGFbeGZdfHxudWxsfVxuZnVuY3Rpb24gJGUoYSl7dmFyIGI9YVt5Zl07dm9pZCAwPT09YiYmKGI9YVt5Zl09bmV3IFNldCk7cmV0dXJuIGJ9dmFyIHpmPVtdLEFmPS0xO2Z1bmN0aW9uIEJmKGEpe3JldHVybntjdXJyZW50OmF9fWZ1bmN0aW9uIEgoYSl7MD5BZnx8KGEuY3VycmVudD16ZltBZl0semZbQWZdPW51bGwsQWYtLSl9ZnVuY3Rpb24gSShhLGIpe0FmKys7emZbQWZdPWEuY3VycmVudDthLmN1cnJlbnQ9Yn12YXIgQ2Y9e30sTT1CZihDZiksTj1CZighMSksRGY9Q2Y7XG5mdW5jdGlvbiBFZihhLGIpe3ZhciBjPWEudHlwZS5jb250ZXh0VHlwZXM7aWYoIWMpcmV0dXJuIENmO3ZhciBkPWEuc3RhdGVOb2RlO2lmKGQmJmQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PWIpcmV0dXJuIGQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIGU9e30sZjtmb3IoZiBpbiBjKWVbZl09YltmXTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9YixhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWUpO3JldHVybiBlfWZ1bmN0aW9uIEZmKGEpe2E9YS5jaGlsZENvbnRleHRUeXBlcztyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWF9ZnVuY3Rpb24gR2YoKXtIKE4pO0goTSl9ZnVuY3Rpb24gSGYoYSxiLGMpe2lmKE0uY3VycmVudCE9PUNmKXRocm93IEVycm9yKHkoMTY4KSk7SShNLGIpO0koTixjKX1cbmZ1bmN0aW9uIElmKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTthPWIuY2hpbGRDb250ZXh0VHlwZXM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGQuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBjO2Q9ZC5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIGUgaW4gZClpZighKGUgaW4gYSkpdGhyb3cgRXJyb3IoeSgxMDgsUmEoYil8fFwiVW5rbm93blwiLGUpKTtyZXR1cm4gbSh7fSxjLGQpfWZ1bmN0aW9uIEpmKGEpe2E9KGE9YS5zdGF0ZU5vZGUpJiZhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxDZjtEZj1NLmN1cnJlbnQ7SShNLGEpO0koTixOLmN1cnJlbnQpO3JldHVybiEwfWZ1bmN0aW9uIEtmKGEsYixjKXt2YXIgZD1hLnN0YXRlTm9kZTtpZighZCl0aHJvdyBFcnJvcih5KDE2OSkpO2M/KGE9SWYoYSxiLERmKSxkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWEsSChOKSxIKE0pLEkoTSxhKSk6SChOKTtJKE4sYyl9XG52YXIgTGY9bnVsbCxNZj1udWxsLE5mPXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LE9mPXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxQZj1yLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFFmPXIudW5zdGFibGVfc2hvdWxkWWllbGQsUmY9ci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsU2Y9ci51bnN0YWJsZV9ub3csVGY9ci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxVZj1yLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFZmPXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksV2Y9ci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxYZj1yLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFlmPXIudW5zdGFibGVfSWRsZVByaW9yaXR5LFpmPXt9LCRmPXZvaWQgMCE9PVJmP1JmOmZ1bmN0aW9uKCl7fSxhZz1udWxsLGJnPW51bGwsY2c9ITEsZGc9U2YoKSxPPTFFND5kZz9TZjpmdW5jdGlvbigpe3JldHVybiBTZigpLWRnfTtcbmZ1bmN0aW9uIGVnKCl7c3dpdGNoKFRmKCkpe2Nhc2UgVWY6cmV0dXJuIDk5O2Nhc2UgVmY6cmV0dXJuIDk4O2Nhc2UgV2Y6cmV0dXJuIDk3O2Nhc2UgWGY6cmV0dXJuIDk2O2Nhc2UgWWY6cmV0dXJuIDk1O2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgzMzIpKTt9fWZ1bmN0aW9uIGZnKGEpe3N3aXRjaChhKXtjYXNlIDk5OnJldHVybiBVZjtjYXNlIDk4OnJldHVybiBWZjtjYXNlIDk3OnJldHVybiBXZjtjYXNlIDk2OnJldHVybiBYZjtjYXNlIDk1OnJldHVybiBZZjtkZWZhdWx0OnRocm93IEVycm9yKHkoMzMyKSk7fX1mdW5jdGlvbiBnZyhhLGIpe2E9ZmcoYSk7cmV0dXJuIE5mKGEsYil9ZnVuY3Rpb24gaGcoYSxiLGMpe2E9ZmcoYSk7cmV0dXJuIE9mKGEsYixjKX1mdW5jdGlvbiBpZygpe2lmKG51bGwhPT1iZyl7dmFyIGE9Ymc7Ymc9bnVsbDtQZihhKX1qZygpfVxuZnVuY3Rpb24gamcoKXtpZighY2cmJm51bGwhPT1hZyl7Y2c9ITA7dmFyIGE9MDt0cnl7dmFyIGI9YWc7Z2coOTksZnVuY3Rpb24oKXtmb3IoO2E8Yi5sZW5ndGg7YSsrKXt2YXIgYz1iW2FdO2RvIGM9YyghMCk7d2hpbGUobnVsbCE9PWMpfX0pO2FnPW51bGx9Y2F0Y2goYyl7dGhyb3cgbnVsbCE9PWFnJiYoYWc9YWcuc2xpY2UoYSsxKSksT2YoVWYsaWcpLGM7fWZpbmFsbHl7Y2c9ITF9fX12YXIga2c9cmEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gbGcoYSxiKXtpZihhJiZhLmRlZmF1bHRQcm9wcyl7Yj1tKHt9LGIpO2E9YS5kZWZhdWx0UHJvcHM7Zm9yKHZhciBjIGluIGEpdm9pZCAwPT09YltjXSYmKGJbY109YVtjXSk7cmV0dXJuIGJ9cmV0dXJuIGJ9dmFyIG1nPUJmKG51bGwpLG5nPW51bGwsb2c9bnVsbCxwZz1udWxsO2Z1bmN0aW9uIHFnKCl7cGc9b2c9bmc9bnVsbH1cbmZ1bmN0aW9uIHJnKGEpe3ZhciBiPW1nLmN1cnJlbnQ7SChtZyk7YS50eXBlLl9jb250ZXh0Ll9jdXJyZW50VmFsdWU9Yn1mdW5jdGlvbiBzZyhhLGIpe2Zvcig7bnVsbCE9PWE7KXt2YXIgYz1hLmFsdGVybmF0ZTtpZigoYS5jaGlsZExhbmVzJmIpPT09YilpZihudWxsPT09Y3x8KGMuY2hpbGRMYW5lcyZiKT09PWIpYnJlYWs7ZWxzZSBjLmNoaWxkTGFuZXN8PWI7ZWxzZSBhLmNoaWxkTGFuZXN8PWIsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpO2E9YS5yZXR1cm59fWZ1bmN0aW9uIHRnKGEsYil7bmc9YTtwZz1vZz1udWxsO2E9YS5kZXBlbmRlbmNpZXM7bnVsbCE9PWEmJm51bGwhPT1hLmZpcnN0Q29udGV4dCYmKDAhPT0oYS5sYW5lcyZiKSYmKHVnPSEwKSxhLmZpcnN0Q29udGV4dD1udWxsKX1cbmZ1bmN0aW9uIHZnKGEsYil7aWYocGchPT1hJiYhMSE9PWImJjAhPT1iKXtpZihcIm51bWJlclwiIT09dHlwZW9mIGJ8fDEwNzM3NDE4MjM9PT1iKXBnPWEsYj0xMDczNzQxODIzO2I9e2NvbnRleHQ6YSxvYnNlcnZlZEJpdHM6YixuZXh0Om51bGx9O2lmKG51bGw9PT1vZyl7aWYobnVsbD09PW5nKXRocm93IEVycm9yKHkoMzA4KSk7b2c9YjtuZy5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmIscmVzcG9uZGVyczpudWxsfX1lbHNlIG9nPW9nLm5leHQ9Yn1yZXR1cm4gYS5fY3VycmVudFZhbHVlfXZhciB3Zz0hMTtmdW5jdGlvbiB4ZyhhKXthLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6YS5tZW1vaXplZFN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpudWxsLGxhc3RCYXNlVXBkYXRlOm51bGwsc2hhcmVkOntwZW5kaW5nOm51bGx9LGVmZmVjdHM6bnVsbH19XG5mdW5jdGlvbiB5ZyhhLGIpe2E9YS51cGRhdGVRdWV1ZTtiLnVwZGF0ZVF1ZXVlPT09YSYmKGIudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6YS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6YS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6YS5zaGFyZWQsZWZmZWN0czphLmVmZmVjdHN9KX1mdW5jdGlvbiB6ZyhhLGIpe3JldHVybntldmVudFRpbWU6YSxsYW5lOmIsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBBZyhhLGIpe2E9YS51cGRhdGVRdWV1ZTtpZihudWxsIT09YSl7YT1hLnNoYXJlZDt2YXIgYz1hLnBlbmRpbmc7bnVsbD09PWM/Yi5uZXh0PWI6KGIubmV4dD1jLm5leHQsYy5uZXh0PWIpO2EucGVuZGluZz1ifX1cbmZ1bmN0aW9uIEJnKGEsYil7dmFyIGM9YS51cGRhdGVRdWV1ZSxkPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1kJiYoZD1kLnVwZGF0ZVF1ZXVlLGM9PT1kKSl7dmFyIGU9bnVsbCxmPW51bGw7Yz1jLmZpcnN0QmFzZVVwZGF0ZTtpZihudWxsIT09Yyl7ZG97dmFyIGc9e2V2ZW50VGltZTpjLmV2ZW50VGltZSxsYW5lOmMubGFuZSx0YWc6Yy50YWcscGF5bG9hZDpjLnBheWxvYWQsY2FsbGJhY2s6Yy5jYWxsYmFjayxuZXh0Om51bGx9O251bGw9PT1mP2U9Zj1nOmY9Zi5uZXh0PWc7Yz1jLm5leHR9d2hpbGUobnVsbCE9PWMpO251bGw9PT1mP2U9Zj1iOmY9Zi5uZXh0PWJ9ZWxzZSBlPWY9YjtjPXtiYXNlU3RhdGU6ZC5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUsbGFzdEJhc2VVcGRhdGU6ZixzaGFyZWQ6ZC5zaGFyZWQsZWZmZWN0czpkLmVmZmVjdHN9O2EudXBkYXRlUXVldWU9YztyZXR1cm59YT1jLmxhc3RCYXNlVXBkYXRlO251bGw9PT1hP2MuZmlyc3RCYXNlVXBkYXRlPWI6YS5uZXh0PVxuYjtjLmxhc3RCYXNlVXBkYXRlPWJ9XG5mdW5jdGlvbiBDZyhhLGIsYyxkKXt2YXIgZT1hLnVwZGF0ZVF1ZXVlO3dnPSExO3ZhciBmPWUuZmlyc3RCYXNlVXBkYXRlLGc9ZS5sYXN0QmFzZVVwZGF0ZSxoPWUuc2hhcmVkLnBlbmRpbmc7aWYobnVsbCE9PWgpe2Uuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgaz1oLGw9ay5uZXh0O2submV4dD1udWxsO251bGw9PT1nP2Y9bDpnLm5leHQ9bDtnPWs7dmFyIG49YS5hbHRlcm5hdGU7aWYobnVsbCE9PW4pe249bi51cGRhdGVRdWV1ZTt2YXIgQT1uLmxhc3RCYXNlVXBkYXRlO0EhPT1nJiYobnVsbD09PUE/bi5maXJzdEJhc2VVcGRhdGU9bDpBLm5leHQ9bCxuLmxhc3RCYXNlVXBkYXRlPWspfX1pZihudWxsIT09Zil7QT1lLmJhc2VTdGF0ZTtnPTA7bj1sPWs9bnVsbDtkb3toPWYubGFuZTt2YXIgcD1mLmV2ZW50VGltZTtpZigoZCZoKT09PWgpe251bGwhPT1uJiYobj1uLm5leHQ9e2V2ZW50VGltZTpwLGxhbmU6MCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxcbm5leHQ6bnVsbH0pO2E6e3ZhciBDPWEseD1mO2g9YjtwPWM7c3dpdGNoKHgudGFnKXtjYXNlIDE6Qz14LnBheWxvYWQ7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEMpe0E9Qy5jYWxsKHAsQSxoKTticmVhayBhfUE9QzticmVhayBhO2Nhc2UgMzpDLmZsYWdzPUMuZmxhZ3MmLTQwOTd8NjQ7Y2FzZSAwOkM9eC5wYXlsb2FkO2g9XCJmdW5jdGlvblwiPT09dHlwZW9mIEM/Qy5jYWxsKHAsQSxoKTpDO2lmKG51bGw9PT1ofHx2b2lkIDA9PT1oKWJyZWFrIGE7QT1tKHt9LEEsaCk7YnJlYWsgYTtjYXNlIDI6d2c9ITB9fW51bGwhPT1mLmNhbGxiYWNrJiYoYS5mbGFnc3w9MzIsaD1lLmVmZmVjdHMsbnVsbD09PWg/ZS5lZmZlY3RzPVtmXTpoLnB1c2goZikpfWVsc2UgcD17ZXZlbnRUaW1lOnAsbGFuZTpoLHRhZzpmLnRhZyxwYXlsb2FkOmYucGF5bG9hZCxjYWxsYmFjazpmLmNhbGxiYWNrLG5leHQ6bnVsbH0sbnVsbD09PW4/KGw9bj1wLGs9QSk6bj1uLm5leHQ9cCxnfD1oO2Y9Zi5uZXh0O2lmKG51bGw9PT1cbmYpaWYoaD1lLnNoYXJlZC5wZW5kaW5nLG51bGw9PT1oKWJyZWFrO2Vsc2UgZj1oLm5leHQsaC5uZXh0PW51bGwsZS5sYXN0QmFzZVVwZGF0ZT1oLGUuc2hhcmVkLnBlbmRpbmc9bnVsbH13aGlsZSgxKTtudWxsPT09biYmKGs9QSk7ZS5iYXNlU3RhdGU9aztlLmZpcnN0QmFzZVVwZGF0ZT1sO2UubGFzdEJhc2VVcGRhdGU9bjtEZ3w9ZzthLmxhbmVzPWc7YS5tZW1vaXplZFN0YXRlPUF9fWZ1bmN0aW9uIEVnKGEsYixjKXthPWIuZWZmZWN0cztiLmVmZmVjdHM9bnVsbDtpZihudWxsIT09YSlmb3IoYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgZD1hW2JdLGU9ZC5jYWxsYmFjaztpZihudWxsIT09ZSl7ZC5jYWxsYmFjaz1udWxsO2Q9YztpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZSl0aHJvdyBFcnJvcih5KDE5MSxlKSk7ZS5jYWxsKGQpfX19dmFyIEZnPShuZXcgYWEuQ29tcG9uZW50KS5yZWZzO1xuZnVuY3Rpb24gR2coYSxiLGMsZCl7Yj1hLm1lbW9pemVkU3RhdGU7Yz1jKGQsYik7Yz1udWxsPT09Y3x8dm9pZCAwPT09Yz9iOm0oe30sYixjKTthLm1lbW9pemVkU3RhdGU9YzswPT09YS5sYW5lcyYmKGEudXBkYXRlUXVldWUuYmFzZVN0YXRlPWMpfVxudmFyIEtnPXtpc01vdW50ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5fcmVhY3RJbnRlcm5hbHMpP1piKGEpPT09YTohMX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPUhnKCksZT1JZyhhKSxmPXpnKGQsZSk7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0FnKGEsZik7SmcoYSxlLGQpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGEsYixjKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBkPUhnKCksZT1JZyhhKSxmPXpnKGQsZSk7Zi50YWc9MTtmLnBheWxvYWQ9Yjt2b2lkIDAhPT1jJiZudWxsIT09YyYmKGYuY2FsbGJhY2s9Yyk7QWcoYSxmKTtKZyhhLGUsZCl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihhLGIpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGM9SGcoKSxkPUlnKGEpLGU9emcoYyxkKTtlLnRhZz0yO3ZvaWQgMCE9PWImJm51bGwhPT1iJiYoZS5jYWxsYmFjaz1cbmIpO0FnKGEsZSk7SmcoYSxkLGMpfX07ZnVuY3Rpb24gTGcoYSxiLGMsZCxlLGYsZyl7YT1hLnN0YXRlTm9kZTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5zaG91bGRDb21wb25lbnRVcGRhdGU/YS5zaG91bGRDb21wb25lbnRVcGRhdGUoZCxmLGcpOmIucHJvdG90eXBlJiZiLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hSmUoYyxkKXx8IUplKGUsZik6ITB9XG5mdW5jdGlvbiBNZyhhLGIsYyl7dmFyIGQ9ITEsZT1DZjt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/Zj12ZyhmKTooZT1GZihiKT9EZjpNLmN1cnJlbnQsZD1iLmNvbnRleHRUeXBlcyxmPShkPW51bGwhPT1kJiZ2b2lkIDAhPT1kKT9FZihhLGUpOkNmKTtiPW5ldyBiKGMsZik7YS5tZW1vaXplZFN0YXRlPW51bGwhPT1iLnN0YXRlJiZ2b2lkIDAhPT1iLnN0YXRlP2Iuc3RhdGU6bnVsbDtiLnVwZGF0ZXI9S2c7YS5zdGF0ZU5vZGU9YjtiLl9yZWFjdEludGVybmFscz1hO2QmJihhPWEuc3RhdGVOb2RlLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1lLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9Zik7cmV0dXJuIGJ9XG5mdW5jdGlvbiBOZyhhLGIsYyxkKXthPWIuc3RhdGU7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtiLnN0YXRlIT09YSYmS2cuZW5xdWV1ZVJlcGxhY2VTdGF0ZShiLGIuc3RhdGUsbnVsbCl9XG5mdW5jdGlvbiBPZyhhLGIsYyxkKXt2YXIgZT1hLnN0YXRlTm9kZTtlLnByb3BzPWM7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7ZS5yZWZzPUZnO3hnKGEpO3ZhciBmPWIuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09Zj9lLmNvbnRleHQ9dmcoZik6KGY9RmYoYik/RGY6TS5jdXJyZW50LGUuY29udGV4dD1FZihhLGYpKTtDZyhhLGMsZSxkKTtlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtmPWIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBmJiYoR2coYSxiLGYsYyksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudHx8XG4oYj1lLnN0YXRlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudFdpbGxNb3VudCYmZS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxiIT09ZS5zdGF0ZSYmS2cuZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLGUuc3RhdGUsbnVsbCksQ2coYSxjLGUsZCksZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGUpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmNvbXBvbmVudERpZE1vdW50JiYoYS5mbGFnc3w9NCl9dmFyIFBnPUFycmF5LmlzQXJyYXk7XG5mdW5jdGlvbiBRZyhhLGIsYyl7YT1jLnJlZjtpZihudWxsIT09YSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJlwib2JqZWN0XCIhPT10eXBlb2YgYSl7aWYoYy5fb3duZXIpe2M9Yy5fb3duZXI7aWYoYyl7aWYoMSE9PWMudGFnKXRocm93IEVycm9yKHkoMzA5KSk7dmFyIGQ9Yy5zdGF0ZU5vZGV9aWYoIWQpdGhyb3cgRXJyb3IoeSgxNDcsYSkpO3ZhciBlPVwiXCIrYTtpZihudWxsIT09YiYmbnVsbCE9PWIucmVmJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5yZWYmJmIucmVmLl9zdHJpbmdSZWY9PT1lKXJldHVybiBiLnJlZjtiPWZ1bmN0aW9uKGEpe3ZhciBiPWQucmVmcztiPT09RmcmJihiPWQucmVmcz17fSk7bnVsbD09PWE/ZGVsZXRlIGJbZV06YltlXT1hfTtiLl9zdHJpbmdSZWY9ZTtyZXR1cm4gYn1pZihcInN0cmluZ1wiIT09dHlwZW9mIGEpdGhyb3cgRXJyb3IoeSgyODQpKTtpZighYy5fb3duZXIpdGhyb3cgRXJyb3IoeSgyOTAsYSkpO31yZXR1cm4gYX1cbmZ1bmN0aW9uIFJnKGEsYil7aWYoXCJ0ZXh0YXJlYVwiIT09YS50eXBlKXRocm93IEVycm9yKHkoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKT9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKGIpLmpvaW4oXCIsIFwiKStcIn1cIjpiKSk7fVxuZnVuY3Rpb24gU2coYSl7ZnVuY3Rpb24gYihiLGMpe2lmKGEpe3ZhciBkPWIubGFzdEVmZmVjdDtudWxsIT09ZD8oZC5uZXh0RWZmZWN0PWMsYi5sYXN0RWZmZWN0PWMpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PWM7Yy5uZXh0RWZmZWN0PW51bGw7Yy5mbGFncz04fX1mdW5jdGlvbiBjKGMsZCl7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09ZDspYihjLGQpLGQ9ZC5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIGQoYSxiKXtmb3IoYT1uZXcgTWFwO251bGwhPT1iOyludWxsIT09Yi5rZXk/YS5zZXQoYi5rZXksYik6YS5zZXQoYi5pbmRleCxiKSxiPWIuc2libGluZztyZXR1cm4gYX1mdW5jdGlvbiBlKGEsYil7YT1UZyhhLGIpO2EuaW5kZXg9MDthLnNpYmxpbmc9bnVsbDtyZXR1cm4gYX1mdW5jdGlvbiBmKGIsYyxkKXtiLmluZGV4PWQ7aWYoIWEpcmV0dXJuIGM7ZD1iLmFsdGVybmF0ZTtpZihudWxsIT09ZClyZXR1cm4gZD1kLmluZGV4LGQ8Yz8oYi5mbGFncz0yLFxuYyk6ZDtiLmZsYWdzPTI7cmV0dXJuIGN9ZnVuY3Rpb24gZyhiKXthJiZudWxsPT09Yi5hbHRlcm5hdGUmJihiLmZsYWdzPTIpO3JldHVybiBifWZ1bmN0aW9uIGgoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDYhPT1iLnRhZylyZXR1cm4gYj1VZyhjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYyk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBrKGEsYixjLGQpe2lmKG51bGwhPT1iJiZiLmVsZW1lbnRUeXBlPT09Yy50eXBlKXJldHVybiBkPWUoYixjLnByb3BzKSxkLnJlZj1RZyhhLGIsYyksZC5yZXR1cm49YSxkO2Q9VmcoYy50eXBlLGMua2V5LGMucHJvcHMsbnVsbCxhLm1vZGUsZCk7ZC5yZWY9UWcoYSxiLGMpO2QucmV0dXJuPWE7cmV0dXJuIGR9ZnVuY3Rpb24gbChhLGIsYyxkKXtpZihudWxsPT09Ynx8NCE9PWIudGFnfHxiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09Yy5jb250YWluZXJJbmZvfHxiLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PWMuaW1wbGVtZW50YXRpb24pcmV0dXJuIGI9XG5XZyhjLGEubW9kZSxkKSxiLnJldHVybj1hLGI7Yj1lKGIsYy5jaGlsZHJlbnx8W10pO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gbihhLGIsYyxkLGYpe2lmKG51bGw9PT1ifHw3IT09Yi50YWcpcmV0dXJuIGI9WGcoYyxhLm1vZGUsZCxmKSxiLnJldHVybj1hLGI7Yj1lKGIsYyk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBBKGEsYixjKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGJ8fFwibnVtYmVyXCI9PT10eXBlb2YgYilyZXR1cm4gYj1VZyhcIlwiK2IsYS5tb2RlLGMpLGIucmV0dXJuPWEsYjtpZihcIm9iamVjdFwiPT09dHlwZW9mIGImJm51bGwhPT1iKXtzd2l0Y2goYi4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYz1WZyhiLnR5cGUsYi5rZXksYi5wcm9wcyxudWxsLGEubW9kZSxjKSxjLnJlZj1RZyhhLG51bGwsYiksYy5yZXR1cm49YSxjO2Nhc2UgdGE6cmV0dXJuIGI9V2coYixhLm1vZGUsYyksYi5yZXR1cm49YSxifWlmKFBnKGIpfHxMYShiKSlyZXR1cm4gYj1YZyhiLFxuYS5tb2RlLGMsbnVsbCksYi5yZXR1cm49YSxiO1JnKGEsYil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChhLGIsYyxkKXt2YXIgZT1udWxsIT09Yj9iLmtleTpudWxsO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgY3x8XCJudW1iZXJcIj09PXR5cGVvZiBjKXJldHVybiBudWxsIT09ZT9udWxsOmgoYSxiLFwiXCIrYyxkKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jKXtzd2l0Y2goYy4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYy5rZXk9PT1lP2MudHlwZT09PXVhP24oYSxiLGMucHJvcHMuY2hpbGRyZW4sZCxlKTprKGEsYixjLGQpOm51bGw7Y2FzZSB0YTpyZXR1cm4gYy5rZXk9PT1lP2woYSxiLGMsZCk6bnVsbH1pZihQZyhjKXx8TGEoYykpcmV0dXJuIG51bGwhPT1lP251bGw6bihhLGIsYyxkLG51bGwpO1JnKGEsYyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQyhhLGIsYyxkLGUpe2lmKFwic3RyaW5nXCI9PT10eXBlb2YgZHx8XCJudW1iZXJcIj09PXR5cGVvZiBkKXJldHVybiBhPWEuZ2V0KGMpfHxcbm51bGwsaChiLGEsXCJcIitkLGUpO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgZCYmbnVsbCE9PWQpe3N3aXRjaChkLiQkdHlwZW9mKXtjYXNlIHNhOnJldHVybiBhPWEuZ2V0KG51bGw9PT1kLmtleT9jOmQua2V5KXx8bnVsbCxkLnR5cGU9PT11YT9uKGIsYSxkLnByb3BzLmNoaWxkcmVuLGUsZC5rZXkpOmsoYixhLGQsZSk7Y2FzZSB0YTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsbChiLGEsZCxlKX1pZihQZyhkKXx8TGEoZCkpcmV0dXJuIGE9YS5nZXQoYyl8fG51bGwsbihiLGEsZCxlLG51bGwpO1JnKGIsZCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24geChlLGcsaCxrKXtmb3IodmFyIGw9bnVsbCx0PW51bGwsdT1nLHo9Zz0wLHE9bnVsbDtudWxsIT09dSYmejxoLmxlbmd0aDt6Kyspe3UuaW5kZXg+ej8ocT11LHU9bnVsbCk6cT11LnNpYmxpbmc7dmFyIG49cChlLHUsaFt6XSxrKTtpZihudWxsPT09bil7bnVsbD09PXUmJih1PXEpO2JyZWFrfWEmJnUmJm51bGw9PT1cbm4uYWx0ZXJuYXRlJiZiKGUsdSk7Zz1mKG4sZyx6KTtudWxsPT09dD9sPW46dC5zaWJsaW5nPW47dD1uO3U9cX1pZih6PT09aC5sZW5ndGgpcmV0dXJuIGMoZSx1KSxsO2lmKG51bGw9PT11KXtmb3IoO3o8aC5sZW5ndGg7eisrKXU9QShlLGhbel0sayksbnVsbCE9PXUmJihnPWYodSxnLHopLG51bGw9PT10P2w9dTp0LnNpYmxpbmc9dSx0PXUpO3JldHVybiBsfWZvcih1PWQoZSx1KTt6PGgubGVuZ3RoO3orKylxPUModSxlLHosaFt6XSxrKSxudWxsIT09cSYmKGEmJm51bGwhPT1xLmFsdGVybmF0ZSYmdS5kZWxldGUobnVsbD09PXEua2V5P3o6cS5rZXkpLGc9ZihxLGcseiksbnVsbD09PXQ/bD1xOnQuc2libGluZz1xLHQ9cSk7YSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiKGUsYSl9KTtyZXR1cm4gbH1mdW5jdGlvbiB3KGUsZyxoLGspe3ZhciBsPUxhKGgpO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBsKXRocm93IEVycm9yKHkoMTUwKSk7aD1sLmNhbGwoaCk7aWYobnVsbD09XG5oKXRocm93IEVycm9yKHkoMTUxKSk7Zm9yKHZhciB0PWw9bnVsbCx1PWcsej1nPTAscT1udWxsLG49aC5uZXh0KCk7bnVsbCE9PXUmJiFuLmRvbmU7eisrLG49aC5uZXh0KCkpe3UuaW5kZXg+ej8ocT11LHU9bnVsbCk6cT11LnNpYmxpbmc7dmFyIHc9cChlLHUsbi52YWx1ZSxrKTtpZihudWxsPT09dyl7bnVsbD09PXUmJih1PXEpO2JyZWFrfWEmJnUmJm51bGw9PT13LmFsdGVybmF0ZSYmYihlLHUpO2c9Zih3LGcseik7bnVsbD09PXQ/bD13OnQuc2libGluZz13O3Q9dzt1PXF9aWYobi5kb25lKXJldHVybiBjKGUsdSksbDtpZihudWxsPT09dSl7Zm9yKDshbi5kb25lO3orKyxuPWgubmV4dCgpKW49QShlLG4udmFsdWUsayksbnVsbCE9PW4mJihnPWYobixnLHopLG51bGw9PT10P2w9bjp0LnNpYmxpbmc9bix0PW4pO3JldHVybiBsfWZvcih1PWQoZSx1KTshbi5kb25lO3orKyxuPWgubmV4dCgpKW49Qyh1LGUseixuLnZhbHVlLGspLG51bGwhPT1uJiYoYSYmbnVsbCE9PW4uYWx0ZXJuYXRlJiZcbnUuZGVsZXRlKG51bGw9PT1uLmtleT96Om4ua2V5KSxnPWYobixnLHopLG51bGw9PT10P2w9bjp0LnNpYmxpbmc9bix0PW4pO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9cmV0dXJuIGZ1bmN0aW9uKGEsZCxmLGgpe3ZhciBrPVwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWYmJmYudHlwZT09PXVhJiZudWxsPT09Zi5rZXk7ayYmKGY9Zi5wcm9wcy5jaGlsZHJlbik7dmFyIGw9XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09ZjtpZihsKXN3aXRjaChmLiQkdHlwZW9mKXtjYXNlIHNhOmE6e2w9Zi5rZXk7Zm9yKGs9ZDtudWxsIT09azspe2lmKGsua2V5PT09bCl7c3dpdGNoKGsudGFnKXtjYXNlIDc6aWYoZi50eXBlPT09dWEpe2MoYSxrLnNpYmxpbmcpO2Q9ZShrLGYucHJvcHMuY2hpbGRyZW4pO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9YnJlYWs7ZGVmYXVsdDppZihrLmVsZW1lbnRUeXBlPT09Zi50eXBlKXtjKGEsay5zaWJsaW5nKTtcbmQ9ZShrLGYucHJvcHMpO2QucmVmPVFnKGEsayxmKTtkLnJldHVybj1hO2E9ZDticmVhayBhfX1jKGEsayk7YnJlYWt9ZWxzZSBiKGEsayk7az1rLnNpYmxpbmd9Zi50eXBlPT09dWE/KGQ9WGcoZi5wcm9wcy5jaGlsZHJlbixhLm1vZGUsaCxmLmtleSksZC5yZXR1cm49YSxhPWQpOihoPVZnKGYudHlwZSxmLmtleSxmLnByb3BzLG51bGwsYS5tb2RlLGgpLGgucmVmPVFnKGEsZCxmKSxoLnJldHVybj1hLGE9aCl9cmV0dXJuIGcoYSk7Y2FzZSB0YTphOntmb3Ioaz1mLmtleTtudWxsIT09ZDspe2lmKGQua2V5PT09aylpZig0PT09ZC50YWcmJmQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1mLmNvbnRhaW5lckluZm8mJmQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09Zi5pbXBsZW1lbnRhdGlvbil7YyhhLGQuc2libGluZyk7ZD1lKGQsZi5jaGlsZHJlbnx8W10pO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9ZWxzZXtjKGEsZCk7YnJlYWt9ZWxzZSBiKGEsZCk7ZD1kLnNpYmxpbmd9ZD1cbldnKGYsYS5tb2RlLGgpO2QucmV0dXJuPWE7YT1kfXJldHVybiBnKGEpfWlmKFwic3RyaW5nXCI9PT10eXBlb2YgZnx8XCJudW1iZXJcIj09PXR5cGVvZiBmKXJldHVybiBmPVwiXCIrZixudWxsIT09ZCYmNj09PWQudGFnPyhjKGEsZC5zaWJsaW5nKSxkPWUoZCxmKSxkLnJldHVybj1hLGE9ZCk6KGMoYSxkKSxkPVVnKGYsYS5tb2RlLGgpLGQucmV0dXJuPWEsYT1kKSxnKGEpO2lmKFBnKGYpKXJldHVybiB4KGEsZCxmLGgpO2lmKExhKGYpKXJldHVybiB3KGEsZCxmLGgpO2wmJlJnKGEsZik7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBmJiYhaylzd2l0Y2goYS50YWcpe2Nhc2UgMTpjYXNlIDIyOmNhc2UgMDpjYXNlIDExOmNhc2UgMTU6dGhyb3cgRXJyb3IoeSgxNTIsUmEoYS50eXBlKXx8XCJDb21wb25lbnRcIikpO31yZXR1cm4gYyhhLGQpfX12YXIgWWc9U2coITApLFpnPVNnKCExKSwkZz17fSxhaD1CZigkZyksYmg9QmYoJGcpLGNoPUJmKCRnKTtcbmZ1bmN0aW9uIGRoKGEpe2lmKGE9PT0kZyl0aHJvdyBFcnJvcih5KDE3NCkpO3JldHVybiBhfWZ1bmN0aW9uIGVoKGEsYil7SShjaCxiKTtJKGJoLGEpO0koYWgsJGcpO2E9Yi5ub2RlVHlwZTtzd2l0Y2goYSl7Y2FzZSA5OmNhc2UgMTE6Yj0oYj1iLmRvY3VtZW50RWxlbWVudCk/Yi5uYW1lc3BhY2VVUkk6bWIobnVsbCxcIlwiKTticmVhaztkZWZhdWx0OmE9OD09PWE/Yi5wYXJlbnROb2RlOmIsYj1hLm5hbWVzcGFjZVVSSXx8bnVsbCxhPWEudGFnTmFtZSxiPW1iKGIsYSl9SChhaCk7SShhaCxiKX1mdW5jdGlvbiBmaCgpe0goYWgpO0goYmgpO0goY2gpfWZ1bmN0aW9uIGdoKGEpe2RoKGNoLmN1cnJlbnQpO3ZhciBiPWRoKGFoLmN1cnJlbnQpO3ZhciBjPW1iKGIsYS50eXBlKTtiIT09YyYmKEkoYmgsYSksSShhaCxjKSl9ZnVuY3Rpb24gaGgoYSl7YmguY3VycmVudD09PWEmJihIKGFoKSxIKGJoKSl9dmFyIFA9QmYoMCk7XG5mdW5jdGlvbiBpaChhKXtmb3IodmFyIGI9YTtudWxsIT09Yjspe2lmKDEzPT09Yi50YWcpe3ZhciBjPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YyYmKGM9Yy5kZWh5ZHJhdGVkLG51bGw9PT1jfHxcIiQ/XCI9PT1jLmRhdGF8fFwiJCFcIj09PWMuZGF0YSkpcmV0dXJuIGJ9ZWxzZSBpZigxOT09PWIudGFnJiZ2b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpe2lmKDAhPT0oYi5mbGFncyY2NCkpcmV0dXJuIGJ9ZWxzZSBpZihudWxsIT09Yi5jaGlsZCl7Yi5jaGlsZC5yZXR1cm49YjtiPWIuY2hpbGQ7Y29udGludWV9aWYoYj09PWEpYnJlYWs7Zm9yKDtudWxsPT09Yi5zaWJsaW5nOyl7aWYobnVsbD09PWIucmV0dXJufHxiLnJldHVybj09PWEpcmV0dXJuIG51bGw7Yj1iLnJldHVybn1iLnNpYmxpbmcucmV0dXJuPWIucmV0dXJuO2I9Yi5zaWJsaW5nfXJldHVybiBudWxsfXZhciBqaD1udWxsLGtoPW51bGwsbGg9ITE7XG5mdW5jdGlvbiBtaChhLGIpe3ZhciBjPW5oKDUsbnVsbCxudWxsLDApO2MuZWxlbWVudFR5cGU9XCJERUxFVEVEXCI7Yy50eXBlPVwiREVMRVRFRFwiO2Muc3RhdGVOb2RlPWI7Yy5yZXR1cm49YTtjLmZsYWdzPTg7bnVsbCE9PWEubGFzdEVmZmVjdD8oYS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxhLmxhc3RFZmZlY3Q9Yyk6YS5maXJzdEVmZmVjdD1hLmxhc3RFZmZlY3Q9Y31mdW5jdGlvbiBvaChhLGIpe3N3aXRjaChhLnRhZyl7Y2FzZSA1OnZhciBjPWEudHlwZTtiPTEhPT1iLm5vZGVUeXBlfHxjLnRvTG93ZXJDYXNlKCkhPT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDpiO3JldHVybiBudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSA2OnJldHVybiBiPVwiXCI9PT1hLnBlbmRpbmdQcm9wc3x8MyE9PWIubm9kZVR5cGU/bnVsbDpiLG51bGwhPT1iPyhhLnN0YXRlTm9kZT1iLCEwKTohMTtjYXNlIDEzOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITF9fVxuZnVuY3Rpb24gcGgoYSl7aWYobGgpe3ZhciBiPWtoO2lmKGIpe3ZhciBjPWI7aWYoIW9oKGEsYikpe2I9cmYoYy5uZXh0U2libGluZyk7aWYoIWJ8fCFvaChhLGIpKXthLmZsYWdzPWEuZmxhZ3MmLTEwMjV8MjtsaD0hMTtqaD1hO3JldHVybn1taChqaCxjKX1qaD1hO2toPXJmKGIuZmlyc3RDaGlsZCl9ZWxzZSBhLmZsYWdzPWEuZmxhZ3MmLTEwMjV8MixsaD0hMSxqaD1hfX1mdW5jdGlvbiBxaChhKXtmb3IoYT1hLnJldHVybjtudWxsIT09YSYmNSE9PWEudGFnJiYzIT09YS50YWcmJjEzIT09YS50YWc7KWE9YS5yZXR1cm47amg9YX1cbmZ1bmN0aW9uIHJoKGEpe2lmKGEhPT1qaClyZXR1cm4hMTtpZighbGgpcmV0dXJuIHFoKGEpLGxoPSEwLCExO3ZhciBiPWEudHlwZTtpZig1IT09YS50YWd8fFwiaGVhZFwiIT09YiYmXCJib2R5XCIhPT1iJiYhbmYoYixhLm1lbW9pemVkUHJvcHMpKWZvcihiPWtoO2I7KW1oKGEsYiksYj1yZihiLm5leHRTaWJsaW5nKTtxaChhKTtpZigxMz09PWEudGFnKXthPWEubWVtb2l6ZWRTdGF0ZTthPW51bGwhPT1hP2EuZGVoeWRyYXRlZDpudWxsO2lmKCFhKXRocm93IEVycm9yKHkoMzE3KSk7YTp7YT1hLm5leHRTaWJsaW5nO2ZvcihiPTA7YTspe2lmKDg9PT1hLm5vZGVUeXBlKXt2YXIgYz1hLmRhdGE7aWYoXCIvJFwiPT09Yyl7aWYoMD09PWIpe2toPXJmKGEubmV4dFNpYmxpbmcpO2JyZWFrIGF9Yi0tfWVsc2VcIiRcIiE9PWMmJlwiJCFcIiE9PWMmJlwiJD9cIiE9PWN8fGIrK31hPWEubmV4dFNpYmxpbmd9a2g9bnVsbH19ZWxzZSBraD1qaD9yZihhLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1cbmZ1bmN0aW9uIHNoKCl7a2g9amg9bnVsbDtsaD0hMX12YXIgdGg9W107ZnVuY3Rpb24gdWgoKXtmb3IodmFyIGE9MDthPHRoLmxlbmd0aDthKyspdGhbYV0uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9bnVsbDt0aC5sZW5ndGg9MH12YXIgdmg9cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcix3aD1yYS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyx4aD0wLFI9bnVsbCxTPW51bGwsVD1udWxsLHloPSExLHpoPSExO2Z1bmN0aW9uIEFoKCl7dGhyb3cgRXJyb3IoeSgzMjEpKTt9ZnVuY3Rpb24gQmgoYSxiKXtpZihudWxsPT09YilyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoJiZjPGEubGVuZ3RoO2MrKylpZighSGUoYVtjXSxiW2NdKSlyZXR1cm4hMTtyZXR1cm4hMH1cbmZ1bmN0aW9uIENoKGEsYixjLGQsZSxmKXt4aD1mO1I9YjtiLm1lbW9pemVkU3RhdGU9bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7Yi5sYW5lcz0wO3ZoLmN1cnJlbnQ9bnVsbD09PWF8fG51bGw9PT1hLm1lbW9pemVkU3RhdGU/RGg6RWg7YT1jKGQsZSk7aWYoemgpe2Y9MDtkb3t6aD0hMTtpZighKDI1PmYpKXRocm93IEVycm9yKHkoMzAxKSk7Zis9MTtUPVM9bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7dmguY3VycmVudD1GaDthPWMoZCxlKX13aGlsZSh6aCl9dmguY3VycmVudD1HaDtiPW51bGwhPT1TJiZudWxsIT09Uy5uZXh0O3hoPTA7VD1TPVI9bnVsbDt5aD0hMTtpZihiKXRocm93IEVycm9yKHkoMzAwKSk7cmV0dXJuIGF9ZnVuY3Rpb24gSGgoKXt2YXIgYT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtudWxsPT09VD9SLm1lbW9pemVkU3RhdGU9VD1hOlQ9VC5uZXh0PWE7cmV0dXJuIFR9XG5mdW5jdGlvbiBJaCgpe2lmKG51bGw9PT1TKXt2YXIgYT1SLmFsdGVybmF0ZTthPW51bGwhPT1hP2EubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgYT1TLm5leHQ7dmFyIGI9bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlOlQubmV4dDtpZihudWxsIT09YilUPWIsUz1hO2Vsc2V7aWYobnVsbD09PWEpdGhyb3cgRXJyb3IoeSgzMTApKTtTPWE7YT17bWVtb2l6ZWRTdGF0ZTpTLm1lbW9pemVkU3RhdGUsYmFzZVN0YXRlOlMuYmFzZVN0YXRlLGJhc2VRdWV1ZTpTLmJhc2VRdWV1ZSxxdWV1ZTpTLnF1ZXVlLG5leHQ6bnVsbH07bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlPVQ9YTpUPVQubmV4dD1hfXJldHVybiBUfWZ1bmN0aW9uIEpoKGEsYil7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGI/YihhKTpifVxuZnVuY3Rpb24gS2goYSl7dmFyIGI9SWgoKSxjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IoeSgzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1TLGU9ZC5iYXNlUXVldWUsZj1jLnBlbmRpbmc7aWYobnVsbCE9PWYpe2lmKG51bGwhPT1lKXt2YXIgZz1lLm5leHQ7ZS5uZXh0PWYubmV4dDtmLm5leHQ9Z31kLmJhc2VRdWV1ZT1lPWY7Yy5wZW5kaW5nPW51bGx9aWYobnVsbCE9PWUpe2U9ZS5uZXh0O2Q9ZC5iYXNlU3RhdGU7dmFyIGg9Zz1mPW51bGwsaz1lO2Rve3ZhciBsPWsubGFuZTtpZigoeGgmbCk9PT1sKW51bGwhPT1oJiYoaD1oLm5leHQ9e2xhbmU6MCxhY3Rpb246ay5hY3Rpb24sZWFnZXJSZWR1Y2VyOmsuZWFnZXJSZWR1Y2VyLGVhZ2VyU3RhdGU6ay5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLGQ9ay5lYWdlclJlZHVjZXI9PT1hP2suZWFnZXJTdGF0ZTphKGQsay5hY3Rpb24pO2Vsc2V7dmFyIG49e2xhbmU6bCxhY3Rpb246ay5hY3Rpb24sZWFnZXJSZWR1Y2VyOmsuZWFnZXJSZWR1Y2VyLFxuZWFnZXJTdGF0ZTprLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtudWxsPT09aD8oZz1oPW4sZj1kKTpoPWgubmV4dD1uO1IubGFuZXN8PWw7RGd8PWx9az1rLm5leHR9d2hpbGUobnVsbCE9PWsmJmshPT1lKTtudWxsPT09aD9mPWQ6aC5uZXh0PWc7SGUoZCxiLm1lbW9pemVkU3RhdGUpfHwodWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1kO2IuYmFzZVN0YXRlPWY7Yi5iYXNlUXVldWU9aDtjLmxhc3RSZW5kZXJlZFN0YXRlPWR9cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxjLmRpc3BhdGNoXX1cbmZ1bmN0aW9uIExoKGEpe3ZhciBiPUloKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHkoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9Yy5kaXNwYXRjaCxlPWMucGVuZGluZyxmPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZSl7Yy5wZW5kaW5nPW51bGw7dmFyIGc9ZT1lLm5leHQ7ZG8gZj1hKGYsZy5hY3Rpb24pLGc9Zy5uZXh0O3doaWxlKGchPT1lKTtIZShmLGIubWVtb2l6ZWRTdGF0ZSl8fCh1Zz0hMCk7Yi5tZW1vaXplZFN0YXRlPWY7bnVsbD09PWIuYmFzZVF1ZXVlJiYoYi5iYXNlU3RhdGU9Zik7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1mfXJldHVybltmLGRdfVxuZnVuY3Rpb24gTWgoYSxiLGMpe3ZhciBkPWIuX2dldFZlcnNpb247ZD1kKGIuX3NvdXJjZSk7dmFyIGU9Yi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtpZihudWxsIT09ZSlhPWU9PT1kO2Vsc2UgaWYoYT1hLm11dGFibGVSZWFkTGFuZXMsYT0oeGgmYSk9PT1hKWIuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9ZCx0aC5wdXNoKGIpO2lmKGEpcmV0dXJuIGMoYi5fc291cmNlKTt0aC5wdXNoKGIpO3Rocm93IEVycm9yKHkoMzUwKSk7fVxuZnVuY3Rpb24gTmgoYSxiLGMsZCl7dmFyIGU9VTtpZihudWxsPT09ZSl0aHJvdyBFcnJvcih5KDM0OSkpO3ZhciBmPWIuX2dldFZlcnNpb24sZz1mKGIuX3NvdXJjZSksaD12aC5jdXJyZW50LGs9aC51c2VTdGF0ZShmdW5jdGlvbigpe3JldHVybiBNaChlLGIsYyl9KSxsPWtbMV0sbj1rWzBdO2s9VDt2YXIgQT1hLm1lbW9pemVkU3RhdGUscD1BLnJlZnMsQz1wLmdldFNuYXBzaG90LHg9QS5zb3VyY2U7QT1BLnN1YnNjcmliZTt2YXIgdz1SO2EubWVtb2l6ZWRTdGF0ZT17cmVmczpwLHNvdXJjZTpiLHN1YnNjcmliZTpkfTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3AuZ2V0U25hcHNob3Q9YztwLnNldFNuYXBzaG90PWw7dmFyIGE9ZihiLl9zb3VyY2UpO2lmKCFIZShnLGEpKXthPWMoYi5fc291cmNlKTtIZShuLGEpfHwobChhKSxhPUlnKHcpLGUubXV0YWJsZVJlYWRMYW5lc3w9YSZlLnBlbmRpbmdMYW5lcyk7YT1lLm11dGFibGVSZWFkTGFuZXM7ZS5lbnRhbmdsZWRMYW5lc3w9YTtmb3IodmFyIGQ9XG5lLmVudGFuZ2xlbWVudHMsaD1hOzA8aDspe3ZhciBrPTMxLVZjKGgpLHY9MTw8aztkW2tdfD1hO2gmPX52fX19LFtjLGIsZF0pO2gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIGQoYi5fc291cmNlLGZ1bmN0aW9uKCl7dmFyIGE9cC5nZXRTbmFwc2hvdCxjPXAuc2V0U25hcHNob3Q7dHJ5e2MoYShiLl9zb3VyY2UpKTt2YXIgZD1JZyh3KTtlLm11dGFibGVSZWFkTGFuZXN8PWQmZS5wZW5kaW5nTGFuZXN9Y2F0Y2gocSl7YyhmdW5jdGlvbigpe3Rocm93IHE7fSl9fSl9LFtiLGRdKTtIZShDLGMpJiZIZSh4LGIpJiZIZShBLGQpfHwoYT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpKaCxsYXN0UmVuZGVyZWRTdGF0ZTpufSxhLmRpc3BhdGNoPWw9T2guYmluZChudWxsLFIsYSksay5xdWV1ZT1hLGsuYmFzZVF1ZXVlPW51bGwsbj1NaChlLGIsYyksay5tZW1vaXplZFN0YXRlPWsuYmFzZVN0YXRlPW4pO3JldHVybiBufVxuZnVuY3Rpb24gUGgoYSxiLGMpe3ZhciBkPUloKCk7cmV0dXJuIE5oKGQsYSxiLGMpfWZ1bmN0aW9uIFFoKGEpe3ZhciBiPUhoKCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGEmJihhPWEoKSk7Yi5tZW1vaXplZFN0YXRlPWIuYmFzZVN0YXRlPWE7YT1iLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOkpoLGxhc3RSZW5kZXJlZFN0YXRlOmF9O2E9YS5kaXNwYXRjaD1PaC5iaW5kKG51bGwsUixhKTtyZXR1cm5bYi5tZW1vaXplZFN0YXRlLGFdfVxuZnVuY3Rpb24gUmgoYSxiLGMsZCl7YT17dGFnOmEsY3JlYXRlOmIsZGVzdHJveTpjLGRlcHM6ZCxuZXh0Om51bGx9O2I9Ui51cGRhdGVRdWV1ZTtudWxsPT09Yj8oYj17bGFzdEVmZmVjdDpudWxsfSxSLnVwZGF0ZVF1ZXVlPWIsYi5sYXN0RWZmZWN0PWEubmV4dD1hKTooYz1iLmxhc3RFZmZlY3QsbnVsbD09PWM/Yi5sYXN0RWZmZWN0PWEubmV4dD1hOihkPWMubmV4dCxjLm5leHQ9YSxhLm5leHQ9ZCxiLmxhc3RFZmZlY3Q9YSkpO3JldHVybiBhfWZ1bmN0aW9uIFNoKGEpe3ZhciBiPUhoKCk7YT17Y3VycmVudDphfTtyZXR1cm4gYi5tZW1vaXplZFN0YXRlPWF9ZnVuY3Rpb24gVGgoKXtyZXR1cm4gSWgoKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIFVoKGEsYixjLGQpe3ZhciBlPUhoKCk7Ui5mbGFnc3w9YTtlLm1lbW9pemVkU3RhdGU9UmgoMXxiLGMsdm9pZCAwLHZvaWQgMD09PWQ/bnVsbDpkKX1cbmZ1bmN0aW9uIFZoKGEsYixjLGQpe3ZhciBlPUloKCk7ZD12b2lkIDA9PT1kP251bGw6ZDt2YXIgZj12b2lkIDA7aWYobnVsbCE9PVMpe3ZhciBnPVMubWVtb2l6ZWRTdGF0ZTtmPWcuZGVzdHJveTtpZihudWxsIT09ZCYmQmgoZCxnLmRlcHMpKXtSaChiLGMsZixkKTtyZXR1cm59fVIuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPVJoKDF8YixjLGYsZCl9ZnVuY3Rpb24gV2goYSxiKXtyZXR1cm4gVWgoNTE2LDQsYSxiKX1mdW5jdGlvbiBYaChhLGIpe3JldHVybiBWaCg1MTYsNCxhLGIpfWZ1bmN0aW9uIFloKGEsYil7cmV0dXJuIFZoKDQsMixhLGIpfWZ1bmN0aW9uIFpoKGEsYil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpcmV0dXJuIGE9YSgpLGIoYSksZnVuY3Rpb24oKXtiKG51bGwpfTtpZihudWxsIT09YiYmdm9pZCAwIT09YilyZXR1cm4gYT1hKCksYi5jdXJyZW50PWEsZnVuY3Rpb24oKXtiLmN1cnJlbnQ9bnVsbH19XG5mdW5jdGlvbiAkaChhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIFZoKDQsMixaaC5iaW5kKG51bGwsYixhKSxjKX1mdW5jdGlvbiBhaSgpe31mdW5jdGlvbiBiaShhLGIpe3ZhciBjPUloKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZCaChiLGRbMV0pKXJldHVybiBkWzBdO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1mdW5jdGlvbiBjaShhLGIpe3ZhciBjPUloKCk7Yj12b2lkIDA9PT1iP251bGw6Yjt2YXIgZD1jLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWQmJm51bGwhPT1iJiZCaChiLGRbMV0pKXJldHVybiBkWzBdO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGRpKGEsYil7dmFyIGM9ZWcoKTtnZyg5OD5jPzk4OmMsZnVuY3Rpb24oKXthKCEwKX0pO2dnKDk3PGM/OTc6YyxmdW5jdGlvbigpe3ZhciBjPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXthKCExKSxiKCl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWN9fSl9XG5mdW5jdGlvbiBPaChhLGIsYyl7dmFyIGQ9SGcoKSxlPUlnKGEpLGY9e2xhbmU6ZSxhY3Rpb246YyxlYWdlclJlZHVjZXI6bnVsbCxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxnPWIucGVuZGluZztudWxsPT09Zz9mLm5leHQ9ZjooZi5uZXh0PWcubmV4dCxnLm5leHQ9Zik7Yi5wZW5kaW5nPWY7Zz1hLmFsdGVybmF0ZTtpZihhPT09Unx8bnVsbCE9PWcmJmc9PT1SKXpoPXloPSEwO2Vsc2V7aWYoMD09PWEubGFuZXMmJihudWxsPT09Z3x8MD09PWcubGFuZXMpJiYoZz1iLmxhc3RSZW5kZXJlZFJlZHVjZXIsbnVsbCE9PWcpKXRyeXt2YXIgaD1iLmxhc3RSZW5kZXJlZFN0YXRlLGs9ZyhoLGMpO2YuZWFnZXJSZWR1Y2VyPWc7Zi5lYWdlclN0YXRlPWs7aWYoSGUoayxoKSlyZXR1cm59Y2F0Y2gobCl7fWZpbmFsbHl7fUpnKGEsZSxkKX19XG52YXIgR2g9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOkFoLHVzZUNvbnRleHQ6QWgsdXNlRWZmZWN0OkFoLHVzZUltcGVyYXRpdmVIYW5kbGU6QWgsdXNlTGF5b3V0RWZmZWN0OkFoLHVzZU1lbW86QWgsdXNlUmVkdWNlcjpBaCx1c2VSZWY6QWgsdXNlU3RhdGU6QWgsdXNlRGVidWdWYWx1ZTpBaCx1c2VEZWZlcnJlZFZhbHVlOkFoLHVzZVRyYW5zaXRpb246QWgsdXNlTXV0YWJsZVNvdXJjZTpBaCx1c2VPcGFxdWVJZGVudGlmaWVyOkFoLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRGg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGEsYil7SGgoKS5tZW1vaXplZFN0YXRlPVthLHZvaWQgMD09PWI/bnVsbDpiXTtyZXR1cm4gYX0sdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6V2gsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihhLGIsYyl7Yz1udWxsIT09YyYmdm9pZCAwIT09Yz9jLmNvbmNhdChbYV0pOm51bGw7cmV0dXJuIFVoKDQsMixaaC5iaW5kKG51bGwsXG5iLGEpLGMpfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVWgoNCwyLGEsYil9LHVzZU1lbW86ZnVuY3Rpb24oYSxiKXt2YXIgYz1IaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1IaCgpO2I9dm9pZCAwIT09Yz9jKGIpOmI7ZC5tZW1vaXplZFN0YXRlPWQuYmFzZVN0YXRlPWI7YT1kLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmEsbGFzdFJlbmRlcmVkU3RhdGU6Yn07YT1hLmRpc3BhdGNoPU9oLmJpbmQobnVsbCxSLGEpO3JldHVybltkLm1lbW9pemVkU3RhdGUsYV19LHVzZVJlZjpTaCx1c2VTdGF0ZTpRaCx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9UWgoYSksYz1iWzBdLGQ9YlsxXTtXaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247XG53aC50cmFuc2l0aW9uPTE7dHJ5e2QoYSl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWJ9fSxbYV0pO3JldHVybiBjfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9UWgoITEpLGI9YVswXTthPWRpLmJpbmQobnVsbCxhWzFdKTtTaChhKTtyZXR1cm5bYSxiXX0sdXNlTXV0YWJsZVNvdXJjZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SGgoKTtkLm1lbW9pemVkU3RhdGU9e3JlZnM6e2dldFNuYXBzaG90OmIsc2V0U25hcHNob3Q6bnVsbH0sc291cmNlOmEsc3Vic2NyaWJlOmN9O3JldHVybiBOaChkLGEsYixjKX0sdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe2lmKGxoKXt2YXIgYT0hMSxiPXVmKGZ1bmN0aW9uKCl7YXx8KGE9ITAsYyhcInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KSkpO3Rocm93IEVycm9yKHkoMzU1KSk7fSksYz1RaChiKVsxXTswPT09KFIubW9kZSYyKSYmKFIuZmxhZ3N8PTUxNixSaCg1LGZ1bmN0aW9uKCl7YyhcInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KSl9LFxudm9pZCAwLG51bGwpKTtyZXR1cm4gYn1iPVwicjpcIisodGYrKykudG9TdHJpbmcoMzYpO1FoKGIpO3JldHVybiBifSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LEVoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpiaSx1c2VDb250ZXh0OnZnLHVzZUVmZmVjdDpYaCx1c2VJbXBlcmF0aXZlSGFuZGxlOiRoLHVzZUxheW91dEVmZmVjdDpZaCx1c2VNZW1vOmNpLHVzZVJlZHVjZXI6S2gsdXNlUmVmOlRoLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEtoKEpoKX0sdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPUtoKEpoKSxjPWJbMF0sZD1iWzFdO1hoKGZ1bmN0aW9uKCl7dmFyIGI9d2gudHJhbnNpdGlvbjt3aC50cmFuc2l0aW9uPTE7dHJ5e2QoYSl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWJ9fSxbYV0pO3JldHVybiBjfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9S2goSmgpWzBdO3JldHVybltUaCgpLmN1cnJlbnQsXG5hXX0sdXNlTXV0YWJsZVNvdXJjZTpQaCx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7cmV0dXJuIEtoKEpoKVswXX0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxGaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTokaCx1c2VMYXlvdXRFZmZlY3Q6WWgsdXNlTWVtbzpjaSx1c2VSZWR1Y2VyOkxoLHVzZVJlZjpUaCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBMaChKaCl9LHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1MaChKaCksYz1iWzBdLGQ9YlsxXTtYaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPUxoKEpoKVswXTtyZXR1cm5bVGgoKS5jdXJyZW50LFxuYV19LHVzZU11dGFibGVTb3VyY2U6UGgsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBMaChKaClbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sZWk9cmEuUmVhY3RDdXJyZW50T3duZXIsdWc9ITE7ZnVuY3Rpb24gZmkoYSxiLGMsZCl7Yi5jaGlsZD1udWxsPT09YT9aZyhiLG51bGwsYyxkKTpZZyhiLGEuY2hpbGQsYyxkKX1mdW5jdGlvbiBnaShhLGIsYyxkLGUpe2M9Yy5yZW5kZXI7dmFyIGY9Yi5yZWY7dGcoYixlKTtkPUNoKGEsYixjLGQsZixlKTtpZihudWxsIT09YSYmIXVnKXJldHVybiBiLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsYi5mbGFncyY9LTUxNyxhLmxhbmVzJj1+ZSxoaShhLGIsZSk7Yi5mbGFnc3w9MTtmaShhLGIsZCxlKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGlpKGEsYixjLGQsZSxmKXtpZihudWxsPT09YSl7dmFyIGc9Yy50eXBlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYhamkoZykmJnZvaWQgMD09PWcuZGVmYXVsdFByb3BzJiZudWxsPT09Yy5jb21wYXJlJiZ2b2lkIDA9PT1jLmRlZmF1bHRQcm9wcylyZXR1cm4gYi50YWc9MTUsYi50eXBlPWcsa2koYSxiLGcsZCxlLGYpO2E9VmcoYy50eXBlLG51bGwsZCxiLGIubW9kZSxmKTthLnJlZj1iLnJlZjthLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWF9Zz1hLmNoaWxkO2lmKDA9PT0oZSZmKSYmKGU9Zy5tZW1vaXplZFByb3BzLGM9Yy5jb21wYXJlLGM9bnVsbCE9PWM/YzpKZSxjKGUsZCkmJmEucmVmPT09Yi5yZWYpKXJldHVybiBoaShhLGIsZik7Yi5mbGFnc3w9MTthPVRnKGcsZCk7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfVxuZnVuY3Rpb24ga2koYSxiLGMsZCxlLGYpe2lmKG51bGwhPT1hJiZKZShhLm1lbW9pemVkUHJvcHMsZCkmJmEucmVmPT09Yi5yZWYpaWYodWc9ITEsMCE9PShmJmUpKTAhPT0oYS5mbGFncyYxNjM4NCkmJih1Zz0hMCk7ZWxzZSByZXR1cm4gYi5sYW5lcz1hLmxhbmVzLGhpKGEsYixmKTtyZXR1cm4gbGkoYSxiLGMsZCxmKX1cbmZ1bmN0aW9uIG1pKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQuY2hpbGRyZW4sZj1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbDtpZihcImhpZGRlblwiPT09ZC5tb2RlfHxcInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCI9PT1kLm1vZGUpaWYoMD09PShiLm1vZGUmNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sbmkoYixjKTtlbHNlIGlmKDAhPT0oYyYxMDczNzQxODI0KSliLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowfSxuaShiLG51bGwhPT1mP2YuYmFzZUxhbmVzOmMpO2Vsc2UgcmV0dXJuIGE9bnVsbCE9PWY/Zi5iYXNlTGFuZXN8YzpjLGIubGFuZXM9Yi5jaGlsZExhbmVzPTEwNzM3NDE4MjQsYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6YX0sbmkoYixhKSxudWxsO2Vsc2UgbnVsbCE9PWY/KGQ9Zi5iYXNlTGFuZXN8YyxiLm1lbW9pemVkU3RhdGU9bnVsbCk6ZD1jLG5pKGIsZCk7ZmkoYSxiLGUsYyk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBvaShhLGIpe3ZhciBjPWIucmVmO2lmKG51bGw9PT1hJiZudWxsIT09Y3x8bnVsbCE9PWEmJmEucmVmIT09YyliLmZsYWdzfD0xMjh9ZnVuY3Rpb24gbGkoYSxiLGMsZCxlKXt2YXIgZj1GZihjKT9EZjpNLmN1cnJlbnQ7Zj1FZihiLGYpO3RnKGIsZSk7Yz1DaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF1ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsaGkoYSxiLGUpO2IuZmxhZ3N8PTE7ZmkoYSxiLGMsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBwaShhLGIsYyxkLGUpe2lmKEZmKGMpKXt2YXIgZj0hMDtKZihiKX1lbHNlIGY9ITE7dGcoYixlKTtpZihudWxsPT09Yi5zdGF0ZU5vZGUpbnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9MiksTWcoYixjLGQpLE9nKGIsYyxkLGUpLGQ9ITA7ZWxzZSBpZihudWxsPT09YSl7dmFyIGc9Yi5zdGF0ZU5vZGUsaD1iLm1lbW9pemVkUHJvcHM7Zy5wcm9wcz1oO3ZhciBrPWcuY29udGV4dCxsPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBsJiZudWxsIT09bD9sPXZnKGwpOihsPUZmKGMpP0RmOk0uY3VycmVudCxsPUVmKGIsbCkpO3ZhciBuPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLEE9XCJmdW5jdGlvblwiPT09dHlwZW9mIG58fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO0F8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcblwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09ZHx8ayE9PWwpJiZOZyhiLGcsZCxsKTt3Zz0hMTt2YXIgcD1iLm1lbW9pemVkU3RhdGU7Zy5zdGF0ZT1wO0NnKGIsZCxnLGUpO2s9Yi5tZW1vaXplZFN0YXRlO2ghPT1kfHxwIT09a3x8Ti5jdXJyZW50fHx3Zz8oXCJmdW5jdGlvblwiPT09dHlwZW9mIG4mJihHZyhiLGMsbixkKSxrPWIubWVtb2l6ZWRTdGF0ZSksKGg9d2d8fExnKGIsYyxoLGQscCxrLGwpKT8oQXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbE1vdW50fHwoXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50V2lsbE1vdW50JiZnLmNvbXBvbmVudFdpbGxNb3VudCgpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSxcImZ1bmN0aW9uXCI9PT1cbnR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NCkpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpLGIubWVtb2l6ZWRQcm9wcz1kLGIubWVtb2l6ZWRTdGF0ZT1rKSxnLnByb3BzPWQsZy5zdGF0ZT1rLGcuY29udGV4dD1sLGQ9aCk6KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NCksZD0hMSl9ZWxzZXtnPWIuc3RhdGVOb2RlO3lnKGEsYik7aD1iLm1lbW9pemVkUHJvcHM7bD1iLnR5cGU9PT1iLmVsZW1lbnRUeXBlP2g6bGcoYi50eXBlLGgpO2cucHJvcHM9bDtBPWIucGVuZGluZ1Byb3BzO3A9Zy5jb250ZXh0O2s9Yy5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGsmJm51bGwhPT1rP2s9dmcoayk6KGs9RmYoYyk/RGY6TS5jdXJyZW50LGs9RWYoYixrKSk7dmFyIEM9Yy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7KG49XCJmdW5jdGlvblwiPT09dHlwZW9mIEN8fFxuXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGghPT1BfHxwIT09aykmJk5nKGIsZyxkLGspO3dnPSExO3A9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cDtDZyhiLGQsZyxlKTt2YXIgeD1iLm1lbW9pemVkU3RhdGU7aCE9PUF8fHAhPT14fHxOLmN1cnJlbnR8fHdnPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgQyYmKEdnKGIsYyxDLGQpLHg9Yi5tZW1vaXplZFN0YXRlKSwobD13Z3x8TGcoYixjLGwsZCxwLHgsaykpPyhufHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFVwZGF0ZXx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGUmJmcuY29tcG9uZW50V2lsbFVwZGF0ZShkLFxueCxrKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmZy5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShkLHgsaykpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZSYmKGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoYi5mbGFnc3w9MjU2KSk6KFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9MjU2KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9eCksZy5wcm9wcz1kLGcuc3RhdGU9eCxnLmNvbnRleHQ9ayxkPWwpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fFxuaD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9MjU2KSxkPSExKX1yZXR1cm4gcWkoYSxiLGMsZCxmLGUpfVxuZnVuY3Rpb24gcWkoYSxiLGMsZCxlLGYpe29pKGEsYik7dmFyIGc9MCE9PShiLmZsYWdzJjY0KTtpZighZCYmIWcpcmV0dXJuIGUmJktmKGIsYywhMSksaGkoYSxiLGYpO2Q9Yi5zdGF0ZU5vZGU7ZWkuY3VycmVudD1iO3ZhciBoPWcmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBjLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmQucmVuZGVyKCk7Yi5mbGFnc3w9MTtudWxsIT09YSYmZz8oYi5jaGlsZD1ZZyhiLGEuY2hpbGQsbnVsbCxmKSxiLmNoaWxkPVlnKGIsbnVsbCxoLGYpKTpmaShhLGIsaCxmKTtiLm1lbW9pemVkU3RhdGU9ZC5zdGF0ZTtlJiZLZihiLGMsITApO3JldHVybiBiLmNoaWxkfWZ1bmN0aW9uIHJpKGEpe3ZhciBiPWEuc3RhdGVOb2RlO2IucGVuZGluZ0NvbnRleHQ/SGYoYSxiLnBlbmRpbmdDb250ZXh0LGIucGVuZGluZ0NvbnRleHQhPT1iLmNvbnRleHQpOmIuY29udGV4dCYmSGYoYSxiLmNvbnRleHQsITEpO2VoKGEsYi5jb250YWluZXJJbmZvKX1cbnZhciBzaT17ZGVoeWRyYXRlZDpudWxsLHJldHJ5TGFuZTowfTtcbmZ1bmN0aW9uIHRpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPVAuY3VycmVudCxmPSExLGc7KGc9MCE9PShiLmZsYWdzJjY0KSl8fChnPW51bGwhPT1hJiZudWxsPT09YS5tZW1vaXplZFN0YXRlPyExOjAhPT0oZSYyKSk7Zz8oZj0hMCxiLmZsYWdzJj0tNjUpOm51bGwhPT1hJiZudWxsPT09YS5tZW1vaXplZFN0YXRlfHx2b2lkIDA9PT1kLmZhbGxiYWNrfHwhMD09PWQudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2t8fChlfD0xKTtJKFAsZSYxKTtpZihudWxsPT09YSl7dm9pZCAwIT09ZC5mYWxsYmFjayYmcGgoYik7YT1kLmNoaWxkcmVuO2U9ZC5mYWxsYmFjaztpZihmKXJldHVybiBhPXVpKGIsYSxlLGMpLGIuY2hpbGQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmN9LGIubWVtb2l6ZWRTdGF0ZT1zaSxhO2lmKFwibnVtYmVyXCI9PT10eXBlb2YgZC51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lKXJldHVybiBhPXVpKGIsYSxlLGMpLGIuY2hpbGQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmN9LFxuYi5tZW1vaXplZFN0YXRlPXNpLGIubGFuZXM9MzM1NTQ0MzIsYTtjPXZpKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmF9LGIubW9kZSxjLG51bGwpO2MucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9Y31pZihudWxsIT09YS5tZW1vaXplZFN0YXRlKXtpZihmKXJldHVybiBkPXdpKGEsYixkLmNoaWxkcmVuLGQuZmFsbGJhY2ssYyksZj1iLmNoaWxkLGU9YS5jaGlsZC5tZW1vaXplZFN0YXRlLGYubWVtb2l6ZWRTdGF0ZT1udWxsPT09ZT97YmFzZUxhbmVzOmN9OntiYXNlTGFuZXM6ZS5iYXNlTGFuZXN8Y30sZi5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcyZ+YyxiLm1lbW9pemVkU3RhdGU9c2ksZDtjPXhpKGEsYixkLmNoaWxkcmVuLGMpO2IubWVtb2l6ZWRTdGF0ZT1udWxsO3JldHVybiBjfWlmKGYpcmV0dXJuIGQ9d2koYSxiLGQuY2hpbGRyZW4sZC5mYWxsYmFjayxjKSxmPWIuY2hpbGQsZT1hLmNoaWxkLm1lbW9pemVkU3RhdGUsZi5tZW1vaXplZFN0YXRlPW51bGw9PT1lP3tiYXNlTGFuZXM6Y306XG57YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXNpLGQ7Yz14aShhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31mdW5jdGlvbiB1aShhLGIsYyxkKXt2YXIgZT1hLm1vZGUsZj1hLmNoaWxkO2I9e21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpifTswPT09KGUmMikmJm51bGwhPT1mPyhmLmNoaWxkTGFuZXM9MCxmLnBlbmRpbmdQcm9wcz1iKTpmPXZpKGIsZSwwLG51bGwpO2M9WGcoYyxlLGQsbnVsbCk7Zi5yZXR1cm49YTtjLnJldHVybj1hO2Yuc2libGluZz1jO2EuY2hpbGQ9ZjtyZXR1cm4gY31cbmZ1bmN0aW9uIHhpKGEsYixjLGQpe3ZhciBlPWEuY2hpbGQ7YT1lLnNpYmxpbmc7Yz1UZyhlLHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmN9KTswPT09KGIubW9kZSYyKSYmKGMubGFuZXM9ZCk7Yy5yZXR1cm49YjtjLnNpYmxpbmc9bnVsbDtudWxsIT09YSYmKGEubmV4dEVmZmVjdD1udWxsLGEuZmxhZ3M9OCxiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1hKTtyZXR1cm4gYi5jaGlsZD1jfVxuZnVuY3Rpb24gd2koYSxiLGMsZCxlKXt2YXIgZj1iLm1vZGUsZz1hLmNoaWxkO2E9Zy5zaWJsaW5nO3ZhciBoPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Y307MD09PShmJjIpJiZiLmNoaWxkIT09Zz8oYz1iLmNoaWxkLGMuY2hpbGRMYW5lcz0wLGMucGVuZGluZ1Byb3BzPWgsZz1jLmxhc3RFZmZlY3QsbnVsbCE9PWc/KGIuZmlyc3RFZmZlY3Q9Yy5maXJzdEVmZmVjdCxiLmxhc3RFZmZlY3Q9ZyxnLm5leHRFZmZlY3Q9bnVsbCk6Yi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9bnVsbCk6Yz1UZyhnLGgpO251bGwhPT1hP2Q9VGcoYSxkKTooZD1YZyhkLGYsZSxudWxsKSxkLmZsYWdzfD0yKTtkLnJldHVybj1iO2MucmV0dXJuPWI7Yy5zaWJsaW5nPWQ7Yi5jaGlsZD1jO3JldHVybiBkfWZ1bmN0aW9uIHlpKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO3NnKGEucmV0dXJuLGIpfVxuZnVuY3Rpb24gemkoYSxiLGMsZCxlLGYpe3ZhciBnPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09Zz9hLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOmIscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpkLHRhaWw6Yyx0YWlsTW9kZTplLGxhc3RFZmZlY3Q6Zn06KGcuaXNCYWNrd2FyZHM9YixnLnJlbmRlcmluZz1udWxsLGcucmVuZGVyaW5nU3RhcnRUaW1lPTAsZy5sYXN0PWQsZy50YWlsPWMsZy50YWlsTW9kZT1lLGcubGFzdEVmZmVjdD1mKX1cbmZ1bmN0aW9uIEFpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcyxlPWQucmV2ZWFsT3JkZXIsZj1kLnRhaWw7ZmkoYSxiLGQuY2hpbGRyZW4sYyk7ZD1QLmN1cnJlbnQ7aWYoMCE9PShkJjIpKWQ9ZCYxfDIsYi5mbGFnc3w9NjQ7ZWxzZXtpZihudWxsIT09YSYmMCE9PShhLmZsYWdzJjY0KSlhOmZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtpZigxMz09PWEudGFnKW51bGwhPT1hLm1lbW9pemVkU3RhdGUmJnlpKGEsYyk7ZWxzZSBpZigxOT09PWEudGFnKXlpKGEsYyk7ZWxzZSBpZihudWxsIT09YS5jaGlsZCl7YS5jaGlsZC5yZXR1cm49YTthPWEuY2hpbGQ7Y29udGludWV9aWYoYT09PWIpYnJlYWsgYTtmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fGEucmV0dXJuPT09YilicmVhayBhO2E9YS5yZXR1cm59YS5zaWJsaW5nLnJldHVybj1hLnJldHVybjthPWEuc2libGluZ31kJj0xfUkoUCxkKTtpZigwPT09KGIubW9kZSYyKSliLm1lbW9pemVkU3RhdGU9XG5udWxsO2Vsc2Ugc3dpdGNoKGUpe2Nhc2UgXCJmb3J3YXJkc1wiOmM9Yi5jaGlsZDtmb3IoZT1udWxsO251bGwhPT1jOylhPWMuYWx0ZXJuYXRlLG51bGwhPT1hJiZudWxsPT09aWgoYSkmJihlPWMpLGM9Yy5zaWJsaW5nO2M9ZTtudWxsPT09Yz8oZT1iLmNoaWxkLGIuY2hpbGQ9bnVsbCk6KGU9Yy5zaWJsaW5nLGMuc2libGluZz1udWxsKTt6aShiLCExLGUsYyxmLGIubGFzdEVmZmVjdCk7YnJlYWs7Y2FzZSBcImJhY2t3YXJkc1wiOmM9bnVsbDtlPWIuY2hpbGQ7Zm9yKGIuY2hpbGQ9bnVsbDtudWxsIT09ZTspe2E9ZS5hbHRlcm5hdGU7aWYobnVsbCE9PWEmJm51bGw9PT1paChhKSl7Yi5jaGlsZD1lO2JyZWFrfWE9ZS5zaWJsaW5nO2Uuc2libGluZz1jO2M9ZTtlPWF9emkoYiwhMCxjLG51bGwsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJ0b2dldGhlclwiOnppKGIsITEsbnVsbCxudWxsLHZvaWQgMCxiLmxhc3RFZmZlY3QpO2JyZWFrO2RlZmF1bHQ6Yi5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBoaShhLGIsYyl7bnVsbCE9PWEmJihiLmRlcGVuZGVuY2llcz1hLmRlcGVuZGVuY2llcyk7RGd8PWIubGFuZXM7aWYoMCE9PShjJmIuY2hpbGRMYW5lcykpe2lmKG51bGwhPT1hJiZiLmNoaWxkIT09YS5jaGlsZCl0aHJvdyBFcnJvcih5KDE1MykpO2lmKG51bGwhPT1iLmNoaWxkKXthPWIuY2hpbGQ7Yz1UZyhhLGEucGVuZGluZ1Byb3BzKTtiLmNoaWxkPWM7Zm9yKGMucmV0dXJuPWI7bnVsbCE9PWEuc2libGluZzspYT1hLnNpYmxpbmcsYz1jLnNpYmxpbmc9VGcoYSxhLnBlbmRpbmdQcm9wcyksYy5yZXR1cm49YjtjLnNpYmxpbmc9bnVsbH1yZXR1cm4gYi5jaGlsZH1yZXR1cm4gbnVsbH12YXIgQmksQ2ksRGksRWk7XG5CaT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1iLmNoaWxkO251bGwhPT1jOyl7aWYoNT09PWMudGFnfHw2PT09Yy50YWcpYS5hcHBlbmRDaGlsZChjLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09Yy50YWcmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX07Q2k9ZnVuY3Rpb24oKXt9O1xuRGk9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5tZW1vaXplZFByb3BzO2lmKGUhPT1kKXthPWIuc3RhdGVOb2RlO2RoKGFoLmN1cnJlbnQpO3ZhciBmPW51bGw7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOmU9WWEoYSxlKTtkPVlhKGEsZCk7Zj1bXTticmVhaztjYXNlIFwib3B0aW9uXCI6ZT1lYihhLGUpO2Q9ZWIoYSxkKTtmPVtdO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjplPW0oe30sZSx7dmFsdWU6dm9pZCAwfSk7ZD1tKHt9LGQse3ZhbHVlOnZvaWQgMH0pO2Y9W107YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6ZT1nYihhLGUpO2Q9Z2IoYSxkKTtmPVtdO2JyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiIT09dHlwZW9mIGUub25DbGljayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGQub25DbGljayYmKGEub25jbGljaz1qZil9dmIoYyxkKTt2YXIgZztjPW51bGw7Zm9yKGwgaW4gZSlpZighZC5oYXNPd25Qcm9wZXJ0eShsKSYmZS5oYXNPd25Qcm9wZXJ0eShsKSYmbnVsbCE9ZVtsXSlpZihcInN0eWxlXCI9PT1cbmwpe3ZhciBoPWVbbF07Zm9yKGcgaW4gaCloLmhhc093blByb3BlcnR5KGcpJiYoY3x8KGM9e30pLGNbZ109XCJcIil9ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIiE9PWwmJlwiY2hpbGRyZW5cIiE9PWwmJlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmXCJhdXRvRm9jdXNcIiE9PWwmJihjYS5oYXNPd25Qcm9wZXJ0eShsKT9mfHwoZj1bXSk6KGY9Znx8W10pLnB1c2gobCxudWxsKSk7Zm9yKGwgaW4gZCl7dmFyIGs9ZFtsXTtoPW51bGwhPWU/ZVtsXTp2b2lkIDA7aWYoZC5oYXNPd25Qcm9wZXJ0eShsKSYmayE9PWgmJihudWxsIT1rfHxudWxsIT1oKSlpZihcInN0eWxlXCI9PT1sKWlmKGgpe2ZvcihnIGluIGgpIWguaGFzT3duUHJvcGVydHkoZyl8fGsmJmsuaGFzT3duUHJvcGVydHkoZyl8fChjfHwoYz17fSksY1tnXT1cIlwiKTtmb3IoZyBpbiBrKWsuaGFzT3duUHJvcGVydHkoZykmJmhbZ10hPT1rW2ddJiYoY3x8XG4oYz17fSksY1tnXT1rW2ddKX1lbHNlIGN8fChmfHwoZj1bXSksZi5wdXNoKGwsYykpLGM9aztlbHNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09bD8oaz1rP2suX19odG1sOnZvaWQgMCxoPWg/aC5fX2h0bWw6dm9pZCAwLG51bGwhPWsmJmghPT1rJiYoZj1mfHxbXSkucHVzaChsLGspKTpcImNoaWxkcmVuXCI9PT1sP1wic3RyaW5nXCIhPT10eXBlb2YgayYmXCJudW1iZXJcIiE9PXR5cGVvZiBrfHwoZj1mfHxbXSkucHVzaChsLFwiXCIrayk6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWwmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1sJiYoY2EuaGFzT3duUHJvcGVydHkobCk/KG51bGwhPWsmJlwib25TY3JvbGxcIj09PWwmJkcoXCJzY3JvbGxcIixhKSxmfHxoPT09a3x8KGY9W10pKTpcIm9iamVjdFwiPT09dHlwZW9mIGsmJm51bGwhPT1rJiZrLiQkdHlwZW9mPT09R2E/ay50b1N0cmluZygpOihmPWZ8fFtdKS5wdXNoKGwsaykpfWMmJihmPWZ8fFtdKS5wdXNoKFwic3R5bGVcIixcbmMpO3ZhciBsPWY7aWYoYi51cGRhdGVRdWV1ZT1sKWIuZmxhZ3N8PTR9fTtFaT1mdW5jdGlvbihhLGIsYyxkKXtjIT09ZCYmKGIuZmxhZ3N8PTQpfTtmdW5jdGlvbiBGaShhLGIpe2lmKCFsaClzd2l0Y2goYS50YWlsTW9kZSl7Y2FzZSBcImhpZGRlblwiOmI9YS50YWlsO2Zvcih2YXIgYz1udWxsO251bGwhPT1iOyludWxsIT09Yi5hbHRlcm5hdGUmJihjPWIpLGI9Yi5zaWJsaW5nO251bGw9PT1jP2EudGFpbD1udWxsOmMuc2libGluZz1udWxsO2JyZWFrO2Nhc2UgXCJjb2xsYXBzZWRcIjpjPWEudGFpbDtmb3IodmFyIGQ9bnVsbDtudWxsIT09YzspbnVsbCE9PWMuYWx0ZXJuYXRlJiYoZD1jKSxjPWMuc2libGluZztudWxsPT09ZD9ifHxudWxsPT09YS50YWlsP2EudGFpbD1udWxsOmEudGFpbC5zaWJsaW5nPW51bGw6ZC5zaWJsaW5nPW51bGx9fVxuZnVuY3Rpb24gR2koYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIG51bGw7Y2FzZSAxOnJldHVybiBGZihiLnR5cGUpJiZHZigpLG51bGw7Y2FzZSAzOmZoKCk7SChOKTtIKE0pO3VoKCk7ZD1iLnN0YXRlTm9kZTtkLnBlbmRpbmdDb250ZXh0JiYoZC5jb250ZXh0PWQucGVuZGluZ0NvbnRleHQsZC5wZW5kaW5nQ29udGV4dD1udWxsKTtpZihudWxsPT09YXx8bnVsbD09PWEuY2hpbGQpcmgoYik/Yi5mbGFnc3w9NDpkLmh5ZHJhdGV8fChiLmZsYWdzfD0yNTYpO0NpKGIpO3JldHVybiBudWxsO2Nhc2UgNTpoaChiKTt2YXIgZT1kaChjaC5jdXJyZW50KTtjPWIudHlwZTtpZihudWxsIT09YSYmbnVsbCE9Yi5zdGF0ZU5vZGUpRGkoYSxiLGMsZCxlKSxhLnJlZiE9PWIucmVmJiYoYi5mbGFnc3w9MTI4KTtlbHNle2lmKCFkKXtpZihudWxsPT09XG5iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih5KDE2NikpO3JldHVybiBudWxsfWE9ZGgoYWguY3VycmVudCk7aWYocmgoYikpe2Q9Yi5zdGF0ZU5vZGU7Yz1iLnR5cGU7dmFyIGY9Yi5tZW1vaXplZFByb3BzO2Rbd2ZdPWI7ZFt4Zl09Zjtzd2l0Y2goYyl7Y2FzZSBcImRpYWxvZ1wiOkcoXCJjYW5jZWxcIixkKTtHKFwiY2xvc2VcIixkKTticmVhaztjYXNlIFwiaWZyYW1lXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJlbWJlZFwiOkcoXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcInZpZGVvXCI6Y2FzZSBcImF1ZGlvXCI6Zm9yKGE9MDthPFhlLmxlbmd0aDthKyspRyhYZVthXSxkKTticmVhaztjYXNlIFwic291cmNlXCI6RyhcImVycm9yXCIsZCk7YnJlYWs7Y2FzZSBcImltZ1wiOmNhc2UgXCJpbWFnZVwiOmNhc2UgXCJsaW5rXCI6RyhcImVycm9yXCIsZCk7RyhcImxvYWRcIixkKTticmVhaztjYXNlIFwiZGV0YWlsc1wiOkcoXCJ0b2dnbGVcIixkKTticmVhaztjYXNlIFwiaW5wdXRcIjpaYShkLGYpO0coXCJpbnZhbGlkXCIsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmQuX3dyYXBwZXJTdGF0ZT1cbnt3YXNNdWx0aXBsZTohIWYubXVsdGlwbGV9O0coXCJpbnZhbGlkXCIsZCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aGIoZCxmKSxHKFwiaW52YWxpZFwiLGQpfXZiKGMsZik7YT1udWxsO2Zvcih2YXIgZyBpbiBmKWYuaGFzT3duUHJvcGVydHkoZykmJihlPWZbZ10sXCJjaGlsZHJlblwiPT09Zz9cInN0cmluZ1wiPT09dHlwZW9mIGU/ZC50ZXh0Q29udGVudCE9PWUmJihhPVtcImNoaWxkcmVuXCIsZV0pOlwibnVtYmVyXCI9PT10eXBlb2YgZSYmZC50ZXh0Q29udGVudCE9PVwiXCIrZSYmKGE9W1wiY2hpbGRyZW5cIixcIlwiK2VdKTpjYS5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9ZSYmXCJvblNjcm9sbFwiPT09ZyYmRyhcInNjcm9sbFwiLGQpKTtzd2l0Y2goYyl7Y2FzZSBcImlucHV0XCI6VmEoZCk7Y2IoZCxmLCEwKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpWYShkKTtqYihkKTticmVhaztjYXNlIFwic2VsZWN0XCI6Y2FzZSBcIm9wdGlvblwiOmJyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiPT09dHlwZW9mIGYub25DbGljayYmKGQub25jbGljaz1cbmpmKX1kPWE7Yi51cGRhdGVRdWV1ZT1kO251bGwhPT1kJiYoYi5mbGFnc3w9NCl9ZWxzZXtnPTk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50O2E9PT1rYi5odG1sJiYoYT1sYihjKSk7YT09PWtiLmh0bWw/XCJzY3JpcHRcIj09PWM/KGE9Zy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGEuaW5uZXJIVE1MPVwiPHNjcmlwdD5cXHgzYy9zY3JpcHQ+XCIsYT1hLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCkpOlwic3RyaW5nXCI9PT10eXBlb2YgZC5pcz9hPWcuY3JlYXRlRWxlbWVudChjLHtpczpkLmlzfSk6KGE9Zy5jcmVhdGVFbGVtZW50KGMpLFwic2VsZWN0XCI9PT1jJiYoZz1hLGQubXVsdGlwbGU/Zy5tdWx0aXBsZT0hMDpkLnNpemUmJihnLnNpemU9ZC5zaXplKSkpOmE9Zy5jcmVhdGVFbGVtZW50TlMoYSxjKTthW3dmXT1iO2FbeGZdPWQ7QmkoYSxiLCExLCExKTtiLnN0YXRlTm9kZT1hO2c9d2IoYyxkKTtzd2l0Y2goYyl7Y2FzZSBcImRpYWxvZ1wiOkcoXCJjYW5jZWxcIixhKTtHKFwiY2xvc2VcIixhKTtcbmU9ZDticmVhaztjYXNlIFwiaWZyYW1lXCI6Y2FzZSBcIm9iamVjdFwiOmNhc2UgXCJlbWJlZFwiOkcoXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihlPTA7ZTxYZS5sZW5ndGg7ZSsrKUcoWGVbZV0sYSk7ZT1kO2JyZWFrO2Nhc2UgXCJzb3VyY2VcIjpHKFwiZXJyb3JcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImltZ1wiOmNhc2UgXCJpbWFnZVwiOmNhc2UgXCJsaW5rXCI6RyhcImVycm9yXCIsYSk7RyhcImxvYWRcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpHKFwidG9nZ2xlXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbnB1dFwiOlphKGEsZCk7ZT1ZYShhLGQpO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZWIoYSxkKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWQubXVsdGlwbGV9O2U9bSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGEsZCk7ZT1cbmdiKGEsZCk7RyhcImludmFsaWRcIixhKTticmVhaztkZWZhdWx0OmU9ZH12YihjLGUpO3ZhciBoPWU7Zm9yKGYgaW4gaClpZihoLmhhc093blByb3BlcnR5KGYpKXt2YXIgaz1oW2ZdO1wic3R5bGVcIj09PWY/dGIoYSxrKTpcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1mPyhrPWs/ay5fX2h0bWw6dm9pZCAwLG51bGwhPWsmJm9iKGEsaykpOlwiY2hpbGRyZW5cIj09PWY/XCJzdHJpbmdcIj09PXR5cGVvZiBrPyhcInRleHRhcmVhXCIhPT1jfHxcIlwiIT09aykmJnBiKGEsayk6XCJudW1iZXJcIj09PXR5cGVvZiBrJiZwYihhLFwiXCIrayk6XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWYmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1mJiZcImF1dG9Gb2N1c1wiIT09ZiYmKGNhLmhhc093blByb3BlcnR5KGYpP251bGwhPWsmJlwib25TY3JvbGxcIj09PWYmJkcoXCJzY3JvbGxcIixhKTpudWxsIT1rJiZxYShhLGYsayxnKSl9c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGEpO2NiKGEsZCwhMSk7XG5icmVhaztjYXNlIFwidGV4dGFyZWFcIjpWYShhKTtqYihhKTticmVhaztjYXNlIFwib3B0aW9uXCI6bnVsbCE9ZC52YWx1ZSYmYS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIrU2EoZC52YWx1ZSkpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjphLm11bHRpcGxlPSEhZC5tdWx0aXBsZTtmPWQudmFsdWU7bnVsbCE9Zj9mYihhLCEhZC5tdWx0aXBsZSxmLCExKTpudWxsIT1kLmRlZmF1bHRWYWx1ZSYmZmIoYSwhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6XCJmdW5jdGlvblwiPT09dHlwZW9mIGUub25DbGljayYmKGEub25jbGljaz1qZil9bWYoYyxkKSYmKGIuZmxhZ3N8PTQpfW51bGwhPT1iLnJlZiYmKGIuZmxhZ3N8PTEyOCl9cmV0dXJuIG51bGw7Y2FzZSA2OmlmKGEmJm51bGwhPWIuc3RhdGVOb2RlKUVpKGEsYixhLm1lbW9pemVkUHJvcHMsZCk7ZWxzZXtpZihcInN0cmluZ1wiIT09dHlwZW9mIGQmJm51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih5KDE2NikpO1xuYz1kaChjaC5jdXJyZW50KTtkaChhaC5jdXJyZW50KTtyaChiKT8oZD1iLnN0YXRlTm9kZSxjPWIubWVtb2l6ZWRQcm9wcyxkW3dmXT1iLGQubm9kZVZhbHVlIT09YyYmKGIuZmxhZ3N8PTQpKTooZD0oOT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKGQpLGRbd2ZdPWIsYi5zdGF0ZU5vZGU9ZCl9cmV0dXJuIG51bGw7Y2FzZSAxMzpIKFApO2Q9Yi5tZW1vaXplZFN0YXRlO2lmKDAhPT0oYi5mbGFncyY2NCkpcmV0dXJuIGIubGFuZXM9YyxiO2Q9bnVsbCE9PWQ7Yz0hMTtudWxsPT09YT92b2lkIDAhPT1iLm1lbW9pemVkUHJvcHMuZmFsbGJhY2smJnJoKGIpOmM9bnVsbCE9PWEubWVtb2l6ZWRTdGF0ZTtpZihkJiYhYyYmMCE9PShiLm1vZGUmMikpaWYobnVsbD09PWEmJiEwIT09Yi5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrfHwwIT09KFAuY3VycmVudCYxKSkwPT09ViYmKFY9Myk7ZWxzZXtpZigwPT09Vnx8Mz09PVYpVj1cbjQ7bnVsbD09PVV8fDA9PT0oRGcmMTM0MjE3NzI3KSYmMD09PShIaSYxMzQyMTc3MjcpfHxJaShVLFcpfWlmKGR8fGMpYi5mbGFnc3w9NDtyZXR1cm4gbnVsbDtjYXNlIDQ6cmV0dXJuIGZoKCksQ2koYiksbnVsbD09PWEmJmNmKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLG51bGw7Y2FzZSAxMDpyZXR1cm4gcmcoYiksbnVsbDtjYXNlIDE3OnJldHVybiBGZihiLnR5cGUpJiZHZigpLG51bGw7Y2FzZSAxOTpIKFApO2Q9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2Y9MCE9PShiLmZsYWdzJjY0KTtnPWQucmVuZGVyaW5nO2lmKG51bGw9PT1nKWlmKGYpRmkoZCwhMSk7ZWxzZXtpZigwIT09Vnx8bnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpZm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2c9aWgoYSk7aWYobnVsbCE9PWcpe2IuZmxhZ3N8PTY0O0ZpKGQsITEpO2Y9Zy51cGRhdGVRdWV1ZTtudWxsIT09ZiYmKGIudXBkYXRlUXVldWU9ZixiLmZsYWdzfD00KTtcbm51bGw9PT1kLmxhc3RFZmZlY3QmJihiLmZpcnN0RWZmZWN0PW51bGwpO2IubGFzdEVmZmVjdD1kLmxhc3RFZmZlY3Q7ZD1jO2ZvcihjPWIuY2hpbGQ7bnVsbCE9PWM7KWY9YyxhPWQsZi5mbGFncyY9MixmLm5leHRFZmZlY3Q9bnVsbCxmLmZpcnN0RWZmZWN0PW51bGwsZi5sYXN0RWZmZWN0PW51bGwsZz1mLmFsdGVybmF0ZSxudWxsPT09Zz8oZi5jaGlsZExhbmVzPTAsZi5sYW5lcz1hLGYuY2hpbGQ9bnVsbCxmLm1lbW9pemVkUHJvcHM9bnVsbCxmLm1lbW9pemVkU3RhdGU9bnVsbCxmLnVwZGF0ZVF1ZXVlPW51bGwsZi5kZXBlbmRlbmNpZXM9bnVsbCxmLnN0YXRlTm9kZT1udWxsKTooZi5jaGlsZExhbmVzPWcuY2hpbGRMYW5lcyxmLmxhbmVzPWcubGFuZXMsZi5jaGlsZD1nLmNoaWxkLGYubWVtb2l6ZWRQcm9wcz1nLm1lbW9pemVkUHJvcHMsZi5tZW1vaXplZFN0YXRlPWcubWVtb2l6ZWRTdGF0ZSxmLnVwZGF0ZVF1ZXVlPWcudXBkYXRlUXVldWUsZi50eXBlPWcudHlwZSxhPWcuZGVwZW5kZW5jaWVzLFxuZi5kZXBlbmRlbmNpZXM9bnVsbD09PWE/bnVsbDp7bGFuZXM6YS5sYW5lcyxmaXJzdENvbnRleHQ6YS5maXJzdENvbnRleHR9KSxjPWMuc2libGluZztJKFAsUC5jdXJyZW50JjF8Mik7cmV0dXJuIGIuY2hpbGR9YT1hLnNpYmxpbmd9bnVsbCE9PWQudGFpbCYmTygpPkppJiYoYi5mbGFnc3w9NjQsZj0hMCxGaShkLCExKSxiLmxhbmVzPTMzNTU0NDMyKX1lbHNle2lmKCFmKWlmKGE9aWgoZyksbnVsbCE9PWEpe2lmKGIuZmxhZ3N8PTY0LGY9ITAsYz1hLnVwZGF0ZVF1ZXVlLG51bGwhPT1jJiYoYi51cGRhdGVRdWV1ZT1jLGIuZmxhZ3N8PTQpLEZpKGQsITApLG51bGw9PT1kLnRhaWwmJlwiaGlkZGVuXCI9PT1kLnRhaWxNb2RlJiYhZy5hbHRlcm5hdGUmJiFsaClyZXR1cm4gYj1iLmxhc3RFZmZlY3Q9ZC5sYXN0RWZmZWN0LG51bGwhPT1iJiYoYi5uZXh0RWZmZWN0PW51bGwpLG51bGx9ZWxzZSAyKk8oKS1kLnJlbmRlcmluZ1N0YXJ0VGltZT5KaSYmMTA3Mzc0MTgyNCE9PWMmJihiLmZsYWdzfD1cbjY0LGY9ITAsRmkoZCwhMSksYi5sYW5lcz0zMzU1NDQzMik7ZC5pc0JhY2t3YXJkcz8oZy5zaWJsaW5nPWIuY2hpbGQsYi5jaGlsZD1nKTooYz1kLmxhc3QsbnVsbCE9PWM/Yy5zaWJsaW5nPWc6Yi5jaGlsZD1nLGQubGFzdD1nKX1yZXR1cm4gbnVsbCE9PWQudGFpbD8oYz1kLnRhaWwsZC5yZW5kZXJpbmc9YyxkLnRhaWw9Yy5zaWJsaW5nLGQubGFzdEVmZmVjdD1iLmxhc3RFZmZlY3QsZC5yZW5kZXJpbmdTdGFydFRpbWU9TygpLGMuc2libGluZz1udWxsLGI9UC5jdXJyZW50LEkoUCxmP2ImMXwyOmImMSksYyk6bnVsbDtjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIEtpKCksbnVsbCE9PWEmJm51bGwhPT1hLm1lbW9pemVkU3RhdGUhPT0obnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSkmJlwidW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmdcIiE9PWQubW9kZSYmKGIuZmxhZ3N8PTQpLG51bGx9dGhyb3cgRXJyb3IoeSgxNTYsYi50YWcpKTt9XG5mdW5jdGlvbiBMaShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgMTpGZihhLnR5cGUpJiZHZigpO3ZhciBiPWEuZmxhZ3M7cmV0dXJuIGImNDA5Nj8oYS5mbGFncz1iJi00MDk3fDY0LGEpOm51bGw7Y2FzZSAzOmZoKCk7SChOKTtIKE0pO3VoKCk7Yj1hLmZsYWdzO2lmKDAhPT0oYiY2NCkpdGhyb3cgRXJyb3IoeSgyODUpKTthLmZsYWdzPWImLTQwOTd8NjQ7cmV0dXJuIGE7Y2FzZSA1OnJldHVybiBoaChhKSxudWxsO2Nhc2UgMTM6cmV0dXJuIEgoUCksYj1hLmZsYWdzLGImNDA5Nj8oYS5mbGFncz1iJi00MDk3fDY0LGEpOm51bGw7Y2FzZSAxOTpyZXR1cm4gSChQKSxudWxsO2Nhc2UgNDpyZXR1cm4gZmgoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHJnKGEpLG51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBLaSgpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBNaShhLGIpe3RyeXt2YXIgYz1cIlwiLGQ9YjtkbyBjKz1RYShkKSxkPWQucmV0dXJuO3doaWxlKGQpO3ZhciBlPWN9Y2F0Y2goZil7ZT1cIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiK2YubWVzc2FnZStcIlxcblwiK2Yuc3RhY2t9cmV0dXJue3ZhbHVlOmEsc291cmNlOmIsc3RhY2s6ZX19ZnVuY3Rpb24gTmkoYSxiKXt0cnl7Y29uc29sZS5lcnJvcihiLnZhbHVlKX1jYXRjaChjKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYzt9KX19dmFyIE9pPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrTWFwP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIFBpKGEsYixjKXtjPXpnKC0xLGMpO2MudGFnPTM7Yy5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciBkPWIudmFsdWU7Yy5jYWxsYmFjaz1mdW5jdGlvbigpe1FpfHwoUWk9ITAsUmk9ZCk7TmkoYSxiKX07cmV0dXJuIGN9XG5mdW5jdGlvbiBTaShhLGIsYyl7Yz16ZygtMSxjKTtjLnRhZz0zO3ZhciBkPWEudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQpe3ZhciBlPWIudmFsdWU7Yy5wYXlsb2FkPWZ1bmN0aW9uKCl7TmkoYSxiKTtyZXR1cm4gZChlKX19dmFyIGY9YS5zdGF0ZU5vZGU7bnVsbCE9PWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLmNvbXBvbmVudERpZENhdGNoJiYoYy5jYWxsYmFjaz1mdW5jdGlvbigpe1wiZnVuY3Rpb25cIiE9PXR5cGVvZiBkJiYobnVsbD09PVRpP1RpPW5ldyBTZXQoW3RoaXNdKTpUaS5hZGQodGhpcyksTmkoYSxiKSk7dmFyIGM9Yi5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKGIudmFsdWUse2NvbXBvbmVudFN0YWNrOm51bGwhPT1jP2M6XCJcIn0pfSk7cmV0dXJuIGN9dmFyIFVpPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBXZWFrU2V0P1dlYWtTZXQ6U2V0O1xuZnVuY3Rpb24gVmkoYSl7dmFyIGI9YS5yZWY7aWYobnVsbCE9PWIpaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGIpdHJ5e2IobnVsbCl9Y2F0Y2goYyl7V2koYSxjKX1lbHNlIGIuY3VycmVudD1udWxsfWZ1bmN0aW9uIFhpKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmNhc2UgMjI6cmV0dXJuO2Nhc2UgMTppZihiLmZsYWdzJjI1NiYmbnVsbCE9PWEpe3ZhciBjPWEubWVtb2l6ZWRQcm9wcyxkPWEubWVtb2l6ZWRTdGF0ZTthPWIuc3RhdGVOb2RlO2I9YS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShiLmVsZW1lbnRUeXBlPT09Yi50eXBlP2M6bGcoYi50eXBlLGMpLGQpO2EuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9Yn1yZXR1cm47Y2FzZSAzOmIuZmxhZ3MmMjU2JiZxZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtyZXR1cm47Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm59dGhyb3cgRXJyb3IoeSgxNjMpKTt9XG5mdW5jdGlvbiBZaShhLGIsYyl7c3dpdGNoKGMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmNhc2UgMjI6Yj1jLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe2E9Yj1iLm5leHQ7ZG97aWYoMz09PShhLnRhZyYzKSl7dmFyIGQ9YS5jcmVhdGU7YS5kZXN0cm95PWQoKX1hPWEubmV4dH13aGlsZShhIT09Yil9Yj1jLnVwZGF0ZVF1ZXVlO2I9bnVsbCE9PWI/Yi5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWIpe2E9Yj1iLm5leHQ7ZG97dmFyIGU9YTtkPWUubmV4dDtlPWUudGFnOzAhPT0oZSY0KSYmMCE9PShlJjEpJiYoWmkoYyxhKSwkaShjLGEpKTthPWR9d2hpbGUoYSE9PWIpfXJldHVybjtjYXNlIDE6YT1jLnN0YXRlTm9kZTtjLmZsYWdzJjQmJihudWxsPT09Yj9hLmNvbXBvbmVudERpZE1vdW50KCk6KGQ9Yy5lbGVtZW50VHlwZT09PWMudHlwZT9iLm1lbW9pemVkUHJvcHM6bGcoYy50eXBlLGIubWVtb2l6ZWRQcm9wcyksYS5jb21wb25lbnREaWRVcGRhdGUoZCxcbmIubWVtb2l6ZWRTdGF0ZSxhLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKSkpO2I9Yy51cGRhdGVRdWV1ZTtudWxsIT09YiYmRWcoYyxiLGEpO3JldHVybjtjYXNlIDM6Yj1jLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iKXthPW51bGw7aWYobnVsbCE9PWMuY2hpbGQpc3dpdGNoKGMuY2hpbGQudGFnKXtjYXNlIDU6YT1jLmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6YT1jLmNoaWxkLnN0YXRlTm9kZX1FZyhjLGIsYSl9cmV0dXJuO2Nhc2UgNTphPWMuc3RhdGVOb2RlO251bGw9PT1iJiZjLmZsYWdzJjQmJm1mKGMudHlwZSxjLm1lbW9pemVkUHJvcHMpJiZhLmZvY3VzKCk7cmV0dXJuO2Nhc2UgNjpyZXR1cm47Y2FzZSA0OnJldHVybjtjYXNlIDEyOnJldHVybjtjYXNlIDEzOm51bGw9PT1jLm1lbW9pemVkU3RhdGUmJihjPWMuYWx0ZXJuYXRlLG51bGwhPT1jJiYoYz1jLm1lbW9pemVkU3RhdGUsbnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsIT09YyYmQ2MoYykpKSk7XG5yZXR1cm47Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIzOmNhc2UgMjQ6cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fVxuZnVuY3Rpb24gYWooYSxiKXtmb3IodmFyIGM9YTs7KXtpZig1PT09Yy50YWcpe3ZhciBkPWMuc3RhdGVOb2RlO2lmKGIpZD1kLnN0eWxlLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLnNldFByb3BlcnR5P2Quc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsXCJub25lXCIsXCJpbXBvcnRhbnRcIik6ZC5kaXNwbGF5PVwibm9uZVwiO2Vsc2V7ZD1jLnN0YXRlTm9kZTt2YXIgZT1jLm1lbW9pemVkUHJvcHMuc3R5bGU7ZT12b2lkIDAhPT1lJiZudWxsIT09ZSYmZS5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlcIik/ZS5kaXNwbGF5Om51bGw7ZC5zdHlsZS5kaXNwbGF5PXNiKFwiZGlzcGxheVwiLGUpfX1lbHNlIGlmKDY9PT1jLnRhZyljLnN0YXRlTm9kZS5ub2RlVmFsdWU9Yj9cIlwiOmMubWVtb2l6ZWRQcm9wcztlbHNlIGlmKCgyMyE9PWMudGFnJiYyNCE9PWMudGFnfHxudWxsPT09Yy5tZW1vaXplZFN0YXRlfHxjPT09YSkmJm51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09XG5hKWJyZWFrO2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8Yy5yZXR1cm49PT1hKXJldHVybjtjPWMucmV0dXJufWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Yz1jLnNpYmxpbmd9fVxuZnVuY3Rpb24gYmooYSxiKXtpZihNZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIE1mLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtNZi5vbkNvbW1pdEZpYmVyVW5tb3VudChMZixiKX1jYXRjaChmKXt9c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjphPWIudXBkYXRlUXVldWU7aWYobnVsbCE9PWEmJihhPWEubGFzdEVmZmVjdCxudWxsIT09YSkpe3ZhciBjPWE9YS5uZXh0O2Rve3ZhciBkPWMsZT1kLmRlc3Ryb3k7ZD1kLnRhZztpZih2b2lkIDAhPT1lKWlmKDAhPT0oZCY0KSlaaShiLGMpO2Vsc2V7ZD1iO3RyeXtlKCl9Y2F0Y2goZil7V2koZCxmKX19Yz1jLm5leHR9d2hpbGUoYyE9PWEpfWJyZWFrO2Nhc2UgMTpWaShiKTthPWIuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXthLnByb3BzPWIubWVtb2l6ZWRQcm9wcyxhLnN0YXRlPWIubWVtb2l6ZWRTdGF0ZSxhLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goZil7V2koYixcbmYpfWJyZWFrO2Nhc2UgNTpWaShiKTticmVhaztjYXNlIDQ6Y2ooYSxiKX19ZnVuY3Rpb24gZGooYSl7YS5hbHRlcm5hdGU9bnVsbDthLmNoaWxkPW51bGw7YS5kZXBlbmRlbmNpZXM9bnVsbDthLmZpcnN0RWZmZWN0PW51bGw7YS5sYXN0RWZmZWN0PW51bGw7YS5tZW1vaXplZFByb3BzPW51bGw7YS5tZW1vaXplZFN0YXRlPW51bGw7YS5wZW5kaW5nUHJvcHM9bnVsbDthLnJldHVybj1udWxsO2EudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBlaihhKXtyZXR1cm4gNT09PWEudGFnfHwzPT09YS50YWd8fDQ9PT1hLnRhZ31cbmZ1bmN0aW9uIGZqKGEpe2E6e2Zvcih2YXIgYj1hLnJldHVybjtudWxsIT09Yjspe2lmKGVqKGIpKWJyZWFrIGE7Yj1iLnJldHVybn10aHJvdyBFcnJvcih5KDE2MCkpO312YXIgYz1iO2I9Yy5zdGF0ZU5vZGU7c3dpdGNoKGMudGFnKXtjYXNlIDU6dmFyIGQ9ITE7YnJlYWs7Y2FzZSAzOmI9Yi5jb250YWluZXJJbmZvO2Q9ITA7YnJlYWs7Y2FzZSA0OmI9Yi5jb250YWluZXJJbmZvO2Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDE2MSkpO31jLmZsYWdzJjE2JiYocGIoYixcIlwiKSxjLmZsYWdzJj0tMTcpO2E6Yjpmb3IoYz1hOzspe2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8ZWooYy5yZXR1cm4pKXtjPW51bGw7YnJlYWsgYX1jPWMucmV0dXJufWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Zm9yKGM9Yy5zaWJsaW5nOzUhPT1jLnRhZyYmNiE9PWMudGFnJiYxOCE9PWMudGFnOyl7aWYoYy5mbGFncyYyKWNvbnRpbnVlIGI7aWYobnVsbD09PVxuYy5jaGlsZHx8ND09PWMudGFnKWNvbnRpbnVlIGI7ZWxzZSBjLmNoaWxkLnJldHVybj1jLGM9Yy5jaGlsZH1pZighKGMuZmxhZ3MmMikpe2M9Yy5zdGF0ZU5vZGU7YnJlYWsgYX19ZD9naihhLGMsYik6aGooYSxjLGIpfVxuZnVuY3Rpb24gZ2ooYSxiLGMpe3ZhciBkPWEudGFnLGU9NT09PWR8fDY9PT1kO2lmKGUpYT1lP2Euc3RhdGVOb2RlOmEuc3RhdGVOb2RlLmluc3RhbmNlLGI/OD09PWMubm9kZVR5cGU/Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLGIpOmMuaW5zZXJ0QmVmb3JlKGEsYik6KDg9PT1jLm5vZGVUeXBlPyhiPWMucGFyZW50Tm9kZSxiLmluc2VydEJlZm9yZShhLGMpKTooYj1jLGIuYXBwZW5kQ2hpbGQoYSkpLGM9Yy5fcmVhY3RSb290Q29udGFpbmVyLG51bGwhPT1jJiZ2b2lkIDAhPT1jfHxudWxsIT09Yi5vbmNsaWNrfHwoYi5vbmNsaWNrPWpmKSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKGdqKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspZ2ooYSxiLGMpLGE9YS5zaWJsaW5nfVxuZnVuY3Rpb24gaGooYSxiLGMpe3ZhciBkPWEudGFnLGU9NT09PWR8fDY9PT1kO2lmKGUpYT1lP2Euc3RhdGVOb2RlOmEuc3RhdGVOb2RlLmluc3RhbmNlLGI/Yy5pbnNlcnRCZWZvcmUoYSxiKTpjLmFwcGVuZENoaWxkKGEpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihoaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWhqKGEsYixjKSxhPWEuc2libGluZ31cbmZ1bmN0aW9uIGNqKGEsYil7Zm9yKHZhciBjPWIsZD0hMSxlLGY7Oyl7aWYoIWQpe2Q9Yy5yZXR1cm47YTpmb3IoOzspe2lmKG51bGw9PT1kKXRocm93IEVycm9yKHkoMTYwKSk7ZT1kLnN0YXRlTm9kZTtzd2l0Y2goZC50YWcpe2Nhc2UgNTpmPSExO2JyZWFrIGE7Y2FzZSAzOmU9ZS5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYTtjYXNlIDQ6ZT1lLmNvbnRhaW5lckluZm87Zj0hMDticmVhayBhfWQ9ZC5yZXR1cm59ZD0hMH1pZig1PT09Yy50YWd8fDY9PT1jLnRhZyl7YTpmb3IodmFyIGc9YSxoPWMsaz1oOzspaWYoYmooZyxrKSxudWxsIT09ay5jaGlsZCYmNCE9PWsudGFnKWsuY2hpbGQucmV0dXJuPWssaz1rLmNoaWxkO2Vsc2V7aWYoaz09PWgpYnJlYWsgYTtmb3IoO251bGw9PT1rLnNpYmxpbmc7KXtpZihudWxsPT09ay5yZXR1cm58fGsucmV0dXJuPT09aClicmVhayBhO2s9ay5yZXR1cm59ay5zaWJsaW5nLnJldHVybj1rLnJldHVybjtrPWsuc2libGluZ31mPyhnPWUsaD1jLnN0YXRlTm9kZSxcbjg9PT1nLm5vZGVUeXBlP2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKTpnLnJlbW92ZUNoaWxkKGgpKTplLnJlbW92ZUNoaWxkKGMuc3RhdGVOb2RlKX1lbHNlIGlmKDQ9PT1jLnRhZyl7aWYobnVsbCE9PWMuY2hpbGQpe2U9Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztmPSEwO2MuY2hpbGQucmV0dXJuPWM7Yz1jLmNoaWxkO2NvbnRpbnVlfX1lbHNlIGlmKGJqKGEsYyksbnVsbCE9PWMuY2hpbGQpe2MuY2hpbGQucmV0dXJuPWM7Yz1jLmNoaWxkO2NvbnRpbnVlfWlmKGM9PT1iKWJyZWFrO2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8Yy5yZXR1cm49PT1iKXJldHVybjtjPWMucmV0dXJuOzQ9PT1jLnRhZyYmKGQ9ITEpfWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Yz1jLnNpYmxpbmd9fVxuZnVuY3Rpb24gaWooYSxiKXtzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDIyOnZhciBjPWIudXBkYXRlUXVldWU7Yz1udWxsIT09Yz9jLmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09Yyl7dmFyIGQ9Yz1jLm5leHQ7ZG8gMz09PShkLnRhZyYzKSYmKGE9ZC5kZXN0cm95LGQuZGVzdHJveT12b2lkIDAsdm9pZCAwIT09YSYmYSgpKSxkPWQubmV4dDt3aGlsZShkIT09Yyl9cmV0dXJuO2Nhc2UgMTpyZXR1cm47Y2FzZSA1OmM9Yi5zdGF0ZU5vZGU7aWYobnVsbCE9Yyl7ZD1iLm1lbW9pemVkUHJvcHM7dmFyIGU9bnVsbCE9PWE/YS5tZW1vaXplZFByb3BzOmQ7YT1iLnR5cGU7dmFyIGY9Yi51cGRhdGVRdWV1ZTtiLnVwZGF0ZVF1ZXVlPW51bGw7aWYobnVsbCE9PWYpe2NbeGZdPWQ7XCJpbnB1dFwiPT09YSYmXCJyYWRpb1wiPT09ZC50eXBlJiZudWxsIT1kLm5hbWUmJiRhKGMsZCk7d2IoYSxlKTtiPXdiKGEsZCk7Zm9yKGU9MDtlPGYubGVuZ3RoO2UrPVxuMil7dmFyIGc9ZltlXSxoPWZbZSsxXTtcInN0eWxlXCI9PT1nP3RiKGMsaCk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zz9vYihjLGgpOlwiY2hpbGRyZW5cIj09PWc/cGIoYyxoKTpxYShjLGcsaCxiKX1zd2l0Y2goYSl7Y2FzZSBcImlucHV0XCI6YWIoYyxkKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjppYihjLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjphPWMuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSxjLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFkLm11bHRpcGxlLGY9ZC52YWx1ZSxudWxsIT1mP2ZiKGMsISFkLm11bHRpcGxlLGYsITEpOmEhPT0hIWQubXVsdGlwbGUmJihudWxsIT1kLmRlZmF1bHRWYWx1ZT9mYihjLCEhZC5tdWx0aXBsZSxkLmRlZmF1bHRWYWx1ZSwhMCk6ZmIoYywhIWQubXVsdGlwbGUsZC5tdWx0aXBsZT9bXTpcIlwiLCExKSl9fX1yZXR1cm47Y2FzZSA2OmlmKG51bGw9PT1iLnN0YXRlTm9kZSl0aHJvdyBFcnJvcih5KDE2MikpO2Iuc3RhdGVOb2RlLm5vZGVWYWx1ZT1cbmIubWVtb2l6ZWRQcm9wcztyZXR1cm47Y2FzZSAzOmM9Yi5zdGF0ZU5vZGU7Yy5oeWRyYXRlJiYoYy5oeWRyYXRlPSExLENjKGMuY29udGFpbmVySW5mbykpO3JldHVybjtjYXNlIDEyOnJldHVybjtjYXNlIDEzOm51bGwhPT1iLm1lbW9pemVkU3RhdGUmJihqaj1PKCksYWooYi5jaGlsZCwhMCkpO2tqKGIpO3JldHVybjtjYXNlIDE5OmtqKGIpO3JldHVybjtjYXNlIDE3OnJldHVybjtjYXNlIDIzOmNhc2UgMjQ6YWooYixudWxsIT09Yi5tZW1vaXplZFN0YXRlKTtyZXR1cm59dGhyb3cgRXJyb3IoeSgxNjMpKTt9ZnVuY3Rpb24ga2ooYSl7dmFyIGI9YS51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YS51cGRhdGVRdWV1ZT1udWxsO3ZhciBjPWEuc3RhdGVOb2RlO251bGw9PT1jJiYoYz1hLnN0YXRlTm9kZT1uZXcgVWkpO2IuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1sai5iaW5kKG51bGwsYSxiKTtjLmhhcyhiKXx8KGMuYWRkKGIpLGIudGhlbihkLGQpKX0pfX1cbmZ1bmN0aW9uIG1qKGEsYil7cmV0dXJuIG51bGwhPT1hJiYoYT1hLm1lbW9pemVkU3RhdGUsbnVsbD09PWF8fG51bGwhPT1hLmRlaHlkcmF0ZWQpPyhiPWIubWVtb2l6ZWRTdGF0ZSxudWxsIT09YiYmbnVsbD09PWIuZGVoeWRyYXRlZCk6ITF9dmFyIG5qPU1hdGguY2VpbCxvaj1yYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLHBqPXJhLlJlYWN0Q3VycmVudE93bmVyLFg9MCxVPW51bGwsWT1udWxsLFc9MCxxaj0wLHJqPUJmKDApLFY9MCxzaj1udWxsLHRqPTAsRGc9MCxIaT0wLHVqPTAsdmo9bnVsbCxqaj0wLEppPUluZmluaXR5O2Z1bmN0aW9uIHdqKCl7Smk9TygpKzUwMH12YXIgWj1udWxsLFFpPSExLFJpPW51bGwsVGk9bnVsbCx4aj0hMSx5aj1udWxsLHpqPTkwLEFqPVtdLEJqPVtdLENqPW51bGwsRGo9MCxFaj1udWxsLEZqPS0xLEdqPTAsSGo9MCxJaj1udWxsLEpqPSExO2Z1bmN0aW9uIEhnKCl7cmV0dXJuIDAhPT0oWCY0OCk/TygpOi0xIT09Rmo/Rmo6Rmo9TygpfVxuZnVuY3Rpb24gSWcoYSl7YT1hLm1vZGU7aWYoMD09PShhJjIpKXJldHVybiAxO2lmKDA9PT0oYSY0KSlyZXR1cm4gOTk9PT1lZygpPzE6MjswPT09R2omJihHaj10aik7aWYoMCE9PWtnLnRyYW5zaXRpb24pezAhPT1IaiYmKEhqPW51bGwhPT12aj92ai5wZW5kaW5nTGFuZXM6MCk7YT1Hajt2YXIgYj00MTg2MTEyJn5IajtiJj0tYjswPT09YiYmKGE9NDE4NjExMiZ+YSxiPWEmLWEsMD09PWImJihiPTgxOTIpKTtyZXR1cm4gYn1hPWVnKCk7MCE9PShYJjQpJiY5OD09PWE/YT1YYygxMixHaik6KGE9U2MoYSksYT1YYyhhLEdqKSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBKZyhhLGIsYyl7aWYoNTA8RGopdGhyb3cgRGo9MCxFaj1udWxsLEVycm9yKHkoMTg1KSk7YT1LaihhLGIpO2lmKG51bGw9PT1hKXJldHVybiBudWxsOyRjKGEsYixjKTthPT09VSYmKEhpfD1iLDQ9PT1WJiZJaShhLFcpKTt2YXIgZD1lZygpOzE9PT1iPzAhPT0oWCY4KSYmMD09PShYJjQ4KT9MaihhKTooTWooYSxjKSwwPT09WCYmKHdqKCksaWcoKSkpOigwPT09KFgmNCl8fDk4IT09ZCYmOTkhPT1kfHwobnVsbD09PUNqP0NqPW5ldyBTZXQoW2FdKTpDai5hZGQoYSkpLE1qKGEsYykpO3ZqPWF9ZnVuY3Rpb24gS2ooYSxiKXthLmxhbmVzfD1iO3ZhciBjPWEuYWx0ZXJuYXRlO251bGwhPT1jJiYoYy5sYW5lc3w9Yik7Yz1hO2ZvcihhPWEucmV0dXJuO251bGwhPT1hOylhLmNoaWxkTGFuZXN8PWIsYz1hLmFsdGVybmF0ZSxudWxsIT09YyYmKGMuY2hpbGRMYW5lc3w9YiksYz1hLGE9YS5yZXR1cm47cmV0dXJuIDM9PT1jLnRhZz9jLnN0YXRlTm9kZTpudWxsfVxuZnVuY3Rpb24gTWooYSxiKXtmb3IodmFyIGM9YS5jYWxsYmFja05vZGUsZD1hLnN1c3BlbmRlZExhbmVzLGU9YS5waW5nZWRMYW5lcyxmPWEuZXhwaXJhdGlvblRpbWVzLGc9YS5wZW5kaW5nTGFuZXM7MDxnOyl7dmFyIGg9MzEtVmMoZyksaz0xPDxoLGw9ZltoXTtpZigtMT09PWwpe2lmKDA9PT0oayZkKXx8MCE9PShrJmUpKXtsPWI7UmMoayk7dmFyIG49RjtmW2hdPTEwPD1uP2wrMjUwOjY8PW4/bCs1RTM6LTF9fWVsc2UgbDw9YiYmKGEuZXhwaXJlZExhbmVzfD1rKTtnJj1+a31kPVVjKGEsYT09PVU/VzowKTtiPUY7aWYoMD09PWQpbnVsbCE9PWMmJihjIT09WmYmJlBmKGMpLGEuY2FsbGJhY2tOb2RlPW51bGwsYS5jYWxsYmFja1ByaW9yaXR5PTApO2Vsc2V7aWYobnVsbCE9PWMpe2lmKGEuY2FsbGJhY2tQcmlvcml0eT09PWIpcmV0dXJuO2MhPT1aZiYmUGYoYyl9MTU9PT1iPyhjPUxqLmJpbmQobnVsbCxhKSxudWxsPT09YWc/KGFnPVtjXSxiZz1PZihVZixqZykpOmFnLnB1c2goYyksXG5jPVpmKToxND09PWI/Yz1oZyg5OSxMai5iaW5kKG51bGwsYSkpOihjPVRjKGIpLGM9aGcoYyxOai5iaW5kKG51bGwsYSkpKTthLmNhbGxiYWNrUHJpb3JpdHk9YjthLmNhbGxiYWNrTm9kZT1jfX1cbmZ1bmN0aW9uIE5qKGEpe0ZqPS0xO0hqPUdqPTA7aWYoMCE9PShYJjQ4KSl0aHJvdyBFcnJvcih5KDMyNykpO3ZhciBiPWEuY2FsbGJhY2tOb2RlO2lmKE9qKCkmJmEuY2FsbGJhY2tOb2RlIT09YilyZXR1cm4gbnVsbDt2YXIgYz1VYyhhLGE9PT1VP1c6MCk7aWYoMD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9Yzt2YXIgZT1YO1h8PTE2O3ZhciBmPVBqKCk7aWYoVSE9PWF8fFchPT1kKXdqKCksUWooYSxkKTtkbyB0cnl7UmooKTticmVha31jYXRjaChoKXtTaihhLGgpfXdoaWxlKDEpO3FnKCk7b2ouY3VycmVudD1mO1g9ZTtudWxsIT09WT9kPTA6KFU9bnVsbCxXPTAsZD1WKTtpZigwIT09KHRqJkhpKSlRaihhLDApO2Vsc2UgaWYoMCE9PWQpezI9PT1kJiYoWHw9NjQsYS5oeWRyYXRlJiYoYS5oeWRyYXRlPSExLHFmKGEuY29udGFpbmVySW5mbykpLGM9V2MoYSksMCE9PWMmJihkPVRqKGEsYykpKTtpZigxPT09ZCl0aHJvdyBiPXNqLFFqKGEsMCksSWkoYSxjKSxNaihhLE8oKSksYjthLmZpbmlzaGVkV29yaz1cbmEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWM7c3dpdGNoKGQpe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IoeSgzNDUpKTtjYXNlIDI6VWooYSk7YnJlYWs7Y2FzZSAzOklpKGEsYyk7aWYoKGMmNjI5MTQ1NjApPT09YyYmKGQ9amorNTAwLU8oKSwxMDxkKSl7aWYoMCE9PVVjKGEsMCkpYnJlYWs7ZT1hLnN1c3BlbmRlZExhbmVzO2lmKChlJmMpIT09Yyl7SGcoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmU7YnJlYWt9YS50aW1lb3V0SGFuZGxlPW9mKFVqLmJpbmQobnVsbCxhKSxkKTticmVha31VaihhKTticmVhaztjYXNlIDQ6SWkoYSxjKTtpZigoYyY0MTg2MTEyKT09PWMpYnJlYWs7ZD1hLmV2ZW50VGltZXM7Zm9yKGU9LTE7MDxjOyl7dmFyIGc9MzEtVmMoYyk7Zj0xPDxnO2c9ZFtnXTtnPmUmJihlPWcpO2MmPX5mfWM9ZTtjPU8oKS1jO2M9KDEyMD5jPzEyMDo0ODA+Yz80ODA6MTA4MD5jPzEwODA6MTkyMD5jPzE5MjA6M0UzPmM/M0UzOjQzMjA+XG5jPzQzMjA6MTk2MCpuaihjLzE5NjApKS1jO2lmKDEwPGMpe2EudGltZW91dEhhbmRsZT1vZihVai5iaW5kKG51bGwsYSksYyk7YnJlYWt9VWooYSk7YnJlYWs7Y2FzZSA1OlVqKGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgzMjkpKTt9fU1qKGEsTygpKTtyZXR1cm4gYS5jYWxsYmFja05vZGU9PT1iP05qLmJpbmQobnVsbCxhKTpudWxsfWZ1bmN0aW9uIElpKGEsYil7YiY9fnVqO2ImPX5IaTthLnN1c3BlbmRlZExhbmVzfD1iO2EucGluZ2VkTGFuZXMmPX5iO2ZvcihhPWEuZXhwaXJhdGlvblRpbWVzOzA8Yjspe3ZhciBjPTMxLVZjKGIpLGQ9MTw8YzthW2NdPS0xO2ImPX5kfX1cbmZ1bmN0aW9uIExqKGEpe2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTtPaigpO2lmKGE9PT1VJiYwIT09KGEuZXhwaXJlZExhbmVzJlcpKXt2YXIgYj1XO3ZhciBjPVRqKGEsYik7MCE9PSh0aiZIaSkmJihiPVVjKGEsYiksYz1UaihhLGIpKX1lbHNlIGI9VWMoYSwwKSxjPVRqKGEsYik7MCE9PWEudGFnJiYyPT09YyYmKFh8PTY0LGEuaHlkcmF0ZSYmKGEuaHlkcmF0ZT0hMSxxZihhLmNvbnRhaW5lckluZm8pKSxiPVdjKGEpLDAhPT1iJiYoYz1UaihhLGIpKSk7aWYoMT09PWMpdGhyb3cgYz1zaixRaihhLDApLElpKGEsYiksTWooYSxPKCkpLGM7YS5maW5pc2hlZFdvcms9YS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkTGFuZXM9YjtVaihhKTtNaihhLE8oKSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBWaigpe2lmKG51bGwhPT1Dail7dmFyIGE9Q2o7Q2o9bnVsbDthLmZvckVhY2goZnVuY3Rpb24oYSl7YS5leHBpcmVkTGFuZXN8PTI0JmEucGVuZGluZ0xhbmVzO01qKGEsTygpKX0pfWlnKCl9ZnVuY3Rpb24gV2ooYSxiKXt2YXIgYz1YO1h8PTE7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7WD1jLDA9PT1YJiYod2ooKSxpZygpKX19ZnVuY3Rpb24gWGooYSxiKXt2YXIgYz1YO1gmPS0yO1h8PTg7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7WD1jLDA9PT1YJiYod2ooKSxpZygpKX19ZnVuY3Rpb24gbmkoYSxiKXtJKHJqLHFqKTtxanw9Yjt0anw9Yn1mdW5jdGlvbiBLaSgpe3FqPXJqLmN1cnJlbnQ7SChyail9XG5mdW5jdGlvbiBRaihhLGIpe2EuZmluaXNoZWRXb3JrPW51bGw7YS5maW5pc2hlZExhbmVzPTA7dmFyIGM9YS50aW1lb3V0SGFuZGxlOy0xIT09YyYmKGEudGltZW91dEhhbmRsZT0tMSxwZihjKSk7aWYobnVsbCE9PVkpZm9yKGM9WS5yZXR1cm47bnVsbCE9PWM7KXt2YXIgZD1jO3N3aXRjaChkLnRhZyl7Y2FzZSAxOmQ9ZC50eXBlLmNoaWxkQ29udGV4dFR5cGVzO251bGwhPT1kJiZ2b2lkIDAhPT1kJiZHZigpO2JyZWFrO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2JyZWFrO2Nhc2UgNTpoaChkKTticmVhaztjYXNlIDQ6ZmgoKTticmVhaztjYXNlIDEzOkgoUCk7YnJlYWs7Y2FzZSAxOTpIKFApO2JyZWFrO2Nhc2UgMTA6cmcoZCk7YnJlYWs7Y2FzZSAyMzpjYXNlIDI0OktpKCl9Yz1jLnJldHVybn1VPWE7WT1UZyhhLmN1cnJlbnQsbnVsbCk7Vz1xaj10aj1iO1Y9MDtzaj1udWxsO3VqPUhpPURnPTB9XG5mdW5jdGlvbiBTaihhLGIpe2Rve3ZhciBjPVk7dHJ5e3FnKCk7dmguY3VycmVudD1HaDtpZih5aCl7Zm9yKHZhciBkPVIubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZDspe3ZhciBlPWQucXVldWU7bnVsbCE9PWUmJihlLnBlbmRpbmc9bnVsbCk7ZD1kLm5leHR9eWg9ITF9eGg9MDtUPVM9Uj1udWxsO3poPSExO3BqLmN1cnJlbnQ9bnVsbDtpZihudWxsPT09Y3x8bnVsbD09PWMucmV0dXJuKXtWPTE7c2o9YjtZPW51bGw7YnJlYWt9YTp7dmFyIGY9YSxnPWMucmV0dXJuLGg9YyxrPWI7Yj1XO2guZmxhZ3N8PTIwNDg7aC5maXJzdEVmZmVjdD1oLmxhc3RFZmZlY3Q9bnVsbDtpZihudWxsIT09ayYmXCJvYmplY3RcIj09PXR5cGVvZiBrJiZcImZ1bmN0aW9uXCI9PT10eXBlb2Ygay50aGVuKXt2YXIgbD1rO2lmKDA9PT0oaC5tb2RlJjIpKXt2YXIgbj1oLmFsdGVybmF0ZTtuPyhoLnVwZGF0ZVF1ZXVlPW4udXBkYXRlUXVldWUsaC5tZW1vaXplZFN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxoLmxhbmVzPW4ubGFuZXMpOlxuKGgudXBkYXRlUXVldWU9bnVsbCxoLm1lbW9pemVkU3RhdGU9bnVsbCl9dmFyIEE9MCE9PShQLmN1cnJlbnQmMSkscD1nO2Rve3ZhciBDO2lmKEM9MTM9PT1wLnRhZyl7dmFyIHg9cC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT14KUM9bnVsbCE9PXguZGVoeWRyYXRlZD8hMDohMTtlbHNle3ZhciB3PXAubWVtb2l6ZWRQcm9wcztDPXZvaWQgMD09PXcuZmFsbGJhY2s/ITE6ITAhPT13LnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrPyEwOkE/ITE6ITB9fWlmKEMpe3ZhciB6PXAudXBkYXRlUXVldWU7aWYobnVsbD09PXope3ZhciB1PW5ldyBTZXQ7dS5hZGQobCk7cC51cGRhdGVRdWV1ZT11fWVsc2Ugei5hZGQobCk7aWYoMD09PShwLm1vZGUmMikpe3AuZmxhZ3N8PTY0O2guZmxhZ3N8PTE2Mzg0O2guZmxhZ3MmPS0yOTgxO2lmKDE9PT1oLnRhZylpZihudWxsPT09aC5hbHRlcm5hdGUpaC50YWc9MTc7ZWxzZXt2YXIgdD16ZygtMSwxKTt0LnRhZz0yO0FnKGgsdCl9aC5sYW5lc3w9MTticmVhayBhfWs9XG52b2lkIDA7aD1iO3ZhciBxPWYucGluZ0NhY2hlO251bGw9PT1xPyhxPWYucGluZ0NhY2hlPW5ldyBPaSxrPW5ldyBTZXQscS5zZXQobCxrKSk6KGs9cS5nZXQobCksdm9pZCAwPT09ayYmKGs9bmV3IFNldCxxLnNldChsLGspKSk7aWYoIWsuaGFzKGgpKXtrLmFkZChoKTt2YXIgdj1Zai5iaW5kKG51bGwsZixsLGgpO2wudGhlbih2LHYpfXAuZmxhZ3N8PTQwOTY7cC5sYW5lcz1iO2JyZWFrIGF9cD1wLnJldHVybn13aGlsZShudWxsIT09cCk7az1FcnJvcigoUmEoaC50eXBlKXx8XCJBIFJlYWN0IGNvbXBvbmVudFwiKStcIiBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cXG5cXG5BZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvIHByb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LlwiKX01IT09ViYmKFY9Mik7az1NaShrLGgpO3A9XG5nO2Rve3N3aXRjaChwLnRhZyl7Y2FzZSAzOmY9aztwLmZsYWdzfD00MDk2O2ImPS1iO3AubGFuZXN8PWI7dmFyIEo9UGkocCxmLGIpO0JnKHAsSik7YnJlYWsgYTtjYXNlIDE6Zj1rO3ZhciBLPXAudHlwZSxRPXAuc3RhdGVOb2RlO2lmKDA9PT0ocC5mbGFncyY2NCkmJihcImZ1bmN0aW9uXCI9PT10eXBlb2YgSy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1RJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgUS5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1UaXx8IVRpLmhhcyhRKSkpKXtwLmZsYWdzfD00MDk2O2ImPS1iO3AubGFuZXN8PWI7dmFyIEw9U2kocCxmLGIpO0JnKHAsTCk7YnJlYWsgYX19cD1wLnJldHVybn13aGlsZShudWxsIT09cCl9WmooYyl9Y2F0Y2godmEpe2I9dmE7WT09PWMmJm51bGwhPT1jJiYoWT1jPWMucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSgxKX1cbmZ1bmN0aW9uIFBqKCl7dmFyIGE9b2ouY3VycmVudDtvai5jdXJyZW50PUdoO3JldHVybiBudWxsPT09YT9HaDphfWZ1bmN0aW9uIFRqKGEsYil7dmFyIGM9WDtYfD0xNjt2YXIgZD1QaigpO1U9PT1hJiZXPT09Ynx8UWooYSxiKTtkbyB0cnl7YWsoKTticmVha31jYXRjaChlKXtTaihhLGUpfXdoaWxlKDEpO3FnKCk7WD1jO29qLmN1cnJlbnQ9ZDtpZihudWxsIT09WSl0aHJvdyBFcnJvcih5KDI2MSkpO1U9bnVsbDtXPTA7cmV0dXJuIFZ9ZnVuY3Rpb24gYWsoKXtmb3IoO251bGwhPT1ZOyliayhZKX1mdW5jdGlvbiBSaigpe2Zvcig7bnVsbCE9PVkmJiFRZigpOyliayhZKX1mdW5jdGlvbiBiayhhKXt2YXIgYj1jayhhLmFsdGVybmF0ZSxhLHFqKTthLm1lbW9pemVkUHJvcHM9YS5wZW5kaW5nUHJvcHM7bnVsbD09PWI/WmooYSk6WT1iO3BqLmN1cnJlbnQ9bnVsbH1cbmZ1bmN0aW9uIFpqKGEpe3ZhciBiPWE7ZG97dmFyIGM9Yi5hbHRlcm5hdGU7YT1iLnJldHVybjtpZigwPT09KGIuZmxhZ3MmMjA0OCkpe2M9R2koYyxiLHFqKTtpZihudWxsIT09Yyl7WT1jO3JldHVybn1jPWI7aWYoMjQhPT1jLnRhZyYmMjMhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8MCE9PShxaiYxMDczNzQxODI0KXx8MD09PShjLm1vZGUmNCkpe2Zvcih2YXIgZD0wLGU9Yy5jaGlsZDtudWxsIT09ZTspZHw9ZS5sYW5lc3xlLmNoaWxkTGFuZXMsZT1lLnNpYmxpbmc7Yy5jaGlsZExhbmVzPWR9bnVsbCE9PWEmJjA9PT0oYS5mbGFncyYyMDQ4KSYmKG51bGw9PT1hLmZpcnN0RWZmZWN0JiYoYS5maXJzdEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxudWxsIT09Yi5sYXN0RWZmZWN0JiYobnVsbCE9PWEubGFzdEVmZmVjdCYmKGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWIuZmlyc3RFZmZlY3QpLGEubGFzdEVmZmVjdD1iLmxhc3RFZmZlY3QpLDE8Yi5mbGFncyYmKG51bGwhPT1cbmEubGFzdEVmZmVjdD9hLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1iOmEuZmlyc3RFZmZlY3Q9YixhLmxhc3RFZmZlY3Q9YikpfWVsc2V7Yz1MaShiKTtpZihudWxsIT09Yyl7Yy5mbGFncyY9MjA0NztZPWM7cmV0dXJufW51bGwhPT1hJiYoYS5maXJzdEVmZmVjdD1hLmxhc3RFZmZlY3Q9bnVsbCxhLmZsYWdzfD0yMDQ4KX1iPWIuc2libGluZztpZihudWxsIT09Yil7WT1iO3JldHVybn1ZPWI9YX13aGlsZShudWxsIT09Yik7MD09PVYmJihWPTUpfWZ1bmN0aW9uIFVqKGEpe3ZhciBiPWVnKCk7Z2coOTksZGsuYmluZChudWxsLGEsYikpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gZGsoYSxiKXtkbyBPaigpO3doaWxlKG51bGwhPT15aik7aWYoMCE9PShYJjQ4KSl0aHJvdyBFcnJvcih5KDMyNykpO3ZhciBjPWEuZmluaXNoZWRXb3JrO2lmKG51bGw9PT1jKXJldHVybiBudWxsO2EuZmluaXNoZWRXb3JrPW51bGw7YS5maW5pc2hlZExhbmVzPTA7aWYoYz09PWEuY3VycmVudCl0aHJvdyBFcnJvcih5KDE3NykpO2EuY2FsbGJhY2tOb2RlPW51bGw7dmFyIGQ9Yy5sYW5lc3xjLmNoaWxkTGFuZXMsZT1kLGY9YS5wZW5kaW5nTGFuZXMmfmU7YS5wZW5kaW5nTGFuZXM9ZTthLnN1c3BlbmRlZExhbmVzPTA7YS5waW5nZWRMYW5lcz0wO2EuZXhwaXJlZExhbmVzJj1lO2EubXV0YWJsZVJlYWRMYW5lcyY9ZTthLmVudGFuZ2xlZExhbmVzJj1lO2U9YS5lbnRhbmdsZW1lbnRzO2Zvcih2YXIgZz1hLmV2ZW50VGltZXMsaD1hLmV4cGlyYXRpb25UaW1lczswPGY7KXt2YXIgaz0zMS1WYyhmKSxsPTE8PGs7ZVtrXT0wO2dba109LTE7aFtrXT0tMTtmJj1+bH1udWxsIT09XG5DaiYmMD09PShkJjI0KSYmQ2ouaGFzKGEpJiZDai5kZWxldGUoYSk7YT09PVUmJihZPVU9bnVsbCxXPTApOzE8Yy5mbGFncz9udWxsIT09Yy5sYXN0RWZmZWN0PyhjLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1jLGQ9Yy5maXJzdEVmZmVjdCk6ZD1jOmQ9Yy5maXJzdEVmZmVjdDtpZihudWxsIT09ZCl7ZT1YO1h8PTMyO3BqLmN1cnJlbnQ9bnVsbDtrZj1mZDtnPU5lKCk7aWYoT2UoZykpe2lmKFwic2VsZWN0aW9uU3RhcnRcImluIGcpaD17c3RhcnQ6Zy5zZWxlY3Rpb25TdGFydCxlbmQ6Zy5zZWxlY3Rpb25FbmR9O2Vsc2UgYTppZihoPShoPWcub3duZXJEb2N1bWVudCkmJmguZGVmYXVsdFZpZXd8fHdpbmRvdywobD1oLmdldFNlbGVjdGlvbiYmaC5nZXRTZWxlY3Rpb24oKSkmJjAhPT1sLnJhbmdlQ291bnQpe2g9bC5hbmNob3JOb2RlO2Y9bC5hbmNob3JPZmZzZXQ7az1sLmZvY3VzTm9kZTtsPWwuZm9jdXNPZmZzZXQ7dHJ5e2gubm9kZVR5cGUsay5ub2RlVHlwZX1jYXRjaCh2YSl7aD1udWxsO1xuYnJlYWsgYX12YXIgbj0wLEE9LTEscD0tMSxDPTAseD0wLHc9Zyx6PW51bGw7Yjpmb3IoOzspe2Zvcih2YXIgdTs7KXt3IT09aHx8MCE9PWYmJjMhPT13Lm5vZGVUeXBlfHwoQT1uK2YpO3chPT1rfHwwIT09bCYmMyE9PXcubm9kZVR5cGV8fChwPW4rbCk7Mz09PXcubm9kZVR5cGUmJihuKz13Lm5vZGVWYWx1ZS5sZW5ndGgpO2lmKG51bGw9PT0odT13LmZpcnN0Q2hpbGQpKWJyZWFrO3o9dzt3PXV9Zm9yKDs7KXtpZih3PT09ZylicmVhayBiO3o9PT1oJiYrK0M9PT1mJiYoQT1uKTt6PT09ayYmKyt4PT09bCYmKHA9bik7aWYobnVsbCE9PSh1PXcubmV4dFNpYmxpbmcpKWJyZWFrO3c9ejt6PXcucGFyZW50Tm9kZX13PXV9aD0tMT09PUF8fC0xPT09cD9udWxsOntzdGFydDpBLGVuZDpwfX1lbHNlIGg9bnVsbDtoPWh8fHtzdGFydDowLGVuZDowfX1lbHNlIGg9bnVsbDtsZj17Zm9jdXNlZEVsZW06ZyxzZWxlY3Rpb25SYW5nZTpofTtmZD0hMTtJaj1udWxsO0pqPSExO1o9ZDtkbyB0cnl7ZWsoKX1jYXRjaCh2YSl7aWYobnVsbD09PVxuWil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTtJaj1udWxsO1o9ZDtkbyB0cnl7Zm9yKGc9YTtudWxsIT09Wjspe3ZhciB0PVouZmxhZ3M7dCYxNiYmcGIoWi5zdGF0ZU5vZGUsXCJcIik7aWYodCYxMjgpe3ZhciBxPVouYWx0ZXJuYXRlO2lmKG51bGwhPT1xKXt2YXIgdj1xLnJlZjtudWxsIT09diYmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiB2P3YobnVsbCk6di5jdXJyZW50PW51bGwpfX1zd2l0Y2godCYxMDM4KXtjYXNlIDI6ZmooWik7Wi5mbGFncyY9LTM7YnJlYWs7Y2FzZSA2OmZqKFopO1ouZmxhZ3MmPS0zO2lqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgMTAyNDpaLmZsYWdzJj0tMTAyNTticmVhaztjYXNlIDEwMjg6Wi5mbGFncyY9LTEwMjU7aWooWi5hbHRlcm5hdGUsWik7YnJlYWs7Y2FzZSA0OmlqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgODpoPVo7Y2ooZyxoKTt2YXIgSj1oLmFsdGVybmF0ZTtkaihoKTtudWxsIT09XG5KJiZkaihKKX1aPVoubmV4dEVmZmVjdH19Y2F0Y2godmEpe2lmKG51bGw9PT1aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO3Y9bGY7cT1OZSgpO3Q9di5mb2N1c2VkRWxlbTtnPXYuc2VsZWN0aW9uUmFuZ2U7aWYocSE9PXQmJnQmJnQub3duZXJEb2N1bWVudCYmTWUodC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0KSl7bnVsbCE9PWcmJk9lKHQpJiYocT1nLnN0YXJ0LHY9Zy5lbmQsdm9pZCAwPT09diYmKHY9cSksXCJzZWxlY3Rpb25TdGFydFwiaW4gdD8odC5zZWxlY3Rpb25TdGFydD1xLHQuc2VsZWN0aW9uRW5kPU1hdGgubWluKHYsdC52YWx1ZS5sZW5ndGgpKToodj0ocT10Lm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmcS5kZWZhdWx0Vmlld3x8d2luZG93LHYuZ2V0U2VsZWN0aW9uJiYodj12LmdldFNlbGVjdGlvbigpLGg9dC50ZXh0Q29udGVudC5sZW5ndGgsSj1NYXRoLm1pbihnLnN0YXJ0LGgpLGc9dm9pZCAwPT09XG5nLmVuZD9KOk1hdGgubWluKGcuZW5kLGgpLCF2LmV4dGVuZCYmSj5nJiYoaD1nLGc9SixKPWgpLGg9TGUodCxKKSxmPUxlKHQsZyksaCYmZiYmKDEhPT12LnJhbmdlQ291bnR8fHYuYW5jaG9yTm9kZSE9PWgubm9kZXx8di5hbmNob3JPZmZzZXQhPT1oLm9mZnNldHx8di5mb2N1c05vZGUhPT1mLm5vZGV8fHYuZm9jdXNPZmZzZXQhPT1mLm9mZnNldCkmJihxPXEuY3JlYXRlUmFuZ2UoKSxxLnNldFN0YXJ0KGgubm9kZSxoLm9mZnNldCksdi5yZW1vdmVBbGxSYW5nZXMoKSxKPmc/KHYuYWRkUmFuZ2UocSksdi5leHRlbmQoZi5ub2RlLGYub2Zmc2V0KSk6KHEuc2V0RW5kKGYubm9kZSxmLm9mZnNldCksdi5hZGRSYW5nZShxKSkpKSkpO3E9W107Zm9yKHY9dDt2PXYucGFyZW50Tm9kZTspMT09PXYubm9kZVR5cGUmJnEucHVzaCh7ZWxlbWVudDp2LGxlZnQ6di5zY3JvbGxMZWZ0LHRvcDp2LnNjcm9sbFRvcH0pO1wiZnVuY3Rpb25cIj09PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCk7Zm9yKHQ9XG4wO3Q8cS5sZW5ndGg7dCsrKXY9cVt0XSx2LmVsZW1lbnQuc2Nyb2xsTGVmdD12LmxlZnQsdi5lbGVtZW50LnNjcm9sbFRvcD12LnRvcH1mZD0hIWtmO2xmPWtmPW51bGw7YS5jdXJyZW50PWM7Wj1kO2RvIHRyeXtmb3IodD1hO251bGwhPT1aOyl7dmFyIEs9Wi5mbGFncztLJjM2JiZZaSh0LFouYWx0ZXJuYXRlLFopO2lmKEsmMTI4KXtxPXZvaWQgMDt2YXIgUT1aLnJlZjtpZihudWxsIT09USl7dmFyIEw9Wi5zdGF0ZU5vZGU7c3dpdGNoKFoudGFnKXtjYXNlIDU6cT1MO2JyZWFrO2RlZmF1bHQ6cT1MfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBRP1EocSk6US5jdXJyZW50PXF9fVo9Wi5uZXh0RWZmZWN0fX1jYXRjaCh2YSl7aWYobnVsbD09PVopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7Wj1udWxsOyRmKCk7WD1lfWVsc2UgYS5jdXJyZW50PWM7aWYoeGopeGo9ITEseWo9YSx6aj1iO2Vsc2UgZm9yKFo9ZDtudWxsIT09WjspYj1cbloubmV4dEVmZmVjdCxaLm5leHRFZmZlY3Q9bnVsbCxaLmZsYWdzJjgmJihLPVosSy5zaWJsaW5nPW51bGwsSy5zdGF0ZU5vZGU9bnVsbCksWj1iO2Q9YS5wZW5kaW5nTGFuZXM7MD09PWQmJihUaT1udWxsKTsxPT09ZD9hPT09RWo/RGorKzooRGo9MCxFaj1hKTpEaj0wO2M9Yy5zdGF0ZU5vZGU7aWYoTWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBNZi5vbkNvbW1pdEZpYmVyUm9vdCl0cnl7TWYub25Db21taXRGaWJlclJvb3QoTGYsYyx2b2lkIDAsNjQ9PT0oYy5jdXJyZW50LmZsYWdzJjY0KSl9Y2F0Y2godmEpe31NaihhLE8oKSk7aWYoUWkpdGhyb3cgUWk9ITEsYT1SaSxSaT1udWxsLGE7aWYoMCE9PShYJjgpKXJldHVybiBudWxsO2lnKCk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBlaygpe2Zvcig7bnVsbCE9PVo7KXt2YXIgYT1aLmFsdGVybmF0ZTtKanx8bnVsbD09PUlqfHwoMCE9PShaLmZsYWdzJjgpP2RjKFosSWopJiYoSmo9ITApOjEzPT09Wi50YWcmJm1qKGEsWikmJmRjKFosSWopJiYoSmo9ITApKTt2YXIgYj1aLmZsYWdzOzAhPT0oYiYyNTYpJiZYaShhLFopOzA9PT0oYiY1MTIpfHx4anx8KHhqPSEwLGhnKDk3LGZ1bmN0aW9uKCl7T2ooKTtyZXR1cm4gbnVsbH0pKTtaPVoubmV4dEVmZmVjdH19ZnVuY3Rpb24gT2ooKXtpZig5MCE9PXpqKXt2YXIgYT05Nzx6aj85Nzp6ajt6aj05MDtyZXR1cm4gZ2coYSxmayl9cmV0dXJuITF9ZnVuY3Rpb24gJGkoYSxiKXtBai5wdXNoKGIsYSk7eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSl9ZnVuY3Rpb24gWmkoYSxiKXtCai5wdXNoKGIsYSk7eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSl9XG5mdW5jdGlvbiBmaygpe2lmKG51bGw9PT15ailyZXR1cm4hMTt2YXIgYT15ajt5aj1udWxsO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMzEpKTt2YXIgYj1YO1h8PTMyO3ZhciBjPUJqO0JqPVtdO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCs9Mil7dmFyIGU9Y1tkXSxmPWNbZCsxXSxnPWUuZGVzdHJveTtlLmRlc3Ryb3k9dm9pZCAwO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnKXRyeXtnKCl9Y2F0Y2goayl7aWYobnVsbD09PWYpdGhyb3cgRXJyb3IoeSgzMzApKTtXaShmLGspfX1jPUFqO0FqPVtdO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKz0yKXtlPWNbZF07Zj1jW2QrMV07dHJ5e3ZhciBoPWUuY3JlYXRlO2UuZGVzdHJveT1oKCl9Y2F0Y2goayl7aWYobnVsbD09PWYpdGhyb3cgRXJyb3IoeSgzMzApKTtXaShmLGspfX1mb3IoaD1hLmN1cnJlbnQuZmlyc3RFZmZlY3Q7bnVsbCE9PWg7KWE9aC5uZXh0RWZmZWN0LGgubmV4dEVmZmVjdD1udWxsLGguZmxhZ3MmOCYmKGguc2libGluZz1cbm51bGwsaC5zdGF0ZU5vZGU9bnVsbCksaD1hO1g9YjtpZygpO3JldHVybiEwfWZ1bmN0aW9uIGdrKGEsYixjKXtiPU1pKGMsYik7Yj1QaShhLGIsMSk7QWcoYSxiKTtiPUhnKCk7YT1LaihhLDEpO251bGwhPT1hJiYoJGMoYSwxLGIpLE1qKGEsYikpfVxuZnVuY3Rpb24gV2koYSxiKXtpZigzPT09YS50YWcpZ2soYSxhLGIpO2Vsc2UgZm9yKHZhciBjPWEucmV0dXJuO251bGwhPT1jOyl7aWYoMz09PWMudGFnKXtnayhjLGEsYik7YnJlYWt9ZWxzZSBpZigxPT09Yy50YWcpe3ZhciBkPWMuc3RhdGVOb2RlO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1UaXx8IVRpLmhhcyhkKSkpe2E9TWkoYixhKTt2YXIgZT1TaShjLGEsMSk7QWcoYyxlKTtlPUhnKCk7Yz1LaihjLDEpO2lmKG51bGwhPT1jKSRjKGMsMSxlKSxNaihjLGUpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoZCkpKXRyeXtkLmNvbXBvbmVudERpZENhdGNoKGIsYSl9Y2F0Y2goZil7fWJyZWFrfX1jPWMucmV0dXJufX1cbmZ1bmN0aW9uIFlqKGEsYixjKXt2YXIgZD1hLnBpbmdDYWNoZTtudWxsIT09ZCYmZC5kZWxldGUoYik7Yj1IZygpO2EucGluZ2VkTGFuZXN8PWEuc3VzcGVuZGVkTGFuZXMmYztVPT09YSYmKFcmYyk9PT1jJiYoND09PVZ8fDM9PT1WJiYoVyY2MjkxNDU2MCk9PT1XJiY1MDA+TygpLWpqP1FqKGEsMCk6dWp8PWMpO01qKGEsYil9ZnVuY3Rpb24gbGooYSxiKXt2YXIgYz1hLnN0YXRlTm9kZTtudWxsIT09YyYmYy5kZWxldGUoYik7Yj0wOzA9PT1iJiYoYj1hLm1vZGUsMD09PShiJjIpP2I9MTowPT09KGImNCk/Yj05OT09PWVnKCk/MToyOigwPT09R2omJihHaj10aiksYj1ZYyg2MjkxNDU2MCZ+R2opLDA9PT1iJiYoYj00MTk0MzA0KSkpO2M9SGcoKTthPUtqKGEsYik7bnVsbCE9PWEmJigkYyhhLGIsYyksTWooYSxjKSl9dmFyIGNrO1xuY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWIubGFuZXM7aWYobnVsbCE9PWEpaWYoYS5tZW1vaXplZFByb3BzIT09Yi5wZW5kaW5nUHJvcHN8fE4uY3VycmVudCl1Zz0hMDtlbHNlIGlmKDAhPT0oYyZkKSl1Zz0wIT09KGEuZmxhZ3MmMTYzODQpPyEwOiExO2Vsc2V7dWc9ITE7c3dpdGNoKGIudGFnKXtjYXNlIDM6cmkoYik7c2goKTticmVhaztjYXNlIDU6Z2goYik7YnJlYWs7Y2FzZSAxOkZmKGIudHlwZSkmJkpmKGIpO2JyZWFrO2Nhc2UgNDplaChiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6ZD1iLm1lbW9pemVkUHJvcHMudmFsdWU7dmFyIGU9Yi50eXBlLl9jb250ZXh0O0kobWcsZS5fY3VycmVudFZhbHVlKTtlLl9jdXJyZW50VmFsdWU9ZDticmVhaztjYXNlIDEzOmlmKG51bGwhPT1iLm1lbW9pemVkU3RhdGUpe2lmKDAhPT0oYyZiLmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiB0aShhLGIsYyk7SShQLFAuY3VycmVudCYxKTtiPWhpKGEsYixjKTtyZXR1cm4gbnVsbCE9PVxuYj9iLnNpYmxpbmc6bnVsbH1JKFAsUC5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6ZD0wIT09KGMmYi5jaGlsZExhbmVzKTtpZigwIT09KGEuZmxhZ3MmNjQpKXtpZihkKXJldHVybiBBaShhLGIsYyk7Yi5mbGFnc3w9NjR9ZT1iLm1lbW9pemVkU3RhdGU7bnVsbCE9PWUmJihlLnJlbmRlcmluZz1udWxsLGUudGFpbD1udWxsLGUubGFzdEVmZmVjdD1udWxsKTtJKFAsUC5jdXJyZW50KTtpZihkKWJyZWFrO2Vsc2UgcmV0dXJuIG51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBiLmxhbmVzPTAsbWkoYSxiLGMpfXJldHVybiBoaShhLGIsYyl9ZWxzZSB1Zz0hMTtiLmxhbmVzPTA7c3dpdGNoKGIudGFnKXtjYXNlIDI6ZD1iLnR5cGU7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7YT1iLnBlbmRpbmdQcm9wcztlPUVmKGIsTS5jdXJyZW50KTt0ZyhiLGMpO2U9Q2gobnVsbCxiLGQsYSxlLGMpO2IuZmxhZ3N8PTE7aWYoXCJvYmplY3RcIj09PVxudHlwZW9mIGUmJm51bGwhPT1lJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5yZW5kZXImJnZvaWQgMD09PWUuJCR0eXBlb2Ype2IudGFnPTE7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKEZmKGQpKXt2YXIgZj0hMDtKZihiKX1lbHNlIGY9ITE7Yi5tZW1vaXplZFN0YXRlPW51bGwhPT1lLnN0YXRlJiZ2b2lkIDAhPT1lLnN0YXRlP2Uuc3RhdGU6bnVsbDt4ZyhiKTt2YXIgZz1kLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmR2coYixkLGcsYSk7ZS51cGRhdGVyPUtnO2Iuc3RhdGVOb2RlPWU7ZS5fcmVhY3RJbnRlcm5hbHM9YjtPZyhiLGQsYSxjKTtiPXFpKG51bGwsYixkLCEwLGYsYyl9ZWxzZSBiLnRhZz0wLGZpKG51bGwsYixlLGMpLGI9Yi5jaGlsZDtyZXR1cm4gYjtjYXNlIDE2OmU9Yi5lbGVtZW50VHlwZTthOntudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKTtcbmE9Yi5wZW5kaW5nUHJvcHM7Zj1lLl9pbml0O2U9ZihlLl9wYXlsb2FkKTtiLnR5cGU9ZTtmPWIudGFnPWhrKGUpO2E9bGcoZSxhKTtzd2l0Y2goZil7Y2FzZSAwOmI9bGkobnVsbCxiLGUsYSxjKTticmVhayBhO2Nhc2UgMTpiPXBpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDExOmI9Z2kobnVsbCxiLGUsYSxjKTticmVhayBhO2Nhc2UgMTQ6Yj1paShudWxsLGIsZSxsZyhlLnR5cGUsYSksZCxjKTticmVhayBhfXRocm93IEVycm9yKHkoMzA2LGUsXCJcIikpO31yZXR1cm4gYjtjYXNlIDA6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSksbGkoYSxiLGQsZSxjKTtjYXNlIDE6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSkscGkoYSxiLGQsZSxjKTtjYXNlIDM6cmkoYik7ZD1iLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1hfHxudWxsPT09ZCl0aHJvdyBFcnJvcih5KDI4MikpO1xuZD1iLnBlbmRpbmdQcm9wcztlPWIubWVtb2l6ZWRTdGF0ZTtlPW51bGwhPT1lP2UuZWxlbWVudDpudWxsO3lnKGEsYik7Q2coYixkLG51bGwsYyk7ZD1iLm1lbW9pemVkU3RhdGUuZWxlbWVudDtpZihkPT09ZSlzaCgpLGI9aGkoYSxiLGMpO2Vsc2V7ZT1iLnN0YXRlTm9kZTtpZihmPWUuaHlkcmF0ZSlraD1yZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLGpoPWIsZj1saD0hMDtpZihmKXthPWUubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtpZihudWxsIT1hKWZvcihlPTA7ZTxhLmxlbmd0aDtlKz0yKWY9YVtlXSxmLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWFbZSsxXSx0aC5wdXNoKGYpO2M9WmcoYixudWxsLGQsYyk7Zm9yKGIuY2hpbGQ9YztjOyljLmZsYWdzPWMuZmxhZ3MmLTN8MTAyNCxjPWMuc2libGluZ31lbHNlIGZpKGEsYixkLGMpLHNoKCk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgNTpyZXR1cm4gZ2goYiksbnVsbD09PWEmJlxucGgoYiksZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxmPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpudWxsLGc9ZS5jaGlsZHJlbixuZihkLGUpP2c9bnVsbDpudWxsIT09ZiYmbmYoZCxmKSYmKGIuZmxhZ3N8PTE2KSxvaShhLGIpLGZpKGEsYixnLGMpLGIuY2hpbGQ7Y2FzZSA2OnJldHVybiBudWxsPT09YSYmcGgoYiksbnVsbDtjYXNlIDEzOnJldHVybiB0aShhLGIsYyk7Y2FzZSA0OnJldHVybiBlaChiLGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGQ9Yi5wZW5kaW5nUHJvcHMsbnVsbD09PWE/Yi5jaGlsZD1ZZyhiLG51bGwsZCxjKTpmaShhLGIsZCxjKSxiLmNoaWxkO2Nhc2UgMTE6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSksZ2koYSxiLGQsZSxjKTtjYXNlIDc6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcyxjKSxiLmNoaWxkO2Nhc2UgODpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuYyksYi5jaGlsZDtjYXNlIDEyOnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sYyksYi5jaGlsZDtjYXNlIDEwOmE6e2Q9Yi50eXBlLl9jb250ZXh0O2U9Yi5wZW5kaW5nUHJvcHM7Zz1iLm1lbW9pemVkUHJvcHM7Zj1lLnZhbHVlO3ZhciBoPWIudHlwZS5fY29udGV4dDtJKG1nLGguX2N1cnJlbnRWYWx1ZSk7aC5fY3VycmVudFZhbHVlPWY7aWYobnVsbCE9PWcpaWYoaD1nLnZhbHVlLGY9SGUoaCxmKT8wOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHM/ZC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMoaCxmKToxMDczNzQxODIzKXwwLDA9PT1mKXtpZihnLmNoaWxkcmVuPT09ZS5jaGlsZHJlbiYmIU4uY3VycmVudCl7Yj1oaShhLGIsYyk7YnJlYWsgYX19ZWxzZSBmb3IoaD1iLmNoaWxkLG51bGwhPT1oJiYoaC5yZXR1cm49Yik7bnVsbCE9PWg7KXt2YXIgaz1oLmRlcGVuZGVuY2llcztpZihudWxsIT09ayl7Zz1oLmNoaWxkO2Zvcih2YXIgbD1cbmsuZmlyc3RDb250ZXh0O251bGwhPT1sOyl7aWYobC5jb250ZXh0PT09ZCYmMCE9PShsLm9ic2VydmVkQml0cyZmKSl7MT09PWgudGFnJiYobD16ZygtMSxjJi1jKSxsLnRhZz0yLEFnKGgsbCkpO2gubGFuZXN8PWM7bD1oLmFsdGVybmF0ZTtudWxsIT09bCYmKGwubGFuZXN8PWMpO3NnKGgucmV0dXJuLGMpO2subGFuZXN8PWM7YnJlYWt9bD1sLm5leHR9fWVsc2UgZz0xMD09PWgudGFnP2gudHlwZT09PWIudHlwZT9udWxsOmguY2hpbGQ6aC5jaGlsZDtpZihudWxsIT09ZylnLnJldHVybj1oO2Vsc2UgZm9yKGc9aDtudWxsIT09Zzspe2lmKGc9PT1iKXtnPW51bGw7YnJlYWt9aD1nLnNpYmxpbmc7aWYobnVsbCE9PWgpe2gucmV0dXJuPWcucmV0dXJuO2c9aDticmVha31nPWcucmV0dXJufWg9Z31maShhLGIsZS5jaGlsZHJlbixjKTtiPWIuY2hpbGR9cmV0dXJuIGI7Y2FzZSA5OnJldHVybiBlPWIudHlwZSxmPWIucGVuZGluZ1Byb3BzLGQ9Zi5jaGlsZHJlbix0ZyhiLGMpLGU9dmcoZSxcbmYudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSxkPWQoZSksYi5mbGFnc3w9MSxmaShhLGIsZCxjKSxiLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGU9Yi50eXBlLGY9bGcoZSxiLnBlbmRpbmdQcm9wcyksZj1sZyhlLnR5cGUsZiksaWkoYSxiLGUsZixkLGMpO2Nhc2UgMTU6cmV0dXJuIGtpKGEsYixiLnR5cGUsYi5wZW5kaW5nUHJvcHMsZCxjKTtjYXNlIDE3OnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLG51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpLGIudGFnPTEsRmYoZCk/KGE9ITAsSmYoYikpOmE9ITEsdGcoYixjKSxNZyhiLGQsZSksT2coYixkLGUsYykscWkobnVsbCxiLGQsITAsYSxjKTtjYXNlIDE5OnJldHVybiBBaShhLGIsYyk7Y2FzZSAyMzpyZXR1cm4gbWkoYSxiLGMpO2Nhc2UgMjQ6cmV0dXJuIG1pKGEsYixjKX10aHJvdyBFcnJvcih5KDE1NixiLnRhZykpO1xufTtmdW5jdGlvbiBpayhhLGIsYyxkKXt0aGlzLnRhZz1hO3RoaXMua2V5PWM7dGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbDt0aGlzLmluZGV4PTA7dGhpcy5yZWY9bnVsbDt0aGlzLnBlbmRpbmdQcm9wcz1iO3RoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsO3RoaXMubW9kZT1kO3RoaXMuZmxhZ3M9MDt0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbDt0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wO3RoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gbmgoYSxiLGMsZCl7cmV0dXJuIG5ldyBpayhhLGIsYyxkKX1mdW5jdGlvbiBqaShhKXthPWEucHJvdG90eXBlO3JldHVybiEoIWF8fCFhLmlzUmVhY3RDb21wb25lbnQpfVxuZnVuY3Rpb24gaGsoYSl7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGppKGEpPzE6MDtpZih2b2lkIDAhPT1hJiZudWxsIT09YSl7YT1hLiQkdHlwZW9mO2lmKGE9PT1BYSlyZXR1cm4gMTE7aWYoYT09PURhKXJldHVybiAxNH1yZXR1cm4gMn1cbmZ1bmN0aW9uIFRnKGEsYil7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbD09PWM/KGM9bmgoYS50YWcsYixhLmtleSxhLm1vZGUpLGMuZWxlbWVudFR5cGU9YS5lbGVtZW50VHlwZSxjLnR5cGU9YS50eXBlLGMuc3RhdGVOb2RlPWEuc3RhdGVOb2RlLGMuYWx0ZXJuYXRlPWEsYS5hbHRlcm5hdGU9Yyk6KGMucGVuZGluZ1Byb3BzPWIsYy50eXBlPWEudHlwZSxjLmZsYWdzPTAsYy5uZXh0RWZmZWN0PW51bGwsYy5maXJzdEVmZmVjdD1udWxsLGMubGFzdEVmZmVjdD1udWxsKTtjLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzO2MubGFuZXM9YS5sYW5lcztjLmNoaWxkPWEuY2hpbGQ7Yy5tZW1vaXplZFByb3BzPWEubWVtb2l6ZWRQcm9wcztjLm1lbW9pemVkU3RhdGU9YS5tZW1vaXplZFN0YXRlO2MudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZTtiPWEuZGVwZW5kZW5jaWVzO2MuZGVwZW5kZW5jaWVzPW51bGw9PT1iP251bGw6e2xhbmVzOmIubGFuZXMsZmlyc3RDb250ZXh0OmIuZmlyc3RDb250ZXh0fTtcbmMuc2libGluZz1hLnNpYmxpbmc7Yy5pbmRleD1hLmluZGV4O2MucmVmPWEucmVmO3JldHVybiBjfVxuZnVuY3Rpb24gVmcoYSxiLGMsZCxlLGYpe3ZhciBnPTI7ZD1hO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKWppKGEpJiYoZz0xKTtlbHNlIGlmKFwic3RyaW5nXCI9PT10eXBlb2YgYSlnPTU7ZWxzZSBhOnN3aXRjaChhKXtjYXNlIHVhOnJldHVybiBYZyhjLmNoaWxkcmVuLGUsZixiKTtjYXNlIEhhOmc9ODtlfD0xNjticmVhaztjYXNlIHdhOmc9ODtlfD0xO2JyZWFrO2Nhc2UgeGE6cmV0dXJuIGE9bmgoMTIsYyxiLGV8OCksYS5lbGVtZW50VHlwZT14YSxhLnR5cGU9eGEsYS5sYW5lcz1mLGE7Y2FzZSBCYTpyZXR1cm4gYT1uaCgxMyxjLGIsZSksYS50eXBlPUJhLGEuZWxlbWVudFR5cGU9QmEsYS5sYW5lcz1mLGE7Y2FzZSBDYTpyZXR1cm4gYT1uaCgxOSxjLGIsZSksYS5lbGVtZW50VHlwZT1DYSxhLmxhbmVzPWYsYTtjYXNlIElhOnJldHVybiB2aShjLGUsZixiKTtjYXNlIEphOnJldHVybiBhPW5oKDI0LGMsYixlKSxhLmVsZW1lbnRUeXBlPUphLGEubGFuZXM9ZixhO2RlZmF1bHQ6aWYoXCJvYmplY3RcIj09PVxudHlwZW9mIGEmJm51bGwhPT1hKXN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIHlhOmc9MTA7YnJlYWsgYTtjYXNlIHphOmc9OTticmVhayBhO2Nhc2UgQWE6Zz0xMTticmVhayBhO2Nhc2UgRGE6Zz0xNDticmVhayBhO2Nhc2UgRWE6Zz0xNjtkPW51bGw7YnJlYWsgYTtjYXNlIEZhOmc9MjI7YnJlYWsgYX10aHJvdyBFcnJvcih5KDEzMCxudWxsPT1hP2E6dHlwZW9mIGEsXCJcIikpO31iPW5oKGcsYyxiLGUpO2IuZWxlbWVudFR5cGU9YTtiLnR5cGU9ZDtiLmxhbmVzPWY7cmV0dXJuIGJ9ZnVuY3Rpb24gWGcoYSxiLGMsZCl7YT1uaCg3LGEsZCxiKTthLmxhbmVzPWM7cmV0dXJuIGF9ZnVuY3Rpb24gdmkoYSxiLGMsZCl7YT1uaCgyMyxhLGQsYik7YS5lbGVtZW50VHlwZT1JYTthLmxhbmVzPWM7cmV0dXJuIGF9ZnVuY3Rpb24gVWcoYSxiLGMpe2E9bmgoNixhLG51bGwsYik7YS5sYW5lcz1jO3JldHVybiBhfVxuZnVuY3Rpb24gV2coYSxiLGMpe2I9bmgoNCxudWxsIT09YS5jaGlsZHJlbj9hLmNoaWxkcmVuOltdLGEua2V5LGIpO2IubGFuZXM9YztiLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzphLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246YS5pbXBsZW1lbnRhdGlvbn07cmV0dXJuIGJ9XG5mdW5jdGlvbiBqayhhLGIsYyl7dGhpcy50YWc9Yjt0aGlzLmNvbnRhaW5lckluZm89YTt0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbDt0aGlzLnRpbWVvdXRIYW5kbGU9LTE7dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbDt0aGlzLmh5ZHJhdGU9Yzt0aGlzLmNhbGxiYWNrTm9kZT1udWxsO3RoaXMuY2FsbGJhY2tQcmlvcml0eT0wO3RoaXMuZXZlbnRUaW1lcz1aYygwKTt0aGlzLmV4cGlyYXRpb25UaW1lcz1aYygtMSk7dGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wO3RoaXMuZW50YW5nbGVtZW50cz1aYygwKTt0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9bnVsbH1cbmZ1bmN0aW9uIGtrKGEsYixjKXt2YXIgZD0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6dGEsa2V5Om51bGw9PWQ/bnVsbDpcIlwiK2QsY2hpbGRyZW46YSxjb250YWluZXJJbmZvOmIsaW1wbGVtZW50YXRpb246Y319XG5mdW5jdGlvbiBsayhhLGIsYyxkKXt2YXIgZT1iLmN1cnJlbnQsZj1IZygpLGc9SWcoZSk7YTppZihjKXtjPWMuX3JlYWN0SW50ZXJuYWxzO2I6e2lmKFpiKGMpIT09Y3x8MSE9PWMudGFnKXRocm93IEVycm9yKHkoMTcwKSk7dmFyIGg9Yztkb3tzd2l0Y2goaC50YWcpe2Nhc2UgMzpoPWguc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgYjtjYXNlIDE6aWYoRmYoaC50eXBlKSl7aD1oLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayBifX1oPWgucmV0dXJufXdoaWxlKG51bGwhPT1oKTt0aHJvdyBFcnJvcih5KDE3MSkpO31pZigxPT09Yy50YWcpe3ZhciBrPWMudHlwZTtpZihGZihrKSl7Yz1JZihjLGssaCk7YnJlYWsgYX19Yz1ofWVsc2UgYz1DZjtudWxsPT09Yi5jb250ZXh0P2IuY29udGV4dD1jOmIucGVuZGluZ0NvbnRleHQ9YztiPXpnKGYsZyk7Yi5wYXlsb2FkPXtlbGVtZW50OmF9O2Q9dm9pZCAwPT09ZD9udWxsOmQ7bnVsbCE9PVxuZCYmKGIuY2FsbGJhY2s9ZCk7QWcoZSxiKTtKZyhlLGcsZik7cmV0dXJuIGd9ZnVuY3Rpb24gbWsoYSl7YT1hLmN1cnJlbnQ7aWYoIWEuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGEuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIGEuY2hpbGQuc3RhdGVOb2RlO2RlZmF1bHQ6cmV0dXJuIGEuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBuayhhLGIpe2E9YS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1hJiZudWxsIT09YS5kZWh5ZHJhdGVkKXt2YXIgYz1hLnJldHJ5TGFuZTthLnJldHJ5TGFuZT0wIT09YyYmYzxiP2M6Yn19ZnVuY3Rpb24gb2soYSxiKXtuayhhLGIpOyhhPWEuYWx0ZXJuYXRlKSYmbmsoYSxiKX1mdW5jdGlvbiBwaygpe3JldHVybiBudWxsfVxuZnVuY3Rpb24gcWsoYSxiLGMpe3ZhciBkPW51bGwhPWMmJm51bGwhPWMuaHlkcmF0aW9uT3B0aW9ucyYmYy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzfHxudWxsO2M9bmV3IGprKGEsYixudWxsIT1jJiYhMD09PWMuaHlkcmF0ZSk7Yj1uaCgzLG51bGwsbnVsbCwyPT09Yj83OjE9PT1iPzM6MCk7Yy5jdXJyZW50PWI7Yi5zdGF0ZU5vZGU9Yzt4ZyhiKTthW2ZmXT1jLmN1cnJlbnQ7Y2YoOD09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmEpO2lmKGQpZm9yKGE9MDthPGQubGVuZ3RoO2ErKyl7Yj1kW2FdO3ZhciBlPWIuX2dldFZlcnNpb247ZT1lKGIuX3NvdXJjZSk7bnVsbD09Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhP2MubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1bYixlXTpjLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChiLGUpfXRoaXMuX2ludGVybmFsUm9vdD1jfVxucWsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihhKXtsayhhLHRoaXMuX2ludGVybmFsUm9vdCxudWxsLG51bGwpfTtxay5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2ludGVybmFsUm9vdCxiPWEuY29udGFpbmVySW5mbztsayhudWxsLGEsbnVsbCxmdW5jdGlvbigpe2JbZmZdPW51bGx9KX07ZnVuY3Rpb24gcmsoYSl7cmV0dXJuISghYXx8MSE9PWEubm9kZVR5cGUmJjkhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGUmJig4IT09YS5ub2RlVHlwZXx8XCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgXCIhPT1hLm5vZGVWYWx1ZSkpfVxuZnVuY3Rpb24gc2soYSxiKXtifHwoYj1hPzk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEuZmlyc3RDaGlsZDpudWxsLGI9ISghYnx8MSE9PWIubm9kZVR5cGV8fCFiLmhhc0F0dHJpYnV0ZShcImRhdGEtcmVhY3Ryb290XCIpKSk7aWYoIWIpZm9yKHZhciBjO2M9YS5sYXN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYyk7cmV0dXJuIG5ldyBxayhhLDAsYj97aHlkcmF0ZTohMH06dm9pZCAwKX1cbmZ1bmN0aW9uIHRrKGEsYixjLGQsZSl7dmFyIGY9Yy5fcmVhY3RSb290Q29udGFpbmVyO2lmKGYpe3ZhciBnPWYuX2ludGVybmFsUm9vdDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZSl7dmFyIGg9ZTtlPWZ1bmN0aW9uKCl7dmFyIGE9bWsoZyk7aC5jYWxsKGEpfX1sayhiLGcsYSxlKX1lbHNle2Y9Yy5fcmVhY3RSb290Q29udGFpbmVyPXNrKGMsZCk7Zz1mLl9pbnRlcm5hbFJvb3Q7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBrPWU7ZT1mdW5jdGlvbigpe3ZhciBhPW1rKGcpO2suY2FsbChhKX19WGooZnVuY3Rpb24oKXtsayhiLGcsYSxlKX0pfXJldHVybiBtayhnKX1lYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1IZygpO0pnKGEsNCxiKTtvayhhLDQpfX07ZmM9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKTtKZyhhLDY3MTA4ODY0LGIpO29rKGEsNjcxMDg4NjQpfX07XG5nYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1IZygpLGM9SWcoYSk7SmcoYSxjLGIpO29rKGEsYyl9fTtoYz1mdW5jdGlvbihhLGIpe3JldHVybiBiKCl9O1xueWI9ZnVuY3Rpb24oYSxiLGMpe3N3aXRjaChiKXtjYXNlIFwiaW5wdXRcIjphYihhLGMpO2I9Yy5uYW1lO2lmKFwicmFkaW9cIj09PWMudHlwZSYmbnVsbCE9Yil7Zm9yKGM9YTtjLnBhcmVudE5vZGU7KWM9Yy5wYXJlbnROb2RlO2M9Yy5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbbmFtZT1cIitKU09OLnN0cmluZ2lmeShcIlwiK2IpKyddW3R5cGU9XCJyYWRpb1wiXScpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciBkPWNbYl07aWYoZCE9PWEmJmQuZm9ybT09PWEuZm9ybSl7dmFyIGU9RGIoZCk7aWYoIWUpdGhyb3cgRXJyb3IoeSg5MCkpO1dhKGQpO2FiKGQsZSl9fX1icmVhaztjYXNlIFwidGV4dGFyZWFcIjppYihhLGMpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpiPWMudmFsdWUsbnVsbCE9YiYmZmIoYSwhIWMubXVsdGlwbGUsYiwhMSl9fTtHYj1XajtcbkhiPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9WDtYfD00O3RyeXtyZXR1cm4gZ2coOTgsYS5iaW5kKG51bGwsYixjLGQsZSkpfWZpbmFsbHl7WD1mLDA9PT1YJiYod2ooKSxpZygpKX19O0liPWZ1bmN0aW9uKCl7MD09PShYJjQ5KSYmKFZqKCksT2ooKSl9O0piPWZ1bmN0aW9uKGEsYil7dmFyIGM9WDtYfD0yO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fTtmdW5jdGlvbiB1ayhhLGIpe3ZhciBjPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCFyayhiKSl0aHJvdyBFcnJvcih5KDIwMCkpO3JldHVybiBrayhhLGIsbnVsbCxjKX12YXIgdms9e0V2ZW50czpbQ2IsdWUsRGIsRWIsRmIsT2ose2N1cnJlbnQ6ITF9XX0sd2s9e2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOndjLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOlwiMTcuMC4yXCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwifTtcbnZhciB4az17YnVuZGxlVHlwZTp3ay5idW5kbGVUeXBlLHZlcnNpb246d2sudmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOndrLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6d2sucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihhKXthPWNjKGEpO3JldHVybiBudWxsPT09YT9udWxsOmEuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp3ay5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8XG5wayxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsfTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyl7dmFyIHlrPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztpZigheWsuaXNEaXNhYmxlZCYmeWsuc3VwcG9ydHNGaWJlcil0cnl7TGY9eWsuaW5qZWN0KHhrKSxNZj15a31jYXRjaChhKXt9fWV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9dms7ZXhwb3J0cy5jcmVhdGVQb3J0YWw9dWs7XG5leHBvcnRzLmZpbmRET01Ob2RlPWZ1bmN0aW9uKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoMT09PWEubm9kZVR5cGUpcmV0dXJuIGE7dmFyIGI9YS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09Yil7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEucmVuZGVyKXRocm93IEVycm9yKHkoMTg4KSk7dGhyb3cgRXJyb3IoeSgyNjgsT2JqZWN0LmtleXMoYSkpKTt9YT1jYyhiKTthPW51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGU7cmV0dXJuIGF9O2V4cG9ydHMuZmx1c2hTeW5jPWZ1bmN0aW9uKGEsYil7dmFyIGM9WDtpZigwIT09KGMmNDgpKXJldHVybiBhKGIpO1h8PTE7dHJ5e2lmKGEpcmV0dXJuIGdnKDk5LGEuYmluZChudWxsLGIpKX1maW5hbGx5e1g9YyxpZygpfX07ZXhwb3J0cy5oeWRyYXRlPWZ1bmN0aW9uKGEsYixjKXtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4gdGsobnVsbCxhLGIsITAsYyl9O1xuZXhwb3J0cy5yZW5kZXI9ZnVuY3Rpb24oYSxiLGMpe2lmKCFyayhiKSl0aHJvdyBFcnJvcih5KDIwMCkpO3JldHVybiB0ayhudWxsLGEsYiwhMSxjKX07ZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlPWZ1bmN0aW9uKGEpe2lmKCFyayhhKSl0aHJvdyBFcnJvcih5KDQwKSk7cmV0dXJuIGEuX3JlYWN0Um9vdENvbnRhaW5lcj8oWGooZnVuY3Rpb24oKXt0ayhudWxsLG51bGwsYSwhMSxmdW5jdGlvbigpe2EuX3JlYWN0Um9vdENvbnRhaW5lcj1udWxsO2FbZmZdPW51bGx9KX0pLCEwKTohMX07ZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1XajtleHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbD1mdW5jdGlvbihhLGIpe3JldHVybiB1ayhhLGIsMjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwpfTtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoIXJrKGMpKXRocm93IEVycm9yKHkoMjAwKSk7aWYobnVsbD09YXx8dm9pZCAwPT09YS5fcmVhY3RJbnRlcm5hbHMpdGhyb3cgRXJyb3IoeSgzOCkpO3JldHVybiB0ayhhLGIsYywhMSxkKX07ZXhwb3J0cy52ZXJzaW9uPVwiMTcuMC4yXCI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBlPXJlcXVpcmUoXCJyZWFjdFwiKTtmdW5jdGlvbiBoKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgaz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpoLGw9ZS51c2VTdGF0ZSxtPWUudXNlRWZmZWN0LG49ZS51c2VMYXlvdXRFZmZlY3QscD1lLnVzZURlYnVnVmFsdWU7ZnVuY3Rpb24gcShhLGIpe3ZhciBkPWIoKSxmPWwoe2luc3Q6e3ZhbHVlOmQsZ2V0U25hcHNob3Q6Yn19KSxjPWZbMF0uaW5zdCxnPWZbMV07bihmdW5jdGlvbigpe2MudmFsdWU9ZDtjLmdldFNuYXBzaG90PWI7cihjKSYmZyh7aW5zdDpjfSl9LFthLGQsYl0pO20oZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KTtyZXR1cm4gYShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pfSl9LFthXSk7cChkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHIoYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBkPWIoKTtyZXR1cm4hayhhLGQpfWNhdGNoKGYpe3JldHVybiEwfX1mdW5jdGlvbiB0KGEsYil7cmV0dXJuIGIoKX12YXIgdT1cInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/dDpxO2V4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmU9dm9pZCAwIT09ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT9lLnVzZVN5bmNFeHRlcm5hbFN0b3JlOnU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgaD1yZXF1aXJlKFwicmVhY3RcIiksbj1yZXF1aXJlKFwidXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbVwiKTtmdW5jdGlvbiBwKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgcT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpwLHI9bi51c2VTeW5jRXh0ZXJuYWxTdG9yZSx0PWgudXNlUmVmLHU9aC51c2VFZmZlY3Qsdj1oLnVzZU1lbW8sdz1oLnVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yPWZ1bmN0aW9uKGEsYixlLGwsZyl7dmFyIGM9dChudWxsKTtpZihudWxsPT09Yy5jdXJyZW50KXt2YXIgZj17aGFzVmFsdWU6ITEsdmFsdWU6bnVsbH07Yy5jdXJyZW50PWZ9ZWxzZSBmPWMuY3VycmVudDtjPXYoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe2lmKCFjKXtjPSEwO2Q9YTthPWwoYSk7aWYodm9pZCAwIT09ZyYmZi5oYXNWYWx1ZSl7dmFyIGI9Zi52YWx1ZTtpZihnKGIsYSkpcmV0dXJuIGs9Yn1yZXR1cm4gaz1hfWI9aztpZihxKGQsYSkpcmV0dXJuIGI7dmFyIGU9bChhKTtpZih2b2lkIDAhPT1nJiZnKGIsZSkpcmV0dXJuIGI7ZD1hO3JldHVybiBrPWV9dmFyIGM9ITEsZCxrLG09dm9pZCAwPT09ZT9udWxsOmU7cmV0dXJuW2Z1bmN0aW9uKCl7cmV0dXJuIGEoYigpKX0sbnVsbD09PW0/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIGEobSgpKX1dfSxbYixlLGwsZ10pO3ZhciBkPXIoYSxjWzBdLGNbMV0pO1xudShmdW5jdGlvbigpe2YuaGFzVmFsdWU9ITA7Zi52YWx1ZT1kfSxbZF0pO3coZCk7cmV0dXJuIGR9O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0Jzt2YXIgYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGM9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKTo2MDEwMyxkPWI/U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKTo2MDEwNixlPWI/U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpOjYwMTA3LGY9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIik6NjAxMDgsZz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTo2MDExNCxoPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpOjYwMTA5LGs9Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKTo2MDExMCxsPWI/U3ltYm9sLmZvcihcInJlYWN0LmFzeW5jX21vZGVcIik6NjAxMTEsbT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb25jdXJyZW50X21vZGVcIik6NjAxMTEsbj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTo2MDExMixwPWI/U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpOjYwMTEzLHE9Yj9cblN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpOjYwMTIwLHI9Yj9TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKTo2MDExNSx0PWI/U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik6NjAxMTYsdj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5ibG9ja1wiKTo2MDEyMSx3PWI/U3ltYm9sLmZvcihcInJlYWN0LmZ1bmRhbWVudGFsXCIpOjYwMTE3LHg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucmVzcG9uZGVyXCIpOjYwMTE4LHk9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik6NjAxMTk7XG5mdW5jdGlvbiB6KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciB1PWEuJCR0eXBlb2Y7c3dpdGNoKHUpe2Nhc2UgYzpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBsOmNhc2UgbTpjYXNlIGU6Y2FzZSBnOmNhc2UgZjpjYXNlIHA6cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIG46Y2FzZSB0OmNhc2UgcjpjYXNlIGg6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdX19Y2FzZSBkOnJldHVybiB1fX19ZnVuY3Rpb24gQShhKXtyZXR1cm4geihhKT09PW19ZXhwb3J0cy5Bc3luY01vZGU9bDtleHBvcnRzLkNvbmN1cnJlbnRNb2RlPW07ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aztleHBvcnRzLkNvbnRleHRQcm92aWRlcj1oO2V4cG9ydHMuRWxlbWVudD1jO2V4cG9ydHMuRm9yd2FyZFJlZj1uO2V4cG9ydHMuRnJhZ21lbnQ9ZTtleHBvcnRzLkxhenk9dDtleHBvcnRzLk1lbW89cjtleHBvcnRzLlBvcnRhbD1kO1xuZXhwb3J0cy5Qcm9maWxlcj1nO2V4cG9ydHMuU3RyaWN0TW9kZT1mO2V4cG9ydHMuU3VzcGVuc2U9cDtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBBKGEpfHx6KGEpPT09bH07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPUE7ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWt9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ofTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Y307ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1ufTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1lfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXR9O1xuZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1yfTtleHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZH07ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Z307ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1mfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1wfTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1lfHxhPT09bXx8YT09PWd8fGE9PT1mfHxhPT09cHx8YT09PXF8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09dHx8YS4kJHR5cGVvZj09PXJ8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09a3x8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT13fHxhLiQkdHlwZW9mPT09eHx8YS4kJHR5cGVvZj09PXl8fGEuJCR0eXBlb2Y9PT12KX07ZXhwb3J0cy50eXBlT2Y9ejtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksYz1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGQ9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLGU9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksaz1TeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksbj1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLHE9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksdD1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLHU7dT1TeW1ib2wuZm9yKFwicmVhY3QubW9kdWxlLnJlZmVyZW5jZVwiKTtcbmZ1bmN0aW9uIHYoYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHI9YS4kJHR5cGVvZjtzd2l0Y2gocil7Y2FzZSBiOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGQ6Y2FzZSBmOmNhc2UgZTpjYXNlIG06Y2FzZSBuOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBoOmNhc2UgbDpjYXNlIHE6Y2FzZSBwOmNhc2UgZzpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiByfX1jYXNlIGM6cmV0dXJuIHJ9fX1leHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWc7ZXhwb3J0cy5FbGVtZW50PWI7ZXhwb3J0cy5Gb3J3YXJkUmVmPWw7ZXhwb3J0cy5GcmFnbWVudD1kO2V4cG9ydHMuTGF6eT1xO2V4cG9ydHMuTWVtbz1wO2V4cG9ydHMuUG9ydGFsPWM7ZXhwb3J0cy5Qcm9maWxlcj1mO2V4cG9ydHMuU3RyaWN0TW9kZT1lO2V4cG9ydHMuU3VzcGVuc2U9bTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0PW47ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWh9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1nfTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Yn07ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1sfTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1kfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXF9O2V4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09cH07XG5leHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Y307ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Zn07ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1lfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1tfTtleHBvcnRzLmlzU3VzcGVuc2VMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bn07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZHx8YT09PWZ8fGE9PT1lfHxhPT09bXx8YT09PW58fGE9PT10fHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXF8fGEuJCR0eXBlb2Y9PT1wfHxhLiQkdHlwZW9mPT09Z3x8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1sfHxhLiQkdHlwZW9mPT09dXx8dm9pZCAwIT09YS5nZXRNb2R1bGVJZCk/ITA6ITF9O2V4cG9ydHMudHlwZU9mPXY7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGdsb2JhbCBtb2R1bGUsIGRlZmluZSAqL1xuXG5mdW5jdGlvbiBtYXBFYWNoKG1hcCwgb3BlcmF0aW9uKXtcbiAgdmFyIGtleXMgPSBtYXAua2V5cygpO1xuICB2YXIgbmV4dDtcbiAgd2hpbGUoIShuZXh0ID0ga2V5cy5uZXh0KCkpLmRvbmUpIHtcbiAgICBvcGVyYXRpb24obWFwLmdldChuZXh0LnZhbHVlKSwgbmV4dC52YWx1ZSwgbWFwKTtcbiAgfVxufVxuXG52YXIgTXVsdGltYXAgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciBtYXBDdG9yO1xuICBpZiAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtYXBDdG9yID0gTWFwO1xuXG4gICAgaWYgKCFNYXAucHJvdG90eXBlLmtleXMpIHtcbiAgICAgIE1hcC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIga2V5cyA9IFtdO1xuICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24oaXRlbSwga2V5KSB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gTXVsdGltYXAoaXRlcmFibGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBzZWxmLl9tYXAgPSBtYXBDdG9yO1xuXG4gICAgaWYgKE11bHRpbWFwLk1hcCkge1xuICAgICAgc2VsZi5fbWFwID0gTXVsdGltYXAuTWFwO1xuICAgIH1cblxuICAgIHNlbGYuXyA9IHNlbGYuX21hcCA/IG5ldyBzZWxmLl9tYXAoKSA6IHt9O1xuXG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICBpdGVyYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgc2VsZi5zZXQoaVswXSwgaVsxXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleVxuICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgdmFsdWVzLCB1bmRlZmluZWQgaWYgbm8gc3VjaCBhIGtleTtcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwID8gdGhpcy5fLmdldChrZXkpIDogdGhpcy5fW2tleV07XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbC4uLlxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAga2V5ID0gYXJncy5zaGlmdCgpO1xuXG4gICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICBlbnRyeSA9IFtdO1xuICAgICAgaWYgKHRoaXMuX21hcClcbiAgICAgICAgdGhpcy5fLnNldChrZXksIGVudHJ5KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5fW2tleV0gPSBlbnRyeTtcbiAgICB9XG5cbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlbnRyeSwgYXJncyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB2YWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbnkgdGhpbmcgY2hhbmdlZFxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgaWYgKCF0aGlzLmhhcyhrZXkpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgICAgdGhpcy5fbWFwID8gKHRoaXMuXy5kZWxldGUoa2V5KSkgOiAoZGVsZXRlIHRoaXMuX1trZXldKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZW50cnkgPSB0aGlzLmdldChrZXkpO1xuICAgICAgdmFyIGlkeCA9IGVudHJ5LmluZGV4T2YodmFsKTtcbiAgICAgIGlmIChpZHggIT0gLTEpIHtcbiAgICAgICAgZW50cnkuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleVxuICAgKiBAcGFyYW0ge09iamVjdD19IHZhbFxuICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSBtYXAgY29udGFpbnMgJ2tleScgb3IgJ2tleT0+dmFsJyBwYWlyXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICB2YXIgaGFzS2V5ID0gdGhpcy5fbWFwID8gdGhpcy5fLmhhcyhrZXkpIDogdGhpcy5fLmhhc093blByb3BlcnR5KGtleSk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxIHx8ICFoYXNLZXkpXG4gICAgICByZXR1cm4gaGFzS2V5O1xuXG4gICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KSB8fCBbXTtcbiAgICByZXR1cm4gZW50cnkuaW5kZXhPZih2YWwpICE9IC0xO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge0FycmF5fSBhbGwgdGhlIGtleXMgaW4gdGhlIG1hcFxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbWFwKVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcih0aGlzLl8ua2V5cygpKTtcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoT2JqZWN0LmtleXModGhpcy5fKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge0FycmF5fSBhbGwgdGhlIHZhbHVlcyBpbiB0aGUgbWFwXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2hFbnRyeShmdW5jdGlvbihlbnRyeSkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodmFscywgZW50cnkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcih2YWxzKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5mb3JFYWNoRW50cnkgPSBmdW5jdGlvbihpdGVyKSB7XG4gICAgbWFwRWFjaCh0aGlzLCBpdGVyKTtcbiAgfTtcblxuICBNdWx0aW1hcC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5mb3JFYWNoRW50cnkoZnVuY3Rpb24oZW50cnksIGtleSkge1xuICAgICAgZW50cnkuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIGl0ZXIoaXRlbSwga2V5LCBzZWxmKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG5cbiAgTXVsdGltYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgdGhpcy5fLmNsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuXyA9IHt9O1xuICAgIH1cbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgTXVsdGltYXAucHJvdG90eXBlLFxuICAgIFwic2l6ZVwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB0b3RhbCA9IDA7XG5cbiAgICAgICAgbWFwRWFjaCh0aGlzLCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICAgICAgdG90YWwgKz0gdmFsdWUubGVuZ3RoO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIE11bHRpbWFwLnByb3RvdHlwZSxcbiAgICBcImNvdW50XCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuXy5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHZhciBzYWZhcmlOZXh0O1xuXG4gIHRyeXtcbiAgICBzYWZhcmlOZXh0ID0gbmV3IEZ1bmN0aW9uKCdpdGVyYXRvcicsICdtYWtlSXRlcmF0b3InLCAndmFyIGtleXNBcnJheSA9IFtdOyBmb3IodmFyIGtleSBvZiBpdGVyYXRvcil7a2V5c0FycmF5LnB1c2goa2V5KTt9IHJldHVybiBtYWtlSXRlcmF0b3Ioa2V5c0FycmF5KS5uZXh0OycpO1xuICB9Y2F0Y2goZXJyb3Ipe1xuICAgIC8vIGZvciBvZiBub3QgaW1wbGVtZW50ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlSXRlcmF0b3IoaXRlcmF0b3Ipe1xuICAgIGlmKEFycmF5LmlzQXJyYXkoaXRlcmF0b3IpKXtcbiAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbigpe1xuICAgICAgICAgIHJldHVybiBuZXh0SW5kZXggPCBpdGVyYXRvci5sZW5ndGggP1xuICAgICAgICAgICAge3ZhbHVlOiBpdGVyYXRvcltuZXh0SW5kZXgrK10sIGRvbmU6IGZhbHNlfSA6XG4gICAgICAgICAge2RvbmU6IHRydWV9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9ubHkgYW4gaXNzdWUgaW4gc2FmYXJpXG4gICAgaWYoIWl0ZXJhdG9yLm5leHQgJiYgc2FmYXJpTmV4dCl7XG4gICAgICBpdGVyYXRvci5uZXh0ID0gc2FmYXJpTmV4dChpdGVyYXRvciwgbWFrZUl0ZXJhdG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gTXVsdGltYXA7XG59KSgpO1xuXG5cbmlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpXG4gIG1vZHVsZS5leHBvcnRzID0gTXVsdGltYXA7XG5lbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcbiAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gTXVsdGltYXA7IH0pO1xuIiwgIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwgXHUyNzY0XHVGRTBGXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsICJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCAiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVR9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7aGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHJlcGxhY2UsIHN1YnN0ciwgbWF0Y2h9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXggKHZhbHVlLCBsZW5ndGgsIGNoaWxkcmVuKSB7XG5cdHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuXHRcdC8vIGNvbG9yLWFkanVzdFxuXHRcdGNhc2UgNTEwMzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblx0XHRjYXNlIDU3Mzc6IGNhc2UgNDIwMTogY2FzZSAzMTc3OiBjYXNlIDM0MzM6IGNhc2UgMTY0MTogY2FzZSA0NDU3OiBjYXNlIDI5MjE6XG5cdFx0Ly8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXHRcdGNhc2UgNTU3MjogY2FzZSA2MzU2OiBjYXNlIDU4NDQ6IGNhc2UgMzE5MTogY2FzZSA2NjQ1OiBjYXNlIDMwMDU6XG5cdFx0Ly8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cdFx0Y2FzZSA2MzkxOiBjYXNlIDU4Nzk6IGNhc2UgNTYyMzogY2FzZSA2MTM1OiBjYXNlIDQ1OTk6IGNhc2UgNDg1NTpcblx0XHQvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXHRcdGNhc2UgNDIxNTogY2FzZSA2Mzg5OiBjYXNlIDUxMDk6IGNhc2UgNTM2NTogY2FzZSA1NjIxOiBjYXNlIDM4Mjk6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIHRhYi1zaXplXG5cdFx0Y2FzZSA0Nzg5OlxuXHRcdFx0cmV0dXJuIE1PWiArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cdFx0Y2FzZSA1MzQ5OiBjYXNlIDQyNDY6IGNhc2UgNDgxMDogY2FzZSA2OTY4OiBjYXNlIDI3NTY6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIHdyaXRpbmctbW9kZVxuXHRcdGNhc2UgNTkzNjpcblx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcblx0XHRcdFx0Ly8gdmVydGljYWwtbChyKVxuXHRcdFx0XHRjYXNlIDExNDpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyB2ZXJ0aWNhbC1yKGwpXG5cdFx0XHRcdGNhc2UgMTA4OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlXG5cdFx0XHRcdC8vIGhvcml6b250YWwoLSl0YlxuXHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlXG5cdFx0XHRcdC8vIGRlZmF1bHQ6IGZhbGx0aHJvdWdoIHRvIGJlbG93XG5cdFx0XHR9XG5cdFx0Ly8gZmxleCwgZmxleC1kaXJlY3Rpb24sIHNjcm9sbC1zbmFwLXR5cGUsIHdyaXRpbmctbW9kZVxuXHRcdGNhc2UgNjgyODogY2FzZSA0MjY4OiBjYXNlIDI5MDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBvcmRlclxuXHRcdGNhc2UgNjE2NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBhbGlnbi1pdGVtc1xuXHRcdGNhc2UgNTE4Nzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLXNlbGZcblx0XHRjYXNlIDU0NDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi9nLCAnJykgKyAoIW1hdGNoKHZhbHVlLCAvZmxleC18YmFzZWxpbmUvKSA/IE1TICsgJ2dyaWQtcm93LScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvZywgJycpIDogJycpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1jb250ZW50XG5cdFx0Y2FzZSA0Njc1OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvZywgJycpICsgdmFsdWVcblx0XHQvLyBmbGV4LXNocmlua1xuXHRcdGNhc2UgNTU0ODpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWVcblx0XHQvLyBmbGV4LWJhc2lzXG5cdFx0Y2FzZSA1MjkyOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1ncm93XG5cdFx0Y2FzZSA2MDYwOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWVcblx0XHQvLyB0cmFuc2l0aW9uXG5cdFx0Y2FzZSA0NTU0OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZVxuXHRcdC8vIGN1cnNvclxuXHRcdGNhc2UgNjE4Nzpcblx0XHRcdHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlXG5cdFx0Ly8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXHRcdGNhc2UgNTQ5NTogY2FzZSAzOTU5OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKVxuXHRcdC8vIGp1c3RpZnktY29udGVudFxuXHRcdGNhc2UgNDk2ODpcblx0XHRcdHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGp1c3RpZnktc2VsZlxuXHRcdGNhc2UgNDIwMDpcblx0XHRcdGlmICghbWF0Y2godmFsdWUsIC9mbGV4LXxiYXNlbGluZS8pKSByZXR1cm4gTVMgKyAnZ3JpZC1jb2x1bW4tYWxpZ24nICsgc3Vic3RyKHZhbHVlLCBsZW5ndGgpICsgdmFsdWVcblx0XHRcdGJyZWFrXG5cdFx0Ly8gZ3JpZC10ZW1wbGF0ZS0oY29sdW1uc3xyb3dzKVxuXHRcdGNhc2UgMjU5MjogY2FzZSAzMzYwOlxuXHRcdFx0cmV0dXJuIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3RlbXBsYXRlLScsICcnKSArIHZhbHVlXG5cdFx0Ly8gZ3JpZC0ocm93fGNvbHVtbiktc3RhcnRcblx0XHRjYXNlIDQzODQ6IGNhc2UgMzYxNjpcblx0XHRcdGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgeyByZXR1cm4gbGVuZ3RoID0gaW5kZXgsIG1hdGNoKGVsZW1lbnQucHJvcHMsIC9ncmlkLVxcdystZW5kLykgfSkpIHtcblx0XHRcdFx0cmV0dXJuIH5pbmRleG9mKHZhbHVlICsgKGNoaWxkcmVuID0gY2hpbGRyZW5bbGVuZ3RoXS52YWx1ZSksICdzcGFuJykgPyB2YWx1ZSA6IChNUyArIHJlcGxhY2UodmFsdWUsICctc3RhcnQnLCAnJykgKyB2YWx1ZSArIE1TICsgJ2dyaWQtcm93LXNwYW46JyArICh+aW5kZXhvZihjaGlsZHJlbiwgJ3NwYW4nKSA/IG1hdGNoKGNoaWxkcmVuLCAvXFxkKy8pIDogK21hdGNoKGNoaWxkcmVuLCAvXFxkKy8pIC0gK21hdGNoKHZhbHVlLCAvXFxkKy8pKSArICc7Jylcblx0XHRcdH1cblx0XHRcdHJldHVybiBNUyArIHJlcGxhY2UodmFsdWUsICctc3RhcnQnLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGdyaWQtKHJvd3xjb2x1bW4pLWVuZFxuXHRcdGNhc2UgNDg5NjogY2FzZSA0MTI4OlxuXHRcdFx0cmV0dXJuIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBtYXRjaChlbGVtZW50LnByb3BzLCAvZ3JpZC1cXHcrLXN0YXJ0LykgfSkpID8gdmFsdWUgOiBNUyArIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgJy1lbmQnLCAnLXNwYW4nKSwgJ3NwYW4gJywgJycpICsgdmFsdWVcblx0XHQvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXHRcdGNhc2UgNDA5NTogY2FzZSAzNTgzOiBjYXNlIDQwNjg6IGNhc2UgMjUzMjpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlXG5cdFx0Ly8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblx0XHRjYXNlIDgxMTY6IGNhc2UgNzA1OTogY2FzZSA1NzUzOiBjYXNlIDU1MzU6XG5cdFx0Y2FzZSA1NDQ1OiBjYXNlIDU3MDE6IGNhc2UgNDkzMzogY2FzZSA0Njc3OlxuXHRcdGNhc2UgNTUzMzogY2FzZSA1Nzg5OiBjYXNlIDUwMjE6IGNhc2UgNDc2NTpcblx0XHRcdC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcblx0XHRcdGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuXHRcdFx0XHRcdC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcblx0XHRcdFx0XHRjYXNlIDEwOTpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSlcblx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWVcblx0XHRcdFx0XHQvLyAocyl0cmV0Y2hcblx0XHRcdFx0XHRjYXNlIDExNTpcblx0XHRcdFx0XHRcdHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgsIGNoaWxkcmVuKSArIHZhbHVlIDogdmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHQvLyBncmlkLShjb2x1bW58cm93KVxuXHRcdGNhc2UgNTE1MjogY2FzZSA1OTIwOlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis/KTooXFxkKykoXFxzKlxcL1xccyooc3Bhbik/XFxzKihcXGQrKSk/KC4qKS8sIGZ1bmN0aW9uIChfLCBhLCBiLCBjLCBkLCBlLCBmKSB7IHJldHVybiAoTVMgKyBhICsgJzonICsgYiArIGYpICsgKGMgPyAoTVMgKyBhICsgJy1zcGFuOicgKyAoZCA/IGUgOiArZSAtICtiKSkgKyBmIDogJycpICsgdmFsdWUgfSlcblx0XHQvLyBwb3NpdGlvbjogc3RpY2t5XG5cdFx0Y2FzZSA0OTQ5OlxuXHRcdFx0Ly8gc3RpY2soeSk/XG5cdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA2KSA9PT0gMTIxKVxuXHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWVcblx0XHRcdGJyZWFrXG5cdFx0Ly8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXh8Z3JpZHxpbmxpbmUtZ3JpZClcblx0XHRjYXNlIDY0NDQ6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gMTggOiAxMSkpIHtcblx0XHRcdFx0Ly8gKGlubGluZS0pP2ZsZSh4KVxuXHRcdFx0XHRjYXNlIDEyMDpcblx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteO1xccyFdKykoO3woXFxzKyk/IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlXG5cdFx0XHRcdC8vIChpbmxpbmUtKT9ncmkoZClcblx0XHRcdFx0Y2FzZSAxMDA6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgTVMpICsgdmFsdWVcblx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gc2Nyb2xsLW1hcmdpbiwgc2Nyb2xsLW1hcmdpbi0odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KVxuXHRcdGNhc2UgNTcxOTogY2FzZSAyNjQ3OiBjYXNlIDIxMzU6IGNhc2UgMzkyNzogY2FzZSAyMzkxOlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICdzY3JvbGwtJywgJ3Njcm9sbC1zbmFwLScpICsgdmFsdWVcblx0fVxuXG5cdHJldHVybiB2YWx1ZVxufVxuIiwgImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsICJleHBvcnQgKiBmcm9tICcuL3NyYy9FbnVtLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvVXRpbGl0eS5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1BhcnNlci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1ByZWZpeGVyLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvVG9rZW5pemVyLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvU2VyaWFsaXplci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL01pZGRsZXdhcmUuanMnXG4iLCAidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lIGZsb3cgZG9lc24ndCBpbmNsdWRlIGFsbCBub24tcHJpbWl0aXZlIHR5cGVzIGFzIGFsbG93ZWQgZm9yIHdlYWttYXBzXG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyB3ZWFrTWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgeyBtZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnO1xuaW1wb3J0IHsgZGVhbGxvYywgYWxsb2MsIG5leHQsIHRva2VuLCBmcm9tLCBwZWVrLCBkZWxpbWl0LCBzbGljZSwgcG9zaXRpb24sIFJVTEVTRVQsIGNvbWJpbmUsIG1hdGNoLCBzZXJpYWxpemUsIGNvcHksIHJlcGxhY2UsIFdFQktJVCwgTU9aLCBNUywgS0VZRlJBTUVTLCBERUNMQVJBVElPTiwgaGFzaCwgY2hhcmF0LCBzdHJsZW4sIGluZGV4b2YsIHN0cmluZ2lmeSwgQ09NTUVOVCwgcnVsZXNoZWV0LCBtaWRkbGV3YXJlLCBjb21waWxlIH0gZnJvbSAnc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcgPSBmdW5jdGlvbiBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcoYmVnaW4sIHBvaW50cywgaW5kZXgpIHtcbiAgdmFyIHByZXZpb3VzID0gMDtcbiAgdmFyIGNoYXJhY3RlciA9IDA7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBwcmV2aW91cyA9IGNoYXJhY3RlcjtcbiAgICBjaGFyYWN0ZXIgPSBwZWVrKCk7IC8vICZcXGZcblxuICAgIGlmIChwcmV2aW91cyA9PT0gMzggJiYgY2hhcmFjdGVyID09PSAxMikge1xuICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZShiZWdpbiwgcG9zaXRpb24pO1xufTtcblxudmFyIHRvUnVsZXMgPSBmdW5jdGlvbiB0b1J1bGVzKHBhcnNlZCwgcG9pbnRzKSB7XG4gIC8vIHByZXRlbmQgd2UndmUgc3RhcnRlZCB3aXRoIGEgY29tbWFcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjaGFyYWN0ZXIgPSA0NDtcblxuICBkbyB7XG4gICAgc3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIC8vICZcXGZcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gMzggJiYgcGVlaygpID09PSAxMikge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm90IDEwMCUgY29ycmVjdCwgd2UgZG9uJ3QgYWNjb3VudCBmb3IgbGl0ZXJhbCBzZXF1ZW5jZXMgaGVyZSAtIGxpa2UgZm9yIGV4YW1wbGUgcXVvdGVkIHN0cmluZ3NcbiAgICAgICAgICAvLyBzdHlsaXMgaW5zZXJ0cyBcXGYgYWZ0ZXIgJiB0byBrbm93IHdoZW4gJiB3aGVyZSBpdCBzaG91bGQgcmVwbGFjZSB0aGlzIHNlcXVlbmNlIHdpdGggdGhlIGNvbnRleHQgc2VsZWN0b3JcbiAgICAgICAgICAvLyBhbmQgd2hlbiBpdCBzaG91bGQganVzdCBjb25jYXRlbmF0ZSB0aGUgb3V0ZXIgYW5kIGlubmVyIHNlbGVjdG9yc1xuICAgICAgICAgIC8vIGl0J3MgdmVyeSB1bmxpa2VseSBmb3IgdGhpcyBzZXF1ZW5jZSB0byBhY3R1YWxseSBhcHBlYXIgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgc28gd2UganVzdCBsZXZlcmFnZSB0aGlzIGZhY3QgaGVyZVxuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmcocG9zaXRpb24gLSAxLCBwb2ludHMsIGluZGV4KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBkZWxpbWl0KGNoYXJhY3Rlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIC8vIGNvbW1hXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDQ0KSB7XG4gICAgICAgICAgLy8gY29sb25cbiAgICAgICAgICBwYXJzZWRbKytpbmRleF0gPSBwZWVrKCkgPT09IDU4ID8gJyZcXGYnIDogJyc7XG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IHBhcnNlZFtpbmRleF0ubGVuZ3RoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZnJvbShjaGFyYWN0ZXIpO1xuICAgIH1cbiAgfSB3aGlsZSAoY2hhcmFjdGVyID0gbmV4dCgpKTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxudmFyIGdldFJ1bGVzID0gZnVuY3Rpb24gZ2V0UnVsZXModmFsdWUsIHBvaW50cykge1xuICByZXR1cm4gZGVhbGxvYyh0b1J1bGVzKGFsbG9jKHZhbHVlKSwgcG9pbnRzKSk7XG59OyAvLyBXZWFrU2V0IHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIGJ1dCBvbmx5IFdlYWtNYXAgaXMgc3VwcG9ydGVkIGluIElFMTFcblxuXG52YXIgZml4ZWRFbGVtZW50cyA9IC8qICNfX1BVUkVfXyAqL25ldyBXZWFrTWFwKCk7XG52YXIgY29tcGF0ID0gZnVuY3Rpb24gY29tcGF0KGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8ICFlbGVtZW50LnBhcmVudCB8fCAvLyBwb3NpdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBjb250YWlucyBwc2V1ZG9cbiAgLy8gbmVnYXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgaGFzIGJlZW4gYWxyZWFkeSBwcmVmaXhlZFxuICBlbGVtZW50Lmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlLFxuICAgICAgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gIHZhciBpc0ltcGxpY2l0UnVsZSA9IGVsZW1lbnQuY29sdW1uID09PSBwYXJlbnQuY29sdW1uICYmIGVsZW1lbnQubGluZSA9PT0gcGFyZW50LmxpbmU7XG5cbiAgd2hpbGUgKHBhcmVudC50eXBlICE9PSAncnVsZScpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmICghcGFyZW50KSByZXR1cm47XG4gIH0gLy8gc2hvcnQtY2lyY3VpdCBmb3IgdGhlIHNpbXBsZXN0IGNhc2VcblxuXG4gIGlmIChlbGVtZW50LnByb3BzLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZS5jaGFyQ29kZUF0KDApICE9PSA1OFxuICAvKiBjb2xvbiAqL1xuICAmJiAhZml4ZWRFbGVtZW50cy5nZXQocGFyZW50KSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBpZiB0aGlzIGlzIGFuIGltcGxpY2l0bHkgaW5zZXJ0ZWQgcnVsZSAodGhlIG9uZSBlYWdlcmx5IGluc2VydGVkIGF0IHRoZSBlYWNoIG5ldyBuZXN0ZWQgbGV2ZWwpXG4gIC8vIHRoZW4gdGhlIHByb3BzIGhhcyBhbHJlYWR5IGJlZW4gbWFuaXB1bGF0ZWQgYmVmb3JlaGFuZCBhcyB0aGV5IHRoYXQgYXJyYXkgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIGl0cyBcInJ1bGUgcGFyZW50XCJcblxuXG4gIGlmIChpc0ltcGxpY2l0UnVsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpeGVkRWxlbWVudHMuc2V0KGVsZW1lbnQsIHRydWUpO1xuICB2YXIgcG9pbnRzID0gW107XG4gIHZhciBydWxlcyA9IGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpO1xuICB2YXIgcGFyZW50UnVsZXMgPSBwYXJlbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcmVudFJ1bGVzLmxlbmd0aDsgaisrLCBrKyspIHtcbiAgICAgIGVsZW1lbnQucHJvcHNba10gPSBwb2ludHNbaV0gPyBydWxlc1tpXS5yZXBsYWNlKC8mXFxmL2csIHBhcmVudFJ1bGVzW2pdKSA6IHBhcmVudFJ1bGVzW2pdICsgXCIgXCIgKyBydWxlc1tpXTtcbiAgICB9XG4gIH1cbn07XG52YXIgcmVtb3ZlTGFiZWwgPSBmdW5jdGlvbiByZW1vdmVMYWJlbChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgPT09ICdkZWNsJykge1xuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIC8vIGNoYXJjb2RlIGZvciBsXG4gICAgdmFsdWUuY2hhckNvZGVBdCgwKSA9PT0gMTA4ICYmIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgdmFsdWUuY2hhckNvZGVBdCgyKSA9PT0gOTgpIHtcbiAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICAgICAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxufTtcbnZhciBpZ25vcmVGbGFnID0gJ2Vtb3Rpb24tZGlzYWJsZS1zZXJ2ZXItcmVuZGVyaW5nLXVuc2FmZS1zZWxlY3Rvci13YXJuaW5nLXBsZWFzZS1kby1ub3QtdXNlLXRoaXMtdGhlLXdhcm5pbmctZXhpc3RzLWZvci1hLXJlYXNvbic7XG5cbnZhciBpc0lnbm9yaW5nQ29tbWVudCA9IGZ1bmN0aW9uIGlzSWdub3JpbmdDb21tZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gJ2NvbW0nICYmIGVsZW1lbnQuY2hpbGRyZW4uaW5kZXhPZihpZ25vcmVGbGFnKSA+IC0xO1xufTtcblxudmFyIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtID0gZnVuY3Rpb24gY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0oY2FjaGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4pIHtcbiAgICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgY2FjaGUuY29tcGF0KSByZXR1cm47XG4gICAgdmFyIHVuc2FmZVBzZXVkb0NsYXNzZXMgPSBlbGVtZW50LnZhbHVlLm1hdGNoKC8oOmZpcnN0fDpudGh8Om50aC1sYXN0KS1jaGlsZC9nKTtcblxuICAgIGlmICh1bnNhZmVQc2V1ZG9DbGFzc2VzKSB7XG4gICAgICB2YXIgaXNOZXN0ZWQgPSAhIWVsZW1lbnQucGFyZW50OyAvLyBpbiBuZXN0ZWQgcnVsZXMgY29tbWVudHMgYmVjb21lIGNoaWxkcmVuIG9mIHRoZSBcImF1dG8taW5zZXJ0ZWRcIiBydWxlIGFuZCB0aGF0J3MgYWx3YXlzIHRoZSBgZWxlbWVudC5wYXJlbnRgXG4gICAgICAvL1xuICAgICAgLy8gY29uc2lkZXJpbmcgdGhpcyBpbnB1dDpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgLmIgLyogY29tbSAqLyB7fVxuICAgICAgLy8gICBjb2xvcjogaG90cGluaztcbiAgICAgIC8vIH1cbiAgICAgIC8vIHdlIGdldCBvdXRwdXQgY29ycmVzcG9uZGluZyB0byB0aGlzOlxuICAgICAgLy8gLmEge1xuICAgICAgLy8gICAmIHtcbiAgICAgIC8vICAgICAvKiBjb21tICovXG4gICAgICAvLyAgICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgLmIge31cbiAgICAgIC8vIH1cblxuICAgICAgdmFyIGNvbW1lbnRDb250YWluZXIgPSBpc05lc3RlZCA/IGVsZW1lbnQucGFyZW50LmNoaWxkcmVuIDogLy8gZ2xvYmFsIHJ1bGUgYXQgdGhlIHJvb3QgbGV2ZWxcbiAgICAgIGNoaWxkcmVuO1xuXG4gICAgICBmb3IgKHZhciBpID0gY29tbWVudENvbnRhaW5lci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgbm9kZSA9IGNvbW1lbnRDb250YWluZXJbaV07XG5cbiAgICAgICAgaWYgKG5vZGUubGluZSA8IGVsZW1lbnQubGluZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIGl0IGlzIHF1aXRlIHdlaXJkIGJ1dCBjb21tZW50cyBhcmUgKnVzdWFsbHkqIHB1dCBhdCBgY29sdW1uOiBlbGVtZW50LmNvbHVtbiAtIDFgXG4gICAgICAgIC8vIHNvIHdlIHNlZWsgKmZyb20gdGhlIGVuZCogZm9yIHRoZSBub2RlIHRoYXQgaXMgZWFybGllciB0aGFuIHRoZSBydWxlJ3MgYGVsZW1lbnRgIGFuZCBjaGVjayB0aGF0XG4gICAgICAgIC8vIHRoaXMgd2lsbCBhbHNvIG1hdGNoIGlucHV0cyBsaWtlIHRoaXM6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAvKiBjb21tICovXG4gICAgICAgIC8vICAgLmIge31cbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICAvLyBidXQgdGhhdCBpcyBmaW5lXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGl0IHdvdWxkIGJlIHRoZSBlYXNpZXN0IHRvIGNoYW5nZSB0aGUgcGxhY2VtZW50IG9mIHRoZSBjb21tZW50IHRvIGJlIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgcnVsZTpcbiAgICAgICAgLy8gLmEge1xuICAgICAgICAvLyAgIC5iIHsgLyogY29tbSAqLyB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gd2l0aCBzdWNoIGlucHV0cyB3ZSB3b3VsZG4ndCBoYXZlIHRvIHNlYXJjaCBmb3IgdGhlIGNvbW1lbnQgYXQgYWxsXG4gICAgICAgIC8vIFRPRE86IGNvbnNpZGVyIGNoYW5naW5nIHRoaXMgY29tbWVudCBwbGFjZW1lbnQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxuXG5cbiAgICAgICAgaWYgKG5vZGUuY29sdW1uIDwgZWxlbWVudC5jb2x1bW4pIHtcbiAgICAgICAgICBpZiAoaXNJZ25vcmluZ0NvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1bnNhZmVQc2V1ZG9DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKHVuc2FmZVBzZXVkb0NsYXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgcHNldWRvIGNsYXNzIFxcXCJcIiArIHVuc2FmZVBzZXVkb0NsYXNzICsgXCJcXFwiIGlzIHBvdGVudGlhbGx5IHVuc2FmZSB3aGVuIGRvaW5nIHNlcnZlci1zaWRlIHJlbmRlcmluZy4gVHJ5IGNoYW5naW5nIGl0IHRvIFxcXCJcIiArIHVuc2FmZVBzZXVkb0NsYXNzLnNwbGl0KCctY2hpbGQnKVswXSArIFwiLW9mLXR5cGVcXFwiLlwiKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBpc0ltcG9ydFJ1bGUgPSBmdW5jdGlvbiBpc0ltcG9ydFJ1bGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMSkgPT09IDEwNSAmJiBlbGVtZW50LnR5cGUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7XG59O1xuXG52YXIgaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzID0gZnVuY3Rpb24gaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzKGluZGV4LCBjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmICghaXNJbXBvcnRSdWxlKGNoaWxkcmVuW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTsgLy8gdXNlIHRoaXMgdG8gcmVtb3ZlIGluY29ycmVjdCBlbGVtZW50cyBmcm9tIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuLy8gc28gdGhleSBkb24ndCBnZXQgaGFuZGVkIHRvIHRoZSBgc2hlZXRgIChvciBhbnl0aGluZyBlbHNlKVxuLy8gYXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGFkZGl0aW9uYWwgbG9ncyB3aGljaCBpbiB0dXJuIGNvdWxkIGJlIG92ZXJoZWxtaW5nIHRvIHRoZSB1c2VyXG5cblxudmFyIG51bGxpZnlFbGVtZW50ID0gZnVuY3Rpb24gbnVsbGlmeUVsZW1lbnQoZWxlbWVudCkge1xuICBlbGVtZW50LnR5cGUgPSAnJztcbiAgZWxlbWVudC52YWx1ZSA9ICcnO1xuICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gIGVsZW1lbnQuY2hpbGRyZW4gPSAnJztcbiAgZWxlbWVudC5wcm9wcyA9ICcnO1xufTtcblxudmFyIGluY29ycmVjdEltcG9ydEFsYXJtID0gZnVuY3Rpb24gaW5jb3JyZWN0SW1wb3J0QWxhcm0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gIGlmICghaXNJbXBvcnRSdWxlKGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQucGFyZW50KSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBuZXN0ZWQgaW5zaWRlIG90aGVyIHJ1bGVzLiBQbGVhc2UgbW92ZSBpdCB0byB0aGUgdG9wIGxldmVsIGFuZCBwdXQgaXQgYmVmb3JlIHJlZ3VsYXIgcnVsZXMuIEtlZXAgaW4gbWluZCB0aGF0IHRoZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gZ2xvYmFsIHN0eWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH0gZWxzZSBpZiAoaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzKGluZGV4LCBjaGlsZHJlbikpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiYEBpbXBvcnRgIHJ1bGVzIGNhbid0IGJlIGFmdGVyIG90aGVyIHJ1bGVzLiBQbGVhc2UgcHV0IHlvdXIgYEBpbXBvcnRgIHJ1bGVzIGJlZm9yZSB5b3VyIG90aGVyIHJ1bGVzLlwiKTtcbiAgICBudWxsaWZ5RWxlbWVudChlbGVtZW50KTtcbiAgfVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi9cblxuZnVuY3Rpb24gcHJlZml4KHZhbHVlLCBsZW5ndGgpIHtcbiAgc3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgLy8gY29sb3ItYWRqdXN0XG4gICAgY2FzZSA1MTAzOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbmltYXRpb24sIGFuaW1hdGlvbi0oZGVsYXl8ZGlyZWN0aW9ufGR1cmF0aW9ufGZpbGwtbW9kZXxpdGVyYXRpb24tY291bnR8bmFtZXxwbGF5LXN0YXRlfHRpbWluZy1mdW5jdGlvbilcblxuICAgIGNhc2UgNTczNzpcbiAgICBjYXNlIDQyMDE6XG4gICAgY2FzZSAzMTc3OlxuICAgIGNhc2UgMzQzMzpcbiAgICBjYXNlIDE2NDE6XG4gICAgY2FzZSA0NDU3OlxuICAgIGNhc2UgMjkyMTogLy8gdGV4dC1kZWNvcmF0aW9uLCBmaWx0ZXIsIGNsaXAtcGF0aCwgYmFja2ZhY2UtdmlzaWJpbGl0eSwgY29sdW1uLCBib3gtZGVjb3JhdGlvbi1icmVha1xuXG4gICAgY2FzZSA1NTcyOlxuICAgIGNhc2UgNjM1NjpcbiAgICBjYXNlIDU4NDQ6XG4gICAgY2FzZSAzMTkxOlxuICAgIGNhc2UgNjY0NTpcbiAgICBjYXNlIDMwMDU6IC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXG4gICAgY2FzZSA2MzkxOlxuICAgIGNhc2UgNTg3OTpcbiAgICBjYXNlIDU2MjM6XG4gICAgY2FzZSA2MTM1OlxuICAgIGNhc2UgNDU5OTpcbiAgICBjYXNlIDQ4NTU6IC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cbiAgICBjYXNlIDQyMTU6XG4gICAgY2FzZSA2Mzg5OlxuICAgIGNhc2UgNTEwOTpcbiAgICBjYXNlIDUzNjU6XG4gICAgY2FzZSA1NjIxOlxuICAgIGNhc2UgMzgyOTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3RcblxuICAgIGNhc2UgNTM0OTpcbiAgICBjYXNlIDQyNDY6XG4gICAgY2FzZSA0ODEwOlxuICAgIGNhc2UgNjk2ODpcbiAgICBjYXNlIDI3NTY6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNT1ogKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LCBmbGV4LWRpcmVjdGlvblxuXG4gICAgY2FzZSA2ODI4OlxuICAgIGNhc2UgNDI2ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBvcmRlclxuXG4gICAgY2FzZSA2MTY1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1pdGVtc1xuXG4gICAgY2FzZSA1MTg3OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLXNlbGZcblxuICAgIGNhc2UgNTQ0MzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tY29udGVudFxuXG4gICAgY2FzZSA0Njc1OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1saW5lLXBhY2snICsgcmVwbGFjZSh2YWx1ZSwgL2FsaWduLWNvbnRlbnR8ZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LXNocmlua1xuXG4gICAgY2FzZSA1NTQ4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWJhc2lzXG5cbiAgICBjYXNlIDUyOTI6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1ncm93XG5cbiAgICBjYXNlIDYwNjA6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZTtcbiAgICAvLyB0cmFuc2l0aW9uXG5cbiAgICBjYXNlIDQ1NTQ6XG4gICAgICByZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlO1xuICAgIC8vIGN1cnNvclxuXG4gICAgY2FzZSA2MTg3OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWU7XG4gICAgLy8gYmFja2dyb3VuZCwgYmFja2dyb3VuZC1pbWFnZVxuXG4gICAgY2FzZSA1NDk1OlxuICAgIGNhc2UgMzk1OTpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJyk7XG4gICAgLy8ganVzdGlmeS1jb250ZW50XG5cbiAgICBjYXNlIDQ5Njg6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblxuICAgIGNhc2UgNDA5NTpcbiAgICBjYXNlIDM1ODM6XG4gICAgY2FzZSA0MDY4OlxuICAgIGNhc2UgMjUzMjpcbiAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rKS1pbmxpbmUoLispLywgV0VCS0lUICsgJyQxJDInKSArIHZhbHVlO1xuICAgIC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cbiAgICBjYXNlIDgxMTY6XG4gICAgY2FzZSA3MDU5OlxuICAgIGNhc2UgNTc1MzpcbiAgICBjYXNlIDU1MzU6XG4gICAgY2FzZSA1NDQ1OlxuICAgIGNhc2UgNTcwMTpcbiAgICBjYXNlIDQ5MzM6XG4gICAgY2FzZSA0Njc3OlxuICAgIGNhc2UgNTUzMzpcbiAgICBjYXNlIDU3ODk6XG4gICAgY2FzZSA1MDIxOlxuICAgIGNhc2UgNDc2NTpcbiAgICAgIC8vIHN0cmV0Y2gsIG1heC1jb250ZW50LCBtaW4tY29udGVudCwgZmlsbC1hdmFpbGFibGVcbiAgICAgIGlmIChzdHJsZW4odmFsdWUpIC0gMSAtIGxlbmd0aCA+IDYpIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSkge1xuICAgICAgICAvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgIC8vIC1cbiAgICAgICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpIGJyZWFrO1xuICAgICAgICAvLyAoZilpbGwtYXZhaWxhYmxlLCAoZilpdC1jb250ZW50XG5cbiAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlO1xuICAgICAgICAvLyAocyl0cmV0Y2hcblxuICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICByZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoKSArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICAvLyBwb3NpdGlvbjogc3RpY2t5XG5cbiAgICBjYXNlIDQ5NDk6XG4gICAgICAvLyAocyl0aWNreT9cbiAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpICE9PSAxMTUpIGJyZWFrO1xuICAgIC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4KVxuXG4gICAgY2FzZSA2NDQ0OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIHN0cmxlbih2YWx1ZSkgLSAzIC0gKH5pbmRleG9mKHZhbHVlLCAnIWltcG9ydGFudCcpICYmIDEwKSkpIHtcbiAgICAgICAgLy8gc3RpYyhrKXlcbiAgICAgICAgY2FzZSAxMDc6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlO1xuICAgICAgICAvLyAoaW5saW5lLSk/ZmwoZSl4XG5cbiAgICAgICAgY2FzZSAxMDE6XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjshXSspKDt8IS4rKT8vLCAnJDEnICsgV0VCS0lUICsgKGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gkMycgKyAnJDEnICsgV0VCS0lUICsgJyQyJDMnICsgJyQxJyArIE1TICsgJyQyYm94JDMnKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICAvLyB3cml0aW5nLW1vZGVcblxuICAgIGNhc2UgNTkzNjpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxMSkpIHtcbiAgICAgICAgLy8gdmVydGljYWwtbChyKVxuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gdmVydGljYWwtcihsKVxuXG4gICAgICAgIGNhc2UgMTA4OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGItcmwnKSArIHZhbHVlO1xuICAgICAgICAvLyBob3Jpem9udGFsKC0pdGJcblxuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAnbHInKSArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBwcmVmaXhlciA9IGZ1bmN0aW9uIHByZWZpeGVyKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcbiAgaWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpIGlmICghZWxlbWVudFtcInJldHVyblwiXSkgc3dpdGNoIChlbGVtZW50LnR5cGUpIHtcbiAgICBjYXNlIERFQ0xBUkFUSU9OOlxuICAgICAgZWxlbWVudFtcInJldHVyblwiXSA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgS0VZRlJBTUVTOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgIHZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKVxuICAgICAgfSldLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlIFJVTEVTRVQ6XG4gICAgICBpZiAoZWxlbWVudC5sZW5ndGgpIHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuICAgICAgICAgIC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuICAgICAgICAgIGNhc2UgJzpyZWFkLW9ubHknOlxuICAgICAgICAgIGNhc2UgJzpyZWFkLXdyaXRlJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICAgIC8vIDpwbGFjZWhvbGRlclxuXG4gICAgICAgICAgY2FzZSAnOjpwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV1cbiAgICAgICAgICAgIH0pLCBjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9KTtcbiAgfVxufTtcblxudmFyIGRlZmF1bHRTdHlsaXNQbHVnaW5zID0gW3ByZWZpeGVyXTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBoYXZlIHRvIGNvbmZpZ3VyZSBga2V5YCBmb3IgeW91ciBjYWNoZS4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHVuaXF1ZSAoYW5kIG5vdCBlcXVhbCB0byAnY3NzJykgYXMgaXQncyB1c2VkIGZvciBsaW5raW5nIHN0eWxlcyB0byB5b3VyIGNhY2hlLlxcblwiICsgXCJJZiBtdWx0aXBsZSBjYWNoZXMgc2hhcmUgdGhlIHNhbWUga2V5IHRoZXkgbWlnaHQgXFxcImZpZ2h0XFxcIiBmb3IgZWFjaCBvdGhlcidzIHN0eWxlIGVsZW1lbnRzLlwiKTtcbiAgfVxuXG4gIGlmIChrZXkgPT09ICdjc3MnKSB7XG4gICAgdmFyIHNzclN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25dOm5vdChbZGF0YS1zXSlcIik7IC8vIGdldCBTU1JlZCBzdHlsZXMgb3V0IG9mIHRoZSB3YXkgb2YgUmVhY3QncyBoeWRyYXRpb25cbiAgICAvLyBkb2N1bWVudC5oZWFkIGlzIGEgc2FmZSBwbGFjZSB0byBtb3ZlIHRoZW0gdG8odGhvdWdoIG5vdGUgZG9jdW1lbnQuaGVhZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcGxhY2UgdGhleSB3aWxsIGJlKVxuICAgIC8vIG5vdGUgdGhpcyB2ZXJ5IHZlcnkgaW50ZW50aW9uYWxseSB0YXJnZXRzIGFsbCBzdHlsZSBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZSBrZXkgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCBjcmVhdGluZyBhIGNhY2hlIHdvcmtzIGluc2lkZSBvZiByZW5kZXIgb2YgYSBSZWFjdCBjb21wb25lbnRcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc3NyU3R5bGVzLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGlmICgvW15hLXotXS8udGVzdChrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbW90aW9uIGtleSBtdXN0IG9ubHkgY29udGFpbiBsb3dlciBjYXNlIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIGFuZCAtIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHBhc3NlZFwiKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5zZXJ0ZWQgPSB7fTtcbiAgdmFyIGNvbnRhaW5lcjtcbiAgdmFyIG5vZGVzVG9IeWRyYXRlID0gW107XG5cbiAge1xuICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyIHx8IGRvY3VtZW50LmhlYWQ7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCggLy8gdGhpcyBtZWFucyB3ZSB3aWxsIGlnbm9yZSBlbGVtZW50cyB3aGljaCBkb24ndCBoYXZlIGEgc3BhY2UgaW4gdGhlbSB3aGljaFxuICAgIC8vIG1lYW5zIHRoYXQgdGhlIHN0eWxlIGVsZW1lbnRzIHdlJ3JlIGxvb2tpbmcgYXQgYXJlIG9ubHkgRW1vdGlvbiAxMSBzZXJ2ZXItcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXj1cXFwiXCIgKyBrZXkgKyBcIiBcXFwiXVwiKSwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIG9tbmlwcmVzZW50UGx1Z2lucy5wdXNoKGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKHtcbiAgICAgIGdldCBjb21wYXQoKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5jb21wYXQ7XG4gICAgICB9XG5cbiAgICB9KSwgaW5jb3JyZWN0SW1wb3J0QWxhcm0pO1xuICB9XG5cbiAge1xuICAgIHZhciBjdXJyZW50U2hlZXQ7XG4gICAgdmFyIGZpbmFsaXppbmdQbHVnaW5zID0gW3N0cmluZ2lmeSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQucm9vdCkge1xuICAgICAgICBpZiAoZWxlbWVudFtcInJldHVyblwiXSkge1xuICAgICAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQoZWxlbWVudFtcInJldHVyblwiXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC52YWx1ZSAmJiBlbGVtZW50LnR5cGUgIT09IENPTU1FTlQpIHtcbiAgICAgICAgICAvLyBpbnNlcnQgZW1wdHkgcnVsZSBpbiBub24tcHJvZHVjdGlvbiBlbnZpcm9ubWVudHNcbiAgICAgICAgICAvLyBzbyBAZW1vdGlvbi9qZXN0IGNhbiBncmFiIGBrZXlgIGZyb20gdGhlIChKUylET00gZm9yIGNhY2hlcyB3aXRob3V0IGFueSBydWxlcyBpbnNlcnRlZCB5ZXRcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnQudmFsdWUgKyBcInt9XCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSA6IHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQoc2VsZWN0b3IsIHNlcmlhbGl6ZWQsIHNoZWV0LCBzaG91bGRDYWNoZSkge1xuICAgICAgY3VycmVudFNoZWV0ID0gc2hlZXQ7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNlcmlhbGl6ZWQubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3VycmVudFNoZWV0ID0ge1xuICAgICAgICAgIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0Lmluc2VydChydWxlICsgc2VyaWFsaXplZC5tYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3R5bGlzKHNlbGVjdG9yID8gc2VsZWN0b3IgKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCIgOiBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGNhY2hlID0ge1xuICAgIGtleToga2V5LFxuICAgIHNoZWV0OiBuZXcgU3R5bGVTaGVldCh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICBzcGVlZHk6IG9wdGlvbnMuc3BlZWR5LFxuICAgICAgcHJlcGVuZDogb3B0aW9ucy5wcmVwZW5kLFxuICAgICAgaW5zZXJ0aW9uUG9pbnQ6IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnRcbiAgICB9KSxcbiAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICBpbnNlcnRlZDogaW5zZXJ0ZWQsXG4gICAgcmVnaXN0ZXJlZDoge30sXG4gICAgaW5zZXJ0OiBfaW5zZXJ0XG4gIH07XG4gIGNhY2hlLnNoZWV0Lmh5ZHJhdGUobm9kZXNUb0h5ZHJhdGUpO1xuICByZXR1cm4gY2FjaGU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVDYWNoZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzJDEgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG4vLyB0aGlzIGZpbGUgaXNvbGF0ZXMgdGhpcyBwYWNrYWdlIHRoYXQgaXMgbm90IHRyZWUtc2hha2VhYmxlXG4vLyBhbmQgaWYgdGhpcyBtb2R1bGUgZG9lc24ndCBhY3R1YWxseSBjb250YWluIGFueSBsb2dpYyBvZiBpdHMgb3duXG4vLyB0aGVuIFJvbGx1cCBqdXN0IHVzZSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnIGRpcmVjdGx5IGluIG90aGVyIGNodW5rc1xuXG52YXIgaG9pc3ROb25SZWFjdFN0YXRpY3MgPSAoZnVuY3Rpb24gKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50KSB7XG4gIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyQxKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50KTtcbn0pO1xuXG5leHBvcnQgeyBob2lzdE5vblJlYWN0U3RhdGljcyBhcyBkZWZhdWx0IH07XG4iLCAidmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCAidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IgPSBcIllvdSBoYXZlIGlsbGVnYWwgZXNjYXBlIHNlcXVlbmNlIGluIHlvdXIgdGVtcGxhdGUgbGl0ZXJhbCwgbW9zdCBsaWtlbHkgaW5zaWRlIGNvbnRlbnQncyBwcm9wZXJ0eSB2YWx1ZS5cXG5CZWNhdXNlIHlvdSB3cml0ZSB5b3VyIENTUyBpbnNpZGUgYSBKYXZhU2NyaXB0IHN0cmluZyB5b3UgYWN0dWFsbHkgaGF2ZSB0byBkbyBkb3VibGUgZXNjYXBpbmcsIHNvIGZvciBleGFtcGxlIFxcXCJjb250ZW50OiAnXFxcXDAwZDcnO1xcXCIgc2hvdWxkIGJlY29tZSBcXFwiY29udGVudDogJ1xcXFxcXFxcMDBkNyc7XFxcIi5cXG5Zb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGlzIGhlcmU6XFxuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvVGVtcGxhdGVfbGl0ZXJhbHMjRVMyMDE4X3JldmlzaW9uX29mX2lsbGVnYWxfZXNjYXBlX3NlcXVlbmNlc1wiO1xudmFyIFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SID0gXCJZb3UgaGF2ZSBwYXNzZWQgaW4gZmFsc3kgdmFsdWUgYXMgc3R5bGUgb2JqZWN0J3Mga2V5IChjYW4gaGFwcGVuIHdoZW4gaW4gZXhhbXBsZSB5b3UgcGFzcyB1bmV4cG9ydGVkIGNvbXBvbmVudCBhcyBjb21wdXRlZCBrZXkpLlwiO1xudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBjb250ZW50VmFsdWVQYXR0ZXJuID0gLyh2YXJ8YXR0cnxjb3VudGVycz98dXJsfGVsZW1lbnR8KCgocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWwpKXxjb25pYyktZ3JhZGllbnQpXFwofChuby0pPyhvcGVufGNsb3NlKS1xdW90ZS87XG4gIHZhciBjb250ZW50VmFsdWVzID0gWydub3JtYWwnLCAnbm9uZScsICdpbml0aWFsJywgJ2luaGVyaXQnLCAndW5zZXQnXTtcbiAgdmFyIG9sZFByb2Nlc3NTdHlsZVZhbHVlID0gcHJvY2Vzc1N0eWxlVmFsdWU7XG4gIHZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG4gIHZhciBoeXBoZW5hdGVkQ2FjaGUgPSB7fTtcblxuICBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnY29udGVudCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IGNvbnRlbnRWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmICFjb250ZW50VmFsdWVQYXR0ZXJuLnRlc3QodmFsdWUpICYmICh2YWx1ZS5jaGFyQXQoMCkgIT09IHZhbHVlLmNoYXJBdCh2YWx1ZS5sZW5ndGggLSAxKSB8fCB2YWx1ZS5jaGFyQXQoMCkgIT09ICdcIicgJiYgdmFsdWUuY2hhckF0KDApICE9PSBcIidcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IHNlZW0gdG8gYmUgdXNpbmcgYSB2YWx1ZSBmb3IgJ2NvbnRlbnQnIHdpdGhvdXQgcXVvdGVzLCB0cnkgcmVwbGFjaW5nIGl0IHdpdGggYGNvbnRlbnQ6ICdcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIidgXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm9jZXNzZWQgPSBvbGRQcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKTtcblxuICAgIGlmIChwcm9jZXNzZWQgIT09ICcnICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYga2V5LmluZGV4T2YoJy0nKSAhPT0gLTEgJiYgaHlwaGVuYXRlZENhY2hlW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaHlwaGVuYXRlZENhY2hlW2tleV0gPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihcIlVzaW5nIGtlYmFiLWNhc2UgZm9yIGNzcyBwcm9wZXJ0aWVzIGluIG9iamVjdHMgaXMgbm90IHN1cHBvcnRlZC4gRGlkIHlvdSBtZWFuIFwiICsga2V5LnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoc3RyLCBfY2hhcikge1xuICAgICAgICByZXR1cm4gX2NoYXIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pICsgXCI/XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gIH07XG59XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChpbnRlcnBvbGF0aW9uLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24udG9TdHJpbmcoKSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBpbnRlcnBvbGF0aW9uLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGludGVycG9sYXRpb24uc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGlvbi5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGludGVycG9sYXRpb24ubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBpbnRlcnBvbGF0aW9uLnN0eWxlcyArIFwiO1wiO1xuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3R5bGVzICs9IGludGVycG9sYXRpb24ubWFwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRnVuY3Rpb25zIHRoYXQgYXJlIGludGVycG9sYXRlZCBpbiBjc3MgY2FsbHMgd2lsbCBiZSBzdHJpbmdpZmllZC5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIGhhdmUgYSBjc3MgY2FsbCBiYXNlZCBvbiBwcm9wcywgY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY3NzIGNhbGwgbGlrZSB0aGlzXFxuJyArICdsZXQgZHluYW1pY1N0eWxlID0gKHByb3BzKSA9PiBjc3NgY29sb3I6ICR7cHJvcHMuY29sb3J9YFxcbicgKyAnSXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSB3aXRoIHByb3BzIG9yIGludGVycG9sYXRlZCBpbiBhIHN0eWxlZCBjYWxsIGxpa2UgdGhpc1xcbicgKyBcImxldCBTb21lQ29tcG9uZW50ID0gc3R5bGVkKCdkaXYnKWAke2R5bmFtaWNTdHlsZX1gXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VkID0gaW50ZXJwb2xhdGlvbi5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgIHZhciBmYWtlVmFyTmFtZSA9IFwiYW5pbWF0aW9uXCIgKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgICBtYXRjaGVkLnB1c2goXCJjb25zdCBcIiArIGZha2VWYXJOYW1lICsgXCIgPSBrZXlmcmFtZXNgXCIgKyBwMi5yZXBsYWNlKC9eQGtleWZyYW1lcyBhbmltYXRpb24tXFx3Ky8sICcnKSArIFwiYFwiKTtcbiAgICAgICAgICByZXR1cm4gXCIke1wiICsgZmFrZVZhck5hbWUgKyBcIn1cIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignYGtleWZyYW1lc2Agb3V0cHV0IGdvdCBpbnRlcnBvbGF0ZWQgaW50byBwbGFpbiBzdHJpbmcsIHBsZWFzZSB3cmFwIGl0IHdpdGggYGNzc2AuXFxuXFxuJyArICdJbnN0ZWFkIG9mIGRvaW5nIHRoaXM6XFxuXFxuJyArIFtdLmNvbmNhdChtYXRjaGVkLCBbXCJgXCIgKyByZXBsYWNlZCArIFwiYFwiXSkuam9pbignXFxuJykgKyAnXFxuXFxuWW91IHNob3VsZCB3cmFwIGl0IHdpdGggYGNzc2AgbGlrZSB0aGlzOlxcblxcbicgKyAoXCJjc3NgXCIgKyByZXBsYWNlZCArIFwiYFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH0gLy8gZmluYWxpemUgc3RyaW5nIHZhbHVlcyAocmVndWxhciBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgaW50ZXJwb2xhdGVkIGludG8gY3NzIGNhbGxzKVxuXG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbaW50ZXJwb2xhdGlvbl07XG4gIHJldHVybiBjYWNoZWQgIT09IHVuZGVmaW5lZCA/IGNhY2hlZCA6IGludGVycG9sYXRpb247XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIG9iaikge1xuICAgICAgdmFyIHZhbHVlID0gb2JqW19rZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgcmVnaXN0ZXJlZFt2YWx1ZV0gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX2tleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKF9rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIjtcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgX2tleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyBpbnRlcnBvbGF0ZWQgKyBcIn1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbnZhciBsYWJlbFBhdHRlcm4gPSAvbGFiZWw6XFxzKihbXlxccztcXG57XSspXFxzKig7fCQpL2c7XG52YXIgc291cmNlTWFwUGF0dGVybjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgc291cmNlTWFwUGF0dGVybiA9IC9cXC9cXCojXFxzc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjtcXFMrXFxzK1xcKlxcLy9nO1xufSAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxuXG52YXIgY3Vyc29yO1xudmFyIHNlcmlhbGl6ZVN0eWxlcyA9IGZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RyaW5nc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICB9XG5cbiAgICBzdHlsZXMgKz0gc3RyaW5nc1swXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RyaW5nc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICBzdHlsZXMgKz0gc3RyaW5nc1tpXTtcbiAgICB9XG4gIH1cblxuICB2YXIgc291cmNlTWFwO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgc3R5bGVzID0gc3R5bGVzLnJlcGxhY2Uoc291cmNlTWFwUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICBzb3VyY2VNYXAgPSBtYXRjaDtcbiAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyAvLyAkRmxvd0ZpeE1lIHdlIGtub3cgaXQncyBub3QgbnVsbFxuICAgIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWUgU2VyaWFsaXplZFN0eWxlcyB0eXBlIGRvZXNuJ3QgaGF2ZSB0b1N0cmluZyBwcm9wZXJ0eSAoYW5kIHdlIGRvbid0IHdhbnQgdG8gYWRkIGl0KVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICBtYXA6IHNvdXJjZU1hcCxcbiAgICAgIG5leHQ6IGN1cnNvcixcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59O1xuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBFbW90aW9uQ2FjaGVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DYWNoZUNvbnRleHQnO1xufVxuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIC8vICRGbG93Rml4TWVcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gICAgLy8gdGhlIGNhY2hlIHdpbGwgbmV2ZXIgYmUgbnVsbCBpbiB0aGUgYnJvd3NlclxuICAgIHZhciBjYWNoZSA9IHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG4gICAgcmV0dXJuIGZ1bmMocHJvcHMsIGNhY2hlLCByZWYpO1xuICB9KTtcbn07XG5cbmlmICghaXNCcm93c2VyKSB7XG4gIHdpdGhFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB3aXRoRW1vdGlvbkNhY2hlKGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuXG4gICAgICBpZiAoY2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgLy8geWVzLCB3ZSdyZSBwb3RlbnRpYWxseSBjcmVhdGluZyB0aGlzIG9uIGV2ZXJ5IHJlbmRlclxuICAgICAgICAvLyBpdCBkb2Vzbid0IGFjdHVhbGx5IG1hdHRlciB0aG91Z2ggc2luY2UgaXQncyBvbmx5IG9uIHRoZSBzZXJ2ZXJcbiAgICAgICAgLy8gc28gdGhlcmUgd2lsbCBvbmx5IGV2ZXJ5IGJlIGEgc2luZ2xlIHJlbmRlclxuICAgICAgICAvLyB0aGF0IGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlIGJlY2F1c2Ugb2Ygc3VzcGVuc2UgYW5kIGV0Yy4gYnV0IGZvciBub3csXG4gICAgICAgIC8vIHRoaXMgd29ya3MgYW5kIGkgZG9uJ3Qgd2FudCB0byBvcHRpbWlzZSBmb3IgYSBmdXR1cmUgdGhpbmcgdGhhdCB3ZSBhcmVuJ3Qgc3VyZSBhYm91dFxuICAgICAgICBjYWNoZSA9IGNyZWF0ZUNhY2hlKHtcbiAgICAgICAgICBrZXk6ICdjc3MnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRW1vdGlvbkNhY2hlQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgIHZhbHVlOiBjYWNoZVxuICAgICAgICB9LCBmdW5jKHByb3BzLCBjYWNoZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMocHJvcHMsIGNhY2hlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFRoZW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uVGhlbWVDb250ZXh0Jztcbn1cblxudmFyIHVzZVRoZW1lID0gZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG59O1xuXG52YXIgZ2V0VGhlbWUgPSBmdW5jdGlvbiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSkge1xuICBpZiAodHlwZW9mIHRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIG1lcmdlZFRoZW1lID0gdGhlbWUob3V0ZXJUaGVtZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAobWVyZ2VkVGhlbWUgPT0gbnVsbCB8fCB0eXBlb2YgbWVyZ2VkVGhlbWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobWVyZ2VkVGhlbWUpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdbVGhlbWVQcm92aWRlcl0gUGxlYXNlIHJldHVybiBhbiBvYmplY3QgZnJvbSB5b3VyIHRoZW1lIGZ1bmN0aW9uLCBpLmUuIHRoZW1lPXsoKSA9PiAoe30pfSEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAodGhlbWUgPT0gbnVsbCB8fCB0eXBlb2YgdGhlbWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodGhlbWUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSBtYWtlIHlvdXIgdGhlbWUgcHJvcCBhIHBsYWluIG9iamVjdCcpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG5cbiAgdmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMpKTtcbiAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgdmFyIFdpdGhUaGVtZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKHJlbmRlcik7XG4gIFdpdGhUaGVtZS5kaXNwbGF5TmFtZSA9IFwiV2l0aFRoZW1lKFwiICsgY29tcG9uZW50TmFtZSArIFwiKVwiO1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aFRoZW1lLCBDb21wb25lbnQpO1xufVxuXG52YXIgZ2V0TGFzdFBhcnQgPSBmdW5jdGlvbiBnZXRMYXN0UGFydChmdW5jdGlvbk5hbWUpIHtcbiAgLy8gVGhlIG1hdGNoIG1heSBiZSBzb21ldGhpbmcgbGlrZSAnT2JqZWN0LmNyZWF0ZUVtb3Rpb25Qcm9wcycgb3JcbiAgLy8gJ0xvYWRlci5wcm90b3R5cGUucmVuZGVyJ1xuICB2YXIgcGFydHMgPSBmdW5jdGlvbk5hbWUuc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xufTtcblxudmFyIGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZSA9IGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZShsaW5lKSB7XG4gIC8vIFY4XG4gIHZhciBtYXRjaCA9IC9eXFxzK2F0XFxzKyhbQS1aYS16MC05JC5dKylcXHMvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTsgLy8gU2FmYXJpIC8gRmlyZWZveFxuXG4gIG1hdGNoID0gL14oW0EtWmEtejAtOSQuXSspQC8uZXhlYyhsaW5lKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZ2V0TGFzdFBhcnQobWF0Y2hbMV0pO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxudmFyIGludGVybmFsUmVhY3RGdW5jdGlvbk5hbWVzID0gLyogI19fUFVSRV9fICovbmV3IFNldChbJ3JlbmRlcldpdGhIb29rcycsICdwcm9jZXNzQ2hpbGQnLCAnZmluaXNoQ2xhc3NDb21wb25lbnQnLCAncmVuZGVyVG9TdHJpbmcnXSk7IC8vIFRoZXNlIGlkZW50aWZpZXJzIGNvbWUgZnJvbSBlcnJvciBzdGFja3MsIHNvIHRoZXkgaGF2ZSB0byBiZSB2YWxpZCBKU1xuLy8gaWRlbnRpZmllcnMsIHRodXMgd2Ugb25seSBuZWVkIHRvIHJlcGxhY2Ugd2hhdCBpcyBhIHZhbGlkIGNoYXJhY3RlciBmb3IgSlMsXG4vLyBidXQgbm90IGZvciBDU1MuXG5cbnZhciBzYW5pdGl6ZUlkZW50aWZpZXIgPSBmdW5jdGlvbiBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKC9cXCQvZywgJy0nKTtcbn07XG5cbnZhciBnZXRMYWJlbEZyb21TdGFja1RyYWNlID0gZnVuY3Rpb24gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShzdGFja1RyYWNlKSB7XG4gIGlmICghc3RhY2tUcmFjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdmFyIGxpbmVzID0gc3RhY2tUcmFjZS5zcGxpdCgnXFxuJyk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBmdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZXNbaV0pOyAvLyBUaGUgZmlyc3QgbGluZSBvZiBWOCBzdGFjayB0cmFjZXMgaXMganVzdCBcIkVycm9yXCJcblxuICAgIGlmICghZnVuY3Rpb25OYW1lKSBjb250aW51ZTsgLy8gSWYgd2UgcmVhY2ggb25lIG9mIHRoZXNlLCB3ZSBoYXZlIGdvbmUgdG9vIGZhciBhbmQgc2hvdWxkIHF1aXRcblxuICAgIGlmIChpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcy5oYXMoZnVuY3Rpb25OYW1lKSkgYnJlYWs7IC8vIFRoZSBjb21wb25lbnQgbmFtZSBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIHN0YWNrIHRoYXQgc3RhcnRzIHdpdGggYW5cbiAgICAvLyB1cHBlcmNhc2UgbGV0dGVyXG5cbiAgICBpZiAoL15bQS1aXS8udGVzdChmdW5jdGlvbk5hbWUpKSByZXR1cm4gc2FuaXRpemVJZGVudGlmaWVyKGZ1bmN0aW9uTmFtZSk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxudmFyIHR5cGVQcm9wTmFtZSA9ICdfX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBsYWJlbFByb3BOYW1lID0gJ19fRU1PVElPTl9MQUJFTF9QTEVBU0VfRE9fTk9UX1VTRV9fJztcbnZhciBjcmVhdGVFbW90aW9uUHJvcHMgPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIHByb3BzLmNzcyA9PT0gJ3N0cmluZycgJiYgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBjc3MgZGVjbGFyYXRpb25cbiAgcHJvcHMuY3NzLmluZGV4T2YoJzonKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmdzIGFyZSBub3QgYWxsb3dlZCBhcyBjc3MgcHJvcCB2YWx1ZXMsIHBsZWFzZSB3cmFwIGl0IGluIGEgY3NzIHRlbXBsYXRlIGxpdGVyYWwgZnJvbSAnQGVtb3Rpb24vcmVhY3QnIGxpa2UgdGhpczogY3NzYFwiICsgcHJvcHMuY3NzICsgXCJgXCIpO1xuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gRm9yIHBlcmZvcm1hbmNlLCBvbmx5IGNhbGwgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSBpbiBkZXZlbG9wbWVudCBhbmQgd2hlblxuICAvLyB0aGUgbGFiZWwgaGFzbid0IGFscmVhZHkgYmVlbiBjb21wdXRlZFxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEhcHJvcHMuY3NzICYmICh0eXBlb2YgcHJvcHMuY3NzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcHJvcHMuY3NzLm5hbWUgIT09ICdzdHJpbmcnIHx8IHByb3BzLmNzcy5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpKSB7XG4gICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgaWYgKGxhYmVsKSBuZXdQcm9wc1tsYWJlbFByb3BOYW1lXSA9IGxhYmVsO1xuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNlcmlhbGl6ZWQubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgdmFyIGxhYmVsRnJvbVN0YWNrID0gcHJvcHNbbGFiZWxQcm9wTmFtZV07XG5cbiAgICBpZiAobGFiZWxGcm9tU3RhY2spIHtcbiAgICAgIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3NlcmlhbGl6ZWQsICdsYWJlbDonICsgbGFiZWxGcm9tU3RhY2sgKyAnOyddKTtcbiAgICB9XG4gIH1cblxuICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSAmJiBrZXkgIT09ICdjc3MnICYmIGtleSAhPT0gdHlwZVByb3BOYW1lICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIHx8IGtleSAhPT0gbGFiZWxQcm9wTmFtZSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIG5ld1Byb3BzKSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbi5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ3NzUHJvcEludGVybmFsJztcbn1cblxudmFyIEVtb3Rpb24kMSA9IEVtb3Rpb247XG5cbmV4cG9ydCB7IENhY2hlUHJvdmlkZXIgYXMgQywgRW1vdGlvbiQxIGFzIEUsIFRoZW1lQ29udGV4dCBhcyBULCBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgYXMgXywgVGhlbWVQcm92aWRlciBhcyBhLCB3aXRoVGhlbWUgYXMgYiwgY3JlYXRlRW1vdGlvblByb3BzIGFzIGMsIGhhc093biBhcyBoLCBpc0Jyb3dzZXIgYXMgaSwgdXNlVGhlbWUgYXMgdSwgd2l0aEVtb3Rpb25DYWNoZSBhcyB3IH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNCcm93c2VyJDEgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBhIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCB1IGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGIgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcywgZ2V0UmVnaXN0ZXJlZFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG52YXIgcGtnID0ge1xuXHRuYW1lOiBcIkBlbW90aW9uL3JlYWN0XCIsXG5cdHZlcnNpb246IFwiMTEuMTEuNFwiLFxuXHRtYWluOiBcImRpc3QvZW1vdGlvbi1yZWFjdC5janMuanNcIixcblx0bW9kdWxlOiBcImRpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIixcblx0YnJvd3Nlcjoge1xuXHRcdFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanNcIlxuXHR9LFxuXHRleHBvcnRzOiB7XG5cdFx0XCIuXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3Qud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJpbXBvcnRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5janMubWpzXCIsXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL2pzeC1ydW50aW1lXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJpbXBvcnRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5janMubWpzXCIsXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL19pc29sYXRlZC1obnJzXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJpbXBvcnRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5janMubWpzXCIsXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL2pzeC1kZXYtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUud29ya2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRicm93c2VyOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMubWpzXCIsXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vcGFja2FnZS5qc29uXCI6IFwiLi9wYWNrYWdlLmpzb25cIixcblx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcIi4vbWFjcm9cIjoge1xuXHRcdFx0dHlwZXM6IHtcblx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uZC50c1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0fVxuXHR9LFxuXHR0eXBlczogXCJ0eXBlcy9pbmRleC5kLnRzXCIsXG5cdGZpbGVzOiBbXG5cdFx0XCJzcmNcIixcblx0XHRcImRpc3RcIixcblx0XHRcImpzeC1ydW50aW1lXCIsXG5cdFx0XCJqc3gtZGV2LXJ1bnRpbWVcIixcblx0XHRcIl9pc29sYXRlZC1obnJzXCIsXG5cdFx0XCJ0eXBlcy8qLmQudHNcIixcblx0XHRcIm1hY3JvLipcIlxuXHRdLFxuXHRzaWRlRWZmZWN0czogZmFsc2UsXG5cdGF1dGhvcjogXCJFbW90aW9uIENvbnRyaWJ1dG9yc1wiLFxuXHRsaWNlbnNlOiBcIk1JVFwiLFxuXHRzY3JpcHRzOiB7XG5cdFx0XCJ0ZXN0OnR5cGVzY3JpcHRcIjogXCJkdHNsaW50IHR5cGVzXCJcblx0fSxcblx0ZGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAYmFiZWwvcnVudGltZVwiOiBcIl43LjE4LjNcIixcblx0XHRcIkBlbW90aW9uL2JhYmVsLXBsdWdpblwiOiBcIl4xMS4xMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi9jYWNoZVwiOiBcIl4xMS4xMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi9zZXJpYWxpemVcIjogXCJeMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzXCI6IFwiXjEuMC4xXCIsXG5cdFx0XCJAZW1vdGlvbi91dGlsc1wiOiBcIl4xLjIuMVwiLFxuXHRcdFwiQGVtb3Rpb24vd2Vhay1tZW1vaXplXCI6IFwiXjAuMy4xXCIsXG5cdFx0XCJob2lzdC1ub24tcmVhY3Qtc3RhdGljc1wiOiBcIl4zLjMuMVwiXG5cdH0sXG5cdHBlZXJEZXBlbmRlbmNpZXM6IHtcblx0XHRyZWFjdDogXCI+PTE2LjguMFwiXG5cdH0sXG5cdHBlZXJEZXBlbmRlbmNpZXNNZXRhOiB7XG5cdFx0XCJAdHlwZXMvcmVhY3RcIjoge1xuXHRcdFx0b3B0aW9uYWw6IHRydWVcblx0XHR9XG5cdH0sXG5cdGRldkRlcGVuZGVuY2llczoge1xuXHRcdFwiQGRlZmluaXRlbHl0eXBlZC9kdHNsaW50XCI6IFwiMC4wLjExMlwiLFxuXHRcdFwiQGVtb3Rpb24vY3NzXCI6IFwiMTEuMTEuMlwiLFxuXHRcdFwiQGVtb3Rpb24vY3NzLXByZXR0aWZpZXJcIjogXCIxLjEuM1wiLFxuXHRcdFwiQGVtb3Rpb24vc2VydmVyXCI6IFwiMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc3R5bGVkXCI6IFwiMTEuMTEuMFwiLFxuXHRcdFwiaHRtbC10YWctbmFtZXNcIjogXCJeMS4xLjJcIixcblx0XHRyZWFjdDogXCIxNi4xNC4wXCIsXG5cdFx0XCJzdmctdGFnLW5hbWVzXCI6IFwiXjEuMS4xXCIsXG5cdFx0dHlwZXNjcmlwdDogXCJeNC41LjVcIlxuXHR9LFxuXHRyZXBvc2l0b3J5OiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vdHJlZS9tYWluL3BhY2thZ2VzL3JlYWN0XCIsXG5cdHB1Ymxpc2hDb25maWc6IHtcblx0XHRhY2Nlc3M6IFwicHVibGljXCJcblx0fSxcblx0XCJ1bWQ6bWFpblwiOiBcImRpc3QvZW1vdGlvbi1yZWFjdC51bWQubWluLmpzXCIsXG5cdHByZWNvbnN0cnVjdDoge1xuXHRcdGVudHJ5cG9pbnRzOiBbXG5cdFx0XHRcIi4vaW5kZXguanNcIixcblx0XHRcdFwiLi9qc3gtcnVudGltZS5qc1wiLFxuXHRcdFx0XCIuL2pzeC1kZXYtcnVudGltZS5qc1wiLFxuXHRcdFx0XCIuL19pc29sYXRlZC1obnJzLmpzXCJcblx0XHRdLFxuXHRcdHVtZE5hbWU6IFwiZW1vdGlvblJlYWN0XCIsXG5cdFx0ZXhwb3J0czoge1xuXHRcdFx0ZW52Q29uZGl0aW9uczogW1xuXHRcdFx0XHRcImJyb3dzZXJcIixcblx0XHRcdFx0XCJ3b3JrZXJcIlxuXHRcdFx0XSxcblx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFwiLi90eXBlcy9jc3MtcHJvcFwiOiBcIi4vdHlwZXMvY3NzLXByb3AuZC50c1wiLFxuXHRcdFx0XHRcIi4vbWFjcm9cIjoge1xuXHRcdFx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFx0XHRcImltcG9ydFwiOiBcIi4vbWFjcm8uZC5tdHNcIixcblx0XHRcdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uZC50c1wiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmpzXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxudmFyIGpzeCA9IGZ1bmN0aW9uIGpzeCh0eXBlLCBwcm9wcykge1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuICBpZiAocHJvcHMgPT0gbnVsbCB8fCAhaGFzT3duLmNhbGwocHJvcHMsICdjc3MnKSkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSA9IG5ldyBBcnJheShhcmdzTGVuZ3RoKTtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzBdID0gRW1vdGlvbjtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzFdID0gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVtpXSA9IGFyZ3NbaV07XG4gIH0gLy8gJEZsb3dGaXhNZVxuXG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbnZhciB3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgPSBmYWxzZTsgLy8gbWFpbnRhaW4gcGxhY2Ugb3ZlciByZXJlbmRlcnMuXG4vLyBpbml0aWFsIHJlbmRlciBmcm9tIGJyb3dzZXIsIGluc2VydEJlZm9yZSBjb250ZXh0LnNoZWV0LnRhZ3NbMF0gb3IgaWYgYSBzdHlsZSBoYXNuJ3QgYmVlbiBpbnNlcnRlZCB0aGVyZSB5ZXQsIGFwcGVuZENoaWxkXG4vLyBpbml0aWFsIGNsaWVudC1zaWRlIHJlbmRlciBmcm9tIFNTUiwgdXNlIHBsYWNlIG9mIGh5ZHJhdGluZyB0YWdcblxudmFyIEdsb2JhbCA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsICYmICggLy8gY2hlY2sgZm9yIGNsYXNzTmFtZSBhcyB3ZWxsIHNpbmNlIHRoZSB1c2VyIGlzXG4gIC8vIHByb2JhYmx5IHVzaW5nIHRoZSBjdXN0b20gY3JlYXRlRWxlbWVudCB3aGljaFxuICAvLyBtZWFucyBpdCB3aWxsIGJlIHR1cm5lZCBpbnRvIGEgY2xhc3NOYW1lIHByb3BcbiAgLy8gJEZsb3dGaXhNZSBJIGRvbid0IHJlYWxseSB3YW50IHRvIGFkZCBpdCB0byB0aGUgdHlwZSBzaW5jZSBpdCBzaG91bGRuJ3QgYmUgdXNlZFxuICBwcm9wcy5jbGFzc05hbWUgfHwgcHJvcHMuY3NzKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgY3NzIHByb3Agb24gR2xvYmFsLCBkaWQgeW91IG1lYW4gdG8gdXNlIHRoZSBzdHlsZXMgcHJvcCBpbnN0ZWFkP1wiKTtcbiAgICB3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAoIWlzQnJvd3NlciQxKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgc2VyaWFsaXplZE5hbWVzID0gc2VyaWFsaXplZC5uYW1lO1xuICAgIHZhciBzZXJpYWxpemVkU3R5bGVzID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gICAgdmFyIG5leHQgPSBzZXJpYWxpemVkLm5leHQ7XG5cbiAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXJpYWxpemVkTmFtZXMgKz0gJyAnICsgbmV4dC5uYW1lO1xuICAgICAgc2VyaWFsaXplZFN0eWxlcyArPSBuZXh0LnN0eWxlcztcbiAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZENhY2hlID0gY2FjaGUuY29tcGF0ID09PSB0cnVlO1xuICAgIHZhciBydWxlcyA9IGNhY2hlLmluc2VydChcIlwiLCB7XG4gICAgICBuYW1lOiBzZXJpYWxpemVkTmFtZXMsXG4gICAgICBzdHlsZXM6IHNlcmlhbGl6ZWRTdHlsZXNcbiAgICB9LCBjYWNoZS5zaGVldCwgc2hvdWxkQ2FjaGUpO1xuXG4gICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCAoX3JlZiA9IHt9LCBfcmVmW1wiZGF0YS1lbW90aW9uXCJdID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsIFwiICsgc2VyaWFsaXplZE5hbWVzLCBfcmVmLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0ge1xuICAgICAgX19odG1sOiBydWxlc1xuICAgIH0sIF9yZWYubm9uY2UgPSBjYWNoZS5zaGVldC5ub25jZSwgX3JlZikpO1xuICB9IC8vIHllcywgaSBrbm93IHRoZXNlIGhvb2tzIGFyZSB1c2VkIGNvbmRpdGlvbmFsbHlcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBHbG9iYWwuZGlzcGxheU5hbWUgPSAnRW1vdGlvbkdsb2JhbCc7XG59XG5cbmZ1bmN0aW9uIGNzcygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVTdHlsZXMoYXJncyk7XG59XG5cbnZhciBrZXlmcmFtZXMgPSBmdW5jdGlvbiBrZXlmcmFtZXMoKSB7XG4gIHZhciBpbnNlcnRhYmxlID0gY3NzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgdmFyIG5hbWUgPSBcImFuaW1hdGlvbi1cIiArIGluc2VydGFibGUubmFtZTsgLy8gJEZsb3dGaXhNZVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIG5hbWUgKyBcIntcIiArIGluc2VydGFibGUuc3R5bGVzICsgXCJ9XCIsXG4gICAgYW5pbTogMSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJfRU1PX1wiICsgdGhpcy5uYW1lICsgXCJfXCIgKyB0aGlzLnN0eWxlcyArIFwiX0VNT19cIjtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgY2xhc3NuYW1lcyA9IGZ1bmN0aW9uIGNsYXNzbmFtZXMoYXJncykge1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIGNscyA9ICcnO1xuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZy5zdHlsZXMgIT09IHVuZGVmaW5lZCAmJiBhcmcubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1lvdSBoYXZlIHBhc3NlZCBzdHlsZXMgY3JlYXRlZCB3aXRoIGBjc3NgIGZyb20gYEBlbW90aW9uL3JlYWN0YCBwYWNrYWdlIHRvIHRoZSBgY3hgLlxcbicgKyAnYGN4YCBpcyBtZWFudCB0byBjb21wb3NlIGNsYXNzIG5hbWVzIChzdHJpbmdzKSBzbyB5b3Ugc2hvdWxkIGNvbnZlcnQgdGhvc2Ugc3R5bGVzIHRvIGEgY2xhc3MgbmFtZSBieSBwYXNzaW5nIHRoZW0gdG8gdGhlIGBjc3NgIHJlY2VpdmVkIGZyb20gPENsYXNzTmFtZXMvPiBjb21wb25lbnQuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmZ1bmN0aW9uIG1lcmdlKHJlZ2lzdGVyZWQsIGNzcywgY2xhc3NOYW1lKSB7XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW107XG4gIHZhciByYXdDbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlZ2lzdGVyZWRTdHlsZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICByZXR1cm4gcmF3Q2xhc3NOYW1lICsgY3NzKHJlZ2lzdGVyZWRTdHlsZXMpO1xufVxuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWRBcnIgPSBfcmVmLnNlcmlhbGl6ZWRBcnI7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpYWxpemVkQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWRBcnJbaV0sIGZhbHNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIENsYXNzTmFtZXMgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgdmFyIGhhc1JlbmRlcmVkID0gZmFsc2U7XG4gIHZhciBzZXJpYWxpemVkQXJyID0gW107XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjc3MgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHNlcmlhbGl6ZWRBcnIucHVzaChzZXJpYWxpemVkKTsgLy8gcmVnaXN0cmF0aW9uIGhhcyB0byBoYXBwZW4gaGVyZSBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWlnaHQgZ2V0IGNvbnN1bWVkIGJ5IGBjeGBcblxuICAgIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2N4IGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHZhciBjb250ZW50ID0ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICB0aGVtZTogUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpXG4gIH07XG4gIHZhciBlbGUgPSBwcm9wcy5jaGlsZHJlbihjb250ZW50KTtcbiAgaGFzUmVuZGVyZWQgPSB0cnVlO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBzZXJpYWxpemVkQXJyOiBzZXJpYWxpemVkQXJyXG4gIH0pLCBlbGUpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIENsYXNzTmFtZXMuZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNsYXNzTmFtZXMnO1xufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7IC8vICMxNzI3LCAjMjkwNSBmb3Igc29tZSByZWFzb24gSmVzdCBhbmQgVml0ZXN0IGV2YWx1YXRlIG1vZHVsZXMgdHdpY2UgaWYgc29tZSBjb25zdW1pbmcgbW9kdWxlIGdldHMgbW9ja2VkXG5cbiAgdmFyIGlzVGVzdEVudiA9IHR5cGVvZiBqZXN0ICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdmkgIT09ICd1bmRlZmluZWQnO1xuXG4gIGlmIChpc0Jyb3dzZXIgJiYgIWlzVGVzdEVudikge1xuICAgIC8vIGdsb2JhbFRoaXMgaGFzIHdpZGUgYnJvd3NlciBzdXBwb3J0IC0gaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWdsb2JhbFRoaXMsIE5vZGUuanMgMTIgYW5kIGxhdGVyXG4gICAgdmFyIGdsb2JhbENvbnRleHQgPSAvLyAkRmxvd0lnbm9yZVxuICAgIHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIDogaXNCcm93c2VyID8gd2luZG93IDogZ2xvYmFsO1xuICAgIHZhciBnbG9iYWxLZXkgPSBcIl9fRU1PVElPTl9SRUFDVF9cIiArIHBrZy52ZXJzaW9uLnNwbGl0KCcuJylbMF0gKyBcIl9fXCI7XG5cbiAgICBpZiAoZ2xvYmFsQ29udGV4dFtnbG9iYWxLZXldKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1lvdSBhcmUgbG9hZGluZyBAZW1vdGlvbi9yZWFjdCB3aGVuIGl0IGlzIGFscmVhZHkgbG9hZGVkLiBSdW5uaW5nICcgKyAnbXVsdGlwbGUgaW5zdGFuY2VzIG1heSBjYXVzZSBwcm9ibGVtcy4gVGhpcyBjYW4gaGFwcGVuIGlmIG11bHRpcGxlICcgKyAndmVyc2lvbnMgYXJlIHVzZWQsIG9yIGlmIG11bHRpcGxlIGJ1aWxkcyBvZiB0aGUgc2FtZSB2ZXJzaW9uIGFyZSAnICsgJ3VzZWQuJyk7XG4gICAgfVxuXG4gICAgZ2xvYmFsQ29udGV4dFtnbG9iYWxLZXldID0gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCAiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBmb3JtYXRNdWlFcnJvck1lc3NhZ2U7XG4vKipcbiAqIFdBUk5JTkc6IERvbid0IGltcG9ydCB0aGlzIGRpcmVjdGx5LlxuICogVXNlIGBNdWlFcnJvcmAgZnJvbSBgQG11aS9pbnRlcm5hbC1iYWJlbC1tYWNyb3MvTXVpRXJyb3IubWFjcm9gIGluc3RlYWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBmb3JtYXRNdWlFcnJvck1lc3NhZ2UoY29kZSkge1xuICAvLyBBcHBseSBiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzIGluIGxvb3NlIG1vZGVcbiAgLy8gbG9vc2UgbW9kZSBpcyBzYWZlIGlmIHdlJ3JlIGNvbmNhdGVuYXRpbmcgcHJpbWl0aXZlc1xuICAvLyBzZWUgaHR0cHM6Ly9iYWJlbGpzLmlvL2RvY3MvZW4vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyNsb29zZVxuICAvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItdGVtcGxhdGUgKi9cbiAgbGV0IHVybCA9ICdodHRwczovL211aS5jb20vcHJvZHVjdGlvbi1lcnJvci8/Y29kZT0nICsgY29kZTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAvLyByZXN0IHBhcmFtcyBvdmVyLXRyYW5zcGlsZSBmb3IgdGhpcyBjYXNlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgIHVybCArPSAnJmFyZ3NbXT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuICdNaW5pZmllZCBNVUkgZXJyb3IgIycgKyBjb2RlICsgJzsgdmlzaXQgJyArIHVybCArICcgZm9yIHRoZSBmdWxsIG1lc3NhZ2UuJztcbiAgLyogZXNsaW50LWVuYWJsZSBwcmVmZXItdGVtcGxhdGUgKi9cbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Zvcm1hdE11aUVycm9yTWVzc2FnZS5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpOyIsICJpbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFiYnJ8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZGlzYWJsZVJlbW90ZVBsYXliYWNrfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGVudGVyS2V5SGludHxmb3JtfGZvcm1BY3Rpb258Zm9ybUVuY1R5cGV8Zm9ybU1ldGhvZHxmb3JtTm9WYWxpZGF0ZXxmb3JtVGFyZ2V0fGZyYW1lQm9yZGVyfGhlYWRlcnN8aGVpZ2h0fGhpZGRlbnxoaWdofGhyZWZ8aHJlZkxhbmd8aHRtbEZvcnxodHRwRXF1aXZ8aWR8aW5wdXRNb2RlfGludGVncml0eXxpc3xrZXlQYXJhbXN8a2V5VHlwZXxraW5kfGxhYmVsfGxhbmd8bGlzdHxsb2FkaW5nfGxvb3B8bG93fG1hcmdpbkhlaWdodHxtYXJnaW5XaWR0aHxtYXh8bWF4TGVuZ3RofG1lZGlhfG1lZGlhR3JvdXB8bWV0aG9kfG1pbnxtaW5MZW5ndGh8bXVsdGlwbGV8bXV0ZWR8bmFtZXxub25jZXxub1ZhbGlkYXRlfG9wZW58b3B0aW11bXxwYXR0ZXJufHBsYWNlaG9sZGVyfHBsYXlzSW5saW5lfHBvc3RlcnxwcmVsb2FkfHByb2ZpbGV8cmFkaW9Hcm91cHxyZWFkT25seXxyZWZlcnJlclBvbGljeXxyZWx8cmVxdWlyZWR8cmV2ZXJzZWR8cm9sZXxyb3dzfHJvd1NwYW58c2FuZGJveHxzY29wZXxzY29wZWR8c2Nyb2xsaW5nfHNlYW1sZXNzfHNlbGVjdGVkfHNoYXBlfHNpemV8c2l6ZXN8c2xvdHxzcGFufHNwZWxsQ2hlY2t8c3JjfHNyY0RvY3xzcmNMYW5nfHNyY1NldHxzdGFydHxzdGVwfHN0eWxlfHN1bW1hcnl8dGFiSW5kZXh8dGFyZ2V0fHRpdGxlfHRyYW5zbGF0ZXx0eXBlfHVzZU1hcHx2YWx1ZXx3aWR0aHx3bW9kZXx3cmFwfGFib3V0fGRhdGF0eXBlfGlubGlzdHxwcmVmaXh8cHJvcGVydHl8cmVzb3VyY2V8dHlwZW9mfHZvY2FifGF1dG9DYXBpdGFsaXplfGF1dG9Db3JyZWN0fGF1dG9TYXZlfGNvbG9yfGluY3JlbWVudGFsfGZhbGxiYWNrfGluZXJ0fGl0ZW1Qcm9wfGl0ZW1TY29wZXxpdGVtVHlwZXxpdGVtSUR8aXRlbVJlZnxvbnxvcHRpb258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViZmVlNjhhNGNkN2U2MDA5ZWY2MWQyM1xuXG52YXIgaXNQcm9wVmFsaWQgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHJldHVybiByZWFjdFByb3BzUmVnZXgudGVzdChwcm9wKSB8fCBwcm9wLmNoYXJDb2RlQXQoMCkgPT09IDExMVxuICAvKiBvICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgxKSA9PT0gMTEwXG4gIC8qIG4gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDIpIDwgOTE7XG59XG4vKiBaKzEgKi9cbik7XG5cbmV4cG9ydCB7IGlzUHJvcFZhbGlkIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaXNQcm9wVmFsaWQgZnJvbSAnQGVtb3Rpb24vaXMtcHJvcC12YWxpZCc7XG5pbXBvcnQgeyB3aXRoRW1vdGlvbkNhY2hlLCBUaGVtZUNvbnRleHQgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciB0ZXN0T21pdFByb3BzT25TdHJpbmdUYWcgPSBpc1Byb3BWYWxpZDtcblxudmFyIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudChrZXkpIHtcbiAgcmV0dXJuIGtleSAhPT0gJ3RoZW1lJztcbn07XG5cbnZhciBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AgPSBmdW5jdGlvbiBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJiAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2ID8gdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIDogdGVzdE9taXRQcm9wc09uQ29tcG9uZW50O1xufTtcbnZhciBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzID0gZnVuY3Rpb24gY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyh0YWcsIG9wdGlvbnMsIGlzUmVhbCkge1xuICB2YXIgc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB2YXIgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID0gb3B0aW9ucy5zaG91bGRGb3J3YXJkUHJvcDtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID8gZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICByZXR1cm4gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcChwcm9wTmFtZSkgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wKHByb3BOYW1lKTtcbiAgICB9IDogb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRGb3J3YXJkUHJvcCAhPT0gJ2Z1bmN0aW9uJyAmJiBpc1JlYWwpIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3A7XG4gIH1cblxuICByZXR1cm4gc2hvdWxkRm9yd2FyZFByb3A7XG59O1xuXG52YXIgSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IgPSBcIllvdSBoYXZlIGlsbGVnYWwgZXNjYXBlIHNlcXVlbmNlIGluIHlvdXIgdGVtcGxhdGUgbGl0ZXJhbCwgbW9zdCBsaWtlbHkgaW5zaWRlIGNvbnRlbnQncyBwcm9wZXJ0eSB2YWx1ZS5cXG5CZWNhdXNlIHlvdSB3cml0ZSB5b3VyIENTUyBpbnNpZGUgYSBKYXZhU2NyaXB0IHN0cmluZyB5b3UgYWN0dWFsbHkgaGF2ZSB0byBkbyBkb3VibGUgZXNjYXBpbmcsIHNvIGZvciBleGFtcGxlIFxcXCJjb250ZW50OiAnXFxcXDAwZDcnO1xcXCIgc2hvdWxkIGJlY29tZSBcXFwiY29udGVudDogJ1xcXFxcXFxcMDBkNyc7XFxcIi5cXG5Zb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGlzIGhlcmU6XFxuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvVGVtcGxhdGVfbGl0ZXJhbHMjRVMyMDE4X3JldmlzaW9uX29mX2lsbGVnYWxfZXNjYXBlX3NlcXVlbmNlc1wiO1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgY3JlYXRlU3R5bGVkID0gZnVuY3Rpb24gY3JlYXRlU3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0YWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBzdHlsZWQgZWxlbWVudCB3aXRoIGFuIHVuZGVmaW5lZCBjb21wb25lbnQuXFxuWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBpbXBvcnQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzUmVhbCA9IHRhZy5fX2Vtb3Rpb25fcmVhbCA9PT0gdGFnO1xuICB2YXIgYmFzZVRhZyA9IGlzUmVhbCAmJiB0YWcuX19lbW90aW9uX2Jhc2UgfHwgdGFnO1xuICB2YXIgaWRlbnRpZmllck5hbWU7XG4gIHZhciB0YXJnZXRDbGFzc05hbWU7XG5cbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlkZW50aWZpZXJOYW1lID0gb3B0aW9ucy5sYWJlbDtcbiAgICB0YXJnZXRDbGFzc05hbWUgPSBvcHRpb25zLnRhcmdldDtcbiAgfVxuXG4gIHZhciBzaG91bGRGb3J3YXJkUHJvcCA9IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpO1xuICB2YXIgZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AgfHwgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKGJhc2VUYWcpO1xuICB2YXIgc2hvdWxkVXNlQXMgPSAhZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKCdhcycpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHZhciBzdHlsZXMgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCA/IHRhZy5fX2Vtb3Rpb25fc3R5bGVzLnNsaWNlKDApIDogW107XG5cbiAgICBpZiAoaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3R5bGVzLnB1c2goXCJsYWJlbDpcIiArIGlkZW50aWZpZXJOYW1lICsgXCI7XCIpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzBdID09IG51bGwgfHwgYXJnc1swXS5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3R5bGVzLnB1c2guYXBwbHkoc3R5bGVzLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICBzdHlsZXMucHVzaChhcmdzWzBdWzBdKTtcbiAgICAgIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgICAgIHZhciBpID0gMTtcblxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmdzWzBdW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlcy5wdXNoKGFyZ3NbaV0sIGFyZ3NbMF1baV0pO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZTogd2UgbmVlZCB0byBjYXN0IFN0YXRlbGVzc0Z1bmN0aW9uYWxDb21wb25lbnQgdG8gb3VyIFByaXZhdGVTdHlsZWRDb21wb25lbnQgY2xhc3NcblxuXG4gICAgdmFyIFN0eWxlZCA9IHdpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gICAgICB2YXIgRmluYWxUYWcgPSBzaG91bGRVc2VBcyAmJiBwcm9wcy5hcyB8fCBiYXNlVGFnO1xuICAgICAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuICAgICAgdmFyIGNsYXNzSW50ZXJwb2xhdGlvbnMgPSBbXTtcbiAgICAgIHZhciBtZXJnZWRQcm9wcyA9IHByb3BzO1xuXG4gICAgICBpZiAocHJvcHMudGhlbWUgPT0gbnVsbCkge1xuICAgICAgICBtZXJnZWRQcm9wcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICAgIG1lcmdlZFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVyZ2VkUHJvcHMudGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIGNsYXNzSW50ZXJwb2xhdGlvbnMsIHByb3BzLmNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhzdHlsZXMuY29uY2F0KGNsYXNzSW50ZXJwb2xhdGlvbnMpLCBjYWNoZS5yZWdpc3RlcmVkLCBtZXJnZWRQcm9wcyk7XG4gICAgICBjbGFzc05hbWUgKz0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaW5hbFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkVXNlQXMgJiYgc2hvdWxkRm9yd2FyZFByb3AgPT09IHVuZGVmaW5lZCA/IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChGaW5hbFRhZykgOiBkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgX2tleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoc2hvdWxkVXNlQXMgJiYgX2tleSA9PT0gJ2FzJykgY29udGludWU7XG5cbiAgICAgICAgaWYgKCAvLyAkRmxvd0ZpeE1lXG4gICAgICAgIGZpbmFsU2hvdWxkRm9yd2FyZFByb3AoX2tleSkpIHtcbiAgICAgICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgIG5ld1Byb3BzLnJlZiA9IHJlZjtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgICAgIGNhY2hlOiBjYWNoZSxcbiAgICAgICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICAgICAgaXNTdHJpbmdUYWc6IHR5cGVvZiBGaW5hbFRhZyA9PT0gJ3N0cmluZydcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGaW5hbFRhZywgbmV3UHJvcHMpKTtcbiAgICB9KTtcbiAgICBTdHlsZWQuZGlzcGxheU5hbWUgPSBpZGVudGlmaWVyTmFtZSAhPT0gdW5kZWZpbmVkID8gaWRlbnRpZmllck5hbWUgOiBcIlN0eWxlZChcIiArICh0eXBlb2YgYmFzZVRhZyA9PT0gJ3N0cmluZycgPyBiYXNlVGFnIDogYmFzZVRhZy5kaXNwbGF5TmFtZSB8fCBiYXNlVGFnLm5hbWUgfHwgJ0NvbXBvbmVudCcpICsgXCIpXCI7XG4gICAgU3R5bGVkLmRlZmF1bHRQcm9wcyA9IHRhZy5kZWZhdWx0UHJvcHM7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9yZWFsID0gU3R5bGVkO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fYmFzZSA9IGJhc2VUYWc7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9zdHlsZXMgPSBzdHlsZXM7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9mb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHlsZWQsICd0b1N0cmluZycsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgICAgaWYgKHRhcmdldENsYXNzTmFtZSA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUic7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZTogY29lcmNlIHVuZGVmaW5lZCB0byBzdHJpbmdcblxuXG4gICAgICAgIHJldHVybiBcIi5cIiArIHRhcmdldENsYXNzTmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFN0eWxlZC53aXRoQ29tcG9uZW50ID0gZnVuY3Rpb24gKG5leHRUYWcsIG5leHRPcHRpb25zKSB7XG4gICAgICByZXR1cm4gY3JlYXRlU3R5bGVkKG5leHRUYWcsIF9leHRlbmRzKHt9LCBvcHRpb25zLCBuZXh0T3B0aW9ucywge1xuICAgICAgICBzaG91bGRGb3J3YXJkUHJvcDogY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyhTdHlsZWQsIG5leHRPcHRpb25zLCB0cnVlKVxuICAgICAgfSkpLmFwcGx5KHZvaWQgMCwgc3R5bGVzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFN0eWxlZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZVN0eWxlZCBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IGNyZWF0ZVN0eWxlZCBmcm9tICcuLi9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vaXMtcHJvcC12YWxpZCc7XG5pbXBvcnQgJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0ICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciB0YWdzID0gWydhJywgJ2FiYnInLCAnYWRkcmVzcycsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYXVkaW8nLCAnYicsICdiYXNlJywgJ2JkaScsICdiZG8nLCAnYmlnJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FudmFzJywgJ2NhcHRpb24nLCAnY2l0ZScsICdjb2RlJywgJ2NvbCcsICdjb2xncm91cCcsICdkYXRhJywgJ2RhdGFsaXN0JywgJ2RkJywgJ2RlbCcsICdkZXRhaWxzJywgJ2RmbicsICdkaWFsb2cnLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtJywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2knLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpbnMnLCAna2JkJywgJ2tleWdlbicsICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbGluaycsICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ21ldGVyJywgJ25hdicsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAnb3B0Z3JvdXAnLCAnb3B0aW9uJywgJ291dHB1dCcsICdwJywgJ3BhcmFtJywgJ3BpY3R1cmUnLCAncHJlJywgJ3Byb2dyZXNzJywgJ3EnLCAncnAnLCAncnQnLCAncnVieScsICdzJywgJ3NhbXAnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NtYWxsJywgJ3NvdXJjZScsICdzcGFuJywgJ3N0cm9uZycsICdzdHlsZScsICdzdWInLCAnc3VtbWFyeScsICdzdXAnLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGltZScsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1JywgJ3VsJywgJ3ZhcicsICd2aWRlbycsICd3YnInLCAvLyBTVkdcbidjaXJjbGUnLCAnY2xpcFBhdGgnLCAnZGVmcycsICdlbGxpcHNlJywgJ2ZvcmVpZ25PYmplY3QnLCAnZycsICdpbWFnZScsICdsaW5lJywgJ2xpbmVhckdyYWRpZW50JywgJ21hc2snLCAncGF0aCcsICdwYXR0ZXJuJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmFkaWFsR3JhZGllbnQnLCAncmVjdCcsICdzdG9wJywgJ3N2ZycsICd0ZXh0JywgJ3RzcGFuJ107XG5cbnZhciBuZXdTdHlsZWQgPSBjcmVhdGVTdHlsZWQuYmluZCgpO1xudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWdOYW1lKSB7XG4gIC8vICRGbG93Rml4TWU6IHdlIGNhbiBpZ25vcmUgdGhpcyBiZWNhdXNlIGl0cyBleHBvc2VkIHR5cGUgaXMgZGVmaW5lZCBieSB0aGUgQ3JlYXRlU3R5bGVkIHR5cGVcbiAgbmV3U3R5bGVkW3RhZ05hbWVdID0gbmV3U3R5bGVkKHRhZ05hbWUpO1xufSk7XG5cbmV4cG9ydCB7IG5ld1N0eWxlZCBhcyBkZWZhdWx0IH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbldpdGhSZXNldCgpIHt9XG5lbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LnJlc2V0V2FybmluZ0NhY2hlID0gZW1wdHlGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJpZ2ludDogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3JlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpO3ZhciBmPXJlcXVpcmUoXCJyZWFjdFwiKSxnPTYwMTAzO2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIGg9U3ltYm9sLmZvcjtnPWgoXCJyZWFjdC5lbGVtZW50XCIpO2V4cG9ydHMuRnJhZ21lbnQ9aChcInJlYWN0LmZyYWdtZW50XCIpfXZhciBtPWYuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RDdXJyZW50T3duZXIsbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIHEoYyxhLGspe3ZhciBiLGQ9e30sZT1udWxsLGw9bnVsbDt2b2lkIDAhPT1rJiYoZT1cIlwiK2spO3ZvaWQgMCE9PWEua2V5JiYoZT1cIlwiK2Eua2V5KTt2b2lkIDAhPT1hLnJlZiYmKGw9YS5yZWYpO2ZvcihiIGluIGEpbi5jYWxsKGEsYikmJiFwLmhhc093blByb3BlcnR5KGIpJiYoZFtiXT1hW2JdKTtpZihjJiZjLmRlZmF1bHRQcm9wcylmb3IoYiBpbiBhPWMuZGVmYXVsdFByb3BzLGEpdm9pZCAwPT09ZFtiXSYmKGRbYl09YVtiXSk7cmV0dXJueyQkdHlwZW9mOmcsdHlwZTpjLGtleTplLHJlZjpsLHByb3BzOmQsX293bmVyOm0uY3VycmVudH19ZXhwb3J0cy5qc3g9cTtleHBvcnRzLmpzeHM9cTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gU3R5bGVkRW5naW5lUHJvdmlkZXI7XG52YXIgUmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBfcmVhY3QyID0gcmVxdWlyZShcIkBlbW90aW9uL3JlYWN0XCIpO1xudmFyIF9jYWNoZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBlbW90aW9uL2NhY2hlXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLy8gcHJlcGVuZDogdHJ1ZSBtb3ZlcyBNVUkgc3R5bGVzIHRvIHRoZSB0b3Agb2YgdGhlIDxoZWFkPiBzbyB0aGV5J3JlIGxvYWRlZCBmaXJzdC5cbi8vIEl0IGFsbG93cyBkZXZlbG9wZXJzIHRvIGVhc2lseSBvdmVycmlkZSBNVUkgc3R5bGVzIHdpdGggb3RoZXIgc3R5bGluZyBzb2x1dGlvbnMsIGxpa2UgQ1NTIG1vZHVsZXMuXG5sZXQgY2FjaGU7XG5pZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0Jykge1xuICBjYWNoZSA9ICgwLCBfY2FjaGUuZGVmYXVsdCkoe1xuICAgIGtleTogJ2NzcycsXG4gICAgcHJlcGVuZDogdHJ1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIFN0eWxlZEVuZ2luZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpbmplY3RGaXJzdCxcbiAgICBjaGlsZHJlblxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBpbmplY3RGaXJzdCAmJiBjYWNoZSA/IC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShfcmVhY3QyLkNhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2FjaGUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pIDogY2hpbGRyZW47XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdHlsZWRFbmdpbmVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMuZGVmYXVsdC5ub2RlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgdGhlIHN0eWxlcyBhcmUgaW5qZWN0ZWQgbGFzdCBpbiB0aGUgPGhlYWQ+IGVsZW1lbnQgb2YgdGhlIHBhZ2UuXG4gICAqIEFzIGEgcmVzdWx0LCB0aGV5IGdhaW4gbW9yZSBzcGVjaWZpY2l0eSB0aGFuIGFueSBvdGhlciBzdHlsZSBzaGVldC5cbiAgICogSWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgTVVJJ3Mgc3R5bGVzLCBzZXQgdGhpcyBwcm9wLlxuICAgKi9cbiAgaW5qZWN0Rmlyc3Q6IF9wcm9wVHlwZXMuZGVmYXVsdC5ib29sXG59IDogdm9pZCAwOyIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfU3R5bGVkRW5naW5lUHJvdmlkZXIuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX1N0eWxlZEVuZ2luZVByb3ZpZGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9TdHlsZWRFbmdpbmVQcm92aWRlclwiKSk7IiwgIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBHbG9iYWxTdHlsZXM7XG52YXIgUmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBfcmVhY3QyID0gcmVxdWlyZShcIkBlbW90aW9uL3JlYWN0XCIpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKF9yZWFjdDIuR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsXG4gIHN0eWxlczogX3Byb3BUeXBlcy5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlcy5kZWZhdWx0LmFycmF5LCBfcHJvcFR5cGVzLmRlZmF1bHQuc3RyaW5nLCBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LCBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuY10pXG59IDogdm9pZCAwOyIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfR2xvYmFsU3R5bGVzLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9HbG9iYWxTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0dsb2JhbFN0eWxlc1wiKSk7IiwgIi8qKlxuICogQG11aS9zdHlsZWQtZW5naW5lIHY1LjE1LjExXG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJHbG9iYWxTdHlsZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX0dsb2JhbFN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlN0eWxlZEVuZ2luZVByb3ZpZGVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9TdHlsZWRFbmdpbmVQcm92aWRlci5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRoZW1lQ29udGV4dFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVhY3QuVGhlbWVDb250ZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVhY3QuY3NzO1xuICB9XG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHN0eWxlZDtcbmV4cG9ydHMuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9IHZvaWQgMDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImtleWZyYW1lc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfcmVhY3Qua2V5ZnJhbWVzO1xuICB9XG59KTtcbnZhciBfc3R5bGVkID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGVtb3Rpb24vc3R5bGVkXCIpKTtcbnZhciBfcmVhY3QgPSByZXF1aXJlKFwiQGVtb3Rpb24vcmVhY3RcIik7XG52YXIgX1N0eWxlZEVuZ2luZVByb3ZpZGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9TdHlsZWRFbmdpbmVQcm92aWRlclwiKSk7XG52YXIgX0dsb2JhbFN0eWxlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vR2xvYmFsU3R5bGVzXCIpKTtcbmZ1bmN0aW9uIHN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3R5bGVzRmFjdG9yeSA9ICgwLCBfc3R5bGVkLmRlZmF1bHQpKHRhZywgb3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICguLi5zdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gYFwiJHt0YWd9XCJgIDogJ2NvbXBvbmVudCc7XG4gICAgICBpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBTZWVtcyBsaWtlIHlvdSBjYWxsZWQgXFxgc3R5bGVkKCR7Y29tcG9uZW50fSkoKVxcYCB3aXRob3V0IGEgXFxgc3R5bGVcXGAgYXJndW1lbnQuYCwgJ1lvdSBtdXN0IHByb3ZpZGUgYSBgc3R5bGVzYCBhcmd1bWVudDogYHN0eWxlZChcImRpdlwiKShzdHlsZVlvdUZvcmdvdFRvUGFzcylgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVzLnNvbWUoc3R5bGUgPT4gc3R5bGUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiB0aGUgc3R5bGVkKCR7Y29tcG9uZW50fSkoLi4uYXJncykgQVBJIHJlcXVpcmVzIGFsbCBpdHMgYXJncyB0byBiZSBkZWZpbmVkLmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0ZhY3RvcnkoLi4uc3R5bGVzKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdHlsZXNGYWN0b3J5O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5jb25zdCBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gKHRhZywgcHJvY2Vzc29yKSA9PiB7XG4gIC8vIEVtb3Rpb24gYXR0YWNoZXMgYWxsIHRoZSBzdHlsZXMgYXMgYF9fZW1vdGlvbl9zdHlsZXNgLlxuICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8xNmQ5NzFkMGRhMjI5NTk2ZDZiY2MzOWQyODJiYTk3NTNjOWVlN2NmL3BhY2thZ2VzL3N0eWxlZC9zcmMvYmFzZS5qcyNMMTg2XG4gIGlmIChBcnJheS5pc0FycmF5KHRhZy5fX2Vtb3Rpb25fc3R5bGVzKSkge1xuICAgIHRhZy5fX2Vtb3Rpb25fc3R5bGVzID0gcHJvY2Vzc29yKHRhZy5fX2Vtb3Rpb25fc3R5bGVzKTtcbiAgfVxufTtcbmV4cG9ydHMuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9IGludGVybmFsX3Byb2Nlc3NTdHlsZXM7IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZXBtZXJnZTtcbmV4cG9ydHMuaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChpdGVtKSB7XG4gIGlmICh0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcgfHwgaXRlbSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaXRlbSk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gaXRlbSkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gaXRlbSk7XG59XG5mdW5jdGlvbiBkZWVwQ2xvbmUoc291cmNlKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgb3V0cHV0W2tleV0gPSBkZWVwQ2xvbmUoc291cmNlW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGRlZXBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucyA9IHtcbiAgY2xvbmU6IHRydWVcbn0pIHtcbiAgY29uc3Qgb3V0cHV0ID0gb3B0aW9ucy5jbG9uZSA/ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHRhcmdldCkgOiB0YXJnZXQ7XG4gIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAvLyBBdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChzb3VyY2Vba2V5XSkgJiYga2V5IGluIHRhcmdldCAmJiBpc1BsYWluT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAvLyBTaW5jZSBgb3V0cHV0YCBpcyBhIGNsb25lIG9mIGB0YXJnZXRgIGFuZCB3ZSBoYXZlIG5hcnJvd2VkIGB0YXJnZXRgIGluIHRoaXMgYmxvY2sgd2UgY2FuIGNhc3QgdG8gdGhlIHNhbWUgdHlwZS5cbiAgICAgICAgb3V0cHV0W2tleV0gPSBkZWVwbWVyZ2UodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldLCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jbG9uZSkge1xuICAgICAgICBvdXRwdXRba2V5XSA9IGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pID8gZGVlcENsb25lKHNvdXJjZVtrZXldKSA6IHNvdXJjZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBfZXhwb3J0TmFtZXMgPSB7fTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2RlZXBtZXJnZS5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vZGVlcG1lcmdlXCIpKTtcbk9iamVjdC5rZXlzKF9kZWVwbWVyZ2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9kZWVwbWVyZ2Vba2V5XSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfZGVlcG1lcmdlW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjYXBpdGFsaXplO1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xuLy8gSXQgc2hvdWxkIHRvIGJlIG5vdGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24ndCBlcXVpdmFsZW50IHRvIGB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZWAuXG4vL1xuLy8gQSBzdHJpY3QgY2FwaXRhbGl6YXRpb24gc2hvdWxkIHVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgc2VudGVuY2UuXG4vLyBXZSBvbmx5IGhhbmRsZSB0aGUgZmlyc3Qgd29yZC5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGBjYXBpdGFsaXplKHN0cmluZylcXGAgZXhwZWN0cyBhIHN0cmluZyBhcmd1bWVudC5gIDogKDAsIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyLmRlZmF1bHQpKDcpKTtcbiAgfVxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY2FwaXRhbGl6ZS5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2FwaXRhbGl6ZVwiKSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZ2V0RGlzcGxheU5hbWU7XG5leHBvcnRzLmdldEZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uTmFtZTtcbnZhciBfcmVhY3RJcyA9IHJlcXVpcmUoXCJyZWFjdC1pc1wiKTtcbi8vIFNpbXBsaWZpZWQgcG9seWZpbGwgZm9yIElFMTEgc3VwcG9ydFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0phbWVzTUdyZWVuZS9GdW5jdGlvbi5uYW1lL2Jsb2IvNThiMzE0ZDRhOTgzMTEwYzM2ODJmMTIyOGY4NDVkMzljY2NhMTgxNy9GdW5jdGlvbi5uYW1lLmpzI0wzXG5jb25zdCBmbk5hbWVNYXRjaFJlZ2V4ID0gL15cXHMqZnVuY3Rpb24oPzpcXHN8XFxzKlxcL1xcKi4qXFwqXFwvXFxzKikrKFteKFxccy9dKilcXHMqLztcbmZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZShmbikge1xuICBjb25zdCBtYXRjaCA9IGAke2ZufWAubWF0Y2goZm5OYW1lTWF0Y2hSZWdleCk7XG4gIGNvbnN0IG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgcmV0dXJuIG5hbWUgfHwgJyc7XG59XG5mdW5jdGlvbiBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoQ29tcG9uZW50LCBmYWxsYmFjayA9ICcnKSB7XG4gIHJldHVybiBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgZ2V0RnVuY3Rpb25OYW1lKENvbXBvbmVudCkgfHwgZmFsbGJhY2s7XG59XG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKGlubmVyVHlwZSk7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyBgJHt3cmFwcGVyTmFtZX0oJHtmdW5jdGlvbk5hbWV9KWAgOiB3cmFwcGVyTmFtZSk7XG59XG5cbi8qKlxuICogY2hlcnJ5LXBpY2sgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvNzY5YjFmMjcwZTEyNTFkOWRiZGNlMGZjYmQ5ZTkyZTUwMmQwNTliOC9wYWNrYWdlcy9zaGFyZWQvZ2V0Q29tcG9uZW50TmFtZS5qc1xuICogb3JpZ2luYWxseSBmb3JrZWQgZnJvbSByZWNvbXBvc2UvZ2V0RGlzcGxheU5hbWUgd2l0aCBhZGRlZCBJRTExIHN1cHBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcG9uZW50KSB7XG4gIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbiAgfVxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoQ29tcG9uZW50LCAnQ29tcG9uZW50Jyk7XG4gIH1cblxuICAvLyBUeXBlU2NyaXB0IGNhbid0IGhhdmUgY29tcG9uZW50cyBhcyBvYmplY3RzIGJ1dCB0aGV5IGV4aXN0IGluIHRoZSBmb3JtIG9mIGBtZW1vYCBvciBgU3VzcGVuc2VgXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAoQ29tcG9uZW50LiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIF9yZWFjdElzLkZvcndhcmRSZWY6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZShDb21wb25lbnQsIENvbXBvbmVudC5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG4gICAgICBjYXNlIF9yZWFjdElzLk1lbW86XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZShDb21wb25lbnQsIENvbXBvbmVudC50eXBlLCAnbWVtbycpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgX2V4cG9ydE5hbWVzID0ge307XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9nZXREaXNwbGF5TmFtZS5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfZ2V0RGlzcGxheU5hbWUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9nZXREaXNwbGF5TmFtZVwiKSk7XG5PYmplY3Qua2V5cyhfZ2V0RGlzcGxheU5hbWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9nZXREaXNwbGF5TmFtZVtrZXldKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9nZXREaXNwbGF5TmFtZVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsIG1heCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHZhbCwgbWF4KSk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBjbGFtcDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NsYW1wLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2xhbXBcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuICByZXR1cm4gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkoYWNjLCBpdGVtLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcCwgaXQncyB3YXkgZmFzdGVyLlxuICB9KTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IG1lcmdlOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbmNvbnN0IHJlc3BvbnNpdmVQcm9wVHlwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfcHJvcFR5cGVzLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzLmRlZmF1bHQuc3RyaW5nLCBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LCBfcHJvcFR5cGVzLmRlZmF1bHQuYXJyYXldKSA6IHt9O1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gcmVzcG9uc2l2ZVByb3BUeXBlOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wdXRlQnJlYWtwb2ludHNCYXNlID0gY29tcHV0ZUJyZWFrcG9pbnRzQmFzZTtcbmV4cG9ydHMuY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0ID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0O1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy5oYW5kbGVCcmVha3BvaW50cyA9IGhhbmRsZUJyZWFrcG9pbnRzO1xuZXhwb3J0cy5tZXJnZUJyZWFrcG9pbnRzSW5PcmRlciA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyO1xuZXhwb3J0cy5yZW1vdmVVbnVzZWRCcmVha3BvaW50cyA9IHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzO1xuZXhwb3J0cy5yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzO1xuZXhwb3J0cy52YWx1ZXMgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpKTtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lcmdlXCIpKTtcbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuY29uc3QgdmFsdWVzID0gZXhwb3J0cy52YWx1ZXMgPSB7XG4gIHhzOiAwLFxuICAvLyBwaG9uZVxuICBzbTogNjAwLFxuICAvLyB0YWJsZXRcbiAgbWQ6IDkwMCxcbiAgLy8gc21hbGwgbGFwdG9wXG4gIGxnOiAxMjAwLFxuICAvLyBkZXNrdG9wXG4gIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxufTtcbmNvbnN0IGRlZmF1bHRCcmVha3BvaW50cyA9IHtcbiAgLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuICAvLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG4gIGtleXM6IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXSxcbiAgdXA6IGtleSA9PiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZXNba2V5XX1weClgXG59O1xuZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgdGhlbWVcbiAgICAgICAgfSwgcHJvcHNba2V5XSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgICByZXR1cm4gKDAsIF9tZXJnZS5kZWZhdWx0KShiYXNlLCBleHRlbmRlZCk7XG4gIH07XG4gIG5ld1N0eWxlRnVuY3Rpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsXG4gICAgc206IF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsXG4gICAgbWQ6IF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsXG4gICAgbGc6IF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsXG4gICAgeGw6IF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5mdW5jdGlvbiBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCA9IHt9KSB7XG4gIHZhciBfYnJlYWtwb2ludHNJbnB1dCRrZXk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzSW5PcmRlciA9IChfYnJlYWtwb2ludHNJbnB1dCRrZXkgPSBicmVha3BvaW50c0lucHV0LmtleXMpID09IG51bGwgPyB2b2lkIDAgOiBfYnJlYWtwb2ludHNJbnB1dCRrZXkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRTdHlsZUtleSA9IGJyZWFrcG9pbnRzSW5wdXQudXAoa2V5KTtcbiAgICBhY2NbYnJlYWtwb2ludFN0eWxlS2V5XSA9IHt9O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzSW5PcmRlciB8fCB7fTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRLZXlzLCBzdHlsZSkge1xuICByZXR1cm4gYnJlYWtwb2ludEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRPdXRwdXQgPSBhY2Nba2V5XTtcbiAgICBjb25zdCBpc0JyZWFrcG9pbnRVbnVzZWQgPSAhYnJlYWtwb2ludE91dHB1dCB8fCBPYmplY3Qua2V5cyhicmVha3BvaW50T3V0cHV0KS5sZW5ndGggPT09IDA7XG4gICAgaWYgKGlzQnJlYWtwb2ludFVudXNlZCkge1xuICAgICAgZGVsZXRlIGFjY1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBzdHlsZSk7XG59XG5mdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiAoMCwgX2RlZXBtZXJnZS5kZWZhdWx0KShwcmV2LCBuZXh0KSwge30pO1xuICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyksIG1lcmdlZE91dHB1dCk7XG59XG5cbi8vIGNvbXB1dGUgYmFzZSBmb3IgcmVzcG9uc2l2ZSB2YWx1ZXM7IGUuZy4sXG4vLyBbMSwyLDNdID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuLy8ge3hzOiAxLCBzbTogMiwgbWQ6IDN9ID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuZnVuY3Rpb24gY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKSB7XG4gIC8vIGZpeGVkIHZhbHVlXG4gIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3QgYmFzZSA9IHt9O1xuICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICBicmVha3BvaW50c0tleXMuZm9yRWFjaCgoYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgICAgaWYgKGkgPCBicmVha3BvaW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBicmVha3BvaW50c0tleXMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGlmIChicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGJhc2U7XG59XG5mdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBicmVha3BvaW50czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0UGF0aCA9IGdldFBhdGg7XG5leHBvcnRzLmdldFN0eWxlVmFsdWUgPSBnZXRTdHlsZVZhbHVlO1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xuZnVuY3Rpb24gZ2V0UGF0aChvYmosIHBhdGgsIGNoZWNrVmFycyA9IHRydWUpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgQ1NTIHZhcmlhYmxlcyBhcmUgdXNlZFxuICBpZiAob2JqICYmIG9iai52YXJzICYmIGNoZWNrVmFycykge1xuICAgIGNvbnN0IHZhbCA9IGB2YXJzLiR7cGF0aH1gLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYyAmJiBhY2NbaXRlbV0gPyBhY2NbaXRlbV0gOiBudWxsLCBvYmopO1xuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgIGlmIChhY2MgJiYgYWNjW2l0ZW1dICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2NbaXRlbV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LCBvYmopO1xufVxuZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6ICgwLCBfY2FwaXRhbGl6ZS5kZWZhdWx0KShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9O1xuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICAgIFtwcm9wXTogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG4gIH0gOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBbcHJvcF07XG4gIHJldHVybiBmbjtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0eWxlOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IG1lbW9pemU7XG5mdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIGNvbnN0IGNhY2hlID0ge307XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlTcGFjaW5nID0gY3JlYXRlVW5hcnlTcGFjaW5nO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVVuaXQgPSBjcmVhdGVVbmFyeVVuaXQ7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLmdldFN0eWxlRnJvbVByb3BWYWx1ZSA9IGdldFN0eWxlRnJvbVByb3BWYWx1ZTtcbmV4cG9ydHMuZ2V0VmFsdWUgPSBnZXRWYWx1ZTtcbmV4cG9ydHMubWFyZ2luID0gbWFyZ2luO1xuZXhwb3J0cy5tYXJnaW5LZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5wYWRkaW5nID0gcGFkZGluZztcbmV4cG9ydHMucGFkZGluZ0tleXMgPSB2b2lkIDA7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbnZhciBfc3R5bGUgPSByZXF1aXJlKFwiLi9zdHlsZVwiKTtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lcmdlXCIpKTtcbnZhciBfbWVtb2l6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWVtb2l6ZVwiKSk7XG5jb25zdCBwcm9wZXJ0aWVzID0ge1xuICBtOiAnbWFyZ2luJyxcbiAgcDogJ3BhZGRpbmcnXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgdDogJ1RvcCcsXG4gIHI6ICdSaWdodCcsXG4gIGI6ICdCb3R0b20nLFxuICBsOiAnTGVmdCcsXG4gIHg6IFsnTGVmdCcsICdSaWdodCddLFxuICB5OiBbJ1RvcCcsICdCb3R0b20nXVxufTtcbmNvbnN0IGFsaWFzZXMgPSB7XG4gIG1hcmdpblg6ICdteCcsXG4gIG1hcmdpblk6ICdteScsXG4gIHBhZGRpbmdYOiAncHgnLFxuICBwYWRkaW5nWTogJ3B5J1xufTtcblxuLy8gbWVtb2l6ZSgpIGltcGFjdDpcbi8vIEZyb20gMzAwLDAwMCBvcHMvc2VjXG4vLyBUbyAzNTAsMDAwIG9wcy9zZWNcbmNvbnN0IGdldENzc1Byb3BlcnRpZXMgPSAoMCwgX21lbW9pemUuZGVmYXVsdCkocHJvcCA9PiB7XG4gIC8vIEl0J3Mgbm90IGEgc2hvcnRoYW5kIG5vdGF0aW9uLlxuICBpZiAocHJvcC5sZW5ndGggPiAyKSB7XG4gICAgaWYgKGFsaWFzZXNbcHJvcF0pIHtcbiAgICAgIHByb3AgPSBhbGlhc2VzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3Byb3BdO1xuICAgIH1cbiAgfVxuICBjb25zdCBbYSwgYl0gPSBwcm9wLnNwbGl0KCcnKTtcbiAgY29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2FdO1xuICBjb25zdCBkaXJlY3Rpb24gPSBkaXJlY3Rpb25zW2JdIHx8ICcnO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkaXJlY3Rpb24pID8gZGlyZWN0aW9uLm1hcChkaXIgPT4gcHJvcGVydHkgKyBkaXIpIDogW3Byb3BlcnR5ICsgZGlyZWN0aW9uXTtcbn0pO1xuY29uc3QgbWFyZ2luS2V5cyA9IGV4cG9ydHMubWFyZ2luS2V5cyA9IFsnbScsICdtdCcsICdtcicsICdtYicsICdtbCcsICdteCcsICdteScsICdtYXJnaW4nLCAnbWFyZ2luVG9wJywgJ21hcmdpblJpZ2h0JywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblgnLCAnbWFyZ2luWScsICdtYXJnaW5JbmxpbmUnLCAnbWFyZ2luSW5saW5lU3RhcnQnLCAnbWFyZ2luSW5saW5lRW5kJywgJ21hcmdpbkJsb2NrJywgJ21hcmdpbkJsb2NrU3RhcnQnLCAnbWFyZ2luQmxvY2tFbmQnXTtcbmNvbnN0IHBhZGRpbmdLZXlzID0gZXhwb3J0cy5wYWRkaW5nS2V5cyA9IFsncCcsICdwdCcsICdwcicsICdwYicsICdwbCcsICdweCcsICdweScsICdwYWRkaW5nJywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1gnLCAncGFkZGluZ1knLCAncGFkZGluZ0lubGluZScsICdwYWRkaW5nSW5saW5lU3RhcnQnLCAncGFkZGluZ0lubGluZUVuZCcsICdwYWRkaW5nQmxvY2snLCAncGFkZGluZ0Jsb2NrU3RhcnQnLCAncGFkZGluZ0Jsb2NrRW5kJ107XG5jb25zdCBzcGFjaW5nS2V5cyA9IFsuLi5tYXJnaW5LZXlzLCAuLi5wYWRkaW5nS2V5c107XG5mdW5jdGlvbiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsIHRoZW1lS2V5LCBkZWZhdWx0VmFsdWUsIHByb3BOYW1lKSB7XG4gIHZhciBfZ2V0UGF0aDtcbiAgY29uc3QgdGhlbWVTcGFjaW5nID0gKF9nZXRQYXRoID0gKDAsIF9zdHlsZS5nZXRQYXRoKSh0aGVtZSwgdGhlbWVLZXksIGZhbHNlKSkgIT0gbnVsbCA/IF9nZXRQYXRoIDogZGVmYXVsdFZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhYnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBFeHBlY3RlZCAke3Byb3BOYW1lfSBhcmd1bWVudCB0byBiZSBhIG51bWJlciBvciBhIHN0cmluZywgZ290ICR7YWJzfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZyAqIGFicztcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRoZW1lU3BhY2luZykpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFicykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXJyYXkgdHlwZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBub24gaW50ZWdlciB2YWx1ZXMuYCArIGBZb3Ugc2hvdWxkIGVpdGhlciB1c2UgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGluZGV4LCBvciBkZWZpbmUgdGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFzIGEgbnVtYmVyLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiB0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAoJHthYnN9KSBvdmVyZmxvd3MuYCwgYFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeSh0aGVtZVNwYWNpbmcpfS5gLCBgJHthYnN9ID4gJHt0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMX0sIHlvdSBuZWVkIHRvIGFkZCB0aGUgbWlzc2luZyB2YWx1ZXMuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nW2Fic107XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGVtZVNwYWNpbmc7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgdmFsdWUgKCR7dGhlbWVTcGFjaW5nfSkgaXMgaW52YWxpZC5gLCAnSXQgc2hvdWxkIGJlIGEgbnVtYmVyLCBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiddLmpvaW4oJ1xcbicpKTtcbiAgfVxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKSB7XG4gIHJldHVybiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsICdzcGFjaW5nJywgOCwgJ3NwYWNpbmcnKTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdzdHJpbmcnIHx8IHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuICBjb25zdCBhYnMgPSBNYXRoLmFicyhwcm9wVmFsdWUpO1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybWVyKGFicyk7XG4gIGlmIChwcm9wVmFsdWUgPj0gMCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAtdHJhbnNmb3JtZWQ7XG4gIH1cbiAgcmV0dXJuIGAtJHt0cmFuc2Zvcm1lZH1gO1xufVxuZnVuY3Rpb24gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKSB7XG4gIHJldHVybiBwcm9wVmFsdWUgPT4gY3NzUHJvcGVydGllcy5yZWR1Y2UoKGFjYywgY3NzUHJvcGVydHkpID0+IHtcbiAgICBhY2NbY3NzUHJvcGVydHldID0gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikge1xuICAvLyBVc2luZyBhIGhhc2ggY29tcHV0YXRpb24gb3ZlciBhbiBhcnJheSBpdGVyYXRpb24gY291bGQgYmUgZmFzdGVyLCBidXQgd2l0aCBvbmx5IDI4IGl0ZW1zLFxuICAvLyBpdCdzIGRvZXNuJ3Qgd29ydGggdGhlIGJ1bmRsZSBzaXplLlxuICBpZiAoa2V5cy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNzc1Byb3BlcnRpZXMgPSBnZXRDc3NQcm9wZXJ0aWVzKHByb3ApO1xuICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpO1xuICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG59XG5mdW5jdGlvbiBzdHlsZShwcm9wcywga2V5cykge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyhwcm9wcy50aGVtZSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKHByb3AgPT4gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikpLnJlZHVjZShfbWVyZ2UuZGVmYXVsdCwge30pO1xufVxuZnVuY3Rpb24gbWFyZ2luKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgbWFyZ2luS2V5cyk7XG59XG5tYXJnaW4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IG1hcmdpbktleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xubWFyZ2luLmZpbHRlclByb3BzID0gbWFyZ2luS2V5cztcbmZ1bmN0aW9uIHBhZGRpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBwYWRkaW5nS2V5cyk7XG59XG5wYWRkaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwYWRkaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0O1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5wYWRkaW5nLmZpbHRlclByb3BzID0gcGFkZGluZ0tleXM7XG5mdW5jdGlvbiBzcGFjaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgc3BhY2luZ0tleXMpO1xufVxuc3BhY2luZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3BhY2luZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xuc3BhY2luZy5maWx0ZXJQcm9wcyA9IHNwYWNpbmdLZXlzO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc3BhY2luZzsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lcmdlXCIpKTtcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gKDAsIF9tZXJnZS5kZWZhdWx0KShhY2MsIGhhbmRsZXJzW3Byb3BdKHByb3BzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oYWNjLCBzdHlsZS5wcm9wVHlwZXMpLCB7fSkgOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MuY29uY2F0KHN0eWxlLmZpbHRlclByb3BzKSwgW10pO1xuICByZXR1cm4gZm47XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBjb21wb3NlOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib3JkZXJUb3BDb2xvciA9IGV4cG9ydHMuYm9yZGVyVG9wID0gZXhwb3J0cy5ib3JkZXJSaWdodENvbG9yID0gZXhwb3J0cy5ib3JkZXJSaWdodCA9IGV4cG9ydHMuYm9yZGVyUmFkaXVzID0gZXhwb3J0cy5ib3JkZXJMZWZ0Q29sb3IgPSBleHBvcnRzLmJvcmRlckxlZnQgPSBleHBvcnRzLmJvcmRlckNvbG9yID0gZXhwb3J0cy5ib3JkZXJCb3R0b21Db2xvciA9IGV4cG9ydHMuYm9yZGVyQm90dG9tID0gZXhwb3J0cy5ib3JkZXIgPSB2b2lkIDA7XG5leHBvcnRzLmJvcmRlclRyYW5zZm9ybSA9IGJvcmRlclRyYW5zZm9ybTtcbmV4cG9ydHMub3V0bGluZUNvbG9yID0gZXhwb3J0cy5vdXRsaW5lID0gZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4vc3BhY2luZ1wiKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbmZ1bmN0aW9uIGJvcmRlclRyYW5zZm9ybSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuZnVuY3Rpb24gY3JlYXRlQm9yZGVyU3R5bGUocHJvcCwgdHJhbnNmb3JtKSB7XG4gIHJldHVybiAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgICBwcm9wLFxuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtXG4gIH0pO1xufVxuY29uc3QgYm9yZGVyID0gZXhwb3J0cy5ib3JkZXIgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyJywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlclRvcCA9IGV4cG9ydHMuYm9yZGVyVG9wID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcCcsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJSaWdodCA9IGV4cG9ydHMuYm9yZGVyUmlnaHQgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyQm90dG9tID0gZXhwb3J0cy5ib3JkZXJCb3R0b20gPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tJywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlckxlZnQgPSBleHBvcnRzLmJvcmRlckxlZnQgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdCcsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJDb2xvciA9IGV4cG9ydHMuYm9yZGVyQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQ29sb3InKTtcbmNvbnN0IGJvcmRlclRvcENvbG9yID0gZXhwb3J0cy5ib3JkZXJUb3BDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3BDb2xvcicpO1xuY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IGV4cG9ydHMuYm9yZGVyUmlnaHRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodENvbG9yJyk7XG5jb25zdCBib3JkZXJCb3R0b21Db2xvciA9IGV4cG9ydHMuYm9yZGVyQm90dG9tQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tQ29sb3InKTtcbmNvbnN0IGJvcmRlckxlZnRDb2xvciA9IGV4cG9ydHMuYm9yZGVyTGVmdENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnRDb2xvcicpO1xuY29uc3Qgb3V0bGluZSA9IGV4cG9ydHMub3V0bGluZSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lJywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IG91dGxpbmVDb2xvciA9IGV4cG9ydHMub3V0bGluZUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmVDb2xvcicpO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5jb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVVuaXQpKHByb3BzLnRoZW1lLCAnc2hhcGUuYm9yZGVyUmFkaXVzJywgNCwgJ2JvcmRlclJhZGl1cycpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgYm9yZGVyUmFkaXVzOiAoMCwgX3NwYWNpbmcuZ2V0VmFsdWUpKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wcy5ib3JkZXJSYWRpdXMsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5ib3JkZXJSYWRpdXMgPSBib3JkZXJSYWRpdXM7XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHRcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKGJvcmRlciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJDb2xvciwgYm9yZGVyVG9wQ29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGJvcmRlclJhZGl1cywgb3V0bGluZSwgb3V0bGluZUNvbG9yKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGJvcmRlcnM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJvd0dhcCA9IGV4cG9ydHMuZ3JpZFRlbXBsYXRlUm93cyA9IGV4cG9ydHMuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZFRlbXBsYXRlQXJlYXMgPSBleHBvcnRzLmdyaWRSb3cgPSBleHBvcnRzLmdyaWRDb2x1bW4gPSBleHBvcnRzLmdyaWRBdXRvUm93cyA9IGV4cG9ydHMuZ3JpZEF1dG9GbG93ID0gZXhwb3J0cy5ncmlkQXV0b0NvbHVtbnMgPSBleHBvcnRzLmdyaWRBcmVhID0gZXhwb3J0cy5nYXAgPSBleHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmNvbHVtbkdhcCA9IHZvaWQgMDtcbnZhciBfc3R5bGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0eWxlXCIpKTtcbnZhciBfY29tcG9zZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcG9zZVwiKSk7XG52YXIgX3NwYWNpbmcgPSByZXF1aXJlKFwiLi9zcGFjaW5nXCIpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5jb25zdCBnYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5nYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5nYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVVuaXQpKHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdnYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGdhcDogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMuZ2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMuZ2FwID0gZ2FwO1xuZ2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGdhcDogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5nYXAuZmlsdGVyUHJvcHMgPSBbJ2dhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5jb25zdCBjb2x1bW5HYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5jb2x1bW5HYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jb2x1bW5HYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVVuaXQpKHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdjb2x1bW5HYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGNvbHVtbkdhcDogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMuY29sdW1uR2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMuY29sdW1uR2FwID0gY29sdW1uR2FwO1xuY29sdW1uR2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGNvbHVtbkdhcDogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5jb2x1bW5HYXAuZmlsdGVyUHJvcHMgPSBbJ2NvbHVtbkdhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5jb25zdCByb3dHYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5yb3dHYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5yb3dHYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVVuaXQpKHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdyb3dHYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIHJvd0dhcDogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMucm93R2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMucm93R2FwID0gcm93R2FwO1xucm93R2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIHJvd0dhcDogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5yb3dHYXAuZmlsdGVyUHJvcHMgPSBbJ3Jvd0dhcCddO1xuY29uc3QgZ3JpZENvbHVtbiA9IGV4cG9ydHMuZ3JpZENvbHVtbiA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZENvbHVtbidcbn0pO1xuY29uc3QgZ3JpZFJvdyA9IGV4cG9ydHMuZ3JpZFJvdyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFJvdydcbn0pO1xuY29uc3QgZ3JpZEF1dG9GbG93ID0gZXhwb3J0cy5ncmlkQXV0b0Zsb3cgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRBdXRvRmxvdydcbn0pO1xuY29uc3QgZ3JpZEF1dG9Db2x1bW5zID0gZXhwb3J0cy5ncmlkQXV0b0NvbHVtbnMgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRBdXRvQ29sdW1ucydcbn0pO1xuY29uc3QgZ3JpZEF1dG9Sb3dzID0gZXhwb3J0cy5ncmlkQXV0b1Jvd3MgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRBdXRvUm93cydcbn0pO1xuY29uc3QgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQ29sdW1ucydcbn0pO1xuY29uc3QgZ3JpZFRlbXBsYXRlUm93cyA9IGV4cG9ydHMuZ3JpZFRlbXBsYXRlUm93cyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlUm93cydcbn0pO1xuY29uc3QgZ3JpZFRlbXBsYXRlQXJlYXMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUFyZWFzID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVBcmVhcydcbn0pO1xuY29uc3QgZ3JpZEFyZWEgPSBleHBvcnRzLmdyaWRBcmVhID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXJlYSdcbn0pO1xuY29uc3QgZ3JpZCA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShnYXAsIGNvbHVtbkdhcCwgcm93R2FwLCBncmlkQ29sdW1uLCBncmlkUm93LCBncmlkQXV0b0Zsb3csIGdyaWRBdXRvQ29sdW1ucywgZ3JpZEF1dG9Sb3dzLCBncmlkVGVtcGxhdGVDb2x1bW5zLCBncmlkVGVtcGxhdGVSb3dzLCBncmlkVGVtcGxhdGVBcmVhcywgZ3JpZEFyZWEpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZ3JpZDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuY29sb3IgPSBleHBvcnRzLmJnY29sb3IgPSBleHBvcnRzLmJhY2tncm91bmRDb2xvciA9IHZvaWQgMDtcbmV4cG9ydHMucGFsZXR0ZVRyYW5zZm9ybSA9IHBhbGV0dGVUcmFuc2Zvcm07XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xuZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuY29uc3QgY29sb3IgPSBleHBvcnRzLmNvbG9yID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdjb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBiZ2NvbG9yID0gZXhwb3J0cy5iZ2NvbG9yID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYmFja2dyb3VuZENvbG9yID0gZXhwb3J0cy5iYWNrZ3JvdW5kQ29sb3IgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKGNvbG9yLCBiZ2NvbG9yLCBiYWNrZ3JvdW5kQ29sb3IpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gcGFsZXR0ZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2l6ZVdpZHRoID0gZXhwb3J0cy5zaXplSGVpZ2h0ID0gZXhwb3J0cy5taW5XaWR0aCA9IGV4cG9ydHMubWluSGVpZ2h0ID0gZXhwb3J0cy5tYXhXaWR0aCA9IGV4cG9ydHMubWF4SGVpZ2h0ID0gZXhwb3J0cy5oZWlnaHQgPSBleHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmJveFNpemluZyA9IHZvaWQgMDtcbmV4cG9ydHMuc2l6aW5nVHJhbnNmb3JtID0gc2l6aW5nVHJhbnNmb3JtO1xuZXhwb3J0cy53aWR0aCA9IHZvaWQgMDtcbnZhciBfc3R5bGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0eWxlXCIpKTtcbnZhciBfY29tcG9zZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcG9zZVwiKSk7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG5mdW5jdGlvbiBzaXppbmdUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDw9IDEgJiYgdmFsdWUgIT09IDAgPyBgJHt2YWx1ZSAqIDEwMH0lYCA6IHZhbHVlO1xufVxuY29uc3Qgd2lkdGggPSBleHBvcnRzLndpZHRoID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUyO1xuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZVtwcm9wVmFsdWVdKSB8fCBfYnJlYWtwb2ludHMudmFsdWVzW3Byb3BWYWx1ZV07XG4gICAgICBpZiAoIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogc2l6aW5nVHJhbnNmb3JtKHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoKF9wcm9wcyR0aGVtZTIgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lMiA9IF9wcm9wcyR0aGVtZTIuYnJlYWtwb2ludHMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUyLnVuaXQpICE9PSAncHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IGAke2JyZWFrcG9pbnR9JHtwcm9wcy50aGVtZS5icmVha3BvaW50cy51bml0fWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heFdpZHRoOiBicmVha3BvaW50XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wcy5tYXhXaWR0aCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLm1heFdpZHRoID0gbWF4V2lkdGg7XG5tYXhXaWR0aC5maWx0ZXJQcm9wcyA9IFsnbWF4V2lkdGgnXTtcbmNvbnN0IG1pbldpZHRoID0gZXhwb3J0cy5taW5XaWR0aCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnbWluV2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBoZWlnaHQgPSBleHBvcnRzLmhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgbWF4SGVpZ2h0ID0gZXhwb3J0cy5tYXhIZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ21heEhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IG1pbkhlaWdodCA9IGV4cG9ydHMubWluSGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdtaW5IZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBzaXplV2lkdGggPSBleHBvcnRzLnNpemVXaWR0aCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBzaXplSGVpZ2h0ID0gZXhwb3J0cy5zaXplSGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBib3hTaXppbmcgPSBleHBvcnRzLmJveFNpemluZyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnYm94U2l6aW5nJ1xufSk7XG5jb25zdCBzaXppbmcgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkod2lkdGgsIG1heFdpZHRoLCBtaW5XaWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQsIG1pbkhlaWdodCwgYm94U2l6aW5nKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHNpemluZzsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3NwYWNpbmcgPSByZXF1aXJlKFwiLi4vc3BhY2luZ1wiKTtcbnZhciBfYm9yZGVycyA9IHJlcXVpcmUoXCIuLi9ib3JkZXJzXCIpO1xudmFyIF9jc3NHcmlkID0gcmVxdWlyZShcIi4uL2Nzc0dyaWRcIik7XG52YXIgX3BhbGV0dGUgPSByZXF1aXJlKFwiLi4vcGFsZXR0ZVwiKTtcbnZhciBfc2l6aW5nID0gcmVxdWlyZShcIi4uL3NpemluZ1wiKTtcbmNvbnN0IGRlZmF1bHRTeENvbmZpZyA9IHtcbiAgLy8gYm9yZGVyc1xuICBib3JkZXI6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclRvcENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSaWdodENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyTGVmdENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBvdXRsaW5lQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJhZGl1czoge1xuICAgIHRoZW1lS2V5OiAnc2hhcGUuYm9yZGVyUmFkaXVzJyxcbiAgICBzdHlsZTogX2JvcmRlcnMuYm9yZGVyUmFkaXVzXG4gIH0sXG4gIC8vIHBhbGV0dGVcbiAgY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiZ2NvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gICAgdHJhbnNmb3JtOiBfcGFsZXR0ZS5wYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBfcGFsZXR0ZS5wYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIC8vIHNwYWNpbmdcbiAgcDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHB0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBsOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHg6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBweToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmc6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nVG9wOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1JpZ2h0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0JvdHRvbToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdMZWZ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1g6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmU6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBtOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1iOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtbDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXg6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG15OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW46IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblRvcDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luUmlnaHQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJvdHRvbToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luTGVmdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luWDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luWToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9jazoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIC8vIGRpc3BsYXlcbiAgZGlzcGxheVByaW50OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRyYW5zZm9ybTogdmFsdWUgPT4gKHtcbiAgICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICAgIGRpc3BsYXk6IHZhbHVlXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgZGlzcGxheToge30sXG4gIG92ZXJmbG93OiB7fSxcbiAgdGV4dE92ZXJmbG93OiB7fSxcbiAgdmlzaWJpbGl0eToge30sXG4gIHdoaXRlU3BhY2U6IHt9LFxuICAvLyBmbGV4Ym94XG4gIGZsZXhCYXNpczoge30sXG4gIGZsZXhEaXJlY3Rpb246IHt9LFxuICBmbGV4V3JhcDoge30sXG4gIGp1c3RpZnlDb250ZW50OiB7fSxcbiAgYWxpZ25JdGVtczoge30sXG4gIGFsaWduQ29udGVudDoge30sXG4gIG9yZGVyOiB7fSxcbiAgZmxleDoge30sXG4gIGZsZXhHcm93OiB7fSxcbiAgZmxleFNocmluazoge30sXG4gIGFsaWduU2VsZjoge30sXG4gIGp1c3RpZnlJdGVtczoge30sXG4gIGp1c3RpZnlTZWxmOiB7fSxcbiAgLy8gZ3JpZFxuICBnYXA6IHtcbiAgICBzdHlsZTogX2Nzc0dyaWQuZ2FwXG4gIH0sXG4gIHJvd0dhcDoge1xuICAgIHN0eWxlOiBfY3NzR3JpZC5yb3dHYXBcbiAgfSxcbiAgY29sdW1uR2FwOiB7XG4gICAgc3R5bGU6IF9jc3NHcmlkLmNvbHVtbkdhcFxuICB9LFxuICBncmlkQ29sdW1uOiB7fSxcbiAgZ3JpZFJvdzoge30sXG4gIGdyaWRBdXRvRmxvdzoge30sXG4gIGdyaWRBdXRvQ29sdW1uczoge30sXG4gIGdyaWRBdXRvUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHt9LFxuICBncmlkVGVtcGxhdGVSb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQXJlYXM6IHt9LFxuICBncmlkQXJlYToge30sXG4gIC8vIHBvc2l0aW9uc1xuICBwb3NpdGlvbjoge30sXG4gIHpJbmRleDoge1xuICAgIHRoZW1lS2V5OiAnekluZGV4J1xuICB9LFxuICB0b3A6IHt9LFxuICByaWdodDoge30sXG4gIGJvdHRvbToge30sXG4gIGxlZnQ6IHt9LFxuICAvLyBzaGFkb3dzXG4gIGJveFNoYWRvdzoge1xuICAgIHRoZW1lS2V5OiAnc2hhZG93cydcbiAgfSxcbiAgLy8gc2l6aW5nXG4gIHdpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhXaWR0aDoge1xuICAgIHN0eWxlOiBfc2l6aW5nLm1heFdpZHRoXG4gIH0sXG4gIG1pbldpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heEhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWluSGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBib3hTaXppbmc6IHt9LFxuICAvLyB0eXBvZ3JhcGh5XG4gIGZvbnRGYW1pbHk6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U3R5bGU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRXZWlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGxldHRlclNwYWNpbmc6IHt9LFxuICB0ZXh0VHJhbnNmb3JtOiB7fSxcbiAgbGluZUhlaWdodDoge30sXG4gIHRleHRBbGlnbjoge30sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9XG59O1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdFN4Q29uZmlnOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3g7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2NhcGl0YWxpemVcIikpO1xudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL21lcmdlXCIpKTtcbnZhciBfc3R5bGUgPSByZXF1aXJlKFwiLi4vc3R5bGVcIik7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4uL2JyZWFrcG9pbnRzXCIpO1xudmFyIF9kZWZhdWx0U3hDb25maWcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RlZmF1bHRTeENvbmZpZ1wiKSk7XG5mdW5jdGlvbiBvYmplY3RzSGF2ZVNhbWVLZXlzKC4uLm9iamVjdHMpIHtcbiAgY29uc3QgYWxsS2V5cyA9IG9iamVjdHMucmVkdWNlKChrZXlzLCBvYmplY3QpID0+IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKG9iamVjdCkpLCBbXSk7XG4gIGNvbnN0IHVuaW9uID0gbmV3IFNldChhbGxLZXlzKTtcbiAgcmV0dXJuIG9iamVjdHMuZXZlcnkob2JqZWN0ID0+IHVuaW9uLnNpemUgPT09IE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoKTtcbn1cbmZ1bmN0aW9uIGNhbGxJZkZuKG1heWJlRm4sIGFyZykge1xuICByZXR1cm4gdHlwZW9mIG1heWJlRm4gPT09ICdmdW5jdGlvbicgPyBtYXliZUZuKGFyZykgOiBtYXliZUZuO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKSB7XG4gIGZ1bmN0aW9uIGdldFRoZW1lVmFsdWUocHJvcCwgdmFsLCB0aGVtZSwgY29uZmlnKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICBbcHJvcF06IHZhbCxcbiAgICAgIHRoZW1lXG4gICAgfTtcbiAgICBjb25zdCBvcHRpb25zID0gY29uZmlnW3Byb3BdO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGNzc1Byb3BlcnR5ID0gcHJvcCxcbiAgICAgIHRoZW1lS2V5LFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgc3R5bGVcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zODEyM1xuICAgIGlmICh0aGVtZUtleSA9PT0gJ3R5cG9ncmFwaHknICYmIHZhbCA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gKDAsIF9zdHlsZS5nZXRQYXRoKSh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGlmIChzdHlsZSkge1xuICAgICAgcmV0dXJuIHN0eWxlKHByb3BzKTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlRmluYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gKDAsIF9zdHlsZS5nZXRTdHlsZVZhbHVlKSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSAoMCwgX3N0eWxlLmdldFN0eWxlVmFsdWUpKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogKDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKHByb3BWYWx1ZUZpbmFsKX1gLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICB9XG4gICAgICBpZiAoY3NzUHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtjc3NQcm9wZXJ0eV06IHZhbHVlXG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCB2YWwsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gc3R5bGVGdW5jdGlvblN4KHByb3BzKSB7XG4gICAgdmFyIF90aGVtZSR1bnN0YWJsZV9zeENvbjtcbiAgICBjb25zdCB7XG4gICAgICBzeCxcbiAgICAgIHRoZW1lID0ge31cbiAgICB9ID0gcHJvcHMgfHwge307XG4gICAgaWYgKCFzeCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIEVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cyB3aWxsIG5lZ2xlY3QgbnVsbFxuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSAoX3RoZW1lJHVuc3RhYmxlX3N4Q29uID0gdGhlbWUudW5zdGFibGVfc3hDb25maWcpICE9IG51bGwgPyBfdGhlbWUkdW5zdGFibGVfc3hDb24gOiBfZGVmYXVsdFN4Q29uZmlnLmRlZmF1bHQ7XG5cbiAgICAvKlxuICAgICAqIFJlY2VpdmUgYHN4SW5wdXRgIGFzIG9iamVjdCBvciBjYWxsYmFja1xuICAgICAqIGFuZCB0aGVuIHJlY3Vyc2l2ZWx5IGNoZWNrIGtleXMgJiB2YWx1ZXMgdG8gY3JlYXRlIG1lZGlhIHF1ZXJ5IG9iamVjdCBzdHlsZXMuXG4gICAgICogKHRoZSByZXN1bHQgd2lsbCBiZSB1c2VkIGluIGBzdHlsZWRgKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHN4SW5wdXQpIHtcbiAgICAgIGxldCBzeE9iamVjdCA9IHN4SW5wdXQ7XG4gICAgICBpZiAodHlwZW9mIHN4SW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc3hPYmplY3QgPSBzeElucHV0KHRoZW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN4SW5wdXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHJldHVybiBzeElucHV0O1xuICAgICAgfVxuICAgICAgaWYgKCFzeE9iamVjdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSAoMCwgX2JyZWFrcG9pbnRzLmNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCkodGhlbWUuYnJlYWtwb2ludHMpO1xuICAgICAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyk7XG4gICAgICBsZXQgY3NzID0gZW1wdHlCcmVha3BvaW50cztcbiAgICAgIE9iamVjdC5rZXlzKHN4T2JqZWN0KS5mb3JFYWNoKHN0eWxlS2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsSWZGbihzeE9iamVjdFtzdHlsZUtleV0sIHRoZW1lKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1tzdHlsZUtleV0pIHtcbiAgICAgICAgICAgICAgY3NzID0gKDAsIF9tZXJnZS5kZWZhdWx0KShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9ICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBicmVha3BvaW50c1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3NzID0gKDAsIF9tZXJnZS5kZWZhdWx0KShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLnJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKShicmVha3BvaW50c0tleXMsIGNzcyk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHN4KSA/IHN4Lm1hcCh0cmF2ZXJzZSkgOiB0cmF2ZXJzZShzeCk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeDtcbn1cbmNvbnN0IHN0eWxlRnVuY3Rpb25TeCA9IHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpO1xuc3R5bGVGdW5jdGlvblN4LmZpbHRlclByb3BzID0gWydzeCddO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc3R5bGVGdW5jdGlvblN4OyIsICJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXh0ZW5kU3hQcm9wO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfZGVlcG1lcmdlID0gcmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpO1xudmFyIF9kZWZhdWx0U3hDb25maWcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RlZmF1bHRTeENvbmZpZ1wiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJzeFwiXTtcbmNvbnN0IHNwbGl0UHJvcHMgPSBwcm9wcyA9PiB7XG4gIHZhciBfcHJvcHMkdGhlbWUkdW5zdGFibGUsIF9wcm9wcyR0aGVtZTtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHN5c3RlbVByb3BzOiB7fSxcbiAgICBvdGhlclByb3BzOiB7fVxuICB9O1xuICBjb25zdCBjb25maWcgPSAoX3Byb3BzJHRoZW1lJHVuc3RhYmxlID0gcHJvcHMgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUudW5zdGFibGVfc3hDb25maWcpICE9IG51bGwgPyBfcHJvcHMkdGhlbWUkdW5zdGFibGUgOiBfZGVmYXVsdFN4Q29uZmlnLmRlZmF1bHQ7XG4gIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgIGlmIChjb25maWdbcHJvcF0pIHtcbiAgICAgIHJlc3VsdC5zeXN0ZW1Qcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQub3RoZXJQcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZnVuY3Rpb24gZXh0ZW5kU3hQcm9wKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICAgIHN4OiBpblN4XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIHN5c3RlbVByb3BzLFxuICAgIG90aGVyUHJvcHNcbiAgfSA9IHNwbGl0UHJvcHMob3RoZXIpO1xuICBsZXQgZmluYWxTeDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcbiAgICAgIGlmICghKDAsIF9kZWVwbWVyZ2UuaXNQbGFpbk9iamVjdCkocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gc3lzdGVtUHJvcHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgc3lzdGVtUHJvcHMsIHJlc3VsdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmaW5hbFN4ID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG4gIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBvdGhlclByb3BzLCB7XG4gICAgc3g6IGZpbmFsU3hcbiAgfSk7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHRlbmRTeFByb3BcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2V4dGVuZFN4UHJvcC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfc3R5bGVGdW5jdGlvblN4LnVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN0YWJsZV9kZWZhdWx0U3hDb25maWdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfc3R5bGVGdW5jdGlvblN4ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbnZhciBfZXh0ZW5kU3hQcm9wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9leHRlbmRTeFByb3BcIikpO1xudmFyIF9kZWZhdWx0U3hDb25maWcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RlZmF1bHRTeENvbmZpZ1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYnJlYWtwb2ludEtleXMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVCcmVha3BvaW50cztcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZXNcIiwgXCJ1bml0XCIsIFwic3RlcFwiXTtcbi8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbi8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbmNvbnN0IGJyZWFrcG9pbnRLZXlzID0gZXhwb3J0cy5icmVha3BvaW50S2V5cyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXTtcbmNvbnN0IHNvcnRCcmVha3BvaW50c1ZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzQXNBcnJheSA9IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKGtleSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWw6IHZhbHVlc1trZXldXG4gIH0pKSB8fCBbXTtcbiAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgYnJlYWtwb2ludHNBc0FycmF5LnNvcnQoKGJyZWFrcG9pbnQxLCBicmVha3BvaW50MikgPT4gYnJlYWtwb2ludDEudmFsIC0gYnJlYWtwb2ludDIudmFsKTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzQXNBcnJheS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIGFjYywge1xuICAgICAgW29iai5rZXldOiBvYmoudmFsXG4gICAgfSk7XG4gIH0sIHt9KTtcbn07XG5cbi8vIEtlZXAgaW4gbWluZCB0aGF0IEBtZWRpYSBpcyBpbmNsdXNpdmUgYnkgdGhlIENTUyBzcGVjaWZpY2F0aW9uLlxuZnVuY3Rpb24gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4gICAgICAvLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbSkuXG4gICAgICB2YWx1ZXMgPSB7XG4gICAgICAgIHhzOiAwLFxuICAgICAgICAvLyBwaG9uZVxuICAgICAgICBzbTogNjAwLFxuICAgICAgICAvLyB0YWJsZXRcbiAgICAgICAgbWQ6IDkwMCxcbiAgICAgICAgLy8gc21hbGwgbGFwdG9wXG4gICAgICAgIGxnOiAxMjAwLFxuICAgICAgICAvLyBkZXNrdG9wXG4gICAgICAgIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuICAgICAgfSxcbiAgICAgIHVuaXQgPSAncHgnLFxuICAgICAgc3RlcCA9IDVcbiAgICB9ID0gYnJlYWtwb2ludHMsXG4gICAgb3RoZXIgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKGJyZWFrcG9pbnRzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBzb3J0ZWRWYWx1ZXMgPSBzb3J0QnJlYWtwb2ludHNWYWx1ZXModmFsdWVzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNvcnRlZFZhbHVlcyk7XG4gIGZ1bmN0aW9uIHVwKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZX0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gZG93bihrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWF4LXdpZHRoOiR7dmFsdWUgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBiZXR3ZWVuKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBlbmRJbmRleCA9IGtleXMuaW5kZXhPZihlbmQpO1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt0eXBlb2YgdmFsdWVzW3N0YXJ0XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNbc3RhcnRdIDogc3RhcnR9JHt1bml0fSkgYW5kIGAgKyBgKG1heC13aWR0aDokeyhlbmRJbmRleCAhPT0gLTEgJiYgdHlwZW9mIHZhbHVlc1trZXlzW2VuZEluZGV4XV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA6IGVuZCkgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBvbmx5KGtleSkge1xuICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSArIDEgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gdXAoa2V5KTtcbiAgfVxuICBmdW5jdGlvbiBub3Qoa2V5KSB7XG4gICAgLy8gaGFuZGxlIGZpcnN0IGFuZCBsYXN0IGtleSBzZXBhcmF0ZWx5LCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5XG4gICAgY29uc3Qga2V5SW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcbiAgICBpZiAoa2V5SW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB1cChrZXlzWzFdKTtcbiAgICB9XG4gICAgaWYgKGtleUluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBkb3duKGtleXNba2V5SW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pLnJlcGxhY2UoJ0BtZWRpYScsICdAbWVkaWEgbm90IGFsbCBhbmQnKTtcbiAgfVxuICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAga2V5cyxcbiAgICB2YWx1ZXM6IHNvcnRlZFZhbHVlcyxcbiAgICB1cCxcbiAgICBkb3duLFxuICAgIGJldHdlZW4sXG4gICAgb25seSxcbiAgICBub3QsXG4gICAgdW5pdFxuICB9LCBvdGhlcik7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuY29uc3Qgc2hhcGUgPSB7XG4gIGJvcmRlclJhZGl1czogNFxufTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHNoYXBlOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVNwYWNpbmc7XG52YXIgX3NwYWNpbmcgPSByZXF1aXJlKFwiLi4vc3BhY2luZ1wiKTtcbi8vIFRoZSBkaWZmZXJlbnQgc2lnbmF0dXJlcyBpbXBseSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgdGhlaXIgYXJndW1lbnRzIHRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIHN0cnVjdHVyYWxseS5cbi8vIFdlIGV4cHJlc3MgdGhlIGRpZmZlcmVuY2Ugd2l0aCB2YXJpYWJsZSBuYW1lcy5cblxuZnVuY3Rpb24gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQgPSA4KSB7XG4gIC8vIEFscmVhZHkgdHJhbnNmb3JtZWQuXG4gIGlmIChzcGFjaW5nSW5wdXQubXVpKSB7XG4gICAgcmV0dXJuIHNwYWNpbmdJbnB1dDtcbiAgfVxuXG4gIC8vIE1hdGVyaWFsIERlc2lnbiBsYXlvdXRzIGFyZSB2aXN1YWxseSBiYWxhbmNlZC4gTW9zdCBtZWFzdXJlbWVudHMgYWxpZ24gdG8gYW4gOGRwIGdyaWQsIHdoaWNoIGFsaWducyBib3RoIHNwYWNpbmcgYW5kIHRoZSBvdmVyYWxsIGxheW91dC5cbiAgLy8gU21hbGxlciBjb21wb25lbnRzLCBzdWNoIGFzIGljb25zLCBjYW4gYWxpZ24gdG8gYSA0ZHAgZ3JpZC5cbiAgLy8gaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vbGF5b3V0L3VuZGVyc3RhbmRpbmctbGF5b3V0Lmh0bWxcbiAgY29uc3QgdHJhbnNmb3JtID0gKDAsIF9zcGFjaW5nLmNyZWF0ZVVuYXJ5U3BhY2luZykoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGFwcGx5U3R5bGVzO1xuLyoqXG4gKiBBIHVuaXZlcnNhbCB1dGlsaXR5IHRvIHN0eWxlIGNvbXBvbmVudHMgd2l0aCBtdWx0aXBsZSBjb2xvciBtb2Rlcy4gQWx3YXlzIHVzZSBpdCBmcm9tIHRoZSB0aGVtZSBvYmplY3QuXG4gKiBJdCB3b3JrcyB3aXRoOlxuICogIC0gW0Jhc2ljIHRoZW1lXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9kYXJrLW1vZGUvKVxuICogIC0gW0NTUyB0aGVtZSB2YXJpYWJsZXNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9leHBlcmltZW50YWwtYXBpL2Nzcy10aGVtZS12YXJpYWJsZXMvb3ZlcnZpZXcvKVxuICogIC0gWmVyby1ydW50aW1lIGVuZ2luZVxuICpcbiAqIFRpcHM6IFVzZSBhbiBhcnJheSBvdmVyIG9iamVjdCBzcHJlYWQgYW5kIHBsYWNlIGB0aGVtZS5hcHBseVN0eWxlcygpYCBsYXN0LlxuICpcbiAqIFx1MjcwNSBbeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSwgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KV1cbiAqXG4gKiBcdUQ4M0RcdURFQUIgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScsIC4uLnRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSl9XG4gKlxuICogQGV4YW1wbGVcbiAqIDEuIHVzaW5nIHdpdGggYHN0eWxlZGA6XG4gKiBgYGBqc3hcbiAqICAgY29uc3QgQ29tcG9uZW50ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgfSksXG4gKiAgIF0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIDIuIHVzaW5nIHdpdGggYHN4YCBwcm9wOlxuICogYGBganN4XG4gKiAgIDxCb3ggc3g9e3RoZW1lID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgICB9KSxcbiAqICAgICBdfVxuICogICAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIDMuIHRoZW1pbmcgYSBjb21wb25lbnQ6XG4gKiBgYGBqc3hcbiAqICAgZXh0ZW5kVGhlbWUoe1xuICogICAgIGNvbXBvbmVudHM6IHtcbiAqICAgICAgIE11aUJ1dHRvbjoge1xuICogICAgICAgICBzdHlsZU92ZXJyaWRlczoge1xuICogICAgICAgICAgIHJvb3Q6ICh7IHRoZW1lIH0pID0+IFtcbiAqICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgICAgICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgICAgICAgICAgfSksXG4gKiAgICAgICAgICAgXSxcbiAqICAgICAgICAgfSxcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH0pXG4gKmBgYFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhrZXksIHN0eWxlcykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgJ2FueScgdHlwZVxuICBjb25zdCB0aGVtZSA9IHRoaXM7XG4gIGlmICh0aGVtZS52YXJzICYmIHR5cGVvZiB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgQ3NzVmFyc1Byb3ZpZGVyIGlzIHVzZWQgYXMgYSBwcm92aWRlcixcbiAgICAvLyByZXR1cm5zICcqIDp3aGVyZShbZGF0YS1tdWktY29sb3Itc2NoZW1lPVwibGlnaHR8ZGFya1wiXSkgJidcbiAgICBjb25zdCBzZWxlY3RvciA9IHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3Ioa2V5KS5yZXBsYWNlKC8oXFxbW15cXF1dK1xcXSkvLCAnKjp3aGVyZSgkMSknKTtcbiAgICByZXR1cm4ge1xuICAgICAgW3NlbGVjdG9yXTogc3R5bGVzXG4gICAgfTtcbiAgfVxuICBpZiAodGhlbWUucGFsZXR0ZS5tb2RlID09PSBrZXkpIHtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG4gIHJldHVybiB7fTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpKTtcbnZhciBfY3JlYXRlQnJlYWtwb2ludHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZUJyZWFrcG9pbnRzXCIpKTtcbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcbnZhciBfY3JlYXRlU3BhY2luZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY3JlYXRlU3BhY2luZ1wiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3hcIikpO1xudmFyIF9kZWZhdWx0U3hDb25maWcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnXCIpKTtcbnZhciBfYXBwbHlTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FwcGx5U3R5bGVzXCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwicGFsZXR0ZVwiLCBcInNwYWNpbmdcIiwgXCJzaGFwZVwiXTtcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzID0gKDAsIF9jcmVhdGVCcmVha3BvaW50cy5kZWZhdWx0KShicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3Qgc3BhY2luZyA9ICgwLCBfY3JlYXRlU3BhY2luZy5kZWZhdWx0KShzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSAoMCwgX2RlZXBtZXJnZS5kZWZhdWx0KSh7XG4gICAgYnJlYWtwb2ludHMsXG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICAvLyBJbmplY3QgY29tcG9uZW50IGRlZmluaXRpb25zLlxuICAgIHBhbGV0dGU6ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgbW9kZTogJ2xpZ2h0J1xuICAgIH0sIHBhbGV0dGVJbnB1dCksXG4gICAgc3BhY2luZyxcbiAgICBzaGFwZTogKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX3NoYXBlLmRlZmF1bHQsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBfYXBwbHlTdHlsZXMuZGVmYXVsdDtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBfZGVmYXVsdFN4Q29uZmlnLmRlZmF1bHQsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlVGhlbWU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVUaGVtZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByaXZhdGVfY3JlYXRlQnJlYWtwb2ludHNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NyZWF0ZUJyZWFrcG9pbnRzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdGFibGVfYXBwbHlTdHlsZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwcGx5U3R5bGVzLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9jcmVhdGVUaGVtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY3JlYXRlVGhlbWVcIikpO1xudmFyIF9jcmVhdGVCcmVha3BvaW50cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY3JlYXRlQnJlYWtwb2ludHNcIikpO1xudmFyIF9hcHBseVN0eWxlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYXBwbHlTdHlsZXNcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hbHBoYSA9IGFscGhhO1xuZXhwb3J0cy5ibGVuZCA9IGJsZW5kO1xuZXhwb3J0cy5jb2xvckNoYW5uZWwgPSB2b2lkIDA7XG5leHBvcnRzLmRhcmtlbiA9IGRhcmtlbjtcbmV4cG9ydHMuZGVjb21wb3NlQ29sb3IgPSBkZWNvbXBvc2VDb2xvcjtcbmV4cG9ydHMuZW1waGFzaXplID0gZW1waGFzaXplO1xuZXhwb3J0cy5nZXRDb250cmFzdFJhdGlvID0gZ2V0Q29udHJhc3RSYXRpbztcbmV4cG9ydHMuZ2V0THVtaW5hbmNlID0gZ2V0THVtaW5hbmNlO1xuZXhwb3J0cy5oZXhUb1JnYiA9IGhleFRvUmdiO1xuZXhwb3J0cy5oc2xUb1JnYiA9IGhzbFRvUmdiO1xuZXhwb3J0cy5saWdodGVuID0gbGlnaHRlbjtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlQWxwaGEgPSBwcml2YXRlX3NhZmVBbHBoYTtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVEYXJrZW4gPSBwcml2YXRlX3NhZmVEYXJrZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUVtcGhhc2l6ZSA9IHByaXZhdGVfc2FmZUVtcGhhc2l6ZTtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlTGlnaHRlbiA9IHByaXZhdGVfc2FmZUxpZ2h0ZW47XG5leHBvcnRzLnJlY29tcG9zZUNvbG9yID0gcmVjb21wb3NlQ29sb3I7XG5leHBvcnRzLnJnYlRvSGV4ID0gcmdiVG9IZXg7XG52YXIgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiKSk7XG52YXIgX2NsYW1wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jbGFtcFwiKSk7XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHZhbHVlIGlzIGxpbWl0ZWQgdG8gdGhlIGdpdmVuIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBjbGFtcGVkXG4gKiBAcGFyYW0ge251bWJlcn0gbWluIFRoZSBsb3dlciBib3VuZGFyeSBvZiB0aGUgb3V0cHV0IHJhbmdlXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IFRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgb3V0cHV0IHJhbmdlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBBIG51bWJlciBpbiB0aGUgcmFuZ2UgW21pbiwgbWF4XVxuICovXG5mdW5jdGlvbiBjbGFtcFdyYXBwZXIodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHZhbHVlIHByb3ZpZGVkICR7dmFsdWV9IGlzIG91dCBvZiByYW5nZSBbJHttaW59LCAke21heH1dLmApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKDAsIF9jbGFtcC5kZWZhdWx0KSh2YWx1ZSwgbWluLCBtYXgpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgaGV4IGZvcm1hdCB0byBDU1MgcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhleCBjb2xvciwgaS5lLiAjbm5uIG9yICNubm5ubm5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaGV4VG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBjb2xvci5zbGljZSgxKTtcbiAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGAuezEsJHtjb2xvci5sZW5ndGggPj0gNiA/IDIgOiAxfX1gLCAnZycpO1xuICBsZXQgY29sb3JzID0gY29sb3IubWF0Y2gocmUpO1xuICBpZiAoY29sb3JzICYmIGNvbG9yc1swXS5sZW5ndGggPT09IDEpIHtcbiAgICBjb2xvcnMgPSBjb2xvcnMubWFwKG4gPT4gbiArIG4pO1xuICB9XG4gIHJldHVybiBjb2xvcnMgPyBgcmdiJHtjb2xvcnMubGVuZ3RoID09PSA0ID8gJ2EnIDogJyd9KCR7Y29sb3JzLm1hcCgobiwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaW5kZXggPCAzID8gcGFyc2VJbnQobiwgMTYpIDogTWF0aC5yb3VuZChwYXJzZUludChuLCAxNikgLyAyNTUgKiAxMDAwKSAvIDEwMDA7XG4gIH0pLmpvaW4oJywgJyl9KWAgOiAnJztcbn1cbmZ1bmN0aW9uIGludFRvSGV4KGludCkge1xuICBjb25zdCBoZXggPSBpbnQudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSB0eXBlIGFuZCB2YWx1ZXMgb2YgYSBjb2xvci5cbiAqXG4gKiBOb3RlOiBEb2VzIG5vdCBzdXBwb3J0IHJnYiAlIHZhbHVlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEByZXR1cm5zIHtvYmplY3R9IC0gQSBNVUkgY29sb3Igb2JqZWN0OiB7dHlwZTogc3RyaW5nLCB2YWx1ZXM6IG51bWJlcltdfVxuICovXG5mdW5jdGlvbiBkZWNvbXBvc2VDb2xvcihjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci50eXBlKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG4gIGlmIChjb2xvci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgIHJldHVybiBkZWNvbXBvc2VDb2xvcihoZXhUb1JnYihjb2xvcikpO1xuICB9XG4gIGNvbnN0IG1hcmtlciA9IGNvbG9yLmluZGV4T2YoJygnKTtcbiAgY29uc3QgdHlwZSA9IGNvbG9yLnN1YnN0cmluZygwLCBtYXJrZXIpO1xuICBpZiAoWydyZ2InLCAncmdiYScsICdoc2wnLCAnaHNsYScsICdjb2xvciddLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFVuc3VwcG9ydGVkIFxcYCR7Y29sb3J9XFxgIGNvbG9yLlxuVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQ6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKCkuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSg5LCBjb2xvcikpO1xuICB9XG4gIGxldCB2YWx1ZXMgPSBjb2xvci5zdWJzdHJpbmcobWFya2VyICsgMSwgY29sb3IubGVuZ3RoIC0gMSk7XG4gIGxldCBjb2xvclNwYWNlO1xuICBpZiAodHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIHZhbHVlcyA9IHZhbHVlcy5zcGxpdCgnICcpO1xuICAgIGNvbG9yU3BhY2UgPSB2YWx1ZXMuc2hpZnQoKTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gNCAmJiB2YWx1ZXNbM10uY2hhckF0KDApID09PSAnLycpIHtcbiAgICAgIHZhbHVlc1szXSA9IHZhbHVlc1szXS5zbGljZSgxKTtcbiAgICB9XG4gICAgaWYgKFsnc3JnYicsICdkaXNwbGF5LXAzJywgJ2E5OC1yZ2InLCAncHJvcGhvdG8tcmdiJywgJ3JlYy0yMDIwJ10uaW5kZXhPZihjb2xvclNwYWNlKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiB1bnN1cHBvcnRlZCBcXGAke2NvbG9yU3BhY2V9XFxgIGNvbG9yIHNwYWNlLlxuVGhlIGZvbGxvd2luZyBjb2xvciBzcGFjZXMgYXJlIHN1cHBvcnRlZDogc3JnYiwgZGlzcGxheS1wMywgYTk4LXJnYiwgcHJvcGhvdG8tcmdiLCByZWMtMjAyMC5gIDogKDAsIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyLmRlZmF1bHQpKDEwLCBjb2xvclNwYWNlKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IHZhbHVlcy5zcGxpdCgnLCcpO1xuICB9XG4gIHZhbHVlcyA9IHZhbHVlcy5tYXAodmFsdWUgPT4gcGFyc2VGbG9hdCh2YWx1ZSkpO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgdmFsdWVzLFxuICAgIGNvbG9yU3BhY2VcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY2hhbm5lbCBjcmVhdGVkIGZyb20gdGhlIGlucHV0IGNvbG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGNoYW5uZWwgZm9yIHRoZSBjb2xvciwgdGhhdCBjYW4gYmUgdXNlZCBpbiByZ2JhIG9yIGhzbGEgY29sb3JzXG4gKi9cbmNvbnN0IGNvbG9yQ2hhbm5lbCA9IGNvbG9yID0+IHtcbiAgY29uc3QgZGVjb21wb3NlZENvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gZGVjb21wb3NlZENvbG9yLnZhbHVlcy5zbGljZSgwLCAzKS5tYXAoKHZhbCwgaWR4KSA9PiBkZWNvbXBvc2VkQ29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEgJiYgaWR4ICE9PSAwID8gYCR7dmFsfSVgIDogdmFsKS5qb2luKCcgJyk7XG59O1xuZXhwb3J0cy5jb2xvckNoYW5uZWwgPSBjb2xvckNoYW5uZWw7XG5jb25zdCBwcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSAoY29sb3IsIHdhcm5pbmcpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY29sb3JDaGFubmVsKGNvbG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIG9iamVjdCB3aXRoIHR5cGUgYW5kIHZhbHVlcyB0byBhIHN0cmluZy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2xvciAtIERlY29tcG9zZWQgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvci50eXBlIC0gT25lIG9mOiAncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXG4gKiBAcGFyYW0ge2FycmF5fSBjb2xvci52YWx1ZXMgLSBbbixuLG5dIG9yIFtuLG4sbixuXVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nXG4gKi9cbmV4cG9ydHMucHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsO1xuZnVuY3Rpb24gcmVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgY29sb3JTcGFjZVxuICB9ID0gY29sb3I7XG4gIGxldCB7XG4gICAgdmFsdWVzXG4gIH0gPSBjb2xvcjtcbiAgaWYgKHR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgLy8gT25seSBjb252ZXJ0IHRoZSBmaXJzdCAzIHZhbHVlcyB0byBpbnQgKGkuZS4gbm90IGFscGhhKVxuICAgIHZhbHVlcyA9IHZhbHVlcy5tYXAoKG4sIGkpID0+IGkgPCAzID8gcGFyc2VJbnQobiwgMTApIDogbik7XG4gIH0gZWxzZSBpZiAodHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICB2YWx1ZXNbMV0gPSBgJHt2YWx1ZXNbMV19JWA7XG4gICAgdmFsdWVzWzJdID0gYCR7dmFsdWVzWzJdfSVgO1xuICB9XG4gIGlmICh0eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgdmFsdWVzID0gYCR7Y29sb3JTcGFjZX0gJHt2YWx1ZXMuam9pbignICcpfWA7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gYCR7dmFsdWVzLmpvaW4oJywgJyl9YDtcbiAgfVxuICByZXR1cm4gYCR7dHlwZX0oJHt2YWx1ZXN9KWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIENTUyByZ2IgZm9ybWF0IHRvIENTUyBoZXggZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gUkdCIGNvbG9yLCBpLmUuIHJnYihuLCBuLCBuKVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgcmdiIGNvbG9yIHN0cmluZywgaS5lLiAjbm5ubm5uXG4gKi9cbmZ1bmN0aW9uIHJnYlRvSGV4KGNvbG9yKSB7XG4gIC8vIElkZW1wb3RlbnRcbiAgaWYgKGNvbG9yLmluZGV4T2YoJyMnKSA9PT0gMCkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBjb25zdCB7XG4gICAgdmFsdWVzXG4gIH0gPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHJldHVybiBgIyR7dmFsdWVzLm1hcCgobiwgaSkgPT4gaW50VG9IZXgoaSA9PT0gMyA/IE1hdGgucm91bmQoMjU1ICogbikgOiBuKSkuam9pbignJyl9YDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gaHNsIGZvcm1hdCB0byByZ2IgZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gSFNMIGNvbG9yIHZhbHVlc1xuICogQHJldHVybnMge3N0cmluZ30gcmdiIGNvbG9yIHZhbHVlc1xuICovXG5mdW5jdGlvbiBoc2xUb1JnYihjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGNvbnN0IGggPSB2YWx1ZXNbMF07XG4gIGNvbnN0IHMgPSB2YWx1ZXNbMV0gLyAxMDA7XG4gIGNvbnN0IGwgPSB2YWx1ZXNbMl0gLyAxMDA7XG4gIGNvbnN0IGEgPSBzICogTWF0aC5taW4obCwgMSAtIGwpO1xuICBjb25zdCBmID0gKG4sIGsgPSAobiArIGggLyAzMCkgJSAxMikgPT4gbCAtIGEgKiBNYXRoLm1heChNYXRoLm1pbihrIC0gMywgOSAtIGssIDEpLCAtMSk7XG4gIGxldCB0eXBlID0gJ3JnYic7XG4gIGNvbnN0IHJnYiA9IFtNYXRoLnJvdW5kKGYoMCkgKiAyNTUpLCBNYXRoLnJvdW5kKGYoOCkgKiAyNTUpLCBNYXRoLnJvdW5kKGYoNCkgKiAyNTUpXTtcbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdoc2xhJykge1xuICAgIHR5cGUgKz0gJ2EnO1xuICAgIHJnYi5wdXNoKHZhbHVlc1szXSk7XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlLFxuICAgIHZhbHVlczogcmdiXG4gIH0pO1xufVxuLyoqXG4gKiBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiBhbnkgcG9pbnQgaW4gYSBjb2xvciBzcGFjZSxcbiAqIG5vcm1hbGl6ZWQgdG8gMCBmb3IgZGFya2VzdCBibGFjayBhbmQgMSBmb3IgbGlnaHRlc3Qgd2hpdGUuXG4gKlxuICogRm9ybXVsYTogaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC1URUNIUy9HMTcuaHRtbCNHMTctdGVzdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSByZWxhdGl2ZSBicmlnaHRuZXNzIG9mIHRoZSBjb2xvciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqL1xuZnVuY3Rpb24gZ2V0THVtaW5hbmNlKGNvbG9yKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBsZXQgcmdiID0gY29sb3IudHlwZSA9PT0gJ2hzbCcgfHwgY29sb3IudHlwZSA9PT0gJ2hzbGEnID8gZGVjb21wb3NlQ29sb3IoaHNsVG9SZ2IoY29sb3IpKS52YWx1ZXMgOiBjb2xvci52YWx1ZXM7XG4gIHJnYiA9IHJnYi5tYXAodmFsID0+IHtcbiAgICBpZiAoY29sb3IudHlwZSAhPT0gJ2NvbG9yJykge1xuICAgICAgdmFsIC89IDI1NTsgLy8gbm9ybWFsaXplZFxuICAgIH1cbiAgICByZXR1cm4gdmFsIDw9IDAuMDM5MjggPyB2YWwgLyAxMi45MiA6ICgodmFsICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNDtcbiAgfSk7XG5cbiAgLy8gVHJ1bmNhdGUgYXQgMyBkaWdpdHNcbiAgcmV0dXJuIE51bWJlcigoMC4yMTI2ICogcmdiWzBdICsgMC43MTUyICogcmdiWzFdICsgMC4wNzIyICogcmdiWzJdKS50b0ZpeGVkKDMpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBjb250cmFzdCByYXRpbyBiZXR3ZWVuIHR3byBjb2xvcnMuXG4gKlxuICogRm9ybXVsYTogaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC1URUNIUy9HMTcuaHRtbCNHMTctdGVzdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JlZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBBIGNvbnRyYXN0IHJhdGlvIHZhbHVlIGluIHRoZSByYW5nZSAwIC0gMjEuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyYXN0UmF0aW8oZm9yZWdyb3VuZCwgYmFja2dyb3VuZCkge1xuICBjb25zdCBsdW1BID0gZ2V0THVtaW5hbmNlKGZvcmVncm91bmQpO1xuICBjb25zdCBsdW1CID0gZ2V0THVtaW5hbmNlKGJhY2tncm91bmQpO1xuICByZXR1cm4gKE1hdGgubWF4KGx1bUEsIGx1bUIpICsgMC4wNSkgLyAoTWF0aC5taW4obHVtQSwgbHVtQikgKyAwLjA1KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBhYnNvbHV0ZSB0cmFuc3BhcmVuY3kgb2YgYSBjb2xvci5cbiAqIEFueSBleGlzdGluZyBhbHBoYSB2YWx1ZXMgYXJlIG92ZXJ3cml0dGVuLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gdmFsdWUgdG8gc2V0IHRoZSBhbHBoYSBjaGFubmVsIHRvIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gYWxwaGEoY29sb3IsIHZhbHVlKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICB2YWx1ZSA9IGNsYW1wV3JhcHBlcih2YWx1ZSk7XG4gIGlmIChjb2xvci50eXBlID09PSAncmdiJyB8fCBjb2xvci50eXBlID09PSAnaHNsJykge1xuICAgIGNvbG9yLnR5cGUgKz0gJ2EnO1xuICB9XG4gIGlmIChjb2xvci50eXBlID09PSAnY29sb3InKSB7XG4gICAgY29sb3IudmFsdWVzWzNdID0gYC8ke3ZhbHVlfWA7XG4gIH0gZWxzZSB7XG4gICAgY29sb3IudmFsdWVzWzNdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUFscGhhKGNvbG9yLCB2YWx1ZSwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBhbHBoYShjb2xvciwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VucyBhIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGRhcmtlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICo9IDEgLSBjb2VmZmljaWVudDtcbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSB8fCBjb2xvci50eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVEYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhcmtlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogTGlnaHRlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29lZmZpY2llbnQgPSBjbGFtcFdyYXBwZXIoY29lZmZpY2llbnQpO1xuICBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICBjb2xvci52YWx1ZXNbMl0gKz0gKDEwMCAtIGNvbG9yLnZhbHVlc1syXSkgKiBjb2VmZmljaWVudDtcbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKz0gKDI1NSAtIGNvbG9yLnZhbHVlc1tpXSkgKiBjb2VmZmljaWVudDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKz0gKDEgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVMaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXJrZW4gb3IgbGlnaHRlbiBhIGNvbG9yLCBkZXBlbmRpbmcgb24gaXRzIGx1bWluYW5jZS5cbiAqIExpZ2h0IGNvbG9ycyBhcmUgZGFya2VuZWQsIGRhcmsgY29sb3JzIGFyZSBsaWdodGVuZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQ9MC4xNSAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBlbXBoYXNpemUoY29sb3IsIGNvZWZmaWNpZW50ID0gMC4xNSkge1xuICByZXR1cm4gZ2V0THVtaW5hbmNlKGNvbG9yKSA+IDAuNSA/IGRhcmtlbihjb2xvciwgY29lZmZpY2llbnQpIDogbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBwcml2YXRlX3NhZmVFbXBoYXNpemUoY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIEJsZW5kIGEgdHJhbnNwYXJlbnQgb3ZlcmxheSBjb2xvciB3aXRoIGEgYmFja2dyb3VuZCBjb2xvciwgcmVzdWx0aW5nIGluIGEgc2luZ2xlXG4gKiBSR0IgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFja2dyb3VuZCAtIENTUyBjb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IG92ZXJsYXkgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcGFjaXR5IC0gT3BhY2l0eSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHBhcmFtIHtudW1iZXJ9IFtnYW1tYT0xLjBdIC0gR2FtbWEgY29ycmVjdGlvbiBmYWN0b3IuIEZvciBnYW1tYS1jb3JyZWN0IGJsZW5kaW5nLCAyLjIgaXMgdXN1YWwuXG4gKi9cbmZ1bmN0aW9uIGJsZW5kKGJhY2tncm91bmQsIG92ZXJsYXksIG9wYWNpdHksIGdhbW1hID0gMS4wKSB7XG4gIGNvbnN0IGJsZW5kQ2hhbm5lbCA9IChiLCBvKSA9PiBNYXRoLnJvdW5kKChiICoqICgxIC8gZ2FtbWEpICogKDEgLSBvcGFjaXR5KSArIG8gKiogKDEgLyBnYW1tYSkgKiBvcGFjaXR5KSAqKiBnYW1tYSk7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGJhY2tncm91bmQpO1xuICBjb25zdCBvdmVybGF5Q29sb3IgPSBkZWNvbXBvc2VDb2xvcihvdmVybGF5KTtcbiAgY29uc3QgcmdiID0gW2JsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzBdLCBvdmVybGF5Q29sb3IudmFsdWVzWzBdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMV0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMV0pLCBibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1syXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1syXSldO1xuICByZXR1cm4gcmVjb21wb3NlQ29sb3Ioe1xuICAgIHR5cGU6ICdyZ2InLFxuICAgIHZhbHVlczogcmdiXG4gIH0pO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlU3R5bGVkO1xuZXhwb3J0cy5zaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuZXhwb3J0cy5zeXN0ZW1EZWZhdWx0VGhlbWUgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9zdHlsZWRFbmdpbmUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiQG11aS9zdHlsZWQtZW5naW5lXCIpKTtcbnZhciBfZGVlcG1lcmdlID0gcmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpO1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfZ2V0RGlzcGxheU5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2dldERpc3BsYXlOYW1lXCIpKTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfc3R5bGVGdW5jdGlvblN4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZUZ1bmN0aW9uU3hcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib3duZXJTdGF0ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInZhcmlhbnRzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wibmFtZVwiLCBcInNsb3RcIiwgXCJza2lwVmFyaWFudHNSZXNvbHZlclwiLCBcInNraXBTeFwiLCBcIm92ZXJyaWRlc1Jlc29sdmVyXCJdO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMjZkZWQ2MTA5ZmNkOGNhOTg3NWNjMmNlNDU2NGZlZTY3OGEzZjNjNS9wYWNrYWdlcy9zdHlsZWQvc3JjL3V0aWxzLmpzI0w0MFxuZnVuY3Rpb24gaXNTdHJpbmdUYWcodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJlxuICAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2O1xufVxuXG4vLyBVcGRhdGUgL3N5c3RlbS9zdHlsZWQvI2FwaSBpbiBjYXNlIGlmIHRoaXMgY2hhbmdlc1xuZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gZXhwb3J0cy5zeXN0ZW1EZWZhdWx0VGhlbWUgPSAoMCwgX2NyZWF0ZVRoZW1lLmRlZmF1bHQpKCk7XG5jb25zdCBsb3dlcmNhc2VGaXJzdExldHRlciA9IHN0cmluZyA9PiB7XG4gIGlmICghc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcbmZ1bmN0aW9uIHJlc29sdmVUaGVtZSh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgcmV0dXJuIGlzRW1wdHkodGhlbWUpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIoc2xvdCkge1xuICBpZiAoIXNsb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlc1tzbG90XTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NTdHlsZUFyZyhjYWxsYWJsZVN0eWxlLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgcHJvcHMpKSA6IGNhbGxhYmxlU3R5bGU7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnKSkge1xuICAgIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZy5mbGF0TWFwKHJlc29sdmVkU3R5bGUgPT4gcHJvY2Vzc1N0eWxlQXJnKHJlc29sdmVkU3R5bGUsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sIHByb3BzKSkpO1xuICB9XG4gIGlmICghIXJlc29sdmVkU3R5bGVzQXJnICYmIHR5cGVvZiByZXNvbHZlZFN0eWxlc0FyZyA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZy52YXJpYW50cykpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhcmlhbnRzID0gW11cbiAgICAgIH0gPSByZXNvbHZlZFN0eWxlc0FyZyxcbiAgICAgIG90aGVyU3R5bGVzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFudC5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmICgob3duZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb3duZXJTdGF0ZVtrZXldKSAhPT0gdmFyaWFudC5wcm9wc1trZXldICYmIHByb3BzW2tleV0gIT09IHZhcmlhbnQucHJvcHNba2V5XSkge1xuICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHRdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKHR5cGVvZiB2YXJpYW50LnN0eWxlID09PSAnZnVuY3Rpb24nID8gdmFyaWFudC5zdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSkgOiB2YXJpYW50LnN0eWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlZChpbnB1dCA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZUlkLFxuICAgIGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSxcbiAgICByb290U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcFxuICB9ID0gaW5wdXQ7XG4gIGNvbnN0IHN5c3RlbVN4ID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiAoMCwgX3N0eWxlRnVuY3Rpb25TeC5kZWZhdWx0KSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgIHRoZW1lSWRcbiAgICAgIH0pKVxuICAgIH0pKTtcbiAgfTtcbiAgc3lzdGVtU3guX19tdWlfc3lzdGVtU3ggPSB0cnVlO1xuICByZXR1cm4gKHRhZywgaW5wdXRPcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IHRoZSBgc3hgIHN0eWxlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0eWxlZCBjb21wb25lbnQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzdHlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAgICAoMCwgX3N0eWxlZEVuZ2luZS5pbnRlcm5hbF9wcm9jZXNzU3R5bGVzKSh0YWcsIHN0eWxlcyA9PiBzdHlsZXMuZmlsdGVyKHN0eWxlID0+ICEoc3R5bGUgIT0gbnVsbCAmJiBzdHlsZS5fX211aV9zeXN0ZW1TeCkpKTtcbiAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgIHNsb3Q6IGNvbXBvbmVudFNsb3QsXG4gICAgICAgIHNraXBWYXJpYW50c1Jlc29sdmVyOiBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyLFxuICAgICAgICBza2lwU3g6IGlucHV0U2tpcFN4LFxuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIG92ZXJyaWRlc1Jlc29sdmVyID0gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKGxvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QpKVxuICAgICAgfSA9IGlucHV0T3B0aW9ucyxcbiAgICAgIG9wdGlvbnMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKGlucHV0T3B0aW9ucywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAvLyBpZiBza2lwVmFyaWFudHNSZXNvbHZlciBvcHRpb24gaXMgZGVmaW5lZCwgdGFrZSB0aGUgdmFsdWUsIG90aGVyd2lzZSwgdHJ1ZSBmb3Igcm9vdCBhbmQgZmFsc2UgZm9yIG90aGVyIHNsb3RzLlxuICAgIGNvbnN0IHNraXBWYXJpYW50c1Jlc29sdmVyID0gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciAhPT0gdW5kZWZpbmVkID8gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciA6XG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgY29tcG9uZW50U2xvdCAmJiBjb21wb25lbnRTbG90ICE9PSAnUm9vdCcgJiYgY29tcG9uZW50U2xvdCAhPT0gJ3Jvb3QnIHx8IGZhbHNlO1xuICAgIGNvbnN0IHNraXBTeCA9IGlucHV0U2tpcFN4IHx8IGZhbHNlO1xuICAgIGxldCBsYWJlbDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBsYWJlbCA9IGAke2NvbXBvbmVudE5hbWV9LSR7bG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCB8fCAnUm9vdCcpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNob3VsZEZvcndhcmRQcm9wO1xuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgaWYgKGNvbXBvbmVudFNsb3QgPT09ICdSb290JyB8fCBjb21wb25lbnRTbG90ID09PSAncm9vdCcpIHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gcm9vdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50U2xvdCkge1xuICAgICAgLy8gYW55IG90aGVyIHNsb3Qgc3BlY2lmaWVkXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNsb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nVGFnKHRhZykpIHtcbiAgICAgIC8vIGZvciBzdHJpbmcgKGh0bWwpIHRhZywgcHJlc2VydmUgdGhlIGJlaGF2aW9yIGluIGVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cy5cbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIgPSAoMCwgX3N0eWxlZEVuZ2luZS5kZWZhdWx0KSh0YWcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uLFxuICAgICAgbGFiZWxcbiAgICB9LCBvcHRpb25zKSk7XG4gICAgY29uc3QgdHJhbnNmb3JtU3R5bGVBcmcgPSBzdHlsZXNBcmcgPT4ge1xuICAgICAgLy8gT24gdGhlIHNlcnZlciBFbW90aW9uIGRvZXNuJ3QgdXNlIFJlYWN0LmZvcndhcmRSZWYgZm9yIGNyZWF0aW5nIGNvbXBvbmVudHMsIHNvIHRoZSBjcmVhdGVkXG4gICAgICAvLyBjb21wb25lbnQgc3RheXMgYXMgYSBmdW5jdGlvbi4gVGhpcyBjb25kaXRpb24gbWFrZXMgc3VyZSB0aGF0IHdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBmdW5jdGlvbnNcbiAgICAgIC8vIHdoaWNoIGFyZSBiYXNpY2FsbHkgY29tcG9uZW50cyB1c2VkIGFzIGEgc2VsZWN0b3JzLlxuICAgICAgaWYgKHR5cGVvZiBzdHlsZXNBcmcgPT09ICdmdW5jdGlvbicgJiYgc3R5bGVzQXJnLl9fZW1vdGlvbl9yZWFsICE9PSBzdHlsZXNBcmcgfHwgKDAsIF9kZWVwbWVyZ2UuaXNQbGFpbk9iamVjdCkoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKHtcbiAgICAgICAgICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzQXJnO1xuICAgIH07XG4gICAgY29uc3QgbXVpU3R5bGVkUmVzb2x2ZXIgPSAoc3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zKSA9PiB7XG4gICAgICBsZXQgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IHRyYW5zZm9ybVN0eWxlQXJnKHN0eWxlQXJnKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSA9IGV4cHJlc3Npb25zID8gZXhwcmVzc2lvbnMubWFwKHRyYW5zZm9ybVN0eWxlQXJnKSA6IFtdO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgb3ZlcnJpZGVzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gcmVzb2x2ZVRoZW1lKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcztcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzID0ge307XG4gICAgICAgICAgLy8gVE9ETzogdjcgcmVtb3ZlIGl0ZXJhdGlvbiBhbmQgdXNlIGByZXNvbHZlU3R5bGVBcmcoc3R5bGVPdmVycmlkZXNbc2xvdF0pYCBkaXJlY3RseVxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlT3ZlcnJpZGVzKS5mb3JFYWNoKChbc2xvdEtleSwgc2xvdFN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlc1tzbG90S2V5XSA9IHByb2Nlc3NTdHlsZUFyZyhzbG90U3R5bGUsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjb25zdCB0aGVtZVZhcmlhbnRzID0gdGhlbWUgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzW2NvbXBvbmVudE5hbWVdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMudmFyaWFudHM7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NTdHlsZUFyZyh7XG4gICAgICAgICAgICB2YXJpYW50czogdGhlbWVWYXJpYW50c1xuICAgICAgICAgIH0sICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXNraXBTeCkge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChzeXN0ZW1TeCk7XG4gICAgICB9XG4gICAgICBjb25zdCBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPSBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUubGVuZ3RoIC0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVBcmcpICYmIG51bU9mQ3VzdG9tRm5zQXBwbGllZCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IEFycmF5KG51bU9mQ3VzdG9tRm5zQXBwbGllZCkuZmlsbCgnJyk7XG4gICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGFycmF5LCB0aGFuIHdlIG5lZWQgdG8gYWRkIHBsYWNlaG9sZGVycyBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBvdmVycmlkZXMsIHZhcmlhbnRzIGFuZCB0aGUgc3ggc3R5bGVzLlxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gWy4uLnN0eWxlQXJnLCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnLnJhdyA9IFsuLi5zdHlsZUFyZy5yYXcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICB9XG4gICAgICBjb25zdCBDb21wb25lbnQgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIodHJhbnNmb3JtZWRTdHlsZUFyZywgLi4uZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2NvbXBvbmVudE5hbWV9JHsoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgkeygwLCBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdCkodGFnKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YWcubXVpTmFtZSkge1xuICAgICAgICBDb21wb25lbnQubXVpTmFtZSA9IHRhZy5tdWlOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICB9O1xuICAgIGlmIChkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZykge1xuICAgICAgbXVpU3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZyA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gbXVpU3R5bGVkUmVzb2x2ZXI7XG4gIH07XG59IiwgImltcG9ydCB7IEZyYWdtZW50LCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2gsIHVzZUFwcFNlbGVjdG9yIH0gZnJvbSBcIi4uL2FwcC9ob29rc1wiO1xuaW1wb3J0IHsgc3RvcmUgfSBmcm9tIFwiLi4vYXBwL3N0b3JlXCI7XG5pbXBvcnQgRW50aXR5VHJlZSBmcm9tIFwiLi4vcGFnZXMvb250b2xvZ2llcy9lbnRpdGllcy9FbnRpdHlUcmVlXCI7XG5pbXBvcnQgeyBnZXRDbGFzc0luc3RhbmNlcywgZ2V0RW50aXR5LCBnZXRFbnRpdHlXaXRoVHlwZSwgZ2V0T250b2xvZ3kgfSBmcm9tIFwiLi4vcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2VcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSAnLi4vbW9kZWwvT250b2xvZ3knXG5pbXBvcnQgRW50aXR5IGZyb20gJy4uL21vZGVsL0VudGl0eSdcbmltcG9ydCB7IENpcmN1bGFyUHJvZ3Jlc3MgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVRyZWVXaWRnZXRQcm9wcyB7XG4gICAgaXJpPzogc3RyaW5nO1xuICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICBhcGlVcmw6IHN0cmluZztcbiAgICBlbnRpdHlUeXBlPzogXCJlbnRpdGllc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIjtcbiAgICBsYW5nPzogc3RyaW5nO1xuICAgIG9uTmF2aWdhdGVUb0VudGl0eT86IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU6IHN0cmluZywgaXJpOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5VHJlZShcbiAgICBwcm9wczogRW50aXR5VHJlZVdpZGdldFByb3BzLFxuICAgIGNvbnRhaW5lcjogYW55LFxuICAgIGNhbGxiYWNrPzogKCkgPT4gdm9pZFxuKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKEVudGl0eVRyZWVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gRW50aXR5VHJlZVdpZGdldChwcm9wczogRW50aXR5VHJlZVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxQcm92aWRlciBzdG9yZT17c3RvcmV9PlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eVRyZWVXaWRnZXRJbm5lclxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGlVcmx9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cblxuICAgICAgICA8L1Byb3ZpZGVyPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEVudGl0eVRyZWVXaWRnZXRJbm5lcihwcm9wczogRW50aXR5VHJlZVdpZGdldFByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICBsYW5nID0gXCJlblwiLFxuICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHkgPSAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5ID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG9udG9sb2d5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm9udG9sb2d5KTtcbiAgICBjb25zdCBsb2FkaW5nT250b2xvZ3kgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubG9hZGluZ09udG9sb2d5KTtcblxuICAgIGNvbnN0IGVudGl0eSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5lbnRpdHkpO1xuICAgIGNvbnN0IGxvYWRpbmdFbnRpdHkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubG9hZGluZ0VudGl0eSk7XG5cbiAgICAvL2NvbnN0IGNsYXNzSW5zdGFuY2VzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmNsYXNzSW5zdGFuY2VzKTtcbiAgICBjb25zdCBsb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubG9hZGluZ0NsYXNzSW5zdGFuY2VzKTtcblxuXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuXG4gICAgY29uc3QgaGFuZGxlTmF2aWdhdGVUb0VudGl0eSA9IChvbnRvbG9neTogT250b2xvZ3ksIGVudGl0eTogRW50aXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IG9udG9sb2d5SWQgPSBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCk7XG4gICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBlbnRpdHkuZ2V0VHlwZVBsdXJhbCgpO1xuICAgICAgICBjb25zdCBpcmkgPSBlbnRpdHkuZ2V0SXJpKCk7XG5cbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU5hdmlnYXRlVG9PbnRvbG9neSA9IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eTogRW50aXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBlbnRpdHkuZ2V0VHlwZVBsdXJhbCgpO1xuICAgICAgICBjb25zdCBpcmkgPSBlbnRpdHkuZ2V0SXJpKCk7XG5cbiAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3kob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpKTtcbiAgICB9O1xuXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgIGdldE9udG9sb2d5KHtcbiAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBwcm9wcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgIGxhbmc6IFwiZW5cIixcbiAgICAgICAgICAgICAgICBhcGlVcmw6IHByb3BzLmFwaVVybCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgW2Rpc3BhdGNoLCBwcm9wcy5vbnRvbG9neUlkLCBwcm9wcy5hcGlVcmxdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvbnRvbG9neSAmJiBwcm9wcy5pcmkpIHtcbiAgICAgICAgICAgIGlmIChwcm9wcy5lbnRpdHlUeXBlICYmIHByb3BzLmVudGl0eVR5cGUgIT09IFwiZW50aXRpZXNcIikge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRFbnRpdHlXaXRoVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBwcm9wcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU6IHByb3BzLmVudGl0eVR5cGUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUlyaTogcHJvcHMuaXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtczogbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgZ2V0RW50aXR5KFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBwcm9wcy5vbnRvbG9neUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5SXJpOiBwcm9wcy5pcmlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgfSwgW2Rpc3BhdGNoLCBwcm9wcy5vbnRvbG9neUlkLCBwcm9wcy5lbnRpdHlUeXBlLCBwcm9wcy5pcmksIG9udG9sb2d5XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoZW50aXR5ICYmIHByb3BzLmVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiKSB7XG4gICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICBnZXRDbGFzc0luc3RhbmNlcyh7XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IGVudGl0eS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzSXJpOiBlbnRpdHkuZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtczogbmV3IFVSTFNlYXJjaFBhcmFtcygpLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSwgW2Rpc3BhdGNoLCBwcm9wcy5vbnRvbG9neUlkLCBwcm9wcy5lbnRpdHlUeXBlLCBwcm9wcy5pcmksIGVudGl0eV0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgeyhsb2FkaW5nRW50aXR5IHx8IGxvYWRpbmdPbnRvbG9neSB8fCBsb2FkaW5nQ2xhc3NJbnN0YW5jZXMpICYmXG4gICAgICAgICAgICAgICAgPENpcmN1bGFyUHJvZ3Jlc3MvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyFsb2FkaW5nRW50aXR5ICYmICFsb2FkaW5nT250b2xvZ3kgJiYgIWxvYWRpbmdDbGFzc0luc3RhbmNlcyAmJiBvbnRvbG9neSAmJiAoXG4gICAgICAgICAgICAgICAgPEVudGl0eVRyZWVcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3k9e29udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtlbnRpdHlUeXBlID8gZW50aXR5VHlwZSA6IFwiZW50aXRpZXNcIn1cbiAgICAgICAgICAgICAgICAgICAgbGFuZz17bGFuZ31cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFbnRpdHk9e2VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtoYW5kbGVOYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17aGFuZGxlTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xufVxuIiwgIi8vIFRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGFzc3VtZXMgd2UncmUgd29ya2luZyB3aXRoIHN0YW5kYXJkIFJlYWN0RE9NL1JOLCBidXRcbi8vIG9sZGVyIHZlcnNpb25zIHRoYXQgZG8gbm90IGluY2x1ZGUgYHVzZVN5bmNFeHRlcm5hbFN0b3JlYCAoUmVhY3QgMTYuOSAtIDE3LngpLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGUgdXNlU3luY0V4dGVybmFsU3RvcmUgY29tcGF0IHNoaW0gaXMgbmVlZGVkLlxuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltJztcbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIGFzIGJhdGNoIH0gZnJvbSAnLi91dGlscy9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbmltcG9ydCB7IHNldEJhdGNoIH0gZnJvbSAnLi91dGlscy9iYXRjaCc7XG5pbXBvcnQgeyBpbml0aWFsaXplVXNlU2VsZWN0b3IgfSBmcm9tICcuL2hvb2tzL3VzZVNlbGVjdG9yJztcbmltcG9ydCB7IGluaXRpYWxpemVDb25uZWN0IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nvbm5lY3QnO1xuaW5pdGlhbGl6ZVVzZVNlbGVjdG9yKHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKTtcbmluaXRpYWxpemVDb25uZWN0KHVzZVN5bmNFeHRlcm5hbFN0b3JlKTsgLy8gRW5hYmxlIGJhdGNoZWQgdXBkYXRlcyBpbiBvdXIgc3Vic2NyaXB0aW9ucyBmb3IgdXNlXG4vLyB3aXRoIHN0YW5kYXJkIFJlYWN0IHJlbmRlcmVycyAoUmVhY3RET00sIFJlYWN0IE5hdGl2ZSlcblxuc2V0QmF0Y2goYmF0Y2gpO1xuZXhwb3J0IHsgYmF0Y2ggfTtcbmV4cG9ydCAqIGZyb20gJy4vZXhwb3J0cyc7IiwgImV4cG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAncmVhY3QtZG9tJzsiLCAiLy8gRGVmYXVsdCB0byBhIGR1bW15IFwiYmF0Y2hcIiBpbXBsZW1lbnRhdGlvbiB0aGF0IGp1c3QgcnVucyB0aGUgY2FsbGJhY2tcbmZ1bmN0aW9uIGRlZmF1bHROb29wQmF0Y2goY2FsbGJhY2spIHtcbiAgY2FsbGJhY2soKTtcbn1cblxubGV0IGJhdGNoID0gZGVmYXVsdE5vb3BCYXRjaDsgLy8gQWxsb3cgaW5qZWN0aW5nIGFub3RoZXIgYmF0Y2hpbmcgZnVuY3Rpb24gbGF0ZXJcblxuZXhwb3J0IGNvbnN0IHNldEJhdGNoID0gbmV3QmF0Y2ggPT4gYmF0Y2ggPSBuZXdCYXRjaDsgLy8gU3VwcGx5IGEgZ2V0dGVyIGp1c3QgdG8gc2tpcCBkZWFsaW5nIHdpdGggRVNNIGJpbmRpbmdzXG5cbmV4cG9ydCBjb25zdCBnZXRCYXRjaCA9ICgpID0+IGJhdGNoOyIsICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRGVidWdWYWx1ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUmVkdXhDb250ZXh0SG9vaywgdXNlUmVkdXhDb250ZXh0IGFzIHVzZURlZmF1bHRSZWR1eENvbnRleHQgfSBmcm9tICcuL3VzZVJlZHV4Q29udGV4dCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVVc2VTZWxlY3RvciA9IGZuID0+IHtcbiAgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBmbjtcbn07XG5cbmNvbnN0IHJlZkVxdWFsaXR5ID0gKGEsIGIpID0+IGEgPT09IGI7XG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlU2VsZWN0b3JgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VSZWR1eENvbnRleHQgPSBjb250ZXh0ID09PSBSZWFjdFJlZHV4Q29udGV4dCA/IHVzZURlZmF1bHRSZWR1eENvbnRleHQgOiBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU2VsZWN0b3Ioc2VsZWN0b3IsIGVxdWFsaXR5Rm5Pck9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVxdWFsaXR5Rm4gPSByZWZFcXVhbGl0eSxcbiAgICAgIHN0YWJpbGl0eUNoZWNrID0gdW5kZWZpbmVkLFxuICAgICAgbm9vcENoZWNrID0gdW5kZWZpbmVkXG4gICAgfSA9IHR5cGVvZiBlcXVhbGl0eUZuT3JPcHRpb25zID09PSAnZnVuY3Rpb24nID8ge1xuICAgICAgZXF1YWxpdHlGbjogZXF1YWxpdHlGbk9yT3B0aW9uc1xuICAgIH0gOiBlcXVhbGl0eUZuT3JPcHRpb25zO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgc2VsZWN0b3IgdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZXF1YWxpdHlGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBhbiBlcXVhbGl0eSBmdW5jdGlvbiB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlLFxuICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgZ2V0U2VydmVyU3RhdGUsXG4gICAgICBzdGFiaWxpdHlDaGVjazogZ2xvYmFsU3RhYmlsaXR5Q2hlY2ssXG4gICAgICBub29wQ2hlY2s6IGdsb2JhbE5vb3BDaGVja1xuICAgIH0gPSB1c2VSZWR1eENvbnRleHQoKTtcbiAgICBjb25zdCBmaXJzdFJ1biA9IHVzZVJlZih0cnVlKTtcbiAgICBjb25zdCB3cmFwcGVkU2VsZWN0b3IgPSB1c2VDYWxsYmFjayh7XG4gICAgICBbc2VsZWN0b3IubmFtZV0oc3RhdGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFN0YWJpbGl0eUNoZWNrID0gdHlwZW9mIHN0YWJpbGl0eUNoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbFN0YWJpbGl0eUNoZWNrIDogc3RhYmlsaXR5Q2hlY2s7XG5cbiAgICAgICAgICBpZiAoZmluYWxTdGFiaWxpdHlDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxTdGFiaWxpdHlDaGVjayA9PT0gJ29uY2UnICYmIGZpcnN0UnVuLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ29tcGFyZSA9IHNlbGVjdG9yKHN0YXRlKTtcblxuICAgICAgICAgICAgaWYgKCFlcXVhbGl0eUZuKHNlbGVjdGVkLCB0b0NvbXBhcmUpKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIGEgZGlmZmVyZW50IHJlc3VsdCB3aGVuIGNhbGxlZCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMuIFRoaXMgY2FuIGxlYWQgdG8gdW5uZWNlc3NhcnkgcmVyZW5kZXJzLicgKyAnXFxuU2VsZWN0b3JzIHRoYXQgcmV0dXJuIGEgbmV3IHJlZmVyZW5jZSAoc3VjaCBhcyBhbiBvYmplY3Qgb3IgYW4gYXJyYXkpIHNob3VsZCBiZSBtZW1vaXplZDogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdXNhZ2UvZGVyaXZpbmctZGF0YS1zZWxlY3RvcnMjb3B0aW1pemluZy1zZWxlY3RvcnMtd2l0aC1tZW1vaXphdGlvbicsIHtcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDI6IHRvQ29tcGFyZSxcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaW5hbE5vb3BDaGVjayA9IHR5cGVvZiBub29wQ2hlY2sgPT09ICd1bmRlZmluZWQnID8gZ2xvYmFsTm9vcENoZWNrIDogbm9vcENoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsTm9vcENoZWNrID09PSAnYWx3YXlzJyB8fCBmaW5hbE5vb3BDaGVjayA9PT0gJ29uY2UnICYmIGZpcnN0UnVuLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgbGV0IHN0YWNrID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgIHN0YWNrXG4gICAgICAgICAgICAgICAgfSA9IGUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTZWxlY3RvciAnICsgKHNlbGVjdG9yLm5hbWUgfHwgJ3Vua25vd24nKSArICcgcmV0dXJuZWQgdGhlIHJvb3Qgc3RhdGUgd2hlbiBjYWxsZWQuIFRoaXMgY2FuIGxlYWQgdG8gdW5uZWNlc3NhcnkgcmVyZW5kZXJzLicgKyAnXFxuU2VsZWN0b3JzIHRoYXQgcmV0dXJuIHRoZSBlbnRpcmUgc3RhdGUgYXJlIGFsbW9zdCBjZXJ0YWlubHkgYSBtaXN0YWtlLCBhcyB0aGV5IHdpbGwgY2F1c2UgYSByZXJlbmRlciB3aGVuZXZlciAqYW55dGhpbmcqIGluIHN0YXRlIGNoYW5nZXMuJywge1xuICAgICAgICAgICAgICAgIHN0YWNrXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaXJzdFJ1bi5jdXJyZW50KSBmaXJzdFJ1bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICB9W3NlbGVjdG9yLm5hbWVdLCBbc2VsZWN0b3IsIGdsb2JhbFN0YWJpbGl0eUNoZWNrLCBzdGFiaWxpdHlDaGVja10pO1xuICAgIGNvbnN0IHNlbGVjdGVkU3RhdGUgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvcihzdWJzY3JpcHRpb24uYWRkTmVzdGVkU3ViLCBzdG9yZS5nZXRTdGF0ZSwgZ2V0U2VydmVyU3RhdGUgfHwgc3RvcmUuZ2V0U3RhdGUsIHdyYXBwZWRTZWxlY3RvciwgZXF1YWxpdHlGbik7XG4gICAgdXNlRGVidWdWYWx1ZShzZWxlY3RlZFN0YXRlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRTdGF0ZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZSdzIHN0YXRlLiBUaGlzIGhvb2sgdGFrZXMgYSBzZWxlY3RvciBmdW5jdGlvblxyXG4gKiBhcyBhbiBhcmd1bWVudC4gVGhlIHNlbGVjdG9yIGlzIGNhbGxlZCB3aXRoIHRoZSBzdG9yZSBzdGF0ZS5cclxuICpcclxuICogVGhpcyBob29rIHRha2VzIGFuIG9wdGlvbmFsIGVxdWFsaXR5IGNvbXBhcmlzb24gZnVuY3Rpb24gYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXJcclxuICogdGhhdCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgd2F5IHRoZSBzZWxlY3RlZCBzdGF0ZSBpcyBjb21wYXJlZCB0byBkZXRlcm1pbmVcclxuICogd2hldGhlciB0aGUgY29tcG9uZW50IG5lZWRzIHRvIGJlIHJlLXJlbmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZWxlY3RvciB0aGUgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbj19IGVxdWFsaXR5Rm4gdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBlcXVhbGl0eVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCBjb3VudGVyID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUuY291bnRlcilcclxuICogICByZXR1cm4gPGRpdj57Y291bnRlcn08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVNlbGVjdG9yID0gLyojX19QVVJFX18qL2NyZWF0ZVNlbGVjdG9ySG9vaygpOyIsICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuXG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZVJlZHV4Q29udGV4dGAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuIFRoaXMgaXMgYSBsb3ctbGV2ZWxcclxuICogaG9vayB0aGF0IHlvdSBzaG91bGQgdXN1YWxseSBub3QgbmVlZCB0byBjYWxsIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlUmVkdXhDb250ZXh0KCkge1xuICAgIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoY29udGV4dCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29udGV4dFZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHJlYWN0LXJlZHV4IGNvbnRleHQgdmFsdWU7IHBsZWFzZSBlbnN1cmUgdGhlIGNvbXBvbmVudCBpcyB3cmFwcGVkIGluIGEgPFByb3ZpZGVyPicpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgdmFsdWUgb2YgdGhlIGBSZWFjdFJlZHV4Q29udGV4dGAuIFRoaXMgaXMgYSBsb3ctbGV2ZWxcclxuICogaG9vayB0aGF0IHlvdSBzaG91bGQgdXN1YWxseSBub3QgbmVlZCB0byBjYWxsIGRpcmVjdGx5LlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgdmFsdWUgb2YgdGhlIGBSZWFjdFJlZHV4Q29udGV4dGBcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VSZWR1eENvbnRleHQgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgeyBzdG9yZSB9ID0gdXNlUmVkdXhDb250ZXh0KClcclxuICogICByZXR1cm4gPGRpdj57c3RvcmUuZ2V0U3RhdGUoKX08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVSZWR1eENvbnRleHRIb29rKCk7IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IENvbnRleHRLZXkgPSBTeW1ib2wuZm9yKGByZWFjdC1yZWR1eC1jb250ZXh0YCk7XG5jb25zdCBnVCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6XG4vKiBmYWxsIGJhY2sgdG8gYSBwZXItbW9kdWxlIHNjb3BlIChwcmUtOC4xIGJlaGF2aW91cikgaWYgYGdsb2JhbFRoaXNgIGlzIG5vdCBhdmFpbGFibGUgKi9cbnt9O1xuXG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICB2YXIgX2dUJENvbnRleHRLZXk7XG5cbiAgaWYgKCFSZWFjdC5jcmVhdGVDb250ZXh0KSByZXR1cm4ge307XG4gIGNvbnN0IGNvbnRleHRNYXAgPSAoX2dUJENvbnRleHRLZXkgPSBnVFtDb250ZXh0S2V5XSkgIT0gbnVsbCA/IF9nVCRDb250ZXh0S2V5IDogZ1RbQ29udGV4dEtleV0gPSBuZXcgTWFwKCk7XG4gIGxldCByZWFsQ29udGV4dCA9IGNvbnRleHRNYXAuZ2V0KFJlYWN0LmNyZWF0ZUNvbnRleHQpO1xuXG4gIGlmICghcmVhbENvbnRleHQpIHtcbiAgICByZWFsQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmVhbENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmVhY3RSZWR1eCc7XG4gICAgfVxuXG4gICAgY29udGV4dE1hcC5zZXQoUmVhY3QuY3JlYXRlQ29udGV4dCwgcmVhbENvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlYWxDb250ZXh0O1xufVxuXG5leHBvcnQgY29uc3QgUmVhY3RSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovZ2V0Q29udGV4dCgpO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3RSZWR1eENvbnRleHQ7IiwgImV4cG9ydCBjb25zdCBub3RJbml0aWFsaXplZCA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCd1U0VTIG5vdCBpbml0aWFsaXplZCEnKTtcbn07IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXCJdO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5pbXBvcnQgaG9pc3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzVmFsaWRFbGVtZW50VHlwZSwgaXNDb250ZXh0Q29uc3VtZXIgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgZGVmYXVsdFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi9jb25uZWN0L3NlbGVjdG9yRmFjdG9yeSc7XG5pbXBvcnQgeyBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tYXBEaXNwYXRjaFRvUHJvcHMnO1xuaW1wb3J0IHsgbWFwU3RhdGVUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzJztcbmltcG9ydCB7IG1lcmdlUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tZXJnZVByb3BzJztcbmltcG9ydCB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCc7XG5pbXBvcnQgc2hhbGxvd0VxdWFsIGZyb20gJy4uL3V0aWxzL3NoYWxsb3dFcXVhbCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuLi91dGlscy93YXJuaW5nJztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCB7IG5vdEluaXRpYWxpemVkIH0gZnJvbSAnLi4vdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUnO1xubGV0IHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gbm90SW5pdGlhbGl6ZWQ7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUNvbm5lY3QgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZm47XG59OyAvLyBEZWZpbmUgc29tZSBjb25zdGFudCBhcnJheXMganVzdCB0byBhdm9pZCByZS1jcmVhdGluZyB0aGVzZVxuXG5jb25zdCBFTVBUWV9BUlJBWSA9IFtudWxsLCAwXTtcbmNvbnN0IE5PX1NVQlNDUklQVElPTl9BUlJBWSA9IFtudWxsLCBudWxsXTsgLy8gQXR0ZW1wdHMgdG8gc3RyaW5naWZ5IHdoYXRldmVyIG5vdC1yZWFsbHktYS1jb21wb25lbnQgdmFsdWUgd2Ugd2VyZSBnaXZlblxuLy8gZm9yIGxvZ2dpbmcgaW4gYW4gZXJyb3IgbWVzc2FnZVxuXG5jb25zdCBzdHJpbmdpZnlDb21wb25lbnQgPSBDb21wID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQ29tcCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBTdHJpbmcoQ29tcCk7XG4gIH1cbn07XG5cbi8vIFRoaXMgaXMgXCJqdXN0XCIgYSBgdXNlTGF5b3V0RWZmZWN0YCwgYnV0IHdpdGggdHdvIG1vZGlmaWNhdGlvbnM6XG4vLyAtIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIGB1c2VFZmZlY3RgIGluIFNTUiB0byBhdm9pZCBhbm5veWluZyB3YXJuaW5nc1xuLy8gLSB3ZSBleHRyYWN0IHRoaXMgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhdm9pZCBjbG9zaW5nIG92ZXIgdmFsdWVzXG4vLyAgIGFuZCBjYXVzaW5nIG1lbW9yeSBsZWFrc1xuZnVuY3Rpb24gdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdFdpdGhBcmdzKGVmZmVjdEZ1bmMsIGVmZmVjdEFyZ3MsIGRlcGVuZGVuY2llcykge1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IGVmZmVjdEZ1bmMoLi4uZWZmZWN0QXJncyksIGRlcGVuZGVuY2llcyk7XG59IC8vIEVmZmVjdCBjYWxsYmFjaywgZXh0cmFjdGVkOiBhc3NpZ24gdGhlIGxhdGVzdCBwcm9wcyB2YWx1ZXMgdG8gcmVmcyBmb3IgbGF0ZXIgdXNhZ2VcblxuXG5mdW5jdGlvbiBjYXB0dXJlV3JhcHBlclByb3BzKGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCAvLyBhY3R1YWxDaGlsZFByb3BzOiB1bmtub3duLFxuY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3Vicykge1xuICAvLyBXZSB3YW50IHRvIGNhcHR1cmUgdGhlIHdyYXBwZXIgcHJvcHMgYW5kIGNoaWxkIHByb3BzIHdlIHVzZWQgZm9yIGxhdGVyIGNvbXBhcmlzb25zXG4gIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCA9IHdyYXBwZXJQcm9wcztcbiAgcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCA9IGZhbHNlOyAvLyBJZiB0aGUgcmVuZGVyIHdhcyBmcm9tIGEgc3RvcmUgdXBkYXRlLCBjbGVhciBvdXQgdGhhdCByZWZlcmVuY2UgYW5kIGNhc2NhZGUgdGhlIHN1YnNjcmliZXIgdXBkYXRlXG5cbiAgaWYgKGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCkge1xuICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG51bGw7XG4gICAgbm90aWZ5TmVzdGVkU3VicygpO1xuICB9XG59IC8vIEVmZmVjdCBjYWxsYmFjaywgZXh0cmFjdGVkOiBzdWJzY3JpYmUgdG8gdGhlIFJlZHV4IHN0b3JlIG9yIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLFxuLy8gY2hlY2sgZm9yIHVwZGF0ZXMgYWZ0ZXIgZGlzcGF0Y2hlZCBhY3Rpb25zLCBhbmQgdHJpZ2dlciByZS1yZW5kZXJzLlxuXG5cbmZ1bmN0aW9uIHN1YnNjcmliZVVwZGF0ZXMoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLCBzdG9yZSwgc3Vic2NyaXB0aW9uLCBjaGlsZFByb3BzU2VsZWN0b3IsIGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgaXNNb3VudGVkLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzLCAvLyBmb3JjZUNvbXBvbmVudFVwZGF0ZURpc3BhdGNoOiBSZWFjdC5EaXNwYXRjaDxhbnk+LFxuYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKSB7XG4gIC8vIElmIHdlJ3JlIG5vdCBzdWJzY3JpYmVkIHRvIHRoZSBzdG9yZSwgbm90aGluZyB0byBkbyBoZXJlXG4gIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gKCkgPT4ge307IC8vIENhcHR1cmUgdmFsdWVzIGZvciBjaGVja2luZyBpZiBhbmQgd2hlbiB0aGlzIGNvbXBvbmVudCB1bm1vdW50c1xuXG4gIGxldCBkaWRVbnN1YnNjcmliZSA9IGZhbHNlO1xuICBsZXQgbGFzdFRocm93bkVycm9yID0gbnVsbDsgLy8gV2UnbGwgcnVuIHRoaXMgY2FsbGJhY2sgZXZlcnkgdGltZSBhIHN0b3JlIHN1YnNjcmlwdGlvbiB1cGRhdGUgcHJvcGFnYXRlcyB0byB0aGlzIGNvbXBvbmVudFxuXG4gIGNvbnN0IGNoZWNrRm9yVXBkYXRlcyA9ICgpID0+IHtcbiAgICBpZiAoZGlkVW5zdWJzY3JpYmUgfHwgIWlzTW91bnRlZC5jdXJyZW50KSB7XG4gICAgICAvLyBEb24ndCBydW4gc3RhbGUgbGlzdGVuZXJzLlxuICAgICAgLy8gUmVkdXggZG9lc24ndCBndWFyYW50ZWUgdW5zdWJzY3JpcHRpb25zIGhhcHBlbiB1bnRpbCBuZXh0IGRpc3BhdGNoLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVE9ETyBXZSdyZSBjdXJyZW50bHkgY2FsbGluZyBnZXRTdGF0ZSBvdXJzZWx2ZXMgaGVyZSwgcmF0aGVyIHRoYW4gbGV0dGluZyBgdVNFU2AgZG8gaXRcblxuXG4gICAgY29uc3QgbGF0ZXN0U3RvcmVTdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgbGV0IG5ld0NoaWxkUHJvcHMsIGVycm9yO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjdHVhbGx5IHJ1biB0aGUgc2VsZWN0b3Igd2l0aCB0aGUgbW9zdCByZWNlbnQgc3RvcmUgc3RhdGUgYW5kIHdyYXBwZXIgcHJvcHNcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGF0IHRoZSBjaGlsZCBwcm9wcyBzaG91bGQgYmVcbiAgICAgIG5ld0NoaWxkUHJvcHMgPSBjaGlsZFByb3BzU2VsZWN0b3IobGF0ZXN0U3RvcmVTdGF0ZSwgbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvciA9IGU7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGxhc3RUaHJvd25FcnJvciA9IG51bGw7XG4gICAgfSAvLyBJZiB0aGUgY2hpbGQgcHJvcHMgaGF2ZW4ndCBjaGFuZ2VkLCBub3RoaW5nIHRvIGRvIGhlcmUgLSBjYXNjYWRlIHRoZSBzdWJzY3JpcHRpb24gdXBkYXRlXG5cblxuICAgIGlmIChuZXdDaGlsZFByb3BzID09PSBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50KSB7XG4gICAgICBpZiAoIXJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQpIHtcbiAgICAgICAgbm90aWZ5TmVzdGVkU3VicygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYXZlIHJlZmVyZW5jZXMgdG8gdGhlIG5ldyBjaGlsZCBwcm9wcy4gIE5vdGUgdGhhdCB3ZSB0cmFjayB0aGUgXCJjaGlsZCBwcm9wcyBmcm9tIHN0b3JlIHVwZGF0ZVwiXG4gICAgICAvLyBhcyBhIHJlZiBpbnN0ZWFkIG9mIGEgdXNlU3RhdGUvdXNlUmVkdWNlciBiZWNhdXNlIHdlIG5lZWQgYSB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgdmFsdWUgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZC4gIElmIHRoaXMgd2VudCBpbnRvIHVzZVN0YXRlL3VzZVJlZHVjZXIsIHdlIGNvdWxkbid0IGNsZWFyIG91dCB0aGUgdmFsdWUgd2l0aG91dFxuICAgICAgLy8gZm9yY2luZyBhbm90aGVyIHJlLXJlbmRlciwgd2hpY2ggd2UgZG9uJ3Qgd2FudC5cbiAgICAgIGxhc3RDaGlsZFByb3BzLmN1cnJlbnQgPSBuZXdDaGlsZFByb3BzO1xuICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSB0cnVlOyAvLyBUT0RPIFRoaXMgaXMgaGFja3kgYW5kIG5vdCBob3cgYHVTRVNgIGlzIG1lYW50IHRvIGJlIHVzZWRcbiAgICAgIC8vIFRyaWdnZXIgdGhlIFJlYWN0IGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgc3Vic2NyaWJlclxuXG4gICAgICBhZGRpdGlvbmFsU3Vic2NyaWJlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH07IC8vIEFjdHVhbGx5IHN1YnNjcmliZSB0byB0aGUgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IgKG9yIHN0b3JlKVxuXG5cbiAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBjaGVja0ZvclVwZGF0ZXM7XG4gIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTsgLy8gUHVsbCBkYXRhIGZyb20gdGhlIHN0b3JlIGFmdGVyIGZpcnN0IHJlbmRlciBpbiBjYXNlIHRoZSBzdG9yZSBoYXNcbiAgLy8gY2hhbmdlZCBzaW5jZSB3ZSBiZWdhbi5cblxuICBjaGVja0ZvclVwZGF0ZXMoKTtcblxuICBjb25zdCB1bnN1YnNjcmliZVdyYXBwZXIgPSAoKSA9PiB7XG4gICAgZGlkVW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgIHN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gbnVsbDtcblxuICAgIGlmIChsYXN0VGhyb3duRXJyb3IpIHtcbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYXVnaHQgYW4gZXJyb3IgZHVlIHRvIGEgYmFkIG1hcFN0YXRlIGZ1bmN0aW9uLCBidXQgdGhlXG4gICAgICAvLyBwYXJlbnQgcmUtcmVuZGVyZWQgd2l0aG91dCB0aGlzIGNvbXBvbmVudCBhbmQgd2UncmUgYWJvdXQgdG8gdW5tb3VudC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBhcyBsb25nIGFzIHdlIGRvIHRvcC1kb3duIHN1YnNjcmlwdGlvbnMgY29ycmVjdGx5LCBidXRcbiAgICAgIC8vIGlmIHdlIGV2ZXIgZG8gdGhvc2Ugd3JvbmcsIHRoaXMgdGhyb3cgd2lsbCBzdXJmYWNlIHRoZSBlcnJvciBpbiBvdXIgdGVzdHMuXG4gICAgICAvLyBJbiB0aGF0IGNhc2UsIHRocm93IHRoZSBlcnJvciBmcm9tIGhlcmUgc28gaXQgZG9lc24ndCBnZXQgbG9zdC5cbiAgICAgIHRocm93IGxhc3RUaHJvd25FcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVuc3Vic2NyaWJlV3JhcHBlcjtcbn0gLy8gUmVkdWNlciBpbml0aWFsIHN0YXRlIGNyZWF0aW9uIGZvciBvdXIgdXBkYXRlIHJlZHVjZXJcblxuXG5jb25zdCBpbml0U3RhdGVVcGRhdGVzID0gKCkgPT4gRU1QVFlfQVJSQVk7XG5cbmZ1bmN0aW9uIHN0cmljdEVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IGI7XG59XG4vKipcclxuICogSW5mZXJzIHRoZSB0eXBlIG9mIHByb3BzIHRoYXQgYSBjb25uZWN0b3Igd2lsbCBpbmplY3QgaW50byBhIGNvbXBvbmVudC5cclxuICovXG5cblxubGV0IGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSBmYWxzZTtcbi8qKlxyXG4gKiBDb25uZWN0cyBhIFJlYWN0IGNvbXBvbmVudCB0byBhIFJlZHV4IHN0b3JlLlxyXG4gKlxyXG4gKiAtIFdpdGhvdXQgYXJndW1lbnRzLCBqdXN0IHdyYXBzIHRoZSBjb21wb25lbnQsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIC8gcHJvcHNcclxuICpcclxuICogLSBJZiAyIHBhcmFtcyBhcmUgcGFzc2VkICgzcmQgcGFyYW0sIG1lcmdlUHJvcHMsIGlzIHNraXBwZWQpLCBkZWZhdWx0IGJlaGF2aW9yXHJcbiAqIGlzIHRvIG92ZXJyaWRlIG93blByb3BzIChhcyBzdGF0ZWQgaW4gdGhlIGRvY3MpLCBzbyB3aGF0IHJlbWFpbnMgaXMgZXZlcnl0aGluZyB0aGF0J3NcclxuICogbm90IGEgc3RhdGUgb3IgZGlzcGF0Y2ggcHJvcFxyXG4gKlxyXG4gKiAtIFdoZW4gM3JkIHBhcmFtIGlzIHBhc3NlZCwgd2UgZG9uJ3Qga25vdyBpZiBvd25Qcm9wcyBwcm9wYWdhdGUgYW5kIHdoZXRoZXIgdGhleVxyXG4gKiBzaG91bGQgYmUgdmFsaWQgY29tcG9uZW50IHByb3BzLCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbWVyZ2VQcm9wcyBpbXBsZW1lbnRhdGlvbi5cclxuICogQXMgc3VjaCwgaXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBleHRlbmQgb3duUHJvcHMgaW50ZXJmYWNlIGZyb20gc3RhdGUgb3JcclxuICogZGlzcGF0Y2ggcHJvcHMgb3IgYm90aCB3aGVuIGFwcGxpY2FibGVcclxuICpcclxuICogQHBhcmFtIG1hcFN0YXRlVG9Qcm9wcyBBIGZ1bmN0aW9uIHRoYXQgZXh0cmFjdHMgdmFsdWVzIGZyb20gc3RhdGVcclxuICogQHBhcmFtIG1hcERpc3BhdGNoVG9Qcm9wcyBTZXR1cCBmb3IgZGlzcGF0Y2hpbmcgYWN0aW9uc1xyXG4gKiBAcGFyYW0gbWVyZ2VQcm9wcyBPcHRpb25hbCBjYWxsYmFjayB0byBtZXJnZSBzdGF0ZSBhbmQgZGlzcGF0Y2ggcHJvcHMgdG9nZXRoZXJcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbm5lY3Rpb25cclxuICpcclxuICovXG5cbmZ1bmN0aW9uIGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIHtcbiAgLy8gVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZCwgc28gVFMgZG9lc24ndCBsaWtlIHVzIGRlc3RydWN0dXJpbmcgdGhpcyB0byBjaGVjayBpdHMgZXhpc3RlbmNlLlxuICAvLyBAdHMtaWdub3JlXG4gIHB1cmUsXG4gIGFyZVN0YXRlc0VxdWFsID0gc3RyaWN0RXF1YWwsXG4gIGFyZU93blByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZVN0YXRlUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgLy8gdXNlIFJlYWN0J3MgZm9yd2FyZFJlZiB0byBleHBvc2UgYSByZWYgb2YgdGhlIHdyYXBwZWQgY29tcG9uZW50XG4gIGZvcndhcmRSZWYgPSBmYWxzZSxcbiAgLy8gdGhlIGNvbnRleHQgY29uc3VtZXIgdG8gdXNlXG4gIGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dFxufSA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHB1cmUgIT09IHVuZGVmaW5lZCAmJiAhaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbikge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbiA9IHRydWU7XG4gICAgICB3YXJuaW5nKCdUaGUgYHB1cmVgIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBgY29ubmVjdGAgaXMgbm93IGFsd2F5cyBhIFwicHVyZS9tZW1vaXplZFwiIGNvbXBvbmVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IENvbnRleHQgPSBjb250ZXh0O1xuICBjb25zdCBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWFwU3RhdGVUb1Byb3BzRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMpO1xuICBjb25zdCBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeShtYXBEaXNwYXRjaFRvUHJvcHMpO1xuICBjb25zdCBpbml0TWVyZ2VQcm9wcyA9IG1lcmdlUHJvcHNGYWN0b3J5KG1lcmdlUHJvcHMpO1xuICBjb25zdCBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBCb29sZWFuKG1hcFN0YXRlVG9Qcm9wcyk7XG5cbiAgY29uc3Qgd3JhcFdpdGhDb25uZWN0ID0gV3JhcHBlZENvbXBvbmVudCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRFbGVtZW50VHlwZShXcmFwcGVkQ29tcG9uZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICR7c3RyaW5naWZ5Q29tcG9uZW50KFdyYXBwZWRDb21wb25lbnQpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgQ29ubmVjdCgke3dyYXBwZWRDb21wb25lbnROYW1lfSlgO1xuICAgIGNvbnN0IHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSB7XG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIHdyYXBwZWRDb21wb25lbnROYW1lLFxuICAgICAgV3JhcHBlZENvbXBvbmVudCxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHMsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHMsXG4gICAgICBhcmVTdGF0ZXNFcXVhbCxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgIGFyZU93blByb3BzRXF1YWwsXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIENvbm5lY3RGdW5jdGlvbihwcm9wcykge1xuICAgICAgY29uc3QgW3Byb3BzQ29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBEaXN0aW5ndWlzaCBiZXR3ZWVuIGFjdHVhbCBcImRhdGFcIiBwcm9wcyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSB3cmFwcGVyIGNvbXBvbmVudCxcbiAgICAgICAgLy8gYW5kIHZhbHVlcyBuZWVkZWQgdG8gY29udHJvbCBiZWhhdmlvciAoZm9yd2FyZGVkIHJlZnMsIGFsdGVybmF0ZSBjb250ZXh0IGluc3RhbmNlcykuXG4gICAgICAgIC8vIFRvIG1haW50YWluIHRoZSB3cmFwcGVyUHJvcHMgb2JqZWN0IHJlZmVyZW5jZSwgbWVtb2l6ZSB0aGlzIGRlc3RydWN0dXJpbmcuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXG4gICAgICAgIH0gPSBwcm9wcyxcbiAgICAgICAgICAgICAgd3JhcHBlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgICAgcmV0dXJuIFtwcm9wcy5jb250ZXh0LCByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCB3cmFwcGVyUHJvcHNdO1xuICAgICAgfSwgW3Byb3BzXSk7XG4gICAgICBjb25zdCBDb250ZXh0VG9Vc2UgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVXNlcnMgbWF5IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGN1c3RvbSBjb250ZXh0IGluc3RhbmNlIHRvIHVzZSBpbnN0ZWFkIG9mIG91ciBSZWFjdFJlZHV4Q29udGV4dC5cbiAgICAgICAgLy8gTWVtb2l6ZSB0aGUgY2hlY2sgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIGNvbnRleHQgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZS5cbiAgICAgICAgcmV0dXJuIHByb3BzQ29udGV4dCAmJiBwcm9wc0NvbnRleHQuQ29uc3VtZXIgJiYgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpc0NvbnRleHRDb25zdW1lciggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQocHJvcHNDb250ZXh0LkNvbnN1bWVyLCBudWxsKSkgPyBwcm9wc0NvbnRleHQgOiBDb250ZXh0O1xuICAgICAgfSwgW3Byb3BzQ29udGV4dCwgQ29udGV4dF0pOyAvLyBSZXRyaWV2ZSB0aGUgc3RvcmUgYW5kIGFuY2VzdG9yIHN1YnNjcmlwdGlvbiB2aWEgY29udGV4dCwgaWYgYXZhaWxhYmxlXG5cbiAgICAgIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZUNvbnRleHQoQ29udGV4dFRvVXNlKTsgLy8gVGhlIHN0b3JlIF9tdXN0XyBleGlzdCBhcyBlaXRoZXIgYSBwcm9wIG9yIGluIGNvbnRleHQuXG4gICAgICAvLyBXZSdsbCBjaGVjayB0byBzZWUgaWYgaXQgX2xvb2tzXyBsaWtlIGEgUmVkdXggc3RvcmUgZmlyc3QuXG4gICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBwYXNzIHRocm91Z2ggYSBgc3RvcmVgIHByb3AgdGhhdCBpcyBqdXN0IGEgcGxhaW4gdmFsdWUuXG5cbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA9IEJvb2xlYW4ocHJvcHMuc3RvcmUpICYmIEJvb2xlYW4ocHJvcHMuc3RvcmUuZ2V0U3RhdGUpICYmIEJvb2xlYW4ocHJvcHMuc3RvcmUuZGlzcGF0Y2gpO1xuICAgICAgY29uc3QgZGlkU3RvcmVDb21lRnJvbUNvbnRleHQgPSBCb29sZWFuKGNvbnRleHRWYWx1ZSkgJiYgQm9vbGVhbihjb250ZXh0VmFsdWUuc3RvcmUpO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhZGlkU3RvcmVDb21lRnJvbVByb3BzICYmICFkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFwic3RvcmVcIiBpbiB0aGUgY29udGV4dCBvZiBgICsgYFwiJHtkaXNwbGF5TmFtZX1cIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgYCArIGBvciBwYXNzIGEgY3VzdG9tIFJlYWN0IGNvbnRleHQgcHJvdmlkZXIgdG8gPFByb3ZpZGVyPiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCArIGBSZWFjdCBjb250ZXh0IGNvbnN1bWVyIHRvICR7ZGlzcGxheU5hbWV9IGluIGNvbm5lY3Qgb3B0aW9ucy5gKTtcbiAgICAgIH0gLy8gQmFzZWQgb24gdGhlIHByZXZpb3VzIGNoZWNrLCBvbmUgb2YgdGhlc2UgbXVzdCBiZSB0cnVlXG5cblxuICAgICAgY29uc3Qgc3RvcmUgPSBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPyBwcm9wcy5zdG9yZSA6IGNvbnRleHRWYWx1ZS5zdG9yZTtcbiAgICAgIGNvbnN0IGdldFNlcnZlclN0YXRlID0gZGlkU3RvcmVDb21lRnJvbUNvbnRleHQgPyBjb250ZXh0VmFsdWUuZ2V0U2VydmVyU3RhdGUgOiBzdG9yZS5nZXRTdGF0ZTtcbiAgICAgIGNvbnN0IGNoaWxkUHJvcHNTZWxlY3RvciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBUaGUgY2hpbGQgcHJvcHMgc2VsZWN0b3IgbmVlZHMgdGhlIHN0b3JlIHJlZmVyZW5jZSBhcyBhbiBpbnB1dC5cbiAgICAgICAgLy8gUmUtY3JlYXRlIHRoaXMgc2VsZWN0b3Igd2hlbmV2ZXIgdGhlIHN0b3JlIGNoYW5nZXMuXG4gICAgICAgIHJldHVybiBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5KHN0b3JlLmRpc3BhdGNoLCBzZWxlY3RvckZhY3RvcnlPcHRpb25zKTtcbiAgICAgIH0sIFtzdG9yZV0pO1xuICAgICAgY29uc3QgW3N1YnNjcmlwdGlvbiwgbm90aWZ5TmVzdGVkU3Vic10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybiBOT19TVUJTQ1JJUFRJT05fQVJSQVk7IC8vIFRoaXMgU3Vic2NyaXB0aW9uJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxuICAgICAgICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN0b3JlIHZpYSBwcm9wcyBzaG91bGRuJ3QgdXNlIHN1YnNjcmlwdGlvbiBmcm9tIGNvbnRleHQsIG9yIHZpY2UgdmVyc2EuXG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPyB1bmRlZmluZWQgOiBjb250ZXh0VmFsdWUuc3Vic2NyaXB0aW9uKTsgLy8gYG5vdGlmeU5lc3RlZFN1YnNgIGlzIGR1cGxpY2F0ZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGluXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gVGhpcyBjYW5cbiAgICAgICAgLy8gcHJvYmFibHkgYmUgYXZvaWRlZCBpZiBTdWJzY3JpcHRpb24ncyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnNcbiAgICAgICAgLy8gdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZSAgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcC5cblxuICAgICAgICBjb25zdCBub3RpZnlOZXN0ZWRTdWJzID0gc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZChzdWJzY3JpcHRpb24pO1xuICAgICAgICByZXR1cm4gW3N1YnNjcmlwdGlvbiwgbm90aWZ5TmVzdGVkU3Vic107XG4gICAgICB9LCBbc3RvcmUsIGRpZFN0b3JlQ29tZUZyb21Qcm9wcywgY29udGV4dFZhbHVlXSk7IC8vIERldGVybWluZSB3aGF0IHtzdG9yZSwgc3Vic2NyaXB0aW9ufSB2YWx1ZSBzaG91bGQgYmUgcHV0IGludG8gbmVzdGVkIGNvbnRleHQsIGlmIG5lY2Vzc2FyeSxcbiAgICAgIC8vIGFuZCBtZW1vaXplIHRoYXQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29udGV4dCB1cGRhdGVzLlxuXG4gICAgICBjb25zdCBvdmVycmlkZGVuQ29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaWRTdG9yZUNvbWVGcm9tUHJvcHMpIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBkaXJlY3RseSBzdWJzY3JpYmVkIHRvIGEgc3RvcmUgZnJvbSBwcm9wcy5cbiAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IGRlc2NlbmRhbnRzIHJlYWRpbmcgZnJvbSB0aGlzIHN0b3JlIC0gcGFzcyBkb3duIHdoYXRldmVyXG4gICAgICAgICAgLy8gdGhlIGV4aXN0aW5nIGNvbnRleHQgdmFsdWUgaXMgZnJvbSB0aGUgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHRWYWx1ZTtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIHB1dCB0aGlzIGNvbXBvbmVudCdzIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBpbnRvIGNvbnRleHQsIHNvIHRoYXRcbiAgICAgICAgLy8gY29ubmVjdGVkIGRlc2NlbmRhbnRzIHdvbid0IHVwZGF0ZSB1bnRpbCBhZnRlciB0aGlzIGNvbXBvbmVudCBpcyBkb25lXG5cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGNvbnRleHRWYWx1ZSwge1xuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0sIFtkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZSwgc3Vic2NyaXB0aW9uXSk7IC8vIFNldCB1cCByZWZzIHRvIGNvb3JkaW5hdGUgdmFsdWVzIGJldHdlZW4gdGhlIHN1YnNjcmlwdGlvbiBlZmZlY3QgYW5kIHRoZSByZW5kZXIgbG9naWNcblxuICAgICAgY29uc3QgbGFzdENoaWxkUHJvcHMgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgIGNvbnN0IGxhc3RXcmFwcGVyUHJvcHMgPSBSZWFjdC51c2VSZWYod3JhcHBlclByb3BzKTtcbiAgICAgIGNvbnN0IGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgIGNvbnN0IHJlbmRlcklzU2NoZWR1bGVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzUHJvY2Vzc2luZ0Rpc3BhdGNoID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzTW91bnRlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gVHJpY2t5IGxvZ2ljIGhlcmU6XG4gICAgICAgICAgLy8gLSBUaGlzIHJlbmRlciBtYXkgaGF2ZSBiZWVuIHRyaWdnZXJlZCBieSBhIFJlZHV4IHN0b3JlIHVwZGF0ZSB0aGF0IHByb2R1Y2VkIG5ldyBjaGlsZCBwcm9wc1xuICAgICAgICAgIC8vIC0gSG93ZXZlciwgd2UgbWF5IGhhdmUgZ290dGVuIG5ldyB3cmFwcGVyIHByb3BzIGFmdGVyIHRoYXRcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5ldyBjaGlsZCBwcm9wcywgYW5kIHRoZSBzYW1lIHdyYXBwZXIgcHJvcHMsIHdlIGtub3cgd2Ugc2hvdWxkIHVzZSB0aGUgbmV3IGNoaWxkIHByb3BzIGFzLWlzLlxuICAgICAgICAgIC8vIEJ1dCwgaWYgd2UgaGF2ZSBuZXcgd3JhcHBlciBwcm9wcywgdGhvc2UgbWlnaHQgY2hhbmdlIHRoZSBjaGlsZCBwcm9wcywgc28gd2UgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGluZ3MuXG4gICAgICAgICAgLy8gU28sIHdlJ2xsIHVzZSB0aGUgY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGUgb25seSBpZiB0aGUgd3JhcHBlciBwcm9wcyBhcmUgdGhlIHNhbWUgYXMgbGFzdCB0aW1lLlxuICAgICAgICAgIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgJiYgd3JhcHBlclByb3BzID09PSBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQ7XG4gICAgICAgICAgfSAvLyBUT0RPIFdlJ3JlIHJlYWRpbmcgdGhlIHN0b3JlIGRpcmVjdGx5IGluIHJlbmRlcigpIGhlcmUuIEJhZCBpZGVhP1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCBsaWtlbHkgY2F1c2UgQmFkIFRoaW5ncyAoVE0pIHRvIGhhcHBlbiBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIHRoaXMgYmVjYXVzZSBvbiByZW5kZXJzIF9ub3RfIGNhdXNlZCBieSBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRoZSBsYXRlc3Qgc3RvcmUgc3RhdGVcbiAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlLlxuXG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc1NlbGVjdG9yKHN0b3JlLmdldFN0YXRlKCksIHdyYXBwZXJQcm9wcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfSwgW3N0b3JlLCB3cmFwcGVyUHJvcHNdKTsgLy8gV2UgbmVlZCB0aGlzIHRvIGV4ZWN1dGUgc3luY2hyb25vdXNseSBldmVyeSB0aW1lIHdlIHJlLXJlbmRlci4gSG93ZXZlciwgUmVhY3Qgd2FybnNcbiAgICAgIC8vIGFib3V0IHVzZUxheW91dEVmZmVjdCBpbiBTU1IsIHNvIHdlIHRyeSB0byBkZXRlY3QgZW52aXJvbm1lbnQgYW5kIGZhbGwgYmFjayB0b1xuICAgICAgLy8ganVzdCB1c2VFZmZlY3QgaW5zdGVhZCB0byBhdm9pZCB0aGUgd2FybmluZywgc2luY2UgbmVpdGhlciB3aWxsIHJ1biBhbnl3YXkuXG5cbiAgICAgIGNvbnN0IHN1YnNjcmliZUZvclJlYWN0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IHJlYWN0TGlzdGVuZXIgPT4ge1xuICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1YnNjcmliZVVwZGF0ZXMoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLCBzdG9yZSwgc3Vic2NyaXB0aW9uLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgcmVhY3RMaXN0ZW5lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZTtcbiAgICAgIH0sIFtzdWJzY3JpcHRpb25dKTtcbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhjYXB0dXJlV3JhcHBlclByb3BzLCBbbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCB3cmFwcGVyUHJvcHMsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnNdKTtcbiAgICAgIGxldCBhY3R1YWxDaGlsZFByb3BzO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhY3R1YWxDaGlsZFByb3BzID0gdXNlU3luY0V4dGVybmFsU3RvcmUoIC8vIFRPRE8gV2UncmUgcGFzc2luZyB0aHJvdWdoIGEgYmlnIHdyYXBwZXIgdGhhdCBkb2VzIGEgYnVuY2ggb2YgZXh0cmEgc2lkZSBlZmZlY3RzIGJlc2lkZXMgc3Vic2NyaWJpbmdcbiAgICAgICAgc3Vic2NyaWJlRm9yUmVhY3QsIC8vIFRPRE8gVGhpcyBpcyBpbmNyZWRpYmx5IGhhY2t5LiBXZSd2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGUgc3RvcmUgdXBkYXRlIGFuZCBjYWxjdWxhdGVkIG5ldyBjaGlsZCBwcm9wcyxcbiAgICAgICAgLy8gVE9ETyBhbmQgd2UncmUganVzdCBwYXNzaW5nIHRoYXQgdGhyb3VnaCBzbyBpdCB0cmlnZ2VycyBhIHJlLXJlbmRlciBmb3IgdXMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBgdVNFU2AuXG4gICAgICAgIGFjdHVhbENoaWxkUHJvcHNTZWxlY3RvciwgZ2V0U2VydmVyU3RhdGUgPyAoKSA9PiBjaGlsZFByb3BzU2VsZWN0b3IoZ2V0U2VydmVyU3RhdGUoKSwgd3JhcHBlclByb3BzKSA6IGFjdHVhbENoaWxkUHJvcHNTZWxlY3Rvcik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCkge1xuICAgICAgICAgIDtcbiAgICAgICAgICBlcnIubWVzc2FnZSArPSBgXFxuVGhlIGVycm9yIG1heSBiZSBjb3JyZWxhdGVkIHdpdGggdGhpcyBwcmV2aW91cyBlcnJvcjpcXG4ke2xhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudC5zdGFja31cXG5cXG5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxhc3RDaGlsZFByb3BzLmN1cnJlbnQgPSBhY3R1YWxDaGlsZFByb3BzO1xuICAgICAgfSk7IC8vIE5vdyB0aGF0IGFsbCB0aGF0J3MgZG9uZSwgd2UgY2FuIGZpbmFsbHkgdHJ5IHRvIGFjdHVhbGx5IHJlbmRlciB0aGUgY2hpbGQgY29tcG9uZW50LlxuICAgICAgLy8gV2UgbWVtb2l6ZSB0aGUgZWxlbWVudHMgZm9yIHRoZSByZW5kZXJlZCBjaGlsZCBjb21wb25lbnQgYXMgYW4gb3B0aW1pemF0aW9uLlxuXG4gICAgICBjb25zdCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgX2V4dGVuZHMoe30sIGFjdHVhbENoaWxkUHJvcHMsIHtcbiAgICAgICAgICAgIHJlZjogcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfSwgW3JlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIFdyYXBwZWRDb21wb25lbnQsIGFjdHVhbENoaWxkUHJvcHNdKTsgLy8gSWYgUmVhY3Qgc2VlcyB0aGUgZXhhY3Qgc2FtZSBlbGVtZW50IHJlZmVyZW5jZSBhcyBsYXN0IHRpbWUsIGl0IGJhaWxzIG91dCBvZiByZS1yZW5kZXJpbmdcbiAgICAgIC8vIHRoYXQgY2hpbGQsIHNhbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gUmVhY3QubWVtbygpIG9yIHJldHVybmVkIGZhbHNlIGZyb20gc2hvdWxkQ29tcG9uZW50VXBkYXRlLlxuXG4gICAgICBjb25zdCByZW5kZXJlZENoaWxkID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCBpcyBzdWJzY3JpYmVkIHRvIHN0b3JlIHVwZGF0ZXMsIHdlIG5lZWQgdG8gcGFzcyBpdHMgb3duXG4gICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIGluc3RhbmNlIGRvd24gdG8gb3VyIGRlc2NlbmRhbnRzLiBUaGF0IG1lYW5zIHJlbmRlcmluZyB0aGUgc2FtZVxuICAgICAgICAgIC8vIENvbnRleHQgaW5zdGFuY2UsIGFuZCBwdXR0aW5nIGEgZGlmZmVyZW50IHZhbHVlIGludG8gdGhlIGNvbnRleHQuXG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHRUb1VzZS5Qcm92aWRlciwge1xuICAgICAgICAgICAgdmFsdWU6IG92ZXJyaWRkZW5Db250ZXh0VmFsdWVcbiAgICAgICAgICB9LCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIH0sIFtDb250ZXh0VG9Vc2UsIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCwgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZV0pO1xuICAgICAgcmV0dXJuIHJlbmRlcmVkQ2hpbGQ7XG4gICAgfVxuXG4gICAgY29uc3QgX0Nvbm5lY3QgPSBSZWFjdC5tZW1vKENvbm5lY3RGdW5jdGlvbik7XG5cbiAgICAvLyBBZGQgYSBoYWNreSBjYXN0IHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IHR5cGVcbiAgICBjb25zdCBDb25uZWN0ID0gX0Nvbm5lY3Q7XG4gICAgQ29ubmVjdC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICBDb25uZWN0LmRpc3BsYXlOYW1lID0gQ29ubmVjdEZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG5cbiAgICBpZiAoZm9yd2FyZFJlZikge1xuICAgICAgY29uc3QgX2ZvcndhcmRlZCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gZm9yd2FyZENvbm5lY3RSZWYocHJvcHMsIHJlZikge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb25uZWN0LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmOiByZWZcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcndhcmRlZCA9IF9mb3J3YXJkZWQ7XG4gICAgICBmb3J3YXJkZWQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIGZvcndhcmRlZC5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcbiAgICAgIHJldHVybiBob2lzdFN0YXRpY3MoZm9yd2FyZGVkLCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9pc3RTdGF0aWNzKENvbm5lY3QsIFdyYXBwZWRDb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiB3cmFwV2l0aENvbm5lY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3Q7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHZlcmlmeVBsYWluT2JqZWN0IGZyb20gJy4uL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0JztcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRBcmdGYWN0b3J5IH0gZnJvbSAnLi9pbnZhbGlkQXJnRmFjdG9yeSc7XG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpIHtcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykge1xuICByZXR1cm4gZnVuY3Rpb24gaW5pdE1lcmdlUHJvcHNQcm94eShkaXNwYXRjaCwge1xuICAgIGRpc3BsYXlOYW1lLFxuICAgIGFyZU1lcmdlZFByb3BzRXF1YWxcbiAgfSkge1xuICAgIGxldCBoYXNSdW5PbmNlID0gZmFsc2U7XG4gICAgbGV0IG1lcmdlZFByb3BzO1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZVByb3BzUHJveHkoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpIHtcbiAgICAgIGNvbnN0IG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xuXG4gICAgICBpZiAoaGFzUnVuT25jZSkge1xuICAgICAgICBpZiAoIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzUnVuT25jZSA9IHRydWU7XG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgdmVyaWZ5UGxhaW5PYmplY3QobWVyZ2VkUHJvcHMsIGRpc3BsYXlOYW1lLCAnbWVyZ2VQcm9wcycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVByb3BzRmFjdG9yeShtZXJnZVByb3BzKSB7XG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/ICgpID0+IGRlZmF1bHRNZXJnZVByb3BzIDogdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiBjcmVhdGVJbnZhbGlkQXJnRmFjdG9yeShtZXJnZVByb3BzLCAnbWVyZ2VQcm9wcycpO1xufSIsICJpbXBvcnQgeyBnZXRCYXRjaCB9IGZyb20gJy4vYmF0Y2gnOyAvLyBlbmNhcHN1bGF0ZXMgdGhlIHN1YnNjcmlwdGlvbiBsb2dpYyBmb3IgY29ubmVjdGluZyBhIGNvbXBvbmVudCB0byB0aGUgcmVkdXggc3RvcmUsIGFzXG4vLyB3ZWxsIGFzIG5lc3Rpbmcgc3Vic2NyaXB0aW9ucyBvZiBkZXNjZW5kYW50IGNvbXBvbmVudHMsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSB0aGVcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xuXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IGJhdGNoID0gZ2V0QmF0Y2goKTtcbiAgbGV0IGZpcnN0ID0gbnVsbDtcbiAgbGV0IGxhc3QgPSBudWxsO1xuICByZXR1cm4ge1xuICAgIGNsZWFyKCkge1xuICAgICAgZmlyc3QgPSBudWxsO1xuICAgICAgbGFzdCA9IG51bGw7XG4gICAgfSxcblxuICAgIG5vdGlmeSgpIHtcbiAgICAgIGJhdGNoKCgpID0+IHtcbiAgICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgICAgd2hpbGUgKGxpc3RlbmVyKSB7XG4gICAgICAgICAgbGlzdGVuZXIuY2FsbGJhY2soKTtcbiAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBnZXQoKSB7XG4gICAgICBsZXQgbGlzdGVuZXJzID0gW107XG4gICAgICBsZXQgbGlzdGVuZXIgPSBmaXJzdDtcblxuICAgICAgd2hpbGUgKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgIH0sXG5cbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIGxldCBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgbGV0IGxpc3RlbmVyID0gbGFzdCA9IHtcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIHByZXY6IGxhc3RcbiAgICAgIH07XG5cbiAgICAgIGlmIChsaXN0ZW5lci5wcmV2KSB7XG4gICAgICAgIGxpc3RlbmVyLnByZXYubmV4dCA9IGxpc3RlbmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlyc3QgPSBsaXN0ZW5lcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICBpZiAoIWlzU3Vic2NyaWJlZCB8fCBmaXJzdCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAobGlzdGVuZXIubmV4dCkge1xuICAgICAgICAgIGxpc3RlbmVyLm5leHQucHJldiA9IGxpc3RlbmVyLnByZXY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdCA9IGxpc3RlbmVyLnByZXY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICAgIGxpc3RlbmVyLnByZXYubmV4dCA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlyc3QgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICB9O1xufVxuXG5jb25zdCBudWxsTGlzdGVuZXJzID0ge1xuICBub3RpZnkoKSB7fSxcblxuICBnZXQ6ICgpID0+IFtdXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgcGFyZW50U3ViKSB7XG4gIGxldCB1bnN1YnNjcmliZTtcbiAgbGV0IGxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7IC8vIFJlYXNvbnMgdG8ga2VlcCB0aGUgc3Vic2NyaXB0aW9uIGFjdGl2ZVxuXG4gIGxldCBzdWJzY3JpcHRpb25zQW1vdW50ID0gMDsgLy8gSXMgdGhpcyBzcGVjaWZpYyBzdWJzY3JpcHRpb24gc3Vic2NyaWJlZCAob3Igb25seSBuZXN0ZWQgb25lcz8pXG5cbiAgbGV0IHNlbGZTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XG4gICAgdHJ5U3Vic2NyaWJlKCk7XG4gICAgY29uc3QgY2xlYW51cExpc3RlbmVyID0gbGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7IC8vIGNsZWFudXAgbmVzdGVkIHN1YlxuXG4gICAgbGV0IHJlbW92ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKCFyZW1vdmVkKSB7XG4gICAgICAgIHJlbW92ZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwTGlzdGVuZXIoKTtcbiAgICAgICAgdHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbm90aWZ5TmVzdGVkU3VicygpIHtcbiAgICBsaXN0ZW5lcnMubm90aWZ5KCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VXcmFwcGVyKCkge1xuICAgIGlmIChzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSkge1xuICAgICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N1YnNjcmliZWQoKSB7XG4gICAgcmV0dXJuIHNlbGZTdWJzY3JpYmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJ5U3Vic2NyaWJlKCkge1xuICAgIHN1YnNjcmlwdGlvbnNBbW91bnQrKztcblxuICAgIGlmICghdW5zdWJzY3JpYmUpIHtcbiAgICAgIHVuc3Vic2NyaWJlID0gcGFyZW50U3ViID8gcGFyZW50U3ViLmFkZE5lc3RlZFN1YihoYW5kbGVDaGFuZ2VXcmFwcGVyKSA6IHN0b3JlLnN1YnNjcmliZShoYW5kbGVDaGFuZ2VXcmFwcGVyKTtcbiAgICAgIGxpc3RlbmVycyA9IGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlKCkge1xuICAgIHN1YnNjcmlwdGlvbnNBbW91bnQtLTtcblxuICAgIGlmICh1bnN1YnNjcmliZSAmJiBzdWJzY3JpcHRpb25zQW1vdW50ID09PSAwKSB7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgdW5zdWJzY3JpYmUgPSB1bmRlZmluZWQ7XG4gICAgICBsaXN0ZW5lcnMuY2xlYXIoKTtcbiAgICAgIGxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5U3Vic2NyaWJlU2VsZigpIHtcbiAgICBpZiAoIXNlbGZTdWJzY3JpYmVkKSB7XG4gICAgICBzZWxmU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICB0cnlTdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZVNlbGYoKSB7XG4gICAgaWYgKHNlbGZTdWJzY3JpYmVkKSB7XG4gICAgICBzZWxmU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgdHJ5VW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgYWRkTmVzdGVkU3ViLFxuICAgIG5vdGlmeU5lc3RlZFN1YnMsXG4gICAgaGFuZGxlQ2hhbmdlV3JhcHBlcixcbiAgICBpc1N1YnNjcmliZWQsXG4gICAgdHJ5U3Vic2NyaWJlOiB0cnlTdWJzY3JpYmVTZWxmLFxuICAgIHRyeVVuc3Vic2NyaWJlOiB0cnlVbnN1YnNjcmliZVNlbGYsXG4gICAgZ2V0TGlzdGVuZXJzOiAoKSA9PiBsaXN0ZW5lcnNcbiAgfTtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci4gV2UgbmVlZCB1c2VMYXlvdXRFZmZlY3QgdG8gZW5zdXJlIHRoZSBzdG9yZVxuLy8gc3Vic2NyaXB0aW9uIGNhbGxiYWNrIGFsd2F5cyBoYXMgdGhlIHNlbGVjdG9yIGZyb20gdGhlIGxhdGVzdCByZW5kZXIgY29tbWl0XG4vLyBhdmFpbGFibGUsIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgaGFwcGVuIGJldHdlZW4gcmVuZGVyIGFuZCB0aGUgZWZmZWN0LFxuLy8gd2hpY2ggbWF5IGNhdXNlIG1pc3NlZCB1cGRhdGVzOyB3ZSBhbHNvIG11c3QgZW5zdXJlIHRoZSBzdG9yZSBzdWJzY3JpcHRpb25cbi8vIGlzIGNyZWF0ZWQgc3luY2hyb25vdXNseSwgb3RoZXJ3aXNlIGEgc3RvcmUgdXBkYXRlIG1heSBvY2N1ciBiZWZvcmUgdGhlXG4vLyBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBhbmQgYW4gaW5jb25zaXN0ZW50IHN0YXRlIG1heSBiZSBvYnNlcnZlZFxuLy8gTWF0Y2hlcyBsb2dpYyBpbiBSZWFjdCdzIGBzaGFyZWQvRXhlY3V0aW9uRW52aXJvbm1lbnRgIGZpbGVcblxuZXhwb3J0IGNvbnN0IGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuZXhwb3J0IGNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBjYW5Vc2VET00gPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCc7XG5cbmZ1bmN0aW9uIFByb3ZpZGVyKHtcbiAgc3RvcmUsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICBzZXJ2ZXJTdGF0ZSxcbiAgc3RhYmlsaXR5Q2hlY2sgPSAnb25jZScsXG4gIG5vb3BDaGVjayA9ICdvbmNlJ1xufSkge1xuICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUpO1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlOiBzZXJ2ZXJTdGF0ZSA/ICgpID0+IHNlcnZlclN0YXRlIDogdW5kZWZpbmVkLFxuICAgICAgc3RhYmlsaXR5Q2hlY2ssXG4gICAgICBub29wQ2hlY2tcbiAgICB9O1xuICB9LCBbc3RvcmUsIHNlcnZlclN0YXRlLCBzdGFiaWxpdHlDaGVjaywgbm9vcENoZWNrXSk7XG4gIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHN0b3JlLmdldFN0YXRlKCksIFtzdG9yZV0pO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb25cbiAgICB9ID0gY29udGV4dFZhbHVlO1xuICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnM7XG4gICAgc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHByZXZpb3VzU3RhdGUgIT09IHN0b3JlLmdldFN0YXRlKCkpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfSwgW2NvbnRleHRWYWx1ZSwgcHJldmlvdXNTdGF0ZV0pO1xuICBjb25zdCBDb250ZXh0ID0gY29udGV4dCB8fCBSZWFjdFJlZHV4Q29udGV4dDsgLy8gQHRzLWlnbm9yZSAnQW55QWN0aW9uJyBpcyBhc3NpZ25hYmxlIHRvIHRoZSBjb25zdHJhaW50IG9mIHR5cGUgJ0EnLCBidXQgJ0EnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGVcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgfSwgY2hpbGRyZW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQcm92aWRlcjsiLCAiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IGFzIHVzZURlZmF1bHRSZWR1eENvbnRleHQsIGNyZWF0ZVJlZHV4Q29udGV4dEhvb2sgfSBmcm9tICcuL3VzZVJlZHV4Q29udGV4dCc7XG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlU3RvcmVgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlSG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gLy8gQHRzLWlnbm9yZVxuICBjb250ZXh0ID09PSBSZWFjdFJlZHV4Q29udGV4dCA/IHVzZURlZmF1bHRSZWR1eENvbnRleHQgOiAvLyBAdHMtaWdub3JlXG4gIGNyZWF0ZVJlZHV4Q29udGV4dEhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VTdG9yZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzdG9yZVxuICAgIH0gPSB1c2VSZWR1eENvbnRleHQoKTsgLy8gQHRzLWlnbm9yZVxuXG4gICAgcmV0dXJuIHN0b3JlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHJlZHV4IHN0b3JlLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fSB0aGUgcmVkdXggc3RvcmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VTdG9yZSB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgRXhhbXBsZUNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKClcclxuICogICByZXR1cm4gPGRpdj57c3RvcmUuZ2V0U3RhdGUoKX08L2Rpdj5cclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVN0b3JlID0gLyojX19QVVJFX18qL2NyZWF0ZVN0b3JlSG9vaygpOyIsICJpbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VTdG9yZSBhcyB1c2VEZWZhdWx0U3RvcmUsIGNyZWF0ZVN0b3JlSG9vayB9IGZyb20gJy4vdXNlU3RvcmUnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZURpc3BhdGNoYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaXNwYXRjaEhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVN0b3JlID0gLy8gQHRzLWlnbm9yZVxuICBjb250ZXh0ID09PSBSZWFjdFJlZHV4Q29udGV4dCA/IHVzZURlZmF1bHRTdG9yZSA6IGNyZWF0ZVN0b3JlSG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZURpc3BhdGNoKCkge1xuICAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUoKTsgLy8gQHRzLWlnbm9yZVxuXG4gICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHJlZHV4IGBkaXNwYXRjaGAgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl8ZnVuY3Rpb259IHJlZHV4IHN0b3JlJ3MgYGRpc3BhdGNoYCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoeyB2YWx1ZSB9KSA9PiB7XHJcbiAqICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpXHJcbiAqICAgY29uc3QgaW5jcmVhc2VDb3VudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4gZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVhc2UtY291bnRlcicgfSksIFtdKVxyXG4gKiAgIHJldHVybiAoXHJcbiAqICAgICA8ZGl2PlxyXG4gKiAgICAgICA8c3Bhbj57dmFsdWV9PC9zcGFuPlxyXG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e2luY3JlYXNlQ291bnRlcn0+SW5jcmVhc2UgY291bnRlcjwvYnV0dG9uPlxyXG4gKiAgICAgPC9kaXY+XHJcbiAqICAgKVxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlRGlzcGF0Y2ggPSAvKiNfX1BVUkVfXyovY3JlYXRlRGlzcGF0Y2hIb29rKCk7IiwgImltcG9ydCB7IFR5cGVkVXNlU2VsZWN0b3JIb29rLCB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB0eXBlIHsgUm9vdFN0YXRlLCBBcHBEaXNwYXRjaCB9IGZyb20gXCIuL3N0b3JlXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VBcHBEaXNwYXRjaCA9ICgpID0+IHVzZURpc3BhdGNoPEFwcERpc3BhdGNoPigpO1xuZXhwb3J0IGNvbnN0IHVzZUFwcFNlbGVjdG9yOiBUeXBlZFVzZVNlbGVjdG9ySG9vazxSb290U3RhdGU+ID0gdXNlU2VsZWN0b3I7XG4iLCAiY29uc3QgZXJyb3JzID0ge1xuXHQwOiBcIklsbGVnYWwgc3RhdGVcIixcblx0MTogXCJJbW1lciBkcmFmdHMgY2Fubm90IGhhdmUgY29tcHV0ZWQgcHJvcGVydGllc1wiLFxuXHQyOiBcIlRoaXMgb2JqZWN0IGhhcyBiZWVuIGZyb3plbiBhbmQgc2hvdWxkIG5vdCBiZSBtdXRhdGVkXCIsXG5cdDMoZGF0YTogYW55KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdFwiQ2Fubm90IHVzZSBhIHByb3h5IHRoYXQgaGFzIGJlZW4gcmV2b2tlZC4gRGlkIHlvdSBwYXNzIGFuIG9iamVjdCBmcm9tIGluc2lkZSBhbiBpbW1lciBmdW5jdGlvbiB0byBhbiBhc3luYyBwcm9jZXNzPyBcIiArXG5cdFx0XHRkYXRhXG5cdFx0KVxuXHR9LFxuXHQ0OiBcIkFuIGltbWVyIHByb2R1Y2VyIHJldHVybmVkIGEgbmV3IHZhbHVlICphbmQqIG1vZGlmaWVkIGl0cyBkcmFmdC4gRWl0aGVyIHJldHVybiBhIG5ldyB2YWx1ZSAqb3IqIG1vZGlmeSB0aGUgZHJhZnQuXCIsXG5cdDU6IFwiSW1tZXIgZm9yYmlkcyBjaXJjdWxhciByZWZlcmVuY2VzXCIsXG5cdDY6IFwiVGhlIGZpcnN0IG9yIHNlY29uZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uXCIsXG5cdDc6IFwiVGhlIHRoaXJkIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgdW5kZWZpbmVkXCIsXG5cdDg6IFwiRmlyc3QgYXJndW1lbnQgdG8gYGNyZWF0ZURyYWZ0YCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LCBhbiBhcnJheSwgb3IgYW4gaW1tZXJhYmxlIG9iamVjdFwiLFxuXHQ5OiBcIkZpcnN0IGFyZ3VtZW50IHRvIGBmaW5pc2hEcmFmdGAgbXVzdCBiZSBhIGRyYWZ0IHJldHVybmVkIGJ5IGBjcmVhdGVEcmFmdGBcIixcblx0MTA6IFwiVGhlIGdpdmVuIGRyYWZ0IGlzIGFscmVhZHkgZmluYWxpemVkXCIsXG5cdDExOiBcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpIGNhbm5vdCBiZSB1c2VkIG9uIGFuIEltbWVyIGRyYWZ0XCIsXG5cdDEyOiBcIk9iamVjdC5zZXRQcm90b3R5cGVPZigpIGNhbm5vdCBiZSB1c2VkIG9uIGFuIEltbWVyIGRyYWZ0XCIsXG5cdDEzOiBcIkltbWVyIG9ubHkgc3VwcG9ydHMgZGVsZXRpbmcgYXJyYXkgaW5kaWNlc1wiLFxuXHQxNDogXCJJbW1lciBvbmx5IHN1cHBvcnRzIHNldHRpbmcgYXJyYXkgaW5kaWNlcyBhbmQgdGhlICdsZW5ndGgnIHByb3BlcnR5XCIsXG5cdDE1KHBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiBcIkNhbm5vdCBhcHBseSBwYXRjaCwgcGF0aCBkb2Vzbid0IHJlc29sdmU6IFwiICsgcGF0aFxuXHR9LFxuXHQxNjogJ1NldHMgY2Fubm90IGhhdmUgXCJyZXBsYWNlXCIgcGF0Y2hlcy4nLFxuXHQxNyhvcDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIFwiVW5zdXBwb3J0ZWQgcGF0Y2ggb3BlcmF0aW9uOiBcIiArIG9wXG5cdH0sXG5cdDE4KHBsdWdpbjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGBUaGUgcGx1Z2luIGZvciAnJHtwbHVnaW59JyBoYXMgbm90IGJlZW4gbG9hZGVkIGludG8gSW1tZXIuIFRvIGVuYWJsZSB0aGUgcGx1Z2luLCBpbXBvcnQgYW5kIGNhbGwgXFxgZW5hYmxlJHtwbHVnaW59KClcXGAgd2hlbiBpbml0aWFsaXppbmcgeW91ciBhcHBsaWNhdGlvbi5gXG5cdH0sXG5cdDIwOiBcIkNhbm5vdCB1c2UgcHJveGllcyBpZiBQcm94eSwgUHJveHkucmV2b2NhYmxlIG9yIFJlZmxlY3QgYXJlIG5vdCBhdmFpbGFibGVcIixcblx0MjEodGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgcHJvZHVjZSBjYW4gb25seSBiZSBjYWxsZWQgb24gdGhpbmdzIHRoYXQgYXJlIGRyYWZ0YWJsZTogcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBNYXAsIFNldCBvciBjbGFzc2VzIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdbaW1tZXJhYmxlXTogdHJ1ZScuIEdvdCAnJHt0aGluZ30nYFxuXHR9LFxuXHQyMih0aGluZzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGAnY3VycmVudCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6ICR7dGhpbmd9YFxuXHR9LFxuXHQyMyh0aGluZzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGAnb3JpZ2luYWwnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWBcblx0fSxcblx0MjQ6IFwiUGF0Y2hpbmcgcmVzZXJ2ZWQgYXR0cmlidXRlcyBsaWtlIF9fcHJvdG9fXywgcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBpcyBub3QgYWxsb3dlZFwiXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWUoZXJyb3I6IGtleW9mIHR5cGVvZiBlcnJvcnMsIC4uLmFyZ3M6IGFueVtdKTogbmV2ZXIge1xuXHRpZiAoX19ERVZfXykge1xuXHRcdGNvbnN0IGUgPSBlcnJvcnNbZXJyb3JdXG5cdFx0Y29uc3QgbXNnID0gIWVcblx0XHRcdD8gXCJ1bmtub3duIGVycm9yIG5yOiBcIiArIGVycm9yXG5cdFx0XHQ6IHR5cGVvZiBlID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdD8gZS5hcHBseShudWxsLCBhcmdzIGFzIGFueSlcblx0XHRcdDogZVxuXHRcdHRocm93IG5ldyBFcnJvcihgW0ltbWVyXSAke21zZ31gKVxuXHR9XG5cdHRocm93IG5ldyBFcnJvcihcblx0XHRgW0ltbWVyXSBtaW5pZmllZCBlcnJvciBucjogJHtlcnJvcn0ke1xuXHRcdFx0YXJncy5sZW5ndGggPyBcIiBcIiArIGFyZ3MubWFwKHMgPT4gYCcke3N9J2ApLmpvaW4oXCIsXCIpIDogXCJcIlxuXHRcdH0uIEZpbmQgdGhlIGZ1bGwgZXJyb3IgYXQ6IGh0dHBzOi8vYml0Lmx5LzNjWEVLV2ZgXG5cdClcbn1cbiIsICJpbXBvcnQge1xuXHREUkFGVF9TVEFURSxcblx0RFJBRlRBQkxFLFxuXHRoYXNTZXQsXG5cdE9iamVjdGlzaCxcblx0RHJhZnRlZCxcblx0QW55T2JqZWN0LFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0SW1tZXJTdGF0ZSxcblx0aGFzTWFwLFxuXHRBcmNodHlwZSxcblx0ZGllXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIEltbWVyIGRyYWZ0ICovXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFmdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIXZhbHVlICYmICEhdmFsdWVbRFJBRlRfU1RBVEVdXG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGNhbiBiZSBkcmFmdGVkIGJ5IEltbWVyICovXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFmdGFibGUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2Vcblx0cmV0dXJuIChcblx0XHRpc1BsYWluT2JqZWN0KHZhbHVlKSB8fFxuXHRcdEFycmF5LmlzQXJyYXkodmFsdWUpIHx8XG5cdFx0ISF2YWx1ZVtEUkFGVEFCTEVdIHx8XG5cdFx0ISF2YWx1ZS5jb25zdHJ1Y3Rvcj8uW0RSQUZUQUJMRV0gfHxcblx0XHRpc01hcCh2YWx1ZSkgfHxcblx0XHRpc1NldCh2YWx1ZSlcblx0KVxufVxuXG5jb25zdCBvYmplY3RDdG9yU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2Vcblx0Y29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpXG5cdGlmIChwcm90byA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblx0Y29uc3QgQ3RvciA9XG5cdFx0T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3JcblxuXHRpZiAoQ3RvciA9PT0gT2JqZWN0KSByZXR1cm4gdHJ1ZVxuXG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIEN0b3IgPT0gXCJmdW5jdGlvblwiICYmXG5cdFx0RnVuY3Rpb24udG9TdHJpbmcuY2FsbChDdG9yKSA9PT0gb2JqZWN0Q3RvclN0cmluZ1xuXHQpXG59XG5cbi8qKiBHZXQgdGhlIHVuZGVybHlpbmcgb2JqZWN0IHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGRyYWZ0ICovXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gb3JpZ2luYWw8VD4odmFsdWU6IFQpOiBUIHwgdW5kZWZpbmVkXG5leHBvcnQgZnVuY3Rpb24gb3JpZ2luYWwodmFsdWU6IERyYWZ0ZWQ8YW55Pik6IGFueSB7XG5cdGlmICghaXNEcmFmdCh2YWx1ZSkpIGRpZSgyMywgdmFsdWUpXG5cdHJldHVybiB2YWx1ZVtEUkFGVF9TVEFURV0uYmFzZV9cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGNvbnN0IG93bktleXM6ICh0YXJnZXQ6IEFueU9iamVjdCkgPT4gUHJvcGVydHlLZXlbXSA9XG5cdHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3Qub3duS2V5c1xuXHRcdD8gUmVmbGVjdC5vd25LZXlzXG5cdFx0OiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gXCJ1bmRlZmluZWRcIlxuXHRcdD8gb2JqID0+XG5cdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuY29uY2F0KFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKSBhcyBhbnlcblx0XHRcdFx0KVxuXHRcdDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcblxuZXhwb3J0IGNvbnN0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPVxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyB8fFxuXHRmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRhcmdldDogYW55KSB7XG5cdFx0Ly8gUG9seWZpbGwgbmVlZGVkIGZvciBIZXJtZXMgYW5kIElFLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2hlcm1lcy9pc3N1ZXMvMjc0XG5cdFx0Y29uc3QgcmVzOiBhbnkgPSB7fVxuXHRcdG93bktleXModGFyZ2V0KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRyZXNba2V5XSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpXG5cdFx0fSlcblx0XHRyZXR1cm4gcmVzXG5cdH1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2g8VCBleHRlbmRzIE9iamVjdGlzaD4oXG5cdG9iajogVCxcblx0aXRlcjogKGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogYW55LCBzb3VyY2U6IFQpID0+IHZvaWQsXG5cdGVudW1lcmFibGVPbmx5PzogYm9vbGVhblxuKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIGVhY2gob2JqOiBhbnksIGl0ZXI6IGFueSwgZW51bWVyYWJsZU9ubHkgPSBmYWxzZSkge1xuXHRpZiAoZ2V0QXJjaHR5cGUob2JqKSA9PT0gQXJjaHR5cGUuT2JqZWN0KSB7XG5cdFx0OyhlbnVtZXJhYmxlT25seSA/IE9iamVjdC5rZXlzIDogb3duS2V5cykob2JqKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRpZiAoIWVudW1lcmFibGVPbmx5IHx8IHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIGl0ZXIoa2V5LCBvYmpba2V5XSwgb2JqKVxuXHRcdH0pXG5cdH0gZWxzZSB7XG5cdFx0b2JqLmZvckVhY2goKGVudHJ5OiBhbnksIGluZGV4OiBhbnkpID0+IGl0ZXIoaW5kZXgsIGVudHJ5LCBvYmopKVxuXHR9XG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcmNodHlwZSh0aGluZzogYW55KTogQXJjaHR5cGUge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRjb25zdCBzdGF0ZTogdW5kZWZpbmVkIHwgSW1tZXJTdGF0ZSA9IHRoaW5nW0RSQUZUX1NUQVRFXVxuXHRyZXR1cm4gc3RhdGVcblx0XHQ/IHN0YXRlLnR5cGVfID4gM1xuXHRcdFx0PyBzdGF0ZS50eXBlXyAtIDQgLy8gY2F1c2UgT2JqZWN0IGFuZCBBcnJheSBtYXAgYmFjayBmcm9tIDQgYW5kIDVcblx0XHRcdDogKHN0YXRlLnR5cGVfIGFzIGFueSkgLy8gb3RoZXJzIGFyZSB0aGUgc2FtZVxuXHRcdDogQXJyYXkuaXNBcnJheSh0aGluZylcblx0XHQ/IEFyY2h0eXBlLkFycmF5XG5cdFx0OiBpc01hcCh0aGluZylcblx0XHQ/IEFyY2h0eXBlLk1hcFxuXHRcdDogaXNTZXQodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5TZXRcblx0XHQ6IEFyY2h0eXBlLk9iamVjdFxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaGFzKHRoaW5nOiBhbnksIHByb3A6IFByb3BlcnR5S2V5KTogYm9vbGVhbiB7XG5cdHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IEFyY2h0eXBlLk1hcFxuXHRcdD8gdGhpbmcuaGFzKHByb3ApXG5cdFx0OiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpbmcsIHByb3ApXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQodGhpbmc6IEFueU1hcCB8IEFueU9iamVjdCwgcHJvcDogUHJvcGVydHlLZXkpOiBhbnkge1xuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IEFyY2h0eXBlLk1hcCA/IHRoaW5nLmdldChwcm9wKSA6IHRoaW5nW3Byb3BdXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXQodGhpbmc6IGFueSwgcHJvcE9yT2xkVmFsdWU6IFByb3BlcnR5S2V5LCB2YWx1ZTogYW55KSB7XG5cdGNvbnN0IHQgPSBnZXRBcmNodHlwZSh0aGluZylcblx0aWYgKHQgPT09IEFyY2h0eXBlLk1hcCkgdGhpbmcuc2V0KHByb3BPck9sZFZhbHVlLCB2YWx1ZSlcblx0ZWxzZSBpZiAodCA9PT0gQXJjaHR5cGUuU2V0KSB7XG5cdFx0dGhpbmcuYWRkKHZhbHVlKVxuXHR9IGVsc2UgdGhpbmdbcHJvcE9yT2xkVmFsdWVdID0gdmFsdWVcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzKHg6IGFueSwgeTogYW55KTogYm9vbGVhbiB7XG5cdC8vIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mYmpzL2Jsb2IvYzY5OTA0YTUxMWI5MDAyNjY5MzUxNjgyMjMwNjNkZDg3NzJkZmM0MC9wYWNrYWdlcy9mYmpzL3NyYy9jb3JlL3NoYWxsb3dFcXVhbC5qc1xuXHRpZiAoeCA9PT0geSkge1xuXHRcdHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHlcblx0fVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXNNYXAodGFyZ2V0OiBhbnkpOiB0YXJnZXQgaXMgQW55TWFwIHtcblx0cmV0dXJuIGhhc01hcCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBNYXBcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2V0KHRhcmdldDogYW55KTogdGFyZ2V0IGlzIEFueVNldCB7XG5cdHJldHVybiBoYXNTZXQgJiYgdGFyZ2V0IGluc3RhbmNlb2YgU2V0XG59XG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0KHN0YXRlOiBJbW1lclN0YXRlKTogYW55IHtcblx0cmV0dXJuIHN0YXRlLmNvcHlfIHx8IHN0YXRlLmJhc2VfXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93Q29weShiYXNlOiBhbnkpIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoYmFzZSkpIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiYXNlKVxuXHRjb25zdCBkZXNjcmlwdG9ycyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYmFzZSlcblx0ZGVsZXRlIGRlc2NyaXB0b3JzW0RSQUZUX1NUQVRFIGFzIGFueV1cblx0bGV0IGtleXMgPSBvd25LZXlzKGRlc2NyaXB0b3JzKVxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBrZXk6IGFueSA9IGtleXNbaV1cblx0XHRjb25zdCBkZXNjID0gZGVzY3JpcHRvcnNba2V5XVxuXHRcdGlmIChkZXNjLndyaXRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0ZGVzYy53cml0YWJsZSA9IHRydWVcblx0XHRcdGRlc2MuY29uZmlndXJhYmxlID0gdHJ1ZVxuXHRcdH1cblx0XHQvLyBsaWtlIG9iamVjdC5hc3NpZ24sIHdlIHdpbGwgcmVhZCBhbnkgX293bl8sIGdldC9zZXQgYWNjZXNzb3JzLiBUaGlzIGhlbHBzIGluIGRlYWxpbmdcblx0XHQvLyB3aXRoIGxpYnJhcmllcyB0aGF0IHRyYXAgdmFsdWVzLCBsaWtlIG1vYnggb3IgdnVlXG5cdFx0Ly8gdW5saWtlIG9iamVjdC5hc3NpZ24sIG5vbi1lbnVtZXJhYmxlcyB3aWxsIGJlIGNvcGllZCBhcyB3ZWxsXG5cdFx0aWYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KVxuXHRcdFx0ZGVzY3JpcHRvcnNba2V5XSA9IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSwgLy8gY291bGQgbGl2ZSB3aXRoICEhZGVzYy5zZXQgYXMgd2VsbCBoZXJlLi4uXG5cdFx0XHRcdGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSxcblx0XHRcdFx0dmFsdWU6IGJhc2Vba2V5XVxuXHRcdFx0fVxuXHR9XG5cdHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlKSwgZGVzY3JpcHRvcnMpXG59XG5cbi8qKlxuICogRnJlZXplcyBkcmFmdGFibGUgb2JqZWN0cy4gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICogQnkgZGVmYXVsdCBmcmVlemVzIHNoYWxsb3dseSwgYnV0IGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYHRydWVgIGl0IHdpbGwgZnJlZXplIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBkZWVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmVlemU8VD4ob2JqOiBULCBkZWVwPzogYm9vbGVhbik6IFRcbmV4cG9ydCBmdW5jdGlvbiBmcmVlemU8VD4ob2JqOiBhbnksIGRlZXA6IGJvb2xlYW4gPSBmYWxzZSk6IFQge1xuXHRpZiAoaXNGcm96ZW4ob2JqKSB8fCBpc0RyYWZ0KG9iaikgfHwgIWlzRHJhZnRhYmxlKG9iaikpIHJldHVybiBvYmpcblx0aWYgKGdldEFyY2h0eXBlKG9iaikgPiAxIC8qIE1hcCBvciBTZXQgKi8pIHtcblx0XHRvYmouc2V0ID0gb2JqLmFkZCA9IG9iai5jbGVhciA9IG9iai5kZWxldGUgPSBkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnMgYXMgYW55XG5cdH1cblx0T2JqZWN0LmZyZWV6ZShvYmopXG5cdGlmIChkZWVwKSBlYWNoKG9iaiwgKGtleSwgdmFsdWUpID0+IGZyZWV6ZSh2YWx1ZSwgdHJ1ZSksIHRydWUpXG5cdHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zKCkge1xuXHRkaWUoMilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvemVuKG9iajogYW55KTogYm9vbGVhbiB7XG5cdGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdHJ1ZVxuXHQvLyBTZWUgIzYwMCwgSUUgZGllcyBvbiBub24tb2JqZWN0cyBpbiBPYmplY3QuaXNGcm96ZW5cblx0cmV0dXJuIE9iamVjdC5pc0Zyb3plbihvYmopXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTdGF0ZSxcblx0UGF0Y2gsXG5cdEltbWVyU2NvcGUsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0SW1tZXJCYXNlU3RhdGUsXG5cdEFueU1hcCxcblx0QW55U2V0LFxuXHRQcm94eVR5cGUsXG5cdGRpZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogUGx1Z2luIHV0aWxpdGllcyAqL1xuY29uc3QgcGx1Z2luczoge1xuXHRQYXRjaGVzPzoge1xuXHRcdGdlbmVyYXRlUGF0Y2hlc18oXG5cdFx0XHRzdGF0ZTogSW1tZXJTdGF0ZSxcblx0XHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHQpOiB2b2lkXG5cdFx0Z2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdFx0YmFzZTogYW55LFxuXHRcdFx0cmVwbGFjZW1lbnQ6IGFueSxcblx0XHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHRcdCk6IHZvaWRcblx0XHRhcHBseVBhdGNoZXNfPFQ+KGRyYWZ0OiBULCBwYXRjaGVzOiBQYXRjaFtdKTogVFxuXHR9XG5cdEVTNT86IHtcblx0XHR3aWxsRmluYWxpemVFUzVfKHNjb3BlOiBJbW1lclNjb3BlLCByZXN1bHQ6IGFueSwgaXNSZXBsYWNlZDogYm9vbGVhbik6IHZvaWRcblx0XHRjcmVhdGVFUzVQcm94eV88VD4oXG5cdFx0XHRiYXNlOiBULFxuXHRcdFx0cGFyZW50PzogSW1tZXJTdGF0ZVxuXHRcdCk6IERyYWZ0ZWQ8VCwgRVM1T2JqZWN0U3RhdGUgfCBFUzVBcnJheVN0YXRlPlxuXHRcdGhhc0NoYW5nZXNfKHN0YXRlOiBFUzVBcnJheVN0YXRlIHwgRVM1T2JqZWN0U3RhdGUpOiBib29sZWFuXG5cdH1cblx0TWFwU2V0Pzoge1xuXHRcdHByb3h5TWFwXzxUIGV4dGVuZHMgQW55TWFwPih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUXG5cdFx0cHJveHlTZXRfPFQgZXh0ZW5kcyBBbnlTZXQ+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFRcblx0fVxufSA9IHt9XG5cbnR5cGUgUGx1Z2lucyA9IHR5cGVvZiBwbHVnaW5zXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW48SyBleHRlbmRzIGtleW9mIFBsdWdpbnM+KFxuXHRwbHVnaW5LZXk6IEtcbik6IEV4Y2x1ZGU8UGx1Z2luc1tLXSwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IHBsdWdpbiA9IHBsdWdpbnNbcGx1Z2luS2V5XVxuXHRpZiAoIXBsdWdpbikge1xuXHRcdGRpZSgxOCwgcGx1Z2luS2V5KVxuXHR9XG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIHBsdWdpblxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFBsdWdpbjxLIGV4dGVuZHMga2V5b2YgUGx1Z2lucz4oXG5cdHBsdWdpbktleTogSyxcblx0aW1wbGVtZW50YXRpb246IFBsdWdpbnNbS11cbik6IHZvaWQge1xuXHRpZiAoIXBsdWdpbnNbcGx1Z2luS2V5XSkgcGx1Z2luc1twbHVnaW5LZXldID0gaW1wbGVtZW50YXRpb25cbn1cblxuLyoqIEVTNSBQbHVnaW4gKi9cblxuaW50ZXJmYWNlIEVTNUJhc2VTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0YXNzaWduZWRfOiB7W2tleTogc3RyaW5nXTogYW55fVxuXHRwYXJlbnRfPzogSW1tZXJTdGF0ZVxuXHRyZXZva2VkXzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTNU9iamVjdFN0YXRlIGV4dGVuZHMgRVM1QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5FUzVPYmplY3Rcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgRVM1T2JqZWN0U3RhdGU+XG5cdGJhc2VfOiBBbnlPYmplY3Rcblx0Y29weV86IEFueU9iamVjdCB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFUzVBcnJheVN0YXRlIGV4dGVuZHMgRVM1QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5FUzVBcnJheVxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55T2JqZWN0LCBFUzVBcnJheVN0YXRlPlxuXHRiYXNlXzogYW55XG5cdGNvcHlfOiBhbnlcbn1cblxuLyoqIE1hcCAvIFNldCBwbHVnaW4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBNYXBTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5NYXBcblx0Y29weV86IEFueU1hcCB8IHVuZGVmaW5lZFxuXHRhc3NpZ25lZF86IE1hcDxhbnksIGJvb2xlYW4+IHwgdW5kZWZpbmVkXG5cdGJhc2VfOiBBbnlNYXBcblx0cmV2b2tlZF86IGJvb2xlYW5cblx0ZHJhZnRfOiBEcmFmdGVkPEFueU1hcCwgTWFwU3RhdGU+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0U3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuU2V0XG5cdGNvcHlfOiBBbnlTZXQgfCB1bmRlZmluZWRcblx0YmFzZV86IEFueVNldFxuXHRkcmFmdHNfOiBNYXA8YW55LCBEcmFmdGVkPiAvLyBtYXBzIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byB0aGUgZHJhZnQgdmFsdWUgaW4gdGhlIG5ldyBzZXRcblx0cmV2b2tlZF86IGJvb2xlYW5cblx0ZHJhZnRfOiBEcmFmdGVkPEFueVNldCwgU2V0U3RhdGU+XG59XG5cbi8qKiBQYXRjaGVzIHBsdWdpbiAqL1xuXG5leHBvcnQgdHlwZSBQYXRjaFBhdGggPSAoc3RyaW5nIHwgbnVtYmVyKVtdXG4iLCAiaW1wb3J0IHtcblx0UGF0Y2gsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdERyYWZ0ZWQsXG5cdEltbWVyLFxuXHREUkFGVF9TVEFURSxcblx0SW1tZXJTdGF0ZSxcblx0UHJveHlUeXBlLFxuXHRnZXRQbHVnaW5cbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcbmltcG9ydCB7ZGllfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JzXCJcblxuLyoqIEVhY2ggc2NvcGUgcmVwcmVzZW50cyBhIGBwcm9kdWNlYCBjYWxsLiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEltbWVyU2NvcGUge1xuXHRwYXRjaGVzXz86IFBhdGNoW11cblx0aW52ZXJzZVBhdGNoZXNfPzogUGF0Y2hbXVxuXHRjYW5BdXRvRnJlZXplXzogYm9vbGVhblxuXHRkcmFmdHNfOiBhbnlbXVxuXHRwYXJlbnRfPzogSW1tZXJTY29wZVxuXHRwYXRjaExpc3RlbmVyXz86IFBhdGNoTGlzdGVuZXJcblx0aW1tZXJfOiBJbW1lclxuXHR1bmZpbmFsaXplZERyYWZ0c186IG51bWJlclxufVxuXG5sZXQgY3VycmVudFNjb3BlOiBJbW1lclNjb3BlIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2NvcGUoKSB7XG5cdGlmIChfX0RFVl9fICYmICFjdXJyZW50U2NvcGUpIGRpZSgwKVxuXHRyZXR1cm4gY3VycmVudFNjb3BlIVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTY29wZShcblx0cGFyZW50XzogSW1tZXJTY29wZSB8IHVuZGVmaW5lZCxcblx0aW1tZXJfOiBJbW1lclxuKTogSW1tZXJTY29wZSB7XG5cdHJldHVybiB7XG5cdFx0ZHJhZnRzXzogW10sXG5cdFx0cGFyZW50Xyxcblx0XHRpbW1lcl8sXG5cdFx0Ly8gV2hlbmV2ZXIgdGhlIG1vZGlmaWVkIGRyYWZ0IGNvbnRhaW5zIGEgZHJhZnQgZnJvbSBhbm90aGVyIHNjb3BlLCB3ZVxuXHRcdC8vIG5lZWQgdG8gcHJldmVudCBhdXRvLWZyZWV6aW5nIHNvIHRoZSB1bm93bmVkIGRyYWZ0IGNhbiBiZSBmaW5hbGl6ZWQuXG5cdFx0Y2FuQXV0b0ZyZWV6ZV86IHRydWUsXG5cdFx0dW5maW5hbGl6ZWREcmFmdHNfOiAwXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBhdGNoZXNJblNjb3BlKFxuXHRzY29wZTogSW1tZXJTY29wZSxcblx0cGF0Y2hMaXN0ZW5lcj86IFBhdGNoTGlzdGVuZXJcbikge1xuXHRpZiAocGF0Y2hMaXN0ZW5lcikge1xuXHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikgLy8gYXNzZXJ0IHdlIGhhdmUgdGhlIHBsdWdpblxuXHRcdHNjb3BlLnBhdGNoZXNfID0gW11cblx0XHRzY29wZS5pbnZlcnNlUGF0Y2hlc18gPSBbXVxuXHRcdHNjb3BlLnBhdGNoTGlzdGVuZXJfID0gcGF0Y2hMaXN0ZW5lclxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZva2VTY29wZShzY29wZTogSW1tZXJTY29wZSkge1xuXHRsZWF2ZVNjb3BlKHNjb3BlKVxuXHRzY29wZS5kcmFmdHNfLmZvckVhY2gocmV2b2tlRHJhZnQpXG5cdC8vIEB0cy1pZ25vcmVcblx0c2NvcGUuZHJhZnRzXyA9IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlYXZlU2NvcGUoc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0aWYgKHNjb3BlID09PSBjdXJyZW50U2NvcGUpIHtcblx0XHRjdXJyZW50U2NvcGUgPSBzY29wZS5wYXJlbnRfXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVudGVyU2NvcGUoaW1tZXI6IEltbWVyKSB7XG5cdHJldHVybiAoY3VycmVudFNjb3BlID0gY3JlYXRlU2NvcGUoY3VycmVudFNjb3BlLCBpbW1lcikpXG59XG5cbmZ1bmN0aW9uIHJldm9rZURyYWZ0KGRyYWZ0OiBEcmFmdGVkKSB7XG5cdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gZHJhZnRbRFJBRlRfU1RBVEVdXG5cdGlmIChcblx0XHRzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLlByb3h5T2JqZWN0IHx8XG5cdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5Qcm94eUFycmF5XG5cdClcblx0XHRzdGF0ZS5yZXZva2VfKClcblx0ZWxzZSBzdGF0ZS5yZXZva2VkXyA9IHRydWVcbn1cbiIsICJpbXBvcnQge1xuXHRJbW1lclNjb3BlLFxuXHREUkFGVF9TVEFURSxcblx0aXNEcmFmdGFibGUsXG5cdE5PVEhJTkcsXG5cdFBhdGNoUGF0aCxcblx0ZWFjaCxcblx0aGFzLFxuXHRmcmVlemUsXG5cdEltbWVyU3RhdGUsXG5cdGlzRHJhZnQsXG5cdFNldFN0YXRlLFxuXHRzZXQsXG5cdFByb3h5VHlwZSxcblx0Z2V0UGx1Z2luLFxuXHRkaWUsXG5cdHJldm9rZVNjb3BlLFxuXHRpc0Zyb3plbixcblx0c2hhbGxvd0NvcHlcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSZXN1bHQocmVzdWx0OiBhbnksIHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdHNjb3BlLnVuZmluYWxpemVkRHJhZnRzXyA9IHNjb3BlLmRyYWZ0c18ubGVuZ3RoXG5cdGNvbnN0IGJhc2VEcmFmdCA9IHNjb3BlLmRyYWZ0c18hWzBdXG5cdGNvbnN0IGlzUmVwbGFjZWQgPSByZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQgIT09IGJhc2VEcmFmdFxuXHRpZiAoIXNjb3BlLmltbWVyXy51c2VQcm94aWVzXylcblx0XHRnZXRQbHVnaW4oXCJFUzVcIikud2lsbEZpbmFsaXplRVM1XyhzY29wZSwgcmVzdWx0LCBpc1JlcGxhY2VkKVxuXHRpZiAoaXNSZXBsYWNlZCkge1xuXHRcdGlmIChiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLm1vZGlmaWVkXykge1xuXHRcdFx0cmV2b2tlU2NvcGUoc2NvcGUpXG5cdFx0XHRkaWUoNClcblx0XHR9XG5cdFx0aWYgKGlzRHJhZnRhYmxlKHJlc3VsdCkpIHtcblx0XHRcdC8vIEZpbmFsaXplIHRoZSByZXN1bHQgaW4gY2FzZSBpdCBjb250YWlucyAob3IgaXMpIGEgc3Vic2V0IG9mIHRoZSBkcmFmdC5cblx0XHRcdHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCByZXN1bHQpXG5cdFx0XHRpZiAoIXNjb3BlLnBhcmVudF8pIG1heWJlRnJlZXplKHNjb3BlLCByZXN1bHQpXG5cdFx0fVxuXHRcdGlmIChzY29wZS5wYXRjaGVzXykge1xuXHRcdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oXG5cdFx0XHRcdGJhc2VEcmFmdFtEUkFGVF9TVEFURV0uYmFzZV8sXG5cdFx0XHRcdHJlc3VsdCxcblx0XHRcdFx0c2NvcGUucGF0Y2hlc18sXG5cdFx0XHRcdHNjb3BlLmludmVyc2VQYXRjaGVzXyFcblx0XHRcdClcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRmluYWxpemUgdGhlIGJhc2UgZHJhZnQuXG5cdFx0cmVzdWx0ID0gZmluYWxpemUoc2NvcGUsIGJhc2VEcmFmdCwgW10pXG5cdH1cblx0cmV2b2tlU2NvcGUoc2NvcGUpXG5cdGlmIChzY29wZS5wYXRjaGVzXykge1xuXHRcdHNjb3BlLnBhdGNoTGlzdGVuZXJfIShzY29wZS5wYXRjaGVzXywgc2NvcGUuaW52ZXJzZVBhdGNoZXNfISlcblx0fVxuXHRyZXR1cm4gcmVzdWx0ICE9PSBOT1RISU5HID8gcmVzdWx0IDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGZpbmFsaXplKHJvb3RTY29wZTogSW1tZXJTY29wZSwgdmFsdWU6IGFueSwgcGF0aD86IFBhdGNoUGF0aCkge1xuXHQvLyBEb24ndCByZWN1cnNlIGluIHRobyByZWN1cnNpdmUgZGF0YSBzdHJ1Y3R1cmVzXG5cdGlmIChpc0Zyb3plbih2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXG5cdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gdmFsdWVbRFJBRlRfU1RBVEVdXG5cdC8vIEEgcGxhaW4gb2JqZWN0LCBtaWdodCBuZWVkIGZyZWV6aW5nLCBtaWdodCBjb250YWluIGRyYWZ0c1xuXHRpZiAoIXN0YXRlKSB7XG5cdFx0ZWFjaChcblx0XHRcdHZhbHVlLFxuXHRcdFx0KGtleSwgY2hpbGRWYWx1ZSkgPT5cblx0XHRcdFx0ZmluYWxpemVQcm9wZXJ0eShyb290U2NvcGUsIHN0YXRlLCB2YWx1ZSwga2V5LCBjaGlsZFZhbHVlLCBwYXRoKSxcblx0XHRcdHRydWUgLy8gU2VlICM1OTAsIGRvbid0IHJlY3Vyc2UgaW50byBub24tZW51bWVyYWJsZSBvZiBub24gZHJhZnRlZCBvYmplY3RzXG5cdFx0KVxuXHRcdHJldHVybiB2YWx1ZVxuXHR9XG5cdC8vIE5ldmVyIGZpbmFsaXplIGRyYWZ0cyBvd25lZCBieSBhbm90aGVyIHNjb3BlLlxuXHRpZiAoc3RhdGUuc2NvcGVfICE9PSByb290U2NvcGUpIHJldHVybiB2YWx1ZVxuXHQvLyBVbm1vZGlmaWVkIGRyYWZ0LCByZXR1cm4gdGhlIChmcm96ZW4pIG9yaWdpbmFsXG5cdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0bWF5YmVGcmVlemUocm9vdFNjb3BlLCBzdGF0ZS5iYXNlXywgdHJ1ZSlcblx0XHRyZXR1cm4gc3RhdGUuYmFzZV9cblx0fVxuXHQvLyBOb3QgZmluYWxpemVkIHlldCwgbGV0J3MgZG8gdGhhdCBub3dcblx0aWYgKCFzdGF0ZS5maW5hbGl6ZWRfKSB7XG5cdFx0c3RhdGUuZmluYWxpemVkXyA9IHRydWVcblx0XHRzdGF0ZS5zY29wZV8udW5maW5hbGl6ZWREcmFmdHNfLS1cblx0XHRjb25zdCByZXN1bHQgPVxuXHRcdFx0Ly8gRm9yIEVTNSwgY3JlYXRlIGEgZ29vZCBjb3B5IGZyb20gdGhlIGRyYWZ0IGZpcnN0LCB3aXRoIGFkZGVkIGtleXMgYW5kIHdpdGhvdXQgZGVsZXRlZCBrZXlzLlxuXHRcdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5FUzVPYmplY3QgfHwgc3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5FUzVBcnJheVxuXHRcdFx0XHQ/IChzdGF0ZS5jb3B5XyA9IHNoYWxsb3dDb3B5KHN0YXRlLmRyYWZ0XykpXG5cdFx0XHRcdDogc3RhdGUuY29weV9cblx0XHQvLyBGaW5hbGl6ZSBhbGwgY2hpbGRyZW4gb2YgdGhlIGNvcHlcblx0XHQvLyBGb3Igc2V0cyB3ZSBjbG9uZSBiZWZvcmUgaXRlcmF0aW5nLCBvdGhlcndpc2Ugd2UgY2FuIGdldCBpbiBlbmRsZXNzIGxvb3AgZHVlIHRvIG1vZGlmeWluZyBkdXJpbmcgaXRlcmF0aW9uLCBzZWUgIzYyOFxuXHRcdC8vIFRvIHByZXNlcnZlIGluc2VydGlvbiBvcmRlciBpbiBhbGwgY2FzZXMgd2UgdGhlbiBjbGVhciB0aGUgc2V0XG5cdFx0Ly8gQW5kIHdlIGxldCBmaW5hbGl6ZVByb3BlcnR5IGtub3cgaXQgbmVlZHMgdG8gcmUtYWRkIG5vbi1kcmFmdCBjaGlsZHJlbiBiYWNrIHRvIHRoZSB0YXJnZXRcblx0XHRsZXQgcmVzdWx0RWFjaCA9IHJlc3VsdFxuXHRcdGxldCBpc1NldCA9IGZhbHNlXG5cdFx0aWYgKHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuU2V0KSB7XG5cdFx0XHRyZXN1bHRFYWNoID0gbmV3IFNldChyZXN1bHQpXG5cdFx0XHRyZXN1bHQuY2xlYXIoKVxuXHRcdFx0aXNTZXQgPSB0cnVlXG5cdFx0fVxuXHRcdGVhY2gocmVzdWx0RWFjaCwgKGtleSwgY2hpbGRWYWx1ZSkgPT5cblx0XHRcdGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgcmVzdWx0LCBrZXksIGNoaWxkVmFsdWUsIHBhdGgsIGlzU2V0KVxuXHRcdClcblx0XHQvLyBldmVyeXRoaW5nIGluc2lkZSBpcyBmcm96ZW4sIHdlIGNhbiBmcmVlemUgaGVyZVxuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgcmVzdWx0LCBmYWxzZSlcblx0XHQvLyBmaXJzdCB0aW1lIGZpbmFsaXppbmcsIGxldCdzIGNyZWF0ZSB0aG9zZSBwYXRjaGVzXG5cdFx0aWYgKHBhdGggJiYgcm9vdFNjb3BlLnBhdGNoZXNfKSB7XG5cdFx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUGF0Y2hlc18oXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRyb290U2NvcGUucGF0Y2hlc18sXG5cdFx0XHRcdHJvb3RTY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9XG5cdHJldHVybiBzdGF0ZS5jb3B5X1xufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZVByb3BlcnR5KFxuXHRyb290U2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhcmVudFN0YXRlOiB1bmRlZmluZWQgfCBJbW1lclN0YXRlLFxuXHR0YXJnZXRPYmplY3Q6IGFueSxcblx0cHJvcDogc3RyaW5nIHwgbnVtYmVyLFxuXHRjaGlsZFZhbHVlOiBhbnksXG5cdHJvb3RQYXRoPzogUGF0Y2hQYXRoLFxuXHR0YXJnZXRJc1NldD86IGJvb2xlYW5cbikge1xuXHRpZiAoX19ERVZfXyAmJiBjaGlsZFZhbHVlID09PSB0YXJnZXRPYmplY3QpIGRpZSg1KVxuXHRpZiAoaXNEcmFmdChjaGlsZFZhbHVlKSkge1xuXHRcdGNvbnN0IHBhdGggPVxuXHRcdFx0cm9vdFBhdGggJiZcblx0XHRcdHBhcmVudFN0YXRlICYmXG5cdFx0XHRwYXJlbnRTdGF0ZSEudHlwZV8gIT09IFByb3h5VHlwZS5TZXQgJiYgLy8gU2V0IG9iamVjdHMgYXJlIGF0b21pYyBzaW5jZSB0aGV5IGhhdmUgbm8ga2V5cy5cblx0XHRcdCFoYXMoKHBhcmVudFN0YXRlIGFzIEV4Y2x1ZGU8SW1tZXJTdGF0ZSwgU2V0U3RhdGU+KS5hc3NpZ25lZF8hLCBwcm9wKSAvLyBTa2lwIGRlZXAgcGF0Y2hlcyBmb3IgYXNzaWduZWQga2V5cy5cblx0XHRcdFx0PyByb290UGF0aCEuY29uY2F0KHByb3ApXG5cdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0Ly8gRHJhZnRzIG93bmVkIGJ5IGBzY29wZWAgYXJlIGZpbmFsaXplZCBoZXJlLlxuXHRcdGNvbnN0IHJlcyA9IGZpbmFsaXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSwgcGF0aClcblx0XHRzZXQodGFyZ2V0T2JqZWN0LCBwcm9wLCByZXMpXG5cdFx0Ly8gRHJhZnRzIGZyb20gYW5vdGhlciBzY29wZSBtdXN0IHByZXZlbnRlZCB0byBiZSBmcm96ZW5cblx0XHQvLyBpZiB3ZSBnb3QgYSBkcmFmdCBiYWNrIGZyb20gZmluYWxpemUsIHdlJ3JlIGluIGEgbmVzdGVkIHByb2R1Y2UgYW5kIHNob3VsZG4ndCBmcmVlemVcblx0XHRpZiAoaXNEcmFmdChyZXMpKSB7XG5cdFx0XHRyb290U2NvcGUuY2FuQXV0b0ZyZWV6ZV8gPSBmYWxzZVxuXHRcdH0gZWxzZSByZXR1cm5cblx0fSBlbHNlIGlmICh0YXJnZXRJc1NldCkge1xuXHRcdHRhcmdldE9iamVjdC5hZGQoY2hpbGRWYWx1ZSlcblx0fVxuXHQvLyBTZWFyY2ggbmV3IG9iamVjdHMgZm9yIHVuZmluYWxpemVkIGRyYWZ0cy4gRnJvemVuIG9iamVjdHMgc2hvdWxkIG5ldmVyIGNvbnRhaW4gZHJhZnRzLlxuXHRpZiAoaXNEcmFmdGFibGUoY2hpbGRWYWx1ZSkgJiYgIWlzRnJvemVuKGNoaWxkVmFsdWUpKSB7XG5cdFx0aWYgKCFyb290U2NvcGUuaW1tZXJfLmF1dG9GcmVlemVfICYmIHJvb3RTY29wZS51bmZpbmFsaXplZERyYWZ0c18gPCAxKSB7XG5cdFx0XHQvLyBvcHRpbWl6YXRpb246IGlmIGFuIG9iamVjdCBpcyBub3QgYSBkcmFmdCwgYW5kIHdlIGRvbid0IGhhdmUgdG9cblx0XHRcdC8vIGRlZXBmcmVlemUgZXZlcnl0aGluZywgYW5kIHdlIGFyZSBzdXJlIHRoYXQgbm8gZHJhZnRzIGFyZSBsZWZ0IGluIHRoZSByZW1haW5pbmcgb2JqZWN0XG5cdFx0XHQvLyBjYXVzZSB3ZSBzYXcgYW5kIGZpbmFsaXplZCBhbGwgZHJhZnRzIGFscmVhZHk7IHdlIGNhbiBzdG9wIHZpc2l0aW5nIHRoZSByZXN0IG9mIHRoZSB0cmVlLlxuXHRcdFx0Ly8gVGhpcyBiZW5lZml0cyBlc3BlY2lhbGx5IGFkZGluZyBsYXJnZSBkYXRhIHRyZWUncyB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy5cblx0XHRcdC8vIFNlZSBhZGQtZGF0YS5qcyBwZXJmIHRlc3Rcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpXG5cdFx0Ly8gaW1tZXIgZGVlcCBmcmVlemVzIHBsYWluIG9iamVjdHMsIHNvIGlmIHRoZXJlIGlzIG5vIHBhcmVudCBzdGF0ZSwgd2UgZnJlZXplIGFzIHdlbGxcblx0XHRpZiAoIXBhcmVudFN0YXRlIHx8ICFwYXJlbnRTdGF0ZS5zY29wZV8ucGFyZW50Xylcblx0XHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSlcblx0fVxufVxuXG5mdW5jdGlvbiBtYXliZUZyZWV6ZShzY29wZTogSW1tZXJTY29wZSwgdmFsdWU6IGFueSwgZGVlcCA9IGZhbHNlKSB7XG5cdC8vIHdlIG5ldmVyIGZyZWV6ZSBmb3IgYSBub24tcm9vdCBzY29wZTsgYXMgaXQgd291bGQgcHJldmVudCBwcnVuaW5nIGZvciBkcmFmdHMgaW5zaWRlIHdyYXBwaW5nIG9iamVjdHNcblx0aWYgKCFzY29wZS5wYXJlbnRfICYmIHNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiBzY29wZS5jYW5BdXRvRnJlZXplXykge1xuXHRcdGZyZWV6ZSh2YWx1ZSwgZGVlcClcblx0fVxufVxuIiwgImltcG9ydCB7XG5cdGVhY2gsXG5cdGhhcyxcblx0aXMsXG5cdGlzRHJhZnRhYmxlLFxuXHRzaGFsbG93Q29weSxcblx0bGF0ZXN0LFxuXHRJbW1lckJhc2VTdGF0ZSxcblx0SW1tZXJTdGF0ZSxcblx0RHJhZnRlZCxcblx0QW55T2JqZWN0LFxuXHRBbnlBcnJheSxcblx0T2JqZWN0aXNoLFxuXHRnZXRDdXJyZW50U2NvcGUsXG5cdERSQUZUX1NUQVRFLFxuXHRkaWUsXG5cdGNyZWF0ZVByb3h5LFxuXHRQcm94eVR5cGVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuaW50ZXJmYWNlIFByb3h5QmFzZVN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHRhc3NpZ25lZF86IHtcblx0XHRbcHJvcGVydHk6IHN0cmluZ106IGJvb2xlYW5cblx0fVxuXHRwYXJlbnRfPzogSW1tZXJTdGF0ZVxuXHRyZXZva2VfKCk6IHZvaWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eU9iamVjdFN0YXRlIGV4dGVuZHMgUHJveHlCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlByb3h5T2JqZWN0XG5cdGJhc2VfOiBhbnlcblx0Y29weV86IGFueVxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55T2JqZWN0LCBQcm94eU9iamVjdFN0YXRlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5QXJyYXlTdGF0ZSBleHRlbmRzIFByb3h5QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5Qcm94eUFycmF5XG5cdGJhc2VfOiBBbnlBcnJheVxuXHRjb3B5XzogQW55QXJyYXkgfCBudWxsXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlBcnJheSwgUHJveHlBcnJheVN0YXRlPlxufVxuXG50eXBlIFByb3h5U3RhdGUgPSBQcm94eU9iamVjdFN0YXRlIHwgUHJveHlBcnJheVN0YXRlXG5cbi8qKlxuICogUmV0dXJucyBhIG5ldyBkcmFmdCBvZiB0aGUgYGJhc2VgIG9iamVjdC5cbiAqXG4gKiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXJlbnQgZHJhZnQtc3RhdGUgKHVzZWQgaW50ZXJuYWxseSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eVByb3h5PFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRiYXNlOiBULFxuXHRwYXJlbnQ/OiBJbW1lclN0YXRlXG4pOiBEcmFmdGVkPFQsIFByb3h5U3RhdGU+IHtcblx0Y29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmFzZSlcblx0Y29uc3Qgc3RhdGU6IFByb3h5U3RhdGUgPSB7XG5cdFx0dHlwZV86IGlzQXJyYXkgPyBQcm94eVR5cGUuUHJveHlBcnJheSA6IChQcm94eVR5cGUuUHJveHlPYmplY3QgYXMgYW55KSxcblx0XHQvLyBUcmFjayB3aGljaCBwcm9kdWNlIGNhbGwgdGhpcyBpcyBhc3NvY2lhdGVkIHdpdGguXG5cdFx0c2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCkhLFxuXHRcdC8vIFRydWUgZm9yIGJvdGggc2hhbGxvdyBhbmQgZGVlcCBjaGFuZ2VzLlxuXHRcdG1vZGlmaWVkXzogZmFsc2UsXG5cdFx0Ly8gVXNlZCBkdXJpbmcgZmluYWxpemF0aW9uLlxuXHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdC8vIFRyYWNrIHdoaWNoIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGFzc2lnbmVkICh0cnVlKSBvciBkZWxldGVkIChmYWxzZSkuXG5cdFx0YXNzaWduZWRfOiB7fSxcblx0XHQvLyBUaGUgcGFyZW50IGRyYWZ0IHN0YXRlLlxuXHRcdHBhcmVudF86IHBhcmVudCxcblx0XHQvLyBUaGUgYmFzZSBzdGF0ZS5cblx0XHRiYXNlXzogYmFzZSxcblx0XHQvLyBUaGUgYmFzZSBwcm94eS5cblx0XHRkcmFmdF86IG51bGwgYXMgYW55LCAvLyBzZXQgYmVsb3dcblx0XHQvLyBUaGUgYmFzZSBjb3B5IHdpdGggYW55IHVwZGF0ZWQgdmFsdWVzLlxuXHRcdGNvcHlfOiBudWxsLFxuXHRcdC8vIENhbGxlZCBieSB0aGUgYHByb2R1Y2VgIGZ1bmN0aW9uLlxuXHRcdHJldm9rZV86IG51bGwgYXMgYW55LFxuXHRcdGlzTWFudWFsXzogZmFsc2Vcblx0fVxuXG5cdC8vIHRoZSB0cmFwcyBtdXN0IHRhcmdldCBzb21ldGhpbmcsIGEgYml0IGxpa2UgdGhlICdyZWFsJyBiYXNlLlxuXHQvLyBidXQgYWxzbywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRldGVybWluZSBmcm9tIHRoZSB0YXJnZXQgd2hhdCB0aGUgcmVsZXZhbnQgc3RhdGUgaXNcblx0Ly8gKHRvIGF2b2lkIGNyZWF0aW5nIHRyYXBzIHBlciBpbnN0YW5jZSB0byBjYXB0dXJlIHRoZSBzdGF0ZSBpbiBjbG9zdXJlLFxuXHQvLyBhbmQgdG8gYXZvaWQgY3JlYXRpbmcgd2VpcmQgaGlkZGVuIHByb3BlcnRpZXMgYXMgd2VsbClcblx0Ly8gU28gdGhlIHRyaWNrIGlzIHRvIHVzZSAnc3RhdGUnIGFzIHRoZSBhY3R1YWwgJ3RhcmdldCchIChhbmQgbWFrZSBzdXJlIHdlIGludGVyY2VwdCBldmVyeXRoaW5nKVxuXHQvLyBOb3RlIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYW4gYXJyYXksIHdlIHB1dCB0aGUgc3RhdGUgaW4gYW4gYXJyYXkgdG8gaGF2ZSBiZXR0ZXIgUmVmbGVjdCBkZWZhdWx0cyBvb3RiXG5cdGxldCB0YXJnZXQ6IFQgPSBzdGF0ZSBhcyBhbnlcblx0bGV0IHRyYXBzOiBQcm94eUhhbmRsZXI8b2JqZWN0IHwgQXJyYXk8YW55Pj4gPSBvYmplY3RUcmFwc1xuXHRpZiAoaXNBcnJheSkge1xuXHRcdHRhcmdldCA9IFtzdGF0ZV0gYXMgYW55XG5cdFx0dHJhcHMgPSBhcnJheVRyYXBzXG5cdH1cblxuXHRjb25zdCB7cmV2b2tlLCBwcm94eX0gPSBQcm94eS5yZXZvY2FibGUodGFyZ2V0LCB0cmFwcylcblx0c3RhdGUuZHJhZnRfID0gcHJveHkgYXMgYW55XG5cdHN0YXRlLnJldm9rZV8gPSByZXZva2Vcblx0cmV0dXJuIHByb3h5IGFzIGFueVxufVxuXG4vKipcbiAqIE9iamVjdCBkcmFmdHNcbiAqL1xuZXhwb3J0IGNvbnN0IG9iamVjdFRyYXBzOiBQcm94eUhhbmRsZXI8UHJveHlTdGF0ZT4gPSB7XG5cdGdldChzdGF0ZSwgcHJvcCkge1xuXHRcdGlmIChwcm9wID09PSBEUkFGVF9TVEFURSkgcmV0dXJuIHN0YXRlXG5cblx0XHRjb25zdCBzb3VyY2UgPSBsYXRlc3Qoc3RhdGUpXG5cdFx0aWYgKCFoYXMoc291cmNlLCBwcm9wKSkge1xuXHRcdFx0Ly8gbm9uLWV4aXN0aW5nIG9yIG5vbi1vd24gcHJvcGVydHkuLi5cblx0XHRcdHJldHVybiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZSwgc291cmNlLCBwcm9wKVxuXHRcdH1cblx0XHRjb25zdCB2YWx1ZSA9IHNvdXJjZVtwcm9wXVxuXHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdH1cblx0XHQvLyBDaGVjayBmb3IgZXhpc3RpbmcgZHJhZnQgaW4gbW9kaWZpZWQgc3RhdGUuXG5cdFx0Ly8gQXNzaWduZWQgdmFsdWVzIGFyZSBuZXZlciBkcmFmdGVkLiBUaGlzIGNhdGNoZXMgYW55IGRyYWZ0cyB3ZSBjcmVhdGVkLCB0b28uXG5cdFx0aWYgKHZhbHVlID09PSBwZWVrKHN0YXRlLmJhc2VfLCBwcm9wKSkge1xuXHRcdFx0cHJlcGFyZUNvcHkoc3RhdGUpXG5cdFx0XHRyZXR1cm4gKHN0YXRlLmNvcHlfIVtwcm9wIGFzIGFueV0gPSBjcmVhdGVQcm94eShcblx0XHRcdFx0c3RhdGUuc2NvcGVfLmltbWVyXyxcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdHN0YXRlXG5cdFx0XHQpKVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWVcblx0fSxcblx0aGFzKHN0YXRlLCBwcm9wKSB7XG5cdFx0cmV0dXJuIHByb3AgaW4gbGF0ZXN0KHN0YXRlKVxuXHR9LFxuXHRvd25LZXlzKHN0YXRlKSB7XG5cdFx0cmV0dXJuIFJlZmxlY3Qub3duS2V5cyhsYXRlc3Qoc3RhdGUpKVxuXHR9LFxuXHRzZXQoXG5cdFx0c3RhdGU6IFByb3h5T2JqZWN0U3RhdGUsXG5cdFx0cHJvcDogc3RyaW5nIC8qIHN0cmljdGx5IG5vdCwgYnV0IGhlbHBzIFRTICovLFxuXHRcdHZhbHVlXG5cdCkge1xuXHRcdGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKGxhdGVzdChzdGF0ZSksIHByb3ApXG5cdFx0aWYgKGRlc2M/LnNldCkge1xuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBpZiB0aGlzIHdyaXRlIGlzIGNhcHR1cmVkIGJ5IGEgc2V0dGVyLCB3ZSBoYXZlXG5cdFx0XHQvLyB0byB0cmlnZ2VyIGl0IHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuXHRcdFx0ZGVzYy5zZXQuY2FsbChzdGF0ZS5kcmFmdF8sIHZhbHVlKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRcdC8vIHRoZSBsYXN0IGNoZWNrIGlzIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIHNldHRpbmcgYSBub24tZXhpc3RpbmcgdG8gdW5kZWZpbmVkICh3aGljaCBpcyBhIGNoYW5nZSlcblx0XHRcdC8vIGZyb20gc2V0dGluZyBhbiBleGlzdGluZyBwcm9wZXJ0eSB3aXRoIHZhbHVlIHVuZGVmaW5lZCB0byB1bmRlZmluZWQgKHdoaWNoIGlzIG5vdCBhIGNoYW5nZSlcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBwZWVrKGxhdGVzdChzdGF0ZSksIHByb3ApXG5cdFx0XHQvLyBzcGVjaWFsIGNhc2UsIGlmIHdlIGFzc2lnbmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gYSBkcmFmdCwgd2UgY2FuIGlnbm9yZSB0aGUgYXNzaWdubWVudFxuXHRcdFx0Y29uc3QgY3VycmVudFN0YXRlOiBQcm94eU9iamVjdFN0YXRlID0gY3VycmVudD8uW0RSQUZUX1NUQVRFXVxuXHRcdFx0aWYgKGN1cnJlbnRTdGF0ZSAmJiBjdXJyZW50U3RhdGUuYmFzZV8gPT09IHZhbHVlKSB7XG5cdFx0XHRcdHN0YXRlLmNvcHlfIVtwcm9wXSA9IHZhbHVlXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IGZhbHNlXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHRpZiAoaXModmFsdWUsIGN1cnJlbnQpICYmICh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhcyhzdGF0ZS5iYXNlXywgcHJvcCkpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cHJlcGFyZUNvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHQoc3RhdGUuY29weV8hW3Byb3BdID09PSB2YWx1ZSAmJlxuXHRcdFx0XHQvLyBzcGVjaWFsIGNhc2U6IGhhbmRsZSBuZXcgcHJvcHMgd2l0aCB2YWx1ZSAndW5kZWZpbmVkJ1xuXHRcdFx0XHQodmFsdWUgIT09IHVuZGVmaW5lZCB8fCBwcm9wIGluIHN0YXRlLmNvcHlfKSkgfHxcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogTmFOXG5cdFx0XHQoTnVtYmVyLmlzTmFOKHZhbHVlKSAmJiBOdW1iZXIuaXNOYU4oc3RhdGUuY29weV8hW3Byb3BdKSlcblx0XHQpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YXRlLmNvcHlfIVtwcm9wXSA9IHZhbHVlXG5cdFx0c3RhdGUuYXNzaWduZWRfW3Byb3BdID0gdHJ1ZVxuXHRcdHJldHVybiB0cnVlXG5cdH0sXG5cdGRlbGV0ZVByb3BlcnR5KHN0YXRlLCBwcm9wOiBzdHJpbmcpIHtcblx0XHQvLyBUaGUgYHVuZGVmaW5lZGAgY2hlY2sgaXMgYSBmYXN0IHBhdGggZm9yIHByZS1leGlzdGluZyBrZXlzLlxuXHRcdGlmIChwZWVrKHN0YXRlLmJhc2VfLCBwcm9wKSAhPT0gdW5kZWZpbmVkIHx8IHByb3AgaW4gc3RhdGUuYmFzZV8pIHtcblx0XHRcdHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IGZhbHNlXG5cdFx0XHRwcmVwYXJlQ29weShzdGF0ZSlcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZiBhbiBvcmlnaW5hbGx5IG5vdCBhc3NpZ25lZCBwcm9wZXJ0eSB3YXMgZGVsZXRlZFxuXHRcdFx0ZGVsZXRlIHN0YXRlLmFzc2lnbmVkX1twcm9wXVxuXHRcdH1cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHN0YXRlLmNvcHlfKSBkZWxldGUgc3RhdGUuY29weV9bcHJvcF1cblx0XHRyZXR1cm4gdHJ1ZVxuXHR9LFxuXHQvLyBOb3RlOiBXZSBuZXZlciBjb2VyY2UgYGRlc2MudmFsdWVgIGludG8gYW4gSW1tZXIgZHJhZnQsIGJlY2F1c2Ugd2UgY2FuJ3QgbWFrZVxuXHQvLyB0aGUgc2FtZSBndWFyYW50ZWUgaW4gRVM1IG1vZGUuXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdGF0ZSwgcHJvcCkge1xuXHRcdGNvbnN0IG93bmVyID0gbGF0ZXN0KHN0YXRlKVxuXHRcdGNvbnN0IGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvd25lciwgcHJvcClcblx0XHRpZiAoIWRlc2MpIHJldHVybiBkZXNjXG5cdFx0cmV0dXJuIHtcblx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiBzdGF0ZS50eXBlXyAhPT0gUHJveHlUeXBlLlByb3h5QXJyYXkgfHwgcHJvcCAhPT0gXCJsZW5ndGhcIixcblx0XHRcdGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSxcblx0XHRcdHZhbHVlOiBvd25lcltwcm9wXVxuXHRcdH1cblx0fSxcblx0ZGVmaW5lUHJvcGVydHkoKSB7XG5cdFx0ZGllKDExKVxuXHR9LFxuXHRnZXRQcm90b3R5cGVPZihzdGF0ZSkge1xuXHRcdHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RhdGUuYmFzZV8pXG5cdH0sXG5cdHNldFByb3RvdHlwZU9mKCkge1xuXHRcdGRpZSgxMilcblx0fVxufVxuXG4vKipcbiAqIEFycmF5IGRyYWZ0c1xuICovXG5cbmNvbnN0IGFycmF5VHJhcHM6IFByb3h5SGFuZGxlcjxbUHJveHlBcnJheVN0YXRlXT4gPSB7fVxuZWFjaChvYmplY3RUcmFwcywgKGtleSwgZm4pID0+IHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRhcnJheVRyYXBzW2tleV0gPSBmdW5jdGlvbigpIHtcblx0XHRhcmd1bWVudHNbMF0gPSBhcmd1bWVudHNbMF1bMF1cblx0XHRyZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9XG59KVxuYXJyYXlUcmFwcy5kZWxldGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wKSB7XG5cdGlmIChfX0RFVl9fICYmIGlzTmFOKHBhcnNlSW50KHByb3AgYXMgYW55KSkpIGRpZSgxMylcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gYXJyYXlUcmFwcy5zZXQhLmNhbGwodGhpcywgc3RhdGUsIHByb3AsIHVuZGVmaW5lZClcbn1cbmFycmF5VHJhcHMuc2V0ID0gZnVuY3Rpb24oc3RhdGUsIHByb3AsIHZhbHVlKSB7XG5cdGlmIChfX0RFVl9fICYmIHByb3AgIT09IFwibGVuZ3RoXCIgJiYgaXNOYU4ocGFyc2VJbnQocHJvcCBhcyBhbnkpKSkgZGllKDE0KVxuXHRyZXR1cm4gb2JqZWN0VHJhcHMuc2V0IS5jYWxsKHRoaXMsIHN0YXRlWzBdLCBwcm9wLCB2YWx1ZSwgc3RhdGVbMF0pXG59XG5cbi8vIEFjY2VzcyBhIHByb3BlcnR5IHdpdGhvdXQgY3JlYXRpbmcgYW4gSW1tZXIgZHJhZnQuXG5mdW5jdGlvbiBwZWVrKGRyYWZ0OiBEcmFmdGVkLCBwcm9wOiBQcm9wZXJ0eUtleSkge1xuXHRjb25zdCBzdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXVxuXHRjb25zdCBzb3VyY2UgPSBzdGF0ZSA/IGxhdGVzdChzdGF0ZSkgOiBkcmFmdFxuXHRyZXR1cm4gc291cmNlW3Byb3BdXG59XG5cbmZ1bmN0aW9uIHJlYWRQcm9wRnJvbVByb3RvKHN0YXRlOiBJbW1lclN0YXRlLCBzb3VyY2U6IGFueSwgcHJvcDogUHJvcGVydHlLZXkpIHtcblx0Y29uc3QgZGVzYyA9IGdldERlc2NyaXB0b3JGcm9tUHJvdG8oc291cmNlLCBwcm9wKVxuXHRyZXR1cm4gZGVzY1xuXHRcdD8gYHZhbHVlYCBpbiBkZXNjXG5cdFx0XHQ/IGRlc2MudmFsdWVcblx0XHRcdDogLy8gVGhpcyBpcyBhIHZlcnkgc3BlY2lhbCBjYXNlLCBpZiB0aGUgcHJvcCBpcyBhIGdldHRlciBkZWZpbmVkIGJ5IHRoZVxuXHRcdFx0ICAvLyBwcm90b3R5cGUsIHdlIHNob3VsZCBpbnZva2UgaXQgd2l0aCB0aGUgZHJhZnQgYXMgY29udGV4dCFcblx0XHRcdCAgZGVzYy5nZXQ/LmNhbGwoc3RhdGUuZHJhZnRfKVxuXHRcdDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGdldERlc2NyaXB0b3JGcm9tUHJvdG8oXG5cdHNvdXJjZTogYW55LFxuXHRwcm9wOiBQcm9wZXJ0eUtleVxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcblx0Ly8gJ2luJyBjaGVja3MgcHJvdG8hXG5cdGlmICghKHByb3AgaW4gc291cmNlKSkgcmV0dXJuIHVuZGVmaW5lZFxuXHRsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKVxuXHR3aGlsZSAocHJvdG8pIHtcblx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgcHJvcClcblx0XHRpZiAoZGVzYykgcmV0dXJuIGRlc2Ncblx0XHRwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bylcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQ2hhbmdlZChzdGF0ZTogSW1tZXJTdGF0ZSkge1xuXHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdHN0YXRlLm1vZGlmaWVkXyA9IHRydWVcblx0XHRpZiAoc3RhdGUucGFyZW50Xykge1xuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUucGFyZW50Xylcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVDb3B5KHN0YXRlOiB7YmFzZV86IGFueTsgY29weV86IGFueX0pIHtcblx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdHN0YXRlLmNvcHlfID0gc2hhbGxvd0NvcHkoc3RhdGUuYmFzZV8pXG5cdH1cbn1cbiIsICJpbXBvcnQge1xuXHRJUHJvZHVjZVdpdGhQYXRjaGVzLFxuXHRJUHJvZHVjZSxcblx0SW1tZXJTdGF0ZSxcblx0RHJhZnRlZCxcblx0aXNEcmFmdGFibGUsXG5cdHByb2Nlc3NSZXN1bHQsXG5cdFBhdGNoLFxuXHRPYmplY3Rpc2gsXG5cdERSQUZUX1NUQVRFLFxuXHREcmFmdCxcblx0UGF0Y2hMaXN0ZW5lcixcblx0aXNEcmFmdCxcblx0aXNNYXAsXG5cdGlzU2V0LFxuXHRjcmVhdGVQcm94eVByb3h5LFxuXHRnZXRQbHVnaW4sXG5cdGRpZSxcblx0aGFzUHJveGllcyxcblx0ZW50ZXJTY29wZSxcblx0cmV2b2tlU2NvcGUsXG5cdGxlYXZlU2NvcGUsXG5cdHVzZVBhdGNoZXNJblNjb3BlLFxuXHRnZXRDdXJyZW50U2NvcGUsXG5cdE5PVEhJTkcsXG5cdGZyZWV6ZSxcblx0Y3VycmVudFxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5pbnRlcmZhY2UgUHJvZHVjZXJzRm5zIHtcblx0cHJvZHVjZTogSVByb2R1Y2Vcblx0cHJvZHVjZVdpdGhQYXRjaGVzOiBJUHJvZHVjZVdpdGhQYXRjaGVzXG59XG5cbmV4cG9ydCBjbGFzcyBJbW1lciBpbXBsZW1lbnRzIFByb2R1Y2Vyc0ZucyB7XG5cdHVzZVByb3hpZXNfOiBib29sZWFuID0gaGFzUHJveGllc1xuXG5cdGF1dG9GcmVlemVfOiBib29sZWFuID0gdHJ1ZVxuXG5cdGNvbnN0cnVjdG9yKGNvbmZpZz86IHt1c2VQcm94aWVzPzogYm9vbGVhbjsgYXV0b0ZyZWV6ZT86IGJvb2xlYW59KSB7XG5cdFx0aWYgKHR5cGVvZiBjb25maWc/LnVzZVByb3hpZXMgPT09IFwiYm9vbGVhblwiKVxuXHRcdFx0dGhpcy5zZXRVc2VQcm94aWVzKGNvbmZpZyEudXNlUHJveGllcylcblx0XHRpZiAodHlwZW9mIGNvbmZpZz8uYXV0b0ZyZWV6ZSA9PT0gXCJib29sZWFuXCIpXG5cdFx0XHR0aGlzLnNldEF1dG9GcmVlemUoY29uZmlnIS5hdXRvRnJlZXplKVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHJvZHVjZWAgZnVuY3Rpb24gdGFrZXMgYSB2YWx1ZSBhbmQgYSBcInJlY2lwZSBmdW5jdGlvblwiICh3aG9zZVxuXHQgKiByZXR1cm4gdmFsdWUgb2Z0ZW4gZGVwZW5kcyBvbiB0aGUgYmFzZSBzdGF0ZSkuIFRoZSByZWNpcGUgZnVuY3Rpb24gaXNcblx0ICogZnJlZSB0byBtdXRhdGUgaXRzIGZpcnN0IGFyZ3VtZW50IGhvd2V2ZXIgaXQgd2FudHMuIEFsbCBtdXRhdGlvbnMgYXJlXG5cdCAqIG9ubHkgZXZlciBhcHBsaWVkIHRvIGEgX19jb3B5X18gb2YgdGhlIGJhc2Ugc3RhdGUuXG5cdCAqXG5cdCAqIFBhc3Mgb25seSBhIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFwiY3VycmllZCBwcm9kdWNlclwiIHdoaWNoIHJlbGlldmVzIHlvdVxuXHQgKiBmcm9tIHBhc3NpbmcgdGhlIHJlY2lwZSBmdW5jdGlvbiBldmVyeSB0aW1lLlxuXHQgKlxuXHQgKiBPbmx5IHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyBhcmUgbWFkZSBtdXRhYmxlLiBBbGwgb3RoZXIgb2JqZWN0cyBhcmVcblx0ICogY29uc2lkZXJlZCB1bmNvcHlhYmxlLlxuXHQgKlxuXHQgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIF9fYm91bmRfXyB0byBpdHMgYEltbWVyYCBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHthbnl9IGJhc2UgLSB0aGUgaW5pdGlhbCBzdGF0ZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWNpcGUgLSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcHJveHkgb2YgdGhlIGJhc2Ugc3RhdGUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHdoaWNoIGNhbiBiZSBmcmVlbHkgbW9kaWZpZWRcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcGF0Y2hMaXN0ZW5lciAtIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdGhlIHBhdGNoZXMgcHJvZHVjZWQgaGVyZVxuXHQgKiBAcmV0dXJucyB7YW55fSBhIG5ldyBzdGF0ZSwgb3IgdGhlIGluaXRpYWwgc3RhdGUgaWYgbm90aGluZyB3YXMgbW9kaWZpZWRcblx0ICovXG5cdHByb2R1Y2U6IElQcm9kdWNlID0gKGJhc2U6IGFueSwgcmVjaXBlPzogYW55LCBwYXRjaExpc3RlbmVyPzogYW55KSA9PiB7XG5cdFx0Ly8gY3VycmllZCBpbnZvY2F0aW9uXG5cdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHJlY2lwZSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0QmFzZSA9IHJlY2lwZVxuXHRcdFx0cmVjaXBlID0gYmFzZVxuXG5cdFx0XHRjb25zdCBzZWxmID0gdGhpc1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRQcm9kdWNlKFxuXHRcdFx0XHR0aGlzOiBhbnksXG5cdFx0XHRcdGJhc2UgPSBkZWZhdWx0QmFzZSxcblx0XHRcdFx0Li4uYXJnczogYW55W11cblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gc2VsZi5wcm9kdWNlKGJhc2UsIChkcmFmdDogRHJhZnRlZCkgPT4gcmVjaXBlLmNhbGwodGhpcywgZHJhZnQsIC4uLmFyZ3MpKSAvLyBwcmV0dGllci1pZ25vcmVcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHJlY2lwZSAhPT0gXCJmdW5jdGlvblwiKSBkaWUoNilcblx0XHRpZiAocGF0Y2hMaXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXRjaExpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0XHRkaWUoNylcblxuXHRcdGxldCByZXN1bHRcblxuXHRcdC8vIE9ubHkgcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBhbmQgXCJpbW1lcmFibGUgY2xhc3Nlc1wiIGFyZSBkcmFmdGVkLlxuXHRcdGlmIChpc0RyYWZ0YWJsZShiYXNlKSkge1xuXHRcdFx0Y29uc3Qgc2NvcGUgPSBlbnRlclNjb3BlKHRoaXMpXG5cdFx0XHRjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KHRoaXMsIGJhc2UsIHVuZGVmaW5lZClcblx0XHRcdGxldCBoYXNFcnJvciA9IHRydWVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlY2lwZShwcm94eSlcblx0XHRcdFx0aGFzRXJyb3IgPSBmYWxzZVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0Ly8gZmluYWxseSBpbnN0ZWFkIG9mIGNhdGNoICsgcmV0aHJvdyBiZXR0ZXIgcHJlc2VydmVzIG9yaWdpbmFsIHN0YWNrXG5cdFx0XHRcdGlmIChoYXNFcnJvcikgcmV2b2tlU2NvcGUoc2NvcGUpXG5cdFx0XHRcdGVsc2UgbGVhdmVTY29wZShzY29wZSlcblx0XHRcdH1cblx0XHRcdGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQudGhlbihcblx0XHRcdFx0XHRyZXN1bHQgPT4ge1xuXHRcdFx0XHRcdFx0dXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gcHJvY2Vzc1Jlc3VsdChyZXN1bHQsIHNjb3BlKVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0cmV2b2tlU2NvcGUoc2NvcGUpXG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdFx0dXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpXG5cdFx0XHRyZXR1cm4gcHJvY2Vzc1Jlc3VsdChyZXN1bHQsIHNjb3BlKVxuXHRcdH0gZWxzZSBpZiAoIWJhc2UgfHwgdHlwZW9mIGJhc2UgIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHJlc3VsdCA9IHJlY2lwZShiYXNlKVxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXN1bHQgPSBiYXNlXG5cdFx0XHRpZiAocmVzdWx0ID09PSBOT1RISU5HKSByZXN1bHQgPSB1bmRlZmluZWRcblx0XHRcdGlmICh0aGlzLmF1dG9GcmVlemVfKSBmcmVlemUocmVzdWx0LCB0cnVlKVxuXHRcdFx0aWYgKHBhdGNoTGlzdGVuZXIpIHtcblx0XHRcdFx0Y29uc3QgcDogUGF0Y2hbXSA9IFtdXG5cdFx0XHRcdGNvbnN0IGlwOiBQYXRjaFtdID0gW11cblx0XHRcdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oYmFzZSwgcmVzdWx0LCBwLCBpcClcblx0XHRcdFx0cGF0Y2hMaXN0ZW5lcihwLCBpcClcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRcblx0XHR9IGVsc2UgZGllKDIxLCBiYXNlKVxuXHR9XG5cblx0cHJvZHVjZVdpdGhQYXRjaGVzOiBJUHJvZHVjZVdpdGhQYXRjaGVzID0gKGJhc2U6IGFueSwgcmVjaXBlPzogYW55KTogYW55ID0+IHtcblx0XHQvLyBjdXJyaWVkIGludm9jYXRpb25cblx0XHRpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuIChzdGF0ZTogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT5cblx0XHRcdFx0dGhpcy5wcm9kdWNlV2l0aFBhdGNoZXMoc3RhdGUsIChkcmFmdDogYW55KSA9PiBiYXNlKGRyYWZ0LCAuLi5hcmdzKSlcblx0XHR9XG5cblx0XHRsZXQgcGF0Y2hlczogUGF0Y2hbXSwgaW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnByb2R1Y2UoYmFzZSwgcmVjaXBlLCAocDogUGF0Y2hbXSwgaXA6IFBhdGNoW10pID0+IHtcblx0XHRcdHBhdGNoZXMgPSBwXG5cdFx0XHRpbnZlcnNlUGF0Y2hlcyA9IGlwXG5cdFx0fSlcblxuXHRcdGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnRoZW4obmV4dFN0YXRlID0+IFtuZXh0U3RhdGUsIHBhdGNoZXMhLCBpbnZlcnNlUGF0Y2hlcyFdKVxuXHRcdH1cblx0XHRyZXR1cm4gW3Jlc3VsdCwgcGF0Y2hlcyEsIGludmVyc2VQYXRjaGVzIV1cblx0fVxuXG5cdGNyZWF0ZURyYWZ0PFQgZXh0ZW5kcyBPYmplY3Rpc2g+KGJhc2U6IFQpOiBEcmFmdDxUPiB7XG5cdFx0aWYgKCFpc0RyYWZ0YWJsZShiYXNlKSkgZGllKDgpXG5cdFx0aWYgKGlzRHJhZnQoYmFzZSkpIGJhc2UgPSBjdXJyZW50KGJhc2UpXG5cdFx0Y29uc3Qgc2NvcGUgPSBlbnRlclNjb3BlKHRoaXMpXG5cdFx0Y29uc3QgcHJveHkgPSBjcmVhdGVQcm94eSh0aGlzLCBiYXNlLCB1bmRlZmluZWQpXG5cdFx0cHJveHlbRFJBRlRfU1RBVEVdLmlzTWFudWFsXyA9IHRydWVcblx0XHRsZWF2ZVNjb3BlKHNjb3BlKVxuXHRcdHJldHVybiBwcm94eSBhcyBhbnlcblx0fVxuXG5cdGZpbmlzaERyYWZ0PEQgZXh0ZW5kcyBEcmFmdDxhbnk+Pihcblx0XHRkcmFmdDogRCxcblx0XHRwYXRjaExpc3RlbmVyPzogUGF0Y2hMaXN0ZW5lclxuXHQpOiBEIGV4dGVuZHMgRHJhZnQ8aW5mZXIgVD4gPyBUIDogbmV2ZXIge1xuXHRcdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gZHJhZnQgJiYgKGRyYWZ0IGFzIGFueSlbRFJBRlRfU1RBVEVdXG5cdFx0aWYgKF9fREVWX18pIHtcblx0XHRcdGlmICghc3RhdGUgfHwgIXN0YXRlLmlzTWFudWFsXykgZGllKDkpXG5cdFx0XHRpZiAoc3RhdGUuZmluYWxpemVkXykgZGllKDEwKVxuXHRcdH1cblx0XHRjb25zdCB7c2NvcGVfOiBzY29wZX0gPSBzdGF0ZVxuXHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdHJldHVybiBwcm9jZXNzUmVzdWx0KHVuZGVmaW5lZCwgc2NvcGUpXG5cdH1cblxuXHQvKipcblx0ICogUGFzcyB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgZnJlZXplIGFsbCBjb3BpZXMgY3JlYXRlZCBieSBJbW1lci5cblx0ICpcblx0ICogQnkgZGVmYXVsdCwgYXV0by1mcmVlemluZyBpcyBlbmFibGVkLlxuXHQgKi9cblx0c2V0QXV0b0ZyZWV6ZSh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuYXV0b0ZyZWV6ZV8gPSB2YWx1ZVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhc3MgdHJ1ZSB0byB1c2UgdGhlIEVTMjAxNSBgUHJveHlgIGNsYXNzIHdoZW4gY3JlYXRpbmcgZHJhZnRzLCB3aGljaCBpc1xuXHQgKiBhbHdheXMgZmFzdGVyIHRoYW4gdXNpbmcgRVM1IHByb3hpZXMuXG5cdCAqXG5cdCAqIEJ5IGRlZmF1bHQsIGZlYXR1cmUgZGV0ZWN0aW9uIGlzIHVzZWQsIHNvIGNhbGxpbmcgdGhpcyBpcyByYXJlbHkgbmVjZXNzYXJ5LlxuXHQgKi9cblx0c2V0VXNlUHJveGllcyh2YWx1ZTogYm9vbGVhbikge1xuXHRcdGlmICh2YWx1ZSAmJiAhaGFzUHJveGllcykge1xuXHRcdFx0ZGllKDIwKVxuXHRcdH1cblx0XHR0aGlzLnVzZVByb3hpZXNfID0gdmFsdWVcblx0fVxuXG5cdGFwcGx5UGF0Y2hlczxUIGV4dGVuZHMgT2JqZWN0aXNoPihiYXNlOiBULCBwYXRjaGVzOiBQYXRjaFtdKTogVCB7XG5cdFx0Ly8gSWYgYSBwYXRjaCByZXBsYWNlcyB0aGUgZW50aXJlIHN0YXRlLCB0YWtlIHRoYXQgcmVwbGFjZW1lbnQgYXMgYmFzZVxuXHRcdC8vIGJlZm9yZSBhcHBseWluZyBwYXRjaGVzXG5cdFx0bGV0IGk6IG51bWJlclxuXHRcdGZvciAoaSA9IHBhdGNoZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IHBhdGNoID0gcGF0Y2hlc1tpXVxuXHRcdFx0aWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAwICYmIHBhdGNoLm9wID09PSBcInJlcGxhY2VcIikge1xuXHRcdFx0XHRiYXNlID0gcGF0Y2gudmFsdWVcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gSWYgdGhlcmUgd2FzIGEgcGF0Y2ggdGhhdCByZXBsYWNlZCB0aGUgZW50aXJlIHN0YXRlLCBzdGFydCBmcm9tIHRoZVxuXHRcdC8vIHBhdGNoIGFmdGVyIHRoYXQuXG5cdFx0aWYgKGkgPiAtMSkge1xuXHRcdFx0cGF0Y2hlcyA9IHBhdGNoZXMuc2xpY2UoaSArIDEpXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBwbHlQYXRjaGVzSW1wbCA9IGdldFBsdWdpbihcIlBhdGNoZXNcIikuYXBwbHlQYXRjaGVzX1xuXHRcdGlmIChpc0RyYWZ0KGJhc2UpKSB7XG5cdFx0XHQvLyBOLkI6IG5ldmVyIGhpdHMgaWYgc29tZSBwYXRjaCBhIHJlcGxhY2VtZW50LCBwYXRjaGVzIGFyZSBuZXZlciBkcmFmdHNcblx0XHRcdHJldHVybiBhcHBseVBhdGNoZXNJbXBsKGJhc2UsIHBhdGNoZXMpXG5cdFx0fVxuXHRcdC8vIE90aGVyd2lzZSwgcHJvZHVjZSBhIGNvcHkgb2YgdGhlIGJhc2Ugc3RhdGUuXG5cdFx0cmV0dXJuIHRoaXMucHJvZHVjZShiYXNlLCAoZHJhZnQ6IERyYWZ0ZWQpID0+XG5cdFx0XHRhcHBseVBhdGNoZXNJbXBsKGRyYWZ0LCBwYXRjaGVzKVxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHk8VCBleHRlbmRzIE9iamVjdGlzaD4oXG5cdGltbWVyOiBJbW1lcixcblx0dmFsdWU6IFQsXG5cdHBhcmVudD86IEltbWVyU3RhdGVcbik6IERyYWZ0ZWQ8VCwgSW1tZXJTdGF0ZT4ge1xuXHQvLyBwcmVjb25kaXRpb246IGNyZWF0ZVByb3h5IHNob3VsZCBiZSBndWFyZGVkIGJ5IGlzRHJhZnRhYmxlLCBzbyB3ZSBrbm93IHdlIGNhbiBzYWZlbHkgZHJhZnRcblx0Y29uc3QgZHJhZnQ6IERyYWZ0ZWQgPSBpc01hcCh2YWx1ZSlcblx0XHQ/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eU1hcF8odmFsdWUsIHBhcmVudClcblx0XHQ6IGlzU2V0KHZhbHVlKVxuXHRcdD8gZ2V0UGx1Z2luKFwiTWFwU2V0XCIpLnByb3h5U2V0Xyh2YWx1ZSwgcGFyZW50KVxuXHRcdDogaW1tZXIudXNlUHJveGllc19cblx0XHQ/IGNyZWF0ZVByb3h5UHJveHkodmFsdWUsIHBhcmVudClcblx0XHQ6IGdldFBsdWdpbihcIkVTNVwiKS5jcmVhdGVFUzVQcm94eV8odmFsdWUsIHBhcmVudClcblxuXHRjb25zdCBzY29wZSA9IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKVxuXHRzY29wZS5kcmFmdHNfLnB1c2goZHJhZnQpXG5cdHJldHVybiBkcmFmdFxufVxuIiwgImltcG9ydCB7XG5cdGRpZSxcblx0aXNEcmFmdCxcblx0c2hhbGxvd0NvcHksXG5cdGVhY2gsXG5cdERSQUZUX1NUQVRFLFxuXHRnZXQsXG5cdHNldCxcblx0SW1tZXJTdGF0ZSxcblx0aXNEcmFmdGFibGUsXG5cdEFyY2h0eXBlLFxuXHRnZXRBcmNodHlwZSxcblx0Z2V0UGx1Z2luXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbi8qKiBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgZHJhZnQgYW5kIGZpbmFsaXplcyBpdCAoYnV0IHdpdGhvdXQgZnJlZXppbmcpLiBUaGlzIGlzIGEgZ3JlYXQgdXRpbGl0eSB0byBwcmludCB0aGUgY3VycmVudCBzdGF0ZSBkdXJpbmcgZGVidWdnaW5nIChubyBQcm94aWVzIGluIHRoZSB3YXkpLiBUaGUgb3V0cHV0IG9mIGN1cnJlbnQgY2FuIGFsc28gYmUgc2FmZWx5IGxlYWtlZCBvdXRzaWRlIHRoZSBwcm9kdWNlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50PFQ+KHZhbHVlOiBUKTogVFxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnQodmFsdWU6IGFueSk6IGFueSB7XG5cdGlmICghaXNEcmFmdCh2YWx1ZSkpIGRpZSgyMiwgdmFsdWUpXG5cdHJldHVybiBjdXJyZW50SW1wbCh2YWx1ZSlcbn1cblxuZnVuY3Rpb24gY3VycmVudEltcGwodmFsdWU6IGFueSk6IGFueSB7XG5cdGlmICghaXNEcmFmdGFibGUodmFsdWUpKSByZXR1cm4gdmFsdWVcblx0Y29uc3Qgc3RhdGU6IEltbWVyU3RhdGUgfCB1bmRlZmluZWQgPSB2YWx1ZVtEUkFGVF9TVEFURV1cblx0bGV0IGNvcHk6IGFueVxuXHRjb25zdCBhcmNoVHlwZSA9IGdldEFyY2h0eXBlKHZhbHVlKVxuXHRpZiAoc3RhdGUpIHtcblx0XHRpZiAoXG5cdFx0XHQhc3RhdGUubW9kaWZpZWRfICYmXG5cdFx0XHQoc3RhdGUudHlwZV8gPCA0IHx8ICFnZXRQbHVnaW4oXCJFUzVcIikuaGFzQ2hhbmdlc18oc3RhdGUgYXMgYW55KSlcblx0XHQpXG5cdFx0XHRyZXR1cm4gc3RhdGUuYmFzZV9cblx0XHQvLyBPcHRpbWl6YXRpb246IGF2b2lkIGdlbmVyYXRpbmcgbmV3IGRyYWZ0cyBkdXJpbmcgY29weWluZ1xuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlXG5cdFx0Y29weSA9IGNvcHlIZWxwZXIodmFsdWUsIGFyY2hUeXBlKVxuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSBmYWxzZVxuXHR9IGVsc2Uge1xuXHRcdGNvcHkgPSBjb3B5SGVscGVyKHZhbHVlLCBhcmNoVHlwZSlcblx0fVxuXG5cdGVhY2goY29weSwgKGtleSwgY2hpbGRWYWx1ZSkgPT4ge1xuXHRcdGlmIChzdGF0ZSAmJiBnZXQoc3RhdGUuYmFzZV8sIGtleSkgPT09IGNoaWxkVmFsdWUpIHJldHVybiAvLyBubyBuZWVkIHRvIGNvcHkgb3Igc2VhcmNoIGluIHNvbWV0aGluZyB0aGF0IGRpZG4ndCBjaGFuZ2Vcblx0XHRzZXQoY29weSwga2V5LCBjdXJyZW50SW1wbChjaGlsZFZhbHVlKSlcblx0fSlcblx0Ly8gSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgY29uc2lkZXIgZnJlZXppbmcgaGVyZSwgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dGluZ3Ncblx0cmV0dXJuIGFyY2hUeXBlID09PSBBcmNodHlwZS5TZXQgPyBuZXcgU2V0KGNvcHkpIDogY29weVxufVxuXG5mdW5jdGlvbiBjb3B5SGVscGVyKHZhbHVlOiBhbnksIGFyY2hUeXBlOiBudW1iZXIpOiBhbnkge1xuXHQvLyBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5LCBldmVuIGlmIGl0IGlzIGEgbWFwIG9yIHNldFxuXHRzd2l0Y2ggKGFyY2hUeXBlKSB7XG5cdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRyZXR1cm4gbmV3IE1hcCh2YWx1ZSlcblx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdC8vIFNldCB3aWxsIGJlIGNsb25lZCBhcyBhcnJheSB0ZW1wb3JhcmlseSwgc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSBpbmRpdmlkdWFsIGl0ZW1zXG5cdFx0XHRyZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSlcblx0fVxuXHRyZXR1cm4gc2hhbGxvd0NvcHkodmFsdWUpXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTdGF0ZSxcblx0RHJhZnRlZCxcblx0RVM1QXJyYXlTdGF0ZSxcblx0RVM1T2JqZWN0U3RhdGUsXG5cdGVhY2gsXG5cdGhhcyxcblx0aXNEcmFmdCxcblx0bGF0ZXN0LFxuXHREUkFGVF9TVEFURSxcblx0aXMsXG5cdGxvYWRQbHVnaW4sXG5cdEltbWVyU2NvcGUsXG5cdFByb3h5VHlwZSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHRkaWUsXG5cdG1hcmtDaGFuZ2VkLFxuXHRvYmplY3RUcmFwcyxcblx0b3duS2V5cyxcblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc1xufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG50eXBlIEVTNVN0YXRlID0gRVM1QXJyYXlTdGF0ZSB8IEVTNU9iamVjdFN0YXRlXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVFUzUoKSB7XG5cdGZ1bmN0aW9uIHdpbGxGaW5hbGl6ZUVTNV8oXG5cdFx0c2NvcGU6IEltbWVyU2NvcGUsXG5cdFx0cmVzdWx0OiBhbnksXG5cdFx0aXNSZXBsYWNlZDogYm9vbGVhblxuXHQpIHtcblx0XHRpZiAoIWlzUmVwbGFjZWQpIHtcblx0XHRcdGlmIChzY29wZS5wYXRjaGVzXykge1xuXHRcdFx0XHRtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KHNjb3BlLmRyYWZ0c18hWzBdKVxuXHRcdFx0fVxuXHRcdFx0Ly8gVGhpcyBpcyBmYXN0ZXIgd2hlbiB3ZSBkb24ndCBjYXJlIGFib3V0IHdoaWNoIGF0dHJpYnV0ZXMgY2hhbmdlZC5cblx0XHRcdG1hcmtDaGFuZ2VzU3dlZXAoc2NvcGUuZHJhZnRzXylcblx0XHR9XG5cdFx0Ly8gV2hlbiBhIGNoaWxkIGRyYWZ0IGlzIHJldHVybmVkLCBsb29rIGZvciBjaGFuZ2VzLlxuXHRcdGVsc2UgaWYgKFxuXHRcdFx0aXNEcmFmdChyZXN1bHQpICYmXG5cdFx0XHQocmVzdWx0W0RSQUZUX1NUQVRFXSBhcyBFUzVTdGF0ZSkuc2NvcGVfID09PSBzY29wZVxuXHRcdCkge1xuXHRcdFx0bWFya0NoYW5nZXNTd2VlcChzY29wZS5kcmFmdHNfKVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUVTNURyYWZ0KGlzQXJyYXk6IGJvb2xlYW4sIGJhc2U6IGFueSkge1xuXHRcdGlmIChpc0FycmF5KSB7XG5cdFx0XHRjb25zdCBkcmFmdCA9IG5ldyBBcnJheShiYXNlLmxlbmd0aClcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZS5sZW5ndGg7IGkrKylcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRyYWZ0LCBcIlwiICsgaSwgcHJveHlQcm9wZXJ0eShpLCB0cnVlKSlcblx0XHRcdHJldHVybiBkcmFmdFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9ycyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYmFzZSlcblx0XHRcdGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdFx0XHRjb25zdCBrZXlzID0gb3duS2V5cyhkZXNjcmlwdG9ycylcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBrZXk6IGFueSA9IGtleXNbaV1cblx0XHRcdFx0ZGVzY3JpcHRvcnNba2V5XSA9IHByb3h5UHJvcGVydHkoXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdGlzQXJyYXkgfHwgISFkZXNjcmlwdG9yc1trZXldLmVudW1lcmFibGVcblx0XHRcdFx0KVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2UpLCBkZXNjcmlwdG9ycylcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVFUzVQcm94eV88VD4oXG5cdFx0YmFzZTogVCxcblx0XHRwYXJlbnQ/OiBJbW1lclN0YXRlXG5cdCk6IERyYWZ0ZWQ8VCwgRVM1T2JqZWN0U3RhdGUgfCBFUzVBcnJheVN0YXRlPiB7XG5cdFx0Y29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmFzZSlcblx0XHRjb25zdCBkcmFmdCA9IGNyZWF0ZUVTNURyYWZ0KGlzQXJyYXksIGJhc2UpXG5cblx0XHRjb25zdCBzdGF0ZTogRVM1T2JqZWN0U3RhdGUgfCBFUzVBcnJheVN0YXRlID0ge1xuXHRcdFx0dHlwZV86IGlzQXJyYXkgPyBQcm94eVR5cGUuRVM1QXJyYXkgOiAoUHJveHlUeXBlLkVTNU9iamVjdCBhcyBhbnkpLFxuXHRcdFx0c2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCksXG5cdFx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRhc3NpZ25lZF86IHt9LFxuXHRcdFx0cGFyZW50XzogcGFyZW50LFxuXHRcdFx0Ly8gYmFzZSBpcyB0aGUgb2JqZWN0IHdlIGFyZSBkcmFmdGluZ1xuXHRcdFx0YmFzZV86IGJhc2UsXG5cdFx0XHQvLyBkcmFmdCBpcyB0aGUgZHJhZnQgb2JqZWN0IGl0c2VsZiwgdGhhdCB0cmFwcyBhbGwgcmVhZHMgYW5kIHJlYWRzIGZyb20gZWl0aGVyIHRoZSBiYXNlIChpZiB1bm1vZGlmaWVkKSBvciBjb3B5IChpZiBtb2RpZmllZClcblx0XHRcdGRyYWZ0XzogZHJhZnQsXG5cdFx0XHRjb3B5XzogbnVsbCxcblx0XHRcdHJldm9rZWRfOiBmYWxzZSxcblx0XHRcdGlzTWFudWFsXzogZmFsc2Vcblx0XHR9XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZHJhZnQsIERSQUZUX1NUQVRFLCB7XG5cdFx0XHR2YWx1ZTogc3RhdGUsXG5cdFx0XHQvLyBlbnVtZXJhYmxlOiBmYWxzZSA8LSB0aGUgZGVmYXVsdFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KVxuXHRcdHJldHVybiBkcmFmdFxuXHR9XG5cblx0Ly8gcHJvcGVydHkgZGVzY3JpcHRvcnMgYXJlIHJlY3ljbGVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmVhdGUgYSBnZXQgYW5kIHNldCBjbG9zdXJlIHBlciBwcm9wZXJ0eSxcblx0Ly8gYnV0IHNoYXJlIHRoZW0gYWxsIGluc3RlYWRcblx0Y29uc3QgZGVzY3JpcHRvcnM6IHtbcHJvcDogc3RyaW5nXTogUHJvcGVydHlEZXNjcmlwdG9yfSA9IHt9XG5cblx0ZnVuY3Rpb24gcHJveHlQcm9wZXJ0eShcblx0XHRwcm9wOiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0ZW51bWVyYWJsZTogYm9vbGVhblxuXHQpOiBQcm9wZXJ0eURlc2NyaXB0b3Ige1xuXHRcdGxldCBkZXNjID0gZGVzY3JpcHRvcnNbcHJvcF1cblx0XHRpZiAoZGVzYykge1xuXHRcdFx0ZGVzYy5lbnVtZXJhYmxlID0gZW51bWVyYWJsZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZXNjcmlwdG9yc1twcm9wXSA9IGRlc2MgPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZSxcblx0XHRcdFx0Z2V0KHRoaXM6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdFx0XHRpZiAoX19ERVZfXykgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRyZXR1cm4gb2JqZWN0VHJhcHMuZ2V0KHN0YXRlLCBwcm9wKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodGhpczogYW55LCB2YWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdFx0XHRpZiAoX19ERVZfXykgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRvYmplY3RUcmFwcy5zZXQoc3RhdGUsIHByb3AsIHZhbHVlKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjXG5cdH1cblxuXHQvLyBUaGlzIGxvb2tzIGV4cGVuc2l2ZSwgYnV0IG9ubHkgcHJveGllcyBhcmUgdmlzaXRlZCwgYW5kIG9ubHkgb2JqZWN0cyB3aXRob3V0IGtub3duIGNoYW5nZXMgYXJlIHNjYW5uZWQuXG5cdGZ1bmN0aW9uIG1hcmtDaGFuZ2VzU3dlZXAoZHJhZnRzOiBEcmFmdGVkPGFueSwgSW1tZXJTdGF0ZT5bXSkge1xuXHRcdC8vIFRoZSBuYXR1cmFsIG9yZGVyIG9mIGRyYWZ0cyBpbiB0aGUgYHNjb3BlYCBhcnJheSBpcyBiYXNlZCBvbiB3aGVuIHRoZXlcblx0XHQvLyB3ZXJlIGFjY2Vzc2VkLiBCeSBwcm9jZXNzaW5nIGRyYWZ0cyBpbiByZXZlcnNlIG5hdHVyYWwgb3JkZXIsIHdlIGhhdmUgYVxuXHRcdC8vIGJldHRlciBjaGFuY2Ugb2YgcHJvY2Vzc2luZyBsZWFmIG5vZGVzIGZpcnN0LiBXaGVuIGEgbGVhZiBub2RlIGlzIGtub3duIHRvXG5cdFx0Ly8gaGF2ZSBjaGFuZ2VkLCB3ZSBjYW4gYXZvaWQgYW55IHRyYXZlcnNhbCBvZiBpdHMgYW5jZXN0b3Igbm9kZXMuXG5cdFx0Zm9yIChsZXQgaSA9IGRyYWZ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IEVTNVN0YXRlID0gZHJhZnRzW2ldW0RSQUZUX1NUQVRFXVxuXHRcdFx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRcdFx0c3dpdGNoIChzdGF0ZS50eXBlXykge1xuXHRcdFx0XHRcdGNhc2UgUHJveHlUeXBlLkVTNUFycmF5OlxuXHRcdFx0XHRcdFx0aWYgKGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSkpIG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVPYmplY3Q6XG5cdFx0XHRcdFx0XHRpZiAoaGFzT2JqZWN0Q2hhbmdlcyhzdGF0ZSkpIG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkob2JqZWN0OiBhbnkpIHtcblx0XHRpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSBcIm9iamVjdFwiKSByZXR1cm5cblx0XHRjb25zdCBzdGF0ZTogRVM1U3RhdGUgfCB1bmRlZmluZWQgPSBvYmplY3RbRFJBRlRfU1RBVEVdXG5cdFx0aWYgKCFzdGF0ZSkgcmV0dXJuXG5cdFx0Y29uc3Qge2Jhc2VfLCBkcmFmdF8sIGFzc2lnbmVkXywgdHlwZV99ID0gc3RhdGVcblx0XHRpZiAodHlwZV8gPT09IFByb3h5VHlwZS5FUzVPYmplY3QpIHtcblx0XHRcdC8vIExvb2sgZm9yIGFkZGVkIGtleXMuXG5cdFx0XHQvLyBwcm9iYWJseSB0aGVyZSBpcyBhIGZhc3RlciB3YXkgdG8gZGV0ZWN0IGNoYW5nZXMsIGFzIHN3ZWVwICsgcmVjdXJzZSBzZWVtcyB0byBkbyBzb21lXG5cdFx0XHQvLyB1bm5lY2Vzc2FyeSB3b3JrLlxuXHRcdFx0Ly8gYWxzbzogcHJvYmFibHkgd2UgY2FuIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiB3ZSBkZXRlY3QgaGVyZSwgdG8gc3BlZWQgdXAgdHJlZSBmaW5hbGl6YXRpb24hXG5cdFx0XHRlYWNoKGRyYWZ0Xywga2V5ID0+IHtcblx0XHRcdFx0aWYgKChrZXkgYXMgYW55KSA9PT0gRFJBRlRfU1RBVEUpIHJldHVyblxuXHRcdFx0XHQvLyBUaGUgYHVuZGVmaW5lZGAgY2hlY2sgaXMgYSBmYXN0IHBhdGggZm9yIHByZS1leGlzdGluZyBrZXlzLlxuXHRcdFx0XHRpZiAoKGJhc2VfIGFzIGFueSlba2V5XSA9PT0gdW5kZWZpbmVkICYmICFoYXMoYmFzZV8sIGtleSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9ba2V5XSA9IHRydWVcblx0XHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0fSBlbHNlIGlmICghYXNzaWduZWRfW2tleV0pIHtcblx0XHRcdFx0XHQvLyBPbmx5IHVudG91Y2hlZCBwcm9wZXJ0aWVzIHRyaWdnZXIgcmVjdXJzaW9uLlxuXHRcdFx0XHRcdG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoZHJhZnRfW2tleV0pXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQvLyBMb29rIGZvciByZW1vdmVkIGtleXMuXG5cdFx0XHRlYWNoKGJhc2VfLCBrZXkgPT4ge1xuXHRcdFx0XHQvLyBUaGUgYHVuZGVmaW5lZGAgY2hlY2sgaXMgYSBmYXN0IHBhdGggZm9yIHByZS1leGlzdGluZyBrZXlzLlxuXHRcdFx0XHRpZiAoZHJhZnRfW2tleV0gPT09IHVuZGVmaW5lZCAmJiAhaGFzKGRyYWZ0Xywga2V5KSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1trZXldID0gZmFsc2Vcblx0XHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9IGVsc2UgaWYgKHR5cGVfID09PSBQcm94eVR5cGUuRVM1QXJyYXkpIHtcblx0XHRcdGlmIChoYXNBcnJheUNoYW5nZXMoc3RhdGUgYXMgRVM1QXJyYXlTdGF0ZSkpIHtcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdGFzc2lnbmVkXy5sZW5ndGggPSB0cnVlXG5cdFx0XHR9XG5cblx0XHRcdGlmIChkcmFmdF8ubGVuZ3RoIDwgYmFzZV8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSBkcmFmdF8ubGVuZ3RoOyBpIDwgYmFzZV8ubGVuZ3RoOyBpKyspIGFzc2lnbmVkX1tpXSA9IGZhbHNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gYmFzZV8ubGVuZ3RoOyBpIDwgZHJhZnRfLmxlbmd0aDsgaSsrKSBhc3NpZ25lZF9baV0gPSB0cnVlXG5cdFx0XHR9XG5cblx0XHRcdC8vIE1pbmltdW0gY291bnQgaXMgZW5vdWdoLCB0aGUgb3RoZXIgcGFydHMgaGFzIGJlZW4gcHJvY2Vzc2VkLlxuXHRcdFx0Y29uc3QgbWluID0gTWF0aC5taW4oZHJhZnRfLmxlbmd0aCwgYmFzZV8ubGVuZ3RoKVxuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1pbjsgaSsrKSB7XG5cdFx0XHRcdC8vIE9ubHkgdW50b3VjaGVkIGluZGljZXMgdHJpZ2dlciByZWN1cnNpb24uXG5cdFx0XHRcdGlmICghZHJhZnRfLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2ldID0gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChhc3NpZ25lZF9baV0gPT09IHVuZGVmaW5lZCkgbWFya0NoYW5nZXNSZWN1cnNpdmVseShkcmFmdF9baV0pXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzT2JqZWN0Q2hhbmdlcyhzdGF0ZTogRVM1T2JqZWN0U3RhdGUpIHtcblx0XHRjb25zdCB7YmFzZV8sIGRyYWZ0X30gPSBzdGF0ZVxuXG5cdFx0Ly8gU2VhcmNoIGZvciBhZGRlZCBrZXlzIGFuZCBjaGFuZ2VkIGtleXMuIFN0YXJ0IGF0IHRoZSBiYWNrLCBiZWNhdXNlXG5cdFx0Ly8gbm9uLW51bWVyaWMga2V5cyBhcmUgb3JkZXJlZCBieSB0aW1lIG9mIGRlZmluaXRpb24gb24gdGhlIG9iamVjdC5cblx0XHRjb25zdCBrZXlzID0gb3duS2V5cyhkcmFmdF8pXG5cdFx0Zm9yIChsZXQgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IGtleTogYW55ID0ga2V5c1tpXVxuXHRcdFx0aWYgKGtleSA9PT0gRFJBRlRfU1RBVEUpIGNvbnRpbnVlXG5cdFx0XHRjb25zdCBiYXNlVmFsdWUgPSBiYXNlX1trZXldXG5cdFx0XHQvLyBUaGUgYHVuZGVmaW5lZGAgY2hlY2sgaXMgYSBmYXN0IHBhdGggZm9yIHByZS1leGlzdGluZyBrZXlzLlxuXHRcdFx0aWYgKGJhc2VWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICFoYXMoYmFzZV8sIGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHRcdC8vIE9uY2UgYSBiYXNlIGtleSBpcyBkZWxldGVkLCBmdXR1cmUgY2hhbmdlcyBnbyB1bmRldGVjdGVkLCBiZWNhdXNlIGl0c1xuXHRcdFx0Ly8gZGVzY3JpcHRvciBpcyBlcmFzZWQuIFRoaXMgYnJhbmNoIGRldGVjdHMgYW55IG1pc3NlZCBjaGFuZ2VzLlxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZHJhZnRfW2tleV1cblx0XHRcdFx0Y29uc3Qgc3RhdGU6IEltbWVyU3RhdGUgPSB2YWx1ZSAmJiB2YWx1ZVtEUkFGVF9TVEFURV1cblx0XHRcdFx0aWYgKHN0YXRlID8gc3RhdGUuYmFzZV8gIT09IGJhc2VWYWx1ZSA6ICFpcyh2YWx1ZSwgYmFzZVZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBdCB0aGlzIHBvaW50LCBubyBrZXlzIHdlcmUgYWRkZWQgb3IgY2hhbmdlZC5cblx0XHQvLyBDb21wYXJlIGtleSBjb3VudCB0byBkZXRlcm1pbmUgaWYga2V5cyB3ZXJlIGRlbGV0ZWQuXG5cdFx0Y29uc3QgYmFzZUlzRHJhZnQgPSAhIWJhc2VfW0RSQUZUX1NUQVRFIGFzIGFueV1cblx0XHRyZXR1cm4ga2V5cy5sZW5ndGggIT09IG93bktleXMoYmFzZV8pLmxlbmd0aCArIChiYXNlSXNEcmFmdCA/IDAgOiAxKSAvLyArIDEgdG8gY29ycmVjdCBmb3IgRFJBRlRfU1RBVEVcblx0fVxuXG5cdGZ1bmN0aW9uIGhhc0FycmF5Q2hhbmdlcyhzdGF0ZTogRVM1QXJyYXlTdGF0ZSkge1xuXHRcdGNvbnN0IHtkcmFmdF99ID0gc3RhdGVcblx0XHRpZiAoZHJhZnRfLmxlbmd0aCAhPT0gc3RhdGUuYmFzZV8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxuXHRcdC8vIFNlZSAjMTE2XG5cdFx0Ly8gSWYgd2UgZmlyc3Qgc2hvcnRlbiB0aGUgbGVuZ3RoLCBvdXIgYXJyYXkgaW50ZXJjZXB0b3JzIHdpbGwgYmUgcmVtb3ZlZC5cblx0XHQvLyBJZiBhZnRlciB0aGF0IG5ldyBpdGVtcyBhcmUgYWRkZWQsIHJlc3VsdCBpbiB0aGUgc2FtZSBvcmlnaW5hbCBsZW5ndGgsXG5cdFx0Ly8gdGhvc2UgbGFzdCBpdGVtcyB3aWxsIGhhdmUgbm8gaW50ZXJjZXB0aW5nIHByb3BlcnR5LlxuXHRcdC8vIFNvIGlmIHRoZXJlIGlzIG5vIG93biBkZXNjcmlwdG9yIG9uIHRoZSBsYXN0IHBvc2l0aW9uLCB3ZSBrbm93IHRoYXQgaXRlbXMgd2VyZSByZW1vdmVkIGFuZCBhZGRlZFxuXHRcdC8vIE4uQi46IHNwbGljZSwgdW5zaGlmdCwgZXRjIG9ubHkgc2hpZnQgdmFsdWVzIGFyb3VuZCwgYnV0IG5vdCBwcm9wIGRlc2NyaXB0b3JzLCBzbyB3ZSBvbmx5IGhhdmUgdG8gY2hlY2tcblx0XHQvLyB0aGUgbGFzdCBvbmVcblx0XHQvLyBsYXN0IGRlc2NyaXB0b3IgY2FuIGJlIG5vdCBhIHRyYXAsIGlmIHRoZSBhcnJheSB3YXMgZXh0ZW5kZWRcblx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRcdGRyYWZ0Xyxcblx0XHRcdGRyYWZ0Xy5sZW5ndGggLSAxXG5cdFx0KVxuXHRcdC8vIGRlc2NyaXB0b3IgY2FuIGJlIG51bGwsIGJ1dCBvbmx5IGZvciBuZXdseSBjcmVhdGVkIHNwYXJzZSBhcnJheXMsIGVnLiBuZXcgQXJyYXkoMTApXG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZ2V0KSByZXR1cm4gdHJ1ZVxuXHRcdC8vIGlmIHdlIG1pc3MgYSBwcm9wZXJ0eSwgaXQgaGFzIGJlZW4gZGVsZXRlZCwgc28gYXJyYXkgcHJvYm9iYWx5IGNoYW5nZWRcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRyYWZ0Xy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKCFkcmFmdF8uaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIHdlIGRvbid0IGhhdmUgdG8gY29tcGFyZSwgYXMgdGhleSB3b3VsZCBoYXZlIGJlZW4gcGlja2VkIHVwIGJ5IHRoZSBpbmRleCBzZXR0ZXJzXG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHRmdW5jdGlvbiBoYXNDaGFuZ2VzXyhzdGF0ZTogRVM1U3RhdGUpIHtcblx0XHRyZXR1cm4gc3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5FUzVPYmplY3Rcblx0XHRcdD8gaGFzT2JqZWN0Q2hhbmdlcyhzdGF0ZSlcblx0XHRcdDogaGFzQXJyYXlDaGFuZ2VzKHN0YXRlKVxuXHR9XG5cblx0ZnVuY3Rpb24gYXNzZXJ0VW5yZXZva2VkKHN0YXRlOiBhbnkgLypFUzVTdGF0ZSB8IE1hcFN0YXRlIHwgU2V0U3RhdGUqLykge1xuXHRcdGlmIChzdGF0ZS5yZXZva2VkXykgZGllKDMsIEpTT04uc3RyaW5naWZ5KGxhdGVzdChzdGF0ZSkpKVxuXHR9XG5cblx0bG9hZFBsdWdpbihcIkVTNVwiLCB7XG5cdFx0Y3JlYXRlRVM1UHJveHlfLFxuXHRcdHdpbGxGaW5hbGl6ZUVTNV8sXG5cdFx0aGFzQ2hhbmdlc19cblx0fSlcbn1cbiIsICJpbXBvcnQge2ltbWVyYWJsZX0gZnJvbSBcIi4uL2ltbWVyXCJcbmltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdFBhdGNoLFxuXHRTZXRTdGF0ZSxcblx0RVM1QXJyYXlTdGF0ZSxcblx0UHJveHlBcnJheVN0YXRlLFxuXHRNYXBTdGF0ZSxcblx0RVM1T2JqZWN0U3RhdGUsXG5cdFByb3h5T2JqZWN0U3RhdGUsXG5cdFBhdGNoUGF0aCxcblx0Z2V0LFxuXHRlYWNoLFxuXHRoYXMsXG5cdGdldEFyY2h0eXBlLFxuXHRpc1NldCxcblx0aXNNYXAsXG5cdGxvYWRQbHVnaW4sXG5cdFByb3h5VHlwZSxcblx0QXJjaHR5cGUsXG5cdGRpZSxcblx0aXNEcmFmdCxcblx0aXNEcmFmdGFibGUsXG5cdE5PVEhJTkdcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZVBhdGNoZXMoKSB7XG5cdGNvbnN0IFJFUExBQ0UgPSBcInJlcGxhY2VcIlxuXHRjb25zdCBBREQgPSBcImFkZFwiXG5cdGNvbnN0IFJFTU9WRSA9IFwicmVtb3ZlXCJcblxuXHRmdW5jdGlvbiBnZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdHN0YXRlOiBJbW1lclN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpOiB2b2lkIHtcblx0XHRzd2l0Y2ggKHN0YXRlLnR5cGVfKSB7XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5Qcm94eU9iamVjdDpcblx0XHRcdGNhc2UgUHJveHlUeXBlLkVTNU9iamVjdDpcblx0XHRcdGNhc2UgUHJveHlUeXBlLk1hcDpcblx0XHRcdFx0cmV0dXJuIGdlbmVyYXRlUGF0Y2hlc0Zyb21Bc3NpZ25lZChcblx0XHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0XHRiYXNlUGF0aCxcblx0XHRcdFx0XHRwYXRjaGVzLFxuXHRcdFx0XHRcdGludmVyc2VQYXRjaGVzXG5cdFx0XHRcdClcblx0XHRcdGNhc2UgUHJveHlUeXBlLkVTNUFycmF5OlxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuUHJveHlBcnJheTpcblx0XHRcdFx0cmV0dXJuIGdlbmVyYXRlQXJyYXlQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpXG5cdFx0XHRjYXNlIFByb3h5VHlwZS5TZXQ6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZVNldFBhdGNoZXMoXG5cdFx0XHRcdFx0KHN0YXRlIGFzIGFueSkgYXMgU2V0U3RhdGUsXG5cdFx0XHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRcdFx0cGF0Y2hlcyxcblx0XHRcdFx0XHRpbnZlcnNlUGF0Y2hlc1xuXHRcdFx0XHQpXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVBcnJheVBhdGNoZXMoXG5cdFx0c3RhdGU6IEVTNUFycmF5U3RhdGUgfCBQcm94eUFycmF5U3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCkge1xuXHRcdGxldCB7YmFzZV8sIGFzc2lnbmVkX30gPSBzdGF0ZVxuXHRcdGxldCBjb3B5XyA9IHN0YXRlLmNvcHlfIVxuXG5cdFx0Ly8gUmVkdWNlIGNvbXBsZXhpdHkgYnkgZW5zdXJpbmcgYGJhc2VgIGlzIG5ldmVyIGxvbmdlci5cblx0XHRpZiAoY29weV8ubGVuZ3RoIDwgYmFzZV8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHQ7W2Jhc2VfLCBjb3B5X10gPSBbY29weV8sIGJhc2VfXVxuXHRcdFx0O1twYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc10gPSBbaW52ZXJzZVBhdGNoZXMsIHBhdGNoZXNdXG5cdFx0fVxuXG5cdFx0Ly8gUHJvY2VzcyByZXBsYWNlZCBpbmRpY2VzLlxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZV8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChhc3NpZ25lZF9baV0gJiYgY29weV9baV0gIT09IGJhc2VfW2ldKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0Ly8gTmVlZCB0byBtYXliZSBjbG9uZSBpdCwgYXMgaXQgY2FuIGluIGZhY3QgYmUgdGhlIG9yaWdpbmFsIHZhbHVlXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG5cdFx0XHRcdFx0dmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGNvcHlfW2ldKVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChiYXNlX1tpXSlcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcm9jZXNzIGFkZGVkIGluZGljZXMuXG5cdFx0Zm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGNvcHlfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuXHRcdFx0XHQvLyBkdWUgdG8gdGhlIGJhc2UvY29weSBpbnZlcnNpb24gYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb25cblx0XHRcdFx0dmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGNvcHlfW2ldKVxuXHRcdFx0fSlcblx0XHR9XG5cdFx0aWYgKGJhc2VfLmxlbmd0aCA8IGNvcHlfLmxlbmd0aCkge1xuXHRcdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0XHRwYXRoOiBiYXNlUGF0aC5jb25jYXQoW1wibGVuZ3RoXCJdKSxcblx0XHRcdFx0dmFsdWU6IGJhc2VfLmxlbmd0aFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGlzIHVzZWQgZm9yIGJvdGggTWFwIG9iamVjdHMgYW5kIG5vcm1hbCBvYmplY3RzLlxuXHRmdW5jdGlvbiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoXG5cdFx0c3RhdGU6IE1hcFN0YXRlIHwgRVM1T2JqZWN0U3RhdGUgfCBQcm94eU9iamVjdFN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpIHtcblx0XHRjb25zdCB7YmFzZV8sIGNvcHlffSA9IHN0YXRlXG5cdFx0ZWFjaChzdGF0ZS5hc3NpZ25lZF8hLCAoa2V5LCBhc3NpZ25lZFZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBvcmlnVmFsdWUgPSBnZXQoYmFzZV8sIGtleSlcblx0XHRcdGNvbnN0IHZhbHVlID0gZ2V0KGNvcHlfISwga2V5KVxuXHRcdFx0Y29uc3Qgb3AgPSAhYXNzaWduZWRWYWx1ZSA/IFJFTU9WRSA6IGhhcyhiYXNlXywga2V5KSA/IFJFUExBQ0UgOiBBRERcblx0XHRcdGlmIChvcmlnVmFsdWUgPT09IHZhbHVlICYmIG9wID09PSBSRVBMQUNFKSByZXR1cm5cblx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoa2V5IGFzIGFueSlcblx0XHRcdHBhdGNoZXMucHVzaChvcCA9PT0gUkVNT1ZFID8ge29wLCBwYXRofSA6IHtvcCwgcGF0aCwgdmFsdWV9KVxuXHRcdFx0aW52ZXJzZVBhdGNoZXMucHVzaChcblx0XHRcdFx0b3AgPT09IEFERFxuXHRcdFx0XHRcdD8ge29wOiBSRU1PVkUsIHBhdGh9XG5cdFx0XHRcdFx0OiBvcCA9PT0gUkVNT1ZFXG5cdFx0XHRcdFx0PyB7b3A6IEFERCwgcGF0aCwgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9yaWdWYWx1ZSl9XG5cdFx0XHRcdFx0OiB7b3A6IFJFUExBQ0UsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpfVxuXHRcdFx0KVxuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZVNldFBhdGNoZXMoXG5cdFx0c3RhdGU6IFNldFN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpIHtcblx0XHRsZXQge2Jhc2VfLCBjb3B5X30gPSBzdGF0ZVxuXG5cdFx0bGV0IGkgPSAwXG5cdFx0YmFzZV8uZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFjb3B5XyEuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogUkVNT1ZFLFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0fSlcblx0XHRcdFx0aW52ZXJzZVBhdGNoZXMudW5zaGlmdCh7XG5cdFx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRpKytcblx0XHR9KVxuXHRcdGkgPSAwXG5cdFx0Y29weV8hLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdGlmICghYmFzZV8uaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0fSlcblx0XHRcdFx0aW52ZXJzZVBhdGNoZXMudW5zaGlmdCh7XG5cdFx0XHRcdFx0b3A6IFJFTU9WRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRpKytcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdGJhc2VWYWx1ZTogYW55LFxuXHRcdHJlcGxhY2VtZW50OiBhbnksXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpOiB2b2lkIHtcblx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRwYXRoOiBbXSxcblx0XHRcdHZhbHVlOiByZXBsYWNlbWVudCA9PT0gTk9USElORyA/IHVuZGVmaW5lZCA6IHJlcGxhY2VtZW50XG5cdFx0fSlcblx0XHRpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcblx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0cGF0aDogW10sXG5cdFx0XHR2YWx1ZTogYmFzZVZhbHVlXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5UGF0Y2hlc188VD4oZHJhZnQ6IFQsIHBhdGNoZXM6IFBhdGNoW10pOiBUIHtcblx0XHRwYXRjaGVzLmZvckVhY2gocGF0Y2ggPT4ge1xuXHRcdFx0Y29uc3Qge3BhdGgsIG9wfSA9IHBhdGNoXG5cblx0XHRcdGxldCBiYXNlOiBhbnkgPSBkcmFmdFxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRUeXBlID0gZ2V0QXJjaHR5cGUoYmFzZSlcblx0XHRcdFx0bGV0IHAgPSBwYXRoW2ldXG5cdFx0XHRcdGlmICh0eXBlb2YgcCAhPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgcCAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdHAgPSBcIlwiICsgcFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2VlICM3MzgsIGF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChwYXJlbnRUeXBlID09PSBBcmNodHlwZS5PYmplY3QgfHwgcGFyZW50VHlwZSA9PT0gQXJjaHR5cGUuQXJyYXkpICYmXG5cdFx0XHRcdFx0KHAgPT09IFwiX19wcm90b19fXCIgfHwgcCA9PT0gXCJjb25zdHJ1Y3RvclwiKVxuXHRcdFx0XHQpXG5cdFx0XHRcdFx0ZGllKDI0KVxuXHRcdFx0XHRpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIiAmJiBwID09PSBcInByb3RvdHlwZVwiKSBkaWUoMjQpXG5cdFx0XHRcdGJhc2UgPSBnZXQoYmFzZSwgcClcblx0XHRcdFx0aWYgKHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSBkaWUoMTUsIHBhdGguam9pbihcIi9cIikpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGUgPSBnZXRBcmNodHlwZShiYXNlKVxuXHRcdFx0Y29uc3QgdmFsdWUgPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKHBhdGNoLnZhbHVlKSAvLyB1c2VkIHRvIGNsb25lIHBhdGNoIHRvIGVuc3VyZSBvcmlnaW5hbCBwYXRjaCBpcyBub3QgbW9kaWZpZWQsIHNlZSAjNDExXG5cdFx0XHRjb25zdCBrZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cblx0XHRcdHN3aXRjaCAob3ApIHtcblx0XHRcdFx0Y2FzZSBSRVBMQUNFOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0XHRcdFx0XHRkaWUoMTYpXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHQvLyBpZiB2YWx1ZSBpcyBhbiBvYmplY3QsIHRoZW4gaXQncyBhc3NpZ25lZCBieSByZWZlcmVuY2Vcblx0XHRcdFx0XHRcdFx0Ly8gaW4gdGhlIGZvbGxvd2luZyBhZGQgb3IgcmVtb3ZlIG9wcywgdGhlIHZhbHVlIGZpZWxkIGluc2lkZSB0aGUgcGF0Y2ggd2lsbCBhbHNvIGJlIG1vZGlmeWVkXG5cdFx0XHRcdFx0XHRcdC8vIHNvIHdlIHVzZSB2YWx1ZSBmcm9tIHRoZSBjbG9uZWQgcGF0Y2hcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKGJhc2Vba2V5XSA9IHZhbHVlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBBREQ6XG5cdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLkFycmF5OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5ID09PSBcIi1cIlxuXHRcdFx0XHRcdFx0XHRcdD8gYmFzZS5wdXNoKHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdDogYmFzZS5zcGxpY2Uoa2V5IGFzIGFueSwgMCwgdmFsdWUpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2Uuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuYWRkKHZhbHVlKVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChiYXNlW2tleV0gPSB2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgUkVNT1ZFOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5BcnJheTpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2Uuc3BsaWNlKGtleSBhcyBhbnksIDEpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuZGVsZXRlKGtleSlcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5kZWxldGUocGF0Y2gudmFsdWUpXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZGVsZXRlIGJhc2Vba2V5XVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRkaWUoMTcsIG9wKVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRyZXR1cm4gZHJhZnRcblx0fVxuXG5cdC8vIG9wdGltaXplOiB0aGlzIGlzIHF1aXRlIGEgcGVyZm9ybWFuY2UgaGl0LCBjYW4gd2UgZGV0ZWN0IGludGVsbGlnZW50bHkgd2hlbiBpdCBpcyBuZWVkZWQ/XG5cdC8vIEUuZy4gYXV0by1kcmFmdCB3aGVuIG5ldyBvYmplY3RzIGZyb20gb3V0c2lkZSBhcmUgYXNzaWduZWQgYW5kIG1vZGlmaWVkP1xuXHQvLyAoU2VlIGZhaWxpbmcgdGVzdCB3aGVuIGRlZXBDbG9uZSBqdXN0IHJldHVybnMgb2JqKVxuXHRmdW5jdGlvbiBkZWVwQ2xvbmVQYXRjaFZhbHVlPFQ+KG9iajogVCk6IFRcblx0ZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmo6IGFueSkge1xuXHRcdGlmICghaXNEcmFmdGFibGUob2JqKSkgcmV0dXJuIG9ialxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubWFwKGRlZXBDbG9uZVBhdGNoVmFsdWUpXG5cdFx0aWYgKGlzTWFwKG9iaikpXG5cdFx0XHRyZXR1cm4gbmV3IE1hcChcblx0XHRcdFx0QXJyYXkuZnJvbShvYmouZW50cmllcygpKS5tYXAoKFtrLCB2XSkgPT4gW2ssIGRlZXBDbG9uZVBhdGNoVmFsdWUodildKVxuXHRcdFx0KVxuXHRcdGlmIChpc1NldChvYmopKSByZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKG9iaikubWFwKGRlZXBDbG9uZVBhdGNoVmFsdWUpKVxuXHRcdGNvbnN0IGNsb25lZCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSBjbG9uZWRba2V5XSA9IGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqW2tleV0pXG5cdFx0aWYgKGhhcyhvYmosIGltbWVyYWJsZSkpIGNsb25lZFtpbW1lcmFibGVdID0gb2JqW2ltbWVyYWJsZV1cblx0XHRyZXR1cm4gY2xvbmVkXG5cdH1cblxuXHRmdW5jdGlvbiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZDxUPihvYmo6IFQpOiBUIHtcblx0XHRpZiAoaXNEcmFmdChvYmopKSB7XG5cdFx0XHRyZXR1cm4gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmopXG5cdFx0fSBlbHNlIHJldHVybiBvYmpcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJQYXRjaGVzXCIsIHtcblx0XHRhcHBseVBhdGNoZXNfLFxuXHRcdGdlbmVyYXRlUGF0Y2hlc18sXG5cdFx0Z2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfXG5cdH0pXG59XG4iLCAiLy8gdHlwZXMgb25seSFcbmltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdEFueU1hcCxcblx0QW55U2V0LFxuXHRNYXBTdGF0ZSxcblx0U2V0U3RhdGUsXG5cdERSQUZUX1NUQVRFLFxuXHRnZXRDdXJyZW50U2NvcGUsXG5cdGxhdGVzdCxcblx0aXRlcmF0b3JTeW1ib2wsXG5cdGlzRHJhZnRhYmxlLFxuXHRjcmVhdGVQcm94eSxcblx0bG9hZFBsdWdpbixcblx0bWFya0NoYW5nZWQsXG5cdFByb3h5VHlwZSxcblx0ZGllLFxuXHRlYWNoXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVNYXBTZXQoKSB7XG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZDogYW55LCBiOiBhbnkpOiBhbnkge1xuXHRcdGV4dGVuZFN0YXRpY3MgPVxuXHRcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG5cdFx0XHQoe19fcHJvdG9fXzogW119IGluc3RhbmNlb2YgQXJyYXkgJiZcblx0XHRcdFx0ZnVuY3Rpb24oZCwgYikge1xuXHRcdFx0XHRcdGQuX19wcm90b19fID0gYlxuXHRcdFx0XHR9KSB8fFxuXHRcdFx0ZnVuY3Rpb24oZCwgYikge1xuXHRcdFx0XHRmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXVxuXHRcdFx0fVxuXHRcdHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpXG5cdH1cblxuXHQvLyBVZ2x5IGhhY2sgdG8gcmVzb2x2ZSAjNTAyIGFuZCBpbmhlcml0IGJ1aWx0IGluIE1hcCAvIFNldFxuXHRmdW5jdGlvbiBfX2V4dGVuZHMoZDogYW55LCBiOiBhbnkpOiBhbnkge1xuXHRcdGV4dGVuZFN0YXRpY3MoZCwgYilcblx0XHRmdW5jdGlvbiBfXyh0aGlzOiBhbnkpOiBhbnkge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvciA9IGRcblx0XHR9XG5cdFx0ZC5wcm90b3R5cGUgPVxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0KChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSksIG5ldyBfXygpKVxuXHR9XG5cblx0Y29uc3QgRHJhZnRNYXAgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG5cdFx0X19leHRlbmRzKERyYWZ0TWFwLCBfc3VwZXIpXG5cdFx0Ly8gQ3JlYXRlIGNsYXNzIG1hbnVhbGx5LCBjYXVzZSAjNTAyXG5cdFx0ZnVuY3Rpb24gRHJhZnRNYXAodGhpczogYW55LCB0YXJnZXQ6IEFueU1hcCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdFx0XHR0aGlzW0RSQUZUX1NUQVRFXSA9IHtcblx0XHRcdFx0dHlwZV86IFByb3h5VHlwZS5NYXAsXG5cdFx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdFx0c2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCkhLFxuXHRcdFx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdFx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHRcdFx0Y29weV86IHVuZGVmaW5lZCxcblx0XHRcdFx0YXNzaWduZWRfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJhc2VfOiB0YXJnZXQsXG5cdFx0XHRcdGRyYWZ0XzogdGhpcyBhcyBhbnksXG5cdFx0XHRcdGlzTWFudWFsXzogZmFsc2UsXG5cdFx0XHRcdHJldm9rZWRfOiBmYWxzZVxuXHRcdFx0fSBhcyBNYXBTdGF0ZVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cdFx0Y29uc3QgcCA9IERyYWZ0TWFwLnByb3RvdHlwZVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIFwic2l6ZVwiLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5zaXplXG5cdFx0XHR9XG5cdFx0XHQvLyBlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdC8vIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdH0pXG5cblx0XHRwLmhhcyA9IGZ1bmN0aW9uKGtleTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5oYXMoa2V5KVxuXHRcdH1cblxuXHRcdHAuc2V0ID0gZnVuY3Rpb24oa2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAoIWxhdGVzdChzdGF0ZSkuaGFzKGtleSkgfHwgbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcblx0XHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIHRydWUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCB0cnVlKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cblx0XHRwLmRlbGV0ZSA9IGZ1bmN0aW9uKGtleTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlTWFwQ29weShzdGF0ZSlcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0aWYgKHN0YXRlLmJhc2VfLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgZmFsc2UpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLmRlbGV0ZShrZXkpXG5cdFx0XHR9XG5cdFx0XHRzdGF0ZS5jb3B5XyEuZGVsZXRlKGtleSlcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0cC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmIChsYXRlc3Qoc3RhdGUpLnNpemUpIHtcblx0XHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8gPSBuZXcgTWFwKClcblx0XHRcdFx0ZWFjaChzdGF0ZS5iYXNlXywga2V5ID0+IHtcblx0XHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIGZhbHNlKVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuY2xlYXIoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHAuZm9yRWFjaCA9IGZ1bmN0aW9uKFxuXHRcdFx0Y2I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSwgc2VsZjogYW55KSA9PiB2b2lkLFxuXHRcdFx0dGhpc0FyZz86IGFueVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGxhdGVzdChzdGF0ZSkuZm9yRWFjaCgoX3ZhbHVlOiBhbnksIGtleTogYW55LCBfbWFwOiBhbnkpID0+IHtcblx0XHRcdFx0Y2IuY2FsbCh0aGlzQXJnLCB0aGlzLmdldChrZXkpLCBrZXksIHRoaXMpXG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHAuZ2V0ID0gZnVuY3Rpb24oa2V5OiBhbnkpOiBhbnkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGNvbnN0IHZhbHVlID0gbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KVxuXHRcdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPT0gc3RhdGUuYmFzZV8uZ2V0KGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8vIGVpdGhlciBhbHJlYWR5IGRyYWZ0ZWQgb3IgcmVhc3NpZ25lZFxuXHRcdFx0fVxuXHRcdFx0Ly8gZGVzcGl0ZSB3aGF0IGl0IGxvb2tzLCB0aGlzIGNyZWF0ZXMgYSBkcmFmdCBvbmx5IG9uY2UsIHNlZSBhYm92ZSBjb25kaXRpb25cblx0XHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkoc3RhdGUuc2NvcGVfLmltbWVyXywgdmFsdWUsIHN0YXRlKVxuXHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRzdGF0ZS5jb3B5XyEuc2V0KGtleSwgZHJhZnQpXG5cdFx0XHRyZXR1cm4gZHJhZnRcblx0XHR9XG5cblx0XHRwLmtleXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkua2V5cygpXG5cdFx0fVxuXG5cdFx0cC52YWx1ZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W2l0ZXJhdG9yU3ltYm9sXTogKCkgPT4gdGhpcy52YWx1ZXMoKSxcblx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRcdFx0XHRcdGlmIChyLmRvbmUpIHJldHVybiByXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldChyLnZhbHVlKVxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGFzIGFueVxuXHRcdH1cblxuXHRcdHAuZW50cmllcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W2FueSwgYW55XT4ge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W2l0ZXJhdG9yU3ltYm9sXTogKCkgPT4gdGhpcy5lbnRyaWVzKCksXG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRpZiAoci5kb25lKSByZXR1cm4gclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZTogW3IudmFsdWUsIHZhbHVlXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBhbnlcblx0XHR9XG5cblx0XHRwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZW50cmllcygpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIERyYWZ0TWFwXG5cdH0pKE1hcClcblxuXHRmdW5jdGlvbiBwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVCB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBuZXcgRHJhZnRNYXAodGFyZ2V0LCBwYXJlbnQpXG5cdH1cblxuXHRmdW5jdGlvbiBwcmVwYXJlTWFwQ29weShzdGF0ZTogTWFwU3RhdGUpIHtcblx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHRzdGF0ZS5hc3NpZ25lZF8gPSBuZXcgTWFwKClcblx0XHRcdHN0YXRlLmNvcHlfID0gbmV3IE1hcChzdGF0ZS5iYXNlXylcblx0XHR9XG5cdH1cblxuXHRjb25zdCBEcmFmdFNldCA9IChmdW5jdGlvbihfc3VwZXIpIHtcblx0XHRfX2V4dGVuZHMoRHJhZnRTZXQsIF9zdXBlcilcblx0XHQvLyBDcmVhdGUgY2xhc3MgbWFudWFsbHksIGNhdXNlICM1MDJcblx0XHRmdW5jdGlvbiBEcmFmdFNldCh0aGlzOiBhbnksIHRhcmdldDogQW55U2V0LCBwYXJlbnQ/OiBJbW1lclN0YXRlKSB7XG5cdFx0XHR0aGlzW0RSQUZUX1NUQVRFXSA9IHtcblx0XHRcdFx0dHlwZV86IFByb3h5VHlwZS5TZXQsXG5cdFx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdFx0c2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCkhLFxuXHRcdFx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdFx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHRcdFx0Y29weV86IHVuZGVmaW5lZCxcblx0XHRcdFx0YmFzZV86IHRhcmdldCxcblx0XHRcdFx0ZHJhZnRfOiB0aGlzLFxuXHRcdFx0XHRkcmFmdHNfOiBuZXcgTWFwKCksXG5cdFx0XHRcdHJldm9rZWRfOiBmYWxzZSxcblx0XHRcdFx0aXNNYW51YWxfOiBmYWxzZVxuXHRcdFx0fSBhcyBTZXRTdGF0ZVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cdFx0Y29uc3QgcCA9IERyYWZ0U2V0LnByb3RvdHlwZVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIFwic2l6ZVwiLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5zaXplXG5cdFx0XHR9XG5cdFx0XHQvLyBlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdH0pXG5cblx0XHRwLmhhcyA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHQvLyBiaXQgb2YgdHJpY2tlcnkgaGVyZSwgdG8gYmUgYWJsZSB0byByZWNvZ25pemUgYm90aCB0aGUgdmFsdWUsIGFuZCB0aGUgZHJhZnQgb2YgaXRzIHZhbHVlXG5cdFx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZS5iYXNlXy5oYXModmFsdWUpXG5cdFx0XHR9XG5cdFx0XHRpZiAoc3RhdGUuY29weV8uaGFzKHZhbHVlKSkgcmV0dXJuIHRydWVcblx0XHRcdGlmIChzdGF0ZS5kcmFmdHNfLmhhcyh2YWx1ZSkgJiYgc3RhdGUuY29weV8uaGFzKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHRwLmFkZCA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmICghdGhpcy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmFkZCh2YWx1ZSlcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXG5cdFx0cC5kZWxldGUgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHtcblx0XHRcdGlmICghdGhpcy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5kZWxldGUodmFsdWUpIHx8XG5cdFx0XHRcdChzdGF0ZS5kcmFmdHNfLmhhcyh2YWx1ZSlcblx0XHRcdFx0XHQ/IHN0YXRlLmNvcHlfIS5kZWxldGUoc3RhdGUuZHJhZnRzXy5nZXQodmFsdWUpKVxuXHRcdFx0XHRcdDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZmFsc2UpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmIChsYXRlc3Qoc3RhdGUpLnNpemUpIHtcblx0XHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuY2xlYXIoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHAudmFsdWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdHJldHVybiBzdGF0ZS5jb3B5XyEudmFsdWVzKClcblx0XHR9XG5cblx0XHRwLmVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W2FueSwgYW55XT4ge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIHN0YXRlLmNvcHlfIS5lbnRyaWVzKClcblx0XHR9XG5cblx0XHRwLmtleXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWVzKClcblx0XHR9XG5cblx0XHRwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWVzKClcblx0XHR9XG5cblx0XHRwLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGNiOiBhbnksIHRoaXNBcmc/OiBhbnkpIHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy52YWx1ZXMoKVxuXHRcdFx0bGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0d2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuXHRcdFx0XHRjYi5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlLCB0aGlzKVxuXHRcdFx0XHRyZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gRHJhZnRTZXRcblx0fSkoU2V0KVxuXG5cdGZ1bmN0aW9uIHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0cmV0dXJuIG5ldyBEcmFmdFNldCh0YXJnZXQsIHBhcmVudClcblx0fVxuXG5cdGZ1bmN0aW9uIHByZXBhcmVTZXRDb3B5KHN0YXRlOiBTZXRTdGF0ZSkge1xuXHRcdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRcdC8vIGNyZWF0ZSBkcmFmdHMgZm9yIGFsbCBlbnRyaWVzIHRvIHByZXNlcnZlIGluc2VydGlvbiBvcmRlclxuXHRcdFx0c3RhdGUuY29weV8gPSBuZXcgU2V0KClcblx0XHRcdHN0YXRlLmJhc2VfLmZvckVhY2godmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAoaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVQcm94eShzdGF0ZS5zY29wZV8uaW1tZXJfLCB2YWx1ZSwgc3RhdGUpXG5cdFx0XHRcdFx0c3RhdGUuZHJhZnRzXy5zZXQodmFsdWUsIGRyYWZ0KVxuXHRcdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQoZHJhZnQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdGUuY29weV8hLmFkZCh2YWx1ZSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhc3NlcnRVbnJldm9rZWQoc3RhdGU6IGFueSAvKkVTNVN0YXRlIHwgTWFwU3RhdGUgfCBTZXRTdGF0ZSovKSB7XG5cdFx0aWYgKHN0YXRlLnJldm9rZWRfKSBkaWUoMywgSlNPTi5zdHJpbmdpZnkobGF0ZXN0KHN0YXRlKSkpXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiTWFwU2V0XCIsIHtwcm94eU1hcF8sIHByb3h5U2V0X30pXG59XG4iLCAiaW1wb3J0IHtlbmFibGVFUzV9IGZyb20gXCIuL2VzNVwiXG5pbXBvcnQge2VuYWJsZU1hcFNldH0gZnJvbSBcIi4vbWFwc2V0XCJcbmltcG9ydCB7ZW5hYmxlUGF0Y2hlc30gZnJvbSBcIi4vcGF0Y2hlc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVBbGxQbHVnaW5zKCkge1xuXHRlbmFibGVFUzUoKVxuXHRlbmFibGVNYXBTZXQoKVxuXHRlbmFibGVQYXRjaGVzKClcbn1cbiIsICJpbXBvcnQge1xuXHRJUHJvZHVjZSxcblx0SVByb2R1Y2VXaXRoUGF0Y2hlcyxcblx0SW1tZXIsXG5cdERyYWZ0LFxuXHRJbW11dGFibGVcbn0gZnJvbSBcIi4vaW50ZXJuYWxcIlxuXG5leHBvcnQge1xuXHREcmFmdCxcblx0SW1tdXRhYmxlLFxuXHRQYXRjaCxcblx0UGF0Y2hMaXN0ZW5lcixcblx0b3JpZ2luYWwsXG5cdGN1cnJlbnQsXG5cdGlzRHJhZnQsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HIGFzIG5vdGhpbmcsXG5cdERSQUZUQUJMRSBhcyBpbW1lcmFibGUsXG5cdGZyZWV6ZVxufSBmcm9tIFwiLi9pbnRlcm5hbFwiXG5cbmNvbnN0IGltbWVyID0gbmV3IEltbWVyKClcblxuLyoqXG4gKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2VcbiAqIHJldHVybiB2YWx1ZSBvZnRlbiBkZXBlbmRzIG9uIHRoZSBiYXNlIHN0YXRlKS4gVGhlIHJlY2lwZSBmdW5jdGlvbiBpc1xuICogZnJlZSB0byBtdXRhdGUgaXRzIGZpcnN0IGFyZ3VtZW50IGhvd2V2ZXIgaXQgd2FudHMuIEFsbCBtdXRhdGlvbnMgYXJlXG4gKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuICpcbiAqIFBhc3Mgb25seSBhIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFwiY3VycmllZCBwcm9kdWNlclwiIHdoaWNoIHJlbGlldmVzIHlvdVxuICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cbiAqXG4gKiBPbmx5IHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyBhcmUgbWFkZSBtdXRhYmxlLiBBbGwgb3RoZXIgb2JqZWN0cyBhcmVcbiAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIF9fYm91bmRfXyB0byBpdHMgYEltbWVyYCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gYmFzZSAtIHRoZSBpbml0aWFsIHN0YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9kdWNlciAtIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBwcm94eSBvZiB0aGUgYmFzZSBzdGF0ZSBhcyBmaXJzdCBhcmd1bWVudCBhbmQgd2hpY2ggY2FuIGJlIGZyZWVseSBtb2RpZmllZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGF0Y2hMaXN0ZW5lciAtIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdGhlIHBhdGNoZXMgcHJvZHVjZWQgaGVyZVxuICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9kdWNlOiBJUHJvZHVjZSA9IGltbWVyLnByb2R1Y2VcbmV4cG9ydCBkZWZhdWx0IHByb2R1Y2VcblxuLyoqXG4gKiBMaWtlIGBwcm9kdWNlYCwgYnV0IGBwcm9kdWNlV2l0aFBhdGNoZXNgIGFsd2F5cyByZXR1cm5zIGEgdHVwbGVcbiAqIFtuZXh0U3RhdGUsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzXSAoaW5zdGVhZCBvZiBqdXN0IHRoZSBuZXh0IHN0YXRlKVxuICovXG5leHBvcnQgY29uc3QgcHJvZHVjZVdpdGhQYXRjaGVzOiBJUHJvZHVjZVdpdGhQYXRjaGVzID0gaW1tZXIucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoXG5cdGltbWVyXG4pXG5cbi8qKlxuICogUGFzcyB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgZnJlZXplIGFsbCBjb3BpZXMgY3JlYXRlZCBieSBJbW1lci5cbiAqXG4gKiBBbHdheXMgZnJlZXplIGJ5IGRlZmF1bHQsIGV2ZW4gaW4gcHJvZHVjdGlvbiBtb2RlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRBdXRvRnJlZXplID0gaW1tZXIuc2V0QXV0b0ZyZWV6ZS5iaW5kKGltbWVyKVxuXG4vKipcbiAqIFBhc3MgdHJ1ZSB0byB1c2UgdGhlIEVTMjAxNSBgUHJveHlgIGNsYXNzIHdoZW4gY3JlYXRpbmcgZHJhZnRzLCB3aGljaCBpc1xuICogYWx3YXlzIGZhc3RlciB0aGFuIHVzaW5nIEVTNSBwcm94aWVzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIGZlYXR1cmUgZGV0ZWN0aW9uIGlzIHVzZWQsIHNvIGNhbGxpbmcgdGhpcyBpcyByYXJlbHkgbmVjZXNzYXJ5LlxuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlUHJveGllcyA9IGltbWVyLnNldFVzZVByb3hpZXMuYmluZChpbW1lcilcblxuLyoqXG4gKiBBcHBseSBhbiBhcnJheSBvZiBJbW1lciBwYXRjaGVzIHRvIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgcHJvZHVjZXIsIHdoaWNoIG1lYW5zIGNvcHktb24td3JpdGUgaXMgaW4gZWZmZWN0LlxuICovXG5leHBvcnQgY29uc3QgYXBwbHlQYXRjaGVzID0gaW1tZXIuYXBwbHlQYXRjaGVzLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogQ3JlYXRlIGFuIEltbWVyIGRyYWZ0IGZyb20gdGhlIGdpdmVuIGJhc2Ugc3RhdGUsIHdoaWNoIG1heSBiZSBhIGRyYWZ0IGl0c2VsZi5cbiAqIFRoZSBkcmFmdCBjYW4gYmUgbW9kaWZpZWQgdW50aWwgeW91IGZpbmFsaXplIGl0IHdpdGggdGhlIGBmaW5pc2hEcmFmdGAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVEcmFmdCA9IGltbWVyLmNyZWF0ZURyYWZ0LmJpbmQoaW1tZXIpXG5cbi8qKlxuICogRmluYWxpemUgYW4gSW1tZXIgZHJhZnQgZnJvbSBhIGBjcmVhdGVEcmFmdGAgY2FsbCwgcmV0dXJuaW5nIHRoZSBiYXNlIHN0YXRlXG4gKiAoaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUpIG9yIGEgbW9kaWZpZWQgY29weS4gVGhlIGRyYWZ0IG11c3QgKm5vdCogYmVcbiAqIG11dGF0ZWQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBQYXNzIGEgZnVuY3Rpb24gYXMgdGhlIDJuZCBhcmd1bWVudCB0byBnZW5lcmF0ZSBJbW1lciBwYXRjaGVzIGJhc2VkIG9uIHRoZVxuICogY2hhbmdlcyB0aGF0IHdlcmUgbWFkZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmlzaERyYWZ0ID0gaW1tZXIuZmluaXNoRHJhZnQuYmluZChpbW1lcilcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbm8tb3AsIGJ1dCBjYW4gYmUgdXNlZCB0byBjYXN0IGFuIGltbXV0YWJsZSB0eXBlXG4gKiB0byBhbiBkcmFmdCB0eXBlIGFuZCBtYWtlIFR5cGVTY3JpcHQgaGFwcHlcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3REcmFmdDxUPih2YWx1ZTogVCk6IERyYWZ0PFQ+IHtcblx0cmV0dXJuIHZhbHVlIGFzIGFueVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYSBuby1vcCwgYnV0IGNhbiBiZSB1c2VkIHRvIGNhc3QgYSBtdXRhYmxlIHR5cGVcbiAqIHRvIGFuIGltbXV0YWJsZSB0eXBlIGFuZCBtYWtlIFR5cGVTY3JpcHQgaGFwcHlcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdEltbXV0YWJsZTxUPih2YWx1ZTogVCk6IEltbXV0YWJsZTxUPiB7XG5cdHJldHVybiB2YWx1ZSBhcyBhbnlcbn1cblxuZXhwb3J0IHtJbW1lcn1cblxuZXhwb3J0IHtlbmFibGVFUzV9IGZyb20gXCIuL3BsdWdpbnMvZXM1XCJcbmV4cG9ydCB7ZW5hYmxlUGF0Y2hlc30gZnJvbSBcIi4vcGx1Z2lucy9wYXRjaGVzXCJcbmV4cG9ydCB7ZW5hYmxlTWFwU2V0fSBmcm9tIFwiLi9wbHVnaW5zL21hcHNldFwiXG5leHBvcnQge2VuYWJsZUFsbFBsdWdpbnN9IGZyb20gXCIuL3BsdWdpbnMvYWxsXCJcbiIsICIvLyBTaG91bGQgYmUgbm8gaW1wb3J0cyBoZXJlIVxuXG4vLyBTb21lIHRoaW5ncyB0aGF0IHNob3VsZCBiZSBldmFsdWF0ZWQgYmVmb3JlIGFsbCBlbHNlLi4uXG5cbi8vIFdlIG9ubHkgd2FudCB0byBrbm93IGlmIG5vbi1wb2x5ZmlsbGVkIHN5bWJvbHMgYXJlIGF2YWlsYWJsZVxuY29uc3QgaGFzU3ltYm9sID1cblx0dHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgU3ltYm9sKFwieFwiKSA9PT0gXCJzeW1ib2xcIlxuZXhwb3J0IGNvbnN0IGhhc01hcCA9IHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCJcbmV4cG9ydCBjb25zdCBoYXNTZXQgPSB0eXBlb2YgU2V0ICE9PSBcInVuZGVmaW5lZFwiXG5leHBvcnQgY29uc3QgaGFzUHJveGllcyA9XG5cdHR5cGVvZiBQcm94eSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR0eXBlb2YgUHJveHkucmV2b2NhYmxlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiXG5cbi8qKlxuICogVGhlIHNlbnRpbmVsIHZhbHVlIHJldHVybmVkIGJ5IHByb2R1Y2VycyB0byByZXBsYWNlIHRoZSBkcmFmdCB3aXRoIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE5PVEhJTkc6IE5vdGhpbmcgPSBoYXNTeW1ib2xcblx0PyBTeW1ib2wuZm9yKFwiaW1tZXItbm90aGluZ1wiKVxuXHQ6ICh7W1wiaW1tZXItbm90aGluZ1wiXTogdHJ1ZX0gYXMgYW55KVxuXG4vKipcbiAqIFRvIGxldCBJbW1lciB0cmVhdCB5b3VyIGNsYXNzIGluc3RhbmNlcyBhcyBwbGFpbiBpbW11dGFibGUgb2JqZWN0c1xuICogKGFsYmVpdCB3aXRoIGEgY3VzdG9tIHByb3RvdHlwZSksIHlvdSBtdXN0IGRlZmluZSBlaXRoZXIgYW4gaW5zdGFuY2UgcHJvcGVydHlcbiAqIG9yIGEgc3RhdGljIHByb3BlcnR5IG9uIGVhY2ggb2YgeW91ciBjdXN0b20gY2xhc3Nlcy5cbiAqXG4gKiBPdGhlcndpc2UsIHlvdXIgY2xhc3MgaW5zdGFuY2Ugd2lsbCBuZXZlciBiZSBkcmFmdGVkLCB3aGljaCBtZWFucyBpdCB3b24ndCBiZVxuICogc2FmZSB0byBtdXRhdGUgaW4gYSBwcm9kdWNlIGNhbGxiYWNrLlxuICovXG5leHBvcnQgY29uc3QgRFJBRlRBQkxFOiB1bmlxdWUgc3ltYm9sID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLWRyYWZ0YWJsZVwiKVxuXHQ6IChcIl9fJGltbWVyX2RyYWZ0YWJsZVwiIGFzIGFueSlcblxuZXhwb3J0IGNvbnN0IERSQUZUX1NUQVRFOiB1bmlxdWUgc3ltYm9sID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLXN0YXRlXCIpXG5cdDogKFwiX18kaW1tZXJfc3RhdGVcIiBhcyBhbnkpXG5cbi8vIEV2ZW4gYSBwb2x5ZmlsbGVkIFN5bWJvbCBtaWdodCBwcm92aWRlIFN5bWJvbC5pdGVyYXRvclxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yU3ltYm9sOiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IpIHx8IChcIkBAaXRlcmF0b3JcIiBhcyBhbnkpXG5cbi8qKiBVc2UgYSBjbGFzcyB0eXBlIGZvciBgbm90aGluZ2Agc28gaXRzIHR5cGUgaXMgdW5pcXVlICovXG5leHBvcnQgY2xhc3MgTm90aGluZyB7XG5cdC8vIFRoaXMgbGV0cyB1cyBkbyBgRXhjbHVkZTxULCBOb3RoaW5nPmBcblx0Ly8gQHRzLWlnbm9yZVxuXHRwcml2YXRlIF8hOiB1bmlxdWUgc3ltYm9sXG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogU3RyaW5nKGkpO1xufSIsICJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gXCIuL2RlZmluZVByb3BlcnR5LmpzXCI7XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcbiAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlO1xuICAgIH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuICBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuICAgIHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcbiAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7XG4gICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGU7XG59IiwgImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDInO1xuXG4vKipcbiAqIEFkYXB0ZWQgZnJvbSBSZWFjdDogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3NoYXJlZC9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlLmpzXG4gKlxuICogRG8gbm90IHJlcXVpcmUgdGhpcyBtb2R1bGUgZGlyZWN0bHkhIFVzZSBub3JtYWwgdGhyb3cgZXJyb3IgY2FsbHMuIFRoZXNlIG1lc3NhZ2VzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBlcnJvciBjb2Rlc1xuICogZHVyaW5nIGJ1aWxkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0UHJvZEVycm9yTWVzc2FnZShjb2RlKSB7XG4gIHJldHVybiBcIk1pbmlmaWVkIFJlZHV4IGVycm9yICNcIiArIGNvZGUgKyBcIjsgdmlzaXQgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvRXJyb3JzP2NvZGU9XCIgKyBjb2RlICsgXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgXCIgKyAndXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycy4gJztcbn1cblxuLy8gSW5saW5lZCB2ZXJzaW9uIG9mIHRoZSBgc3ltYm9sLW9ic2VydmFibGVgIHBvbHlmaWxsXG52YXIgJCRvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgJ0BAb2JzZXJ2YWJsZSc7XG59KSgpO1xuXG4vKipcbiAqIFRoZXNlIGFyZSBwcml2YXRlIGFjdGlvbiB0eXBlcyByZXNlcnZlZCBieSBSZWR1eC5cbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqIERvIG5vdCByZWZlcmVuY2UgdGhlc2UgYWN0aW9uIHR5cGVzIGRpcmVjdGx5IGluIHlvdXIgY29kZS5cbiAqL1xudmFyIHJhbmRvbVN0cmluZyA9IGZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xufTtcblxudmFyIEFjdGlvblR5cGVzID0ge1xuICBJTklUOiBcIkBAcmVkdXgvSU5JVFwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFJFUExBQ0U6IFwiQEByZWR1eC9SRVBMQUNFXCIgKyByYW5kb21TdHJpbmcoKSxcbiAgUFJPQkVfVU5LTk9XTl9BQ1RJT046IGZ1bmN0aW9uIFBST0JFX1VOS05PV05fQUNUSU9OKCkge1xuICAgIHJldHVybiBcIkBAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05cIiArIHJhbmRvbVN0cmluZygpO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvYmogVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgdmFyIHByb3RvID0gb2JqO1xuXG4gIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pICE9PSBudWxsKSB7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBwcm90bztcbn1cblxuLy8gSW5saW5lZCAvIHNob3J0ZW5lZCB2ZXJzaW9uIG9mIGBraW5kT2ZgIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQva2luZC1vZlxuZnVuY3Rpb24gbWluaUtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gdm9pZCAwKSByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIGlmICh2YWwgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuICdhcnJheSc7XG4gIGlmIChpc0RhdGUodmFsKSkgcmV0dXJuICdkYXRlJztcbiAgaWYgKGlzRXJyb3IodmFsKSkgcmV0dXJuICdlcnJvcic7XG4gIHZhciBjb25zdHJ1Y3Rvck5hbWUgPSBjdG9yTmFtZSh2YWwpO1xuXG4gIHN3aXRjaCAoY29uc3RydWN0b3JOYW1lKSB7XG4gICAgY2FzZSAnU3ltYm9sJzpcbiAgICBjYXNlICdQcm9taXNlJzpcbiAgICBjYXNlICdXZWFrTWFwJzpcbiAgICBjYXNlICdXZWFrU2V0JzpcbiAgICBjYXNlICdNYXAnOlxuICAgIGNhc2UgJ1NldCc6XG4gICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xuICB9IC8vIG90aGVyXG5cblxuICByZXR1cm4gdHlwZS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJycpO1xufVxuXG5mdW5jdGlvbiBjdG9yTmFtZSh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwuY29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgPyB2YWwuY29uc3RydWN0b3IubmFtZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3IodmFsKSB7XG4gIHJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgdmFsLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIHZhbC5jb25zdHJ1Y3RvciAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLnN0YWNrVHJhY2VMaW1pdCA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIHZhbC50b0RhdGVTdHJpbmcgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbC5nZXREYXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuc2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICB2YXIgdHlwZU9mVmFsID0gdHlwZW9mIHZhbDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHR5cGVPZlZhbCA9IG1pbmlLaW5kT2YodmFsKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlT2ZWYWw7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiAqKldlIHJlY29tbWVuZCB1c2luZyB0aGUgYGNvbmZpZ3VyZVN0b3JlYCBtZXRob2RcbiAqIG9mIHRoZSBgQHJlZHV4anMvdG9vbGtpdGAgcGFja2FnZSoqLCB3aGljaCByZXBsYWNlcyBgY3JlYXRlU3RvcmVgLlxuICpcbiAqIFJlZHV4IFRvb2xraXQgaXMgb3VyIHJlY29tbWVuZGVkIGFwcHJvYWNoIGZvciB3cml0aW5nIFJlZHV4IGxvZ2ljIHRvZGF5LFxuICogaW5jbHVkaW5nIHN0b3JlIHNldHVwLCByZWR1Y2VycywgZGF0YSBmZXRjaGluZywgYW5kIG1vcmUuXG4gKlxuICogKipGb3IgbW9yZSBkZXRhaWxzLCBwbGVhc2UgcmVhZCB0aGlzIFJlZHV4IGRvY3MgcGFnZToqKlxuICogKipodHRwczovL3JlZHV4LmpzLm9yZy9pbnRyb2R1Y3Rpb24vd2h5LXJ0ay1pcy1yZWR1eC10b2RheSoqXG4gKlxuICogYGNvbmZpZ3VyZVN0b3JlYCBmcm9tIFJlZHV4IFRvb2xraXQgaXMgYW4gaW1wcm92ZWQgdmVyc2lvbiBvZiBgY3JlYXRlU3RvcmVgIHRoYXRcbiAqIHNpbXBsaWZpZXMgc2V0dXAgYW5kIGhlbHBzIGF2b2lkIGNvbW1vbiBidWdzLlxuICpcbiAqIFlvdSBzaG91bGQgbm90IGJlIHVzaW5nIHRoZSBgcmVkdXhgIGNvcmUgcGFja2FnZSBieSBpdHNlbGYgdG9kYXksIGV4Y2VwdCBmb3IgbGVhcm5pbmcgcHVycG9zZXMuXG4gKiBUaGUgYGNyZWF0ZVN0b3JlYCBtZXRob2QgZnJvbSB0aGUgY29yZSBgcmVkdXhgIHBhY2thZ2Ugd2lsbCBub3QgYmUgcmVtb3ZlZCwgYnV0IHdlIGVuY291cmFnZVxuICogYWxsIHVzZXJzIHRvIG1pZ3JhdGUgdG8gdXNpbmcgUmVkdXggVG9vbGtpdCBmb3IgYWxsIFJlZHV4IGNvZGUuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gdXNlIGBjcmVhdGVTdG9yZWAgd2l0aG91dCB0aGlzIHZpc3VhbCBkZXByZWNhdGlvbiB3YXJuaW5nLCB1c2VcbiAqIHRoZSBgbGVnYWN5X2NyZWF0ZVN0b3JlYCBpbXBvcnQgaW5zdGVhZDpcbiAqXG4gKiBgaW1wb3J0IHsgbGVnYWN5X2NyZWF0ZVN0b3JlIGFzIGNyZWF0ZVN0b3JlfSBmcm9tICdyZWR1eCdgXG4gKlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICB2YXIgX3JlZjI7XG5cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgwKSA6ICdJdCBsb29rcyBsaWtlIHlvdSBhcmUgcGFzc2luZyBzZXZlcmFsIHN0b3JlIGVuaGFuY2VycyB0byAnICsgJ2NyZWF0ZVN0b3JlKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gSW5zdGVhZCwgY29tcG9zZSB0aGVtICcgKyAndG9nZXRoZXIgdG8gYSBzaW5nbGUgZnVuY3Rpb24uIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNjcmVhdGluZy1hLXN0b3JlLXdpdGgtZW5oYW5jZXJzIGZvciBhbiBleGFtcGxlLicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZW5oYW5jZXIgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMSkgOiBcIkV4cGVjdGVkIHRoZSBlbmhhbmNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKGVuaGFuY2VyKSArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5oYW5jZXIoY3JlYXRlU3RvcmUpKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVkdWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIpIDogXCJFeHBlY3RlZCB0aGUgcm9vdCByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YocmVkdWNlcikgKyBcIidcIik7XG4gIH1cblxuICB2YXIgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XG4gIHZhciBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoaXMgbWFrZXMgYSBzaGFsbG93IGNvcHkgb2YgY3VycmVudExpc3RlbmVycyBzbyB3ZSBjYW4gdXNlXG4gICAqIG5leHRMaXN0ZW5lcnMgYXMgYSB0ZW1wb3JhcnkgbGlzdCB3aGlsZSBkaXNwYXRjaGluZy5cbiAgICpcbiAgICogVGhpcyBwcmV2ZW50cyBhbnkgYnVncyBhcm91bmQgY29uc3VtZXJzIGNhbGxpbmdcbiAgICogc3Vic2NyaWJlL3Vuc3Vic2NyaWJlIGluIHRoZSBtaWRkbGUgb2YgYSBkaXNwYXRjaC5cbiAgICovXG5cbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcbiAgICBpZiAobmV4dExpc3RlbmVycyA9PT0gY3VycmVudExpc3RlbmVycykge1xuICAgICAgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuZ2V0U3RhdGUoKSB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuICcgKyAnVGhlIHJlZHVjZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHN0YXRlIGFzIGFuIGFyZ3VtZW50LiAnICsgJ1Bhc3MgaXQgZG93biBmcm9tIHRoZSB0b3AgcmVkdWNlciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSB0aGUgc3RvcmUuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuICAvKipcbiAgICogQWRkcyBhIGNoYW5nZSBsaXN0ZW5lci4gSXQgd2lsbCBiZSBjYWxsZWQgYW55IHRpbWUgYW4gYWN0aW9uIGlzIGRpc3BhdGNoZWQsXG4gICAqIGFuZCBzb21lIHBhcnQgb2YgdGhlIHN0YXRlIHRyZWUgbWF5IHBvdGVudGlhbGx5IGhhdmUgY2hhbmdlZC4gWW91IG1heSB0aGVuXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBZb3UgbWF5IGNhbGwgYGRpc3BhdGNoKClgIGZyb20gYSBjaGFuZ2UgbGlzdGVuZXIsIHdpdGggdGhlIGZvbGxvd2luZ1xuICAgKiBjYXZlYXRzOlxuICAgKlxuICAgKiAxLiBUaGUgc3Vic2NyaXB0aW9ucyBhcmUgc25hcHNob3R0ZWQganVzdCBiZWZvcmUgZXZlcnkgYGRpc3BhdGNoKClgIGNhbGwuXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xuICAgKiB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIGBkaXNwYXRjaCgpYCB0aGF0IGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cbiAgICogSG93ZXZlciwgdGhlIG5leHQgYGRpc3BhdGNoKClgIGNhbGwsIHdoZXRoZXIgbmVzdGVkIG9yIG5vdCwgd2lsbCB1c2UgYSBtb3JlXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXG4gICAqXG4gICAqIDIuIFRoZSBsaXN0ZW5lciBzaG91bGQgbm90IGV4cGVjdCB0byBzZWUgYWxsIHN0YXRlIGNoYW5nZXMsIGFzIHRoZSBzdGF0ZVxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxuICAgKiB0aGUgbGlzdGVuZXIgaXMgY2FsbGVkLiBJdCBpcywgaG93ZXZlciwgZ3VhcmFudGVlZCB0aGF0IGFsbCBzdWJzY3JpYmVyc1xuICAgKiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgYGRpc3BhdGNoKClgIHN0YXJ0ZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0XG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gZXZlcnkgZGlzcGF0Y2guXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNCkgOiBcIkV4cGVjdGVkIHRoZSBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKGxpc3RlbmVyKSArIFwiJ1wiKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNSkgOiAnWW91IG1heSBub3QgY2FsbCBzdG9yZS5zdWJzY3JpYmUoKSB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuICcgKyAnSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgbm90aWZpZWQgYWZ0ZXIgdGhlIHN0b3JlIGhhcyBiZWVuIHVwZGF0ZWQsIHN1YnNjcmliZSBmcm9tIGEgJyArICdjb21wb25lbnQgYW5kIGludm9rZSBzdG9yZS5nZXRTdGF0ZSgpIGluIHRoZSBjYWxsYmFjayB0byBhY2Nlc3MgdGhlIGxhdGVzdCBzdGF0ZS4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgfVxuXG4gICAgdmFyIGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg2KSA6ICdZb3UgbWF5IG5vdCB1bnN1YnNjcmliZSBmcm9tIGEgc3RvcmUgbGlzdGVuZXIgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1NlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy4nKTtcbiAgICAgIH1cblxuICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgICB2YXIgaW5kZXggPSBuZXh0TGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgY3VycmVudExpc3RlbmVycyA9IG51bGw7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24uIEl0IGlzIHRoZSBvbmx5IHdheSB0byB0cmlnZ2VyIGEgc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXG4gICAqIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGdpdmVuIGBhY3Rpb25gLiBJdHMgcmV0dXJuIHZhbHVlIHdpbGxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUgKipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxuICAgKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xuICAgKiB3cmFwIHlvdXIgc3RvcmUgY3JlYXRpbmcgZnVuY3Rpb24gaW50byB0aGUgY29ycmVzcG9uZGluZyBtaWRkbGV3YXJlLiBGb3JcbiAgICogZXhhbXBsZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRoZVxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcgXHUyMDFDd2hhdCBjaGFuZ2VkXHUyMDFELiBJdCBpc1xuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxuICAgKiBzZXNzaW9ucywgb3IgdXNlIHRoZSB0aW1lIHRyYXZlbGxpbmcgYHJlZHV4LWRldnRvb2xzYC4gQW4gYWN0aW9uIG11c3QgaGF2ZVxuICAgKiBhIGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2VcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFjdGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCwgaWYgeW91IHVzZSBhIGN1c3RvbSBtaWRkbGV3YXJlLCBpdCBtYXkgd3JhcCBgZGlzcGF0Y2goKWAgdG9cbiAgICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4gYXdhaXQpLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg3KSA6IFwiQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIEluc3RlYWQsIHRoZSBhY3R1YWwgdHlwZSB3YXM6ICdcIiArIGtpbmRPZihhY3Rpb24pICsgXCInLiBZb3UgbWF5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUgdG8geW91ciBzdG9yZSBzZXR1cCB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgb3RoZXIgdmFsdWVzLCBzdWNoIGFzICdyZWR1eC10aHVuaycgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIGZ1bmN0aW9ucy4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI21pZGRsZXdhcmUgYW5kIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC02LWFzeW5jLWxvZ2ljI3VzaW5nLXRoZS1yZWR1eC10aHVuay1taWRkbGV3YXJlIGZvciBleGFtcGxlcy5cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDgpIDogJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcInR5cGVcIiBwcm9wZXJ0eS4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYW4gYWN0aW9uIHR5cGUgc3RyaW5nIGNvbnN0YW50LicpO1xuICAgIH1cblxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5KSA6ICdSZWR1Y2VycyBtYXkgbm90IGRpc3BhdGNoIGFjdGlvbnMuJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xuICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfVxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIHJlZHVjZXIgY3VycmVudGx5IHVzZWQgYnkgdGhlIHN0b3JlIHRvIGNhbGN1bGF0ZSB0aGUgc3RhdGUuXG4gICAqXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cbiAgICogbG9hZCBzb21lIG9mIHRoZSByZWR1Y2VycyBkeW5hbWljYWxseS4gWW91IG1pZ2h0IGFsc28gbmVlZCB0aGlzIGlmIHlvdVxuICAgKiBpbXBsZW1lbnQgYSBob3QgcmVsb2FkaW5nIG1lY2hhbmlzbSBmb3IgUmVkdXguXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHRSZWR1Y2VyIFRoZSByZWR1Y2VyIGZvciB0aGUgc3RvcmUgdG8gdXNlIGluc3RlYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0UmVkdWNlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTApIDogXCJFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihuZXh0UmVkdWNlcikpO1xuICAgIH1cblxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7IC8vIFRoaXMgYWN0aW9uIGhhcyBhIHNpbWlsaWFyIGVmZmVjdCB0byBBY3Rpb25UeXBlcy5JTklULlxuICAgIC8vIEFueSByZWR1Y2VycyB0aGF0IGV4aXN0ZWQgaW4gYm90aCB0aGUgbmV3IGFuZCBvbGQgcm9vdFJlZHVjZXJcbiAgICAvLyB3aWxsIHJlY2VpdmUgdGhlIHByZXZpb3VzIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAgIC8vIHRoZSBuZXcgc3RhdGUgdHJlZSB3aXRoIGFueSByZWxldmFudCBkYXRhIGZyb20gdGhlIG9sZCBvbmUuXG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRVBMQUNFXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgb2JzZXJ2YWJsZSBwcm9wb3NhbDpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgcmV0dXJuIF9yZWYgPSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlciBBbnkgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb2JzZXJ2ZXIuXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXG4gICAgICAgKiBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIGZyb20gdGhlIHN0b3JlLCBhbmQgcHJldmVudCBmdXJ0aGVyXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAqL1xuICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMSkgOiBcIkV4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2Yob2JzZXJ2ZXIpICsgXCInXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBvdXRlclN1YnNjcmliZShvYnNlcnZlU3RhdGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sIF9yZWZbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIF9yZWY7XG4gIH0gLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFwiSU5JVFwiIGFjdGlvbiBpcyBkaXNwYXRjaGVkIHNvIHRoYXQgZXZlcnlcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWlyIGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXG5cblxuICBkaXNwYXRjaCh7XG4gICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICB9KTtcbiAgcmV0dXJuIF9yZWYyID0ge1xuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZSxcbiAgICBnZXRTdGF0ZTogZ2V0U3RhdGUsXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXG4gIH0sIF9yZWYyWyQkb2JzZXJ2YWJsZV0gPSBvYnNlcnZhYmxlLCBfcmVmMjtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgYGNvbmZpZ3VyZVN0b3JlYCBmcm9tIHRoZVxuICogYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYDpcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIFRoZSBvbmx5IHdheSB0byBjaGFuZ2UgdGhlIGRhdGEgaW4gdGhlIHN0b3JlIGlzIHRvIGNhbGwgYGRpc3BhdGNoKClgIG9uIGl0LlxuICpcbiAqIFRoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHN0b3JlIGluIHlvdXIgYXBwLiBUbyBzcGVjaWZ5IGhvdyBkaWZmZXJlbnRcbiAqIHBhcnRzIG9mIHRoZSBzdGF0ZSB0cmVlIHJlc3BvbmQgdG8gYWN0aW9ucywgeW91IG1heSBjb21iaW5lIHNldmVyYWwgcmVkdWNlcnNcbiAqIGludG8gYSBzaW5nbGUgcmVkdWNlciBmdW5jdGlvbiBieSB1c2luZyBgY29tYmluZVJlZHVjZXJzYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWR1Y2VyIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXh0IHN0YXRlIHRyZWUsIGdpdmVuXG4gKiB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgYWN0aW9uIHRvIGhhbmRsZS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gW3ByZWxvYWRlZFN0YXRlXSBUaGUgaW5pdGlhbCBzdGF0ZS4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAqIHRvIGh5ZHJhdGUgdGhlIHN0YXRlIGZyb20gdGhlIHNlcnZlciBpbiB1bml2ZXJzYWwgYXBwcywgb3IgdG8gcmVzdG9yZSBhXG4gKiBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgdXNlciBzZXNzaW9uLlxuICogSWYgeW91IHVzZSBgY29tYmluZVJlZHVjZXJzYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXIgZnVuY3Rpb24sIHRoaXMgbXVzdCBiZVxuICogYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgYGNvbWJpbmVSZWR1Y2Vyc2Aga2V5cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZW5oYW5jZXJdIFRoZSBzdG9yZSBlbmhhbmNlci4gWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXRcbiAqIHRvIGVuaGFuY2UgdGhlIHN0b3JlIHdpdGggdGhpcmQtcGFydHkgY2FwYWJpbGl0aWVzIHN1Y2ggYXMgbWlkZGxld2FyZSxcbiAqIHRpbWUgdHJhdmVsLCBwZXJzaXN0ZW5jZSwgZXRjLiBUaGUgb25seSBzdG9yZSBlbmhhbmNlciB0aGF0IHNoaXBzIHdpdGggUmVkdXhcbiAqIGlzIGBhcHBseU1pZGRsZXdhcmUoKWAuXG4gKlxuICogQHJldHVybnMge1N0b3JlfSBBIFJlZHV4IHN0b3JlIHRoYXQgbGV0cyB5b3UgcmVhZCB0aGUgc3RhdGUsIGRpc3BhdGNoIGFjdGlvbnNcbiAqIGFuZCBzdWJzY3JpYmUgdG8gY2hhbmdlcy5cbiAqL1xuXG52YXIgbGVnYWN5X2NyZWF0ZVN0b3JlID0gY3JlYXRlU3RvcmU7XG5cbi8qKlxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cblxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXG4gICAgLy8gXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1wiIGluIHlvdXIgY29uc29sZSxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxufVxuXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLklOSVQgPyAncHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlJyA6ICdwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlcic7XG5cbiAgaWYgKHJlZHVjZXJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkICcgKyAndG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLic7XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXRTdGF0ZSkpIHtcbiAgICByZXR1cm4gXCJUaGUgXCIgKyBhcmd1bWVudE5hbWUgKyBcIiBoYXMgdW5leHBlY3RlZCB0eXBlIG9mIFxcXCJcIiArIGtpbmRPZihpbnB1dFN0YXRlKSArIFwiXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBcIiArIChcImtleXM6IFxcXCJcIiArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgXCJcXFwiXCIpO1xuICB9XG5cbiAgdmFyIHVuZXhwZWN0ZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTdGF0ZSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xuICB9KTtcbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xuICB9KTtcbiAgaWYgKGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZXMuUkVQTEFDRSkgcmV0dXJuO1xuXG4gIGlmICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFwiVW5leHBlY3RlZCBcIiArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgXCIgXCIgKyAoXCJcXFwiXCIgKyB1bmV4cGVjdGVkS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIiBmb3VuZCBpbiBcIiArIGFyZ3VtZW50TmFtZSArIFwiLiBcIikgKyBcIkV4cGVjdGVkIHRvIGZpbmQgb25lIG9mIHRoZSBrbm93biByZWR1Y2VyIGtleXMgaW5zdGVhZDogXCIgKyAoXCJcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIi4gVW5leHBlY3RlZCBrZXlzIHdpbGwgYmUgaWdub3JlZC5cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0UmVkdWNlclNoYXBlKHJlZHVjZXJzKSB7XG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTklUXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEyKSA6IFwiVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gXCIgKyBcIklmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBcIiArIFwiZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBcIiArIFwibm90IGJlIHVuZGVmaW5lZC4gSWYgeW91IGRvbid0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgXCIgKyBcInlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVkdWNlcih1bmRlZmluZWQsIHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlBST0JFX1VOS05PV05fQUNUSU9OKClcbiAgICB9KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEzKSA6IFwiVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gXCIgKyAoXCJEb24ndCB0cnkgdG8gaGFuZGxlICdcIiArIEFjdGlvblR5cGVzLklOSVQgKyBcIicgb3Igb3RoZXIgYWN0aW9ucyBpbiBcXFwicmVkdXgvKlxcXCIgXCIpICsgXCJuYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSBcIiArIFwiY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgXCIgKyBcImluIHdoaWNoIGNhc2UgeW91IG11c3QgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLCByZWdhcmRsZXNzIG9mIHRoZSBcIiArIFwiYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuXCIpO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxuICogcmVkdWNlciBmdW5jdGlvbi4gSXQgd2lsbCBjYWxsIGV2ZXJ5IGNoaWxkIHJlZHVjZXIsIGFuZCBnYXRoZXIgdGhlaXIgcmVzdWx0c1xuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtleXMgY29ycmVzcG9uZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxuICogaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXMgcmVkdWNlcnNgIHN5bnRheC4gVGhlIHJlZHVjZXJzIG1heSBuZXZlciByZXR1cm5cbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVhZCwgdGhleSBzaG91bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxuICogdW5yZWNvZ25pemVkIGFjdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXG4gKiBwYXNzZWQgb2JqZWN0LCBhbmQgYnVpbGRzIGEgc3RhdGUgb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUuXG4gKi9cblxuXG5mdW5jdGlvbiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgZmluYWxSZWR1Y2VycyA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcmVkdWNlcktleXNbaV07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3YXJuaW5nKFwiTm8gcmVkdWNlciBwcm92aWRlZCBmb3Iga2V5IFxcXCJcIiArIGtleSArIFwiXFxcIlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZpbmFsUmVkdWNlcnNba2V5XSA9IHJlZHVjZXJzW2tleV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJzKTsgLy8gVGhpcyBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB3YXJuIGFib3V0IHRoZSBzYW1lXG4gIC8vIGtleXMgbXVsdGlwbGUgdGltZXMuXG5cbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xuICB9XG5cbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG5cbiAgdHJ5IHtcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICAgIHN0YXRlID0ge307XG4gICAgfVxuXG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciB3YXJuaW5nTWVzc2FnZSA9IGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2Uoc3RhdGUsIGZpbmFsUmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKTtcblxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2tleSA9IGZpbmFsUmVkdWNlcktleXNbX2ldO1xuICAgICAgdmFyIHJlZHVjZXIgPSBmaW5hbFJlZHVjZXJzW19rZXldO1xuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcbiAgICAgIHZhciBuZXh0U3RhdGVGb3JLZXkgPSByZWR1Y2VyKHByZXZpb3VzU3RhdGVGb3JLZXksIGFjdGlvbik7XG5cbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YXIgYWN0aW9uVHlwZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTQpIDogXCJXaGVuIGNhbGxlZCB3aXRoIGFuIGFjdGlvbiBvZiB0eXBlIFwiICsgKGFjdGlvblR5cGUgPyBcIlxcXCJcIiArIFN0cmluZyhhY3Rpb25UeXBlKSArIFwiXFxcIlwiIDogJyh1bmtub3duIHR5cGUpJykgKyBcIiwgdGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcXFwiXCIgKyBfa2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZC4gXCIgKyBcIlRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gXCIgKyBcIklmIHlvdSB3YW50IHRoaXMgcmVkdWNlciB0byBob2xkIG5vIHZhbHVlLCB5b3UgY2FuIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xuICAgICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgbmV4dFN0YXRlRm9yS2V5ICE9PSBwcmV2aW91c1N0YXRlRm9yS2V5O1xuICAgIH1cblxuICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoO1xuICAgIHJldHVybiBoYXNDaGFuZ2VkID8gbmV4dFN0YXRlIDogc3RhdGU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoKGFjdGlvbkNyZWF0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG4vKipcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvbiBjcmVhdG9ycywgaW50byBhbiBvYmplY3Qgd2l0aCB0aGVcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcbiAqIG1heSBiZSBpbnZva2VkIGRpcmVjdGx5LiBUaGlzIGlzIGp1c3QgYSBjb252ZW5pZW5jZSBtZXRob2QsIGFzIHlvdSBjYW4gY2FsbFxuICogYHN0b3JlLmRpc3BhdGNoKE15QWN0aW9uQ3JlYXRvcnMuZG9Tb21ldGhpbmcoKSlgIHlvdXJzZWxmIGp1c3QgZmluZS5cbiAqXG4gKiBGb3IgY29udmVuaWVuY2UsIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGFjdGlvbiBjcmVhdG9yIGFzIHRoZSBmaXJzdCBhcmd1bWVudCxcbiAqIGFuZCBnZXQgYSBkaXNwYXRjaCB3cmFwcGVkIGZ1bmN0aW9uIGluIHJldHVybi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXG4gKiBzeW50YXguIFlvdSBtYXkgYWxzbyBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XG4gKiBzdG9yZS5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxuICogZXZlcnkgYWN0aW9uIGNyZWF0b3Igd3JhcHBlZCBpbnRvIHRoZSBgZGlzcGF0Y2hgIGNhbGwuIElmIHlvdSBwYXNzZWQgYVxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgYSBzaW5nbGVcbiAqIGZ1bmN0aW9uLlxuICovXG5cblxuZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3JzKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCkge1xuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE2KSA6IFwiYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBidXQgaW5zdGVhZCByZWNlaXZlZDogJ1wiICsga2luZE9mKGFjdGlvbkNyZWF0b3JzKSArIFwiJy4gXCIgKyBcIkRpZCB5b3Ugd3JpdGUgXFxcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIiBpbnN0ZWFkIG9mIFxcXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIj9cIik7XG4gIH1cblxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBhY3Rpb25DcmVhdG9ycykge1xuICAgIHZhciBhY3Rpb25DcmVhdG9yID0gYWN0aW9uQ3JlYXRvcnNba2V5XTtcblxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBib3VuZEFjdGlvbkNyZWF0b3JzO1xufVxuXG4vKipcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcbiAqIHRoZSByZXN1bHRpbmcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiBvYnRhaW5lZCBieSBjb21wb3NpbmcgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uc1xuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxuICovXG5mdW5jdGlvbiBjb21wb3NlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZnVuY3NbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3MucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RvcmUgZW5oYW5jZXIgdGhhdCBhcHBsaWVzIG1pZGRsZXdhcmUgdG8gdGhlIGRpc3BhdGNoIG1ldGhvZFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xuICogYXN5bmNocm9ub3VzIGFjdGlvbnMgaW4gYSBjb25jaXNlIG1hbm5lciwgb3IgbG9nZ2luZyBldmVyeSBhY3Rpb24gcGF5bG9hZC5cbiAqXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXG4gKlxuICogQmVjYXVzZSBtaWRkbGV3YXJlIGlzIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cywgdGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0XG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXG4gKlxuICogTm90ZSB0aGF0IGVhY2ggbWlkZGxld2FyZSB3aWxsIGJlIGdpdmVuIHRoZSBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIGZ1bmN0aW9uc1xuICogYXMgbmFtZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1pZGRsZXdhcmVzIFRoZSBtaWRkbGV3YXJlIGNoYWluIHRvIGJlIGFwcGxpZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXG4gKi9cblxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWlkZGxld2FyZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgbWlkZGxld2FyZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGNyZWF0ZVN0b3JlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcblxuICAgICAgdmFyIF9kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNSkgOiAnRGlzcGF0Y2hpbmcgd2hpbGUgY29uc3RydWN0aW5nIHlvdXIgbWlkZGxld2FyZSBpcyBub3QgYWxsb3dlZC4gJyArICdPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guJyk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaC5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IGNvbXBvc2UuYXBwbHkodm9pZCAwLCBjaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3RvcmUpLCB7fSwge1xuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgeyBBY3Rpb25UeXBlcyBhcyBfX0RPX05PVF9VU0VfX0FjdGlvblR5cGVzLCBhcHBseU1pZGRsZXdhcmUsIGJpbmRBY3Rpb25DcmVhdG9ycywgY29tYmluZVJlZHVjZXJzLCBjb21wb3NlLCBjcmVhdGVTdG9yZSwgbGVnYWN5X2NyZWF0ZVN0b3JlIH07XG4iLCAiLyoqIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgcG90ZW50aWFsIFwiZXh0cmEgYXJndW1lbnRcIiB2YWx1ZSB0byBiZSBpbmplY3RlZCBsYXRlcixcclxuICogYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRodW5rIG1pZGRsZXdhcmUgdGhhdCB1c2VzIHRoYXQgdmFsdWVcclxuICovXG5mdW5jdGlvbiBjcmVhdGVUaHVua01pZGRsZXdhcmUoZXh0cmFBcmd1bWVudCkge1xuICAvLyBTdGFuZGFyZCBSZWR1eCBtaWRkbGV3YXJlIGRlZmluaXRpb24gcGF0dGVybjpcbiAgLy8gU2VlOiBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSN3cml0aW5nLWN1c3RvbS1taWRkbGV3YXJlXG4gIHZhciBtaWRkbGV3YXJlID0gZnVuY3Rpb24gbWlkZGxld2FyZShfcmVmKSB7XG4gICAgdmFyIGRpc3BhdGNoID0gX3JlZi5kaXNwYXRjaCxcbiAgICAgICAgZ2V0U3RhdGUgPSBfcmVmLmdldFN0YXRlO1xuICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgLy8gVGhlIHRodW5rIG1pZGRsZXdhcmUgbG9va3MgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCB3ZXJlIHBhc3NlZCB0byBgc3RvcmUuZGlzcGF0Y2hgLlxuICAgICAgICAvLyBJZiB0aGlzIFwiYWN0aW9uXCIgaXMgcmVhbGx5IGEgZnVuY3Rpb24sIGNhbGwgaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIEluamVjdCB0aGUgc3RvcmUncyBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIG1ldGhvZHMsIGFzIHdlbGwgYXMgYW55IFwiZXh0cmEgYXJnXCJcbiAgICAgICAgICByZXR1cm4gYWN0aW9uKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmFBcmd1bWVudCk7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwYXNzIHRoZSBhY3Rpb24gZG93biB0aGUgbWlkZGxld2FyZSBjaGFpbiBhcyB1c3VhbFxuXG5cbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gbWlkZGxld2FyZTtcbn1cblxudmFyIHRodW5rID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKCk7IC8vIEF0dGFjaCB0aGUgZmFjdG9yeSBmdW5jdGlvbiBzbyB1c2VycyBjYW4gY3JlYXRlIGEgY3VzdG9taXplZCB2ZXJzaW9uXG4vLyB3aXRoIHdoYXRldmVyIFwiZXh0cmEgYXJnXCIgdGhleSB3YW50IHRvIGluamVjdCBpbnRvIHRoZWlyIHRodW5rc1xuXG50aHVuay53aXRoRXh0cmFBcmd1bWVudCA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZTtcbmV4cG9ydCBkZWZhdWx0IHRodW5rOyIsICJpbXBvcnQgeyBlbmFibGVFUzUgfSBmcm9tICdpbW1lcidcclxuZXhwb3J0ICogZnJvbSAncmVkdXgnXHJcbmV4cG9ydCB7XHJcbiAgZGVmYXVsdCBhcyBjcmVhdGVOZXh0U3RhdGUsXHJcbiAgY3VycmVudCxcclxuICBmcmVlemUsXHJcbiAgb3JpZ2luYWwsXHJcbiAgaXNEcmFmdCxcclxufSBmcm9tICdpbW1lcidcclxuZXhwb3J0IHR5cGUgeyBEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5leHBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgU2VsZWN0b3IsXHJcbiAgT3V0cHV0UGFyYW1ldHJpY1NlbGVjdG9yLFxyXG4gIE91dHB1dFNlbGVjdG9yLFxyXG4gIFBhcmFtZXRyaWNTZWxlY3RvcixcclxufSBmcm9tICdyZXNlbGVjdCdcclxuZXhwb3J0IHsgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgfSBmcm9tICcuL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yJ1xyXG5leHBvcnQgdHlwZSB7IFRodW5rQWN0aW9uLCBUaHVua0Rpc3BhdGNoLCBUaHVua01pZGRsZXdhcmUgfSBmcm9tICdyZWR1eC10aHVuaydcclxuXHJcbi8vIFdlIGRlbGliZXJhdGVseSBlbmFibGUgSW1tZXIncyBFUzUgc3VwcG9ydCwgb24gdGhlIGdyb3VuZHMgdGhhdFxyXG4vLyB3ZSBhc3N1bWUgUlRLIHdpbGwgYmUgdXNlZCB3aXRoIFJlYWN0IE5hdGl2ZSBhbmQgb3RoZXIgUHJveHktbGVzc1xyXG4vLyBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiwgdGhhdCdzIGhvdyBJbW1lciA0IGJlaGF2ZWQsIGFuZCBzaW5jZVxyXG4vLyB3ZSB3YW50IHRvIHNoaXAgdGhpcyBpbiBhbiBSVEsgbWlub3IsIHdlIHNob3VsZCBrZWVwIHRoZSBzYW1lIGJlaGF2aW9yLlxyXG5lbmFibGVFUzUoKVxyXG5cclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNvbmZpZ3VyZVN0b3JlLFxyXG59IGZyb20gJy4vY29uZmlndXJlU3RvcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIENvbmZpZ3VyZUVuaGFuY2Vyc0NhbGxiYWNrLFxyXG4gIENvbmZpZ3VyZVN0b3JlT3B0aW9ucyxcclxuICBFbmhhbmNlZFN0b3JlLFxyXG59IGZyb20gJy4vY29uZmlndXJlU3RvcmUnXHJcbmV4cG9ydCB0eXBlIHsgRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMgfSBmcm9tICcuL2RldnRvb2xzRXh0ZW5zaW9uJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlQWN0aW9uLFxyXG4gIGdldFR5cGUsXHJcbiAgaXNBY3Rpb24sXHJcbiAgaXNBY3Rpb25DcmVhdG9yLFxyXG4gIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLFxyXG59IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBQYXlsb2FkQWN0aW9uLFxyXG4gIFBheWxvYWRBY3Rpb25DcmVhdG9yLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhPcHRpb25hbFBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZCxcclxuICBQcmVwYXJlQWN0aW9uLFxyXG59IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlUmVkdWNlcixcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEFjdGlvbnMsXHJcbiAgQ2FzZVJlZHVjZXIsXHJcbiAgQ2FzZVJlZHVjZXJzLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVNsaWNlLFxyXG59IGZyb20gJy4vY3JlYXRlU2xpY2UnXHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBDcmVhdGVTbGljZU9wdGlvbnMsXHJcbiAgU2xpY2UsXHJcbiAgQ2FzZVJlZHVjZXJBY3Rpb25zLFxyXG4gIFNsaWNlQ2FzZVJlZHVjZXJzLFxyXG4gIFZhbGlkYXRlU2xpY2VDYXNlUmVkdWNlcnMsXHJcbiAgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZSxcclxuICBTbGljZUFjdGlvbkNyZWF0b3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVTbGljZSdcclxuZXhwb3J0IHR5cGUgeyBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQgeyBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsXHJcbiAgaXNJbW11dGFibGVEZWZhdWx0LFxyXG59IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zLFxyXG59IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLFxyXG4gIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSxcclxuICBpc1BsYWluLFxyXG59IGZyb20gJy4vc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zLFxyXG59IGZyb20gJy4vc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgZ2V0RGVmYXVsdE1pZGRsZXdhcmUsXHJcbn0gZnJvbSAnLi9nZXREZWZhdWx0TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXIsXHJcbn0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuZXhwb3J0IHsgTWlkZGxld2FyZUFycmF5LCBFbmhhbmNlckFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbmV4cG9ydCB7IGNyZWF0ZUVudGl0eUFkYXB0ZXIgfSBmcm9tICcuL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgRGljdGlvbmFyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlBZGFwdGVyLFxyXG4gIEVudGl0eVNlbGVjdG9ycyxcclxuICBFbnRpdHlTdGF0ZUFkYXB0ZXIsXHJcbiAgRW50aXR5SWQsXHJcbiAgVXBkYXRlLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgQ29tcGFyZXIsXHJcbn0gZnJvbSAnLi9lbnRpdGllcy9tb2RlbHMnXHJcblxyXG5leHBvcnQge1xyXG4gIGNyZWF0ZUFzeW5jVGh1bmssXHJcbiAgdW53cmFwUmVzdWx0LFxyXG4gIG1pbmlTZXJpYWxpemVFcnJvcixcclxufSBmcm9tICcuL2NyZWF0ZUFzeW5jVGh1bmsnXHJcbmV4cG9ydCB0eXBlIHtcclxuICBBc3luY1RodW5rLFxyXG4gIEFzeW5jVGh1bmtPcHRpb25zLFxyXG4gIEFzeW5jVGh1bmtBY3Rpb24sXHJcbiAgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yUmV0dXJuVmFsdWUsXHJcbiAgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yLFxyXG4gIFNlcmlhbGl6ZWRFcnJvcixcclxufSBmcm9tICcuL2NyZWF0ZUFzeW5jVGh1bmsnXHJcblxyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgaXNBbGxPZixcclxuICBpc0FueU9mLFxyXG4gIGlzUGVuZGluZyxcclxuICBpc1JlamVjdGVkLFxyXG4gIGlzRnVsZmlsbGVkLFxyXG4gIGlzQXN5bmNUaHVua0FjdGlvbixcclxuICBpc1JlamVjdGVkV2l0aFZhbHVlLFxyXG59IGZyb20gJy4vbWF0Y2hlcnMnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEFjdGlvbk1hdGNoaW5nQWxsT2YsXHJcbiAgQWN0aW9uTWF0Y2hpbmdBbnlPZixcclxufSBmcm9tICcuL21hdGNoZXJzJ1xyXG5cclxuZXhwb3J0IHsgbmFub2lkIH0gZnJvbSAnLi9uYW5vaWQnXHJcblxyXG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzUGxhaW5PYmplY3QgfSBmcm9tICcuL2lzUGxhaW5PYmplY3QnXHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgTGlzdGVuZXJFZmZlY3QsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIExpc3RlbmVyRWZmZWN0QVBJLFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlLFxyXG4gIENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnMsXHJcbiAgTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgVHlwZWRTdGFydExpc3RlbmluZyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkU3RvcExpc3RlbmluZyxcclxuICBUeXBlZFJlbW92ZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMsXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgRm9ya2VkVGFza0FQSSxcclxuICBBc3luY1Rhc2tFeGVjdXRvcixcclxuICBTeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFRhc2tDYW5jZWxsZWQsXHJcbiAgVGFza1JlamVjdGVkLFxyXG4gIFRhc2tSZXNvbHZlZCxcclxuICBUYXNrUmVzdWx0LFxyXG59IGZyb20gJy4vbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4J1xyXG5leHBvcnQgdHlwZSB7IEFueUxpc3RlbmVyUHJlZGljYXRlIH0gZnJvbSAnLi9saXN0ZW5lck1pZGRsZXdhcmUvdHlwZXMnXHJcblxyXG5leHBvcnQge1xyXG4gIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSxcclxuICBhZGRMaXN0ZW5lcixcclxuICByZW1vdmVMaXN0ZW5lcixcclxuICBjbGVhckFsbExpc3RlbmVycyxcclxuICBUYXNrQWJvcnRFcnJvcixcclxufSBmcm9tICcuL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleCdcclxuXHJcbmV4cG9ydCB7XHJcbiAgU0hPVUxEX0FVVE9CQVRDSCxcclxuICBwcmVwYXJlQXV0b0JhdGNoZWQsXHJcbiAgYXV0b0JhdGNoRW5oYW5jZXIsXHJcbn0gZnJvbSAnLi9hdXRvQmF0Y2hFbmhhbmNlcidcclxuZXhwb3J0IHR5cGUgeyBBdXRvQmF0Y2hPcHRpb25zIH0gZnJvbSAnLi9hdXRvQmF0Y2hFbmhhbmNlcidcclxuXHJcbmV4cG9ydCB0eXBlIHsgRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyBhcyBUU0hlbHBlcnNFeHRyYWN0RGlzcGF0Y2hFeHRlbnNpb25zIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbiIsICJpbXBvcnQgeyBjdXJyZW50LCBpc0RyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIH0gZnJvbSAncmVzZWxlY3QnXHJcblxyXG4vKipcclxuICogXCJEcmFmdC1TYWZlXCIgdmVyc2lvbiBvZiBgcmVzZWxlY3RgJ3MgYGNyZWF0ZVNlbGVjdG9yYDpcclxuICogSWYgYW4gYGltbWVyYC1kcmFmdGVkIG9iamVjdCBpcyBwYXNzZWQgaW50byB0aGUgcmVzdWx0aW5nIHNlbGVjdG9yJ3MgZmlyc3QgYXJndW1lbnQsXHJcbiAqIHRoZSBzZWxlY3RvciB3aWxsIGFjdCBvbiB0aGUgY3VycmVudCBkcmFmdCB2YWx1ZSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBjYWNoZWQgdmFsdWVcclxuICogdGhhdCBtaWdodCBiZSBwb3NzaWJseSBvdXRkYXRlZCBpZiB0aGUgZHJhZnQgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjogdHlwZW9mIGNyZWF0ZVNlbGVjdG9yID0gKFxyXG4gIC4uLmFyZ3M6IHVua25vd25bXVxyXG4pID0+IHtcclxuICBjb25zdCBzZWxlY3RvciA9IChjcmVhdGVTZWxlY3RvciBhcyBhbnkpKC4uLmFyZ3MpXHJcbiAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gKHZhbHVlOiB1bmtub3duLCAuLi5yZXN0OiB1bmtub3duW10pID0+XHJcbiAgICBzZWxlY3Rvcihpc0RyYWZ0KHZhbHVlKSA/IGN1cnJlbnQodmFsdWUpIDogdmFsdWUsIC4uLnJlc3QpXHJcbiAgcmV0dXJuIHdyYXBwZWRTZWxlY3RvciBhcyBhbnlcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUge1xyXG4gIFJlZHVjZXIsXHJcbiAgUmVkdWNlcnNNYXBPYmplY3QsXHJcbiAgTWlkZGxld2FyZSxcclxuICBBY3Rpb24sXHJcbiAgQW55QWN0aW9uLFxyXG4gIFN0b3JlRW5oYW5jZXIsXHJcbiAgU3RvcmUsXHJcbiAgRGlzcGF0Y2gsXHJcbiAgUHJlbG9hZGVkU3RhdGUsXHJcbiAgQ29tYmluZWRTdGF0ZSxcclxufSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgY3JlYXRlU3RvcmUsIGNvbXBvc2UsIGFwcGx5TWlkZGxld2FyZSwgY29tYmluZVJlZHVjZXJzIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMgYXMgRGV2VG9vbHNPcHRpb25zIH0gZnJvbSAnLi9kZXZ0b29sc0V4dGVuc2lvbidcclxuaW1wb3J0IHsgY29tcG9zZVdpdGhEZXZUb29scyB9IGZyb20gJy4vZGV2dG9vbHNFeHRlbnNpb24nXHJcblxyXG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QnXHJcbmltcG9ydCB0eXBlIHtcclxuICBUaHVua01pZGRsZXdhcmVGb3IsXHJcbiAgQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlLFxyXG59IGZyb20gJy4vZ2V0RGVmYXVsdE1pZGRsZXdhcmUnXHJcbmltcG9ydCB7IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUgfSBmcm9tICcuL2dldERlZmF1bHRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgTm9JbmZlcixcclxuICBFeHRyYWN0RGlzcGF0Y2hFeHRlbnNpb25zLFxyXG4gIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnMsXHJcbiAgRXh0cmFjdFN0YXRlRXh0ZW5zaW9ucyxcclxufSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgRW5oYW5jZXJBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5jb25zdCBJU19QUk9EVUNUSU9OID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG5cclxuLyoqXHJcbiAqIENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUsIHRvIGJlIHVzZWQgaW4gYENvbmZpZ3VyZVN0b3JlT3B0aW9ucy5lbmhhbmNlcnNgXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENvbmZpZ3VyZUVuaGFuY2Vyc0NhbGxiYWNrPEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBFbmhhbmNlcnM+ID0gKFxyXG4gIGRlZmF1bHRFbmhhbmNlcnM6IEVuaGFuY2VyQXJyYXk8W1N0b3JlRW5oYW5jZXI8e30sIHt9Pl0+XHJcbikgPT4gRVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjb25maWd1cmVTdG9yZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmVTdG9yZU9wdGlvbnM8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IE1pZGRsZXdhcmVzPFM+LFxyXG4gIEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBFbmhhbmNlcnNcclxuPiB7XHJcbiAgLyoqXHJcbiAgICogQSBzaW5nbGUgcmVkdWNlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCByZWR1Y2VyLCBvciBhblxyXG4gICAqIG9iamVjdCBvZiBzbGljZSByZWR1Y2VycyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGBjb21iaW5lUmVkdWNlcnMoKWAuXHJcbiAgICovXHJcbiAgcmVkdWNlcjogUmVkdWNlcjxTLCBBPiB8IFJlZHVjZXJzTWFwT2JqZWN0PFMsIEE+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIFJlZHV4IG1pZGRsZXdhcmUgdG8gaW5zdGFsbC4gSWYgbm90IHN1cHBsaWVkLCBkZWZhdWx0cyB0b1xyXG4gICAqIHRoZSBzZXQgb2YgbWlkZGxld2FyZSByZXR1cm5lZCBieSBgZ2V0RGVmYXVsdE1pZGRsZXdhcmUoKWAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZSBgbWlkZGxld2FyZTogKGdETSkgPT4gZ0RNKCkuY29uY2F0KGxvZ2dlciwgYXBpTWlkZGxld2FyZSwgeW91ckN1c3RvbU1pZGRsZXdhcmUpYFxyXG4gICAqIEBzZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUjaW50ZW5kZWQtdXNhZ2VcclxuICAgKi9cclxuICBtaWRkbGV3YXJlPzogKChnZXREZWZhdWx0TWlkZGxld2FyZTogQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlPFM+KSA9PiBNKSB8IE1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBlbmFibGUgUmVkdXggRGV2VG9vbHMgaW50ZWdyYXRpb24uIERlZmF1bHRzIHRvIGB0cnVlYC5cclxuICAgKlxyXG4gICAqIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBjYW4gYmUgZG9uZSBieSBwYXNzaW5nIFJlZHV4IERldlRvb2xzIG9wdGlvbnNcclxuICAgKi9cclxuICBkZXZUb29scz86IGJvb2xlYW4gfCBEZXZUb29sc09wdGlvbnNcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGluaXRpYWwgc3RhdGUsIHNhbWUgYXMgUmVkdXgncyBjcmVhdGVTdG9yZS5cclxuICAgKiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdCB0byBoeWRyYXRlIHRoZSBzdGF0ZVxyXG4gICAqIGZyb20gdGhlIHNlcnZlciBpbiB1bml2ZXJzYWwgYXBwcywgb3IgdG8gcmVzdG9yZSBhIHByZXZpb3VzbHkgc2VyaWFsaXplZFxyXG4gICAqIHVzZXIgc2Vzc2lvbi4gSWYgeW91IHVzZSBgY29tYmluZVJlZHVjZXJzKClgIHRvIHByb2R1Y2UgdGhlIHJvb3QgcmVkdWNlclxyXG4gICAqIGZ1bmN0aW9uIChlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBwYXNzaW5nIGFuIG9iamVjdCBhcyBgcmVkdWNlcmApLFxyXG4gICAqIHRoaXMgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyB0aGUgcmVkdWNlciBtYXAga2V5cy5cclxuICAgKi9cclxuICAvKlxyXG4gIE5vdCAxMDAlIGNvcnJlY3QgYnV0IHRoZSBiZXN0IGFwcHJveGltYXRpb24gd2UgY2FuIGdldDpcclxuICAtIGlmIFMgaXMgYSBgQ29tYmluZWRTdGF0ZWAgYXBwbHlpbmcgYSBzZWNvbmQgYENvbWJpbmVkU3RhdGVgIG9uIGl0IGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZy5cclxuICAtIGlmIGl0IGlzIG5vdCwgdGhlcmUgY291bGQgYmUgdHdvIGNhc2VzOlxyXG4gICAgLSBgUmVkdWNlcnNNYXBPYmplY3Q8UywgQT5gIGlzIGJlaW5nIHBhc3NlZCBpbi4gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIGNhbGwgYGNvbWJpbmVSZWR1Y2Vyc2Agb24gaXQgYW5kIGBDb21iaW5lZFN0YXRlPFM+YCBpcyBjb3JyZWN0XHJcbiAgICAtIGBSZWR1Y2VyPFMsIEE+YCBpcyBiZWluZyBwYXNzZWQgaW4uIEluIHRoaXMgY2FzZSwgYWN0dWFsbHkgYENvbWJpbmVkU3RhdGU8Uz5gIGlzIHdyb25nIGFuZCBgU2Agd291bGQgYmUgY29ycmVjdC5cclxuICAgIEFzIHdlIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcyB3aXRob3V0IGFkZGluZyBhbm90aGVyIGdlbmVyaWMgcGFyYW1ldGVyLFxyXG4gICAgd2UganVzdCBtYWtlIHRoZSBwcmFnbWF0aWMgYXNzdW1wdGlvbiB0aGF0IHRoZSBsYXR0ZXIgYWxtb3N0IG5ldmVyIGhhcHBlbnMuXHJcbiAgKi9cclxuICBwcmVsb2FkZWRTdGF0ZT86IFByZWxvYWRlZFN0YXRlPENvbWJpbmVkU3RhdGU8Tm9JbmZlcjxTPj4+XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzdG9yZSBlbmhhbmNlcnMgdG8gYXBwbHkuIFNlZSBSZWR1eCdzIGBjcmVhdGVTdG9yZSgpYC5cclxuICAgKiBBbGwgZW5oYW5jZXJzIHdpbGwgYmUgaW5jbHVkZWQgYmVmb3JlIHRoZSBEZXZUb29scyBFeHRlbnNpb24gZW5oYW5jZXIuXHJcbiAgICogSWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBvcmRlciBvZiBlbmhhbmNlcnMsIHN1cHBseSBhIGNhbGxiYWNrXHJcbiAgICogZnVuY3Rpb24gdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG9yaWdpbmFsIGFycmF5IChpZSwgYFthcHBseU1pZGRsZXdhcmVdYCksXHJcbiAgICogYW5kIHNob3VsZCByZXR1cm4gYSBuZXcgYXJyYXkgKHN1Y2ggYXMgYFthcHBseU1pZGRsZXdhcmUsIG9mZmxpbmVdYCkuXHJcbiAgICogSWYgeW91IG9ubHkgbmVlZCB0byBhZGQgbWlkZGxld2FyZSwgeW91IGNhbiB1c2UgdGhlIGBtaWRkbGV3YXJlYCBwYXJhbWV0ZXIgaW5zdGVhZC5cclxuICAgKi9cclxuICBlbmhhbmNlcnM/OiBFIHwgQ29uZmlndXJlRW5oYW5jZXJzQ2FsbGJhY2s8RT5cclxufVxyXG5cclxudHlwZSBNaWRkbGV3YXJlczxTPiA9IFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTx7fSwgUz4+XHJcblxyXG50eXBlIEVuaGFuY2VycyA9IFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcj5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9vbGtpdFN0b3JlPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBNaWRkbGV3YXJlczxTPlxyXG4+IGV4dGVuZHMgU3RvcmU8UywgQT4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBgZGlzcGF0Y2hgIG1ldGhvZCBvZiB5b3VyIHN0b3JlLCBlbmhhbmNlZCBieSBhbGwgaXRzIG1pZGRsZXdhcmVzLlxyXG4gICAqXHJcbiAgICogQGluaGVyaXRkb2NcclxuICAgKi9cclxuICBkaXNwYXRjaDogRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9uczxNPiAmIERpc3BhdGNoPEE+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIFJlZHV4IHN0b3JlIHJldHVybmVkIGJ5IGBjb25maWd1cmVTdG9yZSgpYC4gU3VwcG9ydHMgZGlzcGF0Y2hpbmdcclxuICogc2lkZS1lZmZlY3RmdWwgX3RodW5rc18gaW4gYWRkaXRpb24gdG8gcGxhaW4gYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgRW5oYW5jZWRTdG9yZTxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gTWlkZGxld2FyZXM8Uz4sXHJcbiAgRSBleHRlbmRzIEVuaGFuY2VycyA9IEVuaGFuY2Vyc1xyXG4+ID0gVG9vbGtpdFN0b3JlPFMgJiBFeHRyYWN0U3RhdGVFeHRlbnNpb25zPEU+LCBBLCBNPiAmXHJcbiAgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uczxFPlxyXG5cclxuLyoqXHJcbiAqIEEgZnJpZW5kbHkgYWJzdHJhY3Rpb24gb3ZlciB0aGUgc3RhbmRhcmQgUmVkdXggYGNyZWF0ZVN0b3JlKClgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgc3RvcmUgY29uZmlndXJhdGlvbi5cclxuICogQHJldHVybnMgQSBjb25maWd1cmVkIFJlZHV4IHN0b3JlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlU3RvcmU8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IFtUaHVua01pZGRsZXdhcmVGb3I8Uz5dLFxyXG4gIEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBbU3RvcmVFbmhhbmNlcl1cclxuPihvcHRpb25zOiBDb25maWd1cmVTdG9yZU9wdGlvbnM8UywgQSwgTSwgRT4pOiBFbmhhbmNlZFN0b3JlPFMsIEEsIE0sIEU+IHtcclxuICBjb25zdCBjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUgPSBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlPFM+KClcclxuXHJcbiAgY29uc3Qge1xyXG4gICAgcmVkdWNlciA9IHVuZGVmaW5lZCxcclxuICAgIG1pZGRsZXdhcmUgPSBjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUoKSxcclxuICAgIGRldlRvb2xzID0gdHJ1ZSxcclxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkLFxyXG4gICAgZW5oYW5jZXJzID0gdW5kZWZpbmVkLFxyXG4gIH0gPSBvcHRpb25zIHx8IHt9XHJcblxyXG4gIGxldCByb290UmVkdWNlcjogUmVkdWNlcjxTLCBBPlxyXG5cclxuICBpZiAodHlwZW9mIHJlZHVjZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlclxyXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChyZWR1Y2VyKSkge1xyXG4gICAgcm9vdFJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMocmVkdWNlcikgYXMgdW5rbm93biBhcyBSZWR1Y2VyPFMsIEE+XHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ1wicmVkdWNlclwiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQsIGFuZCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzJ1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgbGV0IGZpbmFsTWlkZGxld2FyZSA9IG1pZGRsZXdhcmVcclxuICBpZiAodHlwZW9mIGZpbmFsTWlkZGxld2FyZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgZmluYWxNaWRkbGV3YXJlID0gZmluYWxNaWRkbGV3YXJlKGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSlcclxuXHJcbiAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgIUFycmF5LmlzQXJyYXkoZmluYWxNaWRkbGV3YXJlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ3doZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoXHJcbiAgICAhSVNfUFJPRFVDVElPTiAmJlxyXG4gICAgZmluYWxNaWRkbGV3YXJlLnNvbWUoKGl0ZW06IGFueSkgPT4gdHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpXHJcbiAgKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdlYWNoIG1pZGRsZXdhcmUgcHJvdmlkZWQgdG8gY29uZmlndXJlU3RvcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJ1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgbWlkZGxld2FyZUVuaGFuY2VyOiBTdG9yZUVuaGFuY2VyID0gYXBwbHlNaWRkbGV3YXJlKC4uLmZpbmFsTWlkZGxld2FyZSlcclxuXHJcbiAgbGV0IGZpbmFsQ29tcG9zZSA9IGNvbXBvc2VcclxuXHJcbiAgaWYgKGRldlRvb2xzKSB7XHJcbiAgICBmaW5hbENvbXBvc2UgPSBjb21wb3NlV2l0aERldlRvb2xzKHtcclxuICAgICAgLy8gRW5hYmxlIGNhcHR1cmUgb2Ygc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIFJlZHV4IGFjdGlvbnNcclxuICAgICAgdHJhY2U6ICFJU19QUk9EVUNUSU9OLFxyXG4gICAgICAuLi4odHlwZW9mIGRldlRvb2xzID09PSAnb2JqZWN0JyAmJiBkZXZUb29scyksXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZGVmYXVsdEVuaGFuY2VycyA9IG5ldyBFbmhhbmNlckFycmF5KG1pZGRsZXdhcmVFbmhhbmNlcilcclxuICBsZXQgc3RvcmVFbmhhbmNlcnM6IEVuaGFuY2VycyA9IGRlZmF1bHRFbmhhbmNlcnNcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoZW5oYW5jZXJzKSkge1xyXG4gICAgc3RvcmVFbmhhbmNlcnMgPSBbbWlkZGxld2FyZUVuaGFuY2VyLCAuLi5lbmhhbmNlcnNdXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhkZWZhdWx0RW5oYW5jZXJzKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY29tcG9zZWRFbmhhbmNlciA9IGZpbmFsQ29tcG9zZSguLi5zdG9yZUVuaGFuY2VycykgYXMgU3RvcmVFbmhhbmNlcjxhbnk+XHJcblxyXG4gIHJldHVybiBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGNvbXBvc2VkRW5oYW5jZXIpXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBY3Rpb25DcmVhdG9yLCBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tICdyZWR1eCdcclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERldlRvb2xzRW5oYW5jZXJPcHRpb25zIHtcclxuICAvKipcclxuICAgKiB0aGUgaW5zdGFuY2UgbmFtZSB0byBiZSBzaG93ZWQgb24gdGhlIG1vbml0b3IgcGFnZS4gRGVmYXVsdCB2YWx1ZSBpcyBgZG9jdW1lbnQudGl0bGVgLlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQgYW5kIHRoZXJlJ3Mgbm8gZG9jdW1lbnQgdGl0bGUsIGl0IHdpbGwgY29uc2lzdCBvZiBgdGFiSWRgIGFuZCBgaW5zdGFuY2VJZGAuXHJcbiAgICovXHJcbiAgbmFtZT86IHN0cmluZ1xyXG4gIC8qKlxyXG4gICAqIGFjdGlvbiBjcmVhdG9ycyBmdW5jdGlvbnMgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBEaXNwYXRjaGVyLlxyXG4gICAqL1xyXG4gIGFjdGlvbkNyZWF0b3JzPzogQWN0aW9uQ3JlYXRvcjxhbnk+W10gfCB7IFtrZXk6IHN0cmluZ106IEFjdGlvbkNyZWF0b3I8YW55PiB9XHJcbiAgLyoqXHJcbiAgICogaWYgbW9yZSB0aGFuIG9uZSBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBpbiB0aGUgaW5kaWNhdGVkIGludGVydmFsLCBhbGwgbmV3IGFjdGlvbnMgd2lsbCBiZSBjb2xsZWN0ZWQgYW5kIHNlbnQgYXQgb25jZS5cclxuICAgKiBJdCBpcyB0aGUgam9pbnQgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgc3BlZWQuIFdoZW4gc2V0IHRvIGAwYCwgYWxsIGFjdGlvbnMgd2lsbCBiZSBzZW50IGluc3RhbnRseS5cclxuICAgKiBTZXQgaXQgdG8gYSBoaWdoZXIgdmFsdWUgd2hlbiBleHBlcmllbmNpbmcgcGVyZiBpc3N1ZXMgKGFsc28gYG1heEFnZWAgdG8gYSBsb3dlciB2YWx1ZSkuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCA1MDAgbXMuXHJcbiAgICovXHJcbiAgbGF0ZW5jeT86IG51bWJlclxyXG4gIC8qKlxyXG4gICAqICg+IDEpIC0gbWF4aW11bSBhbGxvd2VkIGFjdGlvbnMgdG8gYmUgc3RvcmVkIGluIHRoZSBoaXN0b3J5IHRyZWUuIFRoZSBvbGRlc3QgYWN0aW9ucyBhcmUgcmVtb3ZlZCBvbmNlIG1heEFnZSBpcyByZWFjaGVkLiBJdCdzIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IDUwXHJcbiAgICovXHJcbiAgbWF4QWdlPzogbnVtYmVyXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9taXplcyBob3cgYWN0aW9ucyBhbmQgc3RhdGUgYXJlIHNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZC4gQ2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3QuIElmIGdpdmVuIGEgYm9vbGVhbiwgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGlmIHlvdVxyXG4gICAqIHdlcmUgdG8gcGFzcyBhbiBvYmplY3QgYW5kIHNwZWNpZnkgYG9wdGlvbnNgIGFzIGEgYm9vbGVhbi4gR2l2aW5nIGFuIG9iamVjdCBhbGxvd3MgZmluZS1ncmFpbmVkIGN1c3RvbWl6YXRpb24gdXNpbmcgdGhlIGByZXBsYWNlcmAgYW5kIGByZXZpdmVyYFxyXG4gICAqIGZ1bmN0aW9ucy5cclxuICAgKi9cclxuICBzZXJpYWxpemU/OlxyXG4gICAgfCBib29sZWFuXHJcbiAgICB8IHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiAtIGB1bmRlZmluZWRgIC0gd2lsbCB1c2UgcmVndWxhciBgSlNPTi5zdHJpbmdpZnlgIHRvIHNlbmQgZGF0YSAoaXQncyB0aGUgZmFzdCBtb2RlKS5cclxuICAgICAgICAgKiAtIGBmYWxzZWAgLSB3aWxsIGhhbmRsZSBhbHNvIGNpcmN1bGFyIHJlZmVyZW5jZXMuXHJcbiAgICAgICAgICogLSBgdHJ1ZWAgLSB3aWxsIGhhbmRsZSBhbHNvIGRhdGUsIHJlZ2V4LCB1bmRlZmluZWQsIGVycm9yIG9iamVjdHMsIHN5bWJvbHMsIG1hcHMsIHNldHMgYW5kIGZ1bmN0aW9ucy5cclxuICAgICAgICAgKiAtIG9iamVjdCwgd2hpY2ggY29udGFpbnMgYGRhdGVgLCBgcmVnZXhgLCBgdW5kZWZpbmVkYCwgYGVycm9yYCwgYHN5bWJvbGAsIGBtYXBgLCBgc2V0YCBhbmQgYGZ1bmN0aW9uYCBrZXlzLlxyXG4gICAgICAgICAqICAgRm9yIGVhY2ggb2YgdGhlbSB5b3UgY2FuIGluZGljYXRlIGlmIHRvIGluY2x1ZGUgKGJ5IHNldHRpbmcgYXMgYHRydWVgKS5cclxuICAgICAgICAgKiAgIEZvciBgZnVuY3Rpb25gIGtleSB5b3UgY2FuIGFsc28gc3BlY2lmeSBhIGN1c3RvbSBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIHNlcmlhbGl6YXRpb24uXHJcbiAgICAgICAgICogICBTZWUgW2Bqc2FuYF0oaHR0cHM6Ly9naXRodWIuY29tL2tvbG9kbnkvanNhbikgZm9yIG1vcmUgZGV0YWlscy5cclxuICAgICAgICAgKi9cclxuICAgICAgICBvcHRpb25zPzpcclxuICAgICAgICAgIHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICB8IGJvb2xlYW5cclxuICAgICAgICAgIHwge1xyXG4gICAgICAgICAgICAgIGRhdGU/OiB0cnVlXHJcbiAgICAgICAgICAgICAgcmVnZXg/OiB0cnVlXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIGVycm9yPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHN5bWJvbD86IHRydWVcclxuICAgICAgICAgICAgICBtYXA/OiB0cnVlXHJcbiAgICAgICAgICAgICAgc2V0PzogdHJ1ZVxyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uPzogdHJ1ZSB8ICgoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSA9PiBzdHJpbmcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbSlNPTiByZXBsYWNlciBmdW5jdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSlNPTi9zdHJpbmdpZnkjVGhlX3JlcGxhY2VyX3BhcmFtZXRlcikgdXNlZCBmb3IgYm90aCBhY3Rpb25zIGFuZCBzdGF0ZXMgc3RyaW5naWZ5LlxyXG4gICAgICAgICAqIEluIGFkZGl0aW9uLCB5b3UgY2FuIHNwZWNpZnkgYSBkYXRhIHR5cGUgYnkgYWRkaW5nIGEgW2BfX3NlcmlhbGl6ZWRUeXBlX19gXShodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZW1vdGVkZXYtc2VyaWFsaXplL2Jsb2IvbWFzdGVyL2hlbHBlcnMvaW5kZXguanMjTDQpXHJcbiAgICAgICAgICoga2V5LiBTbyB5b3UgY2FuIGRlc2VyaWFsaXplIGl0IGJhY2sgd2hpbGUgaW1wb3J0aW5nIG9yIHBlcnNpc3RpbmcgZGF0YS5cclxuICAgICAgICAgKiBNb3Jlb3ZlciwgaXQgd2lsbCBhbHNvIFtzaG93IGEgbmljZSBwcmV2aWV3IHNob3dpbmcgdGhlIHByb3ZpZGVkIGN1c3RvbSB0eXBlXShodHRwczovL2Nsb3VkLmdpdGh1YnVzZXJjb250ZW50LmNvbS9hc3NldHMvNzk1Nzg1OS8yMTgxNDMzMC9hMTdkNTU2YS1kNzYxLTExZTYtODVlZi0xNTlkZDEyZjM2YzUucG5nKTpcclxuICAgICAgICAgKi9cclxuICAgICAgICByZXBsYWNlcj86IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IGFueVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtKU09OIGByZXZpdmVyYCBmdW5jdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSlNPTi9wYXJzZSNVc2luZ190aGVfcmV2aXZlcl9wYXJhbWV0ZXIpXHJcbiAgICAgICAgICogdXNlZCBmb3IgcGFyc2luZyB0aGUgaW1wb3J0ZWQgYWN0aW9ucyBhbmQgc3RhdGVzLiBTZWUgW2ByZW1vdGVkZXYtc2VyaWFsaXplYF0oaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVtb3RlZGV2LXNlcmlhbGl6ZS9ibG9iL21hc3Rlci9pbW11dGFibGUvc2VyaWFsaXplLmpzI0w4LUw0MSlcclxuICAgICAgICAgKiBhcyBhbiBleGFtcGxlIG9uIGhvdyB0byBzZXJpYWxpemUgc3BlY2lhbCBkYXRhIHR5cGVzIGFuZCBnZXQgdGhlbSBiYWNrLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJldml2ZXI/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBhbnlcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBpbW11dGFibGVqcyB2aWEgW3JlbW90ZWRldi1zZXJpYWxpemVdKGh0dHBzOi8vZ2l0aHViLmNvbS96YWxtb3hpc3VzL3JlbW90ZWRldi1zZXJpYWxpemUpLlxyXG4gICAgICAgICAqIEp1c3QgcGFzcyB0aGUgSW1tdXRhYmxlIGxpYnJhcnkuIEl0IHdpbGwgc3VwcG9ydCBhbGwgSW1tdXRhYmxlSlMgc3RydWN0dXJlcy4gWW91IGNhbiBldmVuIGV4cG9ydCB0aGVtIGludG8gYSBmaWxlIGFuZCBnZXQgdGhlbSBiYWNrLlxyXG4gICAgICAgICAqIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBgUmVjb3JkYCBjbGFzcywgZm9yIHdoaWNoIHlvdSBzaG91bGQgcGFzcyB0aGlzIGluIGFkZGl0aW9uIHRoZSByZWZlcmVuY2VzIHRvIHlvdXIgY2xhc3NlcyBpbiBgcmVmc2AuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW1tdXRhYmxlPzogYW55XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW1tdXRhYmxlSlMgYFJlY29yZGAgY2xhc3NlcyB1c2VkIHRvIG1ha2UgcG9zc2libGUgcmVzdG9yZSBpdHMgaW5zdGFuY2VzIGJhY2sgd2hlbiBpbXBvcnRpbmcsIHBlcnNpc3RpbmcuLi5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWZzPzogYW55XHJcbiAgICAgIH1cclxuICAvKipcclxuICAgKiBmdW5jdGlvbiB3aGljaCB0YWtlcyBgYWN0aW9uYCBvYmplY3QgYW5kIGlkIG51bWJlciBhcyBhcmd1bWVudHMsIGFuZCBzaG91bGQgcmV0dXJuIGBhY3Rpb25gIG9iamVjdCBiYWNrLlxyXG4gICAqL1xyXG4gIGFjdGlvblNhbml0aXplcj86IDxBIGV4dGVuZHMgQWN0aW9uPihhY3Rpb246IEEsIGlkOiBudW1iZXIpID0+IEFcclxuICAvKipcclxuICAgKiBmdW5jdGlvbiB3aGljaCB0YWtlcyBgc3RhdGVgIG9iamVjdCBhbmQgaW5kZXggYXMgYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBgc3RhdGVgIG9iamVjdCBiYWNrLlxyXG4gICAqL1xyXG4gIHN0YXRlU2FuaXRpemVyPzogPFM+KHN0YXRlOiBTLCBpbmRleDogbnVtYmVyKSA9PiBTXHJcbiAgLyoqXHJcbiAgICogKnN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFzIHJlZ2V4KiAtIGFjdGlvbnMgdHlwZXMgdG8gYmUgaGlkZGVuIC8gc2hvd24gaW4gdGhlIG1vbml0b3JzICh3aGlsZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXJzKS5cclxuICAgKiBJZiBgYWN0aW9uc1doaXRlbGlzdGAgc3BlY2lmaWVkLCBgYWN0aW9uc0JsYWNrbGlzdGAgaXMgaWdub3JlZC5cclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWN0aW9uc0RlbnlsaXN0IGluc3RlYWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0JsYWNrbGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogKnN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFzIHJlZ2V4KiAtIGFjdGlvbnMgdHlwZXMgdG8gYmUgaGlkZGVuIC8gc2hvd24gaW4gdGhlIG1vbml0b3JzICh3aGlsZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXJzKS5cclxuICAgKiBJZiBgYWN0aW9uc1doaXRlbGlzdGAgc3BlY2lmaWVkLCBgYWN0aW9uc0JsYWNrbGlzdGAgaXMgaWdub3JlZC5cclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWN0aW9uc0FsbG93bGlzdCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNXaGl0ZWxpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNBbGxvd2xpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNEZW55bGlzdGAgaXMgaWdub3JlZC5cclxuICAgKi9cclxuICBhY3Rpb25zRGVueWxpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNBbGxvd2xpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNEZW55bGlzdGAgaXMgaWdub3JlZC5cclxuICAgKi9cclxuICBhY3Rpb25zQWxsb3dsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiBjYWxsZWQgZm9yIGV2ZXJ5IGFjdGlvbiBiZWZvcmUgc2VuZGluZywgdGFrZXMgYHN0YXRlYCBhbmQgYGFjdGlvbmAgb2JqZWN0LCBhbmQgcmV0dXJucyBgdHJ1ZWAgaW4gY2FzZSBpdCBhbGxvd3Mgc2VuZGluZyB0aGUgY3VycmVudCBkYXRhIHRvIHRoZSBtb25pdG9yLlxyXG4gICAqIFVzZSBpdCBhcyBhIG1vcmUgYWR2YW5jZWQgdmVyc2lvbiBvZiBgYWN0aW9uc0RlbnlsaXN0YC9gYWN0aW9uc0FsbG93bGlzdGAgcGFyYW1ldGVycy5cclxuICAgKi9cclxuICBwcmVkaWNhdGU/OiA8UywgQSBleHRlbmRzIEFjdGlvbj4oc3RhdGU6IFMsIGFjdGlvbjogQSkgPT4gYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIGlmIHNwZWNpZmllZCBhcyBgZmFsc2VgLCBpdCB3aWxsIG5vdCByZWNvcmQgdGhlIGNoYW5nZXMgdGlsbCBjbGlja2luZyBvbiBgU3RhcnQgcmVjb3JkaW5nYCBidXR0b24uXHJcbiAgICogQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLCBmb3Igb3RoZXJzIHVzZSBgYXV0b1BhdXNlYC5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzaG91bGRSZWNvcmRDaGFuZ2VzPzogYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIGlmIHNwZWNpZmllZCwgd2hlbmV2ZXIgY2xpY2tpbmcgb24gYFBhdXNlIHJlY29yZGluZ2AgYnV0dG9uIGFuZCB0aGVyZSBhcmUgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsb2csIHdpbGwgYWRkIHRoaXMgYWN0aW9uIHR5cGUuXHJcbiAgICogSWYgbm90IHNwZWNpZmllZCwgd2lsbCBjb21taXQgd2hlbiBwYXVzZWQuIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlci5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IFwiQEBQQVVTRURcIlwiXHJcbiAgICovXHJcbiAgcGF1c2VBY3Rpb25UeXBlPzogc3RyaW5nXHJcbiAgLyoqXHJcbiAgICogYXV0byBwYXVzZXMgd2hlbiB0aGUgZXh0ZW5zaW9u4oCZcyB3aW5kb3cgaXMgbm90IG9wZW5lZCwgYW5kIHNvIGhhcyB6ZXJvIGltcGFjdCBvbiB5b3VyIGFwcCB3aGVuIG5vdCBpbiB1c2UuXHJcbiAgICogTm90IGF2YWlsYWJsZSBmb3IgUmVkdXggZW5oYW5jZXIgKGFzIGl0IGFscmVhZHkgZG9lcyBpdCBidXQgc3RvcmluZyB0aGUgZGF0YSB0byBiZSBzZW50KS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgYXV0b1BhdXNlPzogYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIGlmIHNwZWNpZmllZCBhcyBgdHJ1ZWAsIGl0IHdpbGwgbm90IGFsbG93IGFueSBub24tbW9uaXRvciBhY3Rpb25zIHRvIGJlIGRpc3BhdGNoZWQgdGlsbCBjbGlja2luZyBvbiBgVW5sb2NrIGNoYW5nZXNgIGJ1dHRvbi5cclxuICAgKiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIHNob3VsZFN0YXJ0TG9ja2VkPzogYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIGlmIHNldCB0byBgZmFsc2VgLCB3aWxsIG5vdCByZWNvbXB1dGUgdGhlIHN0YXRlcyBvbiBob3QgcmVsb2FkaW5nIChvciBvbiByZXBsYWNpbmcgdGhlIHJlZHVjZXJzKS4gQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIHNob3VsZEhvdFJlbG9hZD86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYHRydWVgLCB3aGVuZXZlciB0aGVyZSdzIGFuIGV4Y2VwdGlvbiBpbiByZWR1Y2VycywgdGhlIG1vbml0b3JzIHdpbGwgc2hvdyB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIG5leHQgYWN0aW9ucyB3aWxsIG5vdCBiZSBkaXNwYXRjaGVkLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBzaG91bGRDYXRjaEVycm9ycz86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBJZiB5b3Ugd2FudCB0byByZXN0cmljdCB0aGUgZXh0ZW5zaW9uLCBzcGVjaWZ5IHRoZSBmZWF0dXJlcyB5b3UgYWxsb3cuXHJcbiAgICogSWYgbm90IHNwZWNpZmllZCwgYWxsIG9mIHRoZSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gV2hlbiBzZXQgYXMgYW4gb2JqZWN0LCBvbmx5IHRob3NlIGluY2x1ZGVkIGFzIGB0cnVlYCB3aWxsIGJlIGFsbG93ZWQuXHJcbiAgICogTm90ZSB0aGF0IGV4Y2VwdCBgdHJ1ZWAvYGZhbHNlYCwgYGltcG9ydGAgYW5kIGBleHBvcnRgIGNhbiBiZSBzZXQgYXMgYGN1c3RvbWAgKHdoaWNoIGlzIGJ5IGRlZmF1bHQgZm9yIFJlZHV4IGVuaGFuY2VyKSwgbWVhbmluZyB0aGF0IHRoZSBpbXBvcnRpbmcvZXhwb3J0aW5nIG9jY3VycyBvbiB0aGUgY2xpZW50IHNpZGUuXHJcbiAgICogT3RoZXJ3aXNlLCB5b3UnbGwgZ2V0L3NldCB0aGUgZGF0YSByaWdodCBmcm9tIHRoZSBtb25pdG9yIHBhcnQuXHJcbiAgICovXHJcbiAgZmVhdHVyZXM/OiB7XHJcbiAgICAvKipcclxuICAgICAqIHN0YXJ0L3BhdXNlIHJlY29yZGluZyBvZiBkaXNwYXRjaGVkIGFjdGlvbnNcclxuICAgICAqL1xyXG4gICAgcGF1c2U/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGxvY2svdW5sb2NrIGRpc3BhdGNoaW5nIGFjdGlvbnMgYW5kIHNpZGUgZWZmZWN0c1xyXG4gICAgICovXHJcbiAgICBsb2NrPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBwZXJzaXN0IHN0YXRlcyBvbiBwYWdlIHJlbG9hZGluZ1xyXG4gICAgICovXHJcbiAgICBwZXJzaXN0PzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBleHBvcnQgaGlzdG9yeSBvZiBhY3Rpb25zIGluIGEgZmlsZVxyXG4gICAgICovXHJcbiAgICBleHBvcnQ/OiBib29sZWFuIHwgJ2N1c3RvbSdcclxuICAgIC8qKlxyXG4gICAgICogaW1wb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBmcm9tIGEgZmlsZVxyXG4gICAgICovXHJcbiAgICBpbXBvcnQ/OiBib29sZWFuIHwgJ2N1c3RvbSdcclxuICAgIC8qKlxyXG4gICAgICoganVtcCBiYWNrIGFuZCBmb3J0aCAodGltZSB0cmF2ZWxsaW5nKVxyXG4gICAgICovXHJcbiAgICBqdW1wPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBza2lwIChjYW5jZWwpIGFjdGlvbnNcclxuICAgICAqL1xyXG4gICAgc2tpcD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZHJhZyBhbmQgZHJvcCBhY3Rpb25zIGluIHRoZSBoaXN0b3J5IGxpc3RcclxuICAgICAqL1xyXG4gICAgcmVvcmRlcj86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGF0Y2ggY3VzdG9tIGFjdGlvbnMgb3IgYWN0aW9uIGNyZWF0b3JzXHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBnZW5lcmF0ZSB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbnNcclxuICAgICAqL1xyXG4gICAgdGVzdD86IGJvb2xlYW5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgb3IgYSBzdGFja3RyYWNlLXJldHVybmluZyBmdW5jdGlvbiB0byByZWNvcmQgY2FsbCBzdGFjayB0cmFjZXMgZm9yIGRpc3BhdGNoZWQgYWN0aW9ucy5cclxuICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cclxuICAgKi9cclxuICB0cmFjZT86IGJvb2xlYW4gfCAoPEEgZXh0ZW5kcyBBY3Rpb24+KGFjdGlvbjogQSkgPT4gc3RyaW5nKVxyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFjayB0cmFjZSBlbnRyaWVzIHRvIHJlY29yZCBwZXIgYWN0aW9uLiBEZWZhdWx0cyB0byAxMC5cclxuICAgKi9cclxuICB0cmFjZUxpbWl0PzogbnVtYmVyXHJcbn1cclxuXHJcbnR5cGUgQ29tcG9zZSA9IHR5cGVvZiBjb21wb3NlXHJcblxyXG5pbnRlcmZhY2UgQ29tcG9zZVdpdGhEZXZUb29scyB7XHJcbiAgKG9wdGlvbnM6IERldlRvb2xzRW5oYW5jZXJPcHRpb25zKTogQ29tcG9zZVxyXG4gIDxTdG9yZUV4dD4oLi4uZnVuY3M6IFN0b3JlRW5oYW5jZXI8U3RvcmVFeHQ+W10pOiBTdG9yZUVuaGFuY2VyPFN0b3JlRXh0PlxyXG59XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNvbXBvc2VXaXRoRGV2VG9vbHM6IENvbXBvc2VXaXRoRGV2VG9vbHMgPVxyXG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfX1xyXG4gICAgPyAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fXHJcbiAgICA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0JykgcmV0dXJuIGNvbXBvc2VcclxuICAgICAgICByZXR1cm4gY29tcG9zZS5hcHBseShudWxsLCBhcmd1bWVudHMgYXMgYW55IGFzIEZ1bmN0aW9uW10pXHJcbiAgICAgIH1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZGV2VG9vbHNFbmhhbmNlcjoge1xyXG4gIChvcHRpb25zOiBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyk6IFN0b3JlRW5oYW5jZXI8YW55PlxyXG59ID1cclxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fX1xyXG4gICAgPyAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fX1xyXG4gICAgOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub29wKSB7XHJcbiAgICAgICAgICByZXR1cm4gbm9vcFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4iLCAiLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIHZhbHVlIGlzIFwicGxhaW5cIiBvYmplY3QsIGkuZS4gYW4gb2JqZWN0IHdob3NlXHJcbiAqIHByb3RvdHlwZSBpcyB0aGUgcm9vdCBgT2JqZWN0LnByb3RvdHlwZWAuIFRoaXMgaW5jbHVkZXMgb2JqZWN0cyBjcmVhdGVkXHJcbiAqIHVzaW5nIG9iamVjdCBsaXRlcmFscywgYnV0IG5vdCBmb3IgaW5zdGFuY2UgZm9yIGNsYXNzIGluc3RhbmNlcy5cclxuICpcclxuICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhIHBsYWluIG9iamVjdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZVxyXG5cclxuICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpXHJcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZVxyXG5cclxuICBsZXQgYmFzZVByb3RvID0gcHJvdG9cclxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90bykgIT09IG51bGwpIHtcclxuICAgIGJhc2VQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcHJvdG8gPT09IGJhc2VQcm90b1xyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUsIEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IFRodW5rTWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4LXRodW5rJ1xyXG5pbXBvcnQgdGh1bmtNaWRkbGV3YXJlIGZyb20gJ3JlZHV4LXRodW5rJ1xyXG5pbXBvcnQgdHlwZSB7IEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHR5cGUgeyBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbi8qIFBST0RfU1RBUlRfUkVNT1ZFX1VNRCAqL1xyXG5pbXBvcnQgeyBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuLyogUFJPRF9TVE9QX1JFTU9WRV9VTUQgKi9cclxuXHJcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHR5cGUgeyBFeGNsdWRlRnJvbVR1cGxlIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IE1pZGRsZXdhcmVBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeDogYW55KTogeCBpcyBib29sZWFuIHtcclxuICByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJ1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGh1bmtPcHRpb25zPEUgPSBhbnk+IHtcclxuICBleHRyYUFyZ3VtZW50OiBFXHJcbn1cclxuXHJcbmludGVyZmFjZSBHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIHRodW5rPzogYm9vbGVhbiB8IFRodW5rT3B0aW9uc1xyXG4gIGltbXV0YWJsZUNoZWNrPzogYm9vbGVhbiB8IEltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnNcclxuICBzZXJpYWxpemFibGVDaGVjaz86IGJvb2xlYW4gfCBTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zXHJcbiAgYWN0aW9uQ3JlYXRvckNoZWNrPzogYm9vbGVhbiB8IEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9uc1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUaHVua01pZGRsZXdhcmVGb3I8XHJcbiAgUyxcclxuICBPIGV4dGVuZHMgR2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuPiA9IE8gZXh0ZW5kcyB7XHJcbiAgdGh1bms6IGZhbHNlXHJcbn1cclxuICA/IG5ldmVyXHJcbiAgOiBPIGV4dGVuZHMgeyB0aHVuazogeyBleHRyYUFyZ3VtZW50OiBpbmZlciBFIH0gfVxyXG4gID8gVGh1bmtNaWRkbGV3YXJlPFMsIEFueUFjdGlvbiwgRT5cclxuICA6IFRodW5rTWlkZGxld2FyZTxTLCBBbnlBY3Rpb24+XHJcblxyXG5leHBvcnQgdHlwZSBDdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmU8UyA9IGFueT4gPSA8XHJcbiAgTyBleHRlbmRzIFBhcnRpYWw8R2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zPiA9IHtcclxuICAgIHRodW5rOiB0cnVlXHJcbiAgICBpbW11dGFibGVDaGVjazogdHJ1ZVxyXG4gICAgc2VyaWFsaXphYmxlQ2hlY2s6IHRydWVcclxuICAgIGFjdGlvbkNyZWF0b3JDaGVjazogdHJ1ZVxyXG4gIH1cclxuPihcclxuICBvcHRpb25zPzogT1xyXG4pID0+IE1pZGRsZXdhcmVBcnJheTxFeGNsdWRlRnJvbVR1cGxlPFtUaHVua01pZGRsZXdhcmVGb3I8UywgTz5dLCBuZXZlcj4+XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZTxcclxuICBTID0gYW55XHJcbj4oKTogQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlPFM+IHtcclxuICByZXR1cm4gZnVuY3Rpb24gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYW55IGFycmF5IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgbWlkZGxld2FyZSBpbnN0YWxsZWQgYnlcclxuICogYGNvbmZpZ3VyZVN0b3JlKClgLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gY29uZmlndXJlIHlvdXIgc3RvcmUgd2l0aCBhIGN1c3RvbVxyXG4gKiBgbWlkZGxld2FyZWAgYXJyYXkgYnV0IHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgc2V0LlxyXG4gKlxyXG4gKiBAcmV0dXJuIFRoZSBkZWZhdWx0IG1pZGRsZXdhcmUgdXNlZCBieSBgY29uZmlndXJlU3RvcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICpcclxuICogQGRlcHJlY2F0ZWQgUHJlZmVyIHRvIHVzZSB0aGUgY2FsbGJhY2sgbm90YXRpb24gZm9yIHRoZSBgbWlkZGxld2FyZWAgb3B0aW9uIGluIGBjb25maWd1cmVTdG9yZWBcclxuICogdG8gYWNjZXNzIGEgcHJlLXR5cGVkIGBnZXREZWZhdWx0TWlkZGxld2FyZWAgaW5zdGVhZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZTxcclxuICBTID0gYW55LFxyXG4gIE8gZXh0ZW5kcyBQYXJ0aWFsPEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucz4gPSB7XHJcbiAgICB0aHVuazogdHJ1ZVxyXG4gICAgaW1tdXRhYmxlQ2hlY2s6IHRydWVcclxuICAgIHNlcmlhbGl6YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2s6IHRydWVcclxuICB9XHJcbj4oXHJcbiAgb3B0aW9uczogTyA9IHt9IGFzIE9cclxuKTogTWlkZGxld2FyZUFycmF5PEV4Y2x1ZGVGcm9tVHVwbGU8W1RodW5rTWlkZGxld2FyZUZvcjxTLCBPPl0sIG5ldmVyPj4ge1xyXG4gIGNvbnN0IHtcclxuICAgIHRodW5rID0gdHJ1ZSxcclxuICAgIGltbXV0YWJsZUNoZWNrID0gdHJ1ZSxcclxuICAgIHNlcmlhbGl6YWJsZUNoZWNrID0gdHJ1ZSxcclxuICAgIGFjdGlvbkNyZWF0b3JDaGVjayA9IHRydWUsXHJcbiAgfSA9IG9wdGlvbnNcclxuXHJcbiAgbGV0IG1pZGRsZXdhcmVBcnJheSA9IG5ldyBNaWRkbGV3YXJlQXJyYXk8TWlkZGxld2FyZVtdPigpXHJcblxyXG4gIGlmICh0aHVuaykge1xyXG4gICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcclxuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goXHJcbiAgICAgICAgdGh1bmtNaWRkbGV3YXJlLndpdGhFeHRyYUFyZ3VtZW50KHRodW5rLmV4dHJhQXJndW1lbnQpXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICBpZiAoaW1tdXRhYmxlQ2hlY2spIHtcclxuICAgICAgLyogUFJPRF9TVEFSVF9SRU1PVkVfVU1EICovXHJcbiAgICAgIGxldCBpbW11dGFibGVPcHRpb25zOiBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuXHJcbiAgICAgIGlmICghaXNCb29sZWFuKGltbXV0YWJsZUNoZWNrKSkge1xyXG4gICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVja1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChcclxuICAgICAgICBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucylcclxuICAgICAgKVxyXG4gICAgICAvKiBQUk9EX1NUT1BfUkVNT1ZFX1VNRCAqL1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZXJpYWxpemFibGVDaGVjaykge1xyXG4gICAgICBsZXQgc2VyaWFsaXphYmxlT3B0aW9uczogU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcblxyXG4gICAgICBpZiAoIWlzQm9vbGVhbihzZXJpYWxpemFibGVDaGVjaykpIHtcclxuICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2tcclxuICAgICAgfVxyXG5cclxuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goXHJcbiAgICAgICAgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIGlmIChhY3Rpb25DcmVhdG9yQ2hlY2spIHtcclxuICAgICAgbGV0IGFjdGlvbkNyZWF0b3JPcHRpb25zOiBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG5cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4oYWN0aW9uQ3JlYXRvckNoZWNrKSkge1xyXG4gICAgICAgIGFjdGlvbkNyZWF0b3JPcHRpb25zID0gYWN0aW9uQ3JlYXRvckNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KFxyXG4gICAgICAgIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKGFjdGlvbkNyZWF0b3JPcHRpb25zKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWlkZGxld2FyZUFycmF5IGFzIGFueVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUsIFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBFbmhhbmNlckFycmF5LCBNaWRkbGV3YXJlQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuLyoqXHJcbiAqIHJldHVybiBUcnVlIGlmIFQgaXMgYGFueWAsIG90aGVyd2lzZSByZXR1cm4gRmFsc2VcclxuICogdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vam9vbmhvY2hvL3RzZGVmXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSXNBbnk8VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPVxyXG4gIC8vIHRlc3QgaWYgd2UgYXJlIGdvaW5nIHRoZSBsZWZ0IEFORCByaWdodCBwYXRoIGluIHRoZSBjb25kaXRpb25cclxuICB0cnVlIHwgZmFsc2UgZXh0ZW5kcyAoVCBleHRlbmRzIG5ldmVyID8gdHJ1ZSA6IGZhbHNlKSA/IFRydWUgOiBGYWxzZVxyXG5cclxuLyoqXHJcbiAqIHJldHVybiBUcnVlIGlmIFQgaXMgYHVua25vd25gLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlXHJcbiAqIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvb25ob2Noby90c2RlZlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzVW5rbm93bjxULCBUcnVlLCBGYWxzZSA9IG5ldmVyPiA9IHVua25vd24gZXh0ZW5kcyBUXHJcbiAgPyBJc0FueTxULCBGYWxzZSwgVHJ1ZT5cclxuICA6IEZhbHNlXHJcblxyXG5leHBvcnQgdHlwZSBGYWxsYmFja0lmVW5rbm93bjxULCBGYWxsYmFjaz4gPSBJc1Vua25vd248VCwgRmFsbGJhY2ssIFQ+XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJZk1heWJlVW5kZWZpbmVkPFAsIFRydWUsIEZhbHNlPiA9IFt1bmRlZmluZWRdIGV4dGVuZHMgW1BdXHJcbiAgPyBUcnVlXHJcbiAgOiBGYWxzZVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSWZWb2lkPFAsIFRydWUsIEZhbHNlPiA9IFt2b2lkXSBleHRlbmRzIFtQXSA/IFRydWUgOiBGYWxzZVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSXNFbXB0eU9iajxULCBUcnVlLCBGYWxzZSA9IG5ldmVyPiA9IFQgZXh0ZW5kcyBhbnlcclxuICA/IGtleW9mIFQgZXh0ZW5kcyBuZXZlclxyXG4gICAgPyBJc1Vua25vd248VCwgRmFsc2UsIElmTWF5YmVVbmRlZmluZWQ8VCwgRmFsc2UsIElmVm9pZDxULCBGYWxzZSwgVHJ1ZT4+PlxyXG4gICAgOiBGYWxzZVxyXG4gIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiByZXR1cm5zIFRydWUgaWYgVFMgdmVyc2lvbiBpcyBhYm92ZSAzLjUsIEZhbHNlIGlmIGJlbG93LlxyXG4gKiB1c2VzIGZlYXR1cmUgZGV0ZWN0aW9uIHRvIGRldGVjdCBUUyB2ZXJzaW9uID49IDMuNVxyXG4gKiAqIHZlcnNpb25zIGJlbG93IDMuNSB3aWxsIHJldHVybiBge31gIGZvciB1bnJlc29sdmFibGUgaW50ZXJmZXJlbmNlXHJcbiAqICogdmVyc2lvbnMgYWJvdmUgd2lsbCByZXR1cm4gYHVua25vd25gXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXRMZWFzdFRTMzU8VHJ1ZSwgRmFsc2U+ID0gW1RydWUsIEZhbHNlXVtJc1Vua25vd248XHJcbiAgUmV0dXJuVHlwZTw8VD4oKSA9PiBUPixcclxuICAwLFxyXG4gIDFcclxuPl1cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzVW5rbm93bk9yTm9uSW5mZXJyYWJsZTxULCBUcnVlLCBGYWxzZT4gPSBBdExlYXN0VFMzNTxcclxuICBJc1Vua25vd248VCwgVHJ1ZSwgRmFsc2U+LFxyXG4gIElzRW1wdHlPYmo8VCwgVHJ1ZSwgSXNVbmtub3duPFQsIFRydWUsIEZhbHNlPj5cclxuPlxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgYSBVbmlvbiB0eXBlIGAoQXxCKWAgdG8gYW4gaW50ZXJzZWN0aW9uIHR5cGUgYChBJkIpYFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChcclxuICBVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlclxyXG4pIGV4dGVuZHMgKGs6IGluZmVyIEkpID0+IHZvaWRcclxuICA/IElcclxuICA6IG5ldmVyXHJcblxyXG4vLyBBcHBlYXJzIHRvIGhhdmUgYSBjb252ZW5pZW50IHNpZGUgZWZmZWN0IG9mIGlnbm9yaW5nIGBuZXZlcmAgZXZlbiBpZiB0aGF0J3Mgbm90IHdoYXQgeW91IHNwZWNpZmllZFxyXG5leHBvcnQgdHlwZSBFeGNsdWRlRnJvbVR1cGxlPFQsIEUsIEFjYyBleHRlbmRzIHVua25vd25bXSA9IFtdPiA9IFQgZXh0ZW5kcyBbXHJcbiAgaW5mZXIgSGVhZCxcclxuICAuLi5pbmZlciBUYWlsXHJcbl1cclxuICA/IEV4Y2x1ZGVGcm9tVHVwbGU8VGFpbCwgRSwgWy4uLkFjYywgLi4uKFtIZWFkXSBleHRlbmRzIFtFXSA/IFtdIDogW0hlYWRdKV0+XHJcbiAgOiBBY2NcclxuXHJcbnR5cGUgRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxcclxuICBNaWRkbGV3YXJlVHVwbGUgZXh0ZW5kcyBhbnlbXSxcclxuICBBY2MgZXh0ZW5kcyB7fVxyXG4+ID0gTWlkZGxld2FyZVR1cGxlIGV4dGVuZHMgW2luZmVyIEhlYWQsIC4uLmluZmVyIFRhaWxdXHJcbiAgPyBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPFxyXG4gICAgICBUYWlsLFxyXG4gICAgICBBY2MgJiAoSGVhZCBleHRlbmRzIE1pZGRsZXdhcmU8aW5mZXIgRD4gPyBJc0FueTxELCB7fSwgRD4gOiB7fSlcclxuICAgID5cclxuICA6IEFjY1xyXG5cclxuZXhwb3J0IHR5cGUgRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9uczxNPiA9IE0gZXh0ZW5kcyBNaWRkbGV3YXJlQXJyYXk8XHJcbiAgaW5mZXIgTWlkZGxld2FyZVR1cGxlXHJcbj5cclxuICA/IEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8TWlkZGxld2FyZVR1cGxlLCB7fT5cclxuICA6IE0gZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU+XHJcbiAgPyBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPFsuLi5NXSwge30+XHJcbiAgOiBuZXZlclxyXG5cclxudHlwZSBFeHRyYWN0U3RvcmVFeHRlbnNpb25zRnJvbUVuaGFuY2VyVHVwbGU8XHJcbiAgRW5oYW5jZXJUdXBsZSBleHRlbmRzIGFueVtdLFxyXG4gIEFjYyBleHRlbmRzIHt9XHJcbj4gPSBFbmhhbmNlclR1cGxlIGV4dGVuZHMgW2luZmVyIEhlYWQsIC4uLmluZmVyIFRhaWxdXHJcbiAgPyBFeHRyYWN0U3RvcmVFeHRlbnNpb25zRnJvbUVuaGFuY2VyVHVwbGU8XHJcbiAgICAgIFRhaWwsXHJcbiAgICAgIEFjYyAmIChIZWFkIGV4dGVuZHMgU3RvcmVFbmhhbmNlcjxpbmZlciBFeHQ+ID8gSXNBbnk8RXh0LCB7fSwgRXh0PiA6IHt9KVxyXG4gICAgPlxyXG4gIDogQWNjXHJcblxyXG5leHBvcnQgdHlwZSBFeHRyYWN0U3RvcmVFeHRlbnNpb25zPEU+ID0gRSBleHRlbmRzIEVuaGFuY2VyQXJyYXk8XHJcbiAgaW5mZXIgRW5oYW5jZXJUdXBsZVxyXG4+XHJcbiAgPyBFeHRyYWN0U3RvcmVFeHRlbnNpb25zRnJvbUVuaGFuY2VyVHVwbGU8RW5oYW5jZXJUdXBsZSwge30+XHJcbiAgOiBFIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPlxyXG4gID8gVW5pb25Ub0ludGVyc2VjdGlvbjxcclxuICAgICAgRVtudW1iZXJdIGV4dGVuZHMgU3RvcmVFbmhhbmNlcjxpbmZlciBFeHQ+XHJcbiAgICAgICAgPyBFeHQgZXh0ZW5kcyB7fVxyXG4gICAgICAgICAgPyBJc0FueTxFeHQsIHt9LCBFeHQ+XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICAgOiB7fVxyXG4gICAgPlxyXG4gIDogbmV2ZXJcclxuXHJcbnR5cGUgRXh0cmFjdFN0YXRlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gIEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBhbnlbXSxcclxuICBBY2MgZXh0ZW5kcyB7fVxyXG4+ID0gRW5oYW5jZXJUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdFN0YXRlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gICAgICBUYWlsLFxyXG4gICAgICBBY2MgJlxyXG4gICAgICAgIChIZWFkIGV4dGVuZHMgU3RvcmVFbmhhbmNlcjxhbnksIGluZmVyIFN0YXRlRXh0PlxyXG4gICAgICAgICAgPyBJc0FueTxTdGF0ZUV4dCwge30sIFN0YXRlRXh0PlxyXG4gICAgICAgICAgOiB7fSlcclxuICAgID5cclxuICA6IEFjY1xyXG5cclxuZXhwb3J0IHR5cGUgRXh0cmFjdFN0YXRlRXh0ZW5zaW9uczxFPiA9IEUgZXh0ZW5kcyBFbmhhbmNlckFycmF5PFxyXG4gIGluZmVyIEVuaGFuY2VyVHVwbGVcclxuPlxyXG4gID8gRXh0cmFjdFN0YXRlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPEVuaGFuY2VyVHVwbGUsIHt9PlxyXG4gIDogRSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcj5cclxuICA/IFVuaW9uVG9JbnRlcnNlY3Rpb248XHJcbiAgICAgIEVbbnVtYmVyXSBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBpbmZlciBTdGF0ZUV4dD5cclxuICAgICAgICA/IFN0YXRlRXh0IGV4dGVuZHMge31cclxuICAgICAgICAgID8gSXNBbnk8U3RhdGVFeHQsIHt9LCBTdGF0ZUV4dD5cclxuICAgICAgICAgIDoge31cclxuICAgICAgICA6IHt9XHJcbiAgICA+XHJcbiAgOiBuZXZlclxyXG5cclxuLyoqXHJcbiAqIEhlbHBlciB0eXBlLiBQYXNzZXMgVCBvdXQgYWdhaW4sIGJ1dCBib3hlcyBpdCBpbiBhIHdheSB0aGF0IGl0IGNhbm5vdFxyXG4gKiBcIndpZGVuXCIgdGhlIHR5cGUgYnkgYWNjaWRlbnQgaWYgaXQgaXMgYSBnZW5lcmljIHRoYXQgc2hvdWxkIGJlIGluZmVycmVkXHJcbiAqIGZyb20gZWxzZXdoZXJlLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIE5vSW5mZXI8VD4gPSBbVF1bVCBleHRlbmRzIGFueSA/IDAgOiBuZXZlcl1cclxuXHJcbmV4cG9ydCB0eXBlIE9taXQ8VCwgSyBleHRlbmRzIGtleW9mIGFueT4gPSBQaWNrPFQsIEV4Y2x1ZGU8a2V5b2YgVCwgSz4+XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVHdWFyZDxUPiB7XHJcbiAgKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGFzTWF0Y2hGdW5jdGlvbjxUPiB7XHJcbiAgbWF0Y2g6IFR5cGVHdWFyZDxUPlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaGFzTWF0Y2hGdW5jdGlvbiA9IDxUPihcclxuICB2OiBNYXRjaGVyPFQ+XHJcbik6IHYgaXMgSGFzTWF0Y2hGdW5jdGlvbjxUPiA9PiB7XHJcbiAgcmV0dXJuIHYgJiYgdHlwZW9mICh2IGFzIEhhc01hdGNoRnVuY3Rpb248VD4pLm1hdGNoID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIE1hdGNoZXI8VD4gPSBIYXNNYXRjaEZ1bmN0aW9uPFQ+IHwgVHlwZUd1YXJkPFQ+XHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBBY3Rpb25Gcm9tTWF0Y2hlcjxNIGV4dGVuZHMgTWF0Y2hlcjxhbnk+PiA9IE0gZXh0ZW5kcyBNYXRjaGVyPFxyXG4gIGluZmVyIFRcclxuPlxyXG4gID8gVFxyXG4gIDogbmV2ZXJcclxuXHJcbmV4cG9ydCB0eXBlIElkPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogVFtLXSB9ICYge31cclxuIiwgImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHtcclxuICBJc1Vua25vd25Pck5vbkluZmVycmFibGUsXHJcbiAgSWZNYXliZVVuZGVmaW5lZCxcclxuICBJZlZvaWQsXHJcbiAgSXNBbnksXHJcbn0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGhhc01hdGNoRnVuY3Rpb24gfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiB3aXRoIGEgc3RyaW5nIHR5cGUgYW5kIGFuIGFzc29jaWF0ZWQgcGF5bG9hZC4gVGhpcyBpcyB0aGVcclxuICogdHlwZSBvZiBhY3Rpb24gcmV0dXJuZWQgYnkgYGNyZWF0ZUFjdGlvbigpYCBhY3Rpb24gY3JlYXRvcnMuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBQIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24ncyBwYXlsb2FkLlxyXG4gKiBAdGVtcGxhdGUgVCB0aGUgdHlwZSB1c2VkIGZvciB0aGUgYWN0aW9uIHR5cGUuXHJcbiAqIEB0ZW1wbGF0ZSBNIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24ncyBtZXRhIChvcHRpb25hbClcclxuICogQHRlbXBsYXRlIEUgVGhlIHR5cGUgb2YgdGhlIGFjdGlvbidzIGVycm9yIChvcHRpb25hbClcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgUGF5bG9hZEFjdGlvbjxcclxuICBQID0gdm9pZCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxyXG4gIE0gPSBuZXZlcixcclxuICBFID0gbmV2ZXJcclxuPiA9IHtcclxuICBwYXlsb2FkOiBQXHJcbiAgdHlwZTogVFxyXG59ICYgKFtNXSBleHRlbmRzIFtuZXZlcl1cclxuICA/IHt9XHJcbiAgOiB7XHJcbiAgICAgIG1ldGE6IE1cclxuICAgIH0pICZcclxuICAoW0VdIGV4dGVuZHMgW25ldmVyXVxyXG4gICAgPyB7fVxyXG4gICAgOiB7XHJcbiAgICAgICAgZXJyb3I6IEVcclxuICAgICAgfSlcclxuXHJcbi8qKlxyXG4gKiBBIFwicHJlcGFyZVwiIG1ldGhvZCB0byBiZSB1c2VkIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mIGBjcmVhdGVBY3Rpb25gLlxyXG4gKiBUYWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIEZsdXggU3RhbmRhcmQgQWN0aW9uIHdpdGhvdXRcclxuICogdHlwZSAod2lsbCBiZSBhZGRlZCBsYXRlcikgdGhhdCAqbXVzdCogY29udGFpbiBhIHBheWxvYWQgKG1pZ2h0IGJlIHVuZGVmaW5lZCkuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFByZXBhcmVBY3Rpb248UD4gPVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQIH0pXHJcbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7IHBheWxvYWQ6IFA7IG1ldGE6IGFueSB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBlcnJvcjogYW55IH0pXHJcbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7IHBheWxvYWQ6IFA7IG1ldGE6IGFueTsgZXJyb3I6IGFueSB9KVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIHZlcnNpb24gb2YgYEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkYC4gTm90IHRvIGJlIHVzZWQgZXh0ZXJuYWxseS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBfQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8XHJcbiAgUEEgZXh0ZW5kcyBQcmVwYXJlQWN0aW9uPGFueT4gfCB2b2lkLFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPiA9IFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxpbmZlciBQPlxyXG4gID8gQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8XHJcbiAgICAgIFBhcmFtZXRlcnM8UEE+LFxyXG4gICAgICBQLFxyXG4gICAgICBULFxyXG4gICAgICBSZXR1cm5UeXBlPFBBPiBleHRlbmRzIHtcclxuICAgICAgICBlcnJvcjogaW5mZXIgRVxyXG4gICAgICB9XHJcbiAgICAgICAgPyBFXHJcbiAgICAgICAgOiBuZXZlcixcclxuICAgICAgUmV0dXJuVHlwZTxQQT4gZXh0ZW5kcyB7XHJcbiAgICAgICAgbWV0YTogaW5mZXIgTVxyXG4gICAgICB9XHJcbiAgICAgICAgPyBNXHJcbiAgICAgICAgOiBuZXZlclxyXG4gICAgPlxyXG4gIDogdm9pZFxyXG5cclxuLyoqXHJcbiAqIEJhc2ljIHR5cGUgZm9yIGFsbCBhY3Rpb24gY3JlYXRvcnMuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBUIGV4dGVuZHMgc3RyaW5nLCBNID0gbmV2ZXIsIEUgPSBuZXZlcj4ge1xyXG4gIHR5cGU6IFRcclxuICBtYXRjaDogKGFjdGlvbjogQWN0aW9uPHVua25vd24+KSA9PiBhY3Rpb24gaXMgUGF5bG9hZEFjdGlvbjxQLCBULCBNLCBFPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgdGhhdCB0YWtlcyBtdWx0aXBsZSBhcmd1bWVudHMgdGhhdCBhcmUgcGFzc2VkXHJcbiAqIHRvIGEgYFByZXBhcmVBY3Rpb25gIG1ldGhvZCB0byBjcmVhdGUgdGhlIGZpbmFsIEFjdGlvbi5cclxuICogQHR5cGVQYXJhbSBBcmdzIGFyZ3VtZW50cyBmb3IgdGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIEB0eXBlUGFyYW0gUCBgcGF5bG9hZGAgdHlwZVxyXG4gKiBAdHlwZVBhcmFtIFQgYHR5cGVgIG5hbWVcclxuICogQHR5cGVQYXJhbSBFIG9wdGlvbmFsIGBlcnJvcmAgdHlwZVxyXG4gKiBAdHlwZVBhcmFtIE0gb3B0aW9uYWwgYG1ldGFgIHR5cGVcclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8XHJcbiAgQXJncyBleHRlbmRzIHVua25vd25bXSxcclxuICBQLFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXHJcbiAgRSA9IG5ldmVyLFxyXG4gIE0gPSBuZXZlclxyXG4+IGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVCwgTSwgRT4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBgQXJnc2Agd2lsbCByZXR1cm5cclxuICAgKiBhbiBBY3Rpb24gd2l0aCBhIHBheWxvYWQgb2YgdHlwZSBgUGAgYW5kIChkZXBlbmRpbmcgb24gdGhlIGBQcmVwYXJlQWN0aW9uYFxyXG4gICAqIG1ldGhvZCB1c2VkKSBhIGBtZXRhYC0gYW5kIGBlcnJvcmAgcHJvcGVydHkgb2YgdHlwZXMgYE1gIGFuZCBgRWAgcmVzcGVjdGl2ZWx5LlxyXG4gICAqL1xyXG4gICguLi5hcmdzOiBBcmdzKTogUGF5bG9hZEFjdGlvbjxQLCBULCBNLCBFPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3Igb2YgdHlwZSBgVGAgdGhhdCB0YWtlcyBhbiBvcHRpb25hbCBwYXlsb2FkIG9mIHR5cGUgYFBgLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25DcmVhdG9yV2l0aE9wdGlvbmFsUGF5bG9hZDxQLCBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBhbiBhcmd1bWVudCB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkIG9mIGBQYC5cclxuICAgKiBDYWxsaW5nIGl0IHdpdGhvdXQgYW4gYXJndW1lbnQgd2lsbCByZXR1cm4gYSBQYXlsb2FkQWN0aW9uIHdpdGggYSBwYXlsb2FkIG9mIGB1bmRlZmluZWRgLlxyXG4gICAqL1xyXG4gIChwYXlsb2FkPzogUCk6IFBheWxvYWRBY3Rpb248UCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgdGFrZXMgbm8gcGF5bG9hZC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjx1bmRlZmluZWQsIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWQgb2YgYHVuZGVmaW5lZGBcclxuICAgKi9cclxuICAobm9Bcmd1bWVudDogdm9pZCk6IFBheWxvYWRBY3Rpb248dW5kZWZpbmVkLCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3Igb2YgdHlwZSBgVGAgdGhhdCByZXF1aXJlcyBhIHBheWxvYWQgb2YgdHlwZSBQLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25DcmVhdG9yV2l0aFBheWxvYWQ8UCwgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz5cclxuICBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYW4gYXJndW1lbnQgd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZCBvZiBgUGBcclxuICAgKi9cclxuICAocGF5bG9hZDogUCk6IFBheWxvYWRBY3Rpb248UCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHdob3NlIGBwYXlsb2FkYCB0eXBlIGNvdWxkIG5vdCBiZSBpbmZlcnJlZC4gQWNjZXB0cyBldmVyeXRoaW5nIGFzIGBwYXlsb2FkYC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhOb25JbmZlcnJhYmxlUGF5bG9hZDxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4gZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjx1bmtub3duLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGFuIGFyZ3VtZW50IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWRcclxuICAgKiBvZiBleGFjdGx5IHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC5cclxuICAgKi9cclxuICA8UFQgZXh0ZW5kcyB1bmtub3duPihwYXlsb2FkOiBQVCk6IFBheWxvYWRBY3Rpb248UFQsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciB0aGF0IHByb2R1Y2VzIGFjdGlvbnMgd2l0aCBhIGBwYXlsb2FkYCBhdHRyaWJ1dGUuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gUCB0aGUgYHBheWxvYWRgIHR5cGVcclxuICogQHR5cGVQYXJhbSBUIHRoZSBgdHlwZWAgb2YgdGhlIHJlc3VsdGluZyBhY3Rpb25cclxuICogQHR5cGVQYXJhbSBQQSBpZiB0aGUgcmVzdWx0aW5nIGFjdGlvbiBpcyBwcmVwcm9jZXNzZWQgYnkgYSBgcHJlcGFyZWAgbWV0aG9kLCB0aGUgc2lnbmF0dXJlIG9mIHNhaWQgbWV0aG9kLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxcclxuICBQID0gdm9pZCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxQPiB8IHZvaWQgPSB2b2lkXHJcbj4gPSBJZlByZXBhcmVBY3Rpb25NZXRob2RQcm92aWRlZDxcclxuICBQQSxcclxuICBfQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8UEEsIFQ+LFxyXG4gIC8vIGVsc2VcclxuICBJc0FueTxcclxuICAgIFAsXHJcbiAgICBBY3Rpb25DcmVhdG9yV2l0aFBheWxvYWQ8YW55LCBUPixcclxuICAgIElzVW5rbm93bk9yTm9uSW5mZXJyYWJsZTxcclxuICAgICAgUCxcclxuICAgICAgQWN0aW9uQ3JlYXRvcldpdGhOb25JbmZlcnJhYmxlUGF5bG9hZDxUPixcclxuICAgICAgLy8gZWxzZVxyXG4gICAgICBJZlZvaWQ8XHJcbiAgICAgICAgUCxcclxuICAgICAgICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQ8VD4sXHJcbiAgICAgICAgLy8gZWxzZVxyXG4gICAgICAgIElmTWF5YmVVbmRlZmluZWQ8XHJcbiAgICAgICAgICBQLFxyXG4gICAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhPcHRpb25hbFBheWxvYWQ8UCwgVD4sXHJcbiAgICAgICAgICAvLyBlbHNlXHJcbiAgICAgICAgICBBY3Rpb25DcmVhdG9yV2l0aFBheWxvYWQ8UCwgVD5cclxuICAgICAgICA+XHJcbiAgICAgID5cclxuICAgID5cclxuICA+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGFjdGlvbiBjcmVhdG9yIGZvciB0aGUgZ2l2ZW4gYWN0aW9uIHR5cGVcclxuICogc3RyaW5nLiBUaGUgYWN0aW9uIGNyZWF0b3IgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSBpbmNsdWRlZFxyXG4gKiBpbiB0aGUgYWN0aW9uIG9iamVjdCBhcyBhIGZpZWxkIGNhbGxlZCBwYXlsb2FkLiBUaGUgYWN0aW9uIGNyZWF0b3IgZnVuY3Rpb25cclxuICogd2lsbCBhbHNvIGhhdmUgaXRzIHRvU3RyaW5nKCkgb3ZlcnJpZGRlbiBzbyB0aGF0IGl0IHJldHVybnMgdGhlIGFjdGlvbiB0eXBlLFxyXG4gKiBhbGxvd2luZyBpdCB0byBiZSB1c2VkIGluIHJlZHVjZXIgbG9naWMgdGhhdCBpcyBsb29raW5nIGZvciB0aGF0IGFjdGlvbiB0eXBlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdHlwZSBUaGUgYWN0aW9uIHR5cGUgdG8gdXNlIGZvciBjcmVhdGVkIGFjdGlvbnMuXHJcbiAqIEBwYXJhbSBwcmVwYXJlIChvcHRpb25hbCkgYSBtZXRob2QgdGhhdCB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB7IHBheWxvYWQgfSBvciB7IHBheWxvYWQsIG1ldGEgfS5cclxuICogICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBnaXZlbiwgdGhlIHJlc3VsdGluZyBhY3Rpb24gY3JlYXRvciB3aWxsIHBhc3MgaXRzIGFyZ3VtZW50cyB0byB0aGlzIG1ldGhvZCB0byBjYWxjdWxhdGUgcGF5bG9hZCAmIG1ldGEuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb248UCA9IHZvaWQsIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxyXG4gIHR5cGU6IFRcclxuKTogUGF5bG9hZEFjdGlvbkNyZWF0b3I8UCwgVD5cclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGFjdGlvbiBjcmVhdG9yIGZvciB0aGUgZ2l2ZW4gYWN0aW9uIHR5cGVcclxuICogc3RyaW5nLiBUaGUgYWN0aW9uIGNyZWF0b3IgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSBpbmNsdWRlZFxyXG4gKiBpbiB0aGUgYWN0aW9uIG9iamVjdCBhcyBhIGZpZWxkIGNhbGxlZCBwYXlsb2FkLiBUaGUgYWN0aW9uIGNyZWF0b3IgZnVuY3Rpb25cclxuICogd2lsbCBhbHNvIGhhdmUgaXRzIHRvU3RyaW5nKCkgb3ZlcnJpZGRlbiBzbyB0aGF0IGl0IHJldHVybnMgdGhlIGFjdGlvbiB0eXBlLFxyXG4gKiBhbGxvd2luZyBpdCB0byBiZSB1c2VkIGluIHJlZHVjZXIgbG9naWMgdGhhdCBpcyBsb29raW5nIGZvciB0aGF0IGFjdGlvbiB0eXBlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdHlwZSBUaGUgYWN0aW9uIHR5cGUgdG8gdXNlIGZvciBjcmVhdGVkIGFjdGlvbnMuXHJcbiAqIEBwYXJhbSBwcmVwYXJlIChvcHRpb25hbCkgYSBtZXRob2QgdGhhdCB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB7IHBheWxvYWQgfSBvciB7IHBheWxvYWQsIG1ldGEgfS5cclxuICogICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBnaXZlbiwgdGhlIHJlc3VsdGluZyBhY3Rpb24gY3JlYXRvciB3aWxsIHBhc3MgaXRzIGFyZ3VtZW50cyB0byB0aGlzIG1ldGhvZCB0byBjYWxjdWxhdGUgcGF5bG9hZCAmIG1ldGEuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb248XHJcbiAgUEEgZXh0ZW5kcyBQcmVwYXJlQWN0aW9uPGFueT4sXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+KFxyXG4gIHR5cGU6IFQsXHJcbiAgcHJlcGFyZUFjdGlvbjogUEFcclxuKTogUGF5bG9hZEFjdGlvbkNyZWF0b3I8UmV0dXJuVHlwZTxQQT5bJ3BheWxvYWQnXSwgVCwgUEE+XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGU6IHN0cmluZywgcHJlcGFyZUFjdGlvbj86IEZ1bmN0aW9uKTogYW55IHtcclxuICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKC4uLmFyZ3M6IGFueVtdKSB7XHJcbiAgICBpZiAocHJlcGFyZUFjdGlvbikge1xyXG4gICAgICBsZXQgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uKC4uLmFyZ3MpXHJcbiAgICAgIGlmICghcHJlcGFyZWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0JylcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHBheWxvYWQ6IHByZXBhcmVkLnBheWxvYWQsXHJcbiAgICAgICAgLi4uKCdtZXRhJyBpbiBwcmVwYXJlZCAmJiB7IG1ldGE6IHByZXBhcmVkLm1ldGEgfSksXHJcbiAgICAgICAgLi4uKCdlcnJvcicgaW4gcHJlcGFyZWQgJiYgeyBlcnJvcjogcHJlcGFyZWQuZXJyb3IgfSksXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IHR5cGUsIHBheWxvYWQ6IGFyZ3NbMF0gfVxyXG4gIH1cclxuXHJcbiAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9ICgpID0+IGAke3R5cGV9YFxyXG5cclxuICBhY3Rpb25DcmVhdG9yLnR5cGUgPSB0eXBlXHJcblxyXG4gIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSAoYWN0aW9uOiBBY3Rpb248dW5rbm93bj4pOiBhY3Rpb24gaXMgUGF5bG9hZEFjdGlvbiA9PlxyXG4gICAgYWN0aW9uLnR5cGUgPT09IHR5cGVcclxuXHJcbiAgcmV0dXJuIGFjdGlvbkNyZWF0b3JcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgYHR5cGVgIHByb3BlcnR5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uKGFjdGlvbjogdW5rbm93bik6IGFjdGlvbiBpcyBBY3Rpb248dW5rbm93bj4ge1xyXG4gIHJldHVybiBpc1BsYWluT2JqZWN0KGFjdGlvbikgJiYgJ3R5cGUnIGluIGFjdGlvblxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIFJUSy1saWtlIGFjdGlvbiBjcmVhdG9yLCB3aXRoIGEgc3RhdGljIHR5cGUgcHJvcGVydHkgYW5kIG1hdGNoIG1ldGhvZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbkNyZWF0b3IoXHJcbiAgYWN0aW9uOiB1bmtub3duXHJcbik6IGFjdGlvbiBpcyBCYXNlQWN0aW9uQ3JlYXRvcjx1bmtub3duLCBzdHJpbmc+ICYgRnVuY3Rpb24ge1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAndHlwZScgaW4gYWN0aW9uICYmXHJcbiAgICAvLyBoYXNNYXRjaEZ1bmN0aW9uIG9ubHkgd2FudHMgTWF0Y2hlcnMgYnV0IEkgZG9uJ3Qgc2VlIHRoZSBwb2ludCBpbiByZXdyaXRpbmcgaXRcclxuICAgIGhhc01hdGNoRnVuY3Rpb24oYWN0aW9uIGFzIGFueSlcclxuICApXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gYWN0aW9uIHdpdGggYSBzdHJpbmcgdHlwZSBhbmQgdmFsaWQgRmx1eCBTdGFuZGFyZCBBY3Rpb24ga2V5cy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZTQShhY3Rpb246IHVua25vd24pOiBhY3Rpb24gaXMge1xyXG4gIHR5cGU6IHN0cmluZ1xyXG4gIHBheWxvYWQ/OiB1bmtub3duXHJcbiAgZXJyb3I/OiB1bmtub3duXHJcbiAgbWV0YT86IHVua25vd25cclxufSB7XHJcbiAgcmV0dXJuIChcclxuICAgIGlzQWN0aW9uKGFjdGlvbikgJiZcclxuICAgIHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3N0cmluZycgJiZcclxuICAgIE9iamVjdC5rZXlzKGFjdGlvbikuZXZlcnkoaXNWYWxpZEtleSlcclxuICApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRLZXkoa2V5OiBzdHJpbmcpIHtcclxuICByZXR1cm4gWyd0eXBlJywgJ3BheWxvYWQnLCAnZXJyb3InLCAnbWV0YSddLmluZGV4T2Yoa2V5KSA+IC0xXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSBvZiB0aGUgYWN0aW9ucyBjcmVhdGVkIGJ5IHRoZSBwYXNzZWRcclxuICogYGNyZWF0ZUFjdGlvbigpYC1nZW5lcmF0ZWQgYWN0aW9uIGNyZWF0b3IgKGFyYml0cmFyeSBhY3Rpb24gY3JlYXRvcnNcclxuICogYXJlIG5vdCBzdXBwb3J0ZWQpLlxyXG4gKlxyXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gY3JlYXRvciB3aG9zZSBhY3Rpb24gdHlwZSB0byBnZXQuXHJcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb24gdHlwZSB1c2VkIGJ5IHRoZSBhY3Rpb24gY3JlYXRvci5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGU8VCBleHRlbmRzIHN0cmluZz4oXHJcbiAgYWN0aW9uQ3JlYXRvcjogUGF5bG9hZEFjdGlvbkNyZWF0b3I8YW55LCBUPlxyXG4pOiBUIHtcclxuICByZXR1cm4gYCR7YWN0aW9uQ3JlYXRvcn1gIGFzIFRcclxufVxyXG5cclxuLy8gaGVscGVyIHR5cGVzIGZvciBtb3JlIHJlYWRhYmxlIHR5cGluZ3NcclxuXHJcbnR5cGUgSWZQcmVwYXJlQWN0aW9uTWV0aG9kUHJvdmlkZWQ8XHJcbiAgUEEgZXh0ZW5kcyBQcmVwYXJlQWN0aW9uPGFueT4gfCB2b2lkLFxyXG4gIFRydWUsXHJcbiAgRmFsc2VcclxuPiA9IFBBIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkgPyBUcnVlIDogRmFsc2VcclxuIiwgImltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBpc0FjdGlvbkNyZWF0b3IgYXMgaXNSVEtBY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaWRlbnRpZnkgd2hldGhlciBhIHZhbHVlIGlzIGFuIGFjdGlvbiBjcmVhdG9yLlxyXG4gICAqIFRoZSBkZWZhdWx0IGNoZWNrcyBmb3IgYSBmdW5jdGlvbiB3aXRoIGEgc3RhdGljIHR5cGUgcHJvcGVydHkgYW5kIG1hdGNoIG1ldGhvZC5cclxuICAgKi9cclxuICBpc0FjdGlvbkNyZWF0b3I/OiAoYWN0aW9uOiB1bmtub3duKSA9PiBhY3Rpb24gaXMgRnVuY3Rpb24gJiB7IHR5cGU/OiB1bmtub3duIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc3NhZ2UodHlwZT86IHVua25vd24pIHtcclxuICBjb25zdCBzcGxpdFR5cGUgPSB0eXBlID8gYCR7dHlwZX1gLnNwbGl0KCcvJykgOiBbXVxyXG4gIGNvbnN0IGFjdGlvbk5hbWUgPSBzcGxpdFR5cGVbc3BsaXRUeXBlLmxlbmd0aCAtIDFdIHx8ICdhY3Rpb25DcmVhdG9yJ1xyXG4gIHJldHVybiBgRGV0ZWN0ZWQgYW4gYWN0aW9uIGNyZWF0b3Igd2l0aCB0eXBlIFwiJHtcclxuICAgIHR5cGUgfHwgJ3Vua25vd24nXHJcbiAgfVwiIGJlaW5nIGRpc3BhdGNoZWQuIFxyXG5NYWtlIHN1cmUgeW91J3JlIGNhbGxpbmcgdGhlIGFjdGlvbiBjcmVhdG9yIGJlZm9yZSBkaXNwYXRjaGluZywgaS5lLiBcXGBkaXNwYXRjaCgke2FjdGlvbk5hbWV9KCkpXFxgIGluc3RlYWQgb2YgXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSlcXGAuIFRoaXMgaXMgbmVjZXNzYXJ5IGV2ZW4gaWYgdGhlIGFjdGlvbiBoYXMgbm8gcGF5bG9hZC5gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShcclxuICBvcHRpb25zOiBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4pOiBNaWRkbGV3YXJlIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbilcclxuICB9XHJcbiAgY29uc3QgeyBpc0FjdGlvbkNyZWF0b3IgPSBpc1JUS0FjdGlvbiB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgaWYgKGlzQWN0aW9uQ3JlYXRvcihhY3Rpb24pKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihnZXRNZXNzYWdlKGFjdGlvbi50eXBlKSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0KGFjdGlvbilcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdGFibGUgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheTogbnVtYmVyLCBmbk5hbWU6IHN0cmluZykge1xyXG4gIGxldCBlbGFwc2VkID0gMFxyXG4gIHJldHVybiB7XHJcbiAgICBtZWFzdXJlVGltZTxUPihmbjogKCkgPT4gVCk6IFQge1xyXG4gICAgICBjb25zdCBzdGFydGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBmbigpXHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWRcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhcm5JZkV4Y2VlZGVkKCkge1xyXG4gICAgICBpZiAoZWxhcHNlZCA+IG1heERlbGF5KSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGAke2ZuTmFtZX0gdG9vayAke2VsYXBzZWR9bXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgJHttYXhEZWxheX1tcy4gXHJcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cclxuSXQgaXMgZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuYClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNaWRkbGV3YXJlQXJyYXk8XHJcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyBNaWRkbGV3YXJlPGFueSwgYW55PltdXHJcbj4gZXh0ZW5kcyBBcnJheTxNaWRkbGV3YXJlc1tudW1iZXJdPiB7XHJcbiAgY29uc3RydWN0b3IoLi4uaXRlbXM6IE1pZGRsZXdhcmVzKVxyXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKVxyXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XHJcbiAgICByZXR1cm4gTWlkZGxld2FyZUFycmF5IGFzIGFueVxyXG4gIH1cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLk1pZGRsZXdhcmVzLCAuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXNdPlxyXG5cclxuICBjb25jYXQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uTWlkZGxld2FyZXMsIC4uLkFkZGl0aW9uYWxNaWRkbGV3YXJlc10+XHJcbiAgY29uY2F0KC4uLmFycjogYW55W10pIHtcclxuICAgIHJldHVybiBzdXBlci5jb25jYXQuYXBwbHkodGhpcywgYXJyKVxyXG4gIH1cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXMsIC4uLk1pZGRsZXdhcmVzXT5cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICAuLi5pdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXMsIC4uLk1pZGRsZXdhcmVzXT5cclxuXHJcbiAgcHJlcGVuZCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBNaWRkbGV3YXJlQXJyYXkoLi4uYXJyWzBdLmNvbmNhdCh0aGlzKSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgTWlkZGxld2FyZUFycmF5KC4uLmFyci5jb25jYXQodGhpcykpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEVuaGFuY2VyQXJyYXk8XHJcbiAgRW5oYW5jZXJzIGV4dGVuZHMgU3RvcmVFbmhhbmNlcjxhbnksIGFueT5bXVxyXG4+IGV4dGVuZHMgQXJyYXk8RW5oYW5jZXJzW251bWJlcl0+IHtcclxuICBjb25zdHJ1Y3RvciguLi5pdGVtczogRW5oYW5jZXJzKVxyXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKVxyXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEVuaGFuY2VyQXJyYXkucHJvdG90eXBlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xyXG4gICAgcmV0dXJuIEVuaGFuY2VyQXJyYXkgYXMgYW55XHJcbiAgfVxyXG5cclxuICBjb25jYXQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uRW5oYW5jZXJzLCAuLi5BZGRpdGlvbmFsRW5oYW5jZXJzXT5cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICAuLi5pdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkVuaGFuY2VycywgLi4uQWRkaXRpb25hbEVuaGFuY2Vyc10+XHJcbiAgY29uY2F0KC4uLmFycjogYW55W10pIHtcclxuICAgIHJldHVybiBzdXBlci5jb25jYXQuYXBwbHkodGhpcywgYXJyKVxyXG4gIH1cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5BZGRpdGlvbmFsRW5oYW5jZXJzLCAuLi5FbmhhbmNlcnNdPlxyXG5cclxuICBwcmVwZW5kPEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICAuLi5pdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkFkZGl0aW9uYWxFbmhhbmNlcnMsIC4uLkVuaGFuY2Vyc10+XHJcblxyXG4gIHByZXBlbmQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRW5oYW5jZXJBcnJheSguLi5hcnJbMF0uY29uY2F0KHRoaXMpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBFbmhhbmNlckFycmF5KC4uLmFyci5jb25jYXQodGhpcykpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplRHJhZnRhYmxlPFQ+KHZhbDogVCkge1xyXG4gIHJldHVybiBpc0RyYWZ0YWJsZSh2YWwpID8gY3JlYXRlTmV4dFN0YXRlKHZhbCwgKCkgPT4ge30pIDogdmFsXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBnZXRUaW1lTWVhc3VyZVV0aWxzIH0gZnJvbSAnLi91dGlscydcclxuXHJcbnR5cGUgRW50cnlQcm9jZXNzb3IgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueVxyXG5cclxuY29uc3QgaXNQcm9kdWN0aW9uOiBib29sZWFuID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG5jb25zdCBwcmVmaXg6IHN0cmluZyA9ICdJbnZhcmlhbnQgZmFpbGVkJ1xyXG5cclxuLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIGNvbmRpdGlvbiBmYWlsc1xyXG4vLyBTdHJpcCBvdXQgZXJyb3IgbWVzc2FnZXMgZm9yIHByb2R1Y3Rpb25cclxuLy8gPiBOb3QgcHJvdmlkaW5nIGFuIGlubGluZSBkZWZhdWx0IGFyZ3VtZW50IGZvciBtZXNzYWdlIGFzIHRoZSByZXN1bHQgaXMgc21hbGxlclxyXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uOiBhbnksIG1lc3NhZ2U/OiBzdHJpbmcpIHtcclxuICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgLy8gQ29uZGl0aW9uIG5vdCBwYXNzZWRcclxuXHJcbiAgLy8gSW4gcHJvZHVjdGlvbiB3ZSBzdHJpcCB0aGUgbWVzc2FnZSBidXQgc3RpbGwgdGhyb3dcclxuICBpZiAoaXNQcm9kdWN0aW9uKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KVxyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBub3QgaW4gcHJvZHVjdGlvbiB3ZSBhbGxvdyB0aGUgbWVzc2FnZSB0byBwYXNzIHRocm91Z2hcclxuICAvLyAqVGhpcyBibG9jayB3aWxsIGJlIHJlbW92ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMqXHJcbiAgdGhyb3cgbmV3IEVycm9yKGAke3ByZWZpeH06ICR7bWVzc2FnZSB8fCAnJ31gKVxyXG59XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdpZnkoXHJcbiAgb2JqOiBhbnksXHJcbiAgc2VyaWFsaXplcj86IEVudHJ5UHJvY2Vzc29yLFxyXG4gIGluZGVudD86IHN0cmluZyB8IG51bWJlcixcclxuICBkZWN5Y2xlcj86IEVudHJ5UHJvY2Vzc29yXHJcbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZXJpYWxpemUoXHJcbiAgc2VyaWFsaXplcj86IEVudHJ5UHJvY2Vzc29yLFxyXG4gIGRlY3ljbGVyPzogRW50cnlQcm9jZXNzb3JcclxuKTogRW50cnlQcm9jZXNzb3Ige1xyXG4gIGxldCBzdGFjazogYW55W10gPSBbXSxcclxuICAgIGtleXM6IGFueVtdID0gW11cclxuXHJcbiAgaWYgKCFkZWN5Y2xlcilcclxuICAgIGRlY3ljbGVyID0gZnVuY3Rpb24gKF86IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgICBpZiAoc3RhY2tbMF0gPT09IHZhbHVlKSByZXR1cm4gJ1tDaXJjdWxhciB+XSdcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAnW0NpcmN1bGFyIH4uJyArIGtleXMuc2xpY2UoMCwgc3RhY2suaW5kZXhPZih2YWx1ZSkpLmpvaW4oJy4nKSArICddJ1xyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmFyIHRoaXNQb3MgPSBzdGFjay5pbmRleE9mKHRoaXMpXHJcbiAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcylcclxuICAgICAgfnRoaXNQb3MgPyBrZXlzLnNwbGljZSh0aGlzUG9zLCBJbmZpbml0eSwga2V5KSA6IGtleXMucHVzaChrZXkpXHJcbiAgICAgIGlmICh+c3RhY2suaW5kZXhPZih2YWx1ZSkpIHZhbHVlID0gZGVjeWNsZXIhLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcclxuICAgIH0gZWxzZSBzdGFjay5wdXNoKHZhbHVlKVxyXG5cclxuICAgIHJldHVybiBzZXJpYWxpemVyID09IG51bGwgPyB2YWx1ZSA6IHNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGBpc0ltbXV0YWJsZWAgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ltbXV0YWJsZURlZmF1bHQodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcclxuICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrRm9yTXV0YXRpb25zKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlUGF0aHM6IElnbm9yZVBhdGhzIHwgdW5kZWZpbmVkLFxyXG4gIG9iajogYW55XHJcbikge1xyXG4gIGNvbnN0IHRyYWNrZWRQcm9wZXJ0aWVzID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKVxyXG4gIHJldHVybiB7XHJcbiAgICBkZXRlY3RNdXRhdGlvbnMoKSB7XHJcbiAgICAgIHJldHVybiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCB0cmFja2VkUHJvcGVydGllcywgb2JqKVxyXG4gICAgfSxcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBUcmFja2VkUHJvcGVydHkge1xyXG4gIHZhbHVlOiBhbnlcclxuICBjaGlsZHJlbjogUmVjb3JkPHN0cmluZywgYW55PlxyXG59XHJcblxyXG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoXHJcbiAgaXNJbW11dGFibGU6IElzSW1tdXRhYmxlRnVuYyxcclxuICBpZ25vcmVQYXRoczogSWdub3JlUGF0aHMgPSBbXSxcclxuICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgcGF0aDogc3RyaW5nID0gJycsXHJcbiAgY2hlY2tlZE9iamVjdHM6IFNldDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IG5ldyBTZXQoKVxyXG4pIHtcclxuICBjb25zdCB0cmFja2VkOiBQYXJ0aWFsPFRyYWNrZWRQcm9wZXJ0eT4gPSB7IHZhbHVlOiBvYmogfVxyXG5cclxuICBpZiAoIWlzSW1tdXRhYmxlKG9iaikgJiYgIWNoZWNrZWRPYmplY3RzLmhhcyhvYmopKSB7XHJcbiAgICBjaGVja2VkT2JqZWN0cy5hZGQob2JqKTtcclxuICAgIHRyYWNrZWQuY2hpbGRyZW4gPSB7fVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoID8gcGF0aCArICcuJyArIGtleSA6IGtleVxyXG4gICAgICBpZiAoaWdub3JlUGF0aHMubGVuZ3RoICYmIGlnbm9yZVBhdGhzLmluZGV4T2YoY2hpbGRQYXRoKSAhPT0gLTEpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoXHJcbiAgICAgICAgaXNJbW11dGFibGUsXHJcbiAgICAgICAgaWdub3JlUGF0aHMsXHJcbiAgICAgICAgb2JqW2tleV0sXHJcbiAgICAgICAgY2hpbGRQYXRoXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHRyYWNrZWQgYXMgVHJhY2tlZFByb3BlcnR5XHJcbn1cclxuXHJcbnR5cGUgSWdub3JlUGF0aHMgPSByZWFkb25seSAoc3RyaW5nIHwgUmVnRXhwKVtdXHJcblxyXG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoXHJcbiAgaXNJbW11dGFibGU6IElzSW1tdXRhYmxlRnVuYyxcclxuICBpZ25vcmVkUGF0aHM6IElnbm9yZVBhdGhzID0gW10sXHJcbiAgdHJhY2tlZFByb3BlcnR5OiBUcmFja2VkUHJvcGVydHksXHJcbiAgb2JqOiBhbnksXHJcbiAgc2FtZVBhcmVudFJlZjogYm9vbGVhbiA9IGZhbHNlLFxyXG4gIHBhdGg6IHN0cmluZyA9ICcnXHJcbik6IHsgd2FzTXV0YXRlZDogYm9vbGVhbjsgcGF0aD86IHN0cmluZyB9IHtcclxuICBjb25zdCBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdW5kZWZpbmVkXHJcblxyXG4gIGNvbnN0IHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmpcclxuXHJcbiAgaWYgKHNhbWVQYXJlbnRSZWYgJiYgIXNhbWVSZWYgJiYgIU51bWJlci5pc05hTihvYmopKSB7XHJcbiAgICByZXR1cm4geyB3YXNNdXRhdGVkOiB0cnVlLCBwYXRoIH1cclxuICB9XHJcblxyXG4gIGlmIChpc0ltbXV0YWJsZShwcmV2T2JqKSB8fCBpc0ltbXV0YWJsZShvYmopKSB7XHJcbiAgICByZXR1cm4geyB3YXNNdXRhdGVkOiBmYWxzZSB9XHJcbiAgfVxyXG5cclxuICAvLyBHYXRoZXIgYWxsIGtleXMgZnJvbSBwcmV2ICh0cmFja2VkKSBhbmQgYWZ0ZXIgb2Jqc1xyXG4gIGNvbnN0IGtleXNUb0RldGVjdDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fVxyXG4gIGZvciAobGV0IGtleSBpbiB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW4pIHtcclxuICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZVxyXG4gIH1cclxuICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWVcclxuICB9XHJcblxyXG4gIGNvbnN0IGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwXHJcblxyXG4gIGZvciAobGV0IGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcclxuICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArICcuJyArIGtleSA6IGtleVxyXG5cclxuICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcclxuICAgICAgY29uc3QgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKChpZ25vcmVkKSA9PiB7XHJcbiAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWRcclxuICAgICAgfSlcclxuICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0TXV0YXRpb25zKFxyXG4gICAgICBpc0ltbXV0YWJsZSxcclxuICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSxcclxuICAgICAgb2JqW2tleV0sXHJcbiAgICAgIHNhbWVSZWYsXHJcbiAgICAgIG5lc3RlZFBhdGhcclxuICAgIClcclxuXHJcbiAgICBpZiAocmVzdWx0Lndhc011dGF0ZWQpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4geyB3YXNNdXRhdGVkOiBmYWxzZSB9XHJcbn1cclxuXHJcbnR5cGUgSXNJbW11dGFibGVGdW5jID0gKHZhbHVlOiBhbnkpID0+IGJvb2xlYW5cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBjb25zaWRlcmVkIHRvIGJlIGltbXV0YWJsZS5cclxuICAgIFRoaXMgZnVuY3Rpb24gaXMgYXBwbGllZCByZWN1cnNpdmVseSB0byBldmVyeSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIHN0YXRlLlxyXG4gICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCByZXR1cm4gdHJ1ZSBmb3IgcHJpbWl0aXZlIHR5cGVzIFxyXG4gICAgKGxpa2UgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwgYW5kIHVuZGVmaW5lZCkuXHJcbiAgICovXHJcbiAgaXNJbW11dGFibGU/OiBJc0ltbXV0YWJsZUZ1bmNcclxuICAvKiogXHJcbiAgICBBbiBhcnJheSBvZiBkb3Qtc2VwYXJhdGVkIHBhdGggc3RyaW5ncyB0aGF0IG1hdGNoIG5hbWVkIG5vZGVzIGZyb20gXHJcbiAgICB0aGUgcm9vdCBzdGF0ZSB0byBpZ25vcmUgd2hlbiBjaGVja2luZyBmb3IgaW1tdXRhYmlsaXR5LlxyXG4gICAgRGVmYXVsdHMgdG8gdW5kZWZpbmVkXHJcbiAgICovXHJcbiAgaWdub3JlZFBhdGhzPzogSWdub3JlUGF0aHNcclxuICAvKiogUHJpbnQgYSB3YXJuaW5nIGlmIGNoZWNrcyB0YWtlIGxvbmdlciB0aGFuIE4gbXMuIERlZmF1bHQ6IDMybXMgKi9cclxuICB3YXJuQWZ0ZXI/OiBudW1iZXJcclxuICAvLyBAZGVwcmVjYXRlZC4gVXNlIGlnbm9yZWRQYXRoc1xyXG4gIGlnbm9yZT86IHN0cmluZ1tdXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWlkZGxld2FyZSB0aGF0IGNoZWNrcyB3aGV0aGVyIGFueSBzdGF0ZSB3YXMgbXV0YXRlZCBpbiBiZXR3ZWVuXHJcbiAqIGRpc3BhdGNoZXMgb3IgZHVyaW5nIGEgZGlzcGF0Y2guIElmIGFueSBtdXRhdGlvbnMgYXJlIGRldGVjdGVkLCBhbiBlcnJvciBpc1xyXG4gKiB0aHJvd24uXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zIE1pZGRsZXdhcmUgb3B0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShcclxuICBvcHRpb25zOiBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuKTogTWlkZGxld2FyZSB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG5cclxuICBsZXQge1xyXG4gICAgaXNJbW11dGFibGUgPSBpc0ltbXV0YWJsZURlZmF1bHQsXHJcbiAgICBpZ25vcmVkUGF0aHMsXHJcbiAgICB3YXJuQWZ0ZXIgPSAzMixcclxuICAgIGlnbm9yZSxcclxuICB9ID0gb3B0aW9uc1xyXG5cclxuICAvLyBBbGlhcyBpZ25vcmUtPmlnbm9yZWRQYXRocywgYnV0IHByZWZlciBpZ25vcmVkUGF0aHMgaWYgcHJlc2VudFxyXG4gIGlnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocyB8fCBpZ25vcmVcclxuXHJcbiAgY29uc3QgdHJhY2sgPSB0cmFja0Zvck11dGF0aW9ucy5iaW5kKG51bGwsIGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMpXHJcblxyXG4gIHJldHVybiAoeyBnZXRTdGF0ZSB9KSA9PiB7XHJcbiAgICBsZXQgc3RhdGUgPSBnZXRTdGF0ZSgpXHJcbiAgICBsZXQgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgIGxldCByZXN1bHRcclxuICAgIHJldHVybiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKFxyXG4gICAgICAgIHdhcm5BZnRlcixcclxuICAgICAgICAnSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4gICAgICApXHJcblxyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpXHJcbiAgICAgICAgLy8gVHJhY2sgYmVmb3JlIHBvdGVudGlhbGx5IG5vdCBtZWV0aW5nIHRoZSBpbnZhcmlhbnRcclxuICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpXHJcblxyXG4gICAgICAgIGludmFyaWFudChcclxuICAgICAgICAgICFyZXN1bHQud2FzTXV0YXRlZCxcclxuICAgICAgICAgIGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBiZXR3ZWVuIGRpc3BhdGNoZXMsIGluIHRoZSBwYXRoICcke1xyXG4gICAgICAgICAgICByZXN1bHQucGF0aCB8fCAnJ1xyXG4gICAgICAgICAgfScuICBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWBcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBjb25zdCBkaXNwYXRjaGVkQWN0aW9uID0gbmV4dChhY3Rpb24pXHJcblxyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpXHJcbiAgICAgICAgLy8gVHJhY2sgYmVmb3JlIHBvdGVudGlhbGx5IG5vdCBtZWV0aW5nIHRoZSBpbnZhcmlhbnRcclxuICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpXHJcblxyXG4gICAgICAgIHJlc3VsdC53YXNNdXRhdGVkICYmXHJcbiAgICAgICAgICBpbnZhcmlhbnQoXHJcbiAgICAgICAgICAgICFyZXN1bHQud2FzTXV0YXRlZCxcclxuICAgICAgICAgICAgYEEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGluc2lkZSBhIGRpc3BhdGNoLCBpbiB0aGUgcGF0aDogJHtcclxuICAgICAgICAgICAgICByZXN1bHQucGF0aCB8fCAnJ1xyXG4gICAgICAgICAgICB9LiBUYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGUgYWN0aW9uICR7c3RyaW5naWZ5KFxyXG4gICAgICAgICAgICAgIGFjdGlvblxyXG4gICAgICAgICAgICApfS4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpYFxyXG4gICAgICAgICAgKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKClcclxuXHJcbiAgICAgIHJldHVybiBkaXNwYXRjaGVkQWN0aW9uXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QnXHJcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBnZXRUaW1lTWVhc3VyZVV0aWxzIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBcInBsYWluXCIsIGkuZS4gYSB2YWx1ZSB0aGF0IGlzIGVpdGhlclxyXG4gKiBkaXJlY3RseSBKU09OLXNlcmlhbGl6YWJsZSAoYm9vbGVhbiwgbnVtYmVyLCBzdHJpbmcsIGFycmF5LCBwbGFpbiBvYmplY3QpXHJcbiAqIG9yIGB1bmRlZmluZWRgLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsIFRoZSB2YWx1ZSB0byBjaGVjay5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW4odmFsOiBhbnkpIHtcclxuICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbFxyXG4gIHJldHVybiAoXHJcbiAgICB2YWwgPT0gbnVsbCB8fFxyXG4gICAgdHlwZSA9PT0gJ3N0cmluZycgfHxcclxuICAgIHR5cGUgPT09ICdib29sZWFuJyB8fFxyXG4gICAgdHlwZSA9PT0gJ251bWJlcicgfHxcclxuICAgIEFycmF5LmlzQXJyYXkodmFsKSB8fFxyXG4gICAgaXNQbGFpbk9iamVjdCh2YWwpXHJcbiAgKVxyXG59XHJcblxyXG5pbnRlcmZhY2UgTm9uU2VyaWFsaXphYmxlVmFsdWUge1xyXG4gIGtleVBhdGg6IHN0cmluZ1xyXG4gIHZhbHVlOiB1bmtub3duXHJcbn1cclxuXHJcbnR5cGUgSWdub3JlUGF0aHMgPSByZWFkb25seSAoc3RyaW5nIHwgUmVnRXhwKVtdXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICB2YWx1ZTogdW5rbm93bixcclxuICBwYXRoOiBzdHJpbmcgPSAnJyxcclxuICBpc1NlcmlhbGl6YWJsZTogKHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuID0gaXNQbGFpbixcclxuICBnZXRFbnRyaWVzPzogKHZhbHVlOiB1bmtub3duKSA9PiBbc3RyaW5nLCBhbnldW10sXHJcbiAgaWdub3JlZFBhdGhzOiBJZ25vcmVQYXRocyA9IFtdLFxyXG4gIGNhY2hlPzogV2Vha1NldDxvYmplY3Q+XHJcbik6IE5vblNlcmlhbGl6YWJsZVZhbHVlIHwgZmFsc2Uge1xyXG4gIGxldCBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTogTm9uU2VyaWFsaXphYmxlVmFsdWUgfCBmYWxzZVxyXG5cclxuICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAga2V5UGF0aDogcGF0aCB8fCAnPHJvb3Q+JyxcclxuICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgaWYgKGNhY2hlPy5oYXModmFsdWUpKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgY29uc3QgZW50cmllcyA9IGdldEVudHJpZXMgIT0gbnVsbCA/IGdldEVudHJpZXModmFsdWUpIDogT2JqZWN0LmVudHJpZXModmFsdWUpXHJcblxyXG4gIGNvbnN0IGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwXHJcblxyXG4gIGZvciAoY29uc3QgW2tleSwgbmVzdGVkVmFsdWVdIG9mIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArICcuJyArIGtleSA6IGtleVxyXG5cclxuICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcclxuICAgICAgY29uc3QgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKChpZ25vcmVkKSA9PiB7XHJcbiAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWRcclxuICAgICAgfSlcclxuICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc1NlcmlhbGl6YWJsZShuZXN0ZWRWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBrZXlQYXRoOiBuZXN0ZWRQYXRoLFxyXG4gICAgICAgIHZhbHVlOiBuZXN0ZWRWYWx1ZSxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKFxyXG4gICAgICAgIG5lc3RlZFZhbHVlLFxyXG4gICAgICAgIG5lc3RlZFBhdGgsXHJcbiAgICAgICAgaXNTZXJpYWxpemFibGUsXHJcbiAgICAgICAgZ2V0RW50cmllcyxcclxuICAgICAgICBpZ25vcmVkUGF0aHMsXHJcbiAgICAgICAgY2FjaGVcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChjYWNoZSAmJiBpc05lc3RlZEZyb3plbih2YWx1ZSkpIGNhY2hlLmFkZCh2YWx1ZSlcclxuXHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZEZyb3plbih2YWx1ZTogb2JqZWN0KSB7XHJcbiAgaWYgKCFPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgZm9yIChjb25zdCBuZXN0ZWRWYWx1ZSBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xyXG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSAhPT0gJ29iamVjdCcgfHwgbmVzdGVkVmFsdWUgPT09IG51bGwpIGNvbnRpbnVlXHJcblxyXG4gICAgaWYgKCFpc05lc3RlZEZyb3plbihuZXN0ZWRWYWx1ZSkpIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWVcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgY29uc2lkZXJlZCBzZXJpYWxpemFibGUuIFRoaXNcclxuICAgKiBmdW5jdGlvbiBpcyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIGV2ZXJ5IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGVcclxuICAgKiBzdGF0ZS4gRGVmYXVsdHMgdG8gYGlzUGxhaW4oKWAuXHJcbiAgICovXHJcbiAgaXNTZXJpYWxpemFibGU/OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXRyaWV2ZSBlbnRyaWVzIGZyb20gZWFjaFxyXG4gICAqIHZhbHVlLiAgSWYgdW5zcGVjaWZpZWQsIGBPYmplY3QuZW50cmllc2Agd2lsbCBiZSB1c2VkLiBEZWZhdWx0c1xyXG4gICAqIHRvIGB1bmRlZmluZWRgLlxyXG4gICAqL1xyXG4gIGdldEVudHJpZXM/OiAodmFsdWU6IGFueSkgPT4gW3N0cmluZywgYW55XVtdXHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGFjdGlvbiB0eXBlcyB0byBpZ25vcmUgd2hlbiBjaGVja2luZyBmb3Igc2VyaWFsaXphYmlsaXR5LlxyXG4gICAqIERlZmF1bHRzIHRvIFtdXHJcbiAgICovXHJcbiAgaWdub3JlZEFjdGlvbnM/OiBzdHJpbmdbXVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBkb3Qtc2VwYXJhdGVkIHBhdGggc3RyaW5ncyBvciByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGlnbm9yZVxyXG4gICAqIHdoZW4gY2hlY2tpbmcgZm9yIHNlcmlhbGl6YWJpbGl0eSwgRGVmYXVsdHMgdG9cclxuICAgKiBbJ21ldGEuYXJnJywgJ21ldGEuYmFzZVF1ZXJ5TWV0YSddXHJcbiAgICovXHJcbiAgaWdub3JlZEFjdGlvblBhdGhzPzogKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBkb3Qtc2VwYXJhdGVkIHBhdGggc3RyaW5ncyBvciByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGlnbm9yZVxyXG4gICAqIHdoZW4gY2hlY2tpbmcgZm9yIHNlcmlhbGl6YWJpbGl0eSwgRGVmYXVsdHMgdG8gW11cclxuICAgKi9cclxuICBpZ25vcmVkUGF0aHM/OiAoc3RyaW5nIHwgUmVnRXhwKVtdXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0aW9uIHRpbWUgd2FybmluZyB0aHJlc2hvbGQuIElmIHRoZSBtaWRkbGV3YXJlIHRha2VzIGxvbmdlclxyXG4gICAqIHRoYW4gYHdhcm5BZnRlcmAgbXMsIGEgd2FybmluZyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZS5cclxuICAgKiBEZWZhdWx0cyB0byAzMm1zLlxyXG4gICAqL1xyXG4gIHdhcm5BZnRlcj86IG51bWJlclxyXG5cclxuICAvKipcclxuICAgKiBPcHQgb3V0IG9mIGNoZWNraW5nIHN0YXRlLiBXaGVuIHNldCB0byBgdHJ1ZWAsIG90aGVyIHN0YXRlLXJlbGF0ZWQgcGFyYW1zIHdpbGwgYmUgaWdub3JlZC5cclxuICAgKi9cclxuICBpZ25vcmVTdGF0ZT86IGJvb2xlYW5cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0IG91dCBvZiBjaGVja2luZyBhY3Rpb25zLiBXaGVuIHNldCB0byBgdHJ1ZWAsIG90aGVyIGFjdGlvbi1yZWxhdGVkIHBhcmFtcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgaWdub3JlQWN0aW9ucz86IGJvb2xlYW5cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0IG91dCBvZiBjYWNoaW5nIHRoZSByZXN1bHRzLiBUaGUgY2FjaGUgdXNlcyBhIFdlYWtTZXQgYW5kIHNwZWVkcyB1cCByZXBlYXRlZCBjaGVja2luZyBwcm9jZXNzZXMuXHJcbiAgICogVGhlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgbm8gYnJvd3NlciBzdXBwb3J0IGZvciBXZWFrU2V0IGlzIHByZXNlbnQuXHJcbiAgICovXHJcbiAgZGlzYWJsZUNhY2hlPzogYm9vbGVhblxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1pZGRsZXdhcmUgdGhhdCwgYWZ0ZXIgZXZlcnkgc3RhdGUgY2hhbmdlLCBjaGVja3MgaWYgdGhlIG5ld1xyXG4gKiBzdGF0ZSBpcyBzZXJpYWxpemFibGUuIElmIGEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSBpcyBmb3VuZCB3aXRoaW4gdGhlXHJcbiAqIHN0YXRlLCBhbiBlcnJvciBpcyBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBNaWRkbGV3YXJlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbik6IE1pZGRsZXdhcmUge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKVxyXG4gIH1cclxuICBjb25zdCB7XHJcbiAgICBpc1NlcmlhbGl6YWJsZSA9IGlzUGxhaW4sXHJcbiAgICBnZXRFbnRyaWVzLFxyXG4gICAgaWdub3JlZEFjdGlvbnMgPSBbXSxcclxuICAgIGlnbm9yZWRBY3Rpb25QYXRocyA9IFsnbWV0YS5hcmcnLCAnbWV0YS5iYXNlUXVlcnlNZXRhJ10sXHJcbiAgICBpZ25vcmVkUGF0aHMgPSBbXSxcclxuICAgIHdhcm5BZnRlciA9IDMyLFxyXG4gICAgaWdub3JlU3RhdGUgPSBmYWxzZSxcclxuICAgIGlnbm9yZUFjdGlvbnMgPSBmYWxzZSxcclxuICAgIGRpc2FibGVDYWNoZSA9IGZhbHNlLFxyXG4gIH0gPSBvcHRpb25zXHJcblxyXG4gIGNvbnN0IGNhY2hlOiBXZWFrU2V0PG9iamVjdD4gfCB1bmRlZmluZWQgPVxyXG4gICAgIWRpc2FibGVDYWNoZSAmJiBXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IHVuZGVmaW5lZFxyXG5cclxuICByZXR1cm4gKHN0b3JlQVBJKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gbmV4dChhY3Rpb24pXHJcblxyXG4gICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyhcclxuICAgICAgd2FybkFmdGVyLFxyXG4gICAgICAnU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4gICAgKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgIWlnbm9yZUFjdGlvbnMgJiZcclxuICAgICAgIShpZ25vcmVkQWN0aW9ucy5sZW5ndGggJiYgaWdub3JlZEFjdGlvbnMuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xKVxyXG4gICAgKSB7XHJcbiAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgaXNTZXJpYWxpemFibGUsXHJcbiAgICAgICAgICBnZXRFbnRyaWVzLFxyXG4gICAgICAgICAgaWdub3JlZEFjdGlvblBhdGhzLFxyXG4gICAgICAgICAgY2FjaGVcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGtleVBhdGgsIHZhbHVlIH0gPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlXHJcblxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgYEEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gYW4gYWN0aW9uLCBpbiB0aGUgcGF0aDogXFxgJHtrZXlQYXRofVxcYC4gVmFsdWU6YCxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICdcXG5UYWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhhdCBkaXNwYXRjaGVkIHRoaXMgYWN0aW9uOiAnLFxyXG4gICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgICdcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKScsXHJcbiAgICAgICAgICAgICdcXG4oVG8gYWxsb3cgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgc2VlOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL3VzYWdlL3VzYWdlLWd1aWRlI3dvcmtpbmctd2l0aC1ub24tc2VyaWFsaXphYmxlLWRhdGEpJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XHJcbiAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpXHJcblxyXG4gICAgICAgIGNvbnN0IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICBpc1NlcmlhbGl6YWJsZSxcclxuICAgICAgICAgIGdldEVudHJpZXMsXHJcbiAgICAgICAgICBpZ25vcmVkUGF0aHMsXHJcbiAgICAgICAgICBjYWNoZVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgeyBrZXlQYXRoLCB2YWx1ZSB9ID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlXHJcblxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgYEEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gdGhlIHN0YXRlLCBpbiB0aGUgcGF0aDogXFxgJHtrZXlQYXRofVxcYC4gVmFsdWU6YCxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIGBcclxuVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhpcyBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX0uXHJcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL29yZ2FuaXppbmctc3RhdGUjY2FuLWktcHV0LWZ1bmN0aW9ucy1wcm9taXNlcy1vci1vdGhlci1ub24tc2VyaWFsaXphYmxlLWl0ZW1zLWluLW15LXN0b3JlLXN0YXRlKWBcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgRHJhZnQgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZSwgeyBpc0RyYWZ0LCBpc0RyYWZ0YWJsZSB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgdHlwZSB7IEFueUFjdGlvbiwgQWN0aW9uLCBSZWR1Y2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXIgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgeyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB0eXBlIHsgTm9JbmZlciB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBmcmVlemVEcmFmdGFibGUgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuLyoqXHJcbiAqIERlZmluZXMgYSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGNvcnJlc3BvbmRpbmcgYWN0aW9uIG9iamVjdCBzaGFwZXMuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG1hbnVhbGx5IC0gaXQgaXMgb25seSB1c2VkIGZvciBpbnRlcm5hbFxyXG4gKiAgICAgICAgICAgICBpbmZlcmVuY2UgcHVycG9zZXMgYW5kIHNob3VsZCBub3QgaGF2ZSBhbnkgZnVydGhlciB2YWx1ZS5cclxuICogICAgICAgICAgICAgSXQgbWlnaHQgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBY3Rpb25zPFQgZXh0ZW5kcyBrZXlvZiBhbnkgPSBzdHJpbmc+ID0gUmVjb3JkPFQsIEFjdGlvbj5cclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCB1c2UgYFR5cGVHdWFyZGAgaW5zdGVhZFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25NYXRjaGVyPEEgZXh0ZW5kcyBBbnlBY3Rpb24+IHtcclxuICAoYWN0aW9uOiBBbnlBY3Rpb24pOiBhY3Rpb24gaXMgQVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb248UywgQSBleHRlbmRzIEFueUFjdGlvbj4gPSB7XHJcbiAgbWF0Y2hlcjogQWN0aW9uTWF0Y2hlcjxBPlxyXG4gIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFMsIE5vSW5mZXI8QT4+XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlYWRvbmx5QWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbjxTPiA9IFJlYWRvbmx5QXJyYXk8XHJcbiAgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uPFMsIGFueT5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbjxTPiA9IEFycmF5PFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbjxTLCBhbnk+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBBICpjYXNlIHJlZHVjZXIqIGlzIGEgcmVkdWNlciBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyBhY3Rpb24gdHlwZS4gQ2FzZVxyXG4gKiByZWR1Y2VycyBjYW4gYmUgY29tcG9zZWQgdG8gZnVsbCByZWR1Y2VycyB1c2luZyBgY3JlYXRlUmVkdWNlcigpYC5cclxuICpcclxuICogVW5saWtlIGEgbm9ybWFsIFJlZHV4IHJlZHVjZXIsIGEgY2FzZSByZWR1Y2VyIGlzIG5ldmVyIGNhbGxlZCB3aXRoIGFuXHJcbiAqIGB1bmRlZmluZWRgIHN0YXRlIHRvIGRldGVybWluZSB0aGUgaW5pdGlhbCBzdGF0ZS4gSW5zdGVhZCwgdGhlIGluaXRpYWxcclxuICogc3RhdGUgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgYW4gYXJndW1lbnQgdG8gYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIEluIGFkZGl0aW9uLCBhIGNhc2UgcmVkdWNlciBjYW4gY2hvb3NlIHRvIG11dGF0ZSB0aGUgcGFzc2VkLWluIGBzdGF0ZWBcclxuICogdmFsdWUgZGlyZWN0bHkgaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBuZXcgc3RhdGUuIFRoaXMgZG9lcyBub3QgYWN0dWFsbHlcclxuICogY2F1c2UgdGhlIHN0b3JlIHN0YXRlIHRvIGJlIG11dGF0ZWQgZGlyZWN0bHk7IGluc3RlYWQsIHRoYW5rcyB0b1xyXG4gKiBbaW1tZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9td2VzdHN0cmF0ZS9pbW1lciksIHRoZSBtdXRhdGlvbnMgYXJlXHJcbiAqIHRyYW5zbGF0ZWQgdG8gY29weSBvcGVyYXRpb25zIHRoYXQgcmVzdWx0IGluIGEgbmV3IHN0YXRlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDYXNlUmVkdWNlcjxTID0gYW55LCBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uPiA9IChcclxuICBzdGF0ZTogRHJhZnQ8Uz4sXHJcbiAgYWN0aW9uOiBBXHJcbikgPT4gTm9JbmZlcjxTPiB8IHZvaWQgfCBEcmFmdDxOb0luZmVyPFM+PlxyXG5cclxuLyoqXHJcbiAqIEEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBjYXNlIHJlZHVjZXJzIGZvciBgY3JlYXRlUmVkdWNlcigpYC5cclxuICpcclxuICogQGRlcHJlY2F0ZWQgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgbWFudWFsbHkgLSBpdCBpcyBvbmx5IHVzZWRcclxuICogICAgICAgICAgICAgZm9yIGludGVybmFsIGluZmVyZW5jZSBwdXJwb3NlcyBhbmQgdXNpbmcgaXQgbWFudWFsbHlcclxuICogICAgICAgICAgICAgd291bGQgbGVhZCB0byB0eXBlIGVyYXN1cmUuXHJcbiAqICAgICAgICAgICAgIEl0IG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXJzPFMsIEFTIGV4dGVuZHMgQWN0aW9ucz4gPSB7XHJcbiAgW1QgaW4ga2V5b2YgQVNdOiBBU1tUXSBleHRlbmRzIEFjdGlvbiA/IENhc2VSZWR1Y2VyPFMsIEFTW1RdPiA6IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTm90RnVuY3Rpb248VD4gPSBUIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IFRcclxuXHJcbmZ1bmN0aW9uIGlzU3RhdGVGdW5jdGlvbjxTPih4OiB1bmtub3duKTogeCBpcyAoKSA9PiBTIHtcclxuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbidcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8UyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4+ID0gUmVkdWNlcjxTPiAmIHtcclxuICBnZXRJbml0aWFsU3RhdGU6ICgpID0+IFNcclxufVxyXG5cclxubGV0IGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSBmYWxzZVxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHJlZHVjZXIgYXMgYSBtYXBwaW5nIGZyb20gYWN0aW9uXHJcbiAqIHR5cGUgdG8gKmNhc2UgcmVkdWNlciogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGFjdGlvbiB0eXBlcy4gVGhlXHJcbiAqIHJlZHVjZXIncyBpbml0aWFsIHN0YXRlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoZSBib2R5IG9mIGV2ZXJ5IGNhc2UgcmVkdWNlciBpcyBpbXBsaWNpdGx5IHdyYXBwZWQgd2l0aCBhIGNhbGwgdG9cclxuICogYHByb2R1Y2UoKWAgZnJvbSB0aGUgW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpIGxpYnJhcnkuXHJcbiAqIFRoaXMgbWVhbnMgdGhhdCByYXRoZXIgdGhhbiByZXR1cm5pbmcgYSBuZXcgc3RhdGUgb2JqZWN0LCB5b3UgY2FuIGFsc29cclxuICogbXV0YXRlIHRoZSBwYXNzZWQtaW4gc3RhdGUgb2JqZWN0IGRpcmVjdGx5OyB0aGVzZSBtdXRhdGlvbnMgd2lsbCB0aGVuIGJlXHJcbiAqIGF1dG9tYXRpY2FsbHkgYW5kIGVmZmljaWVudGx5IHRyYW5zbGF0ZWQgaW50byBjb3BpZXMsIGdpdmluZyB5b3UgYm90aFxyXG4gKiBjb252ZW5pZW5jZSBhbmQgaW1tdXRhYmlsaXR5LlxyXG4gKlxyXG4gKiBAb3ZlcmxvYWRTdW1tYXJ5XHJcbiAqIFRoaXMgb3ZlcmxvYWQgYWNjZXB0cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBgYnVpbGRlcmAgb2JqZWN0IGFzIGl0cyBhcmd1bWVudC5cclxuICogVGhhdCBidWlsZGVyIHByb3ZpZGVzIGBhZGRDYXNlYCwgYGFkZE1hdGNoZXJgIGFuZCBgYWRkRGVmYXVsdENhc2VgIGZ1bmN0aW9ucyB0aGF0IG1heSBiZVxyXG4gKiBjYWxsZWQgdG8gZGVmaW5lIHdoYXQgYWN0aW9ucyB0aGlzIHJlZHVjZXIgd2lsbCBoYW5kbGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgLSBgU3RhdGUgfCAoKCkgPT4gU3RhdGUpYDogVGhlIGluaXRpYWwgc3RhdGUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSByZWR1Y2VyIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZS4gVGhpcyBtYXkgYWxzbyBiZSBhIFwibGF6eSBpbml0aWFsaXplclwiIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgcmV0dXJuIGFuIGluaXRpYWwgc3RhdGUgdmFsdWUgd2hlbiBjYWxsZWQuIFRoaXMgd2lsbCBiZSB1c2VkIHdoZW5ldmVyIHRoZSByZWR1Y2VyIGlzIGNhbGxlZCB3aXRoIGB1bmRlZmluZWRgIGFzIGl0cyBzdGF0ZSB2YWx1ZSwgYW5kIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIGNhc2VzIGxpa2UgcmVhZGluZyBpbml0aWFsIHN0YXRlIGZyb20gYGxvY2FsU3RvcmFnZWAuXHJcbiAqIEBwYXJhbSBidWlsZGVyQ2FsbGJhY2sgLSBgKGJ1aWxkZXI6IEJ1aWxkZXIpID0+IHZvaWRgIEEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyBhICpidWlsZGVyKiBvYmplY3QgdG8gZGVmaW5lXHJcbiAqICAgY2FzZSByZWR1Y2VycyB2aWEgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZShhY3Rpb25DcmVhdG9yT3JUeXBlLCByZWR1Y2VyKWAuXHJcbiAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlQWN0aW9uLFxyXG4gIGNyZWF0ZVJlZHVjZXIsXHJcbiAgQW55QWN0aW9uLFxyXG4gIFBheWxvYWRBY3Rpb24sXHJcbn0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcclxuXHJcbmNvbnN0IGluY3JlbWVudCA9IGNyZWF0ZUFjdGlvbjxudW1iZXI+KFwiaW5jcmVtZW50XCIpO1xyXG5jb25zdCBkZWNyZW1lbnQgPSBjcmVhdGVBY3Rpb248bnVtYmVyPihcImRlY3JlbWVudFwiKTtcclxuXHJcbmZ1bmN0aW9uIGlzQWN0aW9uV2l0aE51bWJlclBheWxvYWQoXHJcbiAgYWN0aW9uOiBBbnlBY3Rpb25cclxuKTogYWN0aW9uIGlzIFBheWxvYWRBY3Rpb248bnVtYmVyPiB7XHJcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24ucGF5bG9hZCA9PT0gXCJudW1iZXJcIjtcclxufVxyXG5cclxuY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoXHJcbiAge1xyXG4gICAgY291bnRlcjogMCxcclxuICAgIHN1bU9mTnVtYmVyUGF5bG9hZHM6IDAsXHJcbiAgICB1bmhhbmRsZWRBY3Rpb25zOiAwLFxyXG4gIH0sXHJcbiAgKGJ1aWxkZXIpID0+IHtcclxuICAgIGJ1aWxkZXJcclxuICAgICAgLmFkZENhc2UoaW5jcmVtZW50LCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIC8vIGFjdGlvbiBpcyBpbmZlcnJlZCBjb3JyZWN0bHkgaGVyZVxyXG4gICAgICAgIHN0YXRlLmNvdW50ZXIgKz0gYWN0aW9uLnBheWxvYWQ7XHJcbiAgICAgIH0pXHJcbiAgICAgIC8vIFlvdSBjYW4gY2hhaW4gY2FsbHMsIG9yIGhhdmUgc2VwYXJhdGUgYGJ1aWxkZXIuYWRkQ2FzZSgpYCBsaW5lcyBlYWNoIHRpbWVcclxuICAgICAgLmFkZENhc2UoZGVjcmVtZW50LCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHN0YXRlLmNvdW50ZXIgLT0gYWN0aW9uLnBheWxvYWQ7XHJcbiAgICAgIH0pXHJcbiAgICAgIC8vIFlvdSBjYW4gYXBwbHkgYSBcIm1hdGNoZXIgZnVuY3Rpb25cIiB0byBpbmNvbWluZyBhY3Rpb25zXHJcbiAgICAgIC5hZGRNYXRjaGVyKGlzQWN0aW9uV2l0aE51bWJlclBheWxvYWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgICAgLy8gYW5kIHByb3ZpZGUgYSBkZWZhdWx0IGNhc2UgaWYgbm8gb3RoZXIgaGFuZGxlcnMgbWF0Y2hlZFxyXG4gICAgICAuYWRkRGVmYXVsdENhc2UoKHN0YXRlLCBhY3Rpb24pID0+IHt9KTtcclxuICB9XHJcbik7XHJcbmBgYFxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdWNlcjxTIGV4dGVuZHMgTm90RnVuY3Rpb248YW55Pj4oXHJcbiAgaW5pdGlhbFN0YXRlOiBTIHwgKCgpID0+IFMpLFxyXG4gIGJ1aWxkZXJDYWxsYmFjazogKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFM+KSA9PiB2b2lkXHJcbik6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgcmVkdWNlciBhcyBhIG1hcHBpbmcgZnJvbSBhY3Rpb25cclxuICogdHlwZSB0byAqY2FzZSByZWR1Y2VyKiBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgYWN0aW9uIHR5cGVzLiBUaGVcclxuICogcmVkdWNlcidzIGluaXRpYWwgc3RhdGUgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICpcclxuICogVGhlIGJvZHkgb2YgZXZlcnkgY2FzZSByZWR1Y2VyIGlzIGltcGxpY2l0bHkgd3JhcHBlZCB3aXRoIGEgY2FsbCB0b1xyXG4gKiBgcHJvZHVjZSgpYCBmcm9tIHRoZSBbaW1tZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9td2VzdHN0cmF0ZS9pbW1lcikgbGlicmFyeS5cclxuICogVGhpcyBtZWFucyB0aGF0IHJhdGhlciB0aGFuIHJldHVybmluZyBhIG5ldyBzdGF0ZSBvYmplY3QsIHlvdSBjYW4gYWxzb1xyXG4gKiBtdXRhdGUgdGhlIHBhc3NlZC1pbiBzdGF0ZSBvYmplY3QgZGlyZWN0bHk7IHRoZXNlIG11dGF0aW9ucyB3aWxsIHRoZW4gYmVcclxuICogYXV0b21hdGljYWxseSBhbmQgZWZmaWNpZW50bHkgdHJhbnNsYXRlZCBpbnRvIGNvcGllcywgZ2l2aW5nIHlvdSBib3RoXHJcbiAqIGNvbnZlbmllbmNlIGFuZCBpbW11dGFiaWxpdHkuXHJcbiAqIFxyXG4gKiBAb3ZlcmxvYWRTdW1tYXJ5XHJcbiAqIFRoaXMgb3ZlcmxvYWQgYWNjZXB0cyBhbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHN0cmluZyBhY3Rpb24gdHlwZXMsIGFuZCB0aGUgdmFsdWVzXHJcbiAqIGFyZSBjYXNlIHJlZHVjZXIgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aG9zZSBhY3Rpb24gdHlwZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgLSBgU3RhdGUgfCAoKCkgPT4gU3RhdGUpYDogVGhlIGluaXRpYWwgc3RhdGUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSByZWR1Y2VyIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZS4gVGhpcyBtYXkgYWxzbyBiZSBhIFwibGF6eSBpbml0aWFsaXplclwiIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgcmV0dXJuIGFuIGluaXRpYWwgc3RhdGUgdmFsdWUgd2hlbiBjYWxsZWQuIFRoaXMgd2lsbCBiZSB1c2VkIHdoZW5ldmVyIHRoZSByZWR1Y2VyIGlzIGNhbGxlZCB3aXRoIGB1bmRlZmluZWRgIGFzIGl0cyBzdGF0ZSB2YWx1ZSwgYW5kIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIGNhc2VzIGxpa2UgcmVhZGluZyBpbml0aWFsIHN0YXRlIGZyb20gYGxvY2FsU3RvcmFnZWAuXHJcbiAqIEBwYXJhbSBhY3Rpb25zTWFwIC0gQW4gb2JqZWN0IG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gX2Nhc2UgcmVkdWNlcnNfLCBlYWNoIG9mIHdoaWNoIGhhbmRsZXMgb25lIHNwZWNpZmljIGFjdGlvbiB0eXBlLlxyXG4gKiBAcGFyYW0gYWN0aW9uTWF0Y2hlcnMgLSBBbiBhcnJheSBvZiBtYXRjaGVyIGRlZmluaXRpb25zIGluIHRoZSBmb3JtIGB7bWF0Y2hlciwgcmVkdWNlcn1gLlxyXG4gKiAgIEFsbCBtYXRjaGluZyByZWR1Y2VycyB3aWxsIGJlIGV4ZWN1dGVkIGluIG9yZGVyLCBpbmRlcGVuZGVudGx5IGlmIGEgY2FzZSByZWR1Y2VyIG1hdGNoZWQgb3Igbm90LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENhc2VSZWR1Y2VyIC0gQSBcImRlZmF1bHQgY2FzZVwiIHJlZHVjZXIgdGhhdCBpcyBleGVjdXRlZCBpZiBubyBjYXNlIHJlZHVjZXIgYW5kIG5vIG1hdGNoZXJcclxuICogICByZWR1Y2VyIHdhcyBleGVjdXRlZCBmb3IgdGhpcyBhY3Rpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbmBgYGpzXHJcbmNvbnN0IGNvdW50ZXJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcigwLCB7XHJcbiAgaW5jcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgKyBhY3Rpb24ucGF5bG9hZCxcclxuICBkZWNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSAtIGFjdGlvbi5wYXlsb2FkXHJcbn0pXHJcblxyXG4vLyBBbHRlcm5hdGVseSwgdXNlIGEgXCJsYXp5IGluaXRpYWxpemVyXCIgdG8gcHJvdmlkZSB0aGUgaW5pdGlhbCBzdGF0ZVxyXG4vLyAod29ya3Mgd2l0aCBlaXRoZXIgZm9ybSBvZiBjcmVhdGVSZWR1Y2VyKVxyXG5jb25zdCBpbml0aWFsU3RhdGUgPSAoKSA9PiAwXHJcbmNvbnN0IGNvdW50ZXJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIHtcclxuICBpbmNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSArIGFjdGlvbi5wYXlsb2FkLFxyXG4gIGRlY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlIC0gYWN0aW9uLnBheWxvYWRcclxufSlcclxuYGBgXHJcbiBcclxuICogQWN0aW9uIGNyZWF0b3JzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgdXNpbmcgW2BjcmVhdGVBY3Rpb25gXSguL2NyZWF0ZUFjdGlvbikgbWF5IGJlIHVzZWQgZGlyZWN0bHkgYXMgdGhlIGtleXMgaGVyZSwgdXNpbmcgY29tcHV0ZWQgcHJvcGVydHkgc3ludGF4OlxyXG5cclxuYGBganNcclxuY29uc3QgaW5jcmVtZW50ID0gY3JlYXRlQWN0aW9uKCdpbmNyZW1lbnQnKVxyXG5jb25zdCBkZWNyZW1lbnQgPSBjcmVhdGVBY3Rpb24oJ2RlY3JlbWVudCcpXHJcblxyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoMCwge1xyXG4gIFtpbmNyZW1lbnRdOiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgKyBhY3Rpb24ucGF5bG9hZCxcclxuICBbZGVjcmVtZW50LnR5cGVdOiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgLSBhY3Rpb24ucGF5bG9hZFxyXG59KVxyXG5gYGBcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXI8XHJcbiAgUyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4sXHJcbiAgQ1IgZXh0ZW5kcyBDYXNlUmVkdWNlcnM8UywgYW55PiA9IENhc2VSZWR1Y2VyczxTLCBhbnk+XHJcbj4oXHJcbiAgaW5pdGlhbFN0YXRlOiBTIHwgKCgpID0+IFMpLFxyXG4gIGFjdGlvbnNNYXA6IENSLFxyXG4gIGFjdGlvbk1hdGNoZXJzPzogQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbjxTPixcclxuICBkZWZhdWx0Q2FzZVJlZHVjZXI/OiBDYXNlUmVkdWNlcjxTPlxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXI8UyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBtYXBPckJ1aWxkZXJDYWxsYmFjazpcclxuICAgIHwgQ2FzZVJlZHVjZXJzPFMsIGFueT5cclxuICAgIHwgKChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTPikgPT4gdm9pZCksXHJcbiAgYWN0aW9uTWF0Y2hlcnM6IFJlYWRvbmx5QWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbjxTPiA9IFtdLFxyXG4gIGRlZmF1bHRDYXNlUmVkdWNlcj86IENhc2VSZWR1Y2VyPFM+XHJcbik6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+IHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uKSB7XHJcbiAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWVcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVSZWR1Y2VyYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVSZWR1Y2VyXCJcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldCBbYWN0aW9uc01hcCwgZmluYWxBY3Rpb25NYXRjaGVycywgZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdID1cclxuICAgIHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKVxyXG4gICAgICA6IFttYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl1cclxuXHJcbiAgLy8gRW5zdXJlIHRoZSBpbml0aWFsIHN0YXRlIGdldHMgZnJvemVuIGVpdGhlciB3YXkgKGlmIGRyYWZ0YWJsZSlcclxuICBsZXQgZ2V0SW5pdGlhbFN0YXRlOiAoKSA9PiBTXHJcbiAgaWYgKGlzU3RhdGVGdW5jdGlvbihpbml0aWFsU3RhdGUpKSB7XHJcbiAgICBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKCkpXHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGZyb3plbkluaXRpYWxTdGF0ZSA9IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUpXHJcbiAgICBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBmcm96ZW5Jbml0aWFsU3RhdGVcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKSwgYWN0aW9uOiBhbnkpOiBTIHtcclxuICAgIGxldCBjYXNlUmVkdWNlcnMgPSBbXHJcbiAgICAgIGFjdGlvbnNNYXBbYWN0aW9uLnR5cGVdLFxyXG4gICAgICAuLi5maW5hbEFjdGlvbk1hdGNoZXJzXHJcbiAgICAgICAgLmZpbHRlcigoeyBtYXRjaGVyIH0pID0+IG1hdGNoZXIoYWN0aW9uKSlcclxuICAgICAgICAubWFwKCh7IHJlZHVjZXIgfSkgPT4gcmVkdWNlciksXHJcbiAgICBdXHJcbiAgICBpZiAoY2FzZVJlZHVjZXJzLmZpbHRlcigoY3IpID0+ICEhY3IpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjYXNlUmVkdWNlcnMgPSBbZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKTogUyA9PiB7XHJcbiAgICAgIGlmIChjYXNlUmVkdWNlcikge1xyXG4gICAgICAgIGlmIChpc0RyYWZ0KHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSBkcmFmdCwgd2UgbXVzdCBhbHJlYWR5IGJlIGluc2lkZSBhIGBjcmVhdGVOZXh0U3RhdGVgIGNhbGwsXHJcbiAgICAgICAgICAvLyBsaWtlbHkgYmVjYXVzZSB0aGlzIGlzIGJlaW5nIHdyYXBwZWQgaW4gYGNyZWF0ZVJlZHVjZXJgLCBgY3JlYXRlU2xpY2VgLCBvciBuZXN0ZWRcclxuICAgICAgICAgIC8vIGluc2lkZSBhbiBleGlzdGluZyBkcmFmdC4gSXQncyBzYWZlIHRvIGp1c3QgcGFzcyB0aGUgZHJhZnQgdG8gdGhlIG11dGF0b3IuXHJcbiAgICAgICAgICBjb25zdCBkcmFmdCA9IHByZXZpb3VzU3RhdGUgYXMgRHJhZnQ8Uz4gLy8gV2UgY2FuIGFzc3VtZSB0aGlzIGlzIGFscmVhZHkgYSBkcmFmdFxyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbilcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGVcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFNcclxuICAgICAgICB9IGVsc2UgaWYgKCFpc0RyYWZ0YWJsZShwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgLy8gSWYgc3RhdGUgaXMgbm90IGRyYWZ0YWJsZSAoZXg6IGEgcHJpbWl0aXZlLCBzdWNoIGFzIDApLCB3ZSB3YW50IHRvIGRpcmVjdGx5XHJcbiAgICAgICAgICAvLyByZXR1cm4gdGhlIGNhc2VSZWR1Y2VyIGZ1bmMgYW5kIG5vdCB3cmFwIGl0IHdpdGggcHJvZHVjZS5cclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKHByZXZpb3VzU3RhdGUgYXMgYW55LCBhY3Rpb24pXHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICAgICAnQSBjYXNlIHJlZHVjZXIgb24gYSBub24tZHJhZnRhYmxlIHZhbHVlIG11c3Qgbm90IHJldHVybiB1bmRlZmluZWQnXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZSBjcmVhdGVOZXh0U3RhdGUoKSBwcm9kdWNlcyBhbiBJbW11dGFibGU8RHJhZnQ8Uz4+IHJhdGhlclxyXG4gICAgICAgICAgLy8gdGhhbiBhbiBJbW11dGFibGU8Uz4sIGFuZCBUeXBlU2NyaXB0IGNhbm5vdCBmaW5kIG91dCBob3cgdG8gcmVjb25jaWxlXHJcbiAgICAgICAgICAvLyB0aGVzZSB0d28gdHlwZXMuXHJcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlKHByZXZpb3VzU3RhdGUsIChkcmFmdDogRHJhZnQ8Uz4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGVcclxuICAgIH0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGVcclxuXHJcbiAgcmV0dXJuIHJlZHVjZXIgYXMgUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz5cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQ2FzZVJlZHVjZXIsXHJcbiAgQ2FzZVJlZHVjZXJzLFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb24sXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5pbXBvcnQgdHlwZSB7IFR5cGVHdWFyZCB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlZEFjdGlvbkNyZWF0b3I8VHlwZSBleHRlbmRzIHN0cmluZz4ge1xyXG4gICguLi5hcmdzOiBhbnlbXSk6IEFjdGlvbjxUeXBlPlxyXG4gIHR5cGU6IFR5cGVcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgYnVpbGRlciBmb3IgYW4gYWN0aW9uIDwtPiByZWR1Y2VyIG1hcC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT4ge1xyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBjYXNlIHJlZHVjZXIgdG8gaGFuZGxlIGEgc2luZ2xlIGV4YWN0IGFjdGlvbiB0eXBlLlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogQWxsIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2VgIG11c3QgY29tZSBiZWZvcmUgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZE1hdGNoZXJgIG9yIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYC5cclxuICAgKiBAcGFyYW0gYWN0aW9uQ3JlYXRvciAtIEVpdGhlciBhIHBsYWluIGFjdGlvbiB0eXBlIHN0cmluZywgb3IgYW4gYWN0aW9uIGNyZWF0b3IgZ2VuZXJhdGVkIGJ5IFtgY3JlYXRlQWN0aW9uYF0oLi9jcmVhdGVBY3Rpb24pIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBhY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBhY3R1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIGFkZENhc2U8QWN0aW9uQ3JlYXRvciBleHRlbmRzIFR5cGVkQWN0aW9uQ3JlYXRvcjxzdHJpbmc+PihcclxuICAgIGFjdGlvbkNyZWF0b3I6IEFjdGlvbkNyZWF0b3IsXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgUmV0dXJuVHlwZTxBY3Rpb25DcmVhdG9yPj5cclxuICApOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT5cclxuICAvKipcclxuICAgKiBBZGRzIGEgY2FzZSByZWR1Y2VyIHRvIGhhbmRsZSBhIHNpbmdsZSBleGFjdCBhY3Rpb24gdHlwZS5cclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlYCBtdXN0IGNvbWUgYmVmb3JlIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBvciBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAuXHJcbiAgICogQHBhcmFtIGFjdGlvbkNyZWF0b3IgLSBFaXRoZXIgYSBwbGFpbiBhY3Rpb24gdHlwZSBzdHJpbmcsIG9yIGFuIGFjdGlvbiBjcmVhdG9yIGdlbmVyYXRlZCBieSBbYGNyZWF0ZUFjdGlvbmBdKC4vY3JlYXRlQWN0aW9uKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYWN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgYWN0dWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBhZGRDYXNlPFR5cGUgZXh0ZW5kcyBzdHJpbmcsIEEgZXh0ZW5kcyBBY3Rpb248VHlwZT4+KFxyXG4gICAgdHlwZTogVHlwZSxcclxuICAgIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBPlxyXG4gICk6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFN0YXRlPlxyXG5cclxuICAvKipcclxuICAgKiBBbGxvd3MgeW91IHRvIG1hdGNoIHlvdXIgaW5jb21pbmcgYWN0aW9ucyBhZ2FpbnN0IHlvdXIgb3duIGZpbHRlciBmdW5jdGlvbiBpbnN0ZWFkIG9mIG9ubHkgdGhlIGBhY3Rpb24udHlwZWAgcHJvcGVydHkuXHJcbiAgICogQHJlbWFya3NcclxuICAgKiBJZiBtdWx0aXBsZSBtYXRjaGVyIHJlZHVjZXJzIG1hdGNoLCBhbGwgb2YgdGhlbSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlclxyXG4gICAqIHRoZXkgd2VyZSBkZWZpbmVkIGluIC0gZXZlbiBpZiBhIGNhc2UgcmVkdWNlciBhbHJlYWR5IG1hdGNoZWQuXHJcbiAgICogQWxsIGNhbGxzIHRvIGBidWlsZGVyLmFkZE1hdGNoZXJgIG11c3QgY29tZSBhZnRlciBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZWAgYW5kIGJlZm9yZSBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgLlxyXG4gICAqIEBwYXJhbSBtYXRjaGVyIC0gQSBtYXRjaGVyIGZ1bmN0aW9uLiBJbiBUeXBlU2NyaXB0LCB0aGlzIHNob3VsZCBiZSBhIFt0eXBlIHByZWRpY2F0ZV0oaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9uYXJyb3dpbmcuaHRtbCN1c2luZy10eXBlLXByZWRpY2F0ZXMpXHJcbiAgICogICBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGFjdHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBjcmVhdGVSZWR1Y2VyLFxyXG4gIEFzeW5jVGh1bmssXHJcbiAgQW55QWN0aW9uLFxyXG59IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcblxyXG50eXBlIEdlbmVyaWNBc3luY1RodW5rID0gQXN5bmNUaHVuazx1bmtub3duLCB1bmtub3duLCBhbnk+O1xyXG5cclxudHlwZSBQZW5kaW5nQWN0aW9uID0gUmV0dXJuVHlwZTxHZW5lcmljQXN5bmNUaHVua1tcInBlbmRpbmdcIl0+O1xyXG50eXBlIFJlamVjdGVkQWN0aW9uID0gUmV0dXJuVHlwZTxHZW5lcmljQXN5bmNUaHVua1tcInJlamVjdGVkXCJdPjtcclxudHlwZSBGdWxmaWxsZWRBY3Rpb24gPSBSZXR1cm5UeXBlPEdlbmVyaWNBc3luY1RodW5rW1wiZnVsZmlsbGVkXCJdPjtcclxuXHJcbmNvbnN0IGluaXRpYWxTdGF0ZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG5jb25zdCByZXNldEFjdGlvbiA9IGNyZWF0ZUFjdGlvbihcInJlc2V0LXRyYWNrZWQtbG9hZGluZy1zdGF0ZVwiKTtcclxuXHJcbmZ1bmN0aW9uIGlzUGVuZGluZ0FjdGlvbihhY3Rpb246IEFueUFjdGlvbik6IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uIHtcclxuICByZXR1cm4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoXCIvcGVuZGluZ1wiKTtcclxufVxyXG5cclxuY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xyXG4gIGJ1aWxkZXJcclxuICAgIC5hZGRDYXNlKHJlc2V0QWN0aW9uLCAoKSA9PiBpbml0aWFsU3RhdGUpXHJcbiAgICAvLyBtYXRjaGVyIGNhbiBiZSBkZWZpbmVkIG91dHNpZGUgYXMgYSB0eXBlIHByZWRpY2F0ZSBmdW5jdGlvblxyXG4gICAgLmFkZE1hdGNoZXIoaXNQZW5kaW5nQWN0aW9uLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZVthY3Rpb24ubWV0YS5yZXF1ZXN0SWRdID0gXCJwZW5kaW5nXCI7XHJcbiAgICB9KVxyXG4gICAgLmFkZE1hdGNoZXIoXHJcbiAgICAgIC8vIG1hdGNoZXIgY2FuIGJlIGRlZmluZWQgaW5saW5lIGFzIGEgdHlwZSBwcmVkaWNhdGUgZnVuY3Rpb25cclxuICAgICAgKGFjdGlvbik6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbiA9PiBhY3Rpb24udHlwZS5lbmRzV2l0aChcIi9yZWplY3RlZFwiKSxcclxuICAgICAgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZVthY3Rpb24ubWV0YS5yZXF1ZXN0SWRdID0gXCJyZWplY3RlZFwiO1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgICAvLyBtYXRjaGVyIGNhbiBqdXN0IHJldHVybiBib29sZWFuIGFuZCB0aGUgbWF0Y2hlciBjYW4gcmVjZWl2ZSBhIGdlbmVyaWMgYXJndW1lbnRcclxuICAgIC5hZGRNYXRjaGVyPEZ1bGZpbGxlZEFjdGlvbj4oXHJcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlLmVuZHNXaXRoKFwiL2Z1bGZpbGxlZFwiKSxcclxuICAgICAgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZVthY3Rpb24ubWV0YS5yZXF1ZXN0SWRdID0gXCJmdWxmaWxsZWRcIjtcclxuICAgICAgfVxyXG4gICAgKTtcclxufSk7XHJcbmBgYFxyXG4gICAqL1xyXG4gIGFkZE1hdGNoZXI8QT4oXHJcbiAgICBtYXRjaGVyOiBUeXBlR3VhcmQ8QT4gfCAoKGFjdGlvbjogYW55KSA9PiBib29sZWFuKSxcclxuICAgIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBIGV4dGVuZHMgQW55QWN0aW9uID8gQSA6IEEgJiBBbnlBY3Rpb24+XHJcbiAgKTogT21pdDxBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT4sICdhZGRDYXNlJz5cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIFwiZGVmYXVsdCBjYXNlXCIgcmVkdWNlciB0aGF0IGlzIGV4ZWN1dGVkIGlmIG5vIGNhc2UgcmVkdWNlciBhbmQgbm8gbWF0Y2hlclxyXG4gICAqIHJlZHVjZXIgd2FzIGV4ZWN1dGVkIGZvciB0aGlzIGFjdGlvbi5cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBmYWxsYmFjayBcImRlZmF1bHQgY2FzZVwiIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuY29uc3QgaW5pdGlhbFN0YXRlID0geyBvdGhlckFjdGlvbnM6IDAgfVxyXG5jb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIGJ1aWxkZXIgPT4ge1xyXG4gIGJ1aWxkZXJcclxuICAgIC8vIC5hZGRDYXNlKC4uLilcclxuICAgIC8vIC5hZGRNYXRjaGVyKC4uLilcclxuICAgIC5hZGREZWZhdWx0Q2FzZSgoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZS5vdGhlckFjdGlvbnMrK1xyXG4gICAgfSlcclxufSlcclxuYGBgXHJcbiAgICovXHJcbiAgYWRkRGVmYXVsdENhc2UocmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIEFueUFjdGlvbj4pOiB7fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2s8Uz4oXHJcbiAgYnVpbGRlckNhbGxiYWNrOiAoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Uz4pID0+IHZvaWRcclxuKTogW1xyXG4gIENhc2VSZWR1Y2VyczxTLCBhbnk+LFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4sXHJcbiAgQ2FzZVJlZHVjZXI8UywgQW55QWN0aW9uPiB8IHVuZGVmaW5lZFxyXG5dIHtcclxuICBjb25zdCBhY3Rpb25zTWFwOiBDYXNlUmVkdWNlcnM8UywgYW55PiA9IHt9XHJcbiAgY29uc3QgYWN0aW9uTWF0Y2hlcnM6IEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBbXVxyXG4gIGxldCBkZWZhdWx0Q2FzZVJlZHVjZXI6IENhc2VSZWR1Y2VyPFMsIEFueUFjdGlvbj4gfCB1bmRlZmluZWRcclxuICBjb25zdCBidWlsZGVyID0ge1xyXG4gICAgYWRkQ2FzZShcclxuICAgICAgdHlwZU9yQWN0aW9uQ3JlYXRvcjogc3RyaW5nIHwgVHlwZWRBY3Rpb25DcmVhdG9yPGFueT4sXHJcbiAgICAgIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFM+XHJcbiAgICApIHtcclxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgICB0byBrZWVwIHRoZSBkZWZpbml0aW9uIGJ5IHRoZSB1c2VyIGluIGxpbmUgd2l0aCBhY3R1YWwgYmVoYXZpb3IsXHJcbiAgICAgICAgIHdlIGVuZm9yY2UgYGFkZENhc2VgIHRvIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGFkZE1hdGNoZXJgXHJcbiAgICAgICAgIGFzIG1hdGNoaW5nIGNhc2VzIHRha2UgcHJlY2VkZW5jZSBvdmVyIG1hdGNoZXJzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKGFjdGlvbk1hdGNoZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYCdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdHlwZSA9XHJcbiAgICAgICAgdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IHR5cGVPckFjdGlvbkNyZWF0b3JcclxuICAgICAgICAgIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlXHJcbiAgICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgYWN0aW9uIHR5cGUnXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlIGluIGFjdGlvbnNNYXApIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIHR3byByZWR1Y2VycyBmb3IgdGhlIHNhbWUgYWN0aW9uIHR5cGUnXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGFjdGlvbnNNYXBbdHlwZV0gPSByZWR1Y2VyXHJcbiAgICAgIHJldHVybiBidWlsZGVyXHJcbiAgICB9LFxyXG4gICAgYWRkTWF0Y2hlcjxBPihcclxuICAgICAgbWF0Y2hlcjogVHlwZUd1YXJkPEE+LFxyXG4gICAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBIGV4dGVuZHMgQW55QWN0aW9uID8gQSA6IEEgJiBBbnlBY3Rpb24+XHJcbiAgICApIHtcclxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdgYnVpbGRlci5hZGRNYXRjaGVyYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHsgbWF0Y2hlciwgcmVkdWNlciB9KVxyXG4gICAgICByZXR1cm4gYnVpbGRlclxyXG4gICAgfSxcclxuICAgIGFkZERlZmF1bHRDYXNlKHJlZHVjZXI6IENhc2VSZWR1Y2VyPFMsIEFueUFjdGlvbj4pIHtcclxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHJlZHVjZXJcclxuICAgICAgcmV0dXJuIGJ1aWxkZXJcclxuICAgIH0sXHJcbiAgfVxyXG4gIGJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKVxyXG4gIHJldHVybiBbYWN0aW9uc01hcCwgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBBbnlBY3Rpb24sIFJlZHVjZXIgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgY3JlYXRlTmV4dFN0YXRlIH0gZnJvbSAnLidcclxuaW1wb3J0IHR5cGUge1xyXG4gIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZCxcclxuICBQYXlsb2FkQWN0aW9uLFxyXG4gIFBheWxvYWRBY3Rpb25DcmVhdG9yLFxyXG4gIFByZXBhcmVBY3Rpb24sXHJcbiAgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkLFxyXG59IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHR5cGUge1xyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxuICBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZSxcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmltcG9ydCB7IGNyZWF0ZVJlZHVjZXIsIE5vdEZ1bmN0aW9uIH0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHsgZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgdHlwZSB7IE5vSW5mZXIgfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgZnJlZXplRHJhZnRhYmxlIH0gZnJvbSAnLi91dGlscydcclxuXHJcbmxldCBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gZmFsc2VcclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBhdHRhY2hlZCB0byBhIHNsaWNlLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIFBheWxvYWRBY3Rpb25DcmVhdG9yIGRpcmVjdGx5XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFNsaWNlQWN0aW9uQ3JlYXRvcjxQPiA9IFBheWxvYWRBY3Rpb25DcmVhdG9yPFA+XHJcblxyXG4vKipcclxuICogVGhlIHJldHVybiB2YWx1ZSBvZiBgY3JlYXRlU2xpY2VgXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2xpY2U8XHJcbiAgU3RhdGUgPSBhbnksXHJcbiAgQ2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+ID0gU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+LFxyXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHNsaWNlIG5hbWUuXHJcbiAgICovXHJcbiAgbmFtZTogTmFtZVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc2xpY2UncyByZWR1Y2VyLlxyXG4gICAqL1xyXG4gIHJlZHVjZXI6IFJlZHVjZXI8U3RhdGU+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGlvbiBjcmVhdG9ycyBmb3IgdGhlIHR5cGVzIG9mIGFjdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgc2xpY2VcclxuICAgKiByZWR1Y2VyLlxyXG4gICAqL1xyXG4gIGFjdGlvbnM6IENhc2VSZWR1Y2VyQWN0aW9uczxDYXNlUmVkdWNlcnMsIE5hbWU+XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbmRpdmlkdWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIHBhc3NlZCBpbiB0aGUgYHJlZHVjZXJzYCBwYXJhbWV0ZXIuXHJcbiAgICogVGhpcyBlbmFibGVzIHJldXNlIGFuZCB0ZXN0aW5nIGlmIHRoZXkgd2VyZSBkZWZpbmVkIGlubGluZSB3aGVuIGNhbGxpbmcgYGNyZWF0ZVNsaWNlYC5cclxuICAgKi9cclxuICBjYXNlUmVkdWNlcnM6IFNsaWNlRGVmaW5lZENhc2VSZWR1Y2VyczxDYXNlUmVkdWNlcnM+XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZSBnaXZlbiB0byB0aGUgc2xpY2UuXHJcbiAgICogSWYgYSBsYXp5IHN0YXRlIGluaXRpYWxpemVyIHdhcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBjYWxsZWQgYW5kIGEgZnJlc2ggdmFsdWUgcmV0dXJuZWQuXHJcbiAgICovXHJcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoKSA9PiBTdGF0ZVxyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNyZWF0ZVNsaWNlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNsaWNlT3B0aW9uczxcclxuICBTdGF0ZSA9IGFueSxcclxuICBDUiBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPiA9IFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPixcclxuICBOYW1lIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzbGljZSdzIG5hbWUuIFVzZWQgdG8gbmFtZXNwYWNlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIHR5cGVzLlxyXG4gICAqL1xyXG4gIG5hbWU6IE5hbWVcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGluaXRpYWwgc3RhdGUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSByZWR1Y2VyIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZS4gVGhpcyBtYXkgYWxzbyBiZSBhIFwibGF6eSBpbml0aWFsaXplclwiIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgcmV0dXJuIGFuIGluaXRpYWwgc3RhdGUgdmFsdWUgd2hlbiBjYWxsZWQuIFRoaXMgd2lsbCBiZSB1c2VkIHdoZW5ldmVyIHRoZSByZWR1Y2VyIGlzIGNhbGxlZCB3aXRoIGB1bmRlZmluZWRgIGFzIGl0cyBzdGF0ZSB2YWx1ZSwgYW5kIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIGNhc2VzIGxpa2UgcmVhZGluZyBpbml0aWFsIHN0YXRlIGZyb20gYGxvY2FsU3RvcmFnZWAuXHJcbiAgICovXHJcbiAgaW5pdGlhbFN0YXRlOiBTdGF0ZSB8ICgoKSA9PiBTdGF0ZSlcclxuXHJcbiAgLyoqXHJcbiAgICogQSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGFjdGlvbi10eXBlLXNwZWNpZmljICpjYXNlIHJlZHVjZXIqXHJcbiAgICogZnVuY3Rpb25zLiBGb3IgZXZlcnkgYWN0aW9uIHR5cGUsIGEgbWF0Y2hpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBiZVxyXG4gICAqIGdlbmVyYXRlZCB1c2luZyBgY3JlYXRlQWN0aW9uKClgLlxyXG4gICAqL1xyXG4gIHJlZHVjZXJzOiBWYWxpZGF0ZVNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlLCBDUj5cclxuXHJcbiAgLyoqXHJcbiAgICogQSBjYWxsYmFjayB0aGF0IHJlY2VpdmVzIGEgKmJ1aWxkZXIqIG9iamVjdCB0byBkZWZpbmVcclxuICAgKiBjYXNlIHJlZHVjZXJzIHZpYSBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlKGFjdGlvbkNyZWF0b3JPclR5cGUsIHJlZHVjZXIpYC5cclxuICAgKiBcclxuICAgKiBBbHRlcm5hdGl2ZWx5LCBhIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gYWN0aW9uLXR5cGUtc3BlY2lmaWMgKmNhc2UgcmVkdWNlcipcclxuICAgKiBmdW5jdGlvbnMuIFRoZXNlIHJlZHVjZXJzIHNob3VsZCBoYXZlIGV4aXN0aW5nIGFjdGlvbiB0eXBlcyB1c2VkXHJcbiAgICogYXMgdGhlIGtleXMsIGFuZCBhY3Rpb24gY3JlYXRvcnMgd2lsbCBfbm90XyBiZSBnZW5lcmF0ZWQuXHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBjcmVhdGVTbGljZSwgQWN0aW9uLCBBbnlBY3Rpb24gfSBmcm9tICdAcmVkdXhqcy90b29sa2l0J1xyXG5jb25zdCBpbmNyZW1lbnRCeSA9IGNyZWF0ZUFjdGlvbjxudW1iZXI+KCdpbmNyZW1lbnRCeScpXHJcbmNvbnN0IGRlY3JlbWVudCA9IGNyZWF0ZUFjdGlvbignZGVjcmVtZW50JylcclxuXHJcbmludGVyZmFjZSBSZWplY3RlZEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XHJcbiAgZXJyb3I6IEVycm9yXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUmVqZWN0ZWRBY3Rpb24oYWN0aW9uOiBBbnlBY3Rpb24pOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb24ge1xyXG4gIHJldHVybiBhY3Rpb24udHlwZS5lbmRzV2l0aCgncmVqZWN0ZWQnKVxyXG59XHJcblxyXG5jcmVhdGVTbGljZSh7XHJcbiAgbmFtZTogJ2NvdW50ZXInLFxyXG4gIGluaXRpYWxTdGF0ZTogMCxcclxuICByZWR1Y2Vyczoge30sXHJcbiAgZXh0cmFSZWR1Y2VyczogYnVpbGRlciA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKGluY3JlbWVudEJ5LCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIC8vIGFjdGlvbiBpcyBpbmZlcnJlZCBjb3JyZWN0bHkgaGVyZSBpZiB1c2luZyBUU1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGNoYWluIGNhbGxzLCBvciBoYXZlIHNlcGFyYXRlIGBidWlsZGVyLmFkZENhc2UoKWAgbGluZXMgZWFjaCB0aW1lXHJcbiAgICAgIC5hZGRDYXNlKGRlY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHt9KVxyXG4gICAgICAvLyBZb3UgY2FuIG1hdGNoIGEgcmFuZ2Ugb2YgYWN0aW9uIHR5cGVzXHJcbiAgICAgIC5hZGRNYXRjaGVyKFxyXG4gICAgICAgIGlzUmVqZWN0ZWRBY3Rpb24sXHJcbiAgICAgICAgLy8gYGFjdGlvbmAgd2lsbCBiZSBpbmZlcnJlZCBhcyBhIFJlamVjdGVkQWN0aW9uIGR1ZSB0byBpc1JlamVjdGVkQWN0aW9uIGJlaW5nIGRlZmluZWQgYXMgYSB0eXBlIGd1YXJkXHJcbiAgICAgICAgKHN0YXRlLCBhY3Rpb24pID0+IHt9XHJcbiAgICAgIClcclxuICAgICAgLy8gYW5kIHByb3ZpZGUgYSBkZWZhdWx0IGNhc2UgaWYgbm8gb3RoZXIgaGFuZGxlcnMgbWF0Y2hlZFxyXG4gICAgICAuYWRkRGVmYXVsdENhc2UoKHN0YXRlLCBhY3Rpb24pID0+IHt9KVxyXG4gICAgfVxyXG59KVxyXG5gYGBcclxuICAgKi9cclxuICBleHRyYVJlZHVjZXJzPzpcclxuICAgIHwgQ2FzZVJlZHVjZXJzPE5vSW5mZXI8U3RhdGU+LCBhbnk+XHJcbiAgICB8ICgoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Tm9JbmZlcjxTdGF0ZT4+KSA9PiB2b2lkKVxyXG59XHJcblxyXG4vKipcclxuICogQSBDYXNlUmVkdWNlciB3aXRoIGEgYHByZXBhcmVgIG1ldGhvZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZTxTdGF0ZSwgQWN0aW9uIGV4dGVuZHMgUGF5bG9hZEFjdGlvbj4gPSB7XHJcbiAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIEFjdGlvbj5cclxuICBwcmVwYXJlOiBQcmVwYXJlQWN0aW9uPEFjdGlvblsncGF5bG9hZCddPlxyXG59XHJcblxyXG4vKipcclxuICogVGhlIHR5cGUgZGVzY3JpYmluZyBhIHNsaWNlJ3MgYHJlZHVjZXJzYCBvcHRpb24uXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPiA9IHtcclxuICBbSzogc3RyaW5nXTpcclxuICAgIHwgQ2FzZVJlZHVjZXI8U3RhdGUsIFBheWxvYWRBY3Rpb248YW55Pj5cclxuICAgIHwgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZTxTdGF0ZSwgUGF5bG9hZEFjdGlvbjxhbnksIHN0cmluZywgYW55LCBhbnk+PlxyXG59XHJcblxyXG50eXBlIFNsaWNlQWN0aW9uVHlwZTxcclxuICBTbGljZU5hbWUgZXh0ZW5kcyBzdHJpbmcsXHJcbiAgQWN0aW9uTmFtZSBleHRlbmRzIGtleW9mIGFueVxyXG4+ID0gQWN0aW9uTmFtZSBleHRlbmRzIHN0cmluZyB8IG51bWJlciA/IGAke1NsaWNlTmFtZX0vJHtBY3Rpb25OYW1lfWAgOiBzdHJpbmdcclxuXHJcbi8qKlxyXG4gKiBEZXJpdmVzIHRoZSBzbGljZSdzIGBhY3Rpb25zYCBwcm9wZXJ0eSBmcm9tIHRoZSBgcmVkdWNlcnNgIG9wdGlvbnNcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXJBY3Rpb25zPFxyXG4gIENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPGFueT4sXHJcbiAgU2xpY2VOYW1lIGV4dGVuZHMgc3RyaW5nXHJcbj4gPSB7XHJcbiAgW1R5cGUgaW4ga2V5b2YgQ2FzZVJlZHVjZXJzXTogQ2FzZVJlZHVjZXJzW1R5cGVdIGV4dGVuZHMgeyBwcmVwYXJlOiBhbnkgfVxyXG4gICAgPyBBY3Rpb25DcmVhdG9yRm9yQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZTxcclxuICAgICAgICBDYXNlUmVkdWNlcnNbVHlwZV0sXHJcbiAgICAgICAgU2xpY2VBY3Rpb25UeXBlPFNsaWNlTmFtZSwgVHlwZT5cclxuICAgICAgPlxyXG4gICAgOiBBY3Rpb25DcmVhdG9yRm9yQ2FzZVJlZHVjZXI8XHJcbiAgICAgICAgQ2FzZVJlZHVjZXJzW1R5cGVdLFxyXG4gICAgICAgIFNsaWNlQWN0aW9uVHlwZTxTbGljZU5hbWUsIFR5cGU+XHJcbiAgICAgID5cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGBQYXlsb2FkQWN0aW9uQ3JlYXRvcmAgdHlwZSBmb3IgYSBwYXNzZWQgYENhc2VSZWR1Y2VyV2l0aFByZXBhcmVgXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBBY3Rpb25DcmVhdG9yRm9yQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZTxcclxuICBDUiBleHRlbmRzIHsgcHJlcGFyZTogYW55IH0sXHJcbiAgVHlwZSBleHRlbmRzIHN0cmluZ1xyXG4+ID0gX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPENSWydwcmVwYXJlJ10sIFR5cGU+XHJcblxyXG4vKipcclxuICogR2V0IGEgYFBheWxvYWRBY3Rpb25DcmVhdG9yYCB0eXBlIGZvciBhIHBhc3NlZCBgQ2FzZVJlZHVjZXJgXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBBY3Rpb25DcmVhdG9yRm9yQ2FzZVJlZHVjZXI8Q1IsIFR5cGUgZXh0ZW5kcyBzdHJpbmc+ID0gQ1IgZXh0ZW5kcyAoXHJcbiAgc3RhdGU6IGFueSxcclxuICBhY3Rpb246IGluZmVyIEFjdGlvblxyXG4pID0+IGFueVxyXG4gID8gQWN0aW9uIGV4dGVuZHMgeyBwYXlsb2FkOiBpbmZlciBQIH1cclxuICAgID8gUGF5bG9hZEFjdGlvbkNyZWF0b3I8UCwgVHlwZT5cclxuICAgIDogQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFR5cGU+XHJcbiAgOiBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQ8VHlwZT5cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0cyB0aGUgQ2FzZVJlZHVjZXJzIG91dCBvZiBhIGByZWR1Y2Vyc2Agb2JqZWN0LCBldmVuIGlmIHRoZXkgYXJlXHJcbiAqIHRlc3RlZCBpbnRvIGEgYENhc2VSZWR1Y2VyV2l0aFByZXBhcmVgLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgU2xpY2VEZWZpbmVkQ2FzZVJlZHVjZXJzPENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPGFueT4+ID0ge1xyXG4gIFtUeXBlIGluIGtleW9mIENhc2VSZWR1Y2Vyc106IENhc2VSZWR1Y2Vyc1tUeXBlXSBleHRlbmRzIHtcclxuICAgIHJlZHVjZXI6IGluZmVyIFJlZHVjZXJcclxuICB9XHJcbiAgICA/IFJlZHVjZXJcclxuICAgIDogQ2FzZVJlZHVjZXJzW1R5cGVdXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VkIG9uIGEgU2xpY2VDYXNlUmVkdWNlcnMgb2JqZWN0LlxyXG4gKiBFbnN1cmVzIHRoYXQgaWYgYSBDYXNlUmVkdWNlciBpcyBhIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYCwgdGhhdFxyXG4gKiB0aGUgYHJlZHVjZXJgIGFuZCB0aGUgYHByZXBhcmVgIGZ1bmN0aW9uIHVzZSB0aGUgc2FtZSB0eXBlIG9mIGBwYXlsb2FkYC5cclxuICpcclxuICogTWlnaHQgZG8gYWRkaXRpb25hbCBzdWNoIGNoZWNrcyBpbiB0aGUgZnV0dXJlLlxyXG4gKlxyXG4gKiBUaGlzIHR5cGUgaXMgb25seSBldmVyIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byB3cml0ZSB5b3VyIG93biB3cmFwcGVyIGFyb3VuZFxyXG4gKiBgY3JlYXRlU2xpY2VgLiBQbGVhc2UgZG9uJ3QgdXNlIGl0IG90aGVyd2lzZSFcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgVmFsaWRhdGVTbGljZUNhc2VSZWR1Y2VyczxcclxuICBTLFxyXG4gIEFDUiBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFM+XHJcbj4gPSBBQ1IgJlxyXG4gIHtcclxuICAgIFtUIGluIGtleW9mIEFDUl06IEFDUltUXSBleHRlbmRzIHtcclxuICAgICAgcmVkdWNlcihzOiBTLCBhY3Rpb24/OiBpbmZlciBBKTogYW55XHJcbiAgICB9XHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgcHJlcGFyZSguLi5hOiBuZXZlcltdKTogT21pdDxBLCAndHlwZSc+XHJcbiAgICAgICAgfVxyXG4gICAgICA6IHt9XHJcbiAgfVxyXG5cclxuZnVuY3Rpb24gZ2V0VHlwZShzbGljZTogc3RyaW5nLCBhY3Rpb25LZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke3NsaWNlfS8ke2FjdGlvbktleX1gXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhbiBpbml0aWFsIHN0YXRlLCBhbiBvYmplY3QgZnVsbCBvZiByZWR1Y2VyXHJcbiAqIGZ1bmN0aW9ucywgYW5kIGEgXCJzbGljZSBuYW1lXCIsIGFuZCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlc1xyXG4gKiBhY3Rpb24gY3JlYXRvcnMgYW5kIGFjdGlvbiB0eXBlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlXHJcbiAqIHJlZHVjZXJzIGFuZCBzdGF0ZS5cclxuICpcclxuICogVGhlIGByZWR1Y2VyYCBhcmd1bWVudCBpcyBwYXNzZWQgdG8gYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTbGljZTxcclxuICBTdGF0ZSxcclxuICBDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4sXHJcbiAgTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+KFxyXG4gIG9wdGlvbnM6IENyZWF0ZVNsaWNlT3B0aW9uczxTdGF0ZSwgQ2FzZVJlZHVjZXJzLCBOYW1lPlxyXG4pOiBTbGljZTxTdGF0ZSwgQ2FzZVJlZHVjZXJzLCBOYW1lPiB7XHJcbiAgY29uc3QgeyBuYW1lIH0gPSBvcHRpb25zXHJcbiAgaWYgKCFuYW1lKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2BuYW1lYCBpcyBhIHJlcXVpcmVkIG9wdGlvbiBmb3IgY3JlYXRlU2xpY2UnKVxyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xyXG4gICkge1xyXG4gICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAnWW91IG11c3QgcHJvdmlkZSBhbiBgaW5pdGlhbFN0YXRlYCB2YWx1ZSB0aGF0IGlzIG5vdCBgdW5kZWZpbmVkYC4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYGluaXRpYWxTdGF0ZWAnXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9XHJcbiAgICB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsU3RhdGUgPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICA/IG9wdGlvbnMuaW5pdGlhbFN0YXRlXHJcbiAgICAgIDogZnJlZXplRHJhZnRhYmxlKG9wdGlvbnMuaW5pdGlhbFN0YXRlKVxyXG5cclxuICBjb25zdCByZWR1Y2VycyA9IG9wdGlvbnMucmVkdWNlcnMgfHwge31cclxuXHJcbiAgY29uc3QgcmVkdWNlck5hbWVzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpXHJcblxyXG4gIGNvbnN0IHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lOiBSZWNvcmQ8c3RyaW5nLCBDYXNlUmVkdWNlcj4gPSB7fVxyXG4gIGNvbnN0IHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBDYXNlUmVkdWNlcj4gPSB7fVxyXG4gIGNvbnN0IGFjdGlvbkNyZWF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4gPSB7fVxyXG5cclxuICByZWR1Y2VyTmFtZXMuZm9yRWFjaCgocmVkdWNlck5hbWUpID0+IHtcclxuICAgIGNvbnN0IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlID0gcmVkdWNlcnNbcmVkdWNlck5hbWVdXHJcbiAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShuYW1lLCByZWR1Y2VyTmFtZSlcclxuXHJcbiAgICBsZXQgY2FzZVJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBhbnk+XHJcbiAgICBsZXQgcHJlcGFyZUNhbGxiYWNrOiBQcmVwYXJlQWN0aW9uPGFueT4gfCB1bmRlZmluZWRcclxuXHJcbiAgICBpZiAoJ3JlZHVjZXInIGluIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlKSB7XHJcbiAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucmVkdWNlclxyXG4gICAgICBwcmVwYXJlQ2FsbGJhY2sgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5wcmVwYXJlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlXHJcbiAgICB9XHJcblxyXG4gICAgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWVbcmVkdWNlck5hbWVdID0gY2FzZVJlZHVjZXJcclxuICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gY2FzZVJlZHVjZXJcclxuICAgIGFjdGlvbkNyZWF0b3JzW3JlZHVjZXJOYW1lXSA9IHByZXBhcmVDYWxsYmFja1xyXG4gICAgICA/IGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQ2FsbGJhY2spXHJcbiAgICAgIDogY3JlYXRlQWN0aW9uKHR5cGUpXHJcbiAgfSlcclxuXHJcbiAgZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKCkge1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uKSB7XHJcbiAgICAgICAgICBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gdHJ1ZVxyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVTbGljZVwiXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBbXHJcbiAgICAgIGV4dHJhUmVkdWNlcnMgPSB7fSxcclxuICAgICAgYWN0aW9uTWF0Y2hlcnMgPSBbXSxcclxuICAgICAgZGVmYXVsdENhc2VSZWR1Y2VyID0gdW5kZWZpbmVkLFxyXG4gICAgXSA9XHJcbiAgICAgIHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09ICdmdW5jdGlvbidcclxuICAgICAgICA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG9wdGlvbnMuZXh0cmFSZWR1Y2VycylcclxuICAgICAgICA6IFtvcHRpb25zLmV4dHJhUmVkdWNlcnNdXHJcblxyXG4gICAgY29uc3QgZmluYWxDYXNlUmVkdWNlcnMgPSB7IC4uLmV4dHJhUmVkdWNlcnMsIC4uLnNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlIH1cclxuXHJcbiAgICByZXR1cm4gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIChidWlsZGVyKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGtleSBpbiBmaW5hbENhc2VSZWR1Y2Vycykge1xyXG4gICAgICAgIGJ1aWxkZXIuYWRkQ2FzZShrZXksIGZpbmFsQ2FzZVJlZHVjZXJzW2tleV0gYXMgQ2FzZVJlZHVjZXI8YW55PilcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBtIG9mIGFjdGlvbk1hdGNoZXJzKSB7XHJcbiAgICAgICAgYnVpbGRlci5hZGRNYXRjaGVyKG0ubWF0Y2hlciwgbS5yZWR1Y2VyKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICBidWlsZGVyLmFkZERlZmF1bHRDYXNlKGRlZmF1bHRDYXNlUmVkdWNlcilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxldCBfcmVkdWNlcjogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8U3RhdGU+XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lLFxyXG4gICAgcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XHJcbiAgICAgIGlmICghX3JlZHVjZXIpIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKClcclxuXHJcbiAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKVxyXG4gICAgfSxcclxuICAgIGFjdGlvbnM6IGFjdGlvbkNyZWF0b3JzIGFzIGFueSxcclxuICAgIGNhc2VSZWR1Y2Vyczogc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUgYXMgYW55LFxyXG4gICAgZ2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpXHJcblxyXG4gICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKClcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlPFY+KCk6IEVudGl0eVN0YXRlPFY+IHtcclxuICByZXR1cm4ge1xyXG4gICAgaWRzOiBbXSxcclxuICAgIGVudGl0aWVzOiB7fSxcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5PFY+KCkge1xyXG4gIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpOiBFbnRpdHlTdGF0ZTxWPlxyXG4gIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZTxTIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGFkZGl0aW9uYWxTdGF0ZTogU1xyXG4gICk6IEVudGl0eVN0YXRlPFY+ICYgU1xyXG4gIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGU6IGFueSA9IHt9KTogYW55IHtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpXHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBnZXRJbml0aWFsU3RhdGUgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IFNlbGVjdG9yIH0gZnJvbSAncmVzZWxlY3QnXHJcbmltcG9ydCB7IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yIH0gZnJvbSAnLi4vY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3InXHJcbmltcG9ydCB0eXBlIHtcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlTZWxlY3RvcnMsXHJcbiAgRGljdGlvbmFyeSxcclxuICBFbnRpdHlJZCxcclxufSBmcm9tICcuL21vZGVscydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5PFQ+KCkge1xyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9ycygpOiBFbnRpdHlTZWxlY3RvcnM8VCwgRW50aXR5U3RhdGU8VD4+XHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzPFY+KFxyXG4gICAgc2VsZWN0U3RhdGU6IChzdGF0ZTogVikgPT4gRW50aXR5U3RhdGU8VD5cclxuICApOiBFbnRpdHlTZWxlY3RvcnM8VCwgVj5cclxuICBmdW5jdGlvbiBnZXRTZWxlY3RvcnM8Vj4oXHJcbiAgICBzZWxlY3RTdGF0ZT86IChzdGF0ZTogVikgPT4gRW50aXR5U3RhdGU8VD5cclxuICApOiBFbnRpdHlTZWxlY3RvcnM8VCwgYW55PiB7XHJcbiAgICBjb25zdCBzZWxlY3RJZHMgPSAoc3RhdGU6IEVudGl0eVN0YXRlPFQ+KSA9PiBzdGF0ZS5pZHNcclxuXHJcbiAgICBjb25zdCBzZWxlY3RFbnRpdGllcyA9IChzdGF0ZTogRW50aXR5U3RhdGU8VD4pID0+IHN0YXRlLmVudGl0aWVzXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0QWxsID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IoXHJcbiAgICAgIHNlbGVjdElkcyxcclxuICAgICAgc2VsZWN0RW50aXRpZXMsXHJcbiAgICAgIChpZHMsIGVudGl0aWVzKTogVFtdID0+IGlkcy5tYXAoKGlkKSA9PiBlbnRpdGllc1tpZF0hKVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdElkID0gKF86IHVua25vd24sIGlkOiBFbnRpdHlJZCkgPT4gaWRcclxuXHJcbiAgICBjb25zdCBzZWxlY3RCeUlkID0gKGVudGl0aWVzOiBEaWN0aW9uYXJ5PFQ+LCBpZDogRW50aXR5SWQpID0+IGVudGl0aWVzW2lkXVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdFRvdGFsID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0SWRzLCAoaWRzKSA9PiBpZHMubGVuZ3RoKVxyXG5cclxuICAgIGlmICghc2VsZWN0U3RhdGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzZWxlY3RJZHMsXHJcbiAgICAgICAgc2VsZWN0RW50aXRpZXMsXHJcbiAgICAgICAgc2VsZWN0QWxsLFxyXG4gICAgICAgIHNlbGVjdFRvdGFsLFxyXG4gICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICAgICAgc2VsZWN0RW50aXRpZXMsXHJcbiAgICAgICAgICBzZWxlY3RJZCxcclxuICAgICAgICAgIHNlbGVjdEJ5SWRcclxuICAgICAgICApLFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IoXHJcbiAgICAgIHNlbGVjdFN0YXRlIGFzIFNlbGVjdG9yPFYsIEVudGl0eVN0YXRlPFQ+PixcclxuICAgICAgc2VsZWN0RW50aXRpZXNcclxuICAgIClcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZWxlY3RJZHM6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RJZHMpLFxyXG4gICAgICBzZWxlY3RFbnRpdGllczogc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzLFxyXG4gICAgICBzZWxlY3RBbGw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RBbGwpLFxyXG4gICAgICBzZWxlY3RUb3RhbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdFRvdGFsKSxcclxuICAgICAgc2VsZWN0QnlJZDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IoXHJcbiAgICAgICAgc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzLFxyXG4gICAgICAgIHNlbGVjdElkLFxyXG4gICAgICAgIHNlbGVjdEJ5SWRcclxuICAgICAgKSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7IGdldFNlbGVjdG9ycyB9XHJcbn1cclxuIiwgImltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgdHlwZSB7IEVudGl0eVN0YXRlLCBQcmV2ZW50QW55IH0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEFjdGlvbiB9IGZyb20gJy4uL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgaXNGU0EgfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IElzQW55IH0gZnJvbSAnLi4vdHNIZWxwZXJzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcjxWPihcclxuICBtdXRhdG9yOiAoc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PiB2b2lkXHJcbikge1xyXG4gIGNvbnN0IG9wZXJhdG9yID0gY3JlYXRlU3RhdGVPcGVyYXRvcigoXzogdW5kZWZpbmVkLCBzdGF0ZTogRW50aXR5U3RhdGU8Vj4pID0+XHJcbiAgICBtdXRhdG9yKHN0YXRlKVxyXG4gIClcclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbjxTIGV4dGVuZHMgRW50aXR5U3RhdGU8Vj4+KFxyXG4gICAgc3RhdGU6IFByZXZlbnRBbnk8UywgVj5cclxuICApOiBTIHtcclxuICAgIHJldHVybiBvcGVyYXRvcihzdGF0ZSBhcyBTLCB1bmRlZmluZWQpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RhdGVPcGVyYXRvcjxWLCBSPihcclxuICBtdXRhdG9yOiAoYXJnOiBSLCBzdGF0ZTogRW50aXR5U3RhdGU8Vj4pID0+IHZvaWRcclxuKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbjxTIGV4dGVuZHMgRW50aXR5U3RhdGU8Vj4+KFxyXG4gICAgc3RhdGU6IFMsXHJcbiAgICBhcmc6IFIgfCBQYXlsb2FkQWN0aW9uPFI+XHJcbiAgKTogUyB7XHJcbiAgICBmdW5jdGlvbiBpc1BheWxvYWRBY3Rpb25Bcmd1bWVudChcclxuICAgICAgYXJnOiBSIHwgUGF5bG9hZEFjdGlvbjxSPlxyXG4gICAgKTogYXJnIGlzIFBheWxvYWRBY3Rpb248Uj4ge1xyXG4gICAgICByZXR1cm4gaXNGU0EoYXJnKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJ1bk11dGF0b3IgPSAoZHJhZnQ6IEVudGl0eVN0YXRlPFY+KSA9PiB7XHJcbiAgICAgIGlmIChpc1BheWxvYWRBY3Rpb25Bcmd1bWVudChhcmcpKSB7XHJcbiAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRHJhZnQoc3RhdGUpKSB7XHJcbiAgICAgIC8vIHdlIG11c3QgYWxyZWFkeSBiZSBpbnNpZGUgYSBgY3JlYXRlTmV4dFN0YXRlYCBjYWxsLCBsaWtlbHkgYmVjYXVzZVxyXG4gICAgICAvLyB0aGlzIGlzIGJlaW5nIHdyYXBwZWQgaW4gYGNyZWF0ZVJlZHVjZXJgIG9yIGBjcmVhdGVTbGljZWAuXHJcbiAgICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IHBhc3MgdGhlIGRyYWZ0IHRvIHRoZSBtdXRhdG9yLlxyXG4gICAgICBydW5NdXRhdG9yKHN0YXRlKVxyXG5cclxuICAgICAgLy8gc2luY2UgaXQncyBhIGRyYWZ0LCB3ZSdsbCBqdXN0IHJldHVybiBpdFxyXG4gICAgICByZXR1cm4gc3RhdGVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmUgY3JlYXRlTmV4dFN0YXRlKCkgcHJvZHVjZXMgYW4gSW1tdXRhYmxlPERyYWZ0PFM+PiByYXRoZXJcclxuICAgICAgLy8gdGhhbiBhbiBJbW11dGFibGU8Uz4sIGFuZCBUeXBlU2NyaXB0IGNhbm5vdCBmaW5kIG91dCBob3cgdG8gcmVjb25jaWxlXHJcbiAgICAgIC8vIHRoZXNlIHR3byB0eXBlcy5cclxuICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZShzdGF0ZSwgcnVuTXV0YXRvcilcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgRW50aXR5U3RhdGUsIElkU2VsZWN0b3IsIFVwZGF0ZSwgRW50aXR5SWQgfSBmcm9tICcuL21vZGVscydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJZFZhbHVlPFQ+KGVudGl0eTogVCwgc2VsZWN0SWQ6IElkU2VsZWN0b3I8VD4pIHtcclxuICBjb25zdCBrZXkgPSBzZWxlY3RJZChlbnRpdHkpXHJcblxyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGtleSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICdUaGUgZW50aXR5IHBhc3NlZCB0byB0aGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCB1bmRlZmluZWQuJyxcclxuICAgICAgJ1lvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLicsXHJcbiAgICAgICdUaGUgZW50aXR5IHRoYXQgd2FzIHBhc3NlZDonLFxyXG4gICAgICBlbnRpdHksXHJcbiAgICAgICdUaGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbjonLFxyXG4gICAgICBzZWxlY3RJZC50b1N0cmluZygpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICByZXR1cm4ga2V5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5PFQ+KFxyXG4gIGVudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+XHJcbik6IHJlYWRvbmx5IFRbXSB7XHJcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVudGl0aWVzKSkge1xyXG4gICAgZW50aXRpZXMgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGVudGl0aWVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzPFQ+KFxyXG4gIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+LFxyXG4gIHN0YXRlOiBFbnRpdHlTdGF0ZTxUPlxyXG4pOiBbVFtdLCBVcGRhdGU8VD5bXV0ge1xyXG4gIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgY29uc3QgYWRkZWQ6IFRbXSA9IFtdXHJcbiAgY29uc3QgdXBkYXRlZDogVXBkYXRlPFQ+W10gPSBbXVxyXG5cclxuICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgY29uc3QgaWQgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpXHJcbiAgICBpZiAoaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgdXBkYXRlZC5wdXNoKHsgaWQsIGNoYW5nZXM6IGVudGl0eSB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWRkZWQucHVzaChlbnRpdHkpXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBbYWRkZWQsIHVwZGF0ZWRdXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlTdGF0ZUFkYXB0ZXIsXHJcbiAgSWRTZWxlY3RvcixcclxuICBVcGRhdGUsXHJcbiAgRW50aXR5SWQsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlU3RhdGVPcGVyYXRvcixcclxuICBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IsXHJcbn0gZnJvbSAnLi9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQge1xyXG4gIHNlbGVjdElkVmFsdWUsXHJcbiAgZW5zdXJlRW50aXRpZXNBcnJheSxcclxuICBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzLFxyXG59IGZyb20gJy4vdXRpbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXI8VD4oXHJcbiAgc2VsZWN0SWQ6IElkU2VsZWN0b3I8VD5cclxuKTogRW50aXR5U3RhdGVBZGFwdGVyPFQ+IHtcclxuICB0eXBlIFIgPSBFbnRpdHlTdGF0ZTxUPlxyXG5cclxuICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZClcclxuXHJcbiAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlLmlkcy5wdXNoKGtleSlcclxuICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIG5ld0VudGl0aWVzKSB7XHJcbiAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgY29uc3Qga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKVxyXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xyXG4gICAgICBzdGF0ZS5pZHMucHVzaChrZXkpXHJcbiAgICB9XHJcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIG5ld0VudGl0aWVzKSB7XHJcbiAgICAgIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldEFsbE11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gICAgc3RhdGUuaWRzID0gW11cclxuICAgIHN0YXRlLmVudGl0aWVzID0ge31cclxuXHJcbiAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleTogRW50aXR5SWQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlTWFueU11dGFibHkoa2V5czogcmVhZG9ubHkgRW50aXR5SWRbXSwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIGxldCBkaWRNdXRhdGUgPSBmYWxzZVxyXG5cclxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNba2V5XVxyXG4gICAgICAgIGRpZE11dGF0ZSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoZGlkTXV0YXRlKSB7XHJcbiAgICAgIHN0YXRlLmlkcyA9IHN0YXRlLmlkcy5maWx0ZXIoKGlkKSA9PiBpZCBpbiBzdGF0ZS5lbnRpdGllcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZUFsbE11dGFibHkoc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIHtcclxuICAgICAgaWRzOiBbXSxcclxuICAgICAgZW50aXRpZXM6IHt9LFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRha2VOZXdLZXkoXHJcbiAgICBrZXlzOiB7IFtpZDogc3RyaW5nXTogRW50aXR5SWQgfSxcclxuICAgIHVwZGF0ZTogVXBkYXRlPFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgY29uc3QgdXBkYXRlZDogVCA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsLCB1cGRhdGUuY2hhbmdlcylcclxuICAgIGNvbnN0IG5ld0tleSA9IHNlbGVjdElkVmFsdWUodXBkYXRlZCwgc2VsZWN0SWQpXHJcbiAgICBjb25zdCBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZFxyXG5cclxuICAgIGlmIChoYXNOZXdLZXkpIHtcclxuICAgICAga2V5c1t1cGRhdGUuaWRdID0gbmV3S2V5XHJcbiAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGUuZW50aXRpZXNbbmV3S2V5XSA9IHVwZGF0ZWRcclxuXHJcbiAgICByZXR1cm4gaGFzTmV3S2V5XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZTogVXBkYXRlPFQ+LCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KFxyXG4gICAgdXBkYXRlczogUmVhZG9ubHlBcnJheTxVcGRhdGU8VD4+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld0tleXM6IHsgW2lkOiBzdHJpbmddOiBFbnRpdHlJZCB9ID0ge31cclxuXHJcbiAgICBjb25zdCB1cGRhdGVzUGVyRW50aXR5OiB7IFtpZDogc3RyaW5nXTogVXBkYXRlPFQ+IH0gPSB7fVxyXG5cclxuICAgIHVwZGF0ZXMuZm9yRWFjaCgodXBkYXRlKSA9PiB7XHJcbiAgICAgIC8vIE9ubHkgYXBwbHkgdXBkYXRlcyB0byBlbnRpdGllcyB0aGF0IGN1cnJlbnRseSBleGlzdFxyXG4gICAgICBpZiAodXBkYXRlLmlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHVwZGF0ZXMgdG8gb25lIGVudGl0eSwgbWVyZ2UgdGhlbSB0b2dldGhlclxyXG4gICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcclxuICAgICAgICAgIGlkOiB1cGRhdGUuaWQsXHJcbiAgICAgICAgICAvLyBTcHJlYWRzIGlnbm9yZSBmYWxzeSB2YWx1ZXMsIHNvIHRoaXMgd29ya3MgZXZlbiBpZiB0aGVyZSBpc24ndFxyXG4gICAgICAgICAgLy8gYW4gZXhpc3RpbmcgdXBkYXRlIGFscmVhZHkgYXQgdGhpcyBrZXlcclxuICAgICAgICAgIGNoYW5nZXM6IHtcclxuICAgICAgICAgICAgLi4uKHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXVxyXG4gICAgICAgICAgICAgID8gdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdLmNoYW5nZXNcclxuICAgICAgICAgICAgICA6IG51bGwpLFxyXG4gICAgICAgICAgICAuLi51cGRhdGUuY2hhbmdlcyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHVwZGF0ZXMgPSBPYmplY3QudmFsdWVzKHVwZGF0ZXNQZXJFbnRpdHkpXHJcblxyXG4gICAgY29uc3QgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDBcclxuXHJcbiAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcclxuICAgICAgY29uc3QgZGlkTXV0YXRlSWRzID1cclxuICAgICAgICB1cGRhdGVzLmZpbHRlcigodXBkYXRlKSA9PiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpKS5sZW5ndGggPlxyXG4gICAgICAgIDBcclxuXHJcbiAgICAgIGlmIChkaWRNdXRhdGVJZHMpIHtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3Qua2V5cyhzdGF0ZS5lbnRpdGllcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBbYWRkZWQsIHVwZGF0ZWRdID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllczxUPihcclxuICAgICAgbmV3RW50aXRpZXMsXHJcbiAgICAgIHNlbGVjdElkLFxyXG4gICAgICBzdGF0ZVxyXG4gICAgKVxyXG5cclxuICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKVxyXG4gICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHJlbW92ZUFsbDogY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKHJlbW92ZUFsbE11dGFibHkpLFxyXG4gICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXHJcbiAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXHJcbiAgICByZW1vdmVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlT25lTXV0YWJseSksXHJcbiAgICByZW1vdmVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU1hbnlNdXRhYmx5KSxcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBFbnRpdHlTdGF0ZSxcclxuICBJZFNlbGVjdG9yLFxyXG4gIENvbXBhcmVyLFxyXG4gIEVudGl0eVN0YXRlQWRhcHRlcixcclxuICBVcGRhdGUsXHJcbiAgRW50aXR5SWQsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB7IGNyZWF0ZVN0YXRlT3BlcmF0b3IgfSBmcm9tICcuL3N0YXRlX2FkYXB0ZXInXHJcbmltcG9ydCB7IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyIH0gZnJvbSAnLi91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQge1xyXG4gIHNlbGVjdElkVmFsdWUsXHJcbiAgZW5zdXJlRW50aXRpZXNBcnJheSxcclxuICBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzLFxyXG59IGZyb20gJy4vdXRpbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyPFQ+KFxyXG4gIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+LFxyXG4gIHNvcnQ6IENvbXBhcmVyPFQ+XHJcbik6IEVudGl0eVN0YXRlQWRhcHRlcjxUPiB7XHJcbiAgdHlwZSBSID0gRW50aXR5U3RhdGU8VD5cclxuXHJcbiAgY29uc3QgeyByZW1vdmVPbmUsIHJlbW92ZU1hbnksIHJlbW92ZUFsbCB9ID1cclxuICAgIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKVxyXG5cclxuICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiBhZGRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgICBjb25zdCBtb2RlbHMgPSBuZXdFbnRpdGllcy5maWx0ZXIoXHJcbiAgICAgIChtb2RlbCkgPT4gIShzZWxlY3RJZFZhbHVlKG1vZGVsLCBzZWxlY3RJZCkgaW4gc3RhdGUuZW50aXRpZXMpXHJcbiAgICApXHJcblxyXG4gICAgaWYgKG1vZGVscy5sZW5ndGggIT09IDApIHtcclxuICAgICAgbWVyZ2UobW9kZWxzLCBzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG4gICAgaWYgKG5ld0VudGl0aWVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBtZXJnZShuZXdFbnRpdGllcywgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG4gICAgc3RhdGUuZW50aXRpZXMgPSB7fVxyXG4gICAgc3RhdGUuaWRzID0gW11cclxuXHJcbiAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZTogVXBkYXRlPFQ+LCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KFxyXG4gICAgdXBkYXRlczogUmVhZG9ubHlBcnJheTxVcGRhdGU8VD4+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIGxldCBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlXHJcblxyXG4gICAgZm9yIChsZXQgdXBkYXRlIG9mIHVwZGF0ZXMpIHtcclxuICAgICAgY29uc3QgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFwcGxpZWRVcGRhdGVzID0gdHJ1ZVxyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKVxyXG4gICAgICBjb25zdCBuZXdJZCA9IHNlbGVjdElkKGVudGl0eSlcclxuICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcclxuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0lkXSA9IGVudGl0eVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XHJcbiAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBbYWRkZWQsIHVwZGF0ZWRdID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllczxUPihcclxuICAgICAgbmV3RW50aXRpZXMsXHJcbiAgICAgIHNlbGVjdElkLFxyXG4gICAgICBzdGF0ZVxyXG4gICAgKVxyXG5cclxuICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKVxyXG4gICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXJlQXJyYXlzRXF1YWwoYTogcmVhZG9ubHkgdW5rbm93bltdLCBiOiByZWFkb25seSB1bmtub3duW10pIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aCAmJiBpIDwgYi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoYVtpXSA9PT0gYltpXSkge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gbWVyZ2UobW9kZWxzOiByZWFkb25seSBUW10sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICAvLyBJbnNlcnQvb3ZlcndyaXRlIGFsbCBuZXcvdXBkYXRlZFxyXG4gICAgbW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB7XHJcbiAgICAgIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKG1vZGVsKV0gPSBtb2RlbFxyXG4gICAgfSlcclxuXHJcbiAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlc29ydEVudGl0aWVzKHN0YXRlOiBSKSB7XHJcbiAgICBjb25zdCBhbGxFbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpIGFzIFRbXVxyXG4gICAgYWxsRW50aXRpZXMuc29ydChzb3J0KVxyXG5cclxuICAgIGNvbnN0IG5ld1NvcnRlZElkcyA9IGFsbEVudGl0aWVzLm1hcChzZWxlY3RJZClcclxuICAgIGNvbnN0IHsgaWRzIH0gPSBzdGF0ZVxyXG5cclxuICAgIGlmICghYXJlQXJyYXlzRXF1YWwoaWRzLCBuZXdTb3J0ZWRJZHMpKSB7XHJcbiAgICAgIHN0YXRlLmlkcyA9IG5ld1NvcnRlZElkc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHJlbW92ZU9uZSxcclxuICAgIHJlbW92ZU1hbnksXHJcbiAgICByZW1vdmVBbGwsXHJcbiAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXHJcbiAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXHJcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXHJcbiAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBFbnRpdHlEZWZpbml0aW9uLFxyXG4gIENvbXBhcmVyLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgRW50aXR5QWRhcHRlcixcclxufSBmcm9tICcuL21vZGVscydcclxuaW1wb3J0IHsgY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSB9IGZyb20gJy4vZW50aXR5X3N0YXRlJ1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5IH0gZnJvbSAnLi9zdGF0ZV9zZWxlY3RvcnMnXHJcbmltcG9ydCB7IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vc29ydGVkX3N0YXRlX2FkYXB0ZXInXHJcbmltcG9ydCB7IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyIH0gZnJvbSAnLi91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyJ1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHlBZGFwdGVyPFQ+KFxyXG4gIG9wdGlvbnM6IHtcclxuICAgIHNlbGVjdElkPzogSWRTZWxlY3RvcjxUPlxyXG4gICAgc29ydENvbXBhcmVyPzogZmFsc2UgfCBDb21wYXJlcjxUPlxyXG4gIH0gPSB7fVxyXG4pOiBFbnRpdHlBZGFwdGVyPFQ+IHtcclxuICBjb25zdCB7IHNlbGVjdElkLCBzb3J0Q29tcGFyZXIgfTogRW50aXR5RGVmaW5pdGlvbjxUPiA9IHtcclxuICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXHJcbiAgICBzZWxlY3RJZDogKGluc3RhbmNlOiBhbnkpID0+IGluc3RhbmNlLmlkLFxyXG4gICAgLi4ub3B0aW9ucyxcclxuICB9XHJcblxyXG4gIGNvbnN0IHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3Rvcnk8VD4oKVxyXG4gIGNvbnN0IHNlbGVjdG9yc0ZhY3RvcnkgPSBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5PFQ+KClcclxuICBjb25zdCBzdGF0ZUFkYXB0ZXIgPSBzb3J0Q29tcGFyZXJcclxuICAgID8gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0Q29tcGFyZXIpXHJcbiAgICA6IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgc2VsZWN0SWQsXHJcbiAgICBzb3J0Q29tcGFyZXIsXHJcbiAgICAuLi5zdGF0ZUZhY3RvcnksXHJcbiAgICAuLi5zZWxlY3RvcnNGYWN0b3J5LFxyXG4gICAgLi4uc3RhdGVBZGFwdGVyLFxyXG4gIH1cclxufVxyXG4iLCAiLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWkvbmFub2lkL2Jsb2IvMy4wLjIvbm9uLXNlY3VyZS9pbmRleC5qc1xyXG4vLyBUaGlzIGFscGhhYmV0IHVzZXMgYEEtWmEtejAtOV8tYCBzeW1ib2xzLiBBIGdlbmV0aWMgYWxnb3JpdGhtIGhlbHBlZFxyXG4vLyBvcHRpbWl6ZSB0aGUgZ3ppcCBjb21wcmVzc2lvbiBmb3IgdGhpcyBhbHBoYWJldC5cclxubGV0IHVybEFscGhhYmV0ID1cclxuICAnTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRVydcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgbGV0IG5hbm9pZCA9IChzaXplID0gMjEpID0+IHtcclxuICBsZXQgaWQgPSAnJ1xyXG4gIC8vIEEgY29tcGFjdCBhbHRlcm5hdGl2ZSBmb3IgYGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcDsgaSsrKWAuXHJcbiAgbGV0IGkgPSBzaXplXHJcbiAgd2hpbGUgKGktLSkge1xyXG4gICAgLy8gYHwgMGAgaXMgbW9yZSBjb21wYWN0IGFuZCBmYXN0ZXIgdGhhbiBgTWF0aC5mbG9vcigpYC5cclxuICAgIGlkICs9IHVybEFscGhhYmV0WyhNYXRoLnJhbmRvbSgpICogNjQpIHwgMF1cclxuICB9XHJcbiAgcmV0dXJuIGlkXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgRGlzcGF0Y2gsIEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZCxcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB0eXBlIHsgVGh1bmtEaXNwYXRjaCB9IGZyb20gJ3JlZHV4LXRodW5rJ1xyXG5pbXBvcnQgdHlwZSB7IEZhbGxiYWNrSWZVbmtub3duLCBJZCwgSXNBbnksIElzVW5rbm93biB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICcuL25hbm9pZCdcclxuXHJcbi8vIEB0cy1pZ25vcmUgd2UgbmVlZCB0aGUgaW1wb3J0IG9mIHRoZXNlIHR5cGVzIGR1ZSB0byBhIGJ1bmRsaW5nIGlzc3VlLlxyXG50eXBlIF9LZWVwID0gUGF5bG9hZEFjdGlvbiB8IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPGFueSwgdW5rbm93bj5cclxuXHJcbmV4cG9ydCB0eXBlIEJhc2VUaHVua0FQSTxcclxuICBTLFxyXG4gIEUsXHJcbiAgRCBleHRlbmRzIERpc3BhdGNoID0gRGlzcGF0Y2gsXHJcbiAgUmVqZWN0ZWRWYWx1ZSA9IHVua25vd24sXHJcbiAgUmVqZWN0ZWRNZXRhID0gdW5rbm93bixcclxuICBGdWxmaWxsZWRNZXRhID0gdW5rbm93blxyXG4+ID0ge1xyXG4gIGRpc3BhdGNoOiBEXHJcbiAgZ2V0U3RhdGU6ICgpID0+IFNcclxuICBleHRyYTogRVxyXG4gIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbFxyXG4gIGFib3J0OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkXHJcbiAgcmVqZWN0V2l0aFZhbHVlOiBJc1Vua25vd248XHJcbiAgICBSZWplY3RlZE1ldGEsXHJcbiAgICAodmFsdWU6IFJlamVjdGVkVmFsdWUpID0+IFJlamVjdFdpdGhWYWx1ZTxSZWplY3RlZFZhbHVlLCBSZWplY3RlZE1ldGE+LFxyXG4gICAgKFxyXG4gICAgICB2YWx1ZTogUmVqZWN0ZWRWYWx1ZSxcclxuICAgICAgbWV0YTogUmVqZWN0ZWRNZXRhXHJcbiAgICApID0+IFJlamVjdFdpdGhWYWx1ZTxSZWplY3RlZFZhbHVlLCBSZWplY3RlZE1ldGE+XHJcbiAgPlxyXG4gIGZ1bGZpbGxXaXRoVmFsdWU6IElzVW5rbm93bjxcclxuICAgIEZ1bGZpbGxlZE1ldGEsXHJcbiAgICA8RnVsZmlsbGVkVmFsdWU+KHZhbHVlOiBGdWxmaWxsZWRWYWx1ZSkgPT4gRnVsZmlsbGVkVmFsdWUsXHJcbiAgICA8RnVsZmlsbGVkVmFsdWU+KFxyXG4gICAgICB2YWx1ZTogRnVsZmlsbGVkVmFsdWUsXHJcbiAgICAgIG1ldGE6IEZ1bGZpbGxlZE1ldGFcclxuICAgICkgPT4gRnVsZmlsbFdpdGhNZXRhPEZ1bGZpbGxlZFZhbHVlLCBGdWxmaWxsZWRNZXRhPlxyXG4gID5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZEVycm9yIHtcclxuICBuYW1lPzogc3RyaW5nXHJcbiAgbWVzc2FnZT86IHN0cmluZ1xyXG4gIHN0YWNrPzogc3RyaW5nXHJcbiAgY29kZT86IHN0cmluZ1xyXG59XHJcblxyXG5jb25zdCBjb21tb25Qcm9wZXJ0aWVzOiBBcnJheTxrZXlvZiBTZXJpYWxpemVkRXJyb3I+ID0gW1xyXG4gICduYW1lJyxcclxuICAnbWVzc2FnZScsXHJcbiAgJ3N0YWNrJyxcclxuICAnY29kZScsXHJcbl1cclxuXHJcbmNsYXNzIFJlamVjdFdpdGhWYWx1ZTxQYXlsb2FkLCBSZWplY3RlZE1ldGE+IHtcclxuICAvKlxyXG4gIHR5cGUtb25seSBwcm9wZXJ0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFJlamVjdFdpdGhWYWx1ZSBhbmQgRnVsZmlsbFdpdGhNZXRhXHJcbiAgZG9lcyBub3QgZXhpc3QgYXQgcnVudGltZVxyXG4gICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZSE6ICdSZWplY3RXaXRoVmFsdWUnXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF5bG9hZDogUGF5bG9hZCxcclxuICAgIHB1YmxpYyByZWFkb25seSBtZXRhOiBSZWplY3RlZE1ldGFcclxuICApIHt9XHJcbn1cclxuXHJcbmNsYXNzIEZ1bGZpbGxXaXRoTWV0YTxQYXlsb2FkLCBGdWxmaWxsZWRNZXRhPiB7XHJcbiAgLypcclxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxyXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcclxuICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3R5cGUhOiAnRnVsZmlsbFdpdGhNZXRhJ1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHBheWxvYWQ6IFBheWxvYWQsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWV0YTogRnVsZmlsbGVkTWV0YVxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIFNlcmlhbGl6ZXMgYW4gZXJyb3IgaW50byBhIHBsYWluIG9iamVjdC5cclxuICogUmV3b3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3NlcmlhbGl6ZS1lcnJvclxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbWluaVNlcmlhbGl6ZUVycm9yID0gKHZhbHVlOiBhbnkpOiBTZXJpYWxpemVkRXJyb3IgPT4ge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCBzaW1wbGVFcnJvcjogU2VyaWFsaXplZEVycm9yID0ge31cclxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgY29tbW9uUHJvcGVydGllcykge1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlW3Byb3BlcnR5XSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBzaW1wbGVFcnJvcltwcm9wZXJ0eV0gPSB2YWx1ZVtwcm9wZXJ0eV1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzaW1wbGVFcnJvclxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgbWVzc2FnZTogU3RyaW5nKHZhbHVlKSB9XHJcbn1cclxuXHJcbnR5cGUgQXN5bmNUaHVua0NvbmZpZyA9IHtcclxuICBzdGF0ZT86IHVua25vd25cclxuICBkaXNwYXRjaD86IERpc3BhdGNoXHJcbiAgZXh0cmE/OiB1bmtub3duXHJcbiAgcmVqZWN0VmFsdWU/OiB1bmtub3duXHJcbiAgc2VyaWFsaXplZEVycm9yVHlwZT86IHVua25vd25cclxuICBwZW5kaW5nTWV0YT86IHVua25vd25cclxuICBmdWxmaWxsZWRNZXRhPzogdW5rbm93blxyXG4gIHJlamVjdGVkTWV0YT86IHVua25vd25cclxufVxyXG5cclxudHlwZSBHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICBzdGF0ZTogaW5mZXIgU3RhdGVcclxufVxyXG4gID8gU3RhdGVcclxuICA6IHVua25vd25cclxudHlwZSBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHsgZXh0cmE6IGluZmVyIEV4dHJhIH1cclxuICA/IEV4dHJhXHJcbiAgOiB1bmtub3duXHJcbnR5cGUgR2V0RGlzcGF0Y2g8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgZGlzcGF0Y2g6IGluZmVyIERpc3BhdGNoXHJcbn1cclxuICA/IEZhbGxiYWNrSWZVbmtub3duPFxyXG4gICAgICBEaXNwYXRjaCxcclxuICAgICAgVGh1bmtEaXNwYXRjaDxcclxuICAgICAgICBHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgIEFueUFjdGlvblxyXG4gICAgICA+XHJcbiAgICA+XHJcbiAgOiBUaHVua0Rpc3BhdGNoPEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPiwgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+LCBBbnlBY3Rpb24+XHJcblxyXG5leHBvcnQgdHlwZSBHZXRUaHVua0FQSTxUaHVua0FwaUNvbmZpZz4gPSBCYXNlVGh1bmtBUEk8XHJcbiAgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXREaXNwYXRjaDxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuPlxyXG5cclxudHlwZSBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICByZWplY3RWYWx1ZTogaW5mZXIgUmVqZWN0VmFsdWVcclxufVxyXG4gID8gUmVqZWN0VmFsdWVcclxuICA6IHVua25vd25cclxuXHJcbnR5cGUgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcGVuZGluZ01ldGE6IGluZmVyIFBlbmRpbmdNZXRhXHJcbn1cclxuICA/IFBlbmRpbmdNZXRhXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgZnVsZmlsbGVkTWV0YTogaW5mZXIgRnVsZmlsbGVkTWV0YVxyXG59XHJcbiAgPyBGdWxmaWxsZWRNZXRhXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICByZWplY3RlZE1ldGE6IGluZmVyIFJlamVjdGVkTWV0YVxyXG59XHJcbiAgPyBSZWplY3RlZE1ldGFcclxuICA6IHVua25vd25cclxuXHJcbnR5cGUgR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICBzZXJpYWxpemVkRXJyb3JUeXBlOiBpbmZlciBHZXRTZXJpYWxpemVkRXJyb3JUeXBlXHJcbn1cclxuICA/IEdldFNlcmlhbGl6ZWRFcnJvclR5cGVcclxuICA6IFNlcmlhbGl6ZWRFcnJvclxyXG5cclxudHlwZSBNYXliZVByb21pc2U8VD4gPSBUIHwgUHJvbWlzZTxUPiB8IChUIGV4dGVuZHMgYW55ID8gUHJvbWlzZTxUPiA6IG5ldmVyKVxyXG5cclxuLyoqXHJcbiAqIEEgdHlwZSBkZXNjcmliaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGBwYXlsb2FkQ3JlYXRvcmAgYXJndW1lbnQgdG8gYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBNaWdodCBiZSB1c2VmdWwgZm9yIHdyYXBwaW5nIGBjcmVhdGVBc3luY1RodW5rYCBpbiBjdXN0b20gYWJzdHJhY3Rpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUGF5bG9hZENyZWF0b3JSZXR1cm5WYWx1ZTxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IE1heWJlUHJvbWlzZTxcclxuICB8IElzVW5rbm93bjxcclxuICAgICAgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBGdWxmaWxsV2l0aE1ldGE8UmV0dXJuZWQsIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+PlxyXG4gICAgPlxyXG4gIHwgUmVqZWN0V2l0aFZhbHVlPFxyXG4gICAgICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICAgID5cclxuPlxyXG4vKipcclxuICogQSB0eXBlIGRlc2NyaWJpbmcgdGhlIGBwYXlsb2FkQ3JlYXRvcmAgYXJndW1lbnQgdG8gYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBNaWdodCBiZSB1c2VmdWwgZm9yIHdyYXBwaW5nIGBjcmVhdGVBc3luY1RodW5rYCBpbiBjdXN0b20gYWJzdHJhY3Rpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcmcgPSB2b2lkLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZyA9IHt9XHJcbj4gPSAoXHJcbiAgYXJnOiBUaHVua0FyZyxcclxuICB0aHVua0FQSTogR2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+XHJcbikgPT4gQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yUmV0dXJuVmFsdWU8UmV0dXJuZWQsIFRodW5rQXBpQ29uZmlnPlxyXG5cclxuLyoqXHJcbiAqIEEgVGh1bmtBY3Rpb24gY3JlYXRlZCBieSBgY3JlYXRlQXN5bmNUaHVua2AuXHJcbiAqIERpc3BhdGNoaW5nIGl0IHJldHVybnMgYSBQcm9taXNlIGZvciBlaXRoZXIgYVxyXG4gKiBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQgYWN0aW9uLlxyXG4gKiBBbHNvLCB0aGUgcmV0dXJuZWQgdmFsdWUgY29udGFpbnMgYW4gYGFib3J0KClgIG1ldGhvZFxyXG4gKiB0aGF0IGFsbG93cyB0aGUgYXN5bmNBY3Rpb24gdG8gYmUgY2FuY2VsbGVkIGZyb20gdGhlIG91dHNpZGUuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtBY3Rpb248XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcmcsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSAoXHJcbiAgZGlzcGF0Y2g6IEdldERpc3BhdGNoPFRodW5rQXBpQ29uZmlnPixcclxuICBnZXRTdGF0ZTogKCkgPT4gR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LFxyXG4gIGV4dHJhOiBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz5cclxuKSA9PiBQcm9taXNlPFxyXG4gIHwgUmV0dXJuVHlwZTxBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxSZXR1cm5lZCwgVGh1bmtBcmc+PlxyXG4gIHwgUmV0dXJuVHlwZTxBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4+XHJcbj4gJiB7XHJcbiAgYWJvcnQ6IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWRcclxuICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gIGFyZzogVGh1bmtBcmdcclxuICB1bndyYXA6ICgpID0+IFByb21pc2U8UmV0dXJuZWQ+XHJcbn1cclxuXHJcbnR5cGUgQXN5bmNUaHVua0FjdGlvbkNyZWF0b3I8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcmcsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSBJc0FueTxcclxuICBUaHVua0FyZyxcclxuICAvLyBhbnkgaGFuZGxpbmdcclxuICAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPixcclxuICAvLyB1bmtub3duIGhhbmRsaW5nXHJcbiAgdW5rbm93biBleHRlbmRzIFRodW5rQXJnXHJcbiAgICA/IChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+IC8vIGFyZ3VtZW50IG5vdCBzcGVjaWZpZWQgb3Igc3BlY2lmaWVkIGFzIHZvaWQgb3IgdW5kZWZpbmVkXHJcbiAgICA6IFtUaHVua0FyZ10gZXh0ZW5kcyBbdm9pZF0gfCBbdW5kZWZpbmVkXVxyXG4gICAgPyAoKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+IC8vIGFyZ3VtZW50IGNvbnRhaW5zIHZvaWRcclxuICAgIDogW3ZvaWRdIGV4dGVuZHMgW1RodW5rQXJnXSAvLyBtYWtlIG9wdGlvbmFsXHJcbiAgICA/IChhcmc/OiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBjb250YWlucyB1bmRlZmluZWRcclxuICAgIDogW3VuZGVmaW5lZF0gZXh0ZW5kcyBbVGh1bmtBcmddXHJcbiAgICA/IFdpdGhTdHJpY3ROdWxsQ2hlY2tzPFxyXG4gICAgICAgIC8vIHdpdGggc3RyaWN0IG51bGxDaGVja3M6IG1ha2Ugb3B0aW9uYWxcclxuICAgICAgICAoXHJcbiAgICAgICAgICBhcmc/OiBUaHVua0FyZ1xyXG4gICAgICAgICkgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICAvLyB3aXRob3V0IHN0cmljdCBudWxsIGNoZWNrcyB0aGlzIHdpbGwgbWF0Y2ggZXZlcnl0aGluZywgc28gZG9uJ3QgbWFrZSBpdCBvcHRpb25hbFxyXG4gICAgICAgIChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgICAgID4gLy8gZGVmYXVsdCBjYXNlOiBub3JtYWwgYXJndW1lbnRcclxuICAgIDogKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz5cclxuPlxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgb2JqZWN0IGZvciBgY3JlYXRlQXN5bmNUaHVua2AuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtPcHRpb25zPFxyXG4gIFRodW5rQXJnID0gdm9pZCxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWcgPSB7fVxyXG4+ID0ge1xyXG4gIC8qKlxyXG4gICAqIEEgbWV0aG9kIHRvIGNvbnRyb2wgd2hldGhlciB0aGUgYXN5bmNUaHVuayBzaG91bGQgYmUgZXhlY3V0ZWQuIEhhcyBhY2Nlc3MgdG8gdGhlXHJcbiAgICogYGFyZ2AsIGBhcGkuZ2V0U3RhdGUoKWAgYW5kIGBhcGkuZXh0cmFgIGFyZ3VtZW50cy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIGBmYWxzZWAgaWYgaXQgc2hvdWxkIGJlIHNraXBwZWRcclxuICAgKi9cclxuICBjb25kaXRpb24/KFxyXG4gICAgYXJnOiBUaHVua0FyZyxcclxuICAgIGFwaTogUGljazxHZXRUaHVua0FQSTxUaHVua0FwaUNvbmZpZz4sICdnZXRTdGF0ZScgfCAnZXh0cmEnPlxyXG4gICk6IE1heWJlUHJvbWlzZTxib29sZWFuIHwgdW5kZWZpbmVkPlxyXG4gIC8qKlxyXG4gICAqIElmIGBjb25kaXRpb25gIHJldHVybnMgYGZhbHNlYCwgdGhlIGFzeW5jVGh1bmsgd2lsbCBiZSBza2lwcGVkLlxyXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGV0aGVyIGEgYHJlamVjdGVkYCBhY3Rpb24gd2l0aCBgbWV0YS5jb25kaXRpb24gPT0gZmFsc2VgXHJcbiAgICogd2lsbCBiZSBkaXNwYXRjaGVkIG9yIG5vdC5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcclxuICAgKi9cclxuICBkaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbj86IGJvb2xlYW5cclxuXHJcbiAgc2VyaWFsaXplRXJyb3I/OiAoeDogdW5rbm93bikgPT4gR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz5cclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIHRoZSBgcmVxdWVzdElkYCBmb3IgdGhlIHJlcXVlc3Qgc2VxdWVuY2UuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgbmFub2lkYFxyXG4gICAqL1xyXG4gIGlkR2VuZXJhdG9yPzogKGFyZzogVGh1bmtBcmcpID0+IHN0cmluZ1xyXG59ICYgSXNVbmtub3duPFxyXG4gIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPixcclxuICB7XHJcbiAgICAvKipcclxuICAgICAqIEEgbWV0aG9kIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBgbWV0YWAgb2YgdGhlIHBlbmRpbmcgYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFVzaW5nIHRoaXMgb3B0aW9uYWwgb3ZlcmxvYWQgd2lsbCBub3QgbW9kaWZ5IHRoZSB0eXBlcyBjb3JyZWN0bHksIHRoaXMgb3ZlcmxvYWQgaXMgb25seSBpbiBwbGFjZSB0byBzdXBwb3J0IEphdmFTY3JpcHQgdXNlcnMuXHJcbiAgICAgKiBQbGVhc2UgdXNlIHRoZSBgVGh1bmtBcGlDb25maWdgIHBhcmFtZXRlciBgcGVuZGluZ01ldGFgIHRvIGdldCBhY2Nlc3MgdG8gYSBjb3JyZWN0bHkgdHlwZWQgb3ZlcmxvYWRcclxuICAgICAqL1xyXG4gICAgZ2V0UGVuZGluZ01ldGE/KFxyXG4gICAgICBiYXNlOiB7XHJcbiAgICAgICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICAgIH0sXHJcbiAgICAgIGFwaTogUGljazxHZXRUaHVua0FQSTxUaHVua0FwaUNvbmZpZz4sICdnZXRTdGF0ZScgfCAnZXh0cmEnPlxyXG4gICAgKTogR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgfSxcclxuICB7XHJcbiAgICAvKipcclxuICAgICAqIEEgbWV0aG9kIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBgbWV0YWAgb2YgdGhlIHBlbmRpbmcgYWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBnZXRQZW5kaW5nTWV0YShcclxuICAgICAgYmFzZToge1xyXG4gICAgICAgIGFyZzogVGh1bmtBcmdcclxuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgICB9LFxyXG4gICAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICAgICk6IEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gIH1cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25DcmVhdG9yPFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtzdHJpbmcsIFRodW5rQXJnLCBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz4/XSxcclxuICB1bmRlZmluZWQsXHJcbiAgc3RyaW5nLFxyXG4gIG5ldmVyLFxyXG4gIHtcclxuICAgIGFyZzogVGh1bmtBcmdcclxuICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICByZXF1ZXN0U3RhdHVzOiAncGVuZGluZydcclxuICB9ICYgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8XHJcbiAgVGh1bmtBcmcsXHJcbiAgVGh1bmtBcGlDb25maWcgPSB7fVxyXG4+ID0gQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8XHJcbiAgW1xyXG4gICAgRXJyb3IgfCBudWxsLFxyXG4gICAgc3RyaW5nLFxyXG4gICAgVGh1bmtBcmcsXHJcbiAgICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4/LFxyXG4gICAgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPj9cclxuICBdLFxyXG4gIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPiB8IHVuZGVmaW5lZCxcclxuICBzdHJpbmcsXHJcbiAgR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAge1xyXG4gICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgIHJlcXVlc3RTdGF0dXM6ICdyZWplY3RlZCdcclxuICAgIGFib3J0ZWQ6IGJvb2xlYW5cclxuICAgIGNvbmRpdGlvbjogYm9vbGVhblxyXG4gIH0gJiAoXHJcbiAgICB8ICh7IHJlamVjdGVkV2l0aFZhbHVlOiBmYWxzZSB9ICYge1xyXG4gICAgICAgIFtLIGluIGtleW9mIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz5dPzogdW5kZWZpbmVkXHJcbiAgICAgIH0pXHJcbiAgICB8ICh7IHJlamVjdGVkV2l0aFZhbHVlOiB0cnVlIH0gJiBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+KVxyXG4gIClcclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcmcsXHJcbiAgVGh1bmtBcGlDb25maWcgPSB7fVxyXG4+ID0gQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8XHJcbiAgW1JldHVybmVkLCBzdHJpbmcsIFRodW5rQXJnLCBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPj9dLFxyXG4gIFJldHVybmVkLFxyXG4gIHN0cmluZyxcclxuICBuZXZlcixcclxuICB7XHJcbiAgICBhcmc6IFRodW5rQXJnXHJcbiAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgcmVxdWVzdFN0YXR1czogJ2Z1bGZpbGxlZCdcclxuICB9ICYgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuPlxyXG5cclxuLyoqXHJcbiAqIEEgdHlwZSBkZXNjcmliaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBNaWdodCBiZSB1c2VmdWwgZm9yIHdyYXBwaW5nIGBjcmVhdGVBc3luY1RodW5rYCBpbiBjdXN0b20gYWJzdHJhY3Rpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gQXN5bmNUaHVua0FjdGlvbkNyZWF0b3I8UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gJiB7XHJcbiAgcGVuZGluZzogQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25DcmVhdG9yPFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz5cclxuICByZWplY3RlZDogQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgZnVsZmlsbGVkOiBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxcclxuICAgIFJldHVybmVkLFxyXG4gICAgVGh1bmtBcmcsXHJcbiAgICBUaHVua0FwaUNvbmZpZ1xyXG4gID5cclxuICB0eXBlUHJlZml4OiBzdHJpbmdcclxufVxyXG5cclxudHlwZSBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxPbGRDb25maWcsIE5ld0NvbmZpZz4gPSBJZDxcclxuICBOZXdDb25maWcgJiBPbWl0PE9sZENvbmZpZywga2V5b2YgTmV3Q29uZmlnPlxyXG4+XHJcblxyXG50eXBlIENyZWF0ZUFzeW5jVGh1bms8Q3VycmllZFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZz4gPSB7XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZVByZWZpeFxyXG4gICAqIEBwYXJhbSBwYXlsb2FkQ3JlYXRvclxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgLy8gc2VwYXJhdGUgc2lnbmF0dXJlIHdpdGhvdXQgYEFzeW5jVGh1bmtDb25maWdgIGZvciBiZXR0ZXIgaW5mZXJlbmNlXHJcbiAgPFJldHVybmVkLCBUaHVua0FyZyA9IHZvaWQ+KFxyXG4gICAgdHlwZVByZWZpeDogc3RyaW5nLFxyXG4gICAgcGF5bG9hZENyZWF0b3I6IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBDdXJyaWVkVGh1bmtBcGlDb25maWdcclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8VGh1bmtBcmcsIEN1cnJpZWRUaHVua0FwaUNvbmZpZz5cclxuICApOiBBc3luY1RodW5rPFJldHVybmVkLCBUaHVua0FyZywgQ3VycmllZFRodW5rQXBpQ29uZmlnPlxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB0eXBlUHJlZml4XHJcbiAgICogQHBhcmFtIHBheWxvYWRDcmVhdG9yXHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEBwdWJsaWNcclxuICAgKi9cclxuICA8UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+KFxyXG4gICAgdHlwZVByZWZpeDogc3RyaW5nLFxyXG4gICAgcGF5bG9hZENyZWF0b3I6IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgPixcclxuICAgIG9wdGlvbnM/OiBBc3luY1RodW5rT3B0aW9uczxcclxuICAgICAgVGh1bmtBcmcsXHJcbiAgICAgIE92ZXJyaWRlVGh1bmtBcGlDb25maWdzPEN1cnJpZWRUaHVua0FwaUNvbmZpZywgVGh1bmtBcGlDb25maWc+XHJcbiAgICA+XHJcbiAgKTogQXN5bmNUaHVuazxcclxuICAgIFJldHVybmVkLFxyXG4gICAgVGh1bmtBcmcsXHJcbiAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gID5cclxuXHJcbiAgd2l0aFR5cGVzPFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZz4oKTogQ3JlYXRlQXN5bmNUaHVuazxcclxuICAgIE92ZXJyaWRlVGh1bmtBcGlDb25maWdzPEN1cnJpZWRUaHVua0FwaUNvbmZpZywgVGh1bmtBcGlDb25maWc+XHJcbiAgPlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlQXN5bmNUaHVuayA9ICgoKSA9PiB7XHJcbiAgZnVuY3Rpb24gY3JlYXRlQXN5bmNUaHVuazxcclxuICAgIFJldHVybmVkLFxyXG4gICAgVGh1bmtBcmcsXHJcbiAgICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuICA+KFxyXG4gICAgdHlwZVByZWZpeDogc3RyaW5nLFxyXG4gICAgcGF5bG9hZENyZWF0b3I6IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgPixcclxuICAgIG9wdGlvbnM/OiBBc3luY1RodW5rT3B0aW9uczxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgKTogQXN5bmNUaHVuazxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiB7XHJcbiAgICB0eXBlIFJlamVjdGVkVmFsdWUgPSBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz5cclxuICAgIHR5cGUgUGVuZGluZ01ldGEgPSBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICAgIHR5cGUgRnVsZmlsbGVkTWV0YSA9IEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIFJlamVjdGVkTWV0YSA9IEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuXHJcbiAgICBjb25zdCBmdWxmaWxsZWQ6IEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgVGh1bmtBcmcsXHJcbiAgICAgIFRodW5rQXBpQ29uZmlnXHJcbiAgICA+ID0gY3JlYXRlQWN0aW9uKFxyXG4gICAgICB0eXBlUHJlZml4ICsgJy9mdWxmaWxsZWQnLFxyXG4gICAgICAoXHJcbiAgICAgICAgcGF5bG9hZDogUmV0dXJuZWQsXHJcbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmcsXHJcbiAgICAgICAgYXJnOiBUaHVua0FyZyxcclxuICAgICAgICBtZXRhPzogRnVsZmlsbGVkTWV0YVxyXG4gICAgICApID0+ICh7XHJcbiAgICAgICAgcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAuLi4oKG1ldGEgYXMgYW55KSB8fCB7fSksXHJcbiAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICByZXF1ZXN0U3RhdHVzOiAnZnVsZmlsbGVkJyBhcyBjb25zdCxcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IHBlbmRpbmc6IEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+ID1cclxuICAgICAgY3JlYXRlQWN0aW9uKFxyXG4gICAgICAgIHR5cGVQcmVmaXggKyAnL3BlbmRpbmcnLFxyXG4gICAgICAgIChyZXF1ZXN0SWQ6IHN0cmluZywgYXJnOiBUaHVua0FyZywgbWV0YT86IFBlbmRpbmdNZXRhKSA9PiAoe1xyXG4gICAgICAgICAgcGF5bG9hZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgICAuLi4oKG1ldGEgYXMgYW55KSB8fCB7fSksXHJcbiAgICAgICAgICAgIGFyZyxcclxuICAgICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiAncGVuZGluZycgYXMgY29uc3QsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICBjb25zdCByZWplY3RlZDogQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+ID1cclxuICAgICAgY3JlYXRlQWN0aW9uKFxyXG4gICAgICAgIHR5cGVQcmVmaXggKyAnL3JlamVjdGVkJyxcclxuICAgICAgICAoXHJcbiAgICAgICAgICBlcnJvcjogRXJyb3IgfCBudWxsLFxyXG4gICAgICAgICAgcmVxdWVzdElkOiBzdHJpbmcsXHJcbiAgICAgICAgICBhcmc6IFRodW5rQXJnLFxyXG4gICAgICAgICAgcGF5bG9hZD86IFJlamVjdGVkVmFsdWUsXHJcbiAgICAgICAgICBtZXRhPzogUmVqZWN0ZWRNZXRhXHJcbiAgICAgICAgKSA9PiAoe1xyXG4gICAgICAgICAgcGF5bG9hZCxcclxuICAgICAgICAgIGVycm9yOiAoKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemVFcnJvcikgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShcclxuICAgICAgICAgICAgZXJyb3IgfHwgJ1JlamVjdGVkJ1xyXG4gICAgICAgICAgKSBhcyBHZXRTZXJpYWxpemVkRXJyb3JUeXBlPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVqZWN0ZWRXaXRoVmFsdWU6ICEhcGF5bG9hZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogJ3JlamVjdGVkJyBhcyBjb25zdCxcclxuICAgICAgICAgICAgYWJvcnRlZDogZXJyb3I/Lm5hbWUgPT09ICdBYm9ydEVycm9yJyxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiBlcnJvcj8ubmFtZSA9PT0gJ0NvbmRpdGlvbkVycm9yJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIGxldCBkaXNwbGF5ZWRXYXJuaW5nID0gZmFsc2VcclxuXHJcbiAgICBjb25zdCBBQyA9XHJcbiAgICAgIHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgPyBBYm9ydENvbnRyb2xsZXJcclxuICAgICAgICA6IGNsYXNzIGltcGxlbWVudHMgQWJvcnRDb250cm9sbGVyIHtcclxuICAgICAgICAgICAgc2lnbmFsID0ge1xyXG4gICAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoKSB7fSxcclxuICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBvbmFib3J0KCkge30sXHJcbiAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHt9LFxyXG4gICAgICAgICAgICAgIHJlYXNvbjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHRocm93SWZBYm9ydGVkKCkge30sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWJvcnQoKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAgICAgYFRoaXMgcGxhdGZvcm0gZG9lcyBub3QgaW1wbGVtZW50IEFib3J0Q29udHJvbGxlci4gXHJcbklmIHlvdSB3YW50IHRvIHVzZSB0aGUgQWJvcnRDb250cm9sbGVyIHRvIHJlYWN0IHRvIFxcYGFib3J0XFxgIGV2ZW50cywgcGxlYXNlIGNvbnNpZGVyIGltcG9ydGluZyBhIHBvbHlmaWxsIGxpa2UgJ2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC1vbmx5Jy5gXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKFxyXG4gICAgICBhcmc6IFRodW5rQXJnXHJcbiAgICApOiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+IHtcclxuICAgICAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gb3B0aW9ucz8uaWRHZW5lcmF0b3JcclxuICAgICAgICAgID8gb3B0aW9ucy5pZEdlbmVyYXRvcihhcmcpXHJcbiAgICAgICAgICA6IG5hbm9pZCgpXHJcblxyXG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBQygpXHJcbiAgICAgICAgbGV0IGFib3J0UmVhc29uOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZVxyXG4gICAgICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbj86IHN0cmluZykge1xyXG4gICAgICAgICAgYWJvcnRSZWFzb24gPSByZWFzb25cclxuICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9taXNlID0gKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBmaW5hbEFjdGlvbjogUmV0dXJuVHlwZTx0eXBlb2YgZnVsZmlsbGVkIHwgdHlwZW9mIHJlamVjdGVkPlxyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9IG9wdGlvbnM/LmNvbmRpdGlvbj8uKGFyZywgeyBnZXRTdGF0ZSwgZXh0cmEgfSlcclxuICAgICAgICAgICAgaWYgKGlzVGhlbmFibGUoY29uZGl0aW9uUmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IGF3YWl0IGNvbmRpdGlvblJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uUmVzdWx0ID09PSBmYWxzZSB8fCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxyXG4gICAgICAgICAgICAgIHRocm93IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdDb25kaXRpb25FcnJvcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS4nLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGFydGVkID0gdHJ1ZVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT5cclxuICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT5cclxuICAgICAgICAgICAgICAgIHJlamVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdBYm9ydEVycm9yJyxcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYWJvcnRSZWFzb24gfHwgJ0Fib3J0ZWQnLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgZGlzcGF0Y2goXHJcbiAgICAgICAgICAgICAgcGVuZGluZyhcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIGFyZyxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM/LmdldFBlbmRpbmdNZXRhPy4oXHJcbiAgICAgICAgICAgICAgICAgIHsgcmVxdWVzdElkLCBhcmcgfSxcclxuICAgICAgICAgICAgICAgICAgeyBnZXRTdGF0ZSwgZXh0cmEgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBmaW5hbEFjdGlvbiA9IGF3YWl0IFByb21pc2UucmFjZShbXHJcbiAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UsXHJcbiAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgcGF5bG9hZENyZWF0b3IoYXJnLCB7XHJcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoLFxyXG4gICAgICAgICAgICAgICAgICBnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aFZhbHVlOiAoKFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBSZWplY3RlZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE/OiBSZWplY3RlZE1ldGFcclxuICAgICAgICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWplY3RXaXRoVmFsdWUodmFsdWUsIG1ldGEpXHJcbiAgICAgICAgICAgICAgICAgIH0pIGFzIGFueSxcclxuICAgICAgICAgICAgICAgICAgZnVsZmlsbFdpdGhWYWx1ZTogKCh2YWx1ZTogdW5rbm93biwgbWV0YT86IEZ1bGZpbGxlZE1ldGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxXaXRoTWV0YSh2YWx1ZSwgbWV0YSlcclxuICAgICAgICAgICAgICAgICAgfSkgYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBGdWxmaWxsV2l0aE1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQgYXMgYW55LCByZXF1ZXN0SWQsIGFyZylcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBmaW5hbEFjdGlvbiA9XHJcbiAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlXHJcbiAgICAgICAgICAgICAgICA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnIucGF5bG9hZCwgZXJyLm1ldGEpXHJcbiAgICAgICAgICAgICAgICA6IHJlamVjdGVkKGVyciBhcyBhbnksIHJlcXVlc3RJZCwgYXJnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gV2UgZGlzcGF0Y2ggdGhlIHJlc3VsdCBhY3Rpb24gX2FmdGVyXyB0aGUgY2F0Y2gsIHRvIGF2b2lkIGhhdmluZyBhbnkgZXJyb3JzXHJcbiAgICAgICAgICAvLyBoZXJlIGdldCBzd2FsbG93ZWQgYnkgdGhlIHRyeS9jYXRjaCBibG9jayxcclxuICAgICAgICAgIC8vIHBlciBodHRwczovL3R3aXR0ZXIuY29tL2Rhbl9hYnJhbW92L3N0YXR1cy83NzA5MTQyMjE2Mzg5NDI3MjBcclxuICAgICAgICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC10b29sa2l0L2Jsb2IvZTg1ZWIxN2IzOWEyMTE4ZDg1OWY3Yjc3NDZlMGYzZmVlNTIzZTA4OS9kb2NzL3R1dG9yaWFscy9hZHZhbmNlZC10dXRvcmlhbC5tZCNhc3luYy1lcnJvci1oYW5kbGluZy1sb2dpYy1pbi10aHVua3NcclxuXHJcbiAgICAgICAgICBjb25zdCBza2lwRGlzcGF0Y2ggPVxyXG4gICAgICAgICAgICBvcHRpb25zICYmXHJcbiAgICAgICAgICAgICFvcHRpb25zLmRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uICYmXHJcbiAgICAgICAgICAgIHJlamVjdGVkLm1hdGNoKGZpbmFsQWN0aW9uKSAmJlxyXG4gICAgICAgICAgICAoZmluYWxBY3Rpb24gYXMgYW55KS5tZXRhLmNvbmRpdGlvblxyXG5cclxuICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoKGZpbmFsQWN0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZpbmFsQWN0aW9uXHJcbiAgICAgICAgfSkoKVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UgYXMgUHJvbWlzZTxhbnk+LCB7XHJcbiAgICAgICAgICBhYm9ydCxcclxuICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgIGFyZyxcclxuICAgICAgICAgIHVud3JhcCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbjxhbnk+KHVud3JhcFJlc3VsdClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICBhY3Rpb25DcmVhdG9yIGFzIEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFxyXG4gICAgICAgIFJldHVybmVkLFxyXG4gICAgICAgIFRodW5rQXJnLFxyXG4gICAgICAgIFRodW5rQXBpQ29uZmlnXHJcbiAgICAgID4sXHJcbiAgICAgIHtcclxuICAgICAgICBwZW5kaW5nLFxyXG4gICAgICAgIHJlamVjdGVkLFxyXG4gICAgICAgIGZ1bGZpbGxlZCxcclxuICAgICAgICB0eXBlUHJlZml4LFxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG4gIGNyZWF0ZUFzeW5jVGh1bmsud2l0aFR5cGVzID0gKCkgPT4gY3JlYXRlQXN5bmNUaHVua1xyXG5cclxuICByZXR1cm4gY3JlYXRlQXN5bmNUaHVuayBhcyBDcmVhdGVBc3luY1RodW5rPEFzeW5jVGh1bmtDb25maWc+XHJcbn0pKClcclxuXHJcbmludGVyZmFjZSBVbndyYXBwYWJsZUFjdGlvbiB7XHJcbiAgcGF5bG9hZDogYW55XHJcbiAgbWV0YT86IGFueVxyXG4gIGVycm9yPzogYW55XHJcbn1cclxuXHJcbnR5cGUgVW53cmFwcGVkQWN0aW9uUGF5bG9hZDxUIGV4dGVuZHMgVW53cmFwcGFibGVBY3Rpb24+ID0gRXhjbHVkZTxcclxuICBULFxyXG4gIHsgZXJyb3I6IGFueSB9XHJcbj5bJ3BheWxvYWQnXVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBSZXN1bHQ8UiBleHRlbmRzIFVud3JhcHBhYmxlQWN0aW9uPihcclxuICBhY3Rpb246IFJcclxuKTogVW53cmFwcGVkQWN0aW9uUGF5bG9hZDxSPiB7XHJcbiAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XHJcbiAgICB0aHJvdyBhY3Rpb24ucGF5bG9hZFxyXG4gIH1cclxuICBpZiAoYWN0aW9uLmVycm9yKSB7XHJcbiAgICB0aHJvdyBhY3Rpb24uZXJyb3JcclxuICB9XHJcbiAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkXHJcbn1cclxuXHJcbnR5cGUgV2l0aFN0cmljdE51bGxDaGVja3M8VHJ1ZSwgRmFsc2U+ID0gdW5kZWZpbmVkIGV4dGVuZHMgYm9vbGVhblxyXG4gID8gRmFsc2VcclxuICA6IFRydWVcclxuXHJcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFByb21pc2VMaWtlPGFueT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxyXG4gICAgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbidcclxuICApXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBBY3Rpb25Gcm9tTWF0Y2hlcixcclxuICBNYXRjaGVyLFxyXG4gIFVuaW9uVG9JbnRlcnNlY3Rpb24sXHJcbn0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGhhc01hdGNoRnVuY3Rpb24gfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHR5cGUge1xyXG4gIEFzeW5jVGh1bmssXHJcbiAgQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3IsXHJcbiAgQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25DcmVhdG9yLFxyXG4gIEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hpbmdBbnlPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxNYXRjaGVyc1tudW1iZXJdPlxyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hpbmdBbGxPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+ID1cclxuICBVbmlvblRvSW50ZXJzZWN0aW9uPEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnM+PlxyXG5cclxuY29uc3QgbWF0Y2hlcyA9IChtYXRjaGVyOiBNYXRjaGVyPGFueT4sIGFjdGlvbjogYW55KSA9PiB7XHJcbiAgaWYgKGhhc01hdGNoRnVuY3Rpb24obWF0Y2hlcikpIHtcclxuICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbilcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gbWF0Y2hlcyBhbnkgb25lIG9mIHRoZSBzdXBwbGllZCB0eXBlIGd1YXJkcyBvciBhY3Rpb25cclxuICogY3JlYXRvcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXRjaGVycyBUaGUgdHlwZSBndWFyZHMgb3IgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FueU9mPE1hdGNoZXJzIGV4dGVuZHMgWy4uLk1hdGNoZXI8YW55PltdXT4oXHJcbiAgLi4ubWF0Y2hlcnM6IE1hdGNoZXJzXHJcbikge1xyXG4gIHJldHVybiAoYWN0aW9uOiBhbnkpOiBhY3Rpb24gaXMgQWN0aW9uTWF0Y2hpbmdBbnlPZjxNYXRjaGVycz4gPT4ge1xyXG4gICAgcmV0dXJuIG1hdGNoZXJzLnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIG1hdGNoZXMgYWxsIG9mIHRoZSBzdXBwbGllZCB0eXBlIGd1YXJkcyBvciBhY3Rpb25cclxuICogY3JlYXRvcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXRjaGVycyBUaGUgdHlwZSBndWFyZHMgb3IgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FsbE9mPE1hdGNoZXJzIGV4dGVuZHMgWy4uLk1hdGNoZXI8YW55PltdXT4oXHJcbiAgLi4ubWF0Y2hlcnM6IE1hdGNoZXJzXHJcbikge1xyXG4gIHJldHVybiAoYWN0aW9uOiBhbnkpOiBhY3Rpb24gaXMgQWN0aW9uTWF0Y2hpbmdBbGxPZjxNYXRjaGVycz4gPT4ge1xyXG4gICAgcmV0dXJuIG1hdGNoZXJzLmV2ZXJ5KChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIGFjdGlvbiBBIHJlZHV4IGFjdGlvblxyXG4gKiBAcGFyYW0gdmFsaWRTdGF0dXMgQW4gYXJyYXkgb2YgdmFsaWQgbWV0YS5yZXF1ZXN0U3RhdHVzIHZhbHVlc1xyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShcclxuICBhY3Rpb246IGFueSxcclxuICB2YWxpZFN0YXR1czogcmVhZG9ubHkgc3RyaW5nW11cclxuKSB7XHJcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgY29uc3QgaGFzVmFsaWRSZXF1ZXN0SWQgPSB0eXBlb2YgYWN0aW9uLm1ldGEucmVxdWVzdElkID09PSAnc3RyaW5nJ1xyXG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdFN0YXR1cyA9XHJcbiAgICB2YWxpZFN0YXR1cy5pbmRleE9mKGFjdGlvbi5tZXRhLnJlcXVlc3RTdGF0dXMpID4gLTFcclxuXHJcbiAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1c1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhOiBbYW55XSB8IEFueUFzeW5jVGh1bmtbXSk6IGEgaXMgQW55QXN5bmNUaHVua1tdIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIGFbMF0gPT09ICdmdW5jdGlvbicgJiZcclxuICAgICdwZW5kaW5nJyBpbiBhWzBdICYmXHJcbiAgICAnZnVsZmlsbGVkJyBpbiBhWzBdICYmXHJcbiAgICAncmVqZWN0ZWQnIGluIGFbMF1cclxuICApXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFVua25vd25Bc3luY1RodW5rUGVuZGluZ0FjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25DcmVhdG9yPHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIFBlbmRpbmdBY3Rpb25Gcm9tQXN5bmNUaHVuazxUIGV4dGVuZHMgQW55QXN5bmNUaHVuaz4gPVxyXG4gIEFjdGlvbkZyb21NYXRjaGVyPFRbJ3BlbmRpbmcnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIHBlbmRpbmcuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmcoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUGVuZGluZ0FjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIHBlbmRpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZzxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oXHJcbiAgLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzXHJcbik6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIFBlbmRpbmdBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSBwZW5kaW5nIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUGVuZGluZ0FjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydwZW5kaW5nJ10pXHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIFBlbmRpbmdBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBhc3luY1RodW5rcy5tYXAoXHJcbiAgICAgIChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLnBlbmRpbmdcclxuICAgICkgYXMgYW55XHJcblxyXG4gICAgY29uc3QgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZiguLi5tYXRjaGVycylcclxuXHJcbiAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8dW5rbm93biwgdW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgUmVqZWN0ZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxUIGV4dGVuZHMgQW55QXN5bmNUaHVuaz4gPVxyXG4gIEFjdGlvbkZyb21NYXRjaGVyPFRbJ3JlamVjdGVkJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyByZWplY3RlZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyByZWplY3RlZC5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oXHJcbiAgLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzXHJcbik6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcmVqZWN0ZWQgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydyZWplY3RlZCddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc1JlamVjdGVkKCkoYXN5bmNUaHVua3NbMF0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYWN0aW9uOiBhbnlcclxuICApOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBhc3luY1RodW5rcy5tYXAoXHJcbiAgICAgIChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLnJlamVjdGVkXHJcbiAgICApIGFzIGFueVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkV2l0aFZhbHVlQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPHVua25vd24sIHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIFJlamVjdGVkV2l0aFZhbHVlQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydyZWplY3RlZCddPiAmXHJcbiAgICAoVCBleHRlbmRzIEFzeW5jVGh1bms8YW55LCBhbnksIHsgcmVqZWN0VmFsdWU6IGluZmVyIFJlamVjdGVkVmFsdWUgfT5cclxuICAgICAgPyB7IHBheWxvYWQ6IFJlamVjdGVkVmFsdWUgfVxyXG4gICAgICA6IHVua25vd24pXHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyByZWplY3RlZCB3aXRoIHZhbHVlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZSgpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIHJlamVjdGVkIHdpdGggdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWU8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgUmVqZWN0ZWRXaXRoVmFsdWVBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSByZWplY3RlZCB0aHVuayBhY3Rpb24gd2l0aCB2YWx1ZVxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZShcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZTxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBjb25zdCBoYXNGbGFnID0gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIGFueSA9PiB7XHJcbiAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlXHJcbiAgfVxyXG5cclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpXHJcblxyXG4gICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNSZWplY3RlZFdpdGhWYWx1ZSgpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgY29uc3QgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkKC4uLmFzeW5jVGh1bmtzKSwgaGFzRmxhZylcclxuXHJcbiAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFVua25vd25Bc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjx1bmtub3duLCB1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxUIGV4dGVuZHMgQW55QXN5bmNUaHVuaz4gPVxyXG4gIEFjdGlvbkZyb21NYXRjaGVyPFRbJ2Z1bGZpbGxlZCddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgZnVsZmlsbGVkLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgZnVsZmlsbGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oXHJcbiAgLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzXHJcbik6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIEZ1bGZpbGxlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIGZ1bGZpbGxlZCB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbJ2Z1bGZpbGxlZCddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc0Z1bGZpbGxlZCgpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIEZ1bGZpbGxlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIC8vIG5vdGU6IHRoaXMgdHlwZSB3aWxsIGJlIGNvcnJlY3QgYmVjYXVzZSB3ZSBoYXZlIGF0IGxlYXN0IDEgYXN5bmNUaHVua1xyXG4gICAgY29uc3QgbWF0Y2hlcnM6IFtNYXRjaGVyPGFueT4sIC4uLk1hdGNoZXI8YW55PltdXSA9IGFzeW5jVGh1bmtzLm1hcChcclxuICAgICAgKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsuZnVsZmlsbGVkXHJcbiAgICApIGFzIGFueVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua0FjdGlvbiA9XHJcbiAgfCBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuICB8IFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuICB8IFVua25vd25Bc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uXHJcblxyXG5leHBvcnQgdHlwZSBBbnlBc3luY1RodW5rID0ge1xyXG4gIHBlbmRpbmc6IHsgbWF0Y2g6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIGFueSB9XHJcbiAgZnVsZmlsbGVkOiB7IG1hdGNoOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBhbnkgfVxyXG4gIHJlamVjdGVkOiB7IG1hdGNoOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBhbnkgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25zRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICB8IEFjdGlvbkZyb21NYXRjaGVyPFRbJ3BlbmRpbmcnXT5cclxuICB8IEFjdGlvbkZyb21NYXRjaGVyPFRbJ2Z1bGZpbGxlZCddPlxyXG4gIHwgQWN0aW9uRnJvbU1hdGNoZXI8VFsncmVqZWN0ZWQnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0FjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb248XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBBY3Rpb25zRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb24oXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rQWN0aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb248XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT5cclxuICAgICAgaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbJ3BlbmRpbmcnLCAnZnVsZmlsbGVkJywgJ3JlamVjdGVkJ10pXHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzQXN5bmNUaHVua0FjdGlvbigpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIEFjdGlvbnNGcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBbXSBhcyBhbnlcclxuXHJcbiAgICBmb3IgKGNvbnN0IGFzeW5jVGh1bmsgb2YgYXN5bmNUaHVua3MpIHtcclxuICAgICAgbWF0Y2hlcnMucHVzaChcclxuICAgICAgICBhc3luY1RodW5rLnBlbmRpbmcsXHJcbiAgICAgICAgYXN5bmNUaHVuay5yZWplY3RlZCxcclxuICAgICAgICBhc3luY1RodW5rLmZ1bGZpbGxlZFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZiguLi5tYXRjaGVycylcclxuXHJcbiAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQWJvcnRTaWduYWxXaXRoUmVhc29uIH0gZnJvbSAnLi90eXBlcydcclxuXHJcbmV4cG9ydCBjb25zdCBhc3NlcnRGdW5jdGlvbjogKFxyXG4gIGZ1bmM6IHVua25vd24sXHJcbiAgZXhwZWN0ZWQ6IHN0cmluZ1xyXG4pID0+IGFzc2VydHMgZnVuYyBpcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duID0gKFxyXG4gIGZ1bmM6IHVua25vd24sXHJcbiAgZXhwZWN0ZWQ6IHN0cmluZ1xyXG4pID0+IHtcclxuICBpZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZXhwZWN0ZWR9IGlzIG5vdCBhIGZ1bmN0aW9uYClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBub29wID0gKCkgPT4ge31cclxuXHJcbmV4cG9ydCBjb25zdCBjYXRjaFJlamVjdGlvbiA9IDxUPihcclxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxyXG4gIG9uRXJyb3IgPSBub29wXHJcbik6IFByb21pc2U8VD4gPT4ge1xyXG4gIHByb21pc2UuY2F0Y2gob25FcnJvcilcclxuXHJcbiAgcmV0dXJuIHByb21pc2VcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSAoXHJcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxyXG4gIGNhbGxiYWNrOiAoZXZ0OiBFdmVudCkgPT4gdm9pZFxyXG4pID0+IHtcclxuICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGNhbGxiYWNrLCB7IG9uY2U6IHRydWUgfSlcclxuICByZXR1cm4gKCkgPT4gYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYWxsYmFjaylcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGxzIGBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKWAgYW5kIHBhdGNoZXMgYHNpZ25hbC5yZWFzb25gLlxyXG4gKiBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkLlxyXG4gKlxyXG4gKiBBdCB0aGUgdGltZSBvZiB3cml0aW5nIGBzaWduYWwucmVhc29uYCBpcyBhdmFpbGFibGUgaW4gRkYgY2hyb21lLCBlZGdlIG5vZGUgMTcgYW5kIGRlbm8uXHJcbiAqIEBwYXJhbSBhYm9ydENvbnRyb2xsZXJcclxuICogQHBhcmFtIHJlYXNvblxyXG4gKiBAcmV0dXJuc1xyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BYm9ydFNpZ25hbC9yZWFzb25cclxuICovXHJcbmV4cG9ydCBjb25zdCBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uID0gPFQ+KFxyXG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyLFxyXG4gIHJlYXNvbjogVFxyXG4pOiB2b2lkID0+IHtcclxuICB0eXBlIENvbnN1bWVyPFQ+ID0gKHZhbDogVCkgPT4gdm9pZFxyXG5cclxuICBjb25zdCBzaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsIGFzIEFib3J0U2lnbmFsV2l0aFJlYXNvbjxUPlxyXG5cclxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgLy8gUGF0Y2ggYHJlYXNvbmAgaWYgbmVjZXNzYXJ5LlxyXG4gIC8vIC0gV2UgdXNlIGRlZmluZVByb3BlcnR5IGhlcmUgYmVjYXVzZSByZWFzb24gaXMgYSBnZXR0ZXIgb2YgYEFib3J0U2lnbmFsLl9fcHJvdG9fX2AuXHJcbiAgLy8gLSBXZSBuZWVkIHRvIHBhdGNoICdyZWFzb24nIGJlZm9yZSBjYWxsaW5nIGAuYWJvcnQoKWAgYmVjYXVzZSBsaXN0ZW5lcnMgdG8gdGhlICdhYm9ydCdcclxuICAvLyBldmVudCBhcmUgYXJlIG5vdGlmaWVkIGltbWVkaWF0ZWx5LlxyXG4gIGlmICghKCdyZWFzb24nIGluIHNpZ25hbCkpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzaWduYWwsICdyZWFzb24nLCB7XHJcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgIHZhbHVlOiByZWFzb24sXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgOyhhYm9ydENvbnRyb2xsZXIuYWJvcnQgYXMgQ29uc3VtZXI8dHlwZW9mIHJlYXNvbj4pKHJlYXNvbilcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVkRXJyb3IgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0J1xyXG5cclxuY29uc3QgdGFzayA9ICd0YXNrJ1xyXG5jb25zdCBsaXN0ZW5lciA9ICdsaXN0ZW5lcidcclxuY29uc3QgY29tcGxldGVkID0gJ2NvbXBsZXRlZCdcclxuY29uc3QgY2FuY2VsbGVkID0gJ2NhbmNlbGxlZCdcclxuXHJcbi8qIFRhc2tBYm9ydEVycm9yIGVycm9yIGNvZGVzICAqL1xyXG5leHBvcnQgY29uc3QgdGFza0NhbmNlbGxlZCA9IGB0YXNrLSR7Y2FuY2VsbGVkfWAgYXMgY29uc3RcclxuZXhwb3J0IGNvbnN0IHRhc2tDb21wbGV0ZWQgPSBgdGFzay0ke2NvbXBsZXRlZH1gIGFzIGNvbnN0XHJcbmV4cG9ydCBjb25zdCBsaXN0ZW5lckNhbmNlbGxlZCA9IGAke2xpc3RlbmVyfS0ke2NhbmNlbGxlZH1gIGFzIGNvbnN0XHJcbmV4cG9ydCBjb25zdCBsaXN0ZW5lckNvbXBsZXRlZCA9IGAke2xpc3RlbmVyfS0ke2NvbXBsZXRlZH1gIGFzIGNvbnN0XHJcblxyXG5leHBvcnQgY2xhc3MgVGFza0Fib3J0RXJyb3IgaW1wbGVtZW50cyBTZXJpYWxpemVkRXJyb3Ige1xyXG4gIG5hbWUgPSAnVGFza0Fib3J0RXJyb3InXHJcbiAgbWVzc2FnZTogc3RyaW5nXHJcbiAgY29uc3RydWN0b3IocHVibGljIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5tZXNzYWdlID0gYCR7dGFza30gJHtjYW5jZWxsZWR9IChyZWFzb246ICR7Y29kZX0pYFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHsgVGFza0Fib3J0RXJyb3IgfSBmcm9tICcuL2V4Y2VwdGlvbnMnXHJcbmltcG9ydCB0eXBlIHsgQWJvcnRTaWduYWxXaXRoUmVhc29uLCBUYXNrUmVzdWx0IH0gZnJvbSAnLi90eXBlcydcclxuaW1wb3J0IHsgYWRkQWJvcnRTaWduYWxMaXN0ZW5lciwgY2F0Y2hSZWplY3Rpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuLyoqXHJcbiAqIFN5bmNocm9ub3VzbHkgcmFpc2VzIHtAbGluayBUYXNrQWJvcnRFcnJvcn0gaWYgdGhlIHRhc2sgdGllZCB0byB0aGUgaW5wdXQgYHNpZ25hbGAgaGFzIGJlZW4gY2FuY2VsbGVkLlxyXG4gKiBAcGFyYW0gc2lnbmFsXHJcbiAqIEBwYXJhbSByZWFzb25cclxuICogQHNlZSB7VGFza0Fib3J0RXJyb3J9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY3RpdmUgPSAoc2lnbmFsOiBBYm9ydFNpZ25hbCk6IHZvaWQgPT4ge1xyXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgdGhyb3cgbmV3IFRhc2tBYm9ydEVycm9yKChzaWduYWwgYXMgQWJvcnRTaWduYWxXaXRoUmVhc29uPHN0cmluZz4pLnJlYXNvbilcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYWNlIGJldHdlZW4gdGhlIHByb21pc2UocykgYW5kIHRoZSBBYm9ydFNpZ25hbFxyXG4gKiBUaGlzIGF2b2lkcyBgUHJvbWlzZS5yYWNlKClgLXJlbGF0ZWQgbWVtb3J5IGxlYWtzOlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzE3NDY5I2lzc3VlY29tbWVudC0zNDk3OTQ5MDlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByYWNlV2l0aFNpZ25hbDxUPihcclxuICBzaWduYWw6IEFib3J0U2lnbmFsV2l0aFJlYXNvbjxzdHJpbmc+LFxyXG4gIHByb21pc2U6IFByb21pc2U8VD5cclxuKTogUHJvbWlzZTxUPiB7XHJcbiAgbGV0IGNsZWFudXAgPSBub29wXHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGNvbnN0IG5vdGlmeVJlamVjdGlvbiA9ICgpID0+IHJlamVjdChuZXcgVGFza0Fib3J0RXJyb3Ioc2lnbmFsLnJlYXNvbikpXHJcblxyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgIG5vdGlmeVJlamVjdGlvbigpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFudXAgPSBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHNpZ25hbCwgbm90aWZ5UmVqZWN0aW9uKVxyXG4gICAgcHJvbWlzZS5maW5hbGx5KCgpID0+IGNsZWFudXAoKSkudGhlbihyZXNvbHZlLCByZWplY3QpXHJcbiAgfSkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAvLyBhZnRlciB0aGlzIHBvaW50LCByZXBsYWNlIGBjbGVhbnVwYCB3aXRoIGEgbm9vcCwgc28gdGhlcmUgaXMgbm8gcmVmZXJlbmNlIHRvIGBzaWduYWxgIGFueSBtb3JlXHJcbiAgICBjbGVhbnVwID0gbm9vcFxyXG4gIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSdW5zIGEgdGFzayBhbmQgcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8ge0BsaW5rIFRhc2tSZXN1bHR9LlxyXG4gKiBTZWNvbmQgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgYGNsZWFuVXBgIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJ1bnMgYWZ0ZXIgdGFzay5cclxuICpcclxuICogKipOb3RlOioqIGBydW5UYXNrYCBydW5zIHRoZSBleGVjdXRvciBpbiB0aGUgbmV4dCBtaWNyb3Rhc2suXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcnVuVGFzayA9IGFzeW5jIDxUPihcclxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxyXG4gIGNsZWFuVXA/OiAoKSA9PiB2b2lkXHJcbik6IFByb21pc2U8VGFza1Jlc3VsdDxUPj4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxyXG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0YXNrKClcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1czogJ29rJyxcclxuICAgICAgdmFsdWUsXHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhdHVzOiBlcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gJ2NhbmNlbGxlZCcgOiAncmVqZWN0ZWQnLFxyXG4gICAgICBlcnJvcixcclxuICAgIH1cclxuICB9IGZpbmFsbHkge1xyXG4gICAgY2xlYW5VcD8uKClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBpbnB1dCBgQWJvcnRTaWduYWxgIGFuZCBhIHByb21pc2UgcmV0dXJucyBhbm90aGVyIHByb21pc2UgdGhhdCByZXNvbHZlc1xyXG4gKiBhcyBzb29uIHRoZSBpbnB1dCBwcm9taXNlIGlzIHByb3ZpZGVkIG9yIHJlamVjdHMgYXMgc29vbiBhc1xyXG4gKiBgQWJvcnRTaWduYWwuYWJvcnRgIGlzIGB0cnVlYC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBhdXNlID0gPFQ+KHNpZ25hbDogQWJvcnRTaWduYWwpID0+IHtcclxuICByZXR1cm4gKHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgIHJldHVybiBjYXRjaFJlamVjdGlvbihcclxuICAgICAgcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlKS50aGVuKChvdXRwdXQpID0+IHtcclxuICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdpdmVuIGFuIGlucHV0IGBBYm9ydFNpZ25hbGAgYW5kIGB0aW1lb3V0TXNgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcclxuICogYWZ0ZXIgYHRpbWVvdXRNc2Agb3IgcmVqZWN0cyBhcyBzb29uIGFzIGBBYm9ydFNpZ25hbC5hYm9ydGAgaXMgYHRydWVgLlxyXG4gKiBAcGFyYW0gc2lnbmFsXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlRGVsYXkgPSAoc2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4ge1xyXG4gIGNvbnN0IHBhdXNlID0gY3JlYXRlUGF1c2U8dm9pZD4oc2lnbmFsKVxyXG4gIHJldHVybiAodGltZW91dE1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpKSlcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgRGlzcGF0Y2gsIEFueUFjdGlvbiwgTWlkZGxld2FyZUFQSSB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IFRodW5rRGlzcGF0Y2ggfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uLCBpc0FjdGlvbiB9IGZyb20gJy4uL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnLi4vbmFub2lkJ1xyXG5cclxuaW1wb3J0IHR5cGUge1xyXG4gIExpc3RlbmVyTWlkZGxld2FyZSxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZSxcclxuICBBZGRMaXN0ZW5lck92ZXJsb2FkcyxcclxuICBBbnlMaXN0ZW5lclByZWRpY2F0ZSxcclxuICBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zLFxyXG4gIFR5cGVkQWRkTGlzdGVuZXIsXHJcbiAgVHlwZWRDcmVhdGVMaXN0ZW5lckVudHJ5LFxyXG4gIEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zLFxyXG4gIExpc3RlbmVyRW50cnksXHJcbiAgTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lcixcclxuICBUYWtlUGF0dGVybixcclxuICBMaXN0ZW5lckVycm9ySW5mbyxcclxuICBGb3JrZWRUYXNrRXhlY3V0b3IsXHJcbiAgRm9ya2VkVGFzayxcclxuICBUeXBlZFJlbW92ZUxpc3RlbmVyLFxyXG4gIFRhc2tSZXN1bHQsXHJcbiAgQWJvcnRTaWduYWxXaXRoUmVhc29uLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zLFxyXG4gIEZvcmtPcHRpb25zLFxyXG59IGZyb20gJy4vdHlwZXMnXHJcbmltcG9ydCB7XHJcbiAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbixcclxuICBhZGRBYm9ydFNpZ25hbExpc3RlbmVyLFxyXG4gIGFzc2VydEZ1bmN0aW9uLFxyXG4gIGNhdGNoUmVqZWN0aW9uLFxyXG59IGZyb20gJy4vdXRpbHMnXHJcbmltcG9ydCB7XHJcbiAgbGlzdGVuZXJDYW5jZWxsZWQsXHJcbiAgbGlzdGVuZXJDb21wbGV0ZWQsXHJcbiAgVGFza0Fib3J0RXJyb3IsXHJcbiAgdGFza0NhbmNlbGxlZCxcclxuICB0YXNrQ29tcGxldGVkLFxyXG59IGZyb20gJy4vZXhjZXB0aW9ucydcclxuaW1wb3J0IHtcclxuICBydW5UYXNrLFxyXG4gIHZhbGlkYXRlQWN0aXZlLFxyXG4gIGNyZWF0ZVBhdXNlLFxyXG4gIGNyZWF0ZURlbGF5LFxyXG4gIHJhY2VXaXRoU2lnbmFsLFxyXG59IGZyb20gJy4vdGFzaydcclxuZXhwb3J0IHsgVGFza0Fib3J0RXJyb3IgfSBmcm9tICcuL2V4Y2VwdGlvbnMnXHJcbmV4cG9ydCB0eXBlIHtcclxuICBMaXN0ZW5lckVmZmVjdCxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgTGlzdGVuZXJFZmZlY3RBUEksXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2UsXHJcbiAgQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9ucyxcclxuICBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBUeXBlZFN0YXJ0TGlzdGVuaW5nLFxyXG4gIFR5cGVkQWRkTGlzdGVuZXIsXHJcbiAgVHlwZWRTdG9wTGlzdGVuaW5nLFxyXG4gIFR5cGVkUmVtb3ZlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucyxcclxuICBGb3JrZWRUYXNrRXhlY3V0b3IsXHJcbiAgRm9ya2VkVGFzayxcclxuICBGb3JrZWRUYXNrQVBJLFxyXG4gIEFzeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgVGFza0NhbmNlbGxlZCxcclxuICBUYXNrUmVqZWN0ZWQsXHJcbiAgVGFza1Jlc29sdmVkLFxyXG4gIFRhc2tSZXN1bHQsXHJcbn0gZnJvbSAnLi90eXBlcydcclxuXHJcbi8vT3Zlcmx5LWFnZ3Jlc3NpdmUgYnl0ZS1zaGF2aW5nXHJcbmNvbnN0IHsgYXNzaWduIH0gPSBPYmplY3RcclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuY29uc3QgSU5URVJOQUxfTklMX1RPS0VOID0ge30gYXMgY29uc3RcclxuXHJcbmNvbnN0IGFsbSA9ICdsaXN0ZW5lck1pZGRsZXdhcmUnIGFzIGNvbnN0XHJcblxyXG5jb25zdCBjcmVhdGVGb3JrID0gKFxyXG4gIHBhcmVudEFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbFdpdGhSZWFzb248dW5rbm93bj4sXHJcbiAgcGFyZW50QmxvY2tpbmdQcm9taXNlczogUHJvbWlzZTxhbnk+W11cclxuKSA9PiB7XHJcbiAgY29uc3QgbGlua0NvbnRyb2xsZXJzID0gKGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikgPT5cclxuICAgIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIocGFyZW50QWJvcnRTaWduYWwsICgpID0+XHJcbiAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgcGFyZW50QWJvcnRTaWduYWwucmVhc29uKVxyXG4gICAgKVxyXG5cclxuICByZXR1cm4gPFQ+KFxyXG4gICAgdGFza0V4ZWN1dG9yOiBGb3JrZWRUYXNrRXhlY3V0b3I8VD4sXHJcbiAgICBvcHRzPzogRm9ya09wdGlvbnNcclxuICApOiBGb3JrZWRUYXNrPFQ+ID0+IHtcclxuICAgIGFzc2VydEZ1bmN0aW9uKHRhc2tFeGVjdXRvciwgJ3Rhc2tFeGVjdXRvcicpXHJcbiAgICBjb25zdCBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxyXG5cclxuICAgIGxpbmtDb250cm9sbGVycyhjaGlsZEFib3J0Q29udHJvbGxlcilcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5UYXNrPFQ+KFxyXG4gICAgICBhc3luYyAoKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUocGFyZW50QWJvcnRTaWduYWwpXHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0YXNrRXhlY3V0b3Ioe1xyXG4gICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgIHNpZ25hbDogY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgIH0pKSBhcyBUXHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4gYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NvbXBsZXRlZClcclxuICAgIClcclxuXHJcbiAgICBpZiAob3B0cz8uYXV0b0pvaW4pIHtcclxuICAgICAgcGFyZW50QmxvY2tpbmdQcm9taXNlcy5wdXNoKHJlc3VsdClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN1bHQ6IGNyZWF0ZVBhdXNlPFRhc2tSZXN1bHQ8VD4+KHBhcmVudEFib3J0U2lnbmFsKShyZXN1bHQpLFxyXG4gICAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NhbmNlbGxlZClcclxuICAgICAgfSxcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNyZWF0ZVRha2VQYXR0ZXJuID0gPFM+KFxyXG4gIHN0YXJ0TGlzdGVuaW5nOiBBZGRMaXN0ZW5lck92ZXJsb2FkczxcclxuICAgIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgICBTLFxyXG4gICAgRGlzcGF0Y2g8QW55QWN0aW9uPlxyXG4gID4sXHJcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbFxyXG4pOiBUYWtlUGF0dGVybjxTPiA9PiB7XHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgTGlzdGVuZXJQcmVkaWNhdGUgYW5kIGFuIG9wdGlvbmFsIHRpbWVvdXQsXHJcbiAgICogYW5kIHJlc29sdmVzIHdoZW4gZWl0aGVyIHRoZSBwcmVkaWNhdGUgcmV0dXJucyBgdHJ1ZWAgYmFzZWQgb24gYW4gYWN0aW9uXHJcbiAgICogc3RhdGUgY29tYmluYXRpb24gb3Igd2hlbiB0aGUgdGltZW91dCBleHBpcmVzLlxyXG4gICAqIElmIHRoZSBwYXJlbnQgbGlzdGVuZXIgaXMgY2FuY2VsZWQgd2hpbGUgd2FpdGluZywgdGhpcyB3aWxsIHRocm93IGFcclxuICAgKiBUYXNrQWJvcnRFcnJvci5cclxuICAgKi9cclxuICBjb25zdCB0YWtlID0gYXN5bmMgPFAgZXh0ZW5kcyBBbnlMaXN0ZW5lclByZWRpY2F0ZTxTPj4oXHJcbiAgICBwcmVkaWNhdGU6IFAsXHJcbiAgICB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWRcclxuICApID0+IHtcclxuICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbClcclxuXHJcbiAgICAvLyBQbGFjZWhvbGRlciB1bnN1YnNjcmliZSBmdW5jdGlvbiB1bnRpbCB0aGUgbGlzdGVuZXIgaXMgYWRkZWRcclxuICAgIGxldCB1bnN1YnNjcmliZTogVW5zdWJzY3JpYmVMaXN0ZW5lciA9ICgpID0+IHt9XHJcblxyXG4gICAgY29uc3QgdHVwbGVQcm9taXNlID0gbmV3IFByb21pc2U8W0FueUFjdGlvbiwgUywgU10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gSW5zaWRlIHRoZSBQcm9taXNlLCB3ZSBzeW5jaHJvbm91c2x5IGFkZCB0aGUgbGlzdGVuZXIuXHJcbiAgICAgIGxldCBzdG9wTGlzdGVuaW5nID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlIGFzIGFueSxcclxuICAgICAgICBlZmZlY3Q6IChhY3Rpb24sIGxpc3RlbmVyQXBpKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAvLyBPbmUtc2hvdCBsaXN0ZW5lciB0aGF0IGNsZWFucyB1cCBhcyBzb29uIGFzIHRoZSBwcmVkaWNhdGUgcGFzc2VzXHJcbiAgICAgICAgICBsaXN0ZW5lckFwaS51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIHRoZSBwcmVkaWNhdGUgc2F3XHJcbiAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKCksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICAgIHVuc3Vic2NyaWJlID0gKCkgPT4ge1xyXG4gICAgICAgIHN0b3BMaXN0ZW5pbmcoKVxyXG4gICAgICAgIHJlamVjdCgpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXM6IChQcm9taXNlPG51bGw+IHwgUHJvbWlzZTxbQW55QWN0aW9uLCBTLCBTXT4pW10gPSBbXHJcbiAgICAgIHR1cGxlUHJvbWlzZSxcclxuICAgIF1cclxuXHJcbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XHJcbiAgICAgIHByb21pc2VzLnB1c2goXHJcbiAgICAgICAgbmV3IFByb21pc2U8bnVsbD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCwgbnVsbCkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByYWNlV2l0aFNpZ25hbChzaWduYWwsIFByb21pc2UucmFjZShwcm9taXNlcykpXHJcblxyXG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpXHJcbiAgICAgIHJldHVybiBvdXRwdXRcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIC8vIEFsd2F5cyBjbGVhbiB1cCB0aGUgbGlzdGVuZXJcclxuICAgICAgdW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuICgocHJlZGljYXRlOiBBbnlMaXN0ZW5lclByZWRpY2F0ZTxTPiwgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PlxyXG4gICAgY2F0Y2hSZWplY3Rpb24odGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpKSkgYXMgVGFrZVBhdHRlcm48Uz5cclxufVxyXG5cclxuY29uc3QgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IChvcHRpb25zOiBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucykgPT4ge1xyXG4gIGxldCB7IHR5cGUsIGFjdGlvbkNyZWF0b3IsIG1hdGNoZXIsIHByZWRpY2F0ZSwgZWZmZWN0IH0gPSBvcHRpb25zXHJcblxyXG4gIGlmICh0eXBlKSB7XHJcbiAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2hcclxuICB9IGVsc2UgaWYgKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgIHR5cGUgPSBhY3Rpb25DcmVhdG9yIS50eXBlXHJcbiAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoXHJcbiAgfSBlbHNlIGlmIChtYXRjaGVyKSB7XHJcbiAgICBwcmVkaWNhdGUgPSBtYXRjaGVyXHJcbiAgfSBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIC8vIHBhc3NcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnQ3JlYXRpbmcgb3IgcmVtb3ZpbmcgYSBsaXN0ZW5lciByZXF1aXJlcyBvbmUgb2YgdGhlIGtub3duIGZpZWxkcyBmb3IgbWF0Y2hpbmcgYW4gYWN0aW9uJ1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgYXNzZXJ0RnVuY3Rpb24oZWZmZWN0LCAnb3B0aW9ucy5saXN0ZW5lcicpXHJcblxyXG4gIHJldHVybiB7IHByZWRpY2F0ZSwgdHlwZSwgZWZmZWN0IH1cclxufVxyXG5cclxuLyoqIEFjY2VwdHMgdGhlIHBvc3NpYmxlIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgbGlzdGVuZXIsIGFuZCByZXR1cm5zIGEgZm9ybWF0dGVkIGxpc3RlbmVyIGVudHJ5ICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVMaXN0ZW5lckVudHJ5OiBUeXBlZENyZWF0ZUxpc3RlbmVyRW50cnk8dW5rbm93bj4gPSAoXHJcbiAgb3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnNcclxuKSA9PiB7XHJcbiAgY29uc3QgeyB0eXBlLCBwcmVkaWNhdGUsIGVmZmVjdCB9ID0gZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbShvcHRpb25zKVxyXG5cclxuICBjb25zdCBpZCA9IG5hbm9pZCgpXHJcbiAgY29uc3QgZW50cnk6IExpc3RlbmVyRW50cnk8dW5rbm93bj4gPSB7XHJcbiAgICBpZCxcclxuICAgIGVmZmVjdCxcclxuICAgIHR5cGUsXHJcbiAgICBwcmVkaWNhdGUsXHJcbiAgICBwZW5kaW5nOiBuZXcgU2V0PEFib3J0Q29udHJvbGxlcj4oKSxcclxuICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdWJzY3JpYmUgbm90IGluaXRpYWxpemVkJylcclxuICAgIH0sXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZW50cnlcclxufVxyXG5cclxuY29uc3QgY2FuY2VsQWN0aXZlTGlzdGVuZXJzID0gKFxyXG4gIGVudHJ5OiBMaXN0ZW5lckVudHJ5PHVua25vd24sIERpc3BhdGNoPEFueUFjdGlvbj4+XHJcbikgPT4ge1xyXG4gIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xyXG4gICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZClcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVDbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IChcclxuICBsaXN0ZW5lck1hcDogTWFwPHN0cmluZywgTGlzdGVuZXJFbnRyeT5cclxuKSA9PiB7XHJcbiAgcmV0dXJuICgpID0+IHtcclxuICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKVxyXG5cclxuICAgIGxpc3RlbmVyTWFwLmNsZWFyKClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYWZlbHkgcmVwb3J0cyBlcnJvcnMgdG8gdGhlIGBlcnJvckhhbmRsZXJgIHByb3ZpZGVkLlxyXG4gKiBFcnJvcnMgdGhhdCBvY2N1ciBpbnNpZGUgYGVycm9ySGFuZGxlcmAgYXJlIG5vdGlmaWVkIGluIGEgbmV3IHRhc2suXHJcbiAqIEluc3BpcmVkIGJ5IFtyeGpzIHJlcG9ydFVuaGFuZGxlZEVycm9yXShodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvYmxvYi82ZmFmY2Y1M2RjOWU1NTc0MzliMjVkZWJhZWFkZmQyMjRiMjQ1YTY2L3NyYy9pbnRlcm5hbC91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yLnRzKVxyXG4gKiBAcGFyYW0gZXJyb3JIYW5kbGVyXHJcbiAqIEBwYXJhbSBlcnJvclRvTm90aWZ5XHJcbiAqL1xyXG5jb25zdCBzYWZlbHlOb3RpZnlFcnJvciA9IChcclxuICBlcnJvckhhbmRsZXI6IExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIGVycm9yVG9Ob3RpZnk6IHVua25vd24sXHJcbiAgZXJyb3JJbmZvOiBMaXN0ZW5lckVycm9ySW5mb1xyXG4pOiB2b2lkID0+IHtcclxuICB0cnkge1xyXG4gICAgZXJyb3JIYW5kbGVyKGVycm9yVG9Ob3RpZnksIGVycm9ySW5mbylcclxuICB9IGNhdGNoIChlcnJvckhhbmRsZXJFcnJvcikge1xyXG4gICAgLy8gV2UgY2Fubm90IGxldCBhbiBlcnJvciByYWlzZWQgaGVyZSBibG9jayB0aGUgbGlzdGVuZXIgcXVldWUuXHJcbiAgICAvLyBUaGUgZXJyb3IgcmFpc2VkIGhlcmUgd2lsbCBiZSBwaWNrZWQgdXAgYnkgYHdpbmRvdy5vbmVycm9yYCwgYHByb2Nlc3Mub24oJ2Vycm9yJylgIGV0Yy4uLlxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yXHJcbiAgICB9LCAwKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBhZGRMaXN0ZW5lciA9IGNyZWF0ZUFjdGlvbihcclxuICBgJHthbG19L2FkZGBcclxuKSBhcyBUeXBlZEFkZExpc3RlbmVyPHVua25vd24+XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNsZWFyQWxsTGlzdGVuZXJzID0gY3JlYXRlQWN0aW9uKGAke2FsbX0vcmVtb3ZlQWxsYClcclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oXHJcbiAgYCR7YWxtfS9yZW1vdmVgXHJcbikgYXMgVHlwZWRSZW1vdmVMaXN0ZW5lcjx1bmtub3duPlxyXG5cclxuY29uc3QgZGVmYXVsdEVycm9ySGFuZGxlcjogTGlzdGVuZXJFcnJvckhhbmRsZXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XHJcbiAgY29uc29sZS5lcnJvcihgJHthbG19L2Vycm9yYCwgLi4uYXJncylcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmU8XHJcbiAgUyA9IHVua25vd24sXHJcbiAgRCBleHRlbmRzIERpc3BhdGNoPEFueUFjdGlvbj4gPSBUaHVua0Rpc3BhdGNoPFMsIHVua25vd24sIEFueUFjdGlvbj4sXHJcbiAgRXh0cmFBcmd1bWVudCA9IHVua25vd25cclxuPihtaWRkbGV3YXJlT3B0aW9uczogQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9uczxFeHRyYUFyZ3VtZW50PiA9IHt9KSB7XHJcbiAgY29uc3QgbGlzdGVuZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgTGlzdGVuZXJFbnRyeT4oKVxyXG4gIGNvbnN0IHsgZXh0cmEsIG9uRXJyb3IgPSBkZWZhdWx0RXJyb3JIYW5kbGVyIH0gPSBtaWRkbGV3YXJlT3B0aW9uc1xyXG5cclxuICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCAnb25FcnJvcicpXHJcblxyXG4gIGNvbnN0IGluc2VydEVudHJ5ID0gKGVudHJ5OiBMaXN0ZW5lckVudHJ5KSA9PiB7XHJcbiAgICBlbnRyeS51bnN1YnNjcmliZSA9ICgpID0+IGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeSEuaWQpXHJcblxyXG4gICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSlcclxuICAgIHJldHVybiAoY2FuY2VsT3B0aW9ucz86IFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zKSA9PiB7XHJcbiAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKClcclxuICAgICAgaWYgKGNhbmNlbE9wdGlvbnM/LmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZmluZExpc3RlbmVyRW50cnkgPSAoXHJcbiAgICBjb21wYXJhdG9yOiAoZW50cnk6IExpc3RlbmVyRW50cnkpID0+IGJvb2xlYW5cclxuICApOiBMaXN0ZW5lckVudHJ5IHwgdW5kZWZpbmVkID0+IHtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSkpIHtcclxuICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgcmV0dXJuIGVudHJ5XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGFydExpc3RlbmluZyA9IChvcHRpb25zOiBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucykgPT4ge1xyXG4gICAgbGV0IGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoXHJcbiAgICAgIChleGlzdGluZ0VudHJ5KSA9PiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3RcclxuICAgIClcclxuXHJcbiAgICBpZiAoIWVudHJ5KSB7XHJcbiAgICAgIGVudHJ5ID0gY3JlYXRlTGlzdGVuZXJFbnRyeShvcHRpb25zIGFzIGFueSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdG9wTGlzdGVuaW5nID0gKFxyXG4gICAgb3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMgJiBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9uc1xyXG4gICk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgeyB0eXBlLCBlZmZlY3QsIHByZWRpY2F0ZSB9ID0gZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbShvcHRpb25zKVxyXG5cclxuICAgIGNvbnN0IGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoKGVudHJ5KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hdGNoUHJlZGljYXRlT3JUeXBlID1cclxuICAgICAgICB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gZW50cnkudHlwZSA9PT0gdHlwZVxyXG4gICAgICAgICAgOiBlbnRyeS5wcmVkaWNhdGUgPT09IHByZWRpY2F0ZVxyXG5cclxuICAgICAgcmV0dXJuIG1hdGNoUHJlZGljYXRlT3JUeXBlICYmIGVudHJ5LmVmZmVjdCA9PT0gZWZmZWN0XHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChlbnRyeSkge1xyXG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpXHJcbiAgICAgIGlmIChvcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhIWVudHJ5XHJcbiAgfVxyXG5cclxuICBjb25zdCBub3RpZnlMaXN0ZW5lciA9IGFzeW5jIChcclxuICAgIGVudHJ5OiBMaXN0ZW5lckVudHJ5PHVua25vd24sIERpc3BhdGNoPEFueUFjdGlvbj4+LFxyXG4gICAgYWN0aW9uOiBBbnlBY3Rpb24sXHJcbiAgICBhcGk6IE1pZGRsZXdhcmVBUEksXHJcbiAgICBnZXRPcmlnaW5hbFN0YXRlOiAoKSA9PiBTXHJcbiAgKSA9PiB7XHJcbiAgICBjb25zdCBpbnRlcm5hbFRhc2tDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXHJcbiAgICBjb25zdCB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oXHJcbiAgICAgIHN0YXJ0TGlzdGVuaW5nLFxyXG4gICAgICBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbFxyXG4gICAgKVxyXG4gICAgY29uc3QgYXV0b0pvaW5Qcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpXHJcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShcclxuICAgICAgICBlbnRyeS5lZmZlY3QoXHJcbiAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAvLyBVc2UgYXNzaWduKCkgcmF0aGVyIHRoYW4gLi4uIHRvIGF2b2lkIGV4dHJhIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYnVuZGxlXHJcbiAgICAgICAgICBhc3NpZ24oe30sIGFwaSwge1xyXG4gICAgICAgICAgICBnZXRPcmlnaW5hbFN0YXRlLFxyXG4gICAgICAgICAgICBjb25kaXRpb246IChcclxuICAgICAgICAgICAgICBwcmVkaWNhdGU6IEFueUxpc3RlbmVyUHJlZGljYXRlPGFueT4sXHJcbiAgICAgICAgICAgICAgdGltZW91dD86IG51bWJlclxyXG4gICAgICAgICAgICApID0+IHRha2UocHJlZGljYXRlLCB0aW1lb3V0KS50aGVuKEJvb2xlYW4pLFxyXG4gICAgICAgICAgICB0YWtlLFxyXG4gICAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2U8YW55PihpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgIGV4dHJhLFxyXG4gICAgICAgICAgICBzaWduYWw6IGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICBmb3JrOiBjcmVhdGVGb3JrKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLCBhdXRvSm9pblByb21pc2VzKSxcclxuICAgICAgICAgICAgdW5zdWJzY3JpYmU6IGVudHJ5LnVuc3Vic2NyaWJlLFxyXG4gICAgICAgICAgICBzdWJzY3JpYmU6ICgpID0+IHtcclxuICAgICAgICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6ICgpID0+IHtcclxuICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIsIF8sIHNldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgIT09IGludGVybmFsVGFza0NvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZClcclxuICAgICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShjb250cm9sbGVyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAobGlzdGVuZXJFcnJvcikge1xyXG4gICAgICBpZiAoIShsaXN0ZW5lckVycm9yIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IpKSB7XHJcbiAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgbGlzdGVuZXJFcnJvciwge1xyXG4gICAgICAgICAgcmFpc2VkQnk6ICdlZmZlY3QnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhdXRvSm9pblByb21pc2VzKVxyXG5cclxuICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNvbXBsZXRlZCkgLy8gTm90aWZ5IHRoYXQgdGhlIHRhc2sgaGFzIGNvbXBsZXRlZFxyXG4gICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSBjcmVhdGVDbGVhckxpc3RlbmVyTWlkZGxld2FyZShsaXN0ZW5lck1hcClcclxuXHJcbiAgY29uc3QgbWlkZGxld2FyZTogTGlzdGVuZXJNaWRkbGV3YXJlPFMsIEQsIEV4dHJhQXJndW1lbnQ+ID1cclxuICAgIChhcGkpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICghaXNBY3Rpb24oYWN0aW9uKSkge1xyXG4gICAgICAgIC8vIHdlIG9ubHkgd2FudCB0byBub3RpZnkgbGlzdGVuZXJzIGZvciBhY3Rpb24gb2JqZWN0c1xyXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGFkZExpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjbGVhckFsbExpc3RlbmVycy5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVtb3ZlTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBOZWVkIHRvIGdldCB0aGlzIHN0YXRlIF9iZWZvcmVfIHRoZSByZWR1Y2VyIHByb2Nlc3NlcyB0aGUgYWN0aW9uXHJcbiAgICAgIGxldCBvcmlnaW5hbFN0YXRlOiBTIHwgdHlwZW9mIElOVEVSTkFMX05JTF9UT0tFTiA9IGFwaS5nZXRTdGF0ZSgpXHJcblxyXG4gICAgICAvLyBgZ2V0T3JpZ2luYWxTdGF0ZWAgY2FuIG9ubHkgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkuXHJcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtdG9vbGtpdC9kaXNjdXNzaW9ucy8xNjQ4I2Rpc2N1c3Npb25jb21tZW50LTE5MzI4MjBcclxuICAgICAgY29uc3QgZ2V0T3JpZ2luYWxTdGF0ZSA9ICgpOiBTID0+IHtcclxuICAgICAgICBpZiAob3JpZ2luYWxTdGF0ZSA9PT0gSU5URVJOQUxfTklMX1RPS0VOKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGAke2FsbX06IGdldE9yaWdpbmFsU3RhdGUgY2FuIG9ubHkgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHlgXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxTdGF0ZSBhcyBTXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCByZXN1bHQ6IHVua25vd25cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gQWN0dWFsbHkgZm9yd2FyZCB0aGUgYWN0aW9uIHRvIHRoZSByZWR1Y2VyIGJlZm9yZSB3ZSBoYW5kbGUgbGlzdGVuZXJzXHJcbiAgICAgICAgcmVzdWx0ID0gbmV4dChhY3Rpb24pXHJcblxyXG4gICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpXHJcbiAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBFU0J1aWxkK1RTIHRyYW5zcGlsYXRpb24gaXNzdWVcclxuICAgICAgICAgIGNvbnN0IGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpXHJcbiAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBsaXN0ZW5lckVudHJpZXMpIHtcclxuICAgICAgICAgICAgbGV0IHJ1bkxpc3RlbmVyID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKHByZWRpY2F0ZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBwcmVkaWNhdGVFcnJvciwge1xyXG4gICAgICAgICAgICAgICAgcmFpc2VkQnk6ICdwcmVkaWNhdGUnLFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcnVuTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIC8vIFJlbW92ZSBgb3JpZ2luYWxTdGF0ZWAgc3RvcmUgZnJvbSB0aGlzIHNjb3BlLlxyXG4gICAgICAgIG9yaWdpbmFsU3RhdGUgPSBJTlRFUk5BTF9OSUxfVE9LRU5cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbWlkZGxld2FyZSxcclxuICAgIHN0YXJ0TGlzdGVuaW5nLFxyXG4gICAgc3RvcExpc3RlbmluZyxcclxuICAgIGNsZWFyTGlzdGVuZXJzOiBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSxcclxuICB9IGFzIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlPFMsIEQsIEV4dHJhQXJndW1lbnQ+XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5cclxuZXhwb3J0IGNvbnN0IFNIT1VMRF9BVVRPQkFUQ0ggPSAnUlRLX2F1dG9CYXRjaCdcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVwYXJlQXV0b0JhdGNoZWQgPVxyXG4gIDxUPigpID0+XHJcbiAgKHBheWxvYWQ6IFQpOiB7IHBheWxvYWQ6IFQ7IG1ldGE6IHVua25vd24gfSA9PiAoe1xyXG4gICAgcGF5bG9hZCxcclxuICAgIG1ldGE6IHsgW1NIT1VMRF9BVVRPQkFUQ0hdOiB0cnVlIH0sXHJcbiAgfSlcclxuXHJcbi8vIFRPRE8gUmVtb3ZlIHRoaXMgaW4gMi4wXHJcbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvcXVldWUtbWljcm90YXNrXHJcbmxldCBwcm9taXNlOiBQcm9taXNlPGFueT5cclxuY29uc3QgcXVldWVNaWNyb3Rhc2tTaGltID1cclxuICB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgPT09ICdmdW5jdGlvbidcclxuICAgID8gcXVldWVNaWNyb3Rhc2suYmluZChcclxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgPyB3aW5kb3dcclxuICAgICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgID8gZ2xvYmFsXHJcbiAgICAgICAgICA6IGdsb2JhbFRoaXNcclxuICAgICAgKVxyXG4gICAgOiAvLyByZXVzZSByZXNvbHZlZCBwcm9taXNlLCBhbmQgYWxsb2NhdGUgaXQgbGF6aWx5XHJcbiAgICAgIChjYjogKCkgPT4gdm9pZCkgPT5cclxuICAgICAgICAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSkudGhlbihjYikuY2F0Y2goKGVycjogYW55KSA9PlxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfSwgMClcclxuICAgICAgICApXHJcblxyXG5jb25zdCBjcmVhdGVRdWV1ZVdpdGhUaW1lciA9ICh0aW1lb3V0OiBudW1iZXIpID0+IHtcclxuICByZXR1cm4gKG5vdGlmeTogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpXHJcbiAgfVxyXG59XHJcblxyXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgd29uJ3QgZXhpc3QgaW4gU1NSIGVudmlyb25tZW50cy5cclxuLy8gRmFsbCBiYWNrIHRvIGEgdmFndWUgYXBwcm94aW1hdGlvbiBqdXN0IHRvIGtlZXAgZnJvbSBlcnJvcmluZy5cclxuY29uc3QgckFGID1cclxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIDogY3JlYXRlUXVldWVXaXRoVGltZXIoMTApXHJcblxyXG5leHBvcnQgdHlwZSBBdXRvQmF0Y2hPcHRpb25zID1cclxuICB8IHsgdHlwZTogJ3RpY2snIH1cclxuICB8IHsgdHlwZTogJ3RpbWVyJzsgdGltZW91dDogbnVtYmVyIH1cclxuICB8IHsgdHlwZTogJ3JhZicgfVxyXG4gIHwgeyB0eXBlOiAnY2FsbGJhY2snOyBxdWV1ZU5vdGlmaWNhdGlvbjogKG5vdGlmeTogKCkgPT4gdm9pZCkgPT4gdm9pZCB9XHJcblxyXG4vKipcclxuICogQSBSZWR1eCBzdG9yZSBlbmhhbmNlciB0aGF0IHdhdGNoZXMgZm9yIFwibG93LXByaW9yaXR5XCIgYWN0aW9ucywgYW5kIGRlbGF5c1xyXG4gKiBub3RpZnlpbmcgc3Vic2NyaWJlcnMgdW50aWwgZWl0aGVyIHRoZSBxdWV1ZWQgY2FsbGJhY2sgZXhlY3V0ZXMgb3IgdGhlXHJcbiAqIG5leHQgXCJzdGFuZGFyZC1wcmlvcml0eVwiIGFjdGlvbiBpcyBkaXNwYXRjaGVkLlxyXG4gKlxyXG4gKiBUaGlzIGFsbG93cyBkaXNwYXRjaGluZyBtdWx0aXBsZSBcImxvdy1wcmlvcml0eVwiIGFjdGlvbnMgaW4gYSByb3cgd2l0aCBvbmx5XHJcbiAqIGEgc2luZ2xlIHN1YnNjcmliZXIgbm90aWZpY2F0aW9uIHRvIHRoZSBVSSBhZnRlciB0aGUgc2VxdWVuY2Ugb2YgYWN0aW9uc1xyXG4gKiBpcyBmaW5pc2hlZCwgdGh1cyBpbXByb3ZpbmcgVUkgcmUtcmVuZGVyIHBlcmZvcm1hbmNlLlxyXG4gKlxyXG4gKiBXYXRjaGVzIGZvciBhY3Rpb25zIHdpdGggdGhlIGBhY3Rpb24ubWV0YVtTSE9VTERfQVVUT0JBVENIXWAgYXR0cmlidXRlLlxyXG4gKiBUaGlzIGNhbiBiZSBhZGRlZCB0byBgYWN0aW9uLm1ldGFgIG1hbnVhbGx5LCBvciBieSB1c2luZyB0aGVcclxuICogYHByZXBhcmVBdXRvQmF0Y2hlZGAgaGVscGVyLlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0LCBpdCB3aWxsIHF1ZXVlIGEgbm90aWZpY2F0aW9uIGZvciB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHRpY2suXHJcbiAqIEhvd2V2ZXIsIHlvdSBjYW4gcGFzcyBzZXZlcmFsIG90aGVyIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBiZWhhdmlvcjpcclxuICogLSBge3R5cGU6ICd0aWNrJ306IHF1ZXVlcyB1c2luZyBgcXVldWVNaWNyb3Rhc2tgIChkZWZhdWx0KVxyXG4gKiAtIGB7dHlwZTogJ3RpbWVyLCB0aW1lb3V0OiBudW1iZXJ9YDogcXVldWVzIHVzaW5nIGBzZXRUaW1lb3V0YFxyXG4gKiAtIGB7dHlwZTogJ3JhZid9YDogcXVldWVzIHVzaW5nIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXHJcbiAqIC0gYHt0eXBlOiAnY2FsbGJhY2snLCBxdWV1ZU5vdGlmaWNhdGlvbjogKG5vdGlmeTogKCkgPT4gdm9pZCkgPT4gdm9pZH06IGxldHMgeW91IHByb3ZpZGUgeW91ciBvd24gY2FsbGJhY2tcclxuICpcclxuICpcclxuICovXHJcbmV4cG9ydCBjb25zdCBhdXRvQmF0Y2hFbmhhbmNlciA9XHJcbiAgKG9wdGlvbnM6IEF1dG9CYXRjaE9wdGlvbnMgPSB7IHR5cGU6ICdyYWYnIH0pOiBTdG9yZUVuaGFuY2VyID0+XHJcbiAgKG5leHQpID0+XHJcbiAgKC4uLmFyZ3MpID0+IHtcclxuICAgIGNvbnN0IHN0b3JlID0gbmV4dCguLi5hcmdzKVxyXG5cclxuICAgIGxldCBub3RpZnlpbmcgPSB0cnVlXHJcbiAgICBsZXQgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZVxyXG4gICAgbGV0IG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlXHJcblxyXG4gICAgY29uc3QgbGlzdGVuZXJzID0gbmV3IFNldDwoKSA9PiB2b2lkPigpXHJcblxyXG4gICAgY29uc3QgcXVldWVDYWxsYmFjayA9XHJcbiAgICAgIG9wdGlvbnMudHlwZSA9PT0gJ3RpY2snXHJcbiAgICAgICAgPyBxdWV1ZU1pY3JvdGFza1NoaW1cclxuICAgICAgICA6IG9wdGlvbnMudHlwZSA9PT0gJ3JhZidcclxuICAgICAgICA/IHJBRlxyXG4gICAgICAgIDogb3B0aW9ucy50eXBlID09PSAnY2FsbGJhY2snXHJcbiAgICAgICAgPyBvcHRpb25zLnF1ZXVlTm90aWZpY2F0aW9uXHJcbiAgICAgICAgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpXHJcblxyXG4gICAgY29uc3Qgbm90aWZ5TGlzdGVuZXJzID0gKCkgPT4ge1xyXG4gICAgICAvLyBXZSdyZSBydW5uaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3AgdGljay5cclxuICAgICAgLy8gUnVuIHRoZSByZWFsIGxpc3RlbmVyIGNhbGxiYWNrcyB0byBhY3R1YWxseSB1cGRhdGUgdGhlIFVJLlxyXG4gICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZVxyXG4gICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9IGZhbHNlXHJcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGwpID0+IGwoKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdG9yZSwge1xyXG4gICAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBgc3RvcmUuc3Vic2NyaWJlYCBtZXRob2QgdG8ga2VlcCBvcmlnaW5hbCBsaXN0ZW5lcnNcclxuICAgICAgLy8gZnJvbSBydW5uaW5nIGlmIHdlJ3JlIGRlbGF5aW5nIG5vdGlmaWNhdGlvbnNcclxuICAgICAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgLy8gRWFjaCB3cmFwcGVkIGxpc3RlbmVyIHdpbGwgb25seSBjYWxsIHRoZSByZWFsIGxpc3RlbmVyIGlmXHJcbiAgICAgICAgLy8gdGhlIGBub3RpZnlpbmdgIGZsYWcgaXMgY3VycmVudGx5IGFjdGl2ZSB3aGVuIGl0J3MgY2FsbGVkLlxyXG4gICAgICAgIC8vIFRoaXMgbGV0cyB0aGUgYmFzZSBzdG9yZSB3b3JrIGFzIG5vcm1hbCwgd2hpbGUgdGhlIGFjdHVhbCBVSVxyXG4gICAgICAgIC8vIHVwZGF0ZSBiZWNvbWVzIGNvbnRyb2xsZWQgYnkgdGhpcyBlbmhhbmNlci5cclxuICAgICAgICBjb25zdCB3cmFwcGVkTGlzdGVuZXI6IHR5cGVvZiBsaXN0ZW5lciA9ICgpID0+IG5vdGlmeWluZyAmJiBsaXN0ZW5lcigpXHJcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUod3JhcHBlZExpc3RlbmVyKVxyXG4gICAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpXHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgIHVuc3Vic2NyaWJlKClcclxuICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBgc3RvcmUuZGlzcGF0Y2hgIG1ldGhvZCBzbyB0aGF0IHdlIGNhbiBjaGVjayBhY3Rpb25zXHJcbiAgICAgIC8vIGZvciB0aGUgYHNob3VsZEF1dG9CYXRjaGAgZmxhZyBhbmQgZGV0ZXJtaW5lIGlmIGJhdGNoaW5nIGlzIGFjdGl2ZVxyXG4gICAgICBkaXNwYXRjaChhY3Rpb246IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgYWN0aW9uIGRvZXMgX25vdF8gaGF2ZSB0aGUgYHNob3VsZEF1dG9CYXRjaGAgZmxhZyxcclxuICAgICAgICAgIC8vIHdlIHJlc3VtZS9jb250aW51ZSBub3JtYWwgbm90aWZ5LWFmdGVyLWVhY2gtZGlzcGF0Y2ggYmVoYXZpb3JcclxuICAgICAgICAgIG5vdGlmeWluZyA9ICFhY3Rpb24/Lm1ldGE/LltTSE9VTERfQVVUT0JBVENIXVxyXG4gICAgICAgICAgLy8gSWYgYSBgbm90aWZ5TGlzdGVuZXJzYCBtaWNyb3Rhc2sgd2FzIHF1ZXVlZCwgeW91IGNhbid0IGNhbmNlbCBpdC5cclxuICAgICAgICAgIC8vIEluc3RlYWQsIHdlIHNldCBhIGZsYWcgc28gdGhhdCBpdCdzIGEgbm8tb3Agd2hlbiBpdCBkb2VzIHJ1blxyXG4gICAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSAhbm90aWZ5aW5nXHJcbiAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgLy8gV2UndmUgc2VlbiBhdCBsZWFzdCAxIGFjdGlvbiB3aXRoIGBTSE9VTERfQVVUT0JBVENIYC4gVHJ5IHRvIHF1ZXVlXHJcbiAgICAgICAgICAgIC8vIGEgbWljcm90YXNrIHRvIG5vdGlmeSBsaXN0ZW5lcnMgYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCB0aWNrLlxyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBlbnF1ZXVlIHRoaXMgX29uY2VfIHBlciB0aWNrLlxyXG4gICAgICAgICAgICBpZiAoIW5vdGlmaWNhdGlvblF1ZXVlZCkge1xyXG4gICAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IHRydWVcclxuICAgICAgICAgICAgICBxdWV1ZUNhbGxiYWNrKG5vdGlmeUxpc3RlbmVycylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHByb2Nlc3MgdGhlIGFjdGlvbiBhcyB1c3VhbCwgaW5jbHVkaW5nIHJlZHVjZXJzLlxyXG4gICAgICAgICAgLy8gSWYgbm9ybWFsIG5vdGlmaWNhdGlvbiBiZWhhdmlvciBpcyBlbmFibGVkLCB0aGUgc3RvcmUgd2lsbCBub3RpZnlcclxuICAgICAgICAgIC8vIGFsbCBvZiBpdHMgb3duIGxpc3RlbmVycywgYW5kIHRoZSB3cmFwcGVyIGNhbGxiYWNrcyBhYm92ZSB3aWxsXHJcbiAgICAgICAgICAvLyBzZWUgYG5vdGlmeWluZ2AgaXMgdHJ1ZSBhbmQgcGFzcyBvbiB0byB0aGUgcmVhbCBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICAgICAgICAvLyBJZiB3ZSdyZSBcImJhdGNoaW5nXCIgYmVoYXZpb3IsIHRoZW4gdGhlIHdyYXBwZWQgY2FsbGJhY2tzIHdpbGxcclxuICAgICAgICAgIC8vIGJhaWwgb3V0LCBjYXVzaW5nIHRoZSBiYXNlIHN0b3JlIG5vdGlmaWNhdGlvbiBiZWhhdmlvciB0byBiZSBuby1vcHMuXHJcbiAgICAgICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2goYWN0aW9uKVxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAvLyBBc3N1bWUgd2UncmUgYmFjayB0byBub3JtYWwgYmVoYXZpb3IgYWZ0ZXIgZWFjaCBhY3Rpb25cclxuICAgICAgICAgIG5vdGlmeWluZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KVxyXG4gIH1cclxuIiwgInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn07XHJcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxyXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcclxuICAgIHJldHVybiB0bztcclxufTtcclxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxudmFyIF9fZGVmUHJvcHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcclxudmFyIF9fZ2V0T3duUHJvcERlc2NzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XHJcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcclxudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XHJcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xyXG52YXIgX19kZWZOb3JtYWxQcm9wID0gZnVuY3Rpb24gKG9iaiwga2V5LCB2YWx1ZSkgeyByZXR1cm4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlOyB9O1xyXG52YXIgX19zcHJlYWRWYWx1ZXMgPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxyXG4gICAgICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcclxuICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IF9fZ2V0T3duUHJvcFN5bWJvbHMoYik7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gX2NbX2ldO1xyXG4gICAgICAgICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn07XHJcbnZhciBfX3NwcmVhZFByb3BzID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIF9fZGVmUHJvcHMoYSwgX19nZXRPd25Qcm9wRGVzY3MoYikpOyB9O1xyXG52YXIgX19hc3luYyA9IGZ1bmN0aW9uIChfX3RoaXMsIF9fYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIGZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciByZWplY3RlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RlcChnZW5lcmF0b3IudGhyb3codmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgc3RlcCA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmRvbmUgPyByZXNvbHZlKHgudmFsdWUpIDogUHJvbWlzZS5yZXNvbHZlKHgudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH07XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KF9fdGhpcywgX19hcmd1bWVudHMpKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbi8vIHNyYy9pbmRleC50c1xyXG5pbXBvcnQgeyBlbmFibGVFUzUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZXhwb3J0ICogZnJvbSBcInJlZHV4XCI7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdDIsIGN1cnJlbnQgYXMgY3VycmVudDIsIGZyZWV6ZSwgb3JpZ2luYWwsIGlzRHJhZnQgYXMgaXNEcmFmdDQgfSBmcm9tIFwiaW1tZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgYXMgY3JlYXRlU2VsZWN0b3IyIH0gZnJvbSBcInJlc2VsZWN0XCI7XHJcbi8vIHNyYy9jcmVhdGVEcmFmdFNhZmVTZWxlY3Rvci50c1xyXG5pbXBvcnQgeyBjdXJyZW50LCBpc0RyYWZ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIH0gZnJvbSBcInJlc2VsZWN0XCI7XHJcbnZhciBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHZhciBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICB2YXIgd3JhcHBlZFNlbGVjdG9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3QgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICByZXN0W19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VsZWN0b3IuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtpc0RyYWZ0KHZhbHVlKSA/IGN1cnJlbnQodmFsdWUpIDogdmFsdWVdLCByZXN0KSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHdyYXBwZWRTZWxlY3RvcjtcclxufTtcclxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXHJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21wb3NlIGFzIGNvbXBvc2UyLCBhcHBseU1pZGRsZXdhcmUsIGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gXCJyZWR1eFwiO1xyXG4vLyBzcmMvZGV2dG9vbHNFeHRlbnNpb24udHNcclxuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gXCJyZWR1eFwiO1xyXG52YXIgY29tcG9zZVdpdGhEZXZUb29scyA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICByZXR1cm4gdm9pZCAwO1xyXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2U7XHJcbiAgICByZXR1cm4gY29tcG9zZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG52YXIgZGV2VG9vbHNFbmhhbmNlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9vcDIpIHtcclxuICAgICAgICByZXR1cm4gbm9vcDI7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvaXNQbGFpbk9iamVjdC50c1xyXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XHJcbiAgICBpZiAocHJvdG8gPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB2YXIgYmFzZVByb3RvID0gcHJvdG87XHJcbiAgICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90bykgIT09IG51bGwpIHtcclxuICAgICAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm90byA9PT0gYmFzZVByb3RvO1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5pbXBvcnQgdGh1bmtNaWRkbGV3YXJlIGZyb20gXCJyZWR1eC10aHVua1wiO1xyXG4vLyBzcmMvdHNIZWxwZXJzLnRzXHJcbnZhciBoYXNNYXRjaEZ1bmN0aW9uID0gZnVuY3Rpb24gKHYpIHtcclxuICAgIHJldHVybiB2ICYmIHR5cGVvZiB2Lm1hdGNoID09PSBcImZ1bmN0aW9uXCI7XHJcbn07XHJcbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcclxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVBY3Rpb24pIHtcclxuICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmVwYXJlZCA9IHByZXBhcmVBY3Rpb24uYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVwYXJlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJlcGFyZUFjdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3RcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkXHJcbiAgICAgICAgICAgIH0sIFwibWV0YVwiIGluIHByZXBhcmVkICYmIHsgbWV0YTogcHJlcGFyZWQubWV0YSB9KSwgXCJlcnJvclwiIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH07XHJcbiAgICB9XHJcbiAgICBhY3Rpb25DcmVhdG9yLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJcIiArIHR5cGU7IH07XHJcbiAgICBhY3Rpb25DcmVhdG9yLnR5cGUgPSB0eXBlO1xyXG4gICAgYWN0aW9uQ3JlYXRvci5tYXRjaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGFjdGlvbi50eXBlID09PSB0eXBlOyB9O1xyXG4gICAgcmV0dXJuIGFjdGlvbkNyZWF0b3I7XHJcbn1cclxuZnVuY3Rpb24gaXNBY3Rpb24oYWN0aW9uKSB7XHJcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmIFwidHlwZVwiIGluIGFjdGlvbjtcclxufVxyXG5mdW5jdGlvbiBpc0FjdGlvbkNyZWF0b3IoYWN0aW9uKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gXCJmdW5jdGlvblwiICYmIFwidHlwZVwiIGluIGFjdGlvbiAmJiBoYXNNYXRjaEZ1bmN0aW9uKGFjdGlvbik7XHJcbn1cclxuZnVuY3Rpb24gaXNGU0EoYWN0aW9uKSB7XHJcbiAgICByZXR1cm4gaXNBY3Rpb24oYWN0aW9uKSAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgT2JqZWN0LmtleXMoYWN0aW9uKS5ldmVyeShpc1ZhbGlkS2V5KTtcclxufVxyXG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleSkge1xyXG4gICAgcmV0dXJuIFtcInR5cGVcIiwgXCJwYXlsb2FkXCIsIFwiZXJyb3JcIiwgXCJtZXRhXCJdLmluZGV4T2Yoa2V5KSA+IC0xO1xyXG59XHJcbmZ1bmN0aW9uIGdldFR5cGUoYWN0aW9uQ3JlYXRvcikge1xyXG4gICAgcmV0dXJuIFwiXCIgKyBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbi8vIHNyYy9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBnZXRNZXNzYWdlKHR5cGUpIHtcclxuICAgIHZhciBzcGxpdFR5cGUgPSB0eXBlID8gKFwiXCIgKyB0eXBlKS5zcGxpdChcIi9cIikgOiBbXTtcclxuICAgIHZhciBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCBcImFjdGlvbkNyZWF0b3JcIjtcclxuICAgIHJldHVybiBcIkRldGVjdGVkIGFuIGFjdGlvbiBjcmVhdG9yIHdpdGggdHlwZSBcXFwiXCIgKyAodHlwZSB8fCBcInVua25vd25cIikgKyBcIlxcXCIgYmVpbmcgZGlzcGF0Y2hlZC4gXFxuTWFrZSBzdXJlIHlvdSdyZSBjYWxsaW5nIHRoZSBhY3Rpb24gY3JlYXRvciBiZWZvcmUgZGlzcGF0Y2hpbmcsIGkuZS4gYGRpc3BhdGNoKFwiICsgYWN0aW9uTmFtZSArIFwiKCkpYCBpbnN0ZWFkIG9mIGBkaXNwYXRjaChcIiArIGFjdGlvbk5hbWUgKyBcIilgLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIHRoZSBhY3Rpb24gaGFzIG5vIHBheWxvYWQuXCI7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNBY3Rpb25DcmVhdG9yLCBpc0FjdGlvbkNyZWF0b3IyID0gX2MgPT09IHZvaWQgMCA/IGlzQWN0aW9uQ3JlYXRvciA6IF9jO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKGlzQWN0aW9uQ3JlYXRvcjIoYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xyXG4gICAgfTsgfTsgfTtcclxufVxyXG4vLyBzcmMvdXRpbHMudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZSwgeyBpc0RyYWZ0YWJsZSB9IGZyb20gXCJpbW1lclwiO1xyXG5mdW5jdGlvbiBnZXRUaW1lTWVhc3VyZVV0aWxzKG1heERlbGF5LCBmbk5hbWUpIHtcclxuICAgIHZhciBlbGFwc2VkID0gMDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWVhc3VyZVRpbWU6IGZ1bmN0aW9uIChmbikge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIHZhciBmaW5pc2hlZCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICBlbGFwc2VkICs9IGZpbmlzaGVkIC0gc3RhcnRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2FybklmRXhjZWVkZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGZuTmFtZSArIFwiIHRvb2sgXCIgKyBlbGFwc2VkICsgXCJtcywgd2hpY2ggaXMgbW9yZSB0aGFuIHRoZSB3YXJuaW5nIHRocmVzaG9sZCBvZiBcIiArIG1heERlbGF5ICsgXCJtcy4gXFxuSWYgeW91ciBzdGF0ZSBvciBhY3Rpb25zIGFyZSB2ZXJ5IGxhcmdlLCB5b3UgbWF5IHdhbnQgdG8gZGlzYWJsZSB0aGUgbWlkZGxld2FyZSBhcyBpdCBtaWdodCBjYXVzZSB0b28gbXVjaCBvZiBhIHNsb3dkb3duIGluIGRldmVsb3BtZW50IG1vZGUuIFNlZSBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9nZXREZWZhdWx0TWlkZGxld2FyZSBmb3IgaW5zdHJ1Y3Rpb25zLlxcbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxudmFyIE1pZGRsZXdhcmVBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhNaWRkbGV3YXJlQXJyYXksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBNaWRkbGV3YXJlQXJyYXkoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1pZGRsZXdhcmVBcnJheSwgU3ltYm9sLnNwZWNpZXMsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJyW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpO1xyXG4gICAgfTtcclxuICAgIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJyW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IChNaWRkbGV3YXJlQXJyYXkuYmluZC5hcHBseShNaWRkbGV3YXJlQXJyYXksIF9fc3ByZWFkQXJyYXkoW3ZvaWQgMF0sIGFyclswXS5jb25jYXQodGhpcykpKSkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnIuY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheTtcclxufShBcnJheSkpO1xyXG52YXIgRW5oYW5jZXJBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhFbmhhbmNlckFycmF5LCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gRW5oYW5jZXJBcnJheSgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3MpIHx8IHRoaXM7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBFbmhhbmNlckFycmF5LnByb3RvdHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVuaGFuY2VyQXJyYXksIFN5bWJvbC5zcGVjaWVzLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFbmhhbmNlckFycmF5O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIEVuaGFuY2VyQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJyW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpO1xyXG4gICAgfTtcclxuICAgIEVuaGFuY2VyQXJyYXkucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyAoRW5oYW5jZXJBcnJheS5iaW5kLmFwcGx5KEVuaGFuY2VyQXJyYXksIF9fc3ByZWFkQXJyYXkoW3ZvaWQgMF0sIGFyclswXS5jb25jYXQodGhpcykpKSkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoRW5oYW5jZXJBcnJheS5iaW5kLmFwcGx5KEVuaGFuY2VyQXJyYXksIF9fc3ByZWFkQXJyYXkoW3ZvaWQgMF0sIGFyci5jb25jYXQodGhpcykpKSkoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRW5oYW5jZXJBcnJheTtcclxufShBcnJheSkpO1xyXG5mdW5jdGlvbiBmcmVlemVEcmFmdGFibGUodmFsKSB7XHJcbiAgICByZXR1cm4gaXNEcmFmdGFibGUodmFsKSA/IGNyZWF0ZU5leHRTdGF0ZSh2YWwsIGZ1bmN0aW9uICgpIHtcclxuICAgIH0pIDogdmFsO1xyXG59XHJcbi8vIHNyYy9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHNcclxudmFyIGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxudmFyIHByZWZpeCA9IFwiSW52YXJpYW50IGZhaWxlZFwiO1xyXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XHJcbiAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXgpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeCArIFwiOiBcIiArIChtZXNzYWdlIHx8IFwiXCIpKTtcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqLCBzZXJpYWxpemVyLCBpbmRlbnQsIGRlY3ljbGVyKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpLCBpbmRlbnQpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlcikge1xyXG4gICAgdmFyIHN0YWNrID0gW10sIGtleXMgPSBbXTtcclxuICAgIGlmICghZGVjeWNsZXIpXHJcbiAgICAgICAgZGVjeWNsZXIgPSBmdW5jdGlvbiAoXywgdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhciB+XVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfi5cIiArIGtleXMuc2xpY2UoMCwgc3RhY2suaW5kZXhPZih2YWx1ZSkpLmpvaW4oXCIuXCIpICsgXCJdXCI7XHJcbiAgICAgICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKTtcclxuICAgICAgICAgICAgfnRoaXNQb3MgPyBzdGFjay5zcGxpY2UodGhpc1BvcyArIDEpIDogc3RhY2sucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgfnRoaXNQb3MgPyBrZXlzLnNwbGljZSh0aGlzUG9zLCBJbmZpbml0eSwga2V5KSA6IGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWN5Y2xlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBzZXJpYWxpemVyID09IG51bGwgPyB2YWx1ZSA6IHNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09IG51bGwgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKTtcclxufVxyXG5mdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaikge1xyXG4gICAgdmFyIHRyYWNrZWRQcm9wZXJ0aWVzID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGV0ZWN0TXV0YXRpb25zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCB0cmFja2VkUHJvcGVydGllcywgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaiwgcGF0aCwgY2hlY2tlZE9iamVjdHMpIHtcclxuICAgIGlmIChpZ25vcmVQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZVBhdGhzID0gW107IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIGlmIChjaGVja2VkT2JqZWN0cyA9PT0gdm9pZCAwKSB7IGNoZWNrZWRPYmplY3RzID0gbmV3IFNldCgpOyB9XHJcbiAgICB2YXIgdHJhY2tlZCA9IHsgdmFsdWU6IG9iaiB9O1xyXG4gICAgaWYgKCFpc0ltbXV0YWJsZShvYmopICYmICFjaGVja2VkT2JqZWN0cy5oYXMob2JqKSkge1xyXG4gICAgICAgIGNoZWNrZWRPYmplY3RzLmFkZChvYmopO1xyXG4gICAgICAgIHRyYWNrZWQuY2hpbGRyZW4gPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xyXG4gICAgICAgICAgICBpZiAoaWdub3JlUGF0aHMubGVuZ3RoICYmIGlnbm9yZVBhdGhzLmluZGV4T2YoY2hpbGRQYXRoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyYWNrZWQuY2hpbGRyZW5ba2V5XSA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9ialtrZXldLCBjaGlsZFBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cmFja2VkO1xyXG59XHJcbmZ1bmN0aW9uIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHksIG9iaiwgc2FtZVBhcmVudFJlZiwgcGF0aCkge1xyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiA9PT0gdm9pZCAwKSB7IHNhbWVQYXJlbnRSZWYgPSBmYWxzZTsgfVxyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgdmFyIHByZXZPYmogPSB0cmFja2VkUHJvcGVydHkgPyB0cmFja2VkUHJvcGVydHkudmFsdWUgOiB2b2lkIDA7XHJcbiAgICB2YXIgc2FtZVJlZiA9IHByZXZPYmogPT09IG9iajtcclxuICAgIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IHRydWUsIHBhdGg6IHBhdGggfTtcclxuICAgIH1cclxuICAgIGlmIChpc0ltbXV0YWJsZShwcmV2T2JqKSB8fCBpc0ltbXV0YWJsZShvYmopKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxuICAgIH1cclxuICAgIHZhciBrZXlzVG9EZXRlY3QgPSB7fTtcclxuICAgIGZvciAodmFyIGtleSBpbiB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW4pIHtcclxuICAgICAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdmFyIGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xyXG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xyXG4gICAgICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcclxuICAgICAgICAgICAgdmFyIGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZShmdW5jdGlvbiAoaWdub3JlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaGFzTWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMsIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbltrZXldLCBvYmpba2V5XSwgc2FtZVJlZiwgbmVzdGVkUGF0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGtleXNUb0RldGVjdCkge1xyXG4gICAgICAgIHZhciBzdGF0ZV8xID0gX2xvb3BfMShrZXkpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMSA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzEudmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB3YXNNdXRhdGVkOiBmYWxzZSB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gbmV4dChhY3Rpb24pOyB9OyB9OyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy5pc0ltbXV0YWJsZSwgaXNJbW11dGFibGUgPSBfYyA9PT0gdm9pZCAwID8gaXNJbW11dGFibGVEZWZhdWx0IDogX2MsIGlnbm9yZWRQYXRocyA9IG9wdGlvbnMuaWdub3JlZFBhdGhzLCBfZCA9IG9wdGlvbnMud2FybkFmdGVyLCB3YXJuQWZ0ZXIgPSBfZCA9PT0gdm9pZCAwID8gMzIgOiBfZCwgaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7XHJcbiAgICBpZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMgfHwgaWdub3JlO1xyXG4gICAgdmFyIHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICB2YXIgZ2V0U3RhdGUgPSBfYy5nZXRTdGF0ZTtcclxuICAgICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgIHZhciB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIGludmFyaWFudCghcmVzdWx0Lndhc011dGF0ZWQsIFwiQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnXCIgKyAocmVzdWx0LnBhdGggfHwgXCJcIikgKyBcIicuICBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBkaXNwYXRjaGVkQWN0aW9uID0gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQud2FzTXV0YXRlZCAmJiBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGluc2lkZSBhIGRpc3BhdGNoLCBpbiB0aGUgcGF0aDogXCIgKyAocmVzdWx0LnBhdGggfHwgXCJcIikgKyBcIi4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiBcIiArIHN0cmluZ2lmeShhY3Rpb24pICsgXCIuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvbjtcclxuICAgICAgICB9OyB9O1xyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbmZ1bmN0aW9uIGlzUGxhaW4odmFsKSB7XHJcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XHJcbiAgICByZXR1cm4gdmFsID09IG51bGwgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlID09PSBcImJvb2xlYW5cIiB8fCB0eXBlID09PSBcIm51bWJlclwiIHx8IEFycmF5LmlzQXJyYXkodmFsKSB8fCBpc1BsYWluT2JqZWN0KHZhbCk7XHJcbn1cclxuZnVuY3Rpb24gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHZhbHVlLCBwYXRoLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSkge1xyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgaWYgKGlzU2VyaWFsaXphYmxlID09PSB2b2lkIDApIHsgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluOyB9XHJcbiAgICBpZiAoaWdub3JlZFBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlZFBhdGhzID0gW107IH1cclxuICAgIHZhciBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcclxuICAgIGlmICghaXNTZXJpYWxpemFibGUodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5UGF0aDogcGF0aCB8fCBcIjxyb290PlwiLFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChjYWNoZSA9PSBudWxsID8gdm9pZCAwIDogY2FjaGUuaGFzKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgZW50cmllcyA9IGdldEVudHJpZXMgIT0gbnVsbCA/IGdldEVudHJpZXModmFsdWUpIDogT2JqZWN0LmVudHJpZXModmFsdWUpO1xyXG4gICAgdmFyIGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xyXG4gICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoa2V5LCBuZXN0ZWRWYWx1ZSkge1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1NlcmlhbGl6YWJsZShuZXN0ZWRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlQYXRoOiBuZXN0ZWRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXN0ZWRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgfSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKG5lc3RlZFZhbHVlLCBuZXN0ZWRQYXRoLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBlbnRyaWVzXzEgPSBlbnRyaWVzOyBfaSA8IGVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgX2MgPSBlbnRyaWVzXzFbX2ldLCBrZXkgPSBfY1swXSwgbmVzdGVkVmFsdWUgPSBfY1sxXTtcclxuICAgICAgICB2YXIgc3RhdGVfMiA9IF9sb29wXzIoa2V5LCBuZXN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZV8yID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVfMi52YWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChjYWNoZSAmJiBpc05lc3RlZEZyb3plbih2YWx1ZSkpXHJcbiAgICAgICAgY2FjaGUuYWRkKHZhbHVlKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBpc05lc3RlZEZyb3plbih2YWx1ZSkge1xyXG4gICAgaWYgKCFPYmplY3QuaXNGcm96ZW4odmFsdWUpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBPYmplY3QudmFsdWVzKHZhbHVlKTsgX2kgPCBfYy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgbmVzdGVkVmFsdWUgPSBfY1tfaV07XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBuZXN0ZWRWYWx1ZSA9PT0gbnVsbClcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgaWYgKCFpc05lc3RlZEZyb3plbihuZXN0ZWRWYWx1ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gbmV4dChhY3Rpb24pOyB9OyB9OyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy5pc1NlcmlhbGl6YWJsZSwgaXNTZXJpYWxpemFibGUgPSBfYyA9PT0gdm9pZCAwID8gaXNQbGFpbiA6IF9jLCBnZXRFbnRyaWVzID0gb3B0aW9ucy5nZXRFbnRyaWVzLCBfZCA9IG9wdGlvbnMuaWdub3JlZEFjdGlvbnMsIGlnbm9yZWRBY3Rpb25zID0gX2QgPT09IHZvaWQgMCA/IFtdIDogX2QsIF9lID0gb3B0aW9ucy5pZ25vcmVkQWN0aW9uUGF0aHMsIGlnbm9yZWRBY3Rpb25QYXRocyA9IF9lID09PSB2b2lkIDAgPyBbXCJtZXRhLmFyZ1wiLCBcIm1ldGEuYmFzZVF1ZXJ5TWV0YVwiXSA6IF9lLCBfZiA9IG9wdGlvbnMuaWdub3JlZFBhdGhzLCBpZ25vcmVkUGF0aHMgPSBfZiA9PT0gdm9pZCAwID8gW10gOiBfZiwgX2cgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2cgPT09IHZvaWQgMCA/IDMyIDogX2csIF9oID0gb3B0aW9ucy5pZ25vcmVTdGF0ZSwgaWdub3JlU3RhdGUgPSBfaCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfaCwgX2ogPSBvcHRpb25zLmlnbm9yZUFjdGlvbnMsIGlnbm9yZUFjdGlvbnMgPSBfaiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfaiwgX2sgPSBvcHRpb25zLmRpc2FibGVDYWNoZSwgZGlzYWJsZUNhY2hlID0gX2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX2s7XHJcbiAgICB2YXIgY2FjaGUgPSAhZGlzYWJsZUNhY2hlICYmIFdlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogdm9pZCAwO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdG9yZUFQSSkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIHZhciBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XHJcbiAgICAgICAgaWYgKCFpZ25vcmVBY3Rpb25zICYmICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKGFjdGlvbiwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRBY3Rpb25QYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5UGF0aCA9IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUua2V5UGF0aCwgdmFsdWUgPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhhdCBkaXNwYXRjaGVkIHRoaXMgYWN0aW9uOiBcIiwgYWN0aW9uLCBcIlxcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL2FjdGlvbnMjd2h5LXNob3VsZC10eXBlLWJlLWEtc3RyaW5nLW9yLWF0LWxlYXN0LXNlcmlhbGl6YWJsZS13aHktc2hvdWxkLW15LWFjdGlvbi10eXBlcy1iZS1jb25zdGFudHMpXCIsIFwiXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaWdub3JlU3RhdGUpIHtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0b3JlQVBJLmdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHN0YXRlLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUua2V5UGF0aCwgdmFsdWUgPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gdGhlIHN0YXRlLCBpbiB0aGUgcGF0aDogYFwiICsga2V5UGF0aCArIFwiYC4gVmFsdWU6XCIsIHZhbHVlLCBcIlxcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6IFwiICsgYWN0aW9uLnR5cGUgKyBcIi5cXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXHJcbmZ1bmN0aW9uIGlzQm9vbGVhbih4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiYm9vbGVhblwiO1xyXG59XHJcbmZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucyk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLnRodW5rLCB0aHVuayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gb3B0aW9ucy5pbW11dGFibGVDaGVjaywgaW1tdXRhYmxlQ2hlY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IG9wdGlvbnMuc2VyaWFsaXphYmxlQ2hlY2ssIHNlcmlhbGl6YWJsZUNoZWNrID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZSwgX2YgPSBvcHRpb25zLmFjdGlvbkNyZWF0b3JDaGVjaywgYWN0aW9uQ3JlYXRvckNoZWNrID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZjtcclxuICAgIHZhciBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5KCk7XHJcbiAgICBpZiAodGh1bmspIHtcclxuICAgICAgICBpZiAoaXNCb29sZWFuKHRodW5rKSkge1xyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh0aHVua01pZGRsZXdhcmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlLndpdGhFeHRyYUFyZ3VtZW50KHRodW5rLmV4dHJhQXJndW1lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBpbW11dGFibGVPcHRpb25zID0ge307XHJcbiAgICAgICAgICAgIGlmICghaXNCb29sZWFuKGltbXV0YWJsZUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgaW1tdXRhYmxlT3B0aW9ucyA9IGltbXV0YWJsZUNoZWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShpbW11dGFibGVPcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXJpYWxpemFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihzZXJpYWxpemFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSBzZXJpYWxpemFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaChjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoc2VyaWFsaXphYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWN0aW9uQ3JlYXRvckNoZWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihhY3Rpb25DcmVhdG9yQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IGFjdGlvbkNyZWF0b3JDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShhY3Rpb25DcmVhdG9yT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtaWRkbGV3YXJlQXJyYXk7XHJcbn1cclxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXHJcbnZhciBJU19QUk9EVUNUSU9OID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xyXG5mdW5jdGlvbiBjb25maWd1cmVTdG9yZShvcHRpb25zKSB7XHJcbiAgICB2YXIgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZSgpO1xyXG4gICAgdmFyIF9jID0gb3B0aW9ucyB8fCB7fSwgX2QgPSBfYy5yZWR1Y2VyLCByZWR1Y2VyID0gX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLCBfZSA9IF9jLm1pZGRsZXdhcmUsIG1pZGRsZXdhcmUgPSBfZSA9PT0gdm9pZCAwID8gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCkgOiBfZSwgX2YgPSBfYy5kZXZUb29scywgZGV2VG9vbHMgPSBfZiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9mLCBfZyA9IF9jLnByZWxvYWRlZFN0YXRlLCBwcmVsb2FkZWRTdGF0ZSA9IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZywgX2ggPSBfYy5lbmhhbmNlcnMsIGVuaGFuY2VycyA9IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaDtcclxuICAgIHZhciByb290UmVkdWNlcjtcclxuICAgIGlmICh0eXBlb2YgcmVkdWNlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgcm9vdFJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChyZWR1Y2VyKSkge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIGZpbmFsTWlkZGxld2FyZSA9IG1pZGRsZXdhcmU7XHJcbiAgICBpZiAodHlwZW9mIGZpbmFsTWlkZGxld2FyZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgZmluYWxNaWRkbGV3YXJlID0gZmluYWxNaWRkbGV3YXJlKGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSk7XHJcbiAgICAgICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwid2hlbiB1c2luZyBhIG1pZGRsZXdhcmUgYnVpbGRlciBmdW5jdGlvbiwgYW4gYXJyYXkgb2YgbWlkZGxld2FyZSBtdXN0IGJlIHJldHVybmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiBmaW5hbE1pZGRsZXdhcmUuc29tZShmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gdHlwZW9mIGl0ZW0gIT09IFwiZnVuY3Rpb25cIjsgfSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlYWNoIG1pZGRsZXdhcmUgcHJvdmlkZWQgdG8gY29uZmlndXJlU3RvcmUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG4gICAgdmFyIG1pZGRsZXdhcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZS5hcHBseSh2b2lkIDAsIGZpbmFsTWlkZGxld2FyZSk7XHJcbiAgICB2YXIgZmluYWxDb21wb3NlID0gY29tcG9zZTI7XHJcbiAgICBpZiAoZGV2VG9vbHMpIHtcclxuICAgICAgICBmaW5hbENvbXBvc2UgPSBjb21wb3NlV2l0aERldlRvb2xzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICAgICAgdHJhY2U6ICFJU19QUk9EVUNUSU9OXHJcbiAgICAgICAgfSwgdHlwZW9mIGRldlRvb2xzID09PSBcIm9iamVjdFwiICYmIGRldlRvb2xzKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgZGVmYXVsdEVuaGFuY2VycyA9IG5ldyBFbmhhbmNlckFycmF5KG1pZGRsZXdhcmVFbmhhbmNlcik7XHJcbiAgICB2YXIgc3RvcmVFbmhhbmNlcnMgPSBkZWZhdWx0RW5oYW5jZXJzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZW5oYW5jZXJzKSkge1xyXG4gICAgICAgIHN0b3JlRW5oYW5jZXJzID0gX19zcHJlYWRBcnJheShbbWlkZGxld2FyZUVuaGFuY2VyXSwgZW5oYW5jZXJzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBlbmhhbmNlcnMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHN0b3JlRW5oYW5jZXJzID0gZW5oYW5jZXJzKGRlZmF1bHRFbmhhbmNlcnMpO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UuYXBwbHkodm9pZCAwLCBzdG9yZUVuaGFuY2Vycyk7XHJcbiAgICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKTtcclxufVxyXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xyXG5pbXBvcnQgY3JlYXRlTmV4dFN0YXRlMiwgeyBpc0RyYWZ0IGFzIGlzRHJhZnQyLCBpc0RyYWZ0YWJsZSBhcyBpc0RyYWZ0YWJsZTIgfSBmcm9tIFwiaW1tZXJcIjtcclxuLy8gc3JjL21hcEJ1aWxkZXJzLnRzXHJcbmZ1bmN0aW9uIGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXJDYWxsYmFjaykge1xyXG4gICAgdmFyIGFjdGlvbnNNYXAgPSB7fTtcclxuICAgIHZhciBhY3Rpb25NYXRjaGVycyA9IFtdO1xyXG4gICAgdmFyIGRlZmF1bHRDYXNlUmVkdWNlcjtcclxuICAgIHZhciBidWlsZGVyID0ge1xyXG4gICAgICAgIGFkZENhc2U6IGZ1bmN0aW9uICh0eXBlT3JBY3Rpb25DcmVhdG9yLCByZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25NYXRjaGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZE1hdGNoZXJgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWBcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdHlwZU9yQWN0aW9uQ3JlYXRvciA9PT0gXCJzdHJpbmdcIiA/IHR5cGVPckFjdGlvbkNyZWF0b3IgOiB0eXBlT3JBY3Rpb25DcmVhdG9yLnR5cGU7XHJcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlIGluIGFjdGlvbnNNYXApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbdHlwZV0gPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZE1hdGNoZXI6IGZ1bmN0aW9uIChtYXRjaGVyLCByZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRNYXRjaGVyYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbk1hdGNoZXJzLnB1c2goeyBtYXRjaGVyOiBtYXRjaGVyLCByZWR1Y2VyOiByZWR1Y2VyIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZERlZmF1bHRDYXNlOiBmdW5jdGlvbiAocmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcik7XHJcbiAgICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXHJcbmZ1bmN0aW9uIGlzU3RhdGVGdW5jdGlvbih4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG52YXIgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlO1xyXG5mdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgIGlmIChhY3Rpb25NYXRjaGVycyA9PT0gdm9pZCAwKSB7IGFjdGlvbk1hdGNoZXJzID0gW107IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBfYyA9IHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sobWFwT3JCdWlsZGVyQ2FsbGJhY2spIDogW21hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXSwgYWN0aW9uc01hcCA9IF9jWzBdLCBmaW5hbEFjdGlvbk1hdGNoZXJzID0gX2NbMV0sIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyID0gX2NbMl07XHJcbiAgICB2YXIgZ2V0SW5pdGlhbFN0YXRlO1xyXG4gICAgaWYgKGlzU3RhdGVGdW5jdGlvbihpbml0aWFsU3RhdGUpKSB7XHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKTsgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBmcm96ZW5Jbml0aWFsU3RhdGVfMSA9IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUpO1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb3plbkluaXRpYWxTdGF0ZV8xOyB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlID09PSB2b2lkIDApIHsgc3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKTsgfVxyXG4gICAgICAgIHZhciBjYXNlUmVkdWNlcnMgPSBfX3NwcmVhZEFycmF5KFtcclxuICAgICAgICAgICAgYWN0aW9uc01hcFthY3Rpb24udHlwZV1cclxuICAgICAgICBdLCBmaW5hbEFjdGlvbk1hdGNoZXJzLmZpbHRlcihmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBfYy5tYXRjaGVyO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH0pLm1hcChmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgdmFyIHJlZHVjZXIyID0gX2MucmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZXIyO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBpZiAoY2FzZVJlZHVjZXJzLmZpbHRlcihmdW5jdGlvbiAoY3IpIHsgcmV0dXJuICEhY3I7IH0pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlcnMgPSBbZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXJzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNTdGF0ZSwgY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEcmFmdDIocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZnQgPSBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNEcmFmdGFibGUyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhc2VSZWR1Y2VyKHByZXZpb3VzU3RhdGUsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkEgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTIocHJldmlvdXNTdGF0ZSwgZnVuY3Rpb24gKGRyYWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICB9LCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZTtcclxuICAgIHJldHVybiByZWR1Y2VyO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVTbGljZS50c1xyXG52YXIgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIgPSBmYWxzZTtcclxuZnVuY3Rpb24gZ2V0VHlwZTIoc2xpY2UsIGFjdGlvbktleSkge1xyXG4gICAgcmV0dXJuIHNsaWNlICsgXCIvXCIgKyBhY3Rpb25LZXk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2xpY2Uob3B0aW9ucykge1xyXG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWU7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5pbml0aWFsU3RhdGUgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhbiBgaW5pdGlhbFN0YXRlYCB2YWx1ZSB0aGF0IGlzIG5vdCBgdW5kZWZpbmVkYC4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYGluaXRpYWxTdGF0ZWBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxTdGF0ZSA9PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmluaXRpYWxTdGF0ZSA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSk7XHJcbiAgICB2YXIgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9O1xyXG4gICAgdmFyIHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSA9IHt9O1xyXG4gICAgdmFyIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlID0ge307XHJcbiAgICB2YXIgYWN0aW9uQ3JlYXRvcnMgPSB7fTtcclxuICAgIHJlZHVjZXJOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWR1Y2VyTmFtZSkge1xyXG4gICAgICAgIHZhciBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXTtcclxuICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUyKG5hbWUsIHJlZHVjZXJOYW1lKTtcclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgdmFyIHByZXBhcmVDYWxsYmFjaztcclxuICAgICAgICBpZiAoXCJyZWR1Y2VyXCIgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyO1xyXG4gICAgICAgICAgICBwcmVwYXJlQ2FsbGJhY2sgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5wcmVwYXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWVbcmVkdWNlck5hbWVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGVbdHlwZV0gPSBjYXNlUmVkdWNlcjtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2sgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKSA6IGNyZWF0ZUFjdGlvbih0eXBlKTtcclxuICAgIH0pO1xyXG4gICAgZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKCkge1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uMiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVNsaWNlLmV4dHJhUmVkdWNlcnNgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVNsaWNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfYyA9IHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG9wdGlvbnMuZXh0cmFSZWR1Y2VycykgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXSwgX2QgPSBfY1swXSwgZXh0cmFSZWR1Y2VycyA9IF9kID09PSB2b2lkIDAgPyB7fSA6IF9kLCBfZSA9IF9jWzFdLCBhY3Rpb25NYXRjaGVycyA9IF9lID09PSB2b2lkIDAgPyBbXSA6IF9lLCBfZiA9IF9jWzJdLCBkZWZhdWx0Q2FzZVJlZHVjZXIgPSBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Y7XHJcbiAgICAgICAgdmFyIGZpbmFsQ2FzZVJlZHVjZXJzID0gX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIGV4dHJhUmVkdWNlcnMpLCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBmdW5jdGlvbiAoYnVpbGRlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQ2FzZShrZXksIGZpbmFsQ2FzZVJlZHVjZXJzW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgYWN0aW9uTWF0Y2hlcnNfMSA9IGFjdGlvbk1hdGNoZXJzOyBfaSA8IGFjdGlvbk1hdGNoZXJzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbSA9IGFjdGlvbk1hdGNoZXJzXzFbX2ldO1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGRNYXRjaGVyKG0ubWF0Y2hlciwgbS5yZWR1Y2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZERlZmF1bHRDYXNlKGRlZmF1bHRDYXNlUmVkdWNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHZhciBfcmVkdWNlcjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICByZWR1Y2VyOiBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIV9yZWR1Y2VyKVxyXG4gICAgICAgICAgICAgICAgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWN0aW9uczogYWN0aW9uQ3JlYXRvcnMsXHJcbiAgICAgICAgY2FzZVJlZHVjZXJzOiBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSxcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlci5nZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9lbnRpdHlfc3RhdGUudHNcclxuZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgIGVudGl0aWVzOiB7fVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKGFkZGl0aW9uYWxTdGF0ZSkge1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3RhdGUgPT09IHZvaWQgMCkgeyBhZGRpdGlvbmFsU3RhdGUgPSB7fTsgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlOiBnZXRJbml0aWFsU3RhdGUgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICB2YXIgc2VsZWN0SWRzID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZS5pZHM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEVudGl0aWVzID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZS5lbnRpdGllczsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QWxsID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0SWRzLCBzZWxlY3RFbnRpdGllcywgZnVuY3Rpb24gKGlkcywgZW50aXRpZXMpIHsgcmV0dXJuIGlkcy5tYXAoZnVuY3Rpb24gKGlkKSB7IHJldHVybiBlbnRpdGllc1tpZF07IH0pOyB9KTtcclxuICAgICAgICB2YXIgc2VsZWN0SWQgPSBmdW5jdGlvbiAoXywgaWQpIHsgcmV0dXJuIGlkOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RCeUlkID0gZnVuY3Rpb24gKGVudGl0aWVzLCBpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgZnVuY3Rpb24gKGlkcykgeyByZXR1cm4gaWRzLmxlbmd0aDsgfSk7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0SWRzOiBzZWxlY3RJZHMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RFbnRpdGllczogc2VsZWN0RW50aXRpZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBzZWxlY3RUb3RhbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RFbnRpdGllcyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldFNlbGVjdG9yczogZ2V0U2VsZWN0b3JzIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX2FkYXB0ZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTMsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MyB9IGZyb20gXCJpbW1lclwiO1xyXG5mdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xyXG4gICAgdmFyIG9wZXJhdG9yID0gY3JlYXRlU3RhdGVPcGVyYXRvcihmdW5jdGlvbiAoXywgc3RhdGUpIHsgcmV0dXJuIG11dGF0b3Ioc3RhdGUpOyB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUsIHZvaWQgMCk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbihzdGF0ZSwgYXJnKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnMikge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNGU0EoYXJnMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBydW5NdXRhdG9yID0gZnVuY3Rpb24gKGRyYWZ0KSB7XHJcbiAgICAgICAgICAgIGlmIChpc1BheWxvYWRBY3Rpb25Bcmd1bWVudChhcmcpKSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdG9yKGFyZy5wYXlsb2FkLCBkcmFmdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdG9yKGFyZywgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXNEcmFmdDMoc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJ1bk11dGF0b3Ioc3RhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlMyhzdGF0ZSwgcnVuTXV0YXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdXRpbHMudHNcclxuZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKSB7XHJcbiAgICB2YXIga2V5ID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYga2V5ID09PSB2b2lkIDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgZW50aXR5IHBhc3NlZCB0byB0aGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCB1bmRlZmluZWQuXCIsIFwiWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24uXCIsIFwiVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6XCIsIGVudGl0eSwgXCJUaGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbjpcIiwgc2VsZWN0SWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcbmZ1bmN0aW9uIGVuc3VyZUVudGl0aWVzQXJyYXkoZW50aXRpZXMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgICAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVudGl0aWVzO1xyXG59XHJcbmZ1bmN0aW9uIHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSkge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgIHZhciBhZGRlZCA9IFtdO1xyXG4gICAgdmFyIHVwZGF0ZWQgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgbmV3RW50aXRpZXNfMSA9IG5ld0VudGl0aWVzOyBfaSA8IG5ld0VudGl0aWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzFbX2ldO1xyXG4gICAgICAgIHZhciBpZCA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWQucHVzaCh7IGlkOiBpZCwgY2hhbmdlczogZW50aXR5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWRkZWQucHVzaChlbnRpdHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbYWRkZWQsIHVwZGF0ZWRdO1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKSB7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcclxuICAgICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzIgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18yLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfMltfaV07XHJcbiAgICAgICAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzMgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18zLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfM1tfaV07XHJcbiAgICAgICAgICAgIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IFtdO1xyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0ge307XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU9uZU11dGFibHkoa2V5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiByZW1vdmVNYW55TXV0YWJseShba2V5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlTWFueU11dGFibHkoa2V5cywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlID0gZmFsc2U7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV07XHJcbiAgICAgICAgICAgICAgICBkaWRNdXRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gaWQgaW4gc3RhdGUuZW50aXRpZXM7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbE11dGFibHkoc3RhdGUpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgICAgICAgIGlkczogW10sXHJcbiAgICAgICAgICAgIGVudGl0aWVzOiB7fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGFrZU5ld0tleShrZXlzLCB1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsMiA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbDIsIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICB2YXIgbmV3S2V5ID0gc2VsZWN0SWRWYWx1ZSh1cGRhdGVkLCBzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGhhc05ld0tleSA9IG5ld0tleSAhPT0gdXBkYXRlLmlkO1xyXG4gICAgICAgIGlmIChoYXNOZXdLZXkpIHtcclxuICAgICAgICAgICAga2V5c1t1cGRhdGUuaWRdID0gbmV3S2V5O1xyXG4gICAgICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3S2V5XSA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIGhhc05ld0tleTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgbmV3S2V5cyA9IHt9O1xyXG4gICAgICAgIHZhciB1cGRhdGVzUGVyRW50aXR5ID0ge307XHJcbiAgICAgICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1cGRhdGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlczogX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzIDogbnVsbCksIHVwZGF0ZS5jaGFuZ2VzKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZXMgPSBPYmplY3QudmFsdWVzKHVwZGF0ZXNQZXJFbnRpdHkpO1xyXG4gICAgICAgIHZhciBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgICAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcclxuICAgICAgICAgICAgdmFyIGRpZE11dGF0ZUlkcyA9IHVwZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uICh1cGRhdGUpIHsgcmV0dXJuIHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSk7IH0pLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgIGlmIChkaWRNdXRhdGVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC5rZXlzKHN0YXRlLmVudGl0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIF9jID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSwgYWRkZWQgPSBfY1swXSwgdXBkYXRlZCA9IF9jWzFdO1xyXG4gICAgICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgICAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHJlbW92ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVPbmVNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU1hbnlNdXRhYmx5KVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0KSB7XHJcbiAgICB2YXIgX2MgPSBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCksIHJlbW92ZU9uZSA9IF9jLnJlbW92ZU9uZSwgcmVtb3ZlTWFueSA9IF9jLnJlbW92ZU1hbnksIHJlbW92ZUFsbCA9IF9jLnJlbW92ZUFsbDtcclxuICAgIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBhZGRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICB2YXIgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uIChtb2RlbCkgeyByZXR1cm4gIShzZWxlY3RJZFZhbHVlKG1vZGVsLCBzZWxlY3RJZCkgaW4gc3RhdGUuZW50aXRpZXMpOyB9KTtcclxuICAgICAgICBpZiAobW9kZWxzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBtZXJnZShtb2RlbHMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgaWYgKG5ld0VudGl0aWVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBtZXJnZShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IFtdO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGFwcGxpZWRVcGRhdGVzID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCB1cGRhdGVzXzEgPSB1cGRhdGVzOyBfaSA8IHVwZGF0ZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHVwZGF0ZXNfMVtfaV07XHJcbiAgICAgICAgICAgIHZhciBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXBwbGllZFVwZGF0ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpO1xyXG4gICAgICAgICAgICB2YXIgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpO1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlLmlkICE9PSBuZXdJZCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XHJcbiAgICAgICAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGEsIGIpIHtcclxuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aCAmJiBpIDwgYi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYVtpXSA9PT0gYltpXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG1lcmdlKG1vZGVscywgc3RhdGUpIHtcclxuICAgICAgICBtb2RlbHMuZm9yRWFjaChmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQobW9kZWwpXSA9IG1vZGVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc29ydEVudGl0aWVzKHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGFsbEVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgYWxsRW50aXRpZXMuc29ydChzb3J0KTtcclxuICAgICAgICB2YXIgbmV3U29ydGVkSWRzID0gYWxsRW50aXRpZXMubWFwKHNlbGVjdElkKTtcclxuICAgICAgICB2YXIgaWRzID0gc3RhdGUuaWRzO1xyXG4gICAgICAgIGlmICghYXJlQXJyYXlzRXF1YWwoaWRzLCBuZXdTb3J0ZWRJZHMpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlkcyA9IG5ld1NvcnRlZElkcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlbW92ZU9uZTogcmVtb3ZlT25lLFxyXG4gICAgICAgIHJlbW92ZU1hbnk6IHJlbW92ZU1hbnksXHJcbiAgICAgICAgcmVtb3ZlQWxsOiByZW1vdmVBbGwsXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXHJcbiAgICAgICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgICAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvY3JlYXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcihvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gX19zcHJlYWRWYWx1ZXMoe1xyXG4gICAgICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXHJcbiAgICAgICAgc2VsZWN0SWQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeyByZXR1cm4gaW5zdGFuY2UuaWQ7IH1cclxuICAgIH0sIG9wdGlvbnMpLCBzZWxlY3RJZCA9IF9jLnNlbGVjdElkLCBzb3J0Q29tcGFyZXIgPSBfYy5zb3J0Q29tcGFyZXI7XHJcbiAgICB2YXIgc3RhdGVGYWN0b3J5ID0gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpO1xyXG4gICAgdmFyIHNlbGVjdG9yc0ZhY3RvcnkgPSBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCk7XHJcbiAgICB2YXIgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyID8gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0Q29tcGFyZXIpIDogY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpO1xyXG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzZWxlY3RJZDogc2VsZWN0SWQsXHJcbiAgICAgICAgc29ydENvbXBhcmVyOiBzb3J0Q29tcGFyZXJcclxuICAgIH0sIHN0YXRlRmFjdG9yeSksIHNlbGVjdG9yc0ZhY3RvcnkpLCBzdGF0ZUFkYXB0ZXIpO1xyXG59XHJcbi8vIHNyYy9uYW5vaWQudHNcclxudmFyIHVybEFscGhhYmV0ID0gXCJNb2R1bGVTeW1iaGFzT3duUHItMDEyMzQ1Njc4OUFCQ0RFRkdITlJWZmdjdGlVdnpfS3FZVEprTHhwWlhJalFXXCI7XHJcbnZhciBuYW5vaWQgPSBmdW5jdGlvbiAoc2l6ZSkge1xyXG4gICAgaWYgKHNpemUgPT09IHZvaWQgMCkgeyBzaXplID0gMjE7IH1cclxuICAgIHZhciBpZCA9IFwiXCI7XHJcbiAgICB2YXIgaSA9IHNpemU7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgaWQgKz0gdXJsQWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIDY0IHwgMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWQ7XHJcbn07XHJcbi8vIHNyYy9jcmVhdGVBc3luY1RodW5rLnRzXHJcbnZhciBjb21tb25Qcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJuYW1lXCIsXHJcbiAgICBcIm1lc3NhZ2VcIixcclxuICAgIFwic3RhY2tcIixcclxuICAgIFwiY29kZVwiXHJcbl07XHJcbnZhciBSZWplY3RXaXRoVmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWplY3RXaXRoVmFsdWUocGF5bG9hZCwgbWV0YSkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZWplY3RXaXRoVmFsdWU7XHJcbn0oKSk7XHJcbnZhciBGdWxmaWxsV2l0aE1ldGEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGdWxmaWxsV2l0aE1ldGEocGF5bG9hZCwgbWV0YSkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBGdWxmaWxsV2l0aE1ldGE7XHJcbn0oKSk7XHJcbnZhciBtaW5pU2VyaWFsaXplRXJyb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICB2YXIgc2ltcGxlRXJyb3IgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGNvbW1vblByb3BlcnRpZXNfMSA9IGNvbW1vblByb3BlcnRpZXM7IF9pIDwgY29tbW9uUHJvcGVydGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjb21tb25Qcm9wZXJ0aWVzXzFbX2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW3Byb3BlcnR5XSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaW1wbGVFcnJvcjtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfTtcclxufTtcclxudmFyIGNyZWF0ZUFzeW5jVGh1bmsgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gY3JlYXRlQXN5bmNUaHVuazIodHlwZVByZWZpeCwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgZnVsZmlsbGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9mdWxmaWxsZWRcIiwgZnVuY3Rpb24gKHBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwiZnVsZmlsbGVkXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHBlbmRpbmcgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3BlbmRpbmdcIiwgZnVuY3Rpb24gKHJlcXVlc3RJZCwgYXJnLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgICAgICBwYXlsb2FkOiB2b2lkIDAsXHJcbiAgICAgICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9yZWplY3RlZFwiLCBmdW5jdGlvbiAoZXJyb3IsIHJlcXVlc3RJZCwgYXJnLCBwYXlsb2FkLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgICAgICBlcnJvcjogKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemVFcnJvciB8fCBtaW5pU2VyaWFsaXplRXJyb3IpKGVycm9yIHx8IFwiUmVqZWN0ZWRcIiksXHJcbiAgICAgICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0ZWRXaXRoVmFsdWU6ICEhcGF5bG9hZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgIGFib3J0ZWQ6IChlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3IubmFtZSkgPT09IFwiQWJvcnRFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkNvbmRpdGlvbkVycm9yXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgdmFyIGRpc3BsYXllZFdhcm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB2YXIgQUMgPSB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSBcInVuZGVmaW5lZFwiID8gQWJvcnRDb250cm9sbGVyIDogLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaWduYWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvbmFib3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWFzb246IHZvaWQgMCxcclxuICAgICAgICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNwbGF5ZWRXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZFdhcm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJUaGlzIHBsYXRmb3JtIGRvZXMgbm90IGltcGxlbWVudCBBYm9ydENvbnRyb2xsZXIuIFxcbklmIHlvdSB3YW50IHRvIHVzZSB0aGUgQWJvcnRDb250cm9sbGVyIHRvIHJlYWN0IHRvIGBhYm9ydGAgZXZlbnRzLCBwbGVhc2UgY29uc2lkZXIgaW1wb3J0aW5nIGEgcG9seWZpbGwgbGlrZSAnYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsLW9ubHknLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgICAgIH0oKSk7XHJcbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihhcmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdElkID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuaWRHZW5lcmF0b3IpID8gb3B0aW9ucy5pZEdlbmVyYXRvcihhcmcpIDogbmFub2lkKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gbmV3IEFDKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWJvcnRSZWFzb247XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRSZWFzb24gPSByZWFzb247XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYXN5bmModGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBmaW5hbEFjdGlvbiwgY29uZGl0aW9uUmVzdWx0LCBhYm9ydGVkUHJvbWlzZSwgZXJyXzEsIHNraXBEaXNwYXRjaDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCA0LCAsIDVdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gKF9hID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIGFyZywgeyBnZXRTdGF0ZTogZ2V0U3RhdGUsIGV4dHJhOiBleHRyYSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBjb25kaXRpb25SZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uUmVzdWx0ID09PSBmYWxzZSB8fCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbmRpdGlvbkVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJBYm9ydGVkIGR1ZSB0byBjb25kaXRpb24gY2FsbGJhY2sgcmV0dXJuaW5nIGZhbHNlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChfLCByZWplY3QpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8IFwiQWJvcnRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHBlbmRpbmcocmVxdWVzdElkLCBhcmcsIChfYiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0UGVuZGluZ01ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKG9wdGlvbnMsIHsgcmVxdWVzdElkOiByZXF1ZXN0SWQsIGFyZzogYXJnIH0sIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydGVkUHJvbWlzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocGF5bG9hZENyZWF0b3IoYXJnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIG1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsZmlsbFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxXaXRoTWV0YSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdC5wYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgcmVzdWx0Lm1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsQWN0aW9uID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl8xID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IGVycl8xIGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlID8gcmVqZWN0ZWQobnVsbCwgcmVxdWVzdElkLCBhcmcsIGVycl8xLnBheWxvYWQsIGVycl8xLm1ldGEpIDogcmVqZWN0ZWQoZXJyXzEsIHJlcXVlc3RJZCwgYXJnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRGlzcGF0Y2ggPSBvcHRpb25zICYmICFvcHRpb25zLmRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uICYmIHJlamVjdGVkLm1hdGNoKGZpbmFsQWN0aW9uKSAmJiBmaW5hbEFjdGlvbi5tZXRhLmNvbmRpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGZpbmFsQWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmluYWxBY3Rpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UyLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGFib3J0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgICAgIHVud3JhcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTIudGhlbih1bndyYXBSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY3Rpb25DcmVhdG9yLCB7XHJcbiAgICAgICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXHJcbiAgICAgICAgICAgIHJlamVjdGVkOiByZWplY3RlZCxcclxuICAgICAgICAgICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXHJcbiAgICAgICAgICAgIHR5cGVQcmVmaXg6IHR5cGVQcmVmaXhcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNyZWF0ZUFzeW5jVGh1bmsyLndpdGhUeXBlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsyOyB9O1xyXG4gICAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsyO1xyXG59KSgpO1xyXG5mdW5jdGlvbiB1bndyYXBSZXN1bHQoYWN0aW9uKSB7XHJcbiAgICBpZiAoYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWUpIHtcclxuICAgICAgICB0aHJvdyBhY3Rpb24ucGF5bG9hZDtcclxuICAgIH1cclxuICAgIGlmIChhY3Rpb24uZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBhY3Rpb24uZXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aW9uLnBheWxvYWQ7XHJcbn1cclxuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xyXG59XHJcbi8vIHNyYy9tYXRjaGVycy50c1xyXG52YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uIChtYXRjaGVyLCBhY3Rpb24pIHtcclxuICAgIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXIubWF0Y2goYWN0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIGlzQW55T2YoKSB7XHJcbiAgICB2YXIgbWF0Y2hlcnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgbWF0Y2hlcnNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXJzLnNvbWUoZnVuY3Rpb24gKG1hdGNoZXIpIHsgcmV0dXJuIG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKTsgfSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQWxsT2YoKSB7XHJcbiAgICB2YXIgbWF0Y2hlcnMgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgbWF0Y2hlcnNbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXJzLmV2ZXJ5KGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIHZhbGlkU3RhdHVzKSB7XHJcbiAgICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLm1ldGEpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gXCJzdHJpbmdcIjtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPSB2YWxpZFN0YXR1cy5pbmRleE9mKGFjdGlvbi5tZXRhLnJlcXVlc3RTdGF0dXMpID4gLTE7XHJcbiAgICByZXR1cm4gaGFzVmFsaWRSZXF1ZXN0SWQgJiYgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzO1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FycmF5KGEpIHtcclxuICAgIHJldHVybiB0eXBlb2YgYVswXSA9PT0gXCJmdW5jdGlvblwiICYmIFwicGVuZGluZ1wiIGluIGFbMF0gJiYgXCJmdWxmaWxsZWRcIiBpbiBhWzBdICYmIFwicmVqZWN0ZWRcIiBpbiBhWzBdO1xyXG59XHJcbmZ1bmN0aW9uIGlzUGVuZGluZygpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNQZW5kaW5nKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsucGVuZGluZzsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicmVqZWN0ZWRcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnJlamVjdGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHZhciBoYXNGbGFnID0gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQuYXBwbHkodm9pZCAwLCBhc3luY1RodW5rcyksIGhhc0ZsYWcpO1xyXG4gICAgICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQuYXBwbHkodm9pZCAwLCBhc3luY1RodW5rcyksIGhhc0ZsYWcpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNGdWxmaWxsZWQoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJmdWxmaWxsZWRcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5mdWxmaWxsZWQ7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiLCBcImZ1bGZpbGxlZFwiLCBcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzQXN5bmNUaHVua0FjdGlvbigpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBhc3luY1RodW5rc18xID0gYXN5bmNUaHVua3M7IF9pIDwgYXN5bmNUaHVua3NfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGFzeW5jVGh1bmsgPSBhc3luY1RodW5rc18xW19pXTtcclxuICAgICAgICAgICAgbWF0Y2hlcnMucHVzaChhc3luY1RodW5rLnBlbmRpbmcsIGFzeW5jVGh1bmsucmVqZWN0ZWQsIGFzeW5jVGh1bmsuZnVsZmlsbGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3V0aWxzLnRzXHJcbnZhciBhc3NlcnRGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jLCBleHBlY3RlZCkge1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGV4cGVjdGVkICsgXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7XHJcbiAgICB9XHJcbn07XHJcbnZhciBub29wID0gZnVuY3Rpb24gKCkge1xyXG59O1xyXG52YXIgY2F0Y2hSZWplY3Rpb24gPSBmdW5jdGlvbiAocHJvbWlzZTIsIG9uRXJyb3IpIHtcclxuICAgIGlmIChvbkVycm9yID09PSB2b2lkIDApIHsgb25FcnJvciA9IG5vb3A7IH1cclxuICAgIHByb21pc2UyLmNhdGNoKG9uRXJyb3IpO1xyXG4gICAgcmV0dXJuIHByb21pc2UyO1xyXG59O1xyXG52YXIgYWRkQWJvcnRTaWduYWxMaXN0ZW5lciA9IGZ1bmN0aW9uIChhYm9ydFNpZ25hbCwgY2FsbGJhY2spIHtcclxuICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBjYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBjYWxsYmFjayk7IH07XHJcbn07XHJcbnZhciBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uID0gZnVuY3Rpb24gKGFib3J0Q29udHJvbGxlciwgcmVhc29uKSB7XHJcbiAgICB2YXIgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghKFwicmVhc29uXCIgaW4gc2lnbmFsKSkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzaWduYWwsIFwicmVhc29uXCIsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgdmFsdWU6IHJlYXNvbixcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgO1xyXG4gICAgYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbik7XHJcbn07XHJcbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvZXhjZXB0aW9ucy50c1xyXG52YXIgdGFzayA9IFwidGFza1wiO1xyXG52YXIgbGlzdGVuZXIgPSBcImxpc3RlbmVyXCI7XHJcbnZhciBjb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xyXG52YXIgY2FuY2VsbGVkID0gXCJjYW5jZWxsZWRcIjtcclxudmFyIHRhc2tDYW5jZWxsZWQgPSBcInRhc2stXCIgKyBjYW5jZWxsZWQ7XHJcbnZhciB0YXNrQ29tcGxldGVkID0gXCJ0YXNrLVwiICsgY29tcGxldGVkO1xyXG52YXIgbGlzdGVuZXJDYW5jZWxsZWQgPSBsaXN0ZW5lciArIFwiLVwiICsgY2FuY2VsbGVkO1xyXG52YXIgbGlzdGVuZXJDb21wbGV0ZWQgPSBsaXN0ZW5lciArIFwiLVwiICsgY29tcGxldGVkO1xyXG52YXIgVGFza0Fib3J0RXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBUYXNrQWJvcnRFcnJvcihjb2RlKSB7XHJcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIlRhc2tBYm9ydEVycm9yXCI7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gdGFzayArIFwiIFwiICsgY2FuY2VsbGVkICsgXCIgKHJlYXNvbjogXCIgKyBjb2RlICsgXCIpXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVGFza0Fib3J0RXJyb3I7XHJcbn0oKSk7XHJcbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50c1xyXG52YXIgdmFsaWRhdGVBY3RpdmUgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVGFza0Fib3J0RXJyb3Ioc2lnbmFsLnJlYXNvbik7XHJcbiAgICB9XHJcbn07XHJcbmZ1bmN0aW9uIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZTIpIHtcclxuICAgIHZhciBjbGVhbnVwID0gbm9vcDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIG5vdGlmeVJlamVjdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdChuZXcgVGFza0Fib3J0RXJyb3Ioc2lnbmFsLnJlYXNvbikpOyB9O1xyXG4gICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICBub3RpZnlSZWplY3Rpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhbnVwID0gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihzaWduYWwsIG5vdGlmeVJlamVjdGlvbik7XHJcbiAgICAgICAgcHJvbWlzZTIuZmluYWxseShmdW5jdGlvbiAoKSB7IHJldHVybiBjbGVhbnVwKCk7IH0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgIH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNsZWFudXAgPSBub29wO1xyXG4gICAgfSk7XHJcbn1cclxudmFyIHJ1blRhc2sgPSBmdW5jdGlvbiAodGFzazIsIGNsZWFuVXApIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdmFsdWUsIGVycm9yXzE7XHJcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzAsIDMsIDQsIDVdKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmVzb2x2ZSgpXTtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGFzazIoKV07XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBcIm9rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvcl8xIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IgPyBcImNhbmNlbGxlZFwiIDogXCJyZWplY3RlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMVxyXG4gICAgICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICBjbGVhblVwID09IG51bGwgPyB2b2lkIDAgOiBjbGVhblVwKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbMiAvKnJldHVybiovXTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7IH07XHJcbnZhciBjcmVhdGVQYXVzZSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJvbWlzZTIpIHtcclxuICAgICAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24ocmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlMikudGhlbihmdW5jdGlvbiAob3V0cHV0KSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfTtcclxufTtcclxudmFyIGNyZWF0ZURlbGF5ID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgdmFyIHBhdXNlID0gY3JlYXRlUGF1c2Uoc2lnbmFsKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGltZW91dE1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdXNlKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7IH0pKTtcclxuICAgIH07XHJcbn07XHJcbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcclxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XHJcbnZhciBJTlRFUk5BTF9OSUxfVE9LRU4gPSB7fTtcclxudmFyIGFsbSA9IFwibGlzdGVuZXJNaWRkbGV3YXJlXCI7XHJcbnZhciBjcmVhdGVGb3JrID0gZnVuY3Rpb24gKHBhcmVudEFib3J0U2lnbmFsLCBwYXJlbnRCbG9ja2luZ1Byb21pc2VzKSB7XHJcbiAgICB2YXIgbGlua0NvbnRyb2xsZXJzID0gZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsgcmV0dXJuIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIocGFyZW50QWJvcnRTaWduYWwsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgcGFyZW50QWJvcnRTaWduYWwucmVhc29uKTsgfSk7IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhc2tFeGVjdXRvciwgb3B0cykge1xyXG4gICAgICAgIGFzc2VydEZ1bmN0aW9uKHRhc2tFeGVjdXRvciwgXCJ0YXNrRXhlY3V0b3JcIik7XHJcbiAgICAgICAgdmFyIGNoaWxkQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgICAgIGxpbmtDb250cm9sbGVycyhjaGlsZEFib3J0Q29udHJvbGxlcik7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJ1blRhc2soZnVuY3Rpb24gKCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdDI7XHJcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGFza0V4ZWN1dG9yKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHJlc3VsdDJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NvbXBsZXRlZCk7IH0pO1xyXG4gICAgICAgIGlmIChvcHRzID09IG51bGwgPyB2b2lkIDAgOiBvcHRzLmF1dG9Kb2luKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEJsb2NraW5nUHJvbWlzZXMucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByZXN1bHQ6IGNyZWF0ZVBhdXNlKHBhcmVudEFib3J0U2lnbmFsKShyZXN1bHQpLFxyXG4gICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDYW5jZWxsZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVUYWtlUGF0dGVybiA9IGZ1bmN0aW9uIChzdGFydExpc3RlbmluZywgc2lnbmFsKSB7XHJcbiAgICB2YXIgdGFrZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUsIHRpbWVvdXQpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlLCB0dXBsZVByb21pc2UsIHByb21pc2VzLCBvdXRwdXQ7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3BMaXN0ZW5pbmcgPSBzdGFydExpc3RlbmluZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdDogZnVuY3Rpb24gKGFjdGlvbiwgbGlzdGVuZXJBcGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQXBpLmdldFN0YXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQXBpLmdldE9yaWdpbmFsU3RhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wTGlzdGVuaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVQcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCwgbnVsbCk7IH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgLCAzLCA0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBQcm9taXNlLnJhY2UocHJvbWlzZXMpKV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIG91dHB1dF07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcmVkaWNhdGUsIHRpbWVvdXQpIHsgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHRha2UocHJlZGljYXRlLCB0aW1lb3V0KSk7IH07XHJcbn07XHJcbnZhciBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciB0eXBlID0gb3B0aW9ucy50eXBlLCBhY3Rpb25DcmVhdG9yID0gb3B0aW9ucy5hY3Rpb25DcmVhdG9yLCBtYXRjaGVyID0gb3B0aW9ucy5tYXRjaGVyLCBwcmVkaWNhdGUgPSBvcHRpb25zLnByZWRpY2F0ZSwgZWZmZWN0ID0gb3B0aW9ucy5lZmZlY3Q7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IGNyZWF0ZUFjdGlvbih0eXBlKS5tYXRjaDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgICAgICB0eXBlID0gYWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IGFjdGlvbkNyZWF0b3IubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtYXRjaGVyKSB7XHJcbiAgICAgICAgcHJlZGljYXRlID0gbWF0Y2hlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHByZWRpY2F0ZSkge1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3JlYXRpbmcgb3IgcmVtb3ZpbmcgYSBsaXN0ZW5lciByZXF1aXJlcyBvbmUgb2YgdGhlIGtub3duIGZpZWxkcyBmb3IgbWF0Y2hpbmcgYW4gYWN0aW9uXCIpO1xyXG4gICAgfVxyXG4gICAgYXNzZXJ0RnVuY3Rpb24oZWZmZWN0LCBcIm9wdGlvbnMubGlzdGVuZXJcIik7XHJcbiAgICByZXR1cm4geyBwcmVkaWNhdGU6IHByZWRpY2F0ZSwgdHlwZTogdHlwZSwgZWZmZWN0OiBlZmZlY3QgfTtcclxufTtcclxudmFyIGNyZWF0ZUxpc3RlbmVyRW50cnkgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgdmFyIF9jID0gZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbShvcHRpb25zKSwgdHlwZSA9IF9jLnR5cGUsIHByZWRpY2F0ZSA9IF9jLnByZWRpY2F0ZSwgZWZmZWN0ID0gX2MuZWZmZWN0O1xyXG4gICAgdmFyIGlkID0gbmFub2lkKCk7XHJcbiAgICB2YXIgZW50cnkgPSB7XHJcbiAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgIGVmZmVjdDogZWZmZWN0LFxyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgcGVuZGluZzogbmV3IFNldCgpLFxyXG4gICAgICAgIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGVudHJ5O1xyXG59O1xyXG52YXIgY2FuY2VsQWN0aXZlTGlzdGVuZXJzID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcclxuICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcclxuICAgIH0pO1xyXG59O1xyXG52YXIgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSBmdW5jdGlvbiAobGlzdGVuZXJNYXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuZm9yRWFjaChjYW5jZWxBY3RpdmVMaXN0ZW5lcnMpO1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmNsZWFyKCk7XHJcbiAgICB9O1xyXG59O1xyXG52YXIgc2FmZWx5Tm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyb3JIYW5kbGVyLCBlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgZXJyb3JIYW5kbGVyKGVycm9yVG9Ob3RpZnksIGVycm9ySW5mbyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3JIYW5kbGVyRXJyb3I7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbn07XHJcbnZhciBhZGRMaXN0ZW5lciA9IGNyZWF0ZUFjdGlvbihhbG0gKyBcIi9hZGRcIik7XHJcbnZhciBjbGVhckFsbExpc3RlbmVycyA9IGNyZWF0ZUFjdGlvbihhbG0gKyBcIi9yZW1vdmVBbGxcIik7XHJcbnZhciByZW1vdmVMaXN0ZW5lciA9IGNyZWF0ZUFjdGlvbihhbG0gKyBcIi9yZW1vdmVcIik7XHJcbnZhciBkZWZhdWx0RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBfX3NwcmVhZEFycmF5KFthbG0gKyBcIi9lcnJvclwiXSwgYXJncykpO1xyXG59O1xyXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUobWlkZGxld2FyZU9wdGlvbnMpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICBpZiAobWlkZGxld2FyZU9wdGlvbnMgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlT3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgbGlzdGVuZXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB2YXIgZXh0cmEgPSBtaWRkbGV3YXJlT3B0aW9ucy5leHRyYSwgX2MgPSBtaWRkbGV3YXJlT3B0aW9ucy5vbkVycm9yLCBvbkVycm9yID0gX2MgPT09IHZvaWQgMCA/IGRlZmF1bHRFcnJvckhhbmRsZXIgOiBfYztcclxuICAgIGFzc2VydEZ1bmN0aW9uKG9uRXJyb3IsIFwib25FcnJvclwiKTtcclxuICAgIHZhciBpbnNlcnRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbGlzdGVuZXJNYXAuZGVsZXRlKGVudHJ5LmlkKTsgfTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbmNlbE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgZW50cnkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgaWYgKGNhbmNlbE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGNhbmNlbE9wdGlvbnMuY2FuY2VsQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB2YXIgZmluZExpc3RlbmVyRW50cnkgPSBmdW5jdGlvbiAoY29tcGFyYXRvcikge1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKTsgX2kgPCBfYy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gX2NbX2ldO1xyXG4gICAgICAgICAgICBpZiAoY29tcGFyYXRvcihlbnRyeSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdm9pZCAwO1xyXG4gICAgfTtcclxuICAgIHZhciBzdGFydExpc3RlbmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGV4aXN0aW5nRW50cnkpIHsgcmV0dXJuIGV4aXN0aW5nRW50cnkuZWZmZWN0ID09PSBvcHRpb25zLmVmZmVjdDsgfSk7XHJcbiAgICAgICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeSA9IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIHN0b3BMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBlZmZlY3QgPSBfYy5lZmZlY3QsIHByZWRpY2F0ZSA9IF9jLnByZWRpY2F0ZTtcclxuICAgICAgICB2YXIgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeShmdW5jdGlvbiAoZW50cnkyKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9IHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiID8gZW50cnkyLnR5cGUgPT09IHR5cGUgOiBlbnRyeTIucHJlZGljYXRlID09PSBwcmVkaWNhdGU7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeTIuZWZmZWN0ID09PSBlZmZlY3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gISFlbnRyeTtcclxuICAgIH07XHJcbiAgICB2YXIgbm90aWZ5TGlzdGVuZXIgPSBmdW5jdGlvbiAoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKSB7IHJldHVybiBfX2FzeW5jKF90aGlzLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGludGVybmFsVGFza0NvbnRyb2xsZXIsIHRha2UsIGF1dG9Kb2luUHJvbWlzZXMsIGxpc3RlbmVyRXJyb3JfMTtcclxuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFRhc2tDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRha2UgPSBjcmVhdGVUYWtlUGF0dGVybihzdGFydExpc3RlbmluZywgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9Kb2luUHJvbWlzZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDE7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFsxLCAzLCA0LCA2XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5hZGQoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yZXNvbHZlKGVudHJ5LmVmZmVjdChhY3Rpb24sIGFzc2lnbih7fSwgYXBpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPcmlnaW5hbFN0YXRlOiBnZXRPcmlnaW5hbFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JrOiBjcmVhdGVGb3JrKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLCBhdXRvSm9pblByb21pc2VzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVyczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaChmdW5jdGlvbiAoY29udHJvbGxlciwgXywgc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpKV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyRXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShsaXN0ZW5lckVycm9yXzEgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgbGlzdGVuZXJFcnJvcl8xLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWRCeTogXCJlZmZlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UuYWxsU2V0dGxlZChhdXRvSm9pblByb21pc2VzKV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDb21wbGV0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZGVsZXRlKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNyAvKmVuZGZpbmFsbHkqL107XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbMiAvKnJldHVybiovXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7IH07XHJcbiAgICB2YXIgY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSBjcmVhdGVDbGVhckxpc3RlbmVyTWlkZGxld2FyZShsaXN0ZW5lck1hcCk7XHJcbiAgICB2YXIgbWlkZGxld2FyZSA9IGZ1bmN0aW9uIChhcGkpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFpc0FjdGlvbihhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbGVhckFsbExpc3RlbmVycy5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0b3BMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb3JpZ2luYWxTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgIHZhciBnZXRPcmlnaW5hbFN0YXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxTdGF0ZSA9PT0gSU5URVJOQUxfTklMX1RPS0VOKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYWxtICsgXCI6IGdldE9yaWdpbmFsU3RhdGUgY2FuIG9ubHkgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHlcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyTWFwLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJFbnRyaWVzID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGxpc3RlbmVyRW50cmllc18xID0gbGlzdGVuZXJFbnRyaWVzOyBfaSA8IGxpc3RlbmVyRW50cmllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IGxpc3RlbmVyRW50cmllc18xW19pXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5MaXN0ZW5lciA9IGVudHJ5LnByZWRpY2F0ZShhY3Rpb24sIGN1cnJlbnRTdGF0ZSwgb3JpZ2luYWxTdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5MaXN0ZW5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBwcmVkaWNhdGVFcnJvciwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkQnk6IFwicHJlZGljYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcnVuTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhdGUgPSBJTlRFUk5BTF9OSUxfVE9LRU47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtaWRkbGV3YXJlOiBtaWRkbGV3YXJlLFxyXG4gICAgICAgIHN0YXJ0TGlzdGVuaW5nOiBzdGFydExpc3RlbmluZyxcclxuICAgICAgICBzdG9wTGlzdGVuaW5nOiBzdG9wTGlzdGVuaW5nLFxyXG4gICAgICAgIGNsZWFyTGlzdGVuZXJzOiBjbGVhckxpc3RlbmVyTWlkZGxld2FyZVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvYXV0b0JhdGNoRW5oYW5jZXIudHNcclxudmFyIFNIT1VMRF9BVVRPQkFUQ0ggPSBcIlJUS19hdXRvQmF0Y2hcIjtcclxudmFyIHByZXBhcmVBdXRvQmF0Y2hlZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChwYXlsb2FkKSB7XHJcbiAgICB2YXIgX2M7XHJcbiAgICByZXR1cm4gKHtcclxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgIG1ldGE6IChfYyA9IHt9LCBfY1tTSE9VTERfQVVUT0JBVENIXSA9IHRydWUsIF9jKVxyXG4gICAgfSk7XHJcbn07IH07XHJcbnZhciBwcm9taXNlO1xyXG52YXIgcXVldWVNaWNyb3Rhc2tTaGltID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSBcImZ1bmN0aW9uXCIgPyBxdWV1ZU1pY3JvdGFzay5iaW5kKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogZ2xvYmFsVGhpcykgOiBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIChwcm9taXNlIHx8IChwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCkpKS50aGVuKGNiKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgIHRocm93IGVycjtcclxufSwgMCk7IH0pOyB9O1xyXG52YXIgY3JlYXRlUXVldWVXaXRoVGltZXIgPSBmdW5jdGlvbiAodGltZW91dCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub3RpZnkpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KG5vdGlmeSwgdGltZW91dCk7XHJcbiAgICB9O1xyXG59O1xyXG52YXIgckFGID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKDEwKTtcclxudmFyIGF1dG9CYXRjaEVuaGFuY2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHsgdHlwZTogXCJyYWZcIiB9OyB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN0b3JlID0gbmV4dC5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgICAgIHZhciBub3RpZnlpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbGlzdGVuZXJzID0gbmV3IFNldCgpO1xyXG4gICAgICAgIHZhciBxdWV1ZUNhbGxiYWNrID0gb3B0aW9ucy50eXBlID09PSBcInRpY2tcIiA/IHF1ZXVlTWljcm90YXNrU2hpbSA6IG9wdGlvbnMudHlwZSA9PT0gXCJyYWZcIiA/IHJBRiA6IG9wdGlvbnMudHlwZSA9PT0gXCJjYWxsYmFja1wiID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvbiA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKG9wdGlvbnMudGltZW91dCk7XHJcbiAgICAgICAgdmFyIG5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGROb3RpZnlBdEVuZE9mVGljaykge1xyXG4gICAgICAgICAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7IHJldHVybiBsKCk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiAobGlzdGVuZXIyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZExpc3RlbmVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbm90aWZ5aW5nICYmIGxpc3RlbmVyMigpOyB9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcik7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyMik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcjIpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nID0gISgoX2EgPSBhY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGFjdGlvbi5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2FbU0hPVUxEX0FVVE9CQVRDSF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZUNhbGxiYWNrKG5vdGlmeUxpc3RlbmVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9OyB9O1xyXG59O1xyXG4vLyBzcmMvaW5kZXgudHNcclxuZW5hYmxlRVM1KCk7XHJcbmV4cG9ydCB7IEVuaGFuY2VyQXJyYXksIE1pZGRsZXdhcmVBcnJheSwgU0hPVUxEX0FVVE9CQVRDSCwgVGFza0Fib3J0RXJyb3IsIGFkZExpc3RlbmVyLCBhdXRvQmF0Y2hFbmhhbmNlciwgY2xlYXJBbGxMaXN0ZW5lcnMsIGNvbmZpZ3VyZVN0b3JlLCBjcmVhdGVBY3Rpb24sIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVBc3luY1RodW5rLCBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciwgY3JlYXRlRW50aXR5QWRhcHRlciwgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUsIGRlZmF1bHQyIGFzIGNyZWF0ZU5leHRTdGF0ZSwgY3JlYXRlUmVkdWNlciwgY3JlYXRlU2VsZWN0b3IyIGFzIGNyZWF0ZVNlbGVjdG9yLCBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsIGNyZWF0ZVNsaWNlLCBjdXJyZW50MiBhcyBjdXJyZW50LCBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsIGZyZWV6ZSwgZ2V0RGVmYXVsdE1pZGRsZXdhcmUsIGdldFR5cGUsIGlzQWN0aW9uLCBpc0FjdGlvbkNyZWF0b3IsIGlzQWxsT2YsIGlzQW55T2YsIGlzQXN5bmNUaHVua0FjdGlvbiwgaXNEcmFmdDQgYXMgaXNEcmFmdCwgaXNGU0EgYXMgaXNGbHV4U3RhbmRhcmRBY3Rpb24sIGlzRnVsZmlsbGVkLCBpc0ltbXV0YWJsZURlZmF1bHQsIGlzUGVuZGluZywgaXNQbGFpbiwgaXNQbGFpbk9iamVjdCwgaXNSZWplY3RlZCwgaXNSZWplY3RlZFdpdGhWYWx1ZSwgbWluaVNlcmlhbGl6ZUVycm9yLCBuYW5vaWQsIG9yaWdpbmFsLCBwcmVwYXJlQXV0b0JhdGNoZWQsIHJlbW92ZUxpc3RlbmVyLCB1bndyYXBSZXN1bHQgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdXgtdG9vbGtpdC5lc20uanMubWFwIiwgIlxudHlwZSBSZXFQYXJhbXMgPSB7W2s6c3RyaW5nXTpzdHJpbmd9fHVuZGVmaW5lZCBcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zOlJlcVBhcmFtcyxcbiAgaW5pdD86IFJlcXVlc3RJbml0IHwgdW5kZWZpbmVkLFxuICBhcGlVcmw/OiBzdHJpbmdcbik6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHVybCA9IChhcGlVcmwgfHwgcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0FQSVVSTCkgKyBwYXRoO1xuICAvL2NvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybC5yZXBsYWNlKC8oW146XVxcLylcXC8rL2csIFwiJDFcIiksIHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsICsgKHJlcVBhcmFtcyA/ICgnPycgKyBuZXcgVVJMU2VhcmNoUGFyYW1zKE9iamVjdC5lbnRyaWVzKHJlcVBhcmFtcykpLnRvU3RyaW5nKCkpIDogJycpLCB7XG4gICAgLi4uKGluaXQgPyBpbml0IDoge30pLFxuICAgIC8vaGVhZGVyczogeyAuLi4oaW5pdD8uaGVhZGVycyB8fCB7fSksIC4uLmdldEF1dGhIZWFkZXJzKCkgfVxuICB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYEZhaWx1cmUgbG9hZGluZyAke3Jlcy51cmx9IHdpdGggc3RhdHVzICR7cmVzLnN0YXR1c30gKCR7cmVzLnN0YXR1c1RleHR9KWA7XG4gICAgY29uc29sZS5kaXIobWVzc2FnZSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSlcbiAgfVxuICByZXR1cm4gYXdhaXQgcmVzLmpzb24oKTtcbn1cblxuZXhwb3J0IGNsYXNzIFBhZ2U8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGFnZTogbnVtYmVyLFxuICAgIHB1YmxpYyBudW1FbGVtZW50czogbnVtYmVyLFxuICAgIHB1YmxpYyB0b3RhbFBhZ2VzOiBudW1iZXIsXG4gICAgcHVibGljIHRvdGFsRWxlbWVudHM6IG51bWJlcixcbiAgICBwdWJsaWMgZWxlbWVudHM6IFRbXSxcbiAgICBwdWJsaWMgZmFjZXRGaWVsZHNUb0NvdW50czogTWFwPHN0cmluZywgTWFwPHN0cmluZywgbnVtYmVyPj5cbiAgKSB7fVxuXG4gIG1hcDxOZXdUeXBlPihmbjogKFQpID0+IE5ld1R5cGUpIHtcbiAgICByZXR1cm4gbmV3IFBhZ2U8TmV3VHlwZT4oXG4gICAgICB0aGlzLnBhZ2UsXG4gICAgICB0aGlzLm51bUVsZW1lbnRzLFxuICAgICAgdGhpcy50b3RhbFBhZ2VzLFxuICAgICAgdGhpcy50b3RhbEVsZW1lbnRzLFxuICAgICAgdGhpcy5lbGVtZW50cy5tYXAoZm4pLFxuICAgICAgdGhpcy5mYWNldEZpZWxkc1RvQ291bnRzXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGFnaW5hdGVkPFJlc1R5cGU+KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtcz86IFJlcVBhcmFtcyxcbiAgYXBpVXJsPzogc3RyaW5nXG4pOiBQcm9taXNlPFBhZ2U8UmVzVHlwZT4+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZ2V0PGFueT4ocGF0aCwgcmVxUGFyYW1zLCBhcGlVcmwpO1xuXG4gIHJldHVybiBuZXcgUGFnZTxSZXNUeXBlPihcblx0cmVzLnBhZ2UgfHwgMCxcblx0cmVzLm51bUVsZW1lbnRzIHx8IDAsXG5cdHJlcy50b3RhbFBhZ2VzIHx8IDAsXG5cdHJlcy50b3RhbEVsZW1lbnRzIHx8IDAsXG5cdHJlcy5lbGVtZW50cyB8fCBbXSxcblx0cmVzLmZhY2V0RmllbGRzVG9Db3VudHMgfHwgbmV3IE1hcCgpXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXQ8UmVzVHlwZT4ocGF0aDogc3RyaW5nLCByZXFQYXJhbXM/OlJlcVBhcmFtcywgYXBpVXJsPzogc3RyaW5nKTogUHJvbWlzZTxSZXNUeXBlPiB7XG4gIHJldHVybiByZXF1ZXN0KHBhdGgsIHJlcVBhcmFtcywgdW5kZWZpbmVkLCBhcGlVcmwpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9zdDxSZXFUeXBlLCBSZXNUeXBlID0gYW55PihcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM6IFJlcVBhcmFtcyxcbiAgYm9keTogUmVxVHlwZVxuKTogUHJvbWlzZTxSZXNUeXBlPiB7XG4gIHJldHVybiByZXF1ZXN0KHBhdGgsIHJlcVBhcmFtcywge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXQ8UmVxVHlwZSwgUmVzVHlwZSA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zOiBSZXFQYXJhbXMsXG4gIGJvZHk6IFJlcVR5cGVcbik6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHtcbiAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgfSxcbiAgfSk7XG59XG4iLCAiZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICB9XG5cbiAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgfVxuXG4gIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICB9IGVsc2Uge1xuICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgIH1cbiAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgIH1cblxuICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICB9XG5cbiAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cmxKb2luKCkge1xuICB2YXIgaW5wdXQ7XG5cbiAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVBc3luY1RodW5rLCBjcmVhdGVTbGljZSwgUGF5bG9hZEFjdGlvbiB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5pbXBvcnQgeyBnZXQgfSBmcm9tIFwiLi4vLi4vYXBwL2FwaVwiO1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9tZVN0YXRlIHtcbiAgYmFubmVyVGV4dDogc3RyaW5nO1xuICBzdGF0czogU3RhdHMgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzIHtcbiAgbnVtYmVyT2ZPbnRvbG9naWVzOiBudW1iZXI7XG4gIG51bWJlck9mQ2xhc3NlczogbnVtYmVyO1xuICBudW1iZXJPZlByb3BlcnRpZXM6IG51bWJlcjtcbiAgbnVtYmVyT2ZJbmRpdmlkdWFsczogbnVtYmVyO1xuICBsYXN0TW9kaWZpZWQ6IHN0cmluZztcbn1cbmNvbnN0IGluaXRpYWxTdGF0ZTogSG9tZVN0YXRlID0ge1xuICBzdGF0czogdW5kZWZpbmVkLFxuICBiYW5uZXJUZXh0OiBcIlwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGdldFN0YXRzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJob21lX3N0YXRzXCIsXG4gIGFzeW5jIChhcmcsIHsgcmVqZWN0V2l0aFZhbHVlIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGdldDxTdGF0cz4oYGFwaS92Mi9zdGF0c2ApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEJhbm5lclRleHQgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcImhvbWVfYmFubmVyXCIsXG4gIGFzeW5jIChhcmcsIHsgcmVqZWN0V2l0aFZhbHVlIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsSm9pbihwcm9jZXNzLmVudi5QVUJMSUNfVVJMISwgXCJiYW5uZXIudHh0XCIpKTtcbiAgICAgIHJldHVybiByZXMudGV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBob21lU2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6IFwiaG9tZVwiLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7fSxcbiAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRTdGF0cy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IEhvbWVTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFN0YXRzPikgPT4ge1xuICAgICAgICBzdGF0ZS5zdGF0cyA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFN0YXRzLnJlamVjdGVkLCAoc3RhdGU6IEhvbWVTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuc3RhdHMgPSBpbml0aWFsU3RhdGUuc3RhdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0QmFubmVyVGV4dC5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IEhvbWVTdGF0ZSwgYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUuYmFubmVyVGV4dCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEJhbm5lclRleHQucmVqZWN0ZWQsIChzdGF0ZTogSG9tZVN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5iYW5uZXJUZXh0ID0gaW5pdGlhbFN0YXRlLmJhbm5lclRleHQ7XG4gICAgfSk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaG9tZVNsaWNlLnJlZHVjZXI7XG4iLCAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBDbGFzcyBmcm9tIFwiLi4vbW9kZWwvQ2xhc3NcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IEluZGl2aWR1YWwgZnJvbSBcIi4uL21vZGVsL0luZGl2aWR1YWxcIjtcbmltcG9ydCBQcm9wZXJ0eSBmcm9tIFwiLi4vbW9kZWwvUHJvcGVydHlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXk8VD4ob2JqOiBUIHwgVFtdKTogVFtdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSBpZiAob2JqKSB7XG4gICAgcmV0dXJuIFtvYmpdO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QnlLZXlzKGE6IGFueSwgYjogYW55KSB7XG4gIGNvbnN0IGtleUEgPSBhLmtleS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBrZXlCID0gYi5rZXkudG9VcHBlckNhc2UoKTtcbiAgcmV0dXJuIGtleUEgPT09IGtleUIgPyAwIDoga2V5QSA+IGtleUIgPyAxIDogLTE7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gIGlmIChcImNsaXBib2FyZFwiIGluIG5hdmlnYXRvcikge1xuICAgIHJldHVybiBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIsIHRydWUsIHRleHQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcmV2aW91cyh2YWx1ZTogYW55KSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZigpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhpbmdGcm9tSnNvblByb3BlcnRpZXMocHJvcGVydGllczogYW55KTogRW50aXR5IHtcbiAgY29uc3QgdHlwZXMgPSBwcm9wZXJ0aWVzW1widHlwZVwiXSB8fCBbXTtcbiAgaWYgKHR5cGVzLmluZGV4T2YoXCJjbGFzc1wiKSAhPT0gLTEpIHJldHVybiBuZXcgQ2xhc3MocHJvcGVydGllcyk7XG4gIGlmICh0eXBlcy5pbmRleE9mKFwicHJvcGVydHlcIikgIT09IC0xKSByZXR1cm4gbmV3IFByb3BlcnR5KHByb3BlcnRpZXMpO1xuICBpZiAodHlwZXMuaW5kZXhPZihcImluZGl2aWR1YWxcIikgIT09IC0xKSByZXR1cm4gbmV3IEluZGl2aWR1YWwocHJvcGVydGllcyk7XG4gIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW50aXR5IHR5cGU6IFwiICsgSlNPTi5zdHJpbmdpZnkocHJvcGVydGllcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9BcGlQYXJhbXMoc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zQ29weSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgbGV0IG5ld0tleSA9IGtleS5pbmNsdWRlcyhcIl9cIikgPyB0b0NhbWVsKGtleSkgOiBrZXk7XG4gICAgLy8gc3BlY2lhbCBjYXNlc1xuICAgIGlmIChuZXdLZXkgPT09IFwib2JvSWRcIikgbmV3S2V5ID0gXCJjdXJpZVwiO1xuICAgIHNlYXJjaFBhcmFtc0NvcHkuYXBwZW5kKG5ld0tleSwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIHNlYXJjaFBhcmFtc0NvcHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFstX11bYS16XSkvZ2ksICgkMSkgPT4ge1xuICAgIHJldHVybiAkMS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoXCItXCIsIFwiXCIpLnJlcGxhY2UoXCJfXCIsIFwiXCIpO1xuICB9KTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGF4aW9tIG9mIHRoaXMuYXhpb21zKSB7XG4gICAgICBmb3IgKGxldCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBsZXQgdiA9IGF4aW9tW2tdO1xuICAgICAgICBsZXQgZXhpc3Rpbmc6IGFueVtdIHwgdW5kZWZpbmVkID0gcHJvcGVydGllc1trXTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGlzdGluZy5wdXNoKHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXNba10gPSBbdl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxufVxuIiwgImltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEVudGl0eSB7XG5cdGRlZmluZWRCeT86c3RyaW5nW11cblx0aXJpPzpzdHJpbmdcblx0dXJsPzpzdHJpbmdcblx0bnVtQXBwZWFyc0luOnN0cmluZ1xuXHRoYXNMb2NhbERlZmluaXRpb246Ym9vbGVhblxuXHRsYWJlbDpzdHJpbmd8c3RyaW5nW11cblx0dHlwZTpzdHJpbmdbXVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW5rZWRFbnRpdGllcyB7XG5cblx0bGlua2VkRW50aXRpZXM6eyBba2V5OnN0cmluZ106TGlua2VkRW50aXR5IH1cblxuXHRjb25zdHJ1Y3RvcihsaW5rZWRFbnRpdGllczphbnkpIHtcblx0XHRpZihsaW5rZWRFbnRpdGllcylcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7Li4ubGlua2VkRW50aXRpZXN9XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5saW5rZWRFbnRpdGllcyA9IHt9XG5cdH1cblxuXHRtZXJnZVdpdGgobGlua2VkRW50aXRpZXM6YW55KTpMaW5rZWRFbnRpdGllcyB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHRyZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHsgLi4udGhpcy5saW5rZWRFbnRpdGllcywgbGlua2VkRW50aXRpZXMgfSlcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHsgLi4udGhpcy5saW5rZWRFbnRpdGllcyB9KVxuXHR9XG5cblx0Z2V0TGFiZWxGb3JJcmkoaXJpOnN0cmluZyk6c3RyaW5nfHVuZGVmaW5lZCB7XG5cblx0XHRsZXQgbGlua2VkRW50aXR5ID0gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cblx0XHRpZihsaW5rZWRFbnRpdHkpIHtcblx0XHRcdGxldCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi9MaW5rZWRFbnRpdGllc1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBUaGluZyB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFtcIm9udG9sb2d5XCIsIFwiY2xhc3NcIiwgXCJwcm9wZXJ0eVwiLCBcImluZGl2aWR1YWxcIl0uaW5kZXhPZih0eXBlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZGZUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1xuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiXG4gICAgXSlcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5tYXAoKGRlZikgPT4gZGVmLnZhbHVlIHx8IFwiXCIpLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tpZF0pKVxuICB9XG5cbiAgZ2V0TGlua2VkRW50aXRpZXMoKTogTGlua2VkRW50aXRpZXMge1xuICAgIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXModGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl0gfHwge30pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuaW1wb3J0IFRoaW5nIGZyb20gXCIuL1RoaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIEVudGl0eSBleHRlbmRzIFRoaW5nIHtcbiAgYWJzdHJhY3QgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W107XG5cbiAgaXNDYW5vbmljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlzRGVmaW5pbmdPbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzRGVwcmVjYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGVwcmVjYXRlZFwiXSA9PT0gXCJ0cnVlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0hpZXJhcmNoaWNhbENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0RpcmVjdENoaWxkcmVuKCkgfHwgdGhpcy5oYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbEFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldFN5bm9ueW1zKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVwiXSk7XG4gIH1cblxuICBnZXRBcHBlYXJzSW4oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiYXBwZWFyc0luXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImN1cmllXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInNob3J0Rm9ybVwiXTtcbiAgfVxuXG4gIGdldERlcGljdGVkQnkoKTogUmVpZmllZDxzdHJpbmc+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgZGVmaW5pdGlvblByb3BlcnRpZXMgPSBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25Qcm9wZXJ0eVwiXSk7XG4gICAgbGV0IHN5bm9ueW1Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltUHJvcGVydHlcIl0pO1xuICAgIGxldCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBsZXQgYW5ub3RhdGlvblByZWRpY2F0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBmb3IgKGxldCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKSBjb250aW51ZTtcblxuICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGV4cGxpY2l0bHkgaW4gRW50aXR5UGFnZVxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCIpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpXG4gICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xKSBjb250aW51ZTtcbiAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xKSBjb250aW51ZTtcblxuICAgICAgLy8gSWYgdGhlIHZhbHVlIHdhcyBhbHJlYWR5IGludGVycHJldGVkIGFzIGRlZmluaXRpb24vc3lub255bS9oaWVyYXJjaGljYWwsIGRvXG4gICAgICAvLyBub3QgaW5jbHVkZSBpdCBhcyBhbiBhbm5vdGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmluaXRpb25Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgc3lub255bVByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGRpc3BsYXllZCBpbiB0aGUgYW5ub3RhdGlvbnMgc2VjdGlvbi4uLlxuICAgICAgaWYgKFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICApIHtcbiAgICAgICAgLy8gLi4uYXBhcnQgZnJvbSB0aGVzZSBvbmVzXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2NvbW1lbnRcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc2VlQWxzb1wiICYmXG4gICAgICAgICAgLy8gcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleVwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50VW5pb25PZlwiXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHdoaWxlIGluIGdlbmVyYWwgb2JvSW5Pd2wgbmFtZXNwYWNlIHByb3BlcnRpZXMgYXJlIGFubm90YXRpb25zLCBzb21lXG4gICAgICAvLyBvZiB0aGVtIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheVxuICAgICAgLy9cbiAgICAgIGlmIChcbiAgICAgICAgLy9wcmVkaWNhdGUgPT09IFwiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIlxuICAgICAgICBwcmVkaWNhdGUgPT09IFwiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaWRcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcIkFQc1wiKTtcbiAgICAvLyBjb25zb2xlLmRpcihBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldE51bURlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bURlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bURlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsUGFyZW50UmVpZmljYXRpb25BeGlvbXMocGFyZW50SXJpOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCBoaWVyYXJjaGljYWxQYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcblxuICAgIGZvciAobGV0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4vRW50aXR5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsYXNzIGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4vRW50aXR5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGl2aWR1YWwgZXh0ZW5kcyBFbnRpdHkge1xuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi9FbnRpdHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvcGVydHkgZXh0ZW5kcyBFbnRpdHkge1xuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50UHJvcGVydHlcIl1cbiAgICApO1xuICB9XG5cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlEaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIGdldEludmVyc2VPZigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl0pO1xuICB9XG5cbiAgZ2V0RG9tYWluKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2RvbWFpbiddKVxuICB9XG5cbiAgZ2V0UmFuZ2UoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjcmFuZ2UnXSlcbiAgfVxuXG4gIGdldFByb3BlcnR5Q2hhaW5zKCk6UmVpZmllZDxhbnk+W10ge1xuXHRyZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuXHRcdHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5Q2hhaW5BeGlvbVwiXVxuXHQpXG4gIH1cblxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBUaGluZyBmcm9tIFwiLi9UaGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbnRvbG9neSBleHRlbmRzIFRoaW5nIHtcbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBsZXQgbmFtZXMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdIHx8IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuICBnZXRTb3VyY2VGaWxlVGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZUZpbGVUaW1lc3RhbXBcIl07XG4gIH1cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZFbnRpdGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkNsYXNzZXNcIl0pO1xuICB9XG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZQcm9wZXJ0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkluZGl2aWR1YWxzXCJdKTtcbiAgfVxuICBnZXRMb2dvVVJMKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImRlcGljdGVkX2J5XCJdIHx8IHVuZGVmaW5lZDtcbiAgfVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfcHVybFwiXTtcbiAgfVxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJtYWlsaW5nX2xpc3RcIl07XG4gIH1cbiAgZ2V0VHJhY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0cmFja2VyXCJdO1xuICB9XG4gIGdldFZlcnNpb25JcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgfVxuICBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JbmZvXCJdO1xuICB9XG4gIGdldFZlcnNpb25Gcm9tSXJpKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbklyaSA9XG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICAgIGlmICghdmVyc2lvbklyaSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgdmVyc2lvbkZyb21EYXRlID0gdmVyc2lvbklyaS5tYXRjaCgvXFxkezR9LVxcZHsyfS1cXGR7Mn0vKTtcblxuICAgIGlmICh2ZXJzaW9uRnJvbURhdGUgJiYgdmVyc2lvbkZyb21EYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbURhdGVbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZlcnNpb25Gcm9tTnVtYmVyID0gdmVyc2lvbklyaS5tYXRjaCgvXFwvdltkLl0uKlxcLy8pO1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tTnVtYmVyXG4gICAgICAgID8gdmVyc2lvbkZyb21OdW1iZXJbMF0ucmVwbGFjZUFsbChcIi9cIiwgXCJcIikucmVwbGFjZShcInZcIiwgXCJcIilcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgfVxuICBnZXRMb2FkZWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibG9hZGVkXCJdO1xuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgYW5ub3RhdGlvblByZWRpY2F0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBmb3IgKGxldCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ3VhZ2VcIl0pO1xuICB9XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbXBvcnRzRnJvbVwiXSk7XG4gIH1cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG59XG4iLCAiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgTXVsdGltYXAgZnJvbSBcIm11bHRpbWFwXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9FbnRpdHlcIjtcblxuLyogVW5mbGF0dGVucyBhIGxpc3Qgb2YgZW50aXRpZXMgaW50bzpcbiAqXHQtIEEgbGlzdCBvZiByb290IGVudGl0aWVzXG4gKiBcdC0gQSBtYXBwaW5nIG9mIFVSSSB0byBsaXN0IG9mIGNoaWxkIGVudGl0aWVzXG4gKlxuICogVXNlZCBieSBFbnRpdHlUcmVlIGFuZCBFbnRpdHlHcmFwaFxuICovXG5cbiBpbnRlcmZhY2UgUGFyZW50Q2hpbGRSZWxhdGlvbiB7XG5cdHBhcmVudDpFbnRpdHksXG5cdGNoaWxkOkVudGl0eVxuXHRwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6c3RyaW5nfG51bGxcblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50OnN0cmluZ3xudWxsXG4gfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRyYWN0RW50aXR5SGllcmFyY2h5KGVudGl0aWVzOiBFbnRpdHlbXSk6IHtcbiAgcm9vdEVudGl0aWVzOiBFbnRpdHlbXTtcbiAgcGFyZW50VG9DaGlsZFJlbGF0aW9uczogTXVsdGltYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uPjtcbn0ge1xuICBsZXQgY2hpbGRUb1BhcmVudFJlbGF0aW9uczogTXVsdGltYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uPiA9IG5ldyBNdWx0aW1hcCgpO1xuXG4gIGxldCB1cmlUb05vZGU6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIGZvciAobGV0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgIHVyaVRvTm9kZS5zZXQoZW50aXR5LmdldElyaSgpLCBlbnRpdHkpO1xuICB9XG5cbiAgZm9yIChsZXQgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgaWYgKGlzVG9wKGVudGl0eS5nZXRJcmkoKSkpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChsZXQgcGFyZW50UmVsYXRpb24gb2YgZW50aXR5LmdldFBhcmVudHMoKSkge1xuXG4gICAgICBsZXQgcGFyZW50SXJpID0gcGFyZW50UmVsYXRpb24udmFsdWU7XG4gICAgICBsZXQgcGFyZW50RW50aXR5ID0gdXJpVG9Ob2RlLmdldChwYXJlbnRJcmkpO1xuXG4gICAgICBpZiAoaXNUb3AocGFyZW50SXJpKSkgY29udGludWU7XG5cbiAgICAgIGlmKCEgKHBhcmVudEVudGl0eSBpbnN0YW5jZW9mIEVudGl0eSkpIHtcblx0Y29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnRSZWxhdGlvblRvQ2hpbGQsIGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuXG4gICAgICBpZihlbnRpdHkuZ2V0VHlwZSgpID09PSAnaW5kaXZpZHVhbCcpIHtcblxuXHQvLyBJbiB0aGUgY2FzZSBvZiBpbmRpdmlkdWFscywgdGhlIGNoaWxkLT5wYXJlbnQgcmVsYXRpb25zaGlwIGlzIGFsd2F5c1xuXHQvLyByZGY6dHlwZSBhbmQgdGhlcmUgaXMgbm8gZXhwbGljaXQgcGFyZW50LT5jaGlsZCByZWxhdGlvbnNoaXAuXG5cblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50ID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlJ1xuXHRwYXJlbnRSZWxhdGlvblRvQ2hpbGQgPSBudWxsXG5cbiAgICAgIH0gZWxzZSBpZihlbnRpdHkuZ2V0VHlwZSgpID09ICdjbGFzcycpIHtcblxuXHQvLyBJbiB0aGUgY2FzZSBvZiBjbGFzc2VzLCB0aGUgcmVsYXRpb25zIGFyZSBwcm92aWRlZCBpbiB0aGUgbWV0YWRhdGEuXG5cblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkID0gXG5cdFx0cGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsncGFyZW50UmVsYXRpb25Ub0NoaWxkJ10gXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydwYXJlbnRSZWxhdGlvblRvQ2hpbGQnXVswXTtcblxuXHRjaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSBcblx0XHRwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydjaGlsZFJlbGF0aW9uVG9QYXJlbnQnXSBcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ2NoaWxkUmVsYXRpb25Ub1BhcmVudCddWzBdO1xuXG4gICAgICB9IGVsc2Uge1xuXG5cdC8vIEluIHRoZSBjYXNlIG9mIHByb3BlcnRpZXMsIHRoZXJlIGFyZSBubyByZWxhdGlvbnMgdG8gc2hvdy5cblx0Ly8gKGl0IHdvdWxkIGFsd2F5cyBiZSBqdXN0IHN1YlByb3BlcnR5T2YpXG5cdC8vXG5cbiAgICAgIH1cblxuICAgICAgbGV0IHJlbGF0aW9uID0ge1xuXHRwYXJlbnQ6IHBhcmVudEVudGl0eSxcblx0Y2hpbGQ6IGVudGl0eSxcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkLFxuXHRjaGlsZFJlbGF0aW9uVG9QYXJlbnRcbiAgICAgIH1cblxuICAgICAgY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5zZXQoZW50aXR5LmdldElyaSgpLCByZWxhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJyZWFrQ3ljbGVzID0gZnVuY3Rpb24gKGN1cnJlbnRJcmk6c3RyaW5nLCB2aXNpdGVkSXJpczogU2V0PHN0cmluZz4pIHtcbiAgICB2aXNpdGVkSXJpcy5hZGQoY3VycmVudElyaSk7XG5cbiAgICBsZXQgcGFyZW50UmVsYXRpb25zID0gY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5nZXQoY3VycmVudElyaSk7XG4gICAgaWYgKHBhcmVudFJlbGF0aW9ucykge1xuICAgICAgZm9yIChsZXQgcGFyZW50UmVsYXRpb24gb2YgcGFyZW50UmVsYXRpb25zKSB7XG4gICAgICAgIGlmICh2aXNpdGVkSXJpcy5oYXMocGFyZW50UmVsYXRpb24ucGFyZW50LmdldElyaSgpKSkge1xuICAgICAgICAgIC8vIHdlIGFscmVhZHkgc2F3IHRoaXMgcGFyZW50LCByZW1vdmUgaXRcblx0ICBjaGlsZFRvUGFyZW50UmVsYXRpb25zLmRlbGV0ZShjdXJyZW50SXJpLCBwYXJlbnRSZWxhdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVha0N5Y2xlcyhwYXJlbnRSZWxhdGlvbi5wYXJlbnQuZ2V0SXJpKCksIG5ldyBTZXQodmlzaXRlZElyaXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBicmVhayBjeWNsZXMgc3RhcnRpbmcgZnJvbSBsZWFmIGVudGl0aWVzXG4gIGZvciAobGV0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgIGJyZWFrQ3ljbGVzKGVudGl0eS5nZXRJcmkoKSwgbmV3IFNldCgpKTtcbiAgfVxuXG4gIGxldCBwYXJlbnRUb0NoaWxkUmVsYXRpb25zOiBNdWx0aW1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb24+ID0gbmV3IE11bHRpbWFwKCk7XG5cbiAgZm9yKGxldCBjaGlsZElyaSBvZiBBcnJheS5mcm9tKGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMua2V5cygpKSkge1xuICBcdGxldCByZWxhdGlvbnMgPSBjaGlsZFRvUGFyZW50UmVsYXRpb25zLmdldChjaGlsZElyaSk7XG5cdGZvcihsZXQgciBvZiByZWxhdGlvbnMpIHtcblx0XHRwYXJlbnRUb0NoaWxkUmVsYXRpb25zLnNldChyLnBhcmVudC5nZXRJcmkoKSwgcilcblx0fVxuICB9XG5cbiAgbGV0IHJvb3RFbnRpdGllcyA9IGVudGl0aWVzLmZpbHRlcigobm9kZSkgPT4ge1xuICAgIGlmIChpc1RvcChub2RlLmdldElyaSgpKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5nZXQobm9kZS5nZXRJcmkoKSkgfHwgW10pLmxlbmd0aCA9PT0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgcm9vdEVudGl0aWVzLCBwYXJlbnRUb0NoaWxkUmVsYXRpb25zIH07XG59XG5cbmZ1bmN0aW9uIGlzVG9wKGlyaSkge1xuICByZXR1cm4gKFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUaGluZ1wiIHx8XG4gICAgaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RvcE9iamVjdFByb3BlcnR5XCJcbiAgKTtcbn1cbiIsICJpbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvT250b2xvZ3lcIjtcbmltcG9ydCBleHRyYWN0RW50aXR5SGllcmFyY2h5IGZyb20gXCIuL2V4dHJhY3RFbnRpdHlIaWVyYXJjaHlcIjtcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSBcIi4uL29udG9sb2dpZXNTbGljZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmVlRnJvbUVudGl0aWVzKFxuICBlbnRpdGllczogRW50aXR5W10sXG4gIHByZWZlcnJlZFJvb3RzOiBib29sZWFuLFxuICBvbnRvbG9neTogT250b2xvZ3lcbik6IHsgYWxsTm9kZXM6VHJlZU5vZGVbXSwgcm9vdE5vZGVzOiBUcmVlTm9kZVtdOyBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlczpTZXQ8c3RyaW5nPiwgbm9kZUNoaWxkcmVuOiBhbnkgfSB7XG4gIGxldCB7IHJvb3RFbnRpdGllcywgcGFyZW50VG9DaGlsZFJlbGF0aW9ucyB9ID0gZXh0cmFjdEVudGl0eUhpZXJhcmNoeShlbnRpdGllcyk7XG5cbiAgY29uc29sZS5sb2coJ3Jvb3RFbnRpdGllcycpXG4gIGNvbnNvbGUuZGlyKHJvb3RFbnRpdGllcylcbiAgY29uc29sZS5sb2coJ3BhcmVudFRvQ2hpbGRSZWxhdGlvbnMnKVxuICBjb25zb2xlLmRpcihwYXJlbnRUb0NoaWxkUmVsYXRpb25zKVxuXG4gIGlmIChwcmVmZXJyZWRSb290cykge1xuICAgIGxldCBwcmVmZXJyZWQgPSBvbnRvbG9neS5nZXRQcmVmZXJyZWRSb290cygpO1xuICAgIGlmIChwcmVmZXJyZWQubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHByZWZlcnJlZFJvb3RFbnRpdGllcyA9IHByZWZlcnJlZC5tYXAoXG4gICAgICAgIChpcmkpID0+IGVudGl0aWVzLmZpbHRlcigoZW50aXR5KSA9PiBlbnRpdHkuZ2V0SXJpKCkgPT09IGlyaSlbMF1cbiAgICAgICk7XG4gICAgICByb290RW50aXRpZXMgPSBwcmVmZXJyZWRSb290RW50aXRpZXMuZmlsdGVyKChlbnRpdHkpID0+ICEhZW50aXR5KTtcbiAgICB9XG4gIH1cblxuICBsZXQgYWxsTm9kZXM6VHJlZU5vZGVbXSA9IFtdXG4gIGxldCBub2RlQ2hpbGRyZW46IGFueSA9IHt9O1xuICBsZXQgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6U2V0PHN0cmluZz4gPSBuZXcgU2V0KClcblxuICByZXR1cm4ge1xuICAgIGFsbE5vZGVzOiBhbGxOb2RlcyxcbiAgICByb290Tm9kZXM6IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+XG4gICAgICBjcmVhdGVUcmVlTm9kZShyb290RW50aXR5LCB1bmRlZmluZWQsIDAsIG51bGwsIG51bGwpXG4gICAgKSxcbiAgICBub2RlQ2hpbGRyZW4sXG4gICAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXNcbiAgfTtcblxuICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShcbiAgICBub2RlOiBFbnRpdHksXG4gICAgcGFyZW50OiBUcmVlTm9kZSB8IHVuZGVmaW5lZCxcbiAgICBkZWJ1Z051bUl0ZXJhdGlvbnM6IG51bWJlcixcbiAgICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6c3RyaW5nfG51bGwsXG4gICAgY2hpbGRSZWxhdGlvblRvUGFyZW50OnN0cmluZ3xudWxsLFxuICApOiBUcmVlTm9kZSB7XG4gICAgaWYgKGRlYnVnTnVtSXRlcmF0aW9ucyA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmFibGUgY3ljbGljIHRyZWUgKGNyZWF0ZVRyZWVOb2RlKVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMuZ2V0KG5vZGUuZ2V0SXJpKCkpIHx8IFtdO1xuXG4gICAgY29uc3QgdHJlZU5vZGU6IFRyZWVOb2RlID0ge1xuICAgICAgYWJzb2x1dGVJZGVudGl0eTogcGFyZW50XG4gICAgICAgID8gcGFyZW50LmFic29sdXRlSWRlbnRpdHkgKyBcIjtcIiArIG5vZGUuZ2V0SXJpKClcbiAgICAgICAgOiBub2RlLmdldElyaSgpLFxuICAgICAgaXJpOiBub2RlLmdldElyaSgpLFxuICAgICAgdGl0bGU6IG5vZGUuZ2V0TmFtZSgpLFxuICAgICAgZXhwYW5kYWJsZTogbm9kZS5oYXNDaGlsZHJlbigpLFxuICAgICAgZW50aXR5OiBub2RlLFxuICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgIG5vZGUuZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCBub2RlLmdldE51bURlc2NlbmRhbnRzKCksXG4gICAgICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQsXG4gICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnRcbiAgICB9O1xuXG4gICAgYWxsTm9kZXMucHVzaCh0cmVlTm9kZSlcblxuICAgIG5vZGVDaGlsZHJlblt0cmVlTm9kZS5hYnNvbHV0ZUlkZW50aXR5XSA9IGNoaWxkTm9kZXMubWFwKChjaGlsZE5vZGUpID0+XG4gICAgICBjcmVhdGVUcmVlTm9kZShjaGlsZE5vZGUuY2hpbGQsIHRyZWVOb2RlLCBkZWJ1Z051bUl0ZXJhdGlvbnMgKyAxLCBjaGlsZE5vZGUucGFyZW50UmVsYXRpb25Ub0NoaWxkLCBjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50KVxuICAgICk7XG5cbiAgICBpZihub2RlLmhhc0NoaWxkcmVuKCkgJiYgY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG5cdGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmFkZCh0cmVlTm9kZS5hYnNvbHV0ZUlkZW50aXR5KVxuICAgIH1cblxuICAgIHJldHVybiB0cmVlTm9kZTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGNyZWF0ZUFjdGlvbixcbiAgY3JlYXRlQXN5bmNUaHVuayxcbiAgY3JlYXRlU2xpY2UsXG4gIFBheWxvYWRBY3Rpb24sXG59IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5pbXBvcnQgeyBnZXQsIGdldFBhZ2luYXRlZCwgUGFnZSB9IGZyb20gXCIuLi8uLi9hcHAvYXBpXCI7XG5pbXBvcnQgeyBtYXBUb0FwaVBhcmFtcywgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gXCIuLi8uLi9tb2RlbC9PbnRvbG9neVwiO1xuaW1wb3J0IGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMgZnJvbSBcIi4vZW50aXRpZXMvY3JlYXRlVHJlZUZyb21FbnRpdGllc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9udG9sb2dpZXNTdGF0ZSB7XG4gIG9udG9sb2d5OiBPbnRvbG9neSB8IHVuZGVmaW5lZDtcbiAgZW50aXR5OiBFbnRpdHkgfCB1bmRlZmluZWQ7XG4gIG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkOiBzdHJpbmdbXTtcbiAgbm9kZUNoaWxkcmVuOiBhbnk7XG4gIHJvb3ROb2RlczogVHJlZU5vZGVbXTtcbiAgb250b2xvZ2llczogT250b2xvZ3lbXTtcbiAgdG90YWxPbnRvbG9naWVzOiBudW1iZXI7XG4gIGVudGl0aWVzOiBFbnRpdHlbXTtcbiAgdG90YWxFbnRpdGllczogbnVtYmVyO1xuICBsb2FkaW5nT250b2xvZ2llczogYm9vbGVhbjtcbiAgbG9hZGluZ0VudGl0aWVzOiBib29sZWFuO1xuICBudW1QZW5kaW5nVHJlZVJlcXVlc3RzOiBudW1iZXI7XG4gIGxvYWRpbmdPbnRvbG9neTogYm9vbGVhbjtcbiAgbG9hZGluZ0VudGl0eTogYm9vbGVhbjtcbiAgY2xhc3NJbnN0YW5jZXM6IFBhZ2U8RW50aXR5PiB8IG51bGw7XG4gIGxvYWRpbmdDbGFzc0luc3RhbmNlczogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6IHN0cmluZ1tdO1xuICBtYW51YWxseUV4cGFuZGVkTm9kZXM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRSb290czogYm9vbGVhbjtcbiAgZGlzcGxheU9ic29sZXRlOiBib29sZWFuO1xuICBkaXNwbGF5U2libGluZ3M6IGJvb2xlYW47XG4gIGRpc3BsYXlDb3VudHM6IGJvb2xlYW47XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBUcmVlTm9kZSB7XG4gIGFic29sdXRlSWRlbnRpdHk6IHN0cmluZzsgLy8gdGhlIElSSXMgb2YgdGhpcyBub2RlIGFuZCBpdHMgYW5jZXN0b3JzIGRlbGltaXRlZCBieSBhIDtcbiAgaXJpOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gIGVudGl0eTogRW50aXR5O1xuICBudW1EZXNjZW5kYW50czogbnVtYmVyO1xuICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6IHN0cmluZyB8IG51bGw7IC8vIGlmIGFwcGxpY2FibGUsIHJlbGF0aW9uIGZyb20gdGhlIHBhcmVudCBub2RlIHRvIHRoaXMgbm9kZSAoZS5nLiBoYXNfcGFydClcbiAgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBzdHJpbmcgfCBudWxsOyAvLyBpZiBhcHBsaWNhYmxlLCByZWxhdGlvbiBmcm9tIHRoaXMgbm9kZSB0byB0aGUgcGFyZW50IG5vZGUgKGUuZy4gcGFydF9vZilcbn1cblxuY29uc3QgaW5pdGlhbFN0YXRlOiBPbnRvbG9naWVzU3RhdGUgPSB7XG4gIG9udG9sb2d5OiB1bmRlZmluZWQsXG4gIGVudGl0eTogdW5kZWZpbmVkLFxuICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZDogW10sXG4gIG5vZGVDaGlsZHJlbjoge30sXG4gIHJvb3ROb2RlczogW10sXG4gIG9udG9sb2dpZXM6IFtdLFxuICB0b3RhbE9udG9sb2dpZXM6IDAsXG4gIGVudGl0aWVzOiBbXSxcbiAgdG90YWxFbnRpdGllczogMCxcbiAgbG9hZGluZ09udG9sb2dpZXM6IGZhbHNlLFxuICBsb2FkaW5nRW50aXRpZXM6IGZhbHNlLFxuICBudW1QZW5kaW5nVHJlZVJlcXVlc3RzOiAwLFxuICBsb2FkaW5nT250b2xvZ3k6IGZhbHNlLFxuICBsb2FkaW5nRW50aXR5OiBmYWxzZSxcbiAgY2xhc3NJbnN0YW5jZXM6IG51bGwsXG4gIGxvYWRpbmdDbGFzc0luc3RhbmNlczogZmFsc2UsXG4gIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOiBbXSxcbiAgbWFudWFsbHlFeHBhbmRlZE5vZGVzOiBbXSxcbiAgcHJlZmVycmVkUm9vdHM6IGZhbHNlLFxuICBkaXNwbGF5T2Jzb2xldGU6IGZhbHNlLFxuICBkaXNwbGF5U2libGluZ3M6IGZhbHNlLFxuICBkaXNwbGF5Q291bnRzOiB0cnVlLFxuICBlcnJvck1lc3NhZ2U6IFwiXCIsXG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRUcmVlQ29udGVudCA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfdHJlZV9yZXNldF9jb250ZW50XCIpO1xuZXhwb3J0IGNvbnN0IHJlc2V0VHJlZVNldHRpbmdzID0gY3JlYXRlQWN0aW9uPHtcbiAgZW50aXR5VHlwZTogc3RyaW5nO1xuICBzZWxlY3RlZEVudGl0eT86IEVudGl0eTtcbn0+KFwib250b2xvZ2llc190cmVlX3Jlc2V0X3NldHRpbmdzXCIpO1xuXG5leHBvcnQgY29uc3QgZW5hYmxlUHJlZmVycmVkUm9vdHMgPSBjcmVhdGVBY3Rpb24oXG4gIFwib250b2xvZ2llc19wcmVmZXJyZWRfZW5hYmxlZFwiXG4pO1xuZXhwb3J0IGNvbnN0IGRpc2FibGVQcmVmZXJyZWRSb290cyA9IGNyZWF0ZUFjdGlvbihcbiAgXCJvbnRvbG9naWVzX3ByZWZlcnJlZF9kaXNhYmxlZFwiXG4pO1xuZXhwb3J0IGNvbnN0IG9wZW5Ob2RlID0gY3JlYXRlQWN0aW9uPFRyZWVOb2RlPihcIm9udG9sb2dpZXNfbm9kZV9vcGVuXCIpO1xuZXhwb3J0IGNvbnN0IGNsb3NlTm9kZSA9IGNyZWF0ZUFjdGlvbjxUcmVlTm9kZT4oXCJvbnRvbG9naWVzX25vZGVfY2xvc2VcIik7XG5cbmV4cG9ydCBjb25zdCBzaG93T2Jzb2xldGUgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3Nob3dfb2Jzb2xldGVcIik7XG5leHBvcnQgY29uc3QgaGlkZU9ic29sZXRlID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19oaWRlX29ic29sZXRlXCIpO1xuXG5leHBvcnQgY29uc3Qgc2hvd1NpYmxpbmdzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X3NpYmxpbmdzXCIpO1xuZXhwb3J0IGNvbnN0IGhpZGVTaWJsaW5ncyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfaGlkZV9zaWJsaW5nc1wiKTtcblxuZXhwb3J0IGNvbnN0IHNob3dDb3VudHMgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3Nob3dfY291bnRzXCIpO1xuZXhwb3J0IGNvbnN0IGhpZGVDb3VudHMgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX2hpZGVfY291bnRzXCIpO1xuXG5leHBvcnQgY29uc3QgZ2V0T250b2xvZ3kgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfb250b2xvZ3lcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBsYW5nLFxuICAgICAgYXBpVXJsLFxuICAgIH06IHsgb250b2xvZ3lJZDogc3RyaW5nOyBsYW5nOiBzdHJpbmc7IGFwaVVybD86IHN0cmluZyB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb250b2xvZ3lQcm9wZXJ0aWVzID0gYXdhaXQgZ2V0PGFueT4ocGF0aCwgeyBsYW5nIH0sIGFwaVVybCk7XG4gICAgICByZXR1cm4gbmV3IE9udG9sb2d5KG9udG9sb2d5UHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEVudGl0eVdpdGhUeXBlID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eV90eXBlXCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5VHlwZSxcbiAgICAgIGVudGl0eUlyaSxcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBlbnRpdHlUeXBlOiBzdHJpbmc7XG4gICAgICBlbnRpdHlJcmk6IHN0cmluZztcbiAgICAgIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xuICAgIH0sXG4gICAgeyByZWplY3RXaXRoVmFsdWUgfVxuICApID0+IHtcbiAgICBjb25zdCBhcGlTZWFyY2hQYXJhbXMgPSBtYXBUb0FwaVBhcmFtcyhzZWFyY2hQYXJhbXMpO1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSlcbiAgICApO1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgbGV0IGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gbnVsbDtcbiAgICAgIGlmIChlbnRpdHlJcmkpIHtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0vJHtkb3VibGVFbmNvZGVkVGVybVVyaX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIGFwaVNlYXJjaFBhcmFtc1xuICAgICAgICApfWA7XG4gICAgICAgIGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gYXdhaXQgZ2V0PGFueT4ocGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAgYXBpU2VhcmNoUGFyYW1zXG4gICAgICAgICl9YDtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpO1xuICAgICAgICBpZiAocmVzdWx0cy5lbGVtZW50cy5sZW5ndGggPT09IDEgJiYgcmVzdWx0cy50b3RhbEVsZW1lbnRzID09PSAxKSB7XG4gICAgICAgICAgZW50aXR5SnNvblByb3BlcnRpZXMgPSByZXN1bHRzLmVsZW1lbnRzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoXG4gICAgICAgICAgICBgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyBSZXRyaWV2ZWQgbm9uZGlzdGluY3QgZW50aXR5OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgICApfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpbmdGcm9tSnNvblByb3BlcnRpZXMoZW50aXR5SnNvblByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRFbnRpdHkgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfZW50aXR5XCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgZW50aXR5SXJpLFxuICAgIH06IHtcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICAgIGVudGl0eUlyaTogc3RyaW5nO1xuICAgIH0sXG4gICAgeyByZWplY3RXaXRoVmFsdWUgfVxuICApID0+IHtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybVVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpXG4gICAgKTtcbiAgICBsZXQgcGF0aCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9lbnRpdGllcy8ke2RvdWJsZUVuY29kZWRUZXJtVXJpfWA7XG4gICAgICBjb25zdCBlbnRpdHlKc29uUHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgpO1xuICAgICAgcmV0dXJuIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGVudGl0eUpzb25Qcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0Q2xhc3NJbnN0YW5jZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfZW50aXR5X2NsYXNzX2luc3RhbmNlc1wiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGNsYXNzSXJpLFxuICAgICAgc2VhcmNoUGFyYW1zLFxuICAgIH06IHtcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICAgIGNsYXNzSXJpOiBzdHJpbmc7XG4gICAgICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgbGV0IHBhdGggPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY2xhc3NJcmkpIHtcbiAgICAgICAgY29uc3QgYXBpU2VhcmNoUGFyYW1zID0gbWFwVG9BcGlQYXJhbXMoc2VhcmNoUGFyYW1zKTtcbiAgICAgICAgY29uc3QgZG91YmxlRW5jb2RlZFRlcm1VcmkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGNsYXNzSXJpKVxuICAgICAgICApO1xuICAgICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vY2xhc3Nlcy8ke2RvdWJsZUVuY29kZWRUZXJtVXJpfS9pbnN0YW5jZXM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIGFwaVNlYXJjaFBhcmFtc1xuICAgICAgICApfWA7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlcyA9IChhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKSkubWFwKChpKSA9PlxuICAgICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGkpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKFxuICAgICAgICAgIGBXYXJuaW5nIGFjY2Vzc2luZzogJHtwYXRofTsgQ2xhc3MgSVJJIG5vdCBwcm92aWRlZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0T250b2xvZ2llcyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19vbnRvbG9naWVzXCIsXG4gIGFzeW5jICh7IHBhZ2UsIHJvd3NQZXJQYWdlLCBzZWFyY2ggfTogYW55LCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgaWYgKHNlYXJjaC5sZW5ndGggPiAxICYmICFzZWFyY2guaW5jbHVkZXMoXCIgXCIpKSBzZWFyY2ggPSBcIipcIiArIHNlYXJjaCArIFwiKlwiO1xuICAgIGNvbnN0IHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXM/cGFnZT0ke3BhZ2V9JnNpemU9JHtyb3dzUGVyUGFnZX0ke1xuICAgICAgc2VhcmNoID8gXCImc2VhcmNoPVwiICsgc2VhcmNoIDogXCJcIlxuICAgIH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpKS5tYXAoKG8pID0+IG5ldyBPbnRvbG9neShvKSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0RW50aXRpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfZW50aXRpZXNcIixcbiAgYXN5bmMgKFxuICAgIHsgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgcGFnZSwgcm93c1BlclBhZ2UsIHNlYXJjaCB9OiBhbnksXG4gICAgeyByZWplY3RXaXRoVmFsdWUgfVxuICApID0+IHtcbiAgICBjb25zdCBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT9wYWdlPSR7cGFnZX0mc2l6ZT0ke3Jvd3NQZXJQYWdlfSR7XG4gICAgICBzZWFyY2ggPyBcIiZzZWFyY2g9XCIgKyBzZWFyY2ggOiBcIlwiXG4gICAgfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCkpLm1hcCgoZSkgPT5cbiAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMoZSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0QW5jZXN0b3JzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2FuY2VzdG9yc1wiLFxuICBhc3luYyAoe1xuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZSxcbiAgICBlbnRpdHlJcmksXG4gICAgbGFuZyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIGFwaVVybCxcbiAgfTogYW55KSA9PiB7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKSk7XG4gICAgdmFyIGFuY2VzdG9yc1BhZ2U6IGFueTtcbiAgICBpZiAoZW50aXR5VHlwZSA9PT0gXCJjbGFzc2VzXCIpIHtcbiAgICAgIGFuY2VzdG9yc1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vY2xhc3Nlcy8ke2RvdWJsZUVuY29kZWRVcml9L2hpZXJhcmNoaWNhbEFuY2VzdG9ycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAgeyBzaXplOiBcIjEwMDBcIiwgbGFuZywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNlc3RvcnNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0vJHtkb3VibGVFbmNvZGVkVXJpfS9hbmNlc3RvcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHsgc2l6ZTogXCIxMDAwXCIsIGxhbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yc1BhZ2UuZWxlbWVudHMubWFwKChvYmo6IGFueSkgPT5cbiAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iailcbiAgICApO1xuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldFJvb3RFbnRpdGllcyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19yb290c1wiLFxuICBhc3luYyAoe1xuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZSxcbiAgICBwcmVmZXJyZWRSb290cyxcbiAgICBsYW5nLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgYXBpVXJsLFxuICB9OiBhbnkpID0+IHtcbiAgICBpZiAoZW50aXR5VHlwZSA9PT0gXCJpbmRpdmlkdWFsc1wiKSB7XG4gICAgICBjb25zdCBbY2xhc3Nlc1dpdGhJbmRpdmlkdWFscywgb3JwaGFuZWRJbmRpdmlkdWFsc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGhhc0luZGl2aWR1YWxzOiBcInRydWVcIixcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH0pfWAsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGFwaVVybFxuICAgICAgICApLFxuICAgICAgICBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9pbmRpdmlkdWFscz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgaGFzRGlyZWN0UGFyZW50OiBcImZhbHNlXCIsXG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9KX1gLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhcGlVcmxcbiAgICAgICAgKSxcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcm9vdFRlcm1zOiBudWxsLFxuICAgICAgICBjbGFzc2VzV2l0aEluZGl2aWR1YWxzOiBjbGFzc2VzV2l0aEluZGl2aWR1YWxzLmVsZW1lbnRzLm1hcCgob2JqKSA9PlxuICAgICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iailcbiAgICAgICAgKSxcbiAgICAgICAgb3JwaGFuZWRJbmRpdmlkdWFsczogb3JwaGFuZWRJbmRpdmlkdWFscy5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZW50aXR5VHlwZSA9PT0gXCJjbGFzc2VzXCIgJiYgcHJlZmVycmVkUm9vdHMpIHtcbiAgICAgIGNvbnN0IHJvb3RzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgaXNQcmVmZXJyZWRSb290OiBcInRydWVcIixcbiAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICB9KX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIHJvb3RUZXJtczogcm9vdHNQYWdlLmVsZW1lbnRzLm1hcCgob2JqKSA9PlxuICAgICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iailcbiAgICAgICAgKSxcbiAgICAgICAgY2xhc3Nlc1dpdGhJbmRpdmlkdWFsczogbnVsbCxcbiAgICAgICAgb3JwaGFuZWRJbmRpdmlkdWFsczogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvb3RzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgaGFzRGlyZWN0UGFyZW50OiBcImZhbHNlXCIsXG4gICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgfSl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICByb290VGVybXM6IHJvb3RzUGFnZS5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXROb2RlQ2hpbGRyZW4gPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfbm9kZV9jaGlsZHJlblwiLFxuICBhc3luYyAoe1xuICAgIG9udG9sb2d5SWQsXG4gICAgZW50aXR5VHlwZVBsdXJhbCxcbiAgICBlbnRpdHlJcmksXG4gICAgYWJzb2x1dGVJZGVudGl0eSxcbiAgICBsYW5nLFxuICAgIGFwaVVybCxcbiAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgfTogYW55KSA9PiB7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKSk7XG4gICAgdmFyIGNoaWxkcmVuUGFnZTogYW55O1xuICAgIGlmIChlbnRpdHlUeXBlUGx1cmFsID09PSBcImNsYXNzZXNcIikge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9oaWVyYXJjaGljYWxDaGlsZHJlbj8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5VHlwZVBsdXJhbCA9PT0gXCJpbmRpdmlkdWFsc1wiKSB7XG4gICAgICBjaGlsZHJlblBhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vY2xhc3Nlcy8ke2RvdWJsZUVuY29kZWRVcml9L2luc3RhbmNlcz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlblBhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlUGx1cmFsfS8ke2RvdWJsZUVuY29kZWRVcml9L2NoaWxkcmVuPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhYnNvbHV0ZUlkZW50aXR5LFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuUGFnZS5lbGVtZW50c1xuICAgICAgICAubWFwKChvYmo6IGFueSkgPT4gdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKSlcbiAgICAgICAgLm1hcCgodGVybTogRW50aXR5KSA9PiB7XG4gICAgICAgICAgbGV0IHBhcmVudGhvb2RNZXRhZGF0YSA9XG4gICAgICAgICAgICB0ZXJtLmdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKGVudGl0eUlyaSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogdGVybS5nZXRJcmkoKSxcbiAgICAgICAgICAgIGFic29sdXRlSWRlbnRpdHk6IGFic29sdXRlSWRlbnRpdHkgKyBcIjtcIiArIHRlcm0uZ2V0SXJpKCksXG4gICAgICAgICAgICB0aXRsZTogdGVybS5nZXROYW1lKCksXG4gICAgICAgICAgICBleHBhbmRhYmxlOiB0ZXJtLmhhc0NoaWxkcmVuKCksXG4gICAgICAgICAgICBlbnRpdHk6IHRlcm0sXG4gICAgICAgICAgICBudW1EZXNjZW5kYW50czpcbiAgICAgICAgICAgICAgdGVybS5nZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpIHx8IHRlcm0uZ2V0TnVtRGVzY2VuZGFudHMoKSxcbiAgICAgICAgICAgIHBhcmVudFJlbGF0aW9uVG9DaGlsZDpcbiAgICAgICAgICAgICAgKHBhcmVudGhvb2RNZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudGhvb2RNZXRhZGF0YVtcInBhcmVudFJlbGF0aW9uVG9DaGlsZFwiXT8uWzBdKSB8fFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50OlxuICAgICAgICAgICAgICAocGFyZW50aG9vZE1ldGFkYXRhICYmXG4gICAgICAgICAgICAgICAgcGFyZW50aG9vZE1ldGFkYXRhW1wiY2hpbGRSZWxhdGlvblRvUGFyZW50XCJdPy5bMF0pIHx8XG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfVxuKTtcblxuY29uc3Qgb250b2xvZ2llc1NsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcIm9udG9sb2dpZXNcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge30sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0T250b2xvZ3kuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxPbnRvbG9neT4pID0+IHtcbiAgICAgICAgc3RhdGUub250b2xvZ3kgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2d5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0T250b2xvZ3kucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9neSA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2d5LnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUub250b2xvZ3kgPSBpbml0aWFsU3RhdGUub250b2xvZ3k7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9neSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5V2l0aFR5cGUuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHk+KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0RW50aXR5V2l0aFR5cGUucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdHkgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHlXaXRoVHlwZS5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdHkgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZW50aXR5ID0gaW5pdGlhbFN0YXRlLmVudGl0eTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eS5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPEVudGl0eT4pID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXR5ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRFbnRpdHkucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdHkgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHkucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGluaXRpYWxTdGF0ZS5lbnRpdHk7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRDbGFzc0luc3RhbmNlcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuY2xhc3NJbnN0YW5jZXMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0Q2xhc3NJbnN0YW5jZXMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldENsYXNzSW5zdGFuY2VzLnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUubG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmNsYXNzSW5zdGFuY2VzID0gaW5pdGlhbFN0YXRlLmNsYXNzSW5zdGFuY2VzO1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEFuY2VzdG9ycy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgKytzdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEFuY2VzdG9ycy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPEVudGl0eVtdPikgPT4ge1xuICAgICAgICBsZXQgeyByb290Tm9kZXMsIG5vZGVDaGlsZHJlbiwgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgfSA9XG4gICAgICAgICAgY3JlYXRlVHJlZUZyb21FbnRpdGllcyhcbiAgICAgICAgICAgIFtzdGF0ZS5lbnRpdHkhLCAuLi5hY3Rpb24ucGF5bG9hZF0sXG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgIHN0YXRlLm9udG9sb2d5IVxuICAgICAgICAgICk7XG4gICAgICAgIHN0YXRlLnJvb3ROb2RlcyA9IHJvb3ROb2RlcztcbiAgICAgICAgc3RhdGUubm9kZUNoaWxkcmVuID0gbm9kZUNoaWxkcmVuO1xuICAgICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAuLi5zdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyxcbiAgICAgICAgICAgIC4uLkFycmF5LmZyb20oYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMpLFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRBbmNlc3RvcnMucmVqZWN0ZWQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE5vZGVDaGlsZHJlbi5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgKytzdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE5vZGVDaGlsZHJlbi5mdWxmaWxsZWQsXG4gICAgICAoXG4gICAgICAgIHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsXG4gICAgICAgIGFjdGlvbjogUGF5bG9hZEFjdGlvbjx7XG4gICAgICAgICAgYWJzb2x1dGVJZGVudGl0eTogc3RyaW5nO1xuICAgICAgICAgIGNoaWxkcmVuOiBUcmVlTm9kZVtdO1xuICAgICAgICB9PlxuICAgICAgKSA9PiB7XG4gICAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IHtcbiAgICAgICAgICAuLi5zdGF0ZS5ub2RlQ2hpbGRyZW4sXG4gICAgICAgICAgW2FjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHldOiBhY3Rpb24ucGF5bG9hZC5jaGlsZHJlbixcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQucHVzaChhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5KTtcbiAgICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE5vZGVDaGlsZHJlbi5yZWplY3RlZCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0Um9vdEVudGl0aWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICArK3N0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Um9vdEVudGl0aWVzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248YW55PikgPT4ge1xuICAgICAgICBsZXQgeyByb290VGVybXMsIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHMsIG9ycGhhbmVkSW5kaXZpZHVhbHMgfSA9XG4gICAgICAgICAgYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwicm9vdFRlcm1zXCIpO1xuICAgICAgICAvLyBjb25zb2xlLmRpcihyb290VGVybXMpO1xuICAgICAgICBsZXQgeyByb290Tm9kZXMsIG5vZGVDaGlsZHJlbiwgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgfSA9XG4gICAgICAgICAgY3JlYXRlVHJlZUZyb21FbnRpdGllcyhcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgLi4uKHJvb3RUZXJtcyB8fCBbXSksXG4gICAgICAgICAgICAgIC4uLihjbGFzc2VzV2l0aEluZGl2aWR1YWxzIHx8IFtdKSxcbiAgICAgICAgICAgICAgLi4uKG9ycGhhbmVkSW5kaXZpZHVhbHMgfHwgW10pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzLFxuICAgICAgICAgICAgc3RhdGUub250b2xvZ3khXG4gICAgICAgICAgKTtcblxuICAgICAgICBzdGF0ZS5yb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IG5vZGVDaGlsZHJlbjtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMsXG4gICAgICAgICAgICAuLi5BcnJheS5mcm9tKGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0Um9vdEVudGl0aWVzLnJlamVjdGVkLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2dpZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPE9udG9sb2d5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUub250b2xvZ2llcyA9IGFjdGlvbi5wYXlsb2FkLmVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS50b3RhbE9udG9sb2dpZXMgPSBhY3Rpb24ucGF5bG9hZC50b3RhbEVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ2llcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE9udG9sb2dpZXMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9naWVzID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0T250b2xvZ2llcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2dpZXMgPSBpbml0aWFsU3RhdGUub250b2xvZ2llcztcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2dpZXMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0aWVzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxFbnRpdHk+PikgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IGFjdGlvbi5wYXlsb2FkLmVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS50b3RhbEVudGl0aWVzID0gYWN0aW9uLnBheWxvYWQudG90YWxFbGVtZW50cztcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0aWVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0RW50aXRpZXMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdGllcyA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0aWVzLnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSBpbml0aWFsU3RhdGUuZW50aXRpZXM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdGllcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHJlc2V0VHJlZUNvbnRlbnQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZCA9IFtdO1xuICAgICAgc3RhdGUubm9kZUNoaWxkcmVuID0ge307XG4gICAgICBzdGF0ZS5yb290Tm9kZXMgPSBbXTtcbiAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gW107XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgcmVzZXRUcmVlU2V0dGluZ3MsXG4gICAgICAoXG4gICAgICAgIHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsXG4gICAgICAgIGFjdGlvbjogUGF5bG9hZEFjdGlvbjx7IGVudGl0eVR5cGU6IHN0cmluZzsgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHkgfT5cbiAgICAgICkgPT4ge1xuICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9XG4gICAgICAgICAgYWN0aW9uLnBheWxvYWQuZW50aXR5VHlwZSA9PT0gXCJjbGFzc2VzXCIgJiZcbiAgICAgICAgICBzdGF0ZS5vbnRvbG9neSEuZ2V0UHJlZmVycmVkUm9vdHMoKS5sZW5ndGggPiAwO1xuXG4gICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZC5zZWxlY3RlZEVudGl0eSkge1xuICAgICAgICAgIGxldCBzZWxlY3RlZElzRGVzY2VuZGFudE9mUHJlZmVycmVkUm9vdHMgPSBmYWxzZTtcbiAgICAgICAgICBmb3IgKGxldCByb290IG9mIHN0YXRlLm9udG9sb2d5IS5nZXRQcmVmZXJyZWRSb290cygpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLnNlbGVjdGVkRW50aXR5XG4gICAgICAgICAgICAgICAgLmdldEhpZXJhcmNoaWNhbEFuY2VzdG9ySXJpcygpXG4gICAgICAgICAgICAgICAgLmluZGV4T2Yocm9vdCkgIT09IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzKSB7XG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5kaXNwbGF5T2Jzb2xldGUgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZGlzcGxheVNpYmxpbmdzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmRpc3BsYXlDb3VudHMgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5tYW51YWxseUV4cGFuZGVkTm9kZXMgPSBbXTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShlbmFibGVQcmVmZXJyZWRSb290cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoZGlzYWJsZVByZWZlcnJlZFJvb3RzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2Uoc2hvd09ic29sZXRlLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheU9ic29sZXRlID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoaGlkZU9ic29sZXRlLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheU9ic29sZXRlID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHNob3dTaWJsaW5ncywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlTaWJsaW5ncyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGhpZGVTaWJsaW5ncywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlTaWJsaW5ncyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShzaG93Q291bnRzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheUNvdW50cyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGhpZGVDb3VudHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5Q291bnRzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgb3Blbk5vZGUsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFRyZWVOb2RlPikgPT4ge1xuICAgICAgICBzdGF0ZS5tYW51YWxseUV4cGFuZGVkTm9kZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzLFxuICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgY2xvc2VOb2RlLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxUcmVlTm9kZT4pID0+IHtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgICAgICAobm9kZSkgPT4gbm9kZSAhPT0gYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eVxuICAgICAgICApO1xuICAgICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9XG4gICAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHlcbiAgICAgICAgICApO1xuICAgICAgICBkZWxldGUgc3RhdGUubm9kZUNoaWxkcmVuW2FjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHldO1xuICAgICAgICBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZCA9IHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLmZpbHRlcihcbiAgICAgICAgICAoYWJzSWQpID0+IGFic0lkICE9PSBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBvbnRvbG9naWVzU2xpY2UucmVkdWNlcjtcbiIsICJpbXBvcnQgeyBjcmVhdGVBc3luY1RodW5rLCBjcmVhdGVTbGljZSwgUGF5bG9hZEFjdGlvbiB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5pbXBvcnQgeyBnZXRQYWdpbmF0ZWQsIFBhZ2UgfSBmcm9tIFwiLi4vLi4vYXBwL2FwaVwiO1xuaW1wb3J0IHsgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uL21vZGVsL0VudGl0eVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFN0YXRlIHtcbiAgc2VhcmNoUmVzdWx0czogRW50aXR5W107XG4gIGxvYWRpbmdTZWFyY2hSZXN1bHRzOiBib29sZWFuO1xuICB0b3RhbFNlYXJjaFJlc3VsdHM6IG51bWJlcjtcbiAgZmFjZXRzOiBPYmplY3Q7XG59XG5jb25zdCBpbml0aWFsU3RhdGU6IFNlYXJjaFN0YXRlID0ge1xuICBzZWFyY2hSZXN1bHRzOiBbXSxcbiAgbG9hZGluZ1NlYXJjaFJlc3VsdHM6IGZhbHNlLFxuICB0b3RhbFNlYXJjaFJlc3VsdHM6IDAsXG4gIGZhY2V0czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hSZXN1bHRzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJzZWFyY2hfcmVzdWx0c1wiLFxuICBhc3luYyAoXG4gICAgeyBwYWdlLCByb3dzUGVyUGFnZSwgc2VhcmNoLCBvbnRvbG9neUlkLCB0eXBlLCBzZWFyY2hQYXJhbXMgfTogYW55LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBxdWVyeSA9IHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2gsXG4gICAgICAgIHNpemU6IHJvd3NQZXJQYWdlLFxuICAgICAgICBwYWdlLFxuICAgICAgICBmYWNldEZpZWxkczogXCJvbnRvbG9neUlkIHR5cGVcIixcbiAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZC5sZW5ndGggPiAwID8gb250b2xvZ3lJZFswXSA6IG51bGwsXG4gICAgICAgIHR5cGU6IHR5cGUubGVuZ3RoID4gMCA/IHR5cGVbMF0gOiBudWxsLFxuICAgICAgICAvLyBsYW5nOiBcImFsbFwiLFxuXG4gICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhzZWFyY2hQYXJhbXMgYXMgVVJMU2VhcmNoUGFyYW1zKSxcbiAgICAgIH07XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtIGluIHF1ZXJ5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIHF1ZXJ5W3BhcmFtXSA9PT0gbnVsbCB8fFxuICAgICAgICAgIHF1ZXJ5W3BhcmFtXSA9PT0gXCJcIlxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnlbcGFyYW1dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgICAgLy8gcmVtb3ZlIHJlZHVuZGFudCBwYXJhbWV0ZXJzXG4gICAgICBpZiAoc2VhcmNoUGFyYW1zLmdldChcIm9udG9sb2d5XCIpKSB7XG4gICAgICAgIHBhcnNlZFF1ZXJ5LnNldChcIm9udG9sb2d5SWRcIiwgc2VhcmNoUGFyYW1zLmdldChcIm9udG9sb2d5XCIpKTtcbiAgICAgICAgcGFyc2VkUXVlcnkuZGVsZXRlKFwib250b2xvZ3lcIik7XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoUGFyYW1zLmdldChcInFcIikpIHBhcnNlZFF1ZXJ5LmRlbGV0ZShcInFcIik7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSAoXG4gICAgICAgIGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KGBhcGkvdjIvZW50aXRpZXM/JHtwYXJzZWRRdWVyeX1gKVxuICAgICAgKS5tYXAoKGUpID0+IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGUpKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBzZWFyY2hTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJzZWFyY2hcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge30sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0U2VhcmNoUmVzdWx0cy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IFNlYXJjaFN0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxFbnRpdHk+PikgPT4ge1xuICAgICAgICBzdGF0ZS5zZWFyY2hSZXN1bHRzID0gYWN0aW9uLnBheWxvYWQuZWxlbWVudHM7XG4gICAgICAgIHN0YXRlLnRvdGFsU2VhcmNoUmVzdWx0cyA9IGFjdGlvbi5wYXlsb2FkLnRvdGFsRWxlbWVudHM7XG4gICAgICAgIHN0YXRlLmZhY2V0cyA9IGFjdGlvbi5wYXlsb2FkLmZhY2V0RmllbGRzVG9Db3VudHM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0U2VhcmNoUmVzdWx0cy5wZW5kaW5nLCAoc3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFNlYXJjaFJlc3VsdHMucmVqZWN0ZWQsIChzdGF0ZTogU2VhcmNoU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICBzdGF0ZS5zZWFyY2hSZXN1bHRzID0gaW5pdGlhbFN0YXRlLnNlYXJjaFJlc3VsdHM7XG4gICAgICBzdGF0ZS5mYWNldHMgPSBpbml0aWFsU3RhdGUuZmFjZXRzO1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNlYXJjaFNsaWNlLnJlZHVjZXI7XG4iLCAiaW1wb3J0IHsgY29uZmlndXJlU3RvcmUgfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IGhvbWVSZWR1Y2VyIGZyb20gXCIuLi9wYWdlcy9ob21lL2hvbWVTbGljZVwiO1xuaW1wb3J0IG9udG9sb2dpZXNSZWR1Y2VyIGZyb20gXCIuLi9wYWdlcy9vbnRvbG9naWVzL29udG9sb2dpZXNTbGljZVwiO1xuaW1wb3J0IHNlYXJjaFJlZHVjZXIgZnJvbSAnLi4vcGFnZXMvc2VhcmNoL3NlYXJjaFNsaWNlJztcblxuZXhwb3J0IGNvbnN0IHN0b3JlID0gY29uZmlndXJlU3RvcmUoe1xuICByZWR1Y2VyOiB7XG4gICAgaG9tZTogaG9tZVJlZHVjZXIsXG4gICAgc2VhcmNoOiBzZWFyY2hSZWR1Y2VyLFxuICAgIG9udG9sb2dpZXM6IG9udG9sb2dpZXNSZWR1Y2VyLFxuICB9LFxuICBtaWRkbGV3YXJlOiAoZ2V0RGVmYXVsdE1pZGRsZXdhcmUpID0+XG4gICAgZ2V0RGVmYXVsdE1pZGRsZXdhcmUoe1xuICAgICAgc2VyaWFsaXphYmxlQ2hlY2s6IGZhbHNlLFxuICAgIH0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJvb3RTdGF0ZSA9IFJldHVyblR5cGU8dHlwZW9mIHN0b3JlLmdldFN0YXRlPjtcbmV4cG9ydCB0eXBlIEFwcERpc3BhdGNoID0gdHlwZW9mIHN0b3JlLmRpc3BhdGNoO1xuIiwgImltcG9ydCB7IFRoZW1lUHJvdmlkZXIgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7XG4gIENoZWNrYm94LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xMYWJlbCxcbiAgUmFkaW8sXG4gIFJhZGlvR3JvdXAsXG59IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdXJsSm9pbiBmcm9tIFwidXJsLWpvaW5cIjtcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gXCIuLi8uLi8uLi9hcHAvaG9va3NcIjtcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC9tdWlcIjtcbmltcG9ydCB7IHJhbmRvbVN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IE5vZGUgZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvTm9kZVwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSBcIi4uLy4uLy4uL21vZGVsL09udG9sb2d5XCI7XG5pbXBvcnQge1xuICBUcmVlTm9kZSxcbiAgY2xvc2VOb2RlLFxuICBkaXNhYmxlUHJlZmVycmVkUm9vdHMsXG4gIGVuYWJsZVByZWZlcnJlZFJvb3RzLFxuICBnZXRBbmNlc3RvcnMsXG4gIGdldE5vZGVDaGlsZHJlbixcbiAgZ2V0Um9vdEVudGl0aWVzLFxuICBoaWRlQ291bnRzLFxuICBoaWRlT2Jzb2xldGUsXG4gIGhpZGVTaWJsaW5ncyxcbiAgb3Blbk5vZGUsXG4gIHJlc2V0VHJlZUNvbnRlbnQsXG4gIHJlc2V0VHJlZVNldHRpbmdzLFxuICBzaG93Q291bnRzLFxuICBzaG93T2Jzb2xldGUsXG4gIHNob3dTaWJsaW5ncyxcbn0gZnJvbSBcIi4uL29udG9sb2dpZXNTbGljZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFbnRpdHlUcmVlKHtcbiAgb250b2xvZ3ksXG4gIGVudGl0eVR5cGUsXG4gIHNlbGVjdGVkRW50aXR5LFxuICBsYW5nLFxuICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gIG9uTmF2aWdhdGVUb09udG9sb2d5LFxuICBhcGlVcmwsXG59OiB7XG4gIG9udG9sb2d5OiBPbnRvbG9neTtcbiAgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHk7XG4gIGVudGl0eVR5cGU6IFwiZW50aXRpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCI7XG4gIGxhbmc6IHN0cmluZztcbiAgb25OYXZpZ2F0ZVRvRW50aXR5OiAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xuICBhcGlVcmw/OiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcbiAgY29uc3Qgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWRcbiAgKTtcbiAgY29uc3Qgbm9kZUNoaWxkcmVuID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm5vZGVDaGlsZHJlbik7XG4gIGNvbnN0IHJvb3ROb2RlcyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5yb290Tm9kZXMpO1xuICBjb25zdCBudW1QZW5kaW5nVHJlZVJlcXVlc3RzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm51bVBlbmRpbmdUcmVlUmVxdWVzdHNcbiAgKTtcbiAgY29uc3QgcHJlZmVycmVkUm9vdHMgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMucHJlZmVycmVkUm9vdHNcbiAgKTtcbiAgY29uc3QgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXNcbiAgKTtcbiAgY29uc3QgbWFudWFsbHlFeHBhbmRlZE5vZGVzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm1hbnVhbGx5RXhwYW5kZWROb2Rlc1xuICApO1xuXG4gIGNvbnN0IHNob3dPYnNvbGV0ZUVuYWJsZWQgPSBzZWxlY3RlZEVudGl0eVxuICAgID8gc2VsZWN0ZWRFbnRpdHkuaXNEZXByZWNhdGVkKClcbiAgICA6IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5kaXNwbGF5T2Jzb2xldGUpO1xuICBjb25zdCBzaG93U2libGluZ3NFbmFibGVkID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmRpc3BsYXlTaWJsaW5nc1xuICApO1xuICBjb25zdCBzaG93Q291bnRzRW5hYmxlZCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5kaXNwbGF5Q291bnRzXG4gICk7XG5cbiAgY29uc3QgdG9nZ2xlTm9kZSA9IHVzZUNhbGxiYWNrKFxuICAgIChub2RlOiBhbnkpID0+IHtcbiAgICAgIGxldCBpc0V4cGFuZGVkID1cbiAgICAgICAgbWFudWFsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2Yobm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT0gLTEgfHxcbiAgICAgICAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihub2RlLmFic29sdXRlSWRlbnRpdHkpICE9PSAtMTtcblxuICAgICAgaWYgKGlzRXhwYW5kZWQpIHtcbiAgICAgICAgZGlzcGF0Y2goY2xvc2VOb2RlKG5vZGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKG9wZW5Ob2RlKG5vZGUpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkobWFudWFsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICBdXG4gICk7XG5cbiAgLy8gSWYgdGhlIG9udG9sb2d5LCBlbnRpdHkgdHlwZSwgc2VsZWN0ZWQgZW50aXR5IElSSSwgb3IgbGFuZyBjaGFuZ2UsIHJlc2V0IHRoZSB0cmVlIHNldHRpbmdzIChpbmNsdWRpbmcgc2hvd29ic29sZXRlL3ByZWZlcnJlZCByb290cylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChyZXNldFRyZWVTZXR0aW5ncyh7IGVudGl0eVR5cGUsIHNlbGVjdGVkRW50aXR5IH0pKTtcbiAgfSwgW1xuICAgIGRpc3BhdGNoLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHNlbGVjdGVkRW50aXR5Py5nZXRJcmkoKSxcbiAgXSk7XG5cbiAgLy8gSWYgdGhlIG9udG9sb2d5LCBlbnRpdHkgdHlwZSwgc2VsZWN0ZWQgZW50aXR5LCBsYW5nIE9SIHRoZSBzaG93T2Jzb2xldGVFbmFibGVkL3ByZWZlcnJlZFJvb3RzIGNoYW5nZSwgcmVzZXQgdGhlIHRyZWUgY29udGVudCBidXQgbm90IHRoZSBzZXR0aW5nc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKHJlc2V0VHJlZUNvbnRlbnQoKSk7XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgZW50aXR5VHlwZSxcbiAgICBKU09OLnN0cmluZ2lmeShzZWxlY3RlZEVudGl0eSksXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBwcmVmZXJyZWRSb290cyxcbiAgICBsYW5nLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEVudGl0eSkge1xuICAgICAgY29uc3QgZW50aXR5SXJpID0gc2VsZWN0ZWRFbnRpdHkuZ2V0SXJpKCk7XG4gICAgICBsZXQgcHJvbWlzZSA9IGRpc3BhdGNoKFxuICAgICAgICBnZXRBbmNlc3RvcnMoe1xuICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICBlbnRpdHlUeXBlOiBzZWxlY3RlZEVudGl0eS5nZXRUeXBlUGx1cmFsKCksXG4gICAgICAgICAgZW50aXR5SXJpLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICBzaG93U2libGluZ3NFbmFibGVkLFxuICAgICAgICAgIGFwaVVybCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gKCkgPT4gcHJvbWlzZS5hYm9ydCgpOyAvLyBjb21wb25lbnQgd2FzIHVubW91bnRlZFxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcHJvbWlzZSA9IGRpc3BhdGNoKFxuICAgICAgICBnZXRSb290RW50aXRpZXMoe1xuICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgIHByZWZlcnJlZFJvb3RzLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBlbnRpdHlUeXBlLFxuICAgIEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkRW50aXR5KSxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBub2Rlc01pc3NpbmdDaGlsZHJlbjogc3RyaW5nW10gPSBtYW51YWxseUV4cGFuZGVkTm9kZXMuZmlsdGVyKFxuICAgICAgKGFic29sdXRlSWRlbnRpdHkpID0+XG4gICAgICAgIG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLmluZGV4T2YoYWJzb2x1dGVJZGVudGl0eSkgPT09IC0xXG4gICAgKTtcblxuICAgIGlmIChzaG93U2libGluZ3NFbmFibGVkKSB7XG4gICAgICBub2Rlc01pc3NpbmdDaGlsZHJlbiA9IFtcbiAgICAgICAgLi4ubm9kZXNNaXNzaW5nQ2hpbGRyZW4sXG4gICAgICAgIC4uLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgICAgICAoYWJzb2x1dGVJZGVudGl0eSkgPT5cbiAgICAgICAgICAgIG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLmluZGV4T2YoYWJzb2x1dGVJZGVudGl0eSkgPT09IC0xXG4gICAgICAgICksXG4gICAgICBdO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIFwiISEhISBHZXR0aW5nIG1pc3Npbmcgbm9kZSBjaGlsZHJlbjogXCIgK1xuICAgIC8vICAgICBKU09OLnN0cmluZ2lmeShub2Rlc01pc3NpbmdDaGlsZHJlbilcbiAgICAvLyApO1xuXG4gICAgbGV0IHByb21pc2VzOiBhbnkgPSBbXTtcbiAgICBmb3IgKGxldCBhYnNJZCBvZiBub2Rlc01pc3NpbmdDaGlsZHJlbikge1xuICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgZ2V0Tm9kZUNoaWxkcmVuKHtcbiAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgIGVudGl0eVR5cGVQbHVyYWw6IHNlbGVjdGVkRW50aXR5Py5nZXRUeXBlUGx1cmFsKCkgfHwgZW50aXR5VHlwZSwgLy8gVE9ETzogc2hvdWxkIGFjdHVhbGx5IGJlIHR5cGUgb2YgY3VycmVudCBlbnRpdHkgd2l0aCBpcmkgYWJzSWQsIG5vdCB0eXBlIG9mIHNlbGVjdGVkRW50aXR5XG4gICAgICAgICAgICBlbnRpdHlJcmk6IGFic0lkLnNwbGl0KFwiO1wiKS5wb3AoKSxcbiAgICAgICAgICAgIGFic29sdXRlSWRlbnRpdHk6IGFic0lkLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgICBhcGlVcmwsXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9yIChsZXQgcHJvbWlzZSBvZiBwcm9taXNlcykgcHJvbWlzZS5hYm9ydCgpOyAvLyBjb21wb25lbnQgd2FzIHVubW91bnRlZFxuICAgIH07XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBsYW5nLFxuICAgIEpTT04uc3RyaW5naWZ5KG1hbnVhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgSlNPTi5zdHJpbmdpZnkoYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMpLFxuICAgIEpTT04uc3RyaW5naWZ5KG5vZGVDaGlsZHJlbiksXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIGVudGl0eVR5cGUsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBzaG93U2libGluZ3NFbmFibGVkLFxuICBdKTtcblxuICBsZXQgdG9nZ2xlU2hvd09ic29sZXRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93T2Jzb2xldGVFbmFibGVkKSBkaXNwYXRjaChoaWRlT2Jzb2xldGUoKSk7XG4gICAgZWxzZSBkaXNwYXRjaChzaG93T2Jzb2xldGUoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd09ic29sZXRlRW5hYmxlZF0pO1xuXG4gIGxldCB0b2dnbGVTaG93U2libGluZ3MgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3dTaWJsaW5nc0VuYWJsZWQpIGRpc3BhdGNoKGhpZGVTaWJsaW5ncygpKTtcbiAgICBlbHNlIGRpc3BhdGNoKHNob3dTaWJsaW5ncygpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzaG93U2libGluZ3NFbmFibGVkXSk7XG5cbiAgbGV0IHRvZ2dsZVNob3dDb3VudHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3dDb3VudHNFbmFibGVkKSBkaXNwYXRjaChoaWRlQ291bnRzKCkpO1xuICAgIGVsc2UgZGlzcGF0Y2goc2hvd0NvdW50cygpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzaG93Q291bnRzRW5hYmxlZF0pO1xuXG4gIGZ1bmN0aW9uIHJlbmRlck5vZGVDaGlsZHJlbihcbiAgICBjaGlsZHJlbjogVHJlZU5vZGVbXSxcbiAgICBkZWJ1Z051bUl0ZXJhdGlvbnM6IG51bWJlclxuICApIHtcbiAgICBpZiAoZGVidWdOdW1JdGVyYXRpb25zID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9iYWJsZSBjeWNsaWMgdHJlZSAocmVuZGVyTm9kZUNoaWxkcmVuKVwiKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW5Db3B5ID0gWy4uLmNoaWxkcmVuXTtcbiAgICBjaGlsZHJlbkNvcHkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdGl0bGVBID0gYT8udGl0bGUgPyBhLnRpdGxlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA6IFwiXCI7XG4gICAgICBjb25zdCB0aXRsZUIgPSBiPy50aXRsZSA/IGIudGl0bGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpIDogXCJcIjtcbiAgICAgIHJldHVybiB0aXRsZUEgPT09IHRpdGxlQiA/IDAgOiB0aXRsZUEgPiB0aXRsZUIgPyAxIDogLTE7XG4gICAgfSk7XG4gICAgY29uc3QgY2hpbGRyZW5Tb3J0ZWQgPSBjaGlsZHJlbkNvcHkuZmlsdGVyKFxuICAgICAgKGNoaWxkLCBpLCBhcnIpID0+XG4gICAgICAgICFpIHx8IGNoaWxkLmFic29sdXRlSWRlbnRpdHkgIT09IGFycltpIC0gMV0uYWJzb2x1dGVJZGVudGl0eVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDx1bFxuICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICBjbGFzc05hbWU9XCJqc3RyZWUtY29udGFpbmVyLXVsIGpzdHJlZS1jaGlsZHJlbiBqc3RyZWUtbm8taWNvbnNcIlxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW5Tb3J0ZWQubWFwKChjaGlsZE5vZGU6IFRyZWVOb2RlLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNFeHBhbmRlZCA9XG4gICAgICAgICAgICBtYW51YWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihjaGlsZE5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09IC0xIHx8XG4gICAgICAgICAgICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKGNoaWxkTm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT1cbiAgICAgICAgICAgICAgLTE7XG4gICAgICAgICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gY2hpbGRyZW5Tb3J0ZWQhLmxlbmd0aCAtIDE7XG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID1cbiAgICAgICAgICAgIChzZWxlY3RlZEVudGl0eSAmJiBjaGlsZE5vZGUuaXJpID09PSBzZWxlY3RlZEVudGl0eS5nZXRJcmkoKSkgfHxcbiAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Tm9kZVxuICAgICAgICAgICAgICBleHBhbmRhYmxlPXtjaGlsZE5vZGUuZXhwYW5kYWJsZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2lzRXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvZ2dsZU5vZGUoY2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2NoaWxkTm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPT09XG4gICAgICAgICAgICAgICAgXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQkZPXzAwMDAwNTBcIiAmJiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMVwiXG4gICAgICAgICAgICAgICAgICBzcmM9e3VybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiL3BhcnQuc3ZnXCIpfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBcIjFlbVwiLCBkaXNwbGF5OiBcImlubGluZVwiIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2NoaWxkTm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQgPT09XG4gICAgICAgICAgICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiICYmIChcbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtci0xXCJcbiAgICAgICAgICAgICAgICAgIHNyYz17dXJsSm9pbihwcm9jZXNzLmVudi5QVUJMSUNfVVJMISwgXCIvaW5zdGFuY2Uuc3ZnXCIpfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBcIjFlbVwiLCBkaXNwbGF5OiBcImlubGluZVwiIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPFRyZWVMaW5rXG4gICAgICAgICAgICAgICAgb250b2xvZ3k9e29udG9sb2d5fVxuICAgICAgICAgICAgICAgIGVudGl0eT17Y2hpbGROb2RlLmVudGl0eX1cbiAgICAgICAgICAgICAgICB0aXRsZT17Y2hpbGROb2RlLnRpdGxlfVxuICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtvbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7IXNob3dPYnNvbGV0ZUVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBzaG93Q291bnRzRW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5udW1EZXNjZW5kYW50cyA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IFwiZ3JheVwiIH19PlxuICAgICAgICAgICAgICAgICAgICB7XCIgKFwiICsgY2hpbGROb2RlLm51bURlc2NlbmRhbnRzLnRvTG9jYWxlU3RyaW5nKCkgKyBcIilcIn1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aXNFeHBhbmRlZCAmJlxuICAgICAgICAgICAgICAgIHJlbmRlck5vZGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgIG5vZGVDaGlsZHJlbltjaGlsZE5vZGUuYWJzb2x1dGVJZGVudGl0eV0gfHwgW10sXG4gICAgICAgICAgICAgICAgICBkZWJ1Z051bUl0ZXJhdGlvbnMgKyAxXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvTm9kZT5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wtcmV2ZXJzZSBsZzpncmlkIGxnOmdyaWQtY29scy0zIGxnOmdhcC00XCI+XG4gICAgICAgIHtyb290Tm9kZXMgPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZzpjb2wtc3Bhbi0yIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTMgcGItMyBqc3RyZWUganN0cmVlLTEganN0cmVlLXByb3RvbiBvdmVyZmxvdy14LWF1dG9cIlxuICAgICAgICAgICAgICByb2xlPVwidHJlZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtyZW5kZXJOb2RlQ2hpbGRyZW4ocm9vdE5vZGVzLCAwKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge251bVBlbmRpbmdUcmVlUmVxdWVzdHMgPiAwID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHNwaW5uZXItZGVmYXVsdCB3LTcgaC03IC10b3AtMSAtbGVmdC00IHotYXV0b1wiIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGc6Y29sLXNwYW4tMSBmbGV4IGZsZXgtY29sIGJnLXdoaXRlIHB4LTIgbWItMiByb3VuZGVkLWxnXCI+XG4gICAgICAgICAge2VudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmXG4gICAgICAgICAgICBvbnRvbG9neS5nZXRQcmVmZXJyZWRSb290cygpLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2w+XG4gICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmFkaW8tYnV0dG9ucy1ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcmVmZXJyZWRSb290cyA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZW5hYmxlUHJlZmVycmVkUm9vdHMoKSl9XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbD17PFJhZGlvIC8+fVxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiUHJlZmVycmVkIHJvb3RzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBkaXNwYXRjaChkaXNhYmxlUHJlZmVycmVkUm9vdHMoKSl9XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbD17PFJhZGlvIC8+fVxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQWxsIGNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9SYWRpb0dyb3VwPlxuICAgICAgICAgICAgICAgIDwvRm9ybUNvbnRyb2w+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzaG93T2Jzb2xldGVFbmFibGVkfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyFzaG93T2Jzb2xldGVFbmFibGVkICYmIHNob3dDb3VudHNFbmFibGVkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVNob3dDb3VudHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWJlbD1cIlNob3cgY291bnRzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17c2hvd09ic29sZXRlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93T2Jzb2xldGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYWJlbD1cIlNob3cgb2Jzb2xldGUgdGVybXNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3NlbGVjdGVkRW50aXR5ICYmIChcbiAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17c2hvd1NpYmxpbmdzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVNob3dTaWJsaW5nc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxhYmVsPVwiU2hvdyBhbGwgc2libGluZ3NcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVHJlZUxpbmsoe1xuICBvbnRvbG9neSxcbiAgZW50aXR5LFxuICB0aXRsZSxcbiAgbGFuZyxcbiAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbn06IHtcbiAgb250b2xvZ3k6IE9udG9sb2d5O1xuICBlbnRpdHk6IEVudGl0eTtcbiAgdGl0bGU6IHN0cmluZztcbiAgbGFuZzogc3RyaW5nO1xuICBvbk5hdmlnYXRlVG9FbnRpdHk6IChvbnRvbG9neTogT250b2xvZ3ksIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xuICBvbk5hdmlnYXRlVG9PbnRvbG9neTogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG59KSB7XG4gIGxldCBkZWZpbmVkQnk6IHN0cmluZ1tdID0gZW50aXR5LmdldERlZmluZWRCeSgpO1xuXG4gIGlmIChkZWZpbmVkQnkuaW5kZXhPZihvbnRvbG9neS5nZXRPbnRvbG9neUlkKCkpICE9PSAtMSkgZGVmaW5lZEJ5ID0gW107IC8vIGRvbid0IHNob3cgZGVmaW5lZEJ5IGxpbmtzIGZvciB0ZXJtcyBpbiBjdXJyZW50IG9udG9sb2d5XG5cbiAgcmV0dXJuIChcbiAgICA8c3Bhbj5cbiAgICAgIDxhXG4gICAgICAgIHRpdGxlPXtlbnRpdHkuZ2V0SXJpKCl9XG4gICAgICAgIGNsYXNzTmFtZT17XCJsaW5rLWRlZmF1bHRcIn1cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25OYXZpZ2F0ZVRvRW50aXR5KG9udG9sb2d5LCBlbnRpdHkpfVxuICAgICAgPlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L2E+XG4gICAgICB7ZGVmaW5lZEJ5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgZGVmaW5lZEJ5Lm1hcCgoZGVmaW5pbmdPbnRvbG9neSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbk5hdmlnYXRlVG9PbnRvbG9neShkZWZpbmluZ09udG9sb2d5LCBlbnRpdHkpfVxuICAgICAgICAgICAgICB0aXRsZT17ZGVmaW5pbmdPbnRvbG9neS50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteC0xIGxpbmstb250b2xvZ3kgcHgtMiBweS0wLjUgcm91bmRlZC1tZCB0ZXh0LXNtIHRleHQtd2hpdGUgdXBwZXJjYXNlIG1sLTFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGVmaW5pbmdPbnRvbG9neX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICA8L3NwYW4+XG4gICk7XG59XG4iLCAiY29uc3QgY29tbW9uID0ge1xuICBibGFjazogJyMwMDAnLFxuICB3aGl0ZTogJyNmZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgY29tbW9uOyIsICJjb25zdCByZWQgPSB7XG4gIDUwOiAnI2ZmZWJlZScsXG4gIDEwMDogJyNmZmNkZDInLFxuICAyMDA6ICcjZWY5YTlhJyxcbiAgMzAwOiAnI2U1NzM3MycsXG4gIDQwMDogJyNlZjUzNTAnLFxuICA1MDA6ICcjZjQ0MzM2JyxcbiAgNjAwOiAnI2U1MzkzNScsXG4gIDcwMDogJyNkMzJmMmYnLFxuICA4MDA6ICcjYzYyODI4JyxcbiAgOTAwOiAnI2I3MWMxYycsXG4gIEExMDA6ICcjZmY4YTgwJyxcbiAgQTIwMDogJyNmZjUyNTInLFxuICBBNDAwOiAnI2ZmMTc0NCcsXG4gIEE3MDA6ICcjZDUwMDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHJlZDsiLCAiY29uc3QgcHVycGxlID0ge1xuICA1MDogJyNmM2U1ZjUnLFxuICAxMDA6ICcjZTFiZWU3JyxcbiAgMjAwOiAnI2NlOTNkOCcsXG4gIDMwMDogJyNiYTY4YzgnLFxuICA0MDA6ICcjYWI0N2JjJyxcbiAgNTAwOiAnIzljMjdiMCcsXG4gIDYwMDogJyM4ZTI0YWEnLFxuICA3MDA6ICcjN2IxZmEyJyxcbiAgODAwOiAnIzZhMWI5YScsXG4gIDkwMDogJyM0YTE0OGMnLFxuICBBMTAwOiAnI2VhODBmYycsXG4gIEEyMDA6ICcjZTA0MGZiJyxcbiAgQTQwMDogJyNkNTAwZjknLFxuICBBNzAwOiAnI2FhMDBmZidcbn07XG5leHBvcnQgZGVmYXVsdCBwdXJwbGU7IiwgImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwgImNvbnN0IGxpZ2h0Qmx1ZSA9IHtcbiAgNTA6ICcjZTFmNWZlJyxcbiAgMTAwOiAnI2IzZTVmYycsXG4gIDIwMDogJyM4MWQ0ZmEnLFxuICAzMDA6ICcjNGZjM2Y3JyxcbiAgNDAwOiAnIzI5YjZmNicsXG4gIDUwMDogJyMwM2E5ZjQnLFxuICA2MDA6ICcjMDM5YmU1JyxcbiAgNzAwOiAnIzAyODhkMScsXG4gIDgwMDogJyMwMjc3YmQnLFxuICA5MDA6ICcjMDE1NzliJyxcbiAgQTEwMDogJyM4MGQ4ZmYnLFxuICBBMjAwOiAnIzQwYzRmZicsXG4gIEE0MDA6ICcjMDBiMGZmJyxcbiAgQTcwMDogJyMwMDkxZWEnXG59O1xuZXhwb3J0IGRlZmF1bHQgbGlnaHRCbHVlOyIsICJjb25zdCBncmVlbiA9IHtcbiAgNTA6ICcjZThmNWU5JyxcbiAgMTAwOiAnI2M4ZTZjOScsXG4gIDIwMDogJyNhNWQ2YTcnLFxuICAzMDA6ICcjODFjNzg0JyxcbiAgNDAwOiAnIzY2YmI2YScsXG4gIDUwMDogJyM0Y2FmNTAnLFxuICA2MDA6ICcjNDNhMDQ3JyxcbiAgNzAwOiAnIzM4OGUzYycsXG4gIDgwMDogJyMyZTdkMzInLFxuICA5MDA6ICcjMWI1ZTIwJyxcbiAgQTEwMDogJyNiOWY2Y2EnLFxuICBBMjAwOiAnIzY5ZjBhZScsXG4gIEE0MDA6ICcjMDBlNjc2JyxcbiAgQTcwMDogJyMwMGM4NTMnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JlZW47IiwgImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsICJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsICJleHBvcnQgZGVmYXVsdCAnJCRtYXRlcmlhbCc7IiwgImltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuZXhwb3J0IHsgY3NzLCBrZXlmcmFtZXMsIFN0eWxlZEVuZ2luZVByb3ZpZGVyIH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi9HbG9iYWxTdHlsZXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBib3JkZXJzIH0gZnJvbSAnLi9ib3JkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vYm9yZGVycyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgbWVyZ2VCcmVha3BvaW50c0luT3JkZXIsIHJlc29sdmVCcmVha3BvaW50VmFsdWVzIGFzIHVuc3RhYmxlX3Jlc29sdmVCcmVha3BvaW50VmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXBvc2UgfSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkaXNwbGF5IH0gZnJvbSAnLi9kaXNwbGF5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxleGJveCB9IGZyb20gJy4vZmxleGJveCc7XG5leHBvcnQgKiBmcm9tICcuL2ZsZXhib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBncmlkIH0gZnJvbSAnLi9jc3NHcmlkJztcbmV4cG9ydCAqIGZyb20gJy4vY3NzR3JpZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhbGV0dGUgfSBmcm9tICcuL3BhbGV0dGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWxldHRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcG9zaXRpb25zIH0gZnJvbSAnLi9wb3NpdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3NpdGlvbnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzaGFkb3dzIH0gZnJvbSAnLi9zaGFkb3dzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2l6aW5nIH0gZnJvbSAnLi9zaXppbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zaXppbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzcGFjaW5nIH0gZnJvbSAnLi9zcGFjaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3BhY2luZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlLCBnZXRQYXRoLCBnZXRTdHlsZVZhbHVlIH0gZnJvbSAnLi9zdHlsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cG9ncmFwaHkgfSBmcm9tICcuL3R5cG9ncmFwaHknO1xuZXhwb3J0ICogZnJvbSAnLi90eXBvZ3JhcGh5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfc3R5bGVGdW5jdGlvblN4LCB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3gsIGV4dGVuZFN4UHJvcCBhcyB1bnN0YWJsZV9leHRlbmRTeFByb3AsIHVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZyB9IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIGluIHY2XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgZnVuY3Rpb24gZXhwZXJpbWVudGFsX3N4KCkge1xuICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIFxcYGV4cGVyaW1lbnRhbF9zeFxcYCBoYXMgYmVlbiBtb3ZlZCB0byBcXGB0aGVtZS51bnN0YWJsZV9zeFxcYC5Gb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM1MTUwLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDIwKSk7XG59XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2dldFRoZW1lVmFsdWUgfSBmcm9tICcuL2dldFRoZW1lVmFsdWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3ggfSBmcm9tICcuL0JveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUJveCB9IGZyb20gJy4vY3JlYXRlQm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlU3R5bGVkIH0gZnJvbSAnLi9jcmVhdGVTdHlsZWQnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVTdHlsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZWQgfSBmcm9tICcuL3N0eWxlZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVRoZW1lIH0gZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVNwYWNpbmcgfSBmcm9tICcuL2NyZWF0ZVRoZW1lL2NyZWF0ZVNwYWNpbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzaGFwZSB9IGZyb20gJy4vY3JlYXRlVGhlbWUvc2hhcGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VUaGVtZVByb3BzLCBnZXRUaGVtZVByb3BzIH0gZnJvbSAnLi91c2VUaGVtZVByb3BzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVGhlbWUgfSBmcm9tICcuL3VzZVRoZW1lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVGhlbWVXaXRob3V0RGVmYXVsdCB9IGZyb20gJy4vdXNlVGhlbWVXaXRob3V0RGVmYXVsdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZU1lZGlhUXVlcnkgfSBmcm9tICcuL3VzZU1lZGlhUXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvck1hbmlwdWxhdG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGhlbWVQcm92aWRlciB9IGZyb20gJy4vVGhlbWVQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2NyZWF0ZUNzc1ZhcnNQcm92aWRlciB9IGZyb20gJy4vY3NzVmFycy9jcmVhdGVDc3NWYXJzUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jcmVhdGVHZXRDc3NWYXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3JlYXRlR2V0Q3NzVmFyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3NzVmFyc1BhcnNlciB9IGZyb20gJy4vY3NzVmFycy9jc3NWYXJzUGFyc2VyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfcHJlcGFyZUNzc1ZhcnMgfSBmcm9tICcuL2Nzc1ZhcnMvcHJlcGFyZUNzc1ZhcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jcmVhdGVDc3NWYXJzVGhlbWUgfSBmcm9tICcuL2Nzc1ZhcnMvY3JlYXRlQ3NzVmFyc1RoZW1lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzcG9uc2l2ZVByb3BUeXBlIH0gZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdGxQcm92aWRlciB9IGZyb20gJy4vUnRsUHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9SdGxQcm92aWRlcic7XG5cbi8qKiAtLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyoqIExheW91dCBjb21wb25lbnRzICovXG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZUNvbnRhaW5lciB9IGZyb20gJy4vQ29udGFpbmVyL2NyZWF0ZUNvbnRhaW5lcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbnRhaW5lciB9IGZyb20gJy4vQ29udGFpbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29udGFpbmVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVW5zdGFibGVfR3JpZCB9IGZyb20gJy4vVW5zdGFibGVfR3JpZC9HcmlkJztcbmV4cG9ydCAqIGZyb20gJy4vVW5zdGFibGVfR3JpZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YWNrIH0gZnJvbSAnLi9TdGFjay9TdGFjayc7XG5leHBvcnQgKiBmcm9tICcuL1N0YWNrJzsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwicGFsZXR0ZVwiLCBcInNwYWNpbmdcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGNyZWF0ZUJyZWFrcG9pbnRzIGZyb20gJy4vY3JlYXRlQnJlYWtwb2ludHMnO1xuaW1wb3J0IHNoYXBlIGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IGNyZWF0ZVNwYWNpbmcgZnJvbSAnLi9jcmVhdGVTcGFjaW5nJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3ggZnJvbSAnLi4vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgZGVmYXVsdFN4Q29uZmlnIGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9kZWZhdWx0U3hDb25maWcnO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gJy4vYXBwbHlTdHlsZXMnO1xuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50c0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dCxcbiAgICAgIHNoYXBlOiBzaGFwZUlucHV0ID0ge31cbiAgICB9ID0gb3B0aW9ucyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzID0gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZSh7XG4gICAgYnJlYWtwb2ludHMsXG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICAvLyBJbmplY3QgY29tcG9uZW50IGRlZmluaXRpb25zLlxuICAgIHBhbGV0dGU6IF9leHRlbmRzKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6IF9leHRlbmRzKHt9LCBzaGFwZSwgc2hhcGVJbnB1dClcbiAgfSwgb3RoZXIpO1xuICBtdWlUaGVtZS5hcHBseVN0eWxlcyA9IGFwcGx5U3R5bGVzO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlc1wiLCBcInVuaXRcIiwgXCJzdGVwXCJdO1xuLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuZXhwb3J0IGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuY29uc3Qgc29ydEJyZWFrcG9pbnRzVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHNBc0FycmF5ID0gT2JqZWN0LmtleXModmFsdWVzKS5tYXAoa2V5ID0+ICh7XG4gICAga2V5LFxuICAgIHZhbDogdmFsdWVzW2tleV1cbiAgfSkpIHx8IFtdO1xuICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlclxuICBicmVha3BvaW50c0FzQXJyYXkuc29ydCgoYnJlYWtwb2ludDEsIGJyZWFrcG9pbnQyKSA9PiBicmVha3BvaW50MS52YWwgLSBicmVha3BvaW50Mi52YWwpO1xuICByZXR1cm4gYnJlYWtwb2ludHNBc0FycmF5LnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFjYywge1xuICAgICAgW29iai5rZXldOiBvYmoudmFsXG4gICAgfSk7XG4gIH0sIHt9KTtcbn07XG5cbi8vIEtlZXAgaW4gbWluZCB0aGF0IEBtZWRpYSBpcyBpbmNsdXNpdmUgYnkgdGhlIENTUyBzcGVjaWZpY2F0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4gICAgICAvLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbSkuXG4gICAgICB2YWx1ZXMgPSB7XG4gICAgICAgIHhzOiAwLFxuICAgICAgICAvLyBwaG9uZVxuICAgICAgICBzbTogNjAwLFxuICAgICAgICAvLyB0YWJsZXRcbiAgICAgICAgbWQ6IDkwMCxcbiAgICAgICAgLy8gc21hbGwgbGFwdG9wXG4gICAgICAgIGxnOiAxMjAwLFxuICAgICAgICAvLyBkZXNrdG9wXG4gICAgICAgIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuICAgICAgfSxcbiAgICAgIHVuaXQgPSAncHgnLFxuICAgICAgc3RlcCA9IDVcbiAgICB9ID0gYnJlYWtwb2ludHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBrZXlzLFxuICAgIHZhbHVlczogc29ydGVkVmFsdWVzLFxuICAgIHVwLFxuICAgIGRvd24sXG4gICAgYmV0d2VlbixcbiAgICBvbmx5LFxuICAgIG5vdCxcbiAgICB1bml0XG4gIH0sIG90aGVyKTtcbn0iLCAiY29uc3Qgc2hhcGUgPSB7XG4gIGJvcmRlclJhZGl1czogNFxufTtcbmV4cG9ydCBkZWZhdWx0IHNoYXBlOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcblxuLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4vLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbVsuXG5leHBvcnQgY29uc3QgdmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpIHtcbiAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKHRoZW1lQnJlYWtwb2ludHMua2V5c1tpbmRleF0pXSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbaW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BWYWx1ZSkucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIC8vIGtleSBpcyBicmVha3BvaW50XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cy52YWx1ZXMgfHwgdmFsdWVzKS5pbmRleE9mKGJyZWFrcG9pbnQpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBtZWRpYUtleSA9IHRoZW1lQnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCk7XG4gICAgICAgIGFjY1ttZWRpYUtleV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNzc0tleSA9IGJyZWFrcG9pbnQ7XG4gICAgICAgIGFjY1tjc3NLZXldID0gcHJvcFZhbHVlW2Nzc0tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGJyZWFrcG9pbnRzKHN0eWxlRnVuY3Rpb24pIHtcbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IG5ld1N0eWxlRnVuY3Rpb24gPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgICBjb25zdCBiYXNlID0gc3R5bGVGdW5jdGlvbihwcm9wcyk7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICBjb25zdCBleHRlbmRlZCA9IHRoZW1lQnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAocHJvcHNba2V5XSkge1xuICAgICAgICBhY2MgPSBhY2MgfHwge307XG4gICAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKGtleSldID0gc3R5bGVGdW5jdGlvbihfZXh0ZW5kcyh7XG4gICAgICAgICAgdGhlbWVcbiAgICAgICAgfSwgcHJvcHNba2V5XSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgICByZXR1cm4gbWVyZ2UoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfZXh0ZW5kcyh7fSwgc3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMsIHtcbiAgICB4czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzbTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB4bDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSA6IHt9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIC4uLnN0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHNdO1xuICByZXR1cm4gbmV3U3R5bGVGdW5jdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCA9IHt9KSB7XG4gIHZhciBfYnJlYWtwb2ludHNJbnB1dCRrZXk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzSW5PcmRlciA9IChfYnJlYWtwb2ludHNJbnB1dCRrZXkgPSBicmVha3BvaW50c0lucHV0LmtleXMpID09IG51bGwgPyB2b2lkIDAgOiBfYnJlYWtwb2ludHNJbnB1dCRrZXkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRTdHlsZUtleSA9IGJyZWFrcG9pbnRzSW5wdXQudXAoa2V5KTtcbiAgICBhY2NbYnJlYWtwb2ludFN0eWxlS2V5XSA9IHt9O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzSW5PcmRlciB8fCB7fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKGJyZWFrcG9pbnRzSW5wdXQsIC4uLnN0eWxlcykge1xuICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBbZW1wdHlCcmVha3BvaW50cywgLi4uc3R5bGVzXS5yZWR1Y2UoKHByZXYsIG5leHQpID0+IGRlZXBtZXJnZShwcmV2LCBuZXh0KSwge30pO1xuICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyksIG1lcmdlZE91dHB1dCk7XG59XG5cbi8vIGNvbXB1dGUgYmFzZSBmb3IgcmVzcG9uc2l2ZSB2YWx1ZXM7IGUuZy4sXG4vLyBbMSwyLDNdID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuLy8ge3hzOiAxLCBzbTogMiwgbWQ6IDN9ID0+IHt4czogdHJ1ZSwgc206IHRydWUsIG1kOiB0cnVlfVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgdmFsdWVzOiBicmVha3BvaW50VmFsdWVzLFxuICBicmVha3BvaW50czogdGhlbWVCcmVha3BvaW50cyxcbiAgYmFzZTogY3VzdG9tQmFzZVxufSkge1xuICBjb25zdCBiYXNlID0gY3VzdG9tQmFzZSB8fCBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmFzZSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBicmVha3BvaW50VmFsdWVzO1xuICB9XG4gIGxldCBwcmV2aW91cztcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1tpXSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1tpXSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGJyZWFrcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGJyZWFrcG9pbnRzOyIsICJpbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmZ1bmN0aW9uIG1lcmdlKGFjYywgaXRlbSkge1xuICBpZiAoIWl0ZW0pIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIHJldHVybiBkZWVwbWVyZ2UoYWNjLCBpdGVtLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcCwgaXQncyB3YXkgZmFzdGVyLlxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IG1lcmdlOyIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCwgdXNlclZhbHVlID0gcHJvcFZhbHVlRmluYWwpIHtcbiAgbGV0IHZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lTWFwcGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nKHByb3BWYWx1ZUZpbmFsKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoZW1lTWFwcGluZykpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZ1twcm9wVmFsdWVGaW5hbF0gfHwgdXNlclZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gZ2V0UGF0aCh0aGVtZU1hcHBpbmcsIHByb3BWYWx1ZUZpbmFsKSB8fCB1c2VyVmFsdWU7XG4gIH1cbiAgaWYgKHRyYW5zZm9ybSkge1xuICAgIHZhbHVlID0gdHJhbnNmb3JtKHZhbHVlLCB1c2VyVmFsdWUsIHRoZW1lTWFwcGluZyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc3R5bGUob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcHJvcCxcbiAgICBjc3NQcm9wZXJ0eSA9IG9wdGlvbnMucHJvcCxcbiAgICB0aGVtZUtleSxcbiAgICB0cmFuc2Zvcm1cbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wc1twcm9wXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlRmluYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogY2FwaXRhbGl6ZShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9O1xuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICAgIFtwcm9wXTogcmVzcG9uc2l2ZVByb3BUeXBlXG4gIH0gOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBbcHJvcF07XG4gIHJldHVybiBmbjtcbn1cbmV4cG9ydCBkZWZhdWx0IHN0eWxlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIGNvbnN0IGNhY2hlID0ge307XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn0iLCAiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplJztcbmNvbnN0IHByb3BlcnRpZXMgPSB7XG4gIG06ICdtYXJnaW4nLFxuICBwOiAncGFkZGluZydcbn07XG5jb25zdCBkaXJlY3Rpb25zID0ge1xuICB0OiAnVG9wJyxcbiAgcjogJ1JpZ2h0JyxcbiAgYjogJ0JvdHRvbScsXG4gIGw6ICdMZWZ0JyxcbiAgeDogWydMZWZ0JywgJ1JpZ2h0J10sXG4gIHk6IFsnVG9wJywgJ0JvdHRvbSddXG59O1xuY29uc3QgYWxpYXNlcyA9IHtcbiAgbWFyZ2luWDogJ214JyxcbiAgbWFyZ2luWTogJ215JyxcbiAgcGFkZGluZ1g6ICdweCcsXG4gIHBhZGRpbmdZOiAncHknXG59O1xuXG4vLyBtZW1vaXplKCkgaW1wYWN0OlxuLy8gRnJvbSAzMDAsMDAwIG9wcy9zZWNcbi8vIFRvIDM1MCwwMDAgb3BzL3NlY1xuY29uc3QgZ2V0Q3NzUHJvcGVydGllcyA9IG1lbW9pemUocHJvcCA9PiB7XG4gIC8vIEl0J3Mgbm90IGEgc2hvcnRoYW5kIG5vdGF0aW9uLlxuICBpZiAocHJvcC5sZW5ndGggPiAyKSB7XG4gICAgaWYgKGFsaWFzZXNbcHJvcF0pIHtcbiAgICAgIHByb3AgPSBhbGlhc2VzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3Byb3BdO1xuICAgIH1cbiAgfVxuICBjb25zdCBbYSwgYl0gPSBwcm9wLnNwbGl0KCcnKTtcbiAgY29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2FdO1xuICBjb25zdCBkaXJlY3Rpb24gPSBkaXJlY3Rpb25zW2JdIHx8ICcnO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkaXJlY3Rpb24pID8gZGlyZWN0aW9uLm1hcChkaXIgPT4gcHJvcGVydHkgKyBkaXIpIDogW3Byb3BlcnR5ICsgZGlyZWN0aW9uXTtcbn0pO1xuZXhwb3J0IGNvbnN0IG1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5leHBvcnQgY29uc3QgcGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgdGhlbWVLZXksIGRlZmF1bHRWYWx1ZSwgcHJvcE5hbWUpIHtcbiAgdmFyIF9nZXRQYXRoO1xuICBjb25zdCB0aGVtZVNwYWNpbmcgPSAoX2dldFBhdGggPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSwgZmFsc2UpKSAhPSBudWxsID8gX2dldFBhdGggOiBkZWZhdWx0VmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodHlwZW9mIGFicyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEV4cGVjdGVkICR7cHJvcE5hbWV9IGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLCBnb3QgJHthYnN9LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nICogYWJzO1xuICAgIH07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVTcGFjaW5nKSkge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWJzKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcnJheSB0eXBlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG5vbiBpbnRlZ2VyIHZhbHVlcy5gICsgYFlvdSBzaG91bGQgZWl0aGVyIHVzZSBhbiBpbnRlZ2VyIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5kZXgsIG9yIGRlZmluZSB0aGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXMgYSBudW1iZXIuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGFicyA+IHRoZW1lU3BhY2luZy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIHZhbHVlIHByb3ZpZGVkICgke2Fic30pIG92ZXJmbG93cy5gLCBgVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KHRoZW1lU3BhY2luZyl9LmAsIGAke2Fic30gPiAke3RoZW1lU3BhY2luZy5sZW5ndGggLSAxfSwgeW91IG5lZWQgdG8gYWRkIHRoZSBtaXNzaW5nIHZhbHVlcy5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmdbYWJzXTtcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRoZW1lU3BhY2luZztcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCB2YWx1ZSAoJHt0aGVtZVNwYWNpbmd9KSBpcyBpbnZhbGlkLmAsICdJdCBzaG91bGQgYmUgYSBudW1iZXIsIGFuIGFycmF5IG9yIGEgZnVuY3Rpb24uJ10uam9pbignXFxuJykpO1xuICB9XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKSB7XG4gIHJldHVybiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsICdzcGFjaW5nJywgOCwgJ3NwYWNpbmcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpIHtcbiAgcmV0dXJuIHByb3BWYWx1ZSA9PiBjc3NQcm9wZXJ0aWVzLnJlZHVjZSgoYWNjLCBjc3NQcm9wZXJ0eSkgPT4ge1xuICAgIGFjY1tjc3NQcm9wZXJ0eV0gPSBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5mdW5jdGlvbiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSB7XG4gIC8vIFVzaW5nIGEgaGFzaCBjb21wdXRhdGlvbiBvdmVyIGFuIGFycmF5IGl0ZXJhdGlvbiBjb3VsZCBiZSBmYXN0ZXIsIGJ1dCB3aXRoIG9ubHkgMjggaXRlbXMsXG4gIC8vIGl0J3MgZG9lc24ndCB3b3J0aCB0aGUgYnVuZGxlIHNpemUuXG4gIGlmIChrZXlzLmluZGV4T2YocHJvcCkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY3NzUHJvcGVydGllcyA9IGdldENzc1Byb3BlcnRpZXMocHJvcCk7XG4gIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcik7XG4gIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHN0eWxlKHByb3BzLCBrZXlzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHByb3BzLnRoZW1lKTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcCA9PiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSkucmVkdWNlKG1lcmdlLCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFyZ2luKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgbWFyZ2luS2V5cyk7XG59XG5tYXJnaW4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IG1hcmdpbktleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xubWFyZ2luLmZpbHRlclByb3BzID0gbWFyZ2luS2V5cztcbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbmV4cG9ydCBkZWZhdWx0IHNwYWNpbmc7IiwgImltcG9ydCB7IGNyZWF0ZVVuYXJ5U3BhY2luZyB9IGZyb20gJy4uL3NwYWNpbmcnO1xuXG4vLyBUaGUgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW1wbHkgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBzdHJ1Y3R1cmFsbHkuXG4vLyBXZSBleHByZXNzIHRoZSBkaWZmZXJlbmNlIHdpdGggdmFyaWFibGUgbmFtZXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH1cblxuICAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sXG4gIGNvbnN0IHRyYW5zZm9ybSA9IGNyZWF0ZVVuYXJ5U3BhY2luZyh7XG4gICAgc3BhY2luZzogc3BhY2luZ0lucHV0XG4gIH0pO1xuICBjb25zdCBzcGFjaW5nID0gKC4uLmFyZ3NJbnB1dCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIShhcmdzSW5wdXQubGVuZ3RoIDw9IDQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLCBleHBlY3RlZCBiZXR3ZWVuIDAgYW5kIDQsIGdvdCAke2FyZ3NJbnB1dC5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBhcmdzSW5wdXQubGVuZ3RoID09PSAwID8gWzFdIDogYXJnc0lucHV0O1xuICAgIHJldHVybiBhcmdzLm1hcChhcmd1bWVudCA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0cmFuc2Zvcm0oYXJndW1lbnQpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBvdXRwdXQgPT09ICdudW1iZXInID8gYCR7b3V0cHV0fXB4YCA6IG91dHB1dDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH07XG4gIHNwYWNpbmcubXVpID0gdHJ1ZTtcbiAgcmV0dXJuIHNwYWNpbmc7XG59IiwgImltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi4vbWVyZ2UnO1xuaW1wb3J0IHsgZ2V0UGF0aCwgZ2V0U3R5bGVWYWx1ZSBhcyBnZXRWYWx1ZSB9IGZyb20gJy4uL3N0eWxlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QsIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7XG5mdW5jdGlvbiBvYmplY3RzSGF2ZVNhbWVLZXlzKC4uLm9iamVjdHMpIHtcbiAgY29uc3QgYWxsS2V5cyA9IG9iamVjdHMucmVkdWNlKChrZXlzLCBvYmplY3QpID0+IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKG9iamVjdCkpLCBbXSk7XG4gIGNvbnN0IHVuaW9uID0gbmV3IFNldChhbGxLZXlzKTtcbiAgcmV0dXJuIG9iamVjdHMuZXZlcnkob2JqZWN0ID0+IHVuaW9uLnNpemUgPT09IE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoKTtcbn1cbmZ1bmN0aW9uIGNhbGxJZkZuKG1heWJlRm4sIGFyZykge1xuICByZXR1cm4gdHlwZW9mIG1heWJlRm4gPT09ICdmdW5jdGlvbicgPyBtYXliZUZuKGFyZykgOiBtYXliZUZuO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCkge1xuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbCwgdGhlbWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgW3Byb3BdOiB2YWwsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZ1twcm9wXTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjc3NQcm9wZXJ0eSA9IHByb3AsXG4gICAgICB0aGVtZUtleSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHN0eWxlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzgxMjNcbiAgICBpZiAodGhlbWVLZXkgPT09ICd0eXBvZ3JhcGh5JyAmJiB2YWwgPT09ICdpbmhlcml0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHJldHVybiBzdHlsZShwcm9wcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogY2FwaXRhbGl6ZShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgdmFsLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb25TeChwcm9wcykge1xuICAgIHZhciBfdGhlbWUkdW5zdGFibGVfc3hDb247XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuICAgIGlmICghc3gpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBFbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBuZWdsZWN0IG51bGxcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gKF90aGVtZSR1bnN0YWJsZV9zeENvbiA9IHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3RoZW1lJHVuc3RhYmxlX3N4Q29uIDogZGVmYXVsdFN4Q29uZmlnO1xuXG4gICAgLypcbiAgICAgKiBSZWNlaXZlIGBzeElucHV0YCBhcyBvYmplY3Qgb3IgY2FsbGJhY2tcbiAgICAgKiBhbmQgdGhlbiByZWN1cnNpdmVseSBjaGVjayBrZXlzICYgdmFsdWVzIHRvIGNyZWF0ZSBtZWRpYSBxdWVyeSBvYmplY3Qgc3R5bGVzLlxuICAgICAqICh0aGUgcmVzdWx0IHdpbGwgYmUgdXNlZCBpbiBgc3R5bGVkYClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuICAgICAgaWYgKHR5cGVvZiBzeElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHN4T2JqZWN0ID0gc3hJbnB1dCh0aGVtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeElucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICByZXR1cm4gc3hJbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgIH0sIHZhbHVlLCB4ID0+ICh7XG4gICAgICAgICAgICAgICAgW3N0eWxlS2V5XTogeFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIGlmIChvYmplY3RzSGF2ZVNhbWVLZXlzKGJyZWFrcG9pbnRzVmFsdWVzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjc3Nbc3R5bGVLZXldID0gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgICAgICAgICAgICAgIHN4OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBicmVha3BvaW50c1ZhbHVlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uU3g7XG59XG5jb25zdCBzdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKTtcbnN0eWxlRnVuY3Rpb25TeC5maWx0ZXJQcm9wcyA9IFsnc3gnXTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlRnVuY3Rpb25TeDsiLCAiaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnO1xuZnVuY3Rpb24gY29tcG9zZSguLi5zdHlsZXMpIHtcbiAgY29uc3QgaGFuZGxlcnMgPSBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiB7XG4gICAgc3R5bGUuZmlsdGVyUHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGFjY1twcm9wXSA9IHN0eWxlO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgICAgaWYgKGhhbmRsZXJzW3Byb3BdKSB7XG4gICAgICAgIHJldHVybiBtZXJnZShhY2MsIGhhbmRsZXJzW3Byb3BdKHByb3BzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oYWNjLCBzdHlsZS5wcm9wVHlwZXMpLCB7fSkgOiB7fTtcbiAgZm4uZmlsdGVyUHJvcHMgPSBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBhY2MuY29uY2F0KHN0eWxlLmZpbHRlclByb3BzKSwgW10pO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBjb21wb3NlOyIsICJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gYm9yZGVyVHJhbnNmb3JtKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBgJHt2YWx1ZX1weCBzb2xpZGA7XG59XG5mdW5jdGlvbiBjcmVhdGVCb3JkZXJTdHlsZShwcm9wLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIHN0eWxlKHtcbiAgICBwcm9wLFxuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtXG4gIH0pO1xufVxuZXhwb3J0IGNvbnN0IGJvcmRlciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXInLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b20gPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b21Db2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b21Db2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmUnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IG91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGJvcmRlclJhZGl1cyA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmJvcmRlclJhZGl1cyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmJvcmRlclJhZGl1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc2hhcGUuYm9yZGVyUmFkaXVzJywgNCwgJ2JvcmRlclJhZGl1cycpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmJvcmRlclJhZGl1cy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBib3JkZXJSYWRpdXM6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuYm9yZGVyUmFkaXVzLmZpbHRlclByb3BzID0gWydib3JkZXJSYWRpdXMnXTtcbmNvbnN0IGJvcmRlcnMgPSBjb21wb3NlKGJvcmRlciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJDb2xvciwgYm9yZGVyVG9wQ29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGJvcmRlclJhZGl1cywgb3V0bGluZSwgb3V0bGluZUNvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IGJvcmRlcnM7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdnYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5nYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgZ2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmdhcC5maWx0ZXJQcm9wcyA9IFsnZ2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBjb2x1bW5HYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5jb2x1bW5HYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jb2x1bW5HYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5jb2x1bW5HYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29sdW1uR2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGNvbHVtbkdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5jb2x1bW5HYXAuZmlsdGVyUHJvcHMgPSBbJ2NvbHVtbkdhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ3Jvd0dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgcm93R2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMucm93R2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmV4cG9ydCBjb25zdCBncmlkQ29sdW1uID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZENvbHVtbidcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRSb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkUm93J1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9GbG93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9GbG93J1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9Db2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9Db2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9Sb3dzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9Sb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVSb3dzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXJlYSA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBcmVhJ1xufSk7XG5jb25zdCBncmlkID0gY29tcG9zZShnYXAsIGNvbHVtbkdhcCwgcm93R2FwLCBncmlkQ29sdW1uLCBncmlkUm93LCBncmlkQXV0b0Zsb3csIGdyaWRBdXRvQ29sdW1ucywgZ3JpZEF1dG9Sb3dzLCBncmlkVGVtcGxhdGVDb2x1bW5zLCBncmlkVGVtcGxhdGVSb3dzLCBncmlkVGVtcGxhdGVBcmVhcywgZ3JpZEFyZWEpO1xuZXhwb3J0IGRlZmF1bHQgZ3JpZDsiLCAiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlVHJhbnNmb3JtKHZhbHVlLCB1c2VyVmFsdWUpIHtcbiAgaWYgKHVzZXJWYWx1ZSA9PT0gJ2dyZXknKSB7XG4gICAgcmV0dXJuIHVzZXJWYWx1ZTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgY29uc3QgY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdjb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYmdjb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JnY29sb3InLFxuICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZENvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IHBhbGV0dGUgPSBjb21wb3NlKGNvbG9yLCBiZ2NvbG9yLCBiYWNrZ3JvdW5kQ29sb3IpO1xuZXhwb3J0IGRlZmF1bHQgcGFsZXR0ZTsiLCAiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCB2YWx1ZXMgYXMgYnJlYWtwb2ludHNWYWx1ZXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBzaXppbmdUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDw9IDEgJiYgdmFsdWUgIT09IDAgPyBgJHt2YWx1ZSAqIDEwMH0lYCA6IHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IHdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4V2lkdGggPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+IHtcbiAgICAgIHZhciBfcHJvcHMkdGhlbWUsIF9wcm9wcyR0aGVtZTI7XG4gICAgICBjb25zdCBicmVha3BvaW50ID0gKChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLmJyZWFrcG9pbnRzKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUudmFsdWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lW3Byb3BWYWx1ZV0pIHx8IGJyZWFrcG9pbnRzVmFsdWVzW3Byb3BWYWx1ZV07XG4gICAgICBpZiAoIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogc2l6aW5nVHJhbnNmb3JtKHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoKF9wcm9wcyR0aGVtZTIgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lMiA9IF9wcm9wcyR0aGVtZTIuYnJlYWtwb2ludHMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUyLnVuaXQpICE9PSAncHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IGAke2JyZWFrcG9pbnR9JHtwcm9wcy50aGVtZS5icmVha3BvaW50cy51bml0fWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heFdpZHRoOiBicmVha3BvaW50XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5tYXhXaWR0aCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5tYXhXaWR0aC5maWx0ZXJQcm9wcyA9IFsnbWF4V2lkdGgnXTtcbmV4cG9ydCBjb25zdCBtaW5XaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWluSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVXaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYm94U2l6aW5nID0gc3R5bGUoe1xuICBwcm9wOiAnYm94U2l6aW5nJ1xufSk7XG5jb25zdCBzaXppbmcgPSBjb21wb3NlKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG5leHBvcnQgZGVmYXVsdCBzaXppbmc7IiwgImltcG9ydCB7IHBhZGRpbmcsIG1hcmdpbiB9IGZyb20gJy4uL3NwYWNpbmcnO1xuaW1wb3J0IHsgYm9yZGVyUmFkaXVzLCBib3JkZXJUcmFuc2Zvcm0gfSBmcm9tICcuLi9ib3JkZXJzJztcbmltcG9ydCB7IGdhcCwgcm93R2FwLCBjb2x1bW5HYXAgfSBmcm9tICcuLi9jc3NHcmlkJztcbmltcG9ydCB7IHBhbGV0dGVUcmFuc2Zvcm0gfSBmcm9tICcuLi9wYWxldHRlJztcbmltcG9ydCB7IG1heFdpZHRoLCBzaXppbmdUcmFuc2Zvcm0gfSBmcm9tICcuLi9zaXppbmcnO1xuY29uc3QgZGVmYXVsdFN4Q29uZmlnID0ge1xuICAvLyBib3JkZXJzXG4gIGJvcmRlcjoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyVG9wOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJSaWdodDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQm90dG9tOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJMZWZ0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyVG9wQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJpZ2h0Q29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckJvdHRvbUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJMZWZ0Q29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIG91dGxpbmU6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIG91dGxpbmVDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmFkaXVzOiB7XG4gICAgdGhlbWVLZXk6ICdzaGFwZS5ib3JkZXJSYWRpdXMnLFxuICAgIHN0eWxlOiBib3JkZXJSYWRpdXNcbiAgfSxcbiAgLy8gcGFsZXR0ZVxuICBjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJnY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmFja2dyb3VuZENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgLy8gc3BhY2luZ1xuICBwOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwcjoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBiOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGw6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBweDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB5OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZzoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdUb3A6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nUmlnaHQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQm90dG9tOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0xlZnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdZOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmVFbmQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2s6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja0VuZDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIG06IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG10OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtcjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWI6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1sOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBteDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXk6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luVG9wOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5SaWdodDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQm90dG9tOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5MZWZ0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5YOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5ZOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmU6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVFbmQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9ja0VuZDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgLy8gZGlzcGxheVxuICBkaXNwbGF5UHJpbnQ6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdHJhbnNmb3JtOiB2YWx1ZSA9PiAoe1xuICAgICAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICAgICAgZGlzcGxheTogdmFsdWVcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBkaXNwbGF5OiB7fSxcbiAgb3ZlcmZsb3c6IHt9LFxuICB0ZXh0T3ZlcmZsb3c6IHt9LFxuICB2aXNpYmlsaXR5OiB7fSxcbiAgd2hpdGVTcGFjZToge30sXG4gIC8vIGZsZXhib3hcbiAgZmxleEJhc2lzOiB7fSxcbiAgZmxleERpcmVjdGlvbjoge30sXG4gIGZsZXhXcmFwOiB7fSxcbiAganVzdGlmeUNvbnRlbnQ6IHt9LFxuICBhbGlnbkl0ZW1zOiB7fSxcbiAgYWxpZ25Db250ZW50OiB7fSxcbiAgb3JkZXI6IHt9LFxuICBmbGV4OiB7fSxcbiAgZmxleEdyb3c6IHt9LFxuICBmbGV4U2hyaW5rOiB7fSxcbiAgYWxpZ25TZWxmOiB7fSxcbiAganVzdGlmeUl0ZW1zOiB7fSxcbiAganVzdGlmeVNlbGY6IHt9LFxuICAvLyBncmlkXG4gIGdhcDoge1xuICAgIHN0eWxlOiBnYXBcbiAgfSxcbiAgcm93R2FwOiB7XG4gICAgc3R5bGU6IHJvd0dhcFxuICB9LFxuICBjb2x1bW5HYXA6IHtcbiAgICBzdHlsZTogY29sdW1uR2FwXG4gIH0sXG4gIGdyaWRDb2x1bW46IHt9LFxuICBncmlkUm93OiB7fSxcbiAgZ3JpZEF1dG9GbG93OiB7fSxcbiAgZ3JpZEF1dG9Db2x1bW5zOiB7fSxcbiAgZ3JpZEF1dG9Sb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczoge30sXG4gIGdyaWRUZW1wbGF0ZVJvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVBcmVhczoge30sXG4gIGdyaWRBcmVhOiB7fSxcbiAgLy8gcG9zaXRpb25zXG4gIHBvc2l0aW9uOiB7fSxcbiAgekluZGV4OiB7XG4gICAgdGhlbWVLZXk6ICd6SW5kZXgnXG4gIH0sXG4gIHRvcDoge30sXG4gIHJpZ2h0OiB7fSxcbiAgYm90dG9tOiB7fSxcbiAgbGVmdDoge30sXG4gIC8vIHNoYWRvd3NcbiAgYm94U2hhZG93OiB7XG4gICAgdGhlbWVLZXk6ICdzaGFkb3dzJ1xuICB9LFxuICAvLyBzaXppbmdcbiAgd2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhXaWR0aDoge1xuICAgIHN0eWxlOiBtYXhXaWR0aFxuICB9LFxuICBtaW5XaWR0aDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIGhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heEhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1pbkhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIGJveFNpemluZzoge30sXG4gIC8vIHR5cG9ncmFwaHlcbiAgZm9udEZhbWlseToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFNpemU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTdHlsZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFdlaWdodDoge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgbGV0dGVyU3BhY2luZzoge30sXG4gIHRleHRUcmFuc2Zvcm06IHt9LFxuICBsaW5lSGVpZ2h0OiB7fSxcbiAgdGV4dEFsaWduOiB7fSxcbiAgdHlwb2dyYXBoeToge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0U3hDb25maWc7IiwgIi8qKlxuICogQSB1bml2ZXJzYWwgdXRpbGl0eSB0byBzdHlsZSBjb21wb25lbnRzIHdpdGggbXVsdGlwbGUgY29sb3IgbW9kZXMuIEFsd2F5cyB1c2UgaXQgZnJvbSB0aGUgdGhlbWUgb2JqZWN0LlxuICogSXQgd29ya3Mgd2l0aDpcbiAqICAtIFtCYXNpYyB0aGVtZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vZGFyay1tb2RlLylcbiAqICAtIFtDU1MgdGhlbWUgdmFyaWFibGVzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvZXhwZXJpbWVudGFsLWFwaS9jc3MtdGhlbWUtdmFyaWFibGVzL292ZXJ2aWV3LylcbiAqICAtIFplcm8tcnVudGltZSBlbmdpbmVcbiAqXG4gKiBUaXBzOiBVc2UgYW4gYXJyYXkgb3ZlciBvYmplY3Qgc3ByZWFkIGFuZCBwbGFjZSBgdGhlbWUuYXBwbHlTdHlsZXMoKWAgbGFzdC5cbiAqXG4gKiBcdTI3MDUgW3sgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSldXG4gKlxuICogXHVEODNEXHVERUFCIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVDb250ZXh0IH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IG51bGwpIHtcbiAgY29uc3QgY29udGV4dFRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gIWNvbnRleHRUaGVtZSB8fCBpc09iamVjdEVtcHR5KGNvbnRleHRUaGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBjb250ZXh0VGhlbWU7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVXaXRob3V0RGVmYXVsdCBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUpIHtcbiAgcmV0dXJuIHVzZVRoZW1lV2l0aG91dERlZmF1bHQoZGVmYXVsdFRoZW1lKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogZGVmYXVsdFN4Q29uZmlnO1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuICBpZiAoQXJyYXkuaXNBcnJheShpblN4KSkge1xuICAgIGZpbmFsU3ggPSBbc3lzdGVtUHJvcHMsIC4uLmluU3hdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpblN4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZmluYWxTeCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpblN4KC4uLmFyZ3MpO1xuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSIsICJjb25zdCBkZWZhdWx0R2VuZXJhdG9yID0gY29tcG9uZW50TmFtZSA9PiBjb21wb25lbnROYW1lO1xuY29uc3QgY3JlYXRlQ2xhc3NOYW1lR2VuZXJhdG9yID0gKCkgPT4ge1xuICBsZXQgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyZShnZW5lcmF0b3IpIHtcbiAgICAgIGdlbmVyYXRlID0gZ2VuZXJhdG9yO1xuICAgIH0sXG4gICAgZ2VuZXJhdGUoY29tcG9uZW50TmFtZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpO1xuICAgIH0sXG4gICAgcmVzZXQoKSB7XG4gICAgICBnZW5lcmF0ZSA9IGRlZmF1bHRHZW5lcmF0b3I7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IENsYXNzTmFtZUdlbmVyYXRvciA9IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvcigpO1xuZXhwb3J0IGRlZmF1bHQgQ2xhc3NOYW1lR2VuZXJhdG9yOyIsICJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsICJpbXBvcnQgQ2xhc3NOYW1lR2VuZXJhdG9yIGZyb20gJy4uL0NsYXNzTmFtZUdlbmVyYXRvcic7XG5leHBvcnQgY29uc3QgZ2xvYmFsU3RhdGVDbGFzc2VzID0ge1xuICBhY3RpdmU6ICdhY3RpdmUnLFxuICBjaGVja2VkOiAnY2hlY2tlZCcsXG4gIGNvbXBsZXRlZDogJ2NvbXBsZXRlZCcsXG4gIGRpc2FibGVkOiAnZGlzYWJsZWQnLFxuICBlcnJvcjogJ2Vycm9yJyxcbiAgZXhwYW5kZWQ6ICdleHBhbmRlZCcsXG4gIGZvY3VzZWQ6ICdmb2N1c2VkJyxcbiAgZm9jdXNWaXNpYmxlOiAnZm9jdXNWaXNpYmxlJyxcbiAgb3BlbjogJ29wZW4nLFxuICByZWFkT25seTogJ3JlYWRPbmx5JyxcbiAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCwgZ2xvYmFsU3RhdGVQcmVmaXggPSAnTXVpJykge1xuICBjb25zdCBnbG9iYWxTdGF0ZUNsYXNzID0gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdO1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzcyA/IGAke2dsb2JhbFN0YXRlUHJlZml4fS0ke2dsb2JhbFN0YXRlQ2xhc3N9YCA6IGAke0NsYXNzTmFtZUdlbmVyYXRvci5nZW5lcmF0ZShjb21wb25lbnROYW1lKX0tJHtzbG90fWA7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iYWxTdGF0ZShzbG90KSB7XG4gIHJldHVybiBnbG9iYWxTdGF0ZUNsYXNzZXNbc2xvdF0gIT09IHVuZGVmaW5lZDtcbn0iLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoY29tcG9uZW50TmFtZSwgc2xvdHMsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHNsb3RzLmZvckVhY2goc2xvdCA9PiB7XG4gICAgcmVzdWx0W3Nsb3RdID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCwgZ2xvYmFsU3RhdGVQcmVmaXgpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgc3R5bGVkRW5naW5lU3R5bGVkLCB7IGludGVybmFsX3Byb2Nlc3NTdHlsZXMgYXMgcHJvY2Vzc1N0eWxlcyB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBnZXREaXNwbGF5TmFtZSBmcm9tICdAbXVpL3V0aWxzL2dldERpc3BsYXlOYW1lJztcbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3ggZnJvbSAnLi9zdHlsZUZ1bmN0aW9uU3gnO1xuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMjZkZWQ2MTA5ZmNkOGNhOTg3NWNjMmNlNDU2NGZlZTY3OGEzZjNjNS9wYWNrYWdlcy9zdHlsZWQvc3JjL3V0aWxzLmpzI0w0MFxuZnVuY3Rpb24gaXNTdHJpbmdUYWcodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJlxuICAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2O1xufVxuXG4vLyBVcGRhdGUgL3N5c3RlbS9zdHlsZWQvI2FwaSBpbiBjYXNlIGlmIHRoaXMgY2hhbmdlc1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcmVzb2x2ZWRTdHlsZXNBcmcgPSB0eXBlb2YgY2FsbGFibGVTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxhYmxlU3R5bGUoX2V4dGVuZHMoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgcHJvcHMpKSA6IGNhbGxhYmxlU3R5bGU7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnKSkge1xuICAgIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZy5mbGF0TWFwKHJlc29sdmVkU3R5bGUgPT4gcHJvY2Vzc1N0eWxlQXJnKHJlc29sdmVkU3R5bGUsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHJlc29sdmVkU3R5bGVzQXJnLCBfZXhjbHVkZWQyKTtcbiAgICBsZXQgcmVzdWx0ID0gb3RoZXJTdHlsZXM7XG4gICAgdmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcbiAgICAgIGxldCBpc01hdGNoID0gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFyaWFudC5wcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpc01hdGNoID0gdmFyaWFudC5wcm9wcyhfZXh0ZW5kcyh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFudC5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmICgob3duZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb3duZXJTdGF0ZVtrZXldKSAhPT0gdmFyaWFudC5wcm9wc1trZXldICYmIHByb3BzW2tleV0gIT09IHZhcmlhbnQucHJvcHNba2V5XSkge1xuICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHRdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKHR5cGVvZiB2YXJpYW50LnN0eWxlID09PSAnZnVuY3Rpb24nID8gdmFyaWFudC5zdHlsZShfZXh0ZW5kcyh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgcHJvY2Vzc1N0eWxlcyh0YWcsIHN0eWxlcyA9PiBzdHlsZXMuZmlsdGVyKHN0eWxlID0+ICEoc3R5bGUgIT0gbnVsbCAmJiBzdHlsZS5fX211aV9zeXN0ZW1TeCkpKTtcbiAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgIHNsb3Q6IGNvbXBvbmVudFNsb3QsXG4gICAgICAgIHNraXBWYXJpYW50c1Jlc29sdmVyOiBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyLFxuICAgICAgICBza2lwU3g6IGlucHV0U2tpcFN4LFxuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIG92ZXJyaWRlc1Jlc29sdmVyID0gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKGxvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QpKVxuICAgICAgfSA9IGlucHV0T3B0aW9ucyxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gc3R5bGVkRW5naW5lU3R5bGVkKHRhZywgX2V4dGVuZHMoe1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uLFxuICAgICAgbGFiZWxcbiAgICB9LCBvcHRpb25zKSk7XG4gICAgY29uc3QgdHJhbnNmb3JtU3R5bGVBcmcgPSBzdHlsZXNBcmcgPT4ge1xuICAgICAgLy8gT24gdGhlIHNlcnZlciBFbW90aW9uIGRvZXNuJ3QgdXNlIFJlYWN0LmZvcndhcmRSZWYgZm9yIGNyZWF0aW5nIGNvbXBvbmVudHMsIHNvIHRoZSBjcmVhdGVkXG4gICAgICAvLyBjb21wb25lbnQgc3RheXMgYXMgYSBmdW5jdGlvbi4gVGhpcyBjb25kaXRpb24gbWFrZXMgc3VyZSB0aGF0IHdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBmdW5jdGlvbnNcbiAgICAgIC8vIHdoaWNoIGFyZSBiYXNpY2FsbHkgY29tcG9uZW50cyB1c2VkIGFzIGEgc2VsZWN0b3JzLlxuICAgICAgaWYgKHR5cGVvZiBzdHlsZXNBcmcgPT09ICdmdW5jdGlvbicgJiYgc3R5bGVzQXJnLl9fZW1vdGlvbl9yZWFsICE9PSBzdHlsZXNBcmcgfHwgaXNQbGFpbk9iamVjdChzdHlsZXNBcmcpKSB7XG4gICAgICAgIHJldHVybiBwcm9wcyA9PiBwcm9jZXNzU3R5bGVBcmcoc3R5bGVzQXJnLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKHtcbiAgICAgICAgICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzQXJnO1xuICAgIH07XG4gICAgY29uc3QgbXVpU3R5bGVkUmVzb2x2ZXIgPSAoc3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zKSA9PiB7XG4gICAgICBsZXQgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IHRyYW5zZm9ybVN0eWxlQXJnKHN0eWxlQXJnKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSA9IGV4cHJlc3Npb25zID8gZXhwcmVzc2lvbnMubWFwKHRyYW5zZm9ybVN0eWxlQXJnKSA6IFtdO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgb3ZlcnJpZGVzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gcmVzb2x2ZVRoZW1lKF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHJlc29sdmVkU3R5bGVPdmVycmlkZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmICFza2lwVmFyaWFudHNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgdmFyIF90aGVtZSRjb21wb25lbnRzO1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gcmVzb2x2ZVRoZW1lKF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjb25zdCB0aGVtZVZhcmlhbnRzID0gdGhlbWUgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzW2NvbXBvbmVudE5hbWVdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMudmFyaWFudHM7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NTdHlsZUFyZyh7XG4gICAgICAgICAgICB2YXJpYW50czogdGhlbWVWYXJpYW50c1xuICAgICAgICAgIH0sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7Y2FwaXRhbGl6ZShjb21wb25lbnRTbG90IHx8ICcnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNwbGF5TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgU3R5bGVkKCR7Z2V0RGlzcGxheU5hbWUodGFnKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YWcubXVpTmFtZSkge1xuICAgICAgICBDb21wb25lbnQubXVpTmFtZSA9IHRhZy5tdWlOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICB9O1xuICAgIGlmIChkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZykge1xuICAgICAgbXVpU3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZyA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gbXVpU3R5bGVkUmVzb2x2ZXI7XG4gIH07XG59IiwgImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi9jcmVhdGVTdHlsZWQnO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKCk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLyoqXG4gKiBBZGQga2V5cywgdmFsdWVzIG9mIGBkZWZhdWx0UHJvcHNgIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gYHByb3BzYFxuICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRQcm9wc1xuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSByZXNvbHZlZCBwcm9wc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNvbHZlUHJvcHMoZGVmYXVsdFByb3BzLCBwcm9wcykge1xuICBjb25zdCBvdXRwdXQgPSBfZXh0ZW5kcyh7fSwgcHJvcHMpO1xuICBPYmplY3Qua2V5cyhkZWZhdWx0UHJvcHMpLmZvckVhY2gocHJvcE5hbWUgPT4ge1xuICAgIGlmIChwcm9wTmFtZS50b1N0cmluZygpLm1hdGNoKC9eKGNvbXBvbmVudHN8c2xvdHMpJC8pKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wc1twcm9wTmFtZV0sIG91dHB1dFtwcm9wTmFtZV0pO1xuICAgIH0gZWxzZSBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzUHJvcHN8c2xvdFByb3BzKSQvKSkge1xuICAgICAgY29uc3QgZGVmYXVsdFNsb3RQcm9wcyA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV0gfHwge307XG4gICAgICBjb25zdCBzbG90UHJvcHMgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0ge307XG4gICAgICBpZiAoIXNsb3RQcm9wcyB8fCAhT2JqZWN0LmtleXMoc2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgc2xvdCBwcm9wcyBpcyBlbXB0eVxuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFNsb3RQcm9wcztcbiAgICAgIH0gZWxzZSBpZiAoIWRlZmF1bHRTbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpKSB7XG4gICAgICAgIC8vIFJlZHVjZSB0aGUgaXRlcmF0aW9uIGlmIHRoZSBkZWZhdWx0IHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHNsb3RQcm9wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBfZXh0ZW5kcyh7fSwgc2xvdFByb3BzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdFNsb3RQcm9wcykuZm9yRWFjaChzbG90UHJvcE5hbWUgPT4ge1xuICAgICAgICAgIG91dHB1dFtwcm9wTmFtZV1bc2xvdFByb3BOYW1lXSA9IHJlc29sdmVQcm9wcyhkZWZhdWx0U2xvdFByb3BzW3Nsb3RQcm9wTmFtZV0sIHNsb3RQcm9wc1tzbG90UHJvcE5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvdXRwdXRbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwgImltcG9ydCByZXNvbHZlUHJvcHMgZnJvbSAnQG11aS91dGlscy9yZXNvbHZlUHJvcHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGhlbWVQcm9wcyhwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCF0aGVtZSB8fCAhdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tuYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVQcm9wcyh0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcywgcHJvcHMpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBnZXRUaGVtZVByb3BzIGZyb20gJy4vZ2V0VGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lLFxuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgbGV0IHRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgaWYgKHRoZW1lSWQpIHtcbiAgICB0aGVtZSA9IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xuICB9XG4gIGNvbnN0IG1lcmdlZFByb3BzID0gZ2V0VGhlbWVQcm9wcyh7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9KTtcbiAgcmV0dXJuIG1lcmdlZFByb3BzO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBBIHZlcnNpb24gb2YgYFJlYWN0LnVzZUxheW91dEVmZmVjdGAgdGhhdCBkb2VzIG5vdCBzaG93IGEgd2FybmluZyB3aGVuIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBlZmZlY3RzIHRoYXQgYXJlIG9ubHkgbmVlZGVkIGZvciBjbGllbnQtc2lkZSByZW5kZXJpbmcgYnV0IG5vdCBmb3IgU1NSLlxuICpcbiAqIEJlZm9yZSB5b3UgdXNlIHRoaXMgaG9vaywgbWFrZSBzdXJlIHRvIHJlYWQgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ2FlYXJvbi9lN2Q5N2NkZjM4YTI5MDc5MjRlYTEyZTRlYmRmM2M4NVxuICogYW5kIGNvbmZpcm0gaXQgZG9lc24ndCBhcHBseSB0byB5b3VyIHVzZS1jYXNlLlxuICovXG5jb25zdCB1c2VFbmhhbmNlZEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7IiwgIi8qKlxuICogU2FmZSBjaGFpbmVkIGZ1bmN0aW9uLlxuICpcbiAqIFdpbGwgb25seSBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gaWYgbmVlZGVkLFxuICogb3RoZXJ3aXNlIHdpbGwgcGFzcyBiYWNrIGV4aXN0aW5nIGZ1bmN0aW9ucyBvciBudWxsLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24oLi4uZnVuY3MpIHtcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZSgoYWNjLCBmdW5jKSA9PiB7XG4gICAgaWYgKGZ1bmMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICBhY2MuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH0sICgpID0+IHt9KTtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNNdWlFbGVtZW50KGVsZW1lbnQsIG11aU5hbWVzKSB7XG4gIHZhciBfbXVpTmFtZSwgX2VsZW1lbnQkdHlwZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiBtdWlOYW1lcy5pbmRleE9mKCAvLyBGb3Igc2VydmVyIGNvbXBvbmVudHMgYG11aU5hbWVgIGlzIGF2YWlhbGJsZSBpbiBlbGVtZW50LnR5cGUuX3BheWxvYWQudmFsdWUubXVpTmFtZVxuICAvLyByZWxldmFudCBpbmZvIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMjgwN2Q3ODFhMDhkYjhlOTg3MzY4N2ZjY2MyNWMwZjEyYjRmYjNkNC9wYWNrYWdlcy9yZWFjdC9zcmMvUmVhY3RMYXp5LmpzI0w0NVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgKF9tdWlOYW1lID0gZWxlbWVudC50eXBlLm11aU5hbWUpICE9IG51bGwgPyBfbXVpTmFtZSA6IChfZWxlbWVudCR0eXBlID0gZWxlbWVudC50eXBlKSA9PSBudWxsIHx8IChfZWxlbWVudCR0eXBlID0gX2VsZW1lbnQkdHlwZS5fcGF5bG9hZCkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCR0eXBlLm11aU5hbWUpICE9PSAtMTtcbn0iLCAiLyoqXG4gKiBUT0RPIHY1OiBjb25zaWRlciBtYWtpbmcgaXQgcHJpdmF0ZVxuICpcbiAqIHBhc3NlcyB7dmFsdWV9IHRvIHtyZWZ9XG4gKlxuICogV0FSTklORzogQmUgc3VyZSB0byBvbmx5IGNhbGwgdGhpcyBpbnNpZGUgYSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCBhcyBhIHJlZi5cbiAqIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRvIGNsZWFudXAgdGhlIHByZXZpb3VzIHtyZWZ9IGlmIGl0IGNoYW5nZXMuIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMTM1MzlcbiAqXG4gKiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZXhwb3NlIHRoZSByZWYgb2YgYW4gaW5uZXIgY29tcG9uZW50IHRvIHRoZSBwdWJsaWMgQVBJXG4gKiB3aGlsZSBzdGlsbCB1c2luZyBpdCBpbnNpZGUgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSByZWYgQSByZWYgY2FsbGJhY2sgb3IgcmVmIG9iamVjdC4gSWYgYW55dGhpbmcgZmFsc3ksIHRoaXMgaXMgYSBuby1vcC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0UmVmKHJlZiwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWYodmFsdWUpO1xuICB9IGVsc2UgaWYgKHJlZikge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5sZXQgZ2xvYmFsSWQgPSAwO1xuZnVuY3Rpb24gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSkge1xuICBjb25zdCBbZGVmYXVsdElkLCBzZXREZWZhdWx0SWRdID0gUmVhY3QudXNlU3RhdGUoaWRPdmVycmlkZSk7XG4gIGNvbnN0IGlkID0gaWRPdmVycmlkZSB8fCBkZWZhdWx0SWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRJZCA9PSBudWxsKSB7XG4gICAgICAvLyBGYWxsYmFjayB0byB0aGlzIGRlZmF1bHQgaWQgd2hlbiBwb3NzaWJsZS5cbiAgICAgIC8vIFVzZSB0aGUgaW5jcmVtZW50aW5nIHZhbHVlIGZvciBjbGllbnQtc2lkZSByZW5kZXJpbmcgb25seS5cbiAgICAgIC8vIFdlIGNhbid0IHVzZSBpdCBzZXJ2ZXItc2lkZS5cbiAgICAgIC8vIElmIHlvdSB3YW50IHRvIHVzZSByYW5kb20gdmFsdWVzIHBsZWFzZSBjb25zaWRlciB0aGUgQmlydGhkYXkgUHJvYmxlbTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmlydGhkYXlfcHJvYmxlbVxuICAgICAgZ2xvYmFsSWQgKz0gMTtcbiAgICAgIHNldERlZmF1bHRJZChgbXVpLSR7Z2xvYmFsSWR9YCk7XG4gICAgfVxuICB9LCBbZGVmYXVsdElkXSk7XG4gIHJldHVybiBpZDtcbn1cblxuLy8gZG93bnN0cmVhbSBidW5kbGVycyBtYXkgcmVtb3ZlIHVubmVjZXNzYXJ5IGNvbmNhdGVuYXRpb24sIGJ1dCB3b24ndCByZW1vdmUgdG9TdHJpbmcgY2FsbCAtLSBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2lzc3Vlcy8xNDgxNFxuY29uc3QgbWF5YmVSZWFjdFVzZUlkID0gUmVhY3RbJ3VzZUlkJy50b1N0cmluZygpXTtcbi8qKlxuICpcbiAqIEBleGFtcGxlIDxkaXYgaWQ9e3VzZUlkKCl9IC8+XG4gKiBAcGFyYW0gaWRPdmVycmlkZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlSWQoaWRPdmVycmlkZSkge1xuICBpZiAobWF5YmVSZWFjdFVzZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZWFjdElkID0gbWF5YmVSZWFjdFVzZUlkKCk7XG4gICAgcmV0dXJuIGlkT3ZlcnJpZGUgIT0gbnVsbCA/IGlkT3ZlcnJpZGUgOiByZWFjdElkO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAtLSBgUmVhY3QudXNlSWRgIGlzIGludmFyaWFudCBhdCBydW50aW1lLlxuICByZXR1cm4gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSk7XG59IiwgIid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MsIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ29udHJvbGxlZCh7XG4gIGNvbnRyb2xsZWQsXG4gIGRlZmF1bHQ6IGRlZmF1bHRQcm9wLFxuICBuYW1lLFxuICBzdGF0ZSA9ICd2YWx1ZSdcbn0pIHtcbiAgLy8gaXNDb250cm9sbGVkIGlzIGlnbm9yZWQgaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0cyBhcyBpdCBzaG91bGQgbmV2ZXIgY2hhbmdlLlxuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYoY29udHJvbGxlZCAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgW3ZhbHVlU3RhdGUsIHNldFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKGRlZmF1bHRQcm9wKTtcbiAgY29uc3QgdmFsdWUgPSBpc0NvbnRyb2xsZWQgPyBjb250cm9sbGVkIDogdmFsdWVTdGF0ZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAhPT0gKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlICR7aXNDb250cm9sbGVkID8gJycgOiAndW4nfWNvbnRyb2xsZWQgJHtzdGF0ZX0gc3RhdGUgb2YgJHtuYW1lfSB0byBiZSAke2lzQ29udHJvbGxlZCA/ICd1bicgOiAnJ31jb250cm9sbGVkLmAsICdFbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4nLCBgRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAke25hbWV9IGAgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuJywgXCJUaGUgbmF0dXJlIG9mIHRoZSBzdGF0ZSBpcyBkZXRlcm1pbmVkIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyLiBJdCdzIGNvbnNpZGVyZWQgY29udHJvbGxlZCBpZiB0aGUgdmFsdWUgaXMgbm90IGB1bmRlZmluZWRgLlwiLCAnTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cyddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbc3RhdGUsIG5hbWUsIGNvbnRyb2xsZWRdKTtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICB9ID0gUmVhY3QudXNlUmVmKGRlZmF1bHRQcm9wKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc0NvbnRyb2xsZWQgJiYgZGVmYXVsdFZhbHVlICE9PSBkZWZhdWx0UHJvcCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgZGVmYXVsdCAke3N0YXRlfSBzdGF0ZSBvZiBhbiB1bmNvbnRyb2xsZWQgJHtuYW1lfSBhZnRlciBiZWluZyBpbml0aWFsaXplZC4gYCArIGBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgb3B0IHRvIHVzZSBhIGNvbnRyb2xsZWQgJHtuYW1lfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW0pTT04uc3RyaW5naWZ5KGRlZmF1bHRQcm9wKV0pO1xuICB9XG4gIGNvbnN0IHNldFZhbHVlSWZVbmNvbnRyb2xsZWQgPSBSZWFjdC51c2VDYWxsYmFjayhuZXdWYWx1ZSA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVJZlVuY29udHJvbGxlZF07XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3VzZUVuaGFuY2VkRWZmZWN0JztcblxuLyoqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MDk5I2lzc3VlY29tbWVudC00NDAwMTM4OTJcbiAqIFNlZSBSRkMgaW4gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzIyMFxuICovXG5cbmZ1bmN0aW9uIHVzZUV2ZW50Q2FsbGJhY2soZm4pIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKGZuKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gZm47XG4gIH0pO1xuICByZXR1cm4gUmVhY3QudXNlUmVmKCguLi5hcmdzKSA9PlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGhpZGUgYHRoaXNgXG4gICgwLCByZWYuY3VycmVudCkoLi4uYXJncykpLmN1cnJlbnQ7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzZXRSZWYgZnJvbSAnLi4vc2V0UmVmJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcmtSZWYoLi4ucmVmcykge1xuICAvKipcbiAgICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBpZiB0aGUgcmVmcyBwYXNzZWQgdG8gdGhpcyBob29rIGNoYW5nZSBhbmQgYXJlIGFsbCBkZWZpbmVkLlxuICAgKiBUaGlzIG1lYW5zIHJlYWN0IHdpbGwgY2FsbCB0aGUgb2xkIGZvcmtSZWYgd2l0aCBgbnVsbGAgYW5kIHRoZSBuZXcgZm9ya1JlZlxuICAgKiB3aXRoIHRoZSByZWYuIENsZWFudXAgbmF0dXJhbGx5IGVtZXJnZXMgZnJvbSB0aGlzIGJlaGF2aW9yLlxuICAgKi9cbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChyZWZzLmV2ZXJ5KHJlZiA9PiByZWYgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2UgPT4ge1xuICAgICAgcmVmcy5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICAgIHNldFJlZihyZWYsIGluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCByZWZzKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBVTklOSVRJQUxJWkVEID0ge307XG5cbi8qKlxuICogQSBSZWFjdC51c2VSZWYoKSB0aGF0IGlzIGluaXRpYWxpemVkIGxhemlseSB3aXRoIGEgZnVuY3Rpb24uIE5vdGUgdGhhdCBpdCBhY2NlcHRzIGFuIG9wdGlvbmFsXG4gKiBpbml0aWFsaXphdGlvbiBhcmd1bWVudCwgc28gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBpbmxpbmUgY2xvc3VyZS5cbiAqXG4gKiBAdXNhZ2VcbiAqICAgY29uc3QgcmVmID0gdXNlTGF6eVJlZihzb3J0Q29sdW1ucywgY29sdW1ucylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTGF6eVJlZihpbml0LCBpbml0QXJnKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihVTklOSVRJQUxJWkVEKTtcbiAgaWYgKHJlZi5jdXJyZW50ID09PSBVTklOSVRJQUxJWkVEKSB7XG4gICAgcmVmLmN1cnJlbnQgPSBpbml0KGluaXRBcmcpO1xuICB9XG4gIHJldHVybiByZWY7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgRU1QVFkgPSBbXTtcblxuLyoqXG4gKiBBIFJlYWN0LnVzZUVmZmVjdCBlcXVpdmFsZW50IHRoYXQgcnVucyBvbmNlLCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT25Nb3VudChmbikge1xuICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbiAgUmVhY3QudXNlRWZmZWN0KGZuLCBFTVBUWSk7XG4gIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUxhenlSZWYgZnJvbSAnLi4vdXNlTGF6eVJlZi91c2VMYXp5UmVmJztcbmltcG9ydCB1c2VPbk1vdW50IGZyb20gJy4uL3VzZU9uTW91bnQvdXNlT25Nb3VudCc7XG5leHBvcnQgY2xhc3MgVGltZW91dCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY3VycmVudElkID0gbnVsbDtcbiAgICB0aGlzLmNsZWFyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VycmVudElkICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRJZCk7XG4gICAgICAgIHRoaXMuY3VycmVudElkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZGlzcG9zZUVmZmVjdCA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IFRpbWVvdXQoKTtcbiAgfVxuICAvKipcbiAgICogRXhlY3V0ZXMgYGZuYCBhZnRlciBgZGVsYXlgLCBjbGVhcmluZyBhbnkgcHJldmlvdXNseSBzY2hlZHVsZWQgY2FsbC5cbiAgICovXG4gIHN0YXJ0KGRlbGF5LCBmbikge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmN1cnJlbnRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgICAgZm4oKTtcbiAgICB9LCBkZWxheSk7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRpbWVvdXQoKSB7XG4gIGNvbnN0IHRpbWVvdXQgPSB1c2VMYXp5UmVmKFRpbWVvdXQuY3JlYXRlKS5jdXJyZW50O1xuICB1c2VPbk1vdW50KHRpbWVvdXQuZGlzcG9zZUVmZmVjdCk7XG4gIHJldHVybiB0aW1lb3V0O1xufSIsICIndXNlIGNsaWVudCc7XG5cbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi92NC4xLjUvc3JjL2ZvY3VzLXZpc2libGUuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRpbWVvdXQgfSBmcm9tICcuLi91c2VUaW1lb3V0L3VzZVRpbWVvdXQnO1xubGV0IGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xubGV0IGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG5jb25zdCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQgPSBuZXcgVGltZW91dCgpO1xuY29uc3QgaW5wdXRUeXBlc1doaXRlbGlzdCA9IHtcbiAgdGV4dDogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICB3ZWVrOiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZVxufTtcblxuLyoqXG4gKiBDb21wdXRlcyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IHNob3VsZCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgdGhlXG4gKiBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgYmVpbmcgYWRkZWQsIGkuZS4gd2hldGhlciBpdCBzaG91bGQgYWx3YXlzIG1hdGNoXG4gKiBgOmZvY3VzLXZpc2libGVgIHdoZW4gZm9jdXNlZC5cbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KG5vZGUpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgdGFnTmFtZVxuICB9ID0gbm9kZTtcbiAgaWYgKHRhZ05hbWUgPT09ICdJTlBVVCcgJiYgaW5wdXRUeXBlc1doaXRlbGlzdFt0eXBlXSAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0YWdOYW1lID09PSAnVEVYVEFSRUEnICYmICFub2RlLnJlYWRPbmx5KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogS2VlcCB0cmFjayBvZiBvdXIga2V5Ym9hcmQgbW9kYWxpdHkgc3RhdGUgd2l0aCBgaGFkS2V5Ym9hcmRFdmVudGAuXG4gKiBJZiB0aGUgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbiB3YXMgdmlhIHRoZSBrZXlib2FyZDtcbiAqIGFuZCB0aGUga2V5IHByZXNzIGRpZCBub3QgaW5jbHVkZSBhIG1ldGEsIGFsdC9vcHRpb24sIG9yIGNvbnRyb2wga2V5O1xuICogdGhlbiB0aGUgbW9kYWxpdHkgaXMga2V5Ym9hcmQuIE90aGVyd2lzZSwgdGhlIG1vZGFsaXR5IGlzIG5vdCBrZXlib2FyZC5cbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudCkge1xuICBpZiAoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSkge1xuICAgIHJldHVybjtcbiAgfVxuICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBJZiBhdCBhbnkgcG9pbnQgYSB1c2VyIGNsaWNrcyB3aXRoIGEgcG9pbnRpbmcgZGV2aWNlLCBlbnN1cmUgdGhhdCB3ZSBjaGFuZ2VcbiAqIHRoZSBtb2RhbGl0eSBhd2F5IGZyb20ga2V5Ym9hcmQuXG4gKiBUaGlzIGF2b2lkcyB0aGUgc2l0dWF0aW9uIHdoZXJlIGEgdXNlciBwcmVzc2VzIGEga2V5IG9uIGFuIGFscmVhZHkgZm9jdXNlZFxuICogZWxlbWVudCwgYW5kIHRoZW4gY2xpY2tzIG9uIGEgZGlmZmVyZW50IGVsZW1lbnQsIGZvY3VzaW5nIGl0IHdpdGggYVxuICogcG9pbnRpbmcgZGV2aWNlLCB3aGlsZSB3ZSBzdGlsbCB0aGluayB3ZSdyZSBpbiBrZXlib2FyZCBtb2RhbGl0eS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlUG9pbnRlckRvd24oKSB7XG4gIGhhZEtleWJvYXJkRXZlbnQgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UoKSB7XG4gIGlmICh0aGlzLnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAvLyBJZiB0aGUgdGFiIGJlY29tZXMgYWN0aXZlIGFnYWluLCB0aGUgYnJvd3NlciB3aWxsIGhhbmRsZSBjYWxsaW5nIGZvY3VzXG4gICAgLy8gb24gdGhlIGVsZW1lbnQgKFNhZmFyaSBhY3R1YWxseSBjYWxscyBpdCB0d2ljZSkuXG4gICAgLy8gSWYgdGhpcyB0YWIgY2hhbmdlIGNhdXNlZCBhIGJsdXIgb24gYW4gZWxlbWVudCB3aXRoIGZvY3VzLXZpc2libGUsXG4gICAgLy8gcmUtYXBwbHkgdGhlIGNsYXNzIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMgYmFjayB0byB0aGUgdGFiLlxuICAgIGlmIChoYWRGb2N1c1Zpc2libGVSZWNlbnRseSkge1xuICAgICAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlKGRvYykge1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRlYXJkb3duKGRvYykge1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHRydWUpO1xufVxuZnVuY3Rpb24gaXNGb2N1c1Zpc2libGUoZXZlbnQpIHtcbiAgY29uc3Qge1xuICAgIHRhcmdldFxuICB9ID0gZXZlbnQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRhcmdldC5tYXRjaGVzKCc6Zm9jdXMtdmlzaWJsZScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEJyb3dzZXJzIG5vdCBpbXBsZW1lbnRpbmcgOmZvY3VzLXZpc2libGUgd2lsbCB0aHJvdyBhIFN5bnRheEVycm9yLlxuICAgIC8vIFdlIHVzZSBvdXIgb3duIGhldXJpc3RpYyBmb3IgdGhvc2UgYnJvd3NlcnMuXG4gICAgLy8gUmV0aHJvdyBtaWdodCBiZSBiZXR0ZXIgaWYgaXQncyBub3QgdGhlIGV4cGVjdGVkIGVycm9yIGJ1dCBkbyB3ZSByZWFsbHlcbiAgICAvLyB3YW50IHRvIGNyYXNoIGlmIGZvY3VzLXZpc2libGUgbWFsZnVuY3Rpb25lZD9cbiAgfVxuXG4gIC8vIE5vIG5lZWQgZm9yIHZhbGlkRm9jdXNUYXJnZXQgY2hlY2suIFRoZSB1c2VyIGRvZXMgdGhhdCBieSBhdHRhY2hpbmcgaXQgdG9cbiAgLy8gZm9jdXNhYmxlIGV2ZW50cyBvbmx5LlxuICByZXR1cm4gaGFkS2V5Ym9hcmRFdmVudCB8fCBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eSh0YXJnZXQpO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlSXNGb2N1c1Zpc2libGUoKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGlmIChub2RlICE9IG51bGwpIHtcbiAgICAgIHByZXBhcmUobm9kZS5vd25lckRvY3VtZW50KTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgaXNGb2N1c1Zpc2libGVSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGlmIGEgYmx1ciBldmVudCBpcyBmaXJlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlQmx1clZpc2libGUoKSB7XG4gICAgLy8gY2hlY2tpbmcgYWdhaW5zdCBwb3RlbnRpYWwgc3RhdGUgdmFyaWFibGUgZG9lcyBub3Qgc3VmZmljZSBpZiB3ZSBmb2N1cyBhbmQgYmx1ciBzeW5jaHJvbm91c2x5LlxuICAgIC8vIFJlYWN0IHdvdWxkbid0IGhhdmUgdGltZSB0byB0cmlnZ2VyIGEgcmUtcmVuZGVyIHNvIGBmb2N1c1Zpc2libGVgIHdvdWxkIGJlIHN0YWxlLlxuICAgIC8vIElkZWFsbHkgd2Ugd291bGQgYWRqdXN0IGBpc0ZvY3VzVmlzaWJsZShldmVudClgIHRvIGxvb2sgYXQgYHJlbGF0ZWRUYXJnZXRgIGZvciBibHVyIGV2ZW50cy5cbiAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayBpbiBJRTExIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM3NTFcbiAgICAvLyBUT0RPOiBjaGVjayBhZ2FpbiBpZiBSZWFjdCByZWxlYXNlcyB0aGVpciBpbnRlcm5hbCBjaGFuZ2VzIHRvIGZvY3VzIGV2ZW50IGhhbmRsaW5nIChodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTE4NikuXG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIFRvIGRldGVjdCBhIHRhYi93aW5kb3cgc3dpdGNoLCB3ZSBsb29rIGZvciBhIGJsdXIgZXZlbnQgZm9sbG93ZWRcbiAgICAgIC8vIHJhcGlkbHkgYnkgYSB2aXNpYmlsaXR5IGNoYW5nZS5cbiAgICAgIC8vIElmIHdlIGRvbid0IHNlZSBhIHZpc2liaWxpdHkgY2hhbmdlIHdpdGhpbiAxMDBtcywgaXQncyBwcm9iYWJseSBhXG4gICAgICAvLyByZWd1bGFyIGZvY3VzIGNoYW5nZS5cbiAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gdHJ1ZTtcbiAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dC5zdGFydCgxMDAsICgpID0+IHtcbiAgICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGlmIGEgYmx1ciBldmVudCBpcyBmaXJlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlKGV2ZW50KSkge1xuICAgICAgaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmXG4gIH07XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMgPSB1bmRlZmluZWQpIHtcbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNsb3RzKS5mb3JFYWNoKFxuICAvLyBgT2JqZWN0LmtleXMoc2xvdHMpYCBjYW4ndCBiZSB3aWRlciB0aGFuIGBUYCBiZWNhdXNlIHdlIGluZmVyIGBUYCBmcm9tIGBzbG90c2AuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L3B1bGwvMTIyNTMjaXNzdWVjb21tZW50LTI2MzEzMjIwOFxuICBzbG90ID0+IHtcbiAgICBvdXRwdXRbc2xvdF0gPSBzbG90c1tzbG90XS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHV0aWxpdHlDbGFzcyA9IGdldFV0aWxpdHlDbGFzcyhrZXkpO1xuICAgICAgICBpZiAodXRpbGl0eUNsYXNzICE9PSAnJykge1xuICAgICAgICAgIGFjYy5wdXNoKHV0aWxpdHlDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsYXNzZXMgJiYgY2xhc3Nlc1trZXldKSB7XG4gICAgICAgICAgYWNjLnB1c2goY2xhc3Nlc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSkuam9pbignICcpO1xuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn0iLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNvbXBvbmVudFwiLCBcImRpcmVjdGlvblwiLCBcInNwYWNpbmdcIiwgXCJkaXZpZGVyXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ1c2VGbGV4R2FwXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3lzdGVtU3R5bGVkIGZyb20gJy4uL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wc1N5c3RlbSBmcm9tICcuLi91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGV4dGVuZFN4UHJvcCB9IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyLCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5U3BhY2luZywgZ2V0VmFsdWUgfSBmcm9tICcuLi9zcGFjaW5nJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuLy8gd2lkZW5pbmcgVGhlbWUgdG8gYW55IHNvIHRoYXQgdGhlIGNvbnN1bWVyIGNhbiBvd24gdGhlIHRoZW1lIHN0cnVjdHVyZS5cbmNvbnN0IGRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQgPSBzeXN0ZW1TdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVN0YWNrJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KTtcbmZ1bmN0aW9uIHVzZVRoZW1lUHJvcHNEZWZhdWx0KHByb3BzKSB7XG4gIHJldHVybiB1c2VUaGVtZVByb3BzU3lzdGVtKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snLFxuICAgIGRlZmF1bHRUaGVtZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgc2VwYXJhdG9yIFJlYWN0IGVsZW1lbnQgaW50ZXJzcGVyc2VkIGJldHdlZW5cbiAqIGVhY2ggUmVhY3Qgbm9kZSBvZiB0aGUgaW5wdXQgY2hpbGRyZW4uXG4gKlxuICogPiBqb2luQ2hpbGRyZW4oWzEsMiwzXSwgMClcbiAqIFsxLDAsMiwwLDNdXG4gKi9cbmZ1bmN0aW9uIGpvaW5DaGlsZHJlbihjaGlsZHJlbiwgc2VwYXJhdG9yKSB7XG4gIGNvbnN0IGNoaWxkcmVuQXJyYXkgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBjaGlsZHJlbkFycmF5LnJlZHVjZSgob3V0cHV0LCBjaGlsZCwgaW5kZXgpID0+IHtcbiAgICBvdXRwdXQucHVzaChjaGlsZCk7XG4gICAgaWYgKGluZGV4IDwgY2hpbGRyZW5BcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICBvdXRwdXQucHVzaCggLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChzZXBhcmF0b3IsIHtcbiAgICAgICAga2V5OiBgc2VwYXJhdG9yLSR7aW5kZXh9YFxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LCBbXSk7XG59XG5jb25zdCBnZXRTaWRlRnJvbURpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PiB7XG4gIHJldHVybiB7XG4gICAgcm93OiAnTGVmdCcsXG4gICAgJ3Jvdy1yZXZlcnNlJzogJ1JpZ2h0JyxcbiAgICBjb2x1bW46ICdUb3AnLFxuICAgICdjb2x1bW4tcmV2ZXJzZSc6ICdCb3R0b20nXG4gIH1bZGlyZWN0aW9uXTtcbn07XG5leHBvcnQgY29uc3Qgc3R5bGUgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4ge1xuICBsZXQgc3R5bGVzID0gX2V4dGVuZHMoe1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJ1xuICB9LCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgdGhlbWVcbiAgfSwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgIHZhbHVlczogb3duZXJTdGF0ZS5kaXJlY3Rpb24sXG4gICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICB9KSwgcHJvcFZhbHVlID0+ICh7XG4gICAgZmxleERpcmVjdGlvbjogcHJvcFZhbHVlXG4gIH0pKSk7XG4gIGlmIChvd25lclN0YXRlLnNwYWNpbmcpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSk7XG4gICAgY29uc3QgYmFzZSA9IE9iamVjdC5rZXlzKHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcykucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3duZXJTdGF0ZS5zcGFjaW5nID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLnNwYWNpbmdbYnJlYWtwb2ludF0gIT0gbnVsbCB8fCB0eXBlb2Ygb3duZXJTdGF0ZS5kaXJlY3Rpb24gPT09ICdvYmplY3QnICYmIG93bmVyU3RhdGUuZGlyZWN0aW9uW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgICAgYWNjW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogb3duZXJTdGF0ZS5kaXJlY3Rpb24sXG4gICAgICBiYXNlXG4gICAgfSk7XG4gICAgY29uc3Qgc3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogb3duZXJTdGF0ZS5zcGFjaW5nLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgZGlyZWN0aW9uVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXMoZGlyZWN0aW9uVmFsdWVzKS5mb3JFYWNoKChicmVha3BvaW50LCBpbmRleCwgYnJlYWtwb2ludHMpID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uVmFsdWUgPSBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF07XG4gICAgICAgIGlmICghZGlyZWN0aW9uVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0RpcmVjdGlvblZhbHVlID0gaW5kZXggPiAwID8gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRzW2luZGV4IC0gMV1dIDogJ2NvbHVtbic7XG4gICAgICAgICAgZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdID0gcHJldmlvdXNEaXJlY3Rpb25WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIGlmIChvd25lclN0YXRlLnVzZUZsZXhHYXApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBUaGUgdXNlRmxleEdhcD17ZmFsc2V9IGltcGxlbWVudCByZWxpZXMgb24gZWFjaCBjaGlsZCB0byBnaXZlIHVwIGNvbnRyb2wgb2YgdGhlIG1hcmdpbi5cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZXNldCB0aGUgbWFyZ2luIHRvIGF2b2lkIGRvdWJsZSBzcGFjaW5nLlxuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIH0sXG4gICAgICAgICcmID4gOm5vdChzdHlsZSkgfiA6bm90KHN0eWxlKSc6IHtcbiAgICAgICAgICBbYG1hcmdpbiR7Z2V0U2lkZUZyb21EaXJlY3Rpb24oYnJlYWtwb2ludCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA6IG93bmVyU3RhdGUuZGlyZWN0aW9uKX1gXTogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIHN0eWxlcyA9IGRlZXBtZXJnZShzdHlsZXMsIGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgc3BhY2luZ1ZhbHVlcywgc3R5bGVGcm9tUHJvcFZhbHVlKSk7XG4gIH1cbiAgc3R5bGVzID0gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIodGhlbWUuYnJlYWtwb2ludHMsIHN0eWxlcyk7XG4gIHJldHVybiBzdHlsZXM7XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3RhY2sob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgYWRkaW5nIGN1c3RvbSBzdHlsZWQgZm4gKGZvciBleGFtcGxlIGZvciBjdXN0b20gc3ggc3R5bGUgZnVuY3Rpb24pXG4gICAgY3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCxcbiAgICB1c2VUaGVtZVByb3BzID0gdXNlVGhlbWVQcm9wc0RlZmF1bHQsXG4gICAgY29tcG9uZW50TmFtZSA9ICdNdWlTdGFjaydcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gKCkgPT4ge1xuICAgIGNvbnN0IHNsb3RzID0ge1xuICAgICAgcm9vdDogWydyb290J11cbiAgICB9O1xuICAgIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgc2xvdCA9PiBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90KSwge30pO1xuICB9O1xuICBjb25zdCBTdGFja1Jvb3QgPSBjcmVhdGVTdHlsZWRDb21wb25lbnQoc3R5bGUpO1xuICBjb25zdCBTdGFjayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyaWQoaW5Qcm9wcywgcmVmKSB7XG4gICAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoaW5Qcm9wcyk7XG4gICAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AodGhlbWVQcm9wcyk7IC8vIGBjb2xvcmAgdHlwZSBjb25mbGljdHMgd2l0aCBodG1sIGNvbG9yIGF0dHJpYnV0ZS5cbiAgICBjb25zdCB7XG4gICAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgICBkaXJlY3Rpb24gPSAnY29sdW1uJyxcbiAgICAgICAgc3BhY2luZyA9IDAsXG4gICAgICAgIGRpdmlkZXIsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHVzZUZsZXhHYXAgPSBmYWxzZVxuICAgICAgfSA9IHByb3BzLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgICBjb25zdCBvd25lclN0YXRlID0ge1xuICAgICAgZGlyZWN0aW9uLFxuICAgICAgc3BhY2luZyxcbiAgICAgIHVzZUZsZXhHYXBcbiAgICB9O1xuICAgIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3NlcygpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTdGFja1Jvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBkaXZpZGVyID8gam9pbkNoaWxkcmVuKGNoaWxkcmVuLCBkaXZpZGVyKSA6IGNoaWxkcmVuXG4gICAgfSkpO1xuICB9KTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3RhY2sucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9IDogdm9pZCAwO1xuICByZXR1cm4gU3RhY2s7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwibWl4aW5zXCIsIFwic3BhY2luZ1wiLCBcInBhbGV0dGVcIiwgXCJ0cmFuc2l0aW9uc1wiLCBcInR5cG9ncmFwaHlcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCwgeyB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgYXMgZGVmYXVsdFN4Q29uZmlnIH0gZnJvbSAnQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBzeXN0ZW1DcmVhdGVUaGVtZSBmcm9tICdAbXVpL3N5c3RlbS9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgY3JlYXRlTWl4aW5zIGZyb20gJy4vY3JlYXRlTWl4aW5zJztcbmltcG9ydCBjcmVhdGVQYWxldHRlIGZyb20gJy4vY3JlYXRlUGFsZXR0ZSc7XG5pbXBvcnQgY3JlYXRlVHlwb2dyYXBoeSBmcm9tICcuL2NyZWF0ZVR5cG9ncmFwaHknO1xuaW1wb3J0IHNoYWRvd3MgZnJvbSAnLi9zaGFkb3dzJztcbmltcG9ydCBjcmVhdGVUcmFuc2l0aW9ucyBmcm9tICcuL2NyZWF0ZVRyYW5zaXRpb25zJztcbmltcG9ydCB6SW5kZXggZnJvbSAnLi96SW5kZXgnO1xuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1peGluczogbWl4aW5zSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgdHJhbnNpdGlvbnM6IHRyYW5zaXRpb25zSW5wdXQgPSB7fSxcbiAgICAgIHR5cG9ncmFwaHk6IHR5cG9ncmFwaHlJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBpZiAob3B0aW9ucy52YXJzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFxcYHZhcnNcXGAgaXMgYSBwcml2YXRlIGZpZWxkIHVzZWQgZm9yIENTUyB2YXJpYWJsZXMgc3VwcG9ydC5cblBsZWFzZSB1c2UgYW5vdGhlciBuYW1lLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDE4KSk7XG4gIH1cbiAgY29uc3QgcGFsZXR0ZSA9IGNyZWF0ZVBhbGV0dGUocGFsZXR0ZUlucHV0KTtcbiAgY29uc3Qgc3lzdGVtVGhlbWUgPSBzeXN0ZW1DcmVhdGVUaGVtZShvcHRpb25zKTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHN5c3RlbVRoZW1lLCB7XG4gICAgbWl4aW5zOiBjcmVhdGVNaXhpbnMoc3lzdGVtVGhlbWUuYnJlYWtwb2ludHMsIG1peGluc0lucHV0KSxcbiAgICBwYWxldHRlLFxuICAgIC8vIERvbid0IHVzZSBbLi4uc2hhZG93c10gdW50aWwgeW91J3ZlIHZlcmlmaWVkIGl0cyB0cmFuc3BpbGVkIGNvZGUgaXMgbm90IGludm9raW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbC5cbiAgICBzaGFkb3dzOiBzaGFkb3dzLnNsaWNlKCksXG4gICAgdHlwb2dyYXBoeTogY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5SW5wdXQpLFxuICAgIHRyYW5zaXRpb25zOiBjcmVhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0lucHV0KSxcbiAgICB6SW5kZXg6IF9leHRlbmRzKHt9LCB6SW5kZXgpXG4gIH0pO1xuICBtdWlUaGVtZSA9IGRlZXBtZXJnZShtdWlUaGVtZSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUT0RPIHY2OiBSZWZhY3RvciB0byB1c2UgZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyBmcm9tIEBtdWkvdXRpbHMgb25jZSBgcmVhZE9ubHlgIHN0YXRlIGNsYXNzIGlzIHVzZWQgaW4gUmF0aW5nIGNvbXBvbmVudC5cbiAgICBjb25zdCBzdGF0ZUNsYXNzZXMgPSBbJ2FjdGl2ZScsICdjaGVja2VkJywgJ2NvbXBsZXRlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdleHBhbmRlZCcsICdmb2N1c2VkJywgJ2ZvY3VzVmlzaWJsZScsICdyZXF1aXJlZCcsICdzZWxlY3RlZCddO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgbGV0IGtleTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIGZvciAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlW2tleV07XG4gICAgICAgIGlmIChzdGF0ZUNsYXNzZXMuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJycsIGtleSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgJHtjb21wb25lbnR9XFxgIGNvbXBvbmVudCBpbmNyZWFzZXMgYCArIGB0aGUgQ1NTIHNwZWNpZmljaXR5IG9mIHRoZSBcXGAke2tleX1cXGAgaW50ZXJuYWwgc3RhdGUuYCwgJ1lvdSBjYW4gbm90IG92ZXJyaWRlIGl0IGxpa2UgdGhpczogJywgSlNPTi5zdHJpbmdpZnkobm9kZSwgbnVsbCwgMiksICcnLCBgSW5zdGVhZCwgeW91IG5lZWQgdG8gdXNlIHRoZSAnJi4ke3N0YXRlQ2xhc3N9JyBzeW50YXg6YCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICByb290OiB7XG4gICAgICAgICAgICAgICAgW2AmLiR7c3RhdGVDbGFzc31gXTogY2hpbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbnVsbCwgMiksICcnLCAnaHR0cHM6Ly9tdWkuY29tL3Ivc3RhdGUtY2xhc3Nlcy1ndWlkZSddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdHlsZSB0byBwcmV2ZW50IGdsb2JhbCBjb25mbGljdHMuXG4gICAgICAgICAgbm9kZVtrZXldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKG11aVRoZW1lLmNvbXBvbmVudHMpLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gbXVpVGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzICYmIGNvbXBvbmVudC5pbmRleE9mKCdNdWknKSA9PT0gMCkge1xuICAgICAgICB0cmF2ZXJzZShzdHlsZU92ZXJyaWRlcywgY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmxldCB3YXJuZWRPbmNlID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVpVGhlbWUoLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghd2FybmVkT25jZSkge1xuICAgICAgd2FybmVkT25jZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiB0aGUgY3JlYXRlTXVpVGhlbWUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gY3JlYXRlVGhlbWUuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVUaGVtZSguLi5hcmdzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJtb2RlXCIsIFwiY29udHJhc3RUaHJlc2hvbGRcIiwgXCJ0b25hbE9mZnNldFwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IHsgZGFya2VuLCBnZXRDb250cmFzdFJhdGlvLCBsaWdodGVuIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgY29tbW9uIGZyb20gJy4uL2NvbG9ycy9jb21tb24nO1xuaW1wb3J0IGdyZXkgZnJvbSAnLi4vY29sb3JzL2dyZXknO1xuaW1wb3J0IHB1cnBsZSBmcm9tICcuLi9jb2xvcnMvcHVycGxlJztcbmltcG9ydCByZWQgZnJvbSAnLi4vY29sb3JzL3JlZCc7XG5pbXBvcnQgb3JhbmdlIGZyb20gJy4uL2NvbG9ycy9vcmFuZ2UnO1xuaW1wb3J0IGJsdWUgZnJvbSAnLi4vY29sb3JzL2JsdWUnO1xuaW1wb3J0IGxpZ2h0Qmx1ZSBmcm9tICcuLi9jb2xvcnMvbGlnaHRCbHVlJztcbmltcG9ydCBncmVlbiBmcm9tICcuLi9jb2xvcnMvZ3JlZW4nO1xuZXhwb3J0IGNvbnN0IGxpZ2h0ID0ge1xuICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIHRleHQuXG4gIHRleHQ6IHtcbiAgICAvLyBUaGUgbW9zdCBpbXBvcnRhbnQgdGV4dC5cbiAgICBwcmltYXJ5OiAncmdiYSgwLCAwLCAwLCAwLjg3KScsXG4gICAgLy8gU2Vjb25kYXJ5IHRleHQuXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgwLCAwLCAwLCAwLjYpJyxcbiAgICAvLyBEaXNhYmxlZCB0ZXh0IGhhdmUgZXZlbiBsb3dlciB2aXN1YWwgcHJvbWluZW5jZS5cbiAgICBkaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4zOCknXG4gIH0sXG4gIC8vIFRoZSBjb2xvciB1c2VkIHRvIGRpdmlkZSBkaWZmZXJlbnQgZWxlbWVudHMuXG4gIGRpdmlkZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgLy8gVGhlIGJhY2tncm91bmQgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIHN1cmZhY2VzLlxuICAvLyBDb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZXNlIHZhbHVlcyBpcyBpbXBvcnRhbnQuXG4gIGJhY2tncm91bmQ6IHtcbiAgICBwYXBlcjogY29tbW9uLndoaXRlLFxuICAgIGRlZmF1bHQ6IGNvbW1vbi53aGl0ZVxuICB9LFxuICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIGFjdGlvbiBlbGVtZW50cy5cbiAgYWN0aW9uOiB7XG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGFjdGl2ZSBhY3Rpb24gbGlrZSBhbiBpY29uIGJ1dHRvbi5cbiAgICBhY3RpdmU6ICdyZ2JhKDAsIDAsIDAsIDAuNTQpJyxcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gaG92ZXJlZCBhY3Rpb24uXG4gICAgaG92ZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMDQpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDQsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgc2VsZWN0ZWQgYWN0aW9uLlxuICAgIHNlbGVjdGVkOiAncmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjA4LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4yNiknLFxuICAgIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjEyXG4gIH1cbn07XG5leHBvcnQgY29uc3QgZGFyayA9IHtcbiAgdGV4dDoge1xuICAgIHByaW1hcnk6IGNvbW1vbi53aGl0ZSxcbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJyxcbiAgICBpY29uOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJ1xuICB9LFxuICBkaXZpZGVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gIGJhY2tncm91bmQ6IHtcbiAgICBwYXBlcjogJyMxMjEyMTInLFxuICAgIGRlZmF1bHQ6ICcjMTIxMjEyJ1xuICB9LFxuICBhY3Rpb246IHtcbiAgICBhY3RpdmU6IGNvbW1vbi53aGl0ZSxcbiAgICBob3ZlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wOCxcbiAgICBzZWxlY3RlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNiknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4xNixcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKScsXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMjRcbiAgfVxufTtcbmZ1bmN0aW9uIGFkZExpZ2h0T3JEYXJrKGludGVudCwgZGlyZWN0aW9uLCBzaGFkZSwgdG9uYWxPZmZzZXQpIHtcbiAgY29uc3QgdG9uYWxPZmZzZXRMaWdodCA9IHRvbmFsT2Zmc2V0LmxpZ2h0IHx8IHRvbmFsT2Zmc2V0O1xuICBjb25zdCB0b25hbE9mZnNldERhcmsgPSB0b25hbE9mZnNldC5kYXJrIHx8IHRvbmFsT2Zmc2V0ICogMS41O1xuICBpZiAoIWludGVudFtkaXJlY3Rpb25dKSB7XG4gICAgaWYgKGludGVudC5oYXNPd25Qcm9wZXJ0eShzaGFkZSkpIHtcbiAgICAgIGludGVudFtkaXJlY3Rpb25dID0gaW50ZW50W3NoYWRlXTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xpZ2h0Jykge1xuICAgICAgaW50ZW50LmxpZ2h0ID0gbGlnaHRlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXRMaWdodCk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkYXJrJykge1xuICAgICAgaW50ZW50LmRhcmsgPSBkYXJrZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0RGFyayk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0UHJpbWFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGJsdWVbMjAwXSxcbiAgICAgIGxpZ2h0OiBibHVlWzUwXSxcbiAgICAgIGRhcms6IGJsdWVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBibHVlWzcwMF0sXG4gICAgbGlnaHQ6IGJsdWVbNDAwXSxcbiAgICBkYXJrOiBibHVlWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBwdXJwbGVbMjAwXSxcbiAgICAgIGxpZ2h0OiBwdXJwbGVbNTBdLFxuICAgICAgZGFyazogcHVycGxlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcHVycGxlWzUwMF0sXG4gICAgbGlnaHQ6IHB1cnBsZVszMDBdLFxuICAgIGRhcms6IHB1cnBsZVs3MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0RXJyb3IobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiByZWRbNTAwXSxcbiAgICAgIGxpZ2h0OiByZWRbMzAwXSxcbiAgICAgIGRhcms6IHJlZFs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHJlZFs3MDBdLFxuICAgIGxpZ2h0OiByZWRbNDAwXSxcbiAgICBkYXJrOiByZWRbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEluZm8obW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBsaWdodEJsdWVbNDAwXSxcbiAgICAgIGxpZ2h0OiBsaWdodEJsdWVbMzAwXSxcbiAgICAgIGRhcms6IGxpZ2h0Qmx1ZVs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGxpZ2h0Qmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBsaWdodEJsdWVbNTAwXSxcbiAgICBkYXJrOiBsaWdodEJsdWVbOTAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBncmVlbls0MDBdLFxuICAgICAgbGlnaHQ6IGdyZWVuWzMwMF0sXG4gICAgICBkYXJrOiBncmVlbls3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGdyZWVuWzgwMF0sXG4gICAgbGlnaHQ6IGdyZWVuWzUwMF0sXG4gICAgZGFyazogZ3JlZW5bOTAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBvcmFuZ2VbNDAwXSxcbiAgICAgIGxpZ2h0OiBvcmFuZ2VbMzAwXSxcbiAgICAgIGRhcms6IG9yYW5nZVs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46ICcjZWQ2YzAyJyxcbiAgICAvLyBjbG9zZXN0IHRvIG9yYW5nZVs4MDBdIHRoYXQgcGFzcyAzOjEuXG4gICAgbGlnaHQ6IG9yYW5nZVs1MDBdLFxuICAgIGRhcms6IG9yYW5nZVs5MDBdXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVQYWxldHRlKHBhbGV0dGUpIHtcbiAgY29uc3Qge1xuICAgICAgbW9kZSA9ICdsaWdodCcsXG4gICAgICBjb250cmFzdFRocmVzaG9sZCA9IDMsXG4gICAgICB0b25hbE9mZnNldCA9IDAuMlxuICAgIH0gPSBwYWxldHRlLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocGFsZXR0ZSwgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcHJpbWFyeSA9IHBhbGV0dGUucHJpbWFyeSB8fCBnZXREZWZhdWx0UHJpbWFyeShtb2RlKTtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gcGFsZXR0ZS5zZWNvbmRhcnkgfHwgZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlKTtcbiAgY29uc3QgZXJyb3IgPSBwYWxldHRlLmVycm9yIHx8IGdldERlZmF1bHRFcnJvcihtb2RlKTtcbiAgY29uc3QgaW5mbyA9IHBhbGV0dGUuaW5mbyB8fCBnZXREZWZhdWx0SW5mbyhtb2RlKTtcbiAgY29uc3Qgc3VjY2VzcyA9IHBhbGV0dGUuc3VjY2VzcyB8fCBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlKTtcbiAgY29uc3Qgd2FybmluZyA9IHBhbGV0dGUud2FybmluZyB8fCBnZXREZWZhdWx0V2FybmluZyhtb2RlKTtcblxuICAvLyBVc2UgdGhlIHNhbWUgbG9naWMgYXNcbiAgLy8gQm9vdHN0cmFwOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi8xZDZlMzcxMGRkNDQ3ZGUxYTIwMGYyOWU4ZmE1MjFmOGEwOTA4ZjcwL3Njc3MvX2Z1bmN0aW9ucy5zY3NzI0w1OVxuICAvLyBhbmQgbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9hYzQ2Yjg4NjNjNGRhYjlmYzIyYzRjNjYyZGM2YmQxYjY1ZGQ2NTJmL3BhY2thZ2VzL21kYy10aGVtZS9fZnVuY3Rpb25zLnNjc3MjTDU0XG4gIGZ1bmN0aW9uIGdldENvbnRyYXN0VGV4dChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3QgY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBkYXJrLnRleHQucHJpbWFyeSkgPj0gY29udHJhc3RUaHJlc2hvbGQgPyBkYXJrLnRleHQucHJpbWFyeSA6IGxpZ2h0LnRleHQucHJpbWFyeTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgY29udHJhc3QgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGNvbnRyYXN0VGV4dCk7XG4gICAgICBpZiAoY29udHJhc3QgPCAzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBjb250cmFzdCByYXRpbyBvZiAke2NvbnRyYXN0fToxIGZvciAke2NvbnRyYXN0VGV4dH0gb24gJHtiYWNrZ3JvdW5kfWAsICdmYWxscyBiZWxvdyB0aGUgV0NBRyByZWNvbW1lbmRlZCBhYnNvbHV0ZSBtaW5pbXVtIGNvbnRyYXN0IHJhdGlvIG9mIDM6MS4nLCAnaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29udHJhc3RUZXh0O1xuICB9XG4gIGNvbnN0IGF1Z21lbnRDb2xvciA9ICh7XG4gICAgY29sb3IsXG4gICAgbmFtZSxcbiAgICBtYWluU2hhZGUgPSA1MDAsXG4gICAgbGlnaHRTaGFkZSA9IDMwMCxcbiAgICBkYXJrU2hhZGUgPSA3MDBcbiAgfSkgPT4ge1xuICAgIGNvbG9yID0gX2V4dGVuZHMoe30sIGNvbG9yKTtcbiAgICBpZiAoIWNvbG9yLm1haW4gJiYgY29sb3JbbWFpblNoYWRlXSkge1xuICAgICAgY29sb3IubWFpbiA9IGNvbG9yW21haW5TaGFkZV07XG4gICAgfVxuICAgIGlmICghY29sb3IuaGFzT3duUHJvcGVydHkoJ21haW4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5UaGUgY29sb3Igb2JqZWN0IG5lZWRzIHRvIGhhdmUgYSBcXGBtYWluXFxgIHByb3BlcnR5IG9yIGEgXFxgJHttYWluU2hhZGV9XFxgIHByb3BlcnR5LmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDExLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIG1haW5TaGFkZSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbG9yLm1haW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblxcYGNvbG9yLm1haW5cXGAgc2hvdWxkIGJlIGEgc3RyaW5nLCBidXQgXFxgJHtKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKX1cXGAgd2FzIHByb3ZpZGVkIGluc3RlYWQuXG5cbkRpZCB5b3UgaW50ZW5kIHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhcHByb2FjaGVzP1xuXG5pbXBvcnQgeyBncmVlbiB9IGZyb20gXCJAbXVpL21hdGVyaWFsL2NvbG9yc1wiO1xuXG5jb25zdCB0aGVtZTEgPSBjcmVhdGVUaGVtZSh7IHBhbGV0dGU6IHtcbiAgcHJpbWFyeTogZ3JlZW4sXG59IH0pO1xuXG5jb25zdCB0aGVtZTIgPSBjcmVhdGVUaGVtZSh7IHBhbGV0dGU6IHtcbiAgcHJpbWFyeTogeyBtYWluOiBncmVlbls1MDBdIH0sXG59IH0pO2AgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDEyLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIEpTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pKSk7XG4gICAgfVxuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnbGlnaHQnLCBsaWdodFNoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdkYXJrJywgZGFya1NoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgaWYgKCFjb2xvci5jb250cmFzdFRleHQpIHtcbiAgICAgIGNvbG9yLmNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0VGV4dChjb2xvci5tYWluKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9O1xuICBjb25zdCBtb2RlcyA9IHtcbiAgICBkYXJrLFxuICAgIGxpZ2h0XG4gIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCFtb2Rlc1ttb2RlXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgcGFsZXR0ZSBtb2RlIFxcYCR7bW9kZX1cXGAgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFsZXR0ZU91dHB1dCA9IGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgLy8gQSBjb2xsZWN0aW9uIG9mIGNvbW1vbiBjb2xvcnMuXG4gICAgY29tbW9uOiBfZXh0ZW5kcyh7fSwgY29tbW9uKSxcbiAgICAvLyBwcmV2ZW50IG11dGFibGUgb2JqZWN0LlxuICAgIC8vIFRoZSBwYWxldHRlIG1vZGUsIGNhbiBiZSBsaWdodCBvciBkYXJrLlxuICAgIG1vZGUsXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwcmltYXJ5IGludGVyZmFjZSBlbGVtZW50cyBmb3IgYSB1c2VyLlxuICAgIHByaW1hcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogcHJpbWFyeSxcbiAgICAgIG5hbWU6ICdwcmltYXJ5J1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgc2Vjb25kYXJ5IGludGVyZmFjZSBlbGVtZW50cyBmb3IgYSB1c2VyLlxuICAgIHNlY29uZGFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzZWNvbmRhcnksXG4gICAgICBuYW1lOiAnc2Vjb25kYXJ5JyxcbiAgICAgIG1haW5TaGFkZTogJ0E0MDAnLFxuICAgICAgbGlnaHRTaGFkZTogJ0EyMDAnLFxuICAgICAgZGFya1NoYWRlOiAnQTcwMCdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IGludGVyZmFjZSBlbGVtZW50cyB0aGF0IHRoZSB1c2VyIHNob3VsZCBiZSBtYWRlIGF3YXJlIG9mLlxuICAgIGVycm9yOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IGVycm9yLFxuICAgICAgbmFtZTogJ2Vycm9yJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFjdGlvbnMgb3IgaW1wb3J0YW50IG1lc3NhZ2VzLlxuICAgIHdhcm5pbmc6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogd2FybmluZyxcbiAgICAgIG5hbWU6ICd3YXJuaW5nJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBwcmVzZW50IGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyIHRoYXQgaXMgbmV1dHJhbCBhbmQgbm90IG5lY2Vzc2FyaWx5IGltcG9ydGFudC5cbiAgICBpbmZvOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IGluZm8sXG4gICAgICBuYW1lOiAnaW5mbydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhbiBhY3Rpb24gdGhhdCB1c2VyIHRyaWdnZXJlZC5cbiAgICBzdWNjZXNzOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHN1Y2Nlc3MsXG4gICAgICBuYW1lOiAnc3VjY2VzcydcbiAgICB9KSxcbiAgICAvLyBUaGUgZ3JleSBjb2xvcnMuXG4gICAgZ3JleSxcbiAgICAvLyBVc2VkIGJ5IGBnZXRDb250cmFzdFRleHQoKWAgdG8gbWF4aW1pemUgdGhlIGNvbnRyYXN0IGJldHdlZW5cbiAgICAvLyB0aGUgYmFja2dyb3VuZCBhbmQgdGhlIHRleHQuXG4gICAgY29udHJhc3RUaHJlc2hvbGQsXG4gICAgLy8gVGFrZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIGFuZCByZXR1cm5zIHRoZSB0ZXh0IGNvbG9yIHRoYXQgbWF4aW1pemVzIHRoZSBjb250cmFzdC5cbiAgICBnZXRDb250cmFzdFRleHQsXG4gICAgLy8gR2VuZXJhdGUgYSByaWNoIGNvbG9yIG9iamVjdC5cbiAgICBhdWdtZW50Q29sb3IsXG4gICAgLy8gVXNlZCBieSB0aGUgZnVuY3Rpb25zIGJlbG93IHRvIHNoaWZ0IGEgY29sb3IncyBsdW1pbmFuY2UgYnkgYXBwcm94aW1hdGVseVxuICAgIC8vIHR3byBpbmRleGVzIHdpdGhpbiBpdHMgdG9uYWwgcGFsZXR0ZS5cbiAgICAvLyBFLmcuLCBzaGlmdCBmcm9tIFJlZCA1MDAgdG8gUmVkIDMwMCBvciBSZWQgNzAwLlxuICAgIHRvbmFsT2Zmc2V0XG4gIH0sIG1vZGVzW21vZGVdKSwgb3RoZXIpO1xuICByZXR1cm4gcGFsZXR0ZU91dHB1dDtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImZvbnRGYW1pbHlcIiwgXCJmb250U2l6ZVwiLCBcImZvbnRXZWlnaHRMaWdodFwiLCBcImZvbnRXZWlnaHRSZWd1bGFyXCIsIFwiZm9udFdlaWdodE1lZGl1bVwiLCBcImZvbnRXZWlnaHRCb2xkXCIsIFwiaHRtbEZvbnRTaXplXCIsIFwiYWxsVmFyaWFudHNcIiwgXCJweFRvUmVtXCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5mdW5jdGlvbiByb3VuZCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDFlNSkgLyAxZTU7XG59XG5jb25zdCBjYXNlQWxsQ2FwcyA9IHtcbiAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbn07XG5jb25zdCBkZWZhdWx0Rm9udEZhbWlseSA9ICdcIlJvYm90b1wiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIHNhbnMtc2VyaWYnO1xuXG4vKipcbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS90aGUtdHlwZS1zeXN0ZW0uaHRtbH1cbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS91bmRlcnN0YW5kaW5nLXR5cG9ncmFwaHkuaHRtbH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5KSB7XG4gIGNvbnN0IF9yZWYgPSB0eXBlb2YgdHlwb2dyYXBoeSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cG9ncmFwaHkocGFsZXR0ZSkgOiB0eXBvZ3JhcGh5LFxuICAgIHtcbiAgICAgIGZvbnRGYW1pbHkgPSBkZWZhdWx0Rm9udEZhbWlseSxcbiAgICAgIC8vIFRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBvZiB0aGUgTWF0ZXJpYWwgU3BlY2lmaWNhdGlvbi5cbiAgICAgIGZvbnRTaXplID0gMTQsXG4gICAgICAvLyBweFxuICAgICAgZm9udFdlaWdodExpZ2h0ID0gMzAwLFxuICAgICAgZm9udFdlaWdodFJlZ3VsYXIgPSA0MDAsXG4gICAgICBmb250V2VpZ2h0TWVkaXVtID0gNTAwLFxuICAgICAgZm9udFdlaWdodEJvbGQgPSA3MDAsXG4gICAgICAvLyBUZWxsIE1VSSB3aGF0J3MgdGhlIGZvbnQtc2l6ZSBvbiB0aGUgaHRtbCBlbGVtZW50LlxuICAgICAgLy8gMTZweCBpcyB0aGUgZGVmYXVsdCBmb250LXNpemUgdXNlZCBieSBicm93c2Vycy5cbiAgICAgIGh0bWxGb250U2l6ZSA9IDE2LFxuICAgICAgLy8gQXBwbHkgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGFsbCB0aGUgdmFyaWFudHMuXG4gICAgICBhbGxWYXJpYW50cyxcbiAgICAgIHB4VG9SZW06IHB4VG9SZW0yXG4gICAgfSA9IF9yZWYsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgZm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBmb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaHRtbEZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgaHRtbEZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY29lZiA9IGZvbnRTaXplIC8gMTQ7XG4gIGNvbnN0IHB4VG9SZW0gPSBweFRvUmVtMiB8fCAoc2l6ZSA9PiBgJHtzaXplIC8gaHRtbEZvbnRTaXplICogY29lZn1yZW1gKTtcbiAgY29uc3QgYnVpbGRWYXJpYW50ID0gKGZvbnRXZWlnaHQsIHNpemUsIGxpbmVIZWlnaHQsIGxldHRlclNwYWNpbmcsIGNhc2luZykgPT4gX2V4dGVuZHMoe1xuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFdlaWdodCxcbiAgICBmb250U2l6ZTogcHhUb1JlbShzaXplKSxcbiAgICAvLyBVbml0bGVzcyBmb2xsb3dpbmcgaHR0cHM6Ly9tZXllcndlYi5jb20vZXJpYy90aG91Z2h0cy8yMDA2LzAyLzA4L3VuaXRsZXNzLWxpbmUtaGVpZ2h0cy9cbiAgICBsaW5lSGVpZ2h0XG4gIH0sIGZvbnRGYW1pbHkgPT09IGRlZmF1bHRGb250RmFtaWx5ID8ge1xuICAgIGxldHRlclNwYWNpbmc6IGAke3JvdW5kKGxldHRlclNwYWNpbmcgLyBzaXplKX1lbWBcbiAgfSA6IHt9LCBjYXNpbmcsIGFsbFZhcmlhbnRzKTtcbiAgY29uc3QgdmFyaWFudHMgPSB7XG4gICAgaDE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDk2LCAxLjE2NywgLTEuNSksXG4gICAgaDI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDYwLCAxLjIsIC0wLjUpLFxuICAgIGgzOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDQ4LCAxLjE2NywgMCksXG4gICAgaDQ6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMzQsIDEuMjM1LCAwLjI1KSxcbiAgICBoNTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAyNCwgMS4zMzQsIDApLFxuICAgIGg2OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMjAsIDEuNiwgMC4xNSksXG4gICAgc3VidGl0bGUxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjc1LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS41NywgMC4xKSxcbiAgICBib2R5MTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS41LCAwLjE1KSxcbiAgICBib2R5MjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNCwgMS40MywgMC4xNSksXG4gICAgYnV0dG9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNzUsIDAuNCwgY2FzZUFsbENhcHMpLFxuICAgIGNhcHRpb246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDEuNjYsIDAuNCksXG4gICAgb3ZlcmxpbmU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDIuNjYsIDEsIGNhc2VBbGxDYXBzKSxcbiAgICAvLyBUT0RPIHY2OiBSZW1vdmUgaGFuZGxpbmcgb2YgJ2luaGVyaXQnIHZhcmlhbnQgZnJvbSB0aGUgdGhlbWUgYXMgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGluIE1hdGVyaWFsIFVJJ3MgVHlwb2dyYXBoeSBjb21wb25lbnQuIEFsc28sIHJlbWVtYmVyIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRlZCB0eXBlcy5cbiAgICBpbmhlcml0OiB7XG4gICAgICBmb250RmFtaWx5OiAnaW5oZXJpdCcsXG4gICAgICBmb250V2VpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgbGluZUhlaWdodDogJ2luaGVyaXQnLFxuICAgICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnXG4gICAgfVxuICB9O1xuICByZXR1cm4gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICBodG1sRm9udFNpemUsXG4gICAgcHhUb1JlbSxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHRMaWdodCxcbiAgICBmb250V2VpZ2h0UmVndWxhcixcbiAgICBmb250V2VpZ2h0TWVkaXVtLFxuICAgIGZvbnRXZWlnaHRCb2xkXG4gIH0sIHZhcmlhbnRzKSwgb3RoZXIsIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwXG4gIH0pO1xufSIsICJjb25zdCBzaGFkb3dLZXlVbWJyYU9wYWNpdHkgPSAwLjI7XG5jb25zdCBzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHkgPSAwLjE0O1xuY29uc3Qgc2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHkgPSAwLjEyO1xuZnVuY3Rpb24gY3JlYXRlU2hhZG93KC4uLnB4KSB7XG4gIHJldHVybiBbYCR7cHhbMF19cHggJHtweFsxXX1weCAke3B4WzJdfXB4ICR7cHhbM119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbNF19cHggJHtweFs1XX1weCAke3B4WzZdfXB4ICR7cHhbN119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVBlbnVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbOF19cHggJHtweFs5XX1weCAke3B4WzEwXX1weCAke3B4WzExXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHl9KWBdLmpvaW4oJywnKTtcbn1cblxuLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9iZTg3NDdmOTQ1NzQ2NjljYjVlN2FkZDFhN2M1NGZhNDFhODljZWM3L3BhY2thZ2VzL21kYy1lbGV2YXRpb24vX3ZhcmlhYmxlcy5zY3NzXG5jb25zdCBzaGFkb3dzID0gWydub25lJywgY3JlYXRlU2hhZG93KDAsIDIsIDEsIC0xLCAwLCAxLCAxLCAwLCAwLCAxLCAzLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDEsIC0yLCAwLCAyLCAyLCAwLCAwLCAxLCA1LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDMsIC0yLCAwLCAzLCA0LCAwLCAwLCAxLCA4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDIsIDQsIC0xLCAwLCA0LCA1LCAwLCAwLCAxLCAxMCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNSwgOCwgMCwgMCwgMSwgMTQsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDYsIDEwLCAwLCAwLCAxLCAxOCwgMCksIGNyZWF0ZVNoYWRvdygwLCA0LCA1LCAtMiwgMCwgNywgMTAsIDEsIDAsIDIsIDE2LCAxKSwgY3JlYXRlU2hhZG93KDAsIDUsIDUsIC0zLCAwLCA4LCAxMCwgMSwgMCwgMywgMTQsIDIpLCBjcmVhdGVTaGFkb3coMCwgNSwgNiwgLTMsIDAsIDksIDEyLCAxLCAwLCAzLCAxNiwgMiksIGNyZWF0ZVNoYWRvdygwLCA2LCA2LCAtMywgMCwgMTAsIDE0LCAxLCAwLCA0LCAxOCwgMyksIGNyZWF0ZVNoYWRvdygwLCA2LCA3LCAtNCwgMCwgMTEsIDE1LCAxLCAwLCA0LCAyMCwgMyksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTIsIDE3LCAyLCAwLCA1LCAyMiwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTMsIDE5LCAyLCAwLCA1LCAyNCwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA5LCAtNCwgMCwgMTQsIDIxLCAyLCAwLCA1LCAyNiwgNCksIGNyZWF0ZVNoYWRvdygwLCA4LCA5LCAtNSwgMCwgMTUsIDIyLCAyLCAwLCA2LCAyOCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMCwgLTUsIDAsIDE2LCAyNCwgMiwgMCwgNiwgMzAsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTEsIC01LCAwLCAxNywgMjYsIDIsIDAsIDYsIDMyLCA1KSwgY3JlYXRlU2hhZG93KDAsIDksIDExLCAtNSwgMCwgMTgsIDI4LCAyLCAwLCA3LCAzNCwgNiksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMiwgLTYsIDAsIDE5LCAyOSwgMiwgMCwgNywgMzYsIDYpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjAsIDMxLCAzLCAwLCA4LCAzOCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMSwgMzMsIDMsIDAsIDgsIDQwLCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxNCwgLTYsIDAsIDIyLCAzNSwgMywgMCwgOCwgNDIsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE0LCAtNywgMCwgMjMsIDM2LCAzLCAwLCA5LCA0NCwgOCksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTUsIC03LCAwLCAyNCwgMzgsIDMsIDAsIDksIDQ2LCA4KV07XG5leHBvcnQgZGVmYXVsdCBzaGFkb3dzOyIsICJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZHVyYXRpb25cIiwgXCJlYXNpbmdcIiwgXCJkZWxheVwiXTtcbi8vIEZvbGxvdyBodHRwczovL21hdGVyaWFsLmdvb2dsZS5jb20vbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1uYXR1cmFsLWVhc2luZy1jdXJ2ZXNcbi8vIHRvIGxlYXJuIHRoZSBjb250ZXh0IGluIHdoaWNoIGVhY2ggZWFzaW5nIHNob3VsZCBiZSB1c2VkLlxuZXhwb3J0IGNvbnN0IGVhc2luZyA9IHtcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gZWFzaW5nIGN1cnZlLlxuICBlYXNlSW5PdXQ6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBlbnRlciB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkgZnJvbSBvZmYtc2NyZWVuIGFuZFxuICAvLyBzbG93bHkgZGVjZWxlcmF0ZSB0byBhIHJlc3RpbmcgcG9pbnQuXG4gIGVhc2VPdXQ6ICdjdWJpYy1iZXppZXIoMC4wLCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBsZWF2ZSB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkuIFRoZXkgZG8gbm90IGRlY2VsZXJhdGUgd2hlbiBvZmYtc2NyZWVuLlxuICBlYXNlSW46ICdjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKScsXG4gIC8vIFRoZSBzaGFycCBjdXJ2ZSBpcyB1c2VkIGJ5IG9iamVjdHMgdGhhdCBtYXkgcmV0dXJuIHRvIHRoZSBzY3JlZW4gYXQgYW55IHRpbWUuXG4gIHNoYXJwOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSdcbn07XG5cbi8vIEZvbGxvdyBodHRwczovL20yLm1hdGVyaWFsLmlvL2d1aWRlbGluZXMvbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1jb21tb24tZHVyYXRpb25zXG4vLyB0byBsZWFybiB3aGVuIHVzZSB3aGF0IHRpbWluZ1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0ge1xuICBzaG9ydGVzdDogMTUwLFxuICBzaG9ydGVyOiAyMDAsXG4gIHNob3J0OiAyNTAsXG4gIC8vIG1vc3QgYmFzaWMgcmVjb21tZW5kZWQgdGltaW5nXG4gIHN0YW5kYXJkOiAzMDAsXG4gIC8vIHRoaXMgaXMgdG8gYmUgdXNlZCBpbiBjb21wbGV4IGFuaW1hdGlvbnNcbiAgY29tcGxleDogMzc1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBlbnRlcmluZyBzY3JlZW5cbiAgZW50ZXJpbmdTY3JlZW46IDIyNSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgbGVhdmluZyBzY3JlZW5cbiAgbGVhdmluZ1NjcmVlbjogMTk1XG59O1xuZnVuY3Rpb24gZm9ybWF0TXMobWlsbGlzZWNvbmRzKSB7XG4gIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbGxpc2Vjb25kcyl9bXNgO1xufVxuZnVuY3Rpb24gZ2V0QXV0b0hlaWdodER1cmF0aW9uKGhlaWdodCkge1xuICBpZiAoIWhlaWdodCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IGNvbnN0YW50ID0gaGVpZ2h0IC8gMzY7XG5cbiAgLy8gaHR0cHM6Ly93d3cud29sZnJhbWFscGhhLmNvbS9pbnB1dC8/aT0oNCslMkIrMTUrKisoeCslMkYrMzYrKSsqKiswLjI1KyUyQisoeCslMkYrMzYpKyUyRis1KSsqKzEwXG4gIHJldHVybiBNYXRoLnJvdW5kKCg0ICsgMTUgKiBjb25zdGFudCAqKiAwLjI1ICsgY29uc3RhbnQgLyA1KSAqIDEwKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25zKGlucHV0VHJhbnNpdGlvbnMpIHtcbiAgY29uc3QgbWVyZ2VkRWFzaW5nID0gX2V4dGVuZHMoe30sIGVhc2luZywgaW5wdXRUcmFuc2l0aW9ucy5lYXNpbmcpO1xuICBjb25zdCBtZXJnZWREdXJhdGlvbiA9IF9leHRlbmRzKHt9LCBkdXJhdGlvbiwgaW5wdXRUcmFuc2l0aW9ucy5kdXJhdGlvbik7XG4gIGNvbnN0IGNyZWF0ZSA9IChwcm9wcyA9IFsnYWxsJ10sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uT3B0aW9uID0gbWVyZ2VkRHVyYXRpb24uc3RhbmRhcmQsXG4gICAgICAgIGVhc2luZzogZWFzaW5nT3B0aW9uID0gbWVyZ2VkRWFzaW5nLmVhc2VJbk91dCxcbiAgICAgICAgZGVsYXkgPSAwXG4gICAgICB9ID0gb3B0aW9ucyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgaXNTdHJpbmcgPSB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgLy8gSUUxMSBzdXBwb3J0LCByZXBsYWNlIHdpdGggTnVtYmVyLmlzTmFOXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgICBjb25zdCBpc051bWJlciA9IHZhbHVlID0+ICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgICBpZiAoIWlzU3RyaW5nKHByb3BzKSAmJiAhQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcInByb3BzXCIgbXVzdCBiZSBhIHN0cmluZyBvciBBcnJheS4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdW1iZXIoZHVyYXRpb25PcHRpb24pICYmICFpc1N0cmluZyhkdXJhdGlvbk9wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBBcmd1bWVudCBcImR1cmF0aW9uXCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZyBidXQgZm91bmQgJHtkdXJhdGlvbk9wdGlvbn0uYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzU3RyaW5nKGVhc2luZ09wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImVhc2luZ1wiIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGRlbGF5KSAmJiAhaXNTdHJpbmcoZGVsYXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJkZWxheVwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFNlY29uZyBhcmd1bWVudCBvZiB0cmFuc2l0aW9uLmNyZWF0ZSBtdXN0IGJlIGFuIG9iamVjdC4nLCBcIkFyZ3VtZW50cyBzaG91bGQgYmUgZWl0aGVyIGBjcmVhdGUoJ3Byb3AxJywgb3B0aW9ucylgIG9yIGBjcmVhdGUoWydwcm9wMScsICdwcm9wMiddLCBvcHRpb25zKWBcIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKG90aGVyKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBVbnJlY29nbml6ZWQgYXJndW1lbnQocykgWyR7T2JqZWN0LmtleXMob3RoZXIpLmpvaW4oJywnKX1dLmApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkocHJvcHMpID8gcHJvcHMgOiBbcHJvcHNdKS5tYXAoYW5pbWF0ZWRQcm9wID0+IGAke2FuaW1hdGVkUHJvcH0gJHt0eXBlb2YgZHVyYXRpb25PcHRpb24gPT09ICdzdHJpbmcnID8gZHVyYXRpb25PcHRpb24gOiBmb3JtYXRNcyhkdXJhdGlvbk9wdGlvbil9ICR7ZWFzaW5nT3B0aW9ufSAke3R5cGVvZiBkZWxheSA9PT0gJ3N0cmluZycgPyBkZWxheSA6IGZvcm1hdE1zKGRlbGF5KX1gKS5qb2luKCcsJyk7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZ2V0QXV0b0hlaWdodER1cmF0aW9uLFxuICAgIGNyZWF0ZVxuICB9LCBpbnB1dFRyYW5zaXRpb25zLCB7XG4gICAgZWFzaW5nOiBtZXJnZWRFYXNpbmcsXG4gICAgZHVyYXRpb246IG1lcmdlZER1cmF0aW9uXG4gIH0pO1xufSIsICIvLyBXZSBuZWVkIHRvIGNlbnRyYWxpemUgdGhlIHpJbmRleCBkZWZpbml0aW9ucyBhcyB0aGV5IHdvcmtcbi8vIGxpa2UgZ2xvYmFsIHZhbHVlcyBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHpJbmRleCA9IHtcbiAgbW9iaWxlU3RlcHBlcjogMTAwMCxcbiAgZmFiOiAxMDUwLFxuICBzcGVlZERpYWw6IDEwNTAsXG4gIGFwcEJhcjogMTEwMCxcbiAgZHJhd2VyOiAxMjAwLFxuICBtb2RhbDogMTMwMCxcbiAgc25hY2tiYXI6IDE0MDAsXG4gIHRvb2x0aXA6IDE1MDBcbn07XG5leHBvcnQgZGVmYXVsdCB6SW5kZXg7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRUaGVtZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgc3lzdGVtVXNlVGhlbWVQcm9wcyBmcm9tICdAbXVpL3N5c3RlbS91c2VUaGVtZVByb3BzJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZVByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWVcbn0pIHtcbiAgcmV0dXJuIHN5c3RlbVVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzLFxuICAgIG5hbWUsXG4gICAgZGVmYXVsdFRoZW1lLFxuICAgIHRoZW1lSWQ6IFRIRU1FX0lEXG4gIH0pO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVTdHlsZWQsIHsgc2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9jcmVhdGVTdHlsZWQnO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBjb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJztcbmV4cG9ydCBjb25zdCBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCh7XG4gIHRoZW1lSWQ6IFRIRU1FX0lELFxuICBkZWZhdWx0VGhlbWUsXG4gIHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwgImltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5leHBvcnQgZGVmYXVsdCBjYXBpdGFsaXplOyIsICJpbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJ0BtdWkvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTdmdJY29uIGZyb20gJy4uL1N2Z0ljb24nO1xuXG4vKipcbiAqIFByaXZhdGUgbW9kdWxlIHJlc2VydmVkIGZvciBAbXVpIHBhY2thZ2VzLlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihwYXRoLCBkaXNwbGF5TmFtZSkge1xuICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIHJlZikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTdmdJY29uLCBfZXh0ZW5kcyh7XG4gICAgICBcImRhdGEtdGVzdGlkXCI6IGAke2Rpc3BsYXlOYW1lfUljb25gLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcywge1xuICAgICAgY2hpbGRyZW46IHBhdGhcbiAgICB9KSk7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBOZWVkIHRvIHNldCBgZGlzcGxheU5hbWVgIG9uIHRoZSBpbm5lciBjb21wb25lbnQgZm9yIFJlYWN0Lm1lbW8uXG4gICAgLy8gUmVhY3QgcHJpb3IgdG8gMTYuMTQgaWdub3JlcyBgZGlzcGxheU5hbWVgIG9uIHRoZSB3cmFwcGVyLlxuICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGAke2Rpc3BsYXlOYW1lfUljb25gO1xuICB9XG4gIENvbXBvbmVudC5tdWlOYW1lID0gU3ZnSWNvbi5tdWlOYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0Lm1lbW8oIC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKENvbXBvbmVudCkpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZm9udFNpemVcIiwgXCJodG1sQ29sb3JcIiwgXCJpbmhlcml0Vmlld0JveFwiLCBcInRpdGxlQWNjZXNzXCIsIFwidmlld0JveFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N2Z0ljb25DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZm9udFNpemUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY29sb3IgIT09ICdpbmhlcml0JyAmJiBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGBmb250U2l6ZSR7Y2FwaXRhbGl6ZShmb250U2l6ZSl9YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTdmdJY29uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBTdmdJY29uUm9vdCA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU3ZnSWNvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgc3R5bGVzW2Bmb250U2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmZvbnRTaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkdHJhbnNpdGlvbnMsIF90aGVtZSR0cmFuc2l0aW9ucyRjciwgX3RoZW1lJHRyYW5zaXRpb25zMiwgX3RoZW1lJHR5cG9ncmFwaHksIF90aGVtZSR0eXBvZ3JhcGh5JHB4VCwgX3RoZW1lJHR5cG9ncmFwaHkyLCBfdGhlbWUkdHlwb2dyYXBoeTIkcHgsIF90aGVtZSR0eXBvZ3JhcGh5MywgX3RoZW1lJHR5cG9ncmFwaHkzJHB4LCBfcGFsZXR0ZSRvd25lclN0YXRlJGMsIF9wYWxldHRlLCBfcGFsZXR0ZTIsIF9wYWxldHRlMztcbiAgcmV0dXJuIHtcbiAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxZW0nLFxuICAgIGhlaWdodDogJzFlbScsXG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgLy8gdGhlIDxzdmc+IHdpbGwgZGVmaW5lIHRoZSBwcm9wZXJ0eSB0aGF0IGhhcyBgY3VycmVudENvbG9yYFxuICAgIC8vIGUuZy4gaGVyb2ljb25zIHVzZXMgZmlsbD1cIm5vbmVcIiBhbmQgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICBmaWxsOiBvd25lclN0YXRlLmhhc1N2Z0FzQ2hpbGQgPyB1bmRlZmluZWQgOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zJGNyID0gX3RoZW1lJHRyYW5zaXRpb25zLmNyZWF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9ucyRjci5jYWxsKF90aGVtZSR0cmFuc2l0aW9ucywgJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogKF90aGVtZSR0cmFuc2l0aW9uczIgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyLnNob3J0ZXJcbiAgICB9KSxcbiAgICBmb250U2l6ZToge1xuICAgICAgaW5oZXJpdDogJ2luaGVyaXQnLFxuICAgICAgc21hbGw6ICgoX3RoZW1lJHR5cG9ncmFwaHkgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkzJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkzLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTMkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTMsIDM1KSkgfHwgJzIuMTg3NXJlbSdcbiAgICB9W293bmVyU3RhdGUuZm9udFNpemVdLFxuICAgIC8vIFRPRE8gdjUgZGVwcmVjYXRlLCB2NiByZW1vdmUgZm9yIHN4XG4gICAgY29sb3I6IChfcGFsZXR0ZSRvd25lclN0YXRlJGMgPSAoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW4pICE9IG51bGwgPyBfcGFsZXR0ZSRvd25lclN0YXRlJGMgOiB7XG4gICAgICBhY3Rpb246IChfcGFsZXR0ZTIgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUyID0gX3BhbGV0dGUyLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTMgPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3ZnSWNvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAnaW5oZXJpdCcsXG4gICAgICBjb21wb25lbnQgPSAnc3ZnJyxcbiAgICAgIGZvbnRTaXplID0gJ21lZGl1bScsXG4gICAgICBodG1sQ29sb3IsXG4gICAgICBpbmhlcml0Vmlld0JveCA9IGZhbHNlLFxuICAgICAgdGl0bGVBY2Nlc3MsXG4gICAgICB2aWV3Qm94ID0gJzAgMCAyNCAyNCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgaGFzU3ZnQXNDaGlsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2hpbGRyZW4udHlwZSA9PT0gJ3N2Zyc7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZm9udFNpemUsXG4gICAgaW5zdGFuY2VGb250U2l6ZTogaW5Qcm9wcy5mb250U2l6ZSxcbiAgICBpbmhlcml0Vmlld0JveCxcbiAgICB2aWV3Qm94LFxuICAgIGhhc1N2Z0FzQ2hpbGRcbiAgfSk7XG4gIGNvbnN0IG1vcmUgPSB7fTtcbiAgaWYgKCFpbmhlcml0Vmlld0JveCkge1xuICAgIG1vcmUudmlld0JveCA9IHZpZXdCb3g7XG4gIH1cbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFN2Z0ljb25Sb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGZvY3VzYWJsZTogXCJmYWxzZVwiLFxuICAgIGNvbG9yOiBodG1sQ29sb3IsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0aXRsZUFjY2VzcyA/IHVuZGVmaW5lZCA6IHRydWUsXG4gICAgcm9sZTogdGl0bGVBY2Nlc3MgPyAnaW1nJyA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZlxuICB9LCBtb3JlLCBvdGhlciwgaGFzU3ZnQXNDaGlsZCAmJiBjaGlsZHJlbi5wcm9wcywge1xuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IFtoYXNTdmdBc0NoaWxkID8gY2hpbGRyZW4ucHJvcHMuY2hpbGRyZW4gOiBjaGlsZHJlbiwgdGl0bGVBY2Nlc3MgPyAvKiNfX1BVUkVfXyovX2pzeChcInRpdGxlXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0aXRsZUFjY2Vzc1xuICAgIH0pIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdmdJY29uLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIE5vZGUgcGFzc2VkIGludG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBgaHRtbENvbG9yYCBwcm9wIHRvIGFwcGx5IGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2FjdGlvbicsICdkaXNhYmxlZCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgZm9udFNpemUgYXBwbGllZCB0byB0aGUgaWNvbi4gRGVmYXVsdHMgdG8gMjRweCwgYnV0IGNhbiBiZSBjb25maWd1cmUgdG8gaW5oZXJpdCBmb250IHNpemUuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBmb250U2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2xhcmdlJywgJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQXBwbGllcyBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBodG1sQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByb290IG5vZGUgd2lsbCBpbmhlcml0IHRoZSBjdXN0b20gYGNvbXBvbmVudGAncyB2aWV3Qm94IGFuZCB0aGUgYHZpZXdCb3hgXG4gICAqIHByb3Agd2lsbCBiZSBpZ25vcmVkLlxuICAgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byByZWZlcmVuY2UgYSBjdXN0b20gYGNvbXBvbmVudGAgYW5kIGhhdmUgYFN2Z0ljb25gIHBhc3MgdGhhdFxuICAgKiBgY29tcG9uZW50YCdzIHZpZXdCb3ggdG8gdGhlIHJvb3Qgbm9kZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGluaGVyaXRWaWV3Qm94OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaGFwZS1yZW5kZXJpbmcgYXR0cmlidXRlLiBUaGUgYmVoYXZpb3Igb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGlzIGRlc2NyaWJlZCBvbiB0aGVcbiAgICogW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zaGFwZS1yZW5kZXJpbmcpLlxuICAgKiBJZiB5b3UgYXJlIGhhdmluZyBpc3N1ZXMgd2l0aCBibHVycnkgaWNvbnMgeW91IHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGlzIHByb3AuXG4gICAqL1xuICBzaGFwZVJlbmRlcmluZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgdGl0bGUgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgaXQuXG4gICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkctYWNjZXNzLyNFcXVpdmFsZW50XG4gICAqL1xuICB0aXRsZUFjY2VzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gcmVkZWZpbmUgd2hhdCB0aGUgY29vcmRpbmF0ZXMgd2l0aG91dCB1bml0cyBtZWFuIGluc2lkZSBhbiBTVkcgZWxlbWVudC5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBTVkcgZWxlbWVudCBpcyA1MDAgKHdpZHRoKSBieSAyMDAgKGhlaWdodCksXG4gICAqIGFuZCB5b3UgcGFzcyB2aWV3Qm94PVwiMCAwIDUwIDIwXCIsXG4gICAqIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29vcmRpbmF0ZXMgaW5zaWRlIHRoZSBTVkcgd2lsbCBnbyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgKDAsMClcbiAgICogdG8gYm90dG9tIHJpZ2h0ICg1MCwyMCkgYW5kIGVhY2ggdW5pdCB3aWxsIGJlIHdvcnRoIDEwcHguXG4gICAqIEBkZWZhdWx0ICcwIDAgMjQgMjQnXG4gICAqL1xuICB2aWV3Qm94OiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuU3ZnSWNvbi5tdWlOYW1lID0gJ1N2Z0ljb24nO1xuZXhwb3J0IGRlZmF1bHQgU3ZnSWNvbjsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTdmdJY29uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlTdmdJY29uJywgc2xvdCk7XG59XG5jb25zdCBzdmdJY29uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVN2Z0ljb24nLCBbJ3Jvb3QnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9yQWN0aW9uJywgJ2NvbG9yRXJyb3InLCAnY29sb3JEaXNhYmxlZCcsICdmb250U2l6ZUluaGVyaXQnLCAnZm9udFNpemVTbWFsbCcsICdmb250U2l6ZU1lZGl1bScsICdmb250U2l6ZUxhcmdlJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3ZnSWNvbkNsYXNzZXM7IiwgImltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnQG11aS91dGlscy9pc011aUVsZW1lbnQnO1xuZXhwb3J0IGRlZmF1bHQgaXNNdWlFbGVtZW50OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VJZCBmcm9tICdAbXVpL3V0aWxzL3VzZUlkJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlkOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJ0BtdWkvdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5leHBvcnQgZGVmYXVsdCB1c2VDb250cm9sbGVkOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0BtdWkvdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJ0BtdWkvdXRpbHMvdXNlRm9ya1JlZic7XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JrUmVmOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICdAbXVpL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwgImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsICJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAiaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC5cbiAqXG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE1hcHBpbmcoY2hpbGRyZW4sIG1hcEZuKSB7XG4gIHZhciBtYXBwZXIgPSBmdW5jdGlvbiBtYXBwZXIoY2hpbGQpIHtcbiAgICByZXR1cm4gbWFwRm4gJiYgaXNWYWxpZEVsZW1lbnQoY2hpbGQpID8gbWFwRm4oY2hpbGQpIDogY2hpbGQ7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChjaGlsZHJlbikgQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIHJ1biB0aGUgbWFwIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZCBzbyB0aGF0IHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkIG9uZVxuICAgIHJlc3VsdFtjaGlsZC5rZXldID0gbWFwcGVyKGNoaWxkKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5XG4gKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNvbWUgb2YgdGhlIHV0aWxpdGllcyBpblxuICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcmV0dXJuIHtvYmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxsIGtleXNcbiAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2LCBuZXh0KSB7XG4gIHByZXYgPSBwcmV2IHx8IHt9O1xuICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5IGluIG5leHQgPyBuZXh0W2tleV0gOiBwcmV2W2tleV07XG4gIH0gLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gIC8vIHRoZSBjb21iaW5lZCBsaXN0XG5cblxuICB2YXIgbmV4dEtleXNQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHBlbmRpbmdLZXlzID0gW107XG5cbiAgZm9yICh2YXIgcHJldktleSBpbiBwcmV2KSB7XG4gICAgaWYgKHByZXZLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgcGVuZGluZ0tleXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0tleXMucHVzaChwcmV2S2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuXG4gIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgIGlmIChuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgfSAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wKGNoaWxkLCBwcm9wLCBwcm9wcykge1xuICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbCA/IHByb3BzW3Byb3BdIDogY2hpbGQucHJvcHNbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKHByb3BzLCBvbkV4aXRlZCkge1xuICByZXR1cm4gZ2V0Q2hpbGRNYXBwaW5nKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICBpbjogdHJ1ZSxcbiAgICAgIGFwcGVhcjogZ2V0UHJvcChjaGlsZCwgJ2FwcGVhcicsIHByb3BzKSxcbiAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBwcm9wcyksXG4gICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIHByb3BzKVxuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgb25FeGl0ZWQpIHtcbiAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkcmVuID0gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpO1xuICBPYmplY3Qua2V5cyhjaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgcmV0dXJuO1xuICAgIHZhciBoYXNQcmV2ID0gKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgaGFzTmV4dCA9IChrZXkgaW4gbmV4dENoaWxkTWFwcGluZyk7XG4gICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZE1hcHBpbmdba2V5XTtcbiAgICB2YXIgaXNMZWF2aW5nID0gaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSAmJiAhcHJldkNoaWxkLnByb3BzLmluOyAvLyBpdGVtIGlzIG5ldyAoZW50ZXJpbmcpXG5cbiAgICBpZiAoaGFzTmV4dCAmJiAoIWhhc1ByZXYgfHwgaXNMZWF2aW5nKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2VudGVyaW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiB0cnVlLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFoYXNOZXh0ICYmIGhhc1ByZXYgJiYgIWlzTGVhdmluZykge1xuICAgICAgLy8gaXRlbSBpcyBvbGQgKGV4aXRpbmcpXG4gICAgICAvLyBjb25zb2xlLmxvZygnbGVhdmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgaW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHQgJiYgaGFzUHJldiAmJiBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpKSB7XG4gICAgICAvLyBpdGVtIGhhc24ndCBjaGFuZ2VkIHRyYW5zaXRpb24gc3RhdGVzXG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGxhc3QgdHJhbnNpdGlvbiBwcm9wcztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1bmNoYW5nZWQnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHByZXZDaGlsZC5wcm9wcy5pbixcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0b3VjaFJpcHBsZVJlZlwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IFRvdWNoUmlwcGxlIGZyb20gJy4vVG91Y2hSaXBwbGUnO1xuaW1wb3J0IGJ1dHRvbkJhc2VDbGFzc2VzLCB7IGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBmb2N1c1Zpc2libGUgJiYgJ2ZvY3VzVmlzaWJsZSddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1Zpc2libGVDbGFzc05hbWUpIHtcbiAgICBjb21wb3NlZENsYXNzZXMucm9vdCArPSBgICR7Zm9jdXNWaXNpYmxlQ2xhc3NOYW1lfWA7XG4gIH1cbiAgcmV0dXJuIGNvbXBvc2VkQ2xhc3Nlcztcbn07XG5leHBvcnQgY29uc3QgQnV0dG9uQmFzZVJvb3QgPSBzdHlsZWQoJ2J1dHRvbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbkJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDAsXG4gIGJvcmRlcjogMCxcbiAgbWFyZ2luOiAwLFxuICAvLyBSZW1vdmUgdGhlIG1hcmdpbiBpbiBTYWZhcmlcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICBwYWRkaW5nOiAwLFxuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gRmlyZWZveFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIC8vIFNvIHdlIHRha2UgcHJlY2VkZW50IG92ZXIgdGhlIHN0eWxlIG9mIGEgbmF0aXZlIDxhIC8+IGVsZW1lbnQuXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gICcmOjotbW96LWZvY3VzLWlubmVyJzoge1xuICAgIGJvcmRlclN0eWxlOiAnbm9uZScgLy8gUmVtb3ZlIEZpcmVmb3ggZG90dGVkIG91dGxpbmUuXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuXG4vKipcbiAqIGBCdXR0b25CYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBidXR0b24uXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgZm9jdXMvcmlwcGxlIGxvZ2ljLlxuICovXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uQmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNlbnRlclJpcHBsZSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnYnV0dG9uJyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUmlwcGxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlVG91Y2hSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGZvY3VzUmlwcGxlID0gZmFsc2UsXG4gICAgICBMaW5rQ29tcG9uZW50ID0gJ2EnLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uQ29udGV4dE1lbnUsXG4gICAgICBvbkRyYWdMZWF2ZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkZvY3VzVmlzaWJsZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uS2V5VXAsXG4gICAgICBvbk1vdXNlRG93bixcbiAgICAgIG9uTW91c2VMZWF2ZSxcbiAgICAgIG9uTW91c2VVcCxcbiAgICAgIG9uVG91Y2hFbmQsXG4gICAgICBvblRvdWNoTW92ZSxcbiAgICAgIG9uVG91Y2hTdGFydCxcbiAgICAgIHRhYkluZGV4ID0gMCxcbiAgICAgIFRvdWNoUmlwcGxlUHJvcHMsXG4gICAgICB0b3VjaFJpcHBsZVJlZixcbiAgICAgIHR5cGVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgYnV0dG9uUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByaXBwbGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJpcHBsZVJlZiA9IHVzZUZvcmtSZWYocmlwcGxlUmVmLCB0b3VjaFJpcHBsZVJlZik7XG4gIGNvbnN0IHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICByZWY6IGZvY3VzVmlzaWJsZVJlZlxuICB9ID0gdXNlSXNGb2N1c1Zpc2libGUoKTtcbiAgY29uc3QgW2ZvY3VzVmlzaWJsZSwgc2V0Rm9jdXNWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzVmlzaWJsZSkge1xuICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gIH1cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+ICh7XG4gICAgZm9jdXNWaXNpYmxlOiAoKSA9PiB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBidXR0b25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgW21vdW50ZWRTdGF0ZSwgc2V0TW91bnRlZFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRNb3VudGVkU3RhdGUodHJ1ZSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgZW5hYmxlVG91Y2hSaXBwbGUgPSBtb3VudGVkU3RhdGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgIWRpc2FibGVkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNSaXBwbGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgbW91bnRlZFN0YXRlKSB7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKCk7XG4gICAgfVxuICB9LCBbZGlzYWJsZVJpcHBsZSwgZm9jdXNSaXBwbGUsIGZvY3VzVmlzaWJsZSwgbW91bnRlZFN0YXRlXSk7XG4gIGZ1bmN0aW9uIHVzZVJpcHBsZUhhbmRsZXIocmlwcGxlQWN0aW9uLCBldmVudENhbGxiYWNrLCBza2lwUmlwcGxlQWN0aW9uID0gZGlzYWJsZVRvdWNoUmlwcGxlKSB7XG4gICAgcmV0dXJuIHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcbiAgICAgICAgZXZlbnRDYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZ25vcmUgPSBza2lwUmlwcGxlQWN0aW9uO1xuICAgICAgaWYgKCFpZ25vcmUgJiYgcmlwcGxlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnRbcmlwcGxlQWN0aW9uXShldmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uTW91c2VEb3duKTtcbiAgY29uc3QgaGFuZGxlQ29udGV4dE1lbnUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Db250ZXh0TWVudSk7XG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkRyYWdMZWF2ZSk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Nb3VzZVVwKTtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uTW91c2VMZWF2ZSkge1xuICAgICAgb25Nb3VzZUxlYXZlKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVUb3VjaFN0YXJ0ID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoRW5kKTtcbiAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hNb3ZlKTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzc2OVxuICAgIGlmICghYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgaWYgKG9uRm9jdXNWaXNpYmxlKSB7XG4gICAgICAgIG9uRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzTm9uTmF0aXZlQnV0dG9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvblJlZi5jdXJyZW50O1xuICAgIHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50ICE9PSAnYnV0dG9uJyAmJiAhKGJ1dHRvbi50YWdOYW1lID09PSAnQScgJiYgYnV0dG9uLmhyZWYpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJRTExIHNoaW0gZm9yIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L3JlcGVhdFxuICAgKi9cbiAgY29uc3Qga2V5ZG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBDaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBkb3duIHRvIGF2b2lkIHJlcGVhdHMgYmVpbmcgY291bnRlZCBhcyBtdWx0aXBsZSBhY3RpdmF0aW9uc1xuICAgIGlmIChmb2N1c1JpcHBsZSAmJiAha2V5ZG93blJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RhcnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFkaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBpbiBrZXlVcCBvbiBhIDxidXR0b24+IHdpbGwgbm90IGRpc3BhdGNoIGEgY2xpY2sgZXZlbnQgaWYgU3BhY2UgaXMgcHJlc3NlZFxuICAgIC8vIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcC9zYW5kYm94L2J1dHRvbi1rZXl1cC1wcmV2ZW50ZGVmYXVsdC1kbjdmMFxuICAgIGlmIChmb2N1c1JpcHBsZSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob25LZXlVcCkge1xuICAgICAgb25LZXlVcChldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKG9uQ2xpY2sgJiYgZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGxldCBDb21wb25lbnRQcm9wID0gY29tcG9uZW50O1xuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicgJiYgKG90aGVyLmhyZWYgfHwgb3RoZXIudG8pKSB7XG4gICAgQ29tcG9uZW50UHJvcCA9IExpbmtDb21wb25lbnQ7XG4gIH1cbiAgY29uc3QgYnV0dG9uUHJvcHMgPSB7fTtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nKSB7XG4gICAgYnV0dG9uUHJvcHMudHlwZSA9IHR5cGUgPT09IHVuZGVmaW5lZCA/ICdidXR0b24nIDogdHlwZTtcbiAgICBidXR0b25Qcm9wcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9IGVsc2Uge1xuICAgIGlmICghb3RoZXIuaHJlZiAmJiAhb3RoZXIudG8pIHtcbiAgICAgIGJ1dHRvblByb3BzLnJvbGUgPSAnYnV0dG9uJztcbiAgICB9XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICBidXR0b25Qcm9wc1snYXJpYS1kaXNhYmxlZCddID0gZGlzYWJsZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBmb2N1c1Zpc2libGVSZWYsIGJ1dHRvblJlZik7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChlbmFibGVUb3VjaFJpcHBsZSAmJiAhcmlwcGxlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIGBjb21wb25lbnRgIHByb3AgcHJvdmlkZWQgdG8gQnV0dG9uQmFzZSBpcyBpbnZhbGlkLicsICdQbGVhc2UgbWFrZSBzdXJlIHRoZSBjaGlsZHJlbiBwcm9wIGlzIHJlbmRlcmVkIGluIHRoaXMgY3VzdG9tIGNvbXBvbmVudC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2VuYWJsZVRvdWNoUmlwcGxlXSk7XG4gIH1cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNlbnRlclJpcHBsZSxcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZVJpcHBsZSxcbiAgICBkaXNhYmxlVG91Y2hSaXBwbGUsXG4gICAgZm9jdXNSaXBwbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgZm9jdXNWaXNpYmxlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uQmFzZVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50UHJvcCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25Db250ZXh0TWVudTogaGFuZGxlQ29udGV4dE1lbnUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgIG9uTW91c2VEb3duOiBoYW5kbGVNb3VzZURvd24sXG4gICAgb25Nb3VzZUxlYXZlOiBoYW5kbGVNb3VzZUxlYXZlLFxuICAgIG9uTW91c2VVcDogaGFuZGxlTW91c2VVcCxcbiAgICBvbkRyYWdMZWF2ZTogaGFuZGxlRHJhZ0xlYXZlLFxuICAgIG9uVG91Y2hFbmQ6IGhhbmRsZVRvdWNoRW5kLFxuICAgIG9uVG91Y2hNb3ZlOiBoYW5kbGVUb3VjaE1vdmUsXG4gICAgb25Ub3VjaFN0YXJ0OiBoYW5kbGVUb3VjaFN0YXJ0LFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXgsXG4gICAgdHlwZTogdHlwZVxuICB9LCBidXR0b25Qcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBlbmFibGVUb3VjaFJpcHBsZSA/XG4gICAgLyojX19QVVJFX18qL1xuICAgIC8qIFRvdWNoUmlwcGxlIGlzIG9ubHkgbmVlZGVkIGNsaWVudC1zaWRlLCB4MiBib29zdCBvbiB0aGUgc2VydmVyLiAqL1xuICAgIF9qc3goVG91Y2hSaXBwbGUsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlUmlwcGxlUmVmLFxuICAgICAgY2VudGVyOiBjZW50ZXJSaXBwbGVcbiAgICB9LCBUb3VjaFJpcHBsZVByb3BzKSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbkJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYGZvY3VzVmlzaWJsZSgpYCBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGVzIGFyZSBjZW50ZXJlZC5cbiAgICogVGhleSB3b24ndCBzdGFydCBhdCB0aGUgY3Vyc29yIGludGVyYWN0aW9uIHBvc2l0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2VudGVyUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIFx1MjZBMFx1RkUwRiBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0b3VjaCByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVRvdWNoUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhc2UgYnV0dG9uIHdpbGwgaGF2ZSBhIGtleWJvYXJkIGZvY3VzIHJpcHBsZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL0hFQUQvZXhwbGFpbmVyLm1kKS5cbiAgICogQSBbcG9seWZpbGwgY2FuIGJlIHVzZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUpIHRvIGFwcGx5IGEgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIG90aGVyIGNvbXBvbmVudHNcbiAgICogaWYgbmVlZGVkLlxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uYW55LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIHRvIHJlbmRlciBhIGxpbmsgd2hlbiB0aGUgYGhyZWZgIHByb3AgaXMgcHJvdmlkZWQuXG4gICAqIEBkZWZhdWx0ICdhJ1xuICAgKi9cbiAgTGlua0NvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Db250ZXh0TWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBmb2N1c2VkIHdpdGggYSBrZXlib2FyZC5cbiAgICogV2UgdHJpZ2dlciBhIGBvbkZvY3VzYCBjYWxsYmFjayB0b28uXG4gICAqL1xuICBvbkZvY3VzVmlzaWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlRG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaE1vdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgVG91Y2hSaXBwbGVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEEgcmVmIHRoYXQgcG9pbnRzIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICB0b3VjaFJpcHBsZVJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHB1bHNhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdGFydDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHN0b3A6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgICB9KVxuICB9KV0pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFzZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2VudGVyXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiXTtcbmxldCBfID0gdCA9PiB0LFxuICBfdCxcbiAgX3QyLFxuICBfdDMsXG4gIF90NDtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHVzZVRpbWVvdXQgZnJvbSAnQG11aS91dGlscy91c2VUaW1lb3V0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgUmlwcGxlIGZyb20gJy4vUmlwcGxlJztcbmltcG9ydCB0b3VjaFJpcHBsZUNsYXNzZXMgZnJvbSAnLi90b3VjaFJpcHBsZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IERVUkFUSU9OID0gNTUwO1xuZXhwb3J0IGNvbnN0IERFTEFZX1JJUFBMRSA9IDgwO1xuY29uc3QgZW50ZXJLZXlmcmFtZSA9IGtleWZyYW1lcyhfdCB8fCAoX3QgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgICBvcGFjaXR5OiAwLjE7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDAuMztcbiAgfVxuYCkpO1xuY29uc3QgZXhpdEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG5gKSk7XG5jb25zdCBwdWxzYXRlS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QzIHx8IChfdDMgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuXG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbmApKTtcbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSb290J1xufSkoe1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHpJbmRleDogMCxcbiAgdG9wOiAwLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xufSk7XG5cbi8vIFRoaXMgYHN0eWxlZCgpYCBmdW5jdGlvbiBpbnZva2VzIGtleWZyYW1lcy4gYHN0eWxlZC1jb21wb25lbnRzYCBvbmx5IHN1cHBvcnRzIGtleWZyYW1lc1xuLy8gaW4gc3RyaW5nIHRlbXBsYXRlcy4gRG8gbm90IGNvbnZlcnQgdGhlc2Ugc3R5bGVzIGluIEpTIG9iamVjdCBhcyBpdCB3aWxsIGJyZWFrLlxuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUmlwcGxlID0gc3R5bGVkKFJpcHBsZSwge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUmlwcGxlJ1xufSkoX3Q0IHx8IChfdDQgPSBfYFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgJi4kezB9IHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJi4kezB9IHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLyogQG5vZmxpcCAqL1xuICAgIGxlZnQ6IDBweDtcbiAgICB0b3A6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAyNTAwbXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICBhbmltYXRpb24tZGVsYXk6IDIwMG1zO1xuICB9XG5gKSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUsIGVudGVyS2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUsICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcsIGV4aXRLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlLCBwdWxzYXRlS2V5ZnJhbWUsICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0KTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICpcbiAqIFRPRE8gdjU6IE1ha2UgcHJpdmF0ZVxuICovXG5jb25zdCBUb3VjaFJpcHBsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvdWNoUmlwcGxlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUb3VjaFJpcHBsZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNlbnRlcjogY2VudGVyUHJvcCA9IGZhbHNlLFxuICAgICAgY2xhc3NlcyA9IHt9LFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtyaXBwbGVzLCBzZXRSaXBwbGVzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgbmV4dEtleSA9IFJlYWN0LnVzZVJlZigwKTtcbiAgY29uc3QgcmlwcGxlQ2FsbGJhY2sgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQpIHtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQoKTtcbiAgICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW3JpcHBsZXNdKTtcblxuICAvLyBVc2VkIHRvIGZpbHRlciBvdXQgbW91c2UgZW11bGF0ZWQgZXZlbnRzIG9uIG1vYmlsZS5cbiAgY29uc3QgaWdub3JpbmdNb3VzZURvd24gPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAvLyBXZSB1c2UgYSB0aW1lciBpbiBvcmRlciB0byBvbmx5IHNob3cgdGhlIHJpcHBsZXMgZm9yIHRvdWNoIFwiY2xpY2tcIiBsaWtlIGV2ZW50cy5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHRoZSByaXBwbGUgZm9yIHRvdWNoIHNjcm9sbCBldmVudHMuXG4gIGNvbnN0IHN0YXJ0VGltZXIgPSB1c2VUaW1lb3V0KCk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgaG9vayBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMgdGltZW91dCBpcyByZWFkeS5cbiAgY29uc3Qgc3RhcnRUaW1lckNvbW1pdCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY29udGFpbmVyID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBzdGFydENvbW1pdCA9IFJlYWN0LnVzZUNhbGxiYWNrKHBhcmFtcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVgsXG4gICAgICByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgIGNiXG4gICAgfSA9IHBhcmFtcztcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4gWy4uLm9sZFJpcHBsZXMsIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUmlwcGxlLCB7XG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHJpcHBsZTogY2xzeChjbGFzc2VzLnJpcHBsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZSksXG4gICAgICAgIHJpcHBsZVZpc2libGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSksXG4gICAgICAgIHJpcHBsZVB1bHNhdGU6IGNsc3goY2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSksXG4gICAgICAgIGNoaWxkOiBjbHN4KGNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCksXG4gICAgICAgIGNoaWxkTGVhdmluZzogY2xzeChjbGFzc2VzLmNoaWxkTGVhdmluZywgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZyksXG4gICAgICAgIGNoaWxkUHVsc2F0ZTogY2xzeChjbGFzc2VzLmNoaWxkUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSlcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEVVJBVElPTixcbiAgICAgIHB1bHNhdGU6IHB1bHNhdGUsXG4gICAgICByaXBwbGVYOiByaXBwbGVYLFxuICAgICAgcmlwcGxlWTogcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemU6IHJpcHBsZVNpemVcbiAgICB9LCBuZXh0S2V5LmN1cnJlbnQpXSk7XG4gICAgbmV4dEtleS5jdXJyZW50ICs9IDE7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbY2xhc3Nlc10pO1xuICBjb25zdCBzdGFydCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCA9IHt9LCBvcHRpb25zID0ge30sIGNiID0gKCkgPT4ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgICBjZW50ZXIgPSBjZW50ZXJQcm9wIHx8IG9wdGlvbnMucHVsc2F0ZSxcbiAgICAgIGZha2VFbGVtZW50ID0gZmFsc2UgLy8gRm9yIHRlc3QgcHVycG9zZXNcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ21vdXNlZG93bicgJiYgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCkge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGZha2VFbGVtZW50ID8gbnVsbCA6IGNvbnRhaW5lci5jdXJyZW50O1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50ID8gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIHJpcHBsZVxuICAgIGxldCByaXBwbGVYO1xuICAgIGxldCByaXBwbGVZO1xuICAgIGxldCByaXBwbGVTaXplO1xuICAgIGlmIChjZW50ZXIgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCB8fCBldmVudC5jbGllbnRYID09PSAwICYmIGV2ZW50LmNsaWVudFkgPT09IDAgfHwgIWV2ZW50LmNsaWVudFggJiYgIWV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKHJlY3Qud2lkdGggLyAyKTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKHJlY3QuaGVpZ2h0IC8gMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WVxuICAgICAgfSA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwID8gZXZlbnQudG91Y2hlc1swXSA6IGV2ZW50O1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQoY2xpZW50WCAtIHJlY3QubGVmdCk7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChjbGllbnRZIC0gcmVjdC50b3ApO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KCgyICogcmVjdC53aWR0aCAqKiAyICsgcmVjdC5oZWlnaHQgKiogMikgLyAzKTtcblxuICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHRoZSBhbmltYXRpb24gaXMgYnJva2VuIG9uIE1vYmlsZSBDaHJvbWUgaWYgdGhlIHNpemUgaXMgZXZlbi5cbiAgICAgIGlmIChyaXBwbGVTaXplICUgMiA9PT0gMCkge1xuICAgICAgICByaXBwbGVTaXplICs9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemVYID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFdpZHRoIDogMCkgLSByaXBwbGVYKSwgcmlwcGxlWCkgKiAyICsgMjtcbiAgICAgIGNvbnN0IHNpemVZID0gTWF0aC5tYXgoTWF0aC5hYnMoKGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudEhlaWdodCA6IDApIC0gcmlwcGxlWSksIHJpcHBsZVkpICogMiArIDI7XG4gICAgICByaXBwbGVTaXplID0gTWF0aC5zcXJ0KHNpemVYICoqIDIgKyBzaXplWSAqKiAyKTtcbiAgICB9XG5cbiAgICAvLyBUb3VjaGUgZGV2aWNlc1xuICAgIGlmIChldmVudCAhPSBudWxsICYmIGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBhbm90aGVyIHRvdWNoc3RhcnQgZHVlIHRvIG11bHRpdG91Y2hcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSB3aWxsIG9ubHkgY2xlYXIgYSBzaW5nbGUgdGltZXIgd2hlbiB1bm1vdW50aW5nIHdoaWxlIHR3b1xuICAgICAgLy8gYXJlIHJ1bm5pbmdcbiAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gUHJlcGFyZSB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gKCkgPT4ge1xuICAgICAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgICAgIHB1bHNhdGUsXG4gICAgICAgICAgICByaXBwbGVYLFxuICAgICAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgICAgICBjYlxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBEZWxheSB0aGUgZXhlY3V0aW9uIG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICAvLyBXZSBoYXZlIHRvIG1ha2UgYSB0cmFkZW9mZiB3aXRoIHRoaXMgZGVsYXkgdmFsdWUuXG4gICAgICAgIHN0YXJ0VGltZXIuc3RhcnQoREVMQVlfUklQUExFLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0Q29tbWl0KHtcbiAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgcmlwcGxlWSxcbiAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgY2JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NlbnRlclByb3AsIHN0YXJ0Q29tbWl0LCBzdGFydFRpbWVyXSk7XG4gIGNvbnN0IHB1bHNhdGUgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RhcnQoe30sIHtcbiAgICAgIHB1bHNhdGU6IHRydWVcbiAgICB9KTtcbiAgfSwgW3N0YXJ0XSk7XG4gIGNvbnN0IHN0b3AgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQsIGNiKSA9PiB7XG4gICAgc3RhcnRUaW1lci5jbGVhcigpO1xuXG4gICAgLy8gVGhlIHRvdWNoIGludGVyYWN0aW9uIG9jY3VycyB0b28gcXVpY2tseS5cbiAgICAvLyBXZSBzdGlsbCB3YW50IHRvIHNob3cgcmlwcGxlIGVmZmVjdC5cbiAgICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gJ3RvdWNoZW5kJyAmJiBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgIHN0YXJ0VGltZXIuc3RhcnQoMCwgKCkgPT4ge1xuICAgICAgICBzdG9wKGV2ZW50LCBjYik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRSaXBwbGVzKG9sZFJpcHBsZXMgPT4ge1xuICAgICAgaWYgKG9sZFJpcHBsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xkUmlwcGxlcy5zbGljZSgxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRSaXBwbGVzO1xuICAgIH0pO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW3N0YXJ0VGltZXJdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgcHVsc2F0ZSxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH0pLCBbcHVsc2F0ZSwgc3RhcnQsIHN0b3BdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeCh0b3VjaFJpcHBsZUNsYXNzZXMucm9vdCwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogY29udGFpbmVyXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Hcm91cCwge1xuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiByaXBwbGVzXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb3VjaFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgc3RhcnRzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgKiByYXRoZXIgdGhhbiBhdCB0aGUgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBjZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvdWNoUmlwcGxlOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gUmlwcGxlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY2xhc3NlcyxcbiAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgcmlwcGxlWCxcbiAgICByaXBwbGVZLFxuICAgIHJpcHBsZVNpemUsXG4gICAgaW46IGluUHJvcCxcbiAgICBvbkV4aXRlZCxcbiAgICB0aW1lb3V0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2xlYXZpbmcsIHNldExlYXZpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByaXBwbGVDbGFzc05hbWUgPSBjbHN4KGNsYXNzTmFtZSwgY2xhc3Nlcy5yaXBwbGUsIGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgcHVsc2F0ZSAmJiBjbGFzc2VzLnJpcHBsZVB1bHNhdGUpO1xuICBjb25zdCByaXBwbGVTdHlsZXMgPSB7XG4gICAgd2lkdGg6IHJpcHBsZVNpemUsXG4gICAgaGVpZ2h0OiByaXBwbGVTaXplLFxuICAgIHRvcDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVZLFxuICAgIGxlZnQ6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWFxuICB9O1xuICBjb25zdCBjaGlsZENsYXNzTmFtZSA9IGNsc3goY2xhc3Nlcy5jaGlsZCwgbGVhdmluZyAmJiBjbGFzc2VzLmNoaWxkTGVhdmluZywgcHVsc2F0ZSAmJiBjbGFzc2VzLmNoaWxkUHVsc2F0ZSk7XG4gIGlmICghaW5Qcm9wICYmICFsZWF2aW5nKSB7XG4gICAgc2V0TGVhdmluZyh0cnVlKTtcbiAgfVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5Qcm9wICYmIG9uRXhpdGVkICE9IG51bGwpIHtcbiAgICAgIC8vIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAjb25FeGl0ZWRcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQob25FeGl0ZWQsIHRpbWVvdXQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbb25FeGl0ZWQsIGluUHJvcCwgdGltZW91dF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IHJpcHBsZUNsYXNzTmFtZSxcbiAgICBzdHlsZTogcmlwcGxlU3R5bGVzLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBjaGlsZENsYXNzTmFtZVxuICAgIH0pXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmlwcGxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBwdWxzYXRlcywgdHlwaWNhbGx5IGluZGljYXRpbmcgdGhlIGtleWJvYXJkIGZvY3VzIHN0YXRlIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWxzYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERpYW1ldGVyIG9mIHRoZSByaXBwbGUuXG4gICAqL1xuICByaXBwbGVTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBleGl0IGRlbGF5XG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSaXBwbGU7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG91Y2hSaXBwbGVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRvdWNoUmlwcGxlJywgc2xvdCk7XG59XG5jb25zdCB0b3VjaFJpcHBsZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb3VjaFJpcHBsZScsIFsncm9vdCcsICdyaXBwbGUnLCAncmlwcGxlVmlzaWJsZScsICdyaXBwbGVQdWxzYXRlJywgJ2NoaWxkJywgJ2NoaWxkTGVhdmluZycsICdjaGlsZFB1bHNhdGUnXSk7XG5leHBvcnQgZGVmYXVsdCB0b3VjaFJpcHBsZUNsYXNzZXM7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlckJvdHRvbVwiLCBcIm5vV3JhcFwiLCBcInBhcmFncmFwaFwiLCBcInZhcmlhbnRcIiwgXCJ2YXJpYW50TWFwcGluZ1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90eXBvZ3JhcGh5Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduLFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIGBhbGlnbiR7Y2FwaXRhbGl6ZShhbGlnbil9YCwgZ3V0dGVyQm90dG9tICYmICdndXR0ZXJCb3R0b20nLCBub1dyYXAgJiYgJ25vV3JhcCcsIHBhcmFncmFwaCAmJiAncGFyYWdyYXBoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgVHlwb2dyYXBoeVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUeXBvZ3JhcGh5JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgYWxpZ24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbGlnbil9YF0sIG93bmVyU3RhdGUubm9XcmFwICYmIHN0eWxlcy5ub1dyYXAsIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHN0eWxlcy5ndXR0ZXJCb3R0b20sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHN0eWxlcy5wYXJhZ3JhcGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luaGVyaXQnICYmIHtcbiAgLy8gU29tZSBlbGVtZW50cywgbGlrZSA8YnV0dG9uPiBvbiBDaHJvbWUgaGF2ZSBkZWZhdWx0IGZvbnQgdGhhdCBkb2Vzbid0IGluaGVyaXQsIHJlc2V0IHRoaXMuXG4gIGZvbnQ6ICdpbmhlcml0J1xufSwgb3duZXJTdGF0ZS52YXJpYW50ICE9PSAnaW5oZXJpdCcgJiYgdGhlbWUudHlwb2dyYXBoeVtvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYge1xuICB0ZXh0QWxpZ246IG93bmVyU3RhdGUuYWxpZ25cbn0sIG93bmVyU3RhdGUubm9XcmFwICYmIHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiB7XG4gIG1hcmdpbkJvdHRvbTogJzAuMzVlbSdcbn0sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHtcbiAgbWFyZ2luQm90dG9tOiAxNlxufSkpO1xuY29uc3QgZGVmYXVsdFZhcmlhbnRNYXBwaW5nID0ge1xuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBzdWJ0aXRsZTE6ICdoNicsXG4gIHN1YnRpdGxlMjogJ2g2JyxcbiAgYm9keTE6ICdwJyxcbiAgYm9keTI6ICdwJyxcbiAgaW5oZXJpdDogJ3AnXG59O1xuXG4vLyBUT0RPIHY2OiBkZXByZWNhdGUgdGhlc2UgY29sb3IgdmFsdWVzIGluIHY1LnggYW5kIHJlbW92ZSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdjZcbmNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IFR5cG9ncmFwaHkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUeXBvZ3JhcGh5KGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVR5cG9ncmFwaHknXG4gIH0pO1xuICBjb25zdCBjb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnModGhlbWVQcm9wcy5jb2xvcik7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKF9leHRlbmRzKHt9LCB0aGVtZVByb3BzLCB7XG4gICAgY29sb3JcbiAgfSkpO1xuICBjb25zdCB7XG4gICAgICBhbGlnbiA9ICdpbmhlcml0JyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGd1dHRlckJvdHRvbSA9IGZhbHNlLFxuICAgICAgbm9XcmFwID0gZmFsc2UsXG4gICAgICBwYXJhZ3JhcGggPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnYm9keTEnLFxuICAgICAgdmFyaWFudE1hcHBpbmcgPSBkZWZhdWx0VmFyaWFudE1hcHBpbmdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduLFxuICAgIGNvbG9yLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQsXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICB2YXJpYW50TWFwcGluZ1xuICB9KTtcbiAgY29uc3QgQ29tcG9uZW50ID0gY29tcG9uZW50IHx8IChwYXJhZ3JhcGggPyAncCcgOiB2YXJpYW50TWFwcGluZ1t2YXJpYW50XSB8fCBkZWZhdWx0VmFyaWFudE1hcHBpbmdbdmFyaWFudF0pIHx8ICdzcGFuJztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50LFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUeXBvZ3JhcGh5LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFNldCB0aGUgdGV4dC1hbGlnbiBvbiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnaW5oZXJpdCcsICdqdXN0aWZ5JywgJ2xlZnQnLCAncmlnaHQnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIGhhdmUgYSBib3R0b20gbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZ3V0dGVyQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBub3Qgd3JhcCwgYnV0IGluc3RlYWQgd2lsbCB0cnVuY2F0ZSB3aXRoIGEgdGV4dCBvdmVyZmxvdyBlbGxpcHNpcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRleHQgb3ZlcmZsb3cgY2FuIG9ubHkgaGFwcGVuIHdpdGggYmxvY2sgb3IgaW5saW5lLWJsb2NrIGxldmVsIGVsZW1lbnRzXG4gICAqICh0aGUgZWxlbWVudCBuZWVkcyB0byBoYXZlIGEgd2lkdGggaW4gb3JkZXIgdG8gb3ZlcmZsb3cpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9XcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhIHBhcmFncmFwaCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyYWdyYXBoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnYm9keTEnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSB2YXJpYW50IHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IHR5cGVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIHN1YnRpdGxlMSB0byBgPGg2PmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGF0IG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBjb21wb25lbnRgIHByb3AuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBoMTogJ2gxJyxcbiAgICogICBoMjogJ2gyJyxcbiAgICogICBoMzogJ2gzJyxcbiAgICogICBoNDogJ2g0JyxcbiAgICogICBoNTogJ2g1JyxcbiAgICogICBoNjogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTE6ICdoNicsXG4gICAqICAgc3VidGl0bGUyOiAnaDYnLFxuICAgKiAgIGJvZHkxOiAncCcsXG4gICAqICAgYm9keTI6ICdwJyxcbiAgICogICBpbmhlcml0OiAncCcsXG4gICAqIH1cbiAgICovXG4gIHZhcmlhbnRNYXBwaW5nOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUeXBvZ3JhcGh5OyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVR5cG9ncmFwaHknLCBzbG90KTtcbn1cbmNvbnN0IHR5cG9ncmFwaHlDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVHlwb2dyYXBoeScsIFsncm9vdCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJywgJ2JvZHkxJywgJ2JvZHkyJywgJ2luaGVyaXQnLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnb3ZlcmxpbmUnLCAnYWxpZ25MZWZ0JywgJ2FsaWduUmlnaHQnLCAnYWxpZ25DZW50ZXInLCAnYWxpZ25KdXN0aWZ5JywgJ25vV3JhcCcsICdndXR0ZXJCb3R0b20nLCAncGFyYWdyYXBoJ10pO1xuZXhwb3J0IGRlZmF1bHQgdHlwb2dyYXBoeUNsYXNzZXM7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1Db250cm9sU3RhdGUoe1xuICBwcm9wcyxcbiAgc3RhdGVzLFxuICBtdWlGb3JtQ29udHJvbFxufSkge1xuICByZXR1cm4gc3RhdGVzLnJlZHVjZSgoYWNjLCBzdGF0ZSkgPT4ge1xuICAgIGFjY1tzdGF0ZV0gPSBwcm9wc1tzdGF0ZV07XG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3N0YXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjW3N0YXRlXSA9IG11aUZvcm1Db250cm9sW3N0YXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufSIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBGb3JtQ29udHJvbENvbnRleHQuZGlzcGxheU5hbWUgPSAnRm9ybUNvbnRyb2xDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sQ29udGV4dDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcm1Db250cm9sKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udHJvbENvbnRleHQpO1xufSIsICIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGxlZChvYmosIFNTUiA9IGZhbHNlKSB7XG4gIHJldHVybiBvYmogJiYgKGhhc1ZhbHVlKG9iai52YWx1ZSkgJiYgb2JqLnZhbHVlICE9PSAnJyB8fCBTU1IgJiYgaGFzVmFsdWUob2JqLmRlZmF1bHRWYWx1ZSkgJiYgb2JqLmRlZmF1bHRWYWx1ZSAhPT0gJycpO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgYW4gSW5wdXQgaXMgYWRvcm5lZCBvbiBzdGFydC5cbi8vIEl0J3MgY29ycmVzcG9uZGluZyB0byB0aGUgbGVmdCB3aXRoIExUUi5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBubyBhZG9ybm1lbnRzLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhZG9ybmVkIGF0IHRoZSBzdGFydC5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hlY2tlZEljb25cIiwgXCJjb2xvclwiLCBcImljb25cIiwgXCJpbmRldGVybWluYXRlXCIsIFwiaW5kZXRlcm1pbmF0ZUljb25cIiwgXCJpbnB1dFByb3BzXCIsIFwic2l6ZVwiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IFN3aXRjaEJhc2UgZnJvbSAnLi4vaW50ZXJuYWwvU3dpdGNoQmFzZSc7XG5pbXBvcnQgQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9DaGVja0JveE91dGxpbmVCbGFuayc7XG5pbXBvcnQgQ2hlY2tCb3hJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9DaGVja0JveCc7XG5pbXBvcnQgSW5kZXRlcm1pbmF0ZUNoZWNrQm94SWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvSW5kZXRlcm1pbmF0ZUNoZWNrQm94JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBjaGVja2JveENsYXNzZXMsIHsgZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NoZWNrYm94Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaW5kZXRlcm1pbmF0ZSxcbiAgICBjb2xvcixcbiAgICBzaXplXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBpbmRldGVybWluYXRlICYmICdpbmRldGVybWluYXRlJywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgQ2hlY2tib3hSb290ID0gc3R5bGVkKFN3aXRjaEJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUNoZWNrYm94JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuaW5kZXRlcm1pbmF0ZSAmJiBzdHlsZXMuaW5kZXRlcm1pbmF0ZSwgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUmlwcGxlICYmIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHtvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZUNoYW5uZWwgOiB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSA6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHtcbiAgW2AmLiR7Y2hlY2tib3hDbGFzc2VzLmNoZWNrZWR9LCAmLiR7Y2hlY2tib3hDbGFzc2VzLmluZGV0ZXJtaW5hdGV9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LFxuICBbYCYuJHtjaGVja2JveENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0pKTtcbmNvbnN0IGRlZmF1bHRDaGVja2VkSWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KENoZWNrQm94SWNvbiwge30pO1xuY29uc3QgZGVmYXVsdEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChDaGVja0JveE91dGxpbmVCbGFua0ljb24sIHt9KTtcbmNvbnN0IGRlZmF1bHRJbmRldGVybWluYXRlSWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KEluZGV0ZXJtaW5hdGVDaGVja0JveEljb24sIHt9KTtcbmNvbnN0IENoZWNrYm94ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2hlY2tib3goaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfaWNvbiRwcm9wcyRmb250U2l6ZSwgX2luZGV0ZXJtaW5hdGVJY29uJHByO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDaGVja2JveCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoZWNrZWRJY29uID0gZGVmYXVsdENoZWNrZWRJY29uLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBpY29uOiBpY29uUHJvcCA9IGRlZmF1bHRJY29uLFxuICAgICAgaW5kZXRlcm1pbmF0ZSA9IGZhbHNlLFxuICAgICAgaW5kZXRlcm1pbmF0ZUljb246IGluZGV0ZXJtaW5hdGVJY29uUHJvcCA9IGRlZmF1bHRJbmRldGVybWluYXRlSWNvbixcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgaWNvbiA9IGluZGV0ZXJtaW5hdGUgPyBpbmRldGVybWluYXRlSWNvblByb3AgOiBpY29uUHJvcDtcbiAgY29uc3QgaW5kZXRlcm1pbmF0ZUljb24gPSBpbmRldGVybWluYXRlID8gaW5kZXRlcm1pbmF0ZUljb25Qcm9wIDogY2hlY2tlZEljb247XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBpbmRldGVybWluYXRlLFxuICAgIHNpemVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KENoZWNrYm94Um9vdCwgX2V4dGVuZHMoe1xuICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICBpbnB1dFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAnZGF0YS1pbmRldGVybWluYXRlJzogaW5kZXRlcm1pbmF0ZVxuICAgIH0sIGlucHV0UHJvcHMpLFxuICAgIGljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgZm9udFNpemU6IChfaWNvbiRwcm9wcyRmb250U2l6ZSA9IGljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfaWNvbiRwcm9wcyRmb250U2l6ZSA6IHNpemVcbiAgICB9KSxcbiAgICBjaGVja2VkSWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChpbmRldGVybWluYXRlSWNvbiwge1xuICAgICAgZm9udFNpemU6IChfaW5kZXRlcm1pbmF0ZUljb24kcHIgPSBpbmRldGVybWluYXRlSWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9pbmRldGVybWluYXRlSWNvbiRwciA6IHNpemVcbiAgICB9KSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2hlY2tib3gucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxDaGVja0JveEljb24gLz5cbiAgICovXG4gIGNoZWNrZWRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2RlZmF1bHQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNoZWNrZWQgc3RhdGUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0Q2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxDaGVja0JveE91dGxpbmVCbGFua0ljb24gLz5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBhcHBlYXJzIGluZGV0ZXJtaW5hdGUuXG4gICAqIFRoaXMgZG9lcyBub3Qgc2V0IHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudCB0byBpbmRldGVybWluYXRlIGR1ZVxuICAgKiB0byBpbmNvbnNpc3RlbnQgYmVoYXZpb3IgYWNyb3NzIGJyb3dzZXJzLlxuICAgKiBIb3dldmVyLCB3ZSBzZXQgYSBgZGF0YS1pbmRldGVybWluYXRlYCBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluZGV0ZXJtaW5hdGUuXG4gICAqIEBkZWZhdWx0IDxJbmRldGVybWluYXRlQ2hlY2tCb3hJY29uIC8+XG4gICAqL1xuICBpbmRldGVybWluYXRlSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHN0YXRlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgY2hlY2tlZCBzdGF0ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC5jaGVja2VkYCAoYm9vbGVhbikuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIGNoZWNrYm94IHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuIFRoZSBET00gQVBJIGNhc3RzIHRoaXMgdG8gYSBzdHJpbmcuXG4gICAqIFRoZSBicm93c2VyIHVzZXMgXCJvblwiIGFzIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b0ZvY3VzXCIsIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRJY29uXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVmYXVsdENoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVGb2N1c1JpcHBsZVwiLCBcImVkZ2VcIiwgXCJpY29uXCIsIFwiaWRcIiwgXCJpbnB1dFByb3BzXCIsIFwiaW5wdXRSZWZcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwicmVhZE9ubHlcIiwgXCJyZXF1aXJlZFwiLCBcInRhYkluZGV4XCIsIFwidHlwZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJy4uL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IHsgZ2V0U3dpdGNoQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3dpdGNoQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZWRnZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY2hlY2tlZCAmJiAnY2hlY2tlZCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVkZ2UgJiYgYGVkZ2Uke2NhcGl0YWxpemUoZWRnZSl9YF0sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN3aXRjaEJhc2VSb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UpKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZzogOSxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJ1xufSwgb3duZXJTdGF0ZS5lZGdlID09PSAnc3RhcnQnICYmIHtcbiAgbWFyZ2luTGVmdDogb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnID8gLTMgOiAtMTJcbn0sIG93bmVyU3RhdGUuZWRnZSA9PT0gJ2VuZCcgJiYge1xuICBtYXJnaW5SaWdodDogb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnID8gLTMgOiAtMTJcbn0pKTtcbmNvbnN0IFN3aXRjaEJhc2VJbnB1dCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKHtcbiAgY3Vyc29yOiAnaW5oZXJpdCcsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBvcGFjaXR5OiAwLFxuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG4gIHpJbmRleDogMVxufSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgU3dpdGNoQmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN3aXRjaEJhc2UocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjaGVja2VkOiBjaGVja2VkUHJvcCxcbiAgICAgIGNoZWNrZWRJY29uLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWRQcm9wLFxuICAgICAgZGlzYWJsZUZvY3VzUmlwcGxlID0gZmFsc2UsXG4gICAgICBlZGdlID0gZmFsc2UsXG4gICAgICBpY29uLFxuICAgICAgaWQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgdGFiSW5kZXgsXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW2NoZWNrZWQsIHNldENoZWNrZWRTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiBjaGVja2VkUHJvcCxcbiAgICBkZWZhdWx0OiBCb29sZWFuKGRlZmF1bHRDaGVja2VkKSxcbiAgICBuYW1lOiAnU3dpdGNoQmFzZScsXG4gICAgc3RhdGU6ICdjaGVja2VkJ1xuICB9KTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uQmx1cikge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTAyM1xuICAgIGlmIChldmVudC5uYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0NoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcbiAgICBzZXRDaGVja2VkU3RhdGUobmV3Q2hlY2tlZCk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAvLyBUT0RPIHY2OiByZW1vdmUgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICAgIG9uQ2hhbmdlKGV2ZW50LCBuZXdDaGVja2VkKTtcbiAgICB9XG4gIH07XG4gIGxldCBkaXNhYmxlZCA9IGRpc2FibGVkUHJvcDtcbiAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgaWYgKHR5cGVvZiBkaXNhYmxlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRpc2FibGVkID0gbXVpRm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhhc0xhYmVsRm9yID0gdHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2hlY2tlZCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZWRnZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFN3aXRjaEJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgY29tcG9uZW50OiBcInNwYW5cIixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGNlbnRlclJpcHBsZTogdHJ1ZSxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgdGFiSW5kZXg6IG51bGwsXG4gICAgcm9sZTogdW5kZWZpbmVkLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChTd2l0Y2hCYXNlSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBkZWZhdWx0Q2hlY2tlZDogZGVmYXVsdENoZWNrZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaW5wdXQsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBpZDogaGFzTGFiZWxGb3IgPyBpZCA6IHVuZGVmaW5lZCxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICByZWFkT25seTogcmVhZE9ubHksXG4gICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9LCB0eXBlID09PSAnY2hlY2tib3gnICYmIHZhbHVlID09PSB1bmRlZmluZWQgPyB7fSA6IHtcbiAgICAgIHZhbHVlXG4gICAgfSwgaW5wdXRQcm9wcykpLCBjaGVja2VkID8gY2hlY2tlZEljb24gOiBpY29uXVxuICB9KSk7XG59KTtcblxuLy8gTkI6IElmIGNoYW5nZWQsIHBsZWFzZSB1cGRhdGUgQ2hlY2tib3gsIFN3aXRjaCBhbmQgUmFkaW9cbi8vIHNvIHRoYXQgdGhlIEFQSSBkb2N1bWVudGF0aW9uIGlzIHVwZGF0ZWQuXG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTd2l0Y2hCYXNlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkZWZhdWx0Q2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSAga2V5Ym9hcmQgZm9jdXMgcmlwcGxlIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGdpdmVuLCB1c2VzIGEgbmVnYXRpdmUgbWFyZ2luIHRvIGNvdW50ZXJhY3QgdGhlIHBhZGRpbmcgb24gb25lXG4gICAqIHNpZGUgKHRoaXMgaXMgb2Z0ZW4gaGVscGZ1bCBmb3IgYWxpZ25pbmcgdGhlIGxlZnQgb3IgcmlnaHRcbiAgICogc2lkZSBvZiB0aGUgaWNvbiB3aXRoIGNvbnRlbnQgYWJvdmUgb3IgYmVsb3csIHdpdGhvdXQgcnVpbmluZyB0aGUgYm9yZGVyXG4gICAqIHNpemUgYW5kIHNoYXBlKS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVkZ2U6IFByb3BUeXBlcy5vbmVPZihbJ2VuZCcsICdzdGFydCcsIGZhbHNlXSksXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmNoZWNrZWQuXG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHN0YXRlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGlucHV0IGNvbXBvbmVudCBwcm9wIGB0eXBlYC5cbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTd2l0Y2hCYXNlOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ1ByaXZhdGVTd2l0Y2hCYXNlJywgc2xvdCk7XG59XG5jb25zdCBzd2l0Y2hCYXNlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ1ByaXZhdGVTd2l0Y2hCYXNlJywgWydyb290JywgJ2NoZWNrZWQnLCAnZGlzYWJsZWQnLCAnaW5wdXQnLCAnZWRnZVN0YXJ0JywgJ2VkZ2VFbmQnXSk7XG5leHBvcnQgZGVmYXVsdCBzd2l0Y2hCYXNlQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpcIlxufSksICdDaGVja0JveE91dGxpbmVCbGFuaycpOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS05IDE0bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6XCJcbn0pLCAnQ2hlY2tCb3gnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0yIDEwSDd2LTJoMTB2MnpcIlxufSksICdJbmRldGVybWluYXRlQ2hlY2tCb3gnKTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVja2JveFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2hlY2tib3gnLCBzbG90KTtcbn1cbmNvbnN0IGNoZWNrYm94Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUNoZWNrYm94JywgWydyb290JywgJ2NoZWNrZWQnLCAnZGlzYWJsZWQnLCAnaW5kZXRlcm1pbmF0ZScsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnc2l6ZVNtYWxsJywgJ3NpemVNZWRpdW0nXSk7XG5leHBvcnQgZGVmYXVsdCBjaGVja2JveENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGlzYWJsZVNocmlua1wiLCBcInNpemVcIiwgXCJzdHlsZVwiLCBcInRoaWNrbmVzc1wiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmxldCBfID0gdCA9PiB0LFxuICBfdCxcbiAgX3QyLFxuICBfdDMsXG4gIF90NDtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNJWkUgPSA0NDtcbmNvbnN0IGNpcmN1bGFyUm90YXRlS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYCkpO1xuY29uc3QgY2lyY3VsYXJEYXNoS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMXB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuXG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMTAwcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTVweDtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTEyNXB4O1xuICB9XG5gKSk7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmtcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF0sXG4gICAgc3ZnOiBbJ3N2ZyddLFxuICAgIGNpcmNsZTogWydjaXJjbGUnLCBgY2lyY2xlJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIGRpc2FibGVTaHJpbmsgJiYgJ2NpcmNsZURpc2FibGVTaHJpbmsnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScpXG59LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIGNzcyhfdDMgfHwgKF90MyA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgYCksIGNpcmN1bGFyUm90YXRlS2V5ZnJhbWUpKTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NTVkcgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnU3ZnJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuc3ZnXG59KSh7XG4gIGRpc3BsYXk6ICdibG9jaycgLy8gS2VlcHMgdGhlIHByb2dyZXNzIGNlbnRlcmVkXG59KTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUgPSBzdHlsZWQoJ2NpcmNsZScsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnQ2lyY2xlJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5jaXJjbGUsIHN0eWxlc1tgY2lyY2xlJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBzdHlsZXMuY2lyY2xlRGlzYWJsZVNocmlua107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHN0cm9rZTogJ2N1cnJlbnRDb2xvcidcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnKVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYge1xuICAvLyBTb21lIGRlZmF1bHQgdmFsdWUgdGhhdCBsb29rcyBmaW5lIHdhaXRpbmcgZm9yIHRoZSBhbmltYXRpb24gdG8ga2lja3MgaW4uXG4gIHN0cm9rZURhc2hhcnJheTogJzgwcHgsIDIwMHB4JyxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMCAvLyBBZGQgdGhlIHVuaXQgdG8gZml4IGEgRWRnZSAxNiBhbmQgYmVsb3cgYnVnLlxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmICFvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgY3NzKF90NCB8fCAoX3Q0ID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhckRhc2hLZXlmcmFtZSkpO1xuXG4vKipcbiAqICMjIEFSSUFcbiAqXG4gKiBJZiB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGRlc2NyaWJpbmcgdGhlIGxvYWRpbmcgcHJvZ3Jlc3Mgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbiBvZiBhIHBhZ2UsXG4gKiB5b3Ugc2hvdWxkIHVzZSBgYXJpYS1kZXNjcmliZWRieWAgdG8gcG9pbnQgdG8gdGhlIHByb2dyZXNzIGJhciwgYW5kIHNldCB0aGUgYGFyaWEtYnVzeWBcbiAqIGF0dHJpYnV0ZSB0byBgdHJ1ZWAgb24gdGhhdCByZWdpb24gdW50aWwgaXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuXG4gKi9cbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3MgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDaXJjdWxhclByb2dyZXNzKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkaXNhYmxlU2hyaW5rID0gZmFsc2UsXG4gICAgICBzaXplID0gNDAsXG4gICAgICBzdHlsZSxcbiAgICAgIHRoaWNrbmVzcyA9IDMuNixcbiAgICAgIHZhbHVlID0gMCxcbiAgICAgIHZhcmlhbnQgPSAnaW5kZXRlcm1pbmF0ZSdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmssXG4gICAgc2l6ZSxcbiAgICB0aGlja25lc3MsXG4gICAgdmFsdWUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaXJjbGVTdHlsZSA9IHt9O1xuICBjb25zdCByb290U3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFByb3BzID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnKSB7XG4gICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogKChTSVpFIC0gdGhpY2tuZXNzKSAvIDIpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hhcnJheSA9IGNpcmN1bWZlcmVuY2UudG9GaXhlZCgzKTtcbiAgICByb290UHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA9IE1hdGgucm91bmQodmFsdWUpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBgJHsoKDEwMCAtIHZhbHVlKSAvIDEwMCAqIGNpcmN1bWZlcmVuY2UpLnRvRml4ZWQoMyl9cHhgO1xuICAgIHJvb3RTdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKC05MGRlZyknO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgaGVpZ2h0OiBzaXplXG4gICAgfSwgcm9vdFN0eWxlLCBzdHlsZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCJcbiAgfSwgcm9vdFByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzU1ZHLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuc3ZnLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHZpZXdCb3g6IGAke1NJWkUgLyAyfSAke1NJWkUgLyAyfSAke1NJWkV9ICR7U0laRX1gLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmNpcmNsZSxcbiAgICAgICAgc3R5bGU6IGNpcmNsZVN0eWxlLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjeDogU0laRSxcbiAgICAgICAgY3k6IFNJWkUsXG4gICAgICAgIHI6IChTSVpFIC0gdGhpY2tuZXNzKSAvIDIsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpY2tuZXNzXG4gICAgICB9KVxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2lyY3VsYXJQcm9ncmVzcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzaHJpbmsgYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBUaGlzIG9ubHkgd29ya3MgaWYgdmFyaWFudCBpcyBgaW5kZXRlcm1pbmF0ZWAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2hyaW5rOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMuYm9vbCwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlU2hyaW5rICYmIHByb3BzLnZhcmlhbnQgJiYgcHJvcHMudmFyaWFudCAhPT0gJ2luZGV0ZXJtaW5hdGUnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIHRoZSBgZGlzYWJsZVNocmlua2AgcHJvcCAnICsgJ3dpdGggYSB2YXJpYW50IG90aGVyIHRoYW4gYGluZGV0ZXJtaW5hdGVgLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIElmIHVzaW5nIGEgbnVtYmVyLCB0aGUgcGl4ZWwgdW5pdCBpcyBhc3N1bWVkLlxuICAgKiBJZiB1c2luZyBhIHN0cmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgQ1NTIHVuaXQsIGUuZy4gJzNyZW0nLlxuICAgKiBAZGVmYXVsdCA0MFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdGhpY2tuZXNzIG9mIHRoZSBjaXJjbGUuXG4gICAqIEBkZWZhdWx0IDMuNlxuICAgKi9cbiAgdGhpY2tuZXNzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgZm9yIHRoZSBkZXRlcm1pbmF0ZSB2YXJpYW50LlxuICAgKiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIFVzZSBpbmRldGVybWluYXRlIHdoZW4gdGhlcmUgaXMgbm8gcHJvZ3Jlc3MgdmFsdWUuXG4gICAqIEBkZWZhdWx0ICdpbmRldGVybWluYXRlJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZGV0ZXJtaW5hdGUnLCAnaW5kZXRlcm1pbmF0ZSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENpcmN1bGFyUHJvZ3Jlc3M7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIHNsb3QpO1xufVxuY29uc3QgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaXJjdWxhclByb2dyZXNzJywgWydyb290JywgJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3N2ZycsICdjaXJjbGUnLCAnY2lyY2xlRGV0ZXJtaW5hdGUnLCAnY2lyY2xlSW5kZXRlcm1pbmF0ZScsICdjaXJjbGVEaXNhYmxlU2hyaW5rJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZm9jdXNlZFwiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJzaXplXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCwgaXNBZG9ybmVkU3RhcnQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJy4uL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1Db250cm9sQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgbWFyZ2luLFxuICAgIGZ1bGxXaWR0aFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgbWFyZ2luICE9PSAnbm9uZScgJiYgYG1hcmdpbiR7Y2FwaXRhbGl6ZShtYXJnaW4pfWAsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtQ29udHJvbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWFyZ2luJHtjYXBpdGFsaXplKG93bmVyU3RhdGUubWFyZ2luKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCk7XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAvLyBSZXNldCBmaWVsZHNldCBkZWZhdWx0IHN0eWxlLlxuICBtaW5XaWR0aDogMCxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAwLFxuICBib3JkZXI6IDAsXG4gIHZlcnRpY2FsQWxpZ246ICd0b3AnXG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ25vcm1hbCcgJiYge1xuICBtYXJnaW5Ub3A6IDE2LFxuICBtYXJnaW5Cb3R0b206IDhcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnZGVuc2UnICYmIHtcbiAgbWFyZ2luVG9wOiA4LFxuICBtYXJnaW5Cb3R0b206IDRcbn0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGNvbnRleHQgc3VjaCBhcyBmaWxsZWQvZm9jdXNlZC9lcnJvci9yZXF1aXJlZCBmb3IgZm9ybSBpbnB1dHMuXG4gKiBSZWx5aW5nIG9uIHRoZSBjb250ZXh0IHByb3ZpZGVzIGhpZ2ggZmxleGliaWxpdHkgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc3RhdGUgYWx3YXlzIHN0YXlzXG4gKiBjb25zaXN0ZW50IGFjcm9zcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGBGb3JtQ29udHJvbGAuXG4gKiBUaGlzIGNvbnRleHQgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogIC0gRm9ybUxhYmVsXG4gKiAgLSBGb3JtSGVscGVyVGV4dFxuICogIC0gSW5wdXRcbiAqICAtIElucHV0TGFiZWxcbiAqXG4gKiBZb3UgY2FuIGZpbmQgb25lIGNvbXBvc2l0aW9uIGV4YW1wbGUgYmVsb3cgYW5kIG1vcmUgZ29pbmcgdG8gW3RoZSBkZW1vc10oL21hdGVyaWFsLXVpL3JlYWN0LXRleHQtZmllbGQvI2NvbXBvbmVudHMpLlxuICpcbiAqIGBgYGpzeFxuICogPEZvcm1Db250cm9sPlxuICogICA8SW5wdXRMYWJlbCBodG1sRm9yPVwibXktaW5wdXRcIj5FbWFpbCBhZGRyZXNzPC9JbnB1dExhYmVsPlxuICogICA8SW5wdXQgaWQ9XCJteS1pbnB1dFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJteS1oZWxwZXItdGV4dFwiIC8+XG4gKiAgIDxGb3JtSGVscGVyVGV4dCBpZD1cIm15LWhlbHBlci10ZXh0XCI+V2UnbGwgbmV2ZXIgc2hhcmUgeW91ciBlbWFpbC48L0Zvcm1IZWxwZXJUZXh0PlxuICogPC9Gb3JtQ29udHJvbD5cbiAqIGBgYFxuICpcbiAqIFx1MjZBMFx1RkUwRiBPbmx5IG9uZSBgSW5wdXRCYXNlYCBjYW4gYmUgdXNlZCB3aXRoaW4gYSBGb3JtQ29udHJvbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcy5cbiAqIEZvciBpbnN0YW5jZSwgb25seSBvbmUgaW5wdXQgY2FuIGJlIGZvY3VzZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHN0YXRlIHNob3VsZG4ndCBiZSBzaGFyZWQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2woaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBmb2N1c2VkOiB2aXN1YWxseUZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhpZGRlbkxhYmVsID0gZmFsc2UsXG4gICAgICBtYXJnaW4gPSAnbm9uZScsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbWFyZ2luLFxuICAgIHJlcXVpcmVkLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbYWRvcm5lZFN0YXJ0LCBzZXRBZG9ybmVkU3RhcnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEFkb3JuZWRTdGFydCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc011aUVsZW1lbnQoY2hpbGQsIFsnU2VsZWN0J10pID8gY2hpbGQucHJvcHMuaW5wdXQgOiBjaGlsZDtcbiAgICAgICAgaWYgKGlucHV0ICYmIGlzQWRvcm5lZFN0YXJ0KGlucHV0LnByb3BzKSkge1xuICAgICAgICAgIGluaXRpYWxBZG9ybmVkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxBZG9ybmVkU3RhcnQ7XG4gIH0pO1xuICBjb25zdCBbZmlsbGVkLCBzZXRGaWxsZWRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEZpbGxlZCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmlsbGVkKGNoaWxkLnByb3BzLCB0cnVlKSB8fCBpc0ZpbGxlZChjaGlsZC5wcm9wcy5pbnB1dFByb3BzLCB0cnVlKSkge1xuICAgICAgICAgIGluaXRpYWxGaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxGaWxsZWQ7XG4gIH0pO1xuICBjb25zdCBbZm9jdXNlZFN0YXRlLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzZWRTdGF0ZSkge1xuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG4gIGNvbnN0IGZvY3VzZWQgPSB2aXN1YWxseUZvY3VzZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlzYWJsZWQgPyB2aXN1YWxseUZvY3VzZWQgOiBmb2N1c2VkU3RhdGU7XG4gIGxldCByZWdpc3RlckVmZmVjdDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCByZWdpc3RlcmVkSW5wdXQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIHJlZ2lzdGVyRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZXJlIGFyZSBtdWx0aXBsZSBgSW5wdXRCYXNlYCBjb21wb25lbnRzIGluc2lkZSBhIEZvcm1Db250cm9sLicsICdUaGlzIGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcywgb25seSB1c2Ugb25lIGBJbnB1dEJhc2VgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkb3JuZWRTdGFydCxcbiAgICAgIHNldEFkb3JuZWRTdGFydCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIGZpbGxlZCxcbiAgICAgIGZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGgsXG4gICAgICBoaWRkZW5MYWJlbCxcbiAgICAgIHNpemUsXG4gICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25FbXB0eTogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRmlsbGVkOiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJFZmZlY3QsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhcmlhbnRcbiAgICB9O1xuICB9LCBbYWRvcm5lZFN0YXJ0LCBjb2xvciwgZGlzYWJsZWQsIGVycm9yLCBmaWxsZWQsIGZvY3VzZWQsIGZ1bGxXaWR0aCwgaGlkZGVuTGFiZWwsIHJlZ2lzdGVyRWZmZWN0LCByZXF1aXJlZCwgc2l6ZSwgdmFyaWFudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Db250cm9sLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCwgaW5wdXQgYW5kIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQgaW4gZm9jdXNlZCBzdGF0ZS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2w7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2wnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sJywgWydyb290JywgJ21hcmdpbk5vbmUnLCAnbWFyZ2luTm9ybWFsJywgJ21hcmdpbkRlbnNlJywgJ2Z1bGxXaWR0aCcsICdkaXNhYmxlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hlY2tlZFwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImNvbnRyb2xcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVUeXBvZ3JhcGh5XCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbFwiLCBcImxhYmVsUGxhY2VtZW50XCIsIFwibmFtZVwiLCBcIm9uQ2hhbmdlXCIsIFwicmVxdWlyZWRcIiwgXCJzbG90UHJvcHNcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VGb3JtQ29udHJvbCB9IGZyb20gJy4uL0Zvcm1Db250cm9sJztcbmltcG9ydCBTdGFjayBmcm9tICcuLi9TdGFjayc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBmb3JtQ29udHJvbExhYmVsQ2xhc3NlcywgeyBnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVkLFxuICAgIGxhYmVsUGxhY2VtZW50LFxuICAgIGVycm9yLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBgbGFiZWxQbGFjZW1lbnQke2NhcGl0YWxpemUobGFiZWxQbGFjZW1lbnQpfWAsIGVycm9yICYmICdlcnJvcicsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddLFxuICAgIGxhYmVsOiBbJ2xhYmVsJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ10sXG4gICAgYXN0ZXJpc2s6IFsnYXN0ZXJpc2snLCBlcnJvciAmJiAnZXJyb3InXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IEZvcm1Db250cm9sTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sTGFiZWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFt7XG4gICAgICBbYCYgLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMubGFiZWx9YF06IHN0eWxlcy5sYWJlbFxuICAgIH0sIHN0eWxlcy5yb290LCBzdHlsZXNbYGxhYmVsUGxhY2VtZW50JHtjYXBpdGFsaXplKG93bmVyU3RhdGUubGFiZWxQbGFjZW1lbnQpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICAvLyBGb3IgY29ycmVjdCBhbGlnbm1lbnQgd2l0aCB0aGUgdGV4dC5cbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBtYXJnaW5MZWZ0OiAtMTEsXG4gIG1hcmdpblJpZ2h0OiAxNixcbiAgLy8gdXNlZCBmb3Igcm93IHByZXNlbnRhdGlvbiBvZiByYWRpby9jaGVja2JveFxuICBbYCYuJHtmb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH1cbn0sIG93bmVyU3RhdGUubGFiZWxQbGFjZW1lbnQgPT09ICdzdGFydCcgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAncm93LXJldmVyc2UnLFxuICBtYXJnaW5MZWZ0OiAxNixcbiAgLy8gdXNlZCBmb3Igcm93IHByZXNlbnRhdGlvbiBvZiByYWRpby9jaGVja2JveFxuICBtYXJnaW5SaWdodDogLTExXG59LCBvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50ID09PSAndG9wJyAmJiB7XG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4tcmV2ZXJzZScsXG4gIG1hcmdpbkxlZnQ6IDE2XG59LCBvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiB7XG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBtYXJnaW5MZWZ0OiAxNlxufSwge1xuICBbYCYgLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMubGFiZWx9YF06IHtcbiAgICBbYCYuJHtmb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgICB9XG4gIH1cbn0pKTtcbmNvbnN0IEFzdGVyaXNrQ29tcG9uZW50ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpRm9ybUNvbnRyb2xMYWJlbCcsXG4gIHNsb3Q6ICdBc3RlcmlzaycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFzdGVyaXNrXG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5cbi8qKlxuICogRHJvcC1pbiByZXBsYWNlbWVudCBvZiB0aGUgYFJhZGlvYCwgYFN3aXRjaGAgYW5kIGBDaGVja2JveGAgY29tcG9uZW50LlxuICogVXNlIHRoaXMgY29tcG9uZW50IGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgYW4gZXh0cmEgbGFiZWwuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtQ29udHJvbExhYmVsKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbExhYmVsJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBjb250cm9sLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCxcbiAgICAgIGRpc2FibGVUeXBvZ3JhcGh5LFxuICAgICAgbGFiZWw6IGxhYmVsUHJvcCxcbiAgICAgIGxhYmVsUGxhY2VtZW50ID0gJ2VuZCcsXG4gICAgICByZXF1aXJlZDogcmVxdWlyZWRQcm9wLFxuICAgICAgc2xvdFByb3BzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBkaXNhYmxlZCA9IChfcmVmID0gZGlzYWJsZWRQcm9wICE9IG51bGwgPyBkaXNhYmxlZFByb3AgOiBjb250cm9sLnByb3BzLmRpc2FibGVkKSAhPSBudWxsID8gX3JlZiA6IG11aUZvcm1Db250cm9sID09IG51bGwgPyB2b2lkIDAgOiBtdWlGb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgY29uc3QgcmVxdWlyZWQgPSByZXF1aXJlZFByb3AgIT0gbnVsbCA/IHJlcXVpcmVkUHJvcCA6IGNvbnRyb2wucHJvcHMucmVxdWlyZWQ7XG4gIGNvbnN0IGNvbnRyb2xQcm9wcyA9IHtcbiAgICBkaXNhYmxlZCxcbiAgICByZXF1aXJlZFxuICB9O1xuICBbJ2NoZWNrZWQnLCAnbmFtZScsICdvbkNoYW5nZScsICd2YWx1ZScsICdpbnB1dFJlZiddLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAodHlwZW9mIGNvbnRyb2wucHJvcHNba2V5XSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb3BzW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb250cm9sUHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9KTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2Vycm9yJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbFBsYWNlbWVudCxcbiAgICByZXF1aXJlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHR5cG9ncmFwaHlTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5ID0gc2xvdFByb3BzLnR5cG9ncmFwaHkpICE9IG51bGwgPyBfc2xvdFByb3BzJHR5cG9ncmFwaHkgOiBjb21wb25lbnRzUHJvcHMudHlwb2dyYXBoeTtcbiAgbGV0IGxhYmVsID0gbGFiZWxQcm9wO1xuICBpZiAobGFiZWwgIT0gbnVsbCAmJiBsYWJlbC50eXBlICE9PSBUeXBvZ3JhcGh5ICYmICFkaXNhYmxlVHlwb2dyYXBoeSkge1xuICAgIGxhYmVsID0gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeSwgX2V4dGVuZHMoe1xuICAgICAgY29tcG9uZW50OiBcInNwYW5cIlxuICAgIH0sIHR5cG9ncmFwaHlTbG90UHJvcHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmxhYmVsLCB0eXBvZ3JhcGh5U2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiB0eXBvZ3JhcGh5U2xvdFByb3BzLmNsYXNzTmFtZSksXG4gICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhGb3JtQ29udHJvbExhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjb250cm9sLCBjb250cm9sUHJvcHMpLCByZXF1aXJlZCA/IC8qI19fUFVSRV9fKi9fanN4cyhTdGFjaywge1xuICAgICAgZGlzcGxheTogXCJibG9ja1wiLFxuICAgICAgY2hpbGRyZW46IFtsYWJlbCwgLyojX19QVVJFX18qL19qc3hzKEFzdGVyaXNrQ29tcG9uZW50LCB7XG4gICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmFzdGVyaXNrLFxuICAgICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgICB9KV1cbiAgICB9KSA6IGxhYmVsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Db250cm9sTGFiZWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGFwcGVhcnMgc2VsZWN0ZWQuXG4gICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBvZ3JhcGh5OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogQSBjb250cm9sIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgaXQgY2FuIGJlIGEgYFJhZGlvYCwgYSBgU3dpdGNoYCBvciBhIGBDaGVja2JveGAuXG4gICAqL1xuICBjb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIHJlbmRlcmVkIGFzIGl0IGlzIHBhc3NlZCB3aXRob3V0IGFuIGFkZGl0aW9uYWwgdHlwb2dyYXBoeSBub2RlLlxuICAgKi9cbiAgZGlzYWJsZVR5cG9ncmFwaHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBBIHRleHQgb3IgYW4gZWxlbWVudCB0byBiZSB1c2VkIGluIGFuIGVuY2xvc2luZyBsYWJlbCBlbGVtZW50LlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBsYWJlbC5cbiAgICogQGRlZmF1bHQgJ2VuZCdcbiAgICovXG4gIGxhYmVsUGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnZW5kJywgJ3N0YXJ0JywgJ3RvcCddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LlN5bnRoZXRpY0V2ZW50fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwb2dyYXBoeTogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbExhYmVsOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVTdGFjayB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5jb25zdCBTdGFjayA9IGNyZWF0ZVN0YWNrKHtcbiAgY3JlYXRlU3R5bGVkQ29tcG9uZW50OiBzdHlsZWQoJ2RpdicsIHtcbiAgICBuYW1lOiAnTXVpU3RhY2snLFxuICAgIHNsb3Q6ICdSb290JyxcbiAgICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG4gIH0pLFxuICB1c2VUaGVtZVByb3BzOiBpblByb3BzID0+IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdGFjaydcbiAgfSlcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3RhY2sucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtZGlyZWN0aW9uYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQgaXMgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ2NvbHVtbidcbiAgICovXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEFkZCBhbiBlbGVtZW50IGJldHdlZW4gZWFjaCBjaGlsZC5cbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgc3BhY2UgYmV0d2VlbiBpbW1lZGlhdGUgY2hpbGRyZW4uXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCwgd2hpY2ggYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgQ1NTIGZsZXhib3ggYGdhcGAgaXMgdXNlZCBpbnN0ZWFkIG9mIGFwcGx5aW5nIGBtYXJnaW5gIHRvIGNoaWxkcmVuLlxuICAgKlxuICAgKiBXaGlsZSBDU1MgYGdhcGAgcmVtb3ZlcyB0aGUgW2tub3duIGxpbWl0YXRpb25zXShodHRwczovL211aS5jb20vam95LXVpL3JlYWN0LXN0YWNrLyNsaW1pdGF0aW9ucyksXG4gICAqIGl0IGlzIG5vdCBmdWxseSBzdXBwb3J0ZWQgaW4gc29tZSBicm93c2Vycy4gV2UgcmVjb21tZW5kIGNoZWNraW5nIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1mbGV4JTIwZ2FwIGJlZm9yZSB1c2luZyB0aGlzIGZsYWcuXG4gICAqXG4gICAqIFRvIGVuYWJsZSB0aGlzIGZsYWcgZ2xvYmFsbHksIGZvbGxvdyB0aGUgW3RoZW1lJ3MgZGVmYXVsdCBwcm9wc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vdGhlbWUtY29tcG9uZW50cy8jZGVmYXVsdC1wcm9wcykgY29uZmlndXJhdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVzZUZsZXhHYXA6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU3RhY2s7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtQ29udHJvbExhYmVsJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbExhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sTGFiZWwnLCBbJ3Jvb3QnLCAnbGFiZWxQbGFjZW1lbnRTdGFydCcsICdsYWJlbFBsYWNlbWVudFRvcCcsICdsYWJlbFBsYWNlbWVudEJvdHRvbScsICdkaXNhYmxlZCcsICdsYWJlbCcsICdlcnJvcicsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sTGFiZWxDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJyb3dcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9mb3JtR3JvdXBDbGFzc2VzJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICByb3csXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHJvdyAmJiAncm93JywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1Hcm91cFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUZvcm1Hcm91cCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnJvdyAmJiBzdHlsZXMucm93XTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBmbGV4V3JhcDogJ3dyYXAnXG59LCBvd25lclN0YXRlLnJvdyAmJiB7XG4gIGZsZXhEaXJlY3Rpb246ICdyb3cnXG59KSk7XG5cbi8qKlxuICogYEZvcm1Hcm91cGAgd3JhcHMgY29udHJvbHMgc3VjaCBhcyBgQ2hlY2tib3hgIGFuZCBgU3dpdGNoYC5cbiAqIEl0IHByb3ZpZGVzIGNvbXBhY3Qgcm93IGxheW91dC5cbiAqIEZvciB0aGUgYFJhZGlvYCwgeW91IHNob3VsZCBiZSB1c2luZyB0aGUgYFJhZGlvR3JvdXBgIGNvbXBvbmVudCBpbnN0ZWFkIG9mIHRoaXMgb25lLlxuICovXG5jb25zdCBGb3JtR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtR3JvdXAoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Hcm91cCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJvdyA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2Vycm9yJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICByb3csXG4gICAgZXJyb3I6IGZjcy5lcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUdyb3VwUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtR3JvdXAucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBEaXNwbGF5IGdyb3VwIG9mIGVsZW1lbnRzIGluIGEgY29tcGFjdCByb3cuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByb3c6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUdyb3VwOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUdyb3VwJywgc2xvdCk7XG59XG5jb25zdCBmb3JtR3JvdXBDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUdyb3VwJywgWydyb290JywgJ3JvdycsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Hcm91cENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRcIiwgXCJjaGVja2VkSWNvblwiLCBcImNvbG9yXCIsIFwiaWNvblwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInNpemVcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBTd2l0Y2hCYXNlIGZyb20gJy4uL2ludGVybmFsL1N3aXRjaEJhc2UnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJhZGlvQnV0dG9uSWNvbiBmcm9tICcuL1JhZGlvQnV0dG9uSWNvbic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uJztcbmltcG9ydCB1c2VSYWRpb0dyb3VwIGZyb20gJy4uL1JhZGlvR3JvdXAvdXNlUmFkaW9Hcm91cCc7XG5pbXBvcnQgcmFkaW9DbGFzc2VzLCB7IGdldFJhZGlvVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9yYWRpb0NsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBzaXplXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIHNpemUgIT09ICdtZWRpdW0nICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFJhZGlvVXRpbGl0eUNsYXNzLCBjbGFzc2VzKSk7XG59O1xuY29uc3QgUmFkaW9Sb290ID0gc3R5bGVkKFN3aXRjaEJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aVJhZGlvJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuc2l6ZSAhPT0gJ21lZGl1bScgJiYgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sICFvd25lclN0YXRlLmRpc2FibGVSaXBwbGUgJiYge1xuICAnJjpob3Zlcic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke293bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uYWN0aXZlQ2hhbm5lbCA6IHRoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEob3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlIDogdGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYge1xuICBbYCYuJHtyYWRpb0NsYXNzZXMuY2hlY2tlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH1cbn0sIHtcbiAgW2AmLiR7cmFkaW9DbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59KSk7XG5mdW5jdGlvbiBhcmVFcXVhbFZhbHVlcyhhLCBiKSB7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiYgYiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGNvdWxkIGJlIGEgbnVtYmVyLCB0aGUgRE9NIHdpbGwgc3RyaW5naWZ5IGl0IGFueXdheS5cbiAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xufVxuY29uc3QgZGVmYXVsdENoZWNrZWRJY29uID0gLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uLCB7XG4gIGNoZWNrZWQ6IHRydWVcbn0pO1xuY29uc3QgZGVmYXVsdEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb24sIHt9KTtcbmNvbnN0IFJhZGlvID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUmFkaW8oaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfZGVmYXVsdEljb24kcHJvcHMkZm8sIF9kZWZhdWx0Q2hlY2tlZEljb24kcDtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUmFkaW8nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGVja2VkOiBjaGVja2VkUHJvcCxcbiAgICAgIGNoZWNrZWRJY29uID0gZGVmYXVsdENoZWNrZWRJY29uLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBpY29uID0gZGVmYXVsdEljb24sXG4gICAgICBuYW1lOiBuYW1lUHJvcCxcbiAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZVByb3AsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIHNpemVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcmFkaW9Hcm91cCA9IHVzZVJhZGlvR3JvdXAoKTtcbiAgbGV0IGNoZWNrZWQgPSBjaGVja2VkUHJvcDtcbiAgY29uc3Qgb25DaGFuZ2UgPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ob25DaGFuZ2VQcm9wLCByYWRpb0dyb3VwICYmIHJhZGlvR3JvdXAub25DaGFuZ2UpO1xuICBsZXQgbmFtZSA9IG5hbWVQcm9wO1xuICBpZiAocmFkaW9Hcm91cCkge1xuICAgIGlmICh0eXBlb2YgY2hlY2tlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNoZWNrZWQgPSBhcmVFcXVhbFZhbHVlcyhyYWRpb0dyb3VwLnZhbHVlLCBwcm9wcy52YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5hbWUgPSByYWRpb0dyb3VwLm5hbWU7XG4gICAgfVxuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSYWRpb1Jvb3QsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgaWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChpY29uLCB7XG4gICAgICBmb250U2l6ZTogKF9kZWZhdWx0SWNvbiRwcm9wcyRmbyA9IGRlZmF1bHRJY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2RlZmF1bHRJY29uJHByb3BzJGZvIDogc2l6ZVxuICAgIH0pLFxuICAgIGNoZWNrZWRJY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoZWNrZWRJY29uLCB7XG4gICAgICBmb250U2l6ZTogKF9kZWZhdWx0Q2hlY2tlZEljb24kcCA9IGRlZmF1bHRDaGVja2VkSWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9kZWZhdWx0Q2hlY2tlZEljb24kcCA6IHNpemVcbiAgICB9KSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJhZGlvLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8UmFkaW9CdXR0b25JY29uIGNoZWNrZWQgLz5cbiAgICovXG4gIGNoZWNrZWRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2RlZmF1bHQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVuY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPFJhZGlvQnV0dG9uSWNvbiAvPlxuICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHN0YXRlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgY2hlY2tlZCBzdGF0ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC5jaGVja2VkYCAoYm9vbGVhbikuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIHJhZGlvIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuIFRoZSBET00gQVBJIGNhc3RzIHRoaXMgdG8gYSBzdHJpbmcuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSYWRpb0J1dHRvblVuY2hlY2tlZEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uVW5jaGVja2VkJztcbmltcG9ydCBSYWRpb0J1dHRvbkNoZWNrZWRJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvbkNoZWNrZWQnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSYWRpb0J1dHRvbkljb25Sb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnZmxleCdcbn0pO1xuY29uc3QgUmFkaW9CdXR0b25JY29uQmFja2dyb3VuZCA9IHN0eWxlZChSYWRpb0J1dHRvblVuY2hlY2tlZEljb24pKHtcbiAgLy8gU2NhbGUgYXBwbGllZCB0byBwcmV2ZW50IGRvdCBtaXNhbGlnbm1lbnQgaW4gU2FmYXJpXG4gIHRyYW5zZm9ybTogJ3NjYWxlKDEpJ1xufSk7XG5jb25zdCBSYWRpb0J1dHRvbkljb25Eb3QgPSBzdHlsZWQoUmFkaW9CdXR0b25DaGVja2VkSWNvbikoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbGVmdDogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluLFxuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KVxufSwgb3duZXJTdGF0ZS5jaGVja2VkICYmIHtcbiAgdHJhbnNmb3JtOiAnc2NhbGUoMSknLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0LFxuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVzdFxuICB9KVxufSkpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIFJhZGlvQnV0dG9uSWNvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hlY2tlZCA9IGZhbHNlLFxuICAgIGNsYXNzZXMgPSB7fSxcbiAgICBmb250U2l6ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjaGVja2VkXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJhZGlvQnV0dG9uSWNvblJvb3QsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucm9vdCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uQmFja2dyb3VuZCwge1xuICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmJhY2tncm91bmQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbkRvdCwge1xuICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmRvdCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KV1cbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpb0J1dHRvbkljb24ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIHJhZGlvIHN0eWxpbmcuXG4gICAqL1xuICBmb250U2l6ZTogUHJvcFR5cGVzLm9uZU9mKFsnc21hbGwnLCAnbWVkaXVtJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9CdXR0b25JY29uOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHpcIlxufSksICdSYWRpb0J1dHRvblVuY2hlY2tlZCcpOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk04LjQ2NSA4LjQ2NUM5LjM3IDcuNTYgMTAuNjIgNyAxMiA3QzE0Ljc2IDcgMTcgOS4yNCAxNyAxMkMxNyAxMy4zOCAxNi40NCAxNC42MyAxNS41MzUgMTUuNTM1QzE0LjYzIDE2LjQ0IDEzLjM4IDE3IDEyIDE3QzkuMjQgMTcgNyAxNC43NiA3IDEyQzcgMTAuNjIgNy41NiA5LjM3IDguNDY1IDguNDY1WlwiXG59KSwgJ1JhZGlvQnV0dG9uQ2hlY2tlZCcpOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYWRpb0dyb3VwQ29udGV4dCBmcm9tICcuL1JhZGlvR3JvdXBDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVJhZGlvR3JvdXAoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KFJhZGlvR3JvdXBDb250ZXh0KTtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBSYWRpb0dyb3VwQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBSYWRpb0dyb3VwQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdSYWRpb0dyb3VwQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBSYWRpb0dyb3VwQ29udGV4dDsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYWRpb1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUmFkaW8nLCBzbG90KTtcbn1cbmNvbnN0IHJhZGlvQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVJhZGlvJywgWydyb290JywgJ2NoZWNrZWQnLCAnZGlzYWJsZWQnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3NpemVTbWFsbCddKTtcbmV4cG9ydCBkZWZhdWx0IHJhZGlvQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uc1wiLCBcImNoaWxkcmVuXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwibmFtZVwiLCBcIm9uQ2hhbmdlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICcuLi9Gb3JtR3JvdXAnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCBSYWRpb0dyb3VwQ29udGV4dCBmcm9tICcuL1JhZGlvR3JvdXBDb250ZXh0JztcbmltcG9ydCB1c2VJZCBmcm9tICcuLi91dGlscy91c2VJZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUmFkaW9Hcm91cCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFJhZGlvR3JvdXAocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICAvLyBwcml2YXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgbmFtZTogbmFtZVByb3AsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVByb3BcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgcm9vdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZVN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgbmFtZTogJ1JhZGlvR3JvdXAnXG4gIH0pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbnMsICgpID0+ICh7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGxldCBpbnB1dCA9IHJvb3RSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoOmRpc2FibGVkKTpjaGVja2VkJyk7XG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIGlucHV0ID0gcm9vdFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Om5vdCg6ZGlzYWJsZWQpJyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCByb290UmVmKTtcbiAgY29uc3QgbmFtZSA9IHVzZUlkKG5hbWVQcm9wKTtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIG5hbWUsXG4gICAgb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgIHNldFZhbHVlU3RhdGUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShldmVudCwgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbHVlXG4gIH0pLCBbbmFtZSwgb25DaGFuZ2UsIHNldFZhbHVlU3RhdGUsIHZhbHVlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0dyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0VmFsdWUsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Hcm91cCwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJyYWRpb2dyb3VwXCIsXG4gICAgICByZWY6IGhhbmRsZVJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJhZGlvR3JvdXAucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIG5hbWUgdXNlZCB0byByZWZlcmVuY2UgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuICAgKiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSB0aGlzIHByb3AsIGl0IGZhbGxzIGJhY2sgdG8gYSByYW5kb21seSBnZW5lcmF0ZWQgbmFtZS5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgcmFkaW8gYnV0dG9uIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbi4gVGhlIERPTSBBUEkgY2FzdHMgdGhpcyB0byBhIHN0cmluZy5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9Hcm91cDsiLCAiaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuXG5leHBvcnQgY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSh7XG4gIHBhbGV0dGU6IHtcbiAgICBwcmltYXJ5OiB7XG4gICAgICBtYWluOiBcIiMwMDgyN2NcIixcbiAgICB9LFxuICB9LFxufSk7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTm9kZSh7XG4gIGV4cGFuZGFibGUsXG4gIGV4cGFuZGVkLFxuICBoaWdobGlnaHQsXG4gIGlzTGFzdCxcbiAgY2hpbGRyZW4sXG4gIG9uQ2xpY2ssXG59OiB7XG4gIGV4cGFuZGFibGU6IGJvb2xlYW47XG4gIGV4cGFuZGVkOiBib29sZWFuO1xuICBoaWdobGlnaHQ6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY2hpbGRyZW46IGFueTtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbn0pIHtcbiAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXCJqc3RyZWUtbm9kZVwiXTtcblxuICBpZiAoZXhwYW5kZWQpIHtcbiAgICBjbGFzc2VzLnB1c2goXCJqc3RyZWUtb3BlblwiKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzLnB1c2goXCJqc3RyZWUtY2xvc2VkXCIpO1xuICB9XG5cbiAgaWYgKCFleHBhbmRhYmxlKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLWxlYWZcIik7XG4gIH1cblxuICBpZiAoaXNMYXN0KSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLWxhc3RcIik7XG4gIH1cblxuICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgY2hpbGRyZW4gPSA8c3BhbiBjbGFzc05hbWU9XCJqc3RyZWUtY2xpY2tlZFwiPntjaGlsZHJlbn08L3NwYW4+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgcm9sZT1cInRyZWVpdGVtXCIgY2xhc3NOYW1lPXtjbGFzc2VzLmpvaW4oXCIgXCIpfT5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzTmFtZT1cImpzdHJlZS1pY29uIGpzdHJlZS1vY2xcIlxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9saT5cbiAgKTtcbn1cbiIsICJleHBvcnQgdmFyIFN1YnNjcmliYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmliYWJsZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNjcmliYWJsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBsaXN0ZW5lciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IGNhbGxiYWNrO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDA7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgcmV0dXJuIFN1YnNjcmliYWJsZTtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vLyBUWVBFU1xuLy8gVVRJTFNcbmV4cG9ydCB2YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lb3V0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5S2V5QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2UoYXJyYXkxLCBhcnJheTIpIHtcbiAgcmV0dXJuIGFycmF5MS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gYXJyYXkyLmluZGV4T2YoeCkgPT09IC0xO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQXQoYXJyYXksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY29weSA9IGFycmF5LnNsaWNlKDApO1xuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xuICByZXR1cm4gY29weTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQsIHN0YWxlVGltZSkge1xuICByZXR1cm4gTWF0aC5tYXgodXBkYXRlZEF0ICsgKHN0YWxlVGltZSB8fCAwKSAtIERhdGUubm93KCksIDApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKCFpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgIHF1ZXJ5S2V5OiBhcmcxLFxuICAgICAgcXVlcnlGbjogYXJnMlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoaXNRdWVyeUtleShhcmcxKSkge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICAgIG11dGF0aW9uS2V5OiBhcmcxLFxuICAgICAgICBtdXRhdGlvbkZuOiBhcmcyXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uRm46IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBbX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KSwgYXJnM10gOiBbYXJnMSB8fCB7fSwgYXJnMl07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkZpbHRlckFyZ3MoYXJnMSwgYXJnMikge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgfSkgOiBhcmcxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpIHtcbiAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSAmJiBpbmFjdGl2ZSA9PT0gdHJ1ZSB8fCBhY3RpdmUgPT0gbnVsbCAmJiBpbmFjdGl2ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICdhbGwnO1xuICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgaW5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdub25lJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhY3RpdmV8aW5hY3RpdmUgY2FuIG9ubHkgYmUgdHJ1ZXxmYWxzZSBvciBmYWxzZXx0cnVlXG4gICAgLy8gc28sIHdoZW4gb25seSBvbmUgdmFsdWUgaXMgcHJvdmlkZWQsIHRoZSBtaXNzaW5nIG9uZSBoYXMgdG8gYmUgdGhlIG5lZ2F0ZWQgdmFsdWVcbiAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmUgIT0gbnVsbCA/IGFjdGl2ZSA6ICFpbmFjdGl2ZTtcbiAgICByZXR1cm4gaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSc7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KSB7XG4gIHZhciBhY3RpdmUgPSBmaWx0ZXJzLmFjdGl2ZSxcbiAgICAgIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIGluYWN0aXZlID0gZmlsdGVycy5pbmFjdGl2ZSxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgcXVlcnlLZXkgPSBmaWx0ZXJzLnF1ZXJ5S2V5LFxuICAgICAgc3RhbGUgPSBmaWx0ZXJzLnN0YWxlO1xuXG4gIGlmIChpc1F1ZXJ5S2V5KHF1ZXJ5S2V5KSkge1xuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCAhPT0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBxdWVyeS5vcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KHF1ZXJ5LnF1ZXJ5S2V5LCBxdWVyeUtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnlTdGF0dXNGaWx0ZXIgPSBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKTtcblxuICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdub25lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChxdWVyeVN0YXR1c0ZpbHRlciAhPT0gJ2FsbCcpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnYWN0aXZlJyAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YWxlID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNTdGFsZSgpICE9PSBzdGFsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc0ZldGNoaW5nKCkgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgdmFyIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgbXV0YXRpb25LZXkgPSBmaWx0ZXJzLm11dGF0aW9uS2V5O1xuXG4gIGlmIChpc1F1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKGhhc2hRdWVyeUtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJyAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIHZhciBoYXNoRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleUhhc2hGbikgfHwgaGFzaFF1ZXJ5S2V5O1xuICByZXR1cm4gaGFzaEZuKHF1ZXJ5S2V5KTtcbn1cbi8qKlxuICogRGVmYXVsdCBxdWVyeSBrZXlzIGhhc2ggZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleShxdWVyeUtleSkge1xuICB2YXIgYXNBcnJheSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkocXVlcnlLZXkpO1xuICByZXR1cm4gc3RhYmxlVmFsdWVIYXNoKGFzQXJyYXkpO1xufVxuLyoqXG4gKiBIYXNoZXMgdGhlIHZhbHVlIGludG8gYSBzdGFibGUgaGFzaC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlVmFsdWVIYXNoKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24gKF8sIHZhbCkge1xuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWw7XG4gIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYga2V5IGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGtleSBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIHJldHVybiBwYXJ0aWFsRGVlcEVxdWFsKGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYSksIGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYikpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGggYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsRGVlcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICFwYXJ0aWFsRGVlcEVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGBhYCBpZiBgYmAgaXMgZGVlcGx5IGVxdWFsLlxuICogSWYgbm90LCBpdCB3aWxsIHJlcGxhY2UgYW55IGRlZXBseSBlcXVhbCBjaGlsZHJlbiBvZiBgYmAgd2l0aCB0aG9zZSBvZiBgYWAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmcgYmV0d2VlbiBKU09OIHZhbHVlcyBmb3IgZXhhbXBsZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYik7XG5cbiAgaWYgKGFycmF5IHx8IGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgIHZhciBhU2l6ZSA9IGFycmF5ID8gYS5sZW5ndGggOiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgdmFyIGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIHZhciBiU2l6ZSA9IGJJdGVtcy5sZW5ndGg7XG4gICAgdmFyIGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgdmFyIGVxdWFsSXRlbXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG5cbiAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSkge1xuICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZSBvYmplY3RzLiBPbmx5IHdvcmtzIHdpdGggb2JqZWN0cyB0aGF0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAoYSAmJiAhYiB8fCBiICYmICFhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0gLy8gQ29waWVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKG8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuXG5cbiAgdmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXG4gIGlmICh0eXBlb2YgY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG5cblxuICB2YXIgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuXG5cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2suXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gc2NoZWR1bGUgc3RhdGUgdXBkYXRlcyBhZnRlciByZW5kZXJpbmcuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlTWljcm90YXNrKGNhbGxiYWNrKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydENvbnRyb2xsZXIoKSB7XG4gIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEZvY3VzTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShGb2N1c01hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIEZvY3VzTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25Gb2N1cykge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25Gb2N1cygpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gdmlzaWJpbGxpdHljaGFuZ2UgYW5kIGZvY3VzXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZvY3VzTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAoZm9jdXNlZCkge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRGb2N1c2VkID0gZnVuY3Rpb24gc2V0Rm9jdXNlZChmb2N1c2VkKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZvY3VzZWQgPSBmdW5jdGlvbiBpc0ZvY3VzZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9IC8vIGRvY3VtZW50IGdsb2JhbCBjYW4gYmUgdW5hdmFpbGFibGUgaW4gcmVhY3QgbmF0aXZlXG5cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ3Zpc2libGUnLCAncHJlcmVuZGVyJ10uaW5jbHVkZXMoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gRm9jdXNNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgT25saW5lTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShPbmxpbmVNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBPbmxpbmVNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbk9ubGluZSkge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25PbmxpbmUoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIG9ubGluZVxuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ubGluZU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKG9ubGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBvbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0T25saW5lKG9ubGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T25saW5lID0gZnVuY3Rpb24gc2V0T25saW5lKG9ubGluZSkge1xuICAgIHRoaXMub25saW5lID0gb25saW5lO1xuXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgdGhpcy5vbk9ubGluZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNPbmxpbmUgPSBmdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubGluZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvci5vbkxpbmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZTtcbiAgfTtcblxuICByZXR1cm4gT25saW5lTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7IiwgImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgZmFpbHVyZUNvdW50KSwgMzAwMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgKHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5jYW5jZWwpID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IHZhciBDYW5jZWxsZWRFcnJvciA9IGZ1bmN0aW9uIENhbmNlbGxlZEVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5yZXZlcnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldmVydDtcbiAgdGhpcy5zaWxlbnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnNpbGVudDtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn0gLy8gQ0xBU1NcblxuZXhwb3J0IHZhciBSZXRyeWVyID0gZnVuY3Rpb24gUmV0cnllcihjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgdmFyIGNhbmNlbEZuO1xuICB2YXIgY29udGludWVGbjtcbiAgdmFyIHByb21pc2VSZXNvbHZlO1xuICB2YXIgcHJvbWlzZVJlamVjdDtcbiAgdGhpcy5hYm9ydCA9IGNvbmZpZy5hYm9ydDtcblxuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbmNlbEZuID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKTtcbiAgfTtcblxuICB0aGlzLmNhbmNlbFJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gdHJ1ZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gIH07XG5cbiAgdGhpcy5mYWlsdXJlQ291bnQgPSAwO1xuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGZhbHNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAob3V0ZXJSZXNvbHZlLCBvdXRlclJlamVjdCkge1xuICAgIHByb21pc2VSZXNvbHZlID0gb3V0ZXJSZXNvbHZlO1xuICAgIHByb21pc2VSZWplY3QgPSBvdXRlclJlamVjdDtcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblN1Y2Nlc3ModmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25FcnJvcih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChjb250aW51ZVJlc29sdmUpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSBjb250aW51ZVJlc29sdmU7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICBjb25maWcub25QYXVzZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uUGF1c2UoKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSB1bmRlZmluZWQ7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ29udGludWUgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkNvbnRpbnVlKCk7XG4gICAgfSk7XG4gIH07IC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG5cblxuICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VPclZhbHVlOyAvLyBFeGVjdXRlIHF1ZXJ5XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSAvLyBDcmVhdGUgY2FsbGJhY2sgdG8gY2FuY2VsIHRoaXMgZmV0Y2hcblxuXG4gICAgY2FuY2VsRm4gPSBmdW5jdGlvbiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKSB7XG4gICAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICAgIF90aGlzLmFib3J0ID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5hYm9ydCgpOyAvLyBDYW5jZWwgdHJhbnNwb3J0IGlmIHN1cHBvcnRlZFxuXG4gICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VPclZhbHVlLmNhbmNlbCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyAvLyBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGxheWVyIHN1cHBvcnQgY2FuY2VsbGF0aW9uXG5cblxuICAgIF90aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHByb21pc2VPclZhbHVlKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdmFyIF9jb25maWckcmV0cnksIF9jb25maWckcmV0cnlEZWxheTtcblxuICAgICAgLy8gU3RvcCBpZiB0aGUgZmV0Y2ggaXMgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuXG5cbiAgICAgIHZhciByZXRyeSA9IChfY29uZmlnJHJldHJ5ID0gY29uZmlnLnJldHJ5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeSA6IDM7XG4gICAgICB2YXIgcmV0cnlEZWxheSA9IChfY29uZmlnJHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnlEZWxheSA6IGRlZmF1bHRSZXRyeURlbGF5O1xuICAgICAgdmFyIGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09ICdmdW5jdGlvbicgPyByZXRyeURlbGF5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIHZhciBzaG91bGRSZXRyeSA9IHJldHJ5ID09PSB0cnVlIHx8IHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgX3RoaXMuZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSAnZnVuY3Rpb24nICYmIHJldHJ5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpO1xuXG4gICAgICBpZiAoY2FuY2VsUmV0cnkgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoZSBxdWVyeSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJldHJpZWRcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5mYWlsdXJlQ291bnQrKzsgLy8gTm90aWZ5IG9uIGZhaWxcblxuICAgICAgY29uZmlnLm9uRmFpbCA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRmFpbChfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTsgLy8gRGVsYXlcblxuICAgICAgc2xlZXAoZGVsYXkpIC8vIFBhdXNlIGlmIHRoZSBkb2N1bWVudCBpcyBub3QgdmlzaWJsZSBvciB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmbGluZVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSB8fCAhb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY2FuY2VsUmV0cnkpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gU3RhcnQgbG9vcFxuXG5cbiAgcnVuKCk7XG59OyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciwgZnVuY3Rpb25hbFVwZGF0ZSwgaXNWYWxpZFRpbWVvdXQsIG5vb3AsIHJlcGxhY2VFcXVhbERlZXAsIHRpbWVVbnRpbFN0YWxlLCBlbnN1cmVRdWVyeUtleUFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tICcuL3JldHJ5ZXInOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5KGNvbmZpZykge1xuICAgIHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5jYWNoZSA9IGNvbmZpZy5jYWNoZTtcbiAgICB0aGlzLnF1ZXJ5S2V5ID0gY29uZmlnLnF1ZXJ5S2V5O1xuICAgIHRoaXMucXVlcnlIYXNoID0gY29uZmlnLnF1ZXJ5SGFzaDtcbiAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCB0aGlzLmdldERlZmF1bHRTdGF0ZSh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldE9wdGlvbnMgPSBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRjYWNoZVRpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHRoaXMubWV0YSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubWV0YTsgLy8gRGVmYXVsdCB0byA1IG1pbnV0ZXMgaWYgbm90IGNhY2hlIHRpbWUgaXMgc2V0XG5cbiAgICB0aGlzLmNhY2hlVGltZSA9IE1hdGgubWF4KHRoaXMuY2FjaGVUaW1lIHx8IDAsIChfdGhpcyRvcHRpb25zJGNhY2hlVGkgPSB0aGlzLm9wdGlvbnMuY2FjaGVUaW1lKSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRjYWNoZVRpIDogNSAqIDYwICogMTAwMCk7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZUdjID0gZnVuY3Rpb24gc2NoZWR1bGVHYygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuXG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuY2FjaGVUaW1lKSkge1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuY2FjaGVUaW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyR2NUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuZ2NUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5nY1RpbWVvdXQpO1xuICAgICAgdGhpcy5nY1RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vcHRpb25hbFJlbW92ZSA9IGZ1bmN0aW9uIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmhhZE9ic2VydmVycykge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyRpc0RhdGFFLCBfdGhpcyRvcHRpb25zO1xuXG4gICAgdmFyIHByZXZEYXRhID0gdGhpcy5zdGF0ZS5kYXRhOyAvLyBHZXQgdGhlIG5ldyBkYXRhXG5cbiAgICB2YXIgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpOyAvLyBVc2UgcHJldiBkYXRhIGlmIGFuIGlzRGF0YUVxdWFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHJldHVybnMgYHRydWVgXG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkaXNEYXRhRSA9IChfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zKS5pc0RhdGFFcXVhbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkaXNEYXRhRS5jYWxsKF90aGlzJG9wdGlvbnMsIHByZXZEYXRhLCBkYXRhKSkge1xuICAgICAgZGF0YSA9IHByZXZEYXRhO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgLy8gU3RydWN0dXJhbGx5IHNoYXJlIGRhdGEgYmV0d2VlbiBwcmV2IGFuZCBuZXcgZGF0YSBpZiBuZWVkZWRcbiAgICAgIGRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICB9IC8vIFNldCBkYXRhIGFuZCBtYXJrIGl0IGFzIGNhY2hlZFxuXG5cbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnVwZGF0ZWRBdFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBzZXRTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRTdGF0ZU9wdGlvbnM6IHNldFN0YXRlT3B0aW9uc1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyO1xuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7XG4gICAgKF90aGlzJHJldHJ5ZXIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyLmNhbmNlbChvcHRpb25zKTtcbiAgICByZXR1cm4gcHJvbWlzZSA/IHByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgdGhpcy5jYW5jZWwoe1xuICAgICAgc2lsZW50OiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmluaXRpYWxTdGF0ZSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzQWN0aXZlID0gZnVuY3Rpb24gaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIub3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNGZXRjaGluZztcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZSA9IGZ1bmN0aW9uIGlzU3RhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8IHRoaXMub2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpLmlzU3RhbGU7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGVCeVRpbWUgPSBmdW5jdGlvbiBpc1N0YWxlQnlUaW1lKHN0YWxlVGltZSkge1xuICAgIGlmIChzdGFsZVRpbWUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhbGVUaW1lID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIyO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjIuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjM7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCk7XG4gICAgfSk7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLnJlZmV0Y2goKTtcbiAgICB9IC8vIENvbnRpbnVlIGZldGNoIGlmIGN1cnJlbnRseSBwYXVzZWRcblxuXG4gICAgKF90aGlzJHJldHJ5ZXIzID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjMuY29udGludWUoKTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgICAgdGhpcy5oYWRPYnNlcnZlcnMgPSB0cnVlOyAvLyBTdG9wIHRoZSBxdWVyeSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG5cbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyQWRkZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgIT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5vdCBzdXBwb3J0IGNhbmNlbGxhdGlvblxuICAgICAgICAvLyB3ZSdsbCBsZXQgdGhlIHF1ZXJ5IGNvbnRpbnVlIHNvIHRoZSByZXN1bHQgY2FuIGJlIGNhY2hlZFxuICAgICAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmV0cnllci5pc1RyYW5zcG9ydENhbmNlbGFibGUgfHwgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKHtcbiAgICAgICAgICAgICAgcmV2ZXJ0OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVUaW1lKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRPYnNlcnZlcnNDb3VudCA9IGZ1bmN0aW9uIGdldE9ic2VydmVyc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ludmFsaWRhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoID0gZnVuY3Rpb24gZmV0Y2gob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkYmVoYXZpbyxcbiAgICAgICAgX2NvbnRleHQkZmV0Y2hPcHRpb25zLFxuICAgICAgICBfYWJvcnRDb250cm9sbGVyJGFib3I7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0ZldGNoaW5nKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIChmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoKSkge1xuICAgICAgICAvLyBTaWxlbnRseSBjYW5jZWwgY3VycmVudCBmZXRjaCBpZiB0aGUgdXNlciB3YW50cyB0byBjYW5jZWwgcmVmZXRjaGVzXG4gICAgICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJvbWlzZSkge1xuICAgICAgICB2YXIgX3RoaXMkcmV0cnllcjQ7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgcmV0cmllcyB0aGF0IHdlcmUgcG90ZW50aWFsbHkgY2FuY2VsbGVkIGR1ZSB0byB1bm1vdW50cyBjYW4gY29udGludWVcbiAgICAgICAgKF90aGlzJHJldHJ5ZXI0ID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllcjQuY29udGludWVSZXRyeSgpOyAvLyBSZXR1cm4gY3VycmVudCBwcm9taXNlIGlmIHdlIGFyZSBhbHJlYWR5IGZldGNoaW5nXG5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9IC8vIFVwZGF0ZSBjb25maWcgaWYgcGFzc2VkLCBvdGhlcndpc2UgdGhlIGNvbmZpZyBmcm9tIHRoZSBsYXN0IGV4ZWN1dGlvbiBpcyB1c2VkXG5cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfSAvLyBVc2UgdGhlIG9wdGlvbnMgZnJvbSB0aGUgZmlyc3Qgb2JzZXJ2ZXIgd2l0aCBhIHF1ZXJ5IGZ1bmN0aW9uIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBxdWVyeSBpcyBoeWRyYXRlZCBvciBjcmVhdGVkIHdpdGggc2V0UXVlcnlEYXRhLlxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4Lm9wdGlvbnMucXVlcnlGbjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBxdWVyeUtleSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkodGhpcy5xdWVyeUtleSk7XG4gICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpOyAvLyBDcmVhdGUgcXVlcnkgZnVuY3Rpb24gY29udGV4dFxuXG4gICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgcGFnZVBhcmFtOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCwgJ3NpZ25hbCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKGFib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7IC8vIENyZWF0ZSBmZXRjaCBmdW5jdGlvblxuXG4gICAgdmFyIGZldGNoRm4gPSBmdW5jdGlvbiBmZXRjaEZuKCkge1xuICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5xdWVyeUZuKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgfTsgLy8gVHJpZ2dlciBiZWhhdmlvciBob29rXG5cblxuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgZmV0Y2hPcHRpb25zOiBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIGZldGNoRm46IGZldGNoRm4sXG4gICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICB9O1xuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGJlaGF2aW8gPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8ub25GZXRjaCkge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnMkYmVoYXZpbzI7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zJGJlaGF2aW8yID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvMi5vbkZldGNoKGNvbnRleHQpO1xuICAgIH0gLy8gU3RvcmUgc3RhdGUgaW4gY2FzZSB0aGUgY3VycmVudCBmZXRjaCBuZWVkcyB0byBiZSByZXZlcnRlZFxuXG5cbiAgICB0aGlzLnJldmVydFN0YXRlID0gdGhpcy5zdGF0ZTsgLy8gU2V0IHRvIGZldGNoaW5nIHN0YXRlIGlmIG5vdCBhbHJlYWR5IGluIGl0XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNGZXRjaGluZyB8fCB0aGlzLnN0YXRlLmZldGNoTWV0YSAhPT0gKChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSkge1xuICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9uczI7XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnZmV0Y2gnLFxuICAgICAgICBtZXRhOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5tZXRhXG4gICAgICB9KTtcbiAgICB9IC8vIFRyeSB0byBmZXRjaCB0aGUgZGF0YVxuXG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogY29udGV4dC5mZXRjaEZuLFxuICAgICAgYWJvcnQ6IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogKF9hYm9ydENvbnRyb2xsZXIkYWJvciA9IGFib3J0Q29udHJvbGxlci5hYm9ydCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hYm9ydENvbnRyb2xsZXIkYWJvci5iaW5kKGFib3J0Q29udHJvbGxlciksXG4gICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uIG9uU3VjY2VzcyhkYXRhKSB7XG4gICAgICAgIF90aGlzMi5zZXREYXRhKGRhdGEpOyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuXG4gICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpczIpOyAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgLy8gT3B0aW1pc3RpY2FsbHkgdXBkYXRlIHN0YXRlIGlmIG5lZWRlZFxuICAgICAgICBpZiAoIShpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5zaWxlbnQpKSB7XG4gICAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMyKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICAgIH0gLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgICAgICBfdGhpczIub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IGNvbnRleHQub3B0aW9ucy5yZXRyeSxcbiAgICAgIHJldHJ5RGVsYXk6IGNvbnRleHQub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgdGhpcy5wcm9taXNlID0gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25RdWVyeVVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogX3RoaXMzLFxuICAgICAgICB0eXBlOiAncXVlcnlVcGRhdGVkJyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0U3RhdGUgPSBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUob3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICAgIHZhciBoYXNJbml0aWFsRGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgaW5pdGlhbERhdGFVcGRhdGVkQXQgPSBoYXNJbml0aWFsRGF0YSA/IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gICAgdmFyIGhhc0RhdGEgPSB0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBoYXNEYXRhID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgIT0gbnVsbCA/IGluaXRpYWxEYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSA6IDAsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgICBlcnJvclVwZGF0ZWRBdDogMCxcbiAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgZmV0Y2hNZXRhOiBudWxsLFxuICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgIHN0YXR1czogaGFzRGF0YSA/ICdzdWNjZXNzJyA6ICdpZGxlJ1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICB2YXIgX2FjdGlvbiRtZXRhLCBfYWN0aW9uJGRhdGFVcGRhdGVkQXQ7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAncGF1c2UnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgZmV0Y2hNZXRhOiAoX2FjdGlvbiRtZXRhID0gYWN0aW9uLm1ldGEpICE9IG51bGwgPyBfYWN0aW9uJG1ldGEgOiBudWxsLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IHRydWUsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0sICFzdGF0ZS5kYXRhVXBkYXRlZEF0ICYmIHtcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZGF0YVVwZGF0ZWRBdDogKF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA9IGFjdGlvbi5kYXRhVXBkYXRlZEF0KSAhPSBudWxsID8gX2FjdGlvbiRkYXRhVXBkYXRlZEF0IDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdmFyIGVycm9yID0gYWN0aW9uLmVycm9yO1xuXG4gICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy5yZXZlcnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5yZXZlcnRTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnaW52YWxpZGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc0ludmFsaWRhdGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5O1xufSgpOyIsICJpbXBvcnQgeyBzY2hlZHVsZU1pY3JvdGFzayB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBOb3RpZnlNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm90aWZ5TWFuYWdlcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG4gICAgdGhpcy5ub3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aWZ5TWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJhdGNoID0gZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHRoaXMudHJhbnNhY3Rpb25zKys7XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbnMtLTtcblxuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGUgPSBmdW5jdGlvbiBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5iYXRjaENhbGxzID0gZnVuY3Rpb24gYmF0Y2hDYWxscyhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuYmF0Y2hOb3RpZnlGbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVldWUuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF90aGlzMy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIG5vdGlmeSBmdW5jdGlvbi5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXROb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5ub3RpZnlGbiA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZm47XG4gIH07XG5cbiAgcmV0dXJuIE5vdGlmeU1hbmFnZXI7XG59KCk7IC8vIFNJTkdMRVRPTlxuXG5leHBvcnQgdmFyIG5vdGlmeU1hbmFnZXIgPSBuZXcgTm90aWZ5TWFuYWdlcigpOyIsICIvLyBUWVBFU1xuLy8gRlVOQ1RJT05TXG52YXIgbG9nZ2VyID0gY29uc29sZTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIHJldHVybiBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKG5ld0xvZ2dlcikge1xuICBsb2dnZXIgPSBuZXdMb2dnZXI7XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5LCBwYXJzZUZpbHRlckFyZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlDYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlDYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5xdWVyaWVzID0gW107XG4gICAgX3RoaXMucXVlcmllc01hcCA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIF9vcHRpb25zJHF1ZXJ5SGFzaDtcblxuICAgIHZhciBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgdmFyIHF1ZXJ5SGFzaCA9IChfb3B0aW9ucyRxdWVyeUhhc2ggPSBvcHRpb25zLnF1ZXJ5SGFzaCkgIT0gbnVsbCA/IF9vcHRpb25zJHF1ZXJ5SGFzaCA6IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSksXG4gICAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSA9IHF1ZXJ5O1xuICAgICAgdGhpcy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocXVlcnkpIHtcbiAgICB2YXIgcXVlcnlJbk1hcCA9IHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuXG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucXVlcmllcyA9IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHF1ZXJ5O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5UmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBfdGhpczIucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc01hcFtxdWVyeUhhc2hdO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJpZXMuZmluZChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pIDogdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5LCBub29wLCBwYXJzZUZpbHRlckFyZ3MsIHBhcnNlUXVlcnlBcmdzLCBwYXJ0aWFsTWF0Y2hLZXksIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlDYWNoZSB9IGZyb20gJy4vcXVlcnlDYWNoZSc7XG5pbXBvcnQgeyBNdXRhdGlvbkNhY2hlIH0gZnJvbSAnLi9tdXRhdGlvbkNhY2hlJztcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IgfSBmcm9tICcuL2luZmluaXRlUXVlcnlCZWhhdmlvcic7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50KGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xuICAgICAgY29uZmlnID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5xdWVyeUNhY2hlID0gY29uZmlnLnF1ZXJ5Q2FjaGUgfHwgbmV3IFF1ZXJ5Q2FjaGUoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUgPSBjb25maWcubXV0YXRpb25DYWNoZSB8fCBuZXcgTXV0YXRpb25DYWNoZSgpO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnMgfHwge307XG4gICAgdGhpcy5xdWVyeURlZmF1bHRzID0gW107XG4gICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzID0gW107XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDbGllbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9jdXMgPSBmb2N1c01hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25Gb2N1cygpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudW5zdWJzY3JpYmVPbmxpbmUgPSBvbmxpbmVNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uT25saW5lKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by51bm1vdW50ID0gZnVuY3Rpb24gdW5tb3VudCgpIHtcbiAgICB2YXIgX3RoaXMkdW5zdWJzY3JpYmVGb2N1LCBfdGhpcyR1bnN1YnNjcmliZU9ubGk7XG5cbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVGb2N1ID0gdGhpcy51bnN1YnNjcmliZUZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVGb2N1LmNhbGwodGhpcyk7XG4gICAgKF90aGlzJHVuc3Vic2NyaWJlT25saSA9IHRoaXMudW5zdWJzY3JpYmVPbmxpbmUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZU9ubGkuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGZpbHRlcnMuZmV0Y2hpbmcgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmlzTXV0YXRpbmcgPSBmdW5jdGlvbiBpc011dGF0aW5nKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmZpbmRBbGwoX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGZldGNoaW5nOiB0cnVlXG4gICAgfSkpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gZ2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kID0gdGhpcy5xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXksIGZpbHRlcnMpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlDYWNoZSRmaW5kLnN0YXRlLmRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJpZXNEYXRhID0gZnVuY3Rpb24gZ2V0UXVlcmllc0RhdGEocXVlcnlLZXlPckZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmLnF1ZXJ5S2V5LFxuICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgICAgIHZhciBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgIHJldHVybiBbcXVlcnlLZXksIGRhdGFdO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBzZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKHF1ZXJ5S2V5KTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpLnNldERhdGEodXBkYXRlciwgb3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJpZXNEYXRhID0gZnVuY3Rpb24gc2V0UXVlcmllc0RhdGEocXVlcnlLZXlPckZpbHRlcnMsIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczIuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZjIucXVlcnlLZXk7XG4gICAgICAgIHJldHVybiBbcXVlcnlLZXksIF90aGlzMi5zZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeVN0YXRlID0gZnVuY3Rpb24gZ2V0UXVlcnlTdGF0ZShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQyID0gdGhpcy5xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXksIGZpbHRlcnMpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlDYWNoZSRmaW5kMi5zdGF0ZTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlUXVlcmllcyA9IGZ1bmN0aW9uIHJlbW92ZVF1ZXJpZXMoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgdmFyIHF1ZXJ5Q2FjaGUgPSB0aGlzLnF1ZXJ5Q2FjaGU7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnlDYWNoZS5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0UXVlcmllcyA9IGZ1bmN0aW9uIHJlc2V0UXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczMgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1swXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3MzWzFdO1xuXG4gICAgdmFyIHF1ZXJ5Q2FjaGUgPSB0aGlzLnF1ZXJ5Q2FjaGU7XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgYWN0aXZlOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90aGlzMy5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbFF1ZXJpZXMgPSBmdW5jdGlvbiBjYW5jZWxRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNCA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M0WzBdLFxuICAgICAgICBfcGFyc2VGaWx0ZXJBcmdzNCQgPSBfcGFyc2VGaWx0ZXJBcmdzNFsxXSxcbiAgICAgICAgY2FuY2VsT3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M0JCA9PT0gdm9pZCAwID8ge30gOiBfcGFyc2VGaWx0ZXJBcmdzNCQ7XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNC5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuY2FuY2VsKGNhbmNlbE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlUXVlcmllcyA9IGZ1bmN0aW9uIGludmFsaWRhdGVRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3JlZjMsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hBY3RpdixcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEluYWN0LFxuICAgICAgICBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M1ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczVbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVsxXTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICAvLyBpZiBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUgaXMgbm90IHByb3ZpZGVkIGFuZCBmaWx0ZXJzLmFjdGl2ZSBpcyBleHBsaWNpdGx5IGZhbHNlLFxuICAgICAgLy8gZS5nLiBpbnZhbGlkYXRlUXVlcmllcyh7IGFjdGl2ZTogZmFsc2UgfSksIHdlIGRvbid0IHdhbnQgdG8gcmVmZXRjaCBhY3RpdmUgcXVlcmllc1xuICAgICAgYWN0aXZlOiAoX3JlZjMgPSAoX2ZpbHRlcnMkcmVmZXRjaEFjdGl2ID0gZmlsdGVycy5yZWZldGNoQWN0aXZlKSAhPSBudWxsID8gX2ZpbHRlcnMkcmVmZXRjaEFjdGl2IDogZmlsdGVycy5hY3RpdmUpICE9IG51bGwgPyBfcmVmMyA6IHRydWUsXG4gICAgICBpbmFjdGl2ZTogKF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA9IGZpbHRlcnMucmVmZXRjaEluYWN0aXZlKSAhPSBudWxsID8gX2ZpbHRlcnMkcmVmZXRjaEluYWN0IDogZmFsc2VcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkuaW52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfdGhpczUucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZWZldGNoUXVlcmllcyA9IGZ1bmN0aW9uIHJlZmV0Y2hRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M2WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczZbMV07XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczYucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmZldGNoKHVuZGVmaW5lZCwgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICByZWZldGNoUGFnZTogZmlsdGVycyA9PSBudWxsID8gdm9pZCAwIDogZmlsdGVycy5yZWZldGNoUGFnZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKTtcblxuICAgIGlmICghKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoUXVlcnkgPSBmdW5jdGlvbiBmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vdGFubmVybGluc2xleS9yZWFjdC1xdWVyeS9pc3N1ZXMvNjUyXG5cbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lKSA/IHF1ZXJ5LmZldGNoKGRlZmF1bHRlZE9wdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5LnN0YXRlLmRhdGEpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgcGFyc2VkT3B0aW9ucy5iZWhhdmlvciA9IGluZmluaXRlUXVlcnlCZWhhdmlvcigpO1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkocGFyc2VkT3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE11dGF0aW9ucyA9IGZ1bmN0aW9uIGNhbmNlbE11dGF0aW9ucygpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNy5tdXRhdGlvbkNhY2hlLmdldEFsbCgpLm1hcChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TXV0YXRpb25DYWNoZSgpLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24ob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuYnVpbGQodGhpcywgb3B0aW9ucykuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeUNhY2hlID0gZnVuY3Rpb24gZ2V0UXVlcnlDYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlO1xuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkNhY2hlID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25DYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRPcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEZWZhdWx0cyA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpID09PSBoYXNoUXVlcnlLZXkoeC5xdWVyeUtleSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMucHVzaCh7XG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlEZWZhdWx0cyA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlEZWZhdWx0cyRmO1xuXG4gICAgcmV0dXJuIHF1ZXJ5S2V5ID8gKF90aGlzJHF1ZXJ5RGVmYXVsdHMkZiA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcGFydGlhbE1hdGNoS2V5KHF1ZXJ5S2V5LCB4LnF1ZXJ5S2V5KTtcbiAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5RGVmYXVsdHMkZi5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBfcHJvdG8uc2V0TXV0YXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIHNldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBoYXNoUXVlcnlLZXkobXV0YXRpb25LZXkpID09PSBoYXNoUXVlcnlLZXkoeC5tdXRhdGlvbktleSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMucHVzaCh7XG4gICAgICAgIG11dGF0aW9uS2V5OiBtdXRhdGlvbktleSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIGdldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXkpIHtcbiAgICB2YXIgX3RoaXMkbXV0YXRpb25EZWZhdWx0O1xuXG4gICAgcmV0dXJuIG11dGF0aW9uS2V5ID8gKF90aGlzJG11dGF0aW9uRGVmYXVsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uS2V5LCB4Lm11dGF0aW9uS2V5KTtcbiAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG11dGF0aW9uRGVmYXVsdC5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMucXVlcmllcywgdGhpcy5nZXRRdWVyeURlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoICYmIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoID0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0ZWRPcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMubXV0YXRpb25zLCB0aGlzLmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tdXRhdGlvbktleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLnF1ZXJ5Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlDbGllbnQ7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNdXRhdGlvbihjb25maWcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29uZmlnLmRlZmF1bHRPcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlIHx8IGdldERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29udGludWUgPSBmdW5jdGlvbiBfY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNvbnRpbnVlKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiB0aGlzLm9wdGlvbnMudmFyaWFibGVzXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBfdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHZhcmlhYmxlczogX3RoaXMuc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVNdXRhdGlvbigpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZGF0YSA9IHJlc3VsdDsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7IC8vIExvZyBlcnJvclxuXG4gICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRyZXRyeTtcblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBtdXRhdGlvbkZuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubXV0YXRpb25GbihfdGhpczIuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiAoX3RoaXMkb3B0aW9ucyRyZXRyeSA9IHRoaXMub3B0aW9ucy5yZXRyeSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmV0cnkgOiAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLm11dGF0aW9uQ2FjaGUubm90aWZ5KF90aGlzMyk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uO1xufSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDFcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncGF1c2UnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgY29udGV4dDogYWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlc1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbkNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE11dGF0aW9uQ2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE11dGF0aW9uQ2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMubXV0YXRpb25zID0gW107XG4gICAgX3RoaXMubXV0YXRpb25JZCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uQ2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy5tdXRhdGlvbklkLFxuICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9ucy5tdXRhdGlvbktleSA/IGNsaWVudC5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG11dGF0aW9uO1xuICAgIH0pO1xuICAgIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLm11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICBfdGhpczIucmVtb3ZlKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChmaWx0ZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbmQoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobXV0YXRpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgdmFyIHBhdXNlZE11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc3RhdGUuaXNQYXVzZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBhdXNlZE11dGF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2UsIG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtdXRhdGlvbi5jb250aW51ZSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb25DYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IHsgaXNDYW5jZWxhYmxlIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBvbkZldGNoOiBmdW5jdGlvbiBvbkZldGNoKGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9ucywgX2NvbnRleHQkZmV0Y2hPcHRpb25zMiwgX2NvbnRleHQkZmV0Y2hPcHRpb25zMywgX2NvbnRleHQkZmV0Y2hPcHRpb25zNCwgX2NvbnRleHQkc3RhdGUkZGF0YSwgX2NvbnRleHQkc3RhdGUkZGF0YTI7XG5cbiAgICAgICAgdmFyIHJlZmV0Y2hQYWdlID0gKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIucmVmZXRjaFBhZ2U7XG4gICAgICAgIHZhciBmZXRjaE1vcmUgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczQgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMzLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnM0LmZldGNoTW9yZTtcbiAgICAgICAgdmFyIHBhZ2VQYXJhbSA9IGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLnBhZ2VQYXJhbTtcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdOZXh0UGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnZm9yd2FyZCc7XG4gICAgICAgIHZhciBpc0ZldGNoaW5nUHJldmlvdXNQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdiYWNrd2FyZCc7XG4gICAgICAgIHZhciBvbGRQYWdlcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YSA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEucGFnZXMpIHx8IFtdO1xuICAgICAgICB2YXIgb2xkUGFnZVBhcmFtcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YTIgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhMi5wYWdlUGFyYW1zKSB8fCBbXTtcbiAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB2YXIgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIHZhciBuZXdQYWdlUGFyYW1zID0gb2xkUGFnZVBhcmFtcztcbiAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOyAvLyBHZXQgcXVlcnkgZnVuY3Rpb25cblxuICAgICAgICB2YXIgcXVlcnlGbiA9IGNvbnRleHQub3B0aW9ucy5xdWVyeUZuIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBidWlsZE5ld1BhZ2VzID0gZnVuY3Rpb24gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKSB7XG4gICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IHByZXZpb3VzID8gW3BhcmFtXS5jb25jYXQobmV3UGFnZVBhcmFtcykgOiBbXS5jb25jYXQobmV3UGFnZVBhcmFtcywgW3BhcmFtXSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzID8gW3BhZ2VdLmNvbmNhdChwYWdlcykgOiBbXS5jb25jYXQocGFnZXMsIFtwYWdlXSk7XG4gICAgICAgIH07IC8vIENyZWF0ZSBmdW5jdGlvbiB0byBmZXRjaCBhIHBhZ2VcblxuXG4gICAgICAgIHZhciBmZXRjaFBhZ2UgPSBmdW5jdGlvbiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgcGFyYW0sIHByZXZpb3VzKSB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdDYW5jZWxsZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAndW5kZWZpbmVkJyAmJiAhbWFudWFsICYmIHBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQubWV0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5SZXN1bHQgPSBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShxdWVyeUZuUmVzdWx0KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocXVlcnlGblJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNlQXNBbnkgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZUFzQW55LmNhbmNlbCA9IHF1ZXJ5Rm5SZXN1bHQuY2FuY2VsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBwcm9taXNlOyAvLyBGZXRjaCBmaXJzdCBwYWdlP1xuXG4gICAgICAgIGlmICghb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShbXSk7XG4gICAgICAgIH0gLy8gRmV0Y2ggbmV4dCBwYWdlP1xuICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIHZhciBwYXJhbSA9IG1hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG4gICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBtYW51YWwsIHBhcmFtKTtcbiAgICAgICAgICB9IC8vIEZldGNoIHByZXZpb3VzIHBhZ2U/XG4gICAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICB2YXIgX21hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgICAgICAgIHZhciBfcGFyYW0gPSBfbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0UHJldmlvdXNQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG5cbiAgICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgX21hbnVhbCwgX3BhcmFtLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gUmVmZXRjaCBwYWdlc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgY29udGV4dC5vcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoRmlyc3RQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbMF0gPyByZWZldGNoUGFnZShvbGRQYWdlc1swXSwgMCwgb2xkUGFnZXMpIDogdHJ1ZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZVxuXG4gICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPyBmZXRjaFBhZ2UoW10sIG1hbnVhbCwgb2xkUGFnZVBhcmFtc1swXSkgOiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhbXSwgb2xkUGFnZVBhcmFtc1swXSwgb2xkUGFnZXNbMF0pKTsgLy8gRmV0Y2ggcmVtYWluaW5nIHBhZ2VzXG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hOZXh0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzW2ldID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbaV0sIGksIG9sZFBhZ2VzKSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJhbTIgPSBtYW51YWwgPyBvbGRQYWdlUGFyYW1zW2ldIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIHBhZ2VzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBfcGFyYW0yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMocGFnZXMsIG9sZFBhZ2VQYXJhbXNbaV0sIG9sZFBhZ2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcChpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IHBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogbmV3UGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmluYWxQcm9taXNlQXNBbnkgPSBmaW5hbFByb21pc2U7XG5cbiAgICAgICAgZmluYWxQcm9taXNlQXNBbnkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb21pc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbShwYWdlc1twYWdlcy5sZW5ndGggLSAxXSwgcGFnZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKHBhZ2VzWzBdLCBwYWdlcyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIG5leHQgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05leHRQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgbmV4dFBhZ2VQYXJhbSA9IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgbmV4dFBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gbnVsbCAmJiBuZXh0UGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIHByZXZpb3VzUGFnZVBhcmFtID0gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgcHJldmlvdXNQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBudWxsICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufSIsICJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmV4cG9ydCB2YXIgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBSZWFjdERPTS51bnN0YWJsZV9iYXRjaGVkVXBkYXRlczsiLCAiaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICcuL3JlYWN0QmF0Y2hlZFVwZGF0ZXMnO1xubm90aWZ5TWFuYWdlci5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKTsiLCAiZXhwb3J0IHZhciBsb2dnZXIgPSBjb25zb2xlOyIsICJpbXBvcnQgeyBzZXRMb2dnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbnNldExvZ2dlcihsb2dnZXIpOyIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIGRlZmF1bHRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbnZhciBRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpOyAvLyBpZiBjb250ZXh0U2hhcmluZyBpcyBvbiwgd2Ugc2hhcmUgdGhlIGZpcnN0IGFuZCBhdCBsZWFzdCBvbmVcbi8vIGluc3RhbmNlIG9mIHRoZSBjb250ZXh0IGFjcm9zcyB0aGUgd2luZG93XG4vLyB0byBlbnN1cmUgdGhhdCBpZiBSZWFjdCBRdWVyeSBpcyB1c2VkIGFjcm9zc1xuLy8gZGlmZmVyZW50IGJ1bmRsZXMgb3IgbWljcm9mcm9udGVuZHMgdGhleSB3aWxsXG4vLyBhbGwgdXNlIHRoZSBzYW1lICoqaW5zdGFuY2UqKiBvZiBjb250ZXh0LCByZWdhcmRsZXNzXG4vLyBvZiBtb2R1bGUgc2NvcGluZy5cblxuZnVuY3Rpb24gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKSB7XG4gIGlmIChjb250ZXh0U2hhcmluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICghd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0KSB7XG4gICAgICB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQgPSBkZWZhdWx0Q29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0O1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRDb250ZXh0O1xufVxuXG5leHBvcnQgdmFyIHVzZVF1ZXJ5Q2xpZW50ID0gZnVuY3Rpb24gdXNlUXVlcnlDbGllbnQoKSB7XG4gIHZhciBxdWVyeUNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoZ2V0UXVlcnlDbGllbnRDb250ZXh0KFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCkpKTtcblxuICBpZiAoIXF1ZXJ5Q2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBRdWVyeUNsaWVudCBzZXQsIHVzZSBRdWVyeUNsaWVudFByb3ZpZGVyIHRvIHNldCBvbmUnKTtcbiAgfVxuXG4gIHJldHVybiBxdWVyeUNsaWVudDtcbn07XG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSBmdW5jdGlvbiBRdWVyeUNsaWVudFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNsaWVudCA9IF9yZWYuY2xpZW50LFxuICAgICAgX3JlZiRjb250ZXh0U2hhcmluZyA9IF9yZWYuY29udGV4dFNoYXJpbmcsXG4gICAgICBjb250ZXh0U2hhcmluZyA9IF9yZWYkY29udGV4dFNoYXJpbmcgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjb250ZXh0U2hhcmluZyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBjbGllbnQubW91bnQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgY2xpZW50LnVubW91bnQoKTtcbiAgICB9O1xuICB9LCBbY2xpZW50XSk7XG4gIHZhciBDb250ZXh0ID0gZ2V0UXVlcnlDbGllbnRDb250ZXh0KGNvbnRleHRTaGFyaW5nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFNoYXJpbmdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjbGllbnRcbiAgfSwgY2hpbGRyZW4pKTtcbn07IiwgIlxuaW1wb3J0IHsgY3JlYXRlRW50aXR5VHJlZSB9IGZyb20gXCIuL0VudGl0eVRyZWVXaWRnZXRcIlxuXG53aW5kb3dbJ09MU1dpZGdldHMnXSA9IHtcbiAgICBjcmVhdGVFbnRpdHlUcmVlXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUVudGl0eVRyZWUgfVxuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aVBhbmVsLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24ocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQWx0TGFiZWwoKSB7XG4gICAgaWYgKHByb3BzLnN5bm9ueW1zICYmIHByb3BzLnN5bm9ueW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwcm9wcy5zeW5vbnltcy5tYXAoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgPEV1aUZsZXhJdGVtIGtleT17dmFsdWUgKyBpbmRleH0+e3ZhbHVlfTwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIH1cblxuICAvLyBVc2luZyByZWlmaWNhdGlvbi9wYXNzaW5nIHRoZSBFbnRpdHkgY2xhc3MgY291bGQgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uXG4gIC8vIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKGVudGl0eTogRW50aXR5KSB7XG4gIC8vICAgaWYgKGVudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHJldHVybiBlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHJmOiBSZWlmaWVkPGFueT4sIGluZGV4OiBudW1iZXIpID0+IChcbiAgLy8gICAgICAgPHAga2V5PXtyZi52YWx1ZSArIGluZGV4fT57Z2V0UmVpZmllZEpTWChlbnRpdHksIHJmLCBhcGkpfTwvcD5cbiAgLy8gICAgICkpO1xuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gPEV1aVRleHQ+Tm8gYWx0ZXJuYXRpdmUgbmFtZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgLy8gfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAgPEV1aUZsZXhHcm91cCBzdHlsZT17eyBwYWRkaW5nOiAxMCB9fSBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAge3JlbmRlckFsdExhYmVsKCl9XG4gICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufVxuXG5leHBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbihwcm9wczogQ3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNyb3NzUmVmcyhjcm9zc3JlZnM6IGFueSkge1xuICAgIGlmIChjcm9zc3JlZnMgJiYgY3Jvc3NyZWZzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjcm9zc3JlZnM/Lm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e2luZGV4fT5cbiAgICAgICAgICB7aXRlbX1cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gY3Jvc3MgcmVmZXJlbmNlcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpUGFuZWw+XG4gICAgICA8PlxuICAgICAgICA8RXVpRmxleEdyb3VwIHN0eWxlPXt7IHBhZGRpbmc6IDcgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge3JlbmRlckNyb3NzUmVmcyhwcm9wcy5jcm9zc3JlZnMpfVxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvPlxuICAgIDwvRXVpUGFuZWw+XG4gICk7XG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IHtFdWlQYW5lbCwgRXVpUHJvdmlkZXIsIEV1aVRyZWVWaWV3fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy90cmVlX3ZpZXcvdHJlZV92aWV3XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGZldGNoX2RhdGEsIGdldF91cmxfcHJlZml4IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9oaWVyYXJjaHlfd2lkZ2V0X2RlcHJlY2F0ZWRcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuLyoqXG4gKiBSZXNwb25zZSBmcm9tIE9MU1xuICovXG5pbnRlcmZhY2UgU2VtYW50aWNSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudDogc3RyaW5nO1xuICBpcmk6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICAvKiBzdGF0ZToge1xuICAgIG9wZW5lZDogYm9vbGVhbjtcbiAgfTsgKi9cbiAgY2hpbGRyZW46IGJvb2xlYW47XG4gIC8qIGFfYXR0cjoge1xuICAgIGlyaTogc3RyaW5nO1xuICAgIG9udG9sb2d5X25hbWU6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGNsYXNzOiBzdHJpbmc7XG4gIH07ICovXG4gIC8vIG9udG9sb2d5X25hbWU6IHN0cmluZztcbn1cbmNsYXNzIEhpZXJhcmNoeVRyZWUgaW1wbGVtZW50cyBOb2RlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGlyaTogc3RyaW5nO1xuICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlO1xuICBpZDogc3RyaW5nO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbiA9IHRydWU7XG4gIGNoaWxkcmVuOiBBcnJheTxIaWVyYXJjaHlUcmVlPiA9IFtdO1xuICBpY29uOiBSZWFjdC5SZWFjdEVsZW1lbnQgPSAoPD4rPC8+KTtcbiAgaWNvbldoZW5FeHBhbmRlZDogUmVhY3QuUmVhY3RFbGVtZW50ID0gKDw+LTwvPik7XG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBSZWFjdC5SZWFjdE5vZGUsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nLCBpcmk6IHN0cmluZykge1xuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5pcmkgPSBpcmk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbiAgc2V0Y2hpbGQoY2hpbGQ6IEhpZXJhcmNoeVRyZWUpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaWNvbiA9IDw+KzwvPjtcbiAgICB9XG4gIH1cbiAgaXNfcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZCA9PT0gXCIjXCI7XG4gIH1cbiAgdG9fc3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubGFiZWwgKyBcIlsgXCIgKyB0aGlzLmNoaWxkcmVuLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvX3N0cmluZygpKSArIFwiIF1cIlxuICAgICk7XG4gIH1cbiAgY2FsbGJhY2soKSB7IC8vVE9ETyBoYW5kbGUgdmlhIE9sc0FwaS5nZXRUZXJtVHJlZSB3aXRoIGNoaWxkIHBhcmFtXG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgYXBpX2RhdGFfb25jbGljayA9XG4gICAgICB0aGlzLnVybCArXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaXJpKSkgK1xuICAgICAgXCIvanN0cmVlL2NoaWxkcmVuL1wiICtcbiAgICAgIHRoaXMuaWQ7XG4gICAgZmV0Y2hfZGF0YShhcGlfZGF0YV9vbmNsaWNrKS50aGVuKChyZXMpID0+IHtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIGNyZWF0ZV90cmVlKHRoaXMsIHJlcywgdGhpcy51cmwpO1xuICAgIH0pO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBjcmVhdGVfdHJlZSA9IChcbiAgdHJlZTogSGllcmFyY2h5VHJlZSxcbiAgYXJyOiBBcnJheTxTZW1hbnRpY1Jlc3BvbnNlPixcbiAgdXJsOiBzdHJpbmdcbikgPT4ge1xuICBhcnJcbiAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUucGFyZW50ID09PSB0cmVlLmlkKVxuICAgIC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgdHJlZS5zZXRjaGlsZChcbiAgICAgICAgbmV3IEhpZXJhcmNoeVRyZWUodmFsdWUudGV4dCwgdmFsdWUuaWQsIHVybCwgdmFsdWUuaXJpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0cmVlLmNoaWxkcmVuLm1hcCgodmFsdWUpID0+IGNyZWF0ZV90cmVlKHZhbHVlLCBhcnIsIHVybCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMge1xuICBpcmk/OiBzdHJpbmc7XG4gIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgYXBpOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFRyZWUob2xzQXBpOiBPbHNBcGksIG9udG9sb2d5SUQ6IHN0cmluZywgaXJpPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SUQsIHRlcm1Jcmk6IGlyaX0sIHt2aWV3TW9kZTogXCJBbGxcIiwgc2libGluZ3M6IGZhbHNlfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5sb2coZXJyb3IpKTtcbiAgaWYgKGlyaSkgcmV0dXJuIHJlc3BvbnNlXG4gIGVsc2UgeyAvL3Jvb3RzIGhhdmUgYmVlbiBxdWVyaWVkLCBhbmQgdGhlIHJlc3BvbnNlIG5lZWRzIHJlc3RydWN0dXJpbmcgdG8gYmVjb21lIFNlbWFudGljUmVzcG9uc2VcbiAgICByZXR1cm4gcmVzcG9uc2UuX2VtYmVkZGVkLnRlcm1zLm1hcChcbiAgICAgICh4OiB7IGlyaTogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBoYXNfY2hpbGRyZW46IGJvb2xlYW4gfSwgaTogbnVtYmVyKSA9PlxuICAgICAgICAoe2lkOiAoKytpKS50b1N0cmluZygpLCBwYXJlbnQ6ICcjJywgaXJpOiB4LmlyaSwgdGV4dDogeC5sYWJlbCwgY2hpbGRyZW46IHguaGFzX2NoaWxkcmVufSlcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgPSAocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcykgPT4ge1xuICBjb25zdCB7IGlyaSwgb250b2xvZ3lJZCwgYXBpIH0gPSBwcm9wcztcbiAgY29uc3QgW3RyZWVJdGVtcywgc2V0VHJlZUl0ZW1zXSA9IHVzZVN0YXRlPEhpZXJhcmNoeVRyZWVbXT4oKTtcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBsaW5rVG9TZWxmID0gYXBpK1wib250b2xvZ2llcy9cIitvbnRvbG9neUlkK1wiL3Rlcm1zL1wiXG5cbiAgY29uc3QgZmV0Y2hDaGlsZHJlbiA9IGFzeW5jIChjaGlsZDogSGllcmFyY2h5VHJlZSkgPT4geyAvL2NvdWxkIGJlIGdpdmVuIHRvIEhpZXJhcmNoeVRyZWUgbm9kZXMgZm9yIG9uQ2xpY2sgY2FsbGJhY2tzXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaX0sIHtjaGlsZDogY2hpbGQuaWR9LCB1bmRlZmluZWQsIHVuZGVmaW5lZClcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gICAgY2hpbGQuY2hpbGRyZW4gPSBbXTtcbiAgICBjcmVhdGVfdHJlZShjaGlsZCwgcmVzcG9uc2UsIGdldF91cmxfcHJlZml4KGxpbmtUb1NlbGYpKTtcbiAgfVxuXG4gIC8vaW5pdGlhbCB0cmVlIHF1ZXJ5XG4gIHVzZVF1ZXJ5PEFycmF5PFNlbWFudGljUmVzcG9uc2U+PihbYXBpLCBcImdldFRlcm1UcmVlXCIsIG9udG9sb2d5SWQsIGlyaV0sICgpID0+IHtcbiAgICByZXR1cm4gZ2V0VHJlZShvbHNBcGksIG9udG9sb2d5SWQsIGlyaSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBIaWVyYXJjaHlUcmVlKFwiI1wiLCBcIiNcIiwgXCJcIiwgXCJcIik7XG4gICAgICAgIGlmIChyZXMpIGNyZWF0ZV90cmVlKHJvb3QsIHJlcywgZ2V0X3VybF9wcmVmaXgobGlua1RvU2VsZikpO1xuICAgICAgICBzZXRUcmVlSXRlbXMocm9vdC5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgfSk7XG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAge3RyZWVJdGVtcyAmJiAoXG4gICAgICAgIDxFdWlUcmVlVmlld1xuICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdD17dHJ1ZX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSGllcmFyY2h5VGFiXCJcbiAgICAgICAgICBpdGVtcz17dHJlZUl0ZW1zfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5RGVwcmVjYXRlZChwcm9wczogSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsIEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgfTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzTmFtZShjbGFzc2lkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL29udG9sb2dpZXMvXCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGNsYXNzaWQpLFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH1cbiAgKVxuICAgIC50aGVuKChzKSA9PiBzLmpzb24oKSlcbiAgICAudGhlbigocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY2xhc3NJRDogY2xhc3NpZCwgcHJlZkxhYmVsOiBzLmNvbmZpZz8udGl0bGUgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY2xhc3NJRDogY2xhc3NpZCwgcHJlZkxhYmVsOiB1bmRlZmluZWQgfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoQ29uY2VwdEJ5SWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gZmV0Y2goXG4gICAgXCJodHRwczovL3NlbWFudGljbG9va3VwLnpibWVkLmRlL29scy9hcGkvdGVybXMvXCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpLFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH1cbiAgKVxuICAgIC50aGVuKChzKSA9PiBzLmpzb24oKSlcbiAgICAudGhlbigocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY29uY2VwdElkOiBpZCwgY29uY2VwdDogcz8uX2VtYmVkZGVkPy50ZXJtc1swXSB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b2NvbXBsZXRlQ29uY2VwdChcbiAgdGV4dDogc3RyaW5nLFxuICBvbnRvbG9neTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pIHtcbiAgbGV0IHF1ZXJ0ID0gXCJcIjtcbiAgaWYgKG9udG9sb2d5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBxdWVydCA9IFwiJm9udG9sb2d5PVwiICsgb250b2xvZ3k7XG4gIH1cbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL3NlbGVjdD9xdWVyeUZpZWxkcz1sYWJlbCxzeW5vbnltLHNob3J0X2Zvcm0sb2JvX2lkJmdyb3VwRmllbGQ9dHJ1ZSZ0eXBlPWNsYXNzJnE9XCIgK1xuICAgICAgdGV4dCArXG4gICAgICBxdWVydCxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiBzPy5yZXNwb25zZT8uZG9jcy5tYXAoKHA6IGFueSkgPT4gbWFwT2xzVG9JcmlBbmROYW1lVHVwbGUocCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBtYXBPbHNUb0lyaUFuZE5hbWVUdXBsZShpdGVtOiBhbnkpIHtcbiAgcmV0dXJuIHsgaXJpOiBpdGVtPy5pcmksIGxhYmVsOiBpdGVtPy5sYWJlbCB9O1xufVxuXG5leHBvcnQgY29uc3QgZmV0Y2hfZGF0YSA9ICh1cmw6IHN0cmluZykgPT4ge1xuICByZXR1cm4gKFxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9oYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHVybCBHZXQgdXJsIHdpdGggaHR0cCBvciBodHRwcyBwcm90b2NvbFxuICogQHJldHVybnMgY29uY2F0aW5hdGUgcyB0byBodHRwXG4gKi9cbmV4cG9ydCBjb25zdCBmaXhfdXJsID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIGlmICh1cmwuc3Vic3RyKDAsIDUpID09PSBcImh0dHA6XCIpIHtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoXCJodHRwXCIsIFwiaHR0cHNcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHVybFxuICogQHJldHVybnMgcmV0dXJuIHVybCBmcm9tIGh0dHBzIHRvIC90ZXJtc1xuICovXG5leHBvcnQgY29uc3QgZ2V0X3VybF9wcmVmaXggPSAodXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGZpeF91cmwodXJsLnN1YnN0cmluZygwLCB1cmwuc2VhcmNoKFwiL3Rlcm1zXCIpICsgNykpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGknXG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknXG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiYWx0ZXJuYXRpdmVOYW1lVGFiXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImFsdGVybmF0aXZlIG5hbWVzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYihwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0LCBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiY3Jvc3NSZWZUYWJcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGlzRW50aXR5KGRhdGEpICYmXG4gICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImNyb3NzIHJlZmVyZW5jZXNcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3Jvc3NSZWZUYWIocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYldpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQ3Jvc3NSZWZUYWJXaWRnZXQsIGNyZWF0ZUNyb3NzUmVmVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZHVjZXJ9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCwgRXVpSWNvbiwgRXVpUHJvdmlkZXIsIEV1aUNhcmR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtIaWVyYXJjaHksIFRyZWVOb2RlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1Nrb3NBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvU2tvc0FwaVwiO1xuaW1wb3J0IHtIaWVyYXJjaHlCdWlsZGVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7T250b1BvcnRhbEFwaX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbnRvUG9ydGFsQXBpXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0hpZXJhcmNoeVdpZGdldFByb3BzLCBFbnRpdHlEYXRhfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzSW5kaXZpZHVhbFR5cGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNvbnN0IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMgPSB7XG4gICAgSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUzogZmFsc2UsXG4gICAgUFJFRkVSUkVEX1JPT1RTOiBmYWxzZSxcbiAgICBLRUVQX0VYUEFOU0lPTl9TVEFURVM6IGZhbHNlLFxuICAgIFNIT1dfU0lCTElOR1NfT05fSU5JVDogZmFsc2UsXG4gICAgVVNFX0xFR0FDWTogZmFsc2Vcbn0gYXMgY29uc3Q7XG5cbi8vIFRPRE86IHVzZSBvZiBlbnRpdHlUeXBlIGhhcyB0byBiZSByZXZpZXdlZC4gQ3VycmVudGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZW50aXR5VHlwZSBvZiB0aGUgaGllcmFyY2h5IGFuZCB0aGUgc3BlY2lmaWMgZW50aXR5IGluc2lkZSBpdCBhbHdheXMgbWF0Y2ggKG5vdCBuZWNlc3NhcmlseSB0cnVlIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzLCBidXQgdGhlc2UgaGF2ZSB0byBiZSByZXZpZXdlZCBhbnl3YXlzKVxuZnVuY3Rpb24gVHJlZUxpbmsocHJvcHM6IHtlbnRpdHlEYXRhOiBFbnRpdHlEYXRhLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmcsIG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgb25OYXZpZ2F0ZVRvRW50aXR5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogRW50aXR5RGF0YSkgPT4gdm9pZCwgb25OYXZpZ2F0ZVRvT250b2xvZ3k/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiBFbnRpdHlEYXRhKSA9PiB2b2lkLCBoaWdobGlnaHQ6IGJvb2xlYW59KSB7XG4gICAgbGV0IGRlZmluZWRCeTogc3RyaW5nW10gPSBwcm9wcy5lbnRpdHlEYXRhLmRlZmluZWRCeSB8fCBbXTtcbiAgICBpZihkZWZpbmVkQnkuaW5jbHVkZXMocHJvcHMub250b2xvZ3lJZCkpIGRlZmluZWRCeSA9IFtdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17cHJvcHMuaGlnaGxpZ2h0ID8gXCJoaWdobGlnaHRcIiA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9CRk9fMDAwMDA1MFwiICYmXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbklubGluZVN0YXJ0OiBcIjEuNXB4XCIsIG1hcmdpblRvcDogXCIyLjVweFwifX0gY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIj4mbmJzcDtQJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5JbmxpbmVTdGFydDogXCIxLjVweFwiLCBtYXJnaW5Ub3A6IFwiMi41cHhcIn19IGNsYXNzTmFtZT1cInN1cnJvdW5kQ2lyY2xlXCI+STwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5KSBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkocHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCBwcm9wcy5lbnRpdHlEYXRhKX19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3Byb3BzLmVudGl0eURhdGEubGFiZWwgfHwgcHJvcHMuZW50aXR5RGF0YS5pcml9IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIHtkZWZpbmVkQnkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICB7ZGVmaW5lZEJ5Lm1hcCgoZGVmaW5pbmdPbnRvbG9neSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7cHJvcHMuZW50aXR5RGF0YS5pcml9OiR7ZGVmaW5pbmdPbnRvbG9neX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KGRlZmluaW5nT250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgcHJvcHMuZW50aXR5RGF0YSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57ZGVmaW5pbmdPbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaVVybCxcbiAgICAgICAgYmFja2VuZFR5cGUsXG4gICAgICAgIGFwaUtleSxcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcblxuICAgICAgICBpcmksXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5JTkNMVURFX09CU09MRVRFX0VOVElUSUVTLFxuICAgICAgICBwcmVmZXJyZWRSb290cyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuUFJFRkVSUkVEX1JPT1RTLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5LRUVQX0VYUEFOU0lPTl9TVEFURVMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuU0hPV19TSUJMSU5HU19PTl9JTklULFxuICAgICAgICB1c2VMZWdhY3kgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlVTRV9MRUdBQ1ksXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gdXNlZCB0byBtYW51YWxseSByZXJlbmRlciB0aGUgY29tcG9uZW50IG9uIHVwZGF0ZSBvZiBoaWVyYXJjaHkgKGFzIGhpZXJhcmNoeSBvYmplY3QgaXMgbmVzdGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBzdGF0ZSB2YXJpYWJsZSBpdHNlbGYpXG4gICAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlUmVkdWNlcih4ID0+IHggKyAxICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIDApO1xuXG4gICAgY29uc3QgYXBpIDogSGllcmFyY2h5QnVpbGRlciA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoYmFja2VuZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwib2xzXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrb3Ntb3NcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTa29zQXBpKGFwaVVybCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9udG9wb3J0YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbnRvUG9ydGFsQXBpKGFwaVVybCwgYXBpS2V5IHx8IFwiXCIpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFthcGlVcmwsIGJhY2tlbmRUeXBlLCBhcGlLZXldXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogaGllcmFyY2h5LFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0hpZXJhcmNoeSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICBbXCJoaWVyYXJjaHlTZW1Mb29rUFwiLCBpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywga2VlcEV4cGFuc2lvblN0YXRlcywgc2hvd1NpYmxpbmdzT25Jbml0LCB1c2VMZWdhY3ldLFxuICAgICAgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3SGllcmFyY2h5KCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBhcGkuYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHtcbiAgICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgaXJpOiBpcmksXG4gICAgICAgICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzOiBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ6IHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjaygobm9kZTogVHJlZU5vZGUpID0+IHtcbiAgICAgICAgaWYoIShoaWVyYXJjaHkgaW5zdGFuY2VvZiBIaWVyYXJjaHkpKSB0aHJvdyBFcnJvcihcIkhpZXJhcmNoeSBvYmplY3Qgd2FzIHVuZGVmaW5lZCB3aGlsZSB0cnlpbmcgdG8gZXhwYW5kIGEgdHJlZSBub2RlLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXCIpO1xuXG4gICAgICAgIC8vIFRPRE86IGluZGl2aWR1YWwgaGllcmFyY2hpZXMgYXJlIGZyb3plbiBmb3Igbm93IChiZWZvcmUgdW5kb2luZywgY29ycmVjdCBjaGlsZCBsb2FkaW5nIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcylcbiAgICAgICAgaWYoaGllcmFyY2h5LmVudGl0eVR5cGUgJiYgaXNJbmRpdmlkdWFsVHlwZU5hbWUoaGllcmFyY2h5LmVudGl0eVR5cGUpKSByZXR1cm47XG5cbiAgICAgICAgLy8gdG9nZ2xlIGV4cGFuc2lvbiBzdGF0ZSBhbmQgZm9yY2UgY29tcG9uZW50IHRvIHJlcmVuZGVyIGFmdGVyd2FyZFxuICAgICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG5cbiAgICAgICAgLy8gZmV0Y2ggbmVlZGVkIGluZm9ybWF0aW9uIGFuZCByZXJlbmRlciBhZ2FpbiBpZiBuZWVkZWRcbiAgICAgICAgaWYobm9kZS5leHBhbmRlZCl7XG4gICAgICAgICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcblxuICAgICAgICAgICAgaGllcmFyY2h5LmZldGNoSW5mb3JtYXRpb25Gb3JFeHBhbnNpb24obm9kZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgaGllcmFyY2h5LmNsb3NlTm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH0sW2hpZXJhcmNoeV0pXG5cbiAgICBmdW5jdGlvbiByZW5kZXJUcmVlTm9kZShoaWVyYXJjaHk6IEhpZXJhcmNoeSwgbm9kZTogVHJlZU5vZGUsIGRyYXdMaW5lPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICA8RXVpVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2hlaWdodDogXCIyNHB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgYm9yZGVyTGVmdDogXCIxcHggZG90dGVkIGJsYWNrXCIsIGJvcmRlckJvdHRvbTogXCIxcHggZG90dGVkIGJsYWNrXCIsIHdpZHRoOiBcIjEycHhcIiwgaGVpZ2h0OiBcIjE2cHhcIiwgbGVmdDogXCI1LjVweFwiLCB0b3A6IFwiLTFweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIGJvcmRlckxlZnQ6IGRyYXdMaW5lID8gXCIxcHggZG90dGVkIGJsYWNrXCI6XCJcIiwgd2lkdGg6IFwiMTJweFwiLCBoZWlnaHQ6IFwiOXB4XCIsIGxlZnQ6IFwiNS41cHhcIiwgdG9wOiBcIjBweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHRvcDogXCItMjJweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFub2RlLmVudGl0eURhdGEuaGFzQ2hpbGRyZW4gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wiZW1wdHlcIn0vPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e319IG9uQ2xpY2s9eygpID0+IHt0b2dnbGVOb2RlKG5vZGUpfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e25vZGUuZXhwYW5kZWQgPyBcImFycm93RG93blwiIDogXCJhcnJvd1JpZ2h0XCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlTGluayBlbnRpdHlEYXRhPXtub2RlLmVudGl0eURhdGF9IGNoaWxkUmVsYXRpb25Ub1BhcmVudD17bm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnR9IG9udG9sb2d5SWQ9e2hpZXJhcmNoeS5vbnRvbG9neUlkfSBlbnRpdHlUeXBlPXtoaWVyYXJjaHkuZW50aXR5VHlwZX0gb25OYXZpZ2F0ZVRvRW50aXR5PXtvbk5hdmlnYXRlVG9FbnRpdHl9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX0gaGlnaGxpZ2h0PXtub2RlLmVudGl0eURhdGEuaXJpID09IGhpZXJhcmNoeT8ubWFpbkVudGl0eUlyaX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge25vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cyAhPSB1bmRlZmluZWQgJiYgbm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzID4gMCAmJiA8c3BhbiBzdHlsZT17e2NvbG9yOiBcImdyYXlcIn19Pih7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzLnRvTG9jYWxlU3RyaW5nKCl9KTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAge25vZGUuZXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7bWFyZ2luQmxvY2tFbmQ6IFwiMFwiLCBtYXJnaW5JbmxpbmVTdGFydDogXCI1LjVweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bm9kZS5sb2FkaW5nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBsZWZ0OiBcIjEzcHhcIiwgdG9wOiBcIjVweFwifX0vPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2FkZWRDaGlsZHJlbi5tYXAoKGNoaWxkLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtyYW5kb21TdHJpbmcoKX0gc3R5bGU9e3tib3JkZXJMZWZ0OiBkcmF3TGluZSA/IFwiMXB4IGRvdHRlZCBibGFja1wiOlwiXCIsIHBhZGRpbmdMZWZ0OiBcIjFyZW1cIn19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclRyZWVOb2RlKGhpZXJhcmNoeSwgY2hpbGQsIGlkeCA8IG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUNhcmQgdGl0bGU9e1wiXCJ9IGxheW91dD17XCJob3Jpem9udGFsXCJ9PlxuICAgICAgICAgICAgeyhpc1N1Y2Nlc3NIaWVyYXJjaHkgJiYgaGllcmFyY2h5ICE9IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7d2hpdGVTcGFjZTogXCJub3dyYXBcIn19PiB7LyogLy8gVE9ETzogRG9lcyBub3QgZ2V0IGRpc3BsYXllZCBjb3JyZWN0bHkgb24gc3Rvcnlib29rIG1haW4gcGFnZSAqL31cbiAgICAgICAgICAgICAgICAgICAge2hpZXJhcmNoeS5yb290cy5tYXAoKHJvb3ROb2RlLCBpZHgpID0+IHJlbmRlclRyZWVOb2RlKGhpZXJhcmNoeSwgcm9vdE5vZGUsIGlkeCA8IGhpZXJhcmNoeS5yb290cy5sZW5ndGggLSAxKSl9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIDogPEV1aUxvYWRpbmdTcGlubmVyLz59XG4gICAgICAgIDwvRXVpQ2FyZD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWVyYXJjaHkocHJvcHM6IEhpZXJhcmNoeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e3Byb3BzLmFwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgYmFja2VuZFR5cGU9e3Byb3BzLmJhY2tlbmRUeXBlfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM9e3Byb3BzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkUm9vdHM9e3Byb3BzLnByZWZlcnJlZFJvb3RzfVxuICAgICAgICAgICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzPXtwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzfVxuICAgICAgICAgICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ9e3Byb3BzLnNob3dTaWJsaW5nc09uSW5pdH1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHtIaWVyYXJjaHlXaWRnZXQsIGNyZWF0ZUhpZXJhcmNoeX07IiwgImltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge0J1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzfSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQge0VudGl0eURhdGFGb3JIaWVyYXJjaHksIEhpZXJhcmNoeSwgUGFyZW50Q2hpbGRSZWxhdGlvbiwgVHJlZU5vZGV9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL21vZGVsL1JlaWZpZWRcIjtcblxudHlwZSBUb3BDb25jZXB0ID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIGxhYmVsPzogc3RyaW5nLFxuICAgIHRvcENvbmNlcHRPZj86IHN0cmluZyxcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhbixcbiAgICBub3RhdGlvbj86IHN0cmluZ1xufVxuXG50eXBlIExhYmVsQW5kVXJpQW5kQ2hpbGRyZW4gPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhbixcbiAgICBub3RhdGlvbj86IHN0cmluZ1xufVxuXG50eXBlIEhpZXJhcmNoeVJlc3VsdCA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBwcmVmTGFiZWw6IHN0cmluZztcbiAgICB0b3A/OiBzdHJpbmcsXG4gICAgYnJvYWRlcj86IHN0cmluZ1tdLFxuICAgIG5hcnJvd2VyPzogTGFiZWxBbmRVcmlBbmRDaGlsZHJlbltdXG59O1xuXG50eXBlIFByZWZBbmRVcmlBbmRDaGlsZHJlbiA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBwcmVmTGFiZWw6IHN0cmluZyxcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhblxuICAgIG5vdGF0aW9uPzogc3RyaW5nXG59XG5cbmFic3RyYWN0IGNsYXNzIFNrb3NFbnRpdHlEYXRhRm9ySGllcmFyY2h5QnVpbGRlciB7XG4gICAgc3RhdGljIGZyb21Ub3BDb25jZXB0KG9iajogVG9wQ29uY2VwdCkgOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICAgICAgcmV0dXJuICB7XG4gICAgICAgICAgICBpcmk6IG9iai51cmksXG4gICAgICAgICAgICBsYWJlbDogb2JqLmxhYmVsLFxuICAgICAgICAgICAgaGFzQ2hpbGRyZW46IG9iai5oYXNDaGlsZHJlbixcbiAgICAgICAgICAgIHBhcmVudHM6IFtdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21IaWVyYXJjaHlSZXN1bHQob2JqOiBIaWVyYXJjaHlSZXN1bHQpIDogRW50aXR5RGF0YUZvckhpZXJhcmNoeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IG9iai51cmksXG4gICAgICAgICAgICBsYWJlbDogb2JqLnByZWZMYWJlbCxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiBvYmoubmFycm93ZXIgIT0gdW5kZWZpbmVkICYmIG9iai5uYXJyb3dlci5sZW5ndGggPiAwLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihvYmouYnJvYWRlcilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tUHJlZkFuZFVyaUFuZENoaWxkcmVuKG9iajogUHJlZkFuZFVyaUFuZENoaWxkcmVuLCBwYXJlbnRzPzogc3RyaW5nW10pIDogRW50aXR5RGF0YUZvckhpZXJhcmNoeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IG9iai51cmksXG4gICAgICAgICAgICBsYWJlbDogb2JqLnByZWZMYWJlbCxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiBvYmouaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICBwYXJlbnRzOiBSZWlmaWVkLmZyb21Kc29uKHBhcmVudHMpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21MYWJlbEFuZFVyaUFuZENoaWxkcmVuKG9iajogTGFiZWxBbmRVcmlBbmRDaGlsZHJlbiwgcGFyZW50cz86IHN0cmluZ1tdKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5sYWJlbCxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiBvYmouaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICBwYXJlbnRzOiBSZWlmaWVkLmZyb21Kc29uKHBhcmVudHMpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTa29zQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlcntcbiAgICBwcml2YXRlIGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZykge1xuICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgICAgICAgYmFzZVVSTDogYXBpLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgLy8gQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIiwgLy8gbGVhZHMgdG8gcHJlZmxpZ2h0IGVycm9yXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1ha2VDYWxsKHVybDogc3RyaW5nLCBjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgaWYoIW9udG9sb2d5SWQpIHRocm93IEVycm9yKFwib250b2xvZ3lJZCBoYXMgdG8gYmUgc3BlY2lmaWVkIGZvciBTS09TIEFQSS5cIik7XG5cbiAgICAgICAgY29uc3Qgcm9vdEVudGl0aWVzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4oKTtcbiAgICAgICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpO1xuICAgICAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IG9uSW5pdGlhbFBhdGg6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIG9ubHkgdXNlZCBpZiBzaG93U2libGluZ3NPbkluaXQgPT0gZmFsc2VcblxuICAgICAgICBpZihpcmkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJyb2FkZXJUcmFuc2l0aXZlOiBIaWVyYXJjaHlSZXN1bHRbXSA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYC8ke29udG9sb2d5SWR9L2hpZXJhcmNoeWAsIHtwYXJhbXM6IHt1cmk6IGlyaSwgbGFuZzogXCJlblwiLCBmb3JtYXQ6IFwiYXBwbGljYXRpb24vanNvblwifX0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKG9iaikgPT4gT2JqZWN0LmtleXMob2JqW1wiYnJvYWRlclRyYW5zaXRpdmVcIl0pLm1hcCgoa2V5KSA9PiBvYmpbXCJicm9hZGVyVHJhbnNpdGl2ZVwiXVtrZXldKSlcblxuICAgICAgICAgICAgLy8gc3RvcmVzIGFsbCBlbnRpdGllcyBhcHBlYXJpbmcgaW4gYnJvYWRlclRyYW5zaXRpdmVcbiAgICAgICAgICAgIC8vY29uc3QgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+ID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+KClcblxuICAgICAgICAgICAgZm9yKGNvbnN0IG5vZGUgb2YgYnJvYWRlclRyYW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlRGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeSA9IFNrb3NFbnRpdHlEYXRhRm9ySGllcmFyY2h5QnVpbGRlci5mcm9tSGllcmFyY2h5UmVzdWx0KG5vZGUpO1xuXG4gICAgICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChub2RlRGF0YS5pcmksIG5vZGVEYXRhKTtcbiAgICAgICAgICAgICAgICBpZihub2RlLnRvcCkgcm9vdEVudGl0aWVzLnB1c2gobm9kZURhdGEuaXJpKTtcblxuICAgICAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIG9uSW5pdGlhbFBhdGguYWRkKG5vZGVEYXRhLmlyaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IoY29uc3Qgbm9kZSBvZiBicm9hZGVyVHJhbnNpdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmKG5vZGUubmFycm93ZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUubmFycm93ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZE5vZGVEYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZE5vZGUudXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkTm9kZURhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlRGF0YSA9IFNrb3NFbnRpdHlEYXRhRm9ySGllcmFyY2h5QnVpbGRlci5mcm9tTGFiZWxBbmRVcmlBbmRDaGlsZHJlbihjaGlsZE5vZGUsIFtub2RlLnVyaV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjaGlsZE5vZGVEYXRhLmlyaSwgY2hpbGROb2RlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighY2hpbGROb2RlRGF0YS5wYXJlbnRzLm1hcCgocikgPT4gci52YWx1ZSkuaW5jbHVkZXMobm9kZS51cmkpKSBjaGlsZE5vZGVEYXRhLnBhcmVudHMucHVzaCguLi5SZWlmaWVkLmZyb21Kc29uPHN0cmluZz4obm9kZS51cmkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGROb2RlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5zb3J0KChhLCBiKSA9PiAoYS5sYWJlbCB8fCBhLmlyaSkubG9jYWxlQ29tcGFyZShiLmxhYmVsIHx8IGIuaXJpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KG5vZGUudXJpLCBjaGlsZHJlbi5tYXAoKGMpID0+IHtyZXR1cm4ge2NoaWxkSXJpOiBjLmlyaX19KSk7XG4gICAgICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQobm9kZS51cmkpOyAvLyBpbiBza29zLCBhbGwgY2hpbGRyZW4gYXJlIGxvYWRlZCBpZiBhbnkgYXJlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG9wY29uY2VwdHM6IFRvcENvbmNlcHRbXSA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYC8ke29udG9sb2d5SWR9L3RvcENvbmNlcHRzYCwge3BhcmFtczoge2xhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KVxuICAgICAgICAgICAgICAgIC50aGVuKChvYmopID0+IG9ialtcInRvcGNvbmNlcHRzXCJdKVxuXG4gICAgICAgICAgICBmb3IoY29uc3QgY29uY2VwdCBvZiB0b3Bjb25jZXB0cykge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKGNvbmNlcHQudXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKGVudGl0eURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHksIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+KTogVHJlZU5vZGUge1xuICAgICAgICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkRGF0YSAhPSB1bmRlZmluZWQgJiYgb25Jbml0aWFsUGF0aC5oYXMoY2hpbGQuY2hpbGRJcmkpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkRGF0YSAhPSB1bmRlZmluZWQpIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoY2hpbGREYXRhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBjb25zdCByb290Tm9kZXM6IFRyZWVOb2RlW10gPSByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PiBjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KHJvb3RFbnRpdHkpISwgY3ljbGVDaGVjaykpLnNvcnQoKGEsYikgPT4gKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpKSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgICAgICAgIHJvb3RzOiByb290Tm9kZXMsXG4gICAgICAgICAgICBhcGk6IG5ldyBTa29zQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSksXG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLFxuICAgICAgICAgICAgbWFpbkVudGl0eUlyaTogaXJpLFxuICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlczogcHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YUZvckhpZXJhcmNoeVtdPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgIG9udG9sb2d5SWRcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGNvbnN0IG5hcnJvd2VyOiBQcmVmQW5kVXJpQW5kQ2hpbGRyZW5bXSA9IChhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS9jaGlsZHJlbmAsIHtwYXJhbXM6IHt1cmk6IG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgbGFuZzogXCJlblwiLCBmb3JtYXQ6IFwiYXBwbGljYXRpb24vanNvblwifX0pKVtcIm5hcnJvd2VyXCJdO1xuXG4gICAgICAgIHJldHVybiBuYXJyb3dlci5tYXAoKG9iaikgPT4gU2tvc0VudGl0eURhdGFGb3JIaWVyYXJjaHlCdWlsZGVyLmZyb21QcmVmQW5kVXJpQW5kQ2hpbGRyZW4ob2JqLCBbbm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpXSkpO1xuICAgIH1cblxufSIsICJpbXBvcnQge0J1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzfSBmcm9tIFwiLi9IaWVyYXJjaHlCdWlsZGVyXCI7XG5pbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7cGx1cmFsaXplVHlwZX0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQge3VzZUxlZ2FjeUFyZ1R5cGV9IGZyb20gXCIuLi9zdG9yaWVzL3N0b3J5QXJnc1wiO1xuXG50eXBlIEhpZXJhcmNoeU5vZGUgPSB7XG4gICAgcHJlZkxhYmVsOiBzdHJpbmdcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhblxuICAgIGNoaWxkcmVuOiBIaWVyYXJjaHlOb2RlW11cbiAgICBvYnNvbGV0ZTogYm9vbGVhbiAvLyBUT0RPOiB1c2UgdGhpcyB0byBlbmFibGUgc2hvd2luZyBvYnNvbGV0ZVRlcm1zP1xuICAgIFtcIkBpZFwiXTogc3RyaW5nXG4gICAgW1wiQHR5cGVcIl06IHN0cmluZ1xuICAgIC8vIGxpbmtzOiBvYmplY3QgLSBub3QgbmVlZGVkIGhlcmVcbiAgICBbXCJAY29udGV4dFwiXToge1xuICAgICAgICBbXCJAdm9jYWJcIl06IHN0cmluZ1xuICAgICAgICBwcmVmTGFiZWw6IHN0cmluZ1xuICAgICAgICBvYnNvbGV0ZTogc3RyaW5nXG4gICAgICAgIFtcIkBsYW5ndWFnZVwiXTogc3RyaW5nXG4gICAgfVxufVxuXG5mdW5jdGlvbiBIaWVyYXJjaHlOb2RlVG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGhpZXJhcmNoeU5vZGU6IEhpZXJhcmNoeU5vZGUpIDogRW50aXR5RGF0YUZvckhpZXJhcmNoeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXJpOiBoaWVyYXJjaHlOb2RlW1wiQGlkXCJdLFxuICAgICAgICBsYWJlbDogaGllcmFyY2h5Tm9kZVtcInByZWZMYWJlbFwiXSxcbiAgICAgICAgaGFzQ2hpbGRyZW46IGhpZXJhcmNoeU5vZGVbXCJoYXNDaGlsZHJlblwiXSxcbiAgICAgICAgcGFyZW50czogW11cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPbnRvUG9ydGFsQXBpIGltcGxlbWVudHMgSGllcmFyY2h5QnVpbGRlcntcbiAgICBwcml2YXRlIGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2U7XG4gICAgcHJpdmF0ZSBhcGlLZXk6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nLCBhcGlLZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgICAgICAgYmFzZVVSTDogYXBpLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgLy8gQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIiwgLy8gbGVhZHMgdG8gcHJlZmxpZ2h0IGVycm9yXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwge307XG5cbiAgICAgICAgICAgIC8vIGRlZmF1bHQgcGFyYW1zXG4gICAgICAgICAgICBjb25maWcucGFyYW1zW1wiYXBpa2V5XCJdID0gdGhpcy5hcGlLZXk7XG4gICAgICAgICAgICBjb25maWcucGFyYW1zW1wiZm9ybWF0XCJdID0gXCJqc29uXCI7XG5cbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnPG5ldmVyPikge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQodXJsLCBjb25maWcpKS5kYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZEhpZXJhcmNoeVdpdGhJcmkocHJvcHM6IEJ1aWxkSGllcmFyY2h5UHJvcHMgJiBIaWVyYXJjaHlJcmlQcm9wKSA6IFByb21pc2U8SGllcmFyY2h5PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlyaSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgaWYoIW9udG9sb2d5SWQpIHRocm93IEVycm9yKFwib250b2xvZ3lJZCBoYXMgdG8gYmUgc3BlY2lmaWVkIGZvciBPbnRvUG9ydGFsIEFQSS5cIik7XG4gICAgICAgIGlmKCFlbnRpdHlUeXBlKSB0aHJvdyBFcnJvcihcImVudGl0eVR5cGUgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgT250b1BvcnRhbCBBUEkuXCIpO1xuXG4gICAgICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpO1xuICAgICAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3Qgb25Jbml0aWFsUGF0aDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gb25seSB1c2VkIGlmIHNob3dTaWJsaW5nc09uSW5pdCA9PSBmYWxzZVxuXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkUmVsYXRpb25zKGN1cnJOb2RlOiBIaWVyYXJjaHlOb2RlKSB7XG4gICAgICAgICAgICBlbnRpdGllc0RhdGEuc2V0KGN1cnJOb2RlW1wiQGlkXCJdLCBIaWVyYXJjaHlOb2RlVG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGN1cnJOb2RlKSlcbiAgICAgICAgICAgIGlmKGN1cnJOb2RlLmhhc0NoaWxkcmVuICYmIGN1cnJOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucy5zZXQoY3Vyck5vZGVbXCJAaWRcIl0sIGN1cnJOb2RlLmNoaWxkcmVuLm1hcCgoYykgPT4ge3JldHVybiB7Y2hpbGRJcmk6IGNbXCJAaWRcIl19fSkpO1xuXG4gICAgICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChjdXJyTm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuXG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGN1cnJOb2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihpcmkpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHByb3BlcnR5IHdoaWNoIGlzIGNoaWxkIG9mIG11bHRpcGxlIHByb3BlcnRpZXMgb25seSBpcyByZXR1cm5lZCBpbiBvbmUgcGFyZW50IGluIC90cmVlIHF1ZXJ5ICgtPiBkbyBpdCByaWdodCBtYW51YWxseT8pIChlLmcuOiBodHRwOi8vc3dlZXRvbnRvbG9neS5uZXQvcmVsYVRpbWUvaGFzTkhUaW1lIC0+IGhhcyBtb3JlIHRoYW4gb25lIHBhcmVudCwgYnV0IGlzIG9ubHkgc2hvd24gaW4gb25lIHBhcmVudCBpbiAvdHJlZSlcbiAgICAgICAgICAgIGNvbnN0IGFwaV90cmVlOiBIaWVyYXJjaHlOb2RlW10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvb250b2xvZ2llcy8ke29udG9sb2d5SWQudG9VcHBlckNhc2UoKX0vJHtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIGZhbHNlKX0vJHtlbmNvZGVVUklDb21wb25lbnQoaXJpKX0vdHJlZWAsIHtwYXJhbXM6IHtpbmNsdWRlOiBcIkBpZCxwcmVmTGFiZWwsaGFzQ2hpbGRyZW4sY2hpbGRyZW5cIn19KTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHJvb3ROb2RlIG9mIGFwaV90cmVlKSB7XG4gICAgICAgICAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBidWlsZFJlbGF0aW9ucyhyb290Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChpcmkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm9vdHMgOiBIaWVyYXJjaHlOb2RlW10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICAgICAgICAgIGAvb250b2xvZ2llcy8ke29udG9sb2d5SWQudG9VcHBlckNhc2UoKX0vJHtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIGZhbHNlKX0vcm9vdHNgLFxuICAgICAgICAgICAgICAgIHtwYXJhbXM6IHtpbmNsdWRlOiBcIkBpZCxwcmVmTGFiZWwsaGFzQ2hpbGRyZW5cIn19XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IoY29uc3Qgcm9vdE5vZGUgb2Ygcm9vdHMpIHtcbiAgICAgICAgICAgICAgICByb290RW50aXRpZXMucHVzaChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoZW50aXR5RGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeSwgY3ljbGVDaGVjazogU2V0PHN0cmluZz4pOiBUcmVlTm9kZSB7XG4gICAgICAgICAgICBjeWNsZUNoZWNrLmFkZChlbnRpdHlEYXRhLmlyaSk7IC8vIGFkZCBjdXJyZW50IGVudGl0eSB0byBjeWNsZSBjaGVjayBzZXRcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBUcmVlTm9kZShlbnRpdHlEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KGVudGl0eURhdGEuaXJpKSB8fCBbXTtcblxuICAgICAgICAgICAgaWYoIXNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBpZihvbkluaXRpYWxQYXRoLmhhcyhjaGlsZC5jaGlsZElyaSkpIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSkhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkQ2hpbGQoY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSkhLCBjeWNsZUNoZWNrKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIENvbnRhaW5zIGlyaXMgb2YgYWxsIGVudGl0aWVzIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGJyYW5jaC4gSXMgdXNlZCB0byBjaGVjayBmb3IgY3ljbGVzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBjb25zdCByb290Tm9kZXM6IFRyZWVOb2RlW10gPSByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PiBjcmVhdGVUcmVlTm9kZShlbnRpdGllc0RhdGEuZ2V0KHJvb3RFbnRpdHkpISwgY3ljbGVDaGVjaykpLnNvcnQoKGEsYikgPT4gKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpKSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgICAgICAgIHJvb3RzOiByb290Tm9kZXMsXG4gICAgICAgICAgICBhcGk6IG5ldyBPbnRvUG9ydGFsQXBpKHRoaXMuYXhpb3NJbnN0YW5jZS5nZXRVcmkoKSwgdGhpcy5hcGlLZXkpLFxuICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgIG1haW5FbnRpdHlJcmk6IGlyaSxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkSGllcmFyY2h5Q2hpbGRyZW4ocHJvcHM6IExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzKTogUHJvbWlzZTxFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGVcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKGVudGl0eVR5cGUgPT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihcImVudGl0eVR5cGUgaGFzIHRvIGJlIHByb3ZpZGVkIHRvIGxvYWQgY2hpbGRyZW4gaW4gYW4gT250b1BvcnRhbCBoaWVyYXJjaHkuXCIpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuIDogSGllcmFyY2h5Tm9kZVtdID0gKGF3YWl0IHRoaXMubWFrZUNhbGwoXG4gICAgICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSl9L2NoaWxkcmVuYCxcbiAgICAgICAgICAgIHtwYXJhbXM6IHtpbmNsdWRlOiBcIkBpZCxwcmVmTGFiZWwsaGFzQ2hpbGRyZW5cIn19XG4gICAgICAgICkpW1wiY29sbGVjdGlvblwiXTtcblxuICAgICAgICByZXR1cm4gY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShjaGlsZCkpO1xuICAgIH1cbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBUaXRsZVdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgaXNPbnRvbG9neSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UaXRsZVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgTk9fVElUTEUgPSBcIk5vIHRpdGxlIGF2YWlsYWJsZS5cIjtcblxuZnVuY3Rpb24gVGl0bGVXaWRnZXQocHJvcHM6IFRpdGxlV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlyaSxcbiAgICBvbnRvbG9neUlkLFxuICAgIGFwaSxcbiAgICB0aXRsZVRleHQsXG4gICAgdGhpbmdUeXBlLFxuICAgIHBhcmFtZXRlcixcbiAgICB1c2VMZWdhY3ksXG4gICAgZGVmYXVsdFZhbHVlLFxuICAgIGNsYXNzTmFtZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJkZWZhdWx0LWNsYXNzXCI7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1widGl0bGVEYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCB0aGluZ1R5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldFRoaW5nT2JqZWN0KGlyaSwgdGhpbmdUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3RpdGxlVGV4dCAmJlxuICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICB0aXRsZVRleHQ9e3RpdGxlVGV4dH1cbiAgICAgICAgICBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPlxuICAgICAgfVxuXG4gICAgICB7IXRpdGxlVGV4dCAmJiBpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICB0aXRsZT17aXNPbnRvbG9neShkYXRhKSA/IGRhdGEuZ2V0TmFtZSgpIDogZGF0YS5nZXRMYWJlbCgpfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPlxuICAgICAgfVxuXG4gICAgICB7IXRpdGxlVGV4dCAmJiBpc0xvYWRpbmcgJiYgKGRlZmF1bHRWYWx1ZSA/IChcbiAgICAgICAgICA8VGl0bGVQcmVzZW50YXRpb24gdGl0bGVUZXh0PXtkZWZhdWx0VmFsdWV9IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9IC8+KVxuICAgICAgICA6IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+KVxuICAgICAgfVxuXG4gICAgICB7IXRpdGxlVGV4dCAmJiBpc0Vycm9yICYmIChkZWZhdWx0VmFsdWUgP1xuICAgICAgICA8VGl0bGVQcmVzZW50YXRpb24gdGl0bGVUZXh0PXtkZWZhdWx0VmFsdWV9IGNsYXNzTmFtZT17ZmluYWxDbGFzc05hbWV9IC8+IDpcbiAgICAgICAgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJ0aXRsZVwiKX08L0V1aVRleHQ+KX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGl0bGUocHJvcHM6IFRpdGxlV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGl0bGVXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFRpdGxlV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgdGhpbmdUeXBlPXtwcm9wcy50aGluZ1R5cGV9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICB0aXRsZVRleHQ9e3Byb3BzLnRpdGxlVGV4dH1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICBkZWZhdWx0VmFsdWU9e3Byb3BzLmRlZmF1bHRWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVdpZGdldCwgY3JlYXRlVGl0bGUgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtUaXRsZVByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFRpdGxlUHJlc2VudGF0aW9uKHByb3BzOiBUaXRsZVByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpVGV4dCBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0+e3Byb3BzLnRpdGxlVGV4dCB8fCBwcm9wcy50aXRsZX08L0V1aVRleHQ+XG4gICk7XG59XG5cbmV4cG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IElyaVdpZGdldCB9IGZyb20gXCIuL0lyaVdpZGdldFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge01ldGFkYXRhV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJXaWRnZXQvVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWUsIGlzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge2NyZWF0ZU1vZGVsT2JqZWN0LCBnZXRQcmVmZXJyZWRPbnRvbG9neUpTT059IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7RW50aXR5T250b0xpc3RQcmVzZW50YXRpb259IGZyb20gXCIuL0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQge0VudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbn0gZnJvbSBcIi4vRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiXG5cbnR5cGUgTWV0YWRhdGFJbmZvID0ge1xuICAgIGVudGl0eTogRW50aXR5LFxuICAgIG9udG9MaXN0OiBzdHJpbmdbXSxcbiAgICBkZWZpbmVkQnk6IHN0cmluZ1tdXG59XG5cbmZ1bmN0aW9uIE1ldGFkYXRhV2lkZ2V0KHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5LCBvbk5hdmlnYXRlVG9PbnRvbG9neSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PE1ldGFkYXRhSW5mbz4oXG4gICAgW1wibWV0YWRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBlbnRpdHk6IEVudGl0eSwgb250b0xpc3Q6IHN0cmluZ1tdLCBkZWZpbmVkQnk6IHN0cmluZ1tdO1xuICAgICAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkZGVkID0gKGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpKVtcIl9lbWJlZGRlZFwiXTtcbiAgICAgICAgICAgIGVudGl0eSA9IGNyZWF0ZU1vZGVsT2JqZWN0KHsgXCJfZW1iZWRkZWRcIjogeyBbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXTogZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV0sIHVzZUxlZ2FjeSwgb250b2xvZ3lJZCkgfX0pIGFzIEVudGl0eTtcbiAgICAgICAgICAgIG9udG9MaXN0ID0gZW1iZWRkZWRbT2JqZWN0LmtleXMoZW1iZWRkZWQpWzBdXVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgICAgIGRlZmluZWRCeSA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0pXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW50aXR5ID0gYXdhaXQgb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgICAgIG9udG9MaXN0ID0gZW50aXR5LmdldEFwcGVhcnNJbigpO1xuICAgICAgICAgICAgZGVmaW5lZEJ5ID0gZW50aXR5LmdldERlZmluZWRCeSgpO1xuICAgICAgICB9XG4gICAgICAgIG9udG9MaXN0ID0gb250b0xpc3QuZmlsdGVyKChvbnRvIDogc3RyaW5nKSA9PiBvbnRvICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkpLnNvcnQoKTtcbiAgICAgICAgZGVmaW5lZEJ5ID0gZGVmaW5lZEJ5LmZpbHRlcigob250bzogc3RyaW5nKSA9PiBvbnRvICE9IGVudGl0eS5nZXRPbnRvbG9neUlkKCkpLnNvcnQoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW50aXR5OiBlbnRpdHksXG4gICAgICAgICAgICBvbnRvTGlzdDogb250b0xpc3QsXG4gICAgICAgICAgICBkZWZpbmVkQnk6IGRlZmluZWRCeVxuICAgICAgICB9IGFzIE1ldGFkYXRhSW5mbztcbiAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IE1ldGFkYXRhSW5mbykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8RXVpRmxleEdyb3VwIGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmVudGl0eS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxJcmlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0gc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgICAgICA8VGl0bGVQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgPERlc2NyaXB0aW9uUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhLmVudGl0eS5nZXREZXNjcmlwdGlvbigpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuXG4gICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbjogXCIwIDEycHggMFwiLCBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gaXJpPXtwcm9wcy5pcml9IGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9IG9udG9saXN0PXtkYXRhLm9udG9MaXN0fSBlbnRpdHlUeXBlPXtlbnRpdHlUeXBlIHx8IGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSAvPlxuICAgICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIGlyaT17cHJvcHMuaXJpfSBvbnRvbGlzdD17ZGF0YS5kZWZpbmVkQnl9IGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9IGVudGl0eVR5cGU9e2VudGl0eVR5cGUgfHwgZGF0YS5lbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxUYWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBkYXRhPXtkYXRhLmVudGl0eX1cbiAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgIGFwaT17YXBpfVxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgPyBwcm9wcy5vbnRvbG9neUlkIDogZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJtZXRhZGF0YVwiKX08L0V1aVRleHQ+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDw+XG4gICAgICAgICAge2lzRW50aXR5KGRhdGEuZW50aXR5KSA/IHJlbmRlcihkYXRhKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNZXRhZGF0YShwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkTWV0YWRhdGFXaWRnZXQocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPE1ldGFkYXRhV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhV2lkZ2V0LCBjcmVhdGVNZXRhZGF0YSB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuY29uc3QgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSA9IDUgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uKHByb3BzOiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgICBjb25zdCBbYXBwZWFyc0luRXhwYW5kZWQsIHNldEFwcGVhcnNJbkV4cGFuZGVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3k6IHN0cmluZykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSkgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kob250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgeyBpcmk6IHByb3BzLmlyaSwgbGFiZWw6IHByb3BzLmxhYmVsIH0pfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+e29udG9sb2d5LnRvVXBwZXJDYXNlKCl9PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgfVxuXG4gICAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgJiYgIWFwcGVhcnNJbkV4cGFuZGVkP1xuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5vbnRvbGlzdC5zbGljZSgwLCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZKS5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImV4cGFuZC1vbnRvLWxpc3RcIiBvbkNsaWNrPXsoKSA9PiBzZXRBcHBlYXJzSW5FeHBhbmRlZCh0cnVlKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICArIHtwcm9wcy5vbnRvbGlzdC5sZW5ndGggLSBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZfVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz4gOlxuXG4gICAgICAgICAgICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgICB7cHJvcHMub250b2xpc3QgJiYgcHJvcHMub250b2xpc3QubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17e2ZvbnRXZWlnaHQ6IFwibm9ybWFsXCJ9fT5cbiAgICAgICAgICAgICAgICBBbHNvIGFwcGVhcnMgaW4mbmJzcDtcbiAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuY29uc3QgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSA9IDUgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gICAgY29uc3QgW2FwcGVhcnNJbkV4cGFuZGVkLCBzZXRBcHBlYXJzSW5FeHBhbmRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5LCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHsgaXJpOiBwcm9wcy5pcmksIGxhYmVsOiBwcm9wcy5sYWJlbCB9KX19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJPbnRvQmFkZ2VzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZICYmICFhcHBlYXJzSW5FeHBhbmRlZD9cbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtwcm9wcy5vbnRvbGlzdC5zbGljZSgwLCBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZKS5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCIgb25DbGljaz17KCkgPT4gc2V0QXBwZWFyc0luRXhwYW5kZWQodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAgICAgICsge3Byb3BzLm9udG9saXN0Lmxlbmd0aCAtIE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVl9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC8+IDpcblxuICAgICAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5tYXAoKG9udG9sb2d5OiBzdHJpbmcpID0+IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICApKVxuICAgICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiBcIm5vcm1hbFwifX0+XG4gICAgICAgICAgICAgICAgRGVmaW5lZCBieSZuYnNwO1xuICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2VzKCl9XG4gICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICl9XG4gICAgPC8+XG5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpU3BhY2VyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9neSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2NhcGl0YWxpemUsIGRlQ2FtZWxDYXNlLCBkZVVuZGVyc2NvcmUsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge2dldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7T250b2xvZ3lJbmZvV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuZnVuY3Rpb24gT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IG9udG9sb2d5SWQsIGFwaSwgcGFyYW1ldGVyLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCB1c2VMZWdhY3ksIHNob3dCYWRnZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2d5LFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nT250b2xvZ3ksXG4gICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NPbnRvbG9neSxcbiAgICBpc0Vycm9yOiBpc0Vycm9yT250b2xvZ3ksXG4gICAgZXJyb3I6IGVycm9yT250b2xvZ3ksXG4gIH0gPSB1c2VRdWVyeShcbiAgICAgIFtcbiAgICAgICAgXCJvbnRvbG9neUluZm9cIixcbiAgICAgICAgcHJvcHNcbiAgICAgIF0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgeyhvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKSkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk9udG9sb2d5IElSSTo8L2I+XG4gICAgICAgICAgICAgICAgPHA+PGEgaWQ9e1wib250b2xvZ3lJcmlcIn0gaHJlZj17b250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCl9PlxuICAgICAgICAgICAgICAgICAge29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfVxuICAgICAgICAgICAgICAgIDwvYT48L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbklyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5WZXJzaW9uIElSSTo8L2I+XG4gICAgICAgICAgICAgICAgPHA+PGEgaWQ9e1widmVyc2lvbklyaVwifSBocmVmPXtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9PlxuICAgICAgICAgICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb25JcmkoKX1cbiAgICAgICAgICAgICAgICA8L2E+PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRTb3VyY2VGaWxlVGltZXN0YW1wKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkxhc3QgbG9hZGVkOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57bmV3IERhdGUob250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpKS50b1N0cmluZygpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlkU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRPbnRvbG9neUlkKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk9udG9sb2d5IElEOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlZlcnNpb246PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRWZXJzaW9uKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldE51bUNsYXNzZXMoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+TnVtYmVyIG9mIGNsYXNzZXM6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkudG9Mb2NhbGVTdHJpbmcoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q3JlYXRvcnNTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldENyZWF0b3JzKCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5DcmVhdG9yczo8L2I+XG4gICAgICAgICAgICAgICAge29udG9sb2d5LmdldENyZWF0b3JzKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgIDx1bD57b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5tYXAoKGNyZWF0b3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17Y3JlYXRvciArIHJhbmRvbVN0cmluZygpfT57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgY3JlYXRvciwgYXBpLCBzaG93QmFkZ2VzKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgIDxwPntnZXRFbnRpdHlMaW5rSlNYKG9udG9sb2d5LCBvbnRvbG9neS5nZXRMaW5rZWRFbnRpdGllcygpLCBvbnRvbG9neS5nZXRDcmVhdG9ycygpWzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PEV1aVNwYWNlci8+PC8+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7dGhpbmcuZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKS5tYXAoKGFubm9LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vcyA9IHRoaW5nLmdldEFubm90YXRpb25CeUlkKGFubm9LZXkpO1xuICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgICAgPGI+e2NhcGl0YWxpemUoZGVVbmRlcnNjb3JlKGRlQ2FtZWxDYXNlKHRoaW5nLmdldEFubm90YXRpb25UaXRsZUJ5SWQoYW5ub0tleSkpKSl9OjwvYj5cbiAgICAgICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICA8dWw+e2Fubm9zLm1hcCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIGFwaSwgc2hvd0JhZGdlcyl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vc1swXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IFwiT250b2xvZ3kgSW5mb3JtYXRpb25cIiA6IFwiXCJ9XG4gICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgPlxuXG4gICAgICAgICAge2lzTG9hZGluZ09udG9sb2d5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAge2lzU3VjY2Vzc09udG9sb2d5ICYmIG9udG9sb2d5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuXG4gICAgICAgICAgICAgICAge2dldE9udG9sb2d5SXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAge2dldFZlcnNpb25JcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7LyogVE9ETzogRG8gd2Ugd2FudCB0aGUgZm9sbG93aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiB3aWRnZXQ/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYmkgZG9lcyBub3QgaGF2ZSB0aGVtIHRoZXJlLCBidXQgb24gb3RoZXIgcGFydHMgb2YgdGhlIGVudGl0eSBwYWdlICovXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0T250b2xvZ3lJZFNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICB7Z2V0TnVtQ2xhc3Nlc1NlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICB7Lyp7Z2V0Q3JlYXRvcnNTZWN0aW9uKGVudGl0eUluZm8pfSovIC8qIHJlZHVuZGFudCBhcyBpdCdzIGxpc3RlZCBpbiBhbm5vdGF0aW9ucyBhbnl3YXkgKi99XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIHtpc0Vycm9yT250b2xvZ3kgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvck9udG9sb2d5LCBcImluZm9ybWF0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgIDwvRXVpQ2FyZD5cbiAgICAgIDwvPlxuICApO1xuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9udG9sb2d5SW5mbyhwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxPbnRvbG9neUluZm9XaWRnZXRcbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0LCBjcmVhdGVPbnRvbG9neUluZm8gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIENvbXBhcmF0b3JzLFxuICBDcml0ZXJpYVdpdGhQYWdpbmF0aW9uLFxuICBFdWlCYXNpY1RhYmxlLFxuICBFdWlCdXR0b25JY29uLFxuICBFdWlIb3Jpem9udGFsUnVsZSxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUxpbmssXG4gIEV1aVNwYWNlcixcbiAgRXVpVGV4dFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgY3NzLCBTZXJpYWxpemVkU3R5bGVzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBFdWlCYXNpY1RhYmxlQ29sdW1uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZVwiO1xuaW1wb3J0IHsgT2xzUmVzb3VyY2UsIFJlc291cmNlc1dpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ2llcyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfRU5UUklFU19QRVJfUEFHRSA9IDEwO1xuY29uc3QgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyA9IFsxMCwgMjUsIDUwLCAxMDBdO1xuY29uc3QgREVGQVVMVF9JTklUSUFMX1NPUlRfRklFTEQgPSBcImNvbmZpZy5wcmVmZXJyZWRQcmVmaXhcIjtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0RJUiA9IFwiYXNjXCIgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBpbml0aWFsRW50cmllc1BlclBhZ2UgPSBERUZBVUxUX0lOSVRJQUxfRU5UUklFU19QRVJfUEFHRSxcbiAgICBwYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICAgIGluaXRpYWxTb3J0RmllbGQgPSBERUZBVUxUX0lOSVRJQUxfU09SVF9GSUVMRCxcbiAgICBpbml0aWFsU29ydERpciA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0RJUixcbiAgICB0YXJnZXRMaW5rLFxuICAgIHBhcmFtZXRlcixcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3BhZ2VJbmRleCwgc2V0UGFnZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZVN0YXRlKGluaXRpYWxFbnRyaWVzUGVyUGFnZSk7XG4gIGNvbnN0IFtzb3J0RmllbGQsIHNldFNvcnRGaWVsZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudW1iZXI+KGluaXRpYWxTb3J0RmllbGQpO1xuICBjb25zdCBbc29ydERpcmVjdGlvbiwgc2V0U29ydERpcmVjdGlvbl0gPSB1c2VTdGF0ZShpbml0aWFsU29ydERpcik7XG5cblxuICBjb25zdCBjb2x1bW5zOiBBcnJheTxFdWlCYXNpY1RhYmxlQ29sdW1uPE9sc1Jlc291cmNlPiAmIHsgY3NzPzogU2VyaWFsaXplZFN0eWxlcyB9PiA9IFtcbiAgICB7XG4gICAgICBuYW1lOiBcIlJlc291cmNlIE5hbWVcIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy50aXRsZVwiLFxuICAgICAgd2lkdGg6IFwiMTUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJTaG9ydCBOYW1lXCIsXG4gICAgICBmaWVsZDogXCJvbnRvbG9neUlkXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiAoXG4gICAgICAgIHRhcmdldExpbmsgPyA8RXVpTGluayBocmVmPXt0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgdmFsdWUgKyBcIi9cIn0+e3ZhbHVlfTwvRXVpTGluaz4gOiB2YWx1ZVxuICAgICAgKSxcbiAgICAgIHdpZHRoOiBcIjEwJVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiRGVzY3JpcHRpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy5kZXNjcmlwdGlvblwiLFxuICAgICAgd2lkdGg6IFwiMzAlXCIsXG4gICAgICBjc3M6IGNzc2BcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnZlcnNpb25cIixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIlxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJMb2FkZWQgb25cIixcbiAgICAgIGZpZWxkOiBcImxvYWRlZFwiLFxuICAgICAgd2lkdGg6IFwiMTAlXCIsXG4gICAgICBkYXRhVHlwZTogXCJkYXRlXCIgYXMgY29uc3QsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJUZXJtc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZUZXJtc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3LjUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZlByb3BlcnRpZXNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiSW5kaXZpZHVhbHNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mSW5kaXZpZHVhbHNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHdpZHRoOiBcIjUlXCIsXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIC4uLihwcm9wcy5hY3Rpb25zIHx8IFtdKSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbmRlcjogKGl0ZW06IE9sc1Jlc291cmNlKSA9PiAoXG4gICAgICAgICAgICA8RXVpQnV0dG9uSWNvblxuICAgICAgICAgICAgICBocmVmPXtpdGVtLmNvbmZpZy5maWxlTG9jYXRpb259XG4gICAgICAgICAgICAgIGljb25UeXBlPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG93bmxvYWRcIlxuICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAhaXRlbS5jb25maWcuYWxsb3dEb3dubG9hZCB8fFxuICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLmZpbGVMb2NhdGlvbi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICBjb25zdCBvblRhYmxlQ2hhbmdlID0gKHtcbiAgICBwYWdlLFxuICAgIHNvcnQsXG4gIH06IENyaXRlcmlhV2l0aFBhZ2luYXRpb248T2xzUmVzb3VyY2U+KSA9PiB7XG4gICAgY29uc3QgeyBpbmRleDogcGFnZUluZGV4LCBzaXplOiBwYWdlU2l6ZSB9ID0gcGFnZTtcbiAgICBzZXRQYWdlSW5kZXgocGFnZUluZGV4KTtcbiAgICBzZXRQYWdlU2l6ZShwYWdlU2l6ZSk7XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgY29uc3QgeyBmaWVsZDogc29ydEZpZWxkLCBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfSA9IHNvcnQ7XG4gICAgICBzZXRTb3J0RmllbGQoc29ydEZpZWxkKTtcbiAgICAgIHNldFNvcnREaXJlY3Rpb24oc29ydERpcmVjdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBpc0xvYWRpbmdcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFxuICAgIFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2dpZXNEYXRhKFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXIsXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuXG4gIGNvbnN0IG9udG9zID0gb250b2xvZ2llc0RhdGE/LnByb3BlcnRpZXMubWFwKG9udG9sb2d5ID0+ICh7XG4gICAgLi4ub250b2xvZ3kucHJvcGVydGllc1xuICB9KSkgfHwgW107XG5jb25zb2xlLmxvZyhvbnRvcylcbiAgY29uc3QgZmluZE9udG9sb2dpZXMgPSAoXG4gICAgb250b2xvZ2llczogYW55W10sXG4gICAgcGFnZUluZGV4OiBudW1iZXIsXG4gICAgcGFnZVNpemU6IG51bWJlcixcbiAgICBzb3J0RmllbGQ6IGFueSxcbiAgICBzb3J0RGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCJcbiAgKSA9PiB7XG4gICAgbGV0IGl0ZW1zO1xuXG4gICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgaXRlbXMgPSBvbnRvbG9naWVzXG4gICAgICAgIC5zbGljZSgwKVxuICAgICAgICAuc29ydChcbiAgICAgICAgICBDb21wYXJhdG9ycy5wcm9wZXJ0eShzb3J0RmllbGQsIENvbXBhcmF0b3JzLmRlZmF1bHQoc29ydERpcmVjdGlvbikpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llcztcbiAgICB9XG5cbiAgICBsZXQgcGFnZU9mSXRlbXM7XG5cbiAgICBpZiAoIXBhZ2VJbmRleCAmJiAhcGFnZVNpemUpIHtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlSW5kZXggKiBwYWdlU2l6ZTtcbiAgICAgIHBhZ2VPZkl0ZW1zID0gaXRlbXMuc2xpY2UoXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgb250b2xvZ2llcy5sZW5ndGgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYWdlT2ZJdGVtcyxcbiAgICAgIHRvdGFsSXRlbUNvdW50OiBvbnRvbG9naWVzLmxlbmd0aFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgeyBwYWdlT2ZJdGVtcywgdG90YWxJdGVtQ291bnQgfSA9IGZpbmRPbnRvbG9naWVzKFxuICAgIG9udG9zLFxuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0RmllbGQsXG4gICAgc29ydERpcmVjdGlvblxuICApO1xuXG4gIGNvbnN0IHBhZ2luYXRpb24gPSB7XG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHRvdGFsSXRlbUNvdW50LFxuICAgIHBhZ2VTaXplT3B0aW9uc1xuICB9O1xuXG4gIGNvbnN0IHJlc3VsdHNDb3VudCA9XG4gICAgcGFnZVNpemUgPT09IDAgPyAoXG4gICAgICA8c3Ryb25nPkFsbDwvc3Ryb25nPlxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgIHtwYWdlU2l6ZSAqIHBhZ2VJbmRleCArIDF9LXtwYWdlU2l6ZSAqIHBhZ2VJbmRleCArIHBhZ2VTaXplfVxuICAgICAgICA8L3N0cm9uZz57XCIgXCJ9XG4gICAgICAgIG9mIHt0b3RhbEl0ZW1Db3VudH1cbiAgICAgIDwvPlxuICAgICk7XG5cblxuICBjb25zdCBzb3J0aW5nID0ge1xuICAgIHNvcnQ6IHtcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb25cbiAgICB9XG4gIH07XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgIDw+XG4gICAgICAgICAgPEV1aVRleHQgc2l6ZT1cInhzXCI+XG4gICAgICAgICAgICBTaG93aW5nIHtyZXN1bHRzQ291bnR9IDxzdHJvbmc+T250b2xvZ2llczwvc3Ryb25nPlxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICA8RXVpSG9yaXpvbnRhbFJ1bGUgbWFyZ2luPVwibm9uZVwiIHN0eWxlPXt7IGhlaWdodDogMiB9fSAvPlxuXG4gICAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICBsb2FkaW5nXG4gICAgICAgIC8+XG5cbiAgICAgIH1cbiAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwicmVzb3VyY2VzXCIpfVxuICAgICAgICAgICovXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlcyhwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxSZXNvdXJjZXNXaWRnZXRcbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZT17cHJvcHMuaW5pdGlhbEVudHJpZXNQZXJQYWdlfVxuICAgICAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnM9e3Byb3BzLnBhZ2VTaXplT3B0aW9uc31cbiAgICAgICAgICAgICAgaW5pdGlhbFNvcnRGaWVsZD17cHJvcHMuaW5pdGlhbFNvcnRGaWVsZH1cbiAgICAgICAgICAgICAgaW5pdGlhbFNvcnREaXI9e3Byb3BzLmluaXRpYWxTb3J0RGlyfVxuICAgICAgICAgICAgICB0YXJnZXRMaW5rPXtwcm9wcy50YXJnZXRMaW5rfVxuICAgICAgICAgICAgICBhY3Rpb25zPXtwcm9wcy5hY3Rpb25zfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFJlc291cmNlc1dpZGdldCwgY3JlYXRlUmVzb3VyY2VzIH07XG4iLCAiaW1wb3J0IHsgRXVpQ29tYm9Cb3gsIEV1aVByb3ZpZGVyLCBFdWlTdWdnZXN0LCBFdWlTdWdnZXN0aW9uUHJvcHMgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25PcHRpb24gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2NvbWJvX2JveC90eXBlc1wiO1xuXG5mdW5jdGlvbiBTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgcXVlcnksXG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgLyoqXG4gICAqIHN1Z2dlc3Rpb25zXG4gICAqL1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oKTtcblxuICAvKipcbiAgICogc2VsZWN0ZWQgc3VnZ2VzdGlvbiAob24gY2xpY2spXG4gICAqL1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZF0gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8qKlxuICAgKiBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKi9cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KHF1ZXJ5KTtcblxuICBjb25zdCBvbkNoYW5nZSA9IChzZWxlY3RlZE9wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4pID0+IHtcbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZE9wdGlvbik7XG4gIH07XG5cbiAgY29uc3Qgb25DcmVhdGVPcHRpb24gPSAoc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb246IEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+ID0gW3tcbiAgICAgIGxhYmVsOiBzZWFyY2hWYWx1ZVxuICAgIH1dO1xuXG4gICAgc2V0U2VsZWN0ZWQobmV3T3B0aW9uKTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBmZXRjaGVzIHN1Z2dlc3Rpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3Qge1xuICAgIGlzTG9hZGluZ1xuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJzdWdnZXN0aW9uc1wiLFxuICAgICAgc2VhcmNoVmFsdWVcbiAgICBdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICAgIHJldHVybjsgLy8gRXhpdCBlYXJseSBpZiBzZWFyY2hWYWx1ZSBpcyBlbXB0eVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9sc0FwaS5zdWdnZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXJcbiAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MpIHtcbiAgICAgICAgICBzZXRPcHRpb25zKHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MubWFwKChzdWdnZXN0aW9uOiBhbnkpID0+IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6IHN1Z2dlc3Rpb24uYXV0b3N1Z2dlc3QsXG4gICAgICAgICAgICAgIHR5cGU6IHsgY29sb3I6IFwidGludDFcIiwgaWNvblR5cGU6IFwiXCIgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZWxlY3RlZCBvcHRpb24gY2hhbmdlcywgcGFzcyB0aGUgZXZlbnQgYnkgaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLm1hcCgoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogc2VsZWN0ZWRPcHRpb24ubGFiZWxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW3NlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlDb21ib0JveFxuICAgICAgICBpZD17XCJzdWdnZXN0XCJ9XG4gICAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICAgIGFyaWEtbGFiZWw9XCJzZWFyY2hCYXJcIlxuICAgICAgICBmdWxsV2lkdGg9e3RydWV9XG4gICAgICAgIGFzeW5jPXt0cnVlfVxuICAgICAgICBwbGFjZWhvbGRlcj17XCJTZWFyY2hcIn1cbiAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbj17dHJ1ZX1cbiAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucz17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uQ3JlYXRlT3B0aW9uPXtvbkNyZWF0ZU9wdGlvbn1cbiAgICAgICAgb25TZWFyY2hDaGFuZ2U9eyhpdGVtKSA9PiB7XG4gICAgICAgICAgc2V0U2VhcmNoVmFsdWUoaXRlbSk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hCYXIocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPFNlYXJjaEJhcldpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHF1ZXJ5PXtwcm9wcy5xdWVyeX1cbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9e3Byb3BzLnNlbGVjdGlvbkNoYW5nZWRFdmVudH1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBTZWFyY2hCYXJXaWRnZXQsIGNyZWF0ZVNlYXJjaEJhciB9O1xuIiwgImltcG9ydCB7XG4gIEV1aUJ1dHRvbkVtcHR5LFxuICBFdWlGbGV4R3JvdXAsXG4gIEV1aUZsZXhJdGVtLFxuICBFdWlGb3JtUm93LFxuICBFdWlIb3Jpem9udGFsUnVsZSxcbiAgRXVpTG9hZGluZ1NwaW5uZXIsXG4gIEV1aVBhbmVsLCBFdWlQcm92aWRlcixcbiAgRXVpU2VsZWN0YWJsZSxcbiAgRXVpU2VsZWN0YWJsZU9wdGlvbixcbiAgRXVpU3BhY2VyLFxuICBFdWlTd2l0Y2gsXG4gIEV1aVRhYmxlUGFnaW5hdGlvbixcbiAgRXVpVGV4dFxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgTWV0YWRhdGFDb21wYWN0IH0gZnJvbSBcIi4vTWV0YWRhdGFDb21wYWN0XCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlV2lkZ2V0IH0gZnJvbSBcIi4uL0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFNlYXJjaEJhcldpZGdldCB9IGZyb20gXCIuLi9TZWFyY2hCYXJXaWRnZXRcIjtcblxuY29uc3QgREVGQVVMVF9JTklUSUFMX0lURU1TX1BFUl9QQUdFID0gMTA7XG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gWzEwLCAyNSwgNTAsIDEwMF07XG5cbmZ1bmN0aW9uIFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzOiBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgcXVlcnksXG4gICAgcGFyYW1ldGVyLFxuICAgIGluaXRpYWxJdGVtc1BlclBhZ2UgPSBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgdGFyZ2V0TGluayxcbiAgICBwcmVzZWxlY3RlZCxcbiAgICB1c2VMZWdhY3kgPSB0cnVlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZShxdWVyeSk7XG4gIGNvbnN0IFthY3RpdmVQYWdlLCBzZXRBY3RpdmVQYWdlXSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbcGFnZUNvdW50LCBzZXRQYWdlQ291bnRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtpdGVtc1BlclBhZ2UsIHNldEl0ZW1zUGVyUGFnZV0gPSB1c2VTdGF0ZShpbml0aWFsSXRlbXNQZXJQYWdlKTtcbiAgY29uc3QgW3RvdGFsSXRlbXMsIHNldFRvdGFsSXRlbXNdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtleGFjdE1hdGNoLCBzZXRFeGFjdE1hdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dPYnNvbGV0ZVRlcm1zLCBzZXRTaG93T2Jzb2xldGVUZXJtc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmaWx0ZXJCeVR5cGVPcHRpb25zLCBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zXSA9IHVzZVN0YXRlPEV1aVNlbGVjdGFibGVPcHRpb25bXT4oW10pO1xuICBjb25zdCBbZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zXSA9IHVzZVN0YXRlPEV1aVNlbGVjdGFibGVPcHRpb25bXT4oW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VhcmNoVmFsdWUocXVlcnkpO1xuICB9LCBbcXVlcnldKTtcblxuICBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJPcHRpb25zKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIG9wdGlvbkNvdW50czogYW55W10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uLCByZW5kZXI/OiAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKSB7XG4gICAgaWYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICBzZXRPcHRpb25zKG9wdGlvbkNvdW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBhbnlbXSwgY3VycmVudFZhbHVlOiBzdHJpbmcsIGN1cnJlbnRJbmRleDogbnVtYmVyLCBhcnJheTogYW55W10pID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiByZW5kZXIgPyByZW5kZXIoY3VycmVudFZhbHVlKSA6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGtleTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgYXBwZW5kOiBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdICsgXCIpXCIsXG4gICAgICAgICAgICBkaXNhYmxlZDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gPT0gMCxcbiAgICAgICAgICAgIGRhdGE6IHsgdG90YWxDb3VudDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH0sIFtdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50T3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBuZXdPcHRpb25zLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudE9wdGlvbnNbaV0pKTsgLy8gdXNpbmcgT2JqZWN0LmFzc2lnbiB0byBwYXNzIGJ5IHZhbHVlLCBub3QgYnkgcmVmZXJlbmNlXG4gICAgICB9XG5cbiAgICAgIG9wdGlvbkNvdW50cy5mb3JFYWNoKChjdXJyZW50VmFsdWU6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld09wdGlvbnMuZmluZCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5ID09IGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCA9IFwiKFwiICsgYXJyYXlbY3VycmVudEluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAob3B0aW9uLmRhdGEgJiYgYXJyYXlbY3VycmVudEluZGV4ICsgMV0gPCBvcHRpb24uZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgKz0gXCIvXCIgKyBvcHRpb24uZGF0YS50b3RhbENvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIilcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWx0ZXJTZWxlY3RlZE9wdGlvbnMgPSAob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24uY2hlY2tlZCA9PT0gXCJvblwiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBzZWFyY2hSZXN1bHRzLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgXCJzZWFyY2hSZXN1bHRzXCIsXG4gICAgICBhcGksXG4gICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgIGV4YWN0TWF0Y2gsXG4gICAgICBzaG93T2Jzb2xldGVUZXJtcyxcbiAgICAgIGFjdGl2ZVBhZ2UsXG4gICAgICBpdGVtc1BlclBhZ2UsXG4gICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgIHBhcmFtZXRlclxuICAgIF0sXG4gICAgYXN5bmMgKHsgc2lnbmFsIH0pID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuc2VhcmNoKFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIGV4YWN0TWF0Y2g6IGV4YWN0TWF0Y2gsXG4gICAgICAgICAgc2hvd09ic29sZXRlVGVybXM6IHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgICAgIHR5cGVzOiBmaWx0ZXJCeVR5cGVPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KS5qb2luKFwiLFwiKSxcbiAgICAgICAgICBvbnRvbG9neTogZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLmpvaW4oXCIsXCIpLFxuICAgICAgICAgIGdyb3VwQnlJcmk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICBzaXplOiBpdGVtc1BlclBhZ2UudG9TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHByb3BzLnBhcmFtZXRlcixcbiAgICAgICAgc2lnbmFsXG4gICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZVtcInJlc3BvbnNlXCJdICYmIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdICE9IG51bGwgJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl0gJiYgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl0pIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcInR5cGVcIl0pIHtcbiAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSxcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gYCR7Y3VycmVudFZhbHVlWzBdLnRvVXBwZXJDYXNlKCl9JHtjdXJyZW50VmFsdWUuc2xpY2UoMSl9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neV9uYW1lXCJdKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neV9uYW1lXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lJZFwiXSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lJZFwiXSxcbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBjdXJyZW50VmFsdWUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRUb3RhbEl0ZW1zKHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSk7XG4gICAgICAgICAgY29uc3QgbmV3UGFnZUNvdW50ID0gTWF0aC5jZWlsKHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgICAgc2V0UGFnZUNvdW50KG5ld1BhZ2VDb3VudCk7XG4gICAgICAgICAgaWYgKGFjdGl2ZVBhZ2UgPj0gbmV3UGFnZUNvdW50KSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVQYWdlKDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXNwb25zZS5kb2NzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgQVBJIHJlc3BvbnNlXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGtlZXBQcmV2aW91c0RhdGE6IHRydWVcbiAgICB9IC8vIFNlZTogaHR0cHM6Ly9yZWFjdC1xdWVyeS12My50YW5zdGFjay5jb20vZ3VpZGVzL3BhZ2luYXRlZC1xdWVyaWVzXG4gICk7XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VJdGVtc1BlclBhZ2UobmV3SXRlbXNQZXJQYWdlOiBudW1iZXIpIHtcbiAgICBzZXRBY3RpdmVQYWdlKE1hdGguZmxvb3IoKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxKSAvIG5ld0l0ZW1zUGVyUGFnZSkpO1xuICAgIHNldEl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlRXhhY3RNYXRjaCgpIHtcbiAgICBzZXRFeGFjdE1hdGNoKCFleGFjdE1hdGNoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zKCkge1xuICAgIHNldFNob3dPYnNvbGV0ZVRlcm1zKCFzaG93T2Jzb2xldGVUZXJtcyk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckZpbHRlcihjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLCBzZXRPcHRpb25zOiBGdW5jdGlvbikge1xuICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uY3VycmVudE9wdGlvbnNdO1xuICAgIHNldE9wdGlvbnMobmV3T3B0aW9ucy5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gKHsgLi4ub3B0aW9uLCBjaGVja2VkOiB1bmRlZmluZWQgfSkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICBjbGVhckZpbHRlcihmaWx0ZXJCeVR5cGVPcHRpb25zLCBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zKTtcbiAgICBjbGVhckZpbHRlcihmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucywgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtX3RvX3NlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uOiB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpcmk/OiBzdHJpbmc7XG4gICAgb250b2xvZ3lfbmFtZT86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nXG4gIH1bXSkge1xuICAgIHNldFNlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uWzBdID8gc2VsZWN0ZWRPcHRpb25bMF0ubGFiZWwgOiBcIlwiKTtcbiAgfVxuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNlYXJjaEJhcldpZGdldFxuICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgcXVlcnk9e1wiXCJ9XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17KHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICAgICAgdHJhbnNmb3JtX3RvX3NlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9ezN9IHN0eWxlPXt7IG1pbldpZHRoOiAyNTAgfX0+XG4gICAgICAgICAgPEV1aVBhbmVsPlxuICAgICAgICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2ZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCkgPT4gbGlzdH1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCkgPT4gbGlzdH1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHsobGlzdCwgc2VhcmNoKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAge3NlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgICB7bGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0LCBzZWFyY2gpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxFdWlCdXR0b25FbXB0eVxuICAgICAgICAgICAgICBvbkNsaWNrPXtjbGVhckFsbEZpbHRlcnN9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsZWFyIGFsbCBmaWx0ZXJzXG4gICAgICAgICAgICA8L0V1aUJ1dHRvbkVtcHR5PlxuICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG5cbiAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9ezd9PlxuICAgICAgICAgIDxFdWlQYW5lbCBjb2xvcj1cInRyYW5zcGFyZW50XCIgZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICA8RXVpU3dpdGNoIGxhYmVsPVwiRXhhY3QgbWF0Y2hcIiBjaGVja2VkPXtleGFjdE1hdGNofSBvbkNoYW5nZT17dG9nZ2xlRXhhY3RNYXRjaH0gLz5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJTaG93IG9ubHkgb2Jzb2xldGUgdGVybXNcIiBjaGVja2VkPXtzaG93T2Jzb2xldGVUZXJtc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0b2dnbGVTaG93T2Jzb2xldGVUZXJtc30gLz5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJtXCIgLz5cblxuICAgICAgICAgICAgPEV1aVRleHQgc2l6ZT1cInhzXCIgc3R5bGU9e3sgcGFkZGluZzogXCIwIDhweFwiIH19PlxuICAgICAgICAgICAgICBTaG93aW5nIHtNYXRoLm1pbihhY3RpdmVQYWdlICogaXRlbXNQZXJQYWdlICsgMSwgdG90YWxJdGVtcyl9IHRvIHtNYXRoLm1pbigoYWN0aXZlUGFnZSArIDEpICogaXRlbXNQZXJQYWdlLCB0b3RhbEl0ZW1zKX0gb2Yge3RvdGFsSXRlbXN9IHJlc3VsdHNcbiAgICAgICAgICAgIDwvRXVpVGV4dD5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlIb3Jpem9udGFsUnVsZSBtYXJnaW49XCJub25lXCIgc3R5bGU9e3sgaGVpZ2h0OiAyIH19IC8+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICAgICAgICA8RXVpVGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggcmVzdWx0IHBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICBwYWdlQ291bnQ9e3BhZ2VDb3VudH1cbiAgICAgICAgICAgICAgYWN0aXZlUGFnZT17YWN0aXZlUGFnZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2VQYWdlPXtzZXRBY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBpdGVtc1BlclBhZ2U9e2l0ZW1zUGVyUGFnZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2U9e29uQ2hhbmdlSXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBpdGVtc1BlclBhZ2VPcHRpb25zPXtpdGVtc1BlclBhZ2VPcHRpb25zfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIHtzZWFyY2hSZXN1bHRzICYmIHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQ6IGFueSkgPT4gKFxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtyZXN1bHQuaWR9PlxuICAgICAgICAgICAgICAgIDxNZXRhZGF0YUNvbXBhY3QgYXBpPXthcGl9IHJlc3VsdD17cmVzdWx0fSB0YXJnZXRMaW5rPXt0YXJnZXRMaW5rfSAvPlxuICAgICAgICAgICAgICAgIDxFdWlTcGFjZXIgLz5cbiAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8U2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBxdWVyeT17cHJvcHMucXVlcnl9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgaW5pdGlhbEl0ZW1zUGVyUGFnZT17cHJvcHMuaW5pdGlhbEl0ZW1zUGVyUGFnZX1cbiAgICAgICAgICBpdGVtc1BlclBhZ2VPcHRpb25zPXtwcm9wcy5pdGVtc1BlclBhZ2VPcHRpb25zfVxuICAgICAgICAgIHRhcmdldExpbms9e3Byb3BzLnRhcmdldExpbmt9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQsIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH07XG4iLCAiaW1wb3J0IHsgRXVpQ2FyZCwgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpU3BhY2VyLCBFdWlUaXRsZSB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJXaWRnZXQsIERlc2NyaXB0aW9uV2lkZ2V0LCBJcmlXaWRnZXQgfSBmcm9tIFwiLi4vTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7TWV0YWRhdGFDb21wYWN0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cGx1cmFsaXplVHlwZX0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhQ29tcGFjdChwcm9wczogTWV0YWRhdGFDb21wYWN0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICB0YXJnZXRMaW5rLFxuICAgICAgICAuLi5yZXN0XG4gICAgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgIHRleHRBbGlnbj1cImxlZnRcIlxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBocmVmPXt0YXJnZXRMaW5rID9cbiAgICAgICAgICAgICAgICAocmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiID9cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHJlc3VsdC5vbnRvbG9neV9uYW1lICsgXCIvXCIgKyBwbHVyYWxpemVUeXBlKHJlc3VsdC50eXBlLCB0cnVlKSArIFwiP2lyaT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChyZXN1bHQuaXJpKVxuICAgICAgICAgICAgICAgICAgICA6IHRhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyByZXN1bHQub250b2xvZ3lfbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVRpdGxlPjxoMj57cmVzdWx0LmxhYmVsfTwvaDI+PC9FdWlUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiAmJiA8QnJlYWRjcnVtYldpZGdldCBhcGk9e2FwaX0gaXJpPXtyZXN1bHQuaXJpfSBlbnRpdHlUeXBlPXtyZXN1bHQudHlwZX0gb250b2xvZ3lJZD17cmVzdWx0Lm9udG9sb2d5X25hbWV9Lz59XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgPyA8SXJpV2lkZ2V0IGlyaT17cmVzdWx0LmlyaX0vPiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIi8+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25XaWRnZXQgYXBpPXthcGl9IG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfSBpcmk9e3Jlc3VsdC5pcml9IHRoaW5nVHlwZT17cmVzdWx0LnR5cGV9Lz5cbiAgICAgICAgPC9FdWlDYXJkPlxuXG4gICAgKTtcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFDb21wYWN0IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbCwgUHJvcGVydHksIFRoaW5nfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtnZXRDbGFzc0V4cHJlc3Npb25KU1gsIGdldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1gsIGdldFNlY3Rpb25MaXN0SlNYfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge2lzQ2xhc3MsIGlzSW5kaXZpZHVhbCwgaXNQcm9wZXJ0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHthc0FycmF5LCBjYXBpdGFsaXplLCBnZXRFbnRpdHlUeXBlTmFtZSwgcmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHR5cGUgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBpbmRpdmlkdWFsXG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEluZGl2aWR1YWxUeXBlc1NlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0eXBlcyA9IGluZGl2aWR1YWwuZ2V0UmRmVHlwZXMoKS5maWx0ZXIoKGVsZW06IHN0cmluZykgPT4gZWxlbSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJiAhZWxlbS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSk7XG5cbiAgICBpZihpbmRpdmlkdWFsLmdldFJkZlR5cGVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPlR5cGU8L2I+XG4gICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB0eXBlcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+KTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBzYW1lIGFzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNhbWVBcyA9IGluZGl2aWR1YWwuZ2V0U2FtZUFzKCk7XG5cbiAgICBpZihzYW1lQXMubGVuZ3RoID4gMCl7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+U2FtZSBBczwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBzYW1lQXMsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaWZmZXJlbnQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlmZmVyZW50RnJvbSA9IGluZGl2aWR1YWwuZ2V0RGlmZmVyZW50RnJvbSgpO1xuXG4gICAgaWYoZGlmZmVyZW50RnJvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RGlmZmVyZW50IGZyb208L2I+XG4gICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgZGlmZmVyZW50RnJvbSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpc2pvaW50IHdpdGggc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzam9pbnRXaXRoU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlzam9pbnRXaXRoID0gZW50aXR5LmdldERpc2pvaW50V2l0aCgpO1xuXG4gICAgaWYoZGlzam9pbnRXaXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5EaXNqb2ludCB3aXRoPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChlbnRpdHksIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkaXNqb2ludFdpdGgsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uSlNYKHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpbnZlcnNlT2ZzID0gcHJvcGVydHkuZ2V0SW52ZXJzZU9mKCk7XG5cbiAgICBpZihpbnZlcnNlT2ZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5JbnZlcnNlIG9mPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgaW52ZXJzZU9mcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIHByb3BlcnR5IGNoYWluIEpTWCBlbGVtZW50LiBJcyB1c2VkIGZvciB7QGxpbmsgZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1h9LlxuICogQHBhcmFtIHByb3BlcnR5Q2hhaW4gdGhlIHByb3BlcnR5IGNoYWluXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyAgICAgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50W119IHRoZSBjaGFpbnMgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpbkpTWChwcm9wZXJ0eUNoYWluOiBhbnlbXSwgcHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkocHJvcGVydHlDaGFpbikuc2xpY2UoKS5yZXZlcnNlKCkubWFwKChwcm9wZXJ0eUV4cHIsIGkpID0+IHsgLy8gdXNpbmcgLnNsaWNlKCkgaGVyZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhIG11dGF0aW9uIG9mIHByb3BlcnR5Q2hhaW4gd291bGQgdHJpZ2dlciBhIHVzZVF1ZXJ5KClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cHJvcGVydHlFeHByfT5cbiAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBwcm9wZXJ0eUV4cHIsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtpIDwgYXNBcnJheShwcm9wZXJ0eUNoYWluKS5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiZuYnNwOyYjOTY2NjsmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJ0eSBjaGFpbnMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcHJvcGVydHlDaGFpbnMgPSBwcm9wZXJ0eS5nZXRQcm9wZXJ0eUNoYWlucygpLm1hcCgocmVpZmllZCA6IFJlaWZpZWQ8YW55PikgPT4gcmVpZmllZC52YWx1ZSk7XG5cbiAgICBjb25zdCBoYXNNdWx0aXBsZUNoYWlucyA9IHByb3BlcnR5Q2hhaW5zLmZpbHRlcigoZWxlbTogYW55KSA9PiBBcnJheS5pc0FycmF5KGVsZW0pKS5sZW5ndGggPiAwO1xuXG4gICAgaWYocHJvcGVydHlDaGFpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPnshaGFzTXVsdGlwbGVDaGFpbnMgPyBcIlByb3BlcnR5IGNoYWluXCIgOiBcIlByb3BlcnR5IGNoYWluc1wifTwvYj5cbiAgICAgICAgICAgICAgICB7IWhhc011bHRpcGxlQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbnMsIHByb3BlcnR5LCBwcm9wcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Q2hhaW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRQcm9wZXJ0eUNoYWluSlNYKGl0ZW0sIHByb3BlcnR5LCBwcm9wcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBlcXVpdmFsZW50IHRvIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVxdWl2YWxlbnRzID0gZW50aXR5LmdldEVxdWl2YWxlbnRzKCk7XG5cbiAgICBpZihlcXVpdmFsZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RXF1aXZhbGVudCB0bzwvYj5cbiAgICAgICAgICAgICAgICB7ZXF1aXZhbGVudHMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlcXVpdmFsZW50c1swXSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbnRzLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID57Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc3ViZW50aXR5IG9mIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldFN1YkVudGl0eU9mU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3VwZXJFbnRpdGllcyA9IGVudGl0eS5nZXRTdXBlckVudGl0aWVzKCk7XG5cbiAgICBpZihzdXBlckVudGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5TdWJ7ZW50aXR5LmdldFR5cGUoKX0gb2Y8L2I+XG4gICAgICAgICAgICAgICAge3N1cGVyRW50aXRpZXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzdXBlckVudGl0aWVzWzBdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJFbnRpdGllcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgcmVsYXRlZCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVsYXRlZEZyb21zID0gZW50aXR5LmdldFJlbGF0ZWRGcm9tKCk7XG4gICAgY29uc3QgcHJlZGljYXRlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKG5ldyBTZXQocmVsYXRlZEZyb21zLm1hcCgoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXX0pKSk7XG5cbiAgICBpZihyZWxhdGVkRnJvbXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlJlbGF0ZWQgZnJvbTwvYj5cbiAgICAgICAgICAgICAgICB7cHJlZGljYXRlcy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwLnRvU3RyaW5nKCkgKyByYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9e3tjb2xvcjogXCJibGFja1wifX0gaHJlZj17cH0+PGk+e2xhYmVsIHx8IHB9PC9pPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbGF0ZWRGcm9tcy5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl0gPT09IHB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZWxlbS52YWx1ZVtcInZhbHVlXCJdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPiB7LyogV29ya3MgYXMgZW1wdHkgc3BhY2UgbGVmdCB0byBuZXh0IHNlY3Rpb24gKi99XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKTt9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gdGVybVxuICogQHBhcmFtIGluc3RhbmNlcyBhbiBhcnJheSBvZiB0aGUgY2xhc3NlcycgaW5zdGFuY2VzXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3NJbnN0YW5jZXNTZWN0aW9uSlNYKHRlcm06IENsYXNzLCBpbnN0YW5jZXM6IFRoaW5nW10sIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIDxiPkluc3RhbmNlczwvYj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMubWFwKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGluc3RhbmNlLmdldElyaSgpLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIHNob3dCYWRnZXMsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgb25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsIG9uTmF2aWdhdGVUb09udG9sb2d5LCAuLi5yZXN0IH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZmV0Y2ggYW4gZW50aXRpZXMnIGRhdGEgdG8gYmUgc2hvd24gaW4gZGlmZmVyZW50IHNlY3Rpb25zXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SnNvblwiLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICBzaG93QmFkZ2VzXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCAgZmFsc2UpOyAvLyBhbHdheXMgdXNlIHYyLyBBUElcbiAgICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIHRvIGJlIHNob3duIGluIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBpbnN0YW5jZXMsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nSW5zdGFuY2VzLFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0luc3RhbmNlcyxcbiAgICB9ID0gdXNlUXVlcnkoe1xuICAgICAgICBxdWVyeUtleTogW1xuICAgICAgICAgICAgXCJpbnN0YW5jZXNcIixcbiAgICAgICAgICAgIGVudGl0eVxuICAgICAgICBdLFxuICAgICAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGVudGl0eSAmJiBpc0NsYXNzKGVudGl0eSkgJiYgZW50aXR5Lmhhc0RpcmVjdENoaWxkcmVuKCkpID8gb2xzQXBpLmdldENsYXNzSW5zdGFuY2VzKGVudGl0eS5nZXRJcmkoKSwgZW50aXR5LmdldE9udG9sb2d5SWQoKSkgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlZDogISFlbnRpdHlcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25zKGVudGl0eTogRW50aXR5LCBpbnN0YW5jZXM6IEluZGl2aWR1YWxbXSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzZWN0aW9uTGlzdCA6IFJlYWN0RWxlbWVudFtdID0gW107XG5cbiAgICAgICAgaWYoaXNJbmRpdmlkdWFsKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxUeXBlc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsVHlwZXNTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoaW5kaXZpZHVhbFR5cGVzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFR5cGVzU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxTYW1lQXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gPSBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZGlzam9pbnRXaXRoU2VjdGlvbiA9IGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihkaXNqb2ludFdpdGhTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChkaXNqb2ludFdpdGhTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc1Byb3BlcnR5KGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiA9IGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2gocHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFpblNlY3Rpb24gPSBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5Q2hhaW5TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChwcm9wZXJ0eUNoYWluU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbiA9IGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3Qgc3ViRW50aXR5T2ZTZWN0aW9uID0gZ2V0U3ViRW50aXR5T2ZTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoc3ViRW50aXR5T2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChzdWJFbnRpdHlPZlNlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gPSBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc0luc3RhbmNlc1NlY3Rpb24gPSBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goZW50aXR5LCBpbnN0YW5jZXMsIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGNsYXNzSW5zdGFuY2VzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goY2xhc3NJbnN0YW5jZXNTZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNlY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICB7c2VjdGlvbkxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgIE5vIHJlbGF0aW9ucyBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5UmVsYXRpb24gJiYgZW50aXR5KSA/IGNhcGl0YWxpemUoZW50aXR5LmdldFR5cGUoKSkgOiBcIlwiKSArIFwiIFJlbGF0aW9uc1wiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KGlzTG9hZGluZ0VudGl0eVJlbGF0aW9uIHx8IGlzTG9hZGluZ0luc3RhbmNlcykgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eVJlbGF0aW9uICYmIDxFdWlUZXh0PlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICAgICAgICB7KGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGlzU3VjY2Vzc0luc3RhbmNlcykgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiYgaW5zdGFuY2VzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU2VjdGlvbnMoZW50aXR5LCBpbnN0YW5jZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlSZWxhdGlvbnMocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5UmVsYXRpb25zV2lkZ2V0KHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5UmVsYXRpb25zV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucywgRW50aXR5UmVsYXRpb25zV2lkZ2V0IH07IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnksIFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlJbWFnZX0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cblxuZnVuY3Rpb24gVGVybURlcGljdGlvbldpZGdldChwcm9wczpUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMpe1xuICAgIGNvbnN0IHthcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5fSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICBpc1N1Y2Nlc3MsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgICAgICBbXCJ0ZXJtRGVwaWN0aW9uXCIsIGFwaSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIFwiY2xhc3NcIiwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBcbiAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgZGF0YS5nZXREZXBpY3Rpb25VcmwoKSAmJlxuICAgICAgICAgICAgICA8PiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxFdWlJbWFnZVxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICBoYXNTaGFkb3dcbiAgICAgICAgICAgICAgICBhbGxvd0Z1bGxTY3JlZW4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYWx0PXtkYXRhLmdldERlcGljdGlvblVybCgpfVxuICAgICAgICAgICAgICAgIHNyYz17ZGF0YS5nZXREZXBpY3Rpb25VcmwoKX0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwPjxzbWFsbD5DbGljayB0byBleHBhbmQuPC9zbWFsbD48L3A+XG4gICAgICAgICAgICAgIDwvPiAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVwaWN0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlRGVwaWN0aW9uKHByb3BzOiBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHM6IFRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgIDxUZXJtRGVwaWN0aW9uV2lkZ2V0XG4gICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHtjcmVhdGVEZXBpY3Rpb24sIFRlcm1EZXBpY3Rpb25XaWRnZXR9OyIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LCBzaW5ndWxhcml6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8e29udG9MaXN0OiBzdHJpbmdbXSwgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIGxhYmVsOiBzdHJpbmd9PihcbiAgICBbXCJlbnRpdHlPbnRvTGlzdFwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG9udG9saXN0IDogc3RyaW5nW107XG4gICAgICAgIGxldCByZWFsRW50aXR5VHlwZSA6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgICBsZXQgbGFiZWwgOiBzdHJpbmc7XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBvbnRvbGlzdCA9IG9udG9saXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBvbnRvbG9neUlkKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiB7b250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfSBsYWJlbD17ZGF0YS5sYWJlbH0gaXJpPXtpcml9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3kgbGlzdFwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlPbnRvTGlzdChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5T250b0xpc3RXaWRnZXQocHJvcHM6IEVudGl0eU9udG9MaXN0V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eU9udG9MaXN0V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eU9udG9MaXN0V2lkZ2V0LCBjcmVhdGVFbnRpdHlPbnRvTGlzdCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvT2xzQXBpJ1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5J1xuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXksIHNpbmd1bGFyaXplVHlwZX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eURlZmluZWRCeVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcblxuZnVuY3Rpb24gRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PHtvbnRvTGlzdDogc3RyaW5nW10sIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBsYWJlbDogc3RyaW5nfT4oXG4gICAgW1wiZW50aXR5RGVmaW5lZEJ5XCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgb250b2xpc3QgOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IHJlYWxFbnRpdHlUeXBlIDogRW50aXR5VHlwZU5hbWU7XG4gICAgICAgIGxldCBsYWJlbCA6IHN0cmluZztcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBvbnRvbGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0pXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0RGVmaW5lZEJ5KCkuZmlsdGVyKChvbnRvbG9neSkgPT4gb250b2xvZ3kgIT0gZW50aXR5LmdldE9udG9sb2d5SWQoKSk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBvbnRvbGlzdCA9IG9udG9saXN0LnNvcnQoKTtcbiAgICAgICAgcmV0dXJuIHtvbnRvTGlzdDogb250b2xpc3QsIGVudGl0eVR5cGU6IHJlYWxFbnRpdHlUeXBlLCBsYWJlbDogbGFiZWx9O1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfSBsYWJlbD17ZGF0YS5sYWJlbH0gaXJpPXtpcml9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3kgbGlzdFwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlEZWZpbmVkQnkocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eURlZmluZWRCeVdpZGdldCwgY3JlYXRlRW50aXR5RGVmaW5lZEJ5IH07XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXV0b2NvbXBsZXRlIH0gZnJvbSBcIi4vQXV0b2NvbXBsZXRlV2lkZ2V0L0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRGF0YUNvbnRlbnQgfSBmcm9tIFwiLi9EYXRhQ29udGVudFdpZGdldC9EYXRhQ29udGVudFdpZGdldFwiXG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlJbmZvIH0gZnJvbSBcIi4vRW50aXR5SW5mb1dpZGdldC9FbnRpdHlJbmZvV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVKc29uQXBpfSBmcm9tIFwiLi9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUJyZWFkY3J1bWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25XaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlSXJpIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvSXJpV2lkZ2V0L0lyaVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlVGFiIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUNyb3NzUmVmVGFiIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVIaWVyYXJjaHlPTFMgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0L0hpZXJhcmNoeVdpZGdldE9MU1wiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5RGVwcmVjYXRlZCB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkL0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRcIjtcbmltcG9ydCB7IGNyZWF0ZUhpZXJhcmNoeSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXRTZW1Mb29rUC9IaWVyYXJjaHlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRpdGxlfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UaXRsZVdpZGdldC9UaXRsZVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlTWV0YWRhdGEgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlT250b2xvZ3lJbmZvIH0gZnJvbSBcIi4vT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlUmVzb3VyY2VzIH0gZnJvbSBcIi4vUmVzb3VyY2VzV2lkZ2V0L1Jlc291cmNlc1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlU2VhcmNoQmFyIH0gZnJvbSBcIi4vU2VhcmNoQmFyV2lkZ2V0L1NlYXJjaEJhcldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QgfSBmcm9tIFwiLi9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldFwiO1xuaW1wb3J0IHtjcmVhdGVFbnRpdHlSZWxhdGlvbnN9IGZyb20gXCIuL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURlcGljdGlvbiB9IGZyb20gXCIuL1Rlcm1EZXBpY3Rpb25XaWRnZXQvVGVybURlcGljdGlvbldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5T250b0xpc3QgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRW50aXR5RGVmaW5lZEJ5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldFwiXG5cbih3aW5kb3cgYXMgYW55KVsnU2VtTG9va1BXaWRnZXRzJ10gPSB7XG4gICAgY3JlYXRlQXV0b2NvbXBsZXRlLFxuICAgIGNyZWF0ZURhdGFDb250ZW50LFxuICAgIGNyZWF0ZUVudGl0eUluZm8sXG4gICAgY3JlYXRlRW50aXR5UmVsYXRpb25zLFxuICAgIGNyZWF0ZUpzb25BcGksXG4gICAgY3JlYXRlQnJlYWRjcnVtYixcbiAgICBjcmVhdGVEZXNjcmlwdGlvbixcbiAgICBjcmVhdGVJcmksXG4gICAgY3JlYXRlVGFiLFxuICAgIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYixcbiAgICBjcmVhdGVDcm9zc1JlZlRhYixcbiAgICBjcmVhdGVIaWVyYXJjaHksXG4gICAgY3JlYXRlSGllcmFyY2h5RGVwcmVjYXRlZCxcbiAgICBjcmVhdGVUaXRsZSxcbiAgICBjcmVhdGVPbnRvbG9neUluZm8sXG4gICAgY3JlYXRlUmVzb3VyY2VzLFxuICAgIGNyZWF0ZVNlYXJjaEJhcixcbiAgICBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCxcbiAgICBjcmVhdGVNZXRhZGF0YSxcbiAgICBjcmVhdGVEZXBpY3Rpb24sXG4gICAgY3JlYXRlSGllcmFyY2h5T0xTLFxuICAgIGNyZWF0ZUVudGl0eU9udG9MaXN0LFxuICAgIGNyZWF0ZUVudGl0eURlZmluZWRCeVxufVxuXG5leHBvcnQge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5T0xTLFxuICAgIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGEsXG4gICAgY3JlYXRlRGVwaWN0aW9uLFxuICAgIGNyZWF0ZUhpZXJhcmNoeSxcbiAgICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgICBjcmVhdGVFbnRpdHlEZWZpbmVkQnlcbn1cblxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vSnNvbkFwaVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc291cmNlc1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Rlcm1EZXBpY3Rpb25XaWRnZXRcIjsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBUUEsVUFBSSx3QkFBd0IsT0FBTztBQUNuQyxVQUFJQSxrQkFBaUIsT0FBTyxVQUFVO0FBQ3RDLFVBQUksbUJBQW1CLE9BQU8sVUFBVTtBQUV4QyxlQUFTLFNBQVMsS0FBSztBQUN0QixZQUFJLFFBQVEsUUFBUSxRQUFRLFFBQVc7QUFDdEMsZ0JBQU0sSUFBSSxVQUFVLHVEQUF1RDtBQUFBLFFBQzVFO0FBRUEsZUFBTyxPQUFPLEdBQUc7QUFBQSxNQUNsQjtBQUVBLGVBQVMsa0JBQWtCO0FBQzFCLFlBQUk7QUFDSCxjQUFJLENBQUMsT0FBTyxRQUFRO0FBQ25CLG1CQUFPO0FBQUEsVUFDUjtBQUtBLGNBQUksUUFBUSxJQUFJLE9BQU8sS0FBSztBQUM1QixnQkFBTSxDQUFDLElBQUk7QUFDWCxjQUFJLE9BQU8sb0JBQW9C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QVM7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFlBQ2hCLGNBQWM7QUFBQSxZQUNkLE9BQU87QUFBQSxZQUNQLEtBQUs7QUFBQSxZQUNMLFVBQVU7QUFBQSxZQUNWLHlCQUF5QjtBQUFBLFlBQ3pCLHVCQUF1QjtBQUFBLFlBQ3ZCLFVBQVU7QUFBQSxZQUNWLFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULGNBQWM7QUFBQSxZQUNkLEtBQUs7QUFBQSxZQUNMLE1BQU07QUFBQSxZQUNOLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLGdCQUFnQjtBQUFBLFlBQ2hCLFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxZQUNSLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFdBQVc7QUFBQSxZQUNYLGNBQWM7QUFBQSxZQUNkLE1BQU07QUFBQSxZQUNOLElBQUk7QUFBQSxZQUNKLFdBQVc7QUFBQSxZQUNYLFdBQVc7QUFBQSxZQUNYLFdBQVc7QUFBQSxZQUNYLElBQUk7QUFBQSxZQUNKLFFBQVE7QUFBQSxZQUNSLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLEtBQUs7QUFBQSxZQUNMLFVBQVU7QUFBQSxZQUNWLGFBQWE7QUFBQSxZQUNiLGNBQWM7QUFBQSxZQUNkLEtBQUs7QUFBQSxZQUNMLFdBQVc7QUFBQSxZQUNYLE9BQU87QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLEtBQUs7QUFBQSxZQUNMLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULGFBQWE7QUFBQSxZQUNiLGFBQWE7QUFBQSxZQUNiLFFBQVE7QUFBQSxZQUNSLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFVBQVU7QUFBQSxZQUNWLGdCQUFnQjtBQUFBLFlBQ2hCLEtBQUs7QUFBQSxZQUNMLFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxZQUNSLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLFlBQVk7QUFBQSxZQUNaLEtBQUs7QUFBQSxZQUNMLFFBQVE7QUFBQSxZQUNSLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFVBQVU7QUFBQSxZQUNWLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLE9BQU87QUFBQSxZQUNQLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQTtBQUFBLFlBRU4sT0FBTztBQUFBLFlBQ1AsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsbUJBQW1CO0FBQUEsWUFDbkIsc0JBQXNCO0FBQUEsWUFDdEIsY0FBYztBQUFBLFlBQ2QsWUFBWTtBQUFBLFlBQ1osV0FBVztBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsUUFBUTtBQUFBLFlBQ1IsZUFBZTtBQUFBLFlBQ2YsZUFBZTtBQUFBLFlBQ2YsYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsZUFBZTtBQUFBLFlBQ2YsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsZUFBZTtBQUFBLFlBQ2YsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsT0FBTztBQUFBLFlBQ1Asb0JBQW9CO0FBQUEsWUFDcEIsdUJBQXVCO0FBQUEsWUFDdkIsMkJBQTJCO0FBQUEsWUFDM0IsK0JBQStCO0FBQUEsWUFDL0IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsbUJBQW1CO0FBQUEsWUFDbkIsa0JBQWtCO0FBQUEsWUFDbEIsUUFBUTtBQUFBLFlBQ1IsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osR0FBRztBQUFBLFlBQ0gsVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsaUJBQWlCO0FBQUEsWUFDakIsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsS0FBSztBQUFBLFlBQ0wsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsMkJBQTJCO0FBQUEsWUFDM0IsTUFBTTtBQUFBLFlBQ04sYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsV0FBVztBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsb0JBQW9CO0FBQUEsWUFDcEIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsNEJBQTRCO0FBQUEsWUFDNUIsZ0NBQWdDO0FBQUEsWUFDaEMsMEJBQTBCO0FBQUEsWUFDMUIsOEJBQThCO0FBQUEsWUFDOUIsVUFBVTtBQUFBLFlBQ1YsbUJBQW1CO0FBQUEsWUFDbkIsZUFBZTtBQUFBLFlBQ2YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsZUFBZTtBQUFBLFlBQ2YsY0FBYztBQUFBLFlBQ2Qsa0JBQWtCO0FBQUEsWUFDbEIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsS0FBSztBQUFBLFlBQ0wsSUFBSTtBQUFBLFlBQ0osUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osR0FBRztBQUFBLFlBQ0gsY0FBYztBQUFBLFlBQ2Qsa0JBQWtCO0FBQUEsWUFDbEIsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsbUJBQW1CO0FBQUEsWUFDbkIsT0FBTztBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsY0FBYztBQUFBLFlBQ2QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sa0JBQWtCO0FBQUEsWUFDbEIsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1Ysa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsbUJBQW1CO0FBQUEsWUFDbkIsc0JBQXNCO0FBQUEsWUFDdEIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1oscUJBQXFCO0FBQUEsWUFDckIsa0JBQWtCO0FBQUEsWUFDbEIsY0FBYztBQUFBLFlBQ2QsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsUUFBUTtBQUFBLFlBQ1IsZUFBZTtBQUFBLFlBQ2YscUJBQXFCO0FBQUEsWUFDckIsZ0JBQWdCO0FBQUEsWUFDaEIsVUFBVTtBQUFBLFlBQ1YsR0FBRztBQUFBLFlBQ0gsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04saUJBQWlCO0FBQUEsWUFDakIsb0JBQW9CO0FBQUEsWUFDcEIsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsb0JBQW9CO0FBQUEsWUFDcEIsa0JBQWtCO0FBQUEsWUFDbEIsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1AsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsWUFDbEIsa0JBQWtCO0FBQUEsWUFDbEIsT0FBTztBQUFBLFlBQ1AsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsdUJBQXVCO0FBQUEsWUFDdkIsMEJBQTBCO0FBQUEsWUFDMUIsd0JBQXdCO0FBQUEsWUFDeEIsMkJBQTJCO0FBQUEsWUFDM0IsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsaUJBQWlCO0FBQUEsWUFDakIsb0JBQW9CO0FBQUEsWUFDcEIsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsZ0NBQWdDO0FBQUEsWUFDaEMsMEJBQTBCO0FBQUEsWUFDMUIsY0FBYztBQUFBLFlBQ2QsZ0JBQWdCO0FBQUEsWUFDaEIsYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsUUFBUTtBQUFBLFlBQ1IsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osbUJBQW1CO0FBQUEsWUFDbkIsc0JBQXNCO0FBQUEsWUFDdEIsb0JBQW9CO0FBQUEsWUFDcEIsdUJBQXVCO0FBQUEsWUFDdkIsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFlBQ1osZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsUUFBUTtBQUFBLFlBQ1IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlB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LElBQ1YsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCO0FBQUEsSUFDdEIsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1Qsa0JBQWtCO0FBQUEsSUFDbEIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsSUFDakIsbUJBQW1CO0FBQUEsSUFDbkIsaUJBQWlCO0FBQUEs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QU8sSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLGVBQU8sSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUM7QUFBQSxJQUNyRTtBQUFBLElBQ0EsTUFBTTtBQUNGLGFBQU8sY0FBTSxDQUFDLFFBQVEsUUFBUSxRQUFRLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQUEsUUFDL0Q7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7OztBQ0dBLE1BQU0sY0FBYztBQUFBO0FBQUEsSUFFaEIsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxJQUczRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoSSxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQTtBQUFBLElBRzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM3RixRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDL0YsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekksT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlGLFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzNJLFNBQVMsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdB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QUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixD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QjtBQUFBLElBQ3JCLFVBQVU7QUFBQSxJQUNWLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCLG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLG1CQUFtQjtBQUFBLElBQ25CLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLHFCQUFxQjtBQUFBLElBQ3JCLFNBQVM7QUFBQSxJQUNULGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLGVBQWU7QUFBQSxJQUNmLG9CQUFvQjtBQUFBLElBQ3BCLFFBQVE7QUFBQSxJQUNSLHdCQUF3QjtBQUFBLElBQ3hCLGtCQUFrQjtBQUFBLElBQ2xCLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLHFCQUFxQjtBQUFBLElBQ3JCLFFBQVE7QUFBQSxJQUNSLGVBQWU7QUFBQSxJQUNmLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLHFCQUFxQjtBQUFBLElBQ3JCLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULEtBQUs7QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLG9CQUFvQjtBQUFBLElBQ3BCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGtCQUFrQjtBQUFBLElBQ2xCLE9BQU87QUFBQSxJQUNQLG1CQUFtQjtBQUFBLElBQ25CLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLGlCQUFpQjtBQUFBLElBQ2pCLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLG1CQUFtQjtBQUFB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QUFBLENBQUFBLEtBQUFBLEVBQUFBLFlBQUFBLEVBQUFBLFdBQUFBLElBQUFBO01BQUFBO0lBQUFBLEVBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLFVBQUFBLElBQUFBLEVBQUFBLE9BQUFBLEdBQUFBLE1BQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEVBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxDQUFBQTtNQUFBQSxHQUFBQSxNQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxhQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxlQUFBQSxFQUFBQSxPQUFBQSxRQUFBQSxJQUFBQSxXQUFBQTtBQUFBQSxlQUFBQTtNQUFBQSxJQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxHQUFBQTtBQUFBQSxlQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQUE7UUFBQUE7TUFBQUE7QUFBQUEsZUFBQUEsRUFBQUEsR0FBQUE7QUFBQUEsWUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLFVBQUFBLGlDQUFBQTtBQUFBQSxlQUFBQTtBQUFBQSxjQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsR0FBQUEsTUFBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsSUFBQUEsRUFBQUEsU0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsRUFBQUEsV0FBQUEsRUFBQUEsS0FBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsRUFBQUEsU0FBQUEsRUFBQUEsSUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLG9CQUFBQSxJQUFBQSxHQUFBQSxNQUFBQSxJQUFBQSxDQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxHQUFBQTtjQUFBQSxLQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSxvQkFBQUE7QUFBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsdUJBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLE9BQUFBLEVBQUFBLENBQUFBLEdBQUFBLE1BQUFBLE1BQUFBO2NBQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxTQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxDQUFBQTtBQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSxvQkFBQUEsRUFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsSUFBQUE7QUFBQUE7Y0FBQUE7QUFBQUEsb0JBQUFBLElBQUFBLEVBQUFBLE1BQUFBLEVBQUFBLElBQUFBLEVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLEVBQUFBLFNBQUFBLENBQUFBLE9BQUFBLEVBQUFBLENBQUFBLE1BQUFBLEtBQUFBLEVBQUFBLENBQUFBLE1BQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsb0JBQUFBLEVBQUFBLENBQUFBLE1BQUFBLE1BQUFBLENBQUFBLEtBQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLEtBQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBO0FBQUFBLG9CQUFBQSxRQUFBQSxFQUFBQSxDQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsb0JBQUFBLEVBQUFBLENBQUFBLE1BQUFBLEtBQUFBLEVBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBO0FBQUFBLG9CQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxJQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsb0JBQUFBLEtBQUFBLEVBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBO0FBQUFBLG9CQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxLQUFBQSxDQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsa0JBQUFBLENBQUFBLEtBQUFBLEVBQUFBLElBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLElBQUFBO0FBQUFBO1lBQUFBO0FBQUFBLGdCQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxDQUFBQTtVQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxnQkFBQUEsQ0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsSUFBQUE7VUFBQUEsVUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBO1VBQUFBO0FBQUFBLFlBQUFBLEVBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxRQUFBQSxNQUFBQSxLQUFBQTtNQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxlQUFBQSxJQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxRQUFBQSxJQUFBQSxFQUFBQSxRQUFBQSxJQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxVQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxhQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxnQkFBQUEsS0FBQUEsT0FBQUEsa0JBQUFBLEtBQUFBLE9BQUFBLDJCQUFBQSxLQUFBQSxPQUFBQSx1QkFBQUEsS0FBQUEsT0FBQUEsVUFBQUEsZ0JBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLHNCQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxhQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxZQUFBQSxNQUFBQSxjQUFBQSxNQUFBQSxVQUFBQSxNQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxlQUFBQSxLQUFBQSxNQUFBQSxJQUFBQSxDQUFBQTtBQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxDQUFBQTtBQUFBQSxVQUFBQTtBQUFBQSxpQkFBQUEsSUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsSUFBQUEsRUFBQUEsUUFBQUEsS0FBQUE7QUFBQUEsY0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsYUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUE7UUFBQUE7QUFBQUEsYUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsSUFBQUEsUUFBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsWUFBQUEsSUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsY0FBQUE7QUFBQUEsY0FBQUEsRUFBQUEsS0FBQUEsQ0FBQUEsQ0FBQUE7VUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsY0FBQUEsQ0FBQUE7VUFBQUE7UUFBQUEsR0FBQUEsSUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsY0FBQUE7QUFBQUEsY0FBQUEsRUFBQUEsTUFBQUEsQ0FBQUEsQ0FBQUE7VUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsY0FBQUEsQ0FBQUE7VUFBQUE7UUFBQUEsR0FBQUEsSUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLE9BQUFBLEVBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFFBQUFBLFFBQUFBLEVBQUFBLEtBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLENBQUFBO1FBQUFBO0FBQUFBLFdBQUFBLElBQUFBLEVBQUFBLE1BQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLENB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QUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMs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QixJQUFJO0FBQUEsSUFDakM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjsiLAogICJuYW1lcyI6IFsiaGFzT3duUHJvcGVydHkiLCAiZnJvbSIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkNvbXBvbmVudCIsICJQdXJlQ29tcG9uZW50IiwgImNyZWF0ZVJlZiIsICJ4IiwgImhhc093blByb3BlcnR5IiwgIlJlYWN0RWxlbWVudCIsICJzZWxmIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xvbmVFbGVtZW50IiwgImlzVmFsaWRFbGVtZW50IiwgIm9iamVjdCIsICJtYXRjaCIsICJmdW5jIiwgInRvQXJyYXkiLCAiY3JlYXRlQ29udGV4dCIsICJlcnJvciIsICJmb3J3YXJkUmVmIiwgInJlbmRlciIsICJtZW1vIiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVkdWNlciIsICJyZWR1Y2VyIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlTGF5b3V0RWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAicHJlZml4IiwgInByb3RvdHlwZSIsICJub2RlIiwgImtleXMiLCAiQ2hpbGRyZW4iLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgIm5vZGUiLCAicGVlayIsICJsZW5ndGgiLCAiYiIsICJpbml0aWFsVGltZSIsICJSZWFjdCIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkZyYWdtZW50IiwgImhhc093blByb3BlcnR5IiwgInByZWZpeCIsICJzYW5pdGl6ZVVSTCIsICJfcmVmIiwgImNhcGl0YWxpemUiLCAidG9rZW4iLCAibm9kZSIsICJ4IiwgIm1hdGNoIiwgIkNvbXBvbmVudCIsICJwcm90b3R5cGUiLCAid29ya0luUHJvZ3Jlc3MiLCAidG9TdHJpbmciLCAiZ2V0IiwgInNldCIsICJnZXRBY3RpdmVFbGVtZW50IiwgImlzSHlkcmF0aW5nIiwgInZhbGlkYXRlUHJvcHMiLCAiaXNBcnJheSIsICJvcHRpb25zIiwgImZ1bmMiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJzdHJpbmciLCAiY2hhcmFjdGVyIiwgInN0eWxlcyIsICJkZWxpbWl0ZXIiLCAic3R5bGUiLCAicmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyIsICJwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIiwgImIiLCAiZXJyb3IiLCAiY2FsbENhbGxiYWNrIiwgImN1cnJlbnQiLCAicm9vdCIsICJxdWV1ZWRFdmVudCIsICJwcmVmaXhlcyIsICJpbmRleCIsICJsb2ciLCAiaXNFdmVudFN1cHBvcnRlZCIsICJmcm9tIiwgImxlbmd0aCIsICJuZXh0IiwgIm5vb3AiLCAiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJbnN0YW5jZSIsICJjYW5jZWxUaW1lb3V0IiwgImhhcyIsICJjdXJzb3IiLCAibm93IiwgIl9xdWV1ZSIsICJyZW5kZXJMYW5lcyIsICJ1cGRhdGVGcmFnbWVudCIsICJjaGlsZCIsICJyZWNvbmNpbGVDaGlsZEZpYmVycyIsICJpc09iamVjdCIsICJ2ZXJzaW9uIiwgInJlZHVjZXIiLCAicmVuZGVyIiwgInN1YnRyZWVSZW5kZXJMYW5lcyIsICJpc0hpZGRlbiIsICJlcnJvciQxIiwgImNvbW1pdFRpbWUiLCAiaHlkcmF0ZSIsICJjcmVhdGVQb3J0YWwiLCAiY3VycmVudEhvb2siLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAieCIsICJhc3NpZ24iLCAieCIsICJpc1ZhbGlkRWxlbWVudCIsICJ2YWxpZGF0ZSIsICJpIiwgImNoZWNrZXIiLCAiaGFzT3duIiwgImNsYXNzTmFtZXMiLCAicmVxdWlyZV9yZWFjdF9pc19kZXZlbG9wbWVudCIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAicmVxdWlyZV9yZWFjdF9pcyIsICJnZXRQcm90b3R5cGVPZiIsICJrZXlzIiwgImxlbmd0aCIsICJsZW5ndGgiLCAiU3ltYm9sIiwgIlN5bWJvbCIsICJoYXNPd25Qcm9wZXJ0eSIsICJTeW1ib2wiLCAiaXNPYmplY3QiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJmdW5jIiwgImZ1bmMiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIk1hcCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiTWFwIiwgInNpemUiLCAibGVuZ3RoIiwgIk1hcCIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm90aFZhbHVlIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIlVpbnQ4QXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJpc0FycmF5IiwgImlzQXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiQnVmZmVyIiwgImlzQnVmZmVyIiwgImxlbmd0aCIsICJmdW5jIiwgImlzVHlwZWRBcnJheSIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiZnVuYyIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNGdW5jdGlvbiIsICJrZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJNYXAiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNFcXVhbCIsICJnbG9iYWwiLCAiaXNBcnJheSIsICJpc09iamVjdCIsICJiIiwgImlzVW5kZWZpbmVkIiwgImlzTnVtYmVyIiwgImlzRGF0ZSIsICJleHRlbmQiLCAiZm9ybWF0IiwgImxvY2FsZSIsICJ0byIsICJmcm9tIiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJjYWxlbmRhciIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImZ1bmMiLCAibGVuZ3RoIiwgImkiLCAic3RyaW5nIiwgImRpZmYiLCAibG9jYWxlRGF0YSIsICJnZXQiLCAieCIsICJob3VycyIsICJtaW51dGVzIiwgIm5leHQiLCAibWF0Y2giLCAiZGVmYXVsdHMiLCAidG9rZW5zIiwgIm1lcmlkaWVtIiwgIm1pbiIsICJtYXgiLCAieWVhcnMiLCAibW9udGhzIiwgIndlZWtzIiwgImRheXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiLCAib2Zmc2V0IiwgIm1hdGNoZXMiLCAiYmFzZSIsICJpc1N0cmluZyIsICJwcm9wZXJ0eSIsICJ0b1N0cmluZyIsICJwcmVmaXgiLCAidG9BcnJheSIsICJ0b0pTT04iLCAiYWJzIiwgInJvdW5kIiwgInRocmVzaG9sZHMiLCAiaXNBcnJheSIsICJpc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiaXNOdW1iZXIiLCAiaXNOdW1iZXIiLCAiaXNOYU4iLCAiZ2xvYmFsIiwgIm51bWVyYWwiLCAiVkVSU0lPTiIsICJkZWZhdWx0cyIsICJhYnMiLCAibWluIiwgIm1heCIsICJzdHJpbmciLCAieCIsICJuZXh0IiwgInByb3BlcnR5IiwgImIiLCAibnVtIiwgIm1lbW9pemUiLCAiZnVuYyIsICJpc0FycmF5IiwgIm9iamVjdCIsICJtZW1vaXplIiwgImZ1bmMiLCAic3RyaW5nIiwgIm1hdGNoIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJ0b1N0cmluZyIsICJpc0FycmF5IiwgInRvU3RyaW5nIiwgIm9iamVjdCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImdldCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImZ1bmMiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImtleXMiLCAib2JqZWN0IiwgIm9iamVjdCIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJCdWZmZXIiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIm9iamVjdCIsICJpc09iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNPYmplY3QiLCAia2V5cyIsICJvYmplY3QiLCAia2V5IiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJpc1BsYWluT2JqZWN0IiwgImlzUGxhaW5PYmplY3QiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAibGVuZ3RoIiwgImZsYXR0ZW4iLCAibGVuZ3RoIiwgImZ1bmMiLCAiZnVuYyIsICJsZW5ndGgiLCAiZnVuYyIsICJzdHJpbmciLCAiZnVuYyIsICJmbGF0dGVuIiwgImZ1bmMiLCAib2JqZWN0IiwgImxlbmd0aCIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImVuY29kZSIsICJwcmVmaXgiLCAibWF0Y2giLCAiYmFzZSIsICJwYXJzZSIsICJjaGFyIiwgInRvU3RyaW5nIiwgInN0cmluZ2lmeSIsICJfZXh0ZW5kcyIsICJfY3JlYXRlQ2xhc3MiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgImtleXMiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2luaGVyaXRzIiwgImNsZWFuSW5wdXRQcm9wcyIsICJjb3B5U3R5bGVzIiwgInN0eWxlcyIsICJub2RlIiwgImdlbmVyYXRlSWQiLCAiQXV0b3NpemVJbnB1dCIsICJmb2N1cyIsICJpbmplY3RTdHlsZXMiLCAicmVuZGVyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInByb3RvdHlwZSIsICJrZXlzIiwgImIiLCAiZGVzY3JpcHRvcnMiLCAiZmlsdGVyIiwgInBvc2l0aW9uIiwgIm1hdGNoZXMiLCAiaGFzT3duUHJvcGVydHkiLCAicmVkdWNlciIsICJkZWxpbWl0ZXIiLCAiZGVmaW5lIiwgInNpemUiLCAibGVuZ3RoIiwgInRva2VuIiwgImZpbHRlciIsICJlYWNoIiwgInRva2VuIiwgIm1hdGNoIiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJlYWNoIiwgImVuY29kZSIsICJtYXRjaCIsICJrZXlzIiwgImlzRm9ybURhdGEiLCAiaXNGaWxlTGlzdCIsICJ0cmFuc2l0aW9uYWwiLCAibGluZSIsICJtYXRjaCIsICJmaWx0ZXIiLCAiY2hhciIsICJzZWxmIiwgImtleXMiLCAiY29tcHV0ZWQiLCAicHJvdG90eXBlIiwgInZhbGlkYXRlU3RhdHVzIiwgIm1hdGNoIiwgIm1pbiIsICJub3ciLCAibm93IiwgIm1hdGNoIiwgImIiLCAibWVyZ2UiLCAidG9rZW4iLCAidHJhbnNpdGlvbmFsIiwgInNpZ25hbCIsICJlbmNvZGUiLCAiZG9uZSIsICJyZXMiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJ2ZXJzaW9uIiwgImtleXMiLCAidmFsaWRhdG9ycyIsICJ0cmFuc2l0aW9uYWwiLCAidG9rZW4iLCAiQXhpb3MiLCAiQXhpb3NFcnJvciIsICJDYW5jZWxlZEVycm9yIiwgImlzQ2FuY2VsIiwgIkNhbmNlbFRva2VuIiwgIlZFUlNJT04iLCAiYWxsIiwgImlzQXhpb3NFcnJvciIsICJzcHJlYWQiLCAidG9Gb3JtRGF0YSIsICJBeGlvc0hlYWRlcnMiLCAiSHR0cFN0YXR1c0NvZGUiLCAibWVyZ2VDb25maWciLCAidiIsICJpTG9hZGVkQ2hpbGRyZW4iLCAiYiIsICJiIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUmVhY3QiLCAiU3R5bGVTaGVldCIsICJsZW5ndGgiLCAidHJpbSIsICJhcHBlbmQiLCAibGVuZ3RoIiwgInRyaW0iLCAibGVuZ3RoIiwgInByb3BlcnR5IiwgImNoYXJhY3RlciIsICJjaGFyYWN0ZXJzIiwgImFwcGVuZCIsICJzaXplIiwgIngiLCAidHJpbSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJjaGFyYWN0ZXIiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAibGVuZ3RoIiwgInByZWZpeGVyIiwgImNyZWF0ZUNhY2hlIiwgIm5vZGUiLCAic3R5bGlzIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgInJlZ2lzdGVyU3R5bGVzIiwgImluc2VydFN0eWxlcyIsICJpc0RldmVsb3BtZW50IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAicHJvcGVydHkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIm1hdGNoIiwgImtleWZyYW1lcyIsICJuZXh0IiwgInN0eWxlcyIsICJzdHJpbmciLCAic3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJpc0RldmVsb3BtZW50IiwgIndpdGhFbW90aW9uQ2FjaGUiLCAiZnVuYyIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiaXNEZXZlbG9wbWVudCIsICJSZWFjdCIsICJqc3giLCAic3R5bGVzIiwgIm5vZGUiLCAia2V5ZnJhbWVzIiwgInRvU3RyaW5nIiwgIm9iamVjdCIsICJrZXlzIiwgImNsb25lRWxlbWVudFdpdGhDc3MiLCAiZXVpU2NyZWVuUmVhZGVyT25seSIsICJldWlTY3JlZW5SZWFkZXJPbmx5U3R5bGVzIiwgIkV1aVNjcmVlblJlYWRlck9ubHkiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiRXVpU2NyZWVuUmVhZGVyTGl2ZSIsICJfcmVmIiwgInRvZ2dsZSIsICJQcm9wVHlwZXMiLCAiY2FuZGlkYXRlU2VsZWN0b3JzIiwgImNhbmRpZGF0ZVNlbGVjdG9yIiwgImpvaW4iLCAiTm9FbGVtZW50IiwgIkVsZW1lbnQiLCAibWF0Y2hlcyIsICJwcm90b3R5cGUiLCAibXNNYXRjaGVzU2VsZWN0b3IiLCAid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwgImdldFJvb3ROb2RlIiwgImVsZW1lbnQiLCAib3duZXJEb2N1bWVudCIsICJnZXRDYW5kaWRhdGVzIiwgImVsIiwgImluY2x1ZGVDb250YWluZXIiLCAiZmlsdGVyIiwgImNhbmRpZGF0ZXMiLCAiQXJyYXkiLCAic2xpY2UiLCAiYXBwbHkiLCAicXVlcnlTZWxlY3RvckFsbCIsICJjYWxsIiwgInVuc2hpZnQiLCAiZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5IiwgImVsZW1lbnRzIiwgIm9wdGlvbnMiLCAiZWxlbWVudHNUb0NoZWNrIiwgImZyb20iLCAibGVuZ3RoIiwgInNoaWZ0IiwgInRhZ05hbWUiLCAiYXNzaWduZWQiLCAiYXNzaWduZWRFbGVtZW50cyIsICJjb250ZW50IiwgImNoaWxkcmVuIiwgIm5lc3RlZENhbmRpZGF0ZXMiLCAiZmxhdHRlbiIsICJwdXNoIiwgInNjb3BlIiwgInZhbGlkQ2FuZGlkYXRlIiwgImluY2x1ZGVzIiwgInNoYWRvd1Jvb3QiLCAiZ2V0U2hhZG93Um9vdCIsICJ2YWxpZFNoYWRvd1Jvb3QiLCAic2hhZG93Um9vdEZpbHRlciIsICJnZXRUYWJpbmRleCIsICJub2RlIiwgImlzU2NvcGUiLCAidGFiSW5kZXgiLCAidGVzdCIsICJpc0NvbnRlbnRFZGl0YWJsZSIsICJpc05hTiIsICJwYXJzZUludCIsICJnZXRBdHRyaWJ1dGUiLCAic29ydE9yZGVyZWRUYWJiYWJsZXMiLCAiYSIsICJiIiwgImRvY3VtZW50T3JkZXIiLCAiaXNJbnB1dCIsICJpc0hpZGRlbklucHV0IiwgInR5cGUiLCAiaXNEZXRhaWxzV2l0aFN1bW1hcnkiLCAiciIsICJzb21lIiwgImNoaWxkIiwgImdldENoZWNrZWRSYWRpbyIsICJub2RlcyIsICJmb3JtIiwgImkiLCAiY2hlY2tlZCIsICJpc1RhYmJhYmxlUmFkaW8iLCAibmFtZSIsICJyYWRpb1Njb3BlIiwgInF1ZXJ5UmFkaW9zIiwgInJhZGlvU2V0IiwgIndpbmRvdyIsICJDU1MiLCAiZXNjYXBlIiwgImVyciIsICJjb25zb2xlIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAiaXNSYWRpbyIsICJpc05vblRhYmJhYmxlUmFkaW8iLCAiaXNaZXJvQXJlYSIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImlzSGlkZGVuIiwgIl9yZWYiLCAiZGlzcGxheUNoZWNrIiwgImdldENvbXB1dGVkU3R5bGUiLCAidmlzaWJpbGl0eSIsICJpc0RpcmVjdFN1bW1hcnkiLCAibm9kZVVuZGVyRGV0YWlscyIsICJwYXJlbnRFbGVtZW50IiwgIm5vZGVSb290SG9zdCIsICJob3N0IiwgIm5vZGVJc0F0dGFjaGVkIiwgImNvbnRhaW5zIiwgIm9yaWdpbmFsTm9kZSIsICJyb290Tm9kZSIsICJhc3NpZ25lZFNsb3QiLCAiZ2V0Q2xpZW50UmVjdHMiLCAiaXNEaXNhYmxlZEZyb21GaWVsZHNldCIsICJwYXJlbnROb2RlIiwgImRpc2FibGVkIiwgIml0ZW0iLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSIsICJpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUiLCAiaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSIsICJzaGFkb3dIb3N0Tm9kZSIsICJzb3J0QnlPcmRlciIsICJyZWd1bGFyVGFiYmFibGVzIiwgIm9yZGVyZWRUYWJiYWJsZXMiLCAiZm9yRWFjaCIsICJjYW5kaWRhdGVUYWJpbmRleCIsICJzb3J0IiwgInJlZHVjZSIsICJhY2MiLCAic29ydGFibGUiLCAiY29uY2F0IiwgInRhYmJhYmxlIiwgImJpbmQiLCAiZm9jdXNhYmxlIiwgImtleXMiLCAic3RyaW5naWZ5IiwgImIiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAicHJlZml4IiwgInVzZUdlbmVyYXRlZEh0bWxJZCIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3R5cGVvZiIsICJvYmoiLCAiaXNPYmplY3QiLCAiaXNJbnZlcnNlQ29sb3JNb2RlIiwgImdldENvbG9yTW9kZSIsICJnZXRPbiIsICJub2RlIiwgInNldE9uIiwgIkNvbXB1dGVkIiwgImJhc2UiLCAiX3JlZiIsICJfcmVmMiIsICJnZXRDb21wdXRlZCIsICJvdmVyIiwgImJ1aWxkVGhlbWUiLCAiZ2V0UHJvdG90eXBlT2YiLCAicHJvdG90eXBlIiwgImtleSIsICJwcm9wZXJ0eSIsICJnZXQiLCAibWVyZ2VEZWVwIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiYiIsICJ4IiwgInJnYiIsICJiIiwgInJnYiIsICJtYXgiLCAiYiIsICJiIiwgInJvdW5kIiwgImIiLCAicm91bmQiLCAiY3NzIiwgInJnYiIsICJoc2wiLCAicmdiIiwgImIiLCAidiIsICJiIiwgImIiLCAicm91bmQiLCAiYiIsICJiIiwgIm1pbiIsICJiIiwgImZsb29yIiwgInYiLCAiYiIsICJtaW4iLCAibWF4IiwgInJnYjJoc2wiLCAiYiIsICJ2IiwgImIiLCAieCIsICJwb3ciLCAiYiIsICJ4IiwgImNvcyIsICJiIiwgInNxcnQiLCAicm91bmQiLCAiYiIsICJiIiwgIm51bSIsICJiIiwgImIiLCAicm91bmQiLCAicm5kIiwgInYiLCAiYiIsICJyb3VuZCIsICJyZ2IiLCAiYiIsICJwb3ciLCAiYiIsICJhYnMiLCAicG93IiwgInNpZ24iLCAiYiIsICJhYnMiLCAiYiIsICJiIiwgImxhYiIsICJwb3ciLCAidGVzdCIsICJyZ2IiLCAiYiIsICJ4IiwgInJnYiIsICJsY2giLCAic3FydCIsICJwb3ciLCAicG93IiwgInNxcnQiLCAiUEkiLCAiY29zIiwgInNpbiIsICJhdGFuMiIsICJjb2xvcnMiLCAiYiIsICJyZ2IiLCAicG93IiwgImNvbG9ycyIsICJ2IiwgImYiLCAiX3BvcyIsICJjb2xvcnMiLCAibGFiIiwgImIiLCAicG93IiwgInNpbiIsICJjb3MiLCAibGlnaHRuZXNzIiwgImIiLCAiZmxvb3IiLCAibG9nIiwgInBvdyIsICJmbG9vciIsICJhYnMiLCAibnVtIiwgIm1pbiIsICJtYXgiLCAiYiIsICJsaW1pdHMiLCAidiIsICJiIiwgInNxcnQiLCAicG93IiwgIm1pbiIsICJtYXgiLCAiYXRhbjIiLCAiYWJzIiwgImNvcyIsICJzaW4iLCAiUEkiLCAiYiIsICJiMiIsICJiIiwgImNvbG9ycyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJmbGF0dGVuIiwgIl9yZWYiLCAiZXVpUGFsZXR0ZUNvbG9yQmxpbmQiLCAiX3JlZjIiLCAiY29sb3JzIiwgImJhc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImIiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJ0aW50IiwgInNoYWRlIiwgImxpZ2h0bmVzcyIsICJfdHlwZW9mIiwgIm9iaiIsICJtYWtlSGlnaENvbnRyYXN0Q29sb3IiLCAibGlnaHRuZXNzIiwgIm1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiY29sb3JzIiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAibG9naWNhbENTUyIsICJwcm9wZXJ0eSIsICJsb2dpY2FsU2l6ZUNTUyIsICJsb2dpY2FsVGV4dEFsaWduQ1NTIiwgIl90eXBlb2YiLCAib2JqIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiaW1wb3J0X3JlYWN0IiwgIl9leHRlbmRzIiwgInVzZUV1aVRoZW1lIiwgIndpdGhFdWlUaGVtZSIsICJDb21wb25lbnQiLCAiUmVuZGVyIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJpc0VxdWFsIiwgInRocm90dGxlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgInRocm90dGxlIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJ1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImZvcm1hdEJvb2xlYW4iLCAiX3JlZiIsICJpbXBvcnRfbW9tZW50IiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiY2FsZW5kYXIiLCAibW9tZW50IiwgIngiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJyb3VuZCIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAiZm9ybWF0QXV0byIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiaXNEb21haW5TZWN1cmUiLCAiZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IiwgIl9yZWYiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9nZXQiLCAiZ2V0IiwgIm9iamVjdCIsICJfZ2V0IiwgInYxIiwgInJldmVyc2UiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZ2V0QnVmZmVyVmFsdWVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9yZWY0IiwgIl9yZWY1IiwgIm5vZGUiLCAiZ2V0VHJhbnNpdGlvblRpbWluZ3MiLCAiZ2V0V2FpdER1cmF0aW9uIiwgInBlcmZvcm1PbkZyYW1lIiwgIm9uRnJhbWUiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUNvbWJpbmVkUmVmcyIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiUmVhY3QiLCAiX2V4dGVuZHMiLCAiRXVpSWNvbkFjY2Vzc2liaWxpdHkiLCAiX3JlZiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFnZ3JlZ2F0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbGVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbmFseXplRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFubm90YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBtVHJhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWRkRGF0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFnZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXVkaXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhbnZhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYXNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGFzaGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERldnRvb2xzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERpc2NvdmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEVtcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGaWxlYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGbGVldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JhcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JvayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBIZWFydGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4UGF0dGVybiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFJvbGx1cCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMZW5zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExvZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTW9uaXRvcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBOb3RlYm9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQYWNrZXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBpcGVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlcG9ydGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTYXZlZE9iamVjdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVc2Vyc1JvbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFZpc3VhbGl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXYXRjaGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93U3RhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXN0ZXJpc2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVha2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJlbGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbFNsYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJvbHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm94ZXNIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJhbmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaFVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJvb20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJ1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnVnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1bGxzZXllIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNhbGVuZGFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWREcml6emxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3Rvcm15IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3VubnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2x1c3RlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db2xvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db21wdXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGFpbmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QmVsb3ciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eVdpdGhpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udHJvbHNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db3B5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHlDbGlwYm9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NoYWlycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXJyZW5jeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGF0YWJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGVza3RvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvd25sb2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JCb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNoZWNrbGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb2RlQmxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29tbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JIZWFkaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0YWxpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JMaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclJlZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yU3RyaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZGVybGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVyYXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeHBhbmRNaW5pIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXllQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VIYXBweSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlTmV1dHJhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlU2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GbGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlck9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVOZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZyYW1lUHJldmlvdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HZWFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdsYXNzZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xvYmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmlkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlYXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlYXRtYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVscCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ib21lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbWFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbXBvcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhDbG9zZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhGbHVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleE1hcHBpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4UnVudGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklucHV0T3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluc3BlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW52ZXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktleWJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbEZpZWxkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbEZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbE9wZXJhbmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsU2VsZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsVmFsdWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3ViZXJuZXRlc05vZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3ViZXJuZXRlc1BvZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MYXllcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGV0dGVyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVEYXNoZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURvdHRlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lU29saWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3RBZGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQWVyb3NwaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BcGFjaGUiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBwU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F3c01vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F6dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZU1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0JlYXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2VwaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkRWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db2Rlc2FuZGJveCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ291Y2hiYXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Eb2NrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Ryb3B3aXphcmQiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY1N0YWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FdGNkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HY3AiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2l0aHViIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HbWFpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29sYW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Hb29nbGVHIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0hhcHJveHkiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSWJtIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libU1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0thZmthIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LaWJhbmEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0t1YmVybmV0ZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0xvZ2dpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0xvZ3N0YXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NYXBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NZW1jYWNoZWQiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWV0cmljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTW9uZ29kYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTXlzcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb05naW54IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Pc3F1ZXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29QaHAiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUG9zdGdyZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Byb21ldGhldXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1JhYmJpdG1xIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SZWRpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NpdGVTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NrZXRjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2xhY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1VwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2ViaG9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2luZG93cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoRmlsdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoSWYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaFF1ZXVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25ldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhQbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hcE1hcmtlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW1vcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudVVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lcmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbmltaXplIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxEYXRhVmlzdWFsaXplciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxSZWdyZXNzaW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1vYmlsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb29uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uT2ZmbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PbmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWdlU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VzU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhaW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhcGVyQ2xpcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXJ0aWFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhdXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBheW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGVuY2lsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlcmNlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbkZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsYXlGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBvcG91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVvdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXBvcnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXR1cm5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2F2ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TY2FsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlc3Npb25WaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU25vd2ZsYWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5U3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkU3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcEZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcmFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VibW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Td2F0Y2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TeW1saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlT2ZDb250ZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZW1wZXJhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lc2xpZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQWxpYXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQXJyYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5CaW5hcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Cb29sZWFuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ2xhc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29uc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGVuc2VWZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbGVtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRW51bSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW1NZW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkV4Y2VwdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpZWxkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmlsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZsYXR0ZW5lZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuR2VvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSGlzdG9ncmFtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSVAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5JbnRlcmZhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Kb2luIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuS2V5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuS2V5d29yZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldGhvZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1vZHVsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk5lc3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk51bGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5PYmplY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5PcGVyYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBhY2thZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYXJhbWV0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QZXJjb2xhdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5nZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmVwbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNlYXJjaFR5cGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TaGFwZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN0cmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN0cnVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN5bWJvbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRhZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRleHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Ub2tlbkNvdW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmFyaWFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhaW5pbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5mb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVubGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXJBdmF0YXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpZGVvUGxheWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0FyZWEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYVN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFySG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR29hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNMaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01hcENvb3JkaW5hdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwUmVnaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01ldHJpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNQaWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFnQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNWZWdhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXBEaXNhYmxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XcmVuY2giLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiZXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYiLCAiX3JlZjIiLCAidGludE9yU2hhZGUiLCAiY29sb3IiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYzIiwgInVzZUV1aUJhY2tncm91bmRDb2xvckNTUyIsICJldWlTY3JvbGxCYXJTdHlsZXMiLCAiX3JlZiIsICJjb2xvcnMiLCAic2l6ZSIsICJfcmVmMiIsICJldWlQYWRkaW5nU2l6ZSIsICJfcmVmIiwgInNpemUiLCAidXNlRXVpUGFkZGluZ1NpemUiLCAidXNlRXVpUGFkZGluZ0NTUyIsICJwcm9wZXJ0eSIsICJldWlGb2N1c1JpbmciLCAiZXVpRm9udFNpemUiLCAiX3JlZiIsICJldWlUZXh0QnJlYWtXb3JkIiwgIkV1aUdsb2JhbFN0eWxlcyIsICJfcmVmIiwgImJhc2UiLCAiY29sb3JzIiwgImZvbnQiLCAic3R5bGVzIiwgImljb25TaXplIiwgInNpemUiLCAiZXVpSWNvblN0eWxlcyIsICJfcmVmMyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgInNlbGYiLCAiX2dldFByb3RvdHlwZU9mIiwgImdldElzQXBwSWNvbiIsICJ4IiwgImljb24iLCAiRXVpSWNvbkNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RTcHJlYWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiZm9jdXNhYmxlIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aUNvbnRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgImlzQm9vbGVhbiIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc1VuZGVmaW5lZCIsICJjaGFyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAidG9rZW4iLCAicmVuZGVyIiwgIkNvbXBvbmVudCIsICJSZWFjdCIsICJ4IiwgIkV1aUkxOG4iLCAiX3JlZiIsICJfcmVmMiIsICJ1c2VMb2FkaW5nQXJpYUxhYmVsIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJzcGlubmVyQ29sb3JzQ1NTIiwgImJvcmRlciIsICJoaWdobGlnaHQiLCAiZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUxvYWRpbmdTcGlubmVyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkIiwgIl9yZWYiLCAiaWNvblNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiVVJMIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJTSVpFUyIsICJFdWlCdXR0b24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZjIiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlPYnNlcnZlciIsICJyZW5kZXIiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl90eXBlb2YiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpUmVzaXplT2JzZXJ2ZXIiLCAibWFrZVJlc2l6ZU9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9jb2xvckNTUyIsICJldWlMaW5rSG92ZXJDU1MiLCAiZXVpTGlua0ZvY3VzQ1NTIiwgImV1aUxpbmtDU1MiLCAiX3JlZiIsICJldWlMaW5rU3R5bGVzIiwgIl9yZWYyIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVGl0bGUiLCAiX3JlZiIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZVN0eWxlcyIsICJldWlUZXh0IiwgImV1aVNjYWxlVGV4dCIsICJldWlUZXh0U3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVRleHRDb2xvclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIkV1aVRleHRDb2xvciIsICJfcmVmIiwgImNsb25lRWxlbWVudCIsICJpc05hbWVkQ29sb3IiLCAic3R5bGVzIiwgIkNvbXBvbmVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVRleHRBbGlnblN0eWxlcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dEFsaWduIiwgIl9yZWYiLCAiY2xvbmVFbGVtZW50IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dCIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJjb2xvclRvQ2xhc3NOYW1lTWFwIiwgIkNPTE9SUyIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpQnV0dG9uRW1wdHkiLCAiX3JlZiIsICJpY29uU2l6ZSIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImNvbG9yVG9DbGFzc05hbWVNYXAiLCAiQ09MT1JTIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlCdXR0b25JY29uIiwgIl9yZWYiLCAiaWNvblNpemUiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJub2RlIiwgIkV1aUlubmVyVGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiY2FuY2VsRnJhbWUiLCAiYW5pbWF0aW9uIiwgImNzcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlBdXRvU2l6ZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgInBhcnNlQ29sb3IiLCAicmdiIiwgImNocm9tYVZhbGlkIiwgIl90eXBlb2YiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJpY29uU2lkZVRvQ2xhc3NOYW1lTWFwIiwgIklDT05fU0lERVMiLCAiRXVpQmFkZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImlzTmFtZWRDb2xvciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpUG9ydGFsIiwgInBvc2l0aW9uIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUb29sVGlwUG9wb3ZlciIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRXVpVG9vbFRpcCIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJhbmNob3IiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaXAiLCAiX3JlZiIsICJzaXplIiwgInBvc2l0aW9uIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJTSVpFUyIsICJFdWlCZXRhQmFkZ2UiLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJFbGVtZW50IiwgIlByb3BUeXBlcyIsICJnZXRTaGFkb3dDb2xvciIsICJldWlTaGFkb3dYU21hbGwiLCAiX3JlZiIsICJfcmVmMiIsICJldWlTaGFkb3dTbWFsbCIsICJfcmVmMyIsICJfcmVmNCIsICJldWlTaGFkb3dNZWRpdW0iLCAiX3JlZjUiLCAiX3JlZjYiLCAicHJvcGVydHkiLCAidiIsICJldWlTaGFkb3dMYXJnZSIsICJfcmVmNyIsICJfcmVmOCIsICJldWlTaGFkb3dYTGFyZ2UiLCAiX3JlZjkiLCAiX3JlZjEwIiwgInJldmVyc2UiLCAiZXVpU2hhZG93RmxhdCIsICJldWlTaGFkb3ciLCAic2l6ZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX19hc3NpZ24iLCAiZnJvbSIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiX19hc3NpZ24iLCAiX19yZXN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAieCIsICJjYnMiLCAiZmlsdGVyIiwgIl9fYXNzaWduIiwgIlJlYWN0IiwgIl9fcmVzdCIsICJfX2Fzc2lnbiIsICJTaWRlQ2FyIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkluRm9jdXNHdWFyZCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kczIiLCAiU2lkZUNhciIsICJfcmVmIiwgImNhcHR1cmVGb2N1c1Jlc3RvcmUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiZXh0cmFjdFJlZiIsICJlZmZlY3RDYXIiLCAiU2lkZUNhciIsICJlZmZlY3RDYXIiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3NldFByb3RvdHlwZU9mIiwgInQiLCAiZSIsICJfc2V0UHJvdG90eXBlT2YiLCAiX3R5cGVvZiIsICJvIiwgIl90eXBlb2YiLCAiX3R5cGVvZiIsICJfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3JlYWN0IiwgInJlZHVjZVByb3BzVG9TdGF0ZSIsICJoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IiwgIlNpZGVFZmZlY3QiLCAicGVlayIsICJyZW5kZXIiLCAiUmVhY3QiLCAiX2RlZmluZVByb3BlcnR5IiwgInRvQXJyYXkiLCAiYXNBcnJheSIsICJub2RlIiwgIngiLCAiYiIsICJub2RlIiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJwb3NpdGlvbiIsICJub2RlIiwgImFzQXJyYXkiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJmb2N1c2FibGUiLCAibGluZSIsICJmb2N1c2FibGUiLCAiYXNBcnJheSIsICJub2RlIiwgIm5leHQiLCAicHJldiIsICJmb2N1c09uQm9keSIsICJpc0ZyZWVGb2N1cyIsICJ0cnlSZXN0b3JlRm9jdXMiLCAiZGVmYXVsdFdoaXRlbGlzdCIsICJmb2N1c1doaXRlbGlzdGVkIiwgInJlY29yZFBvcnRhbCIsICJmb2N1c0lzUG9ydGFsZWRQYWlyIiwgImZvY3VzV2FzT3V0c2lkZSIsICJjaGVja0luSG9zdCIsICJ3aXRoaW5Ib3N0IiwgImdldE5vZGVGb2N1c2FibGVzIiwgImlzTm90Rm9jdXNhYmxlIiwgIm5vZGUiLCAiYWN0aXZhdGVUcmFwIiwgInNob3VsZEZvcmNlUmVzdG9yZUZvY3VzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAib25UcmFwIiwgIm9uQmx1ciIsICJvbkZvY3VzIiwgIkZvY3VzV2F0Y2hlciIsICJGb2N1c1RyYXAiLCAiX3JlZjUiLCAiUHJvcFR5cGVzIiwgIm9uV2luZG93Rm9jdXMiLCAib25XaW5kb3dCbHVyIiwgImF0dGFjaEhhbmRsZXIiLCAiZGV0YWNoSGFuZGxlciIsICJfcmVmNiIsICJfcmVmNyIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJjc3MiLCAic3R5bGVzIiwgInN0eWxlcyIsICJwYXJzZSIsICJ4IiwgIm5vZGUiLCAic3R5bGVzIiwgInBvc2l0aW9uIiwgImV4dHJhY3RSZWYiLCAieCIsICJTdHlsZSIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJSZWFjdCIsICJub2RlIiwgIngiLCAiUmVhY3QiLCAiU3R5bGUiLCAiaW1wb3J0X3JlYWN0IiwgImV4dHJhY3RSZWYiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiZWZmZWN0Q2FyIiwgInNpZGVjYXJfZGVmYXVsdCIsICJGb2N1c09uIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpRm9jdXNUcmFwIiwgIm5vZGUiLCAicmVuZGVyIiwgIkZvY3VzT24iLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlNdXRhdGlvbk9ic2VydmVyIiwgIm1ha2VNdXRhdGlvbk9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aU91dHNpZGVDbGlja0RldGVjdG9yIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVBvcG92ZXJBcnJvd1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJBcnJvdyIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlQYW5lbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYW5lbCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyUGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyUGFuZWwiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3JlZiIsICJfcmVmMiIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmMyIsICJfcmVmNCIsICJfaW5oZXJpdHMiLCAiRXVpUG9wb3ZlciIsICJfY3JlYXRlU3VwZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfcmVmNSIsICJkdXJhdGlvbk1hdGNoIiwgImRlbGF5TWF0Y2giLCAiX3JlZjYiLCAicG9zaXRpb24iLCAiX29iamVjdFNwcmVhZCIsICJub2RlIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpbml0aWFsRm9jdXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZFNlbGVjdCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZCIsICJfcmVmIiwgImljb24iLCAib3V0ZXJPbkNsaWNrIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJUWVBFUyIsICJFdWlDaGVja2JveCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaXNWYWxpZEVsZW1lbnQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRmxleEl0ZW0iLCAiX3JlZiIsICJDb21wb25lbnQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpY29uIiwgIl9pbmhlcml0cyIsICJFdWlGb3JtQ29udHJvbExheW91dEljb25zIiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtTGFiZWwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlGb3JtQ29udHJvbExheW91dCIsICJyZW5kZXIiLCAiaWNvbiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJzdHJpbmciLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aVZhbGlkYXRhYmxlQ29udHJvbCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlGaWVsZFNlYXJjaCIsICJvblNlYXJjaCIsICJvbkNoYW5nZSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1FcnJvclRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtSGVscFRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRElTUExBWVMiLCAiRXVpRm9ybVJvdyIsICJfcmVmIiwgInJlbmRlciIsICJfcmVmMiIsICJjbGFzc05hbWVzIiwgImhlbHBUZXh0IiwgImVycm9yIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlDb250ZXh0TWVudUl0ZW0iLCAicmVuZGVyIiwgImljb24iLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiU0laRVMiLCAiRXVpQ29udGV4dE1lbnVQYW5lbCIsICJub2RlIiwgInJlbmRlciIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlIb3Jpem9udGFsUnVsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhvcml6b250YWxSdWxlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3dpdGNoIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpc0VxdWFsIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhhc05hdGl2ZVBlcmZvcm1hbmNlTm93IiwgInBlcmZvcm1hbmNlIiwgIm5vdyIsICJEYXRlIiwgImNhbmNlbFRpbWVvdXQiLCAidGltZW91dElEIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImlkIiwgInJlcXVlc3RUaW1lb3V0IiwgImNhbGxiYWNrIiwgImRlbGF5IiwgInN0YXJ0IiwgInRpY2siLCAiY2FsbCIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAic2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgInJlY2FsY3VsYXRlIiwgImRpdiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgInN0eWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyIsICJib2R5IiwgImFwcGVuZENoaWxkIiwgIm9mZnNldFdpZHRoIiwgImNsaWVudFdpZHRoIiwgInJlbW92ZUNoaWxkIiwgImNhY2hlZFJUTFJlc3VsdCIsICJnZXRSVExPZmZzZXRUeXBlIiwgIm91dGVyRGl2IiwgIm91dGVyU3R5bGUiLCAiZGlyZWN0aW9uIiwgImlubmVyRGl2IiwgImlubmVyU3R5bGUiLCAic2Nyb2xsTGVmdCIsICJkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQiLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwgImRlZmF1bHRJdGVtS2V5IiwgImluZGV4IiwgImRhdGEiLCAiZGV2V2FybmluZ3NEaXJlY3Rpb24iLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJfcmVmIiwgImdldEl0ZW1PZmZzZXQiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgImdldEl0ZW1TaXplIiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAicHJvcHMiLCAiX2luc3RhbmNlUHJvcHMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfb3V0ZXJSZWYiLCAiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCAic3RhdGUiLCAiaW5zdGFuY2UiLCAiaXNTY3JvbGxpbmciLCAic2Nyb2xsRGlyZWN0aW9uIiwgInNjcm9sbE9mZnNldCIsICJpbml0aWFsU2Nyb2xsT2Zmc2V0IiwgInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsICJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsICJtZW1vaXplT25lIiwgIm92ZXJzY2FuU3RhcnRJbmRleCIsICJvdmVyc2NhblN0b3BJbmRleCIsICJ2aXNpYmxlU3RhcnRJbmRleCIsICJ2aXNpYmxlU3RvcEluZGV4IiwgIm9uSXRlbXNSZW5kZXJlZCIsICJfY2FsbE9uU2Nyb2xsIiwgIm9uU2Nyb2xsIiwgIl9nZXRJdGVtU3R5bGUiLCAiZGlyZWN0aW9uIiwgIml0ZW1TaXplIiwgImxheW91dCIsICJpdGVtU3R5bGVDYWNoZSIsICJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCAic3R5bGUiLCAiaGFzT3duUHJvcGVydHkiLCAib2Zmc2V0IiwgInNpemUiLCAiaXNIb3Jpem9udGFsIiwgImlzUnRsIiwgIm9mZnNldEhvcml6b250YWwiLCAicG9zaXRpb24iLCAibGVmdCIsICJ1bmRlZmluZWQiLCAicmlnaHQiLCAidG9wIiwgImhlaWdodCIsICJ3aWR0aCIsICJfIiwgIl9fIiwgIl9fXyIsICJfb25TY3JvbGxIb3Jpem9udGFsIiwgImV2ZW50IiwgImN1cnJlbnRUYXJnZXQiLCAiY2xpZW50V2lkdGgiLCAic2Nyb2xsTGVmdCIsICJzY3JvbGxXaWR0aCIsICJzZXRTdGF0ZSIsICJwcmV2U3RhdGUiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJNYXRoIiwgIm1heCIsICJtaW4iLCAiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCAiX29uU2Nyb2xsVmVydGljYWwiLCAiY2xpZW50SGVpZ2h0IiwgInNjcm9sbEhlaWdodCIsICJzY3JvbGxUb3AiLCAiX291dGVyUmVmU2V0dGVyIiwgInJlZiIsICJvdXRlclJlZiIsICJjdXJyZW50IiwgImNhbmNlbFRpbWVvdXQiLCAicmVxdWVzdFRpbWVvdXQiLCAiX3Jlc2V0SXNTY3JvbGxpbmciLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwgIm5leHRQcm9wcyIsICJ2YWxpZGF0ZVNoYXJlZFByb3BzIiwgInNjcm9sbFRvIiwgInNjcm9sbFRvSXRlbSIsICJhbGlnbiIsICJpdGVtQ291bnQiLCAic2Nyb2xsYmFyU2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgImNvbXBvbmVudERpZE1vdW50IiwgIl9jYWxsUHJvcHNDYWxsYmFja3MiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgInJlbmRlciIsICJjaGlsZHJlbiIsICJjbGFzc05hbWUiLCAiaW5uZXJSZWYiLCAiaW5uZXJFbGVtZW50VHlwZSIsICJpbm5lclRhZ05hbWUiLCAiaXRlbURhdGEiLCAiaXRlbUtleSIsICJvdXRlckVsZW1lbnRUeXBlIiwgIm91dGVyVGFnTmFtZSIsICJ1c2VJc1Njcm9sbGluZyIsICJfZ2V0UmFuZ2VUb1JlbmRlciIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJpdGVtcyIsICJwdXNoIiwgImNyZWF0ZUVsZW1lbnQiLCAia2V5IiwgImVzdGltYXRlZFRvdGFsU2l6ZSIsICJvdmVyZmxvdyIsICJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsICJ3aWxsQ2hhbmdlIiwgInBvaW50ZXJFdmVudHMiLCAib3ZlcnNjYW5Db3VudCIsICJvdmVyc2NhbkJhY2t3YXJkIiwgIm92ZXJzY2FuRm9yd2FyZCIsICJQdXJlQ29tcG9uZW50IiwgImRlZmF1bHRQcm9wcyIsICJfcmVmMiIsICJfcmVmMyIsICJoYXMiLCAiYWRkIiwgImNvbnNvbGUiLCAid2FybiIsICJFcnJvciIsICJGaXhlZFNpemVMaXN0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiZ2V0SXRlbU9mZnNldCIsICJfcmVmIiwgImluZGV4IiwgIml0ZW1TaXplIiwgImdldEl0ZW1TaXplIiwgIl9yZWYyIiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJfcmVmMyIsICJpdGVtQ291bnQiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiX3JlZjQiLCAiYWxpZ24iLCAic2Nyb2xsT2Zmc2V0IiwgImluc3RhbmNlUHJvcHMiLCAic2Nyb2xsYmFyU2l6ZSIsICJkaXJlY3Rpb24iLCAiaGVpZ2h0IiwgImxheW91dCIsICJ3aWR0aCIsICJpc0hvcml6b250YWwiLCAic2l6ZSIsICJsYXN0SXRlbU9mZnNldCIsICJNYXRoIiwgIm1heCIsICJtYXhPZmZzZXQiLCAibWluIiwgIm1pbk9mZnNldCIsICJtaWRkbGVPZmZzZXQiLCAicm91bmQiLCAiY2VpbCIsICJmbG9vciIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgIl9yZWY1IiwgIm9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgIl9yZWY2IiwgInN0YXJ0SW5kZXgiLCAibnVtVmlzaWJsZUl0ZW1zIiwgImluaXRJbnN0YW5jZVByb3BzIiwgInByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJfcmVmNyIsICJwcm9jZXNzIiwgIkVycm9yIiwgInNoYWxsb3dEaWZmZXJzIiwgInByZXYiLCAibmV4dCIsICJhdHRyaWJ1dGUiLCAiYXJlRXF1YWwiLCAicHJldlByb3BzIiwgIm5leHRQcm9wcyIsICJwcmV2U3R5bGUiLCAic3R5bGUiLCAicHJldlJlc3QiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2V4Y2x1ZGVkIiwgIm5leHRTdHlsZSIsICJuZXh0UmVzdCIsICJfZXhjbHVkZWQyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlPdmVybGF5TWFzayIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAibGlzdGVuZXIiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVNwYWNlclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTcGFjZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpTWFya1N0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTWFyayIsICJfcmVmIiwgInVzZVRoZW1lIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhpZ2hsaWdodCIsICJtYXRjaCIsICJnZXRIaWdodGxpZ2h0V29yZHMiLCAibWF0Y2hlcyIsICJmaWxsSW5DaHVua3MiLCAiYXBwZW5kIiwgIkV1aUhpZ2hsaWdodCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ29tYm9Cb3hUaXRsZSIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlGaWx0ZXJTZWxlY3RJdGVtIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgImljb24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94T3B0aW9uc0xpc3QiLCAiX3JlZiIsICJyZW5kZXIiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJwb3NpdGlvbiIsICJkZWxpbWl0ZXIiLCAiaGlnaGxpZ2h0U2VhcmNoVmFsdWUiLCAic2VhcmNoVmFsdWUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZmxhdHRlbk9wdGlvbkdyb3VwcyIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAib2JqZWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94UGlsbCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94SW5wdXQiLCAicmVuZGVyIiwgImFwcGVuZCIsICJvbkNsaWNrIiwgImljb24iLCAiY2xhc3NOYW1lcyIsICJBdXRvc2l6ZUlucHV0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiZGVsaW1pdGVyIiwgInJlbmRlciIsICJvbkJsdXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uQnV0dG9uIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leHRlbmRzIiwgIlRZUEVTIiwgIkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uIiwgIl9yZWYiLCAic2FmZUNsaWNrIiwgImNsYXNzTmFtZXMiLCAiYWNjZXNzaWJsZVBhZ2VTdHJpbmciLCAiUHJvcFR5cGVzIiwgIlBhZ2luYXRpb25CdXR0b25XcmFwcGVyIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVBhZ2luYXRpb24iLCAiX3JlZiIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFiIiwgIl9yZWYiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9pbmhlcml0cyIsICJFdWlUYWJiZWRDb250ZW50IiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX3JlZiIsICJfZXh0ZW5kcyIsICJfZXhjbHVkZWQyIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aURlbGF5UmVuZGVyIiwgIl9yZWYiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlIZWFsdGhTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIZWFsdGgiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlJbWFnZUJ1dHRvblN0eWxlcyIsICJfcmVmIiwgImV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlQnV0dG9uIiwgIl9yZWYiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlJbWFnZUNhcHRpb25TdHlsZXMiLCAiX3JlZiIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiRXVpSW1hZ2VXcmFwcGVyIiwgIl9yZWYiLCAib3BlbkZ1bGxTY3JlZW4iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImV1aUltYWdlU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzIiwgImV1aUltYWdlRnVsbFNjcmVlbiIsICJzaXplIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJjbG9zZUZ1bGxTY3JlZW4iLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIlNJWkVTIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlIiwgIl9yZWYiLCAic2l6ZSIsICJTSVpFUyIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJFdWlVdGlsaXR5Q2xhc3NlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ2FjaGVQcm92aWRlciIsICJfcmVmIiwgIlJlYWN0IiwgImlzRW1vdGlvbkNhY2hlT2JqZWN0IiwgIkV1aVByb3ZpZGVyIiwgIl9yZWYiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ4IiwgImRpc3BsYXlUb0NsYXNzTmFtZU1hcCIsICJFdWlUcmVlVmlldyIsICJfcmVmIiwgIl9yZWYyIiwgIm5vZGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAicmVmIiwgIl9yZWYzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImdldFNlYXJjaGFibGVMYWJlbCIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlU2VhcmNoIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZU1lc3NhZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAicGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCIsICJQQURESU5HX1NJWkVTIiwgIkV1aVNlbGVjdGFibGVMaXN0SXRlbSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpU2VsZWN0YWJsZUxpc3QiLCAiX3JlZiIsICJhcHBlbmQiLCAib3B0aW9uIiwgIl9yZWYyIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIl9yZWYzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aVNlbGVjdGFibGUiLCAiX3JlZiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiaW5pdGlhbFNlYXJjaFZhbHVlIiwgInJlbmRlciIsICJfcmVmMiIsICJfcmVmMyIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImdldEFjY2Vzc2libGVOYW1lIiwgImlucHV0UmVmIiwgIm5vZGUiLCAiX2RlZmF1bHQiLCAiX3JlZjQiLCAicmVzdWx0c0xlbmd0aCIsICJfcmVmNSIsICJfcmVmNiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUJvZHkiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyZXNvbHZlV2lkdGhBc1N0eWxlIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXJDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ2VsbENvbnRlbnRzIiwgIl9yZWYiLCAiRXVpVGFibGVIZWFkZXJDZWxsIiwgIl9yZWYyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJNb2JpbGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVTb3J0TW9iaWxlSXRlbSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUYWJsZVNvcnRNb2JpbGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAib25LZXlVcCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgImNoaWxkcmVuIiwgIlJlYWN0IiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkNvbGxhcHNlZEl0ZW1BY3Rpb25zIiwgInJlbmRlciIsICJvbkZvY3VzIiwgImNvbnRyb2xzIiwgImljb24iLCAiaXNTdHJpbmciLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiRGVmYXVsdEl0ZW1BY3Rpb24iLCAiX3JlZiIsICJpc1N0cmluZyIsICJpY29uIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkN1c3RvbUl0ZW1BY3Rpb24iLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpc0N1c3RvbUl0ZW1BY3Rpb24iLCAiRXhwYW5kZWRJdGVtQWN0aW9ucyIsICJfcmVmIiwgIlJlYWN0IiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImRlZmF1bHRzIiwgIlBhZ2luYXRpb25CYXIiLCAiX3JlZiIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAicmVuZGVyIiwgImlzRnVuY3Rpb24iLCAiY29sdW1uIiwgIl9yZWYiLCAiX3JlZjIiLCAieCIsICJFdWlCYXNpY1RhYmxlIiwgImxpc3RlbmVyIiwgIm9uQ2hhbmdlIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJudW0iLCAic2VsZWN0aW9uIiwgImFjdGlvbkVuYWJsZWQiLCAiaXRlbSIsICJfcmVmOCIsICJQcm9wVHlwZXMiLCAiU3Vic2NyaWJhYmxlIiwgIngiLCAibm9vcCIsICJhc0FycmF5IiwgImlzUGxhaW5PYmplY3QiLCAiYiIsICJjb3B5IiwgIkZvY3VzTWFuYWdlciIsICJvbkZvY3VzIiwgImxpc3RlbmVyIiwgIk9ubGluZU1hbmFnZXIiLCAibGlzdGVuZXIiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJwYXVzZSIsICJydW4iLCAiY2FuY2VsRm4iLCAiTm90aWZ5TWFuYWdlciIsICJRdWVyeSIsICJub29wIiwgImlzU3RhbGUiLCAib25Gb2N1cyIsICJ4IiwgImZldGNoIiwgImdldCIsICJmZXRjaEZuIiwgImdldERlZmF1bHRTdGF0ZSIsICJyZWR1Y2VyIiwgIlF1ZXJ5Q2FjaGUiLCAieCIsICJnZXQiLCAib25Gb2N1cyIsICJNdXRhdGlvbiIsICJ4IiwgIm5vb3AiLCAiTXV0YXRpb25DYWNoZSIsICJ4IiwgIm9uRm9jdXMiLCAibm9vcCIsICJidWlsZE5ld1BhZ2VzIiwgInBhcmFtIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicHJvbWlzZSIsICJfbG9vcCIsICJpIiwgIlF1ZXJ5Q2xpZW50IiwgIl9yZWYiLCAiX3JlZjIiLCAibm9vcCIsICJfcmVmMyIsICJ4IiwgIlF1ZXJ5T2JzZXJ2ZXIiLCAidHJhY2tQcm9wIiwgImdldCIsICJmZXRjaCIsICJub29wIiwgIngiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJSZWFjdERPTSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJsb2dnZXIiLCAibG9nZ2VyIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUNsaWVudCIsICJRdWVyeUNsaWVudFByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ4IiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInZpc0NvbG9ycyIsICJzZWFyY2hWYWx1ZSIsICJwcmVmaXgiLCAiUmVhY3QiLCAieCIsICJvcHRpb25zIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAibiIsICJtYXRjaCIsICJiIiwgIm4yIiwgImltcG9ydF9yZWFjdF9kb20iLCAiZW50aXR5IiwgIlJlYWN0IiwgImtleXMiLCAicHJvcGVydHkiLCAiZG9tYWlucyIsICJyYW5nZXMiLCAiaXJpIiwgInYiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgInJlcXVpcmVfb2JqZWN0X2Fzc2lnbiIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJoYXNPd25Qcm9wZXJ0eSIsICJwcm9wSXNFbnVtZXJhYmxlIiwgInRvT2JqZWN0IiwgInZhbCIsICJzaG91bGRVc2VOYXRpdmUiLCAidGVzdDEiLCAidGVzdDIiLCAiaSIsICJvcmRlcjIiLCAibiIsICJ0ZXN0MyIsICJsZXR0ZXIiLCAidGFyZ2V0IiwgInNvdXJjZSIsICJmcm9tIiwgInRvIiwgInN5bWJvbHMiLCAicyIsICJrZXkiLCAicmVxdWlyZV9yZWFjdF9wcm9kdWN0aW9uX21pbiIsICJsIiwgInAiLCAicSIsICJyIiwgInQiLCAidSIsICJ2IiwgInciLCAieCIsICJ5IiwgImEiLCAieiIsICJiIiwgImMiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLCAiSiIsICJlIiwgImQiLCAiayIsICJoIiwgImciLCAiZiIsICJtIiwgIksiLCAiTCIsICJlc2NhcGUiLCAiTSIsICJOIiwgIk8iLCAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgInJlcXVpcmVfcmVhY3QiLCAicmVxdWlyZV9zY2hlZHVsZXJfcHJvZHVjdGlvbl9taW4iLCAiVSIsICJWIiwgIlciLCAicmVxdWlyZV9zY2hlZHVsZXIiLCAicmVxdWlyZV9yZWFjdF9kb21fcHJvZHVjdGlvbl9taW4iLCAiYWEiLCAiYmEiLCAiY2EiLCAiZGEiLCAiZWEiLCAiZmEiLCAiaGEiLCAiaWEiLCAiamEiLCAia2EiLCAibGEiLCAibWEiLCAibmEiLCAib2EiLCAicGEiLCAicWEiLCAicmEiLCAic2EiLCAidGEiLCAidWEiLCAid2EiLCAieGEiLCAieWEiLCAiemEiLCAiQWEiLCAiQmEiLCAiQ2EiLCAiRGEiLCAiRWEiLCAiRmEiLCAiR2EiLCAiSGEiLCAiSWEiLCAiSmEiLCAiS2EiLCAiTGEiLCAiTWEiLCAiTmEiLCAiT2EiLCAiUGEiLCAiUWEiLCAiUmEiLCAiU2EiLCAiVGEiLCAiVWEiLCAiVmEiLCAiV2EiLCAiWGEiLCAiWWEiLCAiWmEiLCAiJGEiLCAiYWIiLCAiYmIiLCAiY2IiLCAiZGIiLCAiZWIiLCAiZmIiLCAiZ2IiLCAiaGIiLCAiaWIiLCAiamIiLCAia2IiLCAibGIiLCAibWIiLCAibmIiLCAib2IiLCAicGIiLCAicWIiLCAicmIiLCAic2IiLCAidGIiLCAidWIiLCAidmIiLCAid2IiLCAieGIiLCAieWIiLCAiemIiLCAiQWIiLCAiQmIiLCAiQ2IiLCAiRGIiLCAiRWIiLCAiRmIiLCAiR2IiLCAiSGIiLCAiSWIiLCAiSmIiLCAiS2IiLCAiTGIiLCAiTWIiLCAiTmIiLCAiT2IiLCAiUGIiLCAiUWIiLCAiUmIiLCAiU2IiLCAiVGIiLCAiVWIiLCAiVmIiLCAiV2IiLCAiWGIiLCAiWWIiLCAiWmIiLCAiJGIiLCAiYWMiLCAiYmMiLCAiY2MiLCAiZGMiLCAiZWMiLCAiZmMiLCAiZ2MiLCAiaGMiLCAiaWMiLCAiamMiLCAia2MiLCAibGMiLCAibWMiLCAibmMiLCAib2MiLCAicGMiLCAicWMiLCAicmMiLCAic2MiLCAidGMiLCAidWMiLCAidmMiLCAid2MiLCAieGMiLCAieWMiLCAiemMiLCAiQWMiLCAiQmMiLCAiQ2MiLCAiRGMiLCAiRWMiLCAiRmMiLCAiR2MiLCAiSGMiLCAiSWMiLCAiSmMiLCAiS2MiLCAiTGMiLCAiTWMiLCAiTmMiLCAiT2MiLCAiUGMiLCAiUWMiLCAiUmMiLCAiU2MiLCAiVGMiLCAiVWMiLCAiVmMiLCAiV2MiLCAiWGMiLCAiWWMiLCAiWmMiLCAiJGMiLCAiYWQiLCAiYmQiLCAiY2QiLCAiZGQiLCAiZWQiLCAiZmQiLCAiZ2QiLCAiaGQiLCAiaWQiLCAiamQiLCAia2QiLCAibGQiLCAibWQiLCAibmQiLCAib2QiLCAicGQiLCAicWQiLCAicmQiLCAic2QiLCAidGQiLCAidWQiLCAidmQiLCAid2QiLCAieGQiLCAieWQiLCAiQWQiLCAiemQiLCAiQmQiLCAiQ2QiLCAiRGQiLCAiRWQiLCAiRmQiLCAiR2QiLCAiSGQiLCAiSWQiLCAiSmQiLCAiS2QiLCAiTGQiLCAiTWQiLCAiTmQiLCAiT2QiLCAiUGQiLCAiUWQiLCAiUmQiLCAiU2QiLCAiVGQiLCAiVWQiLCAiVmQiLCAiV2QiLCAiWGQiLCAiWWQiLCAiWmQiLCAiJGQiLCAiYWUiLCAiYmUiLCAiY2UiLCAiZGUiLCAiZWUiLCAiZmUiLCAiZ2UiLCAiaGUiLCAiaWUiLCAiamUiLCAia2UiLCAibGUiLCAibWUiLCAibmUiLCAib2UiLCAicGUiLCAicWUiLCAicmUiLCAic2UiLCAidGUiLCAidWUiLCAidmUiLCAid2UiLCAieWUiLCAiemUiLCAieGUiLCAiQWUiLCAiQmUiLCAiQ2UiLCAiRGUiLCAiRWUiLCAiRmUiLCAiR2UiLCAiSGUiLCAiSWUiLCAiSmUiLCAiS2UiLCAiTGUiLCAiTWUiLCAiTmUiLCAiT2UiLCAiUGUiLCAiUWUiLCAiUmUiLCAiU2UiLCAiVGUiLCAiVWUiLCAiVmUiLCAiV2UiLCAiWGUiLCAiWWUiLCAiWmUiLCAiJGUiLCAiYWYiLCAiYmYiLCAiY2YiLCAiZGYiLCAiZWYiLCAiZmYiLCAiZ2YiLCAiaGYiLCAiamYiLCAia2YiLCAibGYiLCAibWYiLCAibmYiLCAib2YiLCAicGYiLCAicWYiLCAicmYiLCAic2YiLCAidGYiLCAidWYiLCAidmYiLCAid2YiLCAieGYiLCAieWYiLCAiemYiLCAiQWYiLCAiQmYiLCAiQ2YiLCAiRGYiLCAiRWYiLCAiRmYiLCAiR2YiLCAiSGYiLCAiSWYiLCAiSmYiLCAiS2YiLCAiTGYiLCAiTWYiLCAiTmYiLCAiT2YiLCAiUGYiLCAiUWYiLCAiUmYiLCAiU2YiLCAiVGYiLCAiVWYiLCAiVmYiLCAiV2YiLCAiWGYiLCAiWWYiLCAiWmYiLCAiJGYiLCAiYWciLCAiYmciLCAiY2ciLCAiZGciLCAiZWciLCAiZmciLCAiZ2ciLCAiaGciLCAiaWciLCAiamciLCAia2ciLCAibGciLCAibWciLCAibmciLCAib2ciLCAicGciLCAicWciLCAicmciLCAic2ciLCAidGciLCAidWciLCAidmciLCAid2ciLCAieGciLCAieWciLCAiemciLCAiQWciLCAiQmciLCAiQ2ciLCAiRGciLCAiRWciLCAiRmciLCAiR2ciLCAiS2ciLCAiSGciLCAiSWciLCAiSmciLCAiTGciLCAiTWciLCAiTmciLCAiT2ciLCAiUGciLCAiUWciLCAiUmciLCAiU2ciLCAiVGciLCAiVWciLCAiVmciLCAiV2ciLCAiWGciLCAiWWciLCAiWmciLCAiJGciLCAiYWgiLCAiYmgiLCAiY2giLCAiZGgiLCAiZWgiLCAiZmgiLCAiZ2giLCAiaGgiLCAiaWgiLCAiamgiLCAia2giLCAibGgiLCAibWgiLCAibmgiLCAib2giLCAicGgiLCAicWgiLCAicmgiLCAic2giLCAidGgiLCAidWgiLCAidmgiLCAid2giLCAieGgiLCAieWgiLCAiemgiLCAiQWgiLCAiQmgiLCAiQ2giLCAiRGgiLCAiRWgiLCAiRmgiLCAiR2giLCAiSGgiLCAiSWgiLCAiSmgiLCAiS2giLCAiTGgiLCAiTWgiLCAiTmgiLCAiT2giLCAiUGgiLCAiUWgiLCAiUmgiLCAiU2giLCAiVGgiLCAiVWgiLCAiVmgiLCAiV2giLCAiWGgiLCAiWWgiLCAiWmgiLCAiJGgiLCAiYWkiLCAiYmkiLCAiY2kiLCAiZGkiLCAiZWkiLCAiZmkiLCAiZ2kiLCAiaGkiLCAiaWkiLCAiamkiLCAia2kiLCAibGkiLCAibWkiLCAibmkiLCAib2kiLCAicGkiLCAicWkiLCAicmkiLCAic2kiLCAidGkiLCAidWkiLCAidmkiLCAid2kiLCAieGkiLCAieWkiLCAiemkiLCAiQWkiLCAiQmkiLCAiQ2kiLCAiRGkiLCAiRWkiLCAiRmkiLCAiR2kiLCAiSGkiLCAiSWkiLCAiSmkiLCAiS2kiLCAiTGkiLCAiTWkiLCAiTmkiLCAiT2kiLCAiUGkiLCAiUWkiLCAiUmkiLCAiU2kiLCAiVGkiLCAiVWkiLCAiVmkiLCAiV2kiLCAiWGkiLCAiWWkiLCAiWmkiLCAiJGkiLCAiYWoiLCAiYmoiLCAiY2oiLCAiZGoiLCAiZWoiLCAiZmoiLCAiZ2oiLCAiaGoiLCAiaWoiLCAiamoiLCAia2oiLCAibGoiLCAibWoiLCAibmoiLCAib2oiLCAicGoiLCAiWCIsICJZIiwgInFqIiwgInJqIiwgInNqIiwgInRqIiwgInVqIiwgInZqIiwgIndqIiwgIloiLCAieGoiLCAieWoiLCAiemoiLCAiQWoiLCAiQmoiLCAiQ2oiLCAiRGoiLCAiRWoiLCAiRmoiLCAiR2oiLCAiSGoiLCAiSWoiLCAiSmoiLCAiS2oiLCAiTGoiLCAiTWoiLCAiTmoiLCAiT2oiLCAiUGoiLCAiUWoiLCAiUmoiLCAiU2oiLCAiVGoiLCAiVWoiLCAiVmoiLCAiV2oiLCAiWGoiLCAiWWoiLCAiWmoiLCAidmEiLCAiYWsiLCAiYmsiLCAiY2siLCAiZGsiLCAiZWsiLCAiZmsiLCAiZ2siLCAiaGsiLCAiaWsiLCAiamsiLCAia2siLCAibGsiLCAibWsiLCAibmsiLCAib2siLCAicGsiLCAicWsiLCAicmsiLCAic2siLCAidGsiLCAidWsiLCAidmsiLCAid2siLCAieGsiLCAieWsiLCAicmVxdWlyZV9yZWFjdF9kb20iLCAiY2hlY2tEQ0UiLCAiZXJyIiwgInJlcXVpcmVfdXNlX3N5bmNfZXh0ZXJuYWxfc3RvcmVfc2hpbV9wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3NoaW0iLCAicmVxdWlyZV93aXRoX3NlbGVjdG9yX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfd2l0aF9zZWxlY3RvciIsICJfZXh0ZW5kcyIsICJpbml0X2V4dGVuZHMiLCAiX19lc21NaW4iLCAicmVxdWlyZV9yZWFjdF9pc19wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3JlYWN0X2lzIiwgInJlcXVpcmVfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfY2pzIiwgInJlYWN0SXMiLCAiUkVBQ1RfU1RBVElDUyIsICJLTk9XTl9TVEFUSUNTIiwgIkZPUldBUkRfUkVGX1NUQVRJQ1MiLCAiTUVNT19TVEFUSUNTIiwgIlRZUEVfU1RBVElDUyIsICJnZXRTdGF0aWNzIiwgImNvbXBvbmVudCIsICJkZWZpbmVQcm9wZXJ0eSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJnZXRQcm90b3R5cGVPZiIsICJvYmplY3RQcm90b3R5cGUiLCAiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCAidGFyZ2V0Q29tcG9uZW50IiwgInNvdXJjZUNvbXBvbmVudCIsICJibGFja2xpc3QiLCAiaW5oZXJpdGVkQ29tcG9uZW50IiwgImtleXMiLCAidGFyZ2V0U3RhdGljcyIsICJzb3VyY2VTdGF0aWNzIiwgImRlc2NyaXB0b3IiLCAicmVxdWlyZV9tdWx0aW1hcCIsICJtYXBFYWNoIiwgIm1hcCIsICJvcGVyYXRpb24iLCAibmV4dCIsICJNdWx0aW1hcCIsICJtYXBDdG9yIiwgIml0ZW0iLCAiaXRlcmFibGUiLCAic2VsZiIsICJhcmdzIiwgImVudHJ5IiwgImlkeCIsICJoYXNLZXkiLCAibWFrZUl0ZXJhdG9yIiwgInZhbHMiLCAiaXRlciIsICJ0b3RhbCIsICJ2YWx1ZSIsICJzYWZhcmlOZXh0IiwgIml0ZXJhdG9yIiwgIm5leHRJbmRleCIsICJzaGVldEZvclRhZyIsICJ0YWciLCAiY3JlYXRlU3R5bGVFbGVtZW50IiwgIm9wdGlvbnMiLCAiU3R5bGVTaGVldCIsICJpbml0X2Vtb3Rpb25fc2hlZXRfYnJvd3Nlcl9lc20iLCAiX3RoaXMiLCAiYmVmb3JlIiwgIl9wcm90byIsICJub2RlcyIsICJydWxlIiwgImlzSW1wb3J0UnVsZSIsICJzaGVldCIsICJNUyIsICJNT1oiLCAiV0VCS0lUIiwgIkNPTU1FTlQiLCAiUlVMRVNFVCIsICJERUNMQVJBVElPTiIsICJJTVBPUlQiLCAiS0VZRlJBTUVTIiwgIkxBWUVSIiwgImluaXRfRW51bSIsICJoYXNoIiwgImxlbmd0aCIsICJjaGFyYXQiLCAidHJpbSIsICJtYXRjaCIsICJwYXR0ZXJuIiwgInJlcGxhY2UiLCAicmVwbGFjZW1lbnQiLCAiaW5kZXhvZiIsICJzZWFyY2giLCAiaW5kZXgiLCAic3Vic3RyIiwgImJlZ2luIiwgImVuZCIsICJzdHJsZW4iLCAic2l6ZW9mIiwgImFwcGVuZCIsICJhcnJheSIsICJjb21iaW5lIiwgImNhbGxiYWNrIiwgImFicyIsICJhc3NpZ24iLCAiaW5pdF9VdGlsaXR5IiwgIm5vZGUiLCAicm9vdCIsICJwYXJlbnQiLCAidHlwZSIsICJwcm9wcyIsICJjaGlsZHJlbiIsICJsaW5lIiwgImNvbHVtbiIsICJjb3B5IiwgImNoYXIiLCAiY2hhcmFjdGVyIiwgInByZXYiLCAicG9zaXRpb24iLCAiY2hhcmFjdGVycyIsICJwZWVrIiwgImNhcmV0IiwgInNsaWNlIiwgInRva2VuIiwgImFsbG9jIiwgImRlYWxsb2MiLCAiZGVsaW1pdCIsICJkZWxpbWl0ZXIiLCAid2hpdGVzcGFjZSIsICJlc2NhcGluZyIsICJjb3VudCIsICJjb21tZW50ZXIiLCAiaWRlbnRpZmllciIsICJpbml0X1Rva2VuaXplciIsICJjb21waWxlIiwgInBhcnNlIiwgInJ1bGVzIiwgInJ1bGVzZXRzIiwgInBzZXVkbyIsICJwb2ludHMiLCAiZGVjbGFyYXRpb25zIiwgIm9mZnNldCIsICJhdHJ1bGUiLCAicHJvcGVydHkiLCAicHJldmlvdXMiLCAidmFyaWFibGUiLCAic2Nhbm5pbmciLCAiYW1wZXJzYW5kIiwgInJlZmVyZW5jZSIsICJjb21tZW50IiwgImRlY2xhcmF0aW9uIiwgInJ1bGVzZXQiLCAicG9zdCIsICJzaXplIiwgImoiLCAiaW5pdF9QYXJzZXIiLCAiaW5pdF9QcmVmaXhlciIsICJzZXJpYWxpemUiLCAib3V0cHV0IiwgInN0cmluZ2lmeSIsICJlbGVtZW50IiwgImluaXRfU2VyaWFsaXplciIsICJtaWRkbGV3YXJlIiwgImNvbGxlY3Rpb24iLCAicnVsZXNoZWV0IiwgImluaXRfTWlkZGxld2FyZSIsICJpbml0X3N0eWxpcyIsICJ3ZWFrTWVtb2l6ZSIsICJpbml0X2Vtb3Rpb25fd2Vha19tZW1vaXplX2VzbSIsICJmdW5jIiwgImNhY2hlIiwgImFyZyIsICJyZXQiLCAibWVtb2l6ZSIsICJmbiIsICJpbml0X2Vtb3Rpb25fbWVtb2l6ZV9lc20iLCAiZW1vdGlvbl9jYWNoZV9icm93c2VyX2VzbV9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNyZWF0ZUNhY2hlIiwgInByZWZpeCIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJmaXhlZEVsZW1lbnRzIiwgImNvbXBhdCIsICJyZW1vdmVMYWJlbCIsICJwcmVmaXhlciIsICJkZWZhdWx0U3R5bGlzUGx1Z2lucyIsICJpbml0X2Vtb3Rpb25fY2FjaGVfYnJvd3Nlcl9lc20iLCAicGFyc2VkIiwgImlzSW1wbGljaXRSdWxlIiwgInBhcmVudFJ1bGVzIiwgInNzclN0eWxlcyIsICJkYXRhRW1vdGlvbkF0dHJpYnV0ZSIsICJzdHlsaXNQbHVnaW5zIiwgImluc2VydGVkIiwgImNvbnRhaW5lciIsICJub2Rlc1RvSHlkcmF0ZSIsICJhdHRyaWIiLCAiX2luc2VydCIsICJvbW5pcHJlc2VudFBsdWdpbnMiLCAiY3VycmVudFNoZWV0IiwgImZpbmFsaXppbmdQbHVnaW5zIiwgInNlcmlhbGl6ZXIiLCAic3R5bGlzIiwgInN0eWxlcyIsICJzZWxlY3RvciIsICJzZXJpYWxpemVkIiwgInNob3VsZENhY2hlIiwgImltcG9ydF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljcyIsICJpbml0X2Vtb3Rpb25fcmVhY3RfaXNvbGF0ZWRfaG5yc19icm93c2VyX2VzbSIsICJob2lzdE5vblJlYWN0U3RhdGljcyQxIiwgImdldFJlZ2lzdGVyZWRTdHlsZXMiLCAicmVnaXN0ZXJlZCIsICJyZWdpc3RlcmVkU3R5bGVzIiwgImNsYXNzTmFtZXMiLCAicmF3Q2xhc3NOYW1lIiwgImNsYXNzTmFtZSIsICJpc0Jyb3dzZXIiLCAicmVnaXN0ZXJTdHlsZXMiLCAiaW5zZXJ0U3R5bGVzIiwgImluaXRfZW1vdGlvbl91dGlsc19icm93c2VyX2VzbSIsICJpc1N0cmluZ1RhZyIsICJjdXJyZW50IiwgIm11cm11cjIiLCAic3RyIiwgImxlbiIsICJpbml0X2Vtb3Rpb25faGFzaF9lc20iLCAidW5pdGxlc3NLZXlzIiwgImluaXRfZW1vdGlvbl91bml0bGVzc19lc20iLCAiaGFuZGxlSW50ZXJwb2xhdGlvbiIsICJtZXJnZWRQcm9wcyIsICJpbnRlcnBvbGF0aW9uIiwgImN1cnNvciIsICJjcmVhdGVTdHJpbmdGcm9tT2JqZWN0IiwgInByZXZpb3VzQ3Vyc29yIiwgInJlc3VsdCIsICJtYXRjaGVkIiwgInJlcGxhY2VkIiwgImNhY2hlZCIsICJvYmoiLCAic3RyaW5nIiwgIl9rZXkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZU5hbWUiLCAicHJvY2Vzc1N0eWxlVmFsdWUiLCAiX2kiLCAiaW50ZXJwb2xhdGVkIiwgImh5cGhlbmF0ZVJlZ2V4IiwgImFuaW1hdGlvblJlZ2V4IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAibGFiZWxQYXR0ZXJuIiwgInNlcmlhbGl6ZVN0eWxlcyIsICJpbml0X2Vtb3Rpb25fc2VyaWFsaXplX2Jyb3dzZXJfZXNtIiwgInN0eWxlTmFtZSIsICJwMSIsICJwMiIsICJzdHJpbmdNb2RlIiwgInN0cmluZ3MiLCAic291cmNlTWFwIiwgImlkZW50aWZpZXJOYW1lIiwgIm5hbWUiLCAiUmVhY3QiLCAic3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJ1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayIsICJpbml0X2Vtb3Rpb25fdXNlX2luc2VydGlvbl9lZmZlY3Rfd2l0aF9mYWxsYmFja3NfYnJvd3Nlcl9lc20iLCAiY3JlYXRlIiwgIndpdGhUaGVtZSIsICJDb21wb25lbnQiLCAiY29tcG9uZW50TmFtZSIsICJyZW5kZXIiLCAicmVmIiwgInRoZW1lIiwgIlRoZW1lQ29udGV4dCIsICJXaXRoVGhlbWUiLCAiaW1wb3J0X3JlYWN0IiwgImhhc093biIsICJFbW90aW9uQ2FjaGVDb250ZXh0IiwgIkNhY2hlUHJvdmlkZXIiLCAiX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIiwgIndpdGhFbW90aW9uQ2FjaGUiLCAidXNlVGhlbWUiLCAiZ2V0VGhlbWUiLCAiY3JlYXRlQ2FjaGVXaXRoVGhlbWUiLCAiVGhlbWVQcm92aWRlciIsICJ0eXBlUHJvcE5hbWUiLCAiY3JlYXRlRW1vdGlvblByb3BzIiwgIkluc2VydGlvbiIsICJFbW90aW9uIiwgIkVtb3Rpb24kMSIsICJpbml0X2Vtb3Rpb25fZWxlbWVudF80M2M2ZmVhMF9icm93c2VyX2VzbSIsICJvdXRlclRoZW1lIiwgIm1lcmdlZFRoZW1lIiwgIm5ld1Byb3BzIiwgImxhYmVsIiwgIl9yZWYiLCAiY3NzUHJvcCIsICJXcmFwcGVkQ29tcG9uZW50IiwgImxhYmVsRnJvbVN0YWNrIiwgImVtb3Rpb25fcmVhY3RfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJDbGFzc05hbWVzIiwgIkdsb2JhbCIsICJqc3giLCAiY3NzIiwgImtleWZyYW1lcyIsICJfbGVuIiwgIm1lcmdlIiwgImNsYXNzbmFtZXMiLCAiaW5pdF9lbW90aW9uX3JlYWN0X2Jyb3dzZXJfZXNtIiwgImFyZ3NMZW5ndGgiLCAiY3JlYXRlRWxlbWVudEFyZ0FycmF5IiwgInNlcmlhbGl6ZWROYW1lcyIsICJzZXJpYWxpemVkU3R5bGVzIiwgInNoZWV0UmVmIiwgInJlaHlkcmF0aW5nIiwgInNoZWV0UmVmQ3VycmVudCIsICJpbnNlcnRhYmxlIiwgImNscyIsICJ0b0FkZCIsICJzZXJpYWxpemVkQXJyIiwgImhhc1JlbmRlcmVkIiwgImN4IiwgIl9sZW4yIiwgIl9rZXkyIiwgImNvbnRlbnQiLCAiZWxlIiwgInJlcXVpcmVfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwgIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCAicmVxdWlyZV9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwgImNvZGUiLCAidXJsIiwgIl9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAicmVhY3RQcm9wc1JlZ2V4IiwgImlzUHJvcFZhbGlkIiwgImluaXRfZW1vdGlvbl9pc19wcm9wX3ZhbGlkX2VzbSIsICJwcm9wIiwgInRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyIsICJ0ZXN0T21pdFByb3BzT25Db21wb25lbnQiLCAiZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wIiwgImNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMiLCAiY3JlYXRlU3R5bGVkIiwgImluaXRfZW1vdGlvbl9zdHlsZWRfYmFzZV9icm93c2VyX2VzbSIsICJpc1JlYWwiLCAic2hvdWxkRm9yd2FyZFByb3AiLCAib3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wIiwgInByb3BOYW1lIiwgImJhc2VUYWciLCAidGFyZ2V0Q2xhc3NOYW1lIiwgImRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCIsICJzaG91bGRVc2VBcyIsICJTdHlsZWQiLCAiRmluYWxUYWciLCAiY2xhc3NJbnRlcnBvbGF0aW9ucyIsICJmaW5hbFNob3VsZEZvcndhcmRQcm9wIiwgIm5leHRUYWciLCAibmV4dE9wdGlvbnMiLCAiZW1vdGlvbl9zdHlsZWRfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJuZXdTdHlsZWQiLCAidGFncyIsICJpbml0X2Vtb3Rpb25fc3R5bGVkX2Jyb3dzZXJfZXNtIiwgInRhZ05hbWUiLCAicmVxdWlyZV9SZWFjdFByb3BUeXBlc1NlY3JldCIsICJSZWFjdFByb3BUeXBlc1NlY3JldCIsICJyZXF1aXJlX2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcyIsICJlbXB0eUZ1bmN0aW9uIiwgImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCAic2hpbSIsICJsb2NhdGlvbiIsICJwcm9wRnVsbE5hbWUiLCAic2VjcmV0IiwgImdldFNoaW0iLCAiUmVhY3RQcm9wVHlwZXMiLCAicmVxdWlyZV9wcm9wX3R5cGVzIiwgIlJlYWN0SXMiLCAidGhyb3dPbkRpcmVjdEFjY2VzcyIsICJyZXF1aXJlX3JlYWN0X2pzeF9ydW50aW1lX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfanN4X3J1bnRpbWUiLCAicmVxdWlyZV9TdHlsZWRFbmdpbmVQcm92aWRlciIsICJTdHlsZWRFbmdpbmVQcm92aWRlciIsICJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsICJfcHJvcFR5cGVzIiwgIl9yZWFjdDIiLCAiX2NhY2hlIiwgIl9qc3hSdW50aW1lIiwgIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsICJpbmplY3RGaXJzdCIsICJfU3R5bGVkRW5naW5lUHJvdmlkZXIiLCAicmVxdWlyZV9HbG9iYWxTdHlsZXMiLCAiR2xvYmFsU3R5bGVzIiwgImlzRW1wdHkiLCAiZGVmYXVsdFRoZW1lIiwgImdsb2JhbFN0eWxlcyIsICJ0aGVtZUlucHV0IiwgIl9HbG9iYWxTdHlsZXMiLCAicmVxdWlyZV9ub2RlIiwgIl9yZWFjdCIsICJzdHlsZWQiLCAiX3N0eWxlZCIsICJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwgInByb2Nlc3NvciIsICJyZXF1aXJlX2V4dGVuZHMiLCAicmVxdWlyZV9kZWVwbWVyZ2UiLCAiZGVlcG1lcmdlIiwgImlzUGxhaW5PYmplY3QiLCAiX2V4dGVuZHMyIiwgInByb3RvdHlwZSIsICJkZWVwQ2xvbmUiLCAiX2V4cG9ydE5hbWVzIiwgIl9kZWVwbWVyZ2UiLCAidjEiLCAicmVxdWlyZV9jYXBpdGFsaXplIiwgImNhcGl0YWxpemUiLCAiX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIiLCAiX2NhcGl0YWxpemUiLCAicmVxdWlyZV9nZXREaXNwbGF5TmFtZSIsICJnZXREaXNwbGF5TmFtZSIsICJnZXRGdW5jdGlvbk5hbWUiLCAiX3JlYWN0SXMiLCAiZm5OYW1lTWF0Y2hSZWdleCIsICJnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUiLCAiZmFsbGJhY2siLCAiZ2V0V3JhcHBlZE5hbWUiLCAib3V0ZXJUeXBlIiwgImlubmVyVHlwZSIsICJ3cmFwcGVyTmFtZSIsICJmdW5jdGlvbk5hbWUiLCAiX2dldERpc3BsYXlOYW1lIiwgInJlcXVpcmVfY2xhbXAiLCAiY2xhbXAiLCAibWluIiwgIm1heCIsICJfZGVmYXVsdCIsICJfY2xhbXAiLCAicmVxdWlyZV9tZXJnZSIsICJhY2MiLCAicmVxdWlyZV9yZXNwb25zaXZlUHJvcFR5cGUiLCAicmVzcG9uc2l2ZVByb3BUeXBlIiwgInJlcXVpcmVfYnJlYWtwb2ludHMiLCAiY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSIsICJjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QiLCAiaGFuZGxlQnJlYWtwb2ludHMiLCAibWVyZ2VCcmVha3BvaW50c0luT3JkZXIiLCAicmVtb3ZlVW51c2VkQnJlYWtwb2ludHMiLCAicmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMiLCAiX21lcmdlIiwgInZhbHVlcyIsICJkZWZhdWx0QnJlYWtwb2ludHMiLCAicHJvcFZhbHVlIiwgInN0eWxlRnJvbVByb3BWYWx1ZSIsICJ0aGVtZUJyZWFrcG9pbnRzIiwgImJyZWFrcG9pbnQiLCAibWVkaWFLZXkiLCAiY3NzS2V5IiwgImJyZWFrcG9pbnRzIiwgInN0eWxlRnVuY3Rpb24iLCAibmV3U3R5bGVGdW5jdGlvbiIsICJiYXNlIiwgImV4dGVuZGVkIiwgImJyZWFrcG9pbnRzSW5wdXQiLCAiX2JyZWFrcG9pbnRzSW5wdXQka2V5IiwgImJyZWFrcG9pbnRTdHlsZUtleSIsICJicmVha3BvaW50S2V5cyIsICJzdHlsZSIsICJicmVha3BvaW50T3V0cHV0IiwgImVtcHR5QnJlYWtwb2ludHMiLCAibWVyZ2VkT3V0cHV0IiwgImJyZWFrcG9pbnRWYWx1ZXMiLCAiYnJlYWtwb2ludHNLZXlzIiwgImN1c3RvbUJhc2UiLCAicmVxdWlyZV9zdHlsZSIsICJnZXRQYXRoIiwgImdldFN0eWxlVmFsdWUiLCAiX3Jlc3BvbnNpdmVQcm9wVHlwZSIsICJfYnJlYWtwb2ludHMiLCAicGF0aCIsICJjaGVja1ZhcnMiLCAidGhlbWVNYXBwaW5nIiwgInRyYW5zZm9ybSIsICJwcm9wVmFsdWVGaW5hbCIsICJ1c2VyVmFsdWUiLCAiY3NzUHJvcGVydHkiLCAidGhlbWVLZXkiLCAicmVxdWlyZV9tZW1vaXplIiwgInJlcXVpcmVfc3BhY2luZyIsICJjcmVhdGVVbmFyeVNwYWNpbmciLCAiY3JlYXRlVW5hcnlVbml0IiwgImdldFN0eWxlRnJvbVByb3BWYWx1ZSIsICJnZXRWYWx1ZSIsICJtYXJnaW4iLCAicGFkZGluZyIsICJfc3R5bGUiLCAiX21lbW9pemUiLCAicHJvcGVydGllcyIsICJkaXJlY3Rpb25zIiwgImFsaWFzZXMiLCAiZ2V0Q3NzUHJvcGVydGllcyIsICJkaXJlY3Rpb24iLCAiZGlyIiwgIm1hcmdpbktleXMiLCAicGFkZGluZ0tleXMiLCAic3BhY2luZ0tleXMiLCAiZGVmYXVsdFZhbHVlIiwgIl9nZXRQYXRoIiwgInRoZW1lU3BhY2luZyIsICJ0cmFuc2Zvcm1lciIsICJ0cmFuc2Zvcm1lZCIsICJjc3NQcm9wZXJ0aWVzIiwgInJlc29sdmVDc3NQcm9wZXJ0eSIsICJzcGFjaW5nIiwgInJlcXVpcmVfY29tcG9zZSIsICJjb21wb3NlIiwgImhhbmRsZXJzIiwgInJlcXVpcmVfYm9yZGVycyIsICJib3JkZXJUcmFuc2Zvcm0iLCAiX2NvbXBvc2UiLCAiX3NwYWNpbmciLCAiY3JlYXRlQm9yZGVyU3R5bGUiLCAiYm9yZGVyIiwgImJvcmRlclRvcCIsICJib3JkZXJSaWdodCIsICJib3JkZXJCb3R0b20iLCAiYm9yZGVyTGVmdCIsICJib3JkZXJDb2xvciIsICJib3JkZXJUb3BDb2xvciIsICJib3JkZXJSaWdodENvbG9yIiwgImJvcmRlckJvdHRvbUNvbG9yIiwgImJvcmRlckxlZnRDb2xvciIsICJvdXRsaW5lIiwgIm91dGxpbmVDb2xvciIsICJib3JkZXJSYWRpdXMiLCAiYm9yZGVycyIsICJyZXF1aXJlX2Nzc0dyaWQiLCAiZ2FwIiwgImNvbHVtbkdhcCIsICJyb3dHYXAiLCAiZ3JpZENvbHVtbiIsICJncmlkUm93IiwgImdyaWRBdXRvRmxvdyIsICJncmlkQXV0b0NvbHVtbnMiLCAiZ3JpZEF1dG9Sb3dzIiwgImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCAiZ3JpZFRlbXBsYXRlUm93cyIsICJncmlkVGVtcGxhdGVBcmVhcyIsICJncmlkQXJlYSIsICJncmlkIiwgInJlcXVpcmVfcGFsZXR0ZSIsICJwYWxldHRlVHJhbnNmb3JtIiwgImNvbG9yIiwgImJnY29sb3IiLCAiYmFja2dyb3VuZENvbG9yIiwgInBhbGV0dGUiLCAicmVxdWlyZV9zaXppbmciLCAic2l6aW5nVHJhbnNmb3JtIiwgIndpZHRoIiwgIm1heFdpZHRoIiwgIl9wcm9wcyR0aGVtZSIsICJfcHJvcHMkdGhlbWUyIiwgIm1pbldpZHRoIiwgImhlaWdodCIsICJtYXhIZWlnaHQiLCAibWluSGVpZ2h0IiwgInNpemVXaWR0aCIsICJzaXplSGVpZ2h0IiwgImJveFNpemluZyIsICJzaXppbmciLCAicmVxdWlyZV9kZWZhdWx0U3hDb25maWciLCAiX2JvcmRlcnMiLCAiX2Nzc0dyaWQiLCAiX3BhbGV0dGUiLCAiX3NpemluZyIsICJkZWZhdWx0U3hDb25maWciLCAicmVxdWlyZV9zdHlsZUZ1bmN0aW9uU3giLCAidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4IiwgIl9kZWZhdWx0U3hDb25maWciLCAib2JqZWN0c0hhdmVTYW1lS2V5cyIsICJvYmplY3RzIiwgImFsbEtleXMiLCAib2JqZWN0IiwgInVuaW9uIiwgImNhbGxJZkZuIiwgIm1heWJlRm4iLCAiZ2V0VGhlbWVWYWx1ZSIsICJjb25maWciLCAic3R5bGVGdW5jdGlvblN4IiwgIl90aGVtZSR1bnN0YWJsZV9zeENvbiIsICJzeCIsICJ0cmF2ZXJzZSIsICJzeElucHV0IiwgInN4T2JqZWN0IiwgInN0eWxlS2V5IiwgImJyZWFrcG9pbnRzVmFsdWVzIiwgInJlcXVpcmVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJleGNsdWRlZCIsICJzb3VyY2VLZXlzIiwgInJlcXVpcmVfZXh0ZW5kU3hQcm9wIiwgImV4dGVuZFN4UHJvcCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIiLCAiX2V4Y2x1ZGVkIiwgInNwbGl0UHJvcHMiLCAiX3Byb3BzJHRoZW1lJHVuc3RhYmxlIiwgImluU3giLCAib3RoZXIiLCAic3lzdGVtUHJvcHMiLCAib3RoZXJQcm9wcyIsICJmaW5hbFN4IiwgIl9zdHlsZUZ1bmN0aW9uU3giLCAiX2V4dGVuZFN4UHJvcCIsICJyZXF1aXJlX2NyZWF0ZUJyZWFrcG9pbnRzIiwgImNyZWF0ZUJyZWFrcG9pbnRzIiwgInNvcnRCcmVha3BvaW50c1ZhbHVlcyIsICJicmVha3BvaW50c0FzQXJyYXkiLCAiYnJlYWtwb2ludDEiLCAiYnJlYWtwb2ludDIiLCAidW5pdCIsICJzdGVwIiwgInNvcnRlZFZhbHVlcyIsICJ1cCIsICJkb3duIiwgImJldHdlZW4iLCAic3RhcnQiLCAiZW5kSW5kZXgiLCAib25seSIsICJub3QiLCAia2V5SW5kZXgiLCAicmVxdWlyZV9zaGFwZSIsICJzaGFwZSIsICJyZXF1aXJlX2NyZWF0ZVNwYWNpbmciLCAiY3JlYXRlU3BhY2luZyIsICJzcGFjaW5nSW5wdXQiLCAiYXJnc0lucHV0IiwgImFyZ3VtZW50IiwgInJlcXVpcmVfYXBwbHlTdHlsZXMiLCAiYXBwbHlTdHlsZXMiLCAicmVxdWlyZV9jcmVhdGVUaGVtZSIsICJfY3JlYXRlQnJlYWtwb2ludHMiLCAiX3NoYXBlIiwgIl9jcmVhdGVTcGFjaW5nIiwgIl9hcHBseVN0eWxlcyIsICJjcmVhdGVUaGVtZSIsICJwYWxldHRlSW5wdXQiLCAic2hhcGVJbnB1dCIsICJtdWlUaGVtZSIsICJfY3JlYXRlVGhlbWUiLCAicmVxdWlyZV9jb2xvck1hbmlwdWxhdG9yIiwgImFscGhhIiwgImJsZW5kIiwgImRhcmtlbiIsICJkZWNvbXBvc2VDb2xvciIsICJlbXBoYXNpemUiLCAiZ2V0Q29udHJhc3RSYXRpbyIsICJnZXRMdW1pbmFuY2UiLCAiaGV4VG9SZ2IiLCAiaHNsVG9SZ2IiLCAibGlnaHRlbiIsICJwcml2YXRlX3NhZmVBbHBoYSIsICJwcml2YXRlX3NhZmVEYXJrZW4iLCAicHJpdmF0ZV9zYWZlRW1waGFzaXplIiwgInByaXZhdGVfc2FmZUxpZ2h0ZW4iLCAicmVjb21wb3NlQ29sb3IiLCAicmdiVG9IZXgiLCAiY2xhbXBXcmFwcGVyIiwgImNvbG9ycyIsICJpbnRUb0hleCIsICJpbnQiLCAiaGV4IiwgIm1hcmtlciIsICJjb2xvclNwYWNlIiwgImNvbG9yQ2hhbm5lbCIsICJkZWNvbXBvc2VkQ29sb3IiLCAicHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsIiwgIndhcm5pbmciLCAicmdiIiwgImZvcmVncm91bmQiLCAiYmFja2dyb3VuZCIsICJsdW1BIiwgImx1bUIiLCAiY29lZmZpY2llbnQiLCAib3ZlcmxheSIsICJvcGFjaXR5IiwgImdhbW1hIiwgImJsZW5kQ2hhbm5lbCIsICJvIiwgIm92ZXJsYXlDb2xvciIsICJyZXF1aXJlX2NyZWF0ZVN0eWxlZCIsICJfc3R5bGVkRW5naW5lIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJzeXN0ZW1EZWZhdWx0VGhlbWUiLCAibG93ZXJjYXNlRmlyc3RMZXR0ZXIiLCAicmVzb2x2ZVRoZW1lIiwgInRoZW1lSWQiLCAiZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyIiwgInNsb3QiLCAicHJvY2Vzc1N0eWxlQXJnIiwgImNhbGxhYmxlU3R5bGUiLCAib3duZXJTdGF0ZSIsICJyZXNvbHZlZFN0eWxlc0FyZyIsICJyZXNvbHZlZFN0eWxlIiwgInZhcmlhbnRzIiwgInZhcmlhbnQiLCAiaXNNYXRjaCIsICJpbnB1dCIsICJyb290U2hvdWxkRm9yd2FyZFByb3AiLCAic2xvdFNob3VsZEZvcndhcmRQcm9wIiwgInN5c3RlbVN4IiwgImlucHV0T3B0aW9ucyIsICJjb21wb25lbnRTbG90IiwgImlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCAiaW5wdXRTa2lwU3giLCAib3ZlcnJpZGVzUmVzb2x2ZXIiLCAic2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCAic2tpcFN4IiwgInNob3VsZEZvcndhcmRQcm9wT3B0aW9uIiwgImRlZmF1bHRTdHlsZWRSZXNvbHZlciIsICJ0cmFuc2Zvcm1TdHlsZUFyZyIsICJzdHlsZXNBcmciLCAibXVpU3R5bGVkUmVzb2x2ZXIiLCAic3R5bGVBcmciLCAiZXhwcmVzc2lvbnMiLCAidHJhbnNmb3JtZWRTdHlsZUFyZyIsICJleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUiLCAic3R5bGVPdmVycmlkZXMiLCAicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsICJzbG90S2V5IiwgInNsb3RTdHlsZSIsICJfdGhlbWUkY29tcG9uZW50cyIsICJ0aGVtZVZhcmlhbnRzIiwgIm51bU9mQ3VzdG9tRm5zQXBwbGllZCIsICJwbGFjZWhvbGRlcnMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfc2hpbSIsICJpbXBvcnRfd2l0aF9zZWxlY3RvciIsICJkZWZhdWx0Tm9vcEJhdGNoIiwgImJhdGNoIiwgInNldEJhdGNoIiwgIm5ld0JhdGNoIiwgImdldEJhdGNoIiwgIkNvbnRleHRLZXkiLCAiZ1QiLCAiZ2V0Q29udGV4dCIsICJfZ1QkQ29udGV4dEtleSIsICJjb250ZXh0TWFwIiwgInJlYWxDb250ZXh0IiwgIlJlYWN0UmVkdXhDb250ZXh0IiwgImNyZWF0ZVJlZHV4Q29udGV4dEhvb2siLCAiY29udGV4dCIsICJ1c2VSZWR1eENvbnRleHQiLCAibm90SW5pdGlhbGl6ZWQiLCAidXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IiLCAiaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIiwgInJlZkVxdWFsaXR5IiwgImNyZWF0ZVNlbGVjdG9ySG9vayIsICJlcXVhbGl0eUZuT3JPcHRpb25zIiwgImVxdWFsaXR5Rm4iLCAic3RhYmlsaXR5Q2hlY2siLCAibm9vcENoZWNrIiwgInN0b3JlIiwgInN1YnNjcmlwdGlvbiIsICJnZXRTZXJ2ZXJTdGF0ZSIsICJnbG9iYWxTdGFiaWxpdHlDaGVjayIsICJnbG9iYWxOb29wQ2hlY2siLCAiZmlyc3RSdW4iLCAid3JhcHBlZFNlbGVjdG9yIiwgInN0YXRlIiwgInNlbGVjdGVkIiwgImZpbmFsU3RhYmlsaXR5Q2hlY2siLCAidG9Db21wYXJlIiwgImZpbmFsTm9vcENoZWNrIiwgInNlbGVjdGVkU3RhdGUiLCAidXNlU2VsZWN0b3IiLCAiaW1wb3J0X3JlYWN0X2lzIiwgImNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbiIsICJmaXJzdCIsICJsYXN0IiwgImxpc3RlbmVyIiwgImxpc3RlbmVycyIsICJpc1N1YnNjcmliZWQiLCAibnVsbExpc3RlbmVycyIsICJjcmVhdGVTdWJzY3JpcHRpb24iLCAicGFyZW50U3ViIiwgInVuc3Vic2NyaWJlIiwgInN1YnNjcmlwdGlvbnNBbW91bnQiLCAic2VsZlN1YnNjcmliZWQiLCAiYWRkTmVzdGVkU3ViIiwgInRyeVN1YnNjcmliZSIsICJjbGVhbnVwTGlzdGVuZXIiLCAicmVtb3ZlZCIsICJ0cnlVbnN1YnNjcmliZSIsICJub3RpZnlOZXN0ZWRTdWJzIiwgImhhbmRsZUNoYW5nZVdyYXBwZXIiLCAidHJ5U3Vic2NyaWJlU2VsZiIsICJ0cnlVbnN1YnNjcmliZVNlbGYiLCAiY2FuVXNlRE9NIiwgInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCAidXNlU3luY0V4dGVybmFsU3RvcmUiLCAiaW5pdGlhbGl6ZUNvbm5lY3QiLCAiUHJvdmlkZXIiLCAic2VydmVyU3RhdGUiLCAiY29udGV4dFZhbHVlIiwgInByZXZpb3VzU3RhdGUiLCAiUHJvdmlkZXJfZGVmYXVsdCIsICJjcmVhdGVTdG9yZUhvb2siLCAidXNlU3RvcmUiLCAiY3JlYXRlRGlzcGF0Y2hIb29rIiwgInVzZURpc3BhdGNoIiwgInVzZUFwcERpc3BhdGNoIiwgInVzZUFwcFNlbGVjdG9yIiwgImRpZSIsICJlcnJvciIsICJtc2ciLCAiRXJyb3IiLCAiam9pbiIsICJpc0RyYWZ0IiwgIkRSQUZUX1NUQVRFIiwgImlzRHJhZnRhYmxlIiwgInByb3RvIiwgIk9iamVjdCIsICJDdG9yIiwgImNhbGwiLCAiY29uc3RydWN0b3IiLCAiRnVuY3Rpb24iLCAidG9TdHJpbmciLCAib2JqZWN0Q3RvclN0cmluZyIsICJBcnJheSIsICJpc0FycmF5IiwgIkRSQUZUQUJMRSIsICJfdmFsdWUkY29uc3RydWN0b3IiLCAiaXNNYXAiLCAiaXNTZXQiLCAiZWFjaCIsICJlbnVtZXJhYmxlT25seSIsICJnZXRBcmNodHlwZSIsICJvd25LZXlzIiwgImZvckVhY2giLCAidGhpbmciLCAidHlwZV8iLCAiaGFzIiwgImdldCIsICJzZXQiLCAicHJvcE9yT2xkVmFsdWUiLCAiYWRkIiwgImlzIiwgImhhc01hcCIsICJNYXAiLCAiaGFzU2V0IiwgIlNldCIsICJsYXRlc3QiLCAiY29weV8iLCAiYmFzZV8iLCAic2hhbGxvd0NvcHkiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJkZXNjIiwgIndyaXRhYmxlIiwgImNvbmZpZ3VyYWJsZSIsICJlbnVtZXJhYmxlIiwgImZyZWV6ZSIsICJkZWVwIiwgImlzRnJvemVuIiwgImNsZWFyIiwgImRlbGV0ZSIsICJkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnMiLCAiZ2V0UGx1Z2luIiwgInBsdWdpbktleSIsICJwbHVnaW4iLCAicGx1Z2lucyIsICJsb2FkUGx1Z2luIiwgImltcGxlbWVudGF0aW9uIiwgImdldEN1cnJlbnRTY29wZSIsICJjdXJyZW50U2NvcGUiLCAidXNlUGF0Y2hlc0luU2NvcGUiLCAic2NvcGUiLCAicGF0Y2hMaXN0ZW5lciIsICJwYXRjaGVzXyIsICJpbnZlcnNlUGF0Y2hlc18iLCAicGF0Y2hMaXN0ZW5lcl8iLCAicmV2b2tlU2NvcGUiLCAibGVhdmVTY29wZSIsICJkcmFmdHNfIiwgInJldm9rZURyYWZ0IiwgInBhcmVudF8iLCAiZW50ZXJTY29wZSIsICJpbW1lciIsICJpbW1lcl8iLCAiY2FuQXV0b0ZyZWV6ZV8iLCAidW5maW5hbGl6ZWREcmFmdHNfIiwgImRyYWZ0IiwgInJldm9rZV8iLCAicmV2b2tlZF8iLCAicHJvY2Vzc1Jlc3VsdCIsICJiYXNlRHJhZnQiLCAiaXNSZXBsYWNlZCIsICJ1c2VQcm94aWVzXyIsICJ3aWxsRmluYWxpemVFUzVfIiwgIm1vZGlmaWVkXyIsICJmaW5hbGl6ZSIsICJtYXliZUZyZWV6ZSIsICJnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18iLCAiTk9USElORyIsICJ1bmRlZmluZWQiLCAicm9vdFNjb3BlIiwgImNoaWxkVmFsdWUiLCAiZmluYWxpemVQcm9wZXJ0eSIsICJzY29wZV8iLCAiZmluYWxpemVkXyIsICJkcmFmdF8iLCAicmVzdWx0RWFjaCIsICJnZW5lcmF0ZVBhdGNoZXNfIiwgInBhcmVudFN0YXRlIiwgInRhcmdldE9iamVjdCIsICJyb290UGF0aCIsICJ0YXJnZXRJc1NldCIsICJyZXMiLCAiYXNzaWduZWRfIiwgImNvbmNhdCIsICJhdXRvRnJlZXplXyIsICJnZXREZXNjcmlwdG9yRnJvbVByb3RvIiwgIm1hcmtDaGFuZ2VkIiwgInByZXBhcmVDb3B5IiwgImNyZWF0ZVByb3h5IiwgInByb3h5TWFwXyIsICJwcm94eVNldF8iLCAiaXNNYW51YWxfIiwgInRyYXBzIiwgIm9iamVjdFRyYXBzIiwgImFycmF5VHJhcHMiLCAiUHJveHkiLCAicmV2b2NhYmxlIiwgInJldm9rZSIsICJwcm94eSIsICJjcmVhdGVFUzVQcm94eV8iLCAicHVzaCIsICJjdXJyZW50SW1wbCIsICJhcmNoVHlwZSIsICJoYXNDaGFuZ2VzXyIsICJjb3B5SGVscGVyIiwgImVuYWJsZUVTNSIsICJwcm94eVByb3BlcnR5IiwgInRoaXMiLCAibWFya0NoYW5nZXNTd2VlcCIsICJkcmFmdHMiLCAiaGFzQXJyYXlDaGFuZ2VzIiwgImhhc09iamVjdENoYW5nZXMiLCAiYmFzZVZhbHVlIiwgImJhc2VJc0RyYWZ0IiwgImFzc2VydFVucmV2b2tlZCIsICJKU09OIiwgIm1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkiLCAiTWF0aCIsICJoYXNTeW1ib2wiLCAiU3ltYm9sIiwgImhhc1Byb3hpZXMiLCAiUmVmbGVjdCIsICJmb3IiLCAiX2Rlc2MkZ2V0IiwgImN1cnJlbnRTdGF0ZSIsICJOdW1iZXIiLCAiaXNOYU4iLCAiZGVsZXRlUHJvcGVydHkiLCAib3duZXIiLCAic2V0UHJvdG90eXBlT2YiLCAiYXJndW1lbnRzIiwgImFwcGx5IiwgIkltbWVyIiwgInJlY2lwZSIsICJkZWZhdWx0QmFzZSIsICJwcm9kdWNlIiwgIl90aGlzMiIsICJoYXNFcnJvciIsICJQcm9taXNlIiwgInRoZW4iLCAiaXAiLCAicHJvZHVjZVdpdGhQYXRjaGVzIiwgInBhdGNoZXMiLCAiaW52ZXJzZVBhdGNoZXMiLCAibmV4dFN0YXRlIiwgInVzZVByb3hpZXMiLCAic2V0VXNlUHJveGllcyIsICJhdXRvRnJlZXplIiwgInNldEF1dG9GcmVlemUiLCAiY3JlYXRlRHJhZnQiLCAiZmluaXNoRHJhZnQiLCAiYXBwbHlQYXRjaGVzIiwgInBhdGNoIiwgIm9wIiwgImFwcGx5UGF0Y2hlc0ltcGwiLCAiYXBwbHlQYXRjaGVzXyIsICJiaW5kIiwgIl90eXBlb2YiLCAidG9QcmltaXRpdmUiLCAidG9Qcm9wZXJ0eUtleSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFNwcmVhZDIiLCAiZm9ybWF0UHJvZEVycm9yTWVzc2FnZSIsICIkJG9ic2VydmFibGUiLCAicmFuZG9tU3RyaW5nIiwgIkFjdGlvblR5cGVzIiwgImNyZWF0ZVN0b3JlIiwgInJlZHVjZXIiLCAicHJlbG9hZGVkU3RhdGUiLCAiZW5oYW5jZXIiLCAiX3JlZjIiLCAiY3VycmVudFJlZHVjZXIiLCAiY3VycmVudExpc3RlbmVycyIsICJuZXh0TGlzdGVuZXJzIiwgImlzRGlzcGF0Y2hpbmciLCAiZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycyIsICJnZXRTdGF0ZSIsICJzdWJzY3JpYmUiLCAiZGlzcGF0Y2giLCAiYWN0aW9uIiwgInJlcGxhY2VSZWR1Y2VyIiwgIm5leHRSZWR1Y2VyIiwgIm9ic2VydmFibGUiLCAib3V0ZXJTdWJzY3JpYmUiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZVN0YXRlIiwgImFzc2VydFJlZHVjZXJTaGFwZSIsICJyZWR1Y2VycyIsICJpbml0aWFsU3RhdGUiLCAiY29tYmluZVJlZHVjZXJzIiwgInJlZHVjZXJLZXlzIiwgImZpbmFsUmVkdWNlcnMiLCAiZmluYWxSZWR1Y2VyS2V5cyIsICJ1bmV4cGVjdGVkS2V5Q2FjaGUiLCAic2hhcGVBc3NlcnRpb25FcnJvciIsICJ3YXJuaW5nTWVzc2FnZSIsICJoYXNDaGFuZ2VkIiwgInByZXZpb3VzU3RhdGVGb3JLZXkiLCAibmV4dFN0YXRlRm9yS2V5IiwgImFjdGlvblR5cGUiLCAiZnVuY3MiLCAiYXBwbHlNaWRkbGV3YXJlIiwgIm1pZGRsZXdhcmVzIiwgIl9kaXNwYXRjaCIsICJtaWRkbGV3YXJlQVBJIiwgImNoYWluIiwgImNyZWF0ZVRodW5rTWlkZGxld2FyZSIsICJleHRyYUFyZ3VtZW50IiwgInRodW5rIiwgImVzX2RlZmF1bHQiLCAiY29tcG9zZVdpdGhEZXZUb29scyIsICJkZXZUb29sc0VuaGFuY2VyIiwgIm5vb3AyIiwgImJhc2VQcm90byIsICJjcmVhdGVBY3Rpb24iLCAicHJlcGFyZUFjdGlvbiIsICJhY3Rpb25DcmVhdG9yIiwgInByZXBhcmVkIiwgIl9fc3ByZWFkVmFsdWVzIiwgIk1pZGRsZXdhcmVBcnJheSIsICJfc3VwZXIiLCAiX19leHRlbmRzIiwgImFyciIsICJfX3NwcmVhZEFycmF5IiwgIkVuaGFuY2VyQXJyYXkiLCAiZnJlZXplRHJhZnRhYmxlIiwgImltbWVyX2VzbV9kZWZhdWx0IiwgImlzQm9vbGVhbiIsICJjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIiwgImdldERlZmF1bHRNaWRkbGV3YXJlIiwgIl9jIiwgIl9kIiwgImltbXV0YWJsZUNoZWNrIiwgIl9lIiwgInNlcmlhbGl6YWJsZUNoZWNrIiwgIl9mIiwgImFjdGlvbkNyZWF0b3JDaGVjayIsICJtaWRkbGV3YXJlQXJyYXkiLCAiaW1tdXRhYmxlT3B0aW9ucyIsICJzZXJpYWxpemFibGVPcHRpb25zIiwgImFjdGlvbkNyZWF0b3JPcHRpb25zIiwgIklTX1BST0RVQ1RJT04iLCAiY29uZmlndXJlU3RvcmUiLCAiY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlIiwgImRldlRvb2xzIiwgIl9nIiwgIl9oIiwgImVuaGFuY2VycyIsICJyb290UmVkdWNlciIsICJmaW5hbE1pZGRsZXdhcmUiLCAibWlkZGxld2FyZUVuaGFuY2VyIiwgImZpbmFsQ29tcG9zZSIsICJkZWZhdWx0RW5oYW5jZXJzIiwgInN0b3JlRW5oYW5jZXJzIiwgImNvbXBvc2VkRW5oYW5jZXIiLCAiZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2siLCAiYnVpbGRlckNhbGxiYWNrIiwgImFjdGlvbnNNYXAiLCAiYWN0aW9uTWF0Y2hlcnMiLCAiZGVmYXVsdENhc2VSZWR1Y2VyIiwgImJ1aWxkZXIiLCAidHlwZU9yQWN0aW9uQ3JlYXRvciIsICJtYXRjaGVyIiwgImlzU3RhdGVGdW5jdGlvbiIsICJjcmVhdGVSZWR1Y2VyIiwgIm1hcE9yQnVpbGRlckNhbGxiYWNrIiwgImZpbmFsQWN0aW9uTWF0Y2hlcnMiLCAiZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXIiLCAiZ2V0SW5pdGlhbFN0YXRlIiwgImZyb3plbkluaXRpYWxTdGF0ZV8xIiwgImNhc2VSZWR1Y2VycyIsICJyZWR1Y2VyMiIsICJjciIsICJjYXNlUmVkdWNlciIsICJnZXRUeXBlMiIsICJhY3Rpb25LZXkiLCAiY3JlYXRlU2xpY2UiLCAicmVkdWNlck5hbWVzIiwgInNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIiwgInNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlIiwgImFjdGlvbkNyZWF0b3JzIiwgInJlZHVjZXJOYW1lIiwgIm1heWJlUmVkdWNlcldpdGhQcmVwYXJlIiwgInByZXBhcmVDYWxsYmFjayIsICJidWlsZFJlZHVjZXIiLCAiZXh0cmFSZWR1Y2VycyIsICJmaW5hbENhc2VSZWR1Y2VycyIsICJhY3Rpb25NYXRjaGVyc18xIiwgIl9yZWR1Y2VyIiwgInVybEFscGhhYmV0IiwgIm5hbm9pZCIsICJjb21tb25Qcm9wZXJ0aWVzIiwgIlJlamVjdFdpdGhWYWx1ZSIsICJwYXlsb2FkIiwgIm1ldGEiLCAiRnVsZmlsbFdpdGhNZXRhIiwgIm1pbmlTZXJpYWxpemVFcnJvciIsICJzaW1wbGVFcnJvciIsICJjb21tb25Qcm9wZXJ0aWVzXzEiLCAiY3JlYXRlQXN5bmNUaHVuayIsICJjcmVhdGVBc3luY1RodW5rMiIsICJ0eXBlUHJlZml4IiwgInBheWxvYWRDcmVhdG9yIiwgImZ1bGZpbGxlZCIsICJyZXF1ZXN0SWQiLCAiX19zcHJlYWRQcm9wcyIsICJwZW5kaW5nIiwgInJlamVjdGVkIiwgImRpc3BsYXllZFdhcm5pbmciLCAiQUMiLCAiY2xhc3NfMSIsICJleHRyYSIsICJhYm9ydENvbnRyb2xsZXIiLCAiYWJvcnRSZWFzb24iLCAic3RhcnRlZCIsICJhYm9ydCIsICJyZWFzb24iLCAicHJvbWlzZTIiLCAiX19hc3luYyIsICJjb25kaXRpb25SZXN1bHQiLCAiX2EiLCAiaXNUaGVuYWJsZSIsICJhYm9ydGVkUHJvbWlzZSIsICJfIiwgInJlamVjdCIsICJfYiIsICJmaW5hbEFjdGlvbiIsICJlcnJfMSIsICJza2lwRGlzcGF0Y2giLCAidW53cmFwUmVzdWx0IiwgInRhc2siLCAiY29tcGxldGVkIiwgImNhbmNlbGxlZCIsICJ0YXNrQ2FuY2VsbGVkIiwgInRhc2tDb21wbGV0ZWQiLCAibGlzdGVuZXJDYW5jZWxsZWQiLCAibGlzdGVuZXJDb21wbGV0ZWQiLCAiVGFza0Fib3J0RXJyb3IiLCAiYWxtIiwgImFkZExpc3RlbmVyIiwgImNsZWFyQWxsTGlzdGVuZXJzIiwgInJlbW92ZUxpc3RlbmVyIiwgInByb21pc2UiLCAicXVldWVNaWNyb3Rhc2tTaGltIiwgImNyZWF0ZVF1ZXVlV2l0aFRpbWVyIiwgInRpbWVvdXQiLCAibm90aWZ5IiwgInJBRiIsICJyZXF1ZXN0IiwgInJlcVBhcmFtcyIsICJpbml0IiwgImFwaVVybCIsICJtZXNzYWdlIiwgIlBhZ2UiLCAiX1BhZ2UiLCAicGFnZSIsICJudW1FbGVtZW50cyIsICJ0b3RhbFBhZ2VzIiwgInRvdGFsRWxlbWVudHMiLCAiZWxlbWVudHMiLCAiZmFjZXRGaWVsZHNUb0NvdW50cyIsICJnZXRQYWdpbmF0ZWQiLCAibm9ybWFsaXplIiwgInN0ckFycmF5IiwgInJlc3VsdEFycmF5IiwgInBhcnRzIiwgInVybEpvaW4iLCAiZ2V0U3RhdHMiLCAicmVqZWN0V2l0aFZhbHVlIiwgImdldEJhbm5lclRleHQiLCAiaG9tZVNsaWNlIiwgImhvbWVTbGljZV9kZWZhdWx0IiwgIlJlaWZpZWQiLCAiX1JlaWZpZWQiLCAiYXhpb21zIiwgImpzb25Ob2RlIiwgImF4aW9tIiwgImV4aXN0aW5nIiwgIkxpbmtlZEVudGl0aWVzIiwgIl9MaW5rZWRFbnRpdGllcyIsICJsaW5rZWRFbnRpdGllcyIsICJpcmkiLCAibGlua2VkRW50aXR5IiwgIlRoaW5nIiwgInR5cGVzIiwgImFzQXJyYXkiLCAibGFiZWxzIiwgImRlZmluaXRpb24iLCAiZGVmIiwgIkVudGl0eSIsICJkZWZpbml0aW9uUHJvcGVydGllcyIsICJzeW5vbnltUHJvcGVydGllcyIsICJoaWVyYXJjaGljYWxQcm9wZXJ0aWVzIiwgImFubm90YXRpb25QcmVkaWNhdGVzIiwgInByZWRpY2F0ZSIsICJwYXJlbnRJcmkiLCAiaGllcmFyY2hpY2FsUGFyZW50cyIsICJDbGFzcyIsICJJbmRpdmlkdWFsIiwgInJkZlR5cGVzIiwgIlByb3BlcnR5IiwgInRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIiwgIm1hcFRvQXBpUGFyYW1zIiwgInNlYXJjaFBhcmFtcyIsICJzZWFyY2hQYXJhbXNDb3B5IiwgIm5ld0tleSIsICJ0b0NhbWVsIiwgIiQxIiwgIk9udG9sb2d5IiwgIm5hbWVzIiwgImRlc2NyaXB0aW9ucyIsICJ2ZXJzaW9uSXJpIiwgInZlcnNpb25Gcm9tRGF0ZSIsICJ2ZXJzaW9uRnJvbU51bWJlciIsICJpbXBvcnRfbXVsdGltYXAiLCAiZXh0cmFjdEVudGl0eUhpZXJhcmNoeSIsICJlbnRpdGllcyIsICJjaGlsZFRvUGFyZW50UmVsYXRpb25zIiwgInVyaVRvTm9kZSIsICJlbnRpdHkiLCAiaXNUb3AiLCAicGFyZW50UmVsYXRpb24iLCAicGFyZW50RW50aXR5IiwgInBhcmVudFJlbGF0aW9uVG9DaGlsZCIsICJjaGlsZFJlbGF0aW9uVG9QYXJlbnQiLCAicmVsYXRpb24iLCAiYnJlYWtDeWNsZXMiLCAiY3VycmVudElyaSIsICJ2aXNpdGVkSXJpcyIsICJwYXJlbnRSZWxhdGlvbnMiLCAicGFyZW50VG9DaGlsZFJlbGF0aW9ucyIsICJjaGlsZElyaSIsICJyZWxhdGlvbnMiLCAiY3JlYXRlVHJlZUZyb21FbnRpdGllcyIsICJwcmVmZXJyZWRSb290cyIsICJvbnRvbG9neSIsICJyb290RW50aXRpZXMiLCAicHJlZmVycmVkIiwgImFsbE5vZGVzIiwgIm5vZGVDaGlsZHJlbiIsICJhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyIsICJyb290RW50aXR5IiwgImNyZWF0ZVRyZWVOb2RlIiwgImRlYnVnTnVtSXRlcmF0aW9ucyIsICJjaGlsZE5vZGVzIiwgInRyZWVOb2RlIiwgImNoaWxkTm9kZSIsICJyZXNldFRyZWVDb250ZW50IiwgInJlc2V0VHJlZVNldHRpbmdzIiwgImVuYWJsZVByZWZlcnJlZFJvb3RzIiwgImRpc2FibGVQcmVmZXJyZWRSb290cyIsICJvcGVuTm9kZSIsICJjbG9zZU5vZGUiLCAic2hvd09ic29sZXRlIiwgImhpZGVPYnNvbGV0ZSIsICJzaG93U2libGluZ3MiLCAiaGlkZVNpYmxpbmdzIiwgInNob3dDb3VudHMiLCAiaGlkZUNvdW50cyIsICJnZXRPbnRvbG9neSIsICJvbnRvbG9neUlkIiwgImxhbmciLCAib250b2xvZ3lQcm9wZXJ0aWVzIiwgImdldEVudGl0eVdpdGhUeXBlIiwgImVudGl0eVR5cGUiLCAiZW50aXR5SXJpIiwgImFwaVNlYXJjaFBhcmFtcyIsICJkb3VibGVFbmNvZGVkVGVybVVyaSIsICJlbnRpdHlKc29uUHJvcGVydGllcyIsICJyZXN1bHRzIiwgImdldEVudGl0eSIsICJnZXRDbGFzc0luc3RhbmNlcyIsICJjbGFzc0lyaSIsICJnZXRPbnRvbG9naWVzIiwgInJvd3NQZXJQYWdlIiwgImdldEVudGl0aWVzIiwgImdldEFuY2VzdG9ycyIsICJzaG93T2Jzb2xldGVFbmFibGVkIiwgImRvdWJsZUVuY29kZWRVcmkiLCAiYW5jZXN0b3JzUGFnZSIsICJnZXRSb290RW50aXRpZXMiLCAiY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyIsICJvcnBoYW5lZEluZGl2aWR1YWxzIiwgInJvb3RzUGFnZSIsICJnZXROb2RlQ2hpbGRyZW4iLCAiZW50aXR5VHlwZVBsdXJhbCIsICJhYnNvbHV0ZUlkZW50aXR5IiwgImNoaWxkcmVuUGFnZSIsICJ0ZXJtIiwgInBhcmVudGhvb2RNZXRhZGF0YSIsICJvbnRvbG9naWVzU2xpY2UiLCAicm9vdE5vZGVzIiwgInJvb3RUZXJtcyIsICJzZWxlY3RlZElzRGVzY2VuZGFudE9mUHJlZmVycmVkUm9vdHMiLCAiYWJzSWQiLCAib250b2xvZ2llc1NsaWNlX2RlZmF1bHQiLCAiZ2V0U2VhcmNoUmVzdWx0cyIsICJxdWVyeSIsICJwYXJhbSIsICJwYXJzZWRRdWVyeSIsICJzZWFyY2hTbGljZSIsICJzZWFyY2hTbGljZV9kZWZhdWx0IiwgImNvbW1vbiIsICJjb21tb25fZGVmYXVsdCIsICJyZWQiLCAicmVkX2RlZmF1bHQiLCAicHVycGxlIiwgInB1cnBsZV9kZWZhdWx0IiwgImJsdWUiLCAiYmx1ZV9kZWZhdWx0IiwgImxpZ2h0Qmx1ZSIsICJsaWdodEJsdWVfZGVmYXVsdCIsICJncmVlbiIsICJncmVlbl9kZWZhdWx0IiwgIm9yYW5nZSIsICJvcmFuZ2VfZGVmYXVsdCIsICJncmV5IiwgImdyZXlfZGVmYXVsdCIsICJpZGVudGlmaWVyX2RlZmF1bHQiLCAiaW1wb3J0X3N0eWxlZF9lbmdpbmUiLCAiaW1wb3J0X2RlZXBtZXJnZSIsICJzaGFwZV9kZWZhdWx0IiwgIm1lcmdlX2RlZmF1bHQiLCAiaW1wb3J0X2NhcGl0YWxpemUiLCAic3R5bGVfZGVmYXVsdCIsICJjb21wb3NlX2RlZmF1bHQiLCAiZGVmYXVsdFN4Q29uZmlnX2RlZmF1bHQiLCAic3R5bGVGdW5jdGlvblN4X2RlZmF1bHQiLCAiY3JlYXRlVGhlbWVfZGVmYXVsdCIsICJpc09iamVjdEVtcHR5IiwgImNvbnRleHRUaGVtZSIsICJ1c2VUaGVtZVdpdGhvdXREZWZhdWx0X2RlZmF1bHQiLCAidXNlVGhlbWVfZGVmYXVsdCIsICJkZWZhdWx0R2VuZXJhdG9yIiwgImNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciIsICJnZW5lcmF0ZSIsICJnZW5lcmF0b3IiLCAiQ2xhc3NOYW1lR2VuZXJhdG9yIiwgIkNsYXNzTmFtZUdlbmVyYXRvcl9kZWZhdWx0IiwgImNsc3giLCAiY2xzeF9kZWZhdWx0IiwgImdsb2JhbFN0YXRlQ2xhc3NlcyIsICJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsICJnbG9iYWxTdGF0ZVByZWZpeCIsICJnbG9iYWxTdGF0ZUNsYXNzIiwgImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCAic2xvdHMiLCAicHJvY2Vzc1N0eWxlcyIsICJzdHlsZWRFbmdpbmVTdHlsZWQiLCAic3R5bGVkX2RlZmF1bHQiLCAicmVzb2x2ZVByb3BzIiwgImRlZmF1bHRQcm9wcyIsICJkZWZhdWx0U2xvdFByb3BzIiwgInNsb3RQcm9wcyIsICJzbG90UHJvcE5hbWUiLCAiZ2V0VGhlbWVQcm9wcyIsICJwYXJhbXMiLCAidXNlVGhlbWVQcm9wcyIsICJ1c2VFbmhhbmNlZEVmZmVjdCIsICJ1c2VFbmhhbmNlZEVmZmVjdF9kZWZhdWx0IiwgImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsICJpc011aUVsZW1lbnQiLCAibXVpTmFtZXMiLCAiX211aU5hbWUiLCAiX2VsZW1lbnQkdHlwZSIsICJzZXRSZWYiLCAiZ2xvYmFsSWQiLCAidXNlR2xvYmFsSWQiLCAiaWRPdmVycmlkZSIsICJkZWZhdWx0SWQiLCAic2V0RGVmYXVsdElkIiwgIm1heWJlUmVhY3RVc2VJZCIsICJ1c2VJZCIsICJyZWFjdElkIiwgInVzZUNvbnRyb2xsZWQiLCAiY29udHJvbGxlZCIsICJkZWZhdWx0UHJvcCIsICJpc0NvbnRyb2xsZWQiLCAidmFsdWVTdGF0ZSIsICJzZXRWYWx1ZSIsICJzZXRWYWx1ZUlmVW5jb250cm9sbGVkIiwgIm5ld1ZhbHVlIiwgInVzZUV2ZW50Q2FsbGJhY2siLCAidXNlRXZlbnRDYWxsYmFja19kZWZhdWx0IiwgInVzZUZvcmtSZWYiLCAicmVmcyIsICJpbnN0YW5jZSIsICJVTklOSVRJQUxJWkVEIiwgInVzZUxhenlSZWYiLCAiaW5pdEFyZyIsICJFTVBUWSIsICJ1c2VPbk1vdW50IiwgIlRpbWVvdXQiLCAiX1RpbWVvdXQiLCAiZGVsYXkiLCAidXNlVGltZW91dCIsICJoYWRLZXlib2FyZEV2ZW50IiwgImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwgImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCIsICJpbnB1dFR5cGVzV2hpdGVsaXN0IiwgImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwgImhhbmRsZUtleURvd24iLCAiZXZlbnQiLCAiaGFuZGxlUG9pbnRlckRvd24iLCAiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsICJwcmVwYXJlIiwgImRvYyIsICJpc0ZvY3VzVmlzaWJsZSIsICJ1c2VJc0ZvY3VzVmlzaWJsZSIsICJpc0ZvY3VzVmlzaWJsZVJlZiIsICJoYW5kbGVCbHVyVmlzaWJsZSIsICJoYW5kbGVGb2N1c1Zpc2libGUiLCAiY29tcG9zZUNsYXNzZXMiLCAiZ2V0VXRpbGl0eUNsYXNzIiwgImNsYXNzZXMiLCAidXRpbGl0eUNsYXNzIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgInVzZVRoZW1lUHJvcHNEZWZhdWx0IiwgImpvaW5DaGlsZHJlbiIsICJzZXBhcmF0b3IiLCAiY2hpbGRyZW5BcnJheSIsICJjaGlsZCIsICJnZXRTaWRlRnJvbURpcmVjdGlvbiIsICJkaXJlY3Rpb25WYWx1ZXMiLCAic3BhY2luZ1ZhbHVlcyIsICJwcmV2aW91c0RpcmVjdGlvblZhbHVlIiwgImNyZWF0ZVN0YWNrIiwgImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsICJ1c2VVdGlsaXR5Q2xhc3NlcyIsICJTdGFja1Jvb3QiLCAiaW5Qcm9wcyIsICJ0aGVtZVByb3BzIiwgImRpdmlkZXIiLCAidXNlRmxleEdhcCIsICJfanN4IiwgImltcG9ydF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiaW1wb3J0X3N0eWxlRnVuY3Rpb25TeCIsICJpbXBvcnRfY3JlYXRlVGhlbWUiLCAiY3JlYXRlTWl4aW5zIiwgIm1peGlucyIsICJpbXBvcnRfY29sb3JNYW5pcHVsYXRvciIsICJsaWdodCIsICJkYXJrIiwgImFkZExpZ2h0T3JEYXJrIiwgImludGVudCIsICJzaGFkZSIsICJ0b25hbE9mZnNldCIsICJ0b25hbE9mZnNldExpZ2h0IiwgInRvbmFsT2Zmc2V0RGFyayIsICJnZXREZWZhdWx0UHJpbWFyeSIsICJtb2RlIiwgImdldERlZmF1bHRTZWNvbmRhcnkiLCAiZ2V0RGVmYXVsdEVycm9yIiwgImdldERlZmF1bHRJbmZvIiwgImdldERlZmF1bHRTdWNjZXNzIiwgImdldERlZmF1bHRXYXJuaW5nIiwgImNyZWF0ZVBhbGV0dGUiLCAiY29udHJhc3RUaHJlc2hvbGQiLCAicHJpbWFyeSIsICJzZWNvbmRhcnkiLCAiaW5mbyIsICJzdWNjZXNzIiwgImdldENvbnRyYXN0VGV4dCIsICJhdWdtZW50Q29sb3IiLCAibWFpblNoYWRlIiwgImxpZ2h0U2hhZGUiLCAiZGFya1NoYWRlIiwgIm1vZGVzIiwgInJvdW5kIiwgImNhc2VBbGxDYXBzIiwgImRlZmF1bHRGb250RmFtaWx5IiwgImNyZWF0ZVR5cG9ncmFwaHkiLCAidHlwb2dyYXBoeSIsICJmb250RmFtaWx5IiwgImZvbnRTaXplIiwgImZvbnRXZWlnaHRMaWdodCIsICJmb250V2VpZ2h0UmVndWxhciIsICJmb250V2VpZ2h0TWVkaXVtIiwgImZvbnRXZWlnaHRCb2xkIiwgImh0bWxGb250U2l6ZSIsICJhbGxWYXJpYW50cyIsICJweFRvUmVtMiIsICJjb2VmIiwgInB4VG9SZW0iLCAiYnVpbGRWYXJpYW50IiwgImZvbnRXZWlnaHQiLCAibGluZUhlaWdodCIsICJsZXR0ZXJTcGFjaW5nIiwgImNhc2luZyIsICJjcmVhdGVTaGFkb3ciLCAicHgiLCAic2hhZG93cyIsICJzaGFkb3dzX2RlZmF1bHQiLCAiZWFzaW5nIiwgImR1cmF0aW9uIiwgImZvcm1hdE1zIiwgIm1pbGxpc2Vjb25kcyIsICJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCAiY29uc3RhbnQiLCAiY3JlYXRlVHJhbnNpdGlvbnMiLCAiaW5wdXRUcmFuc2l0aW9ucyIsICJtZXJnZWRFYXNpbmciLCAibWVyZ2VkRHVyYXRpb24iLCAiZHVyYXRpb25PcHRpb24iLCAiZWFzaW5nT3B0aW9uIiwgImFuaW1hdGVkUHJvcCIsICJ6SW5kZXgiLCAiekluZGV4X2RlZmF1bHQiLCAibWl4aW5zSW5wdXQiLCAidHJhbnNpdGlvbnNJbnB1dCIsICJ0eXBvZ3JhcGh5SW5wdXQiLCAic3lzdGVtVGhlbWUiLCAic3lzdGVtQ3JlYXRlVGhlbWUiLCAiZGVmYXVsdFRoZW1lX2RlZmF1bHQiLCAiaW1wb3J0X2NyZWF0ZVN0eWxlZCIsICJjYXBpdGFsaXplX2RlZmF1bHQiLCAiY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uX2RlZmF1bHQiLCAiZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyIsICJzdmdJY29uQ2xhc3NlcyIsICJTdmdJY29uUm9vdCIsICJfdGhlbWUkdHJhbnNpdGlvbnMiLCAiX3RoZW1lJHRyYW5zaXRpb25zJGNyIiwgIl90aGVtZSR0cmFuc2l0aW9uczIiLCAiX3RoZW1lJHR5cG9ncmFwaHkiLCAiX3RoZW1lJHR5cG9ncmFwaHkkcHhUIiwgIl90aGVtZSR0eXBvZ3JhcGh5MiIsICJfdGhlbWUkdHlwb2dyYXBoeTIkcHgiLCAiX3RoZW1lJHR5cG9ncmFwaHkzIiwgIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsICJfcGFsZXR0ZSRvd25lclN0YXRlJGMiLCAiX3BhbGV0dGUyIiwgIl9wYWxldHRlMyIsICJTdmdJY29uIiwgImh0bWxDb2xvciIsICJpbmhlcml0Vmlld0JveCIsICJ0aXRsZUFjY2VzcyIsICJ2aWV3Qm94IiwgImhhc1N2Z0FzQ2hpbGQiLCAibW9yZSIsICJfanN4cyIsICJTdmdJY29uX2RlZmF1bHQiLCAiY3JlYXRlU3ZnSWNvbiIsICJkaXNwbGF5TmFtZSIsICJpc011aUVsZW1lbnRfZGVmYXVsdCIsICJ1c2VJZF9kZWZhdWx0IiwgInVzZUNvbnRyb2xsZWRfZGVmYXVsdCIsICJ1c2VGb3JrUmVmX2RlZmF1bHQiLCAidXNlSXNGb2N1c1Zpc2libGVfZGVmYXVsdCIsICJfc2V0UHJvdG90eXBlT2YiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJUcmFuc2l0aW9uR3JvdXBDb250ZXh0X2RlZmF1bHQiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJnZXRDaGlsZE1hcHBpbmciLCAibWFwRm4iLCAibWFwcGVyIiwgIm1lcmdlQ2hpbGRNYXBwaW5ncyIsICJnZXRWYWx1ZUZvcktleSIsICJuZXh0S2V5c1BlbmRpbmciLCAicGVuZGluZ0tleXMiLCAicHJldktleSIsICJjaGlsZE1hcHBpbmciLCAibmV4dEtleSIsICJwZW5kaW5nTmV4dEtleSIsICJnZXRQcm9wIiwgImdldEluaXRpYWxDaGlsZE1hcHBpbmciLCAib25FeGl0ZWQiLCAiZ2V0TmV4dENoaWxkTWFwcGluZyIsICJuZXh0UHJvcHMiLCAicHJldkNoaWxkTWFwcGluZyIsICJuZXh0Q2hpbGRNYXBwaW5nIiwgImhhc1ByZXYiLCAiaGFzTmV4dCIsICJwcmV2Q2hpbGQiLCAiaXNMZWF2aW5nIiwgIlRyYW5zaXRpb25Hcm91cCIsICJfUmVhY3QkQ29tcG9uZW50IiwgImhhbmRsZUV4aXRlZCIsICJmaXJzdFJlbmRlciIsICJjdXJyZW50Q2hpbGRNYXBwaW5nIiwgIl90aGlzJHByb3BzIiwgImNoaWxkRmFjdG9yeSIsICJUcmFuc2l0aW9uR3JvdXBfZGVmYXVsdCIsICJSaXBwbGUiLCAicHVsc2F0ZSIsICJyaXBwbGVYIiwgInJpcHBsZVkiLCAicmlwcGxlU2l6ZSIsICJpblByb3AiLCAibGVhdmluZyIsICJzZXRMZWF2aW5nIiwgInJpcHBsZUNsYXNzTmFtZSIsICJyaXBwbGVTdHlsZXMiLCAiY2hpbGRDbGFzc05hbWUiLCAidGltZW91dElkIiwgIlJpcHBsZV9kZWZhdWx0IiwgInRvdWNoUmlwcGxlQ2xhc3NlcyIsICJ0b3VjaFJpcHBsZUNsYXNzZXNfZGVmYXVsdCIsICJfdCIsICJfdDIiLCAiX3QzIiwgIl90NCIsICJEVVJBVElPTiIsICJERUxBWV9SSVBQTEUiLCAiZW50ZXJLZXlmcmFtZSIsICJleGl0S2V5ZnJhbWUiLCAicHVsc2F0ZUtleWZyYW1lIiwgIlRvdWNoUmlwcGxlUm9vdCIsICJUb3VjaFJpcHBsZVJpcHBsZSIsICJUb3VjaFJpcHBsZSIsICJjZW50ZXJQcm9wIiwgInJpcHBsZXMiLCAic2V0UmlwcGxlcyIsICJyaXBwbGVDYWxsYmFjayIsICJpZ25vcmluZ01vdXNlRG93biIsICJzdGFydFRpbWVyIiwgInN0YXJ0VGltZXJDb21taXQiLCAic3RhcnRDb21taXQiLCAib2xkUmlwcGxlcyIsICJjZW50ZXIiLCAiZmFrZUVsZW1lbnQiLCAicmVjdCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAic2l6ZVgiLCAic2l6ZVkiLCAic3RvcCIsICJUb3VjaFJpcHBsZV9kZWZhdWx0IiwgImdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MiLCAiYnV0dG9uQmFzZUNsYXNzZXMiLCAiYnV0dG9uQmFzZUNsYXNzZXNfZGVmYXVsdCIsICJkaXNhYmxlZCIsICJmb2N1c1Zpc2libGUiLCAiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lIiwgImNvbXBvc2VkQ2xhc3NlcyIsICJCdXR0b25CYXNlUm9vdCIsICJCdXR0b25CYXNlIiwgImNlbnRlclJpcHBsZSIsICJkaXNhYmxlUmlwcGxlIiwgImRpc2FibGVUb3VjaFJpcHBsZSIsICJmb2N1c1JpcHBsZSIsICJMaW5rQ29tcG9uZW50IiwgIm9uQmx1ciIsICJvbkNsaWNrIiwgIm9uQ29udGV4dE1lbnUiLCAib25EcmFnTGVhdmUiLCAib25Gb2N1cyIsICJvbkZvY3VzVmlzaWJsZSIsICJvbktleURvd24iLCAib25LZXlVcCIsICJvbk1vdXNlRG93biIsICJvbk1vdXNlTGVhdmUiLCAib25Nb3VzZVVwIiwgIm9uVG91Y2hFbmQiLCAib25Ub3VjaE1vdmUiLCAib25Ub3VjaFN0YXJ0IiwgInRhYkluZGV4IiwgIlRvdWNoUmlwcGxlUHJvcHMiLCAidG91Y2hSaXBwbGVSZWYiLCAiYnV0dG9uUmVmIiwgInJpcHBsZVJlZiIsICJoYW5kbGVSaXBwbGVSZWYiLCAiZm9jdXNWaXNpYmxlUmVmIiwgInNldEZvY3VzVmlzaWJsZSIsICJtb3VudGVkU3RhdGUiLCAic2V0TW91bnRlZFN0YXRlIiwgImVuYWJsZVRvdWNoUmlwcGxlIiwgInVzZVJpcHBsZUhhbmRsZXIiLCAicmlwcGxlQWN0aW9uIiwgImV2ZW50Q2FsbGJhY2siLCAic2tpcFJpcHBsZUFjdGlvbiIsICJoYW5kbGVNb3VzZURvd24iLCAiaGFuZGxlQ29udGV4dE1lbnUiLCAiaGFuZGxlRHJhZ0xlYXZlIiwgImhhbmRsZU1vdXNlVXAiLCAiaGFuZGxlTW91c2VMZWF2ZSIsICJoYW5kbGVUb3VjaFN0YXJ0IiwgImhhbmRsZVRvdWNoRW5kIiwgImhhbmRsZVRvdWNoTW92ZSIsICJoYW5kbGVCbHVyIiwgImhhbmRsZUZvY3VzIiwgImlzTm9uTmF0aXZlQnV0dG9uIiwgImJ1dHRvbiIsICJrZXlkb3duUmVmIiwgImhhbmRsZUtleVVwIiwgIkNvbXBvbmVudFByb3AiLCAiYnV0dG9uUHJvcHMiLCAiaGFuZGxlUmVmIiwgIkJ1dHRvbkJhc2VfZGVmYXVsdCIsICJnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIiwgInR5cG9ncmFwaHlDbGFzc2VzIiwgImFsaWduIiwgImd1dHRlckJvdHRvbSIsICJub1dyYXAiLCAicGFyYWdyYXBoIiwgIlR5cG9ncmFwaHlSb290IiwgImRlZmF1bHRWYXJpYW50TWFwcGluZyIsICJjb2xvclRyYW5zZm9ybWF0aW9ucyIsICJ0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzIiwgIlR5cG9ncmFwaHkiLCAidmFyaWFudE1hcHBpbmciLCAiVHlwb2dyYXBoeV9kZWZhdWx0IiwgImZvcm1Db250cm9sU3RhdGUiLCAic3RhdGVzIiwgIm11aUZvcm1Db250cm9sIiwgIkZvcm1Db250cm9sQ29udGV4dCIsICJGb3JtQ29udHJvbENvbnRleHRfZGVmYXVsdCIsICJ1c2VGb3JtQ29udHJvbCIsICJoYXNWYWx1ZSIsICJpc0ZpbGxlZCIsICJTU1IiLCAiaXNBZG9ybmVkU3RhcnQiLCAiZ2V0U3dpdGNoQmFzZVV0aWxpdHlDbGFzcyIsICJzd2l0Y2hCYXNlQ2xhc3NlcyIsICJjaGVja2VkIiwgImVkZ2UiLCAiU3dpdGNoQmFzZVJvb3QiLCAiU3dpdGNoQmFzZUlucHV0IiwgIlN3aXRjaEJhc2UiLCAiYXV0b0ZvY3VzIiwgImNoZWNrZWRQcm9wIiwgImNoZWNrZWRJY29uIiwgImRlZmF1bHRDaGVja2VkIiwgImRpc2FibGVkUHJvcCIsICJkaXNhYmxlRm9jdXNSaXBwbGUiLCAiaWNvbiIsICJpbnB1dFByb3BzIiwgImlucHV0UmVmIiwgIm9uQ2hhbmdlIiwgInJlYWRPbmx5IiwgInJlcXVpcmVkIiwgInNldENoZWNrZWRTdGF0ZSIsICJoYW5kbGVJbnB1dENoYW5nZSIsICJuZXdDaGVja2VkIiwgImhhc0xhYmVsRm9yIiwgIlN3aXRjaEJhc2VfZGVmYXVsdCIsICJDaGVja0JveE91dGxpbmVCbGFua19kZWZhdWx0IiwgIkNoZWNrQm94X2RlZmF1bHQiLCAiSW5kZXRlcm1pbmF0ZUNoZWNrQm94X2RlZmF1bHQiLCAiZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3MiLCAiY2hlY2tib3hDbGFzc2VzIiwgImNoZWNrYm94Q2xhc3Nlc19kZWZhdWx0IiwgImluZGV0ZXJtaW5hdGUiLCAiQ2hlY2tib3hSb290IiwgImRlZmF1bHRDaGVja2VkSWNvbiIsICJkZWZhdWx0SWNvbiIsICJkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24iLCAiQ2hlY2tib3giLCAiX2ljb24kcHJvcHMkZm9udFNpemUiLCAiX2luZGV0ZXJtaW5hdGVJY29uJHByIiwgImljb25Qcm9wIiwgImluZGV0ZXJtaW5hdGVJY29uUHJvcCIsICJpbmRldGVybWluYXRlSWNvbiIsICJDaGVja2JveF9kZWZhdWx0IiwgImdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MiLCAiY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMiLCAiU0laRSIsICJjaXJjdWxhclJvdGF0ZUtleWZyYW1lIiwgImNpcmN1bGFyRGFzaEtleWZyYW1lIiwgImRpc2FibGVTaHJpbmsiLCAiQ2lyY3VsYXJQcm9ncmVzc1Jvb3QiLCAiQ2lyY3VsYXJQcm9ncmVzc1NWRyIsICJDaXJjdWxhclByb2dyZXNzQ2lyY2xlIiwgIkNpcmN1bGFyUHJvZ3Jlc3MiLCAidGhpY2tuZXNzIiwgImNpcmNsZVN0eWxlIiwgInJvb3RTdHlsZSIsICJyb290UHJvcHMiLCAiY2lyY3VtZmVyZW5jZSIsICJDaXJjdWxhclByb2dyZXNzX2RlZmF1bHQiLCAiZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyIsICJmb3JtQ29udHJvbENsYXNzZXMiLCAiZnVsbFdpZHRoIiwgIkZvcm1Db250cm9sUm9vdCIsICJGb3JtQ29udHJvbCIsICJ2aXN1YWxseUZvY3VzZWQiLCAiaGlkZGVuTGFiZWwiLCAiYWRvcm5lZFN0YXJ0IiwgInNldEFkb3JuZWRTdGFydCIsICJpbml0aWFsQWRvcm5lZFN0YXJ0IiwgImZpbGxlZCIsICJzZXRGaWxsZWQiLCAiaW5pdGlhbEZpbGxlZCIsICJmb2N1c2VkU3RhdGUiLCAic2V0Rm9jdXNlZCIsICJmb2N1c2VkIiwgInJlZ2lzdGVyRWZmZWN0IiwgImNoaWxkQ29udGV4dCIsICJGb3JtQ29udHJvbF9kZWZhdWx0IiwgIlN0YWNrIiwgIlN0YWNrX2RlZmF1bHQiLCAiZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIiwgImZvcm1Db250cm9sTGFiZWxDbGFzc2VzIiwgImZvcm1Db250cm9sTGFiZWxDbGFzc2VzX2RlZmF1bHQiLCAibGFiZWxQbGFjZW1lbnQiLCAiRm9ybUNvbnRyb2xMYWJlbFJvb3QiLCAiQXN0ZXJpc2tDb21wb25lbnQiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJfc2xvdFByb3BzJHR5cG9ncmFwaHkiLCAiY29tcG9uZW50c1Byb3BzIiwgImNvbnRyb2wiLCAiZGlzYWJsZVR5cG9ncmFwaHkiLCAibGFiZWxQcm9wIiwgInJlcXVpcmVkUHJvcCIsICJjb250cm9sUHJvcHMiLCAiZmNzIiwgInR5cG9ncmFwaHlTbG90UHJvcHMiLCAiRm9ybUNvbnRyb2xMYWJlbF9kZWZhdWx0IiwgImdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyIsICJmb3JtR3JvdXBDbGFzc2VzIiwgInJvdyIsICJGb3JtR3JvdXBSb290IiwgIkZvcm1Hcm91cCIsICJGb3JtR3JvdXBfZGVmYXVsdCIsICJSYWRpb0J1dHRvblVuY2hlY2tlZF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uQ2hlY2tlZF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uSWNvblJvb3QiLCAiUmFkaW9CdXR0b25JY29uQmFja2dyb3VuZCIsICJSYWRpb0J1dHRvbkljb25Eb3QiLCAiUmFkaW9CdXR0b25JY29uIiwgIlJhZGlvQnV0dG9uSWNvbl9kZWZhdWx0IiwgIlJhZGlvR3JvdXBDb250ZXh0IiwgIlJhZGlvR3JvdXBDb250ZXh0X2RlZmF1bHQiLCAidXNlUmFkaW9Hcm91cCIsICJnZXRSYWRpb1V0aWxpdHlDbGFzcyIsICJyYWRpb0NsYXNzZXMiLCAicmFkaW9DbGFzc2VzX2RlZmF1bHQiLCAiUmFkaW9Sb290IiwgImFyZUVxdWFsVmFsdWVzIiwgIlJhZGlvIiwgIl9kZWZhdWx0SWNvbiRwcm9wcyRmbyIsICJfZGVmYXVsdENoZWNrZWRJY29uJHAiLCAibmFtZVByb3AiLCAib25DaGFuZ2VQcm9wIiwgInJhZGlvR3JvdXAiLCAiUmFkaW9fZGVmYXVsdCIsICJSYWRpb0dyb3VwIiwgImFjdGlvbnMiLCAidmFsdWVQcm9wIiwgInJvb3RSZWYiLCAic2V0VmFsdWVTdGF0ZSIsICJSYWRpb0dyb3VwX2RlZmF1bHQiLCAiTm9kZSIsICJleHBhbmRhYmxlIiwgImV4cGFuZGVkIiwgImhpZ2hsaWdodCIsICJpc0xhc3QiLCAiRW50aXR5VHJlZSIsICJzZWxlY3RlZEVudGl0eSIsICJvbk5hdmlnYXRlVG9FbnRpdHkiLCAib25OYXZpZ2F0ZVRvT250b2xvZ3kiLCAibm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQiLCAibnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyIsICJtYW51YWxseUV4cGFuZGVkTm9kZXMiLCAic2hvd1NpYmxpbmdzRW5hYmxlZCIsICJzaG93Q291bnRzRW5hYmxlZCIsICJ0b2dnbGVOb2RlIiwgImlzRXhwYW5kZWQiLCAibm9kZXNNaXNzaW5nQ2hpbGRyZW4iLCAicHJvbWlzZXMiLCAidG9nZ2xlU2hvd09ic29sZXRlIiwgInRvZ2dsZVNob3dTaWJsaW5ncyIsICJ0b2dnbGVTaG93Q291bnRzIiwgInJlbmRlck5vZGVDaGlsZHJlbiIsICJjaGlsZHJlbkNvcHkiLCAidGl0bGVBIiwgInRpdGxlQiIsICJjaGlsZHJlblNvcnRlZCIsICJUcmVlTGluayIsICJ0aXRsZSIsICJkZWZpbmVkQnkiLCAiZGVmaW5pbmdPbnRvbG9neSIsICJTdWJzY3JpYmFibGUiLCAiaXNTZXJ2ZXIiLCAibm9vcCIsICJmdW5jdGlvbmFsVXBkYXRlIiwgInVwZGF0ZXIiLCAiaXNWYWxpZFRpbWVvdXQiLCAiZW5zdXJlUXVlcnlLZXlBcnJheSIsICJ0aW1lVW50aWxTdGFsZSIsICJ1cGRhdGVkQXQiLCAic3RhbGVUaW1lIiwgInBhcnNlUXVlcnlBcmdzIiwgImFyZzEiLCAiYXJnMiIsICJhcmczIiwgImlzUXVlcnlLZXkiLCAicGFyc2VGaWx0ZXJBcmdzIiwgIm1hcFF1ZXJ5U3RhdHVzRmlsdGVyIiwgImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJpc0FjdGl2ZSIsICJtYXRjaFF1ZXJ5IiwgImZpbHRlcnMiLCAiZXhhY3QiLCAiZmV0Y2hpbmciLCAicXVlcnlLZXkiLCAic3RhbGUiLCAiaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIiwgInBhcnRpYWxNYXRjaEtleSIsICJxdWVyeVN0YXR1c0ZpbHRlciIsICJtYXRjaE11dGF0aW9uIiwgIm11dGF0aW9uIiwgIm11dGF0aW9uS2V5IiwgImhhc2hRdWVyeUtleSIsICJoYXNoRm4iLCAic3RhYmxlVmFsdWVIYXNoIiwgInBhcnRpYWxEZWVwRXF1YWwiLCAicmVwbGFjZUVxdWFsRGVlcCIsICJhU2l6ZSIsICJiSXRlbXMiLCAiYlNpemUiLCAiZXF1YWxJdGVtcyIsICJoYXNPYmplY3RQcm90b3R5cGUiLCAiY3RvciIsICJwcm90IiwgInNsZWVwIiwgInJlc29sdmUiLCAic2NoZWR1bGVNaWNyb3Rhc2siLCAiZ2V0QWJvcnRDb250cm9sbGVyIiwgIkZvY3VzTWFuYWdlciIsICJfU3Vic2NyaWJhYmxlIiwgIl93aW5kb3ciLCAiX3RoaXMkY2xlYW51cCIsICJzZXR1cCIsICJfdGhpcyRjbGVhbnVwMiIsICJmb2N1c01hbmFnZXIiLCAiT25saW5lTWFuYWdlciIsICJvbk9ubGluZSIsICJvbmxpbmUiLCAib25saW5lTWFuYWdlciIsICJkZWZhdWx0UmV0cnlEZWxheSIsICJmYWlsdXJlQ291bnQiLCAiaXNDYW5jZWxhYmxlIiwgIkNhbmNlbGxlZEVycm9yIiwgImlzQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJjYW5jZWxSZXRyeSIsICJjYW5jZWxGbiIsICJjb250aW51ZUZuIiwgInByb21pc2VSZXNvbHZlIiwgInByb21pc2VSZWplY3QiLCAiY2FuY2VsT3B0aW9ucyIsICJvdXRlclJlc29sdmUiLCAib3V0ZXJSZWplY3QiLCAicGF1c2UiLCAiY29udGludWVSZXNvbHZlIiwgInJ1biIsICJwcm9taXNlT3JWYWx1ZSIsICJfY29uZmlnJHJldHJ5IiwgIl9jb25maWckcmV0cnlEZWxheSIsICJyZXRyeSIsICJyZXRyeURlbGF5IiwgInNob3VsZFJldHJ5IiwgIk5vdGlmeU1hbmFnZXIiLCAiX3RoaXMzIiwgInF1ZXVlIiwgIm5vdGlmeU1hbmFnZXIiLCAibG9nZ2VyIiwgImdldExvZ2dlciIsICJzZXRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgIlF1ZXJ5IiwgIl90aGlzJG9wdGlvbnMkY2FjaGVUaSIsICJfdGhpcyRvcHRpb25zJGlzRGF0YUUiLCAiX3RoaXMkb3B0aW9ucyIsICJwcmV2RGF0YSIsICJkYXRhIiwgInNldFN0YXRlT3B0aW9ucyIsICJfdGhpcyRyZXRyeWVyIiwgIl90aGlzJHJldHJ5ZXIyIiwgIl90aGlzJHJldHJ5ZXIzIiwgImZldGNoT3B0aW9ucyIsICJfdGhpcyRvcHRpb25zJGJlaGF2aW8iLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zIiwgIl9hYm9ydENvbnRyb2xsZXIkYWJvciIsICJfdGhpcyRyZXRyeWVyNCIsICJxdWVyeUZuQ29udGV4dCIsICJmZXRjaEZuIiwgIl90aGlzJG9wdGlvbnMkYmVoYXZpbzIiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zMiIsICJoYXNJbml0aWFsRGF0YSIsICJpbml0aWFsRGF0YVVwZGF0ZWRBdCIsICJoYXNEYXRhIiwgIl9hY3Rpb24kbWV0YSIsICJfYWN0aW9uJGRhdGFVcGRhdGVkQXQiLCAiUXVlcnlDYWNoZSIsICJjbGllbnQiLCAiX29wdGlvbnMkcXVlcnlIYXNoIiwgInF1ZXJ5SGFzaCIsICJxdWVyeUluTWFwIiwgIl9wYXJzZUZpbHRlckFyZ3MiLCAiX3BhcnNlRmlsdGVyQXJnczIiLCAiX3RoaXM0IiwgIl90aGlzNSIsICJNdXRhdGlvbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVzdG9yZWQiLCAiX3RoaXMkb3B0aW9ucyRyZXRyeSIsICJNdXRhdGlvbkNhY2hlIiwgInBhdXNlZE11dGF0aW9ucyIsICJpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zMyIsICJfY29udGV4dCRmZXRjaE9wdGlvbnM0IiwgIl9jb250ZXh0JHN0YXRlJGRhdGEiLCAiX2NvbnRleHQkc3RhdGUkZGF0YTIiLCAicmVmZXRjaFBhZ2UiLCAiZmV0Y2hNb3JlIiwgInBhZ2VQYXJhbSIsICJpc0ZldGNoaW5nTmV4dFBhZ2UiLCAiaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSIsICJvbGRQYWdlcyIsICJvbGRQYWdlUGFyYW1zIiwgImFib3J0U2lnbmFsIiwgIm5ld1BhZ2VQYXJhbXMiLCAicXVlcnlGbiIsICJidWlsZE5ld1BhZ2VzIiwgInBhZ2VzIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicXVlcnlGblJlc3VsdCIsICJwcm9taXNlQXNBbnkiLCAiZ2V0TmV4dFBhZ2VQYXJhbSIsICJfbWFudWFsIiwgIl9wYXJhbSIsICJnZXRQcmV2aW91c1BhZ2VQYXJhbSIsICJzaG91bGRGZXRjaEZpcnN0UGFnZSIsICJfbG9vcCIsICJzaG91bGRGZXRjaE5leHRQYWdlIiwgIl9wYXJhbTIiLCAiZmluYWxQcm9taXNlIiwgImZpbmFsUHJvbWlzZUFzQW55IiwgIlF1ZXJ5Q2xpZW50IiwgIl90aGlzJHVuc3Vic2NyaWJlRm9jdSIsICJfdGhpcyR1bnN1YnNjcmliZU9ubGkiLCAiX3RoaXMkcXVlcnlDYWNoZSRmaW5kIiwgInF1ZXJ5S2V5T3JGaWx0ZXJzIiwgInBhcnNlZE9wdGlvbnMiLCAiZGVmYXVsdGVkT3B0aW9ucyIsICJfdGhpcyRxdWVyeUNhY2hlJGZpbmQyIiwgInF1ZXJ5Q2FjaGUiLCAiX3BhcnNlRmlsdGVyQXJnczMiLCAicmVmZXRjaEZpbHRlcnMiLCAiX3BhcnNlRmlsdGVyQXJnczQiLCAiX3BhcnNlRmlsdGVyQXJnczQkIiwgIl9yZWYzIiwgIl9maWx0ZXJzJHJlZmV0Y2hBY3RpdiIsICJfZmlsdGVycyRyZWZldGNoSW5hY3QiLCAiX3BhcnNlRmlsdGVyQXJnczUiLCAiX3RoaXM2IiwgIl9wYXJzZUZpbHRlckFyZ3M2IiwgIl90aGlzNyIsICJfdGhpcyRxdWVyeURlZmF1bHRzJGYiLCAiX3RoaXMkbXV0YXRpb25EZWZhdWx0IiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgIlJlYWN0RE9NIiwgImRlZmF1bHRDb250ZXh0IiwgIlF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQiLCAiZ2V0UXVlcnlDbGllbnRDb250ZXh0IiwgImNvbnRleHRTaGFyaW5nIiwgIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCAiX3JlZiRjb250ZXh0U2hhcmluZyIsICJDb250ZXh0IiwgImNyZWF0ZUVudGl0eVRyZWUiLCAiRW50aXR5VHJlZVdpZGdldCIsICJxdWVyeUNsaWVudCIsICJFbnRpdHlUcmVlV2lkZ2V0SW5uZXIiLCAibG9hZGluZ09udG9sb2d5IiwgImxvYWRpbmdFbnRpdHkiLCAibG9hZGluZ0NsYXNzSW5zdGFuY2VzIiwgImhhbmRsZU5hdmlnYXRlVG9FbnRpdHkiLCAiaGFuZGxlTmF2aWdhdGVUb09udG9sb2d5IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJ4IiwgIlJlYWN0RE9NIiwgInJlbmRlciIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIm5vZGUiLCAiYiIsICJjeWNsZUNoZWNrIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJiIiwgIlJlYWN0IiwgIngiLCAibm9kZSIsICJoaWVyYXJjaHkiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSIsICJSZWFjdCIsICJyZW5kZXIiLCAiZGF0YSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJvbnRvbG9neSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydEZpZWxkIiwgInNvcnREaXJlY3Rpb24iLCAicGFnZU9mSXRlbXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAic2VhcmNoVmFsdWUiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMiLCAicmVuZGVyIiwgIm9wdGlvbiIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJSZWFjdCIsICJwcm9wZXJ0eSIsICJwcmVkaWNhdGVzIiwgImVudGl0eSIsICJpbnN0YW5jZXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iXQp9Cg== diff --git a/dist_plainjs/terminology-service-suite.min.js b/dist_plainjs/terminology-service-suite.min.js index df5938ac..7acd4a68 100644 --- a/dist_plainjs/terminology-service-suite.min.js +++ b/dist_plainjs/terminology-service-suite.min.js @@ -1,21 +1,21 @@ -"use strict";(()=>{var __e=Object.create;var Ez=Object.defineProperty;var S_e=Object.getOwnPropertyDescriptor;var I_e=Object.getOwnPropertyNames;var j_e=Object.getPrototypeOf,E_e=Object.prototype.hasOwnProperty;var rne=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var _e=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$=(e,t)=>{for(var n in t)Ez(e,n,{get:t[n],enumerable:!0})},P_e=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of I_e(t))!E_e.call(e,o)&&o!==n&&Ez(e,o,{get:()=>t[o],enumerable:!(r=S_e(t,o))||r.enumerable});return e};var E=(e,t,n)=>(n=e!=null?__e(j_e(e)):{},P_e(t||!e||!e.__esModule?Ez(n,"default",{value:e,enumerable:!0}):n,e));var Pz=_e(($Rt,one)=>{"use strict";var nne=Object.getOwnPropertySymbols,k_e=Object.prototype.hasOwnProperty,C_e=Object.prototype.propertyIsEnumerable;function A_e(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function M_e(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}one.exports=M_e()?Object.assign:function(e,t){for(var n,r=A_e(e),o,i=1;i{"use strict";var Cz=Pz(),Im=60103,lne=60106;Wr.Fragment=60107;Wr.StrictMode=60108;Wr.Profiler=60114;var sne=60109,une=60110,cne=60112;Wr.Suspense=60113;var pne=60115,fne=60116;typeof Symbol=="function"&&Symbol.for&&(al=Symbol.for,Im=al("react.element"),lne=al("react.portal"),Wr.Fragment=al("react.fragment"),Wr.StrictMode=al("react.strict_mode"),Wr.Profiler=al("react.profiler"),sne=al("react.provider"),une=al("react.context"),cne=al("react.forward_ref"),Wr.Suspense=al("react.suspense"),pne=al("react.memo"),fne=al("react.lazy"));var al,ine=typeof Symbol=="function"&&Symbol.iterator;function T_e(e){return e===null||typeof e!="object"?null:(e=ine&&e[ine]||e["@@iterator"],typeof e=="function"?e:null)}function Yv(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n{"use strict";One.exports=wne()});var Ene=_e(Qr=>{"use strict";var Pm,ey,DS,Bz;typeof performance=="object"&&typeof performance.now=="function"?(xne=performance,Qr.unstable_now=function(){return xne.now()}):(zz=Date,_ne=zz.now(),Qr.unstable_now=function(){return zz.now()-_ne});var xne,zz,_ne;typeof window>"u"||typeof MessageChannel!="function"?(Em=null,Dz=null,Lz=function(){if(Em!==null)try{var e=Qr.unstable_now();Em(!0,e),Em=null}catch(t){throw setTimeout(Lz,0),t}},Pm=function(e){Em!==null?setTimeout(Pm,0,e):(Em=e,setTimeout(Lz,0))},ey=function(e,t){Dz=setTimeout(e,t)},DS=function(){clearTimeout(Dz)},Qr.unstable_shouldYield=function(){return!1},Bz=Qr.unstable_forceFrameRate=function(){}):(Sne=window.setTimeout,Ine=window.clearTimeout,typeof console<"u"&&(jne=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof jne!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),Qv=!1,Zv=null,TS=-1,Nz=5,Fz=0,Qr.unstable_shouldYield=function(){return Qr.unstable_now()>=Fz},Bz=function(){},Qr.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(o!==void 0&&0zS(u,n))d!==void 0&&0>zS(d,u)?(e[r]=d,e[c]=n,r=c):(e[r]=u,e[i]=n,r=i);else if(d!==void 0&&0>zS(d,n))e[r]=d,e[c]=n,r=c;else break e}}return t}return null}function zS(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}var Ds=[],up=[],N_e=1,ll=null,wi=3,NS=!1,id=!1,ty=!1;function Vz(e){for(var t=Jl(up);t!==null;){if(t.callback===null)LS(up);else if(t.startTime<=e)LS(up),t.sortIndex=t.expirationTime,Hz(Ds,t);else break;t=Jl(up)}}function qz(e){if(ty=!1,Vz(e),!id)if(Jl(Ds)!==null)id=!0,Pm(Uz);else{var t=Jl(up);t!==null&&ey(qz,t.startTime-e)}}function Uz(e,t){id=!1,ty&&(ty=!1,DS()),NS=!0;var n=wi;try{for(Vz(t),ll=Jl(Ds);ll!==null&&(!(ll.expirationTime>t)||e&&!Qr.unstable_shouldYield());){var r=ll.callback;if(typeof r=="function"){ll.callback=null,wi=ll.priorityLevel;var o=r(ll.expirationTime<=t);t=Qr.unstable_now(),typeof o=="function"?ll.callback=o:ll===Jl(Ds)&&LS(Ds),Vz(t)}else LS(Ds);ll=Jl(Ds)}if(ll!==null)var i=!0;else{var u=Jl(up);u!==null&&ey(qz,u.startTime-t),i=!1}return i}finally{ll=null,wi=n,NS=!1}}var F_e=Bz;Qr.unstable_IdlePriority=5;Qr.unstable_ImmediatePriority=1;Qr.unstable_LowPriority=4;Qr.unstable_NormalPriority=3;Qr.unstable_Profiling=null;Qr.unstable_UserBlockingPriority=2;Qr.unstable_cancelCallback=function(e){e.callback=null};Qr.unstable_continueExecution=function(){id||NS||(id=!0,Pm(Uz))};Qr.unstable_getCurrentPriorityLevel=function(){return wi};Qr.unstable_getFirstCallbackNode=function(){return Jl(Ds)};Qr.unstable_next=function(e){switch(wi){case 1:case 2:case 3:var t=3;break;default:t=wi}var n=wi;wi=t;try{return e()}finally{wi=n}};Qr.unstable_pauseExecution=function(){};Qr.unstable_requestPaint=F_e;Qr.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=wi;wi=e;try{return t()}finally{wi=n}};Qr.unstable_scheduleCallback=function(e,t,n){var r=Qr.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0r?(e.sortIndex=n,Hz(up,e),Jl(Ds)===null&&e===Jl(up)&&(ty?DS():ty=!0,ey(qz,n-r))):(e.sortIndex=o,Hz(Ds,e),id||NS||(id=!0,Pm(Uz))),e};Qr.unstable_wrapCallback=function(e){var t=wi;return function(){var n=wi;wi=t;try{return e.apply(this,arguments)}finally{wi=n}}}});var kne=_e((KRt,Pne)=>{"use strict";Pne.exports=Ene()});var hae=_e(dl=>{"use strict";var AI=D(),Dn=Pz(),zo=kne();function ot(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),W_e=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Cne=Object.prototype.hasOwnProperty,Ane={},Mne={};function B_e(e){return Cne.call(Mne,e)?!0:Cne.call(Ane,e)?!1:W_e.test(e)?Mne[e]=!0:(Ane[e]=!0,!1)}function H_e(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function V_e(e,t,n,r){if(t===null||typeof t>"u"||H_e(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Li(e,t,n,r,o,i,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=u}var ti={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ti[e]=new Li(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ti[t]=new Li(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ti[e]=new Li(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ti[e]=new Li(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ti[e]=new Li(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ti[e]=new Li(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ti[e]=new Li(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ti[e]=new Li(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ti[e]=new Li(e,5,!1,e.toLowerCase(),null,!1,!1)});var eL=/[\-:]([a-z])/g;function tL(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(eL,tL);ti[t]=new Li(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(eL,tL);ti[t]=new Li(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(eL,tL);ti[t]=new Li(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ti[e]=new Li(e,1,!1,e.toLowerCase(),null,!1,!1)});ti.xlinkHref=new Li("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ti[e]=new Li(e,1,!1,e.toLowerCase(),null,!0,!0)});function rL(e,t,n,r){var o=ti.hasOwnProperty(t)?ti[t]:null,i=o!==null?o.type===0:r?!1:!(!(2{var M_e=Object.create;var kz=Object.defineProperty;var T_e=Object.getOwnPropertyDescriptor;var R_e=Object.getOwnPropertyNames;var z_e=Object.getPrototypeOf,D_e=Object.prototype.hasOwnProperty;var lne=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var _e=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$=(e,t)=>{for(var n in t)kz(e,n,{get:t[n],enumerable:!0})},L_e=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of R_e(t))!D_e.call(e,o)&&o!==n&&kz(e,o,{get:()=>t[o],enumerable:!(r=T_e(t,o))||r.enumerable});return e};var E=(e,t,n)=>(n=e!=null?M_e(z_e(e)):{},L_e(t||!e||!e.__esModule?kz(n,"default",{value:e,enumerable:!0}):n,e));var Cz=_e((rzt,une)=>{"use strict";var sne=Object.getOwnPropertySymbols,N_e=Object.prototype.hasOwnProperty,F_e=Object.prototype.propertyIsEnumerable;function W_e(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function B_e(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}une.exports=B_e()?Object.assign:function(e,t){for(var n,r=W_e(e),o,i=1;i{"use strict";var Mz=Cz(),Pm=60103,fne=60106;Wr.Fragment=60107;Wr.StrictMode=60108;Wr.Profiler=60114;var dne=60109,mne=60110,hne=60112;Wr.Suspense=60113;var gne=60115,vne=60116;typeof Symbol=="function"&&Symbol.for&&(sl=Symbol.for,Pm=sl("react.element"),fne=sl("react.portal"),Wr.Fragment=sl("react.fragment"),Wr.StrictMode=sl("react.strict_mode"),Wr.Profiler=sl("react.profiler"),dne=sl("react.provider"),mne=sl("react.context"),hne=sl("react.forward_ref"),Wr.Suspense=sl("react.suspense"),gne=sl("react.memo"),vne=sl("react.lazy"));var sl,cne=typeof Symbol=="function"&&Symbol.iterator;function H_e(e){return e===null||typeof e!="object"?null:(e=cne&&e[cne]||e["@@iterator"],typeof e=="function"?e:null)}function Zv(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n{"use strict";jne.exports=Ine()});var Mne=_e(Qr=>{"use strict";var Am,ry,LS,Vz;typeof performance=="object"&&typeof performance.now=="function"?(Ene=performance,Qr.unstable_now=function(){return Ene.now()}):(Lz=Date,Pne=Lz.now(),Qr.unstable_now=function(){return Lz.now()-Pne});var Ene,Lz,Pne;typeof window>"u"||typeof MessageChannel!="function"?(Cm=null,Nz=null,Fz=function(){if(Cm!==null)try{var e=Qr.unstable_now();Cm(!0,e),Cm=null}catch(t){throw setTimeout(Fz,0),t}},Am=function(e){Cm!==null?setTimeout(Am,0,e):(Cm=e,setTimeout(Fz,0))},ry=function(e,t){Nz=setTimeout(e,t)},LS=function(){clearTimeout(Nz)},Qr.unstable_shouldYield=function(){return!1},Vz=Qr.unstable_forceFrameRate=function(){}):(kne=window.setTimeout,Cne=window.clearTimeout,typeof console<"u"&&(Ane=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof Ane!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),ey=!1,ty=null,RS=-1,Wz=5,Bz=0,Qr.unstable_shouldYield=function(){return Qr.unstable_now()>=Bz},Vz=function(){},Qr.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(o!==void 0&&0DS(u,n))d!==void 0&&0>DS(d,u)?(e[r]=d,e[c]=n,r=c):(e[r]=u,e[i]=n,r=i);else if(d!==void 0&&0>DS(d,n))e[r]=d,e[c]=n,r=c;else break e}}return t}return null}function DS(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}var Ls=[],pp=[],J_e=1,ul=null,wi=3,FS=!1,ld=!1,ny=!1;function Uz(e){for(var t=Gl(pp);t!==null;){if(t.callback===null)NS(pp);else if(t.startTime<=e)NS(pp),t.sortIndex=t.expirationTime,qz(Ls,t);else break;t=Gl(pp)}}function $z(e){if(ny=!1,Uz(e),!ld)if(Gl(Ls)!==null)ld=!0,Am(Jz);else{var t=Gl(pp);t!==null&&ry($z,t.startTime-e)}}function Jz(e,t){ld=!1,ny&&(ny=!1,LS()),FS=!0;var n=wi;try{for(Uz(t),ul=Gl(Ls);ul!==null&&(!(ul.expirationTime>t)||e&&!Qr.unstable_shouldYield());){var r=ul.callback;if(typeof r=="function"){ul.callback=null,wi=ul.priorityLevel;var o=r(ul.expirationTime<=t);t=Qr.unstable_now(),typeof o=="function"?ul.callback=o:ul===Gl(Ls)&&NS(Ls),Uz(t)}else NS(Ls);ul=Gl(Ls)}if(ul!==null)var i=!0;else{var u=Gl(pp);u!==null&&ry($z,u.startTime-t),i=!1}return i}finally{ul=null,wi=n,FS=!1}}var G_e=Vz;Qr.unstable_IdlePriority=5;Qr.unstable_ImmediatePriority=1;Qr.unstable_LowPriority=4;Qr.unstable_NormalPriority=3;Qr.unstable_Profiling=null;Qr.unstable_UserBlockingPriority=2;Qr.unstable_cancelCallback=function(e){e.callback=null};Qr.unstable_continueExecution=function(){ld||FS||(ld=!0,Am(Jz))};Qr.unstable_getCurrentPriorityLevel=function(){return wi};Qr.unstable_getFirstCallbackNode=function(){return Gl(Ls)};Qr.unstable_next=function(e){switch(wi){case 1:case 2:case 3:var t=3;break;default:t=wi}var n=wi;wi=t;try{return e()}finally{wi=n}};Qr.unstable_pauseExecution=function(){};Qr.unstable_requestPaint=G_e;Qr.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=wi;wi=e;try{return t()}finally{wi=n}};Qr.unstable_scheduleCallback=function(e,t,n){var r=Qr.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0r?(e.sortIndex=n,qz(pp,e),Gl(Ls)===null&&e===Gl(pp)&&(ny?LS():ny=!0,ry($z,n-r))):(e.sortIndex=o,qz(Ls,e),ld||FS||(ld=!0,Am(Jz))),e};Qr.unstable_wrapCallback=function(e){var t=wi;return function(){var n=wi;wi=t;try{return e.apply(this,arguments)}finally{wi=n}}}});var Rne=_e((azt,Tne)=>{"use strict";Tne.exports=Mne()});var wae=_e(hl=>{"use strict";var MI=L(),Dn=Cz(),Do=Rne();function ot(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),X_e=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,zne=Object.prototype.hasOwnProperty,Dne={},Lne={};function K_e(e){return zne.call(Lne,e)?!0:zne.call(Dne,e)?!1:X_e.test(e)?Lne[e]=!0:(Dne[e]=!0,!1)}function Y_e(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Q_e(e,t,n,r){if(t===null||typeof t>"u"||Y_e(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Li(e,t,n,r,o,i,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=u}var ti={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ti[e]=new Li(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ti[t]=new Li(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ti[e]=new Li(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ti[e]=new Li(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ti[e]=new Li(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ti[e]=new Li(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ti[e]=new Li(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ti[e]=new Li(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ti[e]=new Li(e,5,!1,e.toLowerCase(),null,!1,!1)});var rL=/[\-:]([a-z])/g;function nL(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(rL,nL);ti[t]=new Li(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(rL,nL);ti[t]=new Li(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(rL,nL);ti[t]=new Li(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ti[e]=new Li(e,1,!1,e.toLowerCase(),null,!1,!1)});ti.xlinkHref=new Li("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ti[e]=new Li(e,1,!1,e.toLowerCase(),null,!0,!0)});function oL(e,t,n,r){var o=ti.hasOwnProperty(t)?ti[t]:null,i=o!==null?o.type===0:r?!1:!(!(2c||o[u]!==i[c])return` -`+o[u].replace(" at new "," at ");while(1<=u&&0<=c);break}}}finally{Jz=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?hy(e):""}function q_e(e){switch(e.tag){case 5:return hy(e.type);case 16:return hy("Lazy");case 13:return hy("Suspense");case 19:return hy("SuspenseList");case 0:case 2:case 15:return e=FS(e.type,!1),e;case 11:return e=FS(e.type.render,!1),e;case 22:return e=FS(e.type._render,!1),e;case 1:return e=FS(e.type,!0),e;default:return""}}function Fm(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case pp:return"Fragment";case ld:return"Portal";case by:return"Profiler";case nL:return"StrictMode";case wy:return"Suspense";case sI:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case iL:return(e.displayName||"Context")+".Consumer";case oL:return(e._context.displayName||"Context")+".Provider";case MI:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case TI:return Fm(e.type);case lL:return Fm(e._render);case aL:t=e._payload,e=e._init;try{return Fm(e(t))}catch{}}return null}function _p(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function qoe(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function U_e(e){var t=qoe(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(u){r=""+u,i.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function WS(e){e._valueTracker||(e._valueTracker=U_e(e))}function Uoe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=qoe(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function uI(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function hD(e,t){var n=t.checked;return Dn({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Rne(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=_p(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function $oe(e,t){t=t.checked,t!=null&&rL(e,"checked",t,!1)}function gD(e,t){$oe(e,t);var n=_p(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?vD(e,t.type,n):t.hasOwnProperty("defaultValue")&&vD(e,t.type,_p(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function zne(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function vD(e,t,n){(t!=="number"||uI(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function $_e(e){var t="";return AI.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function yD(e,t){return e=Dn({children:void 0},t),(t=$_e(t.children))&&(e.children=t),e}function Wm(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(ot(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:_p(n)}}function Joe(e,t){var n=_p(t.value),r=_p(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function Lne(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var wD={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Goe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function OD(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Goe(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var BS,Xoe=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==wD.svg||"innerHTML"in e)e.innerHTML=t;else{for(BS=BS||document.createElement("div"),BS.innerHTML=""+t.valueOf().toString()+"",t=BS.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function My(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Oy={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},J_e=["Webkit","ms","Moz","O"];Object.keys(Oy).forEach(function(e){J_e.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Oy[t]=Oy[e]})});function Koe(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Oy.hasOwnProperty(e)&&Oy[e]?(""+t).trim():t+"px"}function Yoe(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=Koe(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var G_e=Dn({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xD(e,t){if(t){if(G_e[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ot(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ot(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(ot(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ot(62))}}function _D(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function cL(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var SD=null,Bm=null,Hm=null;function Nne(e){if(e=$y(e)){if(typeof SD!="function")throw Error(ot(280));var t=e.stateNode;t&&(t=FI(t),SD(e.stateNode,e.type,t))}}function Qoe(e){Bm?Hm?Hm.push(e):Hm=[e]:Bm=e}function Zoe(){if(Bm){var e=Bm,t=Hm;if(Hm=Bm=null,Nne(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function zI(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-Sp(t),e[t]=n}var Sp=Math.clz32?Math.clz32:cSe,sSe=Math.log,uSe=Math.LN2;function cSe(e){return e===0?32:31-(sSe(e)/uSe|0)|0}var pSe=zo.unstable_UserBlockingPriority,fSe=zo.unstable_runWithPriority,ZS=!0;function dSe(e,t,n,r){sd||fL();var o=vL,i=sd;sd=!0;try{eie(o,e,t,n,r)}finally{(sd=i)||dL()}}function mSe(e,t,n,r){fSe(pSe,vL.bind(null,e,t,n,r))}function vL(e,t,n,r){if(ZS){var o;if((o=(t&4)===0)&&0=_y),Gne=String.fromCharCode(32),Xne=!1;function vie(e,t){switch(e){case"keyup":return LSe.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yie(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Rm=!1;function FSe(e,t){switch(e){case"compositionend":return yie(t);case"keypress":return t.which!==32?null:(Xne=!0,Gne);case"textInput":return e=t.data,e===Gne&&Xne?null:e;default:return null}}function WSe(e,t){if(Rm)return e==="compositionend"||!xL&&vie(e,t)?(e=hie(),eI=bL=fp=null,Rm=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Qne(n)}}function xie(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?xie(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function eoe(){for(var e=window,t=uI();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=uI(e.document)}return t}function kD(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var KSe=Vu&&"documentMode"in document&&11>=document.documentMode,zm=null,CD=null,Iy=null,AD=!1;function toe(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;AD||zm==null||zm!==uI(r)||(r=zm,"selectionStart"in r&&kD(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Iy&&Ny(Iy,r)||(Iy=r,r=dI(CD,"onSelect"),0Lm||(e.current=TD[Lm],TD[Lm]=null,Lm--)}function Xn(e,t){Lm++,TD[Lm]=e.current,e.current=t}var Ip={},Si=Pp(Ip),ia=Pp(!1),dd=Ip;function Km(e,t){var n=e.type.contextTypes;if(!n)return Ip;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function aa(e){return e=e.childContextTypes,e!=null}function gI(){Pn(ia),Pn(Si)}function uoe(e,t,n){if(Si.current!==Ip)throw Error(ot(168));Xn(Si,t),Xn(ia,n)}function Cie(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(ot(108,Fm(t)||"Unknown",o));return Dn({},n,r)}function rI(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ip,dd=Si.current,Xn(Si,e),Xn(ia,ia.current),!0}function coe(e,t,n){var r=e.stateNode;if(!r)throw Error(ot(169));n?(e=Cie(e,t,dd),r.__reactInternalMemoizedMergedChildContext=e,Pn(ia),Pn(Si),Xn(Si,e)):Pn(ia),Xn(ia,n)}var SL=null,fd=null,ZSe=zo.unstable_runWithPriority,IL=zo.unstable_scheduleCallback,RD=zo.unstable_cancelCallback,eIe=zo.unstable_shouldYield,poe=zo.unstable_requestPaint,zD=zo.unstable_now,tIe=zo.unstable_getCurrentPriorityLevel,WI=zo.unstable_ImmediatePriority,Aie=zo.unstable_UserBlockingPriority,Mie=zo.unstable_NormalPriority,Tie=zo.unstable_LowPriority,Rie=zo.unstable_IdlePriority,iD={},rIe=poe!==void 0?poe:function(){},Nu=null,nI=null,aD=!1,foe=zD(),xi=1e4>foe?zD:function(){return zD()-foe};function Ym(){switch(tIe()){case WI:return 99;case Aie:return 98;case Mie:return 97;case Tie:return 96;case Rie:return 95;default:throw Error(ot(332))}}function zie(e){switch(e){case 99:return WI;case 98:return Aie;case 97:return Mie;case 96:return Tie;case 95:return Rie;default:throw Error(ot(332))}}function md(e,t){return e=zie(e),ZSe(e,t)}function Wy(e,t,n){return e=zie(e),IL(e,t,n)}function Hs(){if(nI!==null){var e=nI;nI=null,RD(e)}Die()}function Die(){if(!aD&&Nu!==null){aD=!0;var e=0;try{var t=Nu;md(99,function(){for(;eH?(ne=K,K=null):ne=K.sibling;var pe=I(M,K,N[H],U);if(pe===null){K===null&&(K=ne);break}e&&K&&pe.alternate===null&&t(M,K),T=i(pe,T,H),Y===null?X=pe:Y.sibling=pe,Y=pe,K=ne}if(H===N.length)return n(M,K),X;if(K===null){for(;HH?(ne=K,K=null):ne=K.sibling;var ye=I(M,K,pe.value,U);if(ye===null){K===null&&(K=ne);break}e&&K&&ye.alternate===null&&t(M,K),T=i(ye,T,H),Y===null?X=ye:Y.sibling=ye,Y=ye,K=ne}if(pe.done)return n(M,K),X;if(K===null){for(;!pe.done;H++,pe=N.next())pe=S(M,pe.value,U),pe!==null&&(T=i(pe,T,H),Y===null?X=pe:Y.sibling=pe,Y=pe);return X}for(K=r(M,K);!pe.done;H++,pe=N.next())pe=R(K,M,H,pe.value,U),pe!==null&&(e&&pe.alternate!==null&&K.delete(pe.key===null?H:pe.key),T=i(pe,T,H),Y===null?X=pe:Y.sibling=pe,Y=pe);return e&&K.forEach(function(fe){return t(M,fe)}),X}return function(M,T,N,U){var X=typeof N=="object"&&N!==null&&N.type===pp&&N.key===null;X&&(N=N.props.children);var Y=typeof N=="object"&&N!==null;if(Y)switch(N.$$typeof){case my:e:{for(Y=N.key,X=T;X!==null;){if(X.key===Y){switch(X.tag){case 7:if(N.type===pp){n(M,X.sibling),T=o(X,N.props.children),T.return=M,M=T;break e}break;default:if(X.elementType===N.type){n(M,X.sibling),T=o(X,N.props),T.ref=ly(M,X,N),T.return=M,M=T;break e}}n(M,X);break}else t(M,X);X=X.sibling}N.type===pp?(T=Gm(N.props.children,M.mode,U,N.key),T.return=M,M=T):(U=lI(N.type,N.key,N.props,null,M.mode,U),U.ref=ly(M,T,N),U.return=M,M=U)}return u(M);case ld:e:{for(X=N.key;T!==null;){if(T.key===X)if(T.tag===4&&T.stateNode.containerInfo===N.containerInfo&&T.stateNode.implementation===N.implementation){n(M,T.sibling),T=o(T,N.children||[]),T.return=M,M=T;break e}else{n(M,T);break}else t(M,T);T=T.sibling}T=fD(N,M.mode,U),T.return=M,M=T}return u(M)}if(typeof N=="string"||typeof N=="number")return N=""+N,T!==null&&T.tag===6?(n(M,T.sibling),T=o(T,N),T.return=M,M=T):(n(M,T),T=pD(N,M.mode,U),T.return=M,M=T),u(M);if(JS(N))return k(M,T,N,U);if(ry(N))return A(M,T,N,U);if(Y&&GS(M,N),typeof N>"u"&&!X)switch(M.tag){case 1:case 22:case 0:case 11:case 15:throw Error(ot(152,Fm(M.type)||"Component"))}return n(M,T)}}var OI=Bie(!0),Hie=Bie(!1),Jy={},Ws=Pp(Jy),Hy=Pp(Jy),Vy=Pp(Jy);function cd(e){if(e===Jy)throw Error(ot(174));return e}function LD(e,t){switch(Xn(Vy,t),Xn(Hy,e),Xn(Ws,Jy),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:OD(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=OD(t,e)}Pn(Ws),Xn(Ws,t)}function Qm(){Pn(Ws),Pn(Hy),Pn(Vy)}function voe(e){cd(Vy.current);var t=cd(Ws.current),n=OD(t,e.type);t!==n&&(Xn(Hy,e),Xn(Ws,n))}function kL(e){Hy.current===e&&(Pn(Ws),Pn(Hy))}var Gn=Pp(0);function xI(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Wu=null,mp=null,Bs=!1;function Vie(e,t){var n=ul(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function yoe(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function ND(e){if(Bs){var t=mp;if(t){var n=t;if(!yoe(e,t)){if(t=Vm(n.nextSibling),!t||!yoe(e,t)){e.flags=e.flags&-1025|2,Bs=!1,Wu=e;return}Vie(Wu,n)}Wu=e,mp=Vm(t.firstChild)}else e.flags=e.flags&-1025|2,Bs=!1,Wu=e}}function boe(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Wu=e}function XS(e){if(e!==Wu)return!1;if(!Bs)return boe(e),Bs=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!MD(t,e.memoizedProps))for(t=mp;t;)Vie(e,t),t=Vm(t.nextSibling);if(boe(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(ot(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){mp=Vm(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}mp=null}}else mp=Wu?Vm(e.stateNode.nextSibling):null;return!0}function lD(){mp=Wu=null,Bs=!1}var Um=[];function CL(){for(var e=0;ei))throw Error(ot(301));i+=1,Zo=Oi=null,t.updateQueue=null,jy.current=lIe,e=n(r,o)}while(Ey)}if(jy.current=EI,t=Oi!==null&&Oi.next!==null,qy=0,Zo=Oi=no=null,_I=!1,t)throw Error(ot(300));return e}function pd(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Zo===null?no.memoizedState=Zo=e:Zo=Zo.next=e,Zo}function bd(){if(Oi===null){var e=no.alternate;e=e!==null?e.memoizedState:null}else e=Oi.next;var t=Zo===null?no.memoizedState:Zo.next;if(t!==null)Zo=t,Oi=e;else{if(e===null)throw Error(ot(310));Oi=e,e={memoizedState:Oi.memoizedState,baseState:Oi.baseState,baseQueue:Oi.baseQueue,queue:Oi.queue,next:null},Zo===null?no.memoizedState=Zo=e:Zo=Zo.next=e}return Zo}function Ns(e,t){return typeof t=="function"?t(e):t}function sy(e){var t=bd(),n=t.queue;if(n===null)throw Error(ot(311));n.lastRenderedReducer=e;var r=Oi,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var c=u=i=null,d=o;do{var g=d.lane;if((qy&g)===g)c!==null&&(c=c.next={lane:0,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null}),r=d.eagerReducer===e?d.eagerState:e(r,d.action);else{var O={lane:g,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null};c===null?(u=c=O,i=r):c=c.next=O,no.lanes|=g,Gy|=g}d=d.next}while(d!==null&&d!==o);c===null?i=r:c.next=u,sl(r,t.memoizedState)||(Xl=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function uy(e){var t=bd(),n=t.queue;if(n===null)throw Error(ot(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var u=o=o.next;do i=e(i,u.action),u=u.next;while(u!==o);sl(i,t.memoizedState)||(Xl=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function woe(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(qy&e)===e)&&(t._workInProgressVersionPrimary=r,Um.push(t))),e)return n(t._source);throw Um.push(t),Error(ot(350))}function qie(e,t,n,r){var o=Di;if(o===null)throw Error(ot(349));var i=t._getVersion,u=i(t._source),c=jy.current,d=c.useState(function(){return woe(o,t,n)}),g=d[1],O=d[0];d=Zo;var S=e.memoizedState,I=S.refs,R=I.getSnapshot,k=S.source;S=S.subscribe;var A=no;return e.memoizedState={refs:I,source:t,subscribe:r},c.useEffect(function(){I.getSnapshot=n,I.setSnapshot=g;var M=i(t._source);if(!sl(u,M)){M=n(t._source),sl(O,M)||(g(M),M=wp(A),o.mutableReadLanes|=M&o.pendingLanes),M=o.mutableReadLanes,o.entangledLanes|=M;for(var T=o.entanglements,N=M;0n?98:n,function(){e(!0)}),md(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[dp]=t,e[hI]=r,Zie(e,t,!1,!1),t.stateNode=e,u=_D(n,r),n){case"dialog":En("cancel",e),En("close",e),o=r;break;case"iframe":case"object":case"embed":En("load",e),o=r;break;case"video":case"audio":for(o=0;oGD&&(t.flags|=64,i=!0,py(r,!1),t.lanes=33554432)}else{if(!i)if(e=xI(u),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),py(r,!0),r.tail===null&&r.tailMode==="hidden"&&!u.alternate&&!Bs)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*xi()-r.renderingStartTime>GD&&n!==1073741824&&(t.flags|=64,i=!0,py(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(n=r.last,n!==null?n.sibling=u:t.child=u,r.last=u)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=xi(),n.sibling=null,t=Gn.current,Xn(Gn,i?t&1|2:t&1),n):null;case 23:case 24:return WL(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(ot(156,t.tag))}function cIe(e){switch(e.tag){case 1:aa(e.type)&&gI();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(Qm(),Pn(ia),Pn(Si),CL(),t=e.flags,t&64)throw Error(ot(285));return e.flags=t&-4097|64,e;case 5:return kL(e),null;case 13:return Pn(Gn),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Pn(Gn),null;case 4:return Qm(),null;case 10:return EL(e),null;case 23:case 24:return WL(),null;default:return null}}function DL(e,t){try{var n="",r=t;do n+=q_e(r),r=r.return;while(r);var o=n}catch(i){o=` +`+o[u].replace(" at new "," at ");while(1<=u&&0<=c);break}}}finally{Xz=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?vy(e):""}function Z_e(e){switch(e.tag){case 5:return vy(e.type);case 16:return vy("Lazy");case 13:return vy("Suspense");case 19:return vy("SuspenseList");case 0:case 2:case 15:return e=WS(e.type,!1),e;case 11:return e=WS(e.type.render,!1),e;case 22:return e=WS(e.type._render,!1),e;case 1:return e=WS(e.type,!0),e;default:return""}}function Hm(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case dp:return"Fragment";case ud:return"Portal";case Oy:return"Profiler";case iL:return"StrictMode";case xy:return"Suspense";case uI:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case lL:return(e.displayName||"Context")+".Consumer";case aL:return(e._context.displayName||"Context")+".Provider";case TI:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case RI:return Hm(e.type);case uL:return Hm(e._render);case sL:t=e._payload,e=e._init;try{return Hm(e(t))}catch{}}return null}function Ip(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Xoe(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function eSe(e){var t=Xoe(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(u){r=""+u,i.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function BS(e){e._valueTracker||(e._valueTracker=eSe(e))}function Koe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Xoe(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function cI(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function vD(e,t){var n=t.checked;return Dn({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Fne(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Ip(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Yoe(e,t){t=t.checked,t!=null&&oL(e,"checked",t,!1)}function yD(e,t){Yoe(e,t);var n=Ip(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?bD(e,t.type,n):t.hasOwnProperty("defaultValue")&&bD(e,t.type,Ip(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Wne(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function bD(e,t,n){(t!=="number"||cI(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function tSe(e){var t="";return MI.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function wD(e,t){return e=Dn({children:void 0},t),(t=tSe(t.children))&&(e.children=t),e}function Vm(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(ot(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:Ip(n)}}function Qoe(e,t){var n=Ip(t.value),r=Ip(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function Hne(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var xD={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Zoe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function _D(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Zoe(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var HS,eie=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==xD.svg||"innerHTML"in e)e.innerHTML=t;else{for(HS=HS||document.createElement("div"),HS.innerHTML=""+t.valueOf().toString()+"",t=HS.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Ry(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var _y={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rSe=["Webkit","ms","Moz","O"];Object.keys(_y).forEach(function(e){rSe.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),_y[t]=_y[e]})});function tie(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||_y.hasOwnProperty(e)&&_y[e]?(""+t).trim():t+"px"}function rie(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=tie(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var nSe=Dn({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function SD(e,t){if(t){if(nSe[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ot(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ot(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(ot(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ot(62))}}function ID(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function fL(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var jD=null,qm=null,Um=null;function Vne(e){if(e=Gy(e)){if(typeof jD!="function")throw Error(ot(280));var t=e.stateNode;t&&(t=WI(t),jD(e.stateNode,e.type,t))}}function nie(e){qm?Um?Um.push(e):Um=[e]:qm=e}function oie(){if(qm){var e=qm,t=Um;if(Um=qm=null,Vne(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function DI(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-jp(t),e[t]=n}var jp=Math.clz32?Math.clz32:bSe,vSe=Math.log,ySe=Math.LN2;function bSe(e){return e===0?32:31-(vSe(e)/ySe|0)|0}var wSe=Do.unstable_UserBlockingPriority,OSe=Do.unstable_runWithPriority,eI=!0;function xSe(e,t,n,r){cd||mL();var o=bL,i=cd;cd=!0;try{iie(o,e,t,n,r)}finally{(cd=i)||hL()}}function _Se(e,t,n,r){OSe(wSe,bL.bind(null,e,t,n,r))}function bL(e,t,n,r){if(eI){var o;if((o=(t&4)===0)&&0=Iy),Zne=String.fromCharCode(32),eoe=!1;function xie(e,t){switch(e){case"keyup":return $Se.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function _ie(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Lm=!1;function GSe(e,t){switch(e){case"compositionend":return _ie(t);case"keypress":return t.which!==32?null:(eoe=!0,Zne);case"textInput":return e=t.data,e===Zne&&eoe?null:e;default:return null}}function XSe(e,t){if(Lm)return e==="compositionend"||!SL&&xie(e,t)?(e=wie(),tI=OL=mp=null,Lm=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=noe(n)}}function Eie(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Eie(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ioe(){for(var e=window,t=cI();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=cI(e.document)}return t}function AD(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var iIe=qu&&"documentMode"in document&&11>=document.documentMode,Nm=null,MD=null,Ey=null,TD=!1;function aoe(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;TD||Nm==null||Nm!==cI(r)||(r=Nm,"selectionStart"in r&&AD(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ey&&Wy(Ey,r)||(Ey=r,r=mI(MD,"onSelect"),0Wm||(e.current=zD[Wm],zD[Wm]=null,Wm--)}function Xn(e,t){Wm++,zD[Wm]=e.current,e.current=t}var Ep={},Si=Cp(Ep),ia=Cp(!1),hd=Ep;function Zm(e,t){var n=e.type.contextTypes;if(!n)return Ep;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function aa(e){return e=e.childContextTypes,e!=null}function vI(){Pn(ia),Pn(Si)}function moe(e,t,n){if(Si.current!==Ep)throw Error(ot(168));Xn(Si,t),Xn(ia,n)}function zie(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(ot(108,Hm(t)||"Unknown",o));return Dn({},n,r)}function nI(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ep,hd=Si.current,Xn(Si,e),Xn(ia,ia.current),!0}function hoe(e,t,n){var r=e.stateNode;if(!r)throw Error(ot(169));n?(e=zie(e,t,hd),r.__reactInternalMemoizedMergedChildContext=e,Pn(ia),Pn(Si),Xn(Si,e)):Pn(ia),Xn(ia,n)}var jL=null,md=null,sIe=Do.unstable_runWithPriority,EL=Do.unstable_scheduleCallback,DD=Do.unstable_cancelCallback,uIe=Do.unstable_shouldYield,goe=Do.unstable_requestPaint,LD=Do.unstable_now,cIe=Do.unstable_getCurrentPriorityLevel,BI=Do.unstable_ImmediatePriority,Die=Do.unstable_UserBlockingPriority,Lie=Do.unstable_NormalPriority,Nie=Do.unstable_LowPriority,Fie=Do.unstable_IdlePriority,lD={},pIe=goe!==void 0?goe:function(){},Fu=null,oI=null,sD=!1,voe=LD(),xi=1e4>voe?LD:function(){return LD()-voe};function e1(){switch(cIe()){case BI:return 99;case Die:return 98;case Lie:return 97;case Nie:return 96;case Fie:return 95;default:throw Error(ot(332))}}function Wie(e){switch(e){case 99:return BI;case 98:return Die;case 97:return Lie;case 96:return Nie;case 95:return Fie;default:throw Error(ot(332))}}function gd(e,t){return e=Wie(e),sIe(e,t)}function Hy(e,t,n){return e=Wie(e),EL(e,t,n)}function Vs(){if(oI!==null){var e=oI;oI=null,DD(e)}Bie()}function Bie(){if(!sD&&Fu!==null){sD=!0;var e=0;try{var t=Fu;gd(99,function(){for(;eB?(ne=K,K=null):ne=K.sibling;var pe=I(C,K,D[B],U);if(pe===null){K===null&&(K=ne);break}e&&K&&pe.alternate===null&&t(C,K),T=i(pe,T,B),Y===null?G=pe:Y.sibling=pe,Y=pe,K=ne}if(B===D.length)return n(C,K),G;if(K===null){for(;BB?(ne=K,K=null):ne=K.sibling;var ve=I(C,K,pe.value,U);if(ve===null){K===null&&(K=ne);break}e&&K&&ve.alternate===null&&t(C,K),T=i(ve,T,B),Y===null?G=ve:Y.sibling=ve,Y=ve,K=ne}if(pe.done)return n(C,K),G;if(K===null){for(;!pe.done;B++,pe=D.next())pe=S(C,pe.value,U),pe!==null&&(T=i(pe,T,B),Y===null?G=pe:Y.sibling=pe,Y=pe);return G}for(K=r(C,K);!pe.done;B++,pe=D.next())pe=R(K,C,B,pe.value,U),pe!==null&&(e&&pe.alternate!==null&&K.delete(pe.key===null?B:pe.key),T=i(pe,T,B),Y===null?G=pe:Y.sibling=pe,Y=pe);return e&&K.forEach(function(de){return t(C,de)}),G}return function(C,T,D,U){var G=typeof D=="object"&&D!==null&&D.type===dp&&D.key===null;G&&(D=D.props.children);var Y=typeof D=="object"&&D!==null;if(Y)switch(D.$$typeof){case gy:e:{for(Y=D.key,G=T;G!==null;){if(G.key===Y){switch(G.tag){case 7:if(D.type===dp){n(C,G.sibling),T=o(G,D.props.children),T.return=C,C=T;break e}break;default:if(G.elementType===D.type){n(C,G.sibling),T=o(G,D.props),T.ref=uy(C,G,D),T.return=C,C=T;break e}}n(C,G);break}else t(C,G);G=G.sibling}D.type===dp?(T=Ym(D.props.children,C.mode,U,D.key),T.return=C,C=T):(U=sI(D.type,D.key,D.props,null,C.mode,U),U.ref=uy(C,T,D),U.return=C,C=U)}return u(C);case ud:e:{for(G=D.key;T!==null;){if(T.key===G)if(T.tag===4&&T.stateNode.containerInfo===D.containerInfo&&T.stateNode.implementation===D.implementation){n(C,T.sibling),T=o(T,D.children||[]),T.return=C,C=T;break e}else{n(C,T);break}else t(C,T);T=T.sibling}T=mD(D,C.mode,U),T.return=C,C=T}return u(C)}if(typeof D=="string"||typeof D=="number")return D=""+D,T!==null&&T.tag===6?(n(C,T.sibling),T=o(T,D),T.return=C,C=T):(n(C,T),T=dD(D,C.mode,U),T.return=C,C=T),u(C);if(GS(D))return k(C,T,D,U);if(oy(D))return M(C,T,D,U);if(Y&&XS(C,D),typeof D>"u"&&!G)switch(C.tag){case 1:case 22:case 0:case 11:case 15:throw Error(ot(152,Hm(C.type)||"Component"))}return n(C,T)}}var xI=$ie(!0),Jie=$ie(!1),Xy={},Bs=Cp(Xy),qy=Cp(Xy),Uy=Cp(Xy);function fd(e){if(e===Xy)throw Error(ot(174));return e}function FD(e,t){switch(Xn(Uy,t),Xn(qy,e),Xn(Bs,Xy),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:_D(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=_D(t,e)}Pn(Bs),Xn(Bs,t)}function t1(){Pn(Bs),Pn(qy),Pn(Uy)}function xoe(e){fd(Uy.current);var t=fd(Bs.current),n=_D(t,e.type);t!==n&&(Xn(qy,e),Xn(Bs,n))}function AL(e){qy.current===e&&(Pn(Bs),Pn(qy))}var Gn=Cp(0);function _I(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Bu=null,gp=null,Hs=!1;function Gie(e,t){var n=pl(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function _oe(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function WD(e){if(Hs){var t=gp;if(t){var n=t;if(!_oe(e,t)){if(t=$m(n.nextSibling),!t||!_oe(e,t)){e.flags=e.flags&-1025|2,Hs=!1,Bu=e;return}Gie(Bu,n)}Bu=e,gp=$m(t.firstChild)}else e.flags=e.flags&-1025|2,Hs=!1,Bu=e}}function Soe(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Bu=e}function KS(e){if(e!==Bu)return!1;if(!Hs)return Soe(e),Hs=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!RD(t,e.memoizedProps))for(t=gp;t;)Gie(e,t),t=$m(t.nextSibling);if(Soe(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(ot(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){gp=$m(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}gp=null}}else gp=Bu?$m(e.stateNode.nextSibling):null;return!0}function uD(){gp=Bu=null,Hs=!1}var Gm=[];function ML(){for(var e=0;ei))throw Error(ot(301));i+=1,Zo=Oi=null,t.updateQueue=null,Py.current=gIe,e=n(r,o)}while(ky)}if(Py.current=PI,t=Oi!==null&&Oi.next!==null,$y=0,Zo=Oi=no=null,SI=!1,t)throw Error(ot(300));return e}function dd(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Zo===null?no.memoizedState=Zo=e:Zo=Zo.next=e,Zo}function Od(){if(Oi===null){var e=no.alternate;e=e!==null?e.memoizedState:null}else e=Oi.next;var t=Zo===null?no.memoizedState:Zo.next;if(t!==null)Zo=t,Oi=e;else{if(e===null)throw Error(ot(310));Oi=e,e={memoizedState:Oi.memoizedState,baseState:Oi.baseState,baseQueue:Oi.baseQueue,queue:Oi.queue,next:null},Zo===null?no.memoizedState=Zo=e:Zo=Zo.next=e}return Zo}function Fs(e,t){return typeof t=="function"?t(e):t}function cy(e){var t=Od(),n=t.queue;if(n===null)throw Error(ot(311));n.lastRenderedReducer=e;var r=Oi,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var c=u=i=null,d=o;do{var g=d.lane;if(($y&g)===g)c!==null&&(c=c.next={lane:0,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null}),r=d.eagerReducer===e?d.eagerState:e(r,d.action);else{var O={lane:g,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null};c===null?(u=c=O,i=r):c=c.next=O,no.lanes|=g,Ky|=g}d=d.next}while(d!==null&&d!==o);c===null?i=r:c.next=u,cl(r,t.memoizedState)||(Kl=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function py(e){var t=Od(),n=t.queue;if(n===null)throw Error(ot(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var u=o=o.next;do i=e(i,u.action),u=u.next;while(u!==o);cl(i,t.memoizedState)||(Kl=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ioe(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=($y&e)===e)&&(t._workInProgressVersionPrimary=r,Gm.push(t))),e)return n(t._source);throw Gm.push(t),Error(ot(350))}function Xie(e,t,n,r){var o=Di;if(o===null)throw Error(ot(349));var i=t._getVersion,u=i(t._source),c=Py.current,d=c.useState(function(){return Ioe(o,t,n)}),g=d[1],O=d[0];d=Zo;var S=e.memoizedState,I=S.refs,R=I.getSnapshot,k=S.source;S=S.subscribe;var M=no;return e.memoizedState={refs:I,source:t,subscribe:r},c.useEffect(function(){I.getSnapshot=n,I.setSnapshot=g;var C=i(t._source);if(!cl(u,C)){C=n(t._source),cl(O,C)||(g(C),C=xp(M),o.mutableReadLanes|=C&o.pendingLanes),C=o.mutableReadLanes,o.entangledLanes|=C;for(var T=o.entanglements,D=C;0n?98:n,function(){e(!0)}),gd(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[hp]=t,e[gI]=r,oae(e,t,!1,!1),t.stateNode=e,u=ID(n,r),n){case"dialog":En("cancel",e),En("close",e),o=r;break;case"iframe":case"object":case"embed":En("load",e),o=r;break;case"video":case"audio":for(o=0;oKD&&(t.flags|=64,i=!0,dy(r,!1),t.lanes=33554432)}else{if(!i)if(e=_I(u),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),dy(r,!0),r.tail===null&&r.tailMode==="hidden"&&!u.alternate&&!Hs)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*xi()-r.renderingStartTime>KD&&n!==1073741824&&(t.flags|=64,i=!0,dy(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(n=r.last,n!==null?n.sibling=u:t.child=u,r.last=u)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=xi(),n.sibling=null,t=Gn.current,Xn(Gn,i?t&1|2:t&1),n):null;case 23:case 24:return HL(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(ot(156,t.tag))}function bIe(e){switch(e.tag){case 1:aa(e.type)&&vI();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(t1(),Pn(ia),Pn(Si),ML(),t=e.flags,t&64)throw Error(ot(285));return e.flags=t&-4097|64,e;case 5:return AL(e),null;case 13:return Pn(Gn),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Pn(Gn),null;case 4:return t1(),null;case 10:return kL(e),null;case 23:case 24:return HL(),null;default:return null}}function NL(e,t){try{var n="",r=t;do n+=Z_e(r),r=r.return;while(r);var o=n}catch(i){o=` Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:o}}function VD(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var pIe=typeof WeakMap=="function"?WeakMap:Map;function rae(e,t,n){n=yp(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){kI||(kI=!0,XD=r),VD(e,t)},n}function nae(e,t,n){n=yp(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var o=t.value;n.payload=function(){return VD(e,t),r(o)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){typeof r!="function"&&(Fs===null?Fs=new Set([this]):Fs.add(this),VD(e,t));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),n}var fIe=typeof WeakSet=="function"?WeakSet:Set;function Toe(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){xp(e,n)}else t.current=null}function dIe(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var n=e.memoizedProps,r=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?n:Gl(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&_L(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(ot(163))}function mIe(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)===3){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var o=e;r=o.next,o=o.tag,o&4&&o&1&&(fae(n,e),xIe(n,e)),e=r}while(e!==t)}return;case 1:e=n.stateNode,n.flags&4&&(t===null?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Gl(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=n.updateQueue,t!==null&&moe(n,t,e);return;case 3:if(t=n.updateQueue,t!==null){if(e=null,n.child!==null)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}moe(n,t,e)}return;case 5:e=n.stateNode,t===null&&n.flags&4&&Pie(n.type,n.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:n.memoizedState===null&&(n=n.alternate,n!==null&&(n=n.memoizedState,n!==null&&(n=n.dehydrated,n!==null&&lie(n))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(ot(163))}function Roe(e,t){for(var n=e;;){if(n.tag===5){var r=n.stateNode;if(t)r=r.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,r.style.display=Koe("display",o)}}else if(n.tag===6)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((n.tag!==23&&n.tag!==24||n.memoizedState===null||n===e)&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function zoe(e,t){if(fd&&typeof fd.onCommitFiberUnmount=="function")try{fd.onCommitFiberUnmount(SL,t)}catch{}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,o!==void 0)if(r&4)fae(t,n);else{r=t;try{o()}catch(i){xp(r,i)}}n=n.next}while(n!==e)}break;case 1:if(Toe(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){xp(t,i)}break;case 5:Toe(t);break;case 4:oae(e,t)}}function Doe(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function Loe(e){return e.tag===5||e.tag===3||e.tag===4}function Noe(e){e:{for(var t=e.return;t!==null;){if(Loe(t))break e;t=t.return}throw Error(ot(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:t=t.containerInfo,r=!0;break;case 4:t=t.containerInfo,r=!0;break;default:throw Error(ot(161))}n.flags&16&&(My(t,""),n.flags&=-17);e:t:for(n=e;;){for(;n.sibling===null;){if(n.return===null||Loe(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue t;n.child.return=n,n=n.child}if(!(n.flags&2)){n=n.stateNode;break e}}r?qD(e,n,t):UD(e,n,t)}function qD(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=mI));else if(r!==4&&(e=e.child,e!==null))for(qD(e,t,n),e=e.sibling;e!==null;)qD(e,t,n),e=e.sibling}function UD(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(UD(e,t,n),e=e.sibling;e!==null;)UD(e,t,n),e=e.sibling}function oae(e,t){for(var n=t,r=!1,o,i;;){if(!r){r=n.return;e:for(;;){if(r===null)throw Error(ot(160));switch(o=r.stateNode,r.tag){case 5:i=!1;break e;case 3:o=o.containerInfo,i=!0;break e;case 4:o=o.containerInfo,i=!0;break e}r=r.return}r=!0}if(n.tag===5||n.tag===6){e:for(var u=e,c=n,d=c;;)if(zoe(u,d),d.child!==null&&d.tag!==4)d.child.return=d,d=d.child;else{if(d===c)break e;for(;d.sibling===null;){if(d.return===null||d.return===c)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}i?(u=o,c=n.stateNode,u.nodeType===8?u.parentNode.removeChild(c):u.removeChild(c)):o.removeChild(n.stateNode)}else if(n.tag===4){if(n.child!==null){o=n.stateNode.containerInfo,i=!0,n.child.return=n,n=n.child;continue}}else if(zoe(e,n),n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return,n.tag===4&&(r=!1)}n.sibling.return=n.return,n=n.sibling}}function cD(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do(r.tag&3)===3&&(e=r.destroy,r.destroy=void 0,e!==void 0&&e()),r=r.next;while(r!==n)}return;case 1:return;case 5:if(n=t.stateNode,n!=null){r=t.memoizedProps;var o=e!==null?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,i!==null){for(n[hI]=r,e==="input"&&r.type==="radio"&&r.name!=null&&$oe(n,r),_D(e,o),t=_D(e,r),o=0;oo&&(o=u),n&=~i}if(n=o,n=xi()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*gIe(n/1960))-n,10o&&(o=u),n&=~i}if(n=o,n=xi()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*IIe(n/1960))-n,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}ei!==5&&(ei=2),d=DL(d,c),I=u;do{switch(I.tag){case 3:i=d,I.flags|=4096,t&=-t,I.lanes|=t;var Y=rae(I,i,t);doe(I,Y);break e;case 1:i=d;var K=I.type,H=I.stateNode;if(!(I.flags&64)&&(typeof K.getDerivedStateFromError=="function"||H!==null&&typeof H.componentDidCatch=="function"&&(Fs===null||!Fs.has(H)))){I.flags|=4096,t&=-t,I.lanes|=t;var ne=nae(I,i,t);doe(I,ne);break e}}I=I.return}while(I!==null)}pae(n)}catch(pe){t=pe,Eo===n&&n!==null&&(Eo=n=n.return);continue}break}while(1)}function uae(){var e=PI.current;return PI.current=EI,e===null?EI:e}function yy(e,t){var n=ir;ir|=16;var r=uae();Di===e&&_i===t||Jm(e,t);do try{yIe();break}catch(o){sae(e,o)}while(1);if(jL(),ir=n,PI.current=r,Eo!==null)throw Error(ot(261));return Di=null,_i=0,ei}function yIe(){for(;Eo!==null;)cae(Eo)}function bIe(){for(;Eo!==null&&!eIe();)cae(Eo)}function cae(e){var t=dae(e.alternate,e,hd);e.memoizedProps=e.pendingProps,t===null?pae(e):Eo=t,LL.current=null}function pae(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&2048){if(n=cIe(t),n!==null){n.flags&=2047,Eo=n;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(n=uIe(n,t,hd),n!==null){Eo=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||hd&1073741824||!(n.mode&4)){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1u&&(c=u,u=Y,Y=c),c=Zne(N,Y),i=Zne(N,u),c&&i&&(X.rangeCount!==1||X.anchorNode!==c.node||X.anchorOffset!==c.offset||X.focusNode!==i.node||X.focusOffset!==i.offset)&&(U=U.createRange(),U.setStart(c.node,c.offset),X.removeAllRanges(),Y>u?(X.addRange(U),X.extend(i.node,i.offset)):(U.setEnd(i.node,i.offset),X.addRange(U)))))),U=[],X=N;X=X.parentNode;)X.nodeType===1&&U.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof N.focus=="function"&&N.focus(),N=0;Nxi()-FL?Jm(e,0):NL|=n),fl(e,t)}function IIe(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(Fu===0&&(Fu=t1),t=Mm(62914560&~Fu),t===0&&(t=4194304)):t=Ym()===99?1:2:t=1),n=ka(),e=VI(e,t),e!==null&&(zI(e,t,n),fl(e,n))}var dae;dae=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||ia.current)Xl=!0;else if(n&r)Xl=!!(e.flags&16384);else{switch(Xl=!1,t.tag){case 3:joe(t),lD();break;case 5:voe(t);break;case 1:aa(t.type)&&rI(t);break;case 4:LD(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;Xn(vI,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return n&t.child.childLanes?Eoe(e,t,n):(Xn(Gn,Gn.current&1),t=Bu(e,t,n),t!==null?t.sibling:null);Xn(Gn,Gn.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&64){if(r)return Moe(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Xn(Gn,Gn.current),r)break;return null;case 23:case 24:return t.lanes=0,sD(e,t,n)}return Bu(e,t,n)}else Xl=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=Km(t,Si.current),qm(t,n),o=ML(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,aa(r)){var i=!0;rI(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,PL(t);var u=r.getDerivedStateFromProps;typeof u=="function"&&wI(t,r,u,e),o.updater=BI,t.stateNode=o,o._reactInternals=t,DD(t,r,e,n),t=BD(null,t,r,!0,i,n)}else t.tag=0,oa(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=EIe(o),e=Gl(o,e),i){case 0:t=WD(null,t,o,e,n);break e;case 1:t=Ioe(null,t,o,e,n);break e;case 11:t=_oe(null,t,o,e,n);break e;case 14:t=Soe(null,t,o,Gl(o.type,e),r,n);break e}throw Error(ot(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Gl(r,o),WD(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Gl(r,o),Ioe(e,t,r,o,n);case 3:if(joe(t),r=t.updateQueue,e===null||r===null)throw Error(ot(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,Nie(e,t),By(t,r,null,n),r=t.memoizedState.element,r===o)lD(),t=Bu(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(mp=Vm(t.stateNode.containerInfo.firstChild),Wu=t,i=Bs=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function gae(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(gae)}catch(e){console.error(e)}}gae(),vae.exports=hae()});var lle=_e((cWt,ale)=>{"use strict";var Kje="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";ale.exports=Kje});var ple=_e((pWt,cle)=>{"use strict";var Yje=lle();function sle(){}function ule(){}ule.resetWarningCache=sle;cle.exports=function(){function e(r,o,i,u,c,d){if(d!==Yje){var g=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw g.name="Invariant Violation",g}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:ule,resetWarningCache:sle};return n.PropTypes=n,n}});var rt=_e((mWt,fle)=>{fle.exports=ple()();var fWt,dWt});var yt=_e((hWt,yj)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var No=typeof Symbol=="function"&&Symbol.for,ON=No?Symbol.for("react.element"):60103,xN=No?Symbol.for("react.portal"):60106,jj=No?Symbol.for("react.fragment"):60107,Ej=No?Symbol.for("react.strict_mode"):60108,Pj=No?Symbol.for("react.profiler"):60114,kj=No?Symbol.for("react.provider"):60109,Cj=No?Symbol.for("react.context"):60110,_N=No?Symbol.for("react.async_mode"):60111,Aj=No?Symbol.for("react.concurrent_mode"):60111,Mj=No?Symbol.for("react.forward_ref"):60112,Tj=No?Symbol.for("react.suspense"):60113,uEe=No?Symbol.for("react.suspense_list"):60120,Rj=No?Symbol.for("react.memo"):60115,zj=No?Symbol.for("react.lazy"):60116,cEe=No?Symbol.for("react.block"):60121,pEe=No?Symbol.for("react.fundamental"):60117,fEe=No?Symbol.for("react.responder"):60118,dEe=No?Symbol.for("react.scope"):60119;function Aa(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ON:switch(e=e.type,e){case _N:case Aj:case jj:case Pj:case Ej:case Tj:return e;default:switch(e=e&&e.$$typeof,e){case Cj:case Mj:case zj:case Rj:case kj:return e;default:return t}}case xN:return t}}}function Dle(e){return Aa(e)===Aj}rn.AsyncMode=_N;rn.ConcurrentMode=Aj;rn.ContextConsumer=Cj;rn.ContextProvider=kj;rn.Element=ON;rn.ForwardRef=Mj;rn.Fragment=jj;rn.Lazy=zj;rn.Memo=Rj;rn.Portal=xN;rn.Profiler=Pj;rn.StrictMode=Ej;rn.Suspense=Tj;rn.isAsyncMode=function(e){return Dle(e)||Aa(e)===_N};rn.isConcurrentMode=Dle;rn.isContextConsumer=function(e){return Aa(e)===Cj};rn.isContextProvider=function(e){return Aa(e)===kj};rn.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ON};rn.isForwardRef=function(e){return Aa(e)===Mj};rn.isFragment=function(e){return Aa(e)===jj};rn.isLazy=function(e){return Aa(e)===zj};rn.isMemo=function(e){return Aa(e)===Rj};rn.isPortal=function(e){return Aa(e)===xN};rn.isProfiler=function(e){return Aa(e)===Pj};rn.isStrictMode=function(e){return Aa(e)===Ej};rn.isSuspense=function(e){return Aa(e)===Tj};rn.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===jj||e===Aj||e===Pj||e===Ej||e===Tj||e===uEe||typeof e=="object"&&e!==null&&(e.$$typeof===zj||e.$$typeof===Rj||e.$$typeof===kj||e.$$typeof===Cj||e.$$typeof===Mj||e.$$typeof===pEe||e.$$typeof===fEe||e.$$typeof===dEe||e.$$typeof===cEe)};rn.typeOf=Aa});var Fle=_e((FWt,Nle)=>{"use strict";Nle.exports=Lle()});var $le=_e((WWt,Ule)=>{"use strict";var SN=Fle(),mEe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},hEe={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},gEe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Vle={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},IN={};IN[SN.ForwardRef]=gEe;IN[SN.Memo]=Vle;function Wle(e){return SN.isMemo(e)?Vle:IN[e.$$typeof]||mEe}var vEe=Object.defineProperty,yEe=Object.getOwnPropertyNames,Ble=Object.getOwnPropertySymbols,bEe=Object.getOwnPropertyDescriptor,wEe=Object.getPrototypeOf,Hle=Object.prototype;function qle(e,t,n){if(typeof t!="string"){if(Hle){var r=wEe(t);r&&r!==Hle&&qle(e,r,n)}var o=yEe(t);Ble&&(o=o.concat(Ble(t)));for(var i=Wle(e),u=Wle(t),c=0;c{function oAe(){this.__data__=[],this.size=0}Gue.exports=oAe});var OE=_e((HXt,Kue)=>{function iAe(e,t){return e===t||e!==e&&t!==t}Kue.exports=iAe});var D2=_e((VXt,Yue)=>{var aAe=OE();function lAe(e,t){for(var n=e.length;n--;)if(aAe(e[n][0],t))return n;return-1}Yue.exports=lAe});var Zue=_e((qXt,Que)=>{var sAe=D2(),uAe=Array.prototype,cAe=uAe.splice;function pAe(e){var t=this.__data__,n=sAe(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():cAe.call(t,n,1),--this.size,!0}Que.exports=pAe});var tce=_e((UXt,ece)=>{var fAe=D2();function dAe(e){var t=this.__data__,n=fAe(t,e);return n<0?void 0:t[n][1]}ece.exports=dAe});var nce=_e(($Xt,rce)=>{var mAe=D2();function hAe(e){return mAe(this.__data__,e)>-1}rce.exports=hAe});var ice=_e((JXt,oce)=>{var gAe=D2();function vAe(e,t){var n=this.__data__,r=gAe(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}oce.exports=vAe});var L2=_e((GXt,ace)=>{var yAe=Xue(),bAe=Zue(),wAe=tce(),OAe=nce(),xAe=ice();function D1(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var _Ae=L2();function SAe(){this.__data__=new _Ae,this.size=0}lce.exports=SAe});var cce=_e((KXt,uce)=>{function IAe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}uce.exports=IAe});var fce=_e((YXt,pce)=>{function jAe(e){return this.__data__.get(e)}pce.exports=jAe});var mce=_e((QXt,dce)=>{function EAe(e){return this.__data__.has(e)}dce.exports=EAe});var SF=_e((ZXt,hce)=>{var PAe=typeof global=="object"&&global&&global.Object===Object&&global;hce.exports=PAe});var os=_e((eKt,gce)=>{var kAe=SF(),CAe=typeof self=="object"&&self&&self.Object===Object&&self,AAe=kAe||CAe||Function("return this")();gce.exports=AAe});var Cd=_e((tKt,vce)=>{var MAe=os(),TAe=MAe.Symbol;vce.exports=TAe});var Oce=_e((rKt,wce)=>{var yce=Cd(),bce=Object.prototype,RAe=bce.hasOwnProperty,zAe=bce.toString,N2=yce?yce.toStringTag:void 0;function DAe(e){var t=RAe.call(e,N2),n=e[N2];try{e[N2]=void 0;var r=!0}catch{}var o=zAe.call(e);return r&&(t?e[N2]=n:delete e[N2]),o}wce.exports=DAe});var _ce=_e((nKt,xce)=>{var LAe=Object.prototype,NAe=LAe.toString;function FAe(e){return NAe.call(e)}xce.exports=FAe});var Ks=_e((oKt,jce)=>{var Sce=Cd(),WAe=Oce(),BAe=_ce(),HAe="[object Null]",VAe="[object Undefined]",Ice=Sce?Sce.toStringTag:void 0;function qAe(e){return e==null?e===void 0?VAe:HAe:Ice&&Ice in Object(e)?WAe(e):BAe(e)}jce.exports=qAe});var Ad=_e((iKt,Ece)=>{function UAe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Ece.exports=UAe});var xE=_e((aKt,Pce)=>{var $Ae=Ks(),JAe=Ad(),GAe="[object AsyncFunction]",XAe="[object Function]",KAe="[object GeneratorFunction]",YAe="[object Proxy]";function QAe(e){if(!JAe(e))return!1;var t=$Ae(e);return t==XAe||t==KAe||t==GAe||t==YAe}Pce.exports=QAe});var Cce=_e((lKt,kce)=>{var ZAe=os(),eMe=ZAe["__core-js_shared__"];kce.exports=eMe});var Tce=_e((sKt,Mce)=>{var IF=Cce(),Ace=function(){var e=/[^.]+$/.exec(IF&&IF.keys&&IF.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function tMe(e){return!!Ace&&Ace in e}Mce.exports=tMe});var jF=_e((uKt,Rce)=>{var rMe=Function.prototype,nMe=rMe.toString;function oMe(e){if(e!=null){try{return nMe.call(e)}catch{}try{return e+""}catch{}}return""}Rce.exports=oMe});var Dce=_e((cKt,zce)=>{var iMe=xE(),aMe=Tce(),lMe=Ad(),sMe=jF(),uMe=/[\\^$.*+?()[\]{}|]/g,cMe=/^\[object .+?Constructor\]$/,pMe=Function.prototype,fMe=Object.prototype,dMe=pMe.toString,mMe=fMe.hasOwnProperty,hMe=RegExp("^"+dMe.call(mMe).replace(uMe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gMe(e){if(!lMe(e)||aMe(e))return!1;var t=iMe(e)?hMe:cMe;return t.test(sMe(e))}zce.exports=gMe});var Nce=_e((pKt,Lce)=>{function vMe(e,t){return e?.[t]}Lce.exports=vMe});var $p=_e((fKt,Fce)=>{var yMe=Dce(),bMe=Nce();function wMe(e,t){var n=bMe(e,t);return yMe(n)?n:void 0}Fce.exports=wMe});var _E=_e((dKt,Wce)=>{var OMe=$p(),xMe=os(),_Me=OMe(xMe,"Map");Wce.exports=_Me});var F2=_e((mKt,Bce)=>{var SMe=$p(),IMe=SMe(Object,"create");Bce.exports=IMe});var qce=_e((hKt,Vce)=>{var Hce=F2();function jMe(){this.__data__=Hce?Hce(null):{},this.size=0}Vce.exports=jMe});var $ce=_e((gKt,Uce)=>{function EMe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Uce.exports=EMe});var Gce=_e((vKt,Jce)=>{var PMe=F2(),kMe="__lodash_hash_undefined__",CMe=Object.prototype,AMe=CMe.hasOwnProperty;function MMe(e){var t=this.__data__;if(PMe){var n=t[e];return n===kMe?void 0:n}return AMe.call(t,e)?t[e]:void 0}Jce.exports=MMe});var Kce=_e((yKt,Xce)=>{var TMe=F2(),RMe=Object.prototype,zMe=RMe.hasOwnProperty;function DMe(e){var t=this.__data__;return TMe?t[e]!==void 0:zMe.call(t,e)}Xce.exports=DMe});var Qce=_e((bKt,Yce)=>{var LMe=F2(),NMe="__lodash_hash_undefined__";function FMe(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=LMe&&t===void 0?NMe:t,this}Yce.exports=FMe});var epe=_e((wKt,Zce)=>{var WMe=qce(),BMe=$ce(),HMe=Gce(),VMe=Kce(),qMe=Qce();function L1(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var tpe=epe(),UMe=L2(),$Me=_E();function JMe(){this.size=0,this.__data__={hash:new tpe,map:new($Me||UMe),string:new tpe}}rpe.exports=JMe});var ipe=_e((xKt,ope)=>{function GMe(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}ope.exports=GMe});var W2=_e((_Kt,ape)=>{var XMe=ipe();function KMe(e,t){var n=e.__data__;return XMe(t)?n[typeof t=="string"?"string":"hash"]:n.map}ape.exports=KMe});var spe=_e((SKt,lpe)=>{var YMe=W2();function QMe(e){var t=YMe(this,e).delete(e);return this.size-=t?1:0,t}lpe.exports=QMe});var cpe=_e((IKt,upe)=>{var ZMe=W2();function eTe(e){return ZMe(this,e).get(e)}upe.exports=eTe});var fpe=_e((jKt,ppe)=>{var tTe=W2();function rTe(e){return tTe(this,e).has(e)}ppe.exports=rTe});var mpe=_e((EKt,dpe)=>{var nTe=W2();function oTe(e,t){var n=nTe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}dpe.exports=oTe});var SE=_e((PKt,hpe)=>{var iTe=npe(),aTe=spe(),lTe=cpe(),sTe=fpe(),uTe=mpe();function N1(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var cTe=L2(),pTe=_E(),fTe=SE(),dTe=200;function mTe(e,t){var n=this.__data__;if(n instanceof cTe){var r=n.__data__;if(!pTe||r.length{var hTe=L2(),gTe=sce(),vTe=cce(),yTe=fce(),bTe=mce(),wTe=vpe();function F1(e){var t=this.__data__=new hTe(e);this.size=t.size}F1.prototype.clear=gTe;F1.prototype.delete=vTe;F1.prototype.get=yTe;F1.prototype.has=bTe;F1.prototype.set=wTe;ype.exports=F1});var wpe=_e((AKt,bpe)=>{var OTe="__lodash_hash_undefined__";function xTe(e){return this.__data__.set(e,OTe),this}bpe.exports=xTe});var xpe=_e((MKt,Ope)=>{function _Te(e){return this.__data__.has(e)}Ope.exports=_Te});var Spe=_e((TKt,_pe)=>{var STe=SE(),ITe=wpe(),jTe=xpe();function IE(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new STe;++t{function ETe(e,t){for(var n=-1,r=e==null?0:e.length;++n{function PTe(e,t){return e.has(t)}Epe.exports=PTe});var PF=_e((DKt,kpe)=>{var kTe=Spe(),CTe=jpe(),ATe=Ppe(),MTe=1,TTe=2;function RTe(e,t,n,r,o,i){var u=n&MTe,c=e.length,d=t.length;if(c!=d&&!(u&&d>c))return!1;var g=i.get(e),O=i.get(t);if(g&&O)return g==t&&O==e;var S=-1,I=!0,R=n&TTe?new kTe:void 0;for(i.set(e,t),i.set(t,e);++S{var zTe=os(),DTe=zTe.Uint8Array;Cpe.exports=DTe});var Mpe=_e((NKt,Ape)=>{function LTe(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}Ape.exports=LTe});var Rpe=_e((FKt,Tpe)=>{function NTe(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}Tpe.exports=NTe});var Fpe=_e((WKt,Npe)=>{var zpe=Cd(),Dpe=kF(),FTe=OE(),WTe=PF(),BTe=Mpe(),HTe=Rpe(),VTe=1,qTe=2,UTe="[object Boolean]",$Te="[object Date]",JTe="[object Error]",GTe="[object Map]",XTe="[object Number]",KTe="[object RegExp]",YTe="[object Set]",QTe="[object String]",ZTe="[object Symbol]",eRe="[object ArrayBuffer]",tRe="[object DataView]",Lpe=zpe?zpe.prototype:void 0,CF=Lpe?Lpe.valueOf:void 0;function rRe(e,t,n,r,o,i,u){switch(n){case tRe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case eRe:return!(e.byteLength!=t.byteLength||!i(new Dpe(e),new Dpe(t)));case UTe:case $Te:case XTe:return FTe(+e,+t);case JTe:return e.name==t.name&&e.message==t.message;case KTe:case QTe:return e==t+"";case GTe:var c=BTe;case YTe:var d=r&VTe;if(c||(c=HTe),e.size!=t.size&&!d)return!1;var g=u.get(e);if(g)return g==t;r|=qTe,u.set(e,t);var O=WTe(c(e),c(t),r,o,i,u);return u.delete(e),O;case ZTe:if(CF)return CF.call(e)==CF.call(t)}return!1}Npe.exports=rRe});var jE=_e((BKt,Wpe)=>{function nRe(e,t){for(var n=-1,r=t.length,o=e.length;++n{var oRe=Array.isArray;Bpe.exports=oRe});var AF=_e((VKt,Hpe)=>{var iRe=jE(),aRe=is();function lRe(e,t,n){var r=t(e);return aRe(e)?r:iRe(r,n(e))}Hpe.exports=lRe});var qpe=_e((qKt,Vpe)=>{function sRe(e,t){for(var n=-1,r=e==null?0:e.length,o=0,i=[];++n{function uRe(){return[]}Upe.exports=uRe});var EE=_e(($Kt,Jpe)=>{var cRe=qpe(),pRe=MF(),fRe=Object.prototype,dRe=fRe.propertyIsEnumerable,$pe=Object.getOwnPropertySymbols,mRe=$pe?function(e){return e==null?[]:(e=Object(e),cRe($pe(e),function(t){return dRe.call(e,t)}))}:pRe;Jpe.exports=mRe});var Xpe=_e((JKt,Gpe)=>{function hRe(e,t){for(var n=-1,r=Array(e);++n{function gRe(e){return e!=null&&typeof e=="object"}Kpe.exports=gRe});var Qpe=_e((XKt,Ype)=>{var vRe=Ks(),yRe=_l(),bRe="[object Arguments]";function wRe(e){return yRe(e)&&vRe(e)==bRe}Ype.exports=wRe});var TF=_e((KKt,tfe)=>{var Zpe=Qpe(),ORe=_l(),efe=Object.prototype,xRe=efe.hasOwnProperty,_Re=efe.propertyIsEnumerable,SRe=Zpe(function(){return arguments}())?Zpe:function(e){return ORe(e)&&xRe.call(e,"callee")&&!_Re.call(e,"callee")};tfe.exports=SRe});var nfe=_e((YKt,rfe)=>{function IRe(){return!1}rfe.exports=IRe});var PE=_e((B2,W1)=>{var jRe=os(),ERe=nfe(),afe=typeof B2=="object"&&B2&&!B2.nodeType&&B2,ofe=afe&&typeof W1=="object"&&W1&&!W1.nodeType&&W1,PRe=ofe&&ofe.exports===afe,ife=PRe?jRe.Buffer:void 0,kRe=ife?ife.isBuffer:void 0,CRe=kRe||ERe;W1.exports=CRe});var sfe=_e((QKt,lfe)=>{var ARe=9007199254740991,MRe=/^(?:0|[1-9]\d*)$/;function TRe(e,t){var n=typeof e;return t=t??ARe,!!t&&(n=="number"||n!="symbol"&&MRe.test(e))&&e>-1&&e%1==0&&e{var RRe=9007199254740991;function zRe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=RRe}ufe.exports=zRe});var pfe=_e((eYt,cfe)=>{var DRe=Ks(),LRe=RF(),NRe=_l(),FRe="[object Arguments]",WRe="[object Array]",BRe="[object Boolean]",HRe="[object Date]",VRe="[object Error]",qRe="[object Function]",URe="[object Map]",$Re="[object Number]",JRe="[object Object]",GRe="[object RegExp]",XRe="[object Set]",KRe="[object String]",YRe="[object WeakMap]",QRe="[object ArrayBuffer]",ZRe="[object DataView]",eze="[object Float32Array]",tze="[object Float64Array]",rze="[object Int8Array]",nze="[object Int16Array]",oze="[object Int32Array]",ize="[object Uint8Array]",aze="[object Uint8ClampedArray]",lze="[object Uint16Array]",sze="[object Uint32Array]",kn={};kn[eze]=kn[tze]=kn[rze]=kn[nze]=kn[oze]=kn[ize]=kn[aze]=kn[lze]=kn[sze]=!0;kn[FRe]=kn[WRe]=kn[QRe]=kn[BRe]=kn[ZRe]=kn[HRe]=kn[VRe]=kn[qRe]=kn[URe]=kn[$Re]=kn[JRe]=kn[GRe]=kn[XRe]=kn[KRe]=kn[YRe]=!1;function uze(e){return NRe(e)&&LRe(e.length)&&!!kn[DRe(e)]}cfe.exports=uze});var kE=_e((tYt,ffe)=>{function cze(e){return function(t){return e(t)}}ffe.exports=cze});var CE=_e((H2,B1)=>{var pze=SF(),dfe=typeof H2=="object"&&H2&&!H2.nodeType&&H2,V2=dfe&&typeof B1=="object"&&B1&&!B1.nodeType&&B1,fze=V2&&V2.exports===dfe,zF=fze&&pze.process,dze=function(){try{var e=V2&&V2.require&&V2.require("util").types;return e||zF&&zF.binding&&zF.binding("util")}catch{}}();B1.exports=dze});var DF=_e((rYt,gfe)=>{var mze=pfe(),hze=kE(),mfe=CE(),hfe=mfe&&mfe.isTypedArray,gze=hfe?hze(hfe):mze;gfe.exports=gze});var LF=_e((nYt,vfe)=>{var vze=Xpe(),yze=TF(),bze=is(),wze=PE(),Oze=sfe(),xze=DF(),_ze=Object.prototype,Sze=_ze.hasOwnProperty;function Ize(e,t){var n=bze(e),r=!n&&yze(e),o=!n&&!r&&wze(e),i=!n&&!r&&!o&&xze(e),u=n||r||o||i,c=u?vze(e.length,String):[],d=c.length;for(var g in e)(t||Sze.call(e,g))&&!(u&&(g=="length"||o&&(g=="offset"||g=="parent")||i&&(g=="buffer"||g=="byteLength"||g=="byteOffset")||Oze(g,d)))&&c.push(g);return c}vfe.exports=Ize});var AE=_e((oYt,yfe)=>{var jze=Object.prototype;function Eze(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||jze;return e===n}yfe.exports=Eze});var NF=_e((iYt,bfe)=>{function Pze(e,t){return function(n){return e(t(n))}}bfe.exports=Pze});var Ofe=_e((aYt,wfe)=>{var kze=NF(),Cze=kze(Object.keys,Object);wfe.exports=Cze});var _fe=_e((lYt,xfe)=>{var Aze=AE(),Mze=Ofe(),Tze=Object.prototype,Rze=Tze.hasOwnProperty;function zze(e){if(!Aze(e))return Mze(e);var t=[];for(var n in Object(e))Rze.call(e,n)&&n!="constructor"&&t.push(n);return t}xfe.exports=zze});var FF=_e((sYt,Sfe)=>{var Dze=xE(),Lze=RF();function Nze(e){return e!=null&&Lze(e.length)&&!Dze(e)}Sfe.exports=Nze});var ME=_e((uYt,Ife)=>{var Fze=LF(),Wze=_fe(),Bze=FF();function Hze(e){return Bze(e)?Fze(e):Wze(e)}Ife.exports=Hze});var WF=_e((cYt,jfe)=>{var Vze=AF(),qze=EE(),Uze=ME();function $ze(e){return Vze(e,Uze,qze)}jfe.exports=$ze});var kfe=_e((pYt,Pfe)=>{var Efe=WF(),Jze=1,Gze=Object.prototype,Xze=Gze.hasOwnProperty;function Kze(e,t,n,r,o,i){var u=n&Jze,c=Efe(e),d=c.length,g=Efe(t),O=g.length;if(d!=O&&!u)return!1;for(var S=d;S--;){var I=c[S];if(!(u?I in t:Xze.call(t,I)))return!1}var R=i.get(e),k=i.get(t);if(R&&k)return R==t&&k==e;var A=!0;i.set(e,t),i.set(t,e);for(var M=u;++S{var Yze=$p(),Qze=os(),Zze=Yze(Qze,"DataView");Cfe.exports=Zze});var Tfe=_e((dYt,Mfe)=>{var eDe=$p(),tDe=os(),rDe=eDe(tDe,"Promise");Mfe.exports=rDe});var zfe=_e((mYt,Rfe)=>{var nDe=$p(),oDe=os(),iDe=nDe(oDe,"Set");Rfe.exports=iDe});var Lfe=_e((hYt,Dfe)=>{var aDe=$p(),lDe=os(),sDe=aDe(lDe,"WeakMap");Dfe.exports=sDe});var q2=_e((gYt,qfe)=>{var BF=Afe(),HF=_E(),VF=Tfe(),qF=zfe(),UF=Lfe(),Vfe=Ks(),H1=jF(),Nfe="[object Map]",uDe="[object Object]",Ffe="[object Promise]",Wfe="[object Set]",Bfe="[object WeakMap]",Hfe="[object DataView]",cDe=H1(BF),pDe=H1(HF),fDe=H1(VF),dDe=H1(qF),mDe=H1(UF),Md=Vfe;(BF&&Md(new BF(new ArrayBuffer(1)))!=Hfe||HF&&Md(new HF)!=Nfe||VF&&Md(VF.resolve())!=Ffe||qF&&Md(new qF)!=Wfe||UF&&Md(new UF)!=Bfe)&&(Md=function(e){var t=Vfe(e),n=t==uDe?e.constructor:void 0,r=n?H1(n):"";if(r)switch(r){case cDe:return Hfe;case pDe:return Nfe;case fDe:return Ffe;case dDe:return Wfe;case mDe:return Bfe}return t});qfe.exports=Md});var Qfe=_e((vYt,Yfe)=>{var $F=EF(),hDe=PF(),gDe=Fpe(),vDe=kfe(),Ufe=q2(),$fe=is(),Jfe=PE(),yDe=DF(),bDe=1,Gfe="[object Arguments]",Xfe="[object Array]",TE="[object Object]",wDe=Object.prototype,Kfe=wDe.hasOwnProperty;function ODe(e,t,n,r,o,i){var u=$fe(e),c=$fe(t),d=u?Xfe:Ufe(e),g=c?Xfe:Ufe(t);d=d==Gfe?TE:d,g=g==Gfe?TE:g;var O=d==TE,S=g==TE,I=d==g;if(I&&Jfe(e)){if(!Jfe(t))return!1;u=!0,O=!1}if(I&&!O)return i||(i=new $F),u||yDe(e)?hDe(e,t,n,r,o,i):gDe(e,t,d,n,r,o,i);if(!(n&bDe)){var R=O&&Kfe.call(e,"__wrapped__"),k=S&&Kfe.call(t,"__wrapped__");if(R||k){var A=R?e.value():e,M=k?t.value():t;return i||(i=new $F),o(A,M,n,r,i)}}return I?(i||(i=new $F),vDe(e,t,n,r,o,i)):!1}Yfe.exports=ODe});var rde=_e((yYt,tde)=>{var xDe=Qfe(),Zfe=_l();function ede(e,t,n,r,o){return e===t?!0:e==null||t==null||!Zfe(e)&&!Zfe(t)?e!==e&&t!==t:xDe(e,t,n,r,ede,o)}tde.exports=ede});var ode=_e((bYt,nde)=>{var _De=rde();function SDe(e,t){return _De(e,t)}nde.exports=SDe});var YF=_e((KF,q1)=>{(function(e,t){typeof KF=="object"&&typeof q1<"u"?q1.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(KF,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function n(y){e=y}function r(y){return y instanceof Array||Object.prototype.toString.call(y)==="[object Array]"}function o(y){return y!=null&&Object.prototype.toString.call(y)==="[object Object]"}function i(y,j){return Object.prototype.hasOwnProperty.call(y,j)}function u(y){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(y).length===0;var j;for(j in y)if(i(y,j))return!1;return!0}function c(y){return y===void 0}function d(y){return typeof y=="number"||Object.prototype.toString.call(y)==="[object Number]"}function g(y){return y instanceof Date||Object.prototype.toString.call(y)==="[object Date]"}function O(y,j){var W=[],q,ee=y.length;for(q=0;q>>0,q;for(q=0;q0)for(W=0;W component higher in the tree to provide a loading indicator or placeholder to display.`)}ei!==5&&(ei=2),d=NL(d,c),I=u;do{switch(I.tag){case 3:i=d,I.flags|=4096,t&=-t,I.lanes|=t;var Y=lae(I,i,t);yoe(I,Y);break e;case 1:i=d;var K=I.type,B=I.stateNode;if(!(I.flags&64)&&(typeof K.getDerivedStateFromError=="function"||B!==null&&typeof B.componentDidCatch=="function"&&(Ws===null||!Ws.has(B)))){I.flags|=4096,t&=-t,I.lanes|=t;var ne=sae(I,i,t);yoe(I,ne);break e}}I=I.return}while(I!==null)}gae(n)}catch(pe){t=pe,Po===n&&n!==null&&(Po=n=n.return);continue}break}while(1)}function mae(){var e=kI.current;return kI.current=PI,e===null?PI:e}function wy(e,t){var n=ir;ir|=16;var r=mae();Di===e&&_i===t||Km(e,t);do try{EIe();break}catch(o){dae(e,o)}while(1);if(PL(),ir=n,kI.current=r,Po!==null)throw Error(ot(261));return Di=null,_i=0,ei}function EIe(){for(;Po!==null;)hae(Po)}function PIe(){for(;Po!==null&&!uIe();)hae(Po)}function hae(e){var t=yae(e.alternate,e,vd);e.memoizedProps=e.pendingProps,t===null?gae(e):Po=t,FL.current=null}function gae(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&2048){if(n=bIe(t),n!==null){n.flags&=2047,Po=n;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(n=yIe(n,t,vd),n!==null){Po=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||vd&1073741824||!(n.mode&4)){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1u&&(c=u,u=Y,Y=c),c=ooe(D,Y),i=ooe(D,u),c&&i&&(G.rangeCount!==1||G.anchorNode!==c.node||G.anchorOffset!==c.offset||G.focusNode!==i.node||G.focusOffset!==i.offset)&&(U=U.createRange(),U.setStart(c.node,c.offset),G.removeAllRanges(),Y>u?(G.addRange(U),G.extend(i.node,i.offset)):(U.setEnd(i.node,i.offset),G.addRange(U)))))),U=[],G=D;G=G.parentNode;)G.nodeType===1&&U.push({element:G,left:G.scrollLeft,top:G.scrollTop});for(typeof D.focus=="function"&&D.focus(),D=0;Dxi()-BL?Km(e,0):WL|=n),ml(e,t)}function RIe(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(Wu===0&&(Wu=o1),t=zm(62914560&~Wu),t===0&&(t=4194304)):t=e1()===99?1:2:t=1),n=ka(),e=qI(e,t),e!==null&&(DI(e,t,n),ml(e,n))}var yae;yae=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||ia.current)Kl=!0;else if(n&r)Kl=!!(e.flags&16384);else{switch(Kl=!1,t.tag){case 3:Aoe(t),uD();break;case 5:xoe(t);break;case 1:aa(t.type)&&nI(t);break;case 4:FD(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;Xn(yI,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return n&t.child.childLanes?Moe(e,t,n):(Xn(Gn,Gn.current&1),t=Hu(e,t,n),t!==null?t.sibling:null);Xn(Gn,Gn.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&64){if(r)return Loe(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Xn(Gn,Gn.current),r)break;return null;case 23:case 24:return t.lanes=0,cD(e,t,n)}return Hu(e,t,n)}else Kl=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=Zm(t,Si.current),Jm(t,n),o=RL(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,aa(r)){var i=!0;nI(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,CL(t);var u=r.getDerivedStateFromProps;typeof u=="function"&&OI(t,r,u,e),o.updater=HI,t.stateNode=o,o._reactInternals=t,ND(t,r,e,n),t=VD(null,t,r,!0,i,n)}else t.tag=0,oa(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=DIe(o),e=Xl(o,e),i){case 0:t=HD(null,t,o,e,n);break e;case 1:t=Coe(null,t,o,e,n);break e;case 11:t=Poe(null,t,o,e,n);break e;case 14:t=koe(null,t,o,Xl(o.type,e),r,n);break e}throw Error(ot(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Xl(r,o),HD(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Xl(r,o),Coe(e,t,r,o,n);case 3:if(Aoe(t),r=t.updateQueue,e===null||r===null)throw Error(ot(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,Vie(e,t),Vy(t,r,null,n),r=t.memoizedState.element,r===o)uD(),t=Hu(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(gp=$m(t.stateNode.containerInfo.firstChild),Bu=t,i=Hs=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function Oae(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Oae)}catch(e){console.error(e)}}Oae(),xae.exports=wae()});var fle=_e((OWt,ple)=>{"use strict";var aEe="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";ple.exports=aEe});var gle=_e((xWt,hle)=>{"use strict";var lEe=fle();function dle(){}function mle(){}mle.resetWarningCache=dle;hle.exports=function(){function e(r,o,i,u,c,d){if(d!==lEe){var g=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw g.name="Invariant Violation",g}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:mle,resetWarningCache:dle};return n.PropTypes=n,n}});var rt=_e((IWt,vle)=>{vle.exports=gle()();var _Wt,SWt});var yt=_e((jWt,bj)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var No=typeof Symbol=="function"&&Symbol.for,jN=No?Symbol.for("react.element"):60103,EN=No?Symbol.for("react.portal"):60106,Ej=No?Symbol.for("react.fragment"):60107,Pj=No?Symbol.for("react.strict_mode"):60108,kj=No?Symbol.for("react.profiler"):60114,Cj=No?Symbol.for("react.provider"):60109,Aj=No?Symbol.for("react.context"):60110,PN=No?Symbol.for("react.async_mode"):60111,Mj=No?Symbol.for("react.concurrent_mode"):60111,Tj=No?Symbol.for("react.forward_ref"):60112,Rj=No?Symbol.for("react.suspense"):60113,bEe=No?Symbol.for("react.suspense_list"):60120,zj=No?Symbol.for("react.memo"):60115,Dj=No?Symbol.for("react.lazy"):60116,wEe=No?Symbol.for("react.block"):60121,OEe=No?Symbol.for("react.fundamental"):60117,xEe=No?Symbol.for("react.responder"):60118,_Ee=No?Symbol.for("react.scope"):60119;function Ma(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case jN:switch(e=e.type,e){case PN:case Mj:case Ej:case kj:case Pj:case Rj:return e;default:switch(e=e&&e.$$typeof,e){case Aj:case Tj:case Dj:case zj:case Cj:return e;default:return t}}case EN:return t}}}function Ble(e){return Ma(e)===Mj}rn.AsyncMode=PN;rn.ConcurrentMode=Mj;rn.ContextConsumer=Aj;rn.ContextProvider=Cj;rn.Element=jN;rn.ForwardRef=Tj;rn.Fragment=Ej;rn.Lazy=Dj;rn.Memo=zj;rn.Portal=EN;rn.Profiler=kj;rn.StrictMode=Pj;rn.Suspense=Rj;rn.isAsyncMode=function(e){return Ble(e)||Ma(e)===PN};rn.isConcurrentMode=Ble;rn.isContextConsumer=function(e){return Ma(e)===Aj};rn.isContextProvider=function(e){return Ma(e)===Cj};rn.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===jN};rn.isForwardRef=function(e){return Ma(e)===Tj};rn.isFragment=function(e){return Ma(e)===Ej};rn.isLazy=function(e){return Ma(e)===Dj};rn.isMemo=function(e){return Ma(e)===zj};rn.isPortal=function(e){return Ma(e)===EN};rn.isProfiler=function(e){return Ma(e)===kj};rn.isStrictMode=function(e){return Ma(e)===Pj};rn.isSuspense=function(e){return Ma(e)===Rj};rn.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===Ej||e===Mj||e===kj||e===Pj||e===Rj||e===bEe||typeof e=="object"&&e!==null&&(e.$$typeof===Dj||e.$$typeof===zj||e.$$typeof===Cj||e.$$typeof===Aj||e.$$typeof===Tj||e.$$typeof===OEe||e.$$typeof===xEe||e.$$typeof===_Ee||e.$$typeof===wEe)};rn.typeOf=Ma});var qle=_e((KWt,Vle)=>{"use strict";Vle.exports=Hle()});var Yle=_e((YWt,Kle)=>{"use strict";var kN=qle(),SEe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},IEe={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},jEe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Gle={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},CN={};CN[kN.ForwardRef]=jEe;CN[kN.Memo]=Gle;function Ule(e){return kN.isMemo(e)?Gle:CN[e.$$typeof]||SEe}var EEe=Object.defineProperty,PEe=Object.getOwnPropertyNames,$le=Object.getOwnPropertySymbols,kEe=Object.getOwnPropertyDescriptor,CEe=Object.getPrototypeOf,Jle=Object.prototype;function Xle(e,t,n){if(typeof t!="string"){if(Jle){var r=CEe(t);r&&r!==Jle&&Xle(e,r,n)}var o=PEe(t);$le&&(o=o.concat($le(t)));for(var i=Ule(e),u=Ule(t),c=0;c{function mAe(){this.__data__=[],this.size=0}Zue.exports=mAe});var xE=_e((ZXt,tce)=>{function hAe(e,t){return e===t||e!==e&&t!==t}tce.exports=hAe});var N2=_e((eKt,rce)=>{var gAe=xE();function vAe(e,t){for(var n=e.length;n--;)if(gAe(e[n][0],t))return n;return-1}rce.exports=vAe});var oce=_e((tKt,nce)=>{var yAe=N2(),bAe=Array.prototype,wAe=bAe.splice;function OAe(e){var t=this.__data__,n=yAe(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():wAe.call(t,n,1),--this.size,!0}nce.exports=OAe});var ace=_e((rKt,ice)=>{var xAe=N2();function _Ae(e){var t=this.__data__,n=xAe(t,e);return n<0?void 0:t[n][1]}ice.exports=_Ae});var sce=_e((nKt,lce)=>{var SAe=N2();function IAe(e){return SAe(this.__data__,e)>-1}lce.exports=IAe});var cce=_e((oKt,uce)=>{var jAe=N2();function EAe(e,t){var n=this.__data__,r=jAe(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}uce.exports=EAe});var F2=_e((iKt,pce)=>{var PAe=ece(),kAe=oce(),CAe=ace(),AAe=sce(),MAe=cce();function F1(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var TAe=F2();function RAe(){this.__data__=new TAe,this.size=0}fce.exports=RAe});var hce=_e((lKt,mce)=>{function zAe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}mce.exports=zAe});var vce=_e((sKt,gce)=>{function DAe(e){return this.__data__.get(e)}gce.exports=DAe});var bce=_e((uKt,yce)=>{function LAe(e){return this.__data__.has(e)}yce.exports=LAe});var kF=_e((cKt,wce)=>{var NAe=typeof global=="object"&&global&&global.Object===Object&&global;wce.exports=NAe});var is=_e((pKt,Oce)=>{var FAe=kF(),WAe=typeof self=="object"&&self&&self.Object===Object&&self,BAe=FAe||WAe||Function("return this")();Oce.exports=BAe});var Td=_e((fKt,xce)=>{var HAe=is(),VAe=HAe.Symbol;xce.exports=VAe});var jce=_e((dKt,Ice)=>{var _ce=Td(),Sce=Object.prototype,qAe=Sce.hasOwnProperty,UAe=Sce.toString,W2=_ce?_ce.toStringTag:void 0;function $Ae(e){var t=qAe.call(e,W2),n=e[W2];try{e[W2]=void 0;var r=!0}catch{}var o=UAe.call(e);return r&&(t?e[W2]=n:delete e[W2]),o}Ice.exports=$Ae});var Pce=_e((mKt,Ece)=>{var JAe=Object.prototype,GAe=JAe.toString;function XAe(e){return GAe.call(e)}Ece.exports=XAe});var Ys=_e((hKt,Ace)=>{var kce=Td(),KAe=jce(),YAe=Pce(),QAe="[object Null]",ZAe="[object Undefined]",Cce=kce?kce.toStringTag:void 0;function eMe(e){return e==null?e===void 0?ZAe:QAe:Cce&&Cce in Object(e)?KAe(e):YAe(e)}Ace.exports=eMe});var Rd=_e((gKt,Mce)=>{function tMe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Mce.exports=tMe});var _E=_e((vKt,Tce)=>{var rMe=Ys(),nMe=Rd(),oMe="[object AsyncFunction]",iMe="[object Function]",aMe="[object GeneratorFunction]",lMe="[object Proxy]";function sMe(e){if(!nMe(e))return!1;var t=rMe(e);return t==iMe||t==aMe||t==oMe||t==lMe}Tce.exports=sMe});var zce=_e((yKt,Rce)=>{var uMe=is(),cMe=uMe["__core-js_shared__"];Rce.exports=cMe});var Nce=_e((bKt,Lce)=>{var CF=zce(),Dce=function(){var e=/[^.]+$/.exec(CF&&CF.keys&&CF.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function pMe(e){return!!Dce&&Dce in e}Lce.exports=pMe});var AF=_e((wKt,Fce)=>{var fMe=Function.prototype,dMe=fMe.toString;function mMe(e){if(e!=null){try{return dMe.call(e)}catch{}try{return e+""}catch{}}return""}Fce.exports=mMe});var Bce=_e((OKt,Wce)=>{var hMe=_E(),gMe=Nce(),vMe=Rd(),yMe=AF(),bMe=/[\\^$.*+?()[\]{}|]/g,wMe=/^\[object .+?Constructor\]$/,OMe=Function.prototype,xMe=Object.prototype,_Me=OMe.toString,SMe=xMe.hasOwnProperty,IMe=RegExp("^"+_Me.call(SMe).replace(bMe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function jMe(e){if(!vMe(e)||gMe(e))return!1;var t=hMe(e)?IMe:wMe;return t.test(yMe(e))}Wce.exports=jMe});var Vce=_e((xKt,Hce)=>{function EMe(e,t){return e?.[t]}Hce.exports=EMe});var Gp=_e((_Kt,qce)=>{var PMe=Bce(),kMe=Vce();function CMe(e,t){var n=kMe(e,t);return PMe(n)?n:void 0}qce.exports=CMe});var SE=_e((SKt,Uce)=>{var AMe=Gp(),MMe=is(),TMe=AMe(MMe,"Map");Uce.exports=TMe});var B2=_e((IKt,$ce)=>{var RMe=Gp(),zMe=RMe(Object,"create");$ce.exports=zMe});var Xce=_e((jKt,Gce)=>{var Jce=B2();function DMe(){this.__data__=Jce?Jce(null):{},this.size=0}Gce.exports=DMe});var Yce=_e((EKt,Kce)=>{function LMe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Kce.exports=LMe});var Zce=_e((PKt,Qce)=>{var NMe=B2(),FMe="__lodash_hash_undefined__",WMe=Object.prototype,BMe=WMe.hasOwnProperty;function HMe(e){var t=this.__data__;if(NMe){var n=t[e];return n===FMe?void 0:n}return BMe.call(t,e)?t[e]:void 0}Qce.exports=HMe});var tpe=_e((kKt,epe)=>{var VMe=B2(),qMe=Object.prototype,UMe=qMe.hasOwnProperty;function $Me(e){var t=this.__data__;return VMe?t[e]!==void 0:UMe.call(t,e)}epe.exports=$Me});var npe=_e((CKt,rpe)=>{var JMe=B2(),GMe="__lodash_hash_undefined__";function XMe(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=JMe&&t===void 0?GMe:t,this}rpe.exports=XMe});var ipe=_e((AKt,ope)=>{var KMe=Xce(),YMe=Yce(),QMe=Zce(),ZMe=tpe(),eTe=npe();function W1(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var ape=ipe(),tTe=F2(),rTe=SE();function nTe(){this.size=0,this.__data__={hash:new ape,map:new(rTe||tTe),string:new ape}}lpe.exports=nTe});var cpe=_e((TKt,upe)=>{function oTe(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}upe.exports=oTe});var H2=_e((RKt,ppe)=>{var iTe=cpe();function aTe(e,t){var n=e.__data__;return iTe(t)?n[typeof t=="string"?"string":"hash"]:n.map}ppe.exports=aTe});var dpe=_e((zKt,fpe)=>{var lTe=H2();function sTe(e){var t=lTe(this,e).delete(e);return this.size-=t?1:0,t}fpe.exports=sTe});var hpe=_e((DKt,mpe)=>{var uTe=H2();function cTe(e){return uTe(this,e).get(e)}mpe.exports=cTe});var vpe=_e((LKt,gpe)=>{var pTe=H2();function fTe(e){return pTe(this,e).has(e)}gpe.exports=fTe});var bpe=_e((NKt,ype)=>{var dTe=H2();function mTe(e,t){var n=dTe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}ype.exports=mTe});var IE=_e((FKt,wpe)=>{var hTe=spe(),gTe=dpe(),vTe=hpe(),yTe=vpe(),bTe=bpe();function B1(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var wTe=F2(),OTe=SE(),xTe=IE(),_Te=200;function STe(e,t){var n=this.__data__;if(n instanceof wTe){var r=n.__data__;if(!OTe||r.length<_Te-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new xTe(r)}return n.set(e,t),this.size=n.size,this}Ope.exports=STe});var MF=_e((BKt,_pe)=>{var ITe=F2(),jTe=dce(),ETe=hce(),PTe=vce(),kTe=bce(),CTe=xpe();function H1(e){var t=this.__data__=new ITe(e);this.size=t.size}H1.prototype.clear=jTe;H1.prototype.delete=ETe;H1.prototype.get=PTe;H1.prototype.has=kTe;H1.prototype.set=CTe;_pe.exports=H1});var Ipe=_e((HKt,Spe)=>{var ATe="__lodash_hash_undefined__";function MTe(e){return this.__data__.set(e,ATe),this}Spe.exports=MTe});var Epe=_e((VKt,jpe)=>{function TTe(e){return this.__data__.has(e)}jpe.exports=TTe});var kpe=_e((qKt,Ppe)=>{var RTe=IE(),zTe=Ipe(),DTe=Epe();function jE(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new RTe;++t{function LTe(e,t){for(var n=-1,r=e==null?0:e.length;++n{function NTe(e,t){return e.has(t)}Mpe.exports=NTe});var TF=_e((JKt,Rpe)=>{var FTe=kpe(),WTe=Ape(),BTe=Tpe(),HTe=1,VTe=2;function qTe(e,t,n,r,o,i){var u=n&HTe,c=e.length,d=t.length;if(c!=d&&!(u&&d>c))return!1;var g=i.get(e),O=i.get(t);if(g&&O)return g==t&&O==e;var S=-1,I=!0,R=n&VTe?new FTe:void 0;for(i.set(e,t),i.set(t,e);++S{var UTe=is(),$Te=UTe.Uint8Array;zpe.exports=$Te});var Lpe=_e((XKt,Dpe)=>{function JTe(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}Dpe.exports=JTe});var Fpe=_e((KKt,Npe)=>{function GTe(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}Npe.exports=GTe});var qpe=_e((YKt,Vpe)=>{var Wpe=Td(),Bpe=RF(),XTe=xE(),KTe=TF(),YTe=Lpe(),QTe=Fpe(),ZTe=1,eRe=2,tRe="[object Boolean]",rRe="[object Date]",nRe="[object Error]",oRe="[object Map]",iRe="[object Number]",aRe="[object RegExp]",lRe="[object Set]",sRe="[object String]",uRe="[object Symbol]",cRe="[object ArrayBuffer]",pRe="[object DataView]",Hpe=Wpe?Wpe.prototype:void 0,zF=Hpe?Hpe.valueOf:void 0;function fRe(e,t,n,r,o,i,u){switch(n){case pRe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case cRe:return!(e.byteLength!=t.byteLength||!i(new Bpe(e),new Bpe(t)));case tRe:case rRe:case iRe:return XTe(+e,+t);case nRe:return e.name==t.name&&e.message==t.message;case aRe:case sRe:return e==t+"";case oRe:var c=YTe;case lRe:var d=r&ZTe;if(c||(c=QTe),e.size!=t.size&&!d)return!1;var g=u.get(e);if(g)return g==t;r|=eRe,u.set(e,t);var O=KTe(c(e),c(t),r,o,i,u);return u.delete(e),O;case uRe:if(zF)return zF.call(e)==zF.call(t)}return!1}Vpe.exports=fRe});var EE=_e((QKt,Upe)=>{function dRe(e,t){for(var n=-1,r=t.length,o=e.length;++n{var mRe=Array.isArray;$pe.exports=mRe});var DF=_e((eYt,Jpe)=>{var hRe=EE(),gRe=as();function vRe(e,t,n){var r=t(e);return gRe(e)?r:hRe(r,n(e))}Jpe.exports=vRe});var Xpe=_e((tYt,Gpe)=>{function yRe(e,t){for(var n=-1,r=e==null?0:e.length,o=0,i=[];++n{function bRe(){return[]}Kpe.exports=bRe});var PE=_e((nYt,Qpe)=>{var wRe=Xpe(),ORe=LF(),xRe=Object.prototype,_Re=xRe.propertyIsEnumerable,Ype=Object.getOwnPropertySymbols,SRe=Ype?function(e){return e==null?[]:(e=Object(e),wRe(Ype(e),function(t){return _Re.call(e,t)}))}:ORe;Qpe.exports=SRe});var efe=_e((oYt,Zpe)=>{function IRe(e,t){for(var n=-1,r=Array(e);++n{function jRe(e){return e!=null&&typeof e=="object"}tfe.exports=jRe});var nfe=_e((aYt,rfe)=>{var ERe=Ys(),PRe=Sl(),kRe="[object Arguments]";function CRe(e){return PRe(e)&&ERe(e)==kRe}rfe.exports=CRe});var NF=_e((lYt,afe)=>{var ofe=nfe(),ARe=Sl(),ife=Object.prototype,MRe=ife.hasOwnProperty,TRe=ife.propertyIsEnumerable,RRe=ofe(function(){return arguments}())?ofe:function(e){return ARe(e)&&MRe.call(e,"callee")&&!TRe.call(e,"callee")};afe.exports=RRe});var sfe=_e((sYt,lfe)=>{function zRe(){return!1}lfe.exports=zRe});var kE=_e((V2,V1)=>{var DRe=is(),LRe=sfe(),pfe=typeof V2=="object"&&V2&&!V2.nodeType&&V2,ufe=pfe&&typeof V1=="object"&&V1&&!V1.nodeType&&V1,NRe=ufe&&ufe.exports===pfe,cfe=NRe?DRe.Buffer:void 0,FRe=cfe?cfe.isBuffer:void 0,WRe=FRe||LRe;V1.exports=WRe});var dfe=_e((uYt,ffe)=>{var BRe=9007199254740991,HRe=/^(?:0|[1-9]\d*)$/;function VRe(e,t){var n=typeof e;return t=t??BRe,!!t&&(n=="number"||n!="symbol"&&HRe.test(e))&&e>-1&&e%1==0&&e{var qRe=9007199254740991;function URe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=qRe}mfe.exports=URe});var gfe=_e((pYt,hfe)=>{var $Re=Ys(),JRe=FF(),GRe=Sl(),XRe="[object Arguments]",KRe="[object Array]",YRe="[object Boolean]",QRe="[object Date]",ZRe="[object Error]",eze="[object Function]",tze="[object Map]",rze="[object Number]",nze="[object Object]",oze="[object RegExp]",ize="[object Set]",aze="[object String]",lze="[object WeakMap]",sze="[object ArrayBuffer]",uze="[object DataView]",cze="[object Float32Array]",pze="[object Float64Array]",fze="[object Int8Array]",dze="[object Int16Array]",mze="[object Int32Array]",hze="[object Uint8Array]",gze="[object Uint8ClampedArray]",vze="[object Uint16Array]",yze="[object Uint32Array]",kn={};kn[cze]=kn[pze]=kn[fze]=kn[dze]=kn[mze]=kn[hze]=kn[gze]=kn[vze]=kn[yze]=!0;kn[XRe]=kn[KRe]=kn[sze]=kn[YRe]=kn[uze]=kn[QRe]=kn[ZRe]=kn[eze]=kn[tze]=kn[rze]=kn[nze]=kn[oze]=kn[ize]=kn[aze]=kn[lze]=!1;function bze(e){return GRe(e)&&JRe(e.length)&&!!kn[$Re(e)]}hfe.exports=bze});var CE=_e((fYt,vfe)=>{function wze(e){return function(t){return e(t)}}vfe.exports=wze});var AE=_e((q2,q1)=>{var Oze=kF(),yfe=typeof q2=="object"&&q2&&!q2.nodeType&&q2,U2=yfe&&typeof q1=="object"&&q1&&!q1.nodeType&&q1,xze=U2&&U2.exports===yfe,WF=xze&&Oze.process,_ze=function(){try{var e=U2&&U2.require&&U2.require("util").types;return e||WF&&WF.binding&&WF.binding("util")}catch{}}();q1.exports=_ze});var BF=_e((dYt,Ofe)=>{var Sze=gfe(),Ize=CE(),bfe=AE(),wfe=bfe&&bfe.isTypedArray,jze=wfe?Ize(wfe):Sze;Ofe.exports=jze});var HF=_e((mYt,xfe)=>{var Eze=efe(),Pze=NF(),kze=as(),Cze=kE(),Aze=dfe(),Mze=BF(),Tze=Object.prototype,Rze=Tze.hasOwnProperty;function zze(e,t){var n=kze(e),r=!n&&Pze(e),o=!n&&!r&&Cze(e),i=!n&&!r&&!o&&Mze(e),u=n||r||o||i,c=u?Eze(e.length,String):[],d=c.length;for(var g in e)(t||Rze.call(e,g))&&!(u&&(g=="length"||o&&(g=="offset"||g=="parent")||i&&(g=="buffer"||g=="byteLength"||g=="byteOffset")||Aze(g,d)))&&c.push(g);return c}xfe.exports=zze});var ME=_e((hYt,_fe)=>{var Dze=Object.prototype;function Lze(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||Dze;return e===n}_fe.exports=Lze});var VF=_e((gYt,Sfe)=>{function Nze(e,t){return function(n){return e(t(n))}}Sfe.exports=Nze});var jfe=_e((vYt,Ife)=>{var Fze=VF(),Wze=Fze(Object.keys,Object);Ife.exports=Wze});var Pfe=_e((yYt,Efe)=>{var Bze=ME(),Hze=jfe(),Vze=Object.prototype,qze=Vze.hasOwnProperty;function Uze(e){if(!Bze(e))return Hze(e);var t=[];for(var n in Object(e))qze.call(e,n)&&n!="constructor"&&t.push(n);return t}Efe.exports=Uze});var qF=_e((bYt,kfe)=>{var $ze=_E(),Jze=FF();function Gze(e){return e!=null&&Jze(e.length)&&!$ze(e)}kfe.exports=Gze});var TE=_e((wYt,Cfe)=>{var Xze=HF(),Kze=Pfe(),Yze=qF();function Qze(e){return Yze(e)?Xze(e):Kze(e)}Cfe.exports=Qze});var UF=_e((OYt,Afe)=>{var Zze=DF(),eDe=PE(),tDe=TE();function rDe(e){return Zze(e,tDe,eDe)}Afe.exports=rDe});var Rfe=_e((xYt,Tfe)=>{var Mfe=UF(),nDe=1,oDe=Object.prototype,iDe=oDe.hasOwnProperty;function aDe(e,t,n,r,o,i){var u=n&nDe,c=Mfe(e),d=c.length,g=Mfe(t),O=g.length;if(d!=O&&!u)return!1;for(var S=d;S--;){var I=c[S];if(!(u?I in t:iDe.call(t,I)))return!1}var R=i.get(e),k=i.get(t);if(R&&k)return R==t&&k==e;var M=!0;i.set(e,t),i.set(t,e);for(var C=u;++S{var lDe=Gp(),sDe=is(),uDe=lDe(sDe,"DataView");zfe.exports=uDe});var Nfe=_e((SYt,Lfe)=>{var cDe=Gp(),pDe=is(),fDe=cDe(pDe,"Promise");Lfe.exports=fDe});var Wfe=_e((IYt,Ffe)=>{var dDe=Gp(),mDe=is(),hDe=dDe(mDe,"Set");Ffe.exports=hDe});var Hfe=_e((jYt,Bfe)=>{var gDe=Gp(),vDe=is(),yDe=gDe(vDe,"WeakMap");Bfe.exports=yDe});var $2=_e((EYt,Xfe)=>{var $F=Dfe(),JF=SE(),GF=Nfe(),XF=Wfe(),KF=Hfe(),Gfe=Ys(),U1=AF(),Vfe="[object Map]",bDe="[object Object]",qfe="[object Promise]",Ufe="[object Set]",$fe="[object WeakMap]",Jfe="[object DataView]",wDe=U1($F),ODe=U1(JF),xDe=U1(GF),_De=U1(XF),SDe=U1(KF),zd=Gfe;($F&&zd(new $F(new ArrayBuffer(1)))!=Jfe||JF&&zd(new JF)!=Vfe||GF&&zd(GF.resolve())!=qfe||XF&&zd(new XF)!=Ufe||KF&&zd(new KF)!=$fe)&&(zd=function(e){var t=Gfe(e),n=t==bDe?e.constructor:void 0,r=n?U1(n):"";if(r)switch(r){case wDe:return Jfe;case ODe:return Vfe;case xDe:return qfe;case _De:return Ufe;case SDe:return $fe}return t});Xfe.exports=zd});var nde=_e((PYt,rde)=>{var YF=MF(),IDe=TF(),jDe=qpe(),EDe=Rfe(),Kfe=$2(),Yfe=as(),Qfe=kE(),PDe=BF(),kDe=1,Zfe="[object Arguments]",ede="[object Array]",RE="[object Object]",CDe=Object.prototype,tde=CDe.hasOwnProperty;function ADe(e,t,n,r,o,i){var u=Yfe(e),c=Yfe(t),d=u?ede:Kfe(e),g=c?ede:Kfe(t);d=d==Zfe?RE:d,g=g==Zfe?RE:g;var O=d==RE,S=g==RE,I=d==g;if(I&&Qfe(e)){if(!Qfe(t))return!1;u=!0,O=!1}if(I&&!O)return i||(i=new YF),u||PDe(e)?IDe(e,t,n,r,o,i):jDe(e,t,d,n,r,o,i);if(!(n&kDe)){var R=O&&tde.call(e,"__wrapped__"),k=S&&tde.call(t,"__wrapped__");if(R||k){var M=R?e.value():e,C=k?t.value():t;return i||(i=new YF),o(M,C,n,r,i)}}return I?(i||(i=new YF),EDe(e,t,n,r,o,i)):!1}rde.exports=ADe});var lde=_e((kYt,ade)=>{var MDe=nde(),ode=Sl();function ide(e,t,n,r,o){return e===t?!0:e==null||t==null||!ode(e)&&!ode(t)?e!==e&&t!==t:MDe(e,t,n,r,ide,o)}ade.exports=ide});var ude=_e((CYt,sde)=>{var TDe=lde();function RDe(e,t){return TDe(e,t)}sde.exports=RDe});var rW=_e((tW,J1)=>{(function(e,t){typeof tW=="object"&&typeof J1<"u"?J1.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(tW,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function n(y){e=y}function r(y){return y instanceof Array||Object.prototype.toString.call(y)==="[object Array]"}function o(y){return y!=null&&Object.prototype.toString.call(y)==="[object Object]"}function i(y,j){return Object.prototype.hasOwnProperty.call(y,j)}function u(y){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(y).length===0;var j;for(j in y)if(i(y,j))return!1;return!0}function c(y){return y===void 0}function d(y){return typeof y=="number"||Object.prototype.toString.call(y)==="[object Number]"}function g(y){return y instanceof Date||Object.prototype.toString.call(y)==="[object Date]"}function O(y,j){var W=[],q,ee=y.length;for(q=0;q>>0,q;for(q=0;q0)for(W=0;W=0;return(de?W?"+":"":"-")+Math.pow(10,Math.max(0,ee)).toString().substr(1)+q}var et=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ut=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Qe={},Ht={};function Xe(y,j,W,q){var ee=q;typeof q=="string"&&(ee=function(){return this[q]()}),y&&(Ht[y]=ee),j&&(Ht[j[0]]=function(){return Be(ee.apply(this,arguments),j[1],j[2])}),W&&(Ht[W]=function(){return this.localeData().ordinal(ee.apply(this,arguments),y)})}function Ft(y){return y.match(/\[[\s\S]/)?y.replace(/^\[|\]$/g,""):y.replace(/\\/g,"")}function Vt(y){var j=y.match(et),W,q;for(W=0,q=j.length;W=0&&ut.test(y);)y=y.replace(ut,q),ut.lastIndex=0,W-=1;return y}var Mr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Sr(y){var j=this._longDateFormat[y],W=this._longDateFormat[y.toUpperCase()];return j||!W?j:(this._longDateFormat[y]=W.match(et).map(function(q){return q==="MMMM"||q==="MM"||q==="DD"||q==="dddd"?q.slice(1):q}).join(""),this._longDateFormat[y])}var An="Invalid date";function jr(){return this._invalidDate}var Dt="%d",en=/\d{1,2}/;function Cr(y){return this._ordinal.replace("%d",y)}var Nn={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function co(y,j,W,q){var ee=this._relativeTime[W];return fe(ee)?ee(y,j,W,q):ee.replace(/%d/i,y)}function po(y,j){var W=this._relativeTime[y>0?"future":"past"];return fe(W)?W(j):W.replace(/%s/i,j)}var qo={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function Mn(y){return typeof y=="string"?qo[y]||qo[y.toLowerCase()]:void 0}function fi(y){var j={},W,q;for(q in y)i(y,q)&&(W=Mn(q),W&&(j[W]=y[q]));return j}var Ba={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function va(y){var j=[],W;for(W in y)i(y,W)&&j.push({unit:W,priority:Ba[W]});return j.sort(function(q,ee){return q.priority-ee.priority}),j}var Qn=/\d/,tn=/\d\d/,Uo=/\d{3}/,f0=/\d{4}/,hc=/[+-]?\d{6}/,br=/\d\d?/,ya=/\d\d\d\d?/,_f=/\d\d\d\d\d\d?/,xs=/\d{1,3}/,mu=/\d{1,4}/,Sf=/[+-]?\d{1,6}/,hu=/\d+/,gu=/[+-]?\d+/,$A=/Z|[+-]\d\d:?\d\d/gi,d0=/Z|[+-]\d\d(?::?\d\d)?/gi,rg=/[+-]?\d+(\.\d{1,3})?/,If=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,gc=/^[1-9]\d?/,vu=/^([1-9]\d|\d)/,Ha;Ha={};function mt(y,j,W){Ha[y]=fe(j)?j:function(q,ee){return q&&W?W:j}}function $o(y,j){return i(Ha,y)?Ha[y](j._strict,j._locale):new RegExp(Fn(y))}function Fn(y){return Jo(y.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(j,W,q,ee,de){return W||q||ee||de}))}function Jo(y){return y.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Mi(y){return y<0?Math.ceil(y)||0:Math.floor(y)}function Er(y){var j=+y,W=0;return j!==0&&isFinite(j)&&(W=Mi(j)),W}var vc={};function Jr(y,j){var W,q=j,ee;for(typeof y=="string"&&(y=[y]),d(j)&&(q=function(de,ze){ze[j]=Er(de)}),ee=y.length,W=0;W68?1900:2e3)};var og=wu("FullYear",!0);function ig(){return m0(this.year())}function wu(y,j){return function(W){return W!=null?(ag(this,y,W),t.updateOffset(this,j),this):yc(this,y)}}function yc(y,j){if(!y.isValid())return NaN;var W=y._d,q=y._isUTC;switch(j){case"Milliseconds":return q?W.getUTCMilliseconds():W.getMilliseconds();case"Seconds":return q?W.getUTCSeconds():W.getSeconds();case"Minutes":return q?W.getUTCMinutes():W.getMinutes();case"Hours":return q?W.getUTCHours():W.getHours();case"Date":return q?W.getUTCDate():W.getDate();case"Day":return q?W.getUTCDay():W.getDay();case"Month":return q?W.getUTCMonth():W.getMonth();case"FullYear":return q?W.getUTCFullYear():W.getFullYear();default:return NaN}}function ag(y,j,W){var q,ee,de,ze,gt;if(!(!y.isValid()||isNaN(W))){switch(q=y._d,ee=y._isUTC,j){case"Milliseconds":return void(ee?q.setUTCMilliseconds(W):q.setMilliseconds(W));case"Seconds":return void(ee?q.setUTCSeconds(W):q.setSeconds(W));case"Minutes":return void(ee?q.setUTCMinutes(W):q.setMinutes(W));case"Hours":return void(ee?q.setUTCHours(W):q.setHours(W));case"Date":return void(ee?q.setUTCDate(W):q.setDate(W));case"FullYear":break;default:return}de=W,ze=y.month(),gt=y.date(),gt=gt===29&&ze===1&&!m0(de)?28:gt,ee?q.setUTCFullYear(de,ze,gt):q.setFullYear(de,ze,gt)}}function B8(y){return y=Mn(y),fe(this[y])?this[y]():this}function H8(y,j){if(typeof y=="object"){y=fi(y);var W=va(y),q,ee=W.length;for(q=0;q=0?(gt=new Date(y+400,j,W,q,ee,de,ze),isFinite(gt.getFullYear())&>.setFullYear(y)):gt=new Date(y,j,W,q,ee,de,ze),gt}function Rl(y){var j,W;return y<100&&y>=0?(W=Array.prototype.slice.call(arguments),W[0]=y+400,j=new Date(Date.UTC.apply(null,W)),isFinite(j.getUTCFullYear())&&j.setUTCFullYear(y)):j=new Date(Date.UTC.apply(null,arguments)),j}function v0(y,j,W){var q=7+j-W,ee=(7+Rl(y,0,q).getUTCDay()-j)%7;return-ee+q-1}function fg(y,j,W,q,ee){var de=(7+W-q)%7,ze=v0(y,q,ee),gt=1+7*(j-1)+de+ze,Kt,Ar;return gt<=0?(Kt=y-1,Ar=bu(Kt)+gt):gt>bu(y)?(Kt=y+1,Ar=gt-bu(y)):(Kt=y,Ar=gt),{year:Kt,dayOfYear:Ar}}function Oc(y,j,W){var q=v0(y.year(),j,W),ee=Math.floor((y.dayOfYear()-q-1)/7)+1,de,ze;return ee<1?(ze=y.year()-1,de=ee+wa(ze,j,W)):ee>wa(y.year(),j,W)?(de=ee-wa(y.year(),j,W),ze=y.year()+1):(ze=y.year(),de=ee),{week:de,year:ze}}function wa(y,j,W){var q=v0(y,j,W),ee=v0(y+1,j,W);return(bu(y)-q+ee)/7}Xe("w",["ww",2],"wo","week"),Xe("W",["WW",2],"Wo","isoWeek"),mt("w",br,gc),mt("ww",br,tn),mt("W",br,gc),mt("WW",br,tn),jf(["w","ww","W","WW"],function(y,j,W,q){j[q.substr(0,1)]=Er(y)});function dg(y){return Oc(y,this._week.dow,this._week.doy).week}var y0={dow:0,doy:6};function mg(){return this._week.dow}function hg(){return this._week.doy}function qa(y){var j=this.localeData().week(this);return y==null?j:this.add((y-j)*7,"d")}function xc(y){var j=Oc(this,1,4).week;return y==null?j:this.add((y-j)*7,"d")}Xe("d",0,"do","day"),Xe("dd",0,0,function(y){return this.localeData().weekdaysMin(this,y)}),Xe("ddd",0,0,function(y){return this.localeData().weekdaysShort(this,y)}),Xe("dddd",0,0,function(y){return this.localeData().weekdays(this,y)}),Xe("e",0,0,"weekday"),Xe("E",0,0,"isoWeekday"),mt("d",br),mt("e",br),mt("E",br),mt("dd",function(y,j){return j.weekdaysMinRegex(y)}),mt("ddd",function(y,j){return j.weekdaysShortRegex(y)}),mt("dddd",function(y,j){return j.weekdaysRegex(y)}),jf(["dd","ddd","dddd"],function(y,j,W,q){var ee=W._locale.weekdaysParse(y,q,W._strict);ee!=null?j.d=ee:k(W).invalidWeekday=y}),jf(["d","e","E"],function(y,j,W,q){j[q]=Er(y)});function b0(y,j){return typeof y!="string"?y:isNaN(y)?(y=j.weekdaysParse(y),typeof y=="number"?y:null):parseInt(y,10)}function w0(y,j){return typeof y=="string"?j.weekdaysParse(y)%7||7:isNaN(y)?null:y}function O0(y,j){return y.slice(j,7).concat(y.slice(0,j))}var gg="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Pf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),vg="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),x0=If,QA=If,Go=If;function kf(y,j){var W=r(this._weekdays)?this._weekdays:this._weekdays[y&&y!==!0&&this._weekdays.isFormat.test(j)?"format":"standalone"];return y===!0?O0(W,this._week.dow):y?W[y.day()]:W}function yg(y){return y===!0?O0(this._weekdaysShort,this._week.dow):y?this._weekdaysShort[y.day()]:this._weekdaysShort}function _0(y){return y===!0?O0(this._weekdaysMin,this._week.dow):y?this._weekdaysMin[y.day()]:this._weekdaysMin}function _c(y,j,W){var q,ee,de,ze=y.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],q=0;q<7;++q)de=I([2e3,1]).day(q),this._minWeekdaysParse[q]=this.weekdaysMin(de,"").toLocaleLowerCase(),this._shortWeekdaysParse[q]=this.weekdaysShort(de,"").toLocaleLowerCase(),this._weekdaysParse[q]=this.weekdays(de,"").toLocaleLowerCase();return W?j==="dddd"?(ee=Tn.call(this._weekdaysParse,ze),ee!==-1?ee:null):j==="ddd"?(ee=Tn.call(this._shortWeekdaysParse,ze),ee!==-1?ee:null):(ee=Tn.call(this._minWeekdaysParse,ze),ee!==-1?ee:null):j==="dddd"?(ee=Tn.call(this._weekdaysParse,ze),ee!==-1||(ee=Tn.call(this._shortWeekdaysParse,ze),ee!==-1)?ee:(ee=Tn.call(this._minWeekdaysParse,ze),ee!==-1?ee:null)):j==="ddd"?(ee=Tn.call(this._shortWeekdaysParse,ze),ee!==-1||(ee=Tn.call(this._weekdaysParse,ze),ee!==-1)?ee:(ee=Tn.call(this._minWeekdaysParse,ze),ee!==-1?ee:null)):(ee=Tn.call(this._minWeekdaysParse,ze),ee!==-1||(ee=Tn.call(this._weekdaysParse,ze),ee!==-1)?ee:(ee=Tn.call(this._shortWeekdaysParse,ze),ee!==-1?ee:null))}function J8(y,j,W){var q,ee,de;if(this._weekdaysParseExact)return _c.call(this,y,j,W);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),q=0;q<7;q++){if(ee=I([2e3,1]).day(q),W&&!this._fullWeekdaysParse[q]&&(this._fullWeekdaysParse[q]=new RegExp("^"+this.weekdays(ee,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[q]=new RegExp("^"+this.weekdaysShort(ee,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[q]=new RegExp("^"+this.weekdaysMin(ee,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[q]||(de="^"+this.weekdays(ee,"")+"|^"+this.weekdaysShort(ee,"")+"|^"+this.weekdaysMin(ee,""),this._weekdaysParse[q]=new RegExp(de.replace(".",""),"i")),W&&j==="dddd"&&this._fullWeekdaysParse[q].test(y))return q;if(W&&j==="ddd"&&this._shortWeekdaysParse[q].test(y))return q;if(W&&j==="dd"&&this._minWeekdaysParse[q].test(y))return q;if(!W&&this._weekdaysParse[q].test(y))return q}}function G8(y){if(!this.isValid())return y!=null?this:NaN;var j=yc(this,"Day");return y!=null?(y=b0(y,this.localeData()),this.add(y-j,"d")):j}function Ou(y){if(!this.isValid())return y!=null?this:NaN;var j=(this.day()+7-this.localeData()._week.dow)%7;return y==null?j:this.add(y-j,"d")}function Ua(y){if(!this.isValid())return y!=null?this:NaN;if(y!=null){var j=w0(y,this.localeData());return this.day(this.day()%7?j:j-7)}else return this.day()||7}function X8(y){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Cf.call(this),y?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=x0),this._weekdaysStrictRegex&&y?this._weekdaysStrictRegex:this._weekdaysRegex)}function K8(y){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Cf.call(this),y?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=QA),this._weekdaysShortStrictRegex&&y?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Y8(y){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Cf.call(this),y?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Go),this._weekdaysMinStrictRegex&&y?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Cf(){function y(_o,Xa){return Xa.length-_o.length}var j=[],W=[],q=[],ee=[],de,ze,gt,Kt,Ar;for(de=0;de<7;de++)ze=I([2e3,1]).day(de),gt=Jo(this.weekdaysMin(ze,"")),Kt=Jo(this.weekdaysShort(ze,"")),Ar=Jo(this.weekdays(ze,"")),j.push(gt),W.push(Kt),q.push(Ar),ee.push(gt),ee.push(Kt),ee.push(Ar);j.sort(y),W.sort(y),q.sort(y),ee.sort(y),this._weekdaysRegex=new RegExp("^("+ee.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+W.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+j.join("|")+")","i")}function Sc(){return this.hours()%12||12}function Q8(){return this.hours()||24}Xe("H",["HH",2],0,"hour"),Xe("h",["hh",2],0,Sc),Xe("k",["kk",2],0,Q8),Xe("hmm",0,0,function(){return""+Sc.apply(this)+Be(this.minutes(),2)}),Xe("hmmss",0,0,function(){return""+Sc.apply(this)+Be(this.minutes(),2)+Be(this.seconds(),2)}),Xe("Hmm",0,0,function(){return""+this.hours()+Be(this.minutes(),2)}),Xe("Hmmss",0,0,function(){return""+this.hours()+Be(this.minutes(),2)+Be(this.seconds(),2)});function bg(y,j){Xe(y,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),j)})}bg("a",!0),bg("A",!1);function wg(y,j){return j._meridiemParse}mt("a",wg),mt("A",wg),mt("H",br,vu),mt("h",br,gc),mt("k",br,gc),mt("HH",br,tn),mt("hh",br,tn),mt("kk",br,tn),mt("hmm",ya),mt("hmmss",_f),mt("Hmm",ya),mt("Hmmss",_f),Jr(["H","HH"],Zn),Jr(["k","kk"],function(y,j,W){var q=Er(y);j[Zn]=q===24?0:q}),Jr(["a","A"],function(y,j,W){W._isPm=W._locale.isPM(y),W._meridiem=y}),Jr(["h","hh"],function(y,j,W){j[Zn]=Er(y),k(W).bigHour=!0}),Jr("hmm",function(y,j,W){var q=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q)),k(W).bigHour=!0}),Jr("hmmss",function(y,j,W){var q=y.length-4,ee=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q,2)),j[Tl]=Er(y.substr(ee)),k(W).bigHour=!0}),Jr("Hmm",function(y,j,W){var q=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q))}),Jr("Hmmss",function(y,j,W){var q=y.length-4,ee=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q,2)),j[Tl]=Er(y.substr(ee))});function Z8(y){return(y+"").toLowerCase().charAt(0)==="p"}var e9=/[ap]\.?m?\.?/i,S0=wu("Hours",!0);function t9(y,j,W){return y>11?W?"pm":"PM":W?"am":"AM"}var r9={calendar:$e,longDateFormat:Mr,invalidDate:An,ordinal:Dt,dayOfMonthOrdinalParse:en,relativeTime:Nn,months:V8,monthsShort:sg,week:y0,weekdays:gg,weekdaysMin:vg,weekdaysShort:Pf,meridiemParse:e9},zr={},Af={},xu;function n9(y,j){var W,q=Math.min(y.length,j.length);for(W=0;W0;){if(ee=Mf(de.slice(0,W).join("-")),ee)return ee;if(q&&q.length>=W&&n9(de,q)>=W-1)break;W--}j++}return xu}function i9(y){return!!(y&&y.match("^[^/\\\\]*$"))}function Mf(y){var j=null,W;if(zr[y]===void 0&&typeof q1<"u"&&q1&&q1.exports&&i9(y))try{j=xu._abbr,W=rne,W("./locale/"+y),Gi(j)}catch{zr[y]=null}return zr[y]}function Gi(y,j){var W;return y&&(c(j)?W=Xi(y):W=Hr(y,j),W?xu=W:typeof console<"u"&&console.warn&&console.warn("Locale "+y+" not found. Did you forget to load it?")),xu._abbr}function Hr(y,j){if(j!==null){var W,q=r9;if(j.abbr=y,zr[y]!=null)ye("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),q=zr[y]._config;else if(j.parentLocale!=null)if(zr[j.parentLocale]!=null)q=zr[j.parentLocale]._config;else if(W=Mf(j.parentLocale),W!=null)q=W._config;else return Af[j.parentLocale]||(Af[j.parentLocale]=[]),Af[j.parentLocale].push({name:y,config:j}),null;return zr[y]=new me(xe(q,j)),Af[y]&&Af[y].forEach(function(ee){Hr(ee.name,ee.config)}),Gi(y),zr[y]}else return delete zr[y],null}function ZA(y,j){if(j!=null){var W,q,ee=r9;zr[y]!=null&&zr[y].parentLocale!=null?zr[y].set(xe(zr[y]._config,j)):(q=Mf(y),q!=null&&(ee=q._config),j=xe(ee,j),q==null&&(j.abbr=y),W=new me(j),W.parentLocale=zr[y],zr[y]=W),Gi(y)}else zr[y]!=null&&(zr[y].parentLocale!=null?(zr[y]=zr[y].parentLocale,y===Gi()&&Gi(y)):zr[y]!=null&&delete zr[y]);return zr[y]}function Xi(y){var j;if(y&&y._locale&&y._locale._abbr&&(y=y._locale._abbr),!y)return xu;if(!r(y)){if(j=Mf(y),j)return j;y=[y]}return o9(y)}function a9(){return We(zr)}function I0(y){var j,W=y._a;return W&&k(y).overflow===-2&&(j=W[di]<0||W[di]>11?di:W[Va]<1||W[Va]>h0(W[Mo],W[di])?Va:W[Zn]<0||W[Zn]>24||W[Zn]===24&&(W[ba]!==0||W[Tl]!==0||W[yu]!==0)?Zn:W[ba]<0||W[ba]>59?ba:W[Tl]<0||W[Tl]>59?Tl:W[yu]<0||W[yu]>999?yu:-1,k(y)._overflowDayOfYear&&(jVa)&&(j=Va),k(y)._overflowWeeks&&j===-1&&(j=JA),k(y)._overflowWeekday&&j===-1&&(j=ng),k(y).overflow=j),y}var l9=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ic=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,s9=/Z|[+-]\d\d(?::?\d\d)?/,Tf=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Rf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],xg=/^\/?Date\((-?\d+)/i,u9=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,c9={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function p9(y){var j,W,q=y._i,ee=l9.exec(q)||Ic.exec(q),de,ze,gt,Kt,Ar=Tf.length,_o=Rf.length;if(ee){for(k(y).iso=!0,j=0,W=Ar;jbu(ze)||y._dayOfYear===0)&&(k(y)._overflowDayOfYear=!0),W=Rl(ze,0,y._dayOfYear),y._a[di]=W.getUTCMonth(),y._a[Va]=W.getUTCDate()),j=0;j<3&&y._a[j]==null;++j)y._a[j]=q[j]=ee[j];for(;j<7;j++)y._a[j]=q[j]=y._a[j]==null?j===2?1:0:y._a[j];y._a[Zn]===24&&y._a[ba]===0&&y._a[Tl]===0&&y._a[yu]===0&&(y._nextDay=!0,y._a[Zn]=0),y._d=(y._useUTC?Rl:YA).apply(null,q),de=y._useUTC?y._d.getUTCDay():y._d.getDay(),y._tzm!=null&&y._d.setUTCMinutes(y._d.getUTCMinutes()-y._tzm),y._nextDay&&(y._a[Zn]=24),y._w&&typeof y._w.d<"u"&&y._w.d!==de&&(k(y).weekdayMismatch=!0)}}function oM(y){var j,W,q,ee,de,ze,gt,Kt,Ar;j=y._w,j.GG!=null||j.W!=null||j.E!=null?(de=1,ze=4,W=zl(j.GG,y._a[Mo],Oc(Vr(),1,4).year),q=zl(j.W,1),ee=zl(j.E,1),(ee<1||ee>7)&&(Kt=!0)):(de=y._locale._week.dow,ze=y._locale._week.doy,Ar=Oc(Vr(),de,ze),W=zl(j.gg,y._a[Mo],Ar.year),q=zl(j.w,Ar.week),j.d!=null?(ee=j.d,(ee<0||ee>6)&&(Kt=!0)):j.e!=null?(ee=j.e+de,(j.e<0||j.e>6)&&(Kt=!0)):ee=de),q<1||q>wa(W,de,ze)?k(y)._overflowWeeks=!0:Kt!=null?k(y)._overflowWeekday=!0:(gt=fg(W,q,ee,de,ze),y._a[Mo]=gt.year,y._dayOfYear=gt.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function _g(y){if(y._f===t.ISO_8601){p9(y);return}if(y._f===t.RFC_2822){m9(y);return}y._a=[],k(y).empty=!0;var j=""+y._i,W,q,ee,de,ze,gt=j.length,Kt=0,Ar,_o;for(ee=Ct(y._f,y._locale).match(et)||[],_o=ee.length,W=0;W<_o;W++)de=ee[W],q=(j.match($o(de,y))||[])[0],q&&(ze=j.substr(0,j.indexOf(q)),ze.length>0&&k(y).unusedInput.push(ze),j=j.slice(j.indexOf(q)+q.length),Kt+=q.length),Ht[de]?(q?k(y).empty=!1:k(y).unusedTokens.push(de),W8(de,q,y)):y._strict&&!q&&k(y).unusedTokens.push(de);k(y).charsLeftOver=gt-Kt,j.length>0&&k(y).unusedInput.push(j),y._a[Zn]<=12&&k(y).bigHour===!0&&y._a[Zn]>0&&(k(y).bigHour=void 0),k(y).parsedDateParts=y._a.slice(0),k(y).meridiem=y._meridiem,y._a[Zn]=iM(y._locale,y._a[Zn],y._meridiem),Ar=k(y).era,Ar!==null&&(y._a[Mo]=y._locale.erasConvertYear(Ar,y._a[Mo])),Dr(y),I0(y)}function iM(y,j,W){var q;return W==null?j:y.meridiemHour!=null?y.meridiemHour(j,W):(y.isPM!=null&&(q=y.isPM(W),q&&j<12&&(j+=12),!q&&j===12&&(j=0)),j)}function aM(y){var j,W,q,ee,de,ze,gt=!1,Kt=y._f.length;if(Kt===0){k(y).invalidFormat=!0,y._d=new Date(NaN);return}for(ee=0;eethis?this:y:T()});function v9(y,j){var W,q;if(j.length===1&&r(j[0])&&(j=j[0]),!j.length)return Vr();for(W=j[0],q=1;qthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Eg(){if(!c(this._isDSTShifted))return this._isDSTShifted;var y={},j;return X(y,this),y=h9(y),y._a?(j=y._isUTC?I(y._a):Vr(y._a),this._isDSTShifted=this.isValid()&&pM(y._a,j.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function hM(){return this.isValid()?!this._isUTC:!1}function R0(){return this.isValid()?this._isUTC:!1}function x9(){return this.isValid()?this._isUTC&&this._offset===0:!1}var gM=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,vM=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Oa(y,j){var W=y,q=null,ee,de,ze;return A0(y)?W={ms:y._milliseconds,d:y._days,M:y._months}:d(y)||!isNaN(+y)?(W={},j?W[j]=+y:W.milliseconds=+y):(q=gM.exec(y))?(ee=q[1]==="-"?-1:1,W={y:0,d:Er(q[Va])*ee,h:Er(q[Zn])*ee,m:Er(q[ba])*ee,s:Er(q[Tl])*ee,ms:Er(Sg(q[yu]*1e3))*ee}):(q=vM.exec(y))?(ee=q[1]==="-"?-1:1,W={y:Su(q[2],ee),M:Su(q[3],ee),w:Su(q[4],ee),d:Su(q[5],ee),h:Su(q[6],ee),m:Su(q[7],ee),s:Su(q[8],ee)}):W==null?W={}:typeof W=="object"&&("from"in W||"to"in W)&&(ze=yM(Vr(W.from),Vr(W.to)),W={},W.ms=ze.milliseconds,W.M=ze.months),de=new _u(W),A0(y)&&i(y,"_locale")&&(de._locale=y._locale),A0(y)&&i(y,"_isValid")&&(de._isValid=y._isValid),de}Oa.fn=_u.prototype,Oa.invalid=C0;function Su(y,j){var W=y&&parseFloat(y.replace(",","."));return(isNaN(W)?0:W)*j}function Pg(y,j){var W={};return W.months=j.month()-y.month()+(j.year()-y.year())*12,y.clone().add(W.months,"M").isAfter(j)&&--W.months,W.milliseconds=+j-+y.clone().add(W.months,"M"),W}function yM(y,j){var W;return y.isValid()&&j.isValid()?(j=Pc(j,y),y.isBefore(j)?W=Pg(y,j):(W=Pg(j,y),W.milliseconds=-W.milliseconds,W.months=-W.months),W):{milliseconds:0,months:0}}function _9(y,j){return function(W,q){var ee,de;return q!==null&&!isNaN(+q)&&(ye(j,"moment()."+j+"(period, number) is deprecated. Please use moment()."+j+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),de=W,W=q,q=de),ee=Oa(W,q),z0(this,ee,y),this}}function z0(y,j,W,q){var ee=j._milliseconds,de=Sg(j._days),ze=Sg(j._months);y.isValid()&&(q=q??!0,ze&&bc(y,yc(y,"Month")+ze*W),de&&ag(y,"Date",yc(y,"Date")+de*W),ee&&y._d.setTime(y._d.valueOf()+ee*W),q&&t.updateOffset(y,de||ze))}var bM=_9(1,"add"),D0=_9(-1,"subtract");function kg(y){return typeof y=="string"||y instanceof String}function S9(y){return K(y)||g(y)||kg(y)||d(y)||_s(y)||wM(y)||y===null||y===void 0}function wM(y){var j=o(y)&&!u(y),W=!1,q=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],ee,de,ze=q.length;for(ee=0;eeW.valueOf():W.valueOf()9999?lt(W,j?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):fe(Date.prototype.toISOString)?j?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",lt(W,"Z")):lt(W,j?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function jM(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var y="moment",j="",W,q,ee,de;return this.isLocal()||(y=this.utcOffset()===0?"moment.utc":"moment.parseZone",j="Z"),W="["+y+'("]',q=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",ee="-MM-DD[T]HH:mm:ss.SSS",de=j+'[")]',this.format(W+q+ee+de)}function k9(y){y||(y=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var j=lt(this,y);return this.localeData().postformat(j)}function EM(y,j){return this.isValid()&&(K(y)&&y.isValid()||Vr(y).isValid())?Oa({to:this,from:y}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function PM(y){return this.from(Vr(),y)}function kM(y,j){return this.isValid()&&(K(y)&&y.isValid()||Vr(y).isValid())?Oa({from:this,to:y}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function CM(y){return this.to(Vr(),y)}function L0(y){var j;return y===void 0?this._locale._abbr:(j=Xi(y),j!=null&&(this._locale=j),this)}var C9=ne("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(y){return y===void 0?this.localeData():this.locale(y)});function A9(){return this._locale}var zf=1e3,kc=60*zf,N0=60*kc,M9=(365*400+97)*24*N0;function Iu(y,j){return(y%j+j)%j}function To(y,j,W){return y<100&&y>=0?new Date(y+400,j,W)-M9:new Date(y,j,W).valueOf()}function Ti(y,j,W){return y<100&&y>=0?Date.UTC(y+400,j,W)-M9:Date.UTC(y,j,W)}function Ss(y){var j,W;if(y=Mn(y),y===void 0||y==="millisecond"||!this.isValid())return this;switch(W=this._isUTC?Ti:To,y){case"year":j=W(this.year(),0,1);break;case"quarter":j=W(this.year(),this.month()-this.month()%3,1);break;case"month":j=W(this.year(),this.month(),1);break;case"week":j=W(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":j=W(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":j=W(this.year(),this.month(),this.date());break;case"hour":j=this._d.valueOf(),j-=Iu(j+(this._isUTC?0:this.utcOffset()*kc),N0);break;case"minute":j=this._d.valueOf(),j-=Iu(j,kc);break;case"second":j=this._d.valueOf(),j-=Iu(j,zf);break}return this._d.setTime(j),t.updateOffset(this,!0),this}function Dl(y){var j,W;if(y=Mn(y),y===void 0||y==="millisecond"||!this.isValid())return this;switch(W=this._isUTC?Ti:To,y){case"year":j=W(this.year()+1,0,1)-1;break;case"quarter":j=W(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":j=W(this.year(),this.month()+1,1)-1;break;case"week":j=W(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":j=W(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":j=W(this.year(),this.month(),this.date()+1)-1;break;case"hour":j=this._d.valueOf(),j+=N0-Iu(j+(this._isUTC?0:this.utcOffset()*kc),N0)-1;break;case"minute":j=this._d.valueOf(),j+=kc-Iu(j,kc)-1;break;case"second":j=this._d.valueOf(),j+=zf-Iu(j,zf)-1;break}return this._d.setTime(j),t.updateOffset(this,!0),this}function ju(){return this._d.valueOf()-(this._offset||0)*6e4}function Cc(){return Math.floor(this.valueOf()/1e3)}function Ac(){return new Date(this.valueOf())}function AM(){var y=this;return[y.year(),y.month(),y.date(),y.hour(),y.minute(),y.second(),y.millisecond()]}function T9(){var y=this;return{years:y.year(),months:y.month(),date:y.date(),hours:y.hours(),minutes:y.minutes(),seconds:y.seconds(),milliseconds:y.milliseconds()}}function R9(){return this.isValid()?this.toISOString():null}function Mg(){return M(this)}function Tg(){return S({},k(this))}function Is(){return k(this).overflow}function Rg(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}Xe("N",0,0,"eraAbbr"),Xe("NN",0,0,"eraAbbr"),Xe("NNN",0,0,"eraAbbr"),Xe("NNNN",0,0,"eraName"),Xe("NNNNN",0,0,"eraNarrow"),Xe("y",["y",1],"yo","eraYear"),Xe("y",["yy",2],0,"eraYear"),Xe("y",["yyy",3],0,"eraYear"),Xe("y",["yyyy",4],0,"eraYear"),mt("N",Wg),mt("NN",Wg),mt("NNN",Wg),mt("NNNN",Bg),mt("NNNNN",W0),Jr(["N","NN","NNN","NNNN","NNNNN"],function(y,j,W,q){var ee=W._locale.erasParse(y,q,W._strict);ee?k(W).era=ee:k(W).invalidEra=y}),mt("y",hu),mt("yy",hu),mt("yyy",hu),mt("yyyy",hu),mt("yo",D9),Jr(["y","yy","yyy","yyyy"],Mo),Jr(["yo"],function(y,j,W,q){var ee;W._locale._eraYearOrdinalRegex&&(ee=y.match(W._locale._eraYearOrdinalRegex)),W._locale.eraYearOrdinalParse?j[Mo]=W._locale.eraYearOrdinalParse(y,ee):j[Mo]=parseInt(y,10)});function zg(y,j){var W,q,ee,de=this._eras||Xi("en")._eras;for(W=0,q=de.length;W=0)return de[q]}function Dg(y,j){var W=y.since<=y.until?1:-1;return j===void 0?t(y.since).year():t(y.since).year()+(j-y.offset)*W}function Ja(){var y,j,W,q=this.localeData().eras();for(y=0,j=q.length;yde&&(j=de),W9.call(this,y,j,W,q,ee))}function W9(y,j,W,q,ee){var de=fg(y,j,W,q,ee),ze=Rl(de.year,0,de.dayOfYear);return this.year(ze.getUTCFullYear()),this.month(ze.getUTCMonth()),this.date(ze.getUTCDate()),this}Xe("Q",0,"Qo","quarter"),mt("Q",Qn),Jr("Q",function(y,j){j[di]=(Er(y)-1)*3});function Df(y){return y==null?Math.ceil((this.month()+1)/3):this.month((y-1)*3+this.month()%3)}Xe("D",["DD",2],"Do","date"),mt("D",br,gc),mt("DD",br,tn),mt("Do",function(y,j){return y?j._dayOfMonthOrdinalParse||j._ordinalParse:j._dayOfMonthOrdinalParseLenient}),Jr(["D","DD"],Va),Jr("Do",function(y,j){j[Va]=Er(y.match(br)[0])});var B0=wu("Date",!0);Xe("DDD",["DDDD",3],"DDDo","dayOfYear"),mt("DDD",xs),mt("DDDD",Uo),Jr(["DDD","DDDD"],function(y,j,W){W._dayOfYear=Er(y)});function zM(y){var j=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return y==null?j:this.add(y-j,"d")}Xe("m",["mm",2],0,"minute"),mt("m",br,vu),mt("mm",br,tn),Jr(["m","mm"],ba);var DM=wu("Minutes",!1);Xe("s",["ss",2],0,"second"),mt("s",br,vu),mt("ss",br,tn),Jr(["s","ss"],Tl);var B9=wu("Seconds",!1);Xe("S",0,0,function(){return~~(this.millisecond()/100)}),Xe(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Xe(0,["SSS",3],0,"millisecond"),Xe(0,["SSSS",4],0,function(){return this.millisecond()*10}),Xe(0,["SSSSS",5],0,function(){return this.millisecond()*100}),Xe(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),Xe(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),Xe(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),Xe(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),mt("S",xs,Qn),mt("SS",xs,tn),mt("SSS",xs,Uo);var Ll,qg;for(Ll="SSSS";Ll.length<=9;Ll+="S")mt(Ll,hu);function yn(y,j){j[yu]=Er(("0."+y)*1e3)}for(Ll="S";Ll.length<=9;Ll+="S")Jr(Ll,yn);qg=wu("Milliseconds",!1),Xe("z",0,0,"zoneAbbr"),Xe("zz",0,0,"zoneName");function LM(){return this._isUTC?"UTC":""}function Rc(){return this._isUTC?"Coordinated Universal Time":""}var Ze=Y.prototype;Ze.add=bM,Ze.calendar=j9,Ze.clone=E9,Ze.diff=AQ,Ze.endOf=Dl,Ze.format=k9,Ze.from=EM,Ze.fromNow=PM,Ze.to=kM,Ze.toNow=CM,Ze.get=B8,Ze.invalidAt=Is,Ze.isAfter=OM,Ze.isBefore=xM,Ze.isBetween=_M,Ze.isSame=SM,Ze.isSameOrAfter=vn,Ze.isSameOrBefore=CQ,Ze.isValid=Mg,Ze.lang=C9,Ze.locale=L0,Ze.localeData=A9,Ze.max=sM,Ze.min=lM,Ze.parsingFlags=Tg,Ze.set=H8,Ze.startOf=Ss,Ze.subtract=D0,Ze.toArray=AM,Ze.toObject=T9,Ze.toDate=Ac,Ze.toISOString=P9,Ze.inspect=jM,typeof Symbol<"u"&&Symbol.for!=null&&(Ze[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),Ze.toJSON=R9,Ze.toString=IM,Ze.unix=Cc,Ze.valueOf=ju,Ze.creationData=Rg,Ze.eraName=Ja,Ze.eraNarrow=TM,Ze.eraAbbr=Lg,Ze.eraYear=Ng,Ze.year=og,Ze.isLeapYear=ig,Ze.weekYear=L9,Ze.isoWeekYear=js,Ze.quarter=Ze.quarters=Df,Ze.month=wc,Ze.daysInMonth=g0,Ze.week=Ze.weeks=qa,Ze.isoWeek=Ze.isoWeeks=xc,Ze.weeksInYear=RM,Ze.weeksInWeekYear=N9,Ze.isoWeeksInYear=Hg,Ze.isoWeeksInISOWeekYear=Vg,Ze.date=B0,Ze.day=Ze.days=G8,Ze.weekday=Ou,Ze.isoWeekday=Ua,Ze.dayOfYear=zM,Ze.hour=Ze.hours=S0,Ze.minute=Ze.minutes=DM,Ze.second=Ze.seconds=B9,Ze.millisecond=Ze.milliseconds=qg,Ze.utcOffset=jg,Ze.utc=fM,Ze.local=dM,Ze.parseZone=w9,Ze.hasAlignedHourOffset=mM,Ze.isDST=O9,Ze.isLocal=hM,Ze.isUtcOffset=R0,Ze.isUtc=x9,Ze.isUTC=x9,Ze.zoneAbbr=LM,Ze.zoneName=Rc,Ze.dates=ne("dates accessor is deprecated. Use date instead.",B0),Ze.months=ne("months accessor is deprecated. Use month instead",wc),Ze.years=ne("years accessor is deprecated. Use year instead",og),Ze.zone=ne("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",b9),Ze.isDSTShifted=ne("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Eg);function Ug(y){return Vr(y*1e3)}function Lf(){return Vr.apply(null,arguments).parseZone()}function zc(y){return y}var Lr=me.prototype;Lr.calendar=Ge,Lr.longDateFormat=Sr,Lr.invalidDate=jr,Lr.ordinal=Cr,Lr.preparse=zc,Lr.postformat=zc,Lr.relativeTime=co,Lr.pastFuture=po,Lr.set=ue,Lr.eras=zg,Lr.erasParse=MM,Lr.erasConvertYear=Dg,Lr.erasAbbrRegex=Fg,Lr.erasNameRegex=F0,Lr.erasNarrowRegex=z9,Lr.months=U8,Lr.monthsShort=GA,Lr.monthsParse=$8,Lr.monthsRegex=KA,Lr.monthsShortRegex=XA,Lr.week=dg,Lr.firstDayOfYear=hg,Lr.firstDayOfWeek=mg,Lr.weekdays=kf,Lr.weekdaysMin=_0,Lr.weekdaysShort=yg,Lr.weekdaysParse=J8,Lr.weekdaysRegex=X8,Lr.weekdaysShortRegex=K8,Lr.weekdaysMinRegex=Y8,Lr.isPM=Z8,Lr.meridiem=t9;function Ro(y,j,W,q){var ee=Xi(),de=I().set(q,j);return ee[W](de,y)}function H9(y,j,W){if(d(y)&&(j=y,y=void 0),y=y||"",j!=null)return Ro(y,j,W,"month");var q,ee=[];for(q=0;q<12;q++)ee[q]=Ro(y,q,W,"month");return ee}function V9(y,j,W,q){typeof y=="boolean"?(d(j)&&(W=j,j=void 0),j=j||""):(j=y,W=j,y=!1,d(j)&&(W=j,j=void 0),j=j||"");var ee=Xi(),de=y?ee._week.dow:0,ze,gt=[];if(W!=null)return Ro(j,(W+de)%7,q,"day");for(ze=0;ze<7;ze++)gt[ze]=Ro(j,(ze+de)%7,q,"day");return gt}function MQ(y,j){return H9(y,j,"months")}function TQ(y,j){return H9(y,j,"monthsShort")}function RQ(y,j,W){return V9(y,j,W,"weekdays")}function zQ(y,j,W){return V9(y,j,W,"weekdaysShort")}function DQ(y,j,W){return V9(y,j,W,"weekdaysMin")}Gi("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(y){var j=y%10,W=Er(y%100/10)===1?"th":j===1?"st":j===2?"nd":j===3?"rd":"th";return y+W}}),t.lang=ne("moment.lang is deprecated. Use moment.locale instead.",Gi),t.langData=ne("moment.langData is deprecated. Use moment.localeData instead.",Xi);var Ga=Math.abs;function Nf(){var y=this._data;return this._milliseconds=Ga(this._milliseconds),this._days=Ga(this._days),this._months=Ga(this._months),y.milliseconds=Ga(y.milliseconds),y.seconds=Ga(y.seconds),y.minutes=Ga(y.minutes),y.hours=Ga(y.hours),y.months=Ga(y.months),y.years=Ga(y.years),this}function q9(y,j,W,q){var ee=Oa(j,W);return y._milliseconds+=q*ee._milliseconds,y._days+=q*ee._days,y._months+=q*ee._months,y._bubble()}function NM(y,j){return q9(this,y,j,1)}function FM(y,j){return q9(this,y,j,-1)}function $g(y){return y<0?Math.floor(y):Math.ceil(y)}function U9(){var y=this._milliseconds,j=this._days,W=this._months,q=this._data,ee,de,ze,gt,Kt;return y>=0&&j>=0&&W>=0||y<=0&&j<=0&&W<=0||(y+=$g(H0(W)+j)*864e5,j=0,W=0),q.milliseconds=y%1e3,ee=Mi(y/1e3),q.seconds=ee%60,de=Mi(ee/60),q.minutes=de%60,ze=Mi(de/60),q.hours=ze%24,j+=Mi(ze/24),Kt=Mi(xo(j)),W+=Kt,j-=$g(H0(Kt)),gt=Mi(W/12),W%=12,q.days=j,q.months=W,q.years=gt,this}function xo(y){return y*4800/146097}function H0(y){return y*146097/4800}function Jg(y){if(!this.isValid())return NaN;var j,W,q=this._milliseconds;if(y=Mn(y),y==="month"||y==="quarter"||y==="year")switch(j=this._days+q/864e5,W=this._months+xo(j),y){case"month":return W;case"quarter":return W/3;case"year":return W/12}else switch(j=this._days+Math.round(H0(this._months)),y){case"week":return j/7+q/6048e5;case"day":return j+q/864e5;case"hour":return j*24+q/36e5;case"minute":return j*1440+q/6e4;case"second":return j*86400+q/1e3;case"millisecond":return Math.floor(j*864e5)+q;default:throw new Error("Unknown unit "+y)}}function Ki(y){return function(){return this.as(y)}}var $9=Ki("ms"),J9=Ki("s"),WM=Ki("m"),BM=Ki("h"),V0=Ki("d"),HM=Ki("w"),G9=Ki("M"),X9=Ki("Q"),K9=Ki("y"),Y9=$9;function VM(){return Oa(this)}function Dc(y){return y=Mn(y),this.isValid()?this[y+"s"]():NaN}function Eu(y){return function(){return this.isValid()?this._data[y]:NaN}}var qM=Eu("milliseconds"),UM=Eu("seconds"),Q9=Eu("minutes"),$M=Eu("hours"),JM=Eu("days"),Z9=Eu("months"),Es=Eu("years");function Gg(){return Mi(this.days()/7)}var Nl=Math.round,Lc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function LQ(y,j,W,q,ee){return ee.relativeTime(j||1,!!W,y,q)}function GM(y,j,W,q){var ee=Oa(y).abs(),de=Nl(ee.as("s")),ze=Nl(ee.as("m")),gt=Nl(ee.as("h")),Kt=Nl(ee.as("d")),Ar=Nl(ee.as("M")),_o=Nl(ee.as("w")),Xa=Nl(ee.as("y")),Ps=de<=W.ss&&["s",de]||de0,Ps[4]=q,LQ.apply(null,Ps)}function Vn(y){return y===void 0?Nl:typeof y=="function"?(Nl=y,!0):!1}function XM(y,j){return Lc[y]===void 0?!1:j===void 0?Lc[y]:(Lc[y]=j,y==="s"&&(Lc.ss=j-1),!0)}function KM(y,j){if(!this.isValid())return this.localeData().invalidDate();var W=!1,q=Lc,ee,de;return typeof y=="object"&&(j=y,y=!1),typeof y=="boolean"&&(W=y),typeof j=="object"&&(q=Object.assign({},Lc,j),j.s!=null&&j.ss==null&&(q.ss=j.s-1)),ee=this.localeData(),de=GM(this,!W,q,ee),W&&(de=ee.pastFuture(+this,de)),ee.postformat(de)}var Ff=Math.abs;function Nc(y){return(y>0)-(y<0)||+y}function q0(){if(!this.isValid())return this.localeData().invalidDate();var y=Ff(this._milliseconds)/1e3,j=Ff(this._days),W=Ff(this._months),q,ee,de,ze,gt=this.asSeconds(),Kt,Ar,_o,Xa;return gt?(q=Mi(y/60),ee=Mi(q/60),y%=60,q%=60,de=Mi(W/12),W%=12,ze=y?y.toFixed(3).replace(/\.?0+$/,""):"",Kt=gt<0?"-":"",Ar=Nc(this._months)!==Nc(gt)?"-":"",_o=Nc(this._days)!==Nc(gt)?"-":"",Xa=Nc(this._milliseconds)!==Nc(gt)?"-":"",Kt+"P"+(de?Ar+de+"Y":"")+(W?Ar+W+"M":"")+(j?_o+j+"D":"")+(ee||q||y?"T":"")+(ee?Xa+ee+"H":"")+(q?Xa+q+"M":"")+(y?Xa+ze+"S":"")):"P0D"}var Tr=_u.prototype;Tr.isValid=cM,Tr.abs=Nf,Tr.add=NM,Tr.subtract=FM,Tr.as=Jg,Tr.asMilliseconds=$9,Tr.asSeconds=J9,Tr.asMinutes=WM,Tr.asHours=BM,Tr.asDays=V0,Tr.asWeeks=HM,Tr.asMonths=G9,Tr.asQuarters=X9,Tr.asYears=K9,Tr.valueOf=Y9,Tr._bubble=U9,Tr.clone=VM,Tr.get=Dc,Tr.milliseconds=qM,Tr.seconds=UM,Tr.minutes=Q9,Tr.hours=$M,Tr.days=JM,Tr.weeks=Gg,Tr.months=Z9,Tr.years=Es,Tr.humanize=KM,Tr.toISOString=q0,Tr.toString=q0,Tr.toJSON=q0,Tr.locale=L0,Tr.localeData=A9,Tr.toIsoString=ne("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",q0),Tr.lang=C9,Xe("X",0,0,"unix"),Xe("x",0,0,"valueOf"),mt("x",gu),mt("X",rg),Jr("X",function(y,j,W){W._d=new Date(parseFloat(y)*1e3)}),Jr("x",function(y,j,W){W._d=new Date(Er(y))});return t.version="2.30.1",n(Vr),t.fn=Ze,t.min=uM,t.max=P0,t.now=k0,t.utc=I,t.unix=Ug,t.months=MQ,t.isDate=g,t.locale=Gi,t.invalid=T,t.duration=Oa,t.isMoment=K,t.weekdays=RQ,t.parseZone=Lf,t.localeData=Xi,t.isDuration=A0,t.monthsShort=TQ,t.weekdaysMin=DQ,t.defineLocale=Hr,t.updateLocale=ZA,t.locales=a9,t.weekdaysShort=zQ,t.normalizeUnits=Mn,t.relativeTimeRounding=Vn,t.relativeTimeThreshold=XM,t.calendarFormat=I9,t.prototype=Ze,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var dde=_e((HYt,fde)=>{var zDe=Ks(),DDe=is(),LDe=_l(),NDe="[object String]";function FDe(e){return typeof e=="string"||!DDe(e)&&LDe(e)&&zDe(e)==NDe}fde.exports=FDe});var hde=_e((VYt,mde)=>{var WDe=Ks(),BDe=_l(),HDe="[object Boolean]";function VDe(e){return e===!0||e===!1||BDe(e)&&WDe(e)==HDe}mde.exports=VDe});var ZF=_e((qYt,gde)=>{var qDe=Ks(),UDe=_l(),$De="[object Number]";function JDe(e){return typeof e=="number"||UDe(e)&&qDe(e)==$De}gde.exports=JDe});var yde=_e((UYt,vde)=>{var GDe=ZF();function XDe(e){return GDe(e)&&e!=+e}vde.exports=XDe});var Cde=_e((kde,BE)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof BE=="object"&&BE.exports?BE.exports=t():e.numeral=t()})(kde,function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},u={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function c(d,g){this._input=d,this._value=g}return e=function(d){var g,O,S,I;if(e.isNumeral(d))g=d.value();else if(d===0||typeof d>"u")g=0;else if(d===null||t.isNaN(d))g=null;else if(typeof d=="string")if(u.zeroFormat&&d===u.zeroFormat)g=0;else if(u.nullFormat&&d===u.nullFormat||!d.replace(/[^0-9]+/g,"").length)g=null;else{for(O in r)if(I=typeof r[O].regexps.unformat=="function"?r[O].regexps.unformat():r[O].regexps.unformat,I&&d.match(I)){S=r[O].unformat;break}S=S||e._.stringToNumber,g=S(d)}else g=Number(d)||null;return new c(d,g)},e.version=n,e.isNumeral=function(d){return d instanceof c},e._=t={numberToFormat:function(d,g,O){var S=o[e.options.currentLocale],I=!1,R=!1,k=0,A="",M=1e12,T=1e9,N=1e6,U=1e3,X="",Y=!1,K,H,ne,pe,ye,fe,ue,xe,me,We;if(d=d||0,H=Math.abs(d),e._.includes(g,"(")?(I=!0,g=g.replace(/[\(|\)]/g,"")):(e._.includes(g,"+")||e._.includes(g,"-"))&&(xe=e._.includes(g,"+")?g.indexOf("+"):d<0?g.indexOf("-"):-1,g=g.replace(/[\+|\-]/g,"")),e._.includes(g,"a")&&(K=g.match(/a(k|m|b|t)?/),K=K?K[1]:!1,e._.includes(g," a")&&(A=" "),g=g.replace(new RegExp(A+"a[kmbt]?"),""),H>=M&&!K||K==="t"?(A+=S.abbreviations.trillion,d=d/M):H=T&&!K||K==="b"?(A+=S.abbreviations.billion,d=d/T):H=N&&!K||K==="m"?(A+=S.abbreviations.million,d=d/N):(H=U&&!K||K==="k")&&(A+=S.abbreviations.thousand,d=d/U)),e._.includes(g,"[.]")&&(R=!0,g=g.replace("[.]",".")),fe=d.toString().split(".")[0],ue=g.split(".")[1],me=g.indexOf(","),k=(g.split(".")[0].split(",")[0].match(/0/g)||[]).length,ue?(e._.includes(ue,"[")?(ue=ue.replace("]",""),ue=ue.split("["),X=e._.toFixed(d,ue[0].length+ue[1].length,O,ue[1].length)):X=e._.toFixed(d,ue.length,O),fe=X.split(".")[0],e._.includes(X,".")?X=S.delimiters.decimal+X.split(".")[1]:X="",R&&Number(X.slice(1))===0&&(X="")):fe=e._.toFixed(d,0,O),A&&!K&&Number(fe)>=1e3&&A!==S.abbreviations.trillion)switch(fe=String(Number(fe)/1e3),A){case S.abbreviations.thousand:A=S.abbreviations.million;break;case S.abbreviations.million:A=S.abbreviations.billion;break;case S.abbreviations.billion:A=S.abbreviations.trillion;break}if(e._.includes(fe,"-")&&(fe=fe.slice(1),Y=!0),fe.length0;$e--)fe="0"+fe;return me>-1&&(fe=fe.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+S.delimiters.thousands)),g.indexOf(".")===0&&(fe=""),We=fe+X+(A||""),I?We=(I&&Y?"(":"")+We+(I&&Y?")":""):xe>=0?We=xe===0?(Y?"-":"+")+We:We+(Y?"-":"+"):Y&&(We="-"+We),We},stringToNumber:function(d){var g=o[u.currentLocale],O=d,S={thousand:3,million:6,billion:9,trillion:12},I,R,k,A;if(u.zeroFormat&&d===u.zeroFormat)R=0;else if(u.nullFormat&&d===u.nullFormat||!d.replace(/[^0-9]+/g,"").length)R=null;else{R=1,g.delimiters.decimal!=="."&&(d=d.replace(/\./g,"").replace(g.delimiters.decimal,"."));for(I in S)if(A=new RegExp("[^a-zA-Z]"+g.abbreviations[I]+"(?:\\)|(\\"+g.currency.symbol+")?(?:\\))?)?$"),O.match(A)){R*=Math.pow(10,S[I]);break}R*=(d.split("-").length+Math.min(d.split("(").length-1,d.split(")").length-1))%2?1:-1,d=d.replace(/[^0-9\.]+/g,""),R*=Number(d)}return R},isNaN:function(d){return typeof d=="number"&&isNaN(d)},includes:function(d,g){return d.indexOf(g)!==-1},insert:function(d,g,O){return d.slice(0,O)+g+d.slice(O)},reduce:function(d,g){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof g!="function")throw new TypeError(g+" is not a function");var O=Object(d),S=O.length>>>0,I=0,R;if(arguments.length===3)R=arguments[2];else{for(;I=S)throw new TypeError("Reduce of empty array with no initial value");R=O[I++]}for(;IS?g:S},1)},toFixed:function(d,g,O,S){var I=d.toString().split("."),R=g-(S||0),k,A,M,T;return I.length===2?k=Math.min(Math.max(I[1].length,R),g):k=R,M=Math.pow(10,k),T=(O(d+"e+"+k)/M).toFixed(k),S>g-k&&(A=new RegExp("\\.?0{1,"+(S-(g-k))+"}$"),T=T.replace(A,"")),T}},e.options=u,e.formats=r,e.locales=o,e.locale=function(d){return d&&(u.currentLocale=d.toLowerCase()),u.currentLocale},e.localeData=function(d){if(!d)return o[u.currentLocale];if(d=d.toLowerCase(),!o[d])throw new Error("Unknown locale : "+d);return o[d]},e.reset=function(){for(var d in i)u[d]=i[d]},e.zeroFormat=function(d){u.zeroFormat=typeof d=="string"?d:null},e.nullFormat=function(d){u.nullFormat=typeof d=="string"?d:null},e.defaultFormat=function(d){u.defaultFormat=typeof d=="string"?d:"0.0"},e.register=function(d,g,O){if(g=g.toLowerCase(),this[d+"s"][g])throw new TypeError(g+" "+d+" already registered.");return this[d+"s"][g]=O,O},e.validate=function(d,g){var O,S,I,R,k,A,M,T;if(typeof d!="string"&&(d+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",d)),d=d.trim(),d.match(/^\d+$/))return!0;if(d==="")return!1;try{M=e.localeData(g)}catch{M=e.localeData(e.locale())}return I=M.currency.symbol,k=M.abbreviations,O=M.delimiters.decimal,M.delimiters.thousands==="."?S="\\.":S=M.delimiters.thousands,T=d.match(/^[^\d]+/),T!==null&&(d=d.substr(1),T[0]!==I)||(T=d.match(/[^\d]+$/),T!==null&&(d=d.slice(0,-1),T[0]!==k.thousand&&T[0]!==k.million&&T[0]!==k.billion&&T[0]!==k.trillion))?!1:(A=new RegExp(S+"{2}"),d.match(/[^\d.,]/g)?!1:(R=d.split(O),R.length>2?!1:R.length<2?!!R[0].match(/^\d+.*\d$/)&&!R[0].match(A):R[0].length===1?!!R[0].match(/^\d+$/)&&!R[0].match(A)&&!!R[1].match(/^\d+$/):!!R[0].match(/^\d+.*\d$/)&&!R[0].match(A)&&!!R[1].match(/^\d+$/)))},e.fn=c.prototype={clone:function(){return e(this)},format:function(d,g){var O=this._value,S=d||u.defaultFormat,I,R,k;if(g=g||Math.round,O===0&&u.zeroFormat!==null)R=u.zeroFormat;else if(O===null&&u.nullFormat!==null)R=u.nullFormat;else{for(I in r)if(S.match(r[I].regexps.format)){k=r[I].format;break}k=k||e._.numberToFormat,R=k(O,S,g)}return R},value:function(){return this._value},input:function(){return this._input},set:function(d){return this._value=Number(d),this},add:function(d){var g=t.correctionFactor.call(null,this._value,d);function O(S,I,R,k){return S+Math.round(g*I)}return this._value=t.reduce([this._value,d],O,0)/g,this},subtract:function(d){var g=t.correctionFactor.call(null,this._value,d);function O(S,I,R,k){return S-Math.round(g*I)}return this._value=t.reduce([d],O,Math.round(this._value*g))/g,this},multiply:function(d){function g(O,S,I,R){var k=t.correctionFactor(O,S);return Math.round(O*k)*Math.round(S*k)/Math.round(k*k)}return this._value=t.reduce([this._value,d],g,1),this},divide:function(d){function g(O,S,I,R){var k=t.correctionFactor(O,S);return Math.round(O*k)/Math.round(S*k)}return this._value=t.reduce([this._value,d],g),this},difference:function(d){return Math.abs(e(this._value).subtract(d).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(d){var g=d%10;return~~(d%100/10)===1?"th":g===1?"st":g===2?"nd":g===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(d,g,O){var S=e._.includes(g," BPS")?" ":"",I;return d=d*1e4,g=g.replace(/\s?BPS/,""),I=e._.numberToFormat(d,g,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"BPS"),I=I.join("")):I=I+S+"BPS",I},unformat:function(d){return+(e._.stringToNumber(d)*1e-4).toFixed(15)}})}(),function(){var d={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},g={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},O=d.suffixes.concat(g.suffixes.filter(function(I){return d.suffixes.indexOf(I)<0})),S=O.join("|");S="("+S.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(S)},format:function(I,R,k){var A,M=e._.includes(R,"ib")?g:d,T=e._.includes(R," b")||e._.includes(R," ib")?" ":"",N,U,X;for(R=R.replace(/\s?i?b/,""),N=0;N<=M.suffixes.length;N++)if(U=Math.pow(M.base,N),X=Math.pow(M.base,N+1),I===null||I===0||I>=U&&I0&&(I=I/U);break}return A=e._.numberToFormat(I,R,k),A+T},unformat:function(I){var R=e._.stringToNumber(I),k,A;if(R){for(k=d.suffixes.length-1;k>=0;k--){if(e._.includes(I,d.suffixes[k])){A=Math.pow(d.base,k);break}if(e._.includes(I,g.suffixes[k])){A=Math.pow(g.base,k);break}}R*=A||1}return R}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(d,g,O){var S=e.locales[e.options.currentLocale],I={before:g.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:g.match(/([\+|\-|\)|\s|\$]*)$/)[0]},R,k,A;for(g=g.replace(/\s?\$\s?/,""),R=e._.numberToFormat(d,g,O),d>=0?(I.before=I.before.replace(/[\-\(]/,""),I.after=I.after.replace(/[\-\)]/,"")):d<0&&!e._.includes(I.before,"-")&&!e._.includes(I.before,"(")&&(I.before="-"+I.before),A=0;A=0;A--)switch(k=I.after[A],k){case"$":R=A===I.after.length-1?R+S.currency.symbol:e._.insert(R,S.currency.symbol,-(I.after.length-(1+A)));break;case" ":R=A===I.after.length-1?R+" ":e._.insert(R," ",-(I.after.length-(1+A)+S.currency.symbol.length-1));break}return R}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(d,g,O){var S,I=typeof d=="number"&&!e._.isNaN(d)?d.toExponential():"0e+0",R=I.split("e");return g=g.replace(/e[\+|\-]{1}0/,""),S=e._.numberToFormat(Number(R[0]),g,O),S+"e"+R[1]},unformat:function(d){var g=e._.includes(d,"e+")?d.split("e+"):d.split("e-"),O=Number(g[0]),S=Number(g[1]);S=e._.includes(d,"e-")?S*=-1:S;function I(R,k,A,M){var T=e._.correctionFactor(R,k),N=R*T*(k*T)/(T*T);return N}return e._.reduce([O,Math.pow(10,S)],I,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(d,g,O){var S=e.locales[e.options.currentLocale],I,R=e._.includes(g," o")?" ":"";return g=g.replace(/\s?o/,""),R+=S.ordinal(d),I=e._.numberToFormat(d,g,O),I+R}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(d,g,O){var S=e._.includes(g," %")?" ":"",I;return e.options.scalePercentBy100&&(d=d*100),g=g.replace(/\s?\%/,""),I=e._.numberToFormat(d,g,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"%"),I=I.join("")):I=I+S+"%",I},unformat:function(d){var g=e._.stringToNumber(d);return e.options.scalePercentBy100?g*.01:g}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(d,g,O){var S=Math.floor(d/60/60),I=Math.floor((d-S*60*60)/60),R=Math.round(d-S*60*60-I*60);return S+":"+(I<10?"0"+I:I)+":"+(R<10?"0"+R:R)},unformat:function(d){var g=d.split(":"),O=0;return g.length===3?(O=O+Number(g[0])*60*60,O=O+Number(g[1])*60,O=O+Number(g[2])):g.length===2&&(O=O+Number(g[0])*60,O=O+Number(g[1])),Number(O)}})}(),e})});var Rde=_e((dQt,Tde)=>{var Mde=SE(),tLe="Expected a function";function tW(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(tLe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=e.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(tW.Cache||Mde),n}tW.Cache=Mde;Tde.exports=tW});var qE=_e((wQt,Nde)=>{var nLe=Ks(),oLe=_l(),iLe="[object Symbol]";function aLe(e){return typeof e=="symbol"||oLe(e)&&nLe(e)==iLe}Nde.exports=aLe});var Wde=_e((OQt,Fde)=>{var lLe=is(),sLe=qE(),uLe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,cLe=/^\w*$/;function pLe(e,t){if(lLe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||sLe(e)?!0:cLe.test(e)||!uLe.test(e)||t!=null&&e in Object(t)}Fde.exports=pLe});var Hde=_e((xQt,Bde)=>{var fLe=Rde(),dLe=500;function mLe(e){var t=fLe(e,function(r){return n.size===dLe&&n.clear(),r}),n=t.cache;return t}Bde.exports=mLe});var qde=_e((_Qt,Vde)=>{var hLe=Hde(),gLe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,vLe=/\\(\\)?/g,yLe=hLe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(gLe,function(n,r,o,i){t.push(o?i.replace(vLe,"$1"):r||n)}),t});Vde.exports=yLe});var nW=_e((SQt,Ude)=>{function bLe(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n{var $de=Cd(),wLe=nW(),OLe=is(),xLe=qE(),_Le=1/0,Jde=$de?$de.prototype:void 0,Gde=Jde?Jde.toString:void 0;function Xde(e){if(typeof e=="string")return e;if(OLe(e))return wLe(e,Xde)+"";if(xLe(e))return Gde?Gde.call(e):"";var t=e+"";return t=="0"&&1/e==-_Le?"-0":t}Kde.exports=Xde});var Zde=_e((jQt,Qde)=>{var SLe=Yde();function ILe(e){return e==null?"":SLe(e)}Qde.exports=ILe});var UE=_e((EQt,e0e)=>{var jLe=is(),ELe=Wde(),PLe=qde(),kLe=Zde();function CLe(e,t){return jLe(e)?e:ELe(e,t)?[e]:PLe(kLe(e))}e0e.exports=CLe});var oW=_e((PQt,t0e)=>{var ALe=qE(),MLe=1/0;function TLe(e){if(typeof e=="string"||ALe(e))return e;var t=e+"";return t=="0"&&1/e==-MLe?"-0":t}t0e.exports=TLe});var iW=_e((kQt,r0e)=>{var RLe=UE(),zLe=oW();function DLe(e,t){t=RLe(t,e);for(var n=0,r=t.length;e!=null&&n{var LLe=iW();function NLe(e,t,n){var r=e==null?void 0:LLe(e,t);return r===void 0?n:r}n0e.exports=NLe});var a0e=_e((AQt,i0e)=>{function FLe(e,t){for(var n=-1,r=e==null?0:e.length;++n{var WLe=$p(),BLe=function(){try{var e=WLe(Object,"defineProperty");return e({},"",{}),e}catch{}}();l0e.exports=BLe});var lW=_e((TQt,u0e)=>{var s0e=aW();function HLe(e,t,n){t=="__proto__"&&s0e?s0e(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}u0e.exports=HLe});var sW=_e((RQt,c0e)=>{var VLe=lW(),qLe=OE(),ULe=Object.prototype,$Le=ULe.hasOwnProperty;function JLe(e,t,n){var r=e[t];(!($Le.call(e,t)&&qLe(r,n))||n===void 0&&!(t in e))&&VLe(e,t,n)}c0e.exports=JLe});var X1=_e((zQt,p0e)=>{var GLe=sW(),XLe=lW();function KLe(e,t,n,r){var o=!n;n||(n={});for(var i=-1,u=t.length;++i{var YLe=X1(),QLe=ME();function ZLe(e,t){return e&&YLe(t,QLe(t),e)}f0e.exports=ZLe});var h0e=_e((LQt,m0e)=>{function eNe(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}m0e.exports=eNe});var v0e=_e((NQt,g0e)=>{var tNe=Ad(),rNe=AE(),nNe=h0e(),oNe=Object.prototype,iNe=oNe.hasOwnProperty;function aNe(e){if(!tNe(e))return nNe(e);var t=rNe(e),n=[];for(var r in e)r=="constructor"&&(t||!iNe.call(e,r))||n.push(r);return n}g0e.exports=aNe});var $E=_e((FQt,y0e)=>{var lNe=LF(),sNe=v0e(),uNe=FF();function cNe(e){return uNe(e)?lNe(e,!0):sNe(e)}y0e.exports=cNe});var w0e=_e((WQt,b0e)=>{var pNe=X1(),fNe=$E();function dNe(e,t){return e&&pNe(t,fNe(t),e)}b0e.exports=dNe});var I0e=_e((J2,K1)=>{var mNe=os(),S0e=typeof J2=="object"&&J2&&!J2.nodeType&&J2,O0e=S0e&&typeof K1=="object"&&K1&&!K1.nodeType&&K1,hNe=O0e&&O0e.exports===S0e,x0e=hNe?mNe.Buffer:void 0,_0e=x0e?x0e.allocUnsafe:void 0;function gNe(e,t){if(t)return e.slice();var n=e.length,r=_0e?_0e(n):new e.constructor(n);return e.copy(r),r}K1.exports=gNe});var E0e=_e((BQt,j0e)=>{function vNe(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var yNe=X1(),bNe=EE();function wNe(e,t){return yNe(e,bNe(e),t)}P0e.exports=wNe});var JE=_e((VQt,C0e)=>{var ONe=NF(),xNe=ONe(Object.getPrototypeOf,Object);C0e.exports=xNe});var uW=_e((qQt,A0e)=>{var _Ne=jE(),SNe=JE(),INe=EE(),jNe=MF(),ENe=Object.getOwnPropertySymbols,PNe=ENe?function(e){for(var t=[];e;)_Ne(t,INe(e)),e=SNe(e);return t}:jNe;A0e.exports=PNe});var T0e=_e((UQt,M0e)=>{var kNe=X1(),CNe=uW();function ANe(e,t){return kNe(e,CNe(e),t)}M0e.exports=ANe});var cW=_e(($Qt,R0e)=>{var MNe=AF(),TNe=uW(),RNe=$E();function zNe(e){return MNe(e,RNe,TNe)}R0e.exports=zNe});var D0e=_e((JQt,z0e)=>{var DNe=Object.prototype,LNe=DNe.hasOwnProperty;function NNe(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]=="string"&&LNe.call(e,"index")&&(n.index=e.index,n.input=e.input),n}z0e.exports=NNe});var GE=_e((GQt,N0e)=>{var L0e=kF();function FNe(e){var t=new e.constructor(e.byteLength);return new L0e(t).set(new L0e(e)),t}N0e.exports=FNe});var W0e=_e((XQt,F0e)=>{var WNe=GE();function BNe(e,t){var n=t?WNe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}F0e.exports=BNe});var H0e=_e((KQt,B0e)=>{var HNe=/\w*$/;function VNe(e){var t=new e.constructor(e.source,HNe.exec(e));return t.lastIndex=e.lastIndex,t}B0e.exports=VNe});var J0e=_e((YQt,$0e)=>{var V0e=Cd(),q0e=V0e?V0e.prototype:void 0,U0e=q0e?q0e.valueOf:void 0;function qNe(e){return U0e?Object(U0e.call(e)):{}}$0e.exports=qNe});var X0e=_e((QQt,G0e)=>{var UNe=GE();function $Ne(e,t){var n=t?UNe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}G0e.exports=$Ne});var Y0e=_e((ZQt,K0e)=>{var JNe=GE(),GNe=W0e(),XNe=H0e(),KNe=J0e(),YNe=X0e(),QNe="[object Boolean]",ZNe="[object Date]",eFe="[object Map]",tFe="[object Number]",rFe="[object RegExp]",nFe="[object Set]",oFe="[object String]",iFe="[object Symbol]",aFe="[object ArrayBuffer]",lFe="[object DataView]",sFe="[object Float32Array]",uFe="[object Float64Array]",cFe="[object Int8Array]",pFe="[object Int16Array]",fFe="[object Int32Array]",dFe="[object Uint8Array]",mFe="[object Uint8ClampedArray]",hFe="[object Uint16Array]",gFe="[object Uint32Array]";function vFe(e,t,n){var r=e.constructor;switch(t){case aFe:return JNe(e);case QNe:case ZNe:return new r(+e);case lFe:return GNe(e,n);case sFe:case uFe:case cFe:case pFe:case fFe:case dFe:case mFe:case hFe:case gFe:return YNe(e,n);case eFe:return new r;case tFe:case oFe:return new r(e);case rFe:return XNe(e);case nFe:return new r;case iFe:return KNe(e)}}K0e.exports=vFe});var eme=_e((eZt,Z0e)=>{var yFe=Ad(),Q0e=Object.create,bFe=function(){function e(){}return function(t){if(!yFe(t))return{};if(Q0e)return Q0e(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();Z0e.exports=bFe});var rme=_e((tZt,tme)=>{var wFe=eme(),OFe=JE(),xFe=AE();function _Fe(e){return typeof e.constructor=="function"&&!xFe(e)?wFe(OFe(e)):{}}tme.exports=_Fe});var ome=_e((rZt,nme)=>{var SFe=q2(),IFe=_l(),jFe="[object Map]";function EFe(e){return IFe(e)&&SFe(e)==jFe}nme.exports=EFe});var sme=_e((nZt,lme)=>{var PFe=ome(),kFe=kE(),ime=CE(),ame=ime&&ime.isMap,CFe=ame?kFe(ame):PFe;lme.exports=CFe});var cme=_e((oZt,ume)=>{var AFe=q2(),MFe=_l(),TFe="[object Set]";function RFe(e){return MFe(e)&&AFe(e)==TFe}ume.exports=RFe});var mme=_e((iZt,dme)=>{var zFe=cme(),DFe=kE(),pme=CE(),fme=pme&&pme.isSet,LFe=fme?DFe(fme):zFe;dme.exports=LFe});var bme=_e((aZt,yme)=>{var NFe=EF(),FFe=a0e(),WFe=sW(),BFe=d0e(),HFe=w0e(),VFe=I0e(),qFe=E0e(),UFe=k0e(),$Fe=T0e(),JFe=WF(),GFe=cW(),XFe=q2(),KFe=D0e(),YFe=Y0e(),QFe=rme(),ZFe=is(),eWe=PE(),tWe=sme(),rWe=Ad(),nWe=mme(),oWe=ME(),iWe=$E(),aWe=1,lWe=2,sWe=4,hme="[object Arguments]",uWe="[object Array]",cWe="[object Boolean]",pWe="[object Date]",fWe="[object Error]",gme="[object Function]",dWe="[object GeneratorFunction]",mWe="[object Map]",hWe="[object Number]",vme="[object Object]",gWe="[object RegExp]",vWe="[object Set]",yWe="[object String]",bWe="[object Symbol]",wWe="[object WeakMap]",OWe="[object ArrayBuffer]",xWe="[object DataView]",_We="[object Float32Array]",SWe="[object Float64Array]",IWe="[object Int8Array]",jWe="[object Int16Array]",EWe="[object Int32Array]",PWe="[object Uint8Array]",kWe="[object Uint8ClampedArray]",CWe="[object Uint16Array]",AWe="[object Uint32Array]",xn={};xn[hme]=xn[uWe]=xn[OWe]=xn[xWe]=xn[cWe]=xn[pWe]=xn[_We]=xn[SWe]=xn[IWe]=xn[jWe]=xn[EWe]=xn[mWe]=xn[hWe]=xn[vme]=xn[gWe]=xn[vWe]=xn[yWe]=xn[bWe]=xn[PWe]=xn[kWe]=xn[CWe]=xn[AWe]=!0;xn[fWe]=xn[gme]=xn[wWe]=!1;function XE(e,t,n,r,o,i){var u,c=t&aWe,d=t&lWe,g=t&sWe;if(n&&(u=o?n(e,r,o,i):n(e)),u!==void 0)return u;if(!rWe(e))return e;var O=ZFe(e);if(O){if(u=KFe(e),!c)return qFe(e,u)}else{var S=XFe(e),I=S==gme||S==dWe;if(eWe(e))return VFe(e,c);if(S==vme||S==hme||I&&!o){if(u=d||I?{}:QFe(e),!c)return d?$Fe(e,HFe(u,e)):UFe(e,BFe(u,e))}else{if(!xn[S])return o?e:{};u=YFe(e,S,c)}}i||(i=new NFe);var R=i.get(e);if(R)return R;i.set(e,u),nWe(e)?e.forEach(function(M){u.add(XE(M,t,n,M,e,i))}):tWe(e)&&e.forEach(function(M,T){u.set(T,XE(M,t,n,T,e,i))});var k=g?d?GFe:JFe:d?iWe:oWe,A=O?void 0:k(e);return FFe(A||e,function(M,T){A&&(T=M,M=e[T]),WFe(u,T,XE(M,t,n,T,e,i))}),u}yme.exports=XE});var Ome=_e((lZt,wme)=>{function MWe(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}wme.exports=MWe});var _me=_e((sZt,xme)=>{function TWe(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{var RWe=iW(),zWe=_me();function DWe(e,t){return t.length<2?e:RWe(e,zWe(t,0,-1))}Sme.exports=DWe});var Eme=_e((cZt,jme)=>{var LWe=UE(),NWe=Ome(),FWe=Ime(),WWe=oW();function BWe(e,t){return t=LWe(t,e),e=FWe(e,t),e==null||delete e[WWe(NWe(t))]}jme.exports=BWe});var Cme=_e((pZt,kme)=>{var HWe=Ks(),VWe=JE(),qWe=_l(),UWe="[object Object]",$We=Function.prototype,JWe=Object.prototype,Pme=$We.toString,GWe=JWe.hasOwnProperty,XWe=Pme.call(Object);function KWe(e){if(!qWe(e)||HWe(e)!=UWe)return!1;var t=VWe(e);if(t===null)return!0;var n=GWe.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Pme.call(n)==XWe}kme.exports=KWe});var Mme=_e((fZt,Ame)=>{var YWe=Cme();function QWe(e){return YWe(e)?void 0:e}Ame.exports=QWe});var Dme=_e((dZt,zme)=>{var Tme=Cd(),ZWe=TF(),eBe=is(),Rme=Tme?Tme.isConcatSpreadable:void 0;function tBe(e){return eBe(e)||ZWe(e)||!!(Rme&&e&&e[Rme])}zme.exports=tBe});var Fme=_e((mZt,Nme)=>{var rBe=jE(),nBe=Dme();function Lme(e,t,n,r,o){var i=-1,u=e.length;for(n||(n=nBe),o||(o=[]);++i0&&n(c)?t>1?Lme(c,t-1,n,r,o):rBe(o,c):r||(o[o.length]=c)}return o}Nme.exports=Lme});var Bme=_e((hZt,Wme)=>{var oBe=Fme();function iBe(e){var t=e==null?0:e.length;return t?oBe(e,1):[]}Wme.exports=iBe});var Vme=_e((gZt,Hme)=>{function aBe(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}Hme.exports=aBe});var $me=_e((vZt,Ume)=>{var lBe=Vme(),qme=Math.max;function sBe(e,t,n){return t=qme(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=qme(r.length-t,0),u=Array(i);++o{function uBe(e){return function(){return e}}Jme.exports=uBe});var Kme=_e((bZt,Xme)=>{function cBe(e){return e}Xme.exports=cBe});var Zme=_e((wZt,Qme)=>{var pBe=Gme(),Yme=aW(),fBe=Kme(),dBe=Yme?function(e,t){return Yme(e,"toString",{configurable:!0,enumerable:!1,value:pBe(t),writable:!0})}:fBe;Qme.exports=dBe});var t1e=_e((OZt,e1e)=>{var mBe=800,hBe=16,gBe=Date.now;function vBe(e){var t=0,n=0;return function(){var r=gBe(),o=hBe-(r-n);if(n=r,o>0){if(++t>=mBe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}e1e.exports=vBe});var n1e=_e((xZt,r1e)=>{var yBe=Zme(),bBe=t1e(),wBe=bBe(yBe);r1e.exports=wBe});var i1e=_e((_Zt,o1e)=>{var OBe=Bme(),xBe=$me(),_Be=n1e();function SBe(e){return _Be(xBe(e,void 0,OBe),e+"")}o1e.exports=SBe});var l1e=_e((SZt,a1e)=>{var IBe=nW(),jBe=bme(),EBe=Eme(),PBe=UE(),kBe=X1(),CBe=Mme(),ABe=i1e(),MBe=cW(),TBe=1,RBe=2,zBe=4,DBe=ABe(function(e,t){var n={};if(e==null)return n;var r=!1;t=IBe(t,function(i){return i=PBe(i,e),r||(r=i.length>1),i}),kBe(e,MBe(e),n),r&&(n=jBe(n,TBe|RBe|zBe,CBe));for(var o=t.length;o--;)EBe(n,t[o]);return n});a1e.exports=DBe});var F1e=_e(mn=>{"use strict";var lP=60103,sP=60106,_x=60107,Sx=60108,Ix=60114,jx=60109,Ex=60110,Px=60112,kx=60113,BG=60120,Cx=60115,Ax=60116,R1e=60121,z1e=60122,D1e=60117,L1e=60129,N1e=60131;typeof Symbol=="function"&&Symbol.for&&(Wo=Symbol.for,lP=Wo("react.element"),sP=Wo("react.portal"),_x=Wo("react.fragment"),Sx=Wo("react.strict_mode"),Ix=Wo("react.profiler"),jx=Wo("react.provider"),Ex=Wo("react.context"),Px=Wo("react.forward_ref"),kx=Wo("react.suspense"),BG=Wo("react.suspense_list"),Cx=Wo("react.memo"),Ax=Wo("react.lazy"),R1e=Wo("react.block"),z1e=Wo("react.server.block"),D1e=Wo("react.fundamental"),L1e=Wo("react.debug_trace_mode"),N1e=Wo("react.legacy_hidden"));var Wo;function as(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case lP:switch(e=e.type,e){case _x:case Ix:case Sx:case kx:case BG:return e;default:switch(e=e&&e.$$typeof,e){case Ex:case Px:case Ax:case Cx:case jx:return e;default:return t}}case sP:return t}}}var vxt=jx,yxt=lP,bxt=Px,wxt=_x,Oxt=Ax,xxt=Cx,_xt=sP,Sxt=Ix,Ixt=Sx,jxt=kx;mn.ContextConsumer=Ex;mn.ContextProvider=vxt;mn.Element=yxt;mn.ForwardRef=bxt;mn.Fragment=wxt;mn.Lazy=Oxt;mn.Memo=xxt;mn.Portal=_xt;mn.Profiler=Sxt;mn.StrictMode=Ixt;mn.Suspense=jxt;mn.isAsyncMode=function(){return!1};mn.isConcurrentMode=function(){return!1};mn.isContextConsumer=function(e){return as(e)===Ex};mn.isContextProvider=function(e){return as(e)===jx};mn.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===lP};mn.isForwardRef=function(e){return as(e)===Px};mn.isFragment=function(e){return as(e)===_x};mn.isLazy=function(e){return as(e)===Ax};mn.isMemo=function(e){return as(e)===Cx};mn.isPortal=function(e){return as(e)===sP};mn.isProfiler=function(e){return as(e)===Ix};mn.isStrictMode=function(e){return as(e)===Sx};mn.isSuspense=function(e){return as(e)===kx};mn.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===_x||e===Ix||e===L1e||e===Sx||e===kx||e===BG||e===N1e||typeof e=="object"&&e!==null&&(e.$$typeof===Ax||e.$$typeof===Cx||e.$$typeof===jx||e.$$typeof===Ex||e.$$typeof===Px||e.$$typeof===D1e||e.$$typeof===R1e||e[0]===z1e)};mn.typeOf=as});var B1e=_e((mgr,W1e)=>{"use strict";W1e.exports=F1e()});var ehe=_e(($gr,Z1e)=>{"use strict";Z1e.exports=function(t,n){if(n=n.split(":")[0],t=+t,!t)return!1;switch(n){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var nhe=_e(qG=>{"use strict";var qxt=Object.prototype.hasOwnProperty,Uxt;function the(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function rhe(e){try{return encodeURIComponent(e)}catch{return null}}function $xt(e){for(var t=/([^=?#&]+)=?([^&]*)/g,n={},r;r=t.exec(e);){var o=the(r[1]),i=the(r[2]);o===null||i===null||o in n||(n[o]=i)}return n}function Jxt(e,t){t=t||"";var n=[],r,o;typeof t!="string"&&(t="?");for(o in e)if(qxt.call(e,o)){if(r=e[o],!r&&(r===null||r===Uxt||isNaN(r))&&(r=""),o=rhe(o),r=rhe(r),o===null||r===null)continue;n.push(o+"="+r)}return n.length?t+n.join("&"):""}qG.stringify=Jxt;qG.parse=$xt});var phe=_e((Ggr,che)=>{"use strict";var ihe=ehe(),pP=nhe(),Gxt=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,ahe=/[\n\r\t]/g,Xxt=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,lhe=/:\d+$/,Kxt=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,Yxt=/^[a-zA-Z]:/;function $G(e){return(e||"").toString().replace(Gxt,"")}var UG=[["#","hash"],["?","query"],function(t,n){return Qs(n.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],ohe={hash:1,query:1};function she(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var n=t.location||{};e=e||n;var r={},o=typeof e,i;if(e.protocol==="blob:")r=new Zs(unescape(e.pathname),{});else if(o==="string"){r=new Zs(e,{});for(i in ohe)delete r[i]}else if(o==="object"){for(i in e)i in ohe||(r[i]=e[i]);r.slashes===void 0&&(r.slashes=Xxt.test(e.href))}return r}function Qs(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function uhe(e,t){e=$G(e),e=e.replace(ahe,""),t=t||{};var n=Kxt.exec(e),r=n[1]?n[1].toLowerCase():"",o=!!n[2],i=!!n[3],u=0,c;return o?i?(c=n[2]+n[3]+n[4],u=n[2].length+n[3].length):(c=n[2]+n[4],u=n[2].length):i?(c=n[3]+n[4],u=n[3].length):c=n[4],r==="file:"?u>=2&&(c=c.slice(2)):Qs(r)?c=n[4]:r?o&&(c=c.slice(2)):u>=2&&Qs(t.protocol)&&(c=n[4]),{protocol:r,slashes:o||Qs(r),slashesCount:u,rest:c}}function Qxt(e,t){if(e==="")return t;for(var n=(t||"/").split("/").slice(0,-1).concat(e.split("/")),r=n.length,o=n[r-1],i=!1,u=0;r--;)n[r]==="."?n.splice(r,1):n[r]===".."?(n.splice(r,1),u++):u&&(r===0&&(i=!0),n.splice(r,1),u--);return i&&n.unshift(""),(o==="."||o==="..")&&n.push(""),n.join("/")}function Zs(e,t,n){if(e=$G(e),e=e.replace(ahe,""),!(this instanceof Zs))return new Zs(e,t,n);var r,o,i,u,c,d,g=UG.slice(),O=typeof t,S=this,I=0;for(O!=="object"&&O!=="string"&&(n=t,t=null),n&&typeof n!="function"&&(n=pP.parse),t=she(t),o=uhe(e||"",t),r=!o.protocol&&!o.slashes,S.slashes=o.slashes||r&&t.slashes,S.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||Yxt.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!Qs(S.protocol)))&&(g[3]=[/(.*)/,"pathname"]);I{"use strict";Object.defineProperty(lY,"__esModule",{value:!0});var iY=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function RPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function zPt(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t&&(typeof t=="object"||typeof t=="function")?t:e}function DPt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var f2e={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},LPt=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],NPt=function(t){return LPt.forEach(function(n){return delete t[n]}),t},d2e=function(t,n){n.style.fontSize=t.fontSize,n.style.fontFamily=t.fontFamily,n.style.fontWeight=t.fontWeight,n.style.fontStyle=t.fontStyle,n.style.letterSpacing=t.letterSpacing,n.style.textTransform=t.textTransform},v2e=typeof window<"u"&&window.navigator?/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent):!1,m2e=function(){return v2e?"_"+Math.random().toString(36).substr(2,12):void 0},aY=function(e){DPt(t,e),p2e(t,null,[{key:"getDerivedStateFromProps",value:function(r,o){var i=r.id;return i!==o.prevId?{inputId:i||m2e(),prevId:i}:null}}]);function t(n){RPt(this,t);var r=zPt(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,n));return r.inputRef=function(o){r.input=o,typeof r.props.inputRef=="function"&&r.props.inputRef(o)},r.placeHolderSizerRef=function(o){r.placeHolderSizer=o},r.sizerRef=function(o){r.sizer=o},r.state={inputWidth:n.minWidth,inputId:n.id||m2e(),prevId:n.id},r}return p2e(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentDidUpdate",value:function(r,o){o.inputWidth!==this.state.inputWidth&&typeof this.props.onAutosize=="function"&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(!(!this.mounted||!window.getComputedStyle)){var r=this.input&&window.getComputedStyle(this.input);r&&(d2e(r,this.sizer),this.placeHolderSizer&&d2e(r,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(!(!this.mounted||!this.sizer||typeof this.sizer.scrollWidth>"u")){var r=void 0;this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?r=Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:r=this.sizer.scrollWidth+2;var o=this.props.type==="number"&&this.props.extraWidth===void 0?16:parseInt(this.props.extraWidth)||0;r+=o,rt=>{let n=RIe.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Kl=e=>(e=e.toLowerCase(),t=>$I(t)===e),JI=e=>t=>typeof t===e,{isArray:o1}=Array,Yy=JI("undefined");function zIe(e){return e!==null&&!Yy(e)&&e.constructor!==null&&!Yy(e.constructor)&&ml(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var wae=Kl("ArrayBuffer");function DIe(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&wae(e.buffer),t}var LIe=JI("string"),ml=JI("function"),Oae=JI("number"),GI=e=>e!==null&&typeof e=="object",NIe=e=>e===!0||e===!1,UI=e=>{if($I(e)!=="object")return!1;let t=JL(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},FIe=Kl("Date"),WIe=Kl("File"),BIe=Kl("Blob"),HIe=Kl("FileList"),VIe=e=>GI(e)&&ml(e.pipe),qIe=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||ml(e.append)&&((t=$I(e))==="formdata"||t==="object"&&ml(e.toString)&&e.toString()==="[object FormData]"))},UIe=Kl("URLSearchParams"),[$Ie,JIe,GIe,XIe]=["ReadableStream","Request","Response","Headers"].map(Kl),KIe=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Qy(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),o1(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}var _ae=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),Sae=e=>!Yy(e)&&e!==_ae;function $L(){let{caseless:e}=Sae(this)&&this||{},t={},n=(r,o)=>{let i=e&&xae(t,o)||o;UI(t[i])&&UI(r)?t[i]=$L(t[i],r):UI(r)?t[i]=$L({},r):o1(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(Qy(t,(o,i)=>{n&&ml(o)?e[i]=Ky(o,n):e[i]=o},{allOwnKeys:r}),e),QIe=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),ZIe=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},eje=(e,t,n,r)=>{let o,i,u,c={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)u=o[i],(!r||r(u,e,t))&&!c[u]&&(t[u]=e[u],c[u]=!0);e=n!==!1&&JL(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},tje=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},rje=e=>{if(!e)return null;if(o1(e))return e;let t=e.length;if(!Oae(t))return null;let n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},nje=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&JL(Uint8Array)),oje=(e,t)=>{let r=(e&&e[Symbol.iterator]).call(e),o;for(;(o=r.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},ije=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},aje=Kl("HTMLFormElement"),lje=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),yae=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),sje=Kl("RegExp"),Iae=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};Qy(n,(o,i)=>{let u;(u=t(o,i,e))!==!1&&(r[i]=u||o)}),Object.defineProperties(e,r)},uje=e=>{Iae(e,(t,n)=>{if(ml(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;let r=e[n];if(ml(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},cje=(e,t)=>{let n={},r=o=>{o.forEach(i=>{n[i]=!0})};return o1(e)?r(e):r(String(e).split(t)),n},pje=()=>{},fje=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,UL="abcdefghijklmnopqrstuvwxyz",bae="0123456789",jae={DIGIT:bae,ALPHA:UL,ALPHA_DIGIT:UL+UL.toUpperCase()+bae},dje=(e=16,t=jae.ALPHA_DIGIT)=>{let n="",{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function mje(e){return!!(e&&ml(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var hje=e=>{let t=new Array(10),n=(r,o)=>{if(GI(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;let i=o1(r)?[]:{};return Qy(r,(u,c)=>{let d=n(u,o+1);!Yy(d)&&(i[c]=d)}),t[o]=void 0,i}}return r};return n(e,0)},gje=Kl("AsyncFunction"),vje=e=>e&&(GI(e)||ml(e))&&ml(e.then)&&ml(e.catch),Me={isArray:o1,isArrayBuffer:wae,isBuffer:zIe,isFormData:qIe,isArrayBufferView:DIe,isString:LIe,isNumber:Oae,isBoolean:NIe,isObject:GI,isPlainObject:UI,isReadableStream:$Ie,isRequest:JIe,isResponse:GIe,isHeaders:XIe,isUndefined:Yy,isDate:FIe,isFile:WIe,isBlob:BIe,isRegExp:sje,isFunction:ml,isStream:VIe,isURLSearchParams:UIe,isTypedArray:nje,isFileList:HIe,forEach:Qy,merge:$L,extend:YIe,trim:KIe,stripBOM:QIe,inherits:ZIe,toFlatObject:eje,kindOf:$I,kindOfTest:Kl,endsWith:tje,toArray:rje,forEachEntry:oje,matchAll:ije,isHTMLForm:aje,hasOwnProperty:yae,hasOwnProp:yae,reduceDescriptors:Iae,freezeMethods:uje,toObjectSet:cje,toCamelCase:lje,noop:pje,toFiniteNumber:fje,findKey:xae,global:_ae,isContextDefined:Sae,ALPHABET:jae,generateString:dje,isSpecCompliantForm:mje,toJSONObject:hje,isAsyncFn:gje,isThenable:vje};function i1(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}Me.inherits(i1,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Me.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var Eae=i1.prototype,Pae={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Pae[e]={value:e}});Object.defineProperties(i1,Pae);Object.defineProperty(Eae,"isAxiosError",{value:!0});i1.from=(e,t,n,r,o,i)=>{let u=Object.create(Eae);return Me.toFlatObject(e,u,function(d){return d!==Error.prototype},c=>c!=="isAxiosError"),i1.call(u,e.message,t,n,r,o),u.cause=e,u.name=e.name,i&&Object.assign(u,i),u};var Qt=i1;var XI=null;function GL(e){return Me.isPlainObject(e)||Me.isArray(e)}function Cae(e){return Me.endsWith(e,"[]")?e.slice(0,-2):e}function kae(e,t,n){return e?e.concat(t).map(function(o,i){return o=Cae(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function yje(e){return Me.isArray(e)&&!e.some(GL)}var bje=Me.toFlatObject(Me,{},null,function(t){return/^is[A-Z]/.test(t)});function wje(e,t,n){if(!Me.isObject(e))throw new TypeError("target must be an object");t=t||new(XI||FormData),n=Me.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(A,M){return!Me.isUndefined(M[A])});let r=n.metaTokens,o=n.visitor||O,i=n.dots,u=n.indexes,d=(n.Blob||typeof Blob<"u"&&Blob)&&Me.isSpecCompliantForm(t);if(!Me.isFunction(o))throw new TypeError("visitor must be a function");function g(k){if(k===null)return"";if(Me.isDate(k))return k.toISOString();if(!d&&Me.isBlob(k))throw new Qt("Blob is not supported. Use a Buffer instead.");return Me.isArrayBuffer(k)||Me.isTypedArray(k)?d&&typeof Blob=="function"?new Blob([k]):Buffer.from(k):k}function O(k,A,M){let T=k;if(k&&!M&&typeof k=="object"){if(Me.endsWith(A,"{}"))A=r?A:A.slice(0,-2),k=JSON.stringify(k);else if(Me.isArray(k)&&yje(k)||(Me.isFileList(k)||Me.endsWith(A,"[]"))&&(T=Me.toArray(k)))return A=Cae(A),T.forEach(function(U,X){!(Me.isUndefined(U)||U===null)&&t.append(u===!0?kae([A],X,i):u===null?A:A+"[]",g(U))}),!1}return GL(k)?!0:(t.append(kae(M,A,i),g(k)),!1)}let S=[],I=Object.assign(bje,{defaultVisitor:O,convertValue:g,isVisitable:GL});function R(k,A){if(!Me.isUndefined(k)){if(S.indexOf(k)!==-1)throw Error("Circular reference detected in "+A.join("."));S.push(k),Me.forEach(k,function(T,N){(!(Me.isUndefined(T)||T===null)&&o.call(t,T,Me.isString(N)?N.trim():N,A,I))===!0&&R(T,A?A.concat(N):[N])}),S.pop()}}if(!Me.isObject(e))throw new TypeError("data must be an object");return R(e),t}var Cp=wje;function Aae(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Mae(e,t){this._pairs=[],e&&Cp(e,this,t)}var Tae=Mae.prototype;Tae.append=function(t,n){this._pairs.push([t,n])};Tae.toString=function(t){let n=t?function(r){return t.call(this,r,Aae)}:Aae;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};var KI=Mae;function Oje(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Zy(e,t,n){if(!t)return e;let r=n&&n.encode||Oje,o=n&&n.serialize,i;if(o?i=o(t,n):i=Me.isURLSearchParams(t)?t.toString():new KI(t,n).toString(r),i){let u=e.indexOf("#");u!==-1&&(e=e.slice(0,u)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var XL=class{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){Me.forEach(this.handlers,function(r){r!==null&&t(r)})}},KL=XL;var YI={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var Rae=typeof URLSearchParams<"u"?URLSearchParams:KI;var zae=typeof FormData<"u"?FormData:null;var Dae=typeof Blob<"u"?Blob:null;var Lae={isBrowser:!0,classes:{URLSearchParams:Rae,FormData:zae,Blob:Dae},protocols:["http","https","file","blob","url","data"]};var QL={};$(QL,{hasBrowserEnv:()=>YL,hasStandardBrowserEnv:()=>xje,hasStandardBrowserWebWorkerEnv:()=>_je,origin:()=>Sje});var YL=typeof window<"u"&&typeof document<"u",xje=(e=>YL&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),_je=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),Sje=YL&&window.location.href||"http://localhost";var Do={...QL,...Lae};function ZL(e,t){return Cp(e,new Do.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return Do.isNode&&Me.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function Ije(e){return Me.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function jje(e){let t={},n=Object.keys(e),r,o=n.length,i;for(r=0;r=n.length;return u=!u&&Me.isArray(o)?o.length:u,d?(Me.hasOwnProp(o,u)?o[u]=[o[u],r]:o[u]=r,!c):((!o[u]||!Me.isObject(o[u]))&&(o[u]=[]),t(n,r,o[u],i)&&Me.isArray(o[u])&&(o[u]=jje(o[u])),!c)}if(Me.isFormData(e)&&Me.isFunction(e.entries)){let n={};return Me.forEachEntry(e,(r,o)=>{t(Ije(r),o,n,0)}),n}return null}var QI=Eje;function Pje(e,t,n){if(Me.isString(e))try{return(t||JSON.parse)(e),Me.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}var eN={transitional:YI,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){let r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=Me.isObject(t);if(i&&Me.isHTMLForm(t)&&(t=new FormData(t)),Me.isFormData(t))return o?JSON.stringify(QI(t)):t;if(Me.isArrayBuffer(t)||Me.isBuffer(t)||Me.isStream(t)||Me.isFile(t)||Me.isBlob(t)||Me.isReadableStream(t))return t;if(Me.isArrayBufferView(t))return t.buffer;if(Me.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return ZL(t,this.formSerializer).toString();if((c=Me.isFileList(t))||r.indexOf("multipart/form-data")>-1){let d=this.env&&this.env.FormData;return Cp(c?{"files[]":t}:t,d&&new d,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),Pje(t)):t}],transformResponse:[function(t){let n=this.transitional||eN.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(Me.isResponse(t)||Me.isReadableStream(t))return t;if(t&&Me.isString(t)&&(r&&!this.responseType||o)){let u=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(c){if(u)throw c.name==="SyntaxError"?Qt.from(c,Qt.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Do.classes.FormData,Blob:Do.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Me.forEach(["delete","get","head","post","put","patch"],e=>{eN.headers[e]={}});var a1=eN;var kje=Me.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Nae=e=>{let t={},n,r,o;return e&&e.split(` -`).forEach(function(u){o=u.indexOf(":"),n=u.substring(0,o).trim().toLowerCase(),r=u.substring(o+1).trim(),!(!n||t[n]&&kje[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t};var Fae=Symbol("internals");function e2(e){return e&&String(e).trim().toLowerCase()}function ZI(e){return e===!1||e==null?e:Me.isArray(e)?e.map(ZI):String(e)}function Cje(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var Aje=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function tN(e,t,n,r,o){if(Me.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!Me.isString(t)){if(Me.isString(r))return t.indexOf(r)!==-1;if(Me.isRegExp(r))return r.test(t)}}function Mje(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function Tje(e,t){let n=Me.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,u){return this[r].call(this,t,o,i,u)},configurable:!0})})}var l1=class{constructor(t){t&&this.set(t)}set(t,n,r){let o=this;function i(c,d,g){let O=e2(d);if(!O)throw new Error("header name must be a non-empty string");let S=Me.findKey(o,O);(!S||o[S]===void 0||g===!0||g===void 0&&o[S]!==!1)&&(o[S||d]=ZI(c))}let u=(c,d)=>Me.forEach(c,(g,O)=>i(g,O,d));if(Me.isPlainObject(t)||t instanceof this.constructor)u(t,n);else if(Me.isString(t)&&(t=t.trim())&&!Aje(t))u(Nae(t),n);else if(Me.isHeaders(t))for(let[c,d]of t.entries())i(d,c,r);else t!=null&&i(n,t,r);return this}get(t,n){if(t=e2(t),t){let r=Me.findKey(this,t);if(r){let o=this[r];if(!n)return o;if(n===!0)return Cje(o);if(Me.isFunction(n))return n.call(this,o,r);if(Me.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=e2(t),t){let r=Me.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||tN(this,this[r],r,n)))}return!1}delete(t,n){let r=this,o=!1;function i(u){if(u=e2(u),u){let c=Me.findKey(r,u);c&&(!n||tN(r,r[c],c,n))&&(delete r[c],o=!0)}}return Me.isArray(t)?t.forEach(i):i(t),o}clear(t){let n=Object.keys(this),r=n.length,o=!1;for(;r--;){let i=n[r];(!t||tN(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let n=this,r={};return Me.forEach(this,(o,i)=>{let u=Me.findKey(r,i);if(u){n[u]=ZI(o),delete n[i];return}let c=t?Mje(i):String(i).trim();c!==i&&delete n[i],n[c]=ZI(o),r[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let n=Object.create(null);return Me.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&Me.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){let r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){let r=(this[Fae]=this[Fae]={accessors:{}}).accessors,o=this.prototype;function i(u){let c=e2(u);r[c]||(Tje(o,u),r[c]=!0)}return Me.isArray(t)?t.forEach(i):i(t),this}};l1.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Me.reduceDescriptors(l1.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});Me.freezeMethods(l1);var Po=l1;function t2(e,t){let n=this||a1,r=t||n,o=Po.from(r.headers),i=r.data;return Me.forEach(e,function(c){i=c.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function r2(e){return!!(e&&e.__CANCEL__)}function Wae(e,t,n){Qt.call(this,e??"canceled",Qt.ERR_CANCELED,t,n),this.name="CanceledError"}Me.inherits(Wae,Qt,{__CANCEL__:!0});var Vs=Wae;function n2(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new Qt("Request failed with status code "+n.status,[Qt.ERR_BAD_REQUEST,Qt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function rN(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Rje(e,t){e=e||10;let n=new Array(e),r=new Array(e),o=0,i=0,u;return t=t!==void 0?t:1e3,function(d){let g=Date.now(),O=r[i];u||(u=g),n[o]=d,r[o]=g;let S=i,I=0;for(;S!==o;)I+=n[S++],S=S%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),g-ur)return o&&(clearTimeout(o),o=null),n=c,e.apply(null,arguments);o||(o=setTimeout(()=>(o=null,n=Date.now(),e.apply(null,arguments)),r-(c-n)))}}var Hae=zje;var s1=(e,t,n=3)=>{let r=0,o=Bae(50,250);return Hae(i=>{let u=i.loaded,c=i.lengthComputable?i.total:void 0,d=u-r,g=o(d),O=u<=c;r=u;let S={loaded:u,total:c,progress:c?u/c:void 0,bytes:d,rate:g||void 0,estimated:g&&c&&O?(c-u)/g:void 0,event:i,lengthComputable:c!=null};S[t?"download":"upload"]=!0,e(S)},n)};var Vae=Do.hasStandardBrowserEnv?function(){let t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a"),r;function o(i){let u=i;return t&&(n.setAttribute("href",u),u=n.href),n.setAttribute("href",u),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(u){let c=Me.isString(u)?o(u):u;return c.protocol===r.protocol&&c.host===r.host}}():function(){return function(){return!0}}();var qae=Do.hasStandardBrowserEnv?{write(e,t,n,r,o,i){let u=[e+"="+encodeURIComponent(t)];Me.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),Me.isString(r)&&u.push("path="+r),Me.isString(o)&&u.push("domain="+o),i===!0&&u.push("secure"),document.cookie=u.join("; ")},read(e){let t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function nN(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function oN(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function o2(e,t){return e&&!nN(t)?oN(e,t):t}var Uae=e=>e instanceof Po?{...e}:e;function Yl(e,t){t=t||{};let n={};function r(g,O,S){return Me.isPlainObject(g)&&Me.isPlainObject(O)?Me.merge.call({caseless:S},g,O):Me.isPlainObject(O)?Me.merge({},O):Me.isArray(O)?O.slice():O}function o(g,O,S){if(Me.isUndefined(O)){if(!Me.isUndefined(g))return r(void 0,g,S)}else return r(g,O,S)}function i(g,O){if(!Me.isUndefined(O))return r(void 0,O)}function u(g,O){if(Me.isUndefined(O)){if(!Me.isUndefined(g))return r(void 0,g)}else return r(void 0,O)}function c(g,O,S){if(S in t)return r(g,O);if(S in e)return r(void 0,g)}let d={url:i,method:i,data:i,baseURL:u,transformRequest:u,transformResponse:u,paramsSerializer:u,timeout:u,timeoutMessage:u,withCredentials:u,withXSRFToken:u,adapter:u,responseType:u,xsrfCookieName:u,xsrfHeaderName:u,onUploadProgress:u,onDownloadProgress:u,decompress:u,maxContentLength:u,maxBodyLength:u,beforeRedirect:u,transport:u,httpAgent:u,httpsAgent:u,cancelToken:u,socketPath:u,responseEncoding:u,validateStatus:c,headers:(g,O)=>o(Uae(g),Uae(O),!0)};return Me.forEach(Object.keys(Object.assign({},e,t)),function(O){let S=d[O]||o,I=S(e[O],t[O],O);Me.isUndefined(I)&&S!==c||(n[O]=I)}),n}var ej=e=>{let t=Yl({},e),{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:u,auth:c}=t;t.headers=u=Po.from(u),t.url=Zy(o2(t.baseURL,t.url),e.params,e.paramsSerializer),c&&u.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let d;if(Me.isFormData(n)){if(Do.hasStandardBrowserEnv||Do.hasStandardBrowserWebWorkerEnv)u.setContentType(void 0);else if((d=u.getContentType())!==!1){let[g,...O]=d?d.split(";").map(S=>S.trim()).filter(Boolean):[];u.setContentType([g||"multipart/form-data",...O].join("; "))}}if(Do.hasStandardBrowserEnv&&(r&&Me.isFunction(r)&&(r=r(t)),r||r!==!1&&Vae(t.url))){let g=o&&i&&qae.read(i);g&&u.set(o,g)}return t};var Dje=typeof XMLHttpRequest<"u",$ae=Dje&&function(e){return new Promise(function(n,r){let o=ej(e),i=o.data,u=Po.from(o.headers).normalize(),{responseType:c}=o,d;function g(){o.cancelToken&&o.cancelToken.unsubscribe(d),o.signal&&o.signal.removeEventListener("abort",d)}let O=new XMLHttpRequest;O.open(o.method.toUpperCase(),o.url,!0),O.timeout=o.timeout;function S(){if(!O)return;let R=Po.from("getAllResponseHeaders"in O&&O.getAllResponseHeaders()),A={data:!c||c==="text"||c==="json"?O.responseText:O.response,status:O.status,statusText:O.statusText,headers:R,config:e,request:O};n2(function(T){n(T),g()},function(T){r(T),g()},A),O=null}"onloadend"in O?O.onloadend=S:O.onreadystatechange=function(){!O||O.readyState!==4||O.status===0&&!(O.responseURL&&O.responseURL.indexOf("file:")===0)||setTimeout(S)},O.onabort=function(){O&&(r(new Qt("Request aborted",Qt.ECONNABORTED,o,O)),O=null)},O.onerror=function(){r(new Qt("Network Error",Qt.ERR_NETWORK,o,O)),O=null},O.ontimeout=function(){let k=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded",A=o.transitional||YI;o.timeoutErrorMessage&&(k=o.timeoutErrorMessage),r(new Qt(k,A.clarifyTimeoutError?Qt.ETIMEDOUT:Qt.ECONNABORTED,o,O)),O=null},i===void 0&&u.setContentType(null),"setRequestHeader"in O&&Me.forEach(u.toJSON(),function(k,A){O.setRequestHeader(A,k)}),Me.isUndefined(o.withCredentials)||(O.withCredentials=!!o.withCredentials),c&&c!=="json"&&(O.responseType=o.responseType),typeof o.onDownloadProgress=="function"&&O.addEventListener("progress",s1(o.onDownloadProgress,!0)),typeof o.onUploadProgress=="function"&&O.upload&&O.upload.addEventListener("progress",s1(o.onUploadProgress)),(o.cancelToken||o.signal)&&(d=R=>{O&&(r(!R||R.type?new Vs(null,e,O):R),O.abort(),O=null)},o.cancelToken&&o.cancelToken.subscribe(d),o.signal&&(o.signal.aborted?d():o.signal.addEventListener("abort",d)));let I=rN(o.url);if(I&&Do.protocols.indexOf(I)===-1){r(new Qt("Unsupported protocol "+I+":",Qt.ERR_BAD_REQUEST,e));return}O.send(i||null)})};var Lje=(e,t)=>{let n=new AbortController,r,o=function(d){if(!r){r=!0,u();let g=d instanceof Error?d:this.reason;n.abort(g instanceof Qt?g:new Vs(g instanceof Error?g.message:g))}},i=t&&setTimeout(()=>{o(new Qt(`timeout ${t} of ms exceeded`,Qt.ETIMEDOUT))},t),u=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(d=>{d&&(d.removeEventListener?d.removeEventListener("abort",o):d.unsubscribe(o))}),e=null)};e.forEach(d=>d&&d.addEventListener&&d.addEventListener("abort",o));let{signal:c}=n;return c.unsubscribe=u,[c,()=>{i&&clearTimeout(i),i=null}]},Jae=Lje;var Nje=function*(e,t){let n=e.byteLength;if(!t||n{let i=Fje(e,t,o),u=0;return new ReadableStream({type:"bytes",async pull(c){let{done:d,value:g}=await i.next();if(d){c.close(),r();return}let O=g.byteLength;n&&n(u+=O),c.enqueue(new Uint8Array(g))},cancel(c){return r(c),i.return()}},{highWaterMark:2})};var Gae=(e,t)=>{let n=e!=null;return r=>setTimeout(()=>t({lengthComputable:n,total:e,loaded:r}))},rj=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",Kae=rj&&typeof ReadableStream=="function",aN=rj&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),Wje=Kae&&(()=>{let e=!1,t=new Request(Do.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})(),Xae=64*1024,lN=Kae&&!!(()=>{try{return Me.isReadableStream(new Response("").body)}catch{}})(),tj={stream:lN&&(e=>e.body)};rj&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!tj[t]&&(tj[t]=Me.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new Qt(`Response type '${t}' is not supported`,Qt.ERR_NOT_SUPPORT,r)})})})(new Response);var Bje=async e=>{if(e==null)return 0;if(Me.isBlob(e))return e.size;if(Me.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(Me.isArrayBufferView(e))return e.byteLength;if(Me.isURLSearchParams(e)&&(e=e+""),Me.isString(e))return(await aN(e)).byteLength},Hje=async(e,t)=>{let n=Me.toFiniteNumber(e.getContentLength());return n??Bje(t)},Yae=rj&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:u,onDownloadProgress:c,onUploadProgress:d,responseType:g,headers:O,withCredentials:S="same-origin",fetchOptions:I}=ej(e);g=g?(g+"").toLowerCase():"text";let[R,k]=o||i||u?Jae([o,i],u):[],A,M,T=()=>{!A&&setTimeout(()=>{R&&R.unsubscribe()}),A=!0},N;try{if(d&&Wje&&n!=="get"&&n!=="head"&&(N=await Hje(O,r))!==0){let K=new Request(t,{method:"POST",body:r,duplex:"half"}),H;Me.isFormData(r)&&(H=K.headers.get("content-type"))&&O.setContentType(H),K.body&&(r=iN(K.body,Xae,Gae(N,s1(d)),null,aN))}Me.isString(S)||(S=S?"cors":"omit"),M=new Request(t,{...I,signal:R,method:n.toUpperCase(),headers:O.normalize().toJSON(),body:r,duplex:"half",withCredentials:S});let U=await fetch(M),X=lN&&(g==="stream"||g==="response");if(lN&&(c||X)){let K={};["status","statusText","headers"].forEach(ne=>{K[ne]=U[ne]});let H=Me.toFiniteNumber(U.headers.get("content-length"));U=new Response(iN(U.body,Xae,c&&Gae(H,s1(c,!0)),X&&T,aN),K)}g=g||"text";let Y=await tj[Me.findKey(tj,g)||"text"](U,e);return!X&&T(),k&&k(),await new Promise((K,H)=>{n2(K,H,{data:Y,headers:Po.from(U.headers),status:U.status,statusText:U.statusText,config:e,request:M})})}catch(U){throw T(),U&&U.name==="TypeError"&&/fetch/i.test(U.message)?Object.assign(new Qt("Network Error",Qt.ERR_NETWORK,e,M),{cause:U.cause||U}):Qt.from(U,U&&U.code,e,M)}});var sN={http:XI,xhr:$ae,fetch:Yae};Me.forEach(sN,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var Qae=e=>`- ${e}`,Vje=e=>Me.isFunction(e)||e===null||e===!1,nj={getAdapter:e=>{e=Me.isArray(e)?e:[e];let{length:t}=e,n,r,o={};for(let i=0;i`adapter ${c} `+(d===!1?"is not supported by the environment":"is not available in the build")),u=t?i.length>1?`since : -`+i.map(Qae).join(` -`):" "+Qae(i[0]):"as no adapter specified";throw new Qt("There is no suitable adapter to dispatch the request "+u,"ERR_NOT_SUPPORT")}return r},adapters:sN};function uN(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Vs(null,e)}function oj(e){return uN(e),e.headers=Po.from(e.headers),e.data=t2.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),nj.getAdapter(e.adapter||a1.adapter)(e).then(function(r){return uN(e),r.data=t2.call(e,e.transformResponse,r),r.headers=Po.from(r.headers),r},function(r){return r2(r)||(uN(e),r&&r.response&&(r.response.data=t2.call(e,e.transformResponse,r.response),r.response.headers=Po.from(r.response.headers))),Promise.reject(r)})}var ij="1.7.2";var cN={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{cN[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});var Zae={};cN.transitional=function(t,n,r){function o(i,u){return"[Axios v"+ij+"] Transitional option '"+i+"'"+u+(r?". "+r:"")}return(i,u,c)=>{if(t===!1)throw new Qt(o(u," has been removed"+(n?" in "+n:"")),Qt.ERR_DEPRECATED);return n&&!Zae[u]&&(Zae[u]=!0,console.warn(o(u," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,u,c):!0}};function qje(e,t,n){if(typeof e!="object")throw new Qt("options must be an object",Qt.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),o=r.length;for(;o-- >0;){let i=r[o],u=t[i];if(u){let c=e[i],d=c===void 0||u(c,i,e);if(d!==!0)throw new Qt("option "+i+" must be "+d,Qt.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Qt("Unknown option "+i,Qt.ERR_BAD_OPTION)}}var aj={assertOptions:qje,validators:cN};var Ap=aj.validators,u1=class{constructor(t){this.defaults=t,this.interceptors={request:new KL,response:new KL}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;let i=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` -`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Yl(this.defaults,n);let{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&aj.assertOptions(r,{silentJSONParsing:Ap.transitional(Ap.boolean),forcedJSONParsing:Ap.transitional(Ap.boolean),clarifyTimeoutError:Ap.transitional(Ap.boolean)},!1),o!=null&&(Me.isFunction(o)?n.paramsSerializer={serialize:o}:aj.assertOptions(o,{encode:Ap.function,serialize:Ap.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let u=i&&Me.merge(i.common,i[n.method]);i&&Me.forEach(["delete","get","head","post","put","patch","common"],k=>{delete i[k]}),n.headers=Po.concat(u,i);let c=[],d=!0;this.interceptors.request.forEach(function(A){typeof A.runWhen=="function"&&A.runWhen(n)===!1||(d=d&&A.synchronous,c.unshift(A.fulfilled,A.rejected))});let g=[];this.interceptors.response.forEach(function(A){g.push(A.fulfilled,A.rejected)});let O,S=0,I;if(!d){let k=[oj.bind(this),void 0];for(k.unshift.apply(k,c),k.push.apply(k,g),I=k.length,O=Promise.resolve(n);S{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i,u=new Promise(c=>{r.subscribe(c),i=c}).then(o);return u.cancel=function(){r.unsubscribe(i)},u},t(function(i,u,c){r.reason||(r.reason=new Vs(i,u,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new e(function(o){t=o}),cancel:t}}},ele=pN;function fN(e){return function(n){return e.apply(null,n)}}function dN(e){return Me.isObject(e)&&e.isAxiosError===!0}var mN={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(mN).forEach(([e,t])=>{mN[t]=e});var tle=mN;function rle(e){let t=new i2(e),n=Ky(i2.prototype.request,t);return Me.extend(n,i2.prototype,t,{allOwnKeys:!0}),Me.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return rle(Yl(e,o))},n}var mo=rle(a1);mo.Axios=i2;mo.CanceledError=Vs;mo.CancelToken=ele;mo.isCancel=r2;mo.VERSION=ij;mo.toFormData=Cp;mo.AxiosError=Qt;mo.Cancel=mo.CanceledError;mo.all=function(t){return Promise.all(t)};mo.spread=fN;mo.isAxiosError=dN;mo.mergeConfig=Yl;mo.AxiosHeaders=Po;mo.formToJSON=e=>QI(Me.isHTMLForm(e)?new FormData(e):e);mo.getAdapter=nj.getAdapter;mo.HttpStatusCode=tle;mo.default=mo;var Mp=mo;var{Axios:ZLt,AxiosError:eNt,CanceledError:tNt,isCancel:rNt,CancelToken:nNt,VERSION:oNt,all:iNt,Cancel:aNt,isAxiosError:lNt,spread:sNt,toFormData:uNt,AxiosHeaders:cNt,HttpStatusCode:pNt,formToJSON:fNt,getAdapter:dNt,mergeConfig:mNt}=Mp;var qu=["class","term"],nle=["property","annotationProperty","dataProperty","objectProperty"],ole=["individual"],lj=["ontology"],a2=[...qu,...ole,...nle],hN=[...a2,...lj];function c1(e){return qu.includes(e)}function gN(e){return nle.includes(e)}function hl(e){return ole.includes(e)}function l2(e){return lj.includes(e)}function vN(e){return a2.includes(e)}function s2(e){return hN.includes(e)}function wd(e){return c1(e.getType())}function Tp(e){return gN(e.getType())}function p1(e){return hl(e.getType())}function gl(e){return vN(e.getType())}function ile(e){return l2(e.getType())}function nt(e){return Array.isArray(e)?e:e?[e]:[]}var Uje=!0;function Ni(e){return e!==void 0?e:Uje}function sj(e){return e==="term"?"class":e}function Ql(e){return e.charAt(0).toUpperCase()+e.slice(1)}function f1(e){return Ql(e).split(/(?=[A-Z][a-z])/).join(" ")}function d1(e){return Ql(e).replace("_"," ")}function Zl(e,t,n,r){return`ontologies/${e}/${Lo(nt(t),r)}`+(n!=null?`/${encodeURIComponent(encodeURIComponent(n))}`:"")}function Lo(e,t){for(let n of nt(e))if(s2(n)){if(c1(n))return Ni(t)?"terms":"classes";if(gN(n))return"properties";if(hl(n))return"individuals";if(l2(n))return"ontologies"}throw new Error("No thingType found to pluralize in provided typeArray.")}function uj(e,t){for(let n of nt(e))switch(n){case"terms":case"classes":return Ni(t)?"term":"class";case"properties":case"dataProperties":case"objectProperties":case"annotationProperties":return"property";case"individuals":return"individual";case"ontologies":return"ontology"}throw new Error("No thingType found to singularize in provided typeArray.")}function Ut(){return(Math.random()*Math.pow(2,54)).toString(36)}function cj(e){return/^#[0-9A-F]{6}$/i.test(e)}function pj(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function fj(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function Ln(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}function dj(e){let t=e.filter(n=>s2(n));if(t=t.map(n=>n==="annotationProperty"||n==="objectProperty"||n==="dataProperty"?"property":n),t=[...new Set(t)],t.length===1)return t[0];throw t.length===0?Error("Entity type could not be correctly inferred: No suitable type found in array."):Error(`Entity type could not be correctly inferred: Multiple types found in array, no definite choice possible - ${JSON.stringify(t)}`)}var ft=class e{value;axioms;constructor(t,n){this.value=t,this.axioms=n}static fromJson(t){return t?(Array.isArray(t)||(t=[t]),t.map(n=>typeof n=="object"&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1?new e(n.value,n.axioms):new e(n,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let t={};for(let n of this.axioms)for(let r of Object.keys(n)){let o=n[r],i=t[r];i!==void 0?i.push(o):t[r]=[o]}return t}};var Od=class e{linkedEntities;constructor(t){t?this.linkedEntities={...t}:this.linkedEntities={}}mergeWith(t){return t?new e({...this.linkedEntities,linkedEntities:t}):new e({...this.linkedEntities})}getLabelForIri(t){let n=this.linkedEntities[t];if(n){let r=ft.fromJson(n.label);if(r&&r.length>0)return r[0].value}}get(t){return this.linkedEntities[t]}};var xd=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getTypePlural(){return Lo(this.getType())}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=ft.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=ft.fromJson(this.properties.description);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontology_name}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&ft.fromJson(n[t]?.label)[0]?.value||t}getLinkedEntities(){return new Od(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties.annotation&&this.properties.annotation.depiction?this.properties.annotation.depiction[0]:""}};var Uu=class extends xd{isCanonical(){return this.properties.is_defining_ontology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return ft.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(ft.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return ft.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return ft.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return nt(this.properties.ancestor)}getHierarchicalAncestorIris(){return nt(this.properties.hierarchicalAncestor)}getSynonyms(){return ft.fromJson(this.properties.synonyms)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties.annotation.has_dbxref||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.obo_id||this.properties.short_form}getDepictedBy(){return ft.fromJson([...nt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...nt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){return nt(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return d1(t)}getAnnotationById(t){return ft.fromJson(nt(this.properties.annotation[t]))}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let n=ft.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}};var u2=class extends Uu{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return ft.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return nt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return nt(this.properties.in_subset)||[]}};var c2=class extends Uu{getType(){return"property"}getParents(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return nt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var p2=class extends Uu{getType(){return"individual"}getParents(){return ft.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return ft.fromJson([])}getDifferentFrom(){return nt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return nt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var f2=class extends xd{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=ft.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=ft.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return nt(this.properties.config.annotations.creator)}getSourceFileTimestamp(){return this.properties.updated}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfTerms)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.config.logo||void 0}getOntologyPurl(){return this.properties.config.id}getHomepage(){return this.properties.config.homepage}getMailingList(){return this.properties.config.mailingList}getTracker(){return this.properties.config.tracker}getVersionIri(){return this.properties.config.versionIri}getVersion(){return this.properties.config.version}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){return this.properties.config&&this.properties.config.annotations?nt(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return f1(t)}getAnnotationById(t){return ft.fromJson(nt(this.properties.config.annotations[t]).filter(n=>typeof n!="string"||n!==""))}getPreferredRoots(){return nt(this.properties.hasPreferredRoot)}getLanguages(){return nt(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return nt(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}};var d2=class{properties;constructor(t){this.properties=t}getTotalOntologies(){return this.properties.length}getNumEntities(){return this.properties.reduce((t,n)=>t+n.getNumEntities(),0)}getNumClasses(){return this.properties.reduce((t,n)=>t+n.getNumClasses(),0)}getNumProperties(){return this.properties.reduce((t,n)=>t+n.getNumProperties(),0)}getNumIndividuals(){return this.properties.reduce((t,n)=>t+n.getNumIndividuals(),0)}};var _d=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let t=this.properties.type;for(let n of t)if(s2(n))return n;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return nt(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=ft.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=ft.fromJson(this.properties.definition);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&ft.fromJson(n[t]?.label)[0]?.value||t}getAnnotationById(t){return ft.fromJson(nt(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new Od(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties["http://xmlns.com/foaf/0.1/depiction"]?this.properties["http://xmlns.com/foaf/0.1/depiction"]:""}};var $u=class extends _d{isCanonical(){return this.properties.isDefiningOntology}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return ft.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(ft.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return ft.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return ft.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return nt(this.properties.ancestor)}getHierarchicalAncestorIris(){return nt(this.properties.hierarchicalAncestor)}getSynonyms(){return ft.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties["http://www.geneontology.org/formats/oboInOwl#hasDbXref"]||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return ft.fromJson([...nt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...nt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){let t=nt(this.properties.definitionProperty),n=nt(this.properties.synonymProperty),r=nt(this.properties.hierarchicalProperty),o=new Set;for(let i of Object.keys(this.properties))if(i.indexOf("://")!==-1&&!i.startsWith("negativePropertyAssertion+")&&i!=="http://xmlns.com/foaf/0.1/depicted_by"&&i!=="http://xmlns.com/foaf/0.1/depiction"){if(!this.isPredicateFromInformalVocabulary(i)){let u=this.getLinkedEntities().get(i);if(u!=null&&u.type.indexOf("objectProperty")!==-1||u!=null&&u.type.indexOf("dataProperty")!==-1)continue}t.indexOf(i)!==-1||n.indexOf(i)!==-1||r.indexOf(i)!==-1||(i.startsWith("http://www.w3.org/2000/01/rdf-schema#")||i.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||i.startsWith("http://www.w3.org/2002/07/owl#"))&&i!=="http://www.w3.org/2000/01/rdf-schema#comment"&&i!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&i!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||i==="http://www.geneontology.org/formats/oboInOwl#inSubset"||i==="http://www.geneontology.org/formats/oboInOwl#id"||o.add(i)}return Array.from(o)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDirectDescendants?parseInt(this.properties.numDirectDescendants):0}getHierarchicalParentReificationAxioms(t){let n=ft.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}};var m2=class extends $u{getParents(){return ft.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return nt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return nt(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var h2=class extends $u{getParents(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return nt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var g2=class extends $u{getParents(){return ft.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return ft.fromJson([])}getDifferentFrom(){return nt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return nt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var v2=class extends _d{getOntologyId(){return this.properties.ontologyId}getName(){let t=ft.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=ft.fromJson(this.properties.definition||this.properties.description||"");return t[0]&&t[0].value||""}getCreators(){return nt(this.properties["http://purl.org/dc/elements/1.1/creator"])}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let t=new Set;for(let n of Object.keys(this.properties))n.indexOf("://")!==-1&&n!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(n.startsWith("http://www.w3.org/2000/01/rdf-schema#")||n.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||n.startsWith("http://www.w3.org/2002/07/owl#")||t.add(n));return Array.from(t)}getPreferredRoots(){return nt(this.properties.hasPreferredRoot)}getLanguages(){return nt(this.properties.language)}getImportsFrom(){return nt(this.properties.importsFrom)}getExportsTo(){return nt(this.properties.exportsTo)}getAllowDownload(){return this.properties.allowDownload}};function vl(e){let t;if(e._embedded!==void 0||e.numberOfTerms!==void 0)t=!0;else if(e.elements!==void 0||e.numberOfClasses!==void 0)t=!1;else throw Error(`Response structure does not correlate to any of the featured response structures: - ${JSON.stringify(e)}`);let n;if(t)e._embedded===void 0?n="ontology":e._embedded.terms!==void 0?n="term":e._embedded.properties!==void 0?n="property":e._embedded.individuals!==void 0&&(n="individual");else if(e.elements===void 0)n="ontology";else{if(e.elements[0]===void 0)throw Error("Empty response.");n=dj(e.elements[0].type)}if(n===void 0)throw Error("Entity type could not be correctly inferred.");return $je(e,n,t)}function $je(e,t,n){switch(t){case"ontology":return n?new f2(e):new v2(e);case"term":case"class":return n?new u2(Rp(nt(e._embedded.terms),n)):new m2(Rp(nt(e.elements),n));case"property":return n?new c2(Rp(nt(e._embedded.properties),n)):new h2(Rp(nt(e.elements),n));case"individual":return n?new p2(Rp(nt(e._embedded.individuals),n)):new g2(Rp(nt(e.elements),n));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function Rp(e,t,n){if(n){let o=nt(e).filter(i=>(t?i.ontology_name:i.ontologyId)==n);if(o.length>0)return o[0];console.error(`Invalid ontologyId ${n} for given entityArrayResponse.`)}let r=nt(e).filter(o=>t?o.is_defining_ontology:o.isDefiningOntology);if(r.length>0)return r[0];if(e.length>0)return e[0];throw Error("Empty response.")}var es=class{entityData;childRelationToParent;loadedChildren;expanded;loading;constructor(t,n){this.entityData=t,this.loadedChildren=[],this.expanded=!1,this.loading=!1,this.childRelationToParent=n}addChild(t){this.loadedChildren.push(t)}},Jje=!1,Gje=!0,ts=class{parentChildRelations;entitiesData;allChildrenPresent;roots;api;ontologyId;includeObsoleteEntities=Jje;entityType;keepExpansionStates=Gje;useLegacy;mainEntityIri;constructor(t){let{parentChildRelations:n,entitiesData:r,allChildrenPresent:o,roots:i,includeObsoleteEntities:u,keepExpansionStates:c,api:d,mainEntityIri:g,entityType:O,ontologyId:S,useLegacy:I}=t;this.parentChildRelations=n,this.entitiesData=r,this.allChildrenPresent=o,this.roots=i,u!=null&&(this.includeObsoleteEntities=u),c!=null&&(this.keepExpansionStates=c),this.api=d,this.mainEntityIri=g,this.entityType=O,this.ontologyId=S,I!=null&&(this.useLegacy=I)}mergeChildrenIntoLoadedChildren(t){let n=this.parentChildRelations.get(t.entityData.iri);if(n==null)throw Error(`parentChildRelations has no entry for key "${t.entityData.iri}" although this should never happen.`);let r=0,o=t.loadedChildren.length,i=0;for(;i=0;u--)for(let c=u+1;c(u.label||u.iri).localeCompare(c.label||c.iri)),i=[];for(let u of o){this.entitiesData.set(u.iri,u);let c=u.parents.filter(d=>d.value==t.entityData.iri);i.push({childIri:u.iri,childRelationToParent:c.length>0&&c[0].getMetadata()?c[0].getMetadata().childRelationToParent:void 0})}this.parentChildRelations.set(t.entityData.iri,i)}return this.mergeChildrenIntoLoadedChildren(t),this.allChildrenPresent.add(t.entityData.iri),!0}else return!1}};var mj=class{properties;constructor(t){this.properties=t}getTotalSearchResults(){return this.properties.length}};var hj=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology_name}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}};var gj=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}};function vj(e){return e==="http://www.w3.org/2002/07/owl#Thing"||e==="http://www.w3.org/2002/07/owl#TopObjectProperty"}var Xje=10,pr=class e{axiosInstance;constructor(t){this.axiosInstance=Mp.create({baseURL:t,headers:{Accept:"application/json",Content_Type:"application/json"}})}buildParamsForGet(t,n,r,o){return n?{...t,sort:`${n.sortField},${n.sortDir}`,...r,...this.buildOtherParams(o)}:{...t,...r,...this.buildOtherParams(o)}}buildPaginationParams(t){let n={rows:t?.size};return t?.page&&(t.size?n.start=(+t.page*+t.size).toString():n.start=(+t.page*Xje).toString()),n}buildParamsForSearch(t,n,r,o,i){let u={exact:t.exactMatch,obsoletes:t.showObsoleteTerms};return i?u.query=t.query:u.q=t.query,t.groupByIri&&(u.groupField=t.groupByIri),t.types&&(u.type=t.types),t.ontology&&(u.ontology=t.ontology),{...u,...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildOtherParams(t){let n={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],u=o.split("=")[1];n[i]=u}),n}buildParamsForSelect(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildParamsForSuggest(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}check_for_errors(t){if(t.error)throw Error(t.status+" "+t.error+" - "+t.message+" - "+t.exception+" at "+t.path);if(t.page!==void 0&&t.page.totalElements===0)throw Error("Response contains 0 elements");return t}async makeCall(t,n,r){let o=Ni(r)?"":"v2/",i=(await this.axiosInstance.get(o+t,n)).data;return this.check_for_errors(i)}getOntologies=async(t,n,r,o)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,n,r,o)},!0);async getOntologiesData(t){let n,r=[],o=0,i=500;do{if(n=await this.getOntologies({size:i.toString(),page:o.toString()},void 0,void 0,t),!n||!n._embedded||!n._embedded.ontologies)throw new Error("Ontologies data not found");r=r.concat(n._embedded.ontologies.map(u=>vl(u))),o+=1}while(o{let u=Ni(i)?"terms":"classes";return this.makeCall(u,{params:this.buildParamsForGet(t,n,r)},Ni(i))};getProperties=async(t,n,r,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,n,r)},Ni(i));getIndividuals=async(t,n,r,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,n,r)},Ni(i));getOntology=async(t,n,r,o,i)=>{let u={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+r?.ontologyId,u,Ni(i))};getEntity=async(t,n,r,o,i)=>{let u=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",c={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(u+"entities",{params:c},Ni(i))};getTerm=async(t,n,r,o,i,u)=>{let c=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",d=Ni(i)?"terms":"classes",g={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(c+d,{params:g,signal:u},Ni(i))};getProperty=async(t,n,r,o,i,u)=>{let c=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",d={iri:r?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(c+"properties",{params:d,signal:u},Ni(i))};getIndividual=async(t,n,r,o,i,u)=>{let c=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",d={iri:r?.individualIri,...this.buildOtherParams(o)};return this.makeCall(c+"individuals",{params:d,signal:u},Ni(i))};search=async(t,n,r,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,n,r,o),signal:i},!0);select=async(t,n,r,o)=>this.makeCall("select",{params:this.buildParamsForSelect(t,n,r,o)},!0);searchTs4nfdiGateway=async(t,n,r,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,n,r,o,i)},!0);async getSelectData(t,n,r,o,i){let u,c=[],d=0;if(i)if(u=await this.searchTs4nfdiGateway(t,n,r,o,i),u)c=c.concat(u.map(g=>new gj(g)));else throw new Error("Select data not found");else{if(u=await this.select(t,n,r,o),!u||!u.response.docs)throw new Error("Select data not found");c=c.concat(u.response.docs.map(g=>new hj(g)))}return new mj(c)}suggest=async(t,n,r,o)=>this.makeCall("suggest",{params:this.buildParamsForSuggest(t,n,r,o)},!0);getTermTree=async(t,n,r,o)=>{let i="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(i=i+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/jstree",n.child?(await this.axiosInstance.get(i+"/children/"+n.child)).data:(await this.axiosInstance.get(i,{params:n})).data):(await this.axiosInstance.get(i+"/roots")).data};getTermRelations=async(t,n,r)=>{let o="ontologies/"+t?.ontologyId+"/terms";if(!t.termIri)return(await this.axiosInstance.get(o+"/roots")).data;o=o+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/graph"};async getEntityResponse(t,n,r,o,i){let u;if(!t)throw Error("No IRI provided");return n?u=await this.getEntityWithEntityTypeProvided(t,n,r,o,i):Ni(i)?u=await this.getEntityWithInferredEntityType(t,r,o):u=await this.getEntity(void 0,void 0,{ontologyId:r,termIri:t},o,i),u}async getEntityObject(t,n,r,o,i){return vl(await this.getEntityResponse(t,n,r,o,i))}async getOntologyObject(t,n,r){let o=await this.getOntology(void 0,void 0,{ontologyId:t},n,r);return vl(o)}async getThingObject(t,n,r,o,i){if(n)if(l2(n)){if(r)return await this.getOntologyObject(r,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${lj.join('", "')}"}.`)}else if(vN(n)){if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error(`iri has to be provided if thingType in {"${a2.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${n}" provided. Must be in {"${hN.join('", "')}"}.`);else{if(!t&&r)return await this.getOntologyObject(r,o,i);if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error("iri or ontologyId has to be provided if thingType is not provided.")}}async getEntityWithEntityTypeProvided(t,n,r,o,i){switch(n){case"term":case"class":return await this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},o,i);case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return await this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},o,i);case"individual":return await this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},o,i);default:throw Error('Invalid entity type "'+n+`". Must be one of {${a2.map(u=>`"${u}"`).join(", ")}}.`)}}async getEntityWithInferredEntityType(t,n,r){let o=new AbortController,i=o.signal,u;function c(d){d._embedded!==void 0&&(u=d,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:n,termIri:t},r,!0,i).then(d=>{c(d)}),this.getProperty(void 0,void 0,{ontologyId:n,propertyIri:t},r,!0,i).then(d=>{c(d)}),this.getIndividual(void 0,void 0,{ontologyId:n,individualIri:t},r,!0,i).then(d=>{c(d)})]),u!==void 0)return u;throw Error("Iri "+t+" could not be resolved.")}async getAncestors(t,n,r,o=!1){let i;return c1(n)?i=await this.makeCall(`${Zl(r,n,t,!1)}/hierarchicalAncestors`,{params:{size:"1000",includeObsoleteEntities:o}},!1):i=await this.makeCall(`${Zl(r,n,t,!1)}/ancestors`,{params:{size:"1000",includeObsoleteEntities:o}},!1),i.elements.map(u=>vl({elements:[u]}))}async getJSTree(t,n,r){return await this.makeCall(`${Zl(r,n,t,!0)}/jstree`,{params:{size:"1000"}},!0)}async getChildren(t,n,r,o=!1,i=!1){let u;return c1(n)?u=await this.makeCall(`${Zl(r,qu[0],t,i)}/hierarchicalChildren`,{params:{size:"1000",includeObsoleteEntities:o}},i):hl(n)?i?u=await this.makeCall(`${Zl(r,qu[0],t,i)}/descendants`,{params:{size:"1000"}},i):u=await this.makeCall(`${Zl(r,qu[0],t,i)}/instances`,{params:{size:"1000",includeObsoleteEntities:o}},i):u=await this.makeCall(`${Zl(r,n,t,i)}/children`,{params:{size:"1000",includeObsoleteEntities:o}},i),i?u._embedded[hl(n)?Lo(qu[0],i):Lo(n,i)].map(c=>vl({_embedded:{[hl(n)?Lo(qu[0],i):Lo(n)]:[c]}})):u.elements.map(c=>vl({elements:[c]}))}async getRootEntities(t,n,r=!1,o=!1,i=!1){return i?hl(t)?[]:(await this.makeCall(`${Zl(n,t,void 0,i)}/roots`,{params:{size:"1000",includeObsoleteEntities:o}},i))._embedded[Lo(t,i)].map(c=>vl({_embedded:{[Lo(t,i)]:[c]}})):hl(t)?[]:(await this.makeCall(`${Zl(n,t,void 0,i)}`,{params:{size:"1000",includeObsoleteEntities:o,hasDirectParent:r?void 0:"false",isPreferredRoot:r?"true":void 0}},i)).elements.map(c=>vl({elements:[c]}))}async getClassInstances(t,n){return(await this.makeCall(`${Zl(n,qu[0],t,!1)}/individuals`,{params:{size:"1000"}},!1)).elements.map(o=>vl({elements:[o]}))}async buildHierarchyWithIri(t){let{iri:n,ontologyId:r,entityType:o,preferredRoots:i=!1,includeObsoleteEntities:u=!1,keepExpansionStates:c=!0,showSiblingsOnInit:d=!1,useLegacy:g=!1}=t;if(n)return await this.getEntityObject(n,o,r,"",g).then(O=>this.buildHierarchyWithEntity({entityType:o||O.getType(),ontologyId:r||O.getOntologyId(),includeObsoleteEntities:u,preferredRoots:i,mainEntity:O,keepExpansionStates:c,showSiblingsOnInit:d,useLegacy:g}));if(o==null||r==null)throw Error("Either iri or ontologyId and entityType have to be provided.");return await this.buildRootHierarchy({entityType:o,ontologyId:r,includeObsoleteEntities:u,preferredRoots:i,keepExpansionStates:c,showSiblingsOnInit:d,useLegacy:g})}jsTreeNodeToEntityDataForHierarchy(t){return{iri:t.iri,label:t.text,hasChildren:t.children||t.state.opened,parents:[]}}entityToEntityDataForHierarchy(t){return{iri:t.getIri(),label:nt(t.getLabel())[0],definedBy:t.getDefinedBy(),hasChildren:t.hasChildren(),numDescendants:t.getNumHierarchicalDescendants()||t.getNumDescendants(),parents:t.getParents()}}async buildRootHierarchy(t){let{ontologyId:n,entityType:r,preferredRoots:o,includeObsoleteEntities:i,useLegacy:u}=t,c=(await this.getRootEntities(r,n,o,i,u)).map(O=>this.entityToEntityDataForHierarchy(O)).filter(O=>!vj(O.iri)),d=new Map,g=new Map;for(let O of c)d.set(O.iri,[]),g.set(O.iri,O);return new ts({parentChildRelations:d,entitiesData:g,allChildrenPresent:new Set,roots:c.map(O=>new es(O)).sort((O,S)=>(O.entityData.label||O.entityData.iri).localeCompare(S.entityData.label||S.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:n,includeObsoleteEntities:i,entityType:r,keepExpansionStates:t.keepExpansionStates,useLegacy:u})}async buildHierarchyWithEntity(t){let{mainEntity:n,ontologyId:r,entityType:o,preferredRoots:i,includeObsoleteEntities:u,showSiblingsOnInit:c,useLegacy:d}=t,g=[];if(d){let M=await this.getJSTree(n.getIri(),o,r),T=new Map,N=new Map;for(let X of M)T.set(X.id,X.iri),N.set(X.iri,new Set);for(let X of M){let Y=N.get(X.iri),K=T.get(X.parent);Y!=null&&K!=null&&Y.add(K)}g=[];let U=new Set;for(let X of M)if(!U.has(X.iri)){U.add(X.iri),g.push(this.jsTreeNodeToEntityDataForHierarchy(X));let Y=N.get(X.iri);Y!=null&&(g[g.length-1].parents=ft.fromJson(Array.from(Y.values()))||[])}}else{let M=await this.getAncestors(n.getIri(),o,r||n.getOntologyId(),u);g=[this.entityToEntityDataForHierarchy(n),...M.map(T=>this.entityToEntityDataForHierarchy(T))]}g=g.filter(M=>!vj(M.iri));let O=new Map,S=new Set,I=new Map;for(let M of g)O.set(M.iri,[]),I.set(M.iri,M);if(c){let M=o||n.getType(),T=M=="individual"?"class":M,N=[];for(let U of g)U.iri!=n.getIri()&&N.push(new Promise(X=>this.getChildren(U.iri,T,r,u,d).then(Y=>Y.map(K=>this.entityToEntityDataForHierarchy(K))).then(Y=>{let K=[];for(let H of Y){I.set(H.iri,H);let ne=H.parents.filter(pe=>pe.value==U.iri);K.push({childIri:H.iri,childRelationToParent:ne.length>0&&ne[0].getMetadata()?ne[0].getMetadata().childRelationToParent:void 0})}O.set(U.iri,K),S.add(U.iri)}).then(X)));if(await Promise.allSettled(N),M=="individual")for(let U of n.getParents()){let X=(await this.getChildren(U.value,M,r,u)).map(K=>this.entityToEntityDataForHierarchy(K)),Y=[];for(let K of X)Y.push({childIri:K.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});O.set(U.value,Y)}}else for(let M of g){let T=M.parents.filter(N=>!vj(N.value));if(M.iri==n?.getIri()&&hl(o||n.getType()))for(let N of T)O.has(N.value)&&O.get(N.value)?.push({childIri:M.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});else for(let N of T)O.has(N.value)&&O.get(N.value)?.push({childIri:M.iri,childRelationToParent:N.getMetadata()?N.getMetadata().childRelationToParent:void 0})}for(let M of O.values())M.sort((T,N)=>(I.get(T.childIri)?.label||T.childIri).localeCompare(I.get(N.childIri)?.label||N.childIri));let R=[];if(i){let M=(await this.getOntologyObject(r,void 0,d)).getPreferredRoots();for(let T of M)I.has(T)&&R.push(T)}else for(let M of g)M.parents.filter(N=>!vj(N.value)).length==0&&R.push(M.iri);function k(M,T,N){T.add(M.iri);let U=new es(M);U.childRelationToParent=N;let X=O.get(M.iri)||[];for(let Y of X){if(T.has(Y.childIri)){console.error(`Cyclic tree at entity "${Y.childIri}".`);continue}let K=I.get(Y.childIri);K!=null&&U.addChild(k(K,T,Y.childRelationToParent))}return U.loadedChildren.length>0&&(U.expanded=!0),T.delete(M.iri),U}let A=new Set;return new ts({parentChildRelations:O,entitiesData:I,allChildrenPresent:S,roots:R.map(M=>k(I.get(M),A)).sort((M,T)=>(M.entityData.label||M.entityData.iri).localeCompare(T.entityData.label||T.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:r,includeObsoleteEntities:u,entityType:o,mainEntityIri:n?.getIri(),keepExpansionStates:t.keepExpansionStates,useLegacy:d})}async loadHierarchyChildren(t){if(t.entityType==null)throw Error("EntityType has to be provided to load children in OLS.");return(await this.getChildren(t.nodeToExpand.entityData.iri,t.entityType,t.ontologyId,t.includeObsoleteEntities,t.useLegacy)).map(n=>this.entityToEntityDataForHierarchy(n))}};var jd=E(D()),I1=E(rt());var lse=E(yt()),Vj=E(rt());var bl=E(D()),Nj=E(D());var Qje=!1;function Zje(e){if(e.sheet)return e.sheet;for(var t=0;t0?oo(w1,--Wi):0,y1--,ho===10&&(y1=1,xj--),ho}function Bi(){return ho=Wi2||b1(ho)>3?"":" "}function _le(e,t){for(;--t&&Bi()&&!(ho<48||ho>102||ho>57&&ho<65||ho>70&&ho<97););return x1(e,O2()+(t<6&&yl()==32&&Bi()==32))}function wN(e){for(;Bi();)switch(ho){case e:return Wi;case 34:case 39:e!==34&&e!==39&&wN(ho);break;case 40:e===41&&wN(e);break;case 92:Bi();break}return Wi}function Sle(e,t){for(;Bi()&&e+ho!==47+10;)if(e+ho===42+42&&yl()===47)break;return"/*"+x1(t,Wi-1)+"*"+Sd(e===47?e:Bi())}function Ile(e){for(;!b1(yl());)Bi();return x1(e,Wi)}function Ple(e){return Sj(Ij("",null,null,null,[""],e=_j(e),0,[0],e))}function Ij(e,t,n,r,o,i,u,c,d){for(var g=0,O=0,S=u,I=0,R=0,k=0,A=1,M=1,T=1,N=0,U="",X=o,Y=i,K=r,H=U;M;)switch(k=N,N=Bi()){case 40:if(k!=108&&oo(H,S-1)==58){b2(H+=Nr(_1(N),"&","&\f"),"&\f")!=-1&&(T=-1);break}case 34:case 39:case 91:H+=_1(N);break;case 9:case 10:case 13:case 32:H+=xle(k);break;case 92:H+=_le(O2()-1,7);continue;case 47:switch(yl()){case 42:case 47:v1(tEe(Sle(Bi(),O2()),t,n),d);break;default:H+="/"}break;case 123*A:c[g++]=Fi(H)*T;case 125*A:case 59:case 0:switch(N){case 0:case 125:M=0;case 59+O:T==-1&&(H=Nr(H,/\f/g,"")),R>0&&Fi(H)-S&&v1(R>32?Ele(H+";",r,n,S-1):Ele(Nr(H," ","")+";",r,n,S-2),d);break;case 59:H+=";";default:if(v1(K=jle(H,t,n,g,O,o,c,U,X=[],Y=[],S),i),N===123)if(O===0)Ij(H,t,K,K,X,i,S,c,Y);else switch(I===99&&oo(H,3)===110?100:I){case 100:case 108:case 109:case 115:Ij(e,K,K,r&&v1(jle(e,K,K,0,0,o,c,U,o,X=[],S),Y),o,Y,S,c,r?X:Y);break;default:Ij(H,K,K,K,[""],Y,0,c,Y)}}g=O=R=0,A=T=1,U=H="",S=u;break;case 58:S=1+Fi(H),R=k;default:if(A<1){if(N==123)--A;else if(N==125&&A++==0&&Ole()==125)continue}switch(H+=Sd(N),N*A){case 38:T=O>0?1:(H+="\f",-1);break;case 44:c[g++]=(Fi(H)-1)*T,T=1;break;case 64:yl()===45&&(H+=_1(Bi())),I=yl(),O=S=Fi(U=H+=Ile(O2())),N++;break;case 45:k===45&&Fi(H)==2&&(A=0)}}return i}function jle(e,t,n,r,o,i,u,c,d,g,O){for(var S=o-1,I=o===0?i:[""],R=g1(I),k=0,A=0,M=0;k0?I[T]+" "+N:Nr(N,/&\f/g,I[T])))&&(d[M++]=U);return w2(e,t,n,o===0?m1:c,d,g,O)}function tEe(e,t,n){return w2(e,t,n,bj,Sd(wle()),zp(e,2,-2),0)}function Ele(e,t,n,r){return w2(e,t,n,h1,zp(e,0,r),zp(e,r+1,-1),r)}function Id(e,t){for(var n="",r=g1(e),o=0;o6)switch(oo(e,t+1)){case 109:if(oo(e,t+4)!==45)break;case 102:return Nr(e,/(.+:)(.+)-([^]+)/,"$1"+qr+"$2-$3$1"+y2+(oo(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~b2(e,"stretch")?Rle(Nr(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(oo(e,t+1)!==115)break;case 6444:switch(oo(e,Fi(e)-3-(~b2(e,"!important")&&10))){case 107:return Nr(e,":",":"+qr)+e;case 101:return Nr(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+qr+(oo(e,14)===45?"inline-":"")+"box$3$1"+qr+"$2$3$1"+ri+"$2box$3")+e}break;case 5936:switch(oo(e,t+11)){case 114:return qr+e+ri+Nr(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return qr+e+ri+Nr(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return qr+e+ri+Nr(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return qr+e+ri+e+e}return e}var lEe=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case h1:t.return=Rle(t.value,t.length);break;case wj:return Id([O1(t,{value:Nr(t.value,"@","@"+qr)})],o);case m1:if(t.length)return bN(t.props,function(i){switch(yN(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Id([O1(t,{props:[Nr(i,/:(read-\w+)/,":"+y2+"$1")]})],o);case"::placeholder":return Id([O1(t,{props:[Nr(i,/:(plac\w+)/,":"+qr+"input-$1")]}),O1(t,{props:[Nr(i,/:(plac\w+)/,":"+y2+"$1")]}),O1(t,{props:[Nr(i,/:(plac\w+)/,ri+"input-$1")]})],o)}return""})}},sEe=[lEe],zle=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(A){var M=A.getAttribute("data-emotion");M.indexOf(" ")!==-1&&(document.head.appendChild(A),A.setAttribute("data-s",""))})}var o=t.stylisPlugins||sEe,i={},u,c=[];u=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(A){for(var M=A.getAttribute("data-emotion").split(" "),T=1;T=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Gle={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var xEe=!1,_Ee=/[A-Z]|^ms/g,SEe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,Qle=function(t){return t.charCodeAt(1)===45},Xle=function(t){return t!=null&&typeof t!="boolean"},EN=Mle(function(e){return Qle(e)?e:e.replace(_Ee,"-$&").toLowerCase()}),Kle=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(SEe,function(r,o,i){return qs={name:o,styles:i,next:qs},o})}return Gle[t]!==1&&!Qle(t)&&typeof n=="number"&&n!==0?n+"px":n},IEe="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function x2(e,t,n){if(n==null)return"";var r=n;if(r.__emotion_styles!==void 0)return r;switch(typeof n){case"boolean":return"";case"object":{var o=n;if(o.anim===1)return qs={name:o.name,styles:o.styles,next:qs},o.name;var i=n;if(i.styles!==void 0){var u=i.next;if(u!==void 0)for(;u!==void 0;)qs={name:u.name,styles:u.styles,next:qs},u=u.next;var c=i.styles+";";return c}return jEe(e,t,n)}case"function":{if(e!==void 0){var d=qs,g=n(e);return qs=d,x2(e,t,g)}break}}var O=n;if(t==null)return O;var S=t[O];return S!==void 0?S:O}function jEe(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=0;return(fe?W?"+":"":"-")+Math.pow(10,Math.max(0,ee)).toString().substr(1)+q}var Ze=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,lt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ke={},Ht={};function Ge(y,j,W,q){var ee=q;typeof q=="string"&&(ee=function(){return this[q]()}),y&&(Ht[y]=ee),j&&(Ht[j[0]]=function(){return Be(ee.apply(this,arguments),j[1],j[2])}),W&&(Ht[W]=function(){return this.localeData().ordinal(ee.apply(this,arguments),y)})}function Wt(y){return y.match(/\[[\s\S]/)?y.replace(/^\[|\]$/g,""):y.replace(/\\/g,"")}function Vt(y){var j=y.match(Ze),W,q;for(W=0,q=j.length;W=0&<.test(y);)y=y.replace(lt,q),lt.lastIndex=0,W-=1;return y}var Mr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Sr(y){var j=this._longDateFormat[y],W=this._longDateFormat[y.toUpperCase()];return j||!W?j:(this._longDateFormat[y]=W.match(Ze).map(function(q){return q==="MMMM"||q==="MM"||q==="DD"||q==="dddd"?q.slice(1):q}).join(""),this._longDateFormat[y])}var An="Invalid date";function jr(){return this._invalidDate}var Dt="%d",en=/\d{1,2}/;function Cr(y){return this._ordinal.replace("%d",y)}var Fn={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function co(y,j,W,q){var ee=this._relativeTime[W];return de(ee)?ee(y,j,W,q):ee.replace(/%d/i,y)}function po(y,j){var W=this._relativeTime[y>0?"future":"past"];return de(W)?W(j):W.replace(/%s/i,j)}var qo={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function Mn(y){return typeof y=="string"?qo[y]||qo[y.toLowerCase()]:void 0}function fi(y){var j={},W,q;for(q in y)i(y,q)&&(W=Mn(q),W&&(j[W]=y[q]));return j}var Va={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function va(y){var j=[],W;for(W in y)i(y,W)&&j.push({unit:W,priority:Va[W]});return j.sort(function(q,ee){return q.priority-ee.priority}),j}var Qn=/\d/,tn=/\d\d/,Uo=/\d{3}/,h0=/\d{4}/,vc=/[+-]?\d{6}/,br=/\d\d?/,ya=/\d\d\d\d?/,If=/\d\d\d\d\d\d?/,_s=/\d{1,3}/,hu=/\d{1,4}/,jf=/[+-]?\d{1,6}/,gu=/\d+/,vu=/[+-]?\d+/,GA=/Z|[+-]\d\d:?\d\d/gi,g0=/Z|[+-]\d\d(?::?\d\d)?/gi,og=/[+-]?\d+(\.\d{1,3})?/,Ef=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,yc=/^[1-9]\d?/,yu=/^([1-9]\d|\d)/,qa;qa={};function mt(y,j,W){qa[y]=de(j)?j:function(q,ee){return q&&W?W:j}}function $o(y,j){return i(qa,y)?qa[y](j._strict,j._locale):new RegExp(Wn(y))}function Wn(y){return Jo(y.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(j,W,q,ee,fe){return W||q||ee||fe}))}function Jo(y){return y.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Mi(y){return y<0?Math.ceil(y)||0:Math.floor(y)}function Er(y){var j=+y,W=0;return j!==0&&isFinite(j)&&(W=Mi(j)),W}var bc={};function Jr(y,j){var W,q=j,ee;for(typeof y=="string"&&(y=[y]),d(j)&&(q=function(fe,De){De[j]=Er(fe)}),ee=y.length,W=0;W68?1900:2e3)};var ag=Ou("FullYear",!0);function lg(){return v0(this.year())}function Ou(y,j){return function(W){return W!=null?(sg(this,y,W),t.updateOffset(this,j),this):wc(this,y)}}function wc(y,j){if(!y.isValid())return NaN;var W=y._d,q=y._isUTC;switch(j){case"Milliseconds":return q?W.getUTCMilliseconds():W.getMilliseconds();case"Seconds":return q?W.getUTCSeconds():W.getSeconds();case"Minutes":return q?W.getUTCMinutes():W.getMinutes();case"Hours":return q?W.getUTCHours():W.getHours();case"Date":return q?W.getUTCDate():W.getDate();case"Day":return q?W.getUTCDay():W.getDay();case"Month":return q?W.getUTCMonth():W.getMonth();case"FullYear":return q?W.getUTCFullYear():W.getFullYear();default:return NaN}}function sg(y,j,W){var q,ee,fe,De,gt;if(!(!y.isValid()||isNaN(W))){switch(q=y._d,ee=y._isUTC,j){case"Milliseconds":return void(ee?q.setUTCMilliseconds(W):q.setMilliseconds(W));case"Seconds":return void(ee?q.setUTCSeconds(W):q.setSeconds(W));case"Minutes":return void(ee?q.setUTCMinutes(W):q.setMinutes(W));case"Hours":return void(ee?q.setUTCHours(W):q.setHours(W));case"Date":return void(ee?q.setUTCDate(W):q.setDate(W));case"FullYear":break;default:return}fe=W,De=y.month(),gt=y.date(),gt=gt===29&&De===1&&!v0(fe)?28:gt,ee?q.setUTCFullYear(fe,De,gt):q.setFullYear(fe,De,gt)}}function H8(y){return y=Mn(y),de(this[y])?this[y]():this}function V8(y,j){if(typeof y=="object"){y=fi(y);var W=va(y),q,ee=W.length;for(q=0;q=0?(gt=new Date(y+400,j,W,q,ee,fe,De),isFinite(gt.getFullYear())&>.setFullYear(y)):gt=new Date(y,j,W,q,ee,fe,De),gt}function zl(y){var j,W;return y<100&&y>=0?(W=Array.prototype.slice.call(arguments),W[0]=y+400,j=new Date(Date.UTC.apply(null,W)),isFinite(j.getUTCFullYear())&&j.setUTCFullYear(y)):j=new Date(Date.UTC.apply(null,arguments)),j}function w0(y,j,W){var q=7+j-W,ee=(7+zl(y,0,q).getUTCDay()-j)%7;return-ee+q-1}function mg(y,j,W,q,ee){var fe=(7+W-q)%7,De=w0(y,q,ee),gt=1+7*(j-1)+fe+De,Kt,Ar;return gt<=0?(Kt=y-1,Ar=wu(Kt)+gt):gt>wu(y)?(Kt=y+1,Ar=gt-wu(y)):(Kt=y,Ar=gt),{year:Kt,dayOfYear:Ar}}function _c(y,j,W){var q=w0(y.year(),j,W),ee=Math.floor((y.dayOfYear()-q-1)/7)+1,fe,De;return ee<1?(De=y.year()-1,fe=ee+wa(De,j,W)):ee>wa(y.year(),j,W)?(fe=ee-wa(y.year(),j,W),De=y.year()+1):(De=y.year(),fe=ee),{week:fe,year:De}}function wa(y,j,W){var q=w0(y,j,W),ee=w0(y+1,j,W);return(wu(y)-q+ee)/7}Ge("w",["ww",2],"wo","week"),Ge("W",["WW",2],"Wo","isoWeek"),mt("w",br,yc),mt("ww",br,tn),mt("W",br,yc),mt("WW",br,tn),Pf(["w","ww","W","WW"],function(y,j,W,q){j[q.substr(0,1)]=Er(y)});function hg(y){return _c(y,this._week.dow,this._week.doy).week}var O0={dow:0,doy:6};function gg(){return this._week.dow}function vg(){return this._week.doy}function $a(y){var j=this.localeData().week(this);return y==null?j:this.add((y-j)*7,"d")}function Sc(y){var j=_c(this,1,4).week;return y==null?j:this.add((y-j)*7,"d")}Ge("d",0,"do","day"),Ge("dd",0,0,function(y){return this.localeData().weekdaysMin(this,y)}),Ge("ddd",0,0,function(y){return this.localeData().weekdaysShort(this,y)}),Ge("dddd",0,0,function(y){return this.localeData().weekdays(this,y)}),Ge("e",0,0,"weekday"),Ge("E",0,0,"isoWeekday"),mt("d",br),mt("e",br),mt("E",br),mt("dd",function(y,j){return j.weekdaysMinRegex(y)}),mt("ddd",function(y,j){return j.weekdaysShortRegex(y)}),mt("dddd",function(y,j){return j.weekdaysRegex(y)}),Pf(["dd","ddd","dddd"],function(y,j,W,q){var ee=W._locale.weekdaysParse(y,q,W._strict);ee!=null?j.d=ee:k(W).invalidWeekday=y}),Pf(["d","e","E"],function(y,j,W,q){j[q]=Er(y)});function x0(y,j){return typeof y!="string"?y:isNaN(y)?(y=j.weekdaysParse(y),typeof y=="number"?y:null):parseInt(y,10)}function _0(y,j){return typeof y=="string"?j.weekdaysParse(y)%7||7:isNaN(y)?null:y}function S0(y,j){return y.slice(j,7).concat(y.slice(0,j))}var yg="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Cf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),bg="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),I0=Ef,eM=Ef,Go=Ef;function Af(y,j){var W=r(this._weekdays)?this._weekdays:this._weekdays[y&&y!==!0&&this._weekdays.isFormat.test(j)?"format":"standalone"];return y===!0?S0(W,this._week.dow):y?W[y.day()]:W}function wg(y){return y===!0?S0(this._weekdaysShort,this._week.dow):y?this._weekdaysShort[y.day()]:this._weekdaysShort}function j0(y){return y===!0?S0(this._weekdaysMin,this._week.dow):y?this._weekdaysMin[y.day()]:this._weekdaysMin}function Ic(y,j,W){var q,ee,fe,De=y.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],q=0;q<7;++q)fe=I([2e3,1]).day(q),this._minWeekdaysParse[q]=this.weekdaysMin(fe,"").toLocaleLowerCase(),this._shortWeekdaysParse[q]=this.weekdaysShort(fe,"").toLocaleLowerCase(),this._weekdaysParse[q]=this.weekdays(fe,"").toLocaleLowerCase();return W?j==="dddd"?(ee=Tn.call(this._weekdaysParse,De),ee!==-1?ee:null):j==="ddd"?(ee=Tn.call(this._shortWeekdaysParse,De),ee!==-1?ee:null):(ee=Tn.call(this._minWeekdaysParse,De),ee!==-1?ee:null):j==="dddd"?(ee=Tn.call(this._weekdaysParse,De),ee!==-1||(ee=Tn.call(this._shortWeekdaysParse,De),ee!==-1)?ee:(ee=Tn.call(this._minWeekdaysParse,De),ee!==-1?ee:null)):j==="ddd"?(ee=Tn.call(this._shortWeekdaysParse,De),ee!==-1||(ee=Tn.call(this._weekdaysParse,De),ee!==-1)?ee:(ee=Tn.call(this._minWeekdaysParse,De),ee!==-1?ee:null)):(ee=Tn.call(this._minWeekdaysParse,De),ee!==-1||(ee=Tn.call(this._weekdaysParse,De),ee!==-1)?ee:(ee=Tn.call(this._shortWeekdaysParse,De),ee!==-1?ee:null))}function G8(y,j,W){var q,ee,fe;if(this._weekdaysParseExact)return Ic.call(this,y,j,W);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),q=0;q<7;q++){if(ee=I([2e3,1]).day(q),W&&!this._fullWeekdaysParse[q]&&(this._fullWeekdaysParse[q]=new RegExp("^"+this.weekdays(ee,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[q]=new RegExp("^"+this.weekdaysShort(ee,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[q]=new RegExp("^"+this.weekdaysMin(ee,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[q]||(fe="^"+this.weekdays(ee,"")+"|^"+this.weekdaysShort(ee,"")+"|^"+this.weekdaysMin(ee,""),this._weekdaysParse[q]=new RegExp(fe.replace(".",""),"i")),W&&j==="dddd"&&this._fullWeekdaysParse[q].test(y))return q;if(W&&j==="ddd"&&this._shortWeekdaysParse[q].test(y))return q;if(W&&j==="dd"&&this._minWeekdaysParse[q].test(y))return q;if(!W&&this._weekdaysParse[q].test(y))return q}}function X8(y){if(!this.isValid())return y!=null?this:NaN;var j=wc(this,"Day");return y!=null?(y=x0(y,this.localeData()),this.add(y-j,"d")):j}function xu(y){if(!this.isValid())return y!=null?this:NaN;var j=(this.day()+7-this.localeData()._week.dow)%7;return y==null?j:this.add(y-j,"d")}function Ja(y){if(!this.isValid())return y!=null?this:NaN;if(y!=null){var j=_0(y,this.localeData());return this.day(this.day()%7?j:j-7)}else return this.day()||7}function K8(y){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Mf.call(this),y?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=I0),this._weekdaysStrictRegex&&y?this._weekdaysStrictRegex:this._weekdaysRegex)}function Y8(y){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Mf.call(this),y?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=eM),this._weekdaysShortStrictRegex&&y?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Q8(y){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Mf.call(this),y?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Go),this._weekdaysMinStrictRegex&&y?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Mf(){function y(So,Ya){return Ya.length-So.length}var j=[],W=[],q=[],ee=[],fe,De,gt,Kt,Ar;for(fe=0;fe<7;fe++)De=I([2e3,1]).day(fe),gt=Jo(this.weekdaysMin(De,"")),Kt=Jo(this.weekdaysShort(De,"")),Ar=Jo(this.weekdays(De,"")),j.push(gt),W.push(Kt),q.push(Ar),ee.push(gt),ee.push(Kt),ee.push(Ar);j.sort(y),W.sort(y),q.sort(y),ee.sort(y),this._weekdaysRegex=new RegExp("^("+ee.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+W.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+j.join("|")+")","i")}function jc(){return this.hours()%12||12}function Z8(){return this.hours()||24}Ge("H",["HH",2],0,"hour"),Ge("h",["hh",2],0,jc),Ge("k",["kk",2],0,Z8),Ge("hmm",0,0,function(){return""+jc.apply(this)+Be(this.minutes(),2)}),Ge("hmmss",0,0,function(){return""+jc.apply(this)+Be(this.minutes(),2)+Be(this.seconds(),2)}),Ge("Hmm",0,0,function(){return""+this.hours()+Be(this.minutes(),2)}),Ge("Hmmss",0,0,function(){return""+this.hours()+Be(this.minutes(),2)+Be(this.seconds(),2)});function Og(y,j){Ge(y,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),j)})}Og("a",!0),Og("A",!1);function xg(y,j){return j._meridiemParse}mt("a",xg),mt("A",xg),mt("H",br,yu),mt("h",br,yc),mt("k",br,yc),mt("HH",br,tn),mt("hh",br,tn),mt("kk",br,tn),mt("hmm",ya),mt("hmmss",If),mt("Hmm",ya),mt("Hmmss",If),Jr(["H","HH"],Zn),Jr(["k","kk"],function(y,j,W){var q=Er(y);j[Zn]=q===24?0:q}),Jr(["a","A"],function(y,j,W){W._isPm=W._locale.isPM(y),W._meridiem=y}),Jr(["h","hh"],function(y,j,W){j[Zn]=Er(y),k(W).bigHour=!0}),Jr("hmm",function(y,j,W){var q=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q)),k(W).bigHour=!0}),Jr("hmmss",function(y,j,W){var q=y.length-4,ee=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q,2)),j[Rl]=Er(y.substr(ee)),k(W).bigHour=!0}),Jr("Hmm",function(y,j,W){var q=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q))}),Jr("Hmmss",function(y,j,W){var q=y.length-4,ee=y.length-2;j[Zn]=Er(y.substr(0,q)),j[ba]=Er(y.substr(q,2)),j[Rl]=Er(y.substr(ee))});function e9(y){return(y+"").toLowerCase().charAt(0)==="p"}var t9=/[ap]\.?m?\.?/i,E0=Ou("Hours",!0);function r9(y,j,W){return y>11?W?"pm":"PM":W?"am":"AM"}var n9={calendar:He,longDateFormat:Mr,invalidDate:An,ordinal:Dt,dayOfMonthOrdinalParse:en,relativeTime:Fn,months:q8,monthsShort:cg,week:O0,weekdays:yg,weekdaysMin:bg,weekdaysShort:Cf,meridiemParse:t9},zr={},Tf={},_u;function o9(y,j){var W,q=Math.min(y.length,j.length);for(W=0;W0;){if(ee=Rf(fe.slice(0,W).join("-")),ee)return ee;if(q&&q.length>=W&&o9(fe,q)>=W-1)break;W--}j++}return _u}function a9(y){return!!(y&&y.match("^[^/\\\\]*$"))}function Rf(y){var j=null,W;if(zr[y]===void 0&&typeof J1<"u"&&J1&&J1.exports&&a9(y))try{j=_u._abbr,W=lne,W("./locale/"+y),Gi(j)}catch{zr[y]=null}return zr[y]}function Gi(y,j){var W;return y&&(c(j)?W=Xi(y):W=Hr(y,j),W?_u=W:typeof console<"u"&&console.warn&&console.warn("Locale "+y+" not found. Did you forget to load it?")),_u._abbr}function Hr(y,j){if(j!==null){var W,q=n9;if(j.abbr=y,zr[y]!=null)ve("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),q=zr[y]._config;else if(j.parentLocale!=null)if(zr[j.parentLocale]!=null)q=zr[j.parentLocale]._config;else if(W=Rf(j.parentLocale),W!=null)q=W._config;else return Tf[j.parentLocale]||(Tf[j.parentLocale]=[]),Tf[j.parentLocale].push({name:y,config:j}),null;return zr[y]=new be(ye(q,j)),Tf[y]&&Tf[y].forEach(function(ee){Hr(ee.name,ee.config)}),Gi(y),zr[y]}else return delete zr[y],null}function tM(y,j){if(j!=null){var W,q,ee=n9;zr[y]!=null&&zr[y].parentLocale!=null?zr[y].set(ye(zr[y]._config,j)):(q=Rf(y),q!=null&&(ee=q._config),j=ye(ee,j),q==null&&(j.abbr=y),W=new be(j),W.parentLocale=zr[y],zr[y]=W),Gi(y)}else zr[y]!=null&&(zr[y].parentLocale!=null?(zr[y]=zr[y].parentLocale,y===Gi()&&Gi(y)):zr[y]!=null&&delete zr[y]);return zr[y]}function Xi(y){var j;if(y&&y._locale&&y._locale._abbr&&(y=y._locale._abbr),!y)return _u;if(!r(y)){if(j=Rf(y),j)return j;y=[y]}return i9(y)}function l9(){return ze(zr)}function P0(y){var j,W=y._a;return W&&k(y).overflow===-2&&(j=W[di]<0||W[di]>11?di:W[Ua]<1||W[Ua]>y0(W[To],W[di])?Ua:W[Zn]<0||W[Zn]>24||W[Zn]===24&&(W[ba]!==0||W[Rl]!==0||W[bu]!==0)?Zn:W[ba]<0||W[ba]>59?ba:W[Rl]<0||W[Rl]>59?Rl:W[bu]<0||W[bu]>999?bu:-1,k(y)._overflowDayOfYear&&(jUa)&&(j=Ua),k(y)._overflowWeeks&&j===-1&&(j=XA),k(y)._overflowWeekday&&j===-1&&(j=ig),k(y).overflow=j),y}var s9=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ec=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,u9=/Z|[+-]\d\d(?::?\d\d)?/,zf=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Df=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Sg=/^\/?Date\((-?\d+)/i,c9=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,p9={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function f9(y){var j,W,q=y._i,ee=s9.exec(q)||Ec.exec(q),fe,De,gt,Kt,Ar=zf.length,So=Df.length;if(ee){for(k(y).iso=!0,j=0,W=Ar;jwu(De)||y._dayOfYear===0)&&(k(y)._overflowDayOfYear=!0),W=zl(De,0,y._dayOfYear),y._a[di]=W.getUTCMonth(),y._a[Ua]=W.getUTCDate()),j=0;j<3&&y._a[j]==null;++j)y._a[j]=q[j]=ee[j];for(;j<7;j++)y._a[j]=q[j]=y._a[j]==null?j===2?1:0:y._a[j];y._a[Zn]===24&&y._a[ba]===0&&y._a[Rl]===0&&y._a[bu]===0&&(y._nextDay=!0,y._a[Zn]=0),y._d=(y._useUTC?zl:ZA).apply(null,q),fe=y._useUTC?y._d.getUTCDay():y._d.getDay(),y._tzm!=null&&y._d.setUTCMinutes(y._d.getUTCMinutes()-y._tzm),y._nextDay&&(y._a[Zn]=24),y._w&&typeof y._w.d<"u"&&y._w.d!==fe&&(k(y).weekdayMismatch=!0)}}function aM(y){var j,W,q,ee,fe,De,gt,Kt,Ar;j=y._w,j.GG!=null||j.W!=null||j.E!=null?(fe=1,De=4,W=Dl(j.GG,y._a[To],_c(Vr(),1,4).year),q=Dl(j.W,1),ee=Dl(j.E,1),(ee<1||ee>7)&&(Kt=!0)):(fe=y._locale._week.dow,De=y._locale._week.doy,Ar=_c(Vr(),fe,De),W=Dl(j.gg,y._a[To],Ar.year),q=Dl(j.w,Ar.week),j.d!=null?(ee=j.d,(ee<0||ee>6)&&(Kt=!0)):j.e!=null?(ee=j.e+fe,(j.e<0||j.e>6)&&(Kt=!0)):ee=fe),q<1||q>wa(W,fe,De)?k(y)._overflowWeeks=!0:Kt!=null?k(y)._overflowWeekday=!0:(gt=mg(W,q,ee,fe,De),y._a[To]=gt.year,y._dayOfYear=gt.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function Ig(y){if(y._f===t.ISO_8601){f9(y);return}if(y._f===t.RFC_2822){h9(y);return}y._a=[],k(y).empty=!0;var j=""+y._i,W,q,ee,fe,De,gt=j.length,Kt=0,Ar,So;for(ee=Ct(y._f,y._locale).match(Ze)||[],So=ee.length,W=0;W0&&k(y).unusedInput.push(De),j=j.slice(j.indexOf(q)+q.length),Kt+=q.length),Ht[fe]?(q?k(y).empty=!1:k(y).unusedTokens.push(fe),B8(fe,q,y)):y._strict&&!q&&k(y).unusedTokens.push(fe);k(y).charsLeftOver=gt-Kt,j.length>0&&k(y).unusedInput.push(j),y._a[Zn]<=12&&k(y).bigHour===!0&&y._a[Zn]>0&&(k(y).bigHour=void 0),k(y).parsedDateParts=y._a.slice(0),k(y).meridiem=y._meridiem,y._a[Zn]=lM(y._locale,y._a[Zn],y._meridiem),Ar=k(y).era,Ar!==null&&(y._a[To]=y._locale.erasConvertYear(Ar,y._a[To])),Dr(y),P0(y)}function lM(y,j,W){var q;return W==null?j:y.meridiemHour!=null?y.meridiemHour(j,W):(y.isPM!=null&&(q=y.isPM(W),q&&j<12&&(j+=12),!q&&j===12&&(j=0)),j)}function sM(y){var j,W,q,ee,fe,De,gt=!1,Kt=y._f.length;if(Kt===0){k(y).invalidFormat=!0,y._d=new Date(NaN);return}for(ee=0;eethis?this:y:T()});function y9(y,j){var W,q;if(j.length===1&&r(j[0])&&(j=j[0]),!j.length)return Vr();for(W=j[0],q=1;qthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function kg(){if(!c(this._isDSTShifted))return this._isDSTShifted;var y={},j;return G(y,this),y=g9(y),y._a?(j=y._isUTC?I(y._a):Vr(y._a),this._isDSTShifted=this.isValid()&&dM(y._a,j.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function vM(){return this.isValid()?!this._isUTC:!1}function L0(){return this.isValid()?this._isUTC:!1}function _9(){return this.isValid()?this._isUTC&&this._offset===0:!1}var yM=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,bM=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Oa(y,j){var W=y,q=null,ee,fe,De;return R0(y)?W={ms:y._milliseconds,d:y._days,M:y._months}:d(y)||!isNaN(+y)?(W={},j?W[j]=+y:W.milliseconds=+y):(q=yM.exec(y))?(ee=q[1]==="-"?-1:1,W={y:0,d:Er(q[Ua])*ee,h:Er(q[Zn])*ee,m:Er(q[ba])*ee,s:Er(q[Rl])*ee,ms:Er(jg(q[bu]*1e3))*ee}):(q=bM.exec(y))?(ee=q[1]==="-"?-1:1,W={y:Iu(q[2],ee),M:Iu(q[3],ee),w:Iu(q[4],ee),d:Iu(q[5],ee),h:Iu(q[6],ee),m:Iu(q[7],ee),s:Iu(q[8],ee)}):W==null?W={}:typeof W=="object"&&("from"in W||"to"in W)&&(De=wM(Vr(W.from),Vr(W.to)),W={},W.ms=De.milliseconds,W.M=De.months),fe=new Su(W),R0(y)&&i(y,"_locale")&&(fe._locale=y._locale),R0(y)&&i(y,"_isValid")&&(fe._isValid=y._isValid),fe}Oa.fn=Su.prototype,Oa.invalid=T0;function Iu(y,j){var W=y&&parseFloat(y.replace(",","."));return(isNaN(W)?0:W)*j}function Cg(y,j){var W={};return W.months=j.month()-y.month()+(j.year()-y.year())*12,y.clone().add(W.months,"M").isAfter(j)&&--W.months,W.milliseconds=+j-+y.clone().add(W.months,"M"),W}function wM(y,j){var W;return y.isValid()&&j.isValid()?(j=Cc(j,y),y.isBefore(j)?W=Cg(y,j):(W=Cg(j,y),W.milliseconds=-W.milliseconds,W.months=-W.months),W):{milliseconds:0,months:0}}function S9(y,j){return function(W,q){var ee,fe;return q!==null&&!isNaN(+q)&&(ve(j,"moment()."+j+"(period, number) is deprecated. Please use moment()."+j+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),fe=W,W=q,q=fe),ee=Oa(W,q),N0(this,ee,y),this}}function N0(y,j,W,q){var ee=j._milliseconds,fe=jg(j._days),De=jg(j._months);y.isValid()&&(q=q??!0,De&&Oc(y,wc(y,"Month")+De*W),fe&&sg(y,"Date",wc(y,"Date")+fe*W),ee&&y._d.setTime(y._d.valueOf()+ee*W),q&&t.updateOffset(y,fe||De))}var OM=S9(1,"add"),F0=S9(-1,"subtract");function Ag(y){return typeof y=="string"||y instanceof String}function I9(y){return K(y)||g(y)||Ag(y)||d(y)||Ss(y)||xM(y)||y===null||y===void 0}function xM(y){var j=o(y)&&!u(y),W=!1,q=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],ee,fe,De=q.length;for(ee=0;eeW.valueOf():W.valueOf()9999?st(W,j?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):de(Date.prototype.toISOString)?j?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",st(W,"Z")):st(W,j?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function PM(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var y="moment",j="",W,q,ee,fe;return this.isLocal()||(y=this.utcOffset()===0?"moment.utc":"moment.parseZone",j="Z"),W="["+y+'("]',q=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",ee="-MM-DD[T]HH:mm:ss.SSS",fe=j+'[")]',this.format(W+q+ee+fe)}function C9(y){y||(y=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var j=st(this,y);return this.localeData().postformat(j)}function kM(y,j){return this.isValid()&&(K(y)&&y.isValid()||Vr(y).isValid())?Oa({to:this,from:y}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function CM(y){return this.from(Vr(),y)}function AM(y,j){return this.isValid()&&(K(y)&&y.isValid()||Vr(y).isValid())?Oa({from:this,to:y}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function MM(y){return this.to(Vr(),y)}function W0(y){var j;return y===void 0?this._locale._abbr:(j=Xi(y),j!=null&&(this._locale=j),this)}var A9=ne("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(y){return y===void 0?this.localeData():this.locale(y)});function M9(){return this._locale}var Lf=1e3,Ac=60*Lf,B0=60*Ac,T9=(365*400+97)*24*B0;function ju(y,j){return(y%j+j)%j}function Ro(y,j,W){return y<100&&y>=0?new Date(y+400,j,W)-T9:new Date(y,j,W).valueOf()}function Ti(y,j,W){return y<100&&y>=0?Date.UTC(y+400,j,W)-T9:Date.UTC(y,j,W)}function Is(y){var j,W;if(y=Mn(y),y===void 0||y==="millisecond"||!this.isValid())return this;switch(W=this._isUTC?Ti:Ro,y){case"year":j=W(this.year(),0,1);break;case"quarter":j=W(this.year(),this.month()-this.month()%3,1);break;case"month":j=W(this.year(),this.month(),1);break;case"week":j=W(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":j=W(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":j=W(this.year(),this.month(),this.date());break;case"hour":j=this._d.valueOf(),j-=ju(j+(this._isUTC?0:this.utcOffset()*Ac),B0);break;case"minute":j=this._d.valueOf(),j-=ju(j,Ac);break;case"second":j=this._d.valueOf(),j-=ju(j,Lf);break}return this._d.setTime(j),t.updateOffset(this,!0),this}function Ll(y){var j,W;if(y=Mn(y),y===void 0||y==="millisecond"||!this.isValid())return this;switch(W=this._isUTC?Ti:Ro,y){case"year":j=W(this.year()+1,0,1)-1;break;case"quarter":j=W(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":j=W(this.year(),this.month()+1,1)-1;break;case"week":j=W(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":j=W(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":j=W(this.year(),this.month(),this.date()+1)-1;break;case"hour":j=this._d.valueOf(),j+=B0-ju(j+(this._isUTC?0:this.utcOffset()*Ac),B0)-1;break;case"minute":j=this._d.valueOf(),j+=Ac-ju(j,Ac)-1;break;case"second":j=this._d.valueOf(),j+=Lf-ju(j,Lf)-1;break}return this._d.setTime(j),t.updateOffset(this,!0),this}function Eu(){return this._d.valueOf()-(this._offset||0)*6e4}function Mc(){return Math.floor(this.valueOf()/1e3)}function Tc(){return new Date(this.valueOf())}function TM(){var y=this;return[y.year(),y.month(),y.date(),y.hour(),y.minute(),y.second(),y.millisecond()]}function R9(){var y=this;return{years:y.year(),months:y.month(),date:y.date(),hours:y.hours(),minutes:y.minutes(),seconds:y.seconds(),milliseconds:y.milliseconds()}}function z9(){return this.isValid()?this.toISOString():null}function Rg(){return C(this)}function zg(){return S({},k(this))}function js(){return k(this).overflow}function Dg(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}Ge("N",0,0,"eraAbbr"),Ge("NN",0,0,"eraAbbr"),Ge("NNN",0,0,"eraAbbr"),Ge("NNNN",0,0,"eraName"),Ge("NNNNN",0,0,"eraNarrow"),Ge("y",["y",1],"yo","eraYear"),Ge("y",["yy",2],0,"eraYear"),Ge("y",["yyy",3],0,"eraYear"),Ge("y",["yyyy",4],0,"eraYear"),mt("N",Hg),mt("NN",Hg),mt("NNN",Hg),mt("NNNN",Vg),mt("NNNNN",V0),Jr(["N","NN","NNN","NNNN","NNNNN"],function(y,j,W,q){var ee=W._locale.erasParse(y,q,W._strict);ee?k(W).era=ee:k(W).invalidEra=y}),mt("y",gu),mt("yy",gu),mt("yyy",gu),mt("yyyy",gu),mt("yo",L9),Jr(["y","yy","yyy","yyyy"],To),Jr(["yo"],function(y,j,W,q){var ee;W._locale._eraYearOrdinalRegex&&(ee=y.match(W._locale._eraYearOrdinalRegex)),W._locale.eraYearOrdinalParse?j[To]=W._locale.eraYearOrdinalParse(y,ee):j[To]=parseInt(y,10)});function Lg(y,j){var W,q,ee,fe=this._eras||Xi("en")._eras;for(W=0,q=fe.length;W=0)return fe[q]}function Ng(y,j){var W=y.since<=y.until?1:-1;return j===void 0?t(y.since).year():t(y.since).year()+(j-y.offset)*W}function Xa(){var y,j,W,q=this.localeData().eras();for(y=0,j=q.length;yfe&&(j=fe),B9.call(this,y,j,W,q,ee))}function B9(y,j,W,q,ee){var fe=mg(y,j,W,q,ee),De=zl(fe.year,0,fe.dayOfYear);return this.year(De.getUTCFullYear()),this.month(De.getUTCMonth()),this.date(De.getUTCDate()),this}Ge("Q",0,"Qo","quarter"),mt("Q",Qn),Jr("Q",function(y,j){j[di]=(Er(y)-1)*3});function Nf(y){return y==null?Math.ceil((this.month()+1)/3):this.month((y-1)*3+this.month()%3)}Ge("D",["DD",2],"Do","date"),mt("D",br,yc),mt("DD",br,tn),mt("Do",function(y,j){return y?j._dayOfMonthOrdinalParse||j._ordinalParse:j._dayOfMonthOrdinalParseLenient}),Jr(["D","DD"],Ua),Jr("Do",function(y,j){j[Ua]=Er(y.match(br)[0])});var q0=Ou("Date",!0);Ge("DDD",["DDDD",3],"DDDo","dayOfYear"),mt("DDD",_s),mt("DDDD",Uo),Jr(["DDD","DDDD"],function(y,j,W){W._dayOfYear=Er(y)});function LM(y){var j=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return y==null?j:this.add(y-j,"d")}Ge("m",["mm",2],0,"minute"),mt("m",br,yu),mt("mm",br,tn),Jr(["m","mm"],ba);var NM=Ou("Minutes",!1);Ge("s",["ss",2],0,"second"),mt("s",br,yu),mt("ss",br,tn),Jr(["s","ss"],Rl);var H9=Ou("Seconds",!1);Ge("S",0,0,function(){return~~(this.millisecond()/100)}),Ge(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Ge(0,["SSS",3],0,"millisecond"),Ge(0,["SSSS",4],0,function(){return this.millisecond()*10}),Ge(0,["SSSSS",5],0,function(){return this.millisecond()*100}),Ge(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),Ge(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),Ge(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),Ge(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),mt("S",_s,Qn),mt("SS",_s,tn),mt("SSS",_s,Uo);var Nl,$g;for(Nl="SSSS";Nl.length<=9;Nl+="S")mt(Nl,gu);function yn(y,j){j[bu]=Er(("0."+y)*1e3)}for(Nl="S";Nl.length<=9;Nl+="S")Jr(Nl,yn);$g=Ou("Milliseconds",!1),Ge("z",0,0,"zoneAbbr"),Ge("zz",0,0,"zoneName");function FM(){return this._isUTC?"UTC":""}function Dc(){return this._isUTC?"Coordinated Universal Time":""}var et=Y.prototype;et.add=OM,et.calendar=E9,et.clone=P9,et.diff=DQ,et.endOf=Ll,et.format=C9,et.from=kM,et.fromNow=CM,et.to=AM,et.toNow=MM,et.get=H8,et.invalidAt=js,et.isAfter=_M,et.isBefore=SM,et.isBetween=IM,et.isSame=jM,et.isSameOrAfter=vn,et.isSameOrBefore=zQ,et.isValid=Rg,et.lang=A9,et.locale=W0,et.localeData=M9,et.max=cM,et.min=uM,et.parsingFlags=zg,et.set=V8,et.startOf=Is,et.subtract=F0,et.toArray=TM,et.toObject=R9,et.toDate=Tc,et.toISOString=k9,et.inspect=PM,typeof Symbol<"u"&&Symbol.for!=null&&(et[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),et.toJSON=z9,et.toString=EM,et.unix=Mc,et.valueOf=Eu,et.creationData=Dg,et.eraName=Xa,et.eraNarrow=zM,et.eraAbbr=Fg,et.eraYear=Wg,et.year=ag,et.isLeapYear=lg,et.weekYear=N9,et.isoWeekYear=Es,et.quarter=et.quarters=Nf,et.month=xc,et.daysInMonth=b0,et.week=et.weeks=$a,et.isoWeek=et.isoWeeks=Sc,et.weeksInYear=DM,et.weeksInWeekYear=F9,et.isoWeeksInYear=qg,et.isoWeeksInISOWeekYear=Ug,et.date=q0,et.day=et.days=X8,et.weekday=xu,et.isoWeekday=Ja,et.dayOfYear=LM,et.hour=et.hours=E0,et.minute=et.minutes=NM,et.second=et.seconds=H9,et.millisecond=et.milliseconds=$g,et.utcOffset=Pg,et.utc=mM,et.local=hM,et.parseZone=O9,et.hasAlignedHourOffset=gM,et.isDST=x9,et.isLocal=vM,et.isUtcOffset=L0,et.isUtc=_9,et.isUTC=_9,et.zoneAbbr=FM,et.zoneName=Dc,et.dates=ne("dates accessor is deprecated. Use date instead.",q0),et.months=ne("months accessor is deprecated. Use month instead",xc),et.years=ne("years accessor is deprecated. Use year instead",ag),et.zone=ne("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",w9),et.isDSTShifted=ne("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",kg);function Jg(y){return Vr(y*1e3)}function Ff(){return Vr.apply(null,arguments).parseZone()}function Lc(y){return y}var Lr=be.prototype;Lr.calendar=Qe,Lr.longDateFormat=Sr,Lr.invalidDate=jr,Lr.ordinal=Cr,Lr.preparse=Lc,Lr.postformat=Lc,Lr.relativeTime=co,Lr.pastFuture=po,Lr.set=ue,Lr.eras=Lg,Lr.erasParse=RM,Lr.erasConvertYear=Ng,Lr.erasAbbrRegex=Bg,Lr.erasNameRegex=H0,Lr.erasNarrowRegex=D9,Lr.months=$8,Lr.monthsShort=KA,Lr.monthsParse=J8,Lr.monthsRegex=QA,Lr.monthsShortRegex=YA,Lr.week=hg,Lr.firstDayOfYear=vg,Lr.firstDayOfWeek=gg,Lr.weekdays=Af,Lr.weekdaysMin=j0,Lr.weekdaysShort=wg,Lr.weekdaysParse=G8,Lr.weekdaysRegex=K8,Lr.weekdaysShortRegex=Y8,Lr.weekdaysMinRegex=Q8,Lr.isPM=e9,Lr.meridiem=r9;function zo(y,j,W,q){var ee=Xi(),fe=I().set(q,j);return ee[W](fe,y)}function V9(y,j,W){if(d(y)&&(j=y,y=void 0),y=y||"",j!=null)return zo(y,j,W,"month");var q,ee=[];for(q=0;q<12;q++)ee[q]=zo(y,q,W,"month");return ee}function q9(y,j,W,q){typeof y=="boolean"?(d(j)&&(W=j,j=void 0),j=j||""):(j=y,W=j,y=!1,d(j)&&(W=j,j=void 0),j=j||"");var ee=Xi(),fe=y?ee._week.dow:0,De,gt=[];if(W!=null)return zo(j,(W+fe)%7,q,"day");for(De=0;De<7;De++)gt[De]=zo(j,(De+fe)%7,q,"day");return gt}function LQ(y,j){return V9(y,j,"months")}function NQ(y,j){return V9(y,j,"monthsShort")}function FQ(y,j,W){return q9(y,j,W,"weekdays")}function WQ(y,j,W){return q9(y,j,W,"weekdaysShort")}function BQ(y,j,W){return q9(y,j,W,"weekdaysMin")}Gi("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(y){var j=y%10,W=Er(y%100/10)===1?"th":j===1?"st":j===2?"nd":j===3?"rd":"th";return y+W}}),t.lang=ne("moment.lang is deprecated. Use moment.locale instead.",Gi),t.langData=ne("moment.langData is deprecated. Use moment.localeData instead.",Xi);var Ka=Math.abs;function Wf(){var y=this._data;return this._milliseconds=Ka(this._milliseconds),this._days=Ka(this._days),this._months=Ka(this._months),y.milliseconds=Ka(y.milliseconds),y.seconds=Ka(y.seconds),y.minutes=Ka(y.minutes),y.hours=Ka(y.hours),y.months=Ka(y.months),y.years=Ka(y.years),this}function U9(y,j,W,q){var ee=Oa(j,W);return y._milliseconds+=q*ee._milliseconds,y._days+=q*ee._days,y._months+=q*ee._months,y._bubble()}function WM(y,j){return U9(this,y,j,1)}function BM(y,j){return U9(this,y,j,-1)}function Gg(y){return y<0?Math.floor(y):Math.ceil(y)}function $9(){var y=this._milliseconds,j=this._days,W=this._months,q=this._data,ee,fe,De,gt,Kt;return y>=0&&j>=0&&W>=0||y<=0&&j<=0&&W<=0||(y+=Gg(U0(W)+j)*864e5,j=0,W=0),q.milliseconds=y%1e3,ee=Mi(y/1e3),q.seconds=ee%60,fe=Mi(ee/60),q.minutes=fe%60,De=Mi(fe/60),q.hours=De%24,j+=Mi(De/24),Kt=Mi(_o(j)),W+=Kt,j-=Gg(U0(Kt)),gt=Mi(W/12),W%=12,q.days=j,q.months=W,q.years=gt,this}function _o(y){return y*4800/146097}function U0(y){return y*146097/4800}function Xg(y){if(!this.isValid())return NaN;var j,W,q=this._milliseconds;if(y=Mn(y),y==="month"||y==="quarter"||y==="year")switch(j=this._days+q/864e5,W=this._months+_o(j),y){case"month":return W;case"quarter":return W/3;case"year":return W/12}else switch(j=this._days+Math.round(U0(this._months)),y){case"week":return j/7+q/6048e5;case"day":return j+q/864e5;case"hour":return j*24+q/36e5;case"minute":return j*1440+q/6e4;case"second":return j*86400+q/1e3;case"millisecond":return Math.floor(j*864e5)+q;default:throw new Error("Unknown unit "+y)}}function Ki(y){return function(){return this.as(y)}}var J9=Ki("ms"),G9=Ki("s"),HM=Ki("m"),VM=Ki("h"),$0=Ki("d"),qM=Ki("w"),X9=Ki("M"),K9=Ki("Q"),Y9=Ki("y"),Q9=J9;function UM(){return Oa(this)}function Nc(y){return y=Mn(y),this.isValid()?this[y+"s"]():NaN}function Pu(y){return function(){return this.isValid()?this._data[y]:NaN}}var $M=Pu("milliseconds"),JM=Pu("seconds"),Z9=Pu("minutes"),GM=Pu("hours"),XM=Pu("days"),e_=Pu("months"),Ps=Pu("years");function Kg(){return Mi(this.days()/7)}var Fl=Math.round,Fc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function HQ(y,j,W,q,ee){return ee.relativeTime(j||1,!!W,y,q)}function KM(y,j,W,q){var ee=Oa(y).abs(),fe=Fl(ee.as("s")),De=Fl(ee.as("m")),gt=Fl(ee.as("h")),Kt=Fl(ee.as("d")),Ar=Fl(ee.as("M")),So=Fl(ee.as("w")),Ya=Fl(ee.as("y")),ks=fe<=W.ss&&["s",fe]||fe0,ks[4]=q,HQ.apply(null,ks)}function Vn(y){return y===void 0?Fl:typeof y=="function"?(Fl=y,!0):!1}function YM(y,j){return Fc[y]===void 0?!1:j===void 0?Fc[y]:(Fc[y]=j,y==="s"&&(Fc.ss=j-1),!0)}function QM(y,j){if(!this.isValid())return this.localeData().invalidDate();var W=!1,q=Fc,ee,fe;return typeof y=="object"&&(j=y,y=!1),typeof y=="boolean"&&(W=y),typeof j=="object"&&(q=Object.assign({},Fc,j),j.s!=null&&j.ss==null&&(q.ss=j.s-1)),ee=this.localeData(),fe=KM(this,!W,q,ee),W&&(fe=ee.pastFuture(+this,fe)),ee.postformat(fe)}var Bf=Math.abs;function Wc(y){return(y>0)-(y<0)||+y}function J0(){if(!this.isValid())return this.localeData().invalidDate();var y=Bf(this._milliseconds)/1e3,j=Bf(this._days),W=Bf(this._months),q,ee,fe,De,gt=this.asSeconds(),Kt,Ar,So,Ya;return gt?(q=Mi(y/60),ee=Mi(q/60),y%=60,q%=60,fe=Mi(W/12),W%=12,De=y?y.toFixed(3).replace(/\.?0+$/,""):"",Kt=gt<0?"-":"",Ar=Wc(this._months)!==Wc(gt)?"-":"",So=Wc(this._days)!==Wc(gt)?"-":"",Ya=Wc(this._milliseconds)!==Wc(gt)?"-":"",Kt+"P"+(fe?Ar+fe+"Y":"")+(W?Ar+W+"M":"")+(j?So+j+"D":"")+(ee||q||y?"T":"")+(ee?Ya+ee+"H":"")+(q?Ya+q+"M":"")+(y?Ya+De+"S":"")):"P0D"}var Tr=Su.prototype;Tr.isValid=fM,Tr.abs=Wf,Tr.add=WM,Tr.subtract=BM,Tr.as=Xg,Tr.asMilliseconds=J9,Tr.asSeconds=G9,Tr.asMinutes=HM,Tr.asHours=VM,Tr.asDays=$0,Tr.asWeeks=qM,Tr.asMonths=X9,Tr.asQuarters=K9,Tr.asYears=Y9,Tr.valueOf=Q9,Tr._bubble=$9,Tr.clone=UM,Tr.get=Nc,Tr.milliseconds=$M,Tr.seconds=JM,Tr.minutes=Z9,Tr.hours=GM,Tr.days=XM,Tr.weeks=Kg,Tr.months=e_,Tr.years=Ps,Tr.humanize=QM,Tr.toISOString=J0,Tr.toString=J0,Tr.toJSON=J0,Tr.locale=W0,Tr.localeData=M9,Tr.toIsoString=ne("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",J0),Tr.lang=A9,Ge("X",0,0,"unix"),Ge("x",0,0,"valueOf"),mt("x",vu),mt("X",og),Jr("X",function(y,j,W){W._d=new Date(parseFloat(y)*1e3)}),Jr("x",function(y,j,W){W._d=new Date(Er(y))});return t.version="2.30.1",n(Vr),t.fn=et,t.min=pM,t.max=A0,t.now=M0,t.utc=I,t.unix=Jg,t.months=LQ,t.isDate=g,t.locale=Gi,t.invalid=T,t.duration=Oa,t.isMoment=K,t.weekdays=FQ,t.parseZone=Ff,t.localeData=Xi,t.isDuration=R0,t.monthsShort=NQ,t.weekdaysMin=BQ,t.defineLocale=Hr,t.updateLocale=tM,t.locales=l9,t.weekdaysShort=WQ,t.normalizeUnits=Mn,t.relativeTimeRounding=Vn,t.relativeTimeThreshold=YM,t.calendarFormat=j9,t.prototype=et,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var yde=_e((ZYt,vde)=>{var UDe=Ys(),$De=as(),JDe=Sl(),GDe="[object String]";function XDe(e){return typeof e=="string"||!$De(e)&&JDe(e)&&UDe(e)==GDe}vde.exports=XDe});var wde=_e((eQt,bde)=>{var KDe=Ys(),YDe=Sl(),QDe="[object Boolean]";function ZDe(e){return e===!0||e===!1||YDe(e)&&KDe(e)==QDe}bde.exports=ZDe});var oW=_e((tQt,Ode)=>{var eLe=Ys(),tLe=Sl(),rLe="[object Number]";function nLe(e){return typeof e=="number"||tLe(e)&&eLe(e)==rLe}Ode.exports=nLe});var _de=_e((rQt,xde)=>{var oLe=oW();function iLe(e){return oLe(e)&&e!=+e}xde.exports=iLe});var zde=_e((Rde,HE)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof HE=="object"&&HE.exports?HE.exports=t():e.numeral=t()})(Rde,function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},u={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function c(d,g){this._input=d,this._value=g}return e=function(d){var g,O,S,I;if(e.isNumeral(d))g=d.value();else if(d===0||typeof d>"u")g=0;else if(d===null||t.isNaN(d))g=null;else if(typeof d=="string")if(u.zeroFormat&&d===u.zeroFormat)g=0;else if(u.nullFormat&&d===u.nullFormat||!d.replace(/[^0-9]+/g,"").length)g=null;else{for(O in r)if(I=typeof r[O].regexps.unformat=="function"?r[O].regexps.unformat():r[O].regexps.unformat,I&&d.match(I)){S=r[O].unformat;break}S=S||e._.stringToNumber,g=S(d)}else g=Number(d)||null;return new c(d,g)},e.version=n,e.isNumeral=function(d){return d instanceof c},e._=t={numberToFormat:function(d,g,O){var S=o[e.options.currentLocale],I=!1,R=!1,k=0,M="",C=1e12,T=1e9,D=1e6,U=1e3,G="",Y=!1,K,B,ne,pe,ve,de,ue,ye,be,ze;if(d=d||0,B=Math.abs(d),e._.includes(g,"(")?(I=!0,g=g.replace(/[\(|\)]/g,"")):(e._.includes(g,"+")||e._.includes(g,"-"))&&(ye=e._.includes(g,"+")?g.indexOf("+"):d<0?g.indexOf("-"):-1,g=g.replace(/[\+|\-]/g,"")),e._.includes(g,"a")&&(K=g.match(/a(k|m|b|t)?/),K=K?K[1]:!1,e._.includes(g," a")&&(M=" "),g=g.replace(new RegExp(M+"a[kmbt]?"),""),B>=C&&!K||K==="t"?(M+=S.abbreviations.trillion,d=d/C):B=T&&!K||K==="b"?(M+=S.abbreviations.billion,d=d/T):B=D&&!K||K==="m"?(M+=S.abbreviations.million,d=d/D):(B=U&&!K||K==="k")&&(M+=S.abbreviations.thousand,d=d/U)),e._.includes(g,"[.]")&&(R=!0,g=g.replace("[.]",".")),de=d.toString().split(".")[0],ue=g.split(".")[1],be=g.indexOf(","),k=(g.split(".")[0].split(",")[0].match(/0/g)||[]).length,ue?(e._.includes(ue,"[")?(ue=ue.replace("]",""),ue=ue.split("["),G=e._.toFixed(d,ue[0].length+ue[1].length,O,ue[1].length)):G=e._.toFixed(d,ue.length,O),de=G.split(".")[0],e._.includes(G,".")?G=S.delimiters.decimal+G.split(".")[1]:G="",R&&Number(G.slice(1))===0&&(G="")):de=e._.toFixed(d,0,O),M&&!K&&Number(de)>=1e3&&M!==S.abbreviations.trillion)switch(de=String(Number(de)/1e3),M){case S.abbreviations.thousand:M=S.abbreviations.million;break;case S.abbreviations.million:M=S.abbreviations.billion;break;case S.abbreviations.billion:M=S.abbreviations.trillion;break}if(e._.includes(de,"-")&&(de=de.slice(1),Y=!0),de.length0;He--)de="0"+de;return be>-1&&(de=de.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+S.delimiters.thousands)),g.indexOf(".")===0&&(de=""),ze=de+G+(M||""),I?ze=(I&&Y?"(":"")+ze+(I&&Y?")":""):ye>=0?ze=ye===0?(Y?"-":"+")+ze:ze+(Y?"-":"+"):Y&&(ze="-"+ze),ze},stringToNumber:function(d){var g=o[u.currentLocale],O=d,S={thousand:3,million:6,billion:9,trillion:12},I,R,k,M;if(u.zeroFormat&&d===u.zeroFormat)R=0;else if(u.nullFormat&&d===u.nullFormat||!d.replace(/[^0-9]+/g,"").length)R=null;else{R=1,g.delimiters.decimal!=="."&&(d=d.replace(/\./g,"").replace(g.delimiters.decimal,"."));for(I in S)if(M=new RegExp("[^a-zA-Z]"+g.abbreviations[I]+"(?:\\)|(\\"+g.currency.symbol+")?(?:\\))?)?$"),O.match(M)){R*=Math.pow(10,S[I]);break}R*=(d.split("-").length+Math.min(d.split("(").length-1,d.split(")").length-1))%2?1:-1,d=d.replace(/[^0-9\.]+/g,""),R*=Number(d)}return R},isNaN:function(d){return typeof d=="number"&&isNaN(d)},includes:function(d,g){return d.indexOf(g)!==-1},insert:function(d,g,O){return d.slice(0,O)+g+d.slice(O)},reduce:function(d,g){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof g!="function")throw new TypeError(g+" is not a function");var O=Object(d),S=O.length>>>0,I=0,R;if(arguments.length===3)R=arguments[2];else{for(;I=S)throw new TypeError("Reduce of empty array with no initial value");R=O[I++]}for(;IS?g:S},1)},toFixed:function(d,g,O,S){var I=d.toString().split("."),R=g-(S||0),k,M,C,T;return I.length===2?k=Math.min(Math.max(I[1].length,R),g):k=R,C=Math.pow(10,k),T=(O(d+"e+"+k)/C).toFixed(k),S>g-k&&(M=new RegExp("\\.?0{1,"+(S-(g-k))+"}$"),T=T.replace(M,"")),T}},e.options=u,e.formats=r,e.locales=o,e.locale=function(d){return d&&(u.currentLocale=d.toLowerCase()),u.currentLocale},e.localeData=function(d){if(!d)return o[u.currentLocale];if(d=d.toLowerCase(),!o[d])throw new Error("Unknown locale : "+d);return o[d]},e.reset=function(){for(var d in i)u[d]=i[d]},e.zeroFormat=function(d){u.zeroFormat=typeof d=="string"?d:null},e.nullFormat=function(d){u.nullFormat=typeof d=="string"?d:null},e.defaultFormat=function(d){u.defaultFormat=typeof d=="string"?d:"0.0"},e.register=function(d,g,O){if(g=g.toLowerCase(),this[d+"s"][g])throw new TypeError(g+" "+d+" already registered.");return this[d+"s"][g]=O,O},e.validate=function(d,g){var O,S,I,R,k,M,C,T;if(typeof d!="string"&&(d+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",d)),d=d.trim(),d.match(/^\d+$/))return!0;if(d==="")return!1;try{C=e.localeData(g)}catch{C=e.localeData(e.locale())}return I=C.currency.symbol,k=C.abbreviations,O=C.delimiters.decimal,C.delimiters.thousands==="."?S="\\.":S=C.delimiters.thousands,T=d.match(/^[^\d]+/),T!==null&&(d=d.substr(1),T[0]!==I)||(T=d.match(/[^\d]+$/),T!==null&&(d=d.slice(0,-1),T[0]!==k.thousand&&T[0]!==k.million&&T[0]!==k.billion&&T[0]!==k.trillion))?!1:(M=new RegExp(S+"{2}"),d.match(/[^\d.,]/g)?!1:(R=d.split(O),R.length>2?!1:R.length<2?!!R[0].match(/^\d+.*\d$/)&&!R[0].match(M):R[0].length===1?!!R[0].match(/^\d+$/)&&!R[0].match(M)&&!!R[1].match(/^\d+$/):!!R[0].match(/^\d+.*\d$/)&&!R[0].match(M)&&!!R[1].match(/^\d+$/)))},e.fn=c.prototype={clone:function(){return e(this)},format:function(d,g){var O=this._value,S=d||u.defaultFormat,I,R,k;if(g=g||Math.round,O===0&&u.zeroFormat!==null)R=u.zeroFormat;else if(O===null&&u.nullFormat!==null)R=u.nullFormat;else{for(I in r)if(S.match(r[I].regexps.format)){k=r[I].format;break}k=k||e._.numberToFormat,R=k(O,S,g)}return R},value:function(){return this._value},input:function(){return this._input},set:function(d){return this._value=Number(d),this},add:function(d){var g=t.correctionFactor.call(null,this._value,d);function O(S,I,R,k){return S+Math.round(g*I)}return this._value=t.reduce([this._value,d],O,0)/g,this},subtract:function(d){var g=t.correctionFactor.call(null,this._value,d);function O(S,I,R,k){return S-Math.round(g*I)}return this._value=t.reduce([d],O,Math.round(this._value*g))/g,this},multiply:function(d){function g(O,S,I,R){var k=t.correctionFactor(O,S);return Math.round(O*k)*Math.round(S*k)/Math.round(k*k)}return this._value=t.reduce([this._value,d],g,1),this},divide:function(d){function g(O,S,I,R){var k=t.correctionFactor(O,S);return Math.round(O*k)/Math.round(S*k)}return this._value=t.reduce([this._value,d],g),this},difference:function(d){return Math.abs(e(this._value).subtract(d).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(d){var g=d%10;return~~(d%100/10)===1?"th":g===1?"st":g===2?"nd":g===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(d,g,O){var S=e._.includes(g," BPS")?" ":"",I;return d=d*1e4,g=g.replace(/\s?BPS/,""),I=e._.numberToFormat(d,g,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"BPS"),I=I.join("")):I=I+S+"BPS",I},unformat:function(d){return+(e._.stringToNumber(d)*1e-4).toFixed(15)}})}(),function(){var d={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},g={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},O=d.suffixes.concat(g.suffixes.filter(function(I){return d.suffixes.indexOf(I)<0})),S=O.join("|");S="("+S.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(S)},format:function(I,R,k){var M,C=e._.includes(R,"ib")?g:d,T=e._.includes(R," b")||e._.includes(R," ib")?" ":"",D,U,G;for(R=R.replace(/\s?i?b/,""),D=0;D<=C.suffixes.length;D++)if(U=Math.pow(C.base,D),G=Math.pow(C.base,D+1),I===null||I===0||I>=U&&I0&&(I=I/U);break}return M=e._.numberToFormat(I,R,k),M+T},unformat:function(I){var R=e._.stringToNumber(I),k,M;if(R){for(k=d.suffixes.length-1;k>=0;k--){if(e._.includes(I,d.suffixes[k])){M=Math.pow(d.base,k);break}if(e._.includes(I,g.suffixes[k])){M=Math.pow(g.base,k);break}}R*=M||1}return R}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(d,g,O){var S=e.locales[e.options.currentLocale],I={before:g.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:g.match(/([\+|\-|\)|\s|\$]*)$/)[0]},R,k,M;for(g=g.replace(/\s?\$\s?/,""),R=e._.numberToFormat(d,g,O),d>=0?(I.before=I.before.replace(/[\-\(]/,""),I.after=I.after.replace(/[\-\)]/,"")):d<0&&!e._.includes(I.before,"-")&&!e._.includes(I.before,"(")&&(I.before="-"+I.before),M=0;M=0;M--)switch(k=I.after[M],k){case"$":R=M===I.after.length-1?R+S.currency.symbol:e._.insert(R,S.currency.symbol,-(I.after.length-(1+M)));break;case" ":R=M===I.after.length-1?R+" ":e._.insert(R," ",-(I.after.length-(1+M)+S.currency.symbol.length-1));break}return R}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(d,g,O){var S,I=typeof d=="number"&&!e._.isNaN(d)?d.toExponential():"0e+0",R=I.split("e");return g=g.replace(/e[\+|\-]{1}0/,""),S=e._.numberToFormat(Number(R[0]),g,O),S+"e"+R[1]},unformat:function(d){var g=e._.includes(d,"e+")?d.split("e+"):d.split("e-"),O=Number(g[0]),S=Number(g[1]);S=e._.includes(d,"e-")?S*=-1:S;function I(R,k,M,C){var T=e._.correctionFactor(R,k),D=R*T*(k*T)/(T*T);return D}return e._.reduce([O,Math.pow(10,S)],I,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(d,g,O){var S=e.locales[e.options.currentLocale],I,R=e._.includes(g," o")?" ":"";return g=g.replace(/\s?o/,""),R+=S.ordinal(d),I=e._.numberToFormat(d,g,O),I+R}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(d,g,O){var S=e._.includes(g," %")?" ":"",I;return e.options.scalePercentBy100&&(d=d*100),g=g.replace(/\s?\%/,""),I=e._.numberToFormat(d,g,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"%"),I=I.join("")):I=I+S+"%",I},unformat:function(d){var g=e._.stringToNumber(d);return e.options.scalePercentBy100?g*.01:g}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(d,g,O){var S=Math.floor(d/60/60),I=Math.floor((d-S*60*60)/60),R=Math.round(d-S*60*60-I*60);return S+":"+(I<10?"0"+I:I)+":"+(R<10?"0"+R:R)},unformat:function(d){var g=d.split(":"),O=0;return g.length===3?(O=O+Number(g[0])*60*60,O=O+Number(g[1])*60,O=O+Number(g[2])):g.length===2&&(O=O+Number(g[0])*60,O=O+Number(g[1])),Number(O)}})}(),e})});var Fde=_e((SQt,Nde)=>{var Lde=IE(),pLe="Expected a function";function aW(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(pLe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=e.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(aW.Cache||Lde),n}aW.Cache=Lde;Nde.exports=aW});var UE=_e((AQt,Vde)=>{var dLe=Ys(),mLe=Sl(),hLe="[object Symbol]";function gLe(e){return typeof e=="symbol"||mLe(e)&&dLe(e)==hLe}Vde.exports=gLe});var Ude=_e((MQt,qde)=>{var vLe=as(),yLe=UE(),bLe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,wLe=/^\w*$/;function OLe(e,t){if(vLe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||yLe(e)?!0:wLe.test(e)||!bLe.test(e)||t!=null&&e in Object(t)}qde.exports=OLe});var Jde=_e((TQt,$de)=>{var xLe=Fde(),_Le=500;function SLe(e){var t=xLe(e,function(r){return n.size===_Le&&n.clear(),r}),n=t.cache;return t}$de.exports=SLe});var Xde=_e((RQt,Gde)=>{var ILe=Jde(),jLe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ELe=/\\(\\)?/g,PLe=ILe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(jLe,function(n,r,o,i){t.push(o?i.replace(ELe,"$1"):r||n)}),t});Gde.exports=PLe});var sW=_e((zQt,Kde)=>{function kLe(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n{var Yde=Td(),CLe=sW(),ALe=as(),MLe=UE(),TLe=1/0,Qde=Yde?Yde.prototype:void 0,Zde=Qde?Qde.toString:void 0;function e0e(e){if(typeof e=="string")return e;if(ALe(e))return CLe(e,e0e)+"";if(MLe(e))return Zde?Zde.call(e):"";var t=e+"";return t=="0"&&1/e==-TLe?"-0":t}t0e.exports=e0e});var o0e=_e((LQt,n0e)=>{var RLe=r0e();function zLe(e){return e==null?"":RLe(e)}n0e.exports=zLe});var $E=_e((NQt,i0e)=>{var DLe=as(),LLe=Ude(),NLe=Xde(),FLe=o0e();function WLe(e,t){return DLe(e)?e:LLe(e,t)?[e]:NLe(FLe(e))}i0e.exports=WLe});var uW=_e((FQt,a0e)=>{var BLe=UE(),HLe=1/0;function VLe(e){if(typeof e=="string"||BLe(e))return e;var t=e+"";return t=="0"&&1/e==-HLe?"-0":t}a0e.exports=VLe});var cW=_e((WQt,l0e)=>{var qLe=$E(),ULe=uW();function $Le(e,t){t=qLe(t,e);for(var n=0,r=t.length;e!=null&&n{var JLe=cW();function GLe(e,t,n){var r=e==null?void 0:JLe(e,t);return r===void 0?n:r}s0e.exports=GLe});var p0e=_e((HQt,c0e)=>{function XLe(e,t){for(var n=-1,r=e==null?0:e.length;++n{var KLe=Gp(),YLe=function(){try{var e=KLe(Object,"defineProperty");return e({},"",{}),e}catch{}}();f0e.exports=YLe});var fW=_e((qQt,m0e)=>{var d0e=pW();function QLe(e,t,n){t=="__proto__"&&d0e?d0e(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}m0e.exports=QLe});var dW=_e((UQt,h0e)=>{var ZLe=fW(),eNe=xE(),tNe=Object.prototype,rNe=tNe.hasOwnProperty;function nNe(e,t,n){var r=e[t];(!(rNe.call(e,t)&&eNe(r,n))||n===void 0&&!(t in e))&&ZLe(e,t,n)}h0e.exports=nNe});var Q1=_e(($Qt,g0e)=>{var oNe=dW(),iNe=fW();function aNe(e,t,n,r){var o=!n;n||(n={});for(var i=-1,u=t.length;++i{var lNe=Q1(),sNe=TE();function uNe(e,t){return e&&lNe(t,sNe(t),e)}v0e.exports=uNe});var w0e=_e((GQt,b0e)=>{function cNe(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}b0e.exports=cNe});var x0e=_e((XQt,O0e)=>{var pNe=Rd(),fNe=ME(),dNe=w0e(),mNe=Object.prototype,hNe=mNe.hasOwnProperty;function gNe(e){if(!pNe(e))return dNe(e);var t=fNe(e),n=[];for(var r in e)r=="constructor"&&(t||!hNe.call(e,r))||n.push(r);return n}O0e.exports=gNe});var JE=_e((KQt,_0e)=>{var vNe=HF(),yNe=x0e(),bNe=qF();function wNe(e){return bNe(e)?vNe(e,!0):yNe(e)}_0e.exports=wNe});var I0e=_e((YQt,S0e)=>{var ONe=Q1(),xNe=JE();function _Ne(e,t){return e&&ONe(t,xNe(t),e)}S0e.exports=_Ne});var C0e=_e((X2,Z1)=>{var SNe=is(),k0e=typeof X2=="object"&&X2&&!X2.nodeType&&X2,j0e=k0e&&typeof Z1=="object"&&Z1&&!Z1.nodeType&&Z1,INe=j0e&&j0e.exports===k0e,E0e=INe?SNe.Buffer:void 0,P0e=E0e?E0e.allocUnsafe:void 0;function jNe(e,t){if(t)return e.slice();var n=e.length,r=P0e?P0e(n):new e.constructor(n);return e.copy(r),r}Z1.exports=jNe});var M0e=_e((QQt,A0e)=>{function ENe(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var PNe=Q1(),kNe=PE();function CNe(e,t){return PNe(e,kNe(e),t)}T0e.exports=CNe});var GE=_e((eZt,z0e)=>{var ANe=VF(),MNe=ANe(Object.getPrototypeOf,Object);z0e.exports=MNe});var mW=_e((tZt,D0e)=>{var TNe=EE(),RNe=GE(),zNe=PE(),DNe=LF(),LNe=Object.getOwnPropertySymbols,NNe=LNe?function(e){for(var t=[];e;)TNe(t,zNe(e)),e=RNe(e);return t}:DNe;D0e.exports=NNe});var N0e=_e((rZt,L0e)=>{var FNe=Q1(),WNe=mW();function BNe(e,t){return FNe(e,WNe(e),t)}L0e.exports=BNe});var hW=_e((nZt,F0e)=>{var HNe=DF(),VNe=mW(),qNe=JE();function UNe(e){return HNe(e,qNe,VNe)}F0e.exports=UNe});var B0e=_e((oZt,W0e)=>{var $Ne=Object.prototype,JNe=$Ne.hasOwnProperty;function GNe(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]=="string"&&JNe.call(e,"index")&&(n.index=e.index,n.input=e.input),n}W0e.exports=GNe});var XE=_e((iZt,V0e)=>{var H0e=RF();function XNe(e){var t=new e.constructor(e.byteLength);return new H0e(t).set(new H0e(e)),t}V0e.exports=XNe});var U0e=_e((aZt,q0e)=>{var KNe=XE();function YNe(e,t){var n=t?KNe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}q0e.exports=YNe});var J0e=_e((lZt,$0e)=>{var QNe=/\w*$/;function ZNe(e){var t=new e.constructor(e.source,QNe.exec(e));return t.lastIndex=e.lastIndex,t}$0e.exports=ZNe});var Q0e=_e((sZt,Y0e)=>{var G0e=Td(),X0e=G0e?G0e.prototype:void 0,K0e=X0e?X0e.valueOf:void 0;function eFe(e){return K0e?Object(K0e.call(e)):{}}Y0e.exports=eFe});var eme=_e((uZt,Z0e)=>{var tFe=XE();function rFe(e,t){var n=t?tFe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}Z0e.exports=rFe});var rme=_e((cZt,tme)=>{var nFe=XE(),oFe=U0e(),iFe=J0e(),aFe=Q0e(),lFe=eme(),sFe="[object Boolean]",uFe="[object Date]",cFe="[object Map]",pFe="[object Number]",fFe="[object RegExp]",dFe="[object Set]",mFe="[object String]",hFe="[object Symbol]",gFe="[object ArrayBuffer]",vFe="[object DataView]",yFe="[object Float32Array]",bFe="[object Float64Array]",wFe="[object Int8Array]",OFe="[object Int16Array]",xFe="[object Int32Array]",_Fe="[object Uint8Array]",SFe="[object Uint8ClampedArray]",IFe="[object Uint16Array]",jFe="[object Uint32Array]";function EFe(e,t,n){var r=e.constructor;switch(t){case gFe:return nFe(e);case sFe:case uFe:return new r(+e);case vFe:return oFe(e,n);case yFe:case bFe:case wFe:case OFe:case xFe:case _Fe:case SFe:case IFe:case jFe:return lFe(e,n);case cFe:return new r;case pFe:case mFe:return new r(e);case fFe:return iFe(e);case dFe:return new r;case hFe:return aFe(e)}}tme.exports=EFe});var ime=_e((pZt,ome)=>{var PFe=Rd(),nme=Object.create,kFe=function(){function e(){}return function(t){if(!PFe(t))return{};if(nme)return nme(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();ome.exports=kFe});var lme=_e((fZt,ame)=>{var CFe=ime(),AFe=GE(),MFe=ME();function TFe(e){return typeof e.constructor=="function"&&!MFe(e)?CFe(AFe(e)):{}}ame.exports=TFe});var ume=_e((dZt,sme)=>{var RFe=$2(),zFe=Sl(),DFe="[object Map]";function LFe(e){return zFe(e)&&RFe(e)==DFe}sme.exports=LFe});var dme=_e((mZt,fme)=>{var NFe=ume(),FFe=CE(),cme=AE(),pme=cme&&cme.isMap,WFe=pme?FFe(pme):NFe;fme.exports=WFe});var hme=_e((hZt,mme)=>{var BFe=$2(),HFe=Sl(),VFe="[object Set]";function qFe(e){return HFe(e)&&BFe(e)==VFe}mme.exports=qFe});var bme=_e((gZt,yme)=>{var UFe=hme(),$Fe=CE(),gme=AE(),vme=gme&&gme.isSet,JFe=vme?$Fe(vme):UFe;yme.exports=JFe});var Sme=_e((vZt,_me)=>{var GFe=MF(),XFe=p0e(),KFe=dW(),YFe=y0e(),QFe=I0e(),ZFe=C0e(),eWe=M0e(),tWe=R0e(),rWe=N0e(),nWe=UF(),oWe=hW(),iWe=$2(),aWe=B0e(),lWe=rme(),sWe=lme(),uWe=as(),cWe=kE(),pWe=dme(),fWe=Rd(),dWe=bme(),mWe=TE(),hWe=JE(),gWe=1,vWe=2,yWe=4,wme="[object Arguments]",bWe="[object Array]",wWe="[object Boolean]",OWe="[object Date]",xWe="[object Error]",Ome="[object Function]",_We="[object GeneratorFunction]",SWe="[object Map]",IWe="[object Number]",xme="[object Object]",jWe="[object RegExp]",EWe="[object Set]",PWe="[object String]",kWe="[object Symbol]",CWe="[object WeakMap]",AWe="[object ArrayBuffer]",MWe="[object DataView]",TWe="[object Float32Array]",RWe="[object Float64Array]",zWe="[object Int8Array]",DWe="[object Int16Array]",LWe="[object Int32Array]",NWe="[object Uint8Array]",FWe="[object Uint8ClampedArray]",WWe="[object Uint16Array]",BWe="[object Uint32Array]",xn={};xn[wme]=xn[bWe]=xn[AWe]=xn[MWe]=xn[wWe]=xn[OWe]=xn[TWe]=xn[RWe]=xn[zWe]=xn[DWe]=xn[LWe]=xn[SWe]=xn[IWe]=xn[xme]=xn[jWe]=xn[EWe]=xn[PWe]=xn[kWe]=xn[NWe]=xn[FWe]=xn[WWe]=xn[BWe]=!0;xn[xWe]=xn[Ome]=xn[CWe]=!1;function KE(e,t,n,r,o,i){var u,c=t&gWe,d=t&vWe,g=t&yWe;if(n&&(u=o?n(e,r,o,i):n(e)),u!==void 0)return u;if(!fWe(e))return e;var O=uWe(e);if(O){if(u=aWe(e),!c)return eWe(e,u)}else{var S=iWe(e),I=S==Ome||S==_We;if(cWe(e))return ZFe(e,c);if(S==xme||S==wme||I&&!o){if(u=d||I?{}:sWe(e),!c)return d?rWe(e,QFe(u,e)):tWe(e,YFe(u,e))}else{if(!xn[S])return o?e:{};u=lWe(e,S,c)}}i||(i=new GFe);var R=i.get(e);if(R)return R;i.set(e,u),dWe(e)?e.forEach(function(C){u.add(KE(C,t,n,C,e,i))}):pWe(e)&&e.forEach(function(C,T){u.set(T,KE(C,t,n,T,e,i))});var k=g?d?oWe:nWe:d?hWe:mWe,M=O?void 0:k(e);return XFe(M||e,function(C,T){M&&(T=C,C=e[T]),KFe(u,T,KE(C,t,n,T,e,i))}),u}_me.exports=KE});var jme=_e((yZt,Ime)=>{function HWe(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}Ime.exports=HWe});var Pme=_e((bZt,Eme)=>{function VWe(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{var qWe=cW(),UWe=Pme();function $We(e,t){return t.length<2?e:qWe(e,UWe(t,0,-1))}kme.exports=$We});var Mme=_e((OZt,Ame)=>{var JWe=$E(),GWe=jme(),XWe=Cme(),KWe=uW();function YWe(e,t){return t=JWe(t,e),e=XWe(e,t),e==null||delete e[KWe(GWe(t))]}Ame.exports=YWe});var zme=_e((xZt,Rme)=>{var QWe=Ys(),ZWe=GE(),eBe=Sl(),tBe="[object Object]",rBe=Function.prototype,nBe=Object.prototype,Tme=rBe.toString,oBe=nBe.hasOwnProperty,iBe=Tme.call(Object);function aBe(e){if(!eBe(e)||QWe(e)!=tBe)return!1;var t=ZWe(e);if(t===null)return!0;var n=oBe.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Tme.call(n)==iBe}Rme.exports=aBe});var Lme=_e((_Zt,Dme)=>{var lBe=zme();function sBe(e){return lBe(e)?void 0:e}Dme.exports=sBe});var Bme=_e((SZt,Wme)=>{var Nme=Td(),uBe=NF(),cBe=as(),Fme=Nme?Nme.isConcatSpreadable:void 0;function pBe(e){return cBe(e)||uBe(e)||!!(Fme&&e&&e[Fme])}Wme.exports=pBe});var qme=_e((IZt,Vme)=>{var fBe=EE(),dBe=Bme();function Hme(e,t,n,r,o){var i=-1,u=e.length;for(n||(n=dBe),o||(o=[]);++i0&&n(c)?t>1?Hme(c,t-1,n,r,o):fBe(o,c):r||(o[o.length]=c)}return o}Vme.exports=Hme});var $me=_e((jZt,Ume)=>{var mBe=qme();function hBe(e){var t=e==null?0:e.length;return t?mBe(e,1):[]}Ume.exports=hBe});var Gme=_e((EZt,Jme)=>{function gBe(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}Jme.exports=gBe});var Yme=_e((PZt,Kme)=>{var vBe=Gme(),Xme=Math.max;function yBe(e,t,n){return t=Xme(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=Xme(r.length-t,0),u=Array(i);++o{function bBe(e){return function(){return e}}Qme.exports=bBe});var t1e=_e((CZt,e1e)=>{function wBe(e){return e}e1e.exports=wBe});var o1e=_e((AZt,n1e)=>{var OBe=Zme(),r1e=pW(),xBe=t1e(),_Be=r1e?function(e,t){return r1e(e,"toString",{configurable:!0,enumerable:!1,value:OBe(t),writable:!0})}:xBe;n1e.exports=_Be});var a1e=_e((MZt,i1e)=>{var SBe=800,IBe=16,jBe=Date.now;function EBe(e){var t=0,n=0;return function(){var r=jBe(),o=IBe-(r-n);if(n=r,o>0){if(++t>=SBe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}i1e.exports=EBe});var s1e=_e((TZt,l1e)=>{var PBe=o1e(),kBe=a1e(),CBe=kBe(PBe);l1e.exports=CBe});var c1e=_e((RZt,u1e)=>{var ABe=$me(),MBe=Yme(),TBe=s1e();function RBe(e){return TBe(MBe(e,void 0,ABe),e+"")}u1e.exports=RBe});var f1e=_e((zZt,p1e)=>{var zBe=sW(),DBe=Sme(),LBe=Mme(),NBe=$E(),FBe=Q1(),WBe=Lme(),BBe=c1e(),HBe=hW(),VBe=1,qBe=2,UBe=4,$Be=BBe(function(e,t){var n={};if(e==null)return n;var r=!1;t=zBe(t,function(i){return i=NBe(i,e),r||(r=i.length>1),i}),FBe(e,HBe(e),n),r&&(n=DBe(n,VBe|qBe|UBe,WBe));for(var o=t.length;o--;)LBe(n,t[o]);return n});p1e.exports=$Be});var q1e=_e(mn=>{"use strict";var sP=60103,uP=60106,Ix=60107,jx=60108,Ex=60114,Px=60109,kx=60110,Cx=60112,Ax=60113,$G=60120,Mx=60115,Tx=60116,F1e=60121,W1e=60122,B1e=60117,H1e=60129,V1e=60131;typeof Symbol=="function"&&Symbol.for&&(Wo=Symbol.for,sP=Wo("react.element"),uP=Wo("react.portal"),Ix=Wo("react.fragment"),jx=Wo("react.strict_mode"),Ex=Wo("react.profiler"),Px=Wo("react.provider"),kx=Wo("react.context"),Cx=Wo("react.forward_ref"),Ax=Wo("react.suspense"),$G=Wo("react.suspense_list"),Mx=Wo("react.memo"),Tx=Wo("react.lazy"),F1e=Wo("react.block"),W1e=Wo("react.server.block"),B1e=Wo("react.fundamental"),H1e=Wo("react.debug_trace_mode"),V1e=Wo("react.legacy_hidden"));var Wo;function ls(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case sP:switch(e=e.type,e){case Ix:case Ex:case jx:case Ax:case $G:return e;default:switch(e=e&&e.$$typeof,e){case kx:case Cx:case Tx:case Mx:case Px:return e;default:return t}}case uP:return t}}}var Ext=Px,Pxt=sP,kxt=Cx,Cxt=Ix,Axt=Tx,Mxt=Mx,Txt=uP,Rxt=Ex,zxt=jx,Dxt=Ax;mn.ContextConsumer=kx;mn.ContextProvider=Ext;mn.Element=Pxt;mn.ForwardRef=kxt;mn.Fragment=Cxt;mn.Lazy=Axt;mn.Memo=Mxt;mn.Portal=Txt;mn.Profiler=Rxt;mn.StrictMode=zxt;mn.Suspense=Dxt;mn.isAsyncMode=function(){return!1};mn.isConcurrentMode=function(){return!1};mn.isContextConsumer=function(e){return ls(e)===kx};mn.isContextProvider=function(e){return ls(e)===Px};mn.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===sP};mn.isForwardRef=function(e){return ls(e)===Cx};mn.isFragment=function(e){return ls(e)===Ix};mn.isLazy=function(e){return ls(e)===Tx};mn.isMemo=function(e){return ls(e)===Mx};mn.isPortal=function(e){return ls(e)===uP};mn.isProfiler=function(e){return ls(e)===Ex};mn.isStrictMode=function(e){return ls(e)===jx};mn.isSuspense=function(e){return ls(e)===Ax};mn.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===Ix||e===Ex||e===H1e||e===jx||e===Ax||e===$G||e===V1e||typeof e=="object"&&e!==null&&(e.$$typeof===Tx||e.$$typeof===Mx||e.$$typeof===Px||e.$$typeof===kx||e.$$typeof===Cx||e.$$typeof===B1e||e.$$typeof===F1e||e[0]===W1e)};mn.typeOf=ls});var $1e=_e((Igr,U1e)=>{"use strict";U1e.exports=q1e()});var ihe=_e((nvr,ohe)=>{"use strict";ohe.exports=function(t,n){if(n=n.split(":")[0],t=+t,!t)return!1;switch(n){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var she=_e(XG=>{"use strict";var e8t=Object.prototype.hasOwnProperty,t8t;function ahe(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function lhe(e){try{return encodeURIComponent(e)}catch{return null}}function r8t(e){for(var t=/([^=?#&]+)=?([^&]*)/g,n={},r;r=t.exec(e);){var o=ahe(r[1]),i=ahe(r[2]);o===null||i===null||o in n||(n[o]=i)}return n}function n8t(e,t){t=t||"";var n=[],r,o;typeof t!="string"&&(t="?");for(o in e)if(e8t.call(e,o)){if(r=e[o],!r&&(r===null||r===t8t||isNaN(r))&&(r=""),o=lhe(o),r=lhe(r),o===null||r===null)continue;n.push(o+"="+r)}return n.length?t+n.join("&"):""}XG.stringify=n8t;XG.parse=r8t});var ghe=_e((ivr,hhe)=>{"use strict";var che=ihe(),fP=she(),o8t=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,phe=/[\n\r\t]/g,i8t=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,fhe=/:\d+$/,a8t=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,l8t=/^[a-zA-Z]:/;function YG(e){return(e||"").toString().replace(o8t,"")}var KG=[["#","hash"],["?","query"],function(t,n){return Zs(n.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],uhe={hash:1,query:1};function dhe(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var n=t.location||{};e=e||n;var r={},o=typeof e,i;if(e.protocol==="blob:")r=new eu(unescape(e.pathname),{});else if(o==="string"){r=new eu(e,{});for(i in uhe)delete r[i]}else if(o==="object"){for(i in e)i in uhe||(r[i]=e[i]);r.slashes===void 0&&(r.slashes=i8t.test(e.href))}return r}function Zs(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function mhe(e,t){e=YG(e),e=e.replace(phe,""),t=t||{};var n=a8t.exec(e),r=n[1]?n[1].toLowerCase():"",o=!!n[2],i=!!n[3],u=0,c;return o?i?(c=n[2]+n[3]+n[4],u=n[2].length+n[3].length):(c=n[2]+n[4],u=n[2].length):i?(c=n[3]+n[4],u=n[3].length):c=n[4],r==="file:"?u>=2&&(c=c.slice(2)):Zs(r)?c=n[4]:r?o&&(c=c.slice(2)):u>=2&&Zs(t.protocol)&&(c=n[4]),{protocol:r,slashes:o||Zs(r),slashesCount:u,rest:c}}function s8t(e,t){if(e==="")return t;for(var n=(t||"/").split("/").slice(0,-1).concat(e.split("/")),r=n.length,o=n[r-1],i=!1,u=0;r--;)n[r]==="."?n.splice(r,1):n[r]===".."?(n.splice(r,1),u++):u&&(r===0&&(i=!0),n.splice(r,1),u--);return i&&n.unshift(""),(o==="."||o==="..")&&n.push(""),n.join("/")}function eu(e,t,n){if(e=YG(e),e=e.replace(phe,""),!(this instanceof eu))return new eu(e,t,n);var r,o,i,u,c,d,g=KG.slice(),O=typeof t,S=this,I=0;for(O!=="object"&&O!=="string"&&(n=t,t=null),n&&typeof n!="function"&&(n=fP.parse),t=dhe(t),o=mhe(e||"",t),r=!o.protocol&&!o.slashes,S.slashes=o.slashes||r&&t.slashes,S.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||l8t.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!Zs(S.protocol)))&&(g[3]=[/(.*)/,"pathname"]);I{"use strict";Object.defineProperty(fY,"__esModule",{value:!0});var cY=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function qPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function UPt(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t&&(typeof t=="object"||typeof t=="function")?t:e}function $Pt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var O2e={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},JPt=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],GPt=function(t){return JPt.forEach(function(n){return delete t[n]}),t},x2e=function(t,n){n.style.fontSize=t.fontSize,n.style.fontFamily=t.fontFamily,n.style.fontWeight=t.fontWeight,n.style.fontStyle=t.fontStyle,n.style.letterSpacing=t.letterSpacing,n.style.textTransform=t.textTransform},j2e=typeof window<"u"&&window.navigator?/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent):!1,_2e=function(){return j2e?"_"+Math.random().toString(36).substr(2,12):void 0},pY=function(e){$Pt(t,e),w2e(t,null,[{key:"getDerivedStateFromProps",value:function(r,o){var i=r.id;return i!==o.prevId?{inputId:i||_2e(),prevId:i}:null}}]);function t(n){qPt(this,t);var r=UPt(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,n));return r.inputRef=function(o){r.input=o,typeof r.props.inputRef=="function"&&r.props.inputRef(o)},r.placeHolderSizerRef=function(o){r.placeHolderSizer=o},r.sizerRef=function(o){r.sizer=o},r.state={inputWidth:n.minWidth,inputId:n.id||_2e(),prevId:n.id},r}return w2e(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentDidUpdate",value:function(r,o){o.inputWidth!==this.state.inputWidth&&typeof this.props.onAutosize=="function"&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(!(!this.mounted||!window.getComputedStyle)){var r=this.input&&window.getComputedStyle(this.input);r&&(x2e(r,this.sizer),this.placeHolderSizer&&x2e(r,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(!(!this.mounted||!this.sizer||typeof this.sizer.scrollWidth>"u")){var r=void 0;this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?r=Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:r=this.sizer.scrollWidth+2;var o=this.props.type==="number"&&this.props.extraWidth===void 0?16:parseInt(this.props.extraWidth)||0;r+=o,rt=>{let n=VIe.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Yl=e=>(e=e.toLowerCase(),t=>JI(t)===e),GI=e=>t=>typeof t===e,{isArray:l1}=Array,Zy=GI("undefined");function qIe(e){return e!==null&&!Zy(e)&&e.constructor!==null&&!Zy(e.constructor)&&Aa(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Iae=Yl("ArrayBuffer");function UIe(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Iae(e.buffer),t}var $Ie=GI("string"),Aa=GI("function"),jae=GI("number"),XI=e=>e!==null&&typeof e=="object",JIe=e=>e===!0||e===!1,$I=e=>{if(JI(e)!=="object")return!1;let t=XL(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},GIe=Yl("Date"),XIe=Yl("File"),KIe=Yl("Blob"),YIe=Yl("FileList"),QIe=e=>XI(e)&&Aa(e.pipe),ZIe=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Aa(e.append)&&((t=JI(e))==="formdata"||t==="object"&&Aa(e.toString)&&e.toString()==="[object FormData]"))},eje=Yl("URLSearchParams"),[tje,rje,nje,oje]=["ReadableStream","Request","Response","Headers"].map(Yl),ije=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function e2(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),l1(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}var xd=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),Pae=e=>!Zy(e)&&e!==xd;function GL(){let{caseless:e}=Pae(this)&&this||{},t={},n=(r,o)=>{let i=e&&Eae(t,o)||o;$I(t[i])&&$I(r)?t[i]=GL(t[i],r):$I(r)?t[i]=GL({},r):l1(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(e2(t,(o,i)=>{n&&Aa(o)?e[i]=Qy(o,n):e[i]=o},{allOwnKeys:r}),e),lje=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),sje=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},uje=(e,t,n,r)=>{let o,i,u,c={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)u=o[i],(!r||r(u,e,t))&&!c[u]&&(t[u]=e[u],c[u]=!0);e=n!==!1&&XL(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},cje=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},pje=e=>{if(!e)return null;if(l1(e))return e;let t=e.length;if(!jae(t))return null;let n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},fje=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&XL(Uint8Array)),dje=(e,t)=>{let r=(e&&e[Symbol.iterator]).call(e),o;for(;(o=r.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},mje=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},hje=Yl("HTMLFormElement"),gje=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),_ae=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),vje=Yl("RegExp"),kae=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};e2(n,(o,i)=>{let u;(u=t(o,i,e))!==!1&&(r[i]=u||o)}),Object.defineProperties(e,r)},yje=e=>{kae(e,(t,n)=>{if(Aa(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;let r=e[n];if(Aa(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},bje=(e,t)=>{let n={},r=o=>{o.forEach(i=>{n[i]=!0})};return l1(e)?r(e):r(String(e).split(t)),n},wje=()=>{},Oje=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,JL="abcdefghijklmnopqrstuvwxyz",Sae="0123456789",Cae={DIGIT:Sae,ALPHA:JL,ALPHA_DIGIT:JL+JL.toUpperCase()+Sae},xje=(e=16,t=Cae.ALPHA_DIGIT)=>{let n="",{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function _je(e){return!!(e&&Aa(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var Sje=e=>{let t=new Array(10),n=(r,o)=>{if(XI(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;let i=l1(r)?[]:{};return e2(r,(u,c)=>{let d=n(u,o+1);!Zy(d)&&(i[c]=d)}),t[o]=void 0,i}}return r};return n(e,0)},Ije=Yl("AsyncFunction"),jje=e=>e&&(XI(e)||Aa(e))&&Aa(e.then)&&Aa(e.catch),Aae=((e,t)=>e?setImmediate:t?((n,r)=>(xd.addEventListener("message",({source:o,data:i})=>{o===xd&&i===n&&r.length&&r.shift()()},!1),o=>{r.push(o),xd.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Aa(xd.postMessage)),Eje=typeof queueMicrotask<"u"?queueMicrotask.bind(xd):typeof process<"u"&&process.nextTick||Aae,Me={isArray:l1,isArrayBuffer:Iae,isBuffer:qIe,isFormData:ZIe,isArrayBufferView:UIe,isString:$Ie,isNumber:jae,isBoolean:JIe,isObject:XI,isPlainObject:$I,isReadableStream:tje,isRequest:rje,isResponse:nje,isHeaders:oje,isUndefined:Zy,isDate:GIe,isFile:XIe,isBlob:KIe,isRegExp:vje,isFunction:Aa,isStream:QIe,isURLSearchParams:eje,isTypedArray:fje,isFileList:YIe,forEach:e2,merge:GL,extend:aje,trim:ije,stripBOM:lje,inherits:sje,toFlatObject:uje,kindOf:JI,kindOfTest:Yl,endsWith:cje,toArray:pje,forEachEntry:dje,matchAll:mje,isHTMLForm:hje,hasOwnProperty:_ae,hasOwnProp:_ae,reduceDescriptors:kae,freezeMethods:yje,toObjectSet:bje,toCamelCase:gje,noop:wje,toFiniteNumber:Oje,findKey:Eae,global:xd,isContextDefined:Pae,ALPHABET:Cae,generateString:xje,isSpecCompliantForm:_je,toJSONObject:Sje,isAsyncFn:Ije,isThenable:jje,setImmediate:Aae,asap:Eje};function s1(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}Me.inherits(s1,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Me.toJSONObject(this.config),code:this.code,status:this.status}}});var Mae=s1.prototype,Tae={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Tae[e]={value:e}});Object.defineProperties(s1,Tae);Object.defineProperty(Mae,"isAxiosError",{value:!0});s1.from=(e,t,n,r,o,i)=>{let u=Object.create(Mae);return Me.toFlatObject(e,u,function(d){return d!==Error.prototype},c=>c!=="isAxiosError"),s1.call(u,e.message,t,n,r,o),u.cause=e,u.name=e.name,i&&Object.assign(u,i),u};var Qt=s1;var KI=null;function KL(e){return Me.isPlainObject(e)||Me.isArray(e)}function zae(e){return Me.endsWith(e,"[]")?e.slice(0,-2):e}function Rae(e,t,n){return e?e.concat(t).map(function(o,i){return o=zae(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function Pje(e){return Me.isArray(e)&&!e.some(KL)}var kje=Me.toFlatObject(Me,{},null,function(t){return/^is[A-Z]/.test(t)});function Cje(e,t,n){if(!Me.isObject(e))throw new TypeError("target must be an object");t=t||new(KI||FormData),n=Me.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(M,C){return!Me.isUndefined(C[M])});let r=n.metaTokens,o=n.visitor||O,i=n.dots,u=n.indexes,d=(n.Blob||typeof Blob<"u"&&Blob)&&Me.isSpecCompliantForm(t);if(!Me.isFunction(o))throw new TypeError("visitor must be a function");function g(k){if(k===null)return"";if(Me.isDate(k))return k.toISOString();if(!d&&Me.isBlob(k))throw new Qt("Blob is not supported. Use a Buffer instead.");return Me.isArrayBuffer(k)||Me.isTypedArray(k)?d&&typeof Blob=="function"?new Blob([k]):Buffer.from(k):k}function O(k,M,C){let T=k;if(k&&!C&&typeof k=="object"){if(Me.endsWith(M,"{}"))M=r?M:M.slice(0,-2),k=JSON.stringify(k);else if(Me.isArray(k)&&Pje(k)||(Me.isFileList(k)||Me.endsWith(M,"[]"))&&(T=Me.toArray(k)))return M=zae(M),T.forEach(function(U,G){!(Me.isUndefined(U)||U===null)&&t.append(u===!0?Rae([M],G,i):u===null?M:M+"[]",g(U))}),!1}return KL(k)?!0:(t.append(Rae(C,M,i),g(k)),!1)}let S=[],I=Object.assign(kje,{defaultVisitor:O,convertValue:g,isVisitable:KL});function R(k,M){if(!Me.isUndefined(k)){if(S.indexOf(k)!==-1)throw Error("Circular reference detected in "+M.join("."));S.push(k),Me.forEach(k,function(T,D){(!(Me.isUndefined(T)||T===null)&&o.call(t,T,Me.isString(D)?D.trim():D,M,I))===!0&&R(T,M?M.concat(D):[D])}),S.pop()}}if(!Me.isObject(e))throw new TypeError("data must be an object");return R(e),t}var Mp=Cje;function Dae(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Lae(e,t){this._pairs=[],e&&Mp(e,this,t)}var Nae=Lae.prototype;Nae.append=function(t,n){this._pairs.push([t,n])};Nae.toString=function(t){let n=t?function(r){return t.call(this,r,Dae)}:Dae;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};var YI=Lae;function Aje(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function t2(e,t,n){if(!t)return e;let r=n&&n.encode||Aje,o=n&&n.serialize,i;if(o?i=o(t,n):i=Me.isURLSearchParams(t)?t.toString():new YI(t,n).toString(r),i){let u=e.indexOf("#");u!==-1&&(e=e.slice(0,u)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var YL=class{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){Me.forEach(this.handlers,function(r){r!==null&&t(r)})}},QL=YL;var QI={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var Fae=typeof URLSearchParams<"u"?URLSearchParams:YI;var Wae=typeof FormData<"u"?FormData:null;var Bae=typeof Blob<"u"?Blob:null;var Hae={isBrowser:!0,classes:{URLSearchParams:Fae,FormData:Wae,Blob:Bae},protocols:["http","https","file","blob","url","data"]};var tN={};$(tN,{hasBrowserEnv:()=>eN,hasStandardBrowserEnv:()=>Mje,hasStandardBrowserWebWorkerEnv:()=>Tje,navigator:()=>ZL,origin:()=>Rje});var eN=typeof window<"u"&&typeof document<"u",ZL=typeof navigator=="object"&&navigator||void 0,Mje=eN&&(!ZL||["ReactNative","NativeScript","NS"].indexOf(ZL.product)<0),Tje=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),Rje=eN&&window.location.href||"http://localhost";var mo={...tN,...Hae};function rN(e,t){return Mp(e,new mo.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return mo.isNode&&Me.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function zje(e){return Me.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Dje(e){let t={},n=Object.keys(e),r,o=n.length,i;for(r=0;r=n.length;return u=!u&&Me.isArray(o)?o.length:u,d?(Me.hasOwnProp(o,u)?o[u]=[o[u],r]:o[u]=r,!c):((!o[u]||!Me.isObject(o[u]))&&(o[u]=[]),t(n,r,o[u],i)&&Me.isArray(o[u])&&(o[u]=Dje(o[u])),!c)}if(Me.isFormData(e)&&Me.isFunction(e.entries)){let n={};return Me.forEachEntry(e,(r,o)=>{t(zje(r),o,n,0)}),n}return null}var ZI=Lje;function Nje(e,t,n){if(Me.isString(e))try{return(t||JSON.parse)(e),Me.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}var nN={transitional:QI,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){let r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=Me.isObject(t);if(i&&Me.isHTMLForm(t)&&(t=new FormData(t)),Me.isFormData(t))return o?JSON.stringify(ZI(t)):t;if(Me.isArrayBuffer(t)||Me.isBuffer(t)||Me.isStream(t)||Me.isFile(t)||Me.isBlob(t)||Me.isReadableStream(t))return t;if(Me.isArrayBufferView(t))return t.buffer;if(Me.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return rN(t,this.formSerializer).toString();if((c=Me.isFileList(t))||r.indexOf("multipart/form-data")>-1){let d=this.env&&this.env.FormData;return Mp(c?{"files[]":t}:t,d&&new d,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),Nje(t)):t}],transformResponse:[function(t){let n=this.transitional||nN.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(Me.isResponse(t)||Me.isReadableStream(t))return t;if(t&&Me.isString(t)&&(r&&!this.responseType||o)){let u=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(c){if(u)throw c.name==="SyntaxError"?Qt.from(c,Qt.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:mo.classes.FormData,Blob:mo.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Me.forEach(["delete","get","head","post","put","patch"],e=>{nN.headers[e]={}});var u1=nN;var Fje=Me.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Vae=e=>{let t={},n,r,o;return e&&e.split(` +`).forEach(function(u){o=u.indexOf(":"),n=u.substring(0,o).trim().toLowerCase(),r=u.substring(o+1).trim(),!(!n||t[n]&&Fje[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t};var qae=Symbol("internals");function r2(e){return e&&String(e).trim().toLowerCase()}function ej(e){return e===!1||e==null?e:Me.isArray(e)?e.map(ej):String(e)}function Wje(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var Bje=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function oN(e,t,n,r,o){if(Me.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!Me.isString(t)){if(Me.isString(r))return t.indexOf(r)!==-1;if(Me.isRegExp(r))return r.test(t)}}function Hje(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function Vje(e,t){let n=Me.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,u){return this[r].call(this,t,o,i,u)},configurable:!0})})}var c1=class{constructor(t){t&&this.set(t)}set(t,n,r){let o=this;function i(c,d,g){let O=r2(d);if(!O)throw new Error("header name must be a non-empty string");let S=Me.findKey(o,O);(!S||o[S]===void 0||g===!0||g===void 0&&o[S]!==!1)&&(o[S||d]=ej(c))}let u=(c,d)=>Me.forEach(c,(g,O)=>i(g,O,d));if(Me.isPlainObject(t)||t instanceof this.constructor)u(t,n);else if(Me.isString(t)&&(t=t.trim())&&!Bje(t))u(Vae(t),n);else if(Me.isHeaders(t))for(let[c,d]of t.entries())i(d,c,r);else t!=null&&i(n,t,r);return this}get(t,n){if(t=r2(t),t){let r=Me.findKey(this,t);if(r){let o=this[r];if(!n)return o;if(n===!0)return Wje(o);if(Me.isFunction(n))return n.call(this,o,r);if(Me.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=r2(t),t){let r=Me.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||oN(this,this[r],r,n)))}return!1}delete(t,n){let r=this,o=!1;function i(u){if(u=r2(u),u){let c=Me.findKey(r,u);c&&(!n||oN(r,r[c],c,n))&&(delete r[c],o=!0)}}return Me.isArray(t)?t.forEach(i):i(t),o}clear(t){let n=Object.keys(this),r=n.length,o=!1;for(;r--;){let i=n[r];(!t||oN(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let n=this,r={};return Me.forEach(this,(o,i)=>{let u=Me.findKey(r,i);if(u){n[u]=ej(o),delete n[i];return}let c=t?Hje(i):String(i).trim();c!==i&&delete n[i],n[c]=ej(o),r[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let n=Object.create(null);return Me.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&Me.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){let r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){let r=(this[qae]=this[qae]={accessors:{}}).accessors,o=this.prototype;function i(u){let c=r2(u);r[c]||(Vje(o,u),r[c]=!0)}return Me.isArray(t)?t.forEach(i):i(t),this}};c1.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Me.reduceDescriptors(c1.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});Me.freezeMethods(c1);var ko=c1;function n2(e,t){let n=this||u1,r=t||n,o=ko.from(r.headers),i=r.data;return Me.forEach(e,function(c){i=c.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function o2(e){return!!(e&&e.__CANCEL__)}function Uae(e,t,n){Qt.call(this,e??"canceled",Qt.ERR_CANCELED,t,n),this.name="CanceledError"}Me.inherits(Uae,Qt,{__CANCEL__:!0});var qs=Uae;function i2(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new Qt("Request failed with status code "+n.status,[Qt.ERR_BAD_REQUEST,Qt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function iN(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function qje(e,t){e=e||10;let n=new Array(e),r=new Array(e),o=0,i=0,u;return t=t!==void 0?t:1e3,function(d){let g=Date.now(),O=r[i];u||(u=g),n[o]=d,r[o]=g;let S=i,I=0;for(;S!==o;)I+=n[S++],S=S%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),g-u{n=O,o=null,i&&(clearTimeout(i),i=null),e.apply(null,g)};return[(...g)=>{let O=Date.now(),S=O-n;S>=r?u(g,O):(o=g,i||(i=setTimeout(()=>{i=null,u(o)},r-S)))},()=>o&&u(o)]}var Jae=Uje;var p1=(e,t,n=3)=>{let r=0,o=$ae(50,250);return Jae(i=>{let u=i.loaded,c=i.lengthComputable?i.total:void 0,d=u-r,g=o(d),O=u<=c;r=u;let S={loaded:u,total:c,progress:c?u/c:void 0,bytes:d,rate:g||void 0,estimated:g&&c&&O?(c-u)/g:void 0,event:i,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(S)},n)},aN=(e,t)=>{let n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},lN=e=>(...t)=>Me.asap(()=>e(...t));var Gae=mo.hasStandardBrowserEnv?function(){let t=mo.navigator&&/(msie|trident)/i.test(mo.navigator.userAgent),n=document.createElement("a"),r;function o(i){let u=i;return t&&(n.setAttribute("href",u),u=n.href),n.setAttribute("href",u),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(u){let c=Me.isString(u)?o(u):u;return c.protocol===r.protocol&&c.host===r.host}}():function(){return function(){return!0}}();var Xae=mo.hasStandardBrowserEnv?{write(e,t,n,r,o,i){let u=[e+"="+encodeURIComponent(t)];Me.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),Me.isString(r)&&u.push("path="+r),Me.isString(o)&&u.push("domain="+o),i===!0&&u.push("secure"),document.cookie=u.join("; ")},read(e){let t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function sN(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function uN(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function a2(e,t){return e&&!sN(t)?uN(e,t):t}var Kae=e=>e instanceof ko?{...e}:e;function Ql(e,t){t=t||{};let n={};function r(g,O,S){return Me.isPlainObject(g)&&Me.isPlainObject(O)?Me.merge.call({caseless:S},g,O):Me.isPlainObject(O)?Me.merge({},O):Me.isArray(O)?O.slice():O}function o(g,O,S){if(Me.isUndefined(O)){if(!Me.isUndefined(g))return r(void 0,g,S)}else return r(g,O,S)}function i(g,O){if(!Me.isUndefined(O))return r(void 0,O)}function u(g,O){if(Me.isUndefined(O)){if(!Me.isUndefined(g))return r(void 0,g)}else return r(void 0,O)}function c(g,O,S){if(S in t)return r(g,O);if(S in e)return r(void 0,g)}let d={url:i,method:i,data:i,baseURL:u,transformRequest:u,transformResponse:u,paramsSerializer:u,timeout:u,timeoutMessage:u,withCredentials:u,withXSRFToken:u,adapter:u,responseType:u,xsrfCookieName:u,xsrfHeaderName:u,onUploadProgress:u,onDownloadProgress:u,decompress:u,maxContentLength:u,maxBodyLength:u,beforeRedirect:u,transport:u,httpAgent:u,httpsAgent:u,cancelToken:u,socketPath:u,responseEncoding:u,validateStatus:c,headers:(g,O)=>o(Kae(g),Kae(O),!0)};return Me.forEach(Object.keys(Object.assign({},e,t)),function(O){let S=d[O]||o,I=S(e[O],t[O],O);Me.isUndefined(I)&&S!==c||(n[O]=I)}),n}var tj=e=>{let t=Ql({},e),{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:u,auth:c}=t;t.headers=u=ko.from(u),t.url=t2(a2(t.baseURL,t.url),e.params,e.paramsSerializer),c&&u.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let d;if(Me.isFormData(n)){if(mo.hasStandardBrowserEnv||mo.hasStandardBrowserWebWorkerEnv)u.setContentType(void 0);else if((d=u.getContentType())!==!1){let[g,...O]=d?d.split(";").map(S=>S.trim()).filter(Boolean):[];u.setContentType([g||"multipart/form-data",...O].join("; "))}}if(mo.hasStandardBrowserEnv&&(r&&Me.isFunction(r)&&(r=r(t)),r||r!==!1&&Gae(t.url))){let g=o&&i&&Xae.read(i);g&&u.set(o,g)}return t};var $je=typeof XMLHttpRequest<"u",Yae=$je&&function(e){return new Promise(function(n,r){let o=tj(e),i=o.data,u=ko.from(o.headers).normalize(),{responseType:c,onUploadProgress:d,onDownloadProgress:g}=o,O,S,I,R,k;function M(){R&&R(),k&&k(),o.cancelToken&&o.cancelToken.unsubscribe(O),o.signal&&o.signal.removeEventListener("abort",O)}let C=new XMLHttpRequest;C.open(o.method.toUpperCase(),o.url,!0),C.timeout=o.timeout;function T(){if(!C)return;let U=ko.from("getAllResponseHeaders"in C&&C.getAllResponseHeaders()),Y={data:!c||c==="text"||c==="json"?C.responseText:C.response,status:C.status,statusText:C.statusText,headers:U,config:e,request:C};i2(function(B){n(B),M()},function(B){r(B),M()},Y),C=null}"onloadend"in C?C.onloadend=T:C.onreadystatechange=function(){!C||C.readyState!==4||C.status===0&&!(C.responseURL&&C.responseURL.indexOf("file:")===0)||setTimeout(T)},C.onabort=function(){C&&(r(new Qt("Request aborted",Qt.ECONNABORTED,e,C)),C=null)},C.onerror=function(){r(new Qt("Network Error",Qt.ERR_NETWORK,e,C)),C=null},C.ontimeout=function(){let G=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded",Y=o.transitional||QI;o.timeoutErrorMessage&&(G=o.timeoutErrorMessage),r(new Qt(G,Y.clarifyTimeoutError?Qt.ETIMEDOUT:Qt.ECONNABORTED,e,C)),C=null},i===void 0&&u.setContentType(null),"setRequestHeader"in C&&Me.forEach(u.toJSON(),function(G,Y){C.setRequestHeader(Y,G)}),Me.isUndefined(o.withCredentials)||(C.withCredentials=!!o.withCredentials),c&&c!=="json"&&(C.responseType=o.responseType),g&&([I,k]=p1(g,!0),C.addEventListener("progress",I)),d&&C.upload&&([S,R]=p1(d),C.upload.addEventListener("progress",S),C.upload.addEventListener("loadend",R)),(o.cancelToken||o.signal)&&(O=U=>{C&&(r(!U||U.type?new qs(null,e,C):U),C.abort(),C=null)},o.cancelToken&&o.cancelToken.subscribe(O),o.signal&&(o.signal.aborted?O():o.signal.addEventListener("abort",O)));let D=iN(o.url);if(D&&mo.protocols.indexOf(D)===-1){r(new Qt("Unsupported protocol "+D+":",Qt.ERR_BAD_REQUEST,e));return}C.send(i||null)})};var Jje=(e,t)=>{let n=new AbortController,r,o=function(d){if(!r){r=!0,u();let g=d instanceof Error?d:this.reason;n.abort(g instanceof Qt?g:new qs(g instanceof Error?g.message:g))}},i=t&&setTimeout(()=>{o(new Qt(`timeout ${t} of ms exceeded`,Qt.ETIMEDOUT))},t),u=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(d=>{d&&(d.removeEventListener?d.removeEventListener("abort",o):d.unsubscribe(o))}),e=null)};e.forEach(d=>d&&d.addEventListener&&d.addEventListener("abort",o));let{signal:c}=n;return c.unsubscribe=u,[c,()=>{i&&clearTimeout(i),i=null}]},Qae=Jje;var Gje=function*(e,t){let n=e.byteLength;if(!t||n{let i=Xje(e,t,o),u=0,c,d=g=>{c||(c=!0,r&&r(g))};return new ReadableStream({async pull(g){try{let{done:O,value:S}=await i.next();if(O){d(),g.close();return}let I=S.byteLength;if(n){let R=u+=I;n(R)}g.enqueue(new Uint8Array(S))}catch(O){throw d(O),O}},cancel(g){return d(g),i.return()}},{highWaterMark:2})};var nj=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ele=nj&&typeof ReadableStream=="function",pN=nj&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),tle=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Kje=ele&&tle(()=>{let e=!1,t=new Request(mo.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Zae=64*1024,fN=ele&&tle(()=>Me.isReadableStream(new Response("").body)),rj={stream:fN&&(e=>e.body)};nj&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!rj[t]&&(rj[t]=Me.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new Qt(`Response type '${t}' is not supported`,Qt.ERR_NOT_SUPPORT,r)})})})(new Response);var Yje=async e=>{if(e==null)return 0;if(Me.isBlob(e))return e.size;if(Me.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(Me.isArrayBufferView(e)||Me.isArrayBuffer(e))return e.byteLength;if(Me.isURLSearchParams(e)&&(e=e+""),Me.isString(e))return(await pN(e)).byteLength},Qje=async(e,t)=>{let n=Me.toFiniteNumber(e.getContentLength());return n??Yje(t)},rle=nj&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:u,onDownloadProgress:c,onUploadProgress:d,responseType:g,headers:O,withCredentials:S="same-origin",fetchOptions:I}=tj(e);g=g?(g+"").toLowerCase():"text";let[R,k]=o||i||u?Qae([o,i],u):[],M,C,T=()=>{!M&&setTimeout(()=>{R&&R.unsubscribe()}),M=!0},D;try{if(d&&Kje&&n!=="get"&&n!=="head"&&(D=await Qje(O,r))!==0){let B=new Request(t,{method:"POST",body:r,duplex:"half"}),ne;if(Me.isFormData(r)&&(ne=B.headers.get("content-type"))&&O.setContentType(ne),B.body){let[pe,ve]=aN(D,p1(lN(d)));r=cN(B.body,Zae,pe,ve,pN)}}Me.isString(S)||(S=S?"include":"omit");let U="credentials"in Request.prototype;C=new Request(t,{...I,signal:R,method:n.toUpperCase(),headers:O.normalize().toJSON(),body:r,duplex:"half",credentials:U?S:void 0});let G=await fetch(C),Y=fN&&(g==="stream"||g==="response");if(fN&&(c||Y)){let B={};["status","statusText","headers"].forEach(de=>{B[de]=G[de]});let ne=Me.toFiniteNumber(G.headers.get("content-length")),[pe,ve]=c&&aN(ne,p1(lN(c),!0))||[];G=new Response(cN(G.body,Zae,pe,()=>{ve&&ve(),Y&&T()},pN),B)}g=g||"text";let K=await rj[Me.findKey(rj,g)||"text"](G,e);return!Y&&T(),k&&k(),await new Promise((B,ne)=>{i2(B,ne,{data:K,headers:ko.from(G.headers),status:G.status,statusText:G.statusText,config:e,request:C})})}catch(U){throw T(),U&&U.name==="TypeError"&&/fetch/i.test(U.message)?Object.assign(new Qt("Network Error",Qt.ERR_NETWORK,e,C),{cause:U.cause||U}):Qt.from(U,U&&U.code,e,C)}});var dN={http:KI,xhr:Yae,fetch:rle};Me.forEach(dN,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var nle=e=>`- ${e}`,Zje=e=>Me.isFunction(e)||e===null||e===!1,oj={getAdapter:e=>{e=Me.isArray(e)?e:[e];let{length:t}=e,n,r,o={};for(let i=0;i`adapter ${c} `+(d===!1?"is not supported by the environment":"is not available in the build")),u=t?i.length>1?`since : +`+i.map(nle).join(` +`):" "+nle(i[0]):"as no adapter specified";throw new Qt("There is no suitable adapter to dispatch the request "+u,"ERR_NOT_SUPPORT")}return r},adapters:dN};function mN(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new qs(null,e)}function ij(e){return mN(e),e.headers=ko.from(e.headers),e.data=n2.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),oj.getAdapter(e.adapter||u1.adapter)(e).then(function(r){return mN(e),r.data=n2.call(e,e.transformResponse,r),r.headers=ko.from(r.headers),r},function(r){return o2(r)||(mN(e),r&&r.response&&(r.response.data=n2.call(e,e.transformResponse,r.response),r.response.headers=ko.from(r.response.headers))),Promise.reject(r)})}var aj="1.7.5";var hN={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{hN[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});var ole={};hN.transitional=function(t,n,r){function o(i,u){return"[Axios v"+aj+"] Transitional option '"+i+"'"+u+(r?". "+r:"")}return(i,u,c)=>{if(t===!1)throw new Qt(o(u," has been removed"+(n?" in "+n:"")),Qt.ERR_DEPRECATED);return n&&!ole[u]&&(ole[u]=!0,console.warn(o(u," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,u,c):!0}};function eEe(e,t,n){if(typeof e!="object")throw new Qt("options must be an object",Qt.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),o=r.length;for(;o-- >0;){let i=r[o],u=t[i];if(u){let c=e[i],d=c===void 0||u(c,i,e);if(d!==!0)throw new Qt("option "+i+" must be "+d,Qt.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Qt("Unknown option "+i,Qt.ERR_BAD_OPTION)}}var lj={assertOptions:eEe,validators:hN};var Tp=lj.validators,f1=class{constructor(t){this.defaults=t,this.interceptors={request:new QL,response:new QL}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;let i=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Ql(this.defaults,n);let{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&lj.assertOptions(r,{silentJSONParsing:Tp.transitional(Tp.boolean),forcedJSONParsing:Tp.transitional(Tp.boolean),clarifyTimeoutError:Tp.transitional(Tp.boolean)},!1),o!=null&&(Me.isFunction(o)?n.paramsSerializer={serialize:o}:lj.assertOptions(o,{encode:Tp.function,serialize:Tp.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let u=i&&Me.merge(i.common,i[n.method]);i&&Me.forEach(["delete","get","head","post","put","patch","common"],k=>{delete i[k]}),n.headers=ko.concat(u,i);let c=[],d=!0;this.interceptors.request.forEach(function(M){typeof M.runWhen=="function"&&M.runWhen(n)===!1||(d=d&&M.synchronous,c.unshift(M.fulfilled,M.rejected))});let g=[];this.interceptors.response.forEach(function(M){g.push(M.fulfilled,M.rejected)});let O,S=0,I;if(!d){let k=[ij.bind(this),void 0];for(k.unshift.apply(k,c),k.push.apply(k,g),I=k.length,O=Promise.resolve(n);S{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i,u=new Promise(c=>{r.subscribe(c),i=c}).then(o);return u.cancel=function(){r.unsubscribe(i)},u},t(function(i,u,c){r.reason||(r.reason=new qs(i,u,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new e(function(o){t=o}),cancel:t}}},ile=gN;function vN(e){return function(n){return e.apply(null,n)}}function yN(e){return Me.isObject(e)&&e.isAxiosError===!0}var bN={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(bN).forEach(([e,t])=>{bN[t]=e});var ale=bN;function lle(e){let t=new l2(e),n=Qy(l2.prototype.request,t);return Me.extend(n,l2.prototype,t,{allOwnKeys:!0}),Me.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return lle(Ql(e,o))},n}var ho=lle(u1);ho.Axios=l2;ho.CanceledError=qs;ho.CancelToken=ile;ho.isCancel=o2;ho.VERSION=aj;ho.toFormData=Mp;ho.AxiosError=Qt;ho.Cancel=ho.CanceledError;ho.all=function(t){return Promise.all(t)};ho.spread=vN;ho.isAxiosError=yN;ho.mergeConfig=Ql;ho.AxiosHeaders=ko;ho.formToJSON=e=>ZI(Me.isHTMLForm(e)?new FormData(e):e);ho.getAdapter=oj.getAdapter;ho.HttpStatusCode=ale;ho.default=ho;var Rp=ho;var{Axios:cNt,AxiosError:pNt,CanceledError:fNt,isCancel:dNt,CancelToken:mNt,VERSION:hNt,all:gNt,Cancel:vNt,isAxiosError:yNt,spread:bNt,toFormData:wNt,AxiosHeaders:ONt,HttpStatusCode:xNt,formToJSON:_Nt,getAdapter:SNt,mergeConfig:INt}=Rp;var Uu=["class","term"],sle=["property","annotationProperty","dataProperty","objectProperty"],ule=["individual"],sj=["ontology"],s2=[...Uu,...ule,...sle],wN=[...s2,...sj];function d1(e){return Uu.includes(e)}function ON(e){return sle.includes(e)}function gl(e){return ule.includes(e)}function u2(e){return sj.includes(e)}function xN(e){return s2.includes(e)}function c2(e){return wN.includes(e)}function _d(e){return d1(e.getType())}function zp(e){return ON(e.getType())}function m1(e){return gl(e.getType())}function vl(e){return xN(e.getType())}function cle(e){return u2(e.getType())}function nt(e){return Array.isArray(e)?e:e?[e]:[]}var tEe=!0;function Ni(e){return e!==void 0?e:tEe}function uj(e){return e==="term"?"class":e}function Zl(e){return e.charAt(0).toUpperCase()+e.slice(1)}function h1(e){return Zl(e).split(/(?=[A-Z][a-z])/).join(" ")}function g1(e){return Zl(e).replace("_"," ")}function es(e,t,n,r){return`ontologies/${e}/${Lo(nt(t),r)}`+(n!=null?`/${encodeURIComponent(encodeURIComponent(n))}`:"")}function Lo(e,t){for(let n of nt(e))if(c2(n)){if(d1(n))return Ni(t)?"terms":"classes";if(ON(n))return"properties";if(gl(n))return"individuals";if(u2(n))return"ontologies"}throw new Error("No thingType found to pluralize in provided typeArray.")}function cj(e,t){for(let n of nt(e))switch(n){case"terms":case"classes":return Ni(t)?"term":"class";case"properties":case"dataProperties":case"objectProperties":case"annotationProperties":return"property";case"individuals":return"individual";case"ontologies":return"ontology"}throw new Error("No thingType found to singularize in provided typeArray.")}function Ut(){return(Math.random()*Math.pow(2,54)).toString(36)}function pj(e){return/^#[0-9A-F]{6}$/i.test(e)}function fj(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function dj(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function Ln(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}function mj(e){let t=e.filter(n=>c2(n));if(t=t.map(n=>n==="annotationProperty"||n==="objectProperty"||n==="dataProperty"?"property":n),t=[...new Set(t)],t.length===1)return t[0];throw t.length===0?Error("Entity type could not be correctly inferred: No suitable type found in array."):Error(`Entity type could not be correctly inferred: Multiple types found in array, no definite choice possible - ${JSON.stringify(t)}`)}var ft=class e{value;axioms;constructor(t,n){this.value=t,this.axioms=n}static fromJson(t){return t?(Array.isArray(t)||(t=[t]),t.map(n=>typeof n=="object"&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1?new e(n.value,n.axioms):new e(n,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let t={};for(let n of this.axioms)for(let r of Object.keys(n)){let o=n[r],i=t[r];i!==void 0?i.push(o):t[r]=[o]}return t}};var Sd=class e{linkedEntities;constructor(t){t?this.linkedEntities={...t}:this.linkedEntities={}}mergeWith(t){return t?new e({...this.linkedEntities,linkedEntities:t}):new e({...this.linkedEntities})}getLabelForIri(t){let n=this.linkedEntities[t];if(n){let r=ft.fromJson(n.label);if(r&&r.length>0)return r[0].value}}get(t){return this.linkedEntities[t]}};var Id=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getTypePlural(){return Lo(this.getType())}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=ft.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=ft.fromJson(this.properties.description);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontology_name}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&ft.fromJson(n[t]?.label)[0]?.value||t}getLinkedEntities(){return new Sd(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties.annotation&&this.properties.annotation.depiction?this.properties.annotation.depiction[0]:""}};var $u=class extends Id{isCanonical(){return this.properties.is_defining_ontology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return ft.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(ft.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return ft.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return ft.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return nt(this.properties.ancestor)}getHierarchicalAncestorIris(){return nt(this.properties.hierarchicalAncestor)}getSynonyms(){return ft.fromJson(this.properties.synonyms)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties.annotation.has_dbxref||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.obo_id||this.properties.short_form}getDepictedBy(){return ft.fromJson([...nt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...nt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){return nt(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return g1(t)}getAnnotationById(t){return ft.fromJson(nt(this.properties.annotation[t]))}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let n=ft.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}};var p2=class extends $u{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return ft.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return nt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return nt(this.properties.in_subset)||[]}};var f2=class extends $u{getType(){return"property"}getParents(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return nt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var d2=class extends $u{getType(){return"individual"}getParents(){return ft.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return ft.fromJson([])}getDifferentFrom(){return nt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return nt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var m2=class extends Id{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=ft.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=ft.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return nt(this.properties.config.annotations.creator)}getSourceFileTimestamp(){return this.properties.updated}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfTerms)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.config.logo||void 0}getOntologyPurl(){return this.properties.config.id}getHomepage(){return this.properties.config.homepage}getMailingList(){return this.properties.config.mailingList}getTracker(){return this.properties.config.tracker}getVersionIri(){return this.properties.config.versionIri}getVersion(){return this.properties.config.version}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){return this.properties.config&&this.properties.config.annotations?nt(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return h1(t)}getAnnotationById(t){return ft.fromJson(nt(this.properties.config.annotations[t]).filter(n=>typeof n!="string"||n!==""))}getPreferredRoots(){return nt(this.properties.hasPreferredRoot)}getLanguages(){return nt(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return nt(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}};var h2=class{properties;constructor(t){this.properties=t}getTotalOntologies(){return this.properties.length}getNumEntities(){return this.properties.reduce((t,n)=>t+n.getNumEntities(),0)}getNumClasses(){return this.properties.reduce((t,n)=>t+n.getNumClasses(),0)}getNumProperties(){return this.properties.reduce((t,n)=>t+n.getNumProperties(),0)}getNumIndividuals(){return this.properties.reduce((t,n)=>t+n.getNumIndividuals(),0)}};var jd=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let t=this.properties.type;for(let n of t)if(c2(n))return n;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return nt(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=ft.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=ft.fromJson(this.properties.definition);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&ft.fromJson(n[t]?.label)[0]?.value||t}getAnnotationById(t){return ft.fromJson(nt(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new Sd(this.properties.linkedEntities||{})}getDepictionUrl(){return this.properties["http://xmlns.com/foaf/0.1/depiction"]?this.properties["http://xmlns.com/foaf/0.1/depiction"]:""}};var Ju=class extends jd{isCanonical(){return this.properties.isDefiningOntology}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return ft.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(ft.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return ft.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return ft.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return nt(this.properties.ancestor)}getHierarchicalAncestorIris(){return nt(this.properties.hierarchicalAncestor)}getSynonyms(){return ft.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties["http://www.geneontology.org/formats/oboInOwl#hasDbXref"]||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return ft.fromJson([...nt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...nt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){let t=nt(this.properties.definitionProperty),n=nt(this.properties.synonymProperty),r=nt(this.properties.hierarchicalProperty),o=new Set;for(let i of Object.keys(this.properties))if(i.indexOf("://")!==-1&&!i.startsWith("negativePropertyAssertion+")&&i!=="http://xmlns.com/foaf/0.1/depicted_by"&&i!=="http://xmlns.com/foaf/0.1/depiction"){if(!this.isPredicateFromInformalVocabulary(i)){let u=this.getLinkedEntities().get(i);if(u!=null&&u.type.indexOf("objectProperty")!==-1||u!=null&&u.type.indexOf("dataProperty")!==-1)continue}t.indexOf(i)!==-1||n.indexOf(i)!==-1||r.indexOf(i)!==-1||(i.startsWith("http://www.w3.org/2000/01/rdf-schema#")||i.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||i.startsWith("http://www.w3.org/2002/07/owl#"))&&i!=="http://www.w3.org/2000/01/rdf-schema#comment"&&i!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&i!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||i==="http://www.geneontology.org/formats/oboInOwl#inSubset"||i==="http://www.geneontology.org/formats/oboInOwl#id"||o.add(i)}return Array.from(o)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDirectDescendants?parseInt(this.properties.numDirectDescendants):0}getHierarchicalParentReificationAxioms(t){let n=ft.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}};var g2=class extends Ju{getParents(){return ft.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return nt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return nt(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var v2=class extends Ju{getParents(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return ft.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return nt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return nt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return nt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return ft.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var y2=class extends Ju{getParents(){return ft.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return ft.fromJson([])}getDifferentFrom(){return nt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return nt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var b2=class extends jd{getOntologyId(){return this.properties.ontologyId}getName(){let t=ft.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=ft.fromJson(this.properties.definition||this.properties.description||"");return t[0]&&t[0].value||""}getCreators(){return nt(this.properties["http://purl.org/dc/elements/1.1/creator"])}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let t=new Set;for(let n of Object.keys(this.properties))n.indexOf("://")!==-1&&n!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(n.startsWith("http://www.w3.org/2000/01/rdf-schema#")||n.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||n.startsWith("http://www.w3.org/2002/07/owl#")||t.add(n));return Array.from(t)}getPreferredRoots(){return nt(this.properties.hasPreferredRoot)}getLanguages(){return nt(this.properties.language)}getImportsFrom(){return nt(this.properties.importsFrom)}getExportsTo(){return nt(this.properties.exportsTo)}getAllowDownload(){return this.properties.allowDownload}};function yl(e){let t;if(e._embedded!==void 0||e.numberOfTerms!==void 0)t=!0;else if(e.elements!==void 0||e.numberOfClasses!==void 0)t=!1;else throw Error(`Response structure does not correlate to any of the featured response structures: + ${JSON.stringify(e)}`);let n;if(t)e._embedded===void 0?n="ontology":e._embedded.terms!==void 0?n="term":e._embedded.properties!==void 0?n="property":e._embedded.individuals!==void 0&&(n="individual");else if(e.elements===void 0)n="ontology";else{if(e.elements[0]===void 0)throw Error("Empty response.");n=mj(e.elements[0].type)}if(n===void 0)throw Error("Entity type could not be correctly inferred.");return rEe(e,n,t)}function rEe(e,t,n){switch(t){case"ontology":return n?new m2(e):new b2(e);case"term":case"class":return n?new p2(Dp(nt(e._embedded.terms),n)):new g2(Dp(nt(e.elements),n));case"property":return n?new f2(Dp(nt(e._embedded.properties),n)):new v2(Dp(nt(e.elements),n));case"individual":return n?new d2(Dp(nt(e._embedded.individuals),n)):new y2(Dp(nt(e.elements),n));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function Dp(e,t,n){if(n){let o=nt(e).filter(i=>(t?i.ontology_name:i.ontologyId)==n);if(o.length>0)return o[0];console.error(`Invalid ontologyId ${n} for given entityArrayResponse.`)}let r=nt(e).filter(o=>t?o.is_defining_ontology:o.isDefiningOntology);if(r.length>0)return r[0];if(e.length>0)return e[0];throw Error("Empty response.")}var ts=class{entityData;childRelationToParent;loadedChildren;expanded;loading;constructor(t,n){this.entityData=t,this.loadedChildren=[],this.expanded=!1,this.loading=!1,this.childRelationToParent=n}addChild(t){this.loadedChildren.push(t)}},nEe=!1,oEe=!0,rs=class{parentChildRelations;entitiesData;allChildrenPresent;roots;api;ontologyId;includeObsoleteEntities=nEe;entityType;keepExpansionStates=oEe;useLegacy;mainEntityIri;constructor(t){let{parentChildRelations:n,entitiesData:r,allChildrenPresent:o,roots:i,includeObsoleteEntities:u,keepExpansionStates:c,api:d,mainEntityIri:g,entityType:O,ontologyId:S,useLegacy:I}=t;this.parentChildRelations=n,this.entitiesData=r,this.allChildrenPresent=o,this.roots=i,u!=null&&(this.includeObsoleteEntities=u),c!=null&&(this.keepExpansionStates=c),this.api=d,this.mainEntityIri=g,this.entityType=O,this.ontologyId=S,I!=null&&(this.useLegacy=I)}mergeChildrenIntoLoadedChildren(t){let n=this.parentChildRelations.get(t.entityData.iri);if(n==null)throw Error(`parentChildRelations has no entry for key "${t.entityData.iri}" although this should never happen.`);let r=0,o=t.loadedChildren.length,i=0;for(;i=0;u--)for(let c=u+1;c(u.label||u.iri).localeCompare(c.label||c.iri)),i=[];for(let u of o){this.entitiesData.set(u.iri,u);let c=u.parents.filter(d=>d.value==t.entityData.iri);i.push({childIri:u.iri,childRelationToParent:c.length>0&&c[0].getMetadata()?c[0].getMetadata().childRelationToParent:void 0})}this.parentChildRelations.set(t.entityData.iri,i)}return this.mergeChildrenIntoLoadedChildren(t),this.allChildrenPresent.add(t.entityData.iri),!0}else return!1}};var hj=class{properties;constructor(t){this.properties=t}getTotalSearchResults(){return this.properties.length}};var gj=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology_name}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}getApiSourceName(){return""}getApiSourceEndpoint(){return""}};var vj=class{properties;constructor(t){this.properties=t}getDescription(){let t=this.properties.description;return Array.isArray(t)?t.join(" "):typeof t=="string"?t:""}getIri(){return this.properties.iri}getLabel(){return this.properties.label}getOntologyId(){return this.properties.ontology}getType(){return this.properties.type}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getShortForm(){return this.properties.short_form}getApiSourceName(){return this.properties.source_name}getApiSourceEndpoint(){return this.properties.source}};function yj(e){return e==="http://www.w3.org/2002/07/owl#Thing"||e==="http://www.w3.org/2002/07/owl#TopObjectProperty"}var iEe=10,pr=class e{axiosInstance;constructor(t){this.axiosInstance=Rp.create({baseURL:t,headers:{Accept:"application/json",Content_Type:"application/json"}})}buildParamsForGet(t,n,r,o){return n?{...t,sort:`${n.sortField},${n.sortDir}`,...r,...this.buildOtherParams(o)}:{...t,...r,...this.buildOtherParams(o)}}buildPaginationParams(t){let n={rows:t?.size};return t?.page&&(t.size?n.start=(+t.page*+t.size).toString():n.start=(+t.page*iEe).toString()),n}buildParamsForSearch(t,n,r,o,i){let u={exact:t.exactMatch,obsoletes:t.showObsoleteTerms};return i?u.query=t.query:u.q=t.query,t.groupByIri&&(u.groupField=t.groupByIri),t.types&&(u.type=t.types),t.ontology&&(u.ontology=t.ontology),{...u,...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildOtherParams(t){let n={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],u=o.split("=")[1];n[i]=u}),n}buildParamsForSelect(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildParamsForSuggest(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}check_for_errors(t){if(t.error)throw Error(t.status+" "+t.error+" - "+t.message+" - "+t.exception+" at "+t.path);if(t.page!==void 0&&t.page.totalElements===0)throw Error("Response contains 0 elements");return t}async makeCall(t,n,r){let o=Ni(r)?"":"v2/",i=(await this.axiosInstance.get(o+t,n)).data;return this.check_for_errors(i)}getOntologies=async(t,n,r,o)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,n,r,o)},!0);async getOntologiesData(t){let n,r=[],o=0,i=500;do{if(n=await this.getOntologies({size:i.toString(),page:o.toString()},void 0,void 0,t),!n||!n._embedded||!n._embedded.ontologies)throw new Error("Ontologies data not found");r=r.concat(n._embedded.ontologies.map(u=>yl(u))),o+=1}while(o{let u=Ni(i)?"terms":"classes";return this.makeCall(u,{params:this.buildParamsForGet(t,n,r)},Ni(i))};getProperties=async(t,n,r,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,n,r)},Ni(i));getIndividuals=async(t,n,r,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,n,r)},Ni(i));getOntology=async(t,n,r,o,i)=>{let u={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+r?.ontologyId,u,Ni(i))};getEntity=async(t,n,r,o,i)=>{let u=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",c={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(u+"entities",{params:c},Ni(i))};getTerm=async(t,n,r,o,i,u)=>{let c=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",d=Ni(i)?"terms":"classes",g={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(c+d,{params:g,signal:u},Ni(i))};getProperty=async(t,n,r,o,i,u)=>{let c=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",d={iri:r?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(c+"properties",{params:d,signal:u},Ni(i))};getIndividual=async(t,n,r,o,i,u)=>{let c=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",d={iri:r?.individualIri,...this.buildOtherParams(o)};return this.makeCall(c+"individuals",{params:d,signal:u},Ni(i))};search=async(t,n,r,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,n,r,o),signal:i},!0);select=async(t,n,r,o)=>this.makeCall("select",{params:this.buildParamsForSelect(t,n,r,o)},!0);searchTs4nfdiGateway=async(t,n,r,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,n,r,o,i)},!0);async getSelectData(t,n,r,o,i){let u,c=[],d=0;if(i)if(u=await this.searchTs4nfdiGateway(t,n,r,o,i),u)c=c.concat(u.map(g=>new vj(g)));else throw new Error("Select data not found");else{if(u=await this.select(t,n,r,o),!u||!u.response.docs)throw new Error("Select data not found");c=c.concat(u.response.docs.map(g=>new gj(g)))}return new hj(c)}suggest=async(t,n,r,o)=>this.makeCall("suggest",{params:this.buildParamsForSuggest(t,n,r,o)},!0);getTermTree=async(t,n,r,o)=>{let i="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(i=i+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/jstree",n.child?(await this.axiosInstance.get(i+"/children/"+n.child)).data:(await this.axiosInstance.get(i,{params:n})).data):(await this.axiosInstance.get(i+"/roots")).data};getTermRelations=async(t,n,r)=>{let o="ontologies/"+t?.ontologyId+"/terms";if(!t.termIri)return(await this.axiosInstance.get(o+"/roots")).data;o=o+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/graph"};async getEntityResponse(t,n,r,o,i){let u;if(!t)throw Error("No IRI provided");return n?u=await this.getEntityWithEntityTypeProvided(t,n,r,o,i):Ni(i)?u=await this.getEntityWithInferredEntityType(t,r,o):u=await this.getEntity(void 0,void 0,{ontologyId:r,termIri:t},o,i),u}async getEntityObject(t,n,r,o,i){return yl(await this.getEntityResponse(t,n,r,o,i))}async getOntologyObject(t,n,r){let o=await this.getOntology(void 0,void 0,{ontologyId:t},n,r);return yl(o)}async getThingObject(t,n,r,o,i){if(n)if(u2(n)){if(r)return await this.getOntologyObject(r,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${sj.join('", "')}"}.`)}else if(xN(n)){if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error(`iri has to be provided if thingType in {"${s2.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${n}" provided. Must be in {"${wN.join('", "')}"}.`);else{if(!t&&r)return await this.getOntologyObject(r,o,i);if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error("iri or ontologyId has to be provided if thingType is not provided.")}}async getEntityWithEntityTypeProvided(t,n,r,o,i){switch(n){case"term":case"class":return await this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},o,i);case"property":case"annotationProperty":case"dataProperty":case"objectProperty":return await this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},o,i);case"individual":return await this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},o,i);default:throw Error('Invalid entity type "'+n+`". Must be one of {${s2.map(u=>`"${u}"`).join(", ")}}.`)}}async getEntityWithInferredEntityType(t,n,r){let o=new AbortController,i=o.signal,u;function c(d){d._embedded!==void 0&&(u=d,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:n,termIri:t},r,!0,i).then(d=>{c(d)}),this.getProperty(void 0,void 0,{ontologyId:n,propertyIri:t},r,!0,i).then(d=>{c(d)}),this.getIndividual(void 0,void 0,{ontologyId:n,individualIri:t},r,!0,i).then(d=>{c(d)})]),u!==void 0)return u;throw Error("Iri "+t+" could not be resolved.")}async getAncestors(t,n,r,o=!1){let i;return d1(n)?i=await this.makeCall(`${es(r,n,t,!1)}/hierarchicalAncestors`,{params:{size:"1000",includeObsoleteEntities:o}},!1):i=await this.makeCall(`${es(r,n,t,!1)}/ancestors`,{params:{size:"1000",includeObsoleteEntities:o}},!1),i.elements.map(u=>yl({elements:[u]}))}async getJSTree(t,n,r){return await this.makeCall(`${es(r,n,t,!0)}/jstree`,{params:{size:"1000"}},!0)}async getChildren(t,n,r,o=!1,i=!1){let u;return d1(n)?u=await this.makeCall(`${es(r,Uu[0],t,i)}/hierarchicalChildren`,{params:{size:"1000",includeObsoleteEntities:o}},i):gl(n)?i?u=await this.makeCall(`${es(r,Uu[0],t,i)}/descendants`,{params:{size:"1000"}},i):u=await this.makeCall(`${es(r,Uu[0],t,i)}/instances`,{params:{size:"1000",includeObsoleteEntities:o}},i):u=await this.makeCall(`${es(r,n,t,i)}/children`,{params:{size:"1000",includeObsoleteEntities:o}},i),i?u._embedded[gl(n)?Lo(Uu[0],i):Lo(n,i)].map(c=>yl({_embedded:{[gl(n)?Lo(Uu[0],i):Lo(n)]:[c]}})):u.elements.map(c=>yl({elements:[c]}))}async getRootEntities(t,n,r=!1,o=!1,i=!1){return i?gl(t)?[]:(await this.makeCall(`${es(n,t,void 0,i)}/roots`,{params:{size:"1000",includeObsoleteEntities:o}},i))._embedded[Lo(t,i)].map(c=>yl({_embedded:{[Lo(t,i)]:[c]}})):gl(t)?[]:(await this.makeCall(`${es(n,t,void 0,i)}`,{params:{size:"1000",includeObsoleteEntities:o,hasDirectParent:r?void 0:"false",isPreferredRoot:r?"true":void 0}},i)).elements.map(c=>yl({elements:[c]}))}async getClassInstances(t,n){return(await this.makeCall(`${es(n,Uu[0],t,!1)}/individuals`,{params:{size:"1000"}},!1)).elements.map(o=>yl({elements:[o]}))}async buildHierarchyWithIri(t){let{iri:n,ontologyId:r,entityType:o,preferredRoots:i=!1,includeObsoleteEntities:u=!1,keepExpansionStates:c=!0,showSiblingsOnInit:d=!1,useLegacy:g=!1}=t;if(n)return await this.getEntityObject(n,o,r,"",g).then(O=>this.buildHierarchyWithEntity({entityType:o||O.getType(),ontologyId:r||O.getOntologyId(),includeObsoleteEntities:u,preferredRoots:i,mainEntity:O,keepExpansionStates:c,showSiblingsOnInit:d,useLegacy:g}));if(o==null||r==null)throw Error("Either iri or ontologyId and entityType have to be provided.");return await this.buildRootHierarchy({entityType:o,ontologyId:r,includeObsoleteEntities:u,preferredRoots:i,keepExpansionStates:c,showSiblingsOnInit:d,useLegacy:g})}jsTreeNodeToEntityDataForHierarchy(t){return{iri:t.iri,label:t.text,hasChildren:t.children||t.state.opened,parents:[]}}entityToEntityDataForHierarchy(t){return{iri:t.getIri(),label:nt(t.getLabel())[0],definedBy:t.getDefinedBy(),hasChildren:t.hasChildren(),numDescendants:t.getNumHierarchicalDescendants()||t.getNumDescendants(),parents:t.getParents()}}async buildRootHierarchy(t){let{ontologyId:n,entityType:r,preferredRoots:o,includeObsoleteEntities:i,useLegacy:u}=t,c=(await this.getRootEntities(r,n,o,i,u)).map(O=>this.entityToEntityDataForHierarchy(O)).filter(O=>!yj(O.iri)),d=new Map,g=new Map;for(let O of c)d.set(O.iri,[]),g.set(O.iri,O);return new rs({parentChildRelations:d,entitiesData:g,allChildrenPresent:new Set,roots:c.map(O=>new ts(O)).sort((O,S)=>(O.entityData.label||O.entityData.iri).localeCompare(S.entityData.label||S.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:n,includeObsoleteEntities:i,entityType:r,keepExpansionStates:t.keepExpansionStates,useLegacy:u})}async buildHierarchyWithEntity(t){let{mainEntity:n,ontologyId:r,entityType:o,preferredRoots:i,includeObsoleteEntities:u,showSiblingsOnInit:c,useLegacy:d}=t,g=[];if(d){let C=await this.getJSTree(n.getIri(),o,r),T=new Map,D=new Map;for(let G of C)T.set(G.id,G.iri),D.set(G.iri,new Set);for(let G of C){let Y=D.get(G.iri),K=T.get(G.parent);Y!=null&&K!=null&&Y.add(K)}g=[];let U=new Set;for(let G of C)if(!U.has(G.iri)){U.add(G.iri),g.push(this.jsTreeNodeToEntityDataForHierarchy(G));let Y=D.get(G.iri);Y!=null&&(g[g.length-1].parents=ft.fromJson(Array.from(Y.values()))||[])}}else{let C=await this.getAncestors(n.getIri(),o,r||n.getOntologyId(),u);g=[this.entityToEntityDataForHierarchy(n),...C.map(T=>this.entityToEntityDataForHierarchy(T))]}g=g.filter(C=>!yj(C.iri));let O=new Map,S=new Set,I=new Map;for(let C of g)O.set(C.iri,[]),I.set(C.iri,C);if(c){let C=o||n.getType(),T=C=="individual"?"class":C,D=[];for(let U of g)U.iri!=n.getIri()&&D.push(new Promise(G=>this.getChildren(U.iri,T,r,u,d).then(Y=>Y.map(K=>this.entityToEntityDataForHierarchy(K))).then(Y=>{let K=[];for(let B of Y){I.set(B.iri,B);let ne=B.parents.filter(pe=>pe.value==U.iri);K.push({childIri:B.iri,childRelationToParent:ne.length>0&&ne[0].getMetadata()?ne[0].getMetadata().childRelationToParent:void 0})}O.set(U.iri,K),S.add(U.iri)}).then(G)));if(await Promise.allSettled(D),C=="individual")for(let U of n.getParents()){let G=(await this.getChildren(U.value,C,r,u)).map(K=>this.entityToEntityDataForHierarchy(K)),Y=[];for(let K of G)Y.push({childIri:K.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});O.set(U.value,Y)}}else for(let C of g){let T=C.parents.filter(D=>!yj(D.value));if(C.iri==n?.getIri()&&gl(o||n.getType()))for(let D of T)O.has(D.value)&&O.get(D.value)?.push({childIri:C.iri,childRelationToParent:"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"});else for(let D of T)O.has(D.value)&&O.get(D.value)?.push({childIri:C.iri,childRelationToParent:D.getMetadata()?D.getMetadata().childRelationToParent:void 0})}for(let C of O.values())C.sort((T,D)=>(I.get(T.childIri)?.label||T.childIri).localeCompare(I.get(D.childIri)?.label||D.childIri));let R=[];if(i){let C=(await this.getOntologyObject(r,void 0,d)).getPreferredRoots();for(let T of C)I.has(T)&&R.push(T)}else for(let C of g)C.parents.filter(D=>!yj(D.value)).length==0&&R.push(C.iri);function k(C,T,D){T.add(C.iri);let U=new ts(C);U.childRelationToParent=D;let G=O.get(C.iri)||[];for(let Y of G){if(T.has(Y.childIri)){console.error(`Cyclic tree at entity "${Y.childIri}".`);continue}let K=I.get(Y.childIri);K!=null&&U.addChild(k(K,T,Y.childRelationToParent))}return U.loadedChildren.length>0&&(U.expanded=!0),T.delete(C.iri),U}let M=new Set;return new rs({parentChildRelations:O,entitiesData:I,allChildrenPresent:S,roots:R.map(C=>k(I.get(C),M)).sort((C,T)=>(C.entityData.label||C.entityData.iri).localeCompare(T.entityData.label||T.entityData.iri)),api:new e(this.axiosInstance.getUri()),ontologyId:r,includeObsoleteEntities:u,entityType:o,mainEntityIri:n?.getIri(),keepExpansionStates:t.keepExpansionStates,useLegacy:d})}async loadHierarchyChildren(t){if(t.entityType==null)throw Error("EntityType has to be provided to load children in OLS.");return(await this.getChildren(t.nodeToExpand.entityData.iri,t.entityType,t.ontologyId,t.includeObsoleteEntities,t.useLegacy)).map(n=>this.entityToEntityDataForHierarchy(n))}};var kd=E(L()),P1=E(rt());var fse=E(yt()),qj=E(rt());var wl=E(L()),Fj=E(L());var sEe=!1;function uEe(e){if(e.sheet)return e.sheet;for(var t=0;t0?oo(_1,--Wi):0,O1--,go===10&&(O1=1,_j--),go}function Bi(){return go=Wi2||x1(go)>3?"":" "}function Ple(e,t){for(;--t&&Bi()&&!(go<48||go>102||go>57&&go<65||go>70&&go<97););return I1(e,_2()+(t<6&&bl()==32&&Bi()==32))}function IN(e){for(;Bi();)switch(go){case e:return Wi;case 34:case 39:e!==34&&e!==39&&IN(go);break;case 40:e===41&&IN(e);break;case 92:Bi();break}return Wi}function kle(e,t){for(;Bi()&&e+go!==47+10;)if(e+go===42+42&&bl()===47)break;return"/*"+I1(t,Wi-1)+"*"+Ed(e===47?e:Bi())}function Cle(e){for(;!x1(bl());)Bi();return I1(e,Wi)}function Tle(e){return Ij(jj("",null,null,null,[""],e=Sj(e),0,[0],e))}function jj(e,t,n,r,o,i,u,c,d){for(var g=0,O=0,S=u,I=0,R=0,k=0,M=1,C=1,T=1,D=0,U="",G=o,Y=i,K=r,B=U;C;)switch(k=D,D=Bi()){case 40:if(k!=108&&oo(B,S-1)==58){O2(B+=Nr(j1(D),"&","&\f"),"&\f")!=-1&&(T=-1);break}case 34:case 39:case 91:B+=j1(D);break;case 9:case 10:case 13:case 32:B+=Ele(k);break;case 92:B+=Ple(_2()-1,7);continue;case 47:switch(bl()){case 42:case 47:w1(pEe(kle(Bi(),_2()),t,n),d);break;default:B+="/"}break;case 123*M:c[g++]=Fi(B)*T;case 125*M:case 59:case 0:switch(D){case 0:case 125:C=0;case 59+O:T==-1&&(B=Nr(B,/\f/g,"")),R>0&&Fi(B)-S&&w1(R>32?Mle(B+";",r,n,S-1):Mle(Nr(B," ","")+";",r,n,S-2),d);break;case 59:B+=";";default:if(w1(K=Ale(B,t,n,g,O,o,c,U,G=[],Y=[],S),i),D===123)if(O===0)jj(B,t,K,K,G,i,S,c,Y);else switch(I===99&&oo(B,3)===110?100:I){case 100:case 108:case 109:case 115:jj(e,K,K,r&&w1(Ale(e,K,K,0,0,o,c,U,o,G=[],S),Y),o,Y,S,c,r?G:Y);break;default:jj(B,K,K,K,[""],Y,0,c,Y)}}g=O=R=0,M=T=1,U=B="",S=u;break;case 58:S=1+Fi(B),R=k;default:if(M<1){if(D==123)--M;else if(D==125&&M++==0&&jle()==125)continue}switch(B+=Ed(D),D*M){case 38:T=O>0?1:(B+="\f",-1);break;case 44:c[g++]=(Fi(B)-1)*T,T=1;break;case 64:bl()===45&&(B+=j1(Bi())),I=bl(),O=S=Fi(U=B+=Cle(_2())),D++;break;case 45:k===45&&Fi(B)==2&&(M=0)}}return i}function Ale(e,t,n,r,o,i,u,c,d,g,O){for(var S=o-1,I=o===0?i:[""],R=b1(I),k=0,M=0,C=0;k0?I[T]+" "+D:Nr(D,/&\f/g,I[T])))&&(d[C++]=U);return x2(e,t,n,o===0?v1:c,d,g,O)}function pEe(e,t,n){return x2(e,t,n,wj,Ed(Ile()),Lp(e,2,-2),0)}function Mle(e,t,n,r){return x2(e,t,n,y1,Lp(e,0,r),Lp(e,r+1,-1),r)}function Pd(e,t){for(var n="",r=b1(e),o=0;o6)switch(oo(e,t+1)){case 109:if(oo(e,t+4)!==45)break;case 102:return Nr(e,/(.+:)(.+)-([^]+)/,"$1"+qr+"$2-$3$1"+w2+(oo(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~O2(e,"stretch")?Fle(Nr(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(oo(e,t+1)!==115)break;case 6444:switch(oo(e,Fi(e)-3-(~O2(e,"!important")&&10))){case 107:return Nr(e,":",":"+qr)+e;case 101:return Nr(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+qr+(oo(e,14)===45?"inline-":"")+"box$3$1"+qr+"$2$3$1"+ri+"$2box$3")+e}break;case 5936:switch(oo(e,t+11)){case 114:return qr+e+ri+Nr(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return qr+e+ri+Nr(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return qr+e+ri+Nr(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return qr+e+ri+e+e}return e}var vEe=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case y1:t.return=Fle(t.value,t.length);break;case Oj:return Pd([S1(t,{value:Nr(t.value,"@","@"+qr)})],o);case v1:if(t.length)return SN(t.props,function(i){switch(_N(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Pd([S1(t,{props:[Nr(i,/:(read-\w+)/,":"+w2+"$1")]})],o);case"::placeholder":return Pd([S1(t,{props:[Nr(i,/:(plac\w+)/,":"+qr+"input-$1")]}),S1(t,{props:[Nr(i,/:(plac\w+)/,":"+w2+"$1")]}),S1(t,{props:[Nr(i,/:(plac\w+)/,ri+"input-$1")]})],o)}return""})}},yEe=[vEe],Wle=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(M){var C=M.getAttribute("data-emotion");C.indexOf(" ")!==-1&&(document.head.appendChild(M),M.setAttribute("data-s",""))})}var o=t.stylisPlugins||yEe,i={},u,c=[];u=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(M){for(var C=M.getAttribute("data-emotion").split(" "),T=1;T=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Zle={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var MEe=!1,TEe=/[A-Z]|^ms/g,REe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,nse=function(t){return t.charCodeAt(1)===45},ese=function(t){return t!=null&&typeof t!="boolean"},MN=Lle(function(e){return nse(e)?e:e.replace(TEe,"-$&").toLowerCase()}),tse=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(REe,function(r,o,i){return Us={name:o,styles:i,next:Us},o})}return Zle[t]!==1&&!nse(t)&&typeof n=="number"&&n!==0?n+"px":n},zEe="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function S2(e,t,n){if(n==null)return"";var r=n;if(r.__emotion_styles!==void 0)return r;switch(typeof n){case"boolean":return"";case"object":{var o=n;if(o.anim===1)return Us={name:o.name,styles:o.styles,next:Us},o.name;var i=n;if(i.styles!==void 0){var u=i.next;if(u!==void 0)for(;u!==void 0;)Us={name:u.name,styles:u.styles,next:Us},u=u.next;var c=i.styles+";";return c}return DEe(e,t,n)}case"function":{if(e!==void 0){var d=Us,g=n(e);return Us=d,S2(e,t,g)}break}}var O=n;if(t==null)return O;var S=t[O];return S!==void 0?S:O}function DEe(e,t,n){var r="";if(Array.isArray(n))for(var o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);nsummary:first-of-type","details"],MN=DEe.join(","),pse=typeof Element>"u",j2=pse?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,TN=!pse&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},fse=function(t,n,r){var o=Array.prototype.slice.apply(t.querySelectorAll(MN));return n&&j2.call(t,MN)&&o.unshift(t),o=o.filter(r),o},dse=function e(t,n,r){for(var o=[],i=Array.from(t);i.length;){var u=i.shift();if(u.tagName==="SLOT"){var c=u.assignedElements(),d=c.length?c:u.children,g=e(d,!0,r);r.flatten?o.push.apply(o,g):o.push({scope:u,candidates:g})}else{var O=j2.call(u,MN);O&&r.filter(u)&&(n||!t.includes(u))&&o.push(u);var S=u.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(u),I=!r.shadowRootFilter||r.shadowRootFilter(u);if(S&&I){var R=e(S===!0?u.children:S.children,!0,r);r.flatten?o.push.apply(o,R):o.push({scope:u,candidates:R})}else i.unshift.apply(i,u.children)}}return o},mse=function(t,n){return t.tabIndex<0&&(n||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},LEe=function(t,n){return t.tabIndex===n.tabIndex?t.documentOrder-n.documentOrder:t.tabIndex-n.tabIndex},hse=function(t){return t.tagName==="INPUT"},NEe=function(t){return hse(t)&&t.type==="hidden"},FEe=function(t){var n=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(r){return r.tagName==="SUMMARY"});return n},WEe=function(t,n){for(var r=0;rsummary:first-of-type"),u=i?t.parentElement:t;if(j2.call(u,"details:not([open]) *"))return!0;var c=TN(t).host,d=c?.ownerDocument.contains(c)||t.ownerDocument.contains(t);if(!r||r==="full"){if(typeof o=="function"){for(var g=t;t;){var O=t.parentElement,S=TN(t);if(O&&!O.shadowRoot&&o(O)===!0)return use(t);t.assignedSlot?t=t.assignedSlot:!O&&S!==t.ownerDocument?t=S.host:t=O}t=g}if(d)return!t.getClientRects().length}else if(r==="non-zero-area")return use(t);return!1},UEe=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var n=t.parentElement;n;){if(n.tagName==="FIELDSET"&&n.disabled){for(var r=0;r=0)},JEe=function e(t){var n=[],r=[];return t.forEach(function(o,i){var u=!!o.scope,c=u?o.scope:o,d=mse(c,u),g=u?e(o.candidates):c;d===0?u?n.push.apply(n,g):n.push(c):r.push({documentOrder:i,tabIndex:d,item:o,isScope:u,content:g})}),r.sort(LEe).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(n)},gse=function(t,n){n=n||{};var r;return n.getShadowRoot?r=dse([t],n.includeContainer,{filter:cse.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:$Ee}):r=fse(t,n.includeContainer,cse.bind(null,n)),JEe(r)},vse=function(t,n){n=n||{};var r;return n.getShadowRoot?r=dse([t],n.includeContainer,{filter:RN.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):r=fse(t,n.includeContainer,RN.bind(null,n)),r};var Fr={};$(Fr,{ALT:()=>QEe,ARROW_DOWN:()=>NN,ARROW_LEFT:()=>WN,ARROW_RIGHT:()=>BN,ARROW_UP:()=>FN,BACKSPACE:()=>KEe,CTRL:()=>ePe,END:()=>oPe,ENTER:()=>GEe,ESCAPE:()=>DN,F2:()=>YEe,HOME:()=>iPe,META:()=>tPe,PAGE_DOWN:()=>nPe,PAGE_UP:()=>rPe,SHIFT:()=>ZEe,SPACE:()=>XEe,TAB:()=>LN,keys:()=>zN});var GEe="Enter",XEe=" ",DN="Escape",LN="Tab",KEe="Backspace",YEe="F2",QEe="Alt",ZEe="Shift",ePe="Control",tPe="Meta",NN="ArrowDown",FN="ArrowUp",WN="ArrowLeft",BN="ArrowRight",rPe="PageUp",nPe="PageDown",oPe="End",iPe="Home",zN;(function(e){e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home"})(zN||(zN={}));var Us={ARROW_DOWN:NN,ARROW_LEFT:WN,ARROW_RIGHT:BN,ARROW_UP:FN,ESCAPE:DN,TAB:LN};var qj,aPe=new Uint8Array(16);function HN(){if(!qj&&(qj=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!qj))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return qj(aPe)}var yse=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function lPe(e){return typeof e=="string"&&yse.test(e)}var bse=lPe;var ni=[];for(Uj=0;Uj<256;++Uj)ni.push((Uj+256).toString(16).substr(1));var Uj;function sPe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=(ni[e[t+0]]+ni[e[t+1]]+ni[e[t+2]]+ni[e[t+3]]+"-"+ni[e[t+4]]+ni[e[t+5]]+"-"+ni[e[t+6]]+ni[e[t+7]]+"-"+ni[e[t+8]]+ni[e[t+9]]+"-"+ni[e[t+10]]+ni[e[t+11]]+ni[e[t+12]]+ni[e[t+13]]+ni[e[t+14]]+ni[e[t+15]]).toLowerCase();if(!bse(n))throw TypeError("Stringified UUID is invalid");return n}var wse=sPe;var Ose,VN,qN=0,UN=0;function uPe(e,t,n){var r=t&&n||0,o=t||new Array(16);e=e||{};var i=e.node||Ose,u=e.clockseq!==void 0?e.clockseq:VN;if(i==null||u==null){var c=e.random||(e.rng||HN)();i==null&&(i=Ose=[c[0]|1,c[1],c[2],c[3],c[4],c[5]]),u==null&&(u=VN=(c[6]<<8|c[7])&16383)}var d=e.msecs!==void 0?e.msecs:Date.now(),g=e.nsecs!==void 0?e.nsecs:UN+1,O=d-qN+(g-UN)/1e4;if(O<0&&e.clockseq===void 0&&(u=u+1&16383),(O<0||d>qN)&&e.nsecs===void 0&&(g=0),g>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");qN=d,UN=g,VN=u,d+=122192928e5;var S=((d&268435455)*1e4+g)%4294967296;o[r++]=S>>>24&255,o[r++]=S>>>16&255,o[r++]=S>>>8&255,o[r++]=S&255;var I=d/4294967296*1e4&268435455;o[r++]=I>>>8&255,o[r++]=I&255,o[r++]=I>>>24&15|16,o[r++]=I>>>16&255,o[r++]=u>>>8|128,o[r++]=u&255;for(var R=0;R<6;++R)o[r+R]=i[R];return t||wse(o)}var $j=uPe;var xse=E(D());function _r(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=$j();return function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r="".concat(e).concat(e!==""?"_":"i"),o=n?"_".concat(n):"";return"".concat(r).concat(o?t:$j()).concat(o)}}var Ju=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.prefix,r=t.suffix,o=t.conditionalId;return(0,xse.useMemo)(function(){return o||_r(n)(r)},[o,n,r])};var wl="left",rs="right",Gu="center";function kt(e){return Object.keys(e)}var Jj={xl:1200,l:992,m:768,s:575,xs:0};var $N=Jj,_se=kt($N);function Gj(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:$N;return _se.find(function(n){return t[n]<=e})}var V1=E(D());var M2=E(D());var Fp={light:"LIGHT",dark:"DARK"},Sse="INVERSE";function Ise(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function JN(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[];gPe(this,e),this.computer=t,this.dependencies=n}return vPe(e,[{key:"getValue",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if(!this.dependencies.length)return this.computer(o);if(!Array.isArray(this.dependencies)){var u,c;return this.computer((u=(c=Xu(o,this.dependencies))!==null&&c!==void 0?c:Xu(r,this.dependencies,i))!==null&&u!==void 0?u:Xu(n,this.dependencies,i))}return this.computer(this.dependencies.map(function(d){var g,O;return(g=(O=Xu(o,d))!==null&&O!==void 0?O:Xu(r,d,i))!==null&&g!==void 0?g:Xu(n,d,i)}))}}]),e}();function gr(e,t){return new E2(e,t)}var P2=function(t,n,r){var o={themeName:t.key};function i(u,c){var d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,g=arguments.length>3?arguments[3]:void 0;Object.keys(u).forEach(function(O){var S=g?"".concat(g,".").concat(O):"".concat(O);if([].concat(pPe(Object.values(Fp)),[r]).includes(O)){if(O!==r)return;var I=new RegExp("(\\.".concat(r,"\\b)|(\\b").concat(r,"\\.)"));S=S.replace(I,"")}var R=d&&Xu(o,S);if(!R||Ed(R)){var k=u[O]instanceof E2?u[O].getValue(u.root,c.root,o,r):u[O],A=c[O]instanceof E2?c[O].getValue(u.root,c.root,o,r):c[O];Ed(k)&&!Array.isArray(k)?i(k,A??{},d,S):bPe(o,S,A??k)}})}return i(t,n),i(n,{},!0),o},k2=function(t,n){var r={getPrototypeOf:function(u){return Reflect.getPrototypeOf(u.model)},setPrototypeOf:function(u,c){return Reflect.setPrototypeOf(u.model,c)},isExtensible:function(u){return Reflect.isExtensible(u)},preventExtensions:function(u){return Reflect.preventExtensions(u.model)},getOwnPropertyDescriptor:function(u,c){return Reflect.getOwnPropertyDescriptor(u.model,c)},defineProperty:function(u,c,d){return Reflect.defineProperty(u.model,c,d)},has:function(u,c){return Reflect.has(u.model,c)},get:function(u,c){if(c==="key")return u[c];if(c==="__proto__")return{};var d=c==="root"?u:u.model||u,g=d[c];return Ed(g)&&!Array.isArray(g)?new Proxy({model:g,root:u.root,key:"_".concat(u.key)},r):g},set:function(u){return u},deleteProperty:function(u){return u},ownKeys:function(u){return Reflect.ownKeys(u.model)},apply:function(u){return u},construct:function(u){return u}},o=new Proxy({model:t,root:t,key:n},r);return o},KN=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=JN({},t);return!Ed(r)||!Ed(n)?n:(Object.keys(n).forEach(function(o){var i=r[o],u=n[o];Ed(i)&&Ed(u)?r[o]=e(JN({},i),JN({},u)):r[o]=u}),r)};function wPe(e,t){return SPe(e)||_Pe(e,t)||xPe(e,t)||OPe()}function OPe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xPe(e,t){if(e){if(typeof e=="string")return Ese(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ese(e,t)}}function Ese(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nj1(E1(t,e),n);var Pd=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let t=0;t<=3;t++)t<3?((e[t]<0||e[t]>255)&&(e._clipped=!0),e[t]=$s(e[t],0,255)):t===3&&(e[t]=$s(e[t],0,1));return e};var Pse={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Pse[`[object ${e}]`]=e.toLowerCase();function St(e){return Pse[Object.prototype.toString.call(e)]||"object"}var pt=(e,t=null)=>e.length>=3?Array.prototype.slice.call(e):St(e[0])=="object"&&t?t.split("").filter(n=>e[0][n]!==void 0).map(n=>e[0][n]):e[0];var Ku=e=>{if(e.length<2)return null;let t=e.length-1;return St(e[t])=="string"?e[t].toLowerCase():null};var{PI:Qj,min:j1,max:E1}=Math,Ol=Qj*2,Zj=Qj/3,kse=Qj/180,Cse=180/Qj;var Et={format:{},autodetect:[]};var QN=class{constructor(...t){let n=this;if(St(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let r=Ku(t),o=!1;if(!r){o=!0,Et.sorted||(Et.autodetect=Et.autodetect.sort((i,u)=>u.p-i.p),Et.sorted=!0);for(let i of Et.autodetect)if(r=i.test(...t),r)break}if(Et.format[r]){let i=Et.format[r].apply(null,o?t:t.slice(0,-1));n._rgb=Pd(i)}else throw new Error("unknown format: "+t);n._rgb.length===3&&n._rgb.push(1)}toString(){return St(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}},Le=QN;var Ase="2.6.0";var eE=(...e)=>new eE.Color(...e);eE.Color=Le;eE.version=Ase;var Tt=eE;var IPe=(...e)=>{e=pt(e,"cmyk");let[t,n,r,o]=e,i=e.length>4?e[4]:1;return o===1?[0,0,0,i]:[t>=1?0:255*(1-t)*(1-o),n>=1?0:255*(1-n)*(1-o),r>=1?0:255*(1-r)*(1-o),i]},Mse=IPe;var{max:Tse}=Math,jPe=(...e)=>{let[t,n,r]=pt(e,"rgb");t=t/255,n=n/255,r=r/255;let o=1-Tse(t,Tse(n,r)),i=o<1?1/(1-o):0,u=(1-t-o)*i,c=(1-n-o)*i,d=(1-r-o)*i;return[u,c,d,o]},Rse=jPe;Le.prototype.cmyk=function(){return Rse(this._rgb)};Tt.cmyk=(...e)=>new Le(...e,"cmyk");Et.format.cmyk=Mse;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"cmyk"),St(e)==="array"&&e.length===4)return"cmyk"}});var ZN=e=>Math.round(e*100)/100,EPe=(...e)=>{let t=pt(e,"hsla"),n=Ku(e)||"lsa";return t[0]=ZN(t[0]||0),t[1]=ZN(t[1]*100)+"%",t[2]=ZN(t[2]*100)+"%",n==="hsla"||t.length>3&&t[3]<1?(t[3]=t.length>3?t[3]:1,n="hsla"):t.length=3,`${n}(${t.join(",")})`},zse=EPe;var PPe=(...e)=>{e=pt(e,"rgba");let[t,n,r]=e;t/=255,n/=255,r/=255;let o=j1(t,n,r),i=E1(t,n,r),u=(i+o)/2,c,d;return i===o?(c=0,d=Number.NaN):c=u<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?d=(n-r)/(i-o):n==i?d=2+(r-t)/(i-o):r==i&&(d=4+(t-n)/(i-o)),d*=60,d<0&&(d+=360),e.length>3&&e[3]!==void 0?[d,c,u,e[3]]:[d,c,u]},tE=PPe;var{round:eF}=Math,kPe=(...e)=>{let t=pt(e,"rgba"),n=Ku(e)||"rgb";return n.substr(0,3)=="hsl"?zse(tE(t),n):(t[0]=eF(t[0]),t[1]=eF(t[1]),t[2]=eF(t[2]),(n==="rgba"||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),`${n}(${t.slice(0,n==="rgb"?3:4).join(",")})`)},Dse=kPe;var{round:tF}=Math,CPe=(...e)=>{e=pt(e,"hsl");let[t,n,r]=e,o,i,u;if(n===0)o=i=u=r*255;else{let c=[0,0,0],d=[0,0,0],g=r<.5?r*(1+n):r+n-r*n,O=2*r-g,S=t/360;c[0]=S+1/3,c[1]=S,c[2]=S-1/3;for(let I=0;I<3;I++)c[I]<0&&(c[I]+=1),c[I]>1&&(c[I]-=1),6*c[I]<1?d[I]=O+(g-O)*6*c[I]:2*c[I]<1?d[I]=g:3*c[I]<2?d[I]=O+(g-O)*(2/3-c[I])*6:d[I]=O;[o,i,u]=[tF(d[0]*255),tF(d[1]*255),tF(d[2]*255)]}return e.length>3?[o,i,u,e[3]]:[o,i,u,1]},C2=CPe;var Nse=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Fse=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,Wse=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Bse=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Hse=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Vse=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:Lse}=Math,qse=e=>{e=e.toLowerCase().trim();let t;if(Et.format.named)try{return Et.format.named(e)}catch{}if(t=e.match(Nse)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=+n[r];return n[3]=1,n}if(t=e.match(Fse)){let n=t.slice(1,5);for(let r=0;r<4;r++)n[r]=+n[r];return n}if(t=e.match(Wse)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=Lse(n[r]*2.55);return n[3]=1,n}if(t=e.match(Bse)){let n=t.slice(1,5);for(let r=0;r<3;r++)n[r]=Lse(n[r]*2.55);return n[3]=+n[3],n}if(t=e.match(Hse)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=C2(n);return r[3]=1,r}if(t=e.match(Vse)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=C2(n);return r[3]=+t[4],r}};qse.test=e=>Nse.test(e)||Fse.test(e)||Wse.test(e)||Bse.test(e)||Hse.test(e)||Vse.test(e);var rF=qse;Le.prototype.css=function(e){return Dse(this._rgb,e)};Tt.css=(...e)=>new Le(...e,"css");Et.format.css=rF;Et.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&St(e)==="string"&&rF.test(e))return"css"}});Et.format.gl=(...e)=>{let t=pt(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};Tt.gl=(...e)=>new Le(...e,"gl");Le.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:APe}=Math,MPe=(...e)=>{e=pt(e,"hcg");let[t,n,r]=e,o,i,u;r=r*255;let c=n*255;if(n===0)o=i=u=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let d=APe(t),g=t-d,O=r*(1-n),S=O+c*(1-g),I=O+c*g,R=O+c;switch(d){case 0:[o,i,u]=[R,I,O];break;case 1:[o,i,u]=[S,R,O];break;case 2:[o,i,u]=[O,R,I];break;case 3:[o,i,u]=[O,S,R];break;case 4:[o,i,u]=[I,O,R];break;case 5:[o,i,u]=[R,O,S];break}}return[o,i,u,e.length>3?e[3]:1]},Use=MPe;var TPe=(...e)=>{let[t,n,r]=pt(e,"rgb"),o=j1(t,n,r),i=E1(t,n,r),u=i-o,c=u*100/255,d=o/(255-u)*100,g;return u===0?g=Number.NaN:(t===i&&(g=(n-r)/u),n===i&&(g=2+(r-t)/u),r===i&&(g=4+(t-n)/u),g*=60,g<0&&(g+=360)),[g,c,d]},$se=TPe;Le.prototype.hcg=function(){return $se(this._rgb)};Tt.hcg=(...e)=>new Le(...e,"hcg");Et.format.hcg=Use;Et.autodetect.push({p:1,test:(...e)=>{if(e=pt(e,"hcg"),St(e)==="array"&&e.length===3)return"hcg"}});var RPe=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,zPe=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,DPe=e=>{if(e.match(RPe)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);let t=parseInt(e,16),n=t>>16,r=t>>8&255,o=t&255;return[n,r,o,1]}if(e.match(zPe)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let t=parseInt(e,16),n=t>>24&255,r=t>>16&255,o=t>>8&255,i=Math.round((t&255)/255*100)/100;return[n,r,o,i]}throw new Error(`unknown hex color: ${e}`)},rE=DPe;var{round:nE}=Math,LPe=(...e)=>{let[t,n,r,o]=pt(e,"rgba"),i=Ku(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=nE(t),n=nE(n),r=nE(r);let c="000000"+(t<<16|n<<8|r).toString(16);c=c.substr(c.length-6);let d="0"+nE(o*255).toString(16);switch(d=d.substr(d.length-2),i.toLowerCase()){case"rgba":return`#${c}${d}`;case"argb":return`#${d}${c}`;default:return`#${c}`}},oE=LPe;Le.prototype.hex=function(e){return oE(this._rgb,e)};Tt.hex=(...e)=>new Le(...e,"hex");Et.format.hex=rE;Et.autodetect.push({p:4,test:(e,...t)=>{if(!t.length&&St(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});var{cos:P1}=Math,NPe=(...e)=>{e=pt(e,"hsi");let[t,n,r]=e,o,i,u;return isNaN(t)&&(t=0),isNaN(n)&&(n=0),t>360&&(t-=360),t<0&&(t+=360),t/=360,t<1/3?(u=(1-n)/3,o=(1+n*P1(Ol*t)/P1(Zj-Ol*t))/3,i=1-(u+o)):t<2/3?(t-=1/3,o=(1-n)/3,i=(1+n*P1(Ol*t)/P1(Zj-Ol*t))/3,u=1-(o+i)):(t-=2/3,i=(1-n)/3,u=(1+n*P1(Ol*t)/P1(Zj-Ol*t))/3,o=1-(i+u)),o=$s(r*o*3),i=$s(r*i*3),u=$s(r*u*3),[o*255,i*255,u*255,e.length>3?e[3]:1]},Jse=NPe;var{min:FPe,sqrt:WPe,acos:BPe}=Math,HPe=(...e)=>{let[t,n,r]=pt(e,"rgb");t/=255,n/=255,r/=255;let o,i=FPe(t,n,r),u=(t+n+r)/3,c=u>0?1-i/u:0;return c===0?o=NaN:(o=(t-n+(t-r))/2,o/=WPe((t-n)*(t-n)+(t-r)*(n-r)),o=BPe(o),r>n&&(o=Ol-o),o/=Ol),[o*360,c,u]},Gse=HPe;Le.prototype.hsi=function(){return Gse(this._rgb)};Tt.hsi=(...e)=>new Le(...e,"hsi");Et.format.hsi=Jse;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"hsi"),St(e)==="array"&&e.length===3)return"hsi"}});Le.prototype.hsl=function(){return tE(this._rgb)};Tt.hsl=(...e)=>new Le(...e,"hsl");Et.format.hsl=C2;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"hsl"),St(e)==="array"&&e.length===3)return"hsl"}});var{floor:VPe}=Math,qPe=(...e)=>{e=pt(e,"hsv");let[t,n,r]=e,o,i,u;if(r*=255,n===0)o=i=u=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let c=VPe(t),d=t-c,g=r*(1-n),O=r*(1-n*d),S=r*(1-n*(1-d));switch(c){case 0:[o,i,u]=[r,S,g];break;case 1:[o,i,u]=[O,r,g];break;case 2:[o,i,u]=[g,r,S];break;case 3:[o,i,u]=[g,O,r];break;case 4:[o,i,u]=[S,g,r];break;case 5:[o,i,u]=[r,g,O];break}}return[o,i,u,e.length>3?e[3]:1]},Xse=qPe;var{min:UPe,max:$Pe}=Math,JPe=(...e)=>{e=pt(e,"rgb");let[t,n,r]=e,o=UPe(t,n,r),i=$Pe(t,n,r),u=i-o,c,d,g;return g=i/255,i===0?(c=Number.NaN,d=0):(d=u/i,t===i&&(c=(n-r)/u),n===i&&(c=2+(r-t)/u),r===i&&(c=4+(t-n)/u),c*=60,c<0&&(c+=360)),[c,d,g]},Kse=JPe;Le.prototype.hsv=function(){return Kse(this._rgb)};Tt.hsv=(...e)=>new Le(...e,"hsv");Et.format.hsv=Xse;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"hsv"),St(e)==="array"&&e.length===3)return"hsv"}});var Fo={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:GPe}=Math,XPe=(...e)=>{e=pt(e,"lab");let[t,n,r]=e,o,i,u,c,d,g;return i=(t+16)/116,o=isNaN(n)?i:i+n/500,u=isNaN(r)?i:i-r/200,i=Fo.Yn*oF(i),o=Fo.Xn*oF(o),u=Fo.Zn*oF(u),c=nF(3.2404542*o-1.5371385*i-.4985314*u),d=nF(-.969266*o+1.8760108*i+.041556*u),g=nF(.0556434*o-.2040259*i+1.0572252*u),[c,d,g,e.length>3?e[3]:1]},nF=e=>255*(e<=.00304?12.92*e:1.055*GPe(e,1/2.4)-.055),oF=e=>e>Fo.t1?e*e*e:Fo.t2*(e-Fo.t0),iE=XPe;var{pow:Yse}=Math,KPe=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=YPe(t,n,r),c=116*i-16;return[c<0?0:c,500*(o-i),200*(i-u)]},iF=e=>(e/=255)<=.04045?e/12.92:Yse((e+.055)/1.055,2.4),aF=e=>e>Fo.t3?Yse(e,1/3):e/Fo.t2+Fo.t0,YPe=(e,t,n)=>{e=iF(e),t=iF(t),n=iF(n);let r=aF((.4124564*e+.3575761*t+.1804375*n)/Fo.Xn),o=aF((.2126729*e+.7151522*t+.072175*n)/Fo.Yn),i=aF((.0193339*e+.119192*t+.9503041*n)/Fo.Zn);return[r,o,i]},aE=KPe;Le.prototype.lab=function(){return aE(this._rgb)};Tt.lab=(...e)=>new Le(...e,"lab");Et.format.lab=iE;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"lab"),St(e)==="array"&&e.length===3)return"lab"}});var{sin:QPe,cos:ZPe}=Math,eke=(...e)=>{let[t,n,r]=pt(e,"lch");return isNaN(r)&&(r=0),r=r*kse,[t,ZPe(r)*n,QPe(r)*n]},lE=eke;var tke=(...e)=>{e=pt(e,"lch");let[t,n,r]=e,[o,i,u]=lE(t,n,r),[c,d,g]=iE(o,i,u);return[c,d,g,e.length>3?e[3]:1]},sE=tke;var rke=(...e)=>{let t=pt(e,"hcl").reverse();return sE(...t)},Qse=rke;var{sqrt:nke,atan2:oke,round:ike}=Math,ake=(...e)=>{let[t,n,r]=pt(e,"lab"),o=nke(n*n+r*r),i=(oke(r,n)*Cse+360)%360;return ike(o*1e4)===0&&(i=Number.NaN),[t,o,i]},uE=ake;var lke=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=aE(t,n,r);return uE(o,i,u)},lF=lke;Le.prototype.lch=function(){return lF(this._rgb)};Le.prototype.hcl=function(){return lF(this._rgb).reverse()};Tt.lch=(...e)=>new Le(...e,"lch");Tt.hcl=(...e)=>new Le(...e,"hcl");Et.format.lch=sE;Et.format.hcl=Qse;["lch","hcl"].forEach(e=>Et.autodetect.push({p:2,test:(...t)=>{if(t=pt(t,e),St(t)==="array"&&t.length===3)return e}}));var ske={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},Wp=ske;Le.prototype.name=function(){let e=oE(this._rgb,"rgb");for(let t of Object.keys(Wp))if(Wp[t]===e)return t.toLowerCase();return e};Et.format.named=e=>{if(e=e.toLowerCase(),Wp[e])return rE(Wp[e]);throw new Error("unknown color name: "+e)};Et.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&St(e)==="string"&&Wp[e.toLowerCase()])return"named"}});var uke=e=>{if(St(e)=="number"&&e>=0&&e<=16777215){let t=e>>16,n=e>>8&255,r=e&255;return[t,n,r,1]}throw new Error("unknown num color: "+e)},Zse=uke;var cke=(...e)=>{let[t,n,r]=pt(e,"rgb");return(t<<16)+(n<<8)+r},eue=cke;Le.prototype.num=function(){return eue(this._rgb)};Tt.num=(...e)=>new Le(...e,"num");Et.format.num=Zse;Et.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&St(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});var{round:tue}=Math;Le.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(tue)};Le.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,n)=>n<3?e===!1?t:tue(t):t)};Tt.rgb=(...e)=>new Le(...e,"rgb");Et.format.rgb=(...e)=>{let t=pt(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Et.autodetect.push({p:3,test:(...e)=>{if(e=pt(e,"rgba"),St(e)==="array"&&(e.length===3||e.length===4&&St(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});var{log:cE}=Math,pke=e=>{let t=e/100,n,r,o;return t<66?(n=255,r=t<6?0:-155.25485562709179-.44596950469579133*(r=t-2)+104.49216199393888*cE(r),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*cE(o)):(n=351.97690566805693+.114206453784165*(n=t-55)-40.25366309332127*cE(n),r=325.4494125711974+.07943456536662342*(r=t-50)-28.0852963507957*cE(r),o=255),[n,r,o,1]},pE=pke;var{round:fke}=Math,dke=(...e)=>{let t=pt(e,"rgb"),n=t[0],r=t[2],o=1e3,i=4e4,u=.4,c;for(;i-o>u;){c=(i+o)*.5;let d=pE(c);d[2]/d[0]>=r/n?i=c:o=c}return fke(c)},rue=dke;Le.prototype.temp=Le.prototype.kelvin=Le.prototype.temperature=function(){return rue(this._rgb)};Tt.temp=Tt.kelvin=Tt.temperature=(...e)=>new Le(...e,"temp");Et.format.temp=Et.format.kelvin=Et.format.temperature=pE;var{pow:fE,sign:mke}=Math,hke=(...e)=>{e=pt(e,"lab");let[t,n,r]=e,o=fE(t+.3963377774*n+.2158037573*r,3),i=fE(t-.1055613458*n-.0638541728*r,3),u=fE(t-.0894841775*n-1.291485548*r,3);return[255*sF(4.0767416621*o-3.3077115913*i+.2309699292*u),255*sF(-1.2684380046*o+2.6097574011*i-.3413193965*u),255*sF(-.0041960863*o-.7034186147*i+1.707614701*u),e.length>3?e[3]:1]},dE=hke;function sF(e){let t=Math.abs(e);return t>.0031308?(mke(e)||1)*(1.055*fE(t,1/2.4)-.055):e*12.92}var{cbrt:uF,pow:gke,sign:vke}=Math,yke=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=[cF(t/255),cF(n/255),cF(r/255)],c=uF(.4122214708*o+.5363325363*i+.0514459929*u),d=uF(.2119034982*o+.6806995451*i+.1073969566*u),g=uF(.0883024619*o+.2817188376*i+.6299787005*u);return[.2104542553*c+.793617785*d-.0040720468*g,1.9779984951*c-2.428592205*d+.4505937099*g,.0259040371*c+.7827717662*d-.808675766*g]},mE=yke;function cF(e){let t=Math.abs(e);return t<.04045?e/12.92:(vke(e)||1)*gke((t+.055)/1.055,2.4)}Le.prototype.oklab=function(){return mE(this._rgb)};Tt.oklab=(...e)=>new Le(...e,"oklab");Et.format.oklab=dE;Et.autodetect.push({p:3,test:(...e)=>{if(e=pt(e,"oklab"),St(e)==="array"&&e.length===3)return"oklab"}});var bke=(...e)=>{e=pt(e,"lch");let[t,n,r]=e,[o,i,u]=lE(t,n,r),[c,d,g]=dE(o,i,u);return[c,d,g,e.length>3?e[3]:1]},nue=bke;var wke=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=mE(t,n,r);return uE(o,i,u)},oue=wke;Le.prototype.oklch=function(){return oue(this._rgb)};Tt.oklch=(...e)=>new Le(...e,"oklch");Et.format.oklch=nue;Et.autodetect.push({p:3,test:(...e)=>{if(e=pt(e,"oklch"),St(e)==="array"&&e.length===3)return"oklch"}});Le.prototype.alpha=function(e,t=!1){return e!==void 0&&St(e)==="number"?t?(this._rgb[3]=e,this):new Le([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};Le.prototype.clipped=function(){return this._rgb._clipped||!1};Le.prototype.darken=function(e=1){let t=this,n=t.lab();return n[0]-=Fo.Kn*e,new Le(n,"lab").alpha(t.alpha(),!0)};Le.prototype.brighten=function(e=1){return this.darken(-e)};Le.prototype.darker=Le.prototype.darken;Le.prototype.brighter=Le.prototype.brighten;Le.prototype.get=function(e){let[t,n]=e.split("."),r=this[t]();if(n){let o=t.indexOf(n)-(t.substr(0,2)==="ok"?2:0);if(o>-1)return r[o];throw new Error(`unknown channel ${n} in mode ${t}`)}else return r};var{pow:Oke}=Math,xke=1e-7,_ke=20;Le.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&St(e)==="number"){if(e===0)return new Le([0,0,0,this._rgb[3]],"rgb");if(e===1)return new Le([255,255,255,this._rgb[3]],"rgb");let n=this.luminance(),r=_ke,o=(u,c)=>{let d=u.interpolate(c,.5,t),g=d.luminance();return Math.abs(e-g)e?o(u,d):o(d,c)},i=(n>e?o(new Le([0,0,0]),this):o(this,new Le([255,255,255]))).rgb();return new Le([...i,this._rgb[3]])}return Ske(...this._rgb.slice(0,3))};var Ske=(e,t,n)=>(e=pF(e),t=pF(t),n=pF(n),.2126*e+.7152*t+.0722*n),pF=e=>(e/=255,e<=.03928?e/12.92:Oke((e+.055)/1.055,2.4));var fn={};var Bp=(e,t,n=.5,...r)=>{let o=r[0]||"lrgb";if(!fn[o]&&!r.length&&(o=Object.keys(fn)[0]),!fn[o])throw new Error(`interpolation mode ${o} is not defined`);return St(e)!=="object"&&(e=new Le(e)),St(t)!=="object"&&(t=new Le(t)),fn[o](e,t,n).alpha(e.alpha()+n*(t.alpha()-e.alpha()))};Le.prototype.mix=Le.prototype.interpolate=function(e,t=.5,...n){return Bp(this,e,t,...n)};Le.prototype.premultiply=function(e=!1){let t=this._rgb,n=t[3];return e?(this._rgb=[t[0]*n,t[1]*n,t[2]*n,n],this):new Le([t[0]*n,t[1]*n,t[2]*n,n],"rgb")};Le.prototype.saturate=function(e=1){let t=this,n=t.lch();return n[1]+=Fo.Kn*e,n[1]<0&&(n[1]=0),new Le(n,"lch").alpha(t.alpha(),!0)};Le.prototype.desaturate=function(e=1){return this.saturate(-e)};Le.prototype.set=function(e,t,n=!1){let[r,o]=e.split("."),i=this[r]();if(o){let u=r.indexOf(o)-(r.substr(0,2)==="ok"?2:0);if(u>-1){if(St(t)=="string")switch(t.charAt(0)){case"+":i[u]+=+t;break;case"-":i[u]+=+t;break;case"*":i[u]*=+t.substr(1);break;case"/":i[u]/=+t.substr(1);break;default:i[u]=+t}else if(St(t)==="number")i[u]=t;else throw new Error("unsupported value for Color.set");let c=new Le(i,r);return n?(this._rgb=c._rgb,this):c}throw new Error(`unknown channel ${o} in mode ${r}`)}else return i};Le.prototype.tint=function(e=.5,...t){return Bp(this,"white",e,...t)};Le.prototype.shade=function(e=.5,...t){return Bp(this,"black",e,...t)};var Ike=(e,t,n)=>{let r=e._rgb,o=t._rgb;return new Le(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"rgb")};fn.rgb=Ike;var{sqrt:fF,pow:k1}=Math,jke=(e,t,n)=>{let[r,o,i]=e._rgb,[u,c,d]=t._rgb;return new Le(fF(k1(r,2)*(1-n)+k1(u,2)*n),fF(k1(o,2)*(1-n)+k1(c,2)*n),fF(k1(i,2)*(1-n)+k1(d,2)*n),"rgb")};fn.lrgb=jke;var Eke=(e,t,n)=>{let r=e.lab(),o=t.lab();return new Le(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"lab")};fn.lab=Eke;var xl=(e,t,n,r)=>{let o,i;r==="hsl"?(o=e.hsl(),i=t.hsl()):r==="hsv"?(o=e.hsv(),i=t.hsv()):r==="hcg"?(o=e.hcg(),i=t.hcg()):r==="hsi"?(o=e.hsi(),i=t.hsi()):r==="lch"||r==="hcl"?(r="hcl",o=e.hcl(),i=t.hcl()):r==="oklch"&&(o=e.oklch().reverse(),i=t.oklch().reverse());let u,c,d,g,O,S;(r.substr(0,1)==="h"||r==="oklch")&&([u,d,O]=o,[c,g,S]=i);let I,R,k,A;return!isNaN(u)&&!isNaN(c)?(c>u&&c-u>180?A=c-(u+360):c180?A=c+360-u:A=c-u,R=u+n*A):isNaN(u)?isNaN(c)?R=Number.NaN:(R=c,(O==1||O==0)&&r!="hsv"&&(I=g)):(R=u,(S==1||S==0)&&r!="hsv"&&(I=d)),I===void 0&&(I=d+n*(g-d)),k=O+n*(S-O),r==="oklch"?new Le([k,I,R],r):new Le([R,I,k],r)};var iue=(e,t,n)=>xl(e,t,n,"lch");fn.lch=iue;fn.hcl=iue;var Pke=(e,t,n)=>{let r=e.num(),o=t.num();return new Le(r+n*(o-r),"num")};fn.num=Pke;var kke=(e,t,n)=>xl(e,t,n,"hcg");fn.hcg=kke;var Cke=(e,t,n)=>xl(e,t,n,"hsi");fn.hsi=Cke;var Ake=(e,t,n)=>xl(e,t,n,"hsl");fn.hsl=Ake;var Mke=(e,t,n)=>xl(e,t,n,"hsv");fn.hsv=Mke;var Tke=(e,t,n)=>{let r=e.oklab(),o=t.oklab();return new Le(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"oklab")};fn.oklab=Tke;var Rke=(e,t,n)=>xl(e,t,n,"oklch");fn.oklch=Rke;var{pow:dF,sqrt:mF,PI:hF,cos:aue,sin:lue,atan2:zke}=Math,sue=(e,t="lrgb",n=null)=>{let r=e.length;n||(n=Array.from(new Array(r)).map(()=>1));let o=r/n.reduce(function(S,I){return S+I});if(n.forEach((S,I)=>{n[I]*=o}),e=e.map(S=>new Le(S)),t==="lrgb")return Dke(e,n);let i=e.shift(),u=i.get(t),c=[],d=0,g=0;for(let S=0;S{let R=S.get(t);O+=S.alpha()*n[I+1];for(let k=0;k=360;)I-=360;u[S]=I}else u[S]=u[S]/c[S];return O/=r,new Le(u,t).alpha(O>.99999?1:O,!0)},Dke=(e,t)=>{let n=e.length,r=[0,0,0,0];for(let o=0;o.9999999&&(r[3]=1),new Le(Pd(r))};var{pow:Lke}=Math;function kd(e){let t="rgb",n=Tt("#ccc"),r=0,o=[0,1],i=[],u=[0,0],c=!1,d=[],g=!1,O=0,S=1,I=!1,R={},k=!0,A=1,M=function(H){if(H=H||["#fff","#000"],H&&St(H)==="string"&&Tt.brewer&&Tt.brewer[H.toLowerCase()]&&(H=Tt.brewer[H.toLowerCase()]),St(H)==="array"){H.length===1&&(H=[H[0],H[0]]),H=H.slice(0);for(let ne=0;ne=c[pe];)pe++;return pe-1}return 0},N=H=>H,U=H=>H,X=function(H,ne){let pe,ye;if(ne==null&&(ne=!1),isNaN(H)||H===null)return n;ne?ye=H:c&&c.length>2?ye=T(H)/(c.length-2):S!==O?ye=(H-O)/(S-O):ye=1,ye=U(ye),ne||(ye=N(ye)),A!==1&&(ye=Lke(ye,A)),ye=u[0]+ye*(1-u[0]-u[1]),ye=$s(ye,0,1);let fe=Math.floor(ye*1e4);if(k&&R[fe])pe=R[fe];else{if(St(d)==="array")for(let ue=0;ue=xe&&ue===i.length-1){pe=d[ue];break}if(ye>xe&&yeR={};M(e);let K=function(H){let ne=Tt(X(H));return g&&ne[g]?ne[g]():ne};return K.classes=function(H){if(H!=null){if(St(H)==="array")c=H,o=[H[0],H[H.length-1]];else{let ne=Tt.analyze(o);H===0?c=[ne.min,ne.max]:c=Tt.limits(ne,"e",H)}return K}return c},K.domain=function(H){if(!arguments.length)return o;O=H[0],S=H[H.length-1],i=[];let ne=d.length;if(H.length===ne&&O!==S)for(let pe of Array.from(H))i.push((pe-O)/(S-O));else{for(let pe=0;pe2){let pe=H.map((fe,ue)=>ue/(H.length-1)),ye=H.map(fe=>(fe-O)/(S-O));ye.every((fe,ue)=>pe[ue]===fe)||(U=fe=>{if(fe<=0||fe>=1)return fe;let ue=0;for(;fe>=ye[ue+1];)ue++;let xe=(fe-ye[ue])/(ye[ue+1]-ye[ue]);return pe[ue]+xe*(pe[ue+1]-pe[ue])})}}return o=[O,S],K},K.mode=function(H){return arguments.length?(t=H,Y(),K):t},K.range=function(H,ne){return M(H,ne),K},K.out=function(H){return g=H,K},K.spread=function(H){return arguments.length?(r=H,K):r},K.correctLightness=function(H){return H==null&&(H=!0),I=H,Y(),I?N=function(ne){let pe=X(0,!0).lab()[0],ye=X(1,!0).lab()[0],fe=pe>ye,ue=X(ne,!0).lab()[0],xe=pe+(ye-pe)*ne,me=ue-xe,We=0,$e=1,Ge=20;for(;Math.abs(me)>.01&&Ge-- >0;)(function(){return fe&&(me*=-1),me<0?(We=ne,ne+=($e-ne)*.5):($e=ne,ne+=(We-ne)*.5),ue=X(ne,!0).lab()[0],me=ue-xe})();return ne}:N=ne=>ne,K},K.padding=function(H){return H!=null?(St(H)==="number"&&(H=[H,H]),u=H,K):u},K.colors=function(H,ne){arguments.length<2&&(ne="hex");let pe=[];if(arguments.length===0)pe=d.slice(0);else if(H===1)pe=[K(.5)];else if(H>1){let ye=o[0],fe=o[1]-ye;pe=Nke(0,H,!1).map(ue=>K(ye+ue/(H-1)*fe))}else{e=[];let ye=[];if(c&&c.length>2)for(let fe=1,ue=c.length,xe=1<=ue;xe?feue;xe?fe++:fe--)ye.push((c[fe-1]+c[fe])*.5);else ye=o;pe=ye.map(fe=>K(fe))}return Tt[ne]&&(pe=pe.map(ye=>ye[ne]())),pe},K.cache=function(H){return H!=null?(k=H,K):k},K.gamma=function(H){return H!=null?(A=H,K):A},K.nodata=function(H){return H!=null?(n=Tt(H),K):n},K}function Nke(e,t,n){let r=[],o=ei;o?u++:u--)r.push(u);return r}var Fke=function(e){let t=[1,1];for(let n=1;nnew Le(i)),e.length===2)[n,r]=e.map(i=>i.lab()),t=function(i){let u=[0,1,2].map(c=>n[c]+i*(r[c]-n[c]));return new Le(u,"lab")};else if(e.length===3)[n,r,o]=e.map(i=>i.lab()),t=function(i){let u=[0,1,2].map(c=>(1-i)*(1-i)*n[c]+2*(1-i)*i*r[c]+i*i*o[c]);return new Le(u,"lab")};else if(e.length===4){let i;[n,r,o,i]=e.map(u=>u.lab()),t=function(u){let c=[0,1,2].map(d=>(1-u)*(1-u)*(1-u)*n[d]+3*(1-u)*(1-u)*u*r[d]+3*(1-u)*u*u*o[d]+u*u*u*i[d]);return new Le(c,"lab")}}else if(e.length>=5){let i,u,c;i=e.map(d=>d.lab()),c=e.length-1,u=Fke(c),t=function(d){let g=1-d,O=[0,1,2].map(S=>i.reduce((I,R,k)=>I+u[k]*g**(c-k)*d**k*R[S],0));return new Le(O,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},uue=e=>{let t=Wke(e);return t.scale=()=>kd(t),t};var ns=(e,t,n)=>{if(!ns[n])throw new Error("unknown blend mode "+n);return ns[n](e,t)},Hp=e=>(t,n)=>{let r=Tt(n).rgb(),o=Tt(t).rgb();return Tt.rgb(e(r,o))},Vp=e=>(t,n)=>{let r=[];return r[0]=e(t[0],n[0]),r[1]=e(t[1],n[1]),r[2]=e(t[2],n[2]),r},Bke=e=>e,Hke=(e,t)=>e*t/255,Vke=(e,t)=>e>t?t:e,qke=(e,t)=>e>t?e:t,Uke=(e,t)=>255*(1-(1-e/255)*(1-t/255)),$ke=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),Jke=(e,t)=>255*(1-(1-t/255)/(e/255)),Gke=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);ns.normal=Hp(Vp(Bke));ns.multiply=Hp(Vp(Hke));ns.screen=Hp(Vp(Uke));ns.overlay=Hp(Vp($ke));ns.darken=Hp(Vp(Vke));ns.lighten=Hp(Vp(qke));ns.dodge=Hp(Vp(Gke));ns.burn=Hp(Vp(Jke));var cue=ns;var{pow:Xke,sin:Kke,cos:Yke}=Math;function pue(e=300,t=-1.5,n=1,r=1,o=[0,1]){let i=0,u;St(o)==="array"?u=o[1]-o[0]:(u=0,o=[o,o]);let c=function(d){let g=Ol*((e+120)/360+t*d),O=Xke(o[0]+u*d,r),I=(i!==0?n[0]+d*i:n)*O*(1-O)/2,R=Yke(g),k=Kke(g),A=O+I*(-.14861*R+1.78277*k),M=O+I*(-.29227*R-.90649*k),T=O+I*(1.97294*R);return Tt(Pd([A*255,M*255,T*255,1]))};return c.start=function(d){return d==null?e:(e=d,c)},c.rotations=function(d){return d==null?t:(t=d,c)},c.gamma=function(d){return d==null?r:(r=d,c)},c.hue=function(d){return d==null?n:(n=d,St(n)==="array"?(i=n[1]-n[0],i===0&&(n=n[1])):i=0,c)},c.lightness=function(d){return d==null?o:(St(d)==="array"?(o=d,u=d[1]-d[0]):(o=[d,d],u=0),c)},c.scale=()=>Tt.scale(c),c.hue(n),c}var Qke="0123456789abcdef",{floor:Zke,random:eCe}=Math,fue=()=>{let e="#";for(let t=0;t<6;t++)e+=Qke.charAt(Zke(eCe()*16));return new Le(e,"hex")};var{log:due,pow:tCe,floor:rCe,abs:nCe}=Math;function gF(e,t=null){let n={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return St(e)==="object"&&(e=Object.values(e)),e.forEach(r=>{t&&St(r)==="object"&&(r=r[t]),r!=null&&!isNaN(r)&&(n.values.push(r),n.sum+=r,rn.max&&(n.max=r),n.count+=1)}),n.domain=[n.min,n.max],n.limits=(r,o)=>vF(n,r,o),n}function vF(e,t="equal",n=7){St(e)=="array"&&(e=gF(e));let{min:r,max:o}=e,i=e.values.sort((c,d)=>c-d);if(n===1)return[r,o];let u=[];if(t.substr(0,1)==="c"&&(u.push(r),u.push(o)),t.substr(0,1)==="e"){u.push(r);for(let c=1;c 0");let c=Math.LOG10E*due(r),d=Math.LOG10E*due(o);u.push(r);for(let g=1;g200&&(S=!1)}let k={};for(let M=0;MM-T),u.push(A[0]);for(let M=1;M{e=new Le(e),t=new Le(t);let n=e.luminance(),r=t.luminance();return n>r?(n+.05)/(r+.05):(r+.05)/(n+.05)};var{sqrt:Yu,pow:go,min:oCe,max:iCe,atan2:hue,abs:gue,cos:hE,sin:vue,exp:aCe,PI:yue}=Math;function bue(e,t,n=1,r=1,o=1){var i=function(Xe){return 360*Xe/(2*yue)},u=function(Xe){return 2*yue*Xe/360};e=new Le(e),t=new Le(t);let[c,d,g]=Array.from(e.lab()),[O,S,I]=Array.from(t.lab()),R=(c+O)/2,k=Yu(go(d,2)+go(g,2)),A=Yu(go(S,2)+go(I,2)),M=(k+A)/2,T=.5*(1-Yu(go(M,7)/(go(M,7)+go(25,7)))),N=d*(1+T),U=S*(1+T),X=Yu(go(N,2)+go(g,2)),Y=Yu(go(U,2)+go(I,2)),K=(X+Y)/2,H=i(hue(g,N)),ne=i(hue(I,U)),pe=H>=0?H:H+360,ye=ne>=0?ne:ne+360,fe=gue(pe-ye)>180?(pe+ye+360)/2:(pe+ye)/2,ue=1-.17*hE(u(fe-30))+.24*hE(u(2*fe))+.32*hE(u(3*fe+6))-.2*hE(u(4*fe-63)),xe=ye-pe;xe=gue(xe)<=180?xe:ye<=pe?xe+360:xe-360,xe=2*Yu(X*Y)*vue(u(xe)/2);let me=O-c,We=Y-X,$e=1+.015*go(R-50,2)/Yu(20+go(R-50,2)),Ge=1+.045*K,Be=1+.015*K*ue,et=30*aCe(-go((fe-275)/25,2)),Qe=-(2*Yu(go(K,7)/(go(K,7)+go(25,7))))*vue(2*u(et)),Ht=Yu(go(me/(n*$e),2)+go(We/(r*Ge),2)+go(xe/(o*Be),2)+Qe*(We/(r*Ge))*(xe/(o*Be)));return iCe(0,oCe(100,Ht))}function wue(e,t,n="lab"){e=new Le(e),t=new Le(t);let r=e.get(n),o=t.get(n),i=0;for(let u in r){let c=(r[u]||0)-(o[u]||0);i+=c*c}return Math.sqrt(i)}var Oue=(...e)=>{try{return new Le(...e),!0}catch{return!1}};var xue={cool(){return kd([Tt.hsl(180,1,.9),Tt.hsl(250,.7,.4)])},hot(){return kd(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var gE={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]};for(let e of Object.keys(gE))gE[e.toLowerCase()]=gE[e];var _ue=gE;Object.assign(Tt,{average:sue,bezier:uue,blend:cue,cubehelix:pue,mix:Bp,interpolate:Bp,random:fue,scale:kd,analyze:gF,contrast:mue,deltaE:bue,distance:wue,limits:vF,valid:Oue,scales:xue,input:Et,colors:Wp,brewer:_ue});var dn=Tt;var Sue="#EBEFF5";function C1(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:10,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],u=t%2===0,c=n?Math.ceil(t/2)+(u?1:0):t,d=n?Math.ceil(t/2)+(u?1:0):0;if(o.length===1&&o.unshift(Sue),n){o.length<3&&(o[2]=o[1],o[1]=Sue);var g=Math.ceil(o.length/2),O=o.filter(function(A,M){if(Me.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=t.rotations,r=n===void 0?1:n,o=t.order,i=o===void 0?"append":o,u=t.direction,c=u===void 0?"lighter":u,d=t.sortBy,g=d===void 0?"default":d,O=t.sortShift,S=O===void 0?"-100":O,I=[],R=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(g==="natural"&&(R=yF(R).sort(function(T,N){return dn(T).set("hsl.h",S).hsl()[0]-dn(N).set("hsl.h",S).hsl()[0]})),r>1){var k=R.map(function(T){var N=C1(["black",T,"white"],5,!1,!0);switch(N.pop(),N.shift(),c){case"lighter":return C1([N[1],N[2]],r,!1,!0);case"darker":return C1([N[1],N[0]],r,!1,!0);case"both":return C1(N,r,!1,!0)}});if(i==="group")I=pCe(k);else for(var A=function(N){var U,X=k.map(function(Y){return Y[N]});(U=I).push.apply(U,yF(X))},M=0;M0&&arguments[0]!==void 0?arguments[0]:{},n=Qu(t),r=n.map(function(o){return dn(o).brighten(.5).hex()});return r};var NGt=Qu()[9],FGt=[Qu()[1],"#6092C0"],WGt=[Qu()[7],Qu()[9]];var Iue=function(t,n){return YN(t)?n.hex():n.css()},Ma=function(t,n){return dn(t).alpha(n).css()},Js=function(t,n){var r=dn.mix(t,"#fff",n,"rgb");return Iue(t,r)},Gs=function(t,n){var r=dn.mix(t,"#000",n,"rgb");return Iue(t,r)};var vE=function(t){return dn(t).get("hsl.l")*100};function A2(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?A2=function(n){return typeof n}:A2=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},A2(e)}var Xs=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(r){var o,i=A2(r)==="object"&&(o=Xu(r,t))!==null&&o!==void 0?o:t,u=A2(r)==="object"?r.colors.body:r;(dn(i).alpha()<1||dn(u).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: +`},pse=function(t){return{euiScreenReaderOnly:t?xe("&:not(:focus):not(:active){",Wp(),";};label:euiScreenReaderOnly;"):xe(Wp(),";label:euiScreenReaderOnly;")}};var pn=function(t){var n=t.children,r=t.className,o=t.showOnFocus,i=(0,fse.default)(r,n.props.className),u=pse(o),c=[u.euiScreenReaderOnly],d={className:i.length?i:void 0,css:c};return Fp(n,d)};pn.propTypes={children:qj.default.element.isRequired,showOnFocus:qj.default.bool,className:qj.default.string};function BEe(e,t){return UEe(e)||qEe(e,t)||VEe(e,t)||HEe()}function HEe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VEe(e,t){if(e){if(typeof e=="string")return dse(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return dse(e,t)}}function dse(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nsummary:first-of-type","details"],LN=$Ee.join(","),gse=typeof Element>"u",P2=gse?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,NN=!gse&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},vse=function(t,n,r){var o=Array.prototype.slice.apply(t.querySelectorAll(LN));return n&&P2.call(t,LN)&&o.unshift(t),o=o.filter(r),o},yse=function e(t,n,r){for(var o=[],i=Array.from(t);i.length;){var u=i.shift();if(u.tagName==="SLOT"){var c=u.assignedElements(),d=c.length?c:u.children,g=e(d,!0,r);r.flatten?o.push.apply(o,g):o.push({scope:u,candidates:g})}else{var O=P2.call(u,LN);O&&r.filter(u)&&(n||!t.includes(u))&&o.push(u);var S=u.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(u),I=!r.shadowRootFilter||r.shadowRootFilter(u);if(S&&I){var R=e(S===!0?u.children:S.children,!0,r);r.flatten?o.push.apply(o,R):o.push({scope:u,candidates:R})}else i.unshift.apply(i,u.children)}}return o},bse=function(t,n){return t.tabIndex<0&&(n||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},JEe=function(t,n){return t.tabIndex===n.tabIndex?t.documentOrder-n.documentOrder:t.tabIndex-n.tabIndex},wse=function(t){return t.tagName==="INPUT"},GEe=function(t){return wse(t)&&t.type==="hidden"},XEe=function(t){var n=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(r){return r.tagName==="SUMMARY"});return n},KEe=function(t,n){for(var r=0;rsummary:first-of-type"),u=i?t.parentElement:t;if(P2.call(u,"details:not([open]) *"))return!0;var c=NN(t).host,d=c?.ownerDocument.contains(c)||t.ownerDocument.contains(t);if(!r||r==="full"){if(typeof o=="function"){for(var g=t;t;){var O=t.parentElement,S=NN(t);if(O&&!O.shadowRoot&&o(O)===!0)return mse(t);t.assignedSlot?t=t.assignedSlot:!O&&S!==t.ownerDocument?t=S.host:t=O}t=g}if(d)return!t.getClientRects().length}else if(r==="non-zero-area")return mse(t);return!1},tPe=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var n=t.parentElement;n;){if(n.tagName==="FIELDSET"&&n.disabled){for(var r=0;r=0)},nPe=function e(t){var n=[],r=[];return t.forEach(function(o,i){var u=!!o.scope,c=u?o.scope:o,d=bse(c,u),g=u?e(o.candidates):c;d===0?u?n.push.apply(n,g):n.push(c):r.push({documentOrder:i,tabIndex:d,item:o,isScope:u,content:g})}),r.sort(JEe).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(n)},Ose=function(t,n){n=n||{};var r;return n.getShadowRoot?r=yse([t],n.includeContainer,{filter:hse.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:rPe}):r=vse(t,n.includeContainer,hse.bind(null,n)),nPe(r)},xse=function(t,n){n=n||{};var r;return n.getShadowRoot?r=yse([t],n.includeContainer,{filter:FN.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):r=vse(t,n.includeContainer,FN.bind(null,n)),r};var Fr={};$(Fr,{ALT:()=>sPe,ARROW_DOWN:()=>VN,ARROW_LEFT:()=>UN,ARROW_RIGHT:()=>$N,ARROW_UP:()=>qN,BACKSPACE:()=>aPe,CTRL:()=>cPe,END:()=>mPe,ENTER:()=>oPe,ESCAPE:()=>BN,F2:()=>lPe,HOME:()=>hPe,META:()=>pPe,PAGE_DOWN:()=>dPe,PAGE_UP:()=>fPe,SHIFT:()=>uPe,SPACE:()=>iPe,TAB:()=>HN,keys:()=>WN});var oPe="Enter",iPe=" ",BN="Escape",HN="Tab",aPe="Backspace",lPe="F2",sPe="Alt",uPe="Shift",cPe="Control",pPe="Meta",VN="ArrowDown",qN="ArrowUp",UN="ArrowLeft",$N="ArrowRight",fPe="PageUp",dPe="PageDown",mPe="End",hPe="Home",WN;(function(e){e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home"})(WN||(WN={}));var $s={ARROW_DOWN:VN,ARROW_LEFT:UN,ARROW_RIGHT:$N,ARROW_UP:qN,ESCAPE:BN,TAB:HN};var Uj,gPe=new Uint8Array(16);function JN(){if(!Uj&&(Uj=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!Uj))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Uj(gPe)}var _se=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function vPe(e){return typeof e=="string"&&_se.test(e)}var Sse=vPe;var ni=[];for($j=0;$j<256;++$j)ni.push(($j+256).toString(16).substr(1));var $j;function yPe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=(ni[e[t+0]]+ni[e[t+1]]+ni[e[t+2]]+ni[e[t+3]]+"-"+ni[e[t+4]]+ni[e[t+5]]+"-"+ni[e[t+6]]+ni[e[t+7]]+"-"+ni[e[t+8]]+ni[e[t+9]]+"-"+ni[e[t+10]]+ni[e[t+11]]+ni[e[t+12]]+ni[e[t+13]]+ni[e[t+14]]+ni[e[t+15]]).toLowerCase();if(!Sse(n))throw TypeError("Stringified UUID is invalid");return n}var Ise=yPe;var jse,GN,XN=0,KN=0;function bPe(e,t,n){var r=t&&n||0,o=t||new Array(16);e=e||{};var i=e.node||jse,u=e.clockseq!==void 0?e.clockseq:GN;if(i==null||u==null){var c=e.random||(e.rng||JN)();i==null&&(i=jse=[c[0]|1,c[1],c[2],c[3],c[4],c[5]]),u==null&&(u=GN=(c[6]<<8|c[7])&16383)}var d=e.msecs!==void 0?e.msecs:Date.now(),g=e.nsecs!==void 0?e.nsecs:KN+1,O=d-XN+(g-KN)/1e4;if(O<0&&e.clockseq===void 0&&(u=u+1&16383),(O<0||d>XN)&&e.nsecs===void 0&&(g=0),g>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");XN=d,KN=g,GN=u,d+=122192928e5;var S=((d&268435455)*1e4+g)%4294967296;o[r++]=S>>>24&255,o[r++]=S>>>16&255,o[r++]=S>>>8&255,o[r++]=S&255;var I=d/4294967296*1e4&268435455;o[r++]=I>>>8&255,o[r++]=I&255,o[r++]=I>>>24&15|16,o[r++]=I>>>16&255,o[r++]=u>>>8|128,o[r++]=u&255;for(var R=0;R<6;++R)o[r+R]=i[R];return t||Ise(o)}var Jj=bPe;var Ese=E(L());function _r(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=Jj();return function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r="".concat(e).concat(e!==""?"_":"i"),o=n?"_".concat(n):"";return"".concat(r).concat(o?t:Jj()).concat(o)}}var Gu=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.prefix,r=t.suffix,o=t.conditionalId;return(0,Ese.useMemo)(function(){return o||_r(n)(r)},[o,n,r])};var Ol="left",ns="right",Xu="center";function kt(e){return Object.keys(e)}var Gj={xl:1200,l:992,m:768,s:575,xs:0};var YN=Gj,Pse=kt(YN);function Xj(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:YN;return Pse.find(function(n){return t[n]<=e})}var $1=E(L());var R2=E(L());var Bp={light:"LIGHT",dark:"DARK"},kse="INVERSE";function Cse(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function QN(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[];jPe(this,e),this.computer=t,this.dependencies=n}return EPe(e,[{key:"getValue",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if(!this.dependencies.length)return this.computer(o);if(!Array.isArray(this.dependencies)){var u,c;return this.computer((u=(c=Ku(o,this.dependencies))!==null&&c!==void 0?c:Ku(r,this.dependencies,i))!==null&&u!==void 0?u:Ku(n,this.dependencies,i))}return this.computer(this.dependencies.map(function(d){var g,O;return(g=(O=Ku(o,d))!==null&&O!==void 0?O:Ku(r,d,i))!==null&&g!==void 0?g:Ku(n,d,i)}))}}]),e}();function gr(e,t){return new k2(e,t)}var C2=function(t,n,r){var o={themeName:t.key};function i(u,c){var d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,g=arguments.length>3?arguments[3]:void 0;Object.keys(u).forEach(function(O){var S=g?"".concat(g,".").concat(O):"".concat(O);if([].concat(OPe(Object.values(Bp)),[r]).includes(O)){if(O!==r)return;var I=new RegExp("(\\.".concat(r,"\\b)|(\\b").concat(r,"\\.)"));S=S.replace(I,"")}var R=d&&Ku(o,S);if(!R||Cd(R)){var k=u[O]instanceof k2?u[O].getValue(u.root,c.root,o,r):u[O],M=c[O]instanceof k2?c[O].getValue(u.root,c.root,o,r):c[O];Cd(k)&&!Array.isArray(k)?i(k,M??{},d,S):kPe(o,S,M??k)}})}return i(t,n),i(n,{},!0),o},A2=function(t,n){var r={getPrototypeOf:function(u){return Reflect.getPrototypeOf(u.model)},setPrototypeOf:function(u,c){return Reflect.setPrototypeOf(u.model,c)},isExtensible:function(u){return Reflect.isExtensible(u)},preventExtensions:function(u){return Reflect.preventExtensions(u.model)},getOwnPropertyDescriptor:function(u,c){return Reflect.getOwnPropertyDescriptor(u.model,c)},defineProperty:function(u,c,d){return Reflect.defineProperty(u.model,c,d)},has:function(u,c){return Reflect.has(u.model,c)},get:function(u,c){if(c==="key")return u[c];if(c==="__proto__")return{};var d=c==="root"?u:u.model||u,g=d[c];return Cd(g)&&!Array.isArray(g)?new Proxy({model:g,root:u.root,key:"_".concat(u.key)},r):g},set:function(u){return u},deleteProperty:function(u){return u},ownKeys:function(u){return Reflect.ownKeys(u.model)},apply:function(u){return u},construct:function(u){return u}},o=new Proxy({model:t,root:t,key:n},r);return o},tF=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=QN({},t);return!Cd(r)||!Cd(n)?n:(Object.keys(n).forEach(function(o){var i=r[o],u=n[o];Cd(i)&&Cd(u)?r[o]=e(QN({},i),QN({},u)):r[o]=u}),r)};function CPe(e,t){return RPe(e)||TPe(e,t)||MPe(e,t)||APe()}function APe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function MPe(e,t){if(e){if(typeof e=="string")return Mse(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mse(e,t)}}function Mse(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nk1(C1(t,e),n);var Ad=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let t=0;t<=3;t++)t<3?((e[t]<0||e[t]>255)&&(e._clipped=!0),e[t]=Js(e[t],0,255)):t===3&&(e[t]=Js(e[t],0,1));return e};var Tse={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Tse[`[object ${e}]`]=e.toLowerCase();function St(e){return Tse[Object.prototype.toString.call(e)]||"object"}var pt=(e,t=null)=>e.length>=3?Array.prototype.slice.call(e):St(e[0])=="object"&&t?t.split("").filter(n=>e[0][n]!==void 0).map(n=>e[0][n]):e[0];var Yu=e=>{if(e.length<2)return null;let t=e.length-1;return St(e[t])=="string"?e[t].toLowerCase():null};var{PI:Zj,min:k1,max:C1}=Math,xl=Zj*2,eE=Zj/3,Rse=Zj/180,zse=180/Zj;var Et={format:{},autodetect:[]};var nF=class{constructor(...t){let n=this;if(St(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let r=Yu(t),o=!1;if(!r){o=!0,Et.sorted||(Et.autodetect=Et.autodetect.sort((i,u)=>u.p-i.p),Et.sorted=!0);for(let i of Et.autodetect)if(r=i.test(...t),r)break}if(Et.format[r]){let i=Et.format[r].apply(null,o?t:t.slice(0,-1));n._rgb=Ad(i)}else throw new Error("unknown format: "+t);n._rgb.length===3&&n._rgb.push(1)}toString(){return St(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}},Ne=nF;var Dse="2.6.0";var tE=(...e)=>new tE.Color(...e);tE.Color=Ne;tE.version=Dse;var Tt=tE;var zPe=(...e)=>{e=pt(e,"cmyk");let[t,n,r,o]=e,i=e.length>4?e[4]:1;return o===1?[0,0,0,i]:[t>=1?0:255*(1-t)*(1-o),n>=1?0:255*(1-n)*(1-o),r>=1?0:255*(1-r)*(1-o),i]},Lse=zPe;var{max:Nse}=Math,DPe=(...e)=>{let[t,n,r]=pt(e,"rgb");t=t/255,n=n/255,r=r/255;let o=1-Nse(t,Nse(n,r)),i=o<1?1/(1-o):0,u=(1-t-o)*i,c=(1-n-o)*i,d=(1-r-o)*i;return[u,c,d,o]},Fse=DPe;Ne.prototype.cmyk=function(){return Fse(this._rgb)};Tt.cmyk=(...e)=>new Ne(...e,"cmyk");Et.format.cmyk=Lse;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"cmyk"),St(e)==="array"&&e.length===4)return"cmyk"}});var oF=e=>Math.round(e*100)/100,LPe=(...e)=>{let t=pt(e,"hsla"),n=Yu(e)||"lsa";return t[0]=oF(t[0]||0),t[1]=oF(t[1]*100)+"%",t[2]=oF(t[2]*100)+"%",n==="hsla"||t.length>3&&t[3]<1?(t[3]=t.length>3?t[3]:1,n="hsla"):t.length=3,`${n}(${t.join(",")})`},Wse=LPe;var NPe=(...e)=>{e=pt(e,"rgba");let[t,n,r]=e;t/=255,n/=255,r/=255;let o=k1(t,n,r),i=C1(t,n,r),u=(i+o)/2,c,d;return i===o?(c=0,d=Number.NaN):c=u<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?d=(n-r)/(i-o):n==i?d=2+(r-t)/(i-o):r==i&&(d=4+(t-n)/(i-o)),d*=60,d<0&&(d+=360),e.length>3&&e[3]!==void 0?[d,c,u,e[3]]:[d,c,u]},rE=NPe;var{round:iF}=Math,FPe=(...e)=>{let t=pt(e,"rgba"),n=Yu(e)||"rgb";return n.substr(0,3)=="hsl"?Wse(rE(t),n):(t[0]=iF(t[0]),t[1]=iF(t[1]),t[2]=iF(t[2]),(n==="rgba"||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),`${n}(${t.slice(0,n==="rgb"?3:4).join(",")})`)},Bse=FPe;var{round:aF}=Math,WPe=(...e)=>{e=pt(e,"hsl");let[t,n,r]=e,o,i,u;if(n===0)o=i=u=r*255;else{let c=[0,0,0],d=[0,0,0],g=r<.5?r*(1+n):r+n-r*n,O=2*r-g,S=t/360;c[0]=S+1/3,c[1]=S,c[2]=S-1/3;for(let I=0;I<3;I++)c[I]<0&&(c[I]+=1),c[I]>1&&(c[I]-=1),6*c[I]<1?d[I]=O+(g-O)*6*c[I]:2*c[I]<1?d[I]=g:3*c[I]<2?d[I]=O+(g-O)*(2/3-c[I])*6:d[I]=O;[o,i,u]=[aF(d[0]*255),aF(d[1]*255),aF(d[2]*255)]}return e.length>3?[o,i,u,e[3]]:[o,i,u,1]},M2=WPe;var Vse=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,qse=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,Use=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,$se=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Jse=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Gse=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:Hse}=Math,Xse=e=>{e=e.toLowerCase().trim();let t;if(Et.format.named)try{return Et.format.named(e)}catch{}if(t=e.match(Vse)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=+n[r];return n[3]=1,n}if(t=e.match(qse)){let n=t.slice(1,5);for(let r=0;r<4;r++)n[r]=+n[r];return n}if(t=e.match(Use)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=Hse(n[r]*2.55);return n[3]=1,n}if(t=e.match($se)){let n=t.slice(1,5);for(let r=0;r<3;r++)n[r]=Hse(n[r]*2.55);return n[3]=+n[3],n}if(t=e.match(Jse)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=M2(n);return r[3]=1,r}if(t=e.match(Gse)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=M2(n);return r[3]=+t[4],r}};Xse.test=e=>Vse.test(e)||qse.test(e)||Use.test(e)||$se.test(e)||Jse.test(e)||Gse.test(e);var lF=Xse;Ne.prototype.css=function(e){return Bse(this._rgb,e)};Tt.css=(...e)=>new Ne(...e,"css");Et.format.css=lF;Et.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&St(e)==="string"&&lF.test(e))return"css"}});Et.format.gl=(...e)=>{let t=pt(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};Tt.gl=(...e)=>new Ne(...e,"gl");Ne.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:BPe}=Math,HPe=(...e)=>{e=pt(e,"hcg");let[t,n,r]=e,o,i,u;r=r*255;let c=n*255;if(n===0)o=i=u=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let d=BPe(t),g=t-d,O=r*(1-n),S=O+c*(1-g),I=O+c*g,R=O+c;switch(d){case 0:[o,i,u]=[R,I,O];break;case 1:[o,i,u]=[S,R,O];break;case 2:[o,i,u]=[O,R,I];break;case 3:[o,i,u]=[O,S,R];break;case 4:[o,i,u]=[I,O,R];break;case 5:[o,i,u]=[R,O,S];break}}return[o,i,u,e.length>3?e[3]:1]},Kse=HPe;var VPe=(...e)=>{let[t,n,r]=pt(e,"rgb"),o=k1(t,n,r),i=C1(t,n,r),u=i-o,c=u*100/255,d=o/(255-u)*100,g;return u===0?g=Number.NaN:(t===i&&(g=(n-r)/u),n===i&&(g=2+(r-t)/u),r===i&&(g=4+(t-n)/u),g*=60,g<0&&(g+=360)),[g,c,d]},Yse=VPe;Ne.prototype.hcg=function(){return Yse(this._rgb)};Tt.hcg=(...e)=>new Ne(...e,"hcg");Et.format.hcg=Kse;Et.autodetect.push({p:1,test:(...e)=>{if(e=pt(e,"hcg"),St(e)==="array"&&e.length===3)return"hcg"}});var qPe=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,UPe=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,$Pe=e=>{if(e.match(qPe)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);let t=parseInt(e,16),n=t>>16,r=t>>8&255,o=t&255;return[n,r,o,1]}if(e.match(UPe)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let t=parseInt(e,16),n=t>>24&255,r=t>>16&255,o=t>>8&255,i=Math.round((t&255)/255*100)/100;return[n,r,o,i]}throw new Error(`unknown hex color: ${e}`)},nE=$Pe;var{round:oE}=Math,JPe=(...e)=>{let[t,n,r,o]=pt(e,"rgba"),i=Yu(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=oE(t),n=oE(n),r=oE(r);let c="000000"+(t<<16|n<<8|r).toString(16);c=c.substr(c.length-6);let d="0"+oE(o*255).toString(16);switch(d=d.substr(d.length-2),i.toLowerCase()){case"rgba":return`#${c}${d}`;case"argb":return`#${d}${c}`;default:return`#${c}`}},iE=JPe;Ne.prototype.hex=function(e){return iE(this._rgb,e)};Tt.hex=(...e)=>new Ne(...e,"hex");Et.format.hex=nE;Et.autodetect.push({p:4,test:(e,...t)=>{if(!t.length&&St(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});var{cos:A1}=Math,GPe=(...e)=>{e=pt(e,"hsi");let[t,n,r]=e,o,i,u;return isNaN(t)&&(t=0),isNaN(n)&&(n=0),t>360&&(t-=360),t<0&&(t+=360),t/=360,t<1/3?(u=(1-n)/3,o=(1+n*A1(xl*t)/A1(eE-xl*t))/3,i=1-(u+o)):t<2/3?(t-=1/3,o=(1-n)/3,i=(1+n*A1(xl*t)/A1(eE-xl*t))/3,u=1-(o+i)):(t-=2/3,i=(1-n)/3,u=(1+n*A1(xl*t)/A1(eE-xl*t))/3,o=1-(i+u)),o=Js(r*o*3),i=Js(r*i*3),u=Js(r*u*3),[o*255,i*255,u*255,e.length>3?e[3]:1]},Qse=GPe;var{min:XPe,sqrt:KPe,acos:YPe}=Math,QPe=(...e)=>{let[t,n,r]=pt(e,"rgb");t/=255,n/=255,r/=255;let o,i=XPe(t,n,r),u=(t+n+r)/3,c=u>0?1-i/u:0;return c===0?o=NaN:(o=(t-n+(t-r))/2,o/=KPe((t-n)*(t-n)+(t-r)*(n-r)),o=YPe(o),r>n&&(o=xl-o),o/=xl),[o*360,c,u]},Zse=QPe;Ne.prototype.hsi=function(){return Zse(this._rgb)};Tt.hsi=(...e)=>new Ne(...e,"hsi");Et.format.hsi=Qse;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"hsi"),St(e)==="array"&&e.length===3)return"hsi"}});Ne.prototype.hsl=function(){return rE(this._rgb)};Tt.hsl=(...e)=>new Ne(...e,"hsl");Et.format.hsl=M2;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"hsl"),St(e)==="array"&&e.length===3)return"hsl"}});var{floor:ZPe}=Math,eke=(...e)=>{e=pt(e,"hsv");let[t,n,r]=e,o,i,u;if(r*=255,n===0)o=i=u=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let c=ZPe(t),d=t-c,g=r*(1-n),O=r*(1-n*d),S=r*(1-n*(1-d));switch(c){case 0:[o,i,u]=[r,S,g];break;case 1:[o,i,u]=[O,r,g];break;case 2:[o,i,u]=[g,r,S];break;case 3:[o,i,u]=[g,O,r];break;case 4:[o,i,u]=[S,g,r];break;case 5:[o,i,u]=[r,g,O];break}}return[o,i,u,e.length>3?e[3]:1]},eue=eke;var{min:tke,max:rke}=Math,nke=(...e)=>{e=pt(e,"rgb");let[t,n,r]=e,o=tke(t,n,r),i=rke(t,n,r),u=i-o,c,d,g;return g=i/255,i===0?(c=Number.NaN,d=0):(d=u/i,t===i&&(c=(n-r)/u),n===i&&(c=2+(r-t)/u),r===i&&(c=4+(t-n)/u),c*=60,c<0&&(c+=360)),[c,d,g]},tue=nke;Ne.prototype.hsv=function(){return tue(this._rgb)};Tt.hsv=(...e)=>new Ne(...e,"hsv");Et.format.hsv=eue;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"hsv"),St(e)==="array"&&e.length===3)return"hsv"}});var Fo={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:oke}=Math,ike=(...e)=>{e=pt(e,"lab");let[t,n,r]=e,o,i,u,c,d,g;return i=(t+16)/116,o=isNaN(n)?i:i+n/500,u=isNaN(r)?i:i-r/200,i=Fo.Yn*uF(i),o=Fo.Xn*uF(o),u=Fo.Zn*uF(u),c=sF(3.2404542*o-1.5371385*i-.4985314*u),d=sF(-.969266*o+1.8760108*i+.041556*u),g=sF(.0556434*o-.2040259*i+1.0572252*u),[c,d,g,e.length>3?e[3]:1]},sF=e=>255*(e<=.00304?12.92*e:1.055*oke(e,1/2.4)-.055),uF=e=>e>Fo.t1?e*e*e:Fo.t2*(e-Fo.t0),aE=ike;var{pow:rue}=Math,ake=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=lke(t,n,r),c=116*i-16;return[c<0?0:c,500*(o-i),200*(i-u)]},cF=e=>(e/=255)<=.04045?e/12.92:rue((e+.055)/1.055,2.4),pF=e=>e>Fo.t3?rue(e,1/3):e/Fo.t2+Fo.t0,lke=(e,t,n)=>{e=cF(e),t=cF(t),n=cF(n);let r=pF((.4124564*e+.3575761*t+.1804375*n)/Fo.Xn),o=pF((.2126729*e+.7151522*t+.072175*n)/Fo.Yn),i=pF((.0193339*e+.119192*t+.9503041*n)/Fo.Zn);return[r,o,i]},lE=ake;Ne.prototype.lab=function(){return lE(this._rgb)};Tt.lab=(...e)=>new Ne(...e,"lab");Et.format.lab=aE;Et.autodetect.push({p:2,test:(...e)=>{if(e=pt(e,"lab"),St(e)==="array"&&e.length===3)return"lab"}});var{sin:ske,cos:uke}=Math,cke=(...e)=>{let[t,n,r]=pt(e,"lch");return isNaN(r)&&(r=0),r=r*Rse,[t,uke(r)*n,ske(r)*n]},sE=cke;var pke=(...e)=>{e=pt(e,"lch");let[t,n,r]=e,[o,i,u]=sE(t,n,r),[c,d,g]=aE(o,i,u);return[c,d,g,e.length>3?e[3]:1]},uE=pke;var fke=(...e)=>{let t=pt(e,"hcl").reverse();return uE(...t)},nue=fke;var{sqrt:dke,atan2:mke,round:hke}=Math,gke=(...e)=>{let[t,n,r]=pt(e,"lab"),o=dke(n*n+r*r),i=(mke(r,n)*zse+360)%360;return hke(o*1e4)===0&&(i=Number.NaN),[t,o,i]},cE=gke;var vke=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=lE(t,n,r);return cE(o,i,u)},fF=vke;Ne.prototype.lch=function(){return fF(this._rgb)};Ne.prototype.hcl=function(){return fF(this._rgb).reverse()};Tt.lch=(...e)=>new Ne(...e,"lch");Tt.hcl=(...e)=>new Ne(...e,"hcl");Et.format.lch=uE;Et.format.hcl=nue;["lch","hcl"].forEach(e=>Et.autodetect.push({p:2,test:(...t)=>{if(t=pt(t,e),St(t)==="array"&&t.length===3)return e}}));var yke={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},Hp=yke;Ne.prototype.name=function(){let e=iE(this._rgb,"rgb");for(let t of Object.keys(Hp))if(Hp[t]===e)return t.toLowerCase();return e};Et.format.named=e=>{if(e=e.toLowerCase(),Hp[e])return nE(Hp[e]);throw new Error("unknown color name: "+e)};Et.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&St(e)==="string"&&Hp[e.toLowerCase()])return"named"}});var bke=e=>{if(St(e)=="number"&&e>=0&&e<=16777215){let t=e>>16,n=e>>8&255,r=e&255;return[t,n,r,1]}throw new Error("unknown num color: "+e)},oue=bke;var wke=(...e)=>{let[t,n,r]=pt(e,"rgb");return(t<<16)+(n<<8)+r},iue=wke;Ne.prototype.num=function(){return iue(this._rgb)};Tt.num=(...e)=>new Ne(...e,"num");Et.format.num=oue;Et.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&St(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});var{round:aue}=Math;Ne.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(aue)};Ne.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,n)=>n<3?e===!1?t:aue(t):t)};Tt.rgb=(...e)=>new Ne(...e,"rgb");Et.format.rgb=(...e)=>{let t=pt(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Et.autodetect.push({p:3,test:(...e)=>{if(e=pt(e,"rgba"),St(e)==="array"&&(e.length===3||e.length===4&&St(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});var{log:pE}=Math,Oke=e=>{let t=e/100,n,r,o;return t<66?(n=255,r=t<6?0:-155.25485562709179-.44596950469579133*(r=t-2)+104.49216199393888*pE(r),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*pE(o)):(n=351.97690566805693+.114206453784165*(n=t-55)-40.25366309332127*pE(n),r=325.4494125711974+.07943456536662342*(r=t-50)-28.0852963507957*pE(r),o=255),[n,r,o,1]},fE=Oke;var{round:xke}=Math,_ke=(...e)=>{let t=pt(e,"rgb"),n=t[0],r=t[2],o=1e3,i=4e4,u=.4,c;for(;i-o>u;){c=(i+o)*.5;let d=fE(c);d[2]/d[0]>=r/n?i=c:o=c}return xke(c)},lue=_ke;Ne.prototype.temp=Ne.prototype.kelvin=Ne.prototype.temperature=function(){return lue(this._rgb)};Tt.temp=Tt.kelvin=Tt.temperature=(...e)=>new Ne(...e,"temp");Et.format.temp=Et.format.kelvin=Et.format.temperature=fE;var{pow:dE,sign:Ske}=Math,Ike=(...e)=>{e=pt(e,"lab");let[t,n,r]=e,o=dE(t+.3963377774*n+.2158037573*r,3),i=dE(t-.1055613458*n-.0638541728*r,3),u=dE(t-.0894841775*n-1.291485548*r,3);return[255*dF(4.0767416621*o-3.3077115913*i+.2309699292*u),255*dF(-1.2684380046*o+2.6097574011*i-.3413193965*u),255*dF(-.0041960863*o-.7034186147*i+1.707614701*u),e.length>3?e[3]:1]},mE=Ike;function dF(e){let t=Math.abs(e);return t>.0031308?(Ske(e)||1)*(1.055*dE(t,1/2.4)-.055):e*12.92}var{cbrt:mF,pow:jke,sign:Eke}=Math,Pke=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=[hF(t/255),hF(n/255),hF(r/255)],c=mF(.4122214708*o+.5363325363*i+.0514459929*u),d=mF(.2119034982*o+.6806995451*i+.1073969566*u),g=mF(.0883024619*o+.2817188376*i+.6299787005*u);return[.2104542553*c+.793617785*d-.0040720468*g,1.9779984951*c-2.428592205*d+.4505937099*g,.0259040371*c+.7827717662*d-.808675766*g]},hE=Pke;function hF(e){let t=Math.abs(e);return t<.04045?e/12.92:(Eke(e)||1)*jke((t+.055)/1.055,2.4)}Ne.prototype.oklab=function(){return hE(this._rgb)};Tt.oklab=(...e)=>new Ne(...e,"oklab");Et.format.oklab=mE;Et.autodetect.push({p:3,test:(...e)=>{if(e=pt(e,"oklab"),St(e)==="array"&&e.length===3)return"oklab"}});var kke=(...e)=>{e=pt(e,"lch");let[t,n,r]=e,[o,i,u]=sE(t,n,r),[c,d,g]=mE(o,i,u);return[c,d,g,e.length>3?e[3]:1]},sue=kke;var Cke=(...e)=>{let[t,n,r]=pt(e,"rgb"),[o,i,u]=hE(t,n,r);return cE(o,i,u)},uue=Cke;Ne.prototype.oklch=function(){return uue(this._rgb)};Tt.oklch=(...e)=>new Ne(...e,"oklch");Et.format.oklch=sue;Et.autodetect.push({p:3,test:(...e)=>{if(e=pt(e,"oklch"),St(e)==="array"&&e.length===3)return"oklch"}});Ne.prototype.alpha=function(e,t=!1){return e!==void 0&&St(e)==="number"?t?(this._rgb[3]=e,this):new Ne([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};Ne.prototype.clipped=function(){return this._rgb._clipped||!1};Ne.prototype.darken=function(e=1){let t=this,n=t.lab();return n[0]-=Fo.Kn*e,new Ne(n,"lab").alpha(t.alpha(),!0)};Ne.prototype.brighten=function(e=1){return this.darken(-e)};Ne.prototype.darker=Ne.prototype.darken;Ne.prototype.brighter=Ne.prototype.brighten;Ne.prototype.get=function(e){let[t,n]=e.split("."),r=this[t]();if(n){let o=t.indexOf(n)-(t.substr(0,2)==="ok"?2:0);if(o>-1)return r[o];throw new Error(`unknown channel ${n} in mode ${t}`)}else return r};var{pow:Ake}=Math,Mke=1e-7,Tke=20;Ne.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&St(e)==="number"){if(e===0)return new Ne([0,0,0,this._rgb[3]],"rgb");if(e===1)return new Ne([255,255,255,this._rgb[3]],"rgb");let n=this.luminance(),r=Tke,o=(u,c)=>{let d=u.interpolate(c,.5,t),g=d.luminance();return Math.abs(e-g)e?o(u,d):o(d,c)},i=(n>e?o(new Ne([0,0,0]),this):o(this,new Ne([255,255,255]))).rgb();return new Ne([...i,this._rgb[3]])}return Rke(...this._rgb.slice(0,3))};var Rke=(e,t,n)=>(e=gF(e),t=gF(t),n=gF(n),.2126*e+.7152*t+.0722*n),gF=e=>(e/=255,e<=.03928?e/12.92:Ake((e+.055)/1.055,2.4));var fn={};var Vp=(e,t,n=.5,...r)=>{let o=r[0]||"lrgb";if(!fn[o]&&!r.length&&(o=Object.keys(fn)[0]),!fn[o])throw new Error(`interpolation mode ${o} is not defined`);return St(e)!=="object"&&(e=new Ne(e)),St(t)!=="object"&&(t=new Ne(t)),fn[o](e,t,n).alpha(e.alpha()+n*(t.alpha()-e.alpha()))};Ne.prototype.mix=Ne.prototype.interpolate=function(e,t=.5,...n){return Vp(this,e,t,...n)};Ne.prototype.premultiply=function(e=!1){let t=this._rgb,n=t[3];return e?(this._rgb=[t[0]*n,t[1]*n,t[2]*n,n],this):new Ne([t[0]*n,t[1]*n,t[2]*n,n],"rgb")};Ne.prototype.saturate=function(e=1){let t=this,n=t.lch();return n[1]+=Fo.Kn*e,n[1]<0&&(n[1]=0),new Ne(n,"lch").alpha(t.alpha(),!0)};Ne.prototype.desaturate=function(e=1){return this.saturate(-e)};Ne.prototype.set=function(e,t,n=!1){let[r,o]=e.split("."),i=this[r]();if(o){let u=r.indexOf(o)-(r.substr(0,2)==="ok"?2:0);if(u>-1){if(St(t)=="string")switch(t.charAt(0)){case"+":i[u]+=+t;break;case"-":i[u]+=+t;break;case"*":i[u]*=+t.substr(1);break;case"/":i[u]/=+t.substr(1);break;default:i[u]=+t}else if(St(t)==="number")i[u]=t;else throw new Error("unsupported value for Color.set");let c=new Ne(i,r);return n?(this._rgb=c._rgb,this):c}throw new Error(`unknown channel ${o} in mode ${r}`)}else return i};Ne.prototype.tint=function(e=.5,...t){return Vp(this,"white",e,...t)};Ne.prototype.shade=function(e=.5,...t){return Vp(this,"black",e,...t)};var zke=(e,t,n)=>{let r=e._rgb,o=t._rgb;return new Ne(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"rgb")};fn.rgb=zke;var{sqrt:vF,pow:M1}=Math,Dke=(e,t,n)=>{let[r,o,i]=e._rgb,[u,c,d]=t._rgb;return new Ne(vF(M1(r,2)*(1-n)+M1(u,2)*n),vF(M1(o,2)*(1-n)+M1(c,2)*n),vF(M1(i,2)*(1-n)+M1(d,2)*n),"rgb")};fn.lrgb=Dke;var Lke=(e,t,n)=>{let r=e.lab(),o=t.lab();return new Ne(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"lab")};fn.lab=Lke;var _l=(e,t,n,r)=>{let o,i;r==="hsl"?(o=e.hsl(),i=t.hsl()):r==="hsv"?(o=e.hsv(),i=t.hsv()):r==="hcg"?(o=e.hcg(),i=t.hcg()):r==="hsi"?(o=e.hsi(),i=t.hsi()):r==="lch"||r==="hcl"?(r="hcl",o=e.hcl(),i=t.hcl()):r==="oklch"&&(o=e.oklch().reverse(),i=t.oklch().reverse());let u,c,d,g,O,S;(r.substr(0,1)==="h"||r==="oklch")&&([u,d,O]=o,[c,g,S]=i);let I,R,k,M;return!isNaN(u)&&!isNaN(c)?(c>u&&c-u>180?M=c-(u+360):c180?M=c+360-u:M=c-u,R=u+n*M):isNaN(u)?isNaN(c)?R=Number.NaN:(R=c,(O==1||O==0)&&r!="hsv"&&(I=g)):(R=u,(S==1||S==0)&&r!="hsv"&&(I=d)),I===void 0&&(I=d+n*(g-d)),k=O+n*(S-O),r==="oklch"?new Ne([k,I,R],r):new Ne([R,I,k],r)};var cue=(e,t,n)=>_l(e,t,n,"lch");fn.lch=cue;fn.hcl=cue;var Nke=(e,t,n)=>{let r=e.num(),o=t.num();return new Ne(r+n*(o-r),"num")};fn.num=Nke;var Fke=(e,t,n)=>_l(e,t,n,"hcg");fn.hcg=Fke;var Wke=(e,t,n)=>_l(e,t,n,"hsi");fn.hsi=Wke;var Bke=(e,t,n)=>_l(e,t,n,"hsl");fn.hsl=Bke;var Hke=(e,t,n)=>_l(e,t,n,"hsv");fn.hsv=Hke;var Vke=(e,t,n)=>{let r=e.oklab(),o=t.oklab();return new Ne(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"oklab")};fn.oklab=Vke;var qke=(e,t,n)=>_l(e,t,n,"oklch");fn.oklch=qke;var{pow:yF,sqrt:bF,PI:wF,cos:pue,sin:fue,atan2:Uke}=Math,due=(e,t="lrgb",n=null)=>{let r=e.length;n||(n=Array.from(new Array(r)).map(()=>1));let o=r/n.reduce(function(S,I){return S+I});if(n.forEach((S,I)=>{n[I]*=o}),e=e.map(S=>new Ne(S)),t==="lrgb")return $ke(e,n);let i=e.shift(),u=i.get(t),c=[],d=0,g=0;for(let S=0;S{let R=S.get(t);O+=S.alpha()*n[I+1];for(let k=0;k=360;)I-=360;u[S]=I}else u[S]=u[S]/c[S];return O/=r,new Ne(u,t).alpha(O>.99999?1:O,!0)},$ke=(e,t)=>{let n=e.length,r=[0,0,0,0];for(let o=0;o.9999999&&(r[3]=1),new Ne(Ad(r))};var{pow:Jke}=Math;function Md(e){let t="rgb",n=Tt("#ccc"),r=0,o=[0,1],i=[],u=[0,0],c=!1,d=[],g=!1,O=0,S=1,I=!1,R={},k=!0,M=1,C=function(B){if(B=B||["#fff","#000"],B&&St(B)==="string"&&Tt.brewer&&Tt.brewer[B.toLowerCase()]&&(B=Tt.brewer[B.toLowerCase()]),St(B)==="array"){B.length===1&&(B=[B[0],B[0]]),B=B.slice(0);for(let ne=0;ne=c[pe];)pe++;return pe-1}return 0},D=B=>B,U=B=>B,G=function(B,ne){let pe,ve;if(ne==null&&(ne=!1),isNaN(B)||B===null)return n;ne?ve=B:c&&c.length>2?ve=T(B)/(c.length-2):S!==O?ve=(B-O)/(S-O):ve=1,ve=U(ve),ne||(ve=D(ve)),M!==1&&(ve=Jke(ve,M)),ve=u[0]+ve*(1-u[0]-u[1]),ve=Js(ve,0,1);let de=Math.floor(ve*1e4);if(k&&R[de])pe=R[de];else{if(St(d)==="array")for(let ue=0;ue=ye&&ue===i.length-1){pe=d[ue];break}if(ve>ye&&veR={};C(e);let K=function(B){let ne=Tt(G(B));return g&&ne[g]?ne[g]():ne};return K.classes=function(B){if(B!=null){if(St(B)==="array")c=B,o=[B[0],B[B.length-1]];else{let ne=Tt.analyze(o);B===0?c=[ne.min,ne.max]:c=Tt.limits(ne,"e",B)}return K}return c},K.domain=function(B){if(!arguments.length)return o;O=B[0],S=B[B.length-1],i=[];let ne=d.length;if(B.length===ne&&O!==S)for(let pe of Array.from(B))i.push((pe-O)/(S-O));else{for(let pe=0;pe2){let pe=B.map((de,ue)=>ue/(B.length-1)),ve=B.map(de=>(de-O)/(S-O));ve.every((de,ue)=>pe[ue]===de)||(U=de=>{if(de<=0||de>=1)return de;let ue=0;for(;de>=ve[ue+1];)ue++;let ye=(de-ve[ue])/(ve[ue+1]-ve[ue]);return pe[ue]+ye*(pe[ue+1]-pe[ue])})}}return o=[O,S],K},K.mode=function(B){return arguments.length?(t=B,Y(),K):t},K.range=function(B,ne){return C(B,ne),K},K.out=function(B){return g=B,K},K.spread=function(B){return arguments.length?(r=B,K):r},K.correctLightness=function(B){return B==null&&(B=!0),I=B,Y(),I?D=function(ne){let pe=G(0,!0).lab()[0],ve=G(1,!0).lab()[0],de=pe>ve,ue=G(ne,!0).lab()[0],ye=pe+(ve-pe)*ne,be=ue-ye,ze=0,He=1,Qe=20;for(;Math.abs(be)>.01&&Qe-- >0;)(function(){return de&&(be*=-1),be<0?(ze=ne,ne+=(He-ne)*.5):(He=ne,ne+=(ze-ne)*.5),ue=G(ne,!0).lab()[0],be=ue-ye})();return ne}:D=ne=>ne,K},K.padding=function(B){return B!=null?(St(B)==="number"&&(B=[B,B]),u=B,K):u},K.colors=function(B,ne){arguments.length<2&&(ne="hex");let pe=[];if(arguments.length===0)pe=d.slice(0);else if(B===1)pe=[K(.5)];else if(B>1){let ve=o[0],de=o[1]-ve;pe=Gke(0,B,!1).map(ue=>K(ve+ue/(B-1)*de))}else{e=[];let ve=[];if(c&&c.length>2)for(let de=1,ue=c.length,ye=1<=ue;ye?deue;ye?de++:de--)ve.push((c[de-1]+c[de])*.5);else ve=o;pe=ve.map(de=>K(de))}return Tt[ne]&&(pe=pe.map(ve=>ve[ne]())),pe},K.cache=function(B){return B!=null?(k=B,K):k},K.gamma=function(B){return B!=null?(M=B,K):M},K.nodata=function(B){return B!=null?(n=Tt(B),K):n},K}function Gke(e,t,n){let r=[],o=ei;o?u++:u--)r.push(u);return r}var Xke=function(e){let t=[1,1];for(let n=1;nnew Ne(i)),e.length===2)[n,r]=e.map(i=>i.lab()),t=function(i){let u=[0,1,2].map(c=>n[c]+i*(r[c]-n[c]));return new Ne(u,"lab")};else if(e.length===3)[n,r,o]=e.map(i=>i.lab()),t=function(i){let u=[0,1,2].map(c=>(1-i)*(1-i)*n[c]+2*(1-i)*i*r[c]+i*i*o[c]);return new Ne(u,"lab")};else if(e.length===4){let i;[n,r,o,i]=e.map(u=>u.lab()),t=function(u){let c=[0,1,2].map(d=>(1-u)*(1-u)*(1-u)*n[d]+3*(1-u)*(1-u)*u*r[d]+3*(1-u)*u*u*o[d]+u*u*u*i[d]);return new Ne(c,"lab")}}else if(e.length>=5){let i,u,c;i=e.map(d=>d.lab()),c=e.length-1,u=Xke(c),t=function(d){let g=1-d,O=[0,1,2].map(S=>i.reduce((I,R,k)=>I+u[k]*g**(c-k)*d**k*R[S],0));return new Ne(O,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},mue=e=>{let t=Kke(e);return t.scale=()=>Md(t),t};var os=(e,t,n)=>{if(!os[n])throw new Error("unknown blend mode "+n);return os[n](e,t)},qp=e=>(t,n)=>{let r=Tt(n).rgb(),o=Tt(t).rgb();return Tt.rgb(e(r,o))},Up=e=>(t,n)=>{let r=[];return r[0]=e(t[0],n[0]),r[1]=e(t[1],n[1]),r[2]=e(t[2],n[2]),r},Yke=e=>e,Qke=(e,t)=>e*t/255,Zke=(e,t)=>e>t?t:e,eCe=(e,t)=>e>t?e:t,tCe=(e,t)=>255*(1-(1-e/255)*(1-t/255)),rCe=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),nCe=(e,t)=>255*(1-(1-t/255)/(e/255)),oCe=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);os.normal=qp(Up(Yke));os.multiply=qp(Up(Qke));os.screen=qp(Up(tCe));os.overlay=qp(Up(rCe));os.darken=qp(Up(Zke));os.lighten=qp(Up(eCe));os.dodge=qp(Up(oCe));os.burn=qp(Up(nCe));var hue=os;var{pow:iCe,sin:aCe,cos:lCe}=Math;function gue(e=300,t=-1.5,n=1,r=1,o=[0,1]){let i=0,u;St(o)==="array"?u=o[1]-o[0]:(u=0,o=[o,o]);let c=function(d){let g=xl*((e+120)/360+t*d),O=iCe(o[0]+u*d,r),I=(i!==0?n[0]+d*i:n)*O*(1-O)/2,R=lCe(g),k=aCe(g),M=O+I*(-.14861*R+1.78277*k),C=O+I*(-.29227*R-.90649*k),T=O+I*(1.97294*R);return Tt(Ad([M*255,C*255,T*255,1]))};return c.start=function(d){return d==null?e:(e=d,c)},c.rotations=function(d){return d==null?t:(t=d,c)},c.gamma=function(d){return d==null?r:(r=d,c)},c.hue=function(d){return d==null?n:(n=d,St(n)==="array"?(i=n[1]-n[0],i===0&&(n=n[1])):i=0,c)},c.lightness=function(d){return d==null?o:(St(d)==="array"?(o=d,u=d[1]-d[0]):(o=[d,d],u=0),c)},c.scale=()=>Tt.scale(c),c.hue(n),c}var sCe="0123456789abcdef",{floor:uCe,random:cCe}=Math,vue=()=>{let e="#";for(let t=0;t<6;t++)e+=sCe.charAt(uCe(cCe()*16));return new Ne(e,"hex")};var{log:yue,pow:pCe,floor:fCe,abs:dCe}=Math;function OF(e,t=null){let n={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return St(e)==="object"&&(e=Object.values(e)),e.forEach(r=>{t&&St(r)==="object"&&(r=r[t]),r!=null&&!isNaN(r)&&(n.values.push(r),n.sum+=r,rn.max&&(n.max=r),n.count+=1)}),n.domain=[n.min,n.max],n.limits=(r,o)=>xF(n,r,o),n}function xF(e,t="equal",n=7){St(e)=="array"&&(e=OF(e));let{min:r,max:o}=e,i=e.values.sort((c,d)=>c-d);if(n===1)return[r,o];let u=[];if(t.substr(0,1)==="c"&&(u.push(r),u.push(o)),t.substr(0,1)==="e"){u.push(r);for(let c=1;c 0");let c=Math.LOG10E*yue(r),d=Math.LOG10E*yue(o);u.push(r);for(let g=1;g200&&(S=!1)}let k={};for(let C=0;CC-T),u.push(M[0]);for(let C=1;C{e=new Ne(e),t=new Ne(t);let n=e.luminance(),r=t.luminance();return n>r?(n+.05)/(r+.05):(r+.05)/(n+.05)};var{sqrt:Qu,pow:vo,min:mCe,max:hCe,atan2:wue,abs:Oue,cos:gE,sin:xue,exp:gCe,PI:_ue}=Math;function Sue(e,t,n=1,r=1,o=1){var i=function(Ge){return 360*Ge/(2*_ue)},u=function(Ge){return 2*_ue*Ge/360};e=new Ne(e),t=new Ne(t);let[c,d,g]=Array.from(e.lab()),[O,S,I]=Array.from(t.lab()),R=(c+O)/2,k=Qu(vo(d,2)+vo(g,2)),M=Qu(vo(S,2)+vo(I,2)),C=(k+M)/2,T=.5*(1-Qu(vo(C,7)/(vo(C,7)+vo(25,7)))),D=d*(1+T),U=S*(1+T),G=Qu(vo(D,2)+vo(g,2)),Y=Qu(vo(U,2)+vo(I,2)),K=(G+Y)/2,B=i(wue(g,D)),ne=i(wue(I,U)),pe=B>=0?B:B+360,ve=ne>=0?ne:ne+360,de=Oue(pe-ve)>180?(pe+ve+360)/2:(pe+ve)/2,ue=1-.17*gE(u(de-30))+.24*gE(u(2*de))+.32*gE(u(3*de+6))-.2*gE(u(4*de-63)),ye=ve-pe;ye=Oue(ye)<=180?ye:ve<=pe?ye+360:ye-360,ye=2*Qu(G*Y)*xue(u(ye)/2);let be=O-c,ze=Y-G,He=1+.015*vo(R-50,2)/Qu(20+vo(R-50,2)),Qe=1+.045*K,Be=1+.015*K*ue,Ze=30*gCe(-vo((de-275)/25,2)),Ke=-(2*Qu(vo(K,7)/(vo(K,7)+vo(25,7))))*xue(2*u(Ze)),Ht=Qu(vo(be/(n*He),2)+vo(ze/(r*Qe),2)+vo(ye/(o*Be),2)+Ke*(ze/(r*Qe))*(ye/(o*Be)));return hCe(0,mCe(100,Ht))}function Iue(e,t,n="lab"){e=new Ne(e),t=new Ne(t);let r=e.get(n),o=t.get(n),i=0;for(let u in r){let c=(r[u]||0)-(o[u]||0);i+=c*c}return Math.sqrt(i)}var jue=(...e)=>{try{return new Ne(...e),!0}catch{return!1}};var Eue={cool(){return Md([Tt.hsl(180,1,.9),Tt.hsl(250,.7,.4)])},hot(){return Md(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var vE={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]};for(let e of Object.keys(vE))vE[e.toLowerCase()]=vE[e];var Pue=vE;Object.assign(Tt,{average:due,bezier:mue,blend:hue,cubehelix:gue,mix:Vp,interpolate:Vp,random:vue,scale:Md,analyze:OF,contrast:bue,deltaE:Sue,distance:Iue,limits:xF,valid:jue,scales:Eue,input:Et,colors:Hp,brewer:Pue});var dn=Tt;var kue="#EBEFF5";function T1(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:10,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],u=t%2===0,c=n?Math.ceil(t/2)+(u?1:0):t,d=n?Math.ceil(t/2)+(u?1:0):0;if(o.length===1&&o.unshift(kue),n){o.length<3&&(o[2]=o[1],o[1]=kue);var g=Math.ceil(o.length/2),O=o.filter(function(M,C){if(Ce.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=t.rotations,r=n===void 0?1:n,o=t.order,i=o===void 0?"append":o,u=t.direction,c=u===void 0?"lighter":u,d=t.sortBy,g=d===void 0?"default":d,O=t.sortShift,S=O===void 0?"-100":O,I=[],R=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(g==="natural"&&(R=_F(R).sort(function(T,D){return dn(T).set("hsl.h",S).hsl()[0]-dn(D).set("hsl.h",S).hsl()[0]})),r>1){var k=R.map(function(T){var D=T1(["black",T,"white"],5,!1,!0);switch(D.pop(),D.shift(),c){case"lighter":return T1([D[1],D[2]],r,!1,!0);case"darker":return T1([D[1],D[0]],r,!1,!0);case"both":return T1(D,r,!1,!0)}});if(i==="group")I=OCe(k);else for(var M=function(D){var U,G=k.map(function(Y){return Y[D]});(U=I).push.apply(U,_F(G))},C=0;C0&&arguments[0]!==void 0?arguments[0]:{},n=Zu(t),r=n.map(function(o){return dn(o).brighten(.5).hex()});return r};var XGt=Zu()[9],KGt=[Zu()[1],"#6092C0"],YGt=[Zu()[7],Zu()[9]];var Cue=function(t,n){return rF(t)?n.hex():n.css()},Ta=function(t,n){return dn(t).alpha(n).css()},Gs=function(t,n){var r=dn.mix(t,"#fff",n,"rgb");return Cue(t,r)},Xs=function(t,n){var r=dn.mix(t,"#000",n,"rgb");return Cue(t,r)};var yE=function(t){return dn(t).get("hsl.l")*100};function T2(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T2=function(n){return typeof n}:T2=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},T2(e)}var Ks=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(r){var o,i=T2(r)==="object"&&(o=Ku(r,t))!==null&&o!==void 0?o:t,u=T2(r)==="object"?r.colors.body:r;(dn(i).alpha()<1||dn(u).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: Foreground: `.concat(i,` -Background: `).concat(u));for(var c=dn.contrast(i,u),d=vE(u),g=i;c50?g=Gs(g,.05):g=Js(g,.05),c=dn.contrast(g,u);var O=vE(g);if(O<5)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for light mode."),g;if(O>95)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for dark mode."),g}return dn(g).hex()}},yE=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return function(r){return Xs(t,n)(r)}};function jue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function qp(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n50?g=Xs(g,.05):g=Gs(g,.05),c=dn.contrast(g,u);var O=yE(g);if(O<5)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for light mode."),g;if(O>95)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for dark mode."),g}return dn(g).hex()}},bE=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return function(r){return Ks(t,n)(r)}};function Aue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function $p(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:1;return function(n){var r=bE(n)==="object"?n.base:n;return"".concat(r*t,"px")}};function zue(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,c=o.customScale;if(u==="em")return"".concat(r.scale[e],"em");var d=n*r.scale[e];c&&(d*=r.scale[c]);var g=n*r.scale[r.body.scale];return u==="px"?"".concat(d,"px"):"".concat((d/g).toFixed(4),"rem")}function Due(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,c=o.customScale,d=r.baseline,g=r.lineHeightMultiplier,O=n*r.scale[e];c&&(O*=r.scale[c]);var S=n*r.scale[r.body.scale],I=O<=n?g:g*.833;if(u==="em")return I.toFixed(4).toString();var R=Math.floor(Math.round(O*I)/d)*d;return u==="px"?"".concat(R,"px"):"".concat((R/S).toFixed(4),"rem")}var Lue=16,Nue={xxs:gr(Ii(.125)),xs:gr(Ii(.25)),s:gr(Ii(.5)),m:gr(Ii(.75)),base:gr(Ii()),l:gr(Ii(1.5)),xl:gr(Ii(2)),xxl:gr(Ii(2.5)),xxxl:gr(Ii(3)),xxxxl:gr(Ii(4))};function wE(e,t){return JCe(e)||$Ce(e,t)||UCe(e,t)||qCe()}function qCe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function UCe(e,t){if(e){if(typeof e=="string")return Fue(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Fue(e,t)}}function Fue(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:50,r=Date.now();return function(){r+n-Date.now()<0&&(t.apply(void 0,arguments),r=Date.now())}};function kDe(e,t){return TDe(e)||MDe(e,t)||ADe(e,t)||CDe()}function CDe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ADe(e,t){if(e){if(typeof e=="string")return lde(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return lde(e,t)}}function lde(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:!0,r=XF();return r&&n?t.includes(r):!1};var ude=function(t){var n=t instanceof HTMLElement?t:null;return typeof t=="string"?n=document.querySelector(t):typeof t=="function"&&(n=t()),n};var cde=E(YF());var QF=function(t){return t===void 0},RDe=function(t){return t===null},Sl=function(t){return QF(t)||RDe(t)};var pde=function(t){return cde.default.isDate(t)};var bde=E(xE()),wde=E(is()),Ode=E(dde()),xde=E(hde()),_de=E(ZF()),Sde=E(yde()),KDe=E(Ad()),Jp=function(t){return(0,bde.default)(t)},Ide=function(t){return(0,wde.default)(t)},Hi=function(t){return(0,Ode.default)(t)},LE=function(t){return(0,xde.default)(t)},NE=function(t){return(0,_de.default)(t)},jde=function(t){return(0,Sde.default)(t)};var U1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.yes,o=r===void 0?"Yes":r,i=n.no,u=i===void 0?"No":i,c=n.nil,d=c===void 0?"":c;return Sl(t)?d:t?o:u};var WE=E(YF());function FE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?FE=function(n){return typeof n}:FE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},FE(e)}function Ede(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Pde(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=n.refTime;return(0,WE.default)(t).calendar(r,n)},$2={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:eW,calendarDateTime:function(t,n){return eW(t,Pde({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},n))},calendarDate:function(t,n){return eW(t,Pde({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},n))}};function QDe(e){return $2.hasOwnProperty(e)}function ZDe(e){return FE(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var $1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(Hi(n)){if(Sl(t))return"";var r=QDe(n)?$2[n]:n;if(Jp(r))return r(t,{});if(Hi(r))return(0,WE.default)(t).format(r)}if(ZDe(n)){var o=n.format,i=o===void 0?"dateTime":o,u=n.nil,c=u===void 0?"":u,d=n.options,g=$2[i]||i;if(Sl(t))return c;if(Jp(g))return g(t,d);if(Hi(g))return(0,WE.default)(t).format(g)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(n))};var Ade=E(Cde());var eLe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},J1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,o="",i;if(Hi(n)?r=n:(r=n.format,o=n.nil||"",i=n.round),!r)return Sl(t)?o:t.toString();var u=i?Math.round:Math.floor,c=eLe[r]||r;return Sl(t)?o:(0,Ade.default)(t).format(c,u)};var G1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return Sl(t)?n.nil:t.toString()};var HE=function e(t){return Sl(t)||jde(t)?"":Hi(t)?G1(t):pde(t)?$1(t):LE(t)?U1(t):NE(t)?J1(t):Ide(t)?Array.isArray(t)?t.map(function(n){return e(n)}).join(", "):e(t):JSON.stringify(t)};var rLe=/^([a-zA-Z0-9]+\.)*elastic\.co$/,zde=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";try{var n=new URL(t),r=n.protocol==="http:"||n.protocol==="https:",o=!!n.host.match(rLe);return r&&o}catch{return!1}};var yo=function(t){var n=t.href,r=t.target,o=r===void 0?"":r,i=t.rel,u=!!n&&zde(n),c=i?i.split(" ").filter(function(d){return!!d.length&&d!=="noreferrer"}):[];return u||c.push("noreferrer"),o.includes("_blank")&&c.indexOf("noopener")===-1&&c.push("noopener"),c.sort().join(" ").trim()};var Dde=E(rt()),VE="asc",rW="desc",Il=Object.freeze({ASC:VE,DESC:rW,isAsc:function(t){return t===VE},reverse:function(t){return this.isAsc(t)?rW:VE}}),Lde=Dde.default.oneOf([VE,rW]);var s1e=E(o0e()),LBe=E(l1e()),Td=function(t,n,r){return(0,s1e.default)(t,n,r)};var G2=Object.freeze({default:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Il.ASC;return function(n,r){var o=n!=null,i=r!=null;if(o&&!i)return-1;if(!o&&i)return 1;if(!o&&!i||n===r)return 0;var u=n>r?1:-1;return Il.isAsc(t)?u:-1*u}},reverse:function(t){return function(n,r){return t(r,n)}},value:function(e){function t(n,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){return t||(t=this.default(Il.ASC)),function(n,r){return t(e(n),e(r))}}),property:function(t,n){return this.value(function(r){return Td(r,t)},n)}});function KE(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mW(e,t){return BBe(e)||WBe(e,t)||FBe(e,t)||NBe()}function NBe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FBe(e,t){if(e){if(typeof e=="string")return u1e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u1e(e,t)}}function u1e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nH)&&(H=fe.fit,ne={fit:fe.fit,position:ye,top:fe.top+window.pageYOffset,left:fe.left+window.pageXOffset,arrow:fe.arrow},H===1))break}if(ne==null)throw new Error("Failed to calculate bestPosition");return k&&(ne.anchorBoundingBox=A),ne}function HBe(e){var t,n,r=e.position,o=e.align,i=e.anchorBoundingBox,u=e.popoverBoundingBox,c=e.windowBoundingBox,d=e.containerBoundingBox,g=e.arrowConfig,O=e.offset,S=O===void 0?0:O,I=e.buffer,R=I===void 0?0:I,k=dW[r],A=Y1[k],M=fW[k],T=p1e(R),N=mW(T,4),U=N[0],X=N[1],Y=N[2],K=N[3],H=VBe({crossAxisFirstSide:k,crossAxisSecondSide:A,crossAxisDimension:M,position:r,align:o,buffer:R,offset:S,windowBoundingBox:c,containerBoundingBox:d,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:g}),ne=H.crossAxisPosition,pe=H.crossAxisArrowPosition,ye=fW[r],fe=c1e[ye],ue=qBe({position:r,offset:S,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:g}),xe=ue.primaryAxisPosition,me=ue.primaryAxisArrowPosition,We=(t={},KE(t,k,ne),KE(t,fe,xe),t),$e=hW(c,d);$e.top+=U,$e.right-=X,$e.bottom-=Y,$e.left+=K;var Ge=$Be({top:We.top,right:We.left+u.width,bottom:We.top+u.height,left:We.left,width:u.width,height:u.height},$e),Be=g?(n={},KE(n,k,pe-We[k]),KE(n,fe,me),n):void 0;return{fit:Ge,top:We.top,left:We.left,arrow:Be?{left:Be.left,top:Be.top}:void 0}}function VBe(e){var t=e.crossAxisFirstSide,n=e.crossAxisSecondSide,r=e.crossAxisDimension,o=e.position,i=e.align,u=e.buffer,c=e.offset,d=e.windowBoundingBox,g=e.containerBoundingBox,O=e.popoverBoundingBox,S=e.anchorBoundingBox,I=e.arrowConfig,R=O[r],k=S[r],A=k/2,M=S[t]+A-R/2,T=hW(d,g),N=UBe(S,T,u,c,o),U=I?I.arrowBuffer:0,X=(R-k)/2,Y=0,K=1,H=0,ne=1;if(i!=null){K=i==="top"||i==="left"?1:-1,Y=X;var pe=X+Y,ye=pe>N[Y1[i]];H=ye?pe-N[Y1[i]]:0,ne=-1*K}else{var fe=N[t],ue=N[n],xe=fe>ue;ne=xe?-1:1;var me=Math.min(fe,ue),We=X>me;H=We?X-me:0}var $e=H*ne,Ge=M+$e+Y*K,Be;if(I){var et=I.arrowWidth;if(Be=S[t]+A-et/2,BeGe+R){var Qe=Ge+R,Ht=Be-(Qe-U-et);Ge+=Ht}}return{crossAxisPosition:Ge,crossAxisArrowPosition:Be}}function qBe(e){var t=e.position,n=e.offset,r=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,u=t==="top"||t==="left",c=fW[t],d=r[c],g=c1e[c],O=o[g],S=o[c],I=u?d:S,R=(n+I)*(u?-1:1),k=O+R,A;return i&&(A=u?d:0),{primaryAxisPosition:k,primaryAxisArrowPosition:A}}function pW(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function UBe(e,t,n,r,o){var i=p1e(n),u=mW(i,4),c=u[0],d=u[1],g=u[2],O=u[3];return{top:e.top-t.top-c-(o==="top"?r:0),right:t.right-e.right-d-(o==="right"?r:0),bottom:t.bottom-e.bottom-g-(o==="bottom"?r:0),left:e.left-t.left-O-(o==="left"?r:0)}}function $Be(e,t){var n=hW(e,t);if(n.left>n.right||n.top>n.top)return 0;var r=(n.right-n.left)*(n.bottom-n.top),o=(e.right-e.left)*(e.bottom-e.top);return r/o}function hW(e,t){var n=Math.max(e.top,t.top),r=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),u=Math.max(o-n,0),c=Math.max(r-i,0);return{top:n,right:r,bottom:o,left:i,height:u,width:c}}function X2(e,t){for(var n=[];n.push(e),e=e.offsetParent,!(e==null||e.contains(t)););n.reverse();for(var r=0,o=n;r0){var r=Date.now(),o=r+t,i=function u(){n(),o>Date.now()&&requestAnimationFrame(u)};requestAnimationFrame(i)}};var m1e=E(D()),h1e=function(t){return(0,m1e.useCallback)(function(n){return t.forEach(function(r){r&&(typeof r=="function"?r(n):r.current=n)})},[t])};var hP=E(D()),Rt=E(rt()),fP=E(yt());var Ngr=E(D()),oi=E(rt()),Y1e=E(yt());var Y2={};$(Y2,{icon:()=>ZBe});var xer=E(D());var XBe=["title","titleId"];function gW(){return gW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QBe=function(t){var n=t.title,r=t.titleId,o=KBe(t,XBe);return a("svg",gW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 0a8 8 0 110 16A8 8 0 018 0zm0 1a7 7 0 100 14A7 7 0 008 1zm3.974 4.342a.5.5 0 01-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 01-.233.596l-.083.036a.5.5 0 01-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 01-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 01.228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 01.632.316zM8 3a1 1 0 110 2 1 1 0 010-2z"}))},ZBe=QBe;var Q2={};$(Q2,{icon:()=>oHe});var Ser=E(D());var eHe=["title","titleId"];function vW(){return vW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nHe=function(t){var n=t.title,r=t.titleId,o=tHe(t,eHe);return a("svg",vW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 100 1 .5.5 0 000-1zm0-1a1.5 1.5 0 011.415 1h1.908a1.5 1.5 0 011.393.943L8.839 7H12.5a.5.5 0 010 1H8.839l-1.623 4.057A1.5 1.5 0 015.823 13H3.915a1.5 1.5 0 110-1h1.908a.5.5 0 00.464-.314L7.761 8H3.915a1.5 1.5 0 110-1H7.76L6.287 3.314A.5.5 0 005.823 3H3.915A1.5 1.5 0 112.5 1zm0 11a.5.5 0 110 1 .5.5 0 010-1zM3 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm9.354-3.354a.5.5 0 00-.708.708L13.793 7a.707.707 0 010 1l-2.147 2.146a.5.5 0 00.708.708L14.5 8.707a1.707 1.707 0 000-2.414l-2.146-2.147z"}))},oHe=nHe;var Z2={};$(Z2,{icon:()=>uHe});var jer=E(D());var iHe=["title","titleId"];function yW(){return yW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sHe=function(t){var n=t.title,r=t.titleId,o=aHe(t,iHe);return a("svg",yW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.59 10.059L7.35 5.18h1.3L8.4 10.06h-.81zm.394 1.901a.61.61 0 01-.448-.186.606.606 0 01-.186-.444c0-.174.062-.323.186-.446a.614.614 0 01.448-.184c.169 0 .315.06.44.182.124.122.186.27.186.448a.6.6 0 01-.189.446.607.607 0 01-.437.184zM2 14a1 1 0 01-.878-1.479l6-11a1 1 0 011.756 0l6 11A1 1 0 0114 14H2zm0-1h12L8 2 2 13z"}))},uHe=sHe;var eb={};$(eb,{icon:()=>mHe});var Per=E(D());var cHe=["title","titleId"];function bW(){return bW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dHe=function(t){var n=t.title,r=t.titleId,o=pHe(t,cHe);return a("svg",bW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.169L2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17zM15 4v8l-7 4-7-4V4l7-4 7 4zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638z"}))},mHe=dHe;var tb={};$(tb,{icon:()=>bHe});var Cer=E(D());var hHe=["title","titleId"];function wW(){return wW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yHe=function(t){var n=t.title,r=t.titleId,o=gHe(t,hHe);return a("svg",wW({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},bHe=yHe;var rb={};$(rb,{icon:()=>SHe});var Mer=E(D());var wHe=["title","titleId"];function OW(){return OW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _He=function(t){var n=t.title,r=t.titleId,o=OHe(t,wHe);return a("svg",OW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.5a4.5 4.5 0 115 4.473V16H7v-5.027A4.5 4.5 0 013 6.5z"}))},SHe=_He;var nb={};$(nb,{icon:()=>kHe});var Rer=E(D());var IHe=["title","titleId"];function xW(){return xW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PHe=function(t){var n=t.title,r=t.titleId,o=jHe(t,IHe);return a("svg",xW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm.5 2h10a.5.5 0 110 1h-10a.5.5 0 010-1zm1 3h6a.5.5 0 010 1h-6a.5.5 0 010-1zm2 3h4a.5.5 0 010 1h-4a.5.5 0 010-1zm3 3h5a.5.5 0 110 1h-5a.5.5 0 110-1z"}))},kHe=PHe;var ob={};$(ob,{icon:()=>RHe});var Der=E(D());var CHe=["title","titleId"];function _W(){return _W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var THe=function(t){var n=t.title,r=t.titleId,o=AHe(t,CHe);return a("svg",_W({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 30H0V3h12.57l3 5H32v22zM2 28h28V10H14.43l-3-5H2v23z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z"}))},RHe=THe;var ib={};$(ib,{icon:()=>FHe});var Ner=E(D());var zHe=["title","titleId"];function SW(){return SW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NHe=function(t){var n=t.title,r=t.titleId,o=DHe(t,zHe);return a("svg",SW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M2.909 26.182h1.939v4.848H2.909z"}),a("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}),a("path",{className:"euiIcon__fillSecondary",d:"M14.545 16.485h1.939V31.03h-1.939z"}),a("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 101.94 0zm-.97 5.682a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.88z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.182 26.182h1.939v4.848h-1.939z"}),a("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}))},FHe=NHe;var ab={};$(ab,{icon:()=>qHe});var Wer=E(D());var WHe=["title","titleId"];function IW(){return IW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VHe=function(t){var n=t.title,r=t.titleId,o=BHe(t,WHe);return a("svg",IW({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M21 2.82L16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 7.282L16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282z"}),a("path",{d:"M7 5.045L2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M22 12.5L16 9l-6 3.5v7l6 3.5 6-3.5v-7zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59z"}))},qHe=VHe;var lb={};$(lb,{icon:()=>XHe});var Her=E(D());var UHe=["title","titleId"];function jW(){return jW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GHe=function(t){var n=t.title,r=t.titleId,o=$He(t,UHe);return a("svg",jW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),a("path",{className:"euiIcon__fillSecondary",d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0121 19z"}))},XHe=GHe;var sb={};$(sb,{icon:()=>eVe});var qer=E(D());var KHe=["title","titleId"];function EW(){return EW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZHe=function(t){var n=t.title,r=t.titleId,o=YHe(t,KHe);return a("svg",EW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M15.5 11.915L27 5.279 19.5.938a7.002 7.002 0 00-7 0l-8 4.62A7 7 0 001 11.62v9.237a7 7 0 003.5 6.061l7.5 4.33V17.98a7 7 0 013.5-6.063zM10 27.785v-9.808a9 9 0 014.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 00-5 0l-8 4.619A5 5 0 003 11.62v9.238a5 5 0 002.5 4.33l4.5 2.598z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M18.409 13.55a7.089 7.089 0 011.035 1.711A6.93 6.93 0 0120 17.98v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.239a6.992 6.992 0 00-1.587-4.421L18.409 13.55zm2.777.705A8.933 8.933 0 0122 17.979v9.807l4.5-2.598a5 5 0 002.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335z"}))},eVe=ZHe;var ub={};$(ub,{icon:()=>iVe});var $er=E(D());var tVe=["title","titleId"];function PW(){return PW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oVe=function(t){var n=t.title,r=t.titleId,o=rVe(t,tVe);return a("svg",PW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M15 0h2v32h-2z"}),a("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},iVe=oVe;var cb={};$(cb,{icon:()=>cVe});var Ger=E(D());var aVe=["title","titleId"];function kW(){return kW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uVe=function(t){var n=t.title,r=t.titleId,o=lVe(t,aVe);return a("svg",kW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z"}),a("path",{d:"M30.73 24a6.47 6.47 0 01.45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 00-.54-2.81 6.47 6.47 0 01-.45-2.19 9.2 9.2 0 01.62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 01-2.09.64 5.3 5.3 0 01-.59 0L16 .28 6.77 8a5.3 5.3 0 01-.59 0 5.59 5.59 0 01-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 011.27 14a6.47 6.47 0 01-.45 2.19A8.55 8.55 0 00.28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 011.27 24a9.2 9.2 0 01-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 002.15-.63A5.59 5.59 0 016.18 30a7.13 7.13 0 012.29.47 8 8 0 002.62.53 7.37 7.37 0 002.47-.51A7.14 7.14 0 0116 30a6.24 6.24 0 012.14.45 8 8 0 002.77.55 8.08 8.08 0 002.77-.55 6.24 6.24 0 012.14-.45 5.59 5.59 0 012.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 01-.62-2.5zM21.17 7h-.26a8 8 0 00-2.77.55A6.24 6.24 0 0116 8a6.24 6.24 0 01-2.14-.45A8 8 0 0011.09 7h-.26L16 2.72 21.17 7zm8.89 22.27a4.42 4.42 0 01-1.34-.46 7.08 7.08 0 00-2.9-.82 8.14 8.14 0 00-2.78.55 6.13 6.13 0 01-2.13.45 6.24 6.24 0 01-2.14-.45A8 8 0 0016 28a9 9 0 00-3.08.6 5.74 5.74 0 01-1.83.4 6.36 6.36 0 01-2-.43A8.72 8.72 0 006.18 28a7.08 7.08 0 00-2.9.82 9.65 9.65 0 01-1.28.52 6.08 6.08 0 01.52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 00-.54-2.81A6.47 6.47 0 012.27 19a6.47 6.47 0 01.44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 00-.72-3.13 9 9 0 01-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 002.9.82A8.14 8.14 0 009 9.44 6.13 6.13 0 0111.09 9a6.13 6.13 0 012.13.45A8.14 8.14 0 0016 10a8.14 8.14 0 002.78-.55A6.13 6.13 0 0120.91 9a6.13 6.13 0 012.09.44 8.14 8.14 0 002.78.55 7.08 7.08 0 002.9-.82A9.65 9.65 0 0130 8.66a6.08 6.08 0 01-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 01.44 2.19 6.47 6.47 0 01-.44 2.19 8.55 8.55 0 00-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 01.59 2.16v-.02z"}))},cVe=uVe;var pb={};$(pb,{icon:()=>hVe});var Ker=E(D());var pVe=["title","titleId"];function CW(){return CW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mVe=function(t){var n=t.title,r=t.titleId,o=fVe(t,pVe);return a("svg",CW({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M22.5 24a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0 2a7.5 7.5 0 100-15 7.5 7.5 0 000 15z"}),a("path",{d:"M30.293 27.707l-4-4 1.414-1.414 4 4-1.414 1.414zM6 4H2v27h25v-3h-2v1H4V6h2V4zm19 6h2V4h-4v2h2v4z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M16.381 3.024l.538 1.158h2.274l.636 2.545H9.68l.637-2.545h2.558l.538-1.158c.292-.63.955-1.024 1.484-1.024.53 0 1.193.394 1.485 1.024zm6.01 5.703l-1.636-6.545h-2.56C17.6.898 16.262 0 14.897 0c-1.364 0-2.703.898-3.299 2.182H8.755L7.118 8.727h15.273zM7 15h6v-2H7v2zm6 5H7v-2h6v2zm-6 5h6v-2H7v2z"}))},hVe=mVe;var fb={};$(fb,{icon:()=>wVe});var Qer=E(D());var gVe=["title","titleId"];function AW(){return AW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bVe=function(t){var n=t.title,r=t.titleId,o=vVe(t,gVe);return a("svg",AW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.276 29l.594 2H0l7.621-14.29.811 2.73L3.333 29h7.943zM28.92 31l-4.987-16.598A16 16 0 008.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0117.241 12.828L31 31h-2.08z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12.037 14.02L16.492 29h6.827l-2.333-7.849a10 10 0 00-8.949-7.13zM9.35 12h2.05a12 12 0 0111.503 8.581L26 31H15L9.35 12z"}))},wVe=bVe;var db={};$(db,{icon:()=>IVe});var etr=E(D());var OVe=["title","titleId"];function MW(){return MW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ve(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SVe=function(t){var n=t.title,r=t.titleId,o=xVe(t,OVe);return a("svg",MW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 32H3a3 3 0 01-3-3V14a3 3 0 013-3h26a3 3 0 013 3v15a3 3 0 01-3 3zM3 13a1 1 0 00-1 1v15a1 1 0 001 1h26a1 1 0 001-1V14a1 1 0 00-1-1H3z"}),a("path",{d:"M7.29 17.71l3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},IVe=SVe;var mb={};$(mb,{icon:()=>CVe});var rtr=E(D());var jVe=["title","titleId"];function TW(){return TW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kVe=function(t){var n=t.title,r=t.titleId,o=EVe(t,jVe);return a("svg",TW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 01-9-9zM18 3h-2v2h2a9 9 0 019 9h2c0-6.075-4.925-11-11-11z"}))},CVe=kVe;var hb={};$(hb,{icon:()=>zVe});var otr=E(D());var AVe=["title","titleId"];function RW(){return RW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RVe=function(t){var n=t.title,r=t.titleId,o=MVe(t,AVe);return a("svg",RW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12 20H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{d:"M12 31H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 31h-9a3 3 0 01-3-3V14a3 3 0 013-3h9a3 3 0 013 3v14a3 3 0 01-3 3zm-9-18a1 1 0 00-1 1v14a1 1 0 001 1h9a1 1 0 001-1V14a1 1 0 00-1-1h-9z"}))},zVe=RVe;var gb={};$(gb,{icon:()=>WVe});var atr=E(D());var DVe=["title","titleId"];function zW(){return zW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FVe=function(t){var n=t.title,r=t.titleId,o=LVe(t,DVe);return a("svg",zW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0021 3.52V11H11V3.52a9 9 0 001.4 15.73l.6.26V28h-2v-7.21A11 11 0 0111.6.92L13 .31V9h6V.31l1.4.61a11 11 0 01.6 19.87V28z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 30h10v2H11z"}))},WVe=FVe;var vb={};$(vb,{icon:()=>UVe});var str=E(D());var BVe=["title","titleId"];function DW(){return DW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qVe=function(t){var n=t.title,r=t.titleId,o=HVe(t,BVe);return a("svg",DW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z"}),a("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0016 0zm1 29.95V28h-2v1.95A14 14 0 012.05 17H4v-2H2.05A14 14 0 0115 2.05V4h2V2.05A14 14 0 0129.95 15H28v2h1.95A14 14 0 0117 29.95z"}))},UVe=qVe;var yb={};$(yb,{icon:()=>KVe});var ctr=E(D());var $Ve=["title","titleId"];function LW(){return LW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XVe=function(t){var n=t.title,r=t.titleId,o=JVe(t,$Ve);return a("svg",LW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M3 22h3v2H1V1h23v5h-2V3H3z"}),a("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521zM31 8v23H8V8h23z"}))},KVe=XVe;var bb={};$(bb,{icon:()=>tqe});var ftr=E(D());var YVe=["title","titleId"];function NW(){return NW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eqe=function(t){var n=t.title,r=t.titleId,o=QVe(t,YVe);return a("svg",NW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z"}),a("path",{d:"M21.41 0H5a3 3 0 00-3 3v26a3 3 0 003 3h22a3 3 0 003-3V8.59L21.41 0zM22 3.41L26.59 8H22V3.41zM27 30H5a1 1 0 01-1-1V3a1 1 0 011-1h15v8h8v19a1 1 0 01-1 1z"}))},tqe=eqe;var wb={};$(wb,{icon:()=>aqe});var mtr=E(D());var rqe=["title","titleId"];function FW(){return FW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iqe=function(t){var n=t.title,r=t.titleId,o=nqe(t,rqe);return a("svg",FW({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.996 18.636L0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733zM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 22.166l-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4z"}))},aqe=iqe;var Ob={};$(Ob,{icon:()=>pqe});var gtr=E(D());var lqe=["title","titleId"];function WW(){return WW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cqe=function(t){var n=t.title,r=t.titleId,o=sqe(t,lqe);return a("svg",WW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M29.014 23.89l2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074zm-4.972-7.482l7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584z"}),a("path",{d:"M18 9a2 2 0 10-4 0 2 2 0 004 0zm2 0a4 4 0 11-8 0 4 4 0 018 0zm-3.268 12.681l-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 017 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 01-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96zm5.142-9.064A6.747 6.747 0 0023 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912z"}))},pqe=cqe;var xb={};$(xb,{icon:()=>gqe});var ytr=E(D());var fqe=["title","titleId"];function BW(){return BW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hqe=function(t){var n=t.title,r=t.titleId,o=dqe(t,fqe);return a("svg",BW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M24 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4zm-8.2-5.62A4 4 0 1118 1.06a4 4 0 01-2.2 7.32zm0-6a2 2 0 10.01 0h-.01zm.01 29.24a4 4 0 11-.083-8 4 4 0 01.083 8zm0-6a2 2 0 10.39 0 2 2 0 00-.4 0h.01z"}),a("path",{d:"M18 17v-2h-6.14a4 4 0 00-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 008 12a4 4 0 100 8 4 4 0 001.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 00.86-1.64H18zM6 16a2 2 0 114 0 2 2 0 01-4 0z"}))},gqe=hqe;var _b={};$(_b,{icon:()=>Oqe});var wtr=E(D());var vqe=["title","titleId"];function HW(){return HW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wqe=function(t){var n=t.title,r=t.titleId,o=yqe(t,vqe);return a("svg",HW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 01-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 01.543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 01.544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.212 15.515h-2.007a7.758 7.758 0 00-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 00-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 006.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 006.72-6.72h2.007v-1.94zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 01-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 014.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 014.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 01-4.761 4.76z"}))},Oqe=wqe;var Sb={};$(Sb,{icon:()=>jqe});var xtr=E(D());var xqe=["title","titleId"];function VW(){return VW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iqe=function(t){var n=t.title,r=t.titleId,o=_qe(t,xqe);return a("svg",VW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.14 15.39a8.058 8.058 0 01-2.2-4.043A6.788 6.788 0 014.198 5.47a6.73 6.73 0 018.727-.213l1.26-1.464a8.65 8.65 0 00-11.277.232A8.727 8.727 0 00.068 11.6a10.172 10.172 0 002.793 5.275l1.28-1.484z"}),a("path",{d:"M15.515 31.274L4.548 18.454 15.855 4.763a8.67 8.67 0 0112.266-.746 8.727 8.727 0 012.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275zm-8.427-12.82l8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 00-2.24-5.586 6.73 6.73 0 00-9.504.563L7.088 18.455z"}))},jqe=Iqe;var Ib={};$(Ib,{icon:()=>Aqe});var Str=E(D());var Eqe=["title","titleId"];function qW(){return qW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cqe=function(t){var n=t.title,r=t.titleId,o=Pqe(t,Eqe);return a("svg",qW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM23 8V6h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0017 2.1V0h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0011.1 6H9v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V14h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0020.9 8H23zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M16 8a1 1 0 01-1-1 1.39 1.39 0 010-.2.65.65 0 01.06-.18.74.74 0 01.09-.18 1.61 1.61 0 01.12-.15.93.93 0 01.33-.21 1 1 0 011.09.21l.12.15a.78.78 0 01.09.18.62.62 0 01.1.18 1.27 1.27 0 010 .2 1 1 0 01-1 1z"}))},Aqe=Cqe;var jb={};$(jb,{icon:()=>Dqe});var jtr=E(D());var Mqe=["title","titleId"];function UW(){return UW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zqe=function(t){var n=t.title,r=t.titleId,o=Tqe(t,Mqe);return a("svg",UW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20 14h-8a3 3 0 01-3-3V3a3 3 0 013-3h8a3 3 0 013 3v8a3 3 0 01-3 3zM12 2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V3a1 1 0 00-1-1h-8zM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM13 4h6v2h-6zM13 8h6v2h-6z"}))},Dqe=zqe;var Eb={};$(Eb,{icon:()=>Bqe});var Ptr=E(D());var Lqe=["title","titleId"];function $W(){return $W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wqe=function(t){var n=t.title,r=t.titleId,o=Nqe(t,Lqe);return a("svg",$W({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 26v-2h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0026 20.1V18h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0020.1 24H18v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V32h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0029.9 26H32zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M25.71 24.29a1 1 0 00-1.09-.21 1.15 1.15 0 00-.33.21.93.93 0 00-.21.33 1 1 0 001.3 1.3 1.15 1.15 0 00.33-.21 1 1 0 00.21-1.09.94.94 0 00-.21-.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z"}),a("path",{d:"M16 32H3a3 3 0 01-3-3V3a3 3 0 013-3h20a3 3 0 013 3v13h-2V3a1 1 0 00-1-1H3a1 1 0 00-1 1v26a1 1 0 001 1h13v2z"}))},Bqe=Wqe;var Pb={};$(Pb,{icon:()=>$qe});var Ctr=E(D());var Hqe=["title","titleId"];function JW(){return JW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uqe=function(t){var n=t.title,r=t.titleId,o=Vqe(t,Hqe);return a("svg",JW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M23.793 14.293l1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091zM12 11v5l-2 2v-7h2zm10-6v8l-2 2V5h2zm-5 3v7l-2-2V8h2z"}),a("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 012 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0117 0zM9.621 1.937l.75 1.877a13.062 13.062 0 00-4.82 5.024l-1.907-.673a15.068 15.068 0 015.977-6.228z"}))},$qe=Uqe;var kb={};$(kb,{icon:()=>Yqe});var Mtr=E(D());var Jqe=["title","titleId"];function GW(){return GW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kqe=function(t){var n=t.title,r=t.titleId,o=Gqe(t,Jqe);return a("svg",GW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 002 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.997 30.636L27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z"}))},Yqe=Kqe;var Cb={};$(Cb,{icon:()=>rUe});var Rtr=E(D());var Qqe=["title","titleId"];function XW(){return XW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tUe=function(t){var n=t.title,r=t.titleId,o=Zqe(t,Qqe);return a("svg",XW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M20 32h-8v-4.06a1 1 0 00-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 00.2-1 .93.93 0 00-.86-.6H0V12h4.06a.92.92 0 00.85-.58.94.94 0 00-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0012 4.06V0h8v4.06a1 1 0 001.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 00-.2 1 .93.93 0 00.86.6H32v8h-4.06a.92.92 0 00-.85.58.94.94 0 00.19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 00-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 015-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 012.08-5H30v-4h-2.06a3 3 0 01-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 01-5-2.08V2h-4v2.06a3 3 0 01-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 01-2.08 5H2v4h2.06a3 3 0 012.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 015 2.08V30z"}))},rUe=tUe;var Ab={};$(Ab,{icon:()=>lUe});var Dtr=E(D());var nUe=["title","titleId"];function KW(){return KW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aUe=function(t){var n=t.title,r=t.titleId,o=oUe(t,nUe);return a("svg",KW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12z"}),a("path",{d:"M21.71 11.71L20.3 10.3 18 12.57a4 4 0 00-2-.57 4 4 0 104 4 4 4 0 00-.57-2l2.28-2.29zM16 18a2 2 0 110-4 2 2 0 010 4z"}))},lUe=aUe;var Mb={};$(Mb,{icon:()=>fUe});var Ntr=E(D());var sUe=["title","titleId"];function YW(){return YW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pUe=function(t){var n=t.title,r=t.titleId,o=uUe(t,sUe);return a("svg",YW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 018 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0028 11a9 9 0 10-17.34 3.391l-1.51 1.51z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19 20a8.96 8.96 0 005.618-1.968l-4.202-4.204a2 2 0 00-2.828 0l-4.205 4.205A8.96 8.96 0 0019 20zm-2.826-7.586a4 4 0 015.656 0l5.656 5.657-.707.707A10.967 10.967 0 0119 22a10.967 10.967 0 01-7.778-3.221l-.707-.707 5.659-5.658z"}))},fUe=pUe;var Tb={};$(Tb,{icon:()=>vUe});var Wtr=E(D());var dUe=["title","titleId"];function QW(){return QW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gUe=function(t){var n=t.title,r=t.titleId,o=mUe(t,dUe);return a("svg",QW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M10 18v.56a1 1 0 01-.68.95L3 21.61V10a1 1 0 01.4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 001 10v12a3 3 0 001.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0012 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 01.4.8v11.61l-6.32-2.11a1 1 0 01-.68-.95V18h-2v.56a3 3 0 002.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0031 22V10a3 3 0 00-1.2-2.4z"}),a("path",{d:"M11 6A3 3 0 018.88.88a3.07 3.07 0 014.24 0A3 3 0 0111 6zm0-4a1 1 0 10-.012 2A1 1 0 0011 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 32zm0-4a1 1 0 10-.012 2A1 1 0 0011 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 16zm0-4a1 1 0 10-.012 2A1 1 0 0011 12zm10-6A3 3 0 0118.88.88a3.07 3.07 0 014.24 0A3 3 0 0121 6zm0-4a1 1 0 10-.012 2A1 1 0 0021 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 32zm0-4a1 1 0 10-.012 2A1 1 0 0021 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 16zm0-4a1 1 0 10-.012 2A1 1 0 0021 12z"}))},vUe=gUe;var Rb={};$(Rb,{icon:()=>xUe});var Htr=E(D());var yUe=["title","titleId"];function ZW(){return ZW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OUe=function(t){var n=t.title,r=t.titleId,o=bUe(t,yUe);return a("svg",ZW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.81 15.19A8.94 8.94 0 0115.62 3.86l.38.42.38-.42a8.94 8.94 0 0114.26 10.68l-1.7-1.07a6.94 6.94 0 00-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 003.41 14l-1.6 1.19zM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16.16 23.29l-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z"}))},xUe=OUe;var zb={};$(zb,{icon:()=>EUe});var qtr=E(D());var _Ue=["title","titleId"];function eB(){return eB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jUe=function(t){var n=t.title,r=t.titleId,o=SUe(t,_Ue);return a("svg",eB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22z"}),a("path",{d:"M27 7v23H8v2h21V7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8 12h12v2H8zM8 17h12v2H8z"}))},EUe=jUe;var Db={};$(Db,{icon:()=>MUe});var $tr=E(D());var PUe=["title","titleId"];function tB(){return tB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AUe=function(t){var n=t.title,r=t.titleId,o=kUe(t,PUe);return a("svg",tB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M8 4a4 4 0 10-4 4 4 4 0 002-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 008 4zM4 6a2 2 0 110-4 2 2 0 010 4zm16.71 6.71L26 7.43A4 4 0 0028 8a4 4 0 10-4-4 4 4 0 00.57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 110 4 2 2 0 010-4zM11.29 19.29L6 24.57A4 4 0 004 24a4 4 0 104 4 4 4 0 00-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 110-4 2 2 0 010 4zm24-6a4 4 0 00-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 00-.57 2 4 4 0 104-4zm0 6a2 2 0 110-4 2 2 0 010 4z"}))},MUe=AUe;var Lb={};$(Lb,{icon:()=>LUe});var Gtr=E(D());var TUe=["title","titleId"];function rB(){return rB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DUe=function(t){var n=t.title,r=t.titleId,o=RUe(t,TUe);return a("svg",rB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 12a3 3 0 00-3 3h-4a3 3 0 00-3-3h-6a3 3 0 00-3 3H6a3 3 0 00-3-3H0v14h3a3 3 0 003-3h4a3 3 0 003 3h6a3 3 0 003-3h4a3 3 0 003 3h3V12h-3zM3 24H2V14h1a1 1 0 011 1v8a1 1 0 01-1 1zm17-3v2a1 1 0 01-1 1h-6a1 1 0 01-1-1v-2H6v-4h6v-2a1 1 0 011-1h6a1 1 0 011 1v2h6v4h-6zm10 3h-1a1 1 0 01-1-1v-8a1 1 0 011-1h1v10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 6H10v2h5v2h2V8h5z"}))},LUe=DUe;var Nb={};$(Nb,{icon:()=>HUe});var Ktr=E(D());var NUe=["title","titleId"];function nB(){return nB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BUe=function(t){var n=t.title,r=t.titleId,o=FUe(t,NUe);return a("svg",nB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M15 4h2v9.17A3.009 3.009 0 0118.83 15H26v2h-7.17A3.001 3.001 0 1115 13.17V4zm1 13a1 1 0 100-2 1 1 0 000 2z"}))},HUe=BUe;var Fb={};$(Fb,{icon:()=>JUe});var Qtr=E(D());var VUe=["title","titleId"];function oB(){return oB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ue=function(t){var n=t.title,r=t.titleId,o=qUe(t,VUe);return a("svg",oB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 5h-.17v2H25a1 1 0 011 1v20a1 1 0 01-1 1H7a1 1 0 01-1-1V8a1 1 0 011-1h.17V5H7a3 3 0 00-3 3v20a3 3 0 003 3h18a3 3 0 003-3V8a3 3 0 00-3-3z"}),a("path",{d:"M23 3h-3V0h-8v3H9v6h14V3zm-2 4H11V5h3V2h4v3h3v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z"}))},JUe=$Ue;var Wb={};$(Wb,{icon:()=>QUe});var err=E(D());var GUe=["title","titleId"];function iB(){return iB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YUe=function(t){var n=t.title,r=t.titleId,o=XUe(t,GUe);return a("svg",iB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M20.38 7.001L17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z"}),a("path",{d:"M21.06.165l-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164zM2 9.57l13 8.407v10.279L2 19.84V9.57zm15 18.676V17.978l13-8.407V19.85l-13 8.397z"}))},QUe=YUe;var Bb={};$(Bb,{icon:()=>n$e});var rrr=E(D());var ZUe=["title","titleId"];function aB(){return aB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r$e=function(t){var n=t.title,r=t.titleId,o=e$e(t,ZUe);return a("svg",aB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M11.63 8h7.38v2h-7.38z"}),a("path",{d:"M7 8h3.19v2H7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M7 16h7.38v2H7z"}),a("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),a("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0013 0zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11zM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},n$e=r$e;var Hb={};$(Hb,{icon:()=>s$e});var orr=E(D());var o$e=["title","titleId"];function lB(){return lB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l$e=function(t){var n=t.title,r=t.titleId,o=i$e(t,o$e);return a("svg",lB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 32l-.36-.14A21.07 21.07 0 010 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 01-13.64 19.78L14 32zM2 6.82v5.25a19.08 19.08 0 0012 17.77 19.08 19.08 0 0012-17.77V6.82L14 2.2 2 6.82z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 102 0zM10 14a1 1 0 110-2 1 1 0 010 2zM17 7h2v5.17h-2zM21 17a3 3 0 10-4 2.82V23h2v-3.18A3 3 0 0021 17zm-3 1a1 1 0 110-2 1 1 0 010 2z"}))},s$e=l$e;var Vb={};$(Vb,{icon:()=>d$e});var arr=E(D());var u$e=["title","titleId"];function sB(){return sB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f$e=function(t){var n=t.title,r=t.titleId,o=c$e(t,u$e);return a("svg",sB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z"}),a("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},d$e=f$e;var qb={};$(qb,{icon:()=>y$e});var srr=E(D());var m$e=["title","titleId"];function uB(){return uB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v$e=function(t){var n=t.title,r=t.titleId,o=h$e(t,m$e);return a("svg",uB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z"}),a("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 22h6v2h-6z"}))},y$e=v$e;var Ub={};$(Ub,{icon:()=>_$e});var crr=E(D());var b$e=["title","titleId"];function cB(){return cB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x$e=function(t){var n=t.title,r=t.titleId,o=w$e(t,b$e);return a("svg",cB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z"}),a("path",{d:"M29 32H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v26a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v26a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},_$e=x$e;var $b={};$($b,{icon:()=>P$e});var frr=E(D());var S$e=["title","titleId"];function pB(){return pB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E$e=function(t){var n=t.title,r=t.titleId,o=I$e(t,S$e);return a("svg",pB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 4v20.34L16 32l12-7.64V4H4zm22 2v4h-4a3 3 0 00-3 3v5h-6v-5a3 3 0 00-3-3H6V6h20zm-7.87 14L16 22.52 13.87 20h4.26zM6 12h4a1 1 0 011 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12zm7.81 16.22l2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39zm6.08-1.09l-2.58-3.06L21 19.7V13a1 1 0 011-1h4v11.24l-6.11 3.89z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 0h24v2H4z"}))},P$e=E$e;var Jb={};$(Jb,{icon:()=>T$e});var mrr=E(D());var k$e=["title","titleId"];function fB(){return fB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M$e=function(t){var n=t.title,r=t.titleId,o=C$e(t,k$e);return a("svg",fB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M27.42 19.69a12 12 0 01-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0027 1.23l-1.97-.62zm2.23-6.77a14 14 0 00-27-1.23l1.9.62a12 12 0 0123.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},T$e=M$e;var Gb={};$(Gb,{icon:()=>N$e});var grr=E(D());var R$e=["title","titleId"];function dB(){return dB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L$e=function(t){var n=t.title,r=t.titleId,o=z$e(t,R$e);return a("svg",dB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.216 12.377A10.948 10.948 0 002.181 17H.153a12.941 12.941 0 012.693-6.118l1.37 1.495zm2.948-2.703l-1.37-1.495A12.94 12.94 0 0113 6v2c-2.144 0-4.144.613-5.836 1.674z"}),a("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414zm-7.836 9.909l1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764z"}))},N$e=L$e;var Xb={};$(Xb,{icon:()=>V$e});var yrr=E(D());var F$e=["title","titleId"];function mB(){return mB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H$e=function(t){var n=t.title,r=t.titleId,o=W$e(t,F$e);return a("svg",mB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M19.307 3.21a2.91 2.91 0 10-.223 1.94 11.636 11.636 0 018.232 7.049l1.775-.698a13.576 13.576 0 00-9.784-8.291zm-2.822 1.638a.97.97 0 110-1.939.97.97 0 010 1.94zm-4.267.805l-.717-1.774a13.576 13.576 0 00-8.291 9.784 2.91 2.91 0 101.94.223 11.636 11.636 0 017.068-8.233zm-8.34 11.802a.97.97 0 110-1.94.97.97 0 010 1.94zm12.607 8.727a2.91 2.91 0 00-2.599 1.62 11.636 11.636 0 01-8.233-7.05l-1.774.717a13.576 13.576 0 009.813 8.291 2.91 2.91 0 102.793-3.578zm0 3.879a.97.97 0 110-1.94.97.97 0 010 1.94zM32 16.485a2.91 2.91 0 10-4.199 2.599 11.636 11.636 0 01-7.05 8.232l.718 1.775a13.576 13.576 0 008.291-9.813A2.91 2.91 0 0032 16.485zm-2.91.97a.97.97 0 110-1.94.97.97 0 010 1.94z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19.19 16.35a3.879 3.879 0 10-5.42 0 4.848 4.848 0 00-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 00-2.143-4.014zm-4.645-2.774a1.94 1.94 0 113.88 0 1.94 1.94 0 01-3.88 0zm-.97 6.788a2.91 2.91 0 115.819 0h-5.818z"}))},V$e=H$e;var Kb={};$(Kb,{icon:()=>G$e});var wrr=E(D());var q$e=["title","titleId"];function hB(){return hB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J$e=function(t){var n=t.title,r=t.titleId,o=U$e(t,q$e);return a("svg",hB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M32 32H4a4 4 0 01-4-4V0h2v28a2 2 0 002 2h28v2z"}),a("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),a("path",{d:"M27 6a3 3 0 00-2.08.84L20 4.36A2.2 2.2 0 0020 4a3 3 0 00-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 007 9a3 3 0 103 3 2.93 2.93 0 00-.18-1l5.6-4.48A3 3 0 0017 7a3 3 0 002.08-.84l5 2.48A2.2 2.2 0 0024 9a3 3 0 103-3zM7 13a1 1 0 110-2 1 1 0 010 2zm10-8a1 1 0 110-2 1 1 0 010 2zm10 5a1 1 0 110-2 1 1 0 010 2z"}))},G$e=J$e;var Yb={};$(Yb,{icon:()=>Z$e});var xrr=E(D());var X$e=["title","titleId"];function gB(){return gB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q$e=function(t){var n=t.title,r=t.titleId,o=K$e(t,X$e);return a("svg",gB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.74 7.73l-1.5-1.32a13 13 0 000 17.19l1.5-1.32a11 11 0 010-14.54v-.01z"}),a("path",{d:"M6.51 3.66L5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75l-1.5 1.32a11 11 0 010 14.54l1.5 1.32a13 13 0 000-17.19v.01z"}),a("path",{d:"M27 2.34l-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 15a5 5 0 10-6 4.9V31h2V19.9a5 5 0 004-4.9zm-5 3a3 3 0 110-6 3 3 0 010 6z"}))},Z$e=Q$e;var Qb={};$(Qb,{icon:()=>oJe});var Srr=E(D());var eJe=["title","titleId"];function vB(){return vB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nJe=function(t){var n=t.title,r=t.titleId,o=tJe(t,eJe);return a("svg",vB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 001.953-4.826 9.112 9.112 0 00-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1zm6.118 7.523l-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 011.774-1.853zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 01-.023.912z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 001.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199zm-6.148 23.842l.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 00-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477z"}))},oJe=nJe;var Zb={};$(Zb,{icon:()=>uJe});var jrr=E(D());var iJe=["title","titleId"];function yB(){return yB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sJe=function(t){var n=t.title,r=t.titleId,o=aJe(t,iJe);return a("svg",yB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V2h2v2H2zm5 0V2h2v2H7zm5 0V2h2v2h-2zM2 9V7h2v2H2zm5 0V7h2v2H7zm5 0V7h2v2h-2zM2 14v-2h2v2H2zm5 0v-2h2v2H7zm5 0v-2h2v2h-2z"}))},uJe=sJe;var e3={};$(e3,{icon:()=>mJe});var Prr=E(D());var cJe=["title","titleId"];function bB(){return bB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dJe=function(t){var n=t.title,r=t.titleId,o=pJe(t,cJe);return a("svg",bB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.857 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{d:"M10.5 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}))},mJe=dJe;var t3={};$(t3,{icon:()=>bJe});var Crr=E(D());var hJe=["title","titleId"];function wB(){return wB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yJe=function(t){var n=t.title,r=t.titleId,o=gJe(t,hJe);return a("svg",wB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.135 14.043a.75.75 0 00.025-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 00-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.76.31 1.06.024z"}))},bJe=yJe;var r3={};$(r3,{icon:()=>SJe});var Mrr=E(D());var wJe=["title","titleId"];function OB(){return OB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Je=function(t){var n=t.title,r=t.titleId,o=OJe(t,wJe);return a("svg",OB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 4.982a.75.75 0 011.06-.025l4.81 4.591a.25.25 0 00.346 0l4.81-4.59a.75.75 0 011.035 1.085l-4.81 4.59a1.75 1.75 0 01-2.416 0l-4.81-4.59a.75.75 0 01-.025-1.06z"}))},SJe=_Je;var n3={};$(n3,{icon:()=>kJe});var Rrr=E(D());var IJe=["title","titleId"];function xB(){return xB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PJe=function(t){var n=t.title,r=t.titleId,o=jJe(t,IJe);return a("svg",xB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.018 14.043a.75.75 0 00.024-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.761.31 1.06.024z"}))},kJe=PJe;var o3={};$(o3,{icon:()=>RJe});var Drr=E(D());var CJe=["title","titleId"];function _B(){return _B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TJe=function(t){var n=t.title,r=t.titleId,o=AJe(t,CJe);return a("svg",_B({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.982 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},RJe=TJe;var i3={};$(i3,{icon:()=>FJe});var Nrr=E(D());var zJe=["title","titleId"];function SB(){return SB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NJe=function(t){var n=t.title,r=t.titleId,o=DJe(t,zJe);return a("svg",SB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 01.346 0l4.81 4.59a.75.75 0 001.035-1.085l-4.81-4.59a1.75 1.75 0 00-2.416 0l-4.81 4.59a.75.75 0 00-.025 1.06z"}))},FJe=NJe;var a3={};$(a3,{icon:()=>qJe});var Wrr=E(D());var WJe=["title","titleId"];function IB(){return IB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VJe=function(t){var n=t.title,r=t.titleId,o=BJe(t,WJe);return a("svg",IB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.928 8.468L4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},qJe=VJe;var l3={};$(l3,{icon:()=>XJe});var Hrr=E(D());var UJe=["title","titleId"];function jB(){return jB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GJe=function(t){var n=t.title,r=t.titleId,o=$Je(t,UJe);return a("svg",jB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925zM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0112.461 15H3.54a1 1 0 01-.914-1.406L6 6V2z"}))},XJe=GJe;var s3={};$(s3,{icon:()=>eGe});var qrr=E(D());var KJe=["title","titleId"];function EB(){return EB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZJe=function(t){var n=t.title,r=t.titleId,o=YJe(t,KJe);return a("svg",EB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 10-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 00-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 110-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 013.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 01.102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 110 1c-.604 0-1.033-.147-1.341-.5zM5.5 14h4a2 2 0 11-4 0z"}))},eGe=ZJe;var u3={};$(u3,{icon:()=>iGe});var $rr=E(D());var tGe=["title","titleId"];function PB(){return PB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oGe=function(t){var n=t.title,r=t.titleId,o=rGe(t,tGe);return a("svg",PB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 14l-.005.15a2 2 0 01-3.972.153l-.018-.154L5.5 14h4zm5.38-12.825a.5.5 0 01.008.64l-.063.065-14 12a.5.5 0 01-.713-.695l.063-.065 14-12a.5.5 0 01.705.055zM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 110 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763zM7.5 0a2 2 0 011.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 00-1.591-.36 1 1 0 10-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 017.5 0z"}))},iGe=oGe;var c3={};$(c3,{icon:()=>cGe});var Grr=E(D());var aGe=["title","titleId"];function kB(){return kB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uGe=function(t){var n=t.title,r=t.titleId,o=lGe(t,aGe);return a("svg",kB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.04 13.274a.5.5 0 10.892.453l3.014-5.931a.5.5 0 00-.445-.727H5.316L8.03 1.727a.5.5 0 10-.892-.453L4.055 7.343a.5.5 0 00.446.726h5.185L7.04 13.274z"}))},cGe=uGe;var p3={};$(p3,{icon:()=>hGe});var Krr=E(D());var pGe=["title","titleId"];function CB(){return CB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mGe=function(t){var n=t.title,r=t.titleId,o=fGe(t,pGe);return a("svg",CB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 6h4v4H0V6zm1 1v2h2V7H1zm5-1h4v4H6V6zm1 1v2h2V7H7zm5-1h4v4h-4V6zm1 3h2V7h-2v2z"}))},hGe=mGe;var f3={};$(f3,{icon:()=>wGe});var Qrr=E(D());var gGe=["title","titleId"];function AB(){return AB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bGe=function(t){var n=t.title,r=t.titleId,o=vGe(t,gGe);return a("svg",AB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1v2h2V1H7zM6 0h4v4H6V0zm0 6h4v4H6V6zm1 1v2h2V7H7zm-1 5h4v4H6v-4zm1 1v2h2v-2H7z"}))},wGe=bGe;var d3={};$(d3,{icon:()=>IGe});var enr=E(D());var OGe=["title","titleId"];function MB(){return MB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ge(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SGe=function(t){var n=t.title,r=t.titleId,o=xGe(t,OGe);return a("svg",MB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 10.038a3.49 3.49 0 012.5-1.05h2a2.5 2.5 0 002.462-2.061 2 2 0 111.008.017A3.5 3.5 0 019.5 9.987h-2a2.5 2.5 0 00-2.466 2.085A2 2 0 114 12.063V3.937a2 2 0 111 0v6.1zM4.5 3a1 1 0 100-2 1 1 0 000 2zm0 12a1 1 0 100-2 1 1 0 000 2zm8-9a1 1 0 100-2 1 1 0 000 2z"}))},IGe=SGe;var m3={};$(m3,{icon:()=>CGe});var rnr=E(D());var jGe=["title","titleId"];function TB(){return TB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kGe=function(t){var n=t.title,r=t.titleId,o=EGe(t,jGe);return a("svg",TB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 00-2.5 1.05v-4.1a2 2 0 10-1 0v6.126a2 2 0 101.034.01A2.5 2.5 0 016 8.986h1a3.5 3.5 0 003.47-3.043 2 2 0 10-1.009-.017A2.5 2.5 0 017 7.987H6zM4 3a1 1 0 11-2 0 1 1 0 012 0zm0 10a1 1 0 11-2 0 1 1 0 012 0zm7-9a1 1 0 11-2 0 1 1 0 012 0z",clipRule:"evenodd"}),a("path",{d:"M13.5 10.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},CGe=kGe;var h3={};$(h3,{icon:()=>zGe});var onr=E(D());var AGe=["title","titleId"];function RB(){return RB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RGe=function(t){var n=t.title,r=t.titleId,o=MGe(t,AGe);return a("svg",RB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.732 13.096l-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 000-1.414L5.658 7.95a.993.993 0 00-.708-.293.994.994 0 00-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 010 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 011.415-.586zM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1z"}))},zGe=RGe;var g3={};$(g3,{icon:()=>WGe});var anr=E(D());var DGe=["title","titleId"];function zB(){return zB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FGe=function(t){var n=t.title,r=t.titleId,o=LGe(t,DGe);return a("svg",zB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658V1.005h1.262v4.653H4zm2.261 0V1.005h1.244v4.653H6.26zm2.244 0V1.005h1.235v4.653H8.504zm2.234 0V1.005h1.254v4.653h-1.254zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},WGe=FGe;var v3={};$(v3,{icon:()=>UGe});var snr=E(D());var BGe=["title","titleId"];function DB(){return DB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qGe=function(t){var n=t.title,r=t.titleId,o=HGe(t,BGe);return a("svg",DB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.651 5.126l.922-.455.884-2.343a.5.5 0 01.939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0111 7h1.043l2.3 2.198a.5.5 0 01-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 01-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 11-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 015.095 8h-.74l-2.01 1.92a.5.5 0 01-.69-.722L3.952 7H5a5.3 5.3 0 01.075-.892L3.623 5.39 2.6 2.672a.5.5 0 11.939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 112.83 0h.568c.27.318.497.699.667 1.126zM8 4a.5.5 0 100-1 .5.5 0 000 1zm1.751 1.571A3.326 3.326 0 009.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 00.09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 00.296-.807 4.263 4.263 0 00.09-1.466 3.988 3.988 0 00-.224-.959z"}))},UGe=qGe;var y3={};$(y3,{icon:()=>KGe});var cnr=E(D());var $Ge=["title","titleId"];function LB(){return LB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XGe=function(t){var n=t.title,r=t.titleId,o=JGe(t,$Ge);return a("svg",LB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 108 2a6 6 0 000 12zm0 1A7 7 0 118 1a7 7 0 010 14zm0-3a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 110-6 3 3 0 010 6zm0-2a1 1 0 100-2 1 1 0 000 2z"}))},KGe=XGe;var b3={};$(b3,{icon:()=>tXe});var fnr=E(D());var YGe=["title","titleId"];function NB(){return NB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eXe=function(t){var n=t.title,r=t.titleId,o=QGe(t,YGe);return a("svg",NB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0112.994 15H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z",fillRule:"evenodd"}))},tXe=eXe;var w3={};$(w3,{icon:()=>aXe});var mnr=E(D());var rXe=["title","titleId"];function FB(){return FB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iXe=function(t){var n=t.title,r=t.titleId,o=nXe(t,rXe);return a("svg",FB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 01-.354-.146l-4-4a.502.502 0 01.708-.708L6.5 10.793l6.646-6.647a.502.502 0 01.708.708l-7 7A.502.502 0 016.5 12"}))},aXe=iXe;var O3={};$(O3,{icon:()=>pXe});var gnr=E(D());var lXe=["title","titleId"];function WB(){return WB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cXe=function(t){var n=t.title,r=t.titleId,o=sXe(t,lXe);return a("svg",WB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 16A8 8 0 118 0a8 8 0 010 16zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 00-.7.714l2.909 2.857a.5.5 0 00.7 0l5.091-5a.5.5 0 10-.7-.714z"}))},pXe=cXe;var x3={};$(x3,{icon:()=>gXe});var ynr=E(D());var fXe=["title","titleId"];function BB(){return BB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hXe=function(t){var n=t.title,r=t.titleId,o=dXe(t,fXe);return a("svg",BB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.934 3.063a1.5 1.5 0 01.547.321l.112.115 6.07 6.915a1.5 1.5 0 01-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 01.037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 011.893-.957zM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 00.498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 01.666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 01.682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 00.15-.063l.067-.049a.5.5 0 00.099-.632l-.053-.073-6.07-6.916a.5.5 0 00-.138-.11l-.082-.035-.088-.02a.5.5 0 00-.507.256zm11.66 5.039a2.5 2.5 0 01-.975 3.399.5.5 0 01-.485-.875 1.5 1.5 0 00-1.454-2.624.5.5 0 01-.485-.875 2.5 2.5 0 013.399.975zm-5.03-6.206a.5.5 0 01.338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 01.6.225l.036.082a.5.5 0 01-.225.6l-.082.037L9.67 7.028a.5.5 0 01-.659-.55l.02-.08.995-3a.5.5 0 01.632-.316zM14.5 4a.5.5 0 110 1 .5.5 0 010-1zM7.862.403a2.5 2.5 0 01.735 3.459.5.5 0 01-.839-.545 1.5 1.5 0 10-2.516-1.634.5.5 0 01-.839-.545A2.5 2.5 0 017.862.403zM13.5 2a.5.5 0 110 1 .5.5 0 010-1zm-3-1a.5.5 0 110 1 .5.5 0 010-1zm4-1a.5.5 0 110 1 .5.5 0 010-1z"}))},gXe=hXe;var _3={};$(_3,{icon:()=>OXe});var wnr=E(D());var vXe=["title","titleId"];function HB(){return HB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wXe=function(t){var n=t.title,r=t.titleId,o=yXe(t,vXe);return a("svg",HB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 012 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 100 13 6.5 6.5 0 000-13m3 6H8V3.5a.5.5 0 00-1 0v4a.5.5 0 00.5.5h3a.5.5 0 000-1"}))},OXe=wXe;var S3={};$(S3,{icon:()=>jXe});var xnr=E(D());var xXe=["title","titleId"];function VB(){return VB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IXe=function(t){var n=t.title,r=t.titleId,o=_Xe(t,xXe);return a("svg",VB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.348 3.761A3.995 3.995 0 018 7a.5.5 0 01-1 0 3 3 0 10-4.878 2.34.5.5 0 01-.627.779 4 4 0 013.973-6.84 5.502 5.502 0 0110.096 4.37.5.5 0 11-.92-.39 4.5 4.5 0 10-8.296-3.497zm-1.61 4.935a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 01.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84z"}))},jXe=IXe;var I3={};$(I3,{icon:()=>AXe});var Snr=E(D());var EXe=["title","titleId"];function qB(){return qB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CXe=function(t){var n=t.title,r=t.titleId,o=PXe(t,EXe);return a("svg",qB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.421 4.93a.5.5 0 11-.87.49 3 3 0 10-4.43 3.918.5.5 0 01-.626.78 4 4 0 013.973-6.84l.032.018V3.28a5.5 5.5 0 117.003 7.357.5.5 0 11-.36-.934 4.5 4.5 0 10-5.77-5.923c.42.31.778.701 1.05 1.15h-.002zM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 015.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11z"}))},AXe=CXe;var j3={};$(j3,{icon:()=>DXe});var jnr=E(D());var MXe=["title","titleId"];function UB(){return UB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zXe=function(t){var n=t.title,r=t.titleId,o=TXe(t,MXe);return a("svg",UB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.746 5.005A5.5 5.5 0 0110.5 16H4a4 4 0 01-1.61-7.663A4.473 4.473 0 012.029 7H.5a.5.5 0 010-1h1.527a4.479 4.479 0 01.957-2.309L1.646 2.354a.5.5 0 11.708-.708L3.69 2.984A4.479 4.479 0 016 2.027V.5a.5.5 0 011 0v1.528a4.493 4.493 0 012.309.956l1.337-1.338a.5.5 0 01.708.708L10.016 3.69c.311.388.56.831.73 1.314zM4 15h6.5a4.5 4.5 0 10-4.152-6.239A3.995 3.995 0 018 12a.5.5 0 11-1 0 3 3 0 10-3 3zm5.691-9.94a3.5 3.5 0 10-6.33 2.991 4.029 4.029 0 012.106.227 5.505 5.505 0 014.224-3.219z"}))},DXe=zXe;var E3={};$(E3,{icon:()=>BXe});var Pnr=E(D());var LXe=["title","titleId"];function $B(){return $B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WXe=function(t){var n=t.title,r=t.titleId,o=NXe(t,LXe);return a("svg",$B({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 7a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm0-6a3.5 3.5 0 013.465 3h3.12a1.5 1.5 0 110 1h-3.12a3.482 3.482 0 01-.662 1.596l2.1 2.1A3.5 3.5 0 118.036 12h-3.12a1.5 1.5 0 110-.999h3.12a3.482 3.482 0 01.662-1.596l-2.1-2.1A3.5 3.5 0 114.5 1zM12 4.5a.5.5 0 101 0 .5.5 0 00-1 0zm-.5 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5zM4 11.5a.5.5 0 11-1 0 .5.5 0 011 0z"}))},BXe=WXe;var P3={};$(P3,{icon:()=>$Xe});var Cnr=E(D());var HXe=["title","titleId"];function JB(){return JB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UXe=function(t){var n=t.title,r=t.titleId,o=VXe(t,HXe);return a("svg",JB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 01.11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 01-2.123.008L1.464 9.06a1.5 1.5 0 01.007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 01.713-.7zm1.496 3.049a.5.5 0 00-.705 0L2.177 7.65a.498.498 0 00-.148.35h9.95a.498.498 0 00-.148-.35L7.353 3.2z"}))},$Xe=UXe;var k3={};$(k3,{icon:()=>YXe});var Mnr=E(D());var JXe=["title","titleId"];function GB(){return GB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KXe=function(t){var n=t.title,r=t.titleId,o=GXe(t,JXe);return a("svg",GB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 3a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 8v1a2 2 0 01-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 01-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 012-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 012 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2z"}),a("rect",{width:6,height:6,x:5,y:5,rx:1}))},YXe=KXe;var C3={};$(C3,{icon:()=>rKe});var Rnr=E(D());var QXe=["title","titleId"];function XB(){return XB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tKe=function(t){var n=t.title,r=t.titleId,o=ZXe(t,QXe);return a("svg",XB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.157 12.224L5.768 8.32a.404.404 0 000-.64l-4.61-3.904a.407.407 0 010-.643.608.608 0 01.759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 01-.76 0 .407.407 0 010-.643zM9 12h6v1H9v-1z"}))},rKe=tKe;var A3={};$(A3,{icon:()=>lKe});var Dnr=E(D());var nKe=["title","titleId"];function KB(){return KB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aKe=function(t){var n=t.title,r=t.titleId,o=oKe(t,nKe);return a("svg",KB({fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.5A.5.5 0 01.5 2h15a.5.5 0 010 1H15v10h.5a.5.5 0 010 1H.5a.5.5 0 010-1H1V3H.5a.5.5 0 01-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 005 5zm5.5.5a.5.5 0 011 0v5a.5.5 0 01-1 0v-5zM8 5a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 008 5z"}))},lKe=aKe;var M3={};$(M3,{icon:()=>fKe});var Nnr=E(D());var sKe=["title","titleId"];function YB(){return YB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pKe=function(t){var n=t.title,r=t.titleId,o=uKe(t,sKe);return a("svg",YB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9a.5.5 0 00-.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h6v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0011 5.5V7H5V3.5a.5.5 0 00-.5-.5z"}))},fKe=pKe;var T3={};$(T3,{icon:()=>vKe});var Wnr=E(D());var dKe=["title","titleId"];function QB(){return QB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gKe=function(t){var n=t.title,r=t.titleId,o=mKe(t,dKe);return a("svg",QB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H4v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 014 5.5V7h2V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h2v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0012 5.5V7h-2V3.5a.5.5 0 00-.5-.5z"}))},vKe=gKe;var R3={};$(R3,{icon:()=>xKe});var Hnr=E(D());var yKe=["title","titleId"];function ZB(){return ZB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OKe=function(t){var n=t.title,r=t.titleId,o=bKe(t,yKe);return a("svg",ZB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H5v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 015 5.5V7h6V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 01.5.5v9a.5.5 0 01-1 0v-9a.5.5 0 01.5-.5z"}))},xKe=OKe;var z3={};$(z3,{icon:()=>EKe});var qnr=E(D());var _Ke=["title","titleId"];function eH(){return eH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jKe=function(t){var n=t.title,r=t.titleId,o=SKe(t,_Ke);return a("svg",eH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9A.5.5 0 00.5 3zm14.5.5a.5.5 0 011 0v9a.5.5 0 01-1 0v-9zm-4.712 1.547a.5.5 0 01.532.069l3 2.5a.5.5 0 010 .768l-3 2.5A.5.5 0 0110 10.5V9H6v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 016 5.5V7h4V5.5a.5.5 0 01.288-.453z"}))},EKe=jKe;var D3={};$(D3,{icon:()=>MKe});var $nr=E(D());var PKe=["title","titleId"];function tH(){return tH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AKe=function(t){var n=t.title,r=t.titleId,o=kKe(t,PKe);return a("svg",tH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 014.9 0h1.55a.5.5 0 110 1h-1.55a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 110-1h6.55zm-.1-4a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 010-1h1.55a2.5 2.5 0 014.9 0h6.55a.5.5 0 110 1H7.95zM4 5.5a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm8 5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z"}))},MKe=AKe;var L3={};$(L3,{icon:()=>LKe});var Gnr=E(D());var TKe=["title","titleId"];function rH(){return rH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DKe=function(t){var n=t.title,r=t.titleId,o=RKe(t,TKe);return a("svg",rH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 010-4.9V1.5a.5.5 0 111 0v1.55a2.5 2.5 0 010 4.9v6.55a.5.5 0 11-1 0V7.95zm-4 .1a2.5 2.5 0 010 4.9v1.55a.5.5 0 11-1 0v-1.55a2.5 2.5 0 010-4.9V1.5a.5.5 0 011 0v6.55zM5.5 12a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5-8a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"}))},LKe=DKe;var N3={};$(N3,{icon:()=>HKe});var Knr=E(D());var NKe=["title","titleId"];function nH(){return nH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BKe=function(t){var n=t.title,r=t.titleId,o=FKe(t,NKe);return a("svg",nH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 01-.857.875H3.857A.867.867 0 013 13.125V.875C3 .392 3.384 0 3.857 0H11.4zM14 4h-2.6a.4.4 0 01-.4-.4V1H4v12h10V4z"}),a("path",{d:"M3 1H2a1 1 0 00-1 1v13a1 1 0 001 1h10a1 1 0 001-1v-1h-1v1H2V2h1V1z"}))},HKe=BKe;var F3={};$(F3,{icon:()=>JKe});var Qnr=E(D());var VKe=["title","titleId"];function oH(){return oH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ke=function(t){var n=t.title,r=t.titleId,o=qKe(t,VKe);return a("svg",oH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 2.729V2a1 1 0 011-1h2v1H3v12h4v1H3a1 1 0 01-1-1V2.729zM14 5V2a1 1 0 00-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V6a1 1 0 00-1-1h-2v1z"}),a("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 00-1-1H6a1 1 0 00-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},JKe=$Ke;var W3={};$(W3,{icon:()=>QKe});var eor=E(D());var GKe=["title","titleId"];function iH(){return iH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YKe=function(t){var n=t.title,r=t.titleId,o=XKe(t,GKe);return a("svg",iH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.293 8L3.146 3.854a.5.5 0 11.708-.708L8 7.293l4.146-4.147a.5.5 0 01.708.708L8.707 8l4.147 4.146a.5.5 0 01-.708.708L8 8.707l-4.146 4.147a.5.5 0 01-.708-.708L7.293 8z"}))},QKe=YKe;var B3={};$(B3,{icon:()=>nYe});var ror=E(D());var ZKe=["title","titleId"];function aH(){return aH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rYe=function(t){var n=t.title,r=t.titleId,o=eYe(t,ZKe);return a("svg",aH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.746 8l3.1-3.1a.527.527 0 10-.746-.746L8 7.254l-3.1-3.1a.527.527 0 10-.746.746l3.1 3.1-3.1 3.1a.527.527 0 10.746.746l3.1-3.1 3.1 3.1a.527.527 0 10.746-.746L8.746 8zM8 16A8 8 0 118 0a8 8 0 010 16z"}))},nYe=rYe;var H3={};$(H3,{icon:()=>sYe});var oor=E(D());var oYe=["title","titleId"];function lH(){return lH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lYe=function(t){var n=t.title,r=t.titleId,o=iYe(t,oYe);return a("svg",lH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.822 1.874a.5.5 0 11.335.942 5.517 5.517 0 00-3.34 3.341.5.5 0 11-.943-.335 6.517 6.517 0 013.948-3.948zM1.864 10.15a.5.5 0 11.944-.33 5.517 5.517 0 003.365 3.37.5.5 0 01-.333.943 6.517 6.517 0 01-3.976-3.983zm8.302 3.981a.5.5 0 11-.333-.943 5.517 5.517 0 003.347-3.332.5.5 0 11.941.337 6.517 6.517 0 01-3.955 3.938zm3.968-8.285a.5.5 0 11-.943.331A5.517 5.517 0 009.85 2.82a.5.5 0 01.337-.942 6.517 6.517 0 013.946 3.968zM8.5 3.5a.5.5 0 01-1 0V.997a.5.5 0 011 0V3.5zm-4.997 4a.5.5 0 010 1H1a.5.5 0 010-1h2.503zM7.5 12.497a.5.5 0 011 0V15a.5.5 0 11-1 0v-2.503zM12.497 8.5a.5.5 0 010-1H15a.5.5 0 110 1h-2.503zM8 9a1 1 0 110-2 1 1 0 010 2z"}))},sYe=lYe;var V3={};$(V3,{icon:()=>dYe});var aor=E(D());var uYe=["title","titleId"];function sH(){return sH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fYe=function(t){var n=t.title,r=t.titleId,o=cYe(t,uYe);return a("svg",sH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.95 1.636l1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 018 13a4.977 4.977 0 01-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 013 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 018 3c1.02 0 1.967.305 2.757.828l2.193-2.192zM8 5a2.99 2.99 0 00-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 00-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 005 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 001.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 00.323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0011 8a2.99 2.99 0 00-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 00-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 00-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 00-.245-.131l-.126-.057A2.99 2.99 0 008 5z"}))},dYe=fYe;var q3={};$(q3,{icon:()=>yYe});var sor=E(D());var mYe=["title","titleId"];function uH(){return uH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vYe=function(t){var n=t.title,r=t.titleId,o=hYe(t,mYe);return a("svg",uH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.142 11.074l-1.912.548a2.532 2.532 0 11-1.395-4.867l1.947-.559a2.532 2.532 0 012.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 01.56 2.4l-.56 1.947a2.532 2.532 0 11-4.867-1.395l.486-1.696zm.33-1.148l.48-1.673a1.52 1.52 0 00-1.89-1.083l-1.948.558a1.52 1.52 0 00.837 2.92l2.52-.722zm3.773-2.135l-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791zM5.63 13.049a1.52 1.52 0 002.92.837l.559-1.947a1.52 1.52 0 00-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05zm.973.279l.559-1.947a.506.506 0 11.973.279l-.558 1.947a.506.506 0 11-.974-.28zm-3.93-3.653a.506.506 0 11-.28-.973l1.947-.558a.506.506 0 01.28.973l-1.948.558z"}))},yYe=vYe;var U3={};$(U3,{icon:()=>_Ye});var cor=E(D());var bYe=["title","titleId"];function cH(){return cH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xYe=function(t){var n=t.title,r=t.titleId,o=wYe(t,bYe);return a("svg",cH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453zM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2z"}))},_Ye=xYe;var $3={};$($3,{icon:()=>PYe});var dor=E(D());var SYe=["title","titleId"];function pH(){return pH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EYe=function(t){var n=t.title,r=t.titleId,o=IYe(t,SYe);return a("svg",pH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2 2a1 1 0 00-1 1v7a1 1 0 001 1h4l-1 3H3.5a.5.5 0 000 1h9a.5.5 0 000-1H11l-1-3h4a1 1 0 001-1V3a1 1 0 00-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),a("path",{d:"M4.5 6a.5.5 0 000 1h1a.5.5 0 000-1h-1zm3 0a.5.5 0 000 1h1a.5.5 0 000-1h-1zm2.5.5a.5.5 0 01.5-.5h1a.5.5 0 010 1h-1a.5.5 0 01-.5-.5z"}))},PYe=EYe;var J3={};$(J3,{icon:()=>TYe});var hor=E(D());var kYe=["title","titleId"];function fH(){return fH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MYe=function(t){var n=t.title,r=t.titleId,o=CYe(t,kYe);return a("svg",fH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h8.8zM14 5h-3.5a.5.5 0 01-.5-.5V1H2v14h12V5zm-8.5 7a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5z"}))},TYe=MYe;var G3={};$(G3,{icon:()=>NYe});var vor=E(D());var RYe=["title","titleId"];function dH(){return dH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LYe=function(t){var n=t.title,r=t.titleId,o=zYe(t,RYe);return a("svg",dH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 8.995l6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5zM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 010 .909l-6.78 6.784A.641.641 0 018.57 10H6.643A.643.643 0 016 9.357V7.43c0-.17.067-.335.188-.455L12.968.19zM4.5 13a.5.5 0 110-1h7a.5.5 0 110 1h-7zm4-12a.5.5 0 010 1H2v13h12V7.5a.5.5 0 111 0V15a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h6.5z"}))},NYe=LYe;var X3={};$(X3,{icon:()=>VYe});var bor=E(D());var FYe=["title","titleId"];function mH(){return mH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HYe=function(t){var n=t.title,r=t.titleId,o=WYe(t,FYe);return a("svg",mH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 3.5a.5.5 0 11-1 0 .5.5 0 011 0zM9 5v3h1v1H8V6H7V5h2z"}),a("path",{d:"M13.855 14.147a1.34 1.34 0 01-.158-.246A1.998 1.998 0 0113.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 01.158-.246l.003-.005A.5.5 0 0014 11.5V.5a.5.5 0 00-.5-.5H3.461l-.083.005a2.957 2.957 0 00-1.102.298 2.257 2.257 0 00-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 00.94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 01-.498-.133.817.817 0 01-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 01.324-.275A1.344 1.344 0 013 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 00.359-.848l-.004-.005zm-.001 0l.002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 00-.283.03 2.344 2.344 0 00-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),a("path",{d:"M7 13H4v2.5a.5.5 0 00.854.354l.646-.647.646.647A.5.5 0 007 15.5V13z"}))},VYe=HYe;var K3={};$(K3,{icon:()=>GYe});var Oor=E(D());var qYe=["title","titleId"];function hH(){return hH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ye(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JYe=function(t){var n=t.title,r=t.titleId,o=UYe(t,qYe);return a("svg",hH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h6.8zM12 5H8.5a.5.5 0 01-.5-.5V1H2v12h10V5zm-7.5 6a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5zm1 8a.5.5 0 110-1H14V6.5a.5.5 0 111 0V15a1 1 0 01-1 1H5.5z"}))},GYe=JYe;var Y3={};$(Y3,{icon:()=>ZYe});var _or=E(D());var XYe=["title","titleId"];function gH(){return gH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QYe=function(t){var n=t.title,r=t.titleId,o=KYe(t,XYe);return a("svg",gH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("circle",{cx:8,cy:8,r:4}))},ZYe=QYe;var Q3={};$(Q3,{icon:()=>oQe});var Ior=E(D());var eQe=["title","titleId"];function vH(){return vH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nQe=function(t){var n=t.title,r=t.titleId,o=tQe(t,eQe);return a("svg",vH({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}))},oQe=nQe;var Z3={};$(Z3,{icon:()=>uQe});var Eor=E(D());var iQe=["title","titleId"];function yH(){return yH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sQe=function(t){var n=t.title,r=t.titleId,o=aQe(t,iQe);return a("svg",yH({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},uQe=sQe;var e5={};$(e5,{icon:()=>mQe});var kor=E(D());var cQe=["title","titleId"];function bH(){return bH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dQe=function(t){var n=t.title,r=t.titleId,o=pQe(t,cQe);return a("svg",bH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 9.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 8a.617.617 0 010-.829.52.52 0 01.77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),a("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 01-.994.994H3.01a.995.995 0 01-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},mQe=dQe;var t5={};$(t5,{icon:()=>bQe});var Aor=E(D());var hQe=["title","titleId"];function wH(){return wH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yQe=function(t){var n=t.title,r=t.titleId,o=gQe(t,hQe);return a("svg",wH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V4a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5zm13 0a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},bQe=yQe;var r5={};$(r5,{icon:()=>SQe});var Tor=E(D());var wQe=["title","titleId"];function OH(){return OH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Qe=function(t){var n=t.title,r=t.titleId,o=OQe(t,wQe);return a("svg",OH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5h8a2 2 0 012 2v2a2 2 0 01-2 2H4a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1zm0 13h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},SQe=_Qe;var n5={};$(n5,{icon:()=>kQe});var zor=E(D());var IQe=["title","titleId"];function xH(){return xH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PQe=function(t){var n=t.title,r=t.titleId,o=jQe(t,IQe);return a("svg",xH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2zM1.5 14h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},kQe=PQe;var o5={};$(o5,{icon:()=>RQe});var Lor=E(D());var CQe=["title","titleId"];function _H(){return _H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TQe=function(t){var n=t.title,r=t.titleId,o=AQe(t,CQe);return a("svg",_H({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H7V1.5a.5.5 0 011 0V4zm0 8v2.5a.5.5 0 11-1 0V12h1zM3 5h9a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2z"}))},RQe=TQe;var i5={};$(i5,{icon:()=>FQe});var For=E(D());var zQe=["title","titleId"];function SH(){return SH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NQe=function(t){var n=t.title,r=t.titleId,o=DQe(t,zQe);return a("svg",SH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h8a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},FQe=NQe;var a5={};$(a5,{icon:()=>qQe});var Bor=E(D());var WQe=["title","titleId"];function IH(){return IH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VQe=function(t){var n=t.title,r=t.titleId,o=BQe(t,WQe);return a("svg",IH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 7v1H1.5a.5.5 0 010-1H4zm8 0h2.5a.5.5 0 110 1H12V7zM7 1h2a2 2 0 012 2v9a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2z"}))},qQe=VQe;var l5={};$(l5,{icon:()=>XQe});var Vor=E(D());var UQe=["title","titleId"];function jH(){return jH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GQe=function(t){var n=t.title,r=t.titleId,o=$Qe(t,UQe);return a("svg",jH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 5h8a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2zm11.5-4a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},XQe=GQe;var s5={};$(s5,{icon:()=>eZe});var Uor=E(D());var KQe=["title","titleId"];function EH(){return EH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZQe=function(t){var n=t.title,r=t.titleId,o=YQe(t,KQe);return a("svg",EH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 3h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V5a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1z"}))},eZe=ZQe;var u5={};$(u5,{icon:()=>iZe});var Jor=E(D());var tZe=["title","titleId"];function PH(){return PH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oZe=function(t){var n=t.title,r=t.titleId,o=rZe(t,tZe);return a("svg",PH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 8h5a1 1 0 011 1v5H3a1 1 0 01-1-1V8zm1-7h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},iZe=oZe;var c5={};$(c5,{icon:()=>cZe});var Xor=E(D());var aZe=["title","titleId"];function kH(){return kH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uZe=function(t){var n=t.title,r=t.titleId,o=lZe(t,aZe);return a("svg",kH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 8h5v5a1 1 0 01-1 1H8V9a1 1 0 011-1zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},cZe=uZe;var p5={};$(p5,{icon:()=>hZe});var Yor=E(D());var pZe=["title","titleId"];function CH(){return CH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mZe=function(t){var n=t.title,r=t.titleId,o=fZe(t,pZe);return a("svg",CH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2h5v5a1 1 0 01-1 1H2V3a1 1 0 011-1zm0-1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},hZe=mZe;var f5={};$(f5,{icon:()=>wZe});var Zor=E(D());var gZe=["title","titleId"];function AH(){return AH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bZe=function(t){var n=t.title,r=t.titleId,o=vZe(t,gZe);return a("svg",AH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2h5a1 1 0 011 1v5H9a1 1 0 01-1-1V2zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},wZe=bZe;var d5={};$(d5,{icon:()=>IZe});var tir=E(D());var OZe=["title","titleId"];function MH(){return MH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ze(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SZe=function(t){var n=t.title,r=t.titleId,o=xZe(t,OZe);return a("svg",MH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4V3h6v1H5zM3 7V6h10v1H3zm2 3V9h6v1H5zm-2 3v-1h10v1H3z"}))},IZe=SZe;var m5={};$(m5,{icon:()=>CZe});var nir=E(D());var jZe=["title","titleId"];function TH(){return TH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kZe=function(t){var n=t.title,r=t.titleId,o=EZe(t,jZe);return a("svg",TH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h6v1H2zm0 3V6h10v1H2zm0 3V9h6v1H2zm0 3v-1h10v1H2z"}))},CZe=kZe;var h5={};$(h5,{icon:()=>zZe});var iir=E(D());var AZe=["title","titleId"];function RH(){return RH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RZe=function(t){var n=t.title,r=t.titleId,o=MZe(t,AZe);return a("svg",RH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4V3h6v1H8zM4 7V6h10v1H4zm4 3V9h6v1H8zm-4 3v-1h10v1H4z"}))},zZe=RZe;var g5={};$(g5,{icon:()=>WZe});var lir=E(D());var DZe=["title","titleId"];function zH(){return zH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FZe=function(t){var n=t.title,r=t.titleId,o=LZe(t,DZe);return a("svg",zH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841zM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125z"}))},WZe=FZe;var v5={};$(v5,{icon:()=>UZe});var uir=E(D());var BZe=["title","titleId"];function DH(){return DH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qZe=function(t){var n=t.title,r=t.titleId,o=HZe(t,BZe);return a("svg",DH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.597 3a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.42.42 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982A.418.418 0 002.488 6a.411.411 0 00.288-.126L4.904 3.58a.328.328 0 00.095-.25.337.337 0 00-.126-.238A.421.421 0 004.597 3zm-.299 4.132A.411.411 0 014.597 7a.421.421 0 01.276.093c.076.062.12.147.126.238a.328.328 0 01-.095.25L2.776 9.874a.411.411 0 01-.288.126.418.418 0 01-.297-.108L1.127 8.91A.335.335 0 011 8.656a.333.333 0 01.12-.257.42.42 0 01.292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.421.421 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982a.418.418 0 00.297.108.411.411 0 00.288-.126l2.128-2.293a.328.328 0 00.095-.25.337.337 0 00-.126-.238.421.421 0 00-.276-.093zM6.5 4a.5.5 0 000 1h7a.5.5 0 000-1h-7zM6 8.5a.5.5 0 01.5-.5h7a.5.5 0 010 1h-7a.5.5 0 01-.5-.5zm.5 3.5a.5.5 0 000 1h7a.5.5 0 000-1h-7z"}))},UZe=qZe;var y5={};$(y5,{icon:()=>KZe});var pir=E(D());var $Ze=["title","titleId"];function LH(){return LH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XZe=function(t){var n=t.title,r=t.titleId,o=JZe(t,$Ze);return a("svg",LH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},KZe=XZe;var b5={};$(b5,{icon:()=>tet});var dir=E(D());var YZe=["title","titleId"];function NH(){return NH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eet=function(t){var n=t.title,r=t.titleId,o=QZe(t,YZe);return a("svg",NH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.111 10H12a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v4a1 1 0 001 1h1v1.297L6.111 10zm.46 1L4 14v-3a2 2 0 01-2-2V5a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H6.571z"}))},tet=eet;var w5={};$(w5,{icon:()=>aet});var hir=E(D());var ret=["title","titleId"];function FH(){return FH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iet=function(t){var n=t.title,r=t.titleId,o=net(t,ret);return a("svg",FH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 11a1 1 0 010 2H4a1 1 0 010-2V5a1 1 0 110-2h2a1 1 0 110 2v2h4V5a1 1 0 110-2h2a1 1 0 010 2v6a1 1 0 010 2h-2a1 1 0 010-2V9H6v2z"}))},aet=iet;var O5={};$(O5,{icon:()=>fet});var vir=E(D());var set=["title","titleId"];function WH(){return WH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pet=function(t){var n=t.title,r=t.titleId,o=uet(t,set);return a("svg",WH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.16 12H9.5a.5.5 0 110 1h-4a.5.5 0 110-1h1.639l1.7-8H7.5a.5.5 0 010-1h4a.5.5 0 110 1H9.861l-1.7 8z"}))},fet=pet;var x5={};$(x5,{icon:()=>vet});var bir=E(D());var det=["title","titleId"];function BH(){return BH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function het(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var get=function(t){var n=t.title,r=t.titleId,o=met(t,det);return a("svg",BH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 5.051a.45.45 0 00.637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 10-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 00-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 00.636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 000-.637zM7.877 5.76a.39.39 0 00.274-.114l1.503-1.504-1.503 1.504a.39.39 0 01-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 01.284.667L6.898 12.41l1.504-1.503a.39.39 0 00-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 01-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},vet=get;var _5={};$(_5,{icon:()=>xet});var Oir=E(D());var yet=["title","titleId"];function HH(){return HH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oet=function(t){var n=t.title,r=t.titleId,o=bet(t,yet);return a("svg",HH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3zm1 4v2H1v-1h1v-1H1v-1h3v1zM3 5h1v1H1V5h1V4H1V3h2v2zm2.5-1h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1z"}))},xet=Oet;var S5={};$(S5,{icon:()=>Pet});var _ir=E(D());var _et=["title","titleId"];function VH(){return VH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eet=function(t){var n=t.title,r=t.titleId,o=Iet(t,_et);return a("svg",VH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3z"}))},Pet=Eet;var I5={};$(I5,{icon:()=>Tet});var Iir=E(D());var ket=["title","titleId"];function qH(){return qH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Aet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Met=function(t){var n=t.title,r=t.titleId,o=Cet(t,ket);return a("svg",qH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 01-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 018.028 13a4.616 4.616 0 01-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 00-.034-.353zM5.586 7a2.49 2.49 0 01-.294-.507 2.316 2.316 0 01-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 018.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 00-.978-.669 2.914 2.914 0 00-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586zM2.5 8h11a.5.5 0 110 1h-11a.5.5 0 010-1z"}))},Tet=Met;var j5={};$(j5,{icon:()=>Net});var Eir=E(D());var Ret=["title","titleId"];function UH(){return UH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Det(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Let=function(t){var n=t.title,r=t.titleId,o=zet(t,Ret);return a("svg",UH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3v2H2V3v10h12V3zM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2zm0 5h12v1H2V7zm0 3h12v1H2v-1z"}))},Net=Let;var E5={};$(E5,{icon:()=>Vet});var kir=E(D());var Fet=["title","titleId"];function $H(){return $H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Het=function(t){var n=t.title,r=t.titleId,o=Wet(t,Fet);return a("svg",$H({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536zM2.5 13h11a.5.5 0 110 1h-11a.5.5 0 110-1z"}))},Vet=Het;var P5={};$(P5,{icon:()=>Get});var Air=E(D());var qet=["title","titleId"];function JH(){return JH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $et(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jet=function(t){var n=t.title,r=t.titleId,o=Uet(t,qet);return a("svg",JH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3z"}))},Get=Jet;var k5={};$(k5,{icon:()=>Zet});var Tir=E(D());var Xet=["title","titleId"];function GH(){return GH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qet=function(t){var n=t.title,r=t.titleId,o=Ket(t,Xet);return a("svg",GH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1zm-3-7a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1z"}))},Zet=Qet;var C5={};$(C5,{icon:()=>ott});var zir=E(D());var ett=["title","titleId"];function XH(){return XH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ntt=function(t){var n=t.title,r=t.titleId,o=ttt(t,ett);return a("svg",XH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.95 3.684L8.637 8.912a1 1 0 01-1.276 0L1.051 3.684A.999.999 0 001 4v8a1 1 0 001 1h12a1 1 0 001-1V4a.999.999 0 00-.05-.316zM2 2h12a2 2 0 012 2v8a2 2 0 01-2 2H2a2 2 0 01-2-2V4a2 2 0 012-2zm-.21 1l5.576 4.603a1 1 0 001.27.003L14.268 3H1.79z"}))},ott=ntt;var A5={};$(A5,{icon:()=>ZE});var Lir=E(D());var itt=["title","titleId"];function KH(){return KH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ltt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var stt=function(t){var n=t.title,r=t.titleId,o=att(t,itt);return a("svg",KH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o))},ZE=stt;var M5={};$(M5,{icon:()=>dtt});var Fir=E(D());var utt=["title","titleId"];function YH(){return YH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ptt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ftt=function(t){var n=t.title,r=t.titleId,o=ctt(t,utt);return a("svg",YH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.862 14.18v.001a.482.482 0 01.1.521.5.5 0 01-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 01-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 01-3.802.14l-.045-.012a5.89 5.89 0 01-2.682-1.712A5.715 5.715 0 011.08 7.72a5.66 5.66 0 01.348-3.118A5.78 5.78 0 013.39 2.124a5.979 5.979 0 016.136-.505 5.836 5.836 0 012.356 2.123 5.67 5.67 0 01.873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 01-.694 0 .476.476 0 01-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 00-2.198-1.769 4.99 4.99 0 00-2.83-.273 4.93 4.93 0 00-2.509 1.314 4.774 4.774 0 00-1.34 2.46A4.715 4.715 0 002.352 8.6a4.82 4.82 0 001.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 001.296-.194l.032-.009.717-.211a.506.506 0 01.483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 01.014-.666.495.495 0 01.679-.013l4.493 4.402z"}),a("path",{d:"M7.097 3.468L9.679 4.93a.433.433 0 01.218.37v2.924a.422.422 0 01-.218.37l-2.582 1.461a.438.438 0 01-.437 0L4.077 8.594a.433.433 0 01-.218-.37V5.3a.422.422 0 01.218-.37L6.66 3.467a.446.446 0 01.437 0zm1.845 4.27V5.784a.328.328 0 00-.17-.287L7.047 4.52a.342.342 0 00-.338 0l-1.726.977a.336.336 0 00-.168.287v1.953a.326.326 0 00.17.287l1.724.977a.342.342 0 00.338 0l1.726-.978a.334.334 0 00.169-.287z"}))},dtt=ftt;var T5={};$(T5,{icon:()=>ytt});var Bir=E(D());var mtt=["title","titleId"];function QH(){return QH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vtt=function(t){var n=t.title,r=t.titleId,o=htt(t,mtt);return a("svg",QH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.648 9.937l7.29-7.288a2.21 2.21 0 013.124 0l2.29 2.288a2.21 2.21 0 010 3.126L10.413 13H12.5a.5.5 0 010 1H4.501a2.21 2.21 0 01-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 00.848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 000 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 010-3.126zM8 6h6.89a1.208 1.208 0 00-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 00-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0014.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),a("path",{d:"M14 11.5a.5.5 0 11-1 0 .5.5 0 011 0zm1.5-.5a.5.5 0 100-1 .5.5 0 000 1zm-1 2a.5.5 0 000 1h1a.5.5 0 000-1h-1z"}))},ytt=vtt;var R5={};$(R5,{icon:()=>_tt});var Vir=E(D());var btt=["title","titleId"];function ZH(){return ZH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ott(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xtt=function(t){var n=t.title,r=t.titleId,o=wtt(t,btt);return a("svg",ZH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 01.468.468v2.564a.473.473 0 01-.466.475H3V0H12.595a.45.45 0 01.398.463v2.565a.469.469 0 01-.468.467h-.065a.468.468 0 01-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065zm-1.096-7.59l2.121 2.122a1.5 1.5 0 010 2.121l-2.12 2.122a.5.5 0 11-.708-.708l2.121-2.12a.5.5 0 000-.708l-2.121-2.121a.5.5 0 01.707-.707z"}))},_tt=xtt;var z5={};$(z5,{icon:()=>Ptt});var Uir=E(D());var Stt=["title","titleId"];function eV(){return eV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ett=function(t){var n=t.title,r=t.titleId,o=Itt(t,Stt);return a("svg",eV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.354 12.354l8-8a.5.5 0 00-.708-.708l-8 8a.5.5 0 00.708.708zM1 10.5a.5.5 0 111 0v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 011 13.5v-3zm14-5a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 110-1h3A1.5 1.5 0 0115 2.5v3z"}))},Ptt=Ett;var D5={};$(D5,{icon:()=>Ttt});var Jir=E(D());var ktt=["title","titleId"];function tV(){return tV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Att(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mtt=function(t){var n=t.title,r=t.titleId,o=Ctt(t,ktt);return a("svg",tV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.707 10L10 6.707A.5.5 0 009.293 6L6 9.293a.5.5 0 10.707.707zM4 9.5a.5.5 0 011 0v1a.5.5 0 00.5.5h1a.5.5 0 110 1h-1A1.5 1.5 0 014 10.5v-1zm8-3a.5.5 0 11-1 0v-1a.5.5 0 00-.5-.5h-1a.5.5 0 010-1h1A1.5 1.5 0 0112 5.5v1z"}))},Ttt=Mtt;var L5={};$(L5,{icon:()=>Ntt});var Xir=E(D());var Rtt=["title","titleId"];function rV(){return rV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ltt=function(t){var n=t.title,r=t.titleId,o=ztt(t,Rtt);return a("svg",rV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 01-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 01-.77 0 .617.617 0 010-.829l1.95-2.05A1.575 1.575 0 018.5 1h.005zM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 00-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18zM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 01-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6z"}))},Ntt=Ltt;var N5={};$(N5,{icon:()=>Vtt});var Yir=E(D());var Ftt=["title","titleId"];function nV(){return nV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Btt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Htt=function(t){var n=t.title,r=t.titleId,o=Wtt(t,Ftt);return a("svg",nV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873zm-1.37-.424a12.097 12.097 0 00-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.095 12.095 0 001.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8c-.08-.15-.189-.343-.315-.551zM8 4.75A3.253 3.253 0 0111.25 8 3.254 3.254 0 018 11.25 3.253 3.253 0 014.75 8 3.252 3.252 0 018 4.75zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75zm0 1.5a.75.75 0 100 1.5.75.75 0 000-1.5z"}))},Vtt=Htt;var F5={};$(F5,{icon:()=>Gtt});var Zir=E(D());var qtt=["title","titleId"];function oV(){return oV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $tt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jtt=function(t){var n=t.title,r=t.titleId,o=Utt(t,qtt);return a("svg",oV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.318 13.47l.776-.776A6.04 6.04 0 008 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8a12.097 12.097 0 00-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 01-2.682-.53zM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 008 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.11 12.11 0 001.674 2.383l-.708.708zM8.362 4.77L7.255 5.877a2.262 2.262 0 00-1.378 1.378L4.77 8.362A3.252 3.252 0 018.362 4.77zm2.86 2.797a3.254 3.254 0 01-3.654 3.654l1.06-1.06a2.262 2.262 0 001.533-1.533l1.06-1.06zm-9.368 7.287a.5.5 0 01-.708-.708l13-13a.5.5 0 01.708.708l-13 13z"}))},Gtt=Jtt;var W5={};$(W5,{icon:()=>Ztt});var tar=E(D());var Xtt=["title","titleId"];function iV(){return iV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ytt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qtt=function(t){var n=t.title,r=t.titleId,o=Ktt(t,Xtt);return a("svg",iV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM2.739 8.802a.533.533 0 01.922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 01.92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465z"}))},Ztt=Qtt;var B5={};$(B5,{icon:()=>ort});var nar=E(D());var ert=["title","titleId"];function aV(){return aV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nrt=function(t){var n=t.title,r=t.titleId,o=trt(t,ert);return a("svg",aV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM3.2 10.667a.533.533 0 010-1.067h9.6a.533.533 0 110 1.067H3.2z",fillRule:"evenodd"}))},ort=nrt;var H5={};$(H5,{icon:()=>urt});var iar=E(D());var irt=["title","titleId"];function lV(){return lV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var srt=function(t){var n=t.title,r=t.titleId,o=art(t,irt);return a("svg",lV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm2.487 3.868a.533.533 0 11-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 11-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268z"}))},urt=srt;var V5={};$(V5,{icon:()=>mrt});var lar=E(D());var crt=["title","titleId"];function sV(){return sV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function frt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var drt=function(t){var n=t.title,r=t.titleId,o=prt(t,crt);return a("svg",sV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 110-16 8 8 0 010 16zM8 15A7 7 0 108 1a7 7 0 000 14zM3.5 5h9a.5.5 0 110 1h-9a.5.5 0 010-1zm2 3h5a.5.5 0 110 1h-5a.5.5 0 010-1zm2 3h1a.5.5 0 110 1h-1a.5.5 0 110-1z"}))},mrt=drt;var q5={};$(q5,{icon:()=>brt});var uar=E(D());var hrt=["title","titleId"];function uV(){return uV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yrt=function(t){var n=t.title,r=t.titleId,o=grt(t,hrt);return a("svg",uV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0013 8V2a.5.5 0 00-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 002 2v12.5a.5.5 0 101 0V8.553c1.411.627 2.983.592 4.686-.089zM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 003 7.5V2.74z"}))},brt=yrt;var U5={};$(U5,{icon:()=>Srt});var par=E(D());var wrt=["title","titleId"];function cV(){return cV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _rt=function(t){var n=t.title,r=t.titleId,o=Ort(t,wrt);return a("svg",cV({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14.192L7.53 2.49a.67.67 0 00.942 0L10.86.192a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zm0 15.616l2.39-2.298a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93l-2.388-2.3a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},Srt=_rt;var $5={};$($5,{icon:()=>krt});var dar=E(D());var Irt=["title","titleId"];function pV(){return pV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ert(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Prt=function(t){var n=t.title,r=t.titleId,o=jrt(t,Irt);return a("svg",pV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v3.416a4.962 4.962 0 00-1-.316V4H7.125A1.125 1.125 0 016 2.875V2zm10 10a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},krt=Prt;var J5={};$(J5,{icon:()=>Rrt});var har=E(D());var Crt=["title","titleId"];function fV(){return fV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Trt=function(t){var n=t.title,r=t.titleId,o=Art(t,Crt);return a("svg",fV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 017 2.875V2zm.25-1a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H14a1 1 0 011 1v9a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h5.25z"}))},Rrt=Trt;var G5={};$(G5,{icon:()=>Frt});var yar=E(D());var zrt=["title","titleId"];function dV(){return dV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nrt=function(t){var n=t.title,r=t.titleId,o=Drt(t,zrt);return a("svg",dV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-.447 2.011a5.015 5.015 0 00-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Frt=Nrt;var X5={};$(X5,{icon:()=>qrt});var war=E(D());var Wrt=["title","titleId"];function mV(){return mV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vrt=function(t){var n=t.title,r=t.titleId,o=Brt(t,Wrt);return a("svg",mV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-1.556 7a1 1 0 01-.976.783H13z"}))},qrt=Vrt;var K5={};$(K5,{icon:()=>Xrt});var xar=E(D());var Urt=["title","titleId"];function hV(){return hV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Grt=function(t){var n=t.title,r=t.titleId,o=$rt(t,Urt);return a("svg",hV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm5.146.22l7.2 4.581a1.425 1.425 0 010 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},Xrt=Grt;var Y5={};$(Y5,{icon:()=>ent});var Sar=E(D());var Krt=["title","titleId"];function gV(){return gV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zrt=function(t){var n=t.title,r=t.titleId,o=Yrt(t,Krt);return a("svg",gV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2a1 1 0 011 1v10a1 1 0 11-2 0V3a1 1 0 011-1zm-5.146.22l-7.2 4.581a1.425 1.425 0 000 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},ent=Zrt;var Q5={};$(Q5,{icon:()=>int});var jar=E(D());var tnt=["title","titleId"];function vV(){return vV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ont=function(t){var n=t.title,r=t.titleId,o=rnt(t,tnt);return a("svg",vV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z"}))},int=ont;var Z5={};$(Z5,{icon:()=>cnt});var Par=E(D());var ant=["title","titleId"];function yV(){return yV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function snt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var unt=function(t){var n=t.title,r=t.titleId,o=lnt(t,ant);return a("svg",yV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 3v4h-1V4H9V3h4zM3 3h4v1H4v3H3V3zm10 10H9v-1h3V9h1v4zM3 13V9h1v3h3v1H3zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z",fillRule:"evenodd"}))},cnt=unt;var e4={};$(e4,{icon:()=>hnt});var Car=E(D());var pnt=["title","titleId"];function bV(){return bV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mnt=function(t){var n=t.title,r=t.titleId,o=fnt(t,pnt);return a("svg",bV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},hnt=mnt;var t4={};$(t4,{icon:()=>wnt});var Mar=E(D());var gnt=["title","titleId"];function wV(){return wV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ynt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bnt=function(t){var n=t.title,r=t.titleId,o=vnt(t,gnt);return a("svg",wV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.164 10.329L1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 011.142-1.535l2.872.313L6.099.05a8.166 8.166 0 013.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 011.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 01-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 01-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 01-1.899-3.293zm4.663 1.986a1 1 0 011.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 011.023-.59l2.358.256a7.23 7.23 0 001.194-2.068l-1.401-1.913a1 1 0 010-1.182l1.4-1.912a7.165 7.165 0 00-1.192-2.069l-2.359.257a1 1 0 01-1.023-.591L9.193.924a7.165 7.165 0 00-2.387.001L5.85 3.094a1 1 0 01-1.023.59l-2.358-.256a7.23 7.23 0 00-1.194 2.068l1.401 1.913a1 1 0 010 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257zM8 11a3 3 0 110-6 3 3 0 010 6zm0-1a2 2 0 100-4 2 2 0 000 4z"}))},wnt=bnt;var r4={};$(r4,{icon:()=>Int});var Rar=E(D());var Ont=["title","titleId"];function OV(){return OV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Snt=function(t){var n=t.title,r=t.titleId,o=xnt(t,Ont);return a("svg",OV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.035 9A3.5 3.5 0 0115 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 01.196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 119.035 10h-2.07A3.5 3.5 0 11.043 8.952.498.498 0 010 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 01.196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 016.965 9h2.07zM3.5 12a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm9 0a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"}))},Int=Snt;var n4={};$(n4,{icon:()=>Cnt});var Dar=E(D());var jnt=["title","titleId"];function xV(){return xV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var knt=function(t){var n=t.title,r=t.titleId,o=Ent(t,jnt);return a("svg",xV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.019 8a6.462 6.462 0 001.003 3h2.382a14.469 14.469 0 01-.396-3h-2.99zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 00-1.003 3zM13.98 8h-2.989a14.469 14.469 0 01-.396 3h2.382a6.462 6.462 0 001.003-3zm0-1a6.462 6.462 0 00-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99zM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008zm0-1h4.984a13.422 13.422 0 00-.429-3H5.437a13.422 13.422 0 00-.429 3zM.016 8H0V7h.016a7.5 7.5 0 0114.968 0H15v1h-.016A7.5 7.5 0 01.016 8zm2.794 4a6.501 6.501 0 002.717 1.695A7.315 7.315 0 014.7 12H2.81zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0012.19 12zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762zM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 002.81 3zm9.38 0a6.501 6.501 0 00-2.717-1.695c.317.465.597 1.038.827 1.695h1.89zM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2z"}))},Cnt=knt;var o4={};$(o4,{icon:()=>znt});var Nar=E(D());var Ant=["title","titleId"];function _V(){return _V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rnt=function(t){var n=t.title,r=t.titleId,o=Mnt(t,Ant);return a("svg",_V({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11z"}))},znt=Rnt;var i4={};$(i4,{icon:()=>Wnt});var War=E(D());var Dnt=["title","titleId"];function SV(){return SV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fnt=function(t){var n=t.title,r=t.titleId,o=Lnt(t,Dnt);return a("svg",SV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11z"}))},Wnt=Fnt;var a4={};$(a4,{icon:()=>Unt});var Har=E(D());var Bnt=["title","titleId"];function IV(){return IV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qnt=function(t){var n=t.title,r=t.titleId,o=Hnt(t,Bnt);return a("svg",IV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 5V1h4v4H1zm3-1V2H2v2h2zm2 1V1h4v4H6zm3-1V2H7v2h2zm2 1V1h4v4h-4zm1-1h2V2h-2v2zM1 10V6h4v4H1zm3-1V7H2v2h2zm2 1V6h4v4H6zm3-1V7H7v2h2zm2 1V6h4v4h-4zm3-1V7h-2v2h2zM1 15v-4h4v4H1zm1-1h2v-2H2v2zm4 1v-4h4v4H6zm1-1h2v-2H7v2zm4 1v-4h4v4h-4zm1-1h2v-2h-2v2z"}))},Unt=qnt;var l4={};$(l4,{icon:()=>Knt});var qar=E(D());var $nt=["title","titleId"];function jV(){return jV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xnt=function(t){var n=t.title,r=t.titleId,o=Jnt(t,$nt);return a("svg",jV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.402 3.098a3.75 3.75 0 00-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 10-5.294-5.313L8 3.697l-.598-.599zM2.796 7.685a2.747 2.747 0 01.01-3.88 2.75 2.75 0 013.889 0L8 5.111l1.305-1.306a2.75 2.75 0 113.89 3.89L8 12.62 2.796 7.685z"}))},Knt=Xnt;var s4={};$(s4,{icon:()=>tot});var $ar=E(D());var Ynt=["title","titleId"];function EV(){return EV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Znt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eot=function(t){var n=t.title,r=t.titleId,o=Qnt(t,Ynt);return a("svg",EV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 9a3 3 0 110 6 3 3 0 010-6zm0 1a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 110 4 2 2 0 010-4zm0 1a1 1 0 100 2 1 1 0 000-2zm0 5a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6zm8-9a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6z"}))},tot=eot;var u4={};$(u4,{icon:()=>aot});var Gar=E(D());var rot=["title","titleId"];function PV(){return PV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iot=function(t){var n=t.title,r=t.titleId,o=not(t,rot);return a("svg",PV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 00-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 010 8.373zM8 15A6.956 6.956 0 013.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 002.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 018 15zm-5.601-2.813a6.963 6.963 0 010-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 003 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 118 4a4 4 0 010 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 008 3a4.979 4.979 0 00-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 018 1zm0-1a8.001 8.001 0 10.003 16.002A8.001 8.001 0 008 0z"}))},aot=iot;var c4={};$(c4,{icon:()=>pot});var Kar=E(D());var lot=["title","titleId"];function kV(){return kV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cot=function(t){var n=t.title,r=t.titleId,o=sot(t,lot);return a("svg",kV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.13 1.229l5.5 4.47a1 1 0 01.37.777V14a1 1 0 01-1 1H2a1 1 0 01-1-1V6.476a1 1 0 01.37-.776l5.5-4.471a1 1 0 011.26 0zM13 6.476L7.5 2.005 2 6.475V14h11V6.476z"}))},pot=cot;var p4={};$(p4,{icon:()=>got});var Qar=E(D());var fot=["title","titleId"];function CV(){return CV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hot=function(t){var n=t.title,r=t.titleId,o=dot(t,fot);return a("svg",CV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 11.508L7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5zm-.25-6.202a.83.83 0 01.207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 01-.207-.568zM8 13A5 5 0 108 3a5 5 0 000 10zm0 1A6 6 0 118 2a6 6 0 010 12z"}))},got=hot;var f4={};$(f4,{icon:()=>Oot});var elr=E(D());var vot=["title","titleId"];function AV(){return AV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wot=function(t){var n=t.title,r=t.titleId,o=yot(t,vot);return a("svg",AV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 5a2 2 0 11-4 0 2 2 0 014 0zm9-4a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm-3.448 6.134l-3.76 2.769a.5.5 0 01-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 01.389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 01.52-.045l.079.05L15 8.495V2z"}))},Oot=wot;var d4={};$(d4,{icon:()=>jot});var rlr=E(D());var xot=["title","titleId"];function MV(){return MV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iot=function(t){var n=t.title,r=t.titleId,o=_ot(t,xot);return a("svg",MV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 10.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 9a.617.617 0 010-.829.52.52 0 01.77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 00-.972.804l-1.189 6A.995.995 0 002.991 14h11.018a1 1 0 00.972-1.196l-1.19-6a.993.993 0 00-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0114.016 15H2.984a1.992 1.992 0 01-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z"}))},jot=Iot;var m4={};$(m4,{icon:()=>Aot});var olr=E(D());var Eot=["title","titleId"];function TV(){return TV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cot=function(t){var n=t.title,r=t.titleId,o=Pot(t,Eot);return a("svg",TV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793zM3 11v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},Aot=Cot;var h4={};$(h4,{icon:()=>Dot});var alr=E(D());var Mot=["title","titleId"];function RV(){return RV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zot=function(t){var n=t.title,r=t.titleId,o=Tot(t,Mot);return a("svg",RV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h6v1H5zM3 8V7h1v1H3zm2 3v-1h3v1H5zm-2 0v-1h1v1H3zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59z"}))},Dot=zot;var g4={};$(g4,{icon:()=>Bot});var slr=E(D());var Lot=["title","titleId"];function zV(){return zV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wot=function(t){var n=t.title,r=t.titleId,o=Not(t,Lot);return a("svg",zV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 010-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 01.108.397.643.643 0 01-.108.332l-2 2.918A.478.478 0 0113.5 12a.457.457 0 01-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9zM3 15H1a1 1 0 01-1-1V2a1 1 0 011-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 01-.5-.5V2H3v12h8v-4h1v4a1 1 0 01-1 1H3zm-1-1V2H1v12h1z"}))},Bot=Wot;var v4={};$(v4,{icon:()=>$ot});var clr=E(D());var Hot=["title","titleId"];function DV(){return DV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uot=function(t){var n=t.title,r=t.titleId,o=Vot(t,Hot);return a("svg",DV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 8H4.915a1.5 1.5 0 110-1H8V2.5A1.5 1.5 0 019.5 1h2.585a1.5 1.5 0 110 1H9.5a.5.5 0 00-.5.5v10a.5.5 0 00.5.5h2.585a1.5 1.5 0 110 1H9.5A1.5 1.5 0 018 12.5V8zM3.5 3a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0 12a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm10-6a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"}))},$ot=Uot;var y4={};$(y4,{icon:()=>Yot});var flr=E(D());var Jot=["title","titleId"];function LV(){return LV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kot=function(t){var n=t.title,r=t.titleId,o=Got(t,Jot);return a("svg",LV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2zm-7 1v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},Yot=Kot;var b4={};$(b4,{icon:()=>rit});var mlr=E(D());var Qot=["title","titleId"];function NV(){return NV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tit=function(t){var n=t.title,r=t.titleId,o=Zot(t,Qot);return a("svg",NV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),a("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2l-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},rit=tit;var w4={};$(w4,{icon:()=>lit});var glr=E(D());var nit=["title","titleId"];function FV(){return FV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ait=function(t){var n=t.title,r=t.titleId,o=oit(t,nit);return a("svg",FV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h5.999V4H5v1zM3 5h1V4H3v1zm0 3h1V7H3v1zm6.022-1l-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 006.948 8H5V7h4.022zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017zM3 11h1v-1H3v1z"}),a("path",{d:"M13 7.05l-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0012 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05z"}),a("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 01-.387.859 4.058 4.058 0 01-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 01-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 01-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 01.97-1.61l1.466.152.593-1.292a4.37 4.37 0 01.975-.11zM11 12a1 1 0 10.002-1.998A1 1 0 0011 12z"}))},lit=ait;var O4={};$(O4,{icon:()=>fit});var ylr=E(D());var sit=["title","titleId"];function WV(){return WV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pit=function(t){var n=t.title,r=t.titleId,o=uit(t,sit);return a("svg",WV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),a("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),a("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},fit=pit;var x4={};$(x4,{icon:()=>vit});var wlr=E(D());var dit=["title","titleId"];function BV(){return BV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var git=function(t){var n=t.title,r=t.titleId,o=mit(t,dit);return a("svg",BV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.363 14.658a.5.5 0 11-.713.7l-2.97-3.023a.5.5 0 01.001-.7A3.9 3.9 0 108.9 12.8a.5.5 0 110 .999 4.9 4.9 0 113.821-1.833l2.642 2.691zM3.094 13a.5.5 0 110 1H2.5A2.5 2.5 0 010 11.5v-9A2.5 2.5 0 012.5 0h9A2.5 2.5 0 0114 2.5v.599a.5.5 0 11-1 0V2.5A1.5 1.5 0 0011.5 1h-9A1.5 1.5 0 001 2.5v9A1.5 1.5 0 002.5 13h.594zM2.5 3a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-4 2a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-2 1a.5.5 0 110 1 .5.5 0 010-1zm0 3a.5.5 0 110-1 .5.5 0 010 1zm6-6a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-8 8a.5.5 0 110-1 .5.5 0 010 1z"}))},vit=git;var _4={};$(_4,{icon:()=>xit});var xlr=E(D());var yit=["title","titleId"];function HV(){return HV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oit=function(t){var n=t.title,r=t.titleId,o=bit(t,yit);return a("svg",HV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 13.25a5.25 5.25 0 100-10.5 5.25 5.25 0 000 10.5zM8 14A6 6 0 118 2a6 6 0 010 12z"}),a("path",{d:"M8 2a6 6 0 100 12V2z"}))},xit=Oit;var S4={};$(S4,{icon:()=>Eit});var Slr=E(D());var _it=["title","titleId"];function VV(){return VV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jit=function(t){var n=t.title,r=t.titleId,o=Sit(t,_it);return a("svg",VV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h8zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},Eit=jit;var I4={};$(I4,{icon:()=>Mit});var jlr=E(D());var Pit=["title","titleId"];function qV(){return qV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ait=function(t){var n=t.title,r=t.titleId,o=kit(t,Pit);return a("svg",qV({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 3h16v11H0V3zm15 10V4H1v9h14zM2 5h2v1H2V5zm2 7v-1H2v1h2zm10-1v1h-2v-1h2zm-3 1v-1H5v1h6zM5 5h1v1H5V5zM3 7H2v1h1V7zm3 0h1v1H6V7zM3 9H2v1h1V9zm3 0h1v1H6V9zm2-4H7v1h1V5zM4 7h1v1H4V7zm5 0H8v1h1V7zm1 0h1v1h-1V7zM5 9H4v1h1V9zm3 0h1v1H8V9zm3 0h-1v1h1V9zM9 5h1v1H9V5zm3 0h-1v1h1V5zm1 0h1v1h-1V5zm1 2h-2v3h2V7z"}))},Mit=Ait;var j4={};$(j4,{icon:()=>Lit});var Plr=E(D());var Tit=["title","titleId"];function UV(){return UV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dit=function(t){var n=t.title,r=t.titleId,o=Rit(t,Tit);return a("svg",UV({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 9a5 5 0 110-8 5 5 0 110 8zm.75-.692a4 4 0 100-6.615A4.981 4.981 0 0110 5a4.981 4.981 0 01-1.25 3.308zM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703z"}))},Lit=Dit;var E4={};$(E4,{icon:()=>Hit});var Clr=E(D());var Nit=["title","titleId"];function $V(){return $V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bit=function(t){var n=t.title,r=t.titleId,o=Fit(t,Nit);return a("svg",$V({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 7H3v2h4v2l3-3-3-3v2zM6 6V5a1 1 0 011.707-.707l3 3a1 1 0 010 1.414l-3 3A1 1 0 016 11v-1H3a1 1 0 01-1-1V7a1 1 0 011-1h3zm7.5-3a.5.5 0 01.5.5v9a.5.5 0 11-1 0v-9a.5.5 0 01.5-.5z"}))},Hit=Bit;var P4={};$(P4,{icon:()=>Jit});var Mlr=E(D());var Vit=["title","titleId"];function JV(){return JV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $it=function(t){var n=t.title,r=t.titleId,o=qit(t,Vit);return a("svg",JV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.192 10.145l2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 01.93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 01-.93 0c-.256-.195-.256-.512 0-.708zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 01-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 01.93 0c.256.195.256.512 0 .708zM6.5 6h3a.5.5 0 010 1h-3a.5.5 0 010-1zm0 3h3a.5.5 0 010 1h-3a.5.5 0 010-1z"}))},Jit=$it;var k4={};$(k4,{icon:()=>Qit});var Rlr=E(D());var Git=["title","titleId"];function GV(){return GV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yit=function(t){var n=t.title,r=t.titleId,o=Xit(t,Git);return a("svg",GV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 12a4 4 0 100-8 4 4 0 000 8zm0 1A5 5 0 115 3a5 5 0 010 10zm6-1a4 4 0 100-8 4 4 0 000 8zm0 1a5 5 0 110-10 5 5 0 010 10z"}))},Qit=Yit;var C4={};$(C4,{icon:()=>nat});var Dlr=E(D());var Zit=["title","titleId"];function XV(){return XV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rat=function(t){var n=t.title,r=t.titleId,o=eat(t,Zit);return a("svg",XV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4a5 5 0 110 8 5 5 0 110-8zm-.75.692a4 4 0 100 6.615A4.981 4.981 0 016 8c0-1.268.472-2.426 1.25-3.308zM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696z"}))},nat=rat;var A4={};$(A4,{icon:()=>sat});var Nlr=E(D());var oat=["title","titleId"];function KV(){return KV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lat=function(t){var n=t.title,r=t.titleId,o=iat(t,oat);return a("svg",KV({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z"}))},sat=lat;var M4={};$(M4,{icon:()=>dat});var Wlr=E(D());var uat=["title","titleId"];function YV(){return YV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fat=function(t){var n=t.title,r=t.titleId,o=cat(t,uat);return a("svg",YV({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z"}))},dat=fat;var T4={};$(T4,{icon:()=>yat});var Hlr=E(D());var mat=["title","titleId"];function QV(){return QV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vat=function(t){var n=t.title,r=t.titleId,o=hat(t,mat);return a("svg",QV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.276 1.053a.5.5 0 01.448 0l6 3a.5.5 0 010 .894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 010-.894l6-3zM2.618 4.5L7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),a("path",{d:"M1.053 7.276a.5.5 0 01.67-.223L7.5 9.94l5.776-2.888a.5.5 0 11.448.894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 01-.223-.67z"}),a("path",{d:"M1.724 10.053a.5.5 0 10-.448.894l6 3a.5.5 0 00.448 0l6-3a.5.5 0 10-.448-.894L7.5 12.94l-5.776-2.888z"}))},yat=vat;var R4={};$(R4,{icon:()=>_at});var qlr=E(D());var bat=["title","titleId"];function ZV(){return ZV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Oat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xat=function(t){var n=t.title,r=t.titleId,o=wat(t,bat);return a("svg",ZV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 3l3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 01-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 01-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 00.364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 00-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 00-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 00.358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},_at=xat;var z4={};$(z4,{icon:()=>Pat});var $lr=E(D());var Sat=["title","titleId"];function eq(){return eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eat=function(t){var n=t.title,r=t.titleId,o=Iat(t,Sat);return a("svg",eq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.707 4.707a1 1 0 11-1.414-1.414l2-2a1 1 0 111.414 1.414l-2 2zm-6.414 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414zm-5 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414z"}))},Pat=Eat;var D4={};$(D4,{icon:()=>Tat});var Glr=E(D());var kat=["title","titleId"];function tq(){return tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mat=function(t){var n=t.title,r=t.titleId,o=Cat(t,kat);return a("svg",tq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.5 3a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM11 5.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM5.5 11a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm-4 4a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},Tat=Mat;var L4={};$(L4,{icon:()=>Nat});var Klr=E(D());var Rat=["title","titleId"];function rq(){return rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lat=function(t){var n=t.title,r=t.titleId,o=zat(t,Rat);return a("svg",rq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.293 14.707a1 1 0 001.414 0l12-12a1 1 0 10-1.414-1.414l-12 12a1 1 0 000 1.414z"}))},Nat=Lat;var N4={};$(N4,{icon:()=>Vat});var Qlr=E(D());var Fat=["title","titleId"];function nq(){return nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hat=function(t){var n=t.title,r=t.titleId,o=Wat(t,Fat);return a("svg",nq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.66 3.803a.5.5 0 11-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 11.707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803zm-.32 7.392a.5.5 0 11.707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 01-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314z"}))},Vat=Hat;var F4={};$(F4,{icon:()=>Gat});var esr=E(D());var qat=["title","titleId"];function oq(){return oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $at(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jat=function(t){var n=t.title,r=t.titleId,o=Uat(t,qat);return a("svg",oq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zm0 3V9h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm4 3v-1h8v1H6zm-4 0v-1h2v1H2z"}))},Gat=Jat;var W4={};$(W4,{icon:()=>Zat});var rsr=E(D());var Xat=["title","titleId"];function iq(){return iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qat=function(t){var n=t.title,r=t.titleId,o=Kat(t,Xat);return a("svg",iq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2zM7.758 9a4.5 4.5 0 11-.502 4H6v-1h1.027a4.548 4.548 0 01.23-2H6V9h1.758zM2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm0 3v-1h2v1H2z"}))},Zat=Qat;var B4={};$(B4,{icon:()=>olt});var osr=E(D());var elt=["title","titleId"];function aq(){return aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nlt=function(t){var n=t.title,r=t.titleId,o=tlt(t,elt);return a("svg",aq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4zM3 15h10V6H3v9zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 016.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194zM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64z"}))},olt=nlt;var H4={};$(H4,{icon:()=>ult});var asr=E(D());var ilt=["title","titleId"];function lq(){return lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var slt=function(t){var n=t.title,r=t.titleId,o=alt(t,ilt);return a("svg",lq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143zM1 15h10V6H1v9zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 014.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194z"}))},ult=slt;var V4={};$(V4,{icon:()=>mlt});var ssr=E(D());var clt=["title","titleId"];function sq(){return sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function flt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dlt=function(t){var n=t.title,r=t.titleId,o=plt(t,clt);return a("svg",sq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),a("path",{fill:"#FFF",d:"M19.448 12.508l-8.986 3.86 8.986 3.883v-7.743zm-11.304 4.73l-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24z"})))},mlt=dlt;var q4={};$(q4,{icon:()=>blt});var csr=E(D());var hlt=["title","titleId"];function uq(){return uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ylt=function(t){var n=t.title,r=t.titleId,o=glt(t,hlt),i=_r("logo_apache");return a("svg",uq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},a("stop",{offset:"0%",stopColor:"#F69923"}),a("stop",{offset:"31.23%",stopColor:"#F79A23"}),a("stop",{offset:"83.83%",stopColor:"#E97826"})),a("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"})),a("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 00.05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 00-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 00-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 00-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 00-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 00-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 00.398-1.395c-1.17.206-2.608.399-3.548.442z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 00-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 01-.896.311 8.977 8.977 0 01-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 01-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 01-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 00-.118.244z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 00-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23z",transform:"translate(8)"})))},blt=ylt;var U4={};$(U4,{icon:()=>Slt});var dsr=E(D());var wlt=["title","titleId"];function cq(){return cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _lt=function(t){var n=t.title,r=t.titleId,o=Olt(t,wlt);return a("svg",cq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 00-7 0l-8 4.619A7 7 0 001 11.62v9.237a7 7 0 003.5 6.062l7.5 4.33V17.979a7 7 0 013.5-6.062L27 5.276 19.5.939z"}),a("path",{className:"euiIcon__fillNegative",d:"M19.5.938a7.002 7.002 0 00-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34z"}),a("path",{fill:"#FA744E",d:"M28.435 7.76l-10.026 5.79a6.994 6.994 0 011.59 4.428v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.238a6.992 6.992 0 00-1.586-4.422l-.978.564z"}))},Slt=_lt;var $4={};$($4,{icon:()=>klt});var hsr=E(D());var Ilt=["title","titleId"];function pq(){return pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Elt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Plt=function(t){var n=t.title,r=t.titleId,o=jlt(t,Ilt);return a("svg",pq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("g",{fill:"#F90"},a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"}))))},klt=Plt;var J4={};$(J4,{icon:()=>Rlt});var vsr=E(D());var Clt=["title","titleId"];function fq(){return fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tlt=function(t){var n=t.title,r=t.titleId,o=Alt(t,Clt);return a("svg",fq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"})))},Rlt=Tlt;var G4={};$(G4,{icon:()=>Flt});var bsr=E(D());var zlt=["title","titleId"];function dq(){return dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nlt=function(t){var n=t.title,r=t.titleId,o=Dlt(t,zlt);return a("svg",dq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0072C6",d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Flt=Nlt;var X4={};$(X4,{icon:()=>qlt});var Osr=E(D());var Wlt=["title","titleId"];function mq(){return mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vlt=function(t){var n=t.title,r=t.titleId,o=Blt(t,Wlt);return a("svg",mq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},qlt=Vlt;var K4={};$(K4,{icon:()=>Xlt});var _sr=E(D());var Ult=["title","titleId"];function hq(){return hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Glt=function(t){var n=t.title,r=t.titleId,o=$lt(t,Ult);return a("svg",hq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),a("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 00-2.298-6.376"}),a("path",{className:"euiIcon__fillNegative",d:"M24.338 13.554A9.942 9.942 0 0019 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446"}))},Xlt=Glt;var Y4={};$(Y4,{icon:()=>est});var Isr=E(D());var Klt=["title","titleId"];function gq(){return gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zlt=function(t){var n=t.title,r=t.titleId,o=Ylt(t,Klt);return a("svg",gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),a("path",{className:"euiIcon__fillNegative",d:"M10 12v10h10c0-5.522-4.478-10-10-10"}),a("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},est=Zlt;var Q4={};$(Q4,{icon:()=>ist});var Esr=E(D());var tst=["title","titleId"];function vq(){return vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ost=function(t){var n=t.title,r=t.titleId,o=rst(t,tst);return a("svg",vq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 002.773-7.42A11.324 11.324 0 0016.042 4.64l-.05.001h-.05A11.324 11.324 0 004.632 15.949a11.291 11.291 0 002.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 01-1.117-3.139A14.997 14.997 0 011 15.95a14.901 14.901 0 014.378-10.57 14.924 14.924 0 014.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0110.57 4.378 14.912 14.912 0 013.982 13.985 14.871 14.871 0 01-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 01-1.174-3.738 8.26 8.26 0 01.611-2.964 8.42 8.42 0 011.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 00-.858-1.956 5.264 5.264 0 00-4.29-2.217h-.108a5.25 5.25 0 00-4.29 2.216 5.31 5.31 0 00-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 011.628 2.54 8.24 8.24 0 01.61 2.964 6.123 6.123 0 01-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 01-2.49-1.098 4.245 4.245 0 002.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 01-1.525-3.26 8.983 8.983 0 01-.05-3.905 8.906 8.906 0 011.46-3.313A8.993 8.993 0 0111.23 8.39a8.937 8.937 0 014.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 013.448 1.256 9.003 9.003 0 012.554 2.404 9.093 9.093 0 011.459 3.313 9.043 9.043 0 01-.05 3.912 8.925 8.925 0 01-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 002.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004zm-3.956-11.314a2.957 2.957 0 01-2.952-2.952 2.957 2.957 0 012.952-2.952 2.956 2.956 0 012.95 2.952 2.957 2.957 0 01-2.95 2.952",fill:"#F05C56"}))},ist=ost;var Z4={};$(Z4,{icon:()=>cst});var ksr=E(D());var ast=["title","titleId"];function yq(){return yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ust=function(t){var n=t.title,r=t.titleId,o=lst(t,ast);return a("svg",yq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0118 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 018.393-5.349"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}),a("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"})))},cst=ust;var e6={};$(e6,{icon:()=>hst});var Asr=E(D());var pst=["title","titleId"];function bq(){return bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mst=function(t){var n=t.title,r=t.titleId,o=fst(t,pst);return a("svg",bq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M18 0v10a6 6 0 00-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 003.975 23.7 15.934 15.934 0 012 16C2 7.164 9.163 0 18 0zm0 13a3 3 0 110 6 3 3 0 010-6z"}),a("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}))},hst=mst;var t6={};$(t6,{icon:()=>wst});var Tsr=E(D());var gst=["title","titleId"];function wq(){return wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bst=function(t){var n=t.title,r=t.titleId,o=vst(t,gst);return a("svg",wq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M9.75 12L16 32h10l-3.4-10.88A13 13 0 0010.19 12h-.44z"}),a("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 009.5 0H6l3.75 12h.44a13 13 0 0112.41 9.12L26 32h6l-6.275-20.07z"}),a("path",{fill:"#0377CA",d:"M7.91 16.175L0 32h12.855z"}))},wst=bst;var r6={};$(r6,{icon:()=>Ist});var zsr=E(D());var Ost=["title","titleId"];function Oq(){return Oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _st(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sst=function(t){var n=t.title,r=t.titleId,o=xst(t,Ost);return a("svg",Oq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106zm2.344.066l6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11zM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675zM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743z"}))},Ist=Sst;var n6={};$(n6,{icon:()=>Cst});var Lsr=E(D());var jst=["title","titleId"];function xq(){return xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kst=function(t){var n=t.title,r=t.titleId,o=Est(t,jst);return a("svg",xq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208z"}))},Cst=kst;var o6={};$(o6,{icon:()=>zst});var Fsr=E(D());var Ast=["title","titleId"];function _q(){return _q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rst=function(t){var n=t.title,r=t.titleId,o=Mst(t,Ast);return a("svg",_q({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z",fill:"#136EA3",fillRule:"evenodd"}))},zst=Rst;var i6={};$(i6,{icon:()=>Wst});var Bsr=E(D());var Dst=["title","titleId"];function Sq(){return Sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fst=function(t){var n=t.title,r=t.titleId,o=Lst(t,Dst),i=_r("logo_dropwizard");return a("svg",Sq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61",fill:"url(#".concat(i("a"),")")}),a("path",{d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553",fill:"url(#".concat(i("b"),")")}),a("path",{d:"M12.14 24.41l.85-1.466.793 1.544-.908 1.99-.735-2.069zm6.934-5.545l.85-1.465.793 1.543-.908 1.99-.735-2.068zm-4.747-5.851l.85-1.465.792 1.543-.908 1.99-.734-2.068",fill:"#F9A72B"}),a("path",{d:"M12.14 24.41l.85-1.716.793 1.794-.907 1.468-.736-1.546zm6.934-5.545l.851-1.716.792 1.794-.906 1.468-.737-1.546zm-4.747-5.851l.85-1.716.792 1.794-.906 1.468-.736-1.546",fill:"#FFF200"}),a("path",{d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55",fill:"#24265D"}),a("defs",null,a("linearGradient",{id:i("a"),x1:33.473,y1:7.674,x2:7.751,y2:21.331,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"})),a("linearGradient",{id:i("b"),x1:21.028,y1:14.928,x2:6.017,y2:18.844,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"}))))},Wst=Fst;var a6={};$(a6,{icon:()=>Ust});var qsr=E(D());var Bst=["title","titleId"];function Iq(){return Iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qst=function(t){var n=t.title,r=t.titleId,o=Hst(t,Bst);return a("svg",Iq({"data-type":"logoElastic",xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"outline",fillRule:"evenodd",clipRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0132 16.77a6.419 6.419 0 01-1.162 3.652 6.382 6.382 0 01-3.032 2.331 4.833 4.833 0 01-1.672 5.542 4.789 4.789 0 01-5.77-.074 9.016 9.016 0 01-4.5 3.322 8.982 8.982 0 01-5.587.023 9.014 9.014 0 01-4.526-3.287 9.067 9.067 0 01-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 011.145 18.9 6.341 6.341 0 010 15.242a6.42 6.42 0 011.163-3.652 6.384 6.384 0 013.035-2.33 4.833 4.833 0 011.658-5.557 4.789 4.789 0 015.78.07 9.037 9.037 0 014.93-3.446 9.007 9.007 0 015.994.419 9.05 9.05 0 014.407 4.098 9.097 9.097 0 01.873 5.965 6.298 6.298 0 013.02 2.32zm-18.28.658l7.002 3.211 7.066-6.213a7.85 7.85 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001zm-7.247 7.441A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001zm4.755-11.024l-4.8-1.137.002-.002a3.82 3.82 0 011.312-4.358 3.785 3.785 0 014.538.023l-1.052 5.474zm-5.216.01a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255zm18.286 17.848a3.737 3.737 0 01-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 01-1.801 4.68c-.54.283-1.14.432-1.751.434zm-1.31-7.499l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.311 5.311 0 00-.936-3.01 5.282 5.282 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#fff"}),a("path",{d:"M12.58 13.787l7.002 3.211 7.066-6.213a7.849 7.849 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001z",fill:"#FEC514"}),a("path",{d:"M5.333 21.228A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001z",fill:"#00BFB3"}),a("path",{d:"M5.288 9.067l4.8 1.137L11.14 4.73a3.785 3.785 0 00-5.914 1.94 3.82 3.82 0 00.064 2.395",fill:"#F04E98"}),a("path",{d:"M4.872 10.214a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255z",fill:"#1BA9F5"}),a("path",{d:"M20.873 27.277a3.736 3.736 0 002.285.785 3.783 3.783 0 003.101-1.63 3.812 3.812 0 00.451-3.484l-4.8-1.125-1.037 5.454z",fill:"#93C90E"}),a("path",{d:"M21.848 20.563l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.312 5.312 0 00-.936-3.01 5.283 5.283 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#07C"}))},Ust=qst;var l6={};$(l6,{icon:()=>Kst});var $sr=E(D());var $st=["title","titleId"];function jq(){return jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xst=function(t){var n=t.title,r=t.titleId,o=Jst(t,$st);return a("svg",jq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M32 9V2.5A2.5 2.5 0 0029.5 0h-27A2.5 2.5 0 000 2.5V9h32z"}),a("path",{fill:"#00BFB3",d:"M0 20h32v-8H0z"}),a("path",{fill:"#0080D5",d:"M14.5 23H0v6.5A2.5 2.5 0 002.5 32h12v-9z"}),a("path",{fill:"#FEC514",d:"M17.5 23v9h12a2.5 2.5 0 002.5-2.5V23H17.5z"})))},Kst=Xst;var s6={};$(s6,{icon:()=>tut});var Gsr=E(D());var Yst=["title","titleId"];function Eq(){return Eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eut=function(t){var n=t.title,r=t.titleId,o=Qst(t,Yst);return a("svg",Eq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 000-8H2.524A15.984 15.984 0 002 16"}),a("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0030.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 003.413-1.338"}),a("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 00-1.556-1.662A5.034 5.034 0 0025.51 23"})))},tut=eut;var u6={};$(u6,{icon:()=>aut});var Ksr=E(D());var rut=["title","titleId"];function Pq(){return Pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function out(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iut=function(t){var n=t.title,r=t.titleId,o=nut(t,rut);return a("svg",Pq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0016 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),a("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0013 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 000 16z",clipRule:"evenodd"}),a("path",{className:"euiIcon__fillNegative",fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0116 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 000-16z",clipRule:"evenodd"}))},aut=iut;var c6={};$(c6,{icon:()=>put});var Qsr=E(D());var lut=["title","titleId"];function kq(){return kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cut=function(t){var n=t.title,r=t.titleId,o=sut(t,lut);return a("svg",kq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#419EDA"},a("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),a("path",{d:"M31.522 16.495a5.845 5.845 0 01-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 00-3.027-3.703 6.137 6.137 0 012.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 01-1.51 2.829 23.77 23.77 0 00-4.362-1.855 23.79 23.79 0 00-4.355 1.851A6.246 6.246 0 0110.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 012.129 2.347 25.001 25.001 0 00-3.022 3.689 26.068 26.068 0 00.347 4.86 5.832 5.832 0 01-3.09.612L.03 16.46l.043.473a16.723 16.723 0 002.14 6.765l.234.41.35-.308a5.914 5.914 0 012.837-1.372 25.255 25.255 0 002.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 01-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 01-.383-3.244 23.905 23.905 0 004.585-1.165 25.286 25.286 0 002.43-4.086 5.94 5.94 0 012.851 1.373l.35.306.233-.408a16.661 16.661 0 002.14-6.764l.042-.472-.45.036zM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 01-2.113-4.594 20.072 20.072 0 01-.89-5.04 19.076 19.076 0 013.576-3.516 18.867 18.867 0 014.363-2.448 18.944 18.944 0 014.355 2.443 19.19 19.19 0 013.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 01-2.115 4.599z"})))},put=cut;var p6={};$(p6,{icon:()=>gut});var eur=E(D());var fut=["title","titleId"];function Cq(){return Cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hut=function(t){var n=t.title,r=t.titleId,o=dut(t,fut),i=_r("logo_gcp");return a("svg",Cq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 01-2.464 1.398zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 00.712-.7c0-.386-.318-.7-.711-.7a.705.705 0 00-.712.7zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 00-.26-.955.718.718 0 00-.972.256.692.692 0 00.26.955z"}),a("path",{fill:"#4285F4",fillRule:"nonzero",d:"M25.036 3.416l2.873 4.894a1.427 1.427 0 00-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 010-1.399l3.696-6.292a2.853 2.853 0 012.464-1.398h13.143c.982 0 1.937.502 2.464 1.398zM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 00-.712.7c0 .386.318.7.711.7a.705.705 0 00.711-.7zm12.787.606a.692.692 0 00.26-.955.718.718 0 00-.971-.256.692.692 0 00-.26.955.718.718 0 00.971.256z"}),a("path",{fill:"#F4B400",fillRule:"nonzero",d:"M.394 14.601l2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 01-2.464-1.398L.394 17.398a2.754 2.754 0 010-2.797zm2.82.793a.718.718 0 00-.972.256.693.693 0 00.26.955c.34.193.775.078.971-.256a.692.692 0 00-.26-.955zM9.072 26.58a.692.692 0 00-.26.955.718.718 0 00.971.256.692.692 0 00.26-.955.718.718 0 00-.971-.256z"}),a("path",{fill:"#000",d:"M18.054 29.282l2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 00-1.232-.7",opacity:.1}),a("g",{opacity:.1,transform:"translate(2.994 9.609)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#000",d:"M.275 1.498L3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),a("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39L6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07zM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194z"})))},gut=hut;var f6={};$(f6,{icon:()=>Out});var nur=E(D());var vut=["title","titleId"];function Aq(){return Aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function but(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wut=function(t){var n=t.title,r=t.titleId,o=yut(t,vut);return a("svg",Aq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),a("path",{d:"M29.87 16.543a.862.862 0 01-1.167.308.832.832 0 01-.312-1.147.862.862 0 011.167-.308.832.832 0 01.312 1.147M22.56 28.15a.847.847 0 01-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 01-1.167-.308.832.832 0 01.312-1.147.862.862 0 011.167.308.832.832 0 01-.312 1.147M3.586 16.542a.863.863 0 01-1.167.308.832.832 0 01-.313-1.147.862.862 0 011.167-.308.832.832 0 01.313 1.147M22.987 5.665a.862.862 0 01-1.167-.308.832.832 0 01.312-1.147.863.863 0 011.168.308.832.832 0 01-.313 1.147m-13.57.112a.847.847 0 01-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797l-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0022.56 2H9.417a2.853 2.853 0 00-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 01-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 01-.003-1.391L.382 14.584a2.754 2.754 0 000 2.796l6.57 11.186a2.854 2.854 0 002.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 002.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},Out=wut;var d6={};$(d6,{icon:()=>jut});var iur=E(D());var xut=["title","titleId"];function Mq(){return Mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iut=function(t){var n=t.title,r=t.titleId,o=_ut(t,xut);return a("svg",Mq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0116 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0z"}))},jut=Iut;var m6={};$(m6,{icon:()=>Aut});var lur=E(D());var Eut=["title","titleId"];function Tq(){return Tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cut=function(t){var n=t.title,r=t.titleId,o=Put(t,Eut);return a("svg",Tq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 011.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 01-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07z"}),a("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084z"}),a("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 01-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 00-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075zm11.119-7.564l.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 00.071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 00-.064.064zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 00-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 01-.067-.027zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041zM15.355 19a.185.185 0 01.034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04z"}),a("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058z"}),a("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 012.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007z"}),a("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284z"}),a("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 01-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012z"})))},Aut=Cut;var h6={};$(h6,{icon:()=>Dut});var uur=E(D());var Mut=["title","titleId"];function Rq(){return Rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zut=function(t){var n=t.title,r=t.titleId,o=Tut(t,Mut);return a("svg",Rq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 00.045-1.09 2.676 2.676 0 00-1.786.455c-.26.19-.745.79-.24 1",fill:"#F6D2A2"}),a("path",{d:"M4.805 17.987a.6.6 0 01-.27-.06.62.62 0 01-.31-.55A.41.41 0 014 17.05a1.15 1.15 0 01.5-.83 2.752 2.752 0 011.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 00-.3.145c-.288.223-.63.364-.99.41zm1.271-2.067a2.502 2.502 0 00-1.47.45 1 1 0 00-.42.671.25.25 0 00.17.205h.05v.055a.5.5 0 00.21.45 1.31 1.31 0 001.065-.31 1.29 1.29 0 01.34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014z",fill:"#010101"}),a("path",{d:"M4.315 17.3a.745.745 0 00.376-.21z",fill:"#C7B199"}),a("path",{d:"M4.315 17.391a.092.092 0 11-.055-.175h.06a.54.54 0 00.275-.16.092.092 0 01.06-.035.09.09 0 01.068.017.09.09 0 01.035.06.091.091 0 01-.018.068.7.7 0 01-.36.22h-.065v.005z",fill:"#010101"}),a("path",{d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05z",fill:"#74CDDD"}),a("path",{d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 011.116-2.26 2.421 2.421 0 012.722.09l.07.044L6.54 6.154zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 004.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 00-1.28-.38l-.015-.015z",fill:"#010101"}),a("path",{d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667z",fill:"#74CDDD"}),a("path",{d:"M24.647 5.754l-2.201-3.802.065-.045a2.362 2.362 0 012.626-.22 2.427 2.427 0 011.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025zm-1.961-3.752l2.041 3.532a1.956 1.956 0 001.426-1.62 2.24 2.24 0 00-1.106-2.077 2.126 2.126 0 00-2.361.165z",fill:"#010101"}),a("path",{d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 011.591-1.141z",fill:"#F6D2A2"}),a("path",{d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 00-.9-.775l-.12-.035.074-.125a2.656 2.656 0 011.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 01-.45.725.905.905 0 01-.61.31zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 00.5-.235.661.661 0 00.371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 00-1.386.996h-.005z",fill:"#010101"}),a("path",{d:"M24.147 31.494a.09.09 0 01-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 00-.33-.61.091.091 0 01-.022-.098.09.09 0 01.147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 01-.04.12l-.04.03z",fill:"#010101"}),a("path",{d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 01-1.001-.235.325.325 0 01-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25z",fill:"#F6D2A2"}),a("path",{d:"M7.692 31.995a.613.613 0 01-.16 0 .74.74 0 01-.435-.375.301.301 0 01-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 00-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 01-.486.126zm-.6-.58a.245.245 0 01.105 0h.025l.04.08a.58.58 0 00.335.305.686.686 0 00.5-.12c.26-.155.503-.337.726-.54a3 3 0 011.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 00.105.07l.02-.005z",fill:"#010101"}),a("path",{d:"M7.157 31.614a.09.09 0 01-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 11.165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 01-.067.084.09.09 0 01-.038.002zM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35z",fill:"#010101"}),a("path",{d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 01-.046-1.09 2.677 2.677 0 011.787.454c.26.19.745.79.24 1.001",fill:"#F6D2A2"}),a("path",{d:"M26.728 17.846a2.046 2.046 0 01-.955-.36 1.117 1.117 0 00-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 01-.026-.856v-.12h.076a2.751 2.751 0 011.846.47 1.15 1.15 0 01.5.83.412.412 0 01-.225.326.62.62 0 01-.31.55.605.605 0 01-.306.055zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 001.067.31.502.502 0 00.21-.45v-.06h.05a.25.25 0 00.17-.205 1.002 1.002 0 00-.42-.67 2.552 2.552 0 00-1.627-.46z",fill:"#010101"}),a("path",{d:"M27.218 17.181a.746.746 0 01-.375-.195z",fill:"#C7B199"}),a("path",{d:"M27.219 17.271h-.095a.7.7 0 01-.35-.25.09.09 0 01-.007-.101.091.091 0 01.152-.01.54.54 0 00.275.16h.06a.101.101 0 11-.035.201z",fill:"#010101"}),a("path",{d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066",fill:"#74CDDD"}),a("path",{d:"M15.502 31.494h-.62a13.202 13.202 0 01-4.358-.87 6.969 6.969 0 01-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 013.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272zM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 01-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0020.445.841a14.96 14.96 0 00-5.038-.685z",fill:"#010101"}),a("path",{d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03z",fill:"#fff"}),a("path",{d:"M18.979 7.39a3.457 3.457 0 01-1.13-.185 2.797 2.797 0 01-1.892-2.266 2.882 2.882 0 01.78-2.222 3.407 3.407 0 012.002-1 3.202 3.202 0 012.031.35 2.727 2.727 0 011.296 1.806 2.643 2.643 0 01-.77 2.682 3.502 3.502 0 01-2.317.835zm-2.847-2.476a2.626 2.626 0 001.776 2.126 3.417 3.417 0 003.277-.62 2.502 2.502 0 00.716-2.502 2.672 2.672 0 00-3.132-2.031 2.887 2.887 0 00-2.637 3.027z",fill:"#010101"}),a("path",{d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855z",fill:"#fff"}),a("path",{d:"M11.474 7.705a3.232 3.232 0 01-1.536-.375 2.727 2.727 0 01-1.355-1.776 2.757 2.757 0 01.94-2.827 3.552 3.552 0 013.532-.45 2.672 2.672 0 011.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 01-.565.025zM8.763 5.52A2.732 2.732 0 0012.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 00-1.5-2.262 3.377 3.377 0 00-3.358.43 2.597 2.597 0 00-.885 2.637z",fill:"#010101"}),a("path",{d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 01-.585.36.861.861 0 01-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344z",fill:"#fff"}),a("path",{d:"M16.237 11.483h-.025a.944.944 0 01-.725-.566 5.95 5.95 0 010-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 01-.476.34l-.155.06h-.03zm-.58-.63a.766.766 0 00.56.445l.14-.056a.6.6 0 00.366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005zM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965z",fill:"#010101"}),a("path",{d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245z",fill:"#fff"}),a("path",{d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965z",fill:"#010101"}),a("path",{d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245zM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 01.046-1.77l-1.316.334z",fill:"#fff"}),a("path",{d:"M14.812 11.428a.5.5 0 01-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 000 1.181v.065a1.056 1.056 0 01-.815.55zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 010-1.18c0-.146 0-.3.031-.45l-1.14.3z",fill:"#010101"}),a("path",{d:"M14.38 7.595a1.146 1.146 0 00-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105z",fill:"#F6D2A2"}),a("path",{d:"M17.268 9.727a2 2 0 01-.73-.206 2.207 2.207 0 00-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 010-1.05 1.281 1.281 0 011.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 01-.88 1.08zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 00.205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 00-.85.59.906.906 0 000 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185z",fill:"#231F20"}),a("path",{d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36z",fill:"#010101"}))},Dut=zut;var g6={};$(g6,{icon:()=>But});var pur=E(D());var Lut=["title","titleId"];function zq(){return zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wut=function(t){var n=t.title,r=t.titleId,o=Nut(t,Lut),i=_r("logo_google_g");return a("svg",zq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32",width:32,height:32,"aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),a("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),a("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 01-.5-3.032 9.59 9.59 0 01.5-3.032V.052h-5.33A15.95 15.95 0 000 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),a("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),a("g",{fill:"none",fillRule:"evenodd"},a("g",{transform:"translate(15.955 13.087)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#4285F4",fillRule:"nonzero",mask:"url(#".concat(i("b"),")"),d:"M.001 15.006h15.318V.014H.001z"})),a("g",{transform:"translate(1.613 19.003)"},a("mask",{id:i("d"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("c"))})),a("path",{fill:"#34A853",fillRule:"nonzero",mask:"url(#".concat(i("d"),")"),d:"M.084 12.956h24.819V.031H.084z"})),a("g",{transform:"translate(0 8.784)"},a("mask",{id:i("f"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("e"))})),a("path",{fill:"#FBBC04",fillRule:"nonzero",mask:"url(#".concat(i("f"),")"),d:"M0 14.384h7.028V.052H0z"})),a("g",{transform:"translate(1.613)"},a("mask",{id:i("h"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("g"))})),a("path",{fill:"#EA4335",fillRule:"nonzero",mask:"url(#".concat(i("h"),")"),d:"M.084 12.97h24.935V.046H.084z"}))))},But=Wut;var v6={};$(v6,{icon:()=>$ut});var mur=E(D());var Hut=["title","titleId"];function Dq(){return Dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uut=function(t){var n=t.title,r=t.titleId,o=Vut(t,Hut),i=_r("logo_haproxy");return a("svg",Dq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{clipPath:"url(#".concat(i("clip0"),")")},a("path",{d:"M16.05 13.237l-3.11-3.612",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M6.117 10.528l2.509 3.512",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M16.05 13.237l3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M5.114 15.043l3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117L19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512L12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M9.327 7.117L6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512L9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258L1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043L1.4 18.555M5.114 19.258L1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528L4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803",stroke:"#083D5F",strokeWidth:.05,strokeMiterlimit:10}),a("path",{d:"M13.943 15.244h-3.612v3.592h3.612v-3.592zM17.756 11.331h-3.612v3.592h3.612v-3.592zM17.756 19.157h-3.612v3.592h3.612v-3.592zM21.669 15.244h-3.612v3.592h3.612v-3.592z",fill:"#006DA8"}),a("path",{d:"M20.365 8.421h-2.509V10.9h2.509V8.42zM14.144 8.321h-2.509v2.478h2.509V8.321zM9.83 12.836H7.32v2.478H9.83v-2.478zM9.83 18.956H7.32v2.479H9.83v-2.479zM24.679 18.956H22.17v2.479h2.509v-2.479zM24.679 12.736H22.17v2.478h2.509v-2.478z",fill:"#2F77BC"}),a("path",{d:"M6.92 9.625H5.314v1.676H6.92V9.625zM10.13 6.214H8.526v1.675h1.606V6.214zM14.445 4.609h-1.606v1.675h1.606V4.61zM5.916 14.14H4.311v1.676h1.605V14.14zM26.786 9.826H25.08v1.646h1.706V9.826zM23.575 6.415H21.87V8.06h1.705V6.415zM19.26 4.81h-1.705v1.645h1.706V4.809zM27.689 14.441h-1.605v1.646h1.605V14.44z",fill:"#139BD7"}),a("path",{d:"M14.144 23.27h-2.509v2.479h2.509v-2.478zM20.264 23.27h-2.508v2.479h2.508v-2.478z",fill:"#2F77BC"}),a("path",{d:"M26.685 22.77H25.08v1.675h1.605v-1.676zM23.375 26.08H21.77v1.676h1.605V26.08zM19.06 27.686h-1.605v1.675h1.605v-1.675zM27.589 18.254h-1.606v1.676h1.606v-1.676zM6.92 22.97H5.214v1.646H6.92V22.97zM10.03 26.381H8.325v1.646h1.705V26.38zM14.445 27.987h-1.706v1.645h1.706v-1.645zM5.816 18.355H4.21V20h1.606v-1.645z",fill:"#139BD7"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933z",fill:"#03A9DA"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933zM25.682 27.886h-.903v.933h.903v-.933zM31 17.953h-.903v.933H31v-.933zM7.12 27.987h-.903v.933h.903v-.933zM30.398 20.763h-.903v.933h.903v-.933zM20.665 30.596h-.903v.933h.903v-.933zM29.295 23.371h-.903v.933h.903v-.933zM27.69 25.78h-.904v.932h.903v-.933zM23.274 29.793h-.903v.902h.903v-.902zM17.756 31.498h-.903v.903h.903v-.903zM9.428 29.492h-.903v.933h.903v-.933zM3.508 23.472h-.903v.933h.903v-.933zM2.304 20.863h-.903v.933h.903v-.933zM5.013 25.88H4.11v.933h.903v-.933zM1.903 17.953H1v.933h.903v-.933zM14.947 31.498h-.903v.933h.902v-.933zM12.137 30.596h-.903v.933h.903v-.933z",fill:"#03A9DA"})),a("defs",null,a("clipPath",{id:i("clip0")},a("path",{d:"M0 0h32v32H0V0z",fill:"#fff"}))))},$ut=Uut;var y6={};$(y6,{icon:()=>Yut});var vur=E(D());var Jut=["title","titleId"];function Lq(){return Lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kut=function(t){var n=t.title,r=t.titleId,o=Gut(t,Jut),i=_r("logo_ibm");return a("svg",Lq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},a("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),a("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),a("stop",{offset:"100%",stopColor:"#21A2EF"})),a("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},a("stop",{offset:"0%",stopColor:"#207FFA"}),a("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),a("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},a("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),a("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),a("stop",{offset:"86.716%",stopColor:"#60CBE7"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},a("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),a("stop",{offset:"22.427%",stopColor:"#38D2E0"}),a("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},a("stop",{offset:"0%",stopColor:"#126CFD"}),a("stop",{offset:"100%",stopColor:"#21A1EF"}))),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08z"}),a("path",{fill:"url(#".concat(i("a"),")"),d:"M16.536 19.645l-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 010-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 000 13.445l-.851.843z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 00-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 01-4.922-2.059A6.876 6.876 0 01.029 20.91l1.204.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063z",transform:"translate(0 2)"})))},Yut=Kut;var b6={};$(b6,{icon:()=>rct});var wur=E(D());var Qut=["title","titleId"];function Nq(){return Nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ect(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tct=function(t){var n=t.title,r=t.titleId,o=Zut(t,Qut);return a("svg",Nq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M.047 22.909l1.186.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 01-4.922-2.06A6.876 6.876 0 01.029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 00-3.412 5.18l-1.186-.01zm4.215-9.787a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08zM16.366 19.78H16a2.322 2.322 0 01-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 015.057-5.533 8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876 7.009 7.009 0 00-4.288 4.613c-.115.399-.115.399 0 0h-.44zM6.154 23.826a10.626 10.626 0 012.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 007.264 23.36a6.99 6.99 0 00-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466z"}))},rct=tct;var w6={};$(w6,{icon:()=>lct});var xur=E(D());var nct=["title","titleId"];function Fq(){return Fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var act=function(t){var n=t.title,r=t.titleId,o=oct(t,nct);return a("svg",Fq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 002.939 1.331 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926 3.93 3.93 0 00-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 00-3.14-1.825V8.71a3.932 3.932 0 003.119-3.842A3.93 3.93 0 0012.012.941a3.93 3.93 0 00-3.926 3.926 3.93 3.93 0 003.048 3.824v2.249a5.075 5.075 0 00-4.193 4.99 5.075 5.075 0 004.229 4.995V23.3a3.931 3.931 0 00-3.084 3.833 3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.927-3.926 3.931 3.931 0 00-3.084-3.833v-2.375a5.07 5.07 0 003.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904zM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 01-1.903-1.904zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 01-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904zm-1.904-8.548a2.658 2.658 0 01-2.655-2.655 2.658 2.658 0 012.655-2.655 2.658 2.658 0 012.655 2.655 2.658 2.658 0 01-2.655 2.655zm9.553 4.867a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903z"}))},lct=act;var O6={};$(O6,{icon:()=>fct});var Sur=E(D());var sct=["title","titleId"];function Wq(){return Wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pct=function(t){var n=t.title,r=t.titleId,o=uct(t,sct);return a("svg",Wq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),a("path",{className:"euiIcon__fillNegative",d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 004 12"}),a("path",{fill:"#00BFB3",d:"M18.479 16.664L6.268 30.754l-1.073 1.237h23.191c-1.252-6.292-4.883-11.719-9.908-15.327"})))},fct=pct;var x6={};$(x6,{icon:()=>vct});var jur=E(D());var dct=["title","titleId"];function Bq(){return Bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gct=function(t){var n=t.title,r=t.titleId,o=mct(t,dct);return a("svg",Bq({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.89.003a2.14 2.14 0 011.03.206l11.127 5.304a2.11 2.11 0 011.15 1.429l2.75 11.921a2.09 2.09 0 01-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 01-.41-1.783L2.798 6.945a2.11 2.11 0 011.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 00-5.555 2.666 9.98 9.98 0 01-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 00-.464-.175.642.642 0 00-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 00-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 003.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 006.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 003.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 00-.139-3.104 8.599 8.599 0 00-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 00-5.528-2.666 16.036 16.036 0 01-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156l-.198 3.488-.014.007a.587.587 0 01-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 014.014-1.919zm1.668 0a6.922 6.922 0 013.99 1.92l-2.846 2.015-.01-.004a.588.588 0 01-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222l2.614 2.335-.003.014a.585.585 0 01-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 01.973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 01.145 2.229l-3.37-.97-.002-.013a.586.586 0 01-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 01.135.01l.005-.008 3.468.586a6.858 6.858 0 01-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 01.51-.818zm-5.824.014a.587.587 0 01.53.817l.01.012-1.331 3.214a6.886 6.886 0 01-2.767-3.458l3.437-.582.006.007a.595.595 0 01.115-.01zm2.904 1.407a.582.582 0 01.275.059.583.583 0 01.263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 01-3.758-.194l1.69-3.05h.003a.588.588 0 01.497-.31z",fill:"#326CE5"}))},vct=gct;var _6={};$(_6,{icon:()=>xct});var Pur=E(D());var yct=["title","titleId"];function Hq(){return Hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oct=function(t){var n=t.title,r=t.titleId,o=bct(t,yct);return a("svg",Hq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 019 9h13c0-12.15-9.85-22-22-22"}),a("path",{className:"euiIcon__fillNegative",d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436"}),a("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},xct=Oct;var S6={};$(S6,{icon:()=>Ect});var Cur=E(D());var _ct=["title","titleId"];function Vq(){return Vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jct=function(t){var n=t.title,r=t.titleId,o=Sct(t,_ct);return a("svg",Vq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),a("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),a("path",{className:"euiIcon__fillNegative",d:"M3 20c0 6.627 5.373 12 12 12h1V20H3z"}))},Ect=jct;var I6={};$(I6,{icon:()=>Mct});var Mur=E(D());var Pct=["title","titleId"];function qq(){return qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Act=function(t){var n=t.title,r=t.titleId,o=kct(t,Pct);return a("svg",qq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0116 0a9.5 9.5 0 019.5 9.5"}),a("path",{className:"euiIcon__fillNegative",d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 00-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925"}),a("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 01-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 01-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 009.271 0L32 21.925l-6.47-4.852z"}))},Mct=Act;var j6={};$(j6,{icon:()=>Lct});var Rur=E(D());var Tct=["title","titleId"];function Uq(){return Uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dct=function(t){var n=t.title,r=t.titleId,o=Rct(t,Tct),i=_r("logo_memcached");return a("svg",Uq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},a("stop",{offset:"0%",stopColor:"#574C4A"}),a("stop",{offset:"100%",stopColor:"#80716D"})),a("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},a("stop",{offset:"0%",stopColor:"#268D83"}),a("stop",{offset:"100%",stopColor:"#2EA19E"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567z"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889z"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333z",opacity:.1}),a("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18z",opacity:.3})))},Lct=Dct;var E6={};$(E6,{icon:()=>Hct});var Lur=E(D());var Nct=["title","titleId"];function $q(){return $q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bct=function(t){var n=t.title,r=t.titleId,o=Fct(t,Nct);return a("svg",$q({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 00-7.07 0L2 28v4z"}),a("path",{className:"euiIcon__fillNegative",d:"M16.465 13.535l-3.536 3.536a9.965 9.965 0 007.07 2.93 9.965 9.965 0 007.072-2.93l-3.536-3.536a5 5 0 00-7.07 0"}),a("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0120 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0030 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207z"})))},Hct=Bct;var P6={};$(P6,{icon:()=>Jct});var Fur=E(D());var Vct=["title","titleId"];function Jq(){return Jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $ct=function(t){var n=t.title,r=t.titleId,o=qct(t,Vct);return a("svg",Jq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFF",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#A6A385",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"}),a("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"})))},Jct=$ct;var k6={};$(k6,{icon:()=>Qct});var Bur=E(D());var Gct=["title","titleId"];function Gq(){return Gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yct=function(t){var n=t.title,r=t.titleId,o=Xct(t,Gct);return a("svg",Gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#00546B"},a("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 00-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 01-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 01-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 016.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24z"}),a("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5z"})))},Qct=Yct;var C6={};$(C6,{icon:()=>npt});var Vur=E(D());var Zct=["title","titleId"];function Xq(){return Xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rpt=function(t){var n=t.title,r=t.titleId,o=ept(t,Zct);return a("svg",Xq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#119639",d:"M16 0l13.856 8v16L16 32 2.144 24V8z"}),a("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 11-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 013.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512z"})))},npt=rpt;var A6={};$(A6,{icon:()=>spt});var Uur=E(D());var opt=["title","titleId"];function Kq(){return Kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lpt=function(t){var n=t.title,r=t.titleId,o=ipt(t,opt);return a("svg",Kq({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17z",fill:"#F04E98"}),a("path",{className:"euiIcon__fillNegative",d:"M10 32h9V8h-9z"}),a("path",{d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32z",fill:"#07C"}))},spt=lpt;var M6={};$(M6,{icon:()=>dpt});var Jur=E(D());var upt=["title","titleId"];function Yq(){return Yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ppt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fpt=function(t){var n=t.title,r=t.titleId,o=cpt(t,upt);return a("svg",Yq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),a("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),a("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),a("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),a("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),a("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),a("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),a("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},dpt=fpt;var T6={};$(T6,{icon:()=>ypt});var Xur=E(D());var mpt=["title","titleId"];function Qq(){return Qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vpt=function(t){var n=t.title,r=t.titleId,o=hpt(t,mpt),i=_r("logo_php");return a("svg",Qq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),a("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),a("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),a("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},a("stop",{offset:"0%",stopColor:"#AEB2D5"}),a("stop",{offset:"30%",stopColor:"#AEB2D5"}),a("stop",{offset:"75%",stopColor:"#484C89"}),a("stop",{offset:"100%",stopColor:"#484C89"}))),a("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},a("g",{transform:"translate(.592 .86)"},a("mask",{id:i("c"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},a("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),a("mask",{id:i("e"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("d"))})),a("g",{mask:"url(#".concat(i("e"),")")},a("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),a("mask",{id:i("g"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("f"))})),a("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},a("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843zM5.31 4.172a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H5.309z"}),a("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883H6.833a.323.323 0 01-.317-.261L4.992 4.396a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284z"}),a("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 00-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 00-.159-.131H12.58a.161.161 0 00-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 00.159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 00-.158-.131h-1.721z"}),a("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 01-.317-.261L12.263 6.48a.323.323 0 01.317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 01.317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 01-.316.385m0-.323l-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),a("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843zm-3.392-3.645a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H18.64z"}),a("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883h-3.284a.323.323 0 01-.317-.261l-1.524-7.841a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284z"}))))},ypt=vpt;var R6={};$(R6,{icon:()=>_pt});var Qur=E(D());var bpt=["title","titleId"];function Zq(){return Zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Opt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xpt=function(t){var n=t.title,r=t.titleId,o=wpt(t,bpt);return a("svg",Zq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 00-4.06.551 15.573 15.573 0 00-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 00-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),a("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 00-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 012.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),a("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 00-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 00.097-.006.947.947 0 00.53-.281c.135-.138.213-.291.199-.391"}),a("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 00-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 00-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 012.532-2.778 4.18 4.18 0 001.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 001.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104zM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 01-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 00.015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 00-3.572-2.604 12.407 12.407 0 012.68-.244zM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 01-2.352-1.011zm.133 4.594a2.07 2.07 0 01-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 00-.02-.143 1.823 1.823 0 00-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 00-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 00.195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821z"})))},_pt=xpt;var z6={};$(z6,{icon:()=>Ppt});var ecr=E(D());var Spt=["title","titleId"];function eU(){return eU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ept=function(t){var n=t.title,r=t.titleId,o=Ipt(t,Spt);return a("svg",eU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73zm7.475-4.963H8.43v-2.711h14.95v2.71zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001z"}))},Ppt=Ept;var D6={};$(D6,{icon:()=>Tpt});var rcr=E(D());var kpt=["title","titleId"];function tU(){return tU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mpt=function(t){var n=t.title,r=t.titleId,o=Cpt(t,kpt);return a("svg",tU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058z"}))},Tpt=Mpt;var L6={};$(L6,{icon:()=>Npt});var ocr=E(D());var Rpt=["title","titleId"];function rU(){return rU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lpt=function(t){var n=t.title,r=t.titleId,o=zpt(t,Rpt);return a("svg",rU({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{transform:"translate(0 3)",fill:"none"},a("path",{d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z",fill:"#A41E11"}),a("path",{d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z",fill:"#D82C20"}),a("path",{d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{fill:"#FFF",d:"M20.157 3.985l-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123l-5.118-2.11 7.334-1.119z"}),a("ellipse",{fill:"#FFF",cx:9.541,cy:6.311,rx:3.92,ry:1.51}),a("path",{fill:"#7A0C00",d:"M23.398 4.386l4.34 1.705-4.336 1.703z"}),a("path",{fill:"#AD2115",d:"M18.596 6.274l4.802-1.888.004 3.408-.471.183z"})))},Npt=Lpt;var N6={};$(N6,{icon:()=>Vpt});var acr=E(D());var Fpt=["title","titleId"];function nU(){return nU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hpt=function(t){var n=t.title,r=t.titleId,o=Wpt(t,Fpt);return a("svg",nU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9z",fill:"#FA744E"}),a("path",{d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073z",fill:"#1DBAB0"}),a("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10z",className:"euiIcon__fillNegative"}))},Vpt=Hpt;var F6={};$(F6,{icon:()=>Gpt});var scr=E(D());var qpt=["title","titleId"];function oU(){return oU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $pt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jpt=function(t){var n=t.title,r=t.titleId,o=Upt(t,qpt);return a("svg",oU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),a("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20z"}),a("path",{className:"euiIcon__fillNegative",d:"M2.533 10L.428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533z"})))},Gpt=Jpt;var W6={};$(W6,{icon:()=>Zpt});var ccr=E(D());var Xpt=["title","titleId"];function iU(){return iU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ypt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qpt=function(t){var n=t.title,r=t.titleId,o=Kpt(t,Xpt);return a("svg",iU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFAE00",d:"M16 32L0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),a("path",{fill:"#EC6C00",d:"M16 32L0 11.454h32z"}),a("path",{fill:"#FFAE00",d:"M16 32L6.477 11.454h19.045z"}),a("path",{fill:"#FFEFB4",d:"M16 0L6.477 11.454h19.045z"}),a("path",{fill:"#FFAE00",d:"M6.932 1.074L3.369 6.3.001 11.454h6.542zM25.069 1.074L28.632 6.3 32 11.454h-6.542z"}),a("path",{fill:"#FED305",d:"M6.931 1.074l-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},Zpt=Qpt;var B6={};$(B6,{icon:()=>oft});var fcr=E(D());var eft=["title","titleId"];function aU(){return aU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nft=function(t){var n=t.title,r=t.titleId,o=tft(t,eft);return a("svg",aU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 01-3.33 3.33 3.337 3.337 0 01-3.328-3.33 3.337 3.337 0 013.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 013.33-3.329 3.337 3.337 0 013.328 3.33v8.335a3.337 3.337 0 01-3.329 3.329 3.337 3.337 0 01-3.329-3.33V20.18z"}),a("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 01-3.33-3.33A3.337 3.337 0 0111.82.156a3.337 3.337 0 013.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 013.328 3.33 3.337 3.337 0 01-3.329 3.328H3.484a3.337 3.337 0 01-3.33-3.329 3.337 3.337 0 013.33-3.329h8.335z"}),a("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 013.329-3.33 3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 01-3.329 3.328 3.337 3.337 0 01-3.329-3.329V3.484a3.337 3.337 0 013.33-3.33 3.337 3.337 0 013.328 3.33v8.335z"}),a("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 013.33 3.329 3.337 3.337 0 01-3.33 3.329 3.337 3.337 0 01-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 01-3.329-3.329 3.337 3.337 0 013.33-3.329h8.335a3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328H20.18z"})))},oft=nft;var H6={};$(H6,{icon:()=>uft});var mcr=E(D());var ift=["title","titleId"];function lU(){return lU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sft=function(t){var n=t.title,r=t.titleId,o=aft(t,ift);return a("svg",lU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0016 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2z"}),a("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 008.544-7.834A12.43 12.43 0 0113 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547z"}),a("path",{className:"euiIcon__fillNegative",d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 01-7.852-2.78 15.042 15.042 0 01-10.11 8.343A15.91 15.91 0 0016.002 32c6.314 0 11.758-3.669 14.36-8.98"}))},uft=sft;var V6={};$(V6,{icon:()=>mft});var gcr=E(D());var cft=["title","titleId"];function sU(){return sU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dft=function(t){var n=t.title,r=t.titleId,o=pft(t,cft);return a("svg",sU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 019.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121z"}),a("path",{fill:"#4B4B4B",d:"M18.73 10.926l2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 00-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 012.08-3.192 3.243 3.243 0 013.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972z"}),a("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 01-4.553-.157c-.249-.267-.445-.585-.692-.913z"})))},mft=dft;var q6={};$(q6,{icon:()=>bft});var ycr=E(D());var hft=["title","titleId"];function uU(){return uU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yft=function(t){var n=t.title,r=t.titleId,o=gft(t,hft);return a("svg",uU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00ADEF",d:"M0 4.51l12.977-1.768.006 12.518-12.971.074L0 4.51zm12.97 12.192l.011 12.529-12.97-1.784-.002-10.829 12.962.084zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511zm17.21 14.308l-.003 15.033-17.207-2.429-.024-12.632 17.235.028z"}))},bft=yft;var U6={};$(U6,{icon:()=>Sft});var wcr=E(D());var wft=["title","titleId"];function cU(){return cU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ft=function(t){var n=t.title,r=t.titleId,o=Oft(t,wft);return a("svg",cU({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05z",fill:"#FEC514"}),a("path",{d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2z",fill:"#F04E98"}),a("path",{d:"M15.384 24.89L12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137z",className:"euiIcon__fillNegative"}))},Sft=_ft;var $6={};$($6,{icon:()=>kft});var xcr=E(D());var Ift=["title","titleId"];function pU(){return pU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pft=function(t){var n=t.title,r=t.titleId,o=jft(t,Ift);return a("svg",pU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24zm2.394-1.206l-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 011 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23zm-.578-.856a.56.56 0 00.118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18z"}))},kft=Pft;var J6={};$(J6,{icon:()=>Rft});var Scr=E(D());var Cft=["title","titleId"];function fU(){return fU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tft=function(t){var n=t.title,r=t.titleId,o=Aft(t,Cft);return a("svg",fU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.799l-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 011.265-2.885V0h1v6.178a2.003 2.003 0 011.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32z"}))},Rft=Tft;var G6={};$(G6,{icon:()=>Fft});var jcr=E(D());var zft=["title","titleId"];function dU(){return dU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nft=function(t){var n=t.title,r=t.titleId,o=Dft(t,zft);return a("svg",dU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.747 10.992h13.1a.123.123 0 00.122-.123V8.51a.122.122 0 00-.122-.122H1.122A.122.122 0 001 8.51v2.36c0 .066.055.122.122.122h.625zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 010 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24z"}))},Fft=Nft;var X6={};$(X6,{icon:()=>qft});var Pcr=E(D());var Wft=["title","titleId"];function mU(){return mU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vft=function(t){var n=t.title,r=t.titleId,o=Bft(t,Wft);return a("svg",mU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 010 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008zm11.549 1H1.12A.123.123 0 001 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 00.122-.122V5.13a.123.123 0 00-.122-.122h-1.088zm-5.301 9.097l2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528z"}))},qft=Vft;var K6={};$(K6,{icon:()=>Xft});var Ccr=E(D());var Uft=["title","titleId"];function hU(){return hU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gft=function(t){var n=t.title,r=t.titleId,o=$ft(t,Uft);return a("svg",hU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 01-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 002.245 2.245h6.568a2.247 2.247 0 002.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 01-3.244 3.245zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1z"}))},Xft=Gft;var Y6={};$(Y6,{icon:()=>edt});var Mcr=E(D());var Kft=["title","titleId"];function gU(){return gU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zft=function(t){var n=t.title,r=t.titleId,o=Yft(t,Kft);return a("svg",gU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.552 10.71a3.008 3.008 0 004.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 11-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 00-.739 4.189zm8.296-2.137l1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15zm-4.6-6.571l1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151zm1.97 1.068L9.07 1.428a1.003 1.003 0 00-1.397-.246L3.566 4.057A5.995 5.995 0 001.092 7.94a5.993 5.993 0 00.996 4.495 5.99 5.99 0 003.883 2.473 5.991 5.991 0 004.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 00-1.396-.246l-4.107 2.875a2.002 2.002 0 01-1.498.332 2 2 0 01-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396z"}))},edt=Zft;var Q6={};$(Q6,{icon:()=>idt});var Rcr=E(D());var tdt=["title","titleId"];function vU(){return vU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var odt=function(t){var n=t.title,r=t.titleId,o=rdt(t,tdt);return a("svg",vU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.143 15.85l-3.872-3.872a.5.5 0 01-.034-.738 6.01 6.01 0 000-8.486 6.004 6.004 0 00-8.484 0 6.01 6.01 0 000 8.486 5.96 5.96 0 004.242 1.757.5.5 0 010 1 6.955 6.955 0 01-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 01-.708.708zM6.254 3l.277 5.063h.935L7.754 3h-1.5zm.222 7.548a.727.727 0 00.533.222.717.717 0 00.52-.22.715.715 0 00.225-.53.716.716 0 00-.222-.534.724.724 0 00-.523-.216.731.731 0 00-.533.219.719.719 0 00-.222.53c0 .205.074.38.222.529z"}))},idt=odt;var Z6={};$(Z6,{icon:()=>cdt});var Dcr=E(D());var adt=["title","titleId"];function yU(){return yU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var udt=function(t){var n=t.title,r=t.titleId,o=ldt(t,adt);return a("svg",yU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 6a.5.5 0 010 1h-6a.5.5 0 010-1h6zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},cdt=udt;var ew={};$(ew,{icon:()=>hdt});var Ncr=E(D());var pdt=["title","titleId"];function bU(){return bU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ddt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mdt=function(t){var n=t.title,r=t.titleId,o=fdt(t,pdt);return a("svg",bU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 6h2.5a.5.5 0 010 1H7v2.5a.5.5 0 01-1 0V7H3.5a.5.5 0 010-1H6V3.5a.5.5 0 011 0V6zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},hdt=mdt;var tw={};$(tw,{icon:()=>wdt});var Wcr=E(D());var gdt=["title","titleId"];function wU(){return wU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ydt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bdt=function(t){var n=t.title,r=t.titleId,o=vdt(t,gdt);return a("svg",wU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.55 14.224a.502.502 0 00.897 0l4-8a.5.5 0 00.053-.235 4.672 4.672 0 00-.084-.705 5.538 5.538 0 00-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 00.053.235l3.997 8zM8 5a1 1 0 100 2 1 1 0 000-2zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895z"}))},wdt=bdt;var rw={};$(rw,{icon:()=>Idt});var Hcr=E(D());var Odt=["title","titleId"];function OU(){return OU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _dt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sdt=function(t){var n=t.title,r=t.titleId,o=xdt(t,Odt);return a("svg",OU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),a("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0zm1 6h14V4H1v5z"}))},Idt=Sdt;var nw={};$(nw,{icon:()=>Cdt});var qcr=E(D());var jdt=["title","titleId"];function xU(){return xU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kdt=function(t){var n=t.title,r=t.titleId,o=Edt(t,jdt);return a("svg",xU({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 2h16v2H0V2zm0 5h16v2H0V7zm16 5H0v2h16v-2z"}))},Cdt=kdt;var ow={};$(ow,{icon:()=>zdt});var $cr=E(D());var Adt=["title","titleId"];function _U(){return _U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rdt=function(t){var n=t.title,r=t.titleId,o=Mdt(t,Adt);return a("svg",_U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5zM3.51 4a.513.513 0 01-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 11.707.707L9.14 12.56A1.496 1.496 0 018.026 13L7.993 13a.501.501 0 01-.118-.014 1.493 1.493 0 01-.857-.426l-2.122-2.12a.5.5 0 01.708-.708l1.889 1.89V4H3.51zM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5z"}))},zdt=Rdt;var iw={};$(iw,{icon:()=>Wdt});var Gcr=E(D());var Ddt=["title","titleId"];function SU(){return SU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fdt=function(t){var n=t.title,r=t.titleId,o=Ldt(t,Ddt);return a("svg",SU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.014 7.382a.501.501 0 00-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 10.708-.708L2.208 8H14.5a.5.5 0 000-1H2.379l1.889-1.89a.5.5 0 00-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858zM14.5 3h-7a.5.5 0 000 1h7a.5.5 0 000-1zm0 8h-7a.5.5 0 100 1h7a.5.5 0 100-1z"}))},Wdt=Fdt;var aw={};$(aw,{icon:()=>Udt});var Kcr=E(D());var Bdt=["title","titleId"];function IU(){return IU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qdt=function(t){var n=t.title,r=t.titleId,o=Hdt(t,Bdt);return a("svg",IU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.986 7.382a.501.501 0 01.013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 11-.708-.708L13.792 8H1.5a.5.5 0 010-1h12.121l-1.889-1.89a.5.5 0 01.707-.706l2.121 2.12c.241.242.383.544.426.858zM1.5 3h7a.5.5 0 010 1h-7a.5.5 0 010-1zm0 8h7a.5.5 0 110 1h-7a.5.5 0 110-1z"}))},Udt=qdt;var lw={};$(lw,{icon:()=>Kdt});var Qcr=E(D());var $dt=["title","titleId"];function jU(){return jU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xdt=function(t){var n=t.title,r=t.titleId,o=Jdt(t,$dt);return a("svg",jU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10.01 8.5zM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 01-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 11-.707-.707L6.86 3.44A1.496 1.496 0 017.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 01-.708.708l-1.889-1.89V12H12.5zM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 8.5z"}))},Kdt=Xdt;var sw={};$(sw,{icon:()=>t0t});var epr=E(D());var Ydt=["title","titleId"];function EU(){return EU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e0t=function(t){var n=t.title,r=t.titleId,o=Qdt(t,Ydt);return a("svg",EU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.352 6H2.5a.5.5 0 010-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 01.705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 015.5 9a.54.54 0 01-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6zm1.296 4H13.5a.5.5 0 010 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0110.5 14a.532.532 0 01-.38-.153l-3-3.063a.397.397 0 010-.568l3-3.063a.551.551 0 01.705-.047c.21.156.235.433.055.616L8.648 10z"}))},t0t=e0t;var uw={};$(uw,{icon:()=>a0t});var rpr=E(D());var r0t=["title","titleId"];function PU(){return PU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i0t=function(t){var n=t.title,r=t.titleId,o=n0t(t,r0t);return a("svg",PU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.146 14.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4zM6.5 8A1.5 1.5 0 018 9.5v3a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 010-1h3zm2-5a.5.5 0 01.5.5v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 018 6.5v-3a.5.5 0 01.5-.5zm1.651 2.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4z"}))},a0t=i0t;var cw={};$(cw,{icon:()=>p0t});var opr=E(D());var l0t=["title","titleId"];function kU(){return kU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c0t=function(t){var n=t.title,r=t.titleId,o=s0t(t,l0t);return a("svg",kU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},p0t=c0t;var pw={};$(pw,{icon:()=>g0t});var apr=E(D());var f0t=["title","titleId"];function CU(){return CU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h0t=function(t){var n=t.title,r=t.titleId,o=d0t(t,f0t);return a("svg",CU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882zM3.5 7h8a.5.5 0 110 1h-8a.5.5 0 010-1z"}))},g0t=h0t;var fw={};$(fw,{icon:()=>O0t});var spr=E(D());var v0t=["title","titleId"];function AU(){return AU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w0t=function(t){var n=t.title,r=t.titleId,o=y0t(t,v0t);return a("svg",AU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm-4 7a.5.5 0 000 1h8a.5.5 0 100-1h-8z"}))},O0t=w0t;var dw={};$(dw,{icon:()=>j0t});var cpr=E(D());var x0t=["title","titleId"];function MU(){return MU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I0t=function(t){var n=t.title,r=t.titleId,o=_0t(t,x0t);return a("svg",MU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 16v5h2.038a13.179 13.179 0 000 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 00-2 0V7h-5V5h5V0h2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1016.307 30h-3.251A11.955 11.955 0 0110 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z"}))},j0t=I0t;var mw={};$(mw,{icon:()=>A0t});var fpr=E(D());var E0t=["title","titleId"];function TU(){return TU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C0t=function(t){var n=t.title,r=t.titleId,o=P0t(t,E0t);return a("svg",TU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z"}))},A0t=C0t;var hw={};$(hw,{icon:()=>D0t});var mpr=E(D());var M0t=["title","titleId"];function RU(){return RU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z0t=function(t){var n=t.title,r=t.titleId,o=T0t(t,M0t);return a("svg",RU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 24a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zM4 26a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zm0 2a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0116 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0132 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 00-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 001.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 002 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 010 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 00-.582 1.92A13.965 13.965 0 0016 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 00-.582-1.92A15.964 15.964 0 0116 0z"}))},D0t=z0t;var gw={};$(gw,{icon:()=>B0t});var gpr=E(D());var L0t=["title","titleId"];function zU(){return zU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W0t=function(t){var n=t.title,r=t.titleId,o=N0t(t,L0t);return a("svg",zU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 100 16 8 8 0 000-16z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 11-1.437-1.243l2.578-3.151zm15.2 0l2.577 3.15a4 4 0 11-1.437 1.243l-2.706-3.306a12.032 12.032 0 001.565-1.087zM4 24a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z"}))},B0t=W0t;var vw={};$(vw,{icon:()=>$0t});var ypr=E(D());var H0t=["title","titleId"];function DU(){return DU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U0t=function(t){var n=t.title,r=t.titleId,o=V0t(t,H0t);return a("svg",DU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z"}))},$0t=U0t;var yw={};$(yw,{icon:()=>Y0t});var wpr=E(D());var J0t=["title","titleId"];function LU(){return LU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K0t=function(t){var n=t.title,r=t.titleId,o=G0t(t,J0t);return a("svg",LU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 110 16 8 8 0 010-16zm0 2a6 6 0 100 12 6 6 0 000-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 11-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 109.746-9.746z"}))},Y0t=K0t;var bw={};$(bw,{icon:()=>rmt});var xpr=E(D());var Q0t=["title","titleId"];function NU(){return NU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tmt=function(t){var n=t.title,r=t.titleId,o=Z0t(t,Q0t);return a("svg",NU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16 24a4 4 0 110 8 4 4 0 010-8zm12 0a4 4 0 110 8 4 4 0 010-8zm-12 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zm12 0a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM28 12a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM10 6a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5z"}))},rmt=tmt;var ww={};$(ww,{icon:()=>lmt});var Spr=E(D());var nmt=["title","titleId"];function FU(){return FU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var amt=function(t){var n=t.title,r=t.titleId,o=omt(t,nmt);return a("svg",FU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M24 0a8 8 0 11-4.906 14.32l-4.774 4.774a8 8 0 11-1.414-1.414l4.774-4.774A8 8 0 0124 0zM8 18a6 6 0 100 12 6 6 0 000-12zM24 2a6 6 0 100 12 6 6 0 000-12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z"}))},lmt=amt;var Ow={};$(Ow,{icon:()=>fmt});var jpr=E(D());var smt=["title","titleId"];function WU(){return WU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pmt=function(t){var n=t.title,r=t.titleId,o=umt(t,smt);return a("svg",WU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 2.5a.5.5 0 01.5-.5h3a.5.5 0 010 1h-3a.5.5 0 01-.5-.5z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 0A1.5 1.5 0 003 1.5v13A1.5 1.5 0 004.5 16h7a1.5 1.5 0 001.5-1.5v-13A1.5 1.5 0 0011.5 0h-7zM4 1.5a.5.5 0 01.5-.5h7a.5.5 0 01.5.5V4H4V1.5zM4 13v1.5a.5.5 0 00.5.5h7a.5.5 0 00.5-.5V13H4zm0-1h8V5H4v7z"}))},fmt=pmt;var xw={};$(xw,{icon:()=>vmt});var Ppr=E(D());var dmt=["title","titleId"];function BU(){return BU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gmt=function(t){var n=t.title,r=t.titleId,o=mmt(t,dmt);return a("svg",BU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 007.526-3.218c-2.794.177-5.27-.711-6.616-2.648z"}))},vmt=gmt;var _w={};$(_w,{icon:()=>xmt});var Cpr=E(D());var ymt=["title","titleId"];function HU(){return HU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Omt=function(t){var n=t.title,r=t.titleId,o=bmt(t,ymt);return a("svg",HU({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z"}))},xmt=Omt;var Sw={};$(Sw,{icon:()=>Emt});var Mpr=E(D());var _mt=["title","titleId"];function VU(){return VU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jmt=function(t){var n=t.title,r=t.titleId,o=Smt(t,_mt);return a("svg",VU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 1a.5.5 0 010 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 110 1H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 01-1.856 2l-.15.006H10.5a.5.5 0 01-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 01-.09-.992L10.5 1h2.494zM5 7a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2z"}))},Emt=jmt;var Iw={};$(Iw,{icon:()=>Mmt});var Rpr=E(D());var Pmt=["title","titleId"];function qU(){return qU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Amt=function(t){var n=t.title,r=t.titleId,o=kmt(t,Pmt);return a("svg",qU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 1.443a1 1 0 00-1 0L2.572 4.29a1 1 0 00-.5.866v5.69a1 1 0 00.5.866L7.5 14.557a1 1 0 001 0l4.928-2.846a1 1 0 00.5-.866v-5.69a1 1 0 00-.5-.866L8.5 1.443zM9 .577l4.928 2.846a2 2 0 011 1.732v5.69a2 2 0 01-1 1.732L9 15.423a2 2 0 01-2 0l-4.928-2.846a2 2 0 01-1-1.732v-5.69a2 2 0 011-1.732L7 .577a2 2 0 012 0z"}))},Mmt=Amt;var jw={};$(jw,{icon:()=>Lmt});var Dpr=E(D());var Tmt=["title","titleId"];function UU(){return UU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dmt=function(t){var n=t.title,r=t.titleId,o=Rmt(t,Tmt);return a("svg",UU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z",fillRule:"evenodd"}))},Lmt=Dmt;var Ew={};$(Ew,{icon:()=>Hmt});var Npr=E(D());var Nmt=["title","titleId"];function $U(){return $U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bmt=function(t){var n=t.title,r=t.titleId,o=Fmt(t,Nmt);return a("svg",$U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.517 12.271l1.254-1.254a1.5 1.5 0 11-1.254 1.254zm2.945-2.944l.74-.74c.361.208.694.467.987.772a.5.5 0 01-.721.693 3.424 3.424 0 00-1.006-.725zm2.162-2.163l.716-.715c.308.232.599.49.87.772a.5.5 0 11-.722.692 6.26 6.26 0 00-.864-.749zM7.061 6.07A6.198 6.198 0 003.54 7.885a.5.5 0 01-.717-.697 7.199 7.199 0 015.309-2.187l-1.07 1.07zm6.672-1.014l.71-.71c.274.23.536.476.786.736a.5.5 0 01-.721.692 9.1 9.1 0 00-.775-.718zm-3.807-1.85A9.06 9.06 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2c.944 0 1.868.131 2.75.382l-.824.824zM8 13a.5.5 0 100-1 .5.5 0 000 1zm-5.424 1a.5.5 0 01-.707-.707L14.146 1.146a.5.5 0 01.708.708L2.576 14z"}))},Hmt=Bmt;var Pw={};$(Pw,{icon:()=>Jmt});var Wpr=E(D());var Vmt=["title","titleId"];function JU(){return JU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Umt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $mt=function(t){var n=t.title,r=t.titleId,o=qmt(t,Vmt);return a("svg",JU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0-1a.5.5 0 100-1 .5.5 0 000 1zm3.189-3.64a.5.5 0 01-.721.692A3.408 3.408 0 008 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 01-.717-.697A4.408 4.408 0 018 8c1.22 0 2.361.497 3.189 1.36zm2.02-2.14a.5.5 0 11-.721.693A6.2 6.2 0 008 6a6.199 6.199 0 00-4.46 1.885.5.5 0 01-.718-.697A7.199 7.199 0 018 5a7.2 7.2 0 015.21 2.22zm2.02-2.138a.5.5 0 01-.721.692A8.99 8.99 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2a9.99 9.99 0 017.23 3.082z"}))},Jmt=$mt;var kw={};$(kw,{icon:()=>Qmt});var Hpr=E(D());var Gmt=["title","titleId"];function GU(){return GU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ymt=function(t){var n=t.title,r=t.titleId,o=Xmt(t,Gmt);return a("svg",GU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.447 3.724l-6-3a1 1 0 00-.894 0l-6 3A1 1 0 001 4.618v6.764a1 1 0 00.553.894l6 3a1 1 0 00.894 0l6-3a1 1 0 00.553-.894V4.618a1 1 0 00-.553-.894zM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943zM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039zM2 5.11l2.25 1.105V9a.5.5 0 001 0V6.706L7.5 7.811v6.321L2 11.382zm6.5 9.022v-6.32L14 5.11v6.272z"}))},Qmt=Ymt;var Cw={};$(Cw,{icon:()=>n1t});var qpr=E(D());var Zmt=["title","titleId"];function XU(){return XU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r1t=function(t){var n=t.title,r=t.titleId,o=e1t(t,Zmt);return a("svg",XU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 00-1 1v12a1 1 0 001 1h5a4.995 4.995 0 01-.584-1H3V2h7v2a1 1 0 001 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 00-.293-.707l-2-2A1 1 0 0011 1H3zm13 11a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},n1t=r1t;var Aw={};$(Aw,{icon:()=>s1t});var $pr=E(D());var o1t=["title","titleId"];function KU(){return KU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l1t=function(t){var n=t.title,r=t.titleId,o=i1t(t,o1t);return a("svg",KU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 011-1h8a1 1 0 01.707.293l2 2A1 1 0 0115 3v5a4.995 4.995 0 00-1-.584V4h-2a1 1 0 01-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 01-1-1V1zm5 14H2V2a1 1 0 00-1 1v12a1 1 0 001 1h7a5.029 5.029 0 01-1-1zm8-3a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},s1t=l1t;var Mw={};$(Mw,{icon:()=>d1t});var Gpr=E(D());var u1t=["title","titleId"];function YU(){return YU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f1t=function(t){var n=t.title,r=t.titleId,o=c1t(t,u1t);return a("svg",YU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658h1.262V1.005H4v4.653zm2.261 0h1.244V1.005H6.26v4.653zm2.244 0h1.235V1.005H8.504v4.653zm2.234 0h1.254V1.005h-1.254v4.653zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},d1t=f1t;var Tw={};$(Tw,{icon:()=>y1t});var Kpr=E(D());var m1t=["title","titleId"];function QU(){return QU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v1t=function(t){var n=t.title,r=t.titleId,o=h1t(t,m1t);return a("svg",QU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.84 2.019L3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 000-.703.53.53 0 00-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 01-.118-2.211l6.899-6.651a2.646 2.646 0 013.644 0 2.422 2.422 0 010 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 01.238-.252l5.78-5.572a.484.484 0 000-.703.53.53 0 00-.73 0l-5.78 5.572a4.36 4.36 0 000 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 000-4.92C13.534.66 11.25.66 9.841 2.019z"}))},y1t=v1t;var Rw={};$(Rw,{icon:()=>_1t});var Qpr=E(D());var b1t=["title","titleId"];function ZU(){return ZU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x1t=function(t){var n=t.title,r=t.titleId,o=w1t(t,b1t);return a("svg",ZU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.664 14.871a7 7 0 01-2.42-12.778.5.5 0 01.612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 01.063.618 7.002 7.002 0 01-7.235 3.098zm6.168-3.312a1961.733 1961.733 0 00-8.377-8.4 6 6 0 108.378 8.4zm2.095-2.548a.5.5 0 11-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 00-.034-1.714.5.5 0 11.987-.163c.108.655.122 1.326.04 1.999l-.021.155zm-1.273-5.138a.5.5 0 11-.808.59 6.026 6.026 0 00-1.304-1.308.5.5 0 01.59-.806 7.026 7.026 0 011.522 1.524zM9.169 1.098a.5.5 0 11-.166.986 6.105 6.105 0 00-1.849-.026.5.5 0 01-.14-.99 7.02 7.02 0 012.155.03z"}))},_1t=x1t;var zw={};$(zw,{icon:()=>P1t});var efr=E(D());var S1t=["title","titleId"];function e$(){return e$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E1t=function(t){var n=t.title,r=t.titleId,o=I1t(t,S1t);return a("svg",e$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm6 0a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1z"}))},P1t=E1t;var Dw={};$(Dw,{icon:()=>T1t});var rfr=E(D());var k1t=["title","titleId"];function t$(){return t$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M1t=function(t){var n=t.title,r=t.titleId,o=C1t(t,k1t);return a("svg",t$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.586 2.586A2 2 0 000 4h1a1 1 0 011-1V2a2 2 0 00-1.414.586zM2 2h10.5a.5.5 0 010 1H2V2zM0 4h1v6.5a.5.5 0 01-1 0V4zm2.586.586A2 2 0 002 6h1a1 1 0 011-1V4a2 2 0 00-1.414.586zm0 8.828A2 2 0 012 12h1a1 1 0 001 1v1a2 2 0 01-1.414-.586zm12.828-8.828A2 2 0 0116 6h-1a1 1 0 00-1-1V4a2 2 0 011.414.586zm0 8.828A2 2 0 0016 12h-1a1 1 0 01-1 1v1a2 2 0 001.414-.586zM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 010 1H7.496a.5.5 0 010-1H9.5zm4 0a.5.5 0 010 1h-2.004a.5.5 0 010-1H13.5z"}))},T1t=M1t;var Lw={};$(Lw,{icon:()=>N1t});var ofr=E(D());var R1t=["title","titleId"];function r$(){return r$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L1t=function(t){var n=t.title,r=t.titleId,o=z1t(t,R1t);return a("svg",r$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 01-.708 0 .502.502 0 010-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 010 1.414l-9 9A.997.997 0 015 15H2a1 1 0 01-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0111 1zM5 14H2v-3l3 3z"}))},N1t=L1t;var Nw={};$(Nw,{icon:()=>V1t});var afr=E(D());var F1t=["title","titleId"];function n$(){return n$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H1t=function(t){var n=t.title,r=t.titleId,o=W1t(t,F1t);return a("svg",n$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),a("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),a("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},V1t=H1t;var Fw={};$(Fw,{icon:()=>G1t});var sfr=E(D());var q1t=["title","titleId"];function o$(){return o$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J1t=function(t){var n=t.title,r=t.titleId,o=U1t(t,q1t);return a("svg",o$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 100-1h-10a.5.5 0 000 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM4 4h1v6H4V4zm6 0h1v6h-1V4zM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1z"}))},G1t=J1t;var Ww={};$(Ww,{icon:()=>Z1t});var cfr=E(D());var X1t=["title","titleId"];function i$(){return i$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q1t=function(t){var n=t.title,r=t.titleId,o=K1t(t,X1t);return a("svg",i$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 11h4.5a.5.5 0 100-1h-10a.5.5 0 100 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM5 4h7v6H5V4zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1z"}))},Z1t=Q1t;var Bw={};$(Bw,{icon:()=>oht});var ffr=E(D());var eht=["title","titleId"];function a$(){return a$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nht=function(t){var n=t.title,r=t.titleId,o=tht(t,eht);return a("svg",a$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 000-.711l-7.2-4.583zm.538-.844l7.2 4.583a1.426 1.426 0 010 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22z"}))},oht=nht;var Hw={};$(Hw,{icon:()=>uht});var mfr=E(D());var iht=["title","titleId"];function l$(){return l$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sht=function(t){var n=t.title,r=t.titleId,o=aht(t,iht);return a("svg",l$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.345 6.801l-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 000-2.398z"}))},uht=sht;var Vw={};$(Vw,{icon:()=>mht});var gfr=E(D());var cht=["title","titleId"];function s$(){return s$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dht=function(t){var n=t.title,r=t.titleId,o=pht(t,cht);return a("svg",s$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.25 3a.5.5 0 01.5.5v3.75h3.75a.5.5 0 01.5.5v.5a.5.5 0 01-.5.5H8.75v3.75a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5V8.75H3.5a.5.5 0 01-.5-.5v-.5a.5.5 0 01.5-.5h3.75V3.5a.5.5 0 01.5-.5h.5z"}))},mht=dht;var qw={};$(qw,{icon:()=>bht});var yfr=E(D());var hht=["title","titleId"];function u$(){return u$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yht=function(t){var n=t.title,r=t.titleId,o=ght(t,hht);return a("svg",u$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 110 1H8v3.5a.5.5 0 11-1 0V8H3.5a.5.5 0 010-1H7V3.5a.5.5 0 011 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882z"}))},bht=yht;var Uw={};$(Uw,{icon:()=>Sht});var wfr=E(D());var wht=["title","titleId"];function c$(){return c$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ht=function(t){var n=t.title,r=t.titleId,o=Oht(t,wht);return a("svg",c$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 7V3.5a.5.5 0 00-1 0V7H3.5a.5.5 0 000 1H7v3.5a.5.5 0 101 0V8h3.5a.5.5 0 100-1H8zm-.5 8a7.5 7.5 0 110-15 7.5 7.5 0 010 15z"}))},Sht=_ht;var $w={};$($w,{icon:()=>kht});var xfr=E(D());var Iht=["title","titleId"];function p$(){return p$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pht=function(t){var n=t.title,r=t.titleId,o=jht(t,Iht);return a("svg",p$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 8.5a.5.5 0 111 0V12a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h3.5a.5.5 0 010 1H4a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8.5zm-5.12.339a.5.5 0 11-.706-.707L13.305 2H10.5a.5.5 0 110-1H14a1 1 0 011 1v3.5a.5.5 0 11-1 0V2.72L7.88 8.838z"}))},kht=Pht;var Jw={};$(Jw,{icon:()=>Rht});var Sfr=E(D());var Cht=["title","titleId"];function f$(){return f$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tht=function(t){var n=t.title,r=t.titleId,o=Aht(t,Cht);return a("svg",f$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.171 5.15L10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 000 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 000-2.31L9 4.38a.617.617 0 00-.829 0 .52.52 0 000 .77z"}),a("path",{d:"M6.804 12.792A.993.993 0 016 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0015 13.016V1.984A2 2 0 0012.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0114 1.991v11.018a.995.995 0 01-1.196.972l-6-1.19z"}))},Rht=Tht;var Gw={};$(Gw,{icon:()=>Fht});var jfr=E(D());var zht=["title","titleId"];function d$(){return d$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nht=function(t){var n=t.title,r=t.titleId,o=Dht(t,zht);return a("svg",d$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 118 2a6 6 0 010 12zm0-1A5 5 0 108 3a5 5 0 000 10zm-.186-1.065A.785.785 0 017 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815zM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105z"}))},Fht=Nht;var Xw={};$(Xw,{icon:()=>qht});var Pfr=E(D());var Wht=["title","titleId"];function m$(){return m$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vht=function(t){var n=t.title,r=t.titleId,o=Bht(t,Wht);return a("svg",m$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.848 2.47a1 1 0 01-.318 1.378A7.284 7.284 0 003.75 7.01 3 3 0 111 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318zm7 0a1 1 0 01-.318 1.378 7.283 7.283 0 00-2.78 3.162A3 3 0 118 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318z"}))},qht=Vht;var Kw={};$(Kw,{icon:()=>Xht});var Cfr=E(D());var Uht=["title","titleId"];function h$(){return h$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ght=function(t){var n=t.title,r=t.titleId,o=$ht(t,Uht);return a("svg",h$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.228 2.942a.5.5 0 11-.538.842A5 5 0 1013 8a.5.5 0 111 0 6 6 0 11-2.772-5.058zM14 1.5v3A1.5 1.5 0 0112.5 6h-3a.5.5 0 010-1h3a.5.5 0 00.5-.5v-3a.5.5 0 111 0z"}))},Xht=Ght;var Yw={};$(Yw,{icon:()=>egt});var Mfr=E(D());var Kht=["title","titleId"];function g$(){return g$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zht=function(t){var n=t.title,r=t.titleId,o=Yht(t,Kht);return a("svg",g$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.684.895L6.074.358a1 1 0 00-1.296.753L4.2 4H2.5a.5.5 0 000 1h1.626a4.007 4.007 0 00.11 2.359l-2.072-.345A1 1 0 001 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 011 13v1a1 1 0 00.836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0015 14v-1a1.99 1.99 0 01-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0115 9V8a1 1 0 00-1.164-.986l-2.073.345A3.991 3.991 0 0011.874 5H13.5a.5.5 0 000-1h-1.7l-.578-2.89A1 1 0 009.925.359L8.316.895a1 1 0 01-.632 0zm2.88 6.664A3.013 3.013 0 0010.83 5H5.17a3.013 3.013 0 00.266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 100-2 1 1 0 000 2zm14 0a1 1 0 100-2 1 1 0 000 2z"}))},egt=Zht;var Qw={};$(Qw,{icon:()=>igt});var Rfr=E(D());var tgt=["title","titleId"];function v$(){return v$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ogt=function(t){var n=t.title,r=t.titleId,o=rgt(t,tgt);return a("svg",v$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 01-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 010 .77.616.616 0 01-.829 0l-2.05-1.95a1.551 1.551 0 010-2.31l2.05-1.95a.617.617 0 01.83 0 .52.52 0 010 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 01-.09-.992L9.5 4h2.494z"}))},igt=ogt;var Zw={};$(Zw,{icon:()=>cgt});var Dfr=E(D());var agt=["title","titleId"];function y$(){return y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ugt=function(t){var n=t.title,r=t.titleId,o=lgt(t,agt);return a("svg",y$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 00-.141-.147L11.73 2.145a2.654 2.654 0 00-.147-.141A2.654 2.654 0 0011.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 01.273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 01.113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 01.378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 009.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 110-4 2 2 0 010 4zm0-1a1 1 0 100-2 1 1 0 000 2z"}))},cgt=ugt;var eO={};$(eO,{icon:()=>hgt});var Nfr=E(D());var pgt=["title","titleId"];function b$(){return b$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mgt=function(t){var n=t.title,r=t.titleId,o=fgt(t,pgt);return a("svg",b$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm4-2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-1a.5.5 0 110-1 .5.5 0 010 1zm0-3a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm0 2a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-2a.5.5 0 110 1 .5.5 0 010-1zm6-6a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1z"}))},hgt=mgt;var tO={};$(tO,{icon:()=>wgt});var Wfr=E(D());var ggt=["title","titleId"];function w$(){return w$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ygt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bgt=function(t){var n=t.title,r=t.titleId,o=vgt(t,ggt);return a("svg",w$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.271 11.978l3.872 3.873a.502.502 0 00.708 0 .502.502 0 000-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 004.949 2.05.5.5 0 000-1 5.96 5.96 0 01-4.242-1.757 6.01 6.01 0 010-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 010 8.486.5.5 0 00.034.738z"}))},wgt=bgt;var rO={};$(rO,{icon:()=>Igt});var Hfr=E(D());var Ogt=["title","titleId"];function O$(){return O$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sgt=function(t){var n=t.title,r=t.titleId,o=xgt(t,Ogt);return a("svg",O$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 10.707.707l-2.46 2.46-1.156 1.156a1 1 0 11-.707-.707l.757-.757a2 2 0 00-2.43 3.137.5.5 0 11-.707.707 3 3 0 013.86-4.567l.714-.714A4 4 0 108 12a.5.5 0 110 1 5 5 0 113.164-8.871l.71-.71zm.709-.709a7 7 0 10.707.707l.366-.366a.5.5 0 10-.707-.707l-.366.366z"}))},Igt=Sgt;var nO={};$(nO,{icon:()=>Cgt});var qfr=E(D());var jgt=["title","titleId"];function x$(){return x$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kgt=function(t){var n=t.title,r=t.titleId,o=Egt(t,jgt);return a("svg",x$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 00-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.027 5.027 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Cgt=kgt;var oO={};$(oO,{icon:()=>zgt});var $fr=E(D());var Agt=["title","titleId"];function _$(){return _$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rgt=function(t){var n=t.title,r=t.titleId,o=Mgt(t,Agt);return a("svg",_$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 10-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.028 5.028 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .707l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.707l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},zgt=Rgt;var iO={};$(iO,{icon:()=>Wgt});var Gfr=E(D());var Dgt=["title","titleId"];function S$(){return S$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fgt=function(t){var n=t.title,r=t.titleId,o=Lgt(t,Dgt);return a("svg",S$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),a("path",{fillRule:"evenodd",d:"M1 3a1 1 0 011-1h12a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},Wgt=Fgt;var aO={};$(aO,{icon:()=>Ugt});var Kfr=E(D());var Bgt=["title","titleId"];function I$(){return I$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qgt=function(t){var n=t.title,r=t.titleId,o=Hgt(t,Bgt);return a("svg",I$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.134 7.031L8 12.764l2.866-5.733L8 2.016 5.134 7.03zM8 0l4 7-4 8-4-8 4-7z"}))},Ugt=qgt;var lO={};$(lO,{icon:()=>Kgt});var Qfr=E(D());var $gt=["title","titleId"];function j$(){return j$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ggt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xgt=function(t){var n=t.title,r=t.titleId,o=Jgt(t,$gt);return a("svg",j$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9zM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6zm1.997-3.552A.506.506 0 018 1.5v8a.5.5 0 01-1 0v-8a.51.51 0 010-.017L5.18 3.394a.52.52 0 01-.77 0 .617.617 0 010-.829L6.36.515a1.552 1.552 0 012.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 01-.77 0L7.997 1.447z"}))},Kgt=Xgt;var sO={};$(sO,{icon:()=>tvt});var edr=E(D());var Ygt=["title","titleId"];function E$(){return E$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var evt=function(t){var n=t.title,r=t.titleId,o=Qgt(t,Ygt);return a("svg",E$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 011 0v2.024a.999.999 0 00.268-.227l1.027-1.233a.5.5 0 01.769.64L8.275 3.86a.999.999 0 01-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 11.938.345l-.554 1.506a.998.998 0 00-.062.346l1.753-1.012a.5.5 0 11.5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 11-.17.986l-2.764-.478a1 1 0 01-.33-.12L8.506 7.5l2.207 1.274a1 1 0 01.33-.119l2.764-.478a.5.5 0 11.17.986l-1.582.273a.999.999 0 00-.33.12l1.753 1.011a.5.5 0 11-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 01-.938.345l-.968-2.632a.999.999 0 01-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 01-.769.64l-1.027-1.233a.999.999 0 00-.268-.226V14.5a.5.5 0 01-1 0v-2.024a.999.999 0 00-.269.227l-1.027 1.233a.5.5 0 01-.768-.64l1.795-2.155a.999.999 0 01.269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 11-.938-.345l.554-1.506a1 1 0 00.062-.346l-1.753 1.012a.5.5 0 01-.5-.866l1.753-1.012a.999.999 0 00-.33-.119l-1.582-.273a.5.5 0 01.17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 01-.33.119l-2.765.478a.5.5 0 11-.17-.986l1.582-.273a.999.999 0 00.33-.12L1.194 4.434a.5.5 0 11.5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 11.938-.345l.969 2.632a.999.999 0 01.062.346l2.207 1.274V4.086a1 1 0 01-.269-.227L4.943 1.704a.5.5 0 01.768-.64l1.027 1.233c.079.094.17.17.269.227V.5z"}))},tvt=evt;var uO={};$(uO,{icon:()=>avt});var rdr=E(D());var rvt=["title","titleId"];function P$(){return P$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ovt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ivt=function(t){var n=t.title,r=t.titleId,o=nvt(t,rvt);return a("svg",P$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 01-.707.707L3.454 8.561a1.494 1.494 0 01-.433-.925.454.454 0 010-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 11.707.707L4.308 7z",fillRule:"evenodd"}))},avt=ivt;var cO={};$(cO,{icon:()=>pvt});var odr=E(D());var lvt=["title","titleId"];function k$(){return k$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cvt=function(t){var n=t.title,r=t.titleId,o=svt(t,lvt);return a("svg",k$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 00.707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 000-.272 1.494 1.494 0 00-.433-.925L8.303 2.197a.5.5 0 10-.707.707L11.692 7z"}))},pvt=cvt;var pO={};$(pO,{icon:()=>gvt});var adr=E(D());var fvt=["title","titleId"];function C$(){return C$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hvt=function(t){var n=t.title,r=t.titleId,o=dvt(t,fvt);return a("svg",C$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 01.707.707l-4.242 4.243a1.494 1.494 0 01-.925.433.454.454 0 01-.272 0 1.494 1.494 0 01-.925-.433L2.197 8.303a.5.5 0 11.707-.707L7 11.692z"}))},gvt=hvt;var fO={};$(fO,{icon:()=>Ovt});var sdr=E(D());var vvt=["title","titleId"];function A$(){return A$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wvt=function(t){var n=t.title,r=t.titleId,o=yvt(t,vvt);return a("svg",A$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 01-.707-.707l4.242-4.242a1.5 1.5 0 012.122 0l4.242 4.242a.5.5 0 11-.707.707L8 4.207z"}))},Ovt=wvt;var dO={};$(dO,{icon:()=>jvt});var cdr=E(D());var xvt=["title","titleId"];function M$(){return M$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Svt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ivt=function(t){var n=t.title,r=t.titleId,o=_vt(t,xvt);return a("svg",M$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 01-.708-.707l3.536-3.535a1.5 1.5 0 012.121 0l3.536 3.535a.5.5 0 01-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 01.707.707l-3.536 3.536a1.5 1.5 0 01-2.121 0l-3.536-3.536a.5.5 0 01.708-.707L7 12.786z"}))},jvt=Ivt;var mO={};$(mO,{icon:()=>Avt});var fdr=E(D());var Evt=["title","titleId"];function T$(){return T$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cvt=function(t){var n=t.title,r=t.titleId,o=Pvt(t,Evt);return a("svg",T$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3z"}))},Avt=Cvt;var hO={};$(hO,{icon:()=>Dvt});var mdr=E(D());var Mvt=["title","titleId"];function R$(){return R$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zvt=function(t){var n=t.title,r=t.titleId,o=Tvt(t,Mvt);return a("svg",R$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},Dvt=zvt;var gO={};$(gO,{icon:()=>Bvt});var gdr=E(D());var Lvt=["title","titleId"];function z$(){return z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wvt=function(t){var n=t.title,r=t.titleId,o=Nvt(t,Lvt);return a("svg",z$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},Bvt=Wvt;var vO={};$(vO,{icon:()=>$vt});var ydr=E(D());var Hvt=["title","titleId"];function D$(){return D$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uvt=function(t){var n=t.title,r=t.titleId,o=Vvt(t,Hvt);return a("svg",D$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},$vt=Uvt;var yO={};$(yO,{icon:()=>Yvt});var wdr=E(D());var Jvt=["title","titleId"];function L$(){return L$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kvt=function(t){var n=t.title,r=t.titleId,o=Gvt(t,Jvt);return a("svg",L$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2"}))},Yvt=Kvt;var bO={};$(bO,{icon:()=>ryt});var xdr=E(D());var Qvt=["title","titleId"];function N$(){return N$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tyt=function(t){var n=t.title,r=t.titleId,o=Zvt(t,Qvt);return a("svg",N$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},ryt=tyt;var wO={};$(wO,{icon:()=>lyt});var Sdr=E(D());var nyt=["title","titleId"];function F$(){return F$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ayt=function(t){var n=t.title,r=t.titleId,o=oyt(t,nyt);return a("svg",F$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3zm10 7v1h-5v-1h5z"}))},lyt=ayt;var OO={};$(OO,{icon:()=>fyt});var jdr=E(D());var syt=["title","titleId"];function W$(){return W$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pyt=function(t){var n=t.title,r=t.titleId,o=uyt(t,syt);return a("svg",W$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 01.792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 019.136 14a.862.862 0 01-.429-.116L6 12.342l-2.707 1.542a.862.862 0 01-.43.116.877.877 0 01-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 016 2zm10 8v1h-5v-1h5z"}))},fyt=pyt;var xO={};$(xO,{icon:()=>vyt});var Pdr=E(D());var dyt=["title","titleId"];function B$(){return B$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gyt=function(t){var n=t.title,r=t.titleId,o=myt(t,dyt);return a("svg",B$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 01-1 1H2a1 1 0 01-1-1v-2h1v2h6zm4.853-10.146l-2.999 3a1.5 1.5 0 01-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 11-.316-.948L7 7.473a1.5 1.5 0 012.146-1.327l3-3a1.5 1.5 0 11.707.707z"}))},vyt=gyt;var _O={};$(_O,{icon:()=>xyt});var Cdr=E(D());var yyt=["title","titleId"];function H$(){return H$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oyt=function(t){var n=t.title,r=t.titleId,o=byt(t,yyt);return a("svg",H$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2zm0 1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4z",fillRule:"evenodd"}))},xyt=Oyt;var SO={};$(SO,{icon:()=>Eyt});var Mdr=E(D());var _yt=["title","titleId"];function V$(){return V$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jyt=function(t){var n=t.title,r=t.titleId,o=Syt(t,_yt);return a("svg",V$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:12,height:12,x:2,y:2,rx:2,fillRule:"evenodd"}))},Eyt=jyt;var IO={};$(IO,{icon:()=>Myt});var Rdr=E(D());var Pyt=["title","titleId"];function q$(){return q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ayt=function(t){var n=t.title,r=t.titleId,o=kyt(t,Pyt);return a("svg",q$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.259 3.034A1.001 1.001 0 0012 3H4a1 1 0 00-1 1v8c0 .09.012.176.034.259l9.225-9.225zm.707.707l-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 001-1V4c0-.09-.012-.176-.034-.259zM4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2z"}))},Myt=Ayt;var jO={};$(jO,{icon:()=>Lyt});var Ddr=E(D());var Tyt=["title","titleId"];function U$(){return U$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dyt=function(t){var n=t.title,r=t.titleId,o=Ryt(t,Tyt);return a("svg",U$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd",transform:"translate(0 2)"},a("path",{fillRule:"nonzero",d:"M2 6a1 1 0 01-1-1V2a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-1 1H2zm13 2v3a1 1 0 01-1 1H2a1 1 0 01-1-1V8a1 1 0 011-1h12a1 1 0 011 1zm1-3V2a2 2 0 00-2-2H2a2 2 0 00-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 002 2h12a2 2 0 002-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5z"}),a("circle",{cx:4.5,cy:9.5,r:1.5}),a("circle",{cx:4.5,cy:3.5,r:1.5}),a("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},Lyt=Dyt;var EO={};$(EO,{icon:()=>Hyt});var Ndr=E(D());var Nyt=["title","titleId"];function $$(){return $$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Byt=function(t){var n=t.title,r=t.titleId,o=Fyt(t,Nyt);return a("svg",$$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.297 3L8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 01-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},Hyt=Byt;var PO={};$(PO,{icon:()=>Jyt});var Wdr=E(D());var Vyt=["title","titleId"];function J$(){return J$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $yt=function(t){var n=t.title,r=t.titleId,o=qyt(t,Vyt);return a("svg",J$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 011-1h5a1 1 0 011 1v1h4V4H7c-.621 0-1-.379-1-1V2zm10 6v6a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 011 1v4zm-1 1h-4a1 1 0 01-1-1V7H5v7h10V9zM2 4.5a.5.5 0 01.5-.5h2a.5.5 0 010 1h-2a.5.5 0 01-.5-.5zM6.5 9a.5.5 0 000 1h2a.5.5 0 000-1h-2z"}))},Jyt=$yt;var kO={};$(kO,{icon:()=>Qyt});var Hdr=E(D());var Gyt=["title","titleId"];function G$(){return G$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yyt=function(t){var n=t.title,r=t.titleId,o=Xyt(t,Gyt);return a("svg",G$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 8a4 4 0 11-8 0 4 4 0 018 0zM7.25.75a.75.75 0 011.5 0v1.5a.75.75 0 11-1.5 0V.75zm0 13a.75.75 0 011.5 0v1.5a.75.75 0 01-1.5 0v-1.5zm5.346-11.407a.75.75 0 011.06 1.06l-1.06 1.061a.75.75 0 01-1.06-1.06l1.06-1.06zm-9.192 9.193a.75.75 0 111.06 1.06l-1.06 1.06a.75.75 0 01-1.06-1.06l1.06-1.06zM.75 8.75a.75.75 0 010-1.5h1.5a.75.75 0 110 1.5H.75zm13 0a.75.75 0 010-1.5h1.5a.75.75 0 010 1.5h-1.5zM2.343 3.404a.75.75 0 111.06-1.06l1.061 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06zm9.193 9.192a.75.75 0 011.06-1.06l1.06 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06z"}))},Qyt=Yyt;var CO={};$(CO,{icon:()=>n2t});var qdr=E(D());var Zyt=["title","titleId"];function X$(){return X$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r2t=function(t){var n=t.title,r=t.titleId,o=e2t(t,Zyt);return a("svg",X$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{x:2,y:2,width:12,height:12,rx:3}),a("rect",{className:"euiSwatchInput__stroke",x:2.5,y:2.5,width:11,height:11,rx:2}))},n2t=r2t;var AO={};$(AO,{icon:()=>s2t});var $dr=E(D());var o2t=["title","titleId"];function K$(){return K$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l2t=function(t){var n=t.title,r=t.titleId,o=i2t(t,o2t);return a("svg",K$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.8 0H2a1 1 0 00-1 1v8l1-1V1h8v3.5a.5.5 0 00.5.5H14v10H2v-1a3.5 3.5 0 013.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 001 14v1a1 1 0 001 1h12a1 1 0 001-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0010.8 0z"}))},s2t=l2t;var MO={};$(MO,{icon:()=>d2t});var Gdr=E(D());var u2t=["title","titleId"];function Y$(){return Y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f2t=function(t){var n=t.title,r=t.titleId,o=c2t(t,u2t);return a("svg",Y$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},d2t=f2t;var TO={};$(TO,{icon:()=>y2t});var Kdr=E(D());var m2t=["title","titleId"];function Q$(){return Q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v2t=function(t){var n=t.title,r=t.titleId,o=h2t(t,m2t);return a("svg",Q$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.496 7a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428zM4.496 5a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428zM4.496 9a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm9-6a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0-2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 4a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428z"}))},y2t=v2t;var RO={};$(RO,{icon:()=>_2t});var Qdr=E(D());var b2t=["title","titleId"];function Z$(){return Z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x2t=function(t){var n=t.title,r=t.titleId,o=w2t(t,b2t);return a("svg",Z$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 7a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 4a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},_2t=x2t;var zO={};$(zO,{icon:()=>P2t});var e0r=E(D());var S2t=["title","titleId"];function eJ(){return eJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E2t=function(t){var n=t.title,r=t.titleId,o=I2t(t,S2t);return a("svg",eJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428zM4.5 9a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zM4.5 12a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9-6a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428z"}))},P2t=E2t;var DO={};$(DO,{icon:()=>T2t});var r0r=E(D());var k2t=["title","titleId"];function tJ(){return tJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M2t=function(t){var n=t.title,r=t.titleId,o=C2t(t,k2t);return a("svg",tJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.254 14.97L.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 010-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 01.273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 01-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 01-.535 0c-.176-.054-.324-.135-.639-.45zm1.106-.707l6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 00-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 00-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188zm4.972-10.607a2 2 0 11-2.828 2.828 2 2 0 012.828-2.828zm-.707.707a1 1 0 10-1.414 1.414 1 1 0 001.414-1.414zM6.807 11.28L4.686 9.159a.5.5 0 11.707-.707l2.121 2.12a.5.5 0 11-.707.708zm1.414-1.414l-2.12-2.122a.5.5 0 11.706-.707L8.928 9.16a.5.5 0 11-.707.707z"}))},T2t=M2t;var LO={};$(LO,{icon:()=>N2t});var o0r=E(D());var R2t=["title","titleId"];function rJ(){return rJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L2t=function(t){var n=t.title,r=t.titleId,o=z2t(t,R2t);return a("svg",rJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.553 1.776a.5.5 0 01.894 0l4 8a.5.5 0 01.053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 01-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 01-.506-1.512 4.672 4.672 0 01-.084-.705.5.5 0 01.053-.235l4-8zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987z"}))},N2t=L2t;var NO={};$(NO,{icon:()=>V2t});var a0r=E(D());var F2t=["title","titleId"];function nJ(){return nJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H2t=function(t){var n=t.title,r=t.titleId,o=W2t(t,F2t);return a("svg",nJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 15a3.5 3.5 0 01-1.75-6.532L7 8.324V2.5A1.496 1.496 0 019.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 018.5 15M11 7.758V2.5a2.5 2.5 0 10-5 0v5.258a4.5 4.5 0 105 0"}),a("path",{d:"M8.5 9a2.5 2.5 0 110 5 2.5 2.5 0 010-5"}))},V2t=H2t;var FO={};$(FO,{icon:()=>G2t});var s0r=E(D());var q2t=["title","titleId"];function oJ(){return oJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J2t=function(t){var n=t.title,r=t.titleId,o=U2t(t,q2t);return a("svg",oJ({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 01-5.572-5.75A5 5 0 003.04 9.31a.5.5 0 01-.966.259 6 6 0 015.672-7.553 4.5 4.5 0 116.117 6.313 6.002 6.002 0 01-7.803 5.409.5.5 0 11.303-.954 5.001 5.001 0 006.445-3.979zM11.859 5H13.5a.5.5 0 000-1H12V1.5a.5.5 0 00-1 0v3a.5.5 0 00.5.5h.36z"}),a("path",{d:"M3.757 15.848l-.776-2.897a1.5 1.5 0 011.06-1.838l2.898-.776a.5.5 0 11.259.966l-2.898.776a.5.5 0 00-.353.613l.776 2.898a.5.5 0 01-.966.258z"}))},G2t=J2t;var WO={};$(WO,{icon:()=>Z2t});var c0r=E(D());var X2t=["title","titleId"];function iJ(){return iJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q2t=function(t){var n=t.title,r=t.titleId,o=K2t(t,X2t);return a("svg",iJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 001 0V4h1a1 1 0 001-1V1a1 1 0 00-1-1H6a1 1 0 00-1 1v2a1 1 0 001 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 111 0 .5.5 0 01-1 0zM2.5 9a1.5 1.5 0 01-1.415-1H.5a.5.5 0 010-1h.585a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h.585a.5.5 0 010 1h-.585a1.5 1.5 0 01-2.83 0h-2.17a1.5 1.5 0 01-2.83 0h-2.17A1.5 1.5 0 012.5 9zM13 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm-5 0a.5.5 0 10-1 0 .5.5 0 001 0zM2.5 10a.5.5 0 00-.5.5v.5H1a1 1 0 00-1 1v2a1 1 0 001 1h3a1 1 0 001-1v-2a1 1 0 00-1-1H3v-.5a.5.5 0 00-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 011 0v.5h1a1 1 0 011 1v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2a1 1 0 011-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},Z2t=Q2t;var BO={};$(BO,{icon:()=>obt});var f0r=E(D());var ebt=["title","titleId"];function aJ(){return aJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nbt=function(t){var n=t.title,r=t.titleId,o=tbt(t,ebt);return a("svg",aJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.923 8A5.93 5.93 0 008 2.077 5.93 5.93 0 002.077 8a5.93 5.93 0 006.296 5.912c.328-.021.625.227.625.556a.504.504 0 01-.458.511 7 7 0 116.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 01-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2l-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 000 1.076H8A.539.539 0 008.538 8V3.692a.539.539 0 00-1.076 0v3.77z",clipRule:"evenodd"}))},obt=nbt;var HO={};$(HO,{icon:()=>ubt});var m0r=E(D());var ibt=["title","titleId"];function lJ(){return lJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sbt=function(t){var n=t.title,r=t.titleId,o=abt(t,ibt);return a("svg",lJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 11-.707.707 1.5 1.5 0 00-2.122 0L4.125 9.782a1.5 1.5 0 102.121 2.121l1.145-1.144a.5.5 0 01.707.707L6.953 12.61a2.5 2.5 0 11-3.535-3.535l2.121-2.122a2.5 2.5 0 013.536 0zm3.535-3.535a2.5 2.5 0 010 3.535L10.49 9.075a2.5 2.5 0 01-3.536 0 .5.5 0 11.707-.708 1.5 1.5 0 002.122 0l2.121-2.12a1.5 1.5 0 10-2.121-2.122L8.637 5.269a.5.5 0 11-.707-.707l1.145-1.144a2.5 2.5 0 013.535 0z"}))},ubt=sbt;var VO={};$(VO,{icon:()=>mbt});var g0r=E(D());var cbt=["title","titleId"];function sJ(){return sJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dbt=function(t){var n=t.title,r=t.titleId,o=pbt(t,cbt);return a("svg",sJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72zM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23z"}))},mbt=dbt;var qO={};$(qO,{icon:()=>bbt});var y0r=E(D());var hbt=["title","titleId"];function uJ(){return uJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ybt=function(t){var n=t.title,r=t.titleId,o=gbt(t,hbt);return a("svg",uJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714z"}))},bbt=ybt;var UO={};$(UO,{icon:()=>Sbt});var w0r=E(D());var wbt=["title","titleId"];function cJ(){return cJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _bt=function(t){var n=t.title,r=t.titleId,o=Obt(t,wbt);return a("svg",cJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4zM8.5 5.5h-3v5h3v-5z"}))},Sbt=_bt;var $O={};$($O,{icon:()=>kbt});var x0r=E(D());var Ibt=["title","titleId"];function pJ(){return pJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pbt=function(t){var n=t.title,r=t.titleId,o=jbt(t,Ibt);return a("svg",pJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 13A5 5 0 118 3a5 5 0 010 10zm-2.828-2.172a4 4 0 015.656-5.656c.004.013-5.645 5.674-5.656 5.656z"}))},kbt=Pbt;var JO={};$(JO,{icon:()=>Rbt});var S0r=E(D());var Cbt=["title","titleId"];function fJ(){return fJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tbt=function(t){var n=t.title,r=t.titleId,o=Abt(t,Cbt);return a("svg",fJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027z"}))},Rbt=Tbt;var GO={};$(GO,{icon:()=>Fbt});var j0r=E(D());var zbt=["title","titleId"];function dJ(){return dJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nbt=function(t){var n=t.title,r=t.titleId,o=Dbt(t,zbt);return a("svg",dJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 4a1 1 0 011-1h8a1 1 0 011 1v5.996a1 1 0 01-1 1h-1.661L7.4 13.2A.25.25 0 017 13v-2.004H4a1 1 0 01-1-1V4zm1.5 1a.5.5 0 01.5-.5h6a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-.9L8 11V9.5H5a.5.5 0 01-.5-.5V5z",clipRule:"evenodd"}),a("path",{d:"M6.75 6a1 1 0 100 2 1 1 0 000-2zm2.5 0a1 1 0 100 2 1 1 0 000-2z"}))},Fbt=Nbt;var XO={};$(XO,{icon:()=>qbt});var P0r=E(D());var Wbt=["title","titleId"];function mJ(){return mJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vbt=function(t){var n=t.title,r=t.titleId,o=Bbt(t,Wbt);return a("svg",mJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.414 3.757l2.829 2.829a2 2 0 010 2.828l-2.829 2.829a2 2 0 01-2.828 0L3.757 9.414a2 2 0 010-2.828l2.829-2.829a2 2 0 012.828 0zm-1.747 2.91a1 1 0 00-1 1v.666a1 1 0 001 1h.666a1 1 0 001-1v-.666a1 1 0 00-1-1h-.666z"}))},qbt=Vbt;var KO={};$(KO,{icon:()=>Xbt});var C0r=E(D());var Ubt=["title","titleId"];function hJ(){return hJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gbt=function(t){var n=t.title,r=t.titleId,o=$bt(t,Ubt);return a("svg",hJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 01.412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 01.412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134zM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 10zM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 10zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 10zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 015 9c0-.245.183-.45.412-.492L5.5 8.5zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 8.5zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0110 9c0-.245.183-.45.412-.492L10.5 8.5zM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 7zM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 7zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 7zM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5z"}))},Xbt=Gbt;var YO={};$(YO,{icon:()=>e3t});var M0r=E(D());var Kbt=["title","titleId"];function gJ(){return gJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zbt=function(t){var n=t.title,r=t.titleId,o=Ybt(t,Kbt);return a("svg",gJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.154 12V4h2.713v1.14H5.658v5.72h1.21V12H4.153zm7.692-8v8H9.133v-1.14h1.209V5.14h-1.21V4h2.714z"}))},e3t=Zbt;var QO={};$(QO,{icon:()=>i3t});var R0r=E(D());var t3t=["title","titleId"];function vJ(){return vJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var o3t=function(t){var n=t.title,r=t.titleId,o=r3t(t,t3t);return a("svg",vJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.39 9.736l-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721zm2.777.94l-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677z"}))},i3t=o3t;var ZO={};$(ZO,{icon:()=>c3t});var D0r=E(D());var a3t=["title","titleId"];function yJ(){return yJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u3t=function(t){var n=t.title,r=t.titleId,o=l3t(t,a3t);return a("svg",yJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},c3t=u3t;var e7={};$(e7,{icon:()=>h3t});var N0r=E(D());var p3t=["title","titleId"];function bJ(){return bJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m3t=function(t){var n=t.title,r=t.titleId,o=f3t(t,p3t);return a("svg",bJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 00-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682zm.743-4.103a.138.138 0 010 .206L6.158 9.97a.133.133 0 01-.218-.103v-.934H2.873A.133.133 0 012.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 01.218-.103l2.267 1.867z"}))},h3t=m3t;var t7={};$(t7,{icon:()=>w3t});var W0r=E(D());var g3t=["title","titleId"];function wJ(){return wJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var b3t=function(t){var n=t.title,r=t.titleId,o=v3t(t,g3t);return a("svg",wJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 01-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 00-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 01.22-.07c.118 0 .197.061.238.185a.99.99 0 01.062.255 7.1 7.1 0 01-.573.467 4.93 4.93 0 01-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 01-.793-.688 2.626 2.626 0 01-.388-.933 4.949 4.949 0 01-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 019.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 00-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 00-.431-.22z"}))},w3t=b3t;var r7={};$(r7,{icon:()=>I3t});var H0r=E(D());var O3t=["title","titleId"];function OJ(){return OJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S3t=function(t){var n=t.title,r=t.titleId,o=x3t(t,O3t);return a("svg",OJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.461 7.31h3.055a.74.74 0 01.66 1.074l-2.141 4.211a.74.74 0 11-1.319-.67L9.31 8.79H6.256a.74.74 0 01-.66-1.075l2.19-4.31a.74.74 0 011.319.67L7.461 7.31z"}))},I3t=S3t;var n7={};$(n7,{icon:()=>C3t});var q0r=E(D());var j3t=["title","titleId"];function xJ(){return xJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k3t=function(t){var n=t.title,r=t.titleId,o=E3t(t,j3t);return a("svg",xJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},C3t=k3t;var o7={};$(o7,{icon:()=>z3t});var $0r=E(D());var A3t=["title","titleId"];function _J(){return _J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var R3t=function(t){var n=t.title,r=t.titleId,o=M3t(t,A3t);return a("svg",_J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.867 2.667H4a.667.667 0 00-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 00.667-.666V5.619a.669.669 0 00-.183-.459l-2.133-2.285a.668.668 0 00-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333z"}))},z3t=R3t;var i7={};$(i7,{icon:()=>W3t});var G0r=E(D());var D3t=["title","titleId"];function SJ(){return SJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F3t=function(t){var n=t.title,r=t.titleId,o=L3t(t,D3t);return a("svg",SJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.25 3a.25.25 0 00-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25v-2a.25.25 0 00-.25-.25h-9.5zm0 3.75A.25.25 0 003 7v2c0 .138.112.25.25.25H5.5A.25.25 0 005.75 9V7a.25.25 0 00-.25-.25H3.25zm-.25 4a.25.25 0 01.25-.25H5.5a.25.25 0 01.25.25v2a.25.25 0 01-.25.25H3.25a.25.25 0 01-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 01.19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 01-.19-.025L6.31 10.023z"}))},W3t=F3t;var a7={};$(a7,{icon:()=>U3t});var K0r=E(D());var B3t=["title","titleId"];function IJ(){return IJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q3t=function(t){var n=t.title,r=t.titleId,o=H3t(t,B3t);return a("svg",IJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 00-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15z"}))},U3t=q3t;var l7={};$(l7,{icon:()=>K3t});var Q0r=E(D());var $3t=["title","titleId"];function jJ(){return jJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var X3t=function(t){var n=t.title,r=t.titleId,o=J3t(t,$3t);return a("svg",jJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 01-.999 3H12a4.992 4.992 0 01-4 2 4.992 4.992 0 01-4-1.999V11a5 5 0 014-8zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1zM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 016 11.001zm4.645.001H10a5.51 5.51 0 01-.269.606c.333-.16.64-.364.914-.606zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 01-.196-1.5zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5zm2.482 0h-1.481a9.186 9.186 0 01-.196 1.5h1.172c.262-.452.437-.96.505-1.5zM5.708 6L4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 015.708 6zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 00-.21-1.5zM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 00-.504-1.5zM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 01.269-.607zM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4zm1.73.393l.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 00-.915-.607z"}))},K3t=X3t;var s7={};$(s7,{icon:()=>t5t});var emr=E(D());var Y3t=["title","titleId"];function EJ(){return EJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e5t=function(t){var n=t.title,r=t.titleId,o=Q3t(t,Y3t);return a("svg",EJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},t5t=e5t;var u7={};$(u7,{icon:()=>a5t});var rmr=E(D());var r5t=["title","titleId"];function PJ(){return PJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i5t=function(t){var n=t.title,r=t.titleId,o=n5t(t,r5t);return a("svg",PJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11 3a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h6zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},a5t=i5t;var c7={};$(c7,{icon:()=>p5t});var omr=E(D());var l5t=["title","titleId"];function kJ(){return kJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c5t=function(t){var n=t.title,r=t.titleId,o=s5t(t,l5t);return a("svg",kJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306z"}))},p5t=c5t;var p7={};$(p7,{icon:()=>g5t});var amr=E(D());var f5t=["title","titleId"];function CJ(){return CJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h5t=function(t){var n=t.title,r=t.titleId,o=d5t(t,f5t);return a("svg",CJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 100 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 010-4.988V4.5h-4zM13 4a1 1 0 00-1-1H7a1 1 0 00-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 100 4.426c.17-.031.341.09.341.262V12a1 1 0 001 1h5a1 1 0 001-1V9.004a.16.16 0 00-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 110-1.662c.138.092.623.057.732-.068a.16.16 0 00.04-.105V4z"}))},g5t=h5t;var f7={};$(f7,{icon:()=>O5t});var smr=E(D());var v5t=["title","titleId"];function AJ(){return AJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w5t=function(t){var n=t.title,r=t.titleId,o=y5t(t,v5t);return a("svg",AJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 018.86 9.694l-.438.492a.437.437 0 01-.327.147h-.678v.73a.437.437 0 01-.438.437H6.25v.73a.437.437 0 01-.438.437H3.772a.437.437 0 01-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 013.047-4.214 3.202 3.202 0 013.209 3.209zm-3.209-.875a.875.875 0 101.75 0 .875.875 0 00-1.75 0z"}))},O5t=w5t;var d7={};$(d7,{icon:()=>j5t});var cmr=E(D());var x5t=["title","titleId"];function MJ(){return MJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I5t=function(t){var n=t.title,r=t.titleId,o=_5t(t,x5t);return a("svg",MJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},j5t=I5t;var m7={};$(m7,{icon:()=>A5t});var fmr=E(D());var E5t=["title","titleId"];function TJ(){return TJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C5t=function(t){var n=t.title,r=t.titleId,o=P5t(t,E5t);return a("svg",TJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333z"}))},A5t=C5t;var h7={};$(h7,{icon:()=>D5t});var mmr=E(D());var M5t=["title","titleId"];function RJ(){return RJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z5t=function(t){var n=t.title,r=t.titleId,o=T5t(t,M5t);return a("svg",RJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3a1 1 0 00-1 1v1H9a1 1 0 000 2h1v1a1 1 0 102 0V7h1a1 1 0 100-2h-1V4a1 1 0 00-1-1zM5 7a1 1 0 00-1 1v1H3a1 1 0 000 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2H6V8a1 1 0 00-1-1z"}))},D5t=z5t;var g7={};$(g7,{icon:()=>B5t});var gmr=E(D());var L5t=["title","titleId"];function zJ(){return zJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W5t=function(t){var n=t.title,r=t.titleId,o=N5t(t,L5t);return a("svg",zJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4h-.5a.5.5 0 010-1h1a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-1a.5.5 0 010-1H5v-2h-.5a.5.5 0 010-1H5V7h-.5a.5.5 0 010-1H5V4zm3 1a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1V6a1 1 0 00-1-1H8z"}))},B5t=W5t;var v7={};$(v7,{icon:()=>$5t});var ymr=E(D());var H5t=["title","titleId"];function DJ(){return DJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U5t=function(t){var n=t.title,r=t.titleId,o=V5t(t,H5t);return a("svg",DJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2l5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2z"}),a("path",{d:"M5.243 4.429L9.597 7.04 8 7.928 3.743 5.563a.5.5 0 10-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 00.06-.04l.392-.202V5.047l-.917.505a.573.573 0 00-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858z"}))},$5t=U5t;var y7={};$(y7,{icon:()=>Y5t});var wmr=E(D());var J5t=["title","titleId"];function LJ(){return LJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K5t=function(t){var n=t.title,r=t.titleId,o=G5t(t,J5t);return a("svg",LJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 8.416l-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96z"}))},Y5t=K5t;var b7={};$(b7,{icon:()=>r4t});var xmr=E(D());var Q5t=["title","titleId"];function NJ(){return NJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function e4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var t4t=function(t){var n=t.title,r=t.titleId,o=Z5t(t,Q5t);return a("svg",NJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 01-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 01-.09-.992L9.5 3H11zM6.5 3a.5.5 0 01.09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 01.09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5z"}),a("path",{d:"M5.864 7.25a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429z"})))},r4t=t4t;var w7={};$(w7,{icon:()=>l4t});var Smr=E(D());var n4t=["title","titleId"];function FJ(){return FJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function i4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var a4t=function(t){var n=t.title,r=t.titleId,o=o4t(t,n4t);return a("svg",FJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.002 12.412l-.962.962a1 1 0 01-1.414-1.414l.962-.962a5.333 5.333 0 017.41-7.41l.962-.962a1 1 0 111.414 1.414l-.962.962a5.333 5.333 0 01-7.41 7.41zm.966-.966a4 4 0 005.478-5.478l-5.478 5.478zm-1.414-1.414l5.478-5.478a4 4 0 00-5.478 5.478z"}))},l4t=a4t;var O7={};$(O7,{icon:()=>f4t});var jmr=E(D());var s4t=["title","titleId"];function WJ(){return WJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function c4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p4t=function(t){var n=t.title,r=t.titleId,o=u4t(t,s4t);return a("svg",WJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77z"}))},f4t=p4t;var x7={};$(x7,{icon:()=>v4t});var Pmr=E(D());var d4t=["title","titleId"];function BJ(){return BJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g4t=function(t){var n=t.title,r=t.titleId,o=m4t(t,d4t);return a("svg",BJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4z"}))},v4t=g4t;var _7={};$(_7,{icon:()=>x4t});var Cmr=E(D());var y4t=["title","titleId"];function HJ(){return HJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function w4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var O4t=function(t){var n=t.title,r=t.titleId,o=b4t(t,y4t);return a("svg",HJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818zM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818z"}))},x4t=O4t;var S7={};$(S7,{icon:()=>E4t});var Mmr=E(D());var _4t=["title","titleId"];function VJ(){return VJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j4t=function(t){var n=t.title,r=t.titleId,o=S4t(t,_4t);return a("svg",VJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.049 3.785l3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 01.098 0zm.073 2.654l4.545-1.306v5.45l-.131.184-4.414 1.455V6.439zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183z"}))},E4t=j4t;var I7={};$(I7,{icon:()=>M4t});var Rmr=E(D());var P4t=["title","titleId"];function qJ(){return qJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function C4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A4t=function(t){var n=t.title,r=t.titleId,o=k4t(t,P4t);return a("svg",qJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},M4t=A4t;var j7={};$(j7,{icon:()=>L4t});var Dmr=E(D());var T4t=["title","titleId"];function UJ(){return UJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D4t=function(t){var n=t.title,r=t.titleId,o=R4t(t,T4t);return a("svg",UJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 7a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm0 1a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM11 9a1 1 0 100-2 1 1 0 000 2zm0 1a2 2 0 100-4 2 2 0 000 4zm-2.5 1.5a.5.5 0 11-1 0 .5.5 0 011 0zm1 0a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"}))},L4t=D4t;var E7={};$(E7,{icon:()=>H4t});var Nmr=E(D());var N4t=["title","titleId"];function $J(){return $J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B4t=function(t){var n=t.title,r=t.titleId,o=F4t(t,N4t);return a("svg",$J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},H4t=B4t;var P7={};$(P7,{icon:()=>J4t});var Wmr=E(D());var V4t=["title","titleId"];function JJ(){return JJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $4t=function(t){var n=t.title,r=t.titleId,o=q4t(t,V4t);return a("svg",JJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M9.82 5.116a.5.5 0 00-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 00-.114.63l.05.074a.5.5 0 00.63.115l.075-.05 3-2.5a.5.5 0 00.071-.697l-.07-.072-3-2.5zM6.18 5.116a.5.5 0 01.704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 01.114.63l-.05.074a.5.5 0 01-.63.115l-.075-.05-3-2.5a.5.5 0 01-.071-.697l.07-.072 3-2.5z"})))},J4t=$4t;var k7={};$(k7,{icon:()=>Q4t});var Hmr=E(D());var G4t=["title","titleId"];function GJ(){return GJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function K4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Y4t=function(t){var n=t.title,r=t.titleId,o=X4t(t,G4t);return a("svg",GJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},Q4t=Y4t;var C7={};$(C7,{icon:()=>n6t});var qmr=E(D());var Z4t=["title","titleId"];function XJ(){return XJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r6t=function(t){var n=t.title,r=t.titleId,o=e6t(t,Z4t);return a("svg",XJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},n6t=r6t;var A7={};$(A7,{icon:()=>s6t});var $mr=E(D());var o6t=["title","titleId"];function KJ(){return KJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l6t=function(t){var n=t.title,r=t.titleId,o=i6t(t,o6t);return a("svg",KJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 11-1.163-.037V5.776a1.595 1.595 0 01-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 01-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 01-1.115 1.526c-.139.762-.656 2.208-2.619 2.208zm-3.2 2.133a.535.535 0 00-.533.533c0 .294.24.534.533.534a.535.535 0 000-1.067zm0-7.467a.535.535 0 00-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 00-.534-.534zM10.667 4.8a.535.535 0 00-.534.533.535.535 0 001.067 0 .535.535 0 00-.533-.533z"}))},s6t=l6t;var M7={};$(M7,{icon:()=>d6t});var Gmr=E(D());var u6t=["title","titleId"];function YJ(){return YJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f6t=function(t){var n=t.title,r=t.titleId,o=c6t(t,u6t);return a("svg",YJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.27 7.5a1 1 0 112 0 1 1 0 01-2 0zM8.77 7.5a1 1 0 112 0 1 1 0 01-2 0z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 01-5.796.482L4.28 12.789a.75.75 0 01-1.06-1.06L4.847 10.1a4.501 4.501 0 116.855.581zm-5.304-1.06a3 3 0 104.243-4.243A3 3 0 006.398 9.62z"}))},d6t=f6t;var T7={};$(T7,{icon:()=>y6t});var Kmr=E(D());var m6t=["title","titleId"];function QJ(){return QJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v6t=function(t){var n=t.title,r=t.titleId,o=h6t(t,m6t);return a("svg",QJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1zm-8 1H4v1h1v-1zm7 0h-1v1h1v-1zM5 4H4v1h1V4zm7 0h-1v1h1V4zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6z"}))},y6t=v6t;var R7={};$(R7,{icon:()=>_6t});var Qmr=E(D());var b6t=["title","titleId"];function ZJ(){return ZJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x6t=function(t){var n=t.title,r=t.titleId,o=w6t(t,b6t);return a("svg",ZJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},_6t=x6t;var z7={};$(z7,{icon:()=>P6t});var e1r=E(D());var S6t=["title","titleId"];function eG(){return eG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E6t=function(t){var n=t.title,r=t.titleId,o=I6t(t,S6t);return a("svg",eG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667zm0 4h2.666v2.666H4.667V8.667zm4-4h2.666v2.666H8.667V4.667zm0 4h2.666v2.666H8.667V8.667zM3.333 3.333v9.334h9.334V3.333H3.333zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 012 12.667V3.333C2 2.597 2.597 2 3.333 2z"}))},P6t=E6t;var D7={};$(D7,{icon:()=>T6t});var r1r=E(D());var k6t=["title","titleId"];function tG(){return tG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M6t=function(t){var n=t.title,r=t.titleId,o=C6t(t,k6t);return a("svg",tG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.316 14a6 6 0 110-12 6 6 0 010 12zm0-1.333a4.667 4.667 0 100-9.334 4.667 4.667 0 000 9.334zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116z"}))},T6t=M6t;var L7={};$(L7,{icon:()=>N6t});var o1r=E(D());var R6t=["title","titleId"];function rG(){return rG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L6t=function(t){var n=t.title,r=t.titleId,o=z6t(t,R6t);return a("svg",rG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 8a1 1 0 11-2 0 1 1 0 012 0z"}),a("path",{fillRule:"evenodd",d:"M4 4a1 1 0 00-1 1v6a1 1 0 001 1h6.989a1 1 0 00.825-.436l2.05-3a1 1 0 000-1.128l-2.05-3A1 1 0 0010.99 4H4zm.75 1.25a.5.5 0 00-.5.5v4.5a.5.5 0 00.5.5h5.745a.5.5 0 00.405-.206l1.636-2.25a.5.5 0 000-.588L10.9 5.456a.5.5 0 00-.405-.206H4.75z"}))},N6t=L6t;var N7={};$(N7,{icon:()=>V6t});var a1r=E(D());var F6t=["title","titleId"];function nG(){return nG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H6t=function(t){var n=t.title,r=t.titleId,o=W6t(t,F6t);return a("svg",nG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},V6t=H6t;var F7={};$(F7,{icon:()=>G6t});var s1r=E(D());var q6t=["title","titleId"];function oG(){return oG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J6t=function(t){var n=t.title,r=t.titleId,o=U6t(t,q6t);return a("svg",oG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H3v3h5V4zM13 9H8v3h5V9zM10 4h3v3h-3V4zM6 9H3v3h3V9z"}))},G6t=J6t;var W7={};$(W7,{icon:()=>Z6t});var c1r=E(D());var X6t=["title","titleId"];function iG(){return iG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q6t=function(t){var n=t.title,r=t.titleId,o=K6t(t,X6t);return a("svg",iG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.649 4.667l1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},Z6t=Q6t;var B7={};$(B7,{icon:()=>owt});var f1r=E(D());var ewt=["title","titleId"];function aG(){return aG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nwt=function(t){var n=t.title,r=t.titleId,o=twt(t,ewt);return a("svg",aG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.386 9.836a2.5 2.5 0 113.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 11-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 11.78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 10-.33-.036zM9.78 11.97a.5.5 0 01.5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 11-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 01.473-.337zM5.958 5.772a.5.5 0 01-.78.625L3.11 3.812a.5.5 0 11.78-.624l2.068 2.584zM1 11h5.5a.5.5 0 110 1h-6a.5.5 0 01-.5-.5V.5A.5.5 0 01.5 0h12a.5.5 0 01.5.5v3a.5.5 0 11-1 0V1H1v10z"}))},owt=nwt;var H7={};$(H7,{icon:()=>uwt});var m1r=E(D());var iwt=["title","titleId"];function lG(){return lG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var swt=function(t){var n=t.title,r=t.titleId,o=awt(t,iwt);return a("svg",lG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 011-1h4a1 1 0 011 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z"}))},uwt=swt;var V7={};$(V7,{icon:()=>mwt});var g1r=E(D());var cwt=["title","titleId"];function sG(){return sG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dwt=function(t){var n=t.title,r=t.titleId,o=pwt(t,cwt);return a("svg",sG({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14 3.808L7.53 1.51a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93L9.416.578a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zm0 8.384l2.39 2.298a.67.67 0 00.942 0l2.389-2.298a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},mwt=dwt;var q7={};$(q7,{icon:()=>bwt});var y1r=E(D());var hwt=["title","titleId"];function uG(){return uG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ywt=function(t){var n=t.title,r=t.titleId,o=gwt(t,hwt);return a("svg",uG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.565 10.83a.5.5 0 11.819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 11-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),a("path",{d:"M7.892 3.43a.5.5 0 11-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 11.819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 01-1 0v-3a.5.5 0 011 0zM1.058 2.23l2.458 1.72a.5.5 0 01-.574.82L.484 3.05a.5.5 0 11.574-.82zm12 7.093l2.457 1.72a.5.5 0 11-.573.82l-2.457-1.72a.5.5 0 11.573-.82zm-2.099 1.181v3a.5.5 0 11-1 0v-3a.5.5 0 111 0z"}))},bwt=ywt;var U7={};$(U7,{icon:()=>Swt});var w1r=E(D());var wwt=["title","titleId"];function cG(){return cG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _wt=function(t){var n=t.title,r=t.titleId,o=Owt(t,wwt);return a("svg",cG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 9a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}),a("path",{d:"M15 14.291A9.053 9.053 0 008 11a9.053 9.053 0 00-7 3.291l.715.71A8.047 8.047 0 018 11.996 8.047 8.047 0 0114.286 15l.714-.71z"}))},Swt=_wt;var $7={};$($7,{icon:()=>kwt});var x1r=E(D());var Iwt=["title","titleId"];function pG(){return pG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ewt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pwt=function(t){var n=t.title,r=t.titleId,o=jwt(t,Iwt);return a("svg",pG({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 01-1 1.12H3.007a1.005 1.005 0 01-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 00.783-.633zM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 01-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 017.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1z"}),a("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 108.937.999 5 5 0 008.94 11"})))},kwt=Pwt;var J7={};$(J7,{icon:()=>Rwt});var S1r=E(D());var Cwt=["title","titleId"];function fG(){return fG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Twt=function(t){var n=t.title,r=t.titleId,o=Awt(t,Cwt);return a("svg",fG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 10-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 001 6.978V9a1 1 0 001 1h2.5a3.69 3.69 0 01.684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 00-1.066-1.03zM4 4a1 1 0 100-2 1 1 0 000 2zm10 6h-2.5a3.684 3.684 0 00-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 00-.793-.636 2.716 2.716 0 011.066-1.03 2 2 0 112.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0115 6.944V9a1 1 0 01-1 1zm-2-6a1 1 0 100-2 1 1 0 000 2z"}),a("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 011.163 1.21A3.453 3.453 0 0111 11.977V14a1 1 0 01-1 1H6a1 1 0 01-1-1v-2.022a2.005 2.005 0 01.006-.135 3.456 3.456 0 01.35-1.29 2.755 2.755 0 011.162-1.21A2 2 0 1110 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 11-2 0 1 1 0 012 0z"}))},Rwt=Twt;var G7={};$(G7,{icon:()=>Fwt});var j1r=E(D());var zwt=["title","titleId"];function dG(){return dG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nwt=function(t){var n=t.title,r=t.titleId,o=Dwt(t,zwt);return a("svg",dG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6zM4 4V2H2v2h2zm8 0h2V2h-2v2zM2 14h2v-2H2v2zm10 0h2v-2h-2v2z"}))},Fwt=Nwt;var X7={};$(X7,{icon:()=>qwt});var P1r=E(D());var Wwt=["title","titleId"];function mG(){return mG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vwt=function(t){var n=t.title,r=t.titleId,o=Bwt(t,Wwt);return a("svg",mG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994zM1 4h14v1H1V4zm1.5-1a.5.5 0 010-1h1a.5.5 0 010 1h-1zm3 0a.5.5 0 010-1h1a.5.5 0 010 1h-1zm4.947 6.106a1 1 0 010 1.788l-3 2A1 1 0 016 12V8a1 1 0 011.447-.894l3 2zM10 10L7 8v4l3-2z"}))},qwt=Vwt;var K7={};$(K7,{icon:()=>Xwt});var C1r=E(D());var Uwt=["title","titleId"];function hG(){return hG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gwt=function(t){var n=t.title,r=t.titleId,o=$wt(t,Uwt);return a("svg",hG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317 3 6.191V13zm5.295-5.35l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001L8.295 7.65zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15z"}))},Xwt=Gwt;var Y7={};$(Y7,{icon:()=>eOt});var M1r=E(D());var Kwt=["title","titleId"];function gG(){return gG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zwt=function(t){var n=t.title,r=t.titleId,o=Ywt(t,Kwt);return a("svg",gG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 1a.5.5 0 01.5.5V15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14A.5.5 0 01.5 1zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 01.493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 01.36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317z"}))},eOt=Zwt;var Q7={};$(Q7,{icon:()=>iOt});var R1r=E(D());var tOt=["title","titleId"];function vG(){return vG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oOt=function(t){var n=t.title,r=t.titleId,o=rOt(t,tOt);return a("svg",vG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 10h-6a.5.5 0 010-1H8V6H2.5a.5.5 0 010-1H13V2H2.5a.5.5 0 010-1h11a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H11v-3H8.5zM0 .5a.5.5 0 111 0v14a.5.5 0 11-1 0V.5z"}))},iOt=oOt;var Z7={};$(Z7,{icon:()=>cOt});var D1r=E(D());var aOt=["title","titleId"];function yG(){return yG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uOt=function(t){var n=t.title,r=t.titleId,o=lOt(t,aOt);return a("svg",yG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 0a.5.5 0 01.5.5v14a.5.5 0 11-1 0V.5A.5.5 0 01.5 0zm13 1a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H9v-3H2.5a.5.5 0 010-1H6V6H2.5a.5.5 0 010-1H10V2H2.5a.5.5 0 010-1h11z"}))},cOt=uOt;var ex={};$(ex,{icon:()=>hOt});var N1r=E(D());var pOt=["title","titleId"];function bG(){return bG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mOt=function(t){var n=t.title,r=t.titleId,o=fOt(t,pOt);return a("svg",bG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 7.5v6a.5.5 0 11-1 0V8H6v5.5a.5.5 0 11-1 0V3H2v10.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4a.5.5 0 01.5.5V7h3V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V5h-3v2.5zM.5 16a.5.5 0 110-1h14a.5.5 0 110 1H.5z"}))},hOt=mOt;var tx={};$(tx,{icon:()=>wOt});var W1r=E(D());var gOt=["title","titleId"];function wG(){return wG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bOt=function(t){var n=t.title,r=t.titleId,o=vOt(t,gOt);return a("svg",wG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.5 15a.5.5 0 110 1H.5a.5.5 0 110-1h14zm-9-13a.5.5 0 01.5.5L5.999 7H9V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V7h-3v6.5a.5.5 0 01-.41.492L9.5 14a.5.5 0 01-.5-.5V10H6v3.5a.5.5 0 01-.992.09L5 13.5V6H2v7.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4z"}))},wOt=bOt;var rx={};$(rx,{icon:()=>IOt});var H1r=E(D());var OOt=["title","titleId"];function OG(){return OG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SOt=function(t){var n=t.title,r=t.titleId,o=xOt(t,OOt);return a("svg",OG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.877 5.847l-1.02 1.02a.5.5 0 01-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 008 3.019V4.5a.5.5 0 01-1 0V3.019a6.47 6.47 0 00-4.261 2.055l1.07 1.071a.5.5 0 01-.706.707l-.99-.99A6.46 6.46 0 001.018 10H2.5a.5.5 0 110 1H1.174c.083.353.196.697.337 1.03a.5.5 0 11-.922.39A7.487 7.487 0 010 9.5a7.483 7.483 0 012.197-5.304A7.487 7.487 0 017.5 2a7.487 7.487 0 015.304 2.197A7.483 7.483 0 0115 9.5a7.487 7.487 0 01-.59 2.92.5.5 0 01-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 110-1h1.481a6.483 6.483 0 00-1.104-4.153zm-6.041 5.317a.993.993 0 01-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 01-1.404-.01z"}))},IOt=SOt;var nx={};$(nx,{icon:()=>COt});var q1r=E(D());var jOt=["title","titleId"];function xG(){return xG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function POt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kOt=function(t){var n=t.title,r=t.titleId,o=EOt(t,jOt);return a("svg",xG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.725 3.653a6 6 0 012.847 7.576.5.5 0 01-.928-.372 5 5 0 10-9.293-.014.5.5 0 01-.218.619L1.39 12.47a.5.5 0 01-.708-.23A7.99 7.99 0 010 9a8 8 0 0111.212-7.329.5.5 0 01.234.704l-.721 1.278zm-.933-.38l.5-.889a7 7 0 00-8.902 8.93l.886-.511a6 6 0 017.516-7.53zM6.73 9.467a1.75 1.75 0 112.539 0 2 2 0 11-2.539 0zM8 12.013a1 1 0 100-2 1 1 0 000 2zm0-3a.75.75 0 100-1.5.75.75 0 000 1.5z"}))},COt=kOt;var ox={};$(ox,{icon:()=>zOt});var $1r=E(D());var AOt=["title","titleId"];function _G(){return _G=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ROt=function(t){var n=t.title,r=t.titleId,o=MOt(t,AOt);return a("svg",_G({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 00-.915-.404l2.33-5.547zM9.146 9.19a2.008 2.008 0 00-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978zM5.581 7.956l-2.134 4.268a.5.5 0 01-.894-.448l2.134-4.268c.25.22.557.376.894.448zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15zm5-8a1 1 0 110-2 1 1 0 010 2zm4 5a1 1 0 110-2 1 1 0 010 2zm4-9a1 1 0 110-2 1 1 0 010 2z"}))},zOt=ROt;var ix={};$(ix,{icon:()=>WOt});var G1r=E(D());var DOt=["title","titleId"];function SG(){return SG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FOt=function(t){var n=t.title,r=t.titleId,o=LOt(t,DOt);return a("svg",SG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14zm0-4.996a2.5 2.5 0 110-5 2.5 2.5 0 010 5zm0-1a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},WOt=FOt;var ax={};$(ax,{icon:()=>UOt});var K1r=E(D());var BOt=["title","titleId"];function IG(){return IG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qOt=function(t){var n=t.title,r=t.titleId,o=HOt(t,BOt);return a("svg",IG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 2.309v8.69a.499.499 0 01-.032.176L9.5 12.691V3.809l-3-1.5zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 01-.027-.164V2.27zm.274-1.216a.498.498 0 01.471.01l3.768 1.884 4.284-1.904A.5.5 0 0115 1.5v10a.5.5 0 01-.297.457l-4.5 2a.5.5 0 01-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 01-.703-.457v-10a.5.5 0 01.297-.457l4.476-1.99zM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556z"}))},UOt=qOt;var lx={};$(lx,{icon:()=>KOt});var Q1r=E(D());var $Ot=["title","titleId"];function jG(){return jG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XOt=function(t){var n=t.title,r=t.titleId,o=JOt(t,$Ot);return a("svg",jG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.532 7.34a2.161 2.161 0 112.936 0 2.746 2.746 0 11-2.936 0zM2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm6 5.915a1.161 1.161 0 100-2.322 1.161 1.161 0 000 2.322zm0 4.492a1.746 1.746 0 100-3.492 1.746 1.746 0 000 3.492z"}))},KOt=XOt;var sx={};$(sx,{icon:()=>t7t});var ehr=E(D());var YOt=["title","titleId"];function EG(){return EG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e7t=function(t){var n=t.title,r=t.titleId,o=QOt(t,YOt);return a("svg",EG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 9a.5.5 0 01-.5-.5V3.023A5.5 5.5 0 1011.978 9H6.5zM7 8h5.5a.5.5 0 01.5.5A6.5 6.5 0 116.5 2a.5.5 0 01.5.5V8zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028zM14.5 7h-6a.5.5 0 01-.5-.5v-6a.5.5 0 01.5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 01-.5.5zM6.146 8.854a.5.5 0 11.708-.708l4 4a.5.5 0 01-.708.708l-4-4z"}))},t7t=e7t;var ux={};$(ux,{icon:()=>a7t});var rhr=E(D());var r7t=["title","titleId"];function PG(){return PG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i7t=function(t){var n=t.title,r=t.titleId,o=n7t(t,r7t);return a("svg",PG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},a7t=i7t;var cx={};$(cx,{icon:()=>p7t});var ohr=E(D());var l7t=["title","titleId"];function kG(){return kG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c7t=function(t){var n=t.title,r=t.titleId,o=s7t(t,l7t);return a("svg",kG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 9.047a.5.5 0 100 1h13a.5.5 0 000-1h-13zm0-1h13a1.5 1.5 0 010 3h-13a1.5 1.5 0 010-3zM10 13a.5.5 0 110 1H4a.5.5 0 110-1h6zM8.001 2.015a.5.5 0 11-.002 1l-5-.015a.5.5 0 11.003-1l5 .015zM14 5a.5.5 0 110 1H6a.5.5 0 010-1h8z"}))},p7t=c7t;var px={};$(px,{icon:()=>g7t});var ahr=E(D());var f7t=["title","titleId"];function CG(){return CG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h7t=function(t){var n=t.title,r=t.titleId,o=d7t(t,f7t);return a("svg",CG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 5v6h2a.5.5 0 110 1h-5a.5.5 0 110-1h2V5H5v.5a.5.5 0 01-1 0v-1a.5.5 0 01.5-.5h7a.5.5 0 01.5.51l-.021 1a.5.5 0 11-1-.02l.01-.49H8.5zM1 15h1.5a.5.5 0 110 1h-2a.5.5 0 01-.5-.5v-1.996a.5.5 0 011 0V15zM1 1v1.497a.5.5 0 11-1 0V.5A.5.5 0 01.5 0h2a.5.5 0 010 1H1zm14 0h-1.495a.5.5 0 010-1H15.5a.5.5 0 01.5.5v2a.5.5 0 11-1 0V1zm0 14v-1.5a.5.5 0 111 0v2a.5.5 0 01-.5.5h-2a.5.5 0 110-1H15zM0 6.5a.5.5 0 011 0v3a.5.5 0 01-1 0v-3zM9.5 0a.5.5 0 010 1h-3a.5.5 0 010-1h3zM15 6.5a.5.5 0 111 0v3a.5.5 0 11-1 0v-3zM9.5 15a.5.5 0 110 1h-3a.5.5 0 110-1h3z"}))},g7t=h7t;var fx={};$(fx,{icon:()=>O7t});var shr=E(D());var v7t=["title","titleId"];function AG(){return AG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w7t=function(t){var n=t.title,r=t.titleId,o=y7t(t,v7t);return a("svg",AG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 01-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 01-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 01-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 01-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 01.112-.454 6.728 6.728 0 01-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347zm3.027 1.116a3.13 3.13 0 00-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 00-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 00-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503zM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614zM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9z"}))},O7t=w7t;var dx={};$(dx,{icon:()=>j7t});var chr=E(D());var x7t=["title","titleId"];function MG(){return MG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I7t=function(t){var n=t.title,r=t.titleId,o=_7t(t,x7t);return a("svg",MG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},j7t=I7t;var mx={};$(mx,{icon:()=>A7t});var fhr=E(D());var E7t=["title","titleId"];function TG(){return TG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C7t=function(t){var n=t.title,r=t.titleId,o=P7t(t,E7t);return a("svg",TG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 11-1 0V9.869A23.3 23.3 0 008.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 11-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 01-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0114 3.679V5.5A1.5 1.5 0 0112.5 7H9.837zm-.569-1H12.5a.5.5 0 00.5-.5V3.68a.5.5 0 00-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268zM2 10v3.5a.5.5 0 11-1 0v-4a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v4a.5.5 0 11-1 0V10H2zm10 3.5a.5.5 0 11-1 0v-2a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v2a.5.5 0 11-1 0V12h-2v1.5zM1.016 16.026a.5.5 0 010-1H15a.5.5 0 110 1H1.016z"}))},A7t=C7t;var hx={};$(hx,{icon:()=>D7t});var mhr=E(D());var M7t=["title","titleId"];function RG(){return RG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z7t=function(t){var n=t.title,r=t.titleId,o=T7t(t,M7t);return a("svg",RG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),a("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 011.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 01-.88.763 2.957 2.957 0 01-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 00.726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 00-.495-.424 1.958 1.958 0 00-.77-.197H2V7z"}))},D7t=z7t;var gx={};$(gx,{icon:()=>B7t});var ghr=E(D());var L7t=["title","titleId"];function zG(){return zG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W7t=function(t){var n=t.title,r=t.titleId,o=N7t(t,L7t);return a("svg",zG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3.5L12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},B7t=W7t;var vx={};$(vx,{icon:()=>$7t});var yhr=E(D());var H7t=["title","titleId"];function DG(){return DG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U7t=function(t){var n=t.title,r=t.titleId,o=V7t(t,H7t);return a("svg",DG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.746l4.537 4.537a2 2 0 102.828-2.829l-3.157-3.156a.5.5 0 01.708-.708l3.156 3.157a3 3 0 11-4.243 4.243l-4.949-4.95a5.001 5.001 0 01-5.22-7.106.5.5 0 01.805-.138L3.676 5.09a1 1 0 101.415-1.414L2.797 1.382a.5.5 0 01.138-.805 5.001 5.001 0 113.983 9.169zM1.226 4.054a4.002 4.002 0 006.693 3.865 4 4 0 00-3.865-6.693l1.744 1.743a2 2 0 11-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 111.414-1.414 1 1 0 01-1.414 1.414z"}))},$7t=U7t;var k1e=E(D()),ji=E(rt()),C1e=E(yt());var eP={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",alert:"alert",analyzeEvent:"analyzeEvent",annotation:"annotation",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",asterisk:"asterisk",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clock:"clock",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInACircleFilled:"crossInACircleFilled",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",discoverApp:"app_discover",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",eql:"eql",eraser:"eraser",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",filebeatApp:"app_filebeat",filter:"filter",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",namespace:"namespace",nested:"nested",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipelineApp:"app_pipeline",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",snowflake:"snowflake",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spacesApp:"app_spaces",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDenseVector:"tokenDenseVector",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable"};var g1e=E(cn()),yx=[];function J7t(){(0,g1e.unstable_batchedUpdates)(function(){for(var e=0;e2&&arguments[2]!==void 0?arguments[2]:{},u=i.method;if(n==="transparent")return"transparent";if(u==="transparent")return n==="plain"?Ma(r.colors.ghost,.2):n==="subdued"?Ma(r.colors.lightShade,.2):Ma(r.colors[n],.1);var c=function(g){return o==="DARK"?Gs(g,.8):Js(g,.9)};switch(n){case"plain":return r.colors.emptyShade;case"subdued":return r.colors.body;default:return c(r.colors[n])}},Xp=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.method,o=cr();return wx(o,t,{method:r})},y1e=function(){return{transparent:Oe("background-color:",Xp("transparent"),";;label:transparent;"),plain:Oe("background-color:",Xp("plain"),";;label:plain;"),subdued:Oe("background-color:",Xp("subdued"),";;label:subdued;"),accent:Oe("background-color:",Xp("accent"),";;label:accent;"),primary:Oe("background-color:",Xp("primary"),";;label:primary;"),success:Oe("background-color:",Xp("success"),";;label:success;"),warning:Oe("background-color:",Xp("warning"),";;label:warning;"),danger:Oe("background-color:",Xp("danger"),";;label:danger;")}};var b1e=function(t){var n=t.euiTheme,r=n.colors,o=n.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=i.thumbColor,c=i.trackColor,d=c===void 0?"transparent":c,g=i.width,O=g===void 0?"thin":g,S=i.size,I=i.corner,R=u||Ma(r.darkShade,.5),k=S||o.base,A=I||O==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,M="scrollbar-color: ".concat(R," ").concat(d,";");return"scrollbar-width: ".concat(O,`; + `)};var Fue={"text-align":{left:"start",center:"center",right:"end"}},bXt=kt(Fue["text-align"]),Ra=function(t){return"text-align: ".concat(Fue["text-align"][t],";")};function wE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?wE=function(n){return typeof n}:wE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},wE(e)}var Ii=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;return function(n){var r=wE(n)==="object"?n.base:n;return"".concat(r*t,"px")}};function Wue(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,c=o.customScale;if(u==="em")return"".concat(r.scale[e],"em");var d=n*r.scale[e];c&&(d*=r.scale[c]);var g=n*r.scale[r.body.scale];return u==="px"?"".concat(d,"px"):"".concat((d/g).toFixed(4),"rem")}function Bue(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,c=o.customScale,d=r.baseline,g=r.lineHeightMultiplier,O=n*r.scale[e];c&&(O*=r.scale[c]);var S=n*r.scale[r.body.scale],I=O<=n?g:g*.833;if(u==="em")return I.toFixed(4).toString();var R=Math.floor(Math.round(O*I)/d)*d;return u==="px"?"".concat(R,"px"):"".concat((R/S).toFixed(4),"rem")}var Hue=16,Vue={xxs:gr(Ii(.125)),xs:gr(Ii(.25)),s:gr(Ii(.5)),m:gr(Ii(.75)),base:gr(Ii()),l:gr(Ii(1.5)),xl:gr(Ii(2)),xxl:gr(Ii(2.5)),xxxl:gr(Ii(3)),xxxxl:gr(Ii(4))};function OE(e,t){return nAe(e)||rAe(e,t)||tAe(e,t)||eAe()}function eAe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tAe(e,t){if(e){if(typeof e=="string")return que(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return que(e,t)}}function que(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:50,r=Date.now();return function(){r+n-Date.now()<0&&(t.apply(void 0,arguments),r=Date.now())}};function FDe(e,t){return VDe(e)||HDe(e,t)||BDe(e,t)||WDe()}function WDe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function BDe(e,t){if(e){if(typeof e=="string")return fde(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fde(e,t)}}function fde(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:!0,r=eW();return r&&n?t.includes(r):!1};var mde=function(t){var n=t instanceof HTMLElement?t:null;return typeof t=="string"?n=document.querySelector(t):typeof t=="function"&&(n=t()),n};var hde=E(rW());var nW=function(t){return t===void 0},qDe=function(t){return t===null},Il=function(t){return nW(t)||qDe(t)};var gde=function(t){return hde.default.isDate(t)};var Sde=E(_E()),Ide=E(as()),jde=E(yde()),Ede=E(wde()),Pde=E(oW()),kde=E(_de()),aLe=E(Rd()),Xp=function(t){return(0,Sde.default)(t)},Cde=function(t){return(0,Ide.default)(t)},Hi=function(t){return(0,jde.default)(t)},NE=function(t){return(0,Ede.default)(t)},FE=function(t){return(0,Pde.default)(t)},Ade=function(t){return(0,kde.default)(t)};var G1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.yes,o=r===void 0?"Yes":r,i=n.no,u=i===void 0?"No":i,c=n.nil,d=c===void 0?"":c;return Il(t)?d:t?o:u};var BE=E(rW());function WE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?WE=function(n){return typeof n}:WE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},WE(e)}function Mde(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Tde(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=n.refTime;return(0,BE.default)(t).calendar(r,n)},G2={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:iW,calendarDateTime:function(t,n){return iW(t,Tde({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},n))},calendarDate:function(t,n){return iW(t,Tde({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},n))}};function sLe(e){return G2.hasOwnProperty(e)}function uLe(e){return WE(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var X1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(Hi(n)){if(Il(t))return"";var r=sLe(n)?G2[n]:n;if(Xp(r))return r(t,{});if(Hi(r))return(0,BE.default)(t).format(r)}if(uLe(n)){var o=n.format,i=o===void 0?"dateTime":o,u=n.nil,c=u===void 0?"":u,d=n.options,g=G2[i]||i;if(Il(t))return c;if(Xp(g))return g(t,d);if(Hi(g))return(0,BE.default)(t).format(g)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(n))};var Dde=E(zde());var cLe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},K1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,o="",i;if(Hi(n)?r=n:(r=n.format,o=n.nil||"",i=n.round),!r)return Il(t)?o:t.toString();var u=i?Math.round:Math.floor,c=cLe[r]||r;return Il(t)?o:(0,Dde.default)(t).format(c,u)};var Y1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return Il(t)?n.nil:t.toString()};var VE=function e(t){return Il(t)||Ade(t)?"":Hi(t)?Y1(t):gde(t)?X1(t):NE(t)?G1(t):FE(t)?K1(t):Cde(t)?Array.isArray(t)?t.map(function(n){return e(n)}).join(", "):e(t):JSON.stringify(t)};var fLe=/^([a-zA-Z0-9]+\.)*elastic\.co$/,Wde=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";try{var n=new URL(t),r=n.protocol==="http:"||n.protocol==="https:",o=!!n.host.match(fLe);return r&&o}catch{return!1}};var bo=function(t){var n=t.href,r=t.target,o=r===void 0?"":r,i=t.rel,u=!!n&&Wde(n),c=i?i.split(" ").filter(function(d){return!!d.length&&d!=="noreferrer"}):[];return u||c.push("noreferrer"),o.includes("_blank")&&c.indexOf("noopener")===-1&&c.push("noopener"),c.sort().join(" ").trim()};var Bde=E(rt()),qE="asc",lW="desc",jl=Object.freeze({ASC:qE,DESC:lW,isAsc:function(t){return t===qE},reverse:function(t){return this.isAsc(t)?lW:qE}}),Hde=Bde.default.oneOf([qE,lW]);var d1e=E(u0e()),JBe=E(f1e()),Dd=function(t,n,r){return(0,d1e.default)(t,n,r)};var K2=Object.freeze({default:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:jl.ASC;return function(n,r){var o=n!=null,i=r!=null;if(o&&!i)return-1;if(!o&&i)return 1;if(!o&&!i||n===r)return 0;var u=n>r?1:-1;return jl.isAsc(t)?u:-1*u}},reverse:function(t){return function(n,r){return t(r,n)}},value:function(e){function t(n,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){return t||(t=this.default(jl.ASC)),function(n,r){return t(e(n),e(r))}}),property:function(t,n){return this.value(function(r){return Dd(r,t)},n)}});function YE(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bW(e,t){return YBe(e)||KBe(e,t)||XBe(e,t)||GBe()}function GBe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XBe(e,t){if(e){if(typeof e=="string")return m1e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m1e(e,t)}}function m1e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nB)&&(B=de.fit,ne={fit:de.fit,position:ve,top:de.top+window.pageYOffset,left:de.left+window.pageXOffset,arrow:de.arrow},B===1))break}if(ne==null)throw new Error("Failed to calculate bestPosition");return k&&(ne.anchorBoundingBox=M),ne}function QBe(e){var t,n,r=e.position,o=e.align,i=e.anchorBoundingBox,u=e.popoverBoundingBox,c=e.windowBoundingBox,d=e.containerBoundingBox,g=e.arrowConfig,O=e.offset,S=O===void 0?0:O,I=e.buffer,R=I===void 0?0:I,k=yW[r],M=eh[k],C=vW[k],T=g1e(R),D=bW(T,4),U=D[0],G=D[1],Y=D[2],K=D[3],B=ZBe({crossAxisFirstSide:k,crossAxisSecondSide:M,crossAxisDimension:C,position:r,align:o,buffer:R,offset:S,windowBoundingBox:c,containerBoundingBox:d,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:g}),ne=B.crossAxisPosition,pe=B.crossAxisArrowPosition,ve=vW[r],de=h1e[ve],ue=eHe({position:r,offset:S,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:g}),ye=ue.primaryAxisPosition,be=ue.primaryAxisArrowPosition,ze=(t={},YE(t,k,ne),YE(t,de,ye),t),He=wW(c,d);He.top+=U,He.right-=G,He.bottom-=Y,He.left+=K;var Qe=rHe({top:ze.top,right:ze.left+u.width,bottom:ze.top+u.height,left:ze.left,width:u.width,height:u.height},He),Be=g?(n={},YE(n,k,pe-ze[k]),YE(n,de,be),n):void 0;return{fit:Qe,top:ze.top,left:ze.left,arrow:Be?{left:Be.left,top:Be.top}:void 0}}function ZBe(e){var t=e.crossAxisFirstSide,n=e.crossAxisSecondSide,r=e.crossAxisDimension,o=e.position,i=e.align,u=e.buffer,c=e.offset,d=e.windowBoundingBox,g=e.containerBoundingBox,O=e.popoverBoundingBox,S=e.anchorBoundingBox,I=e.arrowConfig,R=O[r],k=S[r],M=k/2,C=S[t]+M-R/2,T=wW(d,g),D=tHe(S,T,u,c,o),U=I?I.arrowBuffer:0,G=(R-k)/2,Y=0,K=1,B=0,ne=1;if(i!=null){K=i==="top"||i==="left"?1:-1,Y=G;var pe=G+Y,ve=pe>D[eh[i]];B=ve?pe-D[eh[i]]:0,ne=-1*K}else{var de=D[t],ue=D[n],ye=de>ue;ne=ye?-1:1;var be=Math.min(de,ue),ze=G>be;B=ze?G-be:0}var He=B*ne,Qe=C+He+Y*K,Be;if(I){var Ze=I.arrowWidth;if(Be=S[t]+M-Ze/2,BeQe+R){var Ke=Qe+R,Ht=Be-(Ke-U-Ze);Qe+=Ht}}return{crossAxisPosition:Qe,crossAxisArrowPosition:Be}}function eHe(e){var t=e.position,n=e.offset,r=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,u=t==="top"||t==="left",c=vW[t],d=r[c],g=h1e[c],O=o[g],S=o[c],I=u?d:S,R=(n+I)*(u?-1:1),k=O+R,M;return i&&(M=u?d:0),{primaryAxisPosition:k,primaryAxisArrowPosition:M}}function gW(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function tHe(e,t,n,r,o){var i=g1e(n),u=bW(i,4),c=u[0],d=u[1],g=u[2],O=u[3];return{top:e.top-t.top-c-(o==="top"?r:0),right:t.right-e.right-d-(o==="right"?r:0),bottom:t.bottom-e.bottom-g-(o==="bottom"?r:0),left:e.left-t.left-O-(o==="left"?r:0)}}function rHe(e,t){var n=wW(e,t);if(n.left>n.right||n.top>n.top)return 0;var r=(n.right-n.left)*(n.bottom-n.top),o=(e.right-e.left)*(e.bottom-e.top);return r/o}function wW(e,t){var n=Math.max(e.top,t.top),r=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),u=Math.max(o-n,0),c=Math.max(r-i,0);return{top:n,right:r,bottom:o,left:i,height:u,width:c}}function Y2(e,t){for(var n=[];n.push(e),e=e.offsetParent,!(e==null||e.contains(t)););n.reverse();for(var r=0,o=n;r0){var r=Date.now(),o=r+t,i=function u(){n(),o>Date.now()&&requestAnimationFrame(u)};requestAnimationFrame(i)}};var b1e=E(L()),w1e=function(t){return(0,b1e.useCallback)(function(n){return t.forEach(function(r){r&&(typeof r=="function"?r(n):r.current=n)})},[t])};var gP=E(L()),Rt=E(rt()),dP=E(yt());var Xgr=E(L()),oi=E(rt()),rhe=E(yt());var Z2={};$(Z2,{icon:()=>uHe});var Ter=E(L());var iHe=["title","titleId"];function OW(){return OW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sHe=function(t){var n=t.title,r=t.titleId,o=aHe(t,iHe);return a("svg",OW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 0a8 8 0 110 16A8 8 0 018 0zm0 1a7 7 0 100 14A7 7 0 008 1zm3.974 4.342a.5.5 0 01-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 01-.233.596l-.083.036a.5.5 0 01-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 01-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 01.228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 01.632.316zM8 3a1 1 0 110 2 1 1 0 010-2z"}))},uHe=sHe;var eb={};$(eb,{icon:()=>mHe});var zer=E(L());var cHe=["title","titleId"];function xW(){return xW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dHe=function(t){var n=t.title,r=t.titleId,o=pHe(t,cHe);return a("svg",xW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 100 1 .5.5 0 000-1zm0-1a1.5 1.5 0 011.415 1h1.908a1.5 1.5 0 011.393.943L8.839 7H12.5a.5.5 0 010 1H8.839l-1.623 4.057A1.5 1.5 0 015.823 13H3.915a1.5 1.5 0 110-1h1.908a.5.5 0 00.464-.314L7.761 8H3.915a1.5 1.5 0 110-1H7.76L6.287 3.314A.5.5 0 005.823 3H3.915A1.5 1.5 0 112.5 1zm0 11a.5.5 0 110 1 .5.5 0 010-1zM3 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm9.354-3.354a.5.5 0 00-.708.708L13.793 7a.707.707 0 010 1l-2.147 2.146a.5.5 0 00.708.708L14.5 8.707a1.707 1.707 0 000-2.414l-2.146-2.147z"}))},mHe=dHe;var tb={};$(tb,{icon:()=>bHe});var Ler=E(L());var hHe=["title","titleId"];function _W(){return _W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yHe=function(t){var n=t.title,r=t.titleId,o=gHe(t,hHe);return a("svg",_W({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.59 10.059L7.35 5.18h1.3L8.4 10.06h-.81zm.394 1.901a.61.61 0 01-.448-.186.606.606 0 01-.186-.444c0-.174.062-.323.186-.446a.614.614 0 01.448-.184c.169 0 .315.06.44.182.124.122.186.27.186.448a.6.6 0 01-.189.446.607.607 0 01-.437.184zM2 14a1 1 0 01-.878-1.479l6-11a1 1 0 011.756 0l6 11A1 1 0 0114 14H2zm0-1h12L8 2 2 13z"}))},bHe=yHe;var rb={};$(rb,{icon:()=>SHe});var Fer=E(L());var wHe=["title","titleId"];function SW(){return SW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _He=function(t){var n=t.title,r=t.titleId,o=OHe(t,wHe);return a("svg",SW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.169L2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17zM15 4v8l-7 4-7-4V4l7-4 7 4zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638z"}))},SHe=_He;var nb={};$(nb,{icon:()=>kHe});var Ber=E(L());var IHe=["title","titleId"];function IW(){return IW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PHe=function(t){var n=t.title,r=t.titleId,o=jHe(t,IHe);return a("svg",IW({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},kHe=PHe;var ob={};$(ob,{icon:()=>RHe});var Ver=E(L());var CHe=["title","titleId"];function jW(){return jW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var THe=function(t){var n=t.title,r=t.titleId,o=AHe(t,CHe);return a("svg",jW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.5a4.5 4.5 0 115 4.473V16H7v-5.027A4.5 4.5 0 013 6.5z"}))},RHe=THe;var ib={};$(ib,{icon:()=>FHe});var Uer=E(L());var zHe=["title","titleId"];function EW(){return EW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NHe=function(t){var n=t.title,r=t.titleId,o=DHe(t,zHe);return a("svg",EW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm.5 2h10a.5.5 0 110 1h-10a.5.5 0 010-1zm1 3h6a.5.5 0 010 1h-6a.5.5 0 010-1zm2 3h4a.5.5 0 010 1h-4a.5.5 0 010-1zm3 3h5a.5.5 0 110 1h-5a.5.5 0 110-1z"}))},FHe=NHe;var ab={};$(ab,{icon:()=>qHe});var Jer=E(L());var WHe=["title","titleId"];function PW(){return PW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VHe=function(t){var n=t.title,r=t.titleId,o=BHe(t,WHe);return a("svg",PW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 30H0V3h12.57l3 5H32v22zM2 28h28V10H14.43l-3-5H2v23z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z"}))},qHe=VHe;var lb={};$(lb,{icon:()=>XHe});var Xer=E(L());var UHe=["title","titleId"];function kW(){return kW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GHe=function(t){var n=t.title,r=t.titleId,o=$He(t,UHe);return a("svg",kW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M2.909 26.182h1.939v4.848H2.909z"}),a("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}),a("path",{className:"euiIcon__fillSecondary",d:"M14.545 16.485h1.939V31.03h-1.939z"}),a("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 101.94 0zm-.97 5.682a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.88z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.182 26.182h1.939v4.848h-1.939z"}),a("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}))},XHe=GHe;var sb={};$(sb,{icon:()=>eVe});var Yer=E(L());var KHe=["title","titleId"];function CW(){return CW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZHe=function(t){var n=t.title,r=t.titleId,o=YHe(t,KHe);return a("svg",CW({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M21 2.82L16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 7.282L16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282z"}),a("path",{d:"M7 5.045L2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M22 12.5L16 9l-6 3.5v7l6 3.5 6-3.5v-7zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59z"}))},eVe=ZHe;var ub={};$(ub,{icon:()=>iVe});var Zer=E(L());var tVe=["title","titleId"];function AW(){return AW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oVe=function(t){var n=t.title,r=t.titleId,o=rVe(t,tVe);return a("svg",AW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),a("path",{className:"euiIcon__fillSecondary",d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0121 19z"}))},iVe=oVe;var cb={};$(cb,{icon:()=>cVe});var ttr=E(L());var aVe=["title","titleId"];function MW(){return MW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uVe=function(t){var n=t.title,r=t.titleId,o=lVe(t,aVe);return a("svg",MW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M15.5 11.915L27 5.279 19.5.938a7.002 7.002 0 00-7 0l-8 4.62A7 7 0 001 11.62v9.237a7 7 0 003.5 6.061l7.5 4.33V17.98a7 7 0 013.5-6.063zM10 27.785v-9.808a9 9 0 014.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 00-5 0l-8 4.619A5 5 0 003 11.62v9.238a5 5 0 002.5 4.33l4.5 2.598z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M18.409 13.55a7.089 7.089 0 011.035 1.711A6.93 6.93 0 0120 17.98v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.239a6.992 6.992 0 00-1.587-4.421L18.409 13.55zm2.777.705A8.933 8.933 0 0122 17.979v9.807l4.5-2.598a5 5 0 002.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335z"}))},cVe=uVe;var pb={};$(pb,{icon:()=>hVe});var ntr=E(L());var pVe=["title","titleId"];function TW(){return TW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mVe=function(t){var n=t.title,r=t.titleId,o=fVe(t,pVe);return a("svg",TW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M15 0h2v32h-2z"}),a("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},hVe=mVe;var fb={};$(fb,{icon:()=>wVe});var itr=E(L());var gVe=["title","titleId"];function RW(){return RW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bVe=function(t){var n=t.title,r=t.titleId,o=vVe(t,gVe);return a("svg",RW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z"}),a("path",{d:"M30.73 24a6.47 6.47 0 01.45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 00-.54-2.81 6.47 6.47 0 01-.45-2.19 9.2 9.2 0 01.62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 01-2.09.64 5.3 5.3 0 01-.59 0L16 .28 6.77 8a5.3 5.3 0 01-.59 0 5.59 5.59 0 01-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 011.27 14a6.47 6.47 0 01-.45 2.19A8.55 8.55 0 00.28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 011.27 24a9.2 9.2 0 01-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 002.15-.63A5.59 5.59 0 016.18 30a7.13 7.13 0 012.29.47 8 8 0 002.62.53 7.37 7.37 0 002.47-.51A7.14 7.14 0 0116 30a6.24 6.24 0 012.14.45 8 8 0 002.77.55 8.08 8.08 0 002.77-.55 6.24 6.24 0 012.14-.45 5.59 5.59 0 012.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 01-.62-2.5zM21.17 7h-.26a8 8 0 00-2.77.55A6.24 6.24 0 0116 8a6.24 6.24 0 01-2.14-.45A8 8 0 0011.09 7h-.26L16 2.72 21.17 7zm8.89 22.27a4.42 4.42 0 01-1.34-.46 7.08 7.08 0 00-2.9-.82 8.14 8.14 0 00-2.78.55 6.13 6.13 0 01-2.13.45 6.24 6.24 0 01-2.14-.45A8 8 0 0016 28a9 9 0 00-3.08.6 5.74 5.74 0 01-1.83.4 6.36 6.36 0 01-2-.43A8.72 8.72 0 006.18 28a7.08 7.08 0 00-2.9.82 9.65 9.65 0 01-1.28.52 6.08 6.08 0 01.52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 00-.54-2.81A6.47 6.47 0 012.27 19a6.47 6.47 0 01.44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 00-.72-3.13 9 9 0 01-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 002.9.82A8.14 8.14 0 009 9.44 6.13 6.13 0 0111.09 9a6.13 6.13 0 012.13.45A8.14 8.14 0 0016 10a8.14 8.14 0 002.78-.55A6.13 6.13 0 0120.91 9a6.13 6.13 0 012.09.44 8.14 8.14 0 002.78.55 7.08 7.08 0 002.9-.82A9.65 9.65 0 0130 8.66a6.08 6.08 0 01-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 01.44 2.19 6.47 6.47 0 01-.44 2.19 8.55 8.55 0 00-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 01.59 2.16v-.02z"}))},wVe=bVe;var db={};$(db,{icon:()=>IVe});var ltr=E(L());var OVe=["title","titleId"];function zW(){return zW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ve(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SVe=function(t){var n=t.title,r=t.titleId,o=xVe(t,OVe);return a("svg",zW({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M22.5 24a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0 2a7.5 7.5 0 100-15 7.5 7.5 0 000 15z"}),a("path",{d:"M30.293 27.707l-4-4 1.414-1.414 4 4-1.414 1.414zM6 4H2v27h25v-3h-2v1H4V6h2V4zm19 6h2V4h-4v2h2v4z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M16.381 3.024l.538 1.158h2.274l.636 2.545H9.68l.637-2.545h2.558l.538-1.158c.292-.63.955-1.024 1.484-1.024.53 0 1.193.394 1.485 1.024zm6.01 5.703l-1.636-6.545h-2.56C17.6.898 16.262 0 14.897 0c-1.364 0-2.703.898-3.299 2.182H8.755L7.118 8.727h15.273zM7 15h6v-2H7v2zm6 5H7v-2h6v2zm-6 5h6v-2H7v2z"}))},IVe=SVe;var mb={};$(mb,{icon:()=>CVe});var utr=E(L());var jVe=["title","titleId"];function DW(){return DW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kVe=function(t){var n=t.title,r=t.titleId,o=EVe(t,jVe);return a("svg",DW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.276 29l.594 2H0l7.621-14.29.811 2.73L3.333 29h7.943zM28.92 31l-4.987-16.598A16 16 0 008.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0117.241 12.828L31 31h-2.08z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12.037 14.02L16.492 29h6.827l-2.333-7.849a10 10 0 00-8.949-7.13zM9.35 12h2.05a12 12 0 0111.503 8.581L26 31H15L9.35 12z"}))},CVe=kVe;var hb={};$(hb,{icon:()=>zVe});var ptr=E(L());var AVe=["title","titleId"];function LW(){return LW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RVe=function(t){var n=t.title,r=t.titleId,o=MVe(t,AVe);return a("svg",LW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 32H3a3 3 0 01-3-3V14a3 3 0 013-3h26a3 3 0 013 3v15a3 3 0 01-3 3zM3 13a1 1 0 00-1 1v15a1 1 0 001 1h26a1 1 0 001-1V14a1 1 0 00-1-1H3z"}),a("path",{d:"M7.29 17.71l3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},zVe=RVe;var gb={};$(gb,{icon:()=>WVe});var dtr=E(L());var DVe=["title","titleId"];function NW(){return NW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FVe=function(t){var n=t.title,r=t.titleId,o=LVe(t,DVe);return a("svg",NW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 01-9-9zM18 3h-2v2h2a9 9 0 019 9h2c0-6.075-4.925-11-11-11z"}))},WVe=FVe;var vb={};$(vb,{icon:()=>UVe});var htr=E(L());var BVe=["title","titleId"];function FW(){return FW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qVe=function(t){var n=t.title,r=t.titleId,o=HVe(t,BVe);return a("svg",FW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12 20H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{d:"M12 31H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 31h-9a3 3 0 01-3-3V14a3 3 0 013-3h9a3 3 0 013 3v14a3 3 0 01-3 3zm-9-18a1 1 0 00-1 1v14a1 1 0 001 1h9a1 1 0 001-1V14a1 1 0 00-1-1h-9z"}))},UVe=qVe;var yb={};$(yb,{icon:()=>KVe});var vtr=E(L());var $Ve=["title","titleId"];function WW(){return WW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XVe=function(t){var n=t.title,r=t.titleId,o=JVe(t,$Ve);return a("svg",WW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0021 3.52V11H11V3.52a9 9 0 001.4 15.73l.6.26V28h-2v-7.21A11 11 0 0111.6.92L13 .31V9h6V.31l1.4.61a11 11 0 01.6 19.87V28z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 30h10v2H11z"}))},KVe=XVe;var bb={};$(bb,{icon:()=>tqe});var btr=E(L());var YVe=["title","titleId"];function BW(){return BW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eqe=function(t){var n=t.title,r=t.titleId,o=QVe(t,YVe);return a("svg",BW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z"}),a("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0016 0zm1 29.95V28h-2v1.95A14 14 0 012.05 17H4v-2H2.05A14 14 0 0115 2.05V4h2V2.05A14 14 0 0129.95 15H28v2h1.95A14 14 0 0117 29.95z"}))},tqe=eqe;var wb={};$(wb,{icon:()=>aqe});var Otr=E(L());var rqe=["title","titleId"];function HW(){return HW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iqe=function(t){var n=t.title,r=t.titleId,o=nqe(t,rqe);return a("svg",HW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M3 22h3v2H1V1h23v5h-2V3H3z"}),a("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521zM31 8v23H8V8h23z"}))},aqe=iqe;var Ob={};$(Ob,{icon:()=>pqe});var _tr=E(L());var lqe=["title","titleId"];function VW(){return VW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cqe=function(t){var n=t.title,r=t.titleId,o=sqe(t,lqe);return a("svg",VW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z"}),a("path",{d:"M21.41 0H5a3 3 0 00-3 3v26a3 3 0 003 3h22a3 3 0 003-3V8.59L21.41 0zM22 3.41L26.59 8H22V3.41zM27 30H5a1 1 0 01-1-1V3a1 1 0 011-1h15v8h8v19a1 1 0 01-1 1z"}))},pqe=cqe;var xb={};$(xb,{icon:()=>gqe});var Itr=E(L());var fqe=["title","titleId"];function qW(){return qW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hqe=function(t){var n=t.title,r=t.titleId,o=dqe(t,fqe);return a("svg",qW({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.996 18.636L0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733zM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 22.166l-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4z"}))},gqe=hqe;var _b={};$(_b,{icon:()=>Oqe});var Etr=E(L());var vqe=["title","titleId"];function UW(){return UW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wqe=function(t){var n=t.title,r=t.titleId,o=yqe(t,vqe);return a("svg",UW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M29.014 23.89l2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074zm-4.972-7.482l7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584z"}),a("path",{d:"M18 9a2 2 0 10-4 0 2 2 0 004 0zm2 0a4 4 0 11-8 0 4 4 0 018 0zm-3.268 12.681l-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 017 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 01-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96zm5.142-9.064A6.747 6.747 0 0023 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912z"}))},Oqe=wqe;var Sb={};$(Sb,{icon:()=>jqe});var ktr=E(L());var xqe=["title","titleId"];function $W(){return $W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iqe=function(t){var n=t.title,r=t.titleId,o=_qe(t,xqe);return a("svg",$W({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M24 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4zm-8.2-5.62A4 4 0 1118 1.06a4 4 0 01-2.2 7.32zm0-6a2 2 0 10.01 0h-.01zm.01 29.24a4 4 0 11-.083-8 4 4 0 01.083 8zm0-6a2 2 0 10.39 0 2 2 0 00-.4 0h.01z"}),a("path",{d:"M18 17v-2h-6.14a4 4 0 00-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 008 12a4 4 0 100 8 4 4 0 001.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 00.86-1.64H18zM6 16a2 2 0 114 0 2 2 0 01-4 0z"}))},jqe=Iqe;var Ib={};$(Ib,{icon:()=>Aqe});var Atr=E(L());var Eqe=["title","titleId"];function JW(){return JW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cqe=function(t){var n=t.title,r=t.titleId,o=Pqe(t,Eqe);return a("svg",JW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 01-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 01.543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 01.544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.212 15.515h-2.007a7.758 7.758 0 00-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 00-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 006.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 006.72-6.72h2.007v-1.94zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 01-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 014.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 014.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 01-4.761 4.76z"}))},Aqe=Cqe;var jb={};$(jb,{icon:()=>Dqe});var Ttr=E(L());var Mqe=["title","titleId"];function GW(){return GW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zqe=function(t){var n=t.title,r=t.titleId,o=Tqe(t,Mqe);return a("svg",GW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.14 15.39a8.058 8.058 0 01-2.2-4.043A6.788 6.788 0 014.198 5.47a6.73 6.73 0 018.727-.213l1.26-1.464a8.65 8.65 0 00-11.277.232A8.727 8.727 0 00.068 11.6a10.172 10.172 0 002.793 5.275l1.28-1.484z"}),a("path",{d:"M15.515 31.274L4.548 18.454 15.855 4.763a8.67 8.67 0 0112.266-.746 8.727 8.727 0 012.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275zm-8.427-12.82l8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 00-2.24-5.586 6.73 6.73 0 00-9.504.563L7.088 18.455z"}))},Dqe=zqe;var Eb={};$(Eb,{icon:()=>Bqe});var ztr=E(L());var Lqe=["title","titleId"];function XW(){return XW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wqe=function(t){var n=t.title,r=t.titleId,o=Nqe(t,Lqe);return a("svg",XW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM23 8V6h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0017 2.1V0h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0011.1 6H9v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V14h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0020.9 8H23zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M16 8a1 1 0 01-1-1 1.39 1.39 0 010-.2.65.65 0 01.06-.18.74.74 0 01.09-.18 1.61 1.61 0 01.12-.15.93.93 0 01.33-.21 1 1 0 011.09.21l.12.15a.78.78 0 01.09.18.62.62 0 01.1.18 1.27 1.27 0 010 .2 1 1 0 01-1 1z"}))},Bqe=Wqe;var Pb={};$(Pb,{icon:()=>$qe});var Ltr=E(L());var Hqe=["title","titleId"];function KW(){return KW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uqe=function(t){var n=t.title,r=t.titleId,o=Vqe(t,Hqe);return a("svg",KW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20 14h-8a3 3 0 01-3-3V3a3 3 0 013-3h8a3 3 0 013 3v8a3 3 0 01-3 3zM12 2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V3a1 1 0 00-1-1h-8zM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM13 4h6v2h-6zM13 8h6v2h-6z"}))},$qe=Uqe;var kb={};$(kb,{icon:()=>Yqe});var Ftr=E(L());var Jqe=["title","titleId"];function YW(){return YW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kqe=function(t){var n=t.title,r=t.titleId,o=Gqe(t,Jqe);return a("svg",YW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 26v-2h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0026 20.1V18h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0020.1 24H18v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V32h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0029.9 26H32zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M25.71 24.29a1 1 0 00-1.09-.21 1.15 1.15 0 00-.33.21.93.93 0 00-.21.33 1 1 0 001.3 1.3 1.15 1.15 0 00.33-.21 1 1 0 00.21-1.09.94.94 0 00-.21-.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z"}),a("path",{d:"M16 32H3a3 3 0 01-3-3V3a3 3 0 013-3h20a3 3 0 013 3v13h-2V3a1 1 0 00-1-1H3a1 1 0 00-1 1v26a1 1 0 001 1h13v2z"}))},Yqe=Kqe;var Cb={};$(Cb,{icon:()=>rUe});var Btr=E(L());var Qqe=["title","titleId"];function QW(){return QW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tUe=function(t){var n=t.title,r=t.titleId,o=Zqe(t,Qqe);return a("svg",QW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M23.793 14.293l1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091zM12 11v5l-2 2v-7h2zm10-6v8l-2 2V5h2zm-5 3v7l-2-2V8h2z"}),a("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 012 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0117 0zM9.621 1.937l.75 1.877a13.062 13.062 0 00-4.82 5.024l-1.907-.673a15.068 15.068 0 015.977-6.228z"}))},rUe=tUe;var Ab={};$(Ab,{icon:()=>lUe});var Vtr=E(L());var nUe=["title","titleId"];function ZW(){return ZW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aUe=function(t){var n=t.title,r=t.titleId,o=oUe(t,nUe);return a("svg",ZW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 002 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.997 30.636L27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z"}))},lUe=aUe;var Mb={};$(Mb,{icon:()=>fUe});var Utr=E(L());var sUe=["title","titleId"];function eB(){return eB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pUe=function(t){var n=t.title,r=t.titleId,o=uUe(t,sUe);return a("svg",eB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M20 32h-8v-4.06a1 1 0 00-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 00.2-1 .93.93 0 00-.86-.6H0V12h4.06a.92.92 0 00.85-.58.94.94 0 00-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0012 4.06V0h8v4.06a1 1 0 001.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 00-.2 1 .93.93 0 00.86.6H32v8h-4.06a.92.92 0 00-.85.58.94.94 0 00.19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 00-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 015-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 012.08-5H30v-4h-2.06a3 3 0 01-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 01-5-2.08V2h-4v2.06a3 3 0 01-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 01-2.08 5H2v4h2.06a3 3 0 012.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 015 2.08V30z"}))},fUe=pUe;var Tb={};$(Tb,{icon:()=>vUe});var Jtr=E(L());var dUe=["title","titleId"];function tB(){return tB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gUe=function(t){var n=t.title,r=t.titleId,o=mUe(t,dUe);return a("svg",tB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12z"}),a("path",{d:"M21.71 11.71L20.3 10.3 18 12.57a4 4 0 00-2-.57 4 4 0 104 4 4 4 0 00-.57-2l2.28-2.29zM16 18a2 2 0 110-4 2 2 0 010 4z"}))},vUe=gUe;var Rb={};$(Rb,{icon:()=>xUe});var Xtr=E(L());var yUe=["title","titleId"];function rB(){return rB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OUe=function(t){var n=t.title,r=t.titleId,o=bUe(t,yUe);return a("svg",rB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 018 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0028 11a9 9 0 10-17.34 3.391l-1.51 1.51z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19 20a8.96 8.96 0 005.618-1.968l-4.202-4.204a2 2 0 00-2.828 0l-4.205 4.205A8.96 8.96 0 0019 20zm-2.826-7.586a4 4 0 015.656 0l5.656 5.657-.707.707A10.967 10.967 0 0119 22a10.967 10.967 0 01-7.778-3.221l-.707-.707 5.659-5.658z"}))},xUe=OUe;var zb={};$(zb,{icon:()=>EUe});var Ytr=E(L());var _Ue=["title","titleId"];function nB(){return nB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jUe=function(t){var n=t.title,r=t.titleId,o=SUe(t,_Ue);return a("svg",nB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M10 18v.56a1 1 0 01-.68.95L3 21.61V10a1 1 0 01.4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 001 10v12a3 3 0 001.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0012 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 01.4.8v11.61l-6.32-2.11a1 1 0 01-.68-.95V18h-2v.56a3 3 0 002.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0031 22V10a3 3 0 00-1.2-2.4z"}),a("path",{d:"M11 6A3 3 0 018.88.88a3.07 3.07 0 014.24 0A3 3 0 0111 6zm0-4a1 1 0 10-.012 2A1 1 0 0011 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 32zm0-4a1 1 0 10-.012 2A1 1 0 0011 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 16zm0-4a1 1 0 10-.012 2A1 1 0 0011 12zm10-6A3 3 0 0118.88.88a3.07 3.07 0 014.24 0A3 3 0 0121 6zm0-4a1 1 0 10-.012 2A1 1 0 0021 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 32zm0-4a1 1 0 10-.012 2A1 1 0 0021 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 16zm0-4a1 1 0 10-.012 2A1 1 0 0021 12z"}))},EUe=jUe;var Db={};$(Db,{icon:()=>MUe});var Ztr=E(L());var PUe=["title","titleId"];function oB(){return oB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AUe=function(t){var n=t.title,r=t.titleId,o=kUe(t,PUe);return a("svg",oB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.81 15.19A8.94 8.94 0 0115.62 3.86l.38.42.38-.42a8.94 8.94 0 0114.26 10.68l-1.7-1.07a6.94 6.94 0 00-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 003.41 14l-1.6 1.19zM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16.16 23.29l-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z"}))},MUe=AUe;var Lb={};$(Lb,{icon:()=>LUe});var trr=E(L());var TUe=["title","titleId"];function iB(){return iB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DUe=function(t){var n=t.title,r=t.titleId,o=RUe(t,TUe);return a("svg",iB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22z"}),a("path",{d:"M27 7v23H8v2h21V7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8 12h12v2H8zM8 17h12v2H8z"}))},LUe=DUe;var Nb={};$(Nb,{icon:()=>HUe});var nrr=E(L());var NUe=["title","titleId"];function aB(){return aB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BUe=function(t){var n=t.title,r=t.titleId,o=FUe(t,NUe);return a("svg",aB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M8 4a4 4 0 10-4 4 4 4 0 002-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 008 4zM4 6a2 2 0 110-4 2 2 0 010 4zm16.71 6.71L26 7.43A4 4 0 0028 8a4 4 0 10-4-4 4 4 0 00.57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 110 4 2 2 0 010-4zM11.29 19.29L6 24.57A4 4 0 004 24a4 4 0 104 4 4 4 0 00-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 110-4 2 2 0 010 4zm24-6a4 4 0 00-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 00-.57 2 4 4 0 104-4zm0 6a2 2 0 110-4 2 2 0 010 4z"}))},HUe=BUe;var Fb={};$(Fb,{icon:()=>JUe});var irr=E(L());var VUe=["title","titleId"];function lB(){return lB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ue=function(t){var n=t.title,r=t.titleId,o=qUe(t,VUe);return a("svg",lB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 12a3 3 0 00-3 3h-4a3 3 0 00-3-3h-6a3 3 0 00-3 3H6a3 3 0 00-3-3H0v14h3a3 3 0 003-3h4a3 3 0 003 3h6a3 3 0 003-3h4a3 3 0 003 3h3V12h-3zM3 24H2V14h1a1 1 0 011 1v8a1 1 0 01-1 1zm17-3v2a1 1 0 01-1 1h-6a1 1 0 01-1-1v-2H6v-4h6v-2a1 1 0 011-1h6a1 1 0 011 1v2h6v4h-6zm10 3h-1a1 1 0 01-1-1v-8a1 1 0 011-1h1v10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 6H10v2h5v2h2V8h5z"}))},JUe=$Ue;var Wb={};$(Wb,{icon:()=>QUe});var lrr=E(L());var GUe=["title","titleId"];function sB(){return sB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YUe=function(t){var n=t.title,r=t.titleId,o=XUe(t,GUe);return a("svg",sB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M15 4h2v9.17A3.009 3.009 0 0118.83 15H26v2h-7.17A3.001 3.001 0 1115 13.17V4zm1 13a1 1 0 100-2 1 1 0 000 2z"}))},QUe=YUe;var Bb={};$(Bb,{icon:()=>n$e});var urr=E(L());var ZUe=["title","titleId"];function uB(){return uB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r$e=function(t){var n=t.title,r=t.titleId,o=e$e(t,ZUe);return a("svg",uB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 5h-.17v2H25a1 1 0 011 1v20a1 1 0 01-1 1H7a1 1 0 01-1-1V8a1 1 0 011-1h.17V5H7a3 3 0 00-3 3v20a3 3 0 003 3h18a3 3 0 003-3V8a3 3 0 00-3-3z"}),a("path",{d:"M23 3h-3V0h-8v3H9v6h14V3zm-2 4H11V5h3V2h4v3h3v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z"}))},n$e=r$e;var Hb={};$(Hb,{icon:()=>s$e});var prr=E(L());var o$e=["title","titleId"];function cB(){return cB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l$e=function(t){var n=t.title,r=t.titleId,o=i$e(t,o$e);return a("svg",cB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M20.38 7.001L17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z"}),a("path",{d:"M21.06.165l-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164zM2 9.57l13 8.407v10.279L2 19.84V9.57zm15 18.676V17.978l13-8.407V19.85l-13 8.397z"}))},s$e=l$e;var Vb={};$(Vb,{icon:()=>d$e});var drr=E(L());var u$e=["title","titleId"];function pB(){return pB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f$e=function(t){var n=t.title,r=t.titleId,o=c$e(t,u$e);return a("svg",pB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M11.63 8h7.38v2h-7.38z"}),a("path",{d:"M7 8h3.19v2H7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M7 16h7.38v2H7z"}),a("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),a("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0013 0zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11zM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},d$e=f$e;var qb={};$(qb,{icon:()=>y$e});var hrr=E(L());var m$e=["title","titleId"];function fB(){return fB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v$e=function(t){var n=t.title,r=t.titleId,o=h$e(t,m$e);return a("svg",fB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 32l-.36-.14A21.07 21.07 0 010 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 01-13.64 19.78L14 32zM2 6.82v5.25a19.08 19.08 0 0012 17.77 19.08 19.08 0 0012-17.77V6.82L14 2.2 2 6.82z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 102 0zM10 14a1 1 0 110-2 1 1 0 010 2zM17 7h2v5.17h-2zM21 17a3 3 0 10-4 2.82V23h2v-3.18A3 3 0 0021 17zm-3 1a1 1 0 110-2 1 1 0 010 2z"}))},y$e=v$e;var Ub={};$(Ub,{icon:()=>_$e});var vrr=E(L());var b$e=["title","titleId"];function dB(){return dB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x$e=function(t){var n=t.title,r=t.titleId,o=w$e(t,b$e);return a("svg",dB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z"}),a("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},_$e=x$e;var $b={};$($b,{icon:()=>P$e});var brr=E(L());var S$e=["title","titleId"];function mB(){return mB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E$e=function(t){var n=t.title,r=t.titleId,o=I$e(t,S$e);return a("svg",mB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z"}),a("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 22h6v2h-6z"}))},P$e=E$e;var Jb={};$(Jb,{icon:()=>T$e});var Orr=E(L());var k$e=["title","titleId"];function hB(){return hB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M$e=function(t){var n=t.title,r=t.titleId,o=C$e(t,k$e);return a("svg",hB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z"}),a("path",{d:"M29 32H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v26a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v26a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},T$e=M$e;var Gb={};$(Gb,{icon:()=>N$e});var _rr=E(L());var R$e=["title","titleId"];function gB(){return gB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L$e=function(t){var n=t.title,r=t.titleId,o=z$e(t,R$e);return a("svg",gB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 4v20.34L16 32l12-7.64V4H4zm22 2v4h-4a3 3 0 00-3 3v5h-6v-5a3 3 0 00-3-3H6V6h20zm-7.87 14L16 22.52 13.87 20h4.26zM6 12h4a1 1 0 011 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12zm7.81 16.22l2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39zm6.08-1.09l-2.58-3.06L21 19.7V13a1 1 0 011-1h4v11.24l-6.11 3.89z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 0h24v2H4z"}))},N$e=L$e;var Xb={};$(Xb,{icon:()=>V$e});var Irr=E(L());var F$e=["title","titleId"];function vB(){return vB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H$e=function(t){var n=t.title,r=t.titleId,o=W$e(t,F$e);return a("svg",vB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M27.42 19.69a12 12 0 01-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0027 1.23l-1.97-.62zm2.23-6.77a14 14 0 00-27-1.23l1.9.62a12 12 0 0123.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},V$e=H$e;var Kb={};$(Kb,{icon:()=>G$e});var Err=E(L());var q$e=["title","titleId"];function yB(){return yB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J$e=function(t){var n=t.title,r=t.titleId,o=U$e(t,q$e);return a("svg",yB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.216 12.377A10.948 10.948 0 002.181 17H.153a12.941 12.941 0 012.693-6.118l1.37 1.495zm2.948-2.703l-1.37-1.495A12.94 12.94 0 0113 6v2c-2.144 0-4.144.613-5.836 1.674z"}),a("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414zm-7.836 9.909l1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764z"}))},G$e=J$e;var Yb={};$(Yb,{icon:()=>Z$e});var krr=E(L());var X$e=["title","titleId"];function bB(){return bB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q$e=function(t){var n=t.title,r=t.titleId,o=K$e(t,X$e);return a("svg",bB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M19.307 3.21a2.91 2.91 0 10-.223 1.94 11.636 11.636 0 018.232 7.049l1.775-.698a13.576 13.576 0 00-9.784-8.291zm-2.822 1.638a.97.97 0 110-1.939.97.97 0 010 1.94zm-4.267.805l-.717-1.774a13.576 13.576 0 00-8.291 9.784 2.91 2.91 0 101.94.223 11.636 11.636 0 017.068-8.233zm-8.34 11.802a.97.97 0 110-1.94.97.97 0 010 1.94zm12.607 8.727a2.91 2.91 0 00-2.599 1.62 11.636 11.636 0 01-8.233-7.05l-1.774.717a13.576 13.576 0 009.813 8.291 2.91 2.91 0 102.793-3.578zm0 3.879a.97.97 0 110-1.94.97.97 0 010 1.94zM32 16.485a2.91 2.91 0 10-4.199 2.599 11.636 11.636 0 01-7.05 8.232l.718 1.775a13.576 13.576 0 008.291-9.813A2.91 2.91 0 0032 16.485zm-2.91.97a.97.97 0 110-1.94.97.97 0 010 1.94z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19.19 16.35a3.879 3.879 0 10-5.42 0 4.848 4.848 0 00-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 00-2.143-4.014zm-4.645-2.774a1.94 1.94 0 113.88 0 1.94 1.94 0 01-3.88 0zm-.97 6.788a2.91 2.91 0 115.819 0h-5.818z"}))},Z$e=Q$e;var Qb={};$(Qb,{icon:()=>oJe});var Arr=E(L());var eJe=["title","titleId"];function wB(){return wB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nJe=function(t){var n=t.title,r=t.titleId,o=tJe(t,eJe);return a("svg",wB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M32 32H4a4 4 0 01-4-4V0h2v28a2 2 0 002 2h28v2z"}),a("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),a("path",{d:"M27 6a3 3 0 00-2.08.84L20 4.36A2.2 2.2 0 0020 4a3 3 0 00-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 007 9a3 3 0 103 3 2.93 2.93 0 00-.18-1l5.6-4.48A3 3 0 0017 7a3 3 0 002.08-.84l5 2.48A2.2 2.2 0 0024 9a3 3 0 103-3zM7 13a1 1 0 110-2 1 1 0 010 2zm10-8a1 1 0 110-2 1 1 0 010 2zm10 5a1 1 0 110-2 1 1 0 010 2z"}))},oJe=nJe;var Zb={};$(Zb,{icon:()=>uJe});var Trr=E(L());var iJe=["title","titleId"];function OB(){return OB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sJe=function(t){var n=t.title,r=t.titleId,o=aJe(t,iJe);return a("svg",OB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.74 7.73l-1.5-1.32a13 13 0 000 17.19l1.5-1.32a11 11 0 010-14.54v-.01z"}),a("path",{d:"M6.51 3.66L5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75l-1.5 1.32a11 11 0 010 14.54l1.5 1.32a13 13 0 000-17.19v.01z"}),a("path",{d:"M27 2.34l-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 15a5 5 0 10-6 4.9V31h2V19.9a5 5 0 004-4.9zm-5 3a3 3 0 110-6 3 3 0 010 6z"}))},uJe=sJe;var e3={};$(e3,{icon:()=>mJe});var zrr=E(L());var cJe=["title","titleId"];function xB(){return xB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dJe=function(t){var n=t.title,r=t.titleId,o=pJe(t,cJe);return a("svg",xB({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 001.953-4.826 9.112 9.112 0 00-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1zm6.118 7.523l-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 011.774-1.853zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 01-.023.912z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 001.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199zm-6.148 23.842l.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 00-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477z"}))},mJe=dJe;var t3={};$(t3,{icon:()=>bJe});var Lrr=E(L());var hJe=["title","titleId"];function _B(){return _B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yJe=function(t){var n=t.title,r=t.titleId,o=gJe(t,hJe);return a("svg",_B({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V2h2v2H2zm5 0V2h2v2H7zm5 0V2h2v2h-2zM2 9V7h2v2H2zm5 0V7h2v2H7zm5 0V7h2v2h-2zM2 14v-2h2v2H2zm5 0v-2h2v2H7zm5 0v-2h2v2h-2z"}))},bJe=yJe;var r3={};$(r3,{icon:()=>SJe});var Frr=E(L());var wJe=["title","titleId"];function SB(){return SB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Je=function(t){var n=t.title,r=t.titleId,o=OJe(t,wJe);return a("svg",SB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.857 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{d:"M10.5 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}))},SJe=_Je;var n3={};$(n3,{icon:()=>kJe});var Brr=E(L());var IJe=["title","titleId"];function IB(){return IB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PJe=function(t){var n=t.title,r=t.titleId,o=jJe(t,IJe);return a("svg",IB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.135 14.043a.75.75 0 00.025-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 00-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.76.31 1.06.024z"}))},kJe=PJe;var o3={};$(o3,{icon:()=>RJe});var Vrr=E(L());var CJe=["title","titleId"];function jB(){return jB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TJe=function(t){var n=t.title,r=t.titleId,o=AJe(t,CJe);return a("svg",jB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 4.982a.75.75 0 011.06-.025l4.81 4.591a.25.25 0 00.346 0l4.81-4.59a.75.75 0 011.035 1.085l-4.81 4.59a1.75 1.75 0 01-2.416 0l-4.81-4.59a.75.75 0 01-.025-1.06z"}))},RJe=TJe;var i3={};$(i3,{icon:()=>FJe});var Urr=E(L());var zJe=["title","titleId"];function EB(){return EB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NJe=function(t){var n=t.title,r=t.titleId,o=DJe(t,zJe);return a("svg",EB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.018 14.043a.75.75 0 00.024-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.761.31 1.06.024z"}))},FJe=NJe;var a3={};$(a3,{icon:()=>qJe});var Jrr=E(L());var WJe=["title","titleId"];function PB(){return PB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VJe=function(t){var n=t.title,r=t.titleId,o=BJe(t,WJe);return a("svg",PB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.982 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},qJe=VJe;var l3={};$(l3,{icon:()=>XJe});var Xrr=E(L());var UJe=["title","titleId"];function kB(){return kB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GJe=function(t){var n=t.title,r=t.titleId,o=$Je(t,UJe);return a("svg",kB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 01.346 0l4.81 4.59a.75.75 0 001.035-1.085l-4.81-4.59a1.75 1.75 0 00-2.416 0l-4.81 4.59a.75.75 0 00-.025 1.06z"}))},XJe=GJe;var s3={};$(s3,{icon:()=>eGe});var Yrr=E(L());var KJe=["title","titleId"];function CB(){return CB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZJe=function(t){var n=t.title,r=t.titleId,o=YJe(t,KJe);return a("svg",CB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.928 8.468L4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},eGe=ZJe;var u3={};$(u3,{icon:()=>iGe});var Zrr=E(L());var tGe=["title","titleId"];function AB(){return AB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oGe=function(t){var n=t.title,r=t.titleId,o=rGe(t,tGe);return a("svg",AB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925zM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0112.461 15H3.54a1 1 0 01-.914-1.406L6 6V2z"}))},iGe=oGe;var c3={};$(c3,{icon:()=>cGe});var tnr=E(L());var aGe=["title","titleId"];function MB(){return MB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uGe=function(t){var n=t.title,r=t.titleId,o=lGe(t,aGe);return a("svg",MB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 10-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 00-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 110-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 013.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 01.102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 110 1c-.604 0-1.033-.147-1.341-.5zM5.5 14h4a2 2 0 11-4 0z"}))},cGe=uGe;var p3={};$(p3,{icon:()=>hGe});var nnr=E(L());var pGe=["title","titleId"];function TB(){return TB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mGe=function(t){var n=t.title,r=t.titleId,o=fGe(t,pGe);return a("svg",TB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 14l-.005.15a2 2 0 01-3.972.153l-.018-.154L5.5 14h4zm5.38-12.825a.5.5 0 01.008.64l-.063.065-14 12a.5.5 0 01-.713-.695l.063-.065 14-12a.5.5 0 01.705.055zM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 110 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763zM7.5 0a2 2 0 011.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 00-1.591-.36 1 1 0 10-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 017.5 0z"}))},hGe=mGe;var f3={};$(f3,{icon:()=>wGe});var inr=E(L());var gGe=["title","titleId"];function RB(){return RB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bGe=function(t){var n=t.title,r=t.titleId,o=vGe(t,gGe);return a("svg",RB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.04 13.274a.5.5 0 10.892.453l3.014-5.931a.5.5 0 00-.445-.727H5.316L8.03 1.727a.5.5 0 10-.892-.453L4.055 7.343a.5.5 0 00.446.726h5.185L7.04 13.274z"}))},wGe=bGe;var d3={};$(d3,{icon:()=>IGe});var lnr=E(L());var OGe=["title","titleId"];function zB(){return zB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ge(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SGe=function(t){var n=t.title,r=t.titleId,o=xGe(t,OGe);return a("svg",zB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 6h4v4H0V6zm1 1v2h2V7H1zm5-1h4v4H6V6zm1 1v2h2V7H7zm5-1h4v4h-4V6zm1 3h2V7h-2v2z"}))},IGe=SGe;var m3={};$(m3,{icon:()=>CGe});var unr=E(L());var jGe=["title","titleId"];function DB(){return DB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kGe=function(t){var n=t.title,r=t.titleId,o=EGe(t,jGe);return a("svg",DB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1v2h2V1H7zM6 0h4v4H6V0zm0 6h4v4H6V6zm1 1v2h2V7H7zm-1 5h4v4H6v-4zm1 1v2h2v-2H7z"}))},CGe=kGe;var h3={};$(h3,{icon:()=>zGe});var pnr=E(L());var AGe=["title","titleId"];function LB(){return LB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RGe=function(t){var n=t.title,r=t.titleId,o=MGe(t,AGe);return a("svg",LB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 10.038a3.49 3.49 0 012.5-1.05h2a2.5 2.5 0 002.462-2.061 2 2 0 111.008.017A3.5 3.5 0 019.5 9.987h-2a2.5 2.5 0 00-2.466 2.085A2 2 0 114 12.063V3.937a2 2 0 111 0v6.1zM4.5 3a1 1 0 100-2 1 1 0 000 2zm0 12a1 1 0 100-2 1 1 0 000 2zm8-9a1 1 0 100-2 1 1 0 000 2z"}))},zGe=RGe;var g3={};$(g3,{icon:()=>WGe});var dnr=E(L());var DGe=["title","titleId"];function NB(){return NB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FGe=function(t){var n=t.title,r=t.titleId,o=LGe(t,DGe);return a("svg",NB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 00-2.5 1.05v-4.1a2 2 0 10-1 0v6.126a2 2 0 101.034.01A2.5 2.5 0 016 8.986h1a3.5 3.5 0 003.47-3.043 2 2 0 10-1.009-.017A2.5 2.5 0 017 7.987H6zM4 3a1 1 0 11-2 0 1 1 0 012 0zm0 10a1 1 0 11-2 0 1 1 0 012 0zm7-9a1 1 0 11-2 0 1 1 0 012 0z",clipRule:"evenodd"}),a("path",{d:"M13.5 10.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},WGe=FGe;var v3={};$(v3,{icon:()=>UGe});var hnr=E(L());var BGe=["title","titleId"];function FB(){return FB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qGe=function(t){var n=t.title,r=t.titleId,o=HGe(t,BGe);return a("svg",FB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.732 13.096l-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 000-1.414L5.658 7.95a.993.993 0 00-.708-.293.994.994 0 00-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 010 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 011.415-.586zM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1z"}))},UGe=qGe;var y3={};$(y3,{icon:()=>KGe});var vnr=E(L());var $Ge=["title","titleId"];function WB(){return WB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XGe=function(t){var n=t.title,r=t.titleId,o=JGe(t,$Ge);return a("svg",WB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658V1.005h1.262v4.653H4zm2.261 0V1.005h1.244v4.653H6.26zm2.244 0V1.005h1.235v4.653H8.504zm2.234 0V1.005h1.254v4.653h-1.254zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},KGe=XGe;var b3={};$(b3,{icon:()=>tXe});var bnr=E(L());var YGe=["title","titleId"];function BB(){return BB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eXe=function(t){var n=t.title,r=t.titleId,o=QGe(t,YGe);return a("svg",BB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.651 5.126l.922-.455.884-2.343a.5.5 0 01.939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0111 7h1.043l2.3 2.198a.5.5 0 01-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 01-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 11-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 015.095 8h-.74l-2.01 1.92a.5.5 0 01-.69-.722L3.952 7H5a5.3 5.3 0 01.075-.892L3.623 5.39 2.6 2.672a.5.5 0 11.939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 112.83 0h.568c.27.318.497.699.667 1.126zM8 4a.5.5 0 100-1 .5.5 0 000 1zm1.751 1.571A3.326 3.326 0 009.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 00.09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 00.296-.807 4.263 4.263 0 00.09-1.466 3.988 3.988 0 00-.224-.959z"}))},tXe=eXe;var w3={};$(w3,{icon:()=>aXe});var Onr=E(L());var rXe=["title","titleId"];function HB(){return HB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iXe=function(t){var n=t.title,r=t.titleId,o=nXe(t,rXe);return a("svg",HB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 108 2a6 6 0 000 12zm0 1A7 7 0 118 1a7 7 0 010 14zm0-3a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 110-6 3 3 0 010 6zm0-2a1 1 0 100-2 1 1 0 000 2z"}))},aXe=iXe;var O3={};$(O3,{icon:()=>pXe});var _nr=E(L());var lXe=["title","titleId"];function VB(){return VB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cXe=function(t){var n=t.title,r=t.titleId,o=sXe(t,lXe);return a("svg",VB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0112.994 15H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z",fillRule:"evenodd"}))},pXe=cXe;var x3={};$(x3,{icon:()=>gXe});var Inr=E(L());var fXe=["title","titleId"];function qB(){return qB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hXe=function(t){var n=t.title,r=t.titleId,o=dXe(t,fXe);return a("svg",qB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 01-.354-.146l-4-4a.502.502 0 01.708-.708L6.5 10.793l6.646-6.647a.502.502 0 01.708.708l-7 7A.502.502 0 016.5 12"}))},gXe=hXe;var _3={};$(_3,{icon:()=>OXe});var Enr=E(L());var vXe=["title","titleId"];function UB(){return UB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wXe=function(t){var n=t.title,r=t.titleId,o=yXe(t,vXe);return a("svg",UB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 16A8 8 0 118 0a8 8 0 010 16zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 00-.7.714l2.909 2.857a.5.5 0 00.7 0l5.091-5a.5.5 0 10-.7-.714z"}))},OXe=wXe;var S3={};$(S3,{icon:()=>jXe});var knr=E(L());var xXe=["title","titleId"];function $B(){return $B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IXe=function(t){var n=t.title,r=t.titleId,o=_Xe(t,xXe);return a("svg",$B({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.934 3.063a1.5 1.5 0 01.547.321l.112.115 6.07 6.915a1.5 1.5 0 01-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 01.037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 011.893-.957zM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 00.498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 01.666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 01.682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 00.15-.063l.067-.049a.5.5 0 00.099-.632l-.053-.073-6.07-6.916a.5.5 0 00-.138-.11l-.082-.035-.088-.02a.5.5 0 00-.507.256zm11.66 5.039a2.5 2.5 0 01-.975 3.399.5.5 0 01-.485-.875 1.5 1.5 0 00-1.454-2.624.5.5 0 01-.485-.875 2.5 2.5 0 013.399.975zm-5.03-6.206a.5.5 0 01.338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 01.6.225l.036.082a.5.5 0 01-.225.6l-.082.037L9.67 7.028a.5.5 0 01-.659-.55l.02-.08.995-3a.5.5 0 01.632-.316zM14.5 4a.5.5 0 110 1 .5.5 0 010-1zM7.862.403a2.5 2.5 0 01.735 3.459.5.5 0 01-.839-.545 1.5 1.5 0 10-2.516-1.634.5.5 0 01-.839-.545A2.5 2.5 0 017.862.403zM13.5 2a.5.5 0 110 1 .5.5 0 010-1zm-3-1a.5.5 0 110 1 .5.5 0 010-1zm4-1a.5.5 0 110 1 .5.5 0 010-1z"}))},jXe=IXe;var I3={};$(I3,{icon:()=>AXe});var Anr=E(L());var EXe=["title","titleId"];function JB(){return JB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CXe=function(t){var n=t.title,r=t.titleId,o=PXe(t,EXe);return a("svg",JB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 012 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 100 13 6.5 6.5 0 000-13m3 6H8V3.5a.5.5 0 00-1 0v4a.5.5 0 00.5.5h3a.5.5 0 000-1"}))},AXe=CXe;var j3={};$(j3,{icon:()=>DXe});var Tnr=E(L());var MXe=["title","titleId"];function GB(){return GB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zXe=function(t){var n=t.title,r=t.titleId,o=TXe(t,MXe);return a("svg",GB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.348 3.761A3.995 3.995 0 018 7a.5.5 0 01-1 0 3 3 0 10-4.878 2.34.5.5 0 01-.627.779 4 4 0 013.973-6.84 5.502 5.502 0 0110.096 4.37.5.5 0 11-.92-.39 4.5 4.5 0 10-8.296-3.497zm-1.61 4.935a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 01.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84z"}))},DXe=zXe;var E3={};$(E3,{icon:()=>BXe});var znr=E(L());var LXe=["title","titleId"];function XB(){return XB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WXe=function(t){var n=t.title,r=t.titleId,o=NXe(t,LXe);return a("svg",XB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.421 4.93a.5.5 0 11-.87.49 3 3 0 10-4.43 3.918.5.5 0 01-.626.78 4 4 0 013.973-6.84l.032.018V3.28a5.5 5.5 0 117.003 7.357.5.5 0 11-.36-.934 4.5 4.5 0 10-5.77-5.923c.42.31.778.701 1.05 1.15h-.002zM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 015.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11z"}))},BXe=WXe;var P3={};$(P3,{icon:()=>$Xe});var Lnr=E(L());var HXe=["title","titleId"];function KB(){return KB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UXe=function(t){var n=t.title,r=t.titleId,o=VXe(t,HXe);return a("svg",KB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.746 5.005A5.5 5.5 0 0110.5 16H4a4 4 0 01-1.61-7.663A4.473 4.473 0 012.029 7H.5a.5.5 0 010-1h1.527a4.479 4.479 0 01.957-2.309L1.646 2.354a.5.5 0 11.708-.708L3.69 2.984A4.479 4.479 0 016 2.027V.5a.5.5 0 011 0v1.528a4.493 4.493 0 012.309.956l1.337-1.338a.5.5 0 01.708.708L10.016 3.69c.311.388.56.831.73 1.314zM4 15h6.5a4.5 4.5 0 10-4.152-6.239A3.995 3.995 0 018 12a.5.5 0 11-1 0 3 3 0 10-3 3zm5.691-9.94a3.5 3.5 0 10-6.33 2.991 4.029 4.029 0 012.106.227 5.505 5.505 0 014.224-3.219z"}))},$Xe=UXe;var k3={};$(k3,{icon:()=>YXe});var Fnr=E(L());var JXe=["title","titleId"];function YB(){return YB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KXe=function(t){var n=t.title,r=t.titleId,o=GXe(t,JXe);return a("svg",YB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 7a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm0-6a3.5 3.5 0 013.465 3h3.12a1.5 1.5 0 110 1h-3.12a3.482 3.482 0 01-.662 1.596l2.1 2.1A3.5 3.5 0 118.036 12h-3.12a1.5 1.5 0 110-.999h3.12a3.482 3.482 0 01.662-1.596l-2.1-2.1A3.5 3.5 0 114.5 1zM12 4.5a.5.5 0 101 0 .5.5 0 00-1 0zm-.5 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5zM4 11.5a.5.5 0 11-1 0 .5.5 0 011 0z"}))},YXe=KXe;var C3={};$(C3,{icon:()=>rKe});var Bnr=E(L());var QXe=["title","titleId"];function QB(){return QB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tKe=function(t){var n=t.title,r=t.titleId,o=ZXe(t,QXe);return a("svg",QB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 01.11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 01-2.123.008L1.464 9.06a1.5 1.5 0 01.007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 01.713-.7zm1.496 3.049a.5.5 0 00-.705 0L2.177 7.65a.498.498 0 00-.148.35h9.95a.498.498 0 00-.148-.35L7.353 3.2z"}))},rKe=tKe;var A3={};$(A3,{icon:()=>lKe});var Vnr=E(L());var nKe=["title","titleId"];function ZB(){return ZB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aKe=function(t){var n=t.title,r=t.titleId,o=oKe(t,nKe);return a("svg",ZB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 3a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 8v1a2 2 0 01-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 01-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 012-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 012 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2z"}),a("rect",{width:6,height:6,x:5,y:5,rx:1}))},lKe=aKe;var M3={};$(M3,{icon:()=>fKe});var Unr=E(L());var sKe=["title","titleId"];function eH(){return eH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pKe=function(t){var n=t.title,r=t.titleId,o=uKe(t,sKe);return a("svg",eH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.157 12.224L5.768 8.32a.404.404 0 000-.64l-4.61-3.904a.407.407 0 010-.643.608.608 0 01.759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 01-.76 0 .407.407 0 010-.643zM9 12h6v1H9v-1z"}))},fKe=pKe;var T3={};$(T3,{icon:()=>vKe});var Jnr=E(L());var dKe=["title","titleId"];function tH(){return tH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gKe=function(t){var n=t.title,r=t.titleId,o=mKe(t,dKe);return a("svg",tH({fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.5A.5.5 0 01.5 2h15a.5.5 0 010 1H15v10h.5a.5.5 0 010 1H.5a.5.5 0 010-1H1V3H.5a.5.5 0 01-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 005 5zm5.5.5a.5.5 0 011 0v5a.5.5 0 01-1 0v-5zM8 5a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 008 5z"}))},vKe=gKe;var R3={};$(R3,{icon:()=>xKe});var Xnr=E(L());var yKe=["title","titleId"];function rH(){return rH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OKe=function(t){var n=t.title,r=t.titleId,o=bKe(t,yKe);return a("svg",rH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9a.5.5 0 00-.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h6v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0011 5.5V7H5V3.5a.5.5 0 00-.5-.5z"}))},xKe=OKe;var z3={};$(z3,{icon:()=>EKe});var Ynr=E(L());var _Ke=["title","titleId"];function nH(){return nH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jKe=function(t){var n=t.title,r=t.titleId,o=SKe(t,_Ke);return a("svg",nH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H4v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 014 5.5V7h2V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h2v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0012 5.5V7h-2V3.5a.5.5 0 00-.5-.5z"}))},EKe=jKe;var D3={};$(D3,{icon:()=>MKe});var Znr=E(L());var PKe=["title","titleId"];function oH(){return oH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AKe=function(t){var n=t.title,r=t.titleId,o=kKe(t,PKe);return a("svg",oH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H5v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 015 5.5V7h6V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 01.5.5v9a.5.5 0 01-1 0v-9a.5.5 0 01.5-.5z"}))},MKe=AKe;var L3={};$(L3,{icon:()=>LKe});var tor=E(L());var TKe=["title","titleId"];function iH(){return iH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DKe=function(t){var n=t.title,r=t.titleId,o=RKe(t,TKe);return a("svg",iH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9A.5.5 0 00.5 3zm14.5.5a.5.5 0 011 0v9a.5.5 0 01-1 0v-9zm-4.712 1.547a.5.5 0 01.532.069l3 2.5a.5.5 0 010 .768l-3 2.5A.5.5 0 0110 10.5V9H6v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 016 5.5V7h4V5.5a.5.5 0 01.288-.453z"}))},LKe=DKe;var N3={};$(N3,{icon:()=>HKe});var nor=E(L());var NKe=["title","titleId"];function aH(){return aH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BKe=function(t){var n=t.title,r=t.titleId,o=FKe(t,NKe);return a("svg",aH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 014.9 0h1.55a.5.5 0 110 1h-1.55a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 110-1h6.55zm-.1-4a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 010-1h1.55a2.5 2.5 0 014.9 0h6.55a.5.5 0 110 1H7.95zM4 5.5a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm8 5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z"}))},HKe=BKe;var F3={};$(F3,{icon:()=>JKe});var ior=E(L());var VKe=["title","titleId"];function lH(){return lH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ke=function(t){var n=t.title,r=t.titleId,o=qKe(t,VKe);return a("svg",lH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 010-4.9V1.5a.5.5 0 111 0v1.55a2.5 2.5 0 010 4.9v6.55a.5.5 0 11-1 0V7.95zm-4 .1a2.5 2.5 0 010 4.9v1.55a.5.5 0 11-1 0v-1.55a2.5 2.5 0 010-4.9V1.5a.5.5 0 011 0v6.55zM5.5 12a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5-8a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"}))},JKe=$Ke;var W3={};$(W3,{icon:()=>QKe});var lor=E(L());var GKe=["title","titleId"];function sH(){return sH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YKe=function(t){var n=t.title,r=t.titleId,o=XKe(t,GKe);return a("svg",sH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 01-.857.875H3.857A.867.867 0 013 13.125V.875C3 .392 3.384 0 3.857 0H11.4zM14 4h-2.6a.4.4 0 01-.4-.4V1H4v12h10V4z"}),a("path",{d:"M3 1H2a1 1 0 00-1 1v13a1 1 0 001 1h10a1 1 0 001-1v-1h-1v1H2V2h1V1z"}))},QKe=YKe;var B3={};$(B3,{icon:()=>nYe});var uor=E(L());var ZKe=["title","titleId"];function uH(){return uH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rYe=function(t){var n=t.title,r=t.titleId,o=eYe(t,ZKe);return a("svg",uH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 2.729V2a1 1 0 011-1h2v1H3v12h4v1H3a1 1 0 01-1-1V2.729zM14 5V2a1 1 0 00-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V6a1 1 0 00-1-1h-2v1z"}),a("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 00-1-1H6a1 1 0 00-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},nYe=rYe;var H3={};$(H3,{icon:()=>sYe});var por=E(L());var oYe=["title","titleId"];function cH(){return cH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lYe=function(t){var n=t.title,r=t.titleId,o=iYe(t,oYe);return a("svg",cH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.293 8L3.146 3.854a.5.5 0 11.708-.708L8 7.293l4.146-4.147a.5.5 0 01.708.708L8.707 8l4.147 4.146a.5.5 0 01-.708.708L8 8.707l-4.146 4.147a.5.5 0 01-.708-.708L7.293 8z"}))},sYe=lYe;var V3={};$(V3,{icon:()=>dYe});var mor=E(L());var uYe=["title","titleId"];function pH(){return pH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fYe=function(t){var n=t.title,r=t.titleId,o=cYe(t,uYe);return a("svg",pH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.746 8l3.1-3.1a.527.527 0 10-.746-.746L8 7.254l-3.1-3.1a.527.527 0 10-.746.746l3.1 3.1-3.1 3.1a.527.527 0 10.746.746l3.1-3.1 3.1 3.1a.527.527 0 10.746-.746L8.746 8zM8 16A8 8 0 118 0a8 8 0 010 16z"}))},dYe=fYe;var q3={};$(q3,{icon:()=>yYe});var gor=E(L());var mYe=["title","titleId"];function fH(){return fH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vYe=function(t){var n=t.title,r=t.titleId,o=hYe(t,mYe);return a("svg",fH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.822 1.874a.5.5 0 11.335.942 5.517 5.517 0 00-3.34 3.341.5.5 0 11-.943-.335 6.517 6.517 0 013.948-3.948zM1.864 10.15a.5.5 0 11.944-.33 5.517 5.517 0 003.365 3.37.5.5 0 01-.333.943 6.517 6.517 0 01-3.976-3.983zm8.302 3.981a.5.5 0 11-.333-.943 5.517 5.517 0 003.347-3.332.5.5 0 11.941.337 6.517 6.517 0 01-3.955 3.938zm3.968-8.285a.5.5 0 11-.943.331A5.517 5.517 0 009.85 2.82a.5.5 0 01.337-.942 6.517 6.517 0 013.946 3.968zM8.5 3.5a.5.5 0 01-1 0V.997a.5.5 0 011 0V3.5zm-4.997 4a.5.5 0 010 1H1a.5.5 0 010-1h2.503zM7.5 12.497a.5.5 0 011 0V15a.5.5 0 11-1 0v-2.503zM12.497 8.5a.5.5 0 010-1H15a.5.5 0 110 1h-2.503zM8 9a1 1 0 110-2 1 1 0 010 2z"}))},yYe=vYe;var U3={};$(U3,{icon:()=>_Ye});var yor=E(L());var bYe=["title","titleId"];function dH(){return dH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xYe=function(t){var n=t.title,r=t.titleId,o=wYe(t,bYe);return a("svg",dH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.95 1.636l1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 018 13a4.977 4.977 0 01-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 013 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 018 3c1.02 0 1.967.305 2.757.828l2.193-2.192zM8 5a2.99 2.99 0 00-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 00-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 005 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 001.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 00.323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0011 8a2.99 2.99 0 00-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 00-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 00-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 00-.245-.131l-.126-.057A2.99 2.99 0 008 5z"}))},_Ye=xYe;var $3={};$($3,{icon:()=>PYe});var wor=E(L());var SYe=["title","titleId"];function mH(){return mH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EYe=function(t){var n=t.title,r=t.titleId,o=IYe(t,SYe);return a("svg",mH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.142 11.074l-1.912.548a2.532 2.532 0 11-1.395-4.867l1.947-.559a2.532 2.532 0 012.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 01.56 2.4l-.56 1.947a2.532 2.532 0 11-4.867-1.395l.486-1.696zm.33-1.148l.48-1.673a1.52 1.52 0 00-1.89-1.083l-1.948.558a1.52 1.52 0 00.837 2.92l2.52-.722zm3.773-2.135l-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791zM5.63 13.049a1.52 1.52 0 002.92.837l.559-1.947a1.52 1.52 0 00-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05zm.973.279l.559-1.947a.506.506 0 11.973.279l-.558 1.947a.506.506 0 11-.974-.28zm-3.93-3.653a.506.506 0 11-.28-.973l1.947-.558a.506.506 0 01.28.973l-1.948.558z"}))},PYe=EYe;var J3={};$(J3,{icon:()=>TYe});var xor=E(L());var kYe=["title","titleId"];function hH(){return hH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MYe=function(t){var n=t.title,r=t.titleId,o=CYe(t,kYe);return a("svg",hH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453zM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2z"}))},TYe=MYe;var G3={};$(G3,{icon:()=>NYe});var Sor=E(L());var RYe=["title","titleId"];function gH(){return gH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LYe=function(t){var n=t.title,r=t.titleId,o=zYe(t,RYe);return a("svg",gH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2 2a1 1 0 00-1 1v7a1 1 0 001 1h4l-1 3H3.5a.5.5 0 000 1h9a.5.5 0 000-1H11l-1-3h4a1 1 0 001-1V3a1 1 0 00-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),a("path",{d:"M4.5 6a.5.5 0 000 1h1a.5.5 0 000-1h-1zm3 0a.5.5 0 000 1h1a.5.5 0 000-1h-1zm2.5.5a.5.5 0 01.5-.5h1a.5.5 0 010 1h-1a.5.5 0 01-.5-.5z"}))},NYe=LYe;var X3={};$(X3,{icon:()=>VYe});var jor=E(L());var FYe=["title","titleId"];function vH(){return vH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HYe=function(t){var n=t.title,r=t.titleId,o=WYe(t,FYe);return a("svg",vH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h8.8zM14 5h-3.5a.5.5 0 01-.5-.5V1H2v14h12V5zm-8.5 7a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5z"}))},VYe=HYe;var K3={};$(K3,{icon:()=>GYe});var Por=E(L());var qYe=["title","titleId"];function yH(){return yH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ye(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JYe=function(t){var n=t.title,r=t.titleId,o=UYe(t,qYe);return a("svg",yH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 8.995l6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5zM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 010 .909l-6.78 6.784A.641.641 0 018.57 10H6.643A.643.643 0 016 9.357V7.43c0-.17.067-.335.188-.455L12.968.19zM4.5 13a.5.5 0 110-1h7a.5.5 0 110 1h-7zm4-12a.5.5 0 010 1H2v13h12V7.5a.5.5 0 111 0V15a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h6.5z"}))},GYe=JYe;var Y3={};$(Y3,{icon:()=>ZYe});var Cor=E(L());var XYe=["title","titleId"];function bH(){return bH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QYe=function(t){var n=t.title,r=t.titleId,o=KYe(t,XYe);return a("svg",bH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 3.5a.5.5 0 11-1 0 .5.5 0 011 0zM9 5v3h1v1H8V6H7V5h2z"}),a("path",{d:"M13.855 14.147a1.34 1.34 0 01-.158-.246A1.998 1.998 0 0113.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 01.158-.246l.003-.005A.5.5 0 0014 11.5V.5a.5.5 0 00-.5-.5H3.461l-.083.005a2.957 2.957 0 00-1.102.298 2.257 2.257 0 00-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 00.94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 01-.498-.133.817.817 0 01-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 01.324-.275A1.344 1.344 0 013 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 00.359-.848l-.004-.005zm-.001 0l.002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 00-.283.03 2.344 2.344 0 00-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),a("path",{d:"M7 13H4v2.5a.5.5 0 00.854.354l.646-.647.646.647A.5.5 0 007 15.5V13z"}))},ZYe=QYe;var Q3={};$(Q3,{icon:()=>oQe});var Mor=E(L());var eQe=["title","titleId"];function wH(){return wH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nQe=function(t){var n=t.title,r=t.titleId,o=tQe(t,eQe);return a("svg",wH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h6.8zM12 5H8.5a.5.5 0 01-.5-.5V1H2v12h10V5zm-7.5 6a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5zm1 8a.5.5 0 110-1H14V6.5a.5.5 0 111 0V15a1 1 0 01-1 1H5.5z"}))},oQe=nQe;var Z3={};$(Z3,{icon:()=>uQe});var Ror=E(L());var iQe=["title","titleId"];function OH(){return OH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sQe=function(t){var n=t.title,r=t.titleId,o=aQe(t,iQe);return a("svg",OH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("circle",{cx:8,cy:8,r:4}))},uQe=sQe;var e5={};$(e5,{icon:()=>mQe});var Dor=E(L());var cQe=["title","titleId"];function xH(){return xH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dQe=function(t){var n=t.title,r=t.titleId,o=pQe(t,cQe);return a("svg",xH({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}))},mQe=dQe;var t5={};$(t5,{icon:()=>bQe});var Nor=E(L());var hQe=["title","titleId"];function _H(){return _H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yQe=function(t){var n=t.title,r=t.titleId,o=gQe(t,hQe);return a("svg",_H({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},bQe=yQe;var r5={};$(r5,{icon:()=>SQe});var Wor=E(L());var wQe=["title","titleId"];function SH(){return SH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Qe=function(t){var n=t.title,r=t.titleId,o=OQe(t,wQe);return a("svg",SH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 9.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 8a.617.617 0 010-.829.52.52 0 01.77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),a("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 01-.994.994H3.01a.995.995 0 01-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},SQe=_Qe;var n5={};$(n5,{icon:()=>kQe});var Hor=E(L());var IQe=["title","titleId"];function IH(){return IH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PQe=function(t){var n=t.title,r=t.titleId,o=jQe(t,IQe);return a("svg",IH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V4a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5zm13 0a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},kQe=PQe;var o5={};$(o5,{icon:()=>RQe});var qor=E(L());var CQe=["title","titleId"];function jH(){return jH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TQe=function(t){var n=t.title,r=t.titleId,o=AQe(t,CQe);return a("svg",jH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5h8a2 2 0 012 2v2a2 2 0 01-2 2H4a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1zm0 13h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},RQe=TQe;var i5={};$(i5,{icon:()=>FQe});var $or=E(L());var zQe=["title","titleId"];function EH(){return EH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NQe=function(t){var n=t.title,r=t.titleId,o=DQe(t,zQe);return a("svg",EH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2zM1.5 14h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},FQe=NQe;var a5={};$(a5,{icon:()=>qQe});var Gor=E(L());var WQe=["title","titleId"];function PH(){return PH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VQe=function(t){var n=t.title,r=t.titleId,o=BQe(t,WQe);return a("svg",PH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H7V1.5a.5.5 0 011 0V4zm0 8v2.5a.5.5 0 11-1 0V12h1zM3 5h9a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2z"}))},qQe=VQe;var l5={};$(l5,{icon:()=>XQe});var Kor=E(L());var UQe=["title","titleId"];function kH(){return kH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GQe=function(t){var n=t.title,r=t.titleId,o=$Qe(t,UQe);return a("svg",kH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h8a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},XQe=GQe;var s5={};$(s5,{icon:()=>eZe});var Qor=E(L());var KQe=["title","titleId"];function CH(){return CH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZQe=function(t){var n=t.title,r=t.titleId,o=YQe(t,KQe);return a("svg",CH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 7v1H1.5a.5.5 0 010-1H4zm8 0h2.5a.5.5 0 110 1H12V7zM7 1h2a2 2 0 012 2v9a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2z"}))},eZe=ZQe;var u5={};$(u5,{icon:()=>iZe});var eir=E(L());var tZe=["title","titleId"];function AH(){return AH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oZe=function(t){var n=t.title,r=t.titleId,o=rZe(t,tZe);return a("svg",AH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 5h8a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2zm11.5-4a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},iZe=oZe;var c5={};$(c5,{icon:()=>cZe});var rir=E(L());var aZe=["title","titleId"];function MH(){return MH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uZe=function(t){var n=t.title,r=t.titleId,o=lZe(t,aZe);return a("svg",MH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 3h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V5a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1z"}))},cZe=uZe;var p5={};$(p5,{icon:()=>hZe});var oir=E(L());var pZe=["title","titleId"];function TH(){return TH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mZe=function(t){var n=t.title,r=t.titleId,o=fZe(t,pZe);return a("svg",TH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 8h5a1 1 0 011 1v5H3a1 1 0 01-1-1V8zm1-7h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},hZe=mZe;var f5={};$(f5,{icon:()=>wZe});var air=E(L());var gZe=["title","titleId"];function RH(){return RH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bZe=function(t){var n=t.title,r=t.titleId,o=vZe(t,gZe);return a("svg",RH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 8h5v5a1 1 0 01-1 1H8V9a1 1 0 011-1zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},wZe=bZe;var d5={};$(d5,{icon:()=>IZe});var sir=E(L());var OZe=["title","titleId"];function zH(){return zH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ze(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SZe=function(t){var n=t.title,r=t.titleId,o=xZe(t,OZe);return a("svg",zH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2h5v5a1 1 0 01-1 1H2V3a1 1 0 011-1zm0-1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},IZe=SZe;var m5={};$(m5,{icon:()=>CZe});var cir=E(L());var jZe=["title","titleId"];function DH(){return DH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kZe=function(t){var n=t.title,r=t.titleId,o=EZe(t,jZe);return a("svg",DH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2h5a1 1 0 011 1v5H9a1 1 0 01-1-1V2zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},CZe=kZe;var h5={};$(h5,{icon:()=>zZe});var fir=E(L());var AZe=["title","titleId"];function LH(){return LH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RZe=function(t){var n=t.title,r=t.titleId,o=MZe(t,AZe);return a("svg",LH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4V3h6v1H5zM3 7V6h10v1H3zm2 3V9h6v1H5zm-2 3v-1h10v1H3z"}))},zZe=RZe;var g5={};$(g5,{icon:()=>WZe});var mir=E(L());var DZe=["title","titleId"];function NH(){return NH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FZe=function(t){var n=t.title,r=t.titleId,o=LZe(t,DZe);return a("svg",NH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h6v1H2zm0 3V6h10v1H2zm0 3V9h6v1H2zm0 3v-1h10v1H2z"}))},WZe=FZe;var v5={};$(v5,{icon:()=>UZe});var gir=E(L());var BZe=["title","titleId"];function FH(){return FH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qZe=function(t){var n=t.title,r=t.titleId,o=HZe(t,BZe);return a("svg",FH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4V3h6v1H8zM4 7V6h10v1H4zm4 3V9h6v1H8zm-4 3v-1h10v1H4z"}))},UZe=qZe;var y5={};$(y5,{icon:()=>KZe});var yir=E(L());var $Ze=["title","titleId"];function WH(){return WH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XZe=function(t){var n=t.title,r=t.titleId,o=JZe(t,$Ze);return a("svg",WH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841zM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125z"}))},KZe=XZe;var b5={};$(b5,{icon:()=>tet});var wir=E(L());var YZe=["title","titleId"];function BH(){return BH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eet=function(t){var n=t.title,r=t.titleId,o=QZe(t,YZe);return a("svg",BH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.597 3a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.42.42 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982A.418.418 0 002.488 6a.411.411 0 00.288-.126L4.904 3.58a.328.328 0 00.095-.25.337.337 0 00-.126-.238A.421.421 0 004.597 3zm-.299 4.132A.411.411 0 014.597 7a.421.421 0 01.276.093c.076.062.12.147.126.238a.328.328 0 01-.095.25L2.776 9.874a.411.411 0 01-.288.126.418.418 0 01-.297-.108L1.127 8.91A.335.335 0 011 8.656a.333.333 0 01.12-.257.42.42 0 01.292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.421.421 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982a.418.418 0 00.297.108.411.411 0 00.288-.126l2.128-2.293a.328.328 0 00.095-.25.337.337 0 00-.126-.238.421.421 0 00-.276-.093zM6.5 4a.5.5 0 000 1h7a.5.5 0 000-1h-7zM6 8.5a.5.5 0 01.5-.5h7a.5.5 0 010 1h-7a.5.5 0 01-.5-.5zm.5 3.5a.5.5 0 000 1h7a.5.5 0 000-1h-7z"}))},tet=eet;var w5={};$(w5,{icon:()=>aet});var xir=E(L());var ret=["title","titleId"];function HH(){return HH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iet=function(t){var n=t.title,r=t.titleId,o=net(t,ret);return a("svg",HH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},aet=iet;var O5={};$(O5,{icon:()=>fet});var Sir=E(L());var set=["title","titleId"];function VH(){return VH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pet=function(t){var n=t.title,r=t.titleId,o=uet(t,set);return a("svg",VH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.111 10H12a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v4a1 1 0 001 1h1v1.297L6.111 10zm.46 1L4 14v-3a2 2 0 01-2-2V5a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H6.571z"}))},fet=pet;var x5={};$(x5,{icon:()=>vet});var jir=E(L());var det=["title","titleId"];function qH(){return qH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function het(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var get=function(t){var n=t.title,r=t.titleId,o=met(t,det);return a("svg",qH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 11a1 1 0 010 2H4a1 1 0 010-2V5a1 1 0 110-2h2a1 1 0 110 2v2h4V5a1 1 0 110-2h2a1 1 0 010 2v6a1 1 0 010 2h-2a1 1 0 010-2V9H6v2z"}))},vet=get;var _5={};$(_5,{icon:()=>xet});var Pir=E(L());var yet=["title","titleId"];function UH(){return UH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oet=function(t){var n=t.title,r=t.titleId,o=bet(t,yet);return a("svg",UH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.16 12H9.5a.5.5 0 110 1h-4a.5.5 0 110-1h1.639l1.7-8H7.5a.5.5 0 010-1h4a.5.5 0 110 1H9.861l-1.7 8z"}))},xet=Oet;var S5={};$(S5,{icon:()=>Pet});var Cir=E(L());var _et=["title","titleId"];function $H(){return $H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eet=function(t){var n=t.title,r=t.titleId,o=Iet(t,_et);return a("svg",$H({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 5.051a.45.45 0 00.637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 10-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 00-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 00.636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 000-.637zM7.877 5.76a.39.39 0 00.274-.114l1.503-1.504-1.503 1.504a.39.39 0 01-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 01.284.667L6.898 12.41l1.504-1.503a.39.39 0 00-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 01-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},Pet=Eet;var I5={};$(I5,{icon:()=>Tet});var Mir=E(L());var ket=["title","titleId"];function JH(){return JH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Aet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Met=function(t){var n=t.title,r=t.titleId,o=Cet(t,ket);return a("svg",JH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3zm1 4v2H1v-1h1v-1H1v-1h3v1zM3 5h1v1H1V5h1V4H1V3h2v2zm2.5-1h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1z"}))},Tet=Met;var j5={};$(j5,{icon:()=>Net});var Rir=E(L());var Ret=["title","titleId"];function GH(){return GH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Det(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Let=function(t){var n=t.title,r=t.titleId,o=zet(t,Ret);return a("svg",GH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3z"}))},Net=Let;var E5={};$(E5,{icon:()=>Vet});var Dir=E(L());var Fet=["title","titleId"];function XH(){return XH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Het=function(t){var n=t.title,r=t.titleId,o=Wet(t,Fet);return a("svg",XH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 01-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 018.028 13a4.616 4.616 0 01-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 00-.034-.353zM5.586 7a2.49 2.49 0 01-.294-.507 2.316 2.316 0 01-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 018.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 00-.978-.669 2.914 2.914 0 00-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586zM2.5 8h11a.5.5 0 110 1h-11a.5.5 0 010-1z"}))},Vet=Het;var P5={};$(P5,{icon:()=>Get});var Nir=E(L());var qet=["title","titleId"];function KH(){return KH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $et(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jet=function(t){var n=t.title,r=t.titleId,o=Uet(t,qet);return a("svg",KH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3v2H2V3v10h12V3zM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2zm0 5h12v1H2V7zm0 3h12v1H2v-1z"}))},Get=Jet;var k5={};$(k5,{icon:()=>Zet});var Wir=E(L());var Xet=["title","titleId"];function YH(){return YH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qet=function(t){var n=t.title,r=t.titleId,o=Ket(t,Xet);return a("svg",YH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536zM2.5 13h11a.5.5 0 110 1h-11a.5.5 0 110-1z"}))},Zet=Qet;var C5={};$(C5,{icon:()=>ott});var Hir=E(L());var ett=["title","titleId"];function QH(){return QH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ntt=function(t){var n=t.title,r=t.titleId,o=ttt(t,ett);return a("svg",QH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3z"}))},ott=ntt;var A5={};$(A5,{icon:()=>utt});var qir=E(L());var itt=["title","titleId"];function ZH(){return ZH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ltt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var stt=function(t){var n=t.title,r=t.titleId,o=att(t,itt);return a("svg",ZH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1zm-3-7a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1z"}))},utt=stt;var M5={};$(M5,{icon:()=>mtt});var $ir=E(L());var ctt=["title","titleId"];function eV(){return eV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ftt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dtt=function(t){var n=t.title,r=t.titleId,o=ptt(t,ctt);return a("svg",eV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.95 3.684L8.637 8.912a1 1 0 01-1.276 0L1.051 3.684A.999.999 0 001 4v8a1 1 0 001 1h12a1 1 0 001-1V4a.999.999 0 00-.05-.316zM2 2h12a2 2 0 012 2v8a2 2 0 01-2 2H2a2 2 0 01-2-2V4a2 2 0 012-2zm-.21 1l5.576 4.603a1 1 0 001.27.003L14.268 3H1.79z"}))},mtt=dtt;var T5={};$(T5,{icon:()=>eP});var Gir=E(L());var htt=["title","titleId"];function tV(){return tV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ytt=function(t){var n=t.title,r=t.titleId,o=gtt(t,htt);return a("svg",tV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o))},eP=ytt;var R5={};$(R5,{icon:()=>_tt});var Kir=E(L());var btt=["title","titleId"];function rV(){return rV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ott(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xtt=function(t){var n=t.title,r=t.titleId,o=wtt(t,btt);return a("svg",rV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.862 14.18v.001a.482.482 0 01.1.521.5.5 0 01-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 01-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 01-3.802.14l-.045-.012a5.89 5.89 0 01-2.682-1.712A5.715 5.715 0 011.08 7.72a5.66 5.66 0 01.348-3.118A5.78 5.78 0 013.39 2.124a5.979 5.979 0 016.136-.505 5.836 5.836 0 012.356 2.123 5.67 5.67 0 01.873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 01-.694 0 .476.476 0 01-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 00-2.198-1.769 4.99 4.99 0 00-2.83-.273 4.93 4.93 0 00-2.509 1.314 4.774 4.774 0 00-1.34 2.46A4.715 4.715 0 002.352 8.6a4.82 4.82 0 001.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 001.296-.194l.032-.009.717-.211a.506.506 0 01.483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 01.014-.666.495.495 0 01.679-.013l4.493 4.402z"}),a("path",{d:"M7.097 3.468L9.679 4.93a.433.433 0 01.218.37v2.924a.422.422 0 01-.218.37l-2.582 1.461a.438.438 0 01-.437 0L4.077 8.594a.433.433 0 01-.218-.37V5.3a.422.422 0 01.218-.37L6.66 3.467a.446.446 0 01.437 0zm1.845 4.27V5.784a.328.328 0 00-.17-.287L7.047 4.52a.342.342 0 00-.338 0l-1.726.977a.336.336 0 00-.168.287v1.953a.326.326 0 00.17.287l1.724.977a.342.342 0 00.338 0l1.726-.978a.334.334 0 00.169-.287z"}))},_tt=xtt;var z5={};$(z5,{icon:()=>Ptt});var Qir=E(L());var Stt=["title","titleId"];function nV(){return nV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ett=function(t){var n=t.title,r=t.titleId,o=Itt(t,Stt);return a("svg",nV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.648 9.937l7.29-7.288a2.21 2.21 0 013.124 0l2.29 2.288a2.21 2.21 0 010 3.126L10.413 13H12.5a.5.5 0 010 1H4.501a2.21 2.21 0 01-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 00.848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 000 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 010-3.126zM8 6h6.89a1.208 1.208 0 00-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 00-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0014.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),a("path",{d:"M14 11.5a.5.5 0 11-1 0 .5.5 0 011 0zm1.5-.5a.5.5 0 100-1 .5.5 0 000 1zm-1 2a.5.5 0 000 1h1a.5.5 0 000-1h-1z"}))},Ptt=Ett;var D5={};$(D5,{icon:()=>Ttt});var ear=E(L());var ktt=["title","titleId"];function oV(){return oV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Att(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mtt=function(t){var n=t.title,r=t.titleId,o=Ctt(t,ktt);return a("svg",oV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 01.468.468v2.564a.473.473 0 01-.466.475H3V0H12.595a.45.45 0 01.398.463v2.565a.469.469 0 01-.468.467h-.065a.468.468 0 01-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065zm-1.096-7.59l2.121 2.122a1.5 1.5 0 010 2.121l-2.12 2.122a.5.5 0 11-.708-.708l2.121-2.12a.5.5 0 000-.708l-2.121-2.121a.5.5 0 01.707-.707z"}))},Ttt=Mtt;var L5={};$(L5,{icon:()=>Ntt});var rar=E(L());var Rtt=["title","titleId"];function iV(){return iV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ltt=function(t){var n=t.title,r=t.titleId,o=ztt(t,Rtt);return a("svg",iV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.354 12.354l8-8a.5.5 0 00-.708-.708l-8 8a.5.5 0 00.708.708zM1 10.5a.5.5 0 111 0v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 011 13.5v-3zm14-5a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 110-1h3A1.5 1.5 0 0115 2.5v3z"}))},Ntt=Ltt;var N5={};$(N5,{icon:()=>Vtt});var oar=E(L());var Ftt=["title","titleId"];function aV(){return aV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Btt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Htt=function(t){var n=t.title,r=t.titleId,o=Wtt(t,Ftt);return a("svg",aV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.707 10L10 6.707A.5.5 0 009.293 6L6 9.293a.5.5 0 10.707.707zM4 9.5a.5.5 0 011 0v1a.5.5 0 00.5.5h1a.5.5 0 110 1h-1A1.5 1.5 0 014 10.5v-1zm8-3a.5.5 0 11-1 0v-1a.5.5 0 00-.5-.5h-1a.5.5 0 010-1h1A1.5 1.5 0 0112 5.5v1z"}))},Vtt=Htt;var F5={};$(F5,{icon:()=>Gtt});var aar=E(L());var qtt=["title","titleId"];function lV(){return lV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $tt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jtt=function(t){var n=t.title,r=t.titleId,o=Utt(t,qtt);return a("svg",lV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 01-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 01-.77 0 .617.617 0 010-.829l1.95-2.05A1.575 1.575 0 018.5 1h.005zM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 00-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18zM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 01-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6z"}))},Gtt=Jtt;var W5={};$(W5,{icon:()=>Ztt});var sar=E(L());var Xtt=["title","titleId"];function sV(){return sV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ytt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qtt=function(t){var n=t.title,r=t.titleId,o=Ktt(t,Xtt);return a("svg",sV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873zm-1.37-.424a12.097 12.097 0 00-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.095 12.095 0 001.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8c-.08-.15-.189-.343-.315-.551zM8 4.75A3.253 3.253 0 0111.25 8 3.254 3.254 0 018 11.25 3.253 3.253 0 014.75 8 3.252 3.252 0 018 4.75zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75zm0 1.5a.75.75 0 100 1.5.75.75 0 000-1.5z"}))},Ztt=Qtt;var B5={};$(B5,{icon:()=>ort});var car=E(L());var ert=["title","titleId"];function uV(){return uV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nrt=function(t){var n=t.title,r=t.titleId,o=trt(t,ert);return a("svg",uV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.318 13.47l.776-.776A6.04 6.04 0 008 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8a12.097 12.097 0 00-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 01-2.682-.53zM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 008 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.11 12.11 0 001.674 2.383l-.708.708zM8.362 4.77L7.255 5.877a2.262 2.262 0 00-1.378 1.378L4.77 8.362A3.252 3.252 0 018.362 4.77zm2.86 2.797a3.254 3.254 0 01-3.654 3.654l1.06-1.06a2.262 2.262 0 001.533-1.533l1.06-1.06zm-9.368 7.287a.5.5 0 01-.708-.708l13-13a.5.5 0 01.708.708l-13 13z"}))},ort=nrt;var H5={};$(H5,{icon:()=>urt});var far=E(L());var irt=["title","titleId"];function cV(){return cV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var srt=function(t){var n=t.title,r=t.titleId,o=art(t,irt);return a("svg",cV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM2.739 8.802a.533.533 0 01.922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 01.92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465z"}))},urt=srt;var V5={};$(V5,{icon:()=>mrt});var mar=E(L());var crt=["title","titleId"];function pV(){return pV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function frt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var drt=function(t){var n=t.title,r=t.titleId,o=prt(t,crt);return a("svg",pV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM3.2 10.667a.533.533 0 010-1.067h9.6a.533.533 0 110 1.067H3.2z",fillRule:"evenodd"}))},mrt=drt;var q5={};$(q5,{icon:()=>brt});var gar=E(L());var hrt=["title","titleId"];function fV(){return fV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yrt=function(t){var n=t.title,r=t.titleId,o=grt(t,hrt);return a("svg",fV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm2.487 3.868a.533.533 0 11-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 11-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268z"}))},brt=yrt;var U5={};$(U5,{icon:()=>Srt});var bar=E(L());var wrt=["title","titleId"];function dV(){return dV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _rt=function(t){var n=t.title,r=t.titleId,o=Ort(t,wrt);return a("svg",dV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 110-16 8 8 0 010 16zM8 15A7 7 0 108 1a7 7 0 000 14zM3.5 5h9a.5.5 0 110 1h-9a.5.5 0 010-1zm2 3h5a.5.5 0 110 1h-5a.5.5 0 010-1zm2 3h1a.5.5 0 110 1h-1a.5.5 0 110-1z"}))},Srt=_rt;var $5={};$($5,{icon:()=>krt});var Oar=E(L());var Irt=["title","titleId"];function mV(){return mV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ert(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Prt=function(t){var n=t.title,r=t.titleId,o=jrt(t,Irt);return a("svg",mV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0013 8V2a.5.5 0 00-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 002 2v12.5a.5.5 0 101 0V8.553c1.411.627 2.983.592 4.686-.089zM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 003 7.5V2.74z"}))},krt=Prt;var J5={};$(J5,{icon:()=>Rrt});var _ar=E(L());var Crt=["title","titleId"];function hV(){return hV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Trt=function(t){var n=t.title,r=t.titleId,o=Art(t,Crt);return a("svg",hV({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14.192L7.53 2.49a.67.67 0 00.942 0L10.86.192a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zm0 15.616l2.39-2.298a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93l-2.388-2.3a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},Rrt=Trt;var G5={};$(G5,{icon:()=>Frt});var Iar=E(L());var zrt=["title","titleId"];function gV(){return gV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nrt=function(t){var n=t.title,r=t.titleId,o=Drt(t,zrt);return a("svg",gV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v3.416a4.962 4.962 0 00-1-.316V4H7.125A1.125 1.125 0 016 2.875V2zm10 10a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Frt=Nrt;var X5={};$(X5,{icon:()=>qrt});var Ear=E(L());var Wrt=["title","titleId"];function vV(){return vV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vrt=function(t){var n=t.title,r=t.titleId,o=Brt(t,Wrt);return a("svg",vV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 017 2.875V2zm.25-1a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H14a1 1 0 011 1v9a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h5.25z"}))},qrt=Vrt;var K5={};$(K5,{icon:()=>Xrt});var kar=E(L());var Urt=["title","titleId"];function yV(){return yV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Grt=function(t){var n=t.title,r=t.titleId,o=$rt(t,Urt);return a("svg",yV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-.447 2.011a5.015 5.015 0 00-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Xrt=Grt;var Y5={};$(Y5,{icon:()=>ent});var Aar=E(L());var Krt=["title","titleId"];function bV(){return bV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zrt=function(t){var n=t.title,r=t.titleId,o=Yrt(t,Krt);return a("svg",bV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-1.556 7a1 1 0 01-.976.783H13z"}))},ent=Zrt;var Q5={};$(Q5,{icon:()=>int});var Tar=E(L());var tnt=["title","titleId"];function wV(){return wV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ont=function(t){var n=t.title,r=t.titleId,o=rnt(t,tnt);return a("svg",wV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm5.146.22l7.2 4.581a1.425 1.425 0 010 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},int=ont;var Z5={};$(Z5,{icon:()=>cnt});var zar=E(L());var ant=["title","titleId"];function OV(){return OV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function snt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var unt=function(t){var n=t.title,r=t.titleId,o=lnt(t,ant);return a("svg",OV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2a1 1 0 011 1v10a1 1 0 11-2 0V3a1 1 0 011-1zm-5.146.22l-7.2 4.581a1.425 1.425 0 000 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},cnt=unt;var e4={};$(e4,{icon:()=>hnt});var Lar=E(L());var pnt=["title","titleId"];function xV(){return xV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mnt=function(t){var n=t.title,r=t.titleId,o=fnt(t,pnt);return a("svg",xV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z"}))},hnt=mnt;var t4={};$(t4,{icon:()=>wnt});var Far=E(L());var gnt=["title","titleId"];function _V(){return _V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ynt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bnt=function(t){var n=t.title,r=t.titleId,o=vnt(t,gnt);return a("svg",_V({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 3v4h-1V4H9V3h4zM3 3h4v1H4v3H3V3zm10 10H9v-1h3V9h1v4zM3 13V9h1v3h3v1H3zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z",fillRule:"evenodd"}))},wnt=bnt;var r4={};$(r4,{icon:()=>Int});var Bar=E(L());var Ont=["title","titleId"];function SV(){return SV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Snt=function(t){var n=t.title,r=t.titleId,o=xnt(t,Ont);return a("svg",SV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},Int=Snt;var n4={};$(n4,{icon:()=>Cnt});var Var=E(L());var jnt=["title","titleId"];function IV(){return IV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var knt=function(t){var n=t.title,r=t.titleId,o=Ent(t,jnt);return a("svg",IV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.164 10.329L1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 011.142-1.535l2.872.313L6.099.05a8.166 8.166 0 013.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 011.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 01-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 01-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 01-1.899-3.293zm4.663 1.986a1 1 0 011.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 011.023-.59l2.358.256a7.23 7.23 0 001.194-2.068l-1.401-1.913a1 1 0 010-1.182l1.4-1.912a7.165 7.165 0 00-1.192-2.069l-2.359.257a1 1 0 01-1.023-.591L9.193.924a7.165 7.165 0 00-2.387.001L5.85 3.094a1 1 0 01-1.023.59l-2.358-.256a7.23 7.23 0 00-1.194 2.068l1.401 1.913a1 1 0 010 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257zM8 11a3 3 0 110-6 3 3 0 010 6zm0-1a2 2 0 100-4 2 2 0 000 4z"}))},Cnt=knt;var o4={};$(o4,{icon:()=>znt});var Uar=E(L());var Ant=["title","titleId"];function jV(){return jV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rnt=function(t){var n=t.title,r=t.titleId,o=Mnt(t,Ant);return a("svg",jV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.035 9A3.5 3.5 0 0115 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 01.196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 119.035 10h-2.07A3.5 3.5 0 11.043 8.952.498.498 0 010 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 01.196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 016.965 9h2.07zM3.5 12a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm9 0a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"}))},znt=Rnt;var i4={};$(i4,{icon:()=>Wnt});var Jar=E(L());var Dnt=["title","titleId"];function EV(){return EV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fnt=function(t){var n=t.title,r=t.titleId,o=Lnt(t,Dnt);return a("svg",EV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.019 8a6.462 6.462 0 001.003 3h2.382a14.469 14.469 0 01-.396-3h-2.99zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 00-1.003 3zM13.98 8h-2.989a14.469 14.469 0 01-.396 3h2.382a6.462 6.462 0 001.003-3zm0-1a6.462 6.462 0 00-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99zM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008zm0-1h4.984a13.422 13.422 0 00-.429-3H5.437a13.422 13.422 0 00-.429 3zM.016 8H0V7h.016a7.5 7.5 0 0114.968 0H15v1h-.016A7.5 7.5 0 01.016 8zm2.794 4a6.501 6.501 0 002.717 1.695A7.315 7.315 0 014.7 12H2.81zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0012.19 12zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762zM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 002.81 3zm9.38 0a6.501 6.501 0 00-2.717-1.695c.317.465.597 1.038.827 1.695h1.89zM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2z"}))},Wnt=Fnt;var a4={};$(a4,{icon:()=>Unt});var Xar=E(L());var Bnt=["title","titleId"];function PV(){return PV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qnt=function(t){var n=t.title,r=t.titleId,o=Hnt(t,Bnt);return a("svg",PV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11z"}))},Unt=qnt;var l4={};$(l4,{icon:()=>Knt});var Yar=E(L());var $nt=["title","titleId"];function kV(){return kV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xnt=function(t){var n=t.title,r=t.titleId,o=Jnt(t,$nt);return a("svg",kV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11z"}))},Knt=Xnt;var s4={};$(s4,{icon:()=>tot});var Zar=E(L());var Ynt=["title","titleId"];function CV(){return CV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Znt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eot=function(t){var n=t.title,r=t.titleId,o=Qnt(t,Ynt);return a("svg",CV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 5V1h4v4H1zm3-1V2H2v2h2zm2 1V1h4v4H6zm3-1V2H7v2h2zm2 1V1h4v4h-4zm1-1h2V2h-2v2zM1 10V6h4v4H1zm3-1V7H2v2h2zm2 1V6h4v4H6zm3-1V7H7v2h2zm2 1V6h4v4h-4zm3-1V7h-2v2h2zM1 15v-4h4v4H1zm1-1h2v-2H2v2zm4 1v-4h4v4H6zm1-1h2v-2H7v2zm4 1v-4h4v4h-4zm1-1h2v-2h-2v2z"}))},tot=eot;var u4={};$(u4,{icon:()=>aot});var tlr=E(L());var rot=["title","titleId"];function AV(){return AV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iot=function(t){var n=t.title,r=t.titleId,o=not(t,rot);return a("svg",AV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.402 3.098a3.75 3.75 0 00-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 10-5.294-5.313L8 3.697l-.598-.599zM2.796 7.685a2.747 2.747 0 01.01-3.88 2.75 2.75 0 013.889 0L8 5.111l1.305-1.306a2.75 2.75 0 113.89 3.89L8 12.62 2.796 7.685z"}))},aot=iot;var c4={};$(c4,{icon:()=>pot});var nlr=E(L());var lot=["title","titleId"];function MV(){return MV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cot=function(t){var n=t.title,r=t.titleId,o=sot(t,lot);return a("svg",MV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 9a3 3 0 110 6 3 3 0 010-6zm0 1a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 110 4 2 2 0 010-4zm0 1a1 1 0 100 2 1 1 0 000-2zm0 5a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6zm8-9a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6z"}))},pot=cot;var p4={};$(p4,{icon:()=>got});var ilr=E(L());var fot=["title","titleId"];function TV(){return TV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hot=function(t){var n=t.title,r=t.titleId,o=dot(t,fot);return a("svg",TV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 00-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 010 8.373zM8 15A6.956 6.956 0 013.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 002.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 018 15zm-5.601-2.813a6.963 6.963 0 010-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 003 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 118 4a4 4 0 010 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 008 3a4.979 4.979 0 00-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 018 1zm0-1a8.001 8.001 0 10.003 16.002A8.001 8.001 0 008 0z"}))},got=hot;var f4={};$(f4,{icon:()=>Oot});var llr=E(L());var vot=["title","titleId"];function RV(){return RV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wot=function(t){var n=t.title,r=t.titleId,o=yot(t,vot);return a("svg",RV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.13 1.229l5.5 4.47a1 1 0 01.37.777V14a1 1 0 01-1 1H2a1 1 0 01-1-1V6.476a1 1 0 01.37-.776l5.5-4.471a1 1 0 011.26 0zM13 6.476L7.5 2.005 2 6.475V14h11V6.476z"}))},Oot=wot;var d4={};$(d4,{icon:()=>jot});var ulr=E(L());var xot=["title","titleId"];function zV(){return zV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iot=function(t){var n=t.title,r=t.titleId,o=_ot(t,xot);return a("svg",zV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 11.508L7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5zm-.25-6.202a.83.83 0 01.207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 01-.207-.568zM8 13A5 5 0 108 3a5 5 0 000 10zm0 1A6 6 0 118 2a6 6 0 010 12z"}))},jot=Iot;var m4={};$(m4,{icon:()=>Aot});var plr=E(L());var Eot=["title","titleId"];function DV(){return DV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cot=function(t){var n=t.title,r=t.titleId,o=Pot(t,Eot);return a("svg",DV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 5a2 2 0 11-4 0 2 2 0 014 0zm9-4a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm-3.448 6.134l-3.76 2.769a.5.5 0 01-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 01.389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 01.52-.045l.079.05L15 8.495V2z"}))},Aot=Cot;var h4={};$(h4,{icon:()=>Dot});var dlr=E(L());var Mot=["title","titleId"];function LV(){return LV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zot=function(t){var n=t.title,r=t.titleId,o=Tot(t,Mot);return a("svg",LV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 10.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 9a.617.617 0 010-.829.52.52 0 01.77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 00-.972.804l-1.189 6A.995.995 0 002.991 14h11.018a1 1 0 00.972-1.196l-1.19-6a.993.993 0 00-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0114.016 15H2.984a1.992 1.992 0 01-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z"}))},Dot=zot;var g4={};$(g4,{icon:()=>Bot});var hlr=E(L());var Lot=["title","titleId"];function NV(){return NV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wot=function(t){var n=t.title,r=t.titleId,o=Not(t,Lot);return a("svg",NV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793zM3 11v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},Bot=Wot;var v4={};$(v4,{icon:()=>$ot});var vlr=E(L());var Hot=["title","titleId"];function FV(){return FV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uot=function(t){var n=t.title,r=t.titleId,o=Vot(t,Hot);return a("svg",FV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h6v1H5zM3 8V7h1v1H3zm2 3v-1h3v1H5zm-2 0v-1h1v1H3zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59z"}))},$ot=Uot;var y4={};$(y4,{icon:()=>Yot});var blr=E(L());var Jot=["title","titleId"];function WV(){return WV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kot=function(t){var n=t.title,r=t.titleId,o=Got(t,Jot);return a("svg",WV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 010-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 01.108.397.643.643 0 01-.108.332l-2 2.918A.478.478 0 0113.5 12a.457.457 0 01-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9zM3 15H1a1 1 0 01-1-1V2a1 1 0 011-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 01-.5-.5V2H3v12h8v-4h1v4a1 1 0 01-1 1H3zm-1-1V2H1v12h1z"}))},Yot=Kot;var b4={};$(b4,{icon:()=>rit});var Olr=E(L());var Qot=["title","titleId"];function BV(){return BV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tit=function(t){var n=t.title,r=t.titleId,o=Zot(t,Qot);return a("svg",BV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 8H4.915a1.5 1.5 0 110-1H8V2.5A1.5 1.5 0 019.5 1h2.585a1.5 1.5 0 110 1H9.5a.5.5 0 00-.5.5v10a.5.5 0 00.5.5h2.585a1.5 1.5 0 110 1H9.5A1.5 1.5 0 018 12.5V8zM3.5 3a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0 12a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm10-6a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"}))},rit=tit;var w4={};$(w4,{icon:()=>lit});var _lr=E(L());var nit=["title","titleId"];function HV(){return HV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ait=function(t){var n=t.title,r=t.titleId,o=oit(t,nit);return a("svg",HV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2zm-7 1v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},lit=ait;var O4={};$(O4,{icon:()=>fit});var Ilr=E(L());var sit=["title","titleId"];function VV(){return VV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pit=function(t){var n=t.title,r=t.titleId,o=uit(t,sit);return a("svg",VV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),a("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2l-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},fit=pit;var x4={};$(x4,{icon:()=>vit});var Elr=E(L());var dit=["title","titleId"];function qV(){return qV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var git=function(t){var n=t.title,r=t.titleId,o=mit(t,dit);return a("svg",qV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h5.999V4H5v1zM3 5h1V4H3v1zm0 3h1V7H3v1zm6.022-1l-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 006.948 8H5V7h4.022zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017zM3 11h1v-1H3v1z"}),a("path",{d:"M13 7.05l-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0012 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05z"}),a("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 01-.387.859 4.058 4.058 0 01-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 01-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 01-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 01.97-1.61l1.466.152.593-1.292a4.37 4.37 0 01.975-.11zM11 12a1 1 0 10.002-1.998A1 1 0 0011 12z"}))},vit=git;var _4={};$(_4,{icon:()=>xit});var klr=E(L());var yit=["title","titleId"];function UV(){return UV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oit=function(t){var n=t.title,r=t.titleId,o=bit(t,yit);return a("svg",UV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),a("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),a("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},xit=Oit;var S4={};$(S4,{icon:()=>Eit});var Alr=E(L());var _it=["title","titleId"];function $V(){return $V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jit=function(t){var n=t.title,r=t.titleId,o=Sit(t,_it);return a("svg",$V({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.363 14.658a.5.5 0 11-.713.7l-2.97-3.023a.5.5 0 01.001-.7A3.9 3.9 0 108.9 12.8a.5.5 0 110 .999 4.9 4.9 0 113.821-1.833l2.642 2.691zM3.094 13a.5.5 0 110 1H2.5A2.5 2.5 0 010 11.5v-9A2.5 2.5 0 012.5 0h9A2.5 2.5 0 0114 2.5v.599a.5.5 0 11-1 0V2.5A1.5 1.5 0 0011.5 1h-9A1.5 1.5 0 001 2.5v9A1.5 1.5 0 002.5 13h.594zM2.5 3a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-4 2a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-2 1a.5.5 0 110 1 .5.5 0 010-1zm0 3a.5.5 0 110-1 .5.5 0 010 1zm6-6a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-8 8a.5.5 0 110-1 .5.5 0 010 1z"}))},Eit=jit;var I4={};$(I4,{icon:()=>Mit});var Tlr=E(L());var Pit=["title","titleId"];function JV(){return JV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ait=function(t){var n=t.title,r=t.titleId,o=kit(t,Pit);return a("svg",JV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 13.25a5.25 5.25 0 100-10.5 5.25 5.25 0 000 10.5zM8 14A6 6 0 118 2a6 6 0 010 12z"}),a("path",{d:"M8 2a6 6 0 100 12V2z"}))},Mit=Ait;var j4={};$(j4,{icon:()=>Lit});var zlr=E(L());var Tit=["title","titleId"];function GV(){return GV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dit=function(t){var n=t.title,r=t.titleId,o=Rit(t,Tit);return a("svg",GV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h8zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},Lit=Dit;var E4={};$(E4,{icon:()=>Hit});var Llr=E(L());var Nit=["title","titleId"];function XV(){return XV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bit=function(t){var n=t.title,r=t.titleId,o=Fit(t,Nit);return a("svg",XV({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 3h16v11H0V3zm15 10V4H1v9h14zM2 5h2v1H2V5zm2 7v-1H2v1h2zm10-1v1h-2v-1h2zm-3 1v-1H5v1h6zM5 5h1v1H5V5zM3 7H2v1h1V7zm3 0h1v1H6V7zM3 9H2v1h1V9zm3 0h1v1H6V9zm2-4H7v1h1V5zM4 7h1v1H4V7zm5 0H8v1h1V7zm1 0h1v1h-1V7zM5 9H4v1h1V9zm3 0h1v1H8V9zm3 0h-1v1h1V9zM9 5h1v1H9V5zm3 0h-1v1h1V5zm1 0h1v1h-1V5zm1 2h-2v3h2V7z"}))},Hit=Bit;var P4={};$(P4,{icon:()=>Jit});var Flr=E(L());var Vit=["title","titleId"];function KV(){return KV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $it=function(t){var n=t.title,r=t.titleId,o=qit(t,Vit);return a("svg",KV({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 9a5 5 0 110-8 5 5 0 110 8zm.75-.692a4 4 0 100-6.615A4.981 4.981 0 0110 5a4.981 4.981 0 01-1.25 3.308zM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703z"}))},Jit=$it;var k4={};$(k4,{icon:()=>Qit});var Blr=E(L());var Git=["title","titleId"];function YV(){return YV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yit=function(t){var n=t.title,r=t.titleId,o=Xit(t,Git);return a("svg",YV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 7H3v2h4v2l3-3-3-3v2zM6 6V5a1 1 0 011.707-.707l3 3a1 1 0 010 1.414l-3 3A1 1 0 016 11v-1H3a1 1 0 01-1-1V7a1 1 0 011-1h3zm7.5-3a.5.5 0 01.5.5v9a.5.5 0 11-1 0v-9a.5.5 0 01.5-.5z"}))},Qit=Yit;var C4={};$(C4,{icon:()=>nat});var Vlr=E(L());var Zit=["title","titleId"];function QV(){return QV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rat=function(t){var n=t.title,r=t.titleId,o=eat(t,Zit);return a("svg",QV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.192 10.145l2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 01.93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 01-.93 0c-.256-.195-.256-.512 0-.708zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 01-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 01.93 0c.256.195.256.512 0 .708zM6.5 6h3a.5.5 0 010 1h-3a.5.5 0 010-1zm0 3h3a.5.5 0 010 1h-3a.5.5 0 010-1z"}))},nat=rat;var A4={};$(A4,{icon:()=>sat});var Ulr=E(L());var oat=["title","titleId"];function ZV(){return ZV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lat=function(t){var n=t.title,r=t.titleId,o=iat(t,oat);return a("svg",ZV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 12a4 4 0 100-8 4 4 0 000 8zm0 1A5 5 0 115 3a5 5 0 010 10zm6-1a4 4 0 100-8 4 4 0 000 8zm0 1a5 5 0 110-10 5 5 0 010 10z"}))},sat=lat;var M4={};$(M4,{icon:()=>dat});var Jlr=E(L());var uat=["title","titleId"];function eq(){return eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fat=function(t){var n=t.title,r=t.titleId,o=cat(t,uat);return a("svg",eq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4a5 5 0 110 8 5 5 0 110-8zm-.75.692a4 4 0 100 6.615A4.981 4.981 0 016 8c0-1.268.472-2.426 1.25-3.308zM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696z"}))},dat=fat;var T4={};$(T4,{icon:()=>yat});var Xlr=E(L());var mat=["title","titleId"];function tq(){return tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vat=function(t){var n=t.title,r=t.titleId,o=hat(t,mat);return a("svg",tq({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z"}))},yat=vat;var R4={};$(R4,{icon:()=>_at});var Ylr=E(L());var bat=["title","titleId"];function rq(){return rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Oat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xat=function(t){var n=t.title,r=t.titleId,o=wat(t,bat);return a("svg",rq({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z"}))},_at=xat;var z4={};$(z4,{icon:()=>Pat});var Zlr=E(L());var Sat=["title","titleId"];function nq(){return nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eat=function(t){var n=t.title,r=t.titleId,o=Iat(t,Sat);return a("svg",nq({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.276 1.053a.5.5 0 01.448 0l6 3a.5.5 0 010 .894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 010-.894l6-3zM2.618 4.5L7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),a("path",{d:"M1.053 7.276a.5.5 0 01.67-.223L7.5 9.94l5.776-2.888a.5.5 0 11.448.894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 01-.223-.67z"}),a("path",{d:"M1.724 10.053a.5.5 0 10-.448.894l6 3a.5.5 0 00.448 0l6-3a.5.5 0 10-.448-.894L7.5 12.94l-5.776-2.888z"}))},Pat=Eat;var D4={};$(D4,{icon:()=>Tat});var tsr=E(L());var kat=["title","titleId"];function oq(){return oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mat=function(t){var n=t.title,r=t.titleId,o=Cat(t,kat);return a("svg",oq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 3l3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 01-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 01-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 00.364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 00-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 00-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 00.358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},Tat=Mat;var L4={};$(L4,{icon:()=>Nat});var nsr=E(L());var Rat=["title","titleId"];function iq(){return iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lat=function(t){var n=t.title,r=t.titleId,o=zat(t,Rat);return a("svg",iq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.707 4.707a1 1 0 11-1.414-1.414l2-2a1 1 0 111.414 1.414l-2 2zm-6.414 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414zm-5 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414z"}))},Nat=Lat;var N4={};$(N4,{icon:()=>Vat});var isr=E(L());var Fat=["title","titleId"];function aq(){return aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hat=function(t){var n=t.title,r=t.titleId,o=Wat(t,Fat);return a("svg",aq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.5 3a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM11 5.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM5.5 11a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm-4 4a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},Vat=Hat;var F4={};$(F4,{icon:()=>Gat});var lsr=E(L());var qat=["title","titleId"];function lq(){return lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $at(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jat=function(t){var n=t.title,r=t.titleId,o=Uat(t,qat);return a("svg",lq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.293 14.707a1 1 0 001.414 0l12-12a1 1 0 10-1.414-1.414l-12 12a1 1 0 000 1.414z"}))},Gat=Jat;var W4={};$(W4,{icon:()=>Zat});var usr=E(L());var Xat=["title","titleId"];function sq(){return sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qat=function(t){var n=t.title,r=t.titleId,o=Kat(t,Xat);return a("svg",sq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.66 3.803a.5.5 0 11-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 11.707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803zm-.32 7.392a.5.5 0 11.707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 01-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314z"}))},Zat=Qat;var B4={};$(B4,{icon:()=>olt});var psr=E(L());var elt=["title","titleId"];function uq(){return uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nlt=function(t){var n=t.title,r=t.titleId,o=tlt(t,elt);return a("svg",uq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zm0 3V9h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm4 3v-1h8v1H6zm-4 0v-1h2v1H2z"}))},olt=nlt;var H4={};$(H4,{icon:()=>ult});var dsr=E(L());var ilt=["title","titleId"];function cq(){return cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var slt=function(t){var n=t.title,r=t.titleId,o=alt(t,ilt);return a("svg",cq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2zM7.758 9a4.5 4.5 0 11-.502 4H6v-1h1.027a4.548 4.548 0 01.23-2H6V9h1.758zM2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm0 3v-1h2v1H2z"}))},ult=slt;var V4={};$(V4,{icon:()=>mlt});var hsr=E(L());var clt=["title","titleId"];function pq(){return pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function flt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dlt=function(t){var n=t.title,r=t.titleId,o=plt(t,clt);return a("svg",pq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4zM3 15h10V6H3v9zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 016.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194zM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64z"}))},mlt=dlt;var q4={};$(q4,{icon:()=>blt});var vsr=E(L());var hlt=["title","titleId"];function fq(){return fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ylt=function(t){var n=t.title,r=t.titleId,o=glt(t,hlt);return a("svg",fq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143zM1 15h10V6H1v9zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 014.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194z"}))},blt=ylt;var U4={};$(U4,{icon:()=>Slt});var bsr=E(L());var wlt=["title","titleId"];function dq(){return dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _lt=function(t){var n=t.title,r=t.titleId,o=Olt(t,wlt);return a("svg",dq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),a("path",{fill:"#FFF",d:"M19.448 12.508l-8.986 3.86 8.986 3.883v-7.743zm-11.304 4.73l-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24z"})))},Slt=_lt;var $4={};$($4,{icon:()=>klt});var Osr=E(L());var Ilt=["title","titleId"];function mq(){return mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Elt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Plt=function(t){var n=t.title,r=t.titleId,o=jlt(t,Ilt),i=_r("logo_apache");return a("svg",mq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},a("stop",{offset:"0%",stopColor:"#F69923"}),a("stop",{offset:"31.23%",stopColor:"#F79A23"}),a("stop",{offset:"83.83%",stopColor:"#E97826"})),a("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"})),a("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 00.05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 00-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 00-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 00-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 00-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 00-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 00.398-1.395c-1.17.206-2.608.399-3.548.442z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 00-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 01-.896.311 8.977 8.977 0 01-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 01-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 01-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 00-.118.244z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 00-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23z",transform:"translate(8)"})))},klt=Plt;var J4={};$(J4,{icon:()=>Rlt});var Ssr=E(L());var Clt=["title","titleId"];function hq(){return hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tlt=function(t){var n=t.title,r=t.titleId,o=Alt(t,Clt);return a("svg",hq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 00-7 0l-8 4.619A7 7 0 001 11.62v9.237a7 7 0 003.5 6.062l7.5 4.33V17.979a7 7 0 013.5-6.062L27 5.276 19.5.939z"}),a("path",{className:"euiIcon__fillNegative",d:"M19.5.938a7.002 7.002 0 00-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34z"}),a("path",{fill:"#FA744E",d:"M28.435 7.76l-10.026 5.79a6.994 6.994 0 011.59 4.428v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.238a6.992 6.992 0 00-1.586-4.422l-.978.564z"}))},Rlt=Tlt;var G4={};$(G4,{icon:()=>Flt});var jsr=E(L());var zlt=["title","titleId"];function gq(){return gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nlt=function(t){var n=t.title,r=t.titleId,o=Dlt(t,zlt);return a("svg",gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("g",{fill:"#F90"},a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"}))))},Flt=Nlt;var X4={};$(X4,{icon:()=>qlt});var Psr=E(L());var Wlt=["title","titleId"];function vq(){return vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vlt=function(t){var n=t.title,r=t.titleId,o=Blt(t,Wlt);return a("svg",vq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"})))},qlt=Vlt;var K4={};$(K4,{icon:()=>Xlt});var Csr=E(L());var Ult=["title","titleId"];function yq(){return yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Glt=function(t){var n=t.title,r=t.titleId,o=$lt(t,Ult);return a("svg",yq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0072C6",d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Xlt=Glt;var Y4={};$(Y4,{icon:()=>est});var Msr=E(L());var Klt=["title","titleId"];function bq(){return bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zlt=function(t){var n=t.title,r=t.titleId,o=Ylt(t,Klt);return a("svg",bq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},est=Zlt;var Q4={};$(Q4,{icon:()=>ist});var Rsr=E(L());var tst=["title","titleId"];function wq(){return wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ost=function(t){var n=t.title,r=t.titleId,o=rst(t,tst);return a("svg",wq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),a("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 00-2.298-6.376"}),a("path",{className:"euiIcon__fillNegative",d:"M24.338 13.554A9.942 9.942 0 0019 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446"}))},ist=ost;var Z4={};$(Z4,{icon:()=>cst});var Dsr=E(L());var ast=["title","titleId"];function Oq(){return Oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ust=function(t){var n=t.title,r=t.titleId,o=lst(t,ast);return a("svg",Oq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),a("path",{className:"euiIcon__fillNegative",d:"M10 12v10h10c0-5.522-4.478-10-10-10"}),a("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},cst=ust;var e6={};$(e6,{icon:()=>hst});var Nsr=E(L());var pst=["title","titleId"];function xq(){return xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mst=function(t){var n=t.title,r=t.titleId,o=fst(t,pst);return a("svg",xq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 002.773-7.42A11.324 11.324 0 0016.042 4.64l-.05.001h-.05A11.324 11.324 0 004.632 15.949a11.291 11.291 0 002.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 01-1.117-3.139A14.997 14.997 0 011 15.95a14.901 14.901 0 014.378-10.57 14.924 14.924 0 014.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0110.57 4.378 14.912 14.912 0 013.982 13.985 14.871 14.871 0 01-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 01-1.174-3.738 8.26 8.26 0 01.611-2.964 8.42 8.42 0 011.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 00-.858-1.956 5.264 5.264 0 00-4.29-2.217h-.108a5.25 5.25 0 00-4.29 2.216 5.31 5.31 0 00-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 011.628 2.54 8.24 8.24 0 01.61 2.964 6.123 6.123 0 01-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 01-2.49-1.098 4.245 4.245 0 002.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 01-1.525-3.26 8.983 8.983 0 01-.05-3.905 8.906 8.906 0 011.46-3.313A8.993 8.993 0 0111.23 8.39a8.937 8.937 0 014.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 013.448 1.256 9.003 9.003 0 012.554 2.404 9.093 9.093 0 011.459 3.313 9.043 9.043 0 01-.05 3.912 8.925 8.925 0 01-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 002.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004zm-3.956-11.314a2.957 2.957 0 01-2.952-2.952 2.957 2.957 0 012.952-2.952 2.956 2.956 0 012.95 2.952 2.957 2.957 0 01-2.95 2.952",fill:"#F05C56"}))},hst=mst;var t6={};$(t6,{icon:()=>wst});var Wsr=E(L());var gst=["title","titleId"];function _q(){return _q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bst=function(t){var n=t.title,r=t.titleId,o=vst(t,gst);return a("svg",_q({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0118 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 018.393-5.349"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}),a("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"})))},wst=bst;var r6={};$(r6,{icon:()=>Ist});var Hsr=E(L());var Ost=["title","titleId"];function Sq(){return Sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _st(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sst=function(t){var n=t.title,r=t.titleId,o=xst(t,Ost);return a("svg",Sq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M18 0v10a6 6 0 00-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 003.975 23.7 15.934 15.934 0 012 16C2 7.164 9.163 0 18 0zm0 13a3 3 0 110 6 3 3 0 010-6z"}),a("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}))},Ist=Sst;var n6={};$(n6,{icon:()=>Cst});var qsr=E(L());var jst=["title","titleId"];function Iq(){return Iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kst=function(t){var n=t.title,r=t.titleId,o=Est(t,jst);return a("svg",Iq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M9.75 12L16 32h10l-3.4-10.88A13 13 0 0010.19 12h-.44z"}),a("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 009.5 0H6l3.75 12h.44a13 13 0 0112.41 9.12L26 32h6l-6.275-20.07z"}),a("path",{fill:"#0377CA",d:"M7.91 16.175L0 32h12.855z"}))},Cst=kst;var o6={};$(o6,{icon:()=>zst});var $sr=E(L());var Ast=["title","titleId"];function jq(){return jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rst=function(t){var n=t.title,r=t.titleId,o=Mst(t,Ast);return a("svg",jq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106zm2.344.066l6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11zM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675zM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743z"}))},zst=Rst;var i6={};$(i6,{icon:()=>Wst});var Gsr=E(L());var Dst=["title","titleId"];function Eq(){return Eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fst=function(t){var n=t.title,r=t.titleId,o=Lst(t,Dst);return a("svg",Eq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208z"}))},Wst=Fst;var a6={};$(a6,{icon:()=>Ust});var Ksr=E(L());var Bst=["title","titleId"];function Pq(){return Pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qst=function(t){var n=t.title,r=t.titleId,o=Hst(t,Bst);return a("svg",Pq({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z",fill:"#136EA3",fillRule:"evenodd"}))},Ust=qst;var l6={};$(l6,{icon:()=>Kst});var Qsr=E(L());var $st=["title","titleId"];function kq(){return kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xst=function(t){var n=t.title,r=t.titleId,o=Jst(t,$st),i=_r("logo_dropwizard");return a("svg",kq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61",fill:"url(#".concat(i("a"),")")}),a("path",{d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553",fill:"url(#".concat(i("b"),")")}),a("path",{d:"M12.14 24.41l.85-1.466.793 1.544-.908 1.99-.735-2.069zm6.934-5.545l.85-1.465.793 1.543-.908 1.99-.735-2.068zm-4.747-5.851l.85-1.465.792 1.543-.908 1.99-.734-2.068",fill:"#F9A72B"}),a("path",{d:"M12.14 24.41l.85-1.716.793 1.794-.907 1.468-.736-1.546zm6.934-5.545l.851-1.716.792 1.794-.906 1.468-.737-1.546zm-4.747-5.851l.85-1.716.792 1.794-.906 1.468-.736-1.546",fill:"#FFF200"}),a("path",{d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55",fill:"#24265D"}),a("defs",null,a("linearGradient",{id:i("a"),x1:33.473,y1:7.674,x2:7.751,y2:21.331,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"})),a("linearGradient",{id:i("b"),x1:21.028,y1:14.928,x2:6.017,y2:18.844,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"}))))},Kst=Xst;var s6={};$(s6,{icon:()=>tut});var tur=E(L());var Yst=["title","titleId"];function Cq(){return Cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eut=function(t){var n=t.title,r=t.titleId,o=Qst(t,Yst);return a("svg",Cq({"data-type":"logoElastic",xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"outline",fillRule:"evenodd",clipRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0132 16.77a6.419 6.419 0 01-1.162 3.652 6.382 6.382 0 01-3.032 2.331 4.833 4.833 0 01-1.672 5.542 4.789 4.789 0 01-5.77-.074 9.016 9.016 0 01-4.5 3.322 8.982 8.982 0 01-5.587.023 9.014 9.014 0 01-4.526-3.287 9.067 9.067 0 01-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 011.145 18.9 6.341 6.341 0 010 15.242a6.42 6.42 0 011.163-3.652 6.384 6.384 0 013.035-2.33 4.833 4.833 0 011.658-5.557 4.789 4.789 0 015.78.07 9.037 9.037 0 014.93-3.446 9.007 9.007 0 015.994.419 9.05 9.05 0 014.407 4.098 9.097 9.097 0 01.873 5.965 6.298 6.298 0 013.02 2.32zm-18.28.658l7.002 3.211 7.066-6.213a7.85 7.85 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001zm-7.247 7.441A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001zm4.755-11.024l-4.8-1.137.002-.002a3.82 3.82 0 011.312-4.358 3.785 3.785 0 014.538.023l-1.052 5.474zm-5.216.01a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255zm18.286 17.848a3.737 3.737 0 01-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 01-1.801 4.68c-.54.283-1.14.432-1.751.434zm-1.31-7.499l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.311 5.311 0 00-.936-3.01 5.282 5.282 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#fff"}),a("path",{d:"M12.58 13.787l7.002 3.211 7.066-6.213a7.849 7.849 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001z",fill:"#FEC514"}),a("path",{d:"M5.333 21.228A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001z",fill:"#00BFB3"}),a("path",{d:"M5.288 9.067l4.8 1.137L11.14 4.73a3.785 3.785 0 00-5.914 1.94 3.82 3.82 0 00.064 2.395",fill:"#F04E98"}),a("path",{d:"M4.872 10.214a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255z",fill:"#1BA9F5"}),a("path",{d:"M20.873 27.277a3.736 3.736 0 002.285.785 3.783 3.783 0 003.101-1.63 3.812 3.812 0 00.451-3.484l-4.8-1.125-1.037 5.454z",fill:"#93C90E"}),a("path",{d:"M21.848 20.563l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.312 5.312 0 00-.936-3.01 5.283 5.283 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#07C"}))},tut=eut;var u6={};$(u6,{icon:()=>aut});var nur=E(L());var rut=["title","titleId"];function Aq(){return Aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function out(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iut=function(t){var n=t.title,r=t.titleId,o=nut(t,rut);return a("svg",Aq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M32 9V2.5A2.5 2.5 0 0029.5 0h-27A2.5 2.5 0 000 2.5V9h32z"}),a("path",{fill:"#00BFB3",d:"M0 20h32v-8H0z"}),a("path",{fill:"#0080D5",d:"M14.5 23H0v6.5A2.5 2.5 0 002.5 32h12v-9z"}),a("path",{fill:"#FEC514",d:"M17.5 23v9h12a2.5 2.5 0 002.5-2.5V23H17.5z"})))},aut=iut;var c6={};$(c6,{icon:()=>put});var iur=E(L());var lut=["title","titleId"];function Mq(){return Mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cut=function(t){var n=t.title,r=t.titleId,o=sut(t,lut);return a("svg",Mq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 000-8H2.524A15.984 15.984 0 002 16"}),a("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0030.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 003.413-1.338"}),a("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 00-1.556-1.662A5.034 5.034 0 0025.51 23"})))},put=cut;var p6={};$(p6,{icon:()=>gut});var lur=E(L());var fut=["title","titleId"];function Tq(){return Tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hut=function(t){var n=t.title,r=t.titleId,o=dut(t,fut);return a("svg",Tq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0016 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),a("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0013 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 000 16z",clipRule:"evenodd"}),a("path",{className:"euiIcon__fillNegative",fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0116 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 000-16z",clipRule:"evenodd"}))},gut=hut;var f6={};$(f6,{icon:()=>Out});var uur=E(L());var vut=["title","titleId"];function Rq(){return Rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function but(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wut=function(t){var n=t.title,r=t.titleId,o=yut(t,vut);return a("svg",Rq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#419EDA"},a("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),a("path",{d:"M31.522 16.495a5.845 5.845 0 01-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 00-3.027-3.703 6.137 6.137 0 012.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 01-1.51 2.829 23.77 23.77 0 00-4.362-1.855 23.79 23.79 0 00-4.355 1.851A6.246 6.246 0 0110.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 012.129 2.347 25.001 25.001 0 00-3.022 3.689 26.068 26.068 0 00.347 4.86 5.832 5.832 0 01-3.09.612L.03 16.46l.043.473a16.723 16.723 0 002.14 6.765l.234.41.35-.308a5.914 5.914 0 012.837-1.372 25.255 25.255 0 002.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 01-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 01-.383-3.244 23.905 23.905 0 004.585-1.165 25.286 25.286 0 002.43-4.086 5.94 5.94 0 012.851 1.373l.35.306.233-.408a16.661 16.661 0 002.14-6.764l.042-.472-.45.036zM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 01-2.113-4.594 20.072 20.072 0 01-.89-5.04 19.076 19.076 0 013.576-3.516 18.867 18.867 0 014.363-2.448 18.944 18.944 0 014.355 2.443 19.19 19.19 0 013.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 01-2.115 4.599z"})))},Out=wut;var d6={};$(d6,{icon:()=>jut});var pur=E(L());var xut=["title","titleId"];function zq(){return zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iut=function(t){var n=t.title,r=t.titleId,o=_ut(t,xut),i=_r("logo_gcp");return a("svg",zq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 01-2.464 1.398zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 00.712-.7c0-.386-.318-.7-.711-.7a.705.705 0 00-.712.7zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 00-.26-.955.718.718 0 00-.972.256.692.692 0 00.26.955z"}),a("path",{fill:"#4285F4",fillRule:"nonzero",d:"M25.036 3.416l2.873 4.894a1.427 1.427 0 00-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 010-1.399l3.696-6.292a2.853 2.853 0 012.464-1.398h13.143c.982 0 1.937.502 2.464 1.398zM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 00-.712.7c0 .386.318.7.711.7a.705.705 0 00.711-.7zm12.787.606a.692.692 0 00.26-.955.718.718 0 00-.971-.256.692.692 0 00-.26.955.718.718 0 00.971.256z"}),a("path",{fill:"#F4B400",fillRule:"nonzero",d:"M.394 14.601l2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 01-2.464-1.398L.394 17.398a2.754 2.754 0 010-2.797zm2.82.793a.718.718 0 00-.972.256.693.693 0 00.26.955c.34.193.775.078.971-.256a.692.692 0 00-.26-.955zM9.072 26.58a.692.692 0 00-.26.955.718.718 0 00.971.256.692.692 0 00.26-.955.718.718 0 00-.971-.256z"}),a("path",{fill:"#000",d:"M18.054 29.282l2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 00-1.232-.7",opacity:.1}),a("g",{opacity:.1,transform:"translate(2.994 9.609)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#000",d:"M.275 1.498L3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),a("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39L6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07zM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194z"})))},jut=Iut;var m6={};$(m6,{icon:()=>Aut});var mur=E(L());var Eut=["title","titleId"];function Dq(){return Dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cut=function(t){var n=t.title,r=t.titleId,o=Put(t,Eut);return a("svg",Dq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),a("path",{d:"M29.87 16.543a.862.862 0 01-1.167.308.832.832 0 01-.312-1.147.862.862 0 011.167-.308.832.832 0 01.312 1.147M22.56 28.15a.847.847 0 01-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 01-1.167-.308.832.832 0 01.312-1.147.862.862 0 011.167.308.832.832 0 01-.312 1.147M3.586 16.542a.863.863 0 01-1.167.308.832.832 0 01-.313-1.147.862.862 0 011.167-.308.832.832 0 01.313 1.147M22.987 5.665a.862.862 0 01-1.167-.308.832.832 0 01.312-1.147.863.863 0 011.168.308.832.832 0 01-.313 1.147m-13.57.112a.847.847 0 01-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797l-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0022.56 2H9.417a2.853 2.853 0 00-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 01-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 01-.003-1.391L.382 14.584a2.754 2.754 0 000 2.796l6.57 11.186a2.854 2.854 0 002.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 002.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},Aut=Cut;var h6={};$(h6,{icon:()=>Dut});var gur=E(L());var Mut=["title","titleId"];function Lq(){return Lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zut=function(t){var n=t.title,r=t.titleId,o=Tut(t,Mut);return a("svg",Lq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0116 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0z"}))},Dut=zut;var g6={};$(g6,{icon:()=>But});var yur=E(L());var Lut=["title","titleId"];function Nq(){return Nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wut=function(t){var n=t.title,r=t.titleId,o=Nut(t,Lut);return a("svg",Nq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 011.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 01-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07z"}),a("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084z"}),a("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 01-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 00-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075zm11.119-7.564l.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 00.071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 00-.064.064zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 00-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 01-.067-.027zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041zM15.355 19a.185.185 0 01.034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04z"}),a("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058z"}),a("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 012.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007z"}),a("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284z"}),a("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 01-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012z"})))},But=Wut;var v6={};$(v6,{icon:()=>$ut});var wur=E(L());var Hut=["title","titleId"];function Fq(){return Fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uut=function(t){var n=t.title,r=t.titleId,o=Vut(t,Hut);return a("svg",Fq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 00.045-1.09 2.676 2.676 0 00-1.786.455c-.26.19-.745.79-.24 1",fill:"#F6D2A2"}),a("path",{d:"M4.805 17.987a.6.6 0 01-.27-.06.62.62 0 01-.31-.55A.41.41 0 014 17.05a1.15 1.15 0 01.5-.83 2.752 2.752 0 011.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 00-.3.145c-.288.223-.63.364-.99.41zm1.271-2.067a2.502 2.502 0 00-1.47.45 1 1 0 00-.42.671.25.25 0 00.17.205h.05v.055a.5.5 0 00.21.45 1.31 1.31 0 001.065-.31 1.29 1.29 0 01.34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014z",fill:"#010101"}),a("path",{d:"M4.315 17.3a.745.745 0 00.376-.21z",fill:"#C7B199"}),a("path",{d:"M4.315 17.391a.092.092 0 11-.055-.175h.06a.54.54 0 00.275-.16.092.092 0 01.06-.035.09.09 0 01.068.017.09.09 0 01.035.06.091.091 0 01-.018.068.7.7 0 01-.36.22h-.065v.005z",fill:"#010101"}),a("path",{d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05z",fill:"#74CDDD"}),a("path",{d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 011.116-2.26 2.421 2.421 0 012.722.09l.07.044L6.54 6.154zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 004.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 00-1.28-.38l-.015-.015z",fill:"#010101"}),a("path",{d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667z",fill:"#74CDDD"}),a("path",{d:"M24.647 5.754l-2.201-3.802.065-.045a2.362 2.362 0 012.626-.22 2.427 2.427 0 011.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025zm-1.961-3.752l2.041 3.532a1.956 1.956 0 001.426-1.62 2.24 2.24 0 00-1.106-2.077 2.126 2.126 0 00-2.361.165z",fill:"#010101"}),a("path",{d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 011.591-1.141z",fill:"#F6D2A2"}),a("path",{d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 00-.9-.775l-.12-.035.074-.125a2.656 2.656 0 011.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 01-.45.725.905.905 0 01-.61.31zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 00.5-.235.661.661 0 00.371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 00-1.386.996h-.005z",fill:"#010101"}),a("path",{d:"M24.147 31.494a.09.09 0 01-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 00-.33-.61.091.091 0 01-.022-.098.09.09 0 01.147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 01-.04.12l-.04.03z",fill:"#010101"}),a("path",{d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 01-1.001-.235.325.325 0 01-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25z",fill:"#F6D2A2"}),a("path",{d:"M7.692 31.995a.613.613 0 01-.16 0 .74.74 0 01-.435-.375.301.301 0 01-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 00-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 01-.486.126zm-.6-.58a.245.245 0 01.105 0h.025l.04.08a.58.58 0 00.335.305.686.686 0 00.5-.12c.26-.155.503-.337.726-.54a3 3 0 011.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 00.105.07l.02-.005z",fill:"#010101"}),a("path",{d:"M7.157 31.614a.09.09 0 01-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 11.165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 01-.067.084.09.09 0 01-.038.002zM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35z",fill:"#010101"}),a("path",{d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 01-.046-1.09 2.677 2.677 0 011.787.454c.26.19.745.79.24 1.001",fill:"#F6D2A2"}),a("path",{d:"M26.728 17.846a2.046 2.046 0 01-.955-.36 1.117 1.117 0 00-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 01-.026-.856v-.12h.076a2.751 2.751 0 011.846.47 1.15 1.15 0 01.5.83.412.412 0 01-.225.326.62.62 0 01-.31.55.605.605 0 01-.306.055zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 001.067.31.502.502 0 00.21-.45v-.06h.05a.25.25 0 00.17-.205 1.002 1.002 0 00-.42-.67 2.552 2.552 0 00-1.627-.46z",fill:"#010101"}),a("path",{d:"M27.218 17.181a.746.746 0 01-.375-.195z",fill:"#C7B199"}),a("path",{d:"M27.219 17.271h-.095a.7.7 0 01-.35-.25.09.09 0 01-.007-.101.091.091 0 01.152-.01.54.54 0 00.275.16h.06a.101.101 0 11-.035.201z",fill:"#010101"}),a("path",{d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066",fill:"#74CDDD"}),a("path",{d:"M15.502 31.494h-.62a13.202 13.202 0 01-4.358-.87 6.969 6.969 0 01-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 013.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272zM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 01-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0020.445.841a14.96 14.96 0 00-5.038-.685z",fill:"#010101"}),a("path",{d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03z",fill:"#fff"}),a("path",{d:"M18.979 7.39a3.457 3.457 0 01-1.13-.185 2.797 2.797 0 01-1.892-2.266 2.882 2.882 0 01.78-2.222 3.407 3.407 0 012.002-1 3.202 3.202 0 012.031.35 2.727 2.727 0 011.296 1.806 2.643 2.643 0 01-.77 2.682 3.502 3.502 0 01-2.317.835zm-2.847-2.476a2.626 2.626 0 001.776 2.126 3.417 3.417 0 003.277-.62 2.502 2.502 0 00.716-2.502 2.672 2.672 0 00-3.132-2.031 2.887 2.887 0 00-2.637 3.027z",fill:"#010101"}),a("path",{d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855z",fill:"#fff"}),a("path",{d:"M11.474 7.705a3.232 3.232 0 01-1.536-.375 2.727 2.727 0 01-1.355-1.776 2.757 2.757 0 01.94-2.827 3.552 3.552 0 013.532-.45 2.672 2.672 0 011.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 01-.565.025zM8.763 5.52A2.732 2.732 0 0012.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 00-1.5-2.262 3.377 3.377 0 00-3.358.43 2.597 2.597 0 00-.885 2.637z",fill:"#010101"}),a("path",{d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 01-.585.36.861.861 0 01-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344z",fill:"#fff"}),a("path",{d:"M16.237 11.483h-.025a.944.944 0 01-.725-.566 5.95 5.95 0 010-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 01-.476.34l-.155.06h-.03zm-.58-.63a.766.766 0 00.56.445l.14-.056a.6.6 0 00.366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005zM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965z",fill:"#010101"}),a("path",{d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245z",fill:"#fff"}),a("path",{d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965z",fill:"#010101"}),a("path",{d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245zM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 01.046-1.77l-1.316.334z",fill:"#fff"}),a("path",{d:"M14.812 11.428a.5.5 0 01-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 000 1.181v.065a1.056 1.056 0 01-.815.55zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 010-1.18c0-.146 0-.3.031-.45l-1.14.3z",fill:"#010101"}),a("path",{d:"M14.38 7.595a1.146 1.146 0 00-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105z",fill:"#F6D2A2"}),a("path",{d:"M17.268 9.727a2 2 0 01-.73-.206 2.207 2.207 0 00-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 010-1.05 1.281 1.281 0 011.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 01-.88 1.08zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 00.205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 00-.85.59.906.906 0 000 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185z",fill:"#231F20"}),a("path",{d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36z",fill:"#010101"}))},$ut=Uut;var y6={};$(y6,{icon:()=>Yut});var xur=E(L());var Jut=["title","titleId"];function Wq(){return Wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kut=function(t){var n=t.title,r=t.titleId,o=Gut(t,Jut),i=_r("logo_google_g");return a("svg",Wq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32",width:32,height:32,"aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),a("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),a("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 01-.5-3.032 9.59 9.59 0 01.5-3.032V.052h-5.33A15.95 15.95 0 000 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),a("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),a("g",{fill:"none",fillRule:"evenodd"},a("g",{transform:"translate(15.955 13.087)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#4285F4",fillRule:"nonzero",mask:"url(#".concat(i("b"),")"),d:"M.001 15.006h15.318V.014H.001z"})),a("g",{transform:"translate(1.613 19.003)"},a("mask",{id:i("d"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("c"))})),a("path",{fill:"#34A853",fillRule:"nonzero",mask:"url(#".concat(i("d"),")"),d:"M.084 12.956h24.819V.031H.084z"})),a("g",{transform:"translate(0 8.784)"},a("mask",{id:i("f"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("e"))})),a("path",{fill:"#FBBC04",fillRule:"nonzero",mask:"url(#".concat(i("f"),")"),d:"M0 14.384h7.028V.052H0z"})),a("g",{transform:"translate(1.613)"},a("mask",{id:i("h"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("g"))})),a("path",{fill:"#EA4335",fillRule:"nonzero",mask:"url(#".concat(i("h"),")"),d:"M.084 12.97h24.935V.046H.084z"}))))},Yut=Kut;var b6={};$(b6,{icon:()=>rct});var Iur=E(L());var Qut=["title","titleId"];function Bq(){return Bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ect(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tct=function(t){var n=t.title,r=t.titleId,o=Zut(t,Qut),i=_r("logo_haproxy");return a("svg",Bq({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{clipPath:"url(#".concat(i("clip0"),")")},a("path",{d:"M16.05 13.237l-3.11-3.612",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M6.117 10.528l2.509 3.512",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M16.05 13.237l3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M5.114 15.043l3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117L19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512L12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M9.327 7.117L6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512L9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258L1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043L1.4 18.555M5.114 19.258L1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528L4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803",stroke:"#083D5F",strokeWidth:.05,strokeMiterlimit:10}),a("path",{d:"M13.943 15.244h-3.612v3.592h3.612v-3.592zM17.756 11.331h-3.612v3.592h3.612v-3.592zM17.756 19.157h-3.612v3.592h3.612v-3.592zM21.669 15.244h-3.612v3.592h3.612v-3.592z",fill:"#006DA8"}),a("path",{d:"M20.365 8.421h-2.509V10.9h2.509V8.42zM14.144 8.321h-2.509v2.478h2.509V8.321zM9.83 12.836H7.32v2.478H9.83v-2.478zM9.83 18.956H7.32v2.479H9.83v-2.479zM24.679 18.956H22.17v2.479h2.509v-2.479zM24.679 12.736H22.17v2.478h2.509v-2.478z",fill:"#2F77BC"}),a("path",{d:"M6.92 9.625H5.314v1.676H6.92V9.625zM10.13 6.214H8.526v1.675h1.606V6.214zM14.445 4.609h-1.606v1.675h1.606V4.61zM5.916 14.14H4.311v1.676h1.605V14.14zM26.786 9.826H25.08v1.646h1.706V9.826zM23.575 6.415H21.87V8.06h1.705V6.415zM19.26 4.81h-1.705v1.645h1.706V4.809zM27.689 14.441h-1.605v1.646h1.605V14.44z",fill:"#139BD7"}),a("path",{d:"M14.144 23.27h-2.509v2.479h2.509v-2.478zM20.264 23.27h-2.508v2.479h2.508v-2.478z",fill:"#2F77BC"}),a("path",{d:"M26.685 22.77H25.08v1.675h1.605v-1.676zM23.375 26.08H21.77v1.676h1.605V26.08zM19.06 27.686h-1.605v1.675h1.605v-1.675zM27.589 18.254h-1.606v1.676h1.606v-1.676zM6.92 22.97H5.214v1.646H6.92V22.97zM10.03 26.381H8.325v1.646h1.705V26.38zM14.445 27.987h-1.706v1.645h1.706v-1.645zM5.816 18.355H4.21V20h1.606v-1.645z",fill:"#139BD7"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933z",fill:"#03A9DA"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933zM25.682 27.886h-.903v.933h.903v-.933zM31 17.953h-.903v.933H31v-.933zM7.12 27.987h-.903v.933h.903v-.933zM30.398 20.763h-.903v.933h.903v-.933zM20.665 30.596h-.903v.933h.903v-.933zM29.295 23.371h-.903v.933h.903v-.933zM27.69 25.78h-.904v.932h.903v-.933zM23.274 29.793h-.903v.902h.903v-.902zM17.756 31.498h-.903v.903h.903v-.903zM9.428 29.492h-.903v.933h.903v-.933zM3.508 23.472h-.903v.933h.903v-.933zM2.304 20.863h-.903v.933h.903v-.933zM5.013 25.88H4.11v.933h.903v-.933zM1.903 17.953H1v.933h.903v-.933zM14.947 31.498h-.903v.933h.902v-.933zM12.137 30.596h-.903v.933h.903v-.933z",fill:"#03A9DA"})),a("defs",null,a("clipPath",{id:i("clip0")},a("path",{d:"M0 0h32v32H0V0z",fill:"#fff"}))))},rct=tct;var w6={};$(w6,{icon:()=>lct});var Pur=E(L());var nct=["title","titleId"];function Hq(){return Hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var act=function(t){var n=t.title,r=t.titleId,o=oct(t,nct),i=_r("logo_ibm");return a("svg",Hq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},a("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),a("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),a("stop",{offset:"100%",stopColor:"#21A2EF"})),a("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},a("stop",{offset:"0%",stopColor:"#207FFA"}),a("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),a("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},a("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),a("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),a("stop",{offset:"86.716%",stopColor:"#60CBE7"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},a("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),a("stop",{offset:"22.427%",stopColor:"#38D2E0"}),a("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},a("stop",{offset:"0%",stopColor:"#126CFD"}),a("stop",{offset:"100%",stopColor:"#21A1EF"}))),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08z"}),a("path",{fill:"url(#".concat(i("a"),")"),d:"M16.536 19.645l-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 010-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 000 13.445l-.851.843z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 00-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 01-4.922-2.059A6.876 6.876 0 01.029 20.91l1.204.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063z",transform:"translate(0 2)"})))},lct=act;var O6={};$(O6,{icon:()=>fct});var Aur=E(L());var sct=["title","titleId"];function Vq(){return Vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pct=function(t){var n=t.title,r=t.titleId,o=uct(t,sct);return a("svg",Vq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M.047 22.909l1.186.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 01-4.922-2.06A6.876 6.876 0 01.029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 00-3.412 5.18l-1.186-.01zm4.215-9.787a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08zM16.366 19.78H16a2.322 2.322 0 01-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 015.057-5.533 8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876 7.009 7.009 0 00-4.288 4.613c-.115.399-.115.399 0 0h-.44zM6.154 23.826a10.626 10.626 0 012.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 007.264 23.36a6.99 6.99 0 00-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466z"}))},fct=pct;var x6={};$(x6,{icon:()=>vct});var Tur=E(L());var dct=["title","titleId"];function qq(){return qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gct=function(t){var n=t.title,r=t.titleId,o=mct(t,dct);return a("svg",qq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 002.939 1.331 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926 3.93 3.93 0 00-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 00-3.14-1.825V8.71a3.932 3.932 0 003.119-3.842A3.93 3.93 0 0012.012.941a3.93 3.93 0 00-3.926 3.926 3.93 3.93 0 003.048 3.824v2.249a5.075 5.075 0 00-4.193 4.99 5.075 5.075 0 004.229 4.995V23.3a3.931 3.931 0 00-3.084 3.833 3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.927-3.926 3.931 3.931 0 00-3.084-3.833v-2.375a5.07 5.07 0 003.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904zM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 01-1.903-1.904zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 01-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904zm-1.904-8.548a2.658 2.658 0 01-2.655-2.655 2.658 2.658 0 012.655-2.655 2.658 2.658 0 012.655 2.655 2.658 2.658 0 01-2.655 2.655zm9.553 4.867a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903z"}))},vct=gct;var _6={};$(_6,{icon:()=>xct});var zur=E(L());var yct=["title","titleId"];function Uq(){return Uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oct=function(t){var n=t.title,r=t.titleId,o=bct(t,yct);return a("svg",Uq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),a("path",{className:"euiIcon__fillNegative",d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 004 12"}),a("path",{fill:"#00BFB3",d:"M18.479 16.664L6.268 30.754l-1.073 1.237h23.191c-1.252-6.292-4.883-11.719-9.908-15.327"})))},xct=Oct;var S6={};$(S6,{icon:()=>Ect});var Lur=E(L());var _ct=["title","titleId"];function $q(){return $q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jct=function(t){var n=t.title,r=t.titleId,o=Sct(t,_ct);return a("svg",$q({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.89.003a2.14 2.14 0 011.03.206l11.127 5.304a2.11 2.11 0 011.15 1.429l2.75 11.921a2.09 2.09 0 01-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 01-.41-1.783L2.798 6.945a2.11 2.11 0 011.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 00-5.555 2.666 9.98 9.98 0 01-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 00-.464-.175.642.642 0 00-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 00-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 003.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 006.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 003.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 00-.139-3.104 8.599 8.599 0 00-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 00-5.528-2.666 16.036 16.036 0 01-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156l-.198 3.488-.014.007a.587.587 0 01-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 014.014-1.919zm1.668 0a6.922 6.922 0 013.99 1.92l-2.846 2.015-.01-.004a.588.588 0 01-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222l2.614 2.335-.003.014a.585.585 0 01-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 01.973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 01.145 2.229l-3.37-.97-.002-.013a.586.586 0 01-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 01.135.01l.005-.008 3.468.586a6.858 6.858 0 01-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 01.51-.818zm-5.824.014a.587.587 0 01.53.817l.01.012-1.331 3.214a6.886 6.886 0 01-2.767-3.458l3.437-.582.006.007a.595.595 0 01.115-.01zm2.904 1.407a.582.582 0 01.275.059.583.583 0 01.263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 01-3.758-.194l1.69-3.05h.003a.588.588 0 01.497-.31z",fill:"#326CE5"}))},Ect=jct;var I6={};$(I6,{icon:()=>Mct});var Fur=E(L());var Pct=["title","titleId"];function Jq(){return Jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Act=function(t){var n=t.title,r=t.titleId,o=kct(t,Pct);return a("svg",Jq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 019 9h13c0-12.15-9.85-22-22-22"}),a("path",{className:"euiIcon__fillNegative",d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436"}),a("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},Mct=Act;var j6={};$(j6,{icon:()=>Lct});var Bur=E(L());var Tct=["title","titleId"];function Gq(){return Gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dct=function(t){var n=t.title,r=t.titleId,o=Rct(t,Tct);return a("svg",Gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),a("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),a("path",{className:"euiIcon__fillNegative",d:"M3 20c0 6.627 5.373 12 12 12h1V20H3z"}))},Lct=Dct;var E6={};$(E6,{icon:()=>Hct});var Vur=E(L());var Nct=["title","titleId"];function Xq(){return Xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bct=function(t){var n=t.title,r=t.titleId,o=Fct(t,Nct);return a("svg",Xq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0116 0a9.5 9.5 0 019.5 9.5"}),a("path",{className:"euiIcon__fillNegative",d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 00-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925"}),a("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 01-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 01-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 009.271 0L32 21.925l-6.47-4.852z"}))},Hct=Bct;var P6={};$(P6,{icon:()=>Jct});var Uur=E(L());var Vct=["title","titleId"];function Kq(){return Kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $ct=function(t){var n=t.title,r=t.titleId,o=qct(t,Vct),i=_r("logo_memcached");return a("svg",Kq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},a("stop",{offset:"0%",stopColor:"#574C4A"}),a("stop",{offset:"100%",stopColor:"#80716D"})),a("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},a("stop",{offset:"0%",stopColor:"#268D83"}),a("stop",{offset:"100%",stopColor:"#2EA19E"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567z"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889z"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333z",opacity:.1}),a("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18z",opacity:.3})))},Jct=$ct;var k6={};$(k6,{icon:()=>Qct});var Gur=E(L());var Gct=["title","titleId"];function Yq(){return Yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yct=function(t){var n=t.title,r=t.titleId,o=Xct(t,Gct);return a("svg",Yq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 00-7.07 0L2 28v4z"}),a("path",{className:"euiIcon__fillNegative",d:"M16.465 13.535l-3.536 3.536a9.965 9.965 0 007.07 2.93 9.965 9.965 0 007.072-2.93l-3.536-3.536a5 5 0 00-7.07 0"}),a("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0120 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0030 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207z"})))},Qct=Yct;var C6={};$(C6,{icon:()=>npt});var Kur=E(L());var Zct=["title","titleId"];function Qq(){return Qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rpt=function(t){var n=t.title,r=t.titleId,o=ept(t,Zct);return a("svg",Qq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFF",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#A6A385",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"}),a("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"})))},npt=rpt;var A6={};$(A6,{icon:()=>spt});var Qur=E(L());var opt=["title","titleId"];function Zq(){return Zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lpt=function(t){var n=t.title,r=t.titleId,o=ipt(t,opt);return a("svg",Zq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#00546B"},a("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 00-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 01-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 01-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 016.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24z"}),a("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5z"})))},spt=lpt;var M6={};$(M6,{icon:()=>dpt});var ecr=E(L());var upt=["title","titleId"];function eU(){return eU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ppt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fpt=function(t){var n=t.title,r=t.titleId,o=cpt(t,upt);return a("svg",eU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#119639",d:"M16 0l13.856 8v16L16 32 2.144 24V8z"}),a("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 11-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 013.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512z"})))},dpt=fpt;var T6={};$(T6,{icon:()=>ypt});var rcr=E(L());var mpt=["title","titleId"];function tU(){return tU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vpt=function(t){var n=t.title,r=t.titleId,o=hpt(t,mpt);return a("svg",tU({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17z",fill:"#F04E98"}),a("path",{className:"euiIcon__fillNegative",d:"M10 32h9V8h-9z"}),a("path",{d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32z",fill:"#07C"}))},ypt=vpt;var R6={};$(R6,{icon:()=>_pt});var ocr=E(L());var bpt=["title","titleId"];function rU(){return rU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Opt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xpt=function(t){var n=t.title,r=t.titleId,o=wpt(t,bpt);return a("svg",rU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),a("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),a("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),a("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),a("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),a("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),a("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),a("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},_pt=xpt;var z6={};$(z6,{icon:()=>Ppt});var acr=E(L());var Spt=["title","titleId"];function nU(){return nU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ept=function(t){var n=t.title,r=t.titleId,o=Ipt(t,Spt),i=_r("logo_php");return a("svg",nU({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),a("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),a("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),a("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},a("stop",{offset:"0%",stopColor:"#AEB2D5"}),a("stop",{offset:"30%",stopColor:"#AEB2D5"}),a("stop",{offset:"75%",stopColor:"#484C89"}),a("stop",{offset:"100%",stopColor:"#484C89"}))),a("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},a("g",{transform:"translate(.592 .86)"},a("mask",{id:i("c"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},a("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),a("mask",{id:i("e"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("d"))})),a("g",{mask:"url(#".concat(i("e"),")")},a("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),a("mask",{id:i("g"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("f"))})),a("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},a("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843zM5.31 4.172a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H5.309z"}),a("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883H6.833a.323.323 0 01-.317-.261L4.992 4.396a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284z"}),a("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 00-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 00-.159-.131H12.58a.161.161 0 00-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 00.159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 00-.158-.131h-1.721z"}),a("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 01-.317-.261L12.263 6.48a.323.323 0 01.317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 01.317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 01-.316.385m0-.323l-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),a("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843zm-3.392-3.645a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H18.64z"}),a("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883h-3.284a.323.323 0 01-.317-.261l-1.524-7.841a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284z"}))))},Ppt=Ept;var D6={};$(D6,{icon:()=>Tpt});var ucr=E(L());var kpt=["title","titleId"];function oU(){return oU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mpt=function(t){var n=t.title,r=t.titleId,o=Cpt(t,kpt);return a("svg",oU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 00-4.06.551 15.573 15.573 0 00-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 00-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),a("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 00-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 012.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),a("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 00-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 00.097-.006.947.947 0 00.53-.281c.135-.138.213-.291.199-.391"}),a("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 00-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 00-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 012.532-2.778 4.18 4.18 0 001.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 001.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104zM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 01-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 00.015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 00-3.572-2.604 12.407 12.407 0 012.68-.244zM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 01-2.352-1.011zm.133 4.594a2.07 2.07 0 01-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 00-.02-.143 1.823 1.823 0 00-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 00-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 00.195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821z"})))},Tpt=Mpt;var L6={};$(L6,{icon:()=>Npt});var pcr=E(L());var Rpt=["title","titleId"];function iU(){return iU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lpt=function(t){var n=t.title,r=t.titleId,o=zpt(t,Rpt);return a("svg",iU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73zm7.475-4.963H8.43v-2.711h14.95v2.71zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001z"}))},Npt=Lpt;var N6={};$(N6,{icon:()=>Vpt});var dcr=E(L());var Fpt=["title","titleId"];function aU(){return aU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hpt=function(t){var n=t.title,r=t.titleId,o=Wpt(t,Fpt);return a("svg",aU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058z"}))},Vpt=Hpt;var F6={};$(F6,{icon:()=>Gpt});var hcr=E(L());var qpt=["title","titleId"];function lU(){return lU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $pt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jpt=function(t){var n=t.title,r=t.titleId,o=Upt(t,qpt);return a("svg",lU({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{transform:"translate(0 3)",fill:"none"},a("path",{d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z",fill:"#A41E11"}),a("path",{d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z",fill:"#D82C20"}),a("path",{d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{fill:"#FFF",d:"M20.157 3.985l-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123l-5.118-2.11 7.334-1.119z"}),a("ellipse",{fill:"#FFF",cx:9.541,cy:6.311,rx:3.92,ry:1.51}),a("path",{fill:"#7A0C00",d:"M23.398 4.386l4.34 1.705-4.336 1.703z"}),a("path",{fill:"#AD2115",d:"M18.596 6.274l4.802-1.888.004 3.408-.471.183z"})))},Gpt=Jpt;var W6={};$(W6,{icon:()=>Zpt});var vcr=E(L());var Xpt=["title","titleId"];function sU(){return sU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ypt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qpt=function(t){var n=t.title,r=t.titleId,o=Kpt(t,Xpt);return a("svg",sU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9z",fill:"#FA744E"}),a("path",{d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073z",fill:"#1DBAB0"}),a("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10z",className:"euiIcon__fillNegative"}))},Zpt=Qpt;var B6={};$(B6,{icon:()=>oft});var bcr=E(L());var eft=["title","titleId"];function uU(){return uU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nft=function(t){var n=t.title,r=t.titleId,o=tft(t,eft);return a("svg",uU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),a("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20z"}),a("path",{className:"euiIcon__fillNegative",d:"M2.533 10L.428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533z"})))},oft=nft;var H6={};$(H6,{icon:()=>uft});var Ocr=E(L());var ift=["title","titleId"];function cU(){return cU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sft=function(t){var n=t.title,r=t.titleId,o=aft(t,ift);return a("svg",cU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFAE00",d:"M16 32L0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),a("path",{fill:"#EC6C00",d:"M16 32L0 11.454h32z"}),a("path",{fill:"#FFAE00",d:"M16 32L6.477 11.454h19.045z"}),a("path",{fill:"#FFEFB4",d:"M16 0L6.477 11.454h19.045z"}),a("path",{fill:"#FFAE00",d:"M6.932 1.074L3.369 6.3.001 11.454h6.542zM25.069 1.074L28.632 6.3 32 11.454h-6.542z"}),a("path",{fill:"#FED305",d:"M6.931 1.074l-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},uft=sft;var V6={};$(V6,{icon:()=>mft});var _cr=E(L());var cft=["title","titleId"];function pU(){return pU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dft=function(t){var n=t.title,r=t.titleId,o=pft(t,cft);return a("svg",pU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 01-3.33 3.33 3.337 3.337 0 01-3.328-3.33 3.337 3.337 0 013.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 013.33-3.329 3.337 3.337 0 013.328 3.33v8.335a3.337 3.337 0 01-3.329 3.329 3.337 3.337 0 01-3.329-3.33V20.18z"}),a("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 01-3.33-3.33A3.337 3.337 0 0111.82.156a3.337 3.337 0 013.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 013.328 3.33 3.337 3.337 0 01-3.329 3.328H3.484a3.337 3.337 0 01-3.33-3.329 3.337 3.337 0 013.33-3.329h8.335z"}),a("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 013.329-3.33 3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 01-3.329 3.328 3.337 3.337 0 01-3.329-3.329V3.484a3.337 3.337 0 013.33-3.33 3.337 3.337 0 013.328 3.33v8.335z"}),a("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 013.33 3.329 3.337 3.337 0 01-3.33 3.329 3.337 3.337 0 01-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 01-3.329-3.329 3.337 3.337 0 013.33-3.329h8.335a3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328H20.18z"})))},mft=dft;var q6={};$(q6,{icon:()=>bft});var Icr=E(L());var hft=["title","titleId"];function fU(){return fU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yft=function(t){var n=t.title,r=t.titleId,o=gft(t,hft);return a("svg",fU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0016 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2z"}),a("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 008.544-7.834A12.43 12.43 0 0113 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547z"}),a("path",{className:"euiIcon__fillNegative",d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 01-7.852-2.78 15.042 15.042 0 01-10.11 8.343A15.91 15.91 0 0016.002 32c6.314 0 11.758-3.669 14.36-8.98"}))},bft=yft;var U6={};$(U6,{icon:()=>Sft});var Ecr=E(L());var wft=["title","titleId"];function dU(){return dU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ft=function(t){var n=t.title,r=t.titleId,o=Oft(t,wft);return a("svg",dU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 019.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121z"}),a("path",{fill:"#4B4B4B",d:"M18.73 10.926l2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 00-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 012.08-3.192 3.243 3.243 0 013.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972z"}),a("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 01-4.553-.157c-.249-.267-.445-.585-.692-.913z"})))},Sft=_ft;var $6={};$($6,{icon:()=>kft});var kcr=E(L());var Ift=["title","titleId"];function mU(){return mU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pft=function(t){var n=t.title,r=t.titleId,o=jft(t,Ift);return a("svg",mU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00ADEF",d:"M0 4.51l12.977-1.768.006 12.518-12.971.074L0 4.51zm12.97 12.192l.011 12.529-12.97-1.784-.002-10.829 12.962.084zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511zm17.21 14.308l-.003 15.033-17.207-2.429-.024-12.632 17.235.028z"}))},kft=Pft;var J6={};$(J6,{icon:()=>Rft});var Acr=E(L());var Cft=["title","titleId"];function hU(){return hU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tft=function(t){var n=t.title,r=t.titleId,o=Aft(t,Cft);return a("svg",hU({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05z",fill:"#FEC514"}),a("path",{d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2z",fill:"#F04E98"}),a("path",{d:"M15.384 24.89L12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137z",className:"euiIcon__fillNegative"}))},Rft=Tft;var G6={};$(G6,{icon:()=>Fft});var Tcr=E(L());var zft=["title","titleId"];function gU(){return gU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nft=function(t){var n=t.title,r=t.titleId,o=Dft(t,zft);return a("svg",gU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24zm2.394-1.206l-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 011 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23zm-.578-.856a.56.56 0 00.118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18z"}))},Fft=Nft;var X6={};$(X6,{icon:()=>qft});var zcr=E(L());var Wft=["title","titleId"];function vU(){return vU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vft=function(t){var n=t.title,r=t.titleId,o=Bft(t,Wft);return a("svg",vU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.799l-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 011.265-2.885V0h1v6.178a2.003 2.003 0 011.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32z"}))},qft=Vft;var K6={};$(K6,{icon:()=>Xft});var Lcr=E(L());var Uft=["title","titleId"];function yU(){return yU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gft=function(t){var n=t.title,r=t.titleId,o=$ft(t,Uft);return a("svg",yU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.747 10.992h13.1a.123.123 0 00.122-.123V8.51a.122.122 0 00-.122-.122H1.122A.122.122 0 001 8.51v2.36c0 .066.055.122.122.122h.625zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 010 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24z"}))},Xft=Gft;var Y6={};$(Y6,{icon:()=>edt});var Fcr=E(L());var Kft=["title","titleId"];function bU(){return bU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zft=function(t){var n=t.title,r=t.titleId,o=Yft(t,Kft);return a("svg",bU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 010 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008zm11.549 1H1.12A.123.123 0 001 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 00.122-.122V5.13a.123.123 0 00-.122-.122h-1.088zm-5.301 9.097l2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528z"}))},edt=Zft;var Q6={};$(Q6,{icon:()=>idt});var Bcr=E(L());var tdt=["title","titleId"];function wU(){return wU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var odt=function(t){var n=t.title,r=t.titleId,o=rdt(t,tdt);return a("svg",wU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 01-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 002.245 2.245h6.568a2.247 2.247 0 002.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 01-3.244 3.245zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1z"}))},idt=odt;var Z6={};$(Z6,{icon:()=>cdt});var Vcr=E(L());var adt=["title","titleId"];function OU(){return OU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var udt=function(t){var n=t.title,r=t.titleId,o=ldt(t,adt);return a("svg",OU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.552 10.71a3.008 3.008 0 004.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 11-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 00-.739 4.189zm8.296-2.137l1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15zm-4.6-6.571l1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151zm1.97 1.068L9.07 1.428a1.003 1.003 0 00-1.397-.246L3.566 4.057A5.995 5.995 0 001.092 7.94a5.993 5.993 0 00.996 4.495 5.99 5.99 0 003.883 2.473 5.991 5.991 0 004.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 00-1.396-.246l-4.107 2.875a2.002 2.002 0 01-1.498.332 2 2 0 01-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396z"}))},cdt=udt;var ew={};$(ew,{icon:()=>hdt});var Ucr=E(L());var pdt=["title","titleId"];function xU(){return xU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ddt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mdt=function(t){var n=t.title,r=t.titleId,o=fdt(t,pdt);return a("svg",xU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.143 15.85l-3.872-3.872a.5.5 0 01-.034-.738 6.01 6.01 0 000-8.486 6.004 6.004 0 00-8.484 0 6.01 6.01 0 000 8.486 5.96 5.96 0 004.242 1.757.5.5 0 010 1 6.955 6.955 0 01-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 01-.708.708zM6.254 3l.277 5.063h.935L7.754 3h-1.5zm.222 7.548a.727.727 0 00.533.222.717.717 0 00.52-.22.715.715 0 00.225-.53.716.716 0 00-.222-.534.724.724 0 00-.523-.216.731.731 0 00-.533.219.719.719 0 00-.222.53c0 .205.074.38.222.529z"}))},hdt=mdt;var tw={};$(tw,{icon:()=>wdt});var Jcr=E(L());var gdt=["title","titleId"];function _U(){return _U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ydt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bdt=function(t){var n=t.title,r=t.titleId,o=vdt(t,gdt);return a("svg",_U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 6a.5.5 0 010 1h-6a.5.5 0 010-1h6zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},wdt=bdt;var rw={};$(rw,{icon:()=>Idt});var Xcr=E(L());var Odt=["title","titleId"];function SU(){return SU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _dt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sdt=function(t){var n=t.title,r=t.titleId,o=xdt(t,Odt);return a("svg",SU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 6h2.5a.5.5 0 010 1H7v2.5a.5.5 0 01-1 0V7H3.5a.5.5 0 010-1H6V3.5a.5.5 0 011 0V6zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},Idt=Sdt;var nw={};$(nw,{icon:()=>Cdt});var Ycr=E(L());var jdt=["title","titleId"];function IU(){return IU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kdt=function(t){var n=t.title,r=t.titleId,o=Edt(t,jdt);return a("svg",IU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.55 14.224a.502.502 0 00.897 0l4-8a.5.5 0 00.053-.235 4.672 4.672 0 00-.084-.705 5.538 5.538 0 00-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 00.053.235l3.997 8zM8 5a1 1 0 100 2 1 1 0 000-2zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895z"}))},Cdt=kdt;var ow={};$(ow,{icon:()=>zdt});var Zcr=E(L());var Adt=["title","titleId"];function jU(){return jU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rdt=function(t){var n=t.title,r=t.titleId,o=Mdt(t,Adt);return a("svg",jU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),a("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0zm1 6h14V4H1v5z"}))},zdt=Rdt;var iw={};$(iw,{icon:()=>Wdt});var tpr=E(L());var Ddt=["title","titleId"];function EU(){return EU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fdt=function(t){var n=t.title,r=t.titleId,o=Ldt(t,Ddt);return a("svg",EU({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 2h16v2H0V2zm0 5h16v2H0V7zm16 5H0v2h16v-2z"}))},Wdt=Fdt;var aw={};$(aw,{icon:()=>Udt});var npr=E(L());var Bdt=["title","titleId"];function PU(){return PU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qdt=function(t){var n=t.title,r=t.titleId,o=Hdt(t,Bdt);return a("svg",PU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5zM3.51 4a.513.513 0 01-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 11.707.707L9.14 12.56A1.496 1.496 0 018.026 13L7.993 13a.501.501 0 01-.118-.014 1.493 1.493 0 01-.857-.426l-2.122-2.12a.5.5 0 01.708-.708l1.889 1.89V4H3.51zM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5z"}))},Udt=qdt;var lw={};$(lw,{icon:()=>Kdt});var ipr=E(L());var $dt=["title","titleId"];function kU(){return kU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xdt=function(t){var n=t.title,r=t.titleId,o=Jdt(t,$dt);return a("svg",kU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.014 7.382a.501.501 0 00-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 10.708-.708L2.208 8H14.5a.5.5 0 000-1H2.379l1.889-1.89a.5.5 0 00-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858zM14.5 3h-7a.5.5 0 000 1h7a.5.5 0 000-1zm0 8h-7a.5.5 0 100 1h7a.5.5 0 100-1z"}))},Kdt=Xdt;var sw={};$(sw,{icon:()=>t0t});var lpr=E(L());var Ydt=["title","titleId"];function CU(){return CU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e0t=function(t){var n=t.title,r=t.titleId,o=Qdt(t,Ydt);return a("svg",CU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.986 7.382a.501.501 0 01.013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 11-.708-.708L13.792 8H1.5a.5.5 0 010-1h12.121l-1.889-1.89a.5.5 0 01.707-.706l2.121 2.12c.241.242.383.544.426.858zM1.5 3h7a.5.5 0 010 1h-7a.5.5 0 010-1zm0 8h7a.5.5 0 110 1h-7a.5.5 0 110-1z"}))},t0t=e0t;var uw={};$(uw,{icon:()=>a0t});var upr=E(L());var r0t=["title","titleId"];function AU(){return AU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i0t=function(t){var n=t.title,r=t.titleId,o=n0t(t,r0t);return a("svg",AU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10.01 8.5zM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 01-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 11-.707-.707L6.86 3.44A1.496 1.496 0 017.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 01-.708.708l-1.889-1.89V12H12.5zM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 8.5z"}))},a0t=i0t;var cw={};$(cw,{icon:()=>p0t});var ppr=E(L());var l0t=["title","titleId"];function MU(){return MU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c0t=function(t){var n=t.title,r=t.titleId,o=s0t(t,l0t);return a("svg",MU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.352 6H2.5a.5.5 0 010-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 01.705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 015.5 9a.54.54 0 01-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6zm1.296 4H13.5a.5.5 0 010 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0110.5 14a.532.532 0 01-.38-.153l-3-3.063a.397.397 0 010-.568l3-3.063a.551.551 0 01.705-.047c.21.156.235.433.055.616L8.648 10z"}))},p0t=c0t;var pw={};$(pw,{icon:()=>g0t});var dpr=E(L());var f0t=["title","titleId"];function TU(){return TU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h0t=function(t){var n=t.title,r=t.titleId,o=d0t(t,f0t);return a("svg",TU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.146 14.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4zM6.5 8A1.5 1.5 0 018 9.5v3a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 010-1h3zm2-5a.5.5 0 01.5.5v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 018 6.5v-3a.5.5 0 01.5-.5zm1.651 2.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4z"}))},g0t=h0t;var fw={};$(fw,{icon:()=>O0t});var hpr=E(L());var v0t=["title","titleId"];function RU(){return RU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w0t=function(t){var n=t.title,r=t.titleId,o=y0t(t,v0t);return a("svg",RU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},O0t=w0t;var dw={};$(dw,{icon:()=>j0t});var vpr=E(L());var x0t=["title","titleId"];function zU(){return zU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I0t=function(t){var n=t.title,r=t.titleId,o=_0t(t,x0t);return a("svg",zU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882zM3.5 7h8a.5.5 0 110 1h-8a.5.5 0 010-1z"}))},j0t=I0t;var mw={};$(mw,{icon:()=>A0t});var bpr=E(L());var E0t=["title","titleId"];function DU(){return DU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C0t=function(t){var n=t.title,r=t.titleId,o=P0t(t,E0t);return a("svg",DU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm-4 7a.5.5 0 000 1h8a.5.5 0 100-1h-8z"}))},A0t=C0t;var hw={};$(hw,{icon:()=>D0t});var Opr=E(L());var M0t=["title","titleId"];function LU(){return LU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z0t=function(t){var n=t.title,r=t.titleId,o=T0t(t,M0t);return a("svg",LU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 16v5h2.038a13.179 13.179 0 000 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 00-2 0V7h-5V5h5V0h2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1016.307 30h-3.251A11.955 11.955 0 0110 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z"}))},D0t=z0t;var gw={};$(gw,{icon:()=>B0t});var _pr=E(L());var L0t=["title","titleId"];function NU(){return NU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W0t=function(t){var n=t.title,r=t.titleId,o=N0t(t,L0t);return a("svg",NU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z"}))},B0t=W0t;var vw={};$(vw,{icon:()=>$0t});var Ipr=E(L());var H0t=["title","titleId"];function FU(){return FU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U0t=function(t){var n=t.title,r=t.titleId,o=V0t(t,H0t);return a("svg",FU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 24a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zM4 26a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zm0 2a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0116 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0132 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 00-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 001.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 002 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 010 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 00-.582 1.92A13.965 13.965 0 0016 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 00-.582-1.92A15.964 15.964 0 0116 0z"}))},$0t=U0t;var yw={};$(yw,{icon:()=>Y0t});var Epr=E(L());var J0t=["title","titleId"];function WU(){return WU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K0t=function(t){var n=t.title,r=t.titleId,o=G0t(t,J0t);return a("svg",WU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 100 16 8 8 0 000-16z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 11-1.437-1.243l2.578-3.151zm15.2 0l2.577 3.15a4 4 0 11-1.437 1.243l-2.706-3.306a12.032 12.032 0 001.565-1.087zM4 24a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z"}))},Y0t=K0t;var bw={};$(bw,{icon:()=>rmt});var kpr=E(L());var Q0t=["title","titleId"];function BU(){return BU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tmt=function(t){var n=t.title,r=t.titleId,o=Z0t(t,Q0t);return a("svg",BU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z"}))},rmt=tmt;var ww={};$(ww,{icon:()=>lmt});var Apr=E(L());var nmt=["title","titleId"];function HU(){return HU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var amt=function(t){var n=t.title,r=t.titleId,o=omt(t,nmt);return a("svg",HU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 110 16 8 8 0 010-16zm0 2a6 6 0 100 12 6 6 0 000-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 11-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 109.746-9.746z"}))},lmt=amt;var Ow={};$(Ow,{icon:()=>fmt});var Tpr=E(L());var smt=["title","titleId"];function VU(){return VU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pmt=function(t){var n=t.title,r=t.titleId,o=umt(t,smt);return a("svg",VU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16 24a4 4 0 110 8 4 4 0 010-8zm12 0a4 4 0 110 8 4 4 0 010-8zm-12 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zm12 0a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM28 12a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM10 6a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5z"}))},fmt=pmt;var xw={};$(xw,{icon:()=>vmt});var zpr=E(L());var dmt=["title","titleId"];function qU(){return qU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gmt=function(t){var n=t.title,r=t.titleId,o=mmt(t,dmt);return a("svg",qU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M24 0a8 8 0 11-4.906 14.32l-4.774 4.774a8 8 0 11-1.414-1.414l4.774-4.774A8 8 0 0124 0zM8 18a6 6 0 100 12 6 6 0 000-12zM24 2a6 6 0 100 12 6 6 0 000-12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z"}))},vmt=gmt;var _w={};$(_w,{icon:()=>xmt});var Lpr=E(L());var ymt=["title","titleId"];function UU(){return UU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Omt=function(t){var n=t.title,r=t.titleId,o=bmt(t,ymt);return a("svg",UU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 2.5a.5.5 0 01.5-.5h3a.5.5 0 010 1h-3a.5.5 0 01-.5-.5z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 0A1.5 1.5 0 003 1.5v13A1.5 1.5 0 004.5 16h7a1.5 1.5 0 001.5-1.5v-13A1.5 1.5 0 0011.5 0h-7zM4 1.5a.5.5 0 01.5-.5h7a.5.5 0 01.5.5V4H4V1.5zM4 13v1.5a.5.5 0 00.5.5h7a.5.5 0 00.5-.5V13H4zm0-1h8V5H4v7z"}))},xmt=Omt;var Sw={};$(Sw,{icon:()=>Emt});var Fpr=E(L());var _mt=["title","titleId"];function $U(){return $U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jmt=function(t){var n=t.title,r=t.titleId,o=Smt(t,_mt);return a("svg",$U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 007.526-3.218c-2.794.177-5.27-.711-6.616-2.648z"}))},Emt=jmt;var Iw={};$(Iw,{icon:()=>Mmt});var Bpr=E(L());var Pmt=["title","titleId"];function JU(){return JU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Amt=function(t){var n=t.title,r=t.titleId,o=kmt(t,Pmt);return a("svg",JU({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z"}))},Mmt=Amt;var jw={};$(jw,{icon:()=>Lmt});var Vpr=E(L());var Tmt=["title","titleId"];function GU(){return GU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dmt=function(t){var n=t.title,r=t.titleId,o=Rmt(t,Tmt);return a("svg",GU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 1a.5.5 0 010 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 110 1H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 01-1.856 2l-.15.006H10.5a.5.5 0 01-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 01-.09-.992L10.5 1h2.494zM5 7a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2z"}))},Lmt=Dmt;var Ew={};$(Ew,{icon:()=>Hmt});var Upr=E(L());var Nmt=["title","titleId"];function XU(){return XU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bmt=function(t){var n=t.title,r=t.titleId,o=Fmt(t,Nmt);return a("svg",XU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 1.443a1 1 0 00-1 0L2.572 4.29a1 1 0 00-.5.866v5.69a1 1 0 00.5.866L7.5 14.557a1 1 0 001 0l4.928-2.846a1 1 0 00.5-.866v-5.69a1 1 0 00-.5-.866L8.5 1.443zM9 .577l4.928 2.846a2 2 0 011 1.732v5.69a2 2 0 01-1 1.732L9 15.423a2 2 0 01-2 0l-4.928-2.846a2 2 0 01-1-1.732v-5.69a2 2 0 011-1.732L7 .577a2 2 0 012 0z"}))},Hmt=Bmt;var Pw={};$(Pw,{icon:()=>Jmt});var Jpr=E(L());var Vmt=["title","titleId"];function KU(){return KU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Umt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $mt=function(t){var n=t.title,r=t.titleId,o=qmt(t,Vmt);return a("svg",KU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z",fillRule:"evenodd"}))},Jmt=$mt;var kw={};$(kw,{icon:()=>Qmt});var Xpr=E(L());var Gmt=["title","titleId"];function YU(){return YU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ymt=function(t){var n=t.title,r=t.titleId,o=Xmt(t,Gmt);return a("svg",YU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.517 12.271l1.254-1.254a1.5 1.5 0 11-1.254 1.254zm2.945-2.944l.74-.74c.361.208.694.467.987.772a.5.5 0 01-.721.693 3.424 3.424 0 00-1.006-.725zm2.162-2.163l.716-.715c.308.232.599.49.87.772a.5.5 0 11-.722.692 6.26 6.26 0 00-.864-.749zM7.061 6.07A6.198 6.198 0 003.54 7.885a.5.5 0 01-.717-.697 7.199 7.199 0 015.309-2.187l-1.07 1.07zm6.672-1.014l.71-.71c.274.23.536.476.786.736a.5.5 0 01-.721.692 9.1 9.1 0 00-.775-.718zm-3.807-1.85A9.06 9.06 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2c.944 0 1.868.131 2.75.382l-.824.824zM8 13a.5.5 0 100-1 .5.5 0 000 1zm-5.424 1a.5.5 0 01-.707-.707L14.146 1.146a.5.5 0 01.708.708L2.576 14z"}))},Qmt=Ymt;var Cw={};$(Cw,{icon:()=>n1t});var Ypr=E(L());var Zmt=["title","titleId"];function QU(){return QU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r1t=function(t){var n=t.title,r=t.titleId,o=e1t(t,Zmt);return a("svg",QU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0-1a.5.5 0 100-1 .5.5 0 000 1zm3.189-3.64a.5.5 0 01-.721.692A3.408 3.408 0 008 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 01-.717-.697A4.408 4.408 0 018 8c1.22 0 2.361.497 3.189 1.36zm2.02-2.14a.5.5 0 11-.721.693A6.2 6.2 0 008 6a6.199 6.199 0 00-4.46 1.885.5.5 0 01-.718-.697A7.199 7.199 0 018 5a7.2 7.2 0 015.21 2.22zm2.02-2.138a.5.5 0 01-.721.692A8.99 8.99 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2a9.99 9.99 0 017.23 3.082z"}))},n1t=r1t;var Aw={};$(Aw,{icon:()=>s1t});var Zpr=E(L());var o1t=["title","titleId"];function ZU(){return ZU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l1t=function(t){var n=t.title,r=t.titleId,o=i1t(t,o1t);return a("svg",ZU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.447 3.724l-6-3a1 1 0 00-.894 0l-6 3A1 1 0 001 4.618v6.764a1 1 0 00.553.894l6 3a1 1 0 00.894 0l6-3a1 1 0 00.553-.894V4.618a1 1 0 00-.553-.894zM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943zM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039zM2 5.11l2.25 1.105V9a.5.5 0 001 0V6.706L7.5 7.811v6.321L2 11.382zm6.5 9.022v-6.32L14 5.11v6.272z"}))},s1t=l1t;var Mw={};$(Mw,{icon:()=>d1t});var tfr=E(L());var u1t=["title","titleId"];function e$(){return e$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f1t=function(t){var n=t.title,r=t.titleId,o=c1t(t,u1t);return a("svg",e$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 00-1 1v12a1 1 0 001 1h5a4.995 4.995 0 01-.584-1H3V2h7v2a1 1 0 001 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 00-.293-.707l-2-2A1 1 0 0011 1H3zm13 11a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},d1t=f1t;var Tw={};$(Tw,{icon:()=>y1t});var nfr=E(L());var m1t=["title","titleId"];function t$(){return t$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v1t=function(t){var n=t.title,r=t.titleId,o=h1t(t,m1t);return a("svg",t$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 011-1h8a1 1 0 01.707.293l2 2A1 1 0 0115 3v5a4.995 4.995 0 00-1-.584V4h-2a1 1 0 01-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 01-1-1V1zm5 14H2V2a1 1 0 00-1 1v12a1 1 0 001 1h7a5.029 5.029 0 01-1-1zm8-3a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},y1t=v1t;var Rw={};$(Rw,{icon:()=>_1t});var ifr=E(L());var b1t=["title","titleId"];function r$(){return r$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x1t=function(t){var n=t.title,r=t.titleId,o=w1t(t,b1t);return a("svg",r$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658h1.262V1.005H4v4.653zm2.261 0h1.244V1.005H6.26v4.653zm2.244 0h1.235V1.005H8.504v4.653zm2.234 0h1.254V1.005h-1.254v4.653zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},_1t=x1t;var zw={};$(zw,{icon:()=>P1t});var lfr=E(L());var S1t=["title","titleId"];function n$(){return n$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E1t=function(t){var n=t.title,r=t.titleId,o=I1t(t,S1t);return a("svg",n$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.84 2.019L3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 000-.703.53.53 0 00-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 01-.118-2.211l6.899-6.651a2.646 2.646 0 013.644 0 2.422 2.422 0 010 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 01.238-.252l5.78-5.572a.484.484 0 000-.703.53.53 0 00-.73 0l-5.78 5.572a4.36 4.36 0 000 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 000-4.92C13.534.66 11.25.66 9.841 2.019z"}))},P1t=E1t;var Dw={};$(Dw,{icon:()=>T1t});var ufr=E(L());var k1t=["title","titleId"];function o$(){return o$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M1t=function(t){var n=t.title,r=t.titleId,o=C1t(t,k1t);return a("svg",o$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.664 14.871a7 7 0 01-2.42-12.778.5.5 0 01.612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 01.063.618 7.002 7.002 0 01-7.235 3.098zm6.168-3.312a1961.733 1961.733 0 00-8.377-8.4 6 6 0 108.378 8.4zm2.095-2.548a.5.5 0 11-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 00-.034-1.714.5.5 0 11.987-.163c.108.655.122 1.326.04 1.999l-.021.155zm-1.273-5.138a.5.5 0 11-.808.59 6.026 6.026 0 00-1.304-1.308.5.5 0 01.59-.806 7.026 7.026 0 011.522 1.524zM9.169 1.098a.5.5 0 11-.166.986 6.105 6.105 0 00-1.849-.026.5.5 0 01-.14-.99 7.02 7.02 0 012.155.03z"}))},T1t=M1t;var Lw={};$(Lw,{icon:()=>N1t});var pfr=E(L());var R1t=["title","titleId"];function i$(){return i$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L1t=function(t){var n=t.title,r=t.titleId,o=z1t(t,R1t);return a("svg",i$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm6 0a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1z"}))},N1t=L1t;var Nw={};$(Nw,{icon:()=>V1t});var dfr=E(L());var F1t=["title","titleId"];function a$(){return a$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H1t=function(t){var n=t.title,r=t.titleId,o=W1t(t,F1t);return a("svg",a$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.586 2.586A2 2 0 000 4h1a1 1 0 011-1V2a2 2 0 00-1.414.586zM2 2h10.5a.5.5 0 010 1H2V2zM0 4h1v6.5a.5.5 0 01-1 0V4zm2.586.586A2 2 0 002 6h1a1 1 0 011-1V4a2 2 0 00-1.414.586zm0 8.828A2 2 0 012 12h1a1 1 0 001 1v1a2 2 0 01-1.414-.586zm12.828-8.828A2 2 0 0116 6h-1a1 1 0 00-1-1V4a2 2 0 011.414.586zm0 8.828A2 2 0 0016 12h-1a1 1 0 01-1 1v1a2 2 0 001.414-.586zM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 010 1H7.496a.5.5 0 010-1H9.5zm4 0a.5.5 0 010 1h-2.004a.5.5 0 010-1H13.5z"}))},V1t=H1t;var Fw={};$(Fw,{icon:()=>G1t});var hfr=E(L());var q1t=["title","titleId"];function l$(){return l$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J1t=function(t){var n=t.title,r=t.titleId,o=U1t(t,q1t);return a("svg",l$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 01-.708 0 .502.502 0 010-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 010 1.414l-9 9A.997.997 0 015 15H2a1 1 0 01-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0111 1zM5 14H2v-3l3 3z"}))},G1t=J1t;var Ww={};$(Ww,{icon:()=>Z1t});var vfr=E(L());var X1t=["title","titleId"];function s$(){return s$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q1t=function(t){var n=t.title,r=t.titleId,o=K1t(t,X1t);return a("svg",s$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),a("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),a("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},Z1t=Q1t;var Bw={};$(Bw,{icon:()=>oht});var bfr=E(L());var eht=["title","titleId"];function u$(){return u$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nht=function(t){var n=t.title,r=t.titleId,o=tht(t,eht);return a("svg",u$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 100-1h-10a.5.5 0 000 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM4 4h1v6H4V4zm6 0h1v6h-1V4zM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1z"}))},oht=nht;var Hw={};$(Hw,{icon:()=>uht});var Ofr=E(L());var iht=["title","titleId"];function c$(){return c$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sht=function(t){var n=t.title,r=t.titleId,o=aht(t,iht);return a("svg",c$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 11h4.5a.5.5 0 100-1h-10a.5.5 0 100 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM5 4h7v6H5V4zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1z"}))},uht=sht;var Vw={};$(Vw,{icon:()=>mht});var _fr=E(L());var cht=["title","titleId"];function p$(){return p$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dht=function(t){var n=t.title,r=t.titleId,o=pht(t,cht);return a("svg",p$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 000-.711l-7.2-4.583zm.538-.844l7.2 4.583a1.426 1.426 0 010 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22z"}))},mht=dht;var qw={};$(qw,{icon:()=>bht});var Ifr=E(L());var hht=["title","titleId"];function f$(){return f$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yht=function(t){var n=t.title,r=t.titleId,o=ght(t,hht);return a("svg",f$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.345 6.801l-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 000-2.398z"}))},bht=yht;var Uw={};$(Uw,{icon:()=>Sht});var Efr=E(L());var wht=["title","titleId"];function d$(){return d$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ht=function(t){var n=t.title,r=t.titleId,o=Oht(t,wht);return a("svg",d$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.25 3a.5.5 0 01.5.5v3.75h3.75a.5.5 0 01.5.5v.5a.5.5 0 01-.5.5H8.75v3.75a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5V8.75H3.5a.5.5 0 01-.5-.5v-.5a.5.5 0 01.5-.5h3.75V3.5a.5.5 0 01.5-.5h.5z"}))},Sht=_ht;var $w={};$($w,{icon:()=>kht});var kfr=E(L());var Iht=["title","titleId"];function m$(){return m$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pht=function(t){var n=t.title,r=t.titleId,o=jht(t,Iht);return a("svg",m$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 110 1H8v3.5a.5.5 0 11-1 0V8H3.5a.5.5 0 010-1H7V3.5a.5.5 0 011 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882z"}))},kht=Pht;var Jw={};$(Jw,{icon:()=>Rht});var Afr=E(L());var Cht=["title","titleId"];function h$(){return h$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tht=function(t){var n=t.title,r=t.titleId,o=Aht(t,Cht);return a("svg",h$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 7V3.5a.5.5 0 00-1 0V7H3.5a.5.5 0 000 1H7v3.5a.5.5 0 101 0V8h3.5a.5.5 0 100-1H8zm-.5 8a7.5 7.5 0 110-15 7.5 7.5 0 010 15z"}))},Rht=Tht;var Gw={};$(Gw,{icon:()=>Fht});var Tfr=E(L());var zht=["title","titleId"];function g$(){return g$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nht=function(t){var n=t.title,r=t.titleId,o=Dht(t,zht);return a("svg",g$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 8.5a.5.5 0 111 0V12a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h3.5a.5.5 0 010 1H4a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8.5zm-5.12.339a.5.5 0 11-.706-.707L13.305 2H10.5a.5.5 0 110-1H14a1 1 0 011 1v3.5a.5.5 0 11-1 0V2.72L7.88 8.838z"}))},Fht=Nht;var Xw={};$(Xw,{icon:()=>qht});var zfr=E(L());var Wht=["title","titleId"];function v$(){return v$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vht=function(t){var n=t.title,r=t.titleId,o=Bht(t,Wht);return a("svg",v$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.171 5.15L10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 000 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 000-2.31L9 4.38a.617.617 0 00-.829 0 .52.52 0 000 .77z"}),a("path",{d:"M6.804 12.792A.993.993 0 016 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0015 13.016V1.984A2 2 0 0012.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0114 1.991v11.018a.995.995 0 01-1.196.972l-6-1.19z"}))},qht=Vht;var Kw={};$(Kw,{icon:()=>Xht});var Lfr=E(L());var Uht=["title","titleId"];function y$(){return y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ght=function(t){var n=t.title,r=t.titleId,o=$ht(t,Uht);return a("svg",y$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 118 2a6 6 0 010 12zm0-1A5 5 0 108 3a5 5 0 000 10zm-.186-1.065A.785.785 0 017 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815zM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105z"}))},Xht=Ght;var Yw={};$(Yw,{icon:()=>egt});var Ffr=E(L());var Kht=["title","titleId"];function b$(){return b$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zht=function(t){var n=t.title,r=t.titleId,o=Yht(t,Kht);return a("svg",b$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.848 2.47a1 1 0 01-.318 1.378A7.284 7.284 0 003.75 7.01 3 3 0 111 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318zm7 0a1 1 0 01-.318 1.378 7.283 7.283 0 00-2.78 3.162A3 3 0 118 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318z"}))},egt=Zht;var Qw={};$(Qw,{icon:()=>igt});var Bfr=E(L());var tgt=["title","titleId"];function w$(){return w$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ogt=function(t){var n=t.title,r=t.titleId,o=rgt(t,tgt);return a("svg",w$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.228 2.942a.5.5 0 11-.538.842A5 5 0 1013 8a.5.5 0 111 0 6 6 0 11-2.772-5.058zM14 1.5v3A1.5 1.5 0 0112.5 6h-3a.5.5 0 010-1h3a.5.5 0 00.5-.5v-3a.5.5 0 111 0z"}))},igt=ogt;var Zw={};$(Zw,{icon:()=>cgt});var Vfr=E(L());var agt=["title","titleId"];function O$(){return O$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ugt=function(t){var n=t.title,r=t.titleId,o=lgt(t,agt);return a("svg",O$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.684.895L6.074.358a1 1 0 00-1.296.753L4.2 4H2.5a.5.5 0 000 1h1.626a4.007 4.007 0 00.11 2.359l-2.072-.345A1 1 0 001 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 011 13v1a1 1 0 00.836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0015 14v-1a1.99 1.99 0 01-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0115 9V8a1 1 0 00-1.164-.986l-2.073.345A3.991 3.991 0 0011.874 5H13.5a.5.5 0 000-1h-1.7l-.578-2.89A1 1 0 009.925.359L8.316.895a1 1 0 01-.632 0zm2.88 6.664A3.013 3.013 0 0010.83 5H5.17a3.013 3.013 0 00.266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 100-2 1 1 0 000 2zm14 0a1 1 0 100-2 1 1 0 000 2z"}))},cgt=ugt;var eO={};$(eO,{icon:()=>hgt});var Ufr=E(L());var pgt=["title","titleId"];function x$(){return x$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mgt=function(t){var n=t.title,r=t.titleId,o=fgt(t,pgt);return a("svg",x$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 01-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 010 .77.616.616 0 01-.829 0l-2.05-1.95a1.551 1.551 0 010-2.31l2.05-1.95a.617.617 0 01.83 0 .52.52 0 010 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 01-.09-.992L9.5 4h2.494z"}))},hgt=mgt;var tO={};$(tO,{icon:()=>wgt});var Jfr=E(L());var ggt=["title","titleId"];function _$(){return _$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ygt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bgt=function(t){var n=t.title,r=t.titleId,o=vgt(t,ggt);return a("svg",_$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 00-.141-.147L11.73 2.145a2.654 2.654 0 00-.147-.141A2.654 2.654 0 0011.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 01.273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 01.113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 01.378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 009.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 110-4 2 2 0 010 4zm0-1a1 1 0 100-2 1 1 0 000 2z"}))},wgt=bgt;var rO={};$(rO,{icon:()=>Igt});var Xfr=E(L());var Ogt=["title","titleId"];function S$(){return S$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sgt=function(t){var n=t.title,r=t.titleId,o=xgt(t,Ogt);return a("svg",S$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm4-2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-1a.5.5 0 110-1 .5.5 0 010 1zm0-3a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm0 2a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-2a.5.5 0 110 1 .5.5 0 010-1zm6-6a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1z"}))},Igt=Sgt;var nO={};$(nO,{icon:()=>Cgt});var Yfr=E(L());var jgt=["title","titleId"];function I$(){return I$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kgt=function(t){var n=t.title,r=t.titleId,o=Egt(t,jgt);return a("svg",I$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.271 11.978l3.872 3.873a.502.502 0 00.708 0 .502.502 0 000-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 004.949 2.05.5.5 0 000-1 5.96 5.96 0 01-4.242-1.757 6.01 6.01 0 010-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 010 8.486.5.5 0 00.034.738z"}))},Cgt=kgt;var oO={};$(oO,{icon:()=>zgt});var Zfr=E(L());var Agt=["title","titleId"];function j$(){return j$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rgt=function(t){var n=t.title,r=t.titleId,o=Mgt(t,Agt);return a("svg",j$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 10.707.707l-2.46 2.46-1.156 1.156a1 1 0 11-.707-.707l.757-.757a2 2 0 00-2.43 3.137.5.5 0 11-.707.707 3 3 0 013.86-4.567l.714-.714A4 4 0 108 12a.5.5 0 110 1 5 5 0 113.164-8.871l.71-.71zm.709-.709a7 7 0 10.707.707l.366-.366a.5.5 0 10-.707-.707l-.366.366z"}))},zgt=Rgt;var iO={};$(iO,{icon:()=>Wgt});var tdr=E(L());var Dgt=["title","titleId"];function E$(){return E$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fgt=function(t){var n=t.title,r=t.titleId,o=Lgt(t,Dgt);return a("svg",E$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 00-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.027 5.027 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Wgt=Fgt;var aO={};$(aO,{icon:()=>Ugt});var ndr=E(L());var Bgt=["title","titleId"];function P$(){return P$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qgt=function(t){var n=t.title,r=t.titleId,o=Hgt(t,Bgt);return a("svg",P$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 10-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.028 5.028 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .707l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.707l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Ugt=qgt;var lO={};$(lO,{icon:()=>Kgt});var idr=E(L());var $gt=["title","titleId"];function k$(){return k$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ggt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xgt=function(t){var n=t.title,r=t.titleId,o=Jgt(t,$gt);return a("svg",k$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),a("path",{fillRule:"evenodd",d:"M1 3a1 1 0 011-1h12a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},Kgt=Xgt;var sO={};$(sO,{icon:()=>tvt});var ldr=E(L());var Ygt=["title","titleId"];function C$(){return C$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var evt=function(t){var n=t.title,r=t.titleId,o=Qgt(t,Ygt);return a("svg",C$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.134 7.031L8 12.764l2.866-5.733L8 2.016 5.134 7.03zM8 0l4 7-4 8-4-8 4-7z"}))},tvt=evt;var uO={};$(uO,{icon:()=>avt});var udr=E(L());var rvt=["title","titleId"];function A$(){return A$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ovt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ivt=function(t){var n=t.title,r=t.titleId,o=nvt(t,rvt);return a("svg",A$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9zM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6zm1.997-3.552A.506.506 0 018 1.5v8a.5.5 0 01-1 0v-8a.51.51 0 010-.017L5.18 3.394a.52.52 0 01-.77 0 .617.617 0 010-.829L6.36.515a1.552 1.552 0 012.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 01-.77 0L7.997 1.447z"}))},avt=ivt;var cO={};$(cO,{icon:()=>pvt});var pdr=E(L());var lvt=["title","titleId"];function M$(){return M$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cvt=function(t){var n=t.title,r=t.titleId,o=svt(t,lvt);return a("svg",M$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 011 0v2.024a.999.999 0 00.268-.227l1.027-1.233a.5.5 0 01.769.64L8.275 3.86a.999.999 0 01-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 11.938.345l-.554 1.506a.998.998 0 00-.062.346l1.753-1.012a.5.5 0 11.5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 11-.17.986l-2.764-.478a1 1 0 01-.33-.12L8.506 7.5l2.207 1.274a1 1 0 01.33-.119l2.764-.478a.5.5 0 11.17.986l-1.582.273a.999.999 0 00-.33.12l1.753 1.011a.5.5 0 11-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 01-.938.345l-.968-2.632a.999.999 0 01-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 01-.769.64l-1.027-1.233a.999.999 0 00-.268-.226V14.5a.5.5 0 01-1 0v-2.024a.999.999 0 00-.269.227l-1.027 1.233a.5.5 0 01-.768-.64l1.795-2.155a.999.999 0 01.269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 11-.938-.345l.554-1.506a1 1 0 00.062-.346l-1.753 1.012a.5.5 0 01-.5-.866l1.753-1.012a.999.999 0 00-.33-.119l-1.582-.273a.5.5 0 01.17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 01-.33.119l-2.765.478a.5.5 0 11-.17-.986l1.582-.273a.999.999 0 00.33-.12L1.194 4.434a.5.5 0 11.5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 11.938-.345l.969 2.632a.999.999 0 01.062.346l2.207 1.274V4.086a1 1 0 01-.269-.227L4.943 1.704a.5.5 0 01.768-.64l1.027 1.233c.079.094.17.17.269.227V.5z"}))},pvt=cvt;var pO={};$(pO,{icon:()=>gvt});var ddr=E(L());var fvt=["title","titleId"];function T$(){return T$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hvt=function(t){var n=t.title,r=t.titleId,o=dvt(t,fvt);return a("svg",T$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 01-.707.707L3.454 8.561a1.494 1.494 0 01-.433-.925.454.454 0 010-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 11.707.707L4.308 7z",fillRule:"evenodd"}))},gvt=hvt;var fO={};$(fO,{icon:()=>Ovt});var hdr=E(L());var vvt=["title","titleId"];function R$(){return R$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wvt=function(t){var n=t.title,r=t.titleId,o=yvt(t,vvt);return a("svg",R$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 00.707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 000-.272 1.494 1.494 0 00-.433-.925L8.303 2.197a.5.5 0 10-.707.707L11.692 7z"}))},Ovt=wvt;var dO={};$(dO,{icon:()=>jvt});var vdr=E(L());var xvt=["title","titleId"];function z$(){return z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Svt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ivt=function(t){var n=t.title,r=t.titleId,o=_vt(t,xvt);return a("svg",z$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 01.707.707l-4.242 4.243a1.494 1.494 0 01-.925.433.454.454 0 01-.272 0 1.494 1.494 0 01-.925-.433L2.197 8.303a.5.5 0 11.707-.707L7 11.692z"}))},jvt=Ivt;var mO={};$(mO,{icon:()=>Avt});var bdr=E(L());var Evt=["title","titleId"];function D$(){return D$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cvt=function(t){var n=t.title,r=t.titleId,o=Pvt(t,Evt);return a("svg",D$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 01-.707-.707l4.242-4.242a1.5 1.5 0 012.122 0l4.242 4.242a.5.5 0 11-.707.707L8 4.207z"}))},Avt=Cvt;var hO={};$(hO,{icon:()=>Dvt});var Odr=E(L());var Mvt=["title","titleId"];function L$(){return L$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zvt=function(t){var n=t.title,r=t.titleId,o=Tvt(t,Mvt);return a("svg",L$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 01-.708-.707l3.536-3.535a1.5 1.5 0 012.121 0l3.536 3.535a.5.5 0 01-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 01.707.707l-3.536 3.536a1.5 1.5 0 01-2.121 0l-3.536-3.536a.5.5 0 01.708-.707L7 12.786z"}))},Dvt=zvt;var gO={};$(gO,{icon:()=>Bvt});var _dr=E(L());var Lvt=["title","titleId"];function N$(){return N$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wvt=function(t){var n=t.title,r=t.titleId,o=Nvt(t,Lvt);return a("svg",N$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3z"}))},Bvt=Wvt;var vO={};$(vO,{icon:()=>$vt});var Idr=E(L());var Hvt=["title","titleId"];function F$(){return F$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uvt=function(t){var n=t.title,r=t.titleId,o=Vvt(t,Hvt);return a("svg",F$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},$vt=Uvt;var yO={};$(yO,{icon:()=>Yvt});var Edr=E(L());var Jvt=["title","titleId"];function W$(){return W$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kvt=function(t){var n=t.title,r=t.titleId,o=Gvt(t,Jvt);return a("svg",W$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},Yvt=Kvt;var bO={};$(bO,{icon:()=>ryt});var kdr=E(L());var Qvt=["title","titleId"];function B$(){return B$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tyt=function(t){var n=t.title,r=t.titleId,o=Zvt(t,Qvt);return a("svg",B$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},ryt=tyt;var wO={};$(wO,{icon:()=>lyt});var Adr=E(L());var nyt=["title","titleId"];function H$(){return H$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ayt=function(t){var n=t.title,r=t.titleId,o=oyt(t,nyt);return a("svg",H$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2"}))},lyt=ayt;var OO={};$(OO,{icon:()=>fyt});var Tdr=E(L());var syt=["title","titleId"];function V$(){return V$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pyt=function(t){var n=t.title,r=t.titleId,o=uyt(t,syt);return a("svg",V$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},fyt=pyt;var xO={};$(xO,{icon:()=>vyt});var zdr=E(L());var dyt=["title","titleId"];function q$(){return q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gyt=function(t){var n=t.title,r=t.titleId,o=myt(t,dyt);return a("svg",q$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3zm10 7v1h-5v-1h5z"}))},vyt=gyt;var _O={};$(_O,{icon:()=>xyt});var Ldr=E(L());var yyt=["title","titleId"];function U$(){return U$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oyt=function(t){var n=t.title,r=t.titleId,o=byt(t,yyt);return a("svg",U$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 01.792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 019.136 14a.862.862 0 01-.429-.116L6 12.342l-2.707 1.542a.862.862 0 01-.43.116.877.877 0 01-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 016 2zm10 8v1h-5v-1h5z"}))},xyt=Oyt;var SO={};$(SO,{icon:()=>Eyt});var Fdr=E(L());var _yt=["title","titleId"];function $$(){return $$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jyt=function(t){var n=t.title,r=t.titleId,o=Syt(t,_yt);return a("svg",$$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 01-1 1H2a1 1 0 01-1-1v-2h1v2h6zm4.853-10.146l-2.999 3a1.5 1.5 0 01-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 11-.316-.948L7 7.473a1.5 1.5 0 012.146-1.327l3-3a1.5 1.5 0 11.707.707z"}))},Eyt=jyt;var IO={};$(IO,{icon:()=>Myt});var Bdr=E(L());var Pyt=["title","titleId"];function J$(){return J$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ayt=function(t){var n=t.title,r=t.titleId,o=kyt(t,Pyt);return a("svg",J$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2zm0 1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4z",fillRule:"evenodd"}))},Myt=Ayt;var jO={};$(jO,{icon:()=>Lyt});var Vdr=E(L());var Tyt=["title","titleId"];function G$(){return G$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dyt=function(t){var n=t.title,r=t.titleId,o=Ryt(t,Tyt);return a("svg",G$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:12,height:12,x:2,y:2,rx:2,fillRule:"evenodd"}))},Lyt=Dyt;var EO={};$(EO,{icon:()=>Hyt});var Udr=E(L());var Nyt=["title","titleId"];function X$(){return X$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Byt=function(t){var n=t.title,r=t.titleId,o=Fyt(t,Nyt);return a("svg",X$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.259 3.034A1.001 1.001 0 0012 3H4a1 1 0 00-1 1v8c0 .09.012.176.034.259l9.225-9.225zm.707.707l-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 001-1V4c0-.09-.012-.176-.034-.259zM4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2z"}))},Hyt=Byt;var PO={};$(PO,{icon:()=>Jyt});var Jdr=E(L());var Vyt=["title","titleId"];function K$(){return K$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $yt=function(t){var n=t.title,r=t.titleId,o=qyt(t,Vyt);return a("svg",K$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd",transform:"translate(0 2)"},a("path",{fillRule:"nonzero",d:"M2 6a1 1 0 01-1-1V2a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-1 1H2zm13 2v3a1 1 0 01-1 1H2a1 1 0 01-1-1V8a1 1 0 011-1h12a1 1 0 011 1zm1-3V2a2 2 0 00-2-2H2a2 2 0 00-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 002 2h12a2 2 0 002-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5z"}),a("circle",{cx:4.5,cy:9.5,r:1.5}),a("circle",{cx:4.5,cy:3.5,r:1.5}),a("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},Jyt=$yt;var kO={};$(kO,{icon:()=>Qyt});var Xdr=E(L());var Gyt=["title","titleId"];function Y$(){return Y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yyt=function(t){var n=t.title,r=t.titleId,o=Xyt(t,Gyt);return a("svg",Y$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.297 3L8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 01-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},Qyt=Yyt;var CO={};$(CO,{icon:()=>n2t});var Ydr=E(L());var Zyt=["title","titleId"];function Q$(){return Q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r2t=function(t){var n=t.title,r=t.titleId,o=e2t(t,Zyt);return a("svg",Q$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 011-1h5a1 1 0 011 1v1h4V4H7c-.621 0-1-.379-1-1V2zm10 6v6a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 011 1v4zm-1 1h-4a1 1 0 01-1-1V7H5v7h10V9zM2 4.5a.5.5 0 01.5-.5h2a.5.5 0 010 1h-2a.5.5 0 01-.5-.5zM6.5 9a.5.5 0 000 1h2a.5.5 0 000-1h-2z"}))},n2t=r2t;var AO={};$(AO,{icon:()=>s2t});var Zdr=E(L());var o2t=["title","titleId"];function Z$(){return Z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l2t=function(t){var n=t.title,r=t.titleId,o=i2t(t,o2t);return a("svg",Z$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 8a4 4 0 11-8 0 4 4 0 018 0zM7.25.75a.75.75 0 011.5 0v1.5a.75.75 0 11-1.5 0V.75zm0 13a.75.75 0 011.5 0v1.5a.75.75 0 01-1.5 0v-1.5zm5.346-11.407a.75.75 0 011.06 1.06l-1.06 1.061a.75.75 0 01-1.06-1.06l1.06-1.06zm-9.192 9.193a.75.75 0 111.06 1.06l-1.06 1.06a.75.75 0 01-1.06-1.06l1.06-1.06zM.75 8.75a.75.75 0 010-1.5h1.5a.75.75 0 110 1.5H.75zm13 0a.75.75 0 010-1.5h1.5a.75.75 0 010 1.5h-1.5zM2.343 3.404a.75.75 0 111.06-1.06l1.061 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06zm9.193 9.192a.75.75 0 011.06-1.06l1.06 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06z"}))},s2t=l2t;var MO={};$(MO,{icon:()=>d2t});var t0r=E(L());var u2t=["title","titleId"];function eJ(){return eJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f2t=function(t){var n=t.title,r=t.titleId,o=c2t(t,u2t);return a("svg",eJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{x:2,y:2,width:12,height:12,rx:3}),a("rect",{className:"euiSwatchInput__stroke",x:2.5,y:2.5,width:11,height:11,rx:2}))},d2t=f2t;var TO={};$(TO,{icon:()=>y2t});var n0r=E(L());var m2t=["title","titleId"];function tJ(){return tJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v2t=function(t){var n=t.title,r=t.titleId,o=h2t(t,m2t);return a("svg",tJ({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.8 0H2a1 1 0 00-1 1v8l1-1V1h8v3.5a.5.5 0 00.5.5H14v10H2v-1a3.5 3.5 0 013.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 001 14v1a1 1 0 001 1h12a1 1 0 001-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0010.8 0z"}))},y2t=v2t;var RO={};$(RO,{icon:()=>_2t});var i0r=E(L());var b2t=["title","titleId"];function rJ(){return rJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x2t=function(t){var n=t.title,r=t.titleId,o=w2t(t,b2t);return a("svg",rJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},_2t=x2t;var zO={};$(zO,{icon:()=>P2t});var l0r=E(L());var S2t=["title","titleId"];function nJ(){return nJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E2t=function(t){var n=t.title,r=t.titleId,o=I2t(t,S2t);return a("svg",nJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.496 7a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428zM4.496 5a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428zM4.496 9a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm9-6a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0-2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 4a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428z"}))},P2t=E2t;var DO={};$(DO,{icon:()=>T2t});var u0r=E(L());var k2t=["title","titleId"];function oJ(){return oJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M2t=function(t){var n=t.title,r=t.titleId,o=C2t(t,k2t);return a("svg",oJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 7a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 4a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},T2t=M2t;var LO={};$(LO,{icon:()=>N2t});var p0r=E(L());var R2t=["title","titleId"];function iJ(){return iJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L2t=function(t){var n=t.title,r=t.titleId,o=z2t(t,R2t);return a("svg",iJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428zM4.5 9a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zM4.5 12a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9-6a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428z"}))},N2t=L2t;var NO={};$(NO,{icon:()=>V2t});var d0r=E(L());var F2t=["title","titleId"];function aJ(){return aJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H2t=function(t){var n=t.title,r=t.titleId,o=W2t(t,F2t);return a("svg",aJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.254 14.97L.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 010-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 01.273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 01-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 01-.535 0c-.176-.054-.324-.135-.639-.45zm1.106-.707l6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 00-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 00-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188zm4.972-10.607a2 2 0 11-2.828 2.828 2 2 0 012.828-2.828zm-.707.707a1 1 0 10-1.414 1.414 1 1 0 001.414-1.414zM6.807 11.28L4.686 9.159a.5.5 0 11.707-.707l2.121 2.12a.5.5 0 11-.707.708zm1.414-1.414l-2.12-2.122a.5.5 0 11.706-.707L8.928 9.16a.5.5 0 11-.707.707z"}))},V2t=H2t;var FO={};$(FO,{icon:()=>G2t});var h0r=E(L());var q2t=["title","titleId"];function lJ(){return lJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J2t=function(t){var n=t.title,r=t.titleId,o=U2t(t,q2t);return a("svg",lJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.553 1.776a.5.5 0 01.894 0l4 8a.5.5 0 01.053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 01-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 01-.506-1.512 4.672 4.672 0 01-.084-.705.5.5 0 01.053-.235l4-8zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987z"}))},G2t=J2t;var WO={};$(WO,{icon:()=>Z2t});var v0r=E(L());var X2t=["title","titleId"];function sJ(){return sJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q2t=function(t){var n=t.title,r=t.titleId,o=K2t(t,X2t);return a("svg",sJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 15a3.5 3.5 0 01-1.75-6.532L7 8.324V2.5A1.496 1.496 0 019.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 018.5 15M11 7.758V2.5a2.5 2.5 0 10-5 0v5.258a4.5 4.5 0 105 0"}),a("path",{d:"M8.5 9a2.5 2.5 0 110 5 2.5 2.5 0 010-5"}))},Z2t=Q2t;var BO={};$(BO,{icon:()=>obt});var b0r=E(L());var ebt=["title","titleId"];function uJ(){return uJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nbt=function(t){var n=t.title,r=t.titleId,o=tbt(t,ebt);return a("svg",uJ({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 01-5.572-5.75A5 5 0 003.04 9.31a.5.5 0 01-.966.259 6 6 0 015.672-7.553 4.5 4.5 0 116.117 6.313 6.002 6.002 0 01-7.803 5.409.5.5 0 11.303-.954 5.001 5.001 0 006.445-3.979zM11.859 5H13.5a.5.5 0 000-1H12V1.5a.5.5 0 00-1 0v3a.5.5 0 00.5.5h.36z"}),a("path",{d:"M3.757 15.848l-.776-2.897a1.5 1.5 0 011.06-1.838l2.898-.776a.5.5 0 11.259.966l-2.898.776a.5.5 0 00-.353.613l.776 2.898a.5.5 0 01-.966.258z"}))},obt=nbt;var HO={};$(HO,{icon:()=>ubt});var O0r=E(L());var ibt=["title","titleId"];function cJ(){return cJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sbt=function(t){var n=t.title,r=t.titleId,o=abt(t,ibt);return a("svg",cJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 001 0V4h1a1 1 0 001-1V1a1 1 0 00-1-1H6a1 1 0 00-1 1v2a1 1 0 001 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 111 0 .5.5 0 01-1 0zM2.5 9a1.5 1.5 0 01-1.415-1H.5a.5.5 0 010-1h.585a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h.585a.5.5 0 010 1h-.585a1.5 1.5 0 01-2.83 0h-2.17a1.5 1.5 0 01-2.83 0h-2.17A1.5 1.5 0 012.5 9zM13 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm-5 0a.5.5 0 10-1 0 .5.5 0 001 0zM2.5 10a.5.5 0 00-.5.5v.5H1a1 1 0 00-1 1v2a1 1 0 001 1h3a1 1 0 001-1v-2a1 1 0 00-1-1H3v-.5a.5.5 0 00-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 011 0v.5h1a1 1 0 011 1v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2a1 1 0 011-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},ubt=sbt;var VO={};$(VO,{icon:()=>mbt});var _0r=E(L());var cbt=["title","titleId"];function pJ(){return pJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dbt=function(t){var n=t.title,r=t.titleId,o=pbt(t,cbt);return a("svg",pJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.923 8A5.93 5.93 0 008 2.077 5.93 5.93 0 002.077 8a5.93 5.93 0 006.296 5.912c.328-.021.625.227.625.556a.504.504 0 01-.458.511 7 7 0 116.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 01-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2l-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 000 1.076H8A.539.539 0 008.538 8V3.692a.539.539 0 00-1.076 0v3.77z",clipRule:"evenodd"}))},mbt=dbt;var qO={};$(qO,{icon:()=>bbt});var I0r=E(L());var hbt=["title","titleId"];function fJ(){return fJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ybt=function(t){var n=t.title,r=t.titleId,o=gbt(t,hbt);return a("svg",fJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 11-.707.707 1.5 1.5 0 00-2.122 0L4.125 9.782a1.5 1.5 0 102.121 2.121l1.145-1.144a.5.5 0 01.707.707L6.953 12.61a2.5 2.5 0 11-3.535-3.535l2.121-2.122a2.5 2.5 0 013.536 0zm3.535-3.535a2.5 2.5 0 010 3.535L10.49 9.075a2.5 2.5 0 01-3.536 0 .5.5 0 11.707-.708 1.5 1.5 0 002.122 0l2.121-2.12a1.5 1.5 0 10-2.121-2.122L8.637 5.269a.5.5 0 11-.707-.707l1.145-1.144a2.5 2.5 0 013.535 0z"}))},bbt=ybt;var UO={};$(UO,{icon:()=>Sbt});var E0r=E(L());var wbt=["title","titleId"];function dJ(){return dJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _bt=function(t){var n=t.title,r=t.titleId,o=Obt(t,wbt);return a("svg",dJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72zM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23z"}))},Sbt=_bt;var $O={};$($O,{icon:()=>kbt});var k0r=E(L());var Ibt=["title","titleId"];function mJ(){return mJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pbt=function(t){var n=t.title,r=t.titleId,o=jbt(t,Ibt);return a("svg",mJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714z"}))},kbt=Pbt;var JO={};$(JO,{icon:()=>Rbt});var A0r=E(L());var Cbt=["title","titleId"];function hJ(){return hJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tbt=function(t){var n=t.title,r=t.titleId,o=Abt(t,Cbt);return a("svg",hJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4zM8.5 5.5h-3v5h3v-5z"}))},Rbt=Tbt;var GO={};$(GO,{icon:()=>Fbt});var T0r=E(L());var zbt=["title","titleId"];function gJ(){return gJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nbt=function(t){var n=t.title,r=t.titleId,o=Dbt(t,zbt);return a("svg",gJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 13A5 5 0 118 3a5 5 0 010 10zm-2.828-2.172a4 4 0 015.656-5.656c.004.013-5.645 5.674-5.656 5.656z"}))},Fbt=Nbt;var XO={};$(XO,{icon:()=>qbt});var z0r=E(L());var Wbt=["title","titleId"];function vJ(){return vJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vbt=function(t){var n=t.title,r=t.titleId,o=Bbt(t,Wbt);return a("svg",vJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027z"}))},qbt=Vbt;var KO={};$(KO,{icon:()=>Xbt});var L0r=E(L());var Ubt=["title","titleId"];function yJ(){return yJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gbt=function(t){var n=t.title,r=t.titleId,o=$bt(t,Ubt);return a("svg",yJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 4a1 1 0 011-1h8a1 1 0 011 1v5.996a1 1 0 01-1 1h-1.661L7.4 13.2A.25.25 0 017 13v-2.004H4a1 1 0 01-1-1V4zm1.5 1a.5.5 0 01.5-.5h6a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-.9L8 11V9.5H5a.5.5 0 01-.5-.5V5z",clipRule:"evenodd"}),a("path",{d:"M6.75 6a1 1 0 100 2 1 1 0 000-2zm2.5 0a1 1 0 100 2 1 1 0 000-2z"}))},Xbt=Gbt;var YO={};$(YO,{icon:()=>e3t});var F0r=E(L());var Kbt=["title","titleId"];function bJ(){return bJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zbt=function(t){var n=t.title,r=t.titleId,o=Ybt(t,Kbt);return a("svg",bJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.414 3.757l2.829 2.829a2 2 0 010 2.828l-2.829 2.829a2 2 0 01-2.828 0L3.757 9.414a2 2 0 010-2.828l2.829-2.829a2 2 0 012.828 0zm-1.747 2.91a1 1 0 00-1 1v.666a1 1 0 001 1h.666a1 1 0 001-1v-.666a1 1 0 00-1-1h-.666z"}))},e3t=Zbt;var QO={};$(QO,{icon:()=>i3t});var B0r=E(L());var t3t=["title","titleId"];function wJ(){return wJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var o3t=function(t){var n=t.title,r=t.titleId,o=r3t(t,t3t);return a("svg",wJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 01.412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 01.412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134zM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 10zM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 10zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 10zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 015 9c0-.245.183-.45.412-.492L5.5 8.5zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 8.5zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0110 9c0-.245.183-.45.412-.492L10.5 8.5zM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 7zM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 7zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 7zM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5z"}))},i3t=o3t;var ZO={};$(ZO,{icon:()=>c3t});var V0r=E(L());var a3t=["title","titleId"];function OJ(){return OJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u3t=function(t){var n=t.title,r=t.titleId,o=l3t(t,a3t);return a("svg",OJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.154 12V4h2.713v1.14H5.658v5.72h1.21V12H4.153zm7.692-8v8H9.133v-1.14h1.209V5.14h-1.21V4h2.714z"}))},c3t=u3t;var e7={};$(e7,{icon:()=>h3t});var U0r=E(L());var p3t=["title","titleId"];function xJ(){return xJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m3t=function(t){var n=t.title,r=t.titleId,o=f3t(t,p3t);return a("svg",xJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.39 9.736l-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721zm2.777.94l-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677z"}))},h3t=m3t;var t7={};$(t7,{icon:()=>w3t});var J0r=E(L());var g3t=["title","titleId"];function _J(){return _J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var b3t=function(t){var n=t.title,r=t.titleId,o=v3t(t,g3t);return a("svg",_J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},w3t=b3t;var r7={};$(r7,{icon:()=>I3t});var X0r=E(L());var O3t=["title","titleId"];function SJ(){return SJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S3t=function(t){var n=t.title,r=t.titleId,o=x3t(t,O3t);return a("svg",SJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 00-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682zm.743-4.103a.138.138 0 010 .206L6.158 9.97a.133.133 0 01-.218-.103v-.934H2.873A.133.133 0 012.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 01.218-.103l2.267 1.867z"}))},I3t=S3t;var n7={};$(n7,{icon:()=>C3t});var Y0r=E(L());var j3t=["title","titleId"];function IJ(){return IJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k3t=function(t){var n=t.title,r=t.titleId,o=E3t(t,j3t);return a("svg",IJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 01-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 00-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 01.22-.07c.118 0 .197.061.238.185a.99.99 0 01.062.255 7.1 7.1 0 01-.573.467 4.93 4.93 0 01-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 01-.793-.688 2.626 2.626 0 01-.388-.933 4.949 4.949 0 01-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 019.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 00-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 00-.431-.22z"}))},C3t=k3t;var o7={};$(o7,{icon:()=>z3t});var Z0r=E(L());var A3t=["title","titleId"];function jJ(){return jJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var R3t=function(t){var n=t.title,r=t.titleId,o=M3t(t,A3t);return a("svg",jJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.461 7.31h3.055a.74.74 0 01.66 1.074l-2.141 4.211a.74.74 0 11-1.319-.67L9.31 8.79H6.256a.74.74 0 01-.66-1.075l2.19-4.31a.74.74 0 011.319.67L7.461 7.31z"}))},z3t=R3t;var i7={};$(i7,{icon:()=>W3t});var tmr=E(L());var D3t=["title","titleId"];function EJ(){return EJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F3t=function(t){var n=t.title,r=t.titleId,o=L3t(t,D3t);return a("svg",EJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},W3t=F3t;var a7={};$(a7,{icon:()=>U3t});var nmr=E(L());var B3t=["title","titleId"];function PJ(){return PJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q3t=function(t){var n=t.title,r=t.titleId,o=H3t(t,B3t);return a("svg",PJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.867 2.667H4a.667.667 0 00-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 00.667-.666V5.619a.669.669 0 00-.183-.459l-2.133-2.285a.668.668 0 00-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333z"}))},U3t=q3t;var l7={};$(l7,{icon:()=>K3t});var imr=E(L());var $3t=["title","titleId"];function kJ(){return kJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var X3t=function(t){var n=t.title,r=t.titleId,o=J3t(t,$3t);return a("svg",kJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.25 3a.25.25 0 00-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25v-2a.25.25 0 00-.25-.25h-9.5zm0 3.75A.25.25 0 003 7v2c0 .138.112.25.25.25H5.5A.25.25 0 005.75 9V7a.25.25 0 00-.25-.25H3.25zm-.25 4a.25.25 0 01.25-.25H5.5a.25.25 0 01.25.25v2a.25.25 0 01-.25.25H3.25a.25.25 0 01-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 01.19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 01-.19-.025L6.31 10.023z"}))},K3t=X3t;var s7={};$(s7,{icon:()=>t5t});var lmr=E(L());var Y3t=["title","titleId"];function CJ(){return CJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e5t=function(t){var n=t.title,r=t.titleId,o=Q3t(t,Y3t);return a("svg",CJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 00-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15z"}))},t5t=e5t;var u7={};$(u7,{icon:()=>a5t});var umr=E(L());var r5t=["title","titleId"];function AJ(){return AJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i5t=function(t){var n=t.title,r=t.titleId,o=n5t(t,r5t);return a("svg",AJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 01-.999 3H12a4.992 4.992 0 01-4 2 4.992 4.992 0 01-4-1.999V11a5 5 0 014-8zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1zM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 016 11.001zm4.645.001H10a5.51 5.51 0 01-.269.606c.333-.16.64-.364.914-.606zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 01-.196-1.5zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5zm2.482 0h-1.481a9.186 9.186 0 01-.196 1.5h1.172c.262-.452.437-.96.505-1.5zM5.708 6L4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 015.708 6zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 00-.21-1.5zM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 00-.504-1.5zM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 01.269-.607zM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4zm1.73.393l.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 00-.915-.607z"}))},a5t=i5t;var c7={};$(c7,{icon:()=>p5t});var pmr=E(L());var l5t=["title","titleId"];function MJ(){return MJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c5t=function(t){var n=t.title,r=t.titleId,o=s5t(t,l5t);return a("svg",MJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},p5t=c5t;var p7={};$(p7,{icon:()=>g5t});var dmr=E(L());var f5t=["title","titleId"];function TJ(){return TJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h5t=function(t){var n=t.title,r=t.titleId,o=d5t(t,f5t);return a("svg",TJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11 3a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h6zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},g5t=h5t;var f7={};$(f7,{icon:()=>O5t});var hmr=E(L());var v5t=["title","titleId"];function RJ(){return RJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w5t=function(t){var n=t.title,r=t.titleId,o=y5t(t,v5t);return a("svg",RJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306z"}))},O5t=w5t;var d7={};$(d7,{icon:()=>j5t});var vmr=E(L());var x5t=["title","titleId"];function zJ(){return zJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I5t=function(t){var n=t.title,r=t.titleId,o=_5t(t,x5t);return a("svg",zJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 100 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 010-4.988V4.5h-4zM13 4a1 1 0 00-1-1H7a1 1 0 00-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 100 4.426c.17-.031.341.09.341.262V12a1 1 0 001 1h5a1 1 0 001-1V9.004a.16.16 0 00-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 110-1.662c.138.092.623.057.732-.068a.16.16 0 00.04-.105V4z"}))},j5t=I5t;var m7={};$(m7,{icon:()=>A5t});var bmr=E(L());var E5t=["title","titleId"];function DJ(){return DJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C5t=function(t){var n=t.title,r=t.titleId,o=P5t(t,E5t);return a("svg",DJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 018.86 9.694l-.438.492a.437.437 0 01-.327.147h-.678v.73a.437.437 0 01-.438.437H6.25v.73a.437.437 0 01-.438.437H3.772a.437.437 0 01-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 013.047-4.214 3.202 3.202 0 013.209 3.209zm-3.209-.875a.875.875 0 101.75 0 .875.875 0 00-1.75 0z"}))},A5t=C5t;var h7={};$(h7,{icon:()=>D5t});var Omr=E(L());var M5t=["title","titleId"];function LJ(){return LJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z5t=function(t){var n=t.title,r=t.titleId,o=T5t(t,M5t);return a("svg",LJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},D5t=z5t;var g7={};$(g7,{icon:()=>B5t});var _mr=E(L());var L5t=["title","titleId"];function NJ(){return NJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W5t=function(t){var n=t.title,r=t.titleId,o=N5t(t,L5t);return a("svg",NJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333z"}))},B5t=W5t;var v7={};$(v7,{icon:()=>$5t});var Imr=E(L());var H5t=["title","titleId"];function FJ(){return FJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U5t=function(t){var n=t.title,r=t.titleId,o=V5t(t,H5t);return a("svg",FJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3a1 1 0 00-1 1v1H9a1 1 0 000 2h1v1a1 1 0 102 0V7h1a1 1 0 100-2h-1V4a1 1 0 00-1-1zM5 7a1 1 0 00-1 1v1H3a1 1 0 000 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2H6V8a1 1 0 00-1-1z"}))},$5t=U5t;var y7={};$(y7,{icon:()=>Y5t});var Emr=E(L());var J5t=["title","titleId"];function WJ(){return WJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K5t=function(t){var n=t.title,r=t.titleId,o=G5t(t,J5t);return a("svg",WJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4h-.5a.5.5 0 010-1h1a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-1a.5.5 0 010-1H5v-2h-.5a.5.5 0 010-1H5V7h-.5a.5.5 0 010-1H5V4zm3 1a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1V6a1 1 0 00-1-1H8z"}))},Y5t=K5t;var b7={};$(b7,{icon:()=>r4t});var kmr=E(L());var Q5t=["title","titleId"];function BJ(){return BJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function e4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var t4t=function(t){var n=t.title,r=t.titleId,o=Z5t(t,Q5t);return a("svg",BJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2l5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2z"}),a("path",{d:"M5.243 4.429L9.597 7.04 8 7.928 3.743 5.563a.5.5 0 10-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 00.06-.04l.392-.202V5.047l-.917.505a.573.573 0 00-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858z"}))},r4t=t4t;var w7={};$(w7,{icon:()=>l4t});var Amr=E(L());var n4t=["title","titleId"];function HJ(){return HJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function i4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var a4t=function(t){var n=t.title,r=t.titleId,o=o4t(t,n4t);return a("svg",HJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 8.416l-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96z"}))},l4t=a4t;var O7={};$(O7,{icon:()=>f4t});var Tmr=E(L());var s4t=["title","titleId"];function VJ(){return VJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function c4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p4t=function(t){var n=t.title,r=t.titleId,o=u4t(t,s4t);return a("svg",VJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 01-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 01-.09-.992L9.5 3H11zM6.5 3a.5.5 0 01.09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 01.09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5z"}),a("path",{d:"M5.864 7.25a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429z"})))},f4t=p4t;var x7={};$(x7,{icon:()=>v4t});var zmr=E(L());var d4t=["title","titleId"];function qJ(){return qJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g4t=function(t){var n=t.title,r=t.titleId,o=m4t(t,d4t);return a("svg",qJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.002 12.412l-.962.962a1 1 0 01-1.414-1.414l.962-.962a5.333 5.333 0 017.41-7.41l.962-.962a1 1 0 111.414 1.414l-.962.962a5.333 5.333 0 01-7.41 7.41zm.966-.966a4 4 0 005.478-5.478l-5.478 5.478zm-1.414-1.414l5.478-5.478a4 4 0 00-5.478 5.478z"}))},v4t=g4t;var _7={};$(_7,{icon:()=>x4t});var Lmr=E(L());var y4t=["title","titleId"];function UJ(){return UJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function w4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var O4t=function(t){var n=t.title,r=t.titleId,o=b4t(t,y4t);return a("svg",UJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77z"}))},x4t=O4t;var S7={};$(S7,{icon:()=>E4t});var Fmr=E(L());var _4t=["title","titleId"];function $J(){return $J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j4t=function(t){var n=t.title,r=t.titleId,o=S4t(t,_4t);return a("svg",$J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4z"}))},E4t=j4t;var I7={};$(I7,{icon:()=>M4t});var Bmr=E(L());var P4t=["title","titleId"];function JJ(){return JJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function C4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A4t=function(t){var n=t.title,r=t.titleId,o=k4t(t,P4t);return a("svg",JJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818zM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818z"}))},M4t=A4t;var j7={};$(j7,{icon:()=>L4t});var Vmr=E(L());var T4t=["title","titleId"];function GJ(){return GJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D4t=function(t){var n=t.title,r=t.titleId,o=R4t(t,T4t);return a("svg",GJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.049 3.785l3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 01.098 0zm.073 2.654l4.545-1.306v5.45l-.131.184-4.414 1.455V6.439zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183z"}))},L4t=D4t;var E7={};$(E7,{icon:()=>H4t});var Umr=E(L());var N4t=["title","titleId"];function XJ(){return XJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B4t=function(t){var n=t.title,r=t.titleId,o=F4t(t,N4t);return a("svg",XJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},H4t=B4t;var P7={};$(P7,{icon:()=>J4t});var Jmr=E(L());var V4t=["title","titleId"];function KJ(){return KJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $4t=function(t){var n=t.title,r=t.titleId,o=q4t(t,V4t);return a("svg",KJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 7a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm0 1a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM11 9a1 1 0 100-2 1 1 0 000 2zm0 1a2 2 0 100-4 2 2 0 000 4zm-2.5 1.5a.5.5 0 11-1 0 .5.5 0 011 0zm1 0a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"}))},J4t=$4t;var k7={};$(k7,{icon:()=>Q4t});var Xmr=E(L());var G4t=["title","titleId"];function YJ(){return YJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function K4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Y4t=function(t){var n=t.title,r=t.titleId,o=X4t(t,G4t);return a("svg",YJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},Q4t=Y4t;var C7={};$(C7,{icon:()=>n6t});var Ymr=E(L());var Z4t=["title","titleId"];function QJ(){return QJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r6t=function(t){var n=t.title,r=t.titleId,o=e6t(t,Z4t);return a("svg",QJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M9.82 5.116a.5.5 0 00-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 00-.114.63l.05.074a.5.5 0 00.63.115l.075-.05 3-2.5a.5.5 0 00.071-.697l-.07-.072-3-2.5zM6.18 5.116a.5.5 0 01.704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 01.114.63l-.05.074a.5.5 0 01-.63.115l-.075-.05-3-2.5a.5.5 0 01-.071-.697l.07-.072 3-2.5z"})))},n6t=r6t;var A7={};$(A7,{icon:()=>s6t});var Zmr=E(L());var o6t=["title","titleId"];function ZJ(){return ZJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l6t=function(t){var n=t.title,r=t.titleId,o=i6t(t,o6t);return a("svg",ZJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},s6t=l6t;var M7={};$(M7,{icon:()=>d6t});var t1r=E(L());var u6t=["title","titleId"];function eG(){return eG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f6t=function(t){var n=t.title,r=t.titleId,o=c6t(t,u6t);return a("svg",eG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},d6t=f6t;var T7={};$(T7,{icon:()=>y6t});var n1r=E(L());var m6t=["title","titleId"];function tG(){return tG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v6t=function(t){var n=t.title,r=t.titleId,o=h6t(t,m6t);return a("svg",tG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 11-1.163-.037V5.776a1.595 1.595 0 01-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 01-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 01-1.115 1.526c-.139.762-.656 2.208-2.619 2.208zm-3.2 2.133a.535.535 0 00-.533.533c0 .294.24.534.533.534a.535.535 0 000-1.067zm0-7.467a.535.535 0 00-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 00-.534-.534zM10.667 4.8a.535.535 0 00-.534.533.535.535 0 001.067 0 .535.535 0 00-.533-.533z"}))},y6t=v6t;var R7={};$(R7,{icon:()=>_6t});var i1r=E(L());var b6t=["title","titleId"];function rG(){return rG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x6t=function(t){var n=t.title,r=t.titleId,o=w6t(t,b6t);return a("svg",rG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.27 7.5a1 1 0 112 0 1 1 0 01-2 0zM8.77 7.5a1 1 0 112 0 1 1 0 01-2 0z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 01-5.796.482L4.28 12.789a.75.75 0 01-1.06-1.06L4.847 10.1a4.501 4.501 0 116.855.581zm-5.304-1.06a3 3 0 104.243-4.243A3 3 0 006.398 9.62z"}))},_6t=x6t;var z7={};$(z7,{icon:()=>P6t});var l1r=E(L());var S6t=["title","titleId"];function nG(){return nG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E6t=function(t){var n=t.title,r=t.titleId,o=I6t(t,S6t);return a("svg",nG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1zm-8 1H4v1h1v-1zm7 0h-1v1h1v-1zM5 4H4v1h1V4zm7 0h-1v1h1V4zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6z"}))},P6t=E6t;var D7={};$(D7,{icon:()=>T6t});var u1r=E(L());var k6t=["title","titleId"];function oG(){return oG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M6t=function(t){var n=t.title,r=t.titleId,o=C6t(t,k6t);return a("svg",oG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},T6t=M6t;var L7={};$(L7,{icon:()=>N6t});var p1r=E(L());var R6t=["title","titleId"];function iG(){return iG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L6t=function(t){var n=t.title,r=t.titleId,o=z6t(t,R6t);return a("svg",iG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667zm0 4h2.666v2.666H4.667V8.667zm4-4h2.666v2.666H8.667V4.667zm0 4h2.666v2.666H8.667V8.667zM3.333 3.333v9.334h9.334V3.333H3.333zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 012 12.667V3.333C2 2.597 2.597 2 3.333 2z"}))},N6t=L6t;var N7={};$(N7,{icon:()=>V6t});var d1r=E(L());var F6t=["title","titleId"];function aG(){return aG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H6t=function(t){var n=t.title,r=t.titleId,o=W6t(t,F6t);return a("svg",aG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.316 14a6 6 0 110-12 6 6 0 010 12zm0-1.333a4.667 4.667 0 100-9.334 4.667 4.667 0 000 9.334zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116z"}))},V6t=H6t;var F7={};$(F7,{icon:()=>G6t});var h1r=E(L());var q6t=["title","titleId"];function lG(){return lG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J6t=function(t){var n=t.title,r=t.titleId,o=U6t(t,q6t);return a("svg",lG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 8a1 1 0 11-2 0 1 1 0 012 0z"}),a("path",{fillRule:"evenodd",d:"M4 4a1 1 0 00-1 1v6a1 1 0 001 1h6.989a1 1 0 00.825-.436l2.05-3a1 1 0 000-1.128l-2.05-3A1 1 0 0010.99 4H4zm.75 1.25a.5.5 0 00-.5.5v4.5a.5.5 0 00.5.5h5.745a.5.5 0 00.405-.206l1.636-2.25a.5.5 0 000-.588L10.9 5.456a.5.5 0 00-.405-.206H4.75z"}))},G6t=J6t;var W7={};$(W7,{icon:()=>Z6t});var v1r=E(L());var X6t=["title","titleId"];function sG(){return sG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q6t=function(t){var n=t.title,r=t.titleId,o=K6t(t,X6t);return a("svg",sG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},Z6t=Q6t;var B7={};$(B7,{icon:()=>owt});var b1r=E(L());var ewt=["title","titleId"];function uG(){return uG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nwt=function(t){var n=t.title,r=t.titleId,o=twt(t,ewt);return a("svg",uG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H3v3h5V4zM13 9H8v3h5V9zM10 4h3v3h-3V4zM6 9H3v3h3V9z"}))},owt=nwt;var H7={};$(H7,{icon:()=>uwt});var O1r=E(L());var iwt=["title","titleId"];function cG(){return cG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var swt=function(t){var n=t.title,r=t.titleId,o=awt(t,iwt);return a("svg",cG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.649 4.667l1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},uwt=swt;var V7={};$(V7,{icon:()=>mwt});var _1r=E(L());var cwt=["title","titleId"];function pG(){return pG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dwt=function(t){var n=t.title,r=t.titleId,o=pwt(t,cwt);return a("svg",pG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.386 9.836a2.5 2.5 0 113.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 11-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 11.78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 10-.33-.036zM9.78 11.97a.5.5 0 01.5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 11-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 01.473-.337zM5.958 5.772a.5.5 0 01-.78.625L3.11 3.812a.5.5 0 11.78-.624l2.068 2.584zM1 11h5.5a.5.5 0 110 1h-6a.5.5 0 01-.5-.5V.5A.5.5 0 01.5 0h12a.5.5 0 01.5.5v3a.5.5 0 11-1 0V1H1v10z"}))},mwt=dwt;var q7={};$(q7,{icon:()=>bwt});var I1r=E(L());var hwt=["title","titleId"];function fG(){return fG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ywt=function(t){var n=t.title,r=t.titleId,o=gwt(t,hwt);return a("svg",fG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 011-1h4a1 1 0 011 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z"}))},bwt=ywt;var U7={};$(U7,{icon:()=>Swt});var E1r=E(L());var wwt=["title","titleId"];function dG(){return dG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _wt=function(t){var n=t.title,r=t.titleId,o=Owt(t,wwt);return a("svg",dG({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14 3.808L7.53 1.51a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93L9.416.578a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zm0 8.384l2.39 2.298a.67.67 0 00.942 0l2.389-2.298a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},Swt=_wt;var $7={};$($7,{icon:()=>kwt});var k1r=E(L());var Iwt=["title","titleId"];function mG(){return mG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ewt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pwt=function(t){var n=t.title,r=t.titleId,o=jwt(t,Iwt);return a("svg",mG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.565 10.83a.5.5 0 11.819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 11-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),a("path",{d:"M7.892 3.43a.5.5 0 11-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 11.819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 01-1 0v-3a.5.5 0 011 0zM1.058 2.23l2.458 1.72a.5.5 0 01-.574.82L.484 3.05a.5.5 0 11.574-.82zm12 7.093l2.457 1.72a.5.5 0 11-.573.82l-2.457-1.72a.5.5 0 11.573-.82zm-2.099 1.181v3a.5.5 0 11-1 0v-3a.5.5 0 111 0z"}))},kwt=Pwt;var J7={};$(J7,{icon:()=>Rwt});var A1r=E(L());var Cwt=["title","titleId"];function hG(){return hG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Twt=function(t){var n=t.title,r=t.titleId,o=Awt(t,Cwt);return a("svg",hG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 9a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}),a("path",{d:"M15 14.291A9.053 9.053 0 008 11a9.053 9.053 0 00-7 3.291l.715.71A8.047 8.047 0 018 11.996 8.047 8.047 0 0114.286 15l.714-.71z"}))},Rwt=Twt;var G7={};$(G7,{icon:()=>Fwt});var T1r=E(L());var zwt=["title","titleId"];function gG(){return gG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nwt=function(t){var n=t.title,r=t.titleId,o=Dwt(t,zwt);return a("svg",gG({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 01-1 1.12H3.007a1.005 1.005 0 01-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 00.783-.633zM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 01-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 017.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1z"}),a("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 108.937.999 5 5 0 008.94 11"})))},Fwt=Nwt;var X7={};$(X7,{icon:()=>qwt});var z1r=E(L());var Wwt=["title","titleId"];function vG(){return vG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vwt=function(t){var n=t.title,r=t.titleId,o=Bwt(t,Wwt);return a("svg",vG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 10-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 001 6.978V9a1 1 0 001 1h2.5a3.69 3.69 0 01.684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 00-1.066-1.03zM4 4a1 1 0 100-2 1 1 0 000 2zm10 6h-2.5a3.684 3.684 0 00-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 00-.793-.636 2.716 2.716 0 011.066-1.03 2 2 0 112.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0115 6.944V9a1 1 0 01-1 1zm-2-6a1 1 0 100-2 1 1 0 000 2z"}),a("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 011.163 1.21A3.453 3.453 0 0111 11.977V14a1 1 0 01-1 1H6a1 1 0 01-1-1v-2.022a2.005 2.005 0 01.006-.135 3.456 3.456 0 01.35-1.29 2.755 2.755 0 011.162-1.21A2 2 0 1110 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 11-2 0 1 1 0 012 0z"}))},qwt=Vwt;var K7={};$(K7,{icon:()=>Xwt});var L1r=E(L());var Uwt=["title","titleId"];function yG(){return yG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gwt=function(t){var n=t.title,r=t.titleId,o=$wt(t,Uwt);return a("svg",yG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6zM4 4V2H2v2h2zm8 0h2V2h-2v2zM2 14h2v-2H2v2zm10 0h2v-2h-2v2z"}))},Xwt=Gwt;var Y7={};$(Y7,{icon:()=>eOt});var F1r=E(L());var Kwt=["title","titleId"];function bG(){return bG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zwt=function(t){var n=t.title,r=t.titleId,o=Ywt(t,Kwt);return a("svg",bG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994zM1 4h14v1H1V4zm1.5-1a.5.5 0 010-1h1a.5.5 0 010 1h-1zm3 0a.5.5 0 010-1h1a.5.5 0 010 1h-1zm4.947 6.106a1 1 0 010 1.788l-3 2A1 1 0 016 12V8a1 1 0 011.447-.894l3 2zM10 10L7 8v4l3-2z"}))},eOt=Zwt;var Q7={};$(Q7,{icon:()=>iOt});var B1r=E(L());var tOt=["title","titleId"];function wG(){return wG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oOt=function(t){var n=t.title,r=t.titleId,o=rOt(t,tOt);return a("svg",wG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317 3 6.191V13zm5.295-5.35l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001L8.295 7.65zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15z"}))},iOt=oOt;var Z7={};$(Z7,{icon:()=>cOt});var V1r=E(L());var aOt=["title","titleId"];function OG(){return OG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uOt=function(t){var n=t.title,r=t.titleId,o=lOt(t,aOt);return a("svg",OG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 1a.5.5 0 01.5.5V15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14A.5.5 0 01.5 1zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 01.493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 01.36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317z"}))},cOt=uOt;var ex={};$(ex,{icon:()=>hOt});var U1r=E(L());var pOt=["title","titleId"];function xG(){return xG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mOt=function(t){var n=t.title,r=t.titleId,o=fOt(t,pOt);return a("svg",xG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 10h-6a.5.5 0 010-1H8V6H2.5a.5.5 0 010-1H13V2H2.5a.5.5 0 010-1h11a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H11v-3H8.5zM0 .5a.5.5 0 111 0v14a.5.5 0 11-1 0V.5z"}))},hOt=mOt;var tx={};$(tx,{icon:()=>wOt});var J1r=E(L());var gOt=["title","titleId"];function _G(){return _G=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bOt=function(t){var n=t.title,r=t.titleId,o=vOt(t,gOt);return a("svg",_G({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 0a.5.5 0 01.5.5v14a.5.5 0 11-1 0V.5A.5.5 0 01.5 0zm13 1a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H9v-3H2.5a.5.5 0 010-1H6V6H2.5a.5.5 0 010-1H10V2H2.5a.5.5 0 010-1h11z"}))},wOt=bOt;var rx={};$(rx,{icon:()=>IOt});var X1r=E(L());var OOt=["title","titleId"];function SG(){return SG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SOt=function(t){var n=t.title,r=t.titleId,o=xOt(t,OOt);return a("svg",SG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 7.5v6a.5.5 0 11-1 0V8H6v5.5a.5.5 0 11-1 0V3H2v10.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4a.5.5 0 01.5.5V7h3V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V5h-3v2.5zM.5 16a.5.5 0 110-1h14a.5.5 0 110 1H.5z"}))},IOt=SOt;var nx={};$(nx,{icon:()=>COt});var Y1r=E(L());var jOt=["title","titleId"];function IG(){return IG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function POt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kOt=function(t){var n=t.title,r=t.titleId,o=EOt(t,jOt);return a("svg",IG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.5 15a.5.5 0 110 1H.5a.5.5 0 110-1h14zm-9-13a.5.5 0 01.5.5L5.999 7H9V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V7h-3v6.5a.5.5 0 01-.41.492L9.5 14a.5.5 0 01-.5-.5V10H6v3.5a.5.5 0 01-.992.09L5 13.5V6H2v7.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4z"}))},COt=kOt;var ox={};$(ox,{icon:()=>zOt});var Z1r=E(L());var AOt=["title","titleId"];function jG(){return jG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ROt=function(t){var n=t.title,r=t.titleId,o=MOt(t,AOt);return a("svg",jG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.877 5.847l-1.02 1.02a.5.5 0 01-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 008 3.019V4.5a.5.5 0 01-1 0V3.019a6.47 6.47 0 00-4.261 2.055l1.07 1.071a.5.5 0 01-.706.707l-.99-.99A6.46 6.46 0 001.018 10H2.5a.5.5 0 110 1H1.174c.083.353.196.697.337 1.03a.5.5 0 11-.922.39A7.487 7.487 0 010 9.5a7.483 7.483 0 012.197-5.304A7.487 7.487 0 017.5 2a7.487 7.487 0 015.304 2.197A7.483 7.483 0 0115 9.5a7.487 7.487 0 01-.59 2.92.5.5 0 01-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 110-1h1.481a6.483 6.483 0 00-1.104-4.153zm-6.041 5.317a.993.993 0 01-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 01-1.404-.01z"}))},zOt=ROt;var ix={};$(ix,{icon:()=>WOt});var thr=E(L());var DOt=["title","titleId"];function EG(){return EG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FOt=function(t){var n=t.title,r=t.titleId,o=LOt(t,DOt);return a("svg",EG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.725 3.653a6 6 0 012.847 7.576.5.5 0 01-.928-.372 5 5 0 10-9.293-.014.5.5 0 01-.218.619L1.39 12.47a.5.5 0 01-.708-.23A7.99 7.99 0 010 9a8 8 0 0111.212-7.329.5.5 0 01.234.704l-.721 1.278zm-.933-.38l.5-.889a7 7 0 00-8.902 8.93l.886-.511a6 6 0 017.516-7.53zM6.73 9.467a1.75 1.75 0 112.539 0 2 2 0 11-2.539 0zM8 12.013a1 1 0 100-2 1 1 0 000 2zm0-3a.75.75 0 100-1.5.75.75 0 000 1.5z"}))},WOt=FOt;var ax={};$(ax,{icon:()=>UOt});var nhr=E(L());var BOt=["title","titleId"];function PG(){return PG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qOt=function(t){var n=t.title,r=t.titleId,o=HOt(t,BOt);return a("svg",PG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 00-.915-.404l2.33-5.547zM9.146 9.19a2.008 2.008 0 00-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978zM5.581 7.956l-2.134 4.268a.5.5 0 01-.894-.448l2.134-4.268c.25.22.557.376.894.448zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15zm5-8a1 1 0 110-2 1 1 0 010 2zm4 5a1 1 0 110-2 1 1 0 010 2zm4-9a1 1 0 110-2 1 1 0 010 2z"}))},UOt=qOt;var lx={};$(lx,{icon:()=>KOt});var ihr=E(L());var $Ot=["title","titleId"];function kG(){return kG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XOt=function(t){var n=t.title,r=t.titleId,o=JOt(t,$Ot);return a("svg",kG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14zm0-4.996a2.5 2.5 0 110-5 2.5 2.5 0 010 5zm0-1a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},KOt=XOt;var sx={};$(sx,{icon:()=>t7t});var lhr=E(L());var YOt=["title","titleId"];function CG(){return CG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e7t=function(t){var n=t.title,r=t.titleId,o=QOt(t,YOt);return a("svg",CG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 2.309v8.69a.499.499 0 01-.032.176L9.5 12.691V3.809l-3-1.5zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 01-.027-.164V2.27zm.274-1.216a.498.498 0 01.471.01l3.768 1.884 4.284-1.904A.5.5 0 0115 1.5v10a.5.5 0 01-.297.457l-4.5 2a.5.5 0 01-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 01-.703-.457v-10a.5.5 0 01.297-.457l4.476-1.99zM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556z"}))},t7t=e7t;var ux={};$(ux,{icon:()=>a7t});var uhr=E(L());var r7t=["title","titleId"];function AG(){return AG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i7t=function(t){var n=t.title,r=t.titleId,o=n7t(t,r7t);return a("svg",AG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.532 7.34a2.161 2.161 0 112.936 0 2.746 2.746 0 11-2.936 0zM2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm6 5.915a1.161 1.161 0 100-2.322 1.161 1.161 0 000 2.322zm0 4.492a1.746 1.746 0 100-3.492 1.746 1.746 0 000 3.492z"}))},a7t=i7t;var cx={};$(cx,{icon:()=>p7t});var phr=E(L());var l7t=["title","titleId"];function MG(){return MG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c7t=function(t){var n=t.title,r=t.titleId,o=s7t(t,l7t);return a("svg",MG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 9a.5.5 0 01-.5-.5V3.023A5.5 5.5 0 1011.978 9H6.5zM7 8h5.5a.5.5 0 01.5.5A6.5 6.5 0 116.5 2a.5.5 0 01.5.5V8zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028zM14.5 7h-6a.5.5 0 01-.5-.5v-6a.5.5 0 01.5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 01-.5.5zM6.146 8.854a.5.5 0 11.708-.708l4 4a.5.5 0 01-.708.708l-4-4z"}))},p7t=c7t;var px={};$(px,{icon:()=>g7t});var dhr=E(L());var f7t=["title","titleId"];function TG(){return TG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h7t=function(t){var n=t.title,r=t.titleId,o=d7t(t,f7t);return a("svg",TG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},g7t=h7t;var fx={};$(fx,{icon:()=>O7t});var hhr=E(L());var v7t=["title","titleId"];function RG(){return RG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w7t=function(t){var n=t.title,r=t.titleId,o=y7t(t,v7t);return a("svg",RG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 9.047a.5.5 0 100 1h13a.5.5 0 000-1h-13zm0-1h13a1.5 1.5 0 010 3h-13a1.5 1.5 0 010-3zM10 13a.5.5 0 110 1H4a.5.5 0 110-1h6zM8.001 2.015a.5.5 0 11-.002 1l-5-.015a.5.5 0 11.003-1l5 .015zM14 5a.5.5 0 110 1H6a.5.5 0 010-1h8z"}))},O7t=w7t;var dx={};$(dx,{icon:()=>j7t});var vhr=E(L());var x7t=["title","titleId"];function zG(){return zG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I7t=function(t){var n=t.title,r=t.titleId,o=_7t(t,x7t);return a("svg",zG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 5v6h2a.5.5 0 110 1h-5a.5.5 0 110-1h2V5H5v.5a.5.5 0 01-1 0v-1a.5.5 0 01.5-.5h7a.5.5 0 01.5.51l-.021 1a.5.5 0 11-1-.02l.01-.49H8.5zM1 15h1.5a.5.5 0 110 1h-2a.5.5 0 01-.5-.5v-1.996a.5.5 0 011 0V15zM1 1v1.497a.5.5 0 11-1 0V.5A.5.5 0 01.5 0h2a.5.5 0 010 1H1zm14 0h-1.495a.5.5 0 010-1H15.5a.5.5 0 01.5.5v2a.5.5 0 11-1 0V1zm0 14v-1.5a.5.5 0 111 0v2a.5.5 0 01-.5.5h-2a.5.5 0 110-1H15zM0 6.5a.5.5 0 011 0v3a.5.5 0 01-1 0v-3zM9.5 0a.5.5 0 010 1h-3a.5.5 0 010-1h3zM15 6.5a.5.5 0 111 0v3a.5.5 0 11-1 0v-3zM9.5 15a.5.5 0 110 1h-3a.5.5 0 110-1h3z"}))},j7t=I7t;var mx={};$(mx,{icon:()=>A7t});var bhr=E(L());var E7t=["title","titleId"];function DG(){return DG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C7t=function(t){var n=t.title,r=t.titleId,o=P7t(t,E7t);return a("svg",DG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 01-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 01-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 01-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 01-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 01.112-.454 6.728 6.728 0 01-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347zm3.027 1.116a3.13 3.13 0 00-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 00-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 00-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503zM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614zM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9z"}))},A7t=C7t;var hx={};$(hx,{icon:()=>D7t});var Ohr=E(L());var M7t=["title","titleId"];function LG(){return LG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z7t=function(t){var n=t.title,r=t.titleId,o=T7t(t,M7t);return a("svg",LG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},D7t=z7t;var gx={};$(gx,{icon:()=>B7t});var _hr=E(L());var L7t=["title","titleId"];function NG(){return NG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W7t=function(t){var n=t.title,r=t.titleId,o=N7t(t,L7t);return a("svg",NG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 11-1 0V9.869A23.3 23.3 0 008.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 11-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 01-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0114 3.679V5.5A1.5 1.5 0 0112.5 7H9.837zm-.569-1H12.5a.5.5 0 00.5-.5V3.68a.5.5 0 00-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268zM2 10v3.5a.5.5 0 11-1 0v-4a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v4a.5.5 0 11-1 0V10H2zm10 3.5a.5.5 0 11-1 0v-2a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v2a.5.5 0 11-1 0V12h-2v1.5zM1.016 16.026a.5.5 0 010-1H15a.5.5 0 110 1H1.016z"}))},B7t=W7t;var vx={};$(vx,{icon:()=>$7t});var Ihr=E(L());var H7t=["title","titleId"];function FG(){return FG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U7t=function(t){var n=t.title,r=t.titleId,o=V7t(t,H7t);return a("svg",FG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),a("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 011.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 01-.88.763 2.957 2.957 0 01-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 00.726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 00-.495-.424 1.958 1.958 0 00-.77-.197H2V7z"}))},$7t=U7t;var yx={};$(yx,{icon:()=>Y7t});var Ehr=E(L());var J7t=["title","titleId"];function WG(){return WG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K7t=function(t){var n=t.title,r=t.titleId,o=G7t(t,J7t);return a("svg",WG({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3.5L12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},Y7t=K7t;var bx={};$(bx,{icon:()=>rxt});var khr=E(L());var Q7t=["title","titleId"];function BG(){return BG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ext(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var txt=function(t){var n=t.title,r=t.titleId,o=Z7t(t,Q7t);return a("svg",BG({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.746l4.537 4.537a2 2 0 102.828-2.829l-3.157-3.156a.5.5 0 01.708-.708l3.156 3.157a3 3 0 11-4.243 4.243l-4.949-4.95a5.001 5.001 0 01-5.22-7.106.5.5 0 01.805-.138L3.676 5.09a1 1 0 101.415-1.414L2.797 1.382a.5.5 0 01.138-.805 5.001 5.001 0 113.983 9.169zM1.226 4.054a4.002 4.002 0 006.693 3.865 4 4 0 00-3.865-6.693l1.744 1.743a2 2 0 11-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 111.414-1.414 1 1 0 01-1.414 1.414z"}))},rxt=txt;var R1e=E(L()),ji=E(rt()),z1e=E(yt());var tP={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",alert:"alert",analyzeEvent:"analyzeEvent",annotation:"annotation",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",asterisk:"asterisk",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clock:"clock",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInACircleFilled:"crossInACircleFilled",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",discoverApp:"app_discover",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",eql:"eql",eraser:"eraser",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",filebeatApp:"app_filebeat",filter:"filter",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",namespace:"namespace",nested:"nested",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipelineApp:"app_pipeline",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",snowflake:"snowflake",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spacesApp:"app_spaces",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDenseVector:"tokenDenseVector",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable"};var O1e=E(cn()),wx=[];function nxt(){(0,O1e.unstable_batchedUpdates)(function(){for(var e=0;e2&&arguments[2]!==void 0?arguments[2]:{},u=i.method;if(n==="transparent")return"transparent";if(u==="transparent")return n==="plain"?Ta(r.colors.ghost,.2):n==="subdued"?Ta(r.colors.lightShade,.2):Ta(r.colors[n],.1);var c=function(g){return o==="DARK"?Xs(g,.8):Gs(g,.9)};switch(n){case"plain":return r.colors.emptyShade;case"subdued":return r.colors.body;default:return c(r.colors[n])}},Yp=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.method,o=cr();return xx(o,t,{method:r})},_1e=function(){return{transparent:xe("background-color:",Yp("transparent"),";;label:transparent;"),plain:xe("background-color:",Yp("plain"),";;label:plain;"),subdued:xe("background-color:",Yp("subdued"),";;label:subdued;"),accent:xe("background-color:",Yp("accent"),";;label:accent;"),primary:xe("background-color:",Yp("primary"),";;label:primary;"),success:xe("background-color:",Yp("success"),";;label:success;"),warning:xe("background-color:",Yp("warning"),";;label:warning;"),danger:xe("background-color:",Yp("danger"),";;label:danger;")}};var S1e=function(t){var n=t.euiTheme,r=n.colors,o=n.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=i.thumbColor,c=i.trackColor,d=c===void 0?"transparent":c,g=i.width,O=g===void 0?"thin":g,S=i.size,I=i.corner,R=u||Ta(r.darkShade,.5),k=S||o.base,M=I||O==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,C="scrollbar-color: ".concat(R," ").concat(d,";");return"scrollbar-width: ".concat(O,`; &::-webkit-scrollbar { width: `).concat(k,`; @@ -59,7 +59,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho background-color: `).concat(R,`; background-clip: content-box; border-radius: `).concat(k,`; - border: `).concat(A," solid ").concat(d,`; + border: `).concat(M," solid ").concat(d,`; } &::-webkit-scrollbar-corner, @@ -67,8 +67,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho background-color: `).concat(d,`; } - `).concat(M,` - `)};var G7t=function(t,n){var r=t.euiTheme;switch(n){case"none":return null;case"m":return r.size.base;default:return r.size[n]}},Ox=function(t){var n=cr();return G7t(n,t)},w1e=function(t){var n=t?"padding-".concat(T1[t]):"padding";return{none:null,xs:Oe(n,":",Ox("xs"),";;label:xs;"),s:Oe(n,":",Ox("s"),";;label:s;"),m:Oe(n,":",Ox("m"),";;label:m;"),l:Oe(n,":",Ox("l"),";;label:l;"),xl:Oe(n,":",Ox("xl"),";;label:xl;")}};var Q1=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"center",r=arguments.length>2?arguments[2]:void 0,o=t.focus.width,i=r?.color||t.focus.color,u=n;return n==="inset"?u="-".concat(o):n==="outset"?u="".concat(o):n==="center"&&(u="calc(".concat(o," / -2);")),` + `).concat(C,` + `)};var oxt=function(t,n){var r=t.euiTheme;switch(n){case"none":return null;case"m":return r.size.base;default:return r.size[n]}},_x=function(t){var n=cr();return oxt(n,t)},I1e=function(t){var n=t?"padding-".concat(D1[t]):"padding";return{none:null,xs:xe(n,":",_x("xs"),";;label:xs;"),s:xe(n,":",_x("s"),";;label:s;"),m:xe(n,":",_x("m"),";;label:m;"),l:xe(n,":",_x("l"),";;label:l;"),xl:xe(n,":",_x("xl"),";;label:xl;")}};var th=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"center",r=arguments.length>2?arguments[2]:void 0,o=t.focus.width,i=r?.color||t.focus.color,u=n;return n==="inset"?u="-".concat(o):n==="outset"?u="".concat(o):n==="center"&&(u="calc(".concat(o," / -2);")),` outline: `.concat(o," solid ").concat(i,`; outline-offset: `).concat(u,`; @@ -81,11 +81,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:not(:focus-visible) { outline: none; } - `)};var jl=function(t,n,r){var o=t.euiTheme;return{fontSize:zue(n,o,r),lineHeight:Due(n,o,r)}};var O1e=function(){return` + `)};var El=function(t,n,r){var o=t.euiTheme;return{fontSize:Wue(n,o,r),lineHeight:Bue(n,o,r)}};var j1e=function(){return` overflow-wrap: break-word !important; // makes sure the long string will wrap and not bust out of the container word-wrap: break-word !important; // spec says, they are literally just alternate names for each other but some browsers support one and not the other word-break: break-word; // IE doesn't understand but that's ok -`};var la="@media screen and (prefers-reduced-motion: no-preference)";var x1e=` +`};var la="@media screen and (prefers-reduced-motion: no-preference)";var E1e=` /* // Adapted from Eric Meyer's reset (http://meyerweb.com/eric/tools/css/reset/, v2.0 | 20110126). */ @@ -184,15 +184,15 @@ fieldset { */ svg text { letter-spacing: normal !important; -}`;function X7t(e){if(e==null)throw new TypeError("Cannot destructure undefined")}var _1e=function(t){X7t(t);var n=cr(),r=n.euiTheme,o=n.colorMode,i=r.base,u=r.colors,c=r.font,d=b1e(n,{trackColor:o==="LIGHT"?Gs(u.body,.03):Js(u.body,.07),width:"auto"}),g=` +}`;function ixt(e){if(e==null)throw new TypeError("Cannot destructure undefined")}var P1e=function(t){ixt(t);var n=cr(),r=n.euiTheme,o=n.colorMode,i=r.base,u=r.colors,c=r.font,d=S1e(n,{trackColor:o==="LIGHT"?Xs(u.body,.03):Gs(u.body,.07),width:"auto"}),g=` font-family: `.concat(c.family,`; font-size: `,"".concat(c.scale[c.body.scale]*i,"px"),`; line-height: `).concat(i/(c.scale[c.body.scale]*i),`; font-weight: `).concat(c.weight[c.body.weight],`; - `),O=Oe(x1e," html{",d," ",g," text-size-adjust:100%;font-kerning:normal;height:100%;background-color:",u.body,";color:",u.text,";}code,pre,kbd,samp{font-family:",c.familyCode,";}input,textarea,select{",g,";}button{font-family:",c.family,";}em{font-style:italic;}strong{font-weight:",c.weight.bold,";}*:focus{",Q1(r),";}::selection{background:",Ma(u.primary,o==="LIGHT"?.1:.2),";}a{color:",u.primaryText,";&,&:hover,&:focus{text-decoration:none;}}.euiBody-hasPortalContent{position:relative;};label:styles;");return a(Hj,{styles:O})};var S1e;function K7t(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var xx=function(t){return` - `.concat(st("width",t),`; - `).concat(st("height",t),`; - `)},I1e=.05,Y7t=S1(S1e||(S1e=K7t([` + `),O=xe(E1e," html{",d," ",g," text-size-adjust:100%;font-kerning:normal;height:100%;background-color:",u.body,";color:",u.text,";}code,pre,kbd,samp{font-family:",c.familyCode,";}input,textarea,select{",g,";}button{font-family:",c.family,";}em{font-style:italic;}strong{font-weight:",c.weight.bold,";}*:focus{",th(r),";}::selection{background:",Ta(u.primary,o==="LIGHT"?.1:.2),";}a{color:",u.primaryText,";&,&:hover,&:focus{text-decoration:none;}}.euiBody-hasPortalContent{position:relative;};label:styles;");return a(Vj,{styles:O})};var k1e;function axt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Sx=function(t){return` + `.concat(ut("width",t),`; + `).concat(ut("height",t),`; + `)},C1e=.05,lxt=E1(k1e||(k1e=axt([` 0% { opacity: `,`; } @@ -200,8 +200,8 @@ svg text { 100% { opacity: 1; } -`])),I1e),Q7t={name:"njd749-logoElasticOutline",styles:"*[fill]{fill:none!important;}.outline{fill:currentColor!important;};label:logoElasticOutline;"},Z7t={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},j1e=function(t){var n=t.euiTheme;return{euiIcon:Oe("flex-shrink:0;display:inline-block;vertical-align:middle;fill:currentColor;transform:translate(0, 0);.euiIcon__fillNegative{fill:",n.colors.darkestShade,";};label:euiIcon;"),accent:Oe("color:",n.colors.accentText,";;label:accent;"),danger:Oe("color:",n.colors.dangerText,";;label:danger;"),ghost:Oe("color:",n.colors.ghost,";*[fill],.euiIcon__fillNegative{fill:currentColor!important;};label:ghost;"),primary:Oe("color:",n.colors.primaryText,";;label:primary;"),success:Oe("color:",n.colors.successText,";;label:success;"),subdued:Oe("color:",n.colors.subduedText,";;label:subdued;"),text:Oe("color:",n.colors.title,";*[fill],.euiIcon__fillNegative{fill:currentColor!important;};label:text;"),warning:Oe("color:",n.colors.warningText,";;label:warning;"),inherit:Z7t,default:Oe(";label:default;"),customColor:Oe(";label:customColor;"),logoElasticOutline:Q7t,original:Oe(";label:original;"),s:Oe(xx(n.size.m),";label:s;"),m:Oe(xx(n.size.base),";label:m;"),l:Oe(xx(n.size.l),";label:l;"),xl:Oe(xx(n.size.xl),";label:xl;"),xxl:Oe(xx(n.size.xxl),";label:xxl;"),app:Oe("fill:",n.colors.text,";.euiIcon__fillSecondary{fill:",n.colors.successText,";};label:app;"),logo:Oe(";label:logo;"),isLoading:Oe("opacity:",I1e,";background-color:currentColor;border-radius:",n.border.radius.small,";;label:isLoading;"),isLoaded:Oe(la,"{animation:",Y7t," ",n.animation.normal," ease-in 0s 1 forwards;};label:isLoaded;")}};var ext={"./assets/accessibility.js":Y2,"./assets/aggregate.js":Q2,"./assets/alert.js":Z2,"./assets/analyzeEvent.js":eb,"./assets/analyze_event.js":tb,"./assets/annotation.js":rb,"./assets/apm_trace.js":nb,"./assets/app_add_data.js":ob,"./assets/app_advanced_settings.js":ib,"./assets/app_agent.js":ab,"./assets/app_apm.js":lb,"./assets/app_app_search.js":sb,"./assets/app_auditbeat.js":ub,"./assets/app_canvas.js":cb,"./assets/app_cases.js":pb,"./assets/app_code.js":fb,"./assets/app_console.js":db,"./assets/app_cross_cluster_replication.js":mb,"./assets/app_dashboard.js":hb,"./assets/app_devtools.js":gb,"./assets/app_discover.js":vb,"./assets/app_ems.js":yb,"./assets/app_filebeat.js":bb,"./assets/app_fleet.js":wb,"./assets/app_gis.js":Ob,"./assets/app_graph.js":xb,"./assets/app_grok.js":_b,"./assets/app_heartbeat.js":Sb,"./assets/app_index_management.js":Ib,"./assets/app_index_pattern.js":jb,"./assets/app_index_rollup.js":Eb,"./assets/app_lens.js":Pb,"./assets/app_logs.js":kb,"./assets/app_management.js":Cb,"./assets/app_metricbeat.js":Ab,"./assets/app_metrics.js":Mb,"./assets/app_ml.js":Tb,"./assets/app_monitoring.js":Rb,"./assets/app_notebook.js":zb,"./assets/app_packetbeat.js":Db,"./assets/app_pipeline.js":Lb,"./assets/app_recently_viewed.js":Nb,"./assets/app_reporting.js":Fb,"./assets/app_saved_objects.js":Wb,"./assets/app_search_profiler.js":Bb,"./assets/app_security.js":Hb,"./assets/app_security_analytics.js":Vb,"./assets/app_spaces.js":qb,"./assets/app_sql.js":Ub,"./assets/app_timelion.js":$b,"./assets/app_upgrade_assistant.js":Jb,"./assets/app_uptime.js":Gb,"./assets/app_users_roles.js":Xb,"./assets/app_visualize.js":Kb,"./assets/app_watches.js":Yb,"./assets/app_workplace_search.js":Qb,"./assets/apps.js":Zb,"./assets/arrowEnd.js":e3,"./assets/arrowStart.js":t3,"./assets/arrow_down.js":r3,"./assets/arrow_left.js":n3,"./assets/arrow_right.js":o3,"./assets/arrow_up.js":i3,"./assets/asterisk.js":a3,"./assets/beaker.js":l3,"./assets/bell.js":s3,"./assets/bellSlash.js":u3,"./assets/bolt.js":c3,"./assets/boxes_horizontal.js":p3,"./assets/boxes_vertical.js":f3,"./assets/branch.js":d3,"./assets/branchUser.js":m3,"./assets/broom.js":h3,"./assets/brush.js":g3,"./assets/bug.js":v3,"./assets/bullseye.js":y3,"./assets/calendar.js":b3,"./assets/check.js":w3,"./assets/checkInCircleFilled.js":O3,"./assets/cheer.js":x3,"./assets/clock.js":_3,"./assets/cloudDrizzle.js":S3,"./assets/cloudStormy.js":I3,"./assets/cloudSunny.js":j3,"./assets/cluster.js":E3,"./assets/color.js":P3,"./assets/compute.js":k3,"./assets/console.js":C3,"./assets/container.js":A3,"./assets/continuityAbove.js":M3,"./assets/continuityAboveBelow.js":T3,"./assets/continuityBelow.js":R3,"./assets/continuityWithin.js":z3,"./assets/controls_horizontal.js":D3,"./assets/controls_vertical.js":L3,"./assets/copy.js":N3,"./assets/copy_clipboard.js":F3,"./assets/cross.js":W3,"./assets/crossInACircleFilled.js":B3,"./assets/crosshairs.js":H3,"./assets/currency.js":V3,"./assets/cut.js":q3,"./assets/database.js":U3,"./assets/desktop.js":$3,"./assets/document.js":J3,"./assets/documentEdit.js":G3,"./assets/documentation.js":X3,"./assets/documents.js":K3,"./assets/dot.js":Y3,"./assets/doubleArrowLeft.js":Q3,"./assets/doubleArrowRight.js":Z3,"./assets/download.js":e5,"./assets/editorDistributeHorizontal.js":t5,"./assets/editorDistributeVertical.js":r5,"./assets/editorItemAlignBottom.js":n5,"./assets/editorItemAlignCenter.js":o5,"./assets/editorItemAlignLeft.js":i5,"./assets/editorItemAlignMiddle.js":a5,"./assets/editorItemAlignRight.js":l5,"./assets/editorItemAlignTop.js":s5,"./assets/editorPositionBottomLeft.js":u5,"./assets/editorPositionBottomRight.js":c5,"./assets/editorPositionTopLeft.js":p5,"./assets/editorPositionTopRight.js":f5,"./assets/editor_align_center.js":d5,"./assets/editor_align_left.js":m5,"./assets/editor_align_right.js":h5,"./assets/editor_bold.js":g5,"./assets/editor_checklist.js":v5,"./assets/editor_code_block.js":y5,"./assets/editor_comment.js":b5,"./assets/editor_heading.js":w5,"./assets/editor_italic.js":O5,"./assets/editor_link.js":x5,"./assets/editor_ordered_list.js":_5,"./assets/editor_redo.js":S5,"./assets/editor_strike.js":I5,"./assets/editor_table.js":j5,"./assets/editor_underline.js":E5,"./assets/editor_undo.js":P5,"./assets/editor_unordered_list.js":k5,"./assets/email.js":C5,"./assets/empty.js":A5,"./assets/eql.js":M5,"./assets/eraser.js":T5,"./assets/exit.js":R5,"./assets/expand.js":z5,"./assets/expandMini.js":D5,"./assets/export.js":L5,"./assets/eye.js":N5,"./assets/eye_closed.js":F5,"./assets/face_happy.js":W5,"./assets/face_neutral.js":B5,"./assets/face_sad.js":H5,"./assets/filter.js":V5,"./assets/flag.js":q5,"./assets/fold.js":U5,"./assets/folder_check.js":$5,"./assets/folder_closed.js":J5,"./assets/folder_exclamation.js":G5,"./assets/folder_open.js":X5,"./assets/frameNext.js":K5,"./assets/framePrevious.js":Y5,"./assets/fullScreenExit.js":Q5,"./assets/full_screen.js":Z5,"./assets/function.js":e4,"./assets/gear.js":t4,"./assets/glasses.js":r4,"./assets/globe.js":n4,"./assets/grab.js":o4,"./assets/grab_horizontal.js":i4,"./assets/grid.js":a4,"./assets/heart.js":l4,"./assets/heatmap.js":s4,"./assets/help.js":u4,"./assets/home.js":c4,"./assets/iInCircle.js":p4,"./assets/image.js":f4,"./assets/import.js":d4,"./assets/index_close.js":m4,"./assets/index_edit.js":h4,"./assets/index_flush.js":g4,"./assets/index_mapping.js":v4,"./assets/index_open.js":y4,"./assets/index_runtime.js":b4,"./assets/index_settings.js":w4,"./assets/inputOutput.js":O4,"./assets/inspect.js":x4,"./assets/invert.js":_4,"./assets/ip.js":S4,"./assets/keyboard.js":I4,"./assets/kql_field.js":j4,"./assets/kql_function.js":E4,"./assets/kql_operand.js":P4,"./assets/kql_selector.js":k4,"./assets/kql_value.js":C4,"./assets/kubernetesNode.js":A4,"./assets/kubernetesPod.js":M4,"./assets/layers.js":T4,"./assets/lettering.js":R4,"./assets/lineDashed.js":z4,"./assets/lineDotted.js":D4,"./assets/lineSolid.js":L4,"./assets/link.js":N4,"./assets/list.js":F4,"./assets/list_add.js":W4,"./assets/lock.js":B4,"./assets/lockOpen.js":H4,"./assets/logo_aerospike.js":V4,"./assets/logo_apache.js":q4,"./assets/logo_app_search.js":U4,"./assets/logo_aws.js":$4,"./assets/logo_aws_mono.js":J4,"./assets/logo_azure.js":G4,"./assets/logo_azure_mono.js":X4,"./assets/logo_beats.js":K4,"./assets/logo_business_analytics.js":Y4,"./assets/logo_ceph.js":Q4,"./assets/logo_cloud.js":Z4,"./assets/logo_cloud_ece.js":e6,"./assets/logo_code.js":t6,"./assets/logo_codesandbox.js":r6,"./assets/logo_couchbase.js":n6,"./assets/logo_docker.js":o6,"./assets/logo_dropwizard.js":i6,"./assets/logo_elastic.js":a6,"./assets/logo_elastic_stack.js":l6,"./assets/logo_elasticsearch.js":s6,"./assets/logo_enterprise_search.js":u6,"./assets/logo_etcd.js":c6,"./assets/logo_gcp.js":p6,"./assets/logo_gcp_mono.js":f6,"./assets/logo_github.js":d6,"./assets/logo_gmail.js":m6,"./assets/logo_golang.js":h6,"./assets/logo_google_g.js":g6,"./assets/logo_haproxy.js":v6,"./assets/logo_ibm.js":y6,"./assets/logo_ibm_mono.js":b6,"./assets/logo_kafka.js":w6,"./assets/logo_kibana.js":O6,"./assets/logo_kubernetes.js":x6,"./assets/logo_logging.js":_6,"./assets/logo_logstash.js":S6,"./assets/logo_maps.js":I6,"./assets/logo_memcached.js":j6,"./assets/logo_metrics.js":E6,"./assets/logo_mongodb.js":P6,"./assets/logo_mysql.js":k6,"./assets/logo_nginx.js":C6,"./assets/logo_observability.js":A6,"./assets/logo_osquery.js":M6,"./assets/logo_php.js":T6,"./assets/logo_postgres.js":R6,"./assets/logo_prometheus.js":z6,"./assets/logo_rabbitmq.js":D6,"./assets/logo_redis.js":L6,"./assets/logo_security.js":N6,"./assets/logo_site_search.js":F6,"./assets/logo_sketch.js":W6,"./assets/logo_slack.js":B6,"./assets/logo_uptime.js":H6,"./assets/logo_webhook.js":V6,"./assets/logo_windows.js":q6,"./assets/logo_workplace_search.js":U6,"./assets/logstash_filter.js":$6,"./assets/logstash_if.js":J6,"./assets/logstash_input.js":G6,"./assets/logstash_output.js":X6,"./assets/logstash_queue.js":K6,"./assets/magnet.js":Y6,"./assets/magnifyWithExclamation.js":Q6,"./assets/magnifyWithMinus.js":Z6,"./assets/magnifyWithPlus.js":ew,"./assets/map_marker.js":tw,"./assets/memory.js":rw,"./assets/menu.js":nw,"./assets/menuDown.js":ow,"./assets/menuLeft.js":iw,"./assets/menuRight.js":aw,"./assets/menuUp.js":lw,"./assets/merge.js":sw,"./assets/minimize.js":uw,"./assets/minus.js":cw,"./assets/minus_in_circle.js":pw,"./assets/minus_in_circle_filled.js":fw,"./assets/ml_classification_job.js":dw,"./assets/ml_create_advanced_job.js":mw,"./assets/ml_create_multi_metric_job.js":hw,"./assets/ml_create_population_job.js":gw,"./assets/ml_create_single_metric_job.js":vw,"./assets/ml_data_visualizer.js":yw,"./assets/ml_outlier_detection_job.js":bw,"./assets/ml_regression_job.js":ww,"./assets/mobile.js":Ow,"./assets/moon.js":xw,"./assets/namespace.js":_w,"./assets/nested.js":Sw,"./assets/node.js":Iw,"./assets/number.js":jw,"./assets/offline.js":Ew,"./assets/online.js":Pw,"./assets/package.js":kw,"./assets/pageSelect.js":Cw,"./assets/pagesSelect.js":Aw,"./assets/paint.js":Mw,"./assets/paper_clip.js":Tw,"./assets/partial.js":Rw,"./assets/pause.js":zw,"./assets/payment.js":Dw,"./assets/pencil.js":Lw,"./assets/percent.js":Nw,"./assets/pin.js":Fw,"./assets/pin_filled.js":Ww,"./assets/play.js":Bw,"./assets/playFilled.js":Hw,"./assets/plus.js":Vw,"./assets/plus_in_circle.js":qw,"./assets/plus_in_circle_filled.js":Uw,"./assets/popout.js":$w,"./assets/push.js":Jw,"./assets/question_in_circle.js":Gw,"./assets/quote.js":Xw,"./assets/refresh.js":Kw,"./assets/reporter.js":Yw,"./assets/return_key.js":Qw,"./assets/save.js":Zw,"./assets/scale.js":eO,"./assets/search.js":tO,"./assets/securitySignal.js":rO,"./assets/securitySignalDetected.js":nO,"./assets/securitySignalResolved.js":oO,"./assets/sessionViewer.js":iO,"./assets/shard.js":aO,"./assets/share.js":lO,"./assets/snowflake.js":sO,"./assets/sortLeft.js":uO,"./assets/sortRight.js":cO,"./assets/sort_down.js":pO,"./assets/sort_up.js":fO,"./assets/sortable.js":dO,"./assets/starPlusEmpty.js":mO,"./assets/starPlusFilled.js":hO,"./assets/star_empty.js":gO,"./assets/star_empty_space.js":vO,"./assets/star_filled.js":yO,"./assets/star_filled_space.js":bO,"./assets/star_minus_empty.js":wO,"./assets/star_minus_filled.js":OO,"./assets/stats.js":xO,"./assets/stop.js":_O,"./assets/stop_filled.js":SO,"./assets/stop_slash.js":IO,"./assets/storage.js":jO,"./assets/string.js":EO,"./assets/submodule.js":PO,"./assets/sun.js":kO,"./assets/swatch_input.js":CO,"./assets/symlink.js":AO,"./assets/tableOfContents.js":MO,"./assets/table_density_compact.js":TO,"./assets/table_density_expanded.js":RO,"./assets/table_density_normal.js":zO,"./assets/tag.js":DO,"./assets/tear.js":LO,"./assets/temperature.js":NO,"./assets/timeRefresh.js":FO,"./assets/timeline.js":WO,"./assets/timeslider.js":BO,"./assets/tokenAlias.js":HO,"./assets/tokenAnnotation.js":VO,"./assets/tokenArray.js":qO,"./assets/tokenBinary.js":UO,"./assets/tokenBoolean.js":$O,"./assets/tokenClass.js":JO,"./assets/tokenCompletionSuggester.js":GO,"./assets/tokenConstant.js":XO,"./assets/tokenDate.js":KO,"./assets/tokenDenseVector.js":YO,"./assets/tokenElement.js":QO,"./assets/tokenEnum.js":ZO,"./assets/tokenEnumMember.js":e7,"./assets/tokenEvent.js":t7,"./assets/tokenException.js":r7,"./assets/tokenField.js":n7,"./assets/tokenFile.js":o7,"./assets/tokenFlattened.js":i7,"./assets/tokenFunction.js":a7,"./assets/tokenGeo.js":l7,"./assets/tokenHistogram.js":s7,"./assets/tokenIP.js":u7,"./assets/tokenInterface.js":c7,"./assets/tokenJoin.js":p7,"./assets/tokenKey.js":f7,"./assets/tokenKeyword.js":d7,"./assets/tokenMethod.js":m7,"./assets/tokenMetricCounter.js":h7,"./assets/tokenMetricGauge.js":g7,"./assets/tokenModule.js":v7,"./assets/tokenNamespace.js":y7,"./assets/tokenNested.js":b7,"./assets/tokenNull.js":w7,"./assets/tokenNumber.js":O7,"./assets/tokenObject.js":x7,"./assets/tokenOperator.js":_7,"./assets/tokenPackage.js":S7,"./assets/tokenParameter.js":I7,"./assets/tokenPercolator.js":j7,"./assets/tokenProperty.js":E7,"./assets/tokenRange.js":P7,"./assets/tokenRankFeature.js":k7,"./assets/tokenRankFeatures.js":C7,"./assets/tokenRepo.js":A7,"./assets/tokenSearchType.js":M7,"./assets/tokenShape.js":T7,"./assets/tokenString.js":R7,"./assets/tokenStruct.js":z7,"./assets/tokenSymbol.js":D7,"./assets/tokenTag.js":L7,"./assets/tokenText.js":N7,"./assets/tokenTokenCount.js":F7,"./assets/tokenVariable.js":W7,"./assets/training.js":B7,"./assets/trash.js":H7,"./assets/unfold.js":V7,"./assets/unlink.js":q7,"./assets/user.js":U7,"./assets/userAvatar.js":$7,"./assets/users.js":J7,"./assets/vector.js":G7,"./assets/videoPlayer.js":X7,"./assets/vis_area.js":K7,"./assets/vis_area_stacked.js":Y7,"./assets/vis_bar_horizontal.js":Q7,"./assets/vis_bar_horizontal_stacked.js":Z7,"./assets/vis_bar_vertical.js":ex,"./assets/vis_bar_vertical_stacked.js":tx,"./assets/vis_gauge.js":rx,"./assets/vis_goal.js":nx,"./assets/vis_line.js":ox,"./assets/vis_map_coordinate.js":ix,"./assets/vis_map_region.js":ax,"./assets/vis_metric.js":lx,"./assets/vis_pie.js":sx,"./assets/vis_table.js":ux,"./assets/vis_tag_cloud.js":cx,"./assets/vis_text.js":px,"./assets/vis_timelion.js":fx,"./assets/vis_vega.js":dx,"./assets/vis_visual_builder.js":mx,"./assets/wordWrap.js":hx,"./assets/wordWrapDisabled.js":gx,"./assets/wrench.js":vx,"./assets/accessibility":Y2,"./assets/aggregate":Q2,"./assets/alert":Z2,"./assets/analyzeEvent":eb,"./assets/analyze_event":tb,"./assets/annotation":rb,"./assets/apm_trace":nb,"./assets/app_add_data":ob,"./assets/app_advanced_settings":ib,"./assets/app_agent":ab,"./assets/app_apm":lb,"./assets/app_app_search":sb,"./assets/app_auditbeat":ub,"./assets/app_canvas":cb,"./assets/app_cases":pb,"./assets/app_code":fb,"./assets/app_console":db,"./assets/app_cross_cluster_replication":mb,"./assets/app_dashboard":hb,"./assets/app_devtools":gb,"./assets/app_discover":vb,"./assets/app_ems":yb,"./assets/app_filebeat":bb,"./assets/app_fleet":wb,"./assets/app_gis":Ob,"./assets/app_graph":xb,"./assets/app_grok":_b,"./assets/app_heartbeat":Sb,"./assets/app_index_management":Ib,"./assets/app_index_pattern":jb,"./assets/app_index_rollup":Eb,"./assets/app_lens":Pb,"./assets/app_logs":kb,"./assets/app_management":Cb,"./assets/app_metricbeat":Ab,"./assets/app_metrics":Mb,"./assets/app_ml":Tb,"./assets/app_monitoring":Rb,"./assets/app_notebook":zb,"./assets/app_packetbeat":Db,"./assets/app_pipeline":Lb,"./assets/app_recently_viewed":Nb,"./assets/app_reporting":Fb,"./assets/app_saved_objects":Wb,"./assets/app_search_profiler":Bb,"./assets/app_security":Hb,"./assets/app_security_analytics":Vb,"./assets/app_spaces":qb,"./assets/app_sql":Ub,"./assets/app_timelion":$b,"./assets/app_upgrade_assistant":Jb,"./assets/app_uptime":Gb,"./assets/app_users_roles":Xb,"./assets/app_visualize":Kb,"./assets/app_watches":Yb,"./assets/app_workplace_search":Qb,"./assets/apps":Zb,"./assets/arrowEnd":e3,"./assets/arrowStart":t3,"./assets/arrow_down":r3,"./assets/arrow_left":n3,"./assets/arrow_right":o3,"./assets/arrow_up":i3,"./assets/asterisk":a3,"./assets/beaker":l3,"./assets/bell":s3,"./assets/bellSlash":u3,"./assets/bolt":c3,"./assets/boxes_horizontal":p3,"./assets/boxes_vertical":f3,"./assets/branch":d3,"./assets/branchUser":m3,"./assets/broom":h3,"./assets/brush":g3,"./assets/bug":v3,"./assets/bullseye":y3,"./assets/calendar":b3,"./assets/check":w3,"./assets/checkInCircleFilled":O3,"./assets/cheer":x3,"./assets/clock":_3,"./assets/cloudDrizzle":S3,"./assets/cloudStormy":I3,"./assets/cloudSunny":j3,"./assets/cluster":E3,"./assets/color":P3,"./assets/compute":k3,"./assets/console":C3,"./assets/container":A3,"./assets/continuityAbove":M3,"./assets/continuityAboveBelow":T3,"./assets/continuityBelow":R3,"./assets/continuityWithin":z3,"./assets/controls_horizontal":D3,"./assets/controls_vertical":L3,"./assets/copy":N3,"./assets/copy_clipboard":F3,"./assets/cross":W3,"./assets/crossInACircleFilled":B3,"./assets/crosshairs":H3,"./assets/currency":V3,"./assets/cut":q3,"./assets/database":U3,"./assets/desktop":$3,"./assets/document":J3,"./assets/documentEdit":G3,"./assets/documentation":X3,"./assets/documents":K3,"./assets/dot":Y3,"./assets/doubleArrowLeft":Q3,"./assets/doubleArrowRight":Z3,"./assets/download":e5,"./assets/editorDistributeHorizontal":t5,"./assets/editorDistributeVertical":r5,"./assets/editorItemAlignBottom":n5,"./assets/editorItemAlignCenter":o5,"./assets/editorItemAlignLeft":i5,"./assets/editorItemAlignMiddle":a5,"./assets/editorItemAlignRight":l5,"./assets/editorItemAlignTop":s5,"./assets/editorPositionBottomLeft":u5,"./assets/editorPositionBottomRight":c5,"./assets/editorPositionTopLeft":p5,"./assets/editorPositionTopRight":f5,"./assets/editor_align_center":d5,"./assets/editor_align_left":m5,"./assets/editor_align_right":h5,"./assets/editor_bold":g5,"./assets/editor_checklist":v5,"./assets/editor_code_block":y5,"./assets/editor_comment":b5,"./assets/editor_heading":w5,"./assets/editor_italic":O5,"./assets/editor_link":x5,"./assets/editor_ordered_list":_5,"./assets/editor_redo":S5,"./assets/editor_strike":I5,"./assets/editor_table":j5,"./assets/editor_underline":E5,"./assets/editor_undo":P5,"./assets/editor_unordered_list":k5,"./assets/email":C5,"./assets/empty":A5,"./assets/eql":M5,"./assets/eraser":T5,"./assets/exit":R5,"./assets/expand":z5,"./assets/expandMini":D5,"./assets/export":L5,"./assets/eye":N5,"./assets/eye_closed":F5,"./assets/face_happy":W5,"./assets/face_neutral":B5,"./assets/face_sad":H5,"./assets/filter":V5,"./assets/flag":q5,"./assets/fold":U5,"./assets/folder_check":$5,"./assets/folder_closed":J5,"./assets/folder_exclamation":G5,"./assets/folder_open":X5,"./assets/frameNext":K5,"./assets/framePrevious":Y5,"./assets/fullScreenExit":Q5,"./assets/full_screen":Z5,"./assets/function":e4,"./assets/gear":t4,"./assets/glasses":r4,"./assets/globe":n4,"./assets/grab":o4,"./assets/grab_horizontal":i4,"./assets/grid":a4,"./assets/heart":l4,"./assets/heatmap":s4,"./assets/help":u4,"./assets/home":c4,"./assets/iInCircle":p4,"./assets/image":f4,"./assets/import":d4,"./assets/index_close":m4,"./assets/index_edit":h4,"./assets/index_flush":g4,"./assets/index_mapping":v4,"./assets/index_open":y4,"./assets/index_runtime":b4,"./assets/index_settings":w4,"./assets/inputOutput":O4,"./assets/inspect":x4,"./assets/invert":_4,"./assets/ip":S4,"./assets/keyboard":I4,"./assets/kql_field":j4,"./assets/kql_function":E4,"./assets/kql_operand":P4,"./assets/kql_selector":k4,"./assets/kql_value":C4,"./assets/kubernetesNode":A4,"./assets/kubernetesPod":M4,"./assets/layers":T4,"./assets/lettering":R4,"./assets/lineDashed":z4,"./assets/lineDotted":D4,"./assets/lineSolid":L4,"./assets/link":N4,"./assets/list":F4,"./assets/list_add":W4,"./assets/lock":B4,"./assets/lockOpen":H4,"./assets/logo_aerospike":V4,"./assets/logo_apache":q4,"./assets/logo_app_search":U4,"./assets/logo_aws":$4,"./assets/logo_aws_mono":J4,"./assets/logo_azure":G4,"./assets/logo_azure_mono":X4,"./assets/logo_beats":K4,"./assets/logo_business_analytics":Y4,"./assets/logo_ceph":Q4,"./assets/logo_cloud":Z4,"./assets/logo_cloud_ece":e6,"./assets/logo_code":t6,"./assets/logo_codesandbox":r6,"./assets/logo_couchbase":n6,"./assets/logo_docker":o6,"./assets/logo_dropwizard":i6,"./assets/logo_elastic":a6,"./assets/logo_elastic_stack":l6,"./assets/logo_elasticsearch":s6,"./assets/logo_enterprise_search":u6,"./assets/logo_etcd":c6,"./assets/logo_gcp":p6,"./assets/logo_gcp_mono":f6,"./assets/logo_github":d6,"./assets/logo_gmail":m6,"./assets/logo_golang":h6,"./assets/logo_google_g":g6,"./assets/logo_haproxy":v6,"./assets/logo_ibm":y6,"./assets/logo_ibm_mono":b6,"./assets/logo_kafka":w6,"./assets/logo_kibana":O6,"./assets/logo_kubernetes":x6,"./assets/logo_logging":_6,"./assets/logo_logstash":S6,"./assets/logo_maps":I6,"./assets/logo_memcached":j6,"./assets/logo_metrics":E6,"./assets/logo_mongodb":P6,"./assets/logo_mysql":k6,"./assets/logo_nginx":C6,"./assets/logo_observability":A6,"./assets/logo_osquery":M6,"./assets/logo_php":T6,"./assets/logo_postgres":R6,"./assets/logo_prometheus":z6,"./assets/logo_rabbitmq":D6,"./assets/logo_redis":L6,"./assets/logo_security":N6,"./assets/logo_site_search":F6,"./assets/logo_sketch":W6,"./assets/logo_slack":B6,"./assets/logo_uptime":H6,"./assets/logo_webhook":V6,"./assets/logo_windows":q6,"./assets/logo_workplace_search":U6,"./assets/logstash_filter":$6,"./assets/logstash_if":J6,"./assets/logstash_input":G6,"./assets/logstash_output":X6,"./assets/logstash_queue":K6,"./assets/magnet":Y6,"./assets/magnifyWithExclamation":Q6,"./assets/magnifyWithMinus":Z6,"./assets/magnifyWithPlus":ew,"./assets/map_marker":tw,"./assets/memory":rw,"./assets/menu":nw,"./assets/menuDown":ow,"./assets/menuLeft":iw,"./assets/menuRight":aw,"./assets/menuUp":lw,"./assets/merge":sw,"./assets/minimize":uw,"./assets/minus":cw,"./assets/minus_in_circle":pw,"./assets/minus_in_circle_filled":fw,"./assets/ml_classification_job":dw,"./assets/ml_create_advanced_job":mw,"./assets/ml_create_multi_metric_job":hw,"./assets/ml_create_population_job":gw,"./assets/ml_create_single_metric_job":vw,"./assets/ml_data_visualizer":yw,"./assets/ml_outlier_detection_job":bw,"./assets/ml_regression_job":ww,"./assets/mobile":Ow,"./assets/moon":xw,"./assets/namespace":_w,"./assets/nested":Sw,"./assets/node":Iw,"./assets/number":jw,"./assets/offline":Ew,"./assets/online":Pw,"./assets/package":kw,"./assets/pageSelect":Cw,"./assets/pagesSelect":Aw,"./assets/paint":Mw,"./assets/paper_clip":Tw,"./assets/partial":Rw,"./assets/pause":zw,"./assets/payment":Dw,"./assets/pencil":Lw,"./assets/percent":Nw,"./assets/pin":Fw,"./assets/pin_filled":Ww,"./assets/play":Bw,"./assets/playFilled":Hw,"./assets/plus":Vw,"./assets/plus_in_circle":qw,"./assets/plus_in_circle_filled":Uw,"./assets/popout":$w,"./assets/push":Jw,"./assets/question_in_circle":Gw,"./assets/quote":Xw,"./assets/refresh":Kw,"./assets/reporter":Yw,"./assets/return_key":Qw,"./assets/save":Zw,"./assets/scale":eO,"./assets/search":tO,"./assets/securitySignal":rO,"./assets/securitySignalDetected":nO,"./assets/securitySignalResolved":oO,"./assets/sessionViewer":iO,"./assets/shard":aO,"./assets/share":lO,"./assets/snowflake":sO,"./assets/sortLeft":uO,"./assets/sortRight":cO,"./assets/sort_down":pO,"./assets/sort_up":fO,"./assets/sortable":dO,"./assets/starPlusEmpty":mO,"./assets/starPlusFilled":hO,"./assets/star_empty":gO,"./assets/star_empty_space":vO,"./assets/star_filled":yO,"./assets/star_filled_space":bO,"./assets/star_minus_empty":wO,"./assets/star_minus_filled":OO,"./assets/stats":xO,"./assets/stop":_O,"./assets/stop_filled":SO,"./assets/stop_slash":IO,"./assets/storage":jO,"./assets/string":EO,"./assets/submodule":PO,"./assets/sun":kO,"./assets/swatch_input":CO,"./assets/symlink":AO,"./assets/tableOfContents":MO,"./assets/table_density_compact":TO,"./assets/table_density_expanded":RO,"./assets/table_density_normal":zO,"./assets/tag":DO,"./assets/tear":LO,"./assets/temperature":NO,"./assets/timeRefresh":FO,"./assets/timeline":WO,"./assets/timeslider":BO,"./assets/tokenAlias":HO,"./assets/tokenAnnotation":VO,"./assets/tokenArray":qO,"./assets/tokenBinary":UO,"./assets/tokenBoolean":$O,"./assets/tokenClass":JO,"./assets/tokenCompletionSuggester":GO,"./assets/tokenConstant":XO,"./assets/tokenDate":KO,"./assets/tokenDenseVector":YO,"./assets/tokenElement":QO,"./assets/tokenEnum":ZO,"./assets/tokenEnumMember":e7,"./assets/tokenEvent":t7,"./assets/tokenException":r7,"./assets/tokenField":n7,"./assets/tokenFile":o7,"./assets/tokenFlattened":i7,"./assets/tokenFunction":a7,"./assets/tokenGeo":l7,"./assets/tokenHistogram":s7,"./assets/tokenIP":u7,"./assets/tokenInterface":c7,"./assets/tokenJoin":p7,"./assets/tokenKey":f7,"./assets/tokenKeyword":d7,"./assets/tokenMethod":m7,"./assets/tokenMetricCounter":h7,"./assets/tokenMetricGauge":g7,"./assets/tokenModule":v7,"./assets/tokenNamespace":y7,"./assets/tokenNested":b7,"./assets/tokenNull":w7,"./assets/tokenNumber":O7,"./assets/tokenObject":x7,"./assets/tokenOperator":_7,"./assets/tokenPackage":S7,"./assets/tokenParameter":I7,"./assets/tokenPercolator":j7,"./assets/tokenProperty":E7,"./assets/tokenRange":P7,"./assets/tokenRankFeature":k7,"./assets/tokenRankFeatures":C7,"./assets/tokenRepo":A7,"./assets/tokenSearchType":M7,"./assets/tokenShape":T7,"./assets/tokenString":R7,"./assets/tokenStruct":z7,"./assets/tokenSymbol":D7,"./assets/tokenTag":L7,"./assets/tokenText":N7,"./assets/tokenTokenCount":F7,"./assets/tokenVariable":W7,"./assets/training":B7,"./assets/trash":H7,"./assets/unfold":V7,"./assets/unlink":q7,"./assets/user":U7,"./assets/userAvatar":$7,"./assets/users":J7,"./assets/vector":G7,"./assets/videoPlayer":X7,"./assets/vis_area":K7,"./assets/vis_area_stacked":Y7,"./assets/vis_bar_horizontal":Q7,"./assets/vis_bar_horizontal_stacked":Z7,"./assets/vis_bar_vertical":ex,"./assets/vis_bar_vertical_stacked":tx,"./assets/vis_gauge":rx,"./assets/vis_goal":nx,"./assets/vis_line":ox,"./assets/vis_map_coordinate":ix,"./assets/vis_map_region":ax,"./assets/vis_metric":lx,"./assets/vis_pie":sx,"./assets/vis_table":ux,"./assets/vis_tag_cloud":cx,"./assets/vis_text":px,"./assets/vis_timelion":fx,"./assets/vis_vega":dx,"./assets/vis_visual_builder":mx,"./assets/wordWrap":hx,"./assets/wordWrapDisabled":gx,"./assets/wrench":vx};function txt(e){let t=ext[e];return t[Symbol.toStringTag]="Module",Promise.resolve(t)}function tP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?tP=function(n){return typeof n}:tP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},tP(e)}var rxt=["type","size","color","className","tabIndex","title","onIconLoad","theme","style"];function oP(){return oP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ixt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function axt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function P1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iP(e){return iP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iP(e)}function nP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var fxt=function(t){return typeof t!="string"?!1:t==="dataVisualizer"?!0:t.indexOf("data:")===0?!1:t.endsWith("App")||t.endsWith("Job")},dxt=kt(eP);function FG(e){return typeof e=="string"&&eP.hasOwnProperty(e)}function mxt(e){if(e!=null)return FG(e)?Z1.hasOwnProperty(e)?Z1[e]:void 0:e}var hxt=_r(),Z1={};var A1e=function(e){sxt(n,e);var t=uxt(n);function n(r){var o;axt(this,n),o=t.call(this,r),nP(rP(o),"isMounted",!0),nP(rP(o),"loadIconComponent",function(c){if(Z1.hasOwnProperty(c)){o.setState({isLoading:!1,neededLoading:!1,icon:Z1[c]}),o.onIconLoad();return}txt(`./assets/${eP[c]}`).then(function(d){var g=d.icon;Z1[c]=g,bx(function(){o.isMounted&&o.props.type===c&&o.setState({icon:g,iconTitle:c,isLoading:!1},o.onIconLoad)})})}),nP(rP(o),"onIconLoad",function(){var c=o.props.onIconLoad;c&&c()});var i=r.type,u=mxt(i);return o.state={icon:u,iconTitle:void 0,isLoading:!1,neededLoading:!1},o}return lxt(n,[{key:"componentDidMount",value:function(){var o=this.props.type;FG(o)&&this.state.icon==null?(this.setState({neededLoading:!0,isLoading:!0}),this.loadIconComponent(o)):this.onIconLoad()}},{key:"componentDidUpdate",value:function(o){var i=this.props.type;i!==o.type&&(FG(i)?(this.setState({neededLoading:Z1.hasOwnProperty(i),isLoading:!0}),this.loadIconComponent(i)):this.setState({icon:i,neededLoading:!0,isLoading:!1}))}},{key:"componentWillUnmount",value:function(){this.isMounted=!1}},{key:"render",value:function(){var o=this.props,i=o.type,u=o.size,c=u===void 0?"m":u,d=o.color,g=o.className,O=o.tabIndex,S=o.title,I=o.onIconLoad,R=o.theme,k=o.style,A=oxt(o,rxt),M=this.state,T=M.isLoading,N=M.neededLoading,U=M.iconTitle,X=!T&&N,Y=d&&!LG(d),K=Y?nxt({color:d},k):k,H=fxt(i),ne=d&&d!=="default",pe=i==="logoElastic"&&(d==="ghost"||d==="text"),ye=(0,C1e.default)("euiIcon",g),fe=j1e(R),ue=[fe.euiIcon,fe[c],d&&LG(d)&&fe[d],Y&&fe.customColor,pe&&fe.logoElasticOutline,H&&!ne&&fe.app,T&&fe.isLoading,!T&&N&&fe.isLoaded],xe=this.state.icon||ZE,me=O==null||O===-1?"false":"true";if(typeof xe=="string")return a("img",oP({alt:S||"",src:xe,className:ye,css:ue,tabIndex:O},A));var We=xe,$e=xe===ZE||!(this.props["aria-label"]||this.props["aria-labelledby"]||this.props.title),Ge=$e&&{"aria-hidden":!0},Be;return!this.props["aria-label"]&&!this.props["aria-labelledby"]&&S&&(Be={titleId:hxt()}),a(We,oP({className:ye,style:K,css:ue,tabIndex:O,focusable:me,role:"img",title:S,"data-icon-type":U,"data-is-loaded":X||void 0,"data-is-loading":T||void 0},Be,A,Ge))}}]),n}(k1e.PureComponent);A1e.propTypes={className:ji.default.string,"aria-label":ji.default.string,"data-test-subj":ji.default.string,type:ji.default.oneOfType([ji.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ji.default.string.isRequired,ji.default.elementType.isRequired]).isRequired,color:ji.default.oneOfType([ji.default.string.isRequired,ji.default.any.isRequired]),size:ji.default.any,title:ji.default.string,titleId:ji.default.string,"aria-labelledby":ji.default.string,onIconLoad:ji.default.func};var Wt=_F(A1e);var eh=E(D());var M1e=E(D()),Zu=E(rt());var aP=(0,M1e.createContext)({}),gxt=aP.Provider,WG=aP.Consumer,T1e=function(t){var n=t.i18n,r=n===void 0?{}:n,o=t.children;return a(gxt,{value:r},o)};T1e.propTypes={i18n:Zu.default.shape({mapping:Zu.default.shape({}),mappingFunc:Zu.default.func,render:Zu.default.func,formatNumber:Zu.default.func,formatDateTime:Zu.default.func,locale:Zu.default.string}).isRequired,children:Zu.default.node.isRequired};var V1e=E(D());var q1e=E(B1e());function uP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?uP=function(n){return typeof n}:uP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},uP(e)}function Ext(e){return LE(e)||Hi(e)||NE(e)||QF(e)}function H1e(e){return e?uP(e)==="object"&&e.hasOwnProperty("propName"):!1}function U1e(e,t,n){var r=[],o;function i(k){o===void 0?o=k:typeof o=="string"?o=o+k:H1e(o)&&(o.propName=o.propName+k)}function u(k){k!==void 0&&((0,q1e.isElement)(k)?r.push((0,V1e.cloneElement)(k,{key:r.length})):H1e(k)||(n!==void 0&&typeof k=="string"&&(k=n(k)),r.push(k)))}for(var c=!1,d=0;de.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function gxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function T1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function aP(e){return aP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},aP(e)}function oP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xxt=function(t){return typeof t!="string"?!1:t==="dataVisualizer"?!0:t.indexOf("data:")===0?!1:t.endsWith("App")||t.endsWith("Job")},_xt=kt(tP);function qG(e){return typeof e=="string"&&tP.hasOwnProperty(e)}function Sxt(e){if(e!=null)return qG(e)?rh.hasOwnProperty(e)?rh[e]:void 0:e}var Ixt=_r(),rh={};var D1e=function(e){yxt(n,e);var t=bxt(n);function n(r){var o;gxt(this,n),o=t.call(this,r),oP(nP(o),"isMounted",!0),oP(nP(o),"loadIconComponent",function(c){if(rh.hasOwnProperty(c)){o.setState({isLoading:!1,neededLoading:!1,icon:rh[c]}),o.onIconLoad();return}pxt(`./assets/${tP[c]}`).then(function(d){var g=d.icon;rh[c]=g,Ox(function(){o.isMounted&&o.props.type===c&&o.setState({icon:g,iconTitle:c,isLoading:!1},o.onIconLoad)})})}),oP(nP(o),"onIconLoad",function(){var c=o.props.onIconLoad;c&&c()});var i=r.type,u=Sxt(i);return o.state={icon:u,iconTitle:void 0,isLoading:!1,neededLoading:!1},o}return vxt(n,[{key:"componentDidMount",value:function(){var o=this.props.type;qG(o)&&this.state.icon==null?(this.setState({neededLoading:!0,isLoading:!0}),this.loadIconComponent(o)):this.onIconLoad()}},{key:"componentDidUpdate",value:function(o){var i=this.props.type;i!==o.type&&(qG(i)?(this.setState({neededLoading:rh.hasOwnProperty(i),isLoading:!0}),this.loadIconComponent(i)):this.setState({icon:i,neededLoading:!0,isLoading:!1}))}},{key:"componentWillUnmount",value:function(){this.isMounted=!1}},{key:"render",value:function(){var o=this.props,i=o.type,u=o.size,c=u===void 0?"m":u,d=o.color,g=o.className,O=o.tabIndex,S=o.title,I=o.onIconLoad,R=o.theme,k=o.style,M=mxt(o,fxt),C=this.state,T=C.isLoading,D=C.neededLoading,U=C.iconTitle,G=!T&&D,Y=d&&!HG(d),K=Y?dxt({color:d},k):k,B=xxt(i),ne=d&&d!=="default",pe=i==="logoElastic"&&(d==="ghost"||d==="text"),ve=(0,z1e.default)("euiIcon",g),de=A1e(R),ue=[de.euiIcon,de[c],d&&HG(d)&&de[d],Y&&de.customColor,pe&&de.logoElasticOutline,B&&!ne&&de.app,T&&de.isLoading,!T&&D&&de.isLoaded],ye=this.state.icon||eP,be=O==null||O===-1?"false":"true";if(typeof ye=="string")return a("img",iP({alt:S||"",src:ye,className:ve,css:ue,tabIndex:O},M));var ze=ye,He=ye===eP||!(this.props["aria-label"]||this.props["aria-labelledby"]||this.props.title),Qe=He&&{"aria-hidden":!0},Be;return!this.props["aria-label"]&&!this.props["aria-labelledby"]&&S&&(Be={titleId:Ixt()}),a(ze,iP({className:ve,style:K,css:ue,tabIndex:O,focusable:be,role:"img",title:S,"data-icon-type":U,"data-is-loaded":G||void 0,"data-is-loading":T||void 0},Be,M,Qe))}}]),n}(R1e.PureComponent);D1e.propTypes={className:ji.default.string,"aria-label":ji.default.string,"data-test-subj":ji.default.string,type:ji.default.oneOfType([ji.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ji.default.string.isRequired,ji.default.elementType.isRequired]).isRequired,color:ji.default.oneOfType([ji.default.string.isRequired,ji.default.any.isRequired]),size:ji.default.any,title:ji.default.string,titleId:ji.default.string,"aria-labelledby":ji.default.string,onIconLoad:ji.default.func};var Nt=PF(D1e);var nh=E(L());var L1e=E(L()),ec=E(rt());var lP=(0,L1e.createContext)({}),jxt=lP.Provider,UG=lP.Consumer,N1e=function(t){var n=t.i18n,r=n===void 0?{}:n,o=t.children;return a(jxt,{value:r},o)};N1e.propTypes={i18n:ec.default.shape({mapping:ec.default.shape({}),mappingFunc:ec.default.func,render:ec.default.func,formatNumber:ec.default.func,formatDateTime:ec.default.func,locale:ec.default.string}).isRequired,children:ec.default.node.isRequired};var G1e=E(L());var X1e=E($1e());function cP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?cP=function(n){return typeof n}:cP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},cP(e)}function Lxt(e){return NE(e)||Hi(e)||FE(e)||nW(e)}function J1e(e){return e?cP(e)==="object"&&e.hasOwnProperty("propName"):!1}function K1e(e,t,n){var r=[],o;function i(k){o===void 0?o=k:typeof o=="string"?o=o+k:J1e(o)&&(o.propName=o.propName+k)}function u(k){k!==void 0&&((0,X1e.isElement)(k)?r.push((0,G1e.cloneElement)(k,{key:r.length})):J1e(k)||(n!==void 0&&typeof k=="string"&&(k=n(k)),r.push(k)))}for(var c=!1,d=0;de.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zt=function(t){var n=t.size,r=n===void 0?"m":n,o=t.className,i=t["aria-label"],u=t.color,c=Fxt(t,Nxt),d=cr(),g=X1e(d,u),O=[g.euiLoadingSpinner,g[r]],S=(0,K1e.default)("euiLoadingSpinner",o),I=J1e();return a("span",HG({className:S,css:O,role:"progressbar","aria-label":i||I},c))};Zt.propTypes={className:Kp.default.string,"aria-label":Kp.default.string,"data-test-subj":Kp.default.string,size:Kp.default.any,color:Kp.default.shape({border:Kp.default.any,highlight:Kp.default.any})};var Bxt=["children","textProps","isLoading","iconType","iconSize","iconSide"];function VG(){return VG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q1e={left:null,right:"euiButtonContent--iconRight"},qgr=kt(Q1e),Mx=function(t){var n=t.children,r=t.textProps,o=t.isLoading,i=o===void 0?!1:o,u=t.iconType,c=t.iconSize,d=c===void 0?"m":c,g=t.iconSide,O=g===void 0?"left":g,S=Hxt(t,Bxt),I;i?I=a(Zt,{className:"euiButtonContent__spinner",size:d}):u&&(I=a(Wt,{className:"euiButtonContent__icon",type:u,size:d,color:"inherit"}));var R=(0,Y1e.default)("euiButtonContent",O?Q1e[O]:null,S&&S.className);return a("span",VG({},S,{className:R}),I,a("span",r,n))};Mx.propTypes={iconType:oi.default.oneOfType([oi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,oi.default.string.isRequired,oi.default.elementType.isRequired]),iconSide:oi.default.oneOf(["left","right"]),isLoading:oi.default.bool,textProps:oi.default.shape({className:oi.default.string,"aria-label":oi.default.string,"data-test-subj":oi.default.string,ref:oi.default.any,"data-text":oi.default.string}),iconSize:oi.default.oneOf(["s","m"]),className:oi.default.string,"aria-label":oi.default.string,"data-test-subj":oi.default.string};var fhe=E(phe());function Ei(e){var t=new fhe.default(e);return t.protocol!=="javascript:"}var t8t=["isDisabled","disabled","href","target","rel","type","buttonRef"],r8t=["element","baseClassName","children","className","iconType","iconSide","color","size","fill","isDisabled","isLoading","isSelected","contentProps","textProps","fullWidth","minWidth","style"];function mP(){return mP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dP={primary:"--primary",accent:"--accent",success:"--success",warning:"--warning",danger:"--danger",ghost:"--ghost",text:"--text"},i8t=kt(dP),JG={s:"--small",m:null},tvr=kt(JG),Tx=function(t){var n=t.isDisabled,r=t.disabled,o=t.href,i=t.target,u=t.rel,c=t.type,d=c===void 0?"button":c,g=t.buttonRef,O=mhe(t,t8t),S=!o||Ei(o),I=r||!S,R=n||!S,k=O.isLoading||R||I,A=o&&!R?"a":"button",M={};M=ec(ec({},M),{},{isDisabled:k}),A==="button"&&(M=ec(ec({},M),{},{disabled:k}));var T={};return o&&!k?(T.href=o,T.rel=yo({href:o,target:i,rel:u}),T.target=i):T.type=d,a(GG,mP({element:A,baseClassName:"euiButton",ref:g},M,T,O))};Tx.propTypes={href:Rt.default.string,onClick:Rt.default.func,children:Rt.default.node,fill:Rt.default.bool,color:Rt.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:Rt.default.oneOf(["s","m"]),isDisabled:Rt.default.bool,isSelected:Rt.default.bool,fullWidth:Rt.default.bool,minWidth:Rt.default.any,isLoading:Rt.default.bool,contentProps:Rt.default.any,style:Rt.default.any,iconType:Rt.default.oneOfType([Rt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Rt.default.string.isRequired,Rt.default.elementType.isRequired]),iconSide:Rt.default.oneOf(["left","right"]),textProps:Rt.default.shape({className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,ref:Rt.default.any,"data-text":Rt.default.string}),iconSize:Rt.default.oneOf(["s","m"]),className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,buttonRef:Rt.default.any};Tx.displayName="EuiButton";var GG=(0,hP.forwardRef)(function(e,t){var n=e.element,r=n===void 0?"button":n,o=e.baseClassName,i=e.children,u=e.className,c=e.iconType,d=e.iconSide,g=d===void 0?"left":d,O=e.color,S=O===void 0?"primary":O,I=e.size,R=I===void 0?"m":I,k=e.fill,A=k===void 0?!1:k,M=e.isDisabled,T=e.isLoading,N=e.isSelected,U=e.contentProps,X=e.textProps,Y=e.fullWidth,K=e.minWidth,H=e.style,ne=mhe(e,r8t),pe=T||M,ye=(0,fP.default)(o,S&&dP[S]?"".concat(o).concat(dP[S]):"".concat(o).concat(dP.primary),R&&JG[R]?"".concat(o).concat(JG[R]):null,A&&"".concat(o,"--fill"),Y&&"".concat(o,"--fullWidth"),pe&&"".concat(o,"-isDisabled"),u),fe=(0,fP.default)("euiButton__content",U&&U.className),ue=(0,fP.default)("euiButton__text",X&&X.className),xe=a(Mx,mP({isLoading:T,iconType:c,iconSide:g,textProps:ec(ec({},X),{},{className:ue})},U,{className:fe}),i),me=H;return(K!==void 0||K!==null)&&(me=ec(ec({},me),{},{minWidth:K})),hP.default.createElement(r,ec({className:ye,style:me,disabled:r==="button"&&pe,"aria-pressed":r==="button"?N:void 0,ref:t},ne),xe)});GG.propTypes={children:Rt.default.node,fill:Rt.default.bool,color:Rt.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:Rt.default.oneOf(["s","m"]),isDisabled:Rt.default.bool,isSelected:Rt.default.bool,fullWidth:Rt.default.bool,minWidth:Rt.default.any,isLoading:Rt.default.bool,contentProps:Rt.default.any,style:Rt.default.any,iconType:Rt.default.oneOfType([Rt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Rt.default.string.isRequired,Rt.default.elementType.isRequired]),iconSide:Rt.default.oneOf(["left","right"]),textProps:Rt.default.shape({className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,ref:Rt.default.any,"data-text":Rt.default.string}),iconSize:Rt.default.oneOf(["s","m"]),className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,element:Rt.default.oneOf(["a","button","span","label"]).isRequired,baseClassName:Rt.default.string.isRequired};GG.displayName="EuiButtonDisplay";var xP=E(D());var ghe=E(D());function gP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?gP=function(n){return typeof n}:gP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},gP(e)}function a8t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hhe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vP(e){return vP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},vP(e)}function Rx(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yP=function(e){s8t(n,e);var t=u8t(n);function n(){var r;a8t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function OP(e){return OP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},OP(e)}function bP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v8t=typeof window<"u"&&typeof window.ResizeObserver<"u",Dx=function(e){d8t(n,e);var t=m8t(n);function n(){var r;f8t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zt=function(t){var n=t.size,r=n===void 0?"m":n,o=t.className,i=t["aria-label"],u=t.color,c=Xxt(t,Gxt),d=cr(),g=ehe(d,u),O=[g.euiLoadingSpinner,g[r]],S=(0,the.default)("euiLoadingSpinner",o),I=Q1e();return a("span",JG({className:S,css:O,role:"progressbar","aria-label":i||I},c))};Zt.propTypes={className:Qp.default.string,"aria-label":Qp.default.string,"data-test-subj":Qp.default.string,size:Qp.default.any,color:Qp.default.shape({border:Qp.default.any,highlight:Qp.default.any})};var Yxt=["children","textProps","isLoading","iconType","iconSize","iconSide"];function GG(){return GG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nhe={left:null,right:"euiButtonContent--iconRight"},tvr=kt(nhe),Rx=function(t){var n=t.children,r=t.textProps,o=t.isLoading,i=o===void 0?!1:o,u=t.iconType,c=t.iconSize,d=c===void 0?"m":c,g=t.iconSide,O=g===void 0?"left":g,S=Qxt(t,Yxt),I;i?I=a(Zt,{className:"euiButtonContent__spinner",size:d}):u&&(I=a(Nt,{className:"euiButtonContent__icon",type:u,size:d,color:"inherit"}));var R=(0,rhe.default)("euiButtonContent",O?nhe[O]:null,S&&S.className);return a("span",GG({},S,{className:R}),I,a("span",r,n))};Rx.propTypes={iconType:oi.default.oneOfType([oi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,oi.default.string.isRequired,oi.default.elementType.isRequired]),iconSide:oi.default.oneOf(["left","right"]),isLoading:oi.default.bool,textProps:oi.default.shape({className:oi.default.string,"aria-label":oi.default.string,"data-test-subj":oi.default.string,ref:oi.default.any,"data-text":oi.default.string}),iconSize:oi.default.oneOf(["s","m"]),className:oi.default.string,"aria-label":oi.default.string,"data-test-subj":oi.default.string};var vhe=E(ghe());function Ei(e){var t=new vhe.default(e);return t.protocol!=="javascript:"}var p8t=["isDisabled","disabled","href","target","rel","type","buttonRef"],f8t=["element","baseClassName","children","className","iconType","iconSide","color","size","fill","isDisabled","isLoading","isSelected","contentProps","textProps","fullWidth","minWidth","style"];function hP(){return hP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mP={primary:"--primary",accent:"--accent",success:"--success",warning:"--warning",danger:"--danger",ghost:"--ghost",text:"--text"},h8t=kt(mP),QG={s:"--small",m:null},fvr=kt(QG),zx=function(t){var n=t.isDisabled,r=t.disabled,o=t.href,i=t.target,u=t.rel,c=t.type,d=c===void 0?"button":c,g=t.buttonRef,O=bhe(t,p8t),S=!o||Ei(o),I=r||!S,R=n||!S,k=O.isLoading||R||I,M=o&&!R?"a":"button",C={};C=tc(tc({},C),{},{isDisabled:k}),M==="button"&&(C=tc(tc({},C),{},{disabled:k}));var T={};return o&&!k?(T.href=o,T.rel=bo({href:o,target:i,rel:u}),T.target=i):T.type=d,a(ZG,hP({element:M,baseClassName:"euiButton",ref:g},C,T,O))};zx.propTypes={href:Rt.default.string,onClick:Rt.default.func,children:Rt.default.node,fill:Rt.default.bool,color:Rt.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:Rt.default.oneOf(["s","m"]),isDisabled:Rt.default.bool,isSelected:Rt.default.bool,fullWidth:Rt.default.bool,minWidth:Rt.default.any,isLoading:Rt.default.bool,contentProps:Rt.default.any,style:Rt.default.any,iconType:Rt.default.oneOfType([Rt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Rt.default.string.isRequired,Rt.default.elementType.isRequired]),iconSide:Rt.default.oneOf(["left","right"]),textProps:Rt.default.shape({className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,ref:Rt.default.any,"data-text":Rt.default.string}),iconSize:Rt.default.oneOf(["s","m"]),className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,buttonRef:Rt.default.any};zx.displayName="EuiButton";var ZG=(0,gP.forwardRef)(function(e,t){var n=e.element,r=n===void 0?"button":n,o=e.baseClassName,i=e.children,u=e.className,c=e.iconType,d=e.iconSide,g=d===void 0?"left":d,O=e.color,S=O===void 0?"primary":O,I=e.size,R=I===void 0?"m":I,k=e.fill,M=k===void 0?!1:k,C=e.isDisabled,T=e.isLoading,D=e.isSelected,U=e.contentProps,G=e.textProps,Y=e.fullWidth,K=e.minWidth,B=e.style,ne=bhe(e,f8t),pe=T||C,ve=(0,dP.default)(o,S&&mP[S]?"".concat(o).concat(mP[S]):"".concat(o).concat(mP.primary),R&&QG[R]?"".concat(o).concat(QG[R]):null,M&&"".concat(o,"--fill"),Y&&"".concat(o,"--fullWidth"),pe&&"".concat(o,"-isDisabled"),u),de=(0,dP.default)("euiButton__content",U&&U.className),ue=(0,dP.default)("euiButton__text",G&&G.className),ye=a(Rx,hP({isLoading:T,iconType:c,iconSide:g,textProps:tc(tc({},G),{},{className:ue})},U,{className:de}),i),be=B;return(K!==void 0||K!==null)&&(be=tc(tc({},be),{},{minWidth:K})),gP.default.createElement(r,tc({className:ve,style:be,disabled:r==="button"&&pe,"aria-pressed":r==="button"?D:void 0,ref:t},ne),ye)});ZG.propTypes={children:Rt.default.node,fill:Rt.default.bool,color:Rt.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:Rt.default.oneOf(["s","m"]),isDisabled:Rt.default.bool,isSelected:Rt.default.bool,fullWidth:Rt.default.bool,minWidth:Rt.default.any,isLoading:Rt.default.bool,contentProps:Rt.default.any,style:Rt.default.any,iconType:Rt.default.oneOfType([Rt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Rt.default.string.isRequired,Rt.default.elementType.isRequired]),iconSide:Rt.default.oneOf(["left","right"]),textProps:Rt.default.shape({className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,ref:Rt.default.any,"data-text":Rt.default.string}),iconSize:Rt.default.oneOf(["s","m"]),className:Rt.default.string,"aria-label":Rt.default.string,"data-test-subj":Rt.default.string,element:Rt.default.oneOf(["a","button","span","label"]).isRequired,baseClassName:Rt.default.string.isRequired};ZG.displayName="EuiButtonDisplay";var _P=E(L());var Ohe=E(L());function vP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?vP=function(n){return typeof n}:vP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},vP(e)}function g8t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function whe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function yP(e){return yP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},yP(e)}function Dx(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var bP=function(e){y8t(n,e);var t=b8t(n);function n(){var r;g8t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function xP(e){return xP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},xP(e)}function wP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var E8t=typeof window<"u"&&typeof window.ResizeObserver<"u",Nx=function(e){_8t(n,e);var t=S8t(n);function n(){var r;x8t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u1&&arguments[1]!==void 0?arguments[1]:"m",r=arguments.length>2?arguments[2]:void 0,o=t.euiTheme,i={xxxs:"xs",xxs:"s",xs:"m",s:"l",m:"xl",l:"xxl"};return bhe(bhe({},jl(t,i[n],r)),{},{fontWeight:o.font.weight[o.font.title.weight],color:o.colors.title})};var _8t={name:"1x2qsb1-uppercase",styles:"text-transform:uppercase;label:uppercase;"},whe=function(t){return{euiTitle:Oe(O1e()," &+&{margin-top:",t.euiTheme.size.l,";};label:euiTitle;"),uppercase:_8t,xxxs:Oe(ko(t,"xxxs"),";;label:xxxs;"),xxs:Oe(ko(t,"xxs"),";;label:xxs;"),xs:Oe(ko(t,"xs"),";;label:xs;"),s:Oe(ko(t,"s"),";;label:s;"),m:Oe(ko(t,"m"),";;label:m;"),l:Oe(ko(t,"l"),";;label:l;")}};var S8t="max(64ch, 75%)",I8t=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{color:n?"inherit":t.colors.text,fontWeight:t.font.weight.regular}},_P=function(t,n){var r=jl(t,"m",n),o=r.fontSize,i=r.lineHeight,u=t.euiTheme,c=n.measurement,d=n.customScale,g=c==="em"?"".concat(i,"em"):i,O={h1:ko(t,"l",n),h2:ko(t,"m",n),h3:ko(t,"s",n),h4:ko(t,"xs",n),h5:ko(t,"xxs",n),h6:ko(t,"xxxs",n)},S=d==="xxxs"?"xxs":d||"m",I="".concat(parseFloat(u.size[S])*2,"px"),R=u.size[S];return` + `)},A8t={name:"9njbi5-disabled",styles:"font-weight:inherit;&:hover{cursor:auto;}&:hover,&:focus,&:target{text-decoration:none;};label:disabled;"},xhe=function(t){var n=t.euiTheme;return{euiLink:xe(rX(n)," user-select:text;&[target='_blank']{position:relative;};label:euiLink;"),disabled:A8t,primary:xe(Zp(n.colors.primaryText),";label:primary;"),subdued:xe(Zp(n.colors.subduedText),";label:subdued;"),success:xe(Zp(n.colors.successText),";label:success;"),accent:xe(Zp(n.colors.accentText),";label:accent;"),danger:xe(Zp(n.colors.dangerText),";label:danger;"),warning:xe(Zp(n.colors.warningText),";label:warning;"),ghost:xe(Zp(n.colors.ghost),";label:ghost;"),text:xe(Zp(n.colors.text),";label:text;"),euiLink__screenReaderText:xe(ut("left","0px"),";;label:euiLink__screenReaderText;"),euiLink__externalIcon:xe(ut("margin-left",n.size.xs),";;label:euiLink__externalIcon;")}};function _he(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function She(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:"m",r=arguments.length>2?arguments[2]:void 0,o=t.euiTheme,i={xxxs:"xs",xxs:"s",xs:"m",s:"l",m:"xl",l:"xxl"};return She(She({},El(t,i[n],r)),{},{fontWeight:o.font.weight[o.font.title.weight],color:o.colors.title})};var T8t={name:"1x2qsb1-uppercase",styles:"text-transform:uppercase;label:uppercase;"},Ihe=function(t){return{euiTitle:xe(j1e()," &+&{margin-top:",t.euiTheme.size.l,";};label:euiTitle;"),uppercase:T8t,xxxs:xe(Co(t,"xxxs"),";;label:xxxs;"),xxs:xe(Co(t,"xxs"),";;label:xxs;"),xs:xe(Co(t,"xs"),";;label:xs;"),s:xe(Co(t,"s"),";;label:s;"),m:xe(Co(t,"m"),";;label:m;"),l:xe(Co(t,"l"),";;label:l;")}};var R8t="max(64ch, 75%)",z8t=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{color:n?"inherit":t.colors.text,fontWeight:t.font.weight.regular}},SP=function(t,n){var r=El(t,"m",n),o=r.fontSize,i=r.lineHeight,u=t.euiTheme,c=n.measurement,d=n.customScale,g=c==="em"?"".concat(i,"em"):i,O={h1:Co(t,"l",n),h2:Co(t,"m",n),h3:Co(t,"s",n),h4:Co(t,"xs",n),h5:Co(t,"xxs",n),h6:Co(t,"xxxs",n)},S=d==="xxxs"?"xxs":d||"m",I="".concat(parseFloat(u.size[S])*2,"px"),R=u.size[S];return` font-size: `.concat(o,`; line-height: `).concat(i,`; @@ -249,7 +249,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h1.lineHeight,`; } h1:not(:last-child) { - `).concat(st("margin-bottom",R),` + `).concat(ut("margin-bottom",R),` } h2 { @@ -257,11 +257,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h2.lineHeight,`; &:not(:first-child) { - `).concat(st("margin-top",I),` + `).concat(ut("margin-top",I),` } &:not(:last-child) { - `).concat(st("margin-bottom",R),` + `).concat(ut("margin-bottom",R),` } } @@ -270,11 +270,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h3.lineHeight,`; &:not(:first-child) { - `).concat(st("margin-top",I),` + `).concat(ut("margin-top",I),` } &:not(:last-child) { - `).concat(st("margin-bottom",R),` + `).concat(ut("margin-bottom",R),` } } @@ -283,11 +283,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h4.lineHeight,`; &:not(:first-child) { - `).concat(st("margin-top",I),` + `).concat(ut("margin-top",I),` } &:not(:last-child) { - `).concat(st("margin-bottom",R),` + `).concat(ut("margin-bottom",R),` } } @@ -296,11 +296,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h5.lineHeight,`; &:not(:first-child) { - `).concat(st("margin-top",I),` + `).concat(ut("margin-top",I),` } &:not(:last-child) { - `).concat(st("margin-bottom",R),` + `).concat(ut("margin-bottom",R),` } } @@ -309,11 +309,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h6.lineHeight,`; &:not(:first-child) { - `).concat(st("margin-top",I),` + `).concat(ut("margin-top",I),` } &:not(:last-child) { - `).concat(st("margin-bottom",R),` + `).concat(ut("margin-bottom",R),` } } @@ -324,12 +324,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho blockquote, img, pre { - `).concat(st("margin-bottom",g),` + `).concat(ut("margin-bottom",g),` } ul, ol { - `).concat(st("margin-left",g),` + `).concat(ut("margin-left",g),` } blockquote { @@ -338,7 +338,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } dd + dt { - `).concat(st("margin-top",o),` + `).concat(ut("margin-top",o),` } dt, @@ -348,12 +348,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } .eui-definitionListReverse dt { - font-size: `).concat(jl(t,"xs",n).fontSize,`; + font-size: `).concat(El(t,"xs",n).fontSize,`; color: `).concat(u.colors.text,`; } small { - font-size: `).concat(jl(t,"s",n).fontSize,`; + font-size: `).concat(El(t,"s",n).fontSize,`; } pre:not(.euiCodeBlock__pre) { @@ -365,55 +365,55 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } `).concat(d==="m"?` kbd { - `.concat(st("padding-bottom",u.size.xs),` + `.concat(ut("padding-bottom",u.size.xs),` // ensures when only one character the shape looks like a square - `).concat(st("min-width",u.size.l),` - `).concat(Ta("center"),` + `).concat(ut("min-width",u.size.l),` + `).concat(Ra("center"),` } kbd::after { content: ''; - `).concat(st("border-bottom","".concat(u.border.width.thin," solid ").concat(u.colors.text)),` + `).concat(ut("border-bottom","".concat(u.border.width.thin," solid ").concat(u.colors.text)),` position: absolute; - `).concat(st("bottom",u.size.xxs),` - `).concat(st("left",0),` - `).concat(st("width","100%"),` + `).concat(ut("bottom",u.size.xxs),` + `).concat(ut("left",0),` + `).concat(ut("width","100%"),` }`):"",` - `)},Ohe=function(t){var n=t.euiTheme;return{euiText:Oe(I8t(n,!0),";clear:both;a:not([class]){",YG(n),";}img{display:block;",st("max-width","100%"),";}ul{list-style:disc;}ol{list-style:decimal;}blockquote:not(.euiMarkdownFormat__blockquote){position:relative;",Ta("center")," ",st("margin-horizontal","auto")," font-family:",n.font.familySerif,";font-style:italic;letter-spacing:normal;p:last-child{",st("margin-bottom","0"),";}&:before,&:after{position:absolute;content:'';",st("height",n.border.width.thick)," ",st("width","50%")," ",st("left","25%")," ",st("right","25%")," background:",n.colors.darkShade,";}&:before{",st("top","0"),";}&:after{",st("bottom","0"),";}}h1{",ko(t,"l"),";}h2{",ko(t,"m"),";}h3{",ko(t,"s"),";}h4,dt{",ko(t,"xs"),";}h5{",ko(t,"xxs"),";}h6{",ko(t,"xxxs")," text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:",wx(t,"subdued"),";color:",n.colors.text,";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{",st("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",st("padding-vertical",n.size.xxs)," ",st("padding-horizontal",n.size.xs)," line-height:1;border:",n.border.width.thin," solid ",n.colors.text,";border-radius:calc(",n.border.radius.small," / 2);};label:euiText;"),constrainedWidth:Oe(st("max-width",S8t),";;label:constrainedWidth;"),m:Oe(_P(t,{measurement:"rem",customScale:"m"}),";;label:m;"),s:Oe(_P(t,{measurement:"rem",customScale:"s"}),";;label:s;"),xs:Oe(_P(t,{measurement:"rem",customScale:"xs"}),";;label:xs;"),relative:Oe(_P(t,{measurement:"em"}),";;label:relative;")}};var She=E(D()),tc=E(rt());var j8t={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},xhe=function(t){var n=t.euiTheme;return{euiTextColor:Oe(";label:euiTextColor;"),default:Oe("color:",n.colors.text,";;label:default;"),subdued:Oe("color:",n.colors.subduedText,";;label:subdued;"),success:Oe("color:",n.colors.successText,";;label:success;"),accent:Oe("color:",n.colors.accentText,";;label:accent;"),danger:Oe("color:",n.colors.dangerText,";;label:danger;"),warning:Oe("color:",n.colors.warningText,";;label:warning;"),ghost:Oe("color:",n.colors.ghost,"!important;;label:ghost;"),inherit:j8t,customColor:Oe(";label:customColor;")}};var E8t=["children","color","component","cloneElement","style"];function _he(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Rd(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function C8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A8t=["default","subdued","success","accent","danger","warning","ghost","inherit"],QG=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.component,u=i===void 0?"span":i,c=t.cloneElement,d=c===void 0?!1:c,g=t.style,O=k8t(t,E8t),S=A8t.includes(o),I=cr(),R=xhe(I),k=[R.euiTextColor,S?R[o]:R.customColor],A=Rd(S?{}:{color:o},g),M=Rd({css:k,style:A},O);if((0,She.isValidElement)(n)&&d){var T=Rd(Rd({},n.props.style),A);return Lp(n,Rd(Rd({},M),{},{style:T}))}else{var N=u;return a(N,M,n)}};QG.propTypes={className:tc.default.string,"aria-label":tc.default.string,"data-test-subj":tc.default.string,color:tc.default.oneOfType([tc.default.any.isRequired,tc.default.any.isRequired]),component:tc.default.oneOf(["div","span"]),cloneElement:tc.default.bool};var Ehe=E(D()),rh=E(rt());var Ihe=function(){return{euiTextAlign:Oe(";label:euiTextAlign;"),left:Oe(Ta("left"),";;label:left;"),right:Oe(Ta("right"),";;label:right;"),center:Oe(Ta("center"),";;label:center;")}};var M8t=["children","textAlign","cloneElement"];function jhe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function T8t(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZG=function(t){var n=t.children,r=t.textAlign,o=r===void 0?"left":r,i=t.cloneElement,u=i===void 0?!1:i,c=z8t(t,M8t),d=Ihe(),g=[d.euiTextAlign,d[o]],O=T8t({css:g},c);return(0,Ehe.isValidElement)(n)&&u?Lp(n,O):a("div",O,n)};ZG.propTypes={className:rh.default.string,"aria-label":rh.default.string,"data-test-subj":rh.default.string,textAlign:rh.default.any,cloneElement:rh.default.bool};var L8t=["size","color","grow","textAlign","children","className"];function eX(){return eX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pt=function(t){var n=t.size,r=n===void 0?"m":n,o=t.color,i=t.grow,u=i===void 0?!0:i,c=t.textAlign,d=t.children,g=t.className,O=N8t(t,L8t),S=cr(),I=Ohe(S),R=[I.euiText,u?void 0:I.constrainedWidth,I[r]],k=(0,Phe.default)("euiText",g),A=a("div",eX({css:R,className:k},O),d);return o&&(A=a(QG,{color:o,className:k,cloneElement:!0},A)),c&&(A=a(ZG,{textAlign:c,className:k,cloneElement:!0},A)),A};Pt.propTypes={className:eu.default.string,"aria-label":eu.default.string,"data-test-subj":eu.default.string,textAlign:eu.default.any,size:eu.default.any,color:eu.default.oneOfType([eu.default.any.isRequired,eu.default.any.isRequired]),grow:eu.default.bool};var Xvr=E(D()),nn=E(rt()),SP=E(yt());var W8t=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function Lx(){return Lx=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ahe={primary:"euiButtonEmpty--primary",danger:"euiButtonEmpty--danger",text:"euiButtonEmpty--text",ghost:"euiButtonEmpty--ghost",success:"euiButtonEmpty--success",warning:"euiButtonEmpty--warning"},q8t=kt(Ahe),Mhe={xs:"euiButtonEmpty--xSmall",s:"euiButtonEmpty--small",m:null},ryr=kt(Mhe),The={left:"euiButtonEmpty--flushLeft",right:"euiButtonEmpty--flushRight",both:"euiButtonEmpty--flushBoth"},nyr=kt(The),Vi=function(t){var n=t.children,r=t.className,o=t.iconType,i=t.iconSide,u=i===void 0?"left":i,c=t.iconSize,d=c===void 0?"m":c,g=t.color,O=g===void 0?"primary":g,S=t.size,I=S===void 0?"m":S,R=t.flush,k=t.isDisabled,A=t.disabled,M=t.isLoading,T=t.href,N=t.target,U=t.rel,X=t.type,Y=X===void 0?"button":X,K=t.buttonRef,H=t.contentProps,ne=t.textProps,pe=t.isSelected,ye=H8t(t,W8t),fe=!T||Ei(T),ue=A||!fe,xe=k||!fe,me=M||xe||ue,We=(0,SP.default)("euiButtonEmpty",Ahe[O],I?Mhe[I]:null,R?The[R]:null,{"euiButtonEmpty-isDisabled":me},r),$e=(0,SP.default)("euiButtonEmpty__content",H&&H.className),Ge=(0,SP.default)("euiButtonEmpty__text",ne&&ne.className),Be=a(Mx,Lx({isLoading:M,iconType:o,iconSide:u,iconSize:I==="xs"?"s":d,textProps:Che(Che({},ne),{},{className:Ge})},H,{className:$e}),n);if(T&&!me){var et=yo({href:T,target:N,rel:U});return a("a",Lx({className:We,href:T,target:N,rel:et,ref:K},ye),Be)}return a("button",Lx({disabled:me,className:We,type:Y,ref:K,"aria-pressed":pe},ye),Be)};Vi.propTypes={href:nn.default.string,onClick:nn.default.func,color:nn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:nn.default.oneOf(["xs","s","m"]),flush:nn.default.oneOf(["left","right","both"]),isDisabled:nn.default.bool,isLoading:nn.default.bool,isSelected:nn.default.bool,target:nn.default.string,rel:nn.default.string,type:nn.default.oneOf(["button","submit"]),buttonRef:nn.default.any,contentProps:nn.default.any,iconType:nn.default.oneOfType([nn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,nn.default.string.isRequired,nn.default.elementType.isRequired]),iconSide:nn.default.oneOf(["left","right"]),textProps:nn.default.shape({className:nn.default.string,"aria-label":nn.default.string,"data-test-subj":nn.default.string,ref:nn.default.any,"data-text":nn.default.string}),iconSize:nn.default.oneOf(["s","m"]),className:nn.default.string,"aria-label":nn.default.string,"data-test-subj":nn.default.string};var lyr=E(D()),Yn=E(rt()),Rhe=E(yt());var U8t=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function IP(){return IP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zhe={base:null,empty:"euiButtonIcon--empty",fill:"euiButtonIcon--fill"},hyr=kt(zhe),Dhe={accent:"euiButtonIcon--accent",danger:"euiButtonIcon--danger",ghost:"euiButtonIcon--ghost",primary:"euiButtonIcon--primary",success:"euiButtonIcon--success",text:"euiButtonIcon--text",warning:"euiButtonIcon--warning"},gyr=kt(Dhe),Lhe={xs:"euiButtonIcon--xSmall",s:"euiButtonIcon--small",m:"euiButtonIcon--medium"},vyr=kt(Lhe),sa=function(t){var n=t.className,r=t.iconType,o=t.iconSize,i=o===void 0?"m":o,u=t.color,c=u===void 0?"primary":u,d=t.isDisabled,g=t.disabled,O=t.href,S=t.type,I=S===void 0?"button":S,R=t.display,k=R===void 0?"empty":R,A=t.target,M=t.rel,T=t.size,N=T===void 0?"xs":T,U=t.buttonRef,X=t.isSelected,Y=t.isLoading,K=$8t(t,U8t),H=!O||Ei(O),ne=d||g||!H||Y,pe=K["aria-hidden"],ye=pe==="true"||pe===!0;!K["aria-label"]&&!K["aria-labelledby"]&&!ye&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only - buttons are screen-reader-inaccessible without them.`);var fe=(0,Rhe.default)("euiButtonIcon",{"euiButtonIcon-isDisabled":ne},Dhe[c],k&&zhe[k],N&&Lhe[N],n),ue;r&&!Y&&(ue=a(Wt,{className:"euiButtonIcon__icon",type:r,size:i,"aria-hidden":"true",color:"inherit"}));var xe=i==="original"?void 0:i;if(r&&Y&&(ue=a(Zt,{size:xe})),O&&!ne){var me=yo({href:O,target:A,rel:M});return a("a",IP({tabIndex:ye?-1:void 0,className:fe,href:O,target:A,rel:me,ref:U},K),ue)}var We;return a("button",IP({tabIndex:ye?-1:void 0,disabled:ne,className:fe,"aria-pressed":X,type:I,ref:U},K),ue)};sa.propTypes={type:Yn.default.oneOfType([Yn.default.string,Yn.default.oneOf(["submit","reset","button"])]),href:Yn.default.string,onClick:Yn.default.func,iconType:Yn.default.oneOfType([Yn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Yn.default.string.isRequired,Yn.default.elementType.isRequired]).isRequired,color:Yn.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),"aria-label":Yn.default.string,"aria-labelledby":Yn.default.string,isDisabled:Yn.default.bool,size:Yn.default.oneOf(["xs","s","m"]),iconSize:Yn.default.any,isSelected:Yn.default.bool,display:Yn.default.oneOf(["base","empty","fill"]),isLoading:Yn.default.bool,className:Yn.default.string,"data-test-subj":Yn.default.string,buttonRef:Yn.default.any};var rX=E(rt()),zd=E(D());function tX(e,t){return Y8t(e)||K8t(e,t)||X8t(e,t)||G8t()}function G8t(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function X8t(e,t){if(e){if(typeof e=="string")return Nhe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Nhe(e,t)}}function Nhe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',k=I.head||I.getElementsByTagName("head")[0],A=I.createElement("style");A.id="detectElementResize",A.type="text/css",e!=null&&A.setAttribute("nonce",e),A.styleSheet?A.styleSheet.cssText=R:A.appendChild(I.createTextNode(R)),k.appendChild(A)}};return{addResizeListener:function(I,R){if(d)I.attachEvent("onresize",R);else{if(!I.__resizeTriggers__){let k=I.ownerDocument,A=El.getComputedStyle(I);A&&A.position==="static"&&(I.style.position="relative"),g(k),I.__resizeLast__={},I.__resizeListeners__=[],(I.__resizeTriggers__=k.createElement("div")).className="resize-triggers";let M=k.createElement("div");M.className="expand-trigger",M.appendChild(k.createElement("div"));let T=k.createElement("div");T.className="contract-trigger",I.__resizeTriggers__.appendChild(M),I.__resizeTriggers__.appendChild(T),I.appendChild(I.__resizeTriggers__),u(I),I.addEventListener("scroll",c,!0),r&&(I.__resizeTriggers__.__animationListener__=function(U){U.animationName===n&&u(I)},I.__resizeTriggers__.addEventListener(r,I.__resizeTriggers__.__animationListener__))}I.__resizeListeners__.push(R)}},removeResizeListener:function(I,R){if(d)I.detachEvent("onresize",R);else if(I.__resizeListeners__.splice(I.__resizeListeners__.indexOf(R),1),!I.__resizeListeners__.length){I.removeEventListener("scroll",c,!0),I.__resizeTriggers__.__animationListener__&&(I.__resizeTriggers__.removeEventListener(r,I.__resizeTriggers__.__animationListener__),I.__resizeTriggers__.__animationListener__=null);try{I.__resizeTriggers__=!I.removeChild(I.__resizeTriggers__)}catch{}}}}}var jP=class extends EP.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:n,disableWidth:r,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},u=parseFloat(i.paddingLeft||"0"),c=parseFloat(i.paddingRight||"0"),d=parseFloat(i.paddingTop||"0"),g=parseFloat(i.paddingBottom||"0"),O=this._parentNode.getBoundingClientRect(),S=O.height-d-g,I=O.width-u-c,R=this._parentNode.offsetHeight-d-g,k=this._parentNode.offsetWidth-u-c;(!n&&(this.state.height!==R||this.state.scaledHeight!==S)||!r&&(this.state.width!==k||this.state.scaledWidth!==I))&&(this.setState({height:R,width:k,scaledHeight:S,scaledWidth:I}),typeof o=="function"&&o({height:R,scaledHeight:S,scaledWidth:I,width:k}))}},this._setRef=n=>{this._autoSizer=n}}componentDidMount(){let{nonce:t}=this.props,n=this._autoSizer?this._autoSizer.parentNode:null;if(n!=null&&n.ownerDocument&&n.ownerDocument.defaultView&&n instanceof n.ownerDocument.defaultView.HTMLElement){this._parentNode=n;let r=n.ownerDocument.defaultView.ResizeObserver;r!=null?(this._resizeObserver=new r(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(n)):(this._detectElementResize=Q8t(t),this._detectElementResize.addResizeListener(n,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:n,defaultWidth:r,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:u=!1,nonce:c,onResize:d,style:g={},tagName:O="div",...S}=this.props,{height:I,scaledHeight:R,scaledWidth:k,width:A}=this.state,M={overflow:"visible"},T={},N=!1;return o||(I===0&&(N=!0),M.height=0,T.height=I,T.scaledHeight=R),i||(A===0&&(N=!0),M.width=0,T.width=A,T.scaledWidth=k),u&&(N=!1),(0,EP.createElement)(O,{ref:this._setRef,style:{...M,...g},...S},!N&&t(T))}};function PP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?PP=function(n){return typeof n}:PP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},PP(e)}function Z8t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function e9t(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&lX(e,t)}function lX(e,t){return lX=Object.setPrototypeOf||function(r,o){return r.__proto__=o,r},lX(e,t)}function t9t(e){var t=o9t();return function(){var r=kP(e),o;if(t){var i=kP(this).constructor;o=Reflect.construct(r,arguments,i)}else o=r.apply(this,arguments);return r9t(this,o)}}function r9t(e,t){if(t&&(PP(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return n9t(e)}function n9t(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o9t(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function kP(e){return kP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},kP(e)}var sX=function(e){e9t(n,e);var t=t9t(n);function n(){return Z8t(this,n),t.apply(this,arguments)}return n}(jP);var zyr=E(D()),io=E(rt()),pX=E(yt());function CP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?CP=function(n){return typeof n}:CP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},CP(e)}var i9t="";var uX=function(t){var n;if(!t)return null;if(t.indexOf(",")>0){if(!/^[\s,.0-9]*$/.test(t))return null;var r=t.trim().split(",").filter(function(o){return o!==""}).map(Number);n=r.length>2&&r.length<5?r:i9t}else n=t;return n},Hhe=function(t){var n=t;return typeof t=="string"&&(n=uX(t)),n?CP(n)==="object"?dn.valid(n,"rgb")||dn.valid(n,"rgba"):dn.valid(t,"hex"):!1};var a9t=["children","color","iconType","iconSide","className","isDisabled","onClick","iconOnClick","onClickAriaLabel","iconOnClickAriaLabel","closeButtonProps","href","rel","target","style"];function l9t(e){return p9t(e)||c9t(e)||u9t(e)||s9t()}function s9t(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function u9t(e,t){if(e){if(typeof e=="string")return cX(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return cX(e,t)}}function c9t(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function p9t(e){if(Array.isArray(e))return cX(e)}function cX(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h9t="#000",g9t="#fff",Nx=A1(),$he={default:"#d3dae6",primary:Nx[1],success:Nx[0],accent:Nx[2],warning:Nx[5],danger:Nx[9]},fX=kt($he),Jhe={left:"euiBadge--iconLeft",right:"euiBadge--iconRight"},Uyr=kt(Jhe),Pi=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.iconType,u=t.iconSide,c=u===void 0?"left":u,d=t.className,g=t.isDisabled,O=t.onClick,S=t.iconOnClick,I=t.onClickAriaLabel,R=t.iconOnClickAriaLabel,k=t.closeButtonProps,A=t.href,M=t.rel,T=t.target,N=t.style,U=d9t(t,a9t),X=!A||Ei(A),Y=g||!X,K=N,H=null,ne=4.5,pe=null,ye=null;try{fX.indexOf(o)>-1?(ye=$he[o],H=Uhe(ye),K=qhe({backgroundColor:ye,color:H},K)):o!=="hollow"&&(H=Uhe(o),pe=v9t(H,o),pe"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function MP(e){return MP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},MP(e)}function S9t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Zhe={after:"afterend",before:"beforebegin"},Gyr=kt(Zhe),Qp=function(e){O9t(n,e);var t=x9t(n);function n(r){var o;if(b9t(this,n),o=t.call(this,r),S9t(Khe(o),"portalNode",null),typeof window>"u")return Xhe(o);var i=o.props.insert;if(o.portalNode=document.createElement("div"),o.portalNode.dataset.euiportal="true",i==null)document.body.appendChild(o.portalNode);else{var u=i.sibling,c=i.position;u.insertAdjacentElement(Zhe[c],o.portalNode)}return o}return w9t(n,[{key:"componentDidMount",value:function(){this.updatePortalRef(this.portalNode)}},{key:"componentWillUnmount",value:function(){var o;(o=this.portalNode)!==null&&o!==void 0&&o.parentNode&&this.portalNode.parentNode.removeChild(this.portalNode),this.updatePortalRef(null)}},{key:"updatePortalRef",value:function(o){this.props.portalRef&&this.props.portalRef(o)}},{key:"render",value:function(){return this.portalNode?(0,Qhe.createPortal)(this.props.children,this.portalNode):null}}]),n}(Yhe.Component);Qp.propTypes={children:oh.default.node.isRequired,insert:oh.default.shape({sibling:oh.default.any.isRequired,position:oh.default.oneOf(["before","after"]).isRequired}),portalRef:oh.default.func};var tge=E(D()),Zp=E(rt()),rge=E(yt());function TP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?TP=function(n){return typeof n}:TP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},TP(e)}var I9t=["children","title","className","positionToolTip","popoverRef"];function hX(){return hX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function P9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ege(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function zP(e){return zP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},zP(e)}function mX(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var vX=function(e){C9t(n,e);var t=A9t(n);function n(){var r;P9t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function N9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function oge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function LP(e){return LP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},LP(e)}function ki(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var age={top:"euiToolTip--top",right:"euiToolTip--right",bottom:"euiToolTip--bottom",left:"euiToolTip--left"},u2r=kt(age),q9t={regular:250,long:250*5},U9t={inlineBlock:void 0,block:"euiToolTipAnchor--displayBlock"},ige={top:50,left:50,opacity:0,visibility:"hidden"},ua=function(e){W9t(n,e);var t=B9t(n);function n(){var r;N9t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FP=function(t){var n=t.type,r=n===void 0?"questionInCircle":n,o=t["aria-label"],i=o===void 0?"Info":o,u=t.color,c=t.size,d=t.iconProps,g=t.position,O=g===void 0?"top":g,S=t.delay,I=S===void 0?"regular":S,R=J9t(t,$9t);return a(ua,NP({position:O,delay:I},R),a(Wt,NP({tabIndex:0,type:r,color:u,size:c,"aria-label":i},d)))};FP.propTypes={anchorClassName:Bo.default.string,className:Bo.default.string,content:Bo.default.node,display:Bo.default.oneOf(["inlineBlock","block"]),title:Bo.default.node,id:Bo.default.string,onMouseOut:Bo.default.func,color:Bo.default.string,type:Bo.default.oneOfType([Bo.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Bo.default.string.isRequired,Bo.default.elementType.isRequired]),size:Bo.default.any,"aria-label":Bo.default.string,iconProps:Bo.default.any,delay:Bo.default.any,position:Bo.default.any};var X9t=["className","label","color","tooltipContent","tooltipPosition","title","iconType","onClick","onClickAriaLabel","href","rel","target","size"];function WP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?WP=function(n){return typeof n}:WP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},WP(e)}function Fx(){return Fx=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uge={accent:"euiBetaBadge--accent",subdued:"euiBetaBadge--subdued",hollow:"euiBetaBadge--hollow"},j2r=kt(uge),cge={s:"euiBetaBadge--small",m:null},E2r=kt(cge),BP=function(t){var n=t.className,r=t.label,o=t.color,i=o===void 0?"hollow":o,u=t.tooltipContent,c=t.tooltipPosition,d=c===void 0?"top":c,g=t.title,O=t.iconType,S=t.onClick,I=t.onClickAriaLabel,R=t.href,k=t.rel,A=t.target,M=t.size,T=M===void 0?"m":M,N=K9t(t,X9t),U=!1;typeof r=="string"&&r.length===1&&(U=!0);var X=(0,sge.default)("euiBetaBadge",{"euiBetaBadge--iconOnly":O,"euiBetaBadge--singleLetter":U,"euiBetaBadge-isClickable":S||R},uge[i],cge[T],n),Y;O&&(Y=a(Wt,{className:"euiBetaBadge__icon",type:O,size:T==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var K=R?"a":"button",H={};R&&(H.href=R,H.target=A,H.rel=yo({href:R,target:A,rel:k})),S&&(H.onClick=S);var ne;if(S||R)return ne=a(K,Fx({"aria-label":I,className:X,title:typeof r=="string"?r:g},H,N),Y||r),u?a(ua,{position:d,content:u,title:g||r},ne):a(lge.Fragment,null,ne);if(u)return a(ua,{position:d,content:u,title:g||r},a("span",Fx({tabIndex:0,className:X,role:"button"},N),Y||r));var pe=g||r;return pe&&typeof pe!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(WP(pe))),a("span",Fx({className:X,title:pe},N),Y||r)};BP.propTypes={className:Gr.default.string,"aria-label":Gr.default.string,"data-test-subj":Gr.default.string,onClick:Gr.default.func,onClickAriaLabel:Gr.default.any,href:Gr.default.string,target:Gr.default.string,rel:Gr.default.string,iconType:Gr.default.oneOfType([Gr.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Gr.default.string.isRequired,Gr.default.elementType.isRequired]),label:Gr.default.oneOfType([Gr.default.node.isRequired,Gr.default.oneOfType([Gr.default.node.isRequired,Gr.default.string.isRequired]).isRequired]).isRequired,tooltipContent:Gr.default.oneOfType([Gr.default.node,Gr.default.oneOfType([Gr.default.node,Gr.default.node.isRequired])]),tooltipPosition:Gr.default.oneOf(["top","right","bottom","left"]),title:Gr.default.oneOfType([Gr.default.string,Gr.default.oneOfType([Gr.default.string.isRequired,Gr.default.string])]),color:Gr.default.oneOf(["accent","subdued","hollow"]),size:Gr.default.oneOf(["s","m"])};var ao=function(t,n,r){var o=r===Fp.dark?n*3.5:n*1;return dn(t).alpha(o).css()};var Q9t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` + `)},jhe=function(t){var n=t.euiTheme;return{euiText:xe(z8t(n,!0),";clear:both;a:not([class]){",rX(n),";}img{display:block;",ut("max-width","100%"),";}ul{list-style:disc;}ol{list-style:decimal;}blockquote:not(.euiMarkdownFormat__blockquote){position:relative;",Ra("center")," ",ut("margin-horizontal","auto")," font-family:",n.font.familySerif,";font-style:italic;letter-spacing:normal;p:last-child{",ut("margin-bottom","0"),";}&:before,&:after{position:absolute;content:'';",ut("height",n.border.width.thick)," ",ut("width","50%")," ",ut("left","25%")," ",ut("right","25%")," background:",n.colors.darkShade,";}&:before{",ut("top","0"),";}&:after{",ut("bottom","0"),";}}h1{",Co(t,"l"),";}h2{",Co(t,"m"),";}h3{",Co(t,"s"),";}h4,dt{",Co(t,"xs"),";}h5{",Co(t,"xxs"),";}h6{",Co(t,"xxxs")," text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:",xx(t,"subdued"),";color:",n.colors.text,";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{",ut("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",ut("padding-vertical",n.size.xxs)," ",ut("padding-horizontal",n.size.xs)," line-height:1;border:",n.border.width.thin," solid ",n.colors.text,";border-radius:calc(",n.border.radius.small," / 2);};label:euiText;"),constrainedWidth:xe(ut("max-width",R8t),";;label:constrainedWidth;"),m:xe(SP(t,{measurement:"rem",customScale:"m"}),";;label:m;"),s:xe(SP(t,{measurement:"rem",customScale:"s"}),";;label:s;"),xs:xe(SP(t,{measurement:"rem",customScale:"xs"}),";;label:xs;"),relative:xe(SP(t,{measurement:"em"}),";;label:relative;")}};var khe=E(L()),rc=E(rt());var D8t={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},Ehe=function(t){var n=t.euiTheme;return{euiTextColor:xe(";label:euiTextColor;"),default:xe("color:",n.colors.text,";;label:default;"),subdued:xe("color:",n.colors.subduedText,";;label:subdued;"),success:xe("color:",n.colors.successText,";;label:success;"),accent:xe("color:",n.colors.accentText,";;label:accent;"),danger:xe("color:",n.colors.dangerText,";;label:danger;"),warning:xe("color:",n.colors.warningText,";;label:warning;"),ghost:xe("color:",n.colors.ghost,"!important;;label:ghost;"),inherit:D8t,customColor:xe(";label:customColor;")}};var L8t=["children","color","component","cloneElement","style"];function Phe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Ld(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B8t=["default","subdued","success","accent","danger","warning","ghost","inherit"],nX=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.component,u=i===void 0?"span":i,c=t.cloneElement,d=c===void 0?!1:c,g=t.style,O=F8t(t,L8t),S=B8t.includes(o),I=cr(),R=Ehe(I),k=[R.euiTextColor,S?R[o]:R.customColor],M=Ld(S?{}:{color:o},g),C=Ld({css:k,style:M},O);if((0,khe.isValidElement)(n)&&d){var T=Ld(Ld({},n.props.style),M);return Fp(n,Ld(Ld({},C),{},{style:T}))}else{var D=u;return a(D,C,n)}};nX.propTypes={className:rc.default.string,"aria-label":rc.default.string,"data-test-subj":rc.default.string,color:rc.default.oneOfType([rc.default.any.isRequired,rc.default.any.isRequired]),component:rc.default.oneOf(["div","span"]),cloneElement:rc.default.bool};var Mhe=E(L()),ih=E(rt());var Che=function(){return{euiTextAlign:xe(";label:euiTextAlign;"),left:xe(Ra("left"),";;label:left;"),right:xe(Ra("right"),";;label:right;"),center:xe(Ra("center"),";;label:center;")}};var H8t=["children","textAlign","cloneElement"];function Ahe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function V8t(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oX=function(t){var n=t.children,r=t.textAlign,o=r===void 0?"left":r,i=t.cloneElement,u=i===void 0?!1:i,c=U8t(t,H8t),d=Che(),g=[d.euiTextAlign,d[o]],O=V8t({css:g},c);return(0,Mhe.isValidElement)(n)&&u?Fp(n,O):a("div",O,n)};oX.propTypes={className:ih.default.string,"aria-label":ih.default.string,"data-test-subj":ih.default.string,textAlign:ih.default.any,cloneElement:ih.default.bool};var J8t=["size","color","grow","textAlign","children","className"];function iX(){return iX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pt=function(t){var n=t.size,r=n===void 0?"m":n,o=t.color,i=t.grow,u=i===void 0?!0:i,c=t.textAlign,d=t.children,g=t.className,O=G8t(t,J8t),S=cr(),I=jhe(S),R=[I.euiText,u?void 0:I.constrainedWidth,I[r]],k=(0,The.default)("euiText",g),M=a("div",iX({css:R,className:k},O),d);return o&&(M=a(nX,{color:o,className:k,cloneElement:!0},M)),c&&(M=a(oX,{textAlign:c,className:k,cloneElement:!0},M)),M};Pt.propTypes={className:tu.default.string,"aria-label":tu.default.string,"data-test-subj":tu.default.string,textAlign:tu.default.any,size:tu.default.any,color:tu.default.oneOfType([tu.default.any.isRequired,tu.default.any.isRequired]),grow:tu.default.bool};var ayr=E(L()),nn=E(rt()),IP=E(yt());var K8t=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function Fx(){return Fx=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dhe={primary:"euiButtonEmpty--primary",danger:"euiButtonEmpty--danger",text:"euiButtonEmpty--text",ghost:"euiButtonEmpty--ghost",success:"euiButtonEmpty--success",warning:"euiButtonEmpty--warning"},e9t=kt(Dhe),Lhe={xs:"euiButtonEmpty--xSmall",s:"euiButtonEmpty--small",m:null},dyr=kt(Lhe),Nhe={left:"euiButtonEmpty--flushLeft",right:"euiButtonEmpty--flushRight",both:"euiButtonEmpty--flushBoth"},myr=kt(Nhe),Vi=function(t){var n=t.children,r=t.className,o=t.iconType,i=t.iconSide,u=i===void 0?"left":i,c=t.iconSize,d=c===void 0?"m":c,g=t.color,O=g===void 0?"primary":g,S=t.size,I=S===void 0?"m":S,R=t.flush,k=t.isDisabled,M=t.disabled,C=t.isLoading,T=t.href,D=t.target,U=t.rel,G=t.type,Y=G===void 0?"button":G,K=t.buttonRef,B=t.contentProps,ne=t.textProps,pe=t.isSelected,ve=Q8t(t,K8t),de=!T||Ei(T),ue=M||!de,ye=k||!de,be=C||ye||ue,ze=(0,IP.default)("euiButtonEmpty",Dhe[O],I?Lhe[I]:null,R?Nhe[R]:null,{"euiButtonEmpty-isDisabled":be},r),He=(0,IP.default)("euiButtonEmpty__content",B&&B.className),Qe=(0,IP.default)("euiButtonEmpty__text",ne&&ne.className),Be=a(Rx,Fx({isLoading:C,iconType:o,iconSide:u,iconSize:I==="xs"?"s":d,textProps:zhe(zhe({},ne),{},{className:Qe})},B,{className:He}),n);if(T&&!be){var Ze=bo({href:T,target:D,rel:U});return a("a",Fx({className:ze,href:T,target:D,rel:Ze,ref:K},ve),Be)}return a("button",Fx({disabled:be,className:ze,type:Y,ref:K,"aria-pressed":pe},ve),Be)};Vi.propTypes={href:nn.default.string,onClick:nn.default.func,color:nn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:nn.default.oneOf(["xs","s","m"]),flush:nn.default.oneOf(["left","right","both"]),isDisabled:nn.default.bool,isLoading:nn.default.bool,isSelected:nn.default.bool,target:nn.default.string,rel:nn.default.string,type:nn.default.oneOf(["button","submit"]),buttonRef:nn.default.any,contentProps:nn.default.any,iconType:nn.default.oneOfType([nn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,nn.default.string.isRequired,nn.default.elementType.isRequired]),iconSide:nn.default.oneOf(["left","right"]),textProps:nn.default.shape({className:nn.default.string,"aria-label":nn.default.string,"data-test-subj":nn.default.string,ref:nn.default.any,"data-text":nn.default.string}),iconSize:nn.default.oneOf(["s","m"]),className:nn.default.string,"aria-label":nn.default.string,"data-test-subj":nn.default.string};var yyr=E(L()),Yn=E(rt()),Fhe=E(yt());var t9t=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function jP(){return jP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Whe={base:null,empty:"euiButtonIcon--empty",fill:"euiButtonIcon--fill"},jyr=kt(Whe),Bhe={accent:"euiButtonIcon--accent",danger:"euiButtonIcon--danger",ghost:"euiButtonIcon--ghost",primary:"euiButtonIcon--primary",success:"euiButtonIcon--success",text:"euiButtonIcon--text",warning:"euiButtonIcon--warning"},Eyr=kt(Bhe),Hhe={xs:"euiButtonIcon--xSmall",s:"euiButtonIcon--small",m:"euiButtonIcon--medium"},Pyr=kt(Hhe),sa=function(t){var n=t.className,r=t.iconType,o=t.iconSize,i=o===void 0?"m":o,u=t.color,c=u===void 0?"primary":u,d=t.isDisabled,g=t.disabled,O=t.href,S=t.type,I=S===void 0?"button":S,R=t.display,k=R===void 0?"empty":R,M=t.target,C=t.rel,T=t.size,D=T===void 0?"xs":T,U=t.buttonRef,G=t.isSelected,Y=t.isLoading,K=r9t(t,t9t),B=!O||Ei(O),ne=d||g||!B||Y,pe=K["aria-hidden"],ve=pe==="true"||pe===!0;!K["aria-label"]&&!K["aria-labelledby"]&&!ve&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only + buttons are screen-reader-inaccessible without them.`);var de=(0,Fhe.default)("euiButtonIcon",{"euiButtonIcon-isDisabled":ne},Bhe[c],k&&Whe[k],D&&Hhe[D],n),ue;r&&!Y&&(ue=a(Nt,{className:"euiButtonIcon__icon",type:r,size:i,"aria-hidden":"true",color:"inherit"}));var ye=i==="original"?void 0:i;if(r&&Y&&(ue=a(Zt,{size:ye})),O&&!ne){var be=bo({href:O,target:M,rel:C});return a("a",jP({tabIndex:ve?-1:void 0,className:de,href:O,target:M,rel:be,ref:U},K),ue)}var ze;return a("button",jP({tabIndex:ve?-1:void 0,disabled:ne,className:de,"aria-pressed":G,type:I,ref:U},K),ue)};sa.propTypes={type:Yn.default.oneOfType([Yn.default.string,Yn.default.oneOf(["submit","reset","button"])]),href:Yn.default.string,onClick:Yn.default.func,iconType:Yn.default.oneOfType([Yn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Yn.default.string.isRequired,Yn.default.elementType.isRequired]).isRequired,color:Yn.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),"aria-label":Yn.default.string,"aria-labelledby":Yn.default.string,isDisabled:Yn.default.bool,size:Yn.default.oneOf(["xs","s","m"]),iconSize:Yn.default.any,isSelected:Yn.default.bool,display:Yn.default.oneOf(["base","empty","fill"]),isLoading:Yn.default.bool,className:Yn.default.string,"data-test-subj":Yn.default.string,buttonRef:Yn.default.any};var lX=E(rt()),Nd=E(L());function aX(e,t){return l9t(e)||a9t(e,t)||i9t(e,t)||o9t()}function o9t(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function i9t(e,t){if(e){if(typeof e=="string")return Vhe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Vhe(e,t)}}function Vhe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',k=I.head||I.getElementsByTagName("head")[0],M=I.createElement("style");M.id="detectElementResize",M.type="text/css",e!=null&&M.setAttribute("nonce",e),M.styleSheet?M.styleSheet.cssText=R:M.appendChild(I.createTextNode(R)),k.appendChild(M)}};return{addResizeListener:function(I,R){if(d)I.attachEvent("onresize",R);else{if(!I.__resizeTriggers__){let k=I.ownerDocument,M=Pl.getComputedStyle(I);M&&M.position==="static"&&(I.style.position="relative"),g(k),I.__resizeLast__={},I.__resizeListeners__=[],(I.__resizeTriggers__=k.createElement("div")).className="resize-triggers";let C=k.createElement("div");C.className="expand-trigger",C.appendChild(k.createElement("div"));let T=k.createElement("div");T.className="contract-trigger",I.__resizeTriggers__.appendChild(C),I.__resizeTriggers__.appendChild(T),I.appendChild(I.__resizeTriggers__),u(I),I.addEventListener("scroll",c,!0),r&&(I.__resizeTriggers__.__animationListener__=function(U){U.animationName===n&&u(I)},I.__resizeTriggers__.addEventListener(r,I.__resizeTriggers__.__animationListener__))}I.__resizeListeners__.push(R)}},removeResizeListener:function(I,R){if(d)I.detachEvent("onresize",R);else if(I.__resizeListeners__.splice(I.__resizeListeners__.indexOf(R),1),!I.__resizeListeners__.length){I.removeEventListener("scroll",c,!0),I.__resizeTriggers__.__animationListener__&&(I.__resizeTriggers__.removeEventListener(r,I.__resizeTriggers__.__animationListener__),I.__resizeTriggers__.__animationListener__=null);try{I.__resizeTriggers__=!I.removeChild(I.__resizeTriggers__)}catch{}}}}}var EP=class extends PP.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:n,disableWidth:r,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},u=parseFloat(i.paddingLeft||"0"),c=parseFloat(i.paddingRight||"0"),d=parseFloat(i.paddingTop||"0"),g=parseFloat(i.paddingBottom||"0"),O=this._parentNode.getBoundingClientRect(),S=O.height-d-g,I=O.width-u-c,R=this._parentNode.offsetHeight-d-g,k=this._parentNode.offsetWidth-u-c;(!n&&(this.state.height!==R||this.state.scaledHeight!==S)||!r&&(this.state.width!==k||this.state.scaledWidth!==I))&&(this.setState({height:R,width:k,scaledHeight:S,scaledWidth:I}),typeof o=="function"&&o({height:R,scaledHeight:S,scaledWidth:I,width:k}))}},this._setRef=n=>{this._autoSizer=n}}componentDidMount(){let{nonce:t}=this.props,n=this._autoSizer?this._autoSizer.parentNode:null;if(n!=null&&n.ownerDocument&&n.ownerDocument.defaultView&&n instanceof n.ownerDocument.defaultView.HTMLElement){this._parentNode=n;let r=n.ownerDocument.defaultView.ResizeObserver;r!=null?(this._resizeObserver=new r(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(n)):(this._detectElementResize=s9t(t),this._detectElementResize.addResizeListener(n,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:n,defaultWidth:r,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:u=!1,nonce:c,onResize:d,style:g={},tagName:O="div",...S}=this.props,{height:I,scaledHeight:R,scaledWidth:k,width:M}=this.state,C={overflow:"visible"},T={},D=!1;return o||(I===0&&(D=!0),C.height=0,T.height=I,T.scaledHeight=R),i||(M===0&&(D=!0),C.width=0,T.width=M,T.scaledWidth=k),u&&(D=!1),(0,PP.createElement)(O,{ref:this._setRef,style:{...C,...g},...S},!D&&t(T))}};function kP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?kP=function(n){return typeof n}:kP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},kP(e)}function u9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c9t(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&fX(e,t)}function fX(e,t){return fX=Object.setPrototypeOf||function(r,o){return r.__proto__=o,r},fX(e,t)}function p9t(e){var t=m9t();return function(){var r=CP(e),o;if(t){var i=CP(this).constructor;o=Reflect.construct(r,arguments,i)}else o=r.apply(this,arguments);return f9t(this,o)}}function f9t(e,t){if(t&&(kP(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return d9t(e)}function d9t(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m9t(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function CP(e){return CP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},CP(e)}var dX=function(e){c9t(n,e);var t=p9t(n);function n(){return u9t(this,n),t.apply(this,arguments)}return n}(EP);var $yr=E(L()),io=E(rt()),gX=E(yt());function AP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?AP=function(n){return typeof n}:AP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},AP(e)}var h9t="";var mX=function(t){var n;if(!t)return null;if(t.indexOf(",")>0){if(!/^[\s,.0-9]*$/.test(t))return null;var r=t.trim().split(",").filter(function(o){return o!==""}).map(Number);n=r.length>2&&r.length<5?r:h9t}else n=t;return n},Jhe=function(t){var n=t;return typeof t=="string"&&(n=mX(t)),n?AP(n)==="object"?dn.valid(n,"rgb")||dn.valid(n,"rgba"):dn.valid(t,"hex"):!1};var g9t=["children","color","iconType","iconSide","className","isDisabled","onClick","iconOnClick","onClickAriaLabel","iconOnClickAriaLabel","closeButtonProps","href","rel","target","style"];function v9t(e){return O9t(e)||w9t(e)||b9t(e)||y9t()}function y9t(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function b9t(e,t){if(e){if(typeof e=="string")return hX(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return hX(e,t)}}function w9t(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function O9t(e){if(Array.isArray(e))return hX(e)}function hX(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I9t="#000",j9t="#fff",Wx=R1(),Yhe={default:"#d3dae6",primary:Wx[1],success:Wx[0],accent:Wx[2],warning:Wx[5],danger:Wx[9]},vX=kt(Yhe),Qhe={left:"euiBadge--iconLeft",right:"euiBadge--iconRight"},r2r=kt(Qhe),Pi=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.iconType,u=t.iconSide,c=u===void 0?"left":u,d=t.className,g=t.isDisabled,O=t.onClick,S=t.iconOnClick,I=t.onClickAriaLabel,R=t.iconOnClickAriaLabel,k=t.closeButtonProps,M=t.href,C=t.rel,T=t.target,D=t.style,U=_9t(t,g9t),G=!M||Ei(M),Y=g||!G,K=D,B=null,ne=4.5,pe=null,ve=null;try{vX.indexOf(o)>-1?(ve=Yhe[o],B=Khe(ve),K=Xhe({backgroundColor:ve,color:B},K)):o!=="hollow"&&(B=Khe(o),pe=E9t(B,o),pe"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function TP(e){return TP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},TP(e)}function R9t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oge={after:"afterend",before:"beforebegin"},i2r=kt(oge),ef=function(e){A9t(n,e);var t=M9t(n);function n(r){var o;if(k9t(this,n),o=t.call(this,r),R9t(tge(o),"portalNode",null),typeof window>"u")return ege(o);var i=o.props.insert;if(o.portalNode=document.createElement("div"),o.portalNode.dataset.euiportal="true",i==null)document.body.appendChild(o.portalNode);else{var u=i.sibling,c=i.position;u.insertAdjacentElement(oge[c],o.portalNode)}return o}return C9t(n,[{key:"componentDidMount",value:function(){this.updatePortalRef(this.portalNode)}},{key:"componentWillUnmount",value:function(){var o;(o=this.portalNode)!==null&&o!==void 0&&o.parentNode&&this.portalNode.parentNode.removeChild(this.portalNode),this.updatePortalRef(null)}},{key:"updatePortalRef",value:function(o){this.props.portalRef&&this.props.portalRef(o)}},{key:"render",value:function(){return this.portalNode?(0,nge.createPortal)(this.props.children,this.portalNode):null}}]),n}(rge.Component);ef.propTypes={children:lh.default.node.isRequired,insert:lh.default.shape({sibling:lh.default.any.isRequired,position:lh.default.oneOf(["before","after"]).isRequired}),portalRef:lh.default.func};var age=E(L()),tf=E(rt()),lge=E(yt());function RP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?RP=function(n){return typeof n}:RP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},RP(e)}var z9t=["children","title","className","positionToolTip","popoverRef"];function wX(){return wX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function N9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ige(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function DP(e){return DP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},DP(e)}function bX(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xX=function(e){W9t(n,e);var t=B9t(n);function n(){var r;N9t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function G9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function NP(e){return NP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},NP(e)}function ki(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pge={top:"euiToolTip--top",right:"euiToolTip--right",bottom:"euiToolTip--bottom",left:"euiToolTip--left"},w2r=kt(pge),e_t={regular:250,long:250*5},t_t={inlineBlock:void 0,block:"euiToolTipAnchor--displayBlock"},cge={top:50,left:50,opacity:0,visibility:"hidden"},ua=function(e){K9t(n,e);var t=Y9t(n);function n(){var r;G9t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WP=function(t){var n=t.type,r=n===void 0?"questionInCircle":n,o=t["aria-label"],i=o===void 0?"Info":o,u=t.color,c=t.size,d=t.iconProps,g=t.position,O=g===void 0?"top":g,S=t.delay,I=S===void 0?"regular":S,R=n_t(t,r_t);return a(ua,FP({position:O,delay:I},R),a(Nt,FP({tabIndex:0,type:r,color:u,size:c,"aria-label":i},d)))};WP.propTypes={anchorClassName:Bo.default.string,className:Bo.default.string,content:Bo.default.node,display:Bo.default.oneOf(["inlineBlock","block"]),title:Bo.default.node,id:Bo.default.string,onMouseOut:Bo.default.func,color:Bo.default.string,type:Bo.default.oneOfType([Bo.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Bo.default.string.isRequired,Bo.default.elementType.isRequired]),size:Bo.default.any,"aria-label":Bo.default.string,iconProps:Bo.default.any,delay:Bo.default.any,position:Bo.default.any};var i_t=["className","label","color","tooltipContent","tooltipPosition","title","iconType","onClick","onClickAriaLabel","href","rel","target","size"];function BP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?BP=function(n){return typeof n}:BP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},BP(e)}function Bx(){return Bx=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function l_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mge={accent:"euiBetaBadge--accent",subdued:"euiBetaBadge--subdued",hollow:"euiBetaBadge--hollow"},L2r=kt(mge),hge={s:"euiBetaBadge--small",m:null},N2r=kt(hge),HP=function(t){var n=t.className,r=t.label,o=t.color,i=o===void 0?"hollow":o,u=t.tooltipContent,c=t.tooltipPosition,d=c===void 0?"top":c,g=t.title,O=t.iconType,S=t.onClick,I=t.onClickAriaLabel,R=t.href,k=t.rel,M=t.target,C=t.size,T=C===void 0?"m":C,D=a_t(t,i_t),U=!1;typeof r=="string"&&r.length===1&&(U=!0);var G=(0,dge.default)("euiBetaBadge",{"euiBetaBadge--iconOnly":O,"euiBetaBadge--singleLetter":U,"euiBetaBadge-isClickable":S||R},mge[i],hge[T],n),Y;O&&(Y=a(Nt,{className:"euiBetaBadge__icon",type:O,size:T==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var K=R?"a":"button",B={};R&&(B.href=R,B.target=M,B.rel=bo({href:R,target:M,rel:k})),S&&(B.onClick=S);var ne;if(S||R)return ne=a(K,Bx({"aria-label":I,className:G,title:typeof r=="string"?r:g},B,D),Y||r),u?a(ua,{position:d,content:u,title:g||r},ne):a(fge.Fragment,null,ne);if(u)return a(ua,{position:d,content:u,title:g||r},a("span",Bx({tabIndex:0,className:G,role:"button"},D),Y||r));var pe=g||r;return pe&&typeof pe!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(BP(pe))),a("span",Bx({className:G,title:pe},D),Y||r)};HP.propTypes={className:Gr.default.string,"aria-label":Gr.default.string,"data-test-subj":Gr.default.string,onClick:Gr.default.func,onClickAriaLabel:Gr.default.any,href:Gr.default.string,target:Gr.default.string,rel:Gr.default.string,iconType:Gr.default.oneOfType([Gr.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Gr.default.string.isRequired,Gr.default.elementType.isRequired]),label:Gr.default.oneOfType([Gr.default.node.isRequired,Gr.default.oneOfType([Gr.default.node.isRequired,Gr.default.string.isRequired]).isRequired]).isRequired,tooltipContent:Gr.default.oneOfType([Gr.default.node,Gr.default.oneOfType([Gr.default.node,Gr.default.node.isRequired])]),tooltipPosition:Gr.default.oneOf(["top","right","bottom","left"]),title:Gr.default.oneOfType([Gr.default.string,Gr.default.oneOfType([Gr.default.string.isRequired,Gr.default.string])]),color:Gr.default.oneOf(["accent","subdued","hollow"]),size:Gr.default.oneOf(["s","m"])};var ao=function(t,n,r){var o=r===Bp.dark?n*3.5:n*1;return dn(t).alpha(o).css()};var s_t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: 0 .8px .8px `.concat(ao(u,.04,r),`, 0 2.3px 2px `).concat(ao(u,.03,r),`; -`)},Z9t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` +`)},u_t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: 0 .7px 1.4px `.concat(ao(u,.07,r),`, 0 1.9px 4px `).concat(ao(u,.05,r),`, 0 4.5px 10px `).concat(ao(u,.05,r),`; -`)},OX=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.property,c=i||n.colors.shadow,d=["0 .9px 4px ".concat(ao(c,.08,r)),"0 2.6px 8px ".concat(ao(c,.06,r)),"0 5.7px 12px ".concat(ao(c,.05,r)),"0 15px 15px ".concat(ao(c,.04,r))];return u==="filter"?"filter: ".concat(d.reduce(function(g,O){return"".concat(g," drop-shadow(").concat(O,")")},""),";"):"box-shadow: ".concat(d.map(function(g){return g}),";")},e_t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` +`)},jX=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.property,c=i||n.colors.shadow,d=["0 .9px 4px ".concat(ao(c,.08,r)),"0 2.6px 8px ".concat(ao(c,.06,r)),"0 5.7px 12px ".concat(ao(c,.05,r)),"0 15px 15px ".concat(ao(c,.04,r))];return u==="filter"?"filter: ".concat(d.reduce(function(g,O){return"".concat(g," drop-shadow(").concat(O,")")},""),";"):"box-shadow: ".concat(d.map(function(g){return g}),";")},c_t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: 0 1px 5px `.concat(ao(u,.1,r),`, 0 3.6px 13px `).concat(ao(u,.07,r),`, 0 8.4px 23px `).concat(ao(u,.06,r),`, 0 23px 35px `).concat(ao(u,.05,r),`; -`)},t_t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.reverse,c=i||n.colors.shadow;return` +`)},p_t=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.reverse,c=i||n.colors.shadow;return` box-shadow: 0 `.concat(u?"-":"","2.7px 9px ").concat(ao(c,.13,r),`, 0 `).concat(u?"-":"","9.4px 24px ").concat(ao(c,.09,r),`, 0 `).concat(u?"-":"","21.8px 43px ").concat(ao(c,.08,r),`; -`)};var pge=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` +`)};var gge=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: 0 0 .8px `.concat(ao(u,.06,r),`, 0 0 2px `).concat(ao(u,.04,r),`, 0 0 5px `).concat(ao(u,.04,r),`, 0 0 17px `).concat(ao(u,.03,r),`; -`)};var tu=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=r.color;switch(n){case"xs":return Q9t(t,{color:o});case"s":return Z9t(t,{color:o});case"m":return OX(t,{color:o});case"l":return e_t(t,{color:o});case"xl":return t_t(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var mge=E(D()),ef=E(rt()),xX=E(yt());var r_t=["children","color","className","href","external","target","rel","type","onClick","disabled"];function HP(){return HP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function i_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ld=(0,mge.forwardRef)(function(e,t){var n=e.children,r=e.color,o=r===void 0?"primary":r,i=e.className,u=e.href,c=e.external,d=e.target,g=e.rel,O=e.type,S=O===void 0?"button":O,I=e.onClick,R=e.disabled,k=o_t(e,r_t),A=cr(),M=vhe(A),T=[M.euiLink],N=[M.euiLink__screenReaderText],U=[M.euiLink__externalIcon],X=!u||Ei(u),Y=R||!X,K=a(pn,{css:N},a("span",null,a(bt,{token:"euiLink.newTarget.screenReaderOnlyText",default:"(opens in a new tab or window)"}))),H=a(Wt,{"aria-label":Kn("euiLink.external.ariaLabel","External link"),size:"s",css:U,type:"popout"});if(u===void 0||!X){var ne=dge({className:(0,xX.default)("euiLink",i),css:[T,Y?[M.disabled]:M[o]],type:S,onClick:I,disabled:Y},k);return a("button",HP({ref:t},ne),n)}var pe=yo({href:u,target:d,rel:g}),ye=dge({className:(0,xX.default)("euiLink",i),css:[T,M[o]],href:u,target:d,rel:pe,onClick:I},k),fe=d==="_blank"&&c!==!1||c===!0;return a("a",HP({ref:t},ye),n,fe&&H,d==="_blank"&&K)});Ld.propTypes={className:ef.default.string,"aria-label":ef.default.string,"data-test-subj":ef.default.string,type:ef.default.oneOf(["button","reset","submit"]),color:ef.default.any,onClick:ef.default.func,external:ef.default.bool};Ld.displayName="EuiLink";var Ave=E(D()),nc=E(rt());var Ui=function(){return Ui=Object.assign||function(t){for(var n,r=1,o=arguments.length;r=0}).sort(y_t)};var Uge=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var CX=Uge.join(","),w_t="".concat(CX,", [data-focus-guard]"),$ge=function(e,t){return Ai((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?w_t:CX)?[r]:[],$ge(r))},[])},O_t=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?tf([e.contentDocument.body],t):[e]},tf=function(e,t){return e.reduce(function(n,r){var o,i=$ge(r,t),u=(o=[]).concat.apply(o,i.map(function(c){return O_t(c,t)}));return n.concat(u,r.parentNode?Ai(r.parentNode.querySelectorAll(CX)).filter(function(c){return c===r}):[])},[])},Jge=function(e){var t=e.querySelectorAll("[".concat(jge,"]"));return Ai(t).map(function(n){return tf([n])}).reduce(function(n,r){return n.concat(r)},[])};var AX=function(e,t){return Ai(e).filter(function(n){return jX(t,n)}).filter(function(n){return Vge(n)})},MX=function(e,t){return t===void 0&&(t=new Map),Ai(e).filter(function(n){return EX(t,n)})},Jx=function(e,t,n){return $x(AX(tf(e,n),t),!0,n)},uh=function(e,t){return $x(AX(tf(e),t),!1)},Gge=function(e,t){return AX(Jge(e),t)},cs=function(e,t){return e.shadowRoot?cs(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Ai(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?cs(o,t):!1}return cs(n,t)})};var x_t=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(u,c){return!t.has(c)})},Xge=function(e){return e.parentNode?Xge(e.parentNode):e},ch=function(e){var t=us(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(Vx);return n.push.apply(n,o?x_t(Ai(Xge(r).querySelectorAll("[".concat(Vx,'="').concat(o,'"]:not([').concat(JP,'="disabled"])')))):[r]),n},[])};var Kge=function(e){try{return e()}catch{return}};var rf=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?rf(t.shadowRoot):t instanceof HTMLIFrameElement&&Kge(function(){return t.contentWindow.document})?rf(t.contentWindow.document):t}};var __t=function(e,t){return e===t},S_t=function(e,t){return!!Ai(e.querySelectorAll("iframe")).some(function(n){return __t(n,t)})},nk=function(e,t){return t===void 0&&(t=rf(rk(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:ch(e).some(function(n){return cs(n,t)||S_t(n,t)})};var TX=function(e){e===void 0&&(e=document);var t=rf(e);return t?Ai(e.querySelectorAll("[".concat(Ige,"]"))).some(function(n){return cs(n,t)}):!1};var I_t=function(e,t){return t.filter(kX).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},ok=function(e,t){return kX(e)&&e.name?I_t(e,t):e},Yge=function(e){var t=new Set;return e.forEach(function(n){return t.add(ok(n,e))}),e.filter(function(n){return t.has(n)})};var RX=function(e){return e[0]&&e.length>1?ok(e[0],e):e[0]},zX=function(e,t){return e.indexOf(ok(t,e))};var ik="NEW_FOCUS",Qge=function(e,t,n,r,o){var i=e.length,u=e[0],c=e[i-1],d=qx(r);if(!(r&&e.indexOf(r)>=0)){var g=r!==void 0?n.indexOf(r):-1,O=o?n.indexOf(o):g,S=o?e.indexOf(o):-1;if(g===-1)return S!==-1?S:ik;if(S===-1)return ik;var I=g-O,R=n.indexOf(u),k=n.indexOf(c),A=Yge(n),M=r!==void 0?A.indexOf(r):-1,T=M-(o?A.indexOf(o):g);if(!I&&S>=0||t.length===0)return S;var N=zX(e,t[0]),U=zX(e,t[t.length-1]);if(g<=R&&d&&Math.abs(I)>1)return U;if(g>=k&&d&&Math.abs(I)>1)return N;if(I&&Math.abs(T)>1)return S;if(g<=R)return U;if(g>k)return N;if(I)return Math.abs(I)>1?S:(i+S+I)%i}};var j_t=function(e){return function(t){var n,r=(n=PX(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},DX=function(e,t,n){var r=e.map(function(i){var u=i.node;return u}),o=MX(r.filter(j_t(n)));return o&&o.length?RX(o):RX(MX(t))};var NX=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&NX(e.parentNode.host||e.parentNode,t),t},LX=function(e,t){for(var n=NX(e),r=NX(t),o=0;o=0)return i}return!1},ak=function(e,t,n){var r=us(e),o=us(t),i=r[0],u=!1;return o.filter(Boolean).forEach(function(c){u=LX(u||c,c)||u,n.filter(Boolean).forEach(function(d){var g=LX(i,d);g&&(!u||cs(g,u)?u=g:u=LX(g,u))})}),u},FX=function(e,t){return e.reduce(function(n,r){return n.concat(Gge(r,t))},[])};var E_t=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(qge)},Zge=function(e,t){var n=rf(us(e).length>0?document:rk(e).ownerDocument),r=ch(e).filter(Ux),o=ak(n||e,e,r),i=new Map,u=uh(r,i),c=u.filter(function(k){var A=k.node;return Ux(A)});if(c[0]){var d=uh([o],i).map(function(k){var A=k.node;return A}),g=E_t(d,c),O=g.map(function(k){var A=k.node;return A}),S=g.filter(function(k){var A=k.tabIndex;return A>=0}).map(function(k){var A=k.node;return A}),I=Qge(O,S,d,n,t);if(I===ik){var R=DX(u,S,FX(r,i))||DX(u,O,FX(r,i));if(R)return{node:R};console.warn("focus-lock: cannot find any node to move focus into");return}return I===void 0?I:g[I]}};var WX=function(e){var t=ch(e).filter(Ux),n=ak(e,e,t),r=$x(tf([n],!0),!0,!0),o=tf(t,!1);return r.map(function(i){var u=i.node,c=i.index;return{node:u,index:c,lockItem:o.indexOf(u)>=0,guard:qx(u)}})};var Gx=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var BX=0,HX=!1,lk=function(e,t,n){n===void 0&&(n={});var r=Zge(e,t);if(!HX&&r){if(BX>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),HX=!0,setTimeout(function(){HX=!1},1);return}BX++,Gx(r.node,n.focusOptions),BX--}};function Xx(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var P_t=function(e){if(!e)return null;for(var t=[],n=e;n&&n!==document.body;)t.push({current:Xx(n),parent:Xx(n.parentElement),left:Xx(n.previousElementSibling),right:Xx(n.nextElementSibling)}),n=n.parentElement;return{element:Xx(e),stack:t,ownerDocument:e.ownerDocument}},k_t=function(e){var t,n,r,o,i;if(e)for(var u=e.stack,c=e.ownerDocument,d=new Map,g=0,O=u;g-1&&(R.filter(function(A){var M=A.guard,T=A.node;return M&&T.dataset.focusAutoGuard}).forEach(function(A){var M=A.node;return M.removeAttribute("tabIndex")}),nve(k,R.length,1,R),nve(k,-1,-1,R))}}}return t},ive=function(t){sk()&&t&&(t.stopPropagation(),t.preventDefault())},uk=function(){return YP(sk)},ave=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||D_t(r,n)},B_t=function(){return null},H_t=function(t){var n=t.children;return ove.createElement("div",{onBlur:uk,onFocus:ave},n)};H_t.propTypes={};var lve=function(){Kx="just",YP(function(){Kx="meanwhile"})},V_t=function(){document.addEventListener("focusin",ive),document.addEventListener("focusout",uk),window.addEventListener("blur",lve)},q_t=function(){document.removeEventListener("focusin",ive),document.removeEventListener("focusout",uk),window.removeEventListener("blur",lve)};function U_t(e){return e.filter(function(t){var n=t.disabled;return!n})}var sve={moveFocusInside:lk,focusInside:nk,focusNextElement:qX,focusPrevElement:UX,focusFirstElement:$X,focusLastElement:JX,captureFocusRestore:VX};function $_t(e){var t=e.slice(-1)[0];t&&!fh&&V_t();var n=fh,r=n&&t&&t.id===n.id;fh=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var i=o.id;return i===n.id}).length||n.returnFocus(!t)),t?(ph=null,(!r||n.observed!==t.observed)&&t.onActivation(sve),sk(!0),YP(sk)):(q_t(),ph=null)}GP.assignSyncMedium(ave);XP.assignMedium(uk);Pge.assignMedium(function(e){return e(sve)});var uve=Fge(U_t,$_t)(B_t);var T5r=Bd(KP,uve);var Cn=E(D());var hh=E(D());var fve=E(D());var cve;var pve=function(){if(cve)return cve;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function J_t(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=pve();return t&&e.setAttribute("nonce",t),e}function G_t(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function X_t(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var GX=function(){var e=0,t=null;return{add:function(n){e==0&&(t=J_t())&&(G_t(t,n),X_t(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var XX=function(){var e=GX();return function(t,n){fve.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var Vd=function(){var e=XX(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t};var K_t={left:0,top:0,right:0,gap:0},KX=function(e){return parseInt(e||"",10)||0},Y_t=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[KX(n),KX(r),KX(o)]},YX=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return K_t;var t=Y_t(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}};var Q_t=Vd(),mh="data-scroll-locked",Z_t=function(e,t,n,r){var o=e.left,i=e.top,u=e.right,c=e.gap;return n===void 0&&(n="margin"),` - .`.concat(_X,` { +`)};var ru=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=r.color;switch(n){case"xs":return s_t(t,{color:o});case"s":return u_t(t,{color:o});case"m":return jX(t,{color:o});case"l":return c_t(t,{color:o});case"xl":return p_t(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var bge=E(L()),rf=E(rt()),EX=E(yt());var f_t=["children","color","className","href","external","target","rel","type","onClick","disabled"];function VP(){return VP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wd=(0,bge.forwardRef)(function(e,t){var n=e.children,r=e.color,o=r===void 0?"primary":r,i=e.className,u=e.href,c=e.external,d=e.target,g=e.rel,O=e.type,S=O===void 0?"button":O,I=e.onClick,R=e.disabled,k=m_t(e,f_t),M=cr(),C=xhe(M),T=[C.euiLink],D=[C.euiLink__screenReaderText],U=[C.euiLink__externalIcon],G=!u||Ei(u),Y=R||!G,K=a(pn,{css:D},a("span",null,a(bt,{token:"euiLink.newTarget.screenReaderOnlyText",default:"(opens in a new tab or window)"}))),B=a(Nt,{"aria-label":Kn("euiLink.external.ariaLabel","External link"),size:"s",css:U,type:"popout"});if(u===void 0||!G){var ne=yge({className:(0,EX.default)("euiLink",i),css:[T,Y?[C.disabled]:C[o]],type:S,onClick:I,disabled:Y},k);return a("button",VP({ref:t},ne),n)}var pe=bo({href:u,target:d,rel:g}),ve=yge({className:(0,EX.default)("euiLink",i),css:[T,C[o]],href:u,target:d,rel:pe,onClick:I},k),de=d==="_blank"&&c!==!1||c===!0;return a("a",VP({ref:t},ve),n,de&&B,d==="_blank"&&K)});Wd.propTypes={className:rf.default.string,"aria-label":rf.default.string,"data-test-subj":rf.default.string,type:rf.default.oneOf(["button","reset","submit"]),color:rf.default.any,onClick:rf.default.func,external:rf.default.bool};Wd.displayName="EuiLink";var Wve=E(L()),ic=E(rt());var Ui=function(){return Ui=Object.assign||function(t){for(var n,r=1,o=arguments.length;r=0}).sort(P_t)};var Kge=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var zX=Kge.join(","),C_t="".concat(zX,", [data-focus-guard]"),Yge=function(e,t){return Ai((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?C_t:zX)?[r]:[],Yge(r))},[])},A_t=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?nf([e.contentDocument.body],t):[e]},nf=function(e,t){return e.reduce(function(n,r){var o,i=Yge(r,t),u=(o=[]).concat.apply(o,i.map(function(c){return A_t(c,t)}));return n.concat(u,r.parentNode?Ai(r.parentNode.querySelectorAll(zX)).filter(function(c){return c===r}):[])},[])},Qge=function(e){var t=e.querySelectorAll("[".concat(Age,"]"));return Ai(t).map(function(n){return nf([n])}).reduce(function(n,r){return n.concat(r)},[])};var DX=function(e,t){return Ai(e).filter(function(n){return AX(t,n)}).filter(function(n){return Gge(n)})},LX=function(e,t){return t===void 0&&(t=new Map),Ai(e).filter(function(n){return MX(t,n)})},fh=function(e,t,n){return Gx(DX(nf(e,n),t),!0,n)},nc=function(e,t){return Gx(DX(nf(e),t),!1)},Zge=function(e,t){return DX(Qge(e),t)},ps=function(e,t){return e.shadowRoot?ps(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:Ai(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?ps(o,t):!1}return ps(n,t)})};var M_t=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(u,c){return!t.has(c)})},eve=function(e){return e.parentNode?eve(e.parentNode):e},dh=function(e){var t=cs(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(Ux);return n.push.apply(n,o?M_t(Ai(eve(r).querySelectorAll("[".concat(Ux,'="').concat(o,'"]:not([').concat(GP,'="disabled"])')))):[r]),n},[])};var tve=function(e){try{return e()}catch{return}};var of=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?of(t.shadowRoot):t instanceof HTMLIFrameElement&&tve(function(){return t.contentWindow.document})?of(t.contentWindow.document):t}};var T_t=function(e,t){return e===t},R_t=function(e,t){return!!Ai(e.querySelectorAll("iframe")).some(function(n){return T_t(n,t)})},ok=function(e,t){return t===void 0&&(t=of(nk(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:dh(e).some(function(n){return ps(n,t)||R_t(n,t)})};var NX=function(e){e===void 0&&(e=document);var t=of(e);return t?Ai(e.querySelectorAll("[".concat(Cge,"]"))).some(function(n){return ps(n,t)}):!1};var z_t=function(e,t){return t.filter(RX).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},ik=function(e,t){return RX(e)&&e.name?z_t(e,t):e},rve=function(e){var t=new Set;return e.forEach(function(n){return t.add(ik(n,e))}),e.filter(function(n){return t.has(n)})};var FX=function(e){return e[0]&&e.length>1?ik(e[0],e):e[0]},WX=function(e,t){return e.indexOf(ik(t,e))};var ak="NEW_FOCUS",nve=function(e,t,n,r,o){var i=e.length,u=e[0],c=e[i-1],d=$x(r);if(!(r&&e.indexOf(r)>=0)){var g=r!==void 0?n.indexOf(r):-1,O=o?n.indexOf(o):g,S=o?e.indexOf(o):-1;if(g===-1)return S!==-1?S:ak;if(S===-1)return ak;var I=g-O,R=n.indexOf(u),k=n.indexOf(c),M=rve(n),C=r!==void 0?M.indexOf(r):-1,T=C-(o?M.indexOf(o):g);if(!I&&S>=0||t.length===0)return S;var D=WX(e,t[0]),U=WX(e,t[t.length-1]);if(g<=R&&d&&Math.abs(I)>1)return U;if(g>=k&&d&&Math.abs(I)>1)return D;if(I&&Math.abs(T)>1)return S;if(g<=R)return U;if(g>k)return D;if(I)return Math.abs(I)>1?S:(i+S+I)%i}};var D_t=function(e){return function(t){var n,r=(n=TX(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},BX=function(e,t,n){var r=e.map(function(i){var u=i.node;return u}),o=LX(r.filter(D_t(n)));return o&&o.length?FX(o):FX(LX(t))};var VX=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&VX(e.parentNode.host||e.parentNode,t),t},HX=function(e,t){for(var n=VX(e),r=VX(t),o=0;o=0)return i}return!1},lk=function(e,t,n){var r=cs(e),o=cs(t),i=r[0],u=!1;return o.filter(Boolean).forEach(function(c){u=HX(u||c,c)||u,n.filter(Boolean).forEach(function(d){var g=HX(i,d);g&&(!u||ps(g,u)?u=g:u=HX(g,u))})}),u},qX=function(e,t){return e.reduce(function(n,r){return n.concat(Zge(r,t))},[])};var L_t=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(Xge)},ove=function(e,t){var n=of(cs(e).length>0?document:nk(e).ownerDocument),r=dh(e).filter(Jx),o=lk(n||e,e,r),i=new Map,u=nc(r,i),c=u.filter(function(k){var M=k.node;return Jx(M)});if(c[0]){var d=nc([o],i).map(function(k){var M=k.node;return M}),g=L_t(d,c),O=g.map(function(k){var M=k.node;return M}),S=g.filter(function(k){var M=k.tabIndex;return M>=0}).map(function(k){var M=k.node;return M}),I=nve(O,S,d,n,t);if(I===ak){var R=BX(u,S,qX(r,i))||BX(u,O,qX(r,i));if(R)return{node:R};console.warn("focus-lock: cannot find any node to move focus into");return}return I===void 0?I:g[I]}};var UX=function(e){var t=dh(e).filter(Jx),n=lk(e,e,t),r=Gx(nf([n],!0),!0,!0),o=nf(t,!1);return r.map(function(i){var u=i.node,c=i.index;return{node:u,index:c,lockItem:o.indexOf(u)>=0,guard:$x(u)}})};var Xx=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var $X=0,JX=!1,sk=function(e,t,n){n===void 0&&(n={});var r=ove(e,t);if(!JX&&r){if($X>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),JX=!0,setTimeout(function(){JX=!1},1);return}$X++,Xx(r.node,n.focusOptions),$X--}};function Kx(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var N_t=function(e){if(!e)return null;for(var t=[],n=e;n&&n!==document.body;)t.push({current:Kx(n),parent:Kx(n.parentElement),left:Kx(n.previousElementSibling),right:Kx(n.nextElementSibling)}),n=n.parentElement;return{element:Kx(e),stack:t,ownerDocument:e.ownerDocument}},F_t=function(e){var t,n,r,o,i;if(e)for(var u=e.stack,c=e.ownerDocument,d=new Map,g=0,O=u;g-1&&(C.filter(function(D){var U=D.guard,G=D.node;return U&&G.dataset.focusAutoGuard}).forEach(function(D){var U=D.node;return U.removeAttribute("tabIndex")}),uve(T,C.length,1,C),uve(T,-1,-1,C))}}}return t},dve=function(t){ck()&&t&&(t.stopPropagation(),t.preventDefault())},pk=function(){return QP(ck)},mve=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||U_t(r,n)},Y_t=function(){return null},Q_t=function(t){var n=t.children;return cve.createElement("div",{onBlur:pk,onFocus:mve},n)};Q_t.propTypes={};var hve=function(){QX=!0},gve=function(){QX=!1,Yx="just",QP(function(){Yx="meanwhile"})},Z_t=function(){document.addEventListener("focusin",dve),document.addEventListener("focusout",pk),window.addEventListener("focus",hve),window.addEventListener("blur",gve)},eSt=function(){document.removeEventListener("focusin",dve),document.removeEventListener("focusout",pk),window.removeEventListener("focus",hve),window.removeEventListener("blur",gve)};function tSt(e){return e.filter(function(t){var n=t.disabled;return!n})}var vve={moveFocusInside:sk,focusInside:ok,focusNextElement:GX,focusPrevElement:XX,focusFirstElement:KX,focusLastElement:YX,captureFocusRestore:uk};function rSt(e){var t=e.slice(-1)[0];t&&!mh&&Z_t();var n=mh,r=n&&t&&t.id===n.id;mh=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var i=o.id;return i===n.id}).length||n.returnFocus(!t)),t?(za=null,(!r||n.observed!==t.observed)&&t.onActivation(vve),ck(!0),QP(ck)):(eSt(),za=null)}XP.assignSyncMedium(mve);KP.assignMedium(pk);Tge.assignMedium(function(e){return e(vve)});var yve=qge(tSt,rSt)(Y_t);var U5r=qd(YP,yve);var Cn=E(L());var vh=E(L());var Ove=E(L());var bve;var wve=function(){if(bve)return bve;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function nSt(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=wve();return t&&e.setAttribute("nonce",t),e}function oSt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function iSt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var ZX=function(){var e=0,t=null;return{add:function(n){e==0&&(t=nSt())&&(oSt(t,n),iSt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var eK=function(){var e=ZX();return function(t,n){Ove.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var $d=function(){var e=eK(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t};var aSt={left:0,top:0,right:0,gap:0},tK=function(e){return parseInt(e||"",10)||0},lSt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[tK(n),tK(r),tK(o)]},rK=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return aSt;var t=lSt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}};var sSt=$d(),gh="data-scroll-locked",uSt=function(e,t,n,r){var o=e.left,i=e.top,u=e.right,c=e.gap;return n===void 0&&(n="margin"),` + .`.concat(PX,` { overflow: hidden `).concat(r,`; padding-right: `).concat(c,"px ").concat(r,`; } - body[`).concat(mh,`] { + body[`).concat(gh,`] { overflow: hidden `).concat(r,`; overscroll-behavior: contain; `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` @@ -426,41 +426,41 @@ box-shadow: `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` } - .`).concat(Nd,` { + .`).concat(Bd,` { right: `).concat(c,"px ").concat(r,`; } - .`).concat(Fd,` { + .`).concat(Hd,` { margin-right: `).concat(c,"px ").concat(r,`; } - .`).concat(Nd," .").concat(Nd,` { + .`).concat(Bd," .").concat(Bd,` { right: 0 `).concat(r,`; } - .`).concat(Fd," .").concat(Fd,` { + .`).concat(Hd," .").concat(Hd,` { margin-right: 0 `).concat(r,`; } - body[`).concat(mh,`] { - `).concat(SX,": ").concat(c,`px; + body[`).concat(gh,`] { + `).concat(kX,": ").concat(c,`px; } -`)},dve=function(){var e=parseInt(document.body.getAttribute(mh)||"0",10);return isFinite(e)?e:0},eSt=function(){hh.useEffect(function(){return document.body.setAttribute(mh,(dve()+1).toString()),function(){var e=dve()-1;e<=0?document.body.removeAttribute(mh):document.body.setAttribute(mh,e.toString())}},[])},QX=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;eSt();var i=hh.useMemo(function(){return YX(o)},[o]);return hh.createElement(Q_t,{styles:Z_t(i,!t,o,n?"":"!important")})};var ZX=!1;if(typeof window<"u")try{Yx=Object.defineProperty({},"passive",{get:function(){return ZX=!0,!0}}),window.addEventListener("test",Yx,Yx),window.removeEventListener("test",Yx,Yx)}catch{ZX=!1}var Yx,qd=ZX?{passive:!1}:!1;var tSt=function(e){return e.tagName==="TEXTAREA"},mve=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!tSt(e)&&n[t]==="visible")},rSt=function(e){return mve(e,"overflowY")},nSt=function(e){return mve(e,"overflowX")},eK=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=hve(e,r);if(o){var i=gve(e,r),u=i[1],c=i[2];if(u>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},oSt=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},iSt=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},hve=function(e,t){return e==="v"?rSt(t):nSt(t)},gve=function(e,t){return e==="v"?oSt(t):iSt(t)},aSt=function(e,t){return e==="h"&&t==="rtl"?-1:1},vve=function(e,t,n,r,o){var i=aSt(e,window.getComputedStyle(t).direction),u=i*r,c=n.target,d=t.contains(c),g=!1,O=u>0,S=0,I=0;do{var R=gve(e,c),k=R[0],A=R[1],M=R[2],T=A-M-i*k;(k||T)&&hve(e,c)&&(S+=T,I+=k),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(O&&(o&&Math.abs(S)<1||!o&&u>S)||!O&&(o&&Math.abs(I)<1||!o&&-u>I))&&(g=!0),g};var ck=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},yve=function(e){return[e.deltaX,e.deltaY]},bve=function(e){return e&&"current"in e?e.current:e},lSt=function(e,t){return e[0]===t[0]&&e[1]===t[1]},sSt=function(e){return` +`)},xve=function(){var e=parseInt(document.body.getAttribute(gh)||"0",10);return isFinite(e)?e:0},cSt=function(){vh.useEffect(function(){return document.body.setAttribute(gh,(xve()+1).toString()),function(){var e=xve()-1;e<=0?document.body.removeAttribute(gh):document.body.setAttribute(gh,e.toString())}},[])},nK=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;cSt();var i=vh.useMemo(function(){return rK(o)},[o]);return vh.createElement(sSt,{styles:uSt(i,!t,o,n?"":"!important")})};var oK=!1;if(typeof window<"u")try{Qx=Object.defineProperty({},"passive",{get:function(){return oK=!0,!0}}),window.addEventListener("test",Qx,Qx),window.removeEventListener("test",Qx,Qx)}catch{oK=!1}var Qx,Jd=oK?{passive:!1}:!1;var pSt=function(e){return e.tagName==="TEXTAREA"},_ve=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!pSt(e)&&n[t]==="visible")},fSt=function(e){return _ve(e,"overflowY")},dSt=function(e){return _ve(e,"overflowX")},iK=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=Sve(e,r);if(o){var i=Ive(e,r),u=i[1],c=i[2];if(u>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},mSt=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},hSt=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},Sve=function(e,t){return e==="v"?fSt(t):dSt(t)},Ive=function(e,t){return e==="v"?mSt(t):hSt(t)},gSt=function(e,t){return e==="h"&&t==="rtl"?-1:1},jve=function(e,t,n,r,o){var i=gSt(e,window.getComputedStyle(t).direction),u=i*r,c=n.target,d=t.contains(c),g=!1,O=u>0,S=0,I=0;do{var R=Ive(e,c),k=R[0],M=R[1],C=R[2],T=M-C-i*k;(k||T)&&Sve(e,c)&&(S+=T,I+=k),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(O&&(o&&Math.abs(S)<1||!o&&u>S)||!O&&(o&&Math.abs(I)<1||!o&&-u>I))&&(g=!0),g};var fk=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Eve=function(e){return[e.deltaX,e.deltaY]},Pve=function(e){return e&&"current"in e?e.current:e},vSt=function(e,t){return e[0]===t[0]&&e[1]===t[1]},ySt=function(e){return` .block-interactivity-`.concat(e,` {pointer-events: none;} .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},uSt=0,gh=[];function wve(e){var t=Cn.useRef([]),n=Cn.useRef([0,0]),r=Cn.useRef(),o=Cn.useState(uSt++)[0],i=Cn.useState(Vd)[0],u=Cn.useRef(e);Cn.useEffect(function(){u.current=e},[e]),Cn.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var A=gge([e.lockRef.current],(e.shards||[]).map(bve),!0).filter(Boolean);return A.forEach(function(M){return M.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),A.forEach(function(M){return M.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=Cn.useCallback(function(A,M){if("touches"in A&&A.touches.length===2)return!u.current.allowPinchZoom;var T=ck(A),N=n.current,U="deltaX"in A?A.deltaX:N[0]-T[0],X="deltaY"in A?A.deltaY:N[1]-T[1],Y,K=A.target,H=Math.abs(U)>Math.abs(X)?"h":"v";if("touches"in A&&H==="h"&&K.type==="range")return!1;var ne=eK(H,K);if(!ne)return!0;if(ne?Y=H:(Y=H==="v"?"h":"v",ne=eK(H,K)),!ne)return!1;if(!r.current&&"changedTouches"in A&&(U||X)&&(r.current=Y),!Y)return!0;var pe=r.current||Y;return vve(pe,M,A,pe==="h"?U:X,!0)},[]),d=Cn.useCallback(function(A){var M=A;if(!(!gh.length||gh[gh.length-1]!==i)){var T="deltaY"in M?yve(M):ck(M),N=t.current.filter(function(Y){return Y.name===M.type&&(Y.target===M.target||M.target===Y.shadowParent)&&lSt(Y.delta,T)})[0];if(N&&N.should){M.cancelable&&M.preventDefault();return}if(!N){var U=(u.current.shards||[]).map(bve).filter(Boolean).filter(function(Y){return Y.contains(M.target)}),X=U.length>0?c(M,U[0]):!u.current.noIsolation;X&&M.cancelable&&M.preventDefault()}}},[]),g=Cn.useCallback(function(A,M,T,N){var U={name:A,delta:M,target:T,should:N,shadowParent:cSt(T)};t.current.push(U),setTimeout(function(){t.current=t.current.filter(function(X){return X!==U})},1)},[]),O=Cn.useCallback(function(A){n.current=ck(A),r.current=void 0},[]),S=Cn.useCallback(function(A){g(A.type,yve(A),A.target,c(A,e.lockRef.current))},[]),I=Cn.useCallback(function(A){g(A.type,ck(A),A.target,c(A,e.lockRef.current))},[]);Cn.useEffect(function(){return gh.push(i),e.setCallbacks({onScrollCapture:S,onWheelCapture:S,onTouchMoveCapture:I}),document.addEventListener("wheel",d,qd),document.addEventListener("touchmove",d,qd),document.addEventListener("touchstart",O,qd),function(){gh=gh.filter(function(A){return A!==i}),document.removeEventListener("wheel",d,qd),document.removeEventListener("touchmove",d,qd),document.removeEventListener("touchstart",O,qd)}},[]);var R=e.removeScrollBar,k=e.inert;return Cn.createElement(Cn.Fragment,null,k?Cn.createElement(i,{styles:sSt(o)}):null,R?Cn.createElement(QX,{gapMode:e.gapMode}):null)}function cSt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var f4r=Bd(UP,wve);var dk=E(D());var pSt=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},vh=new WeakMap,pk=new WeakMap,fk={},tK=0,Ove=function(e){return e&&(e.host||Ove(e.parentNode))},fSt=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=Ove(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},dSt=function(e,t,n,r){var o=fSt(t,Array.isArray(e)?e:[e]);fk[n]||(fk[n]=new WeakMap);var i=fk[n],u=[],c=new Set,d=new Set(o),g=function(S){!S||c.has(S)||(c.add(S),g(S.parentNode))};o.forEach(g);var O=function(S){!S||d.has(S)||Array.prototype.forEach.call(S.children,function(I){if(c.has(I))O(I);else try{var R=I.getAttribute(r),k=R!==null&&R!=="false",A=(vh.get(I)||0)+1,M=(i.get(I)||0)+1;vh.set(I,A),i.set(I,M),u.push(I),A===1&&k&&pk.set(I,!0),M===1&&I.setAttribute(n,"true"),k||I.setAttribute(r,"true")}catch(T){console.error("aria-hidden: cannot operate on ",I,T)}})};return O(t),c.clear(),tK++,function(){u.forEach(function(S){var I=vh.get(S)-1,R=i.get(S)-1;vh.set(S,I),i.set(S,R),I||(pk.has(S)||S.removeAttribute(r),pk.delete(S)),R||S.removeAttribute(n)}),tK--,tK||(vh=new WeakMap,vh=new WeakMap,pk=new WeakMap,fk={})}},xve=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||pSt(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),dSt(r,o,n,"aria-hidden")):function(){return null}};var _ve=E(D());var mSt=Vd(),hSt=` - [`+ZP+`] { +`)},bSt=0,yh=[];function kve(e){var t=Cn.useRef([]),n=Cn.useRef([0,0]),r=Cn.useRef(),o=Cn.useState(bSt++)[0],i=Cn.useState($d)[0],u=Cn.useRef(e);Cn.useEffect(function(){u.current=e},[e]),Cn.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var M=Oge([e.lockRef.current],(e.shards||[]).map(Pve),!0).filter(Boolean);return M.forEach(function(C){return C.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),M.forEach(function(C){return C.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=Cn.useCallback(function(M,C){if("touches"in M&&M.touches.length===2)return!u.current.allowPinchZoom;var T=fk(M),D=n.current,U="deltaX"in M?M.deltaX:D[0]-T[0],G="deltaY"in M?M.deltaY:D[1]-T[1],Y,K=M.target,B=Math.abs(U)>Math.abs(G)?"h":"v";if("touches"in M&&B==="h"&&K.type==="range")return!1;var ne=iK(B,K);if(!ne)return!0;if(ne?Y=B:(Y=B==="v"?"h":"v",ne=iK(B,K)),!ne)return!1;if(!r.current&&"changedTouches"in M&&(U||G)&&(r.current=Y),!Y)return!0;var pe=r.current||Y;return jve(pe,C,M,pe==="h"?U:G,!0)},[]),d=Cn.useCallback(function(M){var C=M;if(!(!yh.length||yh[yh.length-1]!==i)){var T="deltaY"in C?Eve(C):fk(C),D=t.current.filter(function(Y){return Y.name===C.type&&(Y.target===C.target||C.target===Y.shadowParent)&&vSt(Y.delta,T)})[0];if(D&&D.should){C.cancelable&&C.preventDefault();return}if(!D){var U=(u.current.shards||[]).map(Pve).filter(Boolean).filter(function(Y){return Y.contains(C.target)}),G=U.length>0?c(C,U[0]):!u.current.noIsolation;G&&C.cancelable&&C.preventDefault()}}},[]),g=Cn.useCallback(function(M,C,T,D){var U={name:M,delta:C,target:T,should:D,shadowParent:wSt(T)};t.current.push(U),setTimeout(function(){t.current=t.current.filter(function(G){return G!==U})},1)},[]),O=Cn.useCallback(function(M){n.current=fk(M),r.current=void 0},[]),S=Cn.useCallback(function(M){g(M.type,Eve(M),M.target,c(M,e.lockRef.current))},[]),I=Cn.useCallback(function(M){g(M.type,fk(M),M.target,c(M,e.lockRef.current))},[]);Cn.useEffect(function(){return yh.push(i),e.setCallbacks({onScrollCapture:S,onWheelCapture:S,onTouchMoveCapture:I}),document.addEventListener("wheel",d,Jd),document.addEventListener("touchmove",d,Jd),document.addEventListener("touchstart",O,Jd),function(){yh=yh.filter(function(M){return M!==i}),document.removeEventListener("wheel",d,Jd),document.removeEventListener("touchmove",d,Jd),document.removeEventListener("touchstart",O,Jd)}},[]);var R=e.removeScrollBar,k=e.inert;return Cn.createElement(Cn.Fragment,null,k?Cn.createElement(i,{styles:ySt(o)}):null,R?Cn.createElement(nK,{gapMode:e.gapMode}):null)}function wSt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var S4r=qd($P,kve);var hk=E(L());var OSt=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},bh=new WeakMap,dk=new WeakMap,mk={},aK=0,Cve=function(e){return e&&(e.host||Cve(e.parentNode))},xSt=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=Cve(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},_St=function(e,t,n,r){var o=xSt(t,Array.isArray(e)?e:[e]);mk[n]||(mk[n]=new WeakMap);var i=mk[n],u=[],c=new Set,d=new Set(o),g=function(S){!S||c.has(S)||(c.add(S),g(S.parentNode))};o.forEach(g);var O=function(S){!S||d.has(S)||Array.prototype.forEach.call(S.children,function(I){if(c.has(I))O(I);else try{var R=I.getAttribute(r),k=R!==null&&R!=="false",M=(bh.get(I)||0)+1,C=(i.get(I)||0)+1;bh.set(I,M),i.set(I,C),u.push(I),M===1&&k&&dk.set(I,!0),C===1&&I.setAttribute(n,"true"),k||I.setAttribute(r,"true")}catch(T){console.error("aria-hidden: cannot operate on ",I,T)}})};return O(t),c.clear(),aK++,function(){u.forEach(function(S){var I=bh.get(S)-1,R=i.get(S)-1;bh.set(S,I),i.set(S,R),I||(dk.has(S)||S.removeAttribute(r),dk.delete(S)),R||S.removeAttribute(n)}),aK--,aK||(bh=new WeakMap,bh=new WeakMap,dk=new WeakMap,mk={})}},Ave=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||OSt(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),_St(r,o,n,"aria-hidden")):function(){return null}};var Mve=E(L());var SSt=$d(),ISt=` + [`+ek+`] { pointer-events: none !important; } -`,Sve=function(){return _ve.createElement(mSt,{styles:hSt})};var nf=E(D()),Ive=function(e){return"current"in e?e.current:e};function jve(e){var t=e.setLockProps,n=e.onEscapeKey,r=e.onClickOutside,o=e.shards,i=e.onActivation,u=e.onDeactivation,c=e.noIsolation,d=(0,nf.useState)(void 0),g=d[0],O=d[1],S=(0,nf.useRef)(null),I=(0,nf.useRef)(0);return dk.useEffect(function(){var R=function(T){T.defaultPrevented||(T.code==="Escape"||T.key==="Escape"||T.keyCode===27)&&n&&n(T)},k=function(T){T.defaultPrevented||T.target===S.current||T instanceof MouseEvent&&T.button!==0||o&&o.map(Ive).some(function(N){return N&&N.contains(T.target)||N===T.target})||r&&r(T)},A=function(T){k(T),I.current=T.touches.length},M=function(T){I.current=T.touches.length};if(g)return document.addEventListener("keydown",R),document.addEventListener("mousedown",k),document.addEventListener("touchstart",A),document.addEventListener("touchend",M),function(){document.removeEventListener("keydown",R),document.removeEventListener("mousedown",k),document.removeEventListener("touchstart",A),document.removeEventListener("touchend",M)}},[g,r,n]),(0,nf.useEffect)(function(){if(g)return i&&i(g),function(){u&&u()}},[!!g]),(0,nf.useEffect)(function(){var R=function(){return null},k=!1,A=function(T){c||(R=xve(hge([T],(o||[]).map(Ive)),document.body,ZP)),O(function(){return T})},M=function(){R(),k||O(null)};return t({onMouseDown:function(T){S.current=T.target},onTouchStart:function(T){S.current=T.target},onActivation:A,onDeactivation:M}),function(){k=!0,t(!1)}},[]),dk.createElement(Sve,null)}var Eve=Bd(QP,jve);var gSt=function(e){return Qx.createElement(Eve,Ui({},e))},rK=Qx.forwardRef(function(e,t){return Qx.createElement(zge,Ui({},e,{ref:t,sideCar:gSt}))});function mk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?mk=function(n){return typeof n}:mk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},mk(e)}var vSt=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock"];function Pve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function kve(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function wSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hk(e){return hk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},hk(e)}function nu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ud=function(e){xSt(n,e);var t=_St(n);function n(){var r;wSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bk(e){return bk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},bk(e)}function yk(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var iK=function(e){PSt(n,e);var t=kSt(n);function n(){var r;ESt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ok(e){return Ok=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Ok(e)}function Jd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xk=function(e){DSt(n,e);var t=LSt(n);function n(r){var o;return RSt(this,n),o=t.call(this,r),Jd($d(o),"id",void 0),Jd($d(o),"capturedDownIds",void 0),Jd($d(o),"onClickOutside",function(i){var u=o.props,c=u.isDisabled,d=u.onOutsideClick;if(c){o.capturedDownIds=[];return}var g=i;if(g.euiGeneratedBy&&g.euiGeneratedBy.includes(o.id)||o.capturedDownIds.includes(o.id)){o.capturedDownIds=[];return}return o.capturedDownIds=[],d(g)}),Jd($d(o),"onChildClick",function(i,u){i.nativeEvent.hasOwnProperty("euiGeneratedBy")?i.nativeEvent.euiGeneratedBy.push(o.id):i.nativeEvent.euiGeneratedBy=[o.id],u&&u(i)}),Jd($d(o),"onChildMouseDown",function(i){o.onChildClick(i,function(u){var c=u.nativeEvent;o.capturedDownIds=c.euiGeneratedBy,o.props.onMouseDown&&o.props.onMouseDown(u),o.props.onTouchStart&&o.props.onTouchStart(u)})}),Jd($d(o),"onChildMouseUp",function(i){o.onChildClick(i,function(u){o.props.onMouseUp&&o.props.onMouseUp(u),o.props.onTouchEnd&&o.props.onTouchEnd(u)})}),o.id=_r()(),o.capturedDownIds=[],o}return zSt(n,[{key:"componentDidMount",value:function(){document.addEventListener("mouseup",this.onClickOutside),document.addEventListener("touchend",this.onClickOutside)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mouseup",this.onClickOutside),document.removeEventListener("touchend",this.onClickOutside)}},{key:"render",value:function(){var o=Rve(Rve({},this.props.children.props),{onMouseDown:this.onChildMouseDown,onTouchStart:this.onChildMouseDown,onMouseUp:this.onChildMouseUp,onTouchEnd:this.onChildMouseUp}),i=yh.Children.only(this.props.children);return(0,yh.cloneElement)(i,o)}}]),n}(yh.Component);xk.propTypes={children:of.default.element.isRequired,onOutsideClick:of.default.func.isRequired,isDisabled:of.default.bool,onMouseDown:of.default.func,onMouseUp:of.default.func,onTouchStart:of.default.func,onTouchEnd:of.default.func};var t6r=E(D()),Zx=E(rt());var WSt="m",Dve=function(t){var n=t.euiTheme,r=wx(t,"plain"),o=n.size[WSt];return{euiPopoverArrow:Oe("position:absolute;",wF(0,0),"&:before{content:'';position:absolute;",wF(0,0),";};label:euiPopoverArrow;"),top:Oe("&:before{",Zr.bottom,":-",o,";",Zr["border-left"],":",o," solid transparent;",Zr["border-right"],":",o," solid transparent;",Zr["border-top"],":",o," solid ",r,";};label:top;"),bottom:Oe("&:before{",Zr.top,":-",o,";",Zr["border-left"],":",o," solid transparent;",Zr["border-right"],":",o," solid transparent;",Zr["border-bottom"],":",o," solid ",r,";};label:bottom;"),left:Oe("&:before{",Zr.top,":50%;",Zr.right,":-",o,";",Zr["border-top"],":",o," solid transparent;",Zr["border-bottom"],":",o," solid transparent;",Zr["border-left"],":",o," solid ",r,";};label:left;"),right:Oe("&:before{",Zr.top,":50%;",Zr.left,":-",o,";",Zr["border-top"],":",o," solid transparent;",Zr["border-bottom"],":",o," solid transparent;",Zr["border-right"],":",o," solid ",r,";};label:right;")}};var BSt=["children","position"];function lK(){return lK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _k=function(t){var n=t.children,r=t.position,o=HSt(t,BSt),i=cr(),u=Dve(i),c=[u.euiPopoverArrow,u[r]];return a("div",lK({"data-popover-arrow":r,css:c},o),n)};_k.propTypes={className:Zx.default.string,"aria-label":Zx.default.string,"data-test-subj":Zx.default.string,position:Zx.default.any.isRequired};var Lve=function(){return{euiPopover:Oe("position:relative;vertical-align:middle;",st("max-width","100%"),";;label:euiPopover;")}};var jk=E(D()),ai=E(rt()),Hve=E(yt());var y6r=E(D()),pa=E(rt()),Fve=E(yt());var qSt={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},USt={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},Nve=function(t){var n=t.euiTheme;return{euiPanel:USt,grow:qSt,hasShadow:Oe(tu(t,"m"),";;label:hasShadow;"),hasBorder:Oe("border:",n.border.thin,";;label:hasBorder;"),radius:{none:Oe(";label:none;"),m:Oe("border-radius:",n.border.radius.medium,";;label:m;")},isClickable:Oe(la,"{transition:box-shadow ",n.animation.fast," ",n.animation.resistance,",transform ",n.animation.fast," ",n.animation.resistance,";}&:enabled{display:block;width:100%;",Ta("left"),";}&:hover,&:focus{",tu(t,"l"),";transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};var $St=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function Sk(){return Sk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sK={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},I6r=kt(sK);var ii=function(t){var n=t.children,r=t.className,o=t.paddingSize,i=o===void 0?"m":o,u=t.borderRadius,c=u===void 0?"m":u,d=t.color,g=d===void 0?"plain":d,O=t.hasShadow,S=O===void 0?!0:O,I=t.hasBorder,R=I===void 0?!1:I,k=t.grow,A=k===void 0?!0:k,M=t.panelRef,T=t.element,N=GSt(t,$St),U=cr(),X=!R&&g==="plain",Y=g==="plain"||g==="transparent",K=Nve(U),H=[K.euiPanel,A&&K.grow,K.radius[c],w1e()[i],y1e()[g],X&&S===!0&&K.hasShadow,Y&&R===!0&&K.hasBorder,N.onClick&&K.isClickable],ne=(0,Fve.default)("euiPanel","euiPanel--".concat(g),JSt({},"euiPanel--".concat(sK[i]),sK[i]),r);return N.onClick&&T!=="div"?a("button",Sk({ref:M,className:ne,css:H},N),n):a("div",Sk({ref:M,className:ne,css:H},N),n)};ii.propTypes={element:pa.default.oneOfType([pa.default.oneOf(["button"]),pa.default.oneOf(["div"])]),hasShadow:pa.default.bool,hasBorder:pa.default.bool,paddingSize:pa.default.any,borderRadius:pa.default.any,grow:pa.default.bool,panelRef:pa.default.any,color:pa.default.any,className:pa.default.string,"aria-label":pa.default.string,"data-test-subj":pa.default.string};var Ik="s",Wve=function(t){var n=t.euiTheme;return{euiPopover__panel:Oe("position:absolute;",st("min-width","".concat(n.base*7,"px")),";",st("max-width","calc(100vw - ".concat(n.size.xl,")")),";backface-visibility:hidden;pointer-events:none;opacity:0;transform:translateY(0) translateX(0) translateZ(0);",OX(t,{property:"filter"})," &:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:Oe("opacity:1;pointer-events:auto;",la,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,",transform ",n.animation.bounce," calc(",n.animation.slow," + 100ms);};label:isOpen;"),top:Oe("transform:translateY(",n.size[Ik],") translateZ(0);;label:top;"),bottom:Oe("transform:translateY(-",n.size[Ik],") translateZ(0);;label:bottom;"),left:Oe("transform:translateX(",n.size[Ik],") translateZ(0);;label:left;"),right:Oe("transform:translateX(-",n.size[Ik],") translateZ(0);;label:right;"),attached:{isOpen:Oe("filter:none;",la,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,";};label:isOpen;"),top:Oe(pge(t),";;label:top;"),bottom:Oe(tu(t,"m"),";;label:bottom;"),left:Oe(";label:left;"),right:Oe(";label:right;")}}};var KSt=["children","className","isOpen","isAttached","position"];function uK(){return uK=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bve=(0,jk.createContext)({paddingSize:"l"}),bh=function(t){var n=t.children,r=t.className,o=t.isOpen,i=t.isAttached,u=t.position,c=rIt(t,KSt),d=(0,jk.useContext)(Bve);c.paddingSize&&(d.paddingSize=c.paddingSize);var g=cr(),O=(0,Hve.default)("euiPopover__panel",r),S=Wve(g),I=[S.euiPopover__panel,o&&S.isOpen,o&&u&&S[u]];return i&&(I=[].concat(YSt(I),[o&&S.attached.isOpen,u&&S.attached[u]])),a(Bve.Provider,{value:d},a(ii,uK({className:O,css:I,"data-popover-panel":!0,"data-popover-open":o||void 0},c),n))};bh.propTypes={element:ai.default.oneOf(["div"]),hasShadow:ai.default.bool,hasBorder:ai.default.bool,paddingSize:ai.default.any,borderRadius:ai.default.any,grow:ai.default.bool,panelRef:ai.default.any,color:ai.default.any,className:ai.default.string,"aria-label":ai.default.string,"data-test-subj":ai.default.string,isOpen:ai.default.bool,isAttached:ai.default.bool,position:ai.default.oneOfType([ai.default.any.isRequired,ai.default.oneOf([null])])};function Pk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Pk=function(n){return typeof n}:Pk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Pk(e)}var oIt=["anchorClassName","anchorPosition","button","buttonRef","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","zIndex","attachToAnchor","display","offset","onTrapDeactivation","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function wh(){return wh=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Vve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Ek(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ck(e){return Ck=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Ck(e)}function lo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gve(e,t){return bIt(e)||yIt(e,t)||Xve(e,t)||vIt()}function vIt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Xve(e,t){if(e){if(typeof e=="string")return fK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fK(e,t)}}function fK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oh=function(t){var n=t.size,r=n===void 0?"m":n,o=t.children,i=t.className,u=t.textTransform,c=IIt(t,xIt),d=cr(),g=whe(d),O=[g.euiTitle,u?g[u]:void 0,g[r]],S=(0,Zve.default)("euiTitle",i,o.props.className),I=_It({css:O,className:S},c);return Lp(o,I)};Oh.propTypes={className:af.default.string,"aria-label":af.default.string,"data-test-subj":af.default.string,children:af.default.element.isRequired,size:af.default.any,textTransform:af.default.any,id:af.default.string};var t8=E(D()),Nt=E(rt()),Ak=E(yt());var fwr=E(D()),an=E(rt()),eye=E(yt());var EIt=["className","isSelected","isDisabled","color","children"];function dK(){return dK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mK=function(t){var n=t.className,r=t.isSelected,o=r===void 0?!1:r,i=t.isDisabled,u=t.color,c=t.children,d=PIt(t,EIt),g=CIt(o,i,c),O=(0,eye.default)("euiCardSelect","euiCardSelect--".concat(hK(u,o)),n);return a(Vi,dK({className:O,color:u||"text",size:"xs",isDisabled:i,iconType:o?"check":void 0,role:"switch","aria-checked":o},d),g)};mK.propTypes={href:an.default.string,onClick:an.default.func,color:an.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:an.default.oneOf(["xs","s","m"]),flush:an.default.oneOf(["left","right","both"]),isDisabled:an.default.bool,isLoading:an.default.bool,isSelected:an.default.bool,target:an.default.string,rel:an.default.string,type:an.default.oneOf(["button","submit"]),buttonRef:an.default.any,contentProps:an.default.any,iconType:an.default.oneOfType([an.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,an.default.string.isRequired,an.default.elementType.isRequired]),iconSide:an.default.oneOf(["left","right"]),textProps:an.default.shape({className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,ref:an.default.any,"data-text":an.default.string}),iconSize:an.default.oneOf(["s","m"]),className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string};function CIt(e,t,n){if(n)return n;var r;return e?r=a(bt,{token:"euiCardSelect.selected",default:"Selected"}):t?r=a(bt,{token:"euiCardSelect.unavailable",default:"Unavailable"}):r=a(bt,{token:"euiCardSelect.select",default:"Select"}),r}function hK(e,t){var n;return e?n=e:t?n="success":n="text",n}var AIt=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"];function e8(){return e8=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tye={left:"euiCard--leftAligned",center:"euiCard--centerAligned",right:"euiCard--rightAligned"},Pwr=kt(tye),rye={vertical:"",horizontal:"euiCard--horizontal"},kwr=kt(rye),fa=function(t){var n=t.className,r=t.description,o=t.isDisabled,i=t.title,u=t.titleElement,c=u===void 0?"span":u,d=t.titleSize,g=d===void 0?"s":d,O=t.icon,S=t.image,I=t.children,R=t.footer,k=t.onClick,A=t.href,M=t.rel,T=t.target,N=t.textAlign,U=N===void 0?"center":N,X=t.betaBadgeProps,Y=t.layout,K=Y===void 0?"vertical":Y,H=t.selectable,ne=t.display,pe=t.paddingSize,ye=MIt(t,AIt),fe=!A||Ei(A),ue=o||!fe,xe=!ue&&(k||A||H&&!H.isDisabled),me=null,We=function(Sr){me&&me!==Sr.target&&me.click()};if(K==="horizontal"&&(S||R||U!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var $e=H?"euiCard--isSelectable--".concat(hK(H.color,H.isSelected)):void 0,Ge=(0,Ak.default)("euiCard",tye[U],rye[K],{"euiCard--isClickable":xe,"euiCard--hasBetaBadge":X?.label,"euiCard--hasIcon":O,"euiCard--isSelectable":H,"euiCard-isSelected":H?.isSelected,"euiCard-isDisabled":ue},$e,n),Be=Ju(),et=r?"".concat(Be,"Description"):"",ut;S&&K==="vertical"&&((0,t8.isValidElement)(S)||typeof S=="string"?ut=a("div",{className:"euiCard__image"},(0,t8.isValidElement)(S)?S:a("img",{src:S,alt:""})):ut=null);var Qe;O&&(Qe=t8.default.cloneElement(O,{className:(0,Ak.default)(O.props.className,"euiCard__icon")}));var Ht;(ut||Qe)&&(Ht=a("div",{className:"euiCard__top"},ut,Qe));var Xe,Ft="";X!=null&&X.label&&(Ft="".concat(Be,"BetaBadge"),Xe=a("span",{className:"euiCard__betaBadgeWrapper"},a(BP,e8({id:Ft},X,{className:(0,Ak.default)("euiCard__betaBadge",X?.className)}))),pe=pe||"l"),H&&ue&&H.isDisabled===void 0&&(H.isDisabled=ue);var Vt;H&&(Vt=a(mK,e8({"aria-describedby":"".concat(Be,"Title ").concat(et)},H,{buttonRef:function(Sr){me=Sr}})));var lt;!ue&&A?lt=a("a",{className:"euiCard__titleAnchor",onClick:k,href:A,target:T,"aria-describedby":et,rel:yo({href:A,target:T,rel:M}),ref:function(Sr){me=Sr}},i):ue||k?lt=a("button",{className:"euiCard__titleButton",onClick:k,disabled:ue,"aria-describedby":"".concat(Ft," ").concat(et),ref:function(Sr){me=Sr}},i):lt=i;var Ct=c;return a(ii,e8({element:"div",className:Ge,onClick:xe?We:void 0,color:ue?"subdued":ne,hasShadow:!(ue||ne),hasBorder:ne?!1:void 0,paddingSize:pe},ye),Ht,a("div",{className:"euiCard__content"},a(Oh,{id:"".concat(Be,"Title"),className:"euiCard__title",size:g},a(Ct,null,lt)),r&&a(Pt,{id:et,size:"s",className:"euiCard__description"},a("p",null,r)),I&&a("div",{className:"euiCard__children"},I)),Xe,K==="vertical"&&R&&a("div",{className:"euiCard__footer"},R),Vt)};fa.propTypes={layout:Nt.default.oneOfType([Nt.default.oneOf(["vertical"]),Nt.default.oneOf(["horizontal"]).isRequired]),textAlign:Nt.default.oneOf(["left","center","right"]),footer:Nt.default.node,image:Nt.default.oneOfType([Nt.default.string.isRequired,Nt.default.element.isRequired]),title:Nt.default.any.isRequired,titleElement:Nt.default.oneOf(["h2","h3","h4","h5","h6","span"]),titleSize:Nt.default.oneOf(["s","xs"]),description:Nt.default.any,icon:Nt.default.oneOfType([Nt.default.element.isRequired,Nt.default.oneOf([null])]),children:Nt.default.node,onClick:Nt.default.oneOfType([Nt.default.func.isRequired,Nt.default.func.isRequired]),isDisabled:Nt.default.bool,href:Nt.default.string,target:Nt.default.string,rel:Nt.default.string,betaBadgeProps:Nt.default.any,display:Nt.default.any,paddingSize:Nt.default.any,selectable:Nt.default.shape({href:Nt.default.string,onClick:Nt.default.func,color:Nt.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Nt.default.oneOf(["xs","s","m"]),flush:Nt.default.oneOf(["left","right","both"]),isDisabled:Nt.default.bool,isLoading:Nt.default.bool,isSelected:Nt.default.bool,target:Nt.default.string,rel:Nt.default.string,type:Nt.default.oneOf(["button","submit"]),buttonRef:Nt.default.any,contentProps:Nt.default.any,iconType:Nt.default.oneOfType([Nt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Nt.default.string.isRequired,Nt.default.elementType.isRequired]),iconSide:Nt.default.oneOf(["left","right"]),textProps:Nt.default.shape({className:Nt.default.string,"aria-label":Nt.default.string,"data-test-subj":Nt.default.string,ref:Nt.default.any,"data-text":Nt.default.string}),iconSize:Nt.default.oneOf(["s","m"]),className:Nt.default.string,"aria-label":Nt.default.string,"data-test-subj":Nt.default.string}),hasBorder:Nt.default.bool};var oye=E(D()),li=E(rt()),bK=E(yt());function Mk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Mk=function(n){return typeof n}:Mk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Mk(e)}var RIt=["className","id","checked","label","onChange","type","disabled","compressed","indeterminate","inputRef","labelProps"];function Tk(){return Tk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function LIt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Rk(e){return Rk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Rk(e)}function yK(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var iye={inList:"euiCheckbox--inList"},Rwr=kt(iye),xh=function(e){FIt(n,e);var t=WIt(n);function n(){var r;LIt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sye={none:null,xs:"euiFlexGroup--gutterExtraSmall",s:"euiFlexGroup--gutterSmall",m:"euiFlexGroup--gutterMedium",l:"euiFlexGroup--gutterLarge",xl:"euiFlexGroup--gutterExtraLarge"},Bwr=kt(sye),uye={stretch:null,flexStart:"euiFlexGroup--alignItemsFlexStart",flexEnd:"euiFlexGroup--alignItemsFlexEnd",center:"euiFlexGroup--alignItemsCenter",baseline:"euiFlexGroup--alignItemsBaseline"},Hwr=kt(uye),cye={flexStart:null,flexEnd:"euiFlexGroup--justifyContentFlexEnd",center:"euiFlexGroup--justifyContentCenter",spaceBetween:"euiFlexGroup--justifyContentSpaceBetween",spaceAround:"euiFlexGroup--justifyContentSpaceAround",spaceEvenly:"euiFlexGroup--justifyContentSpaceEvenly"},Vwr=kt(cye),pye={row:"euiFlexGroup--directionRow",rowReverse:"euiFlexGroup--directionRowReverse",column:"euiFlexGroup--directionColumn",columnReverse:"euiFlexGroup--directionColumnReverse"},qwr=kt(pye),$It=function(t){return["div","span"].includes(t)},_n=(0,aye.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.gutterSize,i=o===void 0?"l":o,u=e.alignItems,c=u===void 0?"stretch":u,d=e.responsive,g=d===void 0?!0:d,O=e.justifyContent,S=O===void 0?"flexStart":O,I=e.direction,R=I===void 0?"row":I,k=e.wrap,A=k===void 0?!1:k,M=e.component,T=M===void 0?"div":M,N=qIt(e,VIt),U=(0,lye.default)("euiFlexGroup",sye[i],uye[c],cye[S],pye[R],{"euiFlexGroup--responsive":g,"euiFlexGroup--wrap":A},r);if(!$It(T))throw new Error("".concat(T," is not a valid element type. Use `div` or `span`."));return T==="span"?a("span",zk({className:U,ref:t},N),n):a("div",zk({className:U,ref:t},N),n)});_n.propTypes={alignItems:ps.default.oneOf(["stretch","flexStart","flexEnd","center","baseline"]),component:ps.default.oneOf(["div","span"]),direction:ps.default.oneOf(["row","rowReverse","column","columnReverse"]),gutterSize:ps.default.oneOf(["none","xs","s","m","l","xl"]),justifyContent:ps.default.oneOf(["flexStart","flexEnd","center","spaceBetween","spaceAround","spaceEvenly"]),responsive:ps.default.bool,wrap:ps.default.bool,className:ps.default.string,"aria-label":ps.default.string,"data-test-subj":ps.default.string};_n.displayName="EuiFlexGroup";var $wr=E(D()),_h=E(rt()),fye=E(yt());var JIt=["children","className","grow","component"];function wK(){return wK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dye=[1,2,3,4,5,6,7,8,9,10],wt=function(t){var n=t.children,r=t.className,o=t.grow,i=o===void 0?!0:o,u=t.component,c=u===void 0?"div":u,d=XIt(t,JIt);YIt(i);var g=(0,fye.default)("euiFlexItem",GIt({"euiFlexItem--flexGrowZero":!i},"euiFlexItem--flexGrow".concat(i),typeof i=="number"?dye.indexOf(i)>=0:void 0),r);return a(c,wK({className:g},d),n)};wt.propTypes={className:_h.default.string,"aria-label":_h.default.string,"data-test-subj":_h.default.string,grow:_h.default.oneOf([1,2,3,4,5,6,7,8,9,10,!0,!1,null]),component:_h.default.any};function YIt(e){var t=[null,void 0,!0,!1].concat(dye);if(t.indexOf(e)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 1 and 10, received `".concat(e,"`"))}var Ih=E(D()),$t=E(rt()),EK=E(yt());var Bk=E(D()),hn=E(rt());var Zwr=E(D()),r8=E(rt()),mye=E(yt());var QIt=["className","onClick","size"];function OK(){return OK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ejt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hye={s:"euiFormControlLayoutClearButton--small",m:null},iOr=kt(hye),xK=function(t){var n=t.className,r=t.onClick,o=t.size,i=o===void 0?"m":o,u=ZIt(t,QIt),c=(0,mye.default)("euiFormControlLayoutClearButton",hye[i],n);return a(bt,{token:"euiFormControlLayoutClearButton.label",default:"Clear input"},function(d){return a("button",OK({type:"button",className:c,onClick:r,"aria-label":d},u),a(Wt,{className:"euiFormControlLayoutClearButton__icon",type:"cross"}))})};xK.propTypes={className:r8.default.string,"aria-label":r8.default.string,"data-test-subj":r8.default.string,size:r8.default.any};var lOr=E(D()),Pl=E(rt()),gye=E(yt());var tjt=["className","onClick","type","iconRef","size","color"];function Dk(){return Dk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function njt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lk=function(t){var n=t.className,r=t.onClick,o=t.type,i=t.iconRef,u=t.size,c=t.color,d=rjt(t,tjt),g=(0,gye.default)("euiFormControlLayoutCustomIcon",n,{"euiFormControlLayoutCustomIcon--clickable":r});return r?a("button",Dk({type:"button",onClick:r,className:g,ref:i},d),a(Wt,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:c})):a("span",Dk({className:g,ref:i},d),a(Wt,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:c}))};Lk.propTypes={className:Pl.default.string,"aria-label":Pl.default.string,"data-test-subj":Pl.default.string,type:Pl.default.oneOfType([Pl.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Pl.default.string.isRequired,Pl.default.elementType.isRequired]).isRequired,size:Pl.default.any,iconRef:Pl.default.oneOfType([Pl.default.string.isRequired,Pl.default.func.isRequired])};function Nk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Nk=function(n){return typeof n}:Nk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Nk(e)}var ojt=["ref","side"];function Fk(){return Fk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ajt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function ljt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Wk(e){return Wk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Wk(e)}function yye(e){return!!e&&e.hasOwnProperty("type")}var SK=function(e){ujt(n,e);var t=cjt(n);function n(){return ljt(this,n),t.apply(this,arguments)}return sjt(n,[{key:"render",value:function(){var o=this.props,i=o.icon,u=o.isInvalid,c=o.isDropdown,d=yye(i)&&i.side?i.side:"left",g=this.renderCustomIcon(),O=this.renderLoadingSpinner(),S=this.renderClearButton(),I=this.renderInvalidIcon(),R=this.renderDropdownIcon(),k;g&&d==="left"&&(k=a("div",{className:"euiFormControlLayoutIcons"},g));var A;return(S||O||u||c||g&&d==="right")&&(A=a("div",{className:"euiFormControlLayoutIcons euiFormControlLayoutIcons--right"},S,O,I,d==="right"?g:void 0,R)),a(Bk.Fragment,null,k,A)}},{key:"renderCustomIcon",value:function(){var o=this.props,i=o.icon,u=o.compressed;if(!i)return null;var c=yye(i)?i:{type:i},d=c.ref,g=c.side,O=ijt(c,ojt);return a(Lk,Fk({size:u?"s":"m",iconRef:d},O))}},{key:"renderDropdownIcon",value:function(){var o=this.props,i=o.isDropdown,u=o.compressed;return i?a(Lk,{size:u?"s":"m",type:"arrowDown"}):null}},{key:"renderLoadingSpinner",value:function(){var o=this.props,i=o.isLoading,u=o.compressed;return i?a(Zt,{size:u?"s":"m"}):null}},{key:"renderClearButton",value:function(){var o=this.props,i=o.clear,u=o.compressed;return i?a(xK,Fk({size:u?"s":"m"},i)):null}},{key:"renderInvalidIcon",value:function(){var o=this.props,i=o.isInvalid,u=o.compressed;return i?a(Wt,{size:u?"s":"m",color:"danger",type:"alert"}):null}}]),n}(Bk.Component);SK.propTypes={icon:hn.default.oneOfType([hn.default.oneOfType([hn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,hn.default.string.isRequired,hn.default.elementType.isRequired]).isRequired,hn.default.shape({type:hn.default.oneOfType([hn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,hn.default.string.isRequired,hn.default.elementType.isRequired]).isRequired,side:hn.default.any,color:hn.default.oneOfType([hn.default.string.isRequired,hn.default.any.isRequired]),ref:hn.default.oneOfType([hn.default.string.isRequired,hn.default.func.isRequired])}).isRequired]),clear:hn.default.shape({className:hn.default.string,"aria-label":hn.default.string,"data-test-subj":hn.default.string,size:hn.default.any}),isLoading:hn.default.bool,isInvalid:hn.default.bool,isDropdown:hn.default.bool,compressed:hn.default.bool};var bOr=E(D()),da=E(rt()),bye=E(yt());var mjt=["type","isFocused","isInvalid","isDisabled","children","className"];function Hk(){return Hk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sh=function(t){var n=t.type,r=n===void 0?"label":n,o=t.isFocused,i=t.isInvalid,u=t.isDisabled,c=t.children,d=t.className,g=hjt(t,mjt),O=(0,bye.default)("euiFormLabel",d,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":u});return r==="legend"?a("legend",Hk({className:O},g),c):a("label",Hk({className:O},g),c)};Sh.propTypes={type:da.default.oneOfType([da.default.oneOfType([da.default.oneOf(["label"]),da.default.oneOf(["label","legend"])]),da.default.oneOfType([da.default.oneOf(["legend"]).isRequired,da.default.oneOf(["label","legend"])])]),isFocused:da.default.bool,isInvalid:da.default.bool,isDisabled:da.default.bool,className:da.default.string,"aria-label":da.default.string,"data-test-subj":da.default.string};function Vk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Vk=function(n){return typeof n}:Vk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Vk(e)}var vjt=["children","icon","clear","fullWidth","isLoading","isDisabled","compressed","className","prepend","append","readOnly","isInvalid","isDropdown","inputId"];function IK(){return IK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function wjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qk(e){return qk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},qk(e)}var jh=function(e){xjt(n,e);var t=_jt(n);function n(){return wjt(this,n),t.apply(this,arguments)}return Ojt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.icon,c=o.clear,d=o.fullWidth,g=o.isLoading,O=o.isDisabled,S=o.compressed,I=o.className,R=o.prepend,k=o.append,A=o.readOnly,M=o.isInvalid,T=o.isDropdown,N=o.inputId,U=yjt(o,vjt),X=(0,EK.default)("euiFormControlLayout",{"euiFormControlLayout--fullWidth":d,"euiFormControlLayout--compressed":S,"euiFormControlLayout--readOnly":A,"euiFormControlLayout--group":R||k,"euiFormControlLayout-isDisabled":O},I),Y=this.renderSideNode("prepend",R,N),K=this.renderSideNode("append",k,N);return a("div",IK({className:X},U),Y,a("div",{className:"euiFormControlLayout__childrenWrapper"},i,a(SK,{icon:u,clear:c,compressed:S,isLoading:g,isInvalid:M,isDropdown:!A&&!O&&T})),K)}},{key:"renderSideNode",value:function(o,i,u){var c=this;if(i){if(typeof i=="string")return this.createFormLabel(o,i,u);var d=Ih.default.Children.map(i,function(g,O){return typeof g=="string"?c.createFormLabel(o,g,u):c.createSideNode(o,g,O)});return d}}},{key:"createFormLabel",value:function(o,i,u){return a(Sh,{htmlFor:u,className:"euiFormControlLayout__".concat(o)},i)}},{key:"createSideNode",value:function(o,i,u){return(0,Ih.cloneElement)(i,{className:(0,EK.default)("euiFormControlLayout__".concat(o),i.props.className),key:u})}}]),n}(Ih.Component);jh.propTypes={className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,prepend:$t.default.oneOfType([$t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired,$t.default.arrayOf($t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired).isRequired]),append:$t.default.oneOfType([$t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired,$t.default.arrayOf($t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired).isRequired]),children:$t.default.node,icon:$t.default.oneOfType([$t.default.oneOfType([$t.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$t.default.string.isRequired,$t.default.elementType.isRequired]).isRequired,$t.default.shape({type:$t.default.oneOfType([$t.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$t.default.string.isRequired,$t.default.elementType.isRequired]).isRequired,side:$t.default.any,color:$t.default.oneOfType([$t.default.string.isRequired,$t.default.any.isRequired]),ref:$t.default.oneOfType([$t.default.string.isRequired,$t.default.func.isRequired])}).isRequired]),clear:$t.default.shape({className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,size:$t.default.any}),fullWidth:$t.default.bool,isLoading:$t.default.bool,isDisabled:$t.default.bool,compressed:$t.default.bool,readOnly:$t.default.bool,isInvalid:$t.default.bool,isDropdown:$t.default.bool,inputId:$t.default.string};var ou=E(D()),Gd=E(rt());function Ejt(e){return e!=null&&e.hasOwnProperty("current")}var Uk=function(t){var n=t.isInvalid,r=t.children,o=(0,ou.useRef)(null),i=ou.Children.only(r),u=i.ref,c=(0,ou.useCallback)(function(d){o.current=d,typeof u=="function"?u(d):Ejt(u)&&(u.current=d)},[u]);return(0,ou.useEffect)(function(){o.current===null||typeof o.current.setCustomValidity!="function"||(n?o.current.setCustomValidity("Invalid"):o.current.setCustomValidity(""))}),(0,ou.cloneElement)(i,{ref:c,"aria-invalid":n})};Uk.propTypes={className:Gd.default.string,"aria-label":Gd.default.string,"data-test-subj":Gd.default.string,isInvalid:Gd.default.bool,children:Gd.default.shape({ref:Gd.default.any}).isRequired};function Oye(e){var t=e.icon,n=e.clear,r=e.isLoading,o=e.isInvalid,i=e.isDropdown,u=[t,n,o,r,i].filter(function(c){return c===!0}).length;return u>0?"euiFormControlLayout--".concat(u,"icons"):void 0}var _ye=E(D()),Ur=E(rt()),Sye=E(yt());var Pjt={isEventSupported:function(t,n){return"on".concat(t)in n}},PK=Object.freeze(Pjt);function $k(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$k=function(n){return typeof n}:$k=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},$k(e)}var kjt=["className","id","name","placeholder","isInvalid","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function CK(){return CK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ajt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Mjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function xye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Jk(e){return Jk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Jk(e)}function Kd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var kK=!1,n8=function(e){Rjt(n,e);var t=zjt(n);function n(){var r;Mjt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xk=function(t){var n=t.children,r=t.className,o=Fjt(t,Njt),i=(0,Iye.default)("euiFormErrorText",r);return a("div",MK({className:i,"aria-live":"polite"},o),n)};Xk.propTypes={className:Gk.default.string,"aria-label":Gk.default.string,"data-test-subj":Gk.default.string};var e7r=E(D()),Kk=E(rt()),jye=E(yt());var Bjt=["children","className"];function TK(){return TK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yk=function(t){var n=t.children,r=t.className,o=Hjt(t,Bjt),i=(0,jye.default)("euiFormHelpText",r);return a("div",TK({className:i},o),n)};Yk.propTypes={className:Kk.default.string,"aria-label":Kk.default.string,"data-test-subj":Kk.default.string};var lf=E(D()),gn=E(rt()),LK=E(yt());function Qk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Qk=function(n){return typeof n}:Qk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Qk(e)}var qjt=["children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","className","describedByIds","display","hasChildLabel","id","isDisabled"];function Ujt(e){return Xjt(e)||Gjt(e)||Jjt(e)||$jt()}function $jt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Jjt(e,t){if(e){if(typeof e=="string")return zK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return zK(e,t)}}function Gjt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Xjt(e){if(Array.isArray(e))return zK(e)}function zK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Qjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eC(e){return eC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},eC(e)}function i8(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var kye={row:null,rowCompressed:"euiFormRow--compressed",columnCompressed:"euiFormRow--compressed euiFormRow--horizontal",center:null,centerCompressed:"euiFormRow--compressed",columnCompressedSwitch:"euiFormRow--compressed euiFormRow--horizontal euiFormRow--hasSwitch"},d7r=kt(kye),iu=function(e){eEt(n,e);var t=tEt(n);function n(){var r;Qjt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&(Be["aria-describedby"]=et.join(" "));var ut=lf.Children.only(c),Qe=(0,lf.cloneElement)(ut,RK({id:H,disabled:(o=(i=ut.props.disabled)!==null&&i!==void 0?i:ut.props.isDisabled)!==null&&o!==void 0?o:Y,onFocus:this.onFocus,onBlur:this.onBlur},Be)),Ht=(0,LK.default)("euiFormRow__fieldWrapper",{euiFormRow__fieldWrapperDisplayOnly:N.startsWith("center")}),Xe={className:pe,id:"".concat(H,"-row")},Ft=a(lf.default.Fragment,null,me,a("div",{className:Ht},Qe,ue,ye));return I==="legend"?a("fieldset",o8({},Xe,K),Ft):a("div",o8({},Xe,K),Ft)}}]),n}(lf.Component);i8(iu,"defaultProps",{display:"row",hasEmptyLabelSpace:!1,fullWidth:!1,describedByIds:[],labelType:"label",hasChildLabel:!0});iu.propTypes={labelType:gn.default.oneOfType([gn.default.oneOf(["label"]),gn.default.oneOf(["legend"])]),className:gn.default.string,"aria-label":gn.default.string,"data-test-subj":gn.default.string,display:gn.default.oneOf(["row","rowCompressed","columnCompressed","center","centerCompressed","columnCompressedSwitch"]),hasEmptyLabelSpace:gn.default.bool,fullWidth:gn.default.bool,describedByIds:gn.default.arrayOf(gn.default.string.isRequired),hasChildLabel:gn.default.bool,children:gn.default.element.isRequired,label:gn.default.node,labelAppend:gn.default.any,id:gn.default.string,isInvalid:gn.default.bool,error:gn.default.oneOfType([gn.default.node.isRequired,gn.default.arrayOf(gn.default.node.isRequired).isRequired]),helpText:gn.default.oneOfType([gn.default.node.isRequired,gn.default.arrayOf(gn.default.node.isRequired).isRequired]),isDisabled:gn.default.bool};var aC=E(D()),si=E(rt()),HK=E(yt());var nC=E(D()),wo=E(rt()),FK=E(yt());var oEt=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipTitle","toolTipContent","toolTipPosition","href","target","rel","size"];function tC(){return tC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function lEt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rC(e){return rC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rC(e)}var Aye={s:"euiContextMenuItem--small",m:null},S7r=kt(Aye),Mye={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},I7r=kt(Mye),fs=function(e){uEt(n,e);var t=cEt(n);function n(){return lEt(this,n),t.apply(this,arguments)}return sEt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,c=o.hasPanel,d=o.icon,g=o.buttonRef,O=o.disabled,S=o.layoutAlign,I=S===void 0?"center":S,R=o.toolTipTitle,k=o.toolTipContent,A=o.toolTipPosition,M=A===void 0?"right":A,T=o.href,N=o.target,U=o.rel,X=o.size,Y=iEt(o,oEt),K,H=!T||Ei(T),ne=O||!H;if(d)switch(a8(d)){case"string":K=a(Wt,{type:d,size:"m",className:"euiContextMenu__icon",color:"inherit"});break;default:K=(0,nC.cloneElement)(d,{className:"euiContextMenu__icon"})}var pe;c&&(pe=a(Wt,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow"}));var ye=(0,FK.default)("euiContextMenuItem",X&&Aye[X],u,{"euiContextMenuItem-isDisabled":ne}),fe=(0,FK.default)("euiContextMenu__itemLayout",Mye[I]),ue=a("span",{className:fe},K,a("span",{className:"euiContextMenuItem__text"},i),pe),xe;if(T&&!ne){var me=yo({href:T,target:N,rel:U});xe=a("a",tC({className:ye,href:T,target:N,rel:me,ref:g},Y),ue)}else xe=a("button",tC({disabled:ne,className:ye,type:"button",ref:g},Y),ue);return k?a(ua,{title:R||null,content:k,anchorClassName:"eui-displayBlock",position:M},xe):xe}}]),n}(nC.Component);fs.propTypes={className:wo.default.string,"aria-label":wo.default.string,"data-test-subj":wo.default.string,icon:wo.default.oneOfType([wo.default.element.isRequired,wo.default.string.isRequired,wo.default.any.isRequired]),hasPanel:wo.default.bool,disabled:wo.default.bool,onClick:wo.default.func,buttonRef:wo.default.any,toolTipContent:wo.default.node,toolTipTitle:wo.default.node,toolTipPosition:wo.default.oneOf(["top","right","bottom","left"]),href:wo.default.string,target:wo.default.string,rel:wo.default.string,layoutAlign:wo.default.oneOf(["center","top","bottom"]),size:wo.default.oneOf(["s","m"])};function oC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?oC=function(n){return typeof n}:oC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},oC(e)}var mEt=["children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function WK(){return WK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function vEt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iC(e){return iC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iC(e)}function ms(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var zye={s:"euiContextMenuPanelTitle--small",m:null},z7r=kt(zye),Rye={next:{in:"euiContextMenuPanel-txInLeft",out:"euiContextMenuPanel-txOutLeft"},previous:{in:"euiContextMenuPanel-txInRight",out:"euiContextMenuPanel-txOutRight"}},ic=function(e){bEt(n,e);var t=wEt(n);function n(r){var o;return vEt(this,n),o=t.call(this,r),ms(ds(o),"_isMounted",!1),ms(ds(o),"backButton",null),ms(ds(o),"panel",null),ms(ds(o),"initialPopoverParent",null),ms(ds(o),"findMenuItems",function(){var i;if(o.panel&&(i=o.props.items)!==null&&i!==void 0&&i.length&&!o.state.menuItems.length){var u=gse(o.panel);u.length&&o.setState({menuItems:u})}}),ms(ds(o),"focusMenuItem",function(i){var u,c=i==="up"?-1:1,d;o.state.focusedItemIndex===void 0?d=i==="up"?o.state.menuItems.length-1:0:(d=o.state.focusedItemIndex+c,d<0?d=o.state.menuItems.length-1:d===o.state.menuItems.length&&(d=0)),o.setState({focusedItemIndex:d}),(u=o.state.menuItems[d])===null||u===void 0||u.focus()}),ms(ds(o),"onKeyDown",function(i){var u=o.props,c=u.items,d=u.onClose,g=u.showPreviousPanel;if(d&&(c!=null&&c.length||document.activeElement===o.backButton||document.activeElement===o.panel)&&i.key===Us.ARROW_LEFT&&g&&(i.preventDefault(),i.stopPropagation(),g(),o.props.onUseKeyboardToNavigate&&o.props.onUseKeyboardToNavigate()),c!=null&&c.length)switch(i.key){case Us.TAB:requestAnimationFrame(function(){var O=o.state.menuItems.indexOf(document.activeElement);o.setState({focusedItemIndex:O>=0&&O=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jEt={none:null,xs:"marginXSmall",s:"marginSmall",m:"marginMedium",l:"marginLarge",xl:"marginXLarge",xxl:"marginXXLarge"},Ph=function(t){var n,r=t.className,o=t.size,i=o===void 0?"full":o,u=t.margin,c=u===void 0?"l":u,d=SEt(t,_Et),g=cr(),O=Dye(g),S=(0,Nye.default)("euiHorizontalRule",(n={},Lye(n,"euiHorizontalRule--".concat(i),i),Lye(n,"euiHorizontalRule--".concat(jEt[c]),c&&c!=="none"),n),r),I=[O.euiHorizontalRule,O[i],O[c]];return a("hr",VK({css:I,className:S},d))};Ph.propTypes={size:Eh.default.any,margin:Eh.default.any,className:Eh.default.string,"aria-label":Eh.default.string,"data-test-subj":Eh.default.string};var sC=E(D()),ui=E(rt()),qK=E(yt());var EEt=["label","id","checked","disabled","compressed","onChange","className","showLabel","type","labelProps"];function lC(){return lC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l8=function(t){var n=t.label,r=t.id,o=t.checked,i=t.disabled,u=t.compressed,c=t.onChange,d=t.className,g=t.showLabel,O=g===void 0?!0:g,S=t.type,I=S===void 0?"button":S,R=t.labelProps,k=PEt(t,EEt),A=Ju({conditionalId:r}),M=Ju({conditionalId:R?.id}),T=(0,sC.useCallback)(function(X){if(!i){var Y=X;Y.target.checked=!o,c(Y)}},[o,i,c]),N=(0,qK.default)("euiSwitch",{"euiSwitch--compressed":u},d),U=(0,qK.default)("euiSwitch__label",R?.className);return O===!1&&typeof n!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false."),a("div",{className:N},a("button",lC({id:A,"aria-checked":o||!1,className:"euiSwitch__button",role:"switch",type:I,disabled:i,onClick:T,"aria-label":O?void 0:n,"aria-labelledby":O?M:void 0},k),a("span",{className:"euiSwitch__body"},a("span",{className:"euiSwitch__thumb"}),a("span",{className:"euiSwitch__track"},!u&&a(sC.default.Fragment,null,a(Wt,{type:"cross",size:"m",className:"euiSwitch__icon"}),a(Wt,{type:"check",size:"m",className:"euiSwitch__icon euiSwitch__icon--checked"}))))),O&&a("span",lC({},R,{className:U,id:M,onClick:T}),n))};l8.propTypes={className:ui.default.string,"aria-label":ui.default.string,"data-test-subj":ui.default.string,showLabel:ui.default.bool,label:ui.default.oneOfType([ui.default.node.isRequired,ui.default.string.isRequired]).isRequired,checked:ui.default.bool.isRequired,onChange:ui.default.func.isRequired,disabled:ui.default.bool,compressed:ui.default.bool,type:ui.default.oneOf(["submit","reset","button"]),labelProps:ui.default.shape({className:ui.default.string,"aria-label":ui.default.string,"data-test-subj":ui.default.string})};function UK(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var Fye=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function CEt(e,t){return!!(e===t||Fye(e)&&Fye(t))}function AEt(e,t){if(e.length!==t.length)return!1;for(var n=0;n=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var JK=-1;function Hye(e){if(e===void 0&&(e=!1),JK===-1||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),JK=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return JK}var kh=null;function Vye(e){if(e===void 0&&(e=!1),kh===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?kh="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?kh="negative":kh="positive-ascending"),document.body.removeChild(t),kh}return kh}var zEt=150,DEt=function(t,n){return t};function LEt(e){var t,n=e.getItemOffset,r=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,u=e.getStartIndexForOffset,c=e.getStopIndexForStartIndex,d=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,O=e.validateProps;return t=function(S){ca(I,S);function I(k){var A;return A=S.call(this,k)||this,A._instanceProps=d(A.props,UK(A)),A._outerRef=void 0,A._resetIsScrollingTimeoutId=null,A.state={instance:UK(A),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof A.props.initialScrollOffset=="number"?A.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},A._callOnItemsRendered=void 0,A._callOnItemsRendered=uC(function(M,T,N,U){return A.props.onItemsRendered({overscanStartIndex:M,overscanStopIndex:T,visibleStartIndex:N,visibleStopIndex:U})}),A._callOnScroll=void 0,A._callOnScroll=uC(function(M,T,N){return A.props.onScroll({scrollDirection:M,scrollOffset:T,scrollUpdateWasRequested:N})}),A._getItemStyle=void 0,A._getItemStyle=function(M){var T=A.props,N=T.direction,U=T.itemSize,X=T.layout,Y=A._getItemStyleCache(g&&U,g&&X,g&&N),K;if(Y.hasOwnProperty(M))K=Y[M];else{var H=n(A.props,M,A._instanceProps),ne=o(A.props,M,A._instanceProps),pe=N==="horizontal"||X==="horizontal",ye=N==="rtl",fe=pe?H:0;Y[M]=K={position:"absolute",left:ye?void 0:fe,right:ye?fe:void 0,top:pe?0:H,height:pe?"100%":ne,width:pe?ne:"100%"}}return K},A._getItemStyleCache=void 0,A._getItemStyleCache=uC(function(M,T,N){return{}}),A._onScrollHorizontal=function(M){var T=M.currentTarget,N=T.clientWidth,U=T.scrollLeft,X=T.scrollWidth;A.setState(function(Y){if(Y.scrollOffset===U)return null;var K=A.props.direction,H=U;if(K==="rtl")switch(Vye()){case"negative":H=-U;break;case"positive-descending":H=X-N-U;break}return H=Math.max(0,Math.min(H,X-N)),{isScrolling:!0,scrollDirection:Y.scrollOffsetK.clientWidth?Hye():0:Y=K.scrollHeight>K.clientHeight?Hye():0}this.scrollTo(i(this.props,A,M,X,this._instanceProps,Y))},R.componentDidMount=function(){var A=this.props,M=A.direction,T=A.initialScrollOffset,N=A.layout;if(typeof T=="number"&&this._outerRef!=null){var U=this._outerRef;M==="horizontal"||N==="horizontal"?U.scrollLeft=T:U.scrollTop=T}this._callPropsCallbacks()},R.componentDidUpdate=function(){var A=this.props,M=A.direction,T=A.layout,N=this.state,U=N.scrollOffset,X=N.scrollUpdateWasRequested;if(X&&this._outerRef!=null){var Y=this._outerRef;if(M==="horizontal"||T==="horizontal")if(M==="rtl")switch(Vye()){case"negative":Y.scrollLeft=-U;break;case"positive-ascending":Y.scrollLeft=U;break;default:var K=Y.clientWidth,H=Y.scrollWidth;Y.scrollLeft=H-K-U;break}else Y.scrollLeft=U;else Y.scrollTop=U}this._callPropsCallbacks()},R.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&Bye(this._resetIsScrollingTimeoutId)},R.render=function(){var A=this.props,M=A.children,T=A.className,N=A.direction,U=A.height,X=A.innerRef,Y=A.innerElementType,K=A.innerTagName,H=A.itemCount,ne=A.itemData,pe=A.itemKey,ye=pe===void 0?DEt:pe,fe=A.layout,ue=A.outerElementType,xe=A.outerTagName,me=A.style,We=A.useIsScrolling,$e=A.width,Ge=this.state.isScrolling,Be=N==="horizontal"||fe==="horizontal",et=Be?this._onScrollHorizontal:this._onScrollVertical,ut=this._getRangeToRender(),Qe=ut[0],Ht=ut[1],Xe=[];if(H>0)for(var Ft=Qe;Ft<=Ht;Ft++)Xe.push((0,Ch.createElement)(M,{data:ne,key:ye(Ft,ne),index:Ft,isScrolling:We?Ge:void 0,style:this._getItemStyle(Ft)}));var Vt=r(this.props,this._instanceProps);return(0,Ch.createElement)(ue||xe||"div",{className:T,onScroll:et,ref:this._outerRefSetter,style:hr({position:"relative",height:U,width:$e,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:N},me)},(0,Ch.createElement)(Y||K||"div",{children:Xe,ref:X,style:{height:Be?"100%":Vt,pointerEvents:Ge?"none":void 0,width:Be?Vt:"100%"}}))},R._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var A=this.props.itemCount;if(A>0){var M=this._getRangeToRender(),T=M[0],N=M[1],U=M[2],X=M[3];this._callOnItemsRendered(T,N,U,X)}}if(typeof this.props.onScroll=="function"){var Y=this.state,K=Y.scrollDirection,H=Y.scrollOffset,ne=Y.scrollUpdateWasRequested;this._callOnScroll(K,H,ne)}},R._getRangeToRender=function(){var A=this.props,M=A.itemCount,T=A.overscanCount,N=this.state,U=N.isScrolling,X=N.scrollDirection,Y=N.scrollOffset;if(M===0)return[0,0,0,0];var K=u(this.props,Y,this._instanceProps),H=c(this.props,K,Y,this._instanceProps),ne=!U||X==="backward"?Math.max(1,T):1,pe=!U||X==="forward"?Math.max(1,T):1;return[Math.max(0,K-ne),Math.max(0,Math.min(M-1,H+pe)),K,H]},I}(Ch.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var NEt=function(t,n){var r=t.children,o=t.direction,i=t.height,u=t.layout,c=t.innerTagName,d=t.outerTagName,g=t.width,O=n.instance;if(!1){var S;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(u){case"horizontal":case"vertical":default:}}};var cC=LEt({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o,i,u){var c=t.direction,d=t.height,g=t.itemCount,O=t.itemSize,S=t.layout,I=t.width,R=c==="horizontal"||S==="horizontal",k=R?I:d,A=Math.max(0,g*O-k),M=Math.min(A,n*O),T=Math.max(0,n*O-k+O+u);switch(r==="smart"&&(o>=T-k&&o<=M+k?r="auto":r="center"),r){case"start":return M;case"end":return T;case"center":{var N=Math.round(T+(M-T)/2);return NA+Math.floor(k/2)?A:N}case"auto":default:return o>=T&&o<=M?o:oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pC=function(t){var n=t.className,r=t.children,o=t.onClick,i=t.headerZindexLocation,u=i===void 0?"above":i,c=t.maskRef,d=JEt(t,BEt),g=(0,Ra.useRef)(),O=h1e([g,c]),S=(0,Ra.useState)(!1),I=HEt(S,2),R=I[0],k=I[1];return(0,Ra.useEffect)(function(){return document.body.classList.add("euiBody-hasOverlayMask"),function(){document.body.classList.remove("euiBody-hasOverlayMask")}},[]),(0,Ra.useEffect)(function(){typeof document<"u"&&O(document.createElement("div"))},[]),(0,Ra.useEffect)(function(){var A=g.current;return A&&document.body.appendChild(A),k(!0),function(){A&&document.body.removeChild(A)}},[]),(0,Ra.useEffect)(function(){g.current&&kt(d).forEach(function(A){if(typeof d[A]!="string")throw new Error("Unhandled property type. EuiOverlayMask property ".concat(A," is not a string."));g.current&&g.current.setAttribute(A,d[A])})},[]),(0,Ra.useEffect)(function(){g.current&&(g.current.className=(0,Gye.default)("euiOverlayMask","euiOverlayMask--".concat(u,"Header"),n))},[n,u]),(0,Ra.useEffect)(function(){var A=g.current;if(!(!A||!o)){var M=function(N){N.target===A&&o()};return A.addEventListener("click",M),function(){A.removeEventListener("click",M)}}},[o]),R?a(Ra.default.Fragment,null,(0,Jye.createPortal)(r,g.current)):null};pC.propTypes={className:au.default.string,"aria-label":au.default.string,"data-test-subj":au.default.string,onClick:au.default.func,children:au.default.node,headerZindexLocation:au.default.oneOf(["above","below"]),maskRef:au.default.oneOfType([au.default.any.isRequired,au.default.any.isRequired])};var _xr=E(D()),s8=E(rt()),Kye=E(yt());var XEt={name:"191xi1n-euiSpacer",styles:"flex-shrink:0;label:euiSpacer;"},Xye=function(t){var n=t.euiTheme;return{euiSpacer:XEt,xs:Oe(Zr.height,":",n.size.xs,";;label:xs;"),s:Oe(Zr.height,":",n.size.s,";;label:s;"),m:Oe(Zr.height,":",n.size.base,";;label:m;"),l:Oe(Zr.height,":",n.size.l,";;label:l;"),xl:Oe(Zr.height,":",n.size.xl,";;label:xl;"),xxl:Oe(Zr.height,":",n.size.xxl,";;label:xxl;")}};var KEt=["className","size"];function GK(){return GK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var so=function(t){var n=t.className,r=t.size,o=r===void 0?"l":r,i=QEt(t,KEt),u=cr(),c=Xye(u),d=(0,Kye.default)("euiSpacer",YEt({},"euiSpacer--".concat(o),o),n),g=[c.euiSpacer,c[o]];return a("div",GK({className:d,css:g},i))};so.propTypes={className:s8.default.string,"aria-label":s8.default.string,"data-test-subj":s8.default.string,size:s8.default.any};var M2e=E(D()),Xr=E(rt()),T2e=E(yt());var l2e=E(D()),tt=E(rt()),s2e=E(yt());var YK=E(D()),sf=E(rt());var zxr=E(D()),Ah=E(rt()),Qye=E(yt());var Yye=function(t,n){var r=t.euiTheme,o=t.colorMode,i=n.hasScreenReaderHelpText,u=n.highlightStart,c=n.highlightEnd,d={LIGHT:.1,DARK:.3};return Oe("background-color:",Ma(r.colors.primary,d[o]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";",i===!0&&` +`,Tve=function(){return Mve.createElement(SSt,{styles:ISt})};var af=E(L()),Rve=function(e){return"current"in e?e.current:e};function zve(e){var t=e.setLockProps,n=e.onEscapeKey,r=e.onClickOutside,o=e.shards,i=e.onActivation,u=e.onDeactivation,c=e.noIsolation,d=(0,af.useState)(void 0),g=d[0],O=d[1],S=(0,af.useRef)(null),I=(0,af.useRef)(0);return hk.useEffect(function(){var R=function(T){T.defaultPrevented||(T.code==="Escape"||T.key==="Escape"||T.keyCode===27)&&n&&n(T)},k=function(T){T.defaultPrevented||T.target===S.current||T instanceof MouseEvent&&T.button!==0||o&&o.map(Rve).some(function(D){return D&&D.contains(T.target)||D===T.target})||r&&r(T)},M=function(T){k(T),I.current=T.touches.length},C=function(T){I.current=T.touches.length};if(g)return document.addEventListener("keydown",R),document.addEventListener("mousedown",k),document.addEventListener("touchstart",M),document.addEventListener("touchend",C),function(){document.removeEventListener("keydown",R),document.removeEventListener("mousedown",k),document.removeEventListener("touchstart",M),document.removeEventListener("touchend",C)}},[g,r,n]),(0,af.useEffect)(function(){if(g)return i&&i(g),function(){u&&u()}},[!!g]),(0,af.useEffect)(function(){var R=function(){return null},k=!1,M=function(T){c||(R=Ave(wge([T],(o||[]).map(Rve)),document.body,ek)),O(function(){return T})},C=function(){R(),k||O(null)};return t({onMouseDown:function(T){S.current=T.target},onTouchStart:function(T){S.current=T.target},onActivation:M,onDeactivation:C}),function(){k=!0,t(!1)}},[]),hk.createElement(Tve,null)}var Dve=qd(ZP,zve);var jSt=function(e){return Zx.createElement(Dve,Ui({},e))},lK=Zx.forwardRef(function(e,t){return Zx.createElement(Wge,Ui({},e,{ref:t,sideCar:jSt}))});function gk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?gk=function(n){return typeof n}:gk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},gk(e)}var ESt=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock"];function Lve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Nve(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function CSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vk(e){return vk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},vk(e)}function ou(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Gd=function(e){MSt(n,e);var t=TSt(n);function n(){var r;CSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ok(e){return Ok=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Ok(e)}function wk(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var cK=function(e){NSt(n,e);var t=FSt(n);function n(){var r;LSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _k(e){return _k=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_k(e)}function Kd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Sk=function(e){$St(n,e);var t=JSt(n);function n(r){var o;return qSt(this,n),o=t.call(this,r),Kd(Xd(o),"id",void 0),Kd(Xd(o),"capturedDownIds",void 0),Kd(Xd(o),"onClickOutside",function(i){var u=o.props,c=u.isDisabled,d=u.onOutsideClick;if(c){o.capturedDownIds=[];return}var g=i;if(g.euiGeneratedBy&&g.euiGeneratedBy.includes(o.id)||o.capturedDownIds.includes(o.id)){o.capturedDownIds=[];return}return o.capturedDownIds=[],d(g)}),Kd(Xd(o),"onChildClick",function(i,u){i.nativeEvent.hasOwnProperty("euiGeneratedBy")?i.nativeEvent.euiGeneratedBy.push(o.id):i.nativeEvent.euiGeneratedBy=[o.id],u&&u(i)}),Kd(Xd(o),"onChildMouseDown",function(i){o.onChildClick(i,function(u){var c=u.nativeEvent;o.capturedDownIds=c.euiGeneratedBy,o.props.onMouseDown&&o.props.onMouseDown(u),o.props.onTouchStart&&o.props.onTouchStart(u)})}),Kd(Xd(o),"onChildMouseUp",function(i){o.onChildClick(i,function(u){o.props.onMouseUp&&o.props.onMouseUp(u),o.props.onTouchEnd&&o.props.onTouchEnd(u)})}),o.id=_r()(),o.capturedDownIds=[],o}return USt(n,[{key:"componentDidMount",value:function(){document.addEventListener("mouseup",this.onClickOutside),document.addEventListener("touchend",this.onClickOutside)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mouseup",this.onClickOutside),document.removeEventListener("touchend",this.onClickOutside)}},{key:"render",value:function(){var o=Vve(Vve({},this.props.children.props),{onMouseDown:this.onChildMouseDown,onTouchStart:this.onChildMouseDown,onMouseUp:this.onChildMouseUp,onTouchEnd:this.onChildMouseUp}),i=wh.Children.only(this.props.children);return(0,wh.cloneElement)(i,o)}}]),n}(wh.Component);Sk.propTypes={children:lf.default.element.isRequired,onOutsideClick:lf.default.func.isRequired,isDisabled:lf.default.bool,onMouseDown:lf.default.func,onMouseUp:lf.default.func,onTouchStart:lf.default.func,onTouchEnd:lf.default.func};var d6r=E(L()),e8=E(rt());var KSt="m",Uve=function(t){var n=t.euiTheme,r=xx(t,"plain"),o=n.size[KSt];return{euiPopoverArrow:xe("position:absolute;",IF(0,0),"&:before{content:'';position:absolute;",IF(0,0),";};label:euiPopoverArrow;"),top:xe("&:before{",Zr.bottom,":-",o,";",Zr["border-left"],":",o," solid transparent;",Zr["border-right"],":",o," solid transparent;",Zr["border-top"],":",o," solid ",r,";};label:top;"),bottom:xe("&:before{",Zr.top,":-",o,";",Zr["border-left"],":",o," solid transparent;",Zr["border-right"],":",o," solid transparent;",Zr["border-bottom"],":",o," solid ",r,";};label:bottom;"),left:xe("&:before{",Zr.top,":50%;",Zr.right,":-",o,";",Zr["border-top"],":",o," solid transparent;",Zr["border-bottom"],":",o," solid transparent;",Zr["border-left"],":",o," solid ",r,";};label:left;"),right:xe("&:before{",Zr.top,":50%;",Zr.left,":-",o,";",Zr["border-top"],":",o," solid transparent;",Zr["border-bottom"],":",o," solid transparent;",Zr["border-right"],":",o," solid ",r,";};label:right;")}};var YSt=["children","position"];function fK(){return fK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ik=function(t){var n=t.children,r=t.position,o=QSt(t,YSt),i=cr(),u=Uve(i),c=[u.euiPopoverArrow,u[r]];return a("div",fK({"data-popover-arrow":r,css:c},o),n)};Ik.propTypes={className:e8.default.string,"aria-label":e8.default.string,"data-test-subj":e8.default.string,position:e8.default.any.isRequired};var $ve=function(){return{euiPopover:xe("position:relative;vertical-align:middle;",ut("max-width","100%"),";;label:euiPopover;")}};var Pk=E(L()),ai=E(rt()),Yve=E(yt());var C6r=E(L()),pa=E(rt()),Gve=E(yt());var eIt={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},tIt={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},Jve=function(t){var n=t.euiTheme;return{euiPanel:tIt,grow:eIt,hasShadow:xe(ru(t,"m"),";;label:hasShadow;"),hasBorder:xe("border:",n.border.thin,";;label:hasBorder;"),radius:{none:xe(";label:none;"),m:xe("border-radius:",n.border.radius.medium,";;label:m;")},isClickable:xe(la,"{transition:box-shadow ",n.animation.fast," ",n.animation.resistance,",transform ",n.animation.fast," ",n.animation.resistance,";}&:enabled{display:block;width:100%;",Ra("left"),";}&:hover,&:focus{",ru(t,"l"),";transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};var rIt=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function jk(){return jk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dK={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},L6r=kt(dK);var ii=function(t){var n=t.children,r=t.className,o=t.paddingSize,i=o===void 0?"m":o,u=t.borderRadius,c=u===void 0?"m":u,d=t.color,g=d===void 0?"plain":d,O=t.hasShadow,S=O===void 0?!0:O,I=t.hasBorder,R=I===void 0?!1:I,k=t.grow,M=k===void 0?!0:k,C=t.panelRef,T=t.element,D=oIt(t,rIt),U=cr(),G=!R&&g==="plain",Y=g==="plain"||g==="transparent",K=Jve(U),B=[K.euiPanel,M&&K.grow,K.radius[c],I1e()[i],_1e()[g],G&&S===!0&&K.hasShadow,Y&&R===!0&&K.hasBorder,D.onClick&&K.isClickable],ne=(0,Gve.default)("euiPanel","euiPanel--".concat(g),nIt({},"euiPanel--".concat(dK[i]),dK[i]),r);return D.onClick&&T!=="div"?a("button",jk({ref:C,className:ne,css:B},D),n):a("div",jk({ref:C,className:ne,css:B},D),n)};ii.propTypes={element:pa.default.oneOfType([pa.default.oneOf(["button"]),pa.default.oneOf(["div"])]),hasShadow:pa.default.bool,hasBorder:pa.default.bool,paddingSize:pa.default.any,borderRadius:pa.default.any,grow:pa.default.bool,panelRef:pa.default.any,color:pa.default.any,className:pa.default.string,"aria-label":pa.default.string,"data-test-subj":pa.default.string};var Ek="s",Xve=function(t){var n=t.euiTheme;return{euiPopover__panel:xe("position:absolute;",ut("min-width","".concat(n.base*7,"px")),";",ut("max-width","calc(100vw - ".concat(n.size.xl,")")),";backface-visibility:hidden;pointer-events:none;opacity:0;transform:translateY(0) translateX(0) translateZ(0);",jX(t,{property:"filter"})," &:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:xe("opacity:1;pointer-events:auto;",la,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,",transform ",n.animation.bounce," calc(",n.animation.slow," + 100ms);};label:isOpen;"),top:xe("transform:translateY(",n.size[Ek],") translateZ(0);;label:top;"),bottom:xe("transform:translateY(-",n.size[Ek],") translateZ(0);;label:bottom;"),left:xe("transform:translateX(",n.size[Ek],") translateZ(0);;label:left;"),right:xe("transform:translateX(-",n.size[Ek],") translateZ(0);;label:right;"),attached:{isOpen:xe("filter:none;",la,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,";};label:isOpen;"),top:xe(gge(t),";;label:top;"),bottom:xe(ru(t,"m"),";;label:bottom;"),left:xe(";label:left;"),right:xe(";label:right;")}}};var aIt=["children","className","isOpen","isAttached","position"];function mK(){return mK=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kve=(0,Pk.createContext)({paddingSize:"l"}),Oh=function(t){var n=t.children,r=t.className,o=t.isOpen,i=t.isAttached,u=t.position,c=fIt(t,aIt),d=(0,Pk.useContext)(Kve);c.paddingSize&&(d.paddingSize=c.paddingSize);var g=cr(),O=(0,Yve.default)("euiPopover__panel",r),S=Xve(g),I=[S.euiPopover__panel,o&&S.isOpen,o&&u&&S[u]];return i&&(I=[].concat(lIt(I),[o&&S.attached.isOpen,u&&S.attached[u]])),a(Kve.Provider,{value:d},a(ii,mK({className:O,css:I,"data-popover-panel":!0,"data-popover-open":o||void 0},c),n))};Oh.propTypes={element:ai.default.oneOf(["div"]),hasShadow:ai.default.bool,hasBorder:ai.default.bool,paddingSize:ai.default.any,borderRadius:ai.default.any,grow:ai.default.bool,panelRef:ai.default.any,color:ai.default.any,className:ai.default.string,"aria-label":ai.default.string,"data-test-subj":ai.default.string,isOpen:ai.default.bool,isAttached:ai.default.bool,position:ai.default.oneOfType([ai.default.any.isRequired,ai.default.oneOf([null])])};function Ck(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ck=function(n){return typeof n}:Ck=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Ck(e)}var mIt=["anchorClassName","anchorPosition","button","buttonRef","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","zIndex","attachToAnchor","display","offset","onTrapDeactivation","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function xh(){return xh=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Qve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function kk(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Mk(e){return Mk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Mk(e)}function lo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nye(e,t){return kIt(e)||PIt(e,t)||oye(e,t)||EIt()}function EIt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function oye(e,t){if(e){if(typeof e=="string")return vK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return vK(e,t)}}function vK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _h=function(t){var n=t.size,r=n===void 0?"m":n,o=t.children,i=t.className,u=t.textTransform,c=zIt(t,MIt),d=cr(),g=Ihe(d),O=[g.euiTitle,u?g[u]:void 0,g[r]],S=(0,sye.default)("euiTitle",i,o.props.className),I=TIt({css:O,className:S},c);return Fp(o,I)};_h.propTypes={className:sf.default.string,"aria-label":sf.default.string,"data-test-subj":sf.default.string,children:sf.default.element.isRequired,size:sf.default.any,textTransform:sf.default.any,id:sf.default.string};var r8=E(L()),Ft=E(rt()),Tk=E(yt());var Swr=E(L()),an=E(rt()),uye=E(yt());var LIt=["className","isSelected","isDisabled","color","children"];function yK(){return yK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bK=function(t){var n=t.className,r=t.isSelected,o=r===void 0?!1:r,i=t.isDisabled,u=t.color,c=t.children,d=NIt(t,LIt),g=WIt(o,i,c),O=(0,uye.default)("euiCardSelect","euiCardSelect--".concat(wK(u,o)),n);return a(Vi,yK({className:O,color:u||"text",size:"xs",isDisabled:i,iconType:o?"check":void 0,role:"switch","aria-checked":o},d),g)};bK.propTypes={href:an.default.string,onClick:an.default.func,color:an.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:an.default.oneOf(["xs","s","m"]),flush:an.default.oneOf(["left","right","both"]),isDisabled:an.default.bool,isLoading:an.default.bool,isSelected:an.default.bool,target:an.default.string,rel:an.default.string,type:an.default.oneOf(["button","submit"]),buttonRef:an.default.any,contentProps:an.default.any,iconType:an.default.oneOfType([an.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,an.default.string.isRequired,an.default.elementType.isRequired]),iconSide:an.default.oneOf(["left","right"]),textProps:an.default.shape({className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string,ref:an.default.any,"data-text":an.default.string}),iconSize:an.default.oneOf(["s","m"]),className:an.default.string,"aria-label":an.default.string,"data-test-subj":an.default.string};function WIt(e,t,n){if(n)return n;var r;return e?r=a(bt,{token:"euiCardSelect.selected",default:"Selected"}):t?r=a(bt,{token:"euiCardSelect.unavailable",default:"Unavailable"}):r=a(bt,{token:"euiCardSelect.select",default:"Select"}),r}function wK(e,t){var n;return e?n=e:t?n="success":n="text",n}var BIt=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"];function t8(){return t8=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cye={left:"euiCard--leftAligned",center:"euiCard--centerAligned",right:"euiCard--rightAligned"},Wwr=kt(cye),pye={vertical:"",horizontal:"euiCard--horizontal"},Bwr=kt(pye),fa=function(t){var n=t.className,r=t.description,o=t.isDisabled,i=t.title,u=t.titleElement,c=u===void 0?"span":u,d=t.titleSize,g=d===void 0?"s":d,O=t.icon,S=t.image,I=t.children,R=t.footer,k=t.onClick,M=t.href,C=t.rel,T=t.target,D=t.textAlign,U=D===void 0?"center":D,G=t.betaBadgeProps,Y=t.layout,K=Y===void 0?"vertical":Y,B=t.selectable,ne=t.display,pe=t.paddingSize,ve=HIt(t,BIt),de=!M||Ei(M),ue=o||!de,ye=!ue&&(k||M||B&&!B.isDisabled),be=null,ze=function(Sr){be&&be!==Sr.target&&be.click()};if(K==="horizontal"&&(S||R||U!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var He=B?"euiCard--isSelectable--".concat(wK(B.color,B.isSelected)):void 0,Qe=(0,Tk.default)("euiCard",cye[U],pye[K],{"euiCard--isClickable":ye,"euiCard--hasBetaBadge":G?.label,"euiCard--hasIcon":O,"euiCard--isSelectable":B,"euiCard-isSelected":B?.isSelected,"euiCard-isDisabled":ue},He,n),Be=Gu(),Ze=r?"".concat(Be,"Description"):"",lt;S&&K==="vertical"&&((0,r8.isValidElement)(S)||typeof S=="string"?lt=a("div",{className:"euiCard__image"},(0,r8.isValidElement)(S)?S:a("img",{src:S,alt:""})):lt=null);var Ke;O&&(Ke=r8.default.cloneElement(O,{className:(0,Tk.default)(O.props.className,"euiCard__icon")}));var Ht;(lt||Ke)&&(Ht=a("div",{className:"euiCard__top"},lt,Ke));var Ge,Wt="";G!=null&&G.label&&(Wt="".concat(Be,"BetaBadge"),Ge=a("span",{className:"euiCard__betaBadgeWrapper"},a(HP,t8({id:Wt},G,{className:(0,Tk.default)("euiCard__betaBadge",G?.className)}))),pe=pe||"l"),B&&ue&&B.isDisabled===void 0&&(B.isDisabled=ue);var Vt;B&&(Vt=a(bK,t8({"aria-describedby":"".concat(Be,"Title ").concat(Ze)},B,{buttonRef:function(Sr){be=Sr}})));var st;!ue&&M?st=a("a",{className:"euiCard__titleAnchor",onClick:k,href:M,target:T,"aria-describedby":Ze,rel:bo({href:M,target:T,rel:C}),ref:function(Sr){be=Sr}},i):ue||k?st=a("button",{className:"euiCard__titleButton",onClick:k,disabled:ue,"aria-describedby":"".concat(Wt," ").concat(Ze),ref:function(Sr){be=Sr}},i):st=i;var Ct=c;return a(ii,t8({element:"div",className:Qe,onClick:ye?ze:void 0,color:ue?"subdued":ne,hasShadow:!(ue||ne),hasBorder:ne?!1:void 0,paddingSize:pe},ve),Ht,a("div",{className:"euiCard__content"},a(_h,{id:"".concat(Be,"Title"),className:"euiCard__title",size:g},a(Ct,null,st)),r&&a(Pt,{id:Ze,size:"s",className:"euiCard__description"},a("p",null,r)),I&&a("div",{className:"euiCard__children"},I)),Ge,K==="vertical"&&R&&a("div",{className:"euiCard__footer"},R),Vt)};fa.propTypes={layout:Ft.default.oneOfType([Ft.default.oneOf(["vertical"]),Ft.default.oneOf(["horizontal"]).isRequired]),textAlign:Ft.default.oneOf(["left","center","right"]),footer:Ft.default.node,image:Ft.default.oneOfType([Ft.default.string.isRequired,Ft.default.element.isRequired]),title:Ft.default.any.isRequired,titleElement:Ft.default.oneOf(["h2","h3","h4","h5","h6","span"]),titleSize:Ft.default.oneOf(["s","xs"]),description:Ft.default.any,icon:Ft.default.oneOfType([Ft.default.element.isRequired,Ft.default.oneOf([null])]),children:Ft.default.node,onClick:Ft.default.oneOfType([Ft.default.func.isRequired,Ft.default.func.isRequired]),isDisabled:Ft.default.bool,href:Ft.default.string,target:Ft.default.string,rel:Ft.default.string,betaBadgeProps:Ft.default.any,display:Ft.default.any,paddingSize:Ft.default.any,selectable:Ft.default.shape({href:Ft.default.string,onClick:Ft.default.func,color:Ft.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Ft.default.oneOf(["xs","s","m"]),flush:Ft.default.oneOf(["left","right","both"]),isDisabled:Ft.default.bool,isLoading:Ft.default.bool,isSelected:Ft.default.bool,target:Ft.default.string,rel:Ft.default.string,type:Ft.default.oneOf(["button","submit"]),buttonRef:Ft.default.any,contentProps:Ft.default.any,iconType:Ft.default.oneOfType([Ft.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ft.default.string.isRequired,Ft.default.elementType.isRequired]),iconSide:Ft.default.oneOf(["left","right"]),textProps:Ft.default.shape({className:Ft.default.string,"aria-label":Ft.default.string,"data-test-subj":Ft.default.string,ref:Ft.default.any,"data-text":Ft.default.string}),iconSize:Ft.default.oneOf(["s","m"]),className:Ft.default.string,"aria-label":Ft.default.string,"data-test-subj":Ft.default.string}),hasBorder:Ft.default.bool};var dye=E(L()),li=E(rt()),SK=E(yt());function Rk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Rk=function(n){return typeof n}:Rk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Rk(e)}var qIt=["className","id","checked","label","onChange","type","disabled","compressed","indeterminate","inputRef","labelProps"];function zk(){return zk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $It(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function JIt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Dk(e){return Dk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Dk(e)}function _K(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var mye={inList:"euiCheckbox--inList"},$wr=kt(mye),Sh=function(e){XIt(n,e);var t=KIt(n);function n(){var r;JIt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vye={none:null,xs:"euiFlexGroup--gutterExtraSmall",s:"euiFlexGroup--gutterSmall",m:"euiFlexGroup--gutterMedium",l:"euiFlexGroup--gutterLarge",xl:"euiFlexGroup--gutterExtraLarge"},Zwr=kt(vye),yye={stretch:null,flexStart:"euiFlexGroup--alignItemsFlexStart",flexEnd:"euiFlexGroup--alignItemsFlexEnd",center:"euiFlexGroup--alignItemsCenter",baseline:"euiFlexGroup--alignItemsBaseline"},eOr=kt(yye),bye={flexStart:null,flexEnd:"euiFlexGroup--justifyContentFlexEnd",center:"euiFlexGroup--justifyContentCenter",spaceBetween:"euiFlexGroup--justifyContentSpaceBetween",spaceAround:"euiFlexGroup--justifyContentSpaceAround",spaceEvenly:"euiFlexGroup--justifyContentSpaceEvenly"},tOr=kt(bye),wye={row:"euiFlexGroup--directionRow",rowReverse:"euiFlexGroup--directionRowReverse",column:"euiFlexGroup--directionColumn",columnReverse:"euiFlexGroup--directionColumnReverse"},rOr=kt(wye),rjt=function(t){return["div","span"].includes(t)},_n=(0,hye.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.gutterSize,i=o===void 0?"l":o,u=e.alignItems,c=u===void 0?"stretch":u,d=e.responsive,g=d===void 0?!0:d,O=e.justifyContent,S=O===void 0?"flexStart":O,I=e.direction,R=I===void 0?"row":I,k=e.wrap,M=k===void 0?!1:k,C=e.component,T=C===void 0?"div":C,D=ejt(e,ZIt),U=(0,gye.default)("euiFlexGroup",vye[i],yye[c],bye[S],wye[R],{"euiFlexGroup--responsive":g,"euiFlexGroup--wrap":M},r);if(!rjt(T))throw new Error("".concat(T," is not a valid element type. Use `div` or `span`."));return T==="span"?a("span",Lk({className:U,ref:t},D),n):a("div",Lk({className:U,ref:t},D),n)});_n.propTypes={alignItems:fs.default.oneOf(["stretch","flexStart","flexEnd","center","baseline"]),component:fs.default.oneOf(["div","span"]),direction:fs.default.oneOf(["row","rowReverse","column","columnReverse"]),gutterSize:fs.default.oneOf(["none","xs","s","m","l","xl"]),justifyContent:fs.default.oneOf(["flexStart","flexEnd","center","spaceBetween","spaceAround","spaceEvenly"]),responsive:fs.default.bool,wrap:fs.default.bool,className:fs.default.string,"aria-label":fs.default.string,"data-test-subj":fs.default.string};_n.displayName="EuiFlexGroup";var oOr=E(L()),Ih=E(rt()),Oye=E(yt());var njt=["children","className","grow","component"];function IK(){return IK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ajt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xye=[1,2,3,4,5,6,7,8,9,10],wt=function(t){var n=t.children,r=t.className,o=t.grow,i=o===void 0?!0:o,u=t.component,c=u===void 0?"div":u,d=ijt(t,njt);ljt(i);var g=(0,Oye.default)("euiFlexItem",ojt({"euiFlexItem--flexGrowZero":!i},"euiFlexItem--flexGrow".concat(i),typeof i=="number"?xye.indexOf(i)>=0:void 0),r);return a(c,IK({className:g},d),n)};wt.propTypes={className:Ih.default.string,"aria-label":Ih.default.string,"data-test-subj":Ih.default.string,grow:Ih.default.oneOf([1,2,3,4,5,6,7,8,9,10,!0,!1,null]),component:Ih.default.any};function ljt(e){var t=[null,void 0,!0,!1].concat(xye);if(t.indexOf(e)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 1 and 10, received `".concat(e,"`"))}var Eh=E(L()),$t=E(rt()),MK=E(yt());var Vk=E(L()),hn=E(rt());var pOr=E(L()),n8=E(rt()),_ye=E(yt());var sjt=["className","onClick","size"];function jK(){return jK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sye={s:"euiFormControlLayoutClearButton--small",m:null},vOr=kt(Sye),EK=function(t){var n=t.className,r=t.onClick,o=t.size,i=o===void 0?"m":o,u=ujt(t,sjt),c=(0,_ye.default)("euiFormControlLayoutClearButton",Sye[i],n);return a(bt,{token:"euiFormControlLayoutClearButton.label",default:"Clear input"},function(d){return a("button",jK({type:"button",className:c,onClick:r,"aria-label":d},u),a(Nt,{className:"euiFormControlLayoutClearButton__icon",type:"cross"}))})};EK.propTypes={className:n8.default.string,"aria-label":n8.default.string,"data-test-subj":n8.default.string,size:n8.default.any};var bOr=E(L()),kl=E(rt()),Iye=E(yt());var pjt=["className","onClick","type","iconRef","size","color"];function Nk(){return Nk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function djt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fk=function(t){var n=t.className,r=t.onClick,o=t.type,i=t.iconRef,u=t.size,c=t.color,d=fjt(t,pjt),g=(0,Iye.default)("euiFormControlLayoutCustomIcon",n,{"euiFormControlLayoutCustomIcon--clickable":r});return r?a("button",Nk({type:"button",onClick:r,className:g,ref:i},d),a(Nt,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:c})):a("span",Nk({className:g,ref:i},d),a(Nt,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:c}))};Fk.propTypes={className:kl.default.string,"aria-label":kl.default.string,"data-test-subj":kl.default.string,type:kl.default.oneOfType([kl.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,kl.default.string.isRequired,kl.default.elementType.isRequired]).isRequired,size:kl.default.any,iconRef:kl.default.oneOfType([kl.default.string.isRequired,kl.default.func.isRequired])};function Wk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Wk=function(n){return typeof n}:Wk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Wk(e)}var mjt=["ref","side"];function Bk(){return Bk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function vjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function jye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Hk(e){return Hk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Hk(e)}function Eye(e){return!!e&&e.hasOwnProperty("type")}var kK=function(e){bjt(n,e);var t=wjt(n);function n(){return vjt(this,n),t.apply(this,arguments)}return yjt(n,[{key:"render",value:function(){var o=this.props,i=o.icon,u=o.isInvalid,c=o.isDropdown,d=Eye(i)&&i.side?i.side:"left",g=this.renderCustomIcon(),O=this.renderLoadingSpinner(),S=this.renderClearButton(),I=this.renderInvalidIcon(),R=this.renderDropdownIcon(),k;g&&d==="left"&&(k=a("div",{className:"euiFormControlLayoutIcons"},g));var M;return(S||O||u||c||g&&d==="right")&&(M=a("div",{className:"euiFormControlLayoutIcons euiFormControlLayoutIcons--right"},S,O,I,d==="right"?g:void 0,R)),a(Vk.Fragment,null,k,M)}},{key:"renderCustomIcon",value:function(){var o=this.props,i=o.icon,u=o.compressed;if(!i)return null;var c=Eye(i)?i:{type:i},d=c.ref,g=c.side,O=hjt(c,mjt);return a(Fk,Bk({size:u?"s":"m",iconRef:d},O))}},{key:"renderDropdownIcon",value:function(){var o=this.props,i=o.isDropdown,u=o.compressed;return i?a(Fk,{size:u?"s":"m",type:"arrowDown"}):null}},{key:"renderLoadingSpinner",value:function(){var o=this.props,i=o.isLoading,u=o.compressed;return i?a(Zt,{size:u?"s":"m"}):null}},{key:"renderClearButton",value:function(){var o=this.props,i=o.clear,u=o.compressed;return i?a(EK,Bk({size:u?"s":"m"},i)):null}},{key:"renderInvalidIcon",value:function(){var o=this.props,i=o.isInvalid,u=o.compressed;return i?a(Nt,{size:u?"s":"m",color:"danger",type:"alert"}):null}}]),n}(Vk.Component);kK.propTypes={icon:hn.default.oneOfType([hn.default.oneOfType([hn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,hn.default.string.isRequired,hn.default.elementType.isRequired]).isRequired,hn.default.shape({type:hn.default.oneOfType([hn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,hn.default.string.isRequired,hn.default.elementType.isRequired]).isRequired,side:hn.default.any,color:hn.default.oneOfType([hn.default.string.isRequired,hn.default.any.isRequired]),ref:hn.default.oneOfType([hn.default.string.isRequired,hn.default.func.isRequired])}).isRequired]),clear:hn.default.shape({className:hn.default.string,"aria-label":hn.default.string,"data-test-subj":hn.default.string,size:hn.default.any}),isLoading:hn.default.bool,isInvalid:hn.default.bool,isDropdown:hn.default.bool,compressed:hn.default.bool};var AOr=E(L()),da=E(rt()),Pye=E(yt());var Sjt=["type","isFocused","isInvalid","isDisabled","children","className"];function qk(){return qk=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jh=function(t){var n=t.type,r=n===void 0?"label":n,o=t.isFocused,i=t.isInvalid,u=t.isDisabled,c=t.children,d=t.className,g=Ijt(t,Sjt),O=(0,Pye.default)("euiFormLabel",d,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":u});return r==="legend"?a("legend",qk({className:O},g),c):a("label",qk({className:O},g),c)};jh.propTypes={type:da.default.oneOfType([da.default.oneOfType([da.default.oneOf(["label"]),da.default.oneOf(["label","legend"])]),da.default.oneOfType([da.default.oneOf(["legend"]).isRequired,da.default.oneOf(["label","legend"])])]),isFocused:da.default.bool,isInvalid:da.default.bool,isDisabled:da.default.bool,className:da.default.string,"aria-label":da.default.string,"data-test-subj":da.default.string};function Uk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Uk=function(n){return typeof n}:Uk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Uk(e)}var Ejt=["children","icon","clear","fullWidth","isLoading","isDisabled","compressed","className","prepend","append","readOnly","isInvalid","isDropdown","inputId"];function CK(){return CK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Cjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function $k(e){return $k=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},$k(e)}var Ph=function(e){Mjt(n,e);var t=Tjt(n);function n(){return Cjt(this,n),t.apply(this,arguments)}return Ajt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.icon,c=o.clear,d=o.fullWidth,g=o.isLoading,O=o.isDisabled,S=o.compressed,I=o.className,R=o.prepend,k=o.append,M=o.readOnly,C=o.isInvalid,T=o.isDropdown,D=o.inputId,U=Pjt(o,Ejt),G=(0,MK.default)("euiFormControlLayout",{"euiFormControlLayout--fullWidth":d,"euiFormControlLayout--compressed":S,"euiFormControlLayout--readOnly":M,"euiFormControlLayout--group":R||k,"euiFormControlLayout-isDisabled":O},I),Y=this.renderSideNode("prepend",R,D),K=this.renderSideNode("append",k,D);return a("div",CK({className:G},U),Y,a("div",{className:"euiFormControlLayout__childrenWrapper"},i,a(kK,{icon:u,clear:c,compressed:S,isLoading:g,isInvalid:C,isDropdown:!M&&!O&&T})),K)}},{key:"renderSideNode",value:function(o,i,u){var c=this;if(i){if(typeof i=="string")return this.createFormLabel(o,i,u);var d=Eh.default.Children.map(i,function(g,O){return typeof g=="string"?c.createFormLabel(o,g,u):c.createSideNode(o,g,O)});return d}}},{key:"createFormLabel",value:function(o,i,u){return a(jh,{htmlFor:u,className:"euiFormControlLayout__".concat(o)},i)}},{key:"createSideNode",value:function(o,i,u){return(0,Eh.cloneElement)(i,{className:(0,MK.default)("euiFormControlLayout__".concat(o),i.props.className),key:u})}}]),n}(Eh.Component);Ph.propTypes={className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,prepend:$t.default.oneOfType([$t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired,$t.default.arrayOf($t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired).isRequired]),append:$t.default.oneOfType([$t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired,$t.default.arrayOf($t.default.oneOfType([$t.default.string.isRequired,$t.default.element.isRequired]).isRequired).isRequired]),children:$t.default.node,icon:$t.default.oneOfType([$t.default.oneOfType([$t.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$t.default.string.isRequired,$t.default.elementType.isRequired]).isRequired,$t.default.shape({type:$t.default.oneOfType([$t.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$t.default.string.isRequired,$t.default.elementType.isRequired]).isRequired,side:$t.default.any,color:$t.default.oneOfType([$t.default.string.isRequired,$t.default.any.isRequired]),ref:$t.default.oneOfType([$t.default.string.isRequired,$t.default.func.isRequired])}).isRequired]),clear:$t.default.shape({className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,size:$t.default.any}),fullWidth:$t.default.bool,isLoading:$t.default.bool,isDisabled:$t.default.bool,compressed:$t.default.bool,readOnly:$t.default.bool,isInvalid:$t.default.bool,isDropdown:$t.default.bool,inputId:$t.default.string};var iu=E(L()),Yd=E(rt());function Ljt(e){return e!=null&&e.hasOwnProperty("current")}var Jk=function(t){var n=t.isInvalid,r=t.children,o=(0,iu.useRef)(null),i=iu.Children.only(r),u=i.ref,c=(0,iu.useCallback)(function(d){o.current=d,typeof u=="function"?u(d):Ljt(u)&&(u.current=d)},[u]);return(0,iu.useEffect)(function(){o.current===null||typeof o.current.setCustomValidity!="function"||(n?o.current.setCustomValidity("Invalid"):o.current.setCustomValidity(""))}),(0,iu.cloneElement)(i,{ref:c,"aria-invalid":n})};Jk.propTypes={className:Yd.default.string,"aria-label":Yd.default.string,"data-test-subj":Yd.default.string,isInvalid:Yd.default.bool,children:Yd.default.shape({ref:Yd.default.any}).isRequired};function Cye(e){var t=e.icon,n=e.clear,r=e.isLoading,o=e.isInvalid,i=e.isDropdown,u=[t,n,o,r,i].filter(function(c){return c===!0}).length;return u>0?"euiFormControlLayout--".concat(u,"icons"):void 0}var Mye=E(L()),Ur=E(rt()),Tye=E(yt());var Njt={isEventSupported:function(t,n){return"on".concat(t)in n}},TK=Object.freeze(Njt);function Gk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Gk=function(n){return typeof n}:Gk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Gk(e)}var Fjt=["className","id","name","placeholder","isInvalid","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function zK(){return zK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Hjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Aye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Xk(e){return Xk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Xk(e)}function Zd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var RK=!1,o8=function(e){qjt(n,e);var t=Ujt(n);function n(){var r;Hjt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yk=function(t){var n=t.children,r=t.className,o=Xjt(t,Gjt),i=(0,Rye.default)("euiFormErrorText",r);return a("div",LK({className:i,"aria-live":"polite"},o),n)};Yk.propTypes={className:Kk.default.string,"aria-label":Kk.default.string,"data-test-subj":Kk.default.string};var f7r=E(L()),Qk=E(rt()),zye=E(yt());var Yjt=["children","className"];function NK(){return NK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zk=function(t){var n=t.children,r=t.className,o=Qjt(t,Yjt),i=(0,zye.default)("euiFormHelpText",r);return a("div",NK({className:i},o),n)};Zk.propTypes={className:Qk.default.string,"aria-label":Qk.default.string,"data-test-subj":Qk.default.string};var uf=E(L()),gn=E(rt()),HK=E(yt());function eC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?eC=function(n){return typeof n}:eC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},eC(e)}var eEt=["children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","className","describedByIds","display","hasChildLabel","id","isDisabled"];function tEt(e){return iEt(e)||oEt(e)||nEt(e)||rEt()}function rEt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nEt(e,t){if(e){if(typeof e=="string")return WK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return WK(e,t)}}function oEt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function iEt(e){if(Array.isArray(e))return WK(e)}function WK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function sEt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rC(e){return rC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rC(e)}function a8(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Nye={row:null,rowCompressed:"euiFormRow--compressed",columnCompressed:"euiFormRow--compressed euiFormRow--horizontal",center:null,centerCompressed:"euiFormRow--compressed",columnCompressedSwitch:"euiFormRow--compressed euiFormRow--horizontal euiFormRow--hasSwitch"},I7r=kt(Nye),au=function(e){cEt(n,e);var t=pEt(n);function n(){var r;sEt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&(Be["aria-describedby"]=Ze.join(" "));var lt=uf.Children.only(c),Ke=(0,uf.cloneElement)(lt,FK({id:B,disabled:(o=(i=lt.props.disabled)!==null&&i!==void 0?i:lt.props.isDisabled)!==null&&o!==void 0?o:Y,onFocus:this.onFocus,onBlur:this.onBlur},Be)),Ht=(0,HK.default)("euiFormRow__fieldWrapper",{euiFormRow__fieldWrapperDisplayOnly:D.startsWith("center")}),Ge={className:pe,id:"".concat(B,"-row")},Wt=a(uf.default.Fragment,null,be,a("div",{className:Ht},Ke,ue,ve));return I==="legend"?a("fieldset",i8({},Ge,K),Wt):a("div",i8({},Ge,K),Wt)}}]),n}(uf.Component);a8(au,"defaultProps",{display:"row",hasEmptyLabelSpace:!1,fullWidth:!1,describedByIds:[],labelType:"label",hasChildLabel:!0});au.propTypes={labelType:gn.default.oneOfType([gn.default.oneOf(["label"]),gn.default.oneOf(["legend"])]),className:gn.default.string,"aria-label":gn.default.string,"data-test-subj":gn.default.string,display:gn.default.oneOf(["row","rowCompressed","columnCompressed","center","centerCompressed","columnCompressedSwitch"]),hasEmptyLabelSpace:gn.default.bool,fullWidth:gn.default.bool,describedByIds:gn.default.arrayOf(gn.default.string.isRequired),hasChildLabel:gn.default.bool,children:gn.default.element.isRequired,label:gn.default.node,labelAppend:gn.default.any,id:gn.default.string,isInvalid:gn.default.bool,error:gn.default.oneOfType([gn.default.node.isRequired,gn.default.arrayOf(gn.default.node.isRequired).isRequired]),helpText:gn.default.oneOfType([gn.default.node.isRequired,gn.default.arrayOf(gn.default.node.isRequired).isRequired]),isDisabled:gn.default.bool};var sC=E(L()),si=E(rt()),JK=E(yt());var iC=E(L()),Oo=E(rt()),qK=E(yt());var mEt=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipTitle","toolTipContent","toolTipPosition","href","target","rel","size"];function nC(){return nC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function vEt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oC(e){return oC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},oC(e)}var Wye={s:"euiContextMenuItem--small",m:null},D7r=kt(Wye),Bye={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},L7r=kt(Bye),ds=function(e){bEt(n,e);var t=wEt(n);function n(){return vEt(this,n),t.apply(this,arguments)}return yEt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,c=o.hasPanel,d=o.icon,g=o.buttonRef,O=o.disabled,S=o.layoutAlign,I=S===void 0?"center":S,R=o.toolTipTitle,k=o.toolTipContent,M=o.toolTipPosition,C=M===void 0?"right":M,T=o.href,D=o.target,U=o.rel,G=o.size,Y=hEt(o,mEt),K,B=!T||Ei(T),ne=O||!B;if(d)switch(l8(d)){case"string":K=a(Nt,{type:d,size:"m",className:"euiContextMenu__icon",color:"inherit"});break;default:K=(0,iC.cloneElement)(d,{className:"euiContextMenu__icon"})}var pe;c&&(pe=a(Nt,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow"}));var ve=(0,qK.default)("euiContextMenuItem",G&&Wye[G],u,{"euiContextMenuItem-isDisabled":ne}),de=(0,qK.default)("euiContextMenu__itemLayout",Bye[I]),ue=a("span",{className:de},K,a("span",{className:"euiContextMenuItem__text"},i),pe),ye;if(T&&!ne){var be=bo({href:T,target:D,rel:U});ye=a("a",nC({className:ve,href:T,target:D,rel:be,ref:g},Y),ue)}else ye=a("button",nC({disabled:ne,className:ve,type:"button",ref:g},Y),ue);return k?a(ua,{title:R||null,content:k,anchorClassName:"eui-displayBlock",position:C},ye):ye}}]),n}(iC.Component);ds.propTypes={className:Oo.default.string,"aria-label":Oo.default.string,"data-test-subj":Oo.default.string,icon:Oo.default.oneOfType([Oo.default.element.isRequired,Oo.default.string.isRequired,Oo.default.any.isRequired]),hasPanel:Oo.default.bool,disabled:Oo.default.bool,onClick:Oo.default.func,buttonRef:Oo.default.any,toolTipContent:Oo.default.node,toolTipTitle:Oo.default.node,toolTipPosition:Oo.default.oneOf(["top","right","bottom","left"]),href:Oo.default.string,target:Oo.default.string,rel:Oo.default.string,layoutAlign:Oo.default.oneOf(["center","top","bottom"]),size:Oo.default.oneOf(["s","m"])};function aC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?aC=function(n){return typeof n}:aC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},aC(e)}var SEt=["children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function UK(){return UK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function EEt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Hye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function lC(e){return lC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},lC(e)}function hs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var qye={s:"euiContextMenuPanelTitle--small",m:null},J7r=kt(qye),Vye={next:{in:"euiContextMenuPanel-txInLeft",out:"euiContextMenuPanel-txOutLeft"},previous:{in:"euiContextMenuPanel-txInRight",out:"euiContextMenuPanel-txOutRight"}},lc=function(e){kEt(n,e);var t=CEt(n);function n(r){var o;return EEt(this,n),o=t.call(this,r),hs(ms(o),"_isMounted",!1),hs(ms(o),"backButton",null),hs(ms(o),"panel",null),hs(ms(o),"initialPopoverParent",null),hs(ms(o),"findMenuItems",function(){var i;if(o.panel&&(i=o.props.items)!==null&&i!==void 0&&i.length&&!o.state.menuItems.length){var u=Ose(o.panel);u.length&&o.setState({menuItems:u})}}),hs(ms(o),"focusMenuItem",function(i){var u,c=i==="up"?-1:1,d;o.state.focusedItemIndex===void 0?d=i==="up"?o.state.menuItems.length-1:0:(d=o.state.focusedItemIndex+c,d<0?d=o.state.menuItems.length-1:d===o.state.menuItems.length&&(d=0)),o.setState({focusedItemIndex:d}),(u=o.state.menuItems[d])===null||u===void 0||u.focus()}),hs(ms(o),"onKeyDown",function(i){var u=o.props,c=u.items,d=u.onClose,g=u.showPreviousPanel;if(d&&(c!=null&&c.length||document.activeElement===o.backButton||document.activeElement===o.panel)&&i.key===$s.ARROW_LEFT&&g&&(i.preventDefault(),i.stopPropagation(),g(),o.props.onUseKeyboardToNavigate&&o.props.onUseKeyboardToNavigate()),c!=null&&c.length)switch(i.key){case $s.TAB:requestAnimationFrame(function(){var O=o.state.menuItems.indexOf(document.activeElement);o.setState({focusedItemIndex:O>=0&&O=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DEt={none:null,xs:"marginXSmall",s:"marginSmall",m:"marginMedium",l:"marginLarge",xl:"marginXLarge",xxl:"marginXXLarge"},Ch=function(t){var n,r=t.className,o=t.size,i=o===void 0?"full":o,u=t.margin,c=u===void 0?"l":u,d=REt(t,TEt),g=cr(),O=Uye(g),S=(0,Jye.default)("euiHorizontalRule",(n={},$ye(n,"euiHorizontalRule--".concat(i),i),$ye(n,"euiHorizontalRule--".concat(DEt[c]),c&&c!=="none"),n),r),I=[O.euiHorizontalRule,O[i],O[c]];return a("hr",GK({css:I,className:S},d))};Ch.propTypes={size:kh.default.any,margin:kh.default.any,className:kh.default.string,"aria-label":kh.default.string,"data-test-subj":kh.default.string};var cC=E(L()),ui=E(rt()),XK=E(yt());var LEt=["label","id","checked","disabled","compressed","onChange","className","showLabel","type","labelProps"];function uC(){return uC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s8=function(t){var n=t.label,r=t.id,o=t.checked,i=t.disabled,u=t.compressed,c=t.onChange,d=t.className,g=t.showLabel,O=g===void 0?!0:g,S=t.type,I=S===void 0?"button":S,R=t.labelProps,k=NEt(t,LEt),M=Gu({conditionalId:r}),C=Gu({conditionalId:R?.id}),T=(0,cC.useCallback)(function(G){if(!i){var Y=G;Y.target.checked=!o,c(Y)}},[o,i,c]),D=(0,XK.default)("euiSwitch",{"euiSwitch--compressed":u},d),U=(0,XK.default)("euiSwitch__label",R?.className);return O===!1&&typeof n!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false."),a("div",{className:D},a("button",uC({id:M,"aria-checked":o||!1,className:"euiSwitch__button",role:"switch",type:I,disabled:i,onClick:T,"aria-label":O?void 0:n,"aria-labelledby":O?C:void 0},k),a("span",{className:"euiSwitch__body"},a("span",{className:"euiSwitch__thumb"}),a("span",{className:"euiSwitch__track"},!u&&a(cC.default.Fragment,null,a(Nt,{type:"cross",size:"m",className:"euiSwitch__icon"}),a(Nt,{type:"check",size:"m",className:"euiSwitch__icon euiSwitch__icon--checked"}))))),O&&a("span",uC({},R,{className:U,id:C,onClick:T}),n))};s8.propTypes={className:ui.default.string,"aria-label":ui.default.string,"data-test-subj":ui.default.string,showLabel:ui.default.bool,label:ui.default.oneOfType([ui.default.node.isRequired,ui.default.string.isRequired]).isRequired,checked:ui.default.bool.isRequired,onChange:ui.default.func.isRequired,disabled:ui.default.bool,compressed:ui.default.bool,type:ui.default.oneOf(["submit","reset","button"]),labelProps:ui.default.shape({className:ui.default.string,"aria-label":ui.default.string,"data-test-subj":ui.default.string})};function KK(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var Gye=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function WEt(e,t){return!!(e===t||Gye(e)&&Gye(t))}function BEt(e,t){if(e.length!==t.length)return!1;for(var n=0;n=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var QK=-1;function Yye(e){if(e===void 0&&(e=!1),QK===-1||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),QK=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return QK}var Ah=null;function Qye(e){if(e===void 0&&(e=!1),Ah===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?Ah="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?Ah="negative":Ah="positive-ascending"),document.body.removeChild(t),Ah}return Ah}var UEt=150,$Et=function(t,n){return t};function JEt(e){var t,n=e.getItemOffset,r=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,u=e.getStartIndexForOffset,c=e.getStopIndexForStartIndex,d=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,O=e.validateProps;return t=function(S){ca(I,S);function I(k){var M;return M=S.call(this,k)||this,M._instanceProps=d(M.props,KK(M)),M._outerRef=void 0,M._resetIsScrollingTimeoutId=null,M.state={instance:KK(M),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof M.props.initialScrollOffset=="number"?M.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},M._callOnItemsRendered=void 0,M._callOnItemsRendered=pC(function(C,T,D,U){return M.props.onItemsRendered({overscanStartIndex:C,overscanStopIndex:T,visibleStartIndex:D,visibleStopIndex:U})}),M._callOnScroll=void 0,M._callOnScroll=pC(function(C,T,D){return M.props.onScroll({scrollDirection:C,scrollOffset:T,scrollUpdateWasRequested:D})}),M._getItemStyle=void 0,M._getItemStyle=function(C){var T=M.props,D=T.direction,U=T.itemSize,G=T.layout,Y=M._getItemStyleCache(g&&U,g&&G,g&&D),K;if(Y.hasOwnProperty(C))K=Y[C];else{var B=n(M.props,C,M._instanceProps),ne=o(M.props,C,M._instanceProps),pe=D==="horizontal"||G==="horizontal",ve=D==="rtl",de=pe?B:0;Y[C]=K={position:"absolute",left:ve?void 0:de,right:ve?de:void 0,top:pe?0:B,height:pe?"100%":ne,width:pe?ne:"100%"}}return K},M._getItemStyleCache=void 0,M._getItemStyleCache=pC(function(C,T,D){return{}}),M._onScrollHorizontal=function(C){var T=C.currentTarget,D=T.clientWidth,U=T.scrollLeft,G=T.scrollWidth;M.setState(function(Y){if(Y.scrollOffset===U)return null;var K=M.props.direction,B=U;if(K==="rtl")switch(Qye()){case"negative":B=-U;break;case"positive-descending":B=G-D-U;break}return B=Math.max(0,Math.min(B,G-D)),{isScrolling:!0,scrollDirection:Y.scrollOffsetK.clientWidth?Yye():0:Y=K.scrollHeight>K.clientHeight?Yye():0}this.scrollTo(i(this.props,M,C,G,this._instanceProps,Y))},R.componentDidMount=function(){var M=this.props,C=M.direction,T=M.initialScrollOffset,D=M.layout;if(typeof T=="number"&&this._outerRef!=null){var U=this._outerRef;C==="horizontal"||D==="horizontal"?U.scrollLeft=T:U.scrollTop=T}this._callPropsCallbacks()},R.componentDidUpdate=function(){var M=this.props,C=M.direction,T=M.layout,D=this.state,U=D.scrollOffset,G=D.scrollUpdateWasRequested;if(G&&this._outerRef!=null){var Y=this._outerRef;if(C==="horizontal"||T==="horizontal")if(C==="rtl")switch(Qye()){case"negative":Y.scrollLeft=-U;break;case"positive-ascending":Y.scrollLeft=U;break;default:var K=Y.clientWidth,B=Y.scrollWidth;Y.scrollLeft=B-K-U;break}else Y.scrollLeft=U;else Y.scrollTop=U}this._callPropsCallbacks()},R.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&Kye(this._resetIsScrollingTimeoutId)},R.render=function(){var M=this.props,C=M.children,T=M.className,D=M.direction,U=M.height,G=M.innerRef,Y=M.innerElementType,K=M.innerTagName,B=M.itemCount,ne=M.itemData,pe=M.itemKey,ve=pe===void 0?$Et:pe,de=M.layout,ue=M.outerElementType,ye=M.outerTagName,be=M.style,ze=M.useIsScrolling,He=M.width,Qe=this.state.isScrolling,Be=D==="horizontal"||de==="horizontal",Ze=Be?this._onScrollHorizontal:this._onScrollVertical,lt=this._getRangeToRender(),Ke=lt[0],Ht=lt[1],Ge=[];if(B>0)for(var Wt=Ke;Wt<=Ht;Wt++)Ge.push((0,Mh.createElement)(C,{data:ne,key:ve(Wt,ne),index:Wt,isScrolling:ze?Qe:void 0,style:this._getItemStyle(Wt)}));var Vt=r(this.props,this._instanceProps);return(0,Mh.createElement)(ue||ye||"div",{className:T,onScroll:Ze,ref:this._outerRefSetter,style:hr({position:"relative",height:U,width:He,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:D},be)},(0,Mh.createElement)(Y||K||"div",{children:Ge,ref:G,style:{height:Be?"100%":Vt,pointerEvents:Qe?"none":void 0,width:Be?Vt:"100%"}}))},R._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var M=this.props.itemCount;if(M>0){var C=this._getRangeToRender(),T=C[0],D=C[1],U=C[2],G=C[3];this._callOnItemsRendered(T,D,U,G)}}if(typeof this.props.onScroll=="function"){var Y=this.state,K=Y.scrollDirection,B=Y.scrollOffset,ne=Y.scrollUpdateWasRequested;this._callOnScroll(K,B,ne)}},R._getRangeToRender=function(){var M=this.props,C=M.itemCount,T=M.overscanCount,D=this.state,U=D.isScrolling,G=D.scrollDirection,Y=D.scrollOffset;if(C===0)return[0,0,0,0];var K=u(this.props,Y,this._instanceProps),B=c(this.props,K,Y,this._instanceProps),ne=!U||G==="backward"?Math.max(1,T):1,pe=!U||G==="forward"?Math.max(1,T):1;return[Math.max(0,K-ne),Math.max(0,Math.min(C-1,B+pe)),K,B]},I}(Mh.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var GEt=function(t,n){var r=t.children,o=t.direction,i=t.height,u=t.layout,c=t.innerTagName,d=t.outerTagName,g=t.width,O=n.instance;if(!1){var S;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(u){case"horizontal":case"vertical":default:}}};var fC=JEt({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o,i,u){var c=t.direction,d=t.height,g=t.itemCount,O=t.itemSize,S=t.layout,I=t.width,R=c==="horizontal"||S==="horizontal",k=R?I:d,M=Math.max(0,g*O-k),C=Math.min(M,n*O),T=Math.max(0,n*O-k+O+u);switch(r==="smart"&&(o>=T-k&&o<=C+k?r="auto":r="center"),r){case"start":return C;case"end":return T;case"center":{var D=Math.round(T+(C-T)/2);return DM+Math.floor(k/2)?M:D}case"auto":default:return o>=T&&o<=C?o:oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dC=function(t){var n=t.className,r=t.children,o=t.onClick,i=t.headerZindexLocation,u=i===void 0?"above":i,c=t.maskRef,d=nPt(t,YEt),g=(0,Da.useRef)(),O=w1e([g,c]),S=(0,Da.useState)(!1),I=QEt(S,2),R=I[0],k=I[1];return(0,Da.useEffect)(function(){return document.body.classList.add("euiBody-hasOverlayMask"),function(){document.body.classList.remove("euiBody-hasOverlayMask")}},[]),(0,Da.useEffect)(function(){typeof document<"u"&&O(document.createElement("div"))},[]),(0,Da.useEffect)(function(){var M=g.current;return M&&document.body.appendChild(M),k(!0),function(){M&&document.body.removeChild(M)}},[]),(0,Da.useEffect)(function(){g.current&&kt(d).forEach(function(M){if(typeof d[M]!="string")throw new Error("Unhandled property type. EuiOverlayMask property ".concat(M," is not a string."));g.current&&g.current.setAttribute(M,d[M])})},[]),(0,Da.useEffect)(function(){g.current&&(g.current.className=(0,n2e.default)("euiOverlayMask","euiOverlayMask--".concat(u,"Header"),n))},[n,u]),(0,Da.useEffect)(function(){var M=g.current;if(!(!M||!o)){var C=function(D){D.target===M&&o()};return M.addEventListener("click",C),function(){M.removeEventListener("click",C)}}},[o]),R?a(Da.default.Fragment,null,(0,r2e.createPortal)(r,g.current)):null};dC.propTypes={className:lu.default.string,"aria-label":lu.default.string,"data-test-subj":lu.default.string,onClick:lu.default.func,children:lu.default.node,headerZindexLocation:lu.default.oneOf(["above","below"]),maskRef:lu.default.oneOfType([lu.default.any.isRequired,lu.default.any.isRequired])};var zxr=E(L()),u8=E(rt()),i2e=E(yt());var iPt={name:"191xi1n-euiSpacer",styles:"flex-shrink:0;label:euiSpacer;"},o2e=function(t){var n=t.euiTheme;return{euiSpacer:iPt,xs:xe(Zr.height,":",n.size.xs,";;label:xs;"),s:xe(Zr.height,":",n.size.s,";;label:s;"),m:xe(Zr.height,":",n.size.base,";;label:m;"),l:xe(Zr.height,":",n.size.l,";;label:l;"),xl:xe(Zr.height,":",n.size.xl,";;label:xl;"),xxl:xe(Zr.height,":",n.size.xxl,";;label:xxl;")}};var aPt=["className","size"];function ZK(){return ZK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var so=function(t){var n=t.className,r=t.size,o=r===void 0?"l":r,i=sPt(t,aPt),u=cr(),c=o2e(u),d=(0,i2e.default)("euiSpacer",lPt({},"euiSpacer--".concat(o),o),n),g=[c.euiSpacer,c[o]];return a("div",ZK({className:d,css:g},i))};so.propTypes={className:u8.default.string,"aria-label":u8.default.string,"data-test-subj":u8.default.string,size:u8.default.any};var B2e=E(L()),Xr=E(rt()),H2e=E(yt());var g2e=E(L()),tt=E(rt()),v2e=E(yt());var rY=E(L()),cf=E(rt());var Jxr=E(L()),Th=E(rt()),l2e=E(yt());var a2e=function(t,n){var r=t.euiTheme,o=t.colorMode,i=n.hasScreenReaderHelpText,u=n.highlightStart,c=n.highlightEnd,d={LIGHT:.1,DARK:.3};return xe("background-color:",Ta(r.colors.primary,d[o]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";",i===!0&&` &:before, &:after { - `.concat(Np(),` + `.concat(Wp(),` } &:before { @@ -470,10 +470,10 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:after { content: ' [`).concat(c,`] '; } - `),";;label:euiMarkStyles;")};var ePt=["children","className","hasScreenReaderHelpText"];function XK(){return XK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u8=function(t){var n=t.children,r=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,u=tPt(t,ePt),c=cr(),d=Kn("euiMark.highlightStart","highlight start"),g=Kn("euiMark.highlightEnd","highlight end"),O=Yye(c,{hasScreenReaderHelpText:i,highlightStart:d,highlightEnd:g}),S=(0,Qye.default)("euiMark",r);return a("mark",XK({css:[O,";label:EuiMark;"],className:S},u),n)};u8.propTypes={className:Ah.default.string,"aria-label":Ah.default.string,"data-test-subj":Ah.default.string,hasScreenReaderHelpText:Ah.default.bool,children:Ah.default.node.isRequired};var nPt=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function KK(){return KK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aPt=function(t,n,r,o,i){if(!n)return t;if(!t)return null;if(o){var u=lPt(t,n,r);return a(YK.Fragment,null,u.map(function(R){var k=R.end,A=R.highlight,M=R.start,T=t.substr(M,k-M);return A?a(u8,{key:M,hasScreenReaderHelpText:i},T):T}))}var c=r?t:t.toLowerCase(),d=r?n:n.toLowerCase(),g=c.indexOf(d);if(g===-1)return t;var O=t.substr(0,g),S=t.substr(g,n.length),I=t.substr(g+n.length);return a(YK.Fragment,null,O,a(u8,{hasScreenReaderHelpText:i},S),I)},lPt=function(t,n,r){for(var o=new RegExp(n,r?"g":"gi"),i=[],u;(u=o.exec(t))!==null;)i.push({start:u.index,end:(u.index||0)+u[0].length});return sPt(i,t.length)},sPt=function(t,n){var r=[],o=function(c,d,g){d-c>0&&r.push({start:c,end:d,highlight:g})};if(t.length===0)o(0,n,!1);else{var i=0;t.forEach(function(u){o(i,u.start,!1),o(u.start,u.end,!0),i=u.end}),o(i,n,!1)}return r},ac=function(t){var n=t.children,r=t.className,o=t.search,i=t.strict,u=i===void 0?!1:i,c=t.highlightAll,d=c===void 0?!1:c,g=t.hasScreenReaderHelpText,O=g===void 0?!0:g,S=oPt(t,nPt);return a("span",KK({className:r},S),aPt(n,o,u,d,O))};ac.propTypes={className:sf.default.string,"aria-label":sf.default.string,"data-test-subj":sf.default.string,children:sf.default.string.isRequired,search:sf.default.string.isRequired,strict:sf.default.bool,highlightAll:sf.default.bool};var Kxr=E(D());var QK=function(t){var n=t.children;return a("div",{className:"euiComboBoxTitle"},n)};QK.propTypes={};var e2e=E(D()),Yd=E(rt()),t2e=E(yt());function fC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?fC=function(n){return typeof n}:fC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},fC(e)}var uPt=["children","className","disabled","checked","isFocused","showIcons"];function ZK(){return ZK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function fPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function dC(e){return dC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},dC(e)}function p8(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yPt=function(t){return t?t==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}},mC=function(e){mPt(n,e);var t=hPt(n);function n(){var r;fPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function xPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vC(e){return vC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},vC(e)}function gs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a2e="euiComboBoxOption__content",tY=a(Pi,{className:"euiComboBoxOption__enterBadge",color:"hollow",iconType:"returnKey","aria-hidden":"true"}),f8=function(e){SPt(n,e);var t=IPt(n);function n(){var r;xPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u200?200:lt,Mr=a(cC,{height:Ct,onScroll:N,itemCount:R.length,itemSize:pe,itemData:R,ref:this.setListRef,innerRef:this.setListBoxRef,width:We},this.ListRow),Sr=(0,s2e.default)("euiComboBoxOptionsList");return a(bh,gC({paddingSize:"none",hasShadow:!1,className:Sr,panelRef:this.listRefCallback,"data-test-subj":"comboBoxOptionsList ".concat(i),style:n2e(n2e({},Be),{},{zIndex:Ge}),isOpen:!0,isAttached:!0,position:K},ut),a("div",{className:"euiComboBoxOptionsList__rowWrap"},Ft||Mr))}}]),n}(l2e.Component);gs(f8,"defaultProps",{"data-test-subj":"",rowHeight:29});f8.propTypes={className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.oneOfType([tt.default.string,tt.default.string.isRequired]),activeOptionIndex:tt.default.number,areAllOptionsSelected:tt.default.bool,listboxAriaLabel:tt.default.string.isRequired,customOptionText:tt.default.string,fullWidth:tt.default.bool,getSelectedOptionForSearchValue:tt.default.func,isLoading:tt.default.bool,listRef:tt.default.any.isRequired,matchingOptions:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.any.isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired).isRequired,onCloseList:tt.default.func.isRequired,onCreateOption:tt.default.func,onOptionClick:tt.default.func,onOptionEnterKey:tt.default.func,onScroll:tt.default.any,optionRef:tt.default.func.isRequired,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.any.isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired).isRequired,position:tt.default.oneOf(["top","bottom"]),renderOption:tt.default.func,rootId:tt.default.any.isRequired,rowHeight:tt.default.number.isRequired,scrollToIndex:tt.default.number,searchValue:tt.default.string.isRequired,selectedOptions:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.any.isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired).isRequired,updatePosition:tt.default.func.isRequired,width:tt.default.number.isRequired,singleSelection:tt.default.oneOfType([tt.default.bool.isRequired,tt.default.shape({asPlainText:tt.default.bool}).isRequired]),delimiter:tt.default.string,zIndex:tt.default.number};function u2e(e){return APt(e)||CPt(e)||kPt(e)||PPt()}function PPt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function kPt(e,t){if(e){if(typeof e=="string")return nY(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nY(e,t)}}function CPt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function APt(e){if(Array.isArray(e))return nY(e)}function nY(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(d.push({key:O.key,label:O.label,isGroupLabelOption:!0}),d=d.concat(S))}else c2e(d,O,n,c,o,i)}),u==="startsWith"){var g={startWith:[],others:[]};return d.forEach(function(O){O.label.toLowerCase().startsWith(c)?g.startWith.push(O):g.others.push(O)}),[].concat(u2e(g.startWith),u2e(g.others))}return d};var I2e=E(D()),ht=E(rt()),j2e=E(yt()),E2e=E(y2e());var x2e=E(D()),ln=E(rt()),_2e=E(yt());function wC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?wC=function(n){return typeof n}:wC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},wC(e)}var FPt=["asPlainText","children","className","color","onClick","onClickAriaLabel","onClose","option"];function m8(){return m8=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function HPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function b2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function OC(e){return OC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},OC(e)}function O2e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xC=function(e){qPt(n,e);var t=UPt(n);function n(){var r;HPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function h8(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?h8=function(n){return typeof n}:h8=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},h8(e)}function YPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function SC(e){return SC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},SC(e)}function Mh(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var cY=function(e){ZPt(n,e);var t=ekt(n);function n(){var r;YPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0?"".concat(pe,". Press Backspace to delete ").concat(K[K.length-1].label,". "):"","Combo box input. ").concat(Qe," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";ut=X("removeOptionMessage"),et=a(pn,null,a("span",{"aria-live":"polite",id:ut},Ht))}var Xe;U&&K&&!K.length&&!Y&&(Xe=a("p",{className:"euiComboBoxPlaceholder"},U));var Ft={};!S&&k&&d&&(Ft.clear={"data-test-subj":"comboBoxClearButton",onClick:k});var Vt;R||(Vt={"aria-label":I?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:S,onClick:I&&!S?M:T,ref:ne,side:"right",tabIndex:-1,type:"arrowDown"});var lt=(0,j2e.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--compressed":i,"euiComboBox__inputWrap--fullWidth":c,"euiComboBox__inputWrap--noWrap":$e,"euiComboBox__inputWrap-isLoading":ue,"euiComboBox__inputWrap-isClearable":k,"euiComboBox__inputWrap--inGroup":ye||fe});return a(jh,_C({icon:Vt},Ft,{inputId:g,isLoading:ue,compressed:i,fullWidth:c,prepend:ye,append:fe}),a("div",{className:lt,"data-test-subj":"comboBoxInput",onClick:A,tabIndex:-1},!$e||!Y?Be:null,Xe,a(E2e.default,{"aria-activedescendant":u,"aria-autocomplete":"list","aria-controls":I?X("listbox"):"","aria-expanded":I,"aria-label":me,"aria-labelledby":We,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:S,id:g,inputRef:O,onBlur:this.onBlur,onChange:this.inputOnChange,onFocus:this.onFocus,ref:this.inputRefCallback,role:"combobox",style:{fontSize:14},value:Y,autoFocus:xe}),et))}}]),n}(I2e.Component);cY.propTypes={autoSizeInputRef:ht.default.any,compressed:ht.default.bool.isRequired,focusedOptionId:ht.default.string,fullWidth:ht.default.bool,hasSelectedOptions:ht.default.bool.isRequired,id:ht.default.string,inputRef:ht.default.any,isDisabled:ht.default.bool,isListOpen:ht.default.bool.isRequired,noIcon:ht.default.bool.isRequired,onBlur:ht.default.any,onChange:ht.default.func,onClear:ht.default.func,onClick:ht.default.func,onCloseListClick:ht.default.func.isRequired,onFocus:ht.default.any.isRequired,onOpenListClick:ht.default.func.isRequired,onRemoveOption:ht.default.func,placeholder:ht.default.string,rootId:ht.default.any.isRequired,searchValue:ht.default.string.isRequired,selectedOptions:ht.default.arrayOf(ht.default.shape({isGroupLabelOption:ht.default.bool,label:ht.default.string.isRequired,key:ht.default.string,options:ht.default.arrayOf(ht.default.shape({isGroupLabelOption:ht.default.bool,label:ht.default.string.isRequired,key:ht.default.string,options:ht.default.arrayOf(ht.default.any.isRequired),value:ht.default.any,className:ht.default.string,"aria-label":ht.default.string,"data-test-subj":ht.default.string}).isRequired),value:ht.default.any,className:ht.default.string,"aria-label":ht.default.string,"data-test-subj":ht.default.string}).isRequired),singleSelection:ht.default.oneOfType([ht.default.bool.isRequired,ht.default.shape({asPlainText:ht.default.bool}).isRequired]),toggleButtonRef:ht.default.any,updatePosition:ht.default.func.isRequired,value:ht.default.string,prepend:ht.default.oneOfType([ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired,ht.default.arrayOf(ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired).isRequired]),append:ht.default.oneOfType([ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired,ht.default.arrayOf(ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired).isRequired]),isLoading:ht.default.bool,autoFocus:ht.default.bool,"aria-label":ht.default.string,"aria-labelledby":ht.default.string,className:ht.default.string,"data-test-subj":ht.default.string};function IC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?IC=function(n){return typeof n}:IC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},IC(e)}var nkt=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","aria-label","aria-labelledby"];function pY(){return pY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ikt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function P2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function k2e(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jC(e){return jC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},jC(e)}function fr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var A2e="",Zd=function(e){skt(n,e);var t=ukt(n);function n(){var r;akt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&arguments[0]!==void 0?arguments[0]:r.state.listElement;if(r._isMounted&&r.state.isListOpen&&c){var d=c.getBoundingClientRect();if(!(d.width===0||d.height===0)&&r.comboBoxRefInstance){var g=r.comboBoxRefInstance.getBoundingClientRect(),O=Gp({allowCrossAxis:!1,anchor:r.comboBoxRefInstance,popover:c,position:"bottom"}),S=O.position,I=O.top;r.listRefInstance&&(r.listRefInstance.style.top="".concat(I,"px"),r.listRefInstance.style.left="".concat(g.left+window.pageXOffset,"px"),r.listRefInstance.style.width="".concat(g.width,"px")),r.setState({listElement:c,listPosition:S,width:g.width})}}}),fr(vr(r),"incrementActiveOptionIndex",function(c){r.state.matchingOptions.length&&r.setState(function(d){var g=d.activeOptionIndex,O=d.matchingOptions,S;g<0?S=c<0?O.length-1:0:(S=g+c,S<0?S=O.length-1:S===O.length&&(S=0));for(var I=c>0?1:-1;O[S].isGroupLabelOption;)S=S+I,S<0?S=O.length-1:S===O.length&&(S=0);return{activeOptionIndex:S}})}),fr(vr(r),"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(c,O)}):r.addCustomOption(c,d)}),fr(vr(r),"onContainerBlur",function(c){var d=c,g=d.relatedTarget||d.explicitOriginalTarget,O=g&&r.listRefInstance&&r.listRefInstance.contains(g),S=g&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(g);!O&&!S?(r.closeList(),r.props.onBlur&&r.props.onBlur(c),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)):O&&requestAnimationFrame(function(){var I;(I=r.searchInputRefInstance)===null||I===void 0||I.focus()})}),fr(vr(r),"onKeyDown",function(c){if(!r.props.isDisabled)switch(c.key){case Fr.ARROW_UP:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case Fr.ARROW_DOWN:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case Fr.BACKSPACE:c.stopPropagation(),r.removeLastOption();break;case Fr.ESCAPE:r.state.isListOpen&&(c.preventDefault(),c.stopPropagation(),r.closeList());break;case Fr.ENTER:c.preventDefault(),c.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1);break;case Fr.TAB:r.hasActiveOption()&&r.state.isListOpen&&(c.preventDefault(),c.stopPropagation());break;default:r.props.onKeyDown&&r.props.onKeyDown(c)}}),fr(vr(r),"onOptionEnterKey",function(c){r.onAddOption(c)}),fr(vr(r),"onOptionClick",function(c){r.onAddOption(c)}),fr(vr(r),"onAddOption",function(c,d){if(!c.disabled){var g=r.props,O=g.onChange,S=g.selectedOptions,I=g.singleSelection,R=!!I,k=R?[c]:S.concat(c);O&&O(k),r.clearSearchValue(),r.clearActiveOption(),d||r.searchInputRefInstance&&r.searchInputRefInstance.focus(),R?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(c)})}}),fr(vr(r),"onRemoveOption",function(c){var d=r.props,g=d.onChange,O=d.selectedOptions;g&&g(O.filter(function(S){return S!==c})),r.clearActiveOption()}),fr(vr(r),"clearSelectedOptions",function(){var c=r.props.onChange;c&&c([]),r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),fr(vr(r),"onComboBoxClick",function(){if(r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var c=r.state.matchingOptions.findIndex(function(d){return d.label===r.props.selectedOptions[0].label&&d.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:c})}else r.clearActiveOption()}),fr(vr(r),"onOpenListClick",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),fr(vr(r),"onOptionListScroll",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus()}),fr(vr(r),"onCloseListClick",function(){r.closeList()}),fr(vr(r),"onSearchChange",function(c){var d=r.props,g=d.onSearchChange,O=d.delimiter;if(g){var S=r.state.matchingOptions.length>0;g(c,S)}r.setState({searchValue:c},function(){c&&r.state.isListOpen===!1&&r.openList()}),O&&c.endsWith(O)&&r.setCustomOptions(!1)}),fr(vr(r),"updateMatchingOptionsIfDifferent",function(c){var d=r.state,g=d.matchingOptions,O=d.activeOptionIndex,S=r.props,I=S.singleSelection,R=S.selectedOptions,k=!1;if(g.length!==c.length)k=!0;else for(var A=0;A0,id:Sr,inputRef:this.searchInputRefCallback,isDisabled:A,isListOpen:Ft,noIcon:!!N,onChange:this.onSearchChange,onClear:k&&!A?this.clearSelectedOptions:void 0,onClick:this.onComboBoxClick,onCloseListClick:this.onCloseListClick,onFocus:this.onComboBoxFocus,onOpenListClick:this.onOpenListClick,onRemoveOption:this.onRemoveOption,placeholder:ne,rootId:this.rootId,searchValue:lt,selectedOptions:fe,singleSelection:ue,toggleButtonRef:this.toggleButtonRefCallback,updatePosition:this.updatePosition,value:Dt,append:ue?$e:void 0,prepend:ue?xe:void 0,isLoading:T,autoFocus:Ge,"aria-label":Be,"aria-labelledby":et}),en)}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,c=o.selectedOptions,d=o.singleSelection,g=o.sortMatchesBy,O=i.activeOptionIndex,S=i.searchValue,I=bC(u,c,S,o.async,!!d,g),R={matchingOptions:I};return O>=I.length&&(R.activeOptionIndex=-1),R}}]),n}(M2e.Component);fr(Zd,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none"});Zd.propTypes={"data-test-subj":Xr.default.string,async:Xr.default.bool.isRequired,className:Xr.default.string,compressed:Xr.default.bool.isRequired,fullWidth:Xr.default.bool.isRequired,id:Xr.default.string,inputRef:Xr.default.any,isClearable:Xr.default.bool.isRequired,isDisabled:Xr.default.bool,isInvalid:Xr.default.bool,isLoading:Xr.default.bool,noSuggestions:Xr.default.bool,onBlur:Xr.default.any,onChange:Xr.default.func,onFocus:Xr.default.any,onKeyDown:Xr.default.any,onSearchChange:Xr.default.func,placeholder:Xr.default.string,rowHeight:Xr.default.number,singleSelection:Xr.default.oneOfType([Xr.default.bool.isRequired,Xr.default.shape({asPlainText:Xr.default.bool}).isRequired]).isRequired,sortMatchesBy:Xr.default.oneOf(["none","startsWith"]).isRequired,prepend:Xr.default.any,append:Xr.default.any,delimiter:Xr.default.string,autoFocus:Xr.default.bool,"aria-label":Xr.default.string,"aria-labelledby":Xr.default.string};var uc=E(D()),sc=E(rt());var l9r=E(D()),za=E(rt()),W2e=E(yt());var J8r=E(D()),Br=E(rt()),z2e=E(yt());var fkt=["className","isActive","isPlaceholder","pageIndex","totalPages"];function mY(){return mY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hY=function(t){var n=t.className,r=t.isActive,o=t.isPlaceholder,i=t.pageIndex,u=t.totalPages,c=mkt(t,fkt),d=(0,z2e.default)("euiPaginationButton",n,{"euiPaginationButton-isActive":r,"euiPaginationButton-isPlaceholder":o}),g=dY(dY(dY({className:d,size:"s",color:"text","data-test-subj":"pagination-button-".concat(i),isDisabled:o||r},r&&{"aria-current":!0}),c["aria-controls"]&&{href:"#".concat(c["aria-controls"])}),c),O=i+1;return a(bt,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:O,totalPages:u}},function(S){return a(bt,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:O}},function(I){return a(Vi,mY({"aria-label":u?S:I},g),O)})})};hY.propTypes={href:Br.default.string,onClick:Br.default.func,color:Br.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Br.default.oneOf(["xs","s","m"]),flush:Br.default.oneOf(["left","right","both"]),isDisabled:Br.default.bool,isLoading:Br.default.bool,isSelected:Br.default.bool,target:Br.default.string,rel:Br.default.string,type:Br.default.oneOf(["button","submit"]),buttonRef:Br.default.any,contentProps:Br.default.any,iconType:Br.default.oneOfType([Br.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Br.default.string.isRequired,Br.default.elementType.isRequired]),iconSide:Br.default.oneOf(["left","right"]),textProps:Br.default.shape({className:Br.default.string,"aria-label":Br.default.string,"data-test-subj":Br.default.string,ref:Br.default.any,"data-text":Br.default.string}),iconSize:Br.default.oneOf(["s","m"]),className:Br.default.string,"aria-label":Br.default.string,"data-test-subj":Br.default.string,isActive:Br.default.bool,isPlaceholder:Br.default.bool,pageIndex:Br.default.number.isRequired,totalPages:Br.default.number};var Z8r=E(D()),EC=E(rt()),D2e=E(yt());function gY(){return gY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vY=5,wkt=Math.floor(vY*.5),PC=function(t){var n=t.className,r=t.pageCount,o=r===void 0?1:r,i=t.activePage,u=i===void 0?0:i,c=t.onPageClick,d=c===void 0?function(){}:c,g=t.compressed,O=t["aria-controls"],S=t.responsive,I=S===void 0?["xs","s"]:S,R=ykt(t,gkt),k=U2(I,!!I),A=g||k,M=function(lt,Ct){if(lt.preventDefault(),O){var Mr=document.getElementById(O);Mr&&Mr.focus()}d(Ct)},T=(0,W2e.default)("euiPagination",n),N=(o<1||A)&&a(Th,{type:"first",ariaControls:O,onClick:function(lt){return M(lt,0)},disabled:u===0}),U=a(Th,{type:"previous",ariaControls:O,onClick:function(lt){return M(lt,u-1)},disabled:u===0}),X=a(Th,{type:"next",ariaControls:O,onClick:function(lt){return M(lt,u+1)},disabled:u===-1||u===o-1}),Y=(o<1||A)&&a(Th,{type:"last",ariaControls:O,onClick:function(lt){return M(lt,o?o-1:-1)},disabled:u===-1||u===o-1}),K;if(o){var H={activePage:u,ariaControls:O,safeClick:M,pageCount:o};if(A)K=a(Pt,{size:"s",className:"euiPagination__compressedText"},a(bt,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:a("span",null,u+1),total:a("span",null,o)}}));else{for(var ne=[],pe=Math.max(0,Math.min(u-wkt,o-vY)),ye=Math.min(o,pe+vY),fe=pe,ue=0;fe0&&(xe.push(a(g8,lc({pageIndex:0,key:0},H))),pe>1&&pe!==2?xe.push(a(bt,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:pe}},function(Vt){return a("li",{"aria-label":Vt,className:"euiPaginationButton-isPlaceholder euiPagination__item"},"\u2026")})):pe===2&&xe.push(a(g8,lc({pageIndex:1,key:1},H))));var me=[];yee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e0=function(t){var n=t.activePage,r=t.itemsPerPage,o=r===void 0?50:r,i=t.itemsPerPageOptions,u=i===void 0?[10,20,50,100]:i,c=t.showPerPageOptions,d=c===void 0?!0:c,g=t.onChangeItemsPerPage,O=g===void 0?function(){}:g,S=t.onChangePage,I=t.pageCount,R=Ekt(t,Okt),k=(0,uc.useState)(!1),A=xkt(k,2),M=A[0],T=A[1],N=(0,uc.useCallback)(function(){T(function(H){return!H})},[]),U=(0,uc.useCallback)(function(){T(!1)},[]),X=a(Vi,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:N},o===0?a(bt,{token:"euiTablePagination.allRows",default:"Showing all rows"}):a(uc.default.Fragment,null,a(bt,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",o)),Y=(0,uc.useMemo)(function(){return u.map(function(H){return a(fs,{key:H,icon:H===o?"check":"empty",onClick:function(){U(),O(H)},"data-test-subj":"tablePagination-".concat(H,"-rows")},H===0?a(bt,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):a(bt,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:H},default:"{rowsPerPage} rows"}))})},[u,o,O,U]),K=a(oc,{button:X,isOpen:M,closePopover:U,panelPaddingSize:"none",anchorPosition:"upRight"},a(ic,{items:Y}));return a(_n,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},a(wt,{grow:!1},d&&K),a(wt,{grow:!1},o>0&&a(PC,yY({pageCount:I,activePage:n,onPageClick:S},R))))};e0.propTypes={showPerPageOptions:sc.default.bool,itemsPerPage:sc.default.number,itemsPerPageOptions:sc.default.arrayOf(sc.default.number.isRequired),onChangeItemsPerPage:sc.default.func,onChangePage:sc.default.func,"aria-controls":sc.default.string,"aria-label":sc.default.string};var k9r=E(D()),lu=E(rt()),H2e=E(yt());var kkt=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function kC(){return kC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Akt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bY=function(t){var n=t.isSelected,r=t.children,o=t.className,i=t.disabled,u=t.href,c=t.target,d=t.rel,g=t.prepend,O=t.append,S=Ckt(t,kkt),I=!u||Ei(u),R=i||!I,k=(0,H2e.default)("euiTab",o,{"euiTab-isSelected":n,"euiTab-isDisabled":R}),A=g&&a("span",{className:"euiTab__prepend"},g),M=O&&a("span",{className:"euiTab__append"},O);if(u&&!R){var T=yo({href:u,target:c,rel:d});return a("a",kC({role:"tab","aria-selected":!!n,className:k,href:u,target:c,rel:T},S),A,a("span",{className:"euiTab__content"},r),M)}return a("button",kC({role:"tab","aria-selected":!!n,type:"button",className:k,disabled:R},S),A,a("span",{className:"euiTab__content"},r),M)};bY.propTypes={isSelected:lu.default.bool,disabled:lu.default.bool,prepend:lu.default.node,append:lu.default.node,className:lu.default.string,"aria-label":lu.default.string,"data-test-subj":lu.default.string,href:lu.default.string,onClick:lu.default.func};var V2e=E(D()),q2e=E(yt());var Mkt=["children","className","bottomBorder","expand","size"];function wY(){return wY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U2e={s:"euiTabs--small",m:null,l:"euiTabs--large",xl:"euiTabs--xlarge"},N9r=kt(U2e),OY=(0,V2e.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.bottomBorder,i=o===void 0?!0:o,u=e.expand,c=u===void 0?!1:u,d=e.size,g=d===void 0?"m":d,O=Tkt(e,Mkt),S=(0,q2e.default)("euiTabs",U2e[g],{"euiTabs--expand":c,"euiTabs--bottomBorder":i},r);return a("div",wY({ref:t,className:S},n&&{role:"tablist"},O),n)});OY.displayName="EuiTabs";var MC=E(D()),yr=E(rt());function CC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?CC=function(n){return typeof n}:CC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},CC(e)}var zkt=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],Dkt=["id","name","content"];function xY(){return xY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Nkt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function X2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function AC(e){return AC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},AC(e)}function uf(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Rh=function(e){Wkt(n,e);var t=Bkt(n);function n(r){var o;Nkt(this,n),o=t.call(this,r),uf(t0(o),"rootId",_r()()),uf(t0(o),"tabsRef",(0,MC.createRef)()),uf(t0(o),"focusTab",function(){var g=o.tabsRef.current.querySelector("#".concat(o.state.selectedTabId));g.focus()}),uf(t0(o),"initializeFocus",function(){!o.state.inFocus&&o.props.autoFocus==="selected"&&o.setState({inFocus:!0},function(){o.focusTab()})}),uf(t0(o),"removeFocus",function(g){var O=g.currentTarget,S=g.relatedTarget;O.contains(S)===!1&&o.setState({inFocus:!1})}),uf(t0(o),"onTabClick",function(g){var O=o.props,S=O.onTabClick,I=O.selectedTab;S&&S(g),I||o.setState({selectedTabId:g.id},function(){o.focusTab()})});var i=r.initialSelectedTab,u=r.selectedTab,c=r.tabs,d;return u||(d=i&&i.id||c[0].id),o.state={selectedTabId:d,inFocus:!1},o}return Fkt(n,[{key:"componentDidMount",value:function(){this.tabsRef.current&&this.tabsRef.current.addEventListener("focusout",this.removeFocus)}},{key:"componentWillUnmount",value:function(){this.tabsRef.current&&this.tabsRef.current.removeEventListener("focusout",this.removeFocus)}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,c=i.expand,d=i.initialSelectedTab,g=i.onTabClick,O=i.selectedTab,S=i.size,I=i.tabs,R=i.autoFocus,k=G2e(i,zkt),A=O||I.find(function(U){return U.id===o.state.selectedTabId}),M=A,T=M.content,N=M.id;return a("div",xY({className:u},k),a(OY,{ref:this.tabsRef,expand:c,size:S,onFocus:this.initializeFocus},I.map(function(U){var X=U.id,Y=U.name,K=U.content,H=G2e(U,Dkt),ne=J2e(J2e({key:X,id:X},H),{},{onClick:function(){return o.onTabClick(U)},isSelected:U===A,"aria-controls":"".concat(o.rootId)});return a(bY,ne,Y)})),a("div",{role:"tabpanel",id:"".concat(this.rootId),"aria-labelledby":N},T))}}]),n}(MC.Component);uf(Rh,"defaultProps",{autoFocus:"initial"});Rh.propTypes={className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string,autoFocus:yr.default.oneOf(["initial","selected"]),expand:yr.default.bool,initialSelectedTab:yr.default.shape({id:yr.default.string.isRequired,name:yr.default.node.isRequired,content:yr.default.node.isRequired,isSelected:yr.default.bool,disabled:yr.default.bool,prepend:yr.default.node,append:yr.default.node,className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string}),onTabClick:yr.default.func,selectedTab:yr.default.shape({id:yr.default.string.isRequired,name:yr.default.node.isRequired,content:yr.default.node.isRequired,isSelected:yr.default.bool,disabled:yr.default.bool,prepend:yr.default.node,append:yr.default.node,className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string}),size:yr.default.oneOf(["s","m","l","xl"]),tabs:yr.default.arrayOf(yr.default.shape({id:yr.default.string.isRequired,name:yr.default.node.isRequired,content:yr.default.node.isRequired,isSelected:yr.default.bool,disabled:yr.default.bool,prepend:yr.default.node,append:yr.default.node,className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string}).isRequired).isRequired};var Y2e=E(D()),Q2e=E(rt());function TC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?TC=function(n){return typeof n}:TC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},TC(e)}function qkt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function K2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function RC(e){return RC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},RC(e)}function y8(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b8=function(e){$kt(n,e);var t=Jkt(n);function n(r){var o;return qkt(this,n),o=t.call(this,r),y8(v8(o),"delayID",void 0),y8(v8(o),"toBeDelayed",!0),y8(v8(o),"startDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!0,o.delayID=window.setTimeout(o.stopDelaying,o.props.delay)}),y8(v8(o),"stopDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!1,o.shouldUpdate()}),o.state={toggle:!1},o}return Ukt(n,[{key:"shouldUpdate",value:function(){this.setState(function(o){var i=o.toggle;return{toggle:!i}})}},{key:"componentDidMount",value:function(){this.startDelaying()}},{key:"shouldComponentUpdate",value:function(){return this.toBeDelayed&&this.startDelaying(),!0}},{key:"componentWillUnmount",value:function(){this.stopDelaying()}},{key:"componentDidUpdate",value:function(){this.toBeDelayed=!0}},{key:"render",value:function(){return this.toBeDelayed?null:this.props.children}}]),n}(Y2e.Component);y8(b8,"defaultProps",{delay:500});b8.propTypes={delay:Q2e.default.number.isRequired};var r_r=E(D()),cf=E(rt()),ebe=E(yt());var Kkt={name:"1qhojri-inherit",styles:"font-size:inherit;label:inherit;"},Ykt={name:"j8uhck-euiHealth",styles:"display:inline-block;label:euiHealth;"},Z2e=function(t){return{euiHealth:Ykt,xs:Oe(jl(t,"xs"),";;label:xs;"),s:Oe(jl(t,"s"),";;label:s;"),m:Oe(jl(t,"m"),";;label:m;"),inherit:Kkt}};var Qkt=["children","className","color","textSize"];function IY(){return IY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w8=function(t){var n=t.children,r=t.className,o=t.color,i=t.textSize,u=i===void 0?"s":i,c=Zkt(t,Qkt),d=cr(),g=Z2e(d),O=[g.euiHealth,g[u]],S=(0,ebe.default)("euiHealth",r);return a("div",IY({css:O,className:S},c),a(_n,{gutterSize:"xs",alignItems:"center",responsive:!1},a(wt,{grow:!1},a(Wt,{type:"dot",color:o})),a(wt,{grow:!1},n)))};w8.propTypes={className:cf.default.string,"aria-label":cf.default.string,"data-test-subj":cf.default.string,color:cf.default.oneOfType([cf.default.string.isRequired,cf.default.any.isRequired]),textSize:cf.default.any};var LC=E(D()),Ho=E(rt()),bbe=E(yt());var sbe=E(D()),PY=E(rt()),ube=E(yt());var tCt={name:"gacnmc-allowFullScreen",styles:"&:hover [class*='euiImageCaption']{text-decoration:underline;};label:allowFullScreen;"},tbe=function(t){var n=t.euiTheme;return{euiImageWrapper:Oe("display:inline-block;",st("max-width","100%")," ",Ta("center"),";line-height:0;flex-shrink:0;;label:euiImageWrapper;"),allowFullScreen:tCt,s:Oe("margin:",n.size.s,";;label:s;"),m:Oe("margin:",n.size.base,";;label:m;"),l:Oe("margin:",n.size.l,";;label:l;"),xl:Oe("margin:",n.size.xl,";;label:xl;"),left:Oe("@media only screen and (min-width: ",n.breakpoint.m,"px){float:left;float:",T1.left,";",st("margin-left","0"),";",st("margin-top","0"),";};label:left;"),right:Oe("@media only screen and (min-width: ",n.breakpoint.m,"px){float:right;float:",T1.right,";",st("margin-right","0"),";",st("margin-top","0"),";};label:right;"),fullWidth:Oe(st("width","100%"),";;label:fullWidth;")}};var nbe=E(D()),zh=E(rt());var rbe=function(t){var n=t.euiTheme;return{euiImageButton:Oe("position:relative;cursor:pointer;text-align:match-parent;line-height:0;&::before{opacity:0;content:'';pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0;",la,"{transition:opacity ",n.animation.fast," ",n.animation.resistance,";}}&:hover,&:focus{&::before{opacity:1;}[class*='euiImageButton__icon']{opacity:1;}}&:focus{",Q1(n,"outset"),";};label:euiImageButton;"),fullWidth:Oe(st("width","100%"),";;label:fullWidth;"),shadowHover:Oe("&::before{",tu(t,"s"),";};label:shadowHover;"),hasShadowHover:Oe("&::before{",tu(t,"m"),";};label:hasShadowHover;")}},rCt={name:"xj4dsa-closeFullScreen",styles:"pointer-events:none;label:closeFullScreen;"},zC=function(t){var n=t.euiTheme;return{euiImageButton__icon:Oe("position:absolute;",st("top",n.size.base),";",st("right",n.size.base),";;label:euiImageButton__icon;"),openFullScreen:Oe("opacity:0;cursor:pointer;",la,"{transition:opacity ",n.animation.slow," ",n.animation.resistance,";};label:openFullScreen;"),closeFullScreen:rCt}};var nCt=["hasAlt","hasShadow","children","onClick","onKeyDown","isFullScreen","isFullWidth","fullScreenIconColor"];function jY(){return jY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aCt={light:"ghost",dark:"default"},O8=function(t){var n=t.hasAlt,r=t.hasShadow,o=t.children,i=t.onClick,u=t.onKeyDown,c=t.isFullScreen,d=t.isFullWidth,g=t.fullScreenIconColor,O=g===void 0?"light":g,S=oCt(t,nCt),I=cr(),R=rbe(I),k=[R.euiImageButton,r?R.hasShadowHover:R.shadowHover,!c&&d&&R.fullWidth],A=zC(I),M=[A.euiImageButton__icon,A.openFullScreen],T=Kn("euiImageButton.openFullScreen","Click to open this image in fullscreen mode"),N=Kn("euiImageButton.closeFullScreen","Press Escape or click to close image fullscreen mode"),U=aCt[O];return a(nbe.default.Fragment,null,a("button",jY({type:"button",css:k,onClick:i,onKeyDown:u},S),c&&a(pn,null,a("p",null,N,n&&" \u2014 ")),o,!c&&a("div",{css:M},a(pn,null,a("p",null,n&&" \u2014 ",T)),a(Wt,{type:"fullScreen",color:U}))))};O8.propTypes={hasAlt:zh.default.bool.isRequired,onClick:zh.default.func.isRequired,onKeyDown:zh.default.func,isFullWidth:zh.default.bool.isRequired,isFullScreen:zh.default.bool};var ibe=E(D()),abe=E(rt());var obe=function(t){var n=t.euiTheme;return{euiImageCaption:Oe(jl(t,"s"),";",st("margin-top",n.size.xs),";;label:euiImageCaption;"),isOnOverlayMask:Oe("color:",n.colors.ghost,";text-shadow:0 1px 2px ",Ma(n.colors.ink,.6),";[class*='euiLink']{color:",n.colors.ghost,";};label:isOnOverlayMask;")}};var Dh=(0,ibe.forwardRef)(function(e,t){var n=e.caption,r=e.isOnOverlayMask,o=r===void 0?!1:r,i=cr(),u=obe(i),c=[u.euiImageCaption,o&&u.isOnOverlayMask];return n?a("figcaption",{ref:t,css:c},n):null});Dh.propTypes={isOnOverlayMask:abe.default.bool};Dh.displayName="EuiImageCaption";function EY(){return EY=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c8=function(t){var n=t.children,r=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,u=pPt(t,cPt),c=cr(),d=Kn("euiMark.highlightStart","highlight start"),g=Kn("euiMark.highlightEnd","highlight end"),O=a2e(c,{hasScreenReaderHelpText:i,highlightStart:d,highlightEnd:g}),S=(0,l2e.default)("euiMark",r);return a("mark",eY({css:[O,";label:EuiMark;"],className:S},u),n)};c8.propTypes={className:Th.default.string,"aria-label":Th.default.string,"data-test-subj":Th.default.string,hasScreenReaderHelpText:Th.default.bool,children:Th.default.node.isRequired};var dPt=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function tY(){return tY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gPt=function(t,n,r,o,i){if(!n)return t;if(!t)return null;if(o){var u=vPt(t,n,r);return a(rY.Fragment,null,u.map(function(R){var k=R.end,M=R.highlight,C=R.start,T=t.substr(C,k-C);return M?a(c8,{key:C,hasScreenReaderHelpText:i},T):T}))}var c=r?t:t.toLowerCase(),d=r?n:n.toLowerCase(),g=c.indexOf(d);if(g===-1)return t;var O=t.substr(0,g),S=t.substr(g,n.length),I=t.substr(g+n.length);return a(rY.Fragment,null,O,a(c8,{hasScreenReaderHelpText:i},S),I)},vPt=function(t,n,r){for(var o=new RegExp(n,r?"g":"gi"),i=[],u;(u=o.exec(t))!==null;)i.push({start:u.index,end:(u.index||0)+u[0].length});return yPt(i,t.length)},yPt=function(t,n){var r=[],o=function(c,d,g){d-c>0&&r.push({start:c,end:d,highlight:g})};if(t.length===0)o(0,n,!1);else{var i=0;t.forEach(function(u){o(i,u.start,!1),o(u.start,u.end,!0),i=u.end}),o(i,n,!1)}return r},sc=function(t){var n=t.children,r=t.className,o=t.search,i=t.strict,u=i===void 0?!1:i,c=t.highlightAll,d=c===void 0?!1:c,g=t.hasScreenReaderHelpText,O=g===void 0?!0:g,S=mPt(t,dPt);return a("span",tY({className:r},S),gPt(n,o,u,d,O))};sc.propTypes={className:cf.default.string,"aria-label":cf.default.string,"data-test-subj":cf.default.string,children:cf.default.string.isRequired,search:cf.default.string.isRequired,strict:cf.default.bool,highlightAll:cf.default.bool};var s8r=E(L());var nY=function(t){var n=t.children;return a("div",{className:"euiComboBoxTitle"},n)};nY.propTypes={};var u2e=E(L()),e0=E(rt()),c2e=E(yt());function mC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?mC=function(n){return typeof n}:mC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},mC(e)}var bPt=["children","className","disabled","checked","isFocused","showIcons"];function oY(){return oY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function xPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hC(e){return hC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},hC(e)}function f8(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var PPt=function(t){return t?t==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}},gC=function(e){SPt(n,e);var t=IPt(n);function n(){var r;xPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function APt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function MPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bC(e){return bC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},bC(e)}function vs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var h2e="euiComboBoxOption__content",aY=a(Pi,{className:"euiComboBoxOption__enterBadge",color:"hollow",iconType:"returnKey","aria-hidden":"true"}),d8=function(e){RPt(n,e);var t=zPt(n);function n(){var r;MPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u200?200:st,Mr=a(fC,{height:Ct,onScroll:D,itemCount:R.length,itemSize:pe,itemData:R,ref:this.setListRef,innerRef:this.setListBoxRef,width:ze},this.ListRow),Sr=(0,v2e.default)("euiComboBoxOptionsList");return a(Oh,yC({paddingSize:"none",hasShadow:!1,className:Sr,panelRef:this.listRefCallback,"data-test-subj":"comboBoxOptionsList ".concat(i),style:f2e(f2e({},Be),{},{zIndex:Qe}),isOpen:!0,isAttached:!0,position:K},lt),a("div",{className:"euiComboBoxOptionsList__rowWrap"},Wt||Mr))}}]),n}(g2e.Component);vs(d8,"defaultProps",{"data-test-subj":"",rowHeight:29});d8.propTypes={className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.oneOfType([tt.default.string,tt.default.string.isRequired]),activeOptionIndex:tt.default.number,areAllOptionsSelected:tt.default.bool,listboxAriaLabel:tt.default.string.isRequired,customOptionText:tt.default.string,fullWidth:tt.default.bool,getSelectedOptionForSearchValue:tt.default.func,isLoading:tt.default.bool,listRef:tt.default.any.isRequired,matchingOptions:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.any.isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired).isRequired,onCloseList:tt.default.func.isRequired,onCreateOption:tt.default.func,onOptionClick:tt.default.func,onOptionEnterKey:tt.default.func,onScroll:tt.default.any,optionRef:tt.default.func.isRequired,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.any.isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired).isRequired,position:tt.default.oneOf(["top","bottom"]),renderOption:tt.default.func,rootId:tt.default.any.isRequired,rowHeight:tt.default.number.isRequired,scrollToIndex:tt.default.number,searchValue:tt.default.string.isRequired,selectedOptions:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.shape({isGroupLabelOption:tt.default.bool,label:tt.default.string.isRequired,key:tt.default.string,options:tt.default.arrayOf(tt.default.any.isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired),value:tt.default.any,className:tt.default.string,"aria-label":tt.default.string,"data-test-subj":tt.default.string}).isRequired).isRequired,updatePosition:tt.default.func.isRequired,width:tt.default.number.isRequired,singleSelection:tt.default.oneOfType([tt.default.bool.isRequired,tt.default.shape({asPlainText:tt.default.bool}).isRequired]),delimiter:tt.default.string,zIndex:tt.default.number};function y2e(e){return BPt(e)||WPt(e)||FPt(e)||NPt()}function NPt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FPt(e,t){if(e){if(typeof e=="string")return sY(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sY(e,t)}}function WPt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function BPt(e){if(Array.isArray(e))return sY(e)}function sY(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(d.push({key:O.key,label:O.label,isGroupLabelOption:!0}),d=d.concat(S))}else b2e(d,O,n,c,o,i)}),u==="startsWith"){var g={startWith:[],others:[]};return d.forEach(function(O){O.label.toLowerCase().startsWith(c)?g.startWith.push(O):g.others.push(O)}),[].concat(y2e(g.startWith),y2e(g.others))}return d};var R2e=E(L()),ht=E(rt()),z2e=E(yt()),D2e=E(E2e());var A2e=E(L()),ln=E(rt()),M2e=E(yt());function xC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?xC=function(n){return typeof n}:xC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},xC(e)}var XPt=["asPlainText","children","className","color","onClick","onClickAriaLabel","onClose","option"];function h8(){return h8=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function QPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function P2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _C(e){return _C=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_C(e)}function C2e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var SC=function(e){ekt(n,e);var t=tkt(n);function n(){var r;QPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function akt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function g8(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?g8=function(n){return typeof n}:g8=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},g8(e)}function lkt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function T2e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jC(e){return jC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},jC(e)}function Rh(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var hY=function(e){ukt(n,e);var t=ckt(n);function n(){var r;lkt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0?"".concat(pe,". Press Backspace to delete ").concat(K[K.length-1].label,". "):"","Combo box input. ").concat(Ke," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";lt=G("removeOptionMessage"),Ze=a(pn,null,a("span",{"aria-live":"polite",id:lt},Ht))}var Ge;U&&K&&!K.length&&!Y&&(Ge=a("p",{className:"euiComboBoxPlaceholder"},U));var Wt={};!S&&k&&d&&(Wt.clear={"data-test-subj":"comboBoxClearButton",onClick:k});var Vt;R||(Vt={"aria-label":I?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:S,onClick:I&&!S?C:T,ref:ne,side:"right",tabIndex:-1,type:"arrowDown"});var st=(0,z2e.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--compressed":i,"euiComboBox__inputWrap--fullWidth":c,"euiComboBox__inputWrap--noWrap":He,"euiComboBox__inputWrap-isLoading":ue,"euiComboBox__inputWrap-isClearable":k,"euiComboBox__inputWrap--inGroup":ve||de});return a(Ph,IC({icon:Vt},Wt,{inputId:g,isLoading:ue,compressed:i,fullWidth:c,prepend:ve,append:de}),a("div",{className:st,"data-test-subj":"comboBoxInput",onClick:M,tabIndex:-1},!He||!Y?Be:null,Ge,a(D2e.default,{"aria-activedescendant":u,"aria-autocomplete":"list","aria-controls":I?G("listbox"):"","aria-expanded":I,"aria-label":be,"aria-labelledby":ze,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:S,id:g,inputRef:O,onBlur:this.onBlur,onChange:this.inputOnChange,onFocus:this.onFocus,ref:this.inputRefCallback,role:"combobox",style:{fontSize:14},value:Y,autoFocus:ye}),Ze))}}]),n}(R2e.Component);hY.propTypes={autoSizeInputRef:ht.default.any,compressed:ht.default.bool.isRequired,focusedOptionId:ht.default.string,fullWidth:ht.default.bool,hasSelectedOptions:ht.default.bool.isRequired,id:ht.default.string,inputRef:ht.default.any,isDisabled:ht.default.bool,isListOpen:ht.default.bool.isRequired,noIcon:ht.default.bool.isRequired,onBlur:ht.default.any,onChange:ht.default.func,onClear:ht.default.func,onClick:ht.default.func,onCloseListClick:ht.default.func.isRequired,onFocus:ht.default.any.isRequired,onOpenListClick:ht.default.func.isRequired,onRemoveOption:ht.default.func,placeholder:ht.default.string,rootId:ht.default.any.isRequired,searchValue:ht.default.string.isRequired,selectedOptions:ht.default.arrayOf(ht.default.shape({isGroupLabelOption:ht.default.bool,label:ht.default.string.isRequired,key:ht.default.string,options:ht.default.arrayOf(ht.default.shape({isGroupLabelOption:ht.default.bool,label:ht.default.string.isRequired,key:ht.default.string,options:ht.default.arrayOf(ht.default.any.isRequired),value:ht.default.any,className:ht.default.string,"aria-label":ht.default.string,"data-test-subj":ht.default.string}).isRequired),value:ht.default.any,className:ht.default.string,"aria-label":ht.default.string,"data-test-subj":ht.default.string}).isRequired),singleSelection:ht.default.oneOfType([ht.default.bool.isRequired,ht.default.shape({asPlainText:ht.default.bool}).isRequired]),toggleButtonRef:ht.default.any,updatePosition:ht.default.func.isRequired,value:ht.default.string,prepend:ht.default.oneOfType([ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired,ht.default.arrayOf(ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired).isRequired]),append:ht.default.oneOfType([ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired,ht.default.arrayOf(ht.default.oneOfType([ht.default.string.isRequired,ht.default.element.isRequired]).isRequired).isRequired]),isLoading:ht.default.bool,autoFocus:ht.default.bool,"aria-label":ht.default.string,"aria-labelledby":ht.default.string,className:ht.default.string,"data-test-subj":ht.default.string};function EC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?EC=function(n){return typeof n}:EC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},EC(e)}var dkt=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","aria-label","aria-labelledby"];function gY(){return gY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function L2e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function N2e(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function PC(e){return PC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},PC(e)}function fr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var W2e="",r0=function(e){ykt(n,e);var t=bkt(n);function n(){var r;gkt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&arguments[0]!==void 0?arguments[0]:r.state.listElement;if(r._isMounted&&r.state.isListOpen&&c){var d=c.getBoundingClientRect();if(!(d.width===0||d.height===0)&&r.comboBoxRefInstance){var g=r.comboBoxRefInstance.getBoundingClientRect(),O=Kp({allowCrossAxis:!1,anchor:r.comboBoxRefInstance,popover:c,position:"bottom"}),S=O.position,I=O.top;r.listRefInstance&&(r.listRefInstance.style.top="".concat(I,"px"),r.listRefInstance.style.left="".concat(g.left+window.pageXOffset,"px"),r.listRefInstance.style.width="".concat(g.width,"px")),r.setState({listElement:c,listPosition:S,width:g.width})}}}),fr(vr(r),"incrementActiveOptionIndex",function(c){r.state.matchingOptions.length&&r.setState(function(d){var g=d.activeOptionIndex,O=d.matchingOptions,S;g<0?S=c<0?O.length-1:0:(S=g+c,S<0?S=O.length-1:S===O.length&&(S=0));for(var I=c>0?1:-1;O[S].isGroupLabelOption;)S=S+I,S<0?S=O.length-1:S===O.length&&(S=0);return{activeOptionIndex:S}})}),fr(vr(r),"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(c,O)}):r.addCustomOption(c,d)}),fr(vr(r),"onContainerBlur",function(c){var d=c,g=d.relatedTarget||d.explicitOriginalTarget,O=g&&r.listRefInstance&&r.listRefInstance.contains(g),S=g&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(g);!O&&!S?(r.closeList(),r.props.onBlur&&r.props.onBlur(c),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)):O&&requestAnimationFrame(function(){var I;(I=r.searchInputRefInstance)===null||I===void 0||I.focus()})}),fr(vr(r),"onKeyDown",function(c){if(!r.props.isDisabled)switch(c.key){case Fr.ARROW_UP:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case Fr.ARROW_DOWN:c.preventDefault(),c.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case Fr.BACKSPACE:c.stopPropagation(),r.removeLastOption();break;case Fr.ESCAPE:r.state.isListOpen&&(c.preventDefault(),c.stopPropagation(),r.closeList());break;case Fr.ENTER:c.preventDefault(),c.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1);break;case Fr.TAB:r.hasActiveOption()&&r.state.isListOpen&&(c.preventDefault(),c.stopPropagation());break;default:r.props.onKeyDown&&r.props.onKeyDown(c)}}),fr(vr(r),"onOptionEnterKey",function(c){r.onAddOption(c)}),fr(vr(r),"onOptionClick",function(c){r.onAddOption(c)}),fr(vr(r),"onAddOption",function(c,d){if(!c.disabled){var g=r.props,O=g.onChange,S=g.selectedOptions,I=g.singleSelection,R=!!I,k=R?[c]:S.concat(c);O&&O(k),r.clearSearchValue(),r.clearActiveOption(),d||r.searchInputRefInstance&&r.searchInputRefInstance.focus(),R?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(c)})}}),fr(vr(r),"onRemoveOption",function(c){var d=r.props,g=d.onChange,O=d.selectedOptions;g&&g(O.filter(function(S){return S!==c})),r.clearActiveOption()}),fr(vr(r),"clearSelectedOptions",function(){var c=r.props.onChange;c&&c([]),r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),fr(vr(r),"onComboBoxClick",function(){if(r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var c=r.state.matchingOptions.findIndex(function(d){return d.label===r.props.selectedOptions[0].label&&d.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:c})}else r.clearActiveOption()}),fr(vr(r),"onOpenListClick",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),fr(vr(r),"onOptionListScroll",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus()}),fr(vr(r),"onCloseListClick",function(){r.closeList()}),fr(vr(r),"onSearchChange",function(c){var d=r.props,g=d.onSearchChange,O=d.delimiter;if(g){var S=r.state.matchingOptions.length>0;g(c,S)}r.setState({searchValue:c},function(){c&&r.state.isListOpen===!1&&r.openList()}),O&&c.endsWith(O)&&r.setCustomOptions(!1)}),fr(vr(r),"updateMatchingOptionsIfDifferent",function(c){var d=r.state,g=d.matchingOptions,O=d.activeOptionIndex,S=r.props,I=S.singleSelection,R=S.selectedOptions,k=!1;if(g.length!==c.length)k=!0;else for(var M=0;M0,id:Sr,inputRef:this.searchInputRefCallback,isDisabled:M,isListOpen:Wt,noIcon:!!D,onChange:this.onSearchChange,onClear:k&&!M?this.clearSelectedOptions:void 0,onClick:this.onComboBoxClick,onCloseListClick:this.onCloseListClick,onFocus:this.onComboBoxFocus,onOpenListClick:this.onOpenListClick,onRemoveOption:this.onRemoveOption,placeholder:ne,rootId:this.rootId,searchValue:st,selectedOptions:de,singleSelection:ue,toggleButtonRef:this.toggleButtonRefCallback,updatePosition:this.updatePosition,value:Dt,append:ue?He:void 0,prepend:ue?ye:void 0,isLoading:T,autoFocus:Qe,"aria-label":Be,"aria-labelledby":Ze}),en)}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,c=o.selectedOptions,d=o.singleSelection,g=o.sortMatchesBy,O=i.activeOptionIndex,S=i.searchValue,I=OC(u,c,S,o.async,!!d,g),R={matchingOptions:I};return O>=I.length&&(R.activeOptionIndex=-1),R}}]),n}(B2e.Component);fr(r0,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none"});r0.propTypes={"data-test-subj":Xr.default.string,async:Xr.default.bool.isRequired,className:Xr.default.string,compressed:Xr.default.bool.isRequired,fullWidth:Xr.default.bool.isRequired,id:Xr.default.string,inputRef:Xr.default.any,isClearable:Xr.default.bool.isRequired,isDisabled:Xr.default.bool,isInvalid:Xr.default.bool,isLoading:Xr.default.bool,noSuggestions:Xr.default.bool,onBlur:Xr.default.any,onChange:Xr.default.func,onFocus:Xr.default.any,onKeyDown:Xr.default.any,onSearchChange:Xr.default.func,placeholder:Xr.default.string,rowHeight:Xr.default.number,singleSelection:Xr.default.oneOfType([Xr.default.bool.isRequired,Xr.default.shape({asPlainText:Xr.default.bool}).isRequired]).isRequired,sortMatchesBy:Xr.default.oneOf(["none","startsWith"]).isRequired,prepend:Xr.default.any,append:Xr.default.any,delimiter:Xr.default.string,autoFocus:Xr.default.bool,"aria-label":Xr.default.string,"aria-labelledby":Xr.default.string};var pc=E(L()),cc=E(rt());var b9r=E(L()),La=E(rt()),X2e=E(yt());var i9r=E(L()),Br=E(rt()),q2e=E(yt());var xkt=["className","isActive","isPlaceholder","pageIndex","totalPages"];function bY(){return bY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ikt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wY=function(t){var n=t.className,r=t.isActive,o=t.isPlaceholder,i=t.pageIndex,u=t.totalPages,c=Skt(t,xkt),d=(0,q2e.default)("euiPaginationButton",n,{"euiPaginationButton-isActive":r,"euiPaginationButton-isPlaceholder":o}),g=yY(yY(yY({className:d,size:"s",color:"text","data-test-subj":"pagination-button-".concat(i),isDisabled:o||r},r&&{"aria-current":!0}),c["aria-controls"]&&{href:"#".concat(c["aria-controls"])}),c),O=i+1;return a(bt,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:O,totalPages:u}},function(S){return a(bt,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:O}},function(I){return a(Vi,bY({"aria-label":u?S:I},g),O)})})};wY.propTypes={href:Br.default.string,onClick:Br.default.func,color:Br.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Br.default.oneOf(["xs","s","m"]),flush:Br.default.oneOf(["left","right","both"]),isDisabled:Br.default.bool,isLoading:Br.default.bool,isSelected:Br.default.bool,target:Br.default.string,rel:Br.default.string,type:Br.default.oneOf(["button","submit"]),buttonRef:Br.default.any,contentProps:Br.default.any,iconType:Br.default.oneOfType([Br.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Br.default.string.isRequired,Br.default.elementType.isRequired]),iconSide:Br.default.oneOf(["left","right"]),textProps:Br.default.shape({className:Br.default.string,"aria-label":Br.default.string,"data-test-subj":Br.default.string,ref:Br.default.any,"data-text":Br.default.string}),iconSize:Br.default.oneOf(["s","m"]),className:Br.default.string,"aria-label":Br.default.string,"data-test-subj":Br.default.string,isActive:Br.default.bool,isPlaceholder:Br.default.bool,pageIndex:Br.default.number.isRequired,totalPages:Br.default.number};var p9r=E(L()),kC=E(rt()),U2e=E(yt());function OY(){return OY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xY=5,Ckt=Math.floor(xY*.5),CC=function(t){var n=t.className,r=t.pageCount,o=r===void 0?1:r,i=t.activePage,u=i===void 0?0:i,c=t.onPageClick,d=c===void 0?function(){}:c,g=t.compressed,O=t["aria-controls"],S=t.responsive,I=S===void 0?["xs","s"]:S,R=Pkt(t,jkt),k=J2(I,!!I),M=g||k,C=function(st,Ct){if(st.preventDefault(),O){var Mr=document.getElementById(O);Mr&&Mr.focus()}d(Ct)},T=(0,X2e.default)("euiPagination",n),D=(o<1||M)&&a(zh,{type:"first",ariaControls:O,onClick:function(st){return C(st,0)},disabled:u===0}),U=a(zh,{type:"previous",ariaControls:O,onClick:function(st){return C(st,u-1)},disabled:u===0}),G=a(zh,{type:"next",ariaControls:O,onClick:function(st){return C(st,u+1)},disabled:u===-1||u===o-1}),Y=(o<1||M)&&a(zh,{type:"last",ariaControls:O,onClick:function(st){return C(st,o?o-1:-1)},disabled:u===-1||u===o-1}),K;if(o){var B={activePage:u,ariaControls:O,safeClick:C,pageCount:o};if(M)K=a(Pt,{size:"s",className:"euiPagination__compressedText"},a(bt,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:a("span",null,u+1),total:a("span",null,o)}}));else{for(var ne=[],pe=Math.max(0,Math.min(u-Ckt,o-xY)),ve=Math.min(o,pe+xY),de=pe,ue=0;de0&&(ye.push(a(v8,uc({pageIndex:0,key:0},B))),pe>1&&pe!==2?ye.push(a(bt,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:pe}},function(Vt){return a("li",{"aria-label":Vt,className:"euiPaginationButton-isPlaceholder euiPagination__item"},"\u2026")})):pe===2&&ye.push(a(v8,uc({pageIndex:1,key:1},B))));var be=[];vee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n0=function(t){var n=t.activePage,r=t.itemsPerPage,o=r===void 0?50:r,i=t.itemsPerPageOptions,u=i===void 0?[10,20,50,100]:i,c=t.showPerPageOptions,d=c===void 0?!0:c,g=t.onChangeItemsPerPage,O=g===void 0?function(){}:g,S=t.onChangePage,I=t.pageCount,R=Lkt(t,Akt),k=(0,pc.useState)(!1),M=Mkt(k,2),C=M[0],T=M[1],D=(0,pc.useCallback)(function(){T(function(B){return!B})},[]),U=(0,pc.useCallback)(function(){T(!1)},[]),G=a(Vi,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:D},o===0?a(bt,{token:"euiTablePagination.allRows",default:"Showing all rows"}):a(pc.default.Fragment,null,a(bt,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",o)),Y=(0,pc.useMemo)(function(){return u.map(function(B){return a(ds,{key:B,icon:B===o?"check":"empty",onClick:function(){U(),O(B)},"data-test-subj":"tablePagination-".concat(B,"-rows")},B===0?a(bt,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):a(bt,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:B},default:"{rowsPerPage} rows"}))})},[u,o,O,U]),K=a(ac,{button:G,isOpen:C,closePopover:U,panelPaddingSize:"none",anchorPosition:"upRight"},a(lc,{items:Y}));return a(_n,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},a(wt,{grow:!1},d&&K),a(wt,{grow:!1},o>0&&a(CC,_Y({pageCount:I,activePage:n,onPageClick:S},R))))};n0.propTypes={showPerPageOptions:cc.default.bool,itemsPerPage:cc.default.number,itemsPerPageOptions:cc.default.arrayOf(cc.default.number.isRequired),onChangeItemsPerPage:cc.default.func,onChangePage:cc.default.func,"aria-controls":cc.default.string,"aria-label":cc.default.string};var B9r=E(L()),su=E(rt()),Y2e=E(yt());var Fkt=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function AC(){return AC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SY=function(t){var n=t.isSelected,r=t.children,o=t.className,i=t.disabled,u=t.href,c=t.target,d=t.rel,g=t.prepend,O=t.append,S=Wkt(t,Fkt),I=!u||Ei(u),R=i||!I,k=(0,Y2e.default)("euiTab",o,{"euiTab-isSelected":n,"euiTab-isDisabled":R}),M=g&&a("span",{className:"euiTab__prepend"},g),C=O&&a("span",{className:"euiTab__append"},O);if(u&&!R){var T=bo({href:u,target:c,rel:d});return a("a",AC({role:"tab","aria-selected":!!n,className:k,href:u,target:c,rel:T},S),M,a("span",{className:"euiTab__content"},r),C)}return a("button",AC({role:"tab","aria-selected":!!n,type:"button",className:k,disabled:R},S),M,a("span",{className:"euiTab__content"},r),C)};SY.propTypes={isSelected:su.default.bool,disabled:su.default.bool,prepend:su.default.node,append:su.default.node,className:su.default.string,"aria-label":su.default.string,"data-test-subj":su.default.string,href:su.default.string,onClick:su.default.func};var Q2e=E(L()),Z2e=E(yt());var Hkt=["children","className","bottomBorder","expand","size"];function IY(){return IY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ebe={s:"euiTabs--small",m:null,l:"euiTabs--large",xl:"euiTabs--xlarge"},K9r=kt(ebe),jY=(0,Q2e.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.bottomBorder,i=o===void 0?!0:o,u=e.expand,c=u===void 0?!1:u,d=e.size,g=d===void 0?"m":d,O=Vkt(e,Hkt),S=(0,Z2e.default)("euiTabs",ebe[g],{"euiTabs--expand":c,"euiTabs--bottomBorder":i},r);return a("div",IY({ref:t,className:S},n&&{role:"tablist"},O),n)});jY.displayName="EuiTabs";var RC=E(L()),yr=E(rt());function MC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MC=function(n){return typeof n}:MC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MC(e)}var Ukt=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],$kt=["id","name","content"];function EY(){return EY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Gkt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function obe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function TC(e){return TC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},TC(e)}function pf(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Dh=function(e){Kkt(n,e);var t=Ykt(n);function n(r){var o;Gkt(this,n),o=t.call(this,r),pf(o0(o),"rootId",_r()()),pf(o0(o),"tabsRef",(0,RC.createRef)()),pf(o0(o),"focusTab",function(){var g=o.tabsRef.current.querySelector("#".concat(o.state.selectedTabId));g.focus()}),pf(o0(o),"initializeFocus",function(){!o.state.inFocus&&o.props.autoFocus==="selected"&&o.setState({inFocus:!0},function(){o.focusTab()})}),pf(o0(o),"removeFocus",function(g){var O=g.currentTarget,S=g.relatedTarget;O.contains(S)===!1&&o.setState({inFocus:!1})}),pf(o0(o),"onTabClick",function(g){var O=o.props,S=O.onTabClick,I=O.selectedTab;S&&S(g),I||o.setState({selectedTabId:g.id},function(){o.focusTab()})});var i=r.initialSelectedTab,u=r.selectedTab,c=r.tabs,d;return u||(d=i&&i.id||c[0].id),o.state={selectedTabId:d,inFocus:!1},o}return Xkt(n,[{key:"componentDidMount",value:function(){this.tabsRef.current&&this.tabsRef.current.addEventListener("focusout",this.removeFocus)}},{key:"componentWillUnmount",value:function(){this.tabsRef.current&&this.tabsRef.current.removeEventListener("focusout",this.removeFocus)}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,c=i.expand,d=i.initialSelectedTab,g=i.onTabClick,O=i.selectedTab,S=i.size,I=i.tabs,R=i.autoFocus,k=nbe(i,Ukt),M=O||I.find(function(U){return U.id===o.state.selectedTabId}),C=M,T=C.content,D=C.id;return a("div",EY({className:u},k),a(jY,{ref:this.tabsRef,expand:c,size:S,onFocus:this.initializeFocus},I.map(function(U){var G=U.id,Y=U.name,K=U.content,B=nbe(U,$kt),ne=rbe(rbe({key:G,id:G},B),{},{onClick:function(){return o.onTabClick(U)},isSelected:U===M,"aria-controls":"".concat(o.rootId)});return a(SY,ne,Y)})),a("div",{role:"tabpanel",id:"".concat(this.rootId),"aria-labelledby":D},T))}}]),n}(RC.Component);pf(Dh,"defaultProps",{autoFocus:"initial"});Dh.propTypes={className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string,autoFocus:yr.default.oneOf(["initial","selected"]),expand:yr.default.bool,initialSelectedTab:yr.default.shape({id:yr.default.string.isRequired,name:yr.default.node.isRequired,content:yr.default.node.isRequired,isSelected:yr.default.bool,disabled:yr.default.bool,prepend:yr.default.node,append:yr.default.node,className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string}),onTabClick:yr.default.func,selectedTab:yr.default.shape({id:yr.default.string.isRequired,name:yr.default.node.isRequired,content:yr.default.node.isRequired,isSelected:yr.default.bool,disabled:yr.default.bool,prepend:yr.default.node,append:yr.default.node,className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string}),size:yr.default.oneOf(["s","m","l","xl"]),tabs:yr.default.arrayOf(yr.default.shape({id:yr.default.string.isRequired,name:yr.default.node.isRequired,content:yr.default.node.isRequired,isSelected:yr.default.bool,disabled:yr.default.bool,prepend:yr.default.node,append:yr.default.node,className:yr.default.string,"aria-label":yr.default.string,"data-test-subj":yr.default.string}).isRequired).isRequired};var abe=E(L()),lbe=E(rt());function zC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?zC=function(n){return typeof n}:zC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},zC(e)}function eCt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ibe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function DC(e){return DC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},DC(e)}function b8(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w8=function(e){rCt(n,e);var t=nCt(n);function n(r){var o;return eCt(this,n),o=t.call(this,r),b8(y8(o),"delayID",void 0),b8(y8(o),"toBeDelayed",!0),b8(y8(o),"startDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!0,o.delayID=window.setTimeout(o.stopDelaying,o.props.delay)}),b8(y8(o),"stopDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!1,o.shouldUpdate()}),o.state={toggle:!1},o}return tCt(n,[{key:"shouldUpdate",value:function(){this.setState(function(o){var i=o.toggle;return{toggle:!i}})}},{key:"componentDidMount",value:function(){this.startDelaying()}},{key:"shouldComponentUpdate",value:function(){return this.toBeDelayed&&this.startDelaying(),!0}},{key:"componentWillUnmount",value:function(){this.stopDelaying()}},{key:"componentDidUpdate",value:function(){this.toBeDelayed=!0}},{key:"render",value:function(){return this.toBeDelayed?null:this.props.children}}]),n}(abe.Component);b8(w8,"defaultProps",{delay:500});w8.propTypes={delay:lbe.default.number.isRequired};var m_r=E(L()),ff=E(rt()),ube=E(yt());var aCt={name:"1qhojri-inherit",styles:"font-size:inherit;label:inherit;"},lCt={name:"j8uhck-euiHealth",styles:"display:inline-block;label:euiHealth;"},sbe=function(t){return{euiHealth:lCt,xs:xe(El(t,"xs"),";;label:xs;"),s:xe(El(t,"s"),";;label:s;"),m:xe(El(t,"m"),";;label:m;"),inherit:aCt}};var sCt=["children","className","color","textSize"];function CY(){return CY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var O8=function(t){var n=t.children,r=t.className,o=t.color,i=t.textSize,u=i===void 0?"s":i,c=uCt(t,sCt),d=cr(),g=sbe(d),O=[g.euiHealth,g[u]],S=(0,ube.default)("euiHealth",r);return a("div",CY({css:O,className:S},c),a(_n,{gutterSize:"xs",alignItems:"center",responsive:!1},a(wt,{grow:!1},a(Nt,{type:"dot",color:o})),a(wt,{grow:!1},n)))};O8.propTypes={className:ff.default.string,"aria-label":ff.default.string,"data-test-subj":ff.default.string,color:ff.default.oneOfType([ff.default.string.isRequired,ff.default.any.isRequired]),textSize:ff.default.any};var FC=E(L()),Ho=E(rt()),Pbe=E(yt());var vbe=E(L()),TY=E(rt()),ybe=E(yt());var pCt={name:"gacnmc-allowFullScreen",styles:"&:hover [class*='euiImageCaption']{text-decoration:underline;};label:allowFullScreen;"},cbe=function(t){var n=t.euiTheme;return{euiImageWrapper:xe("display:inline-block;",ut("max-width","100%")," ",Ra("center"),";line-height:0;flex-shrink:0;;label:euiImageWrapper;"),allowFullScreen:pCt,s:xe("margin:",n.size.s,";;label:s;"),m:xe("margin:",n.size.base,";;label:m;"),l:xe("margin:",n.size.l,";;label:l;"),xl:xe("margin:",n.size.xl,";;label:xl;"),left:xe("@media only screen and (min-width: ",n.breakpoint.m,"px){float:left;float:",D1.left,";",ut("margin-left","0"),";",ut("margin-top","0"),";};label:left;"),right:xe("@media only screen and (min-width: ",n.breakpoint.m,"px){float:right;float:",D1.right,";",ut("margin-right","0"),";",ut("margin-top","0"),";};label:right;"),fullWidth:xe(ut("width","100%"),";;label:fullWidth;")}};var fbe=E(L()),Lh=E(rt());var pbe=function(t){var n=t.euiTheme;return{euiImageButton:xe("position:relative;cursor:pointer;text-align:match-parent;line-height:0;&::before{opacity:0;content:'';pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0;",la,"{transition:opacity ",n.animation.fast," ",n.animation.resistance,";}}&:hover,&:focus{&::before{opacity:1;}[class*='euiImageButton__icon']{opacity:1;}}&:focus{",th(n,"outset"),";};label:euiImageButton;"),fullWidth:xe(ut("width","100%"),";;label:fullWidth;"),shadowHover:xe("&::before{",ru(t,"s"),";};label:shadowHover;"),hasShadowHover:xe("&::before{",ru(t,"m"),";};label:hasShadowHover;")}},fCt={name:"xj4dsa-closeFullScreen",styles:"pointer-events:none;label:closeFullScreen;"},LC=function(t){var n=t.euiTheme;return{euiImageButton__icon:xe("position:absolute;",ut("top",n.size.base),";",ut("right",n.size.base),";;label:euiImageButton__icon;"),openFullScreen:xe("opacity:0;cursor:pointer;",la,"{transition:opacity ",n.animation.slow," ",n.animation.resistance,";};label:openFullScreen;"),closeFullScreen:fCt}};var dCt=["hasAlt","hasShadow","children","onClick","onKeyDown","isFullScreen","isFullWidth","fullScreenIconColor"];function AY(){return AY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gCt={light:"ghost",dark:"default"},x8=function(t){var n=t.hasAlt,r=t.hasShadow,o=t.children,i=t.onClick,u=t.onKeyDown,c=t.isFullScreen,d=t.isFullWidth,g=t.fullScreenIconColor,O=g===void 0?"light":g,S=mCt(t,dCt),I=cr(),R=pbe(I),k=[R.euiImageButton,r?R.hasShadowHover:R.shadowHover,!c&&d&&R.fullWidth],M=LC(I),C=[M.euiImageButton__icon,M.openFullScreen],T=Kn("euiImageButton.openFullScreen","Click to open this image in fullscreen mode"),D=Kn("euiImageButton.closeFullScreen","Press Escape or click to close image fullscreen mode"),U=gCt[O];return a(fbe.default.Fragment,null,a("button",AY({type:"button",css:k,onClick:i,onKeyDown:u},S),c&&a(pn,null,a("p",null,D,n&&" \u2014 ")),o,!c&&a("div",{css:C},a(pn,null,a("p",null,n&&" \u2014 ",T)),a(Nt,{type:"fullScreen",color:U}))))};x8.propTypes={hasAlt:Lh.default.bool.isRequired,onClick:Lh.default.func.isRequired,onKeyDown:Lh.default.func,isFullWidth:Lh.default.bool.isRequired,isFullScreen:Lh.default.bool};var mbe=E(L()),hbe=E(rt());var dbe=function(t){var n=t.euiTheme;return{euiImageCaption:xe(El(t,"s"),";",ut("margin-top",n.size.xs),";;label:euiImageCaption;"),isOnOverlayMask:xe("color:",n.colors.ghost,";text-shadow:0 1px 2px ",Ta(n.colors.ink,.6),";[class*='euiLink']{color:",n.colors.ghost,";};label:isOnOverlayMask;")}};var Nh=(0,mbe.forwardRef)(function(e,t){var n=e.caption,r=e.isOnOverlayMask,o=r===void 0?!1:r,i=cr(),u=dbe(i),c=[u.euiImageCaption,o&&u.isOnOverlayMask];return n?a("figcaption",{ref:t,css:c},n):null});Nh.propTypes={isOnOverlayMask:hbe.default.bool};Nh.displayName="EuiImageCaption";function MY(){return MY=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ECt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NC=function(t){var n=t.className,r=t.alt,o=t.url,i=t.src,u=t.size,c=u===void 0?"original":u,d=t.hasShadow,g=t.style,O=t.wrapperProps,S=t.fullScreenIconColor,I=t.allowFullScreen,R=t.caption,k=t.float,A=t.margin,M=jCt(t,bCt),T=(0,LC.useState)(!1),N=OCt(T,2),U=N[0],X=N[1],Y=typeof c=="string"&&gbe.includes(c),K=(0,bbe.default)("euiImage",n),H=cr(),ne=cbe(H),pe=[ne.euiImage,Y&&ne[c],!Y&&ne.customSize,d&&ne.hasShadow],ye=[ne.euiImage,ne.isFullScreen],fe=!Y&&c!=="original",ue=typeof c=="string"?c:"".concat(c,"px"),xe=fe?TY(TY({},g),{},{maxWidth:ue,maxHeight:ue}):g,me=c==="fullWidth",We={hasShadow:d,wrapperProps:O,setIsFullScreen:X,fullScreenIconColor:S,isFullWidth:me,allowFullScreen:I,alt:r,caption:R,float:k,margin:A},$e=TY({className:K,src:i||o},M);return a(LC.default.Fragment,null,a(kY,We,a("img",DC({alt:r,css:pe,style:xe},$e))),I&&U&&a(MY,We,a("img",DC({alt:r,css:ye,style:g},$e))))};NC.propTypes={className:Ho.default.string,"aria-label":Ho.default.string,"data-test-subj":Ho.default.string,src:Ho.default.string,url:Ho.default.string,alt:Ho.default.string.isRequired,caption:Ho.default.node,size:Ho.default.oneOfType([Ho.default.any.isRequired,Ho.default.number.isRequired,Ho.default.string.isRequired]),float:Ho.default.any,margin:Ho.default.any,hasShadow:Ho.default.bool,allowFullScreen:Ho.default.bool,fullScreenIconColor:Ho.default.oneOf(["light","dark"]),wrapperProps:Ho.default.any};var xbe=E(D());var gSr=E(D());var PCt=Oe(".euiScreenReaderOnly{",Np(),";};label:globalStyles;"),wbe=function(){return a(Hj,{styles:PCt})};var Obe=E(D());var FC=function(t){var n=t.cache,r=t.children;return r&&n?a(AN,{value:n},r):a(Obe.default.Fragment,null,r)};var kCt=function(t){return t.hasOwnProperty("key")},er=function(t){var n=t.cache,r=t.theme,o=r===void 0?R1:r,i=t.globalStyles,u=i===void 0?_1e:i,c=t.utilityClasses,d=c===void 0?wbe:c,g=t.colorMode,O=t.modify,S=t.children,I,R,k;return n&&(kCt(n)?I=n:(I=n.default,R=n.global,k=n.utility)),a(FC,{cache:I},a(JF,{theme:o??void 0,colorMode:g,modify:O},o&&a(xbe.default.Fragment,null,a(FC,{cache:R,children:u&&a(u,null)}),a(FC,{cache:k,children:d&&a(d,null)})),a(GF,null,S)))};var Lh=E(D()),Oo=E(rt()),BC=E(yt());function WC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?WC=function(n){return typeof n}:WC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},WC(e)}var CCt=["children","className","items","display","expandByDefault","showExpansionArrows"];function HC(){return HC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function TCt(e){return LCt(e)||DCt(e)||zCt(e)||RCt()}function RCt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function zCt(e,t){if(e){if(typeof e=="string")return RY(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return RY(e,t)}}function DCt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function LCt(e){if(Array.isArray(e))return RY(e)}function RY(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function VC(e){return VC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},VC(e)}function uu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ebe=(0,Lh.createContext)("");function Sbe(e){return e.hasOwnProperty("aria-label")}function Ibe(e,t,n){return e??(t===""?n():t)}var jbe={default:null,compressed:"euiTreeView--compressed"},x8=function(e){WCt(n,e);var t=BCt(n);function n(){var r;NCt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u1&&arguments[1]!==void 0?arguments[1]:!1,g=r.state.openItems.indexOf(c.id);r.setState({expandChildNodes:!1}),c.isExpanded=!c.isExpanded,!d&&c.callback!==void 0&&c.callback(),r.isNodeOpen(c)?r.setState({openItems:r.state.openItems.filter(function(O,S){return S!==g})}):r.setState(function(O){return{openItems:[].concat(TCt(O.openItems),[c.id]),activeItem:c.id}})}),uu(su(r),"isNodeOpen",function(c){return r.state.openItems.includes(c.id)}),uu(su(r),"onKeyDown",function(c,d){switch(c.key){case Fr.ARROW_DOWN:{var g=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),O=g.indexOf(c.currentTarget);if(O>-1){var S=g[O+1];S&&(c.preventDefault(),c.stopPropagation(),S.focus())}break}case Fr.ARROW_UP:{var I=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),R=I.indexOf(c.currentTarget);if(R>-1){var k=I[R+-1];k&&(c.preventDefault(),c.stopPropagation(),k.focus())}break}case Fr.ARROW_RIGHT:{r.isNodeOpen(d)||(c.preventDefault(),c.stopPropagation(),r.handleNodeClick(d,!0));break}case Fr.ARROW_LEFT:r.isNodeOpen(d)&&(c.preventDefault(),c.stopPropagation(),r.handleNodeClick(d,!0));default:break}}),uu(su(r),"onChildrenKeydown",function(c,d){c.key===Fr.ARROW_LEFT&&(c.preventDefault(),c.stopPropagation(),r.buttonRef[d].focus())}),r}return FCt(n,[{key:"componentDidUpdate",value:function(o){this.props.id!==o.id&&this.setState({treeID:Ibe(this.props.id,this.context,this.treeIdGenerator)})}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,c=i.className,d=i.items,g=i.display,O=g===void 0?"default":g,S=i.expandByDefault,I=i.showExpansionArrows,R=ACt(i,CCt),k=(0,BC.default)("euiTreeView",O?jbe[O]:null,{"euiTreeView--withArrows":I},c),A="".concat(this.state.treeID,"--instruction");return a(Ebe.Provider,{value:this.state.treeID},a(Pt,{size:O==="compressed"?"s":"m",className:"euiTreeView__wrapper"},!this.isNested&&a(bt,{token:"euiTreeView.listNavigationInstructions",default:"You can quickly navigate this list using arrow keys."},function(M){return a(pn,null,a("p",{id:A},M))}),a("ul",HC({className:k,id:this.isNested?void 0:this.state.treeID,"aria-describedby":this.isNested?void 0:A},R),d.map(function(M,T){var N=M.id,U=o.treeIdGenerator(N);return a(ls,{key:M.id+T,fallback:typeof M.label=="string"?M.label:""},function(X,Y){return a(bt,{key:M.id+T,token:"euiTreeView.ariaLabel",default:"{nodeLabel} child of {ariaLabel}",values:{nodeLabel:Y,ariaLabel:Sbe(R)?R["aria-label"]:""}},function(K){var H=Sbe(R)?{"aria-label":K}:{"aria-labelledby":"".concat(N," ").concat(R["aria-labelledby"])},ne=(0,BC.default)("euiTreeView__node",O?jbe[O]:null,{"euiTreeView__node--expanded":o.isNodeOpen(M)}),pe=(0,BC.default)("euiTreeView__nodeInner",I&&M.children?"euiTreeView__nodeInner--withArrows":null,o.state.activeItem===M.id?"euiTreeView__node--active":null,M.className?M.className:null);return a(Lh.default.Fragment,null,a("li",{className:ne},a("button",{id:N,"aria-controls":U,"aria-expanded":o.isNodeOpen(M),ref:function(fe){return o.setButtonRef(fe,T)},"data-test-subj":"euiTreeViewButton-".concat(o.state.treeID),onKeyDown:function(fe){return o.onKeyDown(fe,M)},onClick:function(){return o.handleNodeClick(M)},className:pe},I&&M.children?a(Wt,{className:"euiTreeView__expansionArrow",size:O==="compressed"?"s":"m",type:o.isNodeOpen(M)?"arrowDown":"arrowRight"}):null,M.icon&&!M.useEmptyIcon?a("span",{className:"euiTreeView__iconWrapper"},o.isNodeOpen(M)&&M.iconWhenExpanded?M.iconWhenExpanded:M.icon):null,M.useEmptyIcon&&!M.icon?a("span",{className:"euiTreeView__iconPlaceholder"}):null,a("span",{ref:X,className:"euiTreeView__nodeLabel"},M.label)),a("div",{id:U,onKeyDown:function(fe){return o.onChildrenKeydown(fe,T)}},M.children&&o.isNodeOpen(M)?a(n,HC({items:M.children,display:O,showExpansionArrows:I,expandByDefault:o.state.expandChildNodes},H)):null)))})})}))))}}]),n}(Lh.Component);uu(x8,"contextType",Ebe);x8.propTypes={className:Oo.default.string,"data-test-subj":Oo.default.string,items:Oo.default.arrayOf(Oo.default.shape({children:Oo.default.arrayOf(Oo.default.any.isRequired),label:Oo.default.node.isRequired,id:Oo.default.string.isRequired,icon:Oo.default.element,iconWhenExpanded:Oo.default.element,useEmptyIcon:Oo.default.bool,isExpanded:Oo.default.bool,className:Oo.default.string,callback:Oo.default.func}).isRequired).isRequired,display:Oo.default.oneOf(["default","compressed"]),expandByDefault:Oo.default.bool,showExpansionArrows:Oo.default.bool,"aria-label":Oo.default.string,"aria-labelledby":Oo.default.string};var ys=E(D()),qt=E(rt()),Hbe=E(yt());var Pbe=E(D()),kbe=E(yt());var DY=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=t.searchableLabel||t.label;return n?r.trim().toLowerCase():r},qCt=function(t,n){var r=t.toLowerCase();return n.find(function(o){return DY(o)===r})},UCt=function(t,n,r,o,i){if(i){var u=qCt(DY(n,!1),i);if(u)return!1}if(o){t.push(n);return}if(!r){t.push(n);return}var c=DY(n);c.includes(r)&&t.push(n)},Nh=function(t,n,r,o){var i=n.toLowerCase(),u=[];return t.forEach(function(c){UCt(u,c,i,r,o)}),u};var $Ct=["onChange","options","value","placeholder","isPreFiltered","listId","className"];function LY(){return LY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NY=function(t){var n=t.onChange,r=t.options,o=t.value,i=t.placeholder,u=t.isPreFiltered,c=t.listId,d=t.className,g=JCt(t,$Ct),O=(0,Pbe.useCallback)(function(R){var k=R.target.value,A=Nh(r,k,u);n(k,A)},[r,u,n]),S=(0,kbe.default)("euiSelectableSearch",d),I=c?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":c,"aria-owns":c}:void 0;return a(n8,LY({className:S,placeholder:i,value:o,onChange:O,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},I,g))};var tIr=E(D()),_8=E(rt()),Cbe=E(yt());var XCt=["children","className","bordered"];function FY(){return FY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qC=function(t){var n=t.children,r=t.className,o=t.bordered,i=o===void 0?!1:o,u=KCt(t,XCt),c=(0,Cbe.default)("euiSelectableMessage",{"euiSelectableMessage--bordered":i},r);return a(Pt,FY({color:"subdued",size:"xs",className:c},u),n)};qC.propTypes={className:_8.default.string,"aria-label":_8.default.string,"data-test-subj":_8.default.string,bordered:_8.default.bool};var Wh=E(D()),at=E(rt()),Nbe=E(yt());var $C=E(yt()),Ir=E(rt()),Rbe=E(D());function UC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?UC=function(n){return typeof n}:UC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},UC(e)}var QCt=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap"],ZCt=["children","className"];function S8(){return S8=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function tAt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Mbe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function JC(e){return JC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},JC(e)}function Tbe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sAt(e){return e?e==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}}var zbe={none:null,s:"euiSelectableListItem--paddingSmall"},hIr=kt(zbe),GC=function(e){nAt(n,e);var t=oAt(n);function n(r){return tAt(this,n),t.call(this,r)}return rAt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,c=o.disabled,d=o.checked,g=o.isFocused,O=o.showIcons,S=o.prepend,I=o.append,R=o.allowExclusions,k=o.onFocusBadge,A=o.paddingSize,M=A===void 0?"s":A,T=o.role,N=T===void 0?"option":T,U=o.searchable,X=o.textWrap,Y=Abe(o,QCt),K=(0,$C.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":g},zbe[M],u),H=(0,$C.default)("euiSelectableListItem__text",Tbe({},"euiSelectableListItem__text--".concat(X),X)),ne;if(O){var pe=sAt(d),ye=pe.icon,fe=pe.color;ne=a(Wt,{className:"euiSelectableListItem__icon",color:fe,type:ye})}var ue,xe;R&&d==="on"?(ue=a(bt,{token:"euiSelectableListItem.includedOption",default:"Selected option."}),xe=a(bt,{token:"euiSelectableListItem.includedOptionInstructions",default:"To exclude this option, press enter."})):R&&d==="off"?(ue=a(bt,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),xe=a(bt,{token:"euiSelectableListItem.excludedOptionInstructions",default:"To uncheck this option, press enter."})):R&&!d&&(xe=a(bt,{token:"euiSelectableListItem.unckeckedOptionInstructions",default:"To select this option, press enter."}));var me=!c&&typeof d=="string";!R&&me&&(ue=a(bt,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),xe=U?a(bt,{token:"euiSelectableListItem.checkedOptionInstructions",default:"To uncheck this option, press enter."}):void 0);var We;S&&(We=a("span",{className:"euiSelectableListItem__prepend"},S));var $e;if(I||k){var Ge,Be={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(k===!0)Ge=a(Pi,S8({className:"euiSelectableListItem__onFocusBadge"},Be));else if(k&&k!==!1){var et=k.children,ut=k.className,Qe=Abe(k,ZCt);Ge=a(Pi,S8({className:(0,$C.default)("euiSelectableListItem__onFocusBadge",ut)},Be,Qe),et)}(I||g&&!c)&&($e=a("span",{className:"euiSelectableListItem__append"},I," ",g&&!c?Ge:null))}var Ht=(xe||ue)&&a(pn,null,a("div",null,ue||xe?" - ":null,ue,ue&&xe?" ":null,xe));return a("li",S8({role:N,"data-test-selected":me,"aria-checked":N==="option"?me:void 0,"aria-selected":!c&&g,className:K,"aria-disabled":c},Y),a("span",{className:"euiSelectableListItem__content"},ne,We,a("span",{className:H},i,Ht),$e))}}]),n}(Rbe.Component);Tbe(GC,"defaultProps",{showIcons:!0,onFocusBadge:!0,textWrap:"truncate"});GC.propTypes={className:Ir.default.string,"aria-label":Ir.default.string,"data-test-subj":Ir.default.string,children:Ir.default.node,checked:Ir.default.oneOf(["on","off",void 0]),showIcons:Ir.default.bool,isFocused:Ir.default.bool,disabled:Ir.default.bool,prepend:Ir.default.node,append:Ir.default.node,allowExclusions:Ir.default.bool,onFocusBadge:Ir.default.oneOfType([Ir.default.bool.isRequired,Ir.default.shape({iconType:Ir.default.oneOfType([Ir.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ir.default.string.isRequired,Ir.default.elementType.isRequired]),iconSide:Ir.default.oneOf(["left","right"]),color:Ir.default.oneOfType([Ir.default.string.isRequired,Ir.default.any.isRequired]),isDisabled:Ir.default.bool,closeButtonProps:Ir.default.any,className:Ir.default.string,"aria-label":Ir.default.string,"data-test-subj":Ir.default.string,iconOnClick:Ir.default.func,iconOnClickAriaLabel:Ir.default.any,onClick:Ir.default.func,onClickAriaLabel:Ir.default.any,href:Ir.default.string,target:Ir.default.string,rel:Ir.default.string}).isRequired]),paddingSize:Ir.default.any,searchable:Ir.default.bool,role:Ir.default.any,textWrap:Ir.default.oneOf(["truncate","wrap"])};function XC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?XC=function(n){return typeof n}:XC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},XC(e)}var uAt=["data"],cAt=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data"],pAt=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isVirtualized","textWrap"];function Dbe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function I8(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function dAt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lbe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function KC(e){return KC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},KC(e)}function kl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var j8=function(e){hAt(n,e);var t=gAt(n);function n(r){var o;return dAt(this,n),o=t.call(this,r),kl(vs(o),"listRef",null),kl(vs(o),"listBoxRef",null),kl(vs(o),"setListRef",function(i){o.listRef=i,i&&o.props.activeOptionIndex&&i.scrollToItem(o.props.activeOptionIndex,"auto")}),kl(vs(o),"removeScrollableTabStop",function(i){i&&i.setAttribute("tabindex","-1")}),kl(vs(o),"setListBoxRef",function(i){o.listBoxRef=i;var u=o.props,c=u.listId,d=u.searchable,g=u.singleSelection,O=u["aria-label"],S=u["aria-labelledby"],I=u["aria-describedby"];i&&(i.setAttribute("id",c),i.setAttribute("role","listbox"),d!==!0&&(i.setAttribute("tabindex","0"),g!=="always"&&g!==!0&&i.setAttribute("aria-multiselectable","true")),typeof O=="string"?i.setAttribute("aria-label",O):typeof S=="string"&&i.setAttribute("aria-labelledby",S),typeof I=="string"&&i.setAttribute("aria-labelledby",I))}),kl(vs(o),"ListRow",(0,Wh.memo)(function(i){var u=i.data,c=i.index,d=i.style,g=u[c],O=g.data,S=BY(g,uAt),I=g.label,R=g.isGroupLabel,k=g.checked,A=g.disabled,M=g.prepend,T=g.append,N=g.ref,U=g.key,X=g.searchableLabel,Y=g.data,K=BY(g,cAt),H=o.props,ne=H.activeOptionIndex,pe=H.allowExclusions,ye=H.onFocusBadge,fe=H.paddingSize,ue=H.searchValue,xe=H.showIcons,me=H.makeOptionId,We=H.renderOption,$e=H.setActiveOptionIndex,Ge=H.searchable,Be=H.textWrap;if(R)return a("li",Fh({role:"presentation",className:"euiSelectableList__groupLabel",style:d},K),M,I,T);var et=u.filter(function(Qe){return Qe.isGroupLabel}).length,ut=me(c);return a(GC,Fh({key:ut,id:ut,style:d,onMouseDown:function(){$e(c)},onClick:function(Ht){Ht.persist(),o.onAddOrRemoveOption(g,Ht)},ref:N?N.bind(null,c):void 0,isFocused:ne===c,title:X||I,checked:k,disabled:A,prepend:M,append:T,"aria-posinset":c+1-et,"aria-setsize":u.length-et,onFocusBadge:ye,allowExclusions:pe,showIcons:xe,paddingSize:fe,searchable:Ge,textWrap:Be},K),We?We(I8(I8({},S),O),o.props.searchValue):a(ac,{search:ue},I))},Uye)),kl(vs(o),"onAddOrRemoveOption",function(i,u){if(!i.disabled){var c=o.props,d=c.allowExclusions,g=c.options,O=c.visibleOptions,S=O===void 0?g:O;o.props.setActiveOptionIndex(S.findIndex(function(I){var R=I.label;return R===i.label}),function(){i.checked==="on"&&d?o.onExcludeOption(i,u):i.checked==="on"||i.checked==="off"?o.onRemoveOption(i,u):o.onAddOption(i,u)})}}),kl(vs(o),"onAddOption",function(i,u){var c=o.props,d=c.onOptionClick,g=c.options,O=c.singleSelection,S=g.map(function(I){var R=I8({},I);return O&&delete R.checked,I===i&&(R.checked="on"),R});d(S,u)}),kl(vs(o),"onRemoveOption",function(i,u){var c=o.props,d=c.onOptionClick,g=c.singleSelection,O=c.options,S=O.map(function(I){var R=I8({},I);return I===i&&g!=="always"&&delete R.checked,R});d(S,u)}),kl(vs(o),"onExcludeOption",function(i,u){var c=o.props,d=c.onOptionClick,g=c.options;i.checked="off";var O=g.map(function(S){var I=I8({},S);return S===i&&(I.checked="off"),I});d(O,u)}),o}return mAt(n,[{key:"componentDidUpdate",value:function(){var o=this.props.activeOptionIndex;this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant","".concat(this.props.makeOptionId(o))),this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,c=i.options,d=i.searchValue,g=i.onOptionClick,O=i.renderOption,S=i.height,I=i.windowProps,R=i.rowHeight,k=i.activeOptionIndex,A=i.makeOptionId,M=i.showIcons,T=i.singleSelection,N=i.visibleOptions,U=i.allowExclusions,X=i.bordered,Y=i.paddingSize,K=i.searchable,H=i.onFocusBadge,ne=i.listId,pe=i.setActiveOptionIndex,ye=i["aria-label"],fe=i["aria-labelledby"],ue=i["aria-describedby"],xe=i.role,me=i.isVirtualized,We=i.textWrap,$e=BY(i,pAt),Ge=N||c,Be=S==="full",et=Be?!1:S;if(et===void 0){var ut=7,Qe=Ge.length,Ht=Ge.length>ut;Ht?et=(ut-.5)*R:et=Qe*R}var Xe=(0,Nbe.default)("euiSelectableList",{"euiSelectableList-fullHeight":Be,"euiSelectableList-bordered":X},u);return a("div",Fh({className:Xe},$e),me?a(sX,{disableHeight:!Be},function(Ft){var Vt=Ft.width,lt=Ft.height;return a(cC,Fh({ref:o.setListRef,outerRef:o.removeScrollableTabStop,className:"euiSelectableList__list","data-skip-axe":"scrollable-region-focusable",width:Vt,height:et||lt,itemCount:Ge.length,itemData:Ge,itemSize:R,innerElementType:"ul",innerRef:o.setListBoxRef},I),o.ListRow)}):a("div",{className:"euiSelectableList__list",ref:this.removeScrollableTabStop},a("ul",{ref:this.setListBoxRef},Ge.map(function(Ft,Vt){return Wh.default.createElement(o.ListRow,{key:Vt,data:Ge,index:Vt},null)}))))}}]),n}(Wh.Component);kl(j8,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});j8.propTypes={className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,activeOptionIndex:at.default.number,showIcons:at.default.bool,singleSelection:at.default.oneOfType([at.default.oneOf(["always"]),at.default.bool.isRequired]),windowProps:at.default.any,bordered:at.default.bool,onFocusBadge:at.default.oneOfType([at.default.bool.isRequired,at.default.shape({iconType:at.default.oneOfType([at.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,at.default.string.isRequired,at.default.elementType.isRequired]),iconSide:at.default.oneOf(["left","right"]),color:at.default.oneOfType([at.default.string.isRequired,at.default.any.isRequired]),isDisabled:at.default.bool,closeButtonProps:at.default.any,className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,iconOnClick:at.default.func,iconOnClickAriaLabel:at.default.any,onClick:at.default.func,onClickAriaLabel:at.default.any,href:at.default.string,target:at.default.string,rel:at.default.string}).isRequired]),paddingSize:at.default.any,textWrap:at.default.oneOf(["truncate","wrap"]),isVirtualized:at.default.oneOfType([at.default.oneOf([!0]),at.default.oneOf([!1]).isRequired]),rowHeight:at.default.number,options:at.default.arrayOf(at.default.shape({isGroupLabel:at.default.oneOfType([at.default.oneOf([!0]).isRequired,at.default.oneOf([!1])]),className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,label:at.default.string,searchableLabel:at.default.string,key:at.default.string,checked:at.default.oneOf(["on","off",void 0]),disabled:at.default.bool,prepend:at.default.node,append:at.default.node,ref:at.default.func,data:at.default.shape({})}).isRequired).isRequired,visibleOptions:at.default.arrayOf(at.default.shape({isGroupLabel:at.default.oneOfType([at.default.oneOf([!0]).isRequired,at.default.oneOf([!1])]),className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,label:at.default.string,searchableLabel:at.default.string,key:at.default.string,checked:at.default.oneOf(["on","off",void 0]),disabled:at.default.bool,prepend:at.default.node,append:at.default.node,ref:at.default.func,data:at.default.shape({})}).isRequired),searchValue:at.default.string.isRequired,onOptionClick:at.default.func.isRequired,renderOption:at.default.func,height:at.default.oneOfType([at.default.number.isRequired,at.default.oneOf(["full"])]),allowExclusions:at.default.bool,searchable:at.default.bool,makeOptionId:at.default.func.isRequired,listId:at.default.string.isRequired,setActiveOptionIndex:at.default.func.isRequired};function YC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?YC=function(n){return typeof n}:YC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},YC(e)}var bAt=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","isPreFiltered"],wAt=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],OAt=["aria-label","aria-describedby","isVirtualized","rowHeight"];function xAt(e,t){return jAt(e)||IAt(e,t)||SAt(e,t)||_At()}function _At(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function SAt(e,t){if(e){if(typeof e=="string")return Fbe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Fbe(e,t)}}function Fbe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function PAt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Bbe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function QC(e){return QC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},QC(e)}function Vo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pf=function(e){CAt(n,e);var t=AAt(n);function n(r){var o,i;PAt(this,n),i=t.call(this,r),Vo(ci(i),"inputRef",null),Vo(ci(i),"containerRef",(0,ys.createRef)()),Vo(ci(i),"optionsListRef",(0,ys.createRef)()),Vo(ci(i),"preventOnFocus",!1),Vo(ci(i),"rootId",void 0),Vo(ci(i),"messageContentId",void 0),Vo(ci(i),"listId",void 0),Vo(ci(i),"onMouseDown",function(){i.preventOnFocus=!0}),Vo(ci(i),"onFocus",function(){if(i.preventOnFocus){i.preventOnFocus=!1;return}if(!(!i.state.visibleOptions.length||i.state.activeOptionIndex!=null)){var k=i.state.visibleOptions.findIndex(function(A){return A.checked&&!A.disabled&&!A.isGroupLabel});k>-1?i.setState({activeOptionIndex:k,isFocused:!0}):i.setState({activeOptionIndex:i.state.visibleOptions.findIndex(function(A){return!A.disabled&&!A.isGroupLabel}),isFocused:!0})}}),Vo(ci(i),"onKeyDown",function(k){var A=i.optionsListRef.current;switch(k.key){case Fr.ARROW_UP:k.preventDefault(),k.stopPropagation(),i.incrementActiveOptionIndex(-1);break;case Fr.ARROW_DOWN:k.preventDefault(),k.stopPropagation(),i.incrementActiveOptionIndex(1);break;case Fr.ENTER:case Fr.SPACE:if(i.props.searchable){var M,T;if(k.target===i.inputRef&&k.key===Fr.SPACE||!(k.target===i.inputRef||k.target===((M=i.optionsListRef.current)===null||M===void 0||(T=M.listBoxRef)===null||T===void 0?void 0:T.parentElement)))return}k.preventDefault(),k.stopPropagation(),i.state.activeOptionIndex!=null&&A&&(k.persist(),A.onAddOrRemoveOption(i.state.visibleOptions[i.state.activeOptionIndex],k));break;case Fr.ALT:case Fr.SHIFT:case Fr.CTRL:case Fr.META:break;default:i.setState({activeOptionIndex:void 0},i.onFocus);break}}),Vo(ci(i),"incrementActiveOptionIndex",function(k){i.state.visibleOptions.length&&i.setState(function(A){var M=A.activeOptionIndex,T=A.visibleOptions,N;M==null?N=k<0?T.length-1:0:(N=M+k,N<0?N=T.length-1:N===T.length&&(N=0));for(var U=k>0?1:-1;T[N].isGroupLabel||T[N].disabled;)N=N+U,N<0?N=T.length-1:N===T.length&&(N=0);return{activeOptionIndex:N}})}),Vo(ci(i),"onSearchChange",function(k,A){var M,T;i.setState({searchValue:k,visibleOptions:A,activeOptionIndex:void 0},function(){i.state.isFocused&&i.onFocus()}),(M=i.props.searchProps)===null||M===void 0||(T=M.onChange)===null||T===void 0||T.call(M,k,A)}),Vo(ci(i),"onContainerBlur",function(k){var A,M;((A=k.relatedTarget)===null||A===void 0||(M=A.firstChild)===null||M===void 0?void 0:M.id)!==i.listId&&i.setState({activeOptionIndex:void 0,isFocused:!1})}),Vo(ci(i),"onOptionClick",function(k,A){var M=i.props,T=M.isPreFiltered,N=M.onChange,U=i.state.searchValue,X=Nh(k,U,T);i.setState({visibleOptions:X}),N&&N(k,A)}),Vo(ci(i),"scrollToItem",function(k,A){var M,T;(M=i.optionsListRef.current)===null||M===void 0||(T=M.listRef)===null||T===void 0||T.scrollToItem(k,A)}),Vo(ci(i),"makeOptionId",function(k){return k!=null?"".concat(i.listId,"_option-").concat(k):""}),i.rootId=r.id?function(k){return"".concat(r.id).concat(k?"_".concat(k):"")}:_r(),i.listId=i.rootId("listbox"),i.messageContentId=i.rootId("messageContent");var u=r.options,c=r.singleSelection,d=r.isPreFiltered,g=r.searchProps,O=g?.value||String(g?.defaultValue||""),S=Nh(u,O,d);g==null||(o=g.onChange)===null||o===void 0||o.call(g,O,S);var I=u.filter(function(k){return k.checked}),R;return c&&I.length===1&&S.includes(I[0])&&(R=S.indexOf(I[0])),i.state={activeOptionIndex:R,searchValue:O,visibleOptions:S,isFocused:!1},i}return kAt(n,[{key:"componentDidUpdate",value:function(o,i){if(i.activeOptionIndex!==this.state.activeOptionIndex){var u,c,d=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(u=(c=this.props).onActiveOptionChange)===null||u===void 0||u.call(c,d)}}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,c=i.className,d=i.options,g=i.onChange,O=i.onActiveOptionChange,S=i.searchable,I=i.searchProps,R=i.singleSelection,k=i.isLoading,A=i.listProps,M=i.renderOption,T=i.height,N=i.allowExclusions,U=i["aria-label"],X=i["aria-describedby"],Y=i.loadingMessage,K=i.noMatchesMessage,H=i.emptyMessage,ne=i.errorMessage,pe=i.isPreFiltered,ye=qY(i,bAt),fe=this.state,ue=fe.searchValue,xe=fe.visibleOptions,me=fe.activeOptionIndex,We={"aria-label":void 0,"aria-describedby":void 0},$e=I||We,Ge=$e["aria-label"],Be=$e["aria-describedby"],et=$e.onChange,ut=$e.defaultValue,Qe=$e.inputRef,Ht=qY($e,wAt),Xe=A||We,Ft=Xe["aria-label"],Vt=Xe["aria-describedby"],lt=Xe.isVirtualized,Ct=Xe.rowHeight,Mr=qY(Xe,OAt),Sr;lt===!1?Sr={isVirtualized:lt}:Ct!=null&&(Sr={rowHeight:Ct});var An=(0,Hbe.default)("euiSelectable",{"euiSelectable-fullHeight":T==="full"},c),jr;ne!=null?jr=typeof ne=="string"?a("p",null,ne):ne:k?Y===void 0||typeof Y=="string"?jr=a(ys.default.Fragment,null,a(Zt,{size:"m"}),a(so,{size:"xs"}),a("p",null,Y||a(bt,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):jr=ys.default.cloneElement(Y,VY({id:this.messageContentId},Y.props)):ue&&xe.length===0?K===void 0||typeof K=="string"?jr=a("p",null,K||a(bt,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:a("strong",null,ue)}})):jr=ys.default.cloneElement(K,VY({id:this.messageContentId},K.props)):d.length||(H===void 0||typeof H=="string"?jr=a("p",null,H||a(bt,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):jr=ys.default.cloneElement(H,VY({id:this.messageContentId},H.props)));var Dt=function(Qn,tn){if(Qn&&Qn["aria-label"])return{"aria-label":Qn["aria-label"]};var Uo=tn?" ".concat(tn):"";return Qn&&Qn["aria-describedby"]?{"aria-describedby":"".concat(Qn["aria-describedby"]).concat(Uo)}:U?{"aria-label":U}:X?{"aria-describedby":"".concat(X).concat(Uo)}:{}},en=Dt(I,this.messageContentId),Cr=!!Object.keys(en).length,Nn=S?a(bt,{token:"euiSelectable.placeholderName",default:"Filter options"},function(va){return a(NY,E8({key:"listSearch",options:d,value:ue,onChange:o.onSearchChange,listId:o.optionsListRef.current?o.listId:void 0,"aria-activedescendant":o.makeOptionId(me),placeholder:va,isPreFiltered:pe??!1,inputRef:function(tn){var Uo;o.inputRef=tn,I==null||(Uo=I.inputRef)===null||Uo===void 0||Uo.call(I,tn)}},Cr?en:{"aria-label":va},Ht))}):void 0,co=xe.filter(function(va){return!va.disabled}).length,po=S&&a(bt,{token:"euiSelectable.searchResults",default:function(Qn){var tn=Qn.resultsLength;return"".concat(tn," result").concat(tn===1?"":"s"," available")},values:{resultsLength:co}}),qo=this.rootId("instructions"),Mn=Dt(A,qo),fi=!!Object.keys(Mn).length,Ba=a(bt,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.","Filter options"]},function(va){var Qn=xAt(va,2),tn=Qn[0],Uo=Qn[1];return a(ys.default.Fragment,null,S&&a(I2,{isActive:jr!=null||me!=null},jr||po),a(pn,null,a("p",{id:qo},Uo)),jr?a(qC,{"data-test-subj":"euiSelectableMessage",id:o.messageContentId,bordered:A&&A.bordered},jr):a(j8,E8({"data-test-subj":"euiSelectableList",key:"list",options:d,visibleOptions:xe,searchValue:ue,activeOptionIndex:me,setActiveOptionIndex:function(hc,br){o.setState({activeOptionIndex:hc},br)},onOptionClick:o.onOptionClick,singleSelection:R,ref:o.optionsListRef,renderOption:M,height:T,allowExclusions:N,searchable:S,makeOptionId:o.makeOptionId,listId:o.listId},fi?Mn:S&&{"aria-label":tn},Mr,Sr)))});return a("div",E8({ref:this.containerRef,className:An,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},ye),u&&u(Ba,Nn))}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,c=o.isPreFiltered,d=o.searchProps,g=i.activeOptionIndex,O=i.searchValue,S=Nh(u,O,c),I={visibleOptions:S,activeOptionIndex:g};return g!=null&&g>=S.length&&(I.activeOptionIndex=-1),d?.value!=null&&d.value!==O&&(I.searchValue=d.value),I}}]),n}(ys.Component);Vo(pf,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1});pf.propTypes={className:qt.default.string,"aria-label":qt.default.string,"data-test-subj":qt.default.string,searchable:qt.default.oneOfType([qt.default.oneOf([!1]).isRequired,qt.default.oneOf([!0]).isRequired]).isRequired,searchProps:qt.default.any,children:qt.default.func,options:qt.default.arrayOf(qt.default.shape({isGroupLabel:qt.default.oneOfType([qt.default.oneOf([!0]).isRequired,qt.default.oneOf([!1])]),className:qt.default.string,"aria-label":qt.default.string,"data-test-subj":qt.default.string,label:qt.default.string,searchableLabel:qt.default.string,key:qt.default.string,checked:qt.default.oneOf(["on","off",void 0]),disabled:qt.default.bool,prepend:qt.default.node,append:qt.default.node,ref:qt.default.func,data:qt.default.shape({})}).isRequired).isRequired,onChange:qt.default.func,onActiveOptionChange:qt.default.func,singleSelection:qt.default.oneOfType([qt.default.oneOf(["always"]),qt.default.bool.isRequired]),allowExclusions:qt.default.bool,isLoading:qt.default.bool,height:qt.default.oneOfType([qt.default.number.isRequired,qt.default.oneOf(["full"])]),listProps:qt.default.any,renderOption:qt.default.func,loadingMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired]),noMatchesMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired]),emptyMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired]),errorMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired,qt.default.oneOf([null])]),isPreFiltered:qt.default.bool};var NIr=E(D()),r0=E(rt()),Vbe=E(yt());var RAt=["children","className","compressed","tableLayout","responsive"];function $Y(){return $Y=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LAt={fixed:null,auto:"euiTable--auto"},ZC=function(t){var n=t.children,r=t.className,o=t.compressed,i=t.tableLayout,u=i===void 0?"fixed":i,c=t.responsive,d=c===void 0?!0:c,g=zAt(t,RAt),O=(0,Vbe.default)("euiTable",r,{"euiTable--compressed":o,"euiTable--responsive":d},LAt[u]);return a("table",$Y({tabIndex:-1,className:O},g),n)};ZC.propTypes={compressed:r0.default.bool,responsive:r0.default.bool,tableLayout:r0.default.oneOf(["fixed","auto"]),className:r0.default.string,"aria-label":r0.default.string,"data-test-subj":r0.default.string};var HIr=E(D()),P8=E(rt());var NAt=["children","className","bodyRef"];function JY(){return JY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bh=function(t){var n=t.children,r=t.className,o=t.bodyRef,i=FAt(t,NAt);return a("tbody",JY({className:r,ref:o},i),n)};Bh.propTypes={className:P8.default.string,"aria-label":P8.default.string,"data-test-subj":P8.default.string,bodyRef:P8.default.any};var $Ir=E(D()),eA=E(rt());var BAt=["children","className"];function GY(){return GY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tA=function(t){var n=t.children,r=t.className,o=HAt(t,BAt);return a("tfoot",GY({className:r},o),a("tr",null,n))};tA.propTypes={className:eA.default.string,"aria-label":eA.default.string,"data-test-subj":eA.default.string};var YIr=E(D()),df=E(rt()),KY=E(yt());var qAt=["width"];function qbe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Ube(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GAt="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",ff=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.width,o=$At(t,qAt),i=n;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),r&&i&&console.warn(GAt),Ube(Ube({},o),{},{width:i||r})};var XAt=["children","align","className","width","style"];function XY(){return XY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hh=function(t){var n=t.children,r=t.align,o=r===void 0?wl:r,i=t.className,u=t.width,c=t.style,d=KAt(t,XAt),g=(0,KY.default)("euiTableFooterCell",i),O=(0,KY.default)("euiTableCellContent",i,{"euiTableCellContent--alignRight":o===rs,"euiTableCellContent--alignCenter":o===Gu}),S=ff(c,u);return a("td",XY({className:g,style:S},d),a("div",{className:O},a("span",{className:"euiTableCellContent__text"},n)))};Hh.propTypes={className:df.default.string,"aria-label":df.default.string,"data-test-subj":df.default.string,align:df.default.oneOf(["left","right","center"]),width:df.default.oneOfType([df.default.string.isRequired,df.default.number.isRequired])};var njr=E(D()),Vh=E(rt());var QAt=["children","className","wrapWithTableRow"];function YY(){return YY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rA=function(t){var n=t.children,r=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,u=ZAt(t,QAt);return a("thead",YY({className:r},u),i?a("tr",null,n):n)};rA.propTypes={className:Vh.default.string,"aria-label":Vh.default.string,"data-test-subj":Vh.default.string,children:Vh.default.node,wrapWithTableRow:Vh.default.bool};var ljr=E(D()),pi=E(rt()),nA=E(yt());var tMt=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description"];function oA(){return oA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $be=function(t){var n=t.className,r=t.description,o=t.children,i=t.isSorted,u=t.isSortAscending,c=t.showSortMsg;return a("span",{className:n},a(ls,null,function(d,g){return a(bt,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:g,description:r}},function(O){return a("span",{title:r?O:g,ref:d,className:"euiTableCellContent__text"},o)})}),r&&a(pn,null,a("span",null,r)),c&&i&&a(Wt,{className:"euiTableSortIcon",type:u?"sortUp":"sortDown",size:"m"}))},qh=function(t){var n=t.children,r=t.align,o=r===void 0?wl:r,i=t.onSort,u=t.isSorted,c=t.isSortAscending,d=t.className,g=t.scope,O=t.mobileOptions,S=O===void 0?{show:!0}:O,I=t.width,R=t.style,k=t.readOnly,A=t.description,M=rMt(t,tMt),T=(0,nA.default)("euiTableHeaderCell",d,{"euiTableHeaderCell--hideForDesktop":S.only,"euiTableHeaderCell--hideForMobile":!S.show}),N=(0,nA.default)("euiTableCellContent",d,{"euiTableCellContent--alignRight":o===rs,"euiTableCellContent--alignCenter":o===Gu}),U=ff(R,I),X=n?"th":"td",Y=X==="th"?g??"col":void 0;if(i||u){var K=(0,nA.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":u}),H="none";u&&(H=c?"ascending":"descending");var ne=a($be,{className:N,description:A,showSortMsg:!0,children:n,isSorted:u,isSortAscending:c});return a(X,oA({className:T,scope:Y,role:"columnheader","aria-sort":H,"aria-live":"polite",style:U},M),i&&!k?a("button",{type:"button",className:K,onClick:i,"data-test-subj":"tableHeaderSortButton"},ne):ne)}return a(X,oA({className:T,scope:Y,role:"columnheader",style:U},M),a($be,{className:N,description:A,showSortMsg:!1,children:n,isSorted:u,isSortAscending:c}))};qh.propTypes={className:pi.default.string,"aria-label":pi.default.string,"data-test-subj":pi.default.string,align:pi.default.oneOf(["left","right","center"]),isSortAscending:pi.default.bool,isSorted:pi.default.bool,mobileOptions:pi.default.shape({show:pi.default.bool,only:pi.default.bool}),onSort:pi.default.func,scope:pi.default.oneOf(["col","row","colgroup","rowgroup"]),width:pi.default.oneOfType([pi.default.string.isRequired,pi.default.number.isRequired]),description:pi.default.string,readOnly:pi.default.bool};var vjr=E(D()),mf=E(rt()),Jbe=E(yt());var oMt=["children","className","scope","style","width"];function QY(){return QY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iA=function(t){var n=t.children,r=t.className,o=t.scope,i=o===void 0?"col":o,u=t.style,c=t.width,d=iMt(t,oMt),g=(0,Jbe.default)("euiTableHeaderCellCheckbox",r),O=ff(u,c);return a("th",QY({className:g,scope:i,style:O},d),a("div",{className:"euiTableCellContent"},n))};iA.propTypes={className:mf.default.string,"aria-label":mf.default.string,"data-test-subj":mf.default.string,width:mf.default.oneOfType([mf.default.string.isRequired,mf.default.number.isRequired]),scope:mf.default.oneOf(["col","row","colgroup","rowgroup"])};var xjr=E(D()),aA=E(rt()),Gbe=E(yt());var lMt=["children","className"];function ZY(){return ZY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lA=function(t){var n=t.children,r=t.className,o=sMt(t,lMt),i=(0,Gbe.default)("euiTableHeaderMobile",r);return a("div",ZY({className:i},o),n)};lA.propTypes={className:aA.default.string,"aria-label":aA.default.string,"data-test-subj":aA.default.string};var Ybe=E(D()),cu=E(rt()),Qbe=E(yt());var jjr=E(D()),hf=E(rt()),Xbe=E(yt());var cMt=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function eQ(){return eQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tQ=function(t){var n=t.children,r=t.onSort,o=t.isSorted,i=t.isSortAscending,u=t.className,c=t.ariaLabel,d=pMt(t,cMt),g="empty";o&&(g=i?"sortUp":"sortDown");var O=(0,Xbe.default)("euiTableSortMobileItem",u,{"euiTableSortMobileItem-isSorted":o}),S=c||n,I="Sort ".concat(S," ").concat(i?"descending":"ascending");return a(fs,eQ({className:O,icon:g,onClick:r,"aria-label":I},d),n)};tQ.propTypes={onSort:hf.default.func,isSorted:hf.default.bool,isSortAscending:hf.default.bool,ariaLabel:hf.default.string,className:hf.default.string,"aria-label":hf.default.string,"data-test-subj":hf.default.string};function sA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?sA=function(n){return typeof n}:sA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},sA(e)}var dMt=["className","anchorPosition","items"];function nQ(){return nQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function gMt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Kbe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function cA(e){return cA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},cA(e)}function rQ(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pA=function(e){yMt(n,e);var t=bMt(n);function n(){var r;gMt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n0=function(t){var n=t.children,r=t.className,o=t.isSelected,i=t.isSelectable,u=t.hasActions,c=t.isExpandedRow,d=t.isExpandable,g=t.onClick,O=_Mt(t,xMt),S=(0,Zbe.default)("euiTableRow",r,{"euiTableRow-isSelectable":i,"euiTableRow-isSelected":o,"euiTableRow-hasActions":u,"euiTableRow-isExpandedRow":c,"euiTableRow-isExpandable":d,"euiTableRow-isClickable":g});if(!g)return a("tr",fA({className:S},O),n);var I=function(A){A.key===Fr.SPACE&&A.preventDefault()},R=function(A){(A.key===Fr.ENTER||A.key===Fr.SPACE)&&g(A)};return a("tr",fA({className:S,onClick:g,onKeyDown:I,onKeyUp:R,tabIndex:0},O),n)};n0.propTypes={className:pu.default.string,"aria-label":pu.default.string,"data-test-subj":pu.default.string,isSelectable:pu.default.bool,isSelected:pu.default.bool,hasActions:pu.default.bool,isExpandable:pu.default.bool,isExpandedRow:pu.default.bool,onClick:pu.default.any};var $h=E(D()),Sn=E(rt()),Uh=E(yt());var IMt=["align","children","className","truncateText","setScopeRow","showOnHover","textOnly","hasActions","isExpander","style","width","valign","mobileOptions"];function dA(){return dA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gf=function(t){var n,r,o=t.align,i=o===void 0?wl:o,u=t.children,c=t.className,d=t.truncateText,g=t.setScopeRow,O=t.showOnHover,S=t.textOnly,I=S===void 0?!0:S,R=t.hasActions,k=t.isExpander,A=t.style,M=t.width,T=t.valign,N=T===void 0?"middle":T,U=t.mobileOptions,X=U===void 0?{show:!0}:U,Y=EMt(t,IMt),K=(0,Uh.default)("euiTableRowCell",t3e({"euiTableRowCell--hasActions":R,"euiTableRowCell--isExpander":k,"euiTableRowCell--hideForDesktop":X.only,"euiTableRowCell--enlargeForMobile":X.enlarge},"euiTableRowCell--".concat(N),N)),H=(0,Uh.default)("euiTableCellContent",c,{"euiTableCellContent--alignRight":i===rs,"euiTableCellContent--alignCenter":i===Gu,"euiTableCellContent--showOnHover":O,"euiTableCellContent--truncateText":d,"euiTableCellContent--overflowingContent":I!==!0}),ne=(0,Uh.default)("euiTableCellContent",c,{"euiTableCellContent--alignRight":X.align===rs||i===rs,"euiTableCellContent--alignCenter":X.align===Gu||i===Gu,"euiTableCellContent--showOnHover":(n=X.showOnHover)!==null&&n!==void 0?n:O,"euiTableCellContent--truncateText":(r=X.truncateText)!==null&&r!==void 0?r:d,"euiTableCellContent--overflowingContent":X.textOnly!==!0||I!==!0}),pe=(0,Uh.default)({euiTableCellContent__text:I===!0,euiTableCellContent__hoverItem:O}),ye=U2(["xs","s"])&&X.width?X.width:M,fe=ff(A,ye);function ue(Be){var et=Be;return I===!0?et=a("span",{className:pe},Be):$h.default.isValidElement(Be)&&(et=$h.default.Children.map(Be,function(ut){return $h.default.cloneElement(ut,{className:(0,Uh.default)(ut.props.className,pe)})})),et}var xe=ue(u),me="euiTableRowCell--hideForMobile",We="euiTableRowCell--hideForDesktop",$e=g?"th":"td",Ge=jMt({scope:g?"row":void 0,style:fe},Y);return X.show===!1?a($e,dA({className:"".concat(K," ").concat(me)},Ge),a("div",{className:H},xe)):a($e,dA({className:K},Ge),X.header&&a("div",{className:"euiTableRowCell__mobileHeader ".concat(We)},X.header),X.render?a($h.Fragment,null,a("div",{className:"".concat(ne," ").concat(We)},ue(X.render)),a("div",{className:"".concat(H," ").concat(me)},xe)):a("div",{className:H},xe))};gf.propTypes={className:Sn.default.string,"aria-label":Sn.default.string,"data-test-subj":Sn.default.string,valign:Sn.default.any,setScopeRow:Sn.default.bool,hasActions:Sn.default.bool,isExpander:Sn.default.bool,mobileOptions:Sn.default.shape({show:Sn.default.bool,only:Sn.default.bool,render:Sn.default.node,header:Sn.default.oneOfType([Sn.default.node.isRequired,Sn.default.bool.isRequired]),enlarge:Sn.default.bool,width:Sn.default.any,align:Sn.default.oneOf(["left","right","center"]),showOnHover:Sn.default.bool,textOnly:Sn.default.bool,truncateText:Sn.default.bool}),align:Sn.default.oneOf(["left","right","center"]),showOnHover:Sn.default.bool,textOnly:Sn.default.bool,truncateText:Sn.default.bool,width:Sn.default.any};var Gjr=E(D()),mA=E(rt()),r3e=E(yt());var kMt=["children","className"];function iQ(){return iQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hA=function(t){var n=t.children,r=t.className,o=CMt(t,kMt),i=(0,r3e.default)("euiTableRowCellCheckbox",r);return a("td",iQ({className:i},o),a("div",{className:"euiTableCellContent"},n))};hA.propTypes={className:mA.default.string,"aria-label":mA.default.string,"data-test-subj":mA.default.string};var SA=E(D()),Ne=E(rt()),b3e=E(yt());var o3e=E(D()),Or=E(rt());function gA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?gA=function(n){return typeof n}:gA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},gA(e)}function MMt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n3e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vA(e){return vA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},vA(e)}function o0(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function NMt(e){return e.hasOwnProperty("render")}var lQ=function(e){RMt(n,e);var t=zMt(n);function n(){var r;MMt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function wA(e){return wA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},wA(e)}function yA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var uQ=function(e){BMt(n,e);var t=HMt(n);function n(r){var o;return FMt(this,n),o=t.call(this,r),yA(k8(o),"mounted",void 0),yA(k8(o),"onFocus",function(){o.mounted&&o.setState({hasFocus:!0})}),yA(k8(o),"onBlur",function(){o.mounted&&o.setState({hasFocus:!1})}),yA(k8(o),"hasFocus",function(){return o.state.hasFocus}),o.state={hasFocus:!1},o.mounted=!1,o}return WMt(n,[{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var o=this.props,i=o.action,u=o.enabled,c=o.item,d=o.className,g=i.render(c,u),O=(0,OA.cloneElement)(g,{onFocus:this.onFocus,onBlur:this.onBlur}),S=this.hasFocus()?{opacity:1}:void 0;return a("div",{style:S,className:d},O)}}]),n}(OA.Component);uQ.propTypes={action:Jh.default.any.isRequired,enabled:Jh.default.bool.isRequired,item:Jh.default.any.isRequired,className:Jh.default.string.isRequired,index:Jh.default.number};var s3e=function(t){return t.hasOwnProperty("render")};var p3e=function(t){var n=t.actions,r=t.itemId,o=t.item,i=t.actionEnabled,u=t.className,c=n.length>2;return a(u3e.default.Fragment,null,n.reduce(function(d,g,O){var S=g.available?g.available(o):!0;if(!S)return d;var I=i(g),R="item_action_".concat(r,"_").concat(O),k=(0,c3e.default)(u,{expandedItemActions__completelyHide:c&&O<2});return s3e(g)?d.push(a(uQ,{key:R,className:k,index:O,action:g,enabled:I,item:o})):d.push(a(a3e,{key:R,className:k,action:g,enabled:I,item:o})),d},[]))};var f3e=E(D());var UMt={pageSizeOptions:[10,25,50]},d3e=function(t){var n=t.pagination,r=t.onPageSizeChange,o=t.onPageChange,i=t["aria-controls"],u=t["aria-label"],c=n.pageSizeOptions?n.pageSizeOptions:UMt.pageSizeOptions,d=n.pageSize?Math.ceil(n.totalItemCount/n.pageSize):1;return(0,f3e.useEffect)(function(){de.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function h3e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function ma(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _A(e){return _A=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_A(e)}function Cl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var fQ={auto:{align:wl,render:function(t){return HE(t)}},string:{align:wl,render:function(t){return G1(t)}},number:{align:rs,render:function(t){return J1(t)}},boolean:{align:wl,render:function(t){return U1(t)}},date:{align:wl,render:function(t){return $1(t)}}},v3e=Object.keys(fQ);function Gh(e,t){if(t)return Jp(t)?t(e):e[t]}function aTt(e,t){return t?Jp(t)?t(e):t:{}}function lTt(e,t,n){return n?Jp(n)?n(e,t):n:{}}function sTt(e,t){var n=t.items,r=t.pagination,o=e,i=o.footer;if(i)return Jp(i)?i({items:n,pagination:r}):i}function y3e(e){return e.hasOwnProperty("pagination")&&!!e.pagination}var a0=function(e){rTt(n,e);var t=nTt(n);function n(r){var o;return eTt(this,n),o=t.call(this,r),Cl(bs(o),"cleanups",[]),Cl(bs(o),"tbody",null),Cl(bs(o),"setTbody",function(i){o.removeLoadingListeners(),o.tbody=i,o.props.loading===!0&&i&&o.addLoadingListeners(i)}),Cl(bs(o),"addLoadingListeners",function(i){var u=function(d){d.stopPropagation(),d.preventDefault()};["mousedown","mouseup","mouseover","mouseout","mouseenter","mouseleave","click","dblclick","keydown","keyup","keypress"].forEach(function(c){i.addEventListener(c,u,!0),o.cleanups.push(function(){i.removeEventListener(c,u,!0)})})}),Cl(bs(o),"removeLoadingListeners",function(){o.cleanups.forEach(function(i){return i()}),o.cleanups.length=0}),Cl(bs(o),"tableId",_r("__table")()),Cl(bs(o),"selectAllIdGenerator",_r("_selection_column-checkbox")),Cl(bs(o),"renderSelectAll",function(i){var u=o.props,c=u.items,d=u.selection;if(d){var g=c.filter(function(R){return!d.selectable||d.selectable(R)}),O=o.state.selection&&g.length>0&&o.state.selection.length===g.length,S=g.length===0,I=function(k){k.target.checked?o.changeSelection(g):o.changeSelection([])};return a(bt,{token:"euiBasicTable.selectAllRows",default:"Select all rows"},function(R){return a(xh,{id:o.selectAllIdGenerator(i?"mobile":"desktop"),type:i?void 0:"inList",checked:O,disabled:S,onChange:I,"data-test-subj":i?void 0:"checkboxSelectAll","aria-label":R,label:i?R:null})})}}),Cl(bs(o),"resolveColumnSortDirection",function(i){var u=o.props.sorting,c=i,d=c.sortable,g=c.field,O=c.name;if(!(!u||!u.sort||!d)&&(u.sort.field===g||u.sort.field===O))return u.sort.direction}),Cl(bs(o),"resolveColumnOnSort",function(i){var u=o.props.sorting,c=i,d=c.sortable,g=c.name;if(!(!u||!d)){if(!o.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(g,`] but - [onChange] is not configured. This callback must be implemented to handle the sort requests`));return function(){return o.onColumnSortChange(i)}}}),o.state={initialSelectionRendered:!1,selection:[]},o}return tTt(n,[{key:"componentDidMount",value:function(){this.props.loading&&this.tbody&&this.addLoadingListeners(this.tbody),this.getInitialSelection()}},{key:"componentDidUpdate",value:function(o){o.loading!==this.props.loading&&(this.props.loading&&this.tbody?this.addLoadingListeners(this.tbody):this.removeLoadingListeners()),this.getInitialSelection()}},{key:"componentWillUnmount",value:function(){this.removeLoadingListeners()}},{key:"getInitialSelection",value:function(){this.props.selection&&this.props.selection.initialSelected&&!this.state.initialSelectionRendered&&this.props.items.length>0&&(this.setState({selection:this.props.selection.initialSelected}),this.setState({initialSelectionRendered:!0}))}},{key:"setSelection",value:function(o){this.changeSelection(o)}},{key:"buildCriteria",value:function(o){var i={};return y3e(o)&&(i.page={index:o.pagination.pageIndex,size:o.pagination.pageSize}),o.sorting&&(i.sort=o.sorting.sort),i}},{key:"changeSelection",value:function(o){this.props.selection&&(this.setState({selection:o}),this.props.selection.onSelectionChange&&this.props.selection.onSelectionChange(o))}},{key:"clearSelection",value:function(){this.changeSelection([])}},{key:"onPageSizeChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=ma(ma({},i),{},{page:{index:0,size:o}});this.props.onChange&&this.props.onChange(u)}},{key:"onPageChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=ma(ma({},i),{},{page:ma(ma({},i.page),{},{index:o})});this.props.onChange&&this.props.onChange(u)}},{key:"onColumnSortChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=Il.ASC;i&&i.sort&&(i.sort.field===o.field||i.sort.field===o.name)&&(u=Il.reverse(i.sort.direction));var c=ma(ma({},i),{},{page:i.page?{index:0,size:i.page.size}:void 0,sort:{field:o.field||o.name,direction:u}});this.props.onChange&&this.props.onChange(c)}},{key:"render",value:function(){var o=this.props,i=o.className,u=o.loading,c=o.items,d=o.itemId,g=o.columns,O=o.pagination,S=o.sorting,I=o.selection,R=o.onChange,k=o.error,A=o.noItemsMessage,M=o.compressed,T=o.itemIdToExpandedRowMap,N=o.responsive,U=o.isSelectable,X=o.isExpandable,Y=o.hasActions,K=o.rowProps,H=o.cellProps,ne=o.tableCaption,pe=o.rowHeader,ye=o.tableLayout,fe=m3e(o,$Mt),ue=(0,b3e.default)("euiBasicTable",{"euiBasicTable-loading":u},i),xe=this.renderTable(),me=this.renderPaginationBar();return a("div",i0({className:ue},fe),xe,me)}},{key:"renderTable",value:function(){var o=this.props,i=o.compressed,u=o.responsive,c=o.tableLayout,d=u?a(lA,null,a(_n,{responsive:!1,justifyContent:"spaceBetween",alignItems:"baseline"},a(wt,{grow:!1},this.renderSelectAll(!0)),a(wt,{grow:!1},this.renderTableMobileSort()))):void 0,g=this.renderTableCaption(),O=this.renderTableHead(),S=this.renderTableBody(),I=this.renderTableFooter();return a("div",null,d,a(ZC,{id:this.tableId,tableLayout:c,responsive:u,compressed:i},g,O,S,I))}},{key:"renderTableMobileSort",value:function(){var o=this,i=this.props,u=i.columns,c=i.sorting,d=[];return c?(u.forEach(function(g,O){var S,I;if(g.field&&c.sort&&c.enableAllColumns&&g.sortable==null&&(g=ma(ma({},g),{},{sortable:!0})),!(!g.sortable||((S=g)===null||S===void 0||(I=S.mobileOptions)===null||I===void 0?void 0:I.show)===!1)){var R=o.resolveColumnSortDirection(g);d.push({name:g.name,key:"_data_s_".concat(g.field,"_").concat(O),onSort:o.resolveColumnOnSort(g),isSorted:!!R,isSortAscending:R?Il.isAsc(R):void 0})}}),d.length?a(pA,{items:d}):null):null}},{key:"renderTableCaption",value:function(){var o=this.props,i=o.items,u=o.pagination,c=o.tableCaption,d=i.length,g=u?u.totalItemCount:d,O=u?u.pageIndex+1:1,S=u!=null&&u.pageSize?Math.ceil(u.totalItemCount/u.pageSize):1,I;return c?u?I=a(bt,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:c,page:O,pageCount:S}}):I=c:u?u.totalItemCount>0?I=a(bt,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:g,itemCount:d,page:O,pageCount:S}}):I=a(bt,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:d,page:O,pageCount:S}}):I=a(bt,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:d}}),a(pn,null,a("caption",{className:"euiTableCaption"},a(b8,null,I)))}},{key:"renderTableHead",value:function(){var o=this,i=this.props,u=i.columns,c=i.selection,d=[];return c&&d.push(a(iA,{key:"_selection_column_h"},this.renderSelectAll(!1))),u.forEach(function(g,O){var S=g,I=S.field,R=S.width,k=S.name,A=S.align,M=S.dataType,T=S.sortable,N=S.mobileOptions,U=S.readOnly,X=S.description,Y=A||o.getAlignForDataType(M);if(g.actions){d.push(a(qh,{key:"_actions_h_".concat(O),align:"right",width:R,description:X,mobileOptions:N},k));return}if(!g.field){var K={};if(o.props.sorting&&typeof T=="function"){var H=o.resolveColumnSortDirection(g);K.isSorted=!!H,K.isSortAscending=H?Il.isAsc(H):void 0,K.onSort=o.resolveColumnOnSort(g),K.readOnly=o.props.sorting.readOnly||U}d.push(a(qh,i0({key:"_computed_column_h_".concat(O),align:Y,width:R,mobileOptions:N,"data-test-subj":"tableHeaderCell_".concat(typeof k=="string"?k:"","_").concat(O),description:X},K),k));return}var ne={};if(o.props.sorting){o.props.sorting.sort&&o.props.sorting.enableAllColumns&&g.sortable==null&&(g=ma(ma({},g),{},{sortable:!0}));var pe=g,ye=pe.sortable;if(ye){var fe=o.resolveColumnSortDirection(g);ne.isSorted=!!fe,ne.isSortAscending=fe?Il.isAsc(fe):void 0,ne.onSort=o.resolveColumnOnSort(g),ne.readOnly=o.props.sorting.readOnly||U}}d.push(a(qh,i0({key:"_data_h_".concat(I,"_").concat(O),align:Y,width:R,mobileOptions:N,"data-test-subj":"tableHeaderCell_".concat(I,"_").concat(O),description:X},ne),k))}),a(rA,null,d)}},{key:"renderTableFooter",value:function(){var o=this.props,i=o.items,u=o.columns,c=o.pagination,d=o.selection,g=[],O=!1;return d&&g.push(a(Hh,{key:"_selection_column_f"},void 0)),u.forEach(function(S){var I=sTt(S,{items:i,pagination:c}),R=S,k=R.mobileOptions,A=R.field,M=R.align;k!=null&&k.only||(I?(g.push(a(Hh,{key:"footer_".concat(A,"_").concat(g.length-1),align:M},I)),O=!0):g.push(a(Hh,{key:"footer_empty_".concat(g.length-1),align:M},void 0)))}),g.length&&O?a(tA,null,g):null}},{key:"renderTableBody",value:function(){var o=this;if(this.props.error)return this.renderErrorBody(this.props.error);var i=this.props.items;if(i.length===0)return this.renderEmptyBody();var u=i.map(function(c,d){var g=y3e(o.props)&&o.props.pagination.pageSize>0?o.props.pagination.pageIndex*o.props.pagination.pageSize+d:d;return o.renderItemRow(c,g)});return a(Bh,{bodyRef:this.setTbody},u)}},{key:"renderErrorBody",value:function(o){var i=this.props.columns.length+(this.props.selection?1:0);return a(Bh,null,a(n0,null,a(gf,{align:"center",colSpan:i,mobileOptions:{width:"100%"}},a(Wt,{type:"minusInCircle",color:"danger"})," ",o)))}},{key:"renderEmptyBody",value:function(){var o=this.props,i=o.columns,u=o.selection,c=o.noItemsMessage,d=i.length+(u?1:0);return a(Bh,null,a(n0,null,a(gf,{align:"center",colSpan:d,mobileOptions:{width:"100%"}},c)))}},{key:"renderItemRow",value:function(o,i){var u=this,c=this.props,d=c.columns,g=c.selection,O=c.isSelectable,S=c.hasActions,I=c.rowHeader,R=c.itemIdToExpandedRowMap,k=R===void 0?{}:R,A=c.isExpandable,M=[],T=this.props.itemId,N=Gh(o,T)!=null?Gh(o,T):i,U=g?this.state.selection&&!!this.state.selection.find(function(me){return Gh(me,T)===N}):!1,X;g&&(M.push(this.renderItemSelectionCell(N,o,U)),X=!0);var Y;d.forEach(function(me,We){if(me.actions)M.push(u.renderItemActionsCell(N,o,me,We)),Y=!0;else if(me.field){var $e=me;M.push(u.renderItemFieldDataCell(N,o,me,We,$e.field===I))}else M.push(u.renderItemComputedCell(N,o,me,We))});var K=g?d.length+1:d.length,H=d.reduce(function(me,We){var $e;return We!=null&&($e=We.mobileOptions)!==null&&$e!==void 0&&$e.only?me+1:me+0},0);K=K-H;var ne=k.hasOwnProperty(N),pe=ne?"row_".concat(N,"_expansion"):void 0,ye=ne?a(n0,{id:pe,isExpandedRow:!0,isSelectable:O},a(gf,{colSpan:K,textOnly:!1},k[N])):void 0,fe=this.props.rowProps,ue=aTt(o,fe),xe=a(n0,i0({"aria-owns":pe,isSelectable:O??X,isSelected:U,hasActions:S??Y,isExpandable:A},ue),M);return a(SA.Fragment,{key:"row_".concat(N)},xe,ye)}},{key:"renderItemSelectionCell",value:function(o,i,u){var c=this,d=this.props.selection,g="_selection_column_".concat(o),O=u,S=d.selectable&&!d.selectable(i),I=d.selectableMessage&&d.selectableMessage(!S,i),R=function(A){if(A.target.checked)c.changeSelection([].concat(GMt(c.state.selection),[i]));else{var M=c.props.itemId;c.changeSelection(c.state.selection.reduce(function(T,N){return Gh(N,M)!==o&&T.push(N),T},[]))}};return a(hA,{key:g},a(bt,{token:"euiBasicTable.selectThisRow",default:"Select this row"},function(k){return a(xh,{id:"".concat(c.tableId).concat(g,"-checkbox"),type:"inList",disabled:S,checked:O,onChange:R,title:I||k,"aria-label":I||k,"data-test-subj":"checkboxSelectRow-".concat(o)})}))}},{key:"renderItemActionsCell",value:function(o,i,u,c){var d=this,g=function(A){return d.state.selection.length===0&&(!A.enabled||A.enabled(i))},O=u.actions.filter(function(k){return!k.available||k.available(i)});if(O.length>2){var S=O.filter(function(k){return k.isPrimary});O=S.slice(0,2),O.push({name:"All actions",render:function(A){return a(lQ,{actions:u.actions,itemId:o,item:A,actionEnabled:g})}})}var I=a(p3e,{actions:O,itemId:o,item:i,actionEnabled:g}),R="record_actions_".concat(o,"_").concat(c);return a(gf,{showOnHover:!0,key:R,align:"right",textOnly:!1,hasActions:!0},I)}},{key:"renderItemFieldDataCell",value:function(o,i,u,c,d){var g=u.field,O=u.render,S=u.dataType,I="_data_column_".concat(g,"_").concat(o,"_").concat(c),R=O||this.getRendererForDataType(S),k=Td(i,g),A=R(k,i);return this.renderItemCell(i,u,I,A,d)}},{key:"renderItemComputedCell",value:function(o,i,u,c){var d=u.render,g="_computed_column_".concat(o,"_").concat(c),O=d||this.getRendererForDataType(),S=O(i);return this.renderItemCell(i,u,g,S,!1)}},{key:"renderItemCell",value:function(o,i,u,c,d){var g=i,O=g.align,S=g.render,I=g.dataType,R=g.isExpander,k=g.textOnly,A=g.name,M=g.field,T=g.description,N=g.sortable,U=g.footer,X=g.mobileOptions,Y=m3e(g,JMt),K=O||this.getAlignForDataType(I),H=this.props.cellProps,ne=lTt(o,i,H);return a(gf,i0({key:u,align:K,isExpander:R,textOnly:k||!S,setScopeRow:d,mobileOptions:ma(ma({},X),{},{render:X&&X.render&&X.render(o),header:X&&X.header===!1?!1:A})},ne,Y),c)}},{key:"getRendererForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=fQ[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(v3e.join(", "),"]"));return i.render}},{key:"getAlignForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=fQ[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(v3e.join(", "),"]"));return i.align}},{key:"renderPaginationBar",value:function(){var o=this,i=this.props,u=i.error,c=i.pagination,d=i.tableCaption,g=i.onChange;if(!u&&c&&c.totalItemCount>0){if(!g)throw new Error(`The Basic Table is configured with pagination but [onChange] is - not configured. This callback must be implemented to handle pagination changes`);return a(bt,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:d}},function(O){return a(d3e,{pagination:c,onPageSizeChange:o.onPageSizeChange.bind(o),onPageChange:o.onPageChange.bind(o),"aria-controls":o.tableId,"aria-label":O})})}}}],[{key:"getDerivedStateFromProps",value:function(o,i){if(!o.selection)return{selection:[]};var u=o.itemId,c=i.selection.filter(function(d){return o.items.findIndex(function(g){return Gh(g,u)===Gh(d,u)})!==-1});return c.length!==i.selection.length?(o.selection.onSelectionChange&&o.selection.onSelectionChange(c),{selection:c}):null}}]),n}(SA.Component);Cl(a0,"defaultProps",{responsive:!0,tableLayout:"fixed",noItemsMessage:a(bt,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});a0.propTypes={className:Ne.default.string,"aria-label":Ne.default.string,"data-test-subj":Ne.default.string,itemId:Ne.default.oneOfType([Ne.default.string.isRequired,Ne.default.number.isRequired,Ne.default.func.isRequired]),itemIdToExpandedRowMap:Ne.default.shape({}),items:Ne.default.arrayOf(Ne.default.any.isRequired),cellProps:Ne.default.oneOfType([Ne.default.any.isRequired,Ne.default.func.isRequired]),columns:Ne.default.arrayOf(Ne.default.oneOfType([Ne.default.shape({field:Ne.default.oneOfType([Ne.default.any.isRequired,Ne.default.any.isRequired]).isRequired,name:Ne.default.node.isRequired,description:Ne.default.string,dataType:Ne.default.oneOf(["auto","string","number","boolean","date"]),width:Ne.default.string,sortable:Ne.default.oneOfType([Ne.default.bool.isRequired,Ne.default.func.isRequired]),isExpander:Ne.default.bool,textOnly:Ne.default.bool,align:Ne.default.oneOf(["left","right","center"]),truncateText:Ne.default.bool,mobileOptions:Ne.default.shape({render:Ne.default.func}),render:Ne.default.func,footer:Ne.default.oneOfType([Ne.default.string.isRequired,Ne.default.element.isRequired,Ne.default.func.isRequired]),readOnly:Ne.default.bool,className:Ne.default.string,"aria-label":Ne.default.string,"data-test-subj":Ne.default.string}).isRequired,Ne.default.shape({render:Ne.default.func.isRequired,name:Ne.default.node,description:Ne.default.string,sortable:Ne.default.func,width:Ne.default.string,truncateText:Ne.default.bool,isExpander:Ne.default.bool,align:Ne.default.oneOf(["left","right","center"]),readOnly:Ne.default.bool,className:Ne.default.string,"aria-label":Ne.default.string,"data-test-subj":Ne.default.string}).isRequired,Ne.default.shape({actions:Ne.default.arrayOf(Ne.default.oneOfType([Ne.default.shape({type:Ne.default.oneOfType([Ne.default.oneOf(["button"]),Ne.default.oneOf(["icon"]).isRequired]),color:Ne.default.oneOfType([Ne.default.oneOfType([Ne.default.oneOf(["primary","danger","text","ghost","success","warning"]).isRequired,Ne.default.func.isRequired]),Ne.default.oneOfType([Ne.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]).isRequired,Ne.default.func.isRequired])]),name:Ne.default.oneOfType([Ne.default.node.isRequired,Ne.default.func.isRequired]).isRequired,description:Ne.default.string.isRequired,onClick:Ne.default.func,href:Ne.default.string,target:Ne.default.string,available:Ne.default.func,enabled:Ne.default.func,isPrimary:Ne.default.bool,"data-test-subj":Ne.default.string,icon:Ne.default.oneOfType([Ne.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ne.default.func.isRequired])}).isRequired,Ne.default.shape({render:Ne.default.func.isRequired,available:Ne.default.func,enabled:Ne.default.func,isPrimary:Ne.default.bool}).isRequired]).isRequired).isRequired,name:Ne.default.node,description:Ne.default.string,width:Ne.default.string}).isRequired]).isRequired),error:Ne.default.string,tableCaption:Ne.default.string,rowHeader:Ne.default.string,hasActions:Ne.default.bool,isExpandable:Ne.default.bool,isSelectable:Ne.default.bool,loading:Ne.default.bool,noItemsMessage:Ne.default.node,onChange:Ne.default.func,pagination:Ne.default.oneOfType([Ne.default.oneOf([void 0]),Ne.default.shape({pageIndex:Ne.default.number.isRequired,pageSize:Ne.default.number.isRequired,totalItemCount:Ne.default.number.isRequired,pageSizeOptions:Ne.default.arrayOf(Ne.default.number.isRequired),showPerPageOptions:Ne.default.bool})]),responsive:Ne.default.bool,rowProps:Ne.default.oneOfType([Ne.default.any.isRequired,Ne.default.func.isRequired]),selection:Ne.default.shape({onSelectionChange:Ne.default.func,selectable:Ne.default.func,selectableMessage:Ne.default.func,initialSelected:Ne.default.arrayOf(Ne.default.any.isRequired)}),sorting:Ne.default.shape({sort:Ne.default.shape({field:Ne.default.any.isRequired,direction:Ne.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Ne.default.bool,enableAllColumns:Ne.default.bool,readOnly:Ne.default.bool}),tableLayout:Ne.default.oneOf(["fixed","auto"]),textOnly:Ne.default.bool};var fu=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(r){var o=this,i=r||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(u){return u!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var l0=typeof window>"u";function uo(){}function O3e(e,t){return typeof e=="function"?e(t):e}function A8(e){return typeof e=="number"&&e>=0&&e!==1/0}function C8(e){return Array.isArray(e)?e:[e]}function IA(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Xh(e,t,n){return jA(e)?typeof t=="function"?hr({},n,{queryKey:e,queryFn:t}):hr({},t,{queryKey:e}):e}function du(e,t,n){return jA(e)?[hr({},t,{queryKey:e}),n]:[e||{},t]}function uTt(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e??!t;return n?"active":"inactive"}function mQ(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,u=e.predicate,c=e.queryKey,d=e.stale;if(jA(c)){if(r){if(t.queryHash!==M8(c,t.options))return!1}else if(!T8(t.queryKey,c))return!1}var g=uTt(n,i);if(g==="none")return!1;if(g!=="all"){var O=t.isActive();if(g==="active"&&!O||g==="inactive"&&O)return!1}return!(typeof d=="boolean"&&t.isStale()!==d||typeof o=="boolean"&&t.isFetching()!==o||u&&!u(t))}function hQ(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(jA(i)){if(!t.options.mutationKey)return!1;if(n){if(yf(t.options.mutationKey)!==yf(i))return!1}else if(!T8(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function M8(e,t){var n=t?.queryKeyHashFn||yf;return n(e)}function yf(e){var t=C8(e);return cTt(t)}function cTt(e){return JSON.stringify(e,function(t,n){return dQ(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function T8(e,t){return x3e(C8(e),C8(t))}function x3e(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!x3e(e[n],t[n])}):!1}function Kh(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||dQ(e)&&dQ(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,u=n?[]:{},c=0,d=0;d"u")return!0;var n=t.prototype;return!(!w3e(n)||!n.hasOwnProperty("isPrototypeOf"))}function w3e(e){return Object.prototype.toString.call(e)==="[object Object]"}function jA(e){return typeof e=="string"||Array.isArray(e)}function S3e(e){return new Promise(function(t){setTimeout(t,e)})}function gQ(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function EA(){if(typeof AbortController=="function")return new AbortController}var pTt=function(e){ca(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!l0&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("visibilitychange",u,!1),window.addEventListener("focus",u,!1),function(){window.removeEventListener("visibilitychange",u),window.removeEventListener("focus",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(c){typeof c=="boolean"?u.setFocused(c):u.onFocus()})},n.setFocused=function(o){this.focused=o,o&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(o){o()})},n.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(fu),bf=new pTt;var fTt=function(e){ca(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!l0&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("online",u,!1),window.addEventListener("offline",u,!1),function(){window.removeEventListener("online",u),window.removeEventListener("offline",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(c){typeof c=="boolean"?u.setOnline(c):u.onOnline()})},n.setOnline=function(o){this.online=o,o&&this.onOnline()},n.onOnline=function(){this.listeners.forEach(function(o){o()})},n.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(fu),Yh=new fTt;function dTt(e){return Math.min(1e3*Math.pow(2,e),3e4)}function R8(e){return typeof e?.cancel=="function"}var I3e=function(t){this.revert=t?.revert,this.silent=t?.silent};function Qh(e){return e instanceof I3e}var PA=function(t){var n=this,r=!1,o,i,u,c;this.abort=t.abort,this.cancel=function(I){return o?.(I)},this.cancelRetry=function(){r=!0},this.continueRetry=function(){r=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(I,R){u=I,c=R});var d=function(R){n.isResolved||(n.isResolved=!0,t.onSuccess==null||t.onSuccess(R),i?.(),u(R))},g=function(R){n.isResolved||(n.isResolved=!0,t.onError==null||t.onError(R),i?.(),c(R))},O=function(){return new Promise(function(R){i=R,n.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,n.isPaused=!1,t.onContinue==null||t.onContinue()})},S=function I(){if(!n.isResolved){var R;try{R=t.fn()}catch(k){R=Promise.reject(k)}o=function(A){if(!n.isResolved&&(g(new I3e(A)),n.abort==null||n.abort(),R8(R)))try{R.cancel()}catch{}},n.isTransportCancelable=R8(R),Promise.resolve(R).then(d).catch(function(k){var A,M;if(!n.isResolved){var T=(A=t.retry)!=null?A:3,N=(M=t.retryDelay)!=null?M:dTt,U=typeof N=="function"?N(n.failureCount,k):N,X=T===!0||typeof T=="number"&&n.failureCount"u"&&(c.exact=!0),this.queries.find(function(d){return mQ(c,d)})},n.findAll=function(o,i){var u=du(o,i),c=u[0];return Object.keys(c).length>0?this.queries.filter(function(d){return mQ(c,d)}):this.queries},n.notify=function(o){var i=this;Kr.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){var o=this;Kr.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},n.onOnline=function(){var o=this;Kr.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(fu);var k3e=function(){function e(n){this.options=hr({},n.defaultOptions,n.options),this.mutationId=n.mutationId,this.mutationCache=n.mutationCache,this.observers=[],this.state=n.state||hTt(),this.meta=n.meta}var t=e.prototype;return t.setState=function(r){this.dispatch({type:"setState",state:r})},t.addObserver=function(r){this.observers.indexOf(r)===-1&&this.observers.push(r)},t.removeObserver=function(r){this.observers=this.observers.filter(function(o){return o!==r})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(uo).catch(uo)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var r=this,o,i=this.state.status==="loading",u=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),u=u.then(function(){r.mutationCache.config.onMutate==null||r.mutationCache.config.onMutate(r.state.variables,r)}).then(function(){return r.options.onMutate==null?void 0:r.options.onMutate(r.state.variables)}).then(function(c){c!==r.state.context&&r.dispatch({type:"loading",context:c,variables:r.state.variables})})),u.then(function(){return r.executeMutation()}).then(function(c){o=c,r.mutationCache.config.onSuccess==null||r.mutationCache.config.onSuccess(o,r.state.variables,r.state.context,r)}).then(function(){return r.options.onSuccess==null?void 0:r.options.onSuccess(o,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(o,null,r.state.variables,r.state.context)}).then(function(){return r.dispatch({type:"success",data:o}),o}).catch(function(c){return r.mutationCache.config.onError==null||r.mutationCache.config.onError(c,r.state.variables,r.state.context,r),s0().error(c),Promise.resolve().then(function(){return r.options.onError==null?void 0:r.options.onError(c,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(void 0,c,r.state.variables,r.state.context)}).then(function(){throw r.dispatch({type:"error",error:c}),c})})},t.executeMutation=function(){var r=this,o;return this.retryer=new PA({fn:function(){return r.options.mutationFn?r.options.mutationFn(r.state.variables):Promise.reject("No mutationFn found")},onFail:function(){r.dispatch({type:"failed"})},onPause:function(){r.dispatch({type:"pause"})},onContinue:function(){r.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(r){var o=this;this.state=gTt(this.state,r),Kr.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(r)}),o.mutationCache.notify(o)})},e}();function hTt(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function gTt(e,t){switch(t.type){case"failed":return hr({},e,{failureCount:e.failureCount+1});case"pause":return hr({},e,{isPaused:!0});case"continue":return hr({},e,{isPaused:!1});case"loading":return hr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return hr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return hr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return hr({},e,t.state);default:return e}}var C3e=function(e){ca(t,e);function t(r){var o;return o=e.call(this)||this,o.config=r||{},o.mutations=[],o.mutationId=0,o}var n=t.prototype;return n.build=function(o,i,u){var c=new k3e({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:u,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(c),c},n.add=function(o){this.mutations.push(o),this.notify(o)},n.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},n.clear=function(){var o=this;Kr.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},n.getAll=function(){return this.mutations},n.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return hQ(o,i)})},n.findAll=function(o){return this.mutations.filter(function(i){return hQ(o,i)})},n.notify=function(o){var i=this;Kr.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){this.resumePausedMutations()},n.onOnline=function(){this.resumePausedMutations()},n.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return Kr.batch(function(){return o.reduce(function(i,u){return i.then(function(){return u.continue().catch(uo)})},Promise.resolve())})},t}(fu);function M3e(){return{onFetch:function(t){t.fetchFn=function(){var n,r,o,i,u,c,d=(n=t.fetchOptions)==null||(r=n.meta)==null?void 0:r.refetchPage,g=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,O=g?.pageParam,S=g?.direction==="forward",I=g?.direction==="backward",R=((u=t.state.data)==null?void 0:u.pages)||[],k=((c=t.state.data)==null?void 0:c.pageParams)||[],A=EA(),M=A?.signal,T=k,N=!1,U=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},X=function(me,We,$e,Ge){return T=Ge?[We].concat(T):[].concat(T,[We]),Ge?[$e].concat(me):[].concat(me,[$e])},Y=function(me,We,$e,Ge){if(N)return Promise.reject("Cancelled");if(typeof $e>"u"&&!We&&me.length)return Promise.resolve(me);var Be={queryKey:t.queryKey,signal:M,pageParam:$e,meta:t.meta},et=U(Be),ut=Promise.resolve(et).then(function(Ht){return X(me,$e,Ht,Ge)});if(R8(et)){var Qe=ut;Qe.cancel=et.cancel}return ut},K;if(!R.length)K=Y([]);else if(S){var H=typeof O<"u",ne=H?O:A3e(t.options,R);K=Y(R,H,ne)}else if(I){var pe=typeof O<"u",ye=pe?O:vTt(t.options,R);K=Y(R,pe,ye,!0)}else(function(){T=[];var xe=typeof t.options.getNextPageParam>"u",me=d&&R[0]?d(R[0],0,R):!0;K=me?Y([],xe,k[0]):Promise.resolve(X([],k[0],R[0]));for(var We=function(Be){K=K.then(function(et){var ut=d&&R[Be]?d(R[Be],Be,R):!0;if(ut){var Qe=xe?k[Be]:A3e(t.options,et);return Y(et,xe,Qe)}return Promise.resolve(X(et,k[Be],R[Be]))})},$e=1;$e"u"&&(O.revert=!0);var S=Kr.batch(function(){return u.queryCache.findAll(d).map(function(I){return I.cancel(O)})});return Promise.all(S).then(uo).catch(uo)},t.invalidateQueries=function(r,o,i){var u,c,d,g=this,O=du(r,o,i),S=O[0],I=O[1],R=hr({},S,{active:(u=(c=S.refetchActive)!=null?c:S.active)!=null?u:!0,inactive:(d=S.refetchInactive)!=null?d:!1});return Kr.batch(function(){return g.queryCache.findAll(S).forEach(function(k){k.invalidate()}),g.refetchQueries(R,I)})},t.refetchQueries=function(r,o,i){var u=this,c=du(r,o,i),d=c[0],g=c[1],O=Kr.batch(function(){return u.queryCache.findAll(d).map(function(I){return I.fetch(void 0,hr({},g,{meta:{refetchPage:d?.refetchPage}}))})}),S=Promise.all(O).then(uo);return g?.throwOnError||(S=S.catch(uo)),S},t.fetchQuery=function(r,o,i){var u=Xh(r,o,i),c=this.defaultQueryOptions(u);typeof c.retry>"u"&&(c.retry=!1);var d=this.queryCache.build(this,c);return d.isStaleByTime(c.staleTime)?d.fetch(c):Promise.resolve(d.state.data)},t.prefetchQuery=function(r,o,i){return this.fetchQuery(r,o,i).then(uo).catch(uo)},t.fetchInfiniteQuery=function(r,o,i){var u=Xh(r,o,i);return u.behavior=M3e(),this.fetchQuery(u)},t.prefetchInfiniteQuery=function(r,o,i){return this.fetchInfiniteQuery(r,o,i).then(uo).catch(uo)},t.cancelMutations=function(){var r=this,o=Kr.batch(function(){return r.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(uo).catch(uo)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(r){return this.mutationCache.build(this,r).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(r){this.defaultOptions=r},t.setQueryDefaults=function(r,o){var i=this.queryDefaults.find(function(u){return yf(r)===yf(u.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:r,defaultOptions:o})},t.getQueryDefaults=function(r){var o;return r?(o=this.queryDefaults.find(function(i){return T8(r,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(r,o){var i=this.mutationDefaults.find(function(u){return yf(r)===yf(u.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:r,defaultOptions:o})},t.getMutationDefaults=function(r){var o;return r?(o=this.mutationDefaults.find(function(i){return T8(r,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(r){if(r?._defaulted)return r;var o=hr({},this.defaultOptions.queries,this.getQueryDefaults(r?.queryKey),r,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=M8(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(r){return this.defaultQueryOptions(r)},t.defaultMutationOptions=function(r){return r?._defaulted?r:hr({},this.defaultOptions.mutations,this.getMutationDefaults(r?.mutationKey),r,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var bQ=function(e){ca(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var n=t.prototype;return n.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},n.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),T3e(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},n.onUnsubscribe=function(){this.listeners.length||this.destroy()},n.shouldFetchOnReconnect=function(){return yQ(this.currentQuery,this.options,this.options.refetchOnReconnect)},n.shouldFetchOnWindowFocus=function(){return yQ(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},n.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},n.setOptions=function(o,i){var u=this.options,c=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=u.queryKey),this.updateQuery();var d=this.hasListeners();d&&R3e(this.currentQuery,c,this.options,u)&&this.executeFetch(),this.updateResult(i),d&&(this.currentQuery!==c||this.options.enabled!==u.enabled||this.options.staleTime!==u.staleTime)&&this.updateStaleTimeout();var g=this.computeRefetchInterval();d&&(this.currentQuery!==c||this.options.enabled!==u.enabled||g!==this.currentRefetchInterval)&&this.updateRefetchInterval(g)},n.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),u=this.client.getQueryCache().build(this.client,i);return this.createResult(u,i)},n.getCurrentResult=function(){return this.currentResult},n.trackResult=function(o,i){var u=this,c={},d=function(O){u.trackedProps.includes(O)||u.trackedProps.push(O)};return Object.keys(o).forEach(function(g){Object.defineProperty(c,g,{configurable:!1,enumerable:!0,get:function(){return d(g),o[g]}})}),(i.useErrorBoundary||i.suspense)&&d("error"),c},n.getNextResult=function(o){var i=this;return new Promise(function(u,c){var d=i.subscribe(function(g){g.isFetching||(d(),g.isError&&o?.throwOnError?c(g.error):u(g))})})},n.getCurrentQuery=function(){return this.currentQuery},n.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},n.refetch=function(o){return this.fetch(hr({},o,{meta:{refetchPage:o?.refetchPage}}))},n.fetchOptimistic=function(o){var i=this,u=this.client.defaultQueryObserverOptions(o),c=this.client.getQueryCache().build(this.client,u);return c.fetch().then(function(){return i.createResult(c,u)})},n.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},n.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(uo)),i},n.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(l0||this.currentResult.isStale||!A8(this.options.staleTime))){var i=IA(this.currentResult.dataUpdatedAt,this.options.staleTime),u=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},u)}},n.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},n.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(l0||this.options.enabled===!1||!A8(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||bf.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},n.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},n.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},n.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},n.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},n.createResult=function(o,i){var u=this.currentQuery,c=this.options,d=this.currentResult,g=this.currentResultState,O=this.currentResultOptions,S=o!==u,I=S?o.state:this.currentQueryInitialState,R=S?this.currentResult:this.previousQueryResult,k=o.state,A=k.dataUpdatedAt,M=k.error,T=k.errorUpdatedAt,N=k.isFetching,U=k.status,X=!1,Y=!1,K;if(i.optimisticResults){var H=this.hasListeners(),ne=!H&&T3e(o,i),pe=H&&R3e(o,u,i,c);(ne||pe)&&(N=!0,A||(U="loading"))}if(i.keepPreviousData&&!k.dataUpdateCount&&R?.isSuccess&&U!=="error")K=R.data,A=R.dataUpdatedAt,U=R.status,X=!0;else if(i.select&&typeof k.data<"u")if(d&&k.data===g?.data&&i.select===this.selectFn)K=this.selectResult;else try{this.selectFn=i.select,K=i.select(k.data),i.structuralSharing!==!1&&(K=Kh(d?.data,K)),this.selectResult=K,this.selectError=null}catch(ue){s0().error(ue),this.selectError=ue}else K=k.data;if(typeof i.placeholderData<"u"&&typeof K>"u"&&(U==="loading"||U==="idle")){var ye;if(d?.isPlaceholderData&&i.placeholderData===O?.placeholderData)ye=d.data;else if(ye=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof ye<"u")try{ye=i.select(ye),i.structuralSharing!==!1&&(ye=Kh(d?.data,ye)),this.selectError=null}catch(ue){s0().error(ue),this.selectError=ue}typeof ye<"u"&&(U="success",K=ye,Y=!0)}this.selectError&&(M=this.selectError,K=this.selectResult,T=Date.now(),U="error");var fe={status:U,isLoading:U==="loading",isSuccess:U==="success",isError:U==="error",isIdle:U==="idle",data:K,dataUpdatedAt:A,error:M,errorUpdatedAt:T,failureCount:k.fetchFailureCount,errorUpdateCount:k.errorUpdateCount,isFetched:k.dataUpdateCount>0||k.errorUpdateCount>0,isFetchedAfterMount:k.dataUpdateCount>I.dataUpdateCount||k.errorUpdateCount>I.errorUpdateCount,isFetching:N,isRefetching:N&&U!=="loading",isLoadingError:U==="error"&&k.dataUpdatedAt===0,isPlaceholderData:Y,isPreviousData:X,isRefetchError:U==="error"&&k.dataUpdatedAt!==0,isStale:wQ(o,i),refetch:this.refetch,remove:this.remove};return fe},n.shouldNotifyListeners=function(o,i){if(!i)return!0;var u=this.options,c=u.notifyOnChangeProps,d=u.notifyOnChangePropsExclusions;if(!c&&!d||c==="tracked"&&!this.trackedProps.length)return!0;var g=c==="tracked"?this.trackedProps:c;return Object.keys(o).some(function(O){var S=O,I=o[S]!==i[S],R=g?.some(function(A){return A===O}),k=d?.some(function(A){return A===O});return I&&!k&&(!g||R)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!_3e(this.currentResult,i)){var u={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(u.listeners=!0),this.notify(hr({},u,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!Qh(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;Kr.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(u){u(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(fu);function yTt(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function T3e(e,t){return yTt(e,t)||e.state.dataUpdatedAt>0&&yQ(e,t,t.refetchOnMount)}function yQ(e,t,n){if(t.enabled!==!1){var r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&wQ(e,t)}return!1}function R3e(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&wQ(e,n)}function wQ(e,t){return e.isStaleByTime(t.staleTime)}var z3e=E(cn()),D3e=z3e.default.unstable_batchedUpdates;Kr.setBatchNotifyFunction(D3e);var L3e=console;vQ(L3e);var wf=E(D()),N3e=wf.default.createContext(void 0),F3e=wf.default.createContext(!1);function W3e(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=N3e),window.ReactQueryClientContext):N3e}var OQ=function(){var t=wf.default.useContext(W3e(wf.default.useContext(F3e)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},rr=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;wf.default.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var u=W3e(o);return wf.default.createElement(F3e.Provider,{value:o},wf.default.createElement(u.Provider,{value:n},i))};var xQ=E(D());function bTt(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var wTt=xQ.default.createContext(bTt()),B3e=function(){return xQ.default.useContext(wTt)};function H3e(e,t,n){return typeof t=="function"?t.apply(void 0,n):typeof t=="boolean"?t:!!e}var Zh=E(D());function V3e(e,t){var n=Zh.default.useRef(!1),r=Zh.default.useState(0),o=r[1],i=OQ(),u=B3e(),c=i.defaultQueryObserverOptions(e);c.optimisticResults=!0,c.onError&&(c.onError=Kr.batchCalls(c.onError)),c.onSuccess&&(c.onSuccess=Kr.batchCalls(c.onSuccess)),c.onSettled&&(c.onSettled=Kr.batchCalls(c.onSettled)),c.suspense&&(typeof c.staleTime!="number"&&(c.staleTime=1e3),c.cacheTime===0&&(c.cacheTime=1)),(c.suspense||c.useErrorBoundary)&&(u.isReset()||(c.retryOnMount=!1));var d=Zh.default.useState(function(){return new t(i,c)}),g=d[0],O=g.getOptimisticResult(c);if(Zh.default.useEffect(function(){n.current=!0,u.clearReset();var S=g.subscribe(Kr.batchCalls(function(){n.current&&o(function(I){return I+1})}));return g.updateResult(),function(){n.current=!1,S()}},[u,g]),Zh.default.useEffect(function(){g.setOptions(c,{listeners:!1})},[c,g]),c.suspense&&O.isLoading)throw g.fetchOptimistic(c).then(function(S){var I=S.data;c.onSuccess==null||c.onSuccess(I),c.onSettled==null||c.onSettled(I,null)}).catch(function(S){u.clearReset(),c.onError==null||c.onError(S),c.onSettled==null||c.onSettled(void 0,S)});if(O.isError&&!u.isReset()&&!O.isFetching&&H3e(c.suspense,c.useErrorBoundary,[O.error,g.getCurrentQuery()]))throw O.error;return c.notifyOnChangeProps==="tracked"&&(O=g.trackResult(O,c)),O}function dr(e,t,n){var r=Xh(e,t,n);return V3e(r,bQ)}var Of=E(D());function u0(e){return Of.default.createElement(Of.default.Fragment,null,Of.default.createElement("span",null,Of.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},Of.default.createElement(Pi,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",Of.default.createElement(Wt,{type:"arrowRight"}),"\xA0",Of.default.createElement(Pi,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function U3e(e){let{api:t,parameter:n,hasShortSelectedLabel:r,allowCustomTerms:o,selectionChangedEvent:i,preselected:u,placeholder:c,singleSelection:d,singleSuggestionRow:g,ts4nfdiGateway:O=!1,...S}=e,I=new pr(t),R=Qu(),k=A1(),[A,M]=(0,Hn.useState)(""),[T,N]=(0,Hn.useState)([]),[U,X]=(0,Hn.useState)([]),Y=(fe,ue)=>{let{label:xe,value:me}=fe,We=k.indexOf(me.type==="class"?k[5]:me.type==="individual"?k[3]:me.type==="property"?k[1]:""),$e=R[We];if(o&&me.iri=="")return xe;let Ge="";me.description!=null?me.type==="ontology"?Ge="Type: "+me.type+` +`])),t)};function zY(){return zY=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WC=function(t){var n=t.className,r=t.alt,o=t.url,i=t.src,u=t.size,c=u===void 0?"original":u,d=t.hasShadow,g=t.style,O=t.wrapperProps,S=t.fullScreenIconColor,I=t.allowFullScreen,R=t.caption,k=t.float,M=t.margin,C=DCt(t,kCt),T=(0,FC.useState)(!1),D=ACt(T,2),U=D[0],G=D[1],Y=typeof c=="string"&&Ibe.includes(c),K=(0,Pbe.default)("euiImage",n),B=cr(),ne=bbe(B),pe=[ne.euiImage,Y&&ne[c],!Y&&ne.customSize,d&&ne.hasShadow],ve=[ne.euiImage,ne.isFullScreen],de=!Y&&c!=="original",ue=typeof c=="string"?c:"".concat(c,"px"),ye=de?NY(NY({},g),{},{maxWidth:ue,maxHeight:ue}):g,be=c==="fullWidth",ze={hasShadow:d,wrapperProps:O,setIsFullScreen:G,fullScreenIconColor:S,isFullWidth:be,allowFullScreen:I,alt:r,caption:R,float:k,margin:M},He=NY({className:K,src:i||o},C);return a(FC.default.Fragment,null,a(RY,ze,a("img",NC({alt:r,css:pe,style:ye},He))),I&&U&&a(LY,ze,a("img",NC({alt:r,css:ve,style:g},He))))};WC.propTypes={className:Ho.default.string,"aria-label":Ho.default.string,"data-test-subj":Ho.default.string,src:Ho.default.string,url:Ho.default.string,alt:Ho.default.string.isRequired,caption:Ho.default.node,size:Ho.default.oneOfType([Ho.default.any.isRequired,Ho.default.number.isRequired,Ho.default.string.isRequired]),float:Ho.default.any,margin:Ho.default.any,hasShadow:Ho.default.bool,allowFullScreen:Ho.default.bool,fullScreenIconColor:Ho.default.oneOf(["light","dark"]),wrapperProps:Ho.default.any};var Abe=E(L());var PSr=E(L());var NCt=xe(".euiScreenReaderOnly{",Wp(),";};label:globalStyles;"),kbe=function(){return a(Vj,{styles:NCt})};var Cbe=E(L());var BC=function(t){var n=t.cache,r=t.children;return r&&n?a(DN,{value:n},r):a(Cbe.default.Fragment,null,r)};var FCt=function(t){return t.hasOwnProperty("key")},er=function(t){var n=t.cache,r=t.theme,o=r===void 0?L1:r,i=t.globalStyles,u=i===void 0?P1e:i,c=t.utilityClasses,d=c===void 0?kbe:c,g=t.colorMode,O=t.modify,S=t.children,I,R,k;return n&&(FCt(n)?I=n:(I=n.default,R=n.global,k=n.utility)),a(BC,{cache:I},a(QF,{theme:o??void 0,colorMode:g,modify:O},o&&a(Abe.default.Fragment,null,a(BC,{cache:R,children:u&&a(u,null)}),a(BC,{cache:k,children:d&&a(d,null)})),a(ZF,null,S)))};var Fh=E(L()),xo=E(rt()),VC=E(yt());function HC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?HC=function(n){return typeof n}:HC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},HC(e)}var WCt=["children","className","items","display","expandByDefault","showExpansionArrows"];function qC(){return qC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function VCt(e){return JCt(e)||$Ct(e)||UCt(e)||qCt()}function qCt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function UCt(e,t){if(e){if(typeof e=="string")return FY(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return FY(e,t)}}function $Ct(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function JCt(e){if(Array.isArray(e))return FY(e)}function FY(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function UC(e){return UC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},UC(e)}function cu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Dbe=(0,Fh.createContext)("");function Tbe(e){return e.hasOwnProperty("aria-label")}function Rbe(e,t,n){return e??(t===""?n():t)}var zbe={default:null,compressed:"euiTreeView--compressed"},_8=function(e){KCt(n,e);var t=YCt(n);function n(){var r;GCt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u1&&arguments[1]!==void 0?arguments[1]:!1,g=r.state.openItems.indexOf(c.id);r.setState({expandChildNodes:!1}),c.isExpanded=!c.isExpanded,!d&&c.callback!==void 0&&c.callback(),r.isNodeOpen(c)?r.setState({openItems:r.state.openItems.filter(function(O,S){return S!==g})}):r.setState(function(O){return{openItems:[].concat(VCt(O.openItems),[c.id]),activeItem:c.id}})}),cu(uu(r),"isNodeOpen",function(c){return r.state.openItems.includes(c.id)}),cu(uu(r),"onKeyDown",function(c,d){switch(c.key){case Fr.ARROW_DOWN:{var g=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),O=g.indexOf(c.currentTarget);if(O>-1){var S=g[O+1];S&&(c.preventDefault(),c.stopPropagation(),S.focus())}break}case Fr.ARROW_UP:{var I=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),R=I.indexOf(c.currentTarget);if(R>-1){var k=I[R+-1];k&&(c.preventDefault(),c.stopPropagation(),k.focus())}break}case Fr.ARROW_RIGHT:{r.isNodeOpen(d)||(c.preventDefault(),c.stopPropagation(),r.handleNodeClick(d,!0));break}case Fr.ARROW_LEFT:r.isNodeOpen(d)&&(c.preventDefault(),c.stopPropagation(),r.handleNodeClick(d,!0));default:break}}),cu(uu(r),"onChildrenKeydown",function(c,d){c.key===Fr.ARROW_LEFT&&(c.preventDefault(),c.stopPropagation(),r.buttonRef[d].focus())}),r}return XCt(n,[{key:"componentDidUpdate",value:function(o){this.props.id!==o.id&&this.setState({treeID:Rbe(this.props.id,this.context,this.treeIdGenerator)})}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,c=i.className,d=i.items,g=i.display,O=g===void 0?"default":g,S=i.expandByDefault,I=i.showExpansionArrows,R=BCt(i,WCt),k=(0,VC.default)("euiTreeView",O?zbe[O]:null,{"euiTreeView--withArrows":I},c),M="".concat(this.state.treeID,"--instruction");return a(Dbe.Provider,{value:this.state.treeID},a(Pt,{size:O==="compressed"?"s":"m",className:"euiTreeView__wrapper"},!this.isNested&&a(bt,{token:"euiTreeView.listNavigationInstructions",default:"You can quickly navigate this list using arrow keys."},function(C){return a(pn,null,a("p",{id:M},C))}),a("ul",qC({className:k,id:this.isNested?void 0:this.state.treeID,"aria-describedby":this.isNested?void 0:M},R),d.map(function(C,T){var D=C.id,U=o.treeIdGenerator(D);return a(ss,{key:C.id+T,fallback:typeof C.label=="string"?C.label:""},function(G,Y){return a(bt,{key:C.id+T,token:"euiTreeView.ariaLabel",default:"{nodeLabel} child of {ariaLabel}",values:{nodeLabel:Y,ariaLabel:Tbe(R)?R["aria-label"]:""}},function(K){var B=Tbe(R)?{"aria-label":K}:{"aria-labelledby":"".concat(D," ").concat(R["aria-labelledby"])},ne=(0,VC.default)("euiTreeView__node",O?zbe[O]:null,{"euiTreeView__node--expanded":o.isNodeOpen(C)}),pe=(0,VC.default)("euiTreeView__nodeInner",I&&C.children?"euiTreeView__nodeInner--withArrows":null,o.state.activeItem===C.id?"euiTreeView__node--active":null,C.className?C.className:null);return a(Fh.default.Fragment,null,a("li",{className:ne},a("button",{id:D,"aria-controls":U,"aria-expanded":o.isNodeOpen(C),ref:function(de){return o.setButtonRef(de,T)},"data-test-subj":"euiTreeViewButton-".concat(o.state.treeID),onKeyDown:function(de){return o.onKeyDown(de,C)},onClick:function(){return o.handleNodeClick(C)},className:pe},I&&C.children?a(Nt,{className:"euiTreeView__expansionArrow",size:O==="compressed"?"s":"m",type:o.isNodeOpen(C)?"arrowDown":"arrowRight"}):null,C.icon&&!C.useEmptyIcon?a("span",{className:"euiTreeView__iconWrapper"},o.isNodeOpen(C)&&C.iconWhenExpanded?C.iconWhenExpanded:C.icon):null,C.useEmptyIcon&&!C.icon?a("span",{className:"euiTreeView__iconPlaceholder"}):null,a("span",{ref:G,className:"euiTreeView__nodeLabel"},C.label)),a("div",{id:U,onKeyDown:function(de){return o.onChildrenKeydown(de,T)}},C.children&&o.isNodeOpen(C)?a(n,qC({items:C.children,display:O,showExpansionArrows:I,expandByDefault:o.state.expandChildNodes},B)):null)))})})}))))}}]),n}(Fh.Component);cu(_8,"contextType",Dbe);_8.propTypes={className:xo.default.string,"data-test-subj":xo.default.string,items:xo.default.arrayOf(xo.default.shape({children:xo.default.arrayOf(xo.default.any.isRequired),label:xo.default.node.isRequired,id:xo.default.string.isRequired,icon:xo.default.element,iconWhenExpanded:xo.default.element,useEmptyIcon:xo.default.bool,isExpanded:xo.default.bool,className:xo.default.string,callback:xo.default.func}).isRequired).isRequired,display:xo.default.oneOf(["default","compressed"]),expandByDefault:xo.default.bool,showExpansionArrows:xo.default.bool,"aria-label":xo.default.string,"aria-labelledby":xo.default.string};var bs=E(L()),qt=E(rt()),Ybe=E(yt());var Lbe=E(L()),Nbe=E(yt());var BY=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=t.searchableLabel||t.label;return n?r.trim().toLowerCase():r},eAt=function(t,n){var r=t.toLowerCase();return n.find(function(o){return BY(o)===r})},tAt=function(t,n,r,o,i){if(i){var u=eAt(BY(n,!1),i);if(u)return!1}if(o){t.push(n);return}if(!r){t.push(n);return}var c=BY(n);c.includes(r)&&t.push(n)},Wh=function(t,n,r,o){var i=n.toLowerCase(),u=[];return t.forEach(function(c){tAt(u,c,i,r,o)}),u};var rAt=["onChange","options","value","placeholder","isPreFiltered","listId","className"];function HY(){return HY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VY=function(t){var n=t.onChange,r=t.options,o=t.value,i=t.placeholder,u=t.isPreFiltered,c=t.listId,d=t.className,g=nAt(t,rAt),O=(0,Lbe.useCallback)(function(R){var k=R.target.value,M=Wh(r,k,u);n(k,M)},[r,u,n]),S=(0,Nbe.default)("euiSelectableSearch",d),I=c?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":c,"aria-owns":c}:void 0;return a(o8,HY({className:S,placeholder:i,value:o,onChange:O,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},I,g))};var dIr=E(L()),S8=E(rt()),Fbe=E(yt());var iAt=["children","className","bordered"];function qY(){return qY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $C=function(t){var n=t.children,r=t.className,o=t.bordered,i=o===void 0?!1:o,u=aAt(t,iAt),c=(0,Fbe.default)("euiSelectableMessage",{"euiSelectableMessage--bordered":i},r);return a(Pt,qY({color:"subdued",size:"xs",className:c},u),n)};$C.propTypes={className:S8.default.string,"aria-label":S8.default.string,"data-test-subj":S8.default.string,bordered:S8.default.bool};var Hh=E(L()),at=E(rt()),Jbe=E(yt());var GC=E(yt()),Ir=E(rt()),Vbe=E(L());function JC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?JC=function(n){return typeof n}:JC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},JC(e)}var sAt=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap"],uAt=["children","className"];function I8(){return I8=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function pAt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Bbe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function XC(e){return XC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},XC(e)}function Hbe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yAt(e){return e?e==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}}var qbe={none:null,s:"euiSelectableListItem--paddingSmall"},EIr=kt(qbe),KC=function(e){dAt(n,e);var t=mAt(n);function n(r){return pAt(this,n),t.call(this,r)}return fAt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,c=o.disabled,d=o.checked,g=o.isFocused,O=o.showIcons,S=o.prepend,I=o.append,R=o.allowExclusions,k=o.onFocusBadge,M=o.paddingSize,C=M===void 0?"s":M,T=o.role,D=T===void 0?"option":T,U=o.searchable,G=o.textWrap,Y=Wbe(o,sAt),K=(0,GC.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":g},qbe[C],u),B=(0,GC.default)("euiSelectableListItem__text",Hbe({},"euiSelectableListItem__text--".concat(G),G)),ne;if(O){var pe=yAt(d),ve=pe.icon,de=pe.color;ne=a(Nt,{className:"euiSelectableListItem__icon",color:de,type:ve})}var ue,ye;R&&d==="on"?(ue=a(bt,{token:"euiSelectableListItem.includedOption",default:"Selected option."}),ye=a(bt,{token:"euiSelectableListItem.includedOptionInstructions",default:"To exclude this option, press enter."})):R&&d==="off"?(ue=a(bt,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),ye=a(bt,{token:"euiSelectableListItem.excludedOptionInstructions",default:"To uncheck this option, press enter."})):R&&!d&&(ye=a(bt,{token:"euiSelectableListItem.unckeckedOptionInstructions",default:"To select this option, press enter."}));var be=!c&&typeof d=="string";!R&&be&&(ue=a(bt,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),ye=U?a(bt,{token:"euiSelectableListItem.checkedOptionInstructions",default:"To uncheck this option, press enter."}):void 0);var ze;S&&(ze=a("span",{className:"euiSelectableListItem__prepend"},S));var He;if(I||k){var Qe,Be={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(k===!0)Qe=a(Pi,I8({className:"euiSelectableListItem__onFocusBadge"},Be));else if(k&&k!==!1){var Ze=k.children,lt=k.className,Ke=Wbe(k,uAt);Qe=a(Pi,I8({className:(0,GC.default)("euiSelectableListItem__onFocusBadge",lt)},Be,Ke),Ze)}(I||g&&!c)&&(He=a("span",{className:"euiSelectableListItem__append"},I," ",g&&!c?Qe:null))}var Ht=(ye||ue)&&a(pn,null,a("div",null,ue||ye?" - ":null,ue,ue&&ye?" ":null,ye));return a("li",I8({role:D,"data-test-selected":be,"aria-checked":D==="option"?be:void 0,"aria-selected":!c&&g,className:K,"aria-disabled":c},Y),a("span",{className:"euiSelectableListItem__content"},ne,ze,a("span",{className:B},i,Ht),He))}}]),n}(Vbe.Component);Hbe(KC,"defaultProps",{showIcons:!0,onFocusBadge:!0,textWrap:"truncate"});KC.propTypes={className:Ir.default.string,"aria-label":Ir.default.string,"data-test-subj":Ir.default.string,children:Ir.default.node,checked:Ir.default.oneOf(["on","off",void 0]),showIcons:Ir.default.bool,isFocused:Ir.default.bool,disabled:Ir.default.bool,prepend:Ir.default.node,append:Ir.default.node,allowExclusions:Ir.default.bool,onFocusBadge:Ir.default.oneOfType([Ir.default.bool.isRequired,Ir.default.shape({iconType:Ir.default.oneOfType([Ir.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ir.default.string.isRequired,Ir.default.elementType.isRequired]),iconSide:Ir.default.oneOf(["left","right"]),color:Ir.default.oneOfType([Ir.default.string.isRequired,Ir.default.any.isRequired]),isDisabled:Ir.default.bool,closeButtonProps:Ir.default.any,className:Ir.default.string,"aria-label":Ir.default.string,"data-test-subj":Ir.default.string,iconOnClick:Ir.default.func,iconOnClickAriaLabel:Ir.default.any,onClick:Ir.default.func,onClickAriaLabel:Ir.default.any,href:Ir.default.string,target:Ir.default.string,rel:Ir.default.string}).isRequired]),paddingSize:Ir.default.any,searchable:Ir.default.bool,role:Ir.default.any,textWrap:Ir.default.oneOf(["truncate","wrap"])};function YC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?YC=function(n){return typeof n}:YC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},YC(e)}var bAt=["data"],wAt=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data"],OAt=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isVirtualized","textWrap"];function Ube(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function j8(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function _At(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $be(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function QC(e){return QC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},QC(e)}function Cl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var E8=function(e){IAt(n,e);var t=jAt(n);function n(r){var o;return _At(this,n),o=t.call(this,r),Cl(ys(o),"listRef",null),Cl(ys(o),"listBoxRef",null),Cl(ys(o),"setListRef",function(i){o.listRef=i,i&&o.props.activeOptionIndex&&i.scrollToItem(o.props.activeOptionIndex,"auto")}),Cl(ys(o),"removeScrollableTabStop",function(i){i&&i.setAttribute("tabindex","-1")}),Cl(ys(o),"setListBoxRef",function(i){o.listBoxRef=i;var u=o.props,c=u.listId,d=u.searchable,g=u.singleSelection,O=u["aria-label"],S=u["aria-labelledby"],I=u["aria-describedby"];i&&(i.setAttribute("id",c),i.setAttribute("role","listbox"),d!==!0&&(i.setAttribute("tabindex","0"),g!=="always"&&g!==!0&&i.setAttribute("aria-multiselectable","true")),typeof O=="string"?i.setAttribute("aria-label",O):typeof S=="string"&&i.setAttribute("aria-labelledby",S),typeof I=="string"&&i.setAttribute("aria-labelledby",I))}),Cl(ys(o),"ListRow",(0,Hh.memo)(function(i){var u=i.data,c=i.index,d=i.style,g=u[c],O=g.data,S=$Y(g,bAt),I=g.label,R=g.isGroupLabel,k=g.checked,M=g.disabled,C=g.prepend,T=g.append,D=g.ref,U=g.key,G=g.searchableLabel,Y=g.data,K=$Y(g,wAt),B=o.props,ne=B.activeOptionIndex,pe=B.allowExclusions,ve=B.onFocusBadge,de=B.paddingSize,ue=B.searchValue,ye=B.showIcons,be=B.makeOptionId,ze=B.renderOption,He=B.setActiveOptionIndex,Qe=B.searchable,Be=B.textWrap;if(R)return a("li",Bh({role:"presentation",className:"euiSelectableList__groupLabel",style:d},K),C,I,T);var Ze=u.filter(function(Ke){return Ke.isGroupLabel}).length,lt=be(c);return a(KC,Bh({key:lt,id:lt,style:d,onMouseDown:function(){He(c)},onClick:function(Ht){Ht.persist(),o.onAddOrRemoveOption(g,Ht)},ref:D?D.bind(null,c):void 0,isFocused:ne===c,title:G||I,checked:k,disabled:M,prepend:C,append:T,"aria-posinset":c+1-Ze,"aria-setsize":u.length-Ze,onFocusBadge:ve,allowExclusions:pe,showIcons:ye,paddingSize:de,searchable:Qe,textWrap:Be},K),ze?ze(j8(j8({},S),O),o.props.searchValue):a(sc,{search:ue},I))},e2e)),Cl(ys(o),"onAddOrRemoveOption",function(i,u){if(!i.disabled){var c=o.props,d=c.allowExclusions,g=c.options,O=c.visibleOptions,S=O===void 0?g:O;o.props.setActiveOptionIndex(S.findIndex(function(I){var R=I.label;return R===i.label}),function(){i.checked==="on"&&d?o.onExcludeOption(i,u):i.checked==="on"||i.checked==="off"?o.onRemoveOption(i,u):o.onAddOption(i,u)})}}),Cl(ys(o),"onAddOption",function(i,u){var c=o.props,d=c.onOptionClick,g=c.options,O=c.singleSelection,S=g.map(function(I){var R=j8({},I);return O&&delete R.checked,I===i&&(R.checked="on"),R});d(S,u)}),Cl(ys(o),"onRemoveOption",function(i,u){var c=o.props,d=c.onOptionClick,g=c.singleSelection,O=c.options,S=O.map(function(I){var R=j8({},I);return I===i&&g!=="always"&&delete R.checked,R});d(S,u)}),Cl(ys(o),"onExcludeOption",function(i,u){var c=o.props,d=c.onOptionClick,g=c.options;i.checked="off";var O=g.map(function(S){var I=j8({},S);return S===i&&(I.checked="off"),I});d(O,u)}),o}return SAt(n,[{key:"componentDidUpdate",value:function(){var o=this.props.activeOptionIndex;this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant","".concat(this.props.makeOptionId(o))),this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,c=i.options,d=i.searchValue,g=i.onOptionClick,O=i.renderOption,S=i.height,I=i.windowProps,R=i.rowHeight,k=i.activeOptionIndex,M=i.makeOptionId,C=i.showIcons,T=i.singleSelection,D=i.visibleOptions,U=i.allowExclusions,G=i.bordered,Y=i.paddingSize,K=i.searchable,B=i.onFocusBadge,ne=i.listId,pe=i.setActiveOptionIndex,ve=i["aria-label"],de=i["aria-labelledby"],ue=i["aria-describedby"],ye=i.role,be=i.isVirtualized,ze=i.textWrap,He=$Y(i,OAt),Qe=D||c,Be=S==="full",Ze=Be?!1:S;if(Ze===void 0){var lt=7,Ke=Qe.length,Ht=Qe.length>lt;Ht?Ze=(lt-.5)*R:Ze=Ke*R}var Ge=(0,Jbe.default)("euiSelectableList",{"euiSelectableList-fullHeight":Be,"euiSelectableList-bordered":G},u);return a("div",Bh({className:Ge},He),be?a(dX,{disableHeight:!Be},function(Wt){var Vt=Wt.width,st=Wt.height;return a(fC,Bh({ref:o.setListRef,outerRef:o.removeScrollableTabStop,className:"euiSelectableList__list","data-skip-axe":"scrollable-region-focusable",width:Vt,height:Ze||st,itemCount:Qe.length,itemData:Qe,itemSize:R,innerElementType:"ul",innerRef:o.setListBoxRef},I),o.ListRow)}):a("div",{className:"euiSelectableList__list",ref:this.removeScrollableTabStop},a("ul",{ref:this.setListBoxRef},Qe.map(function(Wt,Vt){return Hh.default.createElement(o.ListRow,{key:Vt,data:Qe,index:Vt},null)}))))}}]),n}(Hh.Component);Cl(E8,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});E8.propTypes={className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,activeOptionIndex:at.default.number,showIcons:at.default.bool,singleSelection:at.default.oneOfType([at.default.oneOf(["always"]),at.default.bool.isRequired]),windowProps:at.default.any,bordered:at.default.bool,onFocusBadge:at.default.oneOfType([at.default.bool.isRequired,at.default.shape({iconType:at.default.oneOfType([at.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,at.default.string.isRequired,at.default.elementType.isRequired]),iconSide:at.default.oneOf(["left","right"]),color:at.default.oneOfType([at.default.string.isRequired,at.default.any.isRequired]),isDisabled:at.default.bool,closeButtonProps:at.default.any,className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,iconOnClick:at.default.func,iconOnClickAriaLabel:at.default.any,onClick:at.default.func,onClickAriaLabel:at.default.any,href:at.default.string,target:at.default.string,rel:at.default.string}).isRequired]),paddingSize:at.default.any,textWrap:at.default.oneOf(["truncate","wrap"]),isVirtualized:at.default.oneOfType([at.default.oneOf([!0]),at.default.oneOf([!1]).isRequired]),rowHeight:at.default.number,options:at.default.arrayOf(at.default.shape({isGroupLabel:at.default.oneOfType([at.default.oneOf([!0]).isRequired,at.default.oneOf([!1])]),className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,label:at.default.string,searchableLabel:at.default.string,key:at.default.string,checked:at.default.oneOf(["on","off",void 0]),disabled:at.default.bool,prepend:at.default.node,append:at.default.node,ref:at.default.func,data:at.default.shape({})}).isRequired).isRequired,visibleOptions:at.default.arrayOf(at.default.shape({isGroupLabel:at.default.oneOfType([at.default.oneOf([!0]).isRequired,at.default.oneOf([!1])]),className:at.default.string,"aria-label":at.default.string,"data-test-subj":at.default.string,label:at.default.string,searchableLabel:at.default.string,key:at.default.string,checked:at.default.oneOf(["on","off",void 0]),disabled:at.default.bool,prepend:at.default.node,append:at.default.node,ref:at.default.func,data:at.default.shape({})}).isRequired),searchValue:at.default.string.isRequired,onOptionClick:at.default.func.isRequired,renderOption:at.default.func,height:at.default.oneOfType([at.default.number.isRequired,at.default.oneOf(["full"])]),allowExclusions:at.default.bool,searchable:at.default.bool,makeOptionId:at.default.func.isRequired,listId:at.default.string.isRequired,setActiveOptionIndex:at.default.func.isRequired};function ZC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ZC=function(n){return typeof n}:ZC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},ZC(e)}var kAt=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","isPreFiltered"],CAt=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],AAt=["aria-label","aria-describedby","isVirtualized","rowHeight"];function MAt(e,t){return DAt(e)||zAt(e,t)||RAt(e,t)||TAt()}function TAt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function RAt(e,t){if(e){if(typeof e=="string")return Gbe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gbe(e,t)}}function Gbe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function NAt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Kbe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eA(e){return eA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},eA(e)}function Vo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var df=function(e){WAt(n,e);var t=BAt(n);function n(r){var o,i;NAt(this,n),i=t.call(this,r),Vo(ci(i),"inputRef",null),Vo(ci(i),"containerRef",(0,bs.createRef)()),Vo(ci(i),"optionsListRef",(0,bs.createRef)()),Vo(ci(i),"preventOnFocus",!1),Vo(ci(i),"rootId",void 0),Vo(ci(i),"messageContentId",void 0),Vo(ci(i),"listId",void 0),Vo(ci(i),"onMouseDown",function(){i.preventOnFocus=!0}),Vo(ci(i),"onFocus",function(){if(i.preventOnFocus){i.preventOnFocus=!1;return}if(!(!i.state.visibleOptions.length||i.state.activeOptionIndex!=null)){var k=i.state.visibleOptions.findIndex(function(M){return M.checked&&!M.disabled&&!M.isGroupLabel});k>-1?i.setState({activeOptionIndex:k,isFocused:!0}):i.setState({activeOptionIndex:i.state.visibleOptions.findIndex(function(M){return!M.disabled&&!M.isGroupLabel}),isFocused:!0})}}),Vo(ci(i),"onKeyDown",function(k){var M=i.optionsListRef.current;switch(k.key){case Fr.ARROW_UP:k.preventDefault(),k.stopPropagation(),i.incrementActiveOptionIndex(-1);break;case Fr.ARROW_DOWN:k.preventDefault(),k.stopPropagation(),i.incrementActiveOptionIndex(1);break;case Fr.ENTER:case Fr.SPACE:if(i.props.searchable){var C,T;if(k.target===i.inputRef&&k.key===Fr.SPACE||!(k.target===i.inputRef||k.target===((C=i.optionsListRef.current)===null||C===void 0||(T=C.listBoxRef)===null||T===void 0?void 0:T.parentElement)))return}k.preventDefault(),k.stopPropagation(),i.state.activeOptionIndex!=null&&M&&(k.persist(),M.onAddOrRemoveOption(i.state.visibleOptions[i.state.activeOptionIndex],k));break;case Fr.ALT:case Fr.SHIFT:case Fr.CTRL:case Fr.META:break;default:i.setState({activeOptionIndex:void 0},i.onFocus);break}}),Vo(ci(i),"incrementActiveOptionIndex",function(k){i.state.visibleOptions.length&&i.setState(function(M){var C=M.activeOptionIndex,T=M.visibleOptions,D;C==null?D=k<0?T.length-1:0:(D=C+k,D<0?D=T.length-1:D===T.length&&(D=0));for(var U=k>0?1:-1;T[D].isGroupLabel||T[D].disabled;)D=D+U,D<0?D=T.length-1:D===T.length&&(D=0);return{activeOptionIndex:D}})}),Vo(ci(i),"onSearchChange",function(k,M){var C,T;i.setState({searchValue:k,visibleOptions:M,activeOptionIndex:void 0},function(){i.state.isFocused&&i.onFocus()}),(C=i.props.searchProps)===null||C===void 0||(T=C.onChange)===null||T===void 0||T.call(C,k,M)}),Vo(ci(i),"onContainerBlur",function(k){var M,C;((M=k.relatedTarget)===null||M===void 0||(C=M.firstChild)===null||C===void 0?void 0:C.id)!==i.listId&&i.setState({activeOptionIndex:void 0,isFocused:!1})}),Vo(ci(i),"onOptionClick",function(k,M){var C=i.props,T=C.isPreFiltered,D=C.onChange,U=i.state.searchValue,G=Wh(k,U,T);i.setState({visibleOptions:G}),D&&D(k,M)}),Vo(ci(i),"scrollToItem",function(k,M){var C,T;(C=i.optionsListRef.current)===null||C===void 0||(T=C.listRef)===null||T===void 0||T.scrollToItem(k,M)}),Vo(ci(i),"makeOptionId",function(k){return k!=null?"".concat(i.listId,"_option-").concat(k):""}),i.rootId=r.id?function(k){return"".concat(r.id).concat(k?"_".concat(k):"")}:_r(),i.listId=i.rootId("listbox"),i.messageContentId=i.rootId("messageContent");var u=r.options,c=r.singleSelection,d=r.isPreFiltered,g=r.searchProps,O=g?.value||String(g?.defaultValue||""),S=Wh(u,O,d);g==null||(o=g.onChange)===null||o===void 0||o.call(g,O,S);var I=u.filter(function(k){return k.checked}),R;return c&&I.length===1&&S.includes(I[0])&&(R=S.indexOf(I[0])),i.state={activeOptionIndex:R,searchValue:O,visibleOptions:S,isFocused:!1},i}return FAt(n,[{key:"componentDidUpdate",value:function(o,i){if(i.activeOptionIndex!==this.state.activeOptionIndex){var u,c,d=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(u=(c=this.props).onActiveOptionChange)===null||u===void 0||u.call(c,d)}}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,c=i.className,d=i.options,g=i.onChange,O=i.onActiveOptionChange,S=i.searchable,I=i.searchProps,R=i.singleSelection,k=i.isLoading,M=i.listProps,C=i.renderOption,T=i.height,D=i.allowExclusions,U=i["aria-label"],G=i["aria-describedby"],Y=i.loadingMessage,K=i.noMatchesMessage,B=i.emptyMessage,ne=i.errorMessage,pe=i.isPreFiltered,ve=XY(i,kAt),de=this.state,ue=de.searchValue,ye=de.visibleOptions,be=de.activeOptionIndex,ze={"aria-label":void 0,"aria-describedby":void 0},He=I||ze,Qe=He["aria-label"],Be=He["aria-describedby"],Ze=He.onChange,lt=He.defaultValue,Ke=He.inputRef,Ht=XY(He,CAt),Ge=M||ze,Wt=Ge["aria-label"],Vt=Ge["aria-describedby"],st=Ge.isVirtualized,Ct=Ge.rowHeight,Mr=XY(Ge,AAt),Sr;st===!1?Sr={isVirtualized:st}:Ct!=null&&(Sr={rowHeight:Ct});var An=(0,Ybe.default)("euiSelectable",{"euiSelectable-fullHeight":T==="full"},c),jr;ne!=null?jr=typeof ne=="string"?a("p",null,ne):ne:k?Y===void 0||typeof Y=="string"?jr=a(bs.default.Fragment,null,a(Zt,{size:"m"}),a(so,{size:"xs"}),a("p",null,Y||a(bt,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):jr=bs.default.cloneElement(Y,GY({id:this.messageContentId},Y.props)):ue&&ye.length===0?K===void 0||typeof K=="string"?jr=a("p",null,K||a(bt,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:a("strong",null,ue)}})):jr=bs.default.cloneElement(K,GY({id:this.messageContentId},K.props)):d.length||(B===void 0||typeof B=="string"?jr=a("p",null,B||a(bt,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):jr=bs.default.cloneElement(B,GY({id:this.messageContentId},B.props)));var Dt=function(Qn,tn){if(Qn&&Qn["aria-label"])return{"aria-label":Qn["aria-label"]};var Uo=tn?" ".concat(tn):"";return Qn&&Qn["aria-describedby"]?{"aria-describedby":"".concat(Qn["aria-describedby"]).concat(Uo)}:U?{"aria-label":U}:G?{"aria-describedby":"".concat(G).concat(Uo)}:{}},en=Dt(I,this.messageContentId),Cr=!!Object.keys(en).length,Fn=S?a(bt,{token:"euiSelectable.placeholderName",default:"Filter options"},function(va){return a(VY,P8({key:"listSearch",options:d,value:ue,onChange:o.onSearchChange,listId:o.optionsListRef.current?o.listId:void 0,"aria-activedescendant":o.makeOptionId(be),placeholder:va,isPreFiltered:pe??!1,inputRef:function(tn){var Uo;o.inputRef=tn,I==null||(Uo=I.inputRef)===null||Uo===void 0||Uo.call(I,tn)}},Cr?en:{"aria-label":va},Ht))}):void 0,co=ye.filter(function(va){return!va.disabled}).length,po=S&&a(bt,{token:"euiSelectable.searchResults",default:function(Qn){var tn=Qn.resultsLength;return"".concat(tn," result").concat(tn===1?"":"s"," available")},values:{resultsLength:co}}),qo=this.rootId("instructions"),Mn=Dt(M,qo),fi=!!Object.keys(Mn).length,Va=a(bt,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.","Filter options"]},function(va){var Qn=MAt(va,2),tn=Qn[0],Uo=Qn[1];return a(bs.default.Fragment,null,S&&a(E2,{isActive:jr!=null||be!=null},jr||po),a(pn,null,a("p",{id:qo},Uo)),jr?a($C,{"data-test-subj":"euiSelectableMessage",id:o.messageContentId,bordered:M&&M.bordered},jr):a(E8,P8({"data-test-subj":"euiSelectableList",key:"list",options:d,visibleOptions:ye,searchValue:ue,activeOptionIndex:be,setActiveOptionIndex:function(vc,br){o.setState({activeOptionIndex:vc},br)},onOptionClick:o.onOptionClick,singleSelection:R,ref:o.optionsListRef,renderOption:C,height:T,allowExclusions:D,searchable:S,makeOptionId:o.makeOptionId,listId:o.listId},fi?Mn:S&&{"aria-label":tn},Mr,Sr)))});return a("div",P8({ref:this.containerRef,className:An,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},ve),u&&u(Va,Fn))}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,c=o.isPreFiltered,d=o.searchProps,g=i.activeOptionIndex,O=i.searchValue,S=Wh(u,O,c),I={visibleOptions:S,activeOptionIndex:g};return g!=null&&g>=S.length&&(I.activeOptionIndex=-1),d?.value!=null&&d.value!==O&&(I.searchValue=d.value),I}}]),n}(bs.Component);Vo(df,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1});df.propTypes={className:qt.default.string,"aria-label":qt.default.string,"data-test-subj":qt.default.string,searchable:qt.default.oneOfType([qt.default.oneOf([!1]).isRequired,qt.default.oneOf([!0]).isRequired]).isRequired,searchProps:qt.default.any,children:qt.default.func,options:qt.default.arrayOf(qt.default.shape({isGroupLabel:qt.default.oneOfType([qt.default.oneOf([!0]).isRequired,qt.default.oneOf([!1])]),className:qt.default.string,"aria-label":qt.default.string,"data-test-subj":qt.default.string,label:qt.default.string,searchableLabel:qt.default.string,key:qt.default.string,checked:qt.default.oneOf(["on","off",void 0]),disabled:qt.default.bool,prepend:qt.default.node,append:qt.default.node,ref:qt.default.func,data:qt.default.shape({})}).isRequired).isRequired,onChange:qt.default.func,onActiveOptionChange:qt.default.func,singleSelection:qt.default.oneOfType([qt.default.oneOf(["always"]),qt.default.bool.isRequired]),allowExclusions:qt.default.bool,isLoading:qt.default.bool,height:qt.default.oneOfType([qt.default.number.isRequired,qt.default.oneOf(["full"])]),listProps:qt.default.any,renderOption:qt.default.func,loadingMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired]),noMatchesMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired]),emptyMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired]),errorMessage:qt.default.oneOfType([qt.default.element.isRequired,qt.default.string.isRequired,qt.default.oneOf([null])]),isPreFiltered:qt.default.bool};var KIr=E(L()),i0=E(rt()),Qbe=E(yt());var qAt=["children","className","compressed","tableLayout","responsive"];function YY(){return YY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $At(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JAt={fixed:null,auto:"euiTable--auto"},tA=function(t){var n=t.children,r=t.className,o=t.compressed,i=t.tableLayout,u=i===void 0?"fixed":i,c=t.responsive,d=c===void 0?!0:c,g=UAt(t,qAt),O=(0,Qbe.default)("euiTable",r,{"euiTable--compressed":o,"euiTable--responsive":d},JAt[u]);return a("table",YY({tabIndex:-1,className:O},g),n)};tA.propTypes={compressed:i0.default.bool,responsive:i0.default.bool,tableLayout:i0.default.oneOf(["fixed","auto"]),className:i0.default.string,"aria-label":i0.default.string,"data-test-subj":i0.default.string};var ejr=E(L()),k8=E(rt());var GAt=["children","className","bodyRef"];function QY(){return QY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vh=function(t){var n=t.children,r=t.className,o=t.bodyRef,i=XAt(t,GAt);return a("tbody",QY({className:r,ref:o},i),n)};Vh.propTypes={className:k8.default.string,"aria-label":k8.default.string,"data-test-subj":k8.default.string,bodyRef:k8.default.any};var ojr=E(L()),rA=E(rt());var YAt=["children","className"];function ZY(){return ZY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nA=function(t){var n=t.children,r=t.className,o=QAt(t,YAt);return a("tfoot",ZY({className:r},o),a("tr",null,n))};nA.propTypes={className:rA.default.string,"aria-label":rA.default.string,"data-test-subj":rA.default.string};var ujr=E(L()),hf=E(rt()),tQ=E(yt());var eMt=["width"];function Zbe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function e3e(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oMt="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",mf=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.width,o=rMt(t,eMt),i=n;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),r&&i&&console.warn(oMt),e3e(e3e({},o),{},{width:i||r})};var iMt=["children","align","className","width","style"];function eQ(){return eQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qh=function(t){var n=t.children,r=t.align,o=r===void 0?Ol:r,i=t.className,u=t.width,c=t.style,d=aMt(t,iMt),g=(0,tQ.default)("euiTableFooterCell",i),O=(0,tQ.default)("euiTableCellContent",i,{"euiTableCellContent--alignRight":o===ns,"euiTableCellContent--alignCenter":o===Xu}),S=mf(c,u);return a("td",eQ({className:g,style:S},d),a("div",{className:O},a("span",{className:"euiTableCellContent__text"},n)))};qh.propTypes={className:hf.default.string,"aria-label":hf.default.string,"data-test-subj":hf.default.string,align:hf.default.oneOf(["left","right","center"]),width:hf.default.oneOfType([hf.default.string.isRequired,hf.default.number.isRequired])};var hjr=E(L()),Uh=E(rt());var sMt=["children","className","wrapWithTableRow"];function rQ(){return rQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oA=function(t){var n=t.children,r=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,u=uMt(t,sMt);return a("thead",rQ({className:r},u),i?a("tr",null,n):n)};oA.propTypes={className:Uh.default.string,"aria-label":Uh.default.string,"data-test-subj":Uh.default.string,children:Uh.default.node,wrapWithTableRow:Uh.default.bool};var bjr=E(L()),pi=E(rt()),iA=E(yt());var pMt=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description"];function aA(){return aA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var t3e=function(t){var n=t.className,r=t.description,o=t.children,i=t.isSorted,u=t.isSortAscending,c=t.showSortMsg;return a("span",{className:n},a(ss,null,function(d,g){return a(bt,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:g,description:r}},function(O){return a("span",{title:r?O:g,ref:d,className:"euiTableCellContent__text"},o)})}),r&&a(pn,null,a("span",null,r)),c&&i&&a(Nt,{className:"euiTableSortIcon",type:u?"sortUp":"sortDown",size:"m"}))},$h=function(t){var n=t.children,r=t.align,o=r===void 0?Ol:r,i=t.onSort,u=t.isSorted,c=t.isSortAscending,d=t.className,g=t.scope,O=t.mobileOptions,S=O===void 0?{show:!0}:O,I=t.width,R=t.style,k=t.readOnly,M=t.description,C=fMt(t,pMt),T=(0,iA.default)("euiTableHeaderCell",d,{"euiTableHeaderCell--hideForDesktop":S.only,"euiTableHeaderCell--hideForMobile":!S.show}),D=(0,iA.default)("euiTableCellContent",d,{"euiTableCellContent--alignRight":o===ns,"euiTableCellContent--alignCenter":o===Xu}),U=mf(R,I),G=n?"th":"td",Y=G==="th"?g??"col":void 0;if(i||u){var K=(0,iA.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":u}),B="none";u&&(B=c?"ascending":"descending");var ne=a(t3e,{className:D,description:M,showSortMsg:!0,children:n,isSorted:u,isSortAscending:c});return a(G,aA({className:T,scope:Y,role:"columnheader","aria-sort":B,"aria-live":"polite",style:U},C),i&&!k?a("button",{type:"button",className:K,onClick:i,"data-test-subj":"tableHeaderSortButton"},ne):ne)}return a(G,aA({className:T,scope:Y,role:"columnheader",style:U},C),a(t3e,{className:D,description:M,showSortMsg:!1,children:n,isSorted:u,isSortAscending:c}))};$h.propTypes={className:pi.default.string,"aria-label":pi.default.string,"data-test-subj":pi.default.string,align:pi.default.oneOf(["left","right","center"]),isSortAscending:pi.default.bool,isSorted:pi.default.bool,mobileOptions:pi.default.shape({show:pi.default.bool,only:pi.default.bool}),onSort:pi.default.func,scope:pi.default.oneOf(["col","row","colgroup","rowgroup"]),width:pi.default.oneOfType([pi.default.string.isRequired,pi.default.number.isRequired]),description:pi.default.string,readOnly:pi.default.bool};var kjr=E(L()),gf=E(rt()),r3e=E(yt());var mMt=["children","className","scope","style","width"];function nQ(){return nQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lA=function(t){var n=t.children,r=t.className,o=t.scope,i=o===void 0?"col":o,u=t.style,c=t.width,d=hMt(t,mMt),g=(0,r3e.default)("euiTableHeaderCellCheckbox",r),O=mf(u,c);return a("th",nQ({className:g,scope:i,style:O},d),a("div",{className:"euiTableCellContent"},n))};lA.propTypes={className:gf.default.string,"aria-label":gf.default.string,"data-test-subj":gf.default.string,width:gf.default.oneOfType([gf.default.string.isRequired,gf.default.number.isRequired]),scope:gf.default.oneOf(["col","row","colgroup","rowgroup"])};var Rjr=E(L()),sA=E(rt()),n3e=E(yt());var vMt=["children","className"];function oQ(){return oQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uA=function(t){var n=t.children,r=t.className,o=yMt(t,vMt),i=(0,n3e.default)("euiTableHeaderMobile",r);return a("div",oQ({className:i},o),n)};uA.propTypes={className:sA.default.string,"aria-label":sA.default.string,"data-test-subj":sA.default.string};var a3e=E(L()),pu=E(rt()),l3e=E(yt());var Njr=E(L()),vf=E(rt()),o3e=E(yt());var wMt=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function iQ(){return iQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aQ=function(t){var n=t.children,r=t.onSort,o=t.isSorted,i=t.isSortAscending,u=t.className,c=t.ariaLabel,d=OMt(t,wMt),g="empty";o&&(g=i?"sortUp":"sortDown");var O=(0,o3e.default)("euiTableSortMobileItem",u,{"euiTableSortMobileItem-isSorted":o}),S=c||n,I="Sort ".concat(S," ").concat(i?"descending":"ascending");return a(ds,iQ({className:O,icon:g,onClick:r,"aria-label":I},d),n)};aQ.propTypes={onSort:vf.default.func,isSorted:vf.default.bool,isSortAscending:vf.default.bool,ariaLabel:vf.default.string,className:vf.default.string,"aria-label":vf.default.string,"data-test-subj":vf.default.string};function cA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?cA=function(n){return typeof n}:cA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},cA(e)}var _Mt=["className","anchorPosition","items"];function sQ(){return sQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function jMt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i3e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fA(e){return fA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},fA(e)}function lQ(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var dA=function(e){PMt(n,e);var t=kMt(n);function n(){var r;jMt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var a0=function(t){var n=t.children,r=t.className,o=t.isSelected,i=t.isSelectable,u=t.hasActions,c=t.isExpandedRow,d=t.isExpandable,g=t.onClick,O=TMt(t,MMt),S=(0,s3e.default)("euiTableRow",r,{"euiTableRow-isSelectable":i,"euiTableRow-isSelected":o,"euiTableRow-hasActions":u,"euiTableRow-isExpandedRow":c,"euiTableRow-isExpandable":d,"euiTableRow-isClickable":g});if(!g)return a("tr",mA({className:S},O),n);var I=function(M){M.key===Fr.SPACE&&M.preventDefault()},R=function(M){(M.key===Fr.ENTER||M.key===Fr.SPACE)&&g(M)};return a("tr",mA({className:S,onClick:g,onKeyDown:I,onKeyUp:R,tabIndex:0},O),n)};a0.propTypes={className:fu.default.string,"aria-label":fu.default.string,"data-test-subj":fu.default.string,isSelectable:fu.default.bool,isSelected:fu.default.bool,hasActions:fu.default.bool,isExpandable:fu.default.bool,isExpandedRow:fu.default.bool,onClick:fu.default.any};var Gh=E(L()),Sn=E(rt()),Jh=E(yt());var zMt=["align","children","className","truncateText","setScopeRow","showOnHover","textOnly","hasActions","isExpander","style","width","valign","mobileOptions"];function hA(){return hA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yf=function(t){var n,r,o=t.align,i=o===void 0?Ol:o,u=t.children,c=t.className,d=t.truncateText,g=t.setScopeRow,O=t.showOnHover,S=t.textOnly,I=S===void 0?!0:S,R=t.hasActions,k=t.isExpander,M=t.style,C=t.width,T=t.valign,D=T===void 0?"middle":T,U=t.mobileOptions,G=U===void 0?{show:!0}:U,Y=LMt(t,zMt),K=(0,Jh.default)("euiTableRowCell",c3e({"euiTableRowCell--hasActions":R,"euiTableRowCell--isExpander":k,"euiTableRowCell--hideForDesktop":G.only,"euiTableRowCell--enlargeForMobile":G.enlarge},"euiTableRowCell--".concat(D),D)),B=(0,Jh.default)("euiTableCellContent",c,{"euiTableCellContent--alignRight":i===ns,"euiTableCellContent--alignCenter":i===Xu,"euiTableCellContent--showOnHover":O,"euiTableCellContent--truncateText":d,"euiTableCellContent--overflowingContent":I!==!0}),ne=(0,Jh.default)("euiTableCellContent",c,{"euiTableCellContent--alignRight":G.align===ns||i===ns,"euiTableCellContent--alignCenter":G.align===Xu||i===Xu,"euiTableCellContent--showOnHover":(n=G.showOnHover)!==null&&n!==void 0?n:O,"euiTableCellContent--truncateText":(r=G.truncateText)!==null&&r!==void 0?r:d,"euiTableCellContent--overflowingContent":G.textOnly!==!0||I!==!0}),pe=(0,Jh.default)({euiTableCellContent__text:I===!0,euiTableCellContent__hoverItem:O}),ve=J2(["xs","s"])&&G.width?G.width:C,de=mf(M,ve);function ue(Be){var Ze=Be;return I===!0?Ze=a("span",{className:pe},Be):Gh.default.isValidElement(Be)&&(Ze=Gh.default.Children.map(Be,function(lt){return Gh.default.cloneElement(lt,{className:(0,Jh.default)(lt.props.className,pe)})})),Ze}var ye=ue(u),be="euiTableRowCell--hideForMobile",ze="euiTableRowCell--hideForDesktop",He=g?"th":"td",Qe=DMt({scope:g?"row":void 0,style:de},Y);return G.show===!1?a(He,hA({className:"".concat(K," ").concat(be)},Qe),a("div",{className:B},ye)):a(He,hA({className:K},Qe),G.header&&a("div",{className:"euiTableRowCell__mobileHeader ".concat(ze)},G.header),G.render?a(Gh.Fragment,null,a("div",{className:"".concat(ne," ").concat(ze)},ue(G.render)),a("div",{className:"".concat(B," ").concat(be)},ye)):a("div",{className:B},ye))};yf.propTypes={className:Sn.default.string,"aria-label":Sn.default.string,"data-test-subj":Sn.default.string,valign:Sn.default.any,setScopeRow:Sn.default.bool,hasActions:Sn.default.bool,isExpander:Sn.default.bool,mobileOptions:Sn.default.shape({show:Sn.default.bool,only:Sn.default.bool,render:Sn.default.node,header:Sn.default.oneOfType([Sn.default.node.isRequired,Sn.default.bool.isRequired]),enlarge:Sn.default.bool,width:Sn.default.any,align:Sn.default.oneOf(["left","right","center"]),showOnHover:Sn.default.bool,textOnly:Sn.default.bool,truncateText:Sn.default.bool}),align:Sn.default.oneOf(["left","right","center"]),showOnHover:Sn.default.bool,textOnly:Sn.default.bool,truncateText:Sn.default.bool,width:Sn.default.any};var aEr=E(L()),gA=E(rt()),p3e=E(yt());var FMt=["children","className"];function cQ(){return cQ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vA=function(t){var n=t.children,r=t.className,o=WMt(t,FMt),i=(0,p3e.default)("euiTableRowCellCheckbox",r);return a("td",cQ({className:i},o),a("div",{className:"euiTableCellContent"},n))};vA.propTypes={className:gA.default.string,"aria-label":gA.default.string,"data-test-subj":gA.default.string};var jA=E(L()),Fe=E(rt()),P3e=E(yt());var d3e=E(L()),Or=E(rt());function yA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?yA=function(n){return typeof n}:yA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},yA(e)}function HMt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f3e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bA(e){return bA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},bA(e)}function l0(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function GMt(e){return e.hasOwnProperty("render")}var fQ=function(e){qMt(n,e);var t=UMt(n);function n(){var r;HMt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function xA(e){return xA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},xA(e)}function wA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var mQ=function(e){YMt(n,e);var t=QMt(n);function n(r){var o;return XMt(this,n),o=t.call(this,r),wA(C8(o),"mounted",void 0),wA(C8(o),"onFocus",function(){o.mounted&&o.setState({hasFocus:!0})}),wA(C8(o),"onBlur",function(){o.mounted&&o.setState({hasFocus:!1})}),wA(C8(o),"hasFocus",function(){return o.state.hasFocus}),o.state={hasFocus:!1},o.mounted=!1,o}return KMt(n,[{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var o=this.props,i=o.action,u=o.enabled,c=o.item,d=o.className,g=i.render(c,u),O=(0,_A.cloneElement)(g,{onFocus:this.onFocus,onBlur:this.onBlur}),S=this.hasFocus()?{opacity:1}:void 0;return a("div",{style:S,className:d},O)}}]),n}(_A.Component);mQ.propTypes={action:Xh.default.any.isRequired,enabled:Xh.default.bool.isRequired,item:Xh.default.any.isRequired,className:Xh.default.string.isRequired,index:Xh.default.number};var v3e=function(t){return t.hasOwnProperty("render")};var w3e=function(t){var n=t.actions,r=t.itemId,o=t.item,i=t.actionEnabled,u=t.className,c=n.length>2;return a(y3e.default.Fragment,null,n.reduce(function(d,g,O){var S=g.available?g.available(o):!0;if(!S)return d;var I=i(g),R="item_action_".concat(r,"_").concat(O),k=(0,b3e.default)(u,{expandedItemActions__completelyHide:c&&O<2});return v3e(g)?d.push(a(mQ,{key:R,className:k,index:O,action:g,enabled:I,item:o})):d.push(a(h3e,{key:R,className:k,action:g,enabled:I,item:o})),d},[]))};var O3e=E(L());var tTt={pageSizeOptions:[10,25,50]},x3e=function(t){var n=t.pagination,r=t.onPageSizeChange,o=t.onPageChange,i=t["aria-controls"],u=t["aria-label"],c=n.pageSizeOptions?n.pageSizeOptions:tTt.pageSizeOptions,d=n.pageSize?Math.ceil(n.totalItemCount/n.pageSize):1;return(0,O3e.useEffect)(function(){de.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function S3e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function ma(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function IA(e){return IA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},IA(e)}function Al(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var vQ={auto:{align:Ol,render:function(t){return VE(t)}},string:{align:Ol,render:function(t){return Y1(t)}},number:{align:ns,render:function(t){return K1(t)}},boolean:{align:Ol,render:function(t){return G1(t)}},date:{align:Ol,render:function(t){return X1(t)}}},j3e=Object.keys(vQ);function Kh(e,t){if(t)return Xp(t)?t(e):e[t]}function gTt(e,t){return t?Xp(t)?t(e):t:{}}function vTt(e,t,n){return n?Xp(n)?n(e,t):n:{}}function yTt(e,t){var n=t.items,r=t.pagination,o=e,i=o.footer;if(i)return Xp(i)?i({items:n,pagination:r}):i}function E3e(e){return e.hasOwnProperty("pagination")&&!!e.pagination}var u0=function(e){fTt(n,e);var t=dTt(n);function n(r){var o;return cTt(this,n),o=t.call(this,r),Al(ws(o),"cleanups",[]),Al(ws(o),"tbody",null),Al(ws(o),"setTbody",function(i){o.removeLoadingListeners(),o.tbody=i,o.props.loading===!0&&i&&o.addLoadingListeners(i)}),Al(ws(o),"addLoadingListeners",function(i){var u=function(d){d.stopPropagation(),d.preventDefault()};["mousedown","mouseup","mouseover","mouseout","mouseenter","mouseleave","click","dblclick","keydown","keyup","keypress"].forEach(function(c){i.addEventListener(c,u,!0),o.cleanups.push(function(){i.removeEventListener(c,u,!0)})})}),Al(ws(o),"removeLoadingListeners",function(){o.cleanups.forEach(function(i){return i()}),o.cleanups.length=0}),Al(ws(o),"tableId",_r("__table")()),Al(ws(o),"selectAllIdGenerator",_r("_selection_column-checkbox")),Al(ws(o),"renderSelectAll",function(i){var u=o.props,c=u.items,d=u.selection;if(d){var g=c.filter(function(R){return!d.selectable||d.selectable(R)}),O=o.state.selection&&g.length>0&&o.state.selection.length===g.length,S=g.length===0,I=function(k){k.target.checked?o.changeSelection(g):o.changeSelection([])};return a(bt,{token:"euiBasicTable.selectAllRows",default:"Select all rows"},function(R){return a(Sh,{id:o.selectAllIdGenerator(i?"mobile":"desktop"),type:i?void 0:"inList",checked:O,disabled:S,onChange:I,"data-test-subj":i?void 0:"checkboxSelectAll","aria-label":R,label:i?R:null})})}}),Al(ws(o),"resolveColumnSortDirection",function(i){var u=o.props.sorting,c=i,d=c.sortable,g=c.field,O=c.name;if(!(!u||!u.sort||!d)&&(u.sort.field===g||u.sort.field===O))return u.sort.direction}),Al(ws(o),"resolveColumnOnSort",function(i){var u=o.props.sorting,c=i,d=c.sortable,g=c.name;if(!(!u||!d)){if(!o.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(g,`] but + [onChange] is not configured. This callback must be implemented to handle the sort requests`));return function(){return o.onColumnSortChange(i)}}}),o.state={initialSelectionRendered:!1,selection:[]},o}return pTt(n,[{key:"componentDidMount",value:function(){this.props.loading&&this.tbody&&this.addLoadingListeners(this.tbody),this.getInitialSelection()}},{key:"componentDidUpdate",value:function(o){o.loading!==this.props.loading&&(this.props.loading&&this.tbody?this.addLoadingListeners(this.tbody):this.removeLoadingListeners()),this.getInitialSelection()}},{key:"componentWillUnmount",value:function(){this.removeLoadingListeners()}},{key:"getInitialSelection",value:function(){this.props.selection&&this.props.selection.initialSelected&&!this.state.initialSelectionRendered&&this.props.items.length>0&&(this.setState({selection:this.props.selection.initialSelected}),this.setState({initialSelectionRendered:!0}))}},{key:"setSelection",value:function(o){this.changeSelection(o)}},{key:"buildCriteria",value:function(o){var i={};return E3e(o)&&(i.page={index:o.pagination.pageIndex,size:o.pagination.pageSize}),o.sorting&&(i.sort=o.sorting.sort),i}},{key:"changeSelection",value:function(o){this.props.selection&&(this.setState({selection:o}),this.props.selection.onSelectionChange&&this.props.selection.onSelectionChange(o))}},{key:"clearSelection",value:function(){this.changeSelection([])}},{key:"onPageSizeChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=ma(ma({},i),{},{page:{index:0,size:o}});this.props.onChange&&this.props.onChange(u)}},{key:"onPageChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=ma(ma({},i),{},{page:ma(ma({},i.page),{},{index:o})});this.props.onChange&&this.props.onChange(u)}},{key:"onColumnSortChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=jl.ASC;i&&i.sort&&(i.sort.field===o.field||i.sort.field===o.name)&&(u=jl.reverse(i.sort.direction));var c=ma(ma({},i),{},{page:i.page?{index:0,size:i.page.size}:void 0,sort:{field:o.field||o.name,direction:u}});this.props.onChange&&this.props.onChange(c)}},{key:"render",value:function(){var o=this.props,i=o.className,u=o.loading,c=o.items,d=o.itemId,g=o.columns,O=o.pagination,S=o.sorting,I=o.selection,R=o.onChange,k=o.error,M=o.noItemsMessage,C=o.compressed,T=o.itemIdToExpandedRowMap,D=o.responsive,U=o.isSelectable,G=o.isExpandable,Y=o.hasActions,K=o.rowProps,B=o.cellProps,ne=o.tableCaption,pe=o.rowHeader,ve=o.tableLayout,de=_3e(o,rTt),ue=(0,P3e.default)("euiBasicTable",{"euiBasicTable-loading":u},i),ye=this.renderTable(),be=this.renderPaginationBar();return a("div",s0({className:ue},de),ye,be)}},{key:"renderTable",value:function(){var o=this.props,i=o.compressed,u=o.responsive,c=o.tableLayout,d=u?a(uA,null,a(_n,{responsive:!1,justifyContent:"spaceBetween",alignItems:"baseline"},a(wt,{grow:!1},this.renderSelectAll(!0)),a(wt,{grow:!1},this.renderTableMobileSort()))):void 0,g=this.renderTableCaption(),O=this.renderTableHead(),S=this.renderTableBody(),I=this.renderTableFooter();return a("div",null,d,a(tA,{id:this.tableId,tableLayout:c,responsive:u,compressed:i},g,O,S,I))}},{key:"renderTableMobileSort",value:function(){var o=this,i=this.props,u=i.columns,c=i.sorting,d=[];return c?(u.forEach(function(g,O){var S,I;if(g.field&&c.sort&&c.enableAllColumns&&g.sortable==null&&(g=ma(ma({},g),{},{sortable:!0})),!(!g.sortable||((S=g)===null||S===void 0||(I=S.mobileOptions)===null||I===void 0?void 0:I.show)===!1)){var R=o.resolveColumnSortDirection(g);d.push({name:g.name,key:"_data_s_".concat(g.field,"_").concat(O),onSort:o.resolveColumnOnSort(g),isSorted:!!R,isSortAscending:R?jl.isAsc(R):void 0})}}),d.length?a(dA,{items:d}):null):null}},{key:"renderTableCaption",value:function(){var o=this.props,i=o.items,u=o.pagination,c=o.tableCaption,d=i.length,g=u?u.totalItemCount:d,O=u?u.pageIndex+1:1,S=u!=null&&u.pageSize?Math.ceil(u.totalItemCount/u.pageSize):1,I;return c?u?I=a(bt,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:c,page:O,pageCount:S}}):I=c:u?u.totalItemCount>0?I=a(bt,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:g,itemCount:d,page:O,pageCount:S}}):I=a(bt,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:d,page:O,pageCount:S}}):I=a(bt,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:d}}),a(pn,null,a("caption",{className:"euiTableCaption"},a(w8,null,I)))}},{key:"renderTableHead",value:function(){var o=this,i=this.props,u=i.columns,c=i.selection,d=[];return c&&d.push(a(lA,{key:"_selection_column_h"},this.renderSelectAll(!1))),u.forEach(function(g,O){var S=g,I=S.field,R=S.width,k=S.name,M=S.align,C=S.dataType,T=S.sortable,D=S.mobileOptions,U=S.readOnly,G=S.description,Y=M||o.getAlignForDataType(C);if(g.actions){d.push(a($h,{key:"_actions_h_".concat(O),align:"right",width:R,description:G,mobileOptions:D},k));return}if(!g.field){var K={};if(o.props.sorting&&typeof T=="function"){var B=o.resolveColumnSortDirection(g);K.isSorted=!!B,K.isSortAscending=B?jl.isAsc(B):void 0,K.onSort=o.resolveColumnOnSort(g),K.readOnly=o.props.sorting.readOnly||U}d.push(a($h,s0({key:"_computed_column_h_".concat(O),align:Y,width:R,mobileOptions:D,"data-test-subj":"tableHeaderCell_".concat(typeof k=="string"?k:"","_").concat(O),description:G},K),k));return}var ne={};if(o.props.sorting){o.props.sorting.sort&&o.props.sorting.enableAllColumns&&g.sortable==null&&(g=ma(ma({},g),{},{sortable:!0}));var pe=g,ve=pe.sortable;if(ve){var de=o.resolveColumnSortDirection(g);ne.isSorted=!!de,ne.isSortAscending=de?jl.isAsc(de):void 0,ne.onSort=o.resolveColumnOnSort(g),ne.readOnly=o.props.sorting.readOnly||U}}d.push(a($h,s0({key:"_data_h_".concat(I,"_").concat(O),align:Y,width:R,mobileOptions:D,"data-test-subj":"tableHeaderCell_".concat(I,"_").concat(O),description:G},ne),k))}),a(oA,null,d)}},{key:"renderTableFooter",value:function(){var o=this.props,i=o.items,u=o.columns,c=o.pagination,d=o.selection,g=[],O=!1;return d&&g.push(a(qh,{key:"_selection_column_f"},void 0)),u.forEach(function(S){var I=yTt(S,{items:i,pagination:c}),R=S,k=R.mobileOptions,M=R.field,C=R.align;k!=null&&k.only||(I?(g.push(a(qh,{key:"footer_".concat(M,"_").concat(g.length-1),align:C},I)),O=!0):g.push(a(qh,{key:"footer_empty_".concat(g.length-1),align:C},void 0)))}),g.length&&O?a(nA,null,g):null}},{key:"renderTableBody",value:function(){var o=this;if(this.props.error)return this.renderErrorBody(this.props.error);var i=this.props.items;if(i.length===0)return this.renderEmptyBody();var u=i.map(function(c,d){var g=E3e(o.props)&&o.props.pagination.pageSize>0?o.props.pagination.pageIndex*o.props.pagination.pageSize+d:d;return o.renderItemRow(c,g)});return a(Vh,{bodyRef:this.setTbody},u)}},{key:"renderErrorBody",value:function(o){var i=this.props.columns.length+(this.props.selection?1:0);return a(Vh,null,a(a0,null,a(yf,{align:"center",colSpan:i,mobileOptions:{width:"100%"}},a(Nt,{type:"minusInCircle",color:"danger"})," ",o)))}},{key:"renderEmptyBody",value:function(){var o=this.props,i=o.columns,u=o.selection,c=o.noItemsMessage,d=i.length+(u?1:0);return a(Vh,null,a(a0,null,a(yf,{align:"center",colSpan:d,mobileOptions:{width:"100%"}},c)))}},{key:"renderItemRow",value:function(o,i){var u=this,c=this.props,d=c.columns,g=c.selection,O=c.isSelectable,S=c.hasActions,I=c.rowHeader,R=c.itemIdToExpandedRowMap,k=R===void 0?{}:R,M=c.isExpandable,C=[],T=this.props.itemId,D=Kh(o,T)!=null?Kh(o,T):i,U=g?this.state.selection&&!!this.state.selection.find(function(be){return Kh(be,T)===D}):!1,G;g&&(C.push(this.renderItemSelectionCell(D,o,U)),G=!0);var Y;d.forEach(function(be,ze){if(be.actions)C.push(u.renderItemActionsCell(D,o,be,ze)),Y=!0;else if(be.field){var He=be;C.push(u.renderItemFieldDataCell(D,o,be,ze,He.field===I))}else C.push(u.renderItemComputedCell(D,o,be,ze))});var K=g?d.length+1:d.length,B=d.reduce(function(be,ze){var He;return ze!=null&&(He=ze.mobileOptions)!==null&&He!==void 0&&He.only?be+1:be+0},0);K=K-B;var ne=k.hasOwnProperty(D),pe=ne?"row_".concat(D,"_expansion"):void 0,ve=ne?a(a0,{id:pe,isExpandedRow:!0,isSelectable:O},a(yf,{colSpan:K,textOnly:!1},k[D])):void 0,de=this.props.rowProps,ue=gTt(o,de),ye=a(a0,s0({"aria-owns":pe,isSelectable:O??G,isSelected:U,hasActions:S??Y,isExpandable:M},ue),C);return a(jA.Fragment,{key:"row_".concat(D)},ye,ve)}},{key:"renderItemSelectionCell",value:function(o,i,u){var c=this,d=this.props.selection,g="_selection_column_".concat(o),O=u,S=d.selectable&&!d.selectable(i),I=d.selectableMessage&&d.selectableMessage(!S,i),R=function(M){if(M.target.checked)c.changeSelection([].concat(oTt(c.state.selection),[i]));else{var C=c.props.itemId;c.changeSelection(c.state.selection.reduce(function(T,D){return Kh(D,C)!==o&&T.push(D),T},[]))}};return a(vA,{key:g},a(bt,{token:"euiBasicTable.selectThisRow",default:"Select this row"},function(k){return a(Sh,{id:"".concat(c.tableId).concat(g,"-checkbox"),type:"inList",disabled:S,checked:O,onChange:R,title:I||k,"aria-label":I||k,"data-test-subj":"checkboxSelectRow-".concat(o)})}))}},{key:"renderItemActionsCell",value:function(o,i,u,c){var d=this,g=function(M){return d.state.selection.length===0&&(!M.enabled||M.enabled(i))},O=u.actions.filter(function(k){return!k.available||k.available(i)});if(O.length>2){var S=O.filter(function(k){return k.isPrimary});O=S.slice(0,2),O.push({name:"All actions",render:function(M){return a(fQ,{actions:u.actions,itemId:o,item:M,actionEnabled:g})}})}var I=a(w3e,{actions:O,itemId:o,item:i,actionEnabled:g}),R="record_actions_".concat(o,"_").concat(c);return a(yf,{showOnHover:!0,key:R,align:"right",textOnly:!1,hasActions:!0},I)}},{key:"renderItemFieldDataCell",value:function(o,i,u,c,d){var g=u.field,O=u.render,S=u.dataType,I="_data_column_".concat(g,"_").concat(o,"_").concat(c),R=O||this.getRendererForDataType(S),k=Dd(i,g),M=R(k,i);return this.renderItemCell(i,u,I,M,d)}},{key:"renderItemComputedCell",value:function(o,i,u,c){var d=u.render,g="_computed_column_".concat(o,"_").concat(c),O=d||this.getRendererForDataType(),S=O(i);return this.renderItemCell(i,u,g,S,!1)}},{key:"renderItemCell",value:function(o,i,u,c,d){var g=i,O=g.align,S=g.render,I=g.dataType,R=g.isExpander,k=g.textOnly,M=g.name,C=g.field,T=g.description,D=g.sortable,U=g.footer,G=g.mobileOptions,Y=_3e(g,nTt),K=O||this.getAlignForDataType(I),B=this.props.cellProps,ne=vTt(o,i,B);return a(yf,s0({key:u,align:K,isExpander:R,textOnly:k||!S,setScopeRow:d,mobileOptions:ma(ma({},G),{},{render:G&&G.render&&G.render(o),header:G&&G.header===!1?!1:M})},ne,Y),c)}},{key:"getRendererForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=vQ[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(j3e.join(", "),"]"));return i.render}},{key:"getAlignForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=vQ[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(j3e.join(", "),"]"));return i.align}},{key:"renderPaginationBar",value:function(){var o=this,i=this.props,u=i.error,c=i.pagination,d=i.tableCaption,g=i.onChange;if(!u&&c&&c.totalItemCount>0){if(!g)throw new Error(`The Basic Table is configured with pagination but [onChange] is + not configured. This callback must be implemented to handle pagination changes`);return a(bt,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:d}},function(O){return a(x3e,{pagination:c,onPageSizeChange:o.onPageSizeChange.bind(o),onPageChange:o.onPageChange.bind(o),"aria-controls":o.tableId,"aria-label":O})})}}}],[{key:"getDerivedStateFromProps",value:function(o,i){if(!o.selection)return{selection:[]};var u=o.itemId,c=i.selection.filter(function(d){return o.items.findIndex(function(g){return Kh(g,u)===Kh(d,u)})!==-1});return c.length!==i.selection.length?(o.selection.onSelectionChange&&o.selection.onSelectionChange(c),{selection:c}):null}}]),n}(jA.Component);Al(u0,"defaultProps",{responsive:!0,tableLayout:"fixed",noItemsMessage:a(bt,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});u0.propTypes={className:Fe.default.string,"aria-label":Fe.default.string,"data-test-subj":Fe.default.string,itemId:Fe.default.oneOfType([Fe.default.string.isRequired,Fe.default.number.isRequired,Fe.default.func.isRequired]),itemIdToExpandedRowMap:Fe.default.shape({}),items:Fe.default.arrayOf(Fe.default.any.isRequired),cellProps:Fe.default.oneOfType([Fe.default.any.isRequired,Fe.default.func.isRequired]),columns:Fe.default.arrayOf(Fe.default.oneOfType([Fe.default.shape({field:Fe.default.oneOfType([Fe.default.any.isRequired,Fe.default.any.isRequired]).isRequired,name:Fe.default.node.isRequired,description:Fe.default.string,dataType:Fe.default.oneOf(["auto","string","number","boolean","date"]),width:Fe.default.string,sortable:Fe.default.oneOfType([Fe.default.bool.isRequired,Fe.default.func.isRequired]),isExpander:Fe.default.bool,textOnly:Fe.default.bool,align:Fe.default.oneOf(["left","right","center"]),truncateText:Fe.default.bool,mobileOptions:Fe.default.shape({render:Fe.default.func}),render:Fe.default.func,footer:Fe.default.oneOfType([Fe.default.string.isRequired,Fe.default.element.isRequired,Fe.default.func.isRequired]),readOnly:Fe.default.bool,className:Fe.default.string,"aria-label":Fe.default.string,"data-test-subj":Fe.default.string}).isRequired,Fe.default.shape({render:Fe.default.func.isRequired,name:Fe.default.node,description:Fe.default.string,sortable:Fe.default.func,width:Fe.default.string,truncateText:Fe.default.bool,isExpander:Fe.default.bool,align:Fe.default.oneOf(["left","right","center"]),readOnly:Fe.default.bool,className:Fe.default.string,"aria-label":Fe.default.string,"data-test-subj":Fe.default.string}).isRequired,Fe.default.shape({actions:Fe.default.arrayOf(Fe.default.oneOfType([Fe.default.shape({type:Fe.default.oneOfType([Fe.default.oneOf(["button"]),Fe.default.oneOf(["icon"]).isRequired]),color:Fe.default.oneOfType([Fe.default.oneOfType([Fe.default.oneOf(["primary","danger","text","ghost","success","warning"]).isRequired,Fe.default.func.isRequired]),Fe.default.oneOfType([Fe.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]).isRequired,Fe.default.func.isRequired])]),name:Fe.default.oneOfType([Fe.default.node.isRequired,Fe.default.func.isRequired]).isRequired,description:Fe.default.string.isRequired,onClick:Fe.default.func,href:Fe.default.string,target:Fe.default.string,available:Fe.default.func,enabled:Fe.default.func,isPrimary:Fe.default.bool,"data-test-subj":Fe.default.string,icon:Fe.default.oneOfType([Fe.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Fe.default.func.isRequired])}).isRequired,Fe.default.shape({render:Fe.default.func.isRequired,available:Fe.default.func,enabled:Fe.default.func,isPrimary:Fe.default.bool}).isRequired]).isRequired).isRequired,name:Fe.default.node,description:Fe.default.string,width:Fe.default.string}).isRequired]).isRequired),error:Fe.default.string,tableCaption:Fe.default.string,rowHeader:Fe.default.string,hasActions:Fe.default.bool,isExpandable:Fe.default.bool,isSelectable:Fe.default.bool,loading:Fe.default.bool,noItemsMessage:Fe.default.node,onChange:Fe.default.func,pagination:Fe.default.oneOfType([Fe.default.oneOf([void 0]),Fe.default.shape({pageIndex:Fe.default.number.isRequired,pageSize:Fe.default.number.isRequired,totalItemCount:Fe.default.number.isRequired,pageSizeOptions:Fe.default.arrayOf(Fe.default.number.isRequired),showPerPageOptions:Fe.default.bool})]),responsive:Fe.default.bool,rowProps:Fe.default.oneOfType([Fe.default.any.isRequired,Fe.default.func.isRequired]),selection:Fe.default.shape({onSelectionChange:Fe.default.func,selectable:Fe.default.func,selectableMessage:Fe.default.func,initialSelected:Fe.default.arrayOf(Fe.default.any.isRequired)}),sorting:Fe.default.shape({sort:Fe.default.shape({field:Fe.default.any.isRequired,direction:Fe.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Fe.default.bool,enableAllColumns:Fe.default.bool,readOnly:Fe.default.bool}),tableLayout:Fe.default.oneOf(["fixed","auto"]),textOnly:Fe.default.bool};var du=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(r){var o=this,i=r||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(u){return u!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var c0=typeof window>"u";function uo(){}function C3e(e,t){return typeof e=="function"?e(t):e}function M8(e){return typeof e=="number"&&e>=0&&e!==1/0}function A8(e){return Array.isArray(e)?e:[e]}function EA(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Yh(e,t,n){return PA(e)?typeof t=="function"?hr({},n,{queryKey:e,queryFn:t}):hr({},t,{queryKey:e}):e}function mu(e,t,n){return PA(e)?[hr({},t,{queryKey:e}),n]:[e||{},t]}function bTt(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e??!t;return n?"active":"inactive"}function bQ(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,u=e.predicate,c=e.queryKey,d=e.stale;if(PA(c)){if(r){if(t.queryHash!==T8(c,t.options))return!1}else if(!R8(t.queryKey,c))return!1}var g=bTt(n,i);if(g==="none")return!1;if(g!=="all"){var O=t.isActive();if(g==="active"&&!O||g==="inactive"&&O)return!1}return!(typeof d=="boolean"&&t.isStale()!==d||typeof o=="boolean"&&t.isFetching()!==o||u&&!u(t))}function wQ(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(PA(i)){if(!t.options.mutationKey)return!1;if(n){if(wf(t.options.mutationKey)!==wf(i))return!1}else if(!R8(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function T8(e,t){var n=t?.queryKeyHashFn||wf;return n(e)}function wf(e){var t=A8(e);return wTt(t)}function wTt(e){return JSON.stringify(e,function(t,n){return yQ(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function R8(e,t){return A3e(A8(e),A8(t))}function A3e(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!A3e(e[n],t[n])}):!1}function Qh(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||yQ(e)&&yQ(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,u=n?[]:{},c=0,d=0;d"u")return!0;var n=t.prototype;return!(!k3e(n)||!n.hasOwnProperty("isPrototypeOf"))}function k3e(e){return Object.prototype.toString.call(e)==="[object Object]"}function PA(e){return typeof e=="string"||Array.isArray(e)}function T3e(e){return new Promise(function(t){setTimeout(t,e)})}function OQ(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function kA(){if(typeof AbortController=="function")return new AbortController}var OTt=function(e){ca(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!c0&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("visibilitychange",u,!1),window.addEventListener("focus",u,!1),function(){window.removeEventListener("visibilitychange",u),window.removeEventListener("focus",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(c){typeof c=="boolean"?u.setFocused(c):u.onFocus()})},n.setFocused=function(o){this.focused=o,o&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(o){o()})},n.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(du),Of=new OTt;var xTt=function(e){ca(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!c0&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("online",u,!1),window.addEventListener("offline",u,!1),function(){window.removeEventListener("online",u),window.removeEventListener("offline",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(c){typeof c=="boolean"?u.setOnline(c):u.onOnline()})},n.setOnline=function(o){this.online=o,o&&this.onOnline()},n.onOnline=function(){this.listeners.forEach(function(o){o()})},n.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(du),Zh=new xTt;function _Tt(e){return Math.min(1e3*Math.pow(2,e),3e4)}function z8(e){return typeof e?.cancel=="function"}var R3e=function(t){this.revert=t?.revert,this.silent=t?.silent};function eg(e){return e instanceof R3e}var CA=function(t){var n=this,r=!1,o,i,u,c;this.abort=t.abort,this.cancel=function(I){return o?.(I)},this.cancelRetry=function(){r=!0},this.continueRetry=function(){r=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(I,R){u=I,c=R});var d=function(R){n.isResolved||(n.isResolved=!0,t.onSuccess==null||t.onSuccess(R),i?.(),u(R))},g=function(R){n.isResolved||(n.isResolved=!0,t.onError==null||t.onError(R),i?.(),c(R))},O=function(){return new Promise(function(R){i=R,n.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,n.isPaused=!1,t.onContinue==null||t.onContinue()})},S=function I(){if(!n.isResolved){var R;try{R=t.fn()}catch(k){R=Promise.reject(k)}o=function(M){if(!n.isResolved&&(g(new R3e(M)),n.abort==null||n.abort(),z8(R)))try{R.cancel()}catch{}},n.isTransportCancelable=z8(R),Promise.resolve(R).then(d).catch(function(k){var M,C;if(!n.isResolved){var T=(M=t.retry)!=null?M:3,D=(C=t.retryDelay)!=null?C:_Tt,U=typeof D=="function"?D(n.failureCount,k):D,G=T===!0||typeof T=="number"&&n.failureCount"u"&&(c.exact=!0),this.queries.find(function(d){return bQ(c,d)})},n.findAll=function(o,i){var u=mu(o,i),c=u[0];return Object.keys(c).length>0?this.queries.filter(function(d){return bQ(c,d)}):this.queries},n.notify=function(o){var i=this;Kr.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){var o=this;Kr.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},n.onOnline=function(){var o=this;Kr.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(du);var N3e=function(){function e(n){this.options=hr({},n.defaultOptions,n.options),this.mutationId=n.mutationId,this.mutationCache=n.mutationCache,this.observers=[],this.state=n.state||ITt(),this.meta=n.meta}var t=e.prototype;return t.setState=function(r){this.dispatch({type:"setState",state:r})},t.addObserver=function(r){this.observers.indexOf(r)===-1&&this.observers.push(r)},t.removeObserver=function(r){this.observers=this.observers.filter(function(o){return o!==r})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(uo).catch(uo)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var r=this,o,i=this.state.status==="loading",u=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),u=u.then(function(){r.mutationCache.config.onMutate==null||r.mutationCache.config.onMutate(r.state.variables,r)}).then(function(){return r.options.onMutate==null?void 0:r.options.onMutate(r.state.variables)}).then(function(c){c!==r.state.context&&r.dispatch({type:"loading",context:c,variables:r.state.variables})})),u.then(function(){return r.executeMutation()}).then(function(c){o=c,r.mutationCache.config.onSuccess==null||r.mutationCache.config.onSuccess(o,r.state.variables,r.state.context,r)}).then(function(){return r.options.onSuccess==null?void 0:r.options.onSuccess(o,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(o,null,r.state.variables,r.state.context)}).then(function(){return r.dispatch({type:"success",data:o}),o}).catch(function(c){return r.mutationCache.config.onError==null||r.mutationCache.config.onError(c,r.state.variables,r.state.context,r),p0().error(c),Promise.resolve().then(function(){return r.options.onError==null?void 0:r.options.onError(c,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(void 0,c,r.state.variables,r.state.context)}).then(function(){throw r.dispatch({type:"error",error:c}),c})})},t.executeMutation=function(){var r=this,o;return this.retryer=new CA({fn:function(){return r.options.mutationFn?r.options.mutationFn(r.state.variables):Promise.reject("No mutationFn found")},onFail:function(){r.dispatch({type:"failed"})},onPause:function(){r.dispatch({type:"pause"})},onContinue:function(){r.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(r){var o=this;this.state=jTt(this.state,r),Kr.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(r)}),o.mutationCache.notify(o)})},e}();function ITt(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function jTt(e,t){switch(t.type){case"failed":return hr({},e,{failureCount:e.failureCount+1});case"pause":return hr({},e,{isPaused:!0});case"continue":return hr({},e,{isPaused:!1});case"loading":return hr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return hr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return hr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return hr({},e,t.state);default:return e}}var F3e=function(e){ca(t,e);function t(r){var o;return o=e.call(this)||this,o.config=r||{},o.mutations=[],o.mutationId=0,o}var n=t.prototype;return n.build=function(o,i,u){var c=new N3e({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:u,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(c),c},n.add=function(o){this.mutations.push(o),this.notify(o)},n.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},n.clear=function(){var o=this;Kr.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},n.getAll=function(){return this.mutations},n.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return wQ(o,i)})},n.findAll=function(o){return this.mutations.filter(function(i){return wQ(o,i)})},n.notify=function(o){var i=this;Kr.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){this.resumePausedMutations()},n.onOnline=function(){this.resumePausedMutations()},n.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return Kr.batch(function(){return o.reduce(function(i,u){return i.then(function(){return u.continue().catch(uo)})},Promise.resolve())})},t}(du);function B3e(){return{onFetch:function(t){t.fetchFn=function(){var n,r,o,i,u,c,d=(n=t.fetchOptions)==null||(r=n.meta)==null?void 0:r.refetchPage,g=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,O=g?.pageParam,S=g?.direction==="forward",I=g?.direction==="backward",R=((u=t.state.data)==null?void 0:u.pages)||[],k=((c=t.state.data)==null?void 0:c.pageParams)||[],M=kA(),C=M?.signal,T=k,D=!1,U=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},G=function(be,ze,He,Qe){return T=Qe?[ze].concat(T):[].concat(T,[ze]),Qe?[He].concat(be):[].concat(be,[He])},Y=function(be,ze,He,Qe){if(D)return Promise.reject("Cancelled");if(typeof He>"u"&&!ze&&be.length)return Promise.resolve(be);var Be={queryKey:t.queryKey,signal:C,pageParam:He,meta:t.meta},Ze=U(Be),lt=Promise.resolve(Ze).then(function(Ht){return G(be,He,Ht,Qe)});if(z8(Ze)){var Ke=lt;Ke.cancel=Ze.cancel}return lt},K;if(!R.length)K=Y([]);else if(S){var B=typeof O<"u",ne=B?O:W3e(t.options,R);K=Y(R,B,ne)}else if(I){var pe=typeof O<"u",ve=pe?O:ETt(t.options,R);K=Y(R,pe,ve,!0)}else(function(){T=[];var ye=typeof t.options.getNextPageParam>"u",be=d&&R[0]?d(R[0],0,R):!0;K=be?Y([],ye,k[0]):Promise.resolve(G([],k[0],R[0]));for(var ze=function(Be){K=K.then(function(Ze){var lt=d&&R[Be]?d(R[Be],Be,R):!0;if(lt){var Ke=ye?k[Be]:W3e(t.options,Ze);return Y(Ze,ye,Ke)}return Promise.resolve(G(Ze,k[Be],R[Be]))})},He=1;He"u"&&(O.revert=!0);var S=Kr.batch(function(){return u.queryCache.findAll(d).map(function(I){return I.cancel(O)})});return Promise.all(S).then(uo).catch(uo)},t.invalidateQueries=function(r,o,i){var u,c,d,g=this,O=mu(r,o,i),S=O[0],I=O[1],R=hr({},S,{active:(u=(c=S.refetchActive)!=null?c:S.active)!=null?u:!0,inactive:(d=S.refetchInactive)!=null?d:!1});return Kr.batch(function(){return g.queryCache.findAll(S).forEach(function(k){k.invalidate()}),g.refetchQueries(R,I)})},t.refetchQueries=function(r,o,i){var u=this,c=mu(r,o,i),d=c[0],g=c[1],O=Kr.batch(function(){return u.queryCache.findAll(d).map(function(I){return I.fetch(void 0,hr({},g,{meta:{refetchPage:d?.refetchPage}}))})}),S=Promise.all(O).then(uo);return g?.throwOnError||(S=S.catch(uo)),S},t.fetchQuery=function(r,o,i){var u=Yh(r,o,i),c=this.defaultQueryOptions(u);typeof c.retry>"u"&&(c.retry=!1);var d=this.queryCache.build(this,c);return d.isStaleByTime(c.staleTime)?d.fetch(c):Promise.resolve(d.state.data)},t.prefetchQuery=function(r,o,i){return this.fetchQuery(r,o,i).then(uo).catch(uo)},t.fetchInfiniteQuery=function(r,o,i){var u=Yh(r,o,i);return u.behavior=B3e(),this.fetchQuery(u)},t.prefetchInfiniteQuery=function(r,o,i){return this.fetchInfiniteQuery(r,o,i).then(uo).catch(uo)},t.cancelMutations=function(){var r=this,o=Kr.batch(function(){return r.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(uo).catch(uo)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(r){return this.mutationCache.build(this,r).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(r){this.defaultOptions=r},t.setQueryDefaults=function(r,o){var i=this.queryDefaults.find(function(u){return wf(r)===wf(u.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:r,defaultOptions:o})},t.getQueryDefaults=function(r){var o;return r?(o=this.queryDefaults.find(function(i){return R8(r,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(r,o){var i=this.mutationDefaults.find(function(u){return wf(r)===wf(u.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:r,defaultOptions:o})},t.getMutationDefaults=function(r){var o;return r?(o=this.mutationDefaults.find(function(i){return R8(r,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(r){if(r?._defaulted)return r;var o=hr({},this.defaultOptions.queries,this.getQueryDefaults(r?.queryKey),r,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=T8(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(r){return this.defaultQueryOptions(r)},t.defaultMutationOptions=function(r){return r?._defaulted?r:hr({},this.defaultOptions.mutations,this.getMutationDefaults(r?.mutationKey),r,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var SQ=function(e){ca(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var n=t.prototype;return n.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},n.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),H3e(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},n.onUnsubscribe=function(){this.listeners.length||this.destroy()},n.shouldFetchOnReconnect=function(){return _Q(this.currentQuery,this.options,this.options.refetchOnReconnect)},n.shouldFetchOnWindowFocus=function(){return _Q(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},n.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},n.setOptions=function(o,i){var u=this.options,c=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=u.queryKey),this.updateQuery();var d=this.hasListeners();d&&V3e(this.currentQuery,c,this.options,u)&&this.executeFetch(),this.updateResult(i),d&&(this.currentQuery!==c||this.options.enabled!==u.enabled||this.options.staleTime!==u.staleTime)&&this.updateStaleTimeout();var g=this.computeRefetchInterval();d&&(this.currentQuery!==c||this.options.enabled!==u.enabled||g!==this.currentRefetchInterval)&&this.updateRefetchInterval(g)},n.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),u=this.client.getQueryCache().build(this.client,i);return this.createResult(u,i)},n.getCurrentResult=function(){return this.currentResult},n.trackResult=function(o,i){var u=this,c={},d=function(O){u.trackedProps.includes(O)||u.trackedProps.push(O)};return Object.keys(o).forEach(function(g){Object.defineProperty(c,g,{configurable:!1,enumerable:!0,get:function(){return d(g),o[g]}})}),(i.useErrorBoundary||i.suspense)&&d("error"),c},n.getNextResult=function(o){var i=this;return new Promise(function(u,c){var d=i.subscribe(function(g){g.isFetching||(d(),g.isError&&o?.throwOnError?c(g.error):u(g))})})},n.getCurrentQuery=function(){return this.currentQuery},n.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},n.refetch=function(o){return this.fetch(hr({},o,{meta:{refetchPage:o?.refetchPage}}))},n.fetchOptimistic=function(o){var i=this,u=this.client.defaultQueryObserverOptions(o),c=this.client.getQueryCache().build(this.client,u);return c.fetch().then(function(){return i.createResult(c,u)})},n.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},n.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(uo)),i},n.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(c0||this.currentResult.isStale||!M8(this.options.staleTime))){var i=EA(this.currentResult.dataUpdatedAt,this.options.staleTime),u=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},u)}},n.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},n.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(c0||this.options.enabled===!1||!M8(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||Of.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},n.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},n.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},n.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},n.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},n.createResult=function(o,i){var u=this.currentQuery,c=this.options,d=this.currentResult,g=this.currentResultState,O=this.currentResultOptions,S=o!==u,I=S?o.state:this.currentQueryInitialState,R=S?this.currentResult:this.previousQueryResult,k=o.state,M=k.dataUpdatedAt,C=k.error,T=k.errorUpdatedAt,D=k.isFetching,U=k.status,G=!1,Y=!1,K;if(i.optimisticResults){var B=this.hasListeners(),ne=!B&&H3e(o,i),pe=B&&V3e(o,u,i,c);(ne||pe)&&(D=!0,M||(U="loading"))}if(i.keepPreviousData&&!k.dataUpdateCount&&R?.isSuccess&&U!=="error")K=R.data,M=R.dataUpdatedAt,U=R.status,G=!0;else if(i.select&&typeof k.data<"u")if(d&&k.data===g?.data&&i.select===this.selectFn)K=this.selectResult;else try{this.selectFn=i.select,K=i.select(k.data),i.structuralSharing!==!1&&(K=Qh(d?.data,K)),this.selectResult=K,this.selectError=null}catch(ue){p0().error(ue),this.selectError=ue}else K=k.data;if(typeof i.placeholderData<"u"&&typeof K>"u"&&(U==="loading"||U==="idle")){var ve;if(d?.isPlaceholderData&&i.placeholderData===O?.placeholderData)ve=d.data;else if(ve=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof ve<"u")try{ve=i.select(ve),i.structuralSharing!==!1&&(ve=Qh(d?.data,ve)),this.selectError=null}catch(ue){p0().error(ue),this.selectError=ue}typeof ve<"u"&&(U="success",K=ve,Y=!0)}this.selectError&&(C=this.selectError,K=this.selectResult,T=Date.now(),U="error");var de={status:U,isLoading:U==="loading",isSuccess:U==="success",isError:U==="error",isIdle:U==="idle",data:K,dataUpdatedAt:M,error:C,errorUpdatedAt:T,failureCount:k.fetchFailureCount,errorUpdateCount:k.errorUpdateCount,isFetched:k.dataUpdateCount>0||k.errorUpdateCount>0,isFetchedAfterMount:k.dataUpdateCount>I.dataUpdateCount||k.errorUpdateCount>I.errorUpdateCount,isFetching:D,isRefetching:D&&U!=="loading",isLoadingError:U==="error"&&k.dataUpdatedAt===0,isPlaceholderData:Y,isPreviousData:G,isRefetchError:U==="error"&&k.dataUpdatedAt!==0,isStale:IQ(o,i),refetch:this.refetch,remove:this.remove};return de},n.shouldNotifyListeners=function(o,i){if(!i)return!0;var u=this.options,c=u.notifyOnChangeProps,d=u.notifyOnChangePropsExclusions;if(!c&&!d||c==="tracked"&&!this.trackedProps.length)return!0;var g=c==="tracked"?this.trackedProps:c;return Object.keys(o).some(function(O){var S=O,I=o[S]!==i[S],R=g?.some(function(M){return M===O}),k=d?.some(function(M){return M===O});return I&&!k&&(!g||R)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!M3e(this.currentResult,i)){var u={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(u.listeners=!0),this.notify(hr({},u,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!eg(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;Kr.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(u){u(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(du);function PTt(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function H3e(e,t){return PTt(e,t)||e.state.dataUpdatedAt>0&&_Q(e,t,t.refetchOnMount)}function _Q(e,t,n){if(t.enabled!==!1){var r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&IQ(e,t)}return!1}function V3e(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&IQ(e,n)}function IQ(e,t){return e.isStaleByTime(t.staleTime)}var q3e=E(cn()),U3e=q3e.default.unstable_batchedUpdates;Kr.setBatchNotifyFunction(U3e);var $3e=console;xQ($3e);var xf=E(L()),J3e=xf.default.createContext(void 0),G3e=xf.default.createContext(!1);function X3e(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=J3e),window.ReactQueryClientContext):J3e}var jQ=function(){var t=xf.default.useContext(X3e(xf.default.useContext(G3e)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},rr=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;xf.default.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var u=X3e(o);return xf.default.createElement(G3e.Provider,{value:o},xf.default.createElement(u.Provider,{value:n},i))};var EQ=E(L());function kTt(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var CTt=EQ.default.createContext(kTt()),K3e=function(){return EQ.default.useContext(CTt)};function Y3e(e,t,n){return typeof t=="function"?t.apply(void 0,n):typeof t=="boolean"?t:!!e}var tg=E(L());function Q3e(e,t){var n=tg.default.useRef(!1),r=tg.default.useState(0),o=r[1],i=jQ(),u=K3e(),c=i.defaultQueryObserverOptions(e);c.optimisticResults=!0,c.onError&&(c.onError=Kr.batchCalls(c.onError)),c.onSuccess&&(c.onSuccess=Kr.batchCalls(c.onSuccess)),c.onSettled&&(c.onSettled=Kr.batchCalls(c.onSettled)),c.suspense&&(typeof c.staleTime!="number"&&(c.staleTime=1e3),c.cacheTime===0&&(c.cacheTime=1)),(c.suspense||c.useErrorBoundary)&&(u.isReset()||(c.retryOnMount=!1));var d=tg.default.useState(function(){return new t(i,c)}),g=d[0],O=g.getOptimisticResult(c);if(tg.default.useEffect(function(){n.current=!0,u.clearReset();var S=g.subscribe(Kr.batchCalls(function(){n.current&&o(function(I){return I+1})}));return g.updateResult(),function(){n.current=!1,S()}},[u,g]),tg.default.useEffect(function(){g.setOptions(c,{listeners:!1})},[c,g]),c.suspense&&O.isLoading)throw g.fetchOptimistic(c).then(function(S){var I=S.data;c.onSuccess==null||c.onSuccess(I),c.onSettled==null||c.onSettled(I,null)}).catch(function(S){u.clearReset(),c.onError==null||c.onError(S),c.onSettled==null||c.onSettled(void 0,S)});if(O.isError&&!u.isReset()&&!O.isFetching&&Y3e(c.suspense,c.useErrorBoundary,[O.error,g.getCurrentQuery()]))throw O.error;return c.notifyOnChangeProps==="tracked"&&(O=g.trackResult(O,c)),O}function dr(e,t,n){var r=Yh(e,t,n);return Q3e(r,SQ)}var _f=E(L());function f0(e){return _f.default.createElement(_f.default.Fragment,null,_f.default.createElement("span",null,_f.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},_f.default.createElement(Pi,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",_f.default.createElement(Nt,{type:"arrowRight"}),"\xA0",_f.default.createElement(Pi,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function e5e(e){let{api:t,parameter:n,hasShortSelectedLabel:r,allowCustomTerms:o,selectionChangedEvent:i,preselected:u,placeholder:c,singleSelection:d,singleSuggestionRow:g,ts4nfdiGateway:O=!1,showApiSource:S=!0,...I}=e,R=new pr(t),k=Zu(),M=R1(),[C,T]=(0,Nn.useState)(""),[D,U]=(0,Nn.useState)([]),[G,Y]=(0,Nn.useState)([]),K=(ue,ye)=>{let{label:be,value:ze}=ue,He=M.indexOf(ze.type==="class"?M[5]:ze.type==="individual"?M[3]:ze.type==="property"?M[1]:""),Qe=k[He];if(o&&ze.iri=="")return be;let Be=ze.type==="ontology"?"Prefix: "+ze.ontology_name:"Prefix > Short form: "+ze.ontology_name+" > "+ze.short_form,Ze=`Type: ${ze.type} -Label: `+me.label+` +Label: ${ze.label} -Prefix: `+me.ontology_name+` +${Be}`;ze.description!=null&&(Ze+=` -Description: `+me.description:Ge="Type: "+me.type+` +Description: ${ze.description}`),S&&ze.source_url&&ze.source_url!==""&&(Ze+=` -Label: `+me.label+` +Source: `+ze.source,Ze+=` -Prefix > Short form: `+me.ontology_name+" > "+me.short_form+` - -Description: `+me.description:me.type==="ontology"?Ge="Type: "+me.type+` - -Label: `+me.label+` - -Prefix: `+me.ontology_name:Ge="type: "+me.type+` - -Label: `+me.label+` - -Prefix > Short form: `+me.ontology_name+" > "+me.short_form;let Be=()=>Hn.default.createElement(w8,{title:Ge,color:$e},Hn.default.createElement("span",null,Hn.default.createElement(ac,{search:ue},me.label),Hn.default.createElement("br",null),me.description)),et=()=>Hn.default.createElement("span",{style:{height:"200px"}},Hn.default.createElement(w8,{title:Ge,color:$e},Hn.default.createElement("span",null,Hn.default.createElement(ac,{search:ue},me.label),"\xA0\xA0\xA0\xA0\xA0",Hn.default.createElement(u0,{ontologyName:me.ontology_name,shortForm:me.short_form,colorFirst:"primary",colorSecond:"success"}),!g&&me.description?Hn.default.createElement(Hn.default.Fragment,null,Hn.default.createElement("br",null),me.description.substring(0,40)+"..."):"")));return me.type==="ontology"?Be():et()},{isLoading:K}=dr(["onMount",u],async()=>{let fe=[],ue=[...new Set(u)].filter(xe=>o&&xe.label||xe.iri);if(ue.length>0){d&&(ue=[ue[0]]);for(let xe of ue)xe&&xe.iri&&xe.iri.startsWith("http")?await I.getSelectData({query:xe.iri},void 0,void 0,n,O).then(me=>{me&&(me.properties.map(We=>{xe.iri===We.getIri()&&fe.push({label:r?We.getLabel():ne(We),key:We.getIri(),value:{iri:We.getIri(),label:We.getLabel(),ontology_name:We.getOntologyId(),type:We.getType(),short_form:We.getShortForm(),description:We.getDescription()}})}),d&&fe.length>1&&(fe=[fe[0]]))}):xe&&xe.label&&o&&fe.push({label:xe.label,key:xe.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}});N(fe),X(fe)}}),{isLoading:H}=dr(["onSearchChange",A],async()=>{if(A.length>0)return I.getSelectData({query:A},void 0,void 0,n,O).then(fe=>{fe&&N(fe.properties.map(ue=>({label:r?ue.getLabel():ne(ue),key:ue.getIri(),value:{iri:ue.getIri(),label:ue.getLabel(),ontology_name:ue.getOntologyId(),type:ue.getType(),short_form:ue.getShortForm(),description:ue.getDescription()}})))})});(0,Hn.useEffect)(()=>{i(U.map(fe=>o&&fe.value.iri==""?{iri:"",label:fe.label,ontology_name:"",type:"",short_form:fe.value.short_form,description:fe.value.description}:fe.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}:{iri:fe.value.iri,label:fe.value.label,ontology_name:fe.value.ontology_name,type:fe.value.type,short_form:fe.value.short_form,description:fe.value.description}))},[U]);function ne(fe){return fe.label+" ("+fe.ontology_name.toUpperCase()+" "+fe.short_form+")"}function pe(fe){X(fe)}function ye(fe){let ue={label:fe,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}};N([...T,ue]),X(d?[ue]:[...U,ue])}return Hn.default.createElement(Zd,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...S,async:!0,isLoading:H||K,singleSelection:d?{asPlainText:!0}:!1,placeholder:c||"Search for a Concept",options:T,selectedOptions:U,onSearchChange:M,onChange:pe,renderOption:Y,onCreateOption:o?ye:void 0,rowHeight:g?30:50})}function $3e(e,t,n){q3e.default.render(OTt(e),t,n)}function OTt(e){let t=new tr;return Hn.default.createElement(er,{colorMode:"light"},Hn.default.createElement(rr,{client:t},Hn.default.createElement(U3e,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms,ts4nfdiGateway:e.ts4nfdiGateway,singleSuggestionRow:e.singleSuggestionRow})))}var Ao=E(D());var J3e=E(cn());function G3e(e){let{api:t,parameter:n,...r}=e,o=new pr(t),{data:i,isLoading:u,isError:c,dataUpdatedAt:d}=dr(["ontologiesData",t,n],async()=>o.getOntologiesData(e.parameter));return Ao.default.createElement(Ao.default.Fragment,null,Ao.default.createElement(fa,{title:"Data Content",description:d?`Updated ${new Date(d).toLocaleString()}`:"",layout:"horizontal"},Ao.default.createElement(Pt,{...r},c&&Ao.default.createElement(Pt,null,"No data content available"),u?Ao.default.createElement(Zt,{size:"s"}):Ao.default.createElement("ul",null,i?.getTotalOntologies()?Ao.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):Ao.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?Ao.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):Ao.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?Ao.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):Ao.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?Ao.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):Ao.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function X3e(e,t,n){J3e.default.render(xTt(e),t,n)}function xTt(e){let t=new tr;return Ao.default.createElement(er,{colorMode:"light"},Ao.default.createElement(rr,{client:t},Ao.default.createElement(G3e,{api:e.api,parameter:e.parameter})))}var Ve=E(D());var Re=E(D());var z8=!0;function kA(e){return Re.default.createElement(FP,{type:"iInCircle",color:"subdued",content:e})}function _Tt(e,t){let n=Object.keys(t).map(r=>{let o=e.getLinkedEntities().getLabelForIri(r)||r;return o?"*"+t[r]+" ("+o+")":""}).join(` -`);return kA(n)}function $i(e,t,n,r=z8,o){let i=t.getLabelForIri(n)||n.split("/").pop()||n,u=t.get(n),c=e.getOntologyId();if(e.getType()!=="ontology"&&n===e?.getIri())return Re.default.createElement("span",{className:"highlight"},e.getLabel());if(!u)return n.startsWith("http")?Re.default.createElement("a",{className:"clickable",href:n},i):Re.default.createElement("span",null,i);let d=u.definedBy?u.definedBy.filter(O=>O!==c):[],g=u.type?dj(u.type):e.getType();return d.length===1?u.hasLocalDefinition?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(c,g,{iri:n,label:i})}},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(d[0],g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},d[0].toUpperCase()))):Re.default.createElement(Re.default.Fragment,null)):Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d[0],g,{iri:n,label:i})}},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(d[0],g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},d[0].toUpperCase()))):Re.default.createElement(Re.default.Fragment,null)):d.length>1?u.hasLocalDefinition?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(c,g,{iri:n,label:i})}},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",d.map(O=>Re.default.createElement("button",{className:"no-decoration",key:Ut(),onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(O,g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},O.toUpperCase())))):Re.default.createElement(Re.default.Fragment,null)):Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("a",{className:"clickable",href:n},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",key:Ut(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},Re.default.createElement(Wt,{type:"search",size:"s"}),"\xA0",d.length,"\xA0","ontologies"))):Re.default.createElement(Re.default.Fragment,null)):u.hasLocalDefinition?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(c,g,{iri:n,label:i})}},i)):parseInt(u.numAppearsIn)>0?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("a",{className:"clickable",href:n},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",key:Ut(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},Re.default.createElement(Wt,{type:"search",size:"s"}),"\xA0",u.numAppearsIn,"\xA0",parseInt(u.numAppearsIn)>1?"ontologies":"ontology"))):Re.default.createElement(Re.default.Fragment,null)):Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("a",{className:"clickable",href:u.url||n},i))}function Rr(e,t,n,r=z8,o){let i=Re.default.createElement(Re.default.Fragment,null);if(t=t.mergeWith(n.linkedEntities),typeof n=="string")i=$i(e,t,n,r,o);else if(typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1)i=ha(e,ft.fromJson(n)[0],r,o);else{let u=n["http://www.w3.org/2002/07/owl#someValuesFrom"],c=n["http://www.w3.org/2002/07/owl#allValuesFrom"],d=nt(n["http://www.w3.org/2002/07/owl#intersectionOf"]),g=nt(n["http://www.w3.org/2002/07/owl#unionOf"]),O=n["http://www.w3.org/2002/07/owl#hasValue"],S=n["http://www.w3.org/2002/07/owl#minCardinality"]||n["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],I=n["http://www.w3.org/2002/07/owl#maxCardinality"]||n["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],R=n["http://www.w3.org/2002/07/owl#cardinality"]||n["http://www.w3.org/2002/07/owl#qualifiedCardinality"],k=n["http://www.w3.org/2002/07/owl#hasSelf"],A=n["http://www.w3.org/2002/07/owl#complementOf"],M=nt(n["http://www.w3.org/2002/07/owl#oneOf"]),T=n["http://www.w3.org/2002/07/owl#inverseOf"],N=n["http://www.w3.org/2002/07/owl#onProperty"],U=n["http://www.w3.org/2002/07/owl#onDatatype"];if(U){let X=[Rr(e,t,U,r,o)],Y=nt(n["http://www.w3.org/2002/07/owl#withRestrictions"]);if(Y.length>0){X.push(Re.default.createElement(Re.default.Fragment,null,"["));let K=!0;for(let H of Y){K?K=!1:X.push(Re.default.createElement(Re.default.Fragment,null,",\xA0"));let ne=H["http://www.w3.org/2001/XMLSchema#minExclusive"],pe=H["http://www.w3.org/2001/XMLSchema#minInclusive"],ye=H["http://www.w3.org/2001/XMLSchema#maxExclusive"],fe=H["http://www.w3.org/2001/XMLSchema#maxInclusive"];ne?X.push(Re.default.createElement(Re.default.Fragment,null,"> ",ne)):pe?X.push(Re.default.createElement(Re.default.Fragment,null,"\u2265 ",pe)):ye?X.push(Re.default.createElement(Re.default.Fragment,null,"< ",ye)):fe&&X.push(Re.default.createElement(Re.default.Fragment,null,"\u2264 ",fe))}X.push(Re.default.createElement(Re.default.Fragment,null,"]"))}i=Re.default.createElement(Re.default.Fragment,null,X.map(K=>Re.default.createElement("span",{key:Ut()},K)))}else if(u)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," some "),Rr(e,t,nt(u)[0],r,o));else if(c)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," only "),Rr(e,t,nt(c)[0],r,o));else if(d.length>0){let X=[Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"(")];for(let Y of d)X.length>1&&X.push(Re.default.createElement("i",null," and ")),X.push(Rr(e,t,Y,r,o));X.push(Re.default.createElement("span",{className:"text-neutral-default"},")")),i=Re.default.createElement("span",null,X.map(Y=>Re.default.createElement("span",{key:Ut()},Y)))}else if(g.length>0){let X=[Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"(")];for(let Y of g)X.length>1&&X.push(Re.default.createElement("i",null," or ")),X.push(Rr(e,t,Y,r,o));X.push(Re.default.createElement("span",{className:"text-neutral-default"},")")),i=Re.default.createElement("span",null,X.map(Y=>Re.default.createElement("span",{key:Ut()},Y)))}else if(O)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," value "),Rr(e,t,nt(O)[0],r,o));else if(S)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," min "),Rr(e,t,nt(S)[0],r,o));else if(I)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," max "),Rr(e,t,nt(I)[0],r,o));else if(R)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," exactly "),Rr(e,t,nt(R)[0],r,o));else if(k)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,N,r,o),Re.default.createElement("i",{style:{color:"purple"}}," Self "),Rr(e,t,nt(k)[0],r,o));else if(A)i=Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("i",null,"not "),Rr(e,t,nt(A)[0],r,o));else if(M.length>0){let X=[Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"{")];for(let Y of M)X.length>1&&X.push(Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},",\xA0")),X.push(Rr(e,t,Y,r,o));X.push(Re.default.createElement("span",{className:"text-neutral-default"},"}")),i=Re.default.createElement("span",null,X.map(Y=>Re.default.createElement("span",{key:Ut()},Y)))}else T&&(i=Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("i",{style:{color:"purple"}},"inverse "),Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"("),Rr(e,t,T,r,o),Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},")")))}return i}function eg(e,t,n,r=z8,o){return Re.default.createElement(Re.default.Fragment,null,n.length===1?Re.default.createElement("p",null,Rr(e,e.getLinkedEntities(),n[0],r,o)):Re.default.createElement("ul",null,n.map(i=>Re.default.createElement("li",{key:Ut()},Rr(e,e.getLinkedEntities(),i,r,o)))))}function K3e(e,t,n,r=z8,o){let i=[];if(n)for(let g of Object.keys(n.linkedEntities))for(let O=t.indexOf(g,0);O!==-1;O=t.indexOf(g,O))i.push({start:O,end:O+g.length,link:$i(e,n,g,r,o)}),O+=g.length;let u=/[A-z]+:\/\/[^\s]+/g;for(let g=u.exec(t);g;g=u.exec(t)){let O=g[0];i.push({start:g.index,end:g.index+O.length,link:Re.default.createElement("span",{key:Ut()},Re.default.createElement("a",{className:"clickable",href:O},O))})}i.sort((g,O)=>g.start-O.start);e:for(let g=0;g=I.start&&I.end>=S.start){S.end-S.startR.getEntityObject(n,i,r,u,d));function U(ue){return Ve.default.createElement(Ve.default.Fragment,null,ue.getLabel()&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Label:"),ue.getLabel()),Ve.default.createElement(so,null)))}function X(ue){return Ve.default.createElement(Ve.default.Fragment,null,ue.getSynonyms().length>0&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Synonyms:"),ue.getSynonyms().length>1?Ve.default.createElement("ul",null,ue.getSynonyms().map(xe=>Ve.default.createElement("li",{key:Ut(),id:xe.value},ha(ue,xe,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Ve.default.createElement("p",null,ha(ue,ue.getSynonyms()[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function Y(ue){let xe=ue.getHasKey();return Ve.default.createElement(Ve.default.Fragment,null,xe.length>0&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Has Key:"),xe.length>1?Ve.default.createElement("ul",null,xe.map(me=>Ve.default.createElement("li",{key:Ut()},Rr(ue,ue.getLinkedEntities(),me,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Ve.default.createElement("p",null,Rr(ue,ue.getLinkedEntities(),xe[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function K(ue){return Ve.default.createElement(Ve.default.Fragment,null,ue.getSubsets().length>0&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"In Subsets:"),ue.getSubsets().length>1?Ve.default.createElement("ul",null,ue.getSubsets().map(xe=>Ve.default.createElement("li",{key:Ut(),id:xe+Ut()},$i(ue,ue.getLinkedEntities(),xe,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Ve.default.createElement("p",null,$i(ue,ue.getLinkedEntities(),ue.getSubsets()[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function H(ue){let xe=ue.getRdfTypes().map(me=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[me]).filter(me=>!!me);return Ve.default.createElement(Ve.default.Fragment,null,xe.length>0&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Characteristics:"),xe.length>1?Ve.default.createElement("ul",null,xe.map(me=>Ve.default.createElement("li",{key:Ut()},me)).sort()):Ve.default.createElement("p",null,xe[0]))))}function ne(ue){let xe=ue.getDomain();return Ve.default.createElement(Ve.default.Fragment,null,xe.length>0&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Domain:"),xe.length>1?Ve.default.createElement("ul",null,xe.map(me=>Ve.default.createElement("li",{key:Ut()},Rr(ue,ue.getLinkedEntities(),me,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Ve.default.createElement("p",null,Rr(ue,ue.getLinkedEntities(),xe[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function pe(ue){let xe=ue.getRange();return Ve.default.createElement(Ve.default.Fragment,null,xe.length>0&&Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Range:"),xe.length>1?Ve.default.createElement("ul",null,xe.map(me=>Ve.default.createElement("li",{key:Ut()},Rr(ue,ue.getLinkedEntities(),me,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Ve.default.createElement("p",null,Rr(ue,ue.getLinkedEntities(),xe[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}function ye(ue){let xe=Object.keys(ue.properties),me=xe.filter(Be=>Be.startsWith("negativePropertyAssertion+")),We=xe.filter(Be=>ue.getLinkedEntities().get(Be)&&ue.getLinkedEntities().get(Be)?.type.indexOf("objectProperty")!==-1),$e=xe.filter(Be=>ue.getLinkedEntities().get(Be)&&ue.getLinkedEntities().get(Be)?.type.indexOf("dataProperty")!==-1),Ge=[];for(let Be of We){let et=nt(ue.properties[Be]);for(let ut of et)Ge.push(Ve.default.createElement(Ve.default.Fragment,null,Rr(ue,ue.getLinkedEntities(),Be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof ut=="string"&&ut.includes("http")?Ve.default.createElement(Ve.default.Fragment,null,"\xA0",Ve.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),ut,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):kA(typeof ut=="string"?ut:typeof ut=="object"&&!Array.isArray(ut)&&ut.value?JSON.stringify(ut.value):JSON.stringify(ut))))}for(let Be of $e){let et=nt(ue.properties[Be]);for(let ut of et)Ge.push(Ve.default.createElement(Ve.default.Fragment,null,Rr(ue,ue.getLinkedEntities(),Be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),Ve.default.createElement(Ve.default.Fragment,null,"\xA0",Ve.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),ut,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}for(let Be of me){let et=Be.slice(26),ut=ue.getLinkedEntities().get(et),Qe=ut?.type.indexOf("dataProperty")!==-1,Ht=ut?.type.indexOf("objectProperty")!==-1,Xe=nt(ue.properties[Be]);for(let Ft of Xe)Ge.push(Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement("i",{style:{color:"purple"}},"not")," ",Rr(ue,ue.getLinkedEntities(),et,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Ft=="string"&&Ft.includes("http")?Ve.default.createElement(Ve.default.Fragment,null,"\xA0",Ve.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),Ft,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Ht?kA(typeof Ft=="string"?Ft:typeof Ft=="object"&&!Array.isArray(Ft)&&Ft.value?JSON.stringify(Ft.value):JSON.stringify(Ft)):Qe?Ve.default.createElement(Ve.default.Fragment,null,"\xA0",Ve.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),Ft,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Ve.default.createElement(Ve.default.Fragment,null)))}return Ve.default.createElement(Ve.default.Fragment,null,Ge.length>0&&Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(wt,null,Ve.default.createElement("b",null,"Property assertions:"),Ge.length>1?Ve.default.createElement("ul",null,Ge.map(Be=>Ve.default.createElement("li",{key:Ut()},Be)).sort()):Ve.default.createElement("p",null,Ge[0]))))}function fe(ue){return Ve.default.createElement(Ve.default.Fragment,null,ue.getAnnotationPredicates().map(xe=>{let me=ue.getAnnotationById(xe);return me.length==0?Ve.default.createElement(Ve.default.Fragment,null):Ve.default.createElement(wt,{grow:!1,key:xe},Ve.default.createElement("b",null,Ql(d1(f1(ue.getAnnotationTitleById(xe)))),":"),me.length>1?Ve.default.createElement("ul",null,me.map(We=>Ve.default.createElement("li",{key:Ut(),id:We.value},ha(ue,We,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Ve.default.createElement("p",{key:Ut()},ha(ue,me[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}))}return Ve.default.createElement(Ve.default.Fragment,null,Ve.default.createElement(fa,{title:o?(i?Ql(sj(i)):M&&k?Ql(k.getType()):"")+" Information":"",layout:"horizontal"},A&&Ve.default.createElement(Zt,{size:"s"}),M&&k!==void 0&&Ve.default.createElement(Pt,{...I},U(k),X(k),wd(k)&&Ve.default.createElement(Ve.default.Fragment,null,K(k),Y(k)),Tp(k)&&Ve.default.createElement(Ve.default.Fragment,null,H(k),ne(k),pe(k)),p1(k)&&Ve.default.createElement(Ve.default.Fragment,null,ye(k)),fe(k)),T&&Ve.default.createElement(Pt,null,Ln(N,"information"))))}function Z3e(e,t,n){Y3e.default.render(ITt(e),t,n)}function ITt(e){let t=new tr;return Ve.default.createElement(er,{colorMode:"light"},Ve.default.createElement(rr,{client:t},Ve.default.createElement(Q3e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var D8=E(D());var e5e=E(cn());function t5e(e){let{apiQuery:t,buttonText:n,buttonSize:r}=e;return D8.default.createElement(Tx,{href:t,target:"_blank",size:r||"m"},n)}function r5e(e,t,n){e5e.default.render(jTt(e),t,n)}function jTt(e){let t=new tr;return D8.default.createElement(er,{colorMode:"light"},D8.default.createElement(rr,{client:t},D8.default.createElement(t5e,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var Ji=E(D());var n5e=E(cn());function CA(e){let{api:t,ontologyId:n,iri:r,entityType:o,colorFirst:i,colorSecond:u,parameter:c,useLegacy:d,onNavigateToOntology:g}=e,O=new pr(t),{data:S,isLoading:I,isSuccess:R,isError:k,error:A}=dr(["breadcrumb",t,c,o,r,n,d],async()=>await O.getEntityObject(r,o,n,c,d));return Ji.default.createElement(Ji.default.Fragment,null,I&&Ji.default.createElement("span",null,Ji.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.ontologyId&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},Ji.default.createElement(Pi,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||Ji.default.createElement(Zt,{size:"s"}))),"\xA0",Ji.default.createElement(Wt,{type:"arrowRight"}),"\xA0",Ji.default.createElement(Pi,{className:"breadcrumb",color:u||"warning"},Ji.default.createElement(Zt,{size:"s"}))),R&&S&&gl(S)&&Ji.default.createElement(u0,{ontologyName:S.getOntologyId(),shortForm:S.getShortForm(),ontologyId:n||S.getOntologyId(),colorFirst:i,colorSecond:u,onNavigateToOntology:g}),k&&Ji.default.createElement(u0,{ontologyName:e.ontologyId?.toUpperCase()||S&&S.getOntologyId().toUpperCase()||Ln(A,"ontology"),shortForm:S&&S.getShortForm()?S.getShortForm().toUpperCase():"",ontologyId:n||(S?S.getOntologyId():""),colorFirst:i||(e.ontologyId||S&&S.getOntologyId()?"primary":"danger"),colorSecond:u||(S&&S.getShortForm()?"success":"danger"),onNavigateToOntology:g}))}function o5e(e,t,n){n5e.default.render(ETt(e),t,n)}function ETt(e){let t=new tr;return Ji.default.createElement(er,{colorMode:"light"},Ji.default.createElement(rr,{client:t},Ji.default.createElement(CA,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var cc=E(D());var AA=E(D());function MA(e){let{descText:t,description:n,...r}=e;return AA.default.createElement(AA.default.Fragment,null,AA.default.createElement(Pt,{...r},t||n))}var i5e=E(cn()),PTt="No description available.";function TA(e){let{api:t,ontologyId:n,iri:r,descText:o,thingType:i,parameter:u,useLegacy:c,...d}=e,g=new pr(t),{data:O,isLoading:S,isSuccess:I,isError:R,error:k}=dr(["description",t,u,i,r,n,c],async()=>g.getThingObject(r,i,n,u,c));return cc.default.createElement(cc.default.Fragment,null,S&&cc.default.createElement(Zt,{size:"s"}),I&&O&&cc.default.createElement(MA,{description:O.getDescription()||PTt,descText:o,...d}),R&&cc.default.createElement(Pt,null,Ln(k,"description")))}function a5e(e,t,n){i5e.default.render(kTt(e),t,n)}function kTt(e){let t=new tr;return cc.default.createElement(er,{colorMode:"light"},cc.default.createElement(rr,{client:t},cc.default.createElement(TA,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var Al=E(D());var l5e=E(cn());function tg(e){let{iri:t,iriText:n,color:r,externalIcon:o,urlPrefix:i,copyButton:u}=e,[c,d]=(0,Al.useState)(!1),O=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,S=()=>c?Al.default.createElement(sa,{style:{marginLeft:"5px",color:r&&(cj(r)||pj(r))?r:""},display:"base",iconType:"check",key:"copy-btn",color:r&&fj(r)?r:void 0}):Al.default.createElement(sa,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",color:r&&(cj(r)||pj(r))?r:""},color:r&&fj(r)?r:void 0,onClick:()=>{navigator.clipboard.writeText(O),d(!0),setTimeout(()=>{d(!1)},2e3)}});return Al.default.createElement(wt,{grow:!1},Al.default.createElement("div",null,Al.default.createElement(Ld,{href:O,target:"_blank",style:{color:r&&(cj(r)||pj(r))?r:""},color:r&&fj(r)?r:void 0,external:o},n||t),u&&Al.default.createElement(S,null)))}function s5e(e,t,n){l5e.default.render(CTt(e),t,n)}function CTt(e){let t=new tr;return Al.default.createElement(er,{colorMode:"light"},Al.default.createElement(rr,{client:t},Al.default.createElement(tg,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var ws=E(D());var Da=E(D());var xf=E(D());(()=>{var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,u=(s,f)=>()=>(s&&(f=s(s=0)),f),c=(s,f)=>()=>(f||s((f={exports:{}}).exports,f),f.exports),d=(s,f)=>{for(var m in f)t(s,m,{get:f[m],enumerable:!0})},g=(s,f,m,w)=>{if(f&&typeof f=="object"||typeof f=="function")for(let _ of r(f))!i.call(s,_)&&_!==m&&t(s,_,{get:()=>f[_],enumerable:!(w=n(f,_))||w.enumerable});return s},O=(s,f,m)=>(m=s!=null?e(o(s)):{},g(f||!s||!s.__esModule?t(m,"default",{value:s,enumerable:!0}):m,s)),S=s=>g(t({},"__esModule",{value:!0}),s),I=c((s,f)=>{"use strict";var m=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;function C(L){if(L==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(L)}function z(){try{if(!Object.assign)return!1;var L=new String("abc");if(L[5]="de",Object.getOwnPropertyNames(L)[0]==="5")return!1;for(var V={},B=0;B<10;B++)V["_"+String.fromCharCode(B)]=B;var G=Object.getOwnPropertyNames(V).map(function(te){return V[te]});if(G.join("")!=="0123456789")return!1;var Q={};return"abcdefghijklmnopqrst".split("").forEach(function(te){Q[te]=te}),Object.keys(Object.assign({},Q)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}f.exports=z()?Object.assign:function(L,V){for(var B,G=C(L),Q,te=1;te{"use strict";var f=I(),m=60103,w=60106;s.Fragment=60107,s.StrictMode=60108,s.Profiler=60114;var _=60109,C=60110,z=60112;s.Suspense=60113;var L=60115,V=60116;typeof Symbol=="function"&&Symbol.for&&(B=Symbol.for,m=B("react.element"),w=B("react.portal"),s.Fragment=B("react.fragment"),s.StrictMode=B("react.strict_mode"),s.Profiler=B("react.profiler"),_=B("react.provider"),C=B("react.context"),z=B("react.forward_ref"),s.Suspense=B("react.suspense"),L=B("react.memo"),V=B("react.lazy"));var B,G=typeof Symbol=="function"&&Symbol.iterator;function Q(Ee){return Ee===null||typeof Ee!="object"?null:(Ee=G&&Ee[G]||Ee["@@iterator"],typeof Ee=="function"?Ee:null)}function te(Ee){for(var Ye="https://reactjs.org/docs/error-decoder.html?invariant="+Ee,Yt=1;Yt{"use strict";f.exports=R()}),A=c(s=>{"use strict";var f,m,w,_;typeof performance=="object"&&typeof performance.now=="function"?(C=performance,s.unstable_now=function(){return C.now()}):(z=Date,L=z.now(),s.unstable_now=function(){return z.now()-L});var C,z,L;typeof window>"u"||typeof MessageChannel!="function"?(V=null,B=null,G=function(){if(V!==null)try{var Je=s.unstable_now();V(!0,Je),V=null}catch(ct){throw setTimeout(G,0),ct}},f=function(Je){V!==null?setTimeout(f,0,Je):(V=Je,setTimeout(G,0))},m=function(Je,ct){B=setTimeout(Je,ct)},w=function(){clearTimeout(B)},s.unstable_shouldYield=function(){return!1},_=s.unstable_forceFrameRate=function(){}):(Q=window.setTimeout,te=window.clearTimeout,typeof console<"u"&&(oe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof oe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),re=!1,le=null,ce=-1,ie=5,Pe=0,s.unstable_shouldYield=function(){return s.unstable_now()>=Pe},_=function(){},s.unstable_forceFrameRate=function(Je){0>Je||125>>1,Jt=Je[Ot];if(Jt!==void 0&&0ae(un,dt))bn!==void 0&&0>ae(bn,un)?(Je[Ot]=bn,Je[zn]=dt,Ot=zn):(Je[Ot]=un,Je[wr]=dt,Ot=wr);else if(bn!==void 0&&0>ae(bn,dt))Je[Ot]=bn,Je[zn]=dt,Ot=zn;else break e}}return ct}return null}function ae(Je,ct){var dt=Je.sortIndex-ct.sortIndex;return dt!==0?dt:Je.id-ct.id}var be=[],Ce=[],Te=1,Fe=null,Ue=3,it=!1,Mt=!1,Lt=!1;function Gt(Je){for(var ct=ge(Ce);ct!==null;){if(ct.callback===null)je(Ce);else if(ct.startTime<=Je)je(Ce),ct.sortIndex=ct.expirationTime,Se(be,ct);else break;ct=ge(Ce)}}function Ee(Je){if(Lt=!1,Gt(Je),!Mt)if(ge(be)!==null)Mt=!0,f(Ye);else{var ct=ge(Ce);ct!==null&&m(Ee,ct.startTime-Je)}}function Ye(Je,ct){Mt=!1,Lt&&(Lt=!1,w()),it=!0;var dt=Ue;try{for(Gt(ct),Fe=ge(be);Fe!==null&&(!(Fe.expirationTime>ct)||Je&&!s.unstable_shouldYield());){var Ot=Fe.callback;if(typeof Ot=="function"){Fe.callback=null,Ue=Fe.priorityLevel;var Jt=Ot(Fe.expirationTime<=ct);ct=s.unstable_now(),typeof Jt=="function"?Fe.callback=Jt:Fe===ge(be)&&je(be),Gt(ct)}else je(be);Fe=ge(be)}if(Fe!==null)var wr=!0;else{var un=ge(Ce);un!==null&&m(Ee,un.startTime-ct),wr=!1}return wr}finally{Fe=null,Ue=dt,it=!1}}var Yt=_;s.unstable_IdlePriority=5,s.unstable_ImmediatePriority=1,s.unstable_LowPriority=4,s.unstable_NormalPriority=3,s.unstable_Profiling=null,s.unstable_UserBlockingPriority=2,s.unstable_cancelCallback=function(Je){Je.callback=null},s.unstable_continueExecution=function(){Mt||it||(Mt=!0,f(Ye))},s.unstable_getCurrentPriorityLevel=function(){return Ue},s.unstable_getFirstCallbackNode=function(){return ge(be)},s.unstable_next=function(Je){switch(Ue){case 1:case 2:case 3:var ct=3;break;default:ct=Ue}var dt=Ue;Ue=ct;try{return Je()}finally{Ue=dt}},s.unstable_pauseExecution=function(){},s.unstable_requestPaint=Yt,s.unstable_runWithPriority=function(Je,ct){switch(Je){case 1:case 2:case 3:case 4:case 5:break;default:Je=3}var dt=Ue;Ue=Je;try{return ct()}finally{Ue=dt}},s.unstable_scheduleCallback=function(Je,ct,dt){var Ot=s.unstable_now();switch(typeof dt=="object"&&dt!==null?(dt=dt.delay,dt=typeof dt=="number"&&0Ot?(Je.sortIndex=dt,Se(Ce,Je),ge(be)===null&&Je===ge(Ce)&&(Lt?w():Lt=!0,m(Ee,dt-Ot))):(Je.sortIndex=Jt,Se(be,Je),Mt||it||(Mt=!0,f(Ye))),Je},s.unstable_wrapCallback=function(Je){var ct=Ue;return function(){var dt=Ue;Ue=ct;try{return Je.apply(this,arguments)}finally{Ue=dt}}}}),M=c((s,f)=>{"use strict";f.exports=A()}),T=c(s=>{"use strict";var f=k(),m=I(),w=M();function _(l){for(var p="https://reactjs.org/docs/error-decoder.html?invariant="+l,h=1;h"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),G=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Q=Object.prototype.hasOwnProperty,te={},oe={};function re(l){return Q.call(oe,l)?!0:Q.call(te,l)?!1:G.test(l)?oe[l]=!0:(te[l]=!0,!1)}function le(l,p,h,P){if(h!==null&&h.type===0)return!1;switch(typeof p){case"function":case"symbol":return!0;case"boolean":return P?!1:h!==null?!h.acceptsBooleans:(l=l.toLowerCase().slice(0,5),l!=="data-"&&l!=="aria-");default:return!1}}function ce(l,p,h,P){if(p===null||typeof p>"u"||le(l,p,h,P))return!0;if(P)return!1;if(h!==null)switch(h.type){case 3:return!p;case 4:return p===!1;case 5:return isNaN(p);case 6:return isNaN(p)||1>p}return!1}function ie(l,p,h,P,F,J,Z){this.acceptsBooleans=p===2||p===3||p===4,this.attributeName=P,this.attributeNamespace=F,this.mustUseProperty=h,this.propertyName=l,this.type=p,this.sanitizeURL=J,this.removeEmptyString=Z}var Pe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(l){Pe[l]=new ie(l,0,!1,l,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(l){var p=l[0];Pe[p]=new ie(p,1,!1,l[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(l){Pe[l]=new ie(l,2,!1,l.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(l){Pe[l]=new ie(l,2,!1,l,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(l){Pe[l]=new ie(l,3,!1,l.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(l){Pe[l]=new ie(l,3,!0,l,null,!1,!1)}),["capture","download"].forEach(function(l){Pe[l]=new ie(l,4,!1,l,null,!1,!1)}),["cols","rows","size","span"].forEach(function(l){Pe[l]=new ie(l,6,!1,l,null,!1,!1)}),["rowSpan","start"].forEach(function(l){Pe[l]=new ie(l,5,!1,l.toLowerCase(),null,!1,!1)});var Ae=/[\-:]([a-z])/g;function we(l){return l[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(l){var p=l.replace(Ae,we);Pe[p]=new ie(p,1,!1,l,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(l){var p=l.replace(Ae,we);Pe[p]=new ie(p,1,!1,l,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(l){var p=l.replace(Ae,we);Pe[p]=new ie(p,1,!1,l,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(l){Pe[l]=new ie(l,1,!1,l.toLowerCase(),null,!1,!1)}),Pe.xlinkHref=new ie("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(l){Pe[l]=new ie(l,1,!1,l.toLowerCase(),null,!0,!0)});function Se(l,p,h,P){var F=Pe.hasOwnProperty(p)?Pe[p]:null,J=F!==null?F.type===0:P?!1:!(!(2Nn.default.createElement(O8,{color:Qe},Nn.default.createElement("span",null,Nn.default.createElement(sc,{search:ye},ze.label),Nn.default.createElement("br",null),ze.description)),Ke=()=>Nn.default.createElement("span",{style:{height:"200px"}},Nn.default.createElement(O8,{color:Qe},Nn.default.createElement("span",null,Nn.default.createElement(sc,{search:ye},ze.label),"\xA0\xA0\xA0\xA0\xA0",Nn.default.createElement(f0,{ontologyName:ze.ontology_name,shortForm:ze.short_form,colorFirst:"primary",colorSecond:"success"}),Nn.default.createElement(Nt,{type:"iInCircle",style:{marginLeft:5},title:Ze}),!g&&ze.description&&Nn.default.createElement(Nn.default.Fragment,null,Nn.default.createElement("br",null),ze.description.substring(0,40)+"..."))));return ze.type==="ontology"?lt():Ke()},{isLoading:B}=dr(["onMount",u],async()=>{let ue=[],ye=[...new Set(u)].filter(be=>o&&be.label||be.iri);if(ye.length>0){d&&(ye=[ye[0]]);for(let be of ye)be&&be.iri&&be.iri.startsWith("http")?await R.getSelectData({query:be.iri},void 0,void 0,n,O).then(ze=>{ze&&(ze.properties.map(He=>{be.iri===He.getIri()&&ue.push({label:r?He.getLabel():pe(He),key:He.getIri(),value:{iri:He.getIri(),label:He.getLabel(),ontology_name:He.getOntologyId(),type:He.getType(),short_form:He.getShortForm(),description:He.getDescription(),source:He.getApiSourceName(),source_url:He.getApiSourceEndpoint()}})}),d&&ue.length>1&&(ue=[ue[0]]))}):be&&be.label&&o&&ue.push({label:be.label,key:be.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:"",source_url:""}});U(ue),Y(ue)}}),{isLoading:ne}=dr(["onSearchChange",C],async()=>{if(C.length>0)return R.getSelectData({query:C},void 0,void 0,n,O).then(ue=>{ue&&U(ue.properties.map(ye=>({label:r?ye.getLabel():pe(ye),key:ye.getIri(),value:{iri:ye.getIri(),label:ye.getLabel(),ontology_name:ye.getOntologyId(),type:ye.getType(),short_form:ye.getShortForm(),description:ye.getDescription(),source:ye.getApiSourceName(),source_url:ye.getApiSourceEndpoint()}})))})});(0,Nn.useEffect)(()=>{i(G.map(ue=>o&&ue.value.iri==""?{iri:"",label:ue.label,ontology_name:"",type:"",short_form:ue.value.short_form,description:ue.value.description,source:ue.value.source}:ue.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}:{iri:ue.value.iri,label:ue.value.label,ontology_name:ue.value.ontology_name,type:ue.value.type,short_form:ue.value.short_form,description:ue.value.description,source:ue.value.source}))},[G]);function pe(ue){return ue.label+" ("+ue.ontology_name.toUpperCase()+" "+ue.short_form+")"}function ve(ue){Y(ue)}function de(ue){let ye={label:ue,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}};U([...D,ye]),Y(d?[ye]:[...G,ye])}return Nn.default.createElement(r0,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...I,async:!0,isLoading:ne||B,singleSelection:d?{asPlainText:!0}:!1,placeholder:c||"Search for a Concept",options:D,selectedOptions:G,onSearchChange:T,onChange:ve,renderOption:K,onCreateOption:o?de:void 0,rowHeight:g?30:50})}function t5e(e,t,n){Z3e.default.render(ATt(e),t,n)}function ATt(e){let t=new tr;return Nn.default.createElement(er,{colorMode:"light"},Nn.default.createElement(rr,{client:t},Nn.default.createElement(e5e,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms,ts4nfdiGateway:e.ts4nfdiGateway,singleSuggestionRow:e.singleSuggestionRow,showApiSource:e.showApiSource})))}var Mo=E(L());var r5e=E(cn());function n5e(e){let{api:t,parameter:n,...r}=e,o=new pr(t),{data:i,isLoading:u,isError:c,dataUpdatedAt:d}=dr(["ontologiesData",t,n],async()=>o.getOntologiesData(e.parameter));return Mo.default.createElement(Mo.default.Fragment,null,Mo.default.createElement(fa,{title:"Data Content",description:d?`Updated ${new Date(d).toLocaleString()}`:"",layout:"horizontal"},Mo.default.createElement(Pt,{...r},c&&Mo.default.createElement(Pt,null,"No data content available"),u?Mo.default.createElement(Zt,{size:"s"}):Mo.default.createElement("ul",null,i?.getTotalOntologies()?Mo.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):Mo.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?Mo.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):Mo.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?Mo.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):Mo.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?Mo.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):Mo.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function o5e(e,t,n){r5e.default.render(MTt(e),t,n)}function MTt(e){let t=new tr;return Mo.default.createElement(er,{colorMode:"light"},Mo.default.createElement(rr,{client:t},Mo.default.createElement(n5e,{api:e.api,parameter:e.parameter})))}var qe=E(L());var Re=E(L());var D8=!0;function AA(e){return Re.default.createElement(WP,{type:"iInCircle",color:"subdued",content:e})}function TTt(e,t){let n=Object.keys(t).map(r=>{let o=e.getLinkedEntities().getLabelForIri(r)||r;return o?"*"+t[r]+" ("+o+")":""}).join(` +`);return AA(n)}function $i(e,t,n,r=D8,o){let i=t.getLabelForIri(n)||n.split("/").pop()||n,u=t.get(n),c=e.getOntologyId();if(e.getType()!=="ontology"&&n===e?.getIri())return Re.default.createElement("span",{className:"highlight"},e.getLabel());if(!u)return n.startsWith("http")?Re.default.createElement("a",{className:"clickable",href:n},i):Re.default.createElement("span",null,i);let d=u.definedBy?u.definedBy.filter(O=>O!==c):[],g=u.type?mj(u.type):e.getType();return d.length===1?u.hasLocalDefinition?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(c,g,{iri:n,label:i})}},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(d[0],g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},d[0].toUpperCase()))):Re.default.createElement(Re.default.Fragment,null)):Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(d[0],g,{iri:n,label:i})}},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(d[0],g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},d[0].toUpperCase()))):Re.default.createElement(Re.default.Fragment,null)):d.length>1?u.hasLocalDefinition?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(c,g,{iri:n,label:i})}},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",d.map(O=>Re.default.createElement("button",{className:"no-decoration",key:Ut(),onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(O,g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},O.toUpperCase())))):Re.default.createElement(Re.default.Fragment,null)):Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("a",{className:"clickable",href:n},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",key:Ut(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},Re.default.createElement(Nt,{type:"search",size:"s"}),"\xA0",d.length,"\xA0","ontologies"))):Re.default.createElement(Re.default.Fragment,null)):u.hasLocalDefinition?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(c,g,{iri:n,label:i})}},i)):parseInt(u.numAppearsIn)>0?Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("a",{className:"clickable",href:n},i),r?Re.default.createElement(Re.default.Fragment,null,"\xA0",Re.default.createElement("button",{className:"no-decoration",key:Ut(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(g,{iri:n,label:i})}},Re.default.createElement("span",{className:"ontology-badge"},Re.default.createElement(Nt,{type:"search",size:"s"}),"\xA0",u.numAppearsIn,"\xA0",parseInt(u.numAppearsIn)>1?"ontologies":"ontology"))):Re.default.createElement(Re.default.Fragment,null)):Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("a",{className:"clickable",href:u.url||n},i))}function Rr(e,t,n,r=D8,o){let i=Re.default.createElement(Re.default.Fragment,null);if(t=t.mergeWith(n.linkedEntities),typeof n=="string")i=$i(e,t,n,r,o);else if(typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1)i=ha(e,ft.fromJson(n)[0],r,o);else{let u=n["http://www.w3.org/2002/07/owl#someValuesFrom"],c=n["http://www.w3.org/2002/07/owl#allValuesFrom"],d=nt(n["http://www.w3.org/2002/07/owl#intersectionOf"]),g=nt(n["http://www.w3.org/2002/07/owl#unionOf"]),O=n["http://www.w3.org/2002/07/owl#hasValue"],S=n["http://www.w3.org/2002/07/owl#minCardinality"]||n["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],I=n["http://www.w3.org/2002/07/owl#maxCardinality"]||n["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],R=n["http://www.w3.org/2002/07/owl#cardinality"]||n["http://www.w3.org/2002/07/owl#qualifiedCardinality"],k=n["http://www.w3.org/2002/07/owl#hasSelf"],M=n["http://www.w3.org/2002/07/owl#complementOf"],C=nt(n["http://www.w3.org/2002/07/owl#oneOf"]),T=n["http://www.w3.org/2002/07/owl#inverseOf"],D=n["http://www.w3.org/2002/07/owl#onProperty"],U=n["http://www.w3.org/2002/07/owl#onDatatype"];if(U){let G=[Rr(e,t,U,r,o)],Y=nt(n["http://www.w3.org/2002/07/owl#withRestrictions"]);if(Y.length>0){G.push(Re.default.createElement(Re.default.Fragment,null,"["));let K=!0;for(let B of Y){K?K=!1:G.push(Re.default.createElement(Re.default.Fragment,null,",\xA0"));let ne=B["http://www.w3.org/2001/XMLSchema#minExclusive"],pe=B["http://www.w3.org/2001/XMLSchema#minInclusive"],ve=B["http://www.w3.org/2001/XMLSchema#maxExclusive"],de=B["http://www.w3.org/2001/XMLSchema#maxInclusive"];ne?G.push(Re.default.createElement(Re.default.Fragment,null,"> ",ne)):pe?G.push(Re.default.createElement(Re.default.Fragment,null,"\u2265 ",pe)):ve?G.push(Re.default.createElement(Re.default.Fragment,null,"< ",ve)):de&&G.push(Re.default.createElement(Re.default.Fragment,null,"\u2264 ",de))}G.push(Re.default.createElement(Re.default.Fragment,null,"]"))}i=Re.default.createElement(Re.default.Fragment,null,G.map(K=>Re.default.createElement("span",{key:Ut()},K)))}else if(u)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," some "),Rr(e,t,nt(u)[0],r,o));else if(c)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," only "),Rr(e,t,nt(c)[0],r,o));else if(d.length>0){let G=[Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"(")];for(let Y of d)G.length>1&&G.push(Re.default.createElement("i",null," and ")),G.push(Rr(e,t,Y,r,o));G.push(Re.default.createElement("span",{className:"text-neutral-default"},")")),i=Re.default.createElement("span",null,G.map(Y=>Re.default.createElement("span",{key:Ut()},Y)))}else if(g.length>0){let G=[Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"(")];for(let Y of g)G.length>1&&G.push(Re.default.createElement("i",null," or ")),G.push(Rr(e,t,Y,r,o));G.push(Re.default.createElement("span",{className:"text-neutral-default"},")")),i=Re.default.createElement("span",null,G.map(Y=>Re.default.createElement("span",{key:Ut()},Y)))}else if(O)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," value "),Rr(e,t,nt(O)[0],r,o));else if(S)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," min "),Rr(e,t,nt(S)[0],r,o));else if(I)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," max "),Rr(e,t,nt(I)[0],r,o));else if(R)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," exactly "),Rr(e,t,nt(R)[0],r,o));else if(k)i=Re.default.createElement(Re.default.Fragment,null,Rr(e,t,D,r,o),Re.default.createElement("i",{style:{color:"purple"}}," Self "),Rr(e,t,nt(k)[0],r,o));else if(M)i=Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("i",null,"not "),Rr(e,t,nt(M)[0],r,o));else if(C.length>0){let G=[Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"{")];for(let Y of C)G.length>1&&G.push(Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},",\xA0")),G.push(Rr(e,t,Y,r,o));G.push(Re.default.createElement("span",{className:"text-neutral-default"},"}")),i=Re.default.createElement("span",null,G.map(Y=>Re.default.createElement("span",{key:Ut()},Y)))}else T&&(i=Re.default.createElement(Re.default.Fragment,null,Re.default.createElement("i",{style:{color:"purple"}},"inverse "),Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},"("),Rr(e,t,T,r,o),Re.default.createElement("span",{key:Ut(),className:"text-neutral-default"},")")))}return i}function rg(e,t,n,r=D8,o){return Re.default.createElement(Re.default.Fragment,null,n.length===1?Re.default.createElement("p",null,Rr(e,e.getLinkedEntities(),n[0],r,o)):Re.default.createElement("ul",null,n.map(i=>Re.default.createElement("li",{key:Ut()},Rr(e,e.getLinkedEntities(),i,r,o)))))}function i5e(e,t,n,r=D8,o){let i=[];if(n)for(let g of Object.keys(n.linkedEntities))for(let O=t.indexOf(g,0);O!==-1;O=t.indexOf(g,O))i.push({start:O,end:O+g.length,link:$i(e,n,g,r,o)}),O+=g.length;let u=/[A-z]+:\/\/[^\s]+/g;for(let g=u.exec(t);g;g=u.exec(t)){let O=g[0];i.push({start:g.index,end:g.index+O.length,link:Re.default.createElement("span",{key:Ut()},Re.default.createElement("a",{className:"clickable",href:O},O))})}i.sort((g,O)=>g.start-O.start);e:for(let g=0;g=I.start&&I.end>=S.start){S.end-S.startR.getEntityObject(n,i,r,u,d));function U(ue){return qe.default.createElement(qe.default.Fragment,null,ue.getLabel()&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"Label:"),ue.getLabel()),qe.default.createElement(so,null)))}function G(ue){return qe.default.createElement(qe.default.Fragment,null,ue.getSynonyms().length>0&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"Synonyms:"),ue.getSynonyms().length>1?qe.default.createElement("ul",null,ue.getSynonyms().map(ye=>qe.default.createElement("li",{key:Ut(),id:ye.value},ha(ue,ye,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):qe.default.createElement("p",null,ha(ue,ue.getSynonyms()[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function Y(ue){let ye=ue.getHasKey();return qe.default.createElement(qe.default.Fragment,null,ye.length>0&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"Has Key:"),ye.length>1?qe.default.createElement("ul",null,ye.map(be=>qe.default.createElement("li",{key:Ut()},Rr(ue,ue.getLinkedEntities(),be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):qe.default.createElement("p",null,Rr(ue,ue.getLinkedEntities(),ye[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function K(ue){return qe.default.createElement(qe.default.Fragment,null,ue.getSubsets().length>0&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"In Subsets:"),ue.getSubsets().length>1?qe.default.createElement("ul",null,ue.getSubsets().map(ye=>qe.default.createElement("li",{key:Ut(),id:ye+Ut()},$i(ue,ue.getLinkedEntities(),ye,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):qe.default.createElement("p",null,$i(ue,ue.getLinkedEntities(),ue.getSubsets()[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function B(ue){let ye=ue.getRdfTypes().map(be=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[be]).filter(be=>!!be);return qe.default.createElement(qe.default.Fragment,null,ye.length>0&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"Characteristics:"),ye.length>1?qe.default.createElement("ul",null,ye.map(be=>qe.default.createElement("li",{key:Ut()},be)).sort()):qe.default.createElement("p",null,ye[0]))))}function ne(ue){let ye=ue.getDomain();return qe.default.createElement(qe.default.Fragment,null,ye.length>0&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"Domain:"),ye.length>1?qe.default.createElement("ul",null,ye.map(be=>qe.default.createElement("li",{key:Ut()},Rr(ue,ue.getLinkedEntities(),be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):qe.default.createElement("p",null,Rr(ue,ue.getLinkedEntities(),ye[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function pe(ue){let ye=ue.getRange();return qe.default.createElement(qe.default.Fragment,null,ye.length>0&&qe.default.createElement(wt,null,qe.default.createElement("b",null,"Range:"),ye.length>1?qe.default.createElement("ul",null,ye.map(be=>qe.default.createElement("li",{key:Ut()},Rr(ue,ue.getLinkedEntities(),be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):qe.default.createElement("p",null,Rr(ue,ue.getLinkedEntities(),ye[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}function ve(ue){let ye=Object.keys(ue.properties),be=ye.filter(Be=>Be.startsWith("negativePropertyAssertion+")),ze=ye.filter(Be=>ue.getLinkedEntities().get(Be)&&ue.getLinkedEntities().get(Be)?.type.indexOf("objectProperty")!==-1),He=ye.filter(Be=>ue.getLinkedEntities().get(Be)&&ue.getLinkedEntities().get(Be)?.type.indexOf("dataProperty")!==-1),Qe=[];for(let Be of ze){let Ze=nt(ue.properties[Be]);for(let lt of Ze)Qe.push(qe.default.createElement(qe.default.Fragment,null,Rr(ue,ue.getLinkedEntities(),Be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof lt=="string"&<.includes("http")?qe.default.createElement(qe.default.Fragment,null,"\xA0",qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),lt,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):AA(typeof lt=="string"?lt:typeof lt=="object"&&!Array.isArray(lt)&<.value?JSON.stringify(lt.value):JSON.stringify(lt))))}for(let Be of He){let Ze=nt(ue.properties[Be]);for(let lt of Ze)Qe.push(qe.default.createElement(qe.default.Fragment,null,Rr(ue,ue.getLinkedEntities(),Be,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),qe.default.createElement(qe.default.Fragment,null,"\xA0",qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),lt,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}for(let Be of be){let Ze=Be.slice(26),lt=ue.getLinkedEntities().get(Ze),Ke=lt?.type.indexOf("dataProperty")!==-1,Ht=lt?.type.indexOf("objectProperty")!==-1,Ge=nt(ue.properties[Be]);for(let Wt of Ge)Qe.push(qe.default.createElement(qe.default.Fragment,null,qe.default.createElement("i",{style:{color:"purple"}},"not")," ",Rr(ue,ue.getLinkedEntities(),Ze,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Wt=="string"&&Wt.includes("http")?qe.default.createElement(qe.default.Fragment,null,"\xA0",qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),Wt,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Ht?AA(typeof Wt=="string"?Wt:typeof Wt=="object"&&!Array.isArray(Wt)&&Wt.value?JSON.stringify(Wt.value):JSON.stringify(Wt)):Ke?qe.default.createElement(qe.default.Fragment,null,"\xA0",qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",$i(ue,ue.getLinkedEntities(),Wt,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):qe.default.createElement(qe.default.Fragment,null)))}return qe.default.createElement(qe.default.Fragment,null,Qe.length>0&&qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(wt,null,qe.default.createElement("b",null,"Property assertions:"),Qe.length>1?qe.default.createElement("ul",null,Qe.map(Be=>qe.default.createElement("li",{key:Ut()},Be)).sort()):qe.default.createElement("p",null,Qe[0]))))}function de(ue){return qe.default.createElement(qe.default.Fragment,null,ue.getAnnotationPredicates().map(ye=>{let be=ue.getAnnotationById(ye);return be.length==0?qe.default.createElement(qe.default.Fragment,null):qe.default.createElement(wt,{grow:!1,key:ye},qe.default.createElement("b",null,Zl(g1(h1(ue.getAnnotationTitleById(ye)))),":"),be.length>1?qe.default.createElement("ul",null,be.map(ze=>qe.default.createElement("li",{key:Ut(),id:ze.value},ha(ue,ze,c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):qe.default.createElement("p",{key:Ut()},ha(ue,be[0],c,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}))}return qe.default.createElement(qe.default.Fragment,null,qe.default.createElement(fa,{title:o?(i?Zl(uj(i)):C&&k?Zl(k.getType()):"")+" Information":"",layout:"horizontal"},M&&qe.default.createElement(Zt,{size:"s"}),C&&k!==void 0&&qe.default.createElement(Pt,{...I},U(k),G(k),_d(k)&&qe.default.createElement(qe.default.Fragment,null,K(k),Y(k)),zp(k)&&qe.default.createElement(qe.default.Fragment,null,B(k),ne(k),pe(k)),m1(k)&&qe.default.createElement(qe.default.Fragment,null,ve(k)),de(k)),T&&qe.default.createElement(Pt,null,Ln(D,"information"))))}function s5e(e,t,n){a5e.default.render(zTt(e),t,n)}function zTt(e){let t=new tr;return qe.default.createElement(er,{colorMode:"light"},qe.default.createElement(rr,{client:t},qe.default.createElement(l5e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var L8=E(L());var u5e=E(cn());function c5e(e){let{apiQuery:t,buttonText:n,buttonSize:r}=e;return L8.default.createElement(zx,{href:t,target:"_blank",size:r||"m"},n)}function p5e(e,t,n){u5e.default.render(DTt(e),t,n)}function DTt(e){let t=new tr;return L8.default.createElement(er,{colorMode:"light"},L8.default.createElement(rr,{client:t},L8.default.createElement(c5e,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var Ji=E(L());var f5e=E(cn());function MA(e){let{api:t,ontologyId:n,iri:r,entityType:o,colorFirst:i,colorSecond:u,parameter:c,useLegacy:d,onNavigateToOntology:g}=e,O=new pr(t),{data:S,isLoading:I,isSuccess:R,isError:k,error:M}=dr(["breadcrumb",t,c,o,r,n,d],async()=>await O.getEntityObject(r,o,n,c,d));return Ji.default.createElement(Ji.default.Fragment,null,I&&Ji.default.createElement("span",null,Ji.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.ontologyId&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},Ji.default.createElement(Pi,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||Ji.default.createElement(Zt,{size:"s"}))),"\xA0",Ji.default.createElement(Nt,{type:"arrowRight"}),"\xA0",Ji.default.createElement(Pi,{className:"breadcrumb",color:u||"warning"},Ji.default.createElement(Zt,{size:"s"}))),R&&S&&vl(S)&&Ji.default.createElement(f0,{ontologyName:S.getOntologyId(),shortForm:S.getShortForm(),ontologyId:n||S.getOntologyId(),colorFirst:i,colorSecond:u,onNavigateToOntology:g}),k&&Ji.default.createElement(f0,{ontologyName:e.ontologyId?.toUpperCase()||S&&S.getOntologyId().toUpperCase()||Ln(M,"ontology"),shortForm:S&&S.getShortForm()?S.getShortForm().toUpperCase():"",ontologyId:n||(S?S.getOntologyId():""),colorFirst:i||(e.ontologyId||S&&S.getOntologyId()?"primary":"danger"),colorSecond:u||(S&&S.getShortForm()?"success":"danger"),onNavigateToOntology:g}))}function d5e(e,t,n){f5e.default.render(LTt(e),t,n)}function LTt(e){let t=new tr;return Ji.default.createElement(er,{colorMode:"light"},Ji.default.createElement(rr,{client:t},Ji.default.createElement(MA,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var fc=E(L());var TA=E(L());function RA(e){let{descText:t,description:n,...r}=e;return TA.default.createElement(TA.default.Fragment,null,TA.default.createElement(Pt,{...r},t||n))}var m5e=E(cn()),NTt="No description available.";function zA(e){let{api:t,ontologyId:n,iri:r,descText:o,thingType:i,parameter:u,useLegacy:c,...d}=e,g=new pr(t),{data:O,isLoading:S,isSuccess:I,isError:R,error:k}=dr(["description",t,u,i,r,n,c],async()=>g.getThingObject(r,i,n,u,c));return fc.default.createElement(fc.default.Fragment,null,S&&fc.default.createElement(Zt,{size:"s"}),I&&O&&fc.default.createElement(RA,{description:O.getDescription()||NTt,descText:o,...d}),R&&fc.default.createElement(Pt,null,Ln(k,"description")))}function h5e(e,t,n){m5e.default.render(FTt(e),t,n)}function FTt(e){let t=new tr;return fc.default.createElement(er,{colorMode:"light"},fc.default.createElement(rr,{client:t},fc.default.createElement(zA,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var Ml=E(L());var g5e=E(cn());function ng(e){let{iri:t,iriText:n,color:r,externalIcon:o,urlPrefix:i,copyButton:u}=e,[c,d]=(0,Ml.useState)(!1),O=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,S=()=>c?Ml.default.createElement(sa,{style:{marginLeft:"5px",color:r&&(pj(r)||fj(r))?r:""},display:"base",iconType:"check",key:"copy-btn",color:r&&dj(r)?r:void 0}):Ml.default.createElement(sa,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",color:r&&(pj(r)||fj(r))?r:""},color:r&&dj(r)?r:void 0,onClick:()=>{navigator.clipboard.writeText(O),d(!0),setTimeout(()=>{d(!1)},2e3)}});return Ml.default.createElement(wt,{grow:!1},Ml.default.createElement("div",null,Ml.default.createElement(Wd,{href:O,target:"_blank",style:{color:r&&(pj(r)||fj(r))?r:""},color:r&&dj(r)?r:void 0,external:o},n||t),u&&Ml.default.createElement(S,null)))}function v5e(e,t,n){g5e.default.render(WTt(e),t,n)}function WTt(e){let t=new tr;return Ml.default.createElement(er,{colorMode:"light"},Ml.default.createElement(rr,{client:t},Ml.default.createElement(ng,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var Os=E(L());var Na=E(L());var Sf=E(L());(()=>{var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,u=(s,f)=>()=>(s&&(f=s(s=0)),f),c=(s,f)=>()=>(f||s((f={exports:{}}).exports,f),f.exports),d=(s,f)=>{for(var m in f)t(s,m,{get:f[m],enumerable:!0})},g=(s,f,m,w)=>{if(f&&typeof f=="object"||typeof f=="function")for(let _ of r(f))!i.call(s,_)&&_!==m&&t(s,_,{get:()=>f[_],enumerable:!(w=n(f,_))||w.enumerable});return s},O=(s,f,m)=>(m=s!=null?e(o(s)):{},g(f||!s||!s.__esModule?t(m,"default",{value:s,enumerable:!0}):m,s)),S=s=>g(t({},"__esModule",{value:!0}),s),I=c((s,f)=>{"use strict";var m=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;function A(N){if(N==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(N)}function z(){try{if(!Object.assign)return!1;var N=new String("abc");if(N[5]="de",Object.getOwnPropertyNames(N)[0]==="5")return!1;for(var V={},H=0;H<10;H++)V["_"+String.fromCharCode(H)]=H;var X=Object.getOwnPropertyNames(V).map(function(te){return V[te]});if(X.join("")!=="0123456789")return!1;var Q={};return"abcdefghijklmnopqrst".split("").forEach(function(te){Q[te]=te}),Object.keys(Object.assign({},Q)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}f.exports=z()?Object.assign:function(N,V){for(var H,X=A(N),Q,te=1;te{"use strict";var f=I(),m=60103,w=60106;s.Fragment=60107,s.StrictMode=60108,s.Profiler=60114;var _=60109,A=60110,z=60112;s.Suspense=60113;var N=60115,V=60116;typeof Symbol=="function"&&Symbol.for&&(H=Symbol.for,m=H("react.element"),w=H("react.portal"),s.Fragment=H("react.fragment"),s.StrictMode=H("react.strict_mode"),s.Profiler=H("react.profiler"),_=H("react.provider"),A=H("react.context"),z=H("react.forward_ref"),s.Suspense=H("react.suspense"),N=H("react.memo"),V=H("react.lazy"));var H,X=typeof Symbol=="function"&&Symbol.iterator;function Q(Ee){return Ee===null||typeof Ee!="object"?null:(Ee=X&&Ee[X]||Ee["@@iterator"],typeof Ee=="function"?Ee:null)}function te(Ee){for(var Ye="https://reactjs.org/docs/error-decoder.html?invariant="+Ee,Yt=1;Yt{"use strict";f.exports=R()}),M=c(s=>{"use strict";var f,m,w,_;typeof performance=="object"&&typeof performance.now=="function"?(A=performance,s.unstable_now=function(){return A.now()}):(z=Date,N=z.now(),s.unstable_now=function(){return z.now()-N});var A,z,N;typeof window>"u"||typeof MessageChannel!="function"?(V=null,H=null,X=function(){if(V!==null)try{var Je=s.unstable_now();V(!0,Je),V=null}catch(ct){throw setTimeout(X,0),ct}},f=function(Je){V!==null?setTimeout(f,0,Je):(V=Je,setTimeout(X,0))},m=function(Je,ct){H=setTimeout(Je,ct)},w=function(){clearTimeout(H)},s.unstable_shouldYield=function(){return!1},_=s.unstable_forceFrameRate=function(){}):(Q=window.setTimeout,te=window.clearTimeout,typeof console<"u"&&(oe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof oe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),re=!1,le=null,ce=-1,ie=5,Pe=0,s.unstable_shouldYield=function(){return s.unstable_now()>=Pe},_=function(){},s.unstable_forceFrameRate=function(Je){0>Je||125>>1,Jt=Je[Ot];if(Jt!==void 0&&0ae(un,dt))bn!==void 0&&0>ae(bn,un)?(Je[Ot]=bn,Je[zn]=dt,Ot=zn):(Je[Ot]=un,Je[wr]=dt,Ot=wr);else if(bn!==void 0&&0>ae(bn,dt))Je[Ot]=bn,Je[zn]=dt,Ot=zn;else break e}}return ct}return null}function ae(Je,ct){var dt=Je.sortIndex-ct.sortIndex;return dt!==0?dt:Je.id-ct.id}var we=[],Ce=[],Te=1,We=null,$e=3,it=!1,Mt=!1,Lt=!1;function Gt(Je){for(var ct=he(Ce);ct!==null;){if(ct.callback===null)je(Ce);else if(ct.startTime<=Je)je(Ce),ct.sortIndex=ct.expirationTime,Se(we,ct);else break;ct=he(Ce)}}function Ee(Je){if(Lt=!1,Gt(Je),!Mt)if(he(we)!==null)Mt=!0,f(Ye);else{var ct=he(Ce);ct!==null&&m(Ee,ct.startTime-Je)}}function Ye(Je,ct){Mt=!1,Lt&&(Lt=!1,w()),it=!0;var dt=$e;try{for(Gt(ct),We=he(we);We!==null&&(!(We.expirationTime>ct)||Je&&!s.unstable_shouldYield());){var Ot=We.callback;if(typeof Ot=="function"){We.callback=null,$e=We.priorityLevel;var Jt=Ot(We.expirationTime<=ct);ct=s.unstable_now(),typeof Jt=="function"?We.callback=Jt:We===he(we)&&je(we),Gt(ct)}else je(we);We=he(we)}if(We!==null)var wr=!0;else{var un=he(Ce);un!==null&&m(Ee,un.startTime-ct),wr=!1}return wr}finally{We=null,$e=dt,it=!1}}var Yt=_;s.unstable_IdlePriority=5,s.unstable_ImmediatePriority=1,s.unstable_LowPriority=4,s.unstable_NormalPriority=3,s.unstable_Profiling=null,s.unstable_UserBlockingPriority=2,s.unstable_cancelCallback=function(Je){Je.callback=null},s.unstable_continueExecution=function(){Mt||it||(Mt=!0,f(Ye))},s.unstable_getCurrentPriorityLevel=function(){return $e},s.unstable_getFirstCallbackNode=function(){return he(we)},s.unstable_next=function(Je){switch($e){case 1:case 2:case 3:var ct=3;break;default:ct=$e}var dt=$e;$e=ct;try{return Je()}finally{$e=dt}},s.unstable_pauseExecution=function(){},s.unstable_requestPaint=Yt,s.unstable_runWithPriority=function(Je,ct){switch(Je){case 1:case 2:case 3:case 4:case 5:break;default:Je=3}var dt=$e;$e=Je;try{return ct()}finally{$e=dt}},s.unstable_scheduleCallback=function(Je,ct,dt){var Ot=s.unstable_now();switch(typeof dt=="object"&&dt!==null?(dt=dt.delay,dt=typeof dt=="number"&&0Ot?(Je.sortIndex=dt,Se(Ce,Je),he(we)===null&&Je===he(Ce)&&(Lt?w():Lt=!0,m(Ee,dt-Ot))):(Je.sortIndex=Jt,Se(we,Je),Mt||it||(Mt=!0,f(Ye))),Je},s.unstable_wrapCallback=function(Je){var ct=$e;return function(){var dt=$e;$e=ct;try{return Je.apply(this,arguments)}finally{$e=dt}}}}),C=c((s,f)=>{"use strict";f.exports=M()}),T=c(s=>{"use strict";var f=k(),m=I(),w=C();function _(l){for(var p="https://reactjs.org/docs/error-decoder.html?invariant="+l,h=1;h"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),X=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Q=Object.prototype.hasOwnProperty,te={},oe={};function re(l){return Q.call(oe,l)?!0:Q.call(te,l)?!1:X.test(l)?oe[l]=!0:(te[l]=!0,!1)}function le(l,p,h,P){if(h!==null&&h.type===0)return!1;switch(typeof p){case"function":case"symbol":return!0;case"boolean":return P?!1:h!==null?!h.acceptsBooleans:(l=l.toLowerCase().slice(0,5),l!=="data-"&&l!=="aria-");default:return!1}}function ce(l,p,h,P){if(p===null||typeof p>"u"||le(l,p,h,P))return!0;if(P)return!1;if(h!==null)switch(h.type){case 3:return!p;case 4:return p===!1;case 5:return isNaN(p);case 6:return isNaN(p)||1>p}return!1}function ie(l,p,h,P,F,J,Z){this.acceptsBooleans=p===2||p===3||p===4,this.attributeName=P,this.attributeNamespace=F,this.mustUseProperty=h,this.propertyName=l,this.type=p,this.sanitizeURL=J,this.removeEmptyString=Z}var Pe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(l){Pe[l]=new ie(l,0,!1,l,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(l){var p=l[0];Pe[p]=new ie(p,1,!1,l[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(l){Pe[l]=new ie(l,2,!1,l.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(l){Pe[l]=new ie(l,2,!1,l,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(l){Pe[l]=new ie(l,3,!1,l.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(l){Pe[l]=new ie(l,3,!0,l,null,!1,!1)}),["capture","download"].forEach(function(l){Pe[l]=new ie(l,4,!1,l,null,!1,!1)}),["cols","rows","size","span"].forEach(function(l){Pe[l]=new ie(l,6,!1,l,null,!1,!1)}),["rowSpan","start"].forEach(function(l){Pe[l]=new ie(l,5,!1,l.toLowerCase(),null,!1,!1)});var Ae=/[\-:]([a-z])/g;function Oe(l){return l[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(l){var p=l.replace(Ae,Oe);Pe[p]=new ie(p,1,!1,l,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(l){var p=l.replace(Ae,Oe);Pe[p]=new ie(p,1,!1,l,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(l){var p=l.replace(Ae,Oe);Pe[p]=new ie(p,1,!1,l,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(l){Pe[l]=new ie(l,1,!1,l.toLowerCase(),null,!1,!1)}),Pe.xlinkHref=new ie("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(l){Pe[l]=new ie(l,1,!1,l.toLowerCase(),null,!0,!0)});function Se(l,p,h,P){var F=Pe.hasOwnProperty(p)?Pe[p]:null,J=F!==null?F.type===0:P?!1:!(!(2se||F[Z]!==J[se])return` -`+F[Z].replace(" at new "," at ");while(1<=Z&&0<=se);break}}}finally{bn=!1,Error.prepareStackTrace=h}return(l=l?l.displayName||l.name:"")?zn(l):""}function Uf(l){switch(l.tag){case 5:return zn(l.type);case 16:return zn("Lazy");case 13:return zn("Suspense");case 19:return zn("SuspenseList");case 0:case 2:case 15:return l=hi(l.type,!1),l;case 11:return l=hi(l.type.render,!1),l;case 22:return l=hi(l.type._render,!1),l;case 1:return l=hi(l.type,!0),l;default:return""}}function Qi(l){if(l==null)return null;if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case be:return"Fragment";case ae:return"Portal";case Te:return"Profiler";case Ce:return"StrictMode";case Mt:return"Suspense";case Lt:return"SuspenseList"}if(typeof l=="object")switch(l.$$typeof){case Ue:return(l.displayName||"Context")+".Consumer";case Fe:return(l._context.displayName||"Context")+".Provider";case it:var p=l.render;return p=p.displayName||p.name||"",l.displayName||(p!==""?"ForwardRef("+p+")":"ForwardRef");case Gt:return Qi(l.type);case Ye:return Qi(l._render);case Ee:p=l._payload,l=l._init;try{return Qi(l(p))}catch{}}return null}function Ia(l){switch(typeof l){case"boolean":case"number":case"object":case"string":case"undefined":return l;default:return""}}function $f(l){var p=l.type;return(l=l.nodeName)&&l.toLowerCase()==="input"&&(p==="checkbox"||p==="radio")}function ja(l){var p=$f(l)?"checked":"value",h=Object.getOwnPropertyDescriptor(l.constructor.prototype,p),P=""+l[p];if(!l.hasOwnProperty(p)&&typeof h<"u"&&typeof h.get=="function"&&typeof h.set=="function"){var F=h.get,J=h.set;return Object.defineProperty(l,p,{configurable:!0,get:function(){return F.call(this)},set:function(Z){P=""+Z,J.call(this,Z)}}),Object.defineProperty(l,p,{enumerable:h.enumerable}),{getValue:function(){return P},setValue:function(Z){P=""+Z},stopTracking:function(){l._valueTracker=null,delete l[p]}}}}function Ko(l){l._valueTracker||(l._valueTracker=ja(l))}function ks(l){if(!l)return!1;var p=l._valueTracker;if(!p)return!0;var h=p.getValue(),P="";return l&&(P=$f(l)?l.checked?"true":"false":l.value),l=P,l!==h?(p.setValue(l),!0):!1}function ql(l){if(l=l||(typeof document<"u"?document:void 0),typeof l>"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function Cu(l,p){var h=p.checked;return m({},p,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:h??l._wrapperState.initialChecked})}function Hc(l,p){var h=p.defaultValue==null?"":p.defaultValue,P=p.checked!=null?p.checked:p.defaultChecked;h=Ia(p.value!=null?p.value:h),l._wrapperState={initialChecked:P,initialValue:h,controlled:p.type==="checkbox"||p.type==="radio"?p.checked!=null:p.value!=null}}function A_(l,p){p=p.checked,p!=null&&Se(l,"checked",p,!1)}function av(l,p){A_(l,p);var h=Ia(p.value),P=p.type;if(h!=null)P==="number"?(h===0&&l.value===""||l.value!=h)&&(l.value=""+h):l.value!==""+h&&(l.value=""+h);else if(P==="submit"||P==="reset"){l.removeAttribute("value");return}p.hasOwnProperty("value")?Au(l,p.type,h):p.hasOwnProperty("defaultValue")&&Au(l,p.type,Ia(p.defaultValue)),p.checked==null&&p.defaultChecked!=null&&(l.defaultChecked=!!p.defaultChecked)}function Jf(l,p,h){if(p.hasOwnProperty("value")||p.hasOwnProperty("defaultValue")){var P=p.type;if(!(P!=="submit"&&P!=="reset"||p.value!==void 0&&p.value!==null))return;p=""+l._wrapperState.initialValue,h||p===l.value||(l.value=p),l.defaultValue=p}h=l.name,h!==""&&(l.name=""),l.defaultChecked=!!l._wrapperState.initialChecked,h!==""&&(l.name=h)}function Au(l,p,h){(p!=="number"||ql(l.ownerDocument)!==l)&&(h==null?l.defaultValue=""+l._wrapperState.initialValue:l.defaultValue!==""+h&&(l.defaultValue=""+h))}function qT(l){var p="";return f.Children.forEach(l,function(h){h!=null&&(p+=h)}),p}function Q0(l,p){return l=m({children:void 0},p),(p=qT(p.children))&&(l.children=p),l}function Vc(l,p,h,P){if(l=l.options,p){p={};for(var F=0;F=h.length))throw Error(_(93));h=h[0]}p=h}p==null&&(p=""),h=p}l._wrapperState={initialValue:Ia(h)}}function M_(l,p){var h=Ia(p.value),P=Ia(p.defaultValue);h!=null&&(h=""+h,h!==l.value&&(l.value=h),p.defaultValue==null&&l.defaultValue!==h&&(l.defaultValue=h)),P!=null&&(l.defaultValue=""+P)}function sv(l){var p=l.textContent;p===l._wrapperState.initialValue&&p!==""&&p!==null&&(l.value=p)}var UT={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Aee(l){switch(l){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function $T(l,p){return l==null||l==="http://www.w3.org/1999/xhtml"?Aee(p):l==="http://www.w3.org/2000/svg"&&p==="foreignObject"?"http://www.w3.org/1999/xhtml":l}var T_,Mee=function(l){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(p,h,P,F){MSApp.execUnsafeLocalFunction(function(){return l(p,h,P,F)})}:l}(function(l,p){if(l.namespaceURI!==UT.svg||"innerHTML"in l)l.innerHTML=p;else{for(T_=T_||document.createElement("div"),T_.innerHTML=""+p.valueOf().toString()+"",p=T_.firstChild;l.firstChild;)l.removeChild(l.firstChild);for(;p.firstChild;)l.appendChild(p.firstChild)}});function uv(l,p){if(p){var h=l.firstChild;if(h&&h===l.lastChild&&h.nodeType===3){h.nodeValue=p;return}}l.textContent=p}var cv={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},z8e=["Webkit","ms","Moz","O"];Object.keys(cv).forEach(function(l){z8e.forEach(function(p){p=p+l.charAt(0).toUpperCase()+l.substring(1),cv[p]=cv[l]})});function Tee(l,p,h){return p==null||typeof p=="boolean"||p===""?"":h||typeof p!="number"||p===0||cv.hasOwnProperty(l)&&cv[l]?(""+p).trim():p+"px"}function Ree(l,p){l=l.style;for(var h in p)if(p.hasOwnProperty(h)){var P=h.indexOf("--")===0,F=Tee(h,p[h],P);h==="float"&&(h="cssFloat"),P?l.setProperty(h,F):l[h]=F}}var D8e=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function JT(l,p){if(p){if(D8e[l]&&(p.children!=null||p.dangerouslySetInnerHTML!=null))throw Error(_(137,l));if(p.dangerouslySetInnerHTML!=null){if(p.children!=null)throw Error(_(60));if(!(typeof p.dangerouslySetInnerHTML=="object"&&"__html"in p.dangerouslySetInnerHTML))throw Error(_(61))}if(p.style!=null&&typeof p.style!="object")throw Error(_(62))}}function GT(l,p){if(l.indexOf("-")===-1)return typeof p.is=="string";switch(l){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function XT(l){return l=l.target||l.srcElement||window,l.correspondingUseElement&&(l=l.correspondingUseElement),l.nodeType===3?l.parentNode:l}var KT=null,Z0=null,em=null;function zee(l){if(l=Pv(l)){if(typeof KT!="function")throw Error(_(280));var p=l.stateNode;p&&(p=Z_(p),KT(l.stateNode,l.type,p))}}function Dee(l){Z0?em?em.push(l):em=[l]:Z0=l}function Lee(){if(Z0){var l=Z0,p=em;if(em=Z0=null,zee(l),p)for(l=0;lP?0:1<h;h++)p.push(l);return p}function W_(l,p,h){l.pendingLanes|=p;var P=p-1;l.suspendedLanes&=P,l.pingedLanes&=P,l=l.eventTimes,p=31-Jc(p),l[p]=h}var Jc=Math.clz32?Math.clz32:Q8e,K8e=Math.log,Y8e=Math.LN2;function Q8e(l){return l===0?32:31-(K8e(l)/Y8e|0)|0}var Z8e=w.unstable_UserBlockingPriority,e9e=w.unstable_runWithPriority,B_=!0;function t9e(l,p,h,P){Gf||QT();var F=cR,J=Gf;Gf=!0;try{Nee(F,l,p,h,P)}finally{(Gf=J)||eR()}}function r9e(l,p,h,P){e9e(Z8e,cR.bind(null,l,p,h,P))}function cR(l,p,h,P){if(B_){var F;if((F=(p&4)===0)&&0=Ov),cte=String.fromCharCode(32),pte=!1;function fte(l,p){switch(l){case"keyup":return I9e.indexOf(p.keyCode)!==-1;case"keydown":return p.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function dte(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var am=!1;function E9e(l,p){switch(l){case"compositionend":return dte(p);case"keypress":return p.which!==32?null:(pte=!0,cte);case"textInput":return l=p.data,l===cte&&pte?null:l;default:return null}}function P9e(l,p){if(am)return l==="compositionend"||!yR&&fte(l,p)?(l=ote(),H_=fR=Gc=null,am=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(p.ctrlKey||p.altKey||p.metaKey)||p.ctrlKey&&p.altKey){if(p.char&&1=p)return{node:h,offset:p-l};l=P}e:{for(;h;){if(h.nextSibling){h=h.nextSibling;break e}h=h.parentNode}h=void 0}h=bte(h)}}function Ote(l,p){return l&&p?l===p?!0:l&&l.nodeType===3?!1:p&&p.nodeType===3?Ote(l,p.parentNode):"contains"in l?l.contains(p):l.compareDocumentPosition?!!(l.compareDocumentPosition(p)&16):!1:!1}function xte(){for(var l=window,p=ql();p instanceof l.HTMLIFrameElement;){try{var h=typeof p.contentWindow.location.href=="string"}catch{h=!1}if(h)l=p.contentWindow;else break;p=ql(l.document)}return p}function OR(l){var p=l&&l.nodeName&&l.nodeName.toLowerCase();return p&&(p==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||p==="textarea"||l.contentEditable==="true")}var N9e=B&&"documentMode"in document&&11>=document.documentMode,lm=null,xR=null,Iv=null,_R=!1;function _te(l,p,h){var P=h.window===h?h.document:h.nodeType===9?h:h.ownerDocument;_R||lm==null||lm!==ql(P)||(P=lm,"selectionStart"in P&&OR(P)?P={start:P.selectionStart,end:P.selectionEnd}:(P=(P.ownerDocument&&P.ownerDocument.defaultView||window).getSelection(),P={anchorNode:P.anchorNode,anchorOffset:P.anchorOffset,focusNode:P.focusNode,focusOffset:P.focusOffset}),Iv&&Sv(Iv,P)||(Iv=P,P=X_(xR,"onSelect"),0fm||(l.current=CR[fm],CR[fm]=null,fm--)}function $n(l,p){fm++,CR[fm]=l.current,l.current=p}var Yc={},gi=Kc(Yc),Zi=Kc(!1),Yf=Yc;function dm(l,p){var h=l.type.contextTypes;if(!h)return Yc;var P=l.stateNode;if(P&&P.__reactInternalMemoizedUnmaskedChildContext===p)return P.__reactInternalMemoizedMaskedChildContext;var F={},J;for(J in h)F[J]=p[J];return P&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=p,l.__reactInternalMemoizedMaskedChildContext=F),F}function ea(l){return l=l.childContextTypes,l!=null}function eS(){jn(Zi),jn(gi)}function Nte(l,p,h){if(gi.current!==Yc)throw Error(_(168));$n(gi,p),$n(Zi,h)}function Fte(l,p,h){var P=l.stateNode;if(l=p.childContextTypes,typeof P.getChildContext!="function")return h;P=P.getChildContext();for(var F in P)if(!(F in l))throw Error(_(108,Qi(p)||"Unknown",F));return m({},h,P)}function tS(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||Yc,Yf=gi.current,$n(gi,l),$n(Zi,Zi.current),!0}function Wte(l,p,h){var P=l.stateNode;if(!P)throw Error(_(169));h?(l=Fte(l,p,Yf),P.__reactInternalMemoizedMergedChildContext=l,jn(Zi),jn(gi),$n(gi,l)):jn(Zi),$n(Zi,h)}var AR=null,Qf=null,B9e=w.unstable_runWithPriority,MR=w.unstable_scheduleCallback,TR=w.unstable_cancelCallback,H9e=w.unstable_shouldYield,Bte=w.unstable_requestPaint,RR=w.unstable_now,V9e=w.unstable_getCurrentPriorityLevel,rS=w.unstable_ImmediatePriority,Hte=w.unstable_UserBlockingPriority,Vte=w.unstable_NormalPriority,qte=w.unstable_LowPriority,Ute=w.unstable_IdlePriority,zR={},q9e=Bte!==void 0?Bte:function(){},Mu=null,nS=null,DR=!1,$te=RR(),vi=1e4>$te?RR:function(){return RR()-$te};function mm(){switch(V9e()){case rS:return 99;case Hte:return 98;case Vte:return 97;case qte:return 96;case Ute:return 95;default:throw Error(_(332))}}function Jte(l){switch(l){case 99:return rS;case 98:return Hte;case 97:return Vte;case 96:return qte;case 95:return Ute;default:throw Error(_(332))}}function Zf(l,p){return l=Jte(l),B9e(l,p)}function kv(l,p,h){return l=Jte(l),MR(l,p,h)}function As(){if(nS!==null){var l=nS;nS=null,TR(l)}Gte()}function Gte(){if(!DR&&Mu!==null){DR=!0;var l=0;try{var p=Mu;Zf(99,function(){for(;lur?(Pr=It,It=null):Pr=It.sibling;var xr=Ke(ke,It,Ie[ur],He);if(xr===null){It===null&&(It=Pr);break}l&&It&&xr.alternate===null&&p(ke,It),ve=J(xr,ve,ur),sr===null?qe=xr:sr.sibling=xr,sr=xr,It=Pr}if(ur===Ie.length)return h(ke,It),qe;if(It===null){for(;urur?(Pr=It,It=null):Pr=It.sibling;var sp=Ke(ke,It,xr.value,He);if(sp===null){It===null&&(It=Pr);break}l&&It&&sp.alternate===null&&p(ke,It),ve=J(sp,ve,ur),sr===null?qe=sp:sr.sibling=sp,sr=sp,It=Pr}if(xr.done)return h(ke,It),qe;if(It===null){for(;!xr.done;ur++,xr=Ie.next())xr=ar(ke,xr.value,He),xr!==null&&(ve=J(xr,ve,ur),sr===null?qe=xr:sr.sibling=xr,sr=xr);return qe}for(It=P(ke,It);!xr.done;ur++,xr=Ie.next())xr=At(It,ke,ur,xr.value,He),xr!==null&&(l&&xr.alternate!==null&&It.delete(xr.key===null?ur:xr.key),ve=J(xr,ve,ur),sr===null?qe=xr:sr.sibling=xr,sr=xr);return l&&It.forEach(function(x_e){return p(ke,x_e)}),qe}return function(ke,ve,Ie,He){var qe=typeof Ie=="object"&&Ie!==null&&Ie.type===be&&Ie.key===null;qe&&(Ie=Ie.props.children);var sr=typeof Ie=="object"&&Ie!==null;if(sr)switch(Ie.$$typeof){case je:e:{for(sr=Ie.key,qe=ve;qe!==null;){if(qe.key===sr){switch(qe.tag){case 7:if(Ie.type===be){h(ke,qe.sibling),ve=F(qe,Ie.props.children),ve.return=ke,ke=ve;break e}break;default:if(qe.elementType===Ie.type){h(ke,qe.sibling),ve=F(qe,Ie.props),ve.ref=Av(ke,qe,Ie),ve.return=ke,ke=ve;break e}}h(ke,qe);break}else p(ke,qe);qe=qe.sibling}Ie.type===be?(ve=Sm(Ie.props.children,ke.mode,He,Ie.key),ve.return=ke,ke=ve):(He=PS(Ie.type,Ie.key,Ie.props,null,ke.mode,He),He.ref=Av(ke,ve,Ie),He.return=ke,ke=He)}return Z(ke);case ae:e:{for(qe=Ie.key;ve!==null;){if(ve.key===qe)if(ve.tag===4&&ve.stateNode.containerInfo===Ie.containerInfo&&ve.stateNode.implementation===Ie.implementation){h(ke,ve.sibling),ve=F(ve,Ie.children||[]),ve.return=ke,ke=ve;break e}else{h(ke,ve);break}else p(ke,ve);ve=ve.sibling}ve=_z(Ie,ke.mode,He),ve.return=ke,ke=ve}return Z(ke)}if(typeof Ie=="string"||typeof Ie=="number")return Ie=""+Ie,ve!==null&&ve.tag===6?(h(ke,ve.sibling),ve=F(ve,Ie),ve.return=ke,ke=ve):(h(ke,ve),ve=xz(Ie,ke.mode,He),ve.return=ke,ke=ve),Z(ke);if(uS(Ie))return or(ke,ve,Ie,He);if(wr(Ie))return Xt(ke,ve,Ie,He);if(sr&&cS(ke,Ie),typeof Ie>"u"&&!qe)switch(ke.tag){case 1:case 22:case 0:case 11:case 15:throw Error(_(152,Qi(ke.type)||"Component"))}return h(ke,ve)}}var pS=nre(!0),ore=nre(!1),Mv={},Ms=Kc(Mv),Tv=Kc(Mv),Rv=Kc(Mv);function ed(l){if(l===Mv)throw Error(_(174));return l}function BR(l,p){switch($n(Rv,p),$n(Tv,l),$n(Ms,Mv),l=p.nodeType,l){case 9:case 11:p=(p=p.documentElement)?p.namespaceURI:$T(null,"");break;default:l=l===8?p.parentNode:p,p=l.namespaceURI||null,l=l.tagName,p=$T(p,l)}jn(Ms),$n(Ms,p)}function vm(){jn(Ms),jn(Tv),jn(Rv)}function ire(l){ed(Rv.current);var p=ed(Ms.current),h=$T(p,l.type);p!==h&&($n(Tv,l),$n(Ms,h))}function HR(l){Tv.current===l&&(jn(Ms),jn(Tv))}var Jn=Kc(0);function fS(l){for(var p=l;p!==null;){if(p.tag===13){var h=p.memoizedState;if(h!==null&&(h=h.dehydrated,h===null||h.data==="$?"||h.data==="$!"))return p}else if(p.tag===19&&p.memoizedProps.revealOrder!==void 0){if(p.flags&64)return p}else if(p.child!==null){p.child.return=p,p=p.child;continue}if(p===l)break;for(;p.sibling===null;){if(p.return===null||p.return===l)return null;p=p.return}p.sibling.return=p.return,p=p.sibling}return null}var Tu=null,tp=null,Ts=!1;function are(l,p){var h=il(5,null,null,0);h.elementType="DELETED",h.type="DELETED",h.stateNode=p,h.return=l,h.flags=8,l.lastEffect!==null?(l.lastEffect.nextEffect=h,l.lastEffect=h):l.firstEffect=l.lastEffect=h}function lre(l,p){switch(l.tag){case 5:var h=l.type;return p=p.nodeType!==1||h.toLowerCase()!==p.nodeName.toLowerCase()?null:p,p!==null?(l.stateNode=p,!0):!1;case 6:return p=l.pendingProps===""||p.nodeType!==3?null:p,p!==null?(l.stateNode=p,!0):!1;case 13:return!1;default:return!1}}function VR(l){if(Ts){var p=tp;if(p){var h=p;if(!lre(l,p)){if(p=um(h.nextSibling),!p||!lre(l,p)){l.flags=l.flags&-1025|2,Ts=!1,Tu=l;return}are(Tu,h)}Tu=l,tp=um(p.firstChild)}else l.flags=l.flags&-1025|2,Ts=!1,Tu=l}}function sre(l){for(l=l.return;l!==null&&l.tag!==5&&l.tag!==3&&l.tag!==13;)l=l.return;Tu=l}function dS(l){if(l!==Tu)return!1;if(!Ts)return sre(l),Ts=!0,!1;var p=l.type;if(l.tag!==5||p!=="head"&&p!=="body"&&!ER(p,l.memoizedProps))for(p=tp;p;)are(l,p),p=um(p.nextSibling);if(sre(l),l.tag===13){if(l=l.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(_(317));e:{for(l=l.nextSibling,p=0;l;){if(l.nodeType===8){var h=l.data;if(h==="/$"){if(p===0){tp=um(l.nextSibling);break e}p--}else h!=="$"&&h!=="$!"&&h!=="$?"||p++}l=l.nextSibling}tp=null}}else tp=Tu?um(l.stateNode.nextSibling):null;return!0}function qR(){tp=Tu=null,Ts=!1}var ym=[];function UR(){for(var l=0;lJ))throw Error(_(301));J+=1,Yo=yi=null,p.updateQueue=null,zv.current=X9e,l=h(P,F)}while(Lv)}if(zv.current=yS,p=yi!==null&&yi.next!==null,Dv=0,Yo=yi=ro=null,mS=!1,p)throw Error(_(300));return l}function td(){var l={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Yo===null?ro.memoizedState=Yo=l:Yo=Yo.next=l,Yo}function rd(){if(yi===null){var l=ro.alternate;l=l!==null?l.memoizedState:null}else l=yi.next;var p=Yo===null?ro.memoizedState:Yo.next;if(p!==null)Yo=p,yi=l;else{if(l===null)throw Error(_(310));yi=l,l={memoizedState:yi.memoizedState,baseState:yi.baseState,baseQueue:yi.baseQueue,queue:yi.queue,next:null},Yo===null?ro.memoizedState=Yo=l:Yo=Yo.next=l}return Yo}function Rs(l,p){return typeof p=="function"?p(l):p}function Nv(l){var p=rd(),h=p.queue;if(h===null)throw Error(_(311));h.lastRenderedReducer=l;var P=yi,F=P.baseQueue,J=h.pending;if(J!==null){if(F!==null){var Z=F.next;F.next=J.next,J.next=Z}P.baseQueue=F=J,h.pending=null}if(F!==null){F=F.next,P=P.baseState;var se=Z=J=null,he=F;do{var De=he.lane;if((Dv&De)===De)se!==null&&(se=se.next={lane:0,action:he.action,eagerReducer:he.eagerReducer,eagerState:he.eagerState,next:null}),P=he.eagerReducer===l?he.eagerState:l(P,he.action);else{var vt={lane:De,action:he.action,eagerReducer:he.eagerReducer,eagerState:he.eagerState,next:null};se===null?(Z=se=vt,J=P):se=se.next=vt,ro.lanes|=De,Hv|=De}he=he.next}while(he!==null&&he!==F);se===null?J=P:se.next=Z,tl(P,p.memoizedState)||($l=!0),p.memoizedState=P,p.baseState=J,p.baseQueue=se,h.lastRenderedState=P}return[p.memoizedState,h.dispatch]}function Fv(l){var p=rd(),h=p.queue;if(h===null)throw Error(_(311));h.lastRenderedReducer=l;var P=h.dispatch,F=h.pending,J=p.memoizedState;if(F!==null){h.pending=null;var Z=F=F.next;do J=l(J,Z.action),Z=Z.next;while(Z!==F);tl(J,p.memoizedState)||($l=!0),p.memoizedState=J,p.baseQueue===null&&(p.baseState=J),h.lastRenderedState=J}return[J,P]}function ure(l,p,h){var P=p._getVersion;P=P(p._source);var F=p._workInProgressVersionPrimary;if(F!==null?l=F===P:(l=l.mutableReadLanes,(l=(Dv&l)===l)&&(p._workInProgressVersionPrimary=P,ym.push(p))),l)return h(p._source);throw ym.push(p),Error(_(350))}function cre(l,p,h,P){var F=zi;if(F===null)throw Error(_(349));var J=p._getVersion,Z=J(p._source),se=zv.current,he=se.useState(function(){return ure(F,p,h)}),De=he[1],vt=he[0];he=Yo;var ar=l.memoizedState,Ke=ar.refs,At=Ke.getSnapshot,or=ar.source;ar=ar.subscribe;var Xt=ro;return l.memoizedState={refs:Ke,source:p,subscribe:P},se.useEffect(function(){Ke.getSnapshot=h,Ke.setSnapshot=De;var ke=J(p._source);if(!tl(Z,ke)){ke=h(p._source),tl(vt,ke)||(De(ke),ke=np(Xt),F.mutableReadLanes|=ke&F.pendingLanes),ke=F.mutableReadLanes,F.entangledLanes|=ke;for(var ve=F.entanglements,Ie=ke;0h?98:h,function(){l(!0)}),Zf(97<\/script>",l=l.removeChild(l.firstChild)):typeof P.is=="string"?l=Z.createElement(h,{is:P.is}):(l=Z.createElement(h),h==="select"&&(Z=l,P.multiple?Z.multiple=!0:P.size&&(Z.size=P.size))):l=Z.createElementNS(l,h),l[Xc]=p,l[Q_]=P,Are(l,p,!1,!1),p.stateNode=l,Z=GT(h,P),h){case"dialog":In("cancel",l),In("close",l),F=P;break;case"iframe":case"object":case"embed":In("load",l),F=P;break;case"video":case"audio":for(F=0;Fdz&&(p.flags|=64,J=!0,Bv(P,!1),p.lanes=33554432)}else{if(!J)if(l=fS(Z),l!==null){if(p.flags|=64,J=!0,h=l.updateQueue,h!==null&&(p.updateQueue=h,p.flags|=4),Bv(P,!0),P.tail===null&&P.tailMode==="hidden"&&!Z.alternate&&!Ts)return p=p.lastEffect=P.lastEffect,p!==null&&(p.nextEffect=null),null}else 2*vi()-P.renderingStartTime>dz&&h!==1073741824&&(p.flags|=64,J=!0,Bv(P,!1),p.lanes=33554432);P.isBackwards?(Z.sibling=p.child,p.child=Z):(h=P.last,h!==null?h.sibling=Z:p.child=Z,P.last=Z)}return P.tail!==null?(h=P.tail,P.rendering=h,P.tail=h.sibling,P.lastEffect=p.lastEffect,P.renderingStartTime=vi(),h.sibling=null,p=Jn.current,$n(Jn,J?p&1|2:p&1),h):null;case 23:case 24:return bz(),l!==null&&l.memoizedState!==null!=(p.memoizedState!==null)&&P.mode!=="unstable-defer-without-hiding"&&(p.flags|=4),null}throw Error(_(156,p.tag))}function Q9e(l){switch(l.tag){case 1:ea(l.type)&&eS();var p=l.flags;return p&4096?(l.flags=p&-4097|64,l):null;case 3:if(vm(),jn(Zi),jn(gi),UR(),p=l.flags,p&64)throw Error(_(285));return l.flags=p&-4097|64,l;case 5:return HR(l),null;case 13:return jn(Jn),p=l.flags,p&4096?(l.flags=p&-4097|64,l):null;case 19:return jn(Jn),null;case 4:return vm(),null;case 10:return NR(l),null;case 23:case 24:return bz(),null;default:return null}}function nz(l,p){try{var h="",P=p;do h+=Uf(P),P=P.return;while(P);var F=h}catch(J){F=` +`+F[Z].replace(" at new "," at ");while(1<=Z&&0<=se);break}}}finally{bn=!1,Error.prepareStackTrace=h}return(l=l?l.displayName||l.name:"")?zn(l):""}function Jf(l){switch(l.tag){case 5:return zn(l.type);case 16:return zn("Lazy");case 13:return zn("Suspense");case 19:return zn("SuspenseList");case 0:case 2:case 15:return l=hi(l.type,!1),l;case 11:return l=hi(l.type.render,!1),l;case 22:return l=hi(l.type._render,!1),l;case 1:return l=hi(l.type,!0),l;default:return""}}function Qi(l){if(l==null)return null;if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case we:return"Fragment";case ae:return"Portal";case Te:return"Profiler";case Ce:return"StrictMode";case Mt:return"Suspense";case Lt:return"SuspenseList"}if(typeof l=="object")switch(l.$$typeof){case $e:return(l.displayName||"Context")+".Consumer";case We:return(l._context.displayName||"Context")+".Provider";case it:var p=l.render;return p=p.displayName||p.name||"",l.displayName||(p!==""?"ForwardRef("+p+")":"ForwardRef");case Gt:return Qi(l.type);case Ye:return Qi(l._render);case Ee:p=l._payload,l=l._init;try{return Qi(l(p))}catch{}}return null}function Ia(l){switch(typeof l){case"boolean":case"number":case"object":case"string":case"undefined":return l;default:return""}}function Gf(l){var p=l.type;return(l=l.nodeName)&&l.toLowerCase()==="input"&&(p==="checkbox"||p==="radio")}function ja(l){var p=Gf(l)?"checked":"value",h=Object.getOwnPropertyDescriptor(l.constructor.prototype,p),P=""+l[p];if(!l.hasOwnProperty(p)&&typeof h<"u"&&typeof h.get=="function"&&typeof h.set=="function"){var F=h.get,J=h.set;return Object.defineProperty(l,p,{configurable:!0,get:function(){return F.call(this)},set:function(Z){P=""+Z,J.call(this,Z)}}),Object.defineProperty(l,p,{enumerable:h.enumerable}),{getValue:function(){return P},setValue:function(Z){P=""+Z},stopTracking:function(){l._valueTracker=null,delete l[p]}}}}function Ko(l){l._valueTracker||(l._valueTracker=ja(l))}function Cs(l){if(!l)return!1;var p=l._valueTracker;if(!p)return!0;var h=p.getValue(),P="";return l&&(P=Gf(l)?l.checked?"true":"false":l.value),l=P,l!==h?(p.setValue(l),!0):!1}function Ul(l){if(l=l||(typeof document<"u"?document:void 0),typeof l>"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function Au(l,p){var h=p.checked;return m({},p,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:h??l._wrapperState.initialChecked})}function qc(l,p){var h=p.defaultValue==null?"":p.defaultValue,P=p.checked!=null?p.checked:p.defaultChecked;h=Ia(p.value!=null?p.value:h),l._wrapperState={initialChecked:P,initialValue:h,controlled:p.type==="checkbox"||p.type==="radio"?p.checked!=null:p.value!=null}}function M_(l,p){p=p.checked,p!=null&&Se(l,"checked",p,!1)}function sv(l,p){M_(l,p);var h=Ia(p.value),P=p.type;if(h!=null)P==="number"?(h===0&&l.value===""||l.value!=h)&&(l.value=""+h):l.value!==""+h&&(l.value=""+h);else if(P==="submit"||P==="reset"){l.removeAttribute("value");return}p.hasOwnProperty("value")?Mu(l,p.type,h):p.hasOwnProperty("defaultValue")&&Mu(l,p.type,Ia(p.defaultValue)),p.checked==null&&p.defaultChecked!=null&&(l.defaultChecked=!!p.defaultChecked)}function Xf(l,p,h){if(p.hasOwnProperty("value")||p.hasOwnProperty("defaultValue")){var P=p.type;if(!(P!=="submit"&&P!=="reset"||p.value!==void 0&&p.value!==null))return;p=""+l._wrapperState.initialValue,h||p===l.value||(l.value=p),l.defaultValue=p}h=l.name,h!==""&&(l.name=""),l.defaultChecked=!!l._wrapperState.initialChecked,h!==""&&(l.name=h)}function Mu(l,p,h){(p!=="number"||Ul(l.ownerDocument)!==l)&&(h==null?l.defaultValue=""+l._wrapperState.initialValue:l.defaultValue!==""+h&&(l.defaultValue=""+h))}function $T(l){var p="";return f.Children.forEach(l,function(h){h!=null&&(p+=h)}),p}function tm(l,p){return l=m({children:void 0},p),(p=$T(p.children))&&(l.children=p),l}function Uc(l,p,h,P){if(l=l.options,p){p={};for(var F=0;F=h.length))throw Error(_(93));h=h[0]}p=h}p==null&&(p=""),h=p}l._wrapperState={initialValue:Ia(h)}}function T_(l,p){var h=Ia(p.value),P=Ia(p.defaultValue);h!=null&&(h=""+h,h!==l.value&&(l.value=h),p.defaultValue==null&&l.defaultValue!==h&&(l.defaultValue=h)),P!=null&&(l.defaultValue=""+P)}function cv(l){var p=l.textContent;p===l._wrapperState.initialValue&&p!==""&&p!==null&&(l.value=p)}var JT={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Dee(l){switch(l){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function GT(l,p){return l==null||l==="http://www.w3.org/1999/xhtml"?Dee(p):l==="http://www.w3.org/2000/svg"&&p==="foreignObject"?"http://www.w3.org/1999/xhtml":l}var R_,Lee=function(l){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(p,h,P,F){MSApp.execUnsafeLocalFunction(function(){return l(p,h,P,F)})}:l}(function(l,p){if(l.namespaceURI!==JT.svg||"innerHTML"in l)l.innerHTML=p;else{for(R_=R_||document.createElement("div"),R_.innerHTML=""+p.valueOf().toString()+"",p=R_.firstChild;l.firstChild;)l.removeChild(l.firstChild);for(;p.firstChild;)l.appendChild(p.firstChild)}});function pv(l,p){if(p){var h=l.firstChild;if(h&&h===l.lastChild&&h.nodeType===3){h.nodeValue=p;return}}l.textContent=p}var fv={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},q8e=["Webkit","ms","Moz","O"];Object.keys(fv).forEach(function(l){q8e.forEach(function(p){p=p+l.charAt(0).toUpperCase()+l.substring(1),fv[p]=fv[l]})});function Nee(l,p,h){return p==null||typeof p=="boolean"||p===""?"":h||typeof p!="number"||p===0||fv.hasOwnProperty(l)&&fv[l]?(""+p).trim():p+"px"}function Fee(l,p){l=l.style;for(var h in p)if(p.hasOwnProperty(h)){var P=h.indexOf("--")===0,F=Nee(h,p[h],P);h==="float"&&(h="cssFloat"),P?l.setProperty(h,F):l[h]=F}}var U8e=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function XT(l,p){if(p){if(U8e[l]&&(p.children!=null||p.dangerouslySetInnerHTML!=null))throw Error(_(137,l));if(p.dangerouslySetInnerHTML!=null){if(p.children!=null)throw Error(_(60));if(!(typeof p.dangerouslySetInnerHTML=="object"&&"__html"in p.dangerouslySetInnerHTML))throw Error(_(61))}if(p.style!=null&&typeof p.style!="object")throw Error(_(62))}}function KT(l,p){if(l.indexOf("-")===-1)return typeof p.is=="string";switch(l){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function YT(l){return l=l.target||l.srcElement||window,l.correspondingUseElement&&(l=l.correspondingUseElement),l.nodeType===3?l.parentNode:l}var QT=null,rm=null,nm=null;function Wee(l){if(l=Cv(l)){if(typeof QT!="function")throw Error(_(280));var p=l.stateNode;p&&(p=eS(p),QT(l.stateNode,l.type,p))}}function Bee(l){rm?nm?nm.push(l):nm=[l]:rm=l}function Hee(){if(rm){var l=rm,p=nm;if(nm=rm=null,Wee(l),p)for(l=0;lP?0:1<h;h++)p.push(l);return p}function B_(l,p,h){l.pendingLanes|=p;var P=p-1;l.suspendedLanes&=P,l.pingedLanes&=P,l=l.eventTimes,p=31-Xc(p),l[p]=h}var Xc=Math.clz32?Math.clz32:l9e,i9e=Math.log,a9e=Math.LN2;function l9e(l){return l===0?32:31-(i9e(l)/a9e|0)|0}var s9e=w.unstable_UserBlockingPriority,u9e=w.unstable_runWithPriority,H_=!0;function c9e(l,p,h,P){Kf||eR();var F=fR,J=Kf;Kf=!0;try{Vee(F,l,p,h,P)}finally{(Kf=J)||rR()}}function p9e(l,p,h,P){u9e(s9e,fR.bind(null,l,p,h,P))}function fR(l,p,h,P){if(H_){var F;if((F=(p&4)===0)&&0=_v),hte=String.fromCharCode(32),gte=!1;function vte(l,p){switch(l){case"keyup":return R9e.indexOf(p.keyCode)!==-1;case"keydown":return p.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yte(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var um=!1;function D9e(l,p){switch(l){case"compositionend":return yte(p);case"keypress":return p.which!==32?null:(gte=!0,hte);case"textInput":return l=p.data,l===hte&>e?null:l;default:return null}}function L9e(l,p){if(um)return l==="compositionend"||!wR&&vte(l,p)?(l=ute(),V_=mR=Kc=null,um=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(p.ctrlKey||p.altKey||p.metaKey)||p.ctrlKey&&p.altKey){if(p.char&&1=p)return{node:h,offset:p-l};l=P}e:{for(;h;){if(h.nextSibling){h=h.nextSibling;break e}h=h.parentNode}h=void 0}h=Ste(h)}}function jte(l,p){return l&&p?l===p?!0:l&&l.nodeType===3?!1:p&&p.nodeType===3?jte(l,p.parentNode):"contains"in l?l.contains(p):l.compareDocumentPosition?!!(l.compareDocumentPosition(p)&16):!1:!1}function Ete(){for(var l=window,p=Ul();p instanceof l.HTMLIFrameElement;){try{var h=typeof p.contentWindow.location.href=="string"}catch{h=!1}if(h)l=p.contentWindow;else break;p=Ul(l.document)}return p}function _R(l){var p=l&&l.nodeName&&l.nodeName.toLowerCase();return p&&(p==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||p==="textarea"||l.contentEditable==="true")}var J9e=H&&"documentMode"in document&&11>=document.documentMode,cm=null,SR=null,Ev=null,IR=!1;function Pte(l,p,h){var P=h.window===h?h.document:h.nodeType===9?h:h.ownerDocument;IR||cm==null||cm!==Ul(P)||(P=cm,"selectionStart"in P&&_R(P)?P={start:P.selectionStart,end:P.selectionEnd}:(P=(P.ownerDocument&&P.ownerDocument.defaultView||window).getSelection(),P={anchorNode:P.anchorNode,anchorOffset:P.anchorOffset,focusNode:P.focusNode,focusOffset:P.focusOffset}),Ev&&jv(Ev,P)||(Ev=P,P=K_(SR,"onSelect"),0hm||(l.current=MR[hm],MR[hm]=null,hm--)}function $n(l,p){hm++,MR[hm]=l.current,l.current=p}var Zc={},gi=Qc(Zc),Zi=Qc(!1),Zf=Zc;function gm(l,p){var h=l.type.contextTypes;if(!h)return Zc;var P=l.stateNode;if(P&&P.__reactInternalMemoizedUnmaskedChildContext===p)return P.__reactInternalMemoizedMaskedChildContext;var F={},J;for(J in h)F[J]=p[J];return P&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=p,l.__reactInternalMemoizedMaskedChildContext=F),F}function ea(l){return l=l.childContextTypes,l!=null}function tS(){jn(Zi),jn(gi)}function Vte(l,p,h){if(gi.current!==Zc)throw Error(_(168));$n(gi,p),$n(Zi,h)}function qte(l,p,h){var P=l.stateNode;if(l=p.childContextTypes,typeof P.getChildContext!="function")return h;P=P.getChildContext();for(var F in P)if(!(F in l))throw Error(_(108,Qi(p)||"Unknown",F));return m({},h,P)}function rS(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||Zc,Zf=gi.current,$n(gi,l),$n(Zi,Zi.current),!0}function Ute(l,p,h){var P=l.stateNode;if(!P)throw Error(_(169));h?(l=qte(l,p,Zf),P.__reactInternalMemoizedMergedChildContext=l,jn(Zi),jn(gi),$n(gi,l)):jn(Zi),$n(Zi,h)}var TR=null,ed=null,K9e=w.unstable_runWithPriority,RR=w.unstable_scheduleCallback,zR=w.unstable_cancelCallback,Y9e=w.unstable_shouldYield,$te=w.unstable_requestPaint,DR=w.unstable_now,Q9e=w.unstable_getCurrentPriorityLevel,nS=w.unstable_ImmediatePriority,Jte=w.unstable_UserBlockingPriority,Gte=w.unstable_NormalPriority,Xte=w.unstable_LowPriority,Kte=w.unstable_IdlePriority,LR={},Z9e=$te!==void 0?$te:function(){},Tu=null,oS=null,NR=!1,Yte=DR(),vi=1e4>Yte?DR:function(){return DR()-Yte};function vm(){switch(Q9e()){case nS:return 99;case Jte:return 98;case Gte:return 97;case Xte:return 96;case Kte:return 95;default:throw Error(_(332))}}function Qte(l){switch(l){case 99:return nS;case 98:return Jte;case 97:return Gte;case 96:return Xte;case 95:return Kte;default:throw Error(_(332))}}function td(l,p){return l=Qte(l),K9e(l,p)}function Av(l,p,h){return l=Qte(l),RR(l,p,h)}function Ms(){if(oS!==null){var l=oS;oS=null,zR(l)}Zte()}function Zte(){if(!NR&&Tu!==null){NR=!0;var l=0;try{var p=Tu;td(99,function(){for(;lur?(Pr=It,It=null):Pr=It.sibling;var xr=Xe(ke,It,Ie[ur],Ve);if(xr===null){It===null&&(It=Pr);break}l&&It&&xr.alternate===null&&p(ke,It),ge=J(xr,ge,ur),sr===null?Ue=xr:sr.sibling=xr,sr=xr,It=Pr}if(ur===Ie.length)return h(ke,It),Ue;if(It===null){for(;urur?(Pr=It,It=null):Pr=It.sibling;var cp=Xe(ke,It,xr.value,Ve);if(cp===null){It===null&&(It=Pr);break}l&&It&&cp.alternate===null&&p(ke,It),ge=J(cp,ge,ur),sr===null?Ue=cp:sr.sibling=cp,sr=cp,It=Pr}if(xr.done)return h(ke,It),Ue;if(It===null){for(;!xr.done;ur++,xr=Ie.next())xr=ar(ke,xr.value,Ve),xr!==null&&(ge=J(xr,ge,ur),sr===null?Ue=xr:sr.sibling=xr,sr=xr);return Ue}for(It=P(ke,It);!xr.done;ur++,xr=Ie.next())xr=At(It,ke,ur,xr.value,Ve),xr!==null&&(l&&xr.alternate!==null&&It.delete(xr.key===null?ur:xr.key),ge=J(xr,ge,ur),sr===null?Ue=xr:sr.sibling=xr,sr=xr);return l&&It.forEach(function(A_e){return p(ke,A_e)}),Ue}return function(ke,ge,Ie,Ve){var Ue=typeof Ie=="object"&&Ie!==null&&Ie.type===we&&Ie.key===null;Ue&&(Ie=Ie.props.children);var sr=typeof Ie=="object"&&Ie!==null;if(sr)switch(Ie.$$typeof){case je:e:{for(sr=Ie.key,Ue=ge;Ue!==null;){if(Ue.key===sr){switch(Ue.tag){case 7:if(Ie.type===we){h(ke,Ue.sibling),ge=F(Ue,Ie.props.children),ge.return=ke,ke=ge;break e}break;default:if(Ue.elementType===Ie.type){h(ke,Ue.sibling),ge=F(Ue,Ie.props),ge.ref=Tv(ke,Ue,Ie),ge.return=ke,ke=ge;break e}}h(ke,Ue);break}else p(ke,Ue);Ue=Ue.sibling}Ie.type===we?(ge=Em(Ie.props.children,ke.mode,Ve,Ie.key),ge.return=ke,ke=ge):(Ve=kS(Ie.type,Ie.key,Ie.props,null,ke.mode,Ve),Ve.ref=Tv(ke,ge,Ie),Ve.return=ke,ke=Ve)}return Z(ke);case ae:e:{for(Ue=Ie.key;ge!==null;){if(ge.key===Ue)if(ge.tag===4&&ge.stateNode.containerInfo===Ie.containerInfo&&ge.stateNode.implementation===Ie.implementation){h(ke,ge.sibling),ge=F(ge,Ie.children||[]),ge.return=ke,ke=ge;break e}else{h(ke,ge);break}else p(ke,ge);ge=ge.sibling}ge=Iz(Ie,ke.mode,Ve),ge.return=ke,ke=ge}return Z(ke)}if(typeof Ie=="string"||typeof Ie=="number")return Ie=""+Ie,ge!==null&&ge.tag===6?(h(ke,ge.sibling),ge=F(ge,Ie),ge.return=ke,ke=ge):(h(ke,ge),ge=Sz(Ie,ke.mode,Ve),ge.return=ke,ke=ge),Z(ke);if(cS(Ie))return or(ke,ge,Ie,Ve);if(wr(Ie))return Xt(ke,ge,Ie,Ve);if(sr&&pS(ke,Ie),typeof Ie>"u"&&!Ue)switch(ke.tag){case 1:case 22:case 0:case 11:case 15:throw Error(_(152,Qi(ke.type)||"Component"))}return h(ke,ge)}}var fS=sre(!0),ure=sre(!1),Rv={},Ts=Qc(Rv),zv=Qc(Rv),Dv=Qc(Rv);function rd(l){if(l===Rv)throw Error(_(174));return l}function VR(l,p){switch($n(Dv,p),$n(zv,l),$n(Ts,Rv),l=p.nodeType,l){case 9:case 11:p=(p=p.documentElement)?p.namespaceURI:GT(null,"");break;default:l=l===8?p.parentNode:p,p=l.namespaceURI||null,l=l.tagName,p=GT(p,l)}jn(Ts),$n(Ts,p)}function wm(){jn(Ts),jn(zv),jn(Dv)}function cre(l){rd(Dv.current);var p=rd(Ts.current),h=GT(p,l.type);p!==h&&($n(zv,l),$n(Ts,h))}function qR(l){zv.current===l&&(jn(Ts),jn(zv))}var Jn=Qc(0);function dS(l){for(var p=l;p!==null;){if(p.tag===13){var h=p.memoizedState;if(h!==null&&(h=h.dehydrated,h===null||h.data==="$?"||h.data==="$!"))return p}else if(p.tag===19&&p.memoizedProps.revealOrder!==void 0){if(p.flags&64)return p}else if(p.child!==null){p.child.return=p,p=p.child;continue}if(p===l)break;for(;p.sibling===null;){if(p.return===null||p.return===l)return null;p=p.return}p.sibling.return=p.return,p=p.sibling}return null}var Ru=null,np=null,Rs=!1;function pre(l,p){var h=ll(5,null,null,0);h.elementType="DELETED",h.type="DELETED",h.stateNode=p,h.return=l,h.flags=8,l.lastEffect!==null?(l.lastEffect.nextEffect=h,l.lastEffect=h):l.firstEffect=l.lastEffect=h}function fre(l,p){switch(l.tag){case 5:var h=l.type;return p=p.nodeType!==1||h.toLowerCase()!==p.nodeName.toLowerCase()?null:p,p!==null?(l.stateNode=p,!0):!1;case 6:return p=l.pendingProps===""||p.nodeType!==3?null:p,p!==null?(l.stateNode=p,!0):!1;case 13:return!1;default:return!1}}function UR(l){if(Rs){var p=np;if(p){var h=p;if(!fre(l,p)){if(p=fm(h.nextSibling),!p||!fre(l,p)){l.flags=l.flags&-1025|2,Rs=!1,Ru=l;return}pre(Ru,h)}Ru=l,np=fm(p.firstChild)}else l.flags=l.flags&-1025|2,Rs=!1,Ru=l}}function dre(l){for(l=l.return;l!==null&&l.tag!==5&&l.tag!==3&&l.tag!==13;)l=l.return;Ru=l}function mS(l){if(l!==Ru)return!1;if(!Rs)return dre(l),Rs=!0,!1;var p=l.type;if(l.tag!==5||p!=="head"&&p!=="body"&&!kR(p,l.memoizedProps))for(p=np;p;)pre(l,p),p=fm(p.nextSibling);if(dre(l),l.tag===13){if(l=l.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(_(317));e:{for(l=l.nextSibling,p=0;l;){if(l.nodeType===8){var h=l.data;if(h==="/$"){if(p===0){np=fm(l.nextSibling);break e}p--}else h!=="$"&&h!=="$!"&&h!=="$?"||p++}l=l.nextSibling}np=null}}else np=Ru?fm(l.stateNode.nextSibling):null;return!0}function $R(){np=Ru=null,Rs=!1}var Om=[];function JR(){for(var l=0;lJ))throw Error(_(301));J+=1,Yo=yi=null,p.updateQueue=null,Lv.current=o_e,l=h(P,F)}while(Fv)}if(Lv.current=bS,p=yi!==null&&yi.next!==null,Nv=0,Yo=yi=ro=null,hS=!1,p)throw Error(_(300));return l}function nd(){var l={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Yo===null?ro.memoizedState=Yo=l:Yo=Yo.next=l,Yo}function od(){if(yi===null){var l=ro.alternate;l=l!==null?l.memoizedState:null}else l=yi.next;var p=Yo===null?ro.memoizedState:Yo.next;if(p!==null)Yo=p,yi=l;else{if(l===null)throw Error(_(310));yi=l,l={memoizedState:yi.memoizedState,baseState:yi.baseState,baseQueue:yi.baseQueue,queue:yi.queue,next:null},Yo===null?ro.memoizedState=Yo=l:Yo=Yo.next=l}return Yo}function zs(l,p){return typeof p=="function"?p(l):p}function Wv(l){var p=od(),h=p.queue;if(h===null)throw Error(_(311));h.lastRenderedReducer=l;var P=yi,F=P.baseQueue,J=h.pending;if(J!==null){if(F!==null){var Z=F.next;F.next=J.next,J.next=Z}P.baseQueue=F=J,h.pending=null}if(F!==null){F=F.next,P=P.baseState;var se=Z=J=null,me=F;do{var Le=me.lane;if((Nv&Le)===Le)se!==null&&(se=se.next={lane:0,action:me.action,eagerReducer:me.eagerReducer,eagerState:me.eagerState,next:null}),P=me.eagerReducer===l?me.eagerState:l(P,me.action);else{var vt={lane:Le,action:me.action,eagerReducer:me.eagerReducer,eagerState:me.eagerState,next:null};se===null?(Z=se=vt,J=P):se=se.next=vt,ro.lanes|=Le,qv|=Le}me=me.next}while(me!==null&&me!==F);se===null?J=P:se.next=Z,nl(P,p.memoizedState)||(Jl=!0),p.memoizedState=P,p.baseState=J,p.baseQueue=se,h.lastRenderedState=P}return[p.memoizedState,h.dispatch]}function Bv(l){var p=od(),h=p.queue;if(h===null)throw Error(_(311));h.lastRenderedReducer=l;var P=h.dispatch,F=h.pending,J=p.memoizedState;if(F!==null){h.pending=null;var Z=F=F.next;do J=l(J,Z.action),Z=Z.next;while(Z!==F);nl(J,p.memoizedState)||(Jl=!0),p.memoizedState=J,p.baseQueue===null&&(p.baseState=J),h.lastRenderedState=J}return[J,P]}function mre(l,p,h){var P=p._getVersion;P=P(p._source);var F=p._workInProgressVersionPrimary;if(F!==null?l=F===P:(l=l.mutableReadLanes,(l=(Nv&l)===l)&&(p._workInProgressVersionPrimary=P,Om.push(p))),l)return h(p._source);throw Om.push(p),Error(_(350))}function hre(l,p,h,P){var F=zi;if(F===null)throw Error(_(349));var J=p._getVersion,Z=J(p._source),se=Lv.current,me=se.useState(function(){return mre(F,p,h)}),Le=me[1],vt=me[0];me=Yo;var ar=l.memoizedState,Xe=ar.refs,At=Xe.getSnapshot,or=ar.source;ar=ar.subscribe;var Xt=ro;return l.memoizedState={refs:Xe,source:p,subscribe:P},se.useEffect(function(){Xe.getSnapshot=h,Xe.setSnapshot=Le;var ke=J(p._source);if(!nl(Z,ke)){ke=h(p._source),nl(vt,ke)||(Le(ke),ke=ip(Xt),F.mutableReadLanes|=ke&F.pendingLanes),ke=F.mutableReadLanes,F.entangledLanes|=ke;for(var ge=F.entanglements,Ie=ke;0h?98:h,function(){l(!0)}),td(97<\/script>",l=l.removeChild(l.firstChild)):typeof P.is=="string"?l=Z.createElement(h,{is:P.is}):(l=Z.createElement(h),h==="select"&&(Z=l,P.multiple?Z.multiple=!0:P.size&&(Z.size=P.size))):l=Z.createElementNS(l,h),l[Yc]=p,l[Z_]=P,Dre(l,p,!1,!1),p.stateNode=l,Z=KT(h,P),h){case"dialog":In("cancel",l),In("close",l),F=P;break;case"iframe":case"object":case"embed":In("load",l),F=P;break;case"video":case"audio":for(F=0;Fhz&&(p.flags|=64,J=!0,Vv(P,!1),p.lanes=33554432)}else{if(!J)if(l=dS(Z),l!==null){if(p.flags|=64,J=!0,h=l.updateQueue,h!==null&&(p.updateQueue=h,p.flags|=4),Vv(P,!0),P.tail===null&&P.tailMode==="hidden"&&!Z.alternate&&!Rs)return p=p.lastEffect=P.lastEffect,p!==null&&(p.nextEffect=null),null}else 2*vi()-P.renderingStartTime>hz&&h!==1073741824&&(p.flags|=64,J=!0,Vv(P,!1),p.lanes=33554432);P.isBackwards?(Z.sibling=p.child,p.child=Z):(h=P.last,h!==null?h.sibling=Z:p.child=Z,P.last=Z)}return P.tail!==null?(h=P.tail,P.rendering=h,P.tail=h.sibling,P.lastEffect=p.lastEffect,P.renderingStartTime=vi(),h.sibling=null,p=Jn.current,$n(Jn,J?p&1|2:p&1),h):null;case 23:case 24:return Oz(),l!==null&&l.memoizedState!==null!=(p.memoizedState!==null)&&P.mode!=="unstable-defer-without-hiding"&&(p.flags|=4),null}throw Error(_(156,p.tag))}function l_e(l){switch(l.tag){case 1:ea(l.type)&&tS();var p=l.flags;return p&4096?(l.flags=p&-4097|64,l):null;case 3:if(wm(),jn(Zi),jn(gi),JR(),p=l.flags,p&64)throw Error(_(285));return l.flags=p&-4097|64,l;case 5:return qR(l),null;case 13:return jn(Jn),p=l.flags,p&4096?(l.flags=p&-4097|64,l):null;case 19:return jn(Jn),null;case 4:return wm(),null;case 10:return WR(l),null;case 23:case 24:return Oz(),null;default:return null}}function iz(l,p){try{var h="",P=p;do h+=Jf(P),P=P.return;while(P);var F=h}catch(J){F=` Error generating stack: `+J.message+` -`+J.stack}return{value:l,source:p,stack:F}}function oz(l,p){try{console.error(p.value)}catch(h){setTimeout(function(){throw h})}}var Z9e=typeof WeakMap=="function"?WeakMap:Map;function Rre(l,p,h){h=Zc(-1,h),h.tag=3,h.payload={element:null};var P=p.value;return h.callback=function(){xS||(xS=!0,mz=P),oz(l,p)},h}function zre(l,p,h){h=Zc(-1,h),h.tag=3;var P=l.type.getDerivedStateFromError;if(typeof P=="function"){var F=p.value;h.payload=function(){return oz(l,p),P(F)}}var J=l.stateNode;return J!==null&&typeof J.componentDidCatch=="function"&&(h.callback=function(){typeof P!="function"&&(zs===null?zs=new Set([this]):zs.add(this),oz(l,p));var Z=p.stack;this.componentDidCatch(p.value,{componentStack:Z!==null?Z:""})}),h}var e_e=typeof WeakSet=="function"?WeakSet:Set;function Dre(l){var p=l.ref;if(p!==null)if(typeof p=="function")try{p(null)}catch(h){ap(l,h)}else p.current=null}function t_e(l,p){switch(p.tag){case 0:case 11:case 15:case 22:return;case 1:if(p.flags&256&&l!==null){var h=l.memoizedProps,P=l.memoizedState;l=p.stateNode,p=l.getSnapshotBeforeUpdate(p.elementType===p.type?h:Ul(p.type,h),P),l.__reactInternalSnapshotBeforeUpdate=p}return;case 3:p.flags&256&&PR(p.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(_(163))}function r_e(l,p,h){switch(h.tag){case 0:case 11:case 15:case 22:if(p=h.updateQueue,p=p!==null?p.lastEffect:null,p!==null){l=p=p.next;do{if((l.tag&3)===3){var P=l.create;l.destroy=P()}l=l.next}while(l!==p)}if(p=h.updateQueue,p=p!==null?p.lastEffect:null,p!==null){l=p=p.next;do{var F=l;P=F.next,F=F.tag,F&4&&F&1&&(Yre(h,l),c_e(h,l)),l=P}while(l!==p)}return;case 1:l=h.stateNode,h.flags&4&&(p===null?l.componentDidMount():(P=h.elementType===h.type?p.memoizedProps:Ul(h.type,p.memoizedProps),l.componentDidUpdate(P,p.memoizedState,l.__reactInternalSnapshotBeforeUpdate))),p=h.updateQueue,p!==null&&Qte(h,p,l);return;case 3:if(p=h.updateQueue,p!==null){if(l=null,h.child!==null)switch(h.child.tag){case 5:l=h.child.stateNode;break;case 1:l=h.child.stateNode}Qte(h,p,l)}return;case 5:l=h.stateNode,p===null&&h.flags&4&&Tte(h.type,h.memoizedProps)&&l.focus();return;case 6:return;case 4:return;case 12:return;case 13:h.memoizedState===null&&(h=h.alternate,h!==null&&(h=h.memoizedState,h!==null&&(h=h.dehydrated,h!==null&&Kee(h))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(_(163))}function Lre(l,p){for(var h=l;;){if(h.tag===5){var P=h.stateNode;if(p)P=P.style,typeof P.setProperty=="function"?P.setProperty("display","none","important"):P.display="none";else{P=h.stateNode;var F=h.memoizedProps.style;F=F!=null&&F.hasOwnProperty("display")?F.display:null,P.style.display=Tee("display",F)}}else if(h.tag===6)h.stateNode.nodeValue=p?"":h.memoizedProps;else if((h.tag!==23&&h.tag!==24||h.memoizedState===null||h===l)&&h.child!==null){h.child.return=h,h=h.child;continue}if(h===l)break;for(;h.sibling===null;){if(h.return===null||h.return===l)return;h=h.return}h.sibling.return=h.return,h=h.sibling}}function Nre(l,p){if(Qf&&typeof Qf.onCommitFiberUnmount=="function")try{Qf.onCommitFiberUnmount(AR,p)}catch{}switch(p.tag){case 0:case 11:case 14:case 15:case 22:if(l=p.updateQueue,l!==null&&(l=l.lastEffect,l!==null)){var h=l=l.next;do{var P=h,F=P.destroy;if(P=P.tag,F!==void 0)if(P&4)Yre(p,h);else{P=p;try{F()}catch(J){ap(P,J)}}h=h.next}while(h!==l)}break;case 1:if(Dre(p),l=p.stateNode,typeof l.componentWillUnmount=="function")try{l.props=p.memoizedProps,l.state=p.memoizedState,l.componentWillUnmount()}catch(J){ap(p,J)}break;case 5:Dre(p);break;case 4:Hre(l,p)}}function Fre(l){l.alternate=null,l.child=null,l.dependencies=null,l.firstEffect=null,l.lastEffect=null,l.memoizedProps=null,l.memoizedState=null,l.pendingProps=null,l.return=null,l.updateQueue=null}function Wre(l){return l.tag===5||l.tag===3||l.tag===4}function Bre(l){e:{for(var p=l.return;p!==null;){if(Wre(p))break e;p=p.return}throw Error(_(160))}var h=p;switch(p=h.stateNode,h.tag){case 5:var P=!1;break;case 3:p=p.containerInfo,P=!0;break;case 4:p=p.containerInfo,P=!0;break;default:throw Error(_(161))}h.flags&16&&(uv(p,""),h.flags&=-17);e:t:for(h=l;;){for(;h.sibling===null;){if(h.return===null||Wre(h.return)){h=null;break e}h=h.return}for(h.sibling.return=h.return,h=h.sibling;h.tag!==5&&h.tag!==6&&h.tag!==18;){if(h.flags&2||h.child===null||h.tag===4)continue t;h.child.return=h,h=h.child}if(!(h.flags&2)){h=h.stateNode;break e}}P?iz(l,h,p):az(l,h,p)}function iz(l,p,h){var P=l.tag,F=P===5||P===6;if(F)l=F?l.stateNode:l.stateNode.instance,p?h.nodeType===8?h.parentNode.insertBefore(l,p):h.insertBefore(l,p):(h.nodeType===8?(p=h.parentNode,p.insertBefore(l,h)):(p=h,p.appendChild(l)),h=h._reactRootContainer,h!=null||p.onclick!==null||(p.onclick=K_));else if(P!==4&&(l=l.child,l!==null))for(iz(l,p,h),l=l.sibling;l!==null;)iz(l,p,h),l=l.sibling}function az(l,p,h){var P=l.tag,F=P===5||P===6;if(F)l=F?l.stateNode:l.stateNode.instance,p?h.insertBefore(l,p):h.appendChild(l);else if(P!==4&&(l=l.child,l!==null))for(az(l,p,h),l=l.sibling;l!==null;)az(l,p,h),l=l.sibling}function Hre(l,p){for(var h=p,P=!1,F,J;;){if(!P){P=h.return;e:for(;;){if(P===null)throw Error(_(160));switch(F=P.stateNode,P.tag){case 5:J=!1;break e;case 3:F=F.containerInfo,J=!0;break e;case 4:F=F.containerInfo,J=!0;break e}P=P.return}P=!0}if(h.tag===5||h.tag===6){e:for(var Z=l,se=h,he=se;;)if(Nre(Z,he),he.child!==null&&he.tag!==4)he.child.return=he,he=he.child;else{if(he===se)break e;for(;he.sibling===null;){if(he.return===null||he.return===se)break e;he=he.return}he.sibling.return=he.return,he=he.sibling}J?(Z=F,se=h.stateNode,Z.nodeType===8?Z.parentNode.removeChild(se):Z.removeChild(se)):F.removeChild(h.stateNode)}else if(h.tag===4){if(h.child!==null){F=h.stateNode.containerInfo,J=!0,h.child.return=h,h=h.child;continue}}else if(Nre(l,h),h.child!==null){h.child.return=h,h=h.child;continue}if(h===p)break;for(;h.sibling===null;){if(h.return===null||h.return===p)return;h=h.return,h.tag===4&&(P=!1)}h.sibling.return=h.return,h=h.sibling}}function lz(l,p){switch(p.tag){case 0:case 11:case 14:case 15:case 22:var h=p.updateQueue;if(h=h!==null?h.lastEffect:null,h!==null){var P=h=h.next;do(P.tag&3)===3&&(l=P.destroy,P.destroy=void 0,l!==void 0&&l()),P=P.next;while(P!==h)}return;case 1:return;case 5:if(h=p.stateNode,h!=null){P=p.memoizedProps;var F=l!==null?l.memoizedProps:P;l=p.type;var J=p.updateQueue;if(p.updateQueue=null,J!==null){for(h[Q_]=P,l==="input"&&P.type==="radio"&&P.name!=null&&A_(h,P),GT(l,F),p=GT(l,P),F=0;FF&&(F=Z),h&=~J}if(h=F,h=vi()-h,h=(120>h?120:480>h?480:1080>h?1080:1920>h?1920:3e3>h?3e3:4320>h?4320:1960*o_e(h/1960))-h,10F&&(F=Z),h&=~J}if(h=F,h=vi()-h,h=(120>h?120:480>h?480:1080>h?1080:1920>h?1920:3e3>h?3e3:4320>h?4320:1960*d_e(h/1960))-h,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Qo!==5&&(Qo=2),he=nz(he,se),Ke=Z;do{switch(Ke.tag){case 3:J=he,Ke.flags|=4096,p&=-p,Ke.lanes|=p;var sr=Rre(Ke,J,p);Yte(Ke,sr);break e;case 1:J=he;var It=Ke.type,ur=Ke.stateNode;if(!(Ke.flags&64)&&(typeof It.getDerivedStateFromError=="function"||ur!==null&&typeof ur.componentDidCatch=="function"&&(zs===null||!zs.has(ur)))){Ke.flags|=4096,p&=-p,Ke.lanes|=p;var Pr=zre(Ke,J,p);Yte(Ke,Pr);break e}}Ke=Ke.return}while(Ke!==null)}Kre(h)}catch(xr){p=xr,Io===h&&h!==null&&(Io=h=h.return);continue}break}while(1)}function Gre(){var l=wS.current;return wS.current=yS,l===null?yS:l}function Jv(l,p){var h=nr;nr|=16;var P=Gre();zi===l&&bi===p||_m(l,p);do try{a_e();break}catch(F){Jre(l,F)}while(1);if(LR(),nr=h,wS.current=P,Io!==null)throw Error(_(261));return zi=null,bi=0,Qo}function a_e(){for(;Io!==null;)Xre(Io)}function l_e(){for(;Io!==null&&!H9e();)Xre(Io)}function Xre(l){var p=Zre(l.alternate,l,nd);l.memoizedProps=l.pendingProps,p===null?Kre(l):Io=p,sz.current=null}function Kre(l){var p=l;do{var h=p.alternate;if(l=p.return,p.flags&2048){if(h=Q9e(p),h!==null){h.flags&=2047,Io=h;return}l!==null&&(l.firstEffect=l.lastEffect=null,l.flags|=2048)}else{if(h=Y9e(h,p,nd),h!==null){Io=h;return}if(h=p,h.tag!==24&&h.tag!==23||h.memoizedState===null||nd&1073741824||!(h.mode&4)){for(var P=0,F=h.child;F!==null;)P|=F.lanes|F.childLanes,F=F.sibling;h.childLanes=P}l!==null&&!(l.flags&2048)&&(l.firstEffect===null&&(l.firstEffect=p.firstEffect),p.lastEffect!==null&&(l.lastEffect!==null&&(l.lastEffect.nextEffect=p.firstEffect),l.lastEffect=p.lastEffect),1Z&&(se=Z,Z=sr,sr=se),se=wte(Ie,sr),J=wte(Ie,Z),se&&J&&(qe.rangeCount!==1||qe.anchorNode!==se.node||qe.anchorOffset!==se.offset||qe.focusNode!==J.node||qe.focusOffset!==J.offset)&&(He=He.createRange(),He.setStart(se.node,se.offset),qe.removeAllRanges(),sr>Z?(qe.addRange(He),qe.extend(J.node,J.offset)):(He.setEnd(J.node,J.offset),qe.addRange(He)))))),He=[],qe=Ie;qe=qe.parentNode;)qe.nodeType===1&&He.push({element:qe,left:qe.scrollLeft,top:qe.scrollTop});for(typeof Ie.focus=="function"&&Ie.focus(),Ie=0;Ievi()-fz?_m(l,0):cz|=h),ol(l,p)}function d_e(l,p){var h=l.stateNode;h!==null&&h.delete(p),p=0,p===0&&(p=l.mode,p&2?p&4?(Du===0&&(Du=bm),p=om(62914560&~Du),p===0&&(p=4194304)):p=mm()===99?1:2:p=1),h=Pa(),l=jS(l,p),l!==null&&(W_(l,p,h),ol(l,h))}var Zre;Zre=function(l,p,h){var P=p.lanes;if(l!==null)if(l.memoizedProps!==p.pendingProps||Zi.current)$l=!0;else if(h&P)$l=!!(l.flags&16384);else{switch($l=!1,p.tag){case 3:Sre(p),qR();break;case 5:ire(p);break;case 1:ea(p.type)&&tS(p);break;case 4:BR(p,p.stateNode.containerInfo);break;case 10:P=p.memoizedProps.value;var F=p.type._context;$n(oS,F._currentValue),F._currentValue=P;break;case 13:if(p.memoizedState!==null)return h&p.child.childLanes?Ire(l,p,h):($n(Jn,Jn.current&1),p=Ru(l,p,h),p!==null?p.sibling:null);$n(Jn,Jn.current&1);break;case 19:if(P=(h&p.childLanes)!==0,l.flags&64){if(P)return Cre(l,p,h);p.flags|=64}if(F=p.memoizedState,F!==null&&(F.rendering=null,F.tail=null,F.lastEffect=null),$n(Jn,Jn.current),P)break;return null;case 23:case 24:return p.lanes=0,QR(l,p,h)}return Ru(l,p,h)}else $l=!1;switch(p.lanes=0,p.tag){case 2:if(P=p.type,l!==null&&(l.alternate=null,p.alternate=null,p.flags|=2),l=p.pendingProps,F=dm(p,gi.current),gm(p,h),F=JR(null,p,P,l,F,h),p.flags|=1,typeof F=="object"&&F!==null&&typeof F.render=="function"&&F.$$typeof===void 0){if(p.tag=1,p.memoizedState=null,p.updateQueue=null,ea(P)){var J=!0;tS(p)}else J=!1;p.memoizedState=F.state!==null&&F.state!==void 0?F.state:null,FR(p);var Z=P.getDerivedStateFromProps;typeof Z=="function"&&lS(p,P,Z,l),F.updater=sS,p.stateNode=F,F._reactInternals=p,WR(p,P,l,h),p=ez(null,p,P,!0,J,h)}else p.tag=0,ra(null,p,F,h),p=p.child;return p;case 16:F=p.elementType;e:{switch(l!==null&&(l.alternate=null,p.alternate=null,p.flags|=2),l=p.pendingProps,J=F._init,F=J(F._payload),p.type=F,J=p.tag=h_e(F),l=Ul(F,l),J){case 0:p=ZR(null,p,F,l,h);break e;case 1:p=_re(null,p,F,l,h);break e;case 11:p=bre(null,p,F,l,h);break e;case 14:p=wre(null,p,F,Ul(F.type,l),P,h);break e}throw Error(_(306,F,""))}return p;case 0:return P=p.type,F=p.pendingProps,F=p.elementType===P?F:Ul(P,F),ZR(l,p,P,F,h);case 1:return P=p.type,F=p.pendingProps,F=p.elementType===P?F:Ul(P,F),_re(l,p,P,F,h);case 3:if(Sre(p),P=p.updateQueue,l===null||P===null)throw Error(_(282));if(P=p.pendingProps,F=p.memoizedState,F=F!==null?F.element:null,Kte(l,p),Cv(p,P,null,h),P=p.memoizedState.element,P===F)qR(),p=Ru(l,p,h);else{if(F=p.stateNode,(J=F.hydrate)&&(tp=um(p.stateNode.containerInfo.firstChild),Tu=p,J=Ts=!0),J){if(l=F.mutableSourceEagerHydrationData,l!=null)for(F=0;F{"use strict";function m(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(m)}catch(w){console.error(w)}}m(),f.exports=T()}),U=c(s=>{"use strict";var f=k();function m(te,oe){return te===oe&&(te!==0||1/te===1/oe)||te!==te&&oe!==oe}var w=typeof Object.is=="function"?Object.is:m,_=f.useState,C=f.useEffect,z=f.useLayoutEffect,L=f.useDebugValue;function V(te,oe){var re=oe(),le=_({inst:{value:re,getSnapshot:oe}}),ce=le[0].inst,ie=le[1];return z(function(){ce.value=re,ce.getSnapshot=oe,B(ce)&&ie({inst:ce})},[te,re,oe]),C(function(){return B(ce)&&ie({inst:ce}),te(function(){B(ce)&&ie({inst:ce})})},[te]),L(re),re}function B(te){var oe=te.getSnapshot;te=te.value;try{var re=oe();return!w(te,re)}catch{return!0}}function G(te,oe){return oe()}var Q=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?G:V;s.useSyncExternalStore=f.useSyncExternalStore!==void 0?f.useSyncExternalStore:Q}),X=c((s,f)=>{"use strict";f.exports=U()}),Y=c(s=>{"use strict";var f=k(),m=X();function w(G,Q){return G===Q&&(G!==0||1/G===1/Q)||G!==G&&Q!==Q}var _=typeof Object.is=="function"?Object.is:w,C=m.useSyncExternalStore,z=f.useRef,L=f.useEffect,V=f.useMemo,B=f.useDebugValue;s.useSyncExternalStoreWithSelector=function(G,Q,te,oe,re){var le=z(null);if(le.current===null){var ce={hasValue:!1,value:null};le.current=ce}else ce=le.current;le=V(function(){function Pe(je){if(!Ae){if(Ae=!0,we=je,je=oe(je),re!==void 0&&ce.hasValue){var ae=ce.value;if(re(ae,je))return Se=ae}return Se=je}if(ae=Se,_(we,je))return ae;var be=oe(je);return re!==void 0&&re(ae,be)?ae:(we=je,Se=be)}var Ae=!1,we,Se,ge=te===void 0?null:te;return[function(){return Pe(Q())},ge===null?void 0:function(){return Pe(ge())}]},[Q,te,oe,re]);var ie=C(G,le[0],le[1]);return L(function(){ce.hasValue=!0,ce.value=ie},[ie]),B(ie),ie}}),K=c((s,f)=>{"use strict";f.exports=Y()});function H(){return H=Object.assign?Object.assign.bind():function(s){for(var f=1;f{}),pe=c(s=>{"use strict";var f=typeof Symbol=="function"&&Symbol.for,m=f?Symbol.for("react.element"):60103,w=f?Symbol.for("react.portal"):60106,_=f?Symbol.for("react.fragment"):60107,C=f?Symbol.for("react.strict_mode"):60108,z=f?Symbol.for("react.profiler"):60114,L=f?Symbol.for("react.provider"):60109,V=f?Symbol.for("react.context"):60110,B=f?Symbol.for("react.async_mode"):60111,G=f?Symbol.for("react.concurrent_mode"):60111,Q=f?Symbol.for("react.forward_ref"):60112,te=f?Symbol.for("react.suspense"):60113,oe=f?Symbol.for("react.suspense_list"):60120,re=f?Symbol.for("react.memo"):60115,le=f?Symbol.for("react.lazy"):60116,ce=f?Symbol.for("react.block"):60121,ie=f?Symbol.for("react.fundamental"):60117,Pe=f?Symbol.for("react.responder"):60118,Ae=f?Symbol.for("react.scope"):60119;function we(ge){if(typeof ge=="object"&&ge!==null){var je=ge.$$typeof;switch(je){case m:switch(ge=ge.type,ge){case B:case G:case _:case z:case C:case te:return ge;default:switch(ge=ge&&ge.$$typeof,ge){case V:case Q:case le:case re:case L:return ge;default:return je}}case w:return je}}}function Se(ge){return we(ge)===G}s.AsyncMode=B,s.ConcurrentMode=G,s.ContextConsumer=V,s.ContextProvider=L,s.Element=m,s.ForwardRef=Q,s.Fragment=_,s.Lazy=le,s.Memo=re,s.Portal=w,s.Profiler=z,s.StrictMode=C,s.Suspense=te,s.isAsyncMode=function(ge){return Se(ge)||we(ge)===B},s.isConcurrentMode=Se,s.isContextConsumer=function(ge){return we(ge)===V},s.isContextProvider=function(ge){return we(ge)===L},s.isElement=function(ge){return typeof ge=="object"&&ge!==null&&ge.$$typeof===m},s.isForwardRef=function(ge){return we(ge)===Q},s.isFragment=function(ge){return we(ge)===_},s.isLazy=function(ge){return we(ge)===le},s.isMemo=function(ge){return we(ge)===re},s.isPortal=function(ge){return we(ge)===w},s.isProfiler=function(ge){return we(ge)===z},s.isStrictMode=function(ge){return we(ge)===C},s.isSuspense=function(ge){return we(ge)===te},s.isValidElementType=function(ge){return typeof ge=="string"||typeof ge=="function"||ge===_||ge===G||ge===z||ge===C||ge===te||ge===oe||typeof ge=="object"&&ge!==null&&(ge.$$typeof===le||ge.$$typeof===re||ge.$$typeof===L||ge.$$typeof===V||ge.$$typeof===Q||ge.$$typeof===ie||ge.$$typeof===Pe||ge.$$typeof===Ae||ge.$$typeof===ce)},s.typeOf=we}),ye=c((s,f)=>{"use strict";f.exports=pe()}),fe=c((s,f)=>{"use strict";var m=ye(),w={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},C={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},z={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},L={};L[m.ForwardRef]=C,L[m.Memo]=z;function V(ce){return m.isMemo(ce)?z:L[ce.$$typeof]||w}var B=Object.defineProperty,G=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,te=Object.getOwnPropertyDescriptor,oe=Object.getPrototypeOf,re=Object.prototype;function le(ce,ie,Pe){if(typeof ie!="string"){if(re){var Ae=oe(ie);Ae&&Ae!==re&&le(ce,Ae,Pe)}var we=G(ie);Q&&(we=we.concat(Q(ie)));for(var Se=V(ce),ge=V(ie),je=0;je{"use strict";var f=Symbol.for("react.element"),m=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),C=Symbol.for("react.profiler"),z=Symbol.for("react.provider"),L=Symbol.for("react.context"),V=Symbol.for("react.server_context"),B=Symbol.for("react.forward_ref"),G=Symbol.for("react.suspense"),Q=Symbol.for("react.suspense_list"),te=Symbol.for("react.memo"),oe=Symbol.for("react.lazy"),re=Symbol.for("react.offscreen"),le;le=Symbol.for("react.module.reference");function ce(ie){if(typeof ie=="object"&&ie!==null){var Pe=ie.$$typeof;switch(Pe){case f:switch(ie=ie.type,ie){case w:case C:case _:case G:case Q:return ie;default:switch(ie=ie&&ie.$$typeof,ie){case V:case L:case B:case oe:case te:case z:return ie;default:return Pe}}case m:return Pe}}}s.ContextConsumer=L,s.ContextProvider=z,s.Element=f,s.ForwardRef=B,s.Fragment=w,s.Lazy=oe,s.Memo=te,s.Portal=m,s.Profiler=C,s.StrictMode=_,s.Suspense=G,s.SuspenseList=Q,s.isAsyncMode=function(){return!1},s.isConcurrentMode=function(){return!1},s.isContextConsumer=function(ie){return ce(ie)===L},s.isContextProvider=function(ie){return ce(ie)===z},s.isElement=function(ie){return typeof ie=="object"&&ie!==null&&ie.$$typeof===f},s.isForwardRef=function(ie){return ce(ie)===B},s.isFragment=function(ie){return ce(ie)===w},s.isLazy=function(ie){return ce(ie)===oe},s.isMemo=function(ie){return ce(ie)===te},s.isPortal=function(ie){return ce(ie)===m},s.isProfiler=function(ie){return ce(ie)===C},s.isStrictMode=function(ie){return ce(ie)===_},s.isSuspense=function(ie){return ce(ie)===G},s.isSuspenseList=function(ie){return ce(ie)===Q},s.isValidElementType=function(ie){return typeof ie=="string"||typeof ie=="function"||ie===w||ie===C||ie===_||ie===G||ie===Q||ie===re||typeof ie=="object"&&ie!==null&&(ie.$$typeof===oe||ie.$$typeof===te||ie.$$typeof===z||ie.$$typeof===L||ie.$$typeof===B||ie.$$typeof===le||ie.getModuleId!==void 0)},s.typeOf=ce}),xe=c((s,f)=>{"use strict";f.exports=ue()}),me=c((s,f)=>{"use strict";function m(_,C){for(var z=_.keys(),L;!(L=z.next()).done;)C(_.get(L.value),L.value,_)}var w=function(){var _;typeof Map<"u"&&(_=Map,Map.prototype.keys||(Map.prototype.keys=function(){var V=[];return this.forEach(function(B,G){V.push(G)}),V}));function C(V){var B=this;B._map=_,C.Map&&(B._map=C.Map),B._=B._map?new B._map:{},V&&V.forEach(function(G){B.set(G[0],G[1])})}C.prototype.get=function(V){return this._map?this._.get(V):this._[V]},C.prototype.set=function(V,B){var G=Array.prototype.slice.call(arguments);V=G.shift();var Q=this.get(V);return Q||(Q=[],this._map?this._.set(V,Q):this._[V]=Q),Array.prototype.push.apply(Q,G),this},C.prototype.delete=function(V,B){if(!this.has(V))return!1;if(arguments.length==1)return this._map?this._.delete(V):delete this._[V],!0;var G=this.get(V),Q=G.indexOf(B);return Q!=-1?(G.splice(Q,1),!0):!1},C.prototype.has=function(V,B){var G=this._map?this._.has(V):this._.hasOwnProperty(V);if(arguments.length==1||!G)return G;var Q=this.get(V)||[];return Q.indexOf(B)!=-1},C.prototype.keys=function(){return this._map?L(this._.keys()):L(Object.keys(this._))},C.prototype.values=function(){var V=[];return this.forEachEntry(function(B){Array.prototype.push.apply(V,B)}),L(V)},C.prototype.forEachEntry=function(V){m(this,V)},C.prototype.forEach=function(V){var B=this;B.forEachEntry(function(G,Q){G.forEach(function(te){V(te,Q,B)})})},C.prototype.clear=function(){this._map?this._.clear():this._={}},Object.defineProperty(C.prototype,"size",{configurable:!1,enumerable:!0,get:function(){var V=0;return m(this,function(B){V+=B.length}),V}}),Object.defineProperty(C.prototype,"count",{configurable:!1,enumerable:!0,get:function(){return this._.size}});var z;try{z=new Function("iterator","makeIterator","var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;")}catch{}function L(V){if(Array.isArray(V)){var B=0;return{next:function(){return B{Ge=function(){function s(m){var w=this;this._insertTag=function(_){var C;w.tags.length===0?w.insertionPoint?C=w.insertionPoint.nextSibling:w.prepend?C=w.container.firstChild:C=w.before:C=w.tags[w.tags.length-1].nextSibling,w.container.insertBefore(_,C),w.tags.push(_)},this.isSpeedy=m.speedy===void 0?!0:m.speedy,this.tags=[],this.ctr=0,this.nonce=m.nonce,this.key=m.key,this.container=m.container,this.prepend=m.prepend,this.insertionPoint=m.insertionPoint,this.before=null}var f=s.prototype;return f.hydrate=function(m){m.forEach(this._insertTag)},f.insert=function(m){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag($e(this));var w=this.tags[this.tags.length-1];if(!1)var _;if(this.isSpeedy){var C=We(w);try{C.insertRule(m,C.cssRules.length)}catch{}}else w.appendChild(document.createTextNode(m));this.ctr++},f.flush=function(){this.tags.forEach(function(m){return m.parentNode&&m.parentNode.removeChild(m)}),this.tags=[],this.ctr=0},s}()}),et,ut,Qe,Ht,Xe,Ft,Vt,lt,Ct,Mr=u(()=>{et="-ms-",ut="-moz-",Qe="-webkit-",Ht="comm",Xe="rule",Ft="decl",Vt="@import",lt="@keyframes",Ct="@layer"});function Sr(s,f){return Cr(s,0)^45?(((f<<2^Cr(s,0))<<2^Cr(s,1))<<2^Cr(s,2))<<2^Cr(s,3):0}function An(s){return s.trim()}function jr(s,f){return(s=f.exec(s))?s[0]:s}function Dt(s,f,m){return s.replace(f,m)}function en(s,f){return s.indexOf(f)}function Cr(s,f){return s.charCodeAt(f)|0}function Nn(s,f,m){return s.slice(f,m)}function co(s){return s.length}function po(s){return s.length}function qo(s,f){return f.push(s),s}function Mn(s,f){return s.map(f).join("")}var fi,Ba,va,Qn=u(()=>{fi=Math.abs,Ba=String.fromCharCode,va=Object.assign});function tn(s,f,m,w,_,C,z){return{value:s,root:f,parent:m,type:w,props:_,children:C,line:vu,column:Ha,length:z,return:""}}function Uo(s,f){return va(tn("",null,null,"",null,null,0),s,{length:-s.length},f)}function f0(){return Fn}function hc(){return Fn=$o>0?Cr(Jo,--$o):0,Ha--,Fn===10&&(Ha=1,vu--),Fn}function br(){return Fn=$o2||mu(Fn)>3?"":" "}function d0(s,f){for(;--f&&br()&&!(Fn<48||Fn>102||Fn>57&&Fn<65||Fn>70&&Fn<97););return xs(s,_f()+(f<6&&ya()==32&&br()==32))}function rg(s){for(;br();)switch(Fn){case s:return $o;case 34:case 39:s!==34&&s!==39&&rg(Fn);break;case 40:s===41&&rg(s);break;case 92:br();break}return $o}function If(s,f){for(;br()&&s+Fn!==47+10&&!(s+Fn===42+42&&ya()===47););return"/*"+xs(f,$o-1)+"*"+Ba(s===47?s:br())}function gc(s){for(;!mu(ya());)br();return xs(s,$o)}var vu,Ha,mt,$o,Fn,Jo,Mi=u(()=>{Qn(),vu=1,Ha=1,mt=0,$o=0,Fn=0,Jo=""});function Er(s){return hu(vc("",null,null,null,[""],s=Sf(s),0,[0],s))}function vc(s,f,m,w,_,C,z,L,V){for(var B=0,G=0,Q=z,te=0,oe=0,re=0,le=1,ce=1,ie=1,Pe=0,Ae="",we=_,Se=C,ge=w,je=Ae;ce;)switch(re=Pe,Pe=br()){case 40:if(re!=108&&Cr(je,Q-1)==58){en(je+=Dt(gu(Pe),"&","&\f"),"&\f")!=-1&&(ie=-1);break}case 34:case 39:case 91:je+=gu(Pe);break;case 9:case 10:case 13:case 32:je+=$A(re);break;case 92:je+=d0(_f()-1,7);continue;case 47:switch(ya()){case 42:case 47:qo(jf(If(br(),_f()),f,m),V);break;default:je+="/"}break;case 123*le:L[B++]=co(je)*ie;case 125*le:case 59:case 0:switch(Pe){case 0:case 125:ce=0;case 59+G:ie==-1&&(je=Dt(je,/\f/g,"")),oe>0&&co(je)-Q&&qo(oe>32?W8(je+";",w,m,Q-1):W8(Dt(je," ","")+";",w,m,Q-2),V);break;case 59:je+=";";default:if(qo(ge=Jr(je,f,m,B,G,_,L,Ae,we=[],Se=[],Q),C),Pe===123)if(G===0)vc(je,f,ge,ge,we,C,Q,L,Se);else switch(te===99&&Cr(je,3)===110?100:te){case 100:case 108:case 109:case 115:vc(s,ge,ge,w&&qo(Jr(s,ge,ge,0,0,_,L,Ae,_,we=[],Q),Se),_,Se,Q,L,w?we:Se);break;default:vc(je,ge,ge,ge,[""],Se,0,L,Se)}}B=G=oe=0,le=ie=1,Ae=je="",Q=z;break;case 58:Q=1+co(je),oe=re;default:if(le<1){if(Pe==123)--le;else if(Pe==125&&le++==0&&hc()==125)continue}switch(je+=Ba(Pe),Pe*le){case 38:ie=G>0?1:(je+="\f",-1);break;case 44:L[B++]=(co(je)-1)*ie,ie=1;break;case 64:ya()===45&&(je+=gu(br())),te=ya(),G=Q=co(Ae=je+=gc(_f())),Pe++;break;case 45:re===45&&co(je)==2&&(le=0)}}return C}function Jr(s,f,m,w,_,C,z,L,V,B,G){for(var Q=_-1,te=_===0?C:[""],oe=po(te),re=0,le=0,ce=0;re0?te[ie]+" "+Pe:Dt(Pe,/&\f/g,te[ie])))&&(V[ce++]=Ae);return tn(s,f,m,_===0?Xe:L,V,B,G)}function jf(s,f,m){return tn(s,f,m,Ht,Ba(f0()),Nn(s,2,-2),0)}function W8(s,f,m,w){return tn(s,f,m,Ft,Nn(s,0,w),Nn(s,w+1,-1),w)}var m0=u(()=>{Mr(),Qn(),Mi()}),Mo=u(()=>{});function di(s,f){for(var m="",w=po(s),_=0;_{Mr(),Qn()});function ba(s){var f=po(s);return function(m,w,_,C){for(var z="",L=0;L{Qn()}),JA=u(()=>{Mr(),Qn(),m0(),Mo(),Mi(),Zn(),yu()}),ng,bu=u(()=>{ng=function(s){var f=new WeakMap;return function(m){if(f.has(m))return f.get(m);var w=s(m);return f.set(m,w),w}}});function og(s){var f=Object.create(null);return function(m){return f[m]===void 0&&(f[m]=s(m)),f[m]}}var ig=u(()=>{}),wu={};d(wu,{default:()=>Ef});function yc(s,f){switch(Sr(s,f)){case 5103:return Qe+"print-"+s+s;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Qe+s+s;case 5349:case 4246:case 4810:case 6968:case 2756:return Qe+s+ut+s+et+s+s;case 6828:case 4268:return Qe+s+et+s+s;case 6165:return Qe+s+et+"flex-"+s+s;case 5187:return Qe+s+Dt(s,/(\w+).+(:[^]+)/,Qe+"box-$1$2"+et+"flex-$1$2")+s;case 5443:return Qe+s+et+"flex-item-"+Dt(s,/flex-|-self/,"")+s;case 4675:return Qe+s+et+"flex-line-pack"+Dt(s,/align-content|flex-|-self/,"")+s;case 5548:return Qe+s+et+Dt(s,"shrink","negative")+s;case 5292:return Qe+s+et+Dt(s,"basis","preferred-size")+s;case 6060:return Qe+"box-"+Dt(s,"-grow","")+Qe+s+et+Dt(s,"grow","positive")+s;case 4554:return Qe+Dt(s,/([^-])(transform)/g,"$1"+Qe+"$2")+s;case 6187:return Dt(Dt(Dt(s,/(zoom-|grab)/,Qe+"$1"),/(image-set)/,Qe+"$1"),s,"")+s;case 5495:case 3959:return Dt(s,/(image-set\([^]*)/,Qe+"$1$`$1");case 4968:return Dt(Dt(s,/(.+:)(flex-)?(.*)/,Qe+"box-pack:$3"+et+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Qe+s+s;case 4095:case 3583:case 4068:case 2532:return Dt(s,/(.+)-inline(.+)/,Qe+"$1$2")+s;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(co(s)-1-f>6)switch(Cr(s,f+1)){case 109:if(Cr(s,f+4)!==45)break;case 102:return Dt(s,/(.+:)(.+)-([^]+)/,"$1"+Qe+"$2-$3$1"+ut+(Cr(s,f+3)==108?"$3":"$2-$3"))+s;case 115:return~en(s,"stretch")?yc(Dt(s,"stretch","fill-available"),f)+s:s}break;case 4949:if(Cr(s,f+1)!==115)break;case 6444:switch(Cr(s,co(s)-3-(~en(s,"!important")&&10))){case 107:return Dt(s,":",":"+Qe)+s;case 101:return Dt(s,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Qe+(Cr(s,14)===45?"inline-":"")+"box$3$1"+Qe+"$2$3$1"+et+"$2box$3")+s}break;case 5936:switch(Cr(s,f+11)){case 114:return Qe+s+et+Dt(s,/[svh]\w+-[tblr]{2}/,"tb")+s;case 108:return Qe+s+et+Dt(s,/[svh]\w+-[tblr]{2}/,"tb-rl")+s;case 45:return Qe+s+et+Dt(s,/[svh]\w+-[tblr]{2}/,"lr")+s}return Qe+s+et+s+s}return s}var ag,B8,H8,lg,Tn,h0,V8,sg,Ef,ug=u(()=>{Be(),JA(),bu(),ig(),ag=function(s,f,m){for(var w=0,_=0;w=_,_=ya(),w===38&&_===12&&(f[m]=1),!mu(_);)br();return xs(s,$o)},B8=function(s,f){var m=-1,w=44;do switch(mu(w)){case 0:w===38&&ya()===12&&(f[m]=1),s[m]+=ag($o-1,f,m);break;case 2:s[m]+=gu(w);break;case 4:if(w===44){s[++m]=ya()===58?"&\f":"",f[m]=s[m].length;break}default:s[m]+=Ba(w)}while(w=br());return s},H8=function(s,f){return hu(B8(Sf(s),f))},lg=new WeakMap,Tn=function(s){if(!(s.type!=="rule"||!s.parent||s.length<1)){for(var f=s.value,m=s.parent,w=s.column===m.column&&s.line===m.line;m.type!=="rule";)if(m=m.parent,!m)return;if(!(s.props.length===1&&f.charCodeAt(0)!==58&&!lg.get(m))&&!w){lg.set(s,!0);for(var _=[],C=H8(f,_),z=m.props,L=0,V=0;L-1&&!s.return)switch(s.type){case Ft:s.return=yc(s.value,s.length);break;case lt:return di([Uo(s,{value:Dt(s.value,"@","@"+Qe)})],w);case Xe:if(s.length)return Mn(s.props,function(_){switch(jr(_,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return di([Uo(s,{props:[Dt(_,/:(read-\w+)/,":"+ut+"$1")]})],w);case"::placeholder":return di([Uo(s,{props:[Dt(_,/:(plac\w+)/,":"+Qe+"input-$1")]}),Uo(s,{props:[Dt(_,/:(plac\w+)/,":"+ut+"$1")]}),Uo(s,{props:[Dt(_,/:(plac\w+)/,et+"input-$1")]})],w)}return""})}},sg=[V8],Ef=function(s){var f=s.key;if(f==="css"){var m=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(m,function(re){var le=re.getAttribute("data-emotion");le.indexOf(" ")!==-1&&(document.head.appendChild(re),re.setAttribute("data-s",""))})}var w=s.stylisPlugins||sg,_={},C,z=[];C=s.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+f+' "]'),function(re){for(var le=re.getAttribute("data-emotion").split(" "),ce=1;ce{q8=O(fe()),U8=function(s,f){return(0,q8.default)(s,f)}});function cg(s,f,m){var w="";return m.split(" ").forEach(function(_){s[_]!==void 0?f.push(s[_]+";"):w+=_+" "}),w}var $8,bc,wc,g0=u(()=>{$8=!0,bc=function(s,f,m){var w=s.key+"-"+f.name;(m===!1||$8===!1)&&s.registered[w]===void 0&&(s.registered[w]=f.styles)},wc=function(s,f,m){bc(s,f,m);var w=s.key+"-"+f.name;if(s.inserted[f.name]===void 0){var _=f;do s.insert(f===_?"."+w:"",_,s.sheet,!0),_=_.next;while(_!==void 0)}}});function XA(s){for(var f=0,m,w=0,_=s.length;_>=4;++w,_-=4)m=s.charCodeAt(w)&255|(s.charCodeAt(++w)&255)<<8|(s.charCodeAt(++w)&255)<<16|(s.charCodeAt(++w)&255)<<24,m=(m&65535)*1540483477+((m>>>16)*59797<<16),m^=m>>>24,f=(m&65535)*1540483477+((m>>>16)*59797<<16)^(f&65535)*1540483477+((f>>>16)*59797<<16);switch(_){case 3:f^=(s.charCodeAt(w+2)&255)<<16;case 2:f^=(s.charCodeAt(w+1)&255)<<8;case 1:f^=s.charCodeAt(w)&255,f=(f&65535)*1540483477+((f>>>16)*59797<<16)}return f^=f>>>13,f=(f&65535)*1540483477+((f>>>16)*59797<<16),((f^f>>>15)>>>0).toString(36)}var KA=u(()=>{}),pg,YA=u(()=>{pg={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1}});function Rl(s,f,m){if(m==null)return"";if(m.__emotion_styles!==void 0)return m;switch(typeof m){case"boolean":return"";case"object":{if(m.anim===1)return qa={name:m.name,styles:m.styles,next:qa},m.name;if(m.styles!==void 0){var w=m.next;if(w!==void 0)for(;w!==void 0;)qa={name:w.name,styles:w.styles,next:qa},w=w.next;var _=m.styles+";";return _}return v0(s,f,m)}case"function":{if(s!==void 0){var C=qa,z=m(s);return qa=C,Rl(s,f,z)}break}case"string":if(!1)var L,V;break}if(f==null)return m;var B=f[m];return B!==void 0?B:m}function v0(s,f,m){var w="";if(Array.isArray(m))for(var _=0;_{KA(),YA(),ig(),fg=/[A-Z]|^ms/g,Oc=/_EMO_([^_]+?)_([^]*?)_EMO_/g,wa=function(s){return s.charCodeAt(1)===45},dg=function(s){return s!=null&&typeof s!="boolean"},y0=og(function(s){return wa(s)?s:s.replace(fg,"-$&").toLowerCase()}),mg=function(s,f){switch(s){case"animation":case"animationName":if(typeof f=="string")return f.replace(Oc,function(m,w,_){return qa={name:w,styles:_,next:qa},w})}return pg[s]!==1&&!wa(s)&&typeof f=="number"&&f!==0?f+"px":f},hg=/label:\s*([^\s;\n{]+)\s*(;|$)/g,xc=function(s,f,m){if(s.length===1&&typeof s[0]=="object"&&s[0]!==null&&s[0].styles!==void 0)return s[0];var w=!0,_="";qa=void 0;var C=s[0];C==null||C.raw===void 0?(w=!1,_+=Rl(m,f,C)):_+=C[0];for(var z=1;z{w0=O(k()),O0=function(s){return s()},gg=w0.useInsertionEffect?w0.useInsertionEffect:!1,Pf=gg||O0,vg=gg||w0.useLayoutEffect});function QA(s){var f=s.displayName||s.name||"Component",m=function(_,C){var z=Go.useContext(Ua);return Go.createElement(s,H({theme:z,ref:C},_))},w=Go.forwardRef(m);return w.displayName="WithTheme("+f+")",U8(w,s)}var Go,kf,yg,_0,_c,J8,G8,Ou,Ua,X8,K8,Y8,Cf,Sc,Q8,bg,wg,Z8,e9=u(()=>{Go=O(k()),kf=O(k()),ug(),ne(),bu(),GA(),g0(),b0(),x0(),yg=!0,_0={}.hasOwnProperty,_c=Go.createContext(typeof HTMLElement<"u"?Ef({key:"css"}):null),J8=_c.Provider,G8=function(){return(0,kf.useContext)(_c)},Ou=function(s){return(0,kf.forwardRef)(function(f,m){var w=(0,kf.useContext)(_c);return s(f,w,m)})},yg||(Ou=function(s){return function(f){var m=(0,kf.useContext)(_c);return m===null?(m=Ef({key:"css"}),Go.createElement(_c.Provider,{value:m},s(f,m))):s(f,m)}}),Ua=Go.createContext({}),X8=function(){return Go.useContext(Ua)},K8=function(s,f){if(typeof f=="function"){var m=f(s);return m}return H({},s,f)},Y8=ng(function(s){return ng(function(f){return K8(s,f)})}),Cf=function(s){var f=Go.useContext(Ua);return s.theme!==f&&(f=Y8(f)(s.theme)),Go.createElement(Ua.Provider,{value:f},s.children)},Sc="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",Q8=function(s,f){var m={};for(var w in f)_0.call(f,w)&&(m[w]=f[w]);if(m[Sc]=s,!1)var _;return m},bg=function(s){var f=s.cache,m=s.serialized,w=s.isStringTag;return bc(f,m,w),Pf(function(){return wc(f,m,w)}),null},wg=Ou(function(s,f,m){var w=s.css;typeof w=="string"&&f.registered[w]!==void 0&&(w=f.registered[w]);var _=s[Sc],C=[w],z="";typeof s.className=="string"?z=cg(f.registered,C,s.className):s.className!=null&&(z=s.className+" ");var L=xc(C,void 0,Go.useContext(Ua));if(!1)var V;z+=f.key+"-"+L.name;var B={};for(var G in s)_0.call(s,G)&&G!=="css"&&G!==Sc&&(B[G]=s[G]);return B.ref=m,B.className=z,Go.createElement(Go.Fragment,null,Go.createElement(bg,{cache:f,serialized:L,isStringTag:typeof _=="string"}),Go.createElement(_,B))}),Z8=wg}),S0={};d(S0,{CacheProvider:()=>J8,ClassNames:()=>Mf,Global:()=>n9,ThemeContext:()=>Ua,ThemeProvider:()=>Cf,__unsafe_useEmotionCache:()=>G8,createElement:()=>xu,css:()=>t9,jsx:()=>xu,keyframes:()=>Og,useTheme:()=>X8,withEmotionCache:()=>Ou,withTheme:()=>QA});function t9(){for(var s=arguments.length,f=new Array(s),m=0;m{e9(),e9(),zr=O(k()),g0(),x0(),b0(),ug(),ne(),bu(),Af=O(fe()),xu=function(s,f){var m=arguments;if(f==null||!_0.call(f,"css"))return zr.createElement.apply(void 0,m);var w=m.length,_=new Array(w);_[0]=Z8,_[1]=Q8(s,f);for(var C=2;C{function m(w){return w&&w.__esModule?w:{default:w}}f.exports=m,f.exports.__esModule=!0,f.exports.default=f.exports}),ZA=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=f;function f(m){let w="https://mui.com/production-error/?code="+m;for(let _=1;_{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(ZA())}),a9,I0,l9=u(()=>{ig(),a9=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,I0=og(function(s){return a9.test(s)||s.charCodeAt(0)===111&&s.charCodeAt(1)===110&&s.charCodeAt(2)<91})}),Ic,s9,Tf,Rf,xg,u9,c9,p9=u(()=>{ne(),Ic=O(k()),l9(),Gi(),g0(),b0(),x0(),s9=I0,Tf=function(s){return s!=="theme"},Rf=function(s){return typeof s=="string"&&s.charCodeAt(0)>96?s9:Tf},xg=function(s,f,m){var w;if(f){var _=f.shouldForwardProp;w=s.__emotion_forwardProp&&_?function(C){return s.__emotion_forwardProp(C)&&_(C)}:_}return typeof w!="function"&&m&&(w=s.__emotion_forwardProp),w},u9=function(s){var f=s.cache,m=s.serialized,w=s.isStringTag;return bc(f,m,w),Pf(function(){return wc(f,m,w)}),null},c9=function s(f,m){var w=f.__emotion_real===f,_=w&&f.__emotion_base||f,C,z;m!==void 0&&(C=m.label,z=m.target);var L=xg(f,m,w),V=L||Rf(_),B=!V("as");return function(){var G=arguments,Q=w&&f.__emotion_styles!==void 0?f.__emotion_styles.slice(0):[];if(C!==void 0&&Q.push("label:"+C+";"),G[0]==null||G[0].raw===void 0)Q.push.apply(Q,G);else{Q.push(G[0][0]);for(var te=G.length,oe=1;oej0});var eM,d9,j0,tM=u(()=>{p9(),ne(),eM=O(k()),l9(),g0(),b0(),x0(),d9=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],j0=c9.bind(),d9.forEach(function(s){j0[s]=j0(s)})}),m9=c((s,f)=>{"use strict";var m="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";f.exports=m}),rM=c((s,f)=>{"use strict";var m=m9();function w(){}function _(){}_.resetWarningCache=w,f.exports=function(){function C(V,B,G,Q,te,oe){if(oe!==m){var re=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw re.name="Invariant Violation",re}}C.isRequired=C;function z(){return C}var L={array:C,bigint:C,bool:C,func:C,number:C,object:C,string:C,symbol:C,any:C,arrayOf:z,element:C,elementType:C,instanceOf:z,node:C,objectOf:z,oneOf:z,oneOfType:z,shape:z,exact:z,checkPropTypes:_,resetWarningCache:w};return L.PropTypes=L,L}}),zl=c((s,f)=>{f.exports=rM()();var m,w}),nM=c(s=>{"use strict";I();var f=k(),m=60103;s.Fragment=60107,typeof Symbol=="function"&&Symbol.for&&(w=Symbol.for,m=w("react.element"),s.Fragment=w("react.fragment"));var w,_=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,C=Object.prototype.hasOwnProperty,z={key:!0,ref:!0,__self:!0,__source:!0};function L(V,B,G){var Q,te={},oe=null,re=null;G!==void 0&&(oe=""+G),B.key!==void 0&&(oe=""+B.key),B.ref!==void 0&&(re=B.ref);for(Q in B)C.call(B,Q)&&!z.hasOwnProperty(Q)&&(te[Q]=B[Q]);if(V&&V.defaultProps)for(Q in B=V.defaultProps,B)te[Q]===void 0&&(te[Q]=B[Q]);return{$$typeof:m,type:V,key:oe,ref:re,props:te,_owner:_.current}}s.jsx=L,s.jsxs=L}),Dr=c((s,f)=>{"use strict";f.exports=nM()}),oM=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=G;var m=V(k()),w=f(zl()),_=(Gi(),S(S0)),C=f((ug(),S(wu))),z=Dr();function L(Q){if(typeof WeakMap!="function")return null;var te=new WeakMap,oe=new WeakMap;return(L=function(re){return re?oe:te})(Q)}function V(Q,te){if(!te&&Q&&Q.__esModule)return Q;if(Q===null||typeof Q!="object"&&typeof Q!="function")return{default:Q};var oe=L(te);if(oe&&oe.has(Q))return oe.get(Q);var re={__proto__:null},le=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ce in Q)if(ce!=="default"&&Object.prototype.hasOwnProperty.call(Q,ce)){var ie=le?Object.getOwnPropertyDescriptor(Q,ce):null;ie&&(ie.get||ie.set)?Object.defineProperty(re,ce,ie):re[ce]=Q[ce]}return re.default=Q,oe&&oe.set(Q,re),re}var B;typeof document=="object"&&(B=(0,C.default)({key:"css",prepend:!0}));function G(Q){let{injectFirst:te,children:oe}=Q;return te&&B?(0,z.jsx)(_.CacheProvider,{value:B,children:oe}):oe}}),_g=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(oM())}),iM=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=B;var m=L(k()),w=f(zl()),_=(Gi(),S(S0)),C=Dr();function z(G){if(typeof WeakMap!="function")return null;var Q=new WeakMap,te=new WeakMap;return(z=function(oe){return oe?te:Q})(G)}function L(G,Q){if(!Q&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var te=z(Q);if(te&&te.has(G))return te.get(G);var oe={__proto__:null},re=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var le in G)if(le!=="default"&&Object.prototype.hasOwnProperty.call(G,le)){var ce=re?Object.getOwnPropertyDescriptor(G,le):null;ce&&(ce.get||ce.set)?Object.defineProperty(oe,le,ce):oe[le]=G[le]}return oe.default=G,te&&te.set(G,oe),oe}function V(G){return G==null||Object.keys(G).length===0}function B(G){let{styles:Q,defaultTheme:te={}}=G,oe=typeof Q=="function"?re=>Q(V(re)?te:re):Q;return(0,C.jsx)(_.Global,{styles:oe})}}),aM=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(iM())}),E0=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"GlobalStyles",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(s,"StyledEngineProvider",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(s,"ThemeContext",{enumerable:!0,get:function(){return w.ThemeContext}}),Object.defineProperty(s,"css",{enumerable:!0,get:function(){return w.css}}),s.default=z,s.internal_processStyles=void 0,Object.defineProperty(s,"keyframes",{enumerable:!0,get:function(){return w.keyframes}});var m=f((tM(),S(f9))),w=(Gi(),S(S0)),_=f(_g()),C=f(aM());function z(V,B){return(0,m.default)(V,B)}var L=(V,B)=>{Array.isArray(V.__emotion_styles)&&(V.__emotion_styles=B(V.__emotion_styles))};s.internal_processStyles=L}),jc=c((s,f)=>{function m(){return f.exports=m=Object.assign?Object.assign.bind():function(w){for(var _=1;_{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=C,s.isPlainObject=w;var m=f(jc());function w(z){if(typeof z!="object"||z===null)return!1;let L=Object.getPrototypeOf(z);return(L===null||L===Object.prototype||Object.getPrototypeOf(L)===null)&&!(Symbol.toStringTag in z)&&!(Symbol.iterator in z)}function _(z){if(!w(z))return z;let L={};return Object.keys(z).forEach(V=>{L[V]=_(z[V])}),L}function C(z,L,V={clone:!0}){let B=V.clone?(0,m.default)({},z):z;return w(z)&&w(L)&&Object.keys(L).forEach(G=>{G!=="__proto__"&&(w(L[G])&&G in z&&w(z[G])?B[G]=C(z[G],L[G],V):V.clone?B[G]=w(L[G])?_(L[G]):L[G]:B[G]=L[G])}),B}}),mi=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var f={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=_(h9());Object.keys(m).forEach(function(C){C==="default"||C==="__esModule"||Object.prototype.hasOwnProperty.call(f,C)||C in s&&s[C]===m[C]||Object.defineProperty(s,C,{enumerable:!0,get:function(){return m[C]}})});function w(C){if(typeof WeakMap!="function")return null;var z=new WeakMap,L=new WeakMap;return(w=function(V){return V?L:z})(C)}function _(C,z){if(!z&&C&&C.__esModule)return C;if(C===null||typeof C!="object"&&typeof C!="function")return{default:C};var L=w(z);if(L&&L.has(C))return L.get(C);var V={__proto__:null},B=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var G in C)if(G!=="default"&&Object.prototype.hasOwnProperty.call(C,G)){var Q=B?Object.getOwnPropertyDescriptor(C,G):null;Q&&(Q.get||Q.set)?Object.defineProperty(V,G,Q):V[G]=C[G]}return V.default=C,L&&L.set(C,V),V}}),g9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=w;var m=f(Xi());function w(_){if(typeof _!="string")throw new Error((0,m.default)(7));return _.charAt(0).toUpperCase()+_.slice(1)}}),Vr=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(g9())}),lM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=z,s.getFunctionName=w;var f=xe(),m=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function w(L){let V=`${L}`.match(m);return V&&V[1]||""}function _(L,V=""){return L.displayName||L.name||w(L)||V}function C(L,V,B){let G=_(V);return L.displayName||(G!==""?`${B}(${G})`:B)}function z(L){if(L!=null){if(typeof L=="string")return L;if(typeof L=="function")return _(L,"Component");if(typeof L=="object")switch(L.$$typeof){case f.ForwardRef:return C(L,L.render,"ForwardRef");case f.Memo:return C(L,L.type,"memo");default:return}}}}),sM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var f={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=_(lM());Object.keys(m).forEach(function(C){C==="default"||C==="__esModule"||Object.prototype.hasOwnProperty.call(f,C)||C in s&&s[C]===m[C]||Object.defineProperty(s,C,{enumerable:!0,get:function(){return m[C]}})});function w(C){if(typeof WeakMap!="function")return null;var z=new WeakMap,L=new WeakMap;return(w=function(V){return V?L:z})(C)}function _(C,z){if(!z&&C&&C.__esModule)return C;if(C===null||typeof C!="object"&&typeof C!="function")return{default:C};var L=w(z);if(L&&L.has(C))return L.get(C);var V={__proto__:null},B=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var G in C)if(G!=="default"&&Object.prototype.hasOwnProperty.call(C,G)){var Q=B?Object.getOwnPropertyDescriptor(C,G):null;Q&&(Q.get||Q.set)?Object.defineProperty(V,G,Q):V[G]=C[G]}return V.default=C,L&&L.set(C,V),V}}),v9=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;function f(w,_=Number.MIN_SAFE_INTEGER,C=Number.MAX_SAFE_INTEGER){return Math.max(_,Math.min(w,C))}var m=s.default=f}),uM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(v9())}),P0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(mi());function w(C,z){return z?(0,m.default)(C,z,{clone:!1}):C}var _=s.default=w}),k0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(zl()),w={},_=s.default=w}),$a=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.computeBreakpointsBase=oe,s.createEmptyBreakpointObject=G,s.default=void 0,s.handleBreakpoints=V,s.mergeBreakpointsInOrder=te,s.removeUnusedBreakpoints=Q,s.resolveBreakpointValues=re,s.values=void 0;var m=f(jc()),w=f(zl()),_=f(mi()),C=f(P0()),z=s.values={xs:0,sm:600,md:900,lg:1200,xl:1536},L={keys:["xs","sm","md","lg","xl"],up:ce=>`@media (min-width:${z[ce]}px)`};function V(ce,ie,Pe){let Ae=ce.theme||{};if(Array.isArray(ie)){let we=Ae.breakpoints||L;return ie.reduce((Se,ge,je)=>(Se[we.up(we.keys[je])]=Pe(ie[je]),Se),{})}if(typeof ie=="object"){let we=Ae.breakpoints||L;return Object.keys(ie).reduce((Se,ge)=>{if(Object.keys(we.values||z).indexOf(ge)!==-1){let je=we.up(ge);Se[je]=Pe(ie[ge],ge)}else{let je=ge;Se[je]=ie[je]}return Se},{})}return Pe(ie)}function B(ce){let ie=Pe=>{let Ae=Pe.theme||{},we=ce(Pe),Se=Ae.breakpoints||L,ge=Se.keys.reduce((je,ae)=>(Pe[ae]&&(je=je||{},je[Se.up(ae)]=ce((0,m.default)({theme:Ae},Pe[ae]))),je),null);return(0,C.default)(we,ge)};return ie.propTypes={},ie.filterProps=["xs","sm","md","lg","xl",...ce.filterProps],ie}function G(ce={}){var ie;return((ie=ce.keys)==null?void 0:ie.reduce((Pe,Ae)=>{let we=ce.up(Ae);return Pe[we]={},Pe},{}))||{}}function Q(ce,ie){return ce.reduce((Pe,Ae)=>{let we=Pe[Ae];return(!we||Object.keys(we).length===0)&&delete Pe[Ae],Pe},ie)}function te(ce,...ie){let Pe=G(ce),Ae=[Pe,...ie].reduce((we,Se)=>(0,_.default)(we,Se),{});return Q(Object.keys(Pe),Ae)}function oe(ce,ie){if(typeof ce!="object")return{};let Pe={},Ae=Object.keys(ie);return Array.isArray(ce)?Ae.forEach((we,Se)=>{Se{ce[we]!=null&&(Pe[we]=!0)}),Pe}function re({values:ce,breakpoints:ie,base:Pe}){let Ae=Pe||oe(ce,ie),we=Object.keys(Ae);if(we.length===0)return ce;let Se;return we.reduce((ge,je,ae)=>(Array.isArray(ce)?(ge[je]=ce[ae]!=null?ce[ae]:ce[Se],Se=ae):typeof ce=="object"?(ge[je]=ce[je]!=null?ce[je]:ce[Se],Se=je):ge[je]=ce,ge),{})}var le=s.default=B}),Ec=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.getPath=C,s.getStyleValue=z;var m=f(Vr()),w=f(k0()),_=$a();function C(B,G,Q=!0){if(!G||typeof G!="string")return null;if(B&&B.vars&&Q){let te=`vars.${G}`.split(".").reduce((oe,re)=>oe&&oe[re]?oe[re]:null,B);if(te!=null)return te}return G.split(".").reduce((te,oe)=>te&&te[oe]!=null?te[oe]:null,B)}function z(B,G,Q,te=Q){let oe;return typeof B=="function"?oe=B(Q):Array.isArray(B)?oe=B[Q]||te:oe=C(B,Q)||te,G&&(oe=G(oe,te,B)),oe}function L(B){let{prop:G,cssProperty:Q=B.prop,themeKey:te,transform:oe}=B,re=le=>{if(le[G]==null)return null;let ce=le[G],ie=le.theme,Pe=C(ie,te)||{},Ae=we=>{let Se=z(Pe,oe,we);return we===Se&&typeof we=="string"&&(Se=z(Pe,oe,`${G}${we==="default"?"":(0,m.default)(we)}`,we)),Q===!1?Se:{[Q]:Se}};return(0,_.handleBreakpoints)(le,ce,Ae)};return re.propTypes={},re.filterProps=[G],re}var V=s.default=L}),cM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=f;function f(m){let w={};return _=>(w[_]===void 0&&(w[_]=m(_)),w[_])}}),C0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.createUnarySpacing=le,s.createUnaryUnit=re,s.default=void 0,s.getStyleFromPropValue=ie,s.getValue=ce,s.margin=we,s.marginKeys=void 0,s.padding=Se,s.paddingKeys=void 0;var m=f(k0()),w=$a(),_=Ec(),C=f(P0()),z=f(cM()),L={m:"margin",p:"padding"},V={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},B={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},G=(0,z.default)(ae=>{if(ae.length>2)if(B[ae])ae=B[ae];else return[ae];let[be,Ce]=ae.split(""),Te=L[be],Fe=V[Ce]||"";return Array.isArray(Fe)?Fe.map(Ue=>Te+Ue):[Te+Fe]}),Q=s.marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],te=s.paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],oe=[...Q,...te];function re(ae,be,Ce,Te){var Fe;let Ue=(Fe=(0,_.getPath)(ae,be,!1))!=null?Fe:Ce;return typeof Ue=="number"?it=>typeof it=="string"?it:Ue*it:Array.isArray(Ue)?it=>typeof it=="string"?it:Ue[it]:typeof Ue=="function"?Ue:()=>{}}function le(ae){return re(ae,"spacing",8,"spacing")}function ce(ae,be){if(typeof be=="string"||be==null)return be;let Ce=Math.abs(be),Te=ae(Ce);return be>=0?Te:typeof Te=="number"?-Te:`-${Te}`}function ie(ae,be){return Ce=>ae.reduce((Te,Fe)=>(Te[Fe]=ce(be,Ce),Te),{})}function Pe(ae,be,Ce,Te){if(be.indexOf(Ce)===-1)return null;let Fe=G(Ce),Ue=ie(Fe,Te),it=ae[Ce];return(0,w.handleBreakpoints)(ae,it,Ue)}function Ae(ae,be){let Ce=le(ae.theme);return Object.keys(ae).map(Te=>Pe(ae,be,Te,Ce)).reduce(C.default,{})}function we(ae){return Ae(ae,Q)}we.propTypes={},we.filterProps=Q;function Se(ae){return Ae(ae,te)}Se.propTypes={},Se.filterProps=te;function ge(ae){return Ae(ae,oe)}ge.propTypes={},ge.filterProps=oe;var je=s.default=ge}),_u=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(P0());function w(...C){let z=C.reduce((V,B)=>(B.filterProps.forEach(G=>{V[G]=B}),V),{}),L=V=>Object.keys(V).reduce((B,G)=>z[G]?(0,m.default)(B,z[G](V)):B,{});return L.propTypes={},L.filterProps=C.reduce((V,B)=>V.concat(B.filterProps),[]),L}var _=s.default=w}),A0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.borderTopColor=s.borderTop=s.borderRightColor=s.borderRight=s.borderRadius=s.borderLeftColor=s.borderLeft=s.borderColor=s.borderBottomColor=s.borderBottom=s.border=void 0,s.borderTransform=L,s.outlineColor=s.outline=s.default=void 0;var m=f(k0()),w=f(Ec()),_=f(_u()),C=C0(),z=$a();function L(ae){return typeof ae!="number"?ae:`${ae}px solid`}function V(ae,be){return(0,w.default)({prop:ae,themeKey:"borders",transform:be})}var B=s.border=V("border",L),G=s.borderTop=V("borderTop",L),Q=s.borderRight=V("borderRight",L),te=s.borderBottom=V("borderBottom",L),oe=s.borderLeft=V("borderLeft",L),re=s.borderColor=V("borderColor"),le=s.borderTopColor=V("borderTopColor"),ce=s.borderRightColor=V("borderRightColor"),ie=s.borderBottomColor=V("borderBottomColor"),Pe=s.borderLeftColor=V("borderLeftColor"),Ae=s.outline=V("outline",L),we=s.outlineColor=V("outlineColor"),Se=ae=>{if(ae.borderRadius!==void 0&&ae.borderRadius!==null){let be=(0,C.createUnaryUnit)(ae.theme,"shape.borderRadius",4,"borderRadius"),Ce=Te=>({borderRadius:(0,C.getValue)(be,Te)});return(0,z.handleBreakpoints)(ae,ae.borderRadius,Ce)}return null};s.borderRadius=Se,Se.propTypes={},Se.filterProps=["borderRadius"];var ge=(0,_.default)(B,G,Q,te,oe,re,le,ce,ie,Pe,Se,Ae,we),je=s.default=ge}),Sg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.rowGap=s.gridTemplateRows=s.gridTemplateColumns=s.gridTemplateAreas=s.gridRow=s.gridColumn=s.gridAutoRows=s.gridAutoFlow=s.gridAutoColumns=s.gridArea=s.gap=s.default=s.columnGap=void 0;var m=f(Ec()),w=f(_u()),_=C0(),C=$a(),z=f(k0()),L=Se=>{if(Se.gap!==void 0&&Se.gap!==null){let ge=(0,_.createUnaryUnit)(Se.theme,"spacing",8,"gap"),je=ae=>({gap:(0,_.getValue)(ge,ae)});return(0,C.handleBreakpoints)(Se,Se.gap,je)}return null};s.gap=L,L.propTypes={},L.filterProps=["gap"];var V=Se=>{if(Se.columnGap!==void 0&&Se.columnGap!==null){let ge=(0,_.createUnaryUnit)(Se.theme,"spacing",8,"columnGap"),je=ae=>({columnGap:(0,_.getValue)(ge,ae)});return(0,C.handleBreakpoints)(Se,Se.columnGap,je)}return null};s.columnGap=V,V.propTypes={},V.filterProps=["columnGap"];var B=Se=>{if(Se.rowGap!==void 0&&Se.rowGap!==null){let ge=(0,_.createUnaryUnit)(Se.theme,"spacing",8,"rowGap"),je=ae=>({rowGap:(0,_.getValue)(ge,ae)});return(0,C.handleBreakpoints)(Se,Se.rowGap,je)}return null};s.rowGap=B,B.propTypes={},B.filterProps=["rowGap"];var G=s.gridColumn=(0,m.default)({prop:"gridColumn"}),Q=s.gridRow=(0,m.default)({prop:"gridRow"}),te=s.gridAutoFlow=(0,m.default)({prop:"gridAutoFlow"}),oe=s.gridAutoColumns=(0,m.default)({prop:"gridAutoColumns"}),re=s.gridAutoRows=(0,m.default)({prop:"gridAutoRows"}),le=s.gridTemplateColumns=(0,m.default)({prop:"gridTemplateColumns"}),ce=s.gridTemplateRows=(0,m.default)({prop:"gridTemplateRows"}),ie=s.gridTemplateAreas=(0,m.default)({prop:"gridTemplateAreas"}),Pe=s.gridArea=(0,m.default)({prop:"gridArea"}),Ae=(0,w.default)(L,V,B,G,Q,te,oe,re,le,ce,ie,Pe),we=s.default=Ae}),pM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=s.color=s.bgcolor=s.backgroundColor=void 0,s.paletteTransform=_;var m=f(Ec()),w=f(_u());function _(G,Q){return Q==="grey"?Q:G}var C=s.color=(0,m.default)({prop:"color",themeKey:"palette",transform:_}),z=s.bgcolor=(0,m.default)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:_}),L=s.backgroundColor=(0,m.default)({prop:"backgroundColor",themeKey:"palette",transform:_}),V=(0,w.default)(C,z,L),B=s.default=V}),y9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.sizeWidth=s.sizeHeight=s.minWidth=s.minHeight=s.maxWidth=s.maxHeight=s.height=s.default=s.boxSizing=void 0,s.sizingTransform=C,s.width=void 0;var m=f(Ec()),w=f(_u()),_=$a();function C(ie){return ie<=1&&ie!==0?`${ie*100}%`:ie}var z=s.width=(0,m.default)({prop:"width",transform:C}),L=ie=>{if(ie.maxWidth!==void 0&&ie.maxWidth!==null){let Pe=Ae=>{var we,Se;let ge=((we=ie.theme)==null||(we=we.breakpoints)==null||(we=we.values)==null?void 0:we[Ae])||_.values[Ae];return ge?((Se=ie.theme)==null||(Se=Se.breakpoints)==null?void 0:Se.unit)!=="px"?{maxWidth:`${ge}${ie.theme.breakpoints.unit}`}:{maxWidth:ge}:{maxWidth:C(Ae)}};return(0,_.handleBreakpoints)(ie,ie.maxWidth,Pe)}return null};s.maxWidth=L,L.filterProps=["maxWidth"];var V=s.minWidth=(0,m.default)({prop:"minWidth",transform:C}),B=s.height=(0,m.default)({prop:"height",transform:C}),G=s.maxHeight=(0,m.default)({prop:"maxHeight",transform:C}),Q=s.minHeight=(0,m.default)({prop:"minHeight",transform:C}),te=s.sizeWidth=(0,m.default)({prop:"size",cssProperty:"width",transform:C}),oe=s.sizeHeight=(0,m.default)({prop:"size",cssProperty:"height",transform:C}),re=s.boxSizing=(0,m.default)({prop:"boxSizing"}),le=(0,w.default)(z,L,V,B,G,Q,re),ce=s.default=le}),M0=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var f=C0(),m=A0(),w=Sg(),_=pM(),C=y9(),z={border:{themeKey:"borders",transform:m.borderTransform},borderTop:{themeKey:"borders",transform:m.borderTransform},borderRight:{themeKey:"borders",transform:m.borderTransform},borderBottom:{themeKey:"borders",transform:m.borderTransform},borderLeft:{themeKey:"borders",transform:m.borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:m.borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:m.borderRadius},color:{themeKey:"palette",transform:_.paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:_.paletteTransform},backgroundColor:{themeKey:"palette",transform:_.paletteTransform},p:{style:f.padding},pt:{style:f.padding},pr:{style:f.padding},pb:{style:f.padding},pl:{style:f.padding},px:{style:f.padding},py:{style:f.padding},padding:{style:f.padding},paddingTop:{style:f.padding},paddingRight:{style:f.padding},paddingBottom:{style:f.padding},paddingLeft:{style:f.padding},paddingX:{style:f.padding},paddingY:{style:f.padding},paddingInline:{style:f.padding},paddingInlineStart:{style:f.padding},paddingInlineEnd:{style:f.padding},paddingBlock:{style:f.padding},paddingBlockStart:{style:f.padding},paddingBlockEnd:{style:f.padding},m:{style:f.margin},mt:{style:f.margin},mr:{style:f.margin},mb:{style:f.margin},ml:{style:f.margin},mx:{style:f.margin},my:{style:f.margin},margin:{style:f.margin},marginTop:{style:f.margin},marginRight:{style:f.margin},marginBottom:{style:f.margin},marginLeft:{style:f.margin},marginX:{style:f.margin},marginY:{style:f.margin},marginInline:{style:f.margin},marginInlineStart:{style:f.margin},marginInlineEnd:{style:f.margin},marginBlock:{style:f.margin},marginBlockStart:{style:f.margin},marginBlockEnd:{style:f.margin},displayPrint:{cssProperty:!1,transform:V=>({"@media print":{display:V}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:w.gap},rowGap:{style:w.rowGap},columnGap:{style:w.columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:C.sizingTransform},maxWidth:{style:C.maxWidth},minWidth:{transform:C.sizingTransform},height:{transform:C.sizingTransform},maxHeight:{transform:C.sizingTransform},minHeight:{transform:C.sizingTransform},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},L=s.default=z}),T0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.unstable_createStyleFunctionSx=B;var m=f(Vr()),w=f(P0()),_=Ec(),C=$a(),z=f(M0());function L(...te){let oe=te.reduce((le,ce)=>le.concat(Object.keys(ce)),[]),re=new Set(oe);return te.every(le=>re.size===Object.keys(le).length)}function V(te,oe){return typeof te=="function"?te(oe):te}function B(){function te(re,le,ce,ie){let Pe={[re]:le,theme:ce},Ae=ie[re];if(!Ae)return{[re]:le};let{cssProperty:we=re,themeKey:Se,transform:ge,style:je}=Ae;if(le==null)return null;if(Se==="typography"&&le==="inherit")return{[re]:le};let ae=(0,_.getPath)(ce,Se)||{};if(je)return je(Pe);let be=Ce=>{let Te=(0,_.getStyleValue)(ae,ge,Ce);return Ce===Te&&typeof Ce=="string"&&(Te=(0,_.getStyleValue)(ae,ge,`${re}${Ce==="default"?"":(0,m.default)(Ce)}`,Ce)),we===!1?Te:{[we]:Te}};return(0,C.handleBreakpoints)(Pe,le,be)}function oe(re){var le;let{sx:ce,theme:ie={}}=re||{};if(!ce)return null;let Pe=(le=ie.unstable_sxConfig)!=null?le:z.default;function Ae(we){let Se=we;if(typeof we=="function")Se=we(ie);else if(typeof we!="object")return we;if(!Se)return null;let ge=(0,C.createEmptyBreakpointObject)(ie.breakpoints),je=Object.keys(ge),ae=ge;return Object.keys(Se).forEach(be=>{let Ce=V(Se[be],ie);if(Ce!=null)if(typeof Ce=="object")if(Pe[be])ae=(0,w.default)(ae,te(be,Ce,ie,Pe));else{let Te=(0,C.handleBreakpoints)({theme:ie},Ce,Fe=>({[be]:Fe}));L(Te,Ce)?ae[be]=oe({sx:Ce,theme:ie}):ae=(0,w.default)(ae,Te)}else ae=(0,w.default)(ae,te(be,Ce,ie,Pe))}),(0,C.removeUnusedBreakpoints)(je,ae)}return Array.isArray(ce)?ce.map(Ae):Ae(ce)}return oe}var G=B();G.filterProps=["sx"];var Q=s.default=G}),Pc=c((s,f)=>{function m(w,_){if(w==null)return{};var C={},z=Object.keys(w),L,V;for(V=0;V=0)&&(C[L]=w[L]);return C}f.exports=m,f.exports.__esModule=!0,f.exports.default=f.exports}),Ig=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=V;var m=f(jc()),w=f(Pc()),_=mi(),C=f(M0()),z=["sx"],L=B=>{var G,Q;let te={systemProps:{},otherProps:{}},oe=(G=B==null||(Q=B.theme)==null?void 0:Q.unstable_sxConfig)!=null?G:C.default;return Object.keys(B).forEach(re=>{oe[re]?te.systemProps[re]=B[re]:te.otherProps[re]=B[re]}),te};function V(B){let{sx:G}=B,Q=(0,w.default)(B,z),{systemProps:te,otherProps:oe}=L(Q),re;return Array.isArray(G)?re=[te,...G]:typeof G=="function"?re=(...le)=>{let ce=G(...le);return(0,_.isPlainObject)(ce)?(0,m.default)({},te,ce):te}:re=(0,m.default)({},te,G),(0,m.default)({},oe,{sx:re})}}),jg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(s,"extendSxProp",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_createStyleFunctionSx",{enumerable:!0,get:function(){return m.unstable_createStyleFunctionSx}}),Object.defineProperty(s,"unstable_defaultSxConfig",{enumerable:!0,get:function(){return _.default}});var m=z(T0()),w=f(Ig()),_=f(M0());function C(L){if(typeof WeakMap!="function")return null;var V=new WeakMap,B=new WeakMap;return(C=function(G){return G?B:V})(L)}function z(L,V){if(!V&&L&&L.__esModule)return L;if(L===null||typeof L!="object"&&typeof L!="function")return{default:L};var B=C(V);if(B&&B.has(L))return B.get(L);var G={__proto__:null},Q=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var te in L)if(te!=="default"&&Object.prototype.hasOwnProperty.call(L,te)){var oe=Q?Object.getOwnPropertyDescriptor(L,te):null;oe&&(oe.get||oe.set)?Object.defineProperty(G,te,oe):G[te]=L[te]}return G.default=L,B&&B.set(L,G),G}}),b9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.breakpointKeys=void 0,s.default=L;var m=f(Pc()),w=f(jc()),_=["values","unit","step"],C=s.breakpointKeys=["xs","sm","md","lg","xl"],z=V=>{let B=Object.keys(V).map(G=>({key:G,val:V[G]}))||[];return B.sort((G,Q)=>G.val-Q.val),B.reduce((G,Q)=>(0,w.default)({},G,{[Q.key]:Q.val}),{})};function L(V){let{values:B={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:G="px",step:Q=5}=V,te=(0,m.default)(V,_),oe=z(B),re=Object.keys(oe);function le(we){return`@media (min-width:${typeof B[we]=="number"?B[we]:we}${G})`}function ce(we){return`@media (max-width:${(typeof B[we]=="number"?B[we]:we)-Q/100}${G})`}function ie(we,Se){let ge=re.indexOf(Se);return`@media (min-width:${typeof B[we]=="number"?B[we]:we}${G}) and (max-width:${(ge!==-1&&typeof B[re[ge]]=="number"?B[re[ge]]:Se)-Q/100}${G})`}function Pe(we){return re.indexOf(we)+1{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var f={borderRadius:4},m=s.default=f}),dM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=m;var f=C0();function m(w=8){if(w.mui)return w;let _=(0,f.createUnarySpacing)({spacing:w}),C=(...z)=>(z.length===0?[1]:z).map(L=>{let V=_(L);return typeof V=="number"?`${V}px`:V}).join(" ");return C.mui=!0,C}}),w9=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=f;function f(m,w){let _=this;return _.vars&&typeof _.getColorSchemeSelector=="function"?{[_.getColorSchemeSelector(m).replace(/(\[[^\]]+\])/,"*:where($1)")]:w}:_.palette.mode===m?w:{}}}),mM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(jc()),w=f(Pc()),_=f(mi()),C=f(b9()),z=f(fM()),L=f(dM()),V=f(T0()),B=f(M0()),G=f(w9()),Q=["breakpoints","palette","spacing","shape"];function te(re={},...le){let{breakpoints:ce={},palette:ie={},spacing:Pe,shape:Ae={}}=re,we=(0,w.default)(re,Q),Se=(0,C.default)(ce),ge=(0,L.default)(Pe),je=(0,_.default)({breakpoints:Se,direction:"ltr",components:{},palette:(0,m.default)({mode:"light"},ie),spacing:ge,shape:(0,m.default)({},z.default,Ae)},we);return je.applyStyles=G.default,je=le.reduce((ae,be)=>(0,_.default)(ae,be),je),je.unstable_sxConfig=(0,m.default)({},B.default,we?.unstable_sxConfig),je.unstable_sx=function(ae){return(0,V.default)({sx:ae,theme:this})},je}var oe=s.default=te}),O9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(s,"private_createBreakpoints",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_applyStyles",{enumerable:!0,get:function(){return _.default}});var m=f(mM()),w=f(b9()),_=f(w9())}),Eg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.alpha=le,s.blend=je,s.colorChannel=void 0,s.darken=ie,s.decomposeColor=L,s.emphasize=Se,s.getContrastRatio=re,s.getLuminance=oe,s.hexToRgb=C,s.hslToRgb=te,s.lighten=Ae,s.private_safeAlpha=ce,s.private_safeColorChannel=void 0,s.private_safeDarken=Pe,s.private_safeEmphasize=ge,s.private_safeLighten=we,s.recomposeColor=G,s.rgbToHex=Q;var m=f(Xi()),w=f(uM());function _(ae,be=0,Ce=1){return(0,w.default)(ae,be,Ce)}function C(ae){ae=ae.slice(1);let be=new RegExp(`.{1,${ae.length>=6?2:1}}`,"g"),Ce=ae.match(be);return Ce&&Ce[0].length===1&&(Ce=Ce.map(Te=>Te+Te)),Ce?`rgb${Ce.length===4?"a":""}(${Ce.map((Te,Fe)=>Fe<3?parseInt(Te,16):Math.round(parseInt(Te,16)/255*1e3)/1e3).join(", ")})`:""}function z(ae){let be=ae.toString(16);return be.length===1?`0${be}`:be}function L(ae){if(ae.type)return ae;if(ae.charAt(0)==="#")return L(C(ae));let be=ae.indexOf("("),Ce=ae.substring(0,be);if(["rgb","rgba","hsl","hsla","color"].indexOf(Ce)===-1)throw new Error((0,m.default)(9,ae));let Te=ae.substring(be+1,ae.length-1),Fe;if(Ce==="color"){if(Te=Te.split(" "),Fe=Te.shift(),Te.length===4&&Te[3].charAt(0)==="/"&&(Te[3]=Te[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(Fe)===-1)throw new Error((0,m.default)(10,Fe))}else Te=Te.split(",");return Te=Te.map(Ue=>parseFloat(Ue)),{type:Ce,values:Te,colorSpace:Fe}}var V=ae=>{let be=L(ae);return be.values.slice(0,3).map((Ce,Te)=>be.type.indexOf("hsl")!==-1&&Te!==0?`${Ce}%`:Ce).join(" ")};s.colorChannel=V;var B=(ae,be)=>{try{return V(ae)}catch{return ae}};s.private_safeColorChannel=B;function G(ae){let{type:be,colorSpace:Ce}=ae,{values:Te}=ae;return be.indexOf("rgb")!==-1?Te=Te.map((Fe,Ue)=>Ue<3?parseInt(Fe,10):Fe):be.indexOf("hsl")!==-1&&(Te[1]=`${Te[1]}%`,Te[2]=`${Te[2]}%`),be.indexOf("color")!==-1?Te=`${Ce} ${Te.join(" ")}`:Te=`${Te.join(", ")}`,`${be}(${Te})`}function Q(ae){if(ae.indexOf("#")===0)return ae;let{values:be}=L(ae);return`#${be.map((Ce,Te)=>z(Te===3?Math.round(255*Ce):Ce)).join("")}`}function te(ae){ae=L(ae);let{values:be}=ae,Ce=be[0],Te=be[1]/100,Fe=be[2]/100,Ue=Te*Math.min(Fe,1-Fe),it=(Gt,Ee=(Gt+Ce/30)%12)=>Fe-Ue*Math.max(Math.min(Ee-3,9-Ee,1),-1),Mt="rgb",Lt=[Math.round(it(0)*255),Math.round(it(8)*255),Math.round(it(4)*255)];return ae.type==="hsla"&&(Mt+="a",Lt.push(be[3])),G({type:Mt,values:Lt})}function oe(ae){ae=L(ae);let be=ae.type==="hsl"||ae.type==="hsla"?L(te(ae)).values:ae.values;return be=be.map(Ce=>(ae.type!=="color"&&(Ce/=255),Ce<=.03928?Ce/12.92:((Ce+.055)/1.055)**2.4)),Number((.2126*be[0]+.7152*be[1]+.0722*be[2]).toFixed(3))}function re(ae,be){let Ce=oe(ae),Te=oe(be);return(Math.max(Ce,Te)+.05)/(Math.min(Ce,Te)+.05)}function le(ae,be){return ae=L(ae),be=_(be),(ae.type==="rgb"||ae.type==="hsl")&&(ae.type+="a"),ae.type==="color"?ae.values[3]=`/${be}`:ae.values[3]=be,G(ae)}function ce(ae,be,Ce){try{return le(ae,be)}catch{return ae}}function ie(ae,be){if(ae=L(ae),be=_(be),ae.type.indexOf("hsl")!==-1)ae.values[2]*=1-be;else if(ae.type.indexOf("rgb")!==-1||ae.type.indexOf("color")!==-1)for(let Ce=0;Ce<3;Ce+=1)ae.values[Ce]*=1-be;return G(ae)}function Pe(ae,be,Ce){try{return ie(ae,be)}catch{return ae}}function Ae(ae,be){if(ae=L(ae),be=_(be),ae.type.indexOf("hsl")!==-1)ae.values[2]+=(100-ae.values[2])*be;else if(ae.type.indexOf("rgb")!==-1)for(let Ce=0;Ce<3;Ce+=1)ae.values[Ce]+=(255-ae.values[Ce])*be;else if(ae.type.indexOf("color")!==-1)for(let Ce=0;Ce<3;Ce+=1)ae.values[Ce]+=(1-ae.values[Ce])*be;return G(ae)}function we(ae,be,Ce){try{return Ae(ae,be)}catch{return ae}}function Se(ae,be=.15){return oe(ae)>.5?ie(ae,be):Ae(ae,be)}function ge(ae,be,Ce){try{return ge(ae,be)}catch{return ae}}function je(ae,be,Ce,Te=1){let Fe=(Lt,Gt)=>Math.round((Lt**(1/Te)*(1-Ce)+Gt**(1/Te)*Ce)**Te),Ue=L(ae),it=L(be),Mt=[Fe(Ue.values[0],it.values[0]),Fe(Ue.values[1],it.values[1]),Fe(Ue.values[2],it.values[2])];return G({type:"rgb",values:Mt})}}),hM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=je,s.shouldForwardProp=ie,s.systemDefaultTheme=void 0;var m=f(jc()),w=f(Pc()),_=re(E0()),C=mi(),z=f(Vr()),L=f(sM()),V=f(O9()),B=f(jg()),G=["ownerState"],Q=["variants"],te=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function oe(ae){if(typeof WeakMap!="function")return null;var be=new WeakMap,Ce=new WeakMap;return(oe=function(Te){return Te?Ce:be})(ae)}function re(ae,be){if(!be&&ae&&ae.__esModule)return ae;if(ae===null||typeof ae!="object"&&typeof ae!="function")return{default:ae};var Ce=oe(be);if(Ce&&Ce.has(ae))return Ce.get(ae);var Te={__proto__:null},Fe=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Ue in ae)if(Ue!=="default"&&Object.prototype.hasOwnProperty.call(ae,Ue)){var it=Fe?Object.getOwnPropertyDescriptor(ae,Ue):null;it&&(it.get||it.set)?Object.defineProperty(Te,Ue,it):Te[Ue]=ae[Ue]}return Te.default=ae,Ce&&Ce.set(ae,Te),Te}function le(ae){return Object.keys(ae).length===0}function ce(ae){return typeof ae=="string"&&ae.charCodeAt(0)>96}function ie(ae){return ae!=="ownerState"&&ae!=="theme"&&ae!=="sx"&&ae!=="as"}var Pe=s.systemDefaultTheme=(0,V.default)(),Ae=ae=>ae&&ae.charAt(0).toLowerCase()+ae.slice(1);function we({defaultTheme:ae,theme:be,themeId:Ce}){return le(be)?ae:be[Ce]||be}function Se(ae){return ae?(be,Ce)=>Ce[ae]:null}function ge(ae,be){let{ownerState:Ce}=be,Te=(0,w.default)(be,G),Fe=typeof ae=="function"?ae((0,m.default)({ownerState:Ce},Te)):ae;if(Array.isArray(Fe))return Fe.flatMap(Ue=>ge(Ue,(0,m.default)({ownerState:Ce},Te)));if(Fe&&typeof Fe=="object"&&Array.isArray(Fe.variants)){let{variants:Ue=[]}=Fe,it=(0,w.default)(Fe,Q);return Ue.forEach(Mt=>{let Lt=!0;typeof Mt.props=="function"?Lt=Mt.props((0,m.default)({ownerState:Ce},Te,Ce)):Object.keys(Mt.props).forEach(Gt=>{Ce?.[Gt]!==Mt.props[Gt]&&Te[Gt]!==Mt.props[Gt]&&(Lt=!1)}),Lt&&(Array.isArray(it)||(it=[it]),it.push(typeof Mt.style=="function"?Mt.style((0,m.default)({ownerState:Ce},Te,Ce)):Mt.style))}),it}return Fe}function je(ae={}){let{themeId:be,defaultTheme:Ce=Pe,rootShouldForwardProp:Te=ie,slotShouldForwardProp:Fe=ie}=ae,Ue=it=>(0,B.default)((0,m.default)({},it,{theme:we((0,m.default)({},it,{defaultTheme:Ce,themeId:be}))}));return Ue.__mui_systemSx=!0,(it,Mt={})=>{(0,_.internal_processStyles)(it,bn=>bn.filter(hi=>!(hi!=null&&hi.__mui_systemSx)));let{name:Lt,slot:Gt,skipVariantsResolver:Ee,skipSx:Ye,overridesResolver:Yt=Se(Ae(Gt))}=Mt,Je=(0,w.default)(Mt,te),ct=Ee!==void 0?Ee:Gt&&Gt!=="Root"&&Gt!=="root"||!1,dt=Ye||!1,Ot,Jt=ie;Gt==="Root"||Gt==="root"?Jt=Te:Gt?Jt=Fe:ce(it)&&(Jt=void 0);let wr=(0,_.default)(it,(0,m.default)({shouldForwardProp:Jt,label:Ot},Je)),un=bn=>typeof bn=="function"&&bn.__emotion_real!==bn||(0,C.isPlainObject)(bn)?hi=>ge(bn,(0,m.default)({},hi,{theme:we({theme:hi.theme,defaultTheme:Ce,themeId:be})})):bn,zn=(bn,...hi)=>{let Uf=un(bn),Qi=hi?hi.map(un):[];Lt&&Yt&&Qi.push(ja=>{let Ko=we((0,m.default)({},ja,{defaultTheme:Ce,themeId:be}));if(!Ko.components||!Ko.components[Lt]||!Ko.components[Lt].styleOverrides)return null;let ks=Ko.components[Lt].styleOverrides,ql={};return Object.entries(ks).forEach(([Cu,Hc])=>{ql[Cu]=ge(Hc,(0,m.default)({},ja,{theme:Ko}))}),Yt(ja,ql)}),Lt&&!ct&&Qi.push(ja=>{var Ko;let ks=we((0,m.default)({},ja,{defaultTheme:Ce,themeId:be})),ql=ks==null||(Ko=ks.components)==null||(Ko=Ko[Lt])==null?void 0:Ko.variants;return ge({variants:ql},(0,m.default)({},ja,{theme:ks}))}),dt||Qi.push(Ue);let Ia=Qi.length-hi.length;if(Array.isArray(bn)&&Ia>0){let ja=new Array(Ia).fill("");Uf=[...bn,...ja],Uf.raw=[...bn.raw,...ja]}let $f=wr(Uf,...Qi);return it.muiName&&($f.muiName=it.muiName),$f};return wr.withConfig&&(zn.withConfig=wr.withConfig),zn}}}),R0=O(k()),x9=O(N()),gM=O(X()),vM=O(K()),Oa=O(N());function Su(s){s()}var Pg=Su,yM=s=>Pg=s,_9=()=>Pg,z0=O(k()),bM=O(k()),D0=O(k()),kg=Symbol.for("react-redux-context"),S9=typeof globalThis<"u"?globalThis:{};function wM(){var s;if(!D0.createContext)return{};let f=(s=S9[kg])!=null?s:S9[kg]=new Map,m=f.get(D0.createContext);return m||(m=D0.createContext(null),f.set(D0.createContext,m)),m}var _s=wM();function Cg(s=_s){return function(){return(0,bM.useContext)(s)}}var I9=Cg(),j9=()=>{throw new Error("uSES not initialized!")},E9=j9,OM=s=>{E9=s},xM=(s,f)=>s===f;function _M(s=_s){let f=s===_s?I9:Cg(s);return function(m,w={}){let{equalityFn:_=xM,stabilityCheck:C=void 0,noopCheck:z=void 0}=typeof w=="function"?{equalityFn:w}:w,{store:L,subscription:V,getServerState:B,stabilityCheck:G,noopCheck:Q}=f(),te=(0,z0.useRef)(!0),oe=(0,z0.useCallback)({[m.name](le){let ce=m(le);if(!1){if((v==="always"||v==="once"&&te.current)&&!_(ce,b))try{}catch(ie){}if((x==="always"||x==="once"&&te.current)&&ce===le)try{}catch(ie){}}return ce}}[m.name],[m,G,C]),re=E9(V.addNestedSub,L.getState,B||L.getState,oe,_);return(0,z0.useDebugValue)(re),re}}var SM=_M();ne();function vn(s,f){if(s==null)return{};var m={},w=Object.keys(s),_,C;for(C=0;C=0)&&(m[_]=s[_]);return m}var CQ=O(fe()),AQ=O(k()),Ag=O(xe());ne();function IM(){let s=_9(),f=null,m=null;return{clear(){f=null,m=null},notify(){s(()=>{let w=f;for(;w;)w.callback(),w=w.next})},get(){let w=[],_=f;for(;_;)w.push(_),_=_.next;return w},subscribe(w){let _=!0,C=m={callback:w,next:null,prev:m};return C.prev?C.prev.next=C:f=C,function(){!_||f===null||(_=!1,C.next?C.next.prev=C.prev:m=C.prev,C.prev?C.prev.next=C.next:f=C.next)}}}}var P9={notify(){},get:()=>[]};function jM(s,f){let m,w=P9,_=0,C=!1;function z(le){G();let ce=w.subscribe(le),ie=!1;return()=>{ie||(ie=!0,ce(),Q())}}function L(){w.notify()}function V(){re.onStateChange&&re.onStateChange()}function B(){return C}function G(){_++,m||(m=f?f.addNestedSub(V):s.subscribe(V),w=IM())}function Q(){_--,m&&_===0&&(m(),m=void 0,w.clear(),w=P9)}function te(){C||(C=!0,G())}function oe(){C&&(C=!1,Q())}let re={addNestedSub:z,notifyNestedSubs:L,handleChangeWrapper:V,isSubscribed:B,trySubscribe:te,tryUnsubscribe:oe,getListeners:()=>w};return re}var k9=O(k()),EM=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",PM=EM?k9.useLayoutEffect:k9.useEffect,kM=j9,CM=s=>{kM=s},L0=O(k());function C9({store:s,context:f,children:m,serverState:w,stabilityCheck:_="once",noopCheck:C="once"}){let z=L0.useMemo(()=>{let V=jM(s);return{store:s,subscription:V,getServerState:w?()=>w:void 0,stabilityCheck:_,noopCheck:C}},[s,w,_,C]),L=L0.useMemo(()=>s.getState(),[s]);return PM(()=>{let{subscription:V}=z;return V.onStateChange=V.notifyNestedSubs,V.trySubscribe(),L!==s.getState()&&V.notifyNestedSubs(),()=>{V.tryUnsubscribe(),V.onStateChange=void 0}},[z,L]),L0.createElement((f||_s).Provider,{value:z},m)}var A9=C9;function zf(s=_s){let f=s===_s?I9:Cg(s);return function(){let{store:m}=f();return m}}var kc=zf();function N0(s=_s){let f=s===_s?kc:zf(s);return function(){return f().dispatch}}var M9=N0();OM(vM.useSyncExternalStoreWithSelector),CM(gM.useSyncExternalStore),yM(Oa.unstable_batchedUpdates);var Iu=()=>M9(),To=SM;function Ti(s){for(var f=arguments.length,m=Array(f>1?f-1:0),w=1;w3?f.i-4:f.i:Array.isArray(s)?1:Mg(s)?2:Tg(s)?3:0}function Ac(s,f){return Cc(s)===2?s.has(f):Object.prototype.hasOwnProperty.call(s,f)}function AM(s,f){return Cc(s)===2?s.get(f):s[f]}function T9(s,f,m){var w=Cc(s);w===2?s.set(f,m):w===3?s.add(m):s[f]=m}function R9(s,f){return s===f?s!==0||1/s==1/f:s!=s&&f!=f}function Mg(s){return zM&&s instanceof Map}function Tg(s){return DM&&s instanceof Set}function Is(s){return s.o||s.t}function Rg(s){if(Array.isArray(s))return Array.prototype.slice.call(s);var f=Ze(s);delete f[yn];for(var m=Rc(f),w=0;w1&&(s.set=s.add=s.clear=s.delete=MM),Object.freeze(s),f&&ju(s,function(m,w){return zg(w,!0)},!0)),s}function MM(){Ti(2)}function Dg(s){return s==null||typeof s!="object"||Object.isFrozen(s)}function Ja(s){var f=Ug[s];return f||Ti(18,s),f}function TM(s,f){Ug[s]||(Ug[s]=f)}function Lg(){return Df}function Ng(s,f){f&&(Ja("Patches"),s.u=[],s.s=[],s.v=f)}function F0(s){Fg(s),s.p.forEach(Wg),s.p=null}function Fg(s){s===Df&&(Df=s.l)}function z9(s){return Df={p:[],l:Df,h:s,m:!0,_:0}}function Wg(s){var f=s[yn];f.i===0||f.i===1?f.j():f.g=!0}function Bg(s,f){f._=f.p.length;var m=f.p[0],w=s!==void 0&&s!==m;return f.h.O||Ja("ES5").S(f,s,w),w?(m[yn].P&&(F0(f),Ti(4)),Dl(s)&&(s=W0(f,s),f.l||Mc(f,s)),f.u&&Ja("Patches").M(m[yn].t,s,f.u,f.s)):s=W0(f,m,[]),F0(f),f.u&&f.v(f.u,f.s),s!==Ll?s:void 0}function W0(s,f,m){if(Dg(f))return f;var w=f[yn];if(!w)return ju(f,function(L,V){return D9(s,w,f,L,V,m)},!0),f;if(w.A!==s)return f;if(!w.P)return Mc(s,w.t,!0),w.t;if(!w.I){w.I=!0,w.A._--;var _=w.i===4||w.i===5?w.o=Rg(w.k):w.o,C=_,z=!1;w.i===3&&(C=new Set(_),_.clear(),z=!0),ju(C,function(L,V){return D9(s,w,_,L,V,m,z)}),Mc(s,_,!1),m&&s.u&&Ja("Patches").N(w,m,s.u,s.s)}return w.o}function D9(s,f,m,w,_,C,z){if(Ss(_)){var L=W0(s,_,C&&f&&f.i!==3&&!Ac(f.R,w)?C.concat(w):void 0);if(T9(m,w,L),!Ss(L))return;s.m=!1}else z&&m.add(_);if(Dl(_)&&!Dg(_)){if(!s.h.D&&s._<1)return;W0(s,_),f&&f.A.l||Mc(s,_)}}function Mc(s,f,m){m===void 0&&(m=!1),!s.l&&s.h.D&&s.m&&zg(f,m)}function Tc(s,f){var m=s[yn];return(m?Is(m):s)[f]}function L9(s,f){if(f in s)for(var m=Object.getPrototypeOf(s);m;){var w=Object.getOwnPropertyDescriptor(m,f);if(w)return w;m=Object.getPrototypeOf(m)}}function js(s){s.P||(s.P=!0,s.l&&js(s.l))}function Hg(s){s.o||(s.o=Rg(s.t))}function Vg(s,f,m){var w=Mg(f)?Ja("MapSet").F(f,m):Tg(f)?Ja("MapSet").T(f,m):s.O?function(_,C){var z=Array.isArray(_),L={i:z?1:0,A:C?C.A:Lg(),P:!1,I:!1,R:{},l:C,t:_,k:null,o:null,j:null,C:!1},V=L,B=Lf;z&&(V=[L],B=zc);var G=Proxy.revocable(V,B),Q=G.revoke,te=G.proxy;return L.k=te,L.j=Q,te}(f,m):Ja("ES5").J(f,m);return(m?m.A:Lg()).p.push(w),w}function RM(s){return Ss(s)||Ti(22,s),function f(m){if(!Dl(m))return m;var w,_=m[yn],C=Cc(m);if(_){if(!_.P&&(_.i<4||!Ja("ES5").K(_)))return _.t;_.I=!0,w=N9(m,C),_.I=!1}else w=N9(m,C);return ju(w,function(z,L){_&&AM(_.t,z)===L||T9(w,z,f(L))}),C===3?new Set(w):w}(s)}function N9(s,f){switch(f){case 2:return new Map(s);case 3:return Array.from(s)}return Rg(s)}function F9(){function s(z,L){var V=C[z];return V?V.enumerable=L:C[z]=V={configurable:!0,enumerable:L,get:function(){var B=this[yn];return Lf.get(B,z)},set:function(B){var G=this[yn];Lf.set(G,z,B)}},V}function f(z){for(var L=z.length-1;L>=0;L--){var V=z[L][yn];if(!V.P)switch(V.i){case 5:w(V)&&js(V);break;case 4:m(V)&&js(V)}}}function m(z){for(var L=z.t,V=z.k,B=Rc(V),G=B.length-1;G>=0;G--){var Q=B[G];if(Q!==yn){var te=L[Q];if(te===void 0&&!Ac(L,Q))return!0;var oe=V[Q],re=oe&&oe[yn];if(re?re.t!==te:!R9(oe,te))return!0}}var le=!!L[yn];return B.length!==Rc(L).length+(le?0:1)}function w(z){var L=z.k;if(L.length!==z.t.length)return!0;var V=Object.getOwnPropertyDescriptor(L,L.length-1);if(V&&!V.get)return!0;for(var B=0;B1?ie-1:0),Ae=1;Ae1?G-1:0),te=1;te=0;_--){var C=w[_];if(C.path.length===0&&C.op==="replace"){m=C.value;break}}_>-1&&(w=w.slice(_+1));var z=Ja("Patches").$;return Ss(m)?z(m,w):this.produce(m,function(L){return z(L,w)})},s}(),Ro=new Lr,H9=Ro.produce,V9=Ro.produceWithPatches.bind(Ro),MQ=Ro.setAutoFreeze.bind(Ro),TQ=Ro.setUseProxies.bind(Ro),RQ=Ro.applyPatches.bind(Ro),zQ=Ro.createDraft.bind(Ro),DQ=Ro.finishDraft.bind(Ro),Ga=H9;function Nf(s){"@babel/helpers - typeof";return Nf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(f){return typeof f}:function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},Nf(s)}function q9(s,f){if(Nf(s)!="object"||!s)return s;var m=s[Symbol.toPrimitive];if(m!==void 0){var w=m.call(s,f||"default");if(Nf(w)!="object")return w;throw new TypeError("@@toPrimitive must return a primitive value.")}return(f==="string"?String:Number)(s)}function NM(s){var f=q9(s,"string");return Nf(f)=="symbol"?f:String(f)}function FM(s,f,m){return f=NM(f),f in s?Object.defineProperty(s,f,{value:m,enumerable:!0,configurable:!0,writable:!0}):s[f]=m,s}function $g(s,f){var m=Object.keys(s);if(Object.getOwnPropertySymbols){var w=Object.getOwnPropertySymbols(s);f&&(w=w.filter(function(_){return Object.getOwnPropertyDescriptor(s,_).enumerable})),m.push.apply(m,w)}return m}function U9(s){for(var f=1;f"u"&&(m=f,f=void 0),typeof m<"u"){if(typeof m!="function")throw new Error(xo(1));return m(J9)(s,f)}if(typeof s!="function")throw new Error(xo(2));var _=s,C=f,z=[],L=z,V=!1;function B(){L===z&&(L=z.slice())}function G(){if(V)throw new Error(xo(3));return C}function Q(le){if(typeof le!="function")throw new Error(xo(4));if(V)throw new Error(xo(5));var ce=!0;return B(),L.push(le),function(){if(ce){if(V)throw new Error(xo(6));ce=!1,B();var ie=L.indexOf(le);L.splice(ie,1),z=null}}}function te(le){if(!$9(le))throw new Error(xo(7));if(typeof le.type>"u")throw new Error(xo(8));if(V)throw new Error(xo(9));try{V=!0,C=_(C,le)}finally{V=!1}for(var ce=z=L,ie=0;ie"u")throw new Error(xo(12));if(typeof m(void 0,{type:Ki.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(xo(13))})}function BM(s){for(var f=Object.keys(s),m={},w=0;w"u"){var Pe=B&&B.type;throw new Error(xo(14))}te[re]=ie,Q=Q||ie!==ce}return Q=Q||C.length!==Object.keys(V).length,Q?te:V}}function V0(){for(var s=arguments.length,f=new Array(s),m=0;m0&&C[C.length-1])&&(B[0]===6||B[0]===2)){m=0;continue}if(B[0]===3&&(!C||B[1]>C[0]&&B[1]1){var m=s.shift();s[0]=m+s[0]}s[0].match(/^file:\/\/\//)?s[0]=s[0].replace(/^([^/:]+):\/*/,"$1:///"):s[0]=s[0].replace(/^([^/:]+):\/*/,"$1://");for(var w=0;w0&&(_=_.replace(/^[\/]+/,"")),w0?"?":"")+z.join("&"),C}function ZM(){var s;return typeof arguments[0]=="object"?s=arguments[0]:s=[].slice.call(arguments),u4e(s)}var eT={stats:void 0,bannerText:""},BQ=Ka("home_stats",async(s,{rejectWithValue:f})=>{try{return await Xg("api/v2/stats")}catch(m){return f(m.message)}}),HQ=Ka("home_banner",async(s,{rejectWithValue:f})=>{try{return(await fetch(ZM("/","banner.txt"))).text()}catch(m){return f(m.message)}}),c4e=ze({name:"home",initialState:eT,reducers:{},extraReducers:s=>{s.addCase(BQ.fulfilled,(f,m)=>{f.stats=m.payload}),s.addCase(BQ.rejected,f=>{f.stats=eT.stats}),s.addCase(HQ.fulfilled,(f,m)=>{f.bannerText=m.payload}),s.addCase(HQ.rejected,f=>{f.bannerText=eT.bannerText})}}),p4e=c4e.reducer,jRt=O(k()),Wn=class _Q{constructor(f,m){this.value=f,this.axioms=m}static fromJson(f){return f?(Array.isArray(f)||(f=[f]),f.map(m=>typeof m=="object"&&Array.isArray(m.type)&&m.type.indexOf("reification")!==-1?new _Q(m.value,m.axioms):new _Q(m,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let f={};for(let m of this.axioms)for(let w of Object.keys(m)){let _=m[w],C=f[w];C!==void 0?C.push(_):f[w]=[_]}return f}},f4e=class SQ{constructor(f){f?this.linkedEntities={...f}:this.linkedEntities={}}mergeWith(f){return f?new SQ({...this.linkedEntities,linkedEntities:f}):new SQ({...this.linkedEntities})}getLabelForIri(f){let m=this.linkedEntities[f];if(m){let w=Wn.fromJson(m.label);if(w&&w.length>0)return w[0].value}}get(f){return this.linkedEntities[f]}},VQ=class{constructor(s){this.properties=s}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let s=this.properties.type;for(let f of s)if(["ontology","class","property","individual"].indexOf(f)!==-1)return f;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return So(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let s=Wn.fromJson(this.properties.label);return s&&s.length>0?s.map(f=>f.value):[this.getIri()]}getDescription(){let s=Wn.fromJson(this.properties.definition);return s&&s.length>0?s.map(f=>f.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(s){let f=this.properties.linkedEntities;return f&&Wn.fromJson(f[s]?.label)[0]?.value||s}getAnnotationById(s){return Wn.fromJson(So(this.properties[s]))}getLinkedEntities(){return new f4e(this.properties.linkedEntities||{})}},e_=class extends VQ{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Wn.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Wn.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Wn.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Wn.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return So(this.properties.ancestor)}getHierarchicalAncestorIris(){return So(this.properties.hierarchicalAncestor)}getSynonyms(){return Wn.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getDefinedBy(){return this.properties.definedBy||[]}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Wn.fromJson(this.properties["http://xmlns.com/foaf/0.1/depicted_by"])}getAnnotationPredicates(){let s=So(this.properties.definitionProperty),f=So(this.properties.synonymProperty),m=So(this.properties.hierarchicalProperty),w=new Set;for(let _ of Object.keys(this.properties)){if(_.indexOf("://")===-1||_.startsWith("negativePropertyAssertion+")||_==="http://xmlns.com/foaf/0.1/depicted_by")continue;let C=this.getLinkedEntities().get(_);C!=null&&C.type.indexOf("objectProperty")!==-1||C!=null&&C.type.indexOf("dataProperty")!==-1||s.indexOf(_)!==-1||f.indexOf(_)!==-1||m.indexOf(_)!==-1||(_.startsWith("http://www.w3.org/2000/01/rdf-schema#")||_.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||_.startsWith("http://www.w3.org/2002/07/owl#"))&&_!=="http://www.w3.org/2000/01/rdf-schema#comment"&&_!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&_!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||_!=="http://www.geneontology.org/formats/oboInOwl#id"&&w.add(_)}return Array.from(w)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(s){let f=Wn.fromJson(this.properties.hierarchicalParent);for(let m of f)if(m.value===s)return m.getMetadata()}},d4e=class extends e_{getParents(){return Wn.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Wn.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Wn.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return So(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return So(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}},m4e=class extends e_{getParents(){return Wn.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Wn.fromJson([])}getDifferentFrom(){return So(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return So(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let s=this.getRdfTypes();return!s||!Array.isArray(s)?[]:s.filter(f=>f!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof f!="string"||!f.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}},h4e=class extends e_{getParents(){return Wn.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Wn.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Wn.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return So(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return So(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return So(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return So(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Wn.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};function So(s){return Array.isArray(s)?s:s?[s]:[]}function g4e(){return(Math.random()*Math.pow(2,54)).toString(36)}function Fl(s){let f=s.type||[];if(f.indexOf("class")!==-1)return new d4e(s);if(f.indexOf("property")!==-1)return new h4e(s);if(f.indexOf("individual")!==-1)return new m4e(s);throw new Error("Unknown entity type: "+JSON.stringify(s))}function qQ(s){let f=new URLSearchParams;return s.forEach((m,w)=>{let _=w.includes("_")?v4e(w):w;_==="oboId"&&(_="curie"),f.append(_,m)}),f}function v4e(s){return s.replace(/([-_][a-z])/gi,f=>f.toUpperCase().replace("-","").replace("_",""))}var UQ=class extends VQ{getOntologyId(){return this.properties.ontologyId}getName(){let s=Wn.fromJson(this.properties.label||this.properties.title||"");return s[0]&&s[0].value||this.getOntologyId()}getDescription(){let s=Wn.fromJson(this.properties.definition||this.properties.description||"");return s[0]&&s[0].value||""}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let s=this.properties["http://www.w3.org/2002/07/owl#versionIRI"];if(!s)return"";let f=s.match(/\d{4}-\d{2}-\d{2}/);if(f&&f.length>0)return f[0];{let m=s.match(/\/v[d.].*\//);return m?m[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let s=new Set;for(let f of Object.keys(this.properties))f.indexOf("://")!==-1&&f!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(f.startsWith("http://www.w3.org/2000/01/rdf-schema#")||f.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||f.startsWith("http://www.w3.org/2002/07/owl#")||s.add(f));return Array.from(s)}getPreferredRoots(){return So(this.properties.hasPreferredRoot)}getLanguages(){return So(this.properties.language)}getImportsFrom(){return So(this.properties.importsFrom)}getExportsTo(){return So(this.properties.exportsTo)}},$Q=O(me());function y4e(s){let f=new $Q.default,m=new Map;for(let L of s)m.set(L.getIri(),L);for(let L of s)if(!tT(L.getIri()))for(let V of L.getParents()){let B=V.value,G=m.get(B);if(tT(B)||!(G instanceof e_))continue;var w,_;L.getType()==="individual"?(_="http://www.w3.org/1999/02/22-rdf-syntax-ns#type",w=null):L.getType()=="class"&&(w=V.getMetadata()&&V.getMetadata().parentRelationToChild&&V.getMetadata().parentRelationToChild[0],_=V.getMetadata()&&V.getMetadata().childRelationToParent&&V.getMetadata().childRelationToParent[0]);let Q={parent:G,child:L,parentRelationToChild:w,childRelationToParent:_};f.set(L.getIri(),Q)}var C=function(L,V){V.add(L);let B=f.get(L);if(B)for(let G of B)V.has(G.parent.getIri())?f.delete(L,G):C(G.parent.getIri(),new Set(V))};for(let L of s)C(L.getIri(),new Set);let z=new $Q.default;for(let L of Array.from(f.keys())){let V=f.get(L);for(let B of V)z.set(B.parent.getIri(),B)}return{rootEntities:s.filter(L=>tT(L.getIri())?!1:(f.get(L.getIri())||[]).length===0),parentToChildRelations:z}}function tT(s){return s==="http://www.w3.org/2002/07/owl#Thing"||s==="http://www.w3.org/2002/07/owl#TopObjectProperty"}function JQ(s,f,m){let{rootEntities:w,parentToChildRelations:_}=y4e(s);if(console.log("rootEntities"),console.dir(w),console.log("parentToChildRelations"),console.dir(_),f){let B=m.getPreferredRoots();B.length>0&&(w=B.map(G=>s.filter(Q=>Q.getIri()===G)[0]).filter(G=>!!G))}let C=[],z={},L=new Set;return{allNodes:C,rootNodes:w.map(B=>V(B,void 0,0,null,null)),nodeChildren:z,automaticallyExpandedNodes:L};function V(B,G,Q,te,oe){if(Q>100)throw new Error("probable cyclic tree (createTreeNode)");let re=_.get(B.getIri())||[],le={absoluteIdentity:G?G.absoluteIdentity+";"+B.getIri():B.getIri(),iri:B.getIri(),title:B.getName(),expandable:B.hasChildren(),entity:B,numDescendants:B.getNumHierarchicalDescendants()||B.getNumDescendants(),parentRelationToChild:te,childRelationToParent:oe};return C.push(le),z[le.absoluteIdentity]=re.map(ce=>V(ce.child,le,Q+1,ce.parentRelationToChild,ce.childRelationToParent)),B.hasChildren()&&re.length>0&&L.add(le.absoluteIdentity),le}}var xa={ontology:void 0,entity:void 0,nodesWithChildrenLoaded:[],nodeChildren:{},rootNodes:[],ontologies:[],totalOntologies:0,entities:[],totalEntities:0,loadingOntologies:!1,loadingEntities:!1,numPendingTreeRequests:0,loadingOntology:!1,loadingEntity:!1,classInstances:null,loadingClassInstances:!1,automaticallyExpandedNodes:[],manuallyExpandedNodes:[],preferredRoots:!1,displayObsolete:!1,displaySiblings:!1,displayCounts:!0,errorMessage:""},GQ=Vn("ontologies_tree_reset_content"),XQ=Vn("ontologies_tree_reset_settings"),KQ=Vn("ontologies_preferred_enabled"),YQ=Vn("ontologies_preferred_disabled"),QQ=Vn("ontologies_node_open"),ZQ=Vn("ontologies_node_close"),eZ=Vn("ontologies_show_obsolete"),tZ=Vn("ontologies_hide_obsolete"),rZ=Vn("ontologies_show_siblings"),nZ=Vn("ontologies_hide_siblings"),oZ=Vn("ontologies_show_counts"),iZ=Vn("ontologies_hide_counts"),t_=Ka("ontologies_ontology",async({ontologyId:s,lang:f,apiUrl:m},{rejectWithValue:w})=>{let _=`api/v2/ontologies/${s}`;try{let C=await Xg(_,{lang:f},m);return new UQ(C)}catch(C){return w(`Error accessing: ${_}; ${C.message}`)}}),r_=Ka("ontologies_entity_type",async({ontologyId:s,entityType:f,entityIri:m,searchParams:w},{rejectWithValue:_})=>{let C=qQ(w),z=encodeURIComponent(encodeURIComponent(m)),L="";try{let V=null;if(m)L=`api/v2/ontologies/${s}/${f}/${z}?${new URLSearchParams(C)}`,V=await Xg(L);else{L=`api/v2/ontologies/${s}/${f}?${new URLSearchParams(C)}`;let B=await Yi(L);if(B.elements.length===1&&B.totalElements===1)V=B.elements[0];else return _(`Error accessing: ${L}; Retrieved nondistinct entity: ${JSON.stringify(B)}`)}return Fl(V)}catch(V){return _(`Error accessing: ${L}; ${V.message}`)}}),n_=Ka("ontologies_entity",async({ontologyId:s,entityIri:f},{rejectWithValue:m})=>{let w=encodeURIComponent(encodeURIComponent(f)),_="";try{_=`api/v2/ontologies/${s}/entities/${w}`;let C=await Xg(_);return Fl(C)}catch(C){return m(`Error accessing: ${_}; ${C.message}`)}}),o_=Ka("ontologies_entity_class_instances",async({ontologyId:s,classIri:f,searchParams:m},{rejectWithValue:w})=>{let _="";try{if(f){let C=qQ(m),z=encodeURIComponent(encodeURIComponent(f));return _=`api/v2/ontologies/${s}/classes/${z}/instances?${new URLSearchParams(C)}`,(await Yi(_)).map(L=>Fl(L))}else return w(`Warning accessing: ${_}; Class IRI not provided`)}catch(C){return w(`Error accessing: ${_}; ${C.message}`)}}),rT=Ka("ontologies_ontologies",async({page:s,rowsPerPage:f,search:m},{rejectWithValue:w})=>{m.length>1&&!m.includes(" ")&&(m="*"+m+"*");let _=`api/v2/ontologies?page=${s}&size=${f}${m?"&search="+m:""}`;try{return(await Yi(_)).map(C=>new UQ(C))}catch(C){return w(`Error accessing: ${_}; ${C.message}`)}}),nT=Ka("ontologies_entities",async({ontologyId:s,entityType:f,page:m,rowsPerPage:w,search:_},{rejectWithValue:C})=>{let z=`api/v2/ontologies/${s}/${f}?page=${m}&size=${w}${_?"&search="+_:""}`;try{return(await Yi(z)).map(L=>Fl(L))}catch(L){return C(`Error accessing: ${z}; ${L.message}`)}}),i_=Ka("ontologies_ancestors",async({ontologyId:s,entityType:f,entityIri:m,lang:w,showObsoleteEnabled:_,apiUrl:C})=>{let z=encodeURIComponent(encodeURIComponent(m));var L;return f==="classes"?L=await Yi(`api/v2/ontologies/${s}/classes/${z}/hierarchicalAncestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,C):L=await Yi(`api/v2/ontologies/${s}/${f}/${z}/ancestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,C),L.elements.map(V=>Fl(V))}),a_=Ka("ontologies_roots",async({ontologyId:s,entityType:f,preferredRoots:m,lang:w,showObsoleteEnabled:_,apiUrl:C})=>{if(f==="individuals"){let[z,L]=await Promise.all([Yi(`api/v2/ontologies/${s}/classes?${new URLSearchParams({hasIndividuals:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,C),Yi(`api/v2/ontologies/${s}/individuals?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,C)]);return{entityType:f,rootTerms:null,classesWithIndividuals:z.elements.map(V=>Fl(V)),orphanedIndividuals:L.elements.map(V=>Fl(V))}}else if(f==="classes"&&m){let z=await Yi(`api/v2/ontologies/${s}/${f}?${new URLSearchParams({isPreferredRoot:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,C);return{entityType:f,rootTerms:z.elements.map(L=>Fl(L)),classesWithIndividuals:null,orphanedIndividuals:null}}else{let z=await Yi(`api/v2/ontologies/${s}/${f}?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,C);return{entityType:f,rootTerms:z.elements.map(L=>Fl(L)),classesWithIndividuals:null,orphanedIndividuals:null}}}),l_=Ka("ontologies_node_children",async({ontologyId:s,entityTypePlural:f,entityIri:m,absoluteIdentity:w,lang:_,apiUrl:C,includeObsoleteEntities:z})=>{let L=encodeURIComponent(encodeURIComponent(m));var V;return f==="classes"?V=await Yi(`api/v2/ontologies/${s}/classes/${L}/hierarchicalChildren?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:z})}`,void 0,C):f==="individuals"?V=await Yi(`api/v2/ontologies/${s}/classes/${L}/instances?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:z})}`,void 0,C):V=await Yi(`api/v2/ontologies/${s}/${f}/${L}/children?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:z})}`,void 0,C),{absoluteIdentity:w,children:V.elements.map(B=>Fl(B)).map(B=>{let G=B.getHierarchicalParentReificationAxioms(m);return{iri:B.getIri(),absoluteIdentity:w+";"+B.getIri(),title:B.getName(),expandable:B.hasChildren(),entity:B,numDescendants:B.getNumHierarchicalDescendants()||B.getNumDescendants(),parentRelationToChild:G&&G.parentRelationToChild?.[0]||null,childRelationToParent:G&&G.childRelationToParent?.[0]||null}})}}),b4e=ze({name:"ontologies",initialState:xa,reducers:{},extraReducers:s=>{s.addCase(t_.fulfilled,(f,m)=>{f.ontology=m.payload,f.loadingOntology=!1}),s.addCase(t_.pending,f=>{f.loadingOntology=!0,f.errorMessage=xa.errorMessage}),s.addCase(t_.rejected,(f,m)=>{f.ontology=xa.ontology,f.loadingOntology=!1,f.errorMessage=m.payload}),s.addCase(r_.fulfilled,(f,m)=>{f.entity=m.payload,f.loadingEntity=!1}),s.addCase(r_.pending,f=>{f.loadingEntity=!0,f.errorMessage=xa.errorMessage}),s.addCase(r_.rejected,(f,m)=>{f.loadingEntity=!1,f.entity=xa.entity,f.errorMessage=m.payload}),s.addCase(n_.fulfilled,(f,m)=>{f.entity=m.payload,f.loadingEntity=!1}),s.addCase(n_.pending,f=>{f.loadingEntity=!0,f.errorMessage=xa.errorMessage}),s.addCase(n_.rejected,(f,m)=>{f.loadingEntity=!1,f.entity=xa.entity,f.errorMessage=m.payload}),s.addCase(o_.fulfilled,(f,m)=>{f.classInstances=m.payload,f.loadingClassInstances=!1}),s.addCase(o_.pending,f=>{f.loadingClassInstances=!0,f.errorMessage=xa.errorMessage}),s.addCase(o_.rejected,(f,m)=>{f.loadingClassInstances=!1,f.classInstances=xa.classInstances,f.errorMessage=m.payload}),s.addCase(i_.pending,f=>{++f.numPendingTreeRequests}),s.addCase(i_.fulfilled,(f,m)=>{let{rootNodes:w,nodeChildren:_,automaticallyExpandedNodes:C}=JQ([f.entity,...m.payload],f.preferredRoots,f.ontology);f.rootNodes=w,f.nodeChildren=_,f.automaticallyExpandedNodes=Array.from(new Set([...f.automaticallyExpandedNodes,...Array.from(C)])),--f.numPendingTreeRequests}),s.addCase(i_.rejected,f=>{--f.numPendingTreeRequests}),s.addCase(l_.pending,f=>{++f.numPendingTreeRequests}),s.addCase(l_.fulfilled,(f,m)=>{f.nodeChildren={...f.nodeChildren,[m.payload.absoluteIdentity]:m.payload.children},f.nodesWithChildrenLoaded.push(m.payload.absoluteIdentity),--f.numPendingTreeRequests}),s.addCase(l_.rejected,f=>{--f.numPendingTreeRequests}),s.addCase(a_.pending,f=>{++f.numPendingTreeRequests}),s.addCase(a_.fulfilled,(f,m)=>{let{rootTerms:w,classesWithIndividuals:_,orphanedIndividuals:C}=m.payload,{rootNodes:z,nodeChildren:L,automaticallyExpandedNodes:V}=JQ([...w||[],..._||[],...C||[]],f.preferredRoots,f.ontology);f.rootNodes=z,f.nodeChildren=L,f.automaticallyExpandedNodes=Array.from(new Set([...f.automaticallyExpandedNodes,...Array.from(V)])),--f.numPendingTreeRequests}),s.addCase(a_.rejected,f=>{--f.numPendingTreeRequests}),s.addCase(rT.fulfilled,(f,m)=>{f.ontologies=m.payload.elements,f.totalOntologies=m.payload.totalElements,f.loadingOntologies=!1}),s.addCase(rT.pending,f=>{f.loadingOntologies=!0,f.errorMessage=xa.errorMessage}),s.addCase(rT.rejected,(f,m)=>{f.ontologies=xa.ontologies,f.loadingOntologies=!1,f.errorMessage=m.payload}),s.addCase(nT.fulfilled,(f,m)=>{f.entities=m.payload.elements,f.totalEntities=m.payload.totalElements,f.loadingEntities=!1}),s.addCase(nT.pending,f=>{f.loadingEntities=!0,f.errorMessage=xa.errorMessage}),s.addCase(nT.rejected,(f,m)=>{f.entities=xa.entities,f.loadingEntities=!1,f.errorMessage=m.payload}),s.addCase(GQ,f=>{f.nodesWithChildrenLoaded=[],f.nodeChildren={},f.rootNodes=[],f.automaticallyExpandedNodes=[]}),s.addCase(XQ,(f,m)=>{if(f.preferredRoots=m.payload.entityType==="classes"&&f.ontology.getPreferredRoots().length>0,m.payload.selectedEntity){let w=!1;for(let _ of f.ontology.getPreferredRoots())if(m.payload.selectedEntity.getHierarchicalAncestorIris().indexOf(_)!==-1){w=!0;break}w||(f.preferredRoots=!1)}f.displayObsolete=!1,f.displaySiblings=!1,f.displayCounts=!0,f.manuallyExpandedNodes=[]}),s.addCase(KQ,f=>{f.preferredRoots=!0}),s.addCase(YQ,f=>{f.preferredRoots=!1}),s.addCase(eZ,f=>{f.displayObsolete=!0}),s.addCase(tZ,f=>{f.displayObsolete=!1}),s.addCase(rZ,f=>{f.displaySiblings=!0}),s.addCase(nZ,f=>{f.displaySiblings=!1}),s.addCase(oZ,f=>{f.displayCounts=!0}),s.addCase(iZ,f=>{f.displayCounts=!1}),s.addCase(QQ,(f,m)=>{f.manuallyExpandedNodes=Array.from(new Set([...f.manuallyExpandedNodes,m.payload.absoluteIdentity]))}),s.addCase(ZQ,(f,m)=>{f.manuallyExpandedNodes=f.manuallyExpandedNodes.filter(w=>w!==m.payload.absoluteIdentity),f.automaticallyExpandedNodes=f.automaticallyExpandedNodes.filter(w=>w!==m.payload.absoluteIdentity),delete f.nodeChildren[m.payload.absoluteIdentity],f.nodesWithChildrenLoaded=f.nodesWithChildrenLoaded.filter(w=>w!==m.payload.absoluteIdentity)})}}),w4e=b4e.reducer,oT={searchResults:[],loadingSearchResults:!1,totalSearchResults:0,facets:Object.create(null)},iT=Ka("search_results",async({page:s,rowsPerPage:f,search:m,ontologyId:w,type:_,searchParams:C},{rejectWithValue:z})=>{try{let L={search:m,size:f,page:s,facetFields:"ontologyId type",ontologyId:w.length>0?w[0]:null,type:_.length>0?_[0]:null,...Object.fromEntries(C)};for(let B in L)(L[B]===void 0||L[B]===null||L[B]==="")&&delete L[B];let V=new URLSearchParams(L);return C.get("ontology")&&(V.set("ontologyId",C.get("ontology")),V.delete("ontology")),C.get("q")&&V.delete("q"),(await Yi(`api/v2/entities?${V}`)).map(B=>Fl(B))}catch(L){return z(L.message)}}),O4e=ze({name:"search",initialState:oT,reducers:{},extraReducers:s=>{s.addCase(iT.fulfilled,(f,m)=>{f.searchResults=m.payload.elements,f.totalSearchResults=m.payload.totalElements,f.facets=m.payload.facetFieldsToCounts,f.loadingSearchResults=!1}),s.addCase(iT.pending,f=>{f.loadingSearchResults=!0}),s.addCase(iT.rejected,f=>{f.loadingSearchResults=!1,f.searchResults=oT.searchResults,f.facets=oT.facets})}}),x4e=O4e.reducer,_4e=j({reducer:{home:p4e,search:x4e,ontologies:w4e},middleware:s=>s({serializableCheck:!1})});Gi();var S4e={black:"#000",white:"#fff"},Kg=S4e,I4e={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},U0=I4e,j4e={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},$0=j4e,E4e={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},J0=E4e,P4e={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},G0=P4e,k4e={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},X0=k4e,C4e={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},Yg=C4e,A4e={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},M4e=A4e,aZ="$$material",Wf=O(E0());ne();var lZ=O(mi());ne();var T4e=["values","unit","step"],R4e=s=>{let f=Object.keys(s).map(m=>({key:m,val:s[m]}))||[];return f.sort((m,w)=>m.val-w.val),f.reduce((m,w)=>H({},m,{[w.key]:w.val}),{})};function z4e(s){let{values:f={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:m="px",step:w=5}=s,_=vn(s,T4e),C=R4e(f),z=Object.keys(C);function L(te){return`@media (min-width:${typeof f[te]=="number"?f[te]:te}${m})`}function V(te){return`@media (max-width:${(typeof f[te]=="number"?f[te]:te)-w/100}${m})`}function B(te,oe){let re=z.indexOf(oe);return`@media (min-width:${typeof f[te]=="number"?f[te]:te}${m}) and (max-width:${(re!==-1&&typeof f[z[re]]=="number"?f[z[re]]:oe)-w/100}${m})`}function G(te){return z.indexOf(te)+1`@media (min-width:${aT[s]}px)`};function Wl(s,f,m){let w=s.theme||{};if(Array.isArray(f)){let _=w.breakpoints||sZ;return f.reduce((C,z,L)=>(C[_.up(_.keys[L])]=m(f[L]),C),{})}if(typeof f=="object"){let _=w.breakpoints||sZ;return Object.keys(f).reduce((C,z)=>{if(Object.keys(_.values||aT).indexOf(z)!==-1){let L=_.up(z);C[L]=m(f[z],z)}else{let L=z;C[L]=f[L]}return C},{})}return m(f)}function uZ(s={}){var f;return((f=s.keys)==null?void 0:f.reduce((m,w)=>{let _=s.up(w);return m[_]={},m},{}))||{}}function cZ(s,f){return s.reduce((m,w)=>{let _=m[w];return(!_||Object.keys(_).length===0)&&delete m[w],m},f)}function B4e(s,...f){let m=uZ(s),w=[m,...f].reduce((_,C)=>(0,N4e.default)(_,C),{});return cZ(Object.keys(m),w)}function H4e(s,f){if(typeof s!="object")return{};let m={},w=Object.keys(f);return Array.isArray(s)?w.forEach((_,C)=>{C{s[_]!=null&&(m[_]=!0)}),m}function lT({values:s,breakpoints:f,base:m}){let w=m||H4e(s,f),_=Object.keys(w);if(_.length===0)return s;let C;return _.reduce((z,L,V)=>(Array.isArray(s)?(z[L]=s[V]!=null?s[V]:s[C],C=V):typeof s=="object"?(z[L]=s[L]!=null?s[L]:s[C],C=L):z[L]=s,z),{})}var V4e=O(Vr());function s_(s,f,m=!0){if(!f||typeof f!="string")return null;if(s&&s.vars&&m){let w=`vars.${f}`.split(".").reduce((_,C)=>_&&_[C]?_[C]:null,s);if(w!=null)return w}return f.split(".").reduce((w,_)=>w&&w[_]!=null?w[_]:null,s)}function u_(s,f,m,w=m){let _;return typeof s=="function"?_=s(m):Array.isArray(s)?_=s[m]||w:_=s_(s,m)||w,f&&(_=f(_,w,s)),_}function q4e(s){let{prop:f,cssProperty:m=s.prop,themeKey:w,transform:_}=s,C=z=>{if(z[f]==null)return null;let L=z[f],V=z.theme,B=s_(V,w)||{};return Wl(z,L,G=>{let Q=u_(B,_,G);return G===Q&&typeof G=="string"&&(Q=u_(B,_,`${f}${G==="default"?"":(0,V4e.default)(G)}`,G)),m===!1?Q:{[m]:Q}})};return C.propTypes={},C.filterProps=[f],C}var eo=q4e;function U4e(s){let f={};return m=>(f[m]===void 0&&(f[m]=s(m)),f[m])}var $4e={m:"margin",p:"padding"},J4e={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},pZ={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},G4e=U4e(s=>{if(s.length>2)if(pZ[s])s=pZ[s];else return[s];let[f,m]=s.split(""),w=$4e[f],_=J4e[m]||"";return Array.isArray(_)?_.map(C=>w+C):[w+_]}),sT=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],uT=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],fZ=[...sT,...uT];function Zg(s,f,m,w){var _;let C=(_=s_(s,f,!1))!=null?_:m;return typeof C=="number"?z=>typeof z=="string"?z:C*z:Array.isArray(C)?z=>typeof z=="string"?z:C[z]:typeof C=="function"?C:()=>{}}function cT(s){return Zg(s,"spacing",8,"spacing")}function Bf(s,f){if(typeof f=="string"||f==null)return f;let m=Math.abs(f),w=s(m);return f>=0?w:typeof w=="number"?-w:`-${w}`}function X4e(s,f){return m=>s.reduce((w,_)=>(w[_]=Bf(f,m),w),{})}function K4e(s,f,m,w){if(f.indexOf(m)===-1)return null;let _=G4e(m),C=X4e(_,w),z=s[m];return Wl(s,z,C)}function pT(s,f){let m=cT(s.theme);return Object.keys(s).map(w=>K4e(s,f,w,m)).reduce(Qg,{})}function qn(s){return pT(s,sT)}qn.propTypes={},qn.filterProps=sT;function Un(s){return pT(s,uT)}Un.propTypes={},Un.filterProps=uT;function dZ(s){return pT(s,fZ)}dZ.propTypes={},dZ.filterProps=fZ;function Y4e(s=8){if(s.mui)return s;let f=cT({spacing:s}),m=(...w)=>(w.length===0?[1]:w).map(_=>{let C=f(_);return typeof C=="number"?`${C}px`:C}).join(" ");return m.mui=!0,m}var Q4e=O(Vr());function Z4e(...s){let f=s.reduce((w,_)=>(_.filterProps.forEach(C=>{w[C]=_}),w),{}),m=w=>Object.keys(w).reduce((_,C)=>f[C]?Qg(_,f[C](w)):_,{});return m.propTypes={},m.filterProps=s.reduce((w,_)=>w.concat(_.filterProps),[]),m}var c_=Z4e;function Ya(s){return typeof s!="number"?s:`${s}px solid`}function Qa(s,f){return eo({prop:s,themeKey:"borders",transform:f})}var e6e=Qa("border",Ya),t6e=Qa("borderTop",Ya),r6e=Qa("borderRight",Ya),n6e=Qa("borderBottom",Ya),o6e=Qa("borderLeft",Ya),i6e=Qa("borderColor"),a6e=Qa("borderTopColor"),l6e=Qa("borderRightColor"),s6e=Qa("borderBottomColor"),u6e=Qa("borderLeftColor"),c6e=Qa("outline",Ya),p6e=Qa("outlineColor"),p_=s=>{if(s.borderRadius!==void 0&&s.borderRadius!==null){let f=Zg(s.theme,"shape.borderRadius",4,"borderRadius"),m=w=>({borderRadius:Bf(f,w)});return Wl(s,s.borderRadius,m)}return null};p_.propTypes={},p_.filterProps=["borderRadius"];var ERt=c_(e6e,t6e,r6e,n6e,o6e,i6e,a6e,l6e,s6e,u6e,p_,c6e,p6e),f_=s=>{if(s.gap!==void 0&&s.gap!==null){let f=Zg(s.theme,"spacing",8,"gap"),m=w=>({gap:Bf(f,w)});return Wl(s,s.gap,m)}return null};f_.propTypes={},f_.filterProps=["gap"];var d_=s=>{if(s.columnGap!==void 0&&s.columnGap!==null){let f=Zg(s.theme,"spacing",8,"columnGap"),m=w=>({columnGap:Bf(f,w)});return Wl(s,s.columnGap,m)}return null};d_.propTypes={},d_.filterProps=["columnGap"];var m_=s=>{if(s.rowGap!==void 0&&s.rowGap!==null){let f=Zg(s.theme,"spacing",8,"rowGap"),m=w=>({rowGap:Bf(f,w)});return Wl(s,s.rowGap,m)}return null};m_.propTypes={},m_.filterProps=["rowGap"];var f6e=eo({prop:"gridColumn"}),d6e=eo({prop:"gridRow"}),m6e=eo({prop:"gridAutoFlow"}),h6e=eo({prop:"gridAutoColumns"}),g6e=eo({prop:"gridAutoRows"}),v6e=eo({prop:"gridTemplateColumns"}),y6e=eo({prop:"gridTemplateRows"}),b6e=eo({prop:"gridTemplateAreas"}),w6e=eo({prop:"gridArea"}),PRt=c_(f_,d_,m_,f6e,d6e,m6e,h6e,g6e,v6e,y6e,b6e,w6e);function K0(s,f){return f==="grey"?f:s}var O6e=eo({prop:"color",themeKey:"palette",transform:K0}),x6e=eo({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:K0}),_6e=eo({prop:"backgroundColor",themeKey:"palette",transform:K0}),kRt=c_(O6e,x6e,_6e);function _a(s){return s<=1&&s!==0?`${s*100}%`:s}var S6e=eo({prop:"width",transform:_a}),fT=s=>{if(s.maxWidth!==void 0&&s.maxWidth!==null){let f=m=>{var w,_;let C=((w=s.theme)==null||(w=w.breakpoints)==null||(w=w.values)==null?void 0:w[m])||aT[m];return C?((_=s.theme)==null||(_=_.breakpoints)==null?void 0:_.unit)!=="px"?{maxWidth:`${C}${s.theme.breakpoints.unit}`}:{maxWidth:C}:{maxWidth:_a(m)}};return Wl(s,s.maxWidth,f)}return null};fT.filterProps=["maxWidth"];var I6e=eo({prop:"minWidth",transform:_a}),j6e=eo({prop:"height",transform:_a}),E6e=eo({prop:"maxHeight",transform:_a}),P6e=eo({prop:"minHeight",transform:_a}),CRt=eo({prop:"size",cssProperty:"width",transform:_a}),ARt=eo({prop:"size",cssProperty:"height",transform:_a}),k6e=eo({prop:"boxSizing"}),MRt=c_(S6e,fT,I6e,j6e,E6e,P6e,k6e),C6e={border:{themeKey:"borders",transform:Ya},borderTop:{themeKey:"borders",transform:Ya},borderRight:{themeKey:"borders",transform:Ya},borderBottom:{themeKey:"borders",transform:Ya},borderLeft:{themeKey:"borders",transform:Ya},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:Ya},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:p_},color:{themeKey:"palette",transform:K0},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:K0},backgroundColor:{themeKey:"palette",transform:K0},p:{style:Un},pt:{style:Un},pr:{style:Un},pb:{style:Un},pl:{style:Un},px:{style:Un},py:{style:Un},padding:{style:Un},paddingTop:{style:Un},paddingRight:{style:Un},paddingBottom:{style:Un},paddingLeft:{style:Un},paddingX:{style:Un},paddingY:{style:Un},paddingInline:{style:Un},paddingInlineStart:{style:Un},paddingInlineEnd:{style:Un},paddingBlock:{style:Un},paddingBlockStart:{style:Un},paddingBlockEnd:{style:Un},m:{style:qn},mt:{style:qn},mr:{style:qn},mb:{style:qn},ml:{style:qn},mx:{style:qn},my:{style:qn},margin:{style:qn},marginTop:{style:qn},marginRight:{style:qn},marginBottom:{style:qn},marginLeft:{style:qn},marginX:{style:qn},marginY:{style:qn},marginInline:{style:qn},marginInlineStart:{style:qn},marginInlineEnd:{style:qn},marginBlock:{style:qn},marginBlockStart:{style:qn},marginBlockEnd:{style:qn},displayPrint:{cssProperty:!1,transform:s=>({"@media print":{display:s}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:f_},rowGap:{style:m_},columnGap:{style:d_},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:_a},maxWidth:{style:fT},minWidth:{transform:_a},height:{transform:_a},maxHeight:{transform:_a},minHeight:{transform:_a},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},dT=C6e;function A6e(...s){let f=s.reduce((w,_)=>w.concat(Object.keys(_)),[]),m=new Set(f);return s.every(w=>m.size===Object.keys(w).length)}function M6e(s,f){return typeof s=="function"?s(f):s}function T6e(){function s(m,w,_,C){let z={[m]:w,theme:_},L=C[m];if(!L)return{[m]:w};let{cssProperty:V=m,themeKey:B,transform:G,style:Q}=L;if(w==null)return null;if(B==="typography"&&w==="inherit")return{[m]:w};let te=s_(_,B)||{};return Q?Q(z):Wl(z,w,oe=>{let re=u_(te,G,oe);return oe===re&&typeof oe=="string"&&(re=u_(te,G,`${m}${oe==="default"?"":(0,Q4e.default)(oe)}`,oe)),V===!1?re:{[V]:re}})}function f(m){var w;let{sx:_,theme:C={}}=m||{};if(!_)return null;let z=(w=C.unstable_sxConfig)!=null?w:dT;function L(V){let B=V;if(typeof V=="function")B=V(C);else if(typeof V!="object")return V;if(!B)return null;let G=uZ(C.breakpoints),Q=Object.keys(G),te=G;return Object.keys(B).forEach(oe=>{let re=M6e(B[oe],C);if(re!=null)if(typeof re=="object")if(z[oe])te=Qg(te,s(oe,re,C,z));else{let le=Wl({theme:C},re,ce=>({[oe]:ce}));A6e(le,re)?te[oe]=f({sx:re,theme:C}):te=Qg(te,le)}else te=Qg(te,s(oe,re,C,z))}),cZ(Q,te)}return Array.isArray(_)?_.map(L):L(_)}return f}var mZ=T6e();mZ.filterProps=["sx"];var hZ=mZ;function R6e(s,f){let m=this;return m.vars&&typeof m.getColorSchemeSelector=="function"?{[m.getColorSchemeSelector(s).replace(/(\[[^\]]+\])/,"*:where($1)")]:f}:m.palette.mode===s?f:{}}var z6e=["breakpoints","palette","spacing","shape"];function D6e(s={},...f){let{breakpoints:m={},palette:w={},spacing:_,shape:C={}}=s,z=vn(s,z6e),L=z4e(m),V=Y4e(_),B=(0,lZ.default)({breakpoints:L,direction:"ltr",components:{},palette:H({mode:"light"},w),spacing:V,shape:H({},L4e,C)},z);return B.applyStyles=R6e,B=f.reduce((G,Q)=>(0,lZ.default)(G,Q),B),B.unstable_sxConfig=H({},dT,z?.unstable_sxConfig),B.unstable_sx=function(G){return hZ({sx:G,theme:this})},B}var mT=D6e,L6e=O(k()),N6e=O(E0());function F6e(s){return Object.keys(s).length===0}function W6e(s=null){let f=L6e.useContext(N6e.ThemeContext);return!f||F6e(f)?s:f}var B6e=W6e,H6e=mT();function V6e(s=H6e){return B6e(s)}var q6e=V6e;ne();var U6e=O(mi()),$6e=["sx"],J6e=s=>{var f,m;let w={systemProps:{},otherProps:{}},_=(f=s==null||(m=s.theme)==null?void 0:m.unstable_sxConfig)!=null?f:dT;return Object.keys(s).forEach(C=>{_[C]?w.systemProps[C]=s[C]:w.otherProps[C]=s[C]}),w};function G6e(s){let{sx:f}=s,m=vn(s,$6e),{systemProps:w,otherProps:_}=J6e(m),C;return Array.isArray(f)?C=[w,...f]:typeof f=="function"?C=(...z)=>{let L=f(...z);return(0,U6e.isPlainObject)(L)?H({},w,L):w}:C=H({},w,f),H({},_,{sx:C})}var gZ=s=>s,X6e=()=>{let s=gZ;return{configure(f){s=f},generate(f){return s(f)},reset(){s=gZ}}},K6e=X6e(),Y6e=K6e;function vZ(s){var f,m,w="";if(typeof s=="string"||typeof s=="number")w+=s;else if(typeof s=="object")if(Array.isArray(s)){var _=s.length;for(f=0;f<_;f++)s[f]&&(m=vZ(s[f]))&&(w&&(w+=" "),w+=m)}else for(m in s)s[m]&&(w&&(w+=" "),w+=m);return w}function Q6e(){for(var s,f,m=0,w="",_=arguments.length;m<_;m++)(s=arguments[m])&&(f=vZ(s))&&(w&&(w+=" "),w+=f);return w}var to=Q6e,Z6e={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function Za(s,f,m="Mui"){let w=Z6e[f];return w?`${m}-${w}`:`${Y6e.generate(s)}-${f}`}function Bl(s,f,m="Mui"){let w={};return f.forEach(_=>{w[_]=Za(s,_,m)}),w}ne();var yZ=O(E0()),ewe=O(mi()),twe=["ownerState"],rwe=["variants"],nwe=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function owe(s){return Object.keys(s).length===0}function iwe(s){return typeof s=="string"&&s.charCodeAt(0)>96}function hT(s){return s!=="ownerState"&&s!=="theme"&&s!=="sx"&&s!=="as"}var awe=mT(),lwe=s=>s&&s.charAt(0).toLowerCase()+s.slice(1);function h_({defaultTheme:s,theme:f,themeId:m}){return owe(f)?s:f[m]||f}function swe(s){return s?(f,m)=>m[s]:null}function g_(s,f){let{ownerState:m}=f,w=vn(f,twe),_=typeof s=="function"?s(H({ownerState:m},w)):s;if(Array.isArray(_))return _.flatMap(C=>g_(C,H({ownerState:m},w)));if(_&&typeof _=="object"&&Array.isArray(_.variants)){let{variants:C=[]}=_,z=vn(_,rwe);return C.forEach(L=>{let V=!0;typeof L.props=="function"?V=L.props(H({ownerState:m},w,m)):Object.keys(L.props).forEach(B=>{m?.[B]!==L.props[B]&&w[B]!==L.props[B]&&(V=!1)}),V&&(Array.isArray(z)||(z=[z]),z.push(typeof L.style=="function"?L.style(H({ownerState:m},w,m)):L.style))}),z}return _}function uwe(s={}){let{themeId:f,defaultTheme:m=awe,rootShouldForwardProp:w=hT,slotShouldForwardProp:_=hT}=s,C=z=>hZ(H({},z,{theme:h_(H({},z,{defaultTheme:m,themeId:f}))}));return C.__mui_systemSx=!0,(z,L={})=>{(0,yZ.internal_processStyles)(z,Se=>Se.filter(ge=>!(ge!=null&&ge.__mui_systemSx)));let{name:V,slot:B,skipVariantsResolver:G,skipSx:Q,overridesResolver:te=swe(lwe(B))}=L,oe=vn(L,nwe),re=G!==void 0?G:B&&B!=="Root"&&B!=="root"||!1,le=Q||!1,ce,ie=hT;B==="Root"||B==="root"?ie=w:B?ie=_:iwe(z)&&(ie=void 0);let Pe=(0,yZ.default)(z,H({shouldForwardProp:ie,label:ce},oe)),Ae=Se=>typeof Se=="function"&&Se.__emotion_real!==Se||(0,ewe.isPlainObject)(Se)?ge=>g_(Se,H({},ge,{theme:h_({theme:ge.theme,defaultTheme:m,themeId:f})})):Se,we=(Se,...ge)=>{let je=Ae(Se),ae=ge?ge.map(Ae):[];V&&te&&ae.push(Te=>{let Fe=h_(H({},Te,{defaultTheme:m,themeId:f}));if(!Fe.components||!Fe.components[V]||!Fe.components[V].styleOverrides)return null;let Ue=Fe.components[V].styleOverrides,it={};return Object.entries(Ue).forEach(([Mt,Lt])=>{it[Mt]=g_(Lt,H({},Te,{theme:Fe}))}),te(Te,it)}),V&&!re&&ae.push(Te=>{var Fe;let Ue=h_(H({},Te,{defaultTheme:m,themeId:f})),it=Ue==null||(Fe=Ue.components)==null||(Fe=Fe[V])==null?void 0:Fe.variants;return g_({variants:it},H({},Te,{theme:Ue}))}),le||ae.push(C);let be=ae.length-ge.length;if(Array.isArray(Se)&&be>0){let Te=new Array(be).fill("");je=[...Se,...Te],je.raw=[...Se.raw,...Te]}let Ce=Pe(je,...ae);return z.muiName&&(Ce.muiName=z.muiName),Ce};return Pe.withConfig&&(we.withConfig=Pe.withConfig),we}}var cwe=uwe(),pwe=cwe;ne();function bZ(s,f){let m=H({},f);return Object.keys(s).forEach(w=>{if(w.toString().match(/^(components|slots)$/))m[w]=H({},s[w],m[w]);else if(w.toString().match(/^(componentsProps|slotProps)$/)){let _=s[w]||{},C=f[w];m[w]={},!C||!Object.keys(C)?m[w]=_:!_||!Object.keys(_)?m[w]=C:(m[w]=H({},C),Object.keys(_).forEach(z=>{m[w][z]=bZ(_[z],C[z])}))}else m[w]===void 0&&(m[w]=s[w])}),m}function fwe(s){let{theme:f,name:m,props:w}=s;return!f||!f.components||!f.components[m]||!f.components[m].defaultProps?w:bZ(f.components[m].defaultProps,w)}function wZ({props:s,name:f,defaultTheme:m,themeId:w}){let _=q6e(m);return w&&(_=_[w]||_),fwe({theme:_,name:f,props:s})}var OZ=O(k()),dwe=typeof window<"u"?OZ.useLayoutEffect:OZ.useEffect,mwe=dwe;function hwe(...s){return s.reduce((f,m)=>m==null?f:function(...w){f.apply(this,w),m.apply(this,w)},()=>{})}var gwe=O(k());function vwe(s,f){var m,w;return gwe.isValidElement(s)&&f.indexOf((m=s.type.muiName)!=null?m:(w=s.type)==null||(w=w._payload)==null||(w=w.value)==null?void 0:w.muiName)!==-1}function ywe(s,f){typeof s=="function"?s(f):s&&(s.current=f)}var gT=O(k()),xZ=0;function bwe(s){let[f,m]=gT.useState(s),w=s||f;return gT.useEffect(()=>{f==null&&(xZ+=1,m(`mui-${xZ}`))},[f]),w}var _Z=gT["useId".toString()];function wwe(s){if(_Z!==void 0){let f=_Z();return s??f}return bwe(s)}var vT=O(k());function Owe({controlled:s,default:f,name:m,state:w="value"}){let{current:_}=vT.useRef(s!==void 0),[C,z]=vT.useState(f),L=_?s:C,V=vT.useCallback(B=>{_||z(B)},[]);return[L,V]}var SZ=O(k());function xwe(s){let f=SZ.useRef(s);return mwe(()=>{f.current=s}),SZ.useRef((...m)=>(0,f.current)(...m)).current}var _we=xwe,Swe=O(k());function Iwe(...s){return Swe.useMemo(()=>s.every(f=>f==null)?null:f=>{s.forEach(m=>{ywe(m,f)})},s)}var jwe=O(k()),IZ={};function Ewe(s,f){let m=jwe.useRef(IZ);return m.current===IZ&&(m.current=s(f)),m}var Pwe=O(k()),kwe=[];function Cwe(s){Pwe.useEffect(s,kwe)}var jZ=class c5e{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new c5e}start(f,m){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,m()},f)}};function Awe(){let s=Ewe(jZ.create).current;return Cwe(s.disposeEffect),s}var EZ=O(k()),v_=!0,yT=!1,Mwe=new jZ,Twe={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function Rwe(s){let{type:f,tagName:m}=s;return!!(m==="INPUT"&&Twe[f]&&!s.readOnly||m==="TEXTAREA"&&!s.readOnly||s.isContentEditable)}function zwe(s){s.metaKey||s.altKey||s.ctrlKey||(v_=!0)}function bT(){v_=!1}function Dwe(){this.visibilityState==="hidden"&&yT&&(v_=!0)}function Lwe(s){s.addEventListener("keydown",zwe,!0),s.addEventListener("mousedown",bT,!0),s.addEventListener("pointerdown",bT,!0),s.addEventListener("touchstart",bT,!0),s.addEventListener("visibilitychange",Dwe,!0)}function Nwe(s){let{target:f}=s;try{return f.matches(":focus-visible")}catch{}return v_||Rwe(f)}function Fwe(){let s=EZ.useCallback(_=>{_!=null&&Lwe(_.ownerDocument)},[]),f=EZ.useRef(!1);function m(){return f.current?(yT=!0,Mwe.start(100,()=>{yT=!1}),f.current=!1,!0):!1}function w(_){return Nwe(_)?(f.current=!0,!0):!1}return{isFocusVisibleRef:f,onFocus:w,onBlur:m,ref:s}}function Hl(s,f,m=void 0){let w={};return Object.keys(s).forEach(_=>{w[_]=s[_].reduce((C,z)=>{if(z){let L=f(z);L!==""&&C.push(L),m&&m[z]&&C.push(m[z])}return C},[]).join(" ")}),w}ne();var wT=O(k()),Wwe=O(mi()),Bwe=O(Dr()),Hwe=["component","direction","spacing","divider","children","className","useFlexGap"],Vwe=mT(),qwe=pwe("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,f)=>f.root});function Uwe(s){return wZ({props:s,name:"MuiStack",defaultTheme:Vwe})}function $we(s,f){let m=wT.Children.toArray(s).filter(Boolean);return m.reduce((w,_,C)=>(w.push(_),C({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[s],Gwe=({ownerState:s,theme:f})=>{let m=H({display:"flex",flexDirection:"column"},Wl({theme:f},lT({values:s.direction,breakpoints:f.breakpoints.values}),w=>({flexDirection:w})));if(s.spacing){let w=cT(f),_=Object.keys(f.breakpoints.values).reduce((L,V)=>((typeof s.spacing=="object"&&s.spacing[V]!=null||typeof s.direction=="object"&&s.direction[V]!=null)&&(L[V]=!0),L),{}),C=lT({values:s.direction,base:_}),z=lT({values:s.spacing,base:_});typeof C=="object"&&Object.keys(C).forEach((L,V,B)=>{if(!C[L]){let G=V>0?C[B[V-1]]:"column";C[L]=G}}),m=(0,Wwe.default)(m,Wl({theme:f},z,(L,V)=>s.useFlexGap?{gap:Bf(w,L)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${Jwe(V?C[V]:s.direction)}`]:Bf(w,L)}}))}return m=B4e(f.breakpoints,m),m};function Xwe(s={}){let{createStyledComponent:f=qwe,useThemeProps:m=Uwe,componentName:w="MuiStack"}=s,_=()=>Hl({root:["root"]},z=>Za(w,z),{}),C=f(Gwe);return wT.forwardRef(function(z,L){let V=m(z),B=G6e(V),{component:G="div",direction:Q="column",spacing:te=0,divider:oe,children:re,className:le,useFlexGap:ce=!1}=B,ie=vn(B,Hwe),Pe={direction:Q,spacing:te,useFlexGap:ce},Ae=_();return(0,Bwe.jsx)(C,H({as:G,ownerState:Pe,ref:L,className:to(Ae.root,le)},ie,{children:oe?$we(re,oe):re}))})}ne();var Kwe=O(Xi()),OT=O(mi()),PZ=O(jg()),Ywe=O(O9());ne();function Qwe(s,f){return H({toolbar:{minHeight:56,[s.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[s.up("sm")]:{minHeight:64}}},f)}ne();var kZ=O(Xi()),Zwe=O(mi()),xT=O(Eg()),eOe=["mode","contrastThreshold","tonalOffset"],CZ={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:Kg.white,default:Kg.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},_T={text:{primary:Kg.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:Kg.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function AZ(s,f,m,w){let _=w.light||w,C=w.dark||w*1.5;s[f]||(s.hasOwnProperty(m)?s[f]=s[m]:f==="light"?s.light=(0,xT.lighten)(s.main,_):f==="dark"&&(s.dark=(0,xT.darken)(s.main,C)))}function tOe(s="light"){return s==="dark"?{main:J0[200],light:J0[50],dark:J0[400]}:{main:J0[700],light:J0[400],dark:J0[800]}}function rOe(s="light"){return s==="dark"?{main:$0[200],light:$0[50],dark:$0[400]}:{main:$0[500],light:$0[300],dark:$0[700]}}function nOe(s="light"){return s==="dark"?{main:U0[500],light:U0[300],dark:U0[700]}:{main:U0[700],light:U0[400],dark:U0[800]}}function oOe(s="light"){return s==="dark"?{main:G0[400],light:G0[300],dark:G0[700]}:{main:G0[700],light:G0[500],dark:G0[900]}}function iOe(s="light"){return s==="dark"?{main:X0[400],light:X0[300],dark:X0[700]}:{main:X0[800],light:X0[500],dark:X0[900]}}function aOe(s="light"){return s==="dark"?{main:Yg[400],light:Yg[300],dark:Yg[700]}:{main:"#ed6c02",light:Yg[500],dark:Yg[900]}}function lOe(s){let{mode:f="light",contrastThreshold:m=3,tonalOffset:w=.2}=s,_=vn(s,eOe),C=s.primary||tOe(f),z=s.secondary||rOe(f),L=s.error||nOe(f),V=s.info||oOe(f),B=s.success||iOe(f),G=s.warning||aOe(f);function Q(re){return(0,xT.getContrastRatio)(re,_T.text.primary)>=m?_T.text.primary:CZ.text.primary}let te=({color:re,name:le,mainShade:ce=500,lightShade:ie=300,darkShade:Pe=700})=>{if(re=H({},re),!re.main&&re[ce]&&(re.main=re[ce]),!re.hasOwnProperty("main"))throw new Error((0,kZ.default)(11,le?` (${le})`:"",ce));if(typeof re.main!="string")throw new Error((0,kZ.default)(12,le?` (${le})`:"",JSON.stringify(re.main)));return AZ(re,"light",ie,w),AZ(re,"dark",Pe,w),re.contrastText||(re.contrastText=Q(re.main)),re},oe={dark:_T,light:CZ};return(0,Zwe.default)(H({common:H({},Kg),mode:f,primary:te({color:C,name:"primary"}),secondary:te({color:z,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:te({color:L,name:"error"}),warning:te({color:G,name:"warning"}),info:te({color:V,name:"info"}),success:te({color:B,name:"success"}),grey:M4e,contrastThreshold:m,getContrastText:Q,augmentColor:te,tonalOffset:w},oe[f]),_)}ne();var sOe=O(mi()),uOe=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function cOe(s){return Math.round(s*1e5)/1e5}var MZ={textTransform:"uppercase"},TZ='"Roboto", "Helvetica", "Arial", sans-serif';function pOe(s,f){let m=typeof f=="function"?f(s):f,{fontFamily:w=TZ,fontSize:_=14,fontWeightLight:C=300,fontWeightRegular:z=400,fontWeightMedium:L=500,fontWeightBold:V=700,htmlFontSize:B=16,allVariants:G,pxToRem:Q}=m,te=vn(m,uOe),oe=_/14,re=Q||(ie=>`${ie/B*oe}rem`),le=(ie,Pe,Ae,we,Se)=>H({fontFamily:w,fontWeight:ie,fontSize:re(Pe),lineHeight:Ae},w===TZ?{letterSpacing:`${cOe(we/Pe)}em`}:{},Se,G),ce={h1:le(C,96,1.167,-1.5),h2:le(C,60,1.2,-.5),h3:le(z,48,1.167,0),h4:le(z,34,1.235,.25),h5:le(z,24,1.334,0),h6:le(L,20,1.6,.15),subtitle1:le(z,16,1.75,.15),subtitle2:le(L,14,1.57,.1),body1:le(z,16,1.5,.15),body2:le(z,14,1.43,.15),button:le(L,14,1.75,.4,MZ),caption:le(z,12,1.66,.4),overline:le(z,12,2.66,1,MZ),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,sOe.default)(H({htmlFontSize:B,pxToRem:re,fontFamily:w,fontSize:_,fontWeightLight:C,fontWeightRegular:z,fontWeightMedium:L,fontWeightBold:V},ce),te,{clone:!1})}function Rn(...s){return[`${s[0]}px ${s[1]}px ${s[2]}px ${s[3]}px rgba(0,0,0,${.2})`,`${s[4]}px ${s[5]}px ${s[6]}px ${s[7]}px rgba(0,0,0,${.14})`,`${s[8]}px ${s[9]}px ${s[10]}px ${s[11]}px rgba(0,0,0,${.12})`].join(",")}var fOe=["none",Rn(0,2,1,-1,0,1,1,0,0,1,3,0),Rn(0,3,1,-2,0,2,2,0,0,1,5,0),Rn(0,3,3,-2,0,3,4,0,0,1,8,0),Rn(0,2,4,-1,0,4,5,0,0,1,10,0),Rn(0,3,5,-1,0,5,8,0,0,1,14,0),Rn(0,3,5,-1,0,6,10,0,0,1,18,0),Rn(0,4,5,-2,0,7,10,1,0,2,16,1),Rn(0,5,5,-3,0,8,10,1,0,3,14,2),Rn(0,5,6,-3,0,9,12,1,0,3,16,2),Rn(0,6,6,-3,0,10,14,1,0,4,18,3),Rn(0,6,7,-4,0,11,15,1,0,4,20,3),Rn(0,7,8,-4,0,12,17,2,0,5,22,4),Rn(0,7,8,-4,0,13,19,2,0,5,24,4),Rn(0,7,9,-4,0,14,21,2,0,5,26,4),Rn(0,8,9,-5,0,15,22,2,0,6,28,5),Rn(0,8,10,-5,0,16,24,2,0,6,30,5),Rn(0,8,11,-5,0,17,26,2,0,6,32,5),Rn(0,9,11,-5,0,18,28,2,0,7,34,6),Rn(0,9,12,-6,0,19,29,2,0,7,36,6),Rn(0,10,13,-6,0,20,31,3,0,8,38,7),Rn(0,10,13,-6,0,21,33,3,0,8,40,7),Rn(0,10,14,-6,0,22,35,3,0,8,42,7),Rn(0,11,14,-7,0,23,36,3,0,9,44,8),Rn(0,11,15,-7,0,24,38,3,0,9,46,8)],dOe=fOe;ne();var mOe=["duration","easing","delay"],hOe={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},gOe={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function RZ(s){return`${Math.round(s)}ms`}function vOe(s){if(!s)return 0;let f=s/36;return Math.round((4+15*f**.25+f/5)*10)}function yOe(s){let f=H({},hOe,s.easing),m=H({},gOe,s.duration);return H({getAutoHeightDuration:vOe,create:(w=["all"],_={})=>{let{duration:C=m.standard,easing:z=f.easeInOut,delay:L=0}=_,V=vn(_,mOe);return(Array.isArray(w)?w:[w]).map(B=>`${B} ${typeof C=="string"?C:RZ(C)} ${z} ${typeof L=="string"?L:RZ(L)}`).join(",")}},s,{easing:f,duration:m})}var bOe={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},wOe=bOe,OOe=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function xOe(s={},...f){let{mixins:m={},palette:w={},transitions:_={},typography:C={}}=s,z=vn(s,OOe);if(s.vars)throw new Error((0,Kwe.default)(18));let L=lOe(w),V=(0,Ywe.default)(s),B=(0,OT.default)(V,{mixins:Qwe(V.breakpoints,m),palette:L,shadows:dOe.slice(),typography:pOe(L,C),transitions:yOe(_),zIndex:H({},wOe)});return B=(0,OT.default)(B,z),B=f.reduce((G,Q)=>(0,OT.default)(G,Q),B),B.unstable_sxConfig=H({},PZ.unstable_defaultSxConfig,z?.unstable_sxConfig),B.unstable_sx=function(G){return(0,PZ.default)({sx:G,theme:this})},B}var zZ=xOe,_Oe=zZ(),DZ=_Oe;function Vl({props:s,name:f}){return wZ({props:s,name:f,defaultTheme:DZ,themeId:aZ})}var LZ=O(hM()),ev=s=>(0,LZ.shouldForwardProp)(s)&&s!=="classes",SOe=(0,LZ.default)({themeId:aZ,defaultTheme:DZ,rootShouldForwardProp:ev}),fo=SOe,IOe=O(Vr()),Bn=IOe.default,jOe=hwe;ne();var NZ=O(k());ne();var FZ=O(k());function EOe(s){return Za("MuiSvgIcon",s)}var TRt=Bl("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]),POe=O(Dr()),kOe=O(Dr()),COe=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],AOe=s=>{let{color:f,fontSize:m,classes:w}=s,_={root:["root",f!=="inherit"&&`color${Bn(f)}`,`fontSize${Bn(m)}`]};return Hl(_,EOe,w)},MOe=fo("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.color!=="inherit"&&f[`color${Bn(m.color)}`],f[`fontSize${Bn(m.fontSize)}`]]}})(({theme:s,ownerState:f})=>{var m,w,_,C,z,L,V,B,G,Q,te,oe,re;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:f.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:(m=s.transitions)==null||(w=m.create)==null?void 0:w.call(m,"fill",{duration:(_=s.transitions)==null||(_=_.duration)==null?void 0:_.shorter}),fontSize:{inherit:"inherit",small:((C=s.typography)==null||(z=C.pxToRem)==null?void 0:z.call(C,20))||"1.25rem",medium:((L=s.typography)==null||(V=L.pxToRem)==null?void 0:V.call(L,24))||"1.5rem",large:((B=s.typography)==null||(G=B.pxToRem)==null?void 0:G.call(B,35))||"2.1875rem"}[f.fontSize],color:(Q=(te=(s.vars||s).palette)==null||(te=te[f.color])==null?void 0:te.main)!=null?Q:{action:(oe=(s.vars||s).palette)==null||(oe=oe.action)==null?void 0:oe.active,disabled:(re=(s.vars||s).palette)==null||(re=re.action)==null?void 0:re.disabled,inherit:void 0}[f.color]}}),WZ=FZ.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiSvgIcon"}),{children:w,className:_,color:C="inherit",component:z="svg",fontSize:L="medium",htmlColor:V,inheritViewBox:B=!1,titleAccess:G,viewBox:Q="0 0 24 24"}=m,te=vn(m,COe),oe=FZ.isValidElement(w)&&w.type==="svg",re=H({},m,{color:C,component:z,fontSize:L,instanceFontSize:s.fontSize,inheritViewBox:B,viewBox:Q,hasSvgAsChild:oe}),le={};B||(le.viewBox=Q);let ce=AOe(re);return(0,kOe.jsxs)(MOe,H({as:z,className:to(ce.root,_),focusable:"false",color:V,"aria-hidden":G?void 0:!0,role:G?"img":void 0,ref:f},le,te,oe&&w.props,{ownerState:re,children:[oe?w.props.children:w,G?(0,POe.jsx)("title",{children:G}):null]}))});WZ.muiName="SvgIcon";var BZ=WZ,TOe=O(Dr());function tv(s,f){function m(w,_){return(0,TOe.jsx)(BZ,H({"data-testid":`${f}Icon`,ref:_},w,{children:s}))}return m.muiName=BZ.muiName,NZ.memo(NZ.forwardRef(m))}var ST=vwe,ROe=wwe,HZ=Owe,y_=_we,IT=Iwe,zOe=Fwe;function jT(s,f){return jT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(m,w){return m.__proto__=w,m},jT(s,f)}function rv(s,f){s.prototype=Object.create(f.prototype),s.prototype.constructor=s,jT(s,f)}var DOe=O(k()),VZ=DOe.default.createContext(null);ne();function LOe(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}var b_=O(k()),Pu=O(k());function ET(s,f){var m=function(_){return f&&(0,Pu.isValidElement)(_)?f(_):_},w=Object.create(null);return s&&Pu.Children.map(s,function(_){return _}).forEach(function(_){w[_.key]=m(_)}),w}function NOe(s,f){s=s||{},f=f||{};function m(G){return G in f?f[G]:s[G]}var w=Object.create(null),_=[];for(var C in s)C in f?_.length&&(w[C]=_,_=[]):_.push(C);var z,L={};for(var V in f){if(w[V])for(z=0;z{if(!L&&V!=null){let le=setTimeout(V,B);return()=>{clearTimeout(le)}}},[V,L,B]),(0,UZ.jsx)("span",{className:te,style:oe,children:(0,UZ.jsx)("span",{className:re})})}var UOe=qOe,$Oe=Bl("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),el=$Oe,kT=O(Dr()),JOe=["center","classes","className"],w_=s=>s,$Z,JZ,GZ,XZ,CT=550,GOe=80,XOe=(0,Wf.keyframes)($Z||($Z=w_` +Add a component higher in the tree to provide a loading indicator or placeholder to display.`)}Qo!==5&&(Qo=2),me=iz(me,se),Xe=Z;do{switch(Xe.tag){case 3:J=me,Xe.flags|=4096,p&=-p,Xe.lanes|=p;var sr=Fre(Xe,J,p);rre(Xe,sr);break e;case 1:J=me;var It=Xe.type,ur=Xe.stateNode;if(!(Xe.flags&64)&&(typeof It.getDerivedStateFromError=="function"||ur!==null&&typeof ur.componentDidCatch=="function"&&(Ds===null||!Ds.has(ur)))){Xe.flags|=4096,p&=-p,Xe.lanes|=p;var Pr=Wre(Xe,J,p);rre(Xe,Pr);break e}}Xe=Xe.return}while(Xe!==null)}tne(h)}catch(xr){p=xr,jo===h&&h!==null&&(jo=h=h.return);continue}break}while(1)}function Zre(){var l=OS.current;return OS.current=bS,l===null?bS:l}function Xv(l,p){var h=nr;nr|=16;var P=Zre();zi===l&&bi===p||jm(l,p);do try{h_e();break}catch(F){Qre(l,F)}while(1);if(FR(),nr=h,OS.current=P,jo!==null)throw Error(_(261));return zi=null,bi=0,Qo}function h_e(){for(;jo!==null;)ene(jo)}function g_e(){for(;jo!==null&&!Y9e();)ene(jo)}function ene(l){var p=one(l.alternate,l,id);l.memoizedProps=l.pendingProps,p===null?tne(l):jo=p,cz.current=null}function tne(l){var p=l;do{var h=p.alternate;if(l=p.return,p.flags&2048){if(h=l_e(p),h!==null){h.flags&=2047,jo=h;return}l!==null&&(l.firstEffect=l.lastEffect=null,l.flags|=2048)}else{if(h=a_e(h,p,id),h!==null){jo=h;return}if(h=p,h.tag!==24&&h.tag!==23||h.memoizedState===null||id&1073741824||!(h.mode&4)){for(var P=0,F=h.child;F!==null;)P|=F.lanes|F.childLanes,F=F.sibling;h.childLanes=P}l!==null&&!(l.flags&2048)&&(l.firstEffect===null&&(l.firstEffect=p.firstEffect),p.lastEffect!==null&&(l.lastEffect!==null&&(l.lastEffect.nextEffect=p.firstEffect),l.lastEffect=p.lastEffect),1Z&&(se=Z,Z=sr,sr=se),se=Ite(Ie,sr),J=Ite(Ie,Z),se&&J&&(Ue.rangeCount!==1||Ue.anchorNode!==se.node||Ue.anchorOffset!==se.offset||Ue.focusNode!==J.node||Ue.focusOffset!==J.offset)&&(Ve=Ve.createRange(),Ve.setStart(se.node,se.offset),Ue.removeAllRanges(),sr>Z?(Ue.addRange(Ve),Ue.extend(J.node,J.offset)):(Ve.setEnd(J.node,J.offset),Ue.addRange(Ve)))))),Ve=[],Ue=Ie;Ue=Ue.parentNode;)Ue.nodeType===1&&Ve.push({element:Ue,left:Ue.scrollLeft,top:Ue.scrollTop});for(typeof Ie.focus=="function"&&Ie.focus(),Ie=0;Ievi()-mz?jm(l,0):fz|=h),al(l,p)}function x_e(l,p){var h=l.stateNode;h!==null&&h.delete(p),p=0,p===0&&(p=l.mode,p&2?p&4?(Lu===0&&(Lu=xm),p=lm(62914560&~Lu),p===0&&(p=4194304)):p=vm()===99?1:2:p=1),h=Pa(),l=ES(l,p),l!==null&&(B_(l,p,h),al(l,h))}var one;one=function(l,p,h){var P=p.lanes;if(l!==null)if(l.memoizedProps!==p.pendingProps||Zi.current)Jl=!0;else if(h&P)Jl=!!(l.flags&16384);else{switch(Jl=!1,p.tag){case 3:kre(p),$R();break;case 5:cre(p);break;case 1:ea(p.type)&&rS(p);break;case 4:VR(p,p.stateNode.containerInfo);break;case 10:P=p.memoizedProps.value;var F=p.type._context;$n(iS,F._currentValue),F._currentValue=P;break;case 13:if(p.memoizedState!==null)return h&p.child.childLanes?Cre(l,p,h):($n(Jn,Jn.current&1),p=zu(l,p,h),p!==null?p.sibling:null);$n(Jn,Jn.current&1);break;case 19:if(P=(h&p.childLanes)!==0,l.flags&64){if(P)return zre(l,p,h);p.flags|=64}if(F=p.memoizedState,F!==null&&(F.rendering=null,F.tail=null,F.lastEffect=null),$n(Jn,Jn.current),P)break;return null;case 23:case 24:return p.lanes=0,ez(l,p,h)}return zu(l,p,h)}else Jl=!1;switch(p.lanes=0,p.tag){case 2:if(P=p.type,l!==null&&(l.alternate=null,p.alternate=null,p.flags|=2),l=p.pendingProps,F=gm(p,gi.current),bm(p,h),F=XR(null,p,P,l,F,h),p.flags|=1,typeof F=="object"&&F!==null&&typeof F.render=="function"&&F.$$typeof===void 0){if(p.tag=1,p.memoizedState=null,p.updateQueue=null,ea(P)){var J=!0;rS(p)}else J=!1;p.memoizedState=F.state!==null&&F.state!==void 0?F.state:null,BR(p);var Z=P.getDerivedStateFromProps;typeof Z=="function"&&sS(p,P,Z,l),F.updater=uS,p.stateNode=F,F._reactInternals=p,HR(p,P,l,h),p=rz(null,p,P,!0,J,h)}else p.tag=0,ra(null,p,F,h),p=p.child;return p;case 16:F=p.elementType;e:{switch(l!==null&&(l.alternate=null,p.alternate=null,p.flags|=2),l=p.pendingProps,J=F._init,F=J(F._payload),p.type=F,J=p.tag=S_e(F),l=$l(F,l),J){case 0:p=tz(null,p,F,l,h);break e;case 1:p=Pre(null,p,F,l,h);break e;case 11:p=Sre(null,p,F,l,h);break e;case 14:p=Ire(null,p,F,$l(F.type,l),P,h);break e}throw Error(_(306,F,""))}return p;case 0:return P=p.type,F=p.pendingProps,F=p.elementType===P?F:$l(P,F),tz(l,p,P,F,h);case 1:return P=p.type,F=p.pendingProps,F=p.elementType===P?F:$l(P,F),Pre(l,p,P,F,h);case 3:if(kre(p),P=p.updateQueue,l===null||P===null)throw Error(_(282));if(P=p.pendingProps,F=p.memoizedState,F=F!==null?F.element:null,tre(l,p),Mv(p,P,null,h),P=p.memoizedState.element,P===F)$R(),p=zu(l,p,h);else{if(F=p.stateNode,(J=F.hydrate)&&(np=fm(p.stateNode.containerInfo.firstChild),Ru=p,J=Rs=!0),J){if(l=F.mutableSourceEagerHydrationData,l!=null)for(F=0;F{"use strict";function m(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(m)}catch(w){console.error(w)}}m(),f.exports=T()}),U=c(s=>{"use strict";var f=k();function m(te,oe){return te===oe&&(te!==0||1/te===1/oe)||te!==te&&oe!==oe}var w=typeof Object.is=="function"?Object.is:m,_=f.useState,A=f.useEffect,z=f.useLayoutEffect,N=f.useDebugValue;function V(te,oe){var re=oe(),le=_({inst:{value:re,getSnapshot:oe}}),ce=le[0].inst,ie=le[1];return z(function(){ce.value=re,ce.getSnapshot=oe,H(ce)&&ie({inst:ce})},[te,re,oe]),A(function(){return H(ce)&&ie({inst:ce}),te(function(){H(ce)&&ie({inst:ce})})},[te]),N(re),re}function H(te){var oe=te.getSnapshot;te=te.value;try{var re=oe();return!w(te,re)}catch{return!0}}function X(te,oe){return oe()}var Q=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?X:V;s.useSyncExternalStore=f.useSyncExternalStore!==void 0?f.useSyncExternalStore:Q}),G=c((s,f)=>{"use strict";f.exports=U()}),Y=c(s=>{"use strict";var f=k(),m=G();function w(X,Q){return X===Q&&(X!==0||1/X===1/Q)||X!==X&&Q!==Q}var _=typeof Object.is=="function"?Object.is:w,A=m.useSyncExternalStore,z=f.useRef,N=f.useEffect,V=f.useMemo,H=f.useDebugValue;s.useSyncExternalStoreWithSelector=function(X,Q,te,oe,re){var le=z(null);if(le.current===null){var ce={hasValue:!1,value:null};le.current=ce}else ce=le.current;le=V(function(){function Pe(je){if(!Ae){if(Ae=!0,Oe=je,je=oe(je),re!==void 0&&ce.hasValue){var ae=ce.value;if(re(ae,je))return Se=ae}return Se=je}if(ae=Se,_(Oe,je))return ae;var we=oe(je);return re!==void 0&&re(ae,we)?ae:(Oe=je,Se=we)}var Ae=!1,Oe,Se,he=te===void 0?null:te;return[function(){return Pe(Q())},he===null?void 0:function(){return Pe(he())}]},[Q,te,oe,re]);var ie=A(X,le[0],le[1]);return N(function(){ce.hasValue=!0,ce.value=ie},[ie]),H(ie),ie}}),K=c((s,f)=>{"use strict";f.exports=Y()});function B(){return B=Object.assign?Object.assign.bind():function(s){for(var f=1;f{}),pe=c(s=>{"use strict";var f=typeof Symbol=="function"&&Symbol.for,m=f?Symbol.for("react.element"):60103,w=f?Symbol.for("react.portal"):60106,_=f?Symbol.for("react.fragment"):60107,A=f?Symbol.for("react.strict_mode"):60108,z=f?Symbol.for("react.profiler"):60114,N=f?Symbol.for("react.provider"):60109,V=f?Symbol.for("react.context"):60110,H=f?Symbol.for("react.async_mode"):60111,X=f?Symbol.for("react.concurrent_mode"):60111,Q=f?Symbol.for("react.forward_ref"):60112,te=f?Symbol.for("react.suspense"):60113,oe=f?Symbol.for("react.suspense_list"):60120,re=f?Symbol.for("react.memo"):60115,le=f?Symbol.for("react.lazy"):60116,ce=f?Symbol.for("react.block"):60121,ie=f?Symbol.for("react.fundamental"):60117,Pe=f?Symbol.for("react.responder"):60118,Ae=f?Symbol.for("react.scope"):60119;function Oe(he){if(typeof he=="object"&&he!==null){var je=he.$$typeof;switch(je){case m:switch(he=he.type,he){case H:case X:case _:case z:case A:case te:return he;default:switch(he=he&&he.$$typeof,he){case V:case Q:case le:case re:case N:return he;default:return je}}case w:return je}}}function Se(he){return Oe(he)===X}s.AsyncMode=H,s.ConcurrentMode=X,s.ContextConsumer=V,s.ContextProvider=N,s.Element=m,s.ForwardRef=Q,s.Fragment=_,s.Lazy=le,s.Memo=re,s.Portal=w,s.Profiler=z,s.StrictMode=A,s.Suspense=te,s.isAsyncMode=function(he){return Se(he)||Oe(he)===H},s.isConcurrentMode=Se,s.isContextConsumer=function(he){return Oe(he)===V},s.isContextProvider=function(he){return Oe(he)===N},s.isElement=function(he){return typeof he=="object"&&he!==null&&he.$$typeof===m},s.isForwardRef=function(he){return Oe(he)===Q},s.isFragment=function(he){return Oe(he)===_},s.isLazy=function(he){return Oe(he)===le},s.isMemo=function(he){return Oe(he)===re},s.isPortal=function(he){return Oe(he)===w},s.isProfiler=function(he){return Oe(he)===z},s.isStrictMode=function(he){return Oe(he)===A},s.isSuspense=function(he){return Oe(he)===te},s.isValidElementType=function(he){return typeof he=="string"||typeof he=="function"||he===_||he===X||he===z||he===A||he===te||he===oe||typeof he=="object"&&he!==null&&(he.$$typeof===le||he.$$typeof===re||he.$$typeof===N||he.$$typeof===V||he.$$typeof===Q||he.$$typeof===ie||he.$$typeof===Pe||he.$$typeof===Ae||he.$$typeof===ce)},s.typeOf=Oe}),ve=c((s,f)=>{"use strict";f.exports=pe()}),de=c((s,f)=>{"use strict";var m=ve(),w={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},A={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},z={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},N={};N[m.ForwardRef]=A,N[m.Memo]=z;function V(ce){return m.isMemo(ce)?z:N[ce.$$typeof]||w}var H=Object.defineProperty,X=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,te=Object.getOwnPropertyDescriptor,oe=Object.getPrototypeOf,re=Object.prototype;function le(ce,ie,Pe){if(typeof ie!="string"){if(re){var Ae=oe(ie);Ae&&Ae!==re&&le(ce,Ae,Pe)}var Oe=X(ie);Q&&(Oe=Oe.concat(Q(ie)));for(var Se=V(ce),he=V(ie),je=0;je{"use strict";var f=Symbol.for("react.element"),m=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),A=Symbol.for("react.profiler"),z=Symbol.for("react.provider"),N=Symbol.for("react.context"),V=Symbol.for("react.server_context"),H=Symbol.for("react.forward_ref"),X=Symbol.for("react.suspense"),Q=Symbol.for("react.suspense_list"),te=Symbol.for("react.memo"),oe=Symbol.for("react.lazy"),re=Symbol.for("react.offscreen"),le;le=Symbol.for("react.module.reference");function ce(ie){if(typeof ie=="object"&&ie!==null){var Pe=ie.$$typeof;switch(Pe){case f:switch(ie=ie.type,ie){case w:case A:case _:case X:case Q:return ie;default:switch(ie=ie&&ie.$$typeof,ie){case V:case N:case H:case oe:case te:case z:return ie;default:return Pe}}case m:return Pe}}}s.ContextConsumer=N,s.ContextProvider=z,s.Element=f,s.ForwardRef=H,s.Fragment=w,s.Lazy=oe,s.Memo=te,s.Portal=m,s.Profiler=A,s.StrictMode=_,s.Suspense=X,s.SuspenseList=Q,s.isAsyncMode=function(){return!1},s.isConcurrentMode=function(){return!1},s.isContextConsumer=function(ie){return ce(ie)===N},s.isContextProvider=function(ie){return ce(ie)===z},s.isElement=function(ie){return typeof ie=="object"&&ie!==null&&ie.$$typeof===f},s.isForwardRef=function(ie){return ce(ie)===H},s.isFragment=function(ie){return ce(ie)===w},s.isLazy=function(ie){return ce(ie)===oe},s.isMemo=function(ie){return ce(ie)===te},s.isPortal=function(ie){return ce(ie)===m},s.isProfiler=function(ie){return ce(ie)===A},s.isStrictMode=function(ie){return ce(ie)===_},s.isSuspense=function(ie){return ce(ie)===X},s.isSuspenseList=function(ie){return ce(ie)===Q},s.isValidElementType=function(ie){return typeof ie=="string"||typeof ie=="function"||ie===w||ie===A||ie===_||ie===X||ie===Q||ie===re||typeof ie=="object"&&ie!==null&&(ie.$$typeof===oe||ie.$$typeof===te||ie.$$typeof===z||ie.$$typeof===N||ie.$$typeof===H||ie.$$typeof===le||ie.getModuleId!==void 0)},s.typeOf=ce}),ye=c((s,f)=>{"use strict";f.exports=ue()}),be=c((s,f)=>{"use strict";function m(_,A){for(var z=_.keys(),N;!(N=z.next()).done;)A(_.get(N.value),N.value,_)}var w=function(){var _;typeof Map<"u"&&(_=Map,Map.prototype.keys||(Map.prototype.keys=function(){var V=[];return this.forEach(function(H,X){V.push(X)}),V}));function A(V){var H=this;H._map=_,A.Map&&(H._map=A.Map),H._=H._map?new H._map:{},V&&V.forEach(function(X){H.set(X[0],X[1])})}A.prototype.get=function(V){return this._map?this._.get(V):this._[V]},A.prototype.set=function(V,H){var X=Array.prototype.slice.call(arguments);V=X.shift();var Q=this.get(V);return Q||(Q=[],this._map?this._.set(V,Q):this._[V]=Q),Array.prototype.push.apply(Q,X),this},A.prototype.delete=function(V,H){if(!this.has(V))return!1;if(arguments.length==1)return this._map?this._.delete(V):delete this._[V],!0;var X=this.get(V),Q=X.indexOf(H);return Q!=-1?(X.splice(Q,1),!0):!1},A.prototype.has=function(V,H){var X=this._map?this._.has(V):this._.hasOwnProperty(V);if(arguments.length==1||!X)return X;var Q=this.get(V)||[];return Q.indexOf(H)!=-1},A.prototype.keys=function(){return this._map?N(this._.keys()):N(Object.keys(this._))},A.prototype.values=function(){var V=[];return this.forEachEntry(function(H){Array.prototype.push.apply(V,H)}),N(V)},A.prototype.forEachEntry=function(V){m(this,V)},A.prototype.forEach=function(V){var H=this;H.forEachEntry(function(X,Q){X.forEach(function(te){V(te,Q,H)})})},A.prototype.clear=function(){this._map?this._.clear():this._={}},Object.defineProperty(A.prototype,"size",{configurable:!1,enumerable:!0,get:function(){var V=0;return m(this,function(H){V+=H.length}),V}}),Object.defineProperty(A.prototype,"count",{configurable:!1,enumerable:!0,get:function(){return this._.size}});var z;try{z=new Function("iterator","makeIterator","var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;")}catch{}function N(V){if(Array.isArray(V)){var H=0;return{next:function(){return H{Qe=function(){function s(m){var w=this;this._insertTag=function(_){var A;w.tags.length===0?w.insertionPoint?A=w.insertionPoint.nextSibling:w.prepend?A=w.container.firstChild:A=w.before:A=w.tags[w.tags.length-1].nextSibling,w.container.insertBefore(_,A),w.tags.push(_)},this.isSpeedy=m.speedy===void 0?!0:m.speedy,this.tags=[],this.ctr=0,this.nonce=m.nonce,this.key=m.key,this.container=m.container,this.prepend=m.prepend,this.insertionPoint=m.insertionPoint,this.before=null}var f=s.prototype;return f.hydrate=function(m){m.forEach(this._insertTag)},f.insert=function(m){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(He(this));var w=this.tags[this.tags.length-1];if(!1)var _;if(this.isSpeedy){var A=ze(w);try{A.insertRule(m,A.cssRules.length)}catch{}}else w.appendChild(document.createTextNode(m));this.ctr++},f.flush=function(){this.tags.forEach(function(m){return m.parentNode&&m.parentNode.removeChild(m)}),this.tags=[],this.ctr=0},s}()}),Ze,lt,Ke,Ht,Ge,Wt,Vt,st,Ct,Mr=u(()=>{Ze="-ms-",lt="-moz-",Ke="-webkit-",Ht="comm",Ge="rule",Wt="decl",Vt="@import",st="@keyframes",Ct="@layer"});function Sr(s,f){return Cr(s,0)^45?(((f<<2^Cr(s,0))<<2^Cr(s,1))<<2^Cr(s,2))<<2^Cr(s,3):0}function An(s){return s.trim()}function jr(s,f){return(s=f.exec(s))?s[0]:s}function Dt(s,f,m){return s.replace(f,m)}function en(s,f){return s.indexOf(f)}function Cr(s,f){return s.charCodeAt(f)|0}function Fn(s,f,m){return s.slice(f,m)}function co(s){return s.length}function po(s){return s.length}function qo(s,f){return f.push(s),s}function Mn(s,f){return s.map(f).join("")}var fi,Va,va,Qn=u(()=>{fi=Math.abs,Va=String.fromCharCode,va=Object.assign});function tn(s,f,m,w,_,A,z){return{value:s,root:f,parent:m,type:w,props:_,children:A,line:yu,column:qa,length:z,return:""}}function Uo(s,f){return va(tn("",null,null,"",null,null,0),s,{length:-s.length},f)}function h0(){return Wn}function vc(){return Wn=$o>0?Cr(Jo,--$o):0,qa--,Wn===10&&(qa=1,yu--),Wn}function br(){return Wn=$o2||hu(Wn)>3?"":" "}function g0(s,f){for(;--f&&br()&&!(Wn<48||Wn>102||Wn>57&&Wn<65||Wn>70&&Wn<97););return _s(s,If()+(f<6&&ya()==32&&br()==32))}function og(s){for(;br();)switch(Wn){case s:return $o;case 34:case 39:s!==34&&s!==39&&og(Wn);break;case 40:s===41&&og(s);break;case 92:br();break}return $o}function Ef(s,f){for(;br()&&s+Wn!==47+10&&!(s+Wn===42+42&&ya()===47););return"/*"+_s(f,$o-1)+"*"+Va(s===47?s:br())}function yc(s){for(;!hu(ya());)br();return _s(s,$o)}var yu,qa,mt,$o,Wn,Jo,Mi=u(()=>{Qn(),yu=1,qa=1,mt=0,$o=0,Wn=0,Jo=""});function Er(s){return gu(bc("",null,null,null,[""],s=jf(s),0,[0],s))}function bc(s,f,m,w,_,A,z,N,V){for(var H=0,X=0,Q=z,te=0,oe=0,re=0,le=1,ce=1,ie=1,Pe=0,Ae="",Oe=_,Se=A,he=w,je=Ae;ce;)switch(re=Pe,Pe=br()){case 40:if(re!=108&&Cr(je,Q-1)==58){en(je+=Dt(vu(Pe),"&","&\f"),"&\f")!=-1&&(ie=-1);break}case 34:case 39:case 91:je+=vu(Pe);break;case 9:case 10:case 13:case 32:je+=GA(re);break;case 92:je+=g0(If()-1,7);continue;case 47:switch(ya()){case 42:case 47:qo(Pf(Ef(br(),If()),f,m),V);break;default:je+="/"}break;case 123*le:N[H++]=co(je)*ie;case 125*le:case 59:case 0:switch(Pe){case 0:case 125:ce=0;case 59+X:ie==-1&&(je=Dt(je,/\f/g,"")),oe>0&&co(je)-Q&&qo(oe>32?B8(je+";",w,m,Q-1):B8(Dt(je," ","")+";",w,m,Q-2),V);break;case 59:je+=";";default:if(qo(he=Jr(je,f,m,H,X,_,N,Ae,Oe=[],Se=[],Q),A),Pe===123)if(X===0)bc(je,f,he,he,Oe,A,Q,N,Se);else switch(te===99&&Cr(je,3)===110?100:te){case 100:case 108:case 109:case 115:bc(s,he,he,w&&qo(Jr(s,he,he,0,0,_,N,Ae,_,Oe=[],Q),Se),_,Se,Q,N,w?Oe:Se);break;default:bc(je,he,he,he,[""],Se,0,N,Se)}}H=X=oe=0,le=ie=1,Ae=je="",Q=z;break;case 58:Q=1+co(je),oe=re;default:if(le<1){if(Pe==123)--le;else if(Pe==125&&le++==0&&vc()==125)continue}switch(je+=Va(Pe),Pe*le){case 38:ie=X>0?1:(je+="\f",-1);break;case 44:N[H++]=(co(je)-1)*ie,ie=1;break;case 64:ya()===45&&(je+=vu(br())),te=ya(),X=Q=co(Ae=je+=yc(If())),Pe++;break;case 45:re===45&&co(je)==2&&(le=0)}}return A}function Jr(s,f,m,w,_,A,z,N,V,H,X){for(var Q=_-1,te=_===0?A:[""],oe=po(te),re=0,le=0,ce=0;re0?te[ie]+" "+Pe:Dt(Pe,/&\f/g,te[ie])))&&(V[ce++]=Ae);return tn(s,f,m,_===0?Ge:N,V,H,X)}function Pf(s,f,m){return tn(s,f,m,Ht,Va(h0()),Fn(s,2,-2),0)}function B8(s,f,m,w){return tn(s,f,m,Wt,Fn(s,0,w),Fn(s,w+1,-1),w)}var v0=u(()=>{Mr(),Qn(),Mi()}),To=u(()=>{});function di(s,f){for(var m="",w=po(s),_=0;_{Mr(),Qn()});function ba(s){var f=po(s);return function(m,w,_,A){for(var z="",N=0;N{Qn()}),XA=u(()=>{Mr(),Qn(),v0(),To(),Mi(),Zn(),bu()}),ig,wu=u(()=>{ig=function(s){var f=new WeakMap;return function(m){if(f.has(m))return f.get(m);var w=s(m);return f.set(m,w),w}}});function ag(s){var f=Object.create(null);return function(m){return f[m]===void 0&&(f[m]=s(m)),f[m]}}var lg=u(()=>{}),Ou={};d(Ou,{default:()=>kf});function wc(s,f){switch(Sr(s,f)){case 5103:return Ke+"print-"+s+s;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Ke+s+s;case 5349:case 4246:case 4810:case 6968:case 2756:return Ke+s+lt+s+Ze+s+s;case 6828:case 4268:return Ke+s+Ze+s+s;case 6165:return Ke+s+Ze+"flex-"+s+s;case 5187:return Ke+s+Dt(s,/(\w+).+(:[^]+)/,Ke+"box-$1$2"+Ze+"flex-$1$2")+s;case 5443:return Ke+s+Ze+"flex-item-"+Dt(s,/flex-|-self/,"")+s;case 4675:return Ke+s+Ze+"flex-line-pack"+Dt(s,/align-content|flex-|-self/,"")+s;case 5548:return Ke+s+Ze+Dt(s,"shrink","negative")+s;case 5292:return Ke+s+Ze+Dt(s,"basis","preferred-size")+s;case 6060:return Ke+"box-"+Dt(s,"-grow","")+Ke+s+Ze+Dt(s,"grow","positive")+s;case 4554:return Ke+Dt(s,/([^-])(transform)/g,"$1"+Ke+"$2")+s;case 6187:return Dt(Dt(Dt(s,/(zoom-|grab)/,Ke+"$1"),/(image-set)/,Ke+"$1"),s,"")+s;case 5495:case 3959:return Dt(s,/(image-set\([^]*)/,Ke+"$1$`$1");case 4968:return Dt(Dt(s,/(.+:)(flex-)?(.*)/,Ke+"box-pack:$3"+Ze+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Ke+s+s;case 4095:case 3583:case 4068:case 2532:return Dt(s,/(.+)-inline(.+)/,Ke+"$1$2")+s;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(co(s)-1-f>6)switch(Cr(s,f+1)){case 109:if(Cr(s,f+4)!==45)break;case 102:return Dt(s,/(.+:)(.+)-([^]+)/,"$1"+Ke+"$2-$3$1"+lt+(Cr(s,f+3)==108?"$3":"$2-$3"))+s;case 115:return~en(s,"stretch")?wc(Dt(s,"stretch","fill-available"),f)+s:s}break;case 4949:if(Cr(s,f+1)!==115)break;case 6444:switch(Cr(s,co(s)-3-(~en(s,"!important")&&10))){case 107:return Dt(s,":",":"+Ke)+s;case 101:return Dt(s,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ke+(Cr(s,14)===45?"inline-":"")+"box$3$1"+Ke+"$2$3$1"+Ze+"$2box$3")+s}break;case 5936:switch(Cr(s,f+11)){case 114:return Ke+s+Ze+Dt(s,/[svh]\w+-[tblr]{2}/,"tb")+s;case 108:return Ke+s+Ze+Dt(s,/[svh]\w+-[tblr]{2}/,"tb-rl")+s;case 45:return Ke+s+Ze+Dt(s,/[svh]\w+-[tblr]{2}/,"lr")+s}return Ke+s+Ze+s+s}return s}var sg,H8,V8,ug,Tn,y0,q8,cg,kf,pg=u(()=>{Be(),XA(),wu(),lg(),sg=function(s,f,m){for(var w=0,_=0;w=_,_=ya(),w===38&&_===12&&(f[m]=1),!hu(_);)br();return _s(s,$o)},H8=function(s,f){var m=-1,w=44;do switch(hu(w)){case 0:w===38&&ya()===12&&(f[m]=1),s[m]+=sg($o-1,f,m);break;case 2:s[m]+=vu(w);break;case 4:if(w===44){s[++m]=ya()===58?"&\f":"",f[m]=s[m].length;break}default:s[m]+=Va(w)}while(w=br());return s},V8=function(s,f){return gu(H8(jf(s),f))},ug=new WeakMap,Tn=function(s){if(!(s.type!=="rule"||!s.parent||s.length<1)){for(var f=s.value,m=s.parent,w=s.column===m.column&&s.line===m.line;m.type!=="rule";)if(m=m.parent,!m)return;if(!(s.props.length===1&&f.charCodeAt(0)!==58&&!ug.get(m))&&!w){ug.set(s,!0);for(var _=[],A=V8(f,_),z=m.props,N=0,V=0;N-1&&!s.return)switch(s.type){case Wt:s.return=wc(s.value,s.length);break;case st:return di([Uo(s,{value:Dt(s.value,"@","@"+Ke)})],w);case Ge:if(s.length)return Mn(s.props,function(_){switch(jr(_,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return di([Uo(s,{props:[Dt(_,/:(read-\w+)/,":"+lt+"$1")]})],w);case"::placeholder":return di([Uo(s,{props:[Dt(_,/:(plac\w+)/,":"+Ke+"input-$1")]}),Uo(s,{props:[Dt(_,/:(plac\w+)/,":"+lt+"$1")]}),Uo(s,{props:[Dt(_,/:(plac\w+)/,Ze+"input-$1")]})],w)}return""})}},cg=[q8],kf=function(s){var f=s.key;if(f==="css"){var m=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(m,function(re){var le=re.getAttribute("data-emotion");le.indexOf(" ")!==-1&&(document.head.appendChild(re),re.setAttribute("data-s",""))})}var w=s.stylisPlugins||cg,_={},A,z=[];A=s.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+f+' "]'),function(re){for(var le=re.getAttribute("data-emotion").split(" "),ce=1;ce{U8=O(de()),$8=function(s,f){return(0,U8.default)(s,f)}});function fg(s,f,m){var w="";return m.split(" ").forEach(function(_){s[_]!==void 0?f.push(s[_]+";"):w+=_+" "}),w}var J8,Oc,xc,b0=u(()=>{J8=!0,Oc=function(s,f,m){var w=s.key+"-"+f.name;(m===!1||J8===!1)&&s.registered[w]===void 0&&(s.registered[w]=f.styles)},xc=function(s,f,m){Oc(s,f,m);var w=s.key+"-"+f.name;if(s.inserted[f.name]===void 0){var _=f;do s.insert(f===_?"."+w:"",_,s.sheet,!0),_=_.next;while(_!==void 0)}}});function YA(s){for(var f=0,m,w=0,_=s.length;_>=4;++w,_-=4)m=s.charCodeAt(w)&255|(s.charCodeAt(++w)&255)<<8|(s.charCodeAt(++w)&255)<<16|(s.charCodeAt(++w)&255)<<24,m=(m&65535)*1540483477+((m>>>16)*59797<<16),m^=m>>>24,f=(m&65535)*1540483477+((m>>>16)*59797<<16)^(f&65535)*1540483477+((f>>>16)*59797<<16);switch(_){case 3:f^=(s.charCodeAt(w+2)&255)<<16;case 2:f^=(s.charCodeAt(w+1)&255)<<8;case 1:f^=s.charCodeAt(w)&255,f=(f&65535)*1540483477+((f>>>16)*59797<<16)}return f^=f>>>13,f=(f&65535)*1540483477+((f>>>16)*59797<<16),((f^f>>>15)>>>0).toString(36)}var QA=u(()=>{}),dg,ZA=u(()=>{dg={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1}});function zl(s,f,m){if(m==null)return"";if(m.__emotion_styles!==void 0)return m;switch(typeof m){case"boolean":return"";case"object":{if(m.anim===1)return $a={name:m.name,styles:m.styles,next:$a},m.name;if(m.styles!==void 0){var w=m.next;if(w!==void 0)for(;w!==void 0;)$a={name:w.name,styles:w.styles,next:$a},w=w.next;var _=m.styles+";";return _}return w0(s,f,m)}case"function":{if(s!==void 0){var A=$a,z=m(s);return $a=A,zl(s,f,z)}break}case"string":if(!1)var N,V;break}if(f==null)return m;var H=f[m];return H!==void 0?H:m}function w0(s,f,m){var w="";if(Array.isArray(m))for(var _=0;_{QA(),ZA(),lg(),mg=/[A-Z]|^ms/g,_c=/_EMO_([^_]+?)_([^]*?)_EMO_/g,wa=function(s){return s.charCodeAt(1)===45},hg=function(s){return s!=null&&typeof s!="boolean"},O0=ag(function(s){return wa(s)?s:s.replace(mg,"-$&").toLowerCase()}),gg=function(s,f){switch(s){case"animation":case"animationName":if(typeof f=="string")return f.replace(_c,function(m,w,_){return $a={name:w,styles:_,next:$a},w})}return dg[s]!==1&&!wa(s)&&typeof f=="number"&&f!==0?f+"px":f},vg=/label:\s*([^\s;\n{]+)\s*(;|$)/g,Sc=function(s,f,m){if(s.length===1&&typeof s[0]=="object"&&s[0]!==null&&s[0].styles!==void 0)return s[0];var w=!0,_="";$a=void 0;var A=s[0];A==null||A.raw===void 0?(w=!1,_+=zl(m,f,A)):_+=A[0];for(var z=1;z{_0=O(k()),S0=function(s){return s()},yg=_0.useInsertionEffect?_0.useInsertionEffect:!1,Cf=yg||S0,bg=yg||_0.useLayoutEffect});function eM(s){var f=s.displayName||s.name||"Component",m=function(_,A){var z=Go.useContext(Ja);return Go.createElement(s,B({theme:z,ref:A},_))},w=Go.forwardRef(m);return w.displayName="WithTheme("+f+")",$8(w,s)}var Go,Af,wg,j0,Ic,G8,X8,xu,Ja,K8,Y8,Q8,Mf,jc,Z8,Og,xg,e9,t9=u(()=>{Go=O(k()),Af=O(k()),pg(),ne(),wu(),KA(),b0(),x0(),I0(),wg=!0,j0={}.hasOwnProperty,Ic=Go.createContext(typeof HTMLElement<"u"?kf({key:"css"}):null),G8=Ic.Provider,X8=function(){return(0,Af.useContext)(Ic)},xu=function(s){return(0,Af.forwardRef)(function(f,m){var w=(0,Af.useContext)(Ic);return s(f,w,m)})},wg||(xu=function(s){return function(f){var m=(0,Af.useContext)(Ic);return m===null?(m=kf({key:"css"}),Go.createElement(Ic.Provider,{value:m},s(f,m))):s(f,m)}}),Ja=Go.createContext({}),K8=function(){return Go.useContext(Ja)},Y8=function(s,f){if(typeof f=="function"){var m=f(s);return m}return B({},s,f)},Q8=ig(function(s){return ig(function(f){return Y8(s,f)})}),Mf=function(s){var f=Go.useContext(Ja);return s.theme!==f&&(f=Q8(f)(s.theme)),Go.createElement(Ja.Provider,{value:f},s.children)},jc="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",Z8=function(s,f){var m={};for(var w in f)j0.call(f,w)&&(m[w]=f[w]);if(m[jc]=s,!1)var _;return m},Og=function(s){var f=s.cache,m=s.serialized,w=s.isStringTag;return Oc(f,m,w),Cf(function(){return xc(f,m,w)}),null},xg=xu(function(s,f,m){var w=s.css;typeof w=="string"&&f.registered[w]!==void 0&&(w=f.registered[w]);var _=s[jc],A=[w],z="";typeof s.className=="string"?z=fg(f.registered,A,s.className):s.className!=null&&(z=s.className+" ");var N=Sc(A,void 0,Go.useContext(Ja));if(!1)var V;z+=f.key+"-"+N.name;var H={};for(var X in s)j0.call(s,X)&&X!=="css"&&X!==jc&&(H[X]=s[X]);return H.ref=m,H.className=z,Go.createElement(Go.Fragment,null,Go.createElement(Og,{cache:f,serialized:N,isStringTag:typeof _=="string"}),Go.createElement(_,H))}),e9=xg}),E0={};d(E0,{CacheProvider:()=>G8,ClassNames:()=>Rf,Global:()=>o9,ThemeContext:()=>Ja,ThemeProvider:()=>Mf,__unsafe_useEmotionCache:()=>X8,createElement:()=>_u,css:()=>r9,jsx:()=>_u,keyframes:()=>_g,useTheme:()=>K8,withEmotionCache:()=>xu,withTheme:()=>eM});function r9(){for(var s=arguments.length,f=new Array(s),m=0;m{t9(),t9(),zr=O(k()),b0(),I0(),x0(),pg(),ne(),wu(),Tf=O(de()),_u=function(s,f){var m=arguments;if(f==null||!j0.call(f,"css"))return zr.createElement.apply(void 0,m);var w=m.length,_=new Array(w);_[0]=e9,_[1]=Z8(s,f);for(var A=2;A{function m(w){return w&&w.__esModule?w:{default:w}}f.exports=m,f.exports.__esModule=!0,f.exports.default=f.exports}),tM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=f;function f(m){let w="https://mui.com/production-error/?code="+m;for(let _=1;_{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(tM())}),l9,P0,s9=u(()=>{lg(),l9=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,P0=ag(function(s){return l9.test(s)||s.charCodeAt(0)===111&&s.charCodeAt(1)===110&&s.charCodeAt(2)<91})}),Ec,u9,zf,Df,Sg,c9,p9,f9=u(()=>{ne(),Ec=O(k()),s9(),Gi(),b0(),x0(),I0(),u9=P0,zf=function(s){return s!=="theme"},Df=function(s){return typeof s=="string"&&s.charCodeAt(0)>96?u9:zf},Sg=function(s,f,m){var w;if(f){var _=f.shouldForwardProp;w=s.__emotion_forwardProp&&_?function(A){return s.__emotion_forwardProp(A)&&_(A)}:_}return typeof w!="function"&&m&&(w=s.__emotion_forwardProp),w},c9=function(s){var f=s.cache,m=s.serialized,w=s.isStringTag;return Oc(f,m,w),Cf(function(){return xc(f,m,w)}),null},p9=function s(f,m){var w=f.__emotion_real===f,_=w&&f.__emotion_base||f,A,z;m!==void 0&&(A=m.label,z=m.target);var N=Sg(f,m,w),V=N||Df(_),H=!V("as");return function(){var X=arguments,Q=w&&f.__emotion_styles!==void 0?f.__emotion_styles.slice(0):[];if(A!==void 0&&Q.push("label:"+A+";"),X[0]==null||X[0].raw===void 0)Q.push.apply(Q,X);else{Q.push(X[0][0]);for(var te=X.length,oe=1;oek0});var rM,m9,k0,nM=u(()=>{f9(),ne(),rM=O(k()),s9(),b0(),x0(),I0(),m9=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],k0=p9.bind(),m9.forEach(function(s){k0[s]=k0(s)})}),h9=c((s,f)=>{"use strict";var m="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";f.exports=m}),oM=c((s,f)=>{"use strict";var m=h9();function w(){}function _(){}_.resetWarningCache=w,f.exports=function(){function A(V,H,X,Q,te,oe){if(oe!==m){var re=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw re.name="Invariant Violation",re}}A.isRequired=A;function z(){return A}var N={array:A,bigint:A,bool:A,func:A,number:A,object:A,string:A,symbol:A,any:A,arrayOf:z,element:A,elementType:A,instanceOf:z,node:A,objectOf:z,oneOf:z,oneOfType:z,shape:z,exact:z,checkPropTypes:_,resetWarningCache:w};return N.PropTypes=N,N}}),Dl=c((s,f)=>{f.exports=oM()();var m,w}),iM=c(s=>{"use strict";I();var f=k(),m=60103;s.Fragment=60107,typeof Symbol=="function"&&Symbol.for&&(w=Symbol.for,m=w("react.element"),s.Fragment=w("react.fragment"));var w,_=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,A=Object.prototype.hasOwnProperty,z={key:!0,ref:!0,__self:!0,__source:!0};function N(V,H,X){var Q,te={},oe=null,re=null;X!==void 0&&(oe=""+X),H.key!==void 0&&(oe=""+H.key),H.ref!==void 0&&(re=H.ref);for(Q in H)A.call(H,Q)&&!z.hasOwnProperty(Q)&&(te[Q]=H[Q]);if(V&&V.defaultProps)for(Q in H=V.defaultProps,H)te[Q]===void 0&&(te[Q]=H[Q]);return{$$typeof:m,type:V,key:oe,ref:re,props:te,_owner:_.current}}s.jsx=N,s.jsxs=N}),Dr=c((s,f)=>{"use strict";f.exports=iM()}),aM=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=X;var m=V(k()),w=f(Dl()),_=(Gi(),S(E0)),A=f((pg(),S(Ou))),z=Dr();function N(Q){if(typeof WeakMap!="function")return null;var te=new WeakMap,oe=new WeakMap;return(N=function(re){return re?oe:te})(Q)}function V(Q,te){if(!te&&Q&&Q.__esModule)return Q;if(Q===null||typeof Q!="object"&&typeof Q!="function")return{default:Q};var oe=N(te);if(oe&&oe.has(Q))return oe.get(Q);var re={__proto__:null},le=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ce in Q)if(ce!=="default"&&Object.prototype.hasOwnProperty.call(Q,ce)){var ie=le?Object.getOwnPropertyDescriptor(Q,ce):null;ie&&(ie.get||ie.set)?Object.defineProperty(re,ce,ie):re[ce]=Q[ce]}return re.default=Q,oe&&oe.set(Q,re),re}var H;typeof document=="object"&&(H=(0,A.default)({key:"css",prepend:!0}));function X(Q){let{injectFirst:te,children:oe}=Q;return te&&H?(0,z.jsx)(_.CacheProvider,{value:H,children:oe}):oe}}),Ig=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(aM())}),lM=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=H;var m=N(k()),w=f(Dl()),_=(Gi(),S(E0)),A=Dr();function z(X){if(typeof WeakMap!="function")return null;var Q=new WeakMap,te=new WeakMap;return(z=function(oe){return oe?te:Q})(X)}function N(X,Q){if(!Q&&X&&X.__esModule)return X;if(X===null||typeof X!="object"&&typeof X!="function")return{default:X};var te=z(Q);if(te&&te.has(X))return te.get(X);var oe={__proto__:null},re=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var le in X)if(le!=="default"&&Object.prototype.hasOwnProperty.call(X,le)){var ce=re?Object.getOwnPropertyDescriptor(X,le):null;ce&&(ce.get||ce.set)?Object.defineProperty(oe,le,ce):oe[le]=X[le]}return oe.default=X,te&&te.set(X,oe),oe}function V(X){return X==null||Object.keys(X).length===0}function H(X){let{styles:Q,defaultTheme:te={}}=X,oe=typeof Q=="function"?re=>Q(V(re)?te:re):Q;return(0,A.jsx)(_.Global,{styles:oe})}}),sM=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(lM())}),C0=c(s=>{"use strict";"use client";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"GlobalStyles",{enumerable:!0,get:function(){return A.default}}),Object.defineProperty(s,"StyledEngineProvider",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(s,"ThemeContext",{enumerable:!0,get:function(){return w.ThemeContext}}),Object.defineProperty(s,"css",{enumerable:!0,get:function(){return w.css}}),s.default=z,s.internal_processStyles=void 0,Object.defineProperty(s,"keyframes",{enumerable:!0,get:function(){return w.keyframes}});var m=f((nM(),S(d9))),w=(Gi(),S(E0)),_=f(Ig()),A=f(sM());function z(V,H){return(0,m.default)(V,H)}var N=(V,H)=>{Array.isArray(V.__emotion_styles)&&(V.__emotion_styles=H(V.__emotion_styles))};s.internal_processStyles=N}),Pc=c((s,f)=>{function m(){return f.exports=m=Object.assign?Object.assign.bind():function(w){for(var _=1;_{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=A,s.isPlainObject=w;var m=f(Pc());function w(z){if(typeof z!="object"||z===null)return!1;let N=Object.getPrototypeOf(z);return(N===null||N===Object.prototype||Object.getPrototypeOf(N)===null)&&!(Symbol.toStringTag in z)&&!(Symbol.iterator in z)}function _(z){if(!w(z))return z;let N={};return Object.keys(z).forEach(V=>{N[V]=_(z[V])}),N}function A(z,N,V={clone:!0}){let H=V.clone?(0,m.default)({},z):z;return w(z)&&w(N)&&Object.keys(N).forEach(X=>{X!=="__proto__"&&(w(N[X])&&X in z&&w(z[X])?H[X]=A(z[X],N[X],V):V.clone?H[X]=w(N[X])?_(N[X]):N[X]:H[X]=N[X])}),H}}),mi=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var f={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=_(g9());Object.keys(m).forEach(function(A){A==="default"||A==="__esModule"||Object.prototype.hasOwnProperty.call(f,A)||A in s&&s[A]===m[A]||Object.defineProperty(s,A,{enumerable:!0,get:function(){return m[A]}})});function w(A){if(typeof WeakMap!="function")return null;var z=new WeakMap,N=new WeakMap;return(w=function(V){return V?N:z})(A)}function _(A,z){if(!z&&A&&A.__esModule)return A;if(A===null||typeof A!="object"&&typeof A!="function")return{default:A};var N=w(z);if(N&&N.has(A))return N.get(A);var V={__proto__:null},H=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var X in A)if(X!=="default"&&Object.prototype.hasOwnProperty.call(A,X)){var Q=H?Object.getOwnPropertyDescriptor(A,X):null;Q&&(Q.get||Q.set)?Object.defineProperty(V,X,Q):V[X]=A[X]}return V.default=A,N&&N.set(A,V),V}}),v9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=w;var m=f(Xi());function w(_){if(typeof _!="string")throw new Error((0,m.default)(7));return _.charAt(0).toUpperCase()+_.slice(1)}}),Vr=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(v9())}),uM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=z,s.getFunctionName=w;var f=ye(),m=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function w(N){let V=`${N}`.match(m);return V&&V[1]||""}function _(N,V=""){return N.displayName||N.name||w(N)||V}function A(N,V,H){let X=_(V);return N.displayName||(X!==""?`${H}(${X})`:H)}function z(N){if(N!=null){if(typeof N=="string")return N;if(typeof N=="function")return _(N,"Component");if(typeof N=="object")switch(N.$$typeof){case f.ForwardRef:return A(N,N.render,"ForwardRef");case f.Memo:return A(N,N.type,"memo");default:return}}}}),cM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var f={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=_(uM());Object.keys(m).forEach(function(A){A==="default"||A==="__esModule"||Object.prototype.hasOwnProperty.call(f,A)||A in s&&s[A]===m[A]||Object.defineProperty(s,A,{enumerable:!0,get:function(){return m[A]}})});function w(A){if(typeof WeakMap!="function")return null;var z=new WeakMap,N=new WeakMap;return(w=function(V){return V?N:z})(A)}function _(A,z){if(!z&&A&&A.__esModule)return A;if(A===null||typeof A!="object"&&typeof A!="function")return{default:A};var N=w(z);if(N&&N.has(A))return N.get(A);var V={__proto__:null},H=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var X in A)if(X!=="default"&&Object.prototype.hasOwnProperty.call(A,X)){var Q=H?Object.getOwnPropertyDescriptor(A,X):null;Q&&(Q.get||Q.set)?Object.defineProperty(V,X,Q):V[X]=A[X]}return V.default=A,N&&N.set(A,V),V}}),y9=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;function f(w,_=Number.MIN_SAFE_INTEGER,A=Number.MAX_SAFE_INTEGER){return Math.max(_,Math.min(w,A))}var m=s.default=f}),pM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}});var m=f(y9())}),A0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(mi());function w(A,z){return z?(0,m.default)(A,z,{clone:!1}):A}var _=s.default=w}),M0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(Dl()),w={},_=s.default=w}),Ga=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.computeBreakpointsBase=oe,s.createEmptyBreakpointObject=X,s.default=void 0,s.handleBreakpoints=V,s.mergeBreakpointsInOrder=te,s.removeUnusedBreakpoints=Q,s.resolveBreakpointValues=re,s.values=void 0;var m=f(Pc()),w=f(Dl()),_=f(mi()),A=f(A0()),z=s.values={xs:0,sm:600,md:900,lg:1200,xl:1536},N={keys:["xs","sm","md","lg","xl"],up:ce=>`@media (min-width:${z[ce]}px)`};function V(ce,ie,Pe){let Ae=ce.theme||{};if(Array.isArray(ie)){let Oe=Ae.breakpoints||N;return ie.reduce((Se,he,je)=>(Se[Oe.up(Oe.keys[je])]=Pe(ie[je]),Se),{})}if(typeof ie=="object"){let Oe=Ae.breakpoints||N;return Object.keys(ie).reduce((Se,he)=>{if(Object.keys(Oe.values||z).indexOf(he)!==-1){let je=Oe.up(he);Se[je]=Pe(ie[he],he)}else{let je=he;Se[je]=ie[je]}return Se},{})}return Pe(ie)}function H(ce){let ie=Pe=>{let Ae=Pe.theme||{},Oe=ce(Pe),Se=Ae.breakpoints||N,he=Se.keys.reduce((je,ae)=>(Pe[ae]&&(je=je||{},je[Se.up(ae)]=ce((0,m.default)({theme:Ae},Pe[ae]))),je),null);return(0,A.default)(Oe,he)};return ie.propTypes={},ie.filterProps=["xs","sm","md","lg","xl",...ce.filterProps],ie}function X(ce={}){var ie;return((ie=ce.keys)==null?void 0:ie.reduce((Pe,Ae)=>{let Oe=ce.up(Ae);return Pe[Oe]={},Pe},{}))||{}}function Q(ce,ie){return ce.reduce((Pe,Ae)=>{let Oe=Pe[Ae];return(!Oe||Object.keys(Oe).length===0)&&delete Pe[Ae],Pe},ie)}function te(ce,...ie){let Pe=X(ce),Ae=[Pe,...ie].reduce((Oe,Se)=>(0,_.default)(Oe,Se),{});return Q(Object.keys(Pe),Ae)}function oe(ce,ie){if(typeof ce!="object")return{};let Pe={},Ae=Object.keys(ie);return Array.isArray(ce)?Ae.forEach((Oe,Se)=>{Se{ce[Oe]!=null&&(Pe[Oe]=!0)}),Pe}function re({values:ce,breakpoints:ie,base:Pe}){let Ae=Pe||oe(ce,ie),Oe=Object.keys(Ae);if(Oe.length===0)return ce;let Se;return Oe.reduce((he,je,ae)=>(Array.isArray(ce)?(he[je]=ce[ae]!=null?ce[ae]:ce[Se],Se=ae):typeof ce=="object"?(he[je]=ce[je]!=null?ce[je]:ce[Se],Se=je):he[je]=ce,he),{})}var le=s.default=H}),kc=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.getPath=A,s.getStyleValue=z;var m=f(Vr()),w=f(M0()),_=Ga();function A(H,X,Q=!0){if(!X||typeof X!="string")return null;if(H&&H.vars&&Q){let te=`vars.${X}`.split(".").reduce((oe,re)=>oe&&oe[re]?oe[re]:null,H);if(te!=null)return te}return X.split(".").reduce((te,oe)=>te&&te[oe]!=null?te[oe]:null,H)}function z(H,X,Q,te=Q){let oe;return typeof H=="function"?oe=H(Q):Array.isArray(H)?oe=H[Q]||te:oe=A(H,Q)||te,X&&(oe=X(oe,te,H)),oe}function N(H){let{prop:X,cssProperty:Q=H.prop,themeKey:te,transform:oe}=H,re=le=>{if(le[X]==null)return null;let ce=le[X],ie=le.theme,Pe=A(ie,te)||{},Ae=Oe=>{let Se=z(Pe,oe,Oe);return Oe===Se&&typeof Oe=="string"&&(Se=z(Pe,oe,`${X}${Oe==="default"?"":(0,m.default)(Oe)}`,Oe)),Q===!1?Se:{[Q]:Se}};return(0,_.handleBreakpoints)(le,ce,Ae)};return re.propTypes={},re.filterProps=[X],re}var V=s.default=N}),fM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=f;function f(m){let w={};return _=>(w[_]===void 0&&(w[_]=m(_)),w[_])}}),T0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.createUnarySpacing=le,s.createUnaryUnit=re,s.default=void 0,s.getStyleFromPropValue=ie,s.getValue=ce,s.margin=Oe,s.marginKeys=void 0,s.padding=Se,s.paddingKeys=void 0;var m=f(M0()),w=Ga(),_=kc(),A=f(A0()),z=f(fM()),N={m:"margin",p:"padding"},V={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},H={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},X=(0,z.default)(ae=>{if(ae.length>2)if(H[ae])ae=H[ae];else return[ae];let[we,Ce]=ae.split(""),Te=N[we],We=V[Ce]||"";return Array.isArray(We)?We.map($e=>Te+$e):[Te+We]}),Q=s.marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],te=s.paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],oe=[...Q,...te];function re(ae,we,Ce,Te){var We;let $e=(We=(0,_.getPath)(ae,we,!1))!=null?We:Ce;return typeof $e=="number"?it=>typeof it=="string"?it:$e*it:Array.isArray($e)?it=>typeof it=="string"?it:$e[it]:typeof $e=="function"?$e:()=>{}}function le(ae){return re(ae,"spacing",8,"spacing")}function ce(ae,we){if(typeof we=="string"||we==null)return we;let Ce=Math.abs(we),Te=ae(Ce);return we>=0?Te:typeof Te=="number"?-Te:`-${Te}`}function ie(ae,we){return Ce=>ae.reduce((Te,We)=>(Te[We]=ce(we,Ce),Te),{})}function Pe(ae,we,Ce,Te){if(we.indexOf(Ce)===-1)return null;let We=X(Ce),$e=ie(We,Te),it=ae[Ce];return(0,w.handleBreakpoints)(ae,it,$e)}function Ae(ae,we){let Ce=le(ae.theme);return Object.keys(ae).map(Te=>Pe(ae,we,Te,Ce)).reduce(A.default,{})}function Oe(ae){return Ae(ae,Q)}Oe.propTypes={},Oe.filterProps=Q;function Se(ae){return Ae(ae,te)}Se.propTypes={},Se.filterProps=te;function he(ae){return Ae(ae,oe)}he.propTypes={},he.filterProps=oe;var je=s.default=he}),Su=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(A0());function w(...A){let z=A.reduce((V,H)=>(H.filterProps.forEach(X=>{V[X]=H}),V),{}),N=V=>Object.keys(V).reduce((H,X)=>z[X]?(0,m.default)(H,z[X](V)):H,{});return N.propTypes={},N.filterProps=A.reduce((V,H)=>V.concat(H.filterProps),[]),N}var _=s.default=w}),R0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.borderTopColor=s.borderTop=s.borderRightColor=s.borderRight=s.borderRadius=s.borderLeftColor=s.borderLeft=s.borderColor=s.borderBottomColor=s.borderBottom=s.border=void 0,s.borderTransform=N,s.outlineColor=s.outline=s.default=void 0;var m=f(M0()),w=f(kc()),_=f(Su()),A=T0(),z=Ga();function N(ae){return typeof ae!="number"?ae:`${ae}px solid`}function V(ae,we){return(0,w.default)({prop:ae,themeKey:"borders",transform:we})}var H=s.border=V("border",N),X=s.borderTop=V("borderTop",N),Q=s.borderRight=V("borderRight",N),te=s.borderBottom=V("borderBottom",N),oe=s.borderLeft=V("borderLeft",N),re=s.borderColor=V("borderColor"),le=s.borderTopColor=V("borderTopColor"),ce=s.borderRightColor=V("borderRightColor"),ie=s.borderBottomColor=V("borderBottomColor"),Pe=s.borderLeftColor=V("borderLeftColor"),Ae=s.outline=V("outline",N),Oe=s.outlineColor=V("outlineColor"),Se=ae=>{if(ae.borderRadius!==void 0&&ae.borderRadius!==null){let we=(0,A.createUnaryUnit)(ae.theme,"shape.borderRadius",4,"borderRadius"),Ce=Te=>({borderRadius:(0,A.getValue)(we,Te)});return(0,z.handleBreakpoints)(ae,ae.borderRadius,Ce)}return null};s.borderRadius=Se,Se.propTypes={},Se.filterProps=["borderRadius"];var he=(0,_.default)(H,X,Q,te,oe,re,le,ce,ie,Pe,Se,Ae,Oe),je=s.default=he}),jg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.rowGap=s.gridTemplateRows=s.gridTemplateColumns=s.gridTemplateAreas=s.gridRow=s.gridColumn=s.gridAutoRows=s.gridAutoFlow=s.gridAutoColumns=s.gridArea=s.gap=s.default=s.columnGap=void 0;var m=f(kc()),w=f(Su()),_=T0(),A=Ga(),z=f(M0()),N=Se=>{if(Se.gap!==void 0&&Se.gap!==null){let he=(0,_.createUnaryUnit)(Se.theme,"spacing",8,"gap"),je=ae=>({gap:(0,_.getValue)(he,ae)});return(0,A.handleBreakpoints)(Se,Se.gap,je)}return null};s.gap=N,N.propTypes={},N.filterProps=["gap"];var V=Se=>{if(Se.columnGap!==void 0&&Se.columnGap!==null){let he=(0,_.createUnaryUnit)(Se.theme,"spacing",8,"columnGap"),je=ae=>({columnGap:(0,_.getValue)(he,ae)});return(0,A.handleBreakpoints)(Se,Se.columnGap,je)}return null};s.columnGap=V,V.propTypes={},V.filterProps=["columnGap"];var H=Se=>{if(Se.rowGap!==void 0&&Se.rowGap!==null){let he=(0,_.createUnaryUnit)(Se.theme,"spacing",8,"rowGap"),je=ae=>({rowGap:(0,_.getValue)(he,ae)});return(0,A.handleBreakpoints)(Se,Se.rowGap,je)}return null};s.rowGap=H,H.propTypes={},H.filterProps=["rowGap"];var X=s.gridColumn=(0,m.default)({prop:"gridColumn"}),Q=s.gridRow=(0,m.default)({prop:"gridRow"}),te=s.gridAutoFlow=(0,m.default)({prop:"gridAutoFlow"}),oe=s.gridAutoColumns=(0,m.default)({prop:"gridAutoColumns"}),re=s.gridAutoRows=(0,m.default)({prop:"gridAutoRows"}),le=s.gridTemplateColumns=(0,m.default)({prop:"gridTemplateColumns"}),ce=s.gridTemplateRows=(0,m.default)({prop:"gridTemplateRows"}),ie=s.gridTemplateAreas=(0,m.default)({prop:"gridTemplateAreas"}),Pe=s.gridArea=(0,m.default)({prop:"gridArea"}),Ae=(0,w.default)(N,V,H,X,Q,te,oe,re,le,ce,ie,Pe),Oe=s.default=Ae}),dM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=s.color=s.bgcolor=s.backgroundColor=void 0,s.paletteTransform=_;var m=f(kc()),w=f(Su());function _(X,Q){return Q==="grey"?Q:X}var A=s.color=(0,m.default)({prop:"color",themeKey:"palette",transform:_}),z=s.bgcolor=(0,m.default)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:_}),N=s.backgroundColor=(0,m.default)({prop:"backgroundColor",themeKey:"palette",transform:_}),V=(0,w.default)(A,z,N),H=s.default=V}),b9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.sizeWidth=s.sizeHeight=s.minWidth=s.minHeight=s.maxWidth=s.maxHeight=s.height=s.default=s.boxSizing=void 0,s.sizingTransform=A,s.width=void 0;var m=f(kc()),w=f(Su()),_=Ga();function A(ie){return ie<=1&&ie!==0?`${ie*100}%`:ie}var z=s.width=(0,m.default)({prop:"width",transform:A}),N=ie=>{if(ie.maxWidth!==void 0&&ie.maxWidth!==null){let Pe=Ae=>{var Oe,Se;let he=((Oe=ie.theme)==null||(Oe=Oe.breakpoints)==null||(Oe=Oe.values)==null?void 0:Oe[Ae])||_.values[Ae];return he?((Se=ie.theme)==null||(Se=Se.breakpoints)==null?void 0:Se.unit)!=="px"?{maxWidth:`${he}${ie.theme.breakpoints.unit}`}:{maxWidth:he}:{maxWidth:A(Ae)}};return(0,_.handleBreakpoints)(ie,ie.maxWidth,Pe)}return null};s.maxWidth=N,N.filterProps=["maxWidth"];var V=s.minWidth=(0,m.default)({prop:"minWidth",transform:A}),H=s.height=(0,m.default)({prop:"height",transform:A}),X=s.maxHeight=(0,m.default)({prop:"maxHeight",transform:A}),Q=s.minHeight=(0,m.default)({prop:"minHeight",transform:A}),te=s.sizeWidth=(0,m.default)({prop:"size",cssProperty:"width",transform:A}),oe=s.sizeHeight=(0,m.default)({prop:"size",cssProperty:"height",transform:A}),re=s.boxSizing=(0,m.default)({prop:"boxSizing"}),le=(0,w.default)(z,N,V,H,X,Q,re),ce=s.default=le}),z0=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var f=T0(),m=R0(),w=jg(),_=dM(),A=b9(),z={border:{themeKey:"borders",transform:m.borderTransform},borderTop:{themeKey:"borders",transform:m.borderTransform},borderRight:{themeKey:"borders",transform:m.borderTransform},borderBottom:{themeKey:"borders",transform:m.borderTransform},borderLeft:{themeKey:"borders",transform:m.borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:m.borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:m.borderRadius},color:{themeKey:"palette",transform:_.paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:_.paletteTransform},backgroundColor:{themeKey:"palette",transform:_.paletteTransform},p:{style:f.padding},pt:{style:f.padding},pr:{style:f.padding},pb:{style:f.padding},pl:{style:f.padding},px:{style:f.padding},py:{style:f.padding},padding:{style:f.padding},paddingTop:{style:f.padding},paddingRight:{style:f.padding},paddingBottom:{style:f.padding},paddingLeft:{style:f.padding},paddingX:{style:f.padding},paddingY:{style:f.padding},paddingInline:{style:f.padding},paddingInlineStart:{style:f.padding},paddingInlineEnd:{style:f.padding},paddingBlock:{style:f.padding},paddingBlockStart:{style:f.padding},paddingBlockEnd:{style:f.padding},m:{style:f.margin},mt:{style:f.margin},mr:{style:f.margin},mb:{style:f.margin},ml:{style:f.margin},mx:{style:f.margin},my:{style:f.margin},margin:{style:f.margin},marginTop:{style:f.margin},marginRight:{style:f.margin},marginBottom:{style:f.margin},marginLeft:{style:f.margin},marginX:{style:f.margin},marginY:{style:f.margin},marginInline:{style:f.margin},marginInlineStart:{style:f.margin},marginInlineEnd:{style:f.margin},marginBlock:{style:f.margin},marginBlockStart:{style:f.margin},marginBlockEnd:{style:f.margin},displayPrint:{cssProperty:!1,transform:V=>({"@media print":{display:V}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:w.gap},rowGap:{style:w.rowGap},columnGap:{style:w.columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:A.sizingTransform},maxWidth:{style:A.maxWidth},minWidth:{transform:A.sizingTransform},height:{transform:A.sizingTransform},maxHeight:{transform:A.sizingTransform},minHeight:{transform:A.sizingTransform},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},N=s.default=z}),D0=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.unstable_createStyleFunctionSx=H;var m=f(Vr()),w=f(A0()),_=kc(),A=Ga(),z=f(z0());function N(...te){let oe=te.reduce((le,ce)=>le.concat(Object.keys(ce)),[]),re=new Set(oe);return te.every(le=>re.size===Object.keys(le).length)}function V(te,oe){return typeof te=="function"?te(oe):te}function H(){function te(re,le,ce,ie){let Pe={[re]:le,theme:ce},Ae=ie[re];if(!Ae)return{[re]:le};let{cssProperty:Oe=re,themeKey:Se,transform:he,style:je}=Ae;if(le==null)return null;if(Se==="typography"&&le==="inherit")return{[re]:le};let ae=(0,_.getPath)(ce,Se)||{};if(je)return je(Pe);let we=Ce=>{let Te=(0,_.getStyleValue)(ae,he,Ce);return Ce===Te&&typeof Ce=="string"&&(Te=(0,_.getStyleValue)(ae,he,`${re}${Ce==="default"?"":(0,m.default)(Ce)}`,Ce)),Oe===!1?Te:{[Oe]:Te}};return(0,A.handleBreakpoints)(Pe,le,we)}function oe(re){var le;let{sx:ce,theme:ie={}}=re||{};if(!ce)return null;let Pe=(le=ie.unstable_sxConfig)!=null?le:z.default;function Ae(Oe){let Se=Oe;if(typeof Oe=="function")Se=Oe(ie);else if(typeof Oe!="object")return Oe;if(!Se)return null;let he=(0,A.createEmptyBreakpointObject)(ie.breakpoints),je=Object.keys(he),ae=he;return Object.keys(Se).forEach(we=>{let Ce=V(Se[we],ie);if(Ce!=null)if(typeof Ce=="object")if(Pe[we])ae=(0,w.default)(ae,te(we,Ce,ie,Pe));else{let Te=(0,A.handleBreakpoints)({theme:ie},Ce,We=>({[we]:We}));N(Te,Ce)?ae[we]=oe({sx:Ce,theme:ie}):ae=(0,w.default)(ae,Te)}else ae=(0,w.default)(ae,te(we,Ce,ie,Pe))}),(0,A.removeUnusedBreakpoints)(je,ae)}return Array.isArray(ce)?ce.map(Ae):Ae(ce)}return oe}var X=H();X.filterProps=["sx"];var Q=s.default=X}),Cc=c((s,f)=>{function m(w,_){if(w==null)return{};var A={},z=Object.keys(w),N,V;for(V=0;V=0)&&(A[N]=w[N]);return A}f.exports=m,f.exports.__esModule=!0,f.exports.default=f.exports}),Eg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=V;var m=f(Pc()),w=f(Cc()),_=mi(),A=f(z0()),z=["sx"],N=H=>{var X,Q;let te={systemProps:{},otherProps:{}},oe=(X=H==null||(Q=H.theme)==null?void 0:Q.unstable_sxConfig)!=null?X:A.default;return Object.keys(H).forEach(re=>{oe[re]?te.systemProps[re]=H[re]:te.otherProps[re]=H[re]}),te};function V(H){let{sx:X}=H,Q=(0,w.default)(H,z),{systemProps:te,otherProps:oe}=N(Q),re;return Array.isArray(X)?re=[te,...X]:typeof X=="function"?re=(...le)=>{let ce=X(...le);return(0,_.isPlainObject)(ce)?(0,m.default)({},te,ce):te}:re=(0,m.default)({},te,X),(0,m.default)({},oe,{sx:re})}}),Pg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(s,"extendSxProp",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_createStyleFunctionSx",{enumerable:!0,get:function(){return m.unstable_createStyleFunctionSx}}),Object.defineProperty(s,"unstable_defaultSxConfig",{enumerable:!0,get:function(){return _.default}});var m=z(D0()),w=f(Eg()),_=f(z0());function A(N){if(typeof WeakMap!="function")return null;var V=new WeakMap,H=new WeakMap;return(A=function(X){return X?H:V})(N)}function z(N,V){if(!V&&N&&N.__esModule)return N;if(N===null||typeof N!="object"&&typeof N!="function")return{default:N};var H=A(V);if(H&&H.has(N))return H.get(N);var X={__proto__:null},Q=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var te in N)if(te!=="default"&&Object.prototype.hasOwnProperty.call(N,te)){var oe=Q?Object.getOwnPropertyDescriptor(N,te):null;oe&&(oe.get||oe.set)?Object.defineProperty(X,te,oe):X[te]=N[te]}return X.default=N,H&&H.set(N,X),X}}),w9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.breakpointKeys=void 0,s.default=N;var m=f(Cc()),w=f(Pc()),_=["values","unit","step"],A=s.breakpointKeys=["xs","sm","md","lg","xl"],z=V=>{let H=Object.keys(V).map(X=>({key:X,val:V[X]}))||[];return H.sort((X,Q)=>X.val-Q.val),H.reduce((X,Q)=>(0,w.default)({},X,{[Q.key]:Q.val}),{})};function N(V){let{values:H={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:X="px",step:Q=5}=V,te=(0,m.default)(V,_),oe=z(H),re=Object.keys(oe);function le(Oe){return`@media (min-width:${typeof H[Oe]=="number"?H[Oe]:Oe}${X})`}function ce(Oe){return`@media (max-width:${(typeof H[Oe]=="number"?H[Oe]:Oe)-Q/100}${X})`}function ie(Oe,Se){let he=re.indexOf(Se);return`@media (min-width:${typeof H[Oe]=="number"?H[Oe]:Oe}${X}) and (max-width:${(he!==-1&&typeof H[re[he]]=="number"?H[re[he]]:Se)-Q/100}${X})`}function Pe(Oe){return re.indexOf(Oe)+1{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var f={borderRadius:4},m=s.default=f}),hM=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=m;var f=T0();function m(w=8){if(w.mui)return w;let _=(0,f.createUnarySpacing)({spacing:w}),A=(...z)=>(z.length===0?[1]:z).map(N=>{let V=_(N);return typeof V=="number"?`${V}px`:V}).join(" ");return A.mui=!0,A}}),O9=c(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=f;function f(m,w){let _=this;return _.vars&&typeof _.getColorSchemeSelector=="function"?{[_.getColorSchemeSelector(m).replace(/(\[[^\]]+\])/,"*:where($1)")]:w}:_.palette.mode===m?w:{}}}),gM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var m=f(Pc()),w=f(Cc()),_=f(mi()),A=f(w9()),z=f(mM()),N=f(hM()),V=f(D0()),H=f(z0()),X=f(O9()),Q=["breakpoints","palette","spacing","shape"];function te(re={},...le){let{breakpoints:ce={},palette:ie={},spacing:Pe,shape:Ae={}}=re,Oe=(0,w.default)(re,Q),Se=(0,A.default)(ce),he=(0,N.default)(Pe),je=(0,_.default)({breakpoints:Se,direction:"ltr",components:{},palette:(0,m.default)({mode:"light"},ie),spacing:he,shape:(0,m.default)({},z.default,Ae)},Oe);return je.applyStyles=X.default,je=le.reduce((ae,we)=>(0,_.default)(ae,we),je),je.unstable_sxConfig=(0,m.default)({},H.default,Oe?.unstable_sxConfig),je.unstable_sx=function(ae){return(0,V.default)({sx:ae,theme:this})},je}var oe=s.default=te}),x9=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(s,"private_createBreakpoints",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_applyStyles",{enumerable:!0,get:function(){return _.default}});var m=f(gM()),w=f(w9()),_=f(O9())}),kg=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.alpha=le,s.blend=je,s.colorChannel=void 0,s.darken=ie,s.decomposeColor=N,s.emphasize=Se,s.getContrastRatio=re,s.getLuminance=oe,s.hexToRgb=A,s.hslToRgb=te,s.lighten=Ae,s.private_safeAlpha=ce,s.private_safeColorChannel=void 0,s.private_safeDarken=Pe,s.private_safeEmphasize=he,s.private_safeLighten=Oe,s.recomposeColor=X,s.rgbToHex=Q;var m=f(Xi()),w=f(pM());function _(ae,we=0,Ce=1){return(0,w.default)(ae,we,Ce)}function A(ae){ae=ae.slice(1);let we=new RegExp(`.{1,${ae.length>=6?2:1}}`,"g"),Ce=ae.match(we);return Ce&&Ce[0].length===1&&(Ce=Ce.map(Te=>Te+Te)),Ce?`rgb${Ce.length===4?"a":""}(${Ce.map((Te,We)=>We<3?parseInt(Te,16):Math.round(parseInt(Te,16)/255*1e3)/1e3).join(", ")})`:""}function z(ae){let we=ae.toString(16);return we.length===1?`0${we}`:we}function N(ae){if(ae.type)return ae;if(ae.charAt(0)==="#")return N(A(ae));let we=ae.indexOf("("),Ce=ae.substring(0,we);if(["rgb","rgba","hsl","hsla","color"].indexOf(Ce)===-1)throw new Error((0,m.default)(9,ae));let Te=ae.substring(we+1,ae.length-1),We;if(Ce==="color"){if(Te=Te.split(" "),We=Te.shift(),Te.length===4&&Te[3].charAt(0)==="/"&&(Te[3]=Te[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(We)===-1)throw new Error((0,m.default)(10,We))}else Te=Te.split(",");return Te=Te.map($e=>parseFloat($e)),{type:Ce,values:Te,colorSpace:We}}var V=ae=>{let we=N(ae);return we.values.slice(0,3).map((Ce,Te)=>we.type.indexOf("hsl")!==-1&&Te!==0?`${Ce}%`:Ce).join(" ")};s.colorChannel=V;var H=(ae,we)=>{try{return V(ae)}catch{return ae}};s.private_safeColorChannel=H;function X(ae){let{type:we,colorSpace:Ce}=ae,{values:Te}=ae;return we.indexOf("rgb")!==-1?Te=Te.map((We,$e)=>$e<3?parseInt(We,10):We):we.indexOf("hsl")!==-1&&(Te[1]=`${Te[1]}%`,Te[2]=`${Te[2]}%`),we.indexOf("color")!==-1?Te=`${Ce} ${Te.join(" ")}`:Te=`${Te.join(", ")}`,`${we}(${Te})`}function Q(ae){if(ae.indexOf("#")===0)return ae;let{values:we}=N(ae);return`#${we.map((Ce,Te)=>z(Te===3?Math.round(255*Ce):Ce)).join("")}`}function te(ae){ae=N(ae);let{values:we}=ae,Ce=we[0],Te=we[1]/100,We=we[2]/100,$e=Te*Math.min(We,1-We),it=(Gt,Ee=(Gt+Ce/30)%12)=>We-$e*Math.max(Math.min(Ee-3,9-Ee,1),-1),Mt="rgb",Lt=[Math.round(it(0)*255),Math.round(it(8)*255),Math.round(it(4)*255)];return ae.type==="hsla"&&(Mt+="a",Lt.push(we[3])),X({type:Mt,values:Lt})}function oe(ae){ae=N(ae);let we=ae.type==="hsl"||ae.type==="hsla"?N(te(ae)).values:ae.values;return we=we.map(Ce=>(ae.type!=="color"&&(Ce/=255),Ce<=.03928?Ce/12.92:((Ce+.055)/1.055)**2.4)),Number((.2126*we[0]+.7152*we[1]+.0722*we[2]).toFixed(3))}function re(ae,we){let Ce=oe(ae),Te=oe(we);return(Math.max(Ce,Te)+.05)/(Math.min(Ce,Te)+.05)}function le(ae,we){return ae=N(ae),we=_(we),(ae.type==="rgb"||ae.type==="hsl")&&(ae.type+="a"),ae.type==="color"?ae.values[3]=`/${we}`:ae.values[3]=we,X(ae)}function ce(ae,we,Ce){try{return le(ae,we)}catch{return ae}}function ie(ae,we){if(ae=N(ae),we=_(we),ae.type.indexOf("hsl")!==-1)ae.values[2]*=1-we;else if(ae.type.indexOf("rgb")!==-1||ae.type.indexOf("color")!==-1)for(let Ce=0;Ce<3;Ce+=1)ae.values[Ce]*=1-we;return X(ae)}function Pe(ae,we,Ce){try{return ie(ae,we)}catch{return ae}}function Ae(ae,we){if(ae=N(ae),we=_(we),ae.type.indexOf("hsl")!==-1)ae.values[2]+=(100-ae.values[2])*we;else if(ae.type.indexOf("rgb")!==-1)for(let Ce=0;Ce<3;Ce+=1)ae.values[Ce]+=(255-ae.values[Ce])*we;else if(ae.type.indexOf("color")!==-1)for(let Ce=0;Ce<3;Ce+=1)ae.values[Ce]+=(1-ae.values[Ce])*we;return X(ae)}function Oe(ae,we,Ce){try{return Ae(ae,we)}catch{return ae}}function Se(ae,we=.15){return oe(ae)>.5?ie(ae,we):Ae(ae,we)}function he(ae,we,Ce){try{return he(ae,we)}catch{return ae}}function je(ae,we,Ce,Te=1){let We=(Lt,Gt)=>Math.round((Lt**(1/Te)*(1-Ce)+Gt**(1/Te)*Ce)**Te),$e=N(ae),it=N(we),Mt=[We($e.values[0],it.values[0]),We($e.values[1],it.values[1]),We($e.values[2],it.values[2])];return X({type:"rgb",values:Mt})}}),vM=c(s=>{"use strict";var f=Hr();Object.defineProperty(s,"__esModule",{value:!0}),s.default=je,s.shouldForwardProp=ie,s.systemDefaultTheme=void 0;var m=f(Pc()),w=f(Cc()),_=re(C0()),A=mi(),z=f(Vr()),N=f(cM()),V=f(x9()),H=f(Pg()),X=["ownerState"],Q=["variants"],te=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function oe(ae){if(typeof WeakMap!="function")return null;var we=new WeakMap,Ce=new WeakMap;return(oe=function(Te){return Te?Ce:we})(ae)}function re(ae,we){if(!we&&ae&&ae.__esModule)return ae;if(ae===null||typeof ae!="object"&&typeof ae!="function")return{default:ae};var Ce=oe(we);if(Ce&&Ce.has(ae))return Ce.get(ae);var Te={__proto__:null},We=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var $e in ae)if($e!=="default"&&Object.prototype.hasOwnProperty.call(ae,$e)){var it=We?Object.getOwnPropertyDescriptor(ae,$e):null;it&&(it.get||it.set)?Object.defineProperty(Te,$e,it):Te[$e]=ae[$e]}return Te.default=ae,Ce&&Ce.set(ae,Te),Te}function le(ae){return Object.keys(ae).length===0}function ce(ae){return typeof ae=="string"&&ae.charCodeAt(0)>96}function ie(ae){return ae!=="ownerState"&&ae!=="theme"&&ae!=="sx"&&ae!=="as"}var Pe=s.systemDefaultTheme=(0,V.default)(),Ae=ae=>ae&&ae.charAt(0).toLowerCase()+ae.slice(1);function Oe({defaultTheme:ae,theme:we,themeId:Ce}){return le(we)?ae:we[Ce]||we}function Se(ae){return ae?(we,Ce)=>Ce[ae]:null}function he(ae,we){let{ownerState:Ce}=we,Te=(0,w.default)(we,X),We=typeof ae=="function"?ae((0,m.default)({ownerState:Ce},Te)):ae;if(Array.isArray(We))return We.flatMap($e=>he($e,(0,m.default)({ownerState:Ce},Te)));if(We&&typeof We=="object"&&Array.isArray(We.variants)){let{variants:$e=[]}=We,it=(0,w.default)(We,Q);return $e.forEach(Mt=>{let Lt=!0;typeof Mt.props=="function"?Lt=Mt.props((0,m.default)({ownerState:Ce},Te,Ce)):Object.keys(Mt.props).forEach(Gt=>{Ce?.[Gt]!==Mt.props[Gt]&&Te[Gt]!==Mt.props[Gt]&&(Lt=!1)}),Lt&&(Array.isArray(it)||(it=[it]),it.push(typeof Mt.style=="function"?Mt.style((0,m.default)({ownerState:Ce},Te,Ce)):Mt.style))}),it}return We}function je(ae={}){let{themeId:we,defaultTheme:Ce=Pe,rootShouldForwardProp:Te=ie,slotShouldForwardProp:We=ie}=ae,$e=it=>(0,H.default)((0,m.default)({},it,{theme:Oe((0,m.default)({},it,{defaultTheme:Ce,themeId:we}))}));return $e.__mui_systemSx=!0,(it,Mt={})=>{(0,_.internal_processStyles)(it,bn=>bn.filter(hi=>!(hi!=null&&hi.__mui_systemSx)));let{name:Lt,slot:Gt,skipVariantsResolver:Ee,skipSx:Ye,overridesResolver:Yt=Se(Ae(Gt))}=Mt,Je=(0,w.default)(Mt,te),ct=Ee!==void 0?Ee:Gt&&Gt!=="Root"&&Gt!=="root"||!1,dt=Ye||!1,Ot,Jt=ie;Gt==="Root"||Gt==="root"?Jt=Te:Gt?Jt=We:ce(it)&&(Jt=void 0);let wr=(0,_.default)(it,(0,m.default)({shouldForwardProp:Jt,label:Ot},Je)),un=bn=>typeof bn=="function"&&bn.__emotion_real!==bn||(0,A.isPlainObject)(bn)?hi=>he(bn,(0,m.default)({},hi,{theme:Oe({theme:hi.theme,defaultTheme:Ce,themeId:we})})):bn,zn=(bn,...hi)=>{let Jf=un(bn),Qi=hi?hi.map(un):[];Lt&&Yt&&Qi.push(ja=>{let Ko=Oe((0,m.default)({},ja,{defaultTheme:Ce,themeId:we}));if(!Ko.components||!Ko.components[Lt]||!Ko.components[Lt].styleOverrides)return null;let Cs=Ko.components[Lt].styleOverrides,Ul={};return Object.entries(Cs).forEach(([Au,qc])=>{Ul[Au]=he(qc,(0,m.default)({},ja,{theme:Ko}))}),Yt(ja,Ul)}),Lt&&!ct&&Qi.push(ja=>{var Ko;let Cs=Oe((0,m.default)({},ja,{defaultTheme:Ce,themeId:we})),Ul=Cs==null||(Ko=Cs.components)==null||(Ko=Ko[Lt])==null?void 0:Ko.variants;return he({variants:Ul},(0,m.default)({},ja,{theme:Cs}))}),dt||Qi.push($e);let Ia=Qi.length-hi.length;if(Array.isArray(bn)&&Ia>0){let ja=new Array(Ia).fill("");Jf=[...bn,...ja],Jf.raw=[...bn.raw,...ja]}let Gf=wr(Jf,...Qi);return it.muiName&&(Gf.muiName=it.muiName),Gf};return wr.withConfig&&(zn.withConfig=wr.withConfig),zn}}}),L0=O(k()),_9=O(D()),yM=O(G()),bM=O(K()),Oa=O(D());function Iu(s){s()}var Cg=Iu,wM=s=>Cg=s,S9=()=>Cg,N0=O(k()),OM=O(k()),F0=O(k()),Ag=Symbol.for("react-redux-context"),I9=typeof globalThis<"u"?globalThis:{};function xM(){var s;if(!F0.createContext)return{};let f=(s=I9[Ag])!=null?s:I9[Ag]=new Map,m=f.get(F0.createContext);return m||(m=F0.createContext(null),f.set(F0.createContext,m)),m}var Ss=xM();function Mg(s=Ss){return function(){return(0,OM.useContext)(s)}}var j9=Mg(),E9=()=>{throw new Error("uSES not initialized!")},P9=E9,_M=s=>{P9=s},SM=(s,f)=>s===f;function IM(s=Ss){let f=s===Ss?j9:Mg(s);return function(m,w={}){let{equalityFn:_=SM,stabilityCheck:A=void 0,noopCheck:z=void 0}=typeof w=="function"?{equalityFn:w}:w,{store:N,subscription:V,getServerState:H,stabilityCheck:X,noopCheck:Q}=f(),te=(0,N0.useRef)(!0),oe=(0,N0.useCallback)({[m.name](le){let ce=m(le);if(!1){if((v==="always"||v==="once"&&te.current)&&!_(ce,b))try{}catch(ie){}if((x==="always"||x==="once"&&te.current)&&ce===le)try{}catch(ie){}}return ce}}[m.name],[m,X,A]),re=P9(V.addNestedSub,N.getState,H||N.getState,oe,_);return(0,N0.useDebugValue)(re),re}}var jM=IM();ne();function vn(s,f){if(s==null)return{};var m={},w=Object.keys(s),_,A;for(A=0;A=0)&&(m[_]=s[_]);return m}var zQ=O(de()),DQ=O(k()),Tg=O(ye());ne();function EM(){let s=S9(),f=null,m=null;return{clear(){f=null,m=null},notify(){s(()=>{let w=f;for(;w;)w.callback(),w=w.next})},get(){let w=[],_=f;for(;_;)w.push(_),_=_.next;return w},subscribe(w){let _=!0,A=m={callback:w,next:null,prev:m};return A.prev?A.prev.next=A:f=A,function(){!_||f===null||(_=!1,A.next?A.next.prev=A.prev:m=A.prev,A.prev?A.prev.next=A.next:f=A.next)}}}}var k9={notify(){},get:()=>[]};function PM(s,f){let m,w=k9,_=0,A=!1;function z(le){X();let ce=w.subscribe(le),ie=!1;return()=>{ie||(ie=!0,ce(),Q())}}function N(){w.notify()}function V(){re.onStateChange&&re.onStateChange()}function H(){return A}function X(){_++,m||(m=f?f.addNestedSub(V):s.subscribe(V),w=EM())}function Q(){_--,m&&_===0&&(m(),m=void 0,w.clear(),w=k9)}function te(){A||(A=!0,X())}function oe(){A&&(A=!1,Q())}let re={addNestedSub:z,notifyNestedSubs:N,handleChangeWrapper:V,isSubscribed:H,trySubscribe:te,tryUnsubscribe:oe,getListeners:()=>w};return re}var C9=O(k()),kM=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",CM=kM?C9.useLayoutEffect:C9.useEffect,AM=E9,MM=s=>{AM=s},W0=O(k());function A9({store:s,context:f,children:m,serverState:w,stabilityCheck:_="once",noopCheck:A="once"}){let z=W0.useMemo(()=>{let V=PM(s);return{store:s,subscription:V,getServerState:w?()=>w:void 0,stabilityCheck:_,noopCheck:A}},[s,w,_,A]),N=W0.useMemo(()=>s.getState(),[s]);return CM(()=>{let{subscription:V}=z;return V.onStateChange=V.notifyNestedSubs,V.trySubscribe(),N!==s.getState()&&V.notifyNestedSubs(),()=>{V.tryUnsubscribe(),V.onStateChange=void 0}},[z,N]),W0.createElement((f||Ss).Provider,{value:z},m)}var M9=A9;function Lf(s=Ss){let f=s===Ss?j9:Mg(s);return function(){let{store:m}=f();return m}}var Ac=Lf();function B0(s=Ss){let f=s===Ss?Ac:Lf(s);return function(){return f().dispatch}}var T9=B0();_M(bM.useSyncExternalStoreWithSelector),MM(yM.useSyncExternalStore),wM(Oa.unstable_batchedUpdates);var ju=()=>T9(),Ro=jM;function Ti(s){for(var f=arguments.length,m=Array(f>1?f-1:0),w=1;w3?f.i-4:f.i:Array.isArray(s)?1:Rg(s)?2:zg(s)?3:0}function Tc(s,f){return Mc(s)===2?s.has(f):Object.prototype.hasOwnProperty.call(s,f)}function TM(s,f){return Mc(s)===2?s.get(f):s[f]}function R9(s,f,m){var w=Mc(s);w===2?s.set(f,m):w===3?s.add(m):s[f]=m}function z9(s,f){return s===f?s!==0||1/s==1/f:s!=s&&f!=f}function Rg(s){return LM&&s instanceof Map}function zg(s){return NM&&s instanceof Set}function js(s){return s.o||s.t}function Dg(s){if(Array.isArray(s))return Array.prototype.slice.call(s);var f=et(s);delete f[yn];for(var m=Dc(f),w=0;w1&&(s.set=s.add=s.clear=s.delete=RM),Object.freeze(s),f&&Eu(s,function(m,w){return Lg(w,!0)},!0)),s}function RM(){Ti(2)}function Ng(s){return s==null||typeof s!="object"||Object.isFrozen(s)}function Xa(s){var f=Jg[s];return f||Ti(18,s),f}function zM(s,f){Jg[s]||(Jg[s]=f)}function Fg(){return Nf}function Wg(s,f){f&&(Xa("Patches"),s.u=[],s.s=[],s.v=f)}function H0(s){Bg(s),s.p.forEach(Hg),s.p=null}function Bg(s){s===Nf&&(Nf=s.l)}function D9(s){return Nf={p:[],l:Nf,h:s,m:!0,_:0}}function Hg(s){var f=s[yn];f.i===0||f.i===1?f.j():f.g=!0}function Vg(s,f){f._=f.p.length;var m=f.p[0],w=s!==void 0&&s!==m;return f.h.O||Xa("ES5").S(f,s,w),w?(m[yn].P&&(H0(f),Ti(4)),Ll(s)&&(s=V0(f,s),f.l||Rc(f,s)),f.u&&Xa("Patches").M(m[yn].t,s,f.u,f.s)):s=V0(f,m,[]),H0(f),f.u&&f.v(f.u,f.s),s!==Nl?s:void 0}function V0(s,f,m){if(Ng(f))return f;var w=f[yn];if(!w)return Eu(f,function(N,V){return L9(s,w,f,N,V,m)},!0),f;if(w.A!==s)return f;if(!w.P)return Rc(s,w.t,!0),w.t;if(!w.I){w.I=!0,w.A._--;var _=w.i===4||w.i===5?w.o=Dg(w.k):w.o,A=_,z=!1;w.i===3&&(A=new Set(_),_.clear(),z=!0),Eu(A,function(N,V){return L9(s,w,_,N,V,m,z)}),Rc(s,_,!1),m&&s.u&&Xa("Patches").N(w,m,s.u,s.s)}return w.o}function L9(s,f,m,w,_,A,z){if(Is(_)){var N=V0(s,_,A&&f&&f.i!==3&&!Tc(f.R,w)?A.concat(w):void 0);if(R9(m,w,N),!Is(N))return;s.m=!1}else z&&m.add(_);if(Ll(_)&&!Ng(_)){if(!s.h.D&&s._<1)return;V0(s,_),f&&f.A.l||Rc(s,_)}}function Rc(s,f,m){m===void 0&&(m=!1),!s.l&&s.h.D&&s.m&&Lg(f,m)}function zc(s,f){var m=s[yn];return(m?js(m):s)[f]}function N9(s,f){if(f in s)for(var m=Object.getPrototypeOf(s);m;){var w=Object.getOwnPropertyDescriptor(m,f);if(w)return w;m=Object.getPrototypeOf(m)}}function Es(s){s.P||(s.P=!0,s.l&&Es(s.l))}function qg(s){s.o||(s.o=Dg(s.t))}function Ug(s,f,m){var w=Rg(f)?Xa("MapSet").F(f,m):zg(f)?Xa("MapSet").T(f,m):s.O?function(_,A){var z=Array.isArray(_),N={i:z?1:0,A:A?A.A:Fg(),P:!1,I:!1,R:{},l:A,t:_,k:null,o:null,j:null,C:!1},V=N,H=Ff;z&&(V=[N],H=Lc);var X=Proxy.revocable(V,H),Q=X.revoke,te=X.proxy;return N.k=te,N.j=Q,te}(f,m):Xa("ES5").J(f,m);return(m?m.A:Fg()).p.push(w),w}function DM(s){return Is(s)||Ti(22,s),function f(m){if(!Ll(m))return m;var w,_=m[yn],A=Mc(m);if(_){if(!_.P&&(_.i<4||!Xa("ES5").K(_)))return _.t;_.I=!0,w=F9(m,A),_.I=!1}else w=F9(m,A);return Eu(w,function(z,N){_&&TM(_.t,z)===N||R9(w,z,f(N))}),A===3?new Set(w):w}(s)}function F9(s,f){switch(f){case 2:return new Map(s);case 3:return Array.from(s)}return Dg(s)}function W9(){function s(z,N){var V=A[z];return V?V.enumerable=N:A[z]=V={configurable:!0,enumerable:N,get:function(){var H=this[yn];return Ff.get(H,z)},set:function(H){var X=this[yn];Ff.set(X,z,H)}},V}function f(z){for(var N=z.length-1;N>=0;N--){var V=z[N][yn];if(!V.P)switch(V.i){case 5:w(V)&&Es(V);break;case 4:m(V)&&Es(V)}}}function m(z){for(var N=z.t,V=z.k,H=Dc(V),X=H.length-1;X>=0;X--){var Q=H[X];if(Q!==yn){var te=N[Q];if(te===void 0&&!Tc(N,Q))return!0;var oe=V[Q],re=oe&&oe[yn];if(re?re.t!==te:!z9(oe,te))return!0}}var le=!!N[yn];return H.length!==Dc(N).length+(le?0:1)}function w(z){var N=z.k;if(N.length!==z.t.length)return!0;var V=Object.getOwnPropertyDescriptor(N,N.length-1);if(V&&!V.get)return!0;for(var H=0;H1?ie-1:0),Ae=1;Ae1?X-1:0),te=1;te=0;_--){var A=w[_];if(A.path.length===0&&A.op==="replace"){m=A.value;break}}_>-1&&(w=w.slice(_+1));var z=Xa("Patches").$;return Is(m)?z(m,w):this.produce(m,function(N){return z(N,w)})},s}(),zo=new Lr,V9=zo.produce,q9=zo.produceWithPatches.bind(zo),LQ=zo.setAutoFreeze.bind(zo),NQ=zo.setUseProxies.bind(zo),FQ=zo.applyPatches.bind(zo),WQ=zo.createDraft.bind(zo),BQ=zo.finishDraft.bind(zo),Ka=V9;function Wf(s){"@babel/helpers - typeof";return Wf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(f){return typeof f}:function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},Wf(s)}function U9(s,f){if(Wf(s)!="object"||!s)return s;var m=s[Symbol.toPrimitive];if(m!==void 0){var w=m.call(s,f||"default");if(Wf(w)!="object")return w;throw new TypeError("@@toPrimitive must return a primitive value.")}return(f==="string"?String:Number)(s)}function WM(s){var f=U9(s,"string");return Wf(f)=="symbol"?f:String(f)}function BM(s,f,m){return f=WM(f),f in s?Object.defineProperty(s,f,{value:m,enumerable:!0,configurable:!0,writable:!0}):s[f]=m,s}function Gg(s,f){var m=Object.keys(s);if(Object.getOwnPropertySymbols){var w=Object.getOwnPropertySymbols(s);f&&(w=w.filter(function(_){return Object.getOwnPropertyDescriptor(s,_).enumerable})),m.push.apply(m,w)}return m}function $9(s){for(var f=1;f"u"&&(m=f,f=void 0),typeof m<"u"){if(typeof m!="function")throw new Error(_o(1));return m(G9)(s,f)}if(typeof s!="function")throw new Error(_o(2));var _=s,A=f,z=[],N=z,V=!1;function H(){N===z&&(N=z.slice())}function X(){if(V)throw new Error(_o(3));return A}function Q(le){if(typeof le!="function")throw new Error(_o(4));if(V)throw new Error(_o(5));var ce=!0;return H(),N.push(le),function(){if(ce){if(V)throw new Error(_o(6));ce=!1,H();var ie=N.indexOf(le);N.splice(ie,1),z=null}}}function te(le){if(!J9(le))throw new Error(_o(7));if(typeof le.type>"u")throw new Error(_o(8));if(V)throw new Error(_o(9));try{V=!0,A=_(A,le)}finally{V=!1}for(var ce=z=N,ie=0;ie"u")throw new Error(_o(12));if(typeof m(void 0,{type:Ki.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(_o(13))})}function VM(s){for(var f=Object.keys(s),m={},w=0;w"u"){var Pe=H&&H.type;throw new Error(_o(14))}te[re]=ie,Q=Q||ie!==ce}return Q=Q||A.length!==Object.keys(V).length,Q?te:V}}function $0(){for(var s=arguments.length,f=new Array(s),m=0;m0&&A[A.length-1])&&(H[0]===6||H[0]===2)){m=0;continue}if(H[0]===3&&(!A||H[1]>A[0]&&H[1]1){var m=s.shift();s[0]=m+s[0]}s[0].match(/^file:\/\/\//)?s[0]=s[0].replace(/^([^/:]+):\/*/,"$1:///"):s[0]=s[0].replace(/^([^/:]+):\/*/,"$1://");for(var w=0;w0&&(_=_.replace(/^[\/]+/,"")),w0?"?":"")+z.join("&"),A}function tT(){var s;return typeof arguments[0]=="object"?s=arguments[0]:s=[].slice.call(arguments),y4e(s)}var rT={stats:void 0,bannerText:""},$Q=Qa("home_stats",async(s,{rejectWithValue:f})=>{try{return await Yg("api/v2/stats")}catch(m){return f(m.message)}}),JQ=Qa("home_banner",async(s,{rejectWithValue:f})=>{try{return(await fetch(tT("/","banner.txt"))).text()}catch(m){return f(m.message)}}),b4e=De({name:"home",initialState:rT,reducers:{},extraReducers:s=>{s.addCase($Q.fulfilled,(f,m)=>{f.stats=m.payload}),s.addCase($Q.rejected,f=>{f.stats=rT.stats}),s.addCase(JQ.fulfilled,(f,m)=>{f.bannerText=m.payload}),s.addCase(JQ.rejected,f=>{f.bannerText=rT.bannerText})}}),w4e=b4e.reducer,DRt=O(k()),Bn=class PQ{constructor(f,m){this.value=f,this.axioms=m}static fromJson(f){return f?(Array.isArray(f)||(f=[f]),f.map(m=>typeof m=="object"&&Array.isArray(m.type)&&m.type.indexOf("reification")!==-1?new PQ(m.value,m.axioms):new PQ(m,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let f={};for(let m of this.axioms)for(let w of Object.keys(m)){let _=m[w],A=f[w];A!==void 0?A.push(_):f[w]=[_]}return f}},O4e=class kQ{constructor(f){f?this.linkedEntities={...f}:this.linkedEntities={}}mergeWith(f){return f?new kQ({...this.linkedEntities,linkedEntities:f}):new kQ({...this.linkedEntities})}getLabelForIri(f){let m=this.linkedEntities[f];if(m){let w=Bn.fromJson(m.label);if(w&&w.length>0)return w[0].value}}get(f){return this.linkedEntities[f]}},GQ=class{constructor(s){this.properties=s}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let s=this.properties.type;for(let f of s)if(["ontology","class","property","individual"].indexOf(f)!==-1)return f;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return Io(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let s=Bn.fromJson(this.properties.label);return s&&s.length>0?s.map(f=>f.value):[this.getIri()]}getDescription(){let s=Bn.fromJson(this.properties.definition);return s&&s.length>0?s.map(f=>f.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(s){let f=this.properties.linkedEntities;return f&&Bn.fromJson(f[s]?.label)[0]?.value||s}getAnnotationById(s){return Bn.fromJson(Io(this.properties[s]))}getLinkedEntities(){return new O4e(this.properties.linkedEntities||{})}},t_=class extends GQ{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Bn.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Bn.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Bn.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Bn.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return Io(this.properties.ancestor)}getHierarchicalAncestorIris(){return Io(this.properties.hierarchicalAncestor)}getSynonyms(){return Bn.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getDefinedBy(){return this.properties.definedBy||[]}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Bn.fromJson(this.properties["http://xmlns.com/foaf/0.1/depicted_by"])}getAnnotationPredicates(){let s=Io(this.properties.definitionProperty),f=Io(this.properties.synonymProperty),m=Io(this.properties.hierarchicalProperty),w=new Set;for(let _ of Object.keys(this.properties)){if(_.indexOf("://")===-1||_.startsWith("negativePropertyAssertion+")||_==="http://xmlns.com/foaf/0.1/depicted_by")continue;let A=this.getLinkedEntities().get(_);A!=null&&A.type.indexOf("objectProperty")!==-1||A!=null&&A.type.indexOf("dataProperty")!==-1||s.indexOf(_)!==-1||f.indexOf(_)!==-1||m.indexOf(_)!==-1||(_.startsWith("http://www.w3.org/2000/01/rdf-schema#")||_.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||_.startsWith("http://www.w3.org/2002/07/owl#"))&&_!=="http://www.w3.org/2000/01/rdf-schema#comment"&&_!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&_!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||_!=="http://www.geneontology.org/formats/oboInOwl#id"&&w.add(_)}return Array.from(w)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(s){let f=Bn.fromJson(this.properties.hierarchicalParent);for(let m of f)if(m.value===s)return m.getMetadata()}},x4e=class extends t_{getParents(){return Bn.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Bn.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Bn.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return Io(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return Io(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}},_4e=class extends t_{getParents(){return Bn.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Bn.fromJson([])}getDifferentFrom(){return Io(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return Io(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let s=this.getRdfTypes();return!s||!Array.isArray(s)?[]:s.filter(f=>f!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof f!="string"||!f.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}},S4e=class extends t_{getParents(){return Bn.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Bn.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Bn.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return Io(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return Io(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return Io(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return Io(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Bn.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};function Io(s){return Array.isArray(s)?s:s?[s]:[]}function I4e(){return(Math.random()*Math.pow(2,54)).toString(36)}function Wl(s){let f=s.type||[];if(f.indexOf("class")!==-1)return new x4e(s);if(f.indexOf("property")!==-1)return new S4e(s);if(f.indexOf("individual")!==-1)return new _4e(s);throw new Error("Unknown entity type: "+JSON.stringify(s))}function XQ(s){let f=new URLSearchParams;return s.forEach((m,w)=>{let _=w.includes("_")?j4e(w):w;_==="oboId"&&(_="curie"),f.append(_,m)}),f}function j4e(s){return s.replace(/([-_][a-z])/gi,f=>f.toUpperCase().replace("-","").replace("_",""))}var KQ=class extends GQ{getOntologyId(){return this.properties.ontologyId}getName(){let s=Bn.fromJson(this.properties.label||this.properties.title||"");return s[0]&&s[0].value||this.getOntologyId()}getDescription(){let s=Bn.fromJson(this.properties.definition||this.properties.description||"");return s[0]&&s[0].value||""}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let s=this.properties["http://www.w3.org/2002/07/owl#versionIRI"];if(!s)return"";let f=s.match(/\d{4}-\d{2}-\d{2}/);if(f&&f.length>0)return f[0];{let m=s.match(/\/v[d.].*\//);return m?m[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let s=new Set;for(let f of Object.keys(this.properties))f.indexOf("://")!==-1&&f!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(f.startsWith("http://www.w3.org/2000/01/rdf-schema#")||f.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||f.startsWith("http://www.w3.org/2002/07/owl#")||s.add(f));return Array.from(s)}getPreferredRoots(){return Io(this.properties.hasPreferredRoot)}getLanguages(){return Io(this.properties.language)}getImportsFrom(){return Io(this.properties.importsFrom)}getExportsTo(){return Io(this.properties.exportsTo)}},YQ=O(be());function E4e(s){let f=new YQ.default,m=new Map;for(let N of s)m.set(N.getIri(),N);for(let N of s)if(!nT(N.getIri()))for(let V of N.getParents()){let H=V.value,X=m.get(H);if(nT(H)||!(X instanceof t_))continue;var w,_;N.getType()==="individual"?(_="http://www.w3.org/1999/02/22-rdf-syntax-ns#type",w=null):N.getType()=="class"&&(w=V.getMetadata()&&V.getMetadata().parentRelationToChild&&V.getMetadata().parentRelationToChild[0],_=V.getMetadata()&&V.getMetadata().childRelationToParent&&V.getMetadata().childRelationToParent[0]);let Q={parent:X,child:N,parentRelationToChild:w,childRelationToParent:_};f.set(N.getIri(),Q)}var A=function(N,V){V.add(N);let H=f.get(N);if(H)for(let X of H)V.has(X.parent.getIri())?f.delete(N,X):A(X.parent.getIri(),new Set(V))};for(let N of s)A(N.getIri(),new Set);let z=new YQ.default;for(let N of Array.from(f.keys())){let V=f.get(N);for(let H of V)z.set(H.parent.getIri(),H)}return{rootEntities:s.filter(N=>nT(N.getIri())?!1:(f.get(N.getIri())||[]).length===0),parentToChildRelations:z}}function nT(s){return s==="http://www.w3.org/2002/07/owl#Thing"||s==="http://www.w3.org/2002/07/owl#TopObjectProperty"}function QQ(s,f,m){let{rootEntities:w,parentToChildRelations:_}=E4e(s);if(console.log("rootEntities"),console.dir(w),console.log("parentToChildRelations"),console.dir(_),f){let H=m.getPreferredRoots();H.length>0&&(w=H.map(X=>s.filter(Q=>Q.getIri()===X)[0]).filter(X=>!!X))}let A=[],z={},N=new Set;return{allNodes:A,rootNodes:w.map(H=>V(H,void 0,0,null,null)),nodeChildren:z,automaticallyExpandedNodes:N};function V(H,X,Q,te,oe){if(Q>100)throw new Error("probable cyclic tree (createTreeNode)");let re=_.get(H.getIri())||[],le={absoluteIdentity:X?X.absoluteIdentity+";"+H.getIri():H.getIri(),iri:H.getIri(),title:H.getName(),expandable:H.hasChildren(),entity:H,numDescendants:H.getNumHierarchicalDescendants()||H.getNumDescendants(),parentRelationToChild:te,childRelationToParent:oe};return A.push(le),z[le.absoluteIdentity]=re.map(ce=>V(ce.child,le,Q+1,ce.parentRelationToChild,ce.childRelationToParent)),H.hasChildren()&&re.length>0&&N.add(le.absoluteIdentity),le}}var xa={ontology:void 0,entity:void 0,nodesWithChildrenLoaded:[],nodeChildren:{},rootNodes:[],ontologies:[],totalOntologies:0,entities:[],totalEntities:0,loadingOntologies:!1,loadingEntities:!1,numPendingTreeRequests:0,loadingOntology:!1,loadingEntity:!1,classInstances:null,loadingClassInstances:!1,automaticallyExpandedNodes:[],manuallyExpandedNodes:[],preferredRoots:!1,displayObsolete:!1,displaySiblings:!1,displayCounts:!0,errorMessage:""},ZQ=Vn("ontologies_tree_reset_content"),eZ=Vn("ontologies_tree_reset_settings"),tZ=Vn("ontologies_preferred_enabled"),rZ=Vn("ontologies_preferred_disabled"),nZ=Vn("ontologies_node_open"),oZ=Vn("ontologies_node_close"),iZ=Vn("ontologies_show_obsolete"),aZ=Vn("ontologies_hide_obsolete"),lZ=Vn("ontologies_show_siblings"),sZ=Vn("ontologies_hide_siblings"),uZ=Vn("ontologies_show_counts"),cZ=Vn("ontologies_hide_counts"),r_=Qa("ontologies_ontology",async({ontologyId:s,lang:f,apiUrl:m},{rejectWithValue:w})=>{let _=`api/v2/ontologies/${s}`;try{let A=await Yg(_,{lang:f},m);return new KQ(A)}catch(A){return w(`Error accessing: ${_}; ${A.message}`)}}),n_=Qa("ontologies_entity_type",async({ontologyId:s,entityType:f,entityIri:m,searchParams:w},{rejectWithValue:_})=>{let A=XQ(w),z=encodeURIComponent(encodeURIComponent(m)),N="";try{let V=null;if(m)N=`api/v2/ontologies/${s}/${f}/${z}?${new URLSearchParams(A)}`,V=await Yg(N);else{N=`api/v2/ontologies/${s}/${f}?${new URLSearchParams(A)}`;let H=await Yi(N);if(H.elements.length===1&&H.totalElements===1)V=H.elements[0];else return _(`Error accessing: ${N}; Retrieved nondistinct entity: ${JSON.stringify(H)}`)}return Wl(V)}catch(V){return _(`Error accessing: ${N}; ${V.message}`)}}),o_=Qa("ontologies_entity",async({ontologyId:s,entityIri:f},{rejectWithValue:m})=>{let w=encodeURIComponent(encodeURIComponent(f)),_="";try{_=`api/v2/ontologies/${s}/entities/${w}`;let A=await Yg(_);return Wl(A)}catch(A){return m(`Error accessing: ${_}; ${A.message}`)}}),i_=Qa("ontologies_entity_class_instances",async({ontologyId:s,classIri:f,searchParams:m},{rejectWithValue:w})=>{let _="";try{if(f){let A=XQ(m),z=encodeURIComponent(encodeURIComponent(f));return _=`api/v2/ontologies/${s}/classes/${z}/instances?${new URLSearchParams(A)}`,(await Yi(_)).map(N=>Wl(N))}else return w(`Warning accessing: ${_}; Class IRI not provided`)}catch(A){return w(`Error accessing: ${_}; ${A.message}`)}}),oT=Qa("ontologies_ontologies",async({page:s,rowsPerPage:f,search:m},{rejectWithValue:w})=>{m.length>1&&!m.includes(" ")&&(m="*"+m+"*");let _=`api/v2/ontologies?page=${s}&size=${f}${m?"&search="+m:""}`;try{return(await Yi(_)).map(A=>new KQ(A))}catch(A){return w(`Error accessing: ${_}; ${A.message}`)}}),iT=Qa("ontologies_entities",async({ontologyId:s,entityType:f,page:m,rowsPerPage:w,search:_},{rejectWithValue:A})=>{let z=`api/v2/ontologies/${s}/${f}?page=${m}&size=${w}${_?"&search="+_:""}`;try{return(await Yi(z)).map(N=>Wl(N))}catch(N){return A(`Error accessing: ${z}; ${N.message}`)}}),a_=Qa("ontologies_ancestors",async({ontologyId:s,entityType:f,entityIri:m,lang:w,showObsoleteEnabled:_,apiUrl:A})=>{let z=encodeURIComponent(encodeURIComponent(m));var N;return f==="classes"?N=await Yi(`api/v2/ontologies/${s}/classes/${z}/hierarchicalAncestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,A):N=await Yi(`api/v2/ontologies/${s}/${f}/${z}/ancestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,A),N.elements.map(V=>Wl(V))}),l_=Qa("ontologies_roots",async({ontologyId:s,entityType:f,preferredRoots:m,lang:w,showObsoleteEnabled:_,apiUrl:A})=>{if(f==="individuals"){let[z,N]=await Promise.all([Yi(`api/v2/ontologies/${s}/classes?${new URLSearchParams({hasIndividuals:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,A),Yi(`api/v2/ontologies/${s}/individuals?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,A)]);return{entityType:f,rootTerms:null,classesWithIndividuals:z.elements.map(V=>Wl(V)),orphanedIndividuals:N.elements.map(V=>Wl(V))}}else if(f==="classes"&&m){let z=await Yi(`api/v2/ontologies/${s}/${f}?${new URLSearchParams({isPreferredRoot:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,A);return{entityType:f,rootTerms:z.elements.map(N=>Wl(N)),classesWithIndividuals:null,orphanedIndividuals:null}}else{let z=await Yi(`api/v2/ontologies/${s}/${f}?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,A);return{entityType:f,rootTerms:z.elements.map(N=>Wl(N)),classesWithIndividuals:null,orphanedIndividuals:null}}}),s_=Qa("ontologies_node_children",async({ontologyId:s,entityTypePlural:f,entityIri:m,absoluteIdentity:w,lang:_,apiUrl:A,includeObsoleteEntities:z})=>{let N=encodeURIComponent(encodeURIComponent(m));var V;return f==="classes"?V=await Yi(`api/v2/ontologies/${s}/classes/${N}/hierarchicalChildren?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:z})}`,void 0,A):f==="individuals"?V=await Yi(`api/v2/ontologies/${s}/classes/${N}/instances?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:z})}`,void 0,A):V=await Yi(`api/v2/ontologies/${s}/${f}/${N}/children?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:z})}`,void 0,A),{absoluteIdentity:w,children:V.elements.map(H=>Wl(H)).map(H=>{let X=H.getHierarchicalParentReificationAxioms(m);return{iri:H.getIri(),absoluteIdentity:w+";"+H.getIri(),title:H.getName(),expandable:H.hasChildren(),entity:H,numDescendants:H.getNumHierarchicalDescendants()||H.getNumDescendants(),parentRelationToChild:X&&X.parentRelationToChild?.[0]||null,childRelationToParent:X&&X.childRelationToParent?.[0]||null}})}}),P4e=De({name:"ontologies",initialState:xa,reducers:{},extraReducers:s=>{s.addCase(r_.fulfilled,(f,m)=>{f.ontology=m.payload,f.loadingOntology=!1}),s.addCase(r_.pending,f=>{f.loadingOntology=!0,f.errorMessage=xa.errorMessage}),s.addCase(r_.rejected,(f,m)=>{f.ontology=xa.ontology,f.loadingOntology=!1,f.errorMessage=m.payload}),s.addCase(n_.fulfilled,(f,m)=>{f.entity=m.payload,f.loadingEntity=!1}),s.addCase(n_.pending,f=>{f.loadingEntity=!0,f.errorMessage=xa.errorMessage}),s.addCase(n_.rejected,(f,m)=>{f.loadingEntity=!1,f.entity=xa.entity,f.errorMessage=m.payload}),s.addCase(o_.fulfilled,(f,m)=>{f.entity=m.payload,f.loadingEntity=!1}),s.addCase(o_.pending,f=>{f.loadingEntity=!0,f.errorMessage=xa.errorMessage}),s.addCase(o_.rejected,(f,m)=>{f.loadingEntity=!1,f.entity=xa.entity,f.errorMessage=m.payload}),s.addCase(i_.fulfilled,(f,m)=>{f.classInstances=m.payload,f.loadingClassInstances=!1}),s.addCase(i_.pending,f=>{f.loadingClassInstances=!0,f.errorMessage=xa.errorMessage}),s.addCase(i_.rejected,(f,m)=>{f.loadingClassInstances=!1,f.classInstances=xa.classInstances,f.errorMessage=m.payload}),s.addCase(a_.pending,f=>{++f.numPendingTreeRequests}),s.addCase(a_.fulfilled,(f,m)=>{let{rootNodes:w,nodeChildren:_,automaticallyExpandedNodes:A}=QQ([f.entity,...m.payload],f.preferredRoots,f.ontology);f.rootNodes=w,f.nodeChildren=_,f.automaticallyExpandedNodes=Array.from(new Set([...f.automaticallyExpandedNodes,...Array.from(A)])),--f.numPendingTreeRequests}),s.addCase(a_.rejected,f=>{--f.numPendingTreeRequests}),s.addCase(s_.pending,f=>{++f.numPendingTreeRequests}),s.addCase(s_.fulfilled,(f,m)=>{f.nodeChildren={...f.nodeChildren,[m.payload.absoluteIdentity]:m.payload.children},f.nodesWithChildrenLoaded.push(m.payload.absoluteIdentity),--f.numPendingTreeRequests}),s.addCase(s_.rejected,f=>{--f.numPendingTreeRequests}),s.addCase(l_.pending,f=>{++f.numPendingTreeRequests}),s.addCase(l_.fulfilled,(f,m)=>{let{rootTerms:w,classesWithIndividuals:_,orphanedIndividuals:A}=m.payload,{rootNodes:z,nodeChildren:N,automaticallyExpandedNodes:V}=QQ([...w||[],..._||[],...A||[]],f.preferredRoots,f.ontology);f.rootNodes=z,f.nodeChildren=N,f.automaticallyExpandedNodes=Array.from(new Set([...f.automaticallyExpandedNodes,...Array.from(V)])),--f.numPendingTreeRequests}),s.addCase(l_.rejected,f=>{--f.numPendingTreeRequests}),s.addCase(oT.fulfilled,(f,m)=>{f.ontologies=m.payload.elements,f.totalOntologies=m.payload.totalElements,f.loadingOntologies=!1}),s.addCase(oT.pending,f=>{f.loadingOntologies=!0,f.errorMessage=xa.errorMessage}),s.addCase(oT.rejected,(f,m)=>{f.ontologies=xa.ontologies,f.loadingOntologies=!1,f.errorMessage=m.payload}),s.addCase(iT.fulfilled,(f,m)=>{f.entities=m.payload.elements,f.totalEntities=m.payload.totalElements,f.loadingEntities=!1}),s.addCase(iT.pending,f=>{f.loadingEntities=!0,f.errorMessage=xa.errorMessage}),s.addCase(iT.rejected,(f,m)=>{f.entities=xa.entities,f.loadingEntities=!1,f.errorMessage=m.payload}),s.addCase(ZQ,f=>{f.nodesWithChildrenLoaded=[],f.nodeChildren={},f.rootNodes=[],f.automaticallyExpandedNodes=[]}),s.addCase(eZ,(f,m)=>{if(f.preferredRoots=m.payload.entityType==="classes"&&f.ontology.getPreferredRoots().length>0,m.payload.selectedEntity){let w=!1;for(let _ of f.ontology.getPreferredRoots())if(m.payload.selectedEntity.getHierarchicalAncestorIris().indexOf(_)!==-1){w=!0;break}w||(f.preferredRoots=!1)}f.displayObsolete=!1,f.displaySiblings=!1,f.displayCounts=!0,f.manuallyExpandedNodes=[]}),s.addCase(tZ,f=>{f.preferredRoots=!0}),s.addCase(rZ,f=>{f.preferredRoots=!1}),s.addCase(iZ,f=>{f.displayObsolete=!0}),s.addCase(aZ,f=>{f.displayObsolete=!1}),s.addCase(lZ,f=>{f.displaySiblings=!0}),s.addCase(sZ,f=>{f.displaySiblings=!1}),s.addCase(uZ,f=>{f.displayCounts=!0}),s.addCase(cZ,f=>{f.displayCounts=!1}),s.addCase(nZ,(f,m)=>{f.manuallyExpandedNodes=Array.from(new Set([...f.manuallyExpandedNodes,m.payload.absoluteIdentity]))}),s.addCase(oZ,(f,m)=>{f.manuallyExpandedNodes=f.manuallyExpandedNodes.filter(w=>w!==m.payload.absoluteIdentity),f.automaticallyExpandedNodes=f.automaticallyExpandedNodes.filter(w=>w!==m.payload.absoluteIdentity),delete f.nodeChildren[m.payload.absoluteIdentity],f.nodesWithChildrenLoaded=f.nodesWithChildrenLoaded.filter(w=>w!==m.payload.absoluteIdentity)})}}),k4e=P4e.reducer,aT={searchResults:[],loadingSearchResults:!1,totalSearchResults:0,facets:Object.create(null)},lT=Qa("search_results",async({page:s,rowsPerPage:f,search:m,ontologyId:w,type:_,searchParams:A},{rejectWithValue:z})=>{try{let N={search:m,size:f,page:s,facetFields:"ontologyId type",ontologyId:w.length>0?w[0]:null,type:_.length>0?_[0]:null,...Object.fromEntries(A)};for(let H in N)(N[H]===void 0||N[H]===null||N[H]==="")&&delete N[H];let V=new URLSearchParams(N);return A.get("ontology")&&(V.set("ontologyId",A.get("ontology")),V.delete("ontology")),A.get("q")&&V.delete("q"),(await Yi(`api/v2/entities?${V}`)).map(H=>Wl(H))}catch(N){return z(N.message)}}),C4e=De({name:"search",initialState:aT,reducers:{},extraReducers:s=>{s.addCase(lT.fulfilled,(f,m)=>{f.searchResults=m.payload.elements,f.totalSearchResults=m.payload.totalElements,f.facets=m.payload.facetFieldsToCounts,f.loadingSearchResults=!1}),s.addCase(lT.pending,f=>{f.loadingSearchResults=!0}),s.addCase(lT.rejected,f=>{f.loadingSearchResults=!1,f.searchResults=aT.searchResults,f.facets=aT.facets})}}),A4e=C4e.reducer,M4e=j({reducer:{home:w4e,search:A4e,ontologies:k4e},middleware:s=>s({serializableCheck:!1})});Gi();var T4e={black:"#000",white:"#fff"},Qg=T4e,R4e={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},G0=R4e,z4e={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},X0=z4e,D4e={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},K0=D4e,L4e={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},Y0=L4e,N4e={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},Q0=N4e,F4e={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},Zg=F4e,W4e={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},B4e=W4e,pZ="$$material",Hf=O(C0());ne();var fZ=O(mi());ne();var H4e=["values","unit","step"],V4e=s=>{let f=Object.keys(s).map(m=>({key:m,val:s[m]}))||[];return f.sort((m,w)=>m.val-w.val),f.reduce((m,w)=>B({},m,{[w.key]:w.val}),{})};function q4e(s){let{values:f={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:m="px",step:w=5}=s,_=vn(s,H4e),A=V4e(f),z=Object.keys(A);function N(te){return`@media (min-width:${typeof f[te]=="number"?f[te]:te}${m})`}function V(te){return`@media (max-width:${(typeof f[te]=="number"?f[te]:te)-w/100}${m})`}function H(te,oe){let re=z.indexOf(oe);return`@media (min-width:${typeof f[te]=="number"?f[te]:te}${m}) and (max-width:${(re!==-1&&typeof f[z[re]]=="number"?f[z[re]]:oe)-w/100}${m})`}function X(te){return z.indexOf(te)+1`@media (min-width:${sT[s]}px)`};function Bl(s,f,m){let w=s.theme||{};if(Array.isArray(f)){let _=w.breakpoints||dZ;return f.reduce((A,z,N)=>(A[_.up(_.keys[N])]=m(f[N]),A),{})}if(typeof f=="object"){let _=w.breakpoints||dZ;return Object.keys(f).reduce((A,z)=>{if(Object.keys(_.values||sT).indexOf(z)!==-1){let N=_.up(z);A[N]=m(f[z],z)}else{let N=z;A[N]=f[N]}return A},{})}return m(f)}function mZ(s={}){var f;return((f=s.keys)==null?void 0:f.reduce((m,w)=>{let _=s.up(w);return m[_]={},m},{}))||{}}function hZ(s,f){return s.reduce((m,w)=>{let _=m[w];return(!_||Object.keys(_).length===0)&&delete m[w],m},f)}function K4e(s,...f){let m=mZ(s),w=[m,...f].reduce((_,A)=>(0,J4e.default)(_,A),{});return hZ(Object.keys(m),w)}function Y4e(s,f){if(typeof s!="object")return{};let m={},w=Object.keys(f);return Array.isArray(s)?w.forEach((_,A)=>{A{s[_]!=null&&(m[_]=!0)}),m}function uT({values:s,breakpoints:f,base:m}){let w=m||Y4e(s,f),_=Object.keys(w);if(_.length===0)return s;let A;return _.reduce((z,N,V)=>(Array.isArray(s)?(z[N]=s[V]!=null?s[V]:s[A],A=V):typeof s=="object"?(z[N]=s[N]!=null?s[N]:s[A],A=N):z[N]=s,z),{})}var Q4e=O(Vr());function u_(s,f,m=!0){if(!f||typeof f!="string")return null;if(s&&s.vars&&m){let w=`vars.${f}`.split(".").reduce((_,A)=>_&&_[A]?_[A]:null,s);if(w!=null)return w}return f.split(".").reduce((w,_)=>w&&w[_]!=null?w[_]:null,s)}function c_(s,f,m,w=m){let _;return typeof s=="function"?_=s(m):Array.isArray(s)?_=s[m]||w:_=u_(s,m)||w,f&&(_=f(_,w,s)),_}function Z4e(s){let{prop:f,cssProperty:m=s.prop,themeKey:w,transform:_}=s,A=z=>{if(z[f]==null)return null;let N=z[f],V=z.theme,H=u_(V,w)||{};return Bl(z,N,X=>{let Q=c_(H,_,X);return X===Q&&typeof X=="string"&&(Q=c_(H,_,`${f}${X==="default"?"":(0,Q4e.default)(X)}`,X)),m===!1?Q:{[m]:Q}})};return A.propTypes={},A.filterProps=[f],A}var eo=Z4e;function e6e(s){let f={};return m=>(f[m]===void 0&&(f[m]=s(m)),f[m])}var t6e={m:"margin",p:"padding"},r6e={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},gZ={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},n6e=e6e(s=>{if(s.length>2)if(gZ[s])s=gZ[s];else return[s];let[f,m]=s.split(""),w=t6e[f],_=r6e[m]||"";return Array.isArray(_)?_.map(A=>w+A):[w+_]}),cT=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],pT=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],vZ=[...cT,...pT];function tv(s,f,m,w){var _;let A=(_=u_(s,f,!1))!=null?_:m;return typeof A=="number"?z=>typeof z=="string"?z:A*z:Array.isArray(A)?z=>typeof z=="string"?z:A[z]:typeof A=="function"?A:()=>{}}function fT(s){return tv(s,"spacing",8,"spacing")}function Vf(s,f){if(typeof f=="string"||f==null)return f;let m=Math.abs(f),w=s(m);return f>=0?w:typeof w=="number"?-w:`-${w}`}function o6e(s,f){return m=>s.reduce((w,_)=>(w[_]=Vf(f,m),w),{})}function i6e(s,f,m,w){if(f.indexOf(m)===-1)return null;let _=n6e(m),A=o6e(_,w),z=s[m];return Bl(s,z,A)}function dT(s,f){let m=fT(s.theme);return Object.keys(s).map(w=>i6e(s,f,w,m)).reduce(ev,{})}function qn(s){return dT(s,cT)}qn.propTypes={},qn.filterProps=cT;function Un(s){return dT(s,pT)}Un.propTypes={},Un.filterProps=pT;function yZ(s){return dT(s,vZ)}yZ.propTypes={},yZ.filterProps=vZ;function a6e(s=8){if(s.mui)return s;let f=fT({spacing:s}),m=(...w)=>(w.length===0?[1]:w).map(_=>{let A=f(_);return typeof A=="number"?`${A}px`:A}).join(" ");return m.mui=!0,m}var l6e=O(Vr());function s6e(...s){let f=s.reduce((w,_)=>(_.filterProps.forEach(A=>{w[A]=_}),w),{}),m=w=>Object.keys(w).reduce((_,A)=>f[A]?ev(_,f[A](w)):_,{});return m.propTypes={},m.filterProps=s.reduce((w,_)=>w.concat(_.filterProps),[]),m}var p_=s6e;function Za(s){return typeof s!="number"?s:`${s}px solid`}function el(s,f){return eo({prop:s,themeKey:"borders",transform:f})}var u6e=el("border",Za),c6e=el("borderTop",Za),p6e=el("borderRight",Za),f6e=el("borderBottom",Za),d6e=el("borderLeft",Za),m6e=el("borderColor"),h6e=el("borderTopColor"),g6e=el("borderRightColor"),v6e=el("borderBottomColor"),y6e=el("borderLeftColor"),b6e=el("outline",Za),w6e=el("outlineColor"),f_=s=>{if(s.borderRadius!==void 0&&s.borderRadius!==null){let f=tv(s.theme,"shape.borderRadius",4,"borderRadius"),m=w=>({borderRadius:Vf(f,w)});return Bl(s,s.borderRadius,m)}return null};f_.propTypes={},f_.filterProps=["borderRadius"];var LRt=p_(u6e,c6e,p6e,f6e,d6e,m6e,h6e,g6e,v6e,y6e,f_,b6e,w6e),d_=s=>{if(s.gap!==void 0&&s.gap!==null){let f=tv(s.theme,"spacing",8,"gap"),m=w=>({gap:Vf(f,w)});return Bl(s,s.gap,m)}return null};d_.propTypes={},d_.filterProps=["gap"];var m_=s=>{if(s.columnGap!==void 0&&s.columnGap!==null){let f=tv(s.theme,"spacing",8,"columnGap"),m=w=>({columnGap:Vf(f,w)});return Bl(s,s.columnGap,m)}return null};m_.propTypes={},m_.filterProps=["columnGap"];var h_=s=>{if(s.rowGap!==void 0&&s.rowGap!==null){let f=tv(s.theme,"spacing",8,"rowGap"),m=w=>({rowGap:Vf(f,w)});return Bl(s,s.rowGap,m)}return null};h_.propTypes={},h_.filterProps=["rowGap"];var O6e=eo({prop:"gridColumn"}),x6e=eo({prop:"gridRow"}),_6e=eo({prop:"gridAutoFlow"}),S6e=eo({prop:"gridAutoColumns"}),I6e=eo({prop:"gridAutoRows"}),j6e=eo({prop:"gridTemplateColumns"}),E6e=eo({prop:"gridTemplateRows"}),P6e=eo({prop:"gridTemplateAreas"}),k6e=eo({prop:"gridArea"}),NRt=p_(d_,m_,h_,O6e,x6e,_6e,S6e,I6e,j6e,E6e,P6e,k6e);function Z0(s,f){return f==="grey"?f:s}var C6e=eo({prop:"color",themeKey:"palette",transform:Z0}),A6e=eo({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:Z0}),M6e=eo({prop:"backgroundColor",themeKey:"palette",transform:Z0}),FRt=p_(C6e,A6e,M6e);function _a(s){return s<=1&&s!==0?`${s*100}%`:s}var T6e=eo({prop:"width",transform:_a}),mT=s=>{if(s.maxWidth!==void 0&&s.maxWidth!==null){let f=m=>{var w,_;let A=((w=s.theme)==null||(w=w.breakpoints)==null||(w=w.values)==null?void 0:w[m])||sT[m];return A?((_=s.theme)==null||(_=_.breakpoints)==null?void 0:_.unit)!=="px"?{maxWidth:`${A}${s.theme.breakpoints.unit}`}:{maxWidth:A}:{maxWidth:_a(m)}};return Bl(s,s.maxWidth,f)}return null};mT.filterProps=["maxWidth"];var R6e=eo({prop:"minWidth",transform:_a}),z6e=eo({prop:"height",transform:_a}),D6e=eo({prop:"maxHeight",transform:_a}),L6e=eo({prop:"minHeight",transform:_a}),WRt=eo({prop:"size",cssProperty:"width",transform:_a}),BRt=eo({prop:"size",cssProperty:"height",transform:_a}),N6e=eo({prop:"boxSizing"}),HRt=p_(T6e,mT,R6e,z6e,D6e,L6e,N6e),F6e={border:{themeKey:"borders",transform:Za},borderTop:{themeKey:"borders",transform:Za},borderRight:{themeKey:"borders",transform:Za},borderBottom:{themeKey:"borders",transform:Za},borderLeft:{themeKey:"borders",transform:Za},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:Za},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:f_},color:{themeKey:"palette",transform:Z0},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:Z0},backgroundColor:{themeKey:"palette",transform:Z0},p:{style:Un},pt:{style:Un},pr:{style:Un},pb:{style:Un},pl:{style:Un},px:{style:Un},py:{style:Un},padding:{style:Un},paddingTop:{style:Un},paddingRight:{style:Un},paddingBottom:{style:Un},paddingLeft:{style:Un},paddingX:{style:Un},paddingY:{style:Un},paddingInline:{style:Un},paddingInlineStart:{style:Un},paddingInlineEnd:{style:Un},paddingBlock:{style:Un},paddingBlockStart:{style:Un},paddingBlockEnd:{style:Un},m:{style:qn},mt:{style:qn},mr:{style:qn},mb:{style:qn},ml:{style:qn},mx:{style:qn},my:{style:qn},margin:{style:qn},marginTop:{style:qn},marginRight:{style:qn},marginBottom:{style:qn},marginLeft:{style:qn},marginX:{style:qn},marginY:{style:qn},marginInline:{style:qn},marginInlineStart:{style:qn},marginInlineEnd:{style:qn},marginBlock:{style:qn},marginBlockStart:{style:qn},marginBlockEnd:{style:qn},displayPrint:{cssProperty:!1,transform:s=>({"@media print":{display:s}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:d_},rowGap:{style:h_},columnGap:{style:m_},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:_a},maxWidth:{style:mT},minWidth:{transform:_a},height:{transform:_a},maxHeight:{transform:_a},minHeight:{transform:_a},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},hT=F6e;function W6e(...s){let f=s.reduce((w,_)=>w.concat(Object.keys(_)),[]),m=new Set(f);return s.every(w=>m.size===Object.keys(w).length)}function B6e(s,f){return typeof s=="function"?s(f):s}function H6e(){function s(m,w,_,A){let z={[m]:w,theme:_},N=A[m];if(!N)return{[m]:w};let{cssProperty:V=m,themeKey:H,transform:X,style:Q}=N;if(w==null)return null;if(H==="typography"&&w==="inherit")return{[m]:w};let te=u_(_,H)||{};return Q?Q(z):Bl(z,w,oe=>{let re=c_(te,X,oe);return oe===re&&typeof oe=="string"&&(re=c_(te,X,`${m}${oe==="default"?"":(0,l6e.default)(oe)}`,oe)),V===!1?re:{[V]:re}})}function f(m){var w;let{sx:_,theme:A={}}=m||{};if(!_)return null;let z=(w=A.unstable_sxConfig)!=null?w:hT;function N(V){let H=V;if(typeof V=="function")H=V(A);else if(typeof V!="object")return V;if(!H)return null;let X=mZ(A.breakpoints),Q=Object.keys(X),te=X;return Object.keys(H).forEach(oe=>{let re=B6e(H[oe],A);if(re!=null)if(typeof re=="object")if(z[oe])te=ev(te,s(oe,re,A,z));else{let le=Bl({theme:A},re,ce=>({[oe]:ce}));W6e(le,re)?te[oe]=f({sx:re,theme:A}):te=ev(te,le)}else te=ev(te,s(oe,re,A,z))}),hZ(Q,te)}return Array.isArray(_)?_.map(N):N(_)}return f}var bZ=H6e();bZ.filterProps=["sx"];var wZ=bZ;function V6e(s,f){let m=this;return m.vars&&typeof m.getColorSchemeSelector=="function"?{[m.getColorSchemeSelector(s).replace(/(\[[^\]]+\])/,"*:where($1)")]:f}:m.palette.mode===s?f:{}}var q6e=["breakpoints","palette","spacing","shape"];function U6e(s={},...f){let{breakpoints:m={},palette:w={},spacing:_,shape:A={}}=s,z=vn(s,q6e),N=q4e(m),V=a6e(_),H=(0,fZ.default)({breakpoints:N,direction:"ltr",components:{},palette:B({mode:"light"},w),spacing:V,shape:B({},$4e,A)},z);return H.applyStyles=V6e,H=f.reduce((X,Q)=>(0,fZ.default)(X,Q),H),H.unstable_sxConfig=B({},hT,z?.unstable_sxConfig),H.unstable_sx=function(X){return wZ({sx:X,theme:this})},H}var gT=U6e,$6e=O(k()),J6e=O(C0());function G6e(s){return Object.keys(s).length===0}function X6e(s=null){let f=$6e.useContext(J6e.ThemeContext);return!f||G6e(f)?s:f}var K6e=X6e,Y6e=gT();function Q6e(s=Y6e){return K6e(s)}var Z6e=Q6e;ne();var ewe=O(mi()),twe=["sx"],rwe=s=>{var f,m;let w={systemProps:{},otherProps:{}},_=(f=s==null||(m=s.theme)==null?void 0:m.unstable_sxConfig)!=null?f:hT;return Object.keys(s).forEach(A=>{_[A]?w.systemProps[A]=s[A]:w.otherProps[A]=s[A]}),w};function nwe(s){let{sx:f}=s,m=vn(s,twe),{systemProps:w,otherProps:_}=rwe(m),A;return Array.isArray(f)?A=[w,...f]:typeof f=="function"?A=(...z)=>{let N=f(...z);return(0,ewe.isPlainObject)(N)?B({},w,N):w}:A=B({},w,f),B({},_,{sx:A})}var OZ=s=>s,owe=()=>{let s=OZ;return{configure(f){s=f},generate(f){return s(f)},reset(){s=OZ}}},iwe=owe(),awe=iwe;function xZ(s){var f,m,w="";if(typeof s=="string"||typeof s=="number")w+=s;else if(typeof s=="object")if(Array.isArray(s)){var _=s.length;for(f=0;f<_;f++)s[f]&&(m=xZ(s[f]))&&(w&&(w+=" "),w+=m)}else for(m in s)s[m]&&(w&&(w+=" "),w+=m);return w}function lwe(){for(var s,f,m=0,w="",_=arguments.length;m<_;m++)(s=arguments[m])&&(f=xZ(s))&&(w&&(w+=" "),w+=f);return w}var to=lwe,swe={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function tl(s,f,m="Mui"){let w=swe[f];return w?`${m}-${w}`:`${awe.generate(s)}-${f}`}function Hl(s,f,m="Mui"){let w={};return f.forEach(_=>{w[_]=tl(s,_,m)}),w}ne();var _Z=O(C0()),uwe=O(mi()),cwe=["ownerState"],pwe=["variants"],fwe=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function dwe(s){return Object.keys(s).length===0}function mwe(s){return typeof s=="string"&&s.charCodeAt(0)>96}function vT(s){return s!=="ownerState"&&s!=="theme"&&s!=="sx"&&s!=="as"}var hwe=gT(),gwe=s=>s&&s.charAt(0).toLowerCase()+s.slice(1);function g_({defaultTheme:s,theme:f,themeId:m}){return dwe(f)?s:f[m]||f}function vwe(s){return s?(f,m)=>m[s]:null}function v_(s,f){let{ownerState:m}=f,w=vn(f,cwe),_=typeof s=="function"?s(B({ownerState:m},w)):s;if(Array.isArray(_))return _.flatMap(A=>v_(A,B({ownerState:m},w)));if(_&&typeof _=="object"&&Array.isArray(_.variants)){let{variants:A=[]}=_,z=vn(_,pwe);return A.forEach(N=>{let V=!0;typeof N.props=="function"?V=N.props(B({ownerState:m},w,m)):Object.keys(N.props).forEach(H=>{m?.[H]!==N.props[H]&&w[H]!==N.props[H]&&(V=!1)}),V&&(Array.isArray(z)||(z=[z]),z.push(typeof N.style=="function"?N.style(B({ownerState:m},w,m)):N.style))}),z}return _}function ywe(s={}){let{themeId:f,defaultTheme:m=hwe,rootShouldForwardProp:w=vT,slotShouldForwardProp:_=vT}=s,A=z=>wZ(B({},z,{theme:g_(B({},z,{defaultTheme:m,themeId:f}))}));return A.__mui_systemSx=!0,(z,N={})=>{(0,_Z.internal_processStyles)(z,Se=>Se.filter(he=>!(he!=null&&he.__mui_systemSx)));let{name:V,slot:H,skipVariantsResolver:X,skipSx:Q,overridesResolver:te=vwe(gwe(H))}=N,oe=vn(N,fwe),re=X!==void 0?X:H&&H!=="Root"&&H!=="root"||!1,le=Q||!1,ce,ie=vT;H==="Root"||H==="root"?ie=w:H?ie=_:mwe(z)&&(ie=void 0);let Pe=(0,_Z.default)(z,B({shouldForwardProp:ie,label:ce},oe)),Ae=Se=>typeof Se=="function"&&Se.__emotion_real!==Se||(0,uwe.isPlainObject)(Se)?he=>v_(Se,B({},he,{theme:g_({theme:he.theme,defaultTheme:m,themeId:f})})):Se,Oe=(Se,...he)=>{let je=Ae(Se),ae=he?he.map(Ae):[];V&&te&&ae.push(Te=>{let We=g_(B({},Te,{defaultTheme:m,themeId:f}));if(!We.components||!We.components[V]||!We.components[V].styleOverrides)return null;let $e=We.components[V].styleOverrides,it={};return Object.entries($e).forEach(([Mt,Lt])=>{it[Mt]=v_(Lt,B({},Te,{theme:We}))}),te(Te,it)}),V&&!re&&ae.push(Te=>{var We;let $e=g_(B({},Te,{defaultTheme:m,themeId:f})),it=$e==null||(We=$e.components)==null||(We=We[V])==null?void 0:We.variants;return v_({variants:it},B({},Te,{theme:$e}))}),le||ae.push(A);let we=ae.length-he.length;if(Array.isArray(Se)&&we>0){let Te=new Array(we).fill("");je=[...Se,...Te],je.raw=[...Se.raw,...Te]}let Ce=Pe(je,...ae);return z.muiName&&(Ce.muiName=z.muiName),Ce};return Pe.withConfig&&(Oe.withConfig=Pe.withConfig),Oe}}var bwe=ywe(),wwe=bwe;ne();function SZ(s,f){let m=B({},f);return Object.keys(s).forEach(w=>{if(w.toString().match(/^(components|slots)$/))m[w]=B({},s[w],m[w]);else if(w.toString().match(/^(componentsProps|slotProps)$/)){let _=s[w]||{},A=f[w];m[w]={},!A||!Object.keys(A)?m[w]=_:!_||!Object.keys(_)?m[w]=A:(m[w]=B({},A),Object.keys(_).forEach(z=>{m[w][z]=SZ(_[z],A[z])}))}else m[w]===void 0&&(m[w]=s[w])}),m}function Owe(s){let{theme:f,name:m,props:w}=s;return!f||!f.components||!f.components[m]||!f.components[m].defaultProps?w:SZ(f.components[m].defaultProps,w)}function IZ({props:s,name:f,defaultTheme:m,themeId:w}){let _=Z6e(m);return w&&(_=_[w]||_),Owe({theme:_,name:f,props:s})}var jZ=O(k()),xwe=typeof window<"u"?jZ.useLayoutEffect:jZ.useEffect,_we=xwe;function Swe(...s){return s.reduce((f,m)=>m==null?f:function(...w){f.apply(this,w),m.apply(this,w)},()=>{})}var Iwe=O(k());function jwe(s,f){var m,w;return Iwe.isValidElement(s)&&f.indexOf((m=s.type.muiName)!=null?m:(w=s.type)==null||(w=w._payload)==null||(w=w.value)==null?void 0:w.muiName)!==-1}function Ewe(s,f){typeof s=="function"?s(f):s&&(s.current=f)}var yT=O(k()),EZ=0;function Pwe(s){let[f,m]=yT.useState(s),w=s||f;return yT.useEffect(()=>{f==null&&(EZ+=1,m(`mui-${EZ}`))},[f]),w}var PZ=yT["useId".toString()];function kwe(s){if(PZ!==void 0){let f=PZ();return s??f}return Pwe(s)}var bT=O(k());function Cwe({controlled:s,default:f,name:m,state:w="value"}){let{current:_}=bT.useRef(s!==void 0),[A,z]=bT.useState(f),N=_?s:A,V=bT.useCallback(H=>{_||z(H)},[]);return[N,V]}var kZ=O(k());function Awe(s){let f=kZ.useRef(s);return _we(()=>{f.current=s}),kZ.useRef((...m)=>(0,f.current)(...m)).current}var Mwe=Awe,Twe=O(k());function Rwe(...s){return Twe.useMemo(()=>s.every(f=>f==null)?null:f=>{s.forEach(m=>{Ewe(m,f)})},s)}var zwe=O(k()),CZ={};function Dwe(s,f){let m=zwe.useRef(CZ);return m.current===CZ&&(m.current=s(f)),m}var Lwe=O(k()),Nwe=[];function Fwe(s){Lwe.useEffect(s,Nwe)}var AZ=class b5e{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new b5e}start(f,m){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,m()},f)}};function Wwe(){let s=Dwe(AZ.create).current;return Fwe(s.disposeEffect),s}var MZ=O(k()),y_=!0,wT=!1,Bwe=new AZ,Hwe={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function Vwe(s){let{type:f,tagName:m}=s;return!!(m==="INPUT"&&Hwe[f]&&!s.readOnly||m==="TEXTAREA"&&!s.readOnly||s.isContentEditable)}function qwe(s){s.metaKey||s.altKey||s.ctrlKey||(y_=!0)}function OT(){y_=!1}function Uwe(){this.visibilityState==="hidden"&&wT&&(y_=!0)}function $we(s){s.addEventListener("keydown",qwe,!0),s.addEventListener("mousedown",OT,!0),s.addEventListener("pointerdown",OT,!0),s.addEventListener("touchstart",OT,!0),s.addEventListener("visibilitychange",Uwe,!0)}function Jwe(s){let{target:f}=s;try{return f.matches(":focus-visible")}catch{}return y_||Vwe(f)}function Gwe(){let s=MZ.useCallback(_=>{_!=null&&$we(_.ownerDocument)},[]),f=MZ.useRef(!1);function m(){return f.current?(wT=!0,Bwe.start(100,()=>{wT=!1}),f.current=!1,!0):!1}function w(_){return Jwe(_)?(f.current=!0,!0):!1}return{isFocusVisibleRef:f,onFocus:w,onBlur:m,ref:s}}function Vl(s,f,m=void 0){let w={};return Object.keys(s).forEach(_=>{w[_]=s[_].reduce((A,z)=>{if(z){let N=f(z);N!==""&&A.push(N),m&&m[z]&&A.push(m[z])}return A},[]).join(" ")}),w}ne();var xT=O(k()),Xwe=O(mi()),Kwe=O(Dr()),Ywe=["component","direction","spacing","divider","children","className","useFlexGap"],Qwe=gT(),Zwe=wwe("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,f)=>f.root});function eOe(s){return IZ({props:s,name:"MuiStack",defaultTheme:Qwe})}function tOe(s,f){let m=xT.Children.toArray(s).filter(Boolean);return m.reduce((w,_,A)=>(w.push(_),A({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[s],nOe=({ownerState:s,theme:f})=>{let m=B({display:"flex",flexDirection:"column"},Bl({theme:f},uT({values:s.direction,breakpoints:f.breakpoints.values}),w=>({flexDirection:w})));if(s.spacing){let w=fT(f),_=Object.keys(f.breakpoints.values).reduce((N,V)=>((typeof s.spacing=="object"&&s.spacing[V]!=null||typeof s.direction=="object"&&s.direction[V]!=null)&&(N[V]=!0),N),{}),A=uT({values:s.direction,base:_}),z=uT({values:s.spacing,base:_});typeof A=="object"&&Object.keys(A).forEach((N,V,H)=>{if(!A[N]){let X=V>0?A[H[V-1]]:"column";A[N]=X}}),m=(0,Xwe.default)(m,Bl({theme:f},z,(N,V)=>s.useFlexGap?{gap:Vf(w,N)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${rOe(V?A[V]:s.direction)}`]:Vf(w,N)}}))}return m=K4e(f.breakpoints,m),m};function oOe(s={}){let{createStyledComponent:f=Zwe,useThemeProps:m=eOe,componentName:w="MuiStack"}=s,_=()=>Vl({root:["root"]},z=>tl(w,z),{}),A=f(nOe);return xT.forwardRef(function(z,N){let V=m(z),H=nwe(V),{component:X="div",direction:Q="column",spacing:te=0,divider:oe,children:re,className:le,useFlexGap:ce=!1}=H,ie=vn(H,Ywe),Pe={direction:Q,spacing:te,useFlexGap:ce},Ae=_();return(0,Kwe.jsx)(A,B({as:X,ownerState:Pe,ref:N,className:to(Ae.root,le)},ie,{children:oe?tOe(re,oe):re}))})}ne();var iOe=O(Xi()),_T=O(mi()),TZ=O(Pg()),aOe=O(x9());ne();function lOe(s,f){return B({toolbar:{minHeight:56,[s.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[s.up("sm")]:{minHeight:64}}},f)}ne();var RZ=O(Xi()),sOe=O(mi()),ST=O(kg()),uOe=["mode","contrastThreshold","tonalOffset"],zZ={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:Qg.white,default:Qg.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},IT={text:{primary:Qg.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:Qg.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function DZ(s,f,m,w){let _=w.light||w,A=w.dark||w*1.5;s[f]||(s.hasOwnProperty(m)?s[f]=s[m]:f==="light"?s.light=(0,ST.lighten)(s.main,_):f==="dark"&&(s.dark=(0,ST.darken)(s.main,A)))}function cOe(s="light"){return s==="dark"?{main:K0[200],light:K0[50],dark:K0[400]}:{main:K0[700],light:K0[400],dark:K0[800]}}function pOe(s="light"){return s==="dark"?{main:X0[200],light:X0[50],dark:X0[400]}:{main:X0[500],light:X0[300],dark:X0[700]}}function fOe(s="light"){return s==="dark"?{main:G0[500],light:G0[300],dark:G0[700]}:{main:G0[700],light:G0[400],dark:G0[800]}}function dOe(s="light"){return s==="dark"?{main:Y0[400],light:Y0[300],dark:Y0[700]}:{main:Y0[700],light:Y0[500],dark:Y0[900]}}function mOe(s="light"){return s==="dark"?{main:Q0[400],light:Q0[300],dark:Q0[700]}:{main:Q0[800],light:Q0[500],dark:Q0[900]}}function hOe(s="light"){return s==="dark"?{main:Zg[400],light:Zg[300],dark:Zg[700]}:{main:"#ed6c02",light:Zg[500],dark:Zg[900]}}function gOe(s){let{mode:f="light",contrastThreshold:m=3,tonalOffset:w=.2}=s,_=vn(s,uOe),A=s.primary||cOe(f),z=s.secondary||pOe(f),N=s.error||fOe(f),V=s.info||dOe(f),H=s.success||mOe(f),X=s.warning||hOe(f);function Q(re){return(0,ST.getContrastRatio)(re,IT.text.primary)>=m?IT.text.primary:zZ.text.primary}let te=({color:re,name:le,mainShade:ce=500,lightShade:ie=300,darkShade:Pe=700})=>{if(re=B({},re),!re.main&&re[ce]&&(re.main=re[ce]),!re.hasOwnProperty("main"))throw new Error((0,RZ.default)(11,le?` (${le})`:"",ce));if(typeof re.main!="string")throw new Error((0,RZ.default)(12,le?` (${le})`:"",JSON.stringify(re.main)));return DZ(re,"light",ie,w),DZ(re,"dark",Pe,w),re.contrastText||(re.contrastText=Q(re.main)),re},oe={dark:IT,light:zZ};return(0,sOe.default)(B({common:B({},Qg),mode:f,primary:te({color:A,name:"primary"}),secondary:te({color:z,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:te({color:N,name:"error"}),warning:te({color:X,name:"warning"}),info:te({color:V,name:"info"}),success:te({color:H,name:"success"}),grey:B4e,contrastThreshold:m,getContrastText:Q,augmentColor:te,tonalOffset:w},oe[f]),_)}ne();var vOe=O(mi()),yOe=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function bOe(s){return Math.round(s*1e5)/1e5}var LZ={textTransform:"uppercase"},NZ='"Roboto", "Helvetica", "Arial", sans-serif';function wOe(s,f){let m=typeof f=="function"?f(s):f,{fontFamily:w=NZ,fontSize:_=14,fontWeightLight:A=300,fontWeightRegular:z=400,fontWeightMedium:N=500,fontWeightBold:V=700,htmlFontSize:H=16,allVariants:X,pxToRem:Q}=m,te=vn(m,yOe),oe=_/14,re=Q||(ie=>`${ie/H*oe}rem`),le=(ie,Pe,Ae,Oe,Se)=>B({fontFamily:w,fontWeight:ie,fontSize:re(Pe),lineHeight:Ae},w===NZ?{letterSpacing:`${bOe(Oe/Pe)}em`}:{},Se,X),ce={h1:le(A,96,1.167,-1.5),h2:le(A,60,1.2,-.5),h3:le(z,48,1.167,0),h4:le(z,34,1.235,.25),h5:le(z,24,1.334,0),h6:le(N,20,1.6,.15),subtitle1:le(z,16,1.75,.15),subtitle2:le(N,14,1.57,.1),body1:le(z,16,1.5,.15),body2:le(z,14,1.43,.15),button:le(N,14,1.75,.4,LZ),caption:le(z,12,1.66,.4),overline:le(z,12,2.66,1,LZ),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,vOe.default)(B({htmlFontSize:H,pxToRem:re,fontFamily:w,fontSize:_,fontWeightLight:A,fontWeightRegular:z,fontWeightMedium:N,fontWeightBold:V},ce),te,{clone:!1})}function Rn(...s){return[`${s[0]}px ${s[1]}px ${s[2]}px ${s[3]}px rgba(0,0,0,${.2})`,`${s[4]}px ${s[5]}px ${s[6]}px ${s[7]}px rgba(0,0,0,${.14})`,`${s[8]}px ${s[9]}px ${s[10]}px ${s[11]}px rgba(0,0,0,${.12})`].join(",")}var OOe=["none",Rn(0,2,1,-1,0,1,1,0,0,1,3,0),Rn(0,3,1,-2,0,2,2,0,0,1,5,0),Rn(0,3,3,-2,0,3,4,0,0,1,8,0),Rn(0,2,4,-1,0,4,5,0,0,1,10,0),Rn(0,3,5,-1,0,5,8,0,0,1,14,0),Rn(0,3,5,-1,0,6,10,0,0,1,18,0),Rn(0,4,5,-2,0,7,10,1,0,2,16,1),Rn(0,5,5,-3,0,8,10,1,0,3,14,2),Rn(0,5,6,-3,0,9,12,1,0,3,16,2),Rn(0,6,6,-3,0,10,14,1,0,4,18,3),Rn(0,6,7,-4,0,11,15,1,0,4,20,3),Rn(0,7,8,-4,0,12,17,2,0,5,22,4),Rn(0,7,8,-4,0,13,19,2,0,5,24,4),Rn(0,7,9,-4,0,14,21,2,0,5,26,4),Rn(0,8,9,-5,0,15,22,2,0,6,28,5),Rn(0,8,10,-5,0,16,24,2,0,6,30,5),Rn(0,8,11,-5,0,17,26,2,0,6,32,5),Rn(0,9,11,-5,0,18,28,2,0,7,34,6),Rn(0,9,12,-6,0,19,29,2,0,7,36,6),Rn(0,10,13,-6,0,20,31,3,0,8,38,7),Rn(0,10,13,-6,0,21,33,3,0,8,40,7),Rn(0,10,14,-6,0,22,35,3,0,8,42,7),Rn(0,11,14,-7,0,23,36,3,0,9,44,8),Rn(0,11,15,-7,0,24,38,3,0,9,46,8)],xOe=OOe;ne();var _Oe=["duration","easing","delay"],SOe={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},IOe={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function FZ(s){return`${Math.round(s)}ms`}function jOe(s){if(!s)return 0;let f=s/36;return Math.round((4+15*f**.25+f/5)*10)}function EOe(s){let f=B({},SOe,s.easing),m=B({},IOe,s.duration);return B({getAutoHeightDuration:jOe,create:(w=["all"],_={})=>{let{duration:A=m.standard,easing:z=f.easeInOut,delay:N=0}=_,V=vn(_,_Oe);return(Array.isArray(w)?w:[w]).map(H=>`${H} ${typeof A=="string"?A:FZ(A)} ${z} ${typeof N=="string"?N:FZ(N)}`).join(",")}},s,{easing:f,duration:m})}var POe={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},kOe=POe,COe=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function AOe(s={},...f){let{mixins:m={},palette:w={},transitions:_={},typography:A={}}=s,z=vn(s,COe);if(s.vars)throw new Error((0,iOe.default)(18));let N=gOe(w),V=(0,aOe.default)(s),H=(0,_T.default)(V,{mixins:lOe(V.breakpoints,m),palette:N,shadows:xOe.slice(),typography:wOe(N,A),transitions:EOe(_),zIndex:B({},kOe)});return H=(0,_T.default)(H,z),H=f.reduce((X,Q)=>(0,_T.default)(X,Q),H),H.unstable_sxConfig=B({},TZ.unstable_defaultSxConfig,z?.unstable_sxConfig),H.unstable_sx=function(X){return(0,TZ.default)({sx:X,theme:this})},H}var WZ=AOe,MOe=WZ(),BZ=MOe;function ql({props:s,name:f}){return IZ({props:s,name:f,defaultTheme:BZ,themeId:pZ})}var HZ=O(vM()),rv=s=>(0,HZ.shouldForwardProp)(s)&&s!=="classes",TOe=(0,HZ.default)({themeId:pZ,defaultTheme:BZ,rootShouldForwardProp:rv}),fo=TOe,ROe=O(Vr()),Hn=ROe.default,zOe=Swe;ne();var VZ=O(k());ne();var qZ=O(k());function DOe(s){return tl("MuiSvgIcon",s)}var VRt=Hl("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]),LOe=O(Dr()),NOe=O(Dr()),FOe=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],WOe=s=>{let{color:f,fontSize:m,classes:w}=s,_={root:["root",f!=="inherit"&&`color${Hn(f)}`,`fontSize${Hn(m)}`]};return Vl(_,DOe,w)},BOe=fo("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.color!=="inherit"&&f[`color${Hn(m.color)}`],f[`fontSize${Hn(m.fontSize)}`]]}})(({theme:s,ownerState:f})=>{var m,w,_,A,z,N,V,H,X,Q,te,oe,re;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:f.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:(m=s.transitions)==null||(w=m.create)==null?void 0:w.call(m,"fill",{duration:(_=s.transitions)==null||(_=_.duration)==null?void 0:_.shorter}),fontSize:{inherit:"inherit",small:((A=s.typography)==null||(z=A.pxToRem)==null?void 0:z.call(A,20))||"1.25rem",medium:((N=s.typography)==null||(V=N.pxToRem)==null?void 0:V.call(N,24))||"1.5rem",large:((H=s.typography)==null||(X=H.pxToRem)==null?void 0:X.call(H,35))||"2.1875rem"}[f.fontSize],color:(Q=(te=(s.vars||s).palette)==null||(te=te[f.color])==null?void 0:te.main)!=null?Q:{action:(oe=(s.vars||s).palette)==null||(oe=oe.action)==null?void 0:oe.active,disabled:(re=(s.vars||s).palette)==null||(re=re.action)==null?void 0:re.disabled,inherit:void 0}[f.color]}}),UZ=qZ.forwardRef(function(s,f){let m=ql({props:s,name:"MuiSvgIcon"}),{children:w,className:_,color:A="inherit",component:z="svg",fontSize:N="medium",htmlColor:V,inheritViewBox:H=!1,titleAccess:X,viewBox:Q="0 0 24 24"}=m,te=vn(m,FOe),oe=qZ.isValidElement(w)&&w.type==="svg",re=B({},m,{color:A,component:z,fontSize:N,instanceFontSize:s.fontSize,inheritViewBox:H,viewBox:Q,hasSvgAsChild:oe}),le={};H||(le.viewBox=Q);let ce=WOe(re);return(0,NOe.jsxs)(BOe,B({as:z,className:to(ce.root,_),focusable:"false",color:V,"aria-hidden":X?void 0:!0,role:X?"img":void 0,ref:f},le,te,oe&&w.props,{ownerState:re,children:[oe?w.props.children:w,X?(0,LOe.jsx)("title",{children:X}):null]}))});UZ.muiName="SvgIcon";var $Z=UZ,HOe=O(Dr());function nv(s,f){function m(w,_){return(0,HOe.jsx)($Z,B({"data-testid":`${f}Icon`,ref:_},w,{children:s}))}return m.muiName=$Z.muiName,VZ.memo(VZ.forwardRef(m))}var jT=jwe,VOe=kwe,JZ=Cwe,b_=Mwe,ET=Rwe,qOe=Gwe;function PT(s,f){return PT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(m,w){return m.__proto__=w,m},PT(s,f)}function ov(s,f){s.prototype=Object.create(f.prototype),s.prototype.constructor=s,PT(s,f)}var UOe=O(k()),GZ=UOe.default.createContext(null);ne();function $Oe(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}var w_=O(k()),ku=O(k());function kT(s,f){var m=function(_){return f&&(0,ku.isValidElement)(_)?f(_):_},w=Object.create(null);return s&&ku.Children.map(s,function(_){return _}).forEach(function(_){w[_.key]=m(_)}),w}function JOe(s,f){s=s||{},f=f||{};function m(X){return X in f?f[X]:s[X]}var w=Object.create(null),_=[];for(var A in s)A in f?_.length&&(w[A]=_,_=[]):_.push(A);var z,N={};for(var V in f){if(w[V])for(z=0;z{if(!N&&V!=null){let le=setTimeout(V,H);return()=>{clearTimeout(le)}}},[V,N,H]),(0,KZ.jsx)("span",{className:te,style:oe,children:(0,KZ.jsx)("span",{className:re})})}var e7e=ZOe,t7e=Hl("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),rl=t7e,AT=O(Dr()),r7e=["center","classes","className"],O_=s=>s,YZ,QZ,ZZ,eee,MT=550,n7e=80,o7e=(0,Hf.keyframes)(YZ||(YZ=O_` 0% { transform: scale(0); opacity: 0.1; @@ -531,7 +521,7 @@ Add a component higher in the tree to provide a loading transform: scale(1); opacity: 0.3; } -`)),KOe=(0,Wf.keyframes)(JZ||(JZ=w_` +`)),i7e=(0,Hf.keyframes)(QZ||(QZ=O_` 0% { opacity: 1; } @@ -539,7 +529,7 @@ Add a component higher in the tree to provide a loading 100% { opacity: 0; } -`)),YOe=(0,Wf.keyframes)(GZ||(GZ=w_` +`)),a7e=(0,Hf.keyframes)(ZZ||(ZZ=O_` 0% { transform: scale(1); } @@ -551,7 +541,7 @@ Add a component higher in the tree to provide a loading 100% { transform: scale(1); } -`)),QOe=fo("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),ZOe=fo(UOe,{name:"MuiTouchRipple",slot:"Ripple"})(XZ||(XZ=w_` +`)),l7e=fo("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),s7e=fo(e7e,{name:"MuiTouchRipple",slot:"Ripple"})(eee||(eee=O_` opacity: 0; position: absolute; @@ -594,7 +584,7 @@ Add a component higher in the tree to provide a loading animation-iteration-count: infinite; animation-delay: 200ms; } -`),el.rippleVisible,XOe,CT,({theme:s})=>s.transitions.easing.easeInOut,el.ripplePulsate,({theme:s})=>s.transitions.duration.shorter,el.child,el.childLeaving,KOe,CT,({theme:s})=>s.transitions.easing.easeInOut,el.childPulsate,YOe,({theme:s})=>s.transitions.easing.easeInOut),e7e=Sa.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiTouchRipple"}),{center:w=!1,classes:_={},className:C}=m,z=vn(m,JOe),[L,V]=Sa.useState([]),B=Sa.useRef(0),G=Sa.useRef(null);Sa.useEffect(()=>{G.current&&(G.current(),G.current=null)},[L]);let Q=Sa.useRef(!1),te=Awe(),oe=Sa.useRef(null),re=Sa.useRef(null),le=Sa.useCallback(Ae=>{let{pulsate:we,rippleX:Se,rippleY:ge,rippleSize:je,cb:ae}=Ae;V(be=>[...be,(0,kT.jsx)(ZOe,{classes:{ripple:to(_.ripple,el.ripple),rippleVisible:to(_.rippleVisible,el.rippleVisible),ripplePulsate:to(_.ripplePulsate,el.ripplePulsate),child:to(_.child,el.child),childLeaving:to(_.childLeaving,el.childLeaving),childPulsate:to(_.childPulsate,el.childPulsate)},timeout:CT,pulsate:we,rippleX:Se,rippleY:ge,rippleSize:je},B.current)]),B.current+=1,G.current=ae},[_]),ce=Sa.useCallback((Ae={},we={},Se=()=>{})=>{let{pulsate:ge=!1,center:je=w||we.pulsate,fakeElement:ae=!1}=we;if(Ae?.type==="mousedown"&&Q.current){Q.current=!1;return}Ae?.type==="touchstart"&&(Q.current=!0);let be=ae?null:re.current,Ce=be?be.getBoundingClientRect():{width:0,height:0,left:0,top:0},Te,Fe,Ue;if(je||Ae===void 0||Ae.clientX===0&&Ae.clientY===0||!Ae.clientX&&!Ae.touches)Te=Math.round(Ce.width/2),Fe=Math.round(Ce.height/2);else{let{clientX:it,clientY:Mt}=Ae.touches&&Ae.touches.length>0?Ae.touches[0]:Ae;Te=Math.round(it-Ce.left),Fe=Math.round(Mt-Ce.top)}if(je)Ue=Math.sqrt((2*Ce.width**2+Ce.height**2)/3),Ue%2===0&&(Ue+=1);else{let it=Math.max(Math.abs((be?be.clientWidth:0)-Te),Te)*2+2,Mt=Math.max(Math.abs((be?be.clientHeight:0)-Fe),Fe)*2+2;Ue=Math.sqrt(it**2+Mt**2)}Ae!=null&&Ae.touches?oe.current===null&&(oe.current=()=>{le({pulsate:ge,rippleX:Te,rippleY:Fe,rippleSize:Ue,cb:Se})},te.start(GOe,()=>{oe.current&&(oe.current(),oe.current=null)})):le({pulsate:ge,rippleX:Te,rippleY:Fe,rippleSize:Ue,cb:Se})},[w,le,te]),ie=Sa.useCallback(()=>{ce({},{pulsate:!0})},[ce]),Pe=Sa.useCallback((Ae,we)=>{if(te.clear(),Ae?.type==="touchend"&&oe.current){oe.current(),oe.current=null,te.start(0,()=>{Pe(Ae,we)});return}oe.current=null,V(Se=>Se.length>0?Se.slice(1):Se),G.current=we},[te]);return Sa.useImperativeHandle(f,()=>({pulsate:ie,start:ce,stop:Pe}),[ie,ce,Pe]),(0,kT.jsx)(QOe,H({className:to(el.root,_.root,C),ref:re},z,{children:(0,kT.jsx)(VOe,{component:null,exit:!0,children:L})}))}),t7e=e7e;function r7e(s){return Za("MuiButtonBase",s)}var n7e=Bl("MuiButtonBase",["root","disabled","focusVisible"]),o7e=n7e,i7e=O(Dr()),a7e=O(Dr()),l7e=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],s7e=s=>{let{disabled:f,focusVisible:m,focusVisibleClassName:w,classes:_}=s,C=Hl({root:["root",f&&"disabled",m&&"focusVisible"]},r7e,_);return m&&w&&(C.root+=` ${w}`),C},u7e=fo("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(s,f)=>f.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${o7e.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),c7e=ku.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiButtonBase"}),{action:w,centerRipple:_=!1,children:C,className:z,component:L="button",disabled:V=!1,disableRipple:B=!1,disableTouchRipple:G=!1,focusRipple:Q=!1,LinkComponent:te="a",onBlur:oe,onClick:re,onContextMenu:le,onDragLeave:ce,onFocus:ie,onFocusVisible:Pe,onKeyDown:Ae,onKeyUp:we,onMouseDown:Se,onMouseLeave:ge,onMouseUp:je,onTouchEnd:ae,onTouchMove:be,onTouchStart:Ce,tabIndex:Te=0,TouchRippleProps:Fe,touchRippleRef:Ue,type:it}=m,Mt=vn(m,l7e),Lt=ku.useRef(null),Gt=ku.useRef(null),Ee=IT(Gt,Ue),{isFocusVisibleRef:Ye,onFocus:Yt,onBlur:Je,ref:ct}=zOe(),[dt,Ot]=ku.useState(!1);V&&dt&&Ot(!1),ku.useImperativeHandle(w,()=>({focusVisible:()=>{Ot(!0),Lt.current.focus()}}),[]);let[Jt,wr]=ku.useState(!1);ku.useEffect(()=>{wr(!0)},[]);let un=Jt&&!B&&!V;ku.useEffect(()=>{dt&&Q&&!B&&Jt&&Gt.current.pulsate()},[B,Q,dt,Jt]);function zn(lr,lv,M_=G){return y_(sv=>(lv&&lv(sv),!M_&&Gt.current&&Gt.current[lr](sv),!0))}let bn=zn("start",Se),hi=zn("stop",le),Uf=zn("stop",ce),Qi=zn("stop",je),Ia=zn("stop",lr=>{dt&&lr.preventDefault(),ge&&ge(lr)}),$f=zn("start",Ce),ja=zn("stop",ae),Ko=zn("stop",be),ks=zn("stop",lr=>{Je(lr),Ye.current===!1&&Ot(!1),oe&&oe(lr)},!1),ql=y_(lr=>{Lt.current||(Lt.current=lr.currentTarget),Yt(lr),Ye.current===!0&&(Ot(!0),Pe&&Pe(lr)),ie&&ie(lr)}),Cu=()=>{let lr=Lt.current;return L&&L!=="button"&&!(lr.tagName==="A"&&lr.href)},Hc=ku.useRef(!1),A_=y_(lr=>{Q&&!Hc.current&&dt&&Gt.current&&lr.key===" "&&(Hc.current=!0,Gt.current.stop(lr,()=>{Gt.current.start(lr)})),lr.target===lr.currentTarget&&Cu()&&lr.key===" "&&lr.preventDefault(),Ae&&Ae(lr),lr.target===lr.currentTarget&&Cu()&&lr.key==="Enter"&&!V&&(lr.preventDefault(),re&&re(lr))}),av=y_(lr=>{Q&&lr.key===" "&&Gt.current&&dt&&!lr.defaultPrevented&&(Hc.current=!1,Gt.current.stop(lr,()=>{Gt.current.pulsate(lr)})),we&&we(lr),re&&lr.target===lr.currentTarget&&Cu()&&lr.key===" "&&!lr.defaultPrevented&&re(lr)}),Jf=L;Jf==="button"&&(Mt.href||Mt.to)&&(Jf=te);let Au={};Jf==="button"?(Au.type=it===void 0?"button":it,Au.disabled=V):(!Mt.href&&!Mt.to&&(Au.role="button"),V&&(Au["aria-disabled"]=V));let qT=IT(f,ct,Lt),Q0=H({},m,{centerRipple:_,component:L,disabled:V,disableRipple:B,disableTouchRipple:G,focusRipple:Q,tabIndex:Te,focusVisible:dt}),Vc=s7e(Q0);return(0,a7e.jsxs)(u7e,H({as:Jf,className:to(Vc.root,z),ownerState:Q0,onBlur:ks,onClick:re,onContextMenu:hi,onFocus:ql,onKeyDown:A_,onKeyUp:av,onMouseDown:bn,onMouseLeave:Ia,onMouseUp:Qi,onDragLeave:Uf,onTouchEnd:ja,onTouchMove:Ko,onTouchStart:$f,ref:qT,tabIndex:V?-1:Te,type:it},Au,Mt,{children:[C,un?(0,i7e.jsx)(t7e,H({ref:Ee,center:_},Fe)):null]}))}),p7e=c7e;ne();var f7e=O(k()),d7e=O(jg());function m7e(s){return Za("MuiTypography",s)}var RRt=Bl("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]),h7e=O(Dr()),g7e=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],v7e=s=>{let{align:f,gutterBottom:m,noWrap:w,paragraph:_,variant:C,classes:z}=s,L={root:["root",C,s.align!=="inherit"&&`align${Bn(f)}`,m&&"gutterBottom",w&&"noWrap",_&&"paragraph"]};return Hl(L,m7e,z)},y7e=fo("span",{name:"MuiTypography",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.variant&&f[m.variant],m.align!=="inherit"&&f[`align${Bn(m.align)}`],m.noWrap&&f.noWrap,m.gutterBottom&&f.gutterBottom,m.paragraph&&f.paragraph]}})(({theme:s,ownerState:f})=>H({margin:0},f.variant==="inherit"&&{font:"inherit"},f.variant!=="inherit"&&s.typography[f.variant],f.align!=="inherit"&&{textAlign:f.align},f.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},f.gutterBottom&&{marginBottom:"0.35em"},f.paragraph&&{marginBottom:16})),KZ={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},b7e={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},w7e=s=>b7e[s]||s,O7e=f7e.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiTypography"}),w=w7e(m.color),_=(0,d7e.extendSxProp)(H({},m,{color:w})),{align:C="inherit",className:z,component:L,gutterBottom:V=!1,noWrap:B=!1,paragraph:G=!1,variant:Q="body1",variantMapping:te=KZ}=_,oe=vn(_,g7e),re=H({},_,{align:C,color:w,className:z,component:L,gutterBottom:V,noWrap:B,paragraph:G,variant:Q,variantMapping:te}),le=L||(G?"p":te[Q]||KZ[Q])||"span",ce=v7e(re);return(0,h7e.jsx)(y7e,H({as:le,ref:f,ownerState:re,className:to(ce.root,z)},oe))}),YZ=O7e;function QZ({props:s,states:f,muiFormControl:m}){return f.reduce((w,_)=>(w[_]=s[_],m&&typeof s[_]>"u"&&(w[_]=m[_]),w),{})}var x7e=O(k()),_7e=x7e.createContext(void 0),ZZ=_7e,S7e=O(k());function AT(){return S7e.useContext(ZZ)}function eee(s){return s!=null&&!(Array.isArray(s)&&s.length===0)}function tee(s,f=!1){return s&&(eee(s.value)&&s.value!==""||f&&eee(s.defaultValue)&&s.defaultValue!=="")}function I7e(s){return s.startAdornment}ne();var MT=O(k()),j7e=O(Eg());ne();var E7e=O(k());function P7e(s){return Za("PrivateSwitchBase",s)}var zRt=Bl("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]),k7e=O(Dr()),C7e=O(Dr()),A7e=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],M7e=s=>{let{classes:f,checked:m,disabled:w,edge:_}=s,C={root:["root",m&&"checked",w&&"disabled",_&&`edge${Bn(_)}`],input:["input"]};return Hl(C,P7e,f)},T7e=fo(p7e)(({ownerState:s})=>H({padding:9,borderRadius:"50%"},s.edge==="start"&&{marginLeft:s.size==="small"?-3:-12},s.edge==="end"&&{marginRight:s.size==="small"?-3:-12})),R7e=fo("input",{shouldForwardProp:ev})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),z7e=E7e.forwardRef(function(s,f){let{autoFocus:m,checked:w,checkedIcon:_,className:C,defaultChecked:z,disabled:L,disableFocusRipple:V=!1,edge:B=!1,icon:G,id:Q,inputProps:te,inputRef:oe,name:re,onBlur:le,onChange:ce,onFocus:ie,readOnly:Pe,required:Ae=!1,tabIndex:we,type:Se,value:ge}=s,je=vn(s,A7e),[ae,be]=HZ({controlled:w,default:!!z,name:"SwitchBase",state:"checked"}),Ce=AT(),Te=Ee=>{ie&&ie(Ee),Ce&&Ce.onFocus&&Ce.onFocus(Ee)},Fe=Ee=>{le&&le(Ee),Ce&&Ce.onBlur&&Ce.onBlur(Ee)},Ue=Ee=>{if(Ee.nativeEvent.defaultPrevented)return;let Ye=Ee.target.checked;be(Ye),ce&&ce(Ee,Ye)},it=L;Ce&&typeof it>"u"&&(it=Ce.disabled);let Mt=Se==="checkbox"||Se==="radio",Lt=H({},s,{checked:ae,disabled:it,disableFocusRipple:V,edge:B}),Gt=M7e(Lt);return(0,C7e.jsxs)(T7e,H({component:"span",className:to(Gt.root,C),centerRipple:!0,focusRipple:!V,disabled:it,tabIndex:null,role:void 0,onFocus:Te,onBlur:Fe,ownerState:Lt,ref:f},je,{children:[(0,k7e.jsx)(R7e,H({autoFocus:m,checked:w,defaultChecked:z,className:Gt.input,disabled:it,id:Mt?Q:void 0,name:re,onChange:Ue,readOnly:Pe,ref:oe,required:Ae,ownerState:Lt,tabIndex:we,type:Se},Se==="checkbox"&&ge===void 0?{}:{value:ge},te)),ae?_:G]}))}),ree=z7e,DRt=O(k()),D7e=O(Dr()),L7e=tv((0,D7e.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),LRt=O(k()),N7e=O(Dr()),F7e=tv((0,N7e.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),NRt=O(k()),W7e=O(Dr()),B7e=tv((0,W7e.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");function H7e(s){return Za("MuiCheckbox",s)}var V7e=Bl("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]),TT=V7e,O_=O(Dr()),q7e=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size","className"],U7e=s=>{let{classes:f,indeterminate:m,color:w,size:_}=s,C={root:["root",m&&"indeterminate",`color${Bn(w)}`,`size${Bn(_)}`]},z=Hl(C,H7e,f);return H({},f,z)},$7e=fo(ree,{shouldForwardProp:s=>ev(s)||s==="classes",name:"MuiCheckbox",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.indeterminate&&f.indeterminate,f[`size${Bn(m.size)}`],m.color!=="default"&&f[`color${Bn(m.color)}`]]}})(({theme:s,ownerState:f})=>H({color:(s.vars||s).palette.text.secondary},!f.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${f.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[f.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,j7e.alpha)(f.color==="default"?s.palette.action.active:s.palette[f.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},f.color!=="default"&&{[`&.${TT.checked}, &.${TT.indeterminate}`]:{color:(s.vars||s).palette[f.color].main},[`&.${TT.disabled}`]:{color:(s.vars||s).palette.action.disabled}})),J7e=(0,O_.jsx)(F7e,{}),G7e=(0,O_.jsx)(L7e,{}),X7e=(0,O_.jsx)(B7e,{}),K7e=MT.forwardRef(function(s,f){var m,w;let _=Vl({props:s,name:"MuiCheckbox"}),{checkedIcon:C=J7e,color:z="primary",icon:L=G7e,indeterminate:V=!1,indeterminateIcon:B=X7e,inputProps:G,size:Q="medium",className:te}=_,oe=vn(_,q7e),re=V?B:L,le=V?B:C,ce=H({},_,{color:z,indeterminate:V,size:Q}),ie=U7e(ce);return(0,O_.jsx)($7e,H({type:"checkbox",inputProps:H({"data-indeterminate":V},G),icon:MT.cloneElement(re,{fontSize:(m=re.props.fontSize)!=null?m:Q}),checkedIcon:MT.cloneElement(le,{fontSize:(w=le.props.fontSize)!=null?w:Q}),ownerState:ce,ref:f,className:to(ie.root,te)},oe,{classes:ie}))}),RT=K7e;ne();var Y7e=O(k());function Q7e(s){return Za("MuiCircularProgress",s)}var FRt=Bl("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]),zT=O(Dr()),Z7e=["className","color","disableShrink","size","style","thickness","value","variant"],x_=s=>s,nee,oee,iee,aee,Fc=44,exe=(0,Wf.keyframes)(nee||(nee=x_` +`),rl.rippleVisible,o7e,MT,({theme:s})=>s.transitions.easing.easeInOut,rl.ripplePulsate,({theme:s})=>s.transitions.duration.shorter,rl.child,rl.childLeaving,i7e,MT,({theme:s})=>s.transitions.easing.easeInOut,rl.childPulsate,a7e,({theme:s})=>s.transitions.easing.easeInOut),u7e=Sa.forwardRef(function(s,f){let m=ql({props:s,name:"MuiTouchRipple"}),{center:w=!1,classes:_={},className:A}=m,z=vn(m,r7e),[N,V]=Sa.useState([]),H=Sa.useRef(0),X=Sa.useRef(null);Sa.useEffect(()=>{X.current&&(X.current(),X.current=null)},[N]);let Q=Sa.useRef(!1),te=Wwe(),oe=Sa.useRef(null),re=Sa.useRef(null),le=Sa.useCallback(Ae=>{let{pulsate:Oe,rippleX:Se,rippleY:he,rippleSize:je,cb:ae}=Ae;V(we=>[...we,(0,AT.jsx)(s7e,{classes:{ripple:to(_.ripple,rl.ripple),rippleVisible:to(_.rippleVisible,rl.rippleVisible),ripplePulsate:to(_.ripplePulsate,rl.ripplePulsate),child:to(_.child,rl.child),childLeaving:to(_.childLeaving,rl.childLeaving),childPulsate:to(_.childPulsate,rl.childPulsate)},timeout:MT,pulsate:Oe,rippleX:Se,rippleY:he,rippleSize:je},H.current)]),H.current+=1,X.current=ae},[_]),ce=Sa.useCallback((Ae={},Oe={},Se=()=>{})=>{let{pulsate:he=!1,center:je=w||Oe.pulsate,fakeElement:ae=!1}=Oe;if(Ae?.type==="mousedown"&&Q.current){Q.current=!1;return}Ae?.type==="touchstart"&&(Q.current=!0);let we=ae?null:re.current,Ce=we?we.getBoundingClientRect():{width:0,height:0,left:0,top:0},Te,We,$e;if(je||Ae===void 0||Ae.clientX===0&&Ae.clientY===0||!Ae.clientX&&!Ae.touches)Te=Math.round(Ce.width/2),We=Math.round(Ce.height/2);else{let{clientX:it,clientY:Mt}=Ae.touches&&Ae.touches.length>0?Ae.touches[0]:Ae;Te=Math.round(it-Ce.left),We=Math.round(Mt-Ce.top)}if(je)$e=Math.sqrt((2*Ce.width**2+Ce.height**2)/3),$e%2===0&&($e+=1);else{let it=Math.max(Math.abs((we?we.clientWidth:0)-Te),Te)*2+2,Mt=Math.max(Math.abs((we?we.clientHeight:0)-We),We)*2+2;$e=Math.sqrt(it**2+Mt**2)}Ae!=null&&Ae.touches?oe.current===null&&(oe.current=()=>{le({pulsate:he,rippleX:Te,rippleY:We,rippleSize:$e,cb:Se})},te.start(n7e,()=>{oe.current&&(oe.current(),oe.current=null)})):le({pulsate:he,rippleX:Te,rippleY:We,rippleSize:$e,cb:Se})},[w,le,te]),ie=Sa.useCallback(()=>{ce({},{pulsate:!0})},[ce]),Pe=Sa.useCallback((Ae,Oe)=>{if(te.clear(),Ae?.type==="touchend"&&oe.current){oe.current(),oe.current=null,te.start(0,()=>{Pe(Ae,Oe)});return}oe.current=null,V(Se=>Se.length>0?Se.slice(1):Se),X.current=Oe},[te]);return Sa.useImperativeHandle(f,()=>({pulsate:ie,start:ce,stop:Pe}),[ie,ce,Pe]),(0,AT.jsx)(l7e,B({className:to(rl.root,_.root,A),ref:re},z,{children:(0,AT.jsx)(QOe,{component:null,exit:!0,children:N})}))}),c7e=u7e;function p7e(s){return tl("MuiButtonBase",s)}var f7e=Hl("MuiButtonBase",["root","disabled","focusVisible"]),d7e=f7e,m7e=O(Dr()),h7e=O(Dr()),g7e=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],v7e=s=>{let{disabled:f,focusVisible:m,focusVisibleClassName:w,classes:_}=s,A=Vl({root:["root",f&&"disabled",m&&"focusVisible"]},p7e,_);return m&&w&&(A.root+=` ${w}`),A},y7e=fo("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(s,f)=>f.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${d7e.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),b7e=Cu.forwardRef(function(s,f){let m=ql({props:s,name:"MuiButtonBase"}),{action:w,centerRipple:_=!1,children:A,className:z,component:N="button",disabled:V=!1,disableRipple:H=!1,disableTouchRipple:X=!1,focusRipple:Q=!1,LinkComponent:te="a",onBlur:oe,onClick:re,onContextMenu:le,onDragLeave:ce,onFocus:ie,onFocusVisible:Pe,onKeyDown:Ae,onKeyUp:Oe,onMouseDown:Se,onMouseLeave:he,onMouseUp:je,onTouchEnd:ae,onTouchMove:we,onTouchStart:Ce,tabIndex:Te=0,TouchRippleProps:We,touchRippleRef:$e,type:it}=m,Mt=vn(m,g7e),Lt=Cu.useRef(null),Gt=Cu.useRef(null),Ee=ET(Gt,$e),{isFocusVisibleRef:Ye,onFocus:Yt,onBlur:Je,ref:ct}=qOe(),[dt,Ot]=Cu.useState(!1);V&&dt&&Ot(!1),Cu.useImperativeHandle(w,()=>({focusVisible:()=>{Ot(!0),Lt.current.focus()}}),[]);let[Jt,wr]=Cu.useState(!1);Cu.useEffect(()=>{wr(!0)},[]);let un=Jt&&!H&&!V;Cu.useEffect(()=>{dt&&Q&&!H&&Jt&&Gt.current.pulsate()},[H,Q,dt,Jt]);function zn(lr,uv,T_=X){return b_(cv=>(uv&&uv(cv),!T_&&Gt.current&&Gt.current[lr](cv),!0))}let bn=zn("start",Se),hi=zn("stop",le),Jf=zn("stop",ce),Qi=zn("stop",je),Ia=zn("stop",lr=>{dt&&lr.preventDefault(),he&&he(lr)}),Gf=zn("start",Ce),ja=zn("stop",ae),Ko=zn("stop",we),Cs=zn("stop",lr=>{Je(lr),Ye.current===!1&&Ot(!1),oe&&oe(lr)},!1),Ul=b_(lr=>{Lt.current||(Lt.current=lr.currentTarget),Yt(lr),Ye.current===!0&&(Ot(!0),Pe&&Pe(lr)),ie&&ie(lr)}),Au=()=>{let lr=Lt.current;return N&&N!=="button"&&!(lr.tagName==="A"&&lr.href)},qc=Cu.useRef(!1),M_=b_(lr=>{Q&&!qc.current&&dt&&Gt.current&&lr.key===" "&&(qc.current=!0,Gt.current.stop(lr,()=>{Gt.current.start(lr)})),lr.target===lr.currentTarget&&Au()&&lr.key===" "&&lr.preventDefault(),Ae&&Ae(lr),lr.target===lr.currentTarget&&Au()&&lr.key==="Enter"&&!V&&(lr.preventDefault(),re&&re(lr))}),sv=b_(lr=>{Q&&lr.key===" "&&Gt.current&&dt&&!lr.defaultPrevented&&(qc.current=!1,Gt.current.stop(lr,()=>{Gt.current.pulsate(lr)})),Oe&&Oe(lr),re&&lr.target===lr.currentTarget&&Au()&&lr.key===" "&&!lr.defaultPrevented&&re(lr)}),Xf=N;Xf==="button"&&(Mt.href||Mt.to)&&(Xf=te);let Mu={};Xf==="button"?(Mu.type=it===void 0?"button":it,Mu.disabled=V):(!Mt.href&&!Mt.to&&(Mu.role="button"),V&&(Mu["aria-disabled"]=V));let $T=ET(f,ct,Lt),tm=B({},m,{centerRipple:_,component:N,disabled:V,disableRipple:H,disableTouchRipple:X,focusRipple:Q,tabIndex:Te,focusVisible:dt}),Uc=v7e(tm);return(0,h7e.jsxs)(y7e,B({as:Xf,className:to(Uc.root,z),ownerState:tm,onBlur:Cs,onClick:re,onContextMenu:hi,onFocus:Ul,onKeyDown:M_,onKeyUp:sv,onMouseDown:bn,onMouseLeave:Ia,onMouseUp:Qi,onDragLeave:Jf,onTouchEnd:ja,onTouchMove:Ko,onTouchStart:Gf,ref:$T,tabIndex:V?-1:Te,type:it},Mu,Mt,{children:[A,un?(0,m7e.jsx)(c7e,B({ref:Ee,center:_},We)):null]}))}),w7e=b7e;ne();var O7e=O(k()),x7e=O(Pg());function _7e(s){return tl("MuiTypography",s)}var qRt=Hl("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]),S7e=O(Dr()),I7e=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],j7e=s=>{let{align:f,gutterBottom:m,noWrap:w,paragraph:_,variant:A,classes:z}=s,N={root:["root",A,s.align!=="inherit"&&`align${Hn(f)}`,m&&"gutterBottom",w&&"noWrap",_&&"paragraph"]};return Vl(N,_7e,z)},E7e=fo("span",{name:"MuiTypography",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.variant&&f[m.variant],m.align!=="inherit"&&f[`align${Hn(m.align)}`],m.noWrap&&f.noWrap,m.gutterBottom&&f.gutterBottom,m.paragraph&&f.paragraph]}})(({theme:s,ownerState:f})=>B({margin:0},f.variant==="inherit"&&{font:"inherit"},f.variant!=="inherit"&&s.typography[f.variant],f.align!=="inherit"&&{textAlign:f.align},f.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},f.gutterBottom&&{marginBottom:"0.35em"},f.paragraph&&{marginBottom:16})),tee={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},P7e={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},k7e=s=>P7e[s]||s,C7e=O7e.forwardRef(function(s,f){let m=ql({props:s,name:"MuiTypography"}),w=k7e(m.color),_=(0,x7e.extendSxProp)(B({},m,{color:w})),{align:A="inherit",className:z,component:N,gutterBottom:V=!1,noWrap:H=!1,paragraph:X=!1,variant:Q="body1",variantMapping:te=tee}=_,oe=vn(_,I7e),re=B({},_,{align:A,color:w,className:z,component:N,gutterBottom:V,noWrap:H,paragraph:X,variant:Q,variantMapping:te}),le=N||(X?"p":te[Q]||tee[Q])||"span",ce=j7e(re);return(0,S7e.jsx)(E7e,B({as:le,ref:f,ownerState:re,className:to(ce.root,z)},oe))}),ree=C7e;function nee({props:s,states:f,muiFormControl:m}){return f.reduce((w,_)=>(w[_]=s[_],m&&typeof s[_]>"u"&&(w[_]=m[_]),w),{})}var A7e=O(k()),M7e=A7e.createContext(void 0),oee=M7e,T7e=O(k());function TT(){return T7e.useContext(oee)}function iee(s){return s!=null&&!(Array.isArray(s)&&s.length===0)}function aee(s,f=!1){return s&&(iee(s.value)&&s.value!==""||f&&iee(s.defaultValue)&&s.defaultValue!=="")}function R7e(s){return s.startAdornment}ne();var RT=O(k()),z7e=O(kg());ne();var D7e=O(k());function L7e(s){return tl("PrivateSwitchBase",s)}var URt=Hl("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]),N7e=O(Dr()),F7e=O(Dr()),W7e=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],B7e=s=>{let{classes:f,checked:m,disabled:w,edge:_}=s,A={root:["root",m&&"checked",w&&"disabled",_&&`edge${Hn(_)}`],input:["input"]};return Vl(A,L7e,f)},H7e=fo(w7e)(({ownerState:s})=>B({padding:9,borderRadius:"50%"},s.edge==="start"&&{marginLeft:s.size==="small"?-3:-12},s.edge==="end"&&{marginRight:s.size==="small"?-3:-12})),V7e=fo("input",{shouldForwardProp:rv})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),q7e=D7e.forwardRef(function(s,f){let{autoFocus:m,checked:w,checkedIcon:_,className:A,defaultChecked:z,disabled:N,disableFocusRipple:V=!1,edge:H=!1,icon:X,id:Q,inputProps:te,inputRef:oe,name:re,onBlur:le,onChange:ce,onFocus:ie,readOnly:Pe,required:Ae=!1,tabIndex:Oe,type:Se,value:he}=s,je=vn(s,W7e),[ae,we]=JZ({controlled:w,default:!!z,name:"SwitchBase",state:"checked"}),Ce=TT(),Te=Ee=>{ie&&ie(Ee),Ce&&Ce.onFocus&&Ce.onFocus(Ee)},We=Ee=>{le&&le(Ee),Ce&&Ce.onBlur&&Ce.onBlur(Ee)},$e=Ee=>{if(Ee.nativeEvent.defaultPrevented)return;let Ye=Ee.target.checked;we(Ye),ce&&ce(Ee,Ye)},it=N;Ce&&typeof it>"u"&&(it=Ce.disabled);let Mt=Se==="checkbox"||Se==="radio",Lt=B({},s,{checked:ae,disabled:it,disableFocusRipple:V,edge:H}),Gt=B7e(Lt);return(0,F7e.jsxs)(H7e,B({component:"span",className:to(Gt.root,A),centerRipple:!0,focusRipple:!V,disabled:it,tabIndex:null,role:void 0,onFocus:Te,onBlur:We,ownerState:Lt,ref:f},je,{children:[(0,N7e.jsx)(V7e,B({autoFocus:m,checked:w,defaultChecked:z,className:Gt.input,disabled:it,id:Mt?Q:void 0,name:re,onChange:$e,readOnly:Pe,ref:oe,required:Ae,ownerState:Lt,tabIndex:Oe,type:Se},Se==="checkbox"&&he===void 0?{}:{value:he},te)),ae?_:X]}))}),lee=q7e,$Rt=O(k()),U7e=O(Dr()),$7e=nv((0,U7e.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),JRt=O(k()),J7e=O(Dr()),G7e=nv((0,J7e.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),GRt=O(k()),X7e=O(Dr()),K7e=nv((0,X7e.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");function Y7e(s){return tl("MuiCheckbox",s)}var Q7e=Hl("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]),zT=Q7e,x_=O(Dr()),Z7e=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size","className"],exe=s=>{let{classes:f,indeterminate:m,color:w,size:_}=s,A={root:["root",m&&"indeterminate",`color${Hn(w)}`,`size${Hn(_)}`]},z=Vl(A,Y7e,f);return B({},f,z)},txe=fo(lee,{shouldForwardProp:s=>rv(s)||s==="classes",name:"MuiCheckbox",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.indeterminate&&f.indeterminate,f[`size${Hn(m.size)}`],m.color!=="default"&&f[`color${Hn(m.color)}`]]}})(({theme:s,ownerState:f})=>B({color:(s.vars||s).palette.text.secondary},!f.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${f.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[f.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,z7e.alpha)(f.color==="default"?s.palette.action.active:s.palette[f.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},f.color!=="default"&&{[`&.${zT.checked}, &.${zT.indeterminate}`]:{color:(s.vars||s).palette[f.color].main},[`&.${zT.disabled}`]:{color:(s.vars||s).palette.action.disabled}})),rxe=(0,x_.jsx)(G7e,{}),nxe=(0,x_.jsx)($7e,{}),oxe=(0,x_.jsx)(K7e,{}),ixe=RT.forwardRef(function(s,f){var m,w;let _=ql({props:s,name:"MuiCheckbox"}),{checkedIcon:A=rxe,color:z="primary",icon:N=nxe,indeterminate:V=!1,indeterminateIcon:H=oxe,inputProps:X,size:Q="medium",className:te}=_,oe=vn(_,Z7e),re=V?H:N,le=V?H:A,ce=B({},_,{color:z,indeterminate:V,size:Q}),ie=exe(ce);return(0,x_.jsx)(txe,B({type:"checkbox",inputProps:B({"data-indeterminate":V},X),icon:RT.cloneElement(re,{fontSize:(m=re.props.fontSize)!=null?m:Q}),checkedIcon:RT.cloneElement(le,{fontSize:(w=le.props.fontSize)!=null?w:Q}),ownerState:ce,ref:f,className:to(ie.root,te)},oe,{classes:ie}))}),DT=ixe;ne();var axe=O(k());function lxe(s){return tl("MuiCircularProgress",s)}var XRt=Hl("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]),LT=O(Dr()),sxe=["className","color","disableShrink","size","style","thickness","value","variant"],__=s=>s,see,uee,cee,pee,Bc=44,uxe=(0,Hf.keyframes)(see||(see=__` 0% { transform: rotate(0deg); } @@ -602,7 +592,7 @@ Add a component higher in the tree to provide a loading 100% { transform: rotate(360deg); } -`)),txe=(0,Wf.keyframes)(oee||(oee=x_` +`)),cxe=(0,Hf.keyframes)(uee||(uee=__` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; @@ -617,15 +607,15 @@ Add a component higher in the tree to provide a loading stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } -`)),rxe=s=>{let{classes:f,variant:m,color:w,disableShrink:_}=s,C={root:["root",m,`color${Bn(w)}`],svg:["svg"],circle:["circle",`circle${Bn(m)}`,_&&"circleDisableShrink"]};return Hl(C,Q7e,f)},nxe=fo("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,f[m.variant],f[`color${Bn(m.color)}`]]}})(({ownerState:s,theme:f})=>H({display:"inline-block"},s.variant==="determinate"&&{transition:f.transitions.create("transform")},s.color!=="inherit"&&{color:(f.vars||f).palette[s.color].main}),({ownerState:s})=>s.variant==="indeterminate"&&(0,Wf.css)(iee||(iee=x_` +`)),pxe=s=>{let{classes:f,variant:m,color:w,disableShrink:_}=s,A={root:["root",m,`color${Hn(w)}`],svg:["svg"],circle:["circle",`circle${Hn(m)}`,_&&"circleDisableShrink"]};return Vl(A,lxe,f)},fxe=fo("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,f[m.variant],f[`color${Hn(m.color)}`]]}})(({ownerState:s,theme:f})=>B({display:"inline-block"},s.variant==="determinate"&&{transition:f.transitions.create("transform")},s.color!=="inherit"&&{color:(f.vars||f).palette[s.color].main}),({ownerState:s})=>s.variant==="indeterminate"&&(0,Hf.css)(cee||(cee=__` animation: ${0} 1.4s linear infinite; - `),exe)),oxe=fo("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(s,f)=>f.svg})({display:"block"}),ixe=fo("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.circle,f[`circle${Bn(m.variant)}`],m.disableShrink&&f.circleDisableShrink]}})(({ownerState:s,theme:f})=>H({stroke:"currentColor"},s.variant==="determinate"&&{transition:f.transitions.create("stroke-dashoffset")},s.variant==="indeterminate"&&{strokeDasharray:"80px, 200px",strokeDashoffset:0}),({ownerState:s})=>s.variant==="indeterminate"&&!s.disableShrink&&(0,Wf.css)(aee||(aee=x_` + `),uxe)),dxe=fo("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(s,f)=>f.svg})({display:"block"}),mxe=fo("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.circle,f[`circle${Hn(m.variant)}`],m.disableShrink&&f.circleDisableShrink]}})(({ownerState:s,theme:f})=>B({stroke:"currentColor"},s.variant==="determinate"&&{transition:f.transitions.create("stroke-dashoffset")},s.variant==="indeterminate"&&{strokeDasharray:"80px, 200px",strokeDashoffset:0}),({ownerState:s})=>s.variant==="indeterminate"&&!s.disableShrink&&(0,Hf.css)(pee||(pee=__` animation: ${0} 1.4s ease-in-out infinite; - `),txe)),axe=Y7e.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiCircularProgress"}),{className:w,color:_="primary",disableShrink:C=!1,size:z=40,style:L,thickness:V=3.6,value:B=0,variant:G="indeterminate"}=m,Q=vn(m,Z7e),te=H({},m,{color:_,disableShrink:C,size:z,thickness:V,value:B,variant:G}),oe=rxe(te),re={},le={},ce={};if(G==="determinate"){let ie=2*Math.PI*((Fc-V)/2);re.strokeDasharray=ie.toFixed(3),ce["aria-valuenow"]=Math.round(B),re.strokeDashoffset=`${((100-B)/100*ie).toFixed(3)}px`,le.transform="rotate(-90deg)"}return(0,zT.jsx)(nxe,H({className:to(oe.root,w),style:H({width:z,height:z},le,L),ownerState:te,ref:f,role:"progressbar"},ce,Q,{children:(0,zT.jsx)(oxe,{className:oe.svg,ownerState:te,viewBox:`${Fc/2} ${Fc/2} ${Fc} ${Fc}`,children:(0,zT.jsx)(ixe,{className:oe.circle,style:re,ownerState:te,cx:Fc,cy:Fc,r:(Fc-V)/2,fill:"none",strokeWidth:V})})}))}),lxe=axe;ne();var Vf=O(k());function sxe(s){return Za("MuiFormControl",s)}var WRt=Bl("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]),lee=O(Dr()),uxe=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],cxe=s=>{let{classes:f,margin:m,fullWidth:w}=s,_={root:["root",m!=="none"&&`margin${Bn(m)}`,w&&"fullWidth"]};return Hl(_,sxe,f)},pxe=fo("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:s},f)=>H({},f.root,f[`margin${Bn(s.margin)}`],s.fullWidth&&f.fullWidth)})(({ownerState:s})=>H({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},s.margin==="normal"&&{marginTop:16,marginBottom:8},s.margin==="dense"&&{marginTop:8,marginBottom:4},s.fullWidth&&{width:"100%"})),fxe=Vf.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiFormControl"}),{children:w,className:_,color:C="primary",component:z="div",disabled:L=!1,error:V=!1,focused:B,fullWidth:G=!1,hiddenLabel:Q=!1,margin:te="none",required:oe=!1,size:re="medium",variant:le="outlined"}=m,ce=vn(m,uxe),ie=H({},m,{color:C,component:z,disabled:L,error:V,fullWidth:G,hiddenLabel:Q,margin:te,required:oe,size:re,variant:le}),Pe=cxe(ie),[Ae,we]=Vf.useState(()=>{let Fe=!1;return w&&Vf.Children.forEach(w,Ue=>{if(!ST(Ue,["Input","Select"]))return;let it=ST(Ue,["Select"])?Ue.props.input:Ue;it&&I7e(it.props)&&(Fe=!0)}),Fe}),[Se,ge]=Vf.useState(()=>{let Fe=!1;return w&&Vf.Children.forEach(w,Ue=>{ST(Ue,["Input","Select"])&&(tee(Ue.props,!0)||tee(Ue.props.inputProps,!0))&&(Fe=!0)}),Fe}),[je,ae]=Vf.useState(!1);L&&je&&ae(!1);let be=B!==void 0&&!L?B:je,Ce,Te=Vf.useMemo(()=>({adornedStart:Ae,setAdornedStart:we,color:C,disabled:L,error:V,filled:Se,focused:be,fullWidth:G,hiddenLabel:Q,size:re,onBlur:()=>{ae(!1)},onEmpty:()=>{ge(!1)},onFilled:()=>{ge(!0)},onFocus:()=>{ae(!0)},registerEffect:Ce,required:oe,variant:le}),[Ae,C,L,V,Se,be,G,Q,Ce,oe,re,le]);return(0,lee.jsx)(ZZ.Provider,{value:Te,children:(0,lee.jsx)(pxe,H({as:z,ownerState:ie,className:to(Pe.root,_),ref:f},ce,{children:w}))})}),dxe=fxe;ne();var see=O(k()),mxe=Xwe({createStyledComponent:fo("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,f)=>f.root}),useThemeProps:s=>Vl({props:s,name:"MuiStack"})}),hxe=mxe;function gxe(s){return Za("MuiFormControlLabel",s)}var vxe=Bl("MuiFormControlLabel",["root","labelPlacementStart","labelPlacementTop","labelPlacementBottom","disabled","label","error","required","asterisk"]),nv=vxe,yxe=O(Dr()),DT=O(Dr()),bxe=["checked","className","componentsProps","control","disabled","disableTypography","inputRef","label","labelPlacement","name","onChange","required","slotProps","value"],wxe=s=>{let{classes:f,disabled:m,labelPlacement:w,error:_,required:C}=s,z={root:["root",m&&"disabled",`labelPlacement${Bn(w)}`,_&&"error",C&&"required"],label:["label",m&&"disabled"],asterisk:["asterisk",_&&"error"]};return Hl(z,gxe,f)},Oxe=fo("label",{name:"MuiFormControlLabel",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[{[`& .${nv.label}`]:f.label},f.root,f[`labelPlacement${Bn(m.labelPlacement)}`]]}})(({theme:s,ownerState:f})=>H({display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16,[`&.${nv.disabled}`]:{cursor:"default"}},f.labelPlacement==="start"&&{flexDirection:"row-reverse",marginLeft:16,marginRight:-11},f.labelPlacement==="top"&&{flexDirection:"column-reverse",marginLeft:16},f.labelPlacement==="bottom"&&{flexDirection:"column",marginLeft:16},{[`& .${nv.label}`]:{[`&.${nv.disabled}`]:{color:(s.vars||s).palette.text.disabled}}})),xxe=fo("span",{name:"MuiFormControlLabel",slot:"Asterisk",overridesResolver:(s,f)=>f.asterisk})(({theme:s})=>({[`&.${nv.error}`]:{color:(s.vars||s).palette.error.main}})),_xe=see.forwardRef(function(s,f){var m,w;let _=Vl({props:s,name:"MuiFormControlLabel"}),{className:C,componentsProps:z={},control:L,disabled:V,disableTypography:B,label:G,labelPlacement:Q="end",required:te,slotProps:oe={}}=_,re=vn(_,bxe),le=AT(),ce=(m=V??L.props.disabled)!=null?m:le?.disabled,ie=te??L.props.required,Pe={disabled:ce,required:ie};["checked","name","onChange","value","inputRef"].forEach(ae=>{typeof L.props[ae]>"u"&&typeof _[ae]<"u"&&(Pe[ae]=_[ae])});let Ae=QZ({props:_,muiFormControl:le,states:["error"]}),we=H({},_,{disabled:ce,labelPlacement:Q,required:ie,error:Ae.error}),Se=wxe(we),ge=(w=oe.typography)!=null?w:z.typography,je=G;return je!=null&&je.type!==YZ&&!B&&(je=(0,yxe.jsx)(YZ,H({component:"span"},ge,{className:to(Se.label,ge?.className),children:je}))),(0,DT.jsxs)(Oxe,H({className:to(Se.root,C),ownerState:we,ref:f},re,{children:[see.cloneElement(L,Pe),ie?(0,DT.jsxs)(hxe,{display:"block",children:[je,(0,DT.jsxs)(xxe,{ownerState:we,"aria-hidden":!0,className:Se.asterisk,children:["\u2009","*"]})]}):je]}))}),ov=_xe;ne();var Sxe=O(k());function Ixe(s){return Za("MuiFormGroup",s)}var BRt=Bl("MuiFormGroup",["root","row","error"]),jxe=O(Dr()),Exe=["className","row"],Pxe=s=>{let{classes:f,row:m,error:w}=s;return Hl({root:["root",m&&"row",w&&"error"]},Ixe,f)},kxe=fo("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.row&&f.row]}})(({ownerState:s})=>H({display:"flex",flexDirection:"column",flexWrap:"wrap"},s.row&&{flexDirection:"row"})),Cxe=Sxe.forwardRef(function(s,f){let m=Vl({props:s,name:"MuiFormGroup"}),{className:w,row:_=!1}=m,C=vn(m,Exe),z=AT(),L=QZ({props:m,muiFormControl:z,states:["error"]}),V=H({},m,{row:_,error:L.error}),B=Pxe(V);return(0,jxe.jsx)(kxe,H({className:to(B.root,w),ownerState:V,ref:f},C))}),Axe=Cxe;ne();var LT=O(k()),Mxe=O(Eg());ne();var HRt=O(k()),VRt=O(k()),Txe=O(Dr()),Rxe=tv((0,Txe.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),qRt=O(k()),zxe=O(Dr()),Dxe=tv((0,zxe.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked"),uee=O(Dr()),Lxe=O(Dr()),Nxe=fo("span",{shouldForwardProp:ev})({position:"relative",display:"flex"}),Fxe=fo(Rxe)({transform:"scale(1)"}),Wxe=fo(Dxe)(({theme:s,ownerState:f})=>H({left:0,position:"absolute",transform:"scale(0)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeIn,duration:s.transitions.duration.shortest})},f.checked&&{transform:"scale(1)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeOut,duration:s.transitions.duration.shortest})}));function Bxe(s){let{checked:f=!1,classes:m={},fontSize:w}=s,_=H({},s,{checked:f});return(0,Lxe.jsxs)(Nxe,{className:m.root,ownerState:_,children:[(0,uee.jsx)(Fxe,{fontSize:w,className:m.background,ownerState:_}),(0,uee.jsx)(Wxe,{fontSize:w,className:m.dot,ownerState:_})]})}var cee=Bxe,Hxe=O(k()),Vxe=O(k()),qxe=Vxe.createContext(void 0),pee=qxe;function Uxe(){return Hxe.useContext(pee)}function $xe(s){return Za("MuiRadio",s)}var Jxe=Bl("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary","sizeSmall"]),fee=Jxe,NT=O(Dr()),Gxe=["checked","checkedIcon","color","icon","name","onChange","size","className"],Xxe=s=>{let{classes:f,color:m,size:w}=s,_={root:["root",`color${Bn(m)}`,w!=="medium"&&`size${Bn(w)}`]};return H({},f,Hl(_,$xe,f))},Kxe=fo(ree,{shouldForwardProp:s=>ev(s)||s==="classes",name:"MuiRadio",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.size!=="medium"&&f[`size${Bn(m.size)}`],f[`color${Bn(m.color)}`]]}})(({theme:s,ownerState:f})=>H({color:(s.vars||s).palette.text.secondary},!f.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${f.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[f.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,Mxe.alpha)(f.color==="default"?s.palette.action.active:s.palette[f.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},f.color!=="default"&&{[`&.${fee.checked}`]:{color:(s.vars||s).palette[f.color].main}},{[`&.${fee.disabled}`]:{color:(s.vars||s).palette.action.disabled}}));function Yxe(s,f){return typeof f=="object"&&f!==null?s===f:String(s)===String(f)}var dee=(0,NT.jsx)(cee,{checked:!0}),mee=(0,NT.jsx)(cee,{}),Qxe=LT.forwardRef(function(s,f){var m,w;let _=Vl({props:s,name:"MuiRadio"}),{checked:C,checkedIcon:z=dee,color:L="primary",icon:V=mee,name:B,onChange:G,size:Q="medium",className:te}=_,oe=vn(_,Gxe),re=H({},_,{color:L,size:Q}),le=Xxe(re),ce=Uxe(),ie=C,Pe=jOe(G,ce&&ce.onChange),Ae=B;return ce&&(typeof ie>"u"&&(ie=Yxe(ce.value,_.value)),typeof Ae>"u"&&(Ae=ce.name)),(0,NT.jsx)(Kxe,H({type:"radio",icon:LT.cloneElement(V,{fontSize:(m=mee.props.fontSize)!=null?m:Q}),checkedIcon:LT.cloneElement(z,{fontSize:(w=dee.props.fontSize)!=null?w:Q}),ownerState:re,classes:le,name:Ae,checked:ie,onChange:Pe,ref:f,className:to(le.root,te)},oe))}),hee=Qxe;ne();var __=O(k()),gee=O(Dr()),Zxe=["actions","children","defaultValue","name","onChange","value"],e8e=__.forwardRef(function(s,f){let{actions:m,children:w,defaultValue:_,name:C,onChange:z,value:L}=s,V=vn(s,Zxe),B=__.useRef(null),[G,Q]=HZ({controlled:L,default:_,name:"RadioGroup"});__.useImperativeHandle(m,()=>({focus:()=>{let le=B.current.querySelector("input:not(:disabled):checked");le||(le=B.current.querySelector("input:not(:disabled)")),le&&le.focus()}}),[]);let te=IT(f,B),oe=ROe(C),re=__.useMemo(()=>({name:oe,onChange(le){Q(le.target.value),z&&z(le,le.target.value)},value:G}),[oe,z,Q,G]);return(0,gee.jsx)(pee.Provider,{value:re,children:(0,gee.jsx)(Axe,H({role:"radiogroup",ref:te},V,{children:w}))})}),t8e=e8e,Wc=O(k()),r8e=zZ({palette:{primary:{main:"#00827c"}}}),FT=O(Dr());function n8e({expandable:s,expanded:f,highlight:m,isLast:w,children:_,onClick:C}){let z=["jstree-node"];return f?z.push("jstree-open"):z.push("jstree-closed"),s||z.push("jstree-leaf"),w&&z.push("jstree-last"),m&&(_=(0,FT.jsx)("span",{className:"jstree-clicked",children:_})),(0,FT.jsxs)("li",{role:"treeitem",className:z.join(" "),children:[(0,FT.jsx)("i",{className:"jstree-icon jstree-ocl",role:"presentation",onClick:C}),_]})}var sn=O(Dr());function o8e({ontology:s,entityType:f,selectedEntity:m,lang:w,onNavigateToEntity:_,onNavigateToOntology:C,apiUrl:z}){let L=Iu(),V=To(je=>je.ontologies.nodesWithChildrenLoaded),B=To(je=>je.ontologies.nodeChildren),G=To(je=>je.ontologies.rootNodes),Q=To(je=>je.ontologies.numPendingTreeRequests),te=To(je=>je.ontologies.preferredRoots),oe=To(je=>je.ontologies.automaticallyExpandedNodes),re=To(je=>je.ontologies.manuallyExpandedNodes),le=m?m.isDeprecated():To(je=>je.ontologies.displayObsolete),ce=To(je=>je.ontologies.displaySiblings),ie=To(je=>je.ontologies.displayCounts),Pe=(0,Wc.useCallback)(je=>{let ae=re.indexOf(je.absoluteIdentity)!==-1||oe.indexOf(je.absoluteIdentity)!==-1;L(ae?ZQ(je):QQ(je))},[L,JSON.stringify(oe),JSON.stringify(re)]);(0,Wc.useEffect)(()=>{L(XQ({entityType:f,selectedEntity:m}))},[L,s.getOntologyId(),f,m?.getIri()]),(0,Wc.useEffect)(()=>{L(GQ())},[L,s.getOntologyId(),f,JSON.stringify(m),le,te,w]),(0,Wc.useEffect)(()=>{if(m){let je=m.getIri(),ae=L(i_({ontologyId:s.getOntologyId(),entityType:m.getTypePlural(),entityIri:je,lang:w,showObsoleteEnabled:le,showSiblingsEnabled:ce,apiUrl:z}));return()=>ae.abort()}else{let je=L(a_({ontologyId:s.getOntologyId(),entityType:f,preferredRoots:te,lang:w,showObsoleteEnabled:le,apiUrl:z}));return()=>je.abort()}},[L,f,JSON.stringify(m),s.getOntologyId(),te,w,le]),(0,Wc.useEffect)(()=>{let je=re.filter(be=>V.indexOf(be)===-1);ce&&(je=[...je,...oe.filter(be=>V.indexOf(be)===-1)]);let ae=[];for(let be of je)ae.push(L(l_({ontologyId:s.getOntologyId(),entityTypePlural:m?.getTypePlural()||f,entityIri:be.split(";").pop(),absoluteIdentity:be,lang:w,showObsoleteEnabled:le,apiUrl:z})));return()=>{for(let be of ae)be.abort()}},[L,w,JSON.stringify(re),JSON.stringify(oe),JSON.stringify(B),s.getOntologyId(),f,te,le,ce]);let Ae=(0,Wc.useCallback)(()=>{L(le?tZ():eZ())},[L,le]),we=(0,Wc.useCallback)(()=>{L(ce?nZ():rZ())},[L,ce]),Se=(0,Wc.useCallback)(()=>{L(ie?iZ():oZ())},[L,ie]);function ge(je,ae){if(ae>100)throw new Error("probable cyclic tree (renderNodeChildren)");let be=[...je];be.sort((Te,Fe)=>{let Ue=Te?.title?Te.title.toString().toUpperCase():"",it=Fe?.title?Fe.title.toString().toUpperCase():"";return Ue===it?0:Ue>it?1:-1});let Ce=be.filter((Te,Fe,Ue)=>!Fe||Te.absoluteIdentity!==Ue[Fe-1].absoluteIdentity);return(0,sn.jsx)("ul",{role:"group",className:"jstree-container-ul jstree-children jstree-no-icons",children:Ce.map((Te,Fe)=>{let Ue=re.indexOf(Te.absoluteIdentity)!==-1||oe.indexOf(Te.absoluteIdentity)!==-1,it=Fe===Ce.length-1,Mt=m&&Te.iri===m.getIri()||!1;return(0,sn.jsxs)(n8e,{expandable:Te.expandable,expanded:Ue,highlight:Mt,isLast:it,onClick:()=>{Pe(Te)},children:[Te.childRelationToParent==="http://purl.obolibrary.org/obo/BFO_0000050"&&(0,sn.jsx)("img",{className:"mr-1",src:ZM("/","/part.svg"),style:{height:"1em",display:"inline"}}),Te.childRelationToParent==="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&(0,sn.jsx)("img",{className:"mr-1",src:ZM("/","/instance.svg"),style:{height:"1em",display:"inline"}}),(0,sn.jsx)(i8e,{ontology:s,entity:Te.entity,title:Te.title,lang:w,onNavigateToEntity:_,onNavigateToOntology:C}),!le&&ie&&Te.numDescendants>0&&(0,sn.jsx)("span",{style:{color:"gray"},children:" ("+Te.numDescendants.toLocaleString()+")"}),Ue&&ge(B[Te.absoluteIdentity]||[],ae+1)]},g4e())})})}return(0,sn.jsx)(Cf,{theme:r8e,children:(0,sn.jsxs)("div",{className:"flex flex-col-reverse lg:grid lg:grid-cols-3 lg:gap-4",children:[G?(0,sn.jsxs)("div",{className:"lg:col-span-2 relative",children:[(0,sn.jsx)("div",{className:"px-3 pb-3 jstree jstree-1 jstree-proton overflow-x-auto",role:"tree",children:ge(G,0)}),Q>0?(0,sn.jsx)("div",{className:"absolute spinner-default w-7 h-7 -top-1 -left-4 z-auto"}):null]}):null,(0,sn.jsxs)("div",{className:"lg:col-span-1 flex flex-col bg-white px-2 mb-2 rounded-lg",children:[f==="classes"&&s.getPreferredRoots().length>0&&(0,sn.jsx)("div",{className:"mb-2",children:(0,sn.jsx)(dxe,{children:(0,sn.jsxs)(t8e,{name:"radio-buttons-group",value:te?"true":"false",children:[(0,sn.jsx)(ov,{value:"true",onClick:()=>L(KQ()),control:(0,sn.jsx)(hee,{}),label:"Preferred roots"}),(0,sn.jsx)(ov,{value:"false",onClick:()=>L(YQ()),control:(0,sn.jsx)(hee,{}),label:"All classes"})]})})}),(0,sn.jsx)(ov,{control:(0,sn.jsx)(RT,{disabled:le,checked:!le&&ie,onClick:Se}),label:"Show counts"}),(0,sn.jsx)(ov,{control:(0,sn.jsx)(RT,{checked:le,onClick:Ae}),label:"Show obsolete terms"}),m&&(0,sn.jsx)(ov,{control:(0,sn.jsx)(RT,{checked:ce,onClick:we}),label:"Show all siblings"})]})]})})}function i8e({ontology:s,entity:f,title:m,lang:w,onNavigateToEntity:_,onNavigateToOntology:C}){let z=f.getDefinedBy();return z.indexOf(s.getOntologyId())!==-1&&(z=[]),(0,sn.jsxs)("span",{children:[(0,sn.jsx)("a",{title:f.getIri(),className:"link-default",onClick:()=>_(s,f),children:m}),z.length>0&&z.map(L=>(0,sn.jsx)("span",{onClick:()=>C(L,f),title:L.toUpperCase(),className:"mx-1 link-ontology px-2 py-0.5 rounded-md text-sm text-white uppercase ml-1",children:L}))]})}var S_=function(){function s(){this.listeners=[]}var f=s.prototype;return f.subscribe=function(m){var w=this,_=m||function(){};return this.listeners.push(_),this.onSubscribe(),function(){w.listeners=w.listeners.filter(function(C){return C!==_}),w.onUnsubscribe()}},f.hasListeners=function(){return this.listeners.length>0},f.onSubscribe=function(){},f.onUnsubscribe=function(){},s}();ne();var vee=typeof window>"u";function Ri(){}function a8e(s,f){return typeof s=="function"?s(f):s}function l8e(s){return typeof s=="number"&&s>=0&&s!==1/0}function I_(s){return Array.isArray(s)?s:[s]}function s8e(s,f){return Math.max(s+(f||0)-Date.now(),0)}function WT(s,f,m){return E_(s)?typeof f=="function"?H({},m,{queryKey:s,queryFn:f}):H({},f,{queryKey:s}):s}function Bc(s,f,m){return E_(s)?[H({},f,{queryKey:s}),m]:[s||{},f]}function u8e(s,f){if(s===!0&&f===!0||s==null&&f==null)return"all";if(s===!1&&f===!1)return"none";var m=s??!f;return m?"active":"inactive"}function yee(s,f){var m=s.active,w=s.exact,_=s.fetching,C=s.inactive,z=s.predicate,L=s.queryKey,V=s.stale;if(E_(L)){if(w){if(f.queryHash!==BT(L,f.options))return!1}else if(!j_(f.queryKey,L))return!1}var B=u8e(m,C);if(B==="none")return!1;if(B!=="all"){var G=f.isActive();if(B==="active"&&!G||B==="inactive"&&G)return!1}return!(typeof V=="boolean"&&f.isStale()!==V||typeof _=="boolean"&&f.isFetching()!==_||z&&!z(f))}function bee(s,f){var m=s.exact,w=s.fetching,_=s.predicate,C=s.mutationKey;if(E_(C)){if(!f.options.mutationKey)return!1;if(m){if(qf(f.options.mutationKey)!==qf(C))return!1}else if(!j_(f.options.mutationKey,C))return!1}return!(typeof w=="boolean"&&f.state.status==="loading"!==w||_&&!_(f))}function BT(s,f){var m=f?.queryKeyHashFn||qf;return m(s)}function qf(s){var f=I_(s);return c8e(f)}function c8e(s){return JSON.stringify(s,function(f,m){return HT(m)?Object.keys(m).sort().reduce(function(w,_){return w[_]=m[_],w},{}):m})}function j_(s,f){return wee(I_(s),I_(f))}function wee(s,f){return s===f?!0:typeof s!=typeof f?!1:s&&f&&typeof s=="object"&&typeof f=="object"?!Object.keys(f).some(function(m){return!wee(s[m],f[m])}):!1}function Oee(s,f){if(s===f)return s;var m=Array.isArray(s)&&Array.isArray(f);if(m||HT(s)&&HT(f)){for(var w=m?s.length:Object.keys(s).length,_=m?f:Object.keys(f),C=_.length,z=m?[]:{},L=0,V=0;V"u")return!0;var m=f.prototype;return!(!xee(m)||!m.hasOwnProperty("isPrototypeOf"))}function xee(s){return Object.prototype.toString.call(s)==="[object Object]"}function E_(s){return typeof s=="string"||Array.isArray(s)}function p8e(s){return new Promise(function(f){setTimeout(f,s)})}function _ee(s){Promise.resolve().then(s).catch(function(f){return setTimeout(function(){throw f})})}function See(){if(typeof AbortController=="function")return new AbortController}var f8e=function(s){rv(f,s);function f(){var w;return w=s.call(this)||this,w.setup=function(_){var C;if(!vee&&(C=window)!=null&&C.addEventListener){var z=function(){return _()};return window.addEventListener("visibilitychange",z,!1),window.addEventListener("focus",z,!1),function(){window.removeEventListener("visibilitychange",z),window.removeEventListener("focus",z)}}},w}var m=f.prototype;return m.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},m.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},m.setEventListener=function(w){var _,C=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(z){typeof z=="boolean"?C.setFocused(z):C.onFocus()})},m.setFocused=function(w){this.focused=w,w&&this.onFocus()},m.onFocus=function(){this.listeners.forEach(function(w){w()})},m.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},f}(S_),P_=new f8e,d8e=function(s){rv(f,s);function f(){var w;return w=s.call(this)||this,w.setup=function(_){var C;if(!vee&&(C=window)!=null&&C.addEventListener){var z=function(){return _()};return window.addEventListener("online",z,!1),window.addEventListener("offline",z,!1),function(){window.removeEventListener("online",z),window.removeEventListener("offline",z)}}},w}var m=f.prototype;return m.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},m.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},m.setEventListener=function(w){var _,C=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(z){typeof z=="boolean"?C.setOnline(z):C.onOnline()})},m.setOnline=function(w){this.online=w,w&&this.onOnline()},m.onOnline=function(){this.listeners.forEach(function(w){w()})},m.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},f}(S_),k_=new d8e;function m8e(s){return Math.min(1e3*Math.pow(2,s),3e4)}function C_(s){return typeof s?.cancel=="function"}var Iee=function(s){this.revert=s?.revert,this.silent=s?.silent};function VT(s){return s instanceof Iee}var jee=function(s){var f=this,m=!1,w,_,C,z;this.abort=s.abort,this.cancel=function(Q){return w?.(Q)},this.cancelRetry=function(){m=!0},this.continueRetry=function(){m=!1},this.continue=function(){return _?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(Q,te){C=Q,z=te});var L=function(Q){f.isResolved||(f.isResolved=!0,s.onSuccess==null||s.onSuccess(Q),_?.(),C(Q))},V=function(Q){f.isResolved||(f.isResolved=!0,s.onError==null||s.onError(Q),_?.(),z(Q))},B=function(){return new Promise(function(Q){_=Q,f.isPaused=!0,s.onPause==null||s.onPause()}).then(function(){_=void 0,f.isPaused=!1,s.onContinue==null||s.onContinue()})},G=function Q(){if(!f.isResolved){var te;try{te=s.fn()}catch(oe){te=Promise.reject(oe)}w=function(oe){if(!f.isResolved&&(V(new Iee(oe)),f.abort==null||f.abort(),C_(te)))try{te.cancel()}catch{}},f.isTransportCancelable=C_(te),Promise.resolve(te).then(L).catch(function(oe){var re,le;if(!f.isResolved){var ce=(re=s.retry)!=null?re:3,ie=(le=s.retryDelay)!=null?le:m8e,Pe=typeof ie=="function"?ie(f.failureCount,oe):ie,Ae=ce===!0||typeof ce=="number"&&f.failureCount"u"&&(z.exact=!0),this.queries.find(function(L){return yee(z,L)})},m.findAll=function(w,_){var C=Bc(w,_),z=C[0];return Object.keys(z).length>0?this.queries.filter(function(L){return yee(z,L)}):this.queries},m.notify=function(w){var _=this;Xo.batch(function(){_.listeners.forEach(function(C){C(w)})})},m.onFocus=function(){var w=this;Xo.batch(function(){w.queries.forEach(function(_){_.onFocus()})})},m.onOnline=function(){var w=this;Xo.batch(function(){w.queries.forEach(function(_){_.onOnline()})})},f}(S_);ne(),ne();var b8e=function(){function s(m){this.options=H({},m.defaultOptions,m.options),this.mutationId=m.mutationId,this.mutationCache=m.mutationCache,this.observers=[],this.state=m.state||w8e(),this.meta=m.meta}var f=s.prototype;return f.setState=function(m){this.dispatch({type:"setState",state:m})},f.addObserver=function(m){this.observers.indexOf(m)===-1&&this.observers.push(m)},f.removeObserver=function(m){this.observers=this.observers.filter(function(w){return w!==m})},f.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Ri).catch(Ri)):Promise.resolve()},f.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},f.execute=function(){var m=this,w,_=this.state.status==="loading",C=Promise.resolve();return _||(this.dispatch({type:"loading",variables:this.options.variables}),C=C.then(function(){m.mutationCache.config.onMutate==null||m.mutationCache.config.onMutate(m.state.variables,m)}).then(function(){return m.options.onMutate==null?void 0:m.options.onMutate(m.state.variables)}).then(function(z){z!==m.state.context&&m.dispatch({type:"loading",context:z,variables:m.state.variables})})),C.then(function(){return m.executeMutation()}).then(function(z){w=z,m.mutationCache.config.onSuccess==null||m.mutationCache.config.onSuccess(w,m.state.variables,m.state.context,m)}).then(function(){return m.options.onSuccess==null?void 0:m.options.onSuccess(w,m.state.variables,m.state.context)}).then(function(){return m.options.onSettled==null?void 0:m.options.onSettled(w,null,m.state.variables,m.state.context)}).then(function(){return m.dispatch({type:"success",data:w}),w}).catch(function(z){return m.mutationCache.config.onError==null||m.mutationCache.config.onError(z,m.state.variables,m.state.context,m),Pee().error(z),Promise.resolve().then(function(){return m.options.onError==null?void 0:m.options.onError(z,m.state.variables,m.state.context)}).then(function(){return m.options.onSettled==null?void 0:m.options.onSettled(void 0,z,m.state.variables,m.state.context)}).then(function(){throw m.dispatch({type:"error",error:z}),z})})},f.executeMutation=function(){var m=this,w;return this.retryer=new jee({fn:function(){return m.options.mutationFn?m.options.mutationFn(m.state.variables):Promise.reject("No mutationFn found")},onFail:function(){m.dispatch({type:"failed"})},onPause:function(){m.dispatch({type:"pause"})},onContinue:function(){m.dispatch({type:"continue"})},retry:(w=this.options.retry)!=null?w:0,retryDelay:this.options.retryDelay}),this.retryer.promise},f.dispatch=function(m){var w=this;this.state=O8e(this.state,m),Xo.batch(function(){w.observers.forEach(function(_){_.onMutationUpdate(m)}),w.mutationCache.notify(w)})},s}();function w8e(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function O8e(s,f){switch(f.type){case"failed":return H({},s,{failureCount:s.failureCount+1});case"pause":return H({},s,{isPaused:!0});case"continue":return H({},s,{isPaused:!1});case"loading":return H({},s,{context:f.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:f.variables});case"success":return H({},s,{data:f.data,error:null,status:"success",isPaused:!1});case"error":return H({},s,{data:void 0,error:f.error,failureCount:s.failureCount+1,isPaused:!1,status:"error"});case"setState":return H({},s,f.state);default:return s}}var x8e=function(s){rv(f,s);function f(w){var _;return _=s.call(this)||this,_.config=w||{},_.mutations=[],_.mutationId=0,_}var m=f.prototype;return m.build=function(w,_,C){var z=new b8e({mutationCache:this,mutationId:++this.mutationId,options:w.defaultMutationOptions(_),state:C,defaultOptions:_.mutationKey?w.getMutationDefaults(_.mutationKey):void 0,meta:_.meta});return this.add(z),z},m.add=function(w){this.mutations.push(w),this.notify(w)},m.remove=function(w){this.mutations=this.mutations.filter(function(_){return _!==w}),w.cancel(),this.notify(w)},m.clear=function(){var w=this;Xo.batch(function(){w.mutations.forEach(function(_){w.remove(_)})})},m.getAll=function(){return this.mutations},m.find=function(w){return typeof w.exact>"u"&&(w.exact=!0),this.mutations.find(function(_){return bee(w,_)})},m.findAll=function(w){return this.mutations.filter(function(_){return bee(w,_)})},m.notify=function(w){var _=this;Xo.batch(function(){_.listeners.forEach(function(C){C(w)})})},m.onFocus=function(){this.resumePausedMutations()},m.onOnline=function(){this.resumePausedMutations()},m.resumePausedMutations=function(){var w=this.mutations.filter(function(_){return _.state.isPaused});return Xo.batch(function(){return w.reduce(function(_,C){return _.then(function(){return C.continue().catch(Ri)})},Promise.resolve())})},f}(S_);function _8e(){return{onFetch:function(s){s.fetchFn=function(){var f,m,w,_,C,z,L=(f=s.fetchOptions)==null||(m=f.meta)==null?void 0:m.refetchPage,V=(w=s.fetchOptions)==null||(_=w.meta)==null?void 0:_.fetchMore,B=V?.pageParam,G=V?.direction==="forward",Q=V?.direction==="backward",te=((C=s.state.data)==null?void 0:C.pages)||[],oe=((z=s.state.data)==null?void 0:z.pageParams)||[],re=See(),le=re?.signal,ce=oe,ie=!1,Pe=s.options.queryFn||function(){return Promise.reject("Missing queryFn")},Ae=function(Fe,Ue,it,Mt){return ce=Mt?[Ue].concat(ce):[].concat(ce,[Ue]),Mt?[it].concat(Fe):[].concat(Fe,[it])},we=function(Fe,Ue,it,Mt){if(ie)return Promise.reject("Cancelled");if(typeof it>"u"&&!Ue&&Fe.length)return Promise.resolve(Fe);var Lt={queryKey:s.queryKey,signal:le,pageParam:it,meta:s.meta},Gt=Pe(Lt),Ee=Promise.resolve(Gt).then(function(Yt){return Ae(Fe,it,Yt,Mt)});if(C_(Gt)){var Ye=Ee;Ye.cancel=Gt.cancel}return Ee},Se;if(!te.length)Se=we([]);else if(G){var ge=typeof B<"u",je=ge?B:kee(s.options,te);Se=we(te,ge,je)}else if(Q){var ae=typeof B<"u",be=ae?B:S8e(s.options,te);Se=we(te,ae,be,!0)}else(function(){ce=[];var Fe=typeof s.options.getNextPageParam>"u",Ue=L&&te[0]?L(te[0],0,te):!0;Se=Ue?we([],Fe,oe[0]):Promise.resolve(Ae([],oe[0],te[0]));for(var it=function(Lt){Se=Se.then(function(Gt){var Ee=L&&te[Lt]?L(te[Lt],Lt,te):!0;if(Ee){var Ye=Fe?oe[Lt]:kee(s.options,Gt);return we(Gt,Fe,Ye)}return Promise.resolve(Ae(Gt,oe[Lt],te[Lt]))})},Mt=1;Mt"u"&&(B.revert=!0);var G=Xo.batch(function(){return C.queryCache.findAll(L).map(function(Q){return Q.cancel(B)})});return Promise.all(G).then(Ri).catch(Ri)},f.invalidateQueries=function(m,w,_){var C,z,L,V=this,B=Bc(m,w,_),G=B[0],Q=B[1],te=H({},G,{active:(C=(z=G.refetchActive)!=null?z:G.active)!=null?C:!0,inactive:(L=G.refetchInactive)!=null?L:!1});return Xo.batch(function(){return V.queryCache.findAll(G).forEach(function(oe){oe.invalidate()}),V.refetchQueries(te,Q)})},f.refetchQueries=function(m,w,_){var C=this,z=Bc(m,w,_),L=z[0],V=z[1],B=Xo.batch(function(){return C.queryCache.findAll(L).map(function(Q){return Q.fetch(void 0,H({},V,{meta:{refetchPage:L?.refetchPage}}))})}),G=Promise.all(B).then(Ri);return V?.throwOnError||(G=G.catch(Ri)),G},f.fetchQuery=function(m,w,_){var C=WT(m,w,_),z=this.defaultQueryOptions(C);typeof z.retry>"u"&&(z.retry=!1);var L=this.queryCache.build(this,z);return L.isStaleByTime(z.staleTime)?L.fetch(z):Promise.resolve(L.state.data)},f.prefetchQuery=function(m,w,_){return this.fetchQuery(m,w,_).then(Ri).catch(Ri)},f.fetchInfiniteQuery=function(m,w,_){var C=WT(m,w,_);return C.behavior=_8e(),this.fetchQuery(C)},f.prefetchInfiniteQuery=function(m,w,_){return this.fetchInfiniteQuery(m,w,_).then(Ri).catch(Ri)},f.cancelMutations=function(){var m=this,w=Xo.batch(function(){return m.mutationCache.getAll().map(function(_){return _.cancel()})});return Promise.all(w).then(Ri).catch(Ri)},f.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},f.executeMutation=function(m){return this.mutationCache.build(this,m).execute()},f.getQueryCache=function(){return this.queryCache},f.getMutationCache=function(){return this.mutationCache},f.getDefaultOptions=function(){return this.defaultOptions},f.setDefaultOptions=function(m){this.defaultOptions=m},f.setQueryDefaults=function(m,w){var _=this.queryDefaults.find(function(C){return qf(m)===qf(C.queryKey)});_?_.defaultOptions=w:this.queryDefaults.push({queryKey:m,defaultOptions:w})},f.getQueryDefaults=function(m){var w;return m?(w=this.queryDefaults.find(function(_){return j_(m,_.queryKey)}))==null?void 0:w.defaultOptions:void 0},f.setMutationDefaults=function(m,w){var _=this.mutationDefaults.find(function(C){return qf(m)===qf(C.mutationKey)});_?_.defaultOptions=w:this.mutationDefaults.push({mutationKey:m,defaultOptions:w})},f.getMutationDefaults=function(m){var w;return m?(w=this.mutationDefaults.find(function(_){return j_(m,_.mutationKey)}))==null?void 0:w.defaultOptions:void 0},f.defaultQueryOptions=function(m){if(m?._defaulted)return m;var w=H({},this.defaultOptions.queries,this.getQueryDefaults(m?.queryKey),m,{_defaulted:!0});return!w.queryHash&&w.queryKey&&(w.queryHash=BT(w.queryKey,w)),w},f.defaultQueryObserverOptions=function(m){return this.defaultQueryOptions(m)},f.defaultMutationOptions=function(m){return m?._defaulted?m:H({},this.defaultOptions.mutations,this.getMutationDefaults(m?.mutationKey),m,{_defaulted:!0})},f.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},s}(),j8e=O(N()),E8e=j8e.default.unstable_batchedUpdates;Xo.setBatchNotifyFunction(E8e);var P8e=console;g8e(P8e);var iv=O(k()),Cee=iv.default.createContext(void 0),k8e=iv.default.createContext(!1);function C8e(s){return s&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=Cee),window.ReactQueryClientContext):Cee}var A8e=function(s){var f=s.client,m=s.contextSharing,w=m===void 0?!1:m,_=s.children;iv.default.useEffect(function(){return f.mount(),function(){f.unmount()}},[f]);var C=C8e(w);return iv.default.createElement(k8e.Provider,{value:w},iv.default.createElement(C.Provider,{value:f},_))},Y0=O(Dr());function M8e(s,f,m){x9.default.render(T8e(s),f,m)}function T8e(s){let f=new I8e;return(0,Y0.jsx)(A9,{store:_4e,children:(0,Y0.jsx)(A8e,{client:f,children:(0,Y0.jsx)(R8e,{ontologyId:s.ontologyId,iri:s.iri,entityType:s.entityType,apiUrl:s.apiUrl,onNavigateToEntity:s.onNavigateToEntity,onNavigateToOntology:s.onNavigateToOntology})})})}function R8e(s){let{entityType:f,lang:m="en",onNavigateToEntity:w=()=>{},onNavigateToOntology:_=()=>{}}=s,C=To(oe=>oe.ontologies.ontology),z=To(oe=>oe.ontologies.loadingOntology),L=To(oe=>oe.ontologies.entity),V=To(oe=>oe.ontologies.loadingEntity),B=To(oe=>oe.ontologies.loadingClassInstances),G=Iu(),Q=(oe,re)=>{let le=oe.getOntologyId(),ce=re.getTypePlural(),ie=re.getIri();w(le,ce,ie)},te=(oe,re)=>{let le=re.getTypePlural(),ce=re.getIri();_(oe,le,ce)};return(0,R0.useEffect)(()=>{G(t_({ontologyId:s.ontologyId,lang:"en",apiUrl:s.apiUrl}))},[G,s.ontologyId,s.apiUrl]),(0,R0.useEffect)(()=>{C&&s.iri&&(s.entityType&&s.entityType!=="entities"?G(r_({ontologyId:s.ontologyId,entityType:s.entityType,entityIri:s.iri,searchParams:new URLSearchParams})):G(n_({ontologyId:s.ontologyId,entityIri:s.iri})))},[G,s.ontologyId,s.entityType,s.iri,C]),(0,R0.useEffect)(()=>{L&&s.entityType==="classes"&&G(o_({ontologyId:L.getOntologyId(),classIri:L.getIri(),searchParams:new URLSearchParams}))},[G,s.ontologyId,s.entityType,s.iri,L]),(0,Y0.jsxs)(R0.Fragment,{children:[(V||z||B)&&(0,Y0.jsx)(lxe,{}),!V&&!z&&!B&&C&&(0,Y0.jsx)(o8e,{ontology:C,entityType:f||"entities",lang:m,selectedEntity:L,onNavigateToEntity:Q,onNavigateToOntology:te,apiUrl:s.apiUrl})]})}window.OLSWidgets={createEntityTree:M8e}})();var p5e=E(cn()),RA=e=>((0,xf.useEffect)(()=>{let t=document.querySelector("#tree_container");window.OLSWidgets.createEntityTree({iri:e.iri,ontologyId:e.ontologyId,apiUrl:e.api.substring(0,e.api.lastIndexOf("api")),entityType:(e.entityType?Lo(e.entityType,!1):void 0)||"entities",onNavigateToEntity:e.onNavigateToEntity?e.onNavigateToEntity:(n,r,o)=>{console.log(`navigate to entity with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)},onNavigateToOntology:e.onNavigateToOntology?e.onNavigateToOntology:(n,r,o)=>{console.log(`navigate to ontology with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)}},t)},[e.api,e.iri,e.ontologyId,e.entityType,e.onNavigateToEntity,e.onNavigateToOntology,"HierarchyWidgetOLS"]),xf.default.createElement(ii,{style:{minWidth:"600px"}},xf.default.createElement("div",{id:"tree_container"})));function f5e(e,t,n){p5e.default.render(ATt(e),t,n)}function ATt(e){let t=new tr;return xf.default.createElement(er,{colorMode:"light"},xf.default.createElement(rr,{client:t},xf.default.createElement(RA,{ontologyId:e.ontologyId,api:e.api,iri:e.iri,entityType:e.entityType,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology})))}var L8=E(D());function zA(e){function t(){return e.synonyms&&e.synonyms.length>0?e.synonyms.map((n,r)=>L8.default.createElement(wt,{key:n+r},n)):L8.default.createElement(Pt,null,"No alternative names exist.")}return L8.default.createElement(ii,null,L8.default.createElement(_n,{style:{padding:10},direction:"column"},t()))}var c0=E(D());function DA(e){function t(n){return n&&n.length>0?n?.map((r,o)=>c0.default.createElement(wt,{key:o},r)):c0.default.createElement(Pt,null,"No cross references exist.")}return c0.default.createElement(ii,null,c0.default.createElement(c0.default.Fragment,null,c0.default.createElement(_n,{style:{padding:7},direction:"column"},t(e.crossrefs))))}var ga=E(D());var d5e=e=>fetch(e,{method:"GET",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(t=>t.json()).catch(t=>[]),MTt=e=>e.substr(0,5)==="http:"?e.replace("http","https"):e,IQ=e=>e===void 0?"":MTt(e.substring(0,e.search("/terms")+7));var m5e=E(cn()),LA=class{url;iri;label;id;isExpanded=!0;children=[];icon=ga.default.createElement(ga.default.Fragment,null,"+");iconWhenExpanded=ga.default.createElement(ga.default.Fragment,null,"-");constructor(t,n,r,o){this.label=t,this.id=n,this.iri=o,this.url=r}setchild(t){this.children.push(t),this.children.length>0&&(this.icon=ga.default.createElement(ga.default.Fragment,null,"+"))}is_root(){return this.id==="#"}to_string(){return this.label+"[ "+this.children.map(t=>t.to_string())+" ]"}callback(){if(this.isExpanded)return"";let t=this.url+encodeURIComponent(encodeURIComponent(this.iri))+"/jstree/children/"+this.id;return d5e(t).then(n=>{this.children=[],NA(this,n,this.url)}),""}},NA=(e,t,n)=>{t.filter(r=>r.parent===e.id).forEach(r=>{e.setchild(new LA(r.text,r.id,n,r.iri))}),e.children.map(r=>NA(r,t,n))};async function TTt(e,t,n){let r=await e.getTermTree({ontologyId:t,termIri:n},{viewMode:"All",siblings:!1},void 0,void 0).catch(o=>console.log(o));return n?r:r._embedded.terms.map((o,i)=>({id:(++i).toString(),parent:"#",iri:o.iri,text:o.label,children:o.has_children}))}var FA=e=>{let{iri:t,ontologyId:n,api:r}=e,[o,i]=(0,ga.useState)(),u=new pr(r),c=r+"ontologies/"+n+"/terms/",d=async g=>{let O=await u.getTermTree({ontologyId:n,termIri:t},{child:g.id},void 0,void 0).catch(S=>console.log(S));g.children=[],NA(g,O,IQ(c))};return dr([r,"getTermTree",n,t],()=>TTt(u,n,t).then(g=>{let O=new LA("#","#","","");return g&&NA(O,g,IQ(c)),i(O.children),g})),ga.default.createElement(ii,null,o&&ga.default.createElement(x8,{expandByDefault:!0,"aria-label":"HierarchyTab",items:o}))};function h5e(e,t,n){m5e.default.render(RTt(e),t,n)}function RTt(e){let t=new tr;return ga.default.createElement(er,{colorMode:"light"},ga.default.createElement(rr,{client:t},ga.default.createElement(FA,{ontologyId:e.ontologyId,api:e.api,iri:e.iri})))}function WA(e){function t(n){return Da.default.createElement(Da.default.Fragment,null,Da.default.createElement(Rh,{size:"s",tabs:[{content:Da.default.createElement(zA,{synonyms:n.getSynonyms().map(r=>r.value)}),id:"tab1",name:"Alternative Names"},{content:Da.default.createElement(Da.default.Fragment,null,Da.default.createElement("div",{style:{overflow:"auto"}},e.useLegacy==null||e.useLegacy?Da.default.createElement(FA,{ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),api:e.api,iri:e.iri}):Da.default.createElement(RA,{api:e.api,iri:e.iri,ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),entityType:e.entityType}))),id:"tab2",name:"Hierarchy"},{content:Da.default.createElement(DA,{crossrefs:ft.fromJson(n.getCrossReferences()).map(r=>r.value)}),id:"tab3",name:"Cross references"}]}))}return Da.default.createElement(Da.default.Fragment,null,gl(e.data)||Tp(e.data)||p1(e.data)?t(e.data):null)}var g5e=E(cn());function v5e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u,...c}=e,d=new pr(n),{data:g,isLoading:O,isSuccess:S,isError:I,error:R}=dr(["tabdata",n,i,o,t,r,u],async()=>d.getEntityObject(t,o,r,i,u));function k(A){return ws.default.createElement(WA,{...c,data:A,iri:t,api:n,useLegacy:u,entityType:A.getType()})}return ws.default.createElement(ws.default.Fragment,null,O&&ws.default.createElement(Zt,null),I&&ws.default.createElement(Pt,null,Ln(R,"description")),S&&g&&ws.default.createElement(ws.default.Fragment,null,gl(g)?k(g):null))}function y5e(e,t,n){g5e.default.render(zTt(e),t,n)}function zTt(e){let t=new tr;return ws.default.createElement(er,{colorMode:"light"},ws.default.createElement(rr,{client:t},ws.default.createElement(v5e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var pc=E(D());var b5e=E(cn());function w5e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["alternativeNameTab",n,r,o,t,i,u],async()=>c.getEntityObject(t,o,i,r,u));return pc.default.createElement(pc.default.Fragment,null,O&&d&&gl(d)&&pc.default.createElement(zA,{synonyms:d.getSynonyms().map(R=>R.value)}),g&&pc.default.createElement(Zt,null),S&&pc.default.createElement(Pt,null,Ln(I,"alternative names")))}function O5e(e,t,n){b5e.default.render(DTt(e),t,n)}function DTt(e){let t=new tr;return pc.default.createElement(er,{colorMode:"light"},pc.default.createElement(rr,{client:t},pc.default.createElement(w5e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter})))}var fc=E(D());var x5e=E(cn());function _5e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["crossRefTab",n,r,o,t,i,u],async()=>c.getEntityObject(t,o,i,r,u));return fc.default.createElement(fc.default.Fragment,null,O&&d&&gl(d)&&fc.default.createElement(DA,{crossrefs:ft.fromJson(d.getCrossReferences()).map(R=>R.value)}),g&&fc.default.createElement(Zt,null),S&&fc.default.createElement(Pt,null,Ln(I,"cross references")))}function S5e(e,t,n){x5e.default.render(LTt(e),t,n)}function LTt(e){let t=new tr;return fc.default.createElement(er,{colorMode:"light"},fc.default.createElement(rr,{client:t},fc.default.createElement(_5e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var mr=E(D());var j5e=E(cn());var N8=class{static fromTopConcept(t){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:[]}}static fromHierarchyResult(t){return{iri:t.uri,label:t.prefLabel,hasChildren:t.narrower!=null&&t.narrower.length>0,parents:ft.fromJson(t.broader)}}static fromPrefAndUriAndChildren(t,n){return{iri:t.uri,label:t.prefLabel,hasChildren:t.hasChildren,parents:ft.fromJson(n)}}static fromLabelAndUriAndChildren(t,n){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:ft.fromJson(n)}}},BA=class e{axiosInstance;constructor(t){this.axiosInstance=Mp.create({baseURL:t,headers:{Accept:"application/json"}})}async makeCall(t,n){return(await this.axiosInstance.get(t,n)).data}async buildHierarchyWithIri(t){let{iri:n,ontologyId:r,showSiblingsOnInit:o}=t;if(!r)throw Error("ontologyId has to be specified for SKOS API.");let i=[],u=new Map,c=new Map,d=new Set,g=new Set;if(n){let R=await this.makeCall(`/${r}/hierarchy`,{params:{uri:n,lang:"en",format:"application/json"}}).then(k=>Object.keys(k.broaderTransitive).map(A=>k.broaderTransitive[A]));for(let k of R){let A=N8.fromHierarchyResult(k);c.set(A.iri,A),k.top&&i.push(A.iri),o||g.add(A.iri)}for(let k of R)if(k.narrower!=null){let A=[];for(let M of k.narrower){let T=c.get(M.uri);T==null?(T=N8.fromLabelAndUriAndChildren(M,[k.uri]),c.set(T.iri,T)):T.parents.map(N=>N.value).includes(k.uri)||T.parents.push(...ft.fromJson(k.uri)),A.push(T)}A.sort((M,T)=>(M.label||M.iri).localeCompare(T.label||T.iri)),u.set(k.uri,A.map(M=>({childIri:M.iri}))),d.add(k.uri)}}else{let R=await this.makeCall(`/${r}/topConcepts`,{params:{lang:"en",format:"application/json"}}).then(k=>k.topconcepts);for(let k of R)i.push(k.uri)}function O(R,k){k.add(R.iri);let A=new es(R),M=u.get(R.iri)||[];if(o)for(let T of M){if(k.has(T.childIri)){console.error(`Cyclic tree at entity "${T.childIri}".`);continue}let N=c.get(T.childIri);N!=null&&A.addChild(O(N,k))}else for(let T of M){if(k.has(T.childIri)){console.error(`Cyclic tree at entity "${T.childIri}".`);continue}let N=c.get(T.childIri);N!=null&&g.has(T.childIri)&&A.addChild(O(N,k))}return A.loadedChildren.length>0&&(A.expanded=!0),k.delete(R.iri),A}let S=new Set,I=i.map(R=>O(c.get(R),S)).sort((R,k)=>(R.entityData.label||R.entityData.iri).localeCompare(k.entityData.label||k.entityData.iri));return new ts({parentChildRelations:u,entitiesData:c,allChildrenPresent:d,roots:I,api:new e(this.axiosInstance.getUri()),ontologyId:r,mainEntityIri:n,keepExpansionStates:t.keepExpansionStates})}async loadHierarchyChildren(t){let{nodeToExpand:n,ontologyId:r}=t;return(await this.makeCall(`/${r}/children`,{params:{uri:n.entityData.iri,lang:"en",format:"application/json"}})).narrower.map(i=>N8.fromPrefAndUriAndChildren(i,[n.entityData.iri]))}};function I5e(e){return{iri:e["@id"],label:e.prefLabel,hasChildren:e.hasChildren,parents:[]}}var HA=class e{axiosInstance;apiKey;constructor(t,n){this.axiosInstance=Mp.create({baseURL:t,headers:{Accept:"application/json"}}),this.apiKey=n,this.axiosInstance.interceptors.request.use(r=>(r.params=r.params||{},r.params.apikey=this.apiKey,r.params.format="json",r))}async makeCall(t,n){return(await this.axiosInstance.get(t,n)).data}async buildHierarchyWithIri(t){let{iri:n,ontologyId:r,entityType:o,showSiblingsOnInit:i}=t;if(!r)throw Error("ontologyId has to be specified for OntoPortal API.");if(!o)throw Error("entityType has to be specified for OntoPortal API.");let u=[],c=new Map,d=new Map,g=new Set,O=new Set;function S(A){if(c.set(A["@id"],I5e(A)),A.hasChildren&&A.children.length>0){d.set(A["@id"],A.children.map(M=>({childIri:M["@id"]}))),g.add(A["@id"]),O.add(A["@id"]);for(let M of A.children)S(M)}}if(n){let A=await this.makeCall(`/ontologies/${r.toUpperCase()}/${Lo(o,!1)}/${encodeURIComponent(n)}/tree`,{params:{include:"@id,prefLabel,hasChildren,children"}});for(let M of A)u.push(M["@id"]),O.add(M["@id"]),S(M);O.add(n)}else{let A=await this.makeCall(`/ontologies/${r.toUpperCase()}/${Lo(o,!1)}/roots`,{params:{include:"@id,prefLabel,hasChildren"}});for(let M of A)u.push(M["@id"]),O.add(M["@id"])}function I(A,M){M.add(A.iri);let T=new es(A),N=d.get(A.iri)||[];if(i)for(let U of N){if(M.has(U.childIri)){console.error(`Cyclic tree at entity "${U.childIri}".`);continue}T.addChild(I(c.get(U.childIri),M))}else for(let U of N){if(M.has(U.childIri)){console.error(`Cyclic tree at entity "${U.childIri}".`);continue}O.has(U.childIri)&&T.addChild(I(c.get(U.childIri),M))}return T.loadedChildren.length>0&&(T.expanded=!0),M.delete(A.iri),T}let R=new Set,k=u.map(A=>I(c.get(A),R)).sort((A,M)=>(A.entityData.label||A.entityData.iri).localeCompare(M.entityData.label||M.entityData.iri));return new ts({parentChildRelations:d,entitiesData:c,allChildrenPresent:g,roots:k,api:new e(this.axiosInstance.getUri(),this.apiKey),ontologyId:r,mainEntityIri:n,keepExpansionStates:t.keepExpansionStates,entityType:o})}async loadHierarchyChildren(t){let{nodeToExpand:n,ontologyId:r,entityType:o}=t;if(o==null)throw Error("entityType has to be provided to load children in an OntoPortal hierarchy.");return(await this.makeCall(`/ontologies/${r.toUpperCase()}/${Lo(o,!1)}/${encodeURIComponent(n.entityData.iri)}/children`,{params:{include:"@id,prefLabel,hasChildren"}})).collection.map(u=>I5e(u))}};var F8={INCLUDE_OBSOLETE_ENTITIES:!1,PREFERRED_ROOTS:!1,KEEP_EXPANSION_STATES:!1,SHOW_SIBLINGS_ON_INIT:!1,USE_LEGACY:!1};function NTt(e){let t=e.entityData.definedBy||[];return t.includes(e.ontologyId)&&(t=[]),mr.default.createElement(mr.default.Fragment,null,mr.default.createElement("span",{className:e.highlight?"highlight":void 0},e.childRelationToParent=="http://purl.obolibrary.org/obo/BFO_0000050"&&mr.default.createElement(mr.default.Fragment,null,mr.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"\xA0P\xA0"),"\xA0"),e.childRelationToParent=="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&mr.default.createElement(mr.default.Fragment,null,mr.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"I"),"\xA0"),mr.default.createElement("button",{onClick:()=>{e.onNavigateToEntity&&e.onNavigateToEntity(e.ontologyId,e.entityType||"",e.entityData)}},mr.default.createElement("span",null," ",e.entityData.label||e.entityData.iri," "))),t.length>0&&mr.default.createElement(mr.default.Fragment,null,"\xA0",t.map(n=>mr.default.createElement("button",{key:`${e.entityData.iri}:${n}`,onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(n,e.entityType||"",e.entityData)}},mr.default.createElement("span",{className:"ontology-badge"},n.toUpperCase())))))}function jQ(e){let{apiUrl:t,backendType:n,apiKey:r,onNavigateToEntity:o,onNavigateToOntology:i,iri:u,ontologyId:c,entityType:d,includeObsoleteEntities:g=F8.INCLUDE_OBSOLETE_ENTITIES,preferredRoots:O=F8.PREFERRED_ROOTS,keepExpansionStates:S=F8.KEEP_EXPANSION_STATES,showSiblingsOnInit:I=F8.SHOW_SIBLINGS_ON_INIT,useLegacy:R=F8.USE_LEGACY}=e,[,k]=(0,mr.useReducer)(X=>X+1%Number.MAX_SAFE_INTEGER,0),A=(0,mr.useMemo)(()=>{switch(n){case"ols":return new pr(t);case"skosmos":return new BA(t);case"ontoportal":return new HA(t,r||"");default:return new pr(t)}},[t,n,r]),{data:M,isSuccess:T}=dr(["hierarchySemLookP",u,d,c,O,g,S,I,R],async function(){return await A.buildHierarchyWithIri({ontologyId:c,iri:u,entityType:d,preferredRoots:O,includeObsoleteEntities:g,keepExpansionStates:S,showSiblingsOnInit:I,useLegacy:R})}),N=(0,mr.useCallback)(X=>{if(!(M instanceof ts))throw Error("Hierarchy object was undefined while trying to expand a tree node. This should never happen.");M.entityType&&hl(M.entityType)||(X.expanded=!X.expanded,X.expanded?(X.loading=!0,k(),M.fetchInformationForExpansion(X).then(()=>{X.loading=!1,k()})):(k(),M.closeNode(X)))},[M]);function U(X,Y,K){return mr.default.createElement("div",{key:Ut()},mr.default.createElement(Pt,null,mr.default.createElement("div",{style:{height:"24px"}},mr.default.createElement("div",{style:{position:"relative",borderLeft:"1px dotted black",borderBottom:"1px dotted black",width:"12px",height:"16px",left:"5.5px",top:"-1px"}}),mr.default.createElement("div",{style:{position:"relative",borderLeft:K?"1px dotted black":"",width:"12px",height:"9px",left:"5.5px",top:"0px"}}),mr.default.createElement("div",{style:{position:"relative",top:"-22px"}},mr.default.createElement("span",null,Y.entityData.hasChildren?mr.default.createElement("button",{style:{},onClick:()=>{N(Y)}},mr.default.createElement(Wt,{type:Y.expanded?"arrowDown":"arrowRight",size:"s"})):mr.default.createElement(Wt,{type:"empty"})),"\xA0",mr.default.createElement(NTt,{entityData:Y.entityData,childRelationToParent:Y.childRelationToParent,ontologyId:X.ontologyId,entityType:X.entityType,onNavigateToEntity:o,onNavigateToOntology:i,highlight:Y.entityData.iri==X?.mainEntityIri}),"\xA0",Y.entityData.numDescendants!=null&&Y.entityData.numDescendants>0&&mr.default.createElement("span",{style:{color:"gray"}},"(",Y.entityData.numDescendants.toLocaleString(),")")))),Y.expanded&&mr.default.createElement("ul",{style:{marginBlockEnd:"0",marginInlineStart:"5.5px"}},Y.loading?mr.default.createElement(Zt,{style:{position:"relative",left:"13px",top:"5px"}}):Y.loadedChildren.map((H,ne)=>mr.default.createElement("div",{key:Ut(),style:{borderLeft:K?"1px dotted black":"",paddingLeft:"1rem"}},U(X,H,neU(M,X,YO.getThingObject(t,i,n,u,c));return Ml.default.createElement(Ml.default.Fragment,null,o&&Ml.default.createElement(p0,{titleText:o,className:S}),!o&&k&&I&&Ml.default.createElement(p0,{title:ile(I)?I.getName():I.getLabel(),className:S}),!o&&R&&(d?Ml.default.createElement(p0,{titleText:d,className:S}):Ml.default.createElement(Zt,{size:"s"})),!o&&A&&(d?Ml.default.createElement(p0,{titleText:d,className:S}):Ml.default.createElement(Pt,null,Ln(M,"title"))))}function C5e(e,t,n){k5e.default.render(WTt(e),t,n)}function WTt(e){let t=new tr;return Ml.default.createElement(er,{colorMode:"light"},Ml.default.createElement(rr,{client:t},Ml.default.createElement(EQ,{api:e.api,thingType:e.thingType,iri:e.iri,ontologyId:e.ontologyId,titleText:e.titleText,parameter:e.parameter,useLegacy:e.useLegacy,defaultValue:e.defaultValue,className:e.className})))}var Yr=E(D());var A5e=E(cn());var La=E(D());var PQ=5;function VA(e){let[t,n]=(0,La.useState)(!1);function r(i){return La.default.createElement("button",{key:Ut(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},La.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>PQ&&!t?La.default.createElement(La.default.Fragment,null,e.ontolist.slice(0,PQ).map(i=>La.default.createElement("span",{key:Ut()},r(i),"\xA0")),La.default.createElement("button",{className:"expand-onto-list",onClick:()=>n(!0)},"+ ",e.ontolist.length-PQ)):e.ontolist.map(i=>La.default.createElement("span",{key:Ut()},r(i),"\xA0"))}return La.default.createElement(La.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&La.default.createElement(Pt,{style:{fontWeight:"normal"}},"Also appears in\xA0",o()))}var Na=E(D());var kQ=5;function qA(e){let[t,n]=(0,Na.useState)(!1);function r(i){return Na.default.createElement("button",{key:Ut(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},Na.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>kQ&&!t?Na.default.createElement(Na.default.Fragment,null,e.ontolist.slice(0,kQ).map(i=>Na.default.createElement("span",{key:Ut()},r(i),"\xA0")),Na.default.createElement("button",{className:"expand-onto-list",onClick:()=>n(!0)},"+ ",e.ontolist.length-kQ)):e.ontolist.map(i=>Na.default.createElement("span",{key:Ut()},r(i),"\xA0"))}return Na.default.createElement(Na.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&Na.default.createElement(Pt,{style:{fontWeight:"normal"}},"Defined by\xA0",o()))}function M5e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u,onNavigateToOntology:c}=e,d=new pr(n),{data:g,isLoading:O,isSuccess:S,isError:I,error:R}=dr(["metadata",n,i,o,t,r,u],async()=>{let A,M,T;if(u){let N=(await d.getEntityResponse(t,o,void 0,i,u))._embedded;A=vl({_embedded:{[Object.keys(N)[0]]:Rp(N[Object.keys(N)[0]],u,r)}}),M=N[Object.keys(N)[0]].map(U=>U.ontology_name),T=N[Object.keys(N)[0]].filter(U=>U.is_defining_ontology).map(U=>U.ontology_name)}else A=await d.getEntityObject(t,o,r,i,u),M=A.getAppearsIn(),T=A.getDefinedBy();return M=M.filter(N=>N!=A.getOntologyId()).sort(),T=T.filter(N=>N!=A.getOntologyId()).sort(),{entity:A,ontoList:M,definedBy:T}});function k(A){return Yr.default.createElement(Yr.default.Fragment,null,Yr.default.createElement(_n,{direction:"column"},Yr.default.createElement(wt,{grow:!1},Yr.default.createElement("span",null,Yr.default.createElement(u0,{onNavigateToOntology:e.onNavigateToOntology,ontologyId:r||A.entity.getOntologyId(),ontologyName:A.entity.getOntologyId(),shortForm:A.entity.getShortForm()}))),Yr.default.createElement(wt,null,Yr.default.createElement(_n,{direction:"column"},Yr.default.createElement(wt,null,Yr.default.createElement(_n,null,Yr.default.createElement(wt,{grow:!1,style:{maxWidth:600}},Yr.default.createElement(tg,{iri:t})))),Yr.default.createElement(wt,{grow:!1,style:{maxWidth:600}},Yr.default.createElement(p0,{title:A.entity.getLabel()})))),Yr.default.createElement(wt,{style:{maxWidth:600}},Yr.default.createElement(MA,{description:A.entity.getDescription()})),Yr.default.createElement("div",{style:{margin:"0 12px 0",maxWidth:600}},Yr.default.createElement(VA,{iri:e.iri,label:A.entity.getLabel()||"",ontolist:A.ontoList,entityType:o||A.entity.getType(),onNavigateToOntology:c}),Yr.default.createElement(qA,{iri:e.iri,ontolist:A.definedBy,label:A.entity.getLabel()||"",entityType:o||A.entity.getType(),onNavigateToOntology:c})),Yr.default.createElement(wt,null,Yr.default.createElement(WA,{data:A.entity,iri:t,entityType:e.entityType,api:n,ontologyId:e.ontologyId?e.ontologyId:A.entity.getOntologyId(),useLegacy:u}))))}return Yr.default.createElement(Yr.default.Fragment,null,O&&Yr.default.createElement(Zt,null),I&&Yr.default.createElement(Pt,null,Ln(R,"metadata")),S&&g&&Yr.default.createElement(Yr.default.Fragment,null,gl(g.entity)?k(g):null))}function T5e(e,t,n){A5e.default.render(BTt(e),t,n)}function BTt(e){let t=new tr;return Yr.default.createElement(er,{colorMode:"light"},Yr.default.createElement(rr,{client:t},Yr.default.createElement(M5e,{iri:e.iri,ontologyId:e.ontologyId,api:e.api,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var jt=E(D());var R5e=E(cn()),HTt=!0;function z5e(e){let{ontologyId:t,api:n,parameter:r,hasTitle:o=HTt,useLegacy:i,showBadges:u,...c}=e,d=new pr(n),{data:g,isLoading:O,isSuccess:S,isError:I,error:R}=dr(["ontologyInfo",e],()=>d.getOntologyObject(t,r,i));function k(K){return jt.default.createElement(jt.default.Fragment,null,(K.getIri()||K.getOntologyPurl())&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Ontology IRI:"),jt.default.createElement("p",null,jt.default.createElement("a",{id:"ontologyIri",href:K.getIri()||K.getOntologyPurl()},K.getIri()||K.getOntologyPurl()))))}function A(K){return jt.default.createElement(jt.default.Fragment,null,K.getVersionIri()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Version IRI:"),jt.default.createElement("p",null,jt.default.createElement("a",{id:"versionIri",href:K.getVersionIri()},K.getVersionIri()))))}function M(K){return jt.default.createElement(jt.default.Fragment,null,K.getSourceFileTimestamp()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Last loaded:"),jt.default.createElement("p",null,new Date(K.getSourceFileTimestamp()).toString())))}function T(K){return jt.default.createElement(jt.default.Fragment,null,K.getOntologyId()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Ontology ID:"),jt.default.createElement("p",null,K.getOntologyId())))}function N(K){return jt.default.createElement(jt.default.Fragment,null,K.getVersion()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Version:"),jt.default.createElement("p",null,K.getVersion())))}function U(K){return jt.default.createElement(jt.default.Fragment,null,K.getNumClasses()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Number of classes:"),jt.default.createElement("p",null,K.getNumClasses().toLocaleString())))}function X(K){return jt.default.createElement(jt.default.Fragment,null,K.getCreators().length>0&&jt.default.createElement(jt.default.Fragment,null,jt.default.createElement(wt,null,jt.default.createElement("b",null,"Creators:"),K.getCreators().length>1?jt.default.createElement("ul",null,K.getCreators().map(H=>jt.default.createElement("li",{key:H+Ut()},$i(K,K.getLinkedEntities(),H,n,u)))):jt.default.createElement("p",null,$i(K,K.getLinkedEntities(),K.getCreators()[0],n,u))),jt.default.createElement(so,null)))}function Y(K){return jt.default.createElement(jt.default.Fragment,null,K.getAnnotationPredicates().map(H=>{let ne=K.getAnnotationById(H);return ne.length==0?jt.default.createElement(jt.default.Fragment,null):jt.default.createElement(wt,{grow:!1,key:H},jt.default.createElement("b",null,Ql(d1(f1(K.getAnnotationTitleById(H)))),":"),ne.length>1?jt.default.createElement("ul",null,ne.map(pe=>jt.default.createElement("li",{key:Ut(),id:pe.value},ha(K,pe,n,u)))):jt.default.createElement("p",{key:Ut()},ha(K,ne[0],n,u)))}))}return jt.default.createElement(jt.default.Fragment,null,jt.default.createElement(fa,{title:o?"Ontology Information":"",layout:"horizontal"},O&&jt.default.createElement(Zt,{size:"s"}),S&&g!==void 0&&jt.default.createElement(Pt,{...c},k(g),A(g),M(g),jt.default.createElement(jt.default.Fragment,null,T(g),N(g),U(g)),Y(g)),I&&jt.default.createElement(Pt,null,Ln(R,"information"))))}function D5e(e,t,n){R5e.default.render(VTt(e),t,n)}function VTt(e){let t=new tr;return jt.default.createElement(er,{colorMode:"light"},jt.default.createElement(rr,{client:t},jt.default.createElement(z5e,{ontologyId:e.ontologyId,api:e.api,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,hasTitle:e.hasTitle})))}var $r=E(D());var L5e=E(cn()),qTt=10,UTt=[10,25,50,100],$Tt="config.preferredPrefix",JTt="asc";function N5e(e){let{api:t,initialEntriesPerPage:n=qTt,pageSizeOptions:r=UTt,initialSortField:o=$Tt,initialSortDir:i=JTt,targetLink:u,parameter:c}=e,d=new pr(t),[g,O]=(0,$r.useState)(0),[S,I]=(0,$r.useState)(n),[R,k]=(0,$r.useState)(o),[A,M]=(0,$r.useState)(i),T=[{name:"Resource Name",field:"config.title",width:"15%",sortable:!0},{name:"Short Name",field:"ontologyId",render:me=>u?$r.default.createElement(Ld,{href:u+"ontologies/"+me+"/"},me):me,width:"10%",sortable:!0},{name:"Description",field:"config.description",width:"30%",css:Oe` + `),cxe)),hxe=axe.forwardRef(function(s,f){let m=ql({props:s,name:"MuiCircularProgress"}),{className:w,color:_="primary",disableShrink:A=!1,size:z=40,style:N,thickness:V=3.6,value:H=0,variant:X="indeterminate"}=m,Q=vn(m,sxe),te=B({},m,{color:_,disableShrink:A,size:z,thickness:V,value:H,variant:X}),oe=pxe(te),re={},le={},ce={};if(X==="determinate"){let ie=2*Math.PI*((Bc-V)/2);re.strokeDasharray=ie.toFixed(3),ce["aria-valuenow"]=Math.round(H),re.strokeDashoffset=`${((100-H)/100*ie).toFixed(3)}px`,le.transform="rotate(-90deg)"}return(0,LT.jsx)(fxe,B({className:to(oe.root,w),style:B({width:z,height:z},le,N),ownerState:te,ref:f,role:"progressbar"},ce,Q,{children:(0,LT.jsx)(dxe,{className:oe.svg,ownerState:te,viewBox:`${Bc/2} ${Bc/2} ${Bc} ${Bc}`,children:(0,LT.jsx)(mxe,{className:oe.circle,style:re,ownerState:te,cx:Bc,cy:Bc,r:(Bc-V)/2,fill:"none",strokeWidth:V})})}))}),gxe=hxe;ne();var Uf=O(k());function vxe(s){return tl("MuiFormControl",s)}var KRt=Hl("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]),fee=O(Dr()),yxe=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],bxe=s=>{let{classes:f,margin:m,fullWidth:w}=s,_={root:["root",m!=="none"&&`margin${Hn(m)}`,w&&"fullWidth"]};return Vl(_,vxe,f)},wxe=fo("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:s},f)=>B({},f.root,f[`margin${Hn(s.margin)}`],s.fullWidth&&f.fullWidth)})(({ownerState:s})=>B({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},s.margin==="normal"&&{marginTop:16,marginBottom:8},s.margin==="dense"&&{marginTop:8,marginBottom:4},s.fullWidth&&{width:"100%"})),Oxe=Uf.forwardRef(function(s,f){let m=ql({props:s,name:"MuiFormControl"}),{children:w,className:_,color:A="primary",component:z="div",disabled:N=!1,error:V=!1,focused:H,fullWidth:X=!1,hiddenLabel:Q=!1,margin:te="none",required:oe=!1,size:re="medium",variant:le="outlined"}=m,ce=vn(m,yxe),ie=B({},m,{color:A,component:z,disabled:N,error:V,fullWidth:X,hiddenLabel:Q,margin:te,required:oe,size:re,variant:le}),Pe=bxe(ie),[Ae,Oe]=Uf.useState(()=>{let We=!1;return w&&Uf.Children.forEach(w,$e=>{if(!jT($e,["Input","Select"]))return;let it=jT($e,["Select"])?$e.props.input:$e;it&&R7e(it.props)&&(We=!0)}),We}),[Se,he]=Uf.useState(()=>{let We=!1;return w&&Uf.Children.forEach(w,$e=>{jT($e,["Input","Select"])&&(aee($e.props,!0)||aee($e.props.inputProps,!0))&&(We=!0)}),We}),[je,ae]=Uf.useState(!1);N&&je&&ae(!1);let we=H!==void 0&&!N?H:je,Ce,Te=Uf.useMemo(()=>({adornedStart:Ae,setAdornedStart:Oe,color:A,disabled:N,error:V,filled:Se,focused:we,fullWidth:X,hiddenLabel:Q,size:re,onBlur:()=>{ae(!1)},onEmpty:()=>{he(!1)},onFilled:()=>{he(!0)},onFocus:()=>{ae(!0)},registerEffect:Ce,required:oe,variant:le}),[Ae,A,N,V,Se,we,X,Q,Ce,oe,re,le]);return(0,fee.jsx)(oee.Provider,{value:Te,children:(0,fee.jsx)(wxe,B({as:z,ownerState:ie,className:to(Pe.root,_),ref:f},ce,{children:w}))})}),xxe=Oxe;ne();var dee=O(k()),_xe=oOe({createStyledComponent:fo("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,f)=>f.root}),useThemeProps:s=>ql({props:s,name:"MuiStack"})}),Sxe=_xe;function Ixe(s){return tl("MuiFormControlLabel",s)}var jxe=Hl("MuiFormControlLabel",["root","labelPlacementStart","labelPlacementTop","labelPlacementBottom","disabled","label","error","required","asterisk"]),iv=jxe,Exe=O(Dr()),NT=O(Dr()),Pxe=["checked","className","componentsProps","control","disabled","disableTypography","inputRef","label","labelPlacement","name","onChange","required","slotProps","value"],kxe=s=>{let{classes:f,disabled:m,labelPlacement:w,error:_,required:A}=s,z={root:["root",m&&"disabled",`labelPlacement${Hn(w)}`,_&&"error",A&&"required"],label:["label",m&&"disabled"],asterisk:["asterisk",_&&"error"]};return Vl(z,Ixe,f)},Cxe=fo("label",{name:"MuiFormControlLabel",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[{[`& .${iv.label}`]:f.label},f.root,f[`labelPlacement${Hn(m.labelPlacement)}`]]}})(({theme:s,ownerState:f})=>B({display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16,[`&.${iv.disabled}`]:{cursor:"default"}},f.labelPlacement==="start"&&{flexDirection:"row-reverse",marginLeft:16,marginRight:-11},f.labelPlacement==="top"&&{flexDirection:"column-reverse",marginLeft:16},f.labelPlacement==="bottom"&&{flexDirection:"column",marginLeft:16},{[`& .${iv.label}`]:{[`&.${iv.disabled}`]:{color:(s.vars||s).palette.text.disabled}}})),Axe=fo("span",{name:"MuiFormControlLabel",slot:"Asterisk",overridesResolver:(s,f)=>f.asterisk})(({theme:s})=>({[`&.${iv.error}`]:{color:(s.vars||s).palette.error.main}})),Mxe=dee.forwardRef(function(s,f){var m,w;let _=ql({props:s,name:"MuiFormControlLabel"}),{className:A,componentsProps:z={},control:N,disabled:V,disableTypography:H,label:X,labelPlacement:Q="end",required:te,slotProps:oe={}}=_,re=vn(_,Pxe),le=TT(),ce=(m=V??N.props.disabled)!=null?m:le?.disabled,ie=te??N.props.required,Pe={disabled:ce,required:ie};["checked","name","onChange","value","inputRef"].forEach(ae=>{typeof N.props[ae]>"u"&&typeof _[ae]<"u"&&(Pe[ae]=_[ae])});let Ae=nee({props:_,muiFormControl:le,states:["error"]}),Oe=B({},_,{disabled:ce,labelPlacement:Q,required:ie,error:Ae.error}),Se=kxe(Oe),he=(w=oe.typography)!=null?w:z.typography,je=X;return je!=null&&je.type!==ree&&!H&&(je=(0,Exe.jsx)(ree,B({component:"span"},he,{className:to(Se.label,he?.className),children:je}))),(0,NT.jsxs)(Cxe,B({className:to(Se.root,A),ownerState:Oe,ref:f},re,{children:[dee.cloneElement(N,Pe),ie?(0,NT.jsxs)(Sxe,{display:"block",children:[je,(0,NT.jsxs)(Axe,{ownerState:Oe,"aria-hidden":!0,className:Se.asterisk,children:["\u2009","*"]})]}):je]}))}),av=Mxe;ne();var Txe=O(k());function Rxe(s){return tl("MuiFormGroup",s)}var YRt=Hl("MuiFormGroup",["root","row","error"]),zxe=O(Dr()),Dxe=["className","row"],Lxe=s=>{let{classes:f,row:m,error:w}=s;return Vl({root:["root",m&&"row",w&&"error"]},Rxe,f)},Nxe=fo("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.row&&f.row]}})(({ownerState:s})=>B({display:"flex",flexDirection:"column",flexWrap:"wrap"},s.row&&{flexDirection:"row"})),Fxe=Txe.forwardRef(function(s,f){let m=ql({props:s,name:"MuiFormGroup"}),{className:w,row:_=!1}=m,A=vn(m,Dxe),z=TT(),N=nee({props:m,muiFormControl:z,states:["error"]}),V=B({},m,{row:_,error:N.error}),H=Lxe(V);return(0,zxe.jsx)(Nxe,B({className:to(H.root,w),ownerState:V,ref:f},A))}),Wxe=Fxe;ne();var FT=O(k()),Bxe=O(kg());ne();var QRt=O(k()),ZRt=O(k()),Hxe=O(Dr()),Vxe=nv((0,Hxe.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),ezt=O(k()),qxe=O(Dr()),Uxe=nv((0,qxe.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked"),mee=O(Dr()),$xe=O(Dr()),Jxe=fo("span",{shouldForwardProp:rv})({position:"relative",display:"flex"}),Gxe=fo(Vxe)({transform:"scale(1)"}),Xxe=fo(Uxe)(({theme:s,ownerState:f})=>B({left:0,position:"absolute",transform:"scale(0)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeIn,duration:s.transitions.duration.shortest})},f.checked&&{transform:"scale(1)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeOut,duration:s.transitions.duration.shortest})}));function Kxe(s){let{checked:f=!1,classes:m={},fontSize:w}=s,_=B({},s,{checked:f});return(0,$xe.jsxs)(Jxe,{className:m.root,ownerState:_,children:[(0,mee.jsx)(Gxe,{fontSize:w,className:m.background,ownerState:_}),(0,mee.jsx)(Xxe,{fontSize:w,className:m.dot,ownerState:_})]})}var hee=Kxe,Yxe=O(k()),Qxe=O(k()),Zxe=Qxe.createContext(void 0),gee=Zxe;function e8e(){return Yxe.useContext(gee)}function t8e(s){return tl("MuiRadio",s)}var r8e=Hl("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary","sizeSmall"]),vee=r8e,WT=O(Dr()),n8e=["checked","checkedIcon","color","icon","name","onChange","size","className"],o8e=s=>{let{classes:f,color:m,size:w}=s,_={root:["root",`color${Hn(m)}`,w!=="medium"&&`size${Hn(w)}`]};return B({},f,Vl(_,t8e,f))},i8e=fo(lee,{shouldForwardProp:s=>rv(s)||s==="classes",name:"MuiRadio",slot:"Root",overridesResolver:(s,f)=>{let{ownerState:m}=s;return[f.root,m.size!=="medium"&&f[`size${Hn(m.size)}`],f[`color${Hn(m.color)}`]]}})(({theme:s,ownerState:f})=>B({color:(s.vars||s).palette.text.secondary},!f.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${f.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[f.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,Bxe.alpha)(f.color==="default"?s.palette.action.active:s.palette[f.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},f.color!=="default"&&{[`&.${vee.checked}`]:{color:(s.vars||s).palette[f.color].main}},{[`&.${vee.disabled}`]:{color:(s.vars||s).palette.action.disabled}}));function a8e(s,f){return typeof f=="object"&&f!==null?s===f:String(s)===String(f)}var yee=(0,WT.jsx)(hee,{checked:!0}),bee=(0,WT.jsx)(hee,{}),l8e=FT.forwardRef(function(s,f){var m,w;let _=ql({props:s,name:"MuiRadio"}),{checked:A,checkedIcon:z=yee,color:N="primary",icon:V=bee,name:H,onChange:X,size:Q="medium",className:te}=_,oe=vn(_,n8e),re=B({},_,{color:N,size:Q}),le=o8e(re),ce=e8e(),ie=A,Pe=zOe(X,ce&&ce.onChange),Ae=H;return ce&&(typeof ie>"u"&&(ie=a8e(ce.value,_.value)),typeof Ae>"u"&&(Ae=ce.name)),(0,WT.jsx)(i8e,B({type:"radio",icon:FT.cloneElement(V,{fontSize:(m=bee.props.fontSize)!=null?m:Q}),checkedIcon:FT.cloneElement(z,{fontSize:(w=yee.props.fontSize)!=null?w:Q}),ownerState:re,classes:le,name:Ae,checked:ie,onChange:Pe,ref:f,className:to(le.root,te)},oe))}),wee=l8e;ne();var S_=O(k()),Oee=O(Dr()),s8e=["actions","children","defaultValue","name","onChange","value"],u8e=S_.forwardRef(function(s,f){let{actions:m,children:w,defaultValue:_,name:A,onChange:z,value:N}=s,V=vn(s,s8e),H=S_.useRef(null),[X,Q]=JZ({controlled:N,default:_,name:"RadioGroup"});S_.useImperativeHandle(m,()=>({focus:()=>{let le=H.current.querySelector("input:not(:disabled):checked");le||(le=H.current.querySelector("input:not(:disabled)")),le&&le.focus()}}),[]);let te=ET(f,H),oe=VOe(A),re=S_.useMemo(()=>({name:oe,onChange(le){Q(le.target.value),z&&z(le,le.target.value)},value:X}),[oe,z,Q,X]);return(0,Oee.jsx)(gee.Provider,{value:re,children:(0,Oee.jsx)(Wxe,B({role:"radiogroup",ref:te},V,{children:w}))})}),c8e=u8e,Hc=O(k()),p8e=WZ({palette:{primary:{main:"#00827c"}}}),BT=O(Dr());function f8e({expandable:s,expanded:f,highlight:m,isLast:w,children:_,onClick:A}){let z=["jstree-node"];return f?z.push("jstree-open"):z.push("jstree-closed"),s||z.push("jstree-leaf"),w&&z.push("jstree-last"),m&&(_=(0,BT.jsx)("span",{className:"jstree-clicked",children:_})),(0,BT.jsxs)("li",{role:"treeitem",className:z.join(" "),children:[(0,BT.jsx)("i",{className:"jstree-icon jstree-ocl",role:"presentation",onClick:A}),_]})}var sn=O(Dr());function d8e({ontology:s,entityType:f,selectedEntity:m,lang:w,onNavigateToEntity:_,onNavigateToOntology:A,apiUrl:z}){let N=ju(),V=Ro(je=>je.ontologies.nodesWithChildrenLoaded),H=Ro(je=>je.ontologies.nodeChildren),X=Ro(je=>je.ontologies.rootNodes),Q=Ro(je=>je.ontologies.numPendingTreeRequests),te=Ro(je=>je.ontologies.preferredRoots),oe=Ro(je=>je.ontologies.automaticallyExpandedNodes),re=Ro(je=>je.ontologies.manuallyExpandedNodes),le=m?m.isDeprecated():Ro(je=>je.ontologies.displayObsolete),ce=Ro(je=>je.ontologies.displaySiblings),ie=Ro(je=>je.ontologies.displayCounts),Pe=(0,Hc.useCallback)(je=>{let ae=re.indexOf(je.absoluteIdentity)!==-1||oe.indexOf(je.absoluteIdentity)!==-1;N(ae?oZ(je):nZ(je))},[N,JSON.stringify(oe),JSON.stringify(re)]);(0,Hc.useEffect)(()=>{N(eZ({entityType:f,selectedEntity:m}))},[N,s.getOntologyId(),f,m?.getIri()]),(0,Hc.useEffect)(()=>{N(ZQ())},[N,s.getOntologyId(),f,JSON.stringify(m),le,te,w]),(0,Hc.useEffect)(()=>{if(m){let je=m.getIri(),ae=N(a_({ontologyId:s.getOntologyId(),entityType:m.getTypePlural(),entityIri:je,lang:w,showObsoleteEnabled:le,showSiblingsEnabled:ce,apiUrl:z}));return()=>ae.abort()}else{let je=N(l_({ontologyId:s.getOntologyId(),entityType:f,preferredRoots:te,lang:w,showObsoleteEnabled:le,apiUrl:z}));return()=>je.abort()}},[N,f,JSON.stringify(m),s.getOntologyId(),te,w,le]),(0,Hc.useEffect)(()=>{let je=re.filter(we=>V.indexOf(we)===-1);ce&&(je=[...je,...oe.filter(we=>V.indexOf(we)===-1)]);let ae=[];for(let we of je)ae.push(N(s_({ontologyId:s.getOntologyId(),entityTypePlural:m?.getTypePlural()||f,entityIri:we.split(";").pop(),absoluteIdentity:we,lang:w,showObsoleteEnabled:le,apiUrl:z})));return()=>{for(let we of ae)we.abort()}},[N,w,JSON.stringify(re),JSON.stringify(oe),JSON.stringify(H),s.getOntologyId(),f,te,le,ce]);let Ae=(0,Hc.useCallback)(()=>{N(le?aZ():iZ())},[N,le]),Oe=(0,Hc.useCallback)(()=>{N(ce?sZ():lZ())},[N,ce]),Se=(0,Hc.useCallback)(()=>{N(ie?cZ():uZ())},[N,ie]);function he(je,ae){if(ae>100)throw new Error("probable cyclic tree (renderNodeChildren)");let we=[...je];we.sort((Te,We)=>{let $e=Te?.title?Te.title.toString().toUpperCase():"",it=We?.title?We.title.toString().toUpperCase():"";return $e===it?0:$e>it?1:-1});let Ce=we.filter((Te,We,$e)=>!We||Te.absoluteIdentity!==$e[We-1].absoluteIdentity);return(0,sn.jsx)("ul",{role:"group",className:"jstree-container-ul jstree-children jstree-no-icons",children:Ce.map((Te,We)=>{let $e=re.indexOf(Te.absoluteIdentity)!==-1||oe.indexOf(Te.absoluteIdentity)!==-1,it=We===Ce.length-1,Mt=m&&Te.iri===m.getIri()||!1;return(0,sn.jsxs)(f8e,{expandable:Te.expandable,expanded:$e,highlight:Mt,isLast:it,onClick:()=>{Pe(Te)},children:[Te.childRelationToParent==="http://purl.obolibrary.org/obo/BFO_0000050"&&(0,sn.jsx)("img",{className:"mr-1",src:tT("/","/part.svg"),style:{height:"1em",display:"inline"}}),Te.childRelationToParent==="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&(0,sn.jsx)("img",{className:"mr-1",src:tT("/","/instance.svg"),style:{height:"1em",display:"inline"}}),(0,sn.jsx)(m8e,{ontology:s,entity:Te.entity,title:Te.title,lang:w,onNavigateToEntity:_,onNavigateToOntology:A}),!le&&ie&&Te.numDescendants>0&&(0,sn.jsx)("span",{style:{color:"gray"},children:" ("+Te.numDescendants.toLocaleString()+")"}),$e&&he(H[Te.absoluteIdentity]||[],ae+1)]},I4e())})})}return(0,sn.jsx)(Mf,{theme:p8e,children:(0,sn.jsxs)("div",{className:"flex flex-col-reverse lg:grid lg:grid-cols-3 lg:gap-4",children:[X?(0,sn.jsxs)("div",{className:"lg:col-span-2 relative",children:[(0,sn.jsx)("div",{className:"px-3 pb-3 jstree jstree-1 jstree-proton overflow-x-auto",role:"tree",children:he(X,0)}),Q>0?(0,sn.jsx)("div",{className:"absolute spinner-default w-7 h-7 -top-1 -left-4 z-auto"}):null]}):null,(0,sn.jsxs)("div",{className:"lg:col-span-1 flex flex-col bg-white px-2 mb-2 rounded-lg",children:[f==="classes"&&s.getPreferredRoots().length>0&&(0,sn.jsx)("div",{className:"mb-2",children:(0,sn.jsx)(xxe,{children:(0,sn.jsxs)(c8e,{name:"radio-buttons-group",value:te?"true":"false",children:[(0,sn.jsx)(av,{value:"true",onClick:()=>N(tZ()),control:(0,sn.jsx)(wee,{}),label:"Preferred roots"}),(0,sn.jsx)(av,{value:"false",onClick:()=>N(rZ()),control:(0,sn.jsx)(wee,{}),label:"All classes"})]})})}),(0,sn.jsx)(av,{control:(0,sn.jsx)(DT,{disabled:le,checked:!le&&ie,onClick:Se}),label:"Show counts"}),(0,sn.jsx)(av,{control:(0,sn.jsx)(DT,{checked:le,onClick:Ae}),label:"Show obsolete terms"}),m&&(0,sn.jsx)(av,{control:(0,sn.jsx)(DT,{checked:ce,onClick:Oe}),label:"Show all siblings"})]})]})})}function m8e({ontology:s,entity:f,title:m,lang:w,onNavigateToEntity:_,onNavigateToOntology:A}){let z=f.getDefinedBy();return z.indexOf(s.getOntologyId())!==-1&&(z=[]),(0,sn.jsxs)("span",{children:[(0,sn.jsx)("a",{title:f.getIri(),className:"link-default",onClick:()=>_(s,f),children:m}),z.length>0&&z.map(N=>(0,sn.jsx)("span",{onClick:()=>A(N,f),title:N.toUpperCase(),className:"mx-1 link-ontology px-2 py-0.5 rounded-md text-sm text-white uppercase ml-1",children:N}))]})}var I_=function(){function s(){this.listeners=[]}var f=s.prototype;return f.subscribe=function(m){var w=this,_=m||function(){};return this.listeners.push(_),this.onSubscribe(),function(){w.listeners=w.listeners.filter(function(A){return A!==_}),w.onUnsubscribe()}},f.hasListeners=function(){return this.listeners.length>0},f.onSubscribe=function(){},f.onUnsubscribe=function(){},s}();ne();var xee=typeof window>"u";function Ri(){}function h8e(s,f){return typeof s=="function"?s(f):s}function g8e(s){return typeof s=="number"&&s>=0&&s!==1/0}function j_(s){return Array.isArray(s)?s:[s]}function v8e(s,f){return Math.max(s+(f||0)-Date.now(),0)}function HT(s,f,m){return P_(s)?typeof f=="function"?B({},m,{queryKey:s,queryFn:f}):B({},f,{queryKey:s}):s}function Vc(s,f,m){return P_(s)?[B({},f,{queryKey:s}),m]:[s||{},f]}function y8e(s,f){if(s===!0&&f===!0||s==null&&f==null)return"all";if(s===!1&&f===!1)return"none";var m=s??!f;return m?"active":"inactive"}function _ee(s,f){var m=s.active,w=s.exact,_=s.fetching,A=s.inactive,z=s.predicate,N=s.queryKey,V=s.stale;if(P_(N)){if(w){if(f.queryHash!==VT(N,f.options))return!1}else if(!E_(f.queryKey,N))return!1}var H=y8e(m,A);if(H==="none")return!1;if(H!=="all"){var X=f.isActive();if(H==="active"&&!X||H==="inactive"&&X)return!1}return!(typeof V=="boolean"&&f.isStale()!==V||typeof _=="boolean"&&f.isFetching()!==_||z&&!z(f))}function See(s,f){var m=s.exact,w=s.fetching,_=s.predicate,A=s.mutationKey;if(P_(A)){if(!f.options.mutationKey)return!1;if(m){if($f(f.options.mutationKey)!==$f(A))return!1}else if(!E_(f.options.mutationKey,A))return!1}return!(typeof w=="boolean"&&f.state.status==="loading"!==w||_&&!_(f))}function VT(s,f){var m=f?.queryKeyHashFn||$f;return m(s)}function $f(s){var f=j_(s);return b8e(f)}function b8e(s){return JSON.stringify(s,function(f,m){return qT(m)?Object.keys(m).sort().reduce(function(w,_){return w[_]=m[_],w},{}):m})}function E_(s,f){return Iee(j_(s),j_(f))}function Iee(s,f){return s===f?!0:typeof s!=typeof f?!1:s&&f&&typeof s=="object"&&typeof f=="object"?!Object.keys(f).some(function(m){return!Iee(s[m],f[m])}):!1}function jee(s,f){if(s===f)return s;var m=Array.isArray(s)&&Array.isArray(f);if(m||qT(s)&&qT(f)){for(var w=m?s.length:Object.keys(s).length,_=m?f:Object.keys(f),A=_.length,z=m?[]:{},N=0,V=0;V"u")return!0;var m=f.prototype;return!(!Eee(m)||!m.hasOwnProperty("isPrototypeOf"))}function Eee(s){return Object.prototype.toString.call(s)==="[object Object]"}function P_(s){return typeof s=="string"||Array.isArray(s)}function w8e(s){return new Promise(function(f){setTimeout(f,s)})}function Pee(s){Promise.resolve().then(s).catch(function(f){return setTimeout(function(){throw f})})}function kee(){if(typeof AbortController=="function")return new AbortController}var O8e=function(s){ov(f,s);function f(){var w;return w=s.call(this)||this,w.setup=function(_){var A;if(!xee&&(A=window)!=null&&A.addEventListener){var z=function(){return _()};return window.addEventListener("visibilitychange",z,!1),window.addEventListener("focus",z,!1),function(){window.removeEventListener("visibilitychange",z),window.removeEventListener("focus",z)}}},w}var m=f.prototype;return m.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},m.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},m.setEventListener=function(w){var _,A=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(z){typeof z=="boolean"?A.setFocused(z):A.onFocus()})},m.setFocused=function(w){this.focused=w,w&&this.onFocus()},m.onFocus=function(){this.listeners.forEach(function(w){w()})},m.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},f}(I_),k_=new O8e,x8e=function(s){ov(f,s);function f(){var w;return w=s.call(this)||this,w.setup=function(_){var A;if(!xee&&(A=window)!=null&&A.addEventListener){var z=function(){return _()};return window.addEventListener("online",z,!1),window.addEventListener("offline",z,!1),function(){window.removeEventListener("online",z),window.removeEventListener("offline",z)}}},w}var m=f.prototype;return m.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},m.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},m.setEventListener=function(w){var _,A=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(z){typeof z=="boolean"?A.setOnline(z):A.onOnline()})},m.setOnline=function(w){this.online=w,w&&this.onOnline()},m.onOnline=function(){this.listeners.forEach(function(w){w()})},m.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},f}(I_),C_=new x8e;function _8e(s){return Math.min(1e3*Math.pow(2,s),3e4)}function A_(s){return typeof s?.cancel=="function"}var Cee=function(s){this.revert=s?.revert,this.silent=s?.silent};function UT(s){return s instanceof Cee}var Aee=function(s){var f=this,m=!1,w,_,A,z;this.abort=s.abort,this.cancel=function(Q){return w?.(Q)},this.cancelRetry=function(){m=!0},this.continueRetry=function(){m=!1},this.continue=function(){return _?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(Q,te){A=Q,z=te});var N=function(Q){f.isResolved||(f.isResolved=!0,s.onSuccess==null||s.onSuccess(Q),_?.(),A(Q))},V=function(Q){f.isResolved||(f.isResolved=!0,s.onError==null||s.onError(Q),_?.(),z(Q))},H=function(){return new Promise(function(Q){_=Q,f.isPaused=!0,s.onPause==null||s.onPause()}).then(function(){_=void 0,f.isPaused=!1,s.onContinue==null||s.onContinue()})},X=function Q(){if(!f.isResolved){var te;try{te=s.fn()}catch(oe){te=Promise.reject(oe)}w=function(oe){if(!f.isResolved&&(V(new Cee(oe)),f.abort==null||f.abort(),A_(te)))try{te.cancel()}catch{}},f.isTransportCancelable=A_(te),Promise.resolve(te).then(N).catch(function(oe){var re,le;if(!f.isResolved){var ce=(re=s.retry)!=null?re:3,ie=(le=s.retryDelay)!=null?le:_8e,Pe=typeof ie=="function"?ie(f.failureCount,oe):ie,Ae=ce===!0||typeof ce=="number"&&f.failureCount"u"&&(z.exact=!0),this.queries.find(function(N){return _ee(z,N)})},m.findAll=function(w,_){var A=Vc(w,_),z=A[0];return Object.keys(z).length>0?this.queries.filter(function(N){return _ee(z,N)}):this.queries},m.notify=function(w){var _=this;Xo.batch(function(){_.listeners.forEach(function(A){A(w)})})},m.onFocus=function(){var w=this;Xo.batch(function(){w.queries.forEach(function(_){_.onFocus()})})},m.onOnline=function(){var w=this;Xo.batch(function(){w.queries.forEach(function(_){_.onOnline()})})},f}(I_);ne(),ne();var P8e=function(){function s(m){this.options=B({},m.defaultOptions,m.options),this.mutationId=m.mutationId,this.mutationCache=m.mutationCache,this.observers=[],this.state=m.state||k8e(),this.meta=m.meta}var f=s.prototype;return f.setState=function(m){this.dispatch({type:"setState",state:m})},f.addObserver=function(m){this.observers.indexOf(m)===-1&&this.observers.push(m)},f.removeObserver=function(m){this.observers=this.observers.filter(function(w){return w!==m})},f.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Ri).catch(Ri)):Promise.resolve()},f.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},f.execute=function(){var m=this,w,_=this.state.status==="loading",A=Promise.resolve();return _||(this.dispatch({type:"loading",variables:this.options.variables}),A=A.then(function(){m.mutationCache.config.onMutate==null||m.mutationCache.config.onMutate(m.state.variables,m)}).then(function(){return m.options.onMutate==null?void 0:m.options.onMutate(m.state.variables)}).then(function(z){z!==m.state.context&&m.dispatch({type:"loading",context:z,variables:m.state.variables})})),A.then(function(){return m.executeMutation()}).then(function(z){w=z,m.mutationCache.config.onSuccess==null||m.mutationCache.config.onSuccess(w,m.state.variables,m.state.context,m)}).then(function(){return m.options.onSuccess==null?void 0:m.options.onSuccess(w,m.state.variables,m.state.context)}).then(function(){return m.options.onSettled==null?void 0:m.options.onSettled(w,null,m.state.variables,m.state.context)}).then(function(){return m.dispatch({type:"success",data:w}),w}).catch(function(z){return m.mutationCache.config.onError==null||m.mutationCache.config.onError(z,m.state.variables,m.state.context,m),Tee().error(z),Promise.resolve().then(function(){return m.options.onError==null?void 0:m.options.onError(z,m.state.variables,m.state.context)}).then(function(){return m.options.onSettled==null?void 0:m.options.onSettled(void 0,z,m.state.variables,m.state.context)}).then(function(){throw m.dispatch({type:"error",error:z}),z})})},f.executeMutation=function(){var m=this,w;return this.retryer=new Aee({fn:function(){return m.options.mutationFn?m.options.mutationFn(m.state.variables):Promise.reject("No mutationFn found")},onFail:function(){m.dispatch({type:"failed"})},onPause:function(){m.dispatch({type:"pause"})},onContinue:function(){m.dispatch({type:"continue"})},retry:(w=this.options.retry)!=null?w:0,retryDelay:this.options.retryDelay}),this.retryer.promise},f.dispatch=function(m){var w=this;this.state=C8e(this.state,m),Xo.batch(function(){w.observers.forEach(function(_){_.onMutationUpdate(m)}),w.mutationCache.notify(w)})},s}();function k8e(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function C8e(s,f){switch(f.type){case"failed":return B({},s,{failureCount:s.failureCount+1});case"pause":return B({},s,{isPaused:!0});case"continue":return B({},s,{isPaused:!1});case"loading":return B({},s,{context:f.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:f.variables});case"success":return B({},s,{data:f.data,error:null,status:"success",isPaused:!1});case"error":return B({},s,{data:void 0,error:f.error,failureCount:s.failureCount+1,isPaused:!1,status:"error"});case"setState":return B({},s,f.state);default:return s}}var A8e=function(s){ov(f,s);function f(w){var _;return _=s.call(this)||this,_.config=w||{},_.mutations=[],_.mutationId=0,_}var m=f.prototype;return m.build=function(w,_,A){var z=new P8e({mutationCache:this,mutationId:++this.mutationId,options:w.defaultMutationOptions(_),state:A,defaultOptions:_.mutationKey?w.getMutationDefaults(_.mutationKey):void 0,meta:_.meta});return this.add(z),z},m.add=function(w){this.mutations.push(w),this.notify(w)},m.remove=function(w){this.mutations=this.mutations.filter(function(_){return _!==w}),w.cancel(),this.notify(w)},m.clear=function(){var w=this;Xo.batch(function(){w.mutations.forEach(function(_){w.remove(_)})})},m.getAll=function(){return this.mutations},m.find=function(w){return typeof w.exact>"u"&&(w.exact=!0),this.mutations.find(function(_){return See(w,_)})},m.findAll=function(w){return this.mutations.filter(function(_){return See(w,_)})},m.notify=function(w){var _=this;Xo.batch(function(){_.listeners.forEach(function(A){A(w)})})},m.onFocus=function(){this.resumePausedMutations()},m.onOnline=function(){this.resumePausedMutations()},m.resumePausedMutations=function(){var w=this.mutations.filter(function(_){return _.state.isPaused});return Xo.batch(function(){return w.reduce(function(_,A){return _.then(function(){return A.continue().catch(Ri)})},Promise.resolve())})},f}(I_);function M8e(){return{onFetch:function(s){s.fetchFn=function(){var f,m,w,_,A,z,N=(f=s.fetchOptions)==null||(m=f.meta)==null?void 0:m.refetchPage,V=(w=s.fetchOptions)==null||(_=w.meta)==null?void 0:_.fetchMore,H=V?.pageParam,X=V?.direction==="forward",Q=V?.direction==="backward",te=((A=s.state.data)==null?void 0:A.pages)||[],oe=((z=s.state.data)==null?void 0:z.pageParams)||[],re=kee(),le=re?.signal,ce=oe,ie=!1,Pe=s.options.queryFn||function(){return Promise.reject("Missing queryFn")},Ae=function(We,$e,it,Mt){return ce=Mt?[$e].concat(ce):[].concat(ce,[$e]),Mt?[it].concat(We):[].concat(We,[it])},Oe=function(We,$e,it,Mt){if(ie)return Promise.reject("Cancelled");if(typeof it>"u"&&!$e&&We.length)return Promise.resolve(We);var Lt={queryKey:s.queryKey,signal:le,pageParam:it,meta:s.meta},Gt=Pe(Lt),Ee=Promise.resolve(Gt).then(function(Yt){return Ae(We,it,Yt,Mt)});if(A_(Gt)){var Ye=Ee;Ye.cancel=Gt.cancel}return Ee},Se;if(!te.length)Se=Oe([]);else if(X){var he=typeof H<"u",je=he?H:Ree(s.options,te);Se=Oe(te,he,je)}else if(Q){var ae=typeof H<"u",we=ae?H:T8e(s.options,te);Se=Oe(te,ae,we,!0)}else(function(){ce=[];var We=typeof s.options.getNextPageParam>"u",$e=N&&te[0]?N(te[0],0,te):!0;Se=$e?Oe([],We,oe[0]):Promise.resolve(Ae([],oe[0],te[0]));for(var it=function(Lt){Se=Se.then(function(Gt){var Ee=N&&te[Lt]?N(te[Lt],Lt,te):!0;if(Ee){var Ye=We?oe[Lt]:Ree(s.options,Gt);return Oe(Gt,We,Ye)}return Promise.resolve(Ae(Gt,oe[Lt],te[Lt]))})},Mt=1;Mt"u"&&(H.revert=!0);var X=Xo.batch(function(){return A.queryCache.findAll(N).map(function(Q){return Q.cancel(H)})});return Promise.all(X).then(Ri).catch(Ri)},f.invalidateQueries=function(m,w,_){var A,z,N,V=this,H=Vc(m,w,_),X=H[0],Q=H[1],te=B({},X,{active:(A=(z=X.refetchActive)!=null?z:X.active)!=null?A:!0,inactive:(N=X.refetchInactive)!=null?N:!1});return Xo.batch(function(){return V.queryCache.findAll(X).forEach(function(oe){oe.invalidate()}),V.refetchQueries(te,Q)})},f.refetchQueries=function(m,w,_){var A=this,z=Vc(m,w,_),N=z[0],V=z[1],H=Xo.batch(function(){return A.queryCache.findAll(N).map(function(Q){return Q.fetch(void 0,B({},V,{meta:{refetchPage:N?.refetchPage}}))})}),X=Promise.all(H).then(Ri);return V?.throwOnError||(X=X.catch(Ri)),X},f.fetchQuery=function(m,w,_){var A=HT(m,w,_),z=this.defaultQueryOptions(A);typeof z.retry>"u"&&(z.retry=!1);var N=this.queryCache.build(this,z);return N.isStaleByTime(z.staleTime)?N.fetch(z):Promise.resolve(N.state.data)},f.prefetchQuery=function(m,w,_){return this.fetchQuery(m,w,_).then(Ri).catch(Ri)},f.fetchInfiniteQuery=function(m,w,_){var A=HT(m,w,_);return A.behavior=M8e(),this.fetchQuery(A)},f.prefetchInfiniteQuery=function(m,w,_){return this.fetchInfiniteQuery(m,w,_).then(Ri).catch(Ri)},f.cancelMutations=function(){var m=this,w=Xo.batch(function(){return m.mutationCache.getAll().map(function(_){return _.cancel()})});return Promise.all(w).then(Ri).catch(Ri)},f.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},f.executeMutation=function(m){return this.mutationCache.build(this,m).execute()},f.getQueryCache=function(){return this.queryCache},f.getMutationCache=function(){return this.mutationCache},f.getDefaultOptions=function(){return this.defaultOptions},f.setDefaultOptions=function(m){this.defaultOptions=m},f.setQueryDefaults=function(m,w){var _=this.queryDefaults.find(function(A){return $f(m)===$f(A.queryKey)});_?_.defaultOptions=w:this.queryDefaults.push({queryKey:m,defaultOptions:w})},f.getQueryDefaults=function(m){var w;return m?(w=this.queryDefaults.find(function(_){return E_(m,_.queryKey)}))==null?void 0:w.defaultOptions:void 0},f.setMutationDefaults=function(m,w){var _=this.mutationDefaults.find(function(A){return $f(m)===$f(A.mutationKey)});_?_.defaultOptions=w:this.mutationDefaults.push({mutationKey:m,defaultOptions:w})},f.getMutationDefaults=function(m){var w;return m?(w=this.mutationDefaults.find(function(_){return E_(m,_.mutationKey)}))==null?void 0:w.defaultOptions:void 0},f.defaultQueryOptions=function(m){if(m?._defaulted)return m;var w=B({},this.defaultOptions.queries,this.getQueryDefaults(m?.queryKey),m,{_defaulted:!0});return!w.queryHash&&w.queryKey&&(w.queryHash=VT(w.queryKey,w)),w},f.defaultQueryObserverOptions=function(m){return this.defaultQueryOptions(m)},f.defaultMutationOptions=function(m){return m?._defaulted?m:B({},this.defaultOptions.mutations,this.getMutationDefaults(m?.mutationKey),m,{_defaulted:!0})},f.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},s}(),z8e=O(D()),D8e=z8e.default.unstable_batchedUpdates;Xo.setBatchNotifyFunction(D8e);var L8e=console;I8e(L8e);var lv=O(k()),zee=lv.default.createContext(void 0),N8e=lv.default.createContext(!1);function F8e(s){return s&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=zee),window.ReactQueryClientContext):zee}var W8e=function(s){var f=s.client,m=s.contextSharing,w=m===void 0?!1:m,_=s.children;lv.default.useEffect(function(){return f.mount(),function(){f.unmount()}},[f]);var A=F8e(w);return lv.default.createElement(N8e.Provider,{value:w},lv.default.createElement(A.Provider,{value:f},_))},em=O(Dr());function B8e(s,f,m){_9.default.render(H8e(s),f,m)}function H8e(s){let f=new R8e;return(0,em.jsx)(M9,{store:M4e,children:(0,em.jsx)(W8e,{client:f,children:(0,em.jsx)(V8e,{ontologyId:s.ontologyId,iri:s.iri,entityType:s.entityType,apiUrl:s.apiUrl,onNavigateToEntity:s.onNavigateToEntity,onNavigateToOntology:s.onNavigateToOntology})})})}function V8e(s){let{entityType:f,lang:m="en",onNavigateToEntity:w=()=>{},onNavigateToOntology:_=()=>{}}=s,A=Ro(oe=>oe.ontologies.ontology),z=Ro(oe=>oe.ontologies.loadingOntology),N=Ro(oe=>oe.ontologies.entity),V=Ro(oe=>oe.ontologies.loadingEntity),H=Ro(oe=>oe.ontologies.loadingClassInstances),X=ju(),Q=(oe,re)=>{let le=oe.getOntologyId(),ce=re.getTypePlural(),ie=re.getIri();w(le,ce,ie)},te=(oe,re)=>{let le=re.getTypePlural(),ce=re.getIri();_(oe,le,ce)};return(0,L0.useEffect)(()=>{X(r_({ontologyId:s.ontologyId,lang:"en",apiUrl:s.apiUrl}))},[X,s.ontologyId,s.apiUrl]),(0,L0.useEffect)(()=>{A&&s.iri&&(s.entityType&&s.entityType!=="entities"?X(n_({ontologyId:s.ontologyId,entityType:s.entityType,entityIri:s.iri,searchParams:new URLSearchParams})):X(o_({ontologyId:s.ontologyId,entityIri:s.iri})))},[X,s.ontologyId,s.entityType,s.iri,A]),(0,L0.useEffect)(()=>{N&&s.entityType==="classes"&&X(i_({ontologyId:N.getOntologyId(),classIri:N.getIri(),searchParams:new URLSearchParams}))},[X,s.ontologyId,s.entityType,s.iri,N]),(0,em.jsxs)(L0.Fragment,{children:[(V||z||H)&&(0,em.jsx)(gxe,{}),!V&&!z&&!H&&A&&(0,em.jsx)(d8e,{ontology:A,entityType:f||"entities",lang:m,selectedEntity:N,onNavigateToEntity:Q,onNavigateToOntology:te,apiUrl:s.apiUrl})]})}window.OLSWidgets={createEntityTree:B8e}})();var w5e=E(cn()),DA=e=>((0,Sf.useEffect)(()=>{let t=document.querySelector("#tree_container");window.OLSWidgets.createEntityTree({iri:e.iri,ontologyId:e.ontologyId,apiUrl:e.api.substring(0,e.api.lastIndexOf("api")),entityType:(e.entityType?Lo(e.entityType,!1):void 0)||"entities",onNavigateToEntity:e.onNavigateToEntity?e.onNavigateToEntity:(n,r,o)=>{console.log(`navigate to entity with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)},onNavigateToOntology:e.onNavigateToOntology?e.onNavigateToOntology:(n,r,o)=>{console.log(`navigate to ontology with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)}},t)},[e.api,e.iri,e.ontologyId,e.entityType,e.onNavigateToEntity,e.onNavigateToOntology,"HierarchyWidgetOLS"]),Sf.default.createElement(ii,{style:{minWidth:"600px"}},Sf.default.createElement("div",{id:"tree_container"})));function O5e(e,t,n){w5e.default.render(BTt(e),t,n)}function BTt(e){let t=new tr;return Sf.default.createElement(er,{colorMode:"light"},Sf.default.createElement(rr,{client:t},Sf.default.createElement(DA,{ontologyId:e.ontologyId,api:e.api,iri:e.iri,entityType:e.entityType,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology})))}var N8=E(L());function LA(e){function t(){return e.synonyms&&e.synonyms.length>0?e.synonyms.map((n,r)=>N8.default.createElement(wt,{key:n+r},n)):N8.default.createElement(Pt,null,"No alternative names exist.")}return N8.default.createElement(ii,null,N8.default.createElement(_n,{style:{padding:10},direction:"column"},t()))}var d0=E(L());function NA(e){function t(n){return n&&n.length>0?n?.map((r,o)=>d0.default.createElement(wt,{key:o},r)):d0.default.createElement(Pt,null,"No cross references exist.")}return d0.default.createElement(ii,null,d0.default.createElement(d0.default.Fragment,null,d0.default.createElement(_n,{style:{padding:7},direction:"column"},t(e.crossrefs))))}var ga=E(L());var x5e=e=>fetch(e,{method:"GET",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(t=>t.json()).catch(t=>[]),HTt=e=>e.substr(0,5)==="http:"?e.replace("http","https"):e,CQ=e=>e===void 0?"":HTt(e.substring(0,e.search("/terms")+7));var _5e=E(cn()),FA=class{url;iri;label;id;isExpanded=!0;children=[];icon=ga.default.createElement(ga.default.Fragment,null,"+");iconWhenExpanded=ga.default.createElement(ga.default.Fragment,null,"-");constructor(t,n,r,o){this.label=t,this.id=n,this.iri=o,this.url=r}setchild(t){this.children.push(t),this.children.length>0&&(this.icon=ga.default.createElement(ga.default.Fragment,null,"+"))}is_root(){return this.id==="#"}to_string(){return this.label+"[ "+this.children.map(t=>t.to_string())+" ]"}callback(){if(this.isExpanded)return"";let t=this.url+encodeURIComponent(encodeURIComponent(this.iri))+"/jstree/children/"+this.id;return x5e(t).then(n=>{this.children=[],WA(this,n,this.url)}),""}},WA=(e,t,n)=>{t.filter(r=>r.parent===e.id).forEach(r=>{e.setchild(new FA(r.text,r.id,n,r.iri))}),e.children.map(r=>WA(r,t,n))};async function VTt(e,t,n){let r=await e.getTermTree({ontologyId:t,termIri:n},{viewMode:"All",siblings:!1},void 0,void 0).catch(o=>console.log(o));return n?r:r._embedded.terms.map((o,i)=>({id:(++i).toString(),parent:"#",iri:o.iri,text:o.label,children:o.has_children}))}var BA=e=>{let{iri:t,ontologyId:n,api:r}=e,[o,i]=(0,ga.useState)(),u=new pr(r),c=r+"ontologies/"+n+"/terms/",d=async g=>{let O=await u.getTermTree({ontologyId:n,termIri:t},{child:g.id},void 0,void 0).catch(S=>console.log(S));g.children=[],WA(g,O,CQ(c))};return dr([r,"getTermTree",n,t],()=>VTt(u,n,t).then(g=>{let O=new FA("#","#","","");return g&&WA(O,g,CQ(c)),i(O.children),g})),ga.default.createElement(ii,null,o&&ga.default.createElement(_8,{expandByDefault:!0,"aria-label":"HierarchyTab",items:o}))};function S5e(e,t,n){_5e.default.render(qTt(e),t,n)}function qTt(e){let t=new tr;return ga.default.createElement(er,{colorMode:"light"},ga.default.createElement(rr,{client:t},ga.default.createElement(BA,{ontologyId:e.ontologyId,api:e.api,iri:e.iri})))}function HA(e){function t(n){return Na.default.createElement(Na.default.Fragment,null,Na.default.createElement(Dh,{size:"s",tabs:[{content:Na.default.createElement(LA,{synonyms:n.getSynonyms().map(r=>r.value)}),id:"tab1",name:"Alternative Names"},{content:Na.default.createElement(Na.default.Fragment,null,Na.default.createElement("div",{style:{overflow:"auto"}},e.useLegacy==null||e.useLegacy?Na.default.createElement(BA,{ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),api:e.api,iri:e.iri}):Na.default.createElement(DA,{api:e.api,iri:e.iri,ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),entityType:e.entityType}))),id:"tab2",name:"Hierarchy"},{content:Na.default.createElement(NA,{crossrefs:ft.fromJson(n.getCrossReferences()).map(r=>r.value)}),id:"tab3",name:"Cross references"}]}))}return Na.default.createElement(Na.default.Fragment,null,vl(e.data)||zp(e.data)||m1(e.data)?t(e.data):null)}var I5e=E(cn());function j5e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u,...c}=e,d=new pr(n),{data:g,isLoading:O,isSuccess:S,isError:I,error:R}=dr(["tabdata",n,i,o,t,r,u],async()=>d.getEntityObject(t,o,r,i,u));function k(M){return Os.default.createElement(HA,{...c,data:M,iri:t,api:n,useLegacy:u,entityType:M.getType()})}return Os.default.createElement(Os.default.Fragment,null,O&&Os.default.createElement(Zt,null),I&&Os.default.createElement(Pt,null,Ln(R,"description")),S&&g&&Os.default.createElement(Os.default.Fragment,null,vl(g)?k(g):null))}function E5e(e,t,n){I5e.default.render(UTt(e),t,n)}function UTt(e){let t=new tr;return Os.default.createElement(er,{colorMode:"light"},Os.default.createElement(rr,{client:t},Os.default.createElement(j5e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var dc=E(L());var P5e=E(cn());function k5e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["alternativeNameTab",n,r,o,t,i,u],async()=>c.getEntityObject(t,o,i,r,u));return dc.default.createElement(dc.default.Fragment,null,O&&d&&vl(d)&&dc.default.createElement(LA,{synonyms:d.getSynonyms().map(R=>R.value)}),g&&dc.default.createElement(Zt,null),S&&dc.default.createElement(Pt,null,Ln(I,"alternative names")))}function C5e(e,t,n){P5e.default.render($Tt(e),t,n)}function $Tt(e){let t=new tr;return dc.default.createElement(er,{colorMode:"light"},dc.default.createElement(rr,{client:t},dc.default.createElement(k5e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter})))}var mc=E(L());var A5e=E(cn());function M5e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["crossRefTab",n,r,o,t,i,u],async()=>c.getEntityObject(t,o,i,r,u));return mc.default.createElement(mc.default.Fragment,null,O&&d&&vl(d)&&mc.default.createElement(NA,{crossrefs:ft.fromJson(d.getCrossReferences()).map(R=>R.value)}),g&&mc.default.createElement(Zt,null),S&&mc.default.createElement(Pt,null,Ln(I,"cross references")))}function T5e(e,t,n){A5e.default.render(JTt(e),t,n)}function JTt(e){let t=new tr;return mc.default.createElement(er,{colorMode:"light"},mc.default.createElement(rr,{client:t},mc.default.createElement(M5e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var mr=E(L());var z5e=E(cn());var F8=class{static fromTopConcept(t){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:[]}}static fromHierarchyResult(t){return{iri:t.uri,label:t.prefLabel,hasChildren:t.narrower!=null&&t.narrower.length>0,parents:ft.fromJson(t.broader)}}static fromPrefAndUriAndChildren(t,n){return{iri:t.uri,label:t.prefLabel,hasChildren:t.hasChildren,parents:ft.fromJson(n)}}static fromLabelAndUriAndChildren(t,n){return{iri:t.uri,label:t.label,hasChildren:t.hasChildren,parents:ft.fromJson(n)}}},VA=class e{axiosInstance;constructor(t){this.axiosInstance=Rp.create({baseURL:t,headers:{Accept:"application/json"}})}async makeCall(t,n){return(await this.axiosInstance.get(t,n)).data}async buildHierarchyWithIri(t){let{iri:n,ontologyId:r,showSiblingsOnInit:o}=t;if(!r)throw Error("ontologyId has to be specified for SKOS API.");let i=[],u=new Map,c=new Map,d=new Set,g=new Set;if(n){let R=await this.makeCall(`/${r}/hierarchy`,{params:{uri:n,lang:"en",format:"application/json"}}).then(k=>Object.keys(k.broaderTransitive).map(M=>k.broaderTransitive[M]));for(let k of R){let M=F8.fromHierarchyResult(k);c.set(M.iri,M),k.top&&i.push(M.iri),o||g.add(M.iri)}for(let k of R)if(k.narrower!=null){let M=[];for(let C of k.narrower){let T=c.get(C.uri);T==null?(T=F8.fromLabelAndUriAndChildren(C,[k.uri]),c.set(T.iri,T)):T.parents.map(D=>D.value).includes(k.uri)||T.parents.push(...ft.fromJson(k.uri)),M.push(T)}M.sort((C,T)=>(C.label||C.iri).localeCompare(T.label||T.iri)),u.set(k.uri,M.map(C=>({childIri:C.iri}))),d.add(k.uri)}}else{let R=await this.makeCall(`/${r}/topConcepts`,{params:{lang:"en",format:"application/json"}}).then(k=>k.topconcepts);for(let k of R)i.push(k.uri)}function O(R,k){k.add(R.iri);let M=new ts(R),C=u.get(R.iri)||[];if(o)for(let T of C){if(k.has(T.childIri)){console.error(`Cyclic tree at entity "${T.childIri}".`);continue}let D=c.get(T.childIri);D!=null&&M.addChild(O(D,k))}else for(let T of C){if(k.has(T.childIri)){console.error(`Cyclic tree at entity "${T.childIri}".`);continue}let D=c.get(T.childIri);D!=null&&g.has(T.childIri)&&M.addChild(O(D,k))}return M.loadedChildren.length>0&&(M.expanded=!0),k.delete(R.iri),M}let S=new Set,I=i.map(R=>O(c.get(R),S)).sort((R,k)=>(R.entityData.label||R.entityData.iri).localeCompare(k.entityData.label||k.entityData.iri));return new rs({parentChildRelations:u,entitiesData:c,allChildrenPresent:d,roots:I,api:new e(this.axiosInstance.getUri()),ontologyId:r,mainEntityIri:n,keepExpansionStates:t.keepExpansionStates})}async loadHierarchyChildren(t){let{nodeToExpand:n,ontologyId:r}=t;return(await this.makeCall(`/${r}/children`,{params:{uri:n.entityData.iri,lang:"en",format:"application/json"}})).narrower.map(i=>F8.fromPrefAndUriAndChildren(i,[n.entityData.iri]))}};function R5e(e){return{iri:e["@id"],label:e.prefLabel,hasChildren:e.hasChildren,parents:[]}}var qA=class e{axiosInstance;apiKey;constructor(t,n){this.axiosInstance=Rp.create({baseURL:t,headers:{Accept:"application/json"}}),this.apiKey=n,this.axiosInstance.interceptors.request.use(r=>(r.params=r.params||{},r.params.apikey=this.apiKey,r.params.format="json",r))}async makeCall(t,n){return(await this.axiosInstance.get(t,n)).data}async buildHierarchyWithIri(t){let{iri:n,ontologyId:r,entityType:o,showSiblingsOnInit:i}=t;if(!r)throw Error("ontologyId has to be specified for OntoPortal API.");if(!o)throw Error("entityType has to be specified for OntoPortal API.");let u=[],c=new Map,d=new Map,g=new Set,O=new Set;function S(M){if(c.set(M["@id"],R5e(M)),M.hasChildren&&M.children.length>0){d.set(M["@id"],M.children.map(C=>({childIri:C["@id"]}))),g.add(M["@id"]),O.add(M["@id"]);for(let C of M.children)S(C)}}if(n){let M=await this.makeCall(`/ontologies/${r.toUpperCase()}/${Lo(o,!1)}/${encodeURIComponent(n)}/tree`,{params:{include:"@id,prefLabel,hasChildren,children"}});for(let C of M)u.push(C["@id"]),O.add(C["@id"]),S(C);O.add(n)}else{let M=await this.makeCall(`/ontologies/${r.toUpperCase()}/${Lo(o,!1)}/roots`,{params:{include:"@id,prefLabel,hasChildren"}});for(let C of M)u.push(C["@id"]),O.add(C["@id"])}function I(M,C){C.add(M.iri);let T=new ts(M),D=d.get(M.iri)||[];if(i)for(let U of D){if(C.has(U.childIri)){console.error(`Cyclic tree at entity "${U.childIri}".`);continue}T.addChild(I(c.get(U.childIri),C))}else for(let U of D){if(C.has(U.childIri)){console.error(`Cyclic tree at entity "${U.childIri}".`);continue}O.has(U.childIri)&&T.addChild(I(c.get(U.childIri),C))}return T.loadedChildren.length>0&&(T.expanded=!0),C.delete(M.iri),T}let R=new Set,k=u.map(M=>I(c.get(M),R)).sort((M,C)=>(M.entityData.label||M.entityData.iri).localeCompare(C.entityData.label||C.entityData.iri));return new rs({parentChildRelations:d,entitiesData:c,allChildrenPresent:g,roots:k,api:new e(this.axiosInstance.getUri(),this.apiKey),ontologyId:r,mainEntityIri:n,keepExpansionStates:t.keepExpansionStates,entityType:o})}async loadHierarchyChildren(t){let{nodeToExpand:n,ontologyId:r,entityType:o}=t;if(o==null)throw Error("entityType has to be provided to load children in an OntoPortal hierarchy.");return(await this.makeCall(`/ontologies/${r.toUpperCase()}/${Lo(o,!1)}/${encodeURIComponent(n.entityData.iri)}/children`,{params:{include:"@id,prefLabel,hasChildren"}})).collection.map(u=>R5e(u))}};var W8={INCLUDE_OBSOLETE_ENTITIES:!1,PREFERRED_ROOTS:!1,KEEP_EXPANSION_STATES:!1,SHOW_SIBLINGS_ON_INIT:!1,USE_LEGACY:!1};function GTt(e){let t=e.entityData.definedBy||[];return t.includes(e.ontologyId)&&(t=[]),mr.default.createElement(mr.default.Fragment,null,mr.default.createElement("span",{className:e.highlight?"highlight":void 0},e.childRelationToParent=="http://purl.obolibrary.org/obo/BFO_0000050"&&mr.default.createElement(mr.default.Fragment,null,mr.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"\xA0P\xA0"),"\xA0"),e.childRelationToParent=="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&mr.default.createElement(mr.default.Fragment,null,mr.default.createElement("span",{style:{marginInlineStart:"1.5px",marginTop:"2.5px"},className:"surroundCircle"},"I"),"\xA0"),mr.default.createElement("button",{onClick:()=>{e.onNavigateToEntity&&e.onNavigateToEntity(e.ontologyId,e.entityType||"",e.entityData)}},mr.default.createElement("span",null," ",e.entityData.label||e.entityData.iri," "))),t.length>0&&mr.default.createElement(mr.default.Fragment,null,"\xA0",t.map(n=>mr.default.createElement("button",{key:`${e.entityData.iri}:${n}`,onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(n,e.entityType||"",e.entityData)}},mr.default.createElement("span",{className:"ontology-badge"},n.toUpperCase())))))}function AQ(e){let{apiUrl:t,backendType:n,apiKey:r,onNavigateToEntity:o,onNavigateToOntology:i,iri:u,ontologyId:c,entityType:d,includeObsoleteEntities:g=W8.INCLUDE_OBSOLETE_ENTITIES,preferredRoots:O=W8.PREFERRED_ROOTS,keepExpansionStates:S=W8.KEEP_EXPANSION_STATES,showSiblingsOnInit:I=W8.SHOW_SIBLINGS_ON_INIT,useLegacy:R=W8.USE_LEGACY}=e,[,k]=(0,mr.useReducer)(G=>G+1%Number.MAX_SAFE_INTEGER,0),M=(0,mr.useMemo)(()=>{switch(n){case"ols":return new pr(t);case"skosmos":return new VA(t);case"ontoportal":return new qA(t,r||"");default:return new pr(t)}},[t,n,r]),{data:C,isSuccess:T}=dr(["hierarchySemLookP",u,d,c,O,g,S,I,R],async function(){return await M.buildHierarchyWithIri({ontologyId:c,iri:u,entityType:d,preferredRoots:O,includeObsoleteEntities:g,keepExpansionStates:S,showSiblingsOnInit:I,useLegacy:R})}),D=(0,mr.useCallback)(G=>{if(!(C instanceof rs))throw Error("Hierarchy object was undefined while trying to expand a tree node. This should never happen.");C.entityType&&gl(C.entityType)||(G.expanded=!G.expanded,G.expanded?(G.loading=!0,k(),C.fetchInformationForExpansion(G).then(()=>{G.loading=!1,k()})):(k(),C.closeNode(G)))},[C]);function U(G,Y,K){return mr.default.createElement("div",{key:Ut()},mr.default.createElement(Pt,null,mr.default.createElement("div",{style:{height:"24px"}},mr.default.createElement("div",{style:{position:"relative",borderLeft:"1px dotted black",borderBottom:"1px dotted black",width:"12px",height:"16px",left:"5.5px",top:"-1px"}}),mr.default.createElement("div",{style:{position:"relative",borderLeft:K?"1px dotted black":"",width:"12px",height:"9px",left:"5.5px",top:"0px"}}),mr.default.createElement("div",{style:{position:"relative",top:"-22px"}},mr.default.createElement("span",null,Y.entityData.hasChildren?mr.default.createElement("button",{style:{},onClick:()=>{D(Y)}},mr.default.createElement(Nt,{type:Y.expanded?"arrowDown":"arrowRight",size:"s"})):mr.default.createElement(Nt,{type:"empty"})),"\xA0",mr.default.createElement(GTt,{entityData:Y.entityData,childRelationToParent:Y.childRelationToParent,ontologyId:G.ontologyId,entityType:G.entityType,onNavigateToEntity:o,onNavigateToOntology:i,highlight:Y.entityData.iri==G?.mainEntityIri}),"\xA0",Y.entityData.numDescendants!=null&&Y.entityData.numDescendants>0&&mr.default.createElement("span",{style:{color:"gray"}},"(",Y.entityData.numDescendants.toLocaleString(),")")))),Y.expanded&&mr.default.createElement("ul",{style:{marginBlockEnd:"0",marginInlineStart:"5.5px"}},Y.loading?mr.default.createElement(Zt,{style:{position:"relative",left:"13px",top:"5px"}}):Y.loadedChildren.map((B,ne)=>mr.default.createElement("div",{key:Ut(),style:{borderLeft:K?"1px dotted black":"",paddingLeft:"1rem"}},U(G,B,neU(C,G,YO.getThingObject(t,i,n,u,c));return Tl.default.createElement(Tl.default.Fragment,null,o&&Tl.default.createElement(m0,{titleText:o,className:S}),!o&&k&&I&&Tl.default.createElement(m0,{title:cle(I)?I.getName():I.getLabel(),className:S}),!o&&R&&(d?Tl.default.createElement(m0,{titleText:d,className:S}):Tl.default.createElement(Zt,{size:"s"})),!o&&M&&(d?Tl.default.createElement(m0,{titleText:d,className:S}):Tl.default.createElement(Pt,null,Ln(C,"title"))))}function F5e(e,t,n){N5e.default.render(KTt(e),t,n)}function KTt(e){let t=new tr;return Tl.default.createElement(er,{colorMode:"light"},Tl.default.createElement(rr,{client:t},Tl.default.createElement(MQ,{api:e.api,thingType:e.thingType,iri:e.iri,ontologyId:e.ontologyId,titleText:e.titleText,parameter:e.parameter,useLegacy:e.useLegacy,defaultValue:e.defaultValue,className:e.className})))}var Yr=E(L());var W5e=E(cn());var Fa=E(L());var TQ=5;function UA(e){let[t,n]=(0,Fa.useState)(!1);function r(i){return Fa.default.createElement("button",{key:Ut(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},Fa.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>TQ&&!t?Fa.default.createElement(Fa.default.Fragment,null,e.ontolist.slice(0,TQ).map(i=>Fa.default.createElement("span",{key:Ut()},r(i),"\xA0")),Fa.default.createElement("button",{className:"expand-onto-list",onClick:()=>n(!0)},"+ ",e.ontolist.length-TQ)):e.ontolist.map(i=>Fa.default.createElement("span",{key:Ut()},r(i),"\xA0"))}return Fa.default.createElement(Fa.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&Fa.default.createElement(Pt,{style:{fontWeight:"normal"}},"Also appears in\xA0",o()))}var Wa=E(L());var RQ=5;function $A(e){let[t,n]=(0,Wa.useState)(!1);function r(i){return Wa.default.createElement("button",{key:Ut(),onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(i,e.entityType||"",{iri:e.iri,label:e.label})}},Wa.default.createElement("span",{className:"ontology-badge"},i.toUpperCase()))}function o(){return e.ontolist.length>RQ&&!t?Wa.default.createElement(Wa.default.Fragment,null,e.ontolist.slice(0,RQ).map(i=>Wa.default.createElement("span",{key:Ut()},r(i),"\xA0")),Wa.default.createElement("button",{className:"expand-onto-list",onClick:()=>n(!0)},"+ ",e.ontolist.length-RQ)):e.ontolist.map(i=>Wa.default.createElement("span",{key:Ut()},r(i),"\xA0"))}return Wa.default.createElement(Wa.default.Fragment,null,e.ontolist&&e.ontolist.length>0&&Wa.default.createElement(Pt,{style:{fontWeight:"normal"}},"Defined by\xA0",o()))}function B5e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u,onNavigateToOntology:c}=e,d=new pr(n),{data:g,isLoading:O,isSuccess:S,isError:I,error:R}=dr(["metadata",n,i,o,t,r,u],async()=>{let M,C,T;if(u){let D=(await d.getEntityResponse(t,o,void 0,i,u))._embedded;M=yl({_embedded:{[Object.keys(D)[0]]:Dp(D[Object.keys(D)[0]],u,r)}}),C=D[Object.keys(D)[0]].map(U=>U.ontology_name),T=D[Object.keys(D)[0]].filter(U=>U.is_defining_ontology).map(U=>U.ontology_name)}else M=await d.getEntityObject(t,o,r,i,u),C=M.getAppearsIn(),T=M.getDefinedBy();return C=C.filter(D=>D!=M.getOntologyId()).sort(),T=T.filter(D=>D!=M.getOntologyId()).sort(),{entity:M,ontoList:C,definedBy:T}});function k(M){return Yr.default.createElement(Yr.default.Fragment,null,Yr.default.createElement(_n,{direction:"column"},Yr.default.createElement(wt,{grow:!1},Yr.default.createElement("span",null,Yr.default.createElement(f0,{onNavigateToOntology:e.onNavigateToOntology,ontologyId:r||M.entity.getOntologyId(),ontologyName:M.entity.getOntologyId(),shortForm:M.entity.getShortForm()}))),Yr.default.createElement(wt,null,Yr.default.createElement(_n,{direction:"column"},Yr.default.createElement(wt,null,Yr.default.createElement(_n,null,Yr.default.createElement(wt,{grow:!1,style:{maxWidth:600}},Yr.default.createElement(ng,{iri:t})))),Yr.default.createElement(wt,{grow:!1,style:{maxWidth:600}},Yr.default.createElement(m0,{title:M.entity.getLabel()})))),Yr.default.createElement(wt,{style:{maxWidth:600}},Yr.default.createElement(RA,{description:M.entity.getDescription()})),Yr.default.createElement("div",{style:{margin:"0 12px 0",maxWidth:600}},Yr.default.createElement(UA,{iri:e.iri,label:M.entity.getLabel()||"",ontolist:M.ontoList,entityType:o||M.entity.getType(),onNavigateToOntology:c}),Yr.default.createElement($A,{iri:e.iri,ontolist:M.definedBy,label:M.entity.getLabel()||"",entityType:o||M.entity.getType(),onNavigateToOntology:c})),Yr.default.createElement(wt,null,Yr.default.createElement(HA,{data:M.entity,iri:t,entityType:e.entityType,api:n,ontologyId:e.ontologyId?e.ontologyId:M.entity.getOntologyId(),useLegacy:u}))))}return Yr.default.createElement(Yr.default.Fragment,null,O&&Yr.default.createElement(Zt,null),I&&Yr.default.createElement(Pt,null,Ln(R,"metadata")),S&&g&&Yr.default.createElement(Yr.default.Fragment,null,vl(g.entity)?k(g):null))}function H5e(e,t,n){W5e.default.render(YTt(e),t,n)}function YTt(e){let t=new tr;return Yr.default.createElement(er,{colorMode:"light"},Yr.default.createElement(rr,{client:t},Yr.default.createElement(B5e,{iri:e.iri,ontologyId:e.ontologyId,api:e.api,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var jt=E(L());var V5e=E(cn()),QTt=!0;function q5e(e){let{ontologyId:t,api:n,parameter:r,hasTitle:o=QTt,useLegacy:i,showBadges:u,...c}=e,d=new pr(n),{data:g,isLoading:O,isSuccess:S,isError:I,error:R}=dr(["ontologyInfo",e],()=>d.getOntologyObject(t,r,i));function k(K){return jt.default.createElement(jt.default.Fragment,null,(K.getIri()||K.getOntologyPurl())&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Ontology IRI:"),jt.default.createElement("p",null,jt.default.createElement("a",{id:"ontologyIri",href:K.getIri()||K.getOntologyPurl()},K.getIri()||K.getOntologyPurl()))))}function M(K){return jt.default.createElement(jt.default.Fragment,null,K.getVersionIri()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Version IRI:"),jt.default.createElement("p",null,jt.default.createElement("a",{id:"versionIri",href:K.getVersionIri()},K.getVersionIri()))))}function C(K){return jt.default.createElement(jt.default.Fragment,null,K.getSourceFileTimestamp()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Last loaded:"),jt.default.createElement("p",null,new Date(K.getSourceFileTimestamp()).toString())))}function T(K){return jt.default.createElement(jt.default.Fragment,null,K.getOntologyId()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Ontology ID:"),jt.default.createElement("p",null,K.getOntologyId())))}function D(K){return jt.default.createElement(jt.default.Fragment,null,K.getVersion()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Version:"),jt.default.createElement("p",null,K.getVersion())))}function U(K){return jt.default.createElement(jt.default.Fragment,null,K.getNumClasses()&&jt.default.createElement(wt,null,jt.default.createElement("b",null,"Number of classes:"),jt.default.createElement("p",null,K.getNumClasses().toLocaleString())))}function G(K){return jt.default.createElement(jt.default.Fragment,null,K.getCreators().length>0&&jt.default.createElement(jt.default.Fragment,null,jt.default.createElement(wt,null,jt.default.createElement("b",null,"Creators:"),K.getCreators().length>1?jt.default.createElement("ul",null,K.getCreators().map(B=>jt.default.createElement("li",{key:B+Ut()},$i(K,K.getLinkedEntities(),B,n,u)))):jt.default.createElement("p",null,$i(K,K.getLinkedEntities(),K.getCreators()[0],n,u))),jt.default.createElement(so,null)))}function Y(K){return jt.default.createElement(jt.default.Fragment,null,K.getAnnotationPredicates().map(B=>{let ne=K.getAnnotationById(B);return ne.length==0?jt.default.createElement(jt.default.Fragment,null):jt.default.createElement(wt,{grow:!1,key:B},jt.default.createElement("b",null,Zl(g1(h1(K.getAnnotationTitleById(B)))),":"),ne.length>1?jt.default.createElement("ul",null,ne.map(pe=>jt.default.createElement("li",{key:Ut(),id:pe.value},ha(K,pe,n,u)))):jt.default.createElement("p",{key:Ut()},ha(K,ne[0],n,u)))}))}return jt.default.createElement(jt.default.Fragment,null,jt.default.createElement(fa,{title:o?"Ontology Information":"",layout:"horizontal"},O&&jt.default.createElement(Zt,{size:"s"}),S&&g!==void 0&&jt.default.createElement(Pt,{...c},k(g),M(g),C(g),jt.default.createElement(jt.default.Fragment,null,T(g),D(g),U(g)),Y(g)),I&&jt.default.createElement(Pt,null,Ln(R,"information"))))}function U5e(e,t,n){V5e.default.render(ZTt(e),t,n)}function ZTt(e){let t=new tr;return jt.default.createElement(er,{colorMode:"light"},jt.default.createElement(rr,{client:t},jt.default.createElement(q5e,{ontologyId:e.ontologyId,api:e.api,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,hasTitle:e.hasTitle})))}var $r=E(L());var $5e=E(cn()),eRt=10,tRt=[10,25,50,100],rRt="config.preferredPrefix",nRt="asc";function J5e(e){let{api:t,initialEntriesPerPage:n=eRt,pageSizeOptions:r=tRt,initialSortField:o=rRt,initialSortDir:i=nRt,targetLink:u,parameter:c}=e,d=new pr(t),[g,O]=(0,$r.useState)(0),[S,I]=(0,$r.useState)(n),[R,k]=(0,$r.useState)(o),[M,C]=(0,$r.useState)(i),T=[{name:"Resource Name",field:"config.title",width:"15%",sortable:!0},{name:"Short Name",field:"ontologyId",render:be=>u?$r.default.createElement(Wd,{href:u+"ontologies/"+be+"/"},be):be,width:"10%",sortable:!0},{name:"Description",field:"config.description",width:"30%",css:xe` display: block; max-height: 200px; overflow: auto; - `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:me=>$r.default.createElement($r.default.Fragment,null,me.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:me=>$r.default.createElement($r.default.Fragment,null,me.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:me=>$r.default.createElement($r.default.Fragment,null,me.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:me=>$r.default.createElement(sa,{href:me.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!me.config.allowDownload||me.config.fileLocation.startsWith("file://")})}]}],N=({page:me,sort:We})=>{let{index:$e,size:Ge}=me;if(O($e),I(Ge),We){let{field:Be,direction:et}=We;k(Be),M(et)}},{data:U,isSuccess:X,isError:Y,isLoading:K}=dr(["ontologiesData",t,c],async()=>d.getOntologiesData(e.parameter)),H=U?.properties.map(me=>({...me.properties}))||[];console.log(H);let ne=(me,We,$e,Ge,Be)=>{let et;Ge?et=me.slice(0).sort(G2.property(Ge,G2.default(Be))):et=me;let ut;if(!We&&!$e)ut=et;else{let Qe=We*$e;ut=et.slice(Qe,Math.min(Qe+$e,me.length))}return{pageOfItems:ut,totalItemCount:me.length}},{pageOfItems:pe,totalItemCount:ye}=ne(H,g,S,R,A),fe={pageIndex:g,pageSize:S,totalItemCount:ye,pageSizeOptions:r},ue=S===0?$r.default.createElement("strong",null,"All"):$r.default.createElement($r.default.Fragment,null,$r.default.createElement("strong",null,S*g+1,"-",S*g+S)," ","of ",ye),xe={sort:{field:R,direction:A}};return $r.default.createElement($r.default.Fragment,null,X&&$r.default.createElement($r.default.Fragment,null,$r.default.createElement(Pt,{size:"xs"},"Showing ",ue," ",$r.default.createElement("strong",null,"Ontologies")),$r.default.createElement(so,{size:"s"}),$r.default.createElement(Ph,{margin:"none",style:{height:2}}),$r.default.createElement(a0,{columns:T,items:pe,onChange:N,pagination:fe,sorting:xe})),K&&$r.default.createElement(a0,{columns:T,items:pe,onChange:N,pagination:fe,sorting:xe,loading:!0}),Y&&$r.default.createElement(a0,{columns:T,items:pe,onChange:N,pagination:fe,sorting:xe}))}function F5e(e,t,n){L5e.default.render(GTt(e),t,n)}function GTt(e){let t=new tr;return $r.default.createElement(er,{colorMode:"light"},$r.default.createElement(rr,{client:t},$r.default.createElement(N5e,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var Fa=E(D());var W5e=E(cn());function UA(e){let{api:t,query:n,selectionChangedEvent:r,...o}=e,i=new pr(t),[u,c]=(0,Fa.useState)(),[d,g]=(0,Fa.useState)([]),[O,S]=(0,Fa.useState)(n),I=A=>{g(A)},R=A=>{if(!A.trim().toLowerCase())return;g([{label:A}])},{isLoading:k}=dr(["suggestions",O],async()=>{if(O.trim())return i.suggest({query:O},void 0,void 0,e.parameter).then(A=>{A.response&&A.response.docs&&c(A.response.docs.map(M=>({label:M.autosuggest,type:{color:"tint1",iconType:""}})))})});return(0,Fa.useEffect)(()=>{r(d.map(A=>({label:A.label})))},[d]),Fa.default.createElement(Fa.default.Fragment,null,Fa.default.createElement(Zd,{id:"suggest",isClearable:!0,"aria-label":"searchBar",fullWidth:!0,async:!0,placeholder:"Search",autoFocus:!0,singleSelection:!0,isLoading:k,options:u,selectedOptions:d,onChange:I,onCreateOption:R,onSearchChange:A=>{S(A)}}))}function B5e(e,t,n){W5e.default.render(XTt(e),t,n)}function XTt(e){let t=new tr;return Fa.default.createElement(er,{colorMode:"light"},Fa.default.createElement(rr,{client:t},Fa.default.createElement(UA,{api:e.api,query:e.query,selectionChangedEvent:e.selectionChangedEvent,parameter:e.parameter})))}var zt=E(D());var Os=E(D());function H5e(e){let{api:t,result:n,targetLink:r,...o}=e;return Os.default.createElement(fa,{textAlign:"left",...o,href:r?n.type!="ontology"?r+"ontologies/"+n.ontology_name+"/"+Lo(n.type,!0)+"?iri="+encodeURIComponent(n.iri):r+"ontologies/"+n.ontology_name:void 0,title:Os.default.createElement(_n,null,Os.default.createElement(wt,{grow:!1},Os.default.createElement(Oh,null,Os.default.createElement("h2",null,n.label))),Os.default.createElement(wt,null,n.type!="ontology"&&Os.default.createElement(CA,{api:t,iri:n.iri,entityType:n.type,ontologyId:n.ontology_name})))},n.type!="ontology"?Os.default.createElement(tg,{iri:n.iri}):void 0,Os.default.createElement(so,{size:"s"}),Os.default.createElement(TA,{api:t,ontologyId:n.ontology_name,iri:n.iri,thingType:n.type}))}var V5e=E(cn());var KTt=10,YTt=[10,25,50,100];function q5e(e){let{api:t,query:n,parameter:r,initialItemsPerPage:o=KTt,itemsPerPageOptions:i=YTt,targetLink:u,preselected:c,useLegacy:d=!0,...g}=e,O=new pr(t),[S,I]=(0,zt.useState)(n),[R,k]=(0,zt.useState)(0),[A,M]=(0,zt.useState)(0),[T,N]=(0,zt.useState)(o),[U,X]=(0,zt.useState)(0),[Y,K]=(0,zt.useState)(!1),[H,ne]=(0,zt.useState)(!1),[pe,ye]=(0,zt.useState)([]),[fe,ue]=(0,zt.useState)([]);(0,zt.useEffect)(()=>{I(n)},[n]);function xe(lt,Ct,Mr,Sr){if(lt.length==0)Mr(Ct.reduce((An,jr,Dt,en)=>(Dt%2===0&&An.push({label:Sr?Sr(jr):jr,key:jr,append:"("+en[Dt+1]+")",disabled:en[Dt+1]==0,data:{totalCount:en[Dt+1]}}),An),[]));else{let An=[];for(let jr=0;jr{if(Dt%2===0){let Cr=An.find(Nn=>Nn.key==jr);Cr&&(Cr.append="("+en[Dt+1],Cr.data&&en[Dt+1]lt.checked==="on",{data:We,isLoading:$e,isSuccess:Ge,isError:Be,error:et}=dr(["searchResults",t,S,Y,H,R,T,pe.filter(me).map(lt=>lt.key),fe.filter(me).map(lt=>lt.key),r],async({signal:lt})=>O.search({query:S,exactMatch:Y,showObsoleteTerms:H,types:pe.filter(me).map(Ct=>Ct.key).join(","),ontology:fe.filter(me).map(Ct=>Ct.key).join(","),groupByIri:!0},{page:R.toString(),size:T.toString()},void 0,e.parameter,lt).then(Ct=>{if(Ct.response&&Ct.response.docs!=null&&Ct.response.numFound!=null){Ct.facet_counts&&Ct.facet_counts.facet_fields&&(Ct.facet_counts.facet_fields.type&&xe(pe,Ct.facet_counts.facet_fields.type,ye,Sr=>`${Sr[0].toUpperCase()}${Sr.slice(1)}`),d?Ct.facet_counts.facet_fields.ontology_name&&xe(fe,Ct.facet_counts.facet_fields.ontology_name,ue,Sr=>Sr.toUpperCase()):Ct.facet_counts.facet_fields.ontologyId&&xe(fe,Ct.facet_counts.facet_fields.ontologyId,ue,Sr=>Sr.toUpperCase())),X(Ct.response.numFound);let Mr=Math.ceil(Ct.response.numFound/T);return M(Mr),R>=Mr&&k(0),Ct.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function ut(lt){k(Math.floor((R*T+1)/lt)),N(lt)}function Qe(){K(!Y)}function Ht(){ne(!H)}function Xe(lt,Ct){let Mr=[...lt];Ct(Mr.map(Sr=>({...Sr,checked:void 0})))}function Ft(){Xe(pe,ye),Xe(fe,ue)}function Vt(lt){I(lt[0]?lt[0].label:"")}return zt.default.createElement(zt.default.Fragment,null,zt.default.createElement(UA,{api:t,query:"",selectionChangedEvent:lt=>{Vt(lt)}}),zt.default.createElement(so,{size:"s"}),zt.default.createElement(_n,null,zt.default.createElement(wt,{grow:3,style:{minWidth:250}},zt.default.createElement(ii,null,Ge&&zt.default.createElement(iu,{label:"Filter by type"},zt.default.createElement(pf,{options:pe,onChange:ye,listProps:{bordered:!0}},lt=>lt)),$e&&zt.default.createElement(iu,{label:"Filter by type"},zt.default.createElement(Zt,{size:"s"})),Be&&zt.default.createElement(iu,{label:"Filter by type"},zt.default.createElement(pf,{options:[],onChange:ye,listProps:{bordered:!0}},lt=>lt)),Ge&&zt.default.createElement(iu,{label:"Filter by ontology"},zt.default.createElement(pf,{options:fe,onChange:ue,listProps:{bordered:!0},searchable:!0},(lt,Ct)=>zt.default.createElement(zt.default.Fragment,null,Ct,lt))),$e&&zt.default.createElement(iu,{label:"Filter by ontology"},zt.default.createElement(Zt,{size:"s"})),Be&&zt.default.createElement(iu,{label:"Filter by ontology"},zt.default.createElement(pf,{options:[],onChange:ue,listProps:{bordered:!0},searchable:!0},(lt,Ct)=>zt.default.createElement(zt.default.Fragment,null,Ct,lt))),zt.default.createElement(Vi,{onClick:Ft},"Clear all filters"))),zt.default.createElement(wt,{grow:7},zt.default.createElement(ii,{color:"transparent",grow:!1},zt.default.createElement(_n,null,zt.default.createElement(wt,{grow:!1},zt.default.createElement(l8,{label:"Exact match",checked:Y,onChange:Qe})),zt.default.createElement(wt,null,zt.default.createElement(l8,{label:"Show only obsolete terms",checked:H,onChange:Ht}))),zt.default.createElement(so,{size:"m"}),zt.default.createElement(Pt,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(R*T+1,U)," to ",Math.min((R+1)*T,U)," of ",U," results"),zt.default.createElement(so,{size:"s"}),zt.default.createElement(Ph,{margin:"none",style:{height:2}}),zt.default.createElement(so,{size:"s"}),zt.default.createElement(e0,{"aria-label":"Search result pagination",pageCount:A,activePage:R,onChangePage:k,itemsPerPage:T,onChangeItemsPerPage:ut,itemsPerPageOptions:i}),zt.default.createElement(so,{size:"s"}),We&&We.map(lt=>zt.default.createElement(zt.default.Fragment,{key:lt.id},zt.default.createElement(H5e,{api:t,result:lt,targetLink:u}),zt.default.createElement(so,null)))))))}function U5e(e,t,n){V5e.default.render(QTt(e),t,n)}function QTt(e){let t=new tr;return zt.default.createElement(er,{colorMode:"light"},zt.default.createElement(rr,{client:t},zt.default.createElement(q5e,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var Bt=E(D());var J5e=E(cn()),ZTt=!0;function eRt(e,t){let n=e.getRdfTypes().filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!r.startsWith("http://www.w3.org/2000/01/rdf-schema#"));if(e.getRdfTypes().length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Type"),eg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function tRt(e,t){let n=e.getSameAs();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Same As"),eg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function rRt(e,t){let n=e.getDifferentFrom();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Different from"),eg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function nRt(e,t){let n=e.getDisjointWith();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Disjoint with"),eg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function oRt(e,t){let n=e.getInverseOf();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Inverse of"),eg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function $5e(e,t,n){return nt(e).slice().reverse().map((r,o)=>Bt.default.createElement("span",{key:r},Rr(t,t.getLinkedEntities(),r,n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate}),Bt.default.createElement(Bt.default.Fragment,null,oo.value),r=n.filter(o=>Array.isArray(o)).length>0;if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,r?"Property chains":"Property chain"),r?Bt.default.createElement("ul",null,n.map(o=>Bt.default.createElement("li",{key:Ut()},$5e(o,e,t)))):Bt.default.createElement("p",null,$5e(n,e,t)))}function aRt(e,t){let n=e.getEquivalents();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Equivalent to"),n.length===1?Bt.default.createElement("p",null,ha(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Bt.default.createElement("ul",null,n.map(r=>Bt.default.createElement("li",{key:Ut()},ha(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function lRt(e,t){let n=e.getSuperEntities();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Sub",e.getType()," of"),n.length===1?Bt.default.createElement("p",null,ha(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Bt.default.createElement("ul",null,n.map(r=>Bt.default.createElement("li",{key:Ut()},ha(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function sRt(e,t){let n=e.getRelatedFrom(),r=Array.from(new Set(n.map(o=>o.value.property)));if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Related from"),r.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return Bt.default.createElement("div",{key:o.toString()+Ut()},Bt.default.createElement("div",null,Bt.default.createElement("a",{style:{color:"black"},href:o},Bt.default.createElement("i",null,i||o))),Bt.default.createElement("ul",{style:{marginBottom:0}},n.filter(u=>u.value.property===o).map(u=>Bt.default.createElement("li",{key:Ut()},Rr(e,e.getLinkedEntities(),u.value.value,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Bt.default.createElement("p",null)," ")}))}function uRt(e,t,n){if(t.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Instances"),Bt.default.createElement("ul",null,t.map(r=>Bt.default.createElement("li",{key:Ut()},$i(e,e.getLinkedEntities(),r.getIri(),n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate})))))}function G5e(e){let{api:t,iri:n,ontologyId:r,hasTitle:o=ZTt,showBadges:i,entityType:u,parameter:c,onNavigateToEntity:d,onNavigateToDisambiguate:g,onNavigateToOntology:O,...S}=e,I=new pr(t),{data:R,isLoading:k,isSuccess:A,isError:M}=dr(["entityJson",t,n,r,u,c,i],async()=>I.getEntityObject(n,u,r,c,!1)),{data:T,isLoading:N,isSuccess:U}=dr({queryKey:["instances",R],queryFn:async()=>R&&wd(R)&&R.hasDirectChildren()?I.getClassInstances(R.getIri(),R.getOntologyId()):[],enabled:!!R});function X(Y,K){let H=[];if(p1(Y)){let ne=eRt(Y,e);ne!=null&&H.push(ne);let pe=tRt(Y,e);pe!=null&&H.push(pe);let ye=rRt(Y,e);ye!=null&&H.push(ye)}if(Tp(Y)||wd(Y)){let ne=nRt(Y,e);ne!=null&&H.push(ne)}if(Tp(Y)){let ne=oRt(Y,e);ne!=null&&H.push(ne);let pe=iRt(Y,e);pe!=null&&H.push(pe)}if(Tp(Y)||wd(Y)){let ne=aRt(Y,e);ne!=null&&H.push(ne);let pe=lRt(Y,e);pe!=null&&H.push(pe);let ye=sRt(Y,e);ye!=null&&H.push(ye)}if(wd(Y)){let ne=uRt(Y,K,e);ne!=null&&H.push(ne)}return H.length>0?Bt.default.createElement(Pt,{...S},H):Bt.default.createElement(Pt,{...S},"No relations available.")}return Bt.default.createElement(Bt.default.Fragment,null,Bt.default.createElement(fa,{title:o?(u?Ql(sj(u)):A&&R?Ql(R.getType()):"")+" Relations":"",layout:"horizontal"},(k||N)&&Bt.default.createElement(Zt,{size:"s"}),M&&Bt.default.createElement(Pt,null,"Requested resource not available"),A&&U&&R!==void 0&&T!==void 0&&X(R,T)))}function X5e(e,t,n){J5e.default.render(cRt(e),t,n)}function cRt(e){let t=new tr;return Bt.default.createElement(er,{colorMode:"light"},Bt.default.createElement(rr,{client:t},Bt.default.createElement(G5e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var Wa=E(D()),K5e=E(cn());function Y5e(e){let{api:t,iri:n,ontologyId:r,useLegacy:o}=e,i=new pr(t),{data:u,isLoading:c,isSuccess:d,isError:g,error:O}=dr(["termDepiction",t,n,r,o],async()=>i.getThingObject(n,"class",r,"",o));return Wa.default.createElement(Wa.default.Fragment,null,c&&Wa.default.createElement(Zt,{size:"s"}),d&&u&&u.getDepictionUrl()&&Wa.default.createElement(Wa.default.Fragment,null,Wa.default.createElement(NC,{size:"m",hasShadow:!0,allowFullScreen:!0,alt:u.getDepictionUrl(),src:u.getDepictionUrl()}),Wa.default.createElement("p",null,Wa.default.createElement("small",null,"Click to expand."))),g&&Wa.default.createElement(Pt,null,Ln(O,"depiction")))}function Q5e(e,t,n){K5e.default.render(pRt(e),t,n)}function pRt(e){let t=new tr;return Wa.default.createElement(er,{colorMode:"light"},Wa.default.createElement(rr,{client:t},Wa.default.createElement(Y5e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy})))}var dc=E(D());var Z5e=E(cn());function fRt(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["entityOntoList",n,r,o,t,i,u],async()=>{let R,k,A;if(u){let M=(await c.getEntityResponse(t,o,void 0,r,u))._embedded;R=M[Object.keys(M)[0]].map(T=>T.ontology_name),k=o||uj(Object.keys(M)[0]),A=M[Object.keys(M)[0]][0].label}else{let M=await c.getEntityObject(t,o,i,r,u);R=M.getAppearsIn(),k=o||M.getType(),A=M.getLabel()||""}return R=R.filter(M=>M!=i).sort(),{ontoList:R,entityType:k,label:A}});return dc.default.createElement(dc.default.Fragment,null,O&&d&&dc.default.createElement(VA,{ontolist:d.ontoList,entityType:d.entityType,label:d.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),g&&dc.default.createElement(Zt,null),S&&dc.default.createElement(Pt,null,Ln(I,"ontology list")))}function e4e(e,t,n){Z5e.default.render(dRt(e),t,n)}function dRt(e){let t=new tr;return dc.default.createElement(er,{colorMode:"light"},dc.default.createElement(rr,{client:t},dc.default.createElement(fRt,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var mc=E(D());var t4e=E(cn());function mRt(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["entityDefinedBy",n,r,o,t,i,u],async()=>{let R,k,A;if(u){let M=(await c.getEntityResponse(t,o,void 0,r,u))._embedded;R=M[Object.keys(M)[0]].filter(T=>T.is_defining_ontology).map(T=>T.ontology_name),k=o||uj(Object.keys(M)[0]),A=M[Object.keys(M)[0]][0].label}else{let M=await c.getEntityObject(t,o,i,r,u);R=M.getDefinedBy().filter(T=>T!=M.getOntologyId()),k=o||M.getType(),A=M.getLabel()||""}return R=R.sort(),{ontoList:R,entityType:k,label:A}});return mc.default.createElement(mc.default.Fragment,null,O&&d&&mc.default.createElement(qA,{ontolist:d.ontoList,entityType:d.entityType,label:d.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),g&&mc.default.createElement(Zt,null),S&&mc.default.createElement(Pt,null,Ln(I,"ontology list")))}function r4e(e,t,n){t4e.default.render(hRt(e),t,n)}function hRt(e){let t=new tr;return mc.default.createElement(er,{colorMode:"light"},mc.default.createElement(rr,{client:t},mc.default.createElement(mRt,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}window.SemLookPWidgets={createAutocomplete:$3e,createDataContent:X3e,createEntityInfo:Z3e,createEntityRelations:X5e,createJsonApi:r5e,createBreadcrumb:o5e,createDescription:a5e,createIri:s5e,createTab:y5e,createAlternativeNameTab:O5e,createCrossRefTab:S5e,createHierarchy:E5e,createHierarchyDeprecated:h5e,createTitle:C5e,createOntologyInfo:D5e,createResources:F5e,createSearchBar:B5e,createSearchResultsList:U5e,createMetadata:T5e,createDepiction:Q5e,createHierarchyOLS:f5e,createEntityOntoList:e4e,createEntityDefinedBy:r4e};})(); + `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:be=>$r.default.createElement($r.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:be=>$r.default.createElement($r.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:be=>$r.default.createElement($r.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:be=>$r.default.createElement(sa,{href:be.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!be.config.allowDownload||be.config.fileLocation.startsWith("file://")})}]}],D=({page:be,sort:ze})=>{let{index:He,size:Qe}=be;if(O(He),I(Qe),ze){let{field:Be,direction:Ze}=ze;k(Be),C(Ze)}},{data:U,isSuccess:G,isError:Y,isLoading:K}=dr(["ontologiesData",t,c],async()=>d.getOntologiesData(e.parameter)),B=U?.properties.map(be=>({...be.properties}))||[];console.log(B);let ne=(be,ze,He,Qe,Be)=>{let Ze;Qe?Ze=be.slice(0).sort(K2.property(Qe,K2.default(Be))):Ze=be;let lt;if(!ze&&!He)lt=Ze;else{let Ke=ze*He;lt=Ze.slice(Ke,Math.min(Ke+He,be.length))}return{pageOfItems:lt,totalItemCount:be.length}},{pageOfItems:pe,totalItemCount:ve}=ne(B,g,S,R,M),de={pageIndex:g,pageSize:S,totalItemCount:ve,pageSizeOptions:r},ue=S===0?$r.default.createElement("strong",null,"All"):$r.default.createElement($r.default.Fragment,null,$r.default.createElement("strong",null,S*g+1,"-",S*g+S)," ","of ",ve),ye={sort:{field:R,direction:M}};return $r.default.createElement($r.default.Fragment,null,G&&$r.default.createElement($r.default.Fragment,null,$r.default.createElement(Pt,{size:"xs"},"Showing ",ue," ",$r.default.createElement("strong",null,"Ontologies")),$r.default.createElement(so,{size:"s"}),$r.default.createElement(Ch,{margin:"none",style:{height:2}}),$r.default.createElement(u0,{columns:T,items:pe,onChange:D,pagination:de,sorting:ye})),K&&$r.default.createElement(u0,{columns:T,items:pe,onChange:D,pagination:de,sorting:ye,loading:!0}),Y&&$r.default.createElement(u0,{columns:T,items:pe,onChange:D,pagination:de,sorting:ye}))}function G5e(e,t,n){$5e.default.render(oRt(e),t,n)}function oRt(e){let t=new tr;return $r.default.createElement(er,{colorMode:"light"},$r.default.createElement(rr,{client:t},$r.default.createElement(J5e,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var Ba=E(L());var X5e=E(cn());function JA(e){let{api:t,query:n,selectionChangedEvent:r,...o}=e,i=new pr(t),[u,c]=(0,Ba.useState)(),[d,g]=(0,Ba.useState)([]),[O,S]=(0,Ba.useState)(n),I=M=>{g(M)},R=M=>{if(!M.trim().toLowerCase())return;g([{label:M}])},{isLoading:k}=dr(["suggestions",O],async()=>{if(O.trim())return i.suggest({query:O},void 0,void 0,e.parameter).then(M=>{M.response&&M.response.docs&&c(M.response.docs.map(C=>({label:C.autosuggest,type:{color:"tint1",iconType:""}})))})});return(0,Ba.useEffect)(()=>{r(d.map(M=>({label:M.label})))},[d]),Ba.default.createElement(Ba.default.Fragment,null,Ba.default.createElement(r0,{id:"suggest",isClearable:!0,"aria-label":"searchBar",fullWidth:!0,async:!0,placeholder:"Search",autoFocus:!0,singleSelection:!0,isLoading:k,options:u,selectedOptions:d,onChange:I,onCreateOption:R,onSearchChange:M=>{S(M)}}))}function K5e(e,t,n){X5e.default.render(iRt(e),t,n)}function iRt(e){let t=new tr;return Ba.default.createElement(er,{colorMode:"light"},Ba.default.createElement(rr,{client:t},Ba.default.createElement(JA,{api:e.api,query:e.query,selectionChangedEvent:e.selectionChangedEvent,parameter:e.parameter})))}var zt=E(L());var xs=E(L());function Y5e(e){let{api:t,result:n,targetLink:r,...o}=e;return xs.default.createElement(fa,{textAlign:"left",...o,href:r?n.type!="ontology"?r+"ontologies/"+n.ontology_name+"/"+Lo(n.type,!0)+"?iri="+encodeURIComponent(n.iri):r+"ontologies/"+n.ontology_name:void 0,title:xs.default.createElement(_n,null,xs.default.createElement(wt,{grow:!1},xs.default.createElement(_h,null,xs.default.createElement("h2",null,n.label))),xs.default.createElement(wt,null,n.type!="ontology"&&xs.default.createElement(MA,{api:t,iri:n.iri,entityType:n.type,ontologyId:n.ontology_name})))},n.type!="ontology"?xs.default.createElement(ng,{iri:n.iri}):void 0,xs.default.createElement(so,{size:"s"}),xs.default.createElement(zA,{api:t,ontologyId:n.ontology_name,iri:n.iri,thingType:n.type}))}var Q5e=E(cn());var aRt=10,lRt=[10,25,50,100];function Z5e(e){let{api:t,query:n,parameter:r,initialItemsPerPage:o=aRt,itemsPerPageOptions:i=lRt,targetLink:u,preselected:c,useLegacy:d=!0,...g}=e,O=new pr(t),[S,I]=(0,zt.useState)(n),[R,k]=(0,zt.useState)(0),[M,C]=(0,zt.useState)(0),[T,D]=(0,zt.useState)(o),[U,G]=(0,zt.useState)(0),[Y,K]=(0,zt.useState)(!1),[B,ne]=(0,zt.useState)(!1),[pe,ve]=(0,zt.useState)([]),[de,ue]=(0,zt.useState)([]);(0,zt.useEffect)(()=>{I(n)},[n]);function ye(st,Ct,Mr,Sr){if(st.length==0)Mr(Ct.reduce((An,jr,Dt,en)=>(Dt%2===0&&An.push({label:Sr?Sr(jr):jr,key:jr,append:"("+en[Dt+1]+")",disabled:en[Dt+1]==0,data:{totalCount:en[Dt+1]}}),An),[]));else{let An=[];for(let jr=0;jr{if(Dt%2===0){let Cr=An.find(Fn=>Fn.key==jr);Cr&&(Cr.append="("+en[Dt+1],Cr.data&&en[Dt+1]st.checked==="on",{data:ze,isLoading:He,isSuccess:Qe,isError:Be,error:Ze}=dr(["searchResults",t,S,Y,B,R,T,pe.filter(be).map(st=>st.key),de.filter(be).map(st=>st.key),r],async({signal:st})=>O.search({query:S,exactMatch:Y,showObsoleteTerms:B,types:pe.filter(be).map(Ct=>Ct.key).join(","),ontology:de.filter(be).map(Ct=>Ct.key).join(","),groupByIri:!0},{page:R.toString(),size:T.toString()},void 0,e.parameter,st).then(Ct=>{if(Ct.response&&Ct.response.docs!=null&&Ct.response.numFound!=null){Ct.facet_counts&&Ct.facet_counts.facet_fields&&(Ct.facet_counts.facet_fields.type&&ye(pe,Ct.facet_counts.facet_fields.type,ve,Sr=>`${Sr[0].toUpperCase()}${Sr.slice(1)}`),d?Ct.facet_counts.facet_fields.ontology_name&&ye(de,Ct.facet_counts.facet_fields.ontology_name,ue,Sr=>Sr.toUpperCase()):Ct.facet_counts.facet_fields.ontologyId&&ye(de,Ct.facet_counts.facet_fields.ontologyId,ue,Sr=>Sr.toUpperCase())),G(Ct.response.numFound);let Mr=Math.ceil(Ct.response.numFound/T);return C(Mr),R>=Mr&&k(0),Ct.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function lt(st){k(Math.floor((R*T+1)/st)),D(st)}function Ke(){K(!Y)}function Ht(){ne(!B)}function Ge(st,Ct){let Mr=[...st];Ct(Mr.map(Sr=>({...Sr,checked:void 0})))}function Wt(){Ge(pe,ve),Ge(de,ue)}function Vt(st){I(st[0]?st[0].label:"")}return zt.default.createElement(zt.default.Fragment,null,zt.default.createElement(JA,{api:t,query:"",selectionChangedEvent:st=>{Vt(st)}}),zt.default.createElement(so,{size:"s"}),zt.default.createElement(_n,null,zt.default.createElement(wt,{grow:3,style:{minWidth:250}},zt.default.createElement(ii,null,Qe&&zt.default.createElement(au,{label:"Filter by type"},zt.default.createElement(df,{options:pe,onChange:ve,listProps:{bordered:!0}},st=>st)),He&&zt.default.createElement(au,{label:"Filter by type"},zt.default.createElement(Zt,{size:"s"})),Be&&zt.default.createElement(au,{label:"Filter by type"},zt.default.createElement(df,{options:[],onChange:ve,listProps:{bordered:!0}},st=>st)),Qe&&zt.default.createElement(au,{label:"Filter by ontology"},zt.default.createElement(df,{options:de,onChange:ue,listProps:{bordered:!0},searchable:!0},(st,Ct)=>zt.default.createElement(zt.default.Fragment,null,Ct,st))),He&&zt.default.createElement(au,{label:"Filter by ontology"},zt.default.createElement(Zt,{size:"s"})),Be&&zt.default.createElement(au,{label:"Filter by ontology"},zt.default.createElement(df,{options:[],onChange:ue,listProps:{bordered:!0},searchable:!0},(st,Ct)=>zt.default.createElement(zt.default.Fragment,null,Ct,st))),zt.default.createElement(Vi,{onClick:Wt},"Clear all filters"))),zt.default.createElement(wt,{grow:7},zt.default.createElement(ii,{color:"transparent",grow:!1},zt.default.createElement(_n,null,zt.default.createElement(wt,{grow:!1},zt.default.createElement(s8,{label:"Exact match",checked:Y,onChange:Ke})),zt.default.createElement(wt,null,zt.default.createElement(s8,{label:"Show only obsolete terms",checked:B,onChange:Ht}))),zt.default.createElement(so,{size:"m"}),zt.default.createElement(Pt,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(R*T+1,U)," to ",Math.min((R+1)*T,U)," of ",U," results"),zt.default.createElement(so,{size:"s"}),zt.default.createElement(Ch,{margin:"none",style:{height:2}}),zt.default.createElement(so,{size:"s"}),zt.default.createElement(n0,{"aria-label":"Search result pagination",pageCount:M,activePage:R,onChangePage:k,itemsPerPage:T,onChangeItemsPerPage:lt,itemsPerPageOptions:i}),zt.default.createElement(so,{size:"s"}),ze&&ze.map(st=>zt.default.createElement(zt.default.Fragment,{key:st.id},zt.default.createElement(Y5e,{api:t,result:st,targetLink:u}),zt.default.createElement(so,null)))))))}function e4e(e,t,n){Q5e.default.render(sRt(e),t,n)}function sRt(e){let t=new tr;return zt.default.createElement(er,{colorMode:"light"},zt.default.createElement(rr,{client:t},zt.default.createElement(Z5e,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var Bt=E(L());var r4e=E(cn()),uRt=!0;function cRt(e,t){let n=e.getRdfTypes().filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!r.startsWith("http://www.w3.org/2000/01/rdf-schema#"));if(e.getRdfTypes().length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Type"),rg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function pRt(e,t){let n=e.getSameAs();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Same As"),rg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function fRt(e,t){let n=e.getDifferentFrom();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Different from"),rg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function dRt(e,t){let n=e.getDisjointWith();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Disjoint with"),rg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function mRt(e,t){let n=e.getInverseOf();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Inverse of"),rg(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function t4e(e,t,n){return nt(e).slice().reverse().map((r,o)=>Bt.default.createElement("span",{key:r},Rr(t,t.getLinkedEntities(),r,n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate}),Bt.default.createElement(Bt.default.Fragment,null,oo.value),r=n.filter(o=>Array.isArray(o)).length>0;if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,r?"Property chains":"Property chain"),r?Bt.default.createElement("ul",null,n.map(o=>Bt.default.createElement("li",{key:Ut()},t4e(o,e,t)))):Bt.default.createElement("p",null,t4e(n,e,t)))}function gRt(e,t){let n=e.getEquivalents();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Equivalent to"),n.length===1?Bt.default.createElement("p",null,ha(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Bt.default.createElement("ul",null,n.map(r=>Bt.default.createElement("li",{key:Ut()},ha(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function vRt(e,t){let n=e.getSuperEntities();if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Sub",e.getType()," of"),n.length===1?Bt.default.createElement("p",null,ha(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):Bt.default.createElement("ul",null,n.map(r=>Bt.default.createElement("li",{key:Ut()},ha(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function yRt(e,t){let n=e.getRelatedFrom(),r=Array.from(new Set(n.map(o=>o.value.property)));if(n.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Related from"),r.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return Bt.default.createElement("div",{key:o.toString()+Ut()},Bt.default.createElement("div",null,Bt.default.createElement("a",{style:{color:"black"},href:o},Bt.default.createElement("i",null,i||o))),Bt.default.createElement("ul",{style:{marginBottom:0}},n.filter(u=>u.value.property===o).map(u=>Bt.default.createElement("li",{key:Ut()},Rr(e,e.getLinkedEntities(),u.value.value,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),Bt.default.createElement("p",null)," ")}))}function bRt(e,t,n){if(t.length>0)return Bt.default.createElement(wt,null,Bt.default.createElement("b",null,"Instances"),Bt.default.createElement("ul",null,t.map(r=>Bt.default.createElement("li",{key:Ut()},$i(e,e.getLinkedEntities(),r.getIri(),n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate})))))}function n4e(e){let{api:t,iri:n,ontologyId:r,hasTitle:o=uRt,showBadges:i,entityType:u,parameter:c,onNavigateToEntity:d,onNavigateToDisambiguate:g,onNavigateToOntology:O,...S}=e,I=new pr(t),{data:R,isLoading:k,isSuccess:M,isError:C}=dr(["entityJson",t,n,r,u,c,i],async()=>I.getEntityObject(n,u,r,c,!1)),{data:T,isLoading:D,isSuccess:U}=dr({queryKey:["instances",R],queryFn:async()=>R&&_d(R)&&R.hasDirectChildren()?I.getClassInstances(R.getIri(),R.getOntologyId()):[],enabled:!!R});function G(Y,K){let B=[];if(m1(Y)){let ne=cRt(Y,e);ne!=null&&B.push(ne);let pe=pRt(Y,e);pe!=null&&B.push(pe);let ve=fRt(Y,e);ve!=null&&B.push(ve)}if(zp(Y)||_d(Y)){let ne=dRt(Y,e);ne!=null&&B.push(ne)}if(zp(Y)){let ne=mRt(Y,e);ne!=null&&B.push(ne);let pe=hRt(Y,e);pe!=null&&B.push(pe)}if(zp(Y)||_d(Y)){let ne=gRt(Y,e);ne!=null&&B.push(ne);let pe=vRt(Y,e);pe!=null&&B.push(pe);let ve=yRt(Y,e);ve!=null&&B.push(ve)}if(_d(Y)){let ne=bRt(Y,K,e);ne!=null&&B.push(ne)}return B.length>0?Bt.default.createElement(Pt,{...S},B):Bt.default.createElement(Pt,{...S},"No relations available.")}return Bt.default.createElement(Bt.default.Fragment,null,Bt.default.createElement(fa,{title:o?(u?Zl(uj(u)):M&&R?Zl(R.getType()):"")+" Relations":"",layout:"horizontal"},(k||D)&&Bt.default.createElement(Zt,{size:"s"}),C&&Bt.default.createElement(Pt,null,"Requested resource not available"),M&&U&&R!==void 0&&T!==void 0&&G(R,T)))}function o4e(e,t,n){r4e.default.render(wRt(e),t,n)}function wRt(e){let t=new tr;return Bt.default.createElement(er,{colorMode:"light"},Bt.default.createElement(rr,{client:t},Bt.default.createElement(n4e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var Ha=E(L()),i4e=E(cn());function a4e(e){let{api:t,iri:n,ontologyId:r,useLegacy:o}=e,i=new pr(t),{data:u,isLoading:c,isSuccess:d,isError:g,error:O}=dr(["termDepiction",t,n,r,o],async()=>i.getThingObject(n,"class",r,"",o));return Ha.default.createElement(Ha.default.Fragment,null,c&&Ha.default.createElement(Zt,{size:"s"}),d&&u&&u.getDepictionUrl()&&Ha.default.createElement(Ha.default.Fragment,null,Ha.default.createElement(WC,{size:"m",hasShadow:!0,allowFullScreen:!0,alt:u.getDepictionUrl(),src:u.getDepictionUrl()}),Ha.default.createElement("p",null,Ha.default.createElement("small",null,"Click to expand."))),g&&Ha.default.createElement(Pt,null,Ln(O,"depiction")))}function l4e(e,t,n){i4e.default.render(ORt(e),t,n)}function ORt(e){let t=new tr;return Ha.default.createElement(er,{colorMode:"light"},Ha.default.createElement(rr,{client:t},Ha.default.createElement(a4e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy})))}var hc=E(L());var s4e=E(cn());function xRt(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["entityOntoList",n,r,o,t,i,u],async()=>{let R,k,M;if(u){let C=(await c.getEntityResponse(t,o,void 0,r,u))._embedded;R=C[Object.keys(C)[0]].map(T=>T.ontology_name),k=o||cj(Object.keys(C)[0]),M=C[Object.keys(C)[0]][0].label}else{let C=await c.getEntityObject(t,o,i,r,u);R=C.getAppearsIn(),k=o||C.getType(),M=C.getLabel()||""}return R=R.filter(C=>C!=i).sort(),{ontoList:R,entityType:k,label:M}});return hc.default.createElement(hc.default.Fragment,null,O&&d&&hc.default.createElement(UA,{ontolist:d.ontoList,entityType:d.entityType,label:d.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),g&&hc.default.createElement(Zt,null),S&&hc.default.createElement(Pt,null,Ln(I,"ontology list")))}function u4e(e,t,n){s4e.default.render(_Rt(e),t,n)}function _Rt(e){let t=new tr;return hc.default.createElement(er,{colorMode:"light"},hc.default.createElement(rr,{client:t},hc.default.createElement(xRt,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var gc=E(L());var c4e=E(cn());function SRt(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,c=new pr(n),{data:d,isLoading:g,isSuccess:O,isError:S,error:I}=dr(["entityDefinedBy",n,r,o,t,i,u],async()=>{let R,k,M;if(u){let C=(await c.getEntityResponse(t,o,void 0,r,u))._embedded;R=C[Object.keys(C)[0]].filter(T=>T.is_defining_ontology).map(T=>T.ontology_name),k=o||cj(Object.keys(C)[0]),M=C[Object.keys(C)[0]][0].label}else{let C=await c.getEntityObject(t,o,i,r,u);R=C.getDefinedBy().filter(T=>T!=C.getOntologyId()),k=o||C.getType(),M=C.getLabel()||""}return R=R.sort(),{ontoList:R,entityType:k,label:M}});return gc.default.createElement(gc.default.Fragment,null,O&&d&&gc.default.createElement($A,{ontolist:d.ontoList,entityType:d.entityType,label:d.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),g&&gc.default.createElement(Zt,null),S&&gc.default.createElement(Pt,null,Ln(I,"ontology list")))}function p4e(e,t,n){c4e.default.render(IRt(e),t,n)}function IRt(e){let t=new tr;return gc.default.createElement(er,{colorMode:"light"},gc.default.createElement(rr,{client:t},gc.default.createElement(SRt,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}window.SemLookPWidgets={createAutocomplete:t5e,createDataContent:o5e,createEntityInfo:s5e,createEntityRelations:o4e,createJsonApi:p5e,createBreadcrumb:d5e,createDescription:h5e,createIri:v5e,createTab:E5e,createAlternativeNameTab:C5e,createCrossRefTab:T5e,createHierarchy:D5e,createHierarchyDeprecated:S5e,createTitle:F5e,createOntologyInfo:U5e,createResources:G5e,createSearchBar:K5e,createSearchResultsList:e4e,createMetadata:H5e,createDepiction:l4e,createHierarchyOLS:O5e,createEntityOntoList:u4e,createEntityDefinedBy:p4e};})(); /*! Bundled license information: object-assign/index.js: diff --git a/package-lock.json b/package-lock.json index f7f9c428..1bbc5d0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ts4nfdi/terminology-service-suite", - "version": "2.3.2", + "version": "2.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ts4nfdi/terminology-service-suite", - "version": "2.3.2", + "version": "2.6.0", "license": "MIT", "dependencies": { "@storybook/html-vite": "^7.2.3", @@ -116,9 +116,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "engines": { "node": ">=6.9.0" } @@ -153,11 +153,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -207,9 +207,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", @@ -217,7 +217,7 @@ "@babel/helper-optimise-call-expression": "^7.24.7", "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -421,12 +421,12 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -447,11 +447,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -630,12 +630,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -645,12 +645,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -801,12 +801,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -847,15 +847,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -912,13 +912,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -945,16 +945,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -1414,13 +1414,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1701,13 +1701,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1717,12 +1717,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.2", + "@babel/compat-data": "^7.25.4", "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", @@ -1751,13 +1751,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", @@ -1785,7 +1785,7 @@ "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-property-literals": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", @@ -1798,10 +1798,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -2027,9 +2027,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2038,9 +2038,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.0.tgz", - "integrity": "sha512-BOehWE7MgQ8W8Qn0CQnMtg2tHPHPulcS/5AVpFvs2KCK1ET+0WqZqPvnpRpFN81gYoFopdIEJX9Sgjw3ZBccPg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", + "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", "dev": true, "dependencies": { "core-js-pure": "^3.30.2", @@ -2064,15 +2064,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2081,9 +2081,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -2242,14 +2242,14 @@ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" }, "node_modules/@emotion/react": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.0.tgz", - "integrity": "sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==", + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.12.0", "@emotion/cache": "^11.13.0", - "@emotion/serialize": "^1.3.0", + "@emotion/serialize": "^1.3.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", "@emotion/utils": "^1.4.0", "@emotion/weak-memoize": "^0.4.0", @@ -2265,13 +2265,13 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.0.tgz", - "integrity": "sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.1.tgz", + "integrity": "sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==", "dependencies": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.9.0", + "@emotion/unitless": "^0.10.0", "@emotion/utils": "^1.4.0", "csstype": "^3.0.2" } @@ -2311,9 +2311,9 @@ "dev": true }, "node_modules/@emotion/unitless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.9.0.tgz", - "integrity": "sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.1.0", @@ -2333,6 +2333,247 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", @@ -2348,6 +2589,96 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2455,22 +2786,22 @@ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==" }, "node_modules/@floating-ui/core": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", - "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", "dev": true, "dependencies": { - "@floating-ui/utils": "^0.2.5" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", - "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", "dev": true, "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.5" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react-dom": { @@ -2487,9 +2818,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", - "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", "dev": true }, "node_modules/@humanwhocodes/config-array": { @@ -2960,9 +3291,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.6.tgz", - "integrity": "sha512-kytg6LheUG42V8H/o/Ptz3olSO5kUXW9zF0ox18VnblX6bO2yif1FPItgc3ey1t5ansb1+gbe7SatntqusQupg==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz", + "integrity": "sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==", "dev": true, "funding": { "type": "opencollective", @@ -2970,9 +3301,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.6.tgz", - "integrity": "sha512-ceNGjoXheH9wbIFa1JHmSc9QVjJUvh18KvHrR4/FkJCSi9HXJ+9ee1kUhCOEFfuxNF8UB6WWVrIUOUgRd70t0A==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.7.tgz", + "integrity": "sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==", "dev": true, "dependencies": { "@babel/runtime": "^7.23.9" @@ -2996,14 +3327,14 @@ } }, "node_modules/@mui/material": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.6.tgz", - "integrity": "sha512-0LUIKBOIjiFfzzFNxXZBRAyr9UQfmTAFzbt6ziOU2FDXhorNN2o3N9/32mNJbCA8zJo2FqFU6d3dtoqUDyIEfA==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.7.tgz", + "integrity": "sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==", "dev": true, "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/core-downloads-tracker": "^5.16.6", - "@mui/system": "^5.16.6", + "@mui/core-downloads-tracker": "^5.16.7", + "@mui/system": "^5.16.7", "@mui/types": "^7.2.15", "@mui/utils": "^5.16.6", "@popperjs/core": "^2.11.8", @@ -3106,9 +3437,9 @@ } }, "node_modules/@mui/styles": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.16.6.tgz", - "integrity": "sha512-l6TWbVZxwx7+fBdNsXTX0W11wXY1zHXrPmxrEgkFMSt17+ciyZkKhfmjObBC5oFhihqBSWpGoFI1IJPHFqpW1w==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.16.7.tgz", + "integrity": "sha512-FfXhHP/2MlqH+vLs2tIHMeCChmqSRgkOALVNLKkPrDsvtoq5J8OraOutCn1scpvRjr9mO8ZhW6jKx2t/vUDxtQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.23.9", @@ -3147,9 +3478,9 @@ } }, "node_modules/@mui/system": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.6.tgz", - "integrity": "sha512-5xgyJjBIMPw8HIaZpfbGAaFYPwImQn7Nyh+wwKWhvkoIeDosQ1ZMVrbTclefi7G8hNmqhip04duYwYpbBFnBgw==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz", + "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==", "dev": true, "dependencies": { "@babel/runtime": "^7.23.9", @@ -3187,12 +3518,12 @@ } }, "node_modules/@mui/types": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.15.tgz", - "integrity": "sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.16.tgz", + "integrity": "sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==", "dev": true, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3528,9 +3859,9 @@ "dev": true }, "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "dependencies": { "@pnpm/config.env-replace": "^1.1.0", @@ -4786,9 +5117,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", - "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", "dev": true, "engines": { "node": ">=14.0.0" @@ -4918,10 +5249,153 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", - "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", "cpu": [ "x64" ], @@ -4932,9 +5406,9 @@ "peer": true }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz", - "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", "cpu": [ "x64" ], @@ -4944,6 +5418,45 @@ ], "peer": true }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", @@ -5537,9 +6050,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5858,9 +6371,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dependencies": { "undici-types": "~5.26.4" } @@ -6026,9 +6539,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dependencies": { "undici-types": "~5.26.4" } @@ -6110,9 +6623,9 @@ } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6232,6 +6745,246 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", @@ -6248,6 +7001,102 @@ "node": ">=12" } }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/html-vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@storybook/html-vite/node_modules/@storybook/builder-vite": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.20.tgz", @@ -6293,13 +7142,13 @@ } }, "node_modules/@storybook/html-vite/node_modules/@types/node": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz", - "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "optional": true, "peer": true, "dependencies": { - "undici-types": "~6.11.1" + "undici-types": "~6.19.2" } }, "node_modules/@storybook/html-vite/node_modules/es-module-lexer": { @@ -6346,21 +7195,21 @@ } }, "node_modules/@storybook/html-vite/node_modules/undici-types": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "optional": true, "peer": true }, "node_modules/@storybook/html-vite/node_modules/vite": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", - "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", "peer": true, "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.39", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -6379,6 +7228,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -6396,6 +7246,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -6408,9 +7261,9 @@ } }, "node_modules/@storybook/html-vite/node_modules/vite/node_modules/rollup": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz", - "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "peer": true, "dependencies": { "@types/estree": "1.0.5" @@ -6423,22 +7276,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.19.1", - "@rollup/rollup-android-arm64": "4.19.1", - "@rollup/rollup-darwin-arm64": "4.19.1", - "@rollup/rollup-darwin-x64": "4.19.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.1", - "@rollup/rollup-linux-arm-musleabihf": "4.19.1", - "@rollup/rollup-linux-arm64-gnu": "4.19.1", - "@rollup/rollup-linux-arm64-musl": "4.19.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1", - "@rollup/rollup-linux-riscv64-gnu": "4.19.1", - "@rollup/rollup-linux-s390x-gnu": "4.19.1", - "@rollup/rollup-linux-x64-gnu": "4.19.1", - "@rollup/rollup-linux-x64-musl": "4.19.1", - "@rollup/rollup-win32-arm64-msvc": "4.19.1", - "@rollup/rollup-win32-ia32-msvc": "4.19.1", - "@rollup/rollup-win32-x64-msvc": "4.19.1", + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", "fsevents": "~2.3.2" } }, @@ -6547,9 +7400,9 @@ } }, "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6680,9 +7533,9 @@ } }, "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/@storybook/react-dom-shim": { @@ -6733,9 +7586,9 @@ } }, "node_modules/@storybook/react-webpack5/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6748,9 +7601,9 @@ "dev": true }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -6943,9 +7796,9 @@ } }, "node_modules/@swc/core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.4.tgz", - "integrity": "sha512-+wSycNxOw9QQz81AJAZlNS34EtOIifwUXMPACg05PWjECsjOKDTXLCVPx6J0lRaxhHSGBU2OYs9mRfIvxGt3CA==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.23.tgz", + "integrity": "sha512-VDNkpDvDlreGh2E3tlDj8B3piiuLhhQA/7rIVZpiLUvG1YpucAa6N7iDXA7Gc/+Hah8spaCg/qvEaBkCmcIYCQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -6960,16 +7813,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.4", - "@swc/core-darwin-x64": "1.7.4", - "@swc/core-linux-arm-gnueabihf": "1.7.4", - "@swc/core-linux-arm64-gnu": "1.7.4", - "@swc/core-linux-arm64-musl": "1.7.4", - "@swc/core-linux-x64-gnu": "1.7.4", - "@swc/core-linux-x64-musl": "1.7.4", - "@swc/core-win32-arm64-msvc": "1.7.4", - "@swc/core-win32-ia32-msvc": "1.7.4", - "@swc/core-win32-x64-msvc": "1.7.4" + "@swc/core-darwin-arm64": "1.7.23", + "@swc/core-darwin-x64": "1.7.23", + "@swc/core-linux-arm-gnueabihf": "1.7.23", + "@swc/core-linux-arm64-gnu": "1.7.23", + "@swc/core-linux-arm64-musl": "1.7.23", + "@swc/core-linux-x64-gnu": "1.7.23", + "@swc/core-linux-x64-musl": "1.7.23", + "@swc/core-win32-arm64-msvc": "1.7.23", + "@swc/core-win32-ia32-msvc": "1.7.23", + "@swc/core-win32-x64-msvc": "1.7.23" }, "peerDependencies": { "@swc/helpers": "*" @@ -6980,10 +7833,90 @@ } } }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.23.tgz", + "integrity": "sha512-yyOHPfti6yKlQulfVWMt7BVKst+SyEZYCWuQSGMn1KgmNCH/bYufRWfQXIhkGSj44ZkEepJmsJ8tDyIb4k5WyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.23.tgz", + "integrity": "sha512-GzqHwQ0Y1VyjdI/bBKFX2GKm5HD3PIB6OhuAQtWZMTtEr2yIrlT0YK2T+XKh7oIg31JwxGBeQdBk3KTI7DARmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.23.tgz", + "integrity": "sha512-qwX4gB41OS6/OZkHcpTqLFGsdmvoZyffnJIlgB/kZKwH3lfeJWzv6vx57zXtNpM/t7GoQEe0VZUVdmNjxSxBZw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.23.tgz", + "integrity": "sha512-TsrbUZdMaUwzI7+g/8rHPLWbntMKYSu5Bn5IBSqVKPeyqaXxNnlIUnWXgXcUcRAc+T+Y8ADfr7EiFz9iz5DuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.23.tgz", + "integrity": "sha512-JEdtwdthazKq4PBz53KSubwwK8MvqODAihGSAzc8u3Unq4ojcvaS8b0CwLBeD+kTQ78HpxOXTt3DsFIxpgaCAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.4.tgz", - "integrity": "sha512-bcO1MpAm39TXqqHuYW4ox4vDvhB7jkguwMwxvmL+cKBGsUHrIoUTfGt9NM9N4D4CvOwULlxqbyt19veUJ7CVPw==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.23.tgz", + "integrity": "sha512-V51gFPWaVAHbI1yg9ahsoya3aB4uawye3SZ5uQWgcP7wdCdiv60dw4F5nuPJf5Z1oXD3U/BslXuamv8Oh9vXqQ==", "cpu": [ "x64" ], @@ -6997,9 +7930,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.4.tgz", - "integrity": "sha512-N6nXuHyDO/q5kPN2xQxz5BEvhFpgnFSkP+9wxg5xWq+qIQL5bv37jk8dkKvMLx/8fHzTqrIjPDSRzVbcL7sqXg==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.23.tgz", + "integrity": "sha512-BBqQi4+UdeRqag3yM4IJjaHG4yc1o3l9ksENHToE0o/u2DT0FY5+K/DiYGZLC1JHbSFzNqRCYsa7DIzRtZ0A1A==", "cpu": [ "x64" ], @@ -7012,6 +7945,54 @@ "node": ">=10" } }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.23.tgz", + "integrity": "sha512-JPk6pvCKncL6bXG7p+NLZf8PWx4FakVvKNdwGeMrYunb+yk1IZf7qf9LJk8+GDGF5QviDXPs8opZrTrfsW80fA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.23.tgz", + "integrity": "sha512-2Whxi8d+bLQBzJcQ5qYPHlk02YYVGsMVav0fWk+FnX2z1QRREIu1L1xvrpi7gBpjXp6BIU40ya8GiKeekNT2bg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.23.tgz", + "integrity": "sha512-82fARk4/yJ40kwWKY/gdKDisPdtgJE9jgpl/vkNG3alyJxrCzuNM7+CtiKoYbXLeqM8GQTS3wlvCaJu9oQ8dag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -7369,9 +8350,9 @@ } }, "node_modules/@ts4nfdi/esbuild-dynamic-import/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/@ts4nfdi/gh-pages-multi": { @@ -7546,26 +8527,6 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -7994,9 +8955,9 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", "dev": true, "dependencies": { "@types/react": "*" @@ -8109,9 +9070,9 @@ } }, "node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true }, "node_modules/@types/use-sync-external-store": { @@ -8137,15 +9098,15 @@ } }, "node_modules/@types/webxr": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.19.tgz", - "integrity": "sha512-4hxA+NwohSgImdTSlPXEqDqqFktNgmTXQ05ff1uWam05tNGroCMp4G+4XVl6qWm1p7GQ/9oD41kAYsSssF6Mzw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.20.tgz", + "integrity": "sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==", "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -8560,9 +9521,9 @@ } }, "node_modules/@yarnpkg/esbuild-plugin-pnp/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/@yarnpkg/fslib": { "version": "2.10.3", @@ -8907,6 +9868,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -8948,9 +9910,9 @@ } }, "node_modules/aria-hidden/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/aria-query": { @@ -9162,14 +10124,14 @@ "dev": true }, "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "node_modules/async-limiter": { "version": "1.0.1", @@ -9215,9 +10177,9 @@ } }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -9226,12 +10188,12 @@ } }, "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" + "engines": { + "node": ">= 0.4" } }, "node_modules/babel-core": { @@ -9424,13 +10386,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -9549,6 +10511,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { "node": ">=8" }, @@ -9747,9 +10710,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "funding": [ { "type": "opencollective", @@ -9765,9 +10728,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, "bin": { @@ -9924,9 +10887,9 @@ } }, "node_modules/camel-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/camelcase": { @@ -9986,9 +10949,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "version": "1.0.30001657", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001657.tgz", + "integrity": "sha512-DPbJAlP8/BAXy3IgiWmZKItubb3TYGP0WscQQlVGIfT4s/YlFYVuJgyOsQNP7rJRChx/qdMeLJQJP0Sgg2yjNA==", "funding": [ { "type": "opencollective", @@ -10110,6 +11073,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -10133,6 +11097,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -10189,9 +11154,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz", + "integrity": "sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==", "dev": true }, "node_modules/classnames": { @@ -10831,12 +11796,12 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -10844,9 +11809,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -11774,9 +12739,9 @@ } }, "node_modules/dot-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/dot-prop": { @@ -11871,9 +12836,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==" + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.14.tgz", + "integrity": "sha512-bEfPECb3fJ15eaDnu9LEJ2vPGD6W1vt7vZleSVyFhYuMIKm3vz/g9lt7IvEzgdwj58RjbPKUF2rXTCN/UW47tQ==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -12227,9 +13192,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -12349,17 +13314,17 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", - "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", + "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", "dev": true, "dependencies": { "aria-query": "~5.1.3", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "^4.9.1", - "axobject-query": "~3.1.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "es-iterator-helpers": "^1.0.19", @@ -12375,13 +13340,13 @@ "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-react": { - "version": "7.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", - "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "version": "7.35.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", + "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", "dev": true, "dependencies": { "array-includes": "^3.1.8", @@ -13029,9 +13994,9 @@ } }, "node_modules/file-selector/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/file-system-cache": { @@ -13292,9 +14257,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.242.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.242.1.tgz", - "integrity": "sha512-E3ml21Q1S5cMAyPbtYslkvI6yZO5oCS/S2EoteeFH8Kx9iKOv/YOJ+dGd/yMf+H3YKfhMKjnOpyNwrO7NdddWA==", + "version": "0.245.2", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.245.2.tgz", + "integrity": "sha512-FU4yuqC1j2IeWWicpzG0YJrXHJgKjK/AU8QKK/7MvQaNhcoGisDoE7FJLGCtbvnifzsgDWdm9/jtTF7Mp+PJXQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -13313,15 +14278,15 @@ } }, "node_modules/focus-lock/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz", + "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==", "dev": true, "funding": [ { @@ -13347,9 +14312,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -13615,6 +14580,19 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -14607,9 +15585,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -14878,6 +15856,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -14951,9 +15930,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { "hasown": "^2.0.2" }, @@ -16645,9 +17624,9 @@ } }, "node_modules/lower-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/lowercase-keys": { @@ -16735,9 +17714,9 @@ } }, "node_modules/markdown-to-jsx": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", - "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz", + "integrity": "sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==", "dev": true, "engines": { "node": ">= 10" @@ -17009,9 +17988,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -17309,9 +18288,9 @@ } }, "node_modules/no-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/node-abort-controller": { @@ -17400,6 +18379,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -20015,17 +20995,17 @@ } }, "node_modules/nypm": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.9.tgz", - "integrity": "sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.11.tgz", + "integrity": "sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==", "dev": true, "dependencies": { "citty": "^0.1.6", "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" }, "bin": { "nypm": "dist/cli.mjs" @@ -20597,9 +21577,9 @@ } }, "node_modules/param-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/parent-module": { @@ -20710,9 +21690,9 @@ } }, "node_modules/pascal-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/path-browserify": { @@ -20817,9 +21797,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -20945,9 +21925,9 @@ } }, "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, "dependencies": { "confbox": "^0.1.7", @@ -20956,9 +21936,9 @@ } }, "node_modules/pnpm": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-9.6.0.tgz", - "integrity": "sha512-ONxvuo26NbOTQLlwARLC/h4S8QsXE0cVpKqYzPe7A152/Zgc8Ls4TfqY+NavVIHCvvL0Jmokv6IMNOtxR84LXg==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-9.9.0.tgz", + "integrity": "sha512-YMGKzROL/2ldM5vmrRP36TbupnRWYNTMSndtUkfFQNDt7hpWNpXBg6ZuuRfviPK0/rH8JfMqetytx6rzQ46ZwQ==", "dev": true, "bin": { "pnpm": "bin/pnpm.cjs", @@ -20992,9 +21972,9 @@ } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", "funding": [ { "type": "opencollective", @@ -21500,9 +22480,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -22013,9 +22993,9 @@ } }, "node_modules/qs": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", - "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -22301,9 +23281,9 @@ } }, "node_modules/react-focus-lock": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.12.1.tgz", - "integrity": "sha512-lfp8Dve4yJagkHiFrC1bGtib3mF2ktqwPJw4/WGcgPW+pJ/AVQA5X2vI7xgp13FcxFEpYBBHpXai/N2DBNC0Jw==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.2.tgz", + "integrity": "sha512-T/7bsofxYqnod2xadvuwjGKHOoL5GH7/EIPI5UyEvaU/c2CcphvGI371opFtuY/SYdbMsNiuF4HsHQ50nA/TKQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.0.0", @@ -22375,9 +23355,9 @@ } }, "node_modules/react-focus-on/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/react-input-autosize": { @@ -22526,24 +23506,24 @@ } }, "node_modules/react-remove-scroll-bar/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/react-remove-scroll/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/react-router": { - "version": "6.25.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.25.1.tgz", - "integrity": "sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "dev": true, "dependencies": { - "@remix-run/router": "1.18.0" + "@remix-run/router": "1.19.1" }, "engines": { "node": ">=14.0.0" @@ -22553,13 +23533,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.25.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.25.1.tgz", - "integrity": "sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "dev": true, "dependencies": { - "@remix-run/router": "1.18.0", - "react-router": "6.25.1" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" }, "engines": { "node": ">=14.0.0" @@ -22593,9 +23573,9 @@ } }, "node_modules/react-style-singleton/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/react-transition-group": { @@ -22772,6 +23752,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -22803,9 +23784,9 @@ } }, "node_modules/recast/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/rechoir": { "version": "0.6.2", @@ -23606,9 +24587,9 @@ } }, "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/safe-array-concat": { @@ -24266,9 +25247,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==" + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==" }, "node_modules/split": { "version": "1.0.1", @@ -25006,9 +25987,9 @@ } }, "node_modules/terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "devOptional": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -25271,9 +26252,9 @@ } }, "node_modules/tocbot": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", - "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.29.0.tgz", + "integrity": "sha512-E+8+lceJpWHJYKq+qFHbi+gmFdXZeOAliHFdgiIAUo68cr8ClReXAx7h9e3TcDM0kw9PSnBn3GAZEpRmRLZ93g==", "dev": true }, "node_modules/toidentifier": { @@ -25515,9 +26496,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.1.tgz", - "integrity": "sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -25766,17 +26747,23 @@ } }, "node_modules/unplugin": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz", - "integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz", + "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==", "dependencies": { "acorn": "^8.12.1", - "chokidar": "^3.6.0", - "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } } }, "node_modules/unplugin/node_modules/acorn": { @@ -25898,9 +26885,9 @@ } }, "node_modules/use-callback-ref/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/use-memo-one": { @@ -25948,9 +26935,9 @@ } }, "node_modules/use-sidecar/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, "node_modules/use-sync-external-store": { @@ -26060,9 +27047,9 @@ } }, "node_modules/vfile-message/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true }, "node_modules/vfile-message/node_modules/unist-util-stringify-position": { @@ -26111,9 +27098,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -26153,12 +27140,11 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -26167,7 +27153,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -26248,6 +27234,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "devOptional": true, "engines": { "node": ">=10.13.0" } @@ -26721,9 +27708,9 @@ } }, "@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==" + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==" }, "@babel/core": { "version": "7.25.2", @@ -26748,11 +27735,11 @@ } }, "@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "requires": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -26790,9 +27777,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.24.7", @@ -26800,7 +27787,7 @@ "@babel/helper-optimise-call-expression": "^7.24.7", "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" } }, @@ -26941,12 +27928,12 @@ } }, "@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "requires": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" } }, "@babel/highlight": { @@ -26961,11 +27948,11 @@ } }, "@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "requires": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -27079,21 +28066,21 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-syntax-import-meta": { @@ -27196,12 +28183,12 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-syntax-unicode-sets-regex": { @@ -27224,15 +28211,15 @@ } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.4" } }, "@babel/plugin-transform-async-to-generator": { @@ -27265,13 +28252,13 @@ } }, "@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-class-static-block": { @@ -27286,16 +28273,16 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" } }, @@ -27581,13 +28568,13 @@ } }, "@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-private-property-in-object": { @@ -27760,22 +28747,22 @@ } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.2", + "@babel/compat-data": "^7.25.4", "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", @@ -27804,13 +28791,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", @@ -27838,7 +28825,7 @@ "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-property-literals": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", @@ -27851,10 +28838,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -28016,17 +29003,17 @@ "dev": true }, "@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "requires": { "regenerator-runtime": "^0.14.0" } }, "@babel/runtime-corejs3": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.0.tgz", - "integrity": "sha512-BOehWE7MgQ8W8Qn0CQnMtg2tHPHPulcS/5AVpFvs2KCK1ET+0WqZqPvnpRpFN81gYoFopdIEJX9Sgjw3ZBccPg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", + "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", "dev": true, "requires": { "core-js-pure": "^3.30.2", @@ -28044,23 +29031,23 @@ } }, "@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "requires": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "requires": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -28197,14 +29184,14 @@ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" }, "@emotion/react": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.0.tgz", - "integrity": "sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==", + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.12.0", "@emotion/cache": "^11.13.0", - "@emotion/serialize": "^1.3.0", + "@emotion/serialize": "^1.3.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", "@emotion/utils": "^1.4.0", "@emotion/weak-memoize": "^0.4.0", @@ -28212,13 +29199,13 @@ } }, "@emotion/serialize": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.0.tgz", - "integrity": "sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.1.tgz", + "integrity": "sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==", "requires": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.9.0", + "@emotion/unitless": "^0.10.0", "@emotion/utils": "^1.4.0", "csstype": "^3.0.2" } @@ -28249,9 +29236,9 @@ "dev": true }, "@emotion/unitless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.9.0.tgz", - "integrity": "sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" }, "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.1.0", @@ -28269,12 +29256,145 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" }, + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "optional": true, + "peer": true + }, + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "optional": true + }, "@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "optional": true }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "optional": true + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -28351,22 +29471,22 @@ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==" }, "@floating-ui/core": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", - "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", "dev": true, "requires": { - "@floating-ui/utils": "^0.2.5" + "@floating-ui/utils": "^0.2.7" } }, "@floating-ui/dom": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", - "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", "dev": true, "requires": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.5" + "@floating-ui/utils": "^0.2.7" } }, "@floating-ui/react-dom": { @@ -28379,9 +29499,9 @@ } }, "@floating-ui/utils": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", - "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", "dev": true }, "@humanwhocodes/config-array": { @@ -28732,29 +29852,29 @@ } }, "@mui/core-downloads-tracker": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.6.tgz", - "integrity": "sha512-kytg6LheUG42V8H/o/Ptz3olSO5kUXW9zF0ox18VnblX6bO2yif1FPItgc3ey1t5ansb1+gbe7SatntqusQupg==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz", + "integrity": "sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==", "dev": true }, "@mui/icons-material": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.6.tgz", - "integrity": "sha512-ceNGjoXheH9wbIFa1JHmSc9QVjJUvh18KvHrR4/FkJCSi9HXJ+9ee1kUhCOEFfuxNF8UB6WWVrIUOUgRd70t0A==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.7.tgz", + "integrity": "sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==", "dev": true, "requires": { "@babel/runtime": "^7.23.9" } }, "@mui/material": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.6.tgz", - "integrity": "sha512-0LUIKBOIjiFfzzFNxXZBRAyr9UQfmTAFzbt6ziOU2FDXhorNN2o3N9/32mNJbCA8zJo2FqFU6d3dtoqUDyIEfA==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.7.tgz", + "integrity": "sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==", "dev": true, "requires": { "@babel/runtime": "^7.23.9", - "@mui/core-downloads-tracker": "^5.16.6", - "@mui/system": "^5.16.6", + "@mui/core-downloads-tracker": "^5.16.7", + "@mui/system": "^5.16.7", "@mui/types": "^7.2.15", "@mui/utils": "^5.16.6", "@popperjs/core": "^2.11.8", @@ -28798,9 +29918,9 @@ } }, "@mui/styles": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.16.6.tgz", - "integrity": "sha512-l6TWbVZxwx7+fBdNsXTX0W11wXY1zHXrPmxrEgkFMSt17+ciyZkKhfmjObBC5oFhihqBSWpGoFI1IJPHFqpW1w==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.16.7.tgz", + "integrity": "sha512-FfXhHP/2MlqH+vLs2tIHMeCChmqSRgkOALVNLKkPrDsvtoq5J8OraOutCn1scpvRjr9mO8ZhW6jKx2t/vUDxtQ==", "dev": true, "requires": { "@babel/runtime": "^7.23.9", @@ -28823,9 +29943,9 @@ } }, "@mui/system": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.6.tgz", - "integrity": "sha512-5xgyJjBIMPw8HIaZpfbGAaFYPwImQn7Nyh+wwKWhvkoIeDosQ1ZMVrbTclefi7G8hNmqhip04duYwYpbBFnBgw==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz", + "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==", "dev": true, "requires": { "@babel/runtime": "^7.23.9", @@ -28839,9 +29959,9 @@ } }, "@mui/types": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.15.tgz", - "integrity": "sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.16.tgz", + "integrity": "sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==", "dev": true, "requires": {} }, @@ -29073,9 +30193,9 @@ } }, "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "requires": { "@pnpm/config.env-replace": "^1.1.0", @@ -29724,9 +30844,9 @@ } }, "@remix-run/router": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", - "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", "dev": true }, "@rollup/plugin-commonjs": { @@ -29803,17 +30923,115 @@ "picomatch": "^2.3.1" } }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "optional": true, + "peer": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "optional": true, + "peer": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "optional": true, + "peer": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "optional": true, + "peer": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "optional": true, + "peer": true + }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", - "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", "optional": true, "peer": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz", - "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "optional": true, + "peer": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", "optional": true, "peer": true }, @@ -30255,9 +31473,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -30491,9 +31709,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "requires": { "undici-types": "~5.26.4" } @@ -30620,9 +31838,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "requires": { "undici-types": "~5.26.4" } @@ -30678,9 +31896,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -30773,6 +31991,111 @@ "magic-string": "^0.30.0" }, "dependencies": { + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "optional": true, + "peer": true + }, + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "optional": true, + "peer": true + }, + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "optional": true, + "peer": true + }, + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "optional": true, + "peer": true + }, + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "optional": true, + "peer": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "optional": true, + "peer": true + }, + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "optional": true, + "peer": true + }, + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "optional": true, + "peer": true + }, + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "optional": true, + "peer": true + }, + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "optional": true, + "peer": true + }, + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "optional": true, + "peer": true + }, + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "optional": true, + "peer": true + }, + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "optional": true, + "peer": true + }, + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "optional": true, + "peer": true + }, + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "optional": true, + "peer": true + }, "@esbuild/linux-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", @@ -30780,6 +32103,48 @@ "optional": true, "peer": true }, + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "optional": true, + "peer": true + }, + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "optional": true, + "peer": true + }, + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "optional": true, + "peer": true + }, + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "optional": true, + "peer": true + }, + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "optional": true, + "peer": true + }, + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "optional": true, + "peer": true + }, "@storybook/builder-vite": { "version": "7.6.20", "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.20.tgz", @@ -30804,13 +32169,13 @@ } }, "@types/node": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz", - "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "optional": true, "peer": true, "requires": { - "undici-types": "~6.11.1" + "undici-types": "~6.19.2" } }, "es-module-lexer": { @@ -30850,46 +32215,46 @@ } }, "undici-types": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "optional": true, "peer": true }, "vite": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", - "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", "peer": true, "requires": { "esbuild": "^0.21.3", "fsevents": "~2.3.3", - "postcss": "^8.4.39", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "dependencies": { "rollup": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz", - "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "peer": true, "requires": { - "@rollup/rollup-android-arm-eabi": "4.19.1", - "@rollup/rollup-android-arm64": "4.19.1", - "@rollup/rollup-darwin-arm64": "4.19.1", - "@rollup/rollup-darwin-x64": "4.19.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.1", - "@rollup/rollup-linux-arm-musleabihf": "4.19.1", - "@rollup/rollup-linux-arm64-gnu": "4.19.1", - "@rollup/rollup-linux-arm64-musl": "4.19.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1", - "@rollup/rollup-linux-riscv64-gnu": "4.19.1", - "@rollup/rollup-linux-s390x-gnu": "4.19.1", - "@rollup/rollup-linux-x64-gnu": "4.19.1", - "@rollup/rollup-linux-x64-musl": "4.19.1", - "@rollup/rollup-win32-arm64-msvc": "4.19.1", - "@rollup/rollup-win32-ia32-msvc": "4.19.1", - "@rollup/rollup-win32-x64-msvc": "4.19.1", + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", "@types/estree": "1.0.5", "fsevents": "~2.3.2" } @@ -30967,9 +32332,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -31054,9 +32419,9 @@ "dev": true }, "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -31097,9 +32462,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -31124,9 +32489,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -31254,36 +32619,92 @@ } }, "@swc/core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.4.tgz", - "integrity": "sha512-+wSycNxOw9QQz81AJAZlNS34EtOIifwUXMPACg05PWjECsjOKDTXLCVPx6J0lRaxhHSGBU2OYs9mRfIvxGt3CA==", - "dev": true, - "requires": { - "@swc/core-darwin-arm64": "1.7.4", - "@swc/core-darwin-x64": "1.7.4", - "@swc/core-linux-arm-gnueabihf": "1.7.4", - "@swc/core-linux-arm64-gnu": "1.7.4", - "@swc/core-linux-arm64-musl": "1.7.4", - "@swc/core-linux-x64-gnu": "1.7.4", - "@swc/core-linux-x64-musl": "1.7.4", - "@swc/core-win32-arm64-msvc": "1.7.4", - "@swc/core-win32-ia32-msvc": "1.7.4", - "@swc/core-win32-x64-msvc": "1.7.4", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.23.tgz", + "integrity": "sha512-VDNkpDvDlreGh2E3tlDj8B3piiuLhhQA/7rIVZpiLUvG1YpucAa6N7iDXA7Gc/+Hah8spaCg/qvEaBkCmcIYCQ==", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.7.23", + "@swc/core-darwin-x64": "1.7.23", + "@swc/core-linux-arm-gnueabihf": "1.7.23", + "@swc/core-linux-arm64-gnu": "1.7.23", + "@swc/core-linux-arm64-musl": "1.7.23", + "@swc/core-linux-x64-gnu": "1.7.23", + "@swc/core-linux-x64-musl": "1.7.23", + "@swc/core-win32-arm64-msvc": "1.7.23", + "@swc/core-win32-ia32-msvc": "1.7.23", + "@swc/core-win32-x64-msvc": "1.7.23", "@swc/counter": "^0.1.3", "@swc/types": "^0.1.12" } }, + "@swc/core-darwin-arm64": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.23.tgz", + "integrity": "sha512-yyOHPfti6yKlQulfVWMt7BVKst+SyEZYCWuQSGMn1KgmNCH/bYufRWfQXIhkGSj44ZkEepJmsJ8tDyIb4k5WyA==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.23.tgz", + "integrity": "sha512-GzqHwQ0Y1VyjdI/bBKFX2GKm5HD3PIB6OhuAQtWZMTtEr2yIrlT0YK2T+XKh7oIg31JwxGBeQdBk3KTI7DARmQ==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.23.tgz", + "integrity": "sha512-qwX4gB41OS6/OZkHcpTqLFGsdmvoZyffnJIlgB/kZKwH3lfeJWzv6vx57zXtNpM/t7GoQEe0VZUVdmNjxSxBZw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.23.tgz", + "integrity": "sha512-TsrbUZdMaUwzI7+g/8rHPLWbntMKYSu5Bn5IBSqVKPeyqaXxNnlIUnWXgXcUcRAc+T+Y8ADfr7EiFz9iz5DuSA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.23.tgz", + "integrity": "sha512-JEdtwdthazKq4PBz53KSubwwK8MvqODAihGSAzc8u3Unq4ojcvaS8b0CwLBeD+kTQ78HpxOXTt3DsFIxpgaCAA==", + "dev": true, + "optional": true + }, "@swc/core-linux-x64-gnu": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.4.tgz", - "integrity": "sha512-bcO1MpAm39TXqqHuYW4ox4vDvhB7jkguwMwxvmL+cKBGsUHrIoUTfGt9NM9N4D4CvOwULlxqbyt19veUJ7CVPw==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.23.tgz", + "integrity": "sha512-V51gFPWaVAHbI1yg9ahsoya3aB4uawye3SZ5uQWgcP7wdCdiv60dw4F5nuPJf5Z1oXD3U/BslXuamv8Oh9vXqQ==", "dev": true, "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.4.tgz", - "integrity": "sha512-N6nXuHyDO/q5kPN2xQxz5BEvhFpgnFSkP+9wxg5xWq+qIQL5bv37jk8dkKvMLx/8fHzTqrIjPDSRzVbcL7sqXg==", + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.23.tgz", + "integrity": "sha512-BBqQi4+UdeRqag3yM4IJjaHG4yc1o3l9ksENHToE0o/u2DT0FY5+K/DiYGZLC1JHbSFzNqRCYsa7DIzRtZ0A1A==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.23.tgz", + "integrity": "sha512-JPk6pvCKncL6bXG7p+NLZf8PWx4FakVvKNdwGeMrYunb+yk1IZf7qf9LJk8+GDGF5QviDXPs8opZrTrfsW80fA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.23.tgz", + "integrity": "sha512-2Whxi8d+bLQBzJcQ5qYPHlk02YYVGsMVav0fWk+FnX2z1QRREIu1L1xvrpi7gBpjXp6BIU40ya8GiKeekNT2bg==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.23.tgz", + "integrity": "sha512-82fARk4/yJ40kwWKY/gdKDisPdtgJE9jgpl/vkNG3alyJxrCzuNM7+CtiKoYbXLeqM8GQTS3wlvCaJu9oQ8dag==", "dev": true, "optional": true }, @@ -31553,9 +32974,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -31724,26 +33145,6 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -32150,9 +33551,9 @@ } }, "@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", "dev": true, "requires": { "@types/react": "*" @@ -32265,9 +33666,9 @@ } }, "@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true }, "@types/use-sync-external-store": { @@ -32292,15 +33693,15 @@ } }, "@types/webxr": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.19.tgz", - "integrity": "sha512-4hxA+NwohSgImdTSlPXEqDqqFktNgmTXQ05ff1uWam05tNGroCMp4G+4XVl6qWm1p7GQ/9oD41kAYsSssF6Mzw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.20.tgz", + "integrity": "sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==", "dev": true }, "@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -32608,9 +34009,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" } } }, @@ -32867,6 +34268,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -32902,9 +34304,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -33064,9 +34466,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" } } }, @@ -33077,9 +34479,9 @@ "dev": true }, "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "async-limiter": { "version": "1.0.1", @@ -33113,9 +34515,9 @@ "dev": true }, "axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, "requires": { "follow-redirects": "^1.15.6", @@ -33124,13 +34526,10 @@ } }, "axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dev": true, - "requires": { - "deep-equal": "^2.0.5" - } + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true }, "babel-core": { "version": "7.0.0-bridge.0", @@ -33260,13 +34659,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" } }, "babel-plugin-polyfill-regenerator": { @@ -33345,7 +34744,8 @@ "binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true }, "bl": { "version": "4.1.0", @@ -33508,13 +34908,13 @@ } }, "browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "requires": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" } }, @@ -33620,9 +35020,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -33671,9 +35071,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==" + "version": "1.0.30001657", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001657.tgz", + "integrity": "sha512-DPbJAlP8/BAXy3IgiWmZKItubb3TYGP0WscQQlVGIfT4s/YlFYVuJgyOsQNP7rJRChx/qdMeLJQJP0Sgg2yjNA==" }, "cardinal": { "version": "2.1.1", @@ -33751,6 +35151,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -33766,6 +35167,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -33806,9 +35208,9 @@ } }, "cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz", + "integrity": "sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==", "dev": true }, "classnames": { @@ -34299,18 +35701,18 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "requires": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" } }, "core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", "dev": true }, "core-util-is": { @@ -34966,9 +36368,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -35044,9 +36446,9 @@ } }, "electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==" + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.14.tgz", + "integrity": "sha512-bEfPECb3fJ15eaDnu9LEJ2vPGD6W1vt7vZleSVyFhYuMIKm3vz/g9lt7IvEzgdwj58RjbPKUF2rXTCN/UW47tQ==" }, "emoji-regex": { "version": "9.2.2", @@ -35335,9 +36737,9 @@ } }, "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "escape-html": { "version": "1.0.3", @@ -35500,17 +36902,17 @@ "requires": {} }, "eslint-plugin-jsx-a11y": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", - "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", + "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", "dev": true, "requires": { "aria-query": "~5.1.3", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "^4.9.1", - "axobject-query": "~3.1.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "es-iterator-helpers": "^1.0.19", @@ -35524,9 +36926,9 @@ } }, "eslint-plugin-react": { - "version": "7.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", - "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "version": "7.35.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", + "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", "dev": true, "requires": { "array-includes": "^3.1.8", @@ -35949,9 +37351,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -36159,9 +37561,9 @@ "dev": true }, "flow-parser": { - "version": "0.242.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.242.1.tgz", - "integrity": "sha512-E3ml21Q1S5cMAyPbtYslkvI6yZO5oCS/S2EoteeFH8Kx9iKOv/YOJ+dGd/yMf+H3YKfhMKjnOpyNwrO7NdddWA==", + "version": "0.245.2", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.245.2.tgz", + "integrity": "sha512-FU4yuqC1j2IeWWicpzG0YJrXHJgKjK/AU8QKK/7MvQaNhcoGisDoE7FJLGCtbvnifzsgDWdm9/jtTF7Mp+PJXQ==", "dev": true }, "focus-lock": { @@ -36174,17 +37576,17 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } }, "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz", + "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==", "dev": true }, "for-each": { @@ -36196,9 +37598,9 @@ } }, "foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -36384,6 +37786,12 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -37111,9 +38519,9 @@ "dev": true }, "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" }, "immer": { "version": "9.0.21", @@ -37308,6 +38716,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -37343,9 +38752,9 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "requires": { "hasown": "^2.0.2" } @@ -38605,9 +40014,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -38675,9 +40084,9 @@ "dev": true }, "markdown-to-jsx": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", - "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz", + "integrity": "sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==", "dev": true, "requires": {} }, @@ -38879,9 +40288,9 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -39107,9 +40516,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -39184,7 +40593,8 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-url": { "version": "6.1.0", @@ -41005,17 +42415,17 @@ "dev": true }, "nypm": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.9.tgz", - "integrity": "sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.11.tgz", + "integrity": "sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==", "dev": true, "requires": { "citty": "^0.1.6", "consola": "^3.2.3", "execa": "^8.0.1", "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" }, "dependencies": { "execa": { @@ -41396,9 +42806,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -41492,9 +42902,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -41587,9 +42997,9 @@ "dev": true }, "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "picomatch": { "version": "2.3.1", @@ -41678,9 +43088,9 @@ } }, "pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, "requires": { "confbox": "^0.1.7", @@ -41689,9 +43099,9 @@ } }, "pnpm": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-9.6.0.tgz", - "integrity": "sha512-ONxvuo26NbOTQLlwARLC/h4S8QsXE0cVpKqYzPe7A152/Zgc8Ls4TfqY+NavVIHCvvL0Jmokv6IMNOtxR84LXg==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-9.9.0.tgz", + "integrity": "sha512-YMGKzROL/2ldM5vmrRP36TbupnRWYNTMSndtUkfFQNDt7hpWNpXBg6ZuuRfviPK0/rH8JfMqetytx6rzQ46ZwQ==", "dev": true }, "polished": { @@ -41709,9 +43119,9 @@ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" }, "postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", @@ -42013,9 +43423,9 @@ } }, "postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -42439,9 +43849,9 @@ "dev": true }, "qs": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", - "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { "side-channel": "^1.0.6" } @@ -42648,9 +44058,9 @@ } }, "react-focus-lock": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.12.1.tgz", - "integrity": "sha512-lfp8Dve4yJagkHiFrC1bGtib3mF2ktqwPJw4/WGcgPW+pJ/AVQA5X2vI7xgp13FcxFEpYBBHpXai/N2DBNC0Jw==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.2.tgz", + "integrity": "sha512-T/7bsofxYqnod2xadvuwjGKHOoL5GH7/EIPI5UyEvaU/c2CcphvGI371opFtuY/SYdbMsNiuF4HsHQ50nA/TKQ==", "dev": true, "requires": { "@babel/runtime": "^7.0.0", @@ -42689,9 +44099,9 @@ } }, "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -42764,9 +44174,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -42782,30 +44192,30 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } }, "react-router": { - "version": "6.25.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.25.1.tgz", - "integrity": "sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "dev": true, "requires": { - "@remix-run/router": "1.18.0" + "@remix-run/router": "1.19.1" } }, "react-router-dom": { - "version": "6.25.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.25.1.tgz", - "integrity": "sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "dev": true, "requires": { - "@remix-run/router": "1.18.0", - "react-router": "6.25.1" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" } }, "react-style-singleton": { @@ -42820,9 +44230,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -42960,6 +44370,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -42982,9 +44393,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" } } }, @@ -43601,9 +45012,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -44128,9 +45539,9 @@ } }, "spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==" + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==" }, "split": { "version": "1.0.1", @@ -44703,9 +46114,9 @@ } }, "terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "devOptional": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -44899,9 +46310,9 @@ } }, "tocbot": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", - "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.29.0.tgz", + "integrity": "sha512-E+8+lceJpWHJYKq+qFHbi+gmFdXZeOAliHFdgiIAUo68cr8ClReXAx7h9e3TcDM0kw9PSnBn3GAZEpRmRLZ93g==", "dev": true }, "toidentifier": { @@ -45070,9 +46481,9 @@ "dev": true }, "uglify-js": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.1.tgz", - "integrity": "sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "optional": true }, "unbox-primitive": { @@ -45250,13 +46661,11 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unplugin": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz", - "integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz", + "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==", "requires": { "acorn": "^8.12.1", - "chokidar": "^3.6.0", - "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.6.2" }, "dependencies": { @@ -45339,9 +46748,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -45373,9 +46782,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true } } @@ -45476,9 +46885,9 @@ }, "dependencies": { "@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true }, "unist-util-stringify-position": { @@ -45508,9 +46917,9 @@ } }, "watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -45543,12 +46952,11 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -45557,7 +46965,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -45635,7 +47043,8 @@ "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "devOptional": true }, "webpack-virtual-modules": { "version": "0.5.0", diff --git a/src/app/types.ts b/src/app/types.ts index f0c996bd..4b0d6153 100644 --- a/src/app/types.ts +++ b/src/app/types.ts @@ -159,6 +159,10 @@ export type AutocompleteWidgetProps = EuiComboBoxProps & ParameterObj & * Use the TS4NFDI Gateway API */ ts4nfdiGateway?: boolean; + /** + * Whether to show the api source in the result list or not. Default is true. Only when the API gateway is selected. + */ + showApiSource?: boolean; }; export type DataContentWidgetProps = ApiObj & ParameterObj; diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx index 554ffef2..57667f1b 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.stories.tsx @@ -17,6 +17,7 @@ export { UseAPIGatewayWithOLS, UseAPIGatewayWithOntoPortal, UseAPIGatewayWithSkosmos, + HideApiSourceApiGateway, WithDefaultsCompact, WithValue, WithCustomValue, diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx index 3b0e64b5..43214429 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx @@ -9,7 +9,8 @@ import { euiPaletteColorBlind, EuiHighlight, EuiHealth, - EuiProvider + EuiProvider, + EuiIcon } from "@elastic/eui"; import { QueryClient, QueryClientProvider, useQuery } from "react-query"; import { AutocompleteWidgetProps } from "../../../app/types"; @@ -30,6 +31,7 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { singleSelection, singleSuggestionRow, ts4nfdiGateway = false, + showApiSource = true, ...rest } = props; @@ -66,35 +68,22 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { return label; } - let hoverText = ""; + let prefix = (value.type === "ontology") + ? "Prefix: " + value.ontology_name + : "Prefix > Short form: " + value.ontology_name + " > " + value.short_form; + + let hoverText = `Type: ${value.type}\n\nLabel: ${value.label}\n\n${prefix}`; if (value.description != undefined) { - if (value.type === "ontology") { - hoverText = "Type: " + value.type + - "\n\nLabel: " + value.label + - "\n\nPrefix: " + value.ontology_name + - "\n\nDescription: " + value.description; - } else { - hoverText = "Type: " + value.type + - "\n\nLabel: " + value.label + - "\n\nPrefix > Short form: " + value.ontology_name + " > " + value.short_form + - "\n\nDescription: " + value.description; - } - } else { - if (value.type === "ontology") { - hoverText = "Type: " + value.type + - "\n\nLabel: " + value.label + - "\n\nPrefix: " + value.ontology_name; - } else { - hoverText = "type: " + value.type + - "\n\nLabel: " + value.label + - "\n\nPrefix > Short form: " + value.ontology_name + " > " + value.short_form; - } + hoverText += `\n\nDescription: ${value.description}`; + } + if (showApiSource && value.source_url && value.source_url !== ""){ + hoverText += "\n\nSource: " + value.source; + hoverText += "\n\nSource URL: " + value.source_url; } const renderOntology = () => { return ( {value.label} @@ -109,7 +98,6 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { return ( {value.label} @@ -119,12 +107,18 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { shortForm={value.short_form} colorFirst={"primary"} colorSecond={"success"} - /> - {!singleSuggestionRow && value.description ? - <> + /> + + {!singleSuggestionRow && value.description && + <>
{value.description.substring(0, 40) + "..."} - : ""} + + }
@@ -164,6 +158,7 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { undefined, undefined, parameter, + ts4nfdiGateway ).then((response) => { if (response) { @@ -181,7 +176,9 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: selection.getOntologyId(), type: selection.getType(), short_form: selection.getShortForm(), - description: selection.getDescription() + description: selection.getDescription(), + source: selection.getApiSourceName(), + source_url: selection.getApiSourceEndpoint() }, }); } @@ -200,7 +197,9 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: "", type: "", short_form: "", - description: "" + description: "", + source: "", + source_url: "" } }); } @@ -246,7 +245,9 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: selection.getOntologyId(), type: selection.getType(), short_form: selection.getShortForm(), - description: selection.getDescription() + description: selection.getDescription(), + source: selection.getApiSourceName(), + source_url: selection.getApiSourceEndpoint() } }) )); @@ -270,7 +271,8 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: "", type: "", short_form: x.value.short_form, - description: x.value.description + description: x.value.description, + source: x.value.source }; } else if (x.value.iri == "") { return { @@ -279,7 +281,8 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: "", type: "", short_form: "", - description: "" + description: "", + source: "" }; } else { return { @@ -288,7 +291,8 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: x.value.ontology_name, type: x.value.type, short_form: x.value.short_form, - description: x.value.description + description: x.value.description, + source: x.value.source }; } }) @@ -319,7 +323,8 @@ function AutocompleteWidget(props: AutocompleteWidgetProps) { ontology_name: "", type: "", short_form: "", - description: "" + description: "", + source: "" } }; @@ -370,6 +375,7 @@ function WrappedAutocompleteWidget(props: AutocompleteWidgetProps) { allowCustomTerms={props.allowCustomTerms} ts4nfdiGateway={props.ts4nfdiGateway} singleSuggestionRow={props.singleSuggestionRow} + showApiSource={props.showApiSource} /> diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts index d68f4151..00df801a 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetHTML.stories.ts @@ -35,6 +35,7 @@ window['SemLookPWidgets'].createAutocomplete( singleSelection:${args.singleSelection}, ts4nfdiGateway:${args.ts4nfdiGateway}, singleSuggestionRow:${args.singleSuggestionRow}, + showApiSource:${args.showApiSource}, }, document.querySelector('#autocomplete_widget_container_${num}') ) @@ -50,6 +51,7 @@ export { UseAPIGatewayWithOLS, UseAPIGatewayWithOntoPortal, UseAPIGatewayWithSkosmos, + HideApiSourceApiGateway, WithDefaultsCompact, WithValue, WithCustomValue, diff --git a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts index f7477a96..bcdf2a93 100644 --- a/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts +++ b/src/components/widgets/AutocompleteWidget/AutocompleteWidgetStories.ts @@ -3,10 +3,15 @@ import * as globals from '../../../app/globals'; import { action } from "@storybook/addon-actions"; import { allowCustomTermsArgType, - apiArgType, hasShortSelectedLabelArgType, parameterArgType, + apiArgType, + hasShortSelectedLabelArgType, + parameterArgType, placeholderArgType, preselectedArgType, - selectionChangedEventArgType, singleSelectionArgType, singleSuggestionRow, ts4nfdiGateway + selectionChangedEventArgType, showApiSourceArgType, + singleSelectionArgType, + singleSuggestionRowArgType, + ts4nfdiGatewayArgType } from "../../../stories/storyArgs"; export const AutocompleteWidgetStoryArgTypes = { @@ -19,8 +24,9 @@ export const AutocompleteWidgetStoryArgTypes = { ...hasShortSelectedLabelArgType, ...allowCustomTermsArgType, ...singleSelectionArgType, - ...ts4nfdiGateway, - ...singleSuggestionRow + ...ts4nfdiGatewayArgType, + ...singleSuggestionRowArgType, + ...showApiSourceArgType } } @@ -34,6 +40,7 @@ export const AutocompleteWidgetStoryArgsReact = { hasShortSelectedLabel: true, placeholder: "Search for a Concept", preselected: [], + showApiSource: true, parameter: "ontology=mesh,efo&type=class&collection=nfdi4health&fieldList=description,label,iri,ontology_name,type,short_form", }, }; @@ -48,6 +55,7 @@ export const AutocompleteWidgetStoryArgsHTML = { hasShortSelectedLabel: true, placeholder: "Search for a Concept", preselected: [], + showApiSource: true, parameter: "ontology=mesh,efo&type=class&collection=nfdi4health&fieldList=description,label,iri,ontology_name,type,short_form", }, }; @@ -79,6 +87,15 @@ export const UseAPIGatewayWithSkosmos = { }, } +export const HideApiSourceApiGateway = { + args: { + api: globals.GATEWAY_API_ENDPOINT, + ts4nfdiGateway: true, + showApiSource: false, + parameter: "database=ols&fieldList=description,label,iri,ontology_name,type,short_form" + }, +} + export const WithDefaultsCompact = { args: { singleSuggestionRow: true diff --git a/src/model/interfaces/SelectResult.ts b/src/model/interfaces/SelectResult.ts index 6a5bb167..b13be701 100644 --- a/src/model/interfaces/SelectResult.ts +++ b/src/model/interfaces/SelectResult.ts @@ -10,4 +10,6 @@ export interface SelectResult { getDescription(): string; getOntologyId(): string; getShortForm(): string; + getApiSourceName(): string; + getApiSourceEndpoint(): string; } \ No newline at end of file diff --git a/src/model/ols-model/OLSSelectResult.ts b/src/model/ols-model/OLSSelectResult.ts index 75692f6d..7ab3d426 100644 --- a/src/model/ols-model/OLSSelectResult.ts +++ b/src/model/ols-model/OLSSelectResult.ts @@ -57,5 +57,11 @@ export class OLSSelectResult implements SelectResult { return this.properties["short_form"]; } + getApiSourceName(): string { + return ""; + } + getApiSourceEndpoint(): string { + return "" + } } \ No newline at end of file diff --git a/src/model/ts4nfdi-model/Ts4nfdiSearchResult.ts b/src/model/ts4nfdi-model/Ts4nfdiSearchResult.ts index f18328c2..52bc7106 100644 --- a/src/model/ts4nfdi-model/Ts4nfdiSearchResult.ts +++ b/src/model/ts4nfdi-model/Ts4nfdiSearchResult.ts @@ -57,5 +57,11 @@ export class Ts4nfdiSearchResult implements SelectResult { return this.properties["short_form"]; } + getApiSourceName(): string { + return this.properties["source_name"]; + } + getApiSourceEndpoint(): string { + return this.properties["source"]; + } } \ No newline at end of file diff --git a/src/stories/storyArgs.ts b/src/stories/storyArgs.ts index 6834d9c9..45e414c8 100644 --- a/src/stories/storyArgs.ts +++ b/src/stories/storyArgs.ts @@ -211,14 +211,14 @@ export const singleSelectionArgType = { type: { summary: "boolean" } } }; -export const singleSuggestionRow = { +export const singleSuggestionRowArgType = { singleSelection: { required: false, description: "Display options in a compact format without descriptions - when this mode is activated, not all information is shown in order to save space.", type: { summary: "boolean" } } }; -export const ts4nfdiGateway = { +export const ts4nfdiGatewayArgType = { singleSelection: { required: false, description: "Use the TS4NFDI Gateway API", @@ -226,6 +226,14 @@ export const ts4nfdiGateway = { type: { summary: "boolean" } } }; +export const showApiSourceArgType = { + singleSelection: { + required: false, + description: "Whether to show the api source in the result list or not. Default is true. Only when the API gateway is selected.", + defaultValue: { summary: true }, + type: { summary: "boolean" } + } +}; export const hasTitleArgType = { hasTitle: { required: false,